From 7cdce4324b05a891259fd5c11afc82a795825333 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Tue, 14 Aug 2018 20:10:32 -0400 Subject: [PATCH] Attempt 1: Guesstimate sphere pop rate and use that as the Capsule handling duration --- src/p_mobj.c | 7 +++++-- src/p_user.c | 28 +++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index b88692d76..08b705de9 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8751,8 +8751,11 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) nummaprings = -1; // no perfect bonus, rings are free break; case MT_EGGCAPSULE: - mobj->extravalue1 = -1; // sphere timer for how long a player has been at the capsule - mobj->extravalue2 = -1; // tic timer for how long a player has been at the capsule + mobj->extravalue1 = -1; // sphere timer for how long a player has been at the capsule + mobj->extravalue2 = -1; // tic timer for how long a player has been at the capsule + mobj->lastlook = -1; + mobj->cusval = -1; + mobj->movecount = -1; break; case MT_REDTEAMRING: mobj->color = skincolor_redteam; diff --git a/src/p_user.c b/src/p_user.c index 35274f7a9..a6cefd85e 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -5995,14 +5995,32 @@ static void P_DoNiGHTSCapsule(player_t *player) && player->mo->y == player->capsule->y && player->mo->z == player->capsule->z+(player->capsule->height/3)) { + if (player->capsule->lastlook < 0) + { + INT32 popduration = max(60 - player->capsule->extravalue2, 1); + INT32 spherecount = min(player->spheres, player->capsule->health); + player->capsule->lastlook = max(FixedRound(FixedDiv(spherecount, popduration))/FRACUNIT, 1); + player->capsule->cusval = max(FixedFloor(FixedDiv(popduration, spherecount))/FRACUNIT, 1); + player->capsule->movecount = player->capsule->extravalue2; + } + if (player->spheres > 0) { - player->spheres--; - player->capsule->health--; - player->capsule->extravalue1++; + if (!((player->capsule->extravalue2 - player->capsule->movecount) % player->capsule->cusval)) + { + player->spheres -= player->capsule->lastlook; + player->capsule->health -= player->capsule->lastlook; + player->capsule->extravalue1 += player->capsule->lastlook; + } + + if (player->spheres < 0) + player->spheres = 0; + + if (player->capsule->health < 0) + player->capsule->health = 0; // Spawn a 'pop' for every 5 rings you deposit - if (!(player->capsule->extravalue1 % 5)) + if (!((player->capsule->extravalue2 - player->capsule->movecount) % 5)) S_StartSound(P_SpawnMobj(player->capsule->x + ((P_SignedRandom()/2)<capsule->y + ((P_SignedRandom()/2)<capsule->z + (player->capsule->height/2) + ((P_SignedRandom()/2)<texttimer = 4*TICRATE; player->textvar = 3; // Get more rings! player->capsule->reactiontime = 0; - player->capsule->extravalue1 = player->capsule->extravalue2 = -1; + player->capsule->extravalue1 = player->capsule->extravalue2 = player->capsule->lastlook = player->capsule->cusval = player->capsule->movecount = -1; } } else