Net-safe item toggle menu

Use cvar callbacks for items-thunderdome relationship & sounds
This commit is contained in:
toaster 2025-09-14 22:32:57 +01:00
parent 8fcf835330
commit 99d8e33cfd
3 changed files with 85 additions and 47 deletions

View file

@ -666,40 +666,42 @@ consvar_t cv_cheats = UnsavedNetVar(cvlist_command)("cheats",
consvar_t cv_countdowntime = UnsavedNetVar("countdowntime", "30").min_max(15, 9999); consvar_t cv_countdowntime = UnsavedNetVar("countdowntime", "30").min_max(15, 9999);
consvar_t cv_duelspectatorreentry = UnsavedNetVar("duelspectatorreentry", "180").min_max(0, 10*60); consvar_t cv_duelspectatorreentry = UnsavedNetVar("duelspectatorreentry", "180").min_max(0, 10*60);
void KartItem_OnChange(void);
// SRB2kart // SRB2kart
consvar_t cv_items[] = { consvar_t cv_items[] = {
UnsavedNetVar("sneaker", "On").on_off(), UnsavedNetVar("sneaker", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("rocketsneaker", "On").on_off(), UnsavedNetVar("rocketsneaker", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("invincibility", "On").on_off(), UnsavedNetVar("invincibility", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("banana", "On").on_off(), UnsavedNetVar("banana", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("eggmark", "On").on_off(), UnsavedNetVar("eggmark", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("orbinaut", "On").on_off(), UnsavedNetVar("orbinaut", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("jawz", "On").on_off(), UnsavedNetVar("jawz", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("mine", "On").on_off(), UnsavedNetVar("mine", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("landmine", "On").on_off(), UnsavedNetVar("landmine", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("ballhog", "On").on_off(), UnsavedNetVar("ballhog", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("selfpropelledbomb", "On").on_off(), UnsavedNetVar("selfpropelledbomb", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("grow", "On").on_off(), UnsavedNetVar("grow", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("shrink", "On").on_off(), UnsavedNetVar("shrink", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("lightningshield", "On").on_off(), UnsavedNetVar("lightningshield", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("bubbleshield", "On").on_off(), UnsavedNetVar("bubbleshield", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("flameshield", "On").on_off(), UnsavedNetVar("flameshield", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("hyudoro", "On").on_off(), UnsavedNetVar("hyudoro", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("pogospring", "On").on_off(), UnsavedNetVar("pogospring", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("superring", "On").on_off(), UnsavedNetVar("superring", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("kitchensink", "On").on_off(), UnsavedNetVar("kitchensink", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("droptarget", "On").on_off(), UnsavedNetVar("droptarget", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("gardentop", "On").on_off(), UnsavedNetVar("gardentop", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("gachabom", "On").on_off(), UnsavedNetVar("gachabom", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("stoneshoe", "On").on_off(), UnsavedNetVar("stoneshoe", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("toxomister", "On").on_off(), UnsavedNetVar("toxomister", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("dualsneaker", "On").on_off(), UnsavedNetVar("dualsneaker", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("triplesneaker", "On").on_off(), UnsavedNetVar("triplesneaker", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("triplebanana", "On").on_off(), UnsavedNetVar("triplebanana", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("tripleorbinaut", "On").on_off(), UnsavedNetVar("tripleorbinaut", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("quadorbinaut", "On").on_off(), UnsavedNetVar("quadorbinaut", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("dualjawz", "On").on_off(), UnsavedNetVar("dualjawz", "On").on_off().onchange_noinit(KartItem_OnChange),
UnsavedNetVar("triplegachabom", "On").on_off(), UnsavedNetVar("triplegachabom", "On").on_off().onchange_noinit(KartItem_OnChange),
}; };
consvar_t cv_kartbot = UnsavedNetVar("bots", "Off").values({ consvar_t cv_kartbot = UnsavedNetVar("bots", "Off").values({
@ -784,7 +786,9 @@ consvar_t cv_shoutcolor = UnsavedNetVar("shout_color", "Red").values({
consvar_t cv_shoutname = UnsavedNetVar("shout_name", "SERVER"); consvar_t cv_shoutname = UnsavedNetVar("shout_name", "SERVER");
consvar_t cv_spectatorreentry = UnsavedNetVar("spectatorreentry", "30").min_max(0, 10*60); consvar_t cv_spectatorreentry = UnsavedNetVar("spectatorreentry", "30").min_max(0, 10*60);
consvar_t cv_thunderdome = UnsavedNetVar("thunderdome", "Off").on_off();
void ThunderDome_OnChange(void);
consvar_t cv_thunderdome = UnsavedNetVar("thunderdome", "Off").on_off().onchange_noinit(ThunderDome_OnChange);
void TimeLimit_OnChange(void); void TimeLimit_OnChange(void);
consvar_t cv_timelimit = UnsavedNetVar("timelimit", "Default").min_max(1, 30*60, {{0, "None"}, {-1, "Default"}}).onchange_noinit(TimeLimit_OnChange); consvar_t cv_timelimit = UnsavedNetVar("timelimit", "Default").min_max(1, 30*60, {{0, "None"}, {-1, "Default"}}).onchange_noinit(TimeLimit_OnChange);

View file

@ -7434,6 +7434,26 @@ void NumLaps_OnChange(void)
} }
} }
boolean M_AnyItemsEnabled(void);
void KartItem_OnChange(void);
void KartItem_OnChange(void)
{
if (netgame && !server)
return;
const boolean check = !M_AnyItemsEnabled();
if (cv_thunderdome.value != check)
CV_SetValue(&cv_thunderdome, check);
}
void ThunderDome_MenuSound(void);
void ThunderDome_OnChange(void);
void ThunderDome_OnChange(void)
{
ThunderDome_MenuSound();
}
void KartFrantic_MenuSound(void);
void KartFrantic_OnChange(void); void KartFrantic_OnChange(void);
void KartFrantic_OnChange(void) void KartFrantic_OnChange(void)
{ {
@ -7451,6 +7471,8 @@ void KartFrantic_OnChange(void)
{ {
CONS_Printf(M_GetText("Frantic items will be turned %s next round.\n"), cv_kartfrantic.value ? M_GetText("on") : M_GetText("off")); CONS_Printf(M_GetText("Frantic items will be turned %s next round.\n"), cv_kartfrantic.value ? M_GetText("on") : M_GetText("off"));
} }
KartFrantic_MenuSound();
} }
void KartSpeed_OnChange(void); void KartSpeed_OnChange(void);

View file

@ -85,7 +85,8 @@ menu_t OPTIONS_GameplayItemsDef = {
NULL, NULL,
}; };
static boolean M_AnyItemsEnabled(void) boolean M_AnyItemsEnabled(void);
boolean M_AnyItemsEnabled(void)
{ {
INT32 i; INT32 i;
for (i = 0; i < NUMKARTRESULTS-1; i++) for (i = 0; i < NUMKARTRESULTS-1; i++)
@ -96,9 +97,29 @@ static boolean M_AnyItemsEnabled(void)
return false; return false;
} }
static void M_ToggleThunderdome(void) void ThunderDome_MenuSound(void);
void ThunderDome_MenuSound(void)
{ {
CV_SetValue(&cv_thunderdome, !M_AnyItemsEnabled()); if (!menuactive || currentMenu != &OPTIONS_GameplayItemsDef)
return;
if (cv_thunderdome.value)
{
S_StartSoundAtVolume(NULL, sfx_slot02, 80);
}
else
{
S_StartSound(NULL, sfx_itrolf);
}
}
void KartFrantic_MenuSound(void);
void KartFrantic_MenuSound(void)
{
if (!menuactive || currentMenu != &OPTIONS_GameplayItemsDef)
return;
S_StartSound(NULL, (cv_kartfrantic.value ? sfx_noooo2 : sfx_kc48));
} }
void M_HandleItemToggles(INT32 choice) void M_HandleItemToggles(INT32 choice)
@ -119,15 +140,7 @@ void M_HandleItemToggles(INT32 choice)
{ {
CV_SetValue(&cv_items[i], v); CV_SetValue(&cv_items[i], v);
} }
M_ToggleThunderdome(); // KartItem_OnChange will toggle thunderdome and play sound
if (cv_thunderdome.value)
{
S_StartSoundAtVolume(NULL, sfx_slot02, 80);
}
else
{
S_StartSound(NULL, sfx_itrolf);
}
M_SetMenuDelay(pid); M_SetMenuDelay(pid);
} }
@ -135,7 +148,6 @@ void M_HandleItemToggles(INT32 choice)
else if (M_MenuButtonPressed(pid, MBT_R)) else if (M_MenuButtonPressed(pid, MBT_R))
{ {
CV_AddValue(&cv_kartfrantic, 1); CV_AddValue(&cv_kartfrantic, 1);
S_StartSound(NULL, (cv_kartfrantic.value ? sfx_noooo2 : sfx_kc48));
M_SetMenuDelay(pid); M_SetMenuDelay(pid);
} }
@ -219,7 +231,7 @@ void M_HandleItemToggles(INT32 choice)
S_StartSound(NULL, sfx_s1ba); S_StartSound(NULL, sfx_s1ba);
} }
CV_AddValue(&cv_items[currentMenu->menuitems[itemOn].mvar1-1], 1); CV_AddValue(&cv_items[currentMenu->menuitems[itemOn].mvar1-1], 1);
M_ToggleThunderdome(); // KartItem_OnChange will toggle thunderdome and play sound
} }
} }