Hardcode slopeboost

Ported and based on the slopeboost from booststack by indev
This commit is contained in:
NepDisk 2025-07-21 21:01:48 -04:00
parent 2f539c1564
commit 6d6c0f54a5
15 changed files with 245 additions and 13 deletions

View file

@ -86,8 +86,8 @@
#define ASSET_HASH_TEXTURES_KART 0xb4211b2f32b6a291
#define ASSET_HASH_CHARS_KART 0x1e68a3e01aa5c68b
#define ASSET_HASH_MAPS_KART 0x38558ed00da41ce9
#define ASSET_HASH_MAIN_PK3 0x632882d006fb89b8
#define ASSET_HASH_MAPPATCH_PK3 0x4d12e04069df3b9f
#define ASSET_HASH_MAIN_PK3 0x3ef9836273479c8f
#define ASSET_HASH_MAPPATCH_PK3 0x8c789d4a74632786
#define ASSET_HASH_BONUSCHARS_KART 0x60e6f13d822a7461
#ifdef USE_PATCH_FILE
#define ASSET_HASH_PATCH_PK3 0x0000000000000000

View file

@ -153,6 +153,7 @@ static void KartPurpleDrift_OnChange(void);
static void KartStacking_OnChange(void);
static void KartChaining_OnChange(void);
static void KartSlipdash_OnChange(void);
static void KartSlopeBoost_OnChange(void);
static void KartItemBreaker_OnChange(void);
static void KartInvinType_OnChange(void);
@ -487,7 +488,14 @@ consvar_t cv_kartstacking_drift_stackable = CVAR_INIT ("vanillaboost_drift_stack
consvar_t cv_kartstacking_ring_speedboost = CVAR_INIT ("vanillaboost_ring_speedboost", "0.2", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL);
consvar_t cv_kartstacking_ring_accelboost = CVAR_INIT ("vanillaboost_ring_accelboost", "4.0", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL);
consvar_t cv_kartstacking_ring_stackable = CVAR_INIT ("vanillaboost_ring_stackable", "On", CV_NETVAR, CV_OnOff, NULL);
consvar_t cv_kartstacking_ring_stackable = CVAR_INIT ("vanillaboost_ring_stackable", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
consvar_t cv_kartstacking_slope_decay = CVAR_INIT ("vanillaboost_slope_decay", "0.004", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL);
consvar_t cv_kartstacking_slope_brakemod = CVAR_INIT ("vanillaboost_slope_brakemod", "0.01", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL);
consvar_t cv_kartstacking_slope_speedboost_max = CVAR_INIT ("vanillaboost_slope_speedboost_max", "3.0", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL);
consvar_t cv_kartstacking_slope_speedboost_cap = CVAR_INIT ("vanillaboost_slope_speedboost_cap", "1.0", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL);
consvar_t cv_kartstacking_slope_accelboost = CVAR_INIT ("vanillaboost_slope_accelboost", "3.0", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL);
consvar_t cv_kartstacking_slope_stackable = CVAR_INIT ("vanillaboost_slope_stackable", "On", CV_NETVAR, CV_OnOff, NULL);
consvar_t cv_kartchaining = CVAR_INIT ("kartchaining", "No", CV_NETVAR|CV_CALL|CV_NOINIT, CV_YesNo, KartChaining_OnChange);
consvar_t cv_kartchainingoffroad = CVAR_INIT ("kartchaining_chainoffroad", "No", CV_NETVAR, CV_YesNo, NULL);
@ -506,6 +514,8 @@ consvar_t cv_kartbumpspring = CVAR_INIT ("kartbumpspring", "No", CV_NETVAR, CV_Y
consvar_t cv_kartslipdash = CVAR_INIT ("kartslipdash", "No", CV_NETVAR|CV_CALL|CV_NOINIT, CV_YesNo, KartSlipdash_OnChange);
consvar_t cv_kartslopeboost = CVAR_INIT ("kartslopeboost", "No", CV_NETVAR|CV_CALL|CV_NOINIT, CV_YesNo, KartSlopeBoost_OnChange);
// Invincibility modifiers
static CV_PossibleValue_t invintype_cons_t[] = {{0, "Legacy"}, {1, "Alternative"}, {0, NULL}};
consvar_t cv_kartinvintype = CVAR_INIT ("kartinvintype", "Legacy", CV_NETVAR|CV_CALL, invintype_cons_t, KartInvinType_OnChange);
@ -7311,6 +7321,39 @@ static void KartSlipdash_OnChange(void)
}
}
static void KartSlopeBoost_OnChange(void)
{
if (K_CanChangeRules() == false)
{
return;
}
if (!K_SlopeBoostActive() && cv_kartslopeboost.value)
{
if (leveltime < starttime)
{
slopeboostactive = true;
CONS_Printf(M_GetText("Slopeboost has been turned \"On\".\n"));
}
else
{
CONS_Printf(M_GetText("Slopeboost will be turned \"On\" Next Round.\n"));
}
}
else if (K_SlopeBoostActive() && !cv_kartslopeboost.value)
{
if (leveltime < starttime)
{
slopeboostactive = false;
CONS_Printf(M_GetText("Slopeboost has been turned \"Off\".\n"));
}
else
{
CONS_Printf(M_GetText("Slopeboost will be turned \"Off\" next round.\n"));
}
}
}
static void KartItemBreaker_OnChange(void)
{
if (K_CanChangeRules() == false)

View file

@ -164,6 +164,13 @@ extern consvar_t cv_kartstacking_ring_speedboost;
extern consvar_t cv_kartstacking_ring_accelboost;
extern consvar_t cv_kartstacking_ring_stackable;
extern consvar_t cv_kartstacking_slope_decay;
extern consvar_t cv_kartstacking_slope_brakemod;
extern consvar_t cv_kartstacking_slope_speedboost_max;
extern consvar_t cv_kartstacking_slope_speedboost_cap;
extern consvar_t cv_kartstacking_slope_accelboost;
extern consvar_t cv_kartstacking_slope_stackable;
extern consvar_t cv_kartchaining;
extern consvar_t cv_kartchainingoffroad;
@ -173,6 +180,7 @@ extern consvar_t cv_kartpurpledrift;
extern consvar_t cv_kartbumpspark;
extern consvar_t cv_kartbumpspring;
extern consvar_t cv_kartslipdash;
extern consvar_t cv_kartslopeboost;
extern consvar_t cv_kartinvintype;
extern consvar_t cv_kartinvindist;
extern consvar_t cv_kartinvindistmul;

View file

@ -707,6 +707,10 @@ struct player_t
UINT16 chaintimer; // Stores current chain timer length.
UINT8 boostcharge; // Charge during race start
fixed_t slopeboost; // Handle slopeboost speed
fixed_t prevslopeboost; // Last frame slopeboost speed
fixed_t slopeaccel; // Handle slopeboost accel
INT16 growshrinktimer; // > 0 = Big, < 0 = small
INT16 growcancel; // Duration of grow canceling

View file

@ -1858,6 +1858,7 @@ static struct { const char *name; consvar_t *var; } HIDDENVARS[] = {
{ "DUMMYATTACKINGCHAINING", &cv_dummyattackingchaining },
{ "DUMMYATTACKINGSLIPDASH", &cv_dummyattackingslipdash },
{ "DUMMYATTACKINGPURPLEDRIFT", &cv_dummyattackingpurpledrift },
{ "DUMMYATTACKINGSLOPEBOOST", &cv_dummyattackingslopeboost },
{ "DUMMYSTAFF", &cv_dummystaff },
{ "DUMMYMULTIPLAYER", &cv_dummymultiplayer },
{ "DUMMYIP", &cv_dummyip },

View file

@ -467,14 +467,15 @@ SINT8 G_RecordPresetIndex(void)
boolean chaining = cv_dummyattackingchaining.value;
boolean slipdash = cv_dummyattackingslipdash.value;
boolean purpledrift = cv_dummyattackingpurpledrift.value;
boolean slopeboost = cv_dummyattackingslopeboost.value;
if (!rings && !stacking && !chaining && !slipdash && !purpledrift)
if (!rings && !stacking && !chaining && !slipdash && !purpledrift && !slopeboost)
return RP_KART;
if (stacking && chaining && !rings && !slipdash && !purpledrift)
if (stacking && chaining && slopeboost && !rings && !slipdash && !purpledrift)
return RP_TECH;
if (rings && stacking && chaining && slipdash && purpledrift)
if (rings && stacking && chaining && slipdash && purpledrift && slopeboost)
return RP_BLAN;
return RP_CUST;

View file

@ -339,6 +339,13 @@ void K_RegisterKartStuff(void)
CV_RegisterVar(&cv_kartstacking_ring_accelboost);
CV_RegisterVar(&cv_kartstacking_ring_stackable);
CV_RegisterVar(&cv_kartstacking_slope_decay);
CV_RegisterVar(&cv_kartstacking_slope_brakemod);
CV_RegisterVar(&cv_kartstacking_slope_speedboost_max);
CV_RegisterVar(&cv_kartstacking_slope_speedboost_cap);
CV_RegisterVar(&cv_kartstacking_slope_accelboost);
CV_RegisterVar(&cv_kartstacking_slope_stackable);
CV_RegisterVar(&cv_kartchaining);
CV_RegisterVar(&cv_kartchainingoffroad);
CV_RegisterVar(&cv_kartchainingsound);
@ -355,6 +362,8 @@ void K_RegisterKartStuff(void)
CV_RegisterVar(&cv_kartslipdash);
CV_RegisterVar(&cv_kartslopeboost);
CV_RegisterVar(&cv_kartinvintype);
CV_RegisterVar(&cv_kartinvindist);
CV_RegisterVar(&cv_kartinvindistmul);
@ -3829,6 +3838,88 @@ static fixed_t K_RingDurationBoost(const player_t *player)
return ret;
}
static fixed_t K_DecaySlopeBoost(fixed_t prevslopeboost, INT32 brake)
{
return max(prevslopeboost - (SLOPEDECAY + brake + prevslopeboost/60), 0);
}
static void K_DoSlopeBrake(player_t *player, fixed_t prevslopeboost, INT32 brake)
{
player->slopeboost = K_DecaySlopeBoost(prevslopeboost, brake);
player->slopeaccel = 0;
player->prevslopeboost = player->slopeboost;
}
static void K_UpdateSlopeBoost(player_t *player)
{
pslope_t *slope = player->mo->standingslope;
boolean flip = player->mo->eflags & MFE_VERTICALFLIP;
angle_t momangle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy), hillangle = 0;
fixed_t anglemult, slopemult, mult;
fixed_t addedboost, addedaccel;
INT32 brake;
if (!K_SlopeBoostActive())
{
player->slopeboost = player->slopeaccel = player->prevslopeboost = 0;
return;
}
if ((K_GetKartButtons(player) & BT_BRAKE) || player->offroad || !player->speed)
{
brake = SLOPEBRAKEMOD;
}
if (!slope || (player->offroad && K_ApplyOffroad(player)) || !player->speed)
{
K_DoSlopeBrake(player, player->prevslopeboost, brake);
return;
}
if ((((int)slope->zangle > 0) && flip) || (((int)slope->zangle < 0) && (!flip)))
{
hillangle = momangle - slope->xydirection;
}
else
{
hillangle = momangle - (slope->xydirection + ANGLE_180);
}
hillangle = max(abs((int)hillangle) - ANG1*3, 0); // ANG1*3 somehow fixes some slopes???
if (hillangle >= ANGLE_90)
{
K_DoSlopeBrake(player, player->prevslopeboost, brake);
return;
}
anglemult = FixedDiv(AngleFixed(ANGLE_90-hillangle), 90*FRACUNIT);
slopemult = FixedDiv(AngleFixed(min(abs((int)slope->zangle)+ANG1*3, ANGLE_90)), 90*FRACUNIT);
mult = FixedMul(anglemult, slopemult);
addedboost = min(FixedMul(mult, SLOPESPEEDBOOSTMAX), SLOPESPEEDBOOSTCAP);
addedaccel = FixedMul(mult, SLOPEACCELBOOST);
if (K_GetKartButtons(player) & BT_BRAKE)
{
addedboost = K_DecaySlopeBoost(player->prevslopeboost, brake);
}
else if (addedboost >= player->prevslopeboost)
{
addedboost = min(addedboost, player->prevslopeboost+mult*5/100);
}
else
{
addedboost = max(K_DecaySlopeBoost(player->prevslopeboost, brake), addedboost);
}
player->slopeboost = addedboost;
player->slopeaccel = addedaccel;
player->prevslopeboost = addedboost;
}
// sets boostpower, speedboost and accelboost to whatever we need it to be
static void K_GetKartBoostPower(player_t *player)
{
@ -3908,6 +3999,11 @@ static void K_GetKartBoostPower(player_t *player)
K_DoBoost(player, RINGSPEEDBOOST, RINGACCELBOOST, RINGSTACKABLE, RINGSTACKABLE); // + 20% top speed, + 400% acceleration
}
if (player->slopeboost || player->slopeaccel)
{
K_DoBoost(player, player->slopeboost, player->slopeaccel, SLOPESTACKABLE, false); // + ???% top speed, + 300% acceleration
}
// This should always remain the last boost
if (player->botvars.rubberband > FRACUNIT && K_PlayerUsesBotMovement(player) == true)
{
@ -7714,6 +7810,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
if (!K_IsPlayerDamaged(player) && !player->wipeoutslow)
player->boostangle = player->mo->angle;
K_UpdateSlopeBoost(player);
K_GetKartBoostPower(player);
// Special effect objects!
@ -11799,6 +11896,17 @@ boolean K_SlipdashActive(void)
return false;
}
boolean K_SlopeBoostActive(void)
{
if (slopeboostactive)
{
// SlopeBoost is enabled!
return true;
}
return false;
}
boolean K_UsingLegacyCheckpoints(void)
{
if (K_UsingPatchedMap() && waypointcap)

View file

@ -93,27 +93,40 @@ extern vector3_t clusterpoint, clusterdtf;
#define SNEAKERACCELBOOST K_RAGuard(cv_kartstacking_sneaker_accelboost)
#define MAXSNEAKERSTACK K_RAGuard(cv_kartstacking_sneaker_maxgrade)
#define SNEAKERSTACKABLE K_RAGuard(cv_kartstacking_sneaker_stackable)
#define INVINSPEEDBOOSTLGC K_RAGuard(cv_kartstacking_invincibility_legacyspeedboost)
#define INVINACCELBOOSTLGC K_RAGuard(cv_kartstacking_invincibility_legacyaccelboost)
#define INVINSPEEDBOOSTALT K_RAGuard(cv_kartstacking_invincibility_alternatespeedboost)
#define INVINACCELBOOSTALT K_RAGuard(cv_kartstacking_invincibility_alternateaccelboost)
#define INVINSTACKABLE K_RAGuard(cv_kartstacking_invincibility_stackable)
#define GROWSPEEDBOOST K_RAGuard(cv_kartstacking_grow_speedboost)
#define GROWACCELBOOST K_RAGuard(cv_kartstacking_grow_accelboost)
#define GROWSTACKABLE K_RAGuard(cv_kartstacking_grow_stackable)
#define FLAMESPEEDVAL K_RAGuard(cv_kartstacking_flame_speedval)
#define FLAMEACCELBOOST K_RAGuard(cv_kartstacking_flame_accelboost)
#define FLAMESTACKABLE K_RAGuard(cv_kartstacking_flame_stackable)
#define STARTSPEEDBOOST K_RAGuard(cv_kartstacking_start_speedboost)
#define STARTACCELBOOST K_RAGuard(cv_kartstacking_start_accelboost)
#define STARTSTACKABLE K_RAGuard(cv_kartstacking_start_stackable)
#define DRIFTSPEEDBOOST K_RAGuard(cv_kartstacking_drift_speedboost)
#define DRIFTACCELBOOST K_RAGuard(cv_kartstacking_drift_accelboost)
#define DRIFTSTACKABLE K_RAGuard(cv_kartstacking_drift_stackable)
#define RINGSPEEDBOOST K_RAGuard(cv_kartstacking_ring_speedboost)
#define RINGACCELBOOST K_RAGuard(cv_kartstacking_ring_accelboost)
#define RINGSTACKABLE K_RAGuard(cv_kartstacking_ring_stackable)
#define SLOPEDECAY K_RAGuard(cv_kartstacking_slope_decay)
#define SLOPEBRAKEMOD K_RAGuard(cv_kartstacking_slope_brakemod)
#define SLOPESPEEDBOOSTMAX K_RAGuard(cv_kartstacking_slope_speedboost_max)
#define SLOPESPEEDBOOSTCAP K_RAGuard(cv_kartstacking_slope_speedboost_cap)
#define SLOPEACCELBOOST K_RAGuard(cv_kartstacking_slope_accelboost)
#define SLOPESTACKABLE K_RAGuard(cv_kartstacking_slope_stackable)
#define CANTCHAINOFFROAD (cv_kartchaining.value && !cv_kartchainingoffroad.value)
// Used for respawning checks.
@ -301,6 +314,7 @@ boolean K_PurpleDriftActive(void);
boolean K_StackingActive(void);
boolean K_ChainingActive(void);
boolean K_SlipdashActive(void);
boolean K_SlopeBoostActive(void);
boolean K_BoostChain(player_t *player, INT32 timer, boolean chainsound);
INT32 K_ChainOrDeincrementTime(player_t *player, INT32 timer, INT32 deincrement, boolean chainsound);
boolean K_UsingLegacyCheckpoints(void);

View file

@ -4052,13 +4052,20 @@ static int lib_kChainingActive(lua_State *L)
return 1;
}
// Checks if Chaining is active.
// Checks if Slipdash is active.
static int lib_kSlipdashActive(lua_State *L)
{
lua_pushboolean(L, K_SlipdashActive());
return 1;
}
// Checks if Slope Boost is active.
static int lib_kSlopeBoostActive(lua_State *L)
{
lua_pushboolean(L, K_SlopeBoostActive());
return 1;
}
// Checks if current map is using legacy boss3 bassed checkpoints. Useful for map compat.
static int lib_kUsingLegacyCheckpoints(lua_State *L)
{
@ -4638,6 +4645,7 @@ static luaL_Reg lib[] = {
{"K_StackingActive",lib_kStackingActive},
{"K_ChainingActive",lib_kChainingActive},
{"K_SlipdashActive",lib_kSlipdashActive},
{"K_SlopeBoostActive",lib_kSlopeBoostActive},
{"K_UsingLegacyCheckpoints",lib_kUsingLegacyCheckpoints},
{"K_DoBoost",lib_kDoBoost},
{"K_ClearBoost",lib_kClearBoost},

View file

@ -209,6 +209,9 @@ enum player_e
player_driftcharge,
player_driftboost,
player_boostcharge,
player_slopeboost,
player_prevslopeboost,
player_slopeaccel,
player_startboost,
player_dropdash,
player_respawn,
@ -391,6 +394,9 @@ static const char *const player_opt[] = {
"driftcharge",
"driftboost",
"boostcharge",
"slopeboost",
"prevslopeboost",
"slopeaccel",
"startboost",
"dropdash",
"respawn",
@ -683,6 +689,15 @@ static int player_get(lua_State *L)
case player_boostcharge:
lua_pushinteger(L, plr->boostcharge);
break;
case player_slopeboost:
lua_pushinteger(L, plr->slopeboost);
break;
case player_prevslopeboost:
lua_pushinteger(L, plr->prevslopeboost);
break;
case player_slopeaccel:
lua_pushinteger(L, plr->slopeaccel);
break;
case player_startboost:
lua_pushinteger(L, plr->startboost);
break;
@ -1316,6 +1331,15 @@ static int player_set(lua_State *L)
case player_boostcharge:
plr->boostcharge = luaL_checkinteger(L, 3);
break;
case player_slopeboost:
plr->slopeboost = luaL_checkinteger(L, 3);
break;
case player_prevslopeboost:
plr->prevslopeboost = luaL_checkinteger(L, 3);
break;
case player_slopeaccel:
plr->slopeaccel = luaL_checkinteger(L, 3);
break;
case player_startboost:
plr->startboost = luaL_checkinteger(L, 3);
break;

View file

@ -385,6 +385,7 @@ consvar_t cv_dummyattackingstacking = CVAR_INIT ("dummyattackingstacking", "Off"
consvar_t cv_dummyattackingchaining = CVAR_INIT ("dummyattackingchaining", "Off", CV_HIDEN|CV_CALL|CV_NOINIT, CV_OnOff, Nextmap_OnChange);
consvar_t cv_dummyattackingslipdash = CVAR_INIT ("dummyattackingslipdash", "Off", CV_HIDEN|CV_CALL|CV_NOINIT, CV_OnOff, Nextmap_OnChange);
consvar_t cv_dummyattackingpurpledrift = CVAR_INIT ("dummyattackingpurpledrift", "Off", CV_HIDEN|CV_CALL|CV_NOINIT, CV_OnOff, Nextmap_OnChange);
consvar_t cv_dummyattackingslopeboost = CVAR_INIT ("dummyattackingslopeboost", "Off", CV_HIDEN|CV_CALL|CV_NOINIT, CV_OnOff, Nextmap_OnChange);
static CV_PossibleValue_t dummygpdifficulty_cons_t[] = {{KARTSPEED_EASY, "Easy"}, {KARTSPEED_NORMAL, "Normal"}, {KARTSPEED_HARD, "Hard"}, {KARTSPEED_EXPERT, "Expert"}, {KARTGP_MASTER, "Master"}, {KARTGP_NIGHTMARE, "Nightmare"}, {0, NULL}};
static CV_PossibleValue_t dummygpcup_cons_t[50] = {{1, "TEMP"}}; // A REALLY BIG NUMBER, SINCE THIS IS TEMP UNTIL NEW MENUS
@ -578,6 +579,7 @@ char *M_AppendGametypeAndModName(void)
ADD(cv_dummyattackingchaining, "CH-")
ADD(cv_dummyattackingslipdash, "SD-")
ADD(cv_dummyattackingpurpledrift, "PD-")
ADD(cv_dummyattackingslopeboost, "SB-")
new_str[len-1] = '\0';
@ -2035,6 +2037,7 @@ void M_Init(void)
CV_RegisterVar(&cv_dummyattackingchaining);
CV_RegisterVar(&cv_dummyattackingslipdash);
CV_RegisterVar(&cv_dummyattackingpurpledrift);
CV_RegisterVar(&cv_dummyattackingslopeboost);
CV_RegisterVar(&cv_dummygpdifficulty);
CV_RegisterVar(&cv_dummygpencore);
@ -5737,11 +5740,11 @@ INT32 MR_ReplayStaff(INT32 choice)
}
#define NUMPRESETS 3
static boolean presets[NUMPRESETS][5] = {
//rings stacking chaining slipdash purpledrift
{ false, false, false, false, false }, // SRB2Kart
{ false, true, true, false, false }, // Tech
{ true, true, true, true, true }, // BlanKart
static boolean presets[NUMPRESETS][6] = {
//rings stacking chaining slipdash purpledrift slopeboost
{ false, false, false, false, false, false}, // SRB2Kart
{ false, true, true, false, false, true}, // Tech
{ true, true, true, true, true, true}, // BlanKart
};
INT32 MR_TimeAttackPreset(INT32 arg)
@ -5755,6 +5758,7 @@ INT32 MR_TimeAttackPreset(INT32 arg)
CV_Set(&cv_dummyattackingchaining, preset[2] ? "On" : "Off");
CV_Set(&cv_dummyattackingslipdash, preset[3] ? "On" : "Off");
CV_Set(&cv_dummyattackingpurpledrift, preset[4] ? "On" : "Off");
CV_Set(&cv_dummyattackingslopeboost, preset[5] ? "On" : "Off");
return true;
}
#undef NUMPRESETS

View file

@ -406,7 +406,7 @@ extern consvar_t cv_newgametype, cv_nextmap, cv_chooseskin, cv_serversort;
extern consvar_t cv_dummygpdifficulty, cv_dummygpencore, cv_dummygpcup;
extern consvar_t cv_dummymenuplayer, cv_dummyteam, cv_dummyspectate, cv_dummyscramble;
extern consvar_t cv_dummyattackingrings, cv_dummyattackingstacking, cv_dummyattackingchaining;
extern consvar_t cv_dummyattackingslipdash, cv_dummyattackingpurpledrift;
extern consvar_t cv_dummyattackingslipdash, cv_dummyattackingpurpledrift, cv_dummyattackingslopeboost;
extern consvar_t cv_dummystaff;
extern consvar_t cv_dummymultiplayer, cv_dummyip, cv_dummyname, cv_dummyfollower, cv_dummycolor;
extern consvar_t cv_dummyserverpage;

View file

@ -590,6 +590,7 @@ extern boolean stackingactive;
extern boolean chainingactive;
extern boolean slipdashactive;
extern boolean purpledriftactive;
extern boolean slopeboostactive;
extern UINT16 bossdisabled;
extern boolean stoppedclock;

View file

@ -342,6 +342,10 @@ static void P_NetArchivePlayers(savebuffer_t *save)
WRITEUINT8(save->p, players[i].boostcharge);
WRITEFIXED(save->p, players[i].slopeboost);
WRITEFIXED(save->p, players[i].prevslopeboost);
WRITEFIXED(save->p, players[i].slopeaccel);
WRITEINT16(save->p, players[i].growshrinktimer);
WRITEINT16(save->p, players[i].growcancel);
@ -689,6 +693,10 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
players[i].boostcharge = READUINT8(save->p);
players[i].slopeboost = READFIXED(save->p);
players[i].prevslopeboost = READFIXED(save->p);
players[i].slopeaccel = READFIXED(save->p);
players[i].growshrinktimer = READINT16(save->p);
players[i].growcancel = READINT16(save->p);
@ -5169,6 +5177,7 @@ static void P_NetArchiveMisc(savebuffer_t *save, boolean resending)
WRITEUINT8(save->p, chainingactive);
WRITEUINT8(save->p, slipdashactive);
WRITEUINT8(save->p, purpledriftactive);
WRITEUINT8(save->p, slopeboostactive);
for (i = 0; i < 12; i++)
{
@ -5356,6 +5365,7 @@ FUNCINLINE static ATTRINLINE boolean P_NetUnArchiveMisc(savebuffer_t *save, bool
chainingactive = READUINT8(save->p);
slipdashactive = READUINT8(save->p);
purpledriftactive = READUINT8(save->p);
slopeboostactive = READUINT8(save->p);
for (i = 0; i < 12; i++)
{

View file

@ -150,6 +150,7 @@ boolean stackingactive;
boolean chainingactive;
boolean slipdashactive;
boolean purpledriftactive;
boolean slopeboostactive;
UINT16 bossdisabled;
boolean stoppedclock;
boolean levelloading;
@ -8021,6 +8022,7 @@ static void P_InitLevelSettings(boolean reloadinggamestate)
chainingactive = false;
slipdashactive = false;
purpledriftactive = false;
slopeboostactive = false;
if (cv_kartrings.value)
ringsactive = true;
@ -8037,6 +8039,9 @@ static void P_InitLevelSettings(boolean reloadinggamestate)
if (cv_kartslipdash.value)
slipdashactive = true;
if (cv_kartslopeboost.value)
slopeboostactive = true;
invintype = (UINT8)cv_kartinvintype.value;
// emerald hunt
@ -8117,6 +8122,7 @@ static void P_InitLevelSettings(boolean reloadinggamestate)
stackingactive = cv_dummyattackingstacking.value;
chainingactive = cv_dummyattackingchaining.value;
slipdashactive = cv_dummyattackingslipdash.value;
slopeboostactive = cv_dummyattackingslopeboost.value;
}
else
{