GCC Code Coverage Report
Directory: src/ Exec Total Coverage
File: src/input/inputactionmap.h Lines: 2 2 100.0 %
Date: 2020-06-04 Branches: 672 1344 50.0 %

Line Branch Exec Source
1
/*
2
 *  The ManaPlus Client
3
 *  Copyright (C) 2007  Joshua Langley <[email protected]>
4
 *  Copyright (C) 2009-2010  The Mana Developers
5
 *  Copyright (C) 2011-2019  The ManaPlus Developers
6
 *
7
 *  This file is part of The ManaPlus Client.
8
 *
9
 *  This program is free software; you can redistribute it and/or modify
10
 *  it under the terms of the GNU General Public License as published by
11
 *  the Free Software Foundation; either version 2 of the License, or
12
 *  any later version.
13
 *
14
 *  This program is distributed in the hope that it will be useful,
15
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 *  GNU General Public License for more details.
18
 *
19
 *  You should have received a copy of the GNU General Public License
20
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
 */
22
23
#ifndef INPUT_INPUTACTIONMAP_H
24
#define INPUT_INPUTACTIONMAP_H
25
26
#include "sdlshared.h"
27
28
#include "actions/actions.h"
29
#include "actions/chat.h"
30
#include "actions/commands.h"
31
#include "actions/move.h"
32
#include "actions/pets.h"
33
#include "actions/statusbar.h"
34
#include "actions/tabs.h"
35
#include "actions/target.h"
36
#include "actions/windows.h"
37
38
#include "enums/input/inputcondition.h"
39
#include "enums/input/inputgroup.h"
40
41
#include "input/inputactiondata.h"
42
#include "input/inputmanager.h"
43
44
#include "localconsts.h"
45
46
#define defaultAction(name) \
47
        InputType::UNKNOWN, -1, \
48
        InputType::UNKNOWN, -1, \
49
        Input::GRP_DEFAULT, \
50
        name, \
51
        InputAction::NO_VALUE, 50
52
53
#define addKey(name) InputType::KEYBOARD, name
54
#define emptyKey InputType::UNKNOWN, -1
55
#define joystickButton(num) InputType::JOYSTICK, num
56
57
// keyData must be in same order as enum keyAction.
58
6
static const InputActionData inputActionData
59
    [CAST_SIZE(InputAction::TOTAL)] =
60
    {
61
    {"keyMoveUp",
62
        addKey(SDLK_UP),
63
        emptyKey,
64
        Input::GRP_DEFAULT,
65
        &Actions::moveUp,
66
        InputAction::NO_VALUE, 50,
67
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
68
        "",
69
        UseArgs_false,
70
        Protected_false},
71
    {"keyMoveDown",
72
        addKey(SDLK_DOWN),
73
        emptyKey,
74
        Input::GRP_DEFAULT,
75
        &Actions::moveDown,
76
        InputAction::NO_VALUE, 50,
77
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
78
        "",
79
        UseArgs_false,
80
        Protected_false},
81
    {"keyMoveLeft",
82
        addKey(SDLK_LEFT),
83
        emptyKey,
84
        Input::GRP_DEFAULT,
85
        &Actions::moveLeft,
86
        InputAction::NO_VALUE, 50,
87
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
88
        "",
89
        UseArgs_false,
90
        Protected_false},
91
    {"keyMoveRight",
92
        addKey(SDLK_RIGHT),
93
        emptyKey,
94
        Input::GRP_DEFAULT,
95
        &Actions::moveRight,
96
        InputAction::NO_VALUE, 50,
97
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
98
        "",
99
        UseArgs_false,
100
        Protected_false},
101
    {"keyAttack",
102
        addKey(SDLK_x),
103
#ifdef __SWITCH__
104
        joystickButton(9),
105
#else
106
        emptyKey,
107
#endif
108
        Input::GRP_DEFAULT | Input::GRP_REPEAT,
109
        &Actions::attack,
110
        InputAction::NO_VALUE, 50,
111
        InputCondition::KEY_DOWN |
112
            InputCondition::GAME |
113
            InputCondition::NOFOLLOW |
114
            InputCondition::VALIDSPEED,
115
        "attack",
116
        UseArgs_false,
117
        Protected_false},
118
    {"keyTargetAttack",
119
        addKey(SDLK_LCTRL),
120
        joystickButton(0),
121
        Input::GRP_DEFAULT,
122
        &Actions::targetAttack,
123
        InputAction::NO_VALUE, 50,
124
        InputCondition::KEY_DOWN |
125
            InputCondition::GAME |
126
            InputCondition::NOFOLLOW |
127
            InputCondition::VALIDSPEED |
128
            InputCondition::ALIVE,
129
        "targetattack",
130
        UseArgs_true,
131
        Protected_false},
132
    {"keyMoveToTarget",
133
        addKey(SDLK_v),
134
#ifdef __SWITCH__
135
        joystickButton(3),
136
#else
137
        emptyKey,
138
#endif
139
        Input::GRP_DEFAULT,
140
        &Actions::moveToTarget,
141
        InputAction::NO_VALUE, 50,
142
        InputCondition::KEY_DOWN |
143
            InputCondition::GAME |
144
            InputCondition::VALIDSPEED,
145
        "movetotarget",
146
        UseArgs_false,
147
        Protected_false},
148
    {"keyChangeMoveToTarget",
149
        addKey(SDLK_PERIOD),
150
        emptyKey,
151
        Input::GRP_DEFAULT,
152
        &Actions::changeMoveToTarget,
153
        InputAction::NO_VALUE, 50,
154
        InputCondition::KEY_DOWN |
155
            InputCondition::GAME |
156
            InputCondition::VALIDSPEED |
157
            InputCondition::EMODS,
158
        "",
159
        UseArgs_false,
160
        Protected_true},
161
    {"keyMoveToHome",
162
        addKey(SDLK_d),
163
        emptyKey,
164
        Input::GRP_DEFAULT,
165
        &Actions::moveToHome,
166
        InputAction::NO_VALUE, 50,
167
        InputCondition::KEY_DOWN |
168
            InputCondition::GAME |
169
            InputCondition::VALIDSPEED,
170
        "movetohome",
171
        UseArgs_false,
172
        Protected_false},
173
    {"keySetHome",
174
        addKey(SDLK_KP5),
175
        emptyKey,
176
        Input::GRP_DEFAULT,
177
        &Actions::setHome,
178
        InputAction::NO_VALUE, 50,
179
        InputCondition::KEY_DOWN |
180
            InputCondition::GAME |
181
            InputCondition::VALIDSPEED,
182
        "sethome",
183
        UseArgs_false,
184
        Protected_true},
185
    {"keyMoveToPoint",
186
        addKey(SDLK_RSHIFT),
187
        emptyKey,
188
        Input::GRP_DEFAULT,
189
        nullptr,
190
        InputAction::NO_VALUE, 50,
191
        InputCondition::KEY_DOWN |
192
            InputCondition::DEFAULT |
193
            InputCondition::INGAME,
194
        "",
195
        UseArgs_false,
196
        Protected_false},
197
    {"keyTalk",
198
        addKey(SDLK_t),
199
#ifdef __SWITCH__
200
        joystickButton(8),
201
#else
202
        emptyKey,
203
#endif
204
        Input::GRP_DEFAULT,
205
        &Actions::talk,
206
        InputAction::NO_VALUE, 50,
207
        InputCondition::KEY_DOWN | InputCondition::GAME,
208
        "talk",
209
        UseArgs_false,
210
        Protected_false},
211
    {"keyTarget",
212
        addKey(SDLK_LSHIFT),
213
#ifdef __SWITCH__
214
        emptyKey,
215
#else
216
        joystickButton(4),
217
#endif
218
        Input::GRP_DEFAULT,
219
        &Actions::stopAttack,
220
        InputAction::NO_VALUE, 50,
221
        InputCondition::KEY_DOWN | InputCondition::GAME,
222
        "stopattack",
223
        UseArgs_false,
224
        Protected_false},
225
    {"keyUnTarget",
226
        defaultAction(&Actions::untarget),
227
        InputCondition::KEY_DOWN | InputCondition::GAME,
228
        "untarget",
229
        UseArgs_false,
230
        Protected_false},
231
    {"keyTargetMonster",
232
        addKey(SDLK_a),
233
#ifdef __SWITCH__
234
        joystickButton(7),
235
#else
236
        joystickButton(3),
237
#endif
238
        Input::GRP_DEFAULT | Input::GRP_REPEAT,
239
        &Actions::targetMonster,
240
        InputAction::NO_VALUE, 50,
241
        InputCondition::KEY_DOWN |
242
            InputCondition::GAME |
243
            InputCondition::NOTARGET |
244
            InputCondition::VALIDSPEED,
245
        "targetmonster",
246
        UseArgs_false,
247
        Protected_false},
248
    {"keyTargetNPC",
249
        addKey(SDLK_n),
250
#ifdef __SWITCH__
251
        joystickButton(6),
252
#else
253
        emptyKey,
254
#endif
255
        Input::GRP_DEFAULT,
256
        &Actions::targetNPC,
257
        InputAction::NO_VALUE, 50,
258
        InputCondition::KEY_DOWN |
259
            InputCondition::GAME |
260
            InputCondition::NOTARGET,
261
        "targetnpc",
262
        UseArgs_false,
263
        Protected_false},
264
    {"keyTargetPlayer",
265
        addKey(SDLK_q),
266
        emptyKey,
267
        Input::GRP_DEFAULT,
268
        &Actions::targetPlayer,
269
        InputAction::NO_VALUE, 50,
270
        InputCondition::KEY_DOWN |
271
            InputCondition::GAME |
272
            InputCondition::NOTARGET,
273
        "targetplayer",
274
        UseArgs_false,
275
        Protected_false},
276
    {"keyPickup",
277
        addKey(SDLK_z),
278
#ifdef __SWITCH__
279
        joystickButton(2),
280
#else
281
        joystickButton(1),
282
#endif
283
        Input::GRP_DEFAULT,
284
        &Actions::pickup,
285
        InputAction::NO_VALUE, 50,
286
        InputCondition::KEY_DOWN |
287
            InputCondition::GAME |
288
            InputCondition::NOTARGET,
289
        "pickup",
290
        UseArgs_false,
291
        Protected_false},
292
    {"keyChangePickupType",
293
        addKey(SDLK_o),
294
        emptyKey,
295
        Input::GRP_DEFAULT,
296
        &Actions::changePickupType,
297
        InputAction::NO_VALUE, 50,
298
        InputCondition::KEY_DOWN |
299
            InputCondition::GAME |
300
            InputCondition::VALIDSPEED |
301
            InputCondition::EMODS,
302
        "",
303
        UseArgs_false,
304
        Protected_true},
305
    {"keyHideWindows",
306
        addKey(SDLK_h),
307
        emptyKey,
308
        Input::GRP_DEFAULT | Input::GRP_GUI,
309
        &Actions::hideWindows,
310
        InputAction::NO_VALUE, 50,
311
        InputCondition::KEY_DOWN |
312
            InputCondition::GAME |
313
            InputCondition::NOTARGET,
314
        "hidewindows",
315
        UseArgs_false,
316
        Protected_true},
317
    {"keyBeingSit",
318
        addKey(SDLK_s),
319
#ifdef __SWITCH__
320
        emptyKey,
321
#else
322
        joystickButton(2),
323
#endif
324
        Input::GRP_DEFAULT,
325
        &Actions::sit,
326
        InputAction::NO_VALUE, 50,
327
        InputCondition::KEY_DOWN |
328
            InputCondition::GAME |
329
            InputCondition::NOTARGET |
330
            InputCondition::NOBLOCK,
331
        "sit",
332
        UseArgs_false,
333
        Protected_false},
334
    {"keyScreenshot",
335
        addKey(SDLK_p),
336
        emptyKey,
337
        Input::GRP_DEFAULT,
338
        &Actions::screenshot,
339
        InputAction::NO_VALUE, 50,
340
        InputCondition::KEY_DOWN |
341
            InputCondition::NOTARGET |
342
            InputCondition::NOINPUT,
343
        "screenshot",
344
        UseArgs_false,
345
        Protected_true},
346
    {"keyTrade",
347
        addKey(SDLK_r),
348
        emptyKey,
349
        Input::GRP_DEFAULT,
350
        &Actions::changeTrade,
351
        InputAction::NO_VALUE, 50,
352
        InputCondition::KEY_DOWN |
353
            InputCondition::GAME |
354
            InputCondition::NOTARGET,
355
        "changetrade",
356
        UseArgs_false,
357
        Protected_true},
358
    {"keyPathfind",
359
        addKey(SDLK_f),
360
        emptyKey,
361
        Input::GRP_DEFAULT,
362
        &Actions::changeMapMode,
363
        InputAction::NO_VALUE, 50,
364
        InputCondition::KEY_DOWN |
365
            InputCondition::GAME |
366
            InputCondition::NOTARGET |
367
            InputCondition::EMODS,
368
        "",
369
        UseArgs_false,
370
        Protected_false},
371
    {"keyOK",
372
        addKey(SDLK_SPACE),
373
        emptyKey,
374
        Input::GRP_DEFAULT | Input::GRP_GUI,
375
        &Actions::ok,
376
        InputAction::NO_VALUE, 50,
377
        InputCondition::KEY_DOWN |
378
            InputCondition::NOMODAL |
379
            InputCondition::NOAWAY |
380
            InputCondition::NONPCINPUT,
381
        "",
382
        UseArgs_false,
383
        Protected_false},
384
    {"keyQuit",
385
        addKey(SDLK_ESCAPE),
386
#if defined(USE_SDL2)
387
#if defined(ANDROID)
388
        addKey(SDLK_AC_BACK),
389
#elif defined(__SWITCH__)
390
        joystickButton(11),
391
#else  // defined(ANDROID)
392
        emptyKey,
393
#endif  // defined(ANDROID)
394
#else  // defined(USE_SDL2)
395
        emptyKey,
396
#endif  // defined(USE_SDL2)
397
        Input::GRP_DEFAULT,
398
        &Actions::quit,
399
        InputAction::NO_VALUE, 50,
400
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
401
        "quit",
402
        UseArgs_false,
403
        Protected_true},
404
    {"keyShortcutsKey",
405
        addKey(SDLK_MENU),
406
        emptyKey,
407
        Input::GRP_DEFAULT,
408
        nullptr,
409
        InputAction::NO_VALUE, 50,
410
        InputCondition::KEY_DOWN |
411
            InputCondition::DEFAULT |
412
            InputCondition::INGAME,
413
        "",
414
        UseArgs_false,
415
        Protected_true},
416
    {"keyShortcut1",
417
        addKey(SDLK_1),
418
        emptyKey,
419
        Input::GRP_DEFAULT,
420
        &Actions::shortcut,
421
        InputAction::NO_VALUE, 50,
422
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
423
        "",
424
        UseArgs_false,
425
        Protected_true},
426
    {"keyShortcut2",
427
        addKey(SDLK_2),
428
        emptyKey,
429
        Input::GRP_DEFAULT,
430
        &Actions::shortcut,
431
        InputAction::NO_VALUE, 50,
432
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
433
        "",
434
        UseArgs_false,
435
        Protected_true},
436
    {"keyShortcut3",
437
        addKey(SDLK_3),
438
        emptyKey,
439
        Input::GRP_DEFAULT,
440
        &Actions::shortcut,
441
        InputAction::NO_VALUE, 50,
442
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
443
        "",
444
        UseArgs_false,
445
        Protected_true},
446
    {"keyShortcut4",
447
        addKey(SDLK_4),
448
        emptyKey,
449
        Input::GRP_DEFAULT,
450
        &Actions::shortcut,
451
        InputAction::NO_VALUE, 50,
452
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
453
        "",
454
        UseArgs_false,
455
        Protected_true},
456
    {"keyShortcut5",
457
        addKey(SDLK_5),
458
        emptyKey,
459
        Input::GRP_DEFAULT,
460
        &Actions::shortcut,
461
        InputAction::NO_VALUE, 50,
462
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
463
        "",
464
        UseArgs_false,
465
        Protected_true},
466
    {"keyShortcut6",
467
        addKey(SDLK_6),
468
        emptyKey,
469
        Input::GRP_DEFAULT,
470
        &Actions::shortcut,
471
        InputAction::NO_VALUE, 50,
472
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
473
        "",
474
        UseArgs_false,
475
        Protected_true},
476
    {"keyShortcut7",
477
        addKey(SDLK_7),
478
        emptyKey,
479
        Input::GRP_DEFAULT,
480
        &Actions::shortcut,
481
        InputAction::NO_VALUE, 50,
482
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
483
        "",
484
        UseArgs_false,
485
        Protected_true},
486
    {"keyShortcut8",
487
        addKey(SDLK_8),
488
        emptyKey,
489
        Input::GRP_DEFAULT,
490
        &Actions::shortcut,
491
        InputAction::NO_VALUE, 50,
492
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
493
        "",
494
        UseArgs_false,
495
        Protected_true},
496
    {"keyShortcut9",
497
        addKey(SDLK_9),
498
        emptyKey,
499
        Input::GRP_DEFAULT,
500
        &Actions::shortcut,
501
        InputAction::NO_VALUE, 50,
502
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
503
        "",
504
        UseArgs_false,
505
        Protected_true},
506
    {"keyShortcut10",
507
        addKey(SDLK_0),
508
        emptyKey,
509
        Input::GRP_DEFAULT,
510
        &Actions::shortcut,
511
        InputAction::NO_VALUE, 50,
512
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
513
        "",
514
        UseArgs_false,
515
        Protected_true},
516
    {"keyShortcut11",
517
        addKey(SDLK_MINUS),
518
        emptyKey,
519
        Input::GRP_DEFAULT,
520
        &Actions::shortcut,
521
        InputAction::NO_VALUE, 50,
522
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
523
        "",
524
        UseArgs_false,
525
        Protected_true},
526
    {"keyShortcut12",
527
        addKey(SDLK_EQUALS),
528
        emptyKey,
529
        Input::GRP_DEFAULT,
530
        &Actions::shortcut,
531
        InputAction::NO_VALUE, 50,
532
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
533
        "",
534
        UseArgs_false,
535
        Protected_true},
536
    {"keyShortcut13",
537
        addKey(SDLK_BACKSPACE),
538
        emptyKey,
539
        Input::GRP_DEFAULT,
540
        &Actions::shortcut,
541
        InputAction::NO_VALUE, 50,
542
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
543
        "",
544
        UseArgs_false,
545
        Protected_true},
546
    {"keyShortcut14",
547
        addKey(SDLK_INSERT),
548
        emptyKey,
549
        Input::GRP_DEFAULT,
550
        &Actions::shortcut,
551
        InputAction::NO_VALUE, 50,
552
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
553
        "",
554
        UseArgs_false,
555
        Protected_true},
556
    {"keyShortcut15",
557
        addKey(SDLK_HOME),
558
        emptyKey,
559
        Input::GRP_DEFAULT,
560
        &Actions::shortcut,
561
        InputAction::NO_VALUE, 50,
562
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
563
        "",
564
        UseArgs_false,
565
        Protected_true},
566
    {"keyShortcut16",
567
        defaultAction(&Actions::shortcut),
568
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
569
        "",
570
        UseArgs_false,
571
        Protected_true},
572
    {"keyShortcut17",
573
        defaultAction(&Actions::shortcut),
574
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
575
        "",
576
        UseArgs_false,
577
        Protected_true},
578
    {"keyShortcut18",
579
        defaultAction(&Actions::shortcut),
580
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
581
        "",
582
        UseArgs_false,
583
        Protected_true},
584
    {"keyShortcut19",
585
        defaultAction(&Actions::shortcut),
586
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
587
        "",
588
        UseArgs_false,
589
        Protected_true},
590
    {"keyShortcut20",
591
        defaultAction(&Actions::shortcut),
592
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
593
        "",
594
        UseArgs_false,
595
        Protected_true},
596
    {"keyWindowHelp",
597
        addKey(SDLK_F1),
598
        emptyKey,
599
        Input::GRP_DEFAULT | Input::GRP_GUI,
600
        &Actions::helpWindowShow,
601
        InputAction::NO_VALUE, 50,
602
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
603
        "help|openhelp",
604
        UseArgs_false,
605
        Protected_false},
606
    {"keyWindowStatus",
607
        addKey(SDLK_F2),
608
        emptyKey,
609
        Input::GRP_DEFAULT | Input::GRP_GUI,
610
        &Actions::statusWindowShow,
611
        InputAction::NO_VALUE, 50,
612
        InputCondition::KEY_DOWN |
613
            InputCondition::GAME |
614
            InputCondition::NOTARGET,
615
        "status|openstatus",
616
        UseArgs_false,
617
        Protected_false},
618
    {"keyWindowInventory",
619
        addKey(SDLK_F3),
620
        emptyKey,
621
        Input::GRP_DEFAULT | Input::GRP_GUI,
622
        &Actions::inventoryWindowShow,
623
        InputAction::NO_VALUE, 50,
624
        InputCondition::KEY_DOWN |
625
            InputCondition::GAME |
626
            InputCondition::NOTARGET,
627
        "inventory|openinventory",
628
        UseArgs_false,
629
        Protected_false},
630
    {"keyWindowEquipment",
631
        addKey(SDLK_F4),
632
        emptyKey,
633
        Input::GRP_DEFAULT | Input::GRP_GUI,
634
        &Actions::equipmentWindowShow,
635
        InputAction::NO_VALUE, 50,
636
        InputCondition::KEY_DOWN |
637
            InputCondition::GAME |
638
            InputCondition::NOTARGET,
639
        "equipment|openequipment",
640
        UseArgs_false,
641
        Protected_false},
642
    {"keyWindowSkill",
643
        addKey(SDLK_F5),
644
        emptyKey,
645
        Input::GRP_DEFAULT | Input::GRP_GUI,
646
        &Actions::skillDialogShow,
647
        InputAction::NO_VALUE, 50,
648
        InputCondition::KEY_DOWN |
649
            InputCondition::GAME |
650
            InputCondition::NOTARGET,
651
        "skill|skills|openskills",
652
        UseArgs_false,
653
        Protected_false},
654
    {"keyWindowMinimap",
655
        addKey(SDLK_F6),
656
        emptyKey,
657
        Input::GRP_DEFAULT | Input::GRP_GUI,
658
        &Actions::minimapWindowShow,
659
        InputAction::NO_VALUE, 50,
660
        InputCondition::KEY_DOWN |
661
            InputCondition::GAME |
662
            InputCondition::NOTARGET,
663
        "minimap|openminimap",
664
        UseArgs_false,
665
        Protected_false},
666
    {"keyWindowChat",
667
        addKey(SDLK_F7),
668
        emptyKey,
669
        Input::GRP_DEFAULT | Input::GRP_GUI,
670
        &Actions::chatWindowShow,
671
        InputAction::NO_VALUE, 50,
672
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
673
        "openchat",
674
        UseArgs_false,
675
        Protected_false},
676
    {"keyWindowShortcut",
677
        addKey(SDLK_F8),
678
        emptyKey,
679
        Input::GRP_DEFAULT | Input::GRP_GUI,
680
        &Actions::shortcutWindowShow,
681
        InputAction::NO_VALUE, 50,
682
        InputCondition::KEY_DOWN |
683
            InputCondition::GAME |
684
            InputCondition::NOTARGET,
685
        "openshortcut|openshortcuts",
686
        UseArgs_false,
687
        Protected_false},
688
    {"keyWindowSetup",
689
        addKey(SDLK_F9),
690
        emptyKey,
691
        Input::GRP_DEFAULT | Input::GRP_GUI,
692
        &Actions::setupWindowShow,
693
        InputAction::NO_VALUE, 50,
694
        InputCondition::KEY_DOWN |
695
            InputCondition::NOTARGET |
696
            InputCondition::NOINPUT |
697
            InputCondition::ENABLED,
698
        "setup|opensetup",
699
        UseArgs_false,
700
        Protected_false},
701
    {"keyWindowDebug",
702
        addKey(SDLK_F10),
703
        emptyKey,
704
        Input::GRP_DEFAULT | Input::GRP_GUI,
705
        &Actions::debugWindowShow,
706
        InputAction::NO_VALUE, 50,
707
        InputCondition::KEY_DOWN |
708
            InputCondition::SHORTCUT0 |
709
            InputCondition::NOTARGET,
710
        "debug|opendebug",
711
        UseArgs_false,
712
        Protected_false},
713
    {"keyWindowSocial",
714
        addKey(SDLK_F11),
715
        emptyKey,
716
        Input::GRP_DEFAULT | Input::GRP_GUI,
717
        &Actions::socialWindowShow,
718
        InputAction::NO_VALUE, 50,
719
        InputCondition::KEY_DOWN |
720
            InputCondition::GAME |
721
            InputCondition::NOTARGET,
722
        "social|opensocial",
723
        UseArgs_false,
724
        Protected_false},
725
    {"keyWindowEmoteBar",
726
        addKey(SDLK_F12),
727
        emptyKey,
728
        Input::GRP_DEFAULT | Input::GRP_GUI,
729
        &Actions::emoteShortcutWindowShow,
730
        InputAction::NO_VALUE, 50,
731
        InputCondition::KEY_DOWN |
732
            InputCondition::GAME |
733
            InputCondition::NOTARGET,
734
        "emotes|openemotes",
735
        UseArgs_false,
736
        Protected_false},
737
    {"keyWindowOutfit",
738
        addKey(SDLK_BACKQUOTE),
739
        emptyKey,
740
        Input::GRP_DEFAULT | Input::GRP_GUI,
741
        &Actions::outfitWindowShow,
742
        InputAction::NO_VALUE, 50,
743
        InputCondition::KEY_DOWN |
744
            InputCondition::GAME |
745
            InputCondition::NOTARGET,
746
        "openoutfit|openoutfits",
747
        UseArgs_false,
748
        Protected_false},
749
    {"keyWindowShop",
750
        emptyKey,
751
        emptyKey,
752
        Input::GRP_DEFAULT | Input::GRP_GUI,
753
        &Actions::shopWindowShow,
754
        InputAction::NO_VALUE, 50,
755
        InputCondition::KEY_DOWN |
756
            InputCondition::GAME |
757
            InputCondition::NOTARGET,
758
        "shop|openshop",
759
        UseArgs_false,
760
        Protected_false},
761
    {"keyWindowDrop",
762
        addKey(SDLK_w),
763
        emptyKey,
764
        Input::GRP_DEFAULT | Input::GRP_GUI,
765
        &Actions::dropShortcutWindowShow,
766
        InputAction::NO_VALUE, 50,
767
        InputCondition::KEY_DOWN |
768
            InputCondition::GAME |
769
            InputCondition::NOTARGET,
770
        "opendrop",
771
        UseArgs_false,
772
        Protected_false},
773
    {"keyWindowKills",
774
        addKey(SDLK_e),
775
        emptyKey,
776
        Input::GRP_DEFAULT | Input::GRP_GUI,
777
        &Actions::killStatsWindowShow,
778
        InputAction::NO_VALUE, 50,
779
        InputCondition::KEY_DOWN |
780
            InputCondition::GAME |
781
            InputCondition::NOTARGET,
782
        "kills|openkills",
783
        UseArgs_false,
784
        Protected_false},
785
    {"keyWindowSpells",
786
        addKey(SDLK_j),
787
        emptyKey,
788
        Input::GRP_DEFAULT | Input::GRP_GUI,
789
        &Actions::spellShortcutWindowShow,
790
        InputAction::NO_VALUE, 50,
791
        InputCondition::KEY_DOWN |
792
            InputCondition::GAME |
793
            InputCondition::NOTARGET,
794
        "spells|openspells",
795
        UseArgs_false,
796
        Protected_false},
797
    {"keyWindowBotChecker",
798
        emptyKey,
799
        emptyKey,
800
        Input::GRP_DEFAULT | Input::GRP_GUI,
801
        nullptr,
802
        InputAction::NO_VALUE, 50,
803
        InputCondition::KEY_DOWN |
804
            InputCondition::GAME |
805
            InputCondition::NOTARGET,
806
        "",
807
        UseArgs_false,
808
        Protected_false},
809
    {"keyWindowOnline",
810
        emptyKey,
811
        emptyKey,
812
        Input::GRP_DEFAULT | Input::GRP_GUI,
813
        &Actions::whoIsOnlineWindowShow,
814
        InputAction::NO_VALUE, 50,
815
        InputCondition::KEY_DOWN |
816
            InputCondition::GAME |
817
            InputCondition::NOTARGET,
818
        "online|openonline",
819
        UseArgs_false,
820
        Protected_false},
821
    {"keyWindowDidYouKnow",
822
        emptyKey,
823
        emptyKey,
824
        Input::GRP_DEFAULT | Input::GRP_GUI,
825
        &Actions::didYouKnowWindowShow,
826
        InputAction::NO_VALUE, 50,
827
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
828
        "didyouknow|opendidyouknow",
829
        UseArgs_false,
830
        Protected_false},
831
    {"keyWindowQuests",
832
        addKey(SDLK_LEFTBRACKET),
833
        emptyKey,
834
        Input::GRP_DEFAULT | Input::GRP_GUI,
835
        &Actions::questsWindowShow,
836
        InputAction::NO_VALUE, 50,
837
        InputCondition::KEY_DOWN |
838
            InputCondition::GAME |
839
            InputCondition::NOTARGET,
840
        "quests|openquests",
841
        UseArgs_false,
842
        Protected_false},
843
    {"keySocialPrevTab",
844
        emptyKey,
845
        emptyKey,
846
        Input::GRP_DEFAULT | Input::GRP_GUI,
847
        &Actions::prevSocialTab,
848
        InputAction::NO_VALUE, 50,
849
        InputCondition::KEY_DOWN |
850
            InputCondition::NOINPUT |
851
            InputCondition::INGAME,
852
        "prevsocialtab",
853
        UseArgs_false,
854
        Protected_false},
855
    {"keySocialNextTab",
856
        emptyKey,
857
        emptyKey,
858
        Input::GRP_DEFAULT | Input::GRP_GUI,
859
        &Actions::nextSocialTab,
860
        InputAction::NO_VALUE, 50,
861
        InputCondition::KEY_DOWN |
862
            InputCondition::NOINPUT |
863
            InputCondition::INGAME,
864
        "nextsocialtab",
865
        UseArgs_false,
866
        Protected_false},
867
    {"keySmilie",
868
        addKey(SDLK_LALT),
869
        emptyKey,
870
        Input::GRP_DEFAULT,
871
        nullptr,
872
        InputAction::NO_VALUE, 50,
873
        InputCondition::KEY_DOWN |
874
            InputCondition::DEFAULT |
875
            InputCondition::INGAME,
876
        "",
877
        UseArgs_false,
878
        Protected_true},
879
    {"keyEmoteShortcut1",
880
        addKey(SDLK_1),
881
        emptyKey,
882
        Input::GRP_EMOTION,
883
        &Actions::emote,
884
        InputAction::EMOTE, 100,
885
        InputCondition::KEY_DOWN | InputCondition::GAME,
886
        "",
887
        UseArgs_false,
888
        Protected_true},
889
    {"keyEmoteShortcut2",
890
        addKey(SDLK_2),
891
        emptyKey,
892
        Input::GRP_EMOTION,
893
        &Actions::emote,
894
        InputAction::EMOTE, 100,
895
        InputCondition::KEY_DOWN | InputCondition::GAME,
896
        "",
897
        UseArgs_false,
898
        Protected_true},
899
    {"keyEmoteShortcut3",
900
        addKey(SDLK_3),
901
        emptyKey,
902
        Input::GRP_EMOTION,
903
        &Actions::emote,
904
        InputAction::EMOTE, 100,
905
        InputCondition::KEY_DOWN | InputCondition::GAME,
906
        "",
907
        UseArgs_false,
908
        Protected_true},
909
    {"keyEmoteShortcut4",
910
        addKey(SDLK_4),
911
        emptyKey,
912
        Input::GRP_EMOTION,
913
        &Actions::emote,
914
        InputAction::EMOTE, 100,
915
        InputCondition::KEY_DOWN | InputCondition::GAME,
916
        "",
917
        UseArgs_false,
918
        Protected_true},
919
    {"keyEmoteShortcut5",
920
        addKey(SDLK_5),
921
        emptyKey,
922
        Input::GRP_EMOTION,
923
        &Actions::emote,
924
        InputAction::EMOTE, 100,
925
        InputCondition::KEY_DOWN | InputCondition::GAME,
926
        "",
927
        UseArgs_false,
928
        Protected_true},
929
    {"keyEmoteShortcut6",
930
        addKey(SDLK_6),
931
        emptyKey,
932
        Input::GRP_EMOTION,
933
        &Actions::emote,
934
        InputAction::EMOTE, 100,
935
        InputCondition::KEY_DOWN | InputCondition::GAME,
936
        "",
937
        UseArgs_false,
938
        Protected_true},
939
    {"keyEmoteShortcut7",
940
        addKey(SDLK_7),
941
        emptyKey,
942
        Input::GRP_EMOTION,
943
        &Actions::emote,
944
        InputAction::EMOTE, 100,
945
        InputCondition::KEY_DOWN | InputCondition::GAME,
946
        "",
947
        UseArgs_false,
948
        Protected_true},
949
    {"keyEmoteShortcut8",
950
        addKey(SDLK_8),
951
        emptyKey,
952
        Input::GRP_EMOTION,
953
        &Actions::emote,
954
        InputAction::EMOTE, 100,
955
        InputCondition::KEY_DOWN | InputCondition::GAME,
956
        "",
957
        UseArgs_false,
958
        Protected_true},
959
    {"keyEmoteShortcut9",
960
        addKey(SDLK_9),
961
        emptyKey,
962
        Input::GRP_EMOTION,
963
        &Actions::emote,
964
        InputAction::EMOTE, 100,
965
        InputCondition::KEY_DOWN | InputCondition::GAME,
966
        "",
967
        UseArgs_false,
968
        Protected_true},
969
    {"keyEmoteShortcut10",
970
        addKey(SDLK_0),
971
        emptyKey,
972
        Input::GRP_EMOTION,
973
        &Actions::emote,
974
        InputAction::EMOTE, 100,
975
        InputCondition::KEY_DOWN | InputCondition::GAME,
976
        "",
977
        UseArgs_false,
978
        Protected_true},
979
    {"keyEmoteShortcut11",
980
        addKey(SDLK_MINUS),
981
        emptyKey,
982
        Input::GRP_EMOTION,
983
        &Actions::emote,
984
        InputAction::EMOTE, 100,
985
        InputCondition::KEY_DOWN | InputCondition::GAME,
986
        "",
987
        UseArgs_false,
988
        Protected_true},
989
    {"keyEmoteShortcut12",
990
        addKey(SDLK_EQUALS),
991
        emptyKey,
992
        Input::GRP_EMOTION,
993
        &Actions::emote,
994
        InputAction::EMOTE, 100,
995
        InputCondition::KEY_DOWN | InputCondition::GAME,
996
        "",
997
        UseArgs_false,
998
        Protected_true},
999
    {"keyEmoteShortcut13",
1000
        addKey(SDLK_BACKSPACE),
1001
        emptyKey,
1002
        Input::GRP_EMOTION,
1003
        &Actions::emote,
1004
        InputAction::EMOTE, 100,
1005
        InputCondition::KEY_DOWN | InputCondition::GAME,
1006
        "",
1007
        UseArgs_false,
1008
        Protected_true},
1009
    {"keyEmoteShortcut14",
1010
        addKey(SDLK_INSERT),
1011
        emptyKey,
1012
        Input::GRP_EMOTION,
1013
        &Actions::emote,
1014
        InputAction::EMOTE, 100,
1015
        InputCondition::KEY_DOWN | InputCondition::GAME,
1016
        "",
1017
        UseArgs_false,
1018
        Protected_true},
1019
    {"keyEmoteShortcut15",
1020
        addKey(SDLK_HOME),
1021
        emptyKey,
1022
        Input::GRP_EMOTION,
1023
        &Actions::emote,
1024
        InputAction::EMOTE, 100,
1025
        InputCondition::KEY_DOWN | InputCondition::GAME,
1026
        "",
1027
        UseArgs_false,
1028
        Protected_true},
1029
    {"keyEmoteShortcut16",
1030
        addKey(SDLK_q),
1031
        emptyKey,
1032
        Input::GRP_EMOTION,
1033
        &Actions::emote,
1034
        InputAction::EMOTE, 100,
1035
        InputCondition::KEY_DOWN | InputCondition::GAME,
1036
        "",
1037
        UseArgs_false,
1038
        Protected_true},
1039
    {"keyEmoteShortcut17",
1040
        addKey(SDLK_w),
1041
        emptyKey,
1042
        Input::GRP_EMOTION,
1043
        &Actions::emote,
1044
        InputAction::EMOTE, 100,
1045
        InputCondition::KEY_DOWN | InputCondition::GAME,
1046
        "",
1047
        UseArgs_false,
1048
        Protected_true},
1049
    {"keyEmoteShortcut18",
1050
        addKey(SDLK_e),
1051
        emptyKey,
1052
        Input::GRP_EMOTION,
1053
        &Actions::emote,
1054
        InputAction::EMOTE, 100,
1055
        InputCondition::KEY_DOWN | InputCondition::GAME,
1056
        "",
1057
        UseArgs_false,
1058
        Protected_true},
1059
    {"keyEmoteShortcut19",
1060
        addKey(SDLK_r),
1061
        emptyKey,
1062
        Input::GRP_EMOTION,
1063
        &Actions::emote,
1064
        InputAction::EMOTE, 100,
1065
        InputCondition::KEY_DOWN | InputCondition::GAME,
1066
        "",
1067
        UseArgs_false,
1068
        Protected_true},
1069
    {"keyEmoteShortcut20",
1070
        addKey(SDLK_t),
1071
        emptyKey,
1072
        Input::GRP_EMOTION,
1073
        &Actions::emote,
1074
        InputAction::EMOTE, 100,
1075
        InputCondition::KEY_DOWN | InputCondition::GAME,
1076
        "",
1077
        UseArgs_false,
1078
        Protected_true},
1079
    {"keyEmoteShortcut21",
1080
        addKey(SDLK_y),
1081
        emptyKey,
1082
        Input::GRP_EMOTION,
1083
        &Actions::emote,
1084
        InputAction::EMOTE, 100,
1085
        InputCondition::KEY_DOWN | InputCondition::GAME,
1086
        "",
1087
        UseArgs_false,
1088
        Protected_true},
1089
    {"keyEmoteShortcut22",
1090
        addKey(SDLK_u),
1091
        emptyKey,
1092
        Input::GRP_EMOTION,
1093
        &Actions::emote,
1094
        InputAction::EMOTE, 100,
1095
        InputCondition::KEY_DOWN | InputCondition::GAME,
1096
        "",
1097
        UseArgs_false,
1098
        Protected_true},
1099
    {"keyEmoteShortcut23",
1100
        addKey(SDLK_i),
1101
        emptyKey,
1102
        Input::GRP_EMOTION,
1103
        &Actions::emote,
1104
        InputAction::EMOTE, 100,
1105
        InputCondition::KEY_DOWN | InputCondition::GAME,
1106
        "",
1107
        UseArgs_false,
1108
        Protected_true},
1109
    {"keyEmoteShortcut24",
1110
        addKey(SDLK_o),
1111
        emptyKey,
1112
        Input::GRP_EMOTION,
1113
        &Actions::emote,
1114
        InputAction::EMOTE, 100,
1115
        InputCondition::KEY_DOWN | InputCondition::GAME,
1116
        "",
1117
        UseArgs_false,
1118
        Protected_true},
1119
    {"keyEmoteShortcut25",
1120
        addKey(SDLK_p),
1121
        emptyKey,
1122
        Input::GRP_EMOTION,
1123
        &Actions::emote,
1124
        InputAction::EMOTE, 100,
1125
        InputCondition::KEY_DOWN | InputCondition::GAME,
1126
        "",
1127
        UseArgs_false,
1128
        Protected_true},
1129
    {"keyEmoteShortcut26",
1130
        addKey(SDLK_LEFTBRACKET),
1131
        emptyKey,
1132
        Input::GRP_EMOTION,
1133
        &Actions::emote,
1134
        InputAction::EMOTE, 100,
1135
        InputCondition::KEY_DOWN | InputCondition::GAME,
1136
        "",
1137
        UseArgs_false,
1138
        Protected_true},
1139
    {"keyEmoteShortcut27",
1140
        addKey(SDLK_RIGHTBRACKET),
1141
        emptyKey,
1142
        Input::GRP_EMOTION,
1143
        &Actions::emote,
1144
        InputAction::EMOTE, 100,
1145
        InputCondition::KEY_DOWN | InputCondition::GAME,
1146
        "",
1147
        UseArgs_false,
1148
        Protected_true},
1149
    {"keyEmoteShortcut28",
1150
        addKey(SDLK_BACKSLASH),
1151
        emptyKey,
1152
        Input::GRP_EMOTION,
1153
        &Actions::emote,
1154
        InputAction::EMOTE, 100,
1155
        InputCondition::KEY_DOWN | InputCondition::GAME,
1156
        "",
1157
        UseArgs_false,
1158
        Protected_true},
1159
    {"keyEmoteShortcut29",
1160
        addKey(SDLK_a),
1161
        emptyKey,
1162
        Input::GRP_EMOTION,
1163
        &Actions::emote,
1164
        InputAction::EMOTE, 100,
1165
        InputCondition::KEY_DOWN | InputCondition::GAME,
1166
        "",
1167
        UseArgs_false,
1168
        Protected_true},
1169
    {"keyEmoteShortcut30",
1170
        addKey(SDLK_s),
1171
        emptyKey,
1172
        Input::GRP_EMOTION,
1173
        &Actions::emote,
1174
        InputAction::EMOTE, 100,
1175
        InputCondition::KEY_DOWN | InputCondition::GAME,
1176
        "",
1177
        UseArgs_false,
1178
        Protected_true},
1179
    {"keyEmoteShortcut31",
1180
        addKey(SDLK_d),
1181
        emptyKey,
1182
        Input::GRP_EMOTION,
1183
        &Actions::emote,
1184
        InputAction::EMOTE, 100,
1185
        InputCondition::KEY_DOWN | InputCondition::GAME,
1186
        "",
1187
        UseArgs_false,
1188
        Protected_true},
1189
    {"keyEmoteShortcut32",
1190
        addKey(SDLK_f),
1191
        emptyKey,
1192
        Input::GRP_EMOTION,
1193
        &Actions::emote,
1194
        InputAction::EMOTE, 100,
1195
        InputCondition::KEY_DOWN | InputCondition::GAME,
1196
        "",
1197
        UseArgs_false,
1198
        Protected_true},
1199
    {"keyEmoteShortcut33",
1200
        addKey(SDLK_g),
1201
        emptyKey,
1202
        Input::GRP_EMOTION,
1203
        &Actions::emote,
1204
        InputAction::EMOTE, 100,
1205
        InputCondition::KEY_DOWN | InputCondition::GAME,
1206
        "",
1207
        UseArgs_false,
1208
        Protected_true},
1209
    {"keyEmoteShortcut34",
1210
        addKey(SDLK_h),
1211
        emptyKey,
1212
        Input::GRP_EMOTION,
1213
        &Actions::emote,
1214
        InputAction::EMOTE, 100,
1215
        InputCondition::KEY_DOWN | InputCondition::GAME,
1216
        "",
1217
        UseArgs_false,
1218
        Protected_true},
1219
    {"keyEmoteShortcut35",
1220
        addKey(SDLK_j),
1221
        emptyKey,
1222
        Input::GRP_EMOTION,
1223
        &Actions::emote,
1224
        InputAction::EMOTE, 100,
1225
        InputCondition::KEY_DOWN | InputCondition::GAME,
1226
        "",
1227
        UseArgs_false,
1228
        Protected_true},
1229
    {"keyEmoteShortcut36",
1230
        addKey(SDLK_k),
1231
        emptyKey,
1232
        Input::GRP_EMOTION,
1233
        &Actions::emote,
1234
        InputAction::EMOTE, 100,
1235
        InputCondition::KEY_DOWN | InputCondition::GAME,
1236
        "",
1237
        UseArgs_false,
1238
        Protected_true},
1239
    {"keyEmoteShortcut37",
1240
        addKey(SDLK_l),
1241
        emptyKey,
1242
        Input::GRP_EMOTION,
1243
        &Actions::emote,
1244
        InputAction::EMOTE, 100,
1245
        InputCondition::KEY_DOWN | InputCondition::GAME,
1246
        "",
1247
        UseArgs_false,
1248
        Protected_true},
1249
    {"keyEmoteShortcut38",
1250
        addKey(SDLK_SEMICOLON),
1251
        emptyKey,
1252
        Input::GRP_EMOTION,
1253
        &Actions::emote,
1254
        InputAction::EMOTE, 100,
1255
        InputCondition::KEY_DOWN | InputCondition::GAME,
1256
        "",
1257
        UseArgs_false,
1258
        Protected_true},
1259
    {"keyEmoteShortcut39",
1260
        addKey(SDLK_QUOTE),
1261
        emptyKey,
1262
        Input::GRP_EMOTION,
1263
        &Actions::emote,
1264
        InputAction::EMOTE, 100,
1265
        InputCondition::KEY_DOWN | InputCondition::GAME,
1266
        "",
1267
        UseArgs_false,
1268
        Protected_true},
1269
    {"keyEmoteShortcut40",
1270
        addKey(SDLK_z),
1271
        emptyKey,
1272
        Input::GRP_EMOTION,
1273
        &Actions::emote,
1274
        InputAction::EMOTE, 100,
1275
        InputCondition::KEY_DOWN | InputCondition::GAME,
1276
        "",
1277
        UseArgs_false,
1278
        Protected_true},
1279
    {"keyEmoteShortcut41",
1280
        addKey(SDLK_x),
1281
        emptyKey,
1282
        Input::GRP_EMOTION,
1283
        &Actions::emote,
1284
        InputAction::EMOTE, 100,
1285
        InputCondition::KEY_DOWN | InputCondition::GAME,
1286
        "",
1287
        UseArgs_false,
1288
        Protected_true},
1289
    {"keyEmoteShortcut42",
1290
        addKey(SDLK_c),
1291
        emptyKey,
1292
        Input::GRP_EMOTION,
1293
        &Actions::emote,
1294
        InputAction::EMOTE, 100,
1295
        InputCondition::KEY_DOWN | InputCondition::GAME,
1296
        "",
1297
        UseArgs_false,
1298
        Protected_true},
1299
    {"keyEmoteShortcut43",
1300
        addKey(SDLK_v),
1301
        emptyKey,
1302
        Input::GRP_EMOTION,
1303
        &Actions::emote,
1304
        InputAction::EMOTE, 100,
1305
        InputCondition::KEY_DOWN | InputCondition::GAME,
1306
        "",
1307
        UseArgs_false,
1308
        Protected_true},
1309
    {"keyEmoteShortcut44",
1310
        addKey(SDLK_b),
1311
        emptyKey,
1312
        Input::GRP_EMOTION,
1313
        &Actions::emote,
1314
        InputAction::EMOTE, 100,
1315
        InputCondition::KEY_DOWN | InputCondition::GAME,
1316
        "",
1317
        UseArgs_false,
1318
        Protected_true},
1319
    {"keyEmoteShortcut45",
1320
        addKey(SDLK_n),
1321
        emptyKey,
1322
        Input::GRP_EMOTION,
1323
        &Actions::emote,
1324
        InputAction::EMOTE, 100,
1325
        InputCondition::KEY_DOWN | InputCondition::GAME,
1326
        "",
1327
        UseArgs_false,
1328
        Protected_true},
1329
    {"keyEmoteShortcut46",
1330
        addKey(SDLK_m),
1331
        emptyKey,
1332
        Input::GRP_EMOTION,
1333
        &Actions::emote,
1334
        InputAction::EMOTE, 100,
1335
        InputCondition::KEY_DOWN | InputCondition::GAME,
1336
        "",
1337
        UseArgs_false,
1338
        Protected_true},
1339
    {"keyEmoteShortcut47",
1340
        addKey(SDLK_COMMA),
1341
        emptyKey,
1342
        Input::GRP_EMOTION,
1343
        &Actions::emote,
1344
        InputAction::EMOTE, 100,
1345
        InputCondition::KEY_DOWN | InputCondition::GAME,
1346
        "",
1347
        UseArgs_false,
1348
        Protected_true},
1349
    {"keyEmoteShortcut48",
1350
        addKey(SDLK_PERIOD),
1351
        emptyKey,
1352
        Input::GRP_EMOTION,
1353
        &Actions::emote,
1354
        InputAction::EMOTE, 100,
1355
        InputCondition::KEY_DOWN | InputCondition::GAME,
1356
        "",
1357
        UseArgs_false,
1358
        Protected_true},
1359
    {"keyWearOutfit",
1360
        addKey(SDLK_RCTRL),
1361
        emptyKey,
1362
        Input::GRP_DEFAULT,
1363
        nullptr,
1364
        InputAction::NO_VALUE, 50,
1365
        InputCondition::KEY_DOWN |
1366
            InputCondition::DEFAULT |
1367
            InputCondition::INGAME,
1368
        "",
1369
        UseArgs_false,
1370
        Protected_true},
1371
    {"keyCopyOutfit",
1372
        addKey(SDLK_RALT),
1373
        emptyKey,
1374
        Input::GRP_DEFAULT,
1375
        nullptr,
1376
        InputAction::NO_VALUE, 50,
1377
        InputCondition::KEY_DOWN |
1378
            InputCondition::DEFAULT |
1379
            InputCondition::INGAME,
1380
        "",
1381
        UseArgs_false,
1382
        Protected_true},
1383
    {"keyCopyEquipedOutfit",
1384
        addKey(SDLK_RIGHTBRACKET),
1385
        emptyKey,
1386
        Input::GRP_DEFAULT,
1387
        &Actions::copyEquippedToOutfit,
1388
        InputAction::NO_VALUE, 50,
1389
        InputCondition::KEY_DOWN |
1390
            InputCondition::GAME |
1391
            InputCondition::VALIDSPEED,
1392
        "copyequippedtooutfit|itemstooutfit",
1393
        UseArgs_false,
1394
        Protected_true},
1395
    {"keyOutfitShortcut1",
1396
        addKey(SDLK_1),
1397
        emptyKey,
1398
        Input::GRP_OUTFIT,
1399
        &Actions::outfit,
1400
        InputAction::NO_VALUE, 100,
1401
        InputCondition::KEY_DOWN | InputCondition::GAME,
1402
        "",
1403
        UseArgs_false,
1404
        Protected_true},
1405
    {"keyOutfitShortcut2",
1406
        addKey(SDLK_2),
1407
        emptyKey,
1408
        Input::GRP_OUTFIT,
1409
        &Actions::outfit,
1410
        InputAction::NO_VALUE, 100,
1411
        InputCondition::KEY_DOWN | InputCondition::GAME,
1412
        "",
1413
        UseArgs_false,
1414
        Protected_true},
1415
    {"keyOutfitShortcut3",
1416
        addKey(SDLK_3),
1417
        emptyKey,
1418
        Input::GRP_OUTFIT,
1419
        &Actions::outfit,
1420
        InputAction::NO_VALUE, 100,
1421
        InputCondition::KEY_DOWN | InputCondition::GAME,
1422
        "",
1423
        UseArgs_false,
1424
        Protected_true},
1425
    {"keyOutfitShortcut4",
1426
        addKey(SDLK_4),
1427
        emptyKey,
1428
        Input::GRP_OUTFIT,
1429
        &Actions::outfit,
1430
        InputAction::NO_VALUE, 100,
1431
        InputCondition::KEY_DOWN | InputCondition::GAME,
1432
        "",
1433
        UseArgs_false,
1434
        Protected_true},
1435
    {"keyOutfitShortcut5",
1436
        addKey(SDLK_5),
1437
        emptyKey,
1438
        Input::GRP_OUTFIT,
1439
        &Actions::outfit,
1440
        InputAction::NO_VALUE, 100,
1441
        InputCondition::KEY_DOWN | InputCondition::GAME,
1442
        "",
1443
        UseArgs_false,
1444
        Protected_true},
1445
    {"keyOutfitShortcut6",
1446
        addKey(SDLK_6),
1447
        emptyKey,
1448
        Input::GRP_OUTFIT,
1449
        &Actions::outfit,
1450
        InputAction::NO_VALUE, 100,
1451
        InputCondition::KEY_DOWN | InputCondition::GAME,
1452
        "",
1453
        UseArgs_false,
1454
        Protected_true},
1455
    {"keyOutfitShortcut7",
1456
        addKey(SDLK_7),
1457
        emptyKey,
1458
        Input::GRP_OUTFIT,
1459
        &Actions::outfit,
1460
        InputAction::NO_VALUE, 100,
1461
        InputCondition::KEY_DOWN | InputCondition::GAME,
1462
        "",
1463
        UseArgs_false,
1464
        Protected_true},
1465
    {"keyOutfitShortcut8",
1466
        addKey(SDLK_8),
1467
        emptyKey,
1468
        Input::GRP_OUTFIT,
1469
        &Actions::outfit,
1470
        InputAction::NO_VALUE, 100,
1471
        InputCondition::KEY_DOWN | InputCondition::GAME,
1472
        "",
1473
        UseArgs_false,
1474
        Protected_true},
1475
    {"keyOutfitShortcut9",
1476
        addKey(SDLK_9),
1477
        emptyKey,
1478
        Input::GRP_OUTFIT,
1479
        &Actions::outfit,
1480
        InputAction::NO_VALUE, 100,
1481
        InputCondition::KEY_DOWN | InputCondition::GAME,
1482
        "",
1483
        UseArgs_false,
1484
        Protected_true},
1485
    {"keyOutfitShortcut10",
1486
        addKey(SDLK_0),
1487
        emptyKey,
1488
        Input::GRP_OUTFIT,
1489
        &Actions::outfit,
1490
        InputAction::NO_VALUE, 100,
1491
        InputCondition::KEY_DOWN | InputCondition::GAME,
1492
        "",
1493
        UseArgs_false,
1494
        Protected_true},
1495
    {"keyOutfitShortcut11",
1496
        addKey(SDLK_MINUS),
1497
        emptyKey,
1498
        Input::GRP_OUTFIT,
1499
        &Actions::outfit,
1500
        InputAction::NO_VALUE, 100,
1501
        InputCondition::KEY_DOWN | InputCondition::GAME,
1502
        "",
1503
        UseArgs_false,
1504
        Protected_true},
1505
    {"keyOutfitShortcut12",
1506
        addKey(SDLK_EQUALS),
1507
        emptyKey,
1508
        Input::GRP_OUTFIT,
1509
        &Actions::outfit,
1510
        InputAction::NO_VALUE, 100,
1511
        InputCondition::KEY_DOWN | InputCondition::GAME,
1512
        "",
1513
        UseArgs_false,
1514
        Protected_true},
1515
    {"keyOutfitShortcut13",
1516
        addKey(SDLK_BACKSPACE),
1517
        emptyKey,
1518
        Input::GRP_OUTFIT,
1519
        &Actions::outfit,
1520
        InputAction::NO_VALUE, 100,
1521
        InputCondition::KEY_DOWN | InputCondition::GAME,
1522
        "",
1523
        UseArgs_false,
1524
        Protected_true},
1525
    {"keyOutfitShortcut14",
1526
        addKey(SDLK_INSERT),
1527
        emptyKey,
1528
        Input::GRP_OUTFIT,
1529
        &Actions::outfit,
1530
        InputAction::NO_VALUE, 100,
1531
        InputCondition::KEY_DOWN | InputCondition::GAME,
1532
        "",
1533
        UseArgs_false,
1534
        Protected_true},
1535
    {"keyOutfitShortcut15",
1536
        addKey(SDLK_HOME),
1537
        emptyKey,
1538
        Input::GRP_OUTFIT,
1539
        &Actions::outfit,
1540
        InputAction::NO_VALUE, 100,
1541
        InputCondition::KEY_DOWN | InputCondition::GAME,
1542
        "",
1543
        UseArgs_false,
1544
        Protected_true},
1545
    {"keyOutfitShortcut16",
1546
        addKey(SDLK_q),
1547
        emptyKey,
1548
        Input::GRP_OUTFIT,
1549
        &Actions::outfit,
1550
        InputAction::NO_VALUE, 100,
1551
        InputCondition::KEY_DOWN | InputCondition::GAME,
1552
        "",
1553
        UseArgs_false,
1554
        Protected_true},
1555
    {"keyOutfitShortcut17",
1556
        addKey(SDLK_w),
1557
        emptyKey,
1558
        Input::GRP_OUTFIT,
1559
        &Actions::outfit,
1560
        InputAction::NO_VALUE, 100,
1561
        InputCondition::KEY_DOWN | InputCondition::GAME,
1562
        "",
1563
        UseArgs_false,
1564
        Protected_true},
1565
    {"keyOutfitShortcut18",
1566
        addKey(SDLK_e),
1567
        emptyKey,
1568
        Input::GRP_OUTFIT,
1569
        &Actions::outfit,
1570
        InputAction::NO_VALUE, 100,
1571
        InputCondition::KEY_DOWN | InputCondition::GAME,
1572
        "",
1573
        UseArgs_false,
1574
        Protected_true},
1575
    {"keyOutfitShortcut19",
1576
        addKey(SDLK_r),
1577
        emptyKey,
1578
        Input::GRP_OUTFIT,
1579
        &Actions::outfit,
1580
        InputAction::NO_VALUE, 100,
1581
        InputCondition::KEY_DOWN | InputCondition::GAME,
1582
        "",
1583
        UseArgs_false,
1584
        Protected_true},
1585
    {"keyOutfitShortcut20",
1586
        addKey(SDLK_t),
1587
        emptyKey,
1588
        Input::GRP_OUTFIT,
1589
        &Actions::outfit,
1590
        InputAction::NO_VALUE, 100,
1591
        InputCondition::KEY_DOWN | InputCondition::GAME,
1592
        "",
1593
        UseArgs_false,
1594
        Protected_true},
1595
    {"keyOutfitShortcut21",
1596
        addKey(SDLK_y),
1597
        emptyKey,
1598
        Input::GRP_OUTFIT,
1599
        &Actions::outfit,
1600
        InputAction::NO_VALUE, 100,
1601
        InputCondition::KEY_DOWN | InputCondition::GAME,
1602
        "",
1603
        UseArgs_false,
1604
        Protected_true},
1605
    {"keyOutfitShortcut22",
1606
        addKey(SDLK_u),
1607
        emptyKey,
1608
        Input::GRP_OUTFIT,
1609
        &Actions::outfit,
1610
        InputAction::NO_VALUE, 100,
1611
        InputCondition::KEY_DOWN | InputCondition::GAME,
1612
        "",
1613
        UseArgs_false,
1614
        Protected_true},
1615
    {"keyOutfitShortcut23",
1616
        addKey(SDLK_i),
1617
        emptyKey,
1618
        Input::GRP_OUTFIT,
1619
        &Actions::outfit,
1620
        InputAction::NO_VALUE, 100,
1621
        InputCondition::KEY_DOWN | InputCondition::GAME,
1622
        "",
1623
        UseArgs_false,
1624
        Protected_true},
1625
    {"keyOutfitShortcut24",
1626
        addKey(SDLK_o),
1627
        emptyKey,
1628
        Input::GRP_OUTFIT,
1629
        &Actions::outfit,
1630
        InputAction::NO_VALUE, 100,
1631
        InputCondition::KEY_DOWN | InputCondition::GAME,
1632
        "",
1633
        UseArgs_false,
1634
        Protected_true},
1635
    {"keyOutfitShortcut25",
1636
        addKey(SDLK_p),
1637
        emptyKey,
1638
        Input::GRP_OUTFIT,
1639
        &Actions::outfit,
1640
        InputAction::NO_VALUE, 100,
1641
        InputCondition::KEY_DOWN | InputCondition::GAME,
1642
        "",
1643
        UseArgs_false,
1644
        Protected_true},
1645
    {"keyOutfitShortcut26",
1646
        addKey(SDLK_LEFTBRACKET),
1647
        emptyKey,
1648
        Input::GRP_OUTFIT,
1649
        &Actions::outfit,
1650
        InputAction::NO_VALUE, 100,
1651
        InputCondition::KEY_DOWN | InputCondition::GAME,
1652
        "",
1653
        UseArgs_false,
1654
        Protected_true},
1655
    {"keyOutfitShortcut27",
1656
        addKey(SDLK_RIGHTBRACKET),
1657
        emptyKey,
1658
        Input::GRP_OUTFIT,
1659
        &Actions::outfit,
1660
        InputAction::NO_VALUE, 100,
1661
        InputCondition::KEY_DOWN | InputCondition::GAME,
1662
        "",
1663
        UseArgs_false,
1664
        Protected_true},
1665
    {"keyOutfitShortcut28",
1666
        addKey(SDLK_BACKSLASH),
1667
        emptyKey,
1668
        Input::GRP_OUTFIT,
1669
        &Actions::outfit,
1670
        InputAction::NO_VALUE, 100,
1671
        InputCondition::KEY_DOWN | InputCondition::GAME,
1672
        "",
1673
        UseArgs_false,
1674
        Protected_true},
1675
    {"keyOutfitShortcut29",
1676
        addKey(SDLK_a),
1677
        emptyKey,
1678
        Input::GRP_OUTFIT,
1679
        &Actions::outfit,
1680
        InputAction::NO_VALUE, 100,
1681
        InputCondition::KEY_DOWN | InputCondition::GAME,
1682
        "",
1683
        UseArgs_false,
1684
        Protected_true},
1685
    {"keyOutfitShortcut30",
1686
        addKey(SDLK_s),
1687
        emptyKey,
1688
        Input::GRP_OUTFIT,
1689
        &Actions::outfit,
1690
        InputAction::NO_VALUE, 100,
1691
        InputCondition::KEY_DOWN | InputCondition::GAME,
1692
        "",
1693
        UseArgs_false,
1694
        Protected_true},
1695
    {"keyOutfitShortcut31",
1696
        addKey(SDLK_d),
1697
        emptyKey,
1698
        Input::GRP_OUTFIT,
1699
        &Actions::outfit,
1700
        InputAction::NO_VALUE, 100,
1701
        InputCondition::KEY_DOWN | InputCondition::GAME,
1702
        "",
1703
        UseArgs_false,
1704
        Protected_true},
1705
    {"keyOutfitShortcut32",
1706
        addKey(SDLK_f),
1707
        emptyKey,
1708
        Input::GRP_OUTFIT,
1709
        &Actions::outfit,
1710
        InputAction::NO_VALUE, 100,
1711
        InputCondition::KEY_DOWN | InputCondition::GAME,
1712
        "",
1713
        UseArgs_false,
1714
        Protected_true},
1715
    {"keyOutfitShortcut33",
1716
        addKey(SDLK_g),
1717
        emptyKey,
1718
        Input::GRP_OUTFIT,
1719
        &Actions::outfit,
1720
        InputAction::NO_VALUE, 100,
1721
        InputCondition::KEY_DOWN | InputCondition::GAME,
1722
        "",
1723
        UseArgs_false,
1724
        Protected_true},
1725
    {"keyOutfitShortcut34",
1726
        addKey(SDLK_h),
1727
        emptyKey,
1728
        Input::GRP_OUTFIT,
1729
        &Actions::outfit,
1730
        InputAction::NO_VALUE, 100,
1731
        InputCondition::KEY_DOWN | InputCondition::GAME,
1732
        "",
1733
        UseArgs_false,
1734
        Protected_true},
1735
    {"keyOutfitShortcut35",
1736
        addKey(SDLK_j),
1737
        emptyKey,
1738
        Input::GRP_OUTFIT,
1739
        &Actions::outfit,
1740
        InputAction::NO_VALUE, 100,
1741
        InputCondition::KEY_DOWN | InputCondition::GAME,
1742
        "",
1743
        UseArgs_false,
1744
        Protected_true},
1745
    {"keyOutfitShortcut36",
1746
        addKey(SDLK_k),
1747
        emptyKey,
1748
        Input::GRP_OUTFIT,
1749
        &Actions::outfit,
1750
        InputAction::NO_VALUE, 100,
1751
        InputCondition::KEY_DOWN | InputCondition::GAME,
1752
        "",
1753
        UseArgs_false,
1754
        Protected_true},
1755
    {"keyOutfitShortcut37",
1756
        addKey(SDLK_l),
1757
        emptyKey,
1758
        Input::GRP_OUTFIT,
1759
        &Actions::outfit,
1760
        InputAction::NO_VALUE, 100,
1761
        InputCondition::KEY_DOWN | InputCondition::GAME,
1762
        "",
1763
        UseArgs_false,
1764
        Protected_true},
1765
    {"keyOutfitShortcut38",
1766
        addKey(SDLK_SEMICOLON),
1767
        emptyKey,
1768
        Input::GRP_OUTFIT,
1769
        &Actions::outfit,
1770
        InputAction::NO_VALUE, 100,
1771
        InputCondition::KEY_DOWN | InputCondition::GAME,
1772
        "",
1773
        UseArgs_false,
1774
        Protected_true},
1775
    {"keyOutfitShortcut39",
1776
        addKey(SDLK_QUOTE),
1777
        emptyKey,
1778
        Input::GRP_OUTFIT,
1779
        &Actions::outfit,
1780
        InputAction::NO_VALUE, 100,
1781
        InputCondition::KEY_DOWN | InputCondition::GAME,
1782
        "",
1783
        UseArgs_false,
1784
        Protected_true},
1785
    {"keyOutfitShortcut40",
1786
        addKey(SDLK_z),
1787
        emptyKey,
1788
        Input::GRP_OUTFIT,
1789
        &Actions::outfit,
1790
        InputAction::NO_VALUE, 100,
1791
        InputCondition::KEY_DOWN | InputCondition::GAME,
1792
        "",
1793
        UseArgs_false,
1794
        Protected_true},
1795
    {"keyOutfitShortcut41",
1796
        addKey(SDLK_x),
1797
        emptyKey,
1798
        Input::GRP_OUTFIT,
1799
        &Actions::outfit,
1800
        InputAction::NO_VALUE, 100,
1801
        InputCondition::KEY_DOWN | InputCondition::GAME,
1802
        "",
1803
        UseArgs_false,
1804
        Protected_true},
1805
    {"keyOutfitShortcut42",
1806
        addKey(SDLK_c),
1807
        emptyKey,
1808
        Input::GRP_OUTFIT,
1809
        &Actions::outfit,
1810
        InputAction::NO_VALUE, 100,
1811
        InputCondition::KEY_DOWN | InputCondition::GAME,
1812
        "",
1813
        UseArgs_false,
1814
        Protected_true},
1815
    {"keyOutfitShortcut43",
1816
        addKey(SDLK_v),
1817
        emptyKey,
1818
        Input::GRP_OUTFIT,
1819
        &Actions::outfit,
1820
        InputAction::NO_VALUE, 100,
1821
        InputCondition::KEY_DOWN | InputCondition::GAME,
1822
        "",
1823
        UseArgs_false,
1824
        Protected_true},
1825
    {"keyOutfitShortcut44",
1826
        addKey(SDLK_b),
1827
        emptyKey,
1828
        Input::GRP_OUTFIT,
1829
        &Actions::outfit,
1830
        InputAction::NO_VALUE, 100,
1831
        InputCondition::KEY_DOWN | InputCondition::GAME,
1832
        "",
1833
        UseArgs_false,
1834
        Protected_true},
1835
    {"keyOutfitShortcut45",
1836
        addKey(SDLK_n),
1837
        emptyKey,
1838
        Input::GRP_OUTFIT,
1839
        &Actions::outfit,
1840
        InputAction::NO_VALUE, 100,
1841
        InputCondition::KEY_DOWN | InputCondition::GAME,
1842
        "",
1843
        UseArgs_false,
1844
        Protected_true},
1845
    {"keyOutfitShortcut46",
1846
        addKey(SDLK_m),
1847
        emptyKey,
1848
        Input::GRP_OUTFIT,
1849
        &Actions::outfit,
1850
        InputAction::NO_VALUE, 100,
1851
        InputCondition::KEY_DOWN | InputCondition::GAME,
1852
        "",
1853
        UseArgs_false,
1854
        Protected_true},
1855
    {"keyOutfitShortcut47",
1856
        addKey(SDLK_COMMA),
1857
        emptyKey,
1858
        Input::GRP_OUTFIT,
1859
        &Actions::outfit,
1860
        InputAction::NO_VALUE, 100,
1861
        InputCondition::KEY_DOWN | InputCondition::GAME,
1862
        "",
1863
        UseArgs_false,
1864
        Protected_true},
1865
    {"keyOutfitShortcut48",
1866
        addKey(SDLK_PERIOD),
1867
        emptyKey,
1868
        Input::GRP_OUTFIT,
1869
        &Actions::outfit,
1870
        InputAction::NO_VALUE, 100,
1871
        InputCondition::KEY_DOWN | InputCondition::GAME,
1872
        "",
1873
        UseArgs_false,
1874
        Protected_true},
1875
    {"keyMoveToPointShortcut1",
1876
        addKey(SDLK_1),
1877
        emptyKey,
1878
        Input::GRP_MOVETOPOINT,
1879
        &Actions::moveToPoint,
1880
        InputAction::MOVE_TO_POINT, 100,
1881
        InputCondition::KEY_DOWN | InputCondition::GAME,
1882
        "",
1883
        UseArgs_false,
1884
        Protected_true},
1885
    {"keyMoveToPointShortcut2",
1886
        addKey(SDLK_2),
1887
        emptyKey,
1888
        Input::GRP_MOVETOPOINT,
1889
        &Actions::moveToPoint,
1890
        InputAction::MOVE_TO_POINT, 100,
1891
        InputCondition::KEY_DOWN | InputCondition::GAME,
1892
        "",
1893
        UseArgs_false,
1894
        Protected_true},
1895
    {"keyMoveToPointShortcut3",
1896
        addKey(SDLK_3),
1897
        emptyKey,
1898
        Input::GRP_MOVETOPOINT,
1899
        &Actions::moveToPoint,
1900
        InputAction::MOVE_TO_POINT, 100,
1901
        InputCondition::KEY_DOWN | InputCondition::GAME,
1902
        "",
1903
        UseArgs_false,
1904
        Protected_true},
1905
    {"keyMoveToPointShortcut4",
1906
        addKey(SDLK_4),
1907
        emptyKey,
1908
        Input::GRP_MOVETOPOINT,
1909
        &Actions::moveToPoint,
1910
        InputAction::MOVE_TO_POINT, 100,
1911
        InputCondition::KEY_DOWN | InputCondition::GAME,
1912
        "",
1913
        UseArgs_false,
1914
        Protected_true},
1915
    {"keyMoveToPointShortcut5",
1916
        addKey(SDLK_5),
1917
        emptyKey,
1918
        Input::GRP_MOVETOPOINT,
1919
        &Actions::moveToPoint,
1920
        InputAction::MOVE_TO_POINT, 100,
1921
        InputCondition::KEY_DOWN | InputCondition::GAME,
1922
        "",
1923
        UseArgs_false,
1924
        Protected_true},
1925
    {"keyMoveToPointShortcut6",
1926
        addKey(SDLK_6),
1927
        emptyKey,
1928
        Input::GRP_MOVETOPOINT,
1929
        &Actions::moveToPoint,
1930
        InputAction::MOVE_TO_POINT, 100,
1931
        InputCondition::KEY_DOWN | InputCondition::GAME,
1932
        "",
1933
        UseArgs_false,
1934
        Protected_true},
1935
    {"keyMoveToPointShortcut7",
1936
        addKey(SDLK_7),
1937
        emptyKey,
1938
        Input::GRP_MOVETOPOINT,
1939
        &Actions::moveToPoint,
1940
        InputAction::MOVE_TO_POINT, 100,
1941
        InputCondition::KEY_DOWN | InputCondition::GAME,
1942
        "",
1943
        UseArgs_false,
1944
        Protected_true},
1945
    {"keyMoveToPointShortcut8",
1946
        addKey(SDLK_8),
1947
        emptyKey,
1948
        Input::GRP_MOVETOPOINT,
1949
        &Actions::moveToPoint,
1950
        InputAction::MOVE_TO_POINT, 100,
1951
        InputCondition::KEY_DOWN | InputCondition::GAME,
1952
        "",
1953
        UseArgs_false,
1954
        Protected_true},
1955
    {"keyMoveToPointShortcut9",
1956
        addKey(SDLK_9),
1957
        emptyKey,
1958
        Input::GRP_MOVETOPOINT,
1959
        &Actions::moveToPoint,
1960
        InputAction::MOVE_TO_POINT, 100,
1961
        InputCondition::KEY_DOWN | InputCondition::GAME,
1962
        "",
1963
        UseArgs_false,
1964
        Protected_true},
1965
    {"keyMoveToPointShortcut10",
1966
        addKey(SDLK_0),
1967
        emptyKey,
1968
        Input::GRP_MOVETOPOINT,
1969
        &Actions::moveToPoint,
1970
        InputAction::MOVE_TO_POINT, 100,
1971
        InputCondition::KEY_DOWN | InputCondition::GAME,
1972
        "",
1973
        UseArgs_false,
1974
        Protected_true},
1975
    {"keyMoveToPointShortcut11",
1976
        addKey(SDLK_MINUS),
1977
        emptyKey,
1978
        Input::GRP_MOVETOPOINT,
1979
        &Actions::moveToPoint,
1980
        InputAction::MOVE_TO_POINT, 100,
1981
        InputCondition::KEY_DOWN | InputCondition::GAME,
1982
        "",
1983
        UseArgs_false,
1984
        Protected_true},
1985
    {"keyMoveToPointShortcut12",
1986
        addKey(SDLK_EQUALS),
1987
        emptyKey,
1988
        Input::GRP_MOVETOPOINT,
1989
        &Actions::moveToPoint,
1990
        InputAction::MOVE_TO_POINT, 100,
1991
        InputCondition::KEY_DOWN | InputCondition::GAME,
1992
        "",
1993
        UseArgs_false,
1994
        Protected_true},
1995
    {"keyMoveToPointShortcut13",
1996
        addKey(SDLK_BACKSPACE),
1997
        emptyKey,
1998
        Input::GRP_MOVETOPOINT,
1999
        &Actions::moveToPoint,
2000
        InputAction::MOVE_TO_POINT, 100,
2001
        InputCondition::KEY_DOWN | InputCondition::GAME,
2002
        "",
2003
        UseArgs_false,
2004
        Protected_true},
2005
    {"keyMoveToPointShortcut14",
2006
        addKey(SDLK_INSERT),
2007
        emptyKey,
2008
        Input::GRP_MOVETOPOINT,
2009
        &Actions::moveToPoint,
2010
        InputAction::MOVE_TO_POINT, 100,
2011
        InputCondition::KEY_DOWN | InputCondition::GAME,
2012
        "",
2013
        UseArgs_false,
2014
        Protected_true},
2015
    {"keyMoveToPointShortcut15",
2016
        addKey(SDLK_HOME),
2017
        emptyKey,
2018
        Input::GRP_MOVETOPOINT,
2019
        &Actions::moveToPoint,
2020
        InputAction::MOVE_TO_POINT, 100,
2021
        InputCondition::KEY_DOWN | InputCondition::GAME,
2022
        "",
2023
        UseArgs_false,
2024
        Protected_true},
2025
    {"keyMoveToPointShortcut16",
2026
        addKey(SDLK_q),
2027
        emptyKey,
2028
        Input::GRP_MOVETOPOINT,
2029
        &Actions::moveToPoint,
2030
        InputAction::MOVE_TO_POINT, 100,
2031
        InputCondition::KEY_DOWN | InputCondition::GAME,
2032
        "",
2033
        UseArgs_false,
2034
        Protected_true},
2035
    {"keyMoveToPointShortcut17",
2036
        addKey(SDLK_w),
2037
        emptyKey,
2038
        Input::GRP_MOVETOPOINT,
2039
        &Actions::moveToPoint,
2040
        InputAction::MOVE_TO_POINT, 100,
2041
        InputCondition::KEY_DOWN | InputCondition::GAME,
2042
        "",
2043
        UseArgs_false,
2044
        Protected_true},
2045
    {"keyMoveToPointShortcut18",
2046
        addKey(SDLK_e),
2047
        emptyKey,
2048
        Input::GRP_MOVETOPOINT,
2049
        &Actions::moveToPoint,
2050
        InputAction::MOVE_TO_POINT, 100,
2051
        InputCondition::KEY_DOWN | InputCondition::GAME,
2052
        "",
2053
        UseArgs_false,
2054
        Protected_true},
2055
    {"keyMoveToPointShortcut19",
2056
        addKey(SDLK_r),
2057
        emptyKey,
2058
        Input::GRP_MOVETOPOINT,
2059
        &Actions::moveToPoint,
2060
        InputAction::MOVE_TO_POINT, 100,
2061
        InputCondition::KEY_DOWN | InputCondition::GAME,
2062
        "",
2063
        UseArgs_false,
2064
        Protected_true},
2065
    {"keyMoveToPointShortcut20",
2066
        addKey(SDLK_t),
2067
        emptyKey,
2068
        Input::GRP_MOVETOPOINT,
2069
        &Actions::moveToPoint,
2070
        InputAction::MOVE_TO_POINT, 100,
2071
        InputCondition::KEY_DOWN | InputCondition::GAME,
2072
        "",
2073
        UseArgs_false,
2074
        Protected_true},
2075
    {"keyMoveToPointShortcut21",
2076
        addKey(SDLK_y),
2077
        emptyKey,
2078
        Input::GRP_MOVETOPOINT,
2079
        &Actions::moveToPoint,
2080
        InputAction::MOVE_TO_POINT, 100,
2081
        InputCondition::KEY_DOWN | InputCondition::GAME,
2082
        "",
2083
        UseArgs_false,
2084
        Protected_true},
2085
    {"keyMoveToPointShortcut22",
2086
        addKey(SDLK_u),
2087
        emptyKey,
2088
        Input::GRP_MOVETOPOINT,
2089
        &Actions::moveToPoint,
2090
        InputAction::MOVE_TO_POINT, 100,
2091
        InputCondition::KEY_DOWN | InputCondition::GAME,
2092
        "",
2093
        UseArgs_false,
2094
        Protected_true},
2095
    {"keyMoveToPointShortcut23",
2096
        addKey(SDLK_i),
2097
        emptyKey,
2098
        Input::GRP_MOVETOPOINT,
2099
        &Actions::moveToPoint,
2100
        InputAction::MOVE_TO_POINT, 100,
2101
        InputCondition::KEY_DOWN | InputCondition::GAME,
2102
        "",
2103
        UseArgs_false,
2104
        Protected_true},
2105
    {"keyMoveToPointShortcut24",
2106
        addKey(SDLK_o),
2107
        emptyKey,
2108
        Input::GRP_MOVETOPOINT,
2109
        &Actions::moveToPoint,
2110
        InputAction::MOVE_TO_POINT, 100,
2111
        InputCondition::KEY_DOWN | InputCondition::GAME,
2112
        "",
2113
        UseArgs_false,
2114
        Protected_true},
2115
    {"keyMoveToPointShortcut25",
2116
        addKey(SDLK_p),
2117
        emptyKey,
2118
        Input::GRP_MOVETOPOINT,
2119
        &Actions::moveToPoint,
2120
        InputAction::MOVE_TO_POINT, 100,
2121
        InputCondition::KEY_DOWN | InputCondition::GAME,
2122
        "",
2123
        UseArgs_false,
2124
        Protected_true},
2125
    {"keyMoveToPointShortcut26",
2126
        addKey(SDLK_LEFTBRACKET),
2127
        emptyKey,
2128
        Input::GRP_MOVETOPOINT,
2129
        &Actions::moveToPoint,
2130
        InputAction::MOVE_TO_POINT, 100,
2131
        InputCondition::KEY_DOWN | InputCondition::GAME,
2132
        "",
2133
        UseArgs_false,
2134
        Protected_true},
2135
    {"keyMoveToPointShortcut27",
2136
        addKey(SDLK_RIGHTBRACKET),
2137
        emptyKey,
2138
        Input::GRP_MOVETOPOINT,
2139
        &Actions::moveToPoint,
2140
        InputAction::MOVE_TO_POINT, 100,
2141
        InputCondition::KEY_DOWN | InputCondition::GAME,
2142
        "",
2143
        UseArgs_false,
2144
        Protected_true},
2145
    {"keyMoveToPointShortcut28",
2146
        addKey(SDLK_BACKSLASH),
2147
        emptyKey,
2148
        Input::GRP_MOVETOPOINT,
2149
        &Actions::moveToPoint,
2150
        InputAction::MOVE_TO_POINT, 100,
2151
        InputCondition::KEY_DOWN | InputCondition::GAME,
2152
        "",
2153
        UseArgs_false,
2154
        Protected_true},
2155
    {"keyMoveToPointShortcut29",
2156
        addKey(SDLK_a),
2157
        emptyKey,
2158
        Input::GRP_MOVETOPOINT,
2159
        &Actions::moveToPoint,
2160
        InputAction::MOVE_TO_POINT, 100,
2161
        InputCondition::KEY_DOWN | InputCondition::GAME,
2162
        "",
2163
        UseArgs_false,
2164
        Protected_true},
2165
    {"keyMoveToPointShortcut30",
2166
        addKey(SDLK_s),
2167
        emptyKey,
2168
        Input::GRP_MOVETOPOINT,
2169
        &Actions::moveToPoint,
2170
        InputAction::MOVE_TO_POINT, 100,
2171
        InputCondition::KEY_DOWN | InputCondition::GAME,
2172
        "",
2173
        UseArgs_false,
2174
        Protected_true},
2175
    {"keyMoveToPointShortcut31",
2176
        addKey(SDLK_d),
2177
        emptyKey,
2178
        Input::GRP_MOVETOPOINT,
2179
        &Actions::moveToPoint,
2180
        InputAction::MOVE_TO_POINT, 100,
2181
        InputCondition::KEY_DOWN | InputCondition::GAME,
2182
        "",
2183
        UseArgs_false,
2184
        Protected_true},
2185
    {"keyMoveToPointShortcut32",
2186
        addKey(SDLK_f),
2187
        emptyKey,
2188
        Input::GRP_MOVETOPOINT,
2189
        &Actions::moveToPoint,
2190
        InputAction::MOVE_TO_POINT, 100,
2191
        InputCondition::KEY_DOWN | InputCondition::GAME,
2192
        "",
2193
        UseArgs_false,
2194
        Protected_true},
2195
    {"keyMoveToPointShortcut33",
2196
        addKey(SDLK_g),
2197
        emptyKey,
2198
        Input::GRP_MOVETOPOINT,
2199
        &Actions::moveToPoint,
2200
        InputAction::MOVE_TO_POINT, 100,
2201
        InputCondition::KEY_DOWN | InputCondition::GAME,
2202
        "",
2203
        UseArgs_false,
2204
        Protected_true},
2205
    {"keyMoveToPointShortcut34",
2206
        addKey(SDLK_h),
2207
        emptyKey,
2208
        Input::GRP_MOVETOPOINT,
2209
        &Actions::moveToPoint,
2210
        InputAction::MOVE_TO_POINT, 100,
2211
        InputCondition::KEY_DOWN | InputCondition::GAME,
2212
        "",
2213
        UseArgs_false,
2214
        Protected_true},
2215
    {"keyMoveToPointShortcut35",
2216
        addKey(SDLK_j),
2217
        emptyKey,
2218
        Input::GRP_MOVETOPOINT,
2219
        &Actions::moveToPoint,
2220
        InputAction::MOVE_TO_POINT, 100,
2221
        InputCondition::KEY_DOWN | InputCondition::GAME,
2222
        "",
2223
        UseArgs_false,
2224
        Protected_true},
2225
    {"keyMoveToPointShortcut36",
2226
        addKey(SDLK_k),
2227
        emptyKey,
2228
        Input::GRP_MOVETOPOINT,
2229
        &Actions::moveToPoint,
2230
        InputAction::MOVE_TO_POINT, 100,
2231
        InputCondition::KEY_DOWN | InputCondition::GAME,
2232
        "",
2233
        UseArgs_false,
2234
        Protected_true},
2235
    {"keyMoveToPointShortcut37",
2236
        addKey(SDLK_l),
2237
        emptyKey,
2238
        Input::GRP_MOVETOPOINT,
2239
        &Actions::moveToPoint,
2240
        InputAction::MOVE_TO_POINT, 100,
2241
        InputCondition::KEY_DOWN | InputCondition::GAME,
2242
        "",
2243
        UseArgs_false,
2244
        Protected_true},
2245
    {"keyMoveToPointShortcut38",
2246
        addKey(SDLK_SEMICOLON),
2247
        emptyKey,
2248
        Input::GRP_MOVETOPOINT,
2249
        &Actions::moveToPoint,
2250
        InputAction::MOVE_TO_POINT, 100,
2251
        InputCondition::KEY_DOWN | InputCondition::GAME,
2252
        "",
2253
        UseArgs_false,
2254
        Protected_true},
2255
    {"keyMoveToPointShortcut39",
2256
        addKey(SDLK_QUOTE),
2257
        emptyKey,
2258
        Input::GRP_MOVETOPOINT,
2259
        &Actions::moveToPoint,
2260
        InputAction::MOVE_TO_POINT, 100,
2261
        InputCondition::KEY_DOWN | InputCondition::GAME,
2262
        "",
2263
        UseArgs_false,
2264
        Protected_true},
2265
    {"keyMoveToPointShortcut40",
2266
        addKey(SDLK_z),
2267
        emptyKey,
2268
        Input::GRP_MOVETOPOINT,
2269
        &Actions::moveToPoint,
2270
        InputAction::MOVE_TO_POINT, 100,
2271
        InputCondition::KEY_DOWN | InputCondition::GAME,
2272
        "",
2273
        UseArgs_false,
2274
        Protected_true},
2275
    {"keyMoveToPointShortcut41",
2276
        addKey(SDLK_x),
2277
        emptyKey,
2278
        Input::GRP_MOVETOPOINT,
2279
        &Actions::moveToPoint,
2280
        InputAction::MOVE_TO_POINT, 100,
2281
        InputCondition::KEY_DOWN | InputCondition::GAME,
2282
        "",
2283
        UseArgs_false,
2284
        Protected_true},
2285
    {"keyMoveToPointShortcut42",
2286
        addKey(SDLK_c),
2287
        emptyKey,
2288
        Input::GRP_MOVETOPOINT,
2289
        &Actions::moveToPoint,
2290
        InputAction::MOVE_TO_POINT, 100,
2291
        InputCondition::KEY_DOWN | InputCondition::GAME,
2292
        "",
2293
        UseArgs_false,
2294
        Protected_true},
2295
    {"keyMoveToPointShortcut43",
2296
        addKey(SDLK_v),
2297
        emptyKey,
2298
        Input::GRP_MOVETOPOINT,
2299
        &Actions::moveToPoint,
2300
        InputAction::MOVE_TO_POINT, 100,
2301
        InputCondition::KEY_DOWN | InputCondition::GAME,
2302
        "",
2303
        UseArgs_false,
2304
        Protected_true},
2305
    {"keyMoveToPointShortcut44",
2306
        addKey(SDLK_b),
2307
        emptyKey,
2308
        Input::GRP_MOVETOPOINT,
2309
        &Actions::moveToPoint,
2310
        InputAction::MOVE_TO_POINT, 100,
2311
        InputCondition::KEY_DOWN | InputCondition::GAME,
2312
        "",
2313
        UseArgs_false,
2314
        Protected_true},
2315
    {"keyMoveToPointShortcut45",
2316
        addKey(SDLK_n),
2317
        emptyKey,
2318
        Input::GRP_MOVETOPOINT,
2319
        &Actions::moveToPoint,
2320
        InputAction::MOVE_TO_POINT, 100,
2321
        InputCondition::KEY_DOWN | InputCondition::GAME,
2322
        "",
2323
        UseArgs_false,
2324
        Protected_true},
2325
    {"keyMoveToPointShortcut46",
2326
        addKey(SDLK_m),
2327
        emptyKey,
2328
        Input::GRP_MOVETOPOINT,
2329
        &Actions::moveToPoint,
2330
        InputAction::MOVE_TO_POINT, 100,
2331
        InputCondition::KEY_DOWN | InputCondition::GAME,
2332
        "",
2333
        UseArgs_false,
2334
        Protected_true},
2335
    {"keyMoveToPointShortcut47",
2336
        addKey(SDLK_COMMA),
2337
        emptyKey,
2338
        Input::GRP_MOVETOPOINT,
2339
        &Actions::moveToPoint,
2340
        InputAction::MOVE_TO_POINT, 100,
2341
        InputCondition::KEY_DOWN | InputCondition::GAME,
2342
        "",
2343
        UseArgs_false,
2344
        Protected_true},
2345
    {"keyMoveToPointShortcut48",
2346
        addKey(SDLK_PERIOD),
2347
        emptyKey,
2348
        Input::GRP_MOVETOPOINT,
2349
        &Actions::moveToPoint,
2350
        InputAction::MOVE_TO_POINT, 100,
2351
        InputCondition::KEY_DOWN | InputCondition::GAME,
2352
        "",
2353
        UseArgs_false,
2354
        Protected_true},
2355
    {"keyChat",
2356
        addKey(SDLK_RETURN),
2357
#ifdef __SWITCH__
2358
        joystickButton(10),
2359
#else
2360
        emptyKey,
2361
#endif
2362
        Input::GRP_DEFAULT | Input::GRP_CHAT,
2363
        &Actions::toggleChat,
2364
        InputAction::NO_VALUE, 50,
2365
        InputCondition::KEY_DOWN |
2366
            InputCondition::NOINPUT |
2367
            InputCondition::NOAWAY |
2368
            InputCondition::NOMODAL,
2369
        "chat",
2370
        UseArgs_false,
2371
        Protected_false},
2372
    {"keyChatScrollUp",
2373
        addKey(SDLK_PAGEUP),
2374
        emptyKey,
2375
        Input::GRP_DEFAULT | Input::GRP_GUI,
2376
        &Actions::scrollChatUp,
2377
        InputAction::NO_VALUE, 50,
2378
        InputCondition::KEY_DOWN |
2379
            InputCondition::DEFAULT |
2380
            InputCondition::INGAME,
2381
        "chatscrollup",
2382
        UseArgs_false,
2383
        Protected_false},
2384
    {"keyChatScrollDown",
2385
        addKey(SDLK_PAGEDOWN),
2386
        emptyKey,
2387
        Input::GRP_DEFAULT | Input::GRP_GUI,
2388
        &Actions::scrollChatDown,
2389
        InputAction::NO_VALUE, 50,
2390
        InputCondition::KEY_DOWN |
2391
            InputCondition::DEFAULT |
2392
            InputCondition::INGAME,
2393
        "chatscrolldown",
2394
        UseArgs_false,
2395
        Protected_false},
2396
    {"keyChatPrevTab",
2397
        addKey(SDLK_KP7),
2398
        emptyKey,
2399
        Input::GRP_DEFAULT | Input::GRP_GUI,
2400
        &Actions::prevChatTab,
2401
        InputAction::NO_VALUE, 50,
2402
        InputCondition::KEY_DOWN |
2403
            InputCondition::NOINPUT |
2404
            InputCondition::INGAME,
2405
        "prevtab",
2406
        UseArgs_false,
2407
        Protected_false},
2408
    {"keyChatNextTab",
2409
        addKey(SDLK_KP9),
2410
        emptyKey,
2411
        Input::GRP_DEFAULT | Input::GRP_GUI,
2412
        &Actions::nextChatTab,
2413
        InputAction::NO_VALUE, 50,
2414
        InputCondition::KEY_DOWN |
2415
            InputCondition::NOINPUT |
2416
            InputCondition::INGAME,
2417
        "nexttab",
2418
        UseArgs_false,
2419
        Protected_false},
2420
    {"keyChatCloseTab",
2421
        emptyKey,
2422
        emptyKey,
2423
        Input::GRP_DEFAULT | Input::GRP_GUI,
2424
        &Actions::closeChatTab,
2425
        InputAction::NO_VALUE, 50,
2426
        InputCondition::KEY_DOWN |
2427
            InputCondition::NOINPUT |
2428
            InputCondition::INGAME,
2429
        "close",
2430
        UseArgs_false,
2431
        Protected_false},
2432
    {"keyChatPrevHistory",
2433
        addKey(SDLK_KP7),
2434
        emptyKey,
2435
        Input::GRP_CHAT | Input::GRP_GUICHAN,
2436
        nullptr,
2437
        InputAction::NO_VALUE, 50,
2438
        InputCondition::KEY_DOWN |
2439
            InputCondition::DEFAULT |
2440
            InputCondition::INGAME,
2441
        "",
2442
        UseArgs_false,
2443
        Protected_false},
2444
    {"keyChatNextHistory",
2445
        addKey(SDLK_KP9),
2446
        emptyKey,
2447
        Input::GRP_CHAT | Input::GRP_GUICHAN,
2448
        nullptr,
2449
        InputAction::NO_VALUE, 50,
2450
        InputCondition::KEY_DOWN |
2451
            InputCondition::DEFAULT |
2452
            InputCondition::INGAME,
2453
        "",
2454
        UseArgs_false,
2455
        Protected_false},
2456
    {"keyIgnoreInput1",
2457
#ifdef USE_SDL2
2458
        addKey(SDLK_LGUI),
2459
#else  // USE_SDL2
2460
        addKey(SDLK_LSUPER),
2461
#endif  // USE_SDL2
2462
        emptyKey,
2463
        Input::GRP_DEFAULT,
2464
        &Actions::ignoreInput,
2465
        InputAction::NO_VALUE, 500,
2466
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2467
        "",
2468
        UseArgs_false,
2469
        Protected_true},
2470
    {"keyIgnoreInput2",
2471
#ifdef USE_SDL2
2472
        addKey(SDLK_RGUI),
2473
#else  // USE_SDL2
2474
        addKey(SDLK_RSUPER),
2475
#endif  // USE_SDL2
2476
        emptyKey,
2477
        Input::GRP_DEFAULT,
2478
        &Actions::ignoreInput,
2479
        InputAction::NO_VALUE, 500,
2480
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2481
        "",
2482
        UseArgs_false,
2483
        Protected_true},
2484
    {"keyDirectUp",
2485
        defaultAction(&Actions::directUp),
2486
        InputCondition::KEY_DOWN | InputCondition::GAME,
2487
        "directup|turnup",
2488
        UseArgs_false,
2489
        Protected_false},
2490
    {"keyDirectDown",
2491
        defaultAction(&Actions::directDown),
2492
        InputCondition::KEY_DOWN | InputCondition::GAME,
2493
        "directdown|turndown",
2494
        UseArgs_false,
2495
        Protected_false},
2496
    {"keyDirectLeft",
2497
        defaultAction(&Actions::directLeft),
2498
        InputCondition::KEY_DOWN | InputCondition::GAME,
2499
        "directleft|turnleft",
2500
        UseArgs_false,
2501
        Protected_false},
2502
    {"keyDirectRight",
2503
        defaultAction(&Actions::directRight),
2504
        InputCondition::KEY_DOWN | InputCondition::GAME,
2505
        "directright|turnright",
2506
        UseArgs_false,
2507
        Protected_false},
2508
    {"keyCrazyMoves",
2509
        addKey(SDLK_SLASH),
2510
        emptyKey,
2511
        Input::GRP_DEFAULT,
2512
        &Actions::crazyMoves,
2513
        InputAction::NO_VALUE, 50,
2514
        InputCondition::KEY_DOWN |
2515
            InputCondition::GAME |
2516
            InputCondition::VALIDSPEED,
2517
        "",
2518
        UseArgs_false,
2519
        Protected_true},
2520
    {"keyChangeCrazyMoveType",
2521
        addKey(SDLK_BACKSLASH),
2522
        emptyKey,
2523
        Input::GRP_DEFAULT,
2524
        &Actions::changeCrazyMove,
2525
        InputAction::NO_VALUE, 50,
2526
        InputCondition::KEY_DOWN |
2527
            InputCondition::GAME |
2528
            InputCondition::VALIDSPEED |
2529
            InputCondition::EMODS,
2530
        "",
2531
        UseArgs_false,
2532
        Protected_true},
2533
    {"keyQuickDrop",
2534
        addKey(SDLK_y),
2535
        emptyKey,
2536
        Input::GRP_DEFAULT,
2537
        &Actions::dropItem0,
2538
        InputAction::NO_VALUE, 50,
2539
        InputCondition::KEY_DOWN |
2540
            InputCondition::GAME |
2541
            InputCondition::VALIDSPEED,
2542
        "drop",
2543
        UseArgs_false,
2544
        Protected_true},
2545
    {"keyQuickDropN",
2546
        addKey(SDLK_u),
2547
        emptyKey,
2548
        Input::GRP_DEFAULT,
2549
        &Actions::dropItem,
2550
        InputAction::NO_VALUE, 50,
2551
        InputCondition::KEY_DOWN |
2552
            InputCondition::GAME |
2553
            InputCondition::VALIDSPEED,
2554
        "dropn",
2555
        UseArgs_false,
2556
        Protected_true},
2557
    {"keySwitchQuickDrop",
2558
        addKey(SDLK_i),
2559
        emptyKey,
2560
        Input::GRP_DEFAULT,
2561
        &Actions::switchQuickDrop,
2562
        InputAction::NO_VALUE, 50,
2563
        InputCondition::KEY_DOWN |
2564
            InputCondition::GAME |
2565
            InputCondition::VALIDSPEED,
2566
        "",
2567
        UseArgs_false,
2568
        Protected_true},
2569
    {"keyMagicInma1",
2570
        addKey(SDLK_c),
2571
        emptyKey,
2572
        Input::GRP_DEFAULT,
2573
        &Actions::heal,
2574
        InputAction::NO_VALUE, 50,
2575
        InputCondition::KEY_DOWN |
2576
            InputCondition::GAME |
2577
            InputCondition::VALIDSPEED,
2578
        "heal",
2579
        UseArgs_true,
2580
        Protected_false},
2581
    {"keyMagicItenplz",
2582
        addKey(SDLK_m),
2583
        emptyKey,
2584
        Input::GRP_DEFAULT,
2585
        &Actions::itenplz,
2586
        InputAction::NO_VALUE, 50,
2587
        InputCondition::KEY_DOWN |
2588
            InputCondition::GAME |
2589
            InputCondition::VALIDSPEED,
2590
        "itenplz",
2591
        UseArgs_false,
2592
        Protected_true},
2593
    {"keyMagicAttack",
2594
        addKey(SDLK_b),
2595
        emptyKey,
2596
        Input::GRP_DEFAULT,
2597
        &Actions::magicAttack,
2598
        InputAction::NO_VALUE, 50,
2599
        InputCondition::KEY_DOWN |
2600
            InputCondition::GAME |
2601
            InputCondition::NOFOLLOW |
2602
            InputCondition::VALIDSPEED,
2603
        "magicattack",
2604
        UseArgs_false,
2605
        Protected_false},
2606
    {"keySwitchMagicAttack",
2607
        addKey(SDLK_COMMA),
2608
        emptyKey,
2609
        Input::GRP_DEFAULT,
2610
        &Actions::changeMagicAttackType,
2611
        InputAction::NO_VALUE, 50,
2612
        InputCondition::KEY_DOWN |
2613
            InputCondition::GAME |
2614
            InputCondition::VALIDSPEED |
2615
            InputCondition::EMODS,
2616
        "",
2617
        UseArgs_false,
2618
        Protected_true},
2619
    {"keySwitchPvpAttack",
2620
        defaultAction(&Actions::changePvpMode),
2621
        InputCondition::KEY_DOWN |
2622
            InputCondition::GAME |
2623
            InputCondition::VALIDSPEED |
2624
            InputCondition::EMODS,
2625
        "",
2626
        UseArgs_false,
2627
        Protected_true},
2628
    {"keyInvertDirection",
2629
        defaultAction(&Actions::changeMoveType),
2630
        InputCondition::KEY_DOWN |
2631
            InputCondition::GAME |
2632
            InputCondition::VALIDSPEED |
2633
            InputCondition::EMODS,
2634
        "",
2635
        UseArgs_false,
2636
        Protected_false},
2637
    {"keyChangeAttackWeaponType",
2638
        addKey(SDLK_g),
2639
        emptyKey,
2640
        Input::GRP_DEFAULT,
2641
        &Actions::changeAttackWeaponType,
2642
        InputAction::NO_VALUE, 50,
2643
        InputCondition::KEY_DOWN |
2644
            InputCondition::GAME |
2645
            InputCondition::VALIDSPEED |
2646
            InputCondition::EMODS,
2647
        "",
2648
        UseArgs_false,
2649
        Protected_true},
2650
    {"keyChangeAttackType",
2651
        addKey(SDLK_END),
2652
        emptyKey,
2653
        Input::GRP_DEFAULT,
2654
        &Actions::changeAttackType,
2655
        InputAction::NO_VALUE, 50,
2656
        InputCondition::KEY_DOWN |
2657
            InputCondition::GAME |
2658
            InputCondition::VALIDSPEED |
2659
            InputCondition::EMODS,
2660
        "",
2661
        UseArgs_false,
2662
        Protected_true},
2663
    {"keyChangeFollowMode",
2664
        addKey(SDLK_KP1),
2665
        emptyKey,
2666
        Input::GRP_DEFAULT,
2667
        &Actions::changeFollowMode,
2668
        InputAction::NO_VALUE, 50,
2669
        InputCondition::KEY_DOWN |
2670
            InputCondition::GAME |
2671
            InputCondition::VALIDSPEED |
2672
            InputCondition::EMODS,
2673
        "",
2674
        UseArgs_false,
2675
        Protected_true},
2676
    {"keyChangeImitationMode",
2677
        addKey(SDLK_KP4),
2678
        emptyKey,
2679
        Input::GRP_DEFAULT,
2680
        &Actions::changeImitationMode,
2681
        InputAction::NO_VALUE, 50,
2682
        InputCondition::KEY_DOWN |
2683
            InputCondition::GAME |
2684
            InputCondition::VALIDSPEED |
2685
            InputCondition::EMODS,
2686
        "",
2687
        UseArgs_false,
2688
        Protected_true},
2689
    {"keyDisableGameModifiers",
2690
        addKey(SDLK_KP8),
2691
        emptyKey,
2692
        Input::GRP_DEFAULT,
2693
        &Actions::changeGameModifier,
2694
        InputAction::NO_VALUE, 50,
2695
        InputCondition::KEY_DOWN |
2696
            InputCondition::GAME |
2697
            InputCondition::VALIDSPEED,
2698
        "",
2699
        UseArgs_false,
2700
        Protected_true},
2701
    {"keyChangeAudio",
2702
        addKey(SDLK_KP3),
2703
        emptyKey,
2704
        Input::GRP_DEFAULT,
2705
        &Actions::changeAudio,
2706
        InputAction::NO_VALUE, 50,
2707
        InputCondition::KEY_DOWN |
2708
            InputCondition::GAME |
2709
            InputCondition::VALIDSPEED,
2710
        "audio",
2711
        UseArgs_false,
2712
        Protected_true},
2713
    {"keyAway",
2714
        addKey(SDLK_KP2),
2715
        emptyKey,
2716
        Input::GRP_DEFAULT,
2717
        &Actions::away,
2718
        InputAction::NO_VALUE, 50,
2719
        InputCondition::KEY_DOWN |
2720
            InputCondition::GAME |
2721
            InputCondition::VALIDSPEED,
2722
        "",
2723
        UseArgs_false,
2724
        Protected_false},
2725
    {"keyRightClick",
2726
        addKey(SDLK_TAB),
2727
        emptyKey,
2728
        Input::GRP_DEFAULT,
2729
        &Actions::mouseClick,
2730
        InputAction::NO_VALUE, 50,
2731
        InputCondition::KEY_DOWN |
2732
            InputCondition::NOINPUT |
2733
            InputCondition::NOAWAY |
2734
            InputCondition::NOMODAL |
2735
            InputCondition::INGAME,
2736
        "rightclick",
2737
        UseArgs_false,
2738
        Protected_false},
2739
    {"keyCameraMode",
2740
        addKey(SDLK_KP_PLUS),
2741
        emptyKey,
2742
        Input::GRP_DEFAULT,
2743
        &Actions::camera,
2744
        InputAction::NO_VALUE, 50,
2745
        InputCondition::KEY_DOWN |
2746
            InputCondition::GAME |
2747
            InputCondition::VALIDSPEED |
2748
            InputCondition::EMODS,
2749
        "",
2750
        UseArgs_false,
2751
        Protected_false},
2752
    {"keyMod",
2753
        emptyKey,
2754
        emptyKey,
2755
        0,
2756
        nullptr,
2757
        InputAction::NO_VALUE, 50,
2758
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2759
        "",
2760
        UseArgs_false,
2761
        Protected_false},
2762
    {"keyGUIUp",
2763
        addKey(SDLK_UP),
2764
        emptyKey,
2765
        Input::GRP_GUICHAN,
2766
        nullptr,
2767
        InputAction::NO_VALUE, 50,
2768
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2769
        "",
2770
        UseArgs_false,
2771
        Protected_false},
2772
    {"keyGUIDown",
2773
        addKey(SDLK_DOWN),
2774
        emptyKey,
2775
        Input::GRP_GUICHAN,
2776
        nullptr,
2777
        InputAction::NO_VALUE, 50,
2778
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2779
        "",
2780
        UseArgs_false,
2781
        Protected_false},
2782
    {"keyGUILeft",
2783
        addKey(SDLK_LEFT),
2784
        emptyKey,
2785
        Input::GRP_GUICHAN,
2786
        nullptr,
2787
        InputAction::NO_VALUE, 50,
2788
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2789
        "",
2790
        UseArgs_false,
2791
        Protected_false},
2792
    {"keyGUIRight",
2793
        addKey(SDLK_RIGHT),
2794
        emptyKey,
2795
        Input::GRP_GUICHAN,
2796
        nullptr,
2797
        InputAction::NO_VALUE, 50,
2798
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2799
        "",
2800
        UseArgs_false,
2801
        Protected_false},
2802
    {"keyGUISelect",
2803
        addKey(SDLK_SPACE),
2804
        emptyKey,
2805
        Input::GRP_GUICHAN,
2806
        nullptr,
2807
        InputAction::NO_VALUE, 50,
2808
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2809
        "",
2810
        UseArgs_false,
2811
        Protected_false},
2812
    {"keyGUISelect2",
2813
        addKey(SDLK_RETURN),
2814
        emptyKey,
2815
        Input::GRP_GUICHAN,
2816
        nullptr,
2817
        InputAction::NO_VALUE, 50,
2818
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2819
        "",
2820
        UseArgs_false,
2821
        Protected_false},
2822
    {"keyGUICancel",
2823
        addKey(SDLK_ESCAPE),
2824
#if defined(USE_SDL2)
2825
#if defined(ANDROID)
2826
        addKey(SDLK_AC_BACK),
2827
#elif defined(__SWITCH__)
2828
        joystickButton(11),
2829
#else  // defined(ANDROID)
2830
        emptyKey,
2831
#endif  // defined(ANDROID)
2832
#else  // defined(USE_SDL2)
2833
        emptyKey,
2834
#endif  // defined(USE_SDL2)
2835
        Input::GRP_GUICHAN,
2836
        nullptr,
2837
        InputAction::NO_VALUE, 50,
2838
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2839
        "",
2840
        UseArgs_false,
2841
        Protected_false},
2842
    {"keyGUIHome",
2843
        addKey(SDLK_HOME),
2844
        emptyKey,
2845
        Input::GRP_GUICHAN,
2846
        nullptr,
2847
        InputAction::NO_VALUE, 50,
2848
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2849
        "",
2850
        UseArgs_false,
2851
        Protected_false},
2852
    {"keyGUIEnd",
2853
        addKey(SDLK_END),
2854
        emptyKey,
2855
        Input::GRP_GUICHAN,
2856
        nullptr,
2857
        InputAction::NO_VALUE, 50,
2858
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2859
        "",
2860
        UseArgs_false,
2861
        Protected_false},
2862
    {"keyGUIDelete",
2863
        addKey(SDLK_DELETE),
2864
        emptyKey,
2865
        Input::GRP_GUICHAN,
2866
        nullptr,
2867
        InputAction::NO_VALUE, 50,
2868
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2869
        "",
2870
        UseArgs_false,
2871
        Protected_false},
2872
    {"keyGUIBackSpace",
2873
        addKey(SDLK_BACKSPACE),
2874
        emptyKey,
2875
        Input::GRP_GUICHAN,
2876
        nullptr,
2877
        InputAction::NO_VALUE, 50,
2878
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2879
        "",
2880
        UseArgs_false,
2881
        Protected_false},
2882
    {"keyGUITab",
2883
        addKey(SDLK_TAB),
2884
        emptyKey,
2885
        Input::GRP_GUICHAN,
2886
        nullptr,
2887
        InputAction::NO_VALUE, 50,
2888
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2889
        "",
2890
        UseArgs_false,
2891
        Protected_false},
2892
    {"keyGUIPageUp",
2893
        addKey(SDLK_PAGEUP),
2894
        emptyKey,
2895
        Input::GRP_GUICHAN,
2896
        nullptr,
2897
        InputAction::NO_VALUE, 50,
2898
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2899
        "",
2900
        UseArgs_false,
2901
        Protected_false},
2902
    {"keyGUIPageDown",
2903
        addKey(SDLK_PAGEDOWN),
2904
        emptyKey,
2905
        Input::GRP_GUICHAN,
2906
        nullptr,
2907
        InputAction::NO_VALUE, 50,
2908
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2909
        "",
2910
        UseArgs_false,
2911
        Protected_false},
2912
    {"keyGUIInsert",
2913
        addKey(SDLK_INSERT),
2914
        emptyKey,
2915
        Input::GRP_GUICHAN,
2916
        nullptr,
2917
        InputAction::NO_VALUE, 50,
2918
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2919
        "",
2920
        UseArgs_false,
2921
        Protected_false},
2922
    {"keyGUIMod",
2923
        addKey(SDLK_LSHIFT),
2924
        addKey(SDLK_RSHIFT),
2925
        Input::GRP_GUICHAN,
2926
        nullptr,
2927
        InputAction::NO_VALUE, 50,
2928
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2929
        "",
2930
        UseArgs_false,
2931
        Protected_false},
2932
    {"keySafeVideo",
2933
        addKey(SDLK_KP_MINUS),
2934
        emptyKey,
2935
        Input::GRP_DEFAULT,
2936
        &Actions::safeVideoMode,
2937
        InputAction::NO_VALUE, 50,
2938
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2939
        "",
2940
        UseArgs_false,
2941
        Protected_true},
2942
    {"keyStopSit",
2943
#ifdef __SWITCH__
2944
        emptyKey,
2945
        joystickButton(1),
2946
        Input::GRP_DEFAULT,
2947
        &Actions::stopSit,
2948
        InputAction::NO_VALUE, 50,
2949
#else
2950
        defaultAction(&Actions::stopSit),
2951
#endif
2952
        InputCondition::KEY_DOWN |
2953
            InputCondition::DEFAULT |
2954
            InputCondition::INGAME,
2955
        "sit2",
2956
        UseArgs_false,
2957
        Protected_false},
2958
    {"keyShowKeyboard",
2959
        defaultAction(&Actions::showKeyboard),
2960
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2961
        "showkeyboard",
2962
        UseArgs_false,
2963
        Protected_false},
2964
    {"keyShowWindows",
2965
        defaultAction(&Actions::showWindows),
2966
        InputCondition::KEY_DOWN |
2967
            InputCondition::DEFAULT |
2968
            InputCondition::INGAME,
2969
        "showwindows",
2970
        UseArgs_false,
2971
        Protected_false},
2972
    {"keyChatMod",
2973
        addKey(SDLK_LSHIFT),
2974
        emptyKey,
2975
        Input::GRP_CHAT,
2976
        nullptr,
2977
        InputAction::NO_VALUE, 50,
2978
        InputCondition::KEY_DOWN |
2979
            InputCondition::DEFAULT |
2980
            InputCondition::INGAME,
2981
        "",
2982
        UseArgs_false,
2983
        Protected_false},
2984
    {"keyMoveForward",
2985
        defaultAction(&Actions::moveForward),
2986
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
2987
        "",
2988
        UseArgs_false,
2989
        Protected_false},
2990
    {"keyGUICtrl",
2991
        addKey(SDLK_LCTRL),
2992
        addKey(SDLK_RCTRL),
2993
        Input::GRP_GUICHAN,
2994
        nullptr,
2995
        InputAction::NO_VALUE, 50,
2996
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2997
        "",
2998
        UseArgs_false,
2999
        Protected_false},
3000
    {"keyGUIb",
3001
        addKey(SDLK_b),
3002
        emptyKey,
3003
        Input::GRP_GUICHAN,
3004
        nullptr,
3005
        InputAction::NO_VALUE, 50,
3006
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3007
        "",
3008
        UseArgs_false,
3009
        Protected_false},
3010
    {"keyGUIc",
3011
        addKey(SDLK_c),
3012
        emptyKey,
3013
        Input::GRP_GUICHAN,
3014
        nullptr,
3015
        InputAction::NO_VALUE, 50,
3016
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3017
        "",
3018
        UseArgs_false,
3019
        Protected_false},
3020
    {"keyGUId",
3021
        addKey(SDLK_d),
3022
        emptyKey,
3023
        Input::GRP_GUICHAN,
3024
        nullptr,
3025
        InputAction::NO_VALUE, 50,
3026
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3027
        "",
3028
        UseArgs_false,
3029
        Protected_false},
3030
    {"keyGUIe",
3031
        addKey(SDLK_e),
3032
        emptyKey,
3033
        Input::GRP_GUICHAN,
3034
        nullptr,
3035
        InputAction::NO_VALUE, 50,
3036
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3037
        "",
3038
        UseArgs_false,
3039
        Protected_false},
3040
    {"keyGUIf",
3041
        addKey(SDLK_f),
3042
        emptyKey,
3043
        Input::GRP_GUICHAN,
3044
        nullptr,
3045
        InputAction::NO_VALUE, 50,
3046
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3047
        "",
3048
        UseArgs_false,
3049
        Protected_false},
3050
    {"keyGUIh",
3051
        addKey(SDLK_h),
3052
        emptyKey,
3053
        Input::GRP_GUICHAN,
3054
        nullptr,
3055
        InputAction::NO_VALUE, 50,
3056
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3057
        "",
3058
        UseArgs_false,
3059
        Protected_false},
3060
    {"keyGUIk",
3061
        addKey(SDLK_k),
3062
        emptyKey,
3063
        Input::GRP_GUICHAN,
3064
        nullptr,
3065
        InputAction::NO_VALUE, 50,
3066
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3067
        "",
3068
        UseArgs_false,
3069
        Protected_false},
3070
    {"keyGUIu",
3071
        addKey(SDLK_u),
3072
        emptyKey,
3073
        Input::GRP_GUICHAN,
3074
        nullptr,
3075
        InputAction::NO_VALUE, 50,
3076
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3077
        "",
3078
        UseArgs_false,
3079
        Protected_false},
3080
    {"keyGUIv",
3081
        addKey(SDLK_v),
3082
        emptyKey,
3083
        Input::GRP_GUICHAN,
3084
        nullptr,
3085
        InputAction::NO_VALUE, 50,
3086
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3087
        "",
3088
        UseArgs_false,
3089
        Protected_false},
3090
    {"keyGUIw",
3091
        addKey(SDLK_w),
3092
        emptyKey,
3093
        Input::GRP_GUICHAN,
3094
        nullptr,
3095
        InputAction::NO_VALUE, 50,
3096
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3097
        "",
3098
        UseArgs_false,
3099
        Protected_false},
3100
    {"keyShortcutsPrevTab",
3101
        emptyKey,
3102
        emptyKey,
3103
        Input::GRP_DEFAULT | Input::GRP_GUI,
3104
        &Actions::prevShortcutsTab,
3105
        InputAction::NO_VALUE, 50,
3106
        InputCondition::KEY_DOWN |
3107
            InputCondition::NOINPUT |
3108
            InputCondition::INGAME,
3109
        "shortcutprevtab",
3110
        UseArgs_false,
3111
        Protected_false},
3112
    {"keyShortcutsNextTab",
3113
        emptyKey,
3114
        emptyKey,
3115
        Input::GRP_DEFAULT | Input::GRP_GUI,
3116
        &Actions::nextShortcutsTab,
3117
        InputAction::NO_VALUE, 50,
3118
        InputCondition::KEY_DOWN |
3119
            InputCondition::NOINPUT |
3120
            InputCondition::INGAME,
3121
        "shortcutnexttab",
3122
        UseArgs_false,
3123
        Protected_false},
3124
    {"keyCommandsPrevTab",
3125
        emptyKey,
3126
        emptyKey,
3127
        Input::GRP_DEFAULT | Input::GRP_GUI,
3128
        &Actions::prevCommandsTab,
3129
        InputAction::NO_VALUE, 50,
3130
        InputCondition::KEY_DOWN |
3131
            InputCondition::NOINPUT |
3132
            InputCondition::INGAME,
3133
        "commandsprevtab",
3134
        UseArgs_false,
3135
        Protected_false},
3136
    {"keyCommandsNextTab",
3137
        emptyKey,
3138
        emptyKey,
3139
        Input::GRP_DEFAULT | Input::GRP_GUI,
3140
        &Actions::nextCommandsTab,
3141
        InputAction::NO_VALUE, 50,
3142
        InputCondition::KEY_DOWN |
3143
            InputCondition::NOINPUT |
3144
            InputCondition::INGAME,
3145
        "commandsnexttab",
3146
        UseArgs_false,
3147
        Protected_false},
3148
    {"keyOpenTrade",
3149
        defaultAction(&Actions::openTrade),
3150
        InputCondition::KEY_DOWN |
3151
            InputCondition::GAME |
3152
            InputCondition::NOTARGET,
3153
        "trade",
3154
        UseArgs_false,
3155
        Protected_false},
3156
    {"keyGUIF1",
3157
        addKey(SDLK_F1),
3158
        emptyKey,
3159
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3160
        nullptr,
3161
        InputAction::NO_VALUE, 50,
3162
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3163
        "",
3164
        UseArgs_false,
3165
        Protected_false},
3166
    {"keyGUIF2",
3167
        addKey(SDLK_F2),
3168
        emptyKey,
3169
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3170
        nullptr,
3171
        InputAction::NO_VALUE, 50,
3172
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3173
        "",
3174
        UseArgs_false,
3175
        Protected_false},
3176
    {"keyGUIF3",
3177
        addKey(SDLK_F3),
3178
        emptyKey,
3179
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3180
        nullptr,
3181
        InputAction::NO_VALUE, 50,
3182
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3183
        "",
3184
        UseArgs_false,
3185
        Protected_false},
3186
    {"keyGUIF4",
3187
        addKey(SDLK_F4),
3188
        emptyKey,
3189
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3190
        nullptr,
3191
        InputAction::NO_VALUE, 50,
3192
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3193
        "",
3194
        UseArgs_false,
3195
        Protected_false},
3196
    {"keyGUIF5",
3197
        addKey(SDLK_F5),
3198
        emptyKey,
3199
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3200
        nullptr,
3201
        InputAction::NO_VALUE, 50,
3202
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3203
        "",
3204
        UseArgs_false,
3205
        Protected_false},
3206
    {"keyGUIF6",
3207
        addKey(SDLK_F6),
3208
        emptyKey,
3209
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3210
        nullptr,
3211
        InputAction::NO_VALUE, 50,
3212
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3213
        "",
3214
        UseArgs_false,
3215
        Protected_false},
3216
    {"keyGUIF7",
3217
        addKey(SDLK_F7),
3218
        emptyKey,
3219
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3220
        nullptr,
3221
        InputAction::NO_VALUE, 50,
3222
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3223
        "",
3224
        UseArgs_false,
3225
        Protected_false},
3226
    {"keyGUIF8",
3227
        addKey(SDLK_F8),
3228
        emptyKey,
3229
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3230
        nullptr,
3231
        InputAction::NO_VALUE, 50,
3232
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3233
        "",
3234
        UseArgs_false,
3235
        Protected_false},
3236
    {"keyGUIF9",
3237
        addKey(SDLK_F9),
3238
        emptyKey,
3239
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3240
        nullptr,
3241
        InputAction::NO_VALUE, 50,
3242
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3243
        "",
3244
        UseArgs_false,
3245
        Protected_false},
3246
    {"keyGUIF10",
3247
        addKey(SDLK_F10),
3248
        emptyKey,
3249
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3250
        nullptr,
3251
        InputAction::NO_VALUE, 50,
3252
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3253
        "",
3254
        UseArgs_false,
3255
        Protected_false},
3256
    {"keyGUIF11",
3257
        addKey(SDLK_F11),
3258
        emptyKey,
3259
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3260
        nullptr,
3261
        InputAction::NO_VALUE, 50,
3262
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3263
        "",
3264
        UseArgs_false,
3265
        Protected_false},
3266
    {"keyGUIF12",
3267
        addKey(SDLK_F12),
3268
        emptyKey,
3269
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3270
        nullptr,
3271
        InputAction::NO_VALUE, 50,
3272
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3273
        "",
3274
        UseArgs_false,
3275
        Protected_false},
3276
    {"keyWindowAbout",
3277
        emptyKey,
3278
        emptyKey,
3279
        Input::GRP_DEFAULT | Input::GRP_GUI,
3280
        &Actions::aboutWindowShow,
3281
        InputAction::NO_VALUE, 50,
3282
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
3283
        "about",
3284
        UseArgs_false,
3285
        Protected_false},
3286
    {"keyWindowUpdater",
3287
        emptyKey,
3288
        emptyKey,
3289
        Input::GRP_DEFAULT | Input::GRP_GUI,
3290
        &Actions::updaterWindowShow,
3291
        InputAction::NO_VALUE, 50,
3292
        InputCondition::KEY_DOWN | InputCondition::GAME,
3293
        "updater",
3294
        UseArgs_false,
3295
        Protected_false},
3296
    {"keyTargetClosestMonster",
3297
        emptyKey,
3298
        emptyKey,
3299
        Input::GRP_DEFAULT | Input::GRP_REPEAT,
3300
        &Actions::targetClosestMonster,
3301
        InputAction::NO_VALUE, 50,
3302
        InputCondition::KEY_DOWN |
3303
            InputCondition::GAME |
3304
            InputCondition::NOTARGET |
3305
            InputCondition::VALIDSPEED,
3306
        "targetclosestmonster",
3307
        UseArgs_false,
3308
        Protected_false},
3309
    {"keyChatCloseAllTabs",
3310
        emptyKey,
3311
        emptyKey,
3312
        Input::GRP_DEFAULT | Input::GRP_GUI,
3313
        &Actions::closeAllChatTabs,
3314
        InputAction::NO_VALUE, 50,
3315
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3316
        "closeall",
3317
        UseArgs_false,
3318
        Protected_true},
3319
    {"keyChatIgnoreAllWhispers",
3320
        emptyKey,
3321
        emptyKey,
3322
        Input::GRP_DEFAULT | Input::GRP_GUI,
3323
        &Actions::ignoreAllWhispers,
3324
        InputAction::NO_VALUE, 50,
3325
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3326
        "ignoreallwhispers",
3327
        UseArgs_false,
3328
        Protected_true},
3329
    {"keyChatAnnounce",
3330
        emptyKey,
3331
        emptyKey,
3332
        Input::GRP_DEFAULT | Input::GRP_GUI,
3333
        &Actions::chatAnnounce,
3334
        InputAction::NO_VALUE, 50,
3335
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3336
        "announce",
3337
        UseArgs_true,
3338
        Protected_true},
3339
    {"keyIpcToggle",
3340
        defaultAction(&Actions::ipcToggle),
3341
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3342
        "ipctoggle",
3343
        UseArgs_false,
3344
        Protected_true},
3345
    {"keyWhere",
3346
        defaultAction(&Actions::where),
3347
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3348
        "where",
3349
        UseArgs_false,
3350
        Protected_false},
3351
    {"keyWho",
3352
        defaultAction(&Actions::who),
3353
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3354
        "who",
3355
        UseArgs_false,
3356
        Protected_false},
3357
    {"keyWhisper",
3358
        defaultAction(&Actions::msg),
3359
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3360
        "w|whisper|msg",
3361
        UseArgs_true,
3362
        Protected_true},
3363
    {"keyQuery",
3364
        defaultAction(&Actions::query),
3365
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3366
        "q|query|j|join",
3367
        UseArgs_true,
3368
        Protected_false},
3369
    {"keyClearChatTab",
3370
        defaultAction(&Actions::clearChatTab),
3371
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3372
        "clear",
3373
        UseArgs_false,
3374
        Protected_false},
3375
    {"keyIgnore",
3376
        defaultAction(&Actions::chatIgnore),
3377
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3378
        "ignore",
3379
        UseArgs_true,
3380
        Protected_true},
3381
    {"keyUnignore",
3382
        defaultAction(&Actions::chatUnignore),
3383
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3384
        "unignore",
3385
        UseArgs_true,
3386
        Protected_true},
3387
    {"keyFriend",
3388
        defaultAction(&Actions::chatFriend),
3389
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3390
        "friend|befriend",
3391
        UseArgs_true,
3392
        Protected_true},
3393
    {"keyDisregard",
3394
        defaultAction(&Actions::chatDisregard),
3395
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3396
        "disregard",
3397
        UseArgs_true,
3398
        Protected_true},
3399
    {"keyNeutral",
3400
        defaultAction(&Actions::chatNeutral),
3401
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3402
        "neutral",
3403
        UseArgs_true,
3404
        Protected_true},
3405
    {"keyBlacklist",
3406
        defaultAction(&Actions::chatBlackList),
3407
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3408
        "blacklist",
3409
        UseArgs_true,
3410
        Protected_true},
3411
    {"keyEnemy",
3412
        defaultAction(&Actions::chatEnemy),
3413
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3414
        "enemy",
3415
        UseArgs_true,
3416
        Protected_true},
3417
    {"keyErase",
3418
        defaultAction(&Actions::chatErase),
3419
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3420
        "erase",
3421
        UseArgs_true,
3422
        Protected_true},
3423
    {"keyCleanGraphics",
3424
        defaultAction(&Actions::cleanGraphics),
3425
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3426
        "cleangraphics",
3427
        UseArgs_false,
3428
        Protected_false},
3429
    {"keyCleanFonts",
3430
        defaultAction(&Actions::cleanFonts),
3431
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3432
        "cleanfonts",
3433
        UseArgs_false,
3434
        Protected_false},
3435
    {"keyCreateParty",
3436
        defaultAction(&Actions::createParty),
3437
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3438
        "createparty",
3439
        UseArgs_true,
3440
        Protected_true},
3441
    {"keyCreateGuild",
3442
        defaultAction(&Actions::createGuild),
3443
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3444
        "createguild",
3445
        UseArgs_true,
3446
        Protected_true},
3447
    {"keyParty",
3448
        defaultAction(&Actions::party),
3449
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3450
        "party",
3451
        UseArgs_true,
3452
        Protected_true},
3453
    {"keyMe",
3454
        defaultAction(&Actions::me),
3455
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3456
        "me",
3457
        UseArgs_true,
3458
        Protected_true},
3459
    {"keyToggle",
3460
        defaultAction(&Actions::toggle),
3461
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3462
        "toggle",
3463
        UseArgs_false,
3464
        Protected_false},
3465
    {"keyPresent",
3466
        defaultAction(&Actions::present),
3467
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3468
        "present",
3469
        UseArgs_false,
3470
        Protected_false},
3471
    {"keyPrintAll",
3472
        defaultAction(&Actions::printAll),
3473
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3474
        "all",
3475
        UseArgs_false,
3476
        Protected_true},
3477
    {"keyMove",
3478
        defaultAction(&Actions::move),
3479
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3480
        "move",
3481
        UseArgs_true,
3482
        Protected_false},
3483
    {"keySetTarget",
3484
        defaultAction(&Actions::setTarget),
3485
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3486
        "target",
3487
        UseArgs_true,
3488
        Protected_false},
3489
    {"keyAttackHuman",
3490
        defaultAction(&Actions::attackHuman),
3491
        InputCondition::KEY_DOWN |
3492
            InputCondition::GAME |
3493
            InputCondition::NOFOLLOW |
3494
            InputCondition::VALIDSPEED,
3495
        "atkhuman",
3496
        UseArgs_false,
3497
        Protected_false},
3498
    {"keyOutfit",
3499
        defaultAction(&Actions::commandOutfit),
3500
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3501
        "outfit",
3502
        UseArgs_true,
3503
        Protected_true},
3504
    {"keyEmote",
3505
        defaultAction(&Actions::commandEmote),
3506
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3507
        "emote",
3508
        UseArgs_true,
3509
        Protected_false},
3510
    {"keyEmotePet",
3511
        defaultAction(&Actions::commandEmotePet),
3512
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3513
        "emotepet",
3514
        UseArgs_true,
3515
        Protected_false},
3516
    {"keyAwayMessage",
3517
        defaultAction(&Actions::awayMessage),
3518
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3519
        "away",
3520
        UseArgs_true,
3521
        Protected_true},
3522
    {"keyPseudoAway",
3523
        defaultAction(&Actions::pseudoAway),
3524
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3525
        "pseudoaway",
3526
        UseArgs_true,
3527
        Protected_true},
3528
    {"keyFollow",
3529
        defaultAction(&Actions::follow),
3530
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3531
        "follow",
3532
        UseArgs_true,
3533
        Protected_false},
3534
    {"keyNavigate",
3535
        defaultAction(&Actions::navigate),
3536
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3537
        "navigate",
3538
        UseArgs_true,
3539
        Protected_false},
3540
    {"keyImitation",
3541
        defaultAction(&Actions::imitation),
3542
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3543
        "imitation",
3544
        UseArgs_true,
3545
        Protected_false},
3546
    {"keySendMail",
3547
        defaultAction(&Actions::sendMail),
3548
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3549
        "sendmail|mailsend|mailto",
3550
        UseArgs_true,
3551
        Protected_true},
3552
    {"keyTradeCommand",
3553
        defaultAction(&Actions::trade),
3554
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3555
        "trade",
3556
        UseArgs_true,
3557
        Protected_false},
3558
    {"keyPriceLoad",
3559
        defaultAction(&Actions::priceLoad),
3560
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3561
        "priceload",
3562
        UseArgs_false,
3563
        Protected_true},
3564
    {"keyPriceSave",
3565
        defaultAction(&Actions::priceSave),
3566
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3567
        "pricesave",
3568
        UseArgs_false,
3569
        Protected_true},
3570
    {"keyCacheInfo",
3571
        defaultAction(&Actions::cacheInfo),
3572
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3573
        "cacheinfo",
3574
        UseArgs_false,
3575
        Protected_true},
3576
    {"keyDisconnect",
3577
        defaultAction(&Actions::disconnect),
3578
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3579
        "disconnect",
3580
        UseArgs_false,
3581
        Protected_true},
3582
    {"keyUndress",
3583
        defaultAction(&Actions::undress),
3584
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3585
        "undress",
3586
        UseArgs_true,
3587
        Protected_false},
3588
    {"keyDirs",
3589
        defaultAction(&Actions::dirs),
3590
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3591
        "dirs",
3592
        UseArgs_false,
3593
        Protected_false},
3594
    {"keyInfo",
3595
        defaultAction(&Actions::info),
3596
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3597
        "info",
3598
        UseArgs_false,
3599
        Protected_false},
3600
    {"keyWait",
3601
        defaultAction(&Actions::wait),
3602
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3603
        "wait",
3604
        UseArgs_true,
3605
        Protected_true},
3606
    {"keyUptime",
3607
        defaultAction(&Actions::uptime),
3608
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3609
        "uptime",
3610
        UseArgs_false,
3611
        Protected_false},
3612
    {"keyAddPriorityAttack",
3613
        defaultAction(&Actions::addPriorityAttack),
3614
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3615
        "addpriorityattack",
3616
        UseArgs_true,
3617
        Protected_true},
3618
    {"keyAddAttack",
3619
        defaultAction(&Actions::addAttack),
3620
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3621
        "addattack",
3622
        UseArgs_true,
3623
        Protected_true},
3624
    {"keyRemoveAttack",
3625
        defaultAction(&Actions::removeAttack),
3626
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3627
        "removeattack|removeignoreattack",
3628
        UseArgs_true,
3629
        Protected_true},
3630
    {"keyAddIgnoreAttack",
3631
        defaultAction(&Actions::addIgnoreAttack),
3632
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3633
        "addignoreattack",
3634
        UseArgs_true,
3635
        Protected_true},
3636
    {"keyDump",
3637
        defaultAction(&Actions::dump),
3638
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3639
        "dump",
3640
        UseArgs_false,
3641
        Protected_true},
3642
    {"keyServerIgnoreAll",
3643
        defaultAction(&Actions::serverIgnoreAll),
3644
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3645
        "serverignoreall",
3646
        UseArgs_false,
3647
        Protected_true},
3648
    {"keyServerUnIgnoreAll",
3649
        defaultAction(&Actions::serverUnIgnoreAll),
3650
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3651
        "serverunignoreall",
3652
        UseArgs_false,
3653
        Protected_true},
3654
    {"keySetDrop",
3655
        defaultAction(&Actions::setDrop),
3656
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3657
        "setdrop",
3658
        UseArgs_true,
3659
        Protected_false},
3660
    {"keyError",
3661
        defaultAction(&Actions::error),
3662
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3663
        "error",
3664
        UseArgs_false,
3665
        Protected_true},
3666
    {"keyDumpg",
3667
        defaultAction(&Actions::dumpGraphics),
3668
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3669
        "dumpg",
3670
        UseArgs_false,
3671
        Protected_true},
3672
    {"keyDumpe",
3673
        defaultAction(&Actions::dumpEnvironment),
3674
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3675
        "dumpe",
3676
        UseArgs_false,
3677
        Protected_true},
3678
    {"keyDumpt",
3679
        defaultAction(&Actions::dumpTests),
3680
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3681
        "dumpt",
3682
        UseArgs_false,
3683
        Protected_true},
3684
    {"keyDumpOGL",
3685
        defaultAction(&Actions::dumpOGL),
3686
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3687
        "dumpogl",
3688
        UseArgs_false,
3689
        Protected_true},
3690
    {"keyDumpGL",
3691
        defaultAction(&Actions::dumpGL),
3692
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3693
        "dumpgl",
3694
        UseArgs_false,
3695
        Protected_true},
3696
    {"keyDumpMods",
3697
        defaultAction(&Actions::dumpMods),
3698
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3699
        "dumpMods",
3700
        UseArgs_false,
3701
        Protected_false},
3702
    {"keyUrl",
3703
        defaultAction(&Actions::url),
3704
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3705
        "url",
3706
        UseArgs_true,
3707
        Protected_true},
3708
    {"keyOpenUrl",
3709
        defaultAction(&Actions::openUrl),
3710
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3711
        "open",
3712
        UseArgs_true,
3713
        Protected_true},
3714
    {"keyExecute",
3715
        defaultAction(&Actions::execute),
3716
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3717
        "execute",
3718
        UseArgs_true,
3719
        Protected_true},
3720
    {"keyTestSdlFont",
3721
        emptyKey,
3722
        emptyKey,
3723
        Input::GRP_DEFAULT,
3724
#if defined USE_OPENGL && defined DEBUG_SDLFONT
3725
        &Actions::testSdlFont,
3726
#else  // defined USE_OPENGL && defined DEBUG_SDLFONT
3727
        nullptr,
3728
#endif  // defined USE_OPENGL && defined DEBUG_SDLFONT
3729
        InputAction::NO_VALUE, 50,
3730
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3731
#if defined USE_OPENGL && defined DEBUG_SDLFONT
3732
        "testsdlfont",
3733
#else  // defined USE_OPENGL && defined DEBUG_SDLFONT
3734
        "",
3735
#endif  // defined USE_OPENGL && defined DEBUG_SDLFONT
3736
        UseArgs_false,
3737
        Protected_true},
3738
    {"keyEnableHightlight",
3739
        defaultAction(&Actions::enableHighlight),
3740
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3741
        "enablehighlight",
3742
        UseArgs_false,
3743
        Protected_true},
3744
    {"keyDisableHightlight",
3745
        defaultAction(&Actions::disableHighlight),
3746
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3747
        "disablehighlight",
3748
        UseArgs_false,
3749
        Protected_true},
3750
    {"keyDontRemoveName",
3751
        defaultAction(&Actions::dontRemoveName),
3752
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3753
        "dontremovename",
3754
        UseArgs_false,
3755
        Protected_true},
3756
    {"keyRemoveName",
3757
        defaultAction(&Actions::removeName),
3758
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3759
        "removename",
3760
        UseArgs_false,
3761
        Protected_true},
3762
    {"keyDisableAway",
3763
        defaultAction(&Actions::disableAway),
3764
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3765
        "disableaway",
3766
        UseArgs_false,
3767
        Protected_true},
3768
    {"keyEnableAway",
3769
        defaultAction(&Actions::enableAway),
3770
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3771
        "enableaway",
3772
        UseArgs_false,
3773
        Protected_true},
3774
    {"keyTestParticle",
3775
        defaultAction(&Actions::testParticle),
3776
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3777
        "testparticle",
3778
        UseArgs_true,
3779
        Protected_false},
3780
    {"keyCreateItems",
3781
        defaultAction(&Actions::createItems),
3782
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3783
        "createitems",
3784
        UseArgs_false,
3785
        Protected_false},
3786
    {"keyTalkRaw",
3787
        defaultAction(&Actions::talkRaw),
3788
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3789
        "talkraw",
3790
        UseArgs_true,
3791
        Protected_true},
3792
    {"keyTalkPet",
3793
        defaultAction(&Actions::talkPet),
3794
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3795
        "talkpet",
3796
        UseArgs_true,
3797
        Protected_true},
3798
    {"keyUploadConfig",
3799
        defaultAction(&Actions::uploadConfig),
3800
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3801
        "uploadconfig",
3802
        UseArgs_false,
3803
        Protected_true},
3804
    {"keyUploadServerConfig",
3805
        defaultAction(&Actions::uploadServerConfig),
3806
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3807
        "uploadserverconfig",
3808
        UseArgs_false,
3809
        Protected_true},
3810
    {"keyUploadLog",
3811
        defaultAction(&Actions::uploadLog),
3812
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3813
        "uploadlog",
3814
        UseArgs_false,
3815
        Protected_true},
3816
    {"keyGm",
3817
        defaultAction(&Actions::gm),
3818
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3819
        "gm",
3820
        UseArgs_true,
3821
        Protected_true},
3822
    {"keyHack",
3823
        defaultAction(&Actions::hack),
3824
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3825
        "hack",
3826
        UseArgs_true,
3827
        Protected_true},
3828
    {"keyDebugSpawn",
3829
        defaultAction(&Actions::debugSpawn),
3830
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3831
        "debugspawn",
3832
        UseArgs_true,
3833
        Protected_true},
3834
    {"keyPetSmilie",
3835
        defaultAction(nullptr),
3836
        InputCondition::KEY_DOWN |
3837
            InputCondition::DEFAULT |
3838
            InputCondition::INGAME,
3839
        "",
3840
        UseArgs_false,
3841
        Protected_false},
3842
    {"keyPetEmoteShortcut1",
3843
        addKey(SDLK_1),
3844
        emptyKey,
3845
        Input::GRP_PET_EMOTION,
3846
        &Actions::petEmote,
3847
        InputAction::PET_EMOTE, 100,
3848
        InputCondition::KEY_DOWN | InputCondition::GAME,
3849
        "",
3850
        UseArgs_false,
3851
        Protected_false},
3852
    {"keyPetEmoteShortcut2",
3853
        addKey(SDLK_2),
3854
        emptyKey,
3855
        Input::GRP_PET_EMOTION,
3856
        &Actions::petEmote,
3857
        InputAction::PET_EMOTE, 100,
3858
        InputCondition::KEY_DOWN | InputCondition::GAME,
3859
        "",
3860
        UseArgs_false,
3861
        Protected_false},
3862
    {"keyPetEmoteShortcut3",
3863
        addKey(SDLK_3),
3864
        emptyKey,
3865
        Input::GRP_PET_EMOTION,
3866
        &Actions::petEmote,
3867
        InputAction::PET_EMOTE, 100,
3868
        InputCondition::KEY_DOWN | InputCondition::GAME,
3869
        "",
3870
        UseArgs_false,
3871
        Protected_false},
3872
    {"keyPetEmoteShortcut4",
3873
        addKey(SDLK_4),
3874
        emptyKey,
3875
        Input::GRP_PET_EMOTION,
3876
        &Actions::petEmote,
3877
        InputAction::PET_EMOTE, 100,
3878
        InputCondition::KEY_DOWN | InputCondition::GAME,
3879
        "",
3880
        UseArgs_false,
3881
        Protected_false},
3882
    {"keyPetEmoteShortcut5",
3883
        addKey(SDLK_5),
3884
        emptyKey,
3885
        Input::GRP_PET_EMOTION,
3886
        &Actions::petEmote,
3887
        InputAction::PET_EMOTE, 100,
3888
        InputCondition::KEY_DOWN | InputCondition::GAME,
3889
        "",
3890
        UseArgs_false,
3891
        Protected_false},
3892
    {"keyPetEmoteShortcut6",
3893
        addKey(SDLK_6),
3894
        emptyKey,
3895
        Input::GRP_PET_EMOTION,
3896
        &Actions::petEmote,
3897
        InputAction::PET_EMOTE, 100,
3898
        InputCondition::KEY_DOWN | InputCondition::GAME,
3899
        "",
3900
        UseArgs_false,
3901
        Protected_false},
3902
    {"keyPetEmoteShortcut7",
3903
        addKey(SDLK_7),
3904
        emptyKey,
3905
        Input::GRP_PET_EMOTION,
3906
        &Actions::petEmote,
3907
        InputAction::PET_EMOTE, 100,
3908
        InputCondition::KEY_DOWN | InputCondition::GAME,
3909
        "",
3910
        UseArgs_false,
3911
        Protected_false},
3912
    {"keyPetEmoteShortcut8",
3913
        addKey(SDLK_8),
3914
        emptyKey,
3915
        Input::GRP_PET_EMOTION,
3916
        &Actions::petEmote,
3917
        InputAction::PET_EMOTE, 100,
3918
        InputCondition::KEY_DOWN | InputCondition::GAME,
3919
        "",
3920
        UseArgs_false,
3921
        Protected_false},
3922
    {"keyPetEmoteShortcut9",
3923
        addKey(SDLK_9),
3924
        emptyKey,
3925
        Input::GRP_PET_EMOTION,
3926
        &Actions::petEmote,
3927
        InputAction::PET_EMOTE, 100,
3928
        InputCondition::KEY_DOWN | InputCondition::GAME,
3929
        "",
3930
        UseArgs_false,
3931
        Protected_false},
3932
    {"keyPetEmoteShortcut10",
3933
        addKey(SDLK_0),
3934
        emptyKey,
3935
        Input::GRP_PET_EMOTION,
3936
        &Actions::petEmote,
3937
        InputAction::PET_EMOTE, 100,
3938
        InputCondition::KEY_DOWN | InputCondition::GAME,
3939
        "",
3940
        UseArgs_false,
3941
        Protected_false},
3942
    {"keyPetEmoteShortcut11",
3943
        addKey(SDLK_MINUS),
3944
        emptyKey,
3945
        Input::GRP_PET_EMOTION,
3946
        &Actions::petEmote,
3947
        InputAction::PET_EMOTE, 100,
3948
        InputCondition::KEY_DOWN | InputCondition::GAME,
3949
        "",
3950
        UseArgs_false,
3951
        Protected_false},
3952
    {"keyPetEmoteShortcut12",
3953
        addKey(SDLK_EQUALS),
3954
        emptyKey,
3955
        Input::GRP_PET_EMOTION,
3956
        &Actions::petEmote,
3957
        InputAction::PET_EMOTE, 100,
3958
        InputCondition::KEY_DOWN | InputCondition::GAME,
3959
        "",
3960
        UseArgs_false,
3961
        Protected_false},
3962
    {"keyPetEmoteShortcut13",
3963
        addKey(SDLK_BACKSPACE),
3964
        emptyKey,
3965
        Input::GRP_PET_EMOTION,
3966
        &Actions::petEmote,
3967
        InputAction::PET_EMOTE, 100,
3968
        InputCondition::KEY_DOWN | InputCondition::GAME,
3969
        "",
3970
        UseArgs_false,
3971
        Protected_false},
3972
    {"keyPetEmoteShortcut14",
3973
        addKey(SDLK_INSERT),
3974
        emptyKey,
3975
        Input::GRP_PET_EMOTION,
3976
        &Actions::petEmote,
3977
        InputAction::PET_EMOTE, 100,
3978
        InputCondition::KEY_DOWN | InputCondition::GAME,
3979
        "",
3980
        UseArgs_false,
3981
        Protected_false},
3982
    {"keyPetEmoteShortcut15",
3983
        addKey(SDLK_HOME),
3984
        emptyKey,
3985
        Input::GRP_PET_EMOTION,
3986
        &Actions::petEmote,
3987
        InputAction::PET_EMOTE, 100,
3988
        InputCondition::KEY_DOWN | InputCondition::GAME,
3989
        "",
3990
        UseArgs_false,
3991
        Protected_false},
3992
    {"keyPetEmoteShortcut16",
3993
        addKey(SDLK_q),
3994
        emptyKey,
3995
        Input::GRP_PET_EMOTION,
3996
        &Actions::petEmote,
3997
        InputAction::PET_EMOTE, 100,
3998
        InputCondition::KEY_DOWN | InputCondition::GAME,
3999
        "",
4000
        UseArgs_false,
4001
        Protected_false},
4002
    {"keyPetEmoteShortcut17",
4003
        addKey(SDLK_w),
4004
        emptyKey,
4005
        Input::GRP_PET_EMOTION,
4006
        &Actions::petEmote,
4007
        InputAction::PET_EMOTE, 100,
4008
        InputCondition::KEY_DOWN | InputCondition::GAME,
4009
        "",
4010
        UseArgs_false,
4011
        Protected_false},
4012
    {"keyPetEmoteShortcut18",
4013
        addKey(SDLK_e),
4014
        emptyKey,
4015
        Input::GRP_PET_EMOTION,
4016
        &Actions::petEmote,
4017
        InputAction::PET_EMOTE, 100,
4018
        InputCondition::KEY_DOWN | InputCondition::GAME,
4019
        "",
4020
        UseArgs_false,
4021
        Protected_false},
4022
    {"keyPetEmoteShortcut19",
4023
        addKey(SDLK_r),
4024
        emptyKey,
4025
        Input::GRP_PET_EMOTION,
4026
        &Actions::petEmote,
4027
        InputAction::PET_EMOTE, 100,
4028
        InputCondition::KEY_DOWN | InputCondition::GAME,
4029
        "",
4030
        UseArgs_false,
4031
        Protected_false},
4032
    {"keyPetEmoteShortcut20",
4033
        addKey(SDLK_t),
4034
        emptyKey,
4035
        Input::GRP_PET_EMOTION,
4036
        &Actions::petEmote,
4037
        InputAction::PET_EMOTE, 100,
4038
        InputCondition::KEY_DOWN | InputCondition::GAME,
4039
        "",
4040
        UseArgs_false,
4041
        Protected_false},
4042
    {"keyPetEmoteShortcut21",
4043
        addKey(SDLK_y),
4044
        emptyKey,
4045
        Input::GRP_PET_EMOTION,
4046
        &Actions::petEmote,
4047
        InputAction::PET_EMOTE, 100,
4048
        InputCondition::KEY_DOWN | InputCondition::GAME,
4049
        "",
4050
        UseArgs_false,
4051
        Protected_false},
4052
    {"keyPetEmoteShortcut22",
4053
        addKey(SDLK_u),
4054
        emptyKey,
4055
        Input::GRP_PET_EMOTION,
4056
        &Actions::petEmote,
4057
        InputAction::PET_EMOTE, 100,
4058
        InputCondition::KEY_DOWN | InputCondition::GAME,
4059
        "",
4060
        UseArgs_false,
4061
        Protected_false},
4062
    {"keyPetEmoteShortcut23",
4063
        addKey(SDLK_i),
4064
        emptyKey,
4065
        Input::GRP_PET_EMOTION,
4066
        &Actions::petEmote,
4067
        InputAction::PET_EMOTE, 100,
4068
        InputCondition::KEY_DOWN | InputCondition::GAME,
4069
        "",
4070
        UseArgs_false,
4071
        Protected_false},
4072
    {"keyPetEmoteShortcut24",
4073
        addKey(SDLK_o),
4074
        emptyKey,
4075
        Input::GRP_PET_EMOTION,
4076
        &Actions::petEmote,
4077
        InputAction::PET_EMOTE, 100,
4078
        InputCondition::KEY_DOWN | InputCondition::GAME,
4079
        "",
4080
        UseArgs_false,
4081
        Protected_false},
4082
    {"keyPetEmoteShortcut25",
4083
        addKey(SDLK_p),
4084
        emptyKey,
4085
        Input::GRP_PET_EMOTION,
4086
        &Actions::petEmote,
4087
        InputAction::PET_EMOTE, 100,
4088
        InputCondition::KEY_DOWN | InputCondition::GAME,
4089
        "",
4090
        UseArgs_false,
4091
        Protected_false},
4092
    {"keyPetEmoteShortcut26",
4093
        addKey(SDLK_LEFTBRACKET),
4094
        emptyKey,
4095
        Input::GRP_PET_EMOTION,
4096
        &Actions::petEmote,
4097
        InputAction::PET_EMOTE, 100,
4098
        InputCondition::KEY_DOWN | InputCondition::GAME,
4099
        "",
4100
        UseArgs_false,
4101
        Protected_false},
4102
    {"keyPetEmoteShortcut27",
4103
        addKey(SDLK_RIGHTBRACKET),
4104
        emptyKey,
4105
        Input::GRP_PET_EMOTION,
4106
        &Actions::petEmote,
4107
        InputAction::PET_EMOTE, 100,
4108
        InputCondition::KEY_DOWN | InputCondition::GAME,
4109
        "",
4110
        UseArgs_false,
4111
        Protected_false},
4112
    {"keyPetEmoteShortcut28",
4113
        addKey(SDLK_BACKSLASH),
4114
        emptyKey,
4115
        Input::GRP_PET_EMOTION,
4116
        &Actions::petEmote,
4117
        InputAction::PET_EMOTE, 100,
4118
        InputCondition::KEY_DOWN | InputCondition::GAME,
4119
        "",
4120
        UseArgs_false,
4121
        Protected_false},
4122
    {"keyPetEmoteShortcut29",
4123
        addKey(SDLK_a),
4124
        emptyKey,
4125
        Input::GRP_PET_EMOTION,
4126
        &Actions::petEmote,
4127
        InputAction::PET_EMOTE, 100,
4128
        InputCondition::KEY_DOWN | InputCondition::GAME,
4129
        "",
4130
        UseArgs_false,
4131
        Protected_false},
4132
    {"keyPetEmoteShortcut30",
4133
        addKey(SDLK_s),
4134
        emptyKey,
4135
        Input::GRP_PET_EMOTION,
4136
        &Actions::petEmote,
4137
        InputAction::PET_EMOTE, 100,
4138
        InputCondition::KEY_DOWN | InputCondition::GAME,
4139
        "",
4140
        UseArgs_false,
4141
        Protected_false},
4142
    {"keyPetEmoteShortcut31",
4143
        addKey(SDLK_d),
4144
        emptyKey,
4145
        Input::GRP_PET_EMOTION,
4146
        &Actions::petEmote,
4147
        InputAction::PET_EMOTE, 100,
4148
        InputCondition::KEY_DOWN | InputCondition::GAME,
4149
        "",
4150
        UseArgs_false,
4151
        Protected_false},
4152
    {"keyPetEmoteShortcut32",
4153
        addKey(SDLK_f),
4154
        emptyKey,
4155
        Input::GRP_PET_EMOTION,
4156
        &Actions::petEmote,
4157
        InputAction::PET_EMOTE, 100,
4158
        InputCondition::KEY_DOWN | InputCondition::GAME,
4159
        "",
4160
        UseArgs_false,
4161
        Protected_false},
4162
    {"keyPetEmoteShortcut33",
4163
        addKey(SDLK_g),
4164
        emptyKey,
4165
        Input::GRP_PET_EMOTION,
4166
        &Actions::petEmote,
4167
        InputAction::PET_EMOTE, 100,
4168
        InputCondition::KEY_DOWN | InputCondition::GAME,
4169
        "",
4170
        UseArgs_false,
4171
        Protected_false},
4172
    {"keyPetEmoteShortcut34",
4173
        addKey(SDLK_h),
4174
        emptyKey,
4175
        Input::GRP_PET_EMOTION,
4176
        &Actions::petEmote,
4177
        InputAction::PET_EMOTE, 100,
4178
        InputCondition::KEY_DOWN | InputCondition::GAME,
4179
        "",
4180
        UseArgs_false,
4181
        Protected_false},
4182
    {"keyPetEmoteShortcut35",
4183
        addKey(SDLK_j),
4184
        emptyKey,
4185
        Input::GRP_PET_EMOTION,
4186
        &Actions::petEmote,
4187
        InputAction::PET_EMOTE, 100,
4188
        InputCondition::KEY_DOWN | InputCondition::GAME,
4189
        "",
4190
        UseArgs_false,
4191
        Protected_false},
4192
    {"keyPetEmoteShortcut36",
4193
        addKey(SDLK_k),
4194
        emptyKey,
4195
        Input::GRP_PET_EMOTION,
4196
        &Actions::petEmote,
4197
        InputAction::PET_EMOTE, 100,
4198
        InputCondition::KEY_DOWN | InputCondition::GAME,
4199
        "",
4200
        UseArgs_false,
4201
        Protected_false},
4202
    {"keyPetEmoteShortcut37",
4203
        addKey(SDLK_l),
4204
        emptyKey,
4205
        Input::GRP_PET_EMOTION,
4206
        &Actions::petEmote,
4207
        InputAction::PET_EMOTE, 100,
4208
        InputCondition::KEY_DOWN | InputCondition::GAME,
4209
        "",
4210
        UseArgs_false,
4211
        Protected_false},
4212
    {"keyPetEmoteShortcut38",
4213
        addKey(SDLK_SEMICOLON),
4214
        emptyKey,
4215
        Input::GRP_PET_EMOTION,
4216
        &Actions::petEmote,
4217
        InputAction::PET_EMOTE, 100,
4218
        InputCondition::KEY_DOWN | InputCondition::GAME,
4219
        "",
4220
        UseArgs_false,
4221
        Protected_false},
4222
    {"keyPetEmoteShortcut39",
4223
        addKey(SDLK_QUOTE),
4224
        emptyKey,
4225
        Input::GRP_PET_EMOTION,
4226
        &Actions::petEmote,
4227
        InputAction::PET_EMOTE, 100,
4228
        InputCondition::KEY_DOWN | InputCondition::GAME,
4229
        "",
4230
        UseArgs_false,
4231
        Protected_false},
4232
    {"keyPetEmoteShortcut40",
4233
        addKey(SDLK_z),
4234
        emptyKey,
4235
        Input::GRP_PET_EMOTION,
4236
        &Actions::petEmote,
4237
        InputAction::PET_EMOTE, 100,
4238
        InputCondition::KEY_DOWN | InputCondition::GAME,
4239
        "",
4240
        UseArgs_false,
4241
        Protected_false},
4242
    {"keyPetEmoteShortcut41",
4243
        addKey(SDLK_x),
4244
        emptyKey,
4245
        Input::GRP_PET_EMOTION,
4246
        &Actions::petEmote,
4247
        InputAction::PET_EMOTE, 100,
4248
        InputCondition::KEY_DOWN | InputCondition::GAME,
4249
        "",
4250
        UseArgs_false,
4251
        Protected_false},
4252
    {"keyPetEmoteShortcut42",
4253
        addKey(SDLK_c),
4254
        emptyKey,
4255
        Input::GRP_PET_EMOTION,
4256
        &Actions::petEmote,
4257
        InputAction::PET_EMOTE, 100,
4258
        InputCondition::KEY_DOWN | InputCondition::GAME,
4259
        "",
4260
        UseArgs_false,
4261
        Protected_false},
4262
    {"keyPetEmoteShortcut43",
4263
        addKey(SDLK_v),
4264
        emptyKey,
4265
        Input::GRP_PET_EMOTION,
4266
        &Actions::petEmote,
4267
        InputAction::PET_EMOTE, 100,
4268
        InputCondition::KEY_DOWN | InputCondition::GAME,
4269
        "",
4270
        UseArgs_false,
4271
        Protected_false},
4272
    {"keyPetEmoteShortcut44",
4273
        addKey(SDLK_b),
4274
        emptyKey,
4275
        Input::GRP_PET_EMOTION,
4276
        &Actions::petEmote,
4277
        InputAction::PET_EMOTE, 100,
4278
        InputCondition::KEY_DOWN | InputCondition::GAME,
4279
        "",
4280
        UseArgs_false,
4281
        Protected_false},
4282
    {"keyPetEmoteShortcut45",
4283
        addKey(SDLK_n),
4284
        emptyKey,
4285
        Input::GRP_PET_EMOTION,
4286
        &Actions::petEmote,
4287
        InputAction::PET_EMOTE, 100,
4288
        InputCondition::KEY_DOWN | InputCondition::GAME,
4289
        "",
4290
        UseArgs_false,
4291
        Protected_false},
4292
    {"keyPetEmoteShortcut46",
4293
        addKey(SDLK_m),
4294
        emptyKey,
4295
        Input::GRP_PET_EMOTION,
4296
        &Actions::petEmote,
4297
        InputAction::PET_EMOTE, 100,
4298
        InputCondition::KEY_DOWN | InputCondition::GAME,
4299
        "",
4300
        UseArgs_false,
4301
        Protected_false},
4302
    {"keyPetEmoteShortcut47",
4303
        addKey(SDLK_COMMA),
4304
        emptyKey,
4305
        Input::GRP_PET_EMOTION,
4306
        &Actions::petEmote,
4307
        InputAction::PET_EMOTE, 100,
4308
        InputCondition::KEY_DOWN | InputCondition::GAME,
4309
        "",
4310
        UseArgs_false,
4311
        Protected_false},
4312
    {"keyPetEmoteShortcut48",
4313
        addKey(SDLK_PERIOD),
4314
        emptyKey,
4315
        Input::GRP_PET_EMOTION,
4316
        &Actions::petEmote,
4317
        InputAction::PET_EMOTE, 100,
4318
        InputCondition::KEY_DOWN | InputCondition::GAME,
4319
        "",
4320
        UseArgs_false,
4321
        Protected_false},
4322
    {"keyCatchPet",
4323
        defaultAction(&Actions::catchPet),
4324
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4325
        "catchpet|catch|taming",
4326
        UseArgs_true,
4327
        Protected_true},
4328
    {"keyChatServerIgnoreWhisper",
4329
        emptyKey,
4330
        emptyKey,
4331
        Input::GRP_DEFAULT | Input::GRP_GUI,
4332
        &Actions::serverIgnoreWhisper,
4333
        InputAction::NO_VALUE, 50,
4334
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4335
        "serverignore",
4336
        UseArgs_false,
4337
        Protected_true},
4338
    {"keyChatServerUnIgnoreWhisper",
4339
        emptyKey,
4340
        emptyKey,
4341
        Input::GRP_DEFAULT | Input::GRP_GUI,
4342
        &Actions::serverUnIgnoreWhisper,
4343
        InputAction::NO_VALUE, 50,
4344
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4345
        "serverunignore",
4346
        UseArgs_false,
4347
        Protected_true},
4348
    {"keyMercenaryFire",
4349
        defaultAction(&Actions::mercenaryFire),
4350
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4351
        "mercenaryfire|firemercenary",
4352
        UseArgs_false,
4353
        Protected_true},
4354
    {"keyTargetMercenary",
4355
        defaultAction(&Actions::targetMercenary),
4356
        InputCondition::KEY_DOWN |
4357
            InputCondition::INGAME |
4358
            InputCondition::NOTARGET,
4359
        "targetmercenary",
4360
        UseArgs_false,
4361
        Protected_false},
4362
    {"keyTargetPet",
4363
        defaultAction(&Actions::targetPet),
4364
        InputCondition::KEY_DOWN |
4365
            InputCondition::INGAME |
4366
            InputCondition::NOTARGET,
4367
        "targetpet",
4368
        UseArgs_false,
4369
        Protected_false},
4370
    {"keyPetSetName",
4371
        defaultAction(&Actions::setPetName),
4372
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4373
        "setpetname|petsetname",
4374
        UseArgs_false,
4375
        Protected_true},
4376
    {"keyHomunculusSetName",
4377
        defaultAction(&Actions::setHomunculusName),
4378
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4379
        "sethomunname|homunsetname|sethomunculusname|homunculussetname",
4380
        UseArgs_false,
4381
        Protected_true},
4382
    {"keyHomunculusFire",
4383
        defaultAction(&Actions::fireHomunculus),
4384
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4385
        "firehomunculus|homunculusfire|firehomun|homunfire",
4386
        UseArgs_false,
4387
        Protected_true},
4388
    {"keyWindowBank",
4389
        emptyKey,
4390
        emptyKey,
4391
        Input::GRP_DEFAULT | Input::GRP_GUI,
4392
        &Actions::bankWindowShow,
4393
        InputAction::NO_VALUE, 50,
4394
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
4395
        "bank|openbank",
4396
        UseArgs_false,
4397
        Protected_