mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-27 16:01:17 +00:00
Scale draft distances based on game speed
This commit is contained in:
parent
ac1ae12746
commit
5c55201b08
3 changed files with 23 additions and 58 deletions
75
src/k_kart.c
75
src/k_kart.c
|
|
@ -600,6 +600,15 @@ boolean K_IsPlayerWanted(player_t *player)
|
|||
return false;
|
||||
}
|
||||
|
||||
fixed_t K_GetKartGameSpeedScalar(SINT8 value)
|
||||
{
|
||||
// Easy = 81.25%
|
||||
// Normal = 100%
|
||||
// Hard = 118.75%
|
||||
// Nightmare = 137.5% ?!?!
|
||||
return ((13 + (3*value)) << FRACBITS) / 16;
|
||||
}
|
||||
|
||||
//{ SRB2kart Roulette Code - Position Based
|
||||
|
||||
#define NUMKARTODDS 80
|
||||
|
|
@ -1644,6 +1653,7 @@ static void K_UpdateDraft(player_t *player)
|
|||
draftdistance = (2048 + (512 * (9 - player->kartweight))) * player->mo->scale;
|
||||
if (player->speed < topspd)
|
||||
draftdistance = FixedMul(draftdistance, FixedDiv(player->speed, topspd));
|
||||
draftdistance = FixedMul(draftdistance, K_GetKartGameSpeedScalar(gamespeed));
|
||||
|
||||
// Let's hunt for players to draft off of!
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
|
|
@ -2210,28 +2220,12 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
|
||||
fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower)
|
||||
{
|
||||
const fixed_t xspd = (3*FRACUNIT)/64;
|
||||
fixed_t g_cc = K_GetKartGameSpeedScalar(gamespeed) + xspd;
|
||||
fixed_t k_speed = 150;
|
||||
fixed_t g_cc = FRACUNIT;
|
||||
fixed_t xspd = 3072; // 4.6875 aka 3/64
|
||||
UINT8 kartspeed = player->kartspeed;
|
||||
fixed_t finalspeed;
|
||||
|
||||
if (doboostpower && !player->kartstuff[k_pogospring] && !P_IsObjectOnGround(player->mo))
|
||||
return (75*mapobjectscale); // air speed cap
|
||||
|
||||
switch (gamespeed)
|
||||
{
|
||||
case 0:
|
||||
g_cc = 53248 + xspd; // 50cc = 81.25 + 4.69 = 85.94%
|
||||
break;
|
||||
case 2:
|
||||
g_cc = 77824 + xspd; // 150cc = 118.75 + 4.69 = 123.44%
|
||||
break;
|
||||
default:
|
||||
g_cc = 65536 + xspd; // 100cc = 100.00 + 4.69 = 104.69%
|
||||
break;
|
||||
}
|
||||
|
||||
if (G_BattleGametype() && player->kartstuff[k_bumper] <= 0)
|
||||
kartspeed = 1;
|
||||
|
||||
|
|
@ -2298,6 +2292,9 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove
|
|||
newspeed = minspeed;
|
||||
}
|
||||
|
||||
if (!P_IsObjectOnGround(player->mo) && newspeed > 75*mapobjectscale)
|
||||
newspeed = 75*mapobjectscale;
|
||||
|
||||
finalspeed = newspeed - oldspeed;
|
||||
|
||||
// forwardmove is:
|
||||
|
|
@ -2309,10 +2306,10 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove
|
|||
finalspeed *= forwardmove/25;
|
||||
finalspeed /= 2;
|
||||
|
||||
if (forwardmove < 0 && finalspeed > FRACUNIT*2)
|
||||
if (forwardmove < 0 && finalspeed > mapobjectscale*2)
|
||||
return finalspeed/2;
|
||||
else if (forwardmove < 0)
|
||||
return -FRACUNIT/2;
|
||||
return -mapobjectscale/2;
|
||||
|
||||
if (finalspeed < 0)
|
||||
finalspeed = 0;
|
||||
|
|
@ -3448,29 +3445,10 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map
|
|||
|
||||
// Figure out projectile speed by game speed
|
||||
if (missile && mapthing != MT_BALLHOG) // Trying to keep compatability...
|
||||
{
|
||||
PROJSPEED = mobjinfo[mapthing].speed;
|
||||
if (gamespeed == 0)
|
||||
PROJSPEED = FixedMul(PROJSPEED, FRACUNIT-FRACUNIT/4);
|
||||
else if (gamespeed == 2)
|
||||
PROJSPEED = FixedMul(PROJSPEED, FRACUNIT+FRACUNIT/4);
|
||||
PROJSPEED = FixedMul(PROJSPEED, mapobjectscale);
|
||||
}
|
||||
PROJSPEED = FixedMul(mobjinfo[mapthing].speed, FRACUNIT + ((gamespeed-1) * (FRACUNIT/4)));
|
||||
else
|
||||
{
|
||||
switch (gamespeed)
|
||||
{
|
||||
case 0:
|
||||
PROJSPEED = 68*mapobjectscale; // Avg Speed is 34
|
||||
break;
|
||||
case 2:
|
||||
PROJSPEED = 96*mapobjectscale; // Avg Speed is 48
|
||||
break;
|
||||
default:
|
||||
PROJSPEED = 82*mapobjectscale; // Avg Speed is 41
|
||||
break;
|
||||
}
|
||||
}
|
||||
PROJSPEED = (82 + ((gamespeed-1) * 14)) * FRACUNIT; // Avg Speed is 41 in Normal
|
||||
PROJSPEED = FixedMul(PROJSPEED, mapobjectscale);
|
||||
|
||||
if (altthrow)
|
||||
{
|
||||
|
|
@ -3684,18 +3662,7 @@ void K_PuntMine(mobj_t *thismine, mobj_t *punter)
|
|||
if (!mine || P_MobjWasRemoved(mine))
|
||||
return;
|
||||
|
||||
switch (gamespeed)
|
||||
{
|
||||
case 0:
|
||||
spd = 68*mapobjectscale; // Avg Speed is 34
|
||||
break;
|
||||
case 2:
|
||||
spd = 96*mapobjectscale; // Avg Speed is 48
|
||||
break;
|
||||
default:
|
||||
spd = 82*mapobjectscale; // Avg Speed is 41
|
||||
break;
|
||||
}
|
||||
spd = (82 + ((gamespeed-1) * 14))*mapobjectscale; // Avg Speed is 41 in Normal
|
||||
|
||||
mine->flags |= MF_NOCLIPTHING;
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ void K_RegisterKartStuff(void);
|
|||
|
||||
boolean K_IsPlayerLosing(player_t *player);
|
||||
boolean K_IsPlayerWanted(player_t *player);
|
||||
fixed_t K_GetKartGameSpeedScalar(UINT8 value);
|
||||
void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid);
|
||||
void K_KartPainEnergyFling(player_t *player);
|
||||
void K_FlipFromObject(mobj_t *mo, mobj_t *master);
|
||||
|
|
|
|||
|
|
@ -7997,10 +7997,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
if (leveltime % TICRATE == 0)
|
||||
S_StartSound(mobj, mobj->info->activesound);
|
||||
|
||||
if (gamespeed == 0)
|
||||
distbarrier = FixedMul(distbarrier, FRACUNIT-FRACUNIT/4);
|
||||
else if (gamespeed == 2)
|
||||
distbarrier = FixedMul(distbarrier, FRACUNIT+FRACUNIT/4);
|
||||
distbarrier = FixedMul(distbarrier, FRACUNIT + ((gamespeed-1) * (FRACUNIT/4)));
|
||||
|
||||
if (G_RaceGametype() && mobj->tracer)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue