0ad/binaries/data/mods/public/gui/pregame/MainMenuItems.js
phosit df5fee6103 Rename PushGuiPage to OpenChildPage
There is no `PopGuiPage` anymore. For symmetry there should also be no
`PushGuiPage`.
2025-03-09 10:39:20 +01:00

301 lines
8.9 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var g_MainMenuItems = [
{
"caption": translate("Learn to Play"),
"tooltip": translate("Learn how to play, start the tutorial, discover the technology trees, and the history behind the civilizations."),
"submenu": [
{
"caption": translate("Manual"),
"tooltip": translate("Open the 0 A.D. Game Manual."),
"onPress": Engine.OpenChildPage.bind(null, "page_manual.xml")
},
{
"caption": translate("Tutorial"),
"tooltip": translate("Start the introductory tutorial."),
"onPress": () => {
Engine.SwitchGuiPage("page_autostart.xml", {
"attribs": {
"mapType": "scenario",
"map": "maps/tutorials/introductory_tutorial",
"settings": {
"CheatsEnabled": true
},
},
"playerAssignments": {
"local": {
"player": 1,
"name": Engine.ConfigDB_GetValue("user", "playername.singleplayer") || Engine.GetSystemUsername()
}
},
"storeReplay": true
});
}
},
{
"caption": translate("Tips and Tricks"),
"tooltip": translate("Discover simple tips, tricks, and game mechanics."),
"onPress": Engine.OpenChildPage.bind(null, "page_tips.xml", {
"tipScrolling": true
})
},
{
"caption": translate("Structure Tree"),
"tooltip": colorizeHotkey(translate("%(hotkey)s: View the structure tree of civilizations featured in 0 A.D."), "structree"),
"hotkey": "structree",
"onPress": pageLoop.bind(null, "page_structree.xml")
},
{
"caption": translate("Civilization Overview"),
"tooltip": colorizeHotkey(translate("%(hotkey)s: Learn about the civilizations featured in 0 A.D."), "civinfo"),
"hotkey": "civinfo",
"onPress": pageLoop.bind(null, "page_civinfo.xml")
},
{
"caption": translate("Catafalque Overview"),
"tooltip": translate("Compare the bonuses of catafalques featured in 0 A.D."),
"onPress": Engine.OpenChildPage.bind(null, "page_catafalque.xml")
},
{
"caption": translate("Map Overview"),
"tooltip": translate("View the different maps featured in 0 A.D."),
"onPress": Engine.OpenChildPage.bind(null, "page_mapbrowser.xml")
}
]
},
{
"caption": translate("Continue Campaign"),
"tooltip": translate("Relive history through historical military campaigns."),
"onPress": () => {
try
{
Engine.SwitchGuiPage(CampaignRun.getCurrentRun().getMenuPath());
}
catch(err)
{
error("Error opening campaign run:");
error(err.toString());
}
},
"enabled": () => CampaignRun.hasCurrentRun()
},
{
"caption": translate("Single-player"),
"tooltip": translate("Start, load, or replay a single-player game."),
"submenu": [
{
"caption": translate("Matches"),
"tooltip": translate("Start a new single-player game."),
"onPress": () => {
Engine.SwitchGuiPage("page_gamesetup.xml");
}
},
{
"caption": translate("Load Game"),
"tooltip": translate("Load a saved game."),
"onPress": async() => {
const gameId = await Engine.OpenChildPage("page_loadgame.xml");
if (!gameId)
return;
const metadata = Engine.StartSavedGame(gameId);
if (!metadata)
{
error("Could not load saved game: " + gameId);
return;
}
Engine.SwitchGuiPage("page_loading.xml", {
"attribs": metadata.initAttributes,
"playerAssignments": {
"local": {
"name": metadata.initAttributes.settings.
PlayerData[metadata.playerID]?.Name ??
singleplayerName(),
"player": metadata.playerID
}
},
"savedGUIData": metadata.gui
});
}
},
{
"caption": translate("Continue Campaign"),
"tooltip": translate("Relive history through historical military campaigns."),
"onPress": () => {
try
{
Engine.SwitchGuiPage(CampaignRun.getCurrentRun().getMenuPath());
}
catch(err)
{
error("Error opening campaign run:");
error(err.toString());
}
},
"enabled": () => CampaignRun.hasCurrentRun()
},
{
"caption": translate("New Campaign"),
"tooltip": translate("Relive history through historical military campaigns."),
"onPress": () => {
Engine.SwitchGuiPage("campaigns/setup/page.xml");
}
},
{
"caption": translate("Load Campaign"),
"tooltip": translate("Relive history through historical military campaigns."),
"onPress": () => {
// Switch instead of push, otherwise the 'continue'
// button might remain enabled.
// TODO: find a better solution.
Engine.SwitchGuiPage("campaigns/load_modal/page.xml");
}
},
{
"caption": translate("Replays"),
"tooltip": translate("Playback previous games."),
"onPress": () => {
Engine.SwitchGuiPage("page_replaymenu.xml", {
"replaySelectionData": {
"filters": {
"singleplayer": "Single-player"
}
}
});
}
}
]
},
{
"caption": translate("Multiplayer"),
"tooltip": translate("Fight against one or more human players in a multiplayer game."),
"submenu": [
{
"caption": translate("Game Lobby"),
"tooltip":
colorizeHotkey(translate("%(hotkey)s: Launch the multiplayer lobby to join and host publicly visible games and chat with other players."), "lobby") +
(Engine.StartXmppClient ? "" : translate("Launch the multiplayer lobby. \\[DISABLED BY BUILD]")),
"enabled": () => !!Engine.StartXmppClient,
"hotkey": "lobby",
"onPress": () => {
if (Engine.StartXmppClient)
Engine.OpenChildPage("page_prelobby_entrance.xml");
}
},
{
// Translation: Join a game by specifying the host's IP address.
"caption": translate("Join Game"),
"tooltip": translate("Joining an existing multiplayer game."),
"onPress": Engine.OpenChildPage.bind(null, "page_gamesetup_mp.xml", {
"multiplayerGameType": "join"
})
},
{
"caption": translate("Host New Game"),
"tooltip": translate("Host a new multiplayer game."),
"onPress": Engine.OpenChildPage.bind(null, "page_gamesetup_mp.xml", {
"multiplayerGameType": "host",
"loadSavedGame": false
})
},
{
"caption": translate("Host Saved Game"),
"tooltip": translate("Continue playing a game from a savegame."),
"onPress": Engine.OpenChildPage.bind(null, "page_gamesetup_mp.xml", {
"multiplayerGameType": "host",
"loadSavedGame": true
})
},
{
"caption": translate("Replays"),
"tooltip": translate("Playback previous games."),
"onPress": () => {
Engine.SwitchGuiPage("page_replaymenu.xml", {
"replaySelectionData": {
"filters": {
"singleplayer": "Multiplayer"
}
}
});
}
}
]
},
{
"caption": translate("Settings"),
"tooltip": translate("Change game options."),
"submenu": [
{
"caption": translate("Options"),
"tooltip": translate("Adjust game settings."),
"onPress": async() => {
fireConfigChangeHandlers(await Engine.OpenChildPage("page_options.xml"));
}
},
{
"caption": translate("Hotkeys"),
"tooltip": translate("Adjust hotkeys."),
"onPress": Engine.OpenChildPage.bind(null, "hotkeys/page_hotkeys.xml")
},
{
"caption": translate("Language"),
"tooltip": translate("Choose the language of the game."),
"onPress": Engine.OpenChildPage.bind(null, "page_locale.xml")
},
{
"caption": translate("Mod Selection"),
"tooltip": translate("Select and download mods for the game."),
"onPress": () => {
Engine.SwitchGuiPage("page_modmod.xml");
}
},
{
"caption": translate("Welcome Screen"),
"tooltip": translate("Show the Welcome Screen again. Useful if you hid it by mistake."),
"onPress": Engine.OpenChildPage.bind(null, "page_splashscreen.xml")
}
]
},
{
"caption": translate("Scenario Editor"),
"tooltip": translate('Open the Atlas Scenario Editor in a new window. You can run this more reliably by starting the game with the command-line argument "-editor".'),
"onPress": async() => {
if (!Engine.AtlasIsAvailable())
{
messageBox(
400, 200,
translate("The scenario editor is not available or failed to load. See the game logs for additional information."),
translate("Error"));
return;
}
const buttonIndex = await messageBox(
400, 200,
translate("Are you sure you want to quit 0 A.D. and open the Scenario Editor?"),
translate("Confirmation"),
[translate("No"), translate("Yes")]);
if (buttonIndex === 1)
Engine.RestartInAtlas();
}
},
{
"caption": translate("Credits"),
"tooltip": translate("Show the 0 A.D. credits."),
"onPress": Engine.OpenChildPage.bind(null, "page_credits.xml")
},
{
"caption": translate("Exit"),
"tooltip": translate("Exit the game."),
"onPress": async() => {
const buttonIndex = await messageBox(
400, 200,
translate("Are you sure you want to quit 0 A.D.?"),
translate("Confirmation"),
[translate("No"), translate("Yes")]);
if (buttonIndex === 1)
Engine.Exit();
}
}
];