mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-02-07 08:51:40 +00:00
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:
parent
d21b6282f3
commit
c44d4c78f1
3 changed files with 59 additions and 16 deletions
|
@ -15944,7 +15944,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
100, // mass
|
100, // mass
|
||||||
0, // damage
|
0, // damage
|
||||||
sfx_None, // activesound
|
sfx_None, // activesound
|
||||||
MF_NOGRAVITY|MF_SCENERY, // flags
|
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOTHINK, // flags
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -15971,7 +15971,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
100, // mass
|
100, // mass
|
||||||
0, // damage
|
0, // damage
|
||||||
sfx_None, // activesound
|
sfx_None, // activesound
|
||||||
MF_NOGRAVITY|MF_SCENERY, // flags
|
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOTHINK, // flags
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -15998,7 +15998,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
100, // mass
|
100, // mass
|
||||||
0, // damage
|
0, // damage
|
||||||
sfx_None, // activesound
|
sfx_None, // activesound
|
||||||
MF_NOGRAVITY|MF_SCENERY, // flags
|
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOTHINK, // flags
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
27
src/k_kart.c
27
src/k_kart.c
|
@ -1303,8 +1303,9 @@ void K_MomentumToFacing(player_t *player)
|
||||||
dangle = InvAngle(dangle);
|
dangle = InvAngle(dangle);
|
||||||
|
|
||||||
// If you aren't on the ground or are moving in too different of a direction don't do this
|
// 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))
|
if (player->mo->eflags & MFE_JUSTHITFLOOR)
|
||||||
|| (dangle > ANGLE_90 && !(player->mo->eflags & MFE_JUSTHITFLOOR)))
|
; // Just hit floor ALWAYS redirects
|
||||||
|
else if (!P_IsObjectOnGround(player->mo) || dangle > ANGLE_90)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
P_Thrust(player->mo, player->mo->angle, player->speed - FixedMul(player->speed, player->mo->friction));
|
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!
|
// ACCELCODE!!!1!11!
|
||||||
oldspeed = R_PointToDist2(0, 0, player->rmomx, player->rmomy); // FixedMul(P_AproxDistance(player->rmomx, player->rmomy), player->mo->scale);
|
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);
|
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;
|
finalspeed = newspeed - oldspeed;
|
||||||
|
|
||||||
// forwardmove is:
|
// 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)
|
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)
|
if (mo->player && mo->player->spectator)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -2486,11 +2502,14 @@ void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed)
|
||||||
thrust = 48<<FRACBITS;
|
thrust = 48<<FRACBITS;
|
||||||
if (thrust > 72<<FRACBITS)
|
if (thrust > 72<<FRACBITS)
|
||||||
thrust = 72<<FRACBITS;
|
thrust = 72<<FRACBITS;
|
||||||
|
if (mo->player->kartstuff[k_pogospring] != 2)
|
||||||
|
{
|
||||||
if (mo->player->kartstuff[k_sneakertimer])
|
if (mo->player->kartstuff[k_sneakertimer])
|
||||||
thrust = FixedMul(thrust, 5*FRACUNIT/4);
|
thrust = FixedMul(thrust, 5*FRACUNIT/4);
|
||||||
else if (mo->player->kartstuff[k_invincibilitytimer])
|
else if (mo->player->kartstuff[k_invincibilitytimer])
|
||||||
thrust = FixedMul(thrust, 9*FRACUNIT/8);
|
thrust = FixedMul(thrust, 9*FRACUNIT/8);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
thrust = FixedDiv(3*P_AproxDistance(mo->momx, mo->momy)/2, 5*FRACUNIT/2);
|
thrust = FixedDiv(3*P_AproxDistance(mo->momx, mo->momy)/2, 5*FRACUNIT/2);
|
||||||
|
@ -2500,10 +2519,10 @@ void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed)
|
||||||
thrust = 32<<FRACBITS;
|
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
|
else
|
||||||
mo->momz = FixedMul(vertispeed, mo->scale);
|
mo->momz = FixedMul(vertispeed, scale);
|
||||||
|
|
||||||
S_StartSound(mo, sfx_kc2f);
|
S_StartSound(mo, sfx_kc2f);
|
||||||
}
|
}
|
||||||
|
|
34
src/p_spec.c
34
src/p_spec.c
|
@ -3753,14 +3753,17 @@ DoneSection2:
|
||||||
// Process Section 3
|
// Process Section 3
|
||||||
switch (special)
|
switch (special)
|
||||||
{
|
{
|
||||||
case 1: // SRB2kart: Speed Bumps
|
case 1: // SRB2kart: Spring Panel
|
||||||
if (roversector || P_MobjReadyToTrigger(player->mo, sector))
|
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)
|
if (player->mo->eflags & MFE_SPRUNG)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (player->speed < K_GetKartSpeed(player, true)/4) // Push forward to prevent getting stuck
|
if (player->speed < minspeed) // Push forward to prevent getting stuck
|
||||||
P_InstaThrust(player->mo, player->mo->angle, FixedMul(K_GetKartSpeed(player, true)/4, player->mo->scale));
|
P_InstaThrust(player->mo, player->mo->angle, minspeed);
|
||||||
|
|
||||||
player->kartstuff[k_pogospring] = 1;
|
player->kartstuff[k_pogospring] = 1;
|
||||||
K_DoPogoSpring(player->mo, 0);
|
K_DoPogoSpring(player->mo, 0);
|
||||||
|
@ -3768,7 +3771,28 @@ DoneSection2:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: // Wind/Current
|
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
|
case 4: // Conveyor Belt
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -3969,7 +3993,7 @@ DoneSection2:
|
||||||
// P_SetPlayerMobjState(player->mo, S_PLAY_FALL1);
|
// P_SetPlayerMobjState(player->mo, S_PLAY_FALL1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6: // SRB2kart 190117 - Sneaker Boost Panel
|
case 6: // SRB2kart 190117 - Sneaker Panel
|
||||||
if (roversector || P_MobjReadyToTrigger(player->mo, sector))
|
if (roversector || P_MobjReadyToTrigger(player->mo, sector))
|
||||||
{
|
{
|
||||||
if (!player->kartstuff[k_floorboost])
|
if (!player->kartstuff[k_floorboost])
|
||||||
|
|
Loading…
Reference in a new issue