diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 57f0719a7..c1d60fa5b 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -153,6 +153,7 @@ static void KartEliminateLast_OnChange(void); static void KartRings_OnChange(void); static void KartStacking_OnChange(void); static void KartChaining_OnChange(void); +static void KartSlipdash_OnChange(void); static void KartItemBreaker_OnChange(void); static void Schedule_OnChange(void); @@ -478,7 +479,7 @@ consvar_t cv_kartstacking_ring_accelboost = CVAR_INIT ("vanillaboost_ring_accelb 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); -consvar_t cv_kartitembreaker = CVAR_INIT ("kartitembreaker", "No", CV_NETVAR|CV_CHEAT|CV_CALL|CV_NOINIT, CV_YesNo, KartItemBreaker_OnChange); +consvar_t cv_kartitembreaker = CVAR_INIT ("kartitembreaker", "No", CV_NETVAR|CV_CALL|CV_NOINIT, CV_YesNo, KartItemBreaker_OnChange); consvar_t cv_kartwalltransfer = CVAR_INIT ("BG_forcewalltransfer", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); @@ -490,7 +491,7 @@ consvar_t cv_kartbumpspark = CVAR_INIT ("kartbumpspark", "No", CV_NETVAR, CV_Yes consvar_t cv_kartbumpspring = CVAR_INIT ("kartbumpspring", "No", CV_NETVAR, CV_YesNo, NULL); -consvar_t cv_kartslipdash = CVAR_INIT ("kartslipdash", "No", CV_NETVAR, CV_YesNo, NULL); +consvar_t cv_kartslipdash = CVAR_INIT ("kartslipdash", "No", CV_NETVAR|CV_CALL|CV_NOINIT, CV_YesNo, KartSlipdash_OnChange); static CV_PossibleValue_t kartdebugitem_cons_t[] = { @@ -7115,6 +7116,39 @@ static void KartChaining_OnChange(void) } } +static void KartSlipdash_OnChange(void) +{ + if (K_CanChangeRules() == false) + { + return; + } + + if (!slipdashactive && cv_kartslipdash.value) + { + if (leveltime < starttime) + { + slipdashactive = true; + CONS_Printf(M_GetText("Slipdashing has been turned \"On\".\n")); + } + else + { + CONS_Printf(M_GetText("Slipdashing will be turned \"On\" Next Round.\n")); + } + } + else if (slipdashactive && !cv_kartslipdash.value) + { + if (leveltime < starttime) + { + slipdashactive = false; + CONS_Printf(M_GetText("Slipdashing has been turned \"Off\".\n")); + } + else + { + CONS_Printf(M_GetText("Slipdashing will be turned \"Off\" next round.\n")); + } + } +} + static void KartItemBreaker_OnChange(void) { if (K_CanChangeRules() == false) diff --git a/src/k_kart.c b/src/k_kart.c index 93cb1aa9e..6be744a88 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -10726,6 +10726,17 @@ boolean K_ChainingActive(void) return false; } +boolean K_SlipdashActive(void) +{ + if (slipdashactive) + { + // Slipdash is enabled! + return true; + } + + return false; +} + boolean K_UsingLegacyCheckpoints(void) { if (numbosswaypoints > 0) diff --git a/src/k_kart.h b/src/k_kart.h index 45a1e6d8a..913e11f9d 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -229,6 +229,7 @@ boolean K_SafeRespawnPosition(mobj_t * mo); boolean K_RingsActive(void); boolean K_StackingActive(void); boolean K_ChainingActive(void); +boolean K_SlipdashActive(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); diff --git a/src/lua_baselib.c b/src/lua_baselib.c index eb69ae4df..c620190b7 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -3999,6 +3999,13 @@ static int lib_kChainingActive(lua_State *L) return 1; } +// Checks if Chaining is active. +static int lib_kSlipdashActive(lua_State *L) +{ + lua_pushboolean(L, K_SlipdashActive()); + return 1; +} + // Checks if current map is using legacy boss3 bassed checkpoints. Useful for map compat. static int lib_kUsingLegacyCheckpoints(lua_State *L) { @@ -4360,6 +4367,7 @@ static luaL_Reg lib[] = { {"K_RingsActive",lib_kRingsActive}, {"K_StackingActive",lib_kStackingActive}, {"K_ChainingActive",lib_kChainingActive}, + {"K_SlipdashActive",lib_kSlipdashActive}, {"K_UsingLegacyCheckpoints",lib_kUsingLegacyCheckpoints}, {"K_DoBoost",lib_kDoBoost}, {"K_ClearBoost",lib_kClearBoost}, diff --git a/src/p_mobj.h b/src/p_mobj.h index dc7c1e75d..32edf7dde 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -580,6 +580,7 @@ extern INT32 numbosswaypoints; extern boolean ringsactive; extern boolean stackingactive; extern boolean chainingactive; +extern boolean slipdashactive; extern UINT16 bossdisabled; extern boolean stoppedclock; diff --git a/src/p_setup.c b/src/p_setup.c index e38bdef63..9f3c0d0ea 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -145,6 +145,7 @@ INT32 numbosswaypoints; boolean ringsactive = false; boolean stackingactive = false; boolean chainingactive = false; +boolean slipdashactive = false; UINT16 bossdisabled; boolean stoppedclock; boolean levelloading; @@ -7879,21 +7880,23 @@ static void P_InitLevelSettings(boolean reloadinggamestate) nummapboxes = numgotboxes = 0; numtargets = 0; itembreaker = false; + ringsactive = false; + stackingactive = false; + chainingactive = false; + slipdashactive = false; + if (cv_kartrings.value) ringsactive = true; - else - ringsactive = false; if (cv_kartstacking.value) stackingactive = true; - else - stackingactive = false; if (cv_kartchaining.value) chainingactive = true; - else - chainingactive = false; + + if (cv_kartslipdash.value) + slipdashactive = true; // emerald hunt hunt1 = hunt2 = hunt3 = NULL;