mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-01-22 06:32:48 +00:00
Let Sneakers stack with each other endlessly.
PROBABLY REALLY CONTROVERSIAL, so it's in this other branch... but it's tamer than it sounds, and it's *really* fun. https://cdn.discordapp.com/attachments/275750804227489794/718541704822784061/kart0158.gif https://cdn.discordapp.com/attachments/275750804227489794/718545963408687155/kart0161.gif https://cdn.discordapp.com/attachments/275750804227489794/718543467847876689/kart0160.gif
This commit is contained in:
parent
820d1f3ac6
commit
25c3774dc1
7 changed files with 56 additions and 35 deletions
|
|
@ -316,8 +316,8 @@ typedef enum
|
|||
k_stealingtimer, // You are stealing an item, this is your timer
|
||||
k_stolentimer, // You are being stolen from, this is your timer
|
||||
k_superring, // Spawn rings on top of you every tic!
|
||||
k_sneakertimer, // Duration of the Sneaker Boost itself
|
||||
k_levelbooster, // Duration of a level booster's boost (same as sneaker, but separated for boost stacking)
|
||||
k_sneakertimer, // Duration of a Sneaker Boost (from Sneakers or level boosters)
|
||||
k_numsneakers, // Number of stacked sneaker effects
|
||||
k_growshrinktimer, // > 0 = Big, < 0 = small
|
||||
k_squishedtimer, // Squished frame timer
|
||||
k_rocketsneakertimer, // Rocket Sneaker duration timer
|
||||
|
|
@ -391,9 +391,6 @@ typedef enum
|
|||
NUMKARTHUD
|
||||
} karthudtype_t;
|
||||
|
||||
// QUICKLY GET EITHER SNEAKER OR LEVEL BOOSTER SINCE THEY ARE FUNCTIONALLY IDENTICAL
|
||||
#define EITHERSNEAKER(p) (p->kartstuff[k_sneakertimer] || p->kartstuff[k_levelbooster])
|
||||
|
||||
// QUICKLY GET RING TOTAL, INCLUDING RINGS CURRENTLY IN THE PICKUP ANIMATION
|
||||
#define RINGTOTAL(p) (p->kartstuff[k_rings] + p->kartstuff[k_pickuprings])
|
||||
|
||||
|
|
|
|||
|
|
@ -8389,7 +8389,7 @@ static const char *const KARTSTUFF_LIST[] = {
|
|||
"STOLENTIMER",
|
||||
"SUPERRING",
|
||||
"SNEAKERTIMER",
|
||||
"LEVELBOOSTER",
|
||||
"NUMSNEAKERS",
|
||||
"GROWSHRINKTIMER",
|
||||
"SQUISHEDTIMER",
|
||||
"ROCKETSNEAKERTIMER",
|
||||
|
|
|
|||
|
|
@ -1430,7 +1430,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
|||
{
|
||||
// forward with key or button // SRB2kart - we use an accel/brake instead of forward/backward.
|
||||
axis = JoyAxis(AXISMOVE, ssplayer);
|
||||
if (InputDown(gc_accelerate, ssplayer) || (gamepadjoystickmove && axis > 0) || EITHERSNEAKER(player))
|
||||
if (InputDown(gc_accelerate, ssplayer) || (gamepadjoystickmove && axis > 0) || player->kartstuff[k_sneakertimer])
|
||||
{
|
||||
cmd->buttons |= BT_ACCELERATE;
|
||||
forward = forwardmove[1]; // 50
|
||||
|
|
@ -5104,7 +5104,7 @@ void G_ReadDemoTiccmd(ticcmd_t *cmd, INT32 playernum)
|
|||
|| (players[displayplayers[0]].respawn.state != RESPAWNST_NONE) // Respawning
|
||||
|| (players[displayplayers[0]].spectator || objectplacing)) // Not a physical player
|
||||
&& !(players[displayplayers[0]].kartstuff[k_spinouttimer]
|
||||
&& (players[displayplayers[0]].kartstuff[k_sneakertimer] || players[displayplayers[0]].kartstuff[k_levelbooster]))) // Spinning and boosting cancels out spinout
|
||||
&& players[displayplayers[0]].kartstuff[k_sneakertimer])) // Spinning and boosting cancels out spinout
|
||||
localangle[0] += (cmd->angleturn<<16);
|
||||
|
||||
if (!(demoflags & DF_GHOST) && *demo_p == DEMOMARKER)
|
||||
|
|
|
|||
70
src/k_kart.c
70
src/k_kart.c
|
|
@ -1925,7 +1925,7 @@ void K_MomentumToFacing(player_t *player)
|
|||
|
||||
boolean K_ApplyOffroad(player_t *player)
|
||||
{
|
||||
if (player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_hyudorotimer] || EITHERSNEAKER(player))
|
||||
if (player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_hyudorotimer] || player->kartstuff[k_sneakertimer])
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1962,29 +1962,44 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
accelboost += (a) / numboosts; \
|
||||
}
|
||||
|
||||
if (player->kartstuff[k_levelbooster]) // Level boosters
|
||||
ADDBOOST(FRACUNIT/2, 8*FRACUNIT); // + 50% top speed, + 800% acceleration
|
||||
|
||||
if (player->kartstuff[k_sneakertimer]) // Sneaker
|
||||
ADDBOOST(FRACUNIT/2, 8*FRACUNIT); // + 50% top speed, + 800% acceleration
|
||||
{
|
||||
UINT8 i;
|
||||
for (i = 0; i < player->kartstuff[k_numsneakers]; i++)
|
||||
{
|
||||
ADDBOOST(FRACUNIT/2, 8*FRACUNIT); // + 50% top speed, + 800% acceleration
|
||||
}
|
||||
}
|
||||
|
||||
if (player->kartstuff[k_invincibilitytimer]) // Invincibility
|
||||
ADDBOOST((3*FRACUNIT)/8, 3*FRACUNIT); // + 37.5% top speed, + 300% acceleration
|
||||
{
|
||||
ADDBOOST(3*FRACUNIT/8, 3*FRACUNIT); // + 37.5% top speed, + 300% acceleration
|
||||
}
|
||||
|
||||
if (player->kartstuff[k_flamedash]) // Flame Shield dash
|
||||
{
|
||||
ADDBOOST(K_FlameShieldDashVar(player->kartstuff[k_flamedash]), 3*FRACUNIT); // + infinite top speed, + 300% acceleration
|
||||
}
|
||||
|
||||
if (player->kartstuff[k_startboost]) // Startup Boost
|
||||
{
|
||||
ADDBOOST(FRACUNIT/4, 6*FRACUNIT); // + 25% top speed, + 600% acceleration
|
||||
}
|
||||
|
||||
if (player->kartstuff[k_driftboost]) // Drift Boost
|
||||
{
|
||||
ADDBOOST(FRACUNIT/4, 4*FRACUNIT); // + 25% top speed, + 400% acceleration
|
||||
}
|
||||
|
||||
if (player->kartstuff[k_ringboost]) // Ring Boost
|
||||
{
|
||||
ADDBOOST(FRACUNIT/5, 4*FRACUNIT); // + 20% top speed, + 400% acceleration
|
||||
}
|
||||
|
||||
if (player->kartstuff[k_eggmanexplode]) // Ready-to-explode
|
||||
ADDBOOST(FRACUNIT/5, FRACUNIT); // + 20% top speed, + 100% acceleration
|
||||
{
|
||||
ADDBOOST(3*FRACUNIT/20, FRACUNIT); // + 15% top speed, + 100% acceleration
|
||||
}
|
||||
|
||||
if (player->kartstuff[k_draftpower] > 0) // Drafting
|
||||
{
|
||||
|
|
@ -1997,9 +2012,13 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
|
||||
// value smoothing
|
||||
if (speedboost > player->kartstuff[k_speedboost])
|
||||
{
|
||||
player->kartstuff[k_speedboost] = speedboost;
|
||||
}
|
||||
else
|
||||
{
|
||||
player->kartstuff[k_speedboost] += (speedboost - player->kartstuff[k_speedboost]) / (TICRATE/2);
|
||||
}
|
||||
|
||||
player->kartstuff[k_accelboost] = accelboost;
|
||||
player->kartstuff[k_numboosts] = numboosts;
|
||||
|
|
@ -2122,7 +2141,7 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove
|
|||
// 0 with no gas, and
|
||||
// -25 when only braking.
|
||||
|
||||
if (EITHERSNEAKER(player))
|
||||
if (player->kartstuff[k_sneakertimer])
|
||||
forwardmove = 50;
|
||||
|
||||
finalspeed *= forwardmove/25;
|
||||
|
|
@ -2206,7 +2225,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source, INT32 type, mobj_t *inflicto
|
|||
K_PlayHitEmSound(source);
|
||||
|
||||
player->kartstuff[k_sneakertimer] = 0;
|
||||
//player->kartstuff[k_levelbooster] = 0;
|
||||
player->kartstuff[k_numsneakers] = 0;
|
||||
player->kartstuff[k_driftboost] = 0;
|
||||
player->kartstuff[k_ringboost] = 0;
|
||||
|
||||
|
|
@ -2353,7 +2372,7 @@ void K_SquishPlayer(player_t *player, mobj_t *source, mobj_t *inflictor)
|
|||
#endif
|
||||
|
||||
player->kartstuff[k_sneakertimer] = 0;
|
||||
player->kartstuff[k_levelbooster] = 0;
|
||||
player->kartstuff[k_numsneakers] = 0;
|
||||
player->kartstuff[k_driftboost] = 0;
|
||||
player->kartstuff[k_ringboost] = 0;
|
||||
|
||||
|
|
@ -2480,7 +2499,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source, mobj_t *inflictor) // A b
|
|||
player->mo->momx = player->mo->momy = 0;
|
||||
|
||||
player->kartstuff[k_sneakertimer] = 0;
|
||||
player->kartstuff[k_levelbooster] = 0;
|
||||
player->kartstuff[k_numsneakers] = 0;
|
||||
player->kartstuff[k_driftboost] = 0;
|
||||
player->kartstuff[k_ringboost] = 0;
|
||||
|
||||
|
|
@ -3924,7 +3943,7 @@ void K_DoSneaker(player_t *player, INT32 type)
|
|||
player->karthud[khud_destboostcam] = FixedMul(FRACUNIT, FixedDiv((intendedboost - player->kartstuff[k_speedboost]), intendedboost));
|
||||
}
|
||||
|
||||
if (!EITHERSNEAKER(player))
|
||||
if (!player->kartstuff[k_sneakertimer])
|
||||
{
|
||||
if (type == 2)
|
||||
{
|
||||
|
|
@ -3958,10 +3977,11 @@ void K_DoSneaker(player_t *player, INT32 type)
|
|||
{
|
||||
player->pflags |= PF_ATTACKDOWN;
|
||||
K_PlayBoostTaunt(player->mo);
|
||||
player->kartstuff[k_sneakertimer] = sneakertime;
|
||||
|
||||
}
|
||||
else
|
||||
player->kartstuff[k_levelbooster] = sneakertime;
|
||||
|
||||
player->kartstuff[k_sneakertimer] = sneakertime;
|
||||
player->kartstuff[k_numsneakers]++;
|
||||
|
||||
// set angle for spun out players:
|
||||
player->kartstuff[k_boostangle] = (INT32)player->mo->angle;
|
||||
|
|
@ -4067,7 +4087,7 @@ void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed, UINT8 sound)
|
|||
thrust = 72<<FRACBITS;
|
||||
if (mo->player->kartstuff[k_pogospring] != 2)
|
||||
{
|
||||
if (EITHERSNEAKER(mo->player))
|
||||
if (mo->player->kartstuff[k_sneakertimer])
|
||||
thrust = FixedMul(thrust, (5*FRACUNIT)/4);
|
||||
else if (mo->player->kartstuff[k_invincibilitytimer])
|
||||
thrust = FixedMul(thrust, (9*FRACUNIT)/8);
|
||||
|
|
@ -5270,7 +5290,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
if (player->speed > 0)
|
||||
{
|
||||
// Speed lines
|
||||
if (EITHERSNEAKER(player) || player->kartstuff[k_ringboost]
|
||||
if (player->kartstuff[k_sneakertimer] || player->kartstuff[k_ringboost]
|
||||
|| player->kartstuff[k_driftboost] || player->kartstuff[k_startboost]
|
||||
|| player->kartstuff[k_eggmanexplode])
|
||||
{
|
||||
|
|
@ -5486,7 +5506,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
{
|
||||
if ((P_IsObjectOnGround(player->mo)
|
||||
|| (player->kartstuff[k_spinouttype] != 0))
|
||||
&& (!EITHERSNEAKER(player)))
|
||||
&& (!player->kartstuff[k_sneakertimer]))
|
||||
{
|
||||
player->kartstuff[k_spinouttimer]--;
|
||||
if (player->kartstuff[k_wipeoutslow] > 1)
|
||||
|
|
@ -5525,15 +5545,19 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
player->kartstuff[k_ringboost]--;
|
||||
|
||||
if (player->kartstuff[k_sneakertimer])
|
||||
{
|
||||
player->kartstuff[k_sneakertimer]--;
|
||||
|
||||
if (player->kartstuff[k_levelbooster])
|
||||
player->kartstuff[k_levelbooster]--;
|
||||
if (player->kartstuff[k_sneakertimer] <= 0)
|
||||
{
|
||||
player->kartstuff[k_numsneakers] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (player->kartstuff[k_flamedash])
|
||||
player->kartstuff[k_flamedash]--;
|
||||
|
||||
if (EITHERSNEAKER(player) && player->kartstuff[k_wipeoutslow] > 0 && player->kartstuff[k_wipeoutslow] < wipeoutslowtime+1)
|
||||
if (player->kartstuff[k_sneakertimer] && player->kartstuff[k_wipeoutslow] > 0 && player->kartstuff[k_wipeoutslow] < wipeoutslowtime+1)
|
||||
player->kartstuff[k_wipeoutslow] = wipeoutslowtime+1;
|
||||
|
||||
if (player->kartstuff[k_floorboost])
|
||||
|
|
@ -6226,7 +6250,7 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
|
|||
return turnvalue;
|
||||
}
|
||||
|
||||
if (EITHERSNEAKER(player) || player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_growshrinktimer] > 0)
|
||||
if (player->kartstuff[k_sneakertimer] || player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_growshrinktimer] > 0)
|
||||
{
|
||||
turnvalue = 5*turnvalue/4;
|
||||
}
|
||||
|
|
@ -6465,7 +6489,7 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
player->kartstuff[k_driftend] = 0;
|
||||
}
|
||||
|
||||
if ((!EITHERSNEAKER(player))
|
||||
if ((!player->kartstuff[k_sneakertimer])
|
||||
|| (!player->cmd.driftturn)
|
||||
|| (!player->kartstuff[k_aizdriftstrat])
|
||||
|| (player->cmd.driftturn > 0) != (player->kartstuff[k_aizdriftstrat] > 0))
|
||||
|
|
|
|||
|
|
@ -3153,6 +3153,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
|| inflictor->type == MT_SMK_THWOMP || inflictor->player))
|
||||
{
|
||||
player->kartstuff[k_sneakertimer] = 0;
|
||||
player->kartstuff[k_numsneakers] = 0;
|
||||
|
||||
K_SpinPlayer(player, source, 1, inflictor, false);
|
||||
K_KartPainEnergyFling(player);
|
||||
|
|
|
|||
|
|
@ -8348,10 +8348,9 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
|
||||
if (p)
|
||||
{
|
||||
if (p->kartstuff[k_sneakertimer] > mobj->movecount
|
||||
|| p->kartstuff[k_levelbooster] > mobj->movecount)
|
||||
if (p->kartstuff[k_sneakertimer] > mobj->movecount)
|
||||
P_SetMobjState(mobj, S_BOOSTFLAME);
|
||||
mobj->movecount = max(p->kartstuff[k_sneakertimer], p->kartstuff[k_levelbooster]);
|
||||
mobj->movecount = p->kartstuff[k_sneakertimer];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6251,7 +6251,7 @@ static void P_MovePlayer(player_t *player)
|
|||
////////////////////////////
|
||||
|
||||
// SRB2kart - Drifting smoke and fire
|
||||
if ((EITHERSNEAKER(player) || player->kartstuff[k_flamedash])
|
||||
if ((player->kartstuff[k_sneakertimer] || player->kartstuff[k_flamedash])
|
||||
&& onground && (leveltime & 1))
|
||||
K_SpawnBoostTrail(player);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue