mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-26 03:51:50 +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;
|
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
|
//{ SRB2kart Roulette Code - Position Based
|
||||||
|
|
||||||
#define NUMKARTODDS 80
|
#define NUMKARTODDS 80
|
||||||
|
|
@ -1644,6 +1653,7 @@ static void K_UpdateDraft(player_t *player)
|
||||||
draftdistance = (2048 + (512 * (9 - player->kartweight))) * player->mo->scale;
|
draftdistance = (2048 + (512 * (9 - player->kartweight))) * player->mo->scale;
|
||||||
if (player->speed < topspd)
|
if (player->speed < topspd)
|
||||||
draftdistance = FixedMul(draftdistance, FixedDiv(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!
|
// Let's hunt for players to draft off of!
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
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)
|
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 k_speed = 150;
|
||||||
fixed_t g_cc = FRACUNIT;
|
|
||||||
fixed_t xspd = 3072; // 4.6875 aka 3/64
|
|
||||||
UINT8 kartspeed = player->kartspeed;
|
UINT8 kartspeed = player->kartspeed;
|
||||||
fixed_t finalspeed;
|
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)
|
if (G_BattleGametype() && player->kartstuff[k_bumper] <= 0)
|
||||||
kartspeed = 1;
|
kartspeed = 1;
|
||||||
|
|
||||||
|
|
@ -2298,6 +2292,9 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove
|
||||||
newspeed = minspeed;
|
newspeed = minspeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!P_IsObjectOnGround(player->mo) && newspeed > 75*mapobjectscale)
|
||||||
|
newspeed = 75*mapobjectscale;
|
||||||
|
|
||||||
finalspeed = newspeed - oldspeed;
|
finalspeed = newspeed - oldspeed;
|
||||||
|
|
||||||
// forwardmove is:
|
// forwardmove is:
|
||||||
|
|
@ -2309,10 +2306,10 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove
|
||||||
finalspeed *= forwardmove/25;
|
finalspeed *= forwardmove/25;
|
||||||
finalspeed /= 2;
|
finalspeed /= 2;
|
||||||
|
|
||||||
if (forwardmove < 0 && finalspeed > FRACUNIT*2)
|
if (forwardmove < 0 && finalspeed > mapobjectscale*2)
|
||||||
return finalspeed/2;
|
return finalspeed/2;
|
||||||
else if (forwardmove < 0)
|
else if (forwardmove < 0)
|
||||||
return -FRACUNIT/2;
|
return -mapobjectscale/2;
|
||||||
|
|
||||||
if (finalspeed < 0)
|
if (finalspeed < 0)
|
||||||
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
|
// Figure out projectile speed by game speed
|
||||||
if (missile && mapthing != MT_BALLHOG) // Trying to keep compatability...
|
if (missile && mapthing != MT_BALLHOG) // Trying to keep compatability...
|
||||||
{
|
PROJSPEED = FixedMul(mobjinfo[mapthing].speed, FRACUNIT + ((gamespeed-1) * (FRACUNIT/4)));
|
||||||
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);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
PROJSPEED = (82 + ((gamespeed-1) * 14)) * FRACUNIT; // Avg Speed is 41 in Normal
|
||||||
switch (gamespeed)
|
PROJSPEED = FixedMul(PROJSPEED, mapobjectscale);
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (altthrow)
|
if (altthrow)
|
||||||
{
|
{
|
||||||
|
|
@ -3684,18 +3662,7 @@ void K_PuntMine(mobj_t *thismine, mobj_t *punter)
|
||||||
if (!mine || P_MobjWasRemoved(mine))
|
if (!mine || P_MobjWasRemoved(mine))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (gamespeed)
|
spd = (82 + ((gamespeed-1) * 14))*mapobjectscale; // Avg Speed is 41 in Normal
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
mine->flags |= MF_NOCLIPTHING;
|
mine->flags |= MF_NOCLIPTHING;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ void K_RegisterKartStuff(void);
|
||||||
|
|
||||||
boolean K_IsPlayerLosing(player_t *player);
|
boolean K_IsPlayerLosing(player_t *player);
|
||||||
boolean K_IsPlayerWanted(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_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid);
|
||||||
void K_KartPainEnergyFling(player_t *player);
|
void K_KartPainEnergyFling(player_t *player);
|
||||||
void K_FlipFromObject(mobj_t *mo, mobj_t *master);
|
void K_FlipFromObject(mobj_t *mo, mobj_t *master);
|
||||||
|
|
|
||||||
|
|
@ -7997,10 +7997,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);
|
||||||
|
|
||||||
if (gamespeed == 0)
|
distbarrier = FixedMul(distbarrier, FRACUNIT + ((gamespeed-1) * (FRACUNIT/4)));
|
||||||
distbarrier = FixedMul(distbarrier, FRACUNIT-FRACUNIT/4);
|
|
||||||
else if (gamespeed == 2)
|
|
||||||
distbarrier = FixedMul(distbarrier, FRACUNIT+FRACUNIT/4);
|
|
||||||
|
|
||||||
if (G_RaceGametype() && mobj->tracer)
|
if (G_RaceGametype() && mobj->tracer)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue