1 /* $Id: kconfig.c,v 1.30 2004-05-22 07:27:29 btb Exp $ */
3 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
4 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
5 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
6 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
7 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
8 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
9 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
10 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
11 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
12 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
17 * Routines to configure keyboard, joystick, etc..
20 * Revision 1.18 1995/10/29 20:14:10 allender
21 * don't read mouse 30x/sec. Still causes problems -- left with
22 * exposure at > 60 frame/s
24 * Revision 1.17 1995/10/27 14:16:35 allender
25 * don't set lastreadtime when doing mouse stuff if we didn't
26 * read mouse this frame
28 * Revision 1.16 1995/10/24 18:10:22 allender
29 * get mouse stuff working right this time?
31 * Revision 1.15 1995/10/23 14:50:50 allender
32 * corrected values for control type in kc_set_controls
34 * Revision 1.14 1995/10/21 16:36:54 allender
35 * fix up mouse read time
37 * Revision 1.13 1995/10/20 00:46:53 allender
38 * fix up mouse reading problem
40 * Revision 1.12 1995/10/19 13:36:38 allender
41 * mouse support in kconfig screens
43 * Revision 1.11 1995/10/18 21:06:06 allender
44 * removed Int3 in cruise stuff -- was in there for debugging and
47 * Revision 1.10 1995/10/17 13:12:47 allender
48 * fixed config menus so buttons don't get configured
50 * Revision 1.9 1995/10/15 23:07:55 allender
51 * added return key as second button for primary fire
53 * Revision 1.8 1995/09/05 08:49:47 allender
54 * change 'PADRTN' label to 'ENTER'
56 * Revision 1.7 1995/09/01 15:38:22 allender
57 * took out cap of reading controls max 25 times/sec
59 * Revision 1.6 1995/09/01 13:33:59 allender
62 * Revision 1.5 1995/08/18 10:20:55 allender
63 * keep controls reading to 25 times/s max so fast
64 * frame rates don't mess up control reading
66 * Revision 1.4 1995/07/28 15:43:13 allender
67 * make mousebutton control primary fire
69 * Revision 1.3 1995/07/26 17:04:32 allender
70 * new defaults and make joystick main button work correctly
72 * Revision 1.2 1995/07/17 08:51:03 allender
73 * fixed up configuration menus to look right
75 * Revision 1.1 1995/05/16 15:26:56 allender
78 * Revision 2.11 1995/08/23 16:08:04 john
79 * Added version 2 of external controls that passes the ship
80 * position and orientation the drivers.
82 * Revision 2.10 1995/07/07 16:48:01 john
83 * Fixed bug with new interface.
85 * Revision 2.9 1995/07/03 15:02:32 john
86 * Added new version of external controls for Cybermouse absolute position.
88 * Revision 2.8 1995/06/30 12:30:28 john
89 * Added -Xname command line.
91 * Revision 2.7 1995/03/30 16:36:56 mike
94 * Revision 2.6 1995/03/21 14:39:31 john
95 * Ifdef'd out the NETWORK code.
97 * Revision 2.5 1995/03/16 10:53:07 john
98 * Move VFX center to Shift+Z instead of Enter because
99 * it conflicted with toggling HUD on/off.
101 * Revision 2.4 1995/03/10 13:47:24 john
102 * Added head tracking sensitivity.
104 * Revision 2.3 1995/03/09 18:07:06 john
105 * Fixed bug with iglasses tracking not "centering" right.
106 * Made VFX have bright headlight lighting.
108 * Revision 2.2 1995/03/08 15:32:39 john
109 * Made VictorMaxx head tracking use Greenleaf code.
111 * Revision 2.1 1995/03/06 15:23:31 john
112 * New screen techniques.
114 * Revision 2.0 1995/02/27 11:29:26 john
115 * New version 2.0, which has no anonymous unions, builds with
116 * Watcom 10.0, and doesn't require parsing BITMAPS.TBL.
118 * Revision 1.105 1995/02/22 14:11:58 allender
119 * remove anonymous unions from object structure
121 * Revision 1.104 1995/02/13 12:01:56 john
122 * Fixed bug with buggin not mmaking player faster.
124 * Revision 1.103 1995/02/09 22:00:46 john
125 * Added i-glasses tracking.
127 * Revision 1.102 1995/01/24 21:25:47 john
128 * Fixed bug with slide/bank on not working with
131 * Revision 1.101 1995/01/24 16:09:56 john
132 * Fixed bug with Wingman extreme customize text overwriting title.
134 * Revision 1.100 1995/01/24 12:37:46 john
135 * Made Esc exit key define menu.
137 * Revision 1.99 1995/01/23 23:54:43 matt
138 * Made keypad enter work
140 * Revision 1.98 1995/01/23 16:42:00 john
141 * Made the external controls always turn banking off, leveling off
142 * and passed automap state thru to the tsr.
144 * Revision 1.97 1995/01/12 11:41:33 john
145 * Added external control reading.
147 * Revision 1.96 1995/01/05 10:43:58 mike
148 * Handle case when timer_get_fixed_seconds() goes negative. Happens at 9.1
149 * hours. Previously, joystick would stop functioning. Now will work.
151 * Revision 1.95 1994/12/29 11:17:38 john
152 * Took out some warnings and mprintf.
154 * Revision 1.94 1994/12/29 11:07:41 john
155 * Fixed Thrustmaster and Logitech Wingman extreme
156 * Hat by reading the y2 axis during the center stage
157 * of the calibration, and using 75, 50, 27, and 3 %
158 * as values for the 4 positions.
160 * Revision 1.93 1994/12/27 12:16:20 john
161 * Fixed bug with slide on not working with joystick or mouse buttons.
163 * Revision 1.92 1994/12/20 10:34:15 john
164 * Made sensitivity work for mouse & joystick and made
165 * it only affect, pitch, heading, and roll.
167 * Revision 1.91 1994/12/16 00:11:23 matt
168 * Made delete key act normally when debug out
170 * Revision 1.90 1994/12/14 17:41:15 john
171 * Added more buttons so that Yoke would work.
173 * Revision 1.89 1994/12/13 17:25:35 allender
174 * Added Assert for bogus time for joystick reading.
176 * Revision 1.88 1994/12/13 14:48:01 john
177 * Took out some debugging mprintf's
180 * Revision 1.87 1994/12/13 14:43:02 john
181 * Took out the code in kconfig to build direction array.
182 * Called kc_set_controls after selecting a new control type.
184 * Revision 1.86 1994/12/13 01:11:32 john
185 * Fixed bug with message clearing overwriting
188 * Revision 1.85 1994/12/12 00:35:58 john
189 * Added or thing for keys.
191 * Revision 1.84 1994/12/09 17:08:06 john
192 * Made mouse a bit less sensitive.
194 * Revision 1.83 1994/12/09 16:04:00 john
195 * Increased mouse sensitivity.
197 * Revision 1.82 1994/12/09 00:41:26 mike
198 * fix hang in automap print screen
200 * Revision 1.81 1994/12/08 11:50:37 john
201 * Made strcpy only copy corect number of chars,.
203 * Revision 1.80 1994/12/07 16:16:06 john
204 * Added command to check to see if a joystick axes has been used.
206 * Revision 1.79 1994/12/07 14:52:28 yuan
209 * Revision 1.78 1994/12/07 13:37:40 john
210 * Made the joystick thrust work in reverse.
212 * Revision 1.77 1994/12/07 11:28:24 matt
213 * Did a little localization support
215 * Revision 1.76 1994/12/04 12:30:03 john
216 * Made the Thrustmaster stick read every frame, not every 10 frames,
217 * because it uses analog axis as buttons.
219 * Revision 1.75 1994/12/03 22:35:25 yuan
222 * Revision 1.74 1994/12/03 15:39:24 john
223 * Made numeric keypad move in conifg.
225 * Revision 1.73 1994/12/01 16:23:39 john
226 * Fixed include mistake.
228 * Revision 1.72 1994/12/01 16:07:57 john
229 * Fixed bug that disabled joystick in automap because it used gametime, which is
230 * paused during automap. Fixed be used timer_Get_fixed_seconds instead of GameTime.
232 * Revision 1.71 1994/12/01 12:30:49 john
233 * Made Ctrl+D delete, not Ctrl+E
235 * Revision 1.70 1994/12/01 11:52:52 john
236 * Added default values for GamePad.
238 * Revision 1.69 1994/11/30 00:59:12 mike
241 * Revision 1.68 1994/11/29 03:45:50 john
242 * Added joystick sensitivity; Added sound channels to detail menu. Removed -maxchannels
245 * Revision 1.67 1994/11/27 23:13:44 matt
246 * Made changes for new mprintf calling convention
248 * Revision 1.66 1994/11/27 19:52:12 matt
249 * Made screen shots work in a few more places
251 * Revision 1.65 1994/11/22 16:54:50 mike
252 * autorepeat on missiles.
254 * Revision 1.64 1994/11/21 11:16:17 rob
255 * Changed calls to GameLoop to calls to multi_menu_poll and changed
256 * conditions under which they are called.
258 * Revision 1.63 1994/11/19 15:14:48 mike
259 * remove unused code and data
261 * Revision 1.62 1994/11/18 23:37:56 john
262 * Changed some shorts to ints.
264 * Revision 1.61 1994/11/17 13:36:35 rob
265 * Added better network hook in kconfig menu.
267 * Revision 1.60 1994/11/14 20:09:13 john
268 * Made Tab be default for automap.
270 * Revision 1.59 1994/11/13 16:34:07 matt
271 * Fixed victormaxx angle conversions
273 * Revision 1.58 1994/11/12 14:47:05 john
274 * Added support for victor head tracking.
276 * Revision 1.57 1994/11/08 15:14:55 john
277 * Added more calls so net doesn't die in net game.
279 * Revision 1.56 1994/11/07 14:01:07 john
280 * Changed the gamma correction sequencing.
282 * Revision 1.55 1994/11/01 16:40:08 john
283 * Added Gamma correction.
285 * Revision 1.54 1994/10/25 23:09:26 john
286 * Made the automap key configurable.
288 * Revision 1.53 1994/10/25 13:11:59 john
289 * Made keys the way Adam speced 'em for final game.
291 * Revision 1.52 1994/10/24 17:44:22 john
292 * Added stereo channel reversing.
294 * Revision 1.51 1994/10/22 13:23:18 john
295 * Made default rear view key be R.
297 * Revision 1.50 1994/10/22 13:20:09 john
298 * Took out toggle primary/secondary weapons. Fixed black
299 * background for 'axes' and 'buttons' text.
301 * Revision 1.49 1994/10/21 15:20:15 john
302 * Made PrtScr do screen dump, not F2.
304 * Revision 1.48 1994/10/21 13:41:36 john
305 * Allowed F2 to screen dump.
307 * Revision 1.47 1994/10/17 13:07:05 john
308 * Moved the descent.cfg info into the player config file.
310 * Revision 1.46 1994/10/14 15:30:22 john
311 * Added Cyberman default positions.
313 * Revision 1.45 1994/10/14 15:24:54 john
314 * Made Cyberman work with config.
316 * Revision 1.44 1994/10/14 12:46:04 john
317 * Added the ability to reset all to default.
319 * Revision 1.43 1994/10/14 12:18:31 john
320 * Made mouse invert axis always be 0 or 1.
322 * Revision 1.42 1994/10/14 12:16:03 john
323 * Changed code so that by doing DEL+F12 saves the current kconfig
324 * values as default. Added support for drop_bomb key. Took out
325 * unused slots for keyboard. Made keyboard use control_type of 0
328 * Revision 1.41 1994/10/13 21:27:02 john
329 * Made axis invert value always be 0 or 1.
331 * Revision 1.40 1994/10/13 20:18:15 john
332 * Added some more system keys, such as F? and CAPSLOCK.
334 * Revision 1.39 1994/10/13 19:22:29 john
335 * Added separate config saves for different devices.
336 * Made all the devices work together better, such as mice won't
337 * get read when you're playing with the joystick.
339 * Revision 1.38 1994/10/13 15:41:57 mike
340 * Remove afterburner.
349 static char rcsid[] = "$Id: kconfig.c,v 1.30 2004-05-22 07:27:29 btb Exp $";
362 #include "pa_enabl.h" //$$POLY_ACC
370 #include "gamefont.h"
382 #include "endlevel.h"
390 #include "lighting.h"
392 #include "cntrlcen.h"
393 #if defined (TACTILE)
397 #if defined(POLY_ACC)
398 #include "poly_acc.h"
404 #include "joystick.h"
407 ubyte ExtGameStatus=1;
409 vms_vector ExtForceVec;
410 vms_matrix ExtApplyForceMatrix;
412 int ExtJoltInfo[3]={0,0,0};
413 int ExtXVibrateInfo[2]={0,0};
414 int ExtYVibrateInfo[2]={0,0};
415 ubyte ExtXVibrateClear=0;
416 ubyte ExtYVibrateClear=0;
418 #define TABLE_CREATION 1
420 // Array used to 'blink' the cursor while waiting for a keypress.
421 sbyte fades[64] = { 1,1,1,2,2,3,4,4,5,6,8,9,10,12,13,15,16,17,19,20,22,23,24,26,27,28,28,29,30,30,31,31,31,31,31,30,30,29,28,28,27,26,24,23,22,20,19,17,16,15,13,12,10,9,8,6,5,4,4,3,2,2,1,1 };
423 //char * invert_text[2] = { "N", "Y" };
424 //char * joybutton_text[28] = { "BTN 1", "BTN 2", "BTN 3", "BTN 4", "", "TRIG", "LEFT", "HAT
\81", "RIGHT", "", "", "HAT
\80", "MID", "", "", "HAT
\7f", "", "", "", "HAT
\82", "TRIG", "LEFT", "RIGHT", "", "UP","DOWN","LEFT", "RIGHT" };
425 //char * joyaxis_text[4] = { "X1", "Y1", "X2", "Y2" };
426 //char * mouseaxis_text[2] = { "L/R", "F/B" };
427 //char * mousebutton_text[3] = { "Left", "Right", "Mid" };
429 int invert_text[2] = { TNUM_N, TNUM_Y };
431 #ifndef USE_LINUX_JOY
433 int joybutton_text[28] =
434 { TNUM_BTN_1, TNUM_BTN_2, TNUM_BTN_3, TNUM_BTN_4,
438 TNUM_HAT_L, TNUM_HAT_R, TNUM_HAT_U, TNUM_HAT_D,
442 int joyaxis_text[7] = { TNUM_X1, TNUM_Y1, TNUM_Z1, TNUM_UN, TNUM_P1,TNUM_R1,TNUM_YA1 };
444 int joybutton_text[28] =
445 { TNUM_BTN_1, TNUM_BTN_2, TNUM_BTN_3, TNUM_BTN_4,
446 -1, TNUM_TRIG, TNUM_LEFT, TNUM_HAT_L,
447 TNUM_RIGHT, -1, TNUM_HAT2_D, TNUM_HAT_R,
448 TNUM_MID, -1, TNUM_HAT2_R, TNUM_HAT_U,
449 TNUM_HAT2_L, -1, TNUM_HAT2_U, TNUM_HAT_D,
450 TNUM_TRIG, TNUM_LEFT, TNUM_RIGHT, -1,
451 TNUM_UP, TNUM_DOWN, TNUM_LEFT, TNUM_RIGHT };
453 int joyaxis_text[7] = { TNUM_X1, TNUM_Y1, TNUM_Z1, TNUM_UN, TNUM_P1,TNUM_R1,TNUM_YA1 };
454 // int joyaxis_text[4] = { TNUM_X1, TNUM_Y1, TNUM_X2, TNUM_Y2 };
458 int mouseaxis_text[3] = { TNUM_L_R, TNUM_F_B, TNUM_Z1 };
460 int mousebutton_text[3] = { TNUM_LEFT, TNUM_RIGHT, TNUM_MID };
461 char * mousebutton_textra[13] = { "M4", "M5", "M6", "M7", "M8", "M9", "M10","M11","M12","M13","M14","M15","M16" };//text for buttons above 3. -MPM
463 char *mousebutton_text[3] = { "Btn", "", "" }; // only one silly mouse button on the mac
467 char * key_text[256] = {
468 "","S","D","F","H","G","Z","X","C","V","","B","Q", "W", "E", "R",
469 "Y","T","1","2","3","4","6","5","=","9","7","-", "8", "0", "]", "O",
470 "U","[","I","P","RET","L","J","'","K", ";", "\\", ",", "/", "N", "M", ".",
471 "TAB","SPC","`","DEL","","ESC","","APL","SHIFT","CAPSL","OPTN","CTRL","","","","A",
472 "","PAD.","","PAD*","","PAD+","","NMLCK","","","","PAD/","ENTER","","PAD-","",
473 "","PAD=","PAD0","PAD1","PAD2","PAD3","PAD4","PAD5","PAD6","PAD7","","PAD8","PAD9","","","",
474 "F5","F6","F7","","F8","F9","","F11","","F13","","F14","","F10","","F12",
475 "","PAUSE","HELP","HOME","PGUP","DEL","","END","F2","","F1","LARW","RARW","DARW","UARW","",
476 "","","","","","","","","","","","","","","","",
477 "","","","","","","","","","","","","","","","",
478 "","","","","","","","","","","","","","","","",
479 "","","","","","","","","","","","","","","","",
480 "","","","","","","","","","","","","","","","",
481 "","","","","","","","","","","","","","","","",
482 "","","","","","","","","","","","","","","","",
483 "","","","","","","","","","","","","","","",""};
485 #if !defined OGL && !defined SDL_INPUT
486 char * key_text[256] = { \
487 "","ESC","1","2","3","4","5","6","7","8","9","0","-", \
488 "=","BSPC","TAB","Q","W","E","R","T","Y","U","I","O", \
489 "P","[","]","
\83","LCTRL","A","S","D","F", \
490 "G","H","J","K","L",";","'","`", \
491 "LSHFT","\\","Z","X","C","V","B","N","M",",", \
492 ".","/","RSHFT","PAD*","LALT","SPC", \
493 "CPSLK","F1","F2","F3","F4","F5","F6","F7","F8","F9", \
494 "F10","NMLCK","SCLK","PAD7","PAD8","PAD9","PAD-", \
495 "PAD4","PAD5","PAD6","PAD+","PAD1","PAD2","PAD3","PAD0", \
496 "PAD.","","","","F11","F12","","","","","","","","","", \
497 "","","","","","","","","","","","","","","","","","","","", \
498 "","","","","","","","","","","","","","","","","","","","", \
499 "","","","","","","","","","","","","","","","","","", \
500 "PAD
\83","RCTRL","","","","","","","","","","","","","", \
501 "","","","","","","","","","","PAD/","","","RALT","", \
502 "","","","","","","","","","","","","","HOME","
\82","PGUP", \
503 "","
\81","","
\7f","","END","
\80","PGDN","INS", \
504 "DEL","","","","","","","","","","","","","","","","","", \
505 "","","","","","","","","","","","","","","","","","","","", \
506 "","","","","","","" };
511 //added/removed by Victor Rachels for adding rebindable keys for these
512 // KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0
513 ubyte system_keys[] = { KEY_ESC, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12, KEY_MINUS, KEY_EQUAL, KEY_PRINT_SCREEN };
515 ubyte system_keys[] = { KEY_ESC, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, KEY_MINUS, KEY_EQUAL, KEY_PRINT_SCREEN };
518 //extern void GameLoop(int, int );
520 extern void transfer_energy_to_shield(fix);
521 extern void CyclePrimary(),CycleSecondary(),InitMarkerInput();
522 extern ubyte DefiningMarkerMessage;
523 extern char CybermouseActive;
526 extern int joydefsw_do_button();
527 extern int joydefsw_do_winjoybutton(int *axis);
528 extern joydefsw_win_joyselect(char *title);
531 control_info Controls;
535 // macros for drawing lo/hi res kconfig screens (see scores.c as well)
537 #define LHX(x) ((x)*(MenuHires?2:1))
538 #define LHY(y) ((y)*(MenuHires?2.4:1))
542 #define BT_MOUSE_BUTTON 1
543 #define BT_MOUSE_AXIS 2
544 #define BT_JOY_BUTTON 3
545 #define BT_JOY_AXIS 4
548 char *btype_text[] = { "BT_KEY", "BT_MOUSE_BUTTON", "BT_MOUSE_AXIS", "BT_JOY_BUTTON", "BT_JOY_AXIS", "BT_INVERT" };
552 typedef struct kc_item {
553 short id; // The id of this item
561 ubyte value; // what key,button,etc
567 ubyte kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS];
569 //added on 2/4/99 by Victor Rachels to add d1x new keys
570 ubyte kconfig_d2x_settings[MAX_D2X_CONTROLS];
571 //end this section addition - VR
573 //----------- WARNING!!!!!!! -------------------------------------------
574 // THESE NEXT FOUR BLOCKS OF DATA ARE GENERATED BY PRESSING DEL+F12 WHEN
575 // IN THE KEYBOARD CONFIG SCREEN. BASICALLY, THAT PROCEDURE MODIFIES THE
576 // U,D,L,R FIELDS OF THE ARRAYS AND DUMPS THE NEW ARRAYS INTO KCONFIG.COD
577 //-------------------------------------------------------------------------
578 /*ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
579 {0xc8,0x48,0xd0,0x50,0xcb,0x4b,0xcd,0x4d,0x38,0xff,0xff,0x4f,0xff,0x51,0xff,0x4a,0xff,0x4e,0xff,0xff,0x10,0x47,0x12,0x49,0x1d,0x9d,0x39,0xff,0x21,0xff,0x1e,0xff,0x2c,0xff,0x30,0xff,0x13,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf,0xff,0x1f,0xff,0x33,0xff,0x34,0xff,0x23,0xff,0x14,0xff,0xff,0xff,0x0,0x0},
580 {0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
581 {0x5,0xc,0xff,0xff,0xff,0xff,0x7,0xf,0x13,0xb,0xff,0x6,0x8,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
582 {0x0,0x1,0xff,0xff,0x2,0xff,0x7,0xf,0x13,0xb,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
583 {0x3,0x0,0x1,0x2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
584 {0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
585 {0x0,0x1,0xff,0xff,0x2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
589 ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
590 {0xc8,0x48,0xd0,0x50,0xcb,0x4b,0xcd,0x4d,0x38,0xff,0xff,0x4f,0xff,0x51,0xff,0x4a,0xff,0x4e,0xff,0xff,0x10,0x47,0x12,0x49,0x1d,0x9d,0x39,0xff,0x21,0xff,0x1e,0xff,0x2c,0xff,0x30,0xff,0x13,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf,0xff,0x1f,0xff,0x33,0xff,0x34,0xff,0x23,0xff,0x14,0xff,0xff,0xff,0x0,0x0},
591 {0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0},
592 {0x5,0xc,0xff,0xff,0xff,0xff,0x7,0xf,0x13,0xb,0xff,0x6,0x8,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0},
593 {0x0,0x1,0xff,0xff,0x2,0xff,0x7,0xf,0x13,0xb,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0},
594 {0x3,0x0,0x1,0x2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0},
595 {0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0},
596 {0x0,0x1,0xff,0xff,0x2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0},
598 {0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0},
604 kc_item kc_keyboard[NUM_KEY_CONTROLS] = {
605 { 0, 15, 49, 71, 26, 55, 2, 55, 1,"Pitch forward", BT_KEY, 255 },
606 { 1, 15, 49,100, 26, 50, 3, 0, 24,"Pitch forward", BT_KEY, 255 },
607 { 2, 15, 57, 71, 26, 0, 4, 25, 3,"Pitch backward", BT_KEY, 255 },
608 { 3, 15, 57,100, 26, 1, 5, 2, 26,"Pitch backward", BT_KEY, 255 },
609 { 4, 15, 65, 71, 26, 2, 6, 27, 5,"Turn left", BT_KEY, 255 },
610 { 5, 15, 65,100, 26, 3, 7, 4, 28,"Turn left", BT_KEY, 255 },
611 { 6, 15, 73, 71, 26, 4, 8, 29, 7,"Turn right", BT_KEY, 255 },
612 { 7, 15, 73,100, 26, 5, 9, 6, 34,"Turn right", BT_KEY, 255 },
613 { 8, 15, 85, 71, 26, 6, 10, 35, 9,"Slide on", BT_KEY, 255 },
614 { 9, 15, 85,100, 26, 7, 11, 8, 36,"Slide on", BT_KEY, 255 },
615 { 10, 15, 93, 71, 26, 8, 12, 37, 11,"Slide left", BT_KEY, 255 },
616 { 11, 15, 93,100, 26, 9, 13, 10, 44,"Slide left", BT_KEY, 255 },
617 { 12, 15,101, 71, 26, 10, 14, 45, 13,"Slide right", BT_KEY, 255 },
618 { 13, 15,101,100, 26, 11, 15, 12, 30,"Slide right", BT_KEY, 255 },
619 { 14, 15,109, 71, 26, 12, 16, 31, 15,"Slide up", BT_KEY, 255 },
620 { 15, 15,109,100, 26, 13, 17, 14, 32,"Slide up", BT_KEY, 255 },
621 { 16, 15,117, 71, 26, 14, 18, 33, 17,"Slide down", BT_KEY, 255 },
622 { 17, 15,117,100, 26, 15, 19, 16, 46,"Slide down", BT_KEY, 255 },
623 { 18, 15,129, 71, 26, 16, 20, 47, 19,"Bank on", BT_KEY, 255 },
624 { 19, 15,129,100, 26, 17, 21, 18, 38,"Bank on", BT_KEY, 255 },
625 { 20, 15,137, 71, 26, 18, 22, 39, 21,"Bank left", BT_KEY, 255 },
626 { 21, 15,137,100, 26, 19, 23, 20, 40,"Bank left", BT_KEY, 255 },
627 { 22, 15,145, 71, 26, 20, 48, 41, 23,"Bank right", BT_KEY, 255 },
628 { 23, 15,145,100, 26, 21, 49, 22, 42,"Bank right", BT_KEY, 255 },
629 { 24,158, 49, 83, 26, 51, 26, 1, 25,"Fire primary", BT_KEY, 255 },
630 { 25,158, 49,112, 26, 54, 27, 24, 2,"Fire primary", BT_KEY, 255 },
631 { 26,158, 57, 83, 26, 24, 28, 3, 27,"Fire secondary", BT_KEY, 255 },
632 { 27,158, 57,112, 26, 25, 29, 26, 4,"Fire secondary", BT_KEY, 255 },
633 { 28,158, 65, 83, 26, 26, 34, 5, 29,"Fire flare", BT_KEY, 255 },
634 { 29,158, 65,112, 26, 27, 35, 28, 6,"Fire flare", BT_KEY, 255 },
635 { 30,158,105, 83, 26, 44, 32, 13, 31,"Accelerate", BT_KEY, 255 },
636 { 31,158,105,112, 26, 45, 33, 30, 14,"Accelerate", BT_KEY, 255 },
637 { 32,158,113, 83, 26, 30, 46, 15, 33,"reverse", BT_KEY, 255 },
638 { 33,158,113,112, 26, 31, 47, 32, 16,"reverse", BT_KEY, 255 },
639 { 34,158, 73, 83, 26, 28, 36, 7, 35,"Drop Bomb", BT_KEY, 255 },
640 { 35,158, 73,112, 26, 29, 37, 34, 8,"Drop Bomb", BT_KEY, 255 },
641 { 36,158, 85, 83, 26, 34, 44, 9, 37,"REAR VIEW", BT_KEY, 255 },
642 { 37,158, 85,112, 26, 35, 45, 36, 10,"REAR VIEW", BT_KEY, 255 },
643 { 38,158,133, 83, 26, 46, 40, 19, 39,"Cruise Faster", BT_KEY, 255 },
644 { 39,158,133,112, 26, 47, 41, 38, 20,"Cruise Faster", BT_KEY, 255 },
645 { 40,158,141, 83, 26, 38, 42, 21, 41,"Cruise Slower", BT_KEY, 255 },
646 { 41,158,141,112, 26, 39, 43, 40, 22,"Cruise Slower", BT_KEY, 255 },
647 { 42,158,149, 83, 26, 40, 52, 23, 43,"Cruise Off", BT_KEY, 255 },
648 { 43,158,149,112, 26, 41, 53, 42, 48,"Cruise Off", BT_KEY, 255 },
649 { 44,158, 93, 83, 26, 36, 30, 11, 45,"Automap", BT_KEY, 255 },
650 { 45,158, 93,112, 26, 37, 31, 44, 12,"Automap", BT_KEY, 255 },
651 { 46,158,121, 83, 26, 32, 38, 17, 47,"Afterburner", BT_KEY, 255 },
652 { 47,158,121,112, 26, 33, 39, 46, 18,"Afterburner", BT_KEY, 255 },
653 { 48, 15,161, 71, 26, 22, 50, 43, 49,"Cycle Primary", BT_KEY, 255 },
654 { 49, 15,161,100, 26, 23, 51, 48, 52,"Cycle Primary", BT_KEY, 255 },
655 { 50, 15,169, 71, 26, 48, 1, 53, 51,"Cycle Second", BT_KEY, 255 },
656 { 51, 15,169,100, 26, 49, 24, 50, 54,"Cycle Second", BT_KEY, 255 },
657 { 52,158,163, 83, 26, 42, 54, 49, 53,"Headlight", BT_KEY, 255 },
658 { 53,158,163,112, 26, 43, 55, 52, 50,"Headlight", BT_KEY, 255 },
659 { 54,158,171, 83, 26, 52, 56, 51, 55,"Energy->Shield", BT_KEY, 255 },
660 { 55,158,171,112, 26, 53, 0, 54, 0,"Energy->Shield", BT_KEY, 255 },
661 { 56,158,179,83, 26, 54, 0, 0, 0, "Toggle Bomb", BT_KEY,255},
663 kc_item kc_joystick[NUM_OTHER_CONTROLS] = {
664 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
665 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
666 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
667 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
668 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
669 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
670 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
671 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
672 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
673 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
674 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
675 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
676 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
677 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
678 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
679 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
680 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
681 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
682 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
683 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
684 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
685 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
686 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
687 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
688 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
689 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
690 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
691 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
692 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
693 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
694 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
696 kc_item kc_superjoy[NUM_OTHER_CONTROLS] = {
697 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
698 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
699 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
700 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
701 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
702 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
703 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
704 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
705 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
706 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
707 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
708 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
709 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
710 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
711 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
712 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
713 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
714 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
715 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
716 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
717 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
718 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
719 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
720 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
721 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
722 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
723 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
724 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
725 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
726 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
727 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
730 kc_item kc_mouse[NUM_OTHER_CONTROLS] = {
731 { 0, 25, 46, 85, 26, 12, 1, 24, 5,"Fire primary", BT_MOUSE_BUTTON, 255 },
732 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_MOUSE_BUTTON, 255 },
733 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_MOUSE_BUTTON, 255 },
734 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_MOUSE_BUTTON, 255 },
735 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_MOUSE_BUTTON, 255 },
736 { 5,180, 46, 59, 26, 24, 6, 0, 1,"Slide on", BT_MOUSE_BUTTON, 255 },
737 { 6,180, 54, 59, 26, 5, 7, 1, 4,"Slide left", BT_MOUSE_BUTTON, 255 },
738 { 7,180, 62, 59, 26, 6, 8, 4, 26,"Slide right", BT_MOUSE_BUTTON, 255 },
739 { 8,180, 70, 59, 26, 7, 9, 26, 9,"Slide up", BT_MOUSE_BUTTON, 255 },
740 { 9,180, 78, 59, 26, 8, 10, 8, 2,"Slide down", BT_MOUSE_BUTTON, 255 },
741 { 10,180, 90, 59, 26, 9, 11, 2, 3,"Bank on", BT_MOUSE_BUTTON, 255 },
742 { 11,180, 98, 59, 26, 10, 12, 3, 12,"Bank left", BT_MOUSE_BUTTON, 255 },
743 { 12,180,106, 59, 26, 11, 0, 11, 25,"Bank right", BT_MOUSE_BUTTON, 255 },
744 { 13,103,138, 58, 26, 27, 15, 25, 14,"Pitch U/D", BT_MOUSE_AXIS, 255 },
745 { 14,103,138,106, 8, 23, 16, 13, 15,"Pitch U/D", BT_INVERT, 255 },
746 { 15,103,146, 58, 26, 13, 17, 14, 16,"Turn L/R", BT_MOUSE_AXIS, 255 },
747 { 16,103,146,106, 8, 14, 18, 15, 17,"Turn L/R", BT_INVERT, 255 },
748 { 17,103,154, 58, 26, 15, 19, 16, 18,"Slide L/R", BT_MOUSE_AXIS, 255 },
749 { 18,103,154,106, 8, 16, 20, 17, 19,"Slide L/R", BT_INVERT, 255 },
750 { 19,103,162, 58, 26, 17, 21, 18, 20,"Slide U/D", BT_MOUSE_AXIS, 255 },
751 { 20,103,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
752 { 21,103,170, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_MOUSE_AXIS, 255 },
753 { 22,103,170,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
754 { 23,103,182, 58, 26, 21, 14, 22, 24,"throttle", BT_MOUSE_AXIS, 255 },
755 { 24,103,182,106, 8, 22, 5, 23, 0,"throttle", BT_INVERT, 255 },
756 { 25, 25,109, 85, 26, 3, 27, 12, 13,"REAR VIEW", BT_MOUSE_BUTTON, 255 },
757 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_MOUSE_BUTTON, 255 },
758 { 27, 25,117, 85, 26, 25, 13, 25, 13,"Afterburner", BT_MOUSE_BUTTON, 255 },
762 //added on 2/4/99 by Victor Rachels to add d1x new keys
763 kc_item kc_d2x[NUM_D2X_CONTROLS] = {
764 // id,x,y,w1,w2,u,d,l,r,text_num1,type,value
765 { 0, 15, 49, 71, 26, 27, 2, 27, 1, "WEAPON 1", BT_KEY, 255},
766 { 1, 15, 49,100, 26, 26, 3, 0, 2, "WEAPON 1", BT_JOY_BUTTON, 255},
767 { 2, 15, 57, 71, 26, 0, 4, 1, 3, "WEAPON 2", BT_KEY, 255},
768 { 3, 15, 57,100, 26, 1, 5, 2, 4, "WEAPON 2", BT_JOY_BUTTON, 255},
769 { 4, 15, 65, 71, 26, 2, 6, 3, 5, "WEAPON 3", BT_KEY, 255},
770 { 5, 15, 65,100, 26, 3, 7, 4, 6, "WEAPON 3", BT_JOY_BUTTON, 255},
771 { 6, 15, 73, 71, 26, 4, 8, 5, 7, "WEAPON 4", BT_KEY, 255},
772 { 7, 15, 73,100, 26, 5, 9, 6, 8, "WEAPON 4", BT_JOY_BUTTON, 255},
773 { 8, 15, 81, 71, 26, 6, 10, 7, 9, "WEAPON 5", BT_KEY, 255},
774 { 9, 15, 81,100, 26, 7, 11, 8, 10, "WEAPON 5", BT_JOY_BUTTON, 255},
776 { 10, 15, 89, 71, 26, 8, 12, 9, 11, "WEAPON 6", BT_KEY, 255},
777 { 11, 15, 89,100, 26, 9, 13, 10, 12, "WEAPON 6", BT_JOY_BUTTON, 255},
778 { 12, 15, 97, 71, 26, 10, 14, 11, 13, "WEAPON 7", BT_KEY, 255},
779 { 13, 15, 97,100, 26, 11, 15, 12, 14, "WEAPON 7", BT_JOY_BUTTON, 255},
780 { 14, 15,105, 71, 26, 12, 16, 13, 15, "WEAPON 8", BT_KEY, 255},
781 { 15, 15,105,100, 26, 13, 17, 14, 16, "WEAPON 8", BT_JOY_BUTTON, 255},
782 { 16, 15,113, 71, 26, 14, 18, 15, 17, "WEAPON 9", BT_KEY, 255},
783 { 17, 15,113,100, 26, 15, 19, 16, 18, "WEAPON 9", BT_JOY_BUTTON, 255},
784 { 18, 15,121, 71, 26, 16, 20, 17, 19, "WEAPON 0", BT_KEY, 255},
785 { 19, 15,121,100, 26, 17, 21, 18, 20, "WEAPON 0", BT_JOY_BUTTON, 255},
787 //{ 20, 15,131, 71, 26, 18, 22, 19, 21, "CYC PRIMARY", BT_KEY, 255},
788 //{ 21, 15,131,100, 26, 19, 23, 20, 22, "CYC PRIMARY", BT_JOY_BUTTON, 255},
789 //{ 22, 15,139, 71, 26, 20, 24, 21, 23, "CYC SECONDARY", BT_KEY, 255},
790 //{ 23, 15,139,100, 26, 21, 25, 22, 24, "CYC SECONDARY", BT_JOY_BUTTON, 255},
791 //{ 24, 8,147, 78, 26, 22, 26, 23, 25, "TOGGLE_PRIM AUTO", BT_KEY, 255},
792 //{ 25, 8,147,107, 26, 23, 27, 24, 26, "TOGGLE_PRIM_AUTO", BT_JOY_BUTTON, 255},
793 //{ 26, 8,155, 78, 26, 24, 1, 25, 27, "TOGGLE SEC AUTO", BT_KEY, 255},
794 //{ 27, 8,155,107, 26, 25, 0, 26, 0, "TOGGLE SEC AUTO", BT_JOY_BUTTON, 255},
796 //end this section addition - VR
799 #else // ifndef MACINTOSH (following are macintosh controls)
801 ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
802 {0x5b,0x7e,0x54,0x7d,0x56,0x7b,0x58,0x7c,0x3a,0xff,0xff,0x53,0xff,0x55,0xff,0x4e,0xff,0x45,0xff,0xff,0xc,0x59,0xe,0x5c,0x3b,0x24,0x31,0xff,0x3,0xff,0x3f,0xff,0x6,0xff,0xb,0xff,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x30,0xff,0x1,0xff,0x2b,0xff,0x2f,0xff,0x4,0xff,0x11,0xff,0xff,0xff,0x0,0x0},
803 {0x0,0x1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0},
804 {0x0,0x3,0xff,0xff,0xff,0xff,0xb,0xc,0x9,0xa,0xff,0x1,0x2,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0},
805 {0x5,0x4,0xff,0xff,0x6,0xff,0x3,0x2,0x0,0x1,0xff,0x8,0xa,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x3,0x1,0xb,0x7,0xd,0xe,0xf,0xc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0},
806 {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0},
807 {0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0},
808 {0x0,0x1,0xff,0xff,0x2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0},
811 ubyte default_firebird_settings[MAX_CONTROLS] =
812 {0x0,0x1,0xff,0xff,0x2,0xff,0x4,0x6,0x5,0x7,0xff,0xb,0xc,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x03,0x0,0xff,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0};
814 ubyte default_mousestick_settings[MAX_CONTROLS] =
815 {0x2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3,0x4,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0};
817 kc_item kc_keyboard[NUM_KEY_CONTROLS] = {
818 { 0, 15, 49, 71, 26, 55, 2, 55, 1,"Pitch forward", BT_KEY, 255 },
819 { 1, 15, 49,100, 26, 50, 3, 0, 24,"Pitch forward", BT_KEY, 255 },
820 { 2, 15, 57, 71, 26, 0, 4, 25, 3,"Pitch backward", BT_KEY, 255 },
821 { 3, 15, 57,100, 26, 1, 5, 2, 26,"Pitch backward", BT_KEY, 255 },
822 { 4, 15, 65, 71, 26, 2, 6, 27, 5,"Turn left", BT_KEY, 255 },
823 { 5, 15, 65,100, 26, 3, 7, 4, 28,"Turn left", BT_KEY, 255 },
824 { 6, 15, 73, 71, 26, 4, 8, 29, 7,"Turn right", BT_KEY, 255 },
825 { 7, 15, 73,100, 26, 5, 9, 6, 34,"Turn right", BT_KEY, 255 },
826 { 8, 15, 85, 71, 26, 6, 10, 35, 9,"Slide on", BT_KEY, 255 },
827 { 9, 15, 85,100, 26, 7, 11, 8, 36,"Slide on", BT_KEY, 255 },
828 { 10, 15, 93, 71, 26, 8, 12, 37, 11,"Slide left", BT_KEY, 255 },
829 { 11, 15, 93,100, 26, 9, 13, 10, 44,"Slide left", BT_KEY, 255 },
830 { 12, 15,101, 71, 26, 10, 14, 45, 13,"Slide right", BT_KEY, 255 },
831 { 13, 15,101,100, 26, 11, 15, 12, 30,"Slide right", BT_KEY, 255 },
832 { 14, 15,109, 71, 26, 12, 16, 31, 15,"Slide up", BT_KEY, 255 },
833 { 15, 15,109,100, 26, 13, 17, 14, 32,"Slide up", BT_KEY, 255 },
834 { 16, 15,117, 71, 26, 14, 18, 33, 17,"Slide down", BT_KEY, 255 },
835 { 17, 15,117,100, 26, 15, 19, 16, 46,"Slide down", BT_KEY, 255 },
836 { 18, 15,129, 71, 26, 16, 20, 47, 19,"Bank on", BT_KEY, 255 },
837 { 19, 15,129,100, 26, 17, 21, 18, 38,"Bank on", BT_KEY, 255 },
838 { 20, 15,137, 71, 26, 18, 22, 39, 21,"Bank left", BT_KEY, 255 },
839 { 21, 15,137,100, 26, 19, 23, 20, 40,"Bank left", BT_KEY, 255 },
840 { 22, 15,145, 71, 26, 20, 48, 41, 23,"Bank right", BT_KEY, 255 },
841 { 23, 15,145,100, 26, 21, 49, 22, 42,"Bank right", BT_KEY, 255 },
842 { 24,158, 49, 83, 26, 51, 26, 1, 25,"Fire primary", BT_KEY, 255 },
843 { 25,158, 49,112, 26, 54, 27, 24, 2,"Fire primary", BT_KEY, 255 },
844 { 26,158, 57, 83, 26, 24, 28, 3, 27,"Fire secondary", BT_KEY, 255 },
845 { 27,158, 57,112, 26, 25, 29, 26, 4,"Fire secondary", BT_KEY, 255 },
846 { 28,158, 65, 83, 26, 26, 34, 5, 29,"Fire flare", BT_KEY, 255 },
847 { 29,158, 65,112, 26, 27, 35, 28, 6,"Fire flare", BT_KEY, 255 },
848 { 30,158,105, 83, 26, 44, 32, 13, 31,"Accelerate", BT_KEY, 255 },
849 { 31,158,105,112, 26, 45, 33, 30, 14,"Accelerate", BT_KEY, 255 },
850 { 32,158,113, 83, 26, 30, 46, 15, 33,"reverse", BT_KEY, 255 },
851 { 33,158,113,112, 26, 31, 47, 32, 16,"reverse", BT_KEY, 255 },
852 { 34,158, 73, 83, 26, 28, 36, 7, 35,"Drop Bomb", BT_KEY, 255 },
853 { 35,158, 73,112, 26, 29, 37, 34, 8,"Drop Bomb", BT_KEY, 255 },
854 { 36,158, 85, 83, 26, 34, 44, 9, 37,"REAR VIEW", BT_KEY, 255 },
855 { 37,158, 85,112, 26, 35, 45, 36, 10,"REAR VIEW", BT_KEY, 255 },
856 { 38,158,133, 83, 26, 46, 40, 19, 39,"Cruise Faster", BT_KEY, 255 },
857 { 39,158,133,112, 26, 47, 41, 38, 20,"Cruise Faster", BT_KEY, 255 },
858 { 40,158,141, 83, 26, 38, 42, 21, 41,"Cruise Slower", BT_KEY, 255 },
859 { 41,158,141,112, 26, 39, 43, 40, 22,"Cruise Slower", BT_KEY, 255 },
860 { 42,158,149, 83, 26, 40, 52, 23, 43,"Cruise Off", BT_KEY, 255 },
861 { 43,158,149,112, 26, 41, 53, 42, 48,"Cruise Off", BT_KEY, 255 },
862 { 44,158, 93, 83, 26, 36, 30, 11, 45,"Automap", BT_KEY, 255 },
863 { 45,158, 93,112, 26, 37, 31, 44, 12,"Automap", BT_KEY, 255 },
864 { 46,158,121, 83, 26, 32, 38, 17, 47,"Afterburner", BT_KEY, 255 },
865 { 47,158,121,112, 26, 33, 39, 46, 18,"Afterburner", BT_KEY, 255 },
866 { 48, 15,161, 71, 26, 22, 50, 43, 49,"Cycle Primary", BT_KEY, 255 },
867 { 49, 15,161,100, 26, 23, 51, 48, 52,"Cycle Primary", BT_KEY, 255 },
868 { 50, 15,169, 71, 26, 48, 1, 53, 51,"Cycle Second", BT_KEY, 255 },
869 { 51, 15,169,100, 26, 49, 24, 50, 54,"Cycle Second", BT_KEY, 255 },
870 { 52,158,163, 83, 26, 42, 54, 49, 53,"Headlight", BT_KEY, 255 },
871 { 53,158,163,112, 26, 43, 55, 52, 50,"Headlight", BT_KEY, 255 },
872 { 54,158,171, 83, 26, 52, 25, 51, 55,"Energy->Shield", BT_KEY, 255 },
873 { 55,158,171,112, 26, 53, 0, 54, 0,"Energy->Shield", BT_KEY, 255 },
875 kc_item kc_joystick[NUM_OTHER_CONTROLS] = {
876 { 0, 25, 46, 85, 28, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
877 { 1, 25, 54, 85, 28, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
878 { 2, 25, 85, 85, 28, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
879 { 3, 25, 93, 85, 28, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
880 { 4, 25, 62, 85, 28, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
881 { 5,180, 46, 79, 28, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
882 { 6,180, 54, 79, 28, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
883 { 7,180, 62, 79, 28, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
884 { 8,180, 70, 79, 28, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
885 { 9,180, 78, 79, 28, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
886 { 10,180, 90, 79, 28, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
887 { 11,180, 98, 79, 28, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
888 { 12,180,106, 79, 28, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
889 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
890 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
891 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
892 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
893 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
894 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
895 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
896 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
897 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
898 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
899 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
900 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
901 { 25, 25,109, 85, 28, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
902 { 26, 25, 70, 85, 28, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
903 { 27, 25,117, 85, 28, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
904 { 28,180,114, 79, 28, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
905 { 29,180,122, 79, 28, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
906 { 30, 25,125, 85, 28, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
908 kc_item kc_superjoy[NUM_OTHER_CONTROLS] = {
909 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
910 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
911 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
912 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
913 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
914 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
915 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
916 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
917 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
918 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
919 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
920 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
921 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
922 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
923 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
924 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
925 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
926 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
927 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
928 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
929 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
930 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
931 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
932 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
933 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
934 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
935 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
936 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
937 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
938 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
939 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
942 kc_item kc_mouse[NUM_OTHER_CONTROLS] = {
943 { 0, 25, 46, 85, 26, 28, 1, 28, 5,"Fire primary", BT_MOUSE_BUTTON, 255 },
944 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_MOUSE_BUTTON, 255 },
945 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_MOUSE_BUTTON, 255 },
946 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_MOUSE_BUTTON, 255 },
947 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_MOUSE_BUTTON, 255 },
948 { 5,180, 46, 59, 26, 24, 6, 0, 1,"Slide on", BT_MOUSE_BUTTON, 255 },
949 { 6,180, 54, 59, 26, 5, 7, 1, 4,"Slide left", BT_MOUSE_BUTTON, 255 },
950 { 7,180, 62, 59, 26, 6, 8, 4, 26,"Slide right", BT_MOUSE_BUTTON, 255 },
951 { 8,180, 70, 59, 26, 7, 9, 26, 9,"Slide up", BT_MOUSE_BUTTON, 255 },
952 { 9,180, 78, 59, 26, 8, 10, 8, 2,"Slide down", BT_MOUSE_BUTTON, 255 },
953 { 10,180, 90, 59, 26, 9, 11, 2, 3,"Bank on", BT_MOUSE_BUTTON, 255 },
954 { 11,180, 98, 59, 26, 10, 12, 3, 12,"Bank left", BT_MOUSE_BUTTON, 255 },
955 { 12,180,106, 59, 26, 11, 28, 11, 25,"Bank right", BT_MOUSE_BUTTON, 255 },
956 { 13,103,138, 58, 26, 27, 15, 27, 14,"Pitch U/D", BT_MOUSE_AXIS, 255 },
957 { 14,103,138,106, 8, 23, 16, 13, 15,"Pitch U/D", BT_INVERT, 255 },
958 { 15,103,146, 58, 26, 13, 17, 14, 16,"Turn L/R", BT_MOUSE_AXIS, 255 },
959 { 16,103,146,106, 8, 14, 18, 15, 17,"Turn L/R", BT_INVERT, 255 },
960 { 17,103,154, 58, 26, 15, 19, 16, 18,"Slide L/R", BT_MOUSE_AXIS, 255 },
961 { 18,103,154,106, 8, 16, 20, 17, 19,"Slide L/R", BT_INVERT, 255 },
962 { 19,103,162, 58, 26, 17, 21, 18, 20,"Slide U/D", BT_MOUSE_AXIS, 255 },
963 { 20,103,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
964 { 21,103,170, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_MOUSE_AXIS, 255 },
965 { 22,103,170,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
966 { 23,103,182, 58, 26, 21, 14, 22, 24,"throttle", BT_MOUSE_AXIS, 255 },
967 { 24,103,182,106, 8, 22, 5, 23, 28,"throttle", BT_INVERT, 255 },
968 { 25, 25,109, 85, 26, 3, 27, 12, 27,"REAR VIEW", BT_MOUSE_BUTTON, 255 },
969 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_MOUSE_BUTTON, 255 },
970 { 27, 25,117, 85, 26, 25, 13, 25, 13,"Afterburner", BT_MOUSE_BUTTON, 255 },
975 //added on 2/4/99 by Victor Rachels to add new keys system
976 ubyte default_kconfig_d2x_settings[MAX_D2X_CONTROLS] = {
977 0x2 ,0xff,0x3 ,0xff,0x4 ,0xff,0x5 ,0xff,0x6 ,0xff,0x7 ,0xff,0x8 ,0xff,0x9 ,
978 0xff,0xa ,0xff,0xb ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
979 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff };
980 //end this section addition - VR
982 void kc_drawitem( kc_item *item, int is_current );
983 void kc_change_key( kc_item * item );
984 void kc_change_joybutton( kc_item * item );
985 void kc_change_mousebutton( kc_item * item );
986 void kc_next_joyaxis(kc_item *item); //added by WraithX on 11/22/00
987 void kc_change_joyaxis( kc_item * item );
988 void kc_change_mouseaxis( kc_item * item );
989 void kc_change_invert( kc_item * item );
990 void kconfig_read_fcs( int raw_axis );
991 void kconfig_set_fcs_button( int btn, int button );
992 void kconfig_read_external_controls( void );
994 // the following methods added by WraithX, 4/17/00
995 int isJoyRotationKey(int test_key)
997 if (test_key == kc_joystick[11].value ||
998 test_key == kc_joystick[12].value)
1005 }// method isJoyRotationKey
1007 int isMouseRotationKey(int test_key)
1009 if (test_key == kc_mouse[11].value ||
1010 test_key == kc_mouse[12].value)
1017 }// method isMouseRotationKey
1019 int isKeyboardRotationKey(int test_key)
1021 if (test_key == kc_keyboard[0].value ||
1022 test_key == kc_keyboard[1].value ||
1023 test_key == kc_keyboard[2].value ||
1024 test_key == kc_keyboard[3].value ||
1025 test_key == kc_keyboard[4].value ||
1026 test_key == kc_keyboard[5].value ||
1027 test_key == kc_keyboard[6].value ||
1028 test_key == kc_keyboard[7].value ||
1029 test_key == kc_keyboard[20].value ||
1030 test_key == kc_keyboard[21].value ||
1031 test_key == kc_keyboard[22].value ||
1032 test_key == kc_keyboard[23].value)
1039 }// method isKeyboardRotationKey
1040 // end addition - WraithX
1042 int kconfig_is_axes_used(int axis)
1045 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1046 if (( kc_joystick[i].type == BT_JOY_AXIS ) && (kc_joystick[i].value == axis ))
1052 #ifdef TABLE_CREATION
1053 int find_item_at( kc_item * items, int nitems, int x, int y )
1057 for (i=0; i<nitems; i++ ) {
1058 if ( ((items[i].x+items[i].w1)==x) && (items[i].y==y))
1064 int find_next_item_up( kc_item * items, int nitems, int citem )
1069 x = items[citem].x+items[citem].w1;
1074 y = grd_curcanv->cv_bitmap.bm_h-1;
1077 x = grd_curcanv->cv_bitmap.bm_w-1;
1080 i = find_item_at( items, nitems, x, y );
1086 int find_next_item_down( kc_item * items, int nitems, int citem )
1091 x = items[citem].x+items[citem].w1;
1095 if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) {
1098 if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) {
1102 i = find_item_at( items, nitems, x, y );
1108 int find_next_item_right( kc_item * items, int nitems, int citem )
1113 x = items[citem].x+items[citem].w1;
1117 if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) {
1120 if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) {
1124 i = find_item_at( items, nitems, x, y );
1130 int find_next_item_left( kc_item * items, int nitems, int citem )
1135 x = items[citem].x+items[citem].w1;
1140 x = grd_curcanv->cv_bitmap.bm_w-1;
1143 y = grd_curcanv->cv_bitmap.bm_h-1;
1146 i = find_item_at( items, nitems, x, y );
1153 #ifdef NEWMENU_MOUSE
1154 int get_item_height(kc_item *item)
1159 if (item->value==255) {
1162 switch( item->type ) {
1164 strncpy( btext, key_text[item->value], 10 ); break;
1165 case BT_MOUSE_BUTTON:
1167 strncpy( btext, Text_string[mousebutton_text[item->value]], 10); break;
1169 strncpy( btext, mousebutton_text[item->value], 10 ); break;
1172 strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break;
1174 #ifdef USE_LINUX_JOY
1175 sprintf(btext, "J%d B%d", j_button[item->value].joydev, j_Get_joydev_button_number(item->value));
1177 if ( joybutton_text[item->value] !=-1 )
1178 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1180 sprintf( btext, "BTN%d", item->value );
1184 #ifdef USE_LINUX_JOY
1185 sprintf( btext, "J%d A%d", j_axis[item->value].joydev, j_Get_joydev_axis_number (item->value) );
1187 strncpy(btext, Text_string[joyaxis_text[item->value]], 10);
1191 strncpy( btext, Text_string[invert_text[item->value]], 10 ); break;
1194 gr_get_string_size(btext, &w, &h, &aw );
1200 void kconfig_sub(kc_item * items,int nitems, char * title)
1203 dd_grs_canvas * save_canvas,
1204 grs_canvas * save_canvas
1206 grs_font * save_font;
1207 int old_keyd_repeat;
1208 #ifdef NEWMENU_MOUSE
1209 int mouse_state, omouse_state, mx, my, x1, x2, y1, y2;
1210 int close_x, close_y, close_size;
1213 int i,k,ocitem,citem;
1214 int time_stopped = 0;
1215 WIN(char *old_bg_pcx);
1217 WIN(old_bg_pcx = _SCRContext.bkg_filename);
1218 WIN(DEFINE_SCREEN(NULL));
1223 if (!((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence)) )
1229 // if (Config_control_type == CONTROL_WINJOYSTICK) {
1231 // joydefsw_win_joyselect(title2); title = title2,
1233 // ); // Get Samir...
1237 save_canvas = dd_grd_curcanv,
1238 save_canvas = grd_curcanv
1243 dd_gr_set_current_canvas(NULL),
1244 gr_set_current_canvas(NULL)
1246 save_font = grd_curcanv->cv_font;
1251 game_flush_inputs();
1252 old_keyd_repeat = keyd_repeat;
1255 //gr_clear_canvas( BM_XRGB(0,0,0) );
1257 nm_draw_background(0, 0, grd_curcanv->cv_bitmap.bm_w - 1, grd_curcanv->cv_bitmap.bm_h - 1);
1258 gr_palette_load (gr_palette);
1260 grd_curcanv->cv_font = MEDIUM3_FONT;
1262 WIN(DDGRLOCK(dd_grd_curcanv));
1265 p = strchr( title, '\n' );
1267 gr_string( 0x8000, LHY(8), title );
1272 // if ( items == kc_keyboard ) {
1273 // gr_string( 0x8000, 8, "Keyboard" );
1274 // } else if ( items == kc_joystick ) {
1275 // gr_string( 0x8000, 8, "Joysticks" );
1276 // } else if ( items == kc_mouse ) {
1277 // gr_string( 0x8000, 8, "Mouse" );
1280 #ifdef NEWMENU_MOUSE
1281 close_x = close_y = MenuHires?15:7;
1282 close_size = MenuHires?10:5;
1283 gr_setcolor( BM_XRGB(0, 0, 0) );
1284 gr_rect(close_x, close_y, close_x + close_size, close_y + close_size);
1285 gr_setcolor( BM_XRGB(21, 21, 21) );
1286 gr_rect(close_x + LHX(1), close_y + LHX(1), close_x + close_size - LHX(1), close_y + close_size - LHX(1));
1289 grd_curcanv->cv_font = GAME_FONT;
1290 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1293 gr_string( 0x8000, LHY(20), TXT_KCONFIG_STRING_1 );
1295 gr_string( 0x8000, LHY(20), "Enter changes, ctrl-d deletes, ctrl-r resets defaults, ESC exits");
1297 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1298 if ( items == kc_keyboard ) {
1299 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1300 gr_setcolor( BM_XRGB(31,27,6) );
1302 gr_scanline( LHX(98), LHX(106), LHY(42) );
1303 gr_scanline( LHX(120), LHX(128), LHY(42) );
1304 gr_pixel( LHX(98), LHY(43) );
1305 gr_pixel( LHX(98), LHY(44) );
1306 gr_pixel( LHX(128), LHY(43) );
1307 gr_pixel( LHX(128), LHY(44) );
1309 gr_string( LHX(109), LHY(40), "OR" );
1311 gr_scanline( LHX(253), LHX(261), LHY(42) );
1312 gr_scanline( LHX(274), LHX(283), LHY(42) );
1313 gr_pixel( LHX(253), LHY(43) );
1314 gr_pixel( LHX(253), LHY(44) );
1315 gr_pixel( LHX(283), LHY(43) );
1316 gr_pixel( LHX(283), LHY(44) );
1318 gr_string( LHX(264), LHY(40), "OR" );
1320 } if ( items == kc_joystick ) {
1321 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1322 gr_setcolor( BM_XRGB(31,27,6) );
1323 gr_scanline( LHX(18), LHX(135), LHY(37) );
1324 gr_scanline( LHX(181), LHX(294), LHY(37) );
1325 gr_scanline( LHX(18), LHX(144), LHY(119+18) );
1326 gr_scanline( LHX(174), LHX(294), LHY(119+18) );
1327 gr_string( 0x8000, LHY(35), TXT_BUTTONS );
1328 gr_string( 0x8000,LHY(117+18), TXT_AXES );
1329 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1330 gr_string( LHX(81), LHY(137+8), TXT_AXIS );
1331 gr_string( LHX(111), LHY(137+8), TXT_INVERT );
1332 gr_string( LHX(222), LHY(137+8), TXT_AXIS );
1333 gr_string( LHX(252), LHY(137+8), TXT_INVERT );
1334 } else if ( items == kc_mouse ) {
1335 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1336 gr_setcolor( BM_XRGB(31,27,6) );
1337 gr_scanline( LHX(18), LHX(135), LHY(37) );
1338 gr_scanline( LHX(181), LHX(294), LHY(37) );
1339 gr_scanline( LHX(18), LHX(144), LHY(119+5) );
1340 gr_scanline( LHX(174), LHX(294), LHY(119+5) );
1341 gr_string( 0x8000, LHY(35), TXT_BUTTONS );
1342 gr_string( 0x8000,LHY(117+5), TXT_AXES );
1343 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1344 gr_string( LHX(169), LHY(129), TXT_AXIS );
1345 gr_string( LHX(199), LHY(129), TXT_INVERT );
1348 else if ( items == kc_d2x )
1350 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1351 gr_setcolor( BM_XRGB(31,27,6) );
1353 gr_string(LHX( 94), LHY(40), "KB");
1354 gr_string(LHX(121), LHY(40), "JOY");
1358 WIN(DDGRUNLOCK(dd_grd_curcanv));
1360 for (i=0; i<nitems; i++ ) {
1361 kc_drawitem( &items[i], 0 );
1365 kc_drawitem( &items[citem], 1 );
1367 newmenu_show_cursor();
1369 #ifdef NEWMENU_MOUSE
1370 mouse_state = omouse_state = 0;
1374 // Windows addendum to allow for kconfig input.
1379 DoMessageStuff(&msg);
1381 if (_RedrawScreen) {
1382 _RedrawScreen = FALSE;
1384 dd_gr_set_current_canvas(NULL);
1394 //see if redbook song needs to be restarted
1395 songs_check_redbook_repeat();
1399 #ifdef NEWMENU_MOUSE
1400 omouse_state = mouse_state;
1401 mouse_state = mouse_button_state(0);
1404 if ( !time_stopped ) {
1406 if (multi_menu_poll() == -1)
1415 MAC(case KEY_COMMAND+KEY_SHIFTED+KEY_3:)
1416 case KEY_PRINT_SCREEN:
1417 save_screen_shot(0);
1419 case KEY_CTRLED+KEY_D:
1420 items[citem].value = 255;
1421 kc_drawitem( &items[citem], 1 );
1423 case KEY_CTRLED+KEY_R:
1424 if ( items==kc_keyboard ) {
1425 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1426 items[i].value=default_kconfig_settings[0][i];
1427 kc_drawitem( &items[i], 0 );
1430 } else if ( items==kc_d2x ) {
1431 for(i=0;i<NUM_D2X_CONTROLS;i++)
1433 items[i].value=default_kconfig_d2x_settings[i];
1434 kc_drawitem( &items[i], 0 );
1439 // hack for firebire and mousestick default controls since I made
1440 // them the same control type -- dumb dumb dumb
1441 if (joy_have_firebird())
1442 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1443 items[i].value = default_firebird_settings[i];
1444 kc_drawitem( &items[i], 0 );
1446 else if (joy_have_mousestick())
1447 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1448 items[i].value = default_mousestick_settings[i];
1449 kc_drawitem( &items[i], 0 );
1452 #endif // note link to above else
1453 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1454 items[i].value = default_kconfig_settings[Config_control_type][i];
1455 kc_drawitem( &items[i], 0 );
1458 kc_drawitem( &items[citem], 1 );
1461 items[citem].value=255;
1462 kc_drawitem( &items[citem], 1 );
1466 #ifdef TABLE_CREATION
1467 if (items[citem].u==-1) items[citem].u=find_next_item_up( items,nitems, citem);
1469 citem = items[citem].u;
1474 #ifdef TABLE_CREATION
1475 if (items[citem].d==-1) items[citem].d=find_next_item_down( items,nitems, citem);
1477 citem = items[citem].d;
1481 #ifdef TABLE_CREATION
1482 if (items[citem].l==-1) items[citem].l=find_next_item_left( items,nitems, citem);
1484 citem = items[citem].l;
1488 #ifdef TABLE_CREATION
1489 if (items[citem].r==-1) items[citem].r=find_next_item_right( items,nitems, citem);
1491 citem = items[citem].r;
1495 switch( items[citem].type ) {
1496 case BT_KEY: kc_change_key( &items[citem] ); break;
1497 case BT_MOUSE_BUTTON: kc_change_mousebutton( &items[citem] ); break;
1498 case BT_MOUSE_AXIS: kc_change_mouseaxis( &items[citem] ); break;
1499 case BT_JOY_BUTTON: kc_change_joybutton( &items[citem] ); break;
1500 case BT_JOY_AXIS: kc_change_joyaxis( &items[citem] ); break;
1501 case BT_INVERT: kc_change_invert( &items[citem] ); break;
1504 //the following case added by WraithX on 11/22/00 to work around the weird joystick bug...
1506 switch(items[citem].type)
1509 kc_next_joyaxis(&items[citem]);
1513 //end addition by WraithX
1516 grd_curcanv->cv_font = save_font;
1518 WIN(DEFINE_SCREEN(old_bg_pcx));
1521 dd_gr_set_current_canvas(save_canvas),
1522 gr_set_current_canvas( save_canvas )
1524 keyd_repeat = old_keyd_repeat;
1525 game_flush_inputs();
1526 newmenu_hide_cursor();
1530 #ifdef TABLE_CREATION
1531 case KEY_DEBUGGED+KEY_F12: {
1533 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1534 kc_keyboard[i].u = find_next_item_up( kc_keyboard,NUM_KEY_CONTROLS, i);
1535 kc_keyboard[i].d = find_next_item_down( kc_keyboard,NUM_KEY_CONTROLS, i);
1536 kc_keyboard[i].l = find_next_item_left( kc_keyboard,NUM_KEY_CONTROLS, i);
1537 kc_keyboard[i].r = find_next_item_right( kc_keyboard,NUM_KEY_CONTROLS, i);
1539 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1540 kc_joystick[i].u = find_next_item_up( kc_joystick,NUM_OTHER_CONTROLS, i);
1541 kc_joystick[i].d = find_next_item_down( kc_joystick,NUM_OTHER_CONTROLS, i);
1542 kc_joystick[i].l = find_next_item_left( kc_joystick,NUM_OTHER_CONTROLS, i);
1543 kc_joystick[i].r = find_next_item_right( kc_joystick,NUM_OTHER_CONTROLS, i);
1545 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1546 kc_mouse[i].u = find_next_item_up( kc_mouse,NUM_OTHER_CONTROLS, i);
1547 kc_mouse[i].d = find_next_item_down( kc_mouse,NUM_OTHER_CONTROLS, i);
1548 kc_mouse[i].l = find_next_item_left( kc_mouse,NUM_OTHER_CONTROLS, i);
1549 kc_mouse[i].r = find_next_item_right( kc_mouse,NUM_OTHER_CONTROLS, i);
1551 fp = fopen( "kconfig.cod", "wt" );
1553 fprintf( fp, "ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {\n" );
1554 for (i=0; i<CONTROL_MAX_TYPES; i++ ) {
1556 fprintf( fp, "{0x%x", kconfig_settings[i][0] );
1557 for (j=1; j<MAX_CONTROLS; j++ )
1558 fprintf( fp, ",0x%x", kconfig_settings[i][j] );
1559 fprintf( fp, "},\n" );
1561 fprintf( fp, "};\n" );
1563 fprintf( fp, "\nkc_item kc_keyboard[NUM_KEY_CONTROLS] = {\n" );
1564 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1565 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1566 kc_keyboard[i].id, kc_keyboard[i].x, kc_keyboard[i].y, kc_keyboard[i].w1, kc_keyboard[i].w2,
1567 kc_keyboard[i].u, kc_keyboard[i].d, kc_keyboard[i].l, kc_keyboard[i].r,
1568 34, kc_keyboard[i].text, 34, btype_text[kc_keyboard[i].type] );
1570 fprintf( fp, "};" );
1572 fprintf( fp, "\nkc_item kc_joystick[NUM_OTHER_CONTROLS] = {\n" );
1573 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1574 if (kc_joystick[i].type == BT_JOY_BUTTON)
1575 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1576 kc_joystick[i].id, kc_joystick[i].x, kc_joystick[i].y, kc_joystick[i].w1, kc_joystick[i].w2,
1577 kc_joystick[i].u, kc_joystick[i].d, kc_joystick[i].l, kc_joystick[i].r,
1578 34, kc_joystick[i].text, 34, btype_text[kc_joystick[i].type] );
1580 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1581 kc_joystick[i].id, kc_joystick[i].x, kc_joystick[i].y, kc_joystick[i].w1, kc_joystick[i].w2,
1582 kc_joystick[i].u, kc_joystick[i].d, kc_joystick[i].l, kc_joystick[i].r,
1583 34, kc_joystick[i].text, 34, btype_text[kc_joystick[i].type] );
1585 fprintf( fp, "};" );
1587 fprintf( fp, "\nkc_item kc_mouse[NUM_OTHER_CONTROLS] = {\n" );
1588 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1589 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1590 kc_mouse[i].id, kc_mouse[i].x, kc_mouse[i].y, kc_mouse[i].w1, kc_mouse[i].w2,
1591 kc_mouse[i].u, kc_mouse[i].d, kc_mouse[i].l, kc_mouse[i].r,
1592 34, kc_mouse[i].text, 34, btype_text[kc_mouse[i].type] );
1594 fprintf( fp, "};" );
1603 #ifdef NEWMENU_MOUSE
1604 if ( (mouse_state && !omouse_state) || (mouse_state && omouse_state) ) {
1607 mouse_get_pos(&mx, &my);
1608 for (i=0; i<nitems; i++ ) {
1609 item_height = get_item_height( &items[i] );
1610 x1 = grd_curcanv->cv_bitmap.bm_x + LHX(items[i].x) + LHX(items[i].w1);
1611 x2 = x1 + LHX(items[i].w2);
1612 y1 = grd_curcanv->cv_bitmap.bm_y + LHY(items[i].y);
1613 y2 = y1 + LHX(item_height);
1614 if (((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2))) {
1620 else if ( !mouse_state && omouse_state ) {
1623 mouse_get_pos(&mx, &my);
1624 item_height = get_item_height( &items[citem] );
1625 x1 = grd_curcanv->cv_bitmap.bm_x + LHX(items[citem].x) + LHX(items[citem].w1);
1626 x2 = x1 + LHX(items[citem].w2);
1627 y1 = grd_curcanv->cv_bitmap.bm_y + LHY(items[citem].y);
1628 y2 = y1 + LHY(item_height);
1629 if (((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2))) {
1630 newmenu_hide_cursor();
1631 switch( items[citem].type ) {
1632 case BT_KEY: kc_change_key( &items[citem] ); break;
1633 case BT_MOUSE_BUTTON: kc_change_mousebutton( &items[citem] ); break;
1634 case BT_MOUSE_AXIS: kc_change_mouseaxis( &items[citem] ); break;
1635 case BT_JOY_BUTTON: kc_change_joybutton( &items[citem] ); break;
1636 case BT_JOY_AXIS: kc_change_joyaxis( &items[citem] ); break;
1637 case BT_INVERT: kc_change_invert( &items[citem] ); break;
1639 newmenu_show_cursor();
1641 x1 = grd_curcanv->cv_bitmap.bm_x + close_x + LHX(1);
1642 x2 = x1 + close_size - LHX(1);
1643 y1 = grd_curcanv->cv_bitmap.bm_y + close_y + LHX(1);
1644 y2 = y1 + close_size - LHX(1);
1645 if ( ((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2)) ) {
1646 grd_curcanv->cv_font = save_font;
1647 WINDOS(dd_gr_set_current_canvas( save_canvas ),
1648 gr_set_current_canvas( save_canvas ));
1649 keyd_repeat = old_keyd_repeat;
1650 game_flush_inputs();
1651 newmenu_hide_cursor();
1659 #endif // NEWMENU_MOUSE
1661 if (ocitem!=citem) {
1662 newmenu_hide_cursor();
1663 kc_drawitem( &items[ocitem], 0 );
1664 kc_drawitem( &items[citem], 1 );
1665 newmenu_show_cursor();
1671 void kc_drawitem( kc_item *item, int is_current )
1675 // PA_DFX (pa_set_frontbuffer_current());
1676 WIN(DDGRLOCK(dd_grd_curcanv));
1679 gr_set_fontcolor( BM_XRGB(20,20,29), -1 );
1681 gr_set_fontcolor( BM_XRGB(15,15,24), -1 );
1682 gr_string( LHX(item->x), LHY(item->y), item->text );
1683 WIN(DDGRUNLOCK(dd_grd_curcanv));
1685 if (item->value==255) {
1686 strcpy( btext, "" );
1688 switch( item->type ) {
1690 strncpy( btext, key_text[item->value], 10 ); break;
1691 case BT_MOUSE_BUTTON:
1693 //strncpy( btext, Text_string[mousebutton_text[item->value]], 10 ); break;
1694 strncpy( btext, (item->value <= 3)?Text_string[mousebutton_text[item->value]]:mousebutton_textra[item->value-3], 10 ); break;
1696 strncpy( btext, mousebutton_text[item->value], 10 ); break;
1699 strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break;
1701 #ifdef USE_LINUX_JOY
1702 sprintf(btext, "J%d B%d", j_button[item->value].joydev, j_Get_joydev_button_number(item->value));
1706 if (joybutton_text[item->value] != -1)
1707 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1709 sprintf( btext, "BTN%2d", item->value+1 );
1711 if ( joybutton_text[item->value] !=-1 )
1712 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1714 sprintf( btext, "BTN%d", item->value );
1717 strncpy( btext, joy_btn_name( item->value ), 10);
1719 sprintf( btext, "BTN%d", item->value );
1724 #ifdef USE_LINUX_JOY
1725 sprintf(btext, "J%d A%d", j_axis[item->value].joydev, j_Get_joydev_axis_number(item->value));
1727 strncpy(btext, Text_string[joyaxis_text[item->value]], 10);
1731 strncpy( btext, Text_string[invert_text[item->value]], 10 ); break;
1735 WIN(DDGRLOCK(dd_grd_curcanv));
1736 gr_get_string_size(btext, &w, &h, &aw );
1739 gr_setcolor( BM_XRGB(21,0,24) );
1741 gr_setcolor( BM_XRGB(16,0,19) );
1742 gr_urect( LHX(item->w1+item->x), LHY(item->y-1), LHX(item->w1+item->x+item->w2), LHY(item->y)+h );
1744 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1746 x = LHX(item->w1+item->x)+((LHX(item->w2)-w)/2);
1748 gr_string( x, LHY(item->y), btext );
1749 // PA_DFX (pa_set_backbuffer_current());
1751 WIN(DDGRUNLOCK(dd_grd_curcanv));
1756 static int looper=0;
1758 void kc_drawquestion( kc_item *item )
1762 WIN(DDGRLOCK(dd_grd_curcanv));
1763 // PA_DFX (pa_set_frontbuffer_current());
1765 gr_get_string_size("?", &w, &h, &aw );
1767 c = BM_XRGB(21,0,24);
1769 //@@gr_setcolor( gr_fade_table[fades[looper]*256+c] );
1770 gr_setcolor(BM_XRGB(21*fades[looper]/31,0,24*fades[looper]/31));
1772 if (looper>63) looper=0;
1774 gr_urect( LHX(item->w1+item->x), LHY(item->y-1), LHX(item->w1+item->x+item->w2), LHY(item->y)+h );
1776 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1778 x = LHX(item->w1+item->x)+((LHX(item->w2)-w)/2);
1780 gr_string( x, LHY(item->y), "?" );
1781 // PA_DFX (pa_set_backbuffer_current());
1782 WIN(DDGRUNLOCK(dd_grd_curcanv));
1786 void kc_change_key( kc_item * item )
1791 WIN(DDGRLOCK(dd_grd_curcanv));
1792 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1794 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_KEY );
1795 WIN(DDGRUNLOCK(dd_grd_curcanv));
1797 game_flush_inputs();
1801 while( (k!=KEY_ESC) && (keycode==255) )
1807 DoMessageStuff(&msg);
1814 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1817 // if ( Game_mode & GM_MULTI )
1818 // GameLoop( 0, 0 ); // Continue
1820 timer_delay(f0_1/10);
1821 kc_drawquestion( item );
1823 for (i=0; i<256; i++ ) {
1824 if (keyd_pressed[i] && (strlen(key_text[i])>0)) {
1826 for (n=0; n<sizeof(system_keys); n++ )
1827 if ( system_keys[n] == i )
1836 for (i=0; i<Num_items; i++ ) {
1837 n = item - All_items;
1838 if ( (i!=n) && (All_items[i].type==BT_KEY) && (All_items[i].value==keycode) ) {
1839 All_items[i].value = 255;
1840 kc_drawitem( &All_items[i], 0 );
1843 item->value = keycode;
1845 kc_drawitem( item, 1 );
1847 WIN(DDGRLOCK(dd_grd_curcanv));
1848 gr_set_fontcolor( BM_XRGB(28,28,28), BM_XRGB(0,0,0) );
1849 WIN(DDGRUNLOCK(dd_grd_curcanv));
1851 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1853 game_flush_inputs();
1857 void kc_change_joybutton( kc_item * item )
1862 WIN(DDGRLOCK(dd_grd_curcanv));
1863 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1865 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_JBUTTON );
1866 WIN(DDGRUNLOCK(dd_grd_curcanv));
1868 game_flush_inputs();
1872 while( (k!=KEY_ESC) && (code==255))
1877 DoMessageStuff(&msg);
1883 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1886 // if ( Game_mode & GM_MULTI )
1887 // GameLoop( 0, 0 ); // Continue
1889 timer_delay(f0_1/10);
1891 if (k == KEY_PRINT_SCREEN)
1892 save_screen_shot(0);
1894 kc_drawquestion( item );
1896 WIN(code = joydefsw_do_button());
1899 code = joy_do_buttons();
1902 #if !defined(WINDOWS) && !defined(MACINTOSH)
1903 if (Config_control_type==CONTROL_THRUSTMASTER_FCS) {
1905 joystick_read_raw_axis( JOY_ALL_AXIS, axis );
1906 kconfig_read_fcs( axis[3] );
1907 if ( joy_get_button_state(7) ) code = 7;
1908 if ( joy_get_button_state(11) ) code = 11;
1909 if ( joy_get_button_state(15) ) code = 15;
1910 if ( joy_get_button_state(19) ) code = 19;
1911 for (i=0; i<4; i++ ) {
1912 if ( joy_get_button_state(i) )
1915 } else if (Config_control_type==CONTROL_FLIGHTSTICK_PRO) {
1916 for (i=4; i<20; i++ ) {
1917 if ( joy_get_button_state(i) ) {
1919 mprintf(( 0, "JB: %d\n", code ));
1923 for (i=0; i<MAX_BUTTONS; i++ ) {
1924 if ( joy_get_button_state(i) )
1931 for (i=0; i<Num_items; i++ ) {
1932 n = item - All_items;
1933 if ( (i!=n) && (All_items[i].type==BT_JOY_BUTTON) && (All_items[i].value==code) ) {
1934 All_items[i].value = 255;
1935 kc_drawitem( &All_items[i], 0 );
1940 kc_drawitem( item, 1 );
1941 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1942 game_flush_inputs();
1945 void kc_change_mousebutton( kc_item * item )
1950 WIN(DDGRLOCK(dd_grd_curcanv));
1951 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1953 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_MBUTTON );
1954 WIN(DDGRUNLOCK(dd_grd_curcanv));
1957 game_flush_inputs();
1961 while( (k!=KEY_ESC) && (code==255))
1966 DoMessageStuff(&msg);
1972 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1975 // if ( Game_mode & GM_MULTI )
1976 // GameLoop( 0, 0 ); // Continue
1978 timer_delay(f0_1/10);
1980 if (k == KEY_PRINT_SCREEN)
1981 save_screen_shot(0);
1983 kc_drawquestion( item );
1985 b = mouse_get_btns();
1986 for (i = 0; i < 16; i++ ) {
1992 for (i=0; i<Num_items; i++ ) {
1993 n = item - All_items;
1994 if ( (i!=n) && (All_items[i].type==BT_MOUSE_BUTTON) && (All_items[i].value==code) ) {
1995 All_items[i].value = 255;
1996 kc_drawitem( &All_items[i], 0 );
2001 kc_drawitem( item, 1 );
2002 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
2003 game_flush_inputs();
2008 // the following function added by WraithX on 11/22/00 to work around the weird joystick bug... - modified my Matt Mueller to skip already allocated axes
2009 void kc_next_joyaxis(kc_item *item)
2011 int n, i, k, max, tries;
2018 // I modelled this ifdef after the code in the kc_change_joyaxis method.
2019 // So, if somethin's not workin here, it might not be workin there either.
2020 #ifdef USE_LINUX_JOY
2026 code = (item->value + 1) % max;
2030 for (i = 0; i < Num_items; i++)
2032 n = item - All_items;
2033 if ((i != n) && (All_items[i].type == BT_JOY_AXIS) && (All_items[i].value == code))
2036 return; // all axes allocated already
2037 i = -1; // -1 so the i++ will push back to 0
2038 code = (item->value + ++tries) % max; // try next axis
2045 kc_drawitem(item, 1);
2046 nm_restore_background(0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h);
2047 game_flush_inputs();
2049 }//method kc_next_joyaxis
2050 //end addition by WraithX
2053 void kc_change_joyaxis( kc_item * item )
2055 #ifdef USE_LINUX_JOY
2057 int old_axis[MAX_AXES];
2058 int numaxis = j_num_axes;
2060 int axis[JOY_NUM_AXES];
2061 int old_axis[JOY_NUM_AXES];
2062 int numaxis = JOY_NUM_AXES;
2067 WIN(DDGRLOCK(dd_grd_curcanv));
2068 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
2070 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_JOY_AXIS );
2071 WIN(DDGRUNLOCK(dd_grd_curcanv));
2073 game_flush_inputs();
2078 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, old_axis ),
2079 joystick_read_raw_axis( JOY_ALL_AXIS, old_axis )
2082 while( (k!=KEY_ESC) && (code==255))
2087 DoMessageStuff(&msg);
2093 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
2096 // if ( Game_mode & GM_MULTI )
2097 // GameLoop( 0, 0 ); // Continue
2099 timer_delay(f0_1/10);
2101 if (k == KEY_PRINT_SCREEN)
2102 save_screen_shot(0);
2104 kc_drawquestion( item );
2107 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, axis ),
2108 joystick_read_raw_axis( JOY_ALL_AXIS, axis )
2111 for (i=0; i<numaxis; i++ ) {
2112 #if defined (MACINTOSH)
2113 if ( abs(axis[i]-old_axis[i])>100 ) {
2114 #elif defined(WINDOWS)
2115 if ( abs(axis[i]-old_axis[i])>1024 ) {
2117 if ( abs(axis[i]-old_axis[i])>200 ) {
2120 con_printf(CON_DEBUG, "Axis Movement detected: Axis %i\n", i);
2122 //old_axis[i] = axis[i];
2124 for (i=0; i<Num_items; i++ )
2126 n = item - All_items;
2127 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) )
2133 for (i=0; i<Num_items; i++ ) {
2134 n = item - All_items;
2135 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) ) {
2136 All_items[i].value = 255;
2137 kc_drawitem( &All_items[i], 0 );
2143 kc_drawitem( item, 1 );
2144 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
2145 game_flush_inputs();
2149 void kc_change_mouseaxis( kc_item * item )
2158 WIN(DDGRLOCK(dd_grd_curcanv));
2159 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
2161 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_MSE_AXIS );
2162 WIN(DDGRUNLOCK(dd_grd_curcanv));
2164 game_flush_inputs();
2168 mouse_get_delta( &dx, &dy );
2170 while( (k!=KEY_ESC) && (code==255))
2175 DoMessageStuff(&msg);
2181 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
2184 // if ( Game_mode & GM_MULTI )
2185 // GameLoop( 0, 0 ); // Continue
2187 timer_delay(f0_1/10);
2189 if (k == KEY_PRINT_SCREEN)
2190 save_screen_shot(0);
2192 kc_drawquestion( item );
2195 mouse_get_delta_z( &dx, &dy, &dz );
2197 mouse_get_delta( &dx, &dy );
2199 if ( abs(dx)>20 ) code = 0;
2200 if ( abs(dy)>20 ) code = 1;
2202 if ( abs(dz)>20 ) code = 2;
2206 for (i=0; i<Num_items; i++ ) {
2207 n = item - All_items;
2208 if ( (i!=n) && (All_items[i].type==BT_MOUSE_AXIS) && (All_items[i].value==code) ) {
2209 All_items[i].value = 255;
2210 kc_drawitem( &All_items[i], 0 );
2215 kc_drawitem( item, 1 );
2216 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
2217 game_flush_inputs();
2222 void kc_change_invert( kc_item * item )
2224 game_flush_inputs();
2231 kc_drawitem( item, 1 );
2235 #include "screens.h"
2237 void kconfig(int n, char * title)
2240 grs_bitmap *save_bm;
2242 set_screen_mode( SCREEN_MENU );
2247 WIN(mouse_set_mode(0));
2248 WIN(dd_gr_set_current_canvas(NULL));
2250 #if defined(POLY_ACC)
2251 save_bm = gr_create_bitmap2( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h, grd_curcanv->cv_bitmap.bm_type, NULL );
2253 save_bm = gr_create_bitmap( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h );
2255 Assert( save_bm != NULL );
2257 WIN(DDGRLOCK(dd_grd_curcanv));
2258 gr_bm_bitblt(grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_w,
2259 0, 0, 0, 0, &grd_curcanv->cv_bitmap, save_bm );
2260 WIN(DDGRUNLOCK(dd_grd_curcanv));
2263 case 0:kconfig_sub( kc_keyboard, NUM_KEY_CONTROLS, title );break;
2264 case 1:kconfig_sub( kc_joystick, NUM_OTHER_CONTROLS, title );break;
2265 case 2:kconfig_sub( kc_mouse, NUM_OTHER_CONTROLS, title ); break;
2266 case 3:kconfig_sub( kc_superjoy, NUM_OTHER_CONTROLS, title); break;
2268 //added on 2/4/99 by Victor Rachels for new keys menu
2269 case 4:kconfig_sub( kc_d2x, NUM_D2X_CONTROLS, title ); break;
2270 //end this section addition - VR
2278 WIN(mouse_set_mode(1));
2279 WIN(dd_gr_set_current_canvas(NULL));
2280 WIN(DDGRLOCK(dd_grd_curcanv));
2281 gr_bitmap(0, 0, save_bm);
2282 WIN(DDGRUNLOCK(dd_grd_curcanv));
2283 gr_free_bitmap(save_bm);
2285 reset_cockpit(); //force cockpit redraw next time
2287 // Update save values...
2289 for (i=0; i<NUM_KEY_CONTROLS; i++ )
2290 kconfig_settings[0][i] = kc_keyboard[i].value;
2292 if ( (Config_control_type>0) && (Config_control_type<5)) {
2293 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
2294 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
2295 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
2296 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
2297 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
2299 else if (Config_control_type == CONTROL_WINJOYSTICK) {
2300 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
2301 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
2305 for (i=0; i<NUM_D2X_CONTROLS; i++)
2306 kconfig_d2x_settings[i] = kc_d2x[i].value;
2311 void kconfig_read_fcs( int raw_axis )
2313 int raw_button, button, axis_min[4], axis_center[4], axis_max[4];
2315 if (Config_control_type!=CONTROL_THRUSTMASTER_FCS) return;
2317 joy_get_cal_vals(axis_min, axis_center, axis_max);
2319 if ( axis_max[3] > 1 )
2320 raw_button = (raw_axis*100)/axis_max[3];
2324 if ( raw_button > 88 )
2326 else if ( raw_button > 63 )
2328 else if ( raw_button > 39 )
2330 else if ( raw_button > 15 )
2335 kconfig_set_fcs_button( 19, button );
2336 kconfig_set_fcs_button( 15, button );
2337 kconfig_set_fcs_button( 11, button );
2338 kconfig_set_fcs_button( 7, button );
2342 void kconfig_set_fcs_button( int btn, int button )
2344 int state,time_down,upcount,downcount;
2345 state = time_down = upcount = downcount = 0;
2347 if ( joy_get_button_state(btn) ) {
2348 if ( btn==button ) {
2350 time_down = FrameTime;
2355 if ( btn==button ) {
2357 time_down = FrameTime;
2364 joy_set_btn_values( btn, state, time_down, downcount, upcount );
2370 fix Last_angles_p = 0;
2371 fix Last_angles_b = 0;
2372 fix Last_angles_h = 0;
2373 ubyte Last_angles_read = 0;
2375 extern int VR_sensitivity;
2377 int VR_sense_range[3] = { 25, 50, 75 };
2379 #if 0 //ndef MACINTOSH
2384 fix yaw, pitch, roll;
2387 //------ read vfx1 helmet --------
2388 if (vfx1_installed) {
2389 vfx_get_data(&yaw,&pitch,&roll,&buttons);
2390 } else if (iglasses_headset_installed) {
2391 iglasses_read_headset( &yaw, &pitch, &roll );
2392 } else if (Victor_headset_installed) {
2393 victor_read_headset_filtered( &yaw, &pitch, &roll );
2398 Use_player_head_angles = 0;
2399 if ( Last_angles_read ) {
2403 if ( (Last_angles_h < (F1_0/4) ) && (yaw > ((F1_0*3)/4) ) )
2405 else if ( (yaw < (F1_0/4) ) && (Last_angles_h > ((F1_0*3)/4) ) )
2408 Controls.pitch_time += fixmul((pitch- Last_angles_p)*VR_sense_range[VR_sensitivity],FrameTime);
2409 Controls.heading_time+= fixmul((yaw1 - Last_angles_h)*VR_sense_range[VR_sensitivity],FrameTime);
2410 Controls.bank_time += fixmul((roll - Last_angles_b)*VR_sense_range[VR_sensitivity],FrameTime);
2412 Last_angles_read = 1;
2413 Last_angles_p = pitch;
2414 Last_angles_h = yaw;
2415 Last_angles_b = roll;
2422 #ifndef __MSDOS__ // WINDOWS
2423 #define JOYSTICK_READ_TIME (F1_0/40) // Read joystick at 40 Hz.
2425 #define JOYSTICK_READ_TIME (F1_0/10) // Read joystick at 10 Hz.
2428 fix LastReadTime = 0;
2430 #ifdef USE_LINUX_JOY
2431 fix joy_axis[MAX_AXES];
2433 fix joy_axis[JOY_NUM_AXES];
2436 ubyte kc_use_external_control = 0;
2437 ubyte kc_enable_external_control = 0;
2438 ubyte kc_external_intno = 0;
2439 ext_control_info *kc_external_control = NULL;
2440 ubyte *kc_external_name = NULL;
2441 ubyte kc_external_version = 0;
2442 extern int Automap_active;
2444 void kconfig_init_external_controls(int intno, int address)
2447 kc_external_intno = intno;
2448 kc_external_control = (ext_control_info *)address;
2449 kc_use_external_control = 1;
2450 kc_enable_external_control = 1;
2452 i = FindArg ( "-xname" );
2454 kc_external_name = Args[i+1];
2456 kc_external_name = "External Controller";
2458 for (i=0;i<strlen (kc_external_name);i++)
2459 if (kc_external_name[i]=='_')
2460 kc_external_name[i]=' ';
2462 i = FindArg ( "-xver" );
2464 kc_external_version = atoi(Args[i+1]);
2466 printf( "%s int: 0x%x, data: 0x%p, ver:%d\n", kc_external_name, kc_external_intno, kc_external_control, kc_external_version );
2470 #if !defined(MACINTOSH)
2471 /*void kconfig_read_external_controls()
2475 if ( !kc_enable_external_control && !CybermouseActive)
2478 if ( kc_external_version == 0 )
2479 memset( kc_external_control, 0, sizeof(control_info) );
2480 else if ( kc_external_version > 0 ) {
2481 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 );
2482 if ( kc_external_version > 1 ) {
2483 // Write ship pos and angles to external controls...
2484 ubyte *temp_ptr = (ubyte *)kc_external_control;
2485 vms_vector *ship_pos;
2486 vms_matrix *ship_orient;
2487 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
2488 temp_ptr += sizeof(control_info)+sizeof(vms_angvec) + 64;
2489 ship_pos = (vms_vector *)temp_ptr;
2490 temp_ptr += sizeof(vms_vector);
2491 ship_orient = (vms_matrix *)temp_ptr;
2492 // Fill in ship postion...
2493 *ship_pos = Objects[Players[Player_num].objnum].pos;
2494 // Fill in ship orientation...
2495 *ship_orient = Objects[Players[Player_num].objnum].orient;
2499 if ( Automap_active ) // (If in automap...)
2500 kc_external_control->automap_state = 1;
2501 memset(&r,0,sizeof(r));
2505 if (!CybermouseActive)
2506 int386 ( kc_external_intno, &r, &r); // Read external info...
2508 // ReadOWL (kc_external_control);
2512 if ( Player_num > -1 ) {
2513 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
2514 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
2515 Auto_leveling_on = 0;
2517 if ( kc_external_version > 0 ) {
2518 vms_matrix tempm, ViewMatrix;
2519 vms_angvec * Kconfig_abs_movement;
2522 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
2524 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
2525 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
2526 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
2527 Objects[Players[Player_num].objnum].orient = ViewMatrix;
2529 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
2530 if (oem_message[0] != '\0' )
2531 HUD_init_message( oem_message );
2535 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
2536 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
2537 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
2538 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
2539 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
2540 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
2541 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
2542 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
2543 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
2544 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
2545 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
2546 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
2547 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
2548 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
2549 Controls.automap_down_count += kc_external_control->automap_down_count;
2550 Controls.automap_state |= kc_external_control->automap_state;
2555 void controls_read_all_win()
2558 int slide_on, bank_on;
2562 int raw_joy_axis[7];
2564 fix k0, k1, k2, k3, kp;
2565 fix k4, k5, k6, k7, kh;
2566 ubyte channel_masks;
2567 int use_mouse, use_joystick;
2570 if (Game_turbo_mode)
2574 fix temp = Controls.heading_time;
2575 fix temp1 = Controls.pitch_time;
2576 memset( &Controls, 0, sizeof(control_info) );
2577 Controls.heading_time = temp;
2578 Controls.pitch_time = temp1;
2583 ctime = timer_get_fixed_seconds();
2585 // DO JOYSTICK (X,Y,Z R,U,V)
2586 // ----------------------------------------------------------------------------
2587 if ( (LastReadTime + JOYSTICK_READ_TIME) > ctime ) {
2588 if ((ctime < 0) && (LastReadTime > 0))
2589 LastReadTime = ctime;
2591 } else if ((Config_control_type==CONTROL_WINJOYSTICK)) {
2592 LastReadTime = ctime;
2593 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, raw_joy_axis );
2595 for (i=0; i<7; i++ ) {
2596 if (channel_masks&(1<<i)) {
2597 int joy_null_value = 28;
2599 // DO POV if joystick has a hat.
2600 // --------------------------------------------------------------------
2602 joydefsw_do_winjoybutton(raw_joy_axis);
2606 // --------------------------------------------------------------------
2607 // mprintf((0, "(%d)=%d,", i, raw_joy_axis[i]));
2608 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2609 // mprintf((0, "%d ",raw_joy_axis[i]));
2610 // if (i%2) mprintf((0,"\n"));
2613 if (kc_superjoy[23].value==i) // If this is the throttle
2614 joy_null_value = 32; // Then use a larger dead-zone
2616 if (raw_joy_axis[i] > (joy_null_value-2))
2617 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
2618 else if (raw_joy_axis[i] < -(joy_null_value+2))
2619 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
2621 raw_joy_axis[i] = 0;
2622 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
2631 for (i=0; i<6; i++ )
2637 // ----------------------------------------------------------------------------
2638 if (Config_control_type==5) {
2639 mouse_get_delta( &dx, &dy );
2640 mouse_axis[0] = (dx*FrameTime)/35;
2641 mouse_axis[1] = (dy*FrameTime)/25;
2642 mouse_buttons = mouse_get_btns();
2643 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
2652 //------------- Read slide_on -------------
2655 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
2656 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
2658 if ((use_joystick)&&(kc_superjoy[5].value<255)) slide_on |= joy_get_button_state( kc_superjoy[5].value );
2660 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
2662 //------------- Read bank_on ---------------
2665 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
2666 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
2668 if ( (use_joystick)&&(kc_superjoy[10].value < 255 )) bank_on |= joy_get_button_state( kc_superjoy[10].value );
2670 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
2672 //------------ Read pitch_time -----------
2674 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2676 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
2677 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
2678 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
2679 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
2682 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
2683 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
2684 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
2685 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
2688 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2689 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
2690 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
2694 Controls.pitch_time = 0;
2696 if (Controls.pitch_time < 0)
2697 Controls.pitch_time = 0;
2699 if (Controls.pitch_time > 0)
2700 Controls.pitch_time = 0;
2701 Controls.pitch_time += kp;
2704 if ( (use_joystick)&&(kc_superjoy[13].value < 255 )) {
2705 if ( !kc_superjoy[14].value ) // If not inverted...
2706 Controls.pitch_time -= (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2708 Controls.pitch_time += (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2712 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
2713 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
2714 if ( !kc_mouse[14].value ) // If not inverted...
2715 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2717 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2720 Controls.pitch_time = 0;
2724 //----------- Read vertical_thrust_time -----------------
2727 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
2728 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
2729 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
2730 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
2733 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
2734 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
2735 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
2736 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
2739 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2740 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
2741 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
2745 if ((use_joystick)&&( kc_superjoy[13].value < 255 )) {
2746 if ( !kc_superjoy[14].value ) // If not inverted...
2747 Controls.vertical_thrust_time += joy_axis[kc_superjoy[13].value];
2749 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[13].value];
2753 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
2754 if ( !kc_mouse[14].value ) // If not inverted...
2755 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
2757 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
2762 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
2763 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
2764 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
2765 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
2768 if ((use_joystick)&&( kc_superjoy[19].value < 255 )) {
2769 if ( !kc_superjoy[20].value ) // If not inverted...
2770 Controls.vertical_thrust_time += joy_axis[kc_superjoy[19].value];
2772 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[19].value];
2775 // From joystick buttons
2776 if ( (use_joystick)&&(kc_superjoy[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_superjoy[8].value );
2777 if ( (use_joystick)&&(kc_superjoy[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_superjoy[9].value );
2779 // From mouse buttons
2780 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
2781 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
2784 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
2785 if ( !kc_mouse[20].value ) // If not inverted...
2786 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
2788 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
2792 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2793 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
2794 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
2797 //---------- Read heading_time -----------
2799 if (!slide_on && !bank_on) {
2800 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2802 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
2803 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
2804 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
2805 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
2808 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
2809 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
2810 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
2811 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
2814 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2815 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
2816 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
2820 Controls.heading_time = 0;
2822 if (Controls.heading_time < 0)
2823 Controls.heading_time = 0;
2825 if (Controls.heading_time > 0)
2826 Controls.heading_time = 0;
2827 Controls.heading_time += kh;
2830 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2831 if ( !kc_superjoy[16].value ) // If not inverted...
2832 Controls.heading_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2834 Controls.heading_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2838 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2839 if ( !kc_mouse[16].value ) // If not inverted...
2840 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2842 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2845 Controls.heading_time = 0;
2848 //----------- Read sideways_thrust_time -----------------
2851 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2852 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2853 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2854 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2857 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
2858 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
2859 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
2860 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
2863 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2864 if ( !kc_superjoy[16].value ) // If not inverted...
2865 Controls.sideways_thrust_time += joy_axis[kc_superjoy[15].value];
2867 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[15].value];
2871 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2872 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
2873 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
2877 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2878 if ( !kc_mouse[16].value ) // If not inverted...
2879 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
2881 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
2886 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
2887 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
2888 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
2889 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
2892 if ( (use_joystick)&&(kc_superjoy[17].value < 255 )) {
2893 if ( !kc_superjoy[18].value ) // If not inverted...
2894 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[17].value];
2896 Controls.sideways_thrust_time += joy_axis[kc_superjoy[17].value];
2899 // From joystick buttons
2900 if ( (use_joystick)&&(kc_superjoy[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_superjoy[6].value );
2901 if ( (use_joystick)&&(kc_superjoy[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_superjoy[7].value );
2903 // From mouse buttons
2904 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
2905 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
2908 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
2909 if ( !kc_mouse[18].value ) // If not inverted...
2910 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
2912 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
2915 //----------- Read bank_time -----------------
2918 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2919 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2920 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2921 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2924 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
2925 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
2926 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
2927 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
2930 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2931 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
2932 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
2936 if ( (use_joystick)&&(kc_superjoy[15].value < 255) ) {
2937 if ( !kc_superjoy[16].value ) // If not inverted...
2938 Controls.bank_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2940 Controls.bank_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2944 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2945 if ( !kc_mouse[16].value ) // If not inverted...
2946 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2948 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2953 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
2954 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
2955 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
2956 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
2959 if ( (use_joystick)&&(kc_superjoy[21].value < 255) ) {
2960 if ( !kc_superjoy[22].value ) // If not inverted...
2961 Controls.bank_time -= joy_axis[kc_superjoy[21].value];
2963 Controls.bank_time += joy_axis[kc_superjoy[21].value];
2966 // From joystick buttons
2967 if ( (use_joystick)&&(kc_superjoy[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_superjoy[11].value );
2968 if ( (use_joystick)&&(kc_superjoy[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_superjoy[12].value );
2970 // From mouse buttons
2971 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
2972 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
2975 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
2976 if ( !kc_mouse[22].value ) // If not inverted...
2977 Controls.bank_time += mouse_axis[kc_mouse[21].value];
2979 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
2983 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2984 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
2985 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
2988 //----------- Read forward_thrust_time -------------
2991 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
2992 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
2993 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
2994 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
2997 if ( (use_joystick)&&(kc_superjoy[23].value < 255 )) {
2998 if ( !kc_superjoy[24].value ) // If not inverted...
2999 Controls.forward_thrust_time -= joy_axis[kc_superjoy[23].value];
3001 Controls.forward_thrust_time += joy_axis[kc_superjoy[23].value];
3004 // From joystick buttons
3005 if ( (use_joystick)&&(kc_superjoy[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_superjoy[2].value );
3006 if ( (use_joystick)&&(kc_superjoy[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_superjoy[3].value );
3009 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
3010 if ( !kc_mouse[24].value ) // If not inverted...
3011 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
3013 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
3016 // From mouse buttons
3017 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
3018 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
3020 //----------- Read afterburner_state -------------
3023 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
3024 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
3026 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
3028 if ( (use_joystick)&&(kc_superjoy[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_superjoy[27].value);
3030 //-------Read headlight key--------------------------
3031 if (kc_keyboard[52].value < 255 )
3032 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
3033 if (kc_keyboard[53].value < 255 )
3034 Controls.headlight_count=key_down_count(kc_keyboard[53].value);
3035 if ((use_joystick)&&(kc_superjoy[30].value < 255 ))
3036 Controls.headlight_count=joy_get_button_down_cnt(kc_superjoy[30].value);
3038 //--------Read Cycle Primary Key------------------
3040 if (kc_keyboard[48].value<255)
3041 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
3042 if (kc_keyboard[49].value<255)
3043 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
3044 if ((use_joystick)&&(kc_superjoy[28].value < 255 ))
3045 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_superjoy[28].value);
3047 //--------Read Cycle Secondary Key------------------
3049 if (kc_keyboard[50].value<255)
3050 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
3051 if (kc_keyboard[51].value<255)
3052 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
3053 if ((use_joystick)&&(kc_superjoy[29].value < 255 ))
3054 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_superjoy[29].value);
3056 //--------Read Toggle Bomb key----------------------
3058 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
3060 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
3062 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
3063 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
3065 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3066 HUD_init_message ("No bombs available!");
3070 if (Players[Player_num].secondary_ammo[bomb]==0)
3072 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3073 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
3077 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
3078 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
3083 //---------Read Energy->Shield key----------
3085 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
3086 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
3087 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
3088 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
3090 //----------- Read fire_primary_down_count
3091 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
3092 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
3093 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_superjoy[0].value);
3094 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
3096 //----------- Read fire_primary_state
3097 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
3098 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
3099 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_superjoy[0].value);
3100 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
3102 //----------- Read fire_secondary_down_count
3103 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
3104 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
3105 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_superjoy[1].value);
3106 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
3108 //----------- Read fire_secondary_state
3109 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
3110 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
3111 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_superjoy[1].value);
3112 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
3114 //----------- Read fire_flare_down_count
3115 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
3116 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
3117 if ((use_joystick)&&(kc_superjoy[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_superjoy[4].value);
3118 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
3120 //----------- Read drop_bomb_down_count
3121 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
3122 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
3123 if ((use_joystick)&&(kc_superjoy[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_superjoy[26].value);
3124 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
3126 //----------- Read rear_view_down_count
3127 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
3128 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
3129 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_superjoy[25].value);
3130 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
3132 //----------- Read rear_view_down_state
3133 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
3134 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
3135 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_superjoy[25].value);
3136 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
3138 //----------- Read automap_down_count
3139 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
3140 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
3142 //----------- Read automap_state
3143 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
3144 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
3146 //----------- Read stupid-cruise-control-type of throttle.
3148 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
3149 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
3150 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
3151 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
3152 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
3154 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
3157 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
3158 if (Cruise_speed < 0 ) Cruise_speed = 0;
3160 if (Controls.forward_thrust_time==0)
3161 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
3164 //read_head_tracker();
3166 // Read external controls
3167 if (kc_use_external_control || CybermouseActive)
3168 kconfig_read_external_controls();
3170 //----------- Clamp values between -FrameTime and FrameTime
3171 if (FrameTime > F1_0 )
3172 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
3174 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
3175 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
3176 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
3177 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
3178 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
3179 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
3180 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
3182 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
3183 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
3184 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
3185 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
3186 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
3187 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
3188 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
3191 //--------- Don't do anything if in debug mode
3193 if ( keyd_pressed[KEY_DELETE] ) {
3194 memset( &Controls, 0, sizeof(control_info) );
3201 fix Next_toggle_time[3]={0,0,0};
3203 int allowed_to_toggle(int i)
3205 //used for keeping tabs of when its ok to toggle headlight,primary,and secondary
3207 if (Next_toggle_time[i] > GameTime)
3208 if (Next_toggle_time[i] < GameTime + (F1_0/8)) // In case time is bogus, never wait > 1 second.
3211 Next_toggle_time[i] = GameTime + (F1_0/8);
3218 //added on 2/7/99 by Victor Rachels for jostick state setting
3219 int d2x_joystick_ostate[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
3220 //end this section adition - VR
3224 void controls_read_all()
3227 int slide_on, bank_on;
3234 fix mouse_axis[3] = {0,0,0};
3235 #ifdef USE_LINUX_JOY
3236 int raw_joy_axis[MAX_AXES];
3238 int raw_joy_axis[JOY_NUM_AXES];
3241 fix k0, k1, k2, k3, kp;
3242 fix k4, k5, k6, k7, kh;
3243 ubyte channel_masks;
3244 int use_mouse, use_joystick;
3250 if (Game_turbo_mode)
3254 fix temp = Controls.heading_time;
3255 fix temp1 = Controls.pitch_time;
3256 memset( &Controls, 0, sizeof(control_info) );
3257 Controls.heading_time = temp;
3258 Controls.pitch_time = temp1;
3263 ctime = timer_get_fixed_seconds();
3265 //--------- Read Joystick -----------
3267 if ( (LastReadTime + JOYSTICK_READ_TIME > ctime) && (Config_control_type!=CONTROL_THRUSTMASTER_FCS) ) {
3269 if ((ctime < 0) && (LastReadTime >= 0))
3271 if ((ctime < 0) && (LastReadTime > 0))
3273 LastReadTime = ctime;
3275 } else if ((Config_control_type>0) && (Config_control_type<5) ) {
3276 LastReadTime = ctime;
3277 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
3279 # ifdef USE_LINUX_JOY
3280 for (i = 0; i < j_num_axes; i++)
3282 for (i = 0; i < JOY_NUM_AXES; i++)
3286 if (channel_masks&(1<<i)) {
3288 int joy_null_value = 10;
3290 if ( (i==3) && (Config_control_type==CONTROL_THRUSTMASTER_FCS) ) {
3291 kconfig_read_fcs( raw_joy_axis[i] );
3293 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
3295 if (kc_joystick[23].value==i) // If this is the throttle
3296 joy_null_value = 20; // Then use a larger dead-zone
3298 if (raw_joy_axis[i] > joy_null_value)
3299 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
3300 else if (raw_joy_axis[i] < -joy_null_value)
3301 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
3303 raw_joy_axis[i] = 0;
3304 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
3314 #ifdef USE_LINUX_JOY
3315 for (i = 0; i < j_num_axes; i++)
3317 for (i = 0; i < JOY_NUM_AXES; i++)
3323 //--------- Read Joystick -----------
3324 if ((Config_control_type>0) && (Config_control_type<5) ) {
3325 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
3326 for (i=0; i<4; i++ ) {
3327 if (channel_masks&(1<<i)) {
3328 int joy_null_value = 10;
3330 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
3332 if (kc_joystick[23].value==i) // If this is the throttle
3333 joy_null_value = 20; // Then use a larger dead-zone
3335 if (raw_joy_axis[i] > joy_null_value)
3336 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
3337 else if (raw_joy_axis[i] < -joy_null_value)
3338 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
3340 raw_joy_axis[i] = 0;
3341 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
3348 for (i=0; i<4; i++ )
3352 #endif // ifndef MACINTOSH
3354 if (Config_control_type==5 && !CybermouseActive) {
3355 //--------- Read Mouse -----------
3357 mouse_get_delta_z( &dx, &dy, &dz );
3359 mouse_get_delta( &dx, &dy );
3361 mouse_axis[0] = (dx*FrameTime)/35;
3362 mouse_axis[1] = (dy*FrameTime)/25;
3364 mouse_axis[2] = (dz*FrameTime);
3366 mouse_buttons = mouse_get_btns();
3367 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
3369 } else if (Config_control_type==6 && !CybermouseActive) {
3370 //--------- Read Cyberman -----------
3371 mouse_get_cyberman_pos(&idx,&idy );
3372 mouse_axis[0] = (idx*FrameTime)/128;
3373 mouse_axis[1] = (idy*FrameTime)/128;
3374 mouse_buttons = mouse_get_btns();
3376 } else if (CybermouseActive) {
3377 // ReadOWL (kc_external_control);
3378 // CybermouseAdjust();
3387 //added on 2/4/99 by Victor Rachels for d1x keys
3388 //--------- Read primary weapon select -------------
3389 //the following "if" added by WraithX to stop deadies from switchin weapons, 4/14/00
3390 if (!Player_is_dead)
3393 int d2x_joystick_state[10];
3396 d2x_joystick_state[i] = joy_get_button_state(kc_d2x[i*2+1].value);
3399 //----------------Weapon 1----------------
3400 if(key_down_count(kc_d2x[0].value) ||
3401 (joy_get_button_state(kc_d2x[1].value) &&
3402 (d2x_joystick_state[0]!=d2x_joystick_ostate[0]) ) )
3405 do_weapon_select(0,0);
3407 for(i=MAX_PRIMARY_WEAPONS;i<MAX_PRIMARY_WEAPONS+NEWPRIMS;i++)
3408 if(primary_order[i]>primary_order[valu]&&player_has_weapon(i,0))
3410 LaserPowSelected = valu;
3413 //----------------Weapon 2----------------
3414 if(key_down_count(kc_d2x[2].value) ||
3415 (joy_get_button_state(kc_d2x[3].value) &&
3416 (d2x_joystick_state[1]!=d2x_joystick_ostate[1]) ) )
3417 do_weapon_select(1,0);
3418 //----------------Weapon 3----------------
3419 if(key_down_count(kc_d2x[4].value) ||
3420 (joy_get_button_state(kc_d2x[5].value) &&
3421 (d2x_joystick_state[2]!=d2x_joystick_ostate[2]) ) )
3422 do_weapon_select(2,0);
3423 //----------------Weapon 4----------------
3424 if(key_down_count(kc_d2x[6].value) ||
3425 (joy_get_button_state(kc_d2x[7].value) &&
3426 (d2x_joystick_state[3]!=d2x_joystick_ostate[3]) ) )
3427 do_weapon_select(3,0);
3428 //----------------Weapon 5----------------
3429 if(key_down_count(kc_d2x[8].value) ||
3430 (joy_get_button_state(kc_d2x[9].value) &&
3431 (d2x_joystick_state[4]!=d2x_joystick_ostate[4]) ) )
3432 do_weapon_select(4,0);
3434 //--------- Read secondary weapon select ----------
3435 //----------------Weapon 6----------------
3436 if(key_down_count(kc_d2x[10].value) ||
3437 (joy_get_button_state(kc_d2x[11].value) &&
3438 (d2x_joystick_state[5]!=d2x_joystick_ostate[5]) ) )
3439 do_weapon_select(0,1);
3440 //----------------Weapon 7----------------
3441 if(key_down_count(kc_d2x[12].value) ||
3442 (joy_get_button_state(kc_d2x[13].value) &&
3443 (d2x_joystick_state[6]!=d2x_joystick_ostate[6]) ) )
3444 do_weapon_select(1,1);
3445 //----------------Weapon 8----------------
3446 if(key_down_count(kc_d2x[14].value) ||
3447 (joy_get_button_state(kc_d2x[15].value) &&
3448 (d2x_joystick_state[7]!=d2x_joystick_ostate[7]) ) )
3449 do_weapon_select(2,1);
3450 //----------------Weapon 9----------------
3451 if(key_down_count(kc_d2x[16].value) ||
3452 (joy_get_button_state(kc_d2x[17].value) &&
3453 (d2x_joystick_state[8]!=d2x_joystick_ostate[8]) ) )
3454 do_weapon_select(3,1);
3455 //----------------Weapon 0----------------
3456 if(key_down_count(kc_d2x[18].value) ||
3457 (joy_get_button_state(kc_d2x[19].value) &&
3458 (d2x_joystick_state[9]!=d2x_joystick_ostate[9]) ) )
3459 do_weapon_select(4,1);
3460 memcpy(d2x_joystick_ostate,d2x_joystick_state,10*sizeof(int));
3462 //end this section addition - VR
3465 }//end "if (!Player_is_dead)" - WraithX
3469 //------------- Read slide_on -------------
3472 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
3473 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
3475 if ((use_joystick)&&(kc_joystick[5].value<255)) slide_on |= joy_get_button_state( kc_joystick[5].value );
3477 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
3479 //------------- Read bank_on ---------------
3482 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
3483 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
3485 if ( (use_joystick)&&(kc_joystick[10].value < 255 )) bank_on |= joy_get_button_state( kc_joystick[10].value );
3487 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
3489 //------------ Read pitch_time -----------
3491 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3493 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
3494 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
3495 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
3496 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
3499 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
3500 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
3501 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
3502 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
3505 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3506 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
3507 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
3511 Controls.pitch_time = 0;
3513 if (Controls.pitch_time < 0)
3514 Controls.pitch_time = 0;
3516 if (Controls.pitch_time > 0)
3517 Controls.pitch_time = 0;
3518 Controls.pitch_time += kp;
3521 if ( (use_joystick)&&(kc_joystick[13].value < 255 )) {
3522 if ( !kc_joystick[14].value ) // If not inverted...
3523 Controls.pitch_time -= (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3525 Controls.pitch_time += (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3529 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
3530 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
3531 if ( !kc_mouse[14].value ) // If not inverted...
3532 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3534 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3537 Controls.pitch_time = 0;
3541 // the following "if" added by WraithX, 4/14/00
3542 // done so that dead players can't move
3543 if (!Player_is_dead)
3545 //----------- Read vertical_thrust_time -----------------
3548 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
3549 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
3550 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
3551 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
3554 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
3555 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
3556 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
3557 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
3560 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3561 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
3562 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
3566 if ((use_joystick)&&( kc_joystick[13].value < 255 )) {
3567 if ( !kc_joystick[14].value ) // If not inverted...
3568 Controls.vertical_thrust_time += joy_axis[kc_joystick[13].value];
3570 Controls.vertical_thrust_time -= joy_axis[kc_joystick[13].value];
3574 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
3575 if ( !kc_mouse[14].value ) // If not inverted...
3576 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
3578 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
3583 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
3584 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
3585 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
3586 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
3589 if ((use_joystick)&&( kc_joystick[19].value < 255 )) {
3590 if ( !kc_joystick[20].value ) // If not inverted...
3591 Controls.vertical_thrust_time += joy_axis[kc_joystick[19].value];
3593 Controls.vertical_thrust_time -= joy_axis[kc_joystick[19].value];
3596 // From joystick buttons
3597 if ( (use_joystick)&&(kc_joystick[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_joystick[8].value );
3598 if ( (use_joystick)&&(kc_joystick[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_joystick[9].value );
3600 // From mouse buttons
3601 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
3602 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
3605 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
3606 if ( !kc_mouse[20].value ) // If not inverted...
3607 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
3609 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
3613 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3614 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
3615 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
3617 }// end "if" added by WraithX
3619 //---------- Read heading_time -----------
3621 if (!slide_on && !bank_on) {
3622 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3624 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
3625 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
3626 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
3627 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
3630 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
3631 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
3632 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
3633 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
3636 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3637 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
3638 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
3642 Controls.heading_time = 0;
3644 if (Controls.heading_time < 0)
3645 Controls.heading_time = 0;
3647 if (Controls.heading_time > 0)
3648 Controls.heading_time = 0;
3649 Controls.heading_time += kh;
3652 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3653 if ( !kc_joystick[16].value ) // If not inverted...
3654 Controls.heading_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3656 Controls.heading_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3660 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3661 if ( !kc_mouse[16].value ) // If not inverted...
3662 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3664 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3667 Controls.heading_time = 0;
3670 // the following "if" added by WraithX, 4/14/00
3671 // done so that dead players can't move
3672 if (!Player_is_dead)
3674 //----------- Read sideways_thrust_time -----------------
3677 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3678 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3679 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3680 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3683 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
3684 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
3685 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
3686 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
3689 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3690 if ( !kc_joystick[16].value ) // If not inverted...
3691 Controls.sideways_thrust_time += joy_axis[kc_joystick[15].value];
3693 Controls.sideways_thrust_time -= joy_axis[kc_joystick[15].value];
3697 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3698 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
3699 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
3703 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3704 if ( !kc_mouse[16].value ) // If not inverted...
3705 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
3707 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
3712 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
3713 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
3714 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
3715 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
3718 if ( (use_joystick)&&(kc_joystick[17].value < 255 )) {
3719 if ( !kc_joystick[18].value ) // If not inverted...
3720 Controls.sideways_thrust_time -= joy_axis[kc_joystick[17].value];
3722 Controls.sideways_thrust_time += joy_axis[kc_joystick[17].value];
3725 // From joystick buttons
3726 if ( (use_joystick)&&(kc_joystick[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_joystick[6].value );
3727 if ( (use_joystick)&&(kc_joystick[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_joystick[7].value );
3729 // From mouse buttons
3730 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
3731 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
3734 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
3735 if ( !kc_mouse[18].value ) // If not inverted...
3736 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
3738 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
3740 }// end "if" added by WraithX
3742 //----------- Read bank_time -----------------
3745 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3746 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3747 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3748 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3751 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
3752 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
3753 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
3754 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
3757 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3758 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
3759 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
3763 if ( (use_joystick)&&(kc_joystick[15].value < 255) ) {
3764 if ( !kc_joystick[16].value ) // If not inverted...
3765 Controls.bank_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3767 Controls.bank_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3771 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3772 if ( !kc_mouse[16].value ) // If not inverted...
3773 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3775 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3780 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
3781 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
3782 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
3783 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
3786 if ( (use_joystick)&&(kc_joystick[21].value < 255) ) {
3787 if ( !kc_joystick[22].value ) // If not inverted...
3788 Controls.bank_time -= joy_axis[kc_joystick[21].value];
3790 Controls.bank_time += joy_axis[kc_joystick[21].value];
3793 // From joystick buttons
3794 if ( (use_joystick)&&(kc_joystick[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_joystick[11].value );
3795 if ( (use_joystick)&&(kc_joystick[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_joystick[12].value );
3797 // From mouse buttons
3798 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
3799 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
3802 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
3803 if ( !kc_mouse[22].value ) // If not inverted...
3804 Controls.bank_time += mouse_axis[kc_mouse[21].value];
3806 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
3810 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3811 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
3812 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
3815 // the following "if" added by WraithX, 4/14/00
3816 // done so that dead players can't move
3817 if (!Player_is_dead)
3819 //----------- Read forward_thrust_time -------------
3822 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
3823 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
3824 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
3825 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
3828 if ( (use_joystick)&&(kc_joystick[23].value < 255 )) {
3829 if ( !kc_joystick[24].value ) // If not inverted...
3830 Controls.forward_thrust_time -= joy_axis[kc_joystick[23].value];
3832 Controls.forward_thrust_time += joy_axis[kc_joystick[23].value];
3835 // From joystick buttons
3836 if ( (use_joystick)&&(kc_joystick[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_joystick[2].value );
3837 if ( (use_joystick)&&(kc_joystick[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_joystick[3].value );
3840 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
3841 if ( !kc_mouse[24].value ) // If not inverted...
3842 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
3844 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
3847 // From mouse buttons
3848 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
3849 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
3851 //----------- Read afterburner_state -------------
3854 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
3855 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
3857 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
3859 if ( (use_joystick)&&(kc_joystick[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_joystick[27].value);
3861 //-------Read headlight key--------------------------
3863 if (kc_keyboard[52].value < 255 )
3864 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
3865 if (kc_keyboard[53].value < 255 )
3866 Controls.headlight_count+=key_down_count(kc_keyboard[53].value);
3867 if ((use_joystick)&&(kc_joystick[30].value < 255 ))
3868 Controls.headlight_count+=joy_get_button_down_cnt(kc_joystick[30].value);
3870 //--------Read Cycle Primary Key------------------
3872 if (kc_keyboard[48].value<255)
3873 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
3874 if (kc_keyboard[49].value<255)
3875 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
3876 if ((use_joystick)&&(kc_joystick[28].value < 255 ))
3877 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_joystick[28].value);
3880 //--------Read Cycle Secondary Key------------------
3882 if (kc_keyboard[50].value<255)
3883 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
3884 if (kc_keyboard[51].value<255)
3885 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
3886 if ((use_joystick)&&(kc_joystick[29].value < 255 ))
3887 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_joystick[29].value);
3889 //--------Read Toggle Bomb key----------------------
3891 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
3893 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
3895 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
3896 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
3898 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3899 HUD_init_message ("No bombs available!");
3903 if (Players[Player_num].secondary_ammo[bomb]==0)
3905 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3906 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
3910 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
3911 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
3916 //---------Read Energy->Shield key----------
3918 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
3919 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
3920 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
3921 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
3923 //----------- Read fire_primary_down_count
3924 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
3925 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
3926 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_joystick[0].value);
3927 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
3929 //----------- Read fire_primary_state
3930 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
3931 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
3932 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_joystick[0].value);
3933 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
3935 //----------- Read fire_secondary_down_count
3936 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
3937 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
3938 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_joystick[1].value);
3939 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
3941 //----------- Read fire_secondary_state
3942 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
3943 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
3944 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_joystick[1].value);
3945 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
3947 //----------- Read fire_flare_down_count
3948 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
3949 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
3950 if ((use_joystick)&&(kc_joystick[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_joystick[4].value);
3951 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
3953 //----------- Read drop_bomb_down_count
3954 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
3955 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
3956 if ((use_joystick)&&(kc_joystick[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_joystick[26].value);
3957 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
3959 //----------- Read rear_view_down_count
3960 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
3961 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
3962 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_joystick[25].value);
3963 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
3965 //----------- Read rear_view_down_state
3966 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
3967 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
3968 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_joystick[25].value);
3969 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
3971 }//end "if" added by WraithX
3973 //----------- Read automap_down_count
3974 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
3975 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
3977 //----------- Read automap_state
3978 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
3979 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
3981 //----------- Read stupid-cruise-control-type of throttle.
3983 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
3984 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
3985 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
3986 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
3987 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
3989 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
3992 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
3993 if (Cruise_speed < 0 ) Cruise_speed = 0;
3995 if (Controls.forward_thrust_time==0)
3996 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
3999 #if !defined(MACINTOSH)
4000 //read_head_tracker();
4002 // Read external controls
4003 // if (kc_use_external_control || CybermouseActive)
4004 // kconfig_read_external_controls();
4007 //----------- Clamp values between -FrameTime and FrameTime
4008 if (FrameTime > F1_0 )
4009 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
4011 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
4012 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
4013 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
4014 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
4015 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
4016 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
4017 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
4019 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
4020 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
4021 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
4022 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
4023 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
4024 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
4025 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
4028 //--------- Don't do anything if in debug mode
4030 if ( keyd_pressed[KEY_DELETE] ) {
4031 memset( &Controls, 0, sizeof(control_info) );
4037 void reset_cruise(void)
4043 void kc_set_controls()
4047 for (i=0; i<NUM_KEY_CONTROLS; i++ )
4048 kc_keyboard[i].value = kconfig_settings[0][i];
4050 if ( (Config_control_type>0) && (Config_control_type<5)) {
4051 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
4052 kc_joystick[i].value = kconfig_settings[Config_control_type][i];
4053 if (kc_joystick[i].type == BT_INVERT ) {
4054 if (kc_joystick[i].value!=1)
4055 kc_joystick[i].value = 0;
4056 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
4059 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
4060 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
4061 kc_mouse[i].value = kconfig_settings[Config_control_type][i];
4062 if (kc_mouse[i].type == BT_INVERT ) {
4063 if (kc_mouse[i].value!=1)
4064 kc_mouse[i].value = 0;
4065 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
4068 } else if (Config_control_type == CONTROL_WINJOYSTICK) {
4069 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
4070 kc_superjoy[i].value = kconfig_settings[Config_control_type][i];
4071 if (kc_superjoy[i].type == BT_INVERT ) {
4072 if (kc_superjoy[i].value!=1)
4073 kc_superjoy[i].value = 0;
4074 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
4080 for (i=0; i<NUM_D2X_CONTROLS; i++ )
4081 kc_d2x[i].value = kconfig_d2x_settings[i];
4085 #if 0 //ndef MACINTOSH // no mac support for vr headset
4087 void kconfig_center_headset()
4091 vfx_center_headset();
4093 // } else if (iglasses_headset_installed) {
4094 // } else if (Victor_headset_installed) {
4100 #endif // end of #ifndef MACINTOSH for kconfig_center_headset
4102 void CybermouseAdjust ()
4104 /* if ( Player_num > -1 ) {
4105 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
4106 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
4107 Auto_leveling_on = 0;
4109 if ( kc_external_version > 0 ) {
4110 vms_matrix tempm, ViewMatrix;
4111 vms_angvec * Kconfig_abs_movement;
4114 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
4116 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
4117 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
4118 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
4119 Objects[Players[Player_num].objnum].orient = ViewMatrix;
4121 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
4122 if (oem_message[0] != '\0' )
4123 HUD_init_message( oem_message );
4127 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
4128 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
4129 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
4130 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
4131 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
4132 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
4133 // Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
4134 // Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
4135 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
4136 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
4137 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
4138 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
4139 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
4140 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
4141 // Controls.automap_down_count += kc_external_control->automap_down_count;
4142 // Controls.automap_state |= kc_external_control->automap_state;
4145 char GetKeyValue (char key)
4147 mprintf ((0,"Returning %c!\n",kc_keyboard[(int)key].value));
4148 return (kc_keyboard[(int)key].value);
4151 #if !defined(MACINTOSH)
4154 extern object *obj_find_first_of_type (int);
4155 void kconfig_read_external_controls()
4160 if ( !kc_enable_external_control ) return;
4162 if ( kc_external_version == 0 )
4163 memset( kc_external_control, 0, sizeof(ext_control_info));
4164 else if ( kc_external_version > 0 ) {
4166 if (kc_external_version>=4)
4167 memset( kc_external_control, 0, sizeof(advanced_ext_control_info));
4168 else if (kc_external_version>0)
4169 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 );
4170 else if (kc_external_version>2)
4171 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof(vms_matrix) +4 );
4173 if ( kc_external_version > 1 ) {
4174 // Write ship pos and angles to external controls...
4175 ubyte *temp_ptr = (ubyte *)kc_external_control;
4176 vms_vector *ship_pos;
4177 vms_matrix *ship_orient;
4178 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
4179 temp_ptr += sizeof(ext_control_info) + sizeof(vms_angvec) + 64;
4180 ship_pos = (vms_vector *)temp_ptr;
4181 temp_ptr += sizeof(vms_vector);
4182 ship_orient = (vms_matrix *)temp_ptr;
4183 // Fill in ship postion...
4184 *ship_pos = Objects[Players[Player_num].objnum].pos;
4185 // Fill in ship orientation...
4186 *ship_orient = Objects[Players[Player_num].objnum].orient;
4188 if (kc_external_version>=4)
4190 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
4192 temp_ptr->headlight_state=(Players[Player_num].flags & PLAYER_FLAGS_HEADLIGHT_ON);
4193 temp_ptr->primary_weapon_flags=Players[Player_num].primary_weapon_flags;
4194 temp_ptr->secondary_weapon_flags=Players[Player_num].secondary_weapon_flags;
4195 temp_ptr->current_primary_weapon=Primary_weapon;
4196 temp_ptr->current_secondary_weapon=Secondary_weapon;
4198 temp_ptr->current_guidebot_command=Escort_goal_object;
4200 temp_ptr->force_vector=ExtForceVec;
4201 temp_ptr->force_matrix=ExtApplyForceMatrix;
4203 temp_ptr->joltinfo[i]=ExtJoltInfo[i];
4205 temp_ptr->x_vibrate_info[i]=ExtXVibrateInfo[i];
4206 temp_ptr->x_vibrate_clear=ExtXVibrateClear;
4207 temp_ptr->game_status=ExtGameStatus;
4209 memset ((void *)&ExtForceVec,0,sizeof(vms_vector));
4210 memset ((void *)&ExtApplyForceMatrix,0,sizeof(vms_matrix));
4215 ExtXVibrateInfo[i]=0;
4220 if ( Automap_active ) // (If in automap...)
4221 kc_external_control->automap_state = 1;
4222 //memset(&r,0,sizeof(r));
4226 int386 ( kc_external_intno, &r, &r); // Read external info...
4230 if ( Player_num > -1 ) {
4231 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
4232 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
4233 Auto_leveling_on = 0;
4235 if ( kc_external_version > 0 ) {
4236 vms_matrix tempm, ViewMatrix;
4237 vms_angvec * Kconfig_abs_movement;
4240 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(ext_control_info));
4242 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
4243 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
4244 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
4245 Objects[Players[Player_num].objnum].orient = ViewMatrix;
4247 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
4248 if (oem_message[0] != '\0' )
4249 HUD_init_message( oem_message );
4253 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
4254 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
4255 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
4256 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
4257 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
4258 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
4259 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
4260 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
4261 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
4262 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
4263 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
4264 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
4265 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
4266 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
4267 Controls.automap_down_count += kc_external_control->automap_down_count;
4268 Controls.automap_state |= kc_external_control->automap_state;
4270 if (kc_external_version>=3)
4272 ubyte *temp_ptr = (ubyte *)kc_external_control;
4273 temp_ptr += (sizeof(ext_control_info) + sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof (vms_matrix));
4276 Controls.cycle_primary_count=(*(temp_ptr));
4278 Controls.cycle_secondary_count=(*(temp_ptr+1));
4281 Controls.afterburner_state=(*(temp_ptr+2));
4283 Controls.headlight_count=(*(temp_ptr+3));
4285 if (kc_external_version>=4)
4288 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
4291 if (temp_ptr->keyboard[i])
4294 if (temp_ptr->Reactor_blown)
4296 if (Game_mode & GM_MULTI)
4297 net_destroy_controlcen (obj_find_first_of_type (OBJ_CNTRLCEN));
4299 do_controlcen_destroyed_stuff(obj_find_first_of_type (OBJ_CNTRLCEN));