mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-01-02 21:22:40 +00:00
Merge branch 'spindash-rebalance' into 'master'
Spindash rebalance See merge request KartKrew/Kart!365
This commit is contained in:
commit
e603c4d48d
8 changed files with 56 additions and 14 deletions
|
|
@ -616,6 +616,8 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i)
|
|||
rsp->kartstuff[j] = LONG(players[i].kartstuff[j]);
|
||||
|
||||
rsp->airtime = (tic_t)LONG(players[i].airtime);
|
||||
rsp->driftInput = players[i].driftInput;
|
||||
|
||||
rsp->trickpanel = (UINT8)players[i].trickpanel;
|
||||
rsp->trickdelay = (boolean)players[i].trickdelay;
|
||||
rsp->trickmomx = (fixed_t)LONG(players[i].trickmomx);
|
||||
|
|
@ -776,6 +778,8 @@ static void resynch_read_player(resynch_pak *rsp)
|
|||
players[i].kartstuff[j] = LONG(rsp->kartstuff[j]);
|
||||
|
||||
players[i].airtime = (tic_t)LONG(rsp->airtime);
|
||||
players[i].driftInput = (boolean)rsp->driftInput;
|
||||
|
||||
players[i].trickpanel = (UINT8)rsp->trickpanel;
|
||||
players[i].trickdelay = (boolean)rsp->trickdelay;
|
||||
players[i].trickmomx = (fixed_t)LONG(rsp->trickmomx);
|
||||
|
|
|
|||
|
|
@ -280,6 +280,7 @@ typedef struct
|
|||
// SRB2kart
|
||||
INT32 kartstuff[NUMKARTSTUFF];
|
||||
tic_t airtime;
|
||||
boolean driftInput;
|
||||
UINT8 trickpanel;
|
||||
boolean trickdelay;
|
||||
fixed_t trickmomx;
|
||||
|
|
|
|||
|
|
@ -519,10 +519,12 @@ typedef struct player_s
|
|||
// SRB2kart stuff
|
||||
INT32 kartstuff[NUMKARTSTUFF];
|
||||
INT32 karthud[NUMKARTHUD];
|
||||
|
||||
UINT32 distancetofinish;
|
||||
waypoint_t *nextwaypoint;
|
||||
respawnvars_t respawn; // Respawn info
|
||||
tic_t airtime; // Keep track of how long you've been in the air
|
||||
boolean driftInput; // Whenever or not try drifting.
|
||||
|
||||
UINT8 trickpanel; // Trick panel state
|
||||
boolean trickdelay; // Prevent tricks until control stick is neutral
|
||||
|
|
|
|||
50
src/k_kart.c
50
src/k_kart.c
|
|
@ -2287,6 +2287,13 @@ boolean K_ApplyOffroad(player_t *player)
|
|||
return true;
|
||||
}
|
||||
|
||||
boolean K_SlopeResistance(player_t *player)
|
||||
{
|
||||
if (player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_sneakertimer] || player->kartstuff[k_tiregrease])
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static fixed_t K_FlameShieldDashVar(INT32 val)
|
||||
{
|
||||
// 1 second = 75% + 50% top speed
|
||||
|
|
@ -2305,7 +2312,7 @@ fixed_t K_GetSpindashChargeSpeed(player_t *player)
|
|||
// more speed for higher weight & speed
|
||||
// Tails = +6.25%, Fang = +20.31%, Mighty = +20.31%, Metal = +25%
|
||||
// (can be higher than this value when overcharged)
|
||||
return (player->kartspeed + player->kartweight) * (FRACUNIT/64);
|
||||
return (player->kartspeed + player->kartweight) * (FRACUNIT/32);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2381,11 +2388,12 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
if (player->kartstuff[k_spindashboost]) // Spindash boost
|
||||
{
|
||||
const fixed_t MAXCHARGESPEED = K_GetSpindashChargeSpeed(player);
|
||||
const fixed_t exponent = FixedMul(player->kartstuff[k_spindashspeed], player->kartstuff[k_spindashspeed]);
|
||||
|
||||
// character & charge dependent
|
||||
ADDBOOST(
|
||||
FixedMul(MAXCHARGESPEED, player->kartstuff[k_spindashspeed]), // + 0 to K_GetSpindashChargeSpeed()% top speed
|
||||
(4*FRACUNIT) + (36*player->kartstuff[k_spindashspeed]), // + 400% to 4000% acceleration
|
||||
FixedMul(MAXCHARGESPEED, exponent), // + 0 to K_GetSpindashChargeSpeed()% top speed
|
||||
(40 * exponent), // + 0% to 4000% acceleration
|
||||
0 // + 0% handling
|
||||
);
|
||||
}
|
||||
|
|
@ -6392,9 +6400,18 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
}
|
||||
|
||||
if (cmd->buttons & BT_DRIFT)
|
||||
player->kartstuff[k_jmp] = 1;
|
||||
{
|
||||
// Only allow drifting while NOT trying to do an spindash input.
|
||||
if ((cmd->buttons & BT_EBRAKEMASK) != BT_EBRAKEMASK)
|
||||
{
|
||||
player->driftInput = true;
|
||||
}
|
||||
// else, keep the previous value, because it might be brake-drifting.
|
||||
}
|
||||
else
|
||||
player->kartstuff[k_jmp] = 0;
|
||||
{
|
||||
player->driftInput = false;
|
||||
}
|
||||
|
||||
// Roulette Code
|
||||
K_KartItemRoulette(player, cmd);
|
||||
|
|
@ -6999,13 +7016,15 @@ void K_SpawnDriftBoostExplosion(player_t *player, int stage)
|
|||
|
||||
static void K_KartDrift(player_t *player, boolean onground)
|
||||
{
|
||||
fixed_t minspeed = (10 * player->mo->scale);
|
||||
INT32 dsone = K_GetKartDriftSparkValue(player);
|
||||
INT32 dstwo = dsone*2;
|
||||
INT32 dsthree = dstwo*2;
|
||||
const fixed_t minspeed = (10 * player->mo->scale);
|
||||
|
||||
const INT32 dsone = K_GetKartDriftSparkValue(player);
|
||||
const INT32 dstwo = dsone*2;
|
||||
const INT32 dsthree = dstwo*2;
|
||||
|
||||
// Drifting is actually straffing + automatic turning.
|
||||
// Holding the Jump button will enable drifting.
|
||||
// (This comment is extremely funny)
|
||||
|
||||
// Drift Release (Moved here so you can't "chain" drifts)
|
||||
if (player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5)
|
||||
|
|
@ -7066,21 +7085,21 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
}
|
||||
|
||||
// Drifting: left or right?
|
||||
if ((player->cmd.turning > 0) && player->speed > minspeed && player->kartstuff[k_jmp] == 1
|
||||
if ((player->cmd.turning > 0) && player->speed > minspeed && player->driftInput == true
|
||||
&& (player->kartstuff[k_drift] == 0 || player->kartstuff[k_driftend] == 1)) // && player->kartstuff[k_drift] != 1)
|
||||
{
|
||||
// Starting left drift
|
||||
player->kartstuff[k_drift] = 1;
|
||||
player->kartstuff[k_driftend] = player->kartstuff[k_driftcharge] = 0;
|
||||
}
|
||||
else if ((player->cmd.turning < 0) && player->speed > minspeed && player->kartstuff[k_jmp] == 1
|
||||
else if ((player->cmd.turning < 0) && player->speed > minspeed && player->driftInput == true
|
||||
&& (player->kartstuff[k_drift] == 0 || player->kartstuff[k_driftend] == 1)) // && player->kartstuff[k_drift] != -1)
|
||||
{
|
||||
// Starting right drift
|
||||
player->kartstuff[k_drift] = -1;
|
||||
player->kartstuff[k_driftend] = player->kartstuff[k_driftcharge] = 0;
|
||||
}
|
||||
else if (player->kartstuff[k_jmp] == 0) // || player->kartstuff[k_turndir] == 0)
|
||||
else if (player->driftInput == false) // || player->kartstuff[k_turndir] == 0)
|
||||
{
|
||||
// drift is not being performed so if we're just finishing set driftend and decrement counters
|
||||
if (player->kartstuff[k_drift] > 0)
|
||||
|
|
@ -7104,7 +7123,7 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
player->kartstuff[k_aizdriftstrat] = player->kartstuff[k_brakedrift] = 0;
|
||||
player->kartstuff[k_getsparks] = 0;
|
||||
}
|
||||
else if (player->kartstuff[k_jmp] == 1 && player->kartstuff[k_drift] != 0)
|
||||
else if (player->driftInput == true && player->kartstuff[k_drift] != 0)
|
||||
{
|
||||
// Incease/decrease the drift value to continue drifting in that direction
|
||||
fixed_t driftadditive = 24;
|
||||
|
|
@ -7456,6 +7475,11 @@ static void K_KartSpindash(player_t *player)
|
|||
ticcmd_t *cmd = &player->cmd;
|
||||
boolean spawnWind = (leveltime % 2 == 0);
|
||||
|
||||
if (player->mo->hitlag > 0 || P_PlayerInPain(player))
|
||||
{
|
||||
player->kartstuff[k_spindash] = 0;
|
||||
}
|
||||
|
||||
if (player->kartstuff[k_spindash] > 0 && (cmd->buttons & (BT_DRIFT|BT_BRAKE)) != (BT_DRIFT|BT_BRAKE))
|
||||
{
|
||||
player->kartstuff[k_spindashspeed] = (player->kartstuff[k_spindash] * FRACUNIT) / MAXCHARGETIME;
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ void K_StripItems(player_t *player);
|
|||
void K_StripOther(player_t *player);
|
||||
void K_MomentumToFacing(player_t *player);
|
||||
boolean K_ApplyOffroad(player_t *player);
|
||||
boolean K_SlopeResistance(player_t *player);
|
||||
INT16 K_GetSpindashChargeTime(player_t *player);
|
||||
fixed_t K_GetSpindashChargeSpeed(player_t *player);
|
||||
fixed_t K_GetKartSpeedFromStat(UINT8 kartspeed);
|
||||
|
|
|
|||
|
|
@ -218,6 +218,8 @@ static int player_get(lua_State *L)
|
|||
LUA_PushUserdata(L, plr->karthud, META_KARTHUD);
|
||||
else if (fastcmp(field,"airtime"))
|
||||
lua_pushinteger(L, plr->airtime);
|
||||
else if (fastcmp(field,"driftInput"))
|
||||
lua_pushboolean(L, plr->driftInput);
|
||||
else if (fastcmp(field,"tumbleBounces"))
|
||||
lua_pushinteger(L, plr->tumbleBounces);
|
||||
else if (fastcmp(field,"tumbleHeight"))
|
||||
|
|
@ -529,6 +531,8 @@ static int player_set(lua_State *L)
|
|||
return NOSET;
|
||||
else if (fastcmp(field,"airtime"))
|
||||
plr->airtime = (tic_t)luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"driftInput"))
|
||||
plr->driftInput = luaL_checkboolean(L, 3);
|
||||
else if (fastcmp(field,"tumbleBounces"))
|
||||
plr->tumbleBounces = (UINT8)luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"tumbleHeight"))
|
||||
|
|
|
|||
|
|
@ -255,7 +255,10 @@ static void P_NetArchivePlayers(void)
|
|||
|
||||
WRITEUINT32(save_p, players[i].distancetofinish);
|
||||
WRITEUINT32(save_p, K_GetWaypointHeapIndex(players[i].nextwaypoint));
|
||||
|
||||
WRITEUINT32(save_p, players[i].airtime);
|
||||
WRITEUINT8(save_p, players[i].driftInput);
|
||||
|
||||
WRITEUINT8(save_p, players[i].trickpanel);
|
||||
WRITEUINT8(save_p, players[i].trickdelay);
|
||||
WRITEUINT32(save_p, players[i].trickmomx);
|
||||
|
|
@ -457,7 +460,10 @@ static void P_NetUnArchivePlayers(void)
|
|||
|
||||
players[i].distancetofinish = READUINT32(save_p);
|
||||
players[i].nextwaypoint = (waypoint_t *)(size_t)READUINT32(save_p);
|
||||
|
||||
players[i].airtime = READUINT32(save_p);
|
||||
players[i].driftInput = (boolean)READUINT8(save_p);
|
||||
|
||||
players[i].trickpanel = READUINT8(save_p);
|
||||
players[i].trickdelay = READUINT8(save_p);
|
||||
players[i].trickmomx = READUINT32(save_p);
|
||||
|
|
|
|||
|
|
@ -1851,7 +1851,7 @@ static void P_3dMovement(player_t *player)
|
|||
totalthrust.x = totalthrust.y = 0; // I forget if this is needed
|
||||
totalthrust.z = FRACUNIT*P_MobjFlip(player->mo)/3; // A bit of extra push-back on slopes
|
||||
|
||||
if (player->kartstuff[k_sneakertimer] > 0)
|
||||
if (K_SlopeResistance(player) == true)
|
||||
{
|
||||
totalthrust.z = -(totalthrust.z);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue