Ticket #3355: t3355_move_gametypes_v2.patch
File t3355_move_gametypes_v2.patch, 16.5 KB (added by , 9 years ago) |
---|
-
binaries/data/mods/public/gui/common/settings.js
31 31 { 32 32 var settings = { 33 33 "Ceasefire": loadCeasefire(), 34 34 "GameSpeeds": loadSettingValuesFile("game_speeds.json"), 35 35 "PopulationCapacities": loadPopulationCapacities(), 36 "StartingResources": loadSettingValuesFile("starting_resources.json") 36 "StartingResources": loadSettingValuesFile("starting_resources.json"), 37 "VictoryConditions": loadVictoryConditions() 37 38 }; 38 39 39 40 if (Object.keys(settings).some(key => settings[key] === undefined)) 40 41 return undefined; 41 42 … … 87 88 sprintf(translatePluralWithContext("ceasefire", "%(minutes)s minute", "%(minutes)s minutes", timeout), { "minutes": timeout }) 88 89 })); 89 90 } 90 91 91 92 /** 93 * Loads available gametypes. 94 * 95 * @returns {Array|undefined} 96 */ 97 function loadVictoryConditions() 98 { 99 const subdir = "victory_conditions/" 100 101 const files = Engine.BuildDirEntList(g_SettingsDirectory + subdir, "*.json", false).map( 102 file => file.substr(g_SettingsDirectory.length)); 103 104 var victoryConditions = files.map(file => { 105 let vc = loadSettingValuesFile(file); 106 if (vc) 107 vc.Name = file.substr(subdir.length, file.length - (subdir + ".json").length); 108 return vc; 109 }); 110 111 if (victoryConditions.some(vc => vc == undefined)) 112 return undefined; 113 114 // TODO: We might support enabling victory conditions separately sometime. 115 // Until then, we supplement the endless gametype here. 116 victoryConditions.push({ 117 "Name": "endless", 118 "Title": translate("None"), 119 "Description": translate("Endless Game"), 120 "Scripts": [] 121 }); 122 123 return victoryConditions; 124 } 125 126 /** 92 127 * Loads available population capacities. 93 128 * 94 129 * @returns {Array|undefined} 95 130 */ 96 131 function loadPopulationCapacities() -
binaries/data/mods/public/gui/gamesetup/gamesetup.js
1 1 //////////////////////////////////////////////////////////////////////////////////////////////// 2 2 // Constants 3 3 const DEFAULT_NETWORKED_MAP = "Acropolis 01"; 4 4 const DEFAULT_OFFLINE_MAP = "Acropolis 01"; 5 5 6 const VICTORY_DEFAULTIDX = 1;7 8 6 const g_Ceasefire = prepareForDropdown(g_Settings ? g_Settings.Ceasefire : undefined); 9 7 const g_GameSpeeds = prepareForDropdown(g_Settings ? g_Settings.GameSpeeds.filter(speed => !speed.ReplayOnly) : undefined); 8 const g_VictoryConditions = prepareForDropdown(g_Settings ? g_Settings.VictoryConditions : undefined); 10 9 const g_PopulationCapacities = prepareForDropdown(g_Settings ? g_Settings.PopulationCapacities : undefined); 11 10 const g_StartingResources = prepareForDropdown(g_Settings ? g_Settings.StartingResources : undefined); 12 11 13 12 //////////////////////////////////////////////////////////////////////////////////////////////// 14 13 … … 64 63 // To prevent the display locking up while we load the map metadata, 65 64 // we'll start with a 'loading' message and switch to the main screen in the 66 65 // tick handler 67 66 var g_LoadingState = 0; // 0 = not started, 1 = loading, 2 = loaded 68 67 69 // Filled by scripts in victory_conditions/70 var g_VictoryConditions = {};71 72 68 //////////////////////////////////////////////////////////////////////////////////////////////// 73 69 74 70 function init(attribs) 75 71 { 76 72 if (!g_Settings) … … 224 220 225 221 updateGameAttributes(); 226 222 } 227 223 228 224 var victoryConditions = Engine.GetGUIObjectByName("victoryCondition"); 229 var victories = getVictoryConditions(); 230 victoryConditions.list = victories.text; 231 victoryConditions.list_data = victories.data; 225 victoryConditions.list = g_VictoryConditions.Title; 226 victoryConditions.list_data = g_VictoryConditions.Name; 232 227 victoryConditions.onSelectionChange = function() { 233 228 if (this.selected != -1) 234 229 { 235 g_GameAttributes.settings.GameType = victories.data[this.selected];236 g_GameAttributes.settings.VictoryScripts = victories.scripts[this.selected];230 g_GameAttributes.settings.GameType = g_VictoryConditions.Name[this.selected]; 231 g_GameAttributes.settings.VictoryScripts = g_VictoryConditions.Scripts[this.selected]; 237 232 } 238 233 239 234 updateGameAttributes(); 240 235 }; 241 victoryConditions.selected = VICTORY_DEFAULTIDX;236 victoryConditions.selected = g_VictoryConditions.Default; 242 237 243 238 var mapSize = Engine.GetGUIObjectByName("mapSize"); 244 239 mapSize.list = g_MapSizes.names; 245 240 mapSize.list_data = g_MapSizes.tiles; 246 241 mapSize.onSelectionChange = function() { … … 1221 1216 var gameSpeedText = Engine.GetGUIObjectByName("gameSpeedText"); 1222 1217 var gameSpeedBox = Engine.GetGUIObjectByName("gameSpeed"); 1223 1218 1224 1219 // We have to check for undefined on these properties as not all maps define them. 1225 1220 var sizeIdx = (mapSettings.Size !== undefined && g_MapSizes.tiles.indexOf(mapSettings.Size) != -1 ? g_MapSizes.tiles.indexOf(mapSettings.Size) : g_MapSizes["default"]); 1226 var victories = getVictoryConditions(); 1227 var victoryIdx = (mapSettings.GameType !== undefined && victories.data.indexOf(mapSettings.GameType) != -1 ? victories.data.indexOf(mapSettings.GameType) : VICTORY_DEFAULTIDX); 1221 var victoryIdx = mapSettings.GameType !== undefined && g_VictoryConditions.Name.indexOf(mapSettings.GameType) != -1 ? g_VictoryConditions.Name.indexOf(mapSettings.GameType) : g_VictoryConditions.Default; 1228 1222 enableCheats.checked = (mapSettings.CheatsEnabled === undefined || !mapSettings.CheatsEnabled ? false : true); 1229 1223 enableCheatsText.caption = (enableCheats.checked ? translate("Yes") : translate("No")); 1230 1224 if (mapSettings.RatingEnabled !== undefined) 1231 1225 { 1232 1226 enableRating.checked = mapSettings.RatingEnabled; … … 1295 1289 numPlayersText.caption = numPlayers; 1296 1290 mapSizeText.caption = g_MapSizes.names[sizeIdx]; 1297 1291 revealMapText.caption = (mapSettings.RevealMap ? translate("Yes") : translate("No")); 1298 1292 exploreMapText.caption = (mapSettings.ExporeMap ? translate("Yes") : translate("No")); 1299 1293 disableTreasuresText.caption = (mapSettings.DisableTreasures ? translate("Yes") : translate("No")); 1300 victoryConditionText.caption = victories.text[victoryIdx];1294 victoryConditionText.caption = g_VictoryConditions.Title[victoryIdx]; 1301 1295 lockTeamsText.caption = (mapSettings.LockTeams ? translate("Yes") : translate("No")); 1302 1296 } 1303 1297 1304 1298 break; 1305 1299 … … 1334 1328 { 1335 1329 // Client 1336 1330 revealMapText.caption = (mapSettings.RevealMap ? translate("Yes") : translate("No")); 1337 1331 exploreMapText.caption = (mapSettings.ExploreMap ? translate("Yes") : translate("No")); 1338 1332 disableTreasuresText.caption = (mapSettings.DisableTreasures ? translate("Yes") : translate("No")); 1339 victoryConditionText.caption = victories.text[victoryIdx];1333 victoryConditionText.caption = g_VictoryConditions.Title[victoryIdx]; 1340 1334 lockTeamsText.caption = (mapSettings.LockTeams ? translate("Yes") : translate("No")); 1341 1335 } 1342 1336 1343 1337 break; 1344 1338 … … 1370 1364 numPlayersText.caption = numPlayers; 1371 1365 mapSizeText.caption = translate("Default"); 1372 1366 revealMapText.caption = (mapSettings.RevealMap ? translate("Yes") : translate("No")); 1373 1367 exploreMapText.caption = (mapSettings.ExploreMap ? translate("Yes") : translate("No")); 1374 1368 disableTreasuresText.caption = translate("No"); 1375 victoryConditionText.caption = victories.text[victoryIdx];1369 victoryConditionText.caption = g_VictoryConditions.Title[victoryIdx]; 1376 1370 lockTeamsText.caption = (mapSettings.LockTeams ? translate("Yes") : translate("No")); 1377 1371 1378 1372 startingResourcesText.caption = translate("Determined by scenario"); 1379 1373 populationCapText.caption = translate("Determined by scenario"); 1380 1374 ceasefireText.caption = translate("Determined by scenario"); … … 1398 1392 // Load the description from the map file, if there is one 1399 1393 var description = mapSettings.Description ? translate(mapSettings.Description) : translate("Sorry, no description available."); 1400 1394 1401 1395 // Describe the number of players and the victory conditions 1402 1396 var playerString = sprintf(translatePlural("%(number)s player. ", "%(number)s players. ", numPlayers), { "number": numPlayers }); 1403 let victory = translate(victories.text[victoryIdx]);1404 if (victoryIdx != VICTORY_DEFAULTIDX)1397 let victory = g_VictoryConditions.Title[victoryIdx]; 1398 if (victoryIdx != g_VictoryConditions.Default) 1405 1399 victory = "[color=\"orange\"]" + victory + "[/color]"; 1406 1400 playerString += translate("Victory Condition:") + " " + victory + ".\n\n" + description; 1407 1401 1408 1402 for (let i = 0; i < g_MaxPlayers; ++i) 1409 1403 { … … 1989 1983 "tnbp": tnbp, 1990 1984 "players": players 1991 1985 }; 1992 1986 Engine.SendRegisterGame(gameData); 1993 1987 } 1994 1995 function getVictoryConditions()1996 {1997 var r = {};1998 r.text = [translate("None")];1999 r.data = ["endless"];2000 r.scripts = [[]];2001 for (var vc in g_VictoryConditions)2002 {2003 r.data.push(vc);2004 r.text.push(g_VictoryConditions[vc].name);2005 r.scripts.push(g_VictoryConditions[vc].scripts);2006 }2007 return r;2008 } -
binaries/data/mods/public/gui/gamesetup/gamesetup.xml
9 9 <script file="gui/common/settings.js"/> 10 10 11 11 <!-- After settings.js, which defines g_Settings --> 12 12 <script file="gui/gamesetup/gamesetup.js"/> 13 13 14 <!-- After gamesetup.js which defines g_VictoryConditions -->15 <script directory="gui/gamesetup/victory_conditions/"/>16 17 14 <!-- Add a translucent black background to fade out the menu page --> 18 15 <object type="image" style="ModernWindow" size="0 0 100% 100%"> 19 16 20 17 <object style="TitleText" type="text" size="50%-128 4 50%+128 36"> 21 18 <translatableAttribute id="caption">Match Setup</translatableAttribute> -
binaries/data/mods/public/gui/gamesetup/victory_conditions/conquest.js
1 g_VictoryConditions.conquest = {2 "name" : translate("Conquest"),3 "description" : translate("Defeat all opponents"),4 "scripts" : ["scripts/ConquestCommon.js", "scripts/TriggerHelper.js", "scripts/Conquest.js"]5 }; -
binaries/data/mods/public/gui/gamesetup/victory_conditions/conquestStructures.js
1 g_VictoryConditions.conquestStructure = {2 "name" : translate("Conquest Structures"),3 "description" : translate("Destroy all structures of enemies"),4 "scripts" : ["scripts/ConquestCommon.js", "scripts/TriggerHelper.js", "scripts/ConquestStructures.js"]5 }; -
binaries/data/mods/public/gui/gamesetup/victory_conditions/conquestUnits.js
1 g_VictoryConditions.conquestUnits = {2 "name" : translate("Conquest Units"),3 "description" : translate("Destroy all units of enemies"),4 "scripts" : ["scripts/ConquestCommon.js", "scripts/TriggerHelper.js", "scripts/ConquestUnits.js"]5 }; -
binaries/data/mods/public/gui/gamesetup/victory_conditions/wonder.js
1 g_VictoryConditions.wonder = {2 "name" : translate("Wonder"),3 "description" : translate("Build a wonder to win"),4 "scripts" : ["scripts/ConquestCommon.js", "scripts/TriggerHelper.js", "scripts/Conquest.js", "scripts/WonderVictory.js"]5 }; -
binaries/data/mods/public/l10n/messages.json
471 471 } 472 472 }, 473 473 { 474 474 "extractor": "json", 475 475 "filemasks": [ 476 "simulation/data/settings/victory_conditions/*.json" 477 ], 478 "options": { 479 "keywords": ["Title", "Description"] 480 } 481 }, 482 { 483 "extractor": "json", 484 "filemasks": [ 476 485 "simulation/data/settings/starting_resources.json" 477 486 ], 478 487 "options": { 479 488 "keywords": ["Title"], 480 489 "context": "startingResources" -
binaries/data/mods/public/simulation/data/settings/victory_conditions/conquest.json
1 { 2 "TranslatedKeys": ["Title", "Description"], 3 "Data": 4 { 5 "Title": "Conquest", 6 "Description": "Defeat all opponents", 7 "Scripts": 8 [ 9 "scripts/TriggerHelper.js", 10 "scripts/ConquestCommon.js", 11 "scripts/Conquest.js" 12 ], 13 "Default": true 14 } 15 } -
binaries/data/mods/public/simulation/data/settings/victory_conditions/conquest_structures.json
1 { 2 "TranslatedKeys": ["Title", "Description"], 3 "Data": 4 { 5 "Title": "Conquest Structures", 6 "Description": "Destroy all structures of enemies", 7 "Scripts": 8 [ 9 "scripts/TriggerHelper.js", 10 "scripts/ConquestCommon.js", 11 "scripts/ConquestStructures.js" 12 ] 13 } 14 } -
binaries/data/mods/public/simulation/data/settings/victory_conditions/conquest_units.json
1 { 2 "TranslatedKeys": ["Title", "Description"], 3 "Data": 4 { 5 "Title": "Conquest Units", 6 "Description": "Kill all enemy units", 7 "Scripts": 8 [ 9 "scripts/TriggerHelper.js", 10 "scripts/ConquestCommon.js", 11 "scripts/ConquestUnits.js" 12 ] 13 } 14 } -
binaries/data/mods/public/simulation/data/settings/victory_conditions/wonder.json
1 { 2 "TranslatedKeys": ["Title", "Description"], 3 "Data": 4 { 5 "Title": "Wonder", 6 "Description": "Build and protect a wonder to win", 7 "Scripts": 8 [ 9 "scripts/TriggerHelper.js", 10 "scripts/ConquestCommon.js", 11 "scripts/Conquest.js", 12 "scripts/WonderVictory.js" 13 ] 14 } 15 } -
source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Map/Map.cpp
139 139 sizer->Add(Tooltipped(new wxTextCtrl(this, ID_MapDescription, wxEmptyString, wxDefaultPosition, wxSize(-1, 100), wxTE_MULTILINE), 140 140 _("Short description used on the map selection screen")), wxSizerFlags().Expand()); 141 141 142 142 sizer->AddSpacer(5); 143 143 144 // TODO: load from binaries/data/mods/public/simulation/data/settings/victory_conditions/ 144 145 wxArrayString gameTypes; 145 146 gameTypes.Add(_T("conquest")); 147 gameTypes.Add(_T("conquestStructures")); 148 gameTypes.Add(_T("conquestUnits")); 146 149 gameTypes.Add(_T("wonder")); 147 150 gameTypes.Add(_T("endless")); 148 151 149 152 wxFlexGridSizer* gridSizer = new wxFlexGridSizer(2, 5, 5); 150 153 gridSizer->AddGrowableCol(1);