Buff eggbox speed, allow contact transfers

This commit is contained in:
AJ Martinez 2023-02-21 23:00:56 -07:00
parent c41d0dee32
commit 00aa69ca0a
6 changed files with 50 additions and 2 deletions

View file

@ -659,6 +659,8 @@ struct player_t
UINT8 shrinkLaserDelay;
UINT8 eggmanTransferDelay;
mobj_t *stumbleIndicator;
#ifdef HWRENDER

View file

@ -1231,6 +1231,9 @@ static boolean K_HasInfiniteTether(player_t *player)
return true;
}
if (player->eggmanexplode > 0)
return true;
return false;
}
@ -3150,7 +3153,7 @@ static void K_GetKartBoostPower(player_t *player)
if (player->eggmanexplode) // Ready-to-explode
{
ADDBOOST(3*FRACUNIT/20, FRACUNIT, 0); // + 15% top speed, + 100% acceleration, +0% handling
ADDBOOST(6*FRACUNIT/20, FRACUNIT, 0); // + 30% top speed, + 100% acceleration, +0% handling
}
if (player->draftpower > 0) // Drafting
@ -7708,6 +7711,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
if (player->shrinkLaserDelay)
player->shrinkLaserDelay--;
if (player->eggmanTransferDelay)
player->eggmanTransferDelay--;
if (player->ringdelay)
player->ringdelay--;
@ -7895,6 +7901,8 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
else
{
player->eggmanexplode--;
if (player->eggmanexplode == 5*TICRATE/2)
S_StartSound(player->mo, sfx_s3k53);
if (player->eggmanexplode <= 0)
{
mobj_t *eggsexplode;
@ -11304,4 +11312,28 @@ void K_UpdateMobjItemOverlay(mobj_t *part, SINT8 itemType, UINT8 itemCount)
}
}
void K_EggmanTransfer(player_t *source, player_t *victim)
{
if (victim->eggmanTransferDelay)
return;
if (victim->eggmanexplode)
return;
K_AddHitLag(victim->mo, 2, true);
victim->eggmanexplode = 4*TICRATE;
victim->itemRoulette.eggman = false;
victim->itemRoulette.active = false;
if (P_IsDisplayPlayer(victim) && !demo.freecam)
S_StartSound(NULL, sfx_itrole);
K_AddHitLag(source->mo, 2, true);
source->eggmanexplode = 0;
source->itemRoulette.eggman = false;
source->itemRoulette.active = false;
source->eggmanTransferDelay = 10;
S_StopSoundByID(source->mo, sfx_s3k53);
}
//}

View file

@ -201,6 +201,8 @@ void K_UnsetItemOut(player_t *player);
void K_UpdateMobjItemOverlay(mobj_t *part, SINT8 itemType, UINT8 itemCount);
void K_EggmanTransfer(player_t *source, player_t *victim);
#ifdef __cplusplus
} // extern "C"
#endif

View file

@ -1434,7 +1434,7 @@ void K_KartItemRoulette(player_t *const player, ticcmd_t *const cmd)
if (roulette->elapsed > TICRATE>>1) // Prevent accidental immediate item confirm
{
if (roulette->elapsed > TICRATE<<4)
if (roulette->elapsed > TICRATE<<4 || (roulette->eggman && roulette->elapsed > TICRATE*4))
{
// Waited way too long, forcefully confirm the item.
confirmItem = true;

View file

@ -1410,6 +1410,14 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing)
K_PvPTouchDamage(tm.thing, thing);
}
if (thing->player->eggmanexplode)
{
K_EggmanTransfer(thing->player, tm.thing->player);
} else if (tm.thing->player->eggmanexplode)
{
K_EggmanTransfer(tm.thing->player, thing->player);
}
return BMIT_CONTINUE;
}
else if (thing->type == MT_SPECIAL_UFO)

View file

@ -393,6 +393,8 @@ static void P_NetArchivePlayers(savebuffer_t *save)
WRITEUINT8(save->p, players[i].shrinkLaserDelay);
WRITEUINT8(save->p, players[i].eggmanTransferDelay);
// respawnvars_t
WRITEUINT8(save->p, players[i].respawn.state);
WRITEUINT32(save->p, K_GetWaypointHeapIndex(players[i].respawn.wp));
@ -746,6 +748,8 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
players[i].shrinkLaserDelay = READUINT8(save->p);
players[i].eggmanTransferDelay = READUINT8(save->p);
// respawnvars_t
players[i].respawn.state = READUINT8(save->p);
players[i].respawn.wp = (waypoint_t *)(size_t)READUINT32(save->p);