diff --git a/autogen/lua_definitions/structs.lua b/autogen/lua_definitions/structs.lua index 3fb2679c1..4666739a2 100644 --- a/autogen/lua_definitions/structs.lua +++ b/autogen/lua_definitions/structs.lua @@ -1714,6 +1714,8 @@ --- @class ServerSettings --- @field public bubbleDeath integer --- @field public enableCheats integer +--- @field public enablePlayerList integer +--- @field public enablePlayersInLevelDisplay integer --- @field public headlessServer integer --- @field public playerInteractions PlayerInteractions --- @field public playerKnockbackStrength integer diff --git a/docs/lua/structs.md b/docs/lua/structs.md index df0172c02..fa1637466 100644 --- a/docs/lua/structs.md +++ b/docs/lua/structs.md @@ -2174,6 +2174,8 @@ | ----- | ---- | ------ | | bubbleDeath | `integer` | | | enableCheats | `integer` | | +| enablePlayerList | `integer` | | +| enablePlayersInLevelDisplay | `integer` | | | headlessServer | `integer` | | | playerInteractions | [enum PlayerInteractions](constants.md#enum-PlayerInteractions) | | | playerKnockbackStrength | `integer` | | diff --git a/src/menu/star_select.c b/src/menu/star_select.c index 5ffa4359a..64aeb3bc5 100644 --- a/src/menu/star_select.c +++ b/src/menu/star_select.c @@ -376,15 +376,17 @@ void print_act_selector_strings(void) { print_menu_generic_string(x, 38, starNumbers); #endif // display player HUD head if they're in that act - for (int j = 0; j < MAX_PLAYERS; j++) { - struct NetworkPlayer* np = &gNetworkPlayers[j]; - if (np == NULL || !np->connected) { continue; } - if (np->currCourseNum != gCurrCourseNum) { continue; } - if (np->currActNum != i) { continue; } + if (gServerSettings.enablePlayersInLevelDisplay) { + for (int j = 0; j < MAX_PLAYERS; j++) { + struct NetworkPlayer* np = &gNetworkPlayers[j]; + if (np == NULL || !np->connected) { continue; } + if (np->currCourseNum != gCurrCourseNum) { continue; } + if (np->currActNum != i) { continue; } - char* displayHead = (gMarioStates[j].character) ? &gMarioStates[j].character->hudHead : ","; - print_text(x - 4, 207, displayHead); // 'Mario Head' glyph - break; + char* displayHead = (gMarioStates[j].character) ? &gMarioStates[j].character->hudHead : ","; + print_text(x - 4, 207, displayHead); // 'Mario Head' glyph + break; + } } } @@ -399,7 +401,7 @@ void print_act_selector_strings(void) { playersInAct++; } - if (playersInAct > 0) { + if (playersInAct > 0 && gServerSettings.enablePlayersInLevelDisplay) { char message[16] = { 0 }; if (playersInAct == 1) { if (snprintf(message, 16, " join ") < 0) { diff --git a/src/pc/djui/djui_interactable.c b/src/pc/djui/djui_interactable.c index 869ae28f5..ade992fac 100644 --- a/src/pc/djui/djui_interactable.c +++ b/src/pc/djui/djui_interactable.c @@ -222,7 +222,7 @@ bool djui_interactable_on_key_down(int scancode) { } } - if (gDjuiPlayerList != NULL || gDjuiModList != NULL) { + if ((gDjuiPlayerList != NULL || gDjuiModList != NULL) && gServerSettings.enablePlayerList) { for (int i = 0; i < MAX_BINDS; i++) { if (scancode == (int)configKeyPlayerList[i] && !gDjuiInMainMenu && gNetworkType != NT_NONE) { if (gDjuiPlayerList != NULL) { diff --git a/src/pc/lua/smlua_cobject_autogen.c b/src/pc/lua/smlua_cobject_autogen.c index e7234a571..b5beb77a6 100644 --- a/src/pc/lua/smlua_cobject_autogen.c +++ b/src/pc/lua/smlua_cobject_autogen.c @@ -1885,16 +1885,18 @@ static struct LuaObjectField sRayIntersectionInfoFields[LUA_RAY_INTERSECTION_INF { "surface", LVT_COBJECT_P, offsetof(struct RayIntersectionInfo, surface), false, LOT_SURFACE }, }; -#define LUA_SERVER_SETTINGS_FIELD_COUNT 8 +#define LUA_SERVER_SETTINGS_FIELD_COUNT 10 static struct LuaObjectField sServerSettingsFields[LUA_SERVER_SETTINGS_FIELD_COUNT] = { - { "bubbleDeath", LVT_U8, offsetof(struct ServerSettings, bubbleDeath), false, LOT_NONE }, - { "enableCheats", LVT_U8, offsetof(struct ServerSettings, enableCheats), false, LOT_NONE }, - { "headlessServer", LVT_U8, offsetof(struct ServerSettings, headlessServer), false, LOT_NONE }, - { "playerInteractions", LVT_S32, offsetof(struct ServerSettings, playerInteractions), false, LOT_NONE }, - { "playerKnockbackStrength", LVT_U8, offsetof(struct ServerSettings, playerKnockbackStrength), false, LOT_NONE }, - { "shareLives", LVT_U8, offsetof(struct ServerSettings, shareLives), false, LOT_NONE }, - { "skipIntro", LVT_U8, offsetof(struct ServerSettings, skipIntro), false, LOT_NONE }, - { "stayInLevelAfterStar", LVT_U8, offsetof(struct ServerSettings, stayInLevelAfterStar), false, LOT_NONE }, + { "bubbleDeath", LVT_U8, offsetof(struct ServerSettings, bubbleDeath), false, LOT_NONE }, + { "enableCheats", LVT_U8, offsetof(struct ServerSettings, enableCheats), false, LOT_NONE }, + { "enablePlayerList", LVT_U8, offsetof(struct ServerSettings, enablePlayerList), false, LOT_NONE }, + { "enablePlayersInLevelDisplay", LVT_U8, offsetof(struct ServerSettings, enablePlayersInLevelDisplay), false, LOT_NONE }, + { "headlessServer", LVT_U8, offsetof(struct ServerSettings, headlessServer), false, LOT_NONE }, + { "playerInteractions", LVT_S32, offsetof(struct ServerSettings, playerInteractions), false, LOT_NONE }, + { "playerKnockbackStrength", LVT_U8, offsetof(struct ServerSettings, playerKnockbackStrength), false, LOT_NONE }, + { "shareLives", LVT_U8, offsetof(struct ServerSettings, shareLives), false, LOT_NONE }, + { "skipIntro", LVT_U8, offsetof(struct ServerSettings, skipIntro), false, LOT_NONE }, + { "stayInLevelAfterStar", LVT_U8, offsetof(struct ServerSettings, stayInLevelAfterStar), false, LOT_NONE }, }; #define LUA_SOUND_STATE_FIELD_COUNT 4 diff --git a/src/pc/network/network.c b/src/pc/network/network.c index 32b16627f..e18b1decc 100644 --- a/src/pc/network/network.c +++ b/src/pc/network/network.c @@ -67,6 +67,8 @@ struct ServerSettings gServerSettings = { .shareLives = 0, .enableCheats = 0, .bubbleDeath = 1, + .enablePlayersInLevelDisplay = 1, + .enablePlayerList = 1, .headlessServer = 0, }; diff --git a/src/pc/network/network.h b/src/pc/network/network.h index 8bf1e69ea..40966af0a 100644 --- a/src/pc/network/network.h +++ b/src/pc/network/network.h @@ -68,6 +68,8 @@ struct ServerSettings { u8 shareLives; u8 enableCheats; u8 bubbleDeath; + u8 enablePlayersInLevelDisplay; + u8 enablePlayerList; u8 headlessServer; };