Ticket #3355: t3355_move_gametypes_v3.patch
File t3355_move_gametypes_v3.patch, 17.3 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() { … … 989 984 g_GameAttributes.settings[prop] = undefined; 990 985 991 986 var mapData = loadMapData(name); 992 987 var mapSettings = (mapData && mapData.settings ? deepcopy(mapData.settings) : {}); 993 988 989 // Reset victory conditions 990 if (g_GameAttributes.mapType != "random") 991 { 992 let victoryIdx = mapSettings.GameType !== undefined && g_VictoryConditions.Name.indexOf(mapSettings.GameType) != -1 ? g_VictoryConditions.Name.indexOf(mapSettings.GameType) : g_VictoryConditions.Default; 993 g_GameAttributes.settings.GameType = g_VictoryConditions.Name[victoryIdx]; 994 g_GameAttributes.settings.VictoryScripts = g_VictoryConditions.Scripts[victoryIdx]; 995 } 996 994 997 // Copy any new settings 995 998 g_GameAttributes.map = name; 996 999 g_GameAttributes.script = mapSettings.Script; 997 1000 if (g_GameAttributes.map !== "random") 998 1001 for (var prop in mapSettings) … … 1221 1224 var gameSpeedText = Engine.GetGUIObjectByName("gameSpeedText"); 1222 1225 var gameSpeedBox = Engine.GetGUIObjectByName("gameSpeed"); 1223 1226 1224 1227 // We have to check for undefined on these properties as not all maps define them. 1225 1228 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); 1229 var victoryIdx = mapSettings.GameType !== undefined && g_VictoryConditions.Name.indexOf(mapSettings.GameType) != -1 ? g_VictoryConditions.Name.indexOf(mapSettings.GameType) : g_VictoryConditions.Default; 1228 1230 enableCheats.checked = (mapSettings.CheatsEnabled === undefined || !mapSettings.CheatsEnabled ? false : true); 1229 1231 enableCheatsText.caption = (enableCheats.checked ? translate("Yes") : translate("No")); 1230 1232 if (mapSettings.RatingEnabled !== undefined) 1231 1233 { 1232 1234 enableRating.checked = mapSettings.RatingEnabled; … … 1295 1297 numPlayersText.caption = numPlayers; 1296 1298 mapSizeText.caption = g_MapSizes.names[sizeIdx]; 1297 1299 revealMapText.caption = (mapSettings.RevealMap ? translate("Yes") : translate("No")); 1298 1300 exploreMapText.caption = (mapSettings.ExporeMap ? translate("Yes") : translate("No")); 1299 1301 disableTreasuresText.caption = (mapSettings.DisableTreasures ? translate("Yes") : translate("No")); 1300 victoryConditionText.caption = victories.text[victoryIdx];1302 victoryConditionText.caption = g_VictoryConditions.Title[victoryIdx]; 1301 1303 lockTeamsText.caption = (mapSettings.LockTeams ? translate("Yes") : translate("No")); 1302 1304 } 1303 1305 1304 1306 break; 1305 1307 … … 1334 1336 { 1335 1337 // Client 1336 1338 revealMapText.caption = (mapSettings.RevealMap ? translate("Yes") : translate("No")); 1337 1339 exploreMapText.caption = (mapSettings.ExploreMap ? translate("Yes") : translate("No")); 1338 1340 disableTreasuresText.caption = (mapSettings.DisableTreasures ? translate("Yes") : translate("No")); 1339 victoryConditionText.caption = victories.text[victoryIdx];1341 victoryConditionText.caption = g_VictoryConditions.Title[victoryIdx]; 1340 1342 lockTeamsText.caption = (mapSettings.LockTeams ? translate("Yes") : translate("No")); 1341 1343 } 1342 1344 1343 1345 break; 1344 1346 … … 1370 1372 numPlayersText.caption = numPlayers; 1371 1373 mapSizeText.caption = translate("Default"); 1372 1374 revealMapText.caption = (mapSettings.RevealMap ? translate("Yes") : translate("No")); 1373 1375 exploreMapText.caption = (mapSettings.ExploreMap ? translate("Yes") : translate("No")); 1374 1376 disableTreasuresText.caption = translate("No"); 1375 victoryConditionText.caption = victories.text[victoryIdx];1377 victoryConditionText.caption = g_VictoryConditions.Title[victoryIdx]; 1376 1378 lockTeamsText.caption = (mapSettings.LockTeams ? translate("Yes") : translate("No")); 1377 1379 1378 1380 startingResourcesText.caption = translate("Determined by scenario"); 1379 1381 populationCapText.caption = translate("Determined by scenario"); 1380 1382 ceasefireText.caption = translate("Determined by scenario"); … … 1398 1400 // Load the description from the map file, if there is one 1399 1401 var description = mapSettings.Description ? translate(mapSettings.Description) : translate("Sorry, no description available."); 1400 1402 1401 1403 // Describe the number of players and the victory conditions 1402 1404 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)1405 let victory = g_VictoryConditions.Title[victoryIdx]; 1406 if (victoryIdx != g_VictoryConditions.Default) 1405 1407 victory = "[color=\"orange\"]" + victory + "[/color]"; 1406 1408 playerString += translate("Victory Condition:") + " " + victory + ".\n\n" + description; 1407 1409 1408 1410 for (let i = 0; i < g_MaxPlayers; ++i) 1409 1411 { … … 1989 1991 "tnbp": tnbp, 1990 1992 "players": players 1991 1993 }; 1992 1994 Engine.SendRegisterGame(gameData); 1993 1995 } 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: replace by filenames in binaries/data/mods/public/simulation/data/settings/victory_conditions/ 144 145 wxArrayString gameTypes; 145 146 gameTypes.Add(_T("conquest")); 147 gameTypes.Add(_T("conquest_structures")); 148 gameTypes.Add(_T("conquest_units")); 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);