Implement ring spam nerf
Less impactful in vanilla + rings. With Chaining and Stacking on however this makes a big difference since it prevents you from having a large stack count forever if you can keep chugging rings
This commit is contained in:
parent
457527d77a
commit
6a122b0600
4 changed files with 31 additions and 4 deletions
|
|
@ -675,6 +675,7 @@ struct player_t
|
|||
UINT8 pickuprings; // Number of rings being picked up before added to the counter (prevents rings from being deleted forever over 20)
|
||||
UINT8 ringdelay; // (0 to 3) - 3 tic delay between every ring usage
|
||||
UINT16 ringboost; // Ring boost timer
|
||||
UINT16 ringtime; // The current Ring boost timer if it wasn't capped. Used for spam prevention measures.
|
||||
UINT16 superring; // Spawn rings on top of you every tic!
|
||||
UINT8 nextringaward; // When should we spawn our next superring ring?
|
||||
UINT8 ringvolume; // When consuming lots of rings, lower the sound a little.
|
||||
|
|
|
|||
22
src/k_kart.c
22
src/k_kart.c
|
|
@ -7524,12 +7524,18 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
player->ringdelay--;
|
||||
|
||||
if (P_PlayerInPain(player))
|
||||
{
|
||||
player->ringboost = 0;
|
||||
player->ringtime = 0;
|
||||
}
|
||||
else if (player->ringboost)
|
||||
{
|
||||
K_HandleRingDeincrement(player, chainingactive);
|
||||
}
|
||||
|
||||
if (!player->ringboost && !player->chaintimer)
|
||||
player->ringtime = 0;
|
||||
|
||||
if (player->sneakertimer)
|
||||
player->sneakertimer = K_ChainOrDeincrementTime(player, player->sneakertimer, 1, false);
|
||||
|
||||
|
|
@ -9075,6 +9081,7 @@ static void K_UpdatePlayerWaypoints(player_t *const player)
|
|||
INT32 K_GetKartRingPower(player_t *player, boolean boosted)
|
||||
{
|
||||
fixed_t ringPower = ((9 - player->kartspeed) + (9 - player->kartweight)) * (FRACUNIT/2);
|
||||
UINT16 finalPower = 0;
|
||||
|
||||
if (boosted == true)
|
||||
{
|
||||
|
|
@ -9087,7 +9094,20 @@ INT32 K_GetKartRingPower(player_t *player, boolean boosted)
|
|||
ringPower += 1;
|
||||
}
|
||||
|
||||
return max(ringPower / FRACUNIT, 1);
|
||||
finalPower = max(ringPower / FRACUNIT, 1);
|
||||
|
||||
// the base is 4 tics
|
||||
finalPower += 3;
|
||||
|
||||
// If you use more then 20 rings at a time, you start gaining less ring timer..
|
||||
if (player->ringtime == finalPower*20)
|
||||
S_StartSound(NULL, sfx_cdfm66);
|
||||
else if (player->ringtime > finalPower*20)
|
||||
{
|
||||
finalPower = 2;
|
||||
}
|
||||
|
||||
return finalPower;
|
||||
}
|
||||
|
||||
// Returns false if this player being placed here causes them to collide with any other player
|
||||
|
|
|
|||
|
|
@ -3171,7 +3171,8 @@ void A_AttractChase(mobj_t *actor)
|
|||
{
|
||||
|
||||
// Base add is 4 tics for 9,9, adds 1 tic for each point closer to the 1,1 end
|
||||
actor->target->player->ringboost += K_GetKartRingPower(actor->target->player, true) + 3;
|
||||
actor->target->player->ringboost += K_GetKartRingPower(actor->target->player, true);
|
||||
actor->target->player->ringtime += K_GetKartRingPower(actor->target->player, true);
|
||||
S_StartSoundAtVolume(actor->target, sfx_s1b5, actor->target->player->ringvolume);
|
||||
|
||||
if (actor->target->player->rings <= 10)
|
||||
|
|
@ -3204,7 +3205,10 @@ void A_AttractChase(mobj_t *actor)
|
|||
if (actor->extravalue1 >= 16)
|
||||
{
|
||||
if (!P_GivePlayerRings(actor->target->player, 1)) // returns 0 if addition failed
|
||||
actor->target->player->ringboost += K_GetKartRingPower(actor->target->player, true) + 3;
|
||||
{
|
||||
actor->target->player->ringboost += K_GetKartRingPower(actor->target->player, true);
|
||||
actor->target->player->ringtime += K_GetKartRingPower(actor->target->player, true);
|
||||
}
|
||||
|
||||
if (actor->target->player->ringboost > (4*TICRATE + TICRATE/2))
|
||||
actor->target->player->ringboost = (4*TICRATE + TICRATE/2);
|
||||
|
|
|
|||
|
|
@ -315,6 +315,7 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
WRITEUINT8(save->p, players[i].pickuprings);
|
||||
WRITEUINT8(save->p, players[i].ringdelay);
|
||||
WRITEUINT16(save->p, players[i].ringboost);
|
||||
WRITEUINT16(save->p, players[i].ringtime);
|
||||
WRITEUINT16(save->p, players[i].superring);
|
||||
WRITEUINT8(save->p, players[i].nextringaward);
|
||||
WRITEUINT8(save->p, players[i].ringvolume);
|
||||
|
|
@ -652,7 +653,8 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
|||
players[i].rings = READSINT8(save->p);
|
||||
players[i].pickuprings = READUINT8(save->p);
|
||||
players[i].ringdelay = READUINT8(save->p);
|
||||
players[i].ringboost = READUINT16(save->p);;
|
||||
players[i].ringboost = READUINT16(save->p);
|
||||
players[i].ringtime = READUINT16(save->p);;
|
||||
players[i].superring = READUINT16(save->p);
|
||||
players[i].nextringaward = READUINT8(save->p);
|
||||
players[i].ringvolume = READUINT8(save->p);
|
||||
|
|
|
|||
Loading…
Reference in a new issue