Merge branch 'karma-gate' into 'master'

Elimination timer for karma bombs during overtime

See merge request KartKrew/Kart!459
This commit is contained in:
James R 2021-11-28 00:20:52 +00:00
commit 9d485e17e7
7 changed files with 23 additions and 10 deletions

View file

@ -468,6 +468,7 @@ typedef struct player_s
UINT8 emeralds; UINT8 emeralds;
UINT8 bumpers; UINT8 bumpers;
INT16 karmadelay; INT16 karmadelay;
tic_t overtimekarma; // time to live in overtime comeback
INT16 spheres; INT16 spheres;
SINT8 glanceDir; // Direction the player is trying to look backwards in SINT8 glanceDir; // Direction the player is trying to look backwards in

View file

@ -2281,6 +2281,7 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
p->growshrinktimer = growshrinktimer; p->growshrinktimer = growshrinktimer;
p->bumpers = bumper; p->bumpers = bumper;
p->karmadelay = comebacktime; p->karmadelay = comebacktime;
p->overtimekarma = 0;
p->eggmanblame = -1; p->eggmanblame = -1;
p->lastdraft = -1; p->lastdraft = -1;
p->karthud[khud_fault] = khudfault; p->karthud[khud_fault] = khudfault;

View file

@ -179,7 +179,7 @@ mobj_t *K_SpawnChaosEmerald(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT
P_Thrust(emerald, P_Thrust(emerald,
FixedAngle(P_RandomFixed() * 180) + angle, FixedAngle(P_RandomFixed() * 180) + angle,
32 * mapobjectscale); 24 * mapobjectscale);
emerald->momz = flip * 24 * mapobjectscale; emerald->momz = flip * 24 * mapobjectscale;
if (emerald->eflags & MFE_UNDERWATER) if (emerald->eflags & MFE_UNDERWATER)
@ -288,12 +288,6 @@ void K_RunPaperItemSpawners(void)
if (overtime == true) if (overtime == true)
{ {
if (battleovertime.radius < 512*mapobjectscale)
{
// Barrier has closed in too much
return;
}
// Double frequency of items // Double frequency of items
interval /= 2; interval /= 2;
} }
@ -557,10 +551,12 @@ void K_RunBattleOvertime(void)
} }
else if (battleovertime.radius > 0) else if (battleovertime.radius > 0)
{ {
if (battleovertime.radius > 2*mapobjectscale) const fixed_t minradius = 768 * mapobjectscale;
if (battleovertime.radius > minradius)
battleovertime.radius -= 2*mapobjectscale; battleovertime.radius -= 2*mapobjectscale;
else else
battleovertime.radius = 0; battleovertime.radius = minradius;
} }
if (battleovertime.radius > 0) if (battleovertime.radius > 0)

View file

@ -2460,7 +2460,8 @@ static void K_drawKartBumpersOrKarma(void)
else else
V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|V_SLIDEIN|splitflags, kp_bumpersticker, colormap); V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|V_SLIDEIN|splitflags, kp_bumpersticker, colormap);
V_DrawKartString(LAPS_X+47, LAPS_Y+3, V_HUDTRANS|V_SLIDEIN|splitflags, va("%d/%d", stplyr->bumpers, maxbumper)); // TODO BETTER HUD
V_DrawKartString(LAPS_X+47, LAPS_Y+3, V_HUDTRANS|V_SLIDEIN|splitflags, va("%d/%d %d", stplyr->bumpers, maxbumper, stplyr->overtimekarma / TICRATE));
} }
} }
} }

View file

@ -6890,6 +6890,14 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
K_KartPlayerHUDUpdate(player); K_KartPlayerHUDUpdate(player);
if (battleovertime.enabled && !(player->pflags & PF_ELIMINATED) && player->bumpers <= 0 && player->karmadelay <= 0)
{
if (player->overtimekarma)
player->overtimekarma--;
else
P_DamageMobj(player->mo, NULL, NULL, 1, DMG_TIMEOVER);
}
if ((battleovertime.enabled >= 10*TICRATE) && !(player->pflags & PF_ELIMINATED)) if ((battleovertime.enabled >= 10*TICRATE) && !(player->pflags & PF_ELIMINATED))
{ {
fixed_t distanceToBarrier = 0; fixed_t distanceToBarrier = 0;

View file

@ -1980,6 +1980,10 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
// Destroy any remainder bumpers from the player for karma comeback damage // Destroy any remainder bumpers from the player for karma comeback damage
K_DestroyBumpers(player, player->bumpers); K_DestroyBumpers(player, player->bumpers);
} }
else
{
source->player->overtimekarma += 5*TICRATE;
}
if (damagetype & DMG_STEAL) if (damagetype & DMG_STEAL)
{ {

View file

@ -317,6 +317,7 @@ static void P_NetArchivePlayers(void)
WRITEUINT8(save_p, players[i].emeralds); WRITEUINT8(save_p, players[i].emeralds);
WRITEUINT8(save_p, players[i].bumpers); WRITEUINT8(save_p, players[i].bumpers);
WRITEINT16(save_p, players[i].karmadelay); WRITEINT16(save_p, players[i].karmadelay);
WRITEUINT32(save_p, players[i].overtimekarma);
WRITEINT16(save_p, players[i].spheres); WRITEINT16(save_p, players[i].spheres);
WRITESINT8(save_p, players[i].glanceDir); WRITESINT8(save_p, players[i].glanceDir);
@ -574,6 +575,7 @@ static void P_NetUnArchivePlayers(void)
players[i].emeralds = READUINT8(save_p); players[i].emeralds = READUINT8(save_p);
players[i].bumpers = READUINT8(save_p); players[i].bumpers = READUINT8(save_p);
players[i].karmadelay = READINT16(save_p); players[i].karmadelay = READINT16(save_p);
players[i].overtimekarma = READUINT32(save_p);
players[i].spheres = READINT16(save_p); players[i].spheres = READINT16(save_p);
players[i].glanceDir = READSINT8(save_p); players[i].glanceDir = READSINT8(save_p);