Subversion Repositories Games.Descent

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 pmbaty 1
/*
2
 * This file is part of the DXX-Rebirth project <https://www.dxx-rebirth.com/>.
3
 * It is copyright by its individual contributors, as recorded in the
4
 * project's Git history.  See COPYING.txt at the top level for license
5
 * terms and a link to the Git history.
6
 */
7
 
8
#define DXX_SCONF_NO_INCLUDES
9
#include "dxxsconf.h"
10
 
11
/* These macros are present in the input text to pass information to the
12
 * Python script `similar/main/generate-kconfig-udlr.py`.  Their content
13
 * is made available to the compiler in generated definitions, rather
14
 * than by exposing them in their original location in the source file.
15
 * Instruct the preprocessor to remove them when performing a regular
16
 * compile of the table. */
17
#ifndef DXX_KCONFIG_UI_ENUM
18
#define DXX_KCONFIG_UI_ENUM(ENUM)
19
//#define DXX_KCONFIG_UI_ENUM(ENUM) ENUM // Pierre-Marie Baty
20
#endif
21
 
22
#ifndef DXX_KCONFIG_UI_LABEL
23
#define DXX_KCONFIG_UI_LABEL(LABEL)
24
//#define DXX_KCONFIG_UI_LABEL(LABEL) LABEL // Pierre-Marie Baty
25
#endif
26
 
27
#define DXX_KCONFIG_UI_UDLR3(A,B)       DXX_KCONFIG_UI_UDLR_A_ ## A ## _B_ ## B()
28
#define DXX_KCONFIG_UI_UDLR2(A,B)       DXX_KCONFIG_UI_UDLR3(A,B)
29
#define DXX_KCONFIG_UI_UDLR()   DXX_KCONFIG_UI_UDLR2(0,__LINE__)
30
//#define DXX_KCONFIG_UI_UDLR() "" // Pierre-Marie Baty
31
#define DXX_KCONFIG_UI_LABEL_BLANK      ""
32
#define DXX_KCONFIG_UI_INVERT_FLAG_WIDTH        8
33
#define DXX_KCONFIG_UI_ROW_CELL_HEIGHT(N)       (8 * N)
34
#define DXX_KCONFIG_UI_ROW_SEPARATOR_HEIGHT     4
35
#define DXX_KCONFIG_UI_CELL_WIDTH       26
36
 
37
#define DXX_KCONFIG_UI_KEYBOARD_X1_GROUP1_Y     49
38
#define DXX_KCONFIG_UI_KEYBOARD_X1_GROUP2_Y     DXX_KCONFIG_UI_KEYBOARD_X1_GROUP1_Y + DXX_KCONFIG_UI_ROW_SEPARATOR_HEIGHT
39
#define DXX_KCONFIG_UI_KEYBOARD_X1_GROUP3_Y     DXX_KCONFIG_UI_KEYBOARD_X1_GROUP2_Y + DXX_KCONFIG_UI_ROW_SEPARATOR_HEIGHT
40
#define DXX_KCONFIG_UI_KEYBOARD_X1_GROUP4_Y     DXX_KCONFIG_UI_KEYBOARD_X1_GROUP3_Y + 8
41
#define DXX_KCONFIG_UI_KEYBOARD_X2_GROUP1_Y     DXX_KCONFIG_UI_KEYBOARD_X1_GROUP1_Y
42
#define DXX_KCONFIG_UI_KEYBOARD_X2_GROUP2_Y     DXX_KCONFIG_UI_KEYBOARD_X2_GROUP1_Y + DXX_KCONFIG_UI_ROW_SEPARATOR_HEIGHT
43
#define DXX_KCONFIG_UI_KEYBOARD_X2_GROUP3_Y     DXX_KCONFIG_UI_KEYBOARD_X2_GROUP2_Y + DXX_KCONFIG_UI_ROW_SEPARATOR_HEIGHT
44
#define DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y     DXX_KCONFIG_UI_KEYBOARD_X2_GROUP3_Y + DXX_KCONFIG_UI_ROW_SEPARATOR_HEIGHT
45
#define DXX_KCONFIG_UI_KEYBOARD_X2_GROUP5_Y     DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y + 6
46
 
47
#define DXX_KCONFIG_UI_KEYBOARD_LABEL_X1        15
48
#define DXX_KCONFIG_UI_KEYBOARD_LABEL_X2        158
49
#define DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1     86
50
#define DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2     115
51
#define DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1     241
52
#define DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2     270
53
 
54
#ifdef kc_item
55
//        x,  y, xi, w2,  u,  d,   l, r, type, state_bit, state_ptr
56
constexpr kc_item kc_keyboard[] = {
57
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Pitch forward") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::key_pitch_forward} },
58
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::key_pitch_forward} },
59
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Pitch backward") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::key_pitch_backward} },
60
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::key_pitch_backward} },
61
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Turn left") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::key_heading_left} },
62
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::key_heading_left} },
63
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Turn right") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::key_heading_right} },
64
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::key_heading_right} },
65
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 4), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide on") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::slide_on} },
66
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 4), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::slide_on} },
67
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 5), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide left") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::key_slide_left} },
68
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 5), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::key_slide_left} },
69
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 6), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide right") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::key_slide_right} },
70
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 6), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::key_slide_right} },
71
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 7), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide up") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::key_slide_up} },
72
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 7), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::key_slide_up} },
73
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide down") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::key_slide_down} },
74
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::key_slide_down} },
75
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP3_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 9), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Bank on") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::bank_on} },
76
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP3_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 9), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::bank_on} },
77
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP3_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(10), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Bank left") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::key_bank_left} },
78
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP3_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(10), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::key_bank_left} },
79
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP3_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(11), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Bank right") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::key_bank_right} },
80
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP3_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(11), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::key_bank_right} },
81
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Fire primary") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::fire_primary} },
82
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::fire_primary} },
83
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Fire secondary") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::fire_secondary} },
84
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::fire_secondary} },
85
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Fire flare") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::fire_flare} },
86
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::fire_flare} },
87
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP3_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 6), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Accelerate") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::accelerate} },
88
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP3_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 6), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::accelerate} },
89
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP3_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 7), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Reverse") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::reverse} },
90
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP3_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 7), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::reverse} },
91
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Drop Bomb") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::drop_bomb} },
92
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP1_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::drop_bomb} },
93
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 4), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("REAR VIEW") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::rear_view} },
94
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 4), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::rear_view} },
95
#if defined(DXX_BUILD_DESCENT_I)
96
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cruise Faster") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::cruise_plus} },
97
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::cruise_plus} },
98
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 9), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cruise Slower") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::cruise_minus} },
99
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 9), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::cruise_minus} },
100
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(10), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cruise Off") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::cruise_off} },
101
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(10), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::cruise_off} },
102
#elif defined(DXX_BUILD_DESCENT_II)
103
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 9), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cruise Faster") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::cruise_plus} },
104
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 9), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::cruise_plus} },
105
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(10), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cruise Slower") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::cruise_minus} },
106
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(10), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::cruise_minus} },
107
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(11), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cruise Off") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::cruise_off} },
108
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(11), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::cruise_off} },
109
#endif
110
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 5), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Automap") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::automap} },
111
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP2_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 5), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::automap} },
112
#if defined(DXX_BUILD_DESCENT_II)
113
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP3_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Afterburner") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::afterburner} },
114
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP3_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::afterburner} },
115
#endif
116
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(12), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cycle Primary") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::cycle_primary} },
117
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(12), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::cycle_primary} },
118
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(13), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cycle Second.") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::cycle_secondary} },
119
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X1, DXX_KCONFIG_UI_KEYBOARD_X1_GROUP4_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(13), DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::cycle_secondary} },
120
#if defined(DXX_BUILD_DESCENT_II)
121
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP5_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(12), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Headlight") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::headlight} },
122
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP5_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(12), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::headlight} },
123
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP5_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(13), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Energy->Shield") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT1, {&control_info::state_controls_t::energy_to_shield} },
124
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP5_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(13), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_BIT2, {&control_info::state_controls_t::energy_to_shield} },
125
        {DXX_KCONFIG_UI_KEYBOARD_LABEL_X2, DXX_KCONFIG_UI_KEYBOARD_X2_GROUP5_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(14), DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Toggle Bomb") DXX_KCONFIG_UI_UDLR(), BT_KEY, STATE_NONE, {&control_info::state_controls_t::toggle_bomb} },
126
#endif
127
};
128
#endif
129
 
130
#undef DXX_KCONFIG_UI_KEYBOARD_LABEL_X2
131
#undef DXX_KCONFIG_UI_KEYBOARD_LABEL_X1
132
 
133
#if DXX_MAX_JOYSTICKS
134
#define DXX_KCONFIG_UI_JOYSTICK_TOP_Y   40
135
#define DXX_KCONFIG_UI_JOYSTICK_ROW_HEIGHT      8
136
#define DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y   (DXX_KCONFIG_UI_JOYSTICK_TOP_Y + (DXX_KCONFIG_UI_JOYSTICK_ROW_HEIGHT * 2))
137
#define DXX_KCONFIG_UI_JOYSTICK_AXES_TOP_Y      (DXX_KCONFIG_UI_JOYSTICK_TOP_Y + (DXX_KCONFIG_UI_JOYSTICK_ROW_HEIGHT * 15))
138
 
139
#define DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X1   22
140
#define DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X2   164
141
#define DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1        22
142
#define DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2        174
143
 
144
#define DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1     248
145
#define DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C2     278
146
 
147
#if defined(DXX_BUILD_DESCENT_I)
148
#define DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1     104
149
#define DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2     133
150
#elif defined(DXX_BUILD_DESCENT_II)
151
#define DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1     102
152
#define DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2     132
153
#endif
154
 
155
#define DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X1_C1        73
156
#define DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X1_CI        121
157
#define DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X2_C1        222
158
#define DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X2_CI        270
159
 
160
#ifdef kc_item
161
constexpr kc_item kc_joystick[] = {
162
#if DXX_MAX_BUTTONS_PER_JOYSTICK || DXX_MAX_HATS_PER_JOYSTICK
163
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Fire primary") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::fire_primary} },
164
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Fire secondary") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::fire_secondary} },
165
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 4), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Accelerate") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::accelerate} },
166
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 5), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Reverse") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::reverse} },
167
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Fire flare") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::fire_flare} },
168
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide on") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::slide_on} },
169
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide left") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::btn_slide_left} },
170
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide right") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::btn_slide_right} },
171
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide up") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::btn_slide_up} },
172
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 4), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide down") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::btn_slide_down} },
173
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 5), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Bank on") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::bank_on} },
174
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 6), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Bank left") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::btn_bank_left} },
175
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 7), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Bank right") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::btn_bank_right} },
176
#endif
177
#if DXX_MAX_AXES_PER_JOYSTICK
178
        {DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_ENUM(pitch) DXX_KCONFIG_UI_LABEL("Pitch U/D") DXX_KCONFIG_UI_UDLR(), BT_JOY_AXIS, STATE_NONE, {nullptr} },
179
        {DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X1_CI, DXX_KCONFIG_UI_INVERT_FLAG_WIDTH, DXX_KCONFIG_UI_ENUM(invert_pitch) DXX_KCONFIG_UI_UDLR(), BT_INVERT, STATE_NONE, {nullptr} },
180
        {DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_ENUM(turn) DXX_KCONFIG_UI_LABEL("Turn L/R") DXX_KCONFIG_UI_UDLR(), BT_JOY_AXIS, STATE_NONE, {nullptr} },
181
        {DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X1_CI, DXX_KCONFIG_UI_INVERT_FLAG_WIDTH, DXX_KCONFIG_UI_ENUM(invert_turn) DXX_KCONFIG_UI_UDLR(), BT_INVERT, STATE_NONE, {nullptr} },
182
        {DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_ENUM(slide_lr) DXX_KCONFIG_UI_LABEL("Slide L/R") DXX_KCONFIG_UI_UDLR(), BT_JOY_AXIS, STATE_NONE, {nullptr} },
183
        {DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X2_CI, DXX_KCONFIG_UI_INVERT_FLAG_WIDTH, DXX_KCONFIG_UI_ENUM(invert_slide_lr) DXX_KCONFIG_UI_UDLR(), BT_INVERT, STATE_NONE, {nullptr} },
184
        {DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_ENUM(slide_ud) DXX_KCONFIG_UI_LABEL("Slide U/D") DXX_KCONFIG_UI_UDLR(), BT_JOY_AXIS, STATE_NONE, {nullptr} },
185
        {DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X2_CI, DXX_KCONFIG_UI_INVERT_FLAG_WIDTH, DXX_KCONFIG_UI_ENUM(invert_slide_ud) DXX_KCONFIG_UI_UDLR(), BT_INVERT, STATE_NONE, {nullptr} },
186
        {DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 4), DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_ENUM(bank) DXX_KCONFIG_UI_LABEL("Bank L/R") DXX_KCONFIG_UI_UDLR(), BT_JOY_AXIS, STATE_NONE, {nullptr} },
187
        {DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 4), DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X2_CI, DXX_KCONFIG_UI_INVERT_FLAG_WIDTH, DXX_KCONFIG_UI_ENUM(invert_bank) DXX_KCONFIG_UI_UDLR(), BT_INVERT, STATE_NONE, {nullptr} },
188
        {DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 5), DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_ENUM(throttle) DXX_KCONFIG_UI_LABEL("Throttle") DXX_KCONFIG_UI_UDLR(), BT_JOY_AXIS, STATE_NONE, {nullptr} },
189
        {DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 5), DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X2_CI, DXX_KCONFIG_UI_INVERT_FLAG_WIDTH, DXX_KCONFIG_UI_ENUM(invert_throttle) DXX_KCONFIG_UI_UDLR(), BT_INVERT, STATE_NONE, {nullptr} },
190
#endif
191
#if DXX_MAX_BUTTONS_PER_JOYSTICK || DXX_MAX_HATS_PER_JOYSTICK
192
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 6), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Rear view") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::rear_view} },
193
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Drop bomb") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::drop_bomb} },
194
#if defined(DXX_BUILD_DESCENT_I)
195
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 7), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Automap") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::automap} },
196
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 7), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::automap} },
197
#elif defined(DXX_BUILD_DESCENT_II)
198
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 7), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Afterburner") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::afterburner} },
199
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cycle Primary") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::cycle_primary} },
200
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 9), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cycle Secondary") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::cycle_secondary} },
201
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Headlight") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::headlight} },
202
#endif
203
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Fire primary") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::fire_primary} },
204
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Fire secondary") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::fire_secondary} },
205
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 4), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Accelerate") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::accelerate} },
206
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 5), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Reverse") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::reverse} },
207
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Fire flare") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::fire_flare} },
208
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide on") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::slide_on} },
209
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide left") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::btn_slide_left} },
210
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide right") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::btn_slide_right} },
211
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide up") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::btn_slide_up} },
212
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 4), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide down") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::btn_slide_down} },
213
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 5), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Bank on") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::bank_on} },
214
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 6), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Bank left") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::btn_bank_left} },
215
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 7), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Bank right") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::btn_bank_right} },
216
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 6), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Rear view") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::rear_view} },
217
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Drop bomb") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::drop_bomb} },
218
#if defined(DXX_BUILD_DESCENT_I)
219
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cycle Primary") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::cycle_primary} },
220
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 9), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cycle Secondary") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::cycle_secondary} },
221
#elif defined(DXX_BUILD_DESCENT_II)
222
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 7), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL(DXX_KCONFIG_UI_LABEL_BLANK) DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::afterburner} },
223
#endif
224
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL(DXX_KCONFIG_UI_LABEL_BLANK) DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::cycle_primary} },
225
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 9), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL(DXX_KCONFIG_UI_LABEL_BLANK) DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::cycle_secondary} },
226
#if defined(DXX_BUILD_DESCENT_II)
227
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL(DXX_KCONFIG_UI_LABEL_BLANK) DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::headlight} },
228
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(10), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Automap") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::automap} },
229
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(10), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::automap} },
230
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 9), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Energy->Shield") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::energy_to_shield} },
231
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 9), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::energy_to_shield} },
232
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(10), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Toggle Bomb") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::toggle_bomb} },
233
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(10), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_NONE, {&control_info::state_controls_t::toggle_bomb} },
234
#endif
235
#if defined(DXX_BUILD_DESCENT_I)
236
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Menu") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::show_menu} },
237
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::show_menu} },
238
#elif defined(DXX_BUILD_DESCENT_II)
239
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(11), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Menu") DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT3, {&control_info::state_controls_t::show_menu} },
240
        {DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT(11), DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_UDLR(), BT_JOY_BUTTON, STATE_BIT4, {&control_info::state_controls_t::show_menu} },
241
#endif
242
#endif
243
};
244
#endif
245
 
246
#undef DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X2_CI
247
#undef DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X2_C1
248
#undef DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X1_CI
249
#undef DXX_KCONFIG_UI_JOYSTICK_AXES_INPUT_X1_C1
250
#undef DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C2
251
#undef DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X2_C1
252
#undef DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C2
253
#undef DXX_KCONFIG_UI_JOYSTICK_BUTTONS_INPUT_X1_C1
254
#undef DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X2
255
#undef DXX_KCONFIG_UI_JOYSTICK_BUTTONS_LABEL_X1
256
#undef DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X2
257
#undef DXX_KCONFIG_UI_JOYSTICK_AXES_LABEL_X1
258
#undef DXX_KCONFIG_UI_JOYSTICK_BUTTONS_TOP_Y
259
 
260
#endif
261
 
262
#define DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1   25
263
#define DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1   110
264
#define DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2   180
265
#define DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X2   239
266
#define DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X1_C1   83
267
#define DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X1_CI   131
268
#define DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X2_C1   238
269
#define DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X2_CI   286
270
#define DXX_KCONFIG_UI_MOUSE_TOP_Y      46
271
#define DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y      DXX_KCONFIG_UI_MOUSE_TOP_Y
272
#define DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y DXX_KCONFIG_UI_MOUSE_TOP_Y + 108
273
 
274
#ifdef kc_item
275
constexpr kc_item kc_mouse[] = {
276
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Fire primary") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::fire_primary} },
277
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Fire secondary") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::fire_secondary} },
278
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 4), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Accelerate") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::accelerate} },
279
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 5), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("reverse") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::reverse} },
280
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Fire flare") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_NONE, {&control_info::state_controls_t::fire_flare} },
281
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide on") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::slide_on} },
282
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide left") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::btn_slide_left} },
283
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide right") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::btn_slide_right} },
284
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide up") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::btn_slide_up} },
285
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 4), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Slide down") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::btn_slide_down} },
286
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 5), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Bank on") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::bank_on} },
287
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 6), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Bank left") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::btn_bank_left} },
288
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 7), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X2, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Bank right") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::btn_bank_right} },
289
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_ENUM(pitch) DXX_KCONFIG_UI_LABEL("Pitch U/D") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_AXIS, STATE_NONE, {nullptr} },
290
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X1_CI, DXX_KCONFIG_UI_INVERT_FLAG_WIDTH, DXX_KCONFIG_UI_ENUM(invert_pitch) DXX_KCONFIG_UI_UDLR(), BT_INVERT, STATE_NONE, {nullptr} },
291
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_ENUM(turn) DXX_KCONFIG_UI_LABEL("Turn L/R") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_AXIS, STATE_NONE, {nullptr} },
292
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X1_CI, DXX_KCONFIG_UI_INVERT_FLAG_WIDTH, DXX_KCONFIG_UI_ENUM(invert_turn) DXX_KCONFIG_UI_UDLR(), BT_INVERT, STATE_NONE, {nullptr} },
293
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_ENUM(slide_lr) DXX_KCONFIG_UI_LABEL("Slide L/R") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_AXIS, STATE_NONE, {nullptr} },
294
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 2), DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X1_CI, DXX_KCONFIG_UI_INVERT_FLAG_WIDTH, DXX_KCONFIG_UI_ENUM(invert_slide_lr) DXX_KCONFIG_UI_UDLR(), BT_INVERT, STATE_NONE, {nullptr} },
295
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X1_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_ENUM(slide_ud) DXX_KCONFIG_UI_LABEL("Slide U/D") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_AXIS, STATE_NONE, {nullptr} },
296
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X1_CI, DXX_KCONFIG_UI_INVERT_FLAG_WIDTH, DXX_KCONFIG_UI_ENUM(invert_slide_ud) DXX_KCONFIG_UI_UDLR(), BT_INVERT, STATE_NONE, {nullptr} },
297
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_ENUM(bank) DXX_KCONFIG_UI_LABEL("Bank L/R") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_AXIS, STATE_NONE, {nullptr} },
298
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 0), DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X2_CI, DXX_KCONFIG_UI_INVERT_FLAG_WIDTH, DXX_KCONFIG_UI_ENUM(invert_bank) DXX_KCONFIG_UI_UDLR(), BT_INVERT, STATE_NONE, {nullptr} },
299
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X2_C1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_ENUM(throttle) DXX_KCONFIG_UI_LABEL("Throttle") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_AXIS, STATE_NONE, {nullptr} },
300
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2, DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 1), DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X2_CI, DXX_KCONFIG_UI_INVERT_FLAG_WIDTH, DXX_KCONFIG_UI_ENUM(invert_throttle) DXX_KCONFIG_UI_UDLR(), BT_INVERT, STATE_NONE, {nullptr} },
301
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 6), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("REAR VIEW") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::rear_view} },
302
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 3), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Drop Bomb") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_NONE, {&control_info::state_controls_t::drop_bomb} },
303
#if defined(DXX_BUILD_DESCENT_I)
304
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 7), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cycle Primary") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_NONE, {&control_info::state_controls_t::cycle_primary} },
305
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cycle Secondary") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_NONE, {&control_info::state_controls_t::cycle_secondary} },
306
#elif defined(DXX_BUILD_DESCENT_II)
307
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 7), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Afterburner") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_BIT5, {&control_info::state_controls_t::afterburner} },
308
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 8), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cycle Primary") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_NONE, {&control_info::state_controls_t::cycle_primary} },
309
        {DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1, DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y + DXX_KCONFIG_UI_ROW_CELL_HEIGHT( 9), DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1, DXX_KCONFIG_UI_CELL_WIDTH, DXX_KCONFIG_UI_LABEL("Cycle Secondary") DXX_KCONFIG_UI_UDLR(), BT_MOUSE_BUTTON, STATE_NONE, {&control_info::state_controls_t::cycle_secondary} },
310
#endif
311
};
312
#endif
313
 
314
#define DXX_KCONFIG_UI_WEAPON_KEYS_LABEL_X1     15
315
#define DXX_KCONFIG_UI_WEAPON_KEYS_INPUT_X1_C1  157
316
#define DXX_KCONFIG_UI_WEAPON_KEYS_INPUT_X1_C2  215
317
#define DXX_KCONFIG_UI_WEAPON_KEYS_INPUT_X1_C3  273
318
#define DXX_KCONFIG_UI_WEAPON_KEYS_TOP_Y        69
319
 
320
#ifdef kc_item#endif
321
322
#undef DXX_KCONFIG_UI_WEAPON_KEYS_INPUT_X1_C3
323
#undef DXX_KCONFIG_UI_WEAPON_KEYS_INPUT_X1_C2
324
#undef DXX_KCONFIG_UI_WEAPON_KEYS_INPUT_X1_C1
325
#undef DXX_KCONFIG_UI_WEAPON_KEYS_LABEL_X1
326
#undef DXX_KCONFIG_UI_WEAPON_KEYS_TOP_Y
327
328
#undef DXX_KCONFIG_UI_MOUSE_AXES_TOP_Y
329
#undef DXX_KCONFIG_UI_MOUSE_BUTTONS_TOP_Y
330
#undef DXX_KCONFIG_UI_MOUSE_TOP_Y
331
#undef DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X2_CI
332
#undef DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X2_C1
333
#undef DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X1_CI
334
#undef DXX_KCONFIG_UI_MOUSE_AXES_INPUT_X1_C1
335
#undef DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X2
336
#undef DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X2
337
#undef DXX_KCONFIG_UI_MOUSE_BUTTONS_INPUT_X1
338
#undef DXX_KCONFIG_UI_MOUSE_BUTTONS_LABEL_X1
339
#undef DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C2
340
#undef DXX_KCONFIG_UI_KEYBOARD_INPUT_X2_C1
341
#undef DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C2
342
#undef DXX_KCONFIG_UI_KEYBOARD_INPUT_X1_C1
343
#undef DXX_KCONFIG_UI_KEYBOARD_X2_GROUP5_Y
344
#undef DXX_KCONFIG_UI_KEYBOARD_X2_GROUP4_Y
345
#undef DXX_KCONFIG_UI_KEYBOARD_X2_GROUP3_Y
346
#undef DXX_KCONFIG_UI_KEYBOARD_X2_GROUP2_Y
347
#undef DXX_KCONFIG_UI_KEYBOARD_X2_GROUP1_Y
348
#undef DXX_KCONFIG_UI_KEYBOARD_X1_GROUP4_Y
349
#undef DXX_KCONFIG_UI_KEYBOARD_X1_GROUP3_Y
350
#undef DXX_KCONFIG_UI_KEYBOARD_X1_GROUP2_Y
351
#undef DXX_KCONFIG_UI_KEYBOARD_X1_GROUP1_Y
352
353
#undef DXX_KCONFIG_UI_CELL_WIDTH
354
 
355
#undef DXX_KCONFIG_UI_ROW_CELL_HEIGHT
356
#undef DXX_KCONFIG_UI_INVERT_FLAG_WIDTH
357
#undef DXX_KCONFIG_UI_LABEL_BLANK
358
#undef DXX_KCONFIG_UI_UDLR
359
#undef DXX_KCONFIG_UI_UDLR2
360
 
361
 
362