Index: binaries/data/mods/mod/gui/common/mod.js
===================================================================
--- binaries/data/mods/mod/gui/common/mod.js (Revision 21822)
+++ binaries/data/mods/mod/gui/common/mod.js (Arbeitskopie)
@@ -1,4 +1,10 @@
/**
+ * Cache the result of Engine.GetEngineInfo()
+ */
+
+const g_EngineInfo = Engine.GetEngineInfo();
+
+/**
* Check the mod compatibility between the saved game to be loaded and the engine
*/
function hasSameMods(modsA, modsB)
Index: binaries/data/mods/public/gui/gamesetup/gamesetup.js
===================================================================
--- binaries/data/mods/public/gui/gamesetup/gamesetup.js (Revision 21822)
+++ binaries/data/mods/public/gui/gamesetup/gamesetup.js (Arbeitskopie)
@@ -1851,8 +1851,8 @@
if (!data || !data.attributes || !data.attributes.settings)
return;
- if (data.engine_info.engine_version != Engine.GetEngineInfo().engine_version ||
- !hasSameMods(data.engine_info.mods, Engine.GetEngineInfo().mods))
+ if (data.engine_info.engine_version != g_EngineInfo.engine_version ||
+ !hasSameMods(data.engine_info.mods, g_EngineInfo.mods))
return;
g_IsInGuiUpdate = true;
@@ -1911,7 +1911,7 @@
Engine.ConfigDB_GetValue("user", "persistmatchsettings") == "true" ?
g_GameAttributes :
{},
- "engine_info": Engine.GetEngineInfo()
+ "engine_info": g_EngineInfo
});
}
@@ -2696,7 +2696,7 @@
"players": clients.list,
"stunIP": g_StunEndpoint ? g_StunEndpoint.ip : "",
"stunPort": g_StunEndpoint ? g_StunEndpoint.port : "",
- "mods": JSON.stringify(Engine.GetEngineInfo().mods),
+ "mods": JSON.stringify(g_EngineInfo.mods),
};
// Only send the stanza if the relevant settings actually changed
Index: binaries/data/mods/public/gui/loadgame/load.js
===================================================================
--- binaries/data/mods/public/gui/loadgame/load.js (Revision 21822)
+++ binaries/data/mods/public/gui/loadgame/load.js (Arbeitskopie)
@@ -9,11 +9,8 @@
{
let savedGames = Engine.GetSavedGames();
- // Get current game version and loaded mods
- let engineInfo = Engine.GetEngineInfo();
-
if (Engine.GetGUIObjectByName("compatibilityFilter").checked)
- savedGames = savedGames.filter(game => isCompatibleSavegame(game.metadata, engineInfo));
+ savedGames = savedGames.filter(game => isCompatibleSavegame(game.metadata, g_EngineInfo));
let gameSelection = Engine.GetGUIObjectByName("gameSelection");
gameSelection.enabled = !!savedGames.length;
@@ -60,9 +57,9 @@
});
let list = g_SavedGamesMetadata.map(metadata => {
- let isCompatible = isCompatibleSavegame(metadata, engineInfo);
+ let isCompatible = isCompatibleSavegame(metadata, g_EngineInfo);
return {
- "date": generateSavegameDateString(metadata, engineInfo),
+ "date": generateSavegameDateString(metadata, g_EngineInfo),
"mapName": compatibilityColor(translate(metadata.initAttributes.settings.Name), isCompatible),
"mapType": compatibilityColor(translateMapType(metadata.initAttributes.mapType), isCompatible),
"description": compatibilityColor(metadata.description, isCompatible)
@@ -79,7 +76,7 @@
// Change these last, otherwise crash
// list strings used in the delete dialog
- gameSelection.list = g_SavedGamesMetadata.map(metadata => generateSavegameLabel(metadata, engineInfo));
+ gameSelection.list = g_SavedGamesMetadata.map(metadata => generateSavegameLabel(metadata, g_EngineInfo));
gameSelection.list_data = g_SavedGamesMetadata.map(metadata => metadata.id);
let selectedGameIndex = g_SavedGamesMetadata.findIndex(metadata => metadata.id == selectedGameId);
@@ -116,7 +113,7 @@
Engine.GetGUIObjectByName("savedVictory").caption = metadata.initAttributes.settings.VictoryConditions.map(victoryConditionName => translateVictoryCondition(victoryConditionName)).join(translate(", "));
let caption = sprintf(translate("Mods: %(mods)s"), { "mods": modsToString(metadata.mods) });
- if (!hasSameMods(metadata.mods, Engine.GetEngineInfo().mods))
+ if (!hasSameMods(metadata.mods, g_EngineInfo.mods))
caption = coloredText(caption, "orange");
Engine.GetGUIObjectByName("savedMods").caption = caption;
@@ -133,9 +130,8 @@
let metadata = g_SavedGamesMetadata[gameSelection.selected];
// Check compatibility before really loading it
- let engineInfo = Engine.GetEngineInfo();
- let sameMods = hasSameMods(metadata.mods, engineInfo.mods);
- let sameEngineVersion = hasSameEngineVersion(metadata, engineInfo);
+ let sameMods = hasSameMods(metadata.mods, g_EngineInfo.mods);
+ let sameEngineVersion = hasSameEngineVersion(metadata, g_EngineInfo);
if (sameEngineVersion && sameMods)
{
@@ -150,7 +146,7 @@
if (metadata.engine_version)
message += sprintf(translate("This savegame needs 0 A.D. version %(requiredVersion)s, while you are running version %(currentVersion)s."), {
"requiredVersion": metadata.engine_version,
- "currentVersion": engineInfo.engine_version
+ "currentVersion": g_EngineInfo.engine_version
}) + "\n";
else
message += translate("This savegame needs an older version of 0 A.D.") + "\n";
@@ -161,7 +157,7 @@
metadata.mods = [];
message += translate("This savegame needs a different sequence of mods:") + "\n" +
- comparedModsString(metadata.mods, engineInfo.mods) + "\n";
+ comparedModsString(metadata.mods, g_EngineInfo.mods) + "\n";
}
message += translate("Do you still want to proceed?");
Index: binaries/data/mods/public/gui/lobby/lobby.js
===================================================================
--- binaries/data/mods/public/gui/lobby/lobby.js (Revision 21822)
+++ binaries/data/mods/public/gui/lobby/lobby.js (Arbeitskopie)
@@ -1017,7 +1017,7 @@
Math.round(playerRatings.reduce((sum, current) => sum + current) / playerRatings.length) :
g_DefaultLobbyRating;
- if (!hasSameMods(JSON.parse(game.mods), Engine.GetEngineInfo().mods))
+ if (!hasSameMods(JSON.parse(game.mods), g_EngineInfo.mods))
game.state = "incompatible";
return game;
@@ -1178,7 +1178,7 @@
messageBox(
400, 200,
translate("Your active mods do not match the mods of this game.") + "\n\n" +
- comparedModsString(JSON.parse(game.mods), Engine.GetEngineInfo().mods) + "\n\n" +
+ comparedModsString(JSON.parse(game.mods), g_EngineInfo.mods) + "\n\n" +
translate("Do you want to switch to the mod selection page?"),
translate("Incompatible mods"),
[translate("No"), translate("Yes")],
Index: binaries/data/mods/public/gui/replaymenu/replay_menu.js
===================================================================
--- binaries/data/mods/public/gui/replaymenu/replay_menu.js (Revision 21822)
+++ binaries/data/mods/public/gui/replaymenu/replay_menu.js (Arbeitskopie)
@@ -1,9 +1,4 @@
/**
- * Used for checking replay compatibility.
- */
-const g_EngineInfo = Engine.GetEngineInfo();
-
-/**
* Needed for formatPlayerInfo to show the player civs in the details.
*/
const g_CivData = loadCivData(false, false);
Index: binaries/data/mods/public/gui/savegame/save.js
===================================================================
--- binaries/data/mods/public/gui/savegame/save.js (Revision 21822)
+++ binaries/data/mods/public/gui/savegame/save.js (Arbeitskopie)
@@ -36,8 +36,7 @@
for (let game of savedGames)
g_Descriptions[game.id] = game.metadata.description || "";
- let engineInfo = Engine.GetEngineInfo();
- gameSelection.list = savedGames.map(game => generateSavegameLabel(game.metadata, engineInfo));
+ gameSelection.list = savedGames.map(game => generateSavegameLabel(game.metadata, g_EngineInfo));
gameSelection.list_data = savedGames.map(game => game.id);
gameSelection.selected = Math.min(gameSelection.selected, gameSelection.list.length - 1);