From 2fa849a1fcf98c7d77ec5f0bb28cc5d080952c30 Mon Sep 17 00:00:00 2001 From: Jonny McCullagh Date: Mon, 3 Aug 2026 13:37:14 +0100 Subject: [PATCH] add game name to the game setup screen --- .../gamesettings/attributes/GameName.js | 19 +++++++++++++++++++ .../mods/public/gui/common/gamedescription.js | 11 +++++++---- .../mods/public/gui/gamesetup/SetupWindow.js | 2 ++ .../public/gui/gamesetup_mp/gamesetup_mp.js | 4 +++- .../gui/lobby/LobbyPage/Buttons/JoinButton.js | 1 + 5 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 binaries/data/mods/public/gamesettings/attributes/GameName.js diff --git a/binaries/data/mods/public/gamesettings/attributes/GameName.js b/binaries/data/mods/public/gamesettings/attributes/GameName.js new file mode 100644 index 0000000000..61099f0d3e --- /dev/null +++ b/binaries/data/mods/public/gamesettings/attributes/GameName.js @@ -0,0 +1,19 @@ +GameSettings.prototype.Attributes.GameName = class GameName extends GameSetting +{ + init() + { + this.value = ""; + } + + toInitAttributes(attribs) + { + if (this.value) + attribs.gameName = this.value; + } + + fromInitAttributes(attribs) + { + if (attribs.gameName !== undefined) + this.value = attribs.gameName; + } +}; diff --git a/binaries/data/mods/public/gui/common/gamedescription.js b/binaries/data/mods/public/gui/common/gamedescription.js index 397982717c..3778a949bf 100644 --- a/binaries/data/mods/public/gui/common/gamedescription.js +++ b/binaries/data/mods/public/gui/common/gamedescription.js @@ -184,10 +184,12 @@ function formatPlayerInfo(playerDataArray, playerStates) function getGameDescription(initAttributes, mapCache) { const titles = []; + const gameDescription = initAttributes.gameName ? + coloredText(translate("Game:"), g_DescriptionHighlight) + " " + + escapeText(initAttributes.gameName) : ""; const hostDescription = initAttributes.hostName ? - sprintf(translate("Host: %(playername)s"), { - "playername": escapeText(initAttributes.hostName) - }) : ""; + coloredText(translate("Host:"), g_DescriptionHighlight) + " " + + escapeText(initAttributes.hostName) : ""; if (!initAttributes.settings.VictoryConditions.length) titles.push({ @@ -439,7 +441,8 @@ function getGameDescription(initAttributes, mapCache) title.value || translateWithContext("game setup option", "disabled") })).join("\n"); - return hostDescription + (hostDescription && settingsDescription ? "\n" : "") + settingsDescription; + const descriptions = [gameDescription, hostDescription, settingsDescription].filter(description => description); + return descriptions.join("\n"); } /** diff --git a/binaries/data/mods/public/gui/gamesetup/SetupWindow.js b/binaries/data/mods/public/gui/gamesetup/SetupWindow.js index 811a804669..48bde246e6 100644 --- a/binaries/data/mods/public/gui/gamesetup/SetupWindow.js +++ b/binaries/data/mods/public/gui/gamesetup/SetupWindow.js @@ -31,6 +31,8 @@ class SetupWindow const mapCache = new MapCache(); g_GameSettings = new GameSettings(); g_GameSettings.init(mapCache, g_IsController ? savedGame : undefined); + if (initData?.gameName) + g_GameSettings.gameName.value = initData.gameName; if (initData?.hostName) g_GameSettings.hostName.value = initData.hostName; diff --git a/binaries/data/mods/public/gui/gamesetup_mp/gamesetup_mp.js b/binaries/data/mods/public/gui/gamesetup_mp/gamesetup_mp.js index db37e197db..8a1424ab1a 100644 --- a/binaries/data/mods/public/gui/gamesetup_mp/gamesetup_mp.js +++ b/binaries/data/mods/public/gui/gamesetup_mp/gamesetup_mp.js @@ -100,7 +100,7 @@ async function init(attribs) } if (attribs.hasPassword) { - g_ServerName = attribs.name; + g_ServerName = attribs.gameName || ""; switchSetupPage("pagePassword"); const passwordResult = await cancelOr(new Promise(resolve => { @@ -111,6 +111,7 @@ async function init(attribs) } try { + g_ServerName = attribs.gameName || ""; startJoinFromLobby(attribs.name, attribs.hostJID, attribs.hasPassword ? Engine.GetGUIObjectByName("clientPassword").caption : ""); switchSetupPage("pageConnecting"); @@ -398,6 +399,7 @@ async function handleAuthenticated(message, loadSavedGame) "argument": { "savedGame": savegameID, // Undefined or the savegame ID "serverName": g_ServerName, + "gameName": g_ServerName, "hasPassword": g_ServerHasPassword, "hostName": message.hostName } diff --git a/binaries/data/mods/public/gui/lobby/LobbyPage/Buttons/JoinButton.js b/binaries/data/mods/public/gui/lobby/LobbyPage/Buttons/JoinButton.js index dcf0359246..368c58535b 100644 --- a/binaries/data/mods/public/gui/lobby/LobbyPage/Buttons/JoinButton.js +++ b/binaries/data/mods/public/gui/lobby/LobbyPage/Buttons/JoinButton.js @@ -78,6 +78,7 @@ class JoinButton Engine.OpenChildPage("page_gamesetup_mp.xml", { "multiplayerGameType": "join", "name": g_Nickname, + "gameName": stanza.name, "rating": this.getRejoinRating(stanza), "hasPassword": !!stanza.hasPassword, "hostJID": stanza.hostJID