mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Trickpanels: I don't even know who I am anymore
This commit is contained in:
parent
b946a66574
commit
aad6795ba7
9 changed files with 58 additions and 51 deletions
|
|
@ -648,6 +648,7 @@ struct player_t
|
|||
respawnvars_t respawn; // Respawn info
|
||||
mobj_t *ringShooter; // DEZ respawner object
|
||||
tic_t airtime; // Used to track just air time, but has evolved over time into a general "karted" timer. Rename this variable?
|
||||
tic_t lastairtime;
|
||||
UINT8 startboost; // (0 to 125) - Boost you get from start of race
|
||||
UINT8 dropdashboost; // Boost you get when holding A while respawning
|
||||
|
||||
|
|
|
|||
|
|
@ -23333,7 +23333,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
|
|
@ -23360,7 +23360,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
|
|
|
|||
46
src/k_kart.c
46
src/k_kart.c
|
|
@ -3243,11 +3243,6 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
ADDBOOST(8*FRACUNIT/10, 4*FRACUNIT, 2*SLIPTIDEHANDLING/5); // + 80% top speed, + 400% acceleration, +20% handling
|
||||
}
|
||||
|
||||
if (player->trickcharge)
|
||||
{
|
||||
ADDBOOST(0, FRACUNIT, 2*SLIPTIDEHANDLING/10); // 0% speed 100% accel 20% handle
|
||||
}
|
||||
|
||||
if (player->spindashboost) // Spindash boost
|
||||
{
|
||||
const fixed_t MAXCHARGESPEED = K_GetSpindashChargeSpeed(player);
|
||||
|
|
@ -3313,6 +3308,13 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
ADDBOOST(6*FRACUNIT/20, FRACUNIT, 0); // + 30% top speed, + 100% acceleration, +0% handling
|
||||
}
|
||||
|
||||
if (player->trickcharge)
|
||||
{
|
||||
// NB: This is an acceleration-only boost.
|
||||
// If this is applied earlier in the chain, it will diminish real speed boosts.
|
||||
ADDBOOST(0, FRACUNIT, 2*SLIPTIDEHANDLING/10); // 0% speed 100% accel 20% handle
|
||||
}
|
||||
|
||||
if (player->draftpower > 0) // Drafting
|
||||
{
|
||||
// 30% - 44%, each point of speed adds 1.75%
|
||||
|
|
@ -5218,16 +5220,14 @@ void K_SpawnDriftElectricSparks(player_t *player, int color, boolean shockwave)
|
|||
fixed_t sparkspeed = mobjinfo[MT_DRIFTELECTRICSPARK].speed;
|
||||
fixed_t sparkradius = 2 * shockscale * mobjinfo[MT_DRIFTELECTRICSPARK].radius;
|
||||
|
||||
if (player->trickcharge)
|
||||
if (player->trickcharge && !shockwave)
|
||||
{
|
||||
mobj_t *release = P_SpawnMobjFromMobj(mo, 0, 0, 0, MT_CHARGERELEASE);
|
||||
release->momx = mo->momx/2;
|
||||
release->momy = mo->momy/2;
|
||||
release->momz = mo->momz/2;
|
||||
release->angle = K_MomentumAngleReal(mo);
|
||||
P_SetTarget(&release->target, mo);
|
||||
release->tics = 40;
|
||||
release->scale /= 5;
|
||||
release->scalespeed = release->scale;
|
||||
release->tics = 10;
|
||||
release->destscale *= 2;
|
||||
release->scalespeed = release->scale/2;
|
||||
}
|
||||
|
||||
for (hdir = -1; hdir <= 1; hdir += 2)
|
||||
|
|
@ -5259,9 +5259,14 @@ void K_SpawnDriftElectricSparks(player_t *player, int color, boolean shockwave)
|
|||
P_SetScale(spark, shockscale * spark->scale);
|
||||
|
||||
if (shockwave)
|
||||
{
|
||||
spark->frame |= FF_ADD;
|
||||
}
|
||||
else if (player->trickcharge)
|
||||
spark->tics = 10;
|
||||
{
|
||||
spark->tics = 20;
|
||||
}
|
||||
|
||||
|
||||
sparkangle += ANGLE_90;
|
||||
K_ReduceVFX(spark, player);
|
||||
|
|
@ -8554,7 +8559,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
if (player->dotrickfx && !player->mo->hitlag)
|
||||
{
|
||||
int i;
|
||||
S_StartSound(player->mo, sfx_trick1);
|
||||
S_StartSoundAtVolume(player->mo, sfx_trick1, 255/2);
|
||||
|
||||
if (!player->trickcharge)
|
||||
{
|
||||
|
|
@ -8567,6 +8572,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
aura->extravalue2 = 1;
|
||||
else
|
||||
aura->renderflags |= RF_TRANS50;
|
||||
aura->cvmem = leveltime;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -10003,6 +10009,7 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
// And take away wavedash properties: advanced cornering demands advanced finesse
|
||||
player->wavedash = 0;
|
||||
player->wavedashboost = 0;
|
||||
player->trickcharge = 0;
|
||||
}
|
||||
else if ((player->pflags & PF_DRIFTINPUT) && player->drift != 0)
|
||||
{
|
||||
|
|
@ -12306,7 +12313,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
#define TRICKTHRESHOLD (KART_FULLTURN/4)
|
||||
if (aimingcompare < -TRICKTHRESHOLD) // side trick
|
||||
{
|
||||
S_StartSound(player->mo, sfx_trick0);
|
||||
S_StartSoundAtVolume(player->mo, sfx_trick0, 255/2);
|
||||
player->dotrickfx = true;
|
||||
|
||||
// Calculate speed boost decay:
|
||||
|
|
@ -12345,7 +12352,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
}
|
||||
else if (aimingcompare > TRICKTHRESHOLD) // forward/back trick
|
||||
{
|
||||
S_StartSound(player->mo, sfx_trick0);
|
||||
S_StartSoundAtVolume(player->mo, sfx_trick0, 255/2);
|
||||
player->dotrickfx = true;
|
||||
|
||||
// Calculate speed boost decay:
|
||||
|
|
@ -12495,7 +12502,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
{
|
||||
P_InstaThrust(player->mo, player->mo->angle, 2*abs(player->fastfall)/3 + 15*FRACUNIT);
|
||||
player->mo->hitlag = 3;
|
||||
S_StartSound(player->mo, sfx_gshba); // TODO
|
||||
S_StartSound(player->mo, sfx_gshba);
|
||||
player->fastfall = 0; // intentionally skip bounce
|
||||
player->trickcharge = 0;
|
||||
|
||||
|
|
@ -12510,12 +12517,13 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
else
|
||||
{
|
||||
S_StartSound(player->mo, sfx_s23c);
|
||||
K_SpawnDashDustRelease(player);
|
||||
|
||||
UINT8 award = TICRATE - player->trickboostdecay;
|
||||
|
||||
player->trickboost = award;
|
||||
K_AwardPlayerRings(player, award, true);
|
||||
K_AwardPlayerRings(player,
|
||||
(TICRATE-player->trickboostdecay) * player->lastairtime/3 / TICRATE, // Scale ring award by same amount as trickboost
|
||||
true);
|
||||
|
||||
if (player->trickpanel == TRICKSTATE_FORWARD)
|
||||
player->trickboostpower /= 18;
|
||||
|
|
|
|||
|
|
@ -128,8 +128,6 @@ void Obj_GuardBreakThink(mobj_t *fx);
|
|||
|
||||
void Obj_ChargeAuraThink(mobj_t *aura);
|
||||
void Obj_ChargeFallThink(mobj_t *charge);
|
||||
void Obj_ChargeFlickerThink(mobj_t *flicker);
|
||||
void Obj_ChargeSparkThink(mobj_t *spawk);
|
||||
void Obj_ChargeReleaseThink(mobj_t *release);
|
||||
void Obj_ChargeExtraThink(mobj_t *extra);
|
||||
|
||||
|
|
|
|||
|
|
@ -233,6 +233,8 @@ static int player_get(lua_State *L)
|
|||
lua_pushinteger(L, plr->lastpickuptype);
|
||||
else if (fastcmp(field,"airtime"))
|
||||
lua_pushinteger(L, plr->airtime);
|
||||
else if (fastcmp(field,"lastairtime"))
|
||||
lua_pushinteger(L, plr->lastairtime);
|
||||
else if (fastcmp(field,"flashing"))
|
||||
lua_pushinteger(L, plr->flashing);
|
||||
else if (fastcmp(field,"spinouttimer"))
|
||||
|
|
@ -725,6 +727,8 @@ static int player_set(lua_State *L)
|
|||
plr->airtime = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"airtime"))
|
||||
plr->airtime = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"lastairtime"))
|
||||
plr->lastairtime = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"flashing"))
|
||||
plr->flashing = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"spinouttimer"))
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
// xval1: destruction timer
|
||||
// xval2: master (spawns other visuals)
|
||||
// cvmem: spawn time (used to offset flash)
|
||||
void Obj_ChargeAuraThink (mobj_t *aura)
|
||||
{
|
||||
if (P_MobjWasRemoved(aura->target) || !aura->target->player || (aura->extravalue1 >= CHARGEAURA_BURSTTIME))
|
||||
|
|
@ -50,7 +51,7 @@ void Obj_ChargeAuraThink (mobj_t *aura)
|
|||
aura->renderflags |= RF_PAPERSPRITE|RF_ADD;
|
||||
|
||||
// fuck
|
||||
boolean forceinvisible = !!!(leveltime % 8);
|
||||
boolean forceinvisible = !!!((leveltime - aura->cvmem) % 4);
|
||||
if (aura->extravalue1 || !(player->driftcharge > K_GetKartDriftSparkValueForStage(player, 3)))
|
||||
forceinvisible = false;
|
||||
|
||||
|
|
@ -67,6 +68,7 @@ void Obj_ChargeAuraThink (mobj_t *aura)
|
|||
mo->scale*P_RandomRange(PR_DECORATION, -1*CHARGEAURA_SPARKRADIUS, CHARGEAURA_SPARKRADIUS),
|
||||
MT_CHARGESPARK);
|
||||
spark->frame = P_RandomRange(PR_DECORATION, 1, 5);
|
||||
spark->renderflags |= RF_FULLBRIGHT|RF_ADD;
|
||||
P_SetTarget(&spark->target, aura);
|
||||
P_SetScale(spark, 15*aura->scale/10);
|
||||
}
|
||||
|
|
@ -90,7 +92,6 @@ void Obj_ChargeFallThink (mobj_t *charge)
|
|||
else
|
||||
{
|
||||
mobj_t *mo = charge->target;
|
||||
player_t *player = mo->player;
|
||||
|
||||
// Follow player
|
||||
charge->flags &= ~(MF_NOCLIPTHING);
|
||||
|
|
@ -116,29 +117,31 @@ void Obj_ChargeFallThink (mobj_t *charge)
|
|||
}
|
||||
}
|
||||
|
||||
void Obj_ChargeFlickerThink (mobj_t *flicker)
|
||||
{
|
||||
// xd
|
||||
}
|
||||
|
||||
void Obj_ChargeSparkThink (mobj_t *spark)
|
||||
{
|
||||
// xd
|
||||
spark->renderflags |= RF_FULLBRIGHT|RF_ADD;
|
||||
}
|
||||
|
||||
// xval1: lifetime (used to offset from tracked player)
|
||||
void Obj_ChargeReleaseThink (mobj_t *release)
|
||||
{
|
||||
release->renderflags &= ~RF_TRANSMASK;
|
||||
if (release->tics < 10)
|
||||
release->renderflags |= (9 - release->tics)<<RF_TRANSSHIFT;
|
||||
release->rollangle += ANG30;
|
||||
if (release->tics < 36)
|
||||
release->renderflags |= (9 - release->tics/4)<<RF_TRANSSHIFT;
|
||||
release->rollangle += ANG15/2;
|
||||
|
||||
if (P_MobjWasRemoved(release->target) || !release->target->player)
|
||||
return;
|
||||
|
||||
release->extravalue1++;
|
||||
|
||||
fixed_t off = 8 * release->extravalue1 * release->target->scale;
|
||||
angle_t ang = K_MomentumAngle(release->target) + ANGLE_180;
|
||||
fixed_t xoff = FixedMul(off, FINECOSINE(ang >> ANGLETOFINESHIFT));
|
||||
fixed_t yoff = FixedMul(off, FINESINE(ang >> ANGLETOFINESHIFT));
|
||||
|
||||
P_MoveOrigin(release, release->target->x + xoff, release->target->y + yoff, release->target->z + release->target->height/2);
|
||||
}
|
||||
|
||||
void Obj_ChargeExtraThink (mobj_t *extra)
|
||||
{
|
||||
extra->renderflags &= ~RF_TRANSMASK;
|
||||
if (extra->tics < 10)
|
||||
extra->renderflags |= (9 - extra->tics)<<RF_TRANSSHIFT;
|
||||
if (extra->tics < 18)
|
||||
extra->renderflags |= (9 - extra->tics/2)<<RF_TRANSSHIFT;
|
||||
extra->rollangle += ANG30;
|
||||
}
|
||||
10
src/p_mobj.c
10
src/p_mobj.c
|
|
@ -8861,16 +8861,6 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
Obj_ChargeFallThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_CHARGEFLICKER:
|
||||
{
|
||||
Obj_ChargeFlickerThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_CHARGESPARK:
|
||||
{
|
||||
Obj_ChargeSparkThink(mobj);
|
||||
break;
|
||||
}
|
||||
case MT_CHARGERELEASE:
|
||||
{
|
||||
Obj_ChargeReleaseThink(mobj);
|
||||
|
|
|
|||
|
|
@ -401,6 +401,7 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
WRITEUINT32(save->p, K_GetWaypointHeapIndex(players[i].currentwaypoint));
|
||||
WRITEUINT32(save->p, K_GetWaypointHeapIndex(players[i].nextwaypoint));
|
||||
WRITEUINT32(save->p, players[i].airtime);
|
||||
WRITEUINT32(save->p, players[i].lastairtime);
|
||||
WRITEUINT8(save->p, players[i].startboost);
|
||||
WRITEUINT8(save->p, players[i].dropdashboost);
|
||||
|
||||
|
|
@ -936,6 +937,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
|||
players[i].currentwaypoint = (waypoint_t *)(size_t)READUINT32(save->p);
|
||||
players[i].nextwaypoint = (waypoint_t *)(size_t)READUINT32(save->p);
|
||||
players[i].airtime = READUINT32(save->p);
|
||||
players[i].lastairtime = READUINT32(save->p);
|
||||
players[i].startboost = READUINT8(save->p);
|
||||
players[i].dropdashboost = READUINT8(save->p);
|
||||
|
||||
|
|
|
|||
|
|
@ -4084,6 +4084,7 @@ void P_PlayerThink(player_t *player)
|
|||
if (P_IsObjectOnGround(player->mo)
|
||||
&& !P_PlayerInPain(player)) // This isn't airtime, but it's control loss all the same.
|
||||
{
|
||||
player->lastairtime = player->airtime;
|
||||
player->airtime = 0;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue