From 555fbbe2f5d7d26e82e663f86db72780811630a7 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 26 Oct 2018 00:51:58 -0400 Subject: [PATCH 1/7] Speed up spinout based on timer left --- src/p_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index 0f89f826..3b7410a5 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -6657,7 +6657,7 @@ static void P_MovePlayer(player_t *player) if (player->mo->state != &states[S_KART_SPIN]) P_SetPlayerMobjState(player->mo, S_KART_SPIN); - player->frameangle -= ANGLE_22h; + player->frameangle -= (ANGLE_11hh * min(8, player->kartstuff[k_spinouttimer]/8)); } else if (player->powers[pw_nocontrol] && player->pflags & PF_SKIDDOWN) { From 27f118a06c7974a4a77d156d682c3c44903f18dc Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 26 Oct 2018 00:55:20 -0400 Subject: [PATCH 2/7] Adjust spinout times to face your forward about 90% of the time --- src/k_kart.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 76670f17..33c954b2 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1849,7 +1849,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source, INT32 type, boolean trapitem if (player->kartstuff[k_spinouttype] <= 0) { - player->kartstuff[k_spinouttimer] = 3*TICRATE/2; // Banana Spinout + player->kartstuff[k_spinouttimer] = (3*TICRATE/2)+2; // Banana Spinout // At spinout, player speed is increased to 1/4 their regular speed, moving them forward if (player->speed < K_GetKartSpeed(player, true)/4) @@ -1858,7 +1858,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source, INT32 type, boolean trapitem S_StartSound(player->mo, sfx_slip); } else - player->kartstuff[k_spinouttimer] = TICRATE+20; // Wipeout + player->kartstuff[k_spinouttimer] = TICRATE+27; // Wipeout player->powers[pw_flashing] = K_GetKartFlashing(player); @@ -2032,7 +2032,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source, mobj_t *inflictor) // A b if (inflictor && inflictor->type == MT_SPBEXPLOSION && inflictor->extravalue1) { - player->kartstuff[k_spinouttimer] = (3*player->kartstuff[k_spinouttimer])/2; + player->kartstuff[k_spinouttimer] = ((3*player->kartstuff[k_spinouttimer])/2)+1; player->mo->momz *= 2; } From 240d7a44c1482ffa3f3c76fd7d8fa2bb692e3782 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 26 Oct 2018 00:56:02 -0400 Subject: [PATCH 3/7] CRITICAL BUGFIX Make sure flashing tics don't go down WHILE you're in a hit animation (wipeout, squished) --- src/k_kart.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 33c954b2..bb9ac47b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3956,6 +3956,18 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) player->kartstuff[k_timeovercam] = 0; + // Make ABSOLUTELY SURE that your flashing tics don't get set WHILE you're still in hit animations. + if (player->kartstuff[k_spinouttimer] != 0 + || player->kartstuff[k_wipeoutslow] != 0 + || player->kartstuff[k_squishedtimer] != 0) + { + player->powers[pw_flashing] = K_GetKartFlashing(player); + } + else if (player->powers[pw_flashing] == K_GetKartFlashing(player)) + { + player->powers[pw_flashing]--; + } + if (player->kartstuff[k_spinouttimer]) { if ((P_IsObjectOnGround(player->mo) || player->kartstuff[k_spinouttype] == 1) @@ -3983,9 +3995,6 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) } } - if (player->kartstuff[k_spinouttimer] == 0 && player->powers[pw_flashing] == K_GetKartFlashing(player)) - player->powers[pw_flashing]--; - /*if (player->kartstuff[k_thunderanim]) player->kartstuff[k_thunderanim]--;*/ From 6dd7718d6e091e35c9035f7eba15b2ffe2eebe2a Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 26 Oct 2018 01:07:14 -0400 Subject: [PATCH 4/7] More consistent face-forward Needs it to still land in a close ballpark, so the timer changes are still needed, but this makes it less prone to error --- src/p_user.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index 3b7410a5..ac4847e7 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -6654,10 +6654,15 @@ static void P_MovePlayer(player_t *player) } else if (player->kartstuff[k_spinouttimer] > 0 || player->pflags & PF_SLIDING) { + INT32 speed = max(1, min(8, player->kartstuff[k_spinouttimer]/8)); + if (player->mo->state != &states[S_KART_SPIN]) P_SetPlayerMobjState(player->mo, S_KART_SPIN); - player->frameangle -= (ANGLE_11hh * min(8, player->kartstuff[k_spinouttimer]/8)); + if (speed == 1 && abs(player->mo->angle - player->frameangle) < ANGLE_22h) + player->frameangle = player->mo->angle; // Face forward at the end of the animation + else + player->frameangle -= (ANGLE_11hh * speed); } else if (player->powers[pw_nocontrol] && player->pflags & PF_SKIDDOWN) { From 8058b7774334a186217ea32bf817efc761bcb3d2 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 26 Oct 2018 01:07:54 -0400 Subject: [PATCH 5/7] Combine spinout & wipeout timers Turns out they were only 1 tic apart originally, sooo --- src/k_kart.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index bb9ac47b..35044002 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1847,19 +1847,15 @@ void K_SpinPlayer(player_t *player, mobj_t *source, INT32 type, boolean trapitem player->kartstuff[k_spinouttype] = type; - if (player->kartstuff[k_spinouttype] <= 0) + if (player->kartstuff[k_spinouttype] <= 0) // type 0 is spinout, type 1 is wipeout { - player->kartstuff[k_spinouttimer] = (3*TICRATE/2)+2; // Banana Spinout - // At spinout, player speed is increased to 1/4 their regular speed, moving them forward if (player->speed < K_GetKartSpeed(player, true)/4) P_InstaThrust(player->mo, player->mo->angle, FixedMul(K_GetKartSpeed(player, true)/4, player->mo->scale)); - S_StartSound(player->mo, sfx_slip); } - else - player->kartstuff[k_spinouttimer] = TICRATE+27; // Wipeout + player->kartstuff[k_spinouttimer] = (3*TICRATE/2)+2; player->powers[pw_flashing] = K_GetKartFlashing(player); if (player->mo->state != &states[S_KART_SPIN]) From 3d760271e369decb2c6561ac68e3d794fb04c6b4 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 27 Oct 2018 21:41:45 +0100 Subject: [PATCH 6/7] Fix the issue with sliding I identified this morning. Also, apply it to being in a zoom tube, too! For extra forwards compatibility with all the terrible SRB2 Riders ports that are almost an inevitability. --- src/p_user.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index ac4847e7..ef214e4f 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -6652,7 +6652,13 @@ static void P_MovePlayer(player_t *player) if (player->mo->state != &states[S_KART_SQUISH]) P_SetPlayerMobjState(player->mo, S_KART_SQUISH); } - else if (player->kartstuff[k_spinouttimer] > 0 || player->pflags & PF_SLIDING) + else if ((player->pflags & PF_SLIDING) || (player->mo->tracer && player->mo->tracer->type == MT_TUBEWAYPOINT)) + { + if (player->mo->state != &states[S_KART_SPIN]) + P_SetPlayerMobjState(player->mo, S_KART_SPIN); + player->frameangle -= ANGLE_22h; + } + else if (player->kartstuff[k_spinouttimer] > 0) { INT32 speed = max(1, min(8, player->kartstuff[k_spinouttimer]/8)); From e8410b2575e1752549dae3efbddf7d9240972841 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 27 Oct 2018 22:05:15 +0100 Subject: [PATCH 7/7] Fix and then subsequently disable the zoom tube angle setting stuff. --- src/p_user.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index ef214e4f..42833e96 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -6652,7 +6652,7 @@ static void P_MovePlayer(player_t *player) if (player->mo->state != &states[S_KART_SQUISH]) P_SetPlayerMobjState(player->mo, S_KART_SQUISH); } - else if ((player->pflags & PF_SLIDING) || (player->mo->tracer && player->mo->tracer->type == MT_TUBEWAYPOINT)) + else if (player->pflags & PF_SLIDING) { if (player->mo->state != &states[S_KART_SPIN]) P_SetPlayerMobjState(player->mo, S_KART_SPIN); @@ -7346,7 +7346,7 @@ static void P_DoZoomTube(player_t *player) fixed_t dist; boolean reverse; - player->mo->height = P_GetPlayerSpinHeight(player); + //player->mo->height = P_GetPlayerSpinHeight(player); if (player->speed > 0) reverse = false; @@ -7451,6 +7451,11 @@ static void P_DoZoomTube(player_t *player) else if (player == &players[fourthdisplayplayer]) localangle4 = player->mo->angle; } +#if 0 + if (player->mo->state != &states[S_KART_SPIN]) + P_SetPlayerMobjState(player->mo, S_KART_SPIN); + player->frameangle -= ANGLE_22h; +#endif } //