From 5c55201b082d67cc2d66d262f9b206139fe5ceea Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Thu, 2 May 2019 14:14:54 -0400 Subject: [PATCH] Scale draft distances based on game speed --- src/k_kart.c | 75 +++++++++++++++------------------------------------- src/k_kart.h | 1 + src/p_mobj.c | 5 +--- 3 files changed, 23 insertions(+), 58 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 32c27cec5..62a874027 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -600,6 +600,15 @@ boolean K_IsPlayerWanted(player_t *player) return false; } +fixed_t K_GetKartGameSpeedScalar(SINT8 value) +{ + // Easy = 81.25% + // Normal = 100% + // Hard = 118.75% + // Nightmare = 137.5% ?!?! + return ((13 + (3*value)) << FRACBITS) / 16; +} + //{ SRB2kart Roulette Code - Position Based #define NUMKARTODDS 80 @@ -1644,6 +1653,7 @@ static void K_UpdateDraft(player_t *player) draftdistance = (2048 + (512 * (9 - player->kartweight))) * player->mo->scale; if (player->speed < topspd) draftdistance = FixedMul(draftdistance, FixedDiv(player->speed, topspd)); + draftdistance = FixedMul(draftdistance, K_GetKartGameSpeedScalar(gamespeed)); // Let's hunt for players to draft off of! for (i = 0; i < MAXPLAYERS; i++) @@ -2210,28 +2220,12 @@ static void K_GetKartBoostPower(player_t *player) fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower) { + const fixed_t xspd = (3*FRACUNIT)/64; + fixed_t g_cc = K_GetKartGameSpeedScalar(gamespeed) + xspd; fixed_t k_speed = 150; - fixed_t g_cc = FRACUNIT; - fixed_t xspd = 3072; // 4.6875 aka 3/64 UINT8 kartspeed = player->kartspeed; fixed_t finalspeed; - if (doboostpower && !player->kartstuff[k_pogospring] && !P_IsObjectOnGround(player->mo)) - return (75*mapobjectscale); // air speed cap - - switch (gamespeed) - { - case 0: - g_cc = 53248 + xspd; // 50cc = 81.25 + 4.69 = 85.94% - break; - case 2: - g_cc = 77824 + xspd; // 150cc = 118.75 + 4.69 = 123.44% - break; - default: - g_cc = 65536 + xspd; // 100cc = 100.00 + 4.69 = 104.69% - break; - } - if (G_BattleGametype() && player->kartstuff[k_bumper] <= 0) kartspeed = 1; @@ -2298,6 +2292,9 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove newspeed = minspeed; } + if (!P_IsObjectOnGround(player->mo) && newspeed > 75*mapobjectscale) + newspeed = 75*mapobjectscale; + finalspeed = newspeed - oldspeed; // forwardmove is: @@ -2309,10 +2306,10 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove finalspeed *= forwardmove/25; finalspeed /= 2; - if (forwardmove < 0 && finalspeed > FRACUNIT*2) + if (forwardmove < 0 && finalspeed > mapobjectscale*2) return finalspeed/2; else if (forwardmove < 0) - return -FRACUNIT/2; + return -mapobjectscale/2; if (finalspeed < 0) finalspeed = 0; @@ -3448,29 +3445,10 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map // Figure out projectile speed by game speed if (missile && mapthing != MT_BALLHOG) // Trying to keep compatability... - { - PROJSPEED = mobjinfo[mapthing].speed; - if (gamespeed == 0) - PROJSPEED = FixedMul(PROJSPEED, FRACUNIT-FRACUNIT/4); - else if (gamespeed == 2) - PROJSPEED = FixedMul(PROJSPEED, FRACUNIT+FRACUNIT/4); - PROJSPEED = FixedMul(PROJSPEED, mapobjectscale); - } + PROJSPEED = FixedMul(mobjinfo[mapthing].speed, FRACUNIT + ((gamespeed-1) * (FRACUNIT/4))); else - { - switch (gamespeed) - { - case 0: - PROJSPEED = 68*mapobjectscale; // Avg Speed is 34 - break; - case 2: - PROJSPEED = 96*mapobjectscale; // Avg Speed is 48 - break; - default: - PROJSPEED = 82*mapobjectscale; // Avg Speed is 41 - break; - } - } + PROJSPEED = (82 + ((gamespeed-1) * 14)) * FRACUNIT; // Avg Speed is 41 in Normal + PROJSPEED = FixedMul(PROJSPEED, mapobjectscale); if (altthrow) { @@ -3684,18 +3662,7 @@ void K_PuntMine(mobj_t *thismine, mobj_t *punter) if (!mine || P_MobjWasRemoved(mine)) return; - switch (gamespeed) - { - case 0: - spd = 68*mapobjectscale; // Avg Speed is 34 - break; - case 2: - spd = 96*mapobjectscale; // Avg Speed is 48 - break; - default: - spd = 82*mapobjectscale; // Avg Speed is 41 - break; - } + spd = (82 + ((gamespeed-1) * 14))*mapobjectscale; // Avg Speed is 41 in Normal mine->flags |= MF_NOCLIPTHING; diff --git a/src/k_kart.h b/src/k_kart.h index f1d165523..db00d8841 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -22,6 +22,7 @@ void K_RegisterKartStuff(void); boolean K_IsPlayerLosing(player_t *player); boolean K_IsPlayerWanted(player_t *player); +fixed_t K_GetKartGameSpeedScalar(UINT8 value); void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid); void K_KartPainEnergyFling(player_t *player); void K_FlipFromObject(mobj_t *mo, mobj_t *master); diff --git a/src/p_mobj.c b/src/p_mobj.c index e62632533..c7a8c7d5d 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -7997,10 +7997,7 @@ void P_MobjThinker(mobj_t *mobj) if (leveltime % TICRATE == 0) S_StartSound(mobj, mobj->info->activesound); - if (gamespeed == 0) - distbarrier = FixedMul(distbarrier, FRACUNIT-FRACUNIT/4); - else if (gamespeed == 2) - distbarrier = FixedMul(distbarrier, FRACUNIT+FRACUNIT/4); + distbarrier = FixedMul(distbarrier, FRACUNIT + ((gamespeed-1) * (FRACUNIT/4))); if (G_RaceGametype() && mobj->tracer) {