FS2_Open
Open source remastering of the Freespace 2 engine
controlsconfigcommon.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) Volition, Inc. 1999. All rights reserved.
3  *
4  * All source code herein is the property of Volition, Inc. You may not sell
5  * or otherwise commercially exploit the source or things you created based on the
6  * source.
7  *
8 */
9 
10 #include <stdio.h>
11 #include <stdarg.h>
12 
13 #include "cfile/cfile.h"
15 #include "globalincs/def_files.h"
16 #include "globalincs/systemvars.h"
17 #include "io/joy.h"
18 #include "io/key.h"
19 #include "localization/localize.h"
20 #include "parse/parselo.h"
21 
22 // z64: These enumerations MUST equal to those in controlsconfig.cpp...
23 // z64: Really need a better way than this.
24 enum CC_tab {
29 };
30 
32 
33 // assume control keys are used as modifiers until we find out
37 
38 int Axis_enabled[JOY_NUM_AXES] = { 1, 1, 1, 0, 0, 0 };
39 int Axis_enabled_defaults[JOY_NUM_AXES] = { 1, 1, 1, 0, 0, 0 };
40 int Invert_axis[JOY_NUM_AXES] = { 0, 0, 0, 0, 0, 0 };
41 int Invert_axis_defaults[JOY_NUM_AXES] = { 0, 0, 0, 0, 0, 0 };
42 
45 //XSTR:OFF
47  // targeting a ship
48  { KEY_T, -1, TARGET_TAB, true, "Target Next Ship", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
49  { KEY_SHIFTED | KEY_T, -1, TARGET_TAB, true, "Target Previous Ship", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
50  { KEY_H, 2, TARGET_TAB, true, "Target Next Closest Hostile Ship", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
51  { KEY_SHIFTED | KEY_H, -1, TARGET_TAB, true, "Target Previous Closest Hostile Ship", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
52  { KEY_ALTED | KEY_H, -1, TARGET_TAB, true, "Toggle Auto Targeting", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
53  { KEY_F, -1, TARGET_TAB, true, "Target Next Closest Friendly Ship", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
54  { KEY_SHIFTED | KEY_F, -1, TARGET_TAB, true, "Target Previous Closest Friendly Ship", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
55  { KEY_Y, 4, TARGET_TAB, true, "Target Ship in Reticle", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
56  { KEY_G, -1, TARGET_TAB, true, "Target Target's Nearest Attacker", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
57  { KEY_ALTED | KEY_Y, -1, TARGET_TAB, true, "Target Last Ship to Send Transmission", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
58  { KEY_ALTED | KEY_T, -1, TARGET_TAB, true, "Turn Off Targeting", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
59 
60  // targeting a ship's subsystem
61  { KEY_V, -1, TARGET_TAB, true, "Target Subsystem in Reticle", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
62  { KEY_S, -1, TARGET_TAB, true, "Target Next Subsystem", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
63  { KEY_SHIFTED | KEY_S, -1, TARGET_TAB, true, "Target Previous Subsystem", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
64  { KEY_ALTED | KEY_S, -1, TARGET_TAB, true, "Turn Off Targeting of Subsystems", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
65 
66  // matching speed
67  { KEY_M, -1, COMPUTER_TAB, true, "Match Target Speed", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
68  { KEY_ALTED | KEY_M, -1, COMPUTER_TAB, true, "Toggle Auto Speed Matching", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
69 
70  // weapons
71  { KEY_LCTRL, 0, WEAPON_TAB, true, "Fire Primary Weapon", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
72  { KEY_SPACEBAR, 1, WEAPON_TAB, true, "Fire Secondary Weapon", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
73  { KEY_PERIOD, -1, WEAPON_TAB, true, "Cycle Forward Primary Weapon", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
74  { KEY_COMMA, -1, WEAPON_TAB, true, "Cycle Backward Primary Weapon", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
75  { KEY_DIVIDE, -1, WEAPON_TAB, true, "Cycle Secondary Weapon Bank", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
76  { KEY_SHIFTED | KEY_DIVIDE, -1, WEAPON_TAB, true, "Cycle Secondary Weapon Firing Rate", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
77  { KEY_X, 3, WEAPON_TAB, true, "Launch Countermeasure", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
78 
79  // controls
80  { KEY_A, -1, SHIP_TAB, true, "Forward Thrust", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
81  { KEY_Z, -1, SHIP_TAB, true, "Reverse Thrust", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
82  { KEY_PAD7, -1, SHIP_TAB, true, "Bank Left", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
83  { KEY_PAD9, -1, SHIP_TAB, true, "Bank Right", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
84  { KEY_PAD8, -1, SHIP_TAB, true, "Pitch Forward", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
85  { KEY_PAD2, -1, SHIP_TAB, true, "Pitch Backward", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
86  { KEY_PAD4, -1, SHIP_TAB, true, "Turn Left", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
87  { KEY_PAD6, -1, SHIP_TAB, true, "Turn Right", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
88 
89  // throttle controls
90  { KEY_BACKSP, -1, SHIP_TAB, true, "Set Throttle to Zero", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
91  { KEY_SLASH, -1, SHIP_TAB, true, "Set Throttle to Max", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
92  { KEY_LBRACKET, -1, SHIP_TAB, true, "Set Throttle to One-Third", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
93  { KEY_RBRACKET, -1, SHIP_TAB, true, "Set Throttle to Two-Thirds", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
94  { KEY_EQUAL, -1, SHIP_TAB, true, "Increase Throttle 5 Percent", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
95  { KEY_MINUS, -1, SHIP_TAB, true, "Decrease Throttle 5 Percent", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
96 
97  // squadmate messaging
98  { KEY_SHIFTED | KEY_A, -1, COMPUTER_TAB, true, "Attack My Target", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
99  { KEY_SHIFTED | KEY_Z, -1, COMPUTER_TAB, true, "Disarm My Target", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
100  { KEY_SHIFTED | KEY_D, -1, COMPUTER_TAB, true, "Disable My Target", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
101  { KEY_SHIFTED | KEY_V, -1, COMPUTER_TAB, true, "Attack My Subsystem", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
102  { KEY_SHIFTED | KEY_X, -1, COMPUTER_TAB, true, "Capture My Target", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
103  { KEY_SHIFTED | KEY_E, -1, COMPUTER_TAB, true, "Engage Enemy", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
104  { KEY_SHIFTED | KEY_W, -1, COMPUTER_TAB, true, "Form on My Wing", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
105  { KEY_SHIFTED | KEY_I, -1, COMPUTER_TAB, true, "Ignore My Target", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
106  { KEY_SHIFTED | KEY_P, -1, COMPUTER_TAB, true, "Protect My Target", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
107  { KEY_SHIFTED | KEY_C, -1, COMPUTER_TAB, true, "Cover Me", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
108  { KEY_SHIFTED | KEY_J, -1, COMPUTER_TAB, true, "Return to Base", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
109  { KEY_SHIFTED | KEY_R, -1, COMPUTER_TAB, true, "Rearm Me", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
110 
111  { KEY_R, 6, TARGET_TAB, true, "Target Closest Attacking Ship", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
112 
113  // Views
114  { KEY_PADMULTIPLY, -1, COMPUTER_TAB, true, "Chase View", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
115  { KEY_PADPERIOD, -1, COMPUTER_TAB, true, "External View", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
116  { KEY_PADENTER, -1, COMPUTER_TAB, true, "Toggle External Camera Lock", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
117  { KEY_PAD0, -1, COMPUTER_TAB, true, "Free Look View", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false }, // Not in use anymore (Swifty)
118  { KEY_PADDIVIDE, -1, COMPUTER_TAB, true, "Current Target View", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
119  { KEY_PADPLUS, -1, COMPUTER_TAB, true, "Increase View Distance", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
120  { KEY_PADMINUS, -1, COMPUTER_TAB, true, "Decrease View Distance", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
121  { KEY_PAD5, -1, COMPUTER_TAB, true, "Center View", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
122  { -1, 33, COMPUTER_TAB, true, "View Up", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
123  { -1, 32, COMPUTER_TAB, true, "View Rear", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
124  { -1, 34, COMPUTER_TAB, true, "View Left", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
125  { -1, 35, COMPUTER_TAB, true, "View Right", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
126 
127  { KEY_RAPOSTRO, -1, COMPUTER_TAB, true, "Cycle Radar Range", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
128  { KEY_C, -1, COMPUTER_TAB, true, "Communications Menu", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
129  { -1, -1, -1, true, "Show Objectives", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
130  { KEY_ALTED | KEY_J, -1, COMPUTER_TAB, true, "Enter Subspace (End Mission)", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
131  { KEY_J, -1, TARGET_TAB, true, "Target Target's Target", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
132  { KEY_TAB, 5, SHIP_TAB, true, "Afterburner", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
133 
134  { KEY_INSERT, -1, COMPUTER_TAB, true, "Increase Weapon Energy", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
135  { KEY_DELETE, -1, COMPUTER_TAB, true, "Decrease Weapon Energy", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
136  { KEY_HOME, -1, COMPUTER_TAB, true, "Increase Shield Energy", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
137  { KEY_END, -1, COMPUTER_TAB, true, "Decrease Shield Energy", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
138  { KEY_PAGEUP, -1, COMPUTER_TAB, true, "Increase Engine Energy", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
139  { KEY_PAGEDOWN, -1, COMPUTER_TAB, true, "Decrease Engine Energy", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
140  { KEY_ALTED | KEY_D, -1, COMPUTER_TAB, true, "Equalize Energy Settings", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
141 
142  { KEY_Q, 7, COMPUTER_TAB, true, "Equalize Shields", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
143  { KEY_UP, -1, COMPUTER_TAB, true, "Augment Forward Shield", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
144  { KEY_DOWN, -1, COMPUTER_TAB, true, "Augment Rear Shield", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
145  { KEY_LEFT, -1, COMPUTER_TAB, true, "Augment Left Shield", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
146  { KEY_RIGHT, -1, COMPUTER_TAB, true, "Augment Right Shield", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
147  { KEY_SCROLLOCK, -1, COMPUTER_TAB, true, "Transfer Energy Laser->Shield", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
148  { KEY_SHIFTED | KEY_SCROLLOCK, -1, COMPUTER_TAB, true, "Transfer Energy Shield->Laser", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
149 // { -1, -1, -1, true, "Show Damage Popup Window" },
150 
151  { -1, -1, SHIP_TAB, false, "Glide When Pressed", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
152 //Backslash -- this was a convenient place for Glide When Pressed, as Show Damage Popup isn't used
153  { -1, -1, SHIP_TAB, true, "Bank When Pressed", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
154  { -1, -1, -1, true, "Show Nav Map", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
155  { KEY_ALTED | KEY_E, -1, COMPUTER_TAB, true, "Add or Remove Escort", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
156  { KEY_ALTED | KEY_SHIFTED | KEY_E, -1, COMPUTER_TAB, true, "Clear Escort List", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
157  { KEY_E, -1, TARGET_TAB, true, "Target Next Escort Ship", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
158  { KEY_ALTED | KEY_R, -1, TARGET_TAB, true, "Target Closest Repair Ship", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
159 
160  { KEY_U, -1, TARGET_TAB, true, "Target Next Uninspected Cargo", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
161  { KEY_SHIFTED | KEY_U, -1, TARGET_TAB, true, "Target Previous Uninspected Cargo", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
162  { KEY_N, -1, TARGET_TAB, true, "Target Newest Ship in Area", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
163  { KEY_K, -1, TARGET_TAB, true, "Target Next Live Turret", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
164  { KEY_SHIFTED | KEY_K, -1, TARGET_TAB, true, "Target Previous Live Turret", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
165 
166  { KEY_B, -1, TARGET_TAB, true, "Target Next Hostile Bomb or Bomber", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
167  { KEY_SHIFTED | KEY_B, -1, TARGET_TAB, true, "Target Previous Hostile Bomb or Bomber", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
168 
169  // multiplayer messaging keys
170  { KEY_1, -1, COMPUTER_TAB, true, "(Multiplayer) Message All", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
171  { KEY_2, -1, COMPUTER_TAB, true, "(Multiplayer) Message Friendly", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
172  { KEY_3, -1, COMPUTER_TAB, true, "(Multiplayer) Message Hostile", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
173  { KEY_4, -1, COMPUTER_TAB, true, "(Multiplayer) Message Target", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
174  { KEY_ALTED | KEY_X, -1, COMPUTER_TAB, true, "(Multiplayer) Observer Zoom to Target", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
175  { KEY_SHIFTED | KEY_PERIOD, -1, COMPUTER_TAB, true, "Increase Time Compression", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
176  { KEY_SHIFTED | KEY_COMMA, -1, COMPUTER_TAB, true, "Decrease Time Compression", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
177  { KEY_L, -1, COMPUTER_TAB, true, "Toggle High HUD Contrast", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
178  { KEY_SHIFTED | KEY_N, -1, COMPUTER_TAB, true, "(Multiplayer) Toggle Network Info", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
179  { KEY_SHIFTED | KEY_END, -1, COMPUTER_TAB, true, "(Multiplayer) Self Destruct", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
180 
181  // Misc
182  { KEY_SHIFTED | KEY_O, -1, COMPUTER_TAB, true, "Toggle HUD", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
183  { KEY_SHIFTED | KEY_3, -1, SHIP_TAB, true, "Right Thrust", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
184  { KEY_SHIFTED | KEY_1, -1, SHIP_TAB, true, "Left Thrust", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
185  { KEY_SHIFTED | KEY_PADPLUS, -1, SHIP_TAB, true, "Up Thrust", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
186  { KEY_SHIFTED | KEY_PADENTER, -1, SHIP_TAB, true, "Down Thrust", CC_TYPE_CONTINUOUS, -1, -1, 0, false, false },
187  { KEY_ALTED | KEY_SHIFTED | KEY_Q, -1, COMPUTER_TAB, true, "Toggle HUD Wireframe Target View", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
188  { -1, -1, COMPUTER_TAB, false, "Top-Down View", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
189  { -1, -1, COMPUTER_TAB, false, "Target Padlock View", CC_TYPE_TRIGGER, -1, -1, 0, false, false }, // (Swifty) Toggle for VM_TRACK
190  // Auto Navigation Systen
191  { KEY_ALTED | KEY_A, -1, COMPUTER_TAB, false, "Toggle Auto Pilot", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
192  { KEY_ALTED | KEY_N, -1, COMPUTER_TAB, false, "Cycle Nav Points", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
193  { KEY_ALTED | KEY_G, -1, SHIP_TAB, false, "Toggle Gliding", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
194  { KEY_O, -1, WEAPON_TAB, false, "Cycle Primary Weapon Firing Rate", CC_TYPE_TRIGGER, -1, -1, 0, false, false },
195  { -1, -1, -1, false, "", CC_TYPE_TRIGGER, -1, -1, 0, false, false }
196 };
197 
199  "", "Esc", "1", "2", "3", "4", "5", "6",
200  "7", "8", "9", "0", "Akzent '", "Eszett", "R\x81""cktaste", "Tab",
201  "Q", "W", "E", "R", "T", "Z", "U", "I",
202  "O", "P", "\x9A", "+", "Eingabe", "Strg Links", "A", "S",
203 
204  "D", "F", "G", "H", "J", "K", "L", "\x99",
205  "\x8E", "`", "Shift", "#", "Y", "X", "C", "V",
206  "B", "N", "M", ",", ".", "-", "Shift", "Num *",
207  "Alt", "Leertaste", "Hochstell", "F1", "F2", "F3", "F4", "F5",
208 
209  "F6", "F7", "F8", "F9", "F10", "Pause", "Rollen", "Num 7",
210  "Num 8", "Num 9", "Num -", "Num 4", "Num 5", "Num 6", "Num +", "Num 1",
211  "Num 2", "Num 3", "Num 0", "Num ,", "", "", "", "F11",
212  "F12", "", "", "", "", "", "", "",
213 
214  "", "", "", "", "", "", "", "",
215  "", "", "", "", "", "", "", "",
216  "", "", "", "", "", "", "", "",
217  "", "", "", "", "", "", "", "",
218 
219  "", "", "", "", "", "", "", "",
220  "", "", "", "", "", "", "", "",
221  "", "", "", "", "", "", "", "",
222  "", "", "", "", "Num Eingabe", "Strg Rechts", "", "",
223 
224  "", "", "", "", "", "", "", "",
225  "", "", "", "", "", "", "", "",
226  "", "", "", "", "", "Num /", "", "Druck",
227  "Alt", "", "", "", "", "", "", "",
228 
229  "", "", "", "", "", "Num Lock", "", "Pos 1",
230  "Pfeil Hoch", "Bild Hoch", "", "Pfeil Links", "", "Pfeil Rechts", "", "Ende",
231  "Pfeil Runter", "Bild Runter", "Einfg", "Entf", "", "", "", "",
232  "", "", "", "", "", "", "", "",
233 
234  "", "", "", "", "", "", "", "",
235  "", "", "", "", "", "", "", "",
236  "", "", "", "", "", "", "", "",
237  "", "", "", "", "", "", "", "",
238 };
239 
241  "Knopf 1", "Knopf 2", "Knopf 3", "Knopf 4", "Knopf 5", "Knopf 6",
242  "Knopf 7", "Knopf 8", "Knopf 9", "Knopf 10", "Knopf 11", "Knopf 12",
243  "Knopf 13", "Knopf 14", "Knopf 15", "Knopf 16", "Knopf 17", "Knopf 18",
244  "Knopf 19", "Knopf 20", "Knopf 21", "Knopf 22", "Knopf 23", "Knopf 24",
245  "Knopf 25", "Knopf 26", "Knopf 27", "Knopf 28", "Knopf 29", "Knopf 30",
246  "Knopf 31", "Knopf 32", "Hut Hinten", "Hut Vorne", "Hut Links", "Hut Rechts"
247 };
248 
250  "", "\x90""chap", "1", "2", "3", "4", "5", "6",
251  "7", "8", "9", "0", "-", "=", "Fl\x82""che Ret.", "Tab",
252  "Q", "W", "E", "R", "T", "Y", "U", "I",
253  "O", "P", "[", "]", "Entr\x82""e", "Ctrl Gauche", "A", "S",
254 
255  "D", "F", "G", "H", "J", "K", "L", ";",
256  "'", "`", "Maj.", "\\", "Z", "X", "C", "V",
257  "B", "N", "M", ",", ".", "/", "Maj.", "Pav\x82 *",
258  "Alt", "Espace", "Verr. Maj.", "F1", "F2", "F3", "F4", "F5",
259 
260  "F6", "F7", "F8", "F9", "F10", "Pause", "Arret defil", "Pav\x82 7",
261  "Pav\x82 8", "Pav\x82 9", "Pav\x82 -", "Pav\x82 4", "Pav\x82 5", "Pav\x82 6", "Pav\x82 +", "Pav\x82 1",
262  "Pav\x82 2", "Pav\x82 3", "Pav\x82 0", "Pav\x82 .", "", "", "", "F11",
263  "F12", "", "", "", "", "", "", "",
264 
265  "", "", "", "", "", "", "", "",
266  "", "", "", "", "", "", "", "",
267  "", "", "", "", "", "", "", "",
268  "", "", "", "", "", "", "", "",
269 
270  "", "", "", "", "", "", "", "",
271  "", "", "", "", "", "", "", "",
272  "", "", "", "", "", "", "", "",
273  "", "", "", "", "Pav\x82 Entr", "Ctrl Droite", "", "",
274 
275  "", "", "", "", "", "", "", "",
276  "", "", "", "", "", "", "", "",
277  "", "", "", "", "", "Pav\x82 /", "", "Impr \x82""cran",
278  "Alt", "", "", "", "", "", "", "",
279 
280  "", "", "", "", "", "Verr num", "", "Orig.",
281  "Fl\x82""che Haut", "Page Haut", "", "Fl\x82""che Gauche", "", "Fl\x82""che Droite", "", "Fin",
282  "Fl\x82""che Bas", "Page Bas", "Inser", "Suppr", "", "", "", "",
283  "", "", "", "", "", "", "", "",
284 
285  "", "", "", "", "", "", "", "",
286  "", "", "", "", "", "", "", "",
287  "", "", "", "", "", "", "", "",
288  "", "", "", "", "", "", "", "",
289 };
290 
292  "Bouton 1", "Bouton 2", "Bouton 3", "Bouton 4", "Bouton 5", "Bouton 6",
293  "Bouton 7", "Bouton 8", "Bouton 9", "Bouton 10", "Bouton 11", "Bouton 12",
294  "Bouton 13", "Bouton 14", "Bouton 15", "Bouton 16", "Bouton 17", "Bouton 18",
295  "Bouton 19", "Bouton 20", "Bouton 21", "Bouton 22", "Bouton 23", "Bouton 24",
296  "Bouton 25", "Bouton 26", "Bouton 27", "Bouton 28", "Bouton 29", "Bouton 30",
297  "Bouton 31", "Bouton 32", "Chapeau Arri\x8Are", "Chapeau Avant", "Chapeau Gauche", "Chapeau Droite"
298 };
299 
301  "", "Esc", "1", "2", "3", "4", "5", "6",
302  "7", "8", "9", "0", "-", "=", "Backspace", "Tab",
303  "Q", "W", "E", "R", "T", "Y", "U", "I",
304  "O", "P", "[", "]", "Enter", "Lewy Ctrl", "A", "S",
305 
306  "D", "F", "G", "H", "J", "K", "L", ";",
307  "'", "`", "LShift", "\\", "Z", "X", "C", "V",
308  "B", "N", "M", ",", ".", "/", "PShift", "Num *",
309  "Alt", "Spacja", "CapsLock", "F1", "F2", "F3", "F4", "F5",
310 
311  "F6", "F7", "F8", "F9", "F10", "Pause", "Scrlock", "Num 7",
312  "Num 8", "Num 9", "Num -", "Num 4", "Num 5", "Num 6", "Num +", "Num 1",
313  "Num 2", "Num 3", "Num 0", "Num .", "", "", "", "F11",
314  "F12", "", "", "", "", "", "", "",
315 
316  "", "", "", "", "", "", "", "",
317  "", "", "", "", "", "", "", "",
318  "", "", "", "", "", "", "", "",
319  "", "", "", "", "", "", "", "",
320 
321  "", "", "", "", "", "", "", "",
322  "", "", "", "", "", "", "", "",
323  "", "", "", "", "", "", "", "",
324  "", "", "", "", "Num Enter", "Prawy Ctrl", "", "",
325 
326  "", "", "", "", "", "", "", "",
327  "", "", "", "", "", "", "", "",
328  "", "", "", "", "", "Num /", "", "PrntScr",
329  "Alt", "", "", "", "", "", "", "",
330 
331  "", "", "", "", "", "Num Lock", "", "Home",
332  "Kursor G\xF3ra", "Page Up", "", "Kursor Lewo", "", "Kursor Prawo", "", "End",
333  "Kursor D\xF3\xB3", "Page Down", "Insert", "Delete", "", "", "", "",
334  "", "", "", "", "", "", "", "",
335 
336  "", "", "", "", "", "", "", "",
337  "", "", "", "", "", "", "", "",
338  "", "", "", "", "", "", "", "",
339  "", "", "", "", "", "", "", "",
340 };
341 
343  "Przyc.1", "Przyc.2", "Przyc.3", "Przyc.4", "Przyc.5", "Przyc.6",
344  "Przyc.7", "Przyc.8", "Przyc.9", "Przyc.10", "Przyc.11", "Przyc.12",
345  "Przyc.13", "Przyc.14", "Przyc.15", "Przyc.16", "Przyc.17", "Przyc.18",
346  "Przyc.19", "Przyc.20", "Przyc.21", "Przyc.22", "Przyc.23", "Przyc.24",
347  "Przyc.25", "Przyc.26", "Przyc.27", "Przyc.28", "Przyc.29", "Przyc.30",
348  "Przyc.31", "Przyc.32", "Hat Ty\xB3", "Hat Prz\xF3\x64", "Hat Lewo", "Hat Prawo"
349 };
350 
353  "", "Esc", "1", "2", "3", "4", "5", "6",
354  "7", "8", "9", "0", "-", "=", "Backspace", "Tab",
355  "Q", "W", "E", "R", "T", "Y", "U", "I",
356  "O", "P", "[", "]", "Enter", "Left Ctrl", "A", "S",
357 
358  "D", "F", "G", "H", "J", "K", "L", ";",
359  "'", "`", "Shift", "\\", "Z", "X", "C", "V",
360  "B", "N", "M", ",", ".", "/", "Shift", "Pad *",
361  "Alt", "Spacebar", "Caps Lock", "F1", "F2", "F3", "F4", "F5",
362 
363  "F6", "F7", "F8", "F9", "F10", "Pause", "Scroll Lock", "Pad 7",
364  "Pad 8", "Pad 9", "Pad -", "Pad 4", "Pad 5", "Pad 6", "Pad +", "Pad 1",
365  "Pad 2", "Pad 3", "Pad 0", "Pad .", "", "", "", "F11",
366  "F12", "", "", "", "", "", "", "",
367 
368  "", "", "", "", "", "", "", "",
369  "", "", "", "", "", "", "", "",
370  "", "", "", "", "", "", "", "",
371  "", "", "", "", "", "", "", "",
372 
373  "", "", "", "", "", "", "", "",
374  "", "", "", "", "", "", "", "",
375  "", "", "", "", "", "", "", "",
376  "", "", "", "", "Pad Enter", "Right Ctrl", "", "",
377 
378  "", "", "", "", "", "", "", "",
379  "", "", "", "", "", "", "", "",
380  "", "", "", "", "", "Pad /", "", "Print Scrn",
381  "Alt", "", "", "", "", "", "", "",
382 
383  "", "", "", "", "", "Num Lock", "", "Home",
384  "Up Arrow", "Page Up", "", "Left Arrow", "", "Right Arrow", "", "End",
385  "Down Arrow", "Page Down", "Insert", "Delete", "", "", "", "",
386  "", "", "", "", "", "", "", "",
387 
388  "", "", "", "", "", "", "", "",
389  "", "", "", "", "", "", "", "",
390  "", "", "", "", "", "", "", "",
391  "", "", "", "", "", "", "", "",
392 };
393 
395  "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6",
396  "Button 7", "Button 8", "Button 9", "Button 10", "Button 11", "Button 12",
397  "Button 13", "Button 14", "Button 15", "Button 16", "Button 17", "Button 18",
398  "Button 19", "Button 20", "Button 21", "Button 22", "Button 23", "Button 24",
399  "Button 25", "Button 26", "Button 27", "Button 28", "Button 29", "Button 30",
400  "Button 31", "Button 32", "Hat Back", "Hat Forward", "Hat Left", "Hat Right"
401 };
402 
405 
408 
410 {
411  int i;
412 
413  Alt_is_modifier = 0;
414  Shift_is_modifier = 0;
415  Ctrl_is_modifier = 0;
416 
417  for (i=0; i<CCFG_MAX; i++) {
418  if (Control_config[i].key_id < 0)
419  continue;
420 
421  if (Control_config[i].key_id & KEY_ALTED)
422  Alt_is_modifier = 1;
423 
424  if (Control_config[i].key_id & KEY_SHIFTED)
425  Shift_is_modifier = 1;
426 
427  if (Control_config[i].key_id & KEY_CTRLED) {
428  Assert(0); // get Alan
429  Ctrl_is_modifier = 1;
430  }
431  }
432 }
433 
434 // If find_override is set to true, then this returns the index of the action
435 // which has been bound to the given key. Otherwise, the index of the action
436 // which has the given key as its default key will be returned.
437 int translate_key_to_index(const char *key, bool find_override)
438 {
439  int i, index = -1, alt = 0, shift = 0, max_scan_codes;
440 
441  max_scan_codes = sizeof(Scan_code_text_english) / sizeof(char *);
442 
443  // look for modifiers
444  Assert(key);
445  if (!strnicmp(key, "Alt", 3)) {
446  alt = 1;
447  key += 3;
448  if (*key)
449  key++;
450  }
451 
452  if (!strnicmp(key, "Shift", 5)) {
453  shift = 1;
454  key += 5;
455  if (*key)
456  key++;
457  }
458 
459  // look up index for default key
460  if (*key) {
461  for (i=0; i<max_scan_codes; i++)
462  if (!stricmp(key, Scan_code_text_english[i])) {
463  index = i;
464  break;
465  }
466 
467  if (i == max_scan_codes)
468  return -1;
469 
470  if (shift)
471  index |= KEY_SHIFTED;
472  if (alt)
473  index |= KEY_ALTED;
474 
475  // convert scancode to Control_config index
476  if (find_override) {
477  for (i=0; i<CCFG_MAX; i++) {
478  if (!Control_config[i].disabled && Control_config[i].key_id == index) {
479  index = i;
480  break;
481  }
482  }
483  } else {
484  for (i=0; i<CCFG_MAX; i++) {
485  if (!Control_config[i].disabled && Control_config[i].key_default == index) {
486  index = i;
487  break;
488  }
489  }
490  }
491 
492  if (i == CCFG_MAX)
493  return -1;
494 
495  return index;
496  }
497 
498  return -1;
499 }
500 
506 char *translate_key(char *key)
507 {
508  int index = -1, key_code = -1, joy_code = -1;
509  char *key_text = NULL;
510  char *joy_text = NULL;
511 
512  static char text[40] = {"None"};
513 
514  index = translate_key_to_index(key, false);
515  if (index < 0) {
516  return NULL;
517  }
518 
519  key_code = Control_config[index].key_id;
520  joy_code = Control_config[index].joy_id;
521 
523 
524  if (key_code >= 0) {
525  key_text = textify_scancode(key_code);
526  }
527 
528  if (joy_code >= 0) {
529  joy_text = Joy_button_text[joy_code];
530  }
531 
532  // both key and joystick button are mapped to this control
533  if ((key_code >= 0 ) && (joy_code >= 0) ) {
534  strcpy_s(text, key_text);
535  strcat_s(text, " or ");
536  strcat_s(text, joy_text);
537  }
538  // if we only have one
539  else if (key_code >= 0 ) {
540  strcpy_s(text, key_text);
541  }
542  else if (joy_code >= 0) {
543  strcpy_s(text, joy_text);
544  }
545  else {
546  strcpy_s(text, "None");
547  }
548 
549  return text;
550 }
551 
553 {
554  static char text[40];
555 
556  if (code < 0)
557  return "None";
558 
559  int keycode = code & KEY_MASK;
560 
561  *text = 0;
562  if (code & KEY_ALTED && !(keycode == KEY_LALT || keycode == KEY_RALT)) {
563  if(Lcl_gr){
564  strcat_s(text, "Alt-");
565  } else if(Lcl_fr){
566  strcat_s(text, "Alt-");
567  } else {
568  strcat_s(text, "Alt-");
569  }
570  }
571 
572  if (code & KEY_SHIFTED && !(keycode == KEY_LSHIFT || keycode == KEY_RSHIFT)) {
573  if(Lcl_gr){
574  strcat_s(text, "Shift-");
575  } else if(Lcl_fr){
576  strcat_s(text, "Maj.-");
577  } else {
578  strcat_s(text, "Shift-");
579  }
580  }
581 
582  strcat_s(text, Scan_code_text[keycode]);
583  return text;
584 }
585 //XSTR:ON
586 
588 
589 // initialize common control config stuff - call at game startup after localization has been initialized
591 {
592  for (int i=0; i<CCFG_MAX; i++) {
593  Control_config[i].disabled = false;
594  Control_config[i].continuous_ongoing = false;
595  }
596 
598  if(Lcl_gr){
601  } else if(Lcl_fr){
604  } else if(Lcl_pl){
607  } else {
610  }
611 }
612 
613 /*
614  * @brief close any common control config stuff, called at game_shutdown()
615  */
617 {
618  // only need to worry control presets for now
619  for (auto ii = Control_config_presets.cbegin(); ii != Control_config_presets.cend(); ++ii) {
620  delete[] * ii;
621  }
622 }
623 
624 
625 #include <map>
626 #include <string>
630 
634  // Dirty macro hack :D
635 #define ADD_ENUM_TO_KEY_MAP(Enum) mKeyNameToVal[#Enum] = (Enum);
636 
638  /*
639  ADD_ENUM_TO_KEY_MAP(KEY_ALTED)
640  ADD_ENUM_TO_KEY_MAP(KEY_CTRLED)
641  ADD_ENUM_TO_KEY_MAP(KEY_DEBUGGED)
642  ADD_ENUM_TO_KEY_MAP(KEY_DEBUGGED1)
643  ADD_ENUM_TO_KEY_MAP(KEY_MASK)
644 
645  ADD_ENUM_TO_KEY_MAP(KEY_DEBUG_KEY)
646  */
657 
684 
693 
696 
699 
705 
709 
712 
715 
718 
731 
748 
759 
763 
764 #undef ADD_ENUM_TO_KEY_MAP
765 }
766 
770  // Dirty macro hack :D
771 #define ADD_ENUM_TO_CCTYPE_MAP(Enum) mCCTypeNameToVal[#Enum] = (Enum);
772 
775 
776 #undef ADD_ENUM_TO_CCTYPE_MAP
777 }
778 
782  // Dirty macro hack :D
783 #define ADD_ENUM_TO_CCTAB_MAP(Enum) mCCTabNameToVal[#Enum] = (Enum);
784 
789 
790 #undef ADD_ENUM_TO_CCTAB_MAP
791 }
792 
801 }
802 
807 {
809 
810  if (cf_exists_full("controlconfigdefaults.tbl", CF_TYPE_TABLES)) {
811  read_file_text("controlconfigdefaults.tbl", CF_TYPE_TABLES);
812  } else {
813  read_file_text_from_array(defaults_get_file("controlconfigdefaults.tbl"));
814  }
815 
816  reset_parse();
817 
818  // start parsing
819  // TODO: Split this out into more helps. Too many tabs!
820  while(optional_string("#ControlConfigOverride")) {
821  config_item *cfg_preset = new config_item[CCFG_MAX + 1];
822  std::copy(Control_config, Control_config + CCFG_MAX + 1, cfg_preset);
823  Control_config_presets.push_back(cfg_preset);
824 
825  SCP_string preset_name;
826  if (optional_string("$Name:")) {
827  stuff_string_line(preset_name);
828  } else {
829  preset_name = "<unnamed preset>";
830  }
831  Control_config_preset_names.push_back(preset_name);
832 
833  while (required_string_either("#End","$Bind Name:")) {
834  const int iBufferLength = 64;
835  char szTempBuffer[iBufferLength];
836 
837  required_string("$Bind Name:");
838  stuff_string(szTempBuffer, F_NAME, iBufferLength);
839 
840  const size_t cCntrlAryLength = sizeof(Control_config) / sizeof(Control_config[0]);
841  for (size_t i = 0; i < cCntrlAryLength; ++i) {
842  config_item& r_ccConfig = cfg_preset[i];
843 
844  if (!strcmp(szTempBuffer, r_ccConfig.text)) {
853  int iTemp;
854 
855  if (optional_string("$Key Default:")) {
856  if (optional_string("NONE")) {
857  r_ccConfig.key_default = (short)-1;
858  } else {
859  stuff_string(szTempBuffer, F_NAME, iBufferLength);
860  r_ccConfig.key_default = (short)mKeyNameToVal[szTempBuffer];
861  }
862  }
863 
864  if (optional_string("$Joy Default:")) {
865  stuff_int(&iTemp);
866  r_ccConfig.joy_default = (short)iTemp;
867  }
868 
869  if (optional_string("$Key Mod Shift:")) {
870  stuff_int(&iTemp);
871  r_ccConfig.key_default |= (iTemp == 1) ? KEY_SHIFTED : 0;
872  }
873 
874  if (optional_string("$Key Mod Alt:")) {
875  stuff_int(&iTemp);
876  r_ccConfig.key_default |= (iTemp == 1) ? KEY_ALTED : 0;
877  }
878 
879  if (optional_string("$Key Mod Ctrl:")) {
880  stuff_int(&iTemp);
881  r_ccConfig.key_default |= (iTemp == 1) ? KEY_CTRLED : 0;
882  }
883 
884  if (optional_string("$Category:")) {
885  stuff_string(szTempBuffer, F_NAME, iBufferLength);
886  r_ccConfig.tab = (char)mCCTabNameToVal[szTempBuffer];
887  }
888 
889  if (optional_string("$Has XStr:")) {
890  stuff_int(&iTemp);
891  r_ccConfig.hasXSTR = (iTemp == 1);
892  }
893 
894  if (optional_string("$Type:")) {
895  stuff_string(szTempBuffer, F_NAME, iBufferLength);
896  r_ccConfig.type = (char)mCCTypeNameToVal[szTempBuffer];
897  }
898 
899  if (optional_string("+Disable")) {
900  r_ccConfig.disabled = true;
901  }
902  if (optional_string("$Disable:")) {
903  stuff_boolean(&r_ccConfig.disabled);
904  }
905 
906  // Nerf the buffer now.
907  szTempBuffer[0] = '\0';
908  } else if ((i + 1) == cCntrlAryLength) {
909  error_display(1, "Bind Name not found: %s\n", szTempBuffer);
910  advance_to_eoln(NULL);
912  return;
913  }
914  }
915  }
916 
917  required_string("#End");
918  }
919 
920  // Overwrite the control config with the first preset that was found
921  if (Control_config_presets.size() > 0) {
922  std::copy(Control_config_presets[0], Control_config_presets[0] + CCFG_MAX + 1, Control_config);
923  }
924 }
#define KEY_0
Definition: key.h:71
#define KEY_LCTRL
Definition: key.h:140
#define KEY_INSERT
Definition: key.h:173
#define JOY_NUM_AXES
Definition: joy.h:18
#define KEY_PAD9
Definition: key.h:165
void advance_to_eoln(char *more_terminators)
Definition: parselo.cpp:335
#define KEY_PADMULTIPLY
Definition: key.h:170
#define KEY_K
Definition: key.h:92
#define KEY_LAPOSTRO
Definition: key.h:122
#define KEY_F4
Definition: key.h:146
#define KEY_PADENTER
Definition: key.h:171
int i
Definition: multi_pxo.cpp:466
#define KEY_6
Definition: key.h:77
#define KEY_SLASH
Definition: key.h:112
void LoadEnumsIntoCCTabMap(void)
#define KEY_PAD5
Definition: key.h:161
SCP_vector< SCP_string > Control_config_preset_names
#define KEY_DOWN
Definition: key.h:180
#define KEY_F10
Definition: key.h:152
#define KEY_Y
Definition: key.h:106
void set_modifier_status()
#define KEY_LEFT
Definition: key.h:181
short key_id
actual key bound to action
#define KEY_F12
Definition: key.h:154
#define KEY_PAGEDOWN
Definition: key.h:178
#define KEY_5
Definition: key.h:76
#define KEY_PAD8
Definition: key.h:164
GLuint index
Definition: Glext.h:5608
#define KEY_8
Definition: key.h:79
#define KEY_RIGHT
Definition: key.h:182
#define KEY_Z
Definition: key.h:107
void stuff_string_line(char *outstr, int len)
Definition: parselo.cpp:1354
Assert(pm!=NULL)
#define KEY_1
Definition: key.h:72
#define KEY_F11
Definition: key.h:153
#define KEY_NUMLOCK
Definition: key.h:130
#define KEY_PAD1
Definition: key.h:157
int Lcl_pl
Definition: localize.cpp:49
#define KEY_PAD4
Definition: key.h:160
#define KEY_E
Definition: key.h:86
#define KEY_LSHIFT
Definition: key.h:134
#define KEY_U
Definition: key.h:102
#define KEY_F8
Definition: key.h:150
const char * defaults_get_file(const char *filename)
Definition: def_files.cpp:103
#define KEY_F5
Definition: key.h:147
void control_config_common_close()
close common control config stuff - call at game shutdown
#define KEY_PAD0
Definition: key.h:156
#define KEY_V
Definition: key.h:103
char * Scan_code_text_polish[]
#define KEY_C
Definition: key.h:84
#define KEY_PAGEUP
Definition: key.h:175
std::basic_string< char, std::char_traits< char >, std::allocator< char > > SCP_string
Definition: vmallocator.h:21
char * Scan_code_text_french[]
int key
char ** Joy_button_text
#define KEY_DELETE
Definition: key.h:176
int Ctrl_is_modifier
#define KEY_MINUS
Definition: key.h:109
bool disabled
whether this action should be available at all
void control_config_common_init()
initialize common control config stuff - call at game startup after localization has been initialized...
int required_string_either(char *str1, char *str2)
Checks for one of two required strings.
Definition: parselo.cpp:673
char * Scan_code_text_english[]
This is the text that is displayed on the screen for the keys a player selects.
char * Joy_button_text_german[]
int translate_key_to_index(const char *key, bool find_override)
short joy_id
joystick button bound to action
#define KEY_I
Definition: key.h:90
#define KEY_F7
Definition: key.h:149
#define KEY_PAD7
Definition: key.h:163
int Failed_key_index
HWND DWORD code
Definition: vddraw.h:425
short joy_default
default joystick button bound to action
#define KEY_A
Definition: key.h:82
A normal, one-shot type control that is activated when a key is or button is pressed.
#define KEY_9
Definition: key.h:80
#define KEY_SCROLLOCK
Definition: key.h:131
int Alt_is_modifier
#define ADD_ENUM_TO_CCTAB_MAP(Enum)
bool continuous_ongoing
whether this action is a continuous one and is currently ongoing
int cf_exists_full(const char *filename, int dir_type)
Definition: cfile.cpp:527
#define KEY_PAD3
Definition: key.h:159
#define ADD_ENUM_TO_CCTYPE_MAP(Enum)
#define strnicmp(s1, s2, n)
Definition: config.h:272
int Invert_axis[JOY_NUM_AXES]
#define KEY_SHIFTED
Definition: key.h:62
char * textify_scancode(int code)
void stuff_string(char *outstr, int type, int len, char *terminators)
Definition: parselo.cpp:1189
#define KEY_W
Definition: key.h:104
#define CF_TYPE_TABLES
Definition: cfile.h:50
#define KEY_ENTER
Definition: key.h:125
#define KEY_N
Definition: key.h:95
#define KEY_RCTRL
Definition: key.h:141
SCP_map< SCP_string, char > mCCTabNameToVal
#define KEY_J
Definition: key.h:91
#define KEY_PAUSE
Definition: key.h:185
int required_string(const char *pstr)
Definition: parselo.cpp:468
char tab
what tab (category) it belongs in
config_item Control_config[CCFG_MAX+1]
Stores the keyboard configuration.
int optional_string(const char *pstr)
Definition: parselo.cpp:539
#define KEY_R
Definition: key.h:99
#define KEY_RALT
Definition: key.h:138
void read_file_text(const char *filename, int mode, char *processed_text, char *raw_text)
Definition: parselo.cpp:1995
#define KEY_BACKSP
Definition: key.h:126
SCP_map< SCP_string, CC_type > mCCTypeNameToVal
int Axis_enabled[JOY_NUM_AXES]
#define KEY_7
Definition: key.h:78
#define KEY_P
Definition: key.h:97
#define KEY_T
Definition: key.h:101
char * Joy_button_text_polish[]
#define KEY_DIVIDE
Definition: key.h:111
#define KEY_PADMINUS
Definition: key.h:166
bool hasXSTR
whether we should translate this with an XSTR
void read_file_text_from_array(const char *array, char *processed_text, char *raw_text)
Definition: parselo.cpp:2022
#define KEY_F6
Definition: key.h:148
int Invert_axis_defaults[JOY_NUM_AXES]
#define KEY_O
Definition: key.h:96
void LoadEnumsIntoMaps()
void stuff_boolean(int *i, bool a_to_eol)
Definition: parselo.cpp:2519
#define KEY_PRINT_SCRN
Definition: key.h:184
char * Scan_code_text_german[]
char type
manner control should be checked in
#define KEY_F1
Definition: key.h:143
#define KEY_SLASH_UK
Definition: key.h:113
char ** Scan_code_text
#define KEY_END
Definition: key.h:177
void reset_parse(char *text)
Definition: parselo.cpp:3305
#define KEY_COMMA
Definition: key.h:114
#define KEY_Q
Definition: key.h:98
#define KEY_H
Definition: key.h:89
#define KEY_CAPSLOCK
Definition: key.h:132
int Axis_enabled_defaults[JOY_NUM_AXES]
void stuff_int(int *i)
Definition: parselo.cpp:2372
#define ADD_ENUM_TO_KEY_MAP(Enum)
short key_default
default key bound to action
#define KEY_B
Definition: key.h:83
#define KEY_EQUAL
Definition: key.h:110
void LoadEnumsIntoCCTypeMap(void)
#define KEY_PADPERIOD
Definition: key.h:168
#define strcat_s(...)
Definition: safe_strings.h:68
#define KEY_ESC
Definition: key.h:124
#define KEY_ALTED
Definition: key.h:63
char * translate_key(char *key)
void LoadEnumsIntoKeyMap(void)
#define KEY_MASK
Definition: key.h:67
#define KEY_4
Definition: key.h:75
A continous control that is activated as long as the key or button is held down.
SCP_vector< config_item * > Control_config_presets
#define KEY_F2
Definition: key.h:144
char * text
describes the action in the config screen
#define F_NAME
Definition: parselo.h:34
The total number of defined control actions (or last define + 1)
#define KEY_LALT
Definition: key.h:137
int Shift_is_modifier
#define KEY_LBRACKET
Definition: key.h:118
void error_display(int error_level, char *format,...)
Definition: parselo.cpp:308
void ignore_white_space()
Definition: parselo.cpp:77
SCP_map< SCP_string, int > mKeyNameToVal
#define KEY_CTRLED
Definition: key.h:64
#define KEY_RAPOSTRO
Definition: key.h:121
#define KEY_SPACEBAR
Definition: key.h:128
#define KEY_TAB
Definition: key.h:127
void control_config_common_load_overrides()
Parses controlconfigdefault.tbl, and overrides the default control configuration for each valid entry...
#define KEY_UP
Definition: key.h:179
char * Joy_button_text_french[]
#define KEY_G
Definition: key.h:88
#define KEY_SEMICOL
Definition: key.h:116
#define KEY_PAD6
Definition: key.h:162
#define KEY_HOME
Definition: key.h:174
#define KEY_X
Definition: key.h:105
#define KEY_M
Definition: key.h:94
#define KEY_BREAK
Definition: key.h:186
int Lcl_fr
Definition: localize.cpp:47
#define KEY_PAD2
Definition: key.h:158
#define KEY_PERIOD
Definition: key.h:115
#define KEY_S
Definition: key.h:100
#define KEY_2
Definition: key.h:73
#define KEY_PADPLUS
Definition: key.h:167
char * Joy_button_text_english[]
#define stricmp(s1, s2)
Definition: config.h:271
#define KEY_D
Definition: key.h:85
#define KEY_PADDIVIDE
Definition: key.h:169
#define KEY_F3
Definition: key.h:145
int Lcl_gr
Definition: localize.cpp:48
#define KEY_F9
Definition: key.h:151
#define KEY_L
Definition: key.h:93
#define KEY_F
Definition: key.h:87
#define strcpy_s(...)
Definition: safe_strings.h:67
#define KEY_3
Definition: key.h:74
#define KEY_RBRACKET
Definition: key.h:119
#define KEY_RSHIFT
Definition: key.h:135