mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-26 20:11:47 +00:00
Merge branch 'rings_slopechange' into greased-horizontals
This commit is contained in:
commit
5fd6d86b41
5 changed files with 170 additions and 68 deletions
|
|
@ -1637,7 +1637,7 @@ static void K_DrawDraftCombiring(player_t *player, player_t *victim, fixed_t cur
|
||||||
curx += stepx;
|
curx += stepx;
|
||||||
cury += stepy;
|
cury += stepy;
|
||||||
curz += stepz;
|
curz += stepz;
|
||||||
|
|
||||||
offset = abs(offset-1) % 3;
|
offset = abs(offset-1) % 3;
|
||||||
n--;
|
n--;
|
||||||
}
|
}
|
||||||
|
|
@ -2320,6 +2320,9 @@ 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);
|
||||||
|
// Don't calculate the acceleration as ever being above top speed
|
||||||
|
if (oldspeed > p_speed)
|
||||||
|
oldspeed = p_speed;
|
||||||
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
|
if (player->kartstuff[k_pogospring]) // Pogo Spring minimum/maximum thrust
|
||||||
|
|
@ -3414,7 +3417,7 @@ void K_SpawnDraftDust(mobj_t *mo)
|
||||||
|
|
||||||
ang = mo->player->frameangle;
|
ang = mo->player->frameangle;
|
||||||
|
|
||||||
if (mo->player->kartstuff[k_drift] != 0)
|
if (mo->player->kartstuff[k_drift] != 0)
|
||||||
{
|
{
|
||||||
drifting = true;
|
drifting = true;
|
||||||
ang += (mo->player->kartstuff[k_drift] * ((ANGLE_270 + ANGLE_22h) / 5)); // -112.5 doesn't work. I fucking HATE SRB2 angles
|
ang += (mo->player->kartstuff[k_drift] * ((ANGLE_270 + ANGLE_22h) / 5)); // -112.5 doesn't work. I fucking HATE SRB2 angles
|
||||||
|
|
|
||||||
|
|
@ -8321,7 +8321,11 @@ void A_ItemPop(mobj_t *actor)
|
||||||
|
|
||||||
void A_JawzChase(mobj_t *actor)
|
void A_JawzChase(mobj_t *actor)
|
||||||
{
|
{
|
||||||
|
const fixed_t currentspeed = R_PointToDist2(0, 0, actor->momx, actor->momy);
|
||||||
player_t *player;
|
player_t *player;
|
||||||
|
fixed_t thrustamount = 0;
|
||||||
|
fixed_t frictionsafety = (actor->friction == 0) ? 1 : actor->friction;
|
||||||
|
fixed_t topspeed = actor->movefactor;
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
if (LUA_CallAction("A_JawzChase", actor))
|
if (LUA_CallAction("A_JawzChase", actor))
|
||||||
return;
|
return;
|
||||||
|
|
@ -8334,20 +8338,100 @@ void A_JawzChase(mobj_t *actor)
|
||||||
|
|
||||||
if (actor->tracer->health)
|
if (actor->tracer->health)
|
||||||
{
|
{
|
||||||
|
const angle_t targetangle = R_PointToAngle2(actor->x, actor->y, actor->tracer->x, actor->tracer->y);
|
||||||
mobj_t *ret;
|
mobj_t *ret;
|
||||||
|
angle_t angledelta = actor->angle - targetangle;
|
||||||
|
boolean turnclockwise = true;
|
||||||
|
|
||||||
|
if (G_RaceGametype())
|
||||||
|
{
|
||||||
|
const fixed_t distbarrier = FixedMul(512*mapobjectscale, FRACUNIT + ((gamespeed-1) * (FRACUNIT/4)));
|
||||||
|
const fixed_t distaway = P_AproxDistance(actor->tracer->x - actor->x, actor->tracer->y - actor->y);
|
||||||
|
if (distaway < distbarrier)
|
||||||
|
{
|
||||||
|
if (actor->tracer->player)
|
||||||
|
{
|
||||||
|
fixed_t speeddifference = abs(topspeed - min(actor->tracer->player->speed, K_GetKartSpeed(actor->tracer->player, false)));
|
||||||
|
topspeed = topspeed - FixedMul(speeddifference, FRACUNIT-FixedDiv(distaway, distbarrier));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (angledelta != 0)
|
||||||
|
{
|
||||||
|
angle_t MAX_JAWZ_TURN = ANGLE_90/15; // We can turn a maximum of 6 degrees per frame at regular max speed
|
||||||
|
// MAX_JAWZ_TURN gets stronger the slower the top speed of jawz
|
||||||
|
if (topspeed < actor->movefactor)
|
||||||
|
{
|
||||||
|
if (topspeed == 0)
|
||||||
|
{
|
||||||
|
MAX_JAWZ_TURN = ANGLE_180;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fixed_t anglemultiplier = FixedDiv(actor->movefactor, topspeed);
|
||||||
|
MAX_JAWZ_TURN += FixedAngle(FixedMul(AngleFixed(MAX_JAWZ_TURN), anglemultiplier));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (angledelta > ANGLE_180)
|
||||||
|
{
|
||||||
|
angledelta = InvAngle(angledelta);
|
||||||
|
turnclockwise = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (angledelta > MAX_JAWZ_TURN)
|
||||||
|
{
|
||||||
|
angledelta = MAX_JAWZ_TURN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (turnclockwise)
|
||||||
|
{
|
||||||
|
actor->angle -= angledelta;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
actor->angle += angledelta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ret = P_SpawnMobj(actor->tracer->x, actor->tracer->y, actor->tracer->z, MT_PLAYERRETICULE);
|
ret = P_SpawnMobj(actor->tracer->x, actor->tracer->y, actor->tracer->z, MT_PLAYERRETICULE);
|
||||||
P_SetTarget(&ret->target, actor->tracer);
|
P_SetTarget(&ret->target, actor->tracer);
|
||||||
ret->frame |= ((leveltime % 10) / 2) + 5;
|
ret->frame |= ((leveltime % 10) / 2) + 5;
|
||||||
ret->color = actor->cvmem;
|
ret->color = actor->cvmem;
|
||||||
|
|
||||||
P_Thrust(actor, R_PointToAngle2(actor->x, actor->y, actor->tracer->x, actor->tracer->y), (7*actor->movefactor)/64);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
P_SetTarget(&actor->tracer, NULL);
|
P_SetTarget(&actor->tracer, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!P_IsObjectOnGround(actor))
|
||||||
|
{
|
||||||
|
// No friction in the air
|
||||||
|
frictionsafety = FRACUNIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentspeed >= topspeed)
|
||||||
|
{
|
||||||
|
// Thrust as if you were at top speed, slow down naturally
|
||||||
|
thrustamount = FixedDiv(topspeed, frictionsafety) - topspeed;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const fixed_t beatfriction = FixedDiv(currentspeed, frictionsafety) - currentspeed;
|
||||||
|
// Thrust to immediately get to top speed
|
||||||
|
thrustamount = beatfriction + FixedDiv(topspeed - currentspeed, frictionsafety);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!actor->tracer)
|
||||||
|
{
|
||||||
|
actor->angle = R_PointToAngle2(0, 0, actor->momx, actor->momy);
|
||||||
|
}
|
||||||
|
|
||||||
|
P_Thrust(actor, actor->angle, thrustamount);
|
||||||
|
|
||||||
|
if ((actor->tracer != NULL) && (actor->tracer->health > 0))
|
||||||
|
return;
|
||||||
|
|
||||||
if (actor->extravalue1) // Disable looking by setting this
|
if (actor->extravalue1) // Disable looking by setting this
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
||||||
87
src/p_mobj.c
87
src/p_mobj.c
|
|
@ -1937,7 +1937,7 @@ void P_XYMovement(mobj_t *mo)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//{ SRB2kart stuff
|
//{ SRB2kart stuff
|
||||||
if (mo->type == MT_ORBINAUT || mo->type == MT_JAWZ_DUD || mo->type == MT_JAWZ || mo->type == MT_BALLHOG || mo->type == MT_FLINGRING) //(mo->type == MT_JAWZ && !mo->tracer))
|
if (mo->type == MT_BALLHOG || mo->type == MT_FLINGRING) //(mo->type == MT_JAWZ && !mo->tracer))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (mo->player && (mo->player->kartstuff[k_spinouttimer] && !mo->player->kartstuff[k_wipeoutslow]) && mo->player->speed <= K_GetKartSpeed(mo->player, false)/2)
|
if (mo->player && (mo->player->kartstuff[k_spinouttimer] && !mo->player->kartstuff[k_wipeoutslow]) && mo->player->speed <= K_GetKartSpeed(mo->player, false)/2)
|
||||||
|
|
@ -7935,9 +7935,18 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fixed_t finalspeed = mobj->movefactor;
|
fixed_t finalspeed = mobj->movefactor;
|
||||||
|
const fixed_t currentspeed = R_PointToDist2(0, 0, mobj->momx, mobj->momy);
|
||||||
|
fixed_t thrustamount = 0;
|
||||||
|
fixed_t frictionsafety = (mobj->friction == 0) ? 1 : mobj->friction;
|
||||||
mobj_t *ghost = P_SpawnGhostMobj(mobj);
|
mobj_t *ghost = P_SpawnGhostMobj(mobj);
|
||||||
ghost->colorized = true; // already has color!
|
ghost->colorized = true; // already has color!
|
||||||
|
|
||||||
|
if (!grounded)
|
||||||
|
{
|
||||||
|
// No friction in the air
|
||||||
|
frictionsafety = FRACUNIT;
|
||||||
|
}
|
||||||
|
|
||||||
mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy);
|
mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy);
|
||||||
if (mobj->health <= 5)
|
if (mobj->health <= 5)
|
||||||
{
|
{
|
||||||
|
|
@ -7946,7 +7955,19 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
finalspeed = FixedMul(finalspeed, FRACUNIT-FRACUNIT/4);
|
finalspeed = FixedMul(finalspeed, FRACUNIT-FRACUNIT/4);
|
||||||
}
|
}
|
||||||
|
|
||||||
P_InstaThrust(mobj, mobj->angle, finalspeed);
|
if (currentspeed >= finalspeed)
|
||||||
|
{
|
||||||
|
// Thrust as if you were at top speed, slow down naturally
|
||||||
|
thrustamount = FixedDiv(finalspeed, frictionsafety) - finalspeed;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const fixed_t beatfriction = FixedDiv(currentspeed, frictionsafety) - currentspeed;
|
||||||
|
// Thrust to immediately get to top speed
|
||||||
|
thrustamount = beatfriction + FixedDiv(finalspeed - currentspeed, frictionsafety);
|
||||||
|
}
|
||||||
|
|
||||||
|
P_Thrust(mobj, mobj->angle, thrustamount);
|
||||||
|
|
||||||
if (grounded)
|
if (grounded)
|
||||||
{
|
{
|
||||||
|
|
@ -7968,9 +7989,6 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
case MT_JAWZ:
|
case MT_JAWZ:
|
||||||
{
|
{
|
||||||
sector_t *sec2;
|
sector_t *sec2;
|
||||||
fixed_t topspeed = mobj->movefactor;
|
|
||||||
fixed_t distbarrier = 512*mapobjectscale;
|
|
||||||
fixed_t distaway;
|
|
||||||
mobj_t *ghost = P_SpawnGhostMobj(mobj);
|
mobj_t *ghost = P_SpawnGhostMobj(mobj);
|
||||||
|
|
||||||
if (mobj->target && !P_MobjWasRemoved(mobj->target) && mobj->target->player)
|
if (mobj->target && !P_MobjWasRemoved(mobj->target) && mobj->target->player)
|
||||||
|
|
@ -7984,37 +8002,7 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
if (leveltime % TICRATE == 0)
|
if (leveltime % TICRATE == 0)
|
||||||
S_StartSound(mobj, mobj->info->activesound);
|
S_StartSound(mobj, mobj->info->activesound);
|
||||||
|
|
||||||
distbarrier = FixedMul(distbarrier, FRACUNIT + ((gamespeed-1) * (FRACUNIT/4)));
|
// Movement handling has ALL been moved to A_JawzChase
|
||||||
|
|
||||||
if (G_RaceGametype() && mobj->tracer)
|
|
||||||
{
|
|
||||||
distaway = P_AproxDistance(mobj->tracer->x - mobj->x, mobj->tracer->y - mobj->y);
|
|
||||||
if (distaway < distbarrier)
|
|
||||||
{
|
|
||||||
if (mobj->tracer->player)
|
|
||||||
{
|
|
||||||
fixed_t speeddifference = abs(topspeed - min(mobj->tracer->player->speed, K_GetKartSpeed(mobj->tracer->player, false)));
|
|
||||||
topspeed = topspeed - FixedMul(speeddifference, FRACUNIT-FixedDiv(distaway, distbarrier));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (G_BattleGametype())
|
|
||||||
{
|
|
||||||
mobj->friction -= 1228;
|
|
||||||
if (mobj->friction > FRACUNIT)
|
|
||||||
mobj->friction = FRACUNIT;
|
|
||||||
if (mobj->friction < 0)
|
|
||||||
mobj->friction = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy);
|
|
||||||
P_InstaThrust(mobj, mobj->angle, topspeed);
|
|
||||||
|
|
||||||
if (mobj->tracer)
|
|
||||||
mobj->angle = R_PointToAngle2(mobj->x, mobj->y, mobj->tracer->x, mobj->tracer->y);
|
|
||||||
else
|
|
||||||
mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy);
|
|
||||||
|
|
||||||
K_DriftDustHandling(mobj);
|
K_DriftDustHandling(mobj);
|
||||||
|
|
||||||
|
|
@ -8042,6 +8030,9 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mobj_t *ghost = P_SpawnGhostMobj(mobj);
|
mobj_t *ghost = P_SpawnGhostMobj(mobj);
|
||||||
|
const fixed_t currentspeed = R_PointToDist2(0, 0, mobj->momx, mobj->momy);
|
||||||
|
fixed_t frictionsafety = (mobj->friction == 0) ? 1 : mobj->friction;
|
||||||
|
fixed_t thrustamount = 0;
|
||||||
|
|
||||||
if (mobj->target && !P_MobjWasRemoved(mobj->target) && mobj->target->player)
|
if (mobj->target && !P_MobjWasRemoved(mobj->target) && mobj->target->player)
|
||||||
{
|
{
|
||||||
|
|
@ -8049,8 +8040,26 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
ghost->colorized = true;
|
ghost->colorized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!grounded)
|
||||||
|
{
|
||||||
|
// No friction in the air
|
||||||
|
frictionsafety = FRACUNIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentspeed >= mobj->movefactor)
|
||||||
|
{
|
||||||
|
// Thrust as if you were at top speed, slow down naturally
|
||||||
|
thrustamount = FixedDiv(mobj->movefactor, frictionsafety) - mobj->movefactor;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const fixed_t beatfriction = FixedDiv(currentspeed, frictionsafety) - currentspeed;
|
||||||
|
// Thrust to immediately get to top speed
|
||||||
|
thrustamount = beatfriction + FixedDiv(mobj->movefactor - currentspeed, frictionsafety);
|
||||||
|
}
|
||||||
|
|
||||||
mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy);
|
mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy);
|
||||||
P_InstaThrust(mobj, mobj->angle, mobj->movefactor);
|
P_Thrust(mobj, mobj->angle, thrustamount);
|
||||||
|
|
||||||
if (grounded)
|
if (grounded)
|
||||||
{
|
{
|
||||||
|
|
@ -9447,7 +9456,9 @@ for (i = ((mobj->flags2 & MF2_STRONGBOX) ? strongboxamt : weakboxamt); i; --i) s
|
||||||
|| mobj->type == MT_BIGTUMBLEWEED
|
|| mobj->type == MT_BIGTUMBLEWEED
|
||||||
|| mobj->type == MT_LITTLETUMBLEWEED
|
|| mobj->type == MT_LITTLETUMBLEWEED
|
||||||
|| mobj->type == MT_CANNONBALLDECOR
|
|| mobj->type == MT_CANNONBALLDECOR
|
||||||
|| mobj->type == MT_FALLINGROCK) {
|
|| mobj->type == MT_FALLINGROCK
|
||||||
|
|| mobj->type == MT_ORBINAUT
|
||||||
|
|| mobj->type == MT_JAWZ || mobj->type == MT_JAWZ_DUD) {
|
||||||
P_TryMove(mobj, mobj->x, mobj->y, true); // Sets mo->standingslope correctly
|
P_TryMove(mobj, mobj->x, mobj->y, true); // Sets mo->standingslope correctly
|
||||||
//if (mobj->standingslope) CONS_Printf("slope physics on mobj\n");
|
//if (mobj->standingslope) CONS_Printf("slope physics on mobj\n");
|
||||||
P_ButteredSlope(mobj);
|
P_ButteredSlope(mobj);
|
||||||
|
|
|
||||||
|
|
@ -871,33 +871,31 @@ void P_ButteredSlope(mobj_t *mo)
|
||||||
return; // don't slide down slopes if you can't touch them or you're not affected by gravity
|
return; // don't slide down slopes if you can't touch them or you're not affected by gravity
|
||||||
|
|
||||||
if (mo->player) {
|
if (mo->player) {
|
||||||
if (abs(mo->standingslope->zdelta) < FRACUNIT/4 && !(mo->player->pflags & PF_SPINNING))
|
// Changed in kart to only not apply physics on very slight slopes (I think about 4 degree angles)
|
||||||
|
if (abs(mo->standingslope->zdelta) < FRACUNIT/21 && !(mo->player->pflags & PF_SPINNING))
|
||||||
return; // Don't slide on non-steep slopes unless spinning
|
return; // Don't slide on non-steep slopes unless spinning
|
||||||
|
|
||||||
|
// This only means you can be stopped on slopes that aren't steeper than 45 degrees
|
||||||
if (abs(mo->standingslope->zdelta) < FRACUNIT/2 && !(mo->player->rmomx || mo->player->rmomy))
|
if (abs(mo->standingslope->zdelta) < FRACUNIT/2 && !(mo->player->rmomx || mo->player->rmomy))
|
||||||
return; // Allow the player to stand still on slopes below a certain steepness
|
return; // Allow the player to stand still on slopes below a certain steepness
|
||||||
}
|
}
|
||||||
|
|
||||||
thrust = FINESINE(mo->standingslope->zangle>>ANGLETOFINESHIFT) * 15 / 16 * (mo->eflags & MFE_VERTICALFLIP ? 1 : -1);
|
thrust = FINESINE(mo->standingslope->zangle>>ANGLETOFINESHIFT) * 4 / 5 * (mo->eflags & MFE_VERTICALFLIP ? 1 : -1);
|
||||||
|
|
||||||
if (mo->player && (mo->player->pflags & PF_SPINNING)) {
|
if (mo->player) {
|
||||||
fixed_t mult = 0;
|
fixed_t mult = FRACUNIT;
|
||||||
if (mo->momx || mo->momy) {
|
if (mo->momx || mo->momy) {
|
||||||
angle_t angle = R_PointToAngle2(0, 0, mo->momx, mo->momy) - mo->standingslope->xydirection;
|
angle_t angle = R_PointToAngle2(0, 0, mo->momx, mo->momy) - mo->standingslope->xydirection;
|
||||||
|
|
||||||
if (P_MobjFlip(mo) * mo->standingslope->zdelta < 0)
|
if (P_MobjFlip(mo) * mo->standingslope->zdelta < 0)
|
||||||
angle ^= ANGLE_180;
|
angle ^= ANGLE_180;
|
||||||
|
|
||||||
mult = FINECOSINE(angle >> ANGLETOFINESHIFT);
|
mult = FRACUNIT + (FRACUNIT + FINECOSINE(angle>>ANGLETOFINESHIFT))*3/2;
|
||||||
}
|
}
|
||||||
|
|
||||||
thrust = FixedMul(thrust, FRACUNIT*2/3 + mult/8);
|
thrust = FixedMul(thrust, mult);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mo->momx || mo->momy) // Slightly increase thrust based on the object's speed
|
|
||||||
thrust = FixedMul(thrust, FRACUNIT+P_AproxDistance(mo->momx, mo->momy)/16);
|
|
||||||
// This makes it harder to zigzag up steep slopes, as well as allows greater top speed when rolling down
|
|
||||||
|
|
||||||
// Let's get the gravity strength for the object...
|
// Let's get the gravity strength for the object...
|
||||||
thrust = FixedMul(thrust, abs(P_GetMobjGravity(mo)));
|
thrust = FixedMul(thrust, abs(P_GetMobjGravity(mo)));
|
||||||
|
|
||||||
|
|
|
||||||
36
src/p_user.c
36
src/p_user.c
|
|
@ -4186,27 +4186,33 @@ static void P_3dMovement(player_t *player)
|
||||||
// If "no" to 2, normalize to topspeed, so we can't suddenly run faster than it of our own accord.
|
// If "no" to 2, normalize to topspeed, so we can't suddenly run faster than it of our own accord.
|
||||||
// If "no" to 1, we're not reaching any limits yet, so ignore this entirely!
|
// If "no" to 1, we're not reaching any limits yet, so ignore this entirely!
|
||||||
// -Shadow Hog
|
// -Shadow Hog
|
||||||
newMagnitude = R_PointToDist2(player->mo->momx - player->cmomx, player->mo->momy - player->cmomy, 0, 0);
|
// Only do this forced cap of speed when in midair, the kart acceleration code takes into account friction, and
|
||||||
if (newMagnitude > K_GetKartSpeed(player, true)) //topspeed)
|
// doesn't let you accelerate past top speed, so this is unnecessary on the ground, but in the air is needed to
|
||||||
|
// allow for being able to change direction on spring jumps without being accelerated into the void - Sryder
|
||||||
|
if (!P_IsObjectOnGround(player->mo))
|
||||||
{
|
{
|
||||||
fixed_t tempmomx, tempmomy;
|
newMagnitude = R_PointToDist2(player->mo->momx - player->cmomx, player->mo->momy - player->cmomy, 0, 0);
|
||||||
if (oldMagnitude > K_GetKartSpeed(player, true))
|
if (newMagnitude > K_GetKartSpeed(player, true)) //topspeed)
|
||||||
{
|
{
|
||||||
if (newMagnitude > oldMagnitude)
|
fixed_t tempmomx, tempmomy;
|
||||||
|
if (oldMagnitude > K_GetKartSpeed(player, true))
|
||||||
{
|
{
|
||||||
tempmomx = FixedMul(FixedDiv(player->mo->momx - player->cmomx, newMagnitude), oldMagnitude);
|
if (newMagnitude > oldMagnitude)
|
||||||
tempmomy = FixedMul(FixedDiv(player->mo->momy - player->cmomy, newMagnitude), oldMagnitude);
|
{
|
||||||
|
tempmomx = FixedMul(FixedDiv(player->mo->momx - player->cmomx, newMagnitude), oldMagnitude);
|
||||||
|
tempmomy = FixedMul(FixedDiv(player->mo->momy - player->cmomy, newMagnitude), oldMagnitude);
|
||||||
|
player->mo->momx = tempmomx + player->cmomx;
|
||||||
|
player->mo->momy = tempmomy + player->cmomy;
|
||||||
|
}
|
||||||
|
// else do nothing
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tempmomx = FixedMul(FixedDiv(player->mo->momx - player->cmomx, newMagnitude), K_GetKartSpeed(player, true)); //topspeed)
|
||||||
|
tempmomy = FixedMul(FixedDiv(player->mo->momy - player->cmomy, newMagnitude), K_GetKartSpeed(player, true)); //topspeed)
|
||||||
player->mo->momx = tempmomx + player->cmomx;
|
player->mo->momx = tempmomx + player->cmomx;
|
||||||
player->mo->momy = tempmomy + player->cmomy;
|
player->mo->momy = tempmomy + player->cmomy;
|
||||||
}
|
}
|
||||||
// else do nothing
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tempmomx = FixedMul(FixedDiv(player->mo->momx - player->cmomx, newMagnitude), K_GetKartSpeed(player, true)); //topspeed)
|
|
||||||
tempmomy = FixedMul(FixedDiv(player->mo->momy - player->cmomy, newMagnitude), K_GetKartSpeed(player, true)); //topspeed)
|
|
||||||
player->mo->momx = tempmomx + player->cmomx;
|
|
||||||
player->mo->momy = tempmomy + player->cmomy;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue