From db4bb74c424e1267fd2dd3f2493f6b0985389410 Mon Sep 17 00:00:00 2001 From: SteelT Date: Fri, 26 Nov 2021 23:13:17 -0500 Subject: [PATCH 1/3] All springs give spring grease --- src/d_player.h | 2 +- src/k_kart.c | 2 +- src/p_map.c | 21 +++++++++------------ 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index dd765bb0b..b8add36aa 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -390,7 +390,7 @@ typedef struct player_s fixed_t offroad; // In Super Mario Kart, going offroad has lee-way of about 1 second before you start losing speed UINT8 waterskip; // Water skipping counter - UINT16 tiregrease; // Reduced friction timer after hitting a horizontal spring + UINT16 tiregrease; // Reduced friction timer after hitting a spring UINT16 springstars; // Spawn stars around a player when they hit a spring UINT16 springcolor; // Color of spring stars UINT8 dashpadcooldown; // Separate the vanilla SA-style dash pads from using flashing diff --git a/src/k_kart.c b/src/k_kart.c index 3d46bbfca..20e1df91f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8342,7 +8342,7 @@ void K_AdjustPlayerFriction(player_t *player) return; } - // Reduce friction after hitting a horizontal spring + // Reduce friction after hitting a spring if (player->tiregrease) { player->mo->friction += ((FRACUNIT - prevfriction) / greasetics) * player->tiregrease; diff --git a/src/p_map.c b/src/p_map.c index 829393d32..28c747997 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -347,20 +347,17 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) if (object->player) { - // Less friction when hitting horizontal springs - if (!vertispeed) + // Less friction when hitting springs + if (!object->player->tiregrease) { - if (!object->player->tiregrease) + UINT8 i; + for (i = 0; i < 2; i++) { - UINT8 i; - for (i = 0; i < 2; i++) - { - mobj_t *grease; - grease = P_SpawnMobj(object->x, object->y, object->z, MT_TIREGREASE); - P_SetTarget(&grease->target, object); - grease->angle = K_MomentumAngle(object); - grease->extravalue1 = i; - } + mobj_t *grease; + grease = P_SpawnMobj(object->x, object->y, object->z, MT_TIREGREASE); + P_SetTarget(&grease->target, object); + grease->angle = K_MomentumAngle(object); + grease->extravalue1 = i; } object->player->tiregrease = greasetics; //FixedMul(greasetics << FRACBITS, finalSpeed/72) >> FRACBITS From d1a5a829806c84352ddfaac59fd388e1dc77db2b Mon Sep 17 00:00:00 2001 From: SteelT Date: Fri, 26 Nov 2021 23:44:06 -0500 Subject: [PATCH 2/3] Spring grease vfx is no longer visible when you're airborne --- src/p_mobj.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/p_mobj.c b/src/p_mobj.c index 34b48dc9c..2204003b4 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6889,6 +6889,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj) z); mobj->angle = ang; + if (!P_IsObjectOnGround(mobj->target)) + mobj->renderflags |= RF_DONTDRAW; + if (leveltime & 1) mobj->renderflags |= RF_DONTDRAW; From 0d3a1b72cb4535ebfce2662d16f78e618f6b7711 Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 27 Nov 2021 03:05:04 -0800 Subject: [PATCH 3/3] Apply grease to vertical only springs too --- src/p_map.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/p_map.c b/src/p_map.c index 28c747997..ff83a22a4 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -345,25 +345,6 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) } } - if (object->player) - { - // Less friction when hitting springs - if (!object->player->tiregrease) - { - UINT8 i; - for (i = 0; i < 2; i++) - { - mobj_t *grease; - grease = P_SpawnMobj(object->x, object->y, object->z, MT_TIREGREASE); - P_SetTarget(&grease->target, object); - grease->angle = K_MomentumAngle(object); - grease->extravalue1 = i; - } - - object->player->tiregrease = greasetics; //FixedMul(greasetics << FRACBITS, finalSpeed/72) >> FRACBITS - } - } - // Horizontal speed is used as a minimum thrust, not a direct replacement finalSpeed = max(objectSpeed, finalSpeed); @@ -386,6 +367,22 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) object->player->springstars = max(vertispeed, horizspeed) / FRACUNIT / 2; object->player->springcolor = starcolor; + + // Less friction when hitting springs + if (!object->player->tiregrease) + { + UINT8 i; + for (i = 0; i < 2; i++) + { + mobj_t *grease; + grease = P_SpawnMobj(object->x, object->y, object->z, MT_TIREGREASE); + P_SetTarget(&grease->target, object); + grease->angle = K_MomentumAngle(object); + grease->extravalue1 = i; + } + + object->player->tiregrease = greasetics; //FixedMul(greasetics << FRACBITS, finalSpeed/72) >> FRACBITS + } } return true;