From c44d4c78f1d57710f6efa3bebeece682156dc3c2 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 13 Jul 2018 20:45:18 -0400 Subject: [PATCH] Sping panel tweaks - Spring panels have a higher minimum forward speed, and you can no longer drop below that speed. - New, separate type of spring panel that has a maximum speed cap, for small jumps. - Unrelated: The SMK Donut Plains bushes now have much less thinker overhead. - Unrelated: Fixed my earlier attempt at getting momentum redirect to work when you just hit the ground. --- src/info.c | 6 +++--- src/k_kart.c | 35 +++++++++++++++++++++++++++-------- src/p_spec.c | 34 +++++++++++++++++++++++++++++----- 3 files changed, 59 insertions(+), 16 deletions(-) diff --git a/src/info.c b/src/info.c index dca6f868..930e4be9 100644 --- a/src/info.c +++ b/src/info.c @@ -15944,7 +15944,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass 0, // damage sfx_None, // activesound - MF_NOGRAVITY|MF_SCENERY, // flags + MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOTHINK, // flags S_NULL // raisestate }, @@ -15971,7 +15971,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass 0, // damage sfx_None, // activesound - MF_NOGRAVITY|MF_SCENERY, // flags + MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOTHINK, // flags S_NULL // raisestate }, @@ -15998,7 +15998,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass 0, // damage sfx_None, // activesound - MF_NOGRAVITY|MF_SCENERY, // flags + MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOTHINK, // flags S_NULL // raisestate }, diff --git a/src/k_kart.c b/src/k_kart.c index b39a3137..a4792d3e 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1303,8 +1303,9 @@ void K_MomentumToFacing(player_t *player) dangle = InvAngle(dangle); // If you aren't on the ground or are moving in too different of a direction don't do this - if ((!P_IsObjectOnGround(player->mo)) - || (dangle > ANGLE_90 && !(player->mo->eflags & MFE_JUSTHITFLOOR))) + if (player->mo->eflags & MFE_JUSTHITFLOOR) + ; // Just hit floor ALWAYS redirects + else if (!P_IsObjectOnGround(player->mo) || dangle > ANGLE_90) return; P_Thrust(player->mo, player->mo->angle, player->speed - FixedMul(player->speed, player->mo->friction)); @@ -1443,6 +1444,19 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove // ACCELCODE!!!1!11! oldspeed = R_PointToDist2(0, 0, player->rmomx, player->rmomy); // FixedMul(P_AproxDistance(player->rmomx, player->rmomy), player->mo->scale); newspeed = FixedDiv(FixedDiv(FixedMul(oldspeed, accelmax - p_accel) + FixedMul(p_speed, p_accel), accelmax), ORIG_FRICTION); + + if (player->kartstuff[k_pogospring]) // Pogo Spring minimum/maximum thrust + { + const fixed_t scale = mapheaderinfo[gamemap-1]->mobj_scale + abs(player->mo->scale - mapheaderinfo[gamemap-1]->mobj_scale); + const fixed_t minspeed = 24*scale; + const fixed_t maxspeed = 36*scale; + + if (newspeed > maxspeed && player->kartstuff[k_pogospring] == 2) + newspeed = maxspeed; + if (newspeed < minspeed) + newspeed = minspeed; + } + finalspeed = newspeed - oldspeed; // forwardmove is: @@ -2460,6 +2474,8 @@ static void K_DoSPB(player_t *victim, player_t *source) void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed) { + fixed_t scale = mapheaderinfo[gamemap-1]->mobj_scale + abs(mo->scale - mapheaderinfo[gamemap-1]->mobj_scale); + if (mo->player && mo->player->spectator) return; @@ -2486,10 +2502,13 @@ void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed) thrust = 48< 72<player->kartstuff[k_sneakertimer]) - thrust = FixedMul(thrust, 5*FRACUNIT/4); - else if (mo->player->kartstuff[k_invincibilitytimer]) - thrust = FixedMul(thrust, 9*FRACUNIT/8); + if (mo->player->kartstuff[k_pogospring] != 2) + { + if (mo->player->kartstuff[k_sneakertimer]) + thrust = FixedMul(thrust, 5*FRACUNIT/4); + else if (mo->player->kartstuff[k_invincibilitytimer]) + thrust = FixedMul(thrust, 9*FRACUNIT/8); + } } else { @@ -2500,10 +2519,10 @@ void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed) thrust = 32<momz = FixedMul(FINESINE(ANGLE_22h>>ANGLETOFINESHIFT), FixedMul(thrust, mo->scale)); + mo->momz = FixedMul(FINESINE(ANGLE_22h>>ANGLETOFINESHIFT), FixedMul(thrust, scale)); } else - mo->momz = FixedMul(vertispeed, mo->scale); + mo->momz = FixedMul(vertispeed, scale); S_StartSound(mo, sfx_kc2f); } diff --git a/src/p_spec.c b/src/p_spec.c index a3a8d11e..80ca8391 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -3753,14 +3753,17 @@ DoneSection2: // Process Section 3 switch (special) { - case 1: // SRB2kart: Speed Bumps + case 1: // SRB2kart: Spring Panel if (roversector || P_MobjReadyToTrigger(player->mo, sector)) { + const fixed_t scale = mapheaderinfo[gamemap-1]->mobj_scale + abs(player->mo->scale - mapheaderinfo[gamemap-1]->mobj_scale); + const fixed_t minspeed = 24*scale; + if (player->mo->eflags & MFE_SPRUNG) break; - if (player->speed < K_GetKartSpeed(player, true)/4) // Push forward to prevent getting stuck - P_InstaThrust(player->mo, player->mo->angle, FixedMul(K_GetKartSpeed(player, true)/4, player->mo->scale)); + if (player->speed < minspeed) // Push forward to prevent getting stuck + P_InstaThrust(player->mo, player->mo->angle, minspeed); player->kartstuff[k_pogospring] = 1; K_DoPogoSpring(player->mo, 0); @@ -3768,7 +3771,28 @@ DoneSection2: break; case 2: // Wind/Current - case 3: // Unused (was "Ice/Sludge and Wind/Current") + break; + + case 3: // SRB2kart: Spring Panel (capped speed) + if (roversector || P_MobjReadyToTrigger(player->mo, sector)) + { + const fixed_t scale = mapheaderinfo[gamemap-1]->mobj_scale + abs(player->mo->scale - mapheaderinfo[gamemap-1]->mobj_scale); + const fixed_t minspeed = 24*scale; + const fixed_t maxspeed = 36*scale; + + if (player->mo->eflags & MFE_SPRUNG) + break; + + if (player->speed > maxspeed) // Prevent overshooting jumps + P_InstaThrust(player->mo, R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy), maxspeed); + else if (player->speed < minspeed) // Push forward to prevent getting stuck + P_InstaThrust(player->mo, player->mo->angle, minspeed); + + player->kartstuff[k_pogospring] = 2; + K_DoPogoSpring(player->mo, 0); + } + break; + case 4: // Conveyor Belt break; @@ -3969,7 +3993,7 @@ DoneSection2: // P_SetPlayerMobjState(player->mo, S_PLAY_FALL1); break; - case 6: // SRB2kart 190117 - Sneaker Boost Panel + case 6: // SRB2kart 190117 - Sneaker Panel if (roversector || P_MobjReadyToTrigger(player->mo, sector)) { if (!player->kartstuff[k_floorboost])