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.
This commit is contained in:
TehRealSalt 2018-07-13 20:45:18 -04:00
parent d21b6282f3
commit c44d4c78f1
3 changed files with 59 additions and 16 deletions

View File

@ -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
},

View File

@ -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<<FRACBITS;
if (thrust > 72<<FRACBITS)
thrust = 72<<FRACBITS;
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);
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<<FRACBITS;
}
mo->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);
}

View File

@ -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])