1 /* $Id: kconfig.c,v 1.22 2003-06-06 23:51:21 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.22 2003-06-06 23:51:21 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 byte 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 };
432 int joybutton_text[28] =
433 { TNUM_BTN_1, TNUM_BTN_2, TNUM_BTN_3, TNUM_BTN_4,
437 TNUM_HAT_L, TNUM_HAT_R, TNUM_HAT_U, TNUM_HAT_D,
441 int joyaxis_text[7] = { TNUM_X1, TNUM_Y1, TNUM_Z1, TNUM_UN, TNUM_P1,TNUM_R1,TNUM_YA1 };
443 int joybutton_text[28] =
444 { TNUM_BTN_1, TNUM_BTN_2, TNUM_BTN_3, TNUM_BTN_4,
445 -1, TNUM_TRIG, TNUM_LEFT, TNUM_HAT_L,
446 TNUM_RIGHT, -1, TNUM_HAT2_D, TNUM_HAT_R,
447 TNUM_MID, -1, TNUM_HAT2_R, TNUM_HAT_U,
448 TNUM_HAT2_L, -1, TNUM_HAT2_U, TNUM_HAT_D,
449 TNUM_TRIG, TNUM_LEFT, TNUM_RIGHT, -1,
450 TNUM_UP, TNUM_DOWN, TNUM_LEFT, TNUM_RIGHT };
452 int joyaxis_text[7] = { TNUM_X1, TNUM_Y1, TNUM_Z1, TNUM_UN, TNUM_P1,TNUM_R1,TNUM_YA1 };
453 // int joyaxis_text[4] = { TNUM_X1, TNUM_Y1, TNUM_X2, TNUM_Y2 };
456 int mouseaxis_text[3] = { TNUM_L_R, TNUM_F_B, TNUM_Z1 };
458 int mousebutton_text[3] = { TNUM_LEFT, TNUM_RIGHT, TNUM_MID };
459 char * mousebutton_textra[13] = { "M4", "M5", "M6", "M7", "M8", "M9", "M10","M11","M12","M13","M14","M15","M16" };//text for buttons above 3. -MPM
461 char *mousebutton_text[3] = { "Btn", "", "" }; // only one silly mouse button on the mac
465 char * key_text[256] = {
466 "","S","D","F","H","G","Z","X","C","V","","B","Q", "W", "E", "R",
467 "Y","T","1","2","3","4","6","5","=","9","7","-", "8", "0", "]", "O",
468 "U","[","I","P","RET","L","J","'","K", ";", "\\", ",", "/", "N", "M", ".",
469 "TAB","SPC","`","DEL","","ESC","","APL","SHIFT","CAPSL","OPTN","CTRL","","","","A",
470 "","PAD.","","PAD*","","PAD+","","NMLCK","","","","PAD/","ENTER","","PAD-","",
471 "","PAD=","PAD0","PAD1","PAD2","PAD3","PAD4","PAD5","PAD6","PAD7","","PAD8","PAD9","","","",
472 "F5","F6","F7","","F8","F9","","F11","","F13","","F14","","F10","","F12",
473 "","PAUSE","HELP","HOME","PGUP","DEL","","END","F2","","F1","LARW","RARW","DARW","UARW","",
474 "","","","","","","","","","","","","","","","",
475 "","","","","","","","","","","","","","","","",
476 "","","","","","","","","","","","","","","","",
477 "","","","","","","","","","","","","","","","",
478 "","","","","","","","","","","","","","","","",
479 "","","","","","","","","","","","","","","","",
480 "","","","","","","","","","","","","","","","",
481 "","","","","","","","","","","","","","","",""};
483 #if !defined OGL && !defined SDL_INPUT
484 char * key_text[256] = { \
485 "","ESC","1","2","3","4","5","6","7","8","9","0","-", \
486 "=","BSPC","TAB","Q","W","E","R","T","Y","U","I","O", \
487 "P","[","]","
\83","LCTRL","A","S","D","F", \
488 "G","H","J","K","L",";","'","`", \
489 "LSHFT","\\","Z","X","C","V","B","N","M",",", \
490 ".","/","RSHFT","PAD*","LALT","SPC", \
491 "CPSLK","F1","F2","F3","F4","F5","F6","F7","F8","F9", \
492 "F10","NMLCK","SCLK","PAD7","PAD8","PAD9","PAD-", \
493 "PAD4","PAD5","PAD6","PAD+","PAD1","PAD2","PAD3","PAD0", \
494 "PAD.","","","","F11","F12","","","","","","","","","", \
495 "","","","","","","","","","","","","","","","","","","","", \
496 "","","","","","","","","","","","","","","","","","","","", \
497 "","","","","","","","","","","","","","","","","","", \
498 "PAD
\83","RCTRL","","","","","","","","","","","","","", \
499 "","","","","","","","","","","PAD/","","","RALT","", \
500 "","","","","","","","","","","","","","HOME","
\82","PGUP", \
501 "","
\81","","
\7f","","END","
\80","PGDN","INS", \
502 "DEL","","","","","","","","","","","","","","","","","", \
503 "","","","","","","","","","","","","","","","","","","","", \
504 "","","","","","","" };
508 //added/removed by Victor Rachels for adding rebindable keys for these
509 // KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0
510 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 };
512 //extern void GameLoop(int, int );
514 extern void transfer_energy_to_shield(fix);
515 extern void CyclePrimary(),CycleSecondary(),InitMarkerInput();
516 extern ubyte DefiningMarkerMessage;
517 extern char CybermouseActive;
520 extern int joydefsw_do_button();
521 extern int joydefsw_do_winjoybutton(int *axis);
522 extern joydefsw_win_joyselect(char *title);
525 control_info Controls;
529 // macros for drawing lo/hi res kconfig screens (see scores.c as well)
531 #define LHX(x) ((x)*(MenuHires?2:1))
532 #define LHY(y) ((y)*(MenuHires?2.4:1))
536 #define BT_MOUSE_BUTTON 1
537 #define BT_MOUSE_AXIS 2
538 #define BT_JOY_BUTTON 3
539 #define BT_JOY_AXIS 4
542 char *btype_text[] = { "BT_KEY", "BT_MOUSE_BUTTON", "BT_MOUSE_AXIS", "BT_JOY_BUTTON", "BT_JOY_AXIS", "BT_INVERT" };
546 typedef struct kc_item {
547 short id; // The id of this item
555 ubyte value; // what key,button,etc
561 ubyte kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS];
563 //added on 2/4/99 by Victor Rachels to add d1x new keys
564 ubyte kconfig_d2x_settings[MAX_D2X_CONTROLS];
565 //end this section addition - VR
567 //----------- WARNING!!!!!!! -------------------------------------------
568 // THESE NEXT FOUR BLOCKS OF DATA ARE GENERATED BY PRESSING DEL+F12 WHEN
569 // IN THE KEYBOARD CONFIG SCREEN. BASICALLY, THAT PROCEDURE MODIFIES THE
570 // U,D,L,R FIELDS OF THE ARRAYS AND DUMPS THE NEW ARRAYS INTO KCONFIG.COD
571 //-------------------------------------------------------------------------
572 /*ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
573 {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},
574 {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},
575 {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},
576 {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},
577 {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},
578 {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},
579 {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},
583 ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
584 {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},
585 {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},
586 {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},
587 {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},
588 {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},
589 {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},
590 {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},
592 {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},
598 kc_item kc_keyboard[NUM_KEY_CONTROLS] = {
599 { 0, 15, 49, 71, 26, 55, 2, 55, 1,"Pitch forward", BT_KEY, 255 },
600 { 1, 15, 49,100, 26, 50, 3, 0, 24,"Pitch forward", BT_KEY, 255 },
601 { 2, 15, 57, 71, 26, 0, 4, 25, 3,"Pitch backward", BT_KEY, 255 },
602 { 3, 15, 57,100, 26, 1, 5, 2, 26,"Pitch backward", BT_KEY, 255 },
603 { 4, 15, 65, 71, 26, 2, 6, 27, 5,"Turn left", BT_KEY, 255 },
604 { 5, 15, 65,100, 26, 3, 7, 4, 28,"Turn left", BT_KEY, 255 },
605 { 6, 15, 73, 71, 26, 4, 8, 29, 7,"Turn right", BT_KEY, 255 },
606 { 7, 15, 73,100, 26, 5, 9, 6, 34,"Turn right", BT_KEY, 255 },
607 { 8, 15, 85, 71, 26, 6, 10, 35, 9,"Slide on", BT_KEY, 255 },
608 { 9, 15, 85,100, 26, 7, 11, 8, 36,"Slide on", BT_KEY, 255 },
609 { 10, 15, 93, 71, 26, 8, 12, 37, 11,"Slide left", BT_KEY, 255 },
610 { 11, 15, 93,100, 26, 9, 13, 10, 44,"Slide left", BT_KEY, 255 },
611 { 12, 15,101, 71, 26, 10, 14, 45, 13,"Slide right", BT_KEY, 255 },
612 { 13, 15,101,100, 26, 11, 15, 12, 30,"Slide right", BT_KEY, 255 },
613 { 14, 15,109, 71, 26, 12, 16, 31, 15,"Slide up", BT_KEY, 255 },
614 { 15, 15,109,100, 26, 13, 17, 14, 32,"Slide up", BT_KEY, 255 },
615 { 16, 15,117, 71, 26, 14, 18, 33, 17,"Slide down", BT_KEY, 255 },
616 { 17, 15,117,100, 26, 15, 19, 16, 46,"Slide down", BT_KEY, 255 },
617 { 18, 15,129, 71, 26, 16, 20, 47, 19,"Bank on", BT_KEY, 255 },
618 { 19, 15,129,100, 26, 17, 21, 18, 38,"Bank on", BT_KEY, 255 },
619 { 20, 15,137, 71, 26, 18, 22, 39, 21,"Bank left", BT_KEY, 255 },
620 { 21, 15,137,100, 26, 19, 23, 20, 40,"Bank left", BT_KEY, 255 },
621 { 22, 15,145, 71, 26, 20, 48, 41, 23,"Bank right", BT_KEY, 255 },
622 { 23, 15,145,100, 26, 21, 49, 22, 42,"Bank right", BT_KEY, 255 },
623 { 24,158, 49, 83, 26, 51, 26, 1, 25,"Fire primary", BT_KEY, 255 },
624 { 25,158, 49,112, 26, 54, 27, 24, 2,"Fire primary", BT_KEY, 255 },
625 { 26,158, 57, 83, 26, 24, 28, 3, 27,"Fire secondary", BT_KEY, 255 },
626 { 27,158, 57,112, 26, 25, 29, 26, 4,"Fire secondary", BT_KEY, 255 },
627 { 28,158, 65, 83, 26, 26, 34, 5, 29,"Fire flare", BT_KEY, 255 },
628 { 29,158, 65,112, 26, 27, 35, 28, 6,"Fire flare", BT_KEY, 255 },
629 { 30,158,105, 83, 26, 44, 32, 13, 31,"Accelerate", BT_KEY, 255 },
630 { 31,158,105,112, 26, 45, 33, 30, 14,"Accelerate", BT_KEY, 255 },
631 { 32,158,113, 83, 26, 30, 46, 15, 33,"reverse", BT_KEY, 255 },
632 { 33,158,113,112, 26, 31, 47, 32, 16,"reverse", BT_KEY, 255 },
633 { 34,158, 73, 83, 26, 28, 36, 7, 35,"Drop Bomb", BT_KEY, 255 },
634 { 35,158, 73,112, 26, 29, 37, 34, 8,"Drop Bomb", BT_KEY, 255 },
635 { 36,158, 85, 83, 26, 34, 44, 9, 37,"REAR VIEW", BT_KEY, 255 },
636 { 37,158, 85,112, 26, 35, 45, 36, 10,"REAR VIEW", BT_KEY, 255 },
637 { 38,158,133, 83, 26, 46, 40, 19, 39,"Cruise Faster", BT_KEY, 255 },
638 { 39,158,133,112, 26, 47, 41, 38, 20,"Cruise Faster", BT_KEY, 255 },
639 { 40,158,141, 83, 26, 38, 42, 21, 41,"Cruise Slower", BT_KEY, 255 },
640 { 41,158,141,112, 26, 39, 43, 40, 22,"Cruise Slower", BT_KEY, 255 },
641 { 42,158,149, 83, 26, 40, 52, 23, 43,"Cruise Off", BT_KEY, 255 },
642 { 43,158,149,112, 26, 41, 53, 42, 48,"Cruise Off", BT_KEY, 255 },
643 { 44,158, 93, 83, 26, 36, 30, 11, 45,"Automap", BT_KEY, 255 },
644 { 45,158, 93,112, 26, 37, 31, 44, 12,"Automap", BT_KEY, 255 },
645 { 46,158,121, 83, 26, 32, 38, 17, 47,"Afterburner", BT_KEY, 255 },
646 { 47,158,121,112, 26, 33, 39, 46, 18,"Afterburner", BT_KEY, 255 },
647 { 48, 15,161, 71, 26, 22, 50, 43, 49,"Cycle Primary", BT_KEY, 255 },
648 { 49, 15,161,100, 26, 23, 51, 48, 52,"Cycle Primary", BT_KEY, 255 },
649 { 50, 15,169, 71, 26, 48, 1, 53, 51,"Cycle Second", BT_KEY, 255 },
650 { 51, 15,169,100, 26, 49, 24, 50, 54,"Cycle Second", BT_KEY, 255 },
651 { 52,158,163, 83, 26, 42, 54, 49, 53,"Headlight", BT_KEY, 255 },
652 { 53,158,163,112, 26, 43, 55, 52, 50,"Headlight", BT_KEY, 255 },
653 { 54,158,171, 83, 26, 52, 56, 51, 55,"Energy->Shield", BT_KEY, 255 },
654 { 55,158,171,112, 26, 53, 0, 54, 0,"Energy->Shield", BT_KEY, 255 },
655 { 56,158,179,83, 26, 54, 0, 0, 0, "Toggle Bomb", BT_KEY,255},
657 kc_item kc_joystick[NUM_OTHER_CONTROLS] = {
658 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
659 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
660 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
661 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
662 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
663 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
664 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
665 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
666 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
667 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
668 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
669 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
670 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
671 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
672 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
673 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
674 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
675 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
676 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
677 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
678 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
679 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
680 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
681 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
682 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
683 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
684 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
685 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
686 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
687 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
688 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
690 kc_item kc_superjoy[NUM_OTHER_CONTROLS] = {
691 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
692 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
693 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
694 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
695 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
696 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
697 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
698 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
699 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
700 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
701 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
702 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
703 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
704 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
705 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
706 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
707 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
708 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
709 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
710 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
711 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
712 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
713 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
714 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
715 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
716 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
717 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
718 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
719 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
720 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
721 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
724 kc_item kc_mouse[NUM_OTHER_CONTROLS] = {
725 { 0, 25, 46, 85, 26, 12, 1, 24, 5,"Fire primary", BT_MOUSE_BUTTON, 255 },
726 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_MOUSE_BUTTON, 255 },
727 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_MOUSE_BUTTON, 255 },
728 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_MOUSE_BUTTON, 255 },
729 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_MOUSE_BUTTON, 255 },
730 { 5,180, 46, 59, 26, 24, 6, 0, 1,"Slide on", BT_MOUSE_BUTTON, 255 },
731 { 6,180, 54, 59, 26, 5, 7, 1, 4,"Slide left", BT_MOUSE_BUTTON, 255 },
732 { 7,180, 62, 59, 26, 6, 8, 4, 26,"Slide right", BT_MOUSE_BUTTON, 255 },
733 { 8,180, 70, 59, 26, 7, 9, 26, 9,"Slide up", BT_MOUSE_BUTTON, 255 },
734 { 9,180, 78, 59, 26, 8, 10, 8, 2,"Slide down", BT_MOUSE_BUTTON, 255 },
735 { 10,180, 90, 59, 26, 9, 11, 2, 3,"Bank on", BT_MOUSE_BUTTON, 255 },
736 { 11,180, 98, 59, 26, 10, 12, 3, 12,"Bank left", BT_MOUSE_BUTTON, 255 },
737 { 12,180,106, 59, 26, 11, 0, 11, 25,"Bank right", BT_MOUSE_BUTTON, 255 },
738 { 13,103,138, 58, 26, 27, 15, 25, 14,"Pitch U/D", BT_MOUSE_AXIS, 255 },
739 { 14,103,138,106, 8, 23, 16, 13, 15,"Pitch U/D", BT_INVERT, 255 },
740 { 15,103,146, 58, 26, 13, 17, 14, 16,"Turn L/R", BT_MOUSE_AXIS, 255 },
741 { 16,103,146,106, 8, 14, 18, 15, 17,"Turn L/R", BT_INVERT, 255 },
742 { 17,103,154, 58, 26, 15, 19, 16, 18,"Slide L/R", BT_MOUSE_AXIS, 255 },
743 { 18,103,154,106, 8, 16, 20, 17, 19,"Slide L/R", BT_INVERT, 255 },
744 { 19,103,162, 58, 26, 17, 21, 18, 20,"Slide U/D", BT_MOUSE_AXIS, 255 },
745 { 20,103,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
746 { 21,103,170, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_MOUSE_AXIS, 255 },
747 { 22,103,170,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
748 { 23,103,182, 58, 26, 21, 14, 22, 24,"throttle", BT_MOUSE_AXIS, 255 },
749 { 24,103,182,106, 8, 22, 5, 23, 0,"throttle", BT_INVERT, 255 },
750 { 25, 25,109, 85, 26, 3, 27, 12, 13,"REAR VIEW", BT_MOUSE_BUTTON, 255 },
751 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_MOUSE_BUTTON, 255 },
752 { 27, 25,117, 85, 26, 25, 13, 25, 13,"Afterburner", BT_MOUSE_BUTTON, 255 },
755 //added on 2/4/99 by Victor Rachels to add d1x new keys
756 kc_item kc_d2x[NUM_D2X_CONTROLS] = {
757 // id,x,y,w1,w2,u,d,l,r,text_num1,type,value
758 { 0, 15, 49, 71, 26, 27, 2, 27, 1, "WEAPON 1", BT_KEY, 255},
759 { 1, 15, 49,100, 26, 26, 3, 0, 2, "WEAPON 1", BT_JOY_BUTTON, 255},
760 { 2, 15, 57, 71, 26, 0, 4, 1, 3, "WEAPON 2", BT_KEY, 255},
761 { 3, 15, 57,100, 26, 1, 5, 2, 4, "WEAPON 2", BT_JOY_BUTTON, 255},
762 { 4, 15, 65, 71, 26, 2, 6, 3, 5, "WEAPON 3", BT_KEY, 255},
763 { 5, 15, 65,100, 26, 3, 7, 4, 6, "WEAPON 3", BT_JOY_BUTTON, 255},
764 { 6, 15, 73, 71, 26, 4, 8, 5, 7, "WEAPON 4", BT_KEY, 255},
765 { 7, 15, 73,100, 26, 5, 9, 6, 8, "WEAPON 4", BT_JOY_BUTTON, 255},
766 { 8, 15, 81, 71, 26, 6, 10, 7, 9, "WEAPON 5", BT_KEY, 255},
767 { 9, 15, 81,100, 26, 7, 11, 8, 10, "WEAPON 5", BT_JOY_BUTTON, 255},
769 { 10, 15, 89, 71, 26, 8, 12, 9, 11, "WEAPON 6", BT_KEY, 255},
770 { 11, 15, 89,100, 26, 9, 13, 10, 12, "WEAPON 6", BT_JOY_BUTTON, 255},
771 { 12, 15, 97, 71, 26, 10, 14, 11, 13, "WEAPON 7", BT_KEY, 255},
772 { 13, 15, 97,100, 26, 11, 15, 12, 14, "WEAPON 7", BT_JOY_BUTTON, 255},
773 { 14, 15,105, 71, 26, 12, 16, 13, 15, "WEAPON 8", BT_KEY, 255},
774 { 15, 15,105,100, 26, 13, 17, 14, 16, "WEAPON 8", BT_JOY_BUTTON, 255},
775 { 16, 15,113, 71, 26, 14, 18, 15, 17, "WEAPON 9", BT_KEY, 255},
776 { 17, 15,113,100, 26, 15, 19, 16, 18, "WEAPON 9", BT_JOY_BUTTON, 255},
777 { 18, 15,121, 71, 26, 16, 20, 17, 19, "WEAPON 0", BT_KEY, 255},
778 { 19, 15,121,100, 26, 17, 21, 18, 20, "WEAPON 0", BT_JOY_BUTTON, 255},
780 //{ 20, 15,131, 71, 26, 18, 22, 19, 21, "CYC PRIMARY", BT_KEY, 255},
781 //{ 21, 15,131,100, 26, 19, 23, 20, 22, "CYC PRIMARY", BT_JOY_BUTTON, 255},
782 //{ 22, 15,139, 71, 26, 20, 24, 21, 23, "CYC SECONDARY", BT_KEY, 255},
783 //{ 23, 15,139,100, 26, 21, 25, 22, 24, "CYC SECONDARY", BT_JOY_BUTTON, 255},
784 //{ 24, 8,147, 78, 26, 22, 26, 23, 25, "TOGGLE_PRIM AUTO", BT_KEY, 255},
785 //{ 25, 8,147,107, 26, 23, 27, 24, 26, "TOGGLE_PRIM_AUTO", BT_JOY_BUTTON, 255},
786 //{ 26, 8,155, 78, 26, 24, 1, 25, 27, "TOGGLE SEC AUTO", BT_KEY, 255},
787 //{ 27, 8,155,107, 26, 25, 0, 26, 0, "TOGGLE SEC AUTO", BT_JOY_BUTTON, 255},
789 //end this section addition - VR
791 #else // ifndef MACINTOSH (following are macintosh controls)
793 ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
794 {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},
795 {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},
796 {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},
797 {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},
798 {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},
799 {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},
800 {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},
803 ubyte default_firebird_settings[MAX_CONTROLS] =
804 {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};
806 ubyte default_mousestick_settings[MAX_CONTROLS] =
807 {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};
809 kc_item kc_keyboard[NUM_KEY_CONTROLS] = {
810 { 0, 15, 49, 71, 26, 55, 2, 55, 1,"Pitch forward", BT_KEY, 255 },
811 { 1, 15, 49,100, 26, 50, 3, 0, 24,"Pitch forward", BT_KEY, 255 },
812 { 2, 15, 57, 71, 26, 0, 4, 25, 3,"Pitch backward", BT_KEY, 255 },
813 { 3, 15, 57,100, 26, 1, 5, 2, 26,"Pitch backward", BT_KEY, 255 },
814 { 4, 15, 65, 71, 26, 2, 6, 27, 5,"Turn left", BT_KEY, 255 },
815 { 5, 15, 65,100, 26, 3, 7, 4, 28,"Turn left", BT_KEY, 255 },
816 { 6, 15, 73, 71, 26, 4, 8, 29, 7,"Turn right", BT_KEY, 255 },
817 { 7, 15, 73,100, 26, 5, 9, 6, 34,"Turn right", BT_KEY, 255 },
818 { 8, 15, 85, 71, 26, 6, 10, 35, 9,"Slide on", BT_KEY, 255 },
819 { 9, 15, 85,100, 26, 7, 11, 8, 36,"Slide on", BT_KEY, 255 },
820 { 10, 15, 93, 71, 26, 8, 12, 37, 11,"Slide left", BT_KEY, 255 },
821 { 11, 15, 93,100, 26, 9, 13, 10, 44,"Slide left", BT_KEY, 255 },
822 { 12, 15,101, 71, 26, 10, 14, 45, 13,"Slide right", BT_KEY, 255 },
823 { 13, 15,101,100, 26, 11, 15, 12, 30,"Slide right", BT_KEY, 255 },
824 { 14, 15,109, 71, 26, 12, 16, 31, 15,"Slide up", BT_KEY, 255 },
825 { 15, 15,109,100, 26, 13, 17, 14, 32,"Slide up", BT_KEY, 255 },
826 { 16, 15,117, 71, 26, 14, 18, 33, 17,"Slide down", BT_KEY, 255 },
827 { 17, 15,117,100, 26, 15, 19, 16, 46,"Slide down", BT_KEY, 255 },
828 { 18, 15,129, 71, 26, 16, 20, 47, 19,"Bank on", BT_KEY, 255 },
829 { 19, 15,129,100, 26, 17, 21, 18, 38,"Bank on", BT_KEY, 255 },
830 { 20, 15,137, 71, 26, 18, 22, 39, 21,"Bank left", BT_KEY, 255 },
831 { 21, 15,137,100, 26, 19, 23, 20, 40,"Bank left", BT_KEY, 255 },
832 { 22, 15,145, 71, 26, 20, 48, 41, 23,"Bank right", BT_KEY, 255 },
833 { 23, 15,145,100, 26, 21, 49, 22, 42,"Bank right", BT_KEY, 255 },
834 { 24,158, 49, 83, 26, 51, 26, 1, 25,"Fire primary", BT_KEY, 255 },
835 { 25,158, 49,112, 26, 54, 27, 24, 2,"Fire primary", BT_KEY, 255 },
836 { 26,158, 57, 83, 26, 24, 28, 3, 27,"Fire secondary", BT_KEY, 255 },
837 { 27,158, 57,112, 26, 25, 29, 26, 4,"Fire secondary", BT_KEY, 255 },
838 { 28,158, 65, 83, 26, 26, 34, 5, 29,"Fire flare", BT_KEY, 255 },
839 { 29,158, 65,112, 26, 27, 35, 28, 6,"Fire flare", BT_KEY, 255 },
840 { 30,158,105, 83, 26, 44, 32, 13, 31,"Accelerate", BT_KEY, 255 },
841 { 31,158,105,112, 26, 45, 33, 30, 14,"Accelerate", BT_KEY, 255 },
842 { 32,158,113, 83, 26, 30, 46, 15, 33,"reverse", BT_KEY, 255 },
843 { 33,158,113,112, 26, 31, 47, 32, 16,"reverse", BT_KEY, 255 },
844 { 34,158, 73, 83, 26, 28, 36, 7, 35,"Drop Bomb", BT_KEY, 255 },
845 { 35,158, 73,112, 26, 29, 37, 34, 8,"Drop Bomb", BT_KEY, 255 },
846 { 36,158, 85, 83, 26, 34, 44, 9, 37,"REAR VIEW", BT_KEY, 255 },
847 { 37,158, 85,112, 26, 35, 45, 36, 10,"REAR VIEW", BT_KEY, 255 },
848 { 38,158,133, 83, 26, 46, 40, 19, 39,"Cruise Faster", BT_KEY, 255 },
849 { 39,158,133,112, 26, 47, 41, 38, 20,"Cruise Faster", BT_KEY, 255 },
850 { 40,158,141, 83, 26, 38, 42, 21, 41,"Cruise Slower", BT_KEY, 255 },
851 { 41,158,141,112, 26, 39, 43, 40, 22,"Cruise Slower", BT_KEY, 255 },
852 { 42,158,149, 83, 26, 40, 52, 23, 43,"Cruise Off", BT_KEY, 255 },
853 { 43,158,149,112, 26, 41, 53, 42, 48,"Cruise Off", BT_KEY, 255 },
854 { 44,158, 93, 83, 26, 36, 30, 11, 45,"Automap", BT_KEY, 255 },
855 { 45,158, 93,112, 26, 37, 31, 44, 12,"Automap", BT_KEY, 255 },
856 { 46,158,121, 83, 26, 32, 38, 17, 47,"Afterburner", BT_KEY, 255 },
857 { 47,158,121,112, 26, 33, 39, 46, 18,"Afterburner", BT_KEY, 255 },
858 { 48, 15,161, 71, 26, 22, 50, 43, 49,"Cycle Primary", BT_KEY, 255 },
859 { 49, 15,161,100, 26, 23, 51, 48, 52,"Cycle Primary", BT_KEY, 255 },
860 { 50, 15,169, 71, 26, 48, 1, 53, 51,"Cycle Second", BT_KEY, 255 },
861 { 51, 15,169,100, 26, 49, 24, 50, 54,"Cycle Second", BT_KEY, 255 },
862 { 52,158,163, 83, 26, 42, 54, 49, 53,"Headlight", BT_KEY, 255 },
863 { 53,158,163,112, 26, 43, 55, 52, 50,"Headlight", BT_KEY, 255 },
864 { 54,158,171, 83, 26, 52, 25, 51, 55,"Energy->Shield", BT_KEY, 255 },
865 { 55,158,171,112, 26, 53, 0, 54, 0,"Energy->Shield", BT_KEY, 255 },
867 kc_item kc_joystick[NUM_OTHER_CONTROLS] = {
868 { 0, 25, 46, 85, 28, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
869 { 1, 25, 54, 85, 28, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
870 { 2, 25, 85, 85, 28, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
871 { 3, 25, 93, 85, 28, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
872 { 4, 25, 62, 85, 28, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
873 { 5,180, 46, 79, 28, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
874 { 6,180, 54, 79, 28, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
875 { 7,180, 62, 79, 28, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
876 { 8,180, 70, 79, 28, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
877 { 9,180, 78, 79, 28, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
878 { 10,180, 90, 79, 28, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
879 { 11,180, 98, 79, 28, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
880 { 12,180,106, 79, 28, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
881 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
882 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
883 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
884 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
885 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
886 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
887 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
888 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
889 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
890 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
891 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
892 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
893 { 25, 25,109, 85, 28, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
894 { 26, 25, 70, 85, 28, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
895 { 27, 25,117, 85, 28, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
896 { 28,180,114, 79, 28, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
897 { 29,180,122, 79, 28, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
898 { 30, 25,125, 85, 28, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
900 kc_item kc_superjoy[NUM_OTHER_CONTROLS] = {
901 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
902 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
903 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
904 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
905 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
906 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
907 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
908 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
909 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
910 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
911 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
912 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
913 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
914 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
915 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
916 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
917 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
918 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
919 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
920 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
921 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
922 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
923 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
924 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
925 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
926 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
927 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
928 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
929 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
930 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
931 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
934 kc_item kc_mouse[NUM_OTHER_CONTROLS] = {
935 { 0, 25, 46, 85, 26, 28, 1, 28, 5,"Fire primary", BT_MOUSE_BUTTON, 255 },
936 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_MOUSE_BUTTON, 255 },
937 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_MOUSE_BUTTON, 255 },
938 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_MOUSE_BUTTON, 255 },
939 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_MOUSE_BUTTON, 255 },
940 { 5,180, 46, 59, 26, 24, 6, 0, 1,"Slide on", BT_MOUSE_BUTTON, 255 },
941 { 6,180, 54, 59, 26, 5, 7, 1, 4,"Slide left", BT_MOUSE_BUTTON, 255 },
942 { 7,180, 62, 59, 26, 6, 8, 4, 26,"Slide right", BT_MOUSE_BUTTON, 255 },
943 { 8,180, 70, 59, 26, 7, 9, 26, 9,"Slide up", BT_MOUSE_BUTTON, 255 },
944 { 9,180, 78, 59, 26, 8, 10, 8, 2,"Slide down", BT_MOUSE_BUTTON, 255 },
945 { 10,180, 90, 59, 26, 9, 11, 2, 3,"Bank on", BT_MOUSE_BUTTON, 255 },
946 { 11,180, 98, 59, 26, 10, 12, 3, 12,"Bank left", BT_MOUSE_BUTTON, 255 },
947 { 12,180,106, 59, 26, 11, 28, 11, 25,"Bank right", BT_MOUSE_BUTTON, 255 },
948 { 13,103,138, 58, 26, 27, 15, 27, 14,"Pitch U/D", BT_MOUSE_AXIS, 255 },
949 { 14,103,138,106, 8, 23, 16, 13, 15,"Pitch U/D", BT_INVERT, 255 },
950 { 15,103,146, 58, 26, 13, 17, 14, 16,"Turn L/R", BT_MOUSE_AXIS, 255 },
951 { 16,103,146,106, 8, 14, 18, 15, 17,"Turn L/R", BT_INVERT, 255 },
952 { 17,103,154, 58, 26, 15, 19, 16, 18,"Slide L/R", BT_MOUSE_AXIS, 255 },
953 { 18,103,154,106, 8, 16, 20, 17, 19,"Slide L/R", BT_INVERT, 255 },
954 { 19,103,162, 58, 26, 17, 21, 18, 20,"Slide U/D", BT_MOUSE_AXIS, 255 },
955 { 20,103,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
956 { 21,103,170, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_MOUSE_AXIS, 255 },
957 { 22,103,170,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
958 { 23,103,182, 58, 26, 21, 14, 22, 24,"throttle", BT_MOUSE_AXIS, 255 },
959 { 24,103,182,106, 8, 22, 5, 23, 28,"throttle", BT_INVERT, 255 },
960 { 25, 25,109, 85, 26, 3, 27, 12, 27,"REAR VIEW", BT_MOUSE_BUTTON, 255 },
961 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_MOUSE_BUTTON, 255 },
962 { 27, 25,117, 85, 26, 25, 13, 25, 13,"Afterburner", BT_MOUSE_BUTTON, 255 },
967 //added on 2/4/99 by Victor Rachels to add new keys system
968 ubyte default_kconfig_d2x_settings[MAX_D2X_CONTROLS] = {
969 0x2 ,0xff,0x3 ,0xff,0x4 ,0xff,0x5 ,0xff,0x6 ,0xff,0x7 ,0xff,0x8 ,0xff,0x9 ,
970 0xff,0xa ,0xff,0xb ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
971 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff };
972 //end this section addition - VR
974 void kc_drawitem( kc_item *item, int is_current );
975 void kc_change_key( kc_item * item );
976 void kc_change_joybutton( kc_item * item );
977 void kc_change_mousebutton( kc_item * item );
978 void kc_change_joyaxis( kc_item * item );
979 void kc_change_mouseaxis( kc_item * item );
980 void kc_change_invert( kc_item * item );
981 void kconfig_read_fcs( int raw_axis );
982 void kconfig_set_fcs_button( int btn, int button );
983 void kconfig_read_external_controls( void );
985 int kconfig_is_axes_used(int axis)
988 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
989 if (( kc_joystick[i].type == BT_JOY_AXIS ) && (kc_joystick[i].value == axis ))
995 #ifdef TABLE_CREATION
996 int find_item_at( kc_item * items, int nitems, int x, int y )
1000 for (i=0; i<nitems; i++ ) {
1001 if ( ((items[i].x+items[i].w1)==x) && (items[i].y==y))
1007 int find_next_item_up( kc_item * items, int nitems, int citem )
1012 x = items[citem].x+items[citem].w1;
1017 y = grd_curcanv->cv_bitmap.bm_h-1;
1020 x = grd_curcanv->cv_bitmap.bm_w-1;
1023 i = find_item_at( items, nitems, x, y );
1029 int find_next_item_down( kc_item * items, int nitems, int citem )
1034 x = items[citem].x+items[citem].w1;
1038 if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) {
1041 if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) {
1045 i = find_item_at( items, nitems, x, y );
1051 int find_next_item_right( kc_item * items, int nitems, int citem )
1056 x = items[citem].x+items[citem].w1;
1060 if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) {
1063 if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) {
1067 i = find_item_at( items, nitems, x, y );
1073 int find_next_item_left( kc_item * items, int nitems, int citem )
1078 x = items[citem].x+items[citem].w1;
1083 x = grd_curcanv->cv_bitmap.bm_w-1;
1086 y = grd_curcanv->cv_bitmap.bm_h-1;
1089 i = find_item_at( items, nitems, x, y );
1096 #if defined(MACINTOSH) || defined(WINDOWS)
1097 int get_item_height(kc_item *item)
1102 if (item->value==255) {
1103 sprintf( btext, "" );
1105 switch( item->type ) {
1107 strncpy( btext, key_text[item->value], 10 ); break;
1108 case BT_MOUSE_BUTTON:
1110 strncpy( btext, Text_string[mousebutton_text[item->value]], 10); break;
1112 strncpy( btext, mousebutton_text[item->value], 10 ); break;
1115 strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break;
1117 if ( joybutton_text[item->value] !=-1 )
1118 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1120 sprintf( btext, "BTN%d", item->value );
1123 strncpy( btext, Text_string[joyaxis_text[item->value]], 10 ); break;
1125 strncpy( btext, Text_string[invert_text[item->value]], 10 ); break;
1128 gr_get_string_size(btext, &w, &h, &aw );
1134 void kconfig_sub(kc_item * items,int nitems, char * title)
1137 dd_grs_canvas * save_canvas,
1138 grs_canvas * save_canvas
1140 grs_font * save_font;
1141 int old_keyd_repeat;
1142 #if defined(MACINTOSH) || defined(WINDOWS)
1143 int mouse_state, omouse_state, mx, my, x1, x2, y1, y2;
1144 int close_x, close_y, close_size;
1147 int i,k,ocitem,citem;
1148 int time_stopped = 0;
1149 WIN(char *old_bg_pcx);
1151 WIN(old_bg_pcx = _SCRContext.bkg_filename);
1152 WIN(DEFINE_SCREEN(NULL));
1157 if (!((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence)) )
1163 // if (Config_control_type == CONTROL_WINJOYSTICK) {
1165 // joydefsw_win_joyselect(title2); title = title2,
1167 // ); // Get Samir...
1171 save_canvas = dd_grd_curcanv,
1172 save_canvas = grd_curcanv
1177 dd_gr_set_current_canvas(NULL),
1178 gr_set_current_canvas(NULL)
1180 save_font = grd_curcanv->cv_font;
1185 game_flush_inputs();
1186 old_keyd_repeat = keyd_repeat;
1189 //gr_clear_canvas( BM_XRGB(0,0,0) );
1191 nm_draw_background(0, 0, grd_curcanv->cv_bitmap.bm_w - 1, grd_curcanv->cv_bitmap.bm_h - 1);
1192 gr_palette_load (gr_palette);
1194 grd_curcanv->cv_font = MEDIUM3_FONT;
1196 WIN(DDGRLOCK(dd_grd_curcanv));
1199 p = strchr( title, '\n' );
1201 gr_string( 0x8000, LHY(8), title );
1206 // if ( items == kc_keyboard ) {
1207 // gr_string( 0x8000, 8, "Keyboard" );
1208 // } else if ( items == kc_joystick ) {
1209 // gr_string( 0x8000, 8, "Joysticks" );
1210 // } else if ( items == kc_mouse ) {
1211 // gr_string( 0x8000, 8, "Mouse" );
1214 #if defined(MACINTOSH) || defined(WINDOWS)
1215 close_x = close_y = 15;
1217 gr_setcolor( BM_XRGB(0, 0, 0) );
1218 gr_rect(close_x, close_y, close_x + close_size, close_y + close_size);
1219 gr_setcolor( BM_XRGB(21, 21, 21) );
1220 gr_rect( close_x + 2, close_y + 2, close_x + close_size - 2, close_y + close_size -2 );
1223 grd_curcanv->cv_font = GAME_FONT;
1224 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1227 gr_string( 0x8000, LHY(20), TXT_KCONFIG_STRING_1 );
1229 gr_string( 0x8000, LHY(20), "Enter changes, ctrl-d deletes, ctrl-r resets defaults, ESC exits");
1231 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1232 if ( items == kc_keyboard ) {
1233 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1234 gr_setcolor( BM_XRGB(31,27,6) );
1236 gr_scanline( LHX(98), LHX(106), LHY(42) );
1237 gr_scanline( LHX(120), LHX(128), LHY(42) );
1238 gr_pixel( LHX(98), LHY(43) );
1239 gr_pixel( LHX(98), LHY(44) );
1240 gr_pixel( LHX(128), LHY(43) );
1241 gr_pixel( LHX(128), LHY(44) );
1243 gr_string( LHX(109), LHY(40), "OR" );
1245 gr_scanline( LHX(253), LHX(261), LHY(42) );
1246 gr_scanline( LHX(274), LHX(283), LHY(42) );
1247 gr_pixel( LHX(253), LHY(43) );
1248 gr_pixel( LHX(253), LHY(44) );
1249 gr_pixel( LHX(283), LHY(43) );
1250 gr_pixel( LHX(283), LHY(44) );
1252 gr_string( LHX(264), LHY(40), "OR" );
1254 } if ( items == kc_joystick ) {
1255 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1256 gr_setcolor( BM_XRGB(31,27,6) );
1257 gr_scanline( LHX(18), LHX(135), LHY(37) );
1258 gr_scanline( LHX(181), LHX(294), LHY(37) );
1259 gr_scanline( LHX(18), LHX(144), LHY(119+18) );
1260 gr_scanline( LHX(174), LHX(294), LHY(119+18) );
1261 gr_string( 0x8000, LHY(35), TXT_BUTTONS );
1262 gr_string( 0x8000,LHY(117+18), TXT_AXES );
1263 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1264 gr_string( LHX(81), LHY(137+8), TXT_AXIS );
1265 gr_string( LHX(111), LHY(137+8), TXT_INVERT );
1266 gr_string( LHX(222), LHY(137+8), TXT_AXIS );
1267 gr_string( LHX(252), LHY(137+8), TXT_INVERT );
1268 } else if ( items == kc_mouse ) {
1269 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1270 gr_setcolor( BM_XRGB(31,27,6) );
1271 gr_scanline( LHX(18), LHX(135), LHY(37) );
1272 gr_scanline( LHX(181), LHX(294), LHY(37) );
1273 gr_scanline( LHX(18), LHX(144), LHY(119+5) );
1274 gr_scanline( LHX(174), LHX(294), LHY(119+5) );
1275 gr_string( 0x8000, LHY(35), TXT_BUTTONS );
1276 gr_string( 0x8000,LHY(117+5), TXT_AXES );
1277 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1278 gr_string( LHX(169), LHY(129), TXT_AXIS );
1279 gr_string( LHX(199), LHY(129), TXT_INVERT );
1281 else if ( items == kc_d2x )
1283 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1284 gr_setcolor( BM_XRGB(31,27,6) );
1286 gr_string(LHX( 94), LHY(40), "KB");
1287 gr_string(LHX(121), LHY(40), "JOY");
1290 WIN(DDGRUNLOCK(dd_grd_curcanv));
1292 for (i=0; i<nitems; i++ ) {
1293 kc_drawitem( &items[i], 0 );
1297 kc_drawitem( &items[citem], 1 );
1302 #if defined(MACINTOSH) || defined(WINDOWS)
1303 mouse_state = omouse_state = 0;
1307 // Windows addendum to allow for kconfig input.
1312 DoMessageStuff(&msg);
1314 if (_RedrawScreen) {
1315 _RedrawScreen = FALSE;
1317 dd_gr_set_current_canvas(NULL);
1327 //see if redbook song needs to be restarted
1328 songs_check_redbook_repeat();
1332 #if defined(MACINTOSH) || defined(WINDOWS)
1333 omouse_state = mouse_state;
1334 mouse_state = mouse_button_state(0);
1337 if ( !time_stopped ) {
1339 if (multi_menu_poll() == -1)
1348 MAC(case KEY_COMMAND+KEY_SHIFTED+KEY_3:)
1349 case KEY_PRINT_SCREEN:
1350 save_screen_shot(0);
1352 case KEY_CTRLED+KEY_D:
1353 items[citem].value = 255;
1354 kc_drawitem( &items[citem], 1 );
1356 case KEY_CTRLED+KEY_R:
1357 if ( items==kc_keyboard ) {
1358 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1359 items[i].value=default_kconfig_settings[0][i];
1360 kc_drawitem( &items[i], 0 );
1362 } else if ( items==kc_d2x ) {
1363 for(i=0;i<NUM_D2X_CONTROLS;i++)
1365 items[i].value=default_kconfig_d2x_settings[i];
1366 kc_drawitem( &items[i], 0 );
1370 // hack for firebire and mousestick default controls since I made
1371 // them the same control type -- dumb dumb dumb
1372 if (joy_have_firebird())
1373 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1374 items[i].value = default_firebird_settings[i];
1375 kc_drawitem( &items[i], 0 );
1377 else if (joy_have_mousestick())
1378 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1379 items[i].value = default_mousestick_settings[i];
1380 kc_drawitem( &items[i], 0 );
1383 #endif // note link to above else
1384 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1385 items[i].value = default_kconfig_settings[Config_control_type][i];
1386 kc_drawitem( &items[i], 0 );
1389 kc_drawitem( &items[citem], 1 );
1392 items[citem].value=255;
1393 kc_drawitem( &items[citem], 1 );
1397 #ifdef TABLE_CREATION
1398 if (items[citem].u==-1) items[citem].u=find_next_item_up( items,nitems, citem);
1400 citem = items[citem].u;
1405 #ifdef TABLE_CREATION
1406 if (items[citem].d==-1) items[citem].d=find_next_item_down( items,nitems, citem);
1408 citem = items[citem].d;
1412 #ifdef TABLE_CREATION
1413 if (items[citem].l==-1) items[citem].l=find_next_item_left( items,nitems, citem);
1415 citem = items[citem].l;
1419 #ifdef TABLE_CREATION
1420 if (items[citem].r==-1) items[citem].r=find_next_item_right( items,nitems, citem);
1422 citem = items[citem].r;
1426 switch( items[citem].type ) {
1427 case BT_KEY: kc_change_key( &items[citem] ); break;
1428 case BT_MOUSE_BUTTON: kc_change_mousebutton( &items[citem] ); break;
1429 case BT_MOUSE_AXIS: kc_change_mouseaxis( &items[citem] ); break;
1430 case BT_JOY_BUTTON: kc_change_joybutton( &items[citem] ); break;
1431 case BT_JOY_AXIS: kc_change_joyaxis( &items[citem] ); break;
1432 case BT_INVERT: kc_change_invert( &items[citem] ); break;
1437 grd_curcanv->cv_font = save_font;
1439 WIN(DEFINE_SCREEN(old_bg_pcx));
1442 dd_gr_set_current_canvas(save_canvas),
1443 gr_set_current_canvas( save_canvas )
1445 keyd_repeat = old_keyd_repeat;
1446 game_flush_inputs();
1447 WIN( HideCursorW());
1448 MAC( hide_cursor(); )
1452 #ifdef TABLE_CREATION
1453 case KEY_DEBUGGED+KEY_F12: {
1455 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1456 kc_keyboard[i].u = find_next_item_up( kc_keyboard,NUM_KEY_CONTROLS, i);
1457 kc_keyboard[i].d = find_next_item_down( kc_keyboard,NUM_KEY_CONTROLS, i);
1458 kc_keyboard[i].l = find_next_item_left( kc_keyboard,NUM_KEY_CONTROLS, i);
1459 kc_keyboard[i].r = find_next_item_right( kc_keyboard,NUM_KEY_CONTROLS, i);
1461 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1462 kc_joystick[i].u = find_next_item_up( kc_joystick,NUM_OTHER_CONTROLS, i);
1463 kc_joystick[i].d = find_next_item_down( kc_joystick,NUM_OTHER_CONTROLS, i);
1464 kc_joystick[i].l = find_next_item_left( kc_joystick,NUM_OTHER_CONTROLS, i);
1465 kc_joystick[i].r = find_next_item_right( kc_joystick,NUM_OTHER_CONTROLS, i);
1467 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1468 kc_mouse[i].u = find_next_item_up( kc_mouse,NUM_OTHER_CONTROLS, i);
1469 kc_mouse[i].d = find_next_item_down( kc_mouse,NUM_OTHER_CONTROLS, i);
1470 kc_mouse[i].l = find_next_item_left( kc_mouse,NUM_OTHER_CONTROLS, i);
1471 kc_mouse[i].r = find_next_item_right( kc_mouse,NUM_OTHER_CONTROLS, i);
1473 fp = fopen( "kconfig.cod", "wt" );
1475 fprintf( fp, "ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {\n" );
1476 for (i=0; i<CONTROL_MAX_TYPES; i++ ) {
1478 fprintf( fp, "{0x%x", kconfig_settings[i][0] );
1479 for (j=1; j<MAX_CONTROLS; j++ )
1480 fprintf( fp, ",0x%x", kconfig_settings[i][j] );
1481 fprintf( fp, "},\n" );
1483 fprintf( fp, "};\n" );
1485 fprintf( fp, "\nkc_item kc_keyboard[NUM_KEY_CONTROLS] = {\n" );
1486 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1487 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1488 kc_keyboard[i].id, kc_keyboard[i].x, kc_keyboard[i].y, kc_keyboard[i].w1, kc_keyboard[i].w2,
1489 kc_keyboard[i].u, kc_keyboard[i].d, kc_keyboard[i].l, kc_keyboard[i].r,
1490 34, kc_keyboard[i].text, 34, btype_text[kc_keyboard[i].type] );
1492 fprintf( fp, "};" );
1494 fprintf( fp, "\nkc_item kc_joystick[NUM_OTHER_CONTROLS] = {\n" );
1495 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1496 if (kc_joystick[i].type == BT_JOY_BUTTON)
1497 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1498 kc_joystick[i].id, kc_joystick[i].x, kc_joystick[i].y, kc_joystick[i].w1, kc_joystick[i].w2,
1499 kc_joystick[i].u, kc_joystick[i].d, kc_joystick[i].l, kc_joystick[i].r,
1500 34, kc_joystick[i].text, 34, btype_text[kc_joystick[i].type] );
1502 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1503 kc_joystick[i].id, kc_joystick[i].x, kc_joystick[i].y, kc_joystick[i].w1, kc_joystick[i].w2,
1504 kc_joystick[i].u, kc_joystick[i].d, kc_joystick[i].l, kc_joystick[i].r,
1505 34, kc_joystick[i].text, 34, btype_text[kc_joystick[i].type] );
1507 fprintf( fp, "};" );
1509 fprintf( fp, "\nkc_item kc_mouse[NUM_OTHER_CONTROLS] = {\n" );
1510 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1511 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1512 kc_mouse[i].id, kc_mouse[i].x, kc_mouse[i].y, kc_mouse[i].w1, kc_mouse[i].w2,
1513 kc_mouse[i].u, kc_mouse[i].d, kc_mouse[i].l, kc_mouse[i].r,
1514 34, kc_mouse[i].text, 34, btype_text[kc_mouse[i].type] );
1516 fprintf( fp, "};" );
1525 #if defined (MACINTOSH) || defined(WINDOWS)
1526 if ( (mouse_state && !omouse_state) || (mouse_state && omouse_state) ) {
1529 mouse_get_pos(&mx, &my);
1530 for (i=0; i<nitems; i++ ) {
1531 item_height = get_item_height( &items[i] );
1532 x1 = grd_curcanv->cv_bitmap.bm_x + LHX(items[i].x) + LHX(items[i].w1);
1533 x2 = x1 + LHX(items[i].w2);
1534 y1 = grd_curcanv->cv_bitmap.bm_y + LHY(items[i].y);
1535 y2 = y1 + LHX(item_height);
1536 if (((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2))) {
1542 else if ( !mouse_state && omouse_state ) {
1545 mouse_get_pos(&mx, &my);
1546 item_height = get_item_height( &items[citem] );
1547 x1 = grd_curcanv->cv_bitmap.bm_x + LHX(items[citem].x) + LHX(items[citem].w1);
1548 x2 = x1 + LHX(items[citem].w2);
1549 y1 = grd_curcanv->cv_bitmap.bm_y + LHY(items[citem].y);
1550 y2 = y1 + LHY(item_height);
1551 if (((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2))) {
1554 switch( items[citem].type ) {
1555 case BT_KEY: kc_change_key( &items[citem] ); break;
1556 case BT_MOUSE_BUTTON: kc_change_mousebutton( &items[citem] ); break;
1557 case BT_MOUSE_AXIS: kc_change_mouseaxis( &items[citem] ); break;
1558 case BT_JOY_BUTTON: kc_change_joybutton( &items[citem] ); break;
1559 case BT_JOY_AXIS: kc_change_joyaxis( &items[citem] ); break;
1560 case BT_INVERT: kc_change_invert( &items[citem] ); break;
1565 x1 = grd_curcanv->cv_bitmap.bm_x + close_x + 2;
1566 x2 = x1 + close_size - 2;
1567 y1 = grd_curcanv->cv_bitmap.bm_y + close_y + 2;
1568 y2 = y1 + close_size - 2;
1569 if ( ((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2)) ) {
1570 grd_curcanv->cv_font = save_font;
1571 WINDOS(dd_gr_set_current_canvas( save_canvas ),
1572 gr_set_current_canvas( save_canvas ));
1573 keyd_repeat = old_keyd_repeat;
1574 game_flush_inputs();
1584 #endif // MACINTOSH WINDOWS
1586 if (ocitem!=citem) {
1589 kc_drawitem( &items[ocitem], 0 );
1590 kc_drawitem( &items[citem], 1 );
1598 void kc_drawitem( kc_item *item, int is_current )
1602 // PA_DFX (pa_set_frontbuffer_current());
1603 WIN(DDGRLOCK(dd_grd_curcanv));
1606 gr_set_fontcolor( BM_XRGB(20,20,29), -1 );
1608 gr_set_fontcolor( BM_XRGB(15,15,24), -1 );
1609 gr_string( LHX(item->x), LHY(item->y), item->text );
1610 WIN(DDGRUNLOCK(dd_grd_curcanv));
1612 if (item->value==255) {
1613 strcpy( btext, "" );
1615 switch( item->type ) {
1617 strncpy( btext, key_text[item->value], 10 ); break;
1618 case BT_MOUSE_BUTTON:
1620 //strncpy( btext, Text_string[mousebutton_text[item->value]], 10 ); break;
1621 strncpy( btext, (item->value <= 3)?Text_string[mousebutton_text[item->value]]:mousebutton_textra[item->value-3], 10 ); break;
1623 strncpy( btext, mousebutton_text[item->value], 10 ); break;
1626 strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break;
1630 if (joybutton_text[item->value] != -1)
1631 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1633 sprintf( btext, "BTN%2d", item->value+1 );
1635 if ( joybutton_text[item->value] !=-1 )
1636 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1638 sprintf( btext, "BTN%d", item->value );
1641 strncpy( btext, joy_btn_name( item->value ), 10);
1643 sprintf( btext, "BTN%d", item->value );
1647 strncpy( btext, Text_string[joyaxis_text[item->value]], 10 ); break;
1649 strncpy( btext, Text_string[invert_text[item->value]], 10 ); break;
1653 WIN(DDGRLOCK(dd_grd_curcanv));
1654 gr_get_string_size(btext, &w, &h, &aw );
1657 gr_setcolor( BM_XRGB(21,0,24) );
1659 gr_setcolor( BM_XRGB(16,0,19) );
1660 gr_urect( LHX(item->w1+item->x), LHY(item->y-1), LHX(item->w1+item->x+item->w2), LHY(item->y)+h );
1662 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1664 x = LHX(item->w1+item->x)+((LHX(item->w2)-w)/2);
1666 gr_string( x, LHY(item->y), btext );
1667 // PA_DFX (pa_set_backbuffer_current());
1669 WIN(DDGRUNLOCK(dd_grd_curcanv));
1674 static int looper=0;
1676 void kc_drawquestion( kc_item *item )
1680 WIN(DDGRLOCK(dd_grd_curcanv));
1681 // PA_DFX (pa_set_frontbuffer_current());
1683 gr_get_string_size("?", &w, &h, &aw );
1685 c = BM_XRGB(21,0,24);
1687 //@@gr_setcolor( gr_fade_table[fades[looper]*256+c] );
1688 gr_setcolor(BM_XRGB(21*fades[looper]/31,0,24*fades[looper]/31));
1690 if (looper>63) looper=0;
1692 gr_urect( LHX(item->w1+item->x), LHY(item->y-1), LHX(item->w1+item->x+item->w2), LHY(item->y)+h );
1694 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1696 x = LHX(item->w1+item->x)+((LHX(item->w2)-w)/2);
1698 gr_string( x, LHY(item->y), "?" );
1699 // PA_DFX (pa_set_backbuffer_current());
1700 WIN(DDGRUNLOCK(dd_grd_curcanv));
1704 void kc_change_key( kc_item * item )
1709 WIN(DDGRLOCK(dd_grd_curcanv));
1710 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1712 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_KEY );
1713 WIN(DDGRUNLOCK(dd_grd_curcanv));
1715 game_flush_inputs();
1719 while( (k!=KEY_ESC) && (keycode==255) )
1725 DoMessageStuff(&msg);
1732 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1735 // if ( Game_mode & GM_MULTI )
1736 // GameLoop( 0, 0 ); // Continue
1738 timer_delay(f0_1/10);
1739 kc_drawquestion( item );
1741 for (i=0; i<256; i++ ) {
1742 if (keyd_pressed[i] && (strlen(key_text[i])>0)) {
1744 for (n=0; n<sizeof(system_keys); n++ )
1745 if ( system_keys[n] == i )
1754 for (i=0; i<Num_items; i++ ) {
1755 n = item - All_items;
1756 if ( (i!=n) && (All_items[i].type==BT_KEY) && (All_items[i].value==keycode) ) {
1757 All_items[i].value = 255;
1758 kc_drawitem( &All_items[i], 0 );
1761 item->value = keycode;
1763 kc_drawitem( item, 1 );
1765 WIN(DDGRLOCK(dd_grd_curcanv));
1766 gr_set_fontcolor( BM_XRGB(28,28,28), BM_XRGB(0,0,0) );
1767 WIN(DDGRUNLOCK(dd_grd_curcanv));
1769 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1771 game_flush_inputs();
1775 void kc_change_joybutton( kc_item * item )
1780 WIN(DDGRLOCK(dd_grd_curcanv));
1781 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1783 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_JBUTTON );
1784 WIN(DDGRUNLOCK(dd_grd_curcanv));
1786 game_flush_inputs();
1790 while( (k!=KEY_ESC) && (code==255))
1795 DoMessageStuff(&msg);
1801 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1804 // if ( Game_mode & GM_MULTI )
1805 // GameLoop( 0, 0 ); // Continue
1807 timer_delay(f0_1/10);
1809 if (k == KEY_PRINT_SCREEN)
1810 save_screen_shot(0);
1812 kc_drawquestion( item );
1814 WIN(code = joydefsw_do_button());
1817 code = joy_do_buttons();
1820 #if !defined(WINDOWS) && !defined(MACINTOSH)
1821 if (Config_control_type==CONTROL_THRUSTMASTER_FCS) {
1823 joystick_read_raw_axis( JOY_ALL_AXIS, axis );
1824 kconfig_read_fcs( axis[3] );
1825 if ( joy_get_button_state(7) ) code = 7;
1826 if ( joy_get_button_state(11) ) code = 11;
1827 if ( joy_get_button_state(15) ) code = 15;
1828 if ( joy_get_button_state(19) ) code = 19;
1829 for (i=0; i<4; i++ ) {
1830 if ( joy_get_button_state(i) )
1833 } else if (Config_control_type==CONTROL_FLIGHTSTICK_PRO) {
1834 for (i=4; i<20; i++ ) {
1835 if ( joy_get_button_state(i) ) {
1837 mprintf(( 0, "JB: %d\n", code ));
1841 for (i=0; i<MAX_BUTTONS; i++ ) {
1842 if ( joy_get_button_state(i) )
1849 for (i=0; i<Num_items; i++ ) {
1850 n = item - All_items;
1851 if ( (i!=n) && (All_items[i].type==BT_JOY_BUTTON) && (All_items[i].value==code) ) {
1852 All_items[i].value = 255;
1853 kc_drawitem( &All_items[i], 0 );
1858 kc_drawitem( item, 1 );
1859 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1860 game_flush_inputs();
1863 void kc_change_mousebutton( kc_item * item )
1868 WIN(DDGRLOCK(dd_grd_curcanv));
1869 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1871 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_MBUTTON );
1872 WIN(DDGRUNLOCK(dd_grd_curcanv));
1875 game_flush_inputs();
1879 while( (k!=KEY_ESC) && (code==255))
1884 DoMessageStuff(&msg);
1890 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1893 // if ( Game_mode & GM_MULTI )
1894 // GameLoop( 0, 0 ); // Continue
1896 timer_delay(f0_1/10);
1898 if (k == KEY_PRINT_SCREEN)
1899 save_screen_shot(0);
1901 kc_drawquestion( item );
1903 b = mouse_get_btns();
1904 for (i = 0; i < 16; i++ ) {
1910 for (i=0; i<Num_items; i++ ) {
1911 n = item - All_items;
1912 if ( (i!=n) && (All_items[i].type==BT_MOUSE_BUTTON) && (All_items[i].value==code) ) {
1913 All_items[i].value = 255;
1914 kc_drawitem( &All_items[i], 0 );
1919 kc_drawitem( item, 1 );
1920 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1921 game_flush_inputs();
1925 void kc_change_joyaxis( kc_item * item )
1929 int old_axis[MAX_AXES];
1931 int axis[JOY_NUM_AXES];
1932 int old_axis[JOY_NUM_AXES];
1941 WIN(DDGRLOCK(dd_grd_curcanv));
1942 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1944 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_JOY_AXIS );
1945 WIN(DDGRUNLOCK(dd_grd_curcanv));
1947 game_flush_inputs();
1952 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, old_axis ),
1953 joystick_read_raw_axis( JOY_ALL_AXIS, old_axis )
1956 while( (k!=KEY_ESC) && (code==255))
1961 DoMessageStuff(&msg);
1967 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1970 // if ( Game_mode & GM_MULTI )
1971 // GameLoop( 0, 0 ); // Continue
1973 timer_delay(f0_1/10);
1975 if (k == KEY_PRINT_SCREEN)
1976 save_screen_shot(0);
1978 kc_drawquestion( item );
1981 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, axis ),
1982 joystick_read_raw_axis( JOY_ALL_AXIS, axis )
1985 for (i=0; i<numaxis; i++ ) {
1986 #if defined (MACINTOSH)
1987 if ( abs(axis[i]-old_axis[i])>100 ) {
1988 #elif defined(WINDOWS)
1989 if ( abs(axis[i]-old_axis[i])>1024 ) {
1991 if ( abs(axis[i]-old_axis[i])>200 ) {
1994 con_printf(CON_DEBUG, "Axis Movement detected: Axis %i\n", i);
1996 //old_axis[i] = axis[i];
1998 for (i=0; i<Num_items; i++ )
2000 n = item - All_items;
2001 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) )
2007 for (i=0; i<Num_items; i++ ) {
2008 n = item - All_items;
2009 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) ) {
2010 All_items[i].value = 255;
2011 kc_drawitem( &All_items[i], 0 );
2017 kc_drawitem( item, 1 );
2018 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
2019 game_flush_inputs();
2023 void kc_change_mouseaxis( kc_item * item )
2032 WIN(DDGRLOCK(dd_grd_curcanv));
2033 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
2035 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_MSE_AXIS );
2036 WIN(DDGRUNLOCK(dd_grd_curcanv));
2038 game_flush_inputs();
2042 mouse_get_delta( &dx, &dy );
2044 while( (k!=KEY_ESC) && (code==255))
2049 DoMessageStuff(&msg);
2055 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
2058 // if ( Game_mode & GM_MULTI )
2059 // GameLoop( 0, 0 ); // Continue
2061 timer_delay(f0_1/10);
2063 if (k == KEY_PRINT_SCREEN)
2064 save_screen_shot(0);
2066 kc_drawquestion( item );
2069 mouse_get_delta_z( &dx, &dy, &dz );
2071 mouse_get_delta( &dx, &dy );
2073 if ( abs(dx)>20 ) code = 0;
2074 if ( abs(dy)>20 ) code = 1;
2076 if ( abs(dz)>20 ) code = 2;
2080 for (i=0; i<Num_items; i++ ) {
2081 n = item - All_items;
2082 if ( (i!=n) && (All_items[i].type==BT_MOUSE_AXIS) && (All_items[i].value==code) ) {
2083 All_items[i].value = 255;
2084 kc_drawitem( &All_items[i], 0 );
2089 kc_drawitem( item, 1 );
2090 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
2091 game_flush_inputs();
2096 void kc_change_invert( kc_item * item )
2098 game_flush_inputs();
2105 kc_drawitem( item, 1 );
2109 #include "screens.h"
2111 void kconfig(int n, char * title)
2114 grs_bitmap *save_bm;
2116 set_screen_mode( SCREEN_MENU );
2121 WIN(mouse_set_mode(0));
2122 WIN(dd_gr_set_current_canvas(NULL));
2124 #if defined(POLY_ACC)
2125 save_bm = gr_create_bitmap2( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h, grd_curcanv->cv_bitmap.bm_type, NULL );
2127 save_bm = gr_create_bitmap( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h );
2129 Assert( save_bm != NULL );
2131 WIN(DDGRLOCK(dd_grd_curcanv));
2132 gr_bm_bitblt(grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_w,
2133 0, 0, 0, 0, &grd_curcanv->cv_bitmap, save_bm );
2134 WIN(DDGRUNLOCK(dd_grd_curcanv));
2137 case 0:kconfig_sub( kc_keyboard, NUM_KEY_CONTROLS, title );break;
2138 case 1:kconfig_sub( kc_joystick, NUM_OTHER_CONTROLS, title );break;
2139 case 2:kconfig_sub( kc_mouse, NUM_OTHER_CONTROLS, title ); break;
2140 case 3:kconfig_sub( kc_superjoy, NUM_OTHER_CONTROLS, title); break;
2141 //added on 2/4/99 by Victor Rachels for new keys menu
2142 case 4:kconfig_sub( kc_d2x, NUM_D2X_CONTROLS, title ); break;
2143 //end this section addition - VR
2150 WIN(mouse_set_mode(1));
2151 WIN(dd_gr_set_current_canvas(NULL));
2152 WIN(DDGRLOCK(dd_grd_curcanv));
2153 gr_bitmap(0, 0, save_bm);
2154 WIN(DDGRUNLOCK(dd_grd_curcanv));
2155 gr_free_bitmap(save_bm);
2157 reset_cockpit(); //force cockpit redraw next time
2159 // Update save values...
2161 for (i=0; i<NUM_KEY_CONTROLS; i++ )
2162 kconfig_settings[0][i] = kc_keyboard[i].value;
2164 if ( (Config_control_type>0) && (Config_control_type<5)) {
2165 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
2166 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
2167 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
2168 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
2169 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
2171 else if (Config_control_type == CONTROL_WINJOYSTICK) {
2172 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
2173 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
2176 for (i=0; i<NUM_D2X_CONTROLS; i++)
2177 kconfig_d2x_settings[i] = kc_d2x[i].value;
2181 void kconfig_read_fcs( int raw_axis )
2183 int raw_button, button, axis_min[4], axis_center[4], axis_max[4];
2185 if (Config_control_type!=CONTROL_THRUSTMASTER_FCS) return;
2187 joy_get_cal_vals(axis_min, axis_center, axis_max);
2189 if ( axis_max[3] > 1 )
2190 raw_button = (raw_axis*100)/axis_max[3];
2194 if ( raw_button > 88 )
2196 else if ( raw_button > 63 )
2198 else if ( raw_button > 39 )
2200 else if ( raw_button > 15 )
2205 kconfig_set_fcs_button( 19, button );
2206 kconfig_set_fcs_button( 15, button );
2207 kconfig_set_fcs_button( 11, button );
2208 kconfig_set_fcs_button( 7, button );
2212 void kconfig_set_fcs_button( int btn, int button )
2214 int state,time_down,upcount,downcount;
2215 state = time_down = upcount = downcount = 0;
2217 if ( joy_get_button_state(btn) ) {
2218 if ( btn==button ) {
2220 time_down = FrameTime;
2225 if ( btn==button ) {
2227 time_down = FrameTime;
2234 joy_set_btn_values( btn, state, time_down, downcount, upcount );
2240 fix Last_angles_p = 0;
2241 fix Last_angles_b = 0;
2242 fix Last_angles_h = 0;
2243 ubyte Last_angles_read = 0;
2245 extern int VR_sensitivity;
2247 int VR_sense_range[3] = { 25, 50, 75 };
2249 #if 0 //ndef MACINTOSH
2254 fix yaw, pitch, roll;
2257 //------ read vfx1 helmet --------
2258 if (vfx1_installed) {
2259 vfx_get_data(&yaw,&pitch,&roll,&buttons);
2260 } else if (iglasses_headset_installed) {
2261 iglasses_read_headset( &yaw, &pitch, &roll );
2262 } else if (Victor_headset_installed) {
2263 victor_read_headset_filtered( &yaw, &pitch, &roll );
2268 Use_player_head_angles = 0;
2269 if ( Last_angles_read ) {
2273 if ( (Last_angles_h < (F1_0/4) ) && (yaw > ((F1_0*3)/4) ) )
2275 else if ( (yaw < (F1_0/4) ) && (Last_angles_h > ((F1_0*3)/4) ) )
2278 Controls.pitch_time += fixmul((pitch- Last_angles_p)*VR_sense_range[VR_sensitivity],FrameTime);
2279 Controls.heading_time+= fixmul((yaw1 - Last_angles_h)*VR_sense_range[VR_sensitivity],FrameTime);
2280 Controls.bank_time += fixmul((roll - Last_angles_b)*VR_sense_range[VR_sensitivity],FrameTime);
2282 Last_angles_read = 1;
2283 Last_angles_p = pitch;
2284 Last_angles_h = yaw;
2285 Last_angles_b = roll;
2293 #define JOYSTICK_READ_TIME (F1_0/40) // Read joystick at 40 Hz.
2295 #define JOYSTICK_READ_TIME (F1_0/10) // Read joystick at 10 Hz.
2298 fix LastReadTime = 0;
2302 ubyte kc_use_external_control = 0;
2303 ubyte kc_enable_external_control = 0;
2304 ubyte kc_external_intno = 0;
2305 ext_control_info *kc_external_control = NULL;
2306 ubyte *kc_external_name = NULL;
2307 ubyte kc_external_version = 0;
2308 extern int Automap_active;
2310 void kconfig_init_external_controls(int intno, int address)
2313 kc_external_intno = intno;
2314 kc_external_control = (ext_control_info *)address;
2315 kc_use_external_control = 1;
2316 kc_enable_external_control = 1;
2318 i = FindArg ( "-xname" );
2320 kc_external_name = Args[i+1];
2322 kc_external_name = "External Controller";
2324 for (i=0;i<strlen (kc_external_name);i++)
2325 if (kc_external_name[i]=='_')
2326 kc_external_name[i]=' ';
2328 i = FindArg ( "-xver" );
2330 kc_external_version = atoi(Args[i+1]);
2332 printf( "%s int: 0x%x, data: 0x%p, ver:%d\n", kc_external_name, kc_external_intno, kc_external_control, kc_external_version );
2336 #if !defined(MACINTOSH)
2337 /*void kconfig_read_external_controls()
2341 if ( !kc_enable_external_control && !CybermouseActive)
2344 if ( kc_external_version == 0 )
2345 memset( kc_external_control, 0, sizeof(control_info) );
2346 else if ( kc_external_version > 0 ) {
2347 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 );
2348 if ( kc_external_version > 1 ) {
2349 // Write ship pos and angles to external controls...
2350 ubyte *temp_ptr = (ubyte *)kc_external_control;
2351 vms_vector *ship_pos;
2352 vms_matrix *ship_orient;
2353 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
2354 temp_ptr += sizeof(control_info)+sizeof(vms_angvec) + 64;
2355 ship_pos = (vms_vector *)temp_ptr;
2356 temp_ptr += sizeof(vms_vector);
2357 ship_orient = (vms_matrix *)temp_ptr;
2358 // Fill in ship postion...
2359 *ship_pos = Objects[Players[Player_num].objnum].pos;
2360 // Fill in ship orientation...
2361 *ship_orient = Objects[Players[Player_num].objnum].orient;
2365 if ( Automap_active ) // (If in automap...)
2366 kc_external_control->automap_state = 1;
2367 memset(&r,0,sizeof(r));
2371 if (!CybermouseActive)
2372 int386 ( kc_external_intno, &r, &r); // Read external info...
2374 // ReadOWL (kc_external_control);
2378 if ( Player_num > -1 ) {
2379 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
2380 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
2381 Auto_leveling_on = 0;
2383 if ( kc_external_version > 0 ) {
2384 vms_matrix tempm, ViewMatrix;
2385 vms_angvec * Kconfig_abs_movement;
2388 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
2390 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
2391 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
2392 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
2393 Objects[Players[Player_num].objnum].orient = ViewMatrix;
2395 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
2396 if (oem_message[0] != '\0' )
2397 HUD_init_message( oem_message );
2401 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
2402 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
2403 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
2404 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
2405 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
2406 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
2407 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
2408 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
2409 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
2410 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
2411 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
2412 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
2413 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
2414 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
2415 Controls.automap_down_count += kc_external_control->automap_down_count;
2416 Controls.automap_state |= kc_external_control->automap_state;
2421 void controls_read_all_win()
2424 int slide_on, bank_on;
2428 int raw_joy_axis[7];
2430 fix k0, k1, k2, k3, kp;
2431 fix k4, k5, k6, k7, kh;
2432 ubyte channel_masks;
2433 int use_mouse, use_joystick;
2436 if (Game_turbo_mode)
2440 fix temp = Controls.heading_time;
2441 fix temp1 = Controls.pitch_time;
2442 memset( &Controls, 0, sizeof(control_info) );
2443 Controls.heading_time = temp;
2444 Controls.pitch_time = temp1;
2449 ctime = timer_get_fixed_seconds();
2451 // DO JOYSTICK (X,Y,Z R,U,V)
2452 // ----------------------------------------------------------------------------
2453 if ( (LastReadTime + JOYSTICK_READ_TIME) > ctime ) {
2454 if ((ctime < 0) && (LastReadTime > 0))
2455 LastReadTime = ctime;
2457 } else if ((Config_control_type==CONTROL_WINJOYSTICK)) {
2458 LastReadTime = ctime;
2459 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, raw_joy_axis );
2461 for (i=0; i<7; i++ ) {
2462 if (channel_masks&(1<<i)) {
2463 int joy_null_value = 28;
2465 // DO POV if joystick has a hat.
2466 // --------------------------------------------------------------------
2468 joydefsw_do_winjoybutton(raw_joy_axis);
2472 // --------------------------------------------------------------------
2473 // mprintf((0, "(%d)=%d,", i, raw_joy_axis[i]));
2474 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2475 // mprintf((0, "%d ",raw_joy_axis[i]));
2476 // if (i%2) mprintf((0,"\n"));
2479 if (kc_superjoy[23].value==i) // If this is the throttle
2480 joy_null_value = 32; // Then use a larger dead-zone
2482 if (raw_joy_axis[i] > (joy_null_value-2))
2483 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
2484 else if (raw_joy_axis[i] < -(joy_null_value+2))
2485 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
2487 raw_joy_axis[i] = 0;
2488 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
2497 for (i=0; i<6; i++ )
2503 // ----------------------------------------------------------------------------
2504 if (Config_control_type==5) {
2505 mouse_get_delta( &dx, &dy );
2506 mouse_axis[0] = (dx*FrameTime)/35;
2507 mouse_axis[1] = (dy*FrameTime)/25;
2508 mouse_buttons = mouse_get_btns();
2509 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
2518 //------------- Read slide_on -------------
2521 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
2522 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
2524 if ((use_joystick)&&(kc_superjoy[5].value<255)) slide_on |= joy_get_button_state( kc_superjoy[5].value );
2526 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
2528 //------------- Read bank_on ---------------
2531 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
2532 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
2534 if ( (use_joystick)&&(kc_superjoy[10].value < 255 )) bank_on |= joy_get_button_state( kc_superjoy[10].value );
2536 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
2538 //------------ Read pitch_time -----------
2540 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2542 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
2543 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
2544 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
2545 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
2548 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
2549 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
2550 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
2551 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
2554 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2555 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
2556 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
2560 Controls.pitch_time = 0;
2562 if (Controls.pitch_time < 0)
2563 Controls.pitch_time = 0;
2565 if (Controls.pitch_time > 0)
2566 Controls.pitch_time = 0;
2567 Controls.pitch_time += kp;
2570 if ( (use_joystick)&&(kc_superjoy[13].value < 255 )) {
2571 if ( !kc_superjoy[14].value ) // If not inverted...
2572 Controls.pitch_time -= (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2574 Controls.pitch_time += (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2578 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
2579 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
2580 if ( !kc_mouse[14].value ) // If not inverted...
2581 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2583 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2586 Controls.pitch_time = 0;
2590 //----------- Read vertical_thrust_time -----------------
2593 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
2594 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
2595 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
2596 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
2599 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
2600 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
2601 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
2602 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
2605 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2606 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
2607 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
2611 if ((use_joystick)&&( kc_superjoy[13].value < 255 )) {
2612 if ( !kc_superjoy[14].value ) // If not inverted...
2613 Controls.vertical_thrust_time += joy_axis[kc_superjoy[13].value];
2615 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[13].value];
2619 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
2620 if ( !kc_mouse[14].value ) // If not inverted...
2621 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
2623 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
2628 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
2629 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
2630 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
2631 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
2634 if ((use_joystick)&&( kc_superjoy[19].value < 255 )) {
2635 if ( !kc_superjoy[20].value ) // If not inverted...
2636 Controls.vertical_thrust_time += joy_axis[kc_superjoy[19].value];
2638 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[19].value];
2641 // From joystick buttons
2642 if ( (use_joystick)&&(kc_superjoy[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_superjoy[8].value );
2643 if ( (use_joystick)&&(kc_superjoy[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_superjoy[9].value );
2645 // From mouse buttons
2646 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
2647 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
2650 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
2651 if ( !kc_mouse[20].value ) // If not inverted...
2652 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
2654 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
2658 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2659 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
2660 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
2663 //---------- Read heading_time -----------
2665 if (!slide_on && !bank_on) {
2666 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2668 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
2669 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
2670 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
2671 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
2674 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
2675 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
2676 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
2677 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
2680 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2681 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
2682 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
2686 Controls.heading_time = 0;
2688 if (Controls.heading_time < 0)
2689 Controls.heading_time = 0;
2691 if (Controls.heading_time > 0)
2692 Controls.heading_time = 0;
2693 Controls.heading_time += kh;
2696 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2697 if ( !kc_superjoy[16].value ) // If not inverted...
2698 Controls.heading_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2700 Controls.heading_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2704 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2705 if ( !kc_mouse[16].value ) // If not inverted...
2706 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2708 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2711 Controls.heading_time = 0;
2714 //----------- Read sideways_thrust_time -----------------
2717 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2718 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2719 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2720 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2723 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
2724 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
2725 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
2726 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
2729 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2730 if ( !kc_superjoy[16].value ) // If not inverted...
2731 Controls.sideways_thrust_time += joy_axis[kc_superjoy[15].value];
2733 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[15].value];
2737 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2738 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
2739 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
2743 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2744 if ( !kc_mouse[16].value ) // If not inverted...
2745 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
2747 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
2752 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
2753 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
2754 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
2755 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
2758 if ( (use_joystick)&&(kc_superjoy[17].value < 255 )) {
2759 if ( !kc_superjoy[18].value ) // If not inverted...
2760 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[17].value];
2762 Controls.sideways_thrust_time += joy_axis[kc_superjoy[17].value];
2765 // From joystick buttons
2766 if ( (use_joystick)&&(kc_superjoy[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_superjoy[6].value );
2767 if ( (use_joystick)&&(kc_superjoy[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_superjoy[7].value );
2769 // From mouse buttons
2770 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
2771 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
2774 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
2775 if ( !kc_mouse[18].value ) // If not inverted...
2776 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
2778 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
2781 //----------- Read bank_time -----------------
2784 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2785 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2786 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2787 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2790 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
2791 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
2792 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
2793 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
2796 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2797 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
2798 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
2802 if ( (use_joystick)&&(kc_superjoy[15].value < 255) ) {
2803 if ( !kc_superjoy[16].value ) // If not inverted...
2804 Controls.bank_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2806 Controls.bank_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2810 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2811 if ( !kc_mouse[16].value ) // If not inverted...
2812 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2814 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2819 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
2820 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
2821 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
2822 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
2825 if ( (use_joystick)&&(kc_superjoy[21].value < 255) ) {
2826 if ( !kc_superjoy[22].value ) // If not inverted...
2827 Controls.bank_time -= joy_axis[kc_superjoy[21].value];
2829 Controls.bank_time += joy_axis[kc_superjoy[21].value];
2832 // From joystick buttons
2833 if ( (use_joystick)&&(kc_superjoy[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_superjoy[11].value );
2834 if ( (use_joystick)&&(kc_superjoy[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_superjoy[12].value );
2836 // From mouse buttons
2837 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
2838 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
2841 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
2842 if ( !kc_mouse[22].value ) // If not inverted...
2843 Controls.bank_time += mouse_axis[kc_mouse[21].value];
2845 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
2849 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2850 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
2851 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
2854 //----------- Read forward_thrust_time -------------
2857 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
2858 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
2859 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
2860 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
2863 if ( (use_joystick)&&(kc_superjoy[23].value < 255 )) {
2864 if ( !kc_superjoy[24].value ) // If not inverted...
2865 Controls.forward_thrust_time -= joy_axis[kc_superjoy[23].value];
2867 Controls.forward_thrust_time += joy_axis[kc_superjoy[23].value];
2870 // From joystick buttons
2871 if ( (use_joystick)&&(kc_superjoy[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_superjoy[2].value );
2872 if ( (use_joystick)&&(kc_superjoy[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_superjoy[3].value );
2875 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
2876 if ( !kc_mouse[24].value ) // If not inverted...
2877 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
2879 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
2882 // From mouse buttons
2883 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
2884 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
2886 //----------- Read afterburner_state -------------
2889 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
2890 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
2892 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
2894 if ( (use_joystick)&&(kc_superjoy[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_superjoy[27].value);
2896 //-------Read headlight key--------------------------
2897 if (kc_keyboard[52].value < 255 )
2898 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
2899 if (kc_keyboard[53].value < 255 )
2900 Controls.headlight_count=key_down_count(kc_keyboard[53].value);
2901 if ((use_joystick)&&(kc_superjoy[30].value < 255 ))
2902 Controls.headlight_count=joy_get_button_down_cnt(kc_superjoy[30].value);
2904 //--------Read Cycle Primary Key------------------
2906 if (kc_keyboard[48].value<255)
2907 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
2908 if (kc_keyboard[49].value<255)
2909 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
2910 if ((use_joystick)&&(kc_superjoy[28].value < 255 ))
2911 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_superjoy[28].value);
2913 //--------Read Cycle Secondary Key------------------
2915 if (kc_keyboard[50].value<255)
2916 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
2917 if (kc_keyboard[51].value<255)
2918 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
2919 if ((use_joystick)&&(kc_superjoy[29].value < 255 ))
2920 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_superjoy[29].value);
2922 //--------Read Toggle Bomb key----------------------
2924 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
2926 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
2928 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
2929 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
2931 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
2932 HUD_init_message ("No bombs available!");
2936 if (Players[Player_num].secondary_ammo[bomb]==0)
2938 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
2939 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
2943 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
2944 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
2949 //---------Read Energy->Shield key----------
2951 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
2952 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
2953 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
2954 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
2956 //----------- Read fire_primary_down_count
2957 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
2958 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
2959 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_superjoy[0].value);
2960 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
2962 //----------- Read fire_primary_state
2963 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
2964 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
2965 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_superjoy[0].value);
2966 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
2968 //----------- Read fire_secondary_down_count
2969 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
2970 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
2971 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_superjoy[1].value);
2972 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
2974 //----------- Read fire_secondary_state
2975 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
2976 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
2977 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_superjoy[1].value);
2978 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
2980 //----------- Read fire_flare_down_count
2981 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
2982 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
2983 if ((use_joystick)&&(kc_superjoy[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_superjoy[4].value);
2984 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
2986 //----------- Read drop_bomb_down_count
2987 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
2988 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
2989 if ((use_joystick)&&(kc_superjoy[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_superjoy[26].value);
2990 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
2992 //----------- Read rear_view_down_count
2993 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
2994 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
2995 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_superjoy[25].value);
2996 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
2998 //----------- Read rear_view_down_state
2999 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
3000 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
3001 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_superjoy[25].value);
3002 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
3004 //----------- Read automap_down_count
3005 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
3006 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
3008 //----------- Read automap_state
3009 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
3010 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
3012 //----------- Read stupid-cruise-control-type of throttle.
3014 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
3015 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
3016 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
3017 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
3018 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
3020 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
3023 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
3024 if (Cruise_speed < 0 ) Cruise_speed = 0;
3026 if (Controls.forward_thrust_time==0)
3027 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
3030 //read_head_tracker();
3032 // Read external controls
3033 if (kc_use_external_control || CybermouseActive)
3034 kconfig_read_external_controls();
3036 //----------- Clamp values between -FrameTime and FrameTime
3037 if (FrameTime > F1_0 )
3038 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
3040 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
3041 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
3042 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
3043 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
3044 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
3045 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
3046 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
3048 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
3049 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
3050 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
3051 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
3052 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
3053 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
3054 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
3057 //--------- Don't do anything if in debug mode
3059 if ( keyd_pressed[KEY_DELETE] ) {
3060 memset( &Controls, 0, sizeof(control_info) );
3067 fix Next_toggle_time[3]={0,0,0};
3069 int allowed_to_toggle(int i)
3071 //used for keeping tabs of when its ok to toggle headlight,primary,and secondary
3073 if (Next_toggle_time[i] > GameTime)
3074 if (Next_toggle_time[i] < GameTime + (F1_0/8)) // In case time is bogus, never wait > 1 second.
3077 Next_toggle_time[i] = GameTime + (F1_0/8);
3083 //added on 2/7/99 by Victor Rachels for jostick state setting
3084 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};
3085 //end this section adition - VR
3088 void controls_read_all()
3091 int slide_on, bank_on;
3098 fix mouse_axis[3] = {0,0,0};
3100 int raw_joy_axis[MAX_AXES];
3102 int raw_joy_axis[JOY_NUM_AXES];
3105 fix k0, k1, k2, k3, kp;
3106 fix k4, k5, k6, k7, kh;
3107 ubyte channel_masks;
3108 int use_mouse, use_joystick;
3114 if (Game_turbo_mode)
3118 fix temp = Controls.heading_time;
3119 fix temp1 = Controls.pitch_time;
3120 memset( &Controls, 0, sizeof(control_info) );
3121 Controls.heading_time = temp;
3122 Controls.pitch_time = temp1;
3127 ctime = timer_get_fixed_seconds();
3129 //--------- Read Joystick -----------
3131 if ( (LastReadTime + JOYSTICK_READ_TIME > ctime) && (Config_control_type!=CONTROL_THRUSTMASTER_FCS) ) {
3132 if ((ctime < 0) && (LastReadTime > 0))
3133 LastReadTime = ctime;
3135 } else if ((Config_control_type>0) && (Config_control_type<5) ) {
3136 LastReadTime = ctime;
3137 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
3139 for (i=0; i<6; i++ ) {
3141 if (channel_masks&(1<<i)) {
3143 int joy_null_value = 10;
3145 if ( (i==3) && (Config_control_type==CONTROL_THRUSTMASTER_FCS) ) {
3146 kconfig_read_fcs( raw_joy_axis[i] );
3148 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
3150 if (kc_joystick[23].value==i) // If this is the throttle
3151 joy_null_value = 20; // Then use a larger dead-zone
3153 if (raw_joy_axis[i] > joy_null_value)
3154 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
3155 else if (raw_joy_axis[i] < -joy_null_value)
3156 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
3158 raw_joy_axis[i] = 0;
3159 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
3169 for (i=0; i<4; i++ )
3174 //--------- Read Joystick -----------
3175 if ((Config_control_type>0) && (Config_control_type<5) ) {
3176 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
3177 for (i=0; i<4; i++ ) {
3178 if (channel_masks&(1<<i)) {
3179 int joy_null_value = 10;
3181 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
3183 if (kc_joystick[23].value==i) // If this is the throttle
3184 joy_null_value = 20; // Then use a larger dead-zone
3186 if (raw_joy_axis[i] > joy_null_value)
3187 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
3188 else if (raw_joy_axis[i] < -joy_null_value)
3189 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
3191 raw_joy_axis[i] = 0;
3192 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
3199 for (i=0; i<4; i++ )
3203 #endif // ifndef MACINTOSH
3205 if (Config_control_type==5 && !CybermouseActive) {
3206 //--------- Read Mouse -----------
3208 mouse_get_delta_z( &dx, &dy, &dz );
3210 mouse_get_delta( &dx, &dy );
3212 mouse_axis[0] = (dx*FrameTime)/35;
3213 mouse_axis[1] = (dy*FrameTime)/25;
3215 mouse_axis[2] = (dz*FrameTime);
3217 mouse_buttons = mouse_get_btns();
3218 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
3220 } else if (Config_control_type==6 && !CybermouseActive) {
3221 //--------- Read Cyberman -----------
3222 mouse_get_cyberman_pos(&idx,&idy );
3223 mouse_axis[0] = (idx*FrameTime)/128;
3224 mouse_axis[1] = (idy*FrameTime)/128;
3225 mouse_buttons = mouse_get_btns();
3227 } else if (CybermouseActive) {
3228 // ReadOWL (kc_external_control);
3229 // CybermouseAdjust();
3237 //added on 2/4/99 by Victor Rachels for d1x keys
3238 //--------- Read primary weapon select -------------
3239 //the following "if" added by WraithX to stop deadies from switchin weapons, 4/14/00
3240 if (!Player_is_dead)
3243 int d2x_joystick_state[10];
3246 d2x_joystick_state[i] = joy_get_button_state(kc_d2x[i*2+1].value);
3249 //----------------Weapon 1----------------
3250 if(key_down_count(kc_d2x[0].value) ||
3251 (joy_get_button_state(kc_d2x[1].value) &&
3252 (d2x_joystick_state[0]!=d2x_joystick_ostate[0]) ) )
3255 do_weapon_select(0,0);
3257 for(i=MAX_PRIMARY_WEAPONS;i<MAX_PRIMARY_WEAPONS+NEWPRIMS;i++)
3258 if(primary_order[i]>primary_order[valu]&&player_has_weapon(i,0))
3260 LaserPowSelected = valu;
3263 //----------------Weapon 2----------------
3264 if(key_down_count(kc_d2x[2].value) ||
3265 (joy_get_button_state(kc_d2x[3].value) &&
3266 (d2x_joystick_state[1]!=d2x_joystick_ostate[1]) ) )
3267 do_weapon_select(1,0);
3268 //----------------Weapon 3----------------
3269 if(key_down_count(kc_d2x[4].value) ||
3270 (joy_get_button_state(kc_d2x[5].value) &&
3271 (d2x_joystick_state[2]!=d2x_joystick_ostate[2]) ) )
3272 do_weapon_select(2,0);
3273 //----------------Weapon 4----------------
3274 if(key_down_count(kc_d2x[6].value) ||
3275 (joy_get_button_state(kc_d2x[7].value) &&
3276 (d2x_joystick_state[3]!=d2x_joystick_ostate[3]) ) )
3277 do_weapon_select(3,0);
3278 //----------------Weapon 5----------------
3279 if(key_down_count(kc_d2x[8].value) ||
3280 (joy_get_button_state(kc_d2x[9].value) &&
3281 (d2x_joystick_state[4]!=d2x_joystick_ostate[4]) ) )
3282 do_weapon_select(4,0);
3284 //--------- Read secondary weapon select ----------
3285 //----------------Weapon 6----------------
3286 if(key_down_count(kc_d2x[10].value) ||
3287 (joy_get_button_state(kc_d2x[11].value) &&
3288 (d2x_joystick_state[5]!=d2x_joystick_ostate[5]) ) )
3289 do_weapon_select(0,1);
3290 //----------------Weapon 7----------------
3291 if(key_down_count(kc_d2x[12].value) ||
3292 (joy_get_button_state(kc_d2x[13].value) &&
3293 (d2x_joystick_state[6]!=d2x_joystick_ostate[6]) ) )
3294 do_weapon_select(1,1);
3295 //----------------Weapon 8----------------
3296 if(key_down_count(kc_d2x[14].value) ||
3297 (joy_get_button_state(kc_d2x[15].value) &&
3298 (d2x_joystick_state[7]!=d2x_joystick_ostate[7]) ) )
3299 do_weapon_select(2,1);
3300 //----------------Weapon 9----------------
3301 if(key_down_count(kc_d2x[16].value) ||
3302 (joy_get_button_state(kc_d2x[17].value) &&
3303 (d2x_joystick_state[8]!=d2x_joystick_ostate[8]) ) )
3304 do_weapon_select(3,1);
3305 //----------------Weapon 0----------------
3306 if(key_down_count(kc_d2x[18].value) ||
3307 (joy_get_button_state(kc_d2x[19].value) &&
3308 (d2x_joystick_state[9]!=d2x_joystick_ostate[9]) ) )
3309 do_weapon_select(4,1);
3310 memcpy(d2x_joystick_ostate,d2x_joystick_state,10*sizeof(int));
3312 //end this section addition - VR
3315 }//end "if (!Player_is_dead)" - WraithX
3318 //------------- Read slide_on -------------
3321 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
3322 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
3324 if ((use_joystick)&&(kc_joystick[5].value<255)) slide_on |= joy_get_button_state( kc_joystick[5].value );
3326 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
3328 //------------- Read bank_on ---------------
3331 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
3332 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
3334 if ( (use_joystick)&&(kc_joystick[10].value < 255 )) bank_on |= joy_get_button_state( kc_joystick[10].value );
3336 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
3338 //------------ Read pitch_time -----------
3340 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3342 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
3343 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
3344 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
3345 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
3348 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
3349 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
3350 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
3351 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
3354 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3355 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
3356 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
3360 Controls.pitch_time = 0;
3362 if (Controls.pitch_time < 0)
3363 Controls.pitch_time = 0;
3365 if (Controls.pitch_time > 0)
3366 Controls.pitch_time = 0;
3367 Controls.pitch_time += kp;
3370 if ( (use_joystick)&&(kc_joystick[13].value < 255 )) {
3371 if ( !kc_joystick[14].value ) // If not inverted...
3372 Controls.pitch_time -= (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3374 Controls.pitch_time += (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3378 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
3379 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
3380 if ( !kc_mouse[14].value ) // If not inverted...
3381 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3383 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3386 Controls.pitch_time = 0;
3390 //----------- Read vertical_thrust_time -----------------
3393 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
3394 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
3395 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
3396 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
3399 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
3400 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
3401 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
3402 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
3405 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3406 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
3407 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
3411 if ((use_joystick)&&( kc_joystick[13].value < 255 )) {
3412 if ( !kc_joystick[14].value ) // If not inverted...
3413 Controls.vertical_thrust_time += joy_axis[kc_joystick[13].value];
3415 Controls.vertical_thrust_time -= joy_axis[kc_joystick[13].value];
3419 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
3420 if ( !kc_mouse[14].value ) // If not inverted...
3421 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
3423 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
3428 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
3429 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
3430 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
3431 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
3434 if ((use_joystick)&&( kc_joystick[19].value < 255 )) {
3435 if ( !kc_joystick[20].value ) // If not inverted...
3436 Controls.vertical_thrust_time += joy_axis[kc_joystick[19].value];
3438 Controls.vertical_thrust_time -= joy_axis[kc_joystick[19].value];
3441 // From joystick buttons
3442 if ( (use_joystick)&&(kc_joystick[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_joystick[8].value );
3443 if ( (use_joystick)&&(kc_joystick[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_joystick[9].value );
3445 // From mouse buttons
3446 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
3447 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
3450 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
3451 if ( !kc_mouse[20].value ) // If not inverted...
3452 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
3454 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
3458 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3459 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
3460 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
3463 //---------- Read heading_time -----------
3465 if (!slide_on && !bank_on) {
3466 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3468 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
3469 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
3470 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
3471 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
3474 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
3475 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
3476 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
3477 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
3480 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3481 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
3482 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
3486 Controls.heading_time = 0;
3488 if (Controls.heading_time < 0)
3489 Controls.heading_time = 0;
3491 if (Controls.heading_time > 0)
3492 Controls.heading_time = 0;
3493 Controls.heading_time += kh;
3496 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3497 if ( !kc_joystick[16].value ) // If not inverted...
3498 Controls.heading_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3500 Controls.heading_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3504 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3505 if ( !kc_mouse[16].value ) // If not inverted...
3506 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3508 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3511 Controls.heading_time = 0;
3514 //----------- Read sideways_thrust_time -----------------
3517 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3518 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3519 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3520 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3523 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
3524 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
3525 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
3526 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
3529 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3530 if ( !kc_joystick[16].value ) // If not inverted...
3531 Controls.sideways_thrust_time += joy_axis[kc_joystick[15].value];
3533 Controls.sideways_thrust_time -= joy_axis[kc_joystick[15].value];
3537 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3538 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
3539 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
3543 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3544 if ( !kc_mouse[16].value ) // If not inverted...
3545 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
3547 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
3552 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
3553 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
3554 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
3555 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
3558 if ( (use_joystick)&&(kc_joystick[17].value < 255 )) {
3559 if ( !kc_joystick[18].value ) // If not inverted...
3560 Controls.sideways_thrust_time -= joy_axis[kc_joystick[17].value];
3562 Controls.sideways_thrust_time += joy_axis[kc_joystick[17].value];
3565 // From joystick buttons
3566 if ( (use_joystick)&&(kc_joystick[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_joystick[6].value );
3567 if ( (use_joystick)&&(kc_joystick[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_joystick[7].value );
3569 // From mouse buttons
3570 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
3571 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
3574 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
3575 if ( !kc_mouse[18].value ) // If not inverted...
3576 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
3578 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
3581 //----------- Read bank_time -----------------
3584 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3585 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3586 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3587 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3590 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
3591 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
3592 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
3593 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
3596 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3597 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
3598 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
3602 if ( (use_joystick)&&(kc_joystick[15].value < 255) ) {
3603 if ( !kc_joystick[16].value ) // If not inverted...
3604 Controls.bank_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3606 Controls.bank_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3610 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3611 if ( !kc_mouse[16].value ) // If not inverted...
3612 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3614 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3619 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
3620 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
3621 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
3622 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
3625 if ( (use_joystick)&&(kc_joystick[21].value < 255) ) {
3626 if ( !kc_joystick[22].value ) // If not inverted...
3627 Controls.bank_time -= joy_axis[kc_joystick[21].value];
3629 Controls.bank_time += joy_axis[kc_joystick[21].value];
3632 // From joystick buttons
3633 if ( (use_joystick)&&(kc_joystick[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_joystick[11].value );
3634 if ( (use_joystick)&&(kc_joystick[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_joystick[12].value );
3636 // From mouse buttons
3637 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
3638 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
3641 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
3642 if ( !kc_mouse[22].value ) // If not inverted...
3643 Controls.bank_time += mouse_axis[kc_mouse[21].value];
3645 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
3649 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3650 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
3651 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
3654 //----------- Read forward_thrust_time -------------
3657 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
3658 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
3659 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
3660 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
3663 if ( (use_joystick)&&(kc_joystick[23].value < 255 )) {
3664 if ( !kc_joystick[24].value ) // If not inverted...
3665 Controls.forward_thrust_time -= joy_axis[kc_joystick[23].value];
3667 Controls.forward_thrust_time += joy_axis[kc_joystick[23].value];
3670 // From joystick buttons
3671 if ( (use_joystick)&&(kc_joystick[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_joystick[2].value );
3672 if ( (use_joystick)&&(kc_joystick[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_joystick[3].value );
3675 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
3676 if ( !kc_mouse[24].value ) // If not inverted...
3677 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
3679 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
3682 // From mouse buttons
3683 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
3684 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
3686 //----------- Read afterburner_state -------------
3689 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
3690 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
3692 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
3694 if ( (use_joystick)&&(kc_joystick[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_joystick[27].value);
3696 //-------Read headlight key--------------------------
3698 if (kc_keyboard[52].value < 255 )
3699 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
3700 if (kc_keyboard[53].value < 255 )
3701 Controls.headlight_count+=key_down_count(kc_keyboard[53].value);
3702 if ((use_joystick)&&(kc_joystick[30].value < 255 ))
3703 Controls.headlight_count+=joy_get_button_down_cnt(kc_joystick[30].value);
3705 //--------Read Cycle Primary Key------------------
3707 if (kc_keyboard[48].value<255)
3708 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
3709 if (kc_keyboard[49].value<255)
3710 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
3711 if ((use_joystick)&&(kc_joystick[28].value < 255 ))
3712 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_joystick[28].value);
3715 //--------Read Cycle Secondary Key------------------
3717 if (kc_keyboard[50].value<255)
3718 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
3719 if (kc_keyboard[51].value<255)
3720 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
3721 if ((use_joystick)&&(kc_joystick[29].value < 255 ))
3722 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_joystick[29].value);
3724 //--------Read Toggle Bomb key----------------------
3726 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
3728 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
3730 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
3731 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
3733 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3734 HUD_init_message ("No bombs available!");
3738 if (Players[Player_num].secondary_ammo[bomb]==0)
3740 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3741 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
3745 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
3746 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
3751 //---------Read Energy->Shield key----------
3753 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
3754 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
3755 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
3756 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
3758 //----------- Read fire_primary_down_count
3759 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
3760 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
3761 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_joystick[0].value);
3762 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
3764 //----------- Read fire_primary_state
3765 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
3766 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
3767 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_joystick[0].value);
3768 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
3770 //----------- Read fire_secondary_down_count
3771 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
3772 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
3773 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_joystick[1].value);
3774 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
3776 //----------- Read fire_secondary_state
3777 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
3778 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
3779 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_joystick[1].value);
3780 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
3782 //----------- Read fire_flare_down_count
3783 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
3784 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
3785 if ((use_joystick)&&(kc_joystick[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_joystick[4].value);
3786 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
3788 //----------- Read drop_bomb_down_count
3789 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
3790 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
3791 if ((use_joystick)&&(kc_joystick[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_joystick[26].value);
3792 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
3794 //----------- Read rear_view_down_count
3795 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
3796 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
3797 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_joystick[25].value);
3798 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
3800 //----------- Read rear_view_down_state
3801 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
3802 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
3803 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_joystick[25].value);
3804 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
3806 //----------- Read automap_down_count
3807 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
3808 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
3810 //----------- Read automap_state
3811 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
3812 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
3814 //----------- Read stupid-cruise-control-type of throttle.
3816 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
3817 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
3818 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
3819 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
3820 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
3822 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
3825 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
3826 if (Cruise_speed < 0 ) Cruise_speed = 0;
3828 if (Controls.forward_thrust_time==0)
3829 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
3832 #if !defined(MACINTOSH)
3833 //read_head_tracker();
3835 // Read external controls
3836 // if (kc_use_external_control || CybermouseActive)
3837 // kconfig_read_external_controls();
3840 //----------- Clamp values between -FrameTime and FrameTime
3841 if (FrameTime > F1_0 )
3842 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
3844 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
3845 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
3846 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
3847 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
3848 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
3849 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
3850 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
3852 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
3853 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
3854 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
3855 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
3856 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
3857 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
3858 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
3861 //--------- Don't do anything if in debug mode
3863 if ( keyd_pressed[KEY_DELETE] ) {
3864 memset( &Controls, 0, sizeof(control_info) );
3870 void reset_cruise(void)
3876 void kc_set_controls()
3880 for (i=0; i<NUM_KEY_CONTROLS; i++ )
3881 kc_keyboard[i].value = kconfig_settings[0][i];
3883 if ( (Config_control_type>0) && (Config_control_type<5)) {
3884 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3885 kc_joystick[i].value = kconfig_settings[Config_control_type][i];
3886 if (kc_joystick[i].type == BT_INVERT ) {
3887 if (kc_joystick[i].value!=1)
3888 kc_joystick[i].value = 0;
3889 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
3892 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
3893 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3894 kc_mouse[i].value = kconfig_settings[Config_control_type][i];
3895 if (kc_mouse[i].type == BT_INVERT ) {
3896 if (kc_mouse[i].value!=1)
3897 kc_mouse[i].value = 0;
3898 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
3901 } else if (Config_control_type == CONTROL_WINJOYSTICK) {
3902 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3903 kc_superjoy[i].value = kconfig_settings[Config_control_type][i];
3904 if (kc_superjoy[i].type == BT_INVERT ) {
3905 if (kc_superjoy[i].value!=1)
3906 kc_superjoy[i].value = 0;
3907 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
3912 for (i=0; i<NUM_D2X_CONTROLS; i++ )
3913 kc_d2x[i].value = kconfig_d2x_settings[i];
3916 #if 0 //ndef MACINTOSH // no mac support for vr headset
3918 void kconfig_center_headset()
3922 vfx_center_headset();
3924 // } else if (iglasses_headset_installed) {
3925 // } else if (Victor_headset_installed) {
3931 #endif // end of #ifndef MACINTOSH for kconfig_center_headset
3933 void CybermouseAdjust ()
3935 /* if ( Player_num > -1 ) {
3936 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
3937 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
3938 Auto_leveling_on = 0;
3940 if ( kc_external_version > 0 ) {
3941 vms_matrix tempm, ViewMatrix;
3942 vms_angvec * Kconfig_abs_movement;
3945 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
3947 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
3948 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
3949 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
3950 Objects[Players[Player_num].objnum].orient = ViewMatrix;
3952 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
3953 if (oem_message[0] != '\0' )
3954 HUD_init_message( oem_message );
3958 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
3959 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
3960 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
3961 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
3962 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
3963 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
3964 // Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
3965 // Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
3966 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
3967 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
3968 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
3969 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
3970 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
3971 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
3972 // Controls.automap_down_count += kc_external_control->automap_down_count;
3973 // Controls.automap_state |= kc_external_control->automap_state;
3976 char GetKeyValue (char key)
3978 mprintf ((0,"Returning %c!\n",kc_keyboard[(int)key].value));
3979 return (kc_keyboard[(int)key].value);
3982 #if !defined(MACINTOSH)
3985 extern object *obj_find_first_of_type (int);
3986 void kconfig_read_external_controls()
3991 if ( !kc_enable_external_control ) return;
3993 if ( kc_external_version == 0 )
3994 memset( kc_external_control, 0, sizeof(ext_control_info));
3995 else if ( kc_external_version > 0 ) {
3997 if (kc_external_version>=4)
3998 memset( kc_external_control, 0, sizeof(advanced_ext_control_info));
3999 else if (kc_external_version>0)
4000 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 );
4001 else if (kc_external_version>2)
4002 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof(vms_matrix) +4 );
4004 if ( kc_external_version > 1 ) {
4005 // Write ship pos and angles to external controls...
4006 ubyte *temp_ptr = (ubyte *)kc_external_control;
4007 vms_vector *ship_pos;
4008 vms_matrix *ship_orient;
4009 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
4010 temp_ptr += sizeof(ext_control_info) + sizeof(vms_angvec) + 64;
4011 ship_pos = (vms_vector *)temp_ptr;
4012 temp_ptr += sizeof(vms_vector);
4013 ship_orient = (vms_matrix *)temp_ptr;
4014 // Fill in ship postion...
4015 *ship_pos = Objects[Players[Player_num].objnum].pos;
4016 // Fill in ship orientation...
4017 *ship_orient = Objects[Players[Player_num].objnum].orient;
4019 if (kc_external_version>=4)
4021 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
4023 temp_ptr->headlight_state=(Players[Player_num].flags & PLAYER_FLAGS_HEADLIGHT_ON);
4024 temp_ptr->primary_weapon_flags=Players[Player_num].primary_weapon_flags;
4025 temp_ptr->secondary_weapon_flags=Players[Player_num].secondary_weapon_flags;
4026 temp_ptr->current_primary_weapon=Primary_weapon;
4027 temp_ptr->current_secondary_weapon=Secondary_weapon;
4029 temp_ptr->current_guidebot_command=Escort_goal_object;
4031 temp_ptr->force_vector=ExtForceVec;
4032 temp_ptr->force_matrix=ExtApplyForceMatrix;
4034 temp_ptr->joltinfo[i]=ExtJoltInfo[i];
4036 temp_ptr->x_vibrate_info[i]=ExtXVibrateInfo[i];
4037 temp_ptr->x_vibrate_clear=ExtXVibrateClear;
4038 temp_ptr->game_status=ExtGameStatus;
4040 memset ((void *)&ExtForceVec,0,sizeof(vms_vector));
4041 memset ((void *)&ExtApplyForceMatrix,0,sizeof(vms_matrix));
4046 ExtXVibrateInfo[i]=0;
4051 if ( Automap_active ) // (If in automap...)
4052 kc_external_control->automap_state = 1;
4053 //memset(&r,0,sizeof(r));
4057 int386 ( kc_external_intno, &r, &r); // Read external info...
4061 if ( Player_num > -1 ) {
4062 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
4063 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
4064 Auto_leveling_on = 0;
4066 if ( kc_external_version > 0 ) {
4067 vms_matrix tempm, ViewMatrix;
4068 vms_angvec * Kconfig_abs_movement;
4071 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(ext_control_info));
4073 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
4074 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
4075 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
4076 Objects[Players[Player_num].objnum].orient = ViewMatrix;
4078 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
4079 if (oem_message[0] != '\0' )
4080 HUD_init_message( oem_message );
4084 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
4085 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
4086 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
4087 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
4088 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
4089 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
4090 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
4091 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
4092 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
4093 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
4094 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
4095 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
4096 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
4097 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
4098 Controls.automap_down_count += kc_external_control->automap_down_count;
4099 Controls.automap_state |= kc_external_control->automap_state;
4101 if (kc_external_version>=3)
4103 ubyte *temp_ptr = (ubyte *)kc_external_control;
4104 temp_ptr += (sizeof(ext_control_info) + sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof (vms_matrix));
4107 Controls.cycle_primary_count=(*(temp_ptr));
4109 Controls.cycle_secondary_count=(*(temp_ptr+1));
4112 Controls.afterburner_state=(*(temp_ptr+2));
4114 Controls.headlight_count=(*(temp_ptr+3));
4116 if (kc_external_version>=4)
4119 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
4122 if (temp_ptr->keyboard[i])
4125 if (temp_ptr->Reactor_blown)
4127 if (Game_mode & GM_MULTI)
4128 net_destroy_controlcen (obj_find_first_of_type (OBJ_CNTRLCEN));
4130 do_controlcen_destroyed_stuff(obj_find_first_of_type (OBJ_CNTRLCEN));