mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-01-18 07:22:03 +00:00
Camera outrunning
This commit is contained in:
parent
fd16ece77c
commit
9394179c12
4 changed files with 58 additions and 48 deletions
|
@ -298,6 +298,8 @@ typedef enum
|
||||||
k_brakestop, // Wait until you've made a complete stop for a few tics before letting brake go in reverse.
|
k_brakestop, // Wait until you've made a complete stop for a few tics before letting brake go in reverse.
|
||||||
k_waterskip, // Water skipping counter
|
k_waterskip, // Water skipping counter
|
||||||
k_dashpadcooldown, // Separate the vanilla SA-style dash pads from using pw_flashing
|
k_dashpadcooldown, // Separate the vanilla SA-style dash pads from using pw_flashing
|
||||||
|
k_speedboost, // Boost value smoothing for max speed
|
||||||
|
k_accelboost, // Boost value smoothing for acceleration
|
||||||
|
|
||||||
k_itemroulette, // Used for the roulette when deciding what item to give you (was "pw_kartitem")
|
k_itemroulette, // Used for the roulette when deciding what item to give you (was "pw_kartitem")
|
||||||
k_roulettetype, // Used for the roulette, for deciding type (currently only used for Battle, to give you better items from Karma items)
|
k_roulettetype, // Used for the roulette, for deciding type (currently only used for Battle, to give you better items from Karma items)
|
||||||
|
@ -323,7 +325,7 @@ typedef enum
|
||||||
k_eggmanexplode, // Fake item recieved, explode in a few seconds
|
k_eggmanexplode, // Fake item recieved, explode in a few seconds
|
||||||
k_eggmanblame, // Fake item recieved, who set this fake
|
k_eggmanblame, // Fake item recieved, who set this fake
|
||||||
k_lastjawztarget, // Last person you target with jawz, for playing the target switch sfx
|
k_lastjawztarget, // Last person you target with jawz, for playing the target switch sfx
|
||||||
k_bananadrag, // After a second of holding a banana behind you, you start to slow down
|
k_bananadrag, // After a second of holding a banana behind you, you start to slow down
|
||||||
k_spinouttimer, // Spin-out from a banana peel or oil slick (was "pw_bananacam")
|
k_spinouttimer, // Spin-out from a banana peel or oil slick (was "pw_bananacam")
|
||||||
k_wipeoutslow, // Timer before you slowdown when getting wiped out
|
k_wipeoutslow, // Timer before you slowdown when getting wiped out
|
||||||
k_justbumped, // Prevent players from endlessly bumping into each other
|
k_justbumped, // Prevent players from endlessly bumping into each other
|
||||||
|
|
|
@ -7680,6 +7680,8 @@ static const char *const KARTSTUFF_LIST[] = {
|
||||||
"BRAKESTOP",
|
"BRAKESTOP",
|
||||||
"WATERSKIP",
|
"WATERSKIP",
|
||||||
"DASHPADCOOLDOWN",
|
"DASHPADCOOLDOWN",
|
||||||
|
"SPEEDBOOST",
|
||||||
|
"ACCELBOOST",
|
||||||
|
|
||||||
"ITEMROULETTE",
|
"ITEMROULETTE",
|
||||||
"ROULETTETYPE",
|
"ROULETTETYPE",
|
||||||
|
|
93
src/k_kart.c
93
src/k_kart.c
|
@ -1443,67 +1443,69 @@ void K_MomentumToFacing(player_t *player)
|
||||||
}
|
}
|
||||||
|
|
||||||
// if speed is true it gets the speed boost power, otherwise it gets the acceleration
|
// if speed is true it gets the speed boost power, otherwise it gets the acceleration
|
||||||
static fixed_t K_GetKartBoostPower(player_t *player, boolean speed)
|
static void K_GetKartBoostPower(player_t *player)
|
||||||
{
|
{
|
||||||
fixed_t boostpower = FRACUNIT;
|
fixed_t boostpower = FRACUNIT;
|
||||||
fixed_t boostvalue = 0;
|
fixed_t speedboost = 0, accelboost = 0;
|
||||||
|
|
||||||
if (player->kartstuff[k_spinouttimer] && player->kartstuff[k_wipeoutslow] == 1) // Slow down after you've been bumped
|
if (player->kartstuff[k_spinouttimer] && player->kartstuff[k_wipeoutslow] == 1) // Slow down after you've been bumped
|
||||||
return 0;
|
{
|
||||||
|
player->kartstuff[k_speedboost] = player->kartstuff[k_accelboost] = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Offroad is separate, it's difficult to factor it in with a variable value anyway.
|
// Offroad is separate, it's difficult to factor it in with a variable value anyway.
|
||||||
if (!(player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_hyudorotimer] || player->kartstuff[k_sneakertimer])
|
if (!(player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_hyudorotimer] || player->kartstuff[k_sneakertimer])
|
||||||
&& player->kartstuff[k_offroad] >= 0 && speed)
|
&& player->kartstuff[k_offroad] >= 0)
|
||||||
boostpower = FixedDiv(boostpower, player->kartstuff[k_offroad] + FRACUNIT);
|
boostpower = FixedDiv(boostpower, player->kartstuff[k_offroad] + FRACUNIT);
|
||||||
|
|
||||||
if (player->kartstuff[k_bananadrag] > TICRATE)
|
if (player->kartstuff[k_bananadrag] > TICRATE)
|
||||||
boostpower = 4*boostpower/5;
|
boostpower = 4*boostpower/5;
|
||||||
|
|
||||||
if (player->kartstuff[k_growshrinktimer] > 0)
|
if (player->kartstuff[k_growshrinktimer] > 0) // Grow
|
||||||
{ // Grow
|
{
|
||||||
if (speed)
|
speedboost = max(speedboost, FRACUNIT/5); // + 20%
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player->kartstuff[k_invincibilitytimer]) // Invincibility
|
||||||
|
{
|
||||||
|
speedboost = max(speedboost, 3*(FRACUNIT/8)); // + 37.5%
|
||||||
|
accelboost = max(accelboost, 3*FRACUNIT); // + 600%
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player->kartstuff[k_driftboost]) // Drift Boost
|
||||||
|
{
|
||||||
|
speedboost = max(speedboost, FRACUNIT/4); // + 25%
|
||||||
|
accelboost = max(accelboost, 4*FRACUNIT); // + 400%
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player->kartstuff[k_sneakertimer]) // Sneaker
|
||||||
|
{
|
||||||
|
switch (gamespeed)
|
||||||
{
|
{
|
||||||
boostvalue = max(boostvalue, FRACUNIT/5); // + 20%
|
case 0:
|
||||||
|
speedboost = max(speedboost, 53740+768);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
speedboost = max(speedboost, 17294+768);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
speedboost = max(speedboost, 32768);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
accelboost = max(accelboost, 8*FRACUNIT); // + 800%
|
||||||
}
|
}
|
||||||
if (player->kartstuff[k_invincibilitytimer])
|
|
||||||
{ // Invincibility
|
|
||||||
if (speed)
|
|
||||||
boostvalue = max(boostvalue, 3*(FRACUNIT/8)); // + 37.5%
|
|
||||||
else
|
|
||||||
boostvalue = max(boostvalue, 3*FRACUNIT); // + 600%
|
|
||||||
}
|
|
||||||
if (player->kartstuff[k_driftboost])
|
|
||||||
{ // Drift Boost
|
|
||||||
if (speed)
|
|
||||||
boostvalue = max(boostvalue, FRACUNIT/4); // + 25%
|
|
||||||
else
|
|
||||||
boostvalue = max(boostvalue, 4*FRACUNIT); // + 400%
|
|
||||||
}
|
|
||||||
if (player->kartstuff[k_sneakertimer])
|
|
||||||
{ // Sneaker
|
|
||||||
if (speed)
|
|
||||||
{
|
|
||||||
switch (gamespeed)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
boostvalue = max(boostvalue, 53740+768);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
boostvalue = max(boostvalue, 17294+768);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
boostvalue = max(boostvalue, 32768);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
boostvalue = max(boostvalue, 8*FRACUNIT); // + 800%
|
|
||||||
}
|
|
||||||
// don't average them anymore, this would make a small boost and a high boost less useful
|
// don't average them anymore, this would make a small boost and a high boost less useful
|
||||||
// just take the highest we want instead
|
// just take the highest we want instead
|
||||||
|
|
||||||
return boostpower + boostvalue;
|
if (boostpower + speedboost > player->kartstuff[k_speedboost])
|
||||||
|
player->kartstuff[k_speedboost] += ((boostpower+speedboost) - player->kartstuff[k_speedboost])/(TICRATE/2); // Quick increase if higher
|
||||||
|
else
|
||||||
|
player->kartstuff[k_speedboost] += ((boostpower+speedboost) - player->kartstuff[k_speedboost])/TICRATE; // Smoothly decrease if lower
|
||||||
|
|
||||||
|
// Accel isn't affected by boostpower, hence the FRACUNIT. Probably for making acceleration feel consistent in offroad.
|
||||||
|
player->kartstuff[k_accelboost] = FRACUNIT+accelboost;
|
||||||
}
|
}
|
||||||
|
|
||||||
fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower)
|
fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower)
|
||||||
|
@ -1538,7 +1540,7 @@ fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower)
|
||||||
finalspeed = FixedMul(FixedMul(k_speed<<14, g_cc), player->mo->scale);
|
finalspeed = FixedMul(FixedMul(k_speed<<14, g_cc), player->mo->scale);
|
||||||
|
|
||||||
if (doboostpower)
|
if (doboostpower)
|
||||||
return FixedMul(finalspeed, K_GetKartBoostPower(player, true));
|
return FixedMul(finalspeed, player->kartstuff[k_speedboost]);
|
||||||
return finalspeed;
|
return finalspeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1553,7 +1555,7 @@ fixed_t K_GetKartAccel(player_t *player)
|
||||||
//k_accel += 3 * (9 - kartspeed); // 36 - 60
|
//k_accel += 3 * (9 - kartspeed); // 36 - 60
|
||||||
k_accel += 4 * (9 - kartspeed); // 32 - 64
|
k_accel += 4 * (9 - kartspeed); // 32 - 64
|
||||||
|
|
||||||
return FixedMul(k_accel, K_GetKartBoostPower(player, false));
|
return FixedMul(k_accel, player->kartstuff[k_accelboost]);
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT16 K_GetKartFlashing(player_t *player)
|
UINT16 K_GetKartFlashing(player_t *player)
|
||||||
|
@ -3163,6 +3165,7 @@ player_t *K_FindJawzTarget(mobj_t *actor, player_t *source)
|
||||||
void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
{
|
{
|
||||||
K_UpdateOffroad(player);
|
K_UpdateOffroad(player);
|
||||||
|
K_GetKartBoostPower(player);
|
||||||
|
|
||||||
if (player->kartstuff[k_eggmanexplode]) // You're gonna diiiiie
|
if (player->kartstuff[k_eggmanexplode]) // You're gonna diiiiie
|
||||||
{
|
{
|
||||||
|
|
|
@ -8379,6 +8379,9 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
||||||
// sets ideal cam pos
|
// sets ideal cam pos
|
||||||
dist = camdist;
|
dist = camdist;
|
||||||
|
|
||||||
|
if (player->speed > K_GetKartSpeed(player, false))
|
||||||
|
dist += 3*(player->speed - K_GetKartSpeed(player, false));
|
||||||
|
|
||||||
// in splitscreen modes, mess with the camera distances to make it feel proportional to how it feels normally
|
// in splitscreen modes, mess with the camera distances to make it feel proportional to how it feels normally
|
||||||
if (splitscreen == 1) // widescreen splits should get x1.5 distance
|
if (splitscreen == 1) // widescreen splits should get x1.5 distance
|
||||||
{
|
{
|
||||||
|
@ -8628,8 +8631,8 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
thiscam->momx = x-thiscam->x;
|
thiscam->momx = x - thiscam->x;
|
||||||
thiscam->momy = y-thiscam->y;
|
thiscam->momy = y - thiscam->y;
|
||||||
thiscam->momz = FixedMul(z - thiscam->z, camspeed/2);
|
thiscam->momz = FixedMul(z - thiscam->z, camspeed/2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue