From d936c7aed9c242b219bf6a33bb23cb6631b7e8b7 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Wed, 14 Jun 2023 10:29:19 -0400 Subject: [PATCH 1/3] Milky Way terrain `OutRun 48.0` on Terrain block will make that texture add 48 units to driving top speed. --- src/d_player.h | 2 ++ src/k_kart.c | 30 ++++++++++++++++++++---------- src/k_terrain.c | 7 +++++++ src/k_terrain.h | 1 + src/p_user.c | 5 +++++ 5 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 877f65c59..be2b96a70 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -752,6 +752,8 @@ struct player_t boolean markedfordeath; + fixed_t outrun; // Milky Way road effect + uint8_t public_key[PUBKEYLENGTH]; #ifdef HWRENDER diff --git a/src/k_kart.c b/src/k_kart.c index 33fcd8819..31646d16a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3337,6 +3337,11 @@ fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower, boolean dorubberb finalspeed = FixedMul(finalspeed, mapobjectscale); + if (dorubberband == true && K_PlayerUsesBotMovement(player) == true) + { + finalspeed = FixedMul(finalspeed, player->botvars.rubberband); + } + if (doboostpower == true) { if (mobjValid == true) @@ -3346,11 +3351,12 @@ fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower, boolean dorubberb } finalspeed = FixedMul(finalspeed, player->boostpower + player->speedboost); - } - if (dorubberband == true && K_PlayerUsesBotMovement(player) == true) - { - finalspeed = FixedMul(finalspeed, player->botvars.rubberband); + if (mobjValid == true && player->outrun != 0) + { + // Milky Way's roads + finalspeed += FixedMul(player->outrun, K_GrowShrinkSpeedMul(player)); + } } return finalspeed; @@ -3369,18 +3375,22 @@ fixed_t K_GetKartAccel(player_t *player) k_accel += 17 * stat; // 121 - 257 - if (K_PodiumSequence() == true) - { - return FixedMul(k_accel, FRACUNIT / 4); - } - // Marble Garden Top gets 1200% accel if (player->curshield == KSHIELD_TOP) { k_accel *= 12; } - return FixedMul(k_accel, (FRACUNIT + player->accelboost) / 4); + if (K_PodiumSequence() == true) + { + k_accel = FixedMul(k_accel, FRACUNIT / 4); + } + else + { + k_accel = FixedMul(k_accel, (FRACUNIT + player->accelboost) / 4); + } + + return k_accel; } UINT16 K_GetKartFlashing(player_t *player) diff --git a/src/k_terrain.c b/src/k_terrain.c index 55a6be6a4..00bf76b08 100644 --- a/src/k_terrain.c +++ b/src/k_terrain.c @@ -455,6 +455,9 @@ void K_ProcessTerrainEffect(mobj_t *mo) return; } + // Milky Way road effect + player->outrun = terrain->outrun + (48*FRACUNIT); + // Damage effects if (terrain->damageType > 0) { @@ -1688,6 +1691,10 @@ static void K_ParseTerrainParameter(size_t i, char *param, char *val) { terrain->springStarColor = get_number(val); } + else if (stricmp(param, "outrun") == 0 || stricmp(param, "speedIncrease") == 0) + { + terrain->outrun = FLOAT_TO_FIXED(atof(val)); + } else if (stricmp(param, "floorClip") == 0) { terrain->floorClip = FLOAT_TO_FIXED(atof(val)); diff --git a/src/k_terrain.h b/src/k_terrain.h index e3cce83ad..5a9dcb25c 100644 --- a/src/k_terrain.h +++ b/src/k_terrain.h @@ -122,6 +122,7 @@ struct terrain_t angle_t speedPadAngle; // Speed pad angle fixed_t springStrength; // Spring strength UINT16 springStarColor; // Spring star color + fixed_t outrun; // Raise top speed by this amount, for super fast road. fixed_t floorClip; // Offset for sprites on this ground UINT32 flags; // Flag values (see: terrain_flags_t) }; diff --git a/src/p_user.c b/src/p_user.c index a415d6c98..c4535efb8 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4609,6 +4609,11 @@ void P_PlayerAfterThink(player_t *player) } #endif + if (P_IsObjectOnGround(player->mo) == true) + { + player->outrun = 0; + } + #ifdef SECTORSPECIALSAFTERTHINK if (player->onconveyor != 1 || !P_IsObjectOnGround(player->mo)) player->onconveyor = 0; From 6d1a3de24394a9886e8431ddc17e1d9528824739 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Wed, 14 Jun 2023 10:37:05 -0400 Subject: [PATCH 2/3] Add outrun to netsave --- src/k_terrain.c | 2 +- src/p_saveg.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/k_terrain.c b/src/k_terrain.c index 00bf76b08..f9114f75c 100644 --- a/src/k_terrain.c +++ b/src/k_terrain.c @@ -456,7 +456,7 @@ void K_ProcessTerrainEffect(mobj_t *mo) } // Milky Way road effect - player->outrun = terrain->outrun + (48*FRACUNIT); + player->outrun = terrain->outrun; // Damage effects if (terrain->damageType > 0) diff --git a/src/p_saveg.c b/src/p_saveg.c index ba096a480..368ec5742 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -433,6 +433,8 @@ static void P_NetArchivePlayers(savebuffer_t *save) WRITEUINT8(save->p, players[i].markedfordeath); + WRITEFIXED(save->p, players[i].outrun); + // respawnvars_t WRITEUINT8(save->p, players[i].respawn.state); WRITEUINT32(save->p, K_GetWaypointHeapIndex(players[i].respawn.wp)); @@ -828,6 +830,8 @@ static void P_NetUnArchivePlayers(savebuffer_t *save) players[i].markedfordeath = READUINT8(save->p); + players[i].outrun = READFIXED(save->p); + // respawnvars_t players[i].respawn.state = READUINT8(save->p); players[i].respawn.wp = (waypoint_t *)(size_t)READUINT32(save->p); From a8467a22ce257c293e6abbf9a50add967b5ee1a4 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Thu, 15 Jun 2023 12:12:41 -0400 Subject: [PATCH 3/3] Fix speedometer in outrun mode --- src/k_kart.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 31646d16a..595d1f2b8 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3301,6 +3301,7 @@ fixed_t K_GetKartSpeedFromStat(UINT8 kartspeed) fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower, boolean dorubberband) { const boolean mobjValid = (player->mo != NULL && P_MobjWasRemoved(player->mo) == false); + const fixed_t physicsScale = mobjValid ? K_GrowShrinkSpeedMul(player) : FRACUNIT; fixed_t finalspeed = 0; if (K_PodiumSequence() == true) @@ -3344,19 +3345,17 @@ fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower, boolean dorubberb if (doboostpower == true) { - if (mobjValid == true) - { - // Scale with the player. - finalspeed = FixedMul(finalspeed, K_GrowShrinkSpeedMul(player)); - } + // Scale with the player. + finalspeed = FixedMul(finalspeed, physicsScale); + // Add speed boosts. finalspeed = FixedMul(finalspeed, player->boostpower + player->speedboost); + } - if (mobjValid == true && player->outrun != 0) - { - // Milky Way's roads - finalspeed += FixedMul(player->outrun, K_GrowShrinkSpeedMul(player)); - } + if (player->outrun != 0) + { + // Milky Way's roads + finalspeed += FixedMul(player->outrun, physicsScale); } return finalspeed;