From 6eb7c6a9a91b3521977932a5809001df041b7f77 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sat, 30 Jan 2021 20:46:34 -0500 Subject: [PATCH 1/6] +10% more effective top speed stat for all players, instead of just bots --- src/k_bot.c | 12 ++++++++++-- src/k_kart.c | 17 +++++------------ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/k_bot.c b/src/k_bot.c index a32a554e1..32f00c345 100644 --- a/src/k_bot.c +++ b/src/k_bot.c @@ -475,14 +475,22 @@ fixed_t K_BotFrictionRubberband(player_t *player, fixed_t frict) { fixed_t rubberband = K_BotRubberband(player) - FRACUNIT; fixed_t newfrict; + fixed_t frictionRatio; if (rubberband <= 0) { - // Never get stronger than normal friction + // Never get weaker than normal friction return frict; } - newfrict = FixedDiv(frict, FRACUNIT + (rubberband / 2)); + newfrict = FixedDiv(ORIG_FRICTION, FRACUNIT + (rubberband / 2)); + + if (frict != ORIG_FRICTION) + { + // Adjust for non-ORIG_FRICTION values + frictionRatio = FixedDiv(frict, ORIG_FRICTION); + newfrict = FixedMul(newfrict, frictionRatio); + } if (newfrict < 0) newfrict = 0; diff --git a/src/k_kart.c b/src/k_kart.c index 33355b26c..29fc1688b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2183,10 +2183,10 @@ fixed_t K_GetKartSpeedFromStat(UINT8 kartspeed) { const fixed_t xspd = (3*FRACUNIT)/64; fixed_t g_cc = K_GetKartGameSpeedScalar(gamespeed) + xspd; - fixed_t k_speed = 150; + fixed_t k_speed = 144; fixed_t finalspeed; - k_speed += kartspeed*3; // 153 - 177 + k_speed += kartspeed*6; // 150 - 198 finalspeed = FixedMul(k_speed<<14, g_cc); return finalspeed; @@ -2204,17 +2204,10 @@ fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower) finalspeed = FixedMul(finalspeed, FRACUNIT + (sphereAdd * player->spheres)); } - if (K_PlayerUsesBotMovement(player)) + if (K_PlayerUsesBotMovement(player) && player->botvars.rival == true) { - // Give top speed a buff for bots, since it's a fairly weak stat without drifting - fixed_t speedmul = ((player->kartspeed-1) * FRACUNIT / 8) / 10; // +10% for speed 9 - - if (player->botvars.rival == true) - { - speedmul += FRACUNIT/10; // +10% for rival - } - - finalspeed = FixedMul(finalspeed, FRACUNIT + speedmul); + // +10% top speed for the rival + finalspeed = FixedMul(finalspeed, 11*FRACUNIT/10); } if (player->mo && !P_MobjWasRemoved(player->mo)) From 4b5daa651330ad7b5673d698839d99c0d952a9ec Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 31 Jan 2021 00:54:57 -0500 Subject: [PATCH 2/6] Remove bot accel rubberbanding --- src/k_kart.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 29fc1688b..e0d83fa70 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2239,13 +2239,6 @@ fixed_t K_GetKartAccel(player_t *player) k_accel = FixedMul(k_accel, FRACUNIT + (sphereAdd * player->spheres)); } - if (K_PlayerUsesBotMovement(player)) - { - // Rubberbanding acceleration is waekened since it makes hits feel more meaningful - fixed_t rubberband = K_BotRubberband(player) - FRACUNIT; - k_accel = FixedMul(k_accel, FRACUNIT + (rubberband/2)); - } - return FixedMul(k_accel, FRACUNIT+player->kartstuff[k_accelboost]); } From bc75f935e3582ea6c2e9b44fc9f8e13505d2573c Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 31 Jan 2021 00:55:37 -0500 Subject: [PATCH 3/6] Nerf Metal/Sonic's tether top speed & acceleration in exchange --- src/k_kart.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index e0d83fa70..0d87dbe12 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2155,7 +2155,8 @@ static void K_GetKartBoostPower(player_t *player) if (player->kartstuff[k_draftpower] > 0) // Drafting { - fixed_t draftspeed = ((3*FRACUNIT)/10) + ((player->kartspeed-1) * (FRACUNIT/50)); // min is 30%, max is 46% + // 30% - 44%, each point of speed adds 1.75% + fixed_t draftspeed = ((3*FRACUNIT)/10) + ((player->kartspeed-1) * ((7*FRACUNIT)/400)); speedboost += FixedMul(draftspeed, player->kartstuff[k_draftpower]); // (Drafting suffers no boost stack penalty.) numboosts++; } @@ -2183,10 +2184,10 @@ fixed_t K_GetKartSpeedFromStat(UINT8 kartspeed) { const fixed_t xspd = (3*FRACUNIT)/64; fixed_t g_cc = K_GetKartGameSpeedScalar(gamespeed) + xspd; - fixed_t k_speed = 144; + fixed_t k_speed = 148; fixed_t finalspeed; - k_speed += kartspeed*6; // 150 - 198 + k_speed += kartspeed*4; // 152 - 184 finalspeed = FixedMul(k_speed<<14, g_cc); return finalspeed; @@ -2228,10 +2229,9 @@ fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower) fixed_t K_GetKartAccel(player_t *player) { - fixed_t k_accel = 32; // 36; + fixed_t k_accel = 121; - //k_accel += 3 * (9 - player->kartspeed); // 36 - 60 - k_accel += 4 * (9 - player->kartspeed); // 32 - 64 + k_accel += 17 * (9 - player->kartspeed); // 121 - 257 if (player->spheres > 0) { @@ -2239,7 +2239,7 @@ fixed_t K_GetKartAccel(player_t *player) k_accel = FixedMul(k_accel, FRACUNIT + (sphereAdd * player->spheres)); } - return FixedMul(k_accel, FRACUNIT+player->kartstuff[k_accelboost]); + return FixedMul(k_accel, (FRACUNIT + player->kartstuff[k_accelboost]) / 4); } UINT16 K_GetKartFlashing(player_t *player) From aefff1c9438af28b64a2d4584736bf35800c11c0 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 31 Jan 2021 17:58:18 -0500 Subject: [PATCH 4/6] Fix bots + friction --- src/k_bot.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/k_bot.c b/src/k_bot.c index 32f00c345..c7b115d2f 100644 --- a/src/k_bot.c +++ b/src/k_bot.c @@ -474,8 +474,7 @@ fixed_t K_BotTopSpeedRubberband(player_t *player) fixed_t K_BotFrictionRubberband(player_t *player, fixed_t frict) { fixed_t rubberband = K_BotRubberband(player) - FRACUNIT; - fixed_t newfrict; - fixed_t frictionRatio; + fixed_t origFrict, newFrict; if (rubberband <= 0) { @@ -483,21 +482,31 @@ fixed_t K_BotFrictionRubberband(player_t *player, fixed_t frict) return frict; } - newfrict = FixedDiv(ORIG_FRICTION, FRACUNIT + (rubberband / 2)); + origFrict = FixedDiv(ORIG_FRICTION, FRACUNIT + (rubberband / 2)); - if (frict != ORIG_FRICTION) + if (frict == ORIG_FRICTION) { - // Adjust for non-ORIG_FRICTION values - frictionRatio = FixedDiv(frict, ORIG_FRICTION); - newfrict = FixedMul(newfrict, frictionRatio); + newFrict = origFrict; + } + else + { + // Do some mumbo jumbo to make our friction value + // relative to what it WOULD be for ORIG_FRICTION. + // (I hate multiplicative friction :/) + + fixed_t offset = ORIG_FRICTION - frict; + fixed_t ratio = FixedDiv(frict, ORIG_FRICTION); + + offset = FixedDiv(offset, ratio); + newFrict = frict + offset; } - if (newfrict < 0) - newfrict = 0; - if (newfrict > FRACUNIT) - newfrict = FRACUNIT; + if (newFrict < 0) + newFrict = 0; + if (newFrict > FRACUNIT) + newFrict = FRACUNIT; - return newfrict; + return newFrict; } /*-------------------------------------------------- From 71d8ffb493216687a76e6dbaebe3e73eee360745 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 31 Jan 2021 20:11:44 -0500 Subject: [PATCH 5/6] Reduce max rubberband top speed from +100% to +25% --- src/k_bot.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/k_bot.c b/src/k_bot.c index c7b115d2f..21cd4f18e 100644 --- a/src/k_bot.c +++ b/src/k_bot.c @@ -422,11 +422,16 @@ fixed_t K_BotTopSpeedRubberband(player_t *player) { fixed_t rubberband = K_BotRubberband(player); - if (rubberband < FRACUNIT) + if (rubberband <= FRACUNIT) { // Never go below your regular top speed rubberband = FRACUNIT; } + else + { + // Max at +25% for level 9 bots + rubberband = FRACUNIT + ((rubberband - FRACUNIT) / 4); + } // Only allow you to go faster than your regular top speed if you're facing the right direction if (rubberband > FRACUNIT && player->mo != NULL && player->nextwaypoint != NULL) From 9cf77e12e3ec7caec36b19932b892383c6acf2ee Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 31 Jan 2021 22:05:54 -0500 Subject: [PATCH 6/6] BOTS CAN TOUCH STARPOSTS AGAIN THANK YOU MERGE --- src/p_inter.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/p_inter.c b/src/p_inter.c index bff509c89..5be3cc736 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -718,9 +718,6 @@ void P_TouchStarPost(mobj_t *post, player_t *player, boolean snaptopost) (void)snaptopost; - if (player->bot) - return; - // Player must have touched all previous starposts if (post->health - player->starpostnum > 1) {