Index: binaries/data/mods/public/gui/common/settings.js
===================================================================
--- binaries/data/mods/public/gui/common/settings.js (revision 17899)
+++ binaries/data/mods/public/gui/common/settings.js (working copy)
@@ -32,6 +32,7 @@
"AIDescriptions": loadAIDescriptions(),
"AIDifficulties": loadAIDifficulties(),
"Ceasefire": loadCeasefire(),
+ "WonderDurations": loadWonderDuration(),
"GameSpeeds": loadSettingValuesFile("game_speeds.json"),
"MapTypes": loadMapTypes(),
"MapSizes": loadSettingValuesFile("map_sizes.json"),
@@ -131,6 +132,27 @@
}
/**
+ * Loads available wonder-victory times
+ */
+function loadWonderDuration()
+{
+ var jsonFile = "wonder_times.json";
+ var json = Engine.ReadJSONFile(g_SettingsDirectory + jsonFile);
+
+ if (!json || json.Default === undefined || !json.Times || !Array.isArray(json.Times))
+ {
+ error("Could not load " + jsonFile);
+ return undefined;
+ }
+
+ return json.Times.map(duration => ({
+ "Duration": duration,
+ "Default": duration == json.Default,
+ "Title": sprintf(translatePluralWithContext("wonder victory", "%(min)s minute", "%(min)s minutes", duration), { "min": duration })
+ }));
+}
+
+/**
* Loads available ceasefire settings.
*
* @returns {Array|undefined}
Index: binaries/data/mods/public/gui/gamesetup/gamesetup.js
===================================================================
--- binaries/data/mods/public/gui/gamesetup/gamesetup.js (revision 17899)
+++ binaries/data/mods/public/gui/gamesetup/gamesetup.js (working copy)
@@ -8,6 +8,7 @@
const g_PopulationCapacities = prepareForDropdown(g_Settings ? g_Settings.PopulationCapacities : undefined);
const g_StartingResources = prepareForDropdown(g_Settings ? g_Settings.StartingResources : undefined);
const g_VictoryConditions = prepareForDropdown(g_Settings ? g_Settings.VictoryConditions : undefined);
+const g_WonderDurations = prepareForDropdown(g_Settings ? g_Settings.WonderDurations : undefined);
/**
* All selectable playercolors except gaia.
@@ -243,6 +244,7 @@
initPopulationCaps();
initStartingResources();
initCeasefire();
+ initWonderDurations();
initVictoryConditions();
initMapSizes();
initRadioButtons();
@@ -302,14 +304,14 @@
// For singleplayer reduce the size of more options dialog by two options (cheats, rated game = 60px)
if (!g_IsNetworked)
{
- Engine.GetGUIObjectByName("moreOptions").size = "50%-200 50%-195 50%+200 50%+160";
- Engine.GetGUIObjectByName("hideMoreOptions").size = "50%-70 310 50%+70 336";
+ Engine.GetGUIObjectByName("moreOptions").size = "50%-200 50%-195 50%+200 50%+190";
+ Engine.GetGUIObjectByName("hideMoreOptions").size = "50%-70 340 50%+70 366";
}
// For non-lobby multiplayergames reduce the size of the dialog by one option (rated game, 30px)
else if (!Engine.HasXmppClient())
{
Engine.GetGUIObjectByName("moreOptions").size = "50%-200 50%-195 50%+200 50%+190";
- Engine.GetGUIObjectByName("hideMoreOptions").size = "50%-70 340 50%+70 366";
+ Engine.GetGUIObjectByName("hideMoreOptions").size = "50%-70 370 50%+70 396";
}
}
@@ -401,6 +403,21 @@
victoryConditions.selected = g_VictoryConditions.Default;
}
+function initWonderDurations()
+{
+ let wonderConditions = Engine.GetGUIObjectByName("wonderDuration");
+ wonderConditions.list = g_WonderDurations.Title;
+ wonderConditions.list_data = g_WonderDurations.Duration;
+ wonderConditions.selected = g_WonderDurations.Default;
+ wonderConditions.onSelectionChange = function()
+ {
+ if (this.selected != -1)
+ g_GameAttributes.settings.WonderDuration = g_WonderDurations.Duration[this.selected];
+
+ updateGameAttributes();
+ };
+}
+
function initMapSizes()
{
let mapSize = Engine.GetGUIObjectByName("mapSize");
@@ -1238,6 +1255,7 @@
// These dropdowns might set the default (as they ignore g_IsInGuiUpdate)
let mapSizeIdx = mapSettings.Size !== undefined ? g_MapSizes.Tiles.indexOf(mapSettings.Size) : g_MapSizes.Default;
let victoryIdx = mapSettings.GameType !== undefined ? g_VictoryConditions.Name.indexOf(mapSettings.GameType) : g_VictoryConditions.Default;
+ let wonderDurationIdx = mapSettings.WonderDuration !== undefined ? g_WonderDurations.Duration.indexOf(mapSettings.WonderDuration) : g_WonderDurations.Default;
let popIdx = mapSettings.PopulationCap !== undefined ? g_PopulationCapacities.Population.indexOf(mapSettings.PopulationCap) : g_PopulationCapacities.Default;
let startingResIdx = mapSettings.StartingResources !== undefined ? g_StartingResources.Resources.indexOf(mapSettings.StartingResources) : g_StartingResources.Default;
let ceasefireIdx = mapSettings.Ceasefire !== undefined ? g_Ceasefire.Duration.indexOf(mapSettings.Ceasefire) : g_Ceasefire.Default;
@@ -1254,6 +1272,7 @@
Engine.GetGUIObjectByName("populationCap").selected = popIdx;
Engine.GetGUIObjectByName("gameSpeed").selected = gameSpeedIdx;
Engine.GetGUIObjectByName("ceasefire").selected = ceasefireIdx;
+ Engine.GetGUIObjectByName("wonderDuration").selected = wonderDurationIdx;
Engine.GetGUIObjectByName("startingResources").selected = startingResIdx;
}
else
@@ -1268,6 +1287,7 @@
Engine.GetGUIObjectByName("mapSizeText").caption = g_GameAttributes.mapType == "random" ? g_MapSizes.LongName[mapSizeIdx] : translate("Default");
Engine.GetGUIObjectByName("numPlayersText").caption = numPlayers;
Engine.GetGUIObjectByName("victoryConditionText").caption = g_VictoryConditions.Title[victoryIdx];
+ Engine.GetGUIObjectByName("wonderDurationText").caption = g_WonderDurations.Title[wonderDurationIdx];
Engine.GetGUIObjectByName("populationCapText").caption = g_PopulationCapacities.Title[popIdx];
Engine.GetGUIObjectByName("startingResourcesText").caption = g_StartingResources.Title[startingResIdx];
Engine.GetGUIObjectByName("ceasefireText").caption = g_Ceasefire.Title[ceasefireIdx];
@@ -1280,6 +1300,10 @@
setGUIBoolean("lockTeams", "lockTeamsText", !!mapSettings.LockTeams);
setGUIBoolean("enableRating", "enableRatingText", !!mapSettings.RatingEnabled);
+ Engine.GetGUIObjectByName("optionWonderDuration").hidden =
+ g_GameAttributes.settings.GameType &&
+ g_GameAttributes.settings.GameType != "wonder";
+
Engine.GetGUIObjectByName("cheatWarningText").hidden = !g_IsNetworked || !mapSettings.CheatsEnabled;
Engine.GetGUIObjectByName("enableCheats").enabled = !mapSettings.RatingEnabled;
@@ -1294,6 +1318,7 @@
let notScenario = g_GameAttributes.mapType != "scenario" && g_IsController ;
hideControl("victoryCondition", "victoryConditionText", notScenario);
+ hideControl("wonderDuration", "wonderDurationText", notScenario);
hideControl("populationCap", "populationCapText", notScenario);
hideControl("startingResources", "startingResourcesText", notScenario);
hideControl("ceasefire", "ceasefireText", notScenario);
@@ -1351,6 +1376,8 @@
pColorPicker.selected = g_PlayerColors.findIndex(col => sameColor(col, color));
}
+ resizeMoreOptionsWindow();
+
g_IsInGuiUpdate = false;
// Game attributes include AI settings, so update the player list
@@ -1369,7 +1396,21 @@
let mapName = g_GameAttributes.map || "";
let victoryIdx = Math.max(0, g_VictoryConditions.Name.indexOf(g_GameAttributes.settings.GameType || ""));
- let victoryTitle = g_VictoryConditions.Title[victoryIdx];
+ let victoryTitle;
+
+ if (g_VictoryConditions.Name[victoryIdx] == "wonder")
+ victoryTitle = sprintf(
+ translatePluralWithContext(
+ "victory condition",
+ "Wonder (%(min)s minute)",
+ "Wonder (%(min)s minutes)",
+ g_GameAttributes.settings.WonderDuration
+ ),
+ { "min": g_GameAttributes.settings.WonderDuration }
+ );
+ else
+ victoryTitle = g_VictoryConditions.Title[victoryIdx];
+
if (victoryIdx != g_VictoryConditions.Default)
victoryTitle = "[color=\"" + g_VictoryColor + "\"]" + victoryTitle + "[/color]";
Index: binaries/data/mods/public/gui/gamesetup/gamesetup.xml
===================================================================
--- binaries/data/mods/public/gui/gamesetup/gamesetup.xml (revision 17899)
+++ binaries/data/mods/public/gui/gamesetup/gamesetup.xml (working copy)
@@ -271,7 +271,7 @@
-
-
+
+ Wonder:
+
+
+
+ Number of minuts that the player has to keep the wonder in order to win.
+
+
+
+
+
Revealed Map:
@@ -336,7 +346,7 @@
-
+
Explored Map:
@@ -346,7 +356,7 @@
-
+
Disable Treasures:
@@ -356,7 +366,7 @@
-
+
Teams Locked:
@@ -366,7 +376,7 @@
-
+
Cheats:
@@ -376,7 +386,7 @@
-
+
Rated Game:
Index: binaries/data/mods/public/maps/scripts/WonderVictory.js
===================================================================
--- binaries/data/mods/public/maps/scripts/WonderVictory.js (revision 17899)
+++ binaries/data/mods/public/maps/scripts/WonderVictory.js (working copy)
@@ -31,7 +31,7 @@
if (i != data.to)
players.push(i);
- var time = cmpWonder.GetTimeTillVictory()*1000;
+ var time = cmpWonder.GetVictoryDuration() * 1000 * 60; // minutes to millisecounds
messages.otherMessage = cmpGuiInterface.AddTimeNotification({
"message": markForTranslation("%(player)s will have won in %(time)s"),
"players": players,
Index: binaries/data/mods/public/simulation/components/EndGameManager.js
===================================================================
--- binaries/data/mods/public/simulation/components/EndGameManager.js (revision 17899)
+++ binaries/data/mods/public/simulation/components/EndGameManager.js (working copy)
@@ -19,6 +19,8 @@
// Allied victory means allied players can win if victory conditions are met for each of them
// Would be false for a "last man standing" game (when diplomacy is fully implemented)
this.alliedVictory = true;
+
+ this.wonderDuration = 0;
};
EndGameManager.prototype.GetGameType = function()
@@ -37,6 +39,16 @@
return this.gameType == type;
};
+EndGameManager.prototype.SetWonderDuration = function(wonderDuration)
+{
+ this.wonderDuration = wonderDuration;
+};
+
+EndGameManager.prototype.GetWonderDuration = function()
+{
+ return this.wonderDuration;
+};
+
EndGameManager.prototype.MarkPlayerAsWon = function(playerID)
{
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
Index: binaries/data/mods/public/simulation/components/Wonder.js
===================================================================
--- binaries/data/mods/public/simulation/components/Wonder.js (revision 17899)
+++ binaries/data/mods/public/simulation/components/Wonder.js (working copy)
@@ -1,7 +1,7 @@
function Wonder() {}
Wonder.prototype.Schema =
- "" +
+ "" +
"" +
"";
@@ -11,9 +11,13 @@
Wonder.prototype.Serialize = null;
-Wonder.prototype.GetTimeTillVictory = function()
+/**
+ * Returns the number of minutes that a player has to keep the wonder in order to win.
+ */
+Wonder.prototype.GetVictoryDuration = function()
{
- return +this.template.TimeTillVictory;
+ var cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager);
+ return cmpEndGameManager.GetWonderDuration() * this.template.DurationMultiplier;
};
Engine.RegisterComponentType(IID_Wonder, "Wonder", Wonder);
Index: binaries/data/mods/public/simulation/helpers/Setup.js
===================================================================
--- binaries/data/mods/public/simulation/helpers/Setup.js (revision 17899)
+++ binaries/data/mods/public/simulation/helpers/Setup.js (working copy)
@@ -49,6 +49,8 @@
var cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager);
if (settings.GameType)
cmpEndGameManager.SetGameType(settings.GameType);
+ if (settings.WonderDuration)
+ cmpEndGameManager.SetWonderDuration(settings.WonderDuration);
if (settings.Garrison)
{
Index: binaries/data/mods/public/simulation/templates/template_structure_wonder.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_structure_wonder.xml (revision 17899)
+++ binaries/data/mods/public/simulation/templates/template_structure_wonder.xml (working copy)
@@ -101,6 +101,6 @@
structures/fndn_6x6.xml
- 300
+ 1