From 1f392e1cee36e8f5b03948433a807a57a1794c80 Mon Sep 17 00:00:00 2001 From: Anonimus Date: Sun, 12 Oct 2025 00:57:33 -0400 Subject: [PATCH] Item littering toggle With item littering off, dropped items immediately despawn themselves --- src/d_netcmd.c | 46 ++++++++++++++++++++++++++++++++++++++++------ src/d_netcmd.h | 2 ++ src/k_hud.c | 6 ++++-- src/k_kart.c | 20 +++++++++++++++++++- src/k_kart.h | 1 + src/lua_baselib.c | 8 ++++++++ src/lua_script.c | 4 ++++ src/p_mobj.h | 1 + src/p_saveg.c | 1 + src/p_setup.c | 5 +++++ 10 files changed, 85 insertions(+), 9 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index c0736c7ab..b5c439966 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -161,6 +161,7 @@ static void KartSlipdash_OnChange(void); static void KartSlopeBoost_OnChange(void); static void KartDrafting_OnChange(void); static void KartAirDrop_OnChange(void); +static void KartItemLitter_OnChange(void); static void KartItemBreaker_OnChange(void); static void KartInvinType_OnChange(void); static void KartBumpSpark_OnChange(void); @@ -387,7 +388,7 @@ consvar_t cv_eggmanmonitor = CVAR_INIT ("eggmanmonitor", "On", CV_NETVAR|CV_C consvar_t cv_orbinaut = CVAR_INIT ("orbinaut", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); consvar_t cv_jawz = CVAR_INIT ("jawz", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); consvar_t cv_mine = CVAR_INIT ("mine", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); -consvar_t cv_ballhog = CVAR_INIT ("ballhog", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); +consvar_t cv_ballhog = CVAR_INIT ("ballhog", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); consvar_t cv_selfpropelledbomb = CVAR_INIT ("selfpropelledbomb", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); consvar_t cv_grow = CVAR_INIT ("grow", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); consvar_t cv_shrink = CVAR_INIT ("shrink", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); @@ -405,7 +406,7 @@ consvar_t cv_triplesneaker = CVAR_INIT ("triplesneaker", "On", CV_NETVAR|CV_C consvar_t cv_triplebanana = CVAR_INIT ("triplebanana", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); consvar_t cv_decabanana = CVAR_INIT ("decabanana", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); consvar_t cv_tripleorbinaut = CVAR_INIT ("tripleorbinaut", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); -consvar_t cv_quadorbinaut = CVAR_INIT ("quadorbinaut", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); +consvar_t cv_quadorbinaut = CVAR_INIT ("quadorbinaut", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); consvar_t cv_dualjawz = CVAR_INIT ("dualjawz", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL); static CV_PossibleValue_t kartminimap_cons_t[] = {{0, "MIN"}, {10, "MAX"}, {0, NULL}}; @@ -567,16 +568,17 @@ consvar_t cv_kartdrafting_closedeadzone = CVAR_INIT ("kartdrafting_closedeadzone consvar_t cv_kartdrafting_basedistance = CVAR_INIT ("kartdrafting_basedistance", "2560", CV_NETVAR|CV_CHEAT, CV_Unsigned, NULL); consvar_t cv_kartairdrop = CVAR_INIT ("kartairdrop", "No", CV_NETVAR|CV_CALL|CV_NOINIT, CV_YesNo, KartAirDrop_OnChange); +consvar_t cv_kartitemlitter = CVAR_INIT ("kartitemlitter", "On", CV_NETVAR|CV_CALL|CV_NOINIT, CV_OnOff, KartItemLitter_OnChange); // Odds distancing #define MAXODDSDIST ((INT32_MAX / FRACUNIT) / 2) static CV_PossibleValue_t distvar_cons_t[] = {{1, "MIN"}, {MAXODDSDIST, "MAX"}, {0, NULL}}; -consvar_t cv_kartoddsdist = CVAR_INIT ("kartoddsdist", "2048", CV_NETVAR|CV_CHEAT, distvar_cons_t, NULL); -consvar_t cv_kartlegacyoddsdist = CVAR_INIT ("kartlegacyoddsdist", "2048", CV_NETVAR|CV_CHEAT, distvar_cons_t, NULL); +consvar_t cv_kartoddsdist = CVAR_INIT ("kartoddsdist", "1640", CV_NETVAR|CV_CHEAT, distvar_cons_t, NULL); +consvar_t cv_kartlegacyoddsdist = CVAR_INIT ("kartlegacyoddsdist", "1640", CV_NETVAR|CV_CHEAT, distvar_cons_t, NULL); // SPB distance; no legacy modifiers currently (lazy) static CV_PossibleValue_t spbdist_cons_t[] = {{1, "MIN"}, {32000, "MAX"}, {0, NULL}}; -consvar_t cv_kartspbdist = CVAR_INIT ("kartspbdist", "8192", CV_NETVAR|CV_CHEAT, spbdist_cons_t, NULL); +consvar_t cv_kartspbdist = CVAR_INIT ("kartspbdist", "6144", CV_NETVAR|CV_CHEAT, spbdist_cons_t, NULL); #undef MAXODDSDIST // Invincibility modifiers @@ -7631,7 +7633,6 @@ static void KartDrafting_OnChange(void) } } - static void KartAirDrop_OnChange(void) { if (K_CanChangeRules() == false) @@ -7665,6 +7666,39 @@ static void KartAirDrop_OnChange(void) } } +static void KartItemLitter_OnChange(void) +{ + if (K_CanChangeRules() == false) + { + return; + } + + if (!K_ItemLitterActive() && cv_kartitemlitter.value) + { + if (leveltime < starttime) + { + itemlittering = true; + CONS_Printf(M_GetText("Item littering has been turned \"On\".\n")); + } + else + { + CONS_Printf(M_GetText("Item littering will be turned \"On\" Next Round.\n")); + } + } + else if (K_ItemLitterActive() && !cv_kartitemlitter.value) + { + if (leveltime < starttime) + { + itemlittering = false; + CONS_Printf(M_GetText("Item littering has been turned \"Off\".\n")); + } + else + { + CONS_Printf(M_GetText("Item littering will be turned \"Off\" next round.\n")); + } + } +} + static void KartItemBreaker_OnChange(void) { if (K_CanChangeRules() == false) diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 527838570..6022388a8 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -208,6 +208,8 @@ extern consvar_t cv_kartinvin_midtime; extern consvar_t cv_kartairdrop; +extern consvar_t cv_kartitemlitter; + extern consvar_t cv_kartoddsdist; extern consvar_t cv_kartlegacyoddsdist; extern consvar_t cv_kartspbdist; diff --git a/src/k_hud.c b/src/k_hud.c index e26e2cd66..b1c6056bb 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -2423,7 +2423,7 @@ void K_SetScoreboardModStatus(const char *name, SINT8 active) CONS_Alert(CONS_WARNING, "Server mod '%s' does not exist so status cannot be changed.\n", name); } -#define BASEMODS 14 +#define BASEMODS 15 static void K_DrawServerMods(INT32 x, INT32 y) { UINT8 i, j; @@ -2432,6 +2432,7 @@ static void K_DrawServerMods(INT32 x, INT32 y) servermods_t basemods[BASEMODS] = { + {"Item Littering", 0, NULL, K_ItemLitterActive() > 0, true}, {"Rings", 0, NULL, K_RingsActive() > 0, true}, {"4-Tier Drifts", 0, NULL, K_PurpleDriftActive() > 0, true}, {"Slipdash", 0, NULL, K_SlipdashActive() > 0, true}, @@ -5539,7 +5540,8 @@ static void K_drawDistributionDebugger(void) stplyr->distancetofinish, stplyr->distancefromcluster, 0, - spbrush, stplyr->bot, (stplyr->bot && stplyr->botvars.rival) + spbrush, stplyr->bot, (stplyr->bot && stplyr->botvars.rival), + K_IsPlayerLosing(stplyr) ); if (itemodds <= 0) diff --git a/src/k_kart.c b/src/k_kart.c index e9ce736d4..abed9414c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -375,6 +375,7 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_kartchainingsound); CV_RegisterVar(&cv_kartairdrop); + CV_RegisterVar(&cv_kartitemlitter); CV_RegisterVar(&cv_kartitembreaker); @@ -5233,6 +5234,12 @@ void K_DropHnextList(player_t *player) dropwork->flags &= ~MF_NOCLIPTHING; } + if (!itemlittering) + { + // Bring it to life... just to kill it. + P_KillMobj(dropwork, NULL, NULL, DMG_NORMAL); + } + P_RemoveMobj(work); } @@ -5414,7 +5421,7 @@ mobj_t *K_CreatePaperItem(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT8 UINT32_MAX, 0, 0, - false, false, false + false, false, false, false ) ); } @@ -11269,6 +11276,17 @@ boolean K_AirDropActive(void) return false; } +boolean K_ItemLitterActive(void) +{ + if (itemlittering) + { + // Item littering is enabled! + return true; + } + + return false; +} + boolean K_GetKartInvinType(void) { return invintype; diff --git a/src/k_kart.h b/src/k_kart.h index 3477720c4..bac23c596 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -331,6 +331,7 @@ boolean K_SlipdashActive(void); boolean K_SlopeBoostActive(void); boolean K_DraftingActive(void); boolean K_AirDropActive(void); +boolean K_ItemLitterActive(void); boolean K_GetKartInvinType(void); INT32 K_GetBumpSpark(void); boolean K_BoostChain(player_t *player, INT32 timer, boolean chainsound); diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 78a6ef8a3..5c52d1236 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -4181,6 +4181,13 @@ static int lib_kAirDropActive(lua_State *L) return 1; } +// Checks if item littering is active. +static int lib_kItemLitterActive(lua_State *L) +{ + lua_pushboolean(L, K_ItemLitterActive()); + return 1; +} + // Grabs the currently active invintype. static int lib_kGetKartInvinType(lua_State *L) { @@ -5285,6 +5292,7 @@ static luaL_Reg lib[] = { {"K_SlopeBoostActive",lib_kSlopeBoostActive}, {"K_DraftingActive",lib_kDraftingActive}, {"K_AirDropActive",lib_kAirDropActive}, + {"K_ItemLitterActive",lib_kItemLitterActive}, {"K_GetBumpSpark",lib_kGetBumpSpark}, {"K_GetKartInvinType",lib_kGetKartInvinType}, {"K_UsingLegacyCheckpoints",lib_kUsingLegacyCheckpoints}, diff --git a/src/lua_script.c b/src/lua_script.c index ed719bcbb..36b911f37 100644 --- a/src/lua_script.c +++ b/src/lua_script.c @@ -402,12 +402,16 @@ int LUA_PushGlobals(lua_State *L, const char *word) return 1; } else if (fastcmp(word,"airdropactive")) { lua_pushinteger(L, airdropactive); + return 1; } else if (fastcmp(word,"bumpsparkactive")) { lua_pushinteger(L, bumpsparkactive); return 1; } else if (fastcmp(word,"purpledriftactive")) { lua_pushinteger(L, purpledriftactive); return 1; + } else if (fastcmp(word,"itemlittering")) { + lua_pushinteger(L, itemlittering); + return 1; } else if (fastcmp(word,"invintype")) { lua_pushinteger(L, invintype); return 1; diff --git a/src/p_mobj.h b/src/p_mobj.h index cf2225a1e..5bc97f717 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -610,6 +610,7 @@ extern boolean purpledriftactive; extern boolean slopeboostactive; extern boolean draftingactive; extern boolean airdropactive; +extern boolean itemlittering; extern UINT8 bumpsparkactive; extern UINT16 bossdisabled; extern boolean stoppedclock; diff --git a/src/p_saveg.c b/src/p_saveg.c index c410c22ec..7635ad618 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -4176,6 +4176,7 @@ static boolean P_NetSyncMisc(savebuffer_t *save, boolean resending) SYNCBOOLEAN(slopeboostactive); SYNCBOOLEAN(draftingactive); SYNCBOOLEAN(airdropactive); + SYNCBOOLEAN(itemlittering); SYNC(bumpsparkactive); SYNC(invintype); diff --git a/src/p_setup.c b/src/p_setup.c index c40e7a823..cdf461ebc 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -155,6 +155,7 @@ boolean purpledriftactive; boolean slopeboostactive; boolean draftingactive; boolean airdropactive; +boolean itemlittering; UINT8 bumpsparkactive; UINT16 bossdisabled; boolean stoppedclock; @@ -8040,6 +8041,7 @@ static void P_InitLevelSettings(boolean reloadinggamestate) slopeboostactive = false; draftingactive = false; airdropactive = false; + itemlittering = false; bumpsparkactive = 0; if (cv_kartrings.value) @@ -8066,6 +8068,9 @@ static void P_InitLevelSettings(boolean reloadinggamestate) if (cv_kartairdrop.value) airdropactive = true; + if (cv_kartitemlitter.value) + itemlittering = true; + bumpsparkactive = (UINT8)cv_kartbumpspark.value; invintype = (UINT8)cv_kartinvintype.value;