Ticket #3355: t3355_move_gametypes_v1.patch

File t3355_move_gametypes_v1.patch, 18.1 KB (added by elexis, 9 years ago)

Don't forget to delete gui/gamesetup/victory_conditions/

  • binaries/data/mods/public/gui/common/settings.js

     
    3030function loadSettingsValues()
    3131{
    3232    var settings = {
    3333        "Ceasefire": loadCeasefire(),
    3434        "GameSpeeds": loadSettingValuesFile("game_speeds.json"),
     35        "GameTypes": loadGameTypes(),
    3536        "PopulationCapacities": loadPopulationCapacities(),
    3637        "StartingResources": loadSettingValuesFile("starting_resources.json")
    3738    };
    3839
    3940    if (Object.keys(settings).some(key => settings[key] === undefined))
     
    8788            sprintf(translatePluralWithContext("ceasefire", "%(minutes)s minute", "%(minutes)s minutes", timeout), { "minutes": timeout })
    8889    }));
    8990}
    9091
    9192/**
     93 * Loads available victory conditions.
     94 *
     95 * @returns {Array|undefined}
     96 */
     97function loadGameTypes()
     98{
     99    var gameTypes = Engine.BuildDirEntList(g_SettingsDirectory + "game_types/", "*.json", false).map(
     100        file => loadSettingValuesFile(file.substr(g_SettingsDirectory.length)));
     101
     102    if (gameTypes.some(gameType => gameType === undefined))
     103        return undefined;
     104
     105    return gameTypes;
     106}
     107
     108/**
    92109 * Loads available population capacities.
    93110 *
    94111 * @returns {Array|undefined}
    95112 */
    96113function loadPopulationCapacities()
  • binaries/data/mods/public/gui/gamesetup/gamesetup.js

     
    11////////////////////////////////////////////////////////////////////////////////////////////////
    22// Constants
    33const DEFAULT_NETWORKED_MAP = "Acropolis 01";
    44const DEFAULT_OFFLINE_MAP = "Acropolis 01";
    55
    6 const VICTORY_DEFAULTIDX = 1;
    7 
    86const g_Ceasefire = prepareForDropdown(g_Settings ? g_Settings.Ceasefire : undefined);
    97const g_GameSpeeds = prepareForDropdown(g_Settings ? g_Settings.GameSpeeds.filter(speed => !speed.ReplayOnly) : undefined);
     8const g_GameTypes = prepareForDropdown(g_Settings ? g_Settings.GameTypes : undefined);
    109const g_PopulationCapacities = prepareForDropdown(g_Settings ? g_Settings.PopulationCapacities : undefined);
    1110const g_StartingResources = prepareForDropdown(g_Settings ? g_Settings.StartingResources : undefined);
    1211
    1312////////////////////////////////////////////////////////////////////////////////////////////////
    1413
     
    6463// To prevent the display locking up while we load the map metadata,
    6564// we'll start with a 'loading' message and switch to the main screen in the
    6665// tick handler
    6766var g_LoadingState = 0; // 0 = not started, 1 = loading, 2 = loaded
    6867
    69 // Filled by scripts in victory_conditions/
    70 var g_VictoryConditions = {};
    71 
    7268////////////////////////////////////////////////////////////////////////////////////////////////
    7369
    7470function init(attribs)
    7571{
    7672    if (!g_Settings)
     
    224220
    225221            updateGameAttributes();
    226222        }
    227223
    228224        var victoryConditions = Engine.GetGUIObjectByName("victoryCondition");
    229         var victories = getVictoryConditions();
    230         victoryConditions.list = victories.text;
    231         victoryConditions.list_data = victories.data;
     225        victoryConditions.list = g_GameTypes.Title;
     226        victoryConditions.list_data = g_GameTypes.Name;
    232227        victoryConditions.onSelectionChange = function() {
    233228            if (this.selected != -1)
    234229            {
    235                 g_GameAttributes.settings.GameType = victories.data[this.selected];
    236                 g_GameAttributes.settings.VictoryScripts = victories.scripts[this.selected];
     230                g_GameAttributes.settings.GameType = g_GameTypes.Name[this.selected];
     231                g_GameAttributes.settings.VictoryScripts = g_GameTypes.Scripts[this.selected];
    237232            }
    238233
    239234            updateGameAttributes();
    240235        };
    241         victoryConditions.selected = VICTORY_DEFAULTIDX;
     236        victoryConditions.selected = g_GameTypes.Default;
    242237
    243238        var mapSize = Engine.GetGUIObjectByName("mapSize");
    244239        mapSize.list = g_MapSizes.names;
    245240        mapSize.list_data = g_MapSizes.tiles;
    246241        mapSize.onSelectionChange = function() {
     
    12211216    var gameSpeedText = Engine.GetGUIObjectByName("gameSpeedText");
    12221217    var gameSpeedBox = Engine.GetGUIObjectByName("gameSpeed");
    12231218
    12241219    // We have to check for undefined on these properties as not all maps define them.
    12251220    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 gameTypeIdx = mapSettings.GameType !== undefined && g_GameTypes.Name.indexOf(mapSettings.GameType) != -1 ? g_GameTypes.Name.indexOf(mapSettings.GameType) : g_GameTypes.Default;
    12281222    enableCheats.checked = (mapSettings.CheatsEnabled === undefined || !mapSettings.CheatsEnabled ? false : true);
    12291223    enableCheatsText.caption = (enableCheats.checked ? translate("Yes") : translate("No"));
    12301224    if (mapSettings.RatingEnabled !== undefined)
    12311225    {
    12321226        enableRating.checked = mapSettings.RatingEnabled;
     
    12841278            numPlayersSelection.selected = numPlayers - 1;
    12851279            mapSize.selected = sizeIdx;
    12861280            revealMap.checked = (mapSettings.RevealMap ? true : false);
    12871281            exploreMap.checked = (mapSettings.ExploreMap ? true : false);
    12881282            disableTreasures.checked = (mapSettings.DisableTreasures ? true : false);
    1289             victoryCondition.selected = victoryIdx;
     1283            victoryCondition.selected = gameTypeIdx;
    12901284            lockTeams.checked = (mapSettings.LockTeams ? true : false);
    12911285        }
    12921286        else
    12931287        {
    12941288            // Client
    12951289            numPlayersText.caption = numPlayers;
    12961290            mapSizeText.caption = g_MapSizes.names[sizeIdx];
    12971291            revealMapText.caption = (mapSettings.RevealMap ? translate("Yes") : translate("No"));
    12981292            exploreMapText.caption = (mapSettings.ExporeMap ? translate("Yes") : translate("No"));
    12991293            disableTreasuresText.caption = (mapSettings.DisableTreasures ? translate("Yes") : translate("No"));
    1300             victoryConditionText.caption = victories.text[victoryIdx];
     1294            victoryConditionText.caption = g_GameTypes.Title[gameTypeIdx];
    13011295            lockTeamsText.caption = (mapSettings.LockTeams ? translate("Yes") : translate("No"));
    13021296        }
    13031297
    13041298        break;
    13051299
     
    13251319        {
    13261320            //Host
    13271321            revealMap.checked = (mapSettings.RevealMap ? true : false);
    13281322            exploreMap.checked = (mapSettings.ExploreMap ? true : false);
    13291323            disableTreasures.checked = (mapSettings.DisableTreasures ? true : false);
    1330             victoryCondition.selected = victoryIdx;
     1324            victoryCondition.selected = gameTypeIdx;
    13311325            lockTeams.checked = (mapSettings.LockTeams ? true : false);
    13321326        }
    13331327        else
    13341328        {
    13351329            // Client
    13361330            revealMapText.caption = (mapSettings.RevealMap ? translate("Yes") : translate("No"));
    13371331            exploreMapText.caption = (mapSettings.ExploreMap ? translate("Yes") : translate("No"));
    13381332            disableTreasuresText.caption = (mapSettings.DisableTreasures ? translate("Yes") : translate("No"));
    1339             victoryConditionText.caption = victories.text[victoryIdx];
     1333            victoryConditionText.caption = g_GameTypes.Title[gameTypeIdx];
    13401334            lockTeamsText.caption = (mapSettings.LockTeams ? translate("Yes") : translate("No"));
    13411335        }
    13421336
    13431337        break;
    13441338
     
    13701364        numPlayersText.caption = numPlayers;
    13711365        mapSizeText.caption = translate("Default");
    13721366        revealMapText.caption = (mapSettings.RevealMap ? translate("Yes") : translate("No"));
    13731367        exploreMapText.caption = (mapSettings.ExploreMap ? translate("Yes") : translate("No"));
    13741368        disableTreasuresText.caption = translate("No");
    1375         victoryConditionText.caption = victories.text[victoryIdx];
     1369        victoryConditionText.caption = g_GameTypes.Title[gameTypeIdx];
    13761370        lockTeamsText.caption = (mapSettings.LockTeams ? translate("Yes") : translate("No"));
    13771371
    13781372        startingResourcesText.caption = translate("Determined by scenario");
    13791373        populationCapText.caption = translate("Determined by scenario");
    13801374        ceasefireText.caption = translate("Determined by scenario");
     
    13981392    // Load the description from the map file, if there is one
    13991393    var description = mapSettings.Description ? translate(mapSettings.Description) : translate("Sorry, no description available.");
    14001394
    14011395    // Describe the number of players and the victory conditions
    14021396    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         victory = "[color=\"orange\"]" + victory + "[/color]";
    1406     playerString += translate("Victory Condition:") + " " + victory + ".\n\n" + description;
     1397    let gameType = translate(g_GameTypes.Title[gameTypeIdx]);
     1398    if (gameTypeIdx != g_GameTypes.Default)
     1399        gameType = "[color=\"orange\"]" + gameType + "[/color]";
     1400    playerString += translate("Game Type:") + " " + gameType + ".\n\n" + description;
    14071401
    14081402    for (let i = 0; i < g_MaxPlayers; ++i)
    14091403    {
    14101404        // Show only needed player slots
    14111405        Engine.GetGUIObjectByName("playerBox["+i+"]").hidden = (i >= numPlayers);
     
    19891983        "tnbp": tnbp,
    19901984        "players": players
    19911985    };
    19921986    Engine.SendRegisterGame(gameData);
    19931987}
    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

     
    99    <script file="gui/common/settings.js"/>
    1010
    1111    <!-- After settings.js, which defines g_Settings -->
    1212    <script file="gui/gamesetup/gamesetup.js"/>
    1313
    14     <!-- After gamesetup.js which defines g_VictoryConditions -->
    15     <script directory="gui/gamesetup/victory_conditions/"/>
    16 
    1714    <!-- Add a translucent black background to fade out the menu page -->
    1815    <object type="image" style="ModernWindow" size="0 0 100% 100%">
    1916
    2017        <object style="TitleText" type="text" size="50%-128 4 50%+128 36">
    2118            <translatableAttribute id="caption">Match Setup</translatableAttribute>
     
    281278                    </object>
    282279                </object>
    283280
    284281                <object size="14 68 94% 96">
    285282                    <object size="0 0 40% 28" type="text" style="ModernRightLabelText">
    286                         <translatableAttribute id="caption">Victory Condition:</translatableAttribute>
     283                        <translatableAttribute id="caption">Game Type:</translatableAttribute>
    287284                    </object>
    288285                    <object name="victoryConditionText" size="40% 0 100% 100%" type="text" style="ModernLeftLabelText"/>
    289286                    <object name="victoryCondition" size="40%+10 0 100% 28" type="dropdown" style="ModernDropDown" hidden="true" tooltip_style="onscreenToolTip">
    290287                        <translatableAttribute id="tooltip">Select victory condition.</translatableAttribute>
    291288                    </object>
  • 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

     
    471471                }
    472472            },
    473473            {
    474474                "extractor": "json",
    475475                "filemasks": [
     476                    "simulation/data/settings/game_types/*.json"
     477                ],
     478                "options": {
     479                    "keywords": ["Title", "Description"]
     480                }
     481            },
     482            {
     483                "extractor": "json",
     484                "filemasks": [
    476485                    "simulation/data/settings/starting_resources.json"
    477486                ],
    478487                "options": {
    479488                    "keywords": ["Title"],
    480489                    "context": "startingResources"
  • binaries/data/mods/public/simulation/data/settings/game_types/conquest.json

     
     1{
     2    "TranslatedKeys": ["Title", "Description"],
     3    "Data":
     4    {
     5        "Name": "conquest",
     6        "Title": "Conquest",
     7        "Description": "Defeat all opponents",
     8        "Scripts":
     9        [
     10            "scripts/TriggerHelper.js",
     11            "scripts/ConquestCommon.js",
     12            "scripts/Conquest.js"
     13        ],
     14        "Default": true
     15    }
     16}
  • binaries/data/mods/public/simulation/data/settings/game_types/conquest_structures.json

     
     1{
     2    "TranslatedKeys": ["Title", "Description"],
     3    "Data":
     4    {
     5        "Name": "conquestStructures",
     6        "Title": "Conquest Structures",
     7        "Description": "Destroy all structures of enemies",
     8        "Scripts":
     9        [
     10            "scripts/TriggerHelper.js",
     11            "scripts/ConquestCommon.js",
     12            "scripts/ConquestStructures.js"
     13        ]
     14    }
     15}
  • binaries/data/mods/public/simulation/data/settings/game_types/conquest_units.json

     
     1{
     2    "TranslatedKeys": ["Title", "Description"],
     3    "Data":
     4    {
     5        "Name": "conquestUnits",
     6        "Title": "Conquest Units",
     7        "Description": "Kill all enemy units",
     8        "Scripts":
     9        [
     10            "scripts/TriggerHelper.js",
     11            "scripts/ConquestCommon.js",
     12            "scripts/ConquestUnits.js"
     13        ]
     14    }
     15}
  • binaries/data/mods/public/simulation/data/settings/game_types/endless.json

     
     1{
     2    "TranslatedKeys": ["Title", "Description"],
     3    "Data":
     4    {
     5        "Name": "endless",
     6        "Title": "Endless",
     7        "Description": "Endless Game",
     8        "Scripts": []
     9    }
     10}
  • binaries/data/mods/public/simulation/data/settings/game_types/wonder.json

     
     1{
     2    "TranslatedKeys": ["Title", "Description"],
     3    "Data":
     4    {
     5        "Name": "wonder",
     6        "Title": "Wonder",
     7        "Description": "Build and protect a wonder to win",
     8        "Scripts":
     9        [
     10            "scripts/TriggerHelper.js",
     11            "scripts/ConquestCommon.js",
     12            "scripts/Conquest.js",
     13            "scripts/WonderVictory.js"
     14        ]
     15    }
     16}
  • source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Map/Map.cpp

     
    139139    sizer->Add(Tooltipped(new wxTextCtrl(this, ID_MapDescription, wxEmptyString, wxDefaultPosition, wxSize(-1, 100), wxTE_MULTILINE),
    140140            _("Short description used on the map selection screen")), wxSizerFlags().Expand());
    141141
    142142    sizer->AddSpacer(5);
    143143
     144    // TODO: load from binaries/data/mods/public/simulation/data/settings/game_types/
    144145    wxArrayString gameTypes;
    145146    gameTypes.Add(_T("conquest"));
     147    gameTypes.Add(_T("conquestStructures"));
     148    gameTypes.Add(_T("conquestUnits"));
    146149    gameTypes.Add(_T("wonder"));
    147150    gameTypes.Add(_T("endless"));
    148151
    149152    wxFlexGridSizer* gridSizer = new wxFlexGridSizer(2, 5, 5);
    150153    gridSizer->AddGrowableCol(1);