1 /* $Id: kconfig.c,v 1.25 2003-11-25 04:13:05 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.25 2003-11-25 04:13:05 btb Exp $";
362 #include "pa_enabl.h" //$$POLY_ACC
370 #include "gamefont.h"
382 #include "endlevel.h"
390 #include "lighting.h"
392 #include "cntrlcen.h"
393 #if defined (TACTILE)
397 #if defined(POLY_ACC)
398 #include "poly_acc.h"
404 #include "joystick.h"
407 ubyte ExtGameStatus=1;
409 vms_vector ExtForceVec;
410 vms_matrix ExtApplyForceMatrix;
412 int ExtJoltInfo[3]={0,0,0};
413 int ExtXVibrateInfo[2]={0,0};
414 int ExtYVibrateInfo[2]={0,0};
415 ubyte ExtXVibrateClear=0;
416 ubyte ExtYVibrateClear=0;
418 #define TABLE_CREATION 1
420 // Array used to 'blink' the cursor while waiting for a keypress.
421 sbyte fades[64] = { 1,1,1,2,2,3,4,4,5,6,8,9,10,12,13,15,16,17,19,20,22,23,24,26,27,28,28,29,30,30,31,31,31,31,31,30,30,29,28,28,27,26,24,23,22,20,19,17,16,15,13,12,10,9,8,6,5,4,4,3,2,2,1,1 };
423 //char * invert_text[2] = { "N", "Y" };
424 //char * joybutton_text[28] = { "BTN 1", "BTN 2", "BTN 3", "BTN 4", "", "TRIG", "LEFT", "HAT
\81", "RIGHT", "", "", "HAT
\80", "MID", "", "", "HAT
\7f", "", "", "", "HAT
\82", "TRIG", "LEFT", "RIGHT", "", "UP","DOWN","LEFT", "RIGHT" };
425 //char * joyaxis_text[4] = { "X1", "Y1", "X2", "Y2" };
426 //char * mouseaxis_text[2] = { "L/R", "F/B" };
427 //char * mousebutton_text[3] = { "Left", "Right", "Mid" };
429 int invert_text[2] = { TNUM_N, TNUM_Y };
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 "","","","","","","" };
509 //added/removed by Victor Rachels for adding rebindable keys for these
510 // KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0
511 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 };
513 ubyte system_keys[] = { KEY_ESC, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, KEY_MINUS, KEY_EQUAL, KEY_PRINT_SCREEN };
516 //extern void GameLoop(int, int );
518 extern void transfer_energy_to_shield(fix);
519 extern void CyclePrimary(),CycleSecondary(),InitMarkerInput();
520 extern ubyte DefiningMarkerMessage;
521 extern char CybermouseActive;
524 extern int joydefsw_do_button();
525 extern int joydefsw_do_winjoybutton(int *axis);
526 extern joydefsw_win_joyselect(char *title);
529 control_info Controls;
533 // macros for drawing lo/hi res kconfig screens (see scores.c as well)
535 #define LHX(x) ((x)*(MenuHires?2:1))
536 #define LHY(y) ((y)*(MenuHires?2.4:1))
540 #define BT_MOUSE_BUTTON 1
541 #define BT_MOUSE_AXIS 2
542 #define BT_JOY_BUTTON 3
543 #define BT_JOY_AXIS 4
546 char *btype_text[] = { "BT_KEY", "BT_MOUSE_BUTTON", "BT_MOUSE_AXIS", "BT_JOY_BUTTON", "BT_JOY_AXIS", "BT_INVERT" };
550 typedef struct kc_item {
551 short id; // The id of this item
559 ubyte value; // what key,button,etc
565 ubyte kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS];
567 //added on 2/4/99 by Victor Rachels to add d1x new keys
568 ubyte kconfig_d2x_settings[MAX_D2X_CONTROLS];
569 //end this section addition - VR
571 //----------- WARNING!!!!!!! -------------------------------------------
572 // THESE NEXT FOUR BLOCKS OF DATA ARE GENERATED BY PRESSING DEL+F12 WHEN
573 // IN THE KEYBOARD CONFIG SCREEN. BASICALLY, THAT PROCEDURE MODIFIES THE
574 // U,D,L,R FIELDS OF THE ARRAYS AND DUMPS THE NEW ARRAYS INTO KCONFIG.COD
575 //-------------------------------------------------------------------------
576 /*ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
577 {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},
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,0xff},
579 {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},
580 {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},
581 {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},
582 {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},
583 {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},
587 ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
588 {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},
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,0xff,0x0,0x0,0x0,0x0},
590 {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},
591 {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},
592 {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},
593 {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},
594 {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},
596 {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},
602 kc_item kc_keyboard[NUM_KEY_CONTROLS] = {
603 { 0, 15, 49, 71, 26, 55, 2, 55, 1,"Pitch forward", BT_KEY, 255 },
604 { 1, 15, 49,100, 26, 50, 3, 0, 24,"Pitch forward", BT_KEY, 255 },
605 { 2, 15, 57, 71, 26, 0, 4, 25, 3,"Pitch backward", BT_KEY, 255 },
606 { 3, 15, 57,100, 26, 1, 5, 2, 26,"Pitch backward", BT_KEY, 255 },
607 { 4, 15, 65, 71, 26, 2, 6, 27, 5,"Turn left", BT_KEY, 255 },
608 { 5, 15, 65,100, 26, 3, 7, 4, 28,"Turn left", BT_KEY, 255 },
609 { 6, 15, 73, 71, 26, 4, 8, 29, 7,"Turn right", BT_KEY, 255 },
610 { 7, 15, 73,100, 26, 5, 9, 6, 34,"Turn right", BT_KEY, 255 },
611 { 8, 15, 85, 71, 26, 6, 10, 35, 9,"Slide on", BT_KEY, 255 },
612 { 9, 15, 85,100, 26, 7, 11, 8, 36,"Slide on", BT_KEY, 255 },
613 { 10, 15, 93, 71, 26, 8, 12, 37, 11,"Slide left", BT_KEY, 255 },
614 { 11, 15, 93,100, 26, 9, 13, 10, 44,"Slide left", BT_KEY, 255 },
615 { 12, 15,101, 71, 26, 10, 14, 45, 13,"Slide right", BT_KEY, 255 },
616 { 13, 15,101,100, 26, 11, 15, 12, 30,"Slide right", BT_KEY, 255 },
617 { 14, 15,109, 71, 26, 12, 16, 31, 15,"Slide up", BT_KEY, 255 },
618 { 15, 15,109,100, 26, 13, 17, 14, 32,"Slide up", BT_KEY, 255 },
619 { 16, 15,117, 71, 26, 14, 18, 33, 17,"Slide down", BT_KEY, 255 },
620 { 17, 15,117,100, 26, 15, 19, 16, 46,"Slide down", BT_KEY, 255 },
621 { 18, 15,129, 71, 26, 16, 20, 47, 19,"Bank on", BT_KEY, 255 },
622 { 19, 15,129,100, 26, 17, 21, 18, 38,"Bank on", BT_KEY, 255 },
623 { 20, 15,137, 71, 26, 18, 22, 39, 21,"Bank left", BT_KEY, 255 },
624 { 21, 15,137,100, 26, 19, 23, 20, 40,"Bank left", BT_KEY, 255 },
625 { 22, 15,145, 71, 26, 20, 48, 41, 23,"Bank right", BT_KEY, 255 },
626 { 23, 15,145,100, 26, 21, 49, 22, 42,"Bank right", BT_KEY, 255 },
627 { 24,158, 49, 83, 26, 51, 26, 1, 25,"Fire primary", BT_KEY, 255 },
628 { 25,158, 49,112, 26, 54, 27, 24, 2,"Fire primary", BT_KEY, 255 },
629 { 26,158, 57, 83, 26, 24, 28, 3, 27,"Fire secondary", BT_KEY, 255 },
630 { 27,158, 57,112, 26, 25, 29, 26, 4,"Fire secondary", BT_KEY, 255 },
631 { 28,158, 65, 83, 26, 26, 34, 5, 29,"Fire flare", BT_KEY, 255 },
632 { 29,158, 65,112, 26, 27, 35, 28, 6,"Fire flare", BT_KEY, 255 },
633 { 30,158,105, 83, 26, 44, 32, 13, 31,"Accelerate", BT_KEY, 255 },
634 { 31,158,105,112, 26, 45, 33, 30, 14,"Accelerate", BT_KEY, 255 },
635 { 32,158,113, 83, 26, 30, 46, 15, 33,"reverse", BT_KEY, 255 },
636 { 33,158,113,112, 26, 31, 47, 32, 16,"reverse", BT_KEY, 255 },
637 { 34,158, 73, 83, 26, 28, 36, 7, 35,"Drop Bomb", BT_KEY, 255 },
638 { 35,158, 73,112, 26, 29, 37, 34, 8,"Drop Bomb", BT_KEY, 255 },
639 { 36,158, 85, 83, 26, 34, 44, 9, 37,"REAR VIEW", BT_KEY, 255 },
640 { 37,158, 85,112, 26, 35, 45, 36, 10,"REAR VIEW", BT_KEY, 255 },
641 { 38,158,133, 83, 26, 46, 40, 19, 39,"Cruise Faster", BT_KEY, 255 },
642 { 39,158,133,112, 26, 47, 41, 38, 20,"Cruise Faster", BT_KEY, 255 },
643 { 40,158,141, 83, 26, 38, 42, 21, 41,"Cruise Slower", BT_KEY, 255 },
644 { 41,158,141,112, 26, 39, 43, 40, 22,"Cruise Slower", BT_KEY, 255 },
645 { 42,158,149, 83, 26, 40, 52, 23, 43,"Cruise Off", BT_KEY, 255 },
646 { 43,158,149,112, 26, 41, 53, 42, 48,"Cruise Off", BT_KEY, 255 },
647 { 44,158, 93, 83, 26, 36, 30, 11, 45,"Automap", BT_KEY, 255 },
648 { 45,158, 93,112, 26, 37, 31, 44, 12,"Automap", BT_KEY, 255 },
649 { 46,158,121, 83, 26, 32, 38, 17, 47,"Afterburner", BT_KEY, 255 },
650 { 47,158,121,112, 26, 33, 39, 46, 18,"Afterburner", BT_KEY, 255 },
651 { 48, 15,161, 71, 26, 22, 50, 43, 49,"Cycle Primary", BT_KEY, 255 },
652 { 49, 15,161,100, 26, 23, 51, 48, 52,"Cycle Primary", BT_KEY, 255 },
653 { 50, 15,169, 71, 26, 48, 1, 53, 51,"Cycle Second", BT_KEY, 255 },
654 { 51, 15,169,100, 26, 49, 24, 50, 54,"Cycle Second", BT_KEY, 255 },
655 { 52,158,163, 83, 26, 42, 54, 49, 53,"Headlight", BT_KEY, 255 },
656 { 53,158,163,112, 26, 43, 55, 52, 50,"Headlight", BT_KEY, 255 },
657 { 54,158,171, 83, 26, 52, 56, 51, 55,"Energy->Shield", BT_KEY, 255 },
658 { 55,158,171,112, 26, 53, 0, 54, 0,"Energy->Shield", BT_KEY, 255 },
659 { 56,158,179,83, 26, 54, 0, 0, 0, "Toggle Bomb", BT_KEY,255},
661 kc_item kc_joystick[NUM_OTHER_CONTROLS] = {
662 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
663 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
664 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
665 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
666 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
667 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
668 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
669 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
670 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
671 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
672 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
673 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
674 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
675 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
676 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
677 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
678 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
679 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
680 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
681 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
682 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
683 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
684 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
685 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
686 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
687 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
688 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
689 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
690 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
691 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
692 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
694 kc_item kc_superjoy[NUM_OTHER_CONTROLS] = {
695 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
696 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
697 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
698 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
699 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
700 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
701 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
702 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
703 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
704 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
705 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
706 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
707 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
708 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
709 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
710 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
711 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
712 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
713 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
714 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
715 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
716 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
717 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
718 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
719 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
720 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
721 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
722 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
723 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
724 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
725 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
728 kc_item kc_mouse[NUM_OTHER_CONTROLS] = {
729 { 0, 25, 46, 85, 26, 12, 1, 24, 5,"Fire primary", BT_MOUSE_BUTTON, 255 },
730 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_MOUSE_BUTTON, 255 },
731 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_MOUSE_BUTTON, 255 },
732 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_MOUSE_BUTTON, 255 },
733 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_MOUSE_BUTTON, 255 },
734 { 5,180, 46, 59, 26, 24, 6, 0, 1,"Slide on", BT_MOUSE_BUTTON, 255 },
735 { 6,180, 54, 59, 26, 5, 7, 1, 4,"Slide left", BT_MOUSE_BUTTON, 255 },
736 { 7,180, 62, 59, 26, 6, 8, 4, 26,"Slide right", BT_MOUSE_BUTTON, 255 },
737 { 8,180, 70, 59, 26, 7, 9, 26, 9,"Slide up", BT_MOUSE_BUTTON, 255 },
738 { 9,180, 78, 59, 26, 8, 10, 8, 2,"Slide down", BT_MOUSE_BUTTON, 255 },
739 { 10,180, 90, 59, 26, 9, 11, 2, 3,"Bank on", BT_MOUSE_BUTTON, 255 },
740 { 11,180, 98, 59, 26, 10, 12, 3, 12,"Bank left", BT_MOUSE_BUTTON, 255 },
741 { 12,180,106, 59, 26, 11, 0, 11, 25,"Bank right", BT_MOUSE_BUTTON, 255 },
742 { 13,103,138, 58, 26, 27, 15, 25, 14,"Pitch U/D", BT_MOUSE_AXIS, 255 },
743 { 14,103,138,106, 8, 23, 16, 13, 15,"Pitch U/D", BT_INVERT, 255 },
744 { 15,103,146, 58, 26, 13, 17, 14, 16,"Turn L/R", BT_MOUSE_AXIS, 255 },
745 { 16,103,146,106, 8, 14, 18, 15, 17,"Turn L/R", BT_INVERT, 255 },
746 { 17,103,154, 58, 26, 15, 19, 16, 18,"Slide L/R", BT_MOUSE_AXIS, 255 },
747 { 18,103,154,106, 8, 16, 20, 17, 19,"Slide L/R", BT_INVERT, 255 },
748 { 19,103,162, 58, 26, 17, 21, 18, 20,"Slide U/D", BT_MOUSE_AXIS, 255 },
749 { 20,103,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
750 { 21,103,170, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_MOUSE_AXIS, 255 },
751 { 22,103,170,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
752 { 23,103,182, 58, 26, 21, 14, 22, 24,"throttle", BT_MOUSE_AXIS, 255 },
753 { 24,103,182,106, 8, 22, 5, 23, 0,"throttle", BT_INVERT, 255 },
754 { 25, 25,109, 85, 26, 3, 27, 12, 13,"REAR VIEW", BT_MOUSE_BUTTON, 255 },
755 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_MOUSE_BUTTON, 255 },
756 { 27, 25,117, 85, 26, 25, 13, 25, 13,"Afterburner", BT_MOUSE_BUTTON, 255 },
760 //added on 2/4/99 by Victor Rachels to add d1x new keys
761 kc_item kc_d2x[NUM_D2X_CONTROLS] = {
762 // id,x,y,w1,w2,u,d,l,r,text_num1,type,value
763 { 0, 15, 49, 71, 26, 27, 2, 27, 1, "WEAPON 1", BT_KEY, 255},
764 { 1, 15, 49,100, 26, 26, 3, 0, 2, "WEAPON 1", BT_JOY_BUTTON, 255},
765 { 2, 15, 57, 71, 26, 0, 4, 1, 3, "WEAPON 2", BT_KEY, 255},
766 { 3, 15, 57,100, 26, 1, 5, 2, 4, "WEAPON 2", BT_JOY_BUTTON, 255},
767 { 4, 15, 65, 71, 26, 2, 6, 3, 5, "WEAPON 3", BT_KEY, 255},
768 { 5, 15, 65,100, 26, 3, 7, 4, 6, "WEAPON 3", BT_JOY_BUTTON, 255},
769 { 6, 15, 73, 71, 26, 4, 8, 5, 7, "WEAPON 4", BT_KEY, 255},
770 { 7, 15, 73,100, 26, 5, 9, 6, 8, "WEAPON 4", BT_JOY_BUTTON, 255},
771 { 8, 15, 81, 71, 26, 6, 10, 7, 9, "WEAPON 5", BT_KEY, 255},
772 { 9, 15, 81,100, 26, 7, 11, 8, 10, "WEAPON 5", BT_JOY_BUTTON, 255},
774 { 10, 15, 89, 71, 26, 8, 12, 9, 11, "WEAPON 6", BT_KEY, 255},
775 { 11, 15, 89,100, 26, 9, 13, 10, 12, "WEAPON 6", BT_JOY_BUTTON, 255},
776 { 12, 15, 97, 71, 26, 10, 14, 11, 13, "WEAPON 7", BT_KEY, 255},
777 { 13, 15, 97,100, 26, 11, 15, 12, 14, "WEAPON 7", BT_JOY_BUTTON, 255},
778 { 14, 15,105, 71, 26, 12, 16, 13, 15, "WEAPON 8", BT_KEY, 255},
779 { 15, 15,105,100, 26, 13, 17, 14, 16, "WEAPON 8", BT_JOY_BUTTON, 255},
780 { 16, 15,113, 71, 26, 14, 18, 15, 17, "WEAPON 9", BT_KEY, 255},
781 { 17, 15,113,100, 26, 15, 19, 16, 18, "WEAPON 9", BT_JOY_BUTTON, 255},
782 { 18, 15,121, 71, 26, 16, 20, 17, 19, "WEAPON 0", BT_KEY, 255},
783 { 19, 15,121,100, 26, 17, 21, 18, 20, "WEAPON 0", BT_JOY_BUTTON, 255},
785 //{ 20, 15,131, 71, 26, 18, 22, 19, 21, "CYC PRIMARY", BT_KEY, 255},
786 //{ 21, 15,131,100, 26, 19, 23, 20, 22, "CYC PRIMARY", BT_JOY_BUTTON, 255},
787 //{ 22, 15,139, 71, 26, 20, 24, 21, 23, "CYC SECONDARY", BT_KEY, 255},
788 //{ 23, 15,139,100, 26, 21, 25, 22, 24, "CYC SECONDARY", BT_JOY_BUTTON, 255},
789 //{ 24, 8,147, 78, 26, 22, 26, 23, 25, "TOGGLE_PRIM AUTO", BT_KEY, 255},
790 //{ 25, 8,147,107, 26, 23, 27, 24, 26, "TOGGLE_PRIM_AUTO", BT_JOY_BUTTON, 255},
791 //{ 26, 8,155, 78, 26, 24, 1, 25, 27, "TOGGLE SEC AUTO", BT_KEY, 255},
792 //{ 27, 8,155,107, 26, 25, 0, 26, 0, "TOGGLE SEC AUTO", BT_JOY_BUTTON, 255},
794 //end this section addition - VR
797 #else // ifndef MACINTOSH (following are macintosh controls)
799 ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
800 {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},
801 {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},
802 {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},
803 {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},
804 {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},
805 {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},
806 {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},
809 ubyte default_firebird_settings[MAX_CONTROLS] =
810 {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};
812 ubyte default_mousestick_settings[MAX_CONTROLS] =
813 {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};
815 kc_item kc_keyboard[NUM_KEY_CONTROLS] = {
816 { 0, 15, 49, 71, 26, 55, 2, 55, 1,"Pitch forward", BT_KEY, 255 },
817 { 1, 15, 49,100, 26, 50, 3, 0, 24,"Pitch forward", BT_KEY, 255 },
818 { 2, 15, 57, 71, 26, 0, 4, 25, 3,"Pitch backward", BT_KEY, 255 },
819 { 3, 15, 57,100, 26, 1, 5, 2, 26,"Pitch backward", BT_KEY, 255 },
820 { 4, 15, 65, 71, 26, 2, 6, 27, 5,"Turn left", BT_KEY, 255 },
821 { 5, 15, 65,100, 26, 3, 7, 4, 28,"Turn left", BT_KEY, 255 },
822 { 6, 15, 73, 71, 26, 4, 8, 29, 7,"Turn right", BT_KEY, 255 },
823 { 7, 15, 73,100, 26, 5, 9, 6, 34,"Turn right", BT_KEY, 255 },
824 { 8, 15, 85, 71, 26, 6, 10, 35, 9,"Slide on", BT_KEY, 255 },
825 { 9, 15, 85,100, 26, 7, 11, 8, 36,"Slide on", BT_KEY, 255 },
826 { 10, 15, 93, 71, 26, 8, 12, 37, 11,"Slide left", BT_KEY, 255 },
827 { 11, 15, 93,100, 26, 9, 13, 10, 44,"Slide left", BT_KEY, 255 },
828 { 12, 15,101, 71, 26, 10, 14, 45, 13,"Slide right", BT_KEY, 255 },
829 { 13, 15,101,100, 26, 11, 15, 12, 30,"Slide right", BT_KEY, 255 },
830 { 14, 15,109, 71, 26, 12, 16, 31, 15,"Slide up", BT_KEY, 255 },
831 { 15, 15,109,100, 26, 13, 17, 14, 32,"Slide up", BT_KEY, 255 },
832 { 16, 15,117, 71, 26, 14, 18, 33, 17,"Slide down", BT_KEY, 255 },
833 { 17, 15,117,100, 26, 15, 19, 16, 46,"Slide down", BT_KEY, 255 },
834 { 18, 15,129, 71, 26, 16, 20, 47, 19,"Bank on", BT_KEY, 255 },
835 { 19, 15,129,100, 26, 17, 21, 18, 38,"Bank on", BT_KEY, 255 },
836 { 20, 15,137, 71, 26, 18, 22, 39, 21,"Bank left", BT_KEY, 255 },
837 { 21, 15,137,100, 26, 19, 23, 20, 40,"Bank left", BT_KEY, 255 },
838 { 22, 15,145, 71, 26, 20, 48, 41, 23,"Bank right", BT_KEY, 255 },
839 { 23, 15,145,100, 26, 21, 49, 22, 42,"Bank right", BT_KEY, 255 },
840 { 24,158, 49, 83, 26, 51, 26, 1, 25,"Fire primary", BT_KEY, 255 },
841 { 25,158, 49,112, 26, 54, 27, 24, 2,"Fire primary", BT_KEY, 255 },
842 { 26,158, 57, 83, 26, 24, 28, 3, 27,"Fire secondary", BT_KEY, 255 },
843 { 27,158, 57,112, 26, 25, 29, 26, 4,"Fire secondary", BT_KEY, 255 },
844 { 28,158, 65, 83, 26, 26, 34, 5, 29,"Fire flare", BT_KEY, 255 },
845 { 29,158, 65,112, 26, 27, 35, 28, 6,"Fire flare", BT_KEY, 255 },
846 { 30,158,105, 83, 26, 44, 32, 13, 31,"Accelerate", BT_KEY, 255 },
847 { 31,158,105,112, 26, 45, 33, 30, 14,"Accelerate", BT_KEY, 255 },
848 { 32,158,113, 83, 26, 30, 46, 15, 33,"reverse", BT_KEY, 255 },
849 { 33,158,113,112, 26, 31, 47, 32, 16,"reverse", BT_KEY, 255 },
850 { 34,158, 73, 83, 26, 28, 36, 7, 35,"Drop Bomb", BT_KEY, 255 },
851 { 35,158, 73,112, 26, 29, 37, 34, 8,"Drop Bomb", BT_KEY, 255 },
852 { 36,158, 85, 83, 26, 34, 44, 9, 37,"REAR VIEW", BT_KEY, 255 },
853 { 37,158, 85,112, 26, 35, 45, 36, 10,"REAR VIEW", BT_KEY, 255 },
854 { 38,158,133, 83, 26, 46, 40, 19, 39,"Cruise Faster", BT_KEY, 255 },
855 { 39,158,133,112, 26, 47, 41, 38, 20,"Cruise Faster", BT_KEY, 255 },
856 { 40,158,141, 83, 26, 38, 42, 21, 41,"Cruise Slower", BT_KEY, 255 },
857 { 41,158,141,112, 26, 39, 43, 40, 22,"Cruise Slower", BT_KEY, 255 },
858 { 42,158,149, 83, 26, 40, 52, 23, 43,"Cruise Off", BT_KEY, 255 },
859 { 43,158,149,112, 26, 41, 53, 42, 48,"Cruise Off", BT_KEY, 255 },
860 { 44,158, 93, 83, 26, 36, 30, 11, 45,"Automap", BT_KEY, 255 },
861 { 45,158, 93,112, 26, 37, 31, 44, 12,"Automap", BT_KEY, 255 },
862 { 46,158,121, 83, 26, 32, 38, 17, 47,"Afterburner", BT_KEY, 255 },
863 { 47,158,121,112, 26, 33, 39, 46, 18,"Afterburner", BT_KEY, 255 },
864 { 48, 15,161, 71, 26, 22, 50, 43, 49,"Cycle Primary", BT_KEY, 255 },
865 { 49, 15,161,100, 26, 23, 51, 48, 52,"Cycle Primary", BT_KEY, 255 },
866 { 50, 15,169, 71, 26, 48, 1, 53, 51,"Cycle Second", BT_KEY, 255 },
867 { 51, 15,169,100, 26, 49, 24, 50, 54,"Cycle Second", BT_KEY, 255 },
868 { 52,158,163, 83, 26, 42, 54, 49, 53,"Headlight", BT_KEY, 255 },
869 { 53,158,163,112, 26, 43, 55, 52, 50,"Headlight", BT_KEY, 255 },
870 { 54,158,171, 83, 26, 52, 25, 51, 55,"Energy->Shield", BT_KEY, 255 },
871 { 55,158,171,112, 26, 53, 0, 54, 0,"Energy->Shield", BT_KEY, 255 },
873 kc_item kc_joystick[NUM_OTHER_CONTROLS] = {
874 { 0, 25, 46, 85, 28, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
875 { 1, 25, 54, 85, 28, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
876 { 2, 25, 85, 85, 28, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
877 { 3, 25, 93, 85, 28, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
878 { 4, 25, 62, 85, 28, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
879 { 5,180, 46, 79, 28, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
880 { 6,180, 54, 79, 28, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
881 { 7,180, 62, 79, 28, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
882 { 8,180, 70, 79, 28, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
883 { 9,180, 78, 79, 28, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
884 { 10,180, 90, 79, 28, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
885 { 11,180, 98, 79, 28, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
886 { 12,180,106, 79, 28, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
887 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
888 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
889 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
890 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
891 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
892 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
893 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
894 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
895 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
896 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
897 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
898 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
899 { 25, 25,109, 85, 28, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
900 { 26, 25, 70, 85, 28, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
901 { 27, 25,117, 85, 28, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
902 { 28,180,114, 79, 28, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
903 { 29,180,122, 79, 28, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
904 { 30, 25,125, 85, 28, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
906 kc_item kc_superjoy[NUM_OTHER_CONTROLS] = {
907 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
908 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
909 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
910 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
911 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
912 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
913 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
914 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
915 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
916 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
917 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
918 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
919 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
920 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
921 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
922 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
923 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
924 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
925 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
926 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
927 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
928 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
929 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
930 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
931 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
932 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
933 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
934 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
935 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
936 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
937 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
940 kc_item kc_mouse[NUM_OTHER_CONTROLS] = {
941 { 0, 25, 46, 85, 26, 28, 1, 28, 5,"Fire primary", BT_MOUSE_BUTTON, 255 },
942 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_MOUSE_BUTTON, 255 },
943 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_MOUSE_BUTTON, 255 },
944 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_MOUSE_BUTTON, 255 },
945 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_MOUSE_BUTTON, 255 },
946 { 5,180, 46, 59, 26, 24, 6, 0, 1,"Slide on", BT_MOUSE_BUTTON, 255 },
947 { 6,180, 54, 59, 26, 5, 7, 1, 4,"Slide left", BT_MOUSE_BUTTON, 255 },
948 { 7,180, 62, 59, 26, 6, 8, 4, 26,"Slide right", BT_MOUSE_BUTTON, 255 },
949 { 8,180, 70, 59, 26, 7, 9, 26, 9,"Slide up", BT_MOUSE_BUTTON, 255 },
950 { 9,180, 78, 59, 26, 8, 10, 8, 2,"Slide down", BT_MOUSE_BUTTON, 255 },
951 { 10,180, 90, 59, 26, 9, 11, 2, 3,"Bank on", BT_MOUSE_BUTTON, 255 },
952 { 11,180, 98, 59, 26, 10, 12, 3, 12,"Bank left", BT_MOUSE_BUTTON, 255 },
953 { 12,180,106, 59, 26, 11, 28, 11, 25,"Bank right", BT_MOUSE_BUTTON, 255 },
954 { 13,103,138, 58, 26, 27, 15, 27, 14,"Pitch U/D", BT_MOUSE_AXIS, 255 },
955 { 14,103,138,106, 8, 23, 16, 13, 15,"Pitch U/D", BT_INVERT, 255 },
956 { 15,103,146, 58, 26, 13, 17, 14, 16,"Turn L/R", BT_MOUSE_AXIS, 255 },
957 { 16,103,146,106, 8, 14, 18, 15, 17,"Turn L/R", BT_INVERT, 255 },
958 { 17,103,154, 58, 26, 15, 19, 16, 18,"Slide L/R", BT_MOUSE_AXIS, 255 },
959 { 18,103,154,106, 8, 16, 20, 17, 19,"Slide L/R", BT_INVERT, 255 },
960 { 19,103,162, 58, 26, 17, 21, 18, 20,"Slide U/D", BT_MOUSE_AXIS, 255 },
961 { 20,103,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
962 { 21,103,170, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_MOUSE_AXIS, 255 },
963 { 22,103,170,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
964 { 23,103,182, 58, 26, 21, 14, 22, 24,"throttle", BT_MOUSE_AXIS, 255 },
965 { 24,103,182,106, 8, 22, 5, 23, 28,"throttle", BT_INVERT, 255 },
966 { 25, 25,109, 85, 26, 3, 27, 12, 27,"REAR VIEW", BT_MOUSE_BUTTON, 255 },
967 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_MOUSE_BUTTON, 255 },
968 { 27, 25,117, 85, 26, 25, 13, 25, 13,"Afterburner", BT_MOUSE_BUTTON, 255 },
973 //added on 2/4/99 by Victor Rachels to add new keys system
974 ubyte default_kconfig_d2x_settings[MAX_D2X_CONTROLS] = {
975 0x2 ,0xff,0x3 ,0xff,0x4 ,0xff,0x5 ,0xff,0x6 ,0xff,0x7 ,0xff,0x8 ,0xff,0x9 ,
976 0xff,0xa ,0xff,0xb ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
977 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff };
978 //end this section addition - VR
980 void kc_drawitem( kc_item *item, int is_current );
981 void kc_change_key( kc_item * item );
982 void kc_change_joybutton( kc_item * item );
983 void kc_change_mousebutton( kc_item * item );
984 void kc_change_joyaxis( kc_item * item );
985 void kc_change_mouseaxis( kc_item * item );
986 void kc_change_invert( kc_item * item );
987 void kconfig_read_fcs( int raw_axis );
988 void kconfig_set_fcs_button( int btn, int button );
989 void kconfig_read_external_controls( void );
991 int kconfig_is_axes_used(int axis)
994 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
995 if (( kc_joystick[i].type == BT_JOY_AXIS ) && (kc_joystick[i].value == axis ))
1001 #ifdef TABLE_CREATION
1002 int find_item_at( kc_item * items, int nitems, int x, int y )
1006 for (i=0; i<nitems; i++ ) {
1007 if ( ((items[i].x+items[i].w1)==x) && (items[i].y==y))
1013 int find_next_item_up( kc_item * items, int nitems, int citem )
1018 x = items[citem].x+items[citem].w1;
1023 y = grd_curcanv->cv_bitmap.bm_h-1;
1026 x = grd_curcanv->cv_bitmap.bm_w-1;
1029 i = find_item_at( items, nitems, x, y );
1035 int find_next_item_down( kc_item * items, int nitems, int citem )
1040 x = items[citem].x+items[citem].w1;
1044 if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) {
1047 if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) {
1051 i = find_item_at( items, nitems, x, y );
1057 int find_next_item_right( kc_item * items, int nitems, int citem )
1062 x = items[citem].x+items[citem].w1;
1066 if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) {
1069 if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) {
1073 i = find_item_at( items, nitems, x, y );
1079 int find_next_item_left( kc_item * items, int nitems, int citem )
1084 x = items[citem].x+items[citem].w1;
1089 x = grd_curcanv->cv_bitmap.bm_w-1;
1092 y = grd_curcanv->cv_bitmap.bm_h-1;
1095 i = find_item_at( items, nitems, x, y );
1102 #ifdef NEWMENU_MOUSE
1103 int get_item_height(kc_item *item)
1108 if (item->value==255) {
1111 switch( item->type ) {
1113 strncpy( btext, key_text[item->value], 10 ); break;
1114 case BT_MOUSE_BUTTON:
1116 strncpy( btext, Text_string[mousebutton_text[item->value]], 10); break;
1118 strncpy( btext, mousebutton_text[item->value], 10 ); break;
1121 strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break;
1123 if ( joybutton_text[item->value] !=-1 )
1124 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1126 sprintf( btext, "BTN%d", item->value );
1129 strncpy( btext, Text_string[joyaxis_text[item->value]], 10 ); break;
1131 strncpy( btext, Text_string[invert_text[item->value]], 10 ); break;
1134 gr_get_string_size(btext, &w, &h, &aw );
1140 void kconfig_sub(kc_item * items,int nitems, char * title)
1143 dd_grs_canvas * save_canvas,
1144 grs_canvas * save_canvas
1146 grs_font * save_font;
1147 int old_keyd_repeat;
1148 #ifdef NEWMENU_MOUSE
1149 int mouse_state, omouse_state, mx, my, x1, x2, y1, y2;
1150 int close_x, close_y, close_size;
1153 int i,k,ocitem,citem;
1154 int time_stopped = 0;
1155 WIN(char *old_bg_pcx);
1157 WIN(old_bg_pcx = _SCRContext.bkg_filename);
1158 WIN(DEFINE_SCREEN(NULL));
1163 if (!((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence)) )
1169 // if (Config_control_type == CONTROL_WINJOYSTICK) {
1171 // joydefsw_win_joyselect(title2); title = title2,
1173 // ); // Get Samir...
1177 save_canvas = dd_grd_curcanv,
1178 save_canvas = grd_curcanv
1183 dd_gr_set_current_canvas(NULL),
1184 gr_set_current_canvas(NULL)
1186 save_font = grd_curcanv->cv_font;
1191 game_flush_inputs();
1192 old_keyd_repeat = keyd_repeat;
1195 //gr_clear_canvas( BM_XRGB(0,0,0) );
1197 nm_draw_background(0, 0, grd_curcanv->cv_bitmap.bm_w - 1, grd_curcanv->cv_bitmap.bm_h - 1);
1198 gr_palette_load (gr_palette);
1200 grd_curcanv->cv_font = MEDIUM3_FONT;
1202 WIN(DDGRLOCK(dd_grd_curcanv));
1205 p = strchr( title, '\n' );
1207 gr_string( 0x8000, LHY(8), title );
1212 // if ( items == kc_keyboard ) {
1213 // gr_string( 0x8000, 8, "Keyboard" );
1214 // } else if ( items == kc_joystick ) {
1215 // gr_string( 0x8000, 8, "Joysticks" );
1216 // } else if ( items == kc_mouse ) {
1217 // gr_string( 0x8000, 8, "Mouse" );
1220 #ifdef NEWMENU_MOUSE
1221 close_x = close_y = MenuHires?15:7;
1222 close_size = MenuHires?10:5;
1223 gr_setcolor( BM_XRGB(0, 0, 0) );
1224 gr_rect(close_x, close_y, close_x + close_size, close_y + close_size);
1225 gr_setcolor( BM_XRGB(21, 21, 21) );
1226 gr_rect(close_x + LHX(1), close_y + LHX(1), close_x + close_size - LHX(1), close_y + close_size - LHX(1));
1229 grd_curcanv->cv_font = GAME_FONT;
1230 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1233 gr_string( 0x8000, LHY(20), TXT_KCONFIG_STRING_1 );
1235 gr_string( 0x8000, LHY(20), "Enter changes, ctrl-d deletes, ctrl-r resets defaults, ESC exits");
1237 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1238 if ( items == kc_keyboard ) {
1239 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1240 gr_setcolor( BM_XRGB(31,27,6) );
1242 gr_scanline( LHX(98), LHX(106), LHY(42) );
1243 gr_scanline( LHX(120), LHX(128), LHY(42) );
1244 gr_pixel( LHX(98), LHY(43) );
1245 gr_pixel( LHX(98), LHY(44) );
1246 gr_pixel( LHX(128), LHY(43) );
1247 gr_pixel( LHX(128), LHY(44) );
1249 gr_string( LHX(109), LHY(40), "OR" );
1251 gr_scanline( LHX(253), LHX(261), LHY(42) );
1252 gr_scanline( LHX(274), LHX(283), LHY(42) );
1253 gr_pixel( LHX(253), LHY(43) );
1254 gr_pixel( LHX(253), LHY(44) );
1255 gr_pixel( LHX(283), LHY(43) );
1256 gr_pixel( LHX(283), LHY(44) );
1258 gr_string( LHX(264), LHY(40), "OR" );
1260 } if ( items == kc_joystick ) {
1261 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1262 gr_setcolor( BM_XRGB(31,27,6) );
1263 gr_scanline( LHX(18), LHX(135), LHY(37) );
1264 gr_scanline( LHX(181), LHX(294), LHY(37) );
1265 gr_scanline( LHX(18), LHX(144), LHY(119+18) );
1266 gr_scanline( LHX(174), LHX(294), LHY(119+18) );
1267 gr_string( 0x8000, LHY(35), TXT_BUTTONS );
1268 gr_string( 0x8000,LHY(117+18), TXT_AXES );
1269 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1270 gr_string( LHX(81), LHY(137+8), TXT_AXIS );
1271 gr_string( LHX(111), LHY(137+8), TXT_INVERT );
1272 gr_string( LHX(222), LHY(137+8), TXT_AXIS );
1273 gr_string( LHX(252), LHY(137+8), TXT_INVERT );
1274 } else if ( items == kc_mouse ) {
1275 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1276 gr_setcolor( BM_XRGB(31,27,6) );
1277 gr_scanline( LHX(18), LHX(135), LHY(37) );
1278 gr_scanline( LHX(181), LHX(294), LHY(37) );
1279 gr_scanline( LHX(18), LHX(144), LHY(119+5) );
1280 gr_scanline( LHX(174), LHX(294), LHY(119+5) );
1281 gr_string( 0x8000, LHY(35), TXT_BUTTONS );
1282 gr_string( 0x8000,LHY(117+5), TXT_AXES );
1283 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1284 gr_string( LHX(169), LHY(129), TXT_AXIS );
1285 gr_string( LHX(199), LHY(129), TXT_INVERT );
1288 else if ( items == kc_d2x )
1290 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1291 gr_setcolor( BM_XRGB(31,27,6) );
1293 gr_string(LHX( 94), LHY(40), "KB");
1294 gr_string(LHX(121), LHY(40), "JOY");
1298 WIN(DDGRUNLOCK(dd_grd_curcanv));
1300 for (i=0; i<nitems; i++ ) {
1301 kc_drawitem( &items[i], 0 );
1305 kc_drawitem( &items[citem], 1 );
1307 newmenu_show_cursor();
1309 #ifdef NEWMENU_MOUSE
1310 mouse_state = omouse_state = 0;
1314 // Windows addendum to allow for kconfig input.
1319 DoMessageStuff(&msg);
1321 if (_RedrawScreen) {
1322 _RedrawScreen = FALSE;
1324 dd_gr_set_current_canvas(NULL);
1334 //see if redbook song needs to be restarted
1335 songs_check_redbook_repeat();
1339 #ifdef NEWMENU_MOUSE
1340 omouse_state = mouse_state;
1341 mouse_state = mouse_button_state(0);
1344 if ( !time_stopped ) {
1346 if (multi_menu_poll() == -1)
1355 MAC(case KEY_COMMAND+KEY_SHIFTED+KEY_3:)
1356 case KEY_PRINT_SCREEN:
1357 save_screen_shot(0);
1359 case KEY_CTRLED+KEY_D:
1360 items[citem].value = 255;
1361 kc_drawitem( &items[citem], 1 );
1363 case KEY_CTRLED+KEY_R:
1364 if ( items==kc_keyboard ) {
1365 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1366 items[i].value=default_kconfig_settings[0][i];
1367 kc_drawitem( &items[i], 0 );
1370 } else if ( items==kc_d2x ) {
1371 for(i=0;i<NUM_D2X_CONTROLS;i++)
1373 items[i].value=default_kconfig_d2x_settings[i];
1374 kc_drawitem( &items[i], 0 );
1379 // hack for firebire and mousestick default controls since I made
1380 // them the same control type -- dumb dumb dumb
1381 if (joy_have_firebird())
1382 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1383 items[i].value = default_firebird_settings[i];
1384 kc_drawitem( &items[i], 0 );
1386 else if (joy_have_mousestick())
1387 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1388 items[i].value = default_mousestick_settings[i];
1389 kc_drawitem( &items[i], 0 );
1392 #endif // note link to above else
1393 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1394 items[i].value = default_kconfig_settings[Config_control_type][i];
1395 kc_drawitem( &items[i], 0 );
1398 kc_drawitem( &items[citem], 1 );
1401 items[citem].value=255;
1402 kc_drawitem( &items[citem], 1 );
1406 #ifdef TABLE_CREATION
1407 if (items[citem].u==-1) items[citem].u=find_next_item_up( items,nitems, citem);
1409 citem = items[citem].u;
1414 #ifdef TABLE_CREATION
1415 if (items[citem].d==-1) items[citem].d=find_next_item_down( items,nitems, citem);
1417 citem = items[citem].d;
1421 #ifdef TABLE_CREATION
1422 if (items[citem].l==-1) items[citem].l=find_next_item_left( items,nitems, citem);
1424 citem = items[citem].l;
1428 #ifdef TABLE_CREATION
1429 if (items[citem].r==-1) items[citem].r=find_next_item_right( items,nitems, citem);
1431 citem = items[citem].r;
1435 switch( items[citem].type ) {
1436 case BT_KEY: kc_change_key( &items[citem] ); break;
1437 case BT_MOUSE_BUTTON: kc_change_mousebutton( &items[citem] ); break;
1438 case BT_MOUSE_AXIS: kc_change_mouseaxis( &items[citem] ); break;
1439 case BT_JOY_BUTTON: kc_change_joybutton( &items[citem] ); break;
1440 case BT_JOY_AXIS: kc_change_joyaxis( &items[citem] ); break;
1441 case BT_INVERT: kc_change_invert( &items[citem] ); break;
1446 grd_curcanv->cv_font = save_font;
1448 WIN(DEFINE_SCREEN(old_bg_pcx));
1451 dd_gr_set_current_canvas(save_canvas),
1452 gr_set_current_canvas( save_canvas )
1454 keyd_repeat = old_keyd_repeat;
1455 game_flush_inputs();
1456 newmenu_hide_cursor();
1460 #ifdef TABLE_CREATION
1461 case KEY_DEBUGGED+KEY_F12: {
1463 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1464 kc_keyboard[i].u = find_next_item_up( kc_keyboard,NUM_KEY_CONTROLS, i);
1465 kc_keyboard[i].d = find_next_item_down( kc_keyboard,NUM_KEY_CONTROLS, i);
1466 kc_keyboard[i].l = find_next_item_left( kc_keyboard,NUM_KEY_CONTROLS, i);
1467 kc_keyboard[i].r = find_next_item_right( kc_keyboard,NUM_KEY_CONTROLS, i);
1469 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1470 kc_joystick[i].u = find_next_item_up( kc_joystick,NUM_OTHER_CONTROLS, i);
1471 kc_joystick[i].d = find_next_item_down( kc_joystick,NUM_OTHER_CONTROLS, i);
1472 kc_joystick[i].l = find_next_item_left( kc_joystick,NUM_OTHER_CONTROLS, i);
1473 kc_joystick[i].r = find_next_item_right( kc_joystick,NUM_OTHER_CONTROLS, i);
1475 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1476 kc_mouse[i].u = find_next_item_up( kc_mouse,NUM_OTHER_CONTROLS, i);
1477 kc_mouse[i].d = find_next_item_down( kc_mouse,NUM_OTHER_CONTROLS, i);
1478 kc_mouse[i].l = find_next_item_left( kc_mouse,NUM_OTHER_CONTROLS, i);
1479 kc_mouse[i].r = find_next_item_right( kc_mouse,NUM_OTHER_CONTROLS, i);
1481 fp = fopen( "kconfig.cod", "wt" );
1483 fprintf( fp, "ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {\n" );
1484 for (i=0; i<CONTROL_MAX_TYPES; i++ ) {
1486 fprintf( fp, "{0x%x", kconfig_settings[i][0] );
1487 for (j=1; j<MAX_CONTROLS; j++ )
1488 fprintf( fp, ",0x%x", kconfig_settings[i][j] );
1489 fprintf( fp, "},\n" );
1491 fprintf( fp, "};\n" );
1493 fprintf( fp, "\nkc_item kc_keyboard[NUM_KEY_CONTROLS] = {\n" );
1494 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1495 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1496 kc_keyboard[i].id, kc_keyboard[i].x, kc_keyboard[i].y, kc_keyboard[i].w1, kc_keyboard[i].w2,
1497 kc_keyboard[i].u, kc_keyboard[i].d, kc_keyboard[i].l, kc_keyboard[i].r,
1498 34, kc_keyboard[i].text, 34, btype_text[kc_keyboard[i].type] );
1500 fprintf( fp, "};" );
1502 fprintf( fp, "\nkc_item kc_joystick[NUM_OTHER_CONTROLS] = {\n" );
1503 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1504 if (kc_joystick[i].type == BT_JOY_BUTTON)
1505 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1506 kc_joystick[i].id, kc_joystick[i].x, kc_joystick[i].y, kc_joystick[i].w1, kc_joystick[i].w2,
1507 kc_joystick[i].u, kc_joystick[i].d, kc_joystick[i].l, kc_joystick[i].r,
1508 34, kc_joystick[i].text, 34, btype_text[kc_joystick[i].type] );
1510 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1511 kc_joystick[i].id, kc_joystick[i].x, kc_joystick[i].y, kc_joystick[i].w1, kc_joystick[i].w2,
1512 kc_joystick[i].u, kc_joystick[i].d, kc_joystick[i].l, kc_joystick[i].r,
1513 34, kc_joystick[i].text, 34, btype_text[kc_joystick[i].type] );
1515 fprintf( fp, "};" );
1517 fprintf( fp, "\nkc_item kc_mouse[NUM_OTHER_CONTROLS] = {\n" );
1518 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1519 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1520 kc_mouse[i].id, kc_mouse[i].x, kc_mouse[i].y, kc_mouse[i].w1, kc_mouse[i].w2,
1521 kc_mouse[i].u, kc_mouse[i].d, kc_mouse[i].l, kc_mouse[i].r,
1522 34, kc_mouse[i].text, 34, btype_text[kc_mouse[i].type] );
1524 fprintf( fp, "};" );
1533 #ifdef NEWMENU_MOUSE
1534 if ( (mouse_state && !omouse_state) || (mouse_state && omouse_state) ) {
1537 mouse_get_pos(&mx, &my);
1538 for (i=0; i<nitems; i++ ) {
1539 item_height = get_item_height( &items[i] );
1540 x1 = grd_curcanv->cv_bitmap.bm_x + LHX(items[i].x) + LHX(items[i].w1);
1541 x2 = x1 + LHX(items[i].w2);
1542 y1 = grd_curcanv->cv_bitmap.bm_y + LHY(items[i].y);
1543 y2 = y1 + LHX(item_height);
1544 if (((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2))) {
1550 else if ( !mouse_state && omouse_state ) {
1553 mouse_get_pos(&mx, &my);
1554 item_height = get_item_height( &items[citem] );
1555 x1 = grd_curcanv->cv_bitmap.bm_x + LHX(items[citem].x) + LHX(items[citem].w1);
1556 x2 = x1 + LHX(items[citem].w2);
1557 y1 = grd_curcanv->cv_bitmap.bm_y + LHY(items[citem].y);
1558 y2 = y1 + LHY(item_height);
1559 if (((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2))) {
1560 newmenu_hide_cursor();
1561 switch( items[citem].type ) {
1562 case BT_KEY: kc_change_key( &items[citem] ); break;
1563 case BT_MOUSE_BUTTON: kc_change_mousebutton( &items[citem] ); break;
1564 case BT_MOUSE_AXIS: kc_change_mouseaxis( &items[citem] ); break;
1565 case BT_JOY_BUTTON: kc_change_joybutton( &items[citem] ); break;
1566 case BT_JOY_AXIS: kc_change_joyaxis( &items[citem] ); break;
1567 case BT_INVERT: kc_change_invert( &items[citem] ); break;
1569 newmenu_show_cursor();
1571 x1 = grd_curcanv->cv_bitmap.bm_x + close_x + LHX(1);
1572 x2 = x1 + close_size - LHX(1);
1573 y1 = grd_curcanv->cv_bitmap.bm_y + close_y + LHX(1);
1574 y2 = y1 + close_size - LHX(1);
1575 if ( ((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2)) ) {
1576 grd_curcanv->cv_font = save_font;
1577 WINDOS(dd_gr_set_current_canvas( save_canvas ),
1578 gr_set_current_canvas( save_canvas ));
1579 keyd_repeat = old_keyd_repeat;
1580 game_flush_inputs();
1581 newmenu_hide_cursor();
1589 #endif // NEWMENU_MOUSE
1591 if (ocitem!=citem) {
1592 newmenu_hide_cursor();
1593 kc_drawitem( &items[ocitem], 0 );
1594 kc_drawitem( &items[citem], 1 );
1595 newmenu_show_cursor();
1601 void kc_drawitem( kc_item *item, int is_current )
1605 // PA_DFX (pa_set_frontbuffer_current());
1606 WIN(DDGRLOCK(dd_grd_curcanv));
1609 gr_set_fontcolor( BM_XRGB(20,20,29), -1 );
1611 gr_set_fontcolor( BM_XRGB(15,15,24), -1 );
1612 gr_string( LHX(item->x), LHY(item->y), item->text );
1613 WIN(DDGRUNLOCK(dd_grd_curcanv));
1615 if (item->value==255) {
1616 strcpy( btext, "" );
1618 switch( item->type ) {
1620 strncpy( btext, key_text[item->value], 10 ); break;
1621 case BT_MOUSE_BUTTON:
1623 //strncpy( btext, Text_string[mousebutton_text[item->value]], 10 ); break;
1624 strncpy( btext, (item->value <= 3)?Text_string[mousebutton_text[item->value]]:mousebutton_textra[item->value-3], 10 ); break;
1626 strncpy( btext, mousebutton_text[item->value], 10 ); break;
1629 strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break;
1633 if (joybutton_text[item->value] != -1)
1634 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1636 sprintf( btext, "BTN%2d", item->value+1 );
1638 if ( joybutton_text[item->value] !=-1 )
1639 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1641 sprintf( btext, "BTN%d", item->value );
1644 strncpy( btext, joy_btn_name( item->value ), 10);
1646 sprintf( btext, "BTN%d", item->value );
1650 strncpy( btext, Text_string[joyaxis_text[item->value]], 10 ); break;
1652 strncpy( btext, Text_string[invert_text[item->value]], 10 ); break;
1656 WIN(DDGRLOCK(dd_grd_curcanv));
1657 gr_get_string_size(btext, &w, &h, &aw );
1660 gr_setcolor( BM_XRGB(21,0,24) );
1662 gr_setcolor( BM_XRGB(16,0,19) );
1663 gr_urect( LHX(item->w1+item->x), LHY(item->y-1), LHX(item->w1+item->x+item->w2), LHY(item->y)+h );
1665 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1667 x = LHX(item->w1+item->x)+((LHX(item->w2)-w)/2);
1669 gr_string( x, LHY(item->y), btext );
1670 // PA_DFX (pa_set_backbuffer_current());
1672 WIN(DDGRUNLOCK(dd_grd_curcanv));
1677 static int looper=0;
1679 void kc_drawquestion( kc_item *item )
1683 WIN(DDGRLOCK(dd_grd_curcanv));
1684 // PA_DFX (pa_set_frontbuffer_current());
1686 gr_get_string_size("?", &w, &h, &aw );
1688 c = BM_XRGB(21,0,24);
1690 //@@gr_setcolor( gr_fade_table[fades[looper]*256+c] );
1691 gr_setcolor(BM_XRGB(21*fades[looper]/31,0,24*fades[looper]/31));
1693 if (looper>63) looper=0;
1695 gr_urect( LHX(item->w1+item->x), LHY(item->y-1), LHX(item->w1+item->x+item->w2), LHY(item->y)+h );
1697 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1699 x = LHX(item->w1+item->x)+((LHX(item->w2)-w)/2);
1701 gr_string( x, LHY(item->y), "?" );
1702 // PA_DFX (pa_set_backbuffer_current());
1703 WIN(DDGRUNLOCK(dd_grd_curcanv));
1707 void kc_change_key( kc_item * item )
1712 WIN(DDGRLOCK(dd_grd_curcanv));
1713 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1715 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_KEY );
1716 WIN(DDGRUNLOCK(dd_grd_curcanv));
1718 game_flush_inputs();
1722 while( (k!=KEY_ESC) && (keycode==255) )
1728 DoMessageStuff(&msg);
1735 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1738 // if ( Game_mode & GM_MULTI )
1739 // GameLoop( 0, 0 ); // Continue
1741 timer_delay(f0_1/10);
1742 kc_drawquestion( item );
1744 for (i=0; i<256; i++ ) {
1745 if (keyd_pressed[i] && (strlen(key_text[i])>0)) {
1747 for (n=0; n<sizeof(system_keys); n++ )
1748 if ( system_keys[n] == i )
1757 for (i=0; i<Num_items; i++ ) {
1758 n = item - All_items;
1759 if ( (i!=n) && (All_items[i].type==BT_KEY) && (All_items[i].value==keycode) ) {
1760 All_items[i].value = 255;
1761 kc_drawitem( &All_items[i], 0 );
1764 item->value = keycode;
1766 kc_drawitem( item, 1 );
1768 WIN(DDGRLOCK(dd_grd_curcanv));
1769 gr_set_fontcolor( BM_XRGB(28,28,28), BM_XRGB(0,0,0) );
1770 WIN(DDGRUNLOCK(dd_grd_curcanv));
1772 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1774 game_flush_inputs();
1778 void kc_change_joybutton( kc_item * item )
1783 WIN(DDGRLOCK(dd_grd_curcanv));
1784 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1786 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_JBUTTON );
1787 WIN(DDGRUNLOCK(dd_grd_curcanv));
1789 game_flush_inputs();
1793 while( (k!=KEY_ESC) && (code==255))
1798 DoMessageStuff(&msg);
1804 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1807 // if ( Game_mode & GM_MULTI )
1808 // GameLoop( 0, 0 ); // Continue
1810 timer_delay(f0_1/10);
1812 if (k == KEY_PRINT_SCREEN)
1813 save_screen_shot(0);
1815 kc_drawquestion( item );
1817 WIN(code = joydefsw_do_button());
1820 code = joy_do_buttons();
1823 #if !defined(WINDOWS) && !defined(MACINTOSH)
1824 if (Config_control_type==CONTROL_THRUSTMASTER_FCS) {
1826 joystick_read_raw_axis( JOY_ALL_AXIS, axis );
1827 kconfig_read_fcs( axis[3] );
1828 if ( joy_get_button_state(7) ) code = 7;
1829 if ( joy_get_button_state(11) ) code = 11;
1830 if ( joy_get_button_state(15) ) code = 15;
1831 if ( joy_get_button_state(19) ) code = 19;
1832 for (i=0; i<4; i++ ) {
1833 if ( joy_get_button_state(i) )
1836 } else if (Config_control_type==CONTROL_FLIGHTSTICK_PRO) {
1837 for (i=4; i<20; i++ ) {
1838 if ( joy_get_button_state(i) ) {
1840 mprintf(( 0, "JB: %d\n", code ));
1844 for (i=0; i<MAX_BUTTONS; i++ ) {
1845 if ( joy_get_button_state(i) )
1852 for (i=0; i<Num_items; i++ ) {
1853 n = item - All_items;
1854 if ( (i!=n) && (All_items[i].type==BT_JOY_BUTTON) && (All_items[i].value==code) ) {
1855 All_items[i].value = 255;
1856 kc_drawitem( &All_items[i], 0 );
1861 kc_drawitem( item, 1 );
1862 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1863 game_flush_inputs();
1866 void kc_change_mousebutton( kc_item * item )
1871 WIN(DDGRLOCK(dd_grd_curcanv));
1872 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1874 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_MBUTTON );
1875 WIN(DDGRUNLOCK(dd_grd_curcanv));
1878 game_flush_inputs();
1882 while( (k!=KEY_ESC) && (code==255))
1887 DoMessageStuff(&msg);
1893 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1896 // if ( Game_mode & GM_MULTI )
1897 // GameLoop( 0, 0 ); // Continue
1899 timer_delay(f0_1/10);
1901 if (k == KEY_PRINT_SCREEN)
1902 save_screen_shot(0);
1904 kc_drawquestion( item );
1906 b = mouse_get_btns();
1907 for (i = 0; i < 16; i++ ) {
1913 for (i=0; i<Num_items; i++ ) {
1914 n = item - All_items;
1915 if ( (i!=n) && (All_items[i].type==BT_MOUSE_BUTTON) && (All_items[i].value==code) ) {
1916 All_items[i].value = 255;
1917 kc_drawitem( &All_items[i], 0 );
1922 kc_drawitem( item, 1 );
1923 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1924 game_flush_inputs();
1928 void kc_change_joyaxis( kc_item * item )
1932 int old_axis[MAX_AXES];
1934 int axis[JOY_NUM_AXES];
1935 int old_axis[JOY_NUM_AXES];
1944 WIN(DDGRLOCK(dd_grd_curcanv));
1945 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1947 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_JOY_AXIS );
1948 WIN(DDGRUNLOCK(dd_grd_curcanv));
1950 game_flush_inputs();
1955 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, old_axis ),
1956 joystick_read_raw_axis( JOY_ALL_AXIS, old_axis )
1959 while( (k!=KEY_ESC) && (code==255))
1964 DoMessageStuff(&msg);
1970 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1973 // if ( Game_mode & GM_MULTI )
1974 // GameLoop( 0, 0 ); // Continue
1976 timer_delay(f0_1/10);
1978 if (k == KEY_PRINT_SCREEN)
1979 save_screen_shot(0);
1981 kc_drawquestion( item );
1984 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, axis ),
1985 joystick_read_raw_axis( JOY_ALL_AXIS, axis )
1988 for (i=0; i<numaxis; i++ ) {
1989 #if defined (MACINTOSH)
1990 if ( abs(axis[i]-old_axis[i])>100 ) {
1991 #elif defined(WINDOWS)
1992 if ( abs(axis[i]-old_axis[i])>1024 ) {
1994 if ( abs(axis[i]-old_axis[i])>200 ) {
1997 con_printf(CON_DEBUG, "Axis Movement detected: Axis %i\n", i);
1999 //old_axis[i] = axis[i];
2001 for (i=0; i<Num_items; i++ )
2003 n = item - All_items;
2004 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) )
2010 for (i=0; i<Num_items; i++ ) {
2011 n = item - All_items;
2012 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) ) {
2013 All_items[i].value = 255;
2014 kc_drawitem( &All_items[i], 0 );
2020 kc_drawitem( item, 1 );
2021 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
2022 game_flush_inputs();
2026 void kc_change_mouseaxis( kc_item * item )
2035 WIN(DDGRLOCK(dd_grd_curcanv));
2036 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
2038 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_MSE_AXIS );
2039 WIN(DDGRUNLOCK(dd_grd_curcanv));
2041 game_flush_inputs();
2045 mouse_get_delta( &dx, &dy );
2047 while( (k!=KEY_ESC) && (code==255))
2052 DoMessageStuff(&msg);
2058 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
2061 // if ( Game_mode & GM_MULTI )
2062 // GameLoop( 0, 0 ); // Continue
2064 timer_delay(f0_1/10);
2066 if (k == KEY_PRINT_SCREEN)
2067 save_screen_shot(0);
2069 kc_drawquestion( item );
2072 mouse_get_delta_z( &dx, &dy, &dz );
2074 mouse_get_delta( &dx, &dy );
2076 if ( abs(dx)>20 ) code = 0;
2077 if ( abs(dy)>20 ) code = 1;
2079 if ( abs(dz)>20 ) code = 2;
2083 for (i=0; i<Num_items; i++ ) {
2084 n = item - All_items;
2085 if ( (i!=n) && (All_items[i].type==BT_MOUSE_AXIS) && (All_items[i].value==code) ) {
2086 All_items[i].value = 255;
2087 kc_drawitem( &All_items[i], 0 );
2092 kc_drawitem( item, 1 );
2093 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
2094 game_flush_inputs();
2099 void kc_change_invert( kc_item * item )
2101 game_flush_inputs();
2108 kc_drawitem( item, 1 );
2112 #include "screens.h"
2114 void kconfig(int n, char * title)
2117 grs_bitmap *save_bm;
2119 set_screen_mode( SCREEN_MENU );
2124 WIN(mouse_set_mode(0));
2125 WIN(dd_gr_set_current_canvas(NULL));
2127 #if defined(POLY_ACC)
2128 save_bm = gr_create_bitmap2( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h, grd_curcanv->cv_bitmap.bm_type, NULL );
2130 save_bm = gr_create_bitmap( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h );
2132 Assert( save_bm != NULL );
2134 WIN(DDGRLOCK(dd_grd_curcanv));
2135 gr_bm_bitblt(grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_w,
2136 0, 0, 0, 0, &grd_curcanv->cv_bitmap, save_bm );
2137 WIN(DDGRUNLOCK(dd_grd_curcanv));
2140 case 0:kconfig_sub( kc_keyboard, NUM_KEY_CONTROLS, title );break;
2141 case 1:kconfig_sub( kc_joystick, NUM_OTHER_CONTROLS, title );break;
2142 case 2:kconfig_sub( kc_mouse, NUM_OTHER_CONTROLS, title ); break;
2143 case 3:kconfig_sub( kc_superjoy, NUM_OTHER_CONTROLS, title); break;
2145 //added on 2/4/99 by Victor Rachels for new keys menu
2146 case 4:kconfig_sub( kc_d2x, NUM_D2X_CONTROLS, title ); break;
2147 //end this section addition - VR
2155 WIN(mouse_set_mode(1));
2156 WIN(dd_gr_set_current_canvas(NULL));
2157 WIN(DDGRLOCK(dd_grd_curcanv));
2158 gr_bitmap(0, 0, save_bm);
2159 WIN(DDGRUNLOCK(dd_grd_curcanv));
2160 gr_free_bitmap(save_bm);
2162 reset_cockpit(); //force cockpit redraw next time
2164 // Update save values...
2166 for (i=0; i<NUM_KEY_CONTROLS; i++ )
2167 kconfig_settings[0][i] = kc_keyboard[i].value;
2169 if ( (Config_control_type>0) && (Config_control_type<5)) {
2170 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
2171 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
2172 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
2173 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
2174 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
2176 else if (Config_control_type == CONTROL_WINJOYSTICK) {
2177 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
2178 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
2182 for (i=0; i<NUM_D2X_CONTROLS; i++)
2183 kconfig_d2x_settings[i] = kc_d2x[i].value;
2188 void kconfig_read_fcs( int raw_axis )
2190 int raw_button, button, axis_min[4], axis_center[4], axis_max[4];
2192 if (Config_control_type!=CONTROL_THRUSTMASTER_FCS) return;
2194 joy_get_cal_vals(axis_min, axis_center, axis_max);
2196 if ( axis_max[3] > 1 )
2197 raw_button = (raw_axis*100)/axis_max[3];
2201 if ( raw_button > 88 )
2203 else if ( raw_button > 63 )
2205 else if ( raw_button > 39 )
2207 else if ( raw_button > 15 )
2212 kconfig_set_fcs_button( 19, button );
2213 kconfig_set_fcs_button( 15, button );
2214 kconfig_set_fcs_button( 11, button );
2215 kconfig_set_fcs_button( 7, button );
2219 void kconfig_set_fcs_button( int btn, int button )
2221 int state,time_down,upcount,downcount;
2222 state = time_down = upcount = downcount = 0;
2224 if ( joy_get_button_state(btn) ) {
2225 if ( btn==button ) {
2227 time_down = FrameTime;
2232 if ( btn==button ) {
2234 time_down = FrameTime;
2241 joy_set_btn_values( btn, state, time_down, downcount, upcount );
2247 fix Last_angles_p = 0;
2248 fix Last_angles_b = 0;
2249 fix Last_angles_h = 0;
2250 ubyte Last_angles_read = 0;
2252 extern int VR_sensitivity;
2254 int VR_sense_range[3] = { 25, 50, 75 };
2256 #if 0 //ndef MACINTOSH
2261 fix yaw, pitch, roll;
2264 //------ read vfx1 helmet --------
2265 if (vfx1_installed) {
2266 vfx_get_data(&yaw,&pitch,&roll,&buttons);
2267 } else if (iglasses_headset_installed) {
2268 iglasses_read_headset( &yaw, &pitch, &roll );
2269 } else if (Victor_headset_installed) {
2270 victor_read_headset_filtered( &yaw, &pitch, &roll );
2275 Use_player_head_angles = 0;
2276 if ( Last_angles_read ) {
2280 if ( (Last_angles_h < (F1_0/4) ) && (yaw > ((F1_0*3)/4) ) )
2282 else if ( (yaw < (F1_0/4) ) && (Last_angles_h > ((F1_0*3)/4) ) )
2285 Controls.pitch_time += fixmul((pitch- Last_angles_p)*VR_sense_range[VR_sensitivity],FrameTime);
2286 Controls.heading_time+= fixmul((yaw1 - Last_angles_h)*VR_sense_range[VR_sensitivity],FrameTime);
2287 Controls.bank_time += fixmul((roll - Last_angles_b)*VR_sense_range[VR_sensitivity],FrameTime);
2289 Last_angles_read = 1;
2290 Last_angles_p = pitch;
2291 Last_angles_h = yaw;
2292 Last_angles_b = roll;
2300 #define JOYSTICK_READ_TIME (F1_0/40) // Read joystick at 40 Hz.
2302 #define JOYSTICK_READ_TIME (F1_0/10) // Read joystick at 10 Hz.
2305 fix LastReadTime = 0;
2309 ubyte kc_use_external_control = 0;
2310 ubyte kc_enable_external_control = 0;
2311 ubyte kc_external_intno = 0;
2312 ext_control_info *kc_external_control = NULL;
2313 ubyte *kc_external_name = NULL;
2314 ubyte kc_external_version = 0;
2315 extern int Automap_active;
2317 void kconfig_init_external_controls(int intno, int address)
2320 kc_external_intno = intno;
2321 kc_external_control = (ext_control_info *)address;
2322 kc_use_external_control = 1;
2323 kc_enable_external_control = 1;
2325 i = FindArg ( "-xname" );
2327 kc_external_name = Args[i+1];
2329 kc_external_name = "External Controller";
2331 for (i=0;i<strlen (kc_external_name);i++)
2332 if (kc_external_name[i]=='_')
2333 kc_external_name[i]=' ';
2335 i = FindArg ( "-xver" );
2337 kc_external_version = atoi(Args[i+1]);
2339 printf( "%s int: 0x%x, data: 0x%p, ver:%d\n", kc_external_name, kc_external_intno, kc_external_control, kc_external_version );
2343 #if !defined(MACINTOSH)
2344 /*void kconfig_read_external_controls()
2348 if ( !kc_enable_external_control && !CybermouseActive)
2351 if ( kc_external_version == 0 )
2352 memset( kc_external_control, 0, sizeof(control_info) );
2353 else if ( kc_external_version > 0 ) {
2354 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 );
2355 if ( kc_external_version > 1 ) {
2356 // Write ship pos and angles to external controls...
2357 ubyte *temp_ptr = (ubyte *)kc_external_control;
2358 vms_vector *ship_pos;
2359 vms_matrix *ship_orient;
2360 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
2361 temp_ptr += sizeof(control_info)+sizeof(vms_angvec) + 64;
2362 ship_pos = (vms_vector *)temp_ptr;
2363 temp_ptr += sizeof(vms_vector);
2364 ship_orient = (vms_matrix *)temp_ptr;
2365 // Fill in ship postion...
2366 *ship_pos = Objects[Players[Player_num].objnum].pos;
2367 // Fill in ship orientation...
2368 *ship_orient = Objects[Players[Player_num].objnum].orient;
2372 if ( Automap_active ) // (If in automap...)
2373 kc_external_control->automap_state = 1;
2374 memset(&r,0,sizeof(r));
2378 if (!CybermouseActive)
2379 int386 ( kc_external_intno, &r, &r); // Read external info...
2381 // ReadOWL (kc_external_control);
2385 if ( Player_num > -1 ) {
2386 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
2387 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
2388 Auto_leveling_on = 0;
2390 if ( kc_external_version > 0 ) {
2391 vms_matrix tempm, ViewMatrix;
2392 vms_angvec * Kconfig_abs_movement;
2395 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
2397 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
2398 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
2399 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
2400 Objects[Players[Player_num].objnum].orient = ViewMatrix;
2402 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
2403 if (oem_message[0] != '\0' )
2404 HUD_init_message( oem_message );
2408 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
2409 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
2410 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
2411 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
2412 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
2413 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
2414 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
2415 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
2416 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
2417 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
2418 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
2419 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
2420 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
2421 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
2422 Controls.automap_down_count += kc_external_control->automap_down_count;
2423 Controls.automap_state |= kc_external_control->automap_state;
2428 void controls_read_all_win()
2431 int slide_on, bank_on;
2435 int raw_joy_axis[7];
2437 fix k0, k1, k2, k3, kp;
2438 fix k4, k5, k6, k7, kh;
2439 ubyte channel_masks;
2440 int use_mouse, use_joystick;
2443 if (Game_turbo_mode)
2447 fix temp = Controls.heading_time;
2448 fix temp1 = Controls.pitch_time;
2449 memset( &Controls, 0, sizeof(control_info) );
2450 Controls.heading_time = temp;
2451 Controls.pitch_time = temp1;
2456 ctime = timer_get_fixed_seconds();
2458 // DO JOYSTICK (X,Y,Z R,U,V)
2459 // ----------------------------------------------------------------------------
2460 if ( (LastReadTime + JOYSTICK_READ_TIME) > ctime ) {
2461 if ((ctime < 0) && (LastReadTime > 0))
2462 LastReadTime = ctime;
2464 } else if ((Config_control_type==CONTROL_WINJOYSTICK)) {
2465 LastReadTime = ctime;
2466 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, raw_joy_axis );
2468 for (i=0; i<7; i++ ) {
2469 if (channel_masks&(1<<i)) {
2470 int joy_null_value = 28;
2472 // DO POV if joystick has a hat.
2473 // --------------------------------------------------------------------
2475 joydefsw_do_winjoybutton(raw_joy_axis);
2479 // --------------------------------------------------------------------
2480 // mprintf((0, "(%d)=%d,", i, raw_joy_axis[i]));
2481 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2482 // mprintf((0, "%d ",raw_joy_axis[i]));
2483 // if (i%2) mprintf((0,"\n"));
2486 if (kc_superjoy[23].value==i) // If this is the throttle
2487 joy_null_value = 32; // Then use a larger dead-zone
2489 if (raw_joy_axis[i] > (joy_null_value-2))
2490 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
2491 else if (raw_joy_axis[i] < -(joy_null_value+2))
2492 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
2494 raw_joy_axis[i] = 0;
2495 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
2504 for (i=0; i<6; i++ )
2510 // ----------------------------------------------------------------------------
2511 if (Config_control_type==5) {
2512 mouse_get_delta( &dx, &dy );
2513 mouse_axis[0] = (dx*FrameTime)/35;
2514 mouse_axis[1] = (dy*FrameTime)/25;
2515 mouse_buttons = mouse_get_btns();
2516 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
2525 //------------- Read slide_on -------------
2528 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
2529 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
2531 if ((use_joystick)&&(kc_superjoy[5].value<255)) slide_on |= joy_get_button_state( kc_superjoy[5].value );
2533 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
2535 //------------- Read bank_on ---------------
2538 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
2539 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
2541 if ( (use_joystick)&&(kc_superjoy[10].value < 255 )) bank_on |= joy_get_button_state( kc_superjoy[10].value );
2543 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
2545 //------------ Read pitch_time -----------
2547 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2549 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
2550 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
2551 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
2552 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
2555 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
2556 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
2557 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
2558 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
2561 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2562 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
2563 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
2567 Controls.pitch_time = 0;
2569 if (Controls.pitch_time < 0)
2570 Controls.pitch_time = 0;
2572 if (Controls.pitch_time > 0)
2573 Controls.pitch_time = 0;
2574 Controls.pitch_time += kp;
2577 if ( (use_joystick)&&(kc_superjoy[13].value < 255 )) {
2578 if ( !kc_superjoy[14].value ) // If not inverted...
2579 Controls.pitch_time -= (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2581 Controls.pitch_time += (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2585 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
2586 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
2587 if ( !kc_mouse[14].value ) // If not inverted...
2588 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2590 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2593 Controls.pitch_time = 0;
2597 //----------- Read vertical_thrust_time -----------------
2600 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
2601 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
2602 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
2603 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
2606 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
2607 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
2608 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
2609 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
2612 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2613 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
2614 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
2618 if ((use_joystick)&&( kc_superjoy[13].value < 255 )) {
2619 if ( !kc_superjoy[14].value ) // If not inverted...
2620 Controls.vertical_thrust_time += joy_axis[kc_superjoy[13].value];
2622 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[13].value];
2626 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
2627 if ( !kc_mouse[14].value ) // If not inverted...
2628 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
2630 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
2635 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
2636 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
2637 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
2638 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
2641 if ((use_joystick)&&( kc_superjoy[19].value < 255 )) {
2642 if ( !kc_superjoy[20].value ) // If not inverted...
2643 Controls.vertical_thrust_time += joy_axis[kc_superjoy[19].value];
2645 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[19].value];
2648 // From joystick buttons
2649 if ( (use_joystick)&&(kc_superjoy[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_superjoy[8].value );
2650 if ( (use_joystick)&&(kc_superjoy[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_superjoy[9].value );
2652 // From mouse buttons
2653 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
2654 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
2657 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
2658 if ( !kc_mouse[20].value ) // If not inverted...
2659 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
2661 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
2665 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2666 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
2667 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
2670 //---------- Read heading_time -----------
2672 if (!slide_on && !bank_on) {
2673 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2675 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
2676 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
2677 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
2678 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
2681 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
2682 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
2683 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
2684 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
2687 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2688 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
2689 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
2693 Controls.heading_time = 0;
2695 if (Controls.heading_time < 0)
2696 Controls.heading_time = 0;
2698 if (Controls.heading_time > 0)
2699 Controls.heading_time = 0;
2700 Controls.heading_time += kh;
2703 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2704 if ( !kc_superjoy[16].value ) // If not inverted...
2705 Controls.heading_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2707 Controls.heading_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2711 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2712 if ( !kc_mouse[16].value ) // If not inverted...
2713 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2715 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2718 Controls.heading_time = 0;
2721 //----------- Read sideways_thrust_time -----------------
2724 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2725 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2726 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2727 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2730 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
2731 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
2732 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
2733 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
2736 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2737 if ( !kc_superjoy[16].value ) // If not inverted...
2738 Controls.sideways_thrust_time += joy_axis[kc_superjoy[15].value];
2740 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[15].value];
2744 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2745 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
2746 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
2750 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2751 if ( !kc_mouse[16].value ) // If not inverted...
2752 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
2754 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
2759 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
2760 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
2761 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
2762 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
2765 if ( (use_joystick)&&(kc_superjoy[17].value < 255 )) {
2766 if ( !kc_superjoy[18].value ) // If not inverted...
2767 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[17].value];
2769 Controls.sideways_thrust_time += joy_axis[kc_superjoy[17].value];
2772 // From joystick buttons
2773 if ( (use_joystick)&&(kc_superjoy[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_superjoy[6].value );
2774 if ( (use_joystick)&&(kc_superjoy[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_superjoy[7].value );
2776 // From mouse buttons
2777 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
2778 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
2781 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
2782 if ( !kc_mouse[18].value ) // If not inverted...
2783 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
2785 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
2788 //----------- Read bank_time -----------------
2791 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2792 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2793 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2794 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2797 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
2798 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
2799 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
2800 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
2803 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2804 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
2805 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
2809 if ( (use_joystick)&&(kc_superjoy[15].value < 255) ) {
2810 if ( !kc_superjoy[16].value ) // If not inverted...
2811 Controls.bank_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2813 Controls.bank_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2817 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2818 if ( !kc_mouse[16].value ) // If not inverted...
2819 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2821 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2826 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
2827 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
2828 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
2829 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
2832 if ( (use_joystick)&&(kc_superjoy[21].value < 255) ) {
2833 if ( !kc_superjoy[22].value ) // If not inverted...
2834 Controls.bank_time -= joy_axis[kc_superjoy[21].value];
2836 Controls.bank_time += joy_axis[kc_superjoy[21].value];
2839 // From joystick buttons
2840 if ( (use_joystick)&&(kc_superjoy[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_superjoy[11].value );
2841 if ( (use_joystick)&&(kc_superjoy[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_superjoy[12].value );
2843 // From mouse buttons
2844 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
2845 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
2848 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
2849 if ( !kc_mouse[22].value ) // If not inverted...
2850 Controls.bank_time += mouse_axis[kc_mouse[21].value];
2852 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
2856 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2857 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
2858 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
2861 //----------- Read forward_thrust_time -------------
2864 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
2865 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
2866 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
2867 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
2870 if ( (use_joystick)&&(kc_superjoy[23].value < 255 )) {
2871 if ( !kc_superjoy[24].value ) // If not inverted...
2872 Controls.forward_thrust_time -= joy_axis[kc_superjoy[23].value];
2874 Controls.forward_thrust_time += joy_axis[kc_superjoy[23].value];
2877 // From joystick buttons
2878 if ( (use_joystick)&&(kc_superjoy[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_superjoy[2].value );
2879 if ( (use_joystick)&&(kc_superjoy[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_superjoy[3].value );
2882 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
2883 if ( !kc_mouse[24].value ) // If not inverted...
2884 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
2886 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
2889 // From mouse buttons
2890 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
2891 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
2893 //----------- Read afterburner_state -------------
2896 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
2897 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
2899 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
2901 if ( (use_joystick)&&(kc_superjoy[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_superjoy[27].value);
2903 //-------Read headlight key--------------------------
2904 if (kc_keyboard[52].value < 255 )
2905 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
2906 if (kc_keyboard[53].value < 255 )
2907 Controls.headlight_count=key_down_count(kc_keyboard[53].value);
2908 if ((use_joystick)&&(kc_superjoy[30].value < 255 ))
2909 Controls.headlight_count=joy_get_button_down_cnt(kc_superjoy[30].value);
2911 //--------Read Cycle Primary Key------------------
2913 if (kc_keyboard[48].value<255)
2914 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
2915 if (kc_keyboard[49].value<255)
2916 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
2917 if ((use_joystick)&&(kc_superjoy[28].value < 255 ))
2918 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_superjoy[28].value);
2920 //--------Read Cycle Secondary Key------------------
2922 if (kc_keyboard[50].value<255)
2923 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
2924 if (kc_keyboard[51].value<255)
2925 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
2926 if ((use_joystick)&&(kc_superjoy[29].value < 255 ))
2927 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_superjoy[29].value);
2929 //--------Read Toggle Bomb key----------------------
2931 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
2933 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
2935 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
2936 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
2938 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
2939 HUD_init_message ("No bombs available!");
2943 if (Players[Player_num].secondary_ammo[bomb]==0)
2945 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
2946 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
2950 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
2951 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
2956 //---------Read Energy->Shield key----------
2958 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
2959 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
2960 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
2961 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
2963 //----------- Read fire_primary_down_count
2964 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
2965 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
2966 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_superjoy[0].value);
2967 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
2969 //----------- Read fire_primary_state
2970 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
2971 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
2972 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_superjoy[0].value);
2973 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
2975 //----------- Read fire_secondary_down_count
2976 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
2977 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
2978 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_superjoy[1].value);
2979 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
2981 //----------- Read fire_secondary_state
2982 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
2983 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
2984 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_superjoy[1].value);
2985 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
2987 //----------- Read fire_flare_down_count
2988 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
2989 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
2990 if ((use_joystick)&&(kc_superjoy[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_superjoy[4].value);
2991 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
2993 //----------- Read drop_bomb_down_count
2994 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
2995 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
2996 if ((use_joystick)&&(kc_superjoy[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_superjoy[26].value);
2997 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
2999 //----------- Read rear_view_down_count
3000 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
3001 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
3002 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_superjoy[25].value);
3003 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
3005 //----------- Read rear_view_down_state
3006 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
3007 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
3008 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_superjoy[25].value);
3009 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
3011 //----------- Read automap_down_count
3012 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
3013 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
3015 //----------- Read automap_state
3016 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
3017 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
3019 //----------- Read stupid-cruise-control-type of throttle.
3021 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
3022 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
3023 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
3024 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
3025 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
3027 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
3030 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
3031 if (Cruise_speed < 0 ) Cruise_speed = 0;
3033 if (Controls.forward_thrust_time==0)
3034 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
3037 //read_head_tracker();
3039 // Read external controls
3040 if (kc_use_external_control || CybermouseActive)
3041 kconfig_read_external_controls();
3043 //----------- Clamp values between -FrameTime and FrameTime
3044 if (FrameTime > F1_0 )
3045 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
3047 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
3048 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
3049 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
3050 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
3051 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
3052 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
3053 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
3055 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
3056 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
3057 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
3058 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
3059 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
3060 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
3061 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
3064 //--------- Don't do anything if in debug mode
3066 if ( keyd_pressed[KEY_DELETE] ) {
3067 memset( &Controls, 0, sizeof(control_info) );
3074 fix Next_toggle_time[3]={0,0,0};
3076 int allowed_to_toggle(int i)
3078 //used for keeping tabs of when its ok to toggle headlight,primary,and secondary
3080 if (Next_toggle_time[i] > GameTime)
3081 if (Next_toggle_time[i] < GameTime + (F1_0/8)) // In case time is bogus, never wait > 1 second.
3084 Next_toggle_time[i] = GameTime + (F1_0/8);
3091 //added on 2/7/99 by Victor Rachels for jostick state setting
3092 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};
3093 //end this section adition - VR
3097 void controls_read_all()
3100 int slide_on, bank_on;
3107 fix mouse_axis[3] = {0,0,0};
3109 int raw_joy_axis[MAX_AXES];
3111 int raw_joy_axis[JOY_NUM_AXES];
3114 fix k0, k1, k2, k3, kp;
3115 fix k4, k5, k6, k7, kh;
3116 ubyte channel_masks;
3117 int use_mouse, use_joystick;
3123 if (Game_turbo_mode)
3127 fix temp = Controls.heading_time;
3128 fix temp1 = Controls.pitch_time;
3129 memset( &Controls, 0, sizeof(control_info) );
3130 Controls.heading_time = temp;
3131 Controls.pitch_time = temp1;
3136 ctime = timer_get_fixed_seconds();
3138 //--------- Read Joystick -----------
3140 if ( (LastReadTime + JOYSTICK_READ_TIME > ctime) && (Config_control_type!=CONTROL_THRUSTMASTER_FCS) ) {
3141 if ((ctime < 0) && (LastReadTime > 0))
3142 LastReadTime = ctime;
3144 } else if ((Config_control_type>0) && (Config_control_type<5) ) {
3145 LastReadTime = ctime;
3146 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
3148 for (i=0; i<6; i++ ) {
3150 if (channel_masks&(1<<i)) {
3152 int joy_null_value = 10;
3154 if ( (i==3) && (Config_control_type==CONTROL_THRUSTMASTER_FCS) ) {
3155 kconfig_read_fcs( raw_joy_axis[i] );
3157 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
3159 if (kc_joystick[23].value==i) // If this is the throttle
3160 joy_null_value = 20; // Then use a larger dead-zone
3162 if (raw_joy_axis[i] > joy_null_value)
3163 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
3164 else if (raw_joy_axis[i] < -joy_null_value)
3165 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
3167 raw_joy_axis[i] = 0;
3168 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
3178 for (i=0; i<4; i++ )
3183 //--------- Read Joystick -----------
3184 if ((Config_control_type>0) && (Config_control_type<5) ) {
3185 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
3186 for (i=0; i<4; i++ ) {
3187 if (channel_masks&(1<<i)) {
3188 int joy_null_value = 10;
3190 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
3192 if (kc_joystick[23].value==i) // If this is the throttle
3193 joy_null_value = 20; // Then use a larger dead-zone
3195 if (raw_joy_axis[i] > joy_null_value)
3196 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
3197 else if (raw_joy_axis[i] < -joy_null_value)
3198 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
3200 raw_joy_axis[i] = 0;
3201 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
3208 for (i=0; i<4; i++ )
3212 #endif // ifndef MACINTOSH
3214 if (Config_control_type==5 && !CybermouseActive) {
3215 //--------- Read Mouse -----------
3217 mouse_get_delta_z( &dx, &dy, &dz );
3219 mouse_get_delta( &dx, &dy );
3221 mouse_axis[0] = (dx*FrameTime)/35;
3222 mouse_axis[1] = (dy*FrameTime)/25;
3224 mouse_axis[2] = (dz*FrameTime);
3226 mouse_buttons = mouse_get_btns();
3227 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
3229 } else if (Config_control_type==6 && !CybermouseActive) {
3230 //--------- Read Cyberman -----------
3231 mouse_get_cyberman_pos(&idx,&idy );
3232 mouse_axis[0] = (idx*FrameTime)/128;
3233 mouse_axis[1] = (idy*FrameTime)/128;
3234 mouse_buttons = mouse_get_btns();
3236 } else if (CybermouseActive) {
3237 // ReadOWL (kc_external_control);
3238 // CybermouseAdjust();
3247 //added on 2/4/99 by Victor Rachels for d1x keys
3248 //--------- Read primary weapon select -------------
3249 //the following "if" added by WraithX to stop deadies from switchin weapons, 4/14/00
3250 if (!Player_is_dead)
3253 int d2x_joystick_state[10];
3256 d2x_joystick_state[i] = joy_get_button_state(kc_d2x[i*2+1].value);
3259 //----------------Weapon 1----------------
3260 if(key_down_count(kc_d2x[0].value) ||
3261 (joy_get_button_state(kc_d2x[1].value) &&
3262 (d2x_joystick_state[0]!=d2x_joystick_ostate[0]) ) )
3265 do_weapon_select(0,0);
3267 for(i=MAX_PRIMARY_WEAPONS;i<MAX_PRIMARY_WEAPONS+NEWPRIMS;i++)
3268 if(primary_order[i]>primary_order[valu]&&player_has_weapon(i,0))
3270 LaserPowSelected = valu;
3273 //----------------Weapon 2----------------
3274 if(key_down_count(kc_d2x[2].value) ||
3275 (joy_get_button_state(kc_d2x[3].value) &&
3276 (d2x_joystick_state[1]!=d2x_joystick_ostate[1]) ) )
3277 do_weapon_select(1,0);
3278 //----------------Weapon 3----------------
3279 if(key_down_count(kc_d2x[4].value) ||
3280 (joy_get_button_state(kc_d2x[5].value) &&
3281 (d2x_joystick_state[2]!=d2x_joystick_ostate[2]) ) )
3282 do_weapon_select(2,0);
3283 //----------------Weapon 4----------------
3284 if(key_down_count(kc_d2x[6].value) ||
3285 (joy_get_button_state(kc_d2x[7].value) &&
3286 (d2x_joystick_state[3]!=d2x_joystick_ostate[3]) ) )
3287 do_weapon_select(3,0);
3288 //----------------Weapon 5----------------
3289 if(key_down_count(kc_d2x[8].value) ||
3290 (joy_get_button_state(kc_d2x[9].value) &&
3291 (d2x_joystick_state[4]!=d2x_joystick_ostate[4]) ) )
3292 do_weapon_select(4,0);
3294 //--------- Read secondary weapon select ----------
3295 //----------------Weapon 6----------------
3296 if(key_down_count(kc_d2x[10].value) ||
3297 (joy_get_button_state(kc_d2x[11].value) &&
3298 (d2x_joystick_state[5]!=d2x_joystick_ostate[5]) ) )
3299 do_weapon_select(0,1);
3300 //----------------Weapon 7----------------
3301 if(key_down_count(kc_d2x[12].value) ||
3302 (joy_get_button_state(kc_d2x[13].value) &&
3303 (d2x_joystick_state[6]!=d2x_joystick_ostate[6]) ) )
3304 do_weapon_select(1,1);
3305 //----------------Weapon 8----------------
3306 if(key_down_count(kc_d2x[14].value) ||
3307 (joy_get_button_state(kc_d2x[15].value) &&
3308 (d2x_joystick_state[7]!=d2x_joystick_ostate[7]) ) )
3309 do_weapon_select(2,1);
3310 //----------------Weapon 9----------------
3311 if(key_down_count(kc_d2x[16].value) ||
3312 (joy_get_button_state(kc_d2x[17].value) &&
3313 (d2x_joystick_state[8]!=d2x_joystick_ostate[8]) ) )
3314 do_weapon_select(3,1);
3315 //----------------Weapon 0----------------
3316 if(key_down_count(kc_d2x[18].value) ||
3317 (joy_get_button_state(kc_d2x[19].value) &&
3318 (d2x_joystick_state[9]!=d2x_joystick_ostate[9]) ) )
3319 do_weapon_select(4,1);
3320 memcpy(d2x_joystick_ostate,d2x_joystick_state,10*sizeof(int));
3322 //end this section addition - VR
3325 }//end "if (!Player_is_dead)" - WraithX
3329 //------------- Read slide_on -------------
3332 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
3333 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
3335 if ((use_joystick)&&(kc_joystick[5].value<255)) slide_on |= joy_get_button_state( kc_joystick[5].value );
3337 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
3339 //------------- Read bank_on ---------------
3342 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
3343 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
3345 if ( (use_joystick)&&(kc_joystick[10].value < 255 )) bank_on |= joy_get_button_state( kc_joystick[10].value );
3347 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
3349 //------------ Read pitch_time -----------
3351 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3353 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
3354 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
3355 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
3356 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
3359 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
3360 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
3361 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
3362 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
3365 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3366 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
3367 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
3371 Controls.pitch_time = 0;
3373 if (Controls.pitch_time < 0)
3374 Controls.pitch_time = 0;
3376 if (Controls.pitch_time > 0)
3377 Controls.pitch_time = 0;
3378 Controls.pitch_time += kp;
3381 if ( (use_joystick)&&(kc_joystick[13].value < 255 )) {
3382 if ( !kc_joystick[14].value ) // If not inverted...
3383 Controls.pitch_time -= (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3385 Controls.pitch_time += (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3389 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
3390 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
3391 if ( !kc_mouse[14].value ) // If not inverted...
3392 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3394 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3397 Controls.pitch_time = 0;
3401 //----------- Read vertical_thrust_time -----------------
3404 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
3405 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
3406 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
3407 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
3410 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
3411 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
3412 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
3413 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
3416 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3417 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
3418 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
3422 if ((use_joystick)&&( kc_joystick[13].value < 255 )) {
3423 if ( !kc_joystick[14].value ) // If not inverted...
3424 Controls.vertical_thrust_time += joy_axis[kc_joystick[13].value];
3426 Controls.vertical_thrust_time -= joy_axis[kc_joystick[13].value];
3430 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
3431 if ( !kc_mouse[14].value ) // If not inverted...
3432 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
3434 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
3439 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
3440 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
3441 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
3442 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
3445 if ((use_joystick)&&( kc_joystick[19].value < 255 )) {
3446 if ( !kc_joystick[20].value ) // If not inverted...
3447 Controls.vertical_thrust_time += joy_axis[kc_joystick[19].value];
3449 Controls.vertical_thrust_time -= joy_axis[kc_joystick[19].value];
3452 // From joystick buttons
3453 if ( (use_joystick)&&(kc_joystick[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_joystick[8].value );
3454 if ( (use_joystick)&&(kc_joystick[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_joystick[9].value );
3456 // From mouse buttons
3457 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
3458 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
3461 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
3462 if ( !kc_mouse[20].value ) // If not inverted...
3463 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
3465 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
3469 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3470 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
3471 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
3474 //---------- Read heading_time -----------
3476 if (!slide_on && !bank_on) {
3477 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3479 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
3480 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
3481 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
3482 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
3485 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
3486 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
3487 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
3488 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
3491 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3492 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
3493 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
3497 Controls.heading_time = 0;
3499 if (Controls.heading_time < 0)
3500 Controls.heading_time = 0;
3502 if (Controls.heading_time > 0)
3503 Controls.heading_time = 0;
3504 Controls.heading_time += kh;
3507 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3508 if ( !kc_joystick[16].value ) // If not inverted...
3509 Controls.heading_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3511 Controls.heading_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3515 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3516 if ( !kc_mouse[16].value ) // If not inverted...
3517 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3519 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3522 Controls.heading_time = 0;
3525 //----------- Read sideways_thrust_time -----------------
3528 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3529 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3530 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3531 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3534 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
3535 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
3536 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
3537 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
3540 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3541 if ( !kc_joystick[16].value ) // If not inverted...
3542 Controls.sideways_thrust_time += joy_axis[kc_joystick[15].value];
3544 Controls.sideways_thrust_time -= joy_axis[kc_joystick[15].value];
3548 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3549 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
3550 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
3554 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3555 if ( !kc_mouse[16].value ) // If not inverted...
3556 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
3558 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
3563 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
3564 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
3565 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
3566 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
3569 if ( (use_joystick)&&(kc_joystick[17].value < 255 )) {
3570 if ( !kc_joystick[18].value ) // If not inverted...
3571 Controls.sideways_thrust_time -= joy_axis[kc_joystick[17].value];
3573 Controls.sideways_thrust_time += joy_axis[kc_joystick[17].value];
3576 // From joystick buttons
3577 if ( (use_joystick)&&(kc_joystick[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_joystick[6].value );
3578 if ( (use_joystick)&&(kc_joystick[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_joystick[7].value );
3580 // From mouse buttons
3581 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
3582 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
3585 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
3586 if ( !kc_mouse[18].value ) // If not inverted...
3587 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
3589 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
3592 //----------- Read bank_time -----------------
3595 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3596 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3597 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3598 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3601 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
3602 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
3603 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
3604 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
3607 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3608 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
3609 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
3613 if ( (use_joystick)&&(kc_joystick[15].value < 255) ) {
3614 if ( !kc_joystick[16].value ) // If not inverted...
3615 Controls.bank_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3617 Controls.bank_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3621 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3622 if ( !kc_mouse[16].value ) // If not inverted...
3623 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3625 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3630 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
3631 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
3632 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
3633 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
3636 if ( (use_joystick)&&(kc_joystick[21].value < 255) ) {
3637 if ( !kc_joystick[22].value ) // If not inverted...
3638 Controls.bank_time -= joy_axis[kc_joystick[21].value];
3640 Controls.bank_time += joy_axis[kc_joystick[21].value];
3643 // From joystick buttons
3644 if ( (use_joystick)&&(kc_joystick[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_joystick[11].value );
3645 if ( (use_joystick)&&(kc_joystick[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_joystick[12].value );
3647 // From mouse buttons
3648 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
3649 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
3652 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
3653 if ( !kc_mouse[22].value ) // If not inverted...
3654 Controls.bank_time += mouse_axis[kc_mouse[21].value];
3656 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
3660 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3661 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
3662 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
3665 //----------- Read forward_thrust_time -------------
3668 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
3669 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
3670 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
3671 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
3674 if ( (use_joystick)&&(kc_joystick[23].value < 255 )) {
3675 if ( !kc_joystick[24].value ) // If not inverted...
3676 Controls.forward_thrust_time -= joy_axis[kc_joystick[23].value];
3678 Controls.forward_thrust_time += joy_axis[kc_joystick[23].value];
3681 // From joystick buttons
3682 if ( (use_joystick)&&(kc_joystick[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_joystick[2].value );
3683 if ( (use_joystick)&&(kc_joystick[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_joystick[3].value );
3686 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
3687 if ( !kc_mouse[24].value ) // If not inverted...
3688 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
3690 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
3693 // From mouse buttons
3694 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
3695 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
3697 //----------- Read afterburner_state -------------
3700 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
3701 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
3703 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
3705 if ( (use_joystick)&&(kc_joystick[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_joystick[27].value);
3707 //-------Read headlight key--------------------------
3709 if (kc_keyboard[52].value < 255 )
3710 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
3711 if (kc_keyboard[53].value < 255 )
3712 Controls.headlight_count+=key_down_count(kc_keyboard[53].value);
3713 if ((use_joystick)&&(kc_joystick[30].value < 255 ))
3714 Controls.headlight_count+=joy_get_button_down_cnt(kc_joystick[30].value);
3716 //--------Read Cycle Primary Key------------------
3718 if (kc_keyboard[48].value<255)
3719 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
3720 if (kc_keyboard[49].value<255)
3721 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
3722 if ((use_joystick)&&(kc_joystick[28].value < 255 ))
3723 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_joystick[28].value);
3726 //--------Read Cycle Secondary Key------------------
3728 if (kc_keyboard[50].value<255)
3729 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
3730 if (kc_keyboard[51].value<255)
3731 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
3732 if ((use_joystick)&&(kc_joystick[29].value < 255 ))
3733 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_joystick[29].value);
3735 //--------Read Toggle Bomb key----------------------
3737 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
3739 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
3741 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
3742 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
3744 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3745 HUD_init_message ("No bombs available!");
3749 if (Players[Player_num].secondary_ammo[bomb]==0)
3751 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3752 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
3756 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
3757 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
3762 //---------Read Energy->Shield key----------
3764 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
3765 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
3766 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
3767 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
3769 //----------- Read fire_primary_down_count
3770 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
3771 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
3772 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_joystick[0].value);
3773 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
3775 //----------- Read fire_primary_state
3776 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
3777 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
3778 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_joystick[0].value);
3779 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
3781 //----------- Read fire_secondary_down_count
3782 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
3783 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
3784 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_joystick[1].value);
3785 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
3787 //----------- Read fire_secondary_state
3788 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
3789 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
3790 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_joystick[1].value);
3791 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
3793 //----------- Read fire_flare_down_count
3794 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
3795 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
3796 if ((use_joystick)&&(kc_joystick[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_joystick[4].value);
3797 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
3799 //----------- Read drop_bomb_down_count
3800 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
3801 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
3802 if ((use_joystick)&&(kc_joystick[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_joystick[26].value);
3803 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
3805 //----------- Read rear_view_down_count
3806 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
3807 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
3808 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_joystick[25].value);
3809 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
3811 //----------- Read rear_view_down_state
3812 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
3813 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
3814 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_joystick[25].value);
3815 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
3817 //----------- Read automap_down_count
3818 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
3819 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
3821 //----------- Read automap_state
3822 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
3823 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
3825 //----------- Read stupid-cruise-control-type of throttle.
3827 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
3828 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
3829 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
3830 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
3831 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
3833 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
3836 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
3837 if (Cruise_speed < 0 ) Cruise_speed = 0;
3839 if (Controls.forward_thrust_time==0)
3840 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
3843 #if !defined(MACINTOSH)
3844 //read_head_tracker();
3846 // Read external controls
3847 // if (kc_use_external_control || CybermouseActive)
3848 // kconfig_read_external_controls();
3851 //----------- Clamp values between -FrameTime and FrameTime
3852 if (FrameTime > F1_0 )
3853 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
3855 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
3856 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
3857 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
3858 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
3859 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
3860 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
3861 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
3863 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
3864 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
3865 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
3866 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
3867 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
3868 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
3869 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
3872 //--------- Don't do anything if in debug mode
3874 if ( keyd_pressed[KEY_DELETE] ) {
3875 memset( &Controls, 0, sizeof(control_info) );
3881 void reset_cruise(void)
3887 void kc_set_controls()
3891 for (i=0; i<NUM_KEY_CONTROLS; i++ )
3892 kc_keyboard[i].value = kconfig_settings[0][i];
3894 if ( (Config_control_type>0) && (Config_control_type<5)) {
3895 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3896 kc_joystick[i].value = kconfig_settings[Config_control_type][i];
3897 if (kc_joystick[i].type == BT_INVERT ) {
3898 if (kc_joystick[i].value!=1)
3899 kc_joystick[i].value = 0;
3900 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
3903 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
3904 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3905 kc_mouse[i].value = kconfig_settings[Config_control_type][i];
3906 if (kc_mouse[i].type == BT_INVERT ) {
3907 if (kc_mouse[i].value!=1)
3908 kc_mouse[i].value = 0;
3909 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
3912 } else if (Config_control_type == CONTROL_WINJOYSTICK) {
3913 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3914 kc_superjoy[i].value = kconfig_settings[Config_control_type][i];
3915 if (kc_superjoy[i].type == BT_INVERT ) {
3916 if (kc_superjoy[i].value!=1)
3917 kc_superjoy[i].value = 0;
3918 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
3924 for (i=0; i<NUM_D2X_CONTROLS; i++ )
3925 kc_d2x[i].value = kconfig_d2x_settings[i];
3929 #if 0 //ndef MACINTOSH // no mac support for vr headset
3931 void kconfig_center_headset()
3935 vfx_center_headset();
3937 // } else if (iglasses_headset_installed) {
3938 // } else if (Victor_headset_installed) {
3944 #endif // end of #ifndef MACINTOSH for kconfig_center_headset
3946 void CybermouseAdjust ()
3948 /* if ( Player_num > -1 ) {
3949 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
3950 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
3951 Auto_leveling_on = 0;
3953 if ( kc_external_version > 0 ) {
3954 vms_matrix tempm, ViewMatrix;
3955 vms_angvec * Kconfig_abs_movement;
3958 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
3960 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
3961 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
3962 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
3963 Objects[Players[Player_num].objnum].orient = ViewMatrix;
3965 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
3966 if (oem_message[0] != '\0' )
3967 HUD_init_message( oem_message );
3971 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
3972 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
3973 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
3974 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
3975 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
3976 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
3977 // Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
3978 // Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
3979 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
3980 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
3981 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
3982 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
3983 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
3984 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
3985 // Controls.automap_down_count += kc_external_control->automap_down_count;
3986 // Controls.automap_state |= kc_external_control->automap_state;
3989 char GetKeyValue (char key)
3991 mprintf ((0,"Returning %c!\n",kc_keyboard[(int)key].value));
3992 return (kc_keyboard[(int)key].value);
3995 #if !defined(MACINTOSH)
3998 extern object *obj_find_first_of_type (int);
3999 void kconfig_read_external_controls()
4004 if ( !kc_enable_external_control ) return;
4006 if ( kc_external_version == 0 )
4007 memset( kc_external_control, 0, sizeof(ext_control_info));
4008 else if ( kc_external_version > 0 ) {
4010 if (kc_external_version>=4)
4011 memset( kc_external_control, 0, sizeof(advanced_ext_control_info));
4012 else if (kc_external_version>0)
4013 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 );
4014 else if (kc_external_version>2)
4015 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof(vms_matrix) +4 );
4017 if ( kc_external_version > 1 ) {
4018 // Write ship pos and angles to external controls...
4019 ubyte *temp_ptr = (ubyte *)kc_external_control;
4020 vms_vector *ship_pos;
4021 vms_matrix *ship_orient;
4022 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
4023 temp_ptr += sizeof(ext_control_info) + sizeof(vms_angvec) + 64;
4024 ship_pos = (vms_vector *)temp_ptr;
4025 temp_ptr += sizeof(vms_vector);
4026 ship_orient = (vms_matrix *)temp_ptr;
4027 // Fill in ship postion...
4028 *ship_pos = Objects[Players[Player_num].objnum].pos;
4029 // Fill in ship orientation...
4030 *ship_orient = Objects[Players[Player_num].objnum].orient;
4032 if (kc_external_version>=4)
4034 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
4036 temp_ptr->headlight_state=(Players[Player_num].flags & PLAYER_FLAGS_HEADLIGHT_ON);
4037 temp_ptr->primary_weapon_flags=Players[Player_num].primary_weapon_flags;
4038 temp_ptr->secondary_weapon_flags=Players[Player_num].secondary_weapon_flags;
4039 temp_ptr->current_primary_weapon=Primary_weapon;
4040 temp_ptr->current_secondary_weapon=Secondary_weapon;
4042 temp_ptr->current_guidebot_command=Escort_goal_object;
4044 temp_ptr->force_vector=ExtForceVec;
4045 temp_ptr->force_matrix=ExtApplyForceMatrix;
4047 temp_ptr->joltinfo[i]=ExtJoltInfo[i];
4049 temp_ptr->x_vibrate_info[i]=ExtXVibrateInfo[i];
4050 temp_ptr->x_vibrate_clear=ExtXVibrateClear;
4051 temp_ptr->game_status=ExtGameStatus;
4053 memset ((void *)&ExtForceVec,0,sizeof(vms_vector));
4054 memset ((void *)&ExtApplyForceMatrix,0,sizeof(vms_matrix));
4059 ExtXVibrateInfo[i]=0;
4064 if ( Automap_active ) // (If in automap...)
4065 kc_external_control->automap_state = 1;
4066 //memset(&r,0,sizeof(r));
4070 int386 ( kc_external_intno, &r, &r); // Read external info...
4074 if ( Player_num > -1 ) {
4075 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
4076 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
4077 Auto_leveling_on = 0;
4079 if ( kc_external_version > 0 ) {
4080 vms_matrix tempm, ViewMatrix;
4081 vms_angvec * Kconfig_abs_movement;
4084 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(ext_control_info));
4086 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
4087 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
4088 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
4089 Objects[Players[Player_num].objnum].orient = ViewMatrix;
4091 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
4092 if (oem_message[0] != '\0' )
4093 HUD_init_message( oem_message );
4097 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
4098 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
4099 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
4100 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
4101 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
4102 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
4103 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
4104 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
4105 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
4106 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
4107 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
4108 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
4109 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
4110 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
4111 Controls.automap_down_count += kc_external_control->automap_down_count;
4112 Controls.automap_state |= kc_external_control->automap_state;
4114 if (kc_external_version>=3)
4116 ubyte *temp_ptr = (ubyte *)kc_external_control;
4117 temp_ptr += (sizeof(ext_control_info) + sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof (vms_matrix));
4120 Controls.cycle_primary_count=(*(temp_ptr));
4122 Controls.cycle_secondary_count=(*(temp_ptr+1));
4125 Controls.afterburner_state=(*(temp_ptr+2));
4127 Controls.headlight_count=(*(temp_ptr+3));
4129 if (kc_external_version>=4)
4132 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
4135 if (temp_ptr->keyboard[i])
4138 if (temp_ptr->Reactor_blown)
4140 if (Game_mode & GM_MULTI)
4141 net_destroy_controlcen (obj_find_first_of_type (OBJ_CNTRLCEN));
4143 do_controlcen_destroyed_stuff(obj_find_first_of_type (OBJ_CNTRLCEN));