Item littering toggle

With item littering off, dropped items immediately despawn themselves
This commit is contained in:
Anonimus 2025-10-12 00:57:33 -04:00
parent 9449e5aa28
commit 1f392e1cee
10 changed files with 85 additions and 9 deletions

View file

@ -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)

View file

@ -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;

View file

@ -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)

View file

@ -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;

View file

@ -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);

View file

@ -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},

View file

@ -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;

View file

@ -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;

View file

@ -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);

View file

@ -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;