ScummVM API documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
keymapper_tables.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #include "backends/keymapper/action.h"
23 #include "backends/keymapper/keymapper.h"
25 
26 #include "engines/wintermute/base/base_game_custom_actions.h"
27 
28 #include "common/translation.h"
29 
30 namespace Wintermute {
31 
32 inline Common::KeymapArray getWintermuteKeymaps(const char *target, const Common::String &gameId, const char *gameDescr) {
33 
34  using namespace Common;
35 
36  Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "wintermute", "Wintermute engine");
37  Keymap *gameKeyMap = new Keymap(Keymap::kKeymapTypeGame, gameId, gameDescr);
38  Keymap *extraKeyMap = new Keymap(Keymap::kKeymapTypeGame, "extras", "ScummVM extra actions");
39 
40  Action *act;
41 
42  act = new Action(kStandardActionLeftClick, _("Left Click"));
43  act->setLeftClickEvent();
44  act->addDefaultInputMapping("MOUSE_LEFT"); // original mouse
45  act->addDefaultInputMapping("JOY_A"); // extra joy
46  engineKeyMap->addAction(act);
47 
48  act = new Action(kStandardActionRightClick, _("Right Click"));
49  act->setRightClickEvent();
50  act->addDefaultInputMapping("MOUSE_RIGHT"); // original mouse
51  act->addDefaultInputMapping("JOY_B"); // extra joy
52  engineKeyMap->addAction(act);
53 
54  act = new Action("RETURN", _("Confirm"));
55  act->setKeyEvent(KeyState(KEYCODE_RETURN, ASCII_RETURN));
56  act->addDefaultInputMapping("RETURN"); // original keyboard
57  //TODO: extra joy control, e.g. "JOY_R+JOY_X"
58  engineKeyMap->addAction(act);
59 
60  act = new Action("ESCAPE", _("Escape"));
61  act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
62  act->addDefaultInputMapping("ESCAPE"); // original keyboard
63  act->addDefaultInputMapping("JOY_X"); // extra joy
64  engineKeyMap->addAction(act);
65 
66  Common::KeymapArray result = Keymap::arrayOf(engineKeyMap);
67  if (gameId == "8squares" ||
68  gameId == "actualdest" ||
69  gameId == "artofmurder1" ||
70  gameId == "agustin" ||
71  gameId == "barrowhilldp" ||
72  gameId == "bickadoodle" ||
73  gameId == "bthreshold" ||
74  gameId == "carolreed6" ||
75  gameId == "carolreed7" ||
76  gameId == "carolreed8" ||
77  gameId == "colorsoncanvas" ||
78  gameId == "conspiracao" ||
79  gameId == "corrosion" ||
80  gameId == "deadcity" ||
81  gameId == "darkfallls" ||
82  gameId == "drbohus" ||
83  gameId == "dreaming" ||
84  gameId == "dreamscape" ||
85  gameId == "driller" ||
86  gameId == "everydaygray" ||
87  gameId == "findinghope" ||
88  gameId == "four" ||
89  gameId == "framed" ||
90  gameId == "hamlet" ||
91  gameId == "hor" ||
92  gameId == "idiotstale" ||
93  gameId == "imustkill" ||
94  gameId == "juliauntold" ||
95  gameId == "lifein3minutes" ||
96  gameId == "lonelyrobot" ||
97  gameId == "machumayu" ||
98  gameId == "mirage" ||
99  gameId == "miskatonic1" ||
100  gameId == "nighttrain" ||
101  gameId == "projectdoom" ||
102  gameId == "rosemary" ||
103  gameId == "satanandsons" ||
104  gameId == "sofiasdebt" ||
105  gameId == "spaceinvaders" ||
106  gameId == "spacemadness" ||
107  gameId == "strangechange" ||
108  gameId == "tanya1" ||
109  gameId == "tanya2" ||
110  gameId == "theancientmark1" ||
111  gameId == "thebox" ||
112  gameId == "thekite" ||
113  gameId == "tradestory" ||
114  gameId == "war" ||
115  gameId == "wmedemo"
116  ) {
117  /* no game-specific keymap */
118  } else if (gameId == "dfafadventure" ||
119  gameId == "dreamcat" ||
120  gameId == "openquest"
121  ) {
122  act = new Action("LOOK", _("Look at"));
123  act->setKeyEvent(KeyState(KEYCODE_l, 'l'));
124  act->addDefaultInputMapping("l"); // original keyboard
125  act->addDefaultInputMapping("JOY_UP"); // extra joy
126  gameKeyMap->addAction(act);
127 
128  act = new Action("TALK", _("Talk to"));
129  act->setKeyEvent(KeyState(KEYCODE_t, 't'));
130  act->addDefaultInputMapping("t"); // original keyboard
131  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
132  gameKeyMap->addAction(act);
133 
134  act = new Action("PICK", _("Pick up"));
135  act->setKeyEvent(KeyState(KEYCODE_p, 'p'));
136  act->addDefaultInputMapping("p"); // original keyboard
137  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
138  gameKeyMap->addAction(act);
139 
140  act = new Action("USE", _("Use"));
141  act->setKeyEvent(KeyState(KEYCODE_u, 'u'));
142  act->addDefaultInputMapping("u"); // original keyboard
143  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
144  gameKeyMap->addAction(act);
145  } else if (gameId == "basisoctavus" ||
146  gameId == "lovmamuta" ||
147  gameId == "wmedemo3d"
148  ) {
149  act = new Action(kStandardActionMoveUp, _("Move Forward"));
150  act->setKeyEvent(KEYCODE_UP);
151  act->addDefaultInputMapping("UP"); // original keyboard
152  act->addDefaultInputMapping("JOY_UP"); // extra joy
153  gameKeyMap->addAction(act);
154 
155  act = new Action(kStandardActionMoveDown, _("Move Backwards"));
156  act->setKeyEvent(KEYCODE_DOWN);
157  act->addDefaultInputMapping("DOWN"); // original keyboard
158  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
159  gameKeyMap->addAction(act);
160 
161  act = new Action(kStandardActionMoveLeft, _("Turn left"));
162  act->setKeyEvent(KEYCODE_LEFT);
163  act->addDefaultInputMapping("LEFT"); // original keyboard
164  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
165  gameKeyMap->addAction(act);
166 
167  act = new Action(kStandardActionMoveRight, _("Turn right"));
168  act->setKeyEvent(KEYCODE_RIGHT);
169  act->addDefaultInputMapping("RIGHT"); // original keyboard
170  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
171  gameKeyMap->addAction(act);
172 
173  // I18N: Debug feature to draw lines of scene geometry: walls, walking areas, etc
174  act = new Action("DBGSCN", _("Show scene geometry"));
175  act->setKeyEvent(KEYCODE_F1);
176  act->addDefaultInputMapping("F1"); // original keyboard
177  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
178  act->addDefaultInputMapping("JOY_Y"); // extra joy
179  gameKeyMap->addAction(act);
180  } else if (gameId == "5ld" ||
181  gameId == "projectjoe"
182  ) {
183  act = new Action("PAGEUP", _("Previous page"));
184  act->setKeyEvent(KEYCODE_PAGEUP);
185  act->addDefaultInputMapping("PAGEUP"); // original keyboard
186  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
187  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
188  gameKeyMap->addAction(act);
189 
190  act = new Action("PAGEDN", _("Next page"));
191  act->setKeyEvent(KEYCODE_PAGEDOWN);
192  act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
193  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
194  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
195  gameKeyMap->addAction(act);
196  } else if (gameId == "5ma" ||
197  gameId == "dirtysplit"
198  ) {
199  act = new Action("PAGEUP", _("Previous page"));
200  act->setKeyEvent(KEYCODE_PAGEUP);
201  act->addDefaultInputMapping("PAGEUP"); // original keyboard
202  act->addDefaultInputMapping("LEFT"); // original keyboard for 5ma & dirtysplit
203  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
204  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
205  gameKeyMap->addAction(act);
206 
207  act = new Action("PAGEDN", _("Next page"));
208  act->setKeyEvent(KEYCODE_PAGEDOWN);
209  act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
210  act->addDefaultInputMapping("RIGHT"); // original keyboard for 5ma & dirtysplit
211  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
212  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
213  gameKeyMap->addAction(act);
214  } else if (gameId == "chivalry" ||
215  gameId == "paintaria" ||
216  gameId == "pigeons" ||
217  gameId == "rhiannon" ||
218  gameId == "shinestar"
219  ) {
220  act = new Action(kStandardActionSkip, _("Skip"));
221  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
222  act->addDefaultInputMapping("SPACE"); // original keyboard
223  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
224  act->addDefaultInputMapping("JOY_Y"); // extra joy
225  gameKeyMap->addAction(act);
226  } else if (gameId == "drdoylemotch" ||
227  gameId == "carolreed9" ||
228  gameId == "carolreed10" ||
229  gameId == "carolreed11" ||
230  gameId == "carolreed12" ||
231  gameId == "carolreed13" ||
232  gameId == "carolreed14" ||
233  gameId == "carolreed15" ||
234  gameId == "carolreed16" ||
235  gameId == "kulivocko" ||
236  gameId == "sunrise" ||
237  gameId == "rebeccacarlson1"
238  ) {
239  act = new Action("HINT", _("Show hints"));
240  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
241  act->addDefaultInputMapping("SPACE"); // original keyboard
242  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
243  act->addDefaultInputMapping("JOY_Y"); // extra joy
244  gameKeyMap->addAction(act);
245  } else if (gameId == "goldencalf" ||
246  gameId == "msos" ||
247  gameId == "one"
248  ) {
249  act = new Action("INV", _("Show inventory"));
250  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
251  act->addDefaultInputMapping("SPACE"); // original keyboard
252  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
253  act->addDefaultInputMapping("JOY_Y"); // extra joy
254  gameKeyMap->addAction(act);
255  } else if (gameId == "bookofgron") {
256  act = new Action(kStandardActionMiddleClick, _("Middle Click"));
257  act->setMiddleClickEvent();
258  act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
259  act->addDefaultInputMapping("JOY_Y"); // extra joy
260  gameKeyMap->addAction(act);
261  } else if (gameId == "qajarycat") {
262  act = new Action("HINT", _("Show hints"));
263  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
264  act->addDefaultInputMapping("SPACE"); // original keyboard
265  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
266  act->addDefaultInputMapping("JOY_Y"); // extra joy
267  gameKeyMap->addAction(act);
268 
269  act = new Action("GUIA", _("GUI variant A"));
270  act->setKeyEvent(KEYCODE_F10);
271  act->addDefaultInputMapping("F10"); // original keyboard
272  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
273  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
274  gameKeyMap->addAction(act);
275 
276  act = new Action("GUIB", _("GUI variant B"));
277  act->setKeyEvent(KEYCODE_F11);
278  act->addDefaultInputMapping("F11"); // original keyboard
279  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
280  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
281  gameKeyMap->addAction(act);
282 
283  act = new Action("PHONEX", _("Phone cancel button"));
284  act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
285  act->addDefaultInputMapping("BACKSPACE"); // original keyboard
286  gameKeyMap->addAction(act);
287 
288  act = new Action("PHONEU", _("Phone up button"));
289  act->setKeyEvent(KEYCODE_UP);
290  act->addDefaultInputMapping("UP"); // original keyboard
291  act->addDefaultInputMapping("JOY_UP"); // extra joy
292  gameKeyMap->addAction(act);
293 
294  act = new Action("PHONED", _("Phone down button"));
295  act->setKeyEvent(KEYCODE_DOWN);
296  act->addDefaultInputMapping("DOWN"); // original keyboard
297  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
298  gameKeyMap->addAction(act);
299 
300  act = new Action(kStandardActionMiddleClick, _("Middle Click"));
301  act->setMiddleClickEvent();
302  act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
303  gameKeyMap->addAction(act);
304 
305  act = new Action(kStandardActionEE, _("???"));
306  act->setKeyEvent(KEYCODE_HOME);
307  act->addDefaultInputMapping("HOME"); // original keyboard
308  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
309  gameKeyMap->addAction(act);
310  } else if (gameId == "forgottensound1" ||
311  gameId == "forgottensound2"
312  ) {
313  act = new Action("HINT", _("Show hints"));
314  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
315  act->addDefaultInputMapping("SPACE"); // original keyboard
316  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
317  act->addDefaultInputMapping("JOY_Y"); // extra joy
318  gameKeyMap->addAction(act);
319 
320  act = new Action(kStandardActionMoveLeft, _("Left"));
321  act->setKeyEvent(KEYCODE_LEFT);
322  act->addDefaultInputMapping("LEFT"); // original keyboard
323  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
324  gameKeyMap->addAction(act);
325 
326  act = new Action(kStandardActionMoveRight, _("Right"));
327  act->setKeyEvent(KEYCODE_RIGHT);
328  act->addDefaultInputMapping("RIGHT"); // original keyboard
329  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
330  gameKeyMap->addAction(act);
331 
332  act = new Action("GUIA", _("GUI variant A"));
333  act->setKeyEvent(KEYCODE_F10);
334  act->addDefaultInputMapping("F10"); // original keyboard
335  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
336  act->addDefaultInputMapping("JOY_UP"); // extra joy
337  gameKeyMap->addAction(act);
338 
339  act = new Action("GUIB", _("GUI variant B"));
340  act->setKeyEvent(KEYCODE_F11);
341  act->addDefaultInputMapping("F11"); // original keyboard
342  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
343  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
344  gameKeyMap->addAction(act);
345 
346  act = new Action(kStandardActionEE, _("???"));
347  act->setKeyEvent(KEYCODE_HOME);
348  act->addDefaultInputMapping("HOME"); // original keyboard
349  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
350  gameKeyMap->addAction(act);
351  } else if (gameId == "tehran1933") {
352  act = new Action("HINT", _("Show hints"));
353  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
354  act->addDefaultInputMapping("SPACE"); // original keyboard
355  act->addDefaultInputMapping("JOY_Y"); // extra joy
356  gameKeyMap->addAction(act);
357 
358  // I18N: Some items are scripted to have alternative "Use" action, when MiddleClick is used
359  // It may result in actor saying different text or item being decomposed to it's parts
360  act = new Action("ALTUSE", _("Alternative action"));
361  act->setMiddleClickEvent();
362  act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
363  act->addDefaultInputMapping("BACKSPACE"); // extra keyboard
364  act->addDefaultInputMapping("JOY_Y"); // extra joy
365  gameKeyMap->addAction(act);
366 
367  act = new Action("GUIA", _("GUI variant A"));
368  act->setKeyEvent(KEYCODE_F10);
369  act->addDefaultInputMapping("F10"); // original keyboard
370  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
371  act->addDefaultInputMapping("JOY_UP"); // extra joy
372  gameKeyMap->addAction(act);
373 
374  act = new Action("GUIB", _("GUI variant B"));
375  act->setKeyEvent(KEYCODE_F11);
376  act->addDefaultInputMapping("F11"); // original keyboard
377  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
378  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
379  gameKeyMap->addAction(act);
380 
381  act = new Action(kStandardActionEE, _("???"));
382  act->setKeyEvent(KEYCODE_HOME);
383  act->addDefaultInputMapping("HOME"); // original keyboard
384  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
385  gameKeyMap->addAction(act);
386  } else if (gameId == "darksummer" ||
387  gameId == "tehran2016"
388  ) {
389  act = new Action("HINT", _("Show hints"));
390  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
391  act->addDefaultInputMapping("SPACE"); // original keyboard
392  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
393  act->addDefaultInputMapping("JOY_Y"); // extra joy
394  gameKeyMap->addAction(act);
395 
396  act = new Action("INV", _("Show inventory"));
397  act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
398  act->addDefaultInputMapping("i"); // original keyboard
399  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
400  gameKeyMap->addAction(act);
401 
402  act = new Action("GUIA", _("GUI variant A"));
403  act->setKeyEvent(KEYCODE_F10);
404  act->addDefaultInputMapping("F10"); // original keyboard
405  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
406  gameKeyMap->addAction(act);
407 
408  act = new Action("GUIB", _("GUI variant B"));
409  act->setKeyEvent(KEYCODE_F11);
410  act->addDefaultInputMapping("F11"); // original keyboard
411  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
412  gameKeyMap->addAction(act);
413 
414  act = new Action("PHONEX", _("Phone cancel button"));
415  act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
416  act->addDefaultInputMapping("BACKSPACE"); // original keyboard
417  gameKeyMap->addAction(act);
418 
419  act = new Action("PHONEU", _("Phone up button"));
420  act->setKeyEvent(KEYCODE_UP);
421  act->addDefaultInputMapping("UP"); // original keyboard
422  act->addDefaultInputMapping("JOY_UP"); // extra joy
423  gameKeyMap->addAction(act);
424 
425  act = new Action("PHONED", _("Phone down button"));
426  act->setKeyEvent(KEYCODE_DOWN);
427  act->addDefaultInputMapping("DOWN"); // original keyboard
428  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
429  gameKeyMap->addAction(act);
430 
431  act = new Action("PHONE0", _("Phone 0 button"));
432  act->setKeyEvent(KeyState(KEYCODE_0, '0'));
433  act->addDefaultInputMapping("0"); // original keyboard
434  gameKeyMap->addAction(act);
435 
436  act = new Action("PHONE1", _("Phone 1 button"));
437  act->setKeyEvent(KeyState(KEYCODE_1, '1'));
438  act->addDefaultInputMapping("1"); // original keyboard
439  gameKeyMap->addAction(act);
440 
441  act = new Action("PHONE2", _("Phone 2 button"));
442  act->setKeyEvent(KeyState(KEYCODE_2, '2'));
443  act->addDefaultInputMapping("2"); // original keyboard
444  gameKeyMap->addAction(act);
445 
446  act = new Action("PHONE3", _("Phone 3 button"));
447  act->setKeyEvent(KeyState(KEYCODE_3, '3'));
448  act->addDefaultInputMapping("3"); // original keyboard
449  gameKeyMap->addAction(act);
450 
451  act = new Action("PHONE4", _("Phone 4 button"));
452  act->setKeyEvent(KeyState(KEYCODE_4, '4'));
453  act->addDefaultInputMapping("4"); // original keyboard
454  gameKeyMap->addAction(act);
455 
456  act = new Action("PHONE5", _("Phone 5 button"));
457  act->setKeyEvent(KeyState(KEYCODE_5, '5'));
458  act->addDefaultInputMapping("5"); // original keyboard
459  gameKeyMap->addAction(act);
460 
461  act = new Action("PHONE6", _("Phone 6 button"));
462  act->setKeyEvent(KeyState(KEYCODE_6, '6'));
463  act->addDefaultInputMapping("6"); // original keyboard
464  gameKeyMap->addAction(act);
465 
466  act = new Action("PHONE7", _("Phone 7 button"));
467  act->setKeyEvent(KeyState(KEYCODE_7, '7'));
468  act->addDefaultInputMapping("7"); // original keyboard
469  gameKeyMap->addAction(act);
470 
471  act = new Action("PHONE8", _("Phone 8 button"));
472  act->setKeyEvent(KeyState(KEYCODE_8, '8'));
473  act->addDefaultInputMapping("8"); // original keyboard
474  gameKeyMap->addAction(act);
475 
476  act = new Action("PHONE9", _("Phone 9 button"));
477  act->setKeyEvent(KeyState(KEYCODE_9, '9'));
478  act->addDefaultInputMapping("9"); // original keyboard
479  gameKeyMap->addAction(act);
480 
481  act = new Action("PHONEA", _("Phone * button"));
482  act->setKeyEvent(KeyState(KEYCODE_ASTERISK, '*'));
483  act->addDefaultInputMapping("ASTERISK"); // original keyboard
484  gameKeyMap->addAction(act);
485 
486  act = new Action("PHONEH", _("Phone # button"));
487  act->setKeyEvent(KeyState(KEYCODE_HASH, '#'));
488  act->addDefaultInputMapping("HASH"); // original keyboard
489  gameKeyMap->addAction(act);
490 
491  act = new Action(kStandardActionEE, _("???"));
492  act->setKeyEvent(KEYCODE_HOME);
493  act->addDefaultInputMapping("HOME"); // original keyboard
494  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
495  gameKeyMap->addAction(act);
496  } else if (gameId == "alimardan1" ||
497  gameId == "devilincapital"
498  ) {
499  act = new Action("HINT", _("Show hints"));
500  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
501  act->addDefaultInputMapping("SPACE"); // original keyboard
502  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
503  act->addDefaultInputMapping("JOY_Y"); // extra joy
504  gameKeyMap->addAction(act);
505 
506  act = new Action("GUIA", _("GUI variant A"));
507  act->setKeyEvent(KEYCODE_F10);
508  act->addDefaultInputMapping("F10"); // original keyboard
509  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
510  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
511  gameKeyMap->addAction(act);
512 
513  act = new Action("GUIB", _("GUI variant B"));
514  act->setKeyEvent(KEYCODE_F11);
515  act->addDefaultInputMapping("F11"); // original keyboard
516  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
517  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
518  gameKeyMap->addAction(act);
519 
520  act = new Action(kStandardActionEE, _("???"));
521  act->setKeyEvent(KEYCODE_HOME);
522  act->addDefaultInputMapping("HOME"); // original keyboard
523  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
524  gameKeyMap->addAction(act);
525  } else if (gameId == "alimardan2") {
526  act = new Action("HINT", _("Show hints"));
527  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
528  act->addDefaultInputMapping("SPACE"); // original keyboard
529  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
530  act->addDefaultInputMapping("JOY_Y"); // extra joy
531  gameKeyMap->addAction(act);
532 
533  act = new Action("GUIA", _("GUI variant A"));
534  act->setKeyEvent(KEYCODE_F10);
535  act->addDefaultInputMapping("F10"); // original keyboard
536  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
537  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
538  gameKeyMap->addAction(act);
539 
540  act = new Action("GUIB", _("GUI variant B"));
541  act->setKeyEvent(KEYCODE_F11);
542  act->addDefaultInputMapping("F11"); // original keyboard
543  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
544  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
545  gameKeyMap->addAction(act);
546 
547  act = new Action("PHONEX", _("Phone cancel button"));
548  act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
549  act->addDefaultInputMapping("BACKSPACE"); // original keyboard
550  gameKeyMap->addAction(act);
551 
552  act = new Action("PHONEU", _("Phone up button"));
553  act->setKeyEvent(KEYCODE_UP);
554  act->addDefaultInputMapping("UP"); // original keyboard
555  act->addDefaultInputMapping("JOY_UP"); // extra joy
556  gameKeyMap->addAction(act);
557 
558  act = new Action("PHONED", _("Phone down button"));
559  act->setKeyEvent(KEYCODE_DOWN);
560  act->addDefaultInputMapping("DOWN"); // original keyboard
561  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
562  gameKeyMap->addAction(act);
563 
564  act = new Action("PHONE0", _("Phone 0 button"));
565  act->setKeyEvent(KeyState(KEYCODE_0, '0'));
566  act->addDefaultInputMapping("0"); // original keyboard
567  gameKeyMap->addAction(act);
568 
569  act = new Action("PHONE1", _("Phone 1 button"));
570  act->setKeyEvent(KeyState(KEYCODE_1, '1'));
571  act->addDefaultInputMapping("1"); // original keyboard
572  gameKeyMap->addAction(act);
573 
574  act = new Action("PHONE2", _("Phone 2 button"));
575  act->setKeyEvent(KeyState(KEYCODE_2, '2'));
576  act->addDefaultInputMapping("2"); // original keyboard
577  gameKeyMap->addAction(act);
578 
579  act = new Action("PHONE3", _("Phone 3 button"));
580  act->setKeyEvent(KeyState(KEYCODE_3, '3'));
581  act->addDefaultInputMapping("3"); // original keyboard
582  gameKeyMap->addAction(act);
583 
584  act = new Action("PHONE4", _("Phone 4 button"));
585  act->setKeyEvent(KeyState(KEYCODE_4, '4'));
586  act->addDefaultInputMapping("4"); // original keyboard
587  gameKeyMap->addAction(act);
588 
589  act = new Action("PHONE5", _("Phone 5 button"));
590  act->setKeyEvent(KeyState(KEYCODE_5, '5'));
591  act->addDefaultInputMapping("5"); // original keyboard
592  gameKeyMap->addAction(act);
593 
594  act = new Action("PHONE6", _("Phone 6 button"));
595  act->setKeyEvent(KeyState(KEYCODE_6, '6'));
596  act->addDefaultInputMapping("6"); // original keyboard
597  gameKeyMap->addAction(act);
598 
599  act = new Action("PHONE7", _("Phone 7 button"));
600  act->setKeyEvent(KeyState(KEYCODE_7, '7'));
601  act->addDefaultInputMapping("7"); // original keyboard
602  gameKeyMap->addAction(act);
603 
604  act = new Action("PHONE8", _("Phone 8 button"));
605  act->setKeyEvent(KeyState(KEYCODE_8, '8'));
606  act->addDefaultInputMapping("8"); // original keyboard
607  gameKeyMap->addAction(act);
608 
609  act = new Action("PHONE9", _("Phone 9 button"));
610  act->setKeyEvent(KeyState(KEYCODE_9, '9'));
611  act->addDefaultInputMapping("9"); // original keyboard
612  gameKeyMap->addAction(act);
613 
614  act = new Action("PHONEA", _("Phone * button"));
615  act->setKeyEvent(KeyState(KEYCODE_ASTERISK, '*'));
616  act->addDefaultInputMapping("ASTERISK"); // original keyboard
617  gameKeyMap->addAction(act);
618 
619  act = new Action("PHONEH", _("Phone # button"));
620  act->setKeyEvent(KeyState(KEYCODE_HASH, '#'));
621  act->addDefaultInputMapping("HASH"); // original keyboard
622  gameKeyMap->addAction(act);
623 
624  act = new Action(kStandardActionEE, _("???"));
625  act->setKeyEvent(KEYCODE_HOME);
626  act->addDefaultInputMapping("HOME"); // original keyboard
627  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
628  gameKeyMap->addAction(act);
629  } else if (gameId == "alavi") {
630  act = new Action("PAGEUP", _("Previous page"));
631  act->setKeyEvent(KEYCODE_PAGEUP);
632  act->addDefaultInputMapping("PAGEUP"); // original keyboard
633  act->addDefaultInputMapping("LEFT"); // original keyboard for 5ma & dirtysplit
634  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
635  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
636  gameKeyMap->addAction(act);
637 
638  act = new Action("PAGEDN", _("Next page"));
639  act->setKeyEvent(KEYCODE_PAGEDOWN);
640  act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
641  act->addDefaultInputMapping("RIGHT"); // original keyboard for 5ma & dirtysplit
642  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
643  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
644  gameKeyMap->addAction(act);
645 
646  act = new Action("SCRS", _("Save screenshot"));
647  act->setKeyEvent(KEYCODE_F6);
648  act->addDefaultInputMapping("F6"); // original keyboard
649  gameKeyMap->addAction(act);
650  } else if (gameId == "alphapolaris") {
651  act = new Action("HINT", _("Show hints"));
652  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
653  act->addDefaultInputMapping("SPACE"); // original keyboard
654  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
655  act->addDefaultInputMapping("JOY_Y"); // extra joy
656  gameKeyMap->addAction(act);
657 
658  act = new Action("INV", _("Show inventory"));
659  act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
660  act->addDefaultInputMapping("i"); // original keyboard
661  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
662  gameKeyMap->addAction(act);
663 
664  act = new Action("HELP", _("Show help"));
665  act->setKeyEvent(KEYCODE_F1);
666  act->addDefaultInputMapping("F1"); // original keyboard
667  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
668  gameKeyMap->addAction(act);
669 
670  act = new Action("SCRLUP", _("Scroll up"));
671  act->setMouseWheelUpEvent();
672  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
673  act->addDefaultInputMapping("PAGEUP"); // extra keyboard
674  act->addDefaultInputMapping("JOY_UP"); // extra joy
675  gameKeyMap->addAction(act);
676 
677  act = new Action("SCRLDN", _("Scroll down"));
678  act->setMouseWheelDownEvent();
679  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
680  act->addDefaultInputMapping("PAGEDOWN"); // extra keyboard
681  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
682  gameKeyMap->addAction(act);
683 
684  // I18N: Debug feature to draw lines of scene geometry: walls, walking areas, etc
685  act = new Action("DBGSCN", _("Show scene geometry"));
686  act->setKeyEvent(KeyState(KEYCODE_F2, 0, KBD_CTRL));
687  act->addDefaultInputMapping("C+F2"); // original keyboard
688  gameKeyMap->addAction(act);
689 
690  act = new Action("SHADOW", _("Change shadow type"));
691  act->setKeyEvent(KeyState(KEYCODE_F3, 0, KBD_CTRL));
692  act->addDefaultInputMapping("C+F3"); // original keyboard
693  gameKeyMap->addAction(act);
694 
695  act = new Action("SCRS", _("Save screenshot"));
696  act->setKeyEvent(KeyState(KEYCODE_F5, 0, KBD_CTRL));
697  // act->addDefaultInputMapping("C+F5"); // original keyboard (disabled due to conflict with GMM)
698  gameKeyMap->addAction(act);
699 
700  act = new Action("VOLMAX", _("Volume max"));
701  act->setKeyEvent(KeyState(KEYCODE_F6, 0, KBD_CTRL));
702  act->addDefaultInputMapping("C+F6"); // original keyboard
703  gameKeyMap->addAction(act);
704 
705  // I18N: Displays a debug interface with a CLI for various features
706  act = new Action("DBGCLI", _("Show debug parser"));
707  act->setKeyEvent(KeyState(KEYCODE_F7, 0, KBD_CTRL));
708  act->addDefaultInputMapping("C+F7"); // original keyboard
709  act->addDefaultInputMapping("C+F10"); // original keyboard
710  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
711  gameKeyMap->addAction(act);
712 
713  // I18N: Displays a debug text message
714  act = new Action("DBGTXT", _("Debug print"));
715  act->setKeyEvent(KeyState(KEYCODE_F8, 0, KBD_CTRL));
716  act->addDefaultInputMapping("C+F8"); // original keyboard
717  gameKeyMap->addAction(act);
718 
719  // I18N: Exits the game
720  act = new Action("EXIT", _("Exit"));
721  act->setKeyEvent(KeyState(KEYCODE_F9, 0, KBD_CTRL));
722  act->addDefaultInputMapping("C+F9"); // original keyboard
723  gameKeyMap->addAction(act);
724 
725  // I18N: Displays a debug interface that changes light settings
726  act = new Action("LIGHT", _("Light helper window"));
727  act->setKeyEvent(KeyState(KEYCODE_F11, 0, KBD_CTRL));
728  act->addDefaultInputMapping("C+F11"); // original keyboard
729  gameKeyMap->addAction(act);
730 
731  act = new Action(kStandardActionMoveUp, _("Move Forward"));
732  act->setKeyEvent(KEYCODE_UP);
733  act->addDefaultInputMapping("UP"); // original keyboard
734  gameKeyMap->addAction(act);
735 
736  act = new Action(kStandardActionMoveDown, _("Move Backwards"));
737  act->setKeyEvent(KEYCODE_DOWN);
738  act->addDefaultInputMapping("DOWN"); // original keyboard
739  gameKeyMap->addAction(act);
740 
741  act = new Action(kStandardActionMoveLeft, _("Turn left"));
742  act->setKeyEvent(KEYCODE_LEFT);
743  act->addDefaultInputMapping("LEFT"); // original keyboard
744  gameKeyMap->addAction(act);
745 
746  act = new Action(kStandardActionMoveRight, _("Turn right"));
747  act->setKeyEvent(KEYCODE_RIGHT);
748  act->addDefaultInputMapping("RIGHT"); // original keyboard
749  gameKeyMap->addAction(act);
750 
751  act = new Action("FASTU", _("Run forward"));
752  act->setKeyEvent(KeyState(KEYCODE_UP, 0, KBD_SHIFT));
753  act->addDefaultInputMapping("S+UP"); // original keyboard
754  gameKeyMap->addAction(act);
755 
756  act = new Action("FASTD", _("Run backward"));
757  act->setKeyEvent(KeyState(KEYCODE_DOWN, 0, KBD_SHIFT));
758  act->addDefaultInputMapping("S+DOWN"); // original keyboard
759  gameKeyMap->addAction(act);
760 
761  act = new Action("FASTL", _("Turn left fast"));
762  act->setKeyEvent(KeyState(KEYCODE_LEFT, 0, KBD_SHIFT));
763  act->addDefaultInputMapping("S+LEFT"); // original keyboard
764  gameKeyMap->addAction(act);
765 
766  act = new Action("FASTR", _("Turn right fast"));
767  act->setKeyEvent(KeyState(KEYCODE_RIGHT, 0, KBD_SHIFT));
768  act->addDefaultInputMapping("S+RIGHT"); // original keyboard
769  gameKeyMap->addAction(act);
770  } else if (gameId == "apeiron") {
771  // I18N: Displays a blueprint with robot parts
772  act = new Action("BLUE", _("Show blueprint"));
773  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
774  act->addDefaultInputMapping("SPACE"); // original keyboard
775  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
776  act->addDefaultInputMapping("JOY_Y"); // extra joy
777  gameKeyMap->addAction(act);
778 
779  act = new Action(kStandardActionEE, _("???"));
780  act->setKeyEvent(KeyState(KEYCODE_n, 'n'));
781  act->addDefaultInputMapping("n"); // original keyboard
782  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
783  gameKeyMap->addAction(act);
784  } else if (gameId == "awakening") {
785  act = new Action("HINT", _("Show hints"));
786  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
787  act->addDefaultInputMapping("SPACE"); // original keyboard
788  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
789  act->addDefaultInputMapping("JOY_Y"); // extra joy
790  gameKeyMap->addAction(act);
791 
792  act = new Action("ACTNXT", _("Next action"));
793  act->setMouseWheelDownEvent();
794  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
795  act->addDefaultInputMapping("PAGEDOWN"); // extra keyboard
796  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
797  gameKeyMap->addAction(act);
798 
799  act = new Action("ACTPRV", _("Previous action"));
800  act->setMouseWheelUpEvent();
801  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
802  act->addDefaultInputMapping("PAGEUP"); // extra keyboard
803  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
804  gameKeyMap->addAction(act);
805 
806  act = new Action(kStandardActionEE, _("???"));
807  act->setKeyEvent(KEYCODE_END);
808  act->addDefaultInputMapping("END"); // original keyboard
809  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
810  gameKeyMap->addAction(act);
811  } else if (gameId == "carolreed4") {
812  act = new Action("HINT", _("Show hints"));
813  act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
814  act->addDefaultInputMapping("TAB"); // original keyboard
815  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
816  act->addDefaultInputMapping("JOY_Y"); // extra joy
817  gameKeyMap->addAction(act);
818 
819  act = new Action("VOLMAX", _("Volume max"));
820  act->setMouseWheelUpEvent();
821  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
822  act->addDefaultInputMapping("PAGEUP"); // extra keyboard
823  //TODO: extra joy control, e.g. "JOY_R+JOY_UP"
824  gameKeyMap->addAction(act);
825 
826  act = new Action("VOLOFF", _("Volume off"));
827  act->setMouseWheelDownEvent();
828  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
829  act->addDefaultInputMapping("PAGEDOWN"); // extra keyboard
830  //TODO: extra joy control, e.g. "JOY_R+JOY_DOWN"
831  gameKeyMap->addAction(act);
832  } else if (gameId == "carolreed5") {
833  act = new Action("HINT", _("Show hints"));
834  act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
835  act->addDefaultInputMapping("TAB"); // original keyboard
836  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
837  act->addDefaultInputMapping("JOY_Y"); // extra joy
838  gameKeyMap->addAction(act);
839  } else if (gameId == "erinmyers") {
840  act = new Action("GUIB", _("Change font size"));
841  act->setKeyEvent(KEYCODE_END);
842  act->addDefaultInputMapping("END"); // original keyboard
843  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
844  gameKeyMap->addAction(act);
845  } else if (gameId == "escapemansion") {
846  act = new Action(kStandardActionEE, _("???"));
847  act->setKeyEvent(KEYCODE_F1);
848  act->addDefaultInputMapping("F1"); // original keyboard
849  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
850  gameKeyMap->addAction(act);
851 
852  // I18N: Displays a debug text message
853  act = new Action("DBGTXT", _("Debug print"));
854  act->setKeyEvent(KEYCODE_F2);
855  act->addDefaultInputMapping("F2"); // original keyboard
856  gameKeyMap->addAction(act);
857  } else if (gameId == "facenoir") {
858  act = new Action("HINT", _("Show hints"));
859  act->setKeyEvent(KEYCODE_F1);
860  act->addDefaultInputMapping("F1"); // original keyboard
861  act->addDefaultInputMapping("JOY_Y"); // extra joy
862  gameKeyMap->addAction(act);
863 
864  act = new Action("INV", _("Show inventory"));
865  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
866  act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
867  act->addDefaultInputMapping("SPACE"); // original keyboard
868  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
869  gameKeyMap->addAction(act);
870 
871  act = new Action("SCRLUP", _("Scroll up"));
872  act->setMouseWheelUpEvent();
873  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
874  act->addDefaultInputMapping("UP"); // extra keyboard
875  act->addDefaultInputMapping("JOY_UP"); // extra joy
876  gameKeyMap->addAction(act);
877 
878  act = new Action("SCRLDN", _("Scroll down"));
879  act->setMouseWheelDownEvent();
880  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
881  act->addDefaultInputMapping("DOWN"); // extra keyboard
882  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
883  gameKeyMap->addAction(act);
884  } else if (gameId == "foxtail") {
885  act = new Action("HINT", _("Show hints"));
886  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
887  act->addDefaultInputMapping("SPACE"); // original keyboard
888  act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
889  act->addDefaultInputMapping("JOY_Y"); // extra joy
890  gameKeyMap->addAction(act);
891 
892  act = new Action("SCRLUP", _("Scroll up"));
893  act->setMouseWheelUpEvent();
894  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
895  act->addDefaultInputMapping("UP"); // original keyboard
896  act->addDefaultInputMapping("JOY_UP"); // extra joy
897  gameKeyMap->addAction(act);
898 
899  act = new Action("SCRLDN", _("Scroll down"));
900  act->setMouseWheelDownEvent();
901  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
902  act->addDefaultInputMapping("DOWN"); // original keyboard
903  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
904  gameKeyMap->addAction(act);
905 
906  act = new Action("PAGEUP", _("Previous page"));
907  act->setKeyEvent(KEYCODE_PAGEUP);
908  act->addDefaultInputMapping("LEFT"); // original keyboard
909  act->addDefaultInputMapping("PAGEUP"); // original keyboard
910  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
911  gameKeyMap->addAction(act);
912 
913  act = new Action("PAGEDN", _("Next page"));
914  act->setKeyEvent(KEYCODE_PAGEDOWN);
915  act->addDefaultInputMapping("RIGHT"); // original keyboard
916  act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
917  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
918  gameKeyMap->addAction(act);
919 
920  act = new Action(kStandardActionSave, _("Save game"));
921  act->setKeyEvent(KEYCODE_F2);
922  act->addDefaultInputMapping("F2"); // original keyboard
923  gameKeyMap->addAction(act);
924 
925  act = new Action(kStandardActionLoad, _("Load game"));
926  act->setKeyEvent(KEYCODE_F3);
927  act->addDefaultInputMapping("F3"); // original keyboard
928  gameKeyMap->addAction(act);
929 
930  act = new Action("QSAVE", _("Quick save"));
931  act->setKeyEvent(KEYCODE_F5);
932  act->addDefaultInputMapping("F5"); // original keyboard
933  gameKeyMap->addAction(act);
934 
935  act = new Action("SPD1", _("Walking speed: Low"));
936  act->setKeyEvent(KEYCODE_F6);
937  act->addDefaultInputMapping("F6"); // original keyboard
938  gameKeyMap->addAction(act);
939 
940  act = new Action("SPD2", _("Walking speed: Medium"));
941  act->setKeyEvent(KEYCODE_F7);
942  act->addDefaultInputMapping("F7"); // original keyboard
943  gameKeyMap->addAction(act);
944 
945  act = new Action("SPD3", _("Walking speed: High"));
946  act->setKeyEvent(KEYCODE_F8);
947  act->addDefaultInputMapping("F8"); // original keyboard
948  gameKeyMap->addAction(act);
949 
950  act = new Action("QLOAD", _("Quick load"));
951  act->setKeyEvent(KEYCODE_F9);
952  act->addDefaultInputMapping("F9"); // original keyboard
953  gameKeyMap->addAction(act);
954 
955  act = new Action("NOWAIT", _("Cancel waiting"));
956  act->setKeyEvent(KEYCODE_F10);
957  act->addDefaultInputMapping("F10"); // original keyboard
958  gameKeyMap->addAction(act);
959 
960  act = new Action("CAPT", _("Toggle mouse capture"));
961  act->setKeyEvent(KEYCODE_F11);
962  act->addDefaultInputMapping("F11"); // original keyboard
963  gameKeyMap->addAction(act);
964 
965  act = new Action("HOME", _("First page"));
966  act->setKeyEvent(KEYCODE_HOME);
967  act->addDefaultInputMapping("HOME"); // original keyboard
968  gameKeyMap->addAction(act);
969 
970  act = new Action("END", _("Last page"));
971  act->setKeyEvent(KEYCODE_END);
972  act->addDefaultInputMapping("END"); // original keyboard
973  gameKeyMap->addAction(act);
974 
975  Common::String extra = ConfMan.get("extra", target);
976  if (extra.hasPrefix("1.2.230.") || extra.hasPrefix("1.2.304.") || extra.hasPrefix("1.2.362.")) {
977  // I18N: ultra_super_mega_fast_walk is the name of the variable used at game script for this speed
978  act = new Action("SPDMAX", _("Walking speed: Ultra Super Mega Fast"));
979  act->setKeyEvent(KeyState(KEYCODE_s, 's', KBD_CTRL|KBD_ALT|KBD_SHIFT));
980  act->addDefaultInputMapping("C+A+S+s"); // original keyboard
981  //TODO: extra joy control, e.g. "JOY_R+JOY_A"
982  gameKeyMap->addAction(act);
983  }
984 
985  if (extra.hasPrefix("1.2.362.")) {
986  act = new Action(kStandardActionEE, _("???"));
987  act->setKeyEvent(KeyState(KEYCODE_z, 'z'));
988  act->addDefaultInputMapping("z"); // original keyboard
989  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
990  gameKeyMap->addAction(act);
991  }
992 
993  if (extra.hasPrefix("1.2.896.")) {
994  act = new Action("CREDIT", _("Show game credits"));
995  act->setKeyEvent(KEYCODE_F1);
996  act->addDefaultInputMapping("F1"); // original keyboard
997  gameKeyMap->addAction(act);
998 
999  act = new Action("MPLAY", _("Play selected music record"));
1000  act->setKeyEvent(KEYCODE_F4);
1001  act->addDefaultInputMapping("F4"); // original keyboard
1002  gameKeyMap->addAction(act);
1003 
1004  act = new Action("MNEXT", _("Select next music record"));
1005  act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
1006  act->addDefaultInputMapping("TAB"); // original keyboard
1007  gameKeyMap->addAction(act);
1008 
1009  act = new Action("NOTE1", _("Play note 1: A"));
1010  act->setKeyEvent(KeyState(KEYCODE_d, 'd'));
1011  act->addDefaultInputMapping("d"); // original keyboard
1012  gameKeyMap->addAction(act);
1013 
1014  act = new Action("NOTE2", _("Play note 2: F#"));
1015  act->setKeyEvent(KeyState(KEYCODE_f, 'f'));
1016  act->addDefaultInputMapping("f"); // original keyboard
1017  gameKeyMap->addAction(act);
1018 
1019  act = new Action("NOTE3", _("Play note 3: D#"));
1020  act->setKeyEvent(KeyState(KEYCODE_g, 'g'));
1021  act->addDefaultInputMapping("g"); // original keyboard
1022  gameKeyMap->addAction(act);
1023 
1024  act = new Action("NOTE4", _("Play note 4: C#"));
1025  act->setKeyEvent(KeyState(KEYCODE_h, 'h'));
1026  act->addDefaultInputMapping("h"); // original keyboard
1027  gameKeyMap->addAction(act);
1028 
1029  act = new Action("NOTE5", _("Play note 5: E"));
1030  act->setKeyEvent(KeyState(KEYCODE_j, 'j'));
1031  act->addDefaultInputMapping("j"); // original keyboard
1032  gameKeyMap->addAction(act);
1033 
1034  act = new Action("NOTE6", _("Play note 6: G#"));
1035  act->setKeyEvent(KeyState(KEYCODE_k, 'k'));
1036  act->addDefaultInputMapping("k"); // original keyboard
1037  gameKeyMap->addAction(act);
1038 
1039  act = new Action("NOTE7", _("Play note 7: B"));
1040  act->setKeyEvent(KeyState(KEYCODE_l, 'l'));
1041  act->addDefaultInputMapping("l"); // original keyboard
1042  gameKeyMap->addAction(act);
1043  }
1044  } else if (gameId == "ghostsheet") {
1045  act = new Action("HINT", _("Show hints"));
1046  act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
1047  act->addDefaultInputMapping("TAB"); // original keyboard
1048  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1049  act->addDefaultInputMapping("JOY_Y"); // extra joy
1050  gameKeyMap->addAction(act);
1051 
1052  act = new Action("ABLT1", _("Ability: Telekinesis"));
1053  act->setKeyEvent(KEYCODE_F1);
1054  act->addDefaultInputMapping("F1"); // original keyboard
1055  gameKeyMap->addAction(act);
1056 
1057  act = new Action("ABLT2", _("Ability: Push"));
1058  act->setKeyEvent(KEYCODE_F2);
1059  act->addDefaultInputMapping("F2"); // original keyboard
1060  gameKeyMap->addAction(act);
1061 
1062  act = new Action("ABLT3", _("Ability: Lightning"));
1063  act->setKeyEvent(KEYCODE_F3);
1064  act->addDefaultInputMapping("F3"); // original keyboard
1065  gameKeyMap->addAction(act);
1066 
1067  act = new Action("ABLT4", _("Ability: Light"));
1068  act->setKeyEvent(KEYCODE_F4);
1069  act->addDefaultInputMapping("F4"); // original keyboard
1070  gameKeyMap->addAction(act);
1071 
1072  act = new Action("ABLT5", _("Ability: Wind"));
1073  act->setKeyEvent(KEYCODE_F5);
1074  act->addDefaultInputMapping("F5"); // original keyboard
1075  gameKeyMap->addAction(act);
1076 
1077  act = new Action("ABLT6", _("Ability: Sound"));
1078  act->setKeyEvent(KEYCODE_F6);
1079  act->addDefaultInputMapping("F6"); // original keyboard
1080  gameKeyMap->addAction(act);
1081 
1082  act = new Action("ABLT7", _("Ability: Esence"));
1083  act->setKeyEvent(KEYCODE_F7);
1084  act->addDefaultInputMapping("F7"); // original keyboard
1085  gameKeyMap->addAction(act);
1086 
1087  act = new Action("ABLT8", _("Ability: Exorcist"));
1088  act->setKeyEvent(KEYCODE_F8);
1089  act->addDefaultInputMapping("F8"); // original keyboard
1090  gameKeyMap->addAction(act);
1091 
1092  act = new Action(kStandardActionSkip, _("Skip"));
1093  act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
1094  act->addDefaultInputMapping("BACKSPACE"); // original keyboard
1095  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
1096  gameKeyMap->addAction(act);
1097 
1098  act = new Action("SCRS", _("Save screenshot"));
1099  act->setKeyEvent(KEYCODE_F10);
1100  act->addDefaultInputMapping("F10"); // original keyboard
1101  gameKeyMap->addAction(act);
1102  } else if (gameId == "helga") {
1103  act = new Action("PAGEUP", _("Previous page"));
1104  act->setKeyEvent(KEYCODE_PAGEUP);
1105  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1106  act->addDefaultInputMapping("PAGEUP"); // original keyboard
1107  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
1108  gameKeyMap->addAction(act);
1109 
1110  act = new Action("PAGEDN", _("Next page"));
1111  act->setKeyEvent(KEYCODE_PAGEDOWN);
1112  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1113  act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
1114  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
1115  gameKeyMap->addAction(act);
1116 
1117  act = new Action("PHONEX", _("Phone cancel button"));
1118  act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
1119  act->addDefaultInputMapping("BACKSPACE"); // original keyboard
1120  gameKeyMap->addAction(act);
1121 
1122  act = new Action("PHONEU", _("Phone up button"));
1123  act->setKeyEvent(KEYCODE_UP);
1124  act->addDefaultInputMapping("UP"); // original keyboard
1125  act->addDefaultInputMapping("JOY_UP"); // extra joy
1126  gameKeyMap->addAction(act);
1127 
1128  act = new Action("PHONED", _("Phone down button"));
1129  act->setKeyEvent(KEYCODE_DOWN);
1130  act->addDefaultInputMapping("DOWN"); // original keyboard
1131  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1132  gameKeyMap->addAction(act);
1133 
1134  act = new Action("PHONE0", _("Phone 0 button"));
1135  act->setKeyEvent(KeyState(KEYCODE_0, '0'));
1136  act->addDefaultInputMapping("0"); // original keyboard
1137  gameKeyMap->addAction(act);
1138 
1139  act = new Action("PHONE1", _("Phone 1 button"));
1140  act->setKeyEvent(KeyState(KEYCODE_1, '1'));
1141  act->addDefaultInputMapping("1"); // original keyboard
1142  gameKeyMap->addAction(act);
1143 
1144  act = new Action("PHONE2", _("Phone 2 button"));
1145  act->setKeyEvent(KeyState(KEYCODE_2, '2'));
1146  act->addDefaultInputMapping("2"); // original keyboard
1147  gameKeyMap->addAction(act);
1148 
1149  act = new Action("PHONE3", _("Phone 3 button"));
1150  act->setKeyEvent(KeyState(KEYCODE_3, '3'));
1151  act->addDefaultInputMapping("3"); // original keyboard
1152  gameKeyMap->addAction(act);
1153 
1154  act = new Action("PHONE4", _("Phone 4 button"));
1155  act->setKeyEvent(KeyState(KEYCODE_4, '4'));
1156  act->addDefaultInputMapping("4"); // original keyboard
1157  gameKeyMap->addAction(act);
1158 
1159  act = new Action("PHONE5", _("Phone 5 button"));
1160  act->setKeyEvent(KeyState(KEYCODE_5, '5'));
1161  act->addDefaultInputMapping("5"); // original keyboard
1162  gameKeyMap->addAction(act);
1163 
1164  act = new Action("PHONE6", _("Phone 6 button"));
1165  act->setKeyEvent(KeyState(KEYCODE_6, '6'));
1166  act->addDefaultInputMapping("6"); // original keyboard
1167  gameKeyMap->addAction(act);
1168 
1169  act = new Action("PHONE7", _("Phone 7 button"));
1170  act->setKeyEvent(KeyState(KEYCODE_7, '7'));
1171  act->addDefaultInputMapping("7"); // original keyboard
1172  gameKeyMap->addAction(act);
1173 
1174  act = new Action("PHONE8", _("Phone 8 button"));
1175  act->setKeyEvent(KeyState(KEYCODE_8, '8'));
1176  act->addDefaultInputMapping("8"); // original keyboard
1177  gameKeyMap->addAction(act);
1178 
1179  act = new Action("PHONE9", _("Phone 9 button"));
1180  act->setKeyEvent(KeyState(KEYCODE_9, '9'));
1181  act->addDefaultInputMapping("9"); // original keyboard
1182  gameKeyMap->addAction(act);
1183 
1184  act = new Action("PHONEA", _("Phone * button"));
1185  act->setKeyEvent(KeyState(KEYCODE_ASTERISK, '*'));
1186  act->addDefaultInputMapping("ASTERISK"); // original keyboard
1187  gameKeyMap->addAction(act);
1188 
1189  act = new Action("PHONEH", _("Phone # button"));
1190  act->setKeyEvent(KeyState(KEYCODE_HASH, '#'));
1191  act->addDefaultInputMapping("HASH"); // original keyboard
1192  gameKeyMap->addAction(act);
1193  } else if (gameId == "knossos") {
1194  act = new Action(kStandardActionEE, _("???"));
1195  act->setKeyEvent(KeyState(KEYCODE_a, 'a', KBD_SHIFT));
1196  act->addDefaultInputMapping("S+a"); // original keyboard
1197  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
1198  gameKeyMap->addAction(act);
1199  } else if (gameId == "jamesperis") {
1200  act = new Action("HINT", _("Show hints / Dance move"));
1201  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
1202  act->addDefaultInputMapping("SPACE"); // original keyboard
1203  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1204  act->addDefaultInputMapping("JOY_Y"); // extra joy
1205  gameKeyMap->addAction(act);
1206 
1207  act = new Action(kStandardActionMoveUp, _("Dance move up"));
1208  act->setKeyEvent(KEYCODE_UP);
1209  act->addDefaultInputMapping("UP"); // original keyboard
1210  act->addDefaultInputMapping("JOY_UP"); // extra joy
1211  gameKeyMap->addAction(act);
1212 
1213  act = new Action(kStandardActionMoveDown, _("Dance move down"));
1214  act->setKeyEvent(KEYCODE_DOWN);
1215  act->addDefaultInputMapping("DOWN"); // original keyboard
1216  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1217  gameKeyMap->addAction(act);
1218 
1219  act = new Action(kStandardActionMoveLeft, _("Dance move left"));
1220  act->setKeyEvent(KEYCODE_LEFT);
1221  act->addDefaultInputMapping("LEFT"); // original keyboard
1222  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
1223  gameKeyMap->addAction(act);
1224 
1225  act = new Action(kStandardActionMoveRight, _("Dance move right"));
1226  act->setKeyEvent(KEYCODE_RIGHT);
1227  act->addDefaultInputMapping("RIGHT"); // original keyboard
1228  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
1229  gameKeyMap->addAction(act);
1230 
1231  act = new Action("PAGEUP", _("Previous page"));
1232  act->setMouseWheelUpEvent();
1233  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1234  gameKeyMap->addAction(act);
1235 
1236  act = new Action("PAGEDN", _("Next page"));
1237  act->setMouseWheelDownEvent();
1238  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1239  gameKeyMap->addAction(act);
1240 
1241  act = new Action(kStandardActionEE, _("???"));
1242  act->setKeyEvent(KEYCODE_F10);
1243  act->addDefaultInputMapping("F10"); // original keyboard
1244  act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
1245  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
1246  gameKeyMap->addAction(act);
1247  } else if (gameId == "jamesperis2") {
1248  act = new Action("HINT", _("Show hints"));
1249  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
1250  act->addDefaultInputMapping("SPACE"); // original keyboard
1251  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1252  act->addDefaultInputMapping("JOY_Y"); // extra joy
1253  gameKeyMap->addAction(act);
1254 
1255  act = new Action("PAGEUP", _("Previous page"));
1256  act->setMouseWheelUpEvent();
1257  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1258  gameKeyMap->addAction(act);
1259 
1260  act = new Action("PAGEDN", _("Next page"));
1261  act->setMouseWheelDownEvent();
1262  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1263  gameKeyMap->addAction(act);
1264 
1265  act = new Action(kStandardActionLoad, _("Load game"));
1266  act->setKeyEvent(KEYCODE_F5);
1267  act->addDefaultInputMapping("F5"); // original keyboard
1268  gameKeyMap->addAction(act);
1269 
1270  act = new Action(kStandardActionEE, _("???"));
1271  act->setKeyEvent(KeyState(KEYCODE_t, 't', KBD_CTRL));
1272  act->addDefaultInputMapping("C+t"); // original keyboard
1273  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
1274  gameKeyMap->addAction(act);
1275  } else if (gameId == "julia") {
1276  act = new Action(kStandardActionSkip, _("Skip"));
1277  act->setKeyEvent(KEYCODE_F12);
1278  act->addDefaultInputMapping("F12"); // original keyboard
1279  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1280  act->addDefaultInputMapping("JOY_Y"); // extra joy
1281  gameKeyMap->addAction(act);
1282  } else if (gameId == "juliastars") {
1283  act = new Action("CANCEL", _("Cancel input"));
1284  act->setKeyEvent(KEYCODE_BACKSPACE);
1285  act->addDefaultInputMapping("BACKSPACE"); // original keyboard
1286  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1287  act->addDefaultInputMapping("JOY_Y"); // extra joy
1288  gameKeyMap->addAction(act);
1289 
1290  act = new Action(kStandardActionMoveUp, _("Up"));
1291  act->setKeyEvent(KEYCODE_UP);
1292  act->addDefaultInputMapping("UP"); // original keyboard
1293  act->addDefaultInputMapping("JOY_UP"); // extra joy
1294  gameKeyMap->addAction(act);
1295 
1296  act = new Action(kStandardActionMoveDown, _("Down"));
1297  act->setKeyEvent(KEYCODE_DOWN);
1298  act->addDefaultInputMapping("DOWN"); // original keyboard
1299  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1300  gameKeyMap->addAction(act);
1301 
1302  act = new Action(kStandardActionMoveLeft, _("Left"));
1303  act->setKeyEvent(KEYCODE_LEFT);
1304  act->addDefaultInputMapping("LEFT"); // original keyboard
1305  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
1306  gameKeyMap->addAction(act);
1307 
1308  act = new Action(kStandardActionMoveRight, _("Right"));
1309  act->setKeyEvent(KEYCODE_RIGHT);
1310  act->addDefaultInputMapping("RIGHT"); // original keyboard
1311  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
1312  gameKeyMap->addAction(act);
1313 
1314  act = new Action("NOWAIT", _("Cancel waiting"));
1315  act->setKeyEvent(KEYCODE_F11);
1316  act->addDefaultInputMapping("F11"); // original keyboard
1317  gameKeyMap->addAction(act);
1318  } else if (gameId == "looky") {
1319  act = new Action("HINT", _("Show hints"));
1320  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
1321  act->addDefaultInputMapping("SPACE"); // original keyboard
1322  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1323  act->addDefaultInputMapping("JOY_Y"); // extra joy
1324  gameKeyMap->addAction(act);
1325 
1326  act = new Action("SCRLUP", _("Scroll up"));
1327  act->setMouseWheelUpEvent();
1328  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1329  act->addDefaultInputMapping("UP"); // extra keyboard
1330  act->addDefaultInputMapping("JOY_UP"); // extra joy
1331  gameKeyMap->addAction(act);
1332 
1333  act = new Action("SCRLDN", _("Scroll down"));
1334  act->setMouseWheelDownEvent();
1335  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1336  act->addDefaultInputMapping("DOWN"); // extra keyboard
1337  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1338  gameKeyMap->addAction(act);
1339 
1340  act = new Action("SCRS", _("Save screenshot"));
1341  act->setKeyEvent(KEYCODE_F12);
1342  act->addDefaultInputMapping("F12"); // original keyboard
1343  gameKeyMap->addAction(act);
1344  } else if (gameId == "lotl") {
1345  act = new Action("SUBS", _("Toggle subtitles"));
1346  act->setKeyEvent(KeyState(KEYCODE_t, 't'));
1347  act->addDefaultInputMapping("t"); // original keyboard
1348  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1349  act->addDefaultInputMapping("JOY_Y"); // extra joy
1350  gameKeyMap->addAction(act);
1351 
1352  act = new Action("SCRLUP", _("Scroll up"));
1353  act->setMouseWheelUpEvent();
1354  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1355  act->addDefaultInputMapping("PAGEUP"); // extra keyboard
1356  act->addDefaultInputMapping("JOY_UP"); // extra joy
1357  gameKeyMap->addAction(act);
1358 
1359  act = new Action("SCRLDN", _("Scroll down"));
1360  act->setMouseWheelDownEvent();
1361  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1362  act->addDefaultInputMapping("PAGEDOWN"); // extra keyboard
1363  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1364  gameKeyMap->addAction(act);
1365  } else if (gameId == "lostbride") {
1366  act = new Action("HELP", _("Show help"));
1367  act->setKeyEvent(KEYCODE_F1);
1368  act->addDefaultInputMapping("F1"); // original keyboard
1369  act->addDefaultInputMapping("JOY_Y"); // extra joy
1370  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1371  gameKeyMap->addAction(act);
1372 
1373  act = new Action(kStandardActionMoveUp, _("Up"));
1374  act->setKeyEvent(KEYCODE_UP);
1375  act->addDefaultInputMapping("UP"); // original keyboard
1376  act->addDefaultInputMapping("JOY_UP"); // extra joy
1377  gameKeyMap->addAction(act);
1378 
1379  act = new Action(kStandardActionMoveDown, _("Down"));
1380  act->setKeyEvent(KEYCODE_DOWN);
1381  act->addDefaultInputMapping("DOWN"); // original keyboard
1382  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1383  gameKeyMap->addAction(act);
1384 
1385  act = new Action(kStandardActionMoveLeft, _("Left"));
1386  act->setKeyEvent(KEYCODE_LEFT);
1387  act->addDefaultInputMapping("LEFT"); // original keyboard
1388  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
1389  gameKeyMap->addAction(act);
1390 
1391  act = new Action(kStandardActionMoveRight, _("Right"));
1392  act->setKeyEvent(KEYCODE_RIGHT);
1393  act->addDefaultInputMapping("RIGHT"); // original keyboard
1394  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
1395  gameKeyMap->addAction(act);
1396 
1397  act = new Action(kStandardActionEE, _("???"));
1398  act->setKeyEvent(KeyState(KEYCODE_SLASH, 0, KBD_SHIFT));
1399  act->addDefaultInputMapping("S+SLASH"); // original keyboard
1400  //TODO: extra joy control, e.g. "JOY_R+JOY_A+JOY_B"
1401  gameKeyMap->addAction(act);
1402 
1403  act = new Action("HINT", _("???"));
1404  act->setKeyEvent(KeyState(KEYCODE_s, 's'));
1405  act->addDefaultInputMapping("s"); // original keyboard
1406  //TODO: extra joy control, e.g. "JOY_R+JOY_A"
1407  gameKeyMap->addAction(act);
1408 
1409  act = new Action("NOHINT", _("Hide hints"));
1410  act->setKeyEvent(KeyState(KEYCODE_h, 'h'));
1411  act->addDefaultInputMapping("h"); // original keyboard
1412  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
1413  gameKeyMap->addAction(act);
1414  } else if (gameId == "mentalrepairs") {
1415  act = new Action("HINT", _("Show hints"));
1416  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
1417  act->addDefaultInputMapping("SPACE"); // original keyboard
1418  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1419  act->addDefaultInputMapping("JOY_Y"); // extra joy
1420  gameKeyMap->addAction(act);
1421 
1422  act = new Action("HELP", _("Show help"));
1423  act->setKeyEvent(KEYCODE_F1);
1424  act->addDefaultInputMapping("F1"); // original keyboard
1425  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
1426  gameKeyMap->addAction(act);
1427  } else if (gameId == "mythguff") {
1428  act = new Action("SCRLUP", _("Scroll up"));
1429  act->setMouseWheelUpEvent();
1430  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1431  act->addDefaultInputMapping("UP"); // extra keyboard
1432  act->addDefaultInputMapping("JOY_UP"); // extra joy
1433  gameKeyMap->addAction(act);
1434 
1435  act = new Action("SCRLDN", _("Scroll down"));
1436  act->setMouseWheelDownEvent();
1437  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1438  act->addDefaultInputMapping("DOWN"); // extra keyboard
1439  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1440  gameKeyMap->addAction(act);
1441  } else if (gameId == "oknytt") {
1442  act = new Action("INV", _("Show inventory"));
1443  act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
1444  act->addDefaultInputMapping("TAB"); // original keyboard
1445  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1446  act->addDefaultInputMapping("JOY_Y"); // extra joy
1447  gameKeyMap->addAction(act);
1448  } else if (gameId == "onehelluvaday") {
1449  act = new Action(kStandardActionMoveUp, _("Up"));
1450  act->setKeyEvent(KEYCODE_UP);
1451  act->addDefaultInputMapping("UP"); // original keyboard
1452  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
1453  act->addDefaultInputMapping("JOY_UP"); // extra joy
1454  gameKeyMap->addAction(act);
1455 
1456  act = new Action(kStandardActionMoveDown, _("Down"));
1457  act->setKeyEvent(KEYCODE_DOWN);
1458  act->addDefaultInputMapping("DOWN"); // original keyboard
1459  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
1460  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1461  gameKeyMap->addAction(act);
1462 
1463  // I18N: At one of the puzzles game asks to press Up key / Shift key / Down key
1464  act = new Action("SHIFT", _("Shift key"));
1465  act->setKeyEvent(KEYCODE_RSHIFT);
1466  act->addDefaultInputMapping("LSHIFT"); // original keyboard control
1467  act->addDefaultInputMapping("RSHIFT"); // original keyboard control
1468  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1469  act->addDefaultInputMapping("JOY_Y"); // extra joy
1470  gameKeyMap->addAction(act);
1471  } else if (gameId == "palladion") {
1472  act = new Action("HINT", _("Show hints"));
1473  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
1474  act->addDefaultInputMapping("SPACE"); // original keyboard
1475  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1476  act->addDefaultInputMapping("JOY_Y"); // extra joy
1477  gameKeyMap->addAction(act);
1478 
1479  act = new Action("SCRS", _("Save screenshot"));
1480  act->setKeyEvent(KEYCODE_F12);
1481  act->addDefaultInputMapping("F12"); // original keyboard
1482  gameKeyMap->addAction(act);
1483  } else if (gameId == "papasdaughters1") {
1484  act = new Action("SCRLUP", _("Scroll up"));
1485  act->setMouseWheelUpEvent();
1486  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1487  act->addDefaultInputMapping("UP"); // extra keyboard
1488  act->addDefaultInputMapping("JOY_UP"); // extra joy
1489  gameKeyMap->addAction(act);
1490 
1491  act = new Action("SCRLDN", _("Scroll down"));
1492  act->setMouseWheelDownEvent();
1493  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1494  act->addDefaultInputMapping("DOWN"); // extra keyboard
1495  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1496  gameKeyMap->addAction(act);
1497  } else if (gameId == "papasdaughters2") {
1498  act = new Action("HINT", _("Show hints"));
1499  act->setKeyEvent(KEYCODE_F1);
1500  act->addDefaultInputMapping("F1"); // original keyboard
1501  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1502  act->addDefaultInputMapping("JOY_Y"); // extra joy
1503  gameKeyMap->addAction(act);
1504 
1505  act = new Action("SCRLUP", _("Scroll up"));
1506  act->setMouseWheelUpEvent();
1507  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1508  act->addDefaultInputMapping("UP"); // extra keyboard
1509  act->addDefaultInputMapping("JOY_UP"); // extra joy
1510  gameKeyMap->addAction(act);
1511 
1512  act = new Action("SCRLDN", _("Scroll down"));
1513  act->setMouseWheelDownEvent();
1514  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1515  act->addDefaultInputMapping("DOWN"); // extra keyboard
1516  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1517  gameKeyMap->addAction(act);
1518  } else if (gameId == "petka02") {
1519  act = new Action("INV", _("Show inventory"));
1520  act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
1521  act->addDefaultInputMapping("i"); // original keyboard
1522  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1523  act->addDefaultInputMapping("JOY_UP"); // extra joy
1524  gameKeyMap->addAction(act);
1525 
1526  act = new Action("MAP", _("Show map"));
1527  act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
1528  act->addDefaultInputMapping("TAB"); // original keyboard
1529  act->addDefaultInputMapping("F1"); // original keyboard
1530  act->addDefaultInputMapping("m"); // original keyboard
1531  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1532  gameKeyMap->addAction(act);
1533 
1534  act = new Action("LOOK", _("Look at"));
1535  act->setKeyEvent(KeyState(KEYCODE_l, 'l'));
1536  act->addDefaultInputMapping("1"); // original keyboard
1537  act->addDefaultInputMapping("l"); // original keyboard
1538  gameKeyMap->addAction(act);
1539 
1540  act = new Action("WALK", _("Walk to"));
1541  act->setKeyEvent(KeyState(KEYCODE_w, 'w'));
1542  act->addDefaultInputMapping("2"); // original keyboard
1543  act->addDefaultInputMapping("w"); // original keyboard
1544  gameKeyMap->addAction(act);
1545 
1546  act = new Action("PICK", _("Pick up"));
1547  act->setKeyEvent(KeyState(KEYCODE_g, 'g'));
1548  act->addDefaultInputMapping("3"); // original keyboard
1549  act->addDefaultInputMapping("g"); // original keyboard
1550  gameKeyMap->addAction(act);
1551 
1552  act = new Action("USE", _("Use"));
1553  act->setKeyEvent(KeyState(KEYCODE_u, 'u'));
1554  act->addDefaultInputMapping("4"); // original keyboard
1555  act->addDefaultInputMapping("u"); // original keyboard
1556  gameKeyMap->addAction(act);
1557 
1558  act = new Action("TALK", _("Talk to"));
1559  act->setKeyEvent(KeyState(KEYCODE_t, 't'));
1560  act->addDefaultInputMapping("5"); // original keyboard
1561  act->addDefaultInputMapping("t"); // original keyboard
1562  gameKeyMap->addAction(act);
1563 
1564  // I18N: Chapayev is the name of game character, Vasily Chapayev
1565  // This action makes Chapayev interact with item instead of Petka
1566  act = new Action("ALTUSE", _("Chapayev's action"));
1567  act->setKeyEvent(KeyState(KEYCODE_c, 'c'));
1568  act->addDefaultInputMapping("6"); // original keyboard
1569  act->addDefaultInputMapping("c"); // original keyboard
1570  gameKeyMap->addAction(act);
1571 
1572  Common::String extra = ConfMan.get("extra", target);
1573  if (extra.hasSuffix("2015")) {
1574  act = new Action(kStandardActionEE, _("???"));
1575  act->setKeyEvent(KeyState(KEYCODE_q, 'q'));
1576  act->addDefaultInputMapping("q"); // original keyboard
1577  //TODO: extra joy control, e.g. "JOY_R+JOY_A"
1578  gameKeyMap->addAction(act);
1579 
1580  // I18N: Displays a debug text message
1581  act = new Action("DBGTXT", _("Debug print"));
1582  act->setKeyEvent(KEYCODE_BACKSPACE);
1583  act->addDefaultInputMapping("BACKSPACE"); // original keyboard
1584  gameKeyMap->addAction(act);
1585  }
1586  } else if (gameId == "pizzamorgana") {
1587  act = new Action("ACTNXT", _("Next action"));
1588  act->setMouseWheelUpEvent();
1589  act->addDefaultInputMapping("MOUSE_RIGHT"); // original mouse
1590  act->addDefaultInputMapping("RIGHTBRACKET"); // original keyboard
1591  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1592  act->addDefaultInputMapping("JOY_B"); // extra joy
1593  gameKeyMap->addAction(act);
1594 
1595  act = new Action("ACTPRV", _("Previous action"));
1596  act->setMouseWheelDownEvent();
1597  act->addDefaultInputMapping("LEFTBRACKET"); // original keyboard
1598  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1599  gameKeyMap->addAction(act);
1600 
1601  act = new Action(kStandardActionSkip, _("Skip"));
1602  act->setKeyEvent(KeyState(KEYCODE_PERIOD, '.'));
1603  act->addDefaultInputMapping("PERIOD"); // original keyboard
1604  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1605  act->addDefaultInputMapping("JOY_Y"); // extra joy
1606  gameKeyMap->addAction(act);
1607 
1608  act = new Action(kStandardActionPause, _("Pause"));
1609  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
1610  act->addDefaultInputMapping("SPACE"); // original keyboard
1611  act->addDefaultInputMapping("p"); // original keyboard
1612  gameKeyMap->addAction(act);
1613 
1614  act = new Action(kStandardActionOpenSettings, _("Settings"));
1615  act->setKeyEvent(KeyState(KEYCODE_s, 's'));
1616  act->addDefaultInputMapping("s"); // original keyboard
1617  gameKeyMap->addAction(act);
1618 
1619  act = new Action("ANSWR1", _("Dialogue answer 1"));
1620  act->setKeyEvent(KeyState(KEYCODE_1, '1'));
1621  act->addDefaultInputMapping("1"); // original keyboard
1622  gameKeyMap->addAction(act);
1623 
1624  act = new Action("ANSWR2", _("Dialogue answer 2"));
1625  act->setKeyEvent(KeyState(KEYCODE_2, '2'));
1626  act->addDefaultInputMapping("2"); // original keyboard
1627  gameKeyMap->addAction(act);
1628 
1629  act = new Action("ANSWR3", _("Dialogue answer 3"));
1630  act->setKeyEvent(KeyState(KEYCODE_3, '3'));
1631  act->addDefaultInputMapping("3"); // original keyboard
1632  gameKeyMap->addAction(act);
1633 
1634  act = new Action("ANSWR4", _("Dialogue answer 4"));
1635  act->setKeyEvent(KeyState(KEYCODE_4, '4'));
1636  act->addDefaultInputMapping("4"); // original keyboard
1637  gameKeyMap->addAction(act);
1638 
1639  act = new Action("SCRS", _("Save screenshot"));
1640  act->setKeyEvent(KeyState(KEYCODE_p, 'p', KBD_SHIFT));
1641  act->addDefaultInputMapping("S+p"); // original keyboard
1642  gameKeyMap->addAction(act);
1643  } else if (gameId == "polechudes") {
1644  // I18N: This game is called "Pole Chudes" and it features a wheel similar to "Wheel of Fortune" TV show
1645  act = new Action("SLOWER", _("Spin wheel slower"));
1646  act->setKeyEvent(KEYCODE_F1);
1647  act->addDefaultInputMapping("F1"); // original keyboard
1648  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
1649  act->addDefaultInputMapping("JOY_UP"); // extra joy
1650  gameKeyMap->addAction(act);
1651 
1652  // I18N: This game is called "Pole Chudes" and it features a wheel similar to "Wheel of Fortune" TV show
1653  act = new Action("FASTER", _("Spin wheel faster"));
1654  act->setKeyEvent(KEYCODE_F2);
1655  act->addDefaultInputMapping("F2"); // original keyboard
1656  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
1657  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1658  gameKeyMap->addAction(act);
1659  } else if (gameId == "reptilesquest") {
1660  act = new Action("HINT", _("Show hints"));
1661  act->setKeyEvent(KeyState(KEYCODE_x, 'x'));
1662  act->addDefaultInputMapping("x"); // original keyboard
1663  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1664  act->addDefaultInputMapping("JOY_Y"); // extra joy
1665  gameKeyMap->addAction(act);
1666 
1667  act = new Action("INV", _("Show inventory"));
1668  act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
1669  act->addDefaultInputMapping("i"); // original keyboard
1670  act->addDefaultInputMapping("JOY_UP"); // extra joy
1671  gameKeyMap->addAction(act);
1672 
1673  act = new Action("MAP", _("Show map"));
1674  act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
1675  act->addDefaultInputMapping("m"); // original keyboard
1676  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1677  gameKeyMap->addAction(act);
1678  } else if (gameId == "reversion1") {
1679  act = new Action("INV", _("Show inventory"));
1680  act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
1681  act->addDefaultInputMapping("i"); // original keyboard
1682  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1683  act->addDefaultInputMapping("JOY_Y"); // extra joy
1684  gameKeyMap->addAction(act);
1685  } else if (gameId == "reversion2" ||
1686  gameId == "reversion3"
1687  ) {
1688  act = new Action("INV", _("Show inventory"));
1689  act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
1690  act->addDefaultInputMapping("i"); // original keyboard
1691  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1692  act->addDefaultInputMapping("JOY_Y"); // extra joy
1693  gameKeyMap->addAction(act);
1694 
1695  act = new Action(kStandardActionMoveUp, _("Scroll up"));
1696  act->setMouseWheelUpEvent();
1697  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1698  act->addDefaultInputMapping("UP"); // extra keyboard
1699  act->addDefaultInputMapping("JOY_UP"); // extra joy
1700  gameKeyMap->addAction(act);
1701 
1702  act = new Action(kStandardActionMoveDown, _("Scroll down"));
1703  act->setMouseWheelDownEvent();
1704  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1705  act->addDefaultInputMapping("DOWN"); // extra keyboard
1706  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1707  gameKeyMap->addAction(act);
1708  } else if (gameId == "ritter") {
1709  act = new Action("HINT", _("Show hints"));
1710  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
1711  act->addDefaultInputMapping("SPACE"); // original keyboard
1712  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1713  act->addDefaultInputMapping("JOY_Y"); // extra joy
1714  gameKeyMap->addAction(act);
1715 
1716  act = new Action(kStandardActionSkip, _("Skip"));
1717  act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
1718  act->addDefaultInputMapping("BACKSPACE"); // original keyboard
1719  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
1720  gameKeyMap->addAction(act);
1721  } else if (gameId == "shaban") {
1722  act = new Action("MAP", _("Show map"));
1723  act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
1724  act->addDefaultInputMapping("m"); // original keyboard
1725  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1726  act->addDefaultInputMapping("JOY_Y"); // extra joy
1727  gameKeyMap->addAction(act);
1728  } else if (gameId == "sof1" ||
1729  gameId == "sof2"
1730  ) {
1731  act = new Action("ZOOMOT", _("Zoom out"));
1732  act->setMouseWheelUpEvent();
1733  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1734  act->addDefaultInputMapping("PAGEUP"); // extra keyboard
1735  act->addDefaultInputMapping("JOY_UP"); // extra joy
1736  gameKeyMap->addAction(act);
1737 
1738  act = new Action("ZOOMIN", _("Zoom in"));
1739  act->setMouseWheelDownEvent();
1740  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1741  act->addDefaultInputMapping("PAGEDOWN"); // extra keyboard
1742  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1743  gameKeyMap->addAction(act);
1744 
1745  act = new Action("MAP", _("Show map"));
1746  act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
1747  act->addDefaultInputMapping("m"); // original keyboard
1748  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
1749  gameKeyMap->addAction(act);
1750 
1751  act = new Action("JRNL", _("Show journal"));
1752  act->setKeyEvent(KeyState(KEYCODE_n, 'n'));
1753  act->addDefaultInputMapping("n"); // original keyboard
1754  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
1755  gameKeyMap->addAction(act);
1756  } else if (gameId == "sotv1") {
1757  act = new Action("HINT", _("Show hints"));
1758  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
1759  act->addDefaultInputMapping("SPACE"); // original keyboard
1760  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1761  act->addDefaultInputMapping("JOY_Y"); // extra joy
1762  gameKeyMap->addAction(act);
1763 
1764  act = new Action("MAP", _("Show map"));
1765  act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
1766  act->addDefaultInputMapping("m"); // original keyboard
1767  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1768  gameKeyMap->addAction(act);
1769 
1770  act = new Action("ACTNXT", _("Next action"));
1771  act->setMouseWheelDownEvent();
1772  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1773  act->addDefaultInputMapping("PAGEDOWN"); // extra keyboard
1774  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
1775  gameKeyMap->addAction(act);
1776 
1777  act = new Action("ACTPRV", _("Previous action"));
1778  act->setMouseWheelUpEvent();
1779  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1780  act->addDefaultInputMapping("PAGEUP"); // extra keyboard
1781  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1782  gameKeyMap->addAction(act);
1783 
1784  act = new Action(kStandardActionEE, _("???"));
1785  act->setMiddleClickEvent();
1786  act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
1787  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
1788  gameKeyMap->addAction(act);
1789  } else if (gameId == "sotv2") {
1790  act = new Action("HINT", _("Show hints"));
1791  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
1792  act->addDefaultInputMapping("SPACE"); // original keyboard
1793  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1794  act->addDefaultInputMapping("JOY_Y"); // extra joy
1795  gameKeyMap->addAction(act);
1796 
1797  act = new Action("MAP", _("Show map"));
1798  act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
1799  act->addDefaultInputMapping("m"); // original keyboard
1800  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1801  gameKeyMap->addAction(act);
1802 
1803  act = new Action("ACTNXT", _("Next action"));
1804  act->setMouseWheelDownEvent();
1805  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1806  act->addDefaultInputMapping("PAGEDOWN"); // extra keyboard
1807  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
1808  gameKeyMap->addAction(act);
1809 
1810  act = new Action("ACTPRV", _("Previous action"));
1811  act->setMouseWheelUpEvent();
1812  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1813  act->addDefaultInputMapping("PAGEUP"); // extra keyboard
1814  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1815  gameKeyMap->addAction(act);
1816 
1817  act = new Action("PHONE1", _("Phone 1 button"));
1818  act->setKeyEvent(KeyState(KEYCODE_1, '1'));
1819  act->addDefaultInputMapping("1"); // original keyboard
1820  gameKeyMap->addAction(act);
1821 
1822  act = new Action("PHONE2", _("Phone 2 button"));
1823  act->setKeyEvent(KeyState(KEYCODE_2, '2'));
1824  act->addDefaultInputMapping("2"); // original keyboard
1825  gameKeyMap->addAction(act);
1826 
1827  act = new Action("PHONE3", _("Phone 3 button"));
1828  act->setKeyEvent(KeyState(KEYCODE_3, '3'));
1829  act->addDefaultInputMapping("3"); // original keyboard
1830  gameKeyMap->addAction(act);
1831 
1832  // I18N: Displays a debug text message
1833  act = new Action("DBGTXT", _("Debug print"));
1834  act->setKeyEvent(KEYCODE_F6);
1835  act->addDefaultInputMapping("F6"); // original keyboard
1836  gameKeyMap->addAction(act);
1837 
1838  act = new Action(kStandardActionEE, _("???"));
1839  act->setMiddleClickEvent();
1840  act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
1841  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
1842  gameKeyMap->addAction(act);
1843  } else if (gameId == "tib") {
1844  act = new Action("SCRS", _("Save screenshot"));
1845  act->setKeyEvent(KEYCODE_F9);
1846  act->addDefaultInputMapping("F9"); // original keyboard
1847  gameKeyMap->addAction(act);
1848  } else if (gameId == "thelastcrownmh") {
1849  act = new Action("EXIT", _("Exit"));
1850  act->setKeyEvent(KEYCODE_F1);
1851  act->addDefaultInputMapping("F1"); // original keyboard
1852  gameKeyMap->addAction(act);
1853 
1854  // I18N: Debug feature to draw lines of scene geometry: walls, walking areas, etc
1855  act = new Action("DBGSCN", _("Show scene geometry"));
1856  act->setKeyEvent(KEYCODE_F2);
1857  act->addDefaultInputMapping("F2"); // original keyboard
1858  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1859  act->addDefaultInputMapping("JOY_Y"); // extra joy
1860  gameKeyMap->addAction(act);
1861 
1862  act = new Action("SCRS", _("Save screenshot"));
1863  act->setKeyEvent(KEYCODE_F3);
1864  act->addDefaultInputMapping("F3"); // original keyboard
1865  gameKeyMap->addAction(act);
1866 
1867  act = new Action(kStandardActionOpenSettings, _("Settings"));
1868  act->setKeyEvent(KEYCODE_F4);
1869  act->addDefaultInputMapping("F4"); // original keyboard
1870  gameKeyMap->addAction(act);
1871 
1872  act = new Action("NOWAIT", _("Cancel waiting"));
1873  act->setKeyEvent(KEYCODE_F5);
1874  act->addDefaultInputMapping("F5"); // original keyboard
1875  gameKeyMap->addAction(act);
1876 
1877  // I18N: Displays a debug text message
1878  act = new Action("DBGTXT", _("Debug print"));
1879  act->setKeyEvent(KEYCODE_F6);
1880  act->addDefaultInputMapping("F6"); // original keyboard
1881  gameKeyMap->addAction(act);
1882 
1883  // I18N: Displays a debug interface with Bezier curves
1884  act = new Action("DBGBEZ", _("Bezier window"));
1885  act->setKeyEvent(KEYCODE_F7);
1886  act->addDefaultInputMapping("F7"); // original keyboard
1887  gameKeyMap->addAction(act);
1888  } else if (gameId == "thelostcrowngha") {
1889  act = new Action(kStandardActionEE, _("???"));
1890  act->setKeyEvent(KEYCODE_F1);
1891  act->addDefaultInputMapping("F1"); // original keyboard
1892  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
1893  gameKeyMap->addAction(act);
1894 
1895  act = new Action("SCRS", _("Save screenshot"));
1896  act->setKeyEvent(KEYCODE_F3);
1897  act->addDefaultInputMapping("F3"); // original keyboard
1898  gameKeyMap->addAction(act);
1899  } else if (gameId == "twc") {
1900  // I18N: Use droid to perform an action
1901  act = new Action("ALTUSE", _("Droid's action"));
1902  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
1903  act->addDefaultInputMapping("SPACE"); // original keyboard
1904  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1905  act->addDefaultInputMapping("JOY_Y"); // extra joy
1906  gameKeyMap->addAction(act);
1907 
1908  act = new Action(kStandardActionMoveLeft, _("Left"));
1909  act->setKeyEvent(KEYCODE_LEFT);
1910  act->addDefaultInputMapping("LEFT"); // original keyboard
1911  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
1912  gameKeyMap->addAction(act);
1913 
1914  act = new Action(kStandardActionMoveRight, _("Right"));
1915  act->setKeyEvent(KEYCODE_RIGHT);
1916  act->addDefaultInputMapping("RIGHT"); // original keyboard
1917  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
1918  gameKeyMap->addAction(act);
1919 
1920  act = new Action(kStandardActionMoveUp, _("Up"));
1921  act->setKeyEvent(KEYCODE_UP);
1922  act->addDefaultInputMapping("UP"); // original keyboard
1923  act->addDefaultInputMapping("JOY_UP"); // extra joy
1924  gameKeyMap->addAction(act);
1925 
1926  act = new Action(kStandardActionMoveDown, _("Down"));
1927  act->setKeyEvent(KEYCODE_DOWN);
1928  act->addDefaultInputMapping("DOWN"); // original keyboard
1929  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1930  gameKeyMap->addAction(act);
1931 
1932  act = new Action("GUIA", _("GUI variant A"));
1933  act->setKeyEvent(KEYCODE_F10);
1934  act->addDefaultInputMapping("F10"); // original keyboard
1935  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
1936  gameKeyMap->addAction(act);
1937 
1938  act = new Action("GUIB", _("GUI variant B"));
1939  act->setKeyEvent(KEYCODE_F11);
1940  act->addDefaultInputMapping("F11"); // original keyboard
1941  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
1942  gameKeyMap->addAction(act);
1943 
1944  act = new Action(kStandardActionEE, _("???"));
1945  act->setKeyEvent(KEYCODE_HOME);
1946  act->addDefaultInputMapping("HOME"); // original keyboard
1947  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
1948  gameKeyMap->addAction(act);
1949  } else if (gameId == "vsevolod") {
1950  act = new Action("INV", _("Show inventory"));
1951  act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
1952  act->addDefaultInputMapping("i"); // original keyboard
1953  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1954  act->addDefaultInputMapping("JOY_Y"); // extra joy
1955  gameKeyMap->addAction(act);
1956 
1957  act = new Action("JRNL", _("Show journal"));
1958  act->setKeyEvent(KeyState(KEYCODE_j, 'j'));
1959  act->addDefaultInputMapping("j"); // original keyboard
1960  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
1961  gameKeyMap->addAction(act);
1962 
1963  act = new Action(kStandardActionOpenSettings, _("Settings"));
1964  act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
1965  act->addDefaultInputMapping("m"); // original keyboard
1966  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
1967  gameKeyMap->addAction(act);
1968 
1969  act = new Action("SCRLUP", _("Scroll up"));
1970  act->setMouseWheelUpEvent();
1971  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
1972  act->addDefaultInputMapping("UP"); // extra keyboard
1973  act->addDefaultInputMapping("JOY_UP"); // extra joy
1974  gameKeyMap->addAction(act);
1975 
1976  act = new Action("SCRLDN", _("Scroll down"));
1977  act->setMouseWheelDownEvent();
1978  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
1979  act->addDefaultInputMapping("DOWN"); // extra keyboard
1980  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
1981  gameKeyMap->addAction(act);
1982  } else if (gameId == "wayoflove") {
1983  act = new Action("HINT", _("Show hints"));
1984  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
1985  act->addDefaultInputMapping("SPACE"); // original keyboard
1986  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
1987  act->addDefaultInputMapping("JOY_Y"); // extra joy
1988  gameKeyMap->addAction(act);
1989 
1990  act = new Action("GUIA", _("GUI variant A"));
1991  act->setKeyEvent(KEYCODE_F10);
1992  act->addDefaultInputMapping("F10"); // original keyboard
1993  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
1994  gameKeyMap->addAction(act);
1995 
1996  act = new Action("GUIB", _("GUI variant B"));
1997  act->setKeyEvent(KEYCODE_F11);
1998  act->addDefaultInputMapping("F11"); // original keyboard
1999  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
2000  gameKeyMap->addAction(act);
2001 
2002  act = new Action(kStandardActionEE, _("???"));
2003  act->setKeyEvent(KEYCODE_HOME);
2004  act->addDefaultInputMapping("HOME"); // original keyboard
2005  //TODO: extra joy control, e.g. "JOY_R+JOY_B"
2006  gameKeyMap->addAction(act);
2007  } else if (gameId == "wtetris") {
2008  // I18N: It's a Tetris game clone, this action rotates current tetris item
2009  act = new Action("ROTATE", _("Rotate"));
2010  act->setKeyEvent(KEYCODE_UP);
2011  act->addDefaultInputMapping("UP"); // original keyboard
2012  act->addDefaultInputMapping("SPACE"); // original keyboard
2013  act->addDefaultInputMapping("MOUSE_RIGHT"); // extra mouse
2014  act->addDefaultInputMapping("JOY_UP"); // extra joy
2015  act->addDefaultInputMapping("JOY_Y"); // extra joy
2016  gameKeyMap->addAction(act);
2017 
2018  act = new Action(kStandardActionMoveLeft, _("Left"));
2019  act->setKeyEvent(KEYCODE_LEFT);
2020  act->addDefaultInputMapping("LEFT"); // original keyboard
2021  act->addDefaultInputMapping("KP4"); // original keyboard
2022  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
2023  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
2024  gameKeyMap->addAction(act);
2025 
2026  act = new Action(kStandardActionMoveRight, _("Right"));
2027  act->setKeyEvent(KEYCODE_RIGHT);
2028  act->addDefaultInputMapping("RIGHT"); // original keyboard
2029  act->addDefaultInputMapping("KP6"); // original keyboard
2030  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
2031  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
2032  gameKeyMap->addAction(act);
2033 
2034  // I18N: It's a Tetris game clone, this action drops current tetris item
2035  act = new Action("DROP", _("Drop"));
2036  act->setKeyEvent(KEYCODE_DOWN);
2037  act->addDefaultInputMapping("DOWN"); // original keyboard
2038  act->addDefaultInputMapping("KP2"); // original keyboard
2039  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
2040  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
2041  gameKeyMap->addAction(act);
2042  } else if (gameId == "zilm") {
2043  act = new Action("P1UP", _("Player 1: Up"));
2044  act->setKeyEvent(KeyState(KEYCODE_w, 'w'));
2045  act->addDefaultInputMapping("w"); // original keyboard
2046  gameKeyMap->addAction(act);
2047 
2048  act = new Action("P1LT", _("Player 1: Left"));
2049  act->setKeyEvent(KeyState(KEYCODE_a, 'a'));
2050  act->addDefaultInputMapping("a"); // original keyboard
2051  gameKeyMap->addAction(act);
2052 
2053  act = new Action("P1DN", _("Player 1: Down"));
2054  act->setKeyEvent(KeyState(KEYCODE_s, 's'));
2055  act->addDefaultInputMapping("s"); // original keyboard
2056  gameKeyMap->addAction(act);
2057 
2058  act = new Action("P1RT", _("Player 1: Right"));
2059  act->setKeyEvent(KeyState(KEYCODE_d, 'd'));
2060  act->addDefaultInputMapping("d"); // original keyboard
2061  gameKeyMap->addAction(act);
2062 
2063  act = new Action("P2UP", _("Player 2: Up"));
2064  act->setKeyEvent(KEYCODE_UP);
2065  act->addDefaultInputMapping("UP"); // original keyboard
2066  gameKeyMap->addAction(act);
2067 
2068  act = new Action("P2LT", _("Player 2: Left"));
2069  act->setKeyEvent(KEYCODE_LEFT);
2070  act->addDefaultInputMapping("LEFT"); // original keyboard
2071  gameKeyMap->addAction(act);
2072 
2073  act = new Action("P2DN", _("Player 2: Down"));
2074  act->setKeyEvent(KEYCODE_DOWN);
2075  act->addDefaultInputMapping("DOWN"); // original keyboard
2076  gameKeyMap->addAction(act);
2077 
2078  act = new Action("P2RT", _("Player 2: Right"));
2079  act->setKeyEvent(KEYCODE_RIGHT);
2080  act->addDefaultInputMapping("RIGHT"); // original keyboard
2081  gameKeyMap->addAction(act);
2082 
2083  // I18N: Displays a debug FPS counter
2084  act = new Action("DBGFPS", _("Debug FPS"));
2085  act->setKeyEvent(KEYCODE_F2);
2086  act->addDefaultInputMapping("F2"); // original keyboard
2087  gameKeyMap->addAction(act);
2088  } else if (gameId == "zbang") {
2089  act = new Action("ACTNXT", _("Next action"));
2090  act->setMouseWheelUpEvent();
2091  act->addDefaultInputMapping("MOUSE_RIGHT"); // original mouse
2092  act->addDefaultInputMapping("RIGHTBRACKET"); // original keyboard
2093  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
2094  act->addDefaultInputMapping("JOY_B"); // extra joy
2095  gameKeyMap->addAction(act);
2096 
2097  act = new Action("ACTPRV", _("Previous action"));
2098  act->setMouseWheelDownEvent();
2099  act->addDefaultInputMapping("LEFTBRACKET"); // original keyboard
2100  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
2101  gameKeyMap->addAction(act);
2102 
2103  act = new Action("HINT", _("Show hints"));
2104  act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
2105  act->addDefaultInputMapping("TAB"); // original keyboard
2106  act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
2107  act->addDefaultInputMapping("JOY_Y"); // extra joy
2108  gameKeyMap->addAction(act);
2109 
2110  act = new Action(kStandardActionSkip, _("Skip"));
2111  act->setKeyEvent(KeyState(KEYCODE_PERIOD, '.'));
2112  act->addDefaultInputMapping("PERIOD"); // original keyboard
2113  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
2114  gameKeyMap->addAction(act);
2115 
2116  act = new Action(kStandardActionMoveUp, _("Move Forward"));
2117  act->setKeyEvent(KEYCODE_UP);
2118  act->addDefaultInputMapping("UP"); // original keyboard
2119  act->addDefaultInputMapping("JOY_UP"); // extra joy
2120  gameKeyMap->addAction(act);
2121 
2122  act = new Action(kStandardActionMoveLeft, _("Turn left"));
2123  act->setKeyEvent(KEYCODE_LEFT);
2124  act->addDefaultInputMapping("LEFT"); // original keyboard
2125  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
2126  gameKeyMap->addAction(act);
2127 
2128  act = new Action(kStandardActionMoveRight, _("Turn right"));
2129  act->setKeyEvent(KEYCODE_RIGHT);
2130  act->addDefaultInputMapping("RIGHT"); // original keyboard
2131  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
2132  gameKeyMap->addAction(act);
2133  } else {
2134  warning("Autogenerated keymap for unknown WME game, id '%s', target '%s'", gameId.c_str(), target);
2135 
2136  act = new Action("SPACE", _("Space"));
2137  act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
2138  act->addDefaultInputMapping("SPACE"); // original keyboard
2139  act->addDefaultInputMapping("JOY_Y"); // extra joy
2140  gameKeyMap->addAction(act);
2141 
2142  act = new Action(kStandardActionMoveLeft, _("Left"));
2143  act->setKeyEvent(KEYCODE_LEFT);
2144  act->addDefaultInputMapping("LEFT"); // original keyboard
2145  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
2146  gameKeyMap->addAction(act);
2147 
2148  act = new Action(kStandardActionMoveRight, _("Right"));
2149  act->setKeyEvent(KEYCODE_RIGHT);
2150  act->addDefaultInputMapping("RIGHT"); // original keyboard
2151  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
2152  gameKeyMap->addAction(act);
2153 
2154  act = new Action(kStandardActionMoveUp, _("Up"));
2155  act->setKeyEvent(KEYCODE_UP);
2156  act->addDefaultInputMapping("UP"); // original keyboard
2157  act->addDefaultInputMapping("JOY_UP"); // extra joy
2158  gameKeyMap->addAction(act);
2159 
2160  act = new Action(kStandardActionMoveDown, _("Down"));
2161  act->setKeyEvent(KEYCODE_DOWN);
2162  act->addDefaultInputMapping("DOWN"); // original keyboard
2163  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
2164  gameKeyMap->addAction(act);
2165 
2166  act = new Action(kStandardActionMiddleClick, _("Middle Click"));
2167  act->setMiddleClickEvent();
2168  act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
2169  gameKeyMap->addAction(act);
2170 
2171  act = new Action("SCRLUP", _("Scroll up"));
2172  act->setMouseWheelUpEvent();
2173  act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
2174  gameKeyMap->addAction(act);
2175 
2176  act = new Action("SCRLDN", _("Scroll down"));
2177  act->setMouseWheelDownEvent();
2178  act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
2179  gameKeyMap->addAction(act);
2180 
2181  act = new Action("KEYF1", _("F1"));
2182  act->setKeyEvent(KEYCODE_F1);
2183  act->addDefaultInputMapping("F1"); // original keyboard
2184  gameKeyMap->addAction(act);
2185 
2186  act = new Action("KEYI", _("Key i"));
2187  act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
2188  act->addDefaultInputMapping("i"); // original keyboard
2189  gameKeyMap->addAction(act);
2190 
2191  act = new Action("TAB", _("Tab"));
2192  act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
2193  act->addDefaultInputMapping("TAB"); // original keyboard
2194  gameKeyMap->addAction(act);
2195  }
2196  result.push_back(gameKeyMap);
2197 
2198 
2199  if (gameId == "carolreed4" ||
2200  gameId == "carolreed5" ||
2201  gameId == "carolreed6" ||
2202  gameId == "carolreed7" ||
2203  gameId == "carolreed8" ||
2204  gameId == "carolreed9" ||
2205  gameId == "carolreed10" ||
2206  gameId == "carolreed11" ||
2207  gameId == "carolreed12" ||
2208  gameId == "carolreed13" ||
2209  gameId == "carolreed14" ||
2210  gameId == "carolreed15" ||
2211  gameId == "carolreed16" ||
2212  gameId == "corrosion" ||
2213  gameId == "rebeccacarlson1" ||
2214  gameId == "rhiannon"
2215  ) {
2216  act = new Action(kStandardActionMoveUp, _("Move Forward"));
2217  act->setCustomEngineActionEvent(kClickAtEntityNearestToCenter);
2218  act->addDefaultInputMapping("UP"); // extra keyboard
2219  act->addDefaultInputMapping("KP5"); // extra keyboard
2220  act->addDefaultInputMapping("JOY_UP"); // extra joy
2221  extraKeyMap->addAction(act);
2222 
2223  act = new Action(kStandardActionMoveLeft, _("Turn left"));
2224  act->setCustomEngineActionEvent(kClickAtLeft);
2225  act->addDefaultInputMapping("LEFT"); // extra keyboard
2226  act->addDefaultInputMapping("KP4"); // extra keyboard
2227  act->addDefaultInputMapping("JOY_LEFT"); // extra joy
2228  extraKeyMap->addAction(act);
2229 
2230  act = new Action(kStandardActionMoveRight, _("Turn right"));
2231  act->setCustomEngineActionEvent(kClickAtRight);
2232  act->addDefaultInputMapping("RIGHT"); // extra keyboard
2233  act->addDefaultInputMapping("KP6"); // extra keyboard
2234  act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
2235  extraKeyMap->addAction(act);
2236 
2237  if (gameId != "rhiannon") {
2238  act = new Action(kStandardActionMoveDown, _("Move Backwards"));
2239  act->setCustomEngineActionEvent(kClickAtBottom);
2240  act->addDefaultInputMapping("DOWN"); // extra keyboard
2241  act->addDefaultInputMapping("KP2"); // extra keyboard
2242  act->addDefaultInputMapping("JOY_DOWN"); // extra joy
2243  extraKeyMap->addAction(act);
2244  }
2245  }
2246  result.push_back(extraKeyMap);
2247 
2248  return result;
2249 
2250 }
2251 
2252 } // End of namespace Wintermute
Definition: keymap.h:66
Definition: str.h:59
Definition: action.h:41
void warning(MSVC_PRINTF const char *s,...) GCC_PRINTF(1
Definition: array.h:52
void addAction(Action *action)
A set of well known keymapper actions.
void push_back(const T &element)
Definition: array.h:180
void addDefaultInputMapping(const String &hwId)
Definition: algorithm.h:29
Definition: keyboard.h:294
Definition: achievements_tables.h:27