Skip to main content

flatland_client_ui/
keybindings.rs

1//! Play-client keybindings — shared by in-game help overlay and `flatland3 keys`.
2
3use crate::map_presentation::format_map_legend_plain;
4
5pub struct KeyBinding {
6    pub keys: &'static str,
7    pub description: &'static str,
8}
9
10pub struct KeyBindingCategory {
11    pub name: &'static str,
12    pub bindings: &'static [KeyBinding],
13}
14
15pub const CATEGORIES: &[KeyBindingCategory] = &[
16    KeyBindingCategory {
17        name: "Movement",
18        bindings: &[
19            KeyBinding {
20                keys: "WASD / arrows",
21                description: "Move (cardinals; hold two for diagonal)",
22            },
23            KeyBinding {
24                keys: "Click map",
25                description: "Auto-walk to clicked cell (A* path); right-click cancels",
26            },
27            KeyBinding {
28                keys: "Shift (hold)",
29                description: "Sprint while moving",
30            },
31            KeyBinding {
32                keys: "x",
33                description: "Toggle sprint mode (faster move, stamina drain)",
34            },
35            KeyBinding {
36                keys: "Shift+Space",
37                description: "Lunge forward (~8.5 m, high stamina)",
38            },
39            KeyBinding {
40                keys: "m",
41                description: "Map target mode — mouse/WASD place X, Enter to auto-walk",
42            },
43            KeyBinding {
44                keys: "u / j",
45                description: "Climb / descend",
46            },
47            KeyBinding {
48                keys: "Alt + WASD / arrows",
49                description: "Directional jump — leap one cell over a medium cliff (~2 m rise)",
50            },
51            KeyBinding {
52                keys: "Space",
53                description: "Stop movement / cancel auto-walk",
54            },
55        ],
56    },
57    KeyBindingCategory {
58        name: "Combat",
59        bindings: &[
60            KeyBinding {
61                keys: "Tab",
62                description: "Cycle T1 target (hostile)",
63            },
64            KeyBinding {
65                keys: "Shift+Tab",
66                description: "Cycle T2 target (allies, then monsters)",
67            },
68            KeyBinding {
69                keys: "0 / Shift+0",
70                description: "Clear T1 / T2 target",
71            },
72            KeyBinding {
73                keys: "1–9",
74                description: "Hotbar — cast bound ability or use bound consumable",
75            },
76            KeyBinding {
77                keys: "r / Shift+r",
78                description: "Toggle auto rotation for T1 / T2",
79            },
80            KeyBinding {
81                keys: "c",
82                description: "Dodge (i-frames, stamina)",
83            },
84            KeyBinding {
85                keys: "q",
86                description: "Toggle block (melee damage reduction)",
87            },
88            KeyBinding {
89                keys: "l",
90                description: "Loadout — assign rotation preset to T1/T2",
91            },
92            KeyBinding {
93                keys: "o",
94                description: "Rotation editor — create/edit/delete presets",
95            },
96            KeyBinding {
97                keys: "(auto)",
98                description: "T1 auto pursues into weapon range when idle",
99            },
100        ],
101    },
102    KeyBindingCategory {
103        name: "World",
104        bindings: &[
105            KeyBinding {
106                keys: "f",
107                description: "Use nearest — interact, then pickup loot/chest, then harvest/butcher",
108            },
109            KeyBinding {
110                keys: "Shift+m",
111                description: "Relocate nearest owned chest/lodging — 1×1 ghost square, Enter confirm",
112            },
113            KeyBinding {
114                keys: "k",
115                description: "Buy crown land — claim mode: WASD move plot, [ ] size, Enter buy",
116            },
117            KeyBinding {
118                keys: "v",
119                description: "Quest log / withdraw menu",
120            },
121            KeyBinding {
122                keys: "h",
123                description: "Hired workers — hire, dismiss, give items (g), teach recipes (t), toggle companion/job loop",
124            },
125        ],
126    },
127    KeyBindingCategory {
128        name: "Inventory & crafting",
129        bindings: &[
130            KeyBinding {
131                keys: "b",
132                description: "Inventory (worn items by body slot, on-you items, nearby open chests)",
133            },
134            KeyBinding {
135                keys: "p",
136                description: "Equip paperdoll — body slots, hands, mitigation / resists",
137            },
138            KeyBinding {
139                keys: "n",
140                description: "Craft menu (Enter to craft, Esc to close)",
141            },
142            KeyBinding {
143                keys: ",",
144                description: "Keychain — stow/retrieve chest keys (zero carry mass when stowed)",
145            },
146            KeyBinding {
147                keys: "i",
148                description: "Character stats overlay",
149            },
150            KeyBinding {
151                keys: "↑↓ / jk",
152                description: "Move selection in craft or inventory menus",
153            },
154            KeyBinding {
155                keys: "Enter",
156                description: "Inventory: equip/wear/use selected item, or move it",
157            },
158            KeyBinding {
159                keys: "m / d / x / l",
160                description: "Inventory: move to… / Relocate… (placed chest) / drop / destroy / lock nearby chest",
161            },
162        ],
163    },
164    KeyBindingCategory {
165        name: "Chat",
166        bindings: &[
167            KeyBinding {
168                keys: "t",
169                description: "Nearby chat — focus CHAT column input",
170            },
171            KeyBinding {
172                keys: "g",
173                description: "Whisper-stone contacts in CHAT",
174            },
175            KeyBinding {
176                keys: "f (on player)",
177                description: "Whisper or Trade with nearest player",
178            },
179            KeyBinding {
180                keys: "Y / N",
181                description: "Accept / decline inbound trade request",
182            },
183            KeyBinding {
184                keys: "Enter",
185                description: "Send chat line",
186            },
187            KeyBinding {
188                keys: "Tab",
189                description: "While whispering: return to Nearby speech",
190            },
191            KeyBinding {
192                keys: "Esc",
193                description: "Unfocus chat / cancel trade / close overlay",
194            },
195        ],
196    },
197    KeyBindingCategory {
198        name: "Session & HUD",
199        bindings: &[
200            KeyBinding {
201                keys: "? or /",
202                description: "Help & keybindings",
203            },
204            KeyBinding {
205                keys: ".",
206                description: "Cycle HUD — normal → compact (keeps CHAT) → map",
207            },
208            KeyBinding {
209                keys: "'",
210                description: "Hide / show the bottom LOG panel",
211            },
212            KeyBinding {
213                keys: "F2",
214                description: "Connection settings (server host / ports)",
215            },
216            KeyBinding {
217                keys: "Ctrl+Q",
218                description: "Quit client",
219            },
220            KeyBinding {
221                keys: "Ctrl+C",
222                description: "Interrupt / force quit",
223            },
224        ],
225    },
226    KeyBindingCategory {
227        name: "Dev / debug",
228        bindings: &[
229            KeyBinding {
230                keys: "-",
231                description: "Test damage (25 HP) — dev only",
232            },
233            KeyBinding {
234                keys: ";",
235                description: "Toggle harvest / use radius overlay",
236            },
237        ],
238    },
239];
240
241/// Plain-text reference for `flatland3 keys` and similar CLIs.
242pub fn format_keybindings_plain() -> String {
243    let mut out = String::from("Flatland3 play — keybindings\n\n");
244    for cat in CATEGORIES {
245        out.push_str(cat.name);
246        out.push_str("\n");
247        for b in cat.bindings {
248            out.push_str(&format!("  {:<16} {}\n", b.keys, b.description));
249        }
250        out.push('\n');
251    }
252    out.push_str(&format_map_legend_plain());
253    out.push_str("Wildlife: rabbits north meadow (~95,195); wolves bog (~118,122).\n");
254    out
255}