Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/gui/gamesetup/gamesetup.js
Show First 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | |||||
*/ | */ | ||||
var g_SenderFontTag = { "font": "sans-bold-13" }; | var g_SenderFontTag = { "font": "sans-bold-13" }; | ||||
/** | /** | ||||
* This yields [1, 2, ..., MaxPlayers]. | * This yields [1, 2, ..., MaxPlayers]. | ||||
*/ | */ | ||||
var g_NumPlayersList = Array(g_MaxPlayers).fill(0).map((v, i) => i + 1); | var g_NumPlayersList = Array(g_MaxPlayers).fill(0).map((v, i) => i + 1); | ||||
/** | |||||
* Used for generating the botnames. | |||||
*/ | |||||
var g_RomanNumbers = [undefined, "I", "II", "III", "IV", "V", "VI", "VII", "VIII"]; | |||||
var g_PlayerTeamList = prepareForDropdown([{ | var g_PlayerTeamList = prepareForDropdown([{ | ||||
"label": translateWithContext("team", "None"), | "label": translateWithContext("team", "None"), | ||||
"id": -1 | "id": -1 | ||||
}].concat( | }].concat( | ||||
Array(g_MaxTeams).fill(0).map((v, i) => ({ | Array(g_MaxTeams).fill(0).map((v, i) => ({ | ||||
"label": i + 1, | "label": i + 1, | ||||
"id": i | "id": i | ||||
})) | })) | ||||
▲ Show 20 Lines • Show All 2,240 Lines • ▼ Show 20 Lines | for (let i in g_GameAttributes.settings.PlayerData) | ||||
let chosenCiv = g_GameAttributes.settings.PlayerData[i].Civ || "random"; | let chosenCiv = g_GameAttributes.settings.PlayerData[i].Civ || "random"; | ||||
if (chosenCiv == "random") | if (chosenCiv == "random") | ||||
{ | { | ||||
let culture = pickRandom(cultures); | let culture = pickRandom(cultures); | ||||
chosenCiv = pickRandom(Object.keys(g_CivData).filter(civ => | chosenCiv = pickRandom(Object.keys(g_CivData).filter(civ => | ||||
g_CivData[civ].Culture == culture && g_CivData[civ].SelectableInGameSetup)); | g_CivData[civ].Culture == culture && g_CivData[civ].SelectableInGameSetup)); | ||||
} | } | ||||
g_GameAttributes.settings.PlayerData[i].Civ = chosenCiv; | g_GameAttributes.settings.PlayerData[i].Civ = chosenCiv; | ||||
// Pick one of the available botnames for the chosen civ | |||||
if (g_GameAttributes.mapType === "scenario" || !g_GameAttributes.settings.PlayerData[i].AI) | |||||
continue; | |||||
let chosenName = pickRandom(g_CivData[chosenCiv].AINames); | |||||
if (!g_IsNetworked) | |||||
chosenName = translate(chosenName); | |||||
// Count how many players use the chosenName | |||||
let usedName = g_GameAttributes.settings.PlayerData.filter(pData => pData.Name && pData.Name.indexOf(chosenName) !== -1).length; | |||||
g_GameAttributes.settings.PlayerData[i].Name = !usedName ? chosenName : | |||||
sprintf(translate("%(playerName)s %(romanNumber)s"), { | |||||
"playerName": chosenName, | |||||
"romanNumber": g_RomanNumbers[usedName+1] | |||||
}); | |||||
} | } | ||||
chooseAINames(); | |||||
// Copy playernames for the purpose of replays | // Copy playernames for the purpose of replays | ||||
for (let guid in g_PlayerAssignments) | for (let guid in g_PlayerAssignments) | ||||
{ | { | ||||
let player = g_PlayerAssignments[guid]; | let player = g_PlayerAssignments[guid]; | ||||
if (player.player > 0) // not observer or GAIA | if (player.player > 0) // not observer or GAIA | ||||
g_GameAttributes.settings.PlayerData[player.player - 1].Name = player.name; | g_GameAttributes.settings.PlayerData[player.player - 1].Name = player.name; | ||||
} | } | ||||
Show All 23 Lines | else | ||||
Engine.StartGame(g_GameAttributes, playerID); | Engine.StartGame(g_GameAttributes, playerID); | ||||
Engine.SwitchGuiPage("page_loading.xml", { | Engine.SwitchGuiPage("page_loading.xml", { | ||||
"attribs": g_GameAttributes, | "attribs": g_GameAttributes, | ||||
"playerAssignments": g_PlayerAssignments | "playerAssignments": g_PlayerAssignments | ||||
}); | }); | ||||
} | } | ||||
} | } | ||||
/** | |||||
* Assigns names to the AI players depending on the chosen civ. | |||||
* Tries to pick unique names, otherwise deduplicates playernames by appending a number from the civ file. | |||||
*/ | |||||
function chooseAINames() | |||||
{ | |||||
if (g_GameAttributes.mapType === "scenario") | |||||
return; | |||||
let nameUsers = name => | |||||
g_GameAttributes.settings.PlayerData.filter( | |||||
pData => pData.Name && pData.Name.indexOf(name) !== -1).length; | |||||
g_GameAttributes.settings.PlayerData.forEach((pData, i) => { | |||||
if (!pData.AI) | |||||
return; | |||||
let civNames = g_CivData[pData.Civ].AINames; | |||||
let unusedCivNames = civNames.filter(name => !nameUsers(name)); | |||||
let chosenName = pickRandom(unusedCivNames.length ? unusedCivNames : civNames); | |||||
// Don't translate playernames visible to all players into the local language of the host | |||||
if (!g_IsNetworked) | |||||
chosenName = translate(chosenName); | |||||
if (!unusedCivNames.length) | |||||
{ | |||||
// Count how many players use the chosenName | |||||
let useCount = g_GameAttributes.settings.PlayerData.filter( | |||||
pData => pData.Name && pData.Name.indexOf(chosenName) != -1).length; | |||||
let chosenNumber = g_CivData[pData.Civ].AINameNumbers[useCount]; | |||||
if (!g_IsNetworked) | |||||
chosenNumber = translateWithContext("AI name number", chosenNumber); | |||||
chosenName = | |||||
sprintf(translate("%(playerName)s %(playerNumber)s"), { | |||||
"playerName": chosenName, | |||||
"playerNumber": chosenNumber | |||||
}); | |||||
} | |||||
pData.Name = chosenName; | |||||
}); | |||||
} | |||||
function launchTutorial() | function launchTutorial() | ||||
{ | { | ||||
g_GameAttributes.mapType = "scenario"; | g_GameAttributes.mapType = "scenario"; | ||||
selectMap("maps/tutorials/starting_economy_walkthrough"); | selectMap("maps/tutorials/starting_economy_walkthrough"); | ||||
launchGame(); | launchGame(); | ||||
} | } | ||||
/** | /** | ||||
▲ Show 20 Lines • Show All 381 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator