Index: binaries/data/config/default.cfg
===================================================================
--- binaries/data/config/default.cfg
+++ binaries/data/config/default.cfg
@@ -203,12 +203,12 @@
right = D, RightArrow ; Scroll or rotate right
up = W, UpArrow ; Scroll or rotate up/forwards
down = S, DownArrow ; Scroll or rotate down/backwards
-scroll.speed.increase = "Ctrl+Shift+S" ; Increase scroll speed
-scroll.speed.decrease = "Ctrl+Alt+S" ; Decrease scroll speed
-rotate.speed.increase = "Ctrl+Shift+R" ; Increase rotation speed
-rotate.speed.decrease = "Ctrl+Alt+R" ; Decrease rotation speed
-zoom.speed.increase = "Ctrl+Shift+Z" ; Increase zoom speed
-zoom.speed.decrease = "Ctrl+Alt+Z" ; Decrease zoom speed
+scroll.speed.increase = "Ctrl+Alt+Shift+S" ; Increase scroll speed
+scroll.speed.decrease = "Ctrl+Alt+Shift+S" ; Decrease scroll speed
+rotate.speed.increase = "Ctrl+Alt+Shift+R" ; Increase rotation speed
+rotate.speed.decrease = "Ctrl+Alt+Shift+R" ; Decrease rotation speed
+zoom.speed.increase = "Ctrl+Alt+Shift+Z" ; Increase zoom speed
+zoom.speed.decrease = "Ctrl+Alt+Shift+Z" ; Decrease zoom speed
[hotkey.camera.jump]
1 = F5 ; Jump to position N
@@ -311,6 +311,50 @@
rotate.cw = RightBracket ; Rotate building placement preview clockwise
rotate.ccw = LeftBracket ; Rotate building placement preview anticlockwise
+[hotkey.session.constructions]
+house = "B+H"
+storehouse = "B+S"
+farmstead = "B+F+A"
+field = "B+F"
+corral = "B+C"
+greekoutpost = "B+O"
+woodenwall = "B+C"
+sentrytower = "B+T+S"
+dock = "B+D"
+barracks = "B+A"
+blacksmith = "B+L"
+temple = "B+T+E"
+market = "B+M"
+defencetower = "B+T"
+citywall = "B+W"
+civiccentre = "B+C+E"
+fortress = "B+F+O"
+wonder = "B+W+O"
+gymnasium = "B+G+Y"
+greektheatre = "B+G+T"
+councilchamber = "B+C+A"
+stoa = "B+S+T"
+
+[hotkey.session.formations]
+battle_line = "Ctrl+Alt+T"
+box = "Ctrl+Alt+B"
+column_closed = "Ctrl+Alt+F" ; Forced march
+column_open = "Ctrl+Alt+C"
+flank = "Ctrl+Alt+K"
+line_closed = "Ctrl+Alt+L"
+line_open = "Ctrl+Alt+O" ; Open order
+null = "Ctrl+Alt+N"
+phalanx = "Ctrl+Alt+H"
+skirmish = "Ctrl+Alt+I"
+wedge = "Ctrl+Alt+W"
+
+[hotkey.session.stances]
+aggressive = "Ctrl+Alt+A"
+defensive = "Ctrl+Alt+D"
+passive = "Ctrl+Alt+P"
+standground = "Ctrl+Alt+S"
+violent = "Ctrl+Alt+V"
+
[hotkey.session.gui]
toggle = "Alt+G" ; Toggle visibility of session GUI
menu.toggle = "F10" ; Toggle in-game menu
Index: binaries/data/mods/public/gui/manual/intro.txt
===================================================================
--- binaries/data/mods/public/gui/manual/intro.txt
+++ binaries/data/mods/public/gui/manual/intro.txt
@@ -135,14 +135,20 @@
Ctrl + D or \[right]: Rotate camera anticlockwise around terrain
Q: Rotate camera clockwise around terrain
E: Rotate camera anticlockwise around terrain
+Ctrl + Alt + Shift + R: Increase rotation speed
+Ctrl + Alt + Shift + R: Decrease rotation speed
Shift + Mouse Wheel Rotate Up: Rotate camera clockwise around terrain
Shift + Mouse Wheel Rotate Down: Rotate camera anticlockwise around terrain
F: Follow the selected unit (move the camera to stop it from following the unit)
R: Reset camera zoom/orientation
+: Zoom in (keep pressed for continuous zoom)
-: Zoom out (keep pressed for continuous zoom)
+Ctrl + Alt + Shift + Z: Increase zoom speed
+Ctrl + Alt + Shift + Z: Decrease zoom speed
Alt + W: Toggle through wireframe modes
Middle Mouse Button: Keep pressed and move the mouse to pan
+Ctrl + Alt + Shift + S: Increase scroll speed
+Ctrl + Alt + Shift + S: Decrease scroll speed
[font="sans-bold-14"]During Building Placement
[font="sans-14"]\[: Rotate building 15 degrees counter-clockwise
Index: binaries/data/mods/public/gui/session/hotkeys/misc.xml
===================================================================
--- binaries/data/mods/public/gui/session/hotkeys/misc.xml
+++ binaries/data/mods/public/gui/session/hotkeys/misc.xml
@@ -59,6 +59,47 @@
Engine.QuickLoad();
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: binaries/data/mods/public/gui/session/selection_panels.js
===================================================================
--- binaries/data/mods/public/gui/session/selection_panels.js
+++ binaries/data/mods/public/gui/session/selection_panels.js
@@ -258,8 +258,14 @@
"player": data.player
});
+ let constructionCode = template.name.generic.replace(" ", "").toLowerCase();
+
data.button.onPress = function() { startBuildingPlacement(data.item, data.playerState); };
+ let hotkey = Engine.GetGUIObjectByName("hotkey.constructions." + constructionCode);
+ if (hotkey)
+ hotkey.onPress = () => startBuildingPlacement(data.item, data.playerState);
+
let tooltips = [
getEntityNamesFormatted,
getVisibleEntityClassesFormatted,
@@ -276,7 +282,10 @@
getRequiredTechnologyTooltip(technologyEnabled, template.requiredTechnology, GetSimState().players[data.player].civ),
getNeededResourcesTooltip(neededResources));
- data.button.tooltip = tooltips.filter(tip => tip).join("\n");
+ data.button.tooltip = sprintf(translate("%(hotkey)s %(constructionInfo)s"), {
+ "constructionInfo": tooltips.filter(tip => tip).join("\n"),
+ "hotkey": colorizeHotkey("%(hotkey)s", "session.constructions." + constructionCode)
+ });
let modifier = "";
if (!technologyEnabled || limits.canBeAddedCount == 0)
@@ -340,7 +349,19 @@
performFormation(data.unitEntStates.map(state => state.id), data.item);
};
- let tooltip = translate(formationInfo.name);
+ let formationCode = (template => {
+ let split = data.item.split("/");
+ return split[split.length-1];
+ })(data.item);
+
+ let hotkey = Engine.GetGUIObjectByName("hotkey.formations." + formationCode);
+ if (hotkey)
+ hotkey.onPress = () => performFormation(g_Selection.toList(), data.item);
+
+ let tooltip = sprintf(translate("%(hotkey)s %(formationName)s"), {
+ "formationName": translate(formationInfo.name),
+ "hotkey": colorizeHotkey("%(hotkey)s", "session.formations." + formationCode)
+ });
if (!formationOk && formationInfo.tooltip)
tooltip += "\n" + coloredText(translate(formationInfo.tooltip), "red");
data.button.tooltip = tooltip;
@@ -929,8 +950,14 @@
"setupButton": function(data)
{
data.button.onPress = function() { performStance(data.unitEntStates.map(state => state.id), data.item); };
-
- data.button.tooltip = getStanceDisplayName(data.item) + "\n" +
+ let hotkey = Engine.GetGUIObjectByName("hotkey.stances." + data.item);
+ if (hotkey)
+ hotkey.onPress = () => performStance(g_Selection.toList(), data.item);
+
+ data.button.tooltip = sprintf(translate("%(hotkey)s %(stanceName)s"), {
+ "stanceName": getStanceDisplayName(data.item),
+ "hotkey": colorizeHotkey("%(hotkey)s", "session.stances." + data.item)
+ }) + "\n" +
"[font=\"sans-13\"]" + getStanceTooltip(data.item) + "[/font]";
data.guiSelection.hidden = !Engine.GuiInterfaceCall("IsStanceSelected", {