1 /* $Id: kconfig.c,v 1.35 2005-04-04 08:56:34 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..
26 static char rcsid[] = "$Id: kconfig.c,v 1.35 2005-04-04 08:56:34 btb Exp $";
39 #include "pa_enabl.h" //$$POLY_ACC
84 ubyte ExtGameStatus=1;
86 vms_vector ExtForceVec;
87 vms_matrix ExtApplyForceMatrix;
89 int ExtJoltInfo[3]={0,0,0};
90 int ExtXVibrateInfo[2]={0,0};
91 int ExtYVibrateInfo[2]={0,0};
92 ubyte ExtXVibrateClear=0;
93 ubyte ExtYVibrateClear=0;
95 #define TABLE_CREATION 1
97 // Array used to 'blink' the cursor while waiting for a keypress.
98 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 };
100 //char * invert_text[2] = { "N", "Y" };
101 //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" };
102 //char * joyaxis_text[4] = { "X1", "Y1", "X2", "Y2" };
103 //char * mouseaxis_text[2] = { "L/R", "F/B" };
104 //char * mousebutton_text[3] = { "Left", "Right", "Mid" };
106 int invert_text[2] = { TNUM_N, TNUM_Y };
108 #ifndef USE_LINUX_JOY
110 int joybutton_text[28] =
111 { TNUM_BTN_1, TNUM_BTN_2, TNUM_BTN_3, TNUM_BTN_4,
115 TNUM_HAT_L, TNUM_HAT_R, TNUM_HAT_U, TNUM_HAT_D,
119 int joyaxis_text[7] = { TNUM_X1, TNUM_Y1, TNUM_Z1, TNUM_UN, TNUM_P1,TNUM_R1,TNUM_YA1 };
120 #elif defined(SDL_INPUT)
121 char *joybutton_text[MAX_BUTTONS];
122 char *joyaxis_text[JOY_MAX_AXES];
124 int joybutton_text[28] =
125 { TNUM_BTN_1, TNUM_BTN_2, TNUM_BTN_3, TNUM_BTN_4,
126 -1, TNUM_TRIG, TNUM_LEFT, TNUM_HAT_L,
127 TNUM_RIGHT, -1, TNUM_HAT2_D, TNUM_HAT_R,
128 TNUM_MID, -1, TNUM_HAT2_R, TNUM_HAT_U,
129 TNUM_HAT2_L, -1, TNUM_HAT2_U, TNUM_HAT_D,
130 TNUM_TRIG, TNUM_LEFT, TNUM_RIGHT, -1,
131 TNUM_UP, TNUM_DOWN, TNUM_LEFT, TNUM_RIGHT };
133 int joyaxis_text[7] = { TNUM_X1, TNUM_Y1, TNUM_Z1, TNUM_UN, TNUM_P1,TNUM_R1,TNUM_YA1 };
134 // int joyaxis_text[4] = { TNUM_X1, TNUM_Y1, TNUM_X2, TNUM_Y2 };
138 int mouseaxis_text[3] = { TNUM_L_R, TNUM_F_B, TNUM_Z1 };
140 int mousebutton_text[3] = { TNUM_LEFT, TNUM_RIGHT, TNUM_MID };
141 char * mousebutton_textra[13] = { "M4", "M5", "M6", "M7", "M8", "M9", "M10","M11","M12","M13","M14","M15","M16" };//text for buttons above 3. -MPM
143 char *mousebutton_text[3] = { "Btn", "", "" }; // only one silly mouse button on the mac
147 char * key_text[256] = {
148 "","S","D","F","H","G","Z","X","C","V","","B","Q", "W", "E", "R",
149 "Y","T","1","2","3","4","6","5","=","9","7","-", "8", "0", "]", "O",
150 "U","[","I","P","RET","L","J","'","K", ";", "\\", ",", "/", "N", "M", ".",
151 "TAB","SPC","`","DEL","","ESC","","APL","SHIFT","CAPSL","OPTN","CTRL","","","","A",
152 "","PAD.","","PAD*","","PAD+","","NMLCK","","","","PAD/","ENTER","","PAD-","",
153 "","PAD=","PAD0","PAD1","PAD2","PAD3","PAD4","PAD5","PAD6","PAD7","","PAD8","PAD9","","","",
154 "F5","F6","F7","","F8","F9","","F11","","F13","","F14","","F10","","F12",
155 "","PAUSE","HELP","HOME","PGUP","DEL","","END","F2","","F1","LARW","RARW","DARW","UARW","",
156 "","","","","","","","","","","","","","","","",
157 "","","","","","","","","","","","","","","","",
158 "","","","","","","","","","","","","","","","",
159 "","","","","","","","","","","","","","","","",
160 "","","","","","","","","","","","","","","","",
161 "","","","","","","","","","","","","","","","",
162 "","","","","","","","","","","","","","","","",
163 "","","","","","","","","","","","","","","",""};
165 #if !defined OGL && !defined SDL_INPUT
166 char * key_text[256] = { \
167 "","ESC","1","2","3","4","5","6","7","8","9","0","-", \
168 "=","BSPC","TAB","Q","W","E","R","T","Y","U","I","O", \
169 "P","[","]","
\83","LCTRL","A","S","D","F", \
170 "G","H","J","K","L",";","'","`", \
171 "LSHFT","\\","Z","X","C","V","B","N","M",",", \
172 ".","/","RSHFT","PAD*","LALT","SPC", \
173 "CPSLK","F1","F2","F3","F4","F5","F6","F7","F8","F9", \
174 "F10","NMLCK","SCLK","PAD7","PAD8","PAD9","PAD-", \
175 "PAD4","PAD5","PAD6","PAD+","PAD1","PAD2","PAD3","PAD0", \
176 "PAD.","","","","F11","F12","","","","","","","","","", \
177 "","","","","","","","","","","","","","","","","","","","", \
178 "","","","","","","","","","","","","","","","","","","","", \
179 "","","","","","","","","","","","","","","","","","", \
180 "PAD
\83","RCTRL","","","","","","","","","","","","","", \
181 "","","","","","","","","","","PAD/","","","RALT","", \
182 "","","","","","","","","","","","","","HOME","
\82","PGUP", \
183 "","
\81","","
\7f","","END","
\80","PGDN","INS", \
184 "DEL","","","","","","","","","","","","","","","","","", \
185 "","","","","","","","","","","","","","","","","","","","", \
186 "","","","","","","" };
191 //added/removed by Victor Rachels for adding rebindable keys for these
192 // KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0
193 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 };
195 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 };
198 //extern void GameLoop(int, int );
200 extern void transfer_energy_to_shield(fix);
201 extern void CyclePrimary(),CycleSecondary(),InitMarkerInput();
202 extern ubyte DefiningMarkerMessage;
203 extern char CybermouseActive;
206 extern int joydefsw_do_button();
207 extern int joydefsw_do_winjoybutton(int *axis);
208 extern joydefsw_win_joyselect(char *title);
211 control_info Controls;
215 // macros for drawing lo/hi res kconfig screens (see scores.c as well)
217 #define LHX(x) ((x)*(MenuHires?2:1))
218 #define LHY(y) ((y)*(MenuHires?2.4:1))
222 #define BT_MOUSE_BUTTON 1
223 #define BT_MOUSE_AXIS 2
224 #define BT_JOY_BUTTON 3
225 #define BT_JOY_AXIS 4
228 char *btype_text[] = { "BT_KEY", "BT_MOUSE_BUTTON", "BT_MOUSE_AXIS", "BT_JOY_BUTTON", "BT_JOY_AXIS", "BT_INVERT" };
232 typedef struct kc_item {
233 short id; // The id of this item
241 ubyte value; // what key,button,etc
247 ubyte kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS];
249 //added on 2/4/99 by Victor Rachels to add d1x new keys
250 ubyte kconfig_d2x_settings[MAX_D2X_CONTROLS];
251 //end this section addition - VR
253 //----------- WARNING!!!!!!! -------------------------------------------
254 // THESE NEXT FOUR BLOCKS OF DATA ARE GENERATED BY PRESSING DEL+F12 WHEN
255 // IN THE KEYBOARD CONFIG SCREEN. BASICALLY, THAT PROCEDURE MODIFIES THE
256 // U,D,L,R FIELDS OF THE ARRAYS AND DUMPS THE NEW ARRAYS INTO KCONFIG.COD
257 //-------------------------------------------------------------------------
258 /*ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
259 {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},
260 {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},
261 {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},
262 {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},
263 {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},
264 {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},
265 {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},
269 ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
270 {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},
271 {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},
272 {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},
273 {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},
274 {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},
275 {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},
276 {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},
278 {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},
284 kc_item kc_keyboard[NUM_KEY_CONTROLS] = {
285 { 0, 15, 49, 71, 26, 55, 2, 55, 1,"Pitch forward", BT_KEY, 255 },
286 { 1, 15, 49,100, 26, 50, 3, 0, 24,"Pitch forward", BT_KEY, 255 },
287 { 2, 15, 57, 71, 26, 0, 4, 25, 3,"Pitch backward", BT_KEY, 255 },
288 { 3, 15, 57,100, 26, 1, 5, 2, 26,"Pitch backward", BT_KEY, 255 },
289 { 4, 15, 65, 71, 26, 2, 6, 27, 5,"Turn left", BT_KEY, 255 },
290 { 5, 15, 65,100, 26, 3, 7, 4, 28,"Turn left", BT_KEY, 255 },
291 { 6, 15, 73, 71, 26, 4, 8, 29, 7,"Turn right", BT_KEY, 255 },
292 { 7, 15, 73,100, 26, 5, 9, 6, 34,"Turn right", BT_KEY, 255 },
293 { 8, 15, 85, 71, 26, 6, 10, 35, 9,"Slide on", BT_KEY, 255 },
294 { 9, 15, 85,100, 26, 7, 11, 8, 36,"Slide on", BT_KEY, 255 },
295 { 10, 15, 93, 71, 26, 8, 12, 37, 11,"Slide left", BT_KEY, 255 },
296 { 11, 15, 93,100, 26, 9, 13, 10, 44,"Slide left", BT_KEY, 255 },
297 { 12, 15,101, 71, 26, 10, 14, 45, 13,"Slide right", BT_KEY, 255 },
298 { 13, 15,101,100, 26, 11, 15, 12, 30,"Slide right", BT_KEY, 255 },
299 { 14, 15,109, 71, 26, 12, 16, 31, 15,"Slide up", BT_KEY, 255 },
300 { 15, 15,109,100, 26, 13, 17, 14, 32,"Slide up", BT_KEY, 255 },
301 { 16, 15,117, 71, 26, 14, 18, 33, 17,"Slide down", BT_KEY, 255 },
302 { 17, 15,117,100, 26, 15, 19, 16, 46,"Slide down", BT_KEY, 255 },
303 { 18, 15,129, 71, 26, 16, 20, 47, 19,"Bank on", BT_KEY, 255 },
304 { 19, 15,129,100, 26, 17, 21, 18, 38,"Bank on", BT_KEY, 255 },
305 { 20, 15,137, 71, 26, 18, 22, 39, 21,"Bank left", BT_KEY, 255 },
306 { 21, 15,137,100, 26, 19, 23, 20, 40,"Bank left", BT_KEY, 255 },
307 { 22, 15,145, 71, 26, 20, 48, 41, 23,"Bank right", BT_KEY, 255 },
308 { 23, 15,145,100, 26, 21, 49, 22, 42,"Bank right", BT_KEY, 255 },
309 { 24,158, 49, 83, 26, 51, 26, 1, 25,"Fire primary", BT_KEY, 255 },
310 { 25,158, 49,112, 26, 54, 27, 24, 2,"Fire primary", BT_KEY, 255 },
311 { 26,158, 57, 83, 26, 24, 28, 3, 27,"Fire secondary", BT_KEY, 255 },
312 { 27,158, 57,112, 26, 25, 29, 26, 4,"Fire secondary", BT_KEY, 255 },
313 { 28,158, 65, 83, 26, 26, 34, 5, 29,"Fire flare", BT_KEY, 255 },
314 { 29,158, 65,112, 26, 27, 35, 28, 6,"Fire flare", BT_KEY, 255 },
315 { 30,158,105, 83, 26, 44, 32, 13, 31,"Accelerate", BT_KEY, 255 },
316 { 31,158,105,112, 26, 45, 33, 30, 14,"Accelerate", BT_KEY, 255 },
317 { 32,158,113, 83, 26, 30, 46, 15, 33,"reverse", BT_KEY, 255 },
318 { 33,158,113,112, 26, 31, 47, 32, 16,"reverse", BT_KEY, 255 },
319 { 34,158, 73, 83, 26, 28, 36, 7, 35,"Drop Bomb", BT_KEY, 255 },
320 { 35,158, 73,112, 26, 29, 37, 34, 8,"Drop Bomb", BT_KEY, 255 },
321 { 36,158, 85, 83, 26, 34, 44, 9, 37,"REAR VIEW", BT_KEY, 255 },
322 { 37,158, 85,112, 26, 35, 45, 36, 10,"REAR VIEW", BT_KEY, 255 },
323 { 38,158,133, 83, 26, 46, 40, 19, 39,"Cruise Faster", BT_KEY, 255 },
324 { 39,158,133,112, 26, 47, 41, 38, 20,"Cruise Faster", BT_KEY, 255 },
325 { 40,158,141, 83, 26, 38, 42, 21, 41,"Cruise Slower", BT_KEY, 255 },
326 { 41,158,141,112, 26, 39, 43, 40, 22,"Cruise Slower", BT_KEY, 255 },
327 { 42,158,149, 83, 26, 40, 52, 23, 43,"Cruise Off", BT_KEY, 255 },
328 { 43,158,149,112, 26, 41, 53, 42, 48,"Cruise Off", BT_KEY, 255 },
329 { 44,158, 93, 83, 26, 36, 30, 11, 45,"Automap", BT_KEY, 255 },
330 { 45,158, 93,112, 26, 37, 31, 44, 12,"Automap", BT_KEY, 255 },
331 { 46,158,121, 83, 26, 32, 38, 17, 47,"Afterburner", BT_KEY, 255 },
332 { 47,158,121,112, 26, 33, 39, 46, 18,"Afterburner", BT_KEY, 255 },
333 { 48, 15,161, 71, 26, 22, 50, 43, 49,"Cycle Primary", BT_KEY, 255 },
334 { 49, 15,161,100, 26, 23, 51, 48, 52,"Cycle Primary", BT_KEY, 255 },
335 { 50, 15,169, 71, 26, 48, 1, 53, 51,"Cycle Second", BT_KEY, 255 },
336 { 51, 15,169,100, 26, 49, 24, 50, 54,"Cycle Second", BT_KEY, 255 },
337 { 52,158,163, 83, 26, 42, 54, 49, 53,"Headlight", BT_KEY, 255 },
338 { 53,158,163,112, 26, 43, 55, 52, 50,"Headlight", BT_KEY, 255 },
339 { 54,158,171, 83, 26, 52, 56, 51, 55,"Energy->Shield", BT_KEY, 255 },
340 { 55,158,171,112, 26, 53, 0, 54, 0,"Energy->Shield", BT_KEY, 255 },
341 { 56,158,179,83, 26, 54, 0, 0, 0, "Toggle Bomb", BT_KEY,255},
343 kc_item kc_joystick[NUM_OTHER_CONTROLS] = {
344 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
345 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
346 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
347 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
348 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
349 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
350 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
351 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
352 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
353 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
354 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
355 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
356 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
357 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
358 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
359 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
360 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
361 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
362 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
363 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
364 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
365 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
366 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
367 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
368 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
369 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
370 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
371 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
372 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
373 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
374 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
376 kc_item kc_superjoy[NUM_OTHER_CONTROLS] = {
377 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
378 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
379 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
380 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
381 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
382 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
383 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
384 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
385 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
386 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
387 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
388 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
389 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
390 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
391 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
392 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
393 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
394 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
395 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
396 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
397 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
398 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
399 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
400 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
401 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
402 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
403 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
404 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
405 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
406 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
407 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
410 kc_item kc_mouse[NUM_OTHER_CONTROLS] = {
411 { 0, 25, 46, 85, 26, 12, 1, 24, 5,"Fire primary", BT_MOUSE_BUTTON, 255 },
412 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_MOUSE_BUTTON, 255 },
413 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_MOUSE_BUTTON, 255 },
414 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_MOUSE_BUTTON, 255 },
415 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_MOUSE_BUTTON, 255 },
416 { 5,180, 46, 59, 26, 24, 6, 0, 1,"Slide on", BT_MOUSE_BUTTON, 255 },
417 { 6,180, 54, 59, 26, 5, 7, 1, 4,"Slide left", BT_MOUSE_BUTTON, 255 },
418 { 7,180, 62, 59, 26, 6, 8, 4, 26,"Slide right", BT_MOUSE_BUTTON, 255 },
419 { 8,180, 70, 59, 26, 7, 9, 26, 9,"Slide up", BT_MOUSE_BUTTON, 255 },
420 { 9,180, 78, 59, 26, 8, 10, 8, 2,"Slide down", BT_MOUSE_BUTTON, 255 },
421 { 10,180, 90, 59, 26, 9, 11, 2, 3,"Bank on", BT_MOUSE_BUTTON, 255 },
422 { 11,180, 98, 59, 26, 10, 12, 3, 12,"Bank left", BT_MOUSE_BUTTON, 255 },
423 { 12,180,106, 59, 26, 11, 0, 11, 25,"Bank right", BT_MOUSE_BUTTON, 255 },
424 { 13,103,138, 58, 26, 27, 15, 25, 14,"Pitch U/D", BT_MOUSE_AXIS, 255 },
425 { 14,103,138,106, 8, 23, 16, 13, 15,"Pitch U/D", BT_INVERT, 255 },
426 { 15,103,146, 58, 26, 13, 17, 14, 16,"Turn L/R", BT_MOUSE_AXIS, 255 },
427 { 16,103,146,106, 8, 14, 18, 15, 17,"Turn L/R", BT_INVERT, 255 },
428 { 17,103,154, 58, 26, 15, 19, 16, 18,"Slide L/R", BT_MOUSE_AXIS, 255 },
429 { 18,103,154,106, 8, 16, 20, 17, 19,"Slide L/R", BT_INVERT, 255 },
430 { 19,103,162, 58, 26, 17, 21, 18, 20,"Slide U/D", BT_MOUSE_AXIS, 255 },
431 { 20,103,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
432 { 21,103,170, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_MOUSE_AXIS, 255 },
433 { 22,103,170,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
434 { 23,103,182, 58, 26, 21, 14, 22, 24,"throttle", BT_MOUSE_AXIS, 255 },
435 { 24,103,182,106, 8, 22, 5, 23, 0,"throttle", BT_INVERT, 255 },
436 { 25, 25,109, 85, 26, 3, 27, 12, 13,"REAR VIEW", BT_MOUSE_BUTTON, 255 },
437 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_MOUSE_BUTTON, 255 },
438 { 27, 25,117, 85, 26, 25, 13, 25, 13,"Afterburner", BT_MOUSE_BUTTON, 255 },
442 //added on 2/4/99 by Victor Rachels to add d1x new keys
443 kc_item kc_d2x[NUM_D2X_CONTROLS] = {
444 // id,x,y,w1,w2,u,d,l,r,text_num1,type,value
445 { 0, 15, 49, 71, 26, 27, 2, 27, 1, "WEAPON 1", BT_KEY, 255},
446 { 1, 15, 49,100, 26, 26, 3, 0, 2, "WEAPON 1", BT_JOY_BUTTON, 255},
447 { 2, 15, 57, 71, 26, 0, 4, 1, 3, "WEAPON 2", BT_KEY, 255},
448 { 3, 15, 57,100, 26, 1, 5, 2, 4, "WEAPON 2", BT_JOY_BUTTON, 255},
449 { 4, 15, 65, 71, 26, 2, 6, 3, 5, "WEAPON 3", BT_KEY, 255},
450 { 5, 15, 65,100, 26, 3, 7, 4, 6, "WEAPON 3", BT_JOY_BUTTON, 255},
451 { 6, 15, 73, 71, 26, 4, 8, 5, 7, "WEAPON 4", BT_KEY, 255},
452 { 7, 15, 73,100, 26, 5, 9, 6, 8, "WEAPON 4", BT_JOY_BUTTON, 255},
453 { 8, 15, 81, 71, 26, 6, 10, 7, 9, "WEAPON 5", BT_KEY, 255},
454 { 9, 15, 81,100, 26, 7, 11, 8, 10, "WEAPON 5", BT_JOY_BUTTON, 255},
456 { 10, 15, 89, 71, 26, 8, 12, 9, 11, "WEAPON 6", BT_KEY, 255},
457 { 11, 15, 89,100, 26, 9, 13, 10, 12, "WEAPON 6", BT_JOY_BUTTON, 255},
458 { 12, 15, 97, 71, 26, 10, 14, 11, 13, "WEAPON 7", BT_KEY, 255},
459 { 13, 15, 97,100, 26, 11, 15, 12, 14, "WEAPON 7", BT_JOY_BUTTON, 255},
460 { 14, 15,105, 71, 26, 12, 16, 13, 15, "WEAPON 8", BT_KEY, 255},
461 { 15, 15,105,100, 26, 13, 17, 14, 16, "WEAPON 8", BT_JOY_BUTTON, 255},
462 { 16, 15,113, 71, 26, 14, 18, 15, 17, "WEAPON 9", BT_KEY, 255},
463 { 17, 15,113,100, 26, 15, 19, 16, 18, "WEAPON 9", BT_JOY_BUTTON, 255},
464 { 18, 15,121, 71, 26, 16, 20, 17, 19, "WEAPON 0", BT_KEY, 255},
465 { 19, 15,121,100, 26, 17, 21, 18, 20, "WEAPON 0", BT_JOY_BUTTON, 255},
467 //{ 20, 15,131, 71, 26, 18, 22, 19, 21, "CYC PRIMARY", BT_KEY, 255},
468 //{ 21, 15,131,100, 26, 19, 23, 20, 22, "CYC PRIMARY", BT_JOY_BUTTON, 255},
469 //{ 22, 15,139, 71, 26, 20, 24, 21, 23, "CYC SECONDARY", BT_KEY, 255},
470 //{ 23, 15,139,100, 26, 21, 25, 22, 24, "CYC SECONDARY", BT_JOY_BUTTON, 255},
471 //{ 24, 8,147, 78, 26, 22, 26, 23, 25, "TOGGLE_PRIM AUTO", BT_KEY, 255},
472 //{ 25, 8,147,107, 26, 23, 27, 24, 26, "TOGGLE_PRIM_AUTO", BT_JOY_BUTTON, 255},
473 //{ 26, 8,155, 78, 26, 24, 1, 25, 27, "TOGGLE SEC AUTO", BT_KEY, 255},
474 //{ 27, 8,155,107, 26, 25, 0, 26, 0, "TOGGLE SEC AUTO", BT_JOY_BUTTON, 255},
476 //end this section addition - VR
479 #else // ifndef MACINTOSH (following are macintosh controls)
481 ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
482 {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},
483 {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},
484 {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},
485 {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},
486 {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},
487 {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},
488 {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},
491 ubyte default_firebird_settings[MAX_CONTROLS] =
492 {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};
494 ubyte default_mousestick_settings[MAX_CONTROLS] =
495 {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};
497 kc_item kc_keyboard[NUM_KEY_CONTROLS] = {
498 { 0, 15, 49, 71, 26, 55, 2, 55, 1,"Pitch forward", BT_KEY, 255 },
499 { 1, 15, 49,100, 26, 50, 3, 0, 24,"Pitch forward", BT_KEY, 255 },
500 { 2, 15, 57, 71, 26, 0, 4, 25, 3,"Pitch backward", BT_KEY, 255 },
501 { 3, 15, 57,100, 26, 1, 5, 2, 26,"Pitch backward", BT_KEY, 255 },
502 { 4, 15, 65, 71, 26, 2, 6, 27, 5,"Turn left", BT_KEY, 255 },
503 { 5, 15, 65,100, 26, 3, 7, 4, 28,"Turn left", BT_KEY, 255 },
504 { 6, 15, 73, 71, 26, 4, 8, 29, 7,"Turn right", BT_KEY, 255 },
505 { 7, 15, 73,100, 26, 5, 9, 6, 34,"Turn right", BT_KEY, 255 },
506 { 8, 15, 85, 71, 26, 6, 10, 35, 9,"Slide on", BT_KEY, 255 },
507 { 9, 15, 85,100, 26, 7, 11, 8, 36,"Slide on", BT_KEY, 255 },
508 { 10, 15, 93, 71, 26, 8, 12, 37, 11,"Slide left", BT_KEY, 255 },
509 { 11, 15, 93,100, 26, 9, 13, 10, 44,"Slide left", BT_KEY, 255 },
510 { 12, 15,101, 71, 26, 10, 14, 45, 13,"Slide right", BT_KEY, 255 },
511 { 13, 15,101,100, 26, 11, 15, 12, 30,"Slide right", BT_KEY, 255 },
512 { 14, 15,109, 71, 26, 12, 16, 31, 15,"Slide up", BT_KEY, 255 },
513 { 15, 15,109,100, 26, 13, 17, 14, 32,"Slide up", BT_KEY, 255 },
514 { 16, 15,117, 71, 26, 14, 18, 33, 17,"Slide down", BT_KEY, 255 },
515 { 17, 15,117,100, 26, 15, 19, 16, 46,"Slide down", BT_KEY, 255 },
516 { 18, 15,129, 71, 26, 16, 20, 47, 19,"Bank on", BT_KEY, 255 },
517 { 19, 15,129,100, 26, 17, 21, 18, 38,"Bank on", BT_KEY, 255 },
518 { 20, 15,137, 71, 26, 18, 22, 39, 21,"Bank left", BT_KEY, 255 },
519 { 21, 15,137,100, 26, 19, 23, 20, 40,"Bank left", BT_KEY, 255 },
520 { 22, 15,145, 71, 26, 20, 48, 41, 23,"Bank right", BT_KEY, 255 },
521 { 23, 15,145,100, 26, 21, 49, 22, 42,"Bank right", BT_KEY, 255 },
522 { 24,158, 49, 83, 26, 51, 26, 1, 25,"Fire primary", BT_KEY, 255 },
523 { 25,158, 49,112, 26, 54, 27, 24, 2,"Fire primary", BT_KEY, 255 },
524 { 26,158, 57, 83, 26, 24, 28, 3, 27,"Fire secondary", BT_KEY, 255 },
525 { 27,158, 57,112, 26, 25, 29, 26, 4,"Fire secondary", BT_KEY, 255 },
526 { 28,158, 65, 83, 26, 26, 34, 5, 29,"Fire flare", BT_KEY, 255 },
527 { 29,158, 65,112, 26, 27, 35, 28, 6,"Fire flare", BT_KEY, 255 },
528 { 30,158,105, 83, 26, 44, 32, 13, 31,"Accelerate", BT_KEY, 255 },
529 { 31,158,105,112, 26, 45, 33, 30, 14,"Accelerate", BT_KEY, 255 },
530 { 32,158,113, 83, 26, 30, 46, 15, 33,"reverse", BT_KEY, 255 },
531 { 33,158,113,112, 26, 31, 47, 32, 16,"reverse", BT_KEY, 255 },
532 { 34,158, 73, 83, 26, 28, 36, 7, 35,"Drop Bomb", BT_KEY, 255 },
533 { 35,158, 73,112, 26, 29, 37, 34, 8,"Drop Bomb", BT_KEY, 255 },
534 { 36,158, 85, 83, 26, 34, 44, 9, 37,"REAR VIEW", BT_KEY, 255 },
535 { 37,158, 85,112, 26, 35, 45, 36, 10,"REAR VIEW", BT_KEY, 255 },
536 { 38,158,133, 83, 26, 46, 40, 19, 39,"Cruise Faster", BT_KEY, 255 },
537 { 39,158,133,112, 26, 47, 41, 38, 20,"Cruise Faster", BT_KEY, 255 },
538 { 40,158,141, 83, 26, 38, 42, 21, 41,"Cruise Slower", BT_KEY, 255 },
539 { 41,158,141,112, 26, 39, 43, 40, 22,"Cruise Slower", BT_KEY, 255 },
540 { 42,158,149, 83, 26, 40, 52, 23, 43,"Cruise Off", BT_KEY, 255 },
541 { 43,158,149,112, 26, 41, 53, 42, 48,"Cruise Off", BT_KEY, 255 },
542 { 44,158, 93, 83, 26, 36, 30, 11, 45,"Automap", BT_KEY, 255 },
543 { 45,158, 93,112, 26, 37, 31, 44, 12,"Automap", BT_KEY, 255 },
544 { 46,158,121, 83, 26, 32, 38, 17, 47,"Afterburner", BT_KEY, 255 },
545 { 47,158,121,112, 26, 33, 39, 46, 18,"Afterburner", BT_KEY, 255 },
546 { 48, 15,161, 71, 26, 22, 50, 43, 49,"Cycle Primary", BT_KEY, 255 },
547 { 49, 15,161,100, 26, 23, 51, 48, 52,"Cycle Primary", BT_KEY, 255 },
548 { 50, 15,169, 71, 26, 48, 1, 53, 51,"Cycle Second", BT_KEY, 255 },
549 { 51, 15,169,100, 26, 49, 24, 50, 54,"Cycle Second", BT_KEY, 255 },
550 { 52,158,163, 83, 26, 42, 54, 49, 53,"Headlight", BT_KEY, 255 },
551 { 53,158,163,112, 26, 43, 55, 52, 50,"Headlight", BT_KEY, 255 },
552 { 54,158,171, 83, 26, 52, 25, 51, 55,"Energy->Shield", BT_KEY, 255 },
553 { 55,158,171,112, 26, 53, 0, 54, 0,"Energy->Shield", BT_KEY, 255 },
555 kc_item kc_joystick[NUM_OTHER_CONTROLS] = {
556 { 0, 25, 46, 85, 28, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
557 { 1, 25, 54, 85, 28, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
558 { 2, 25, 85, 85, 28, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
559 { 3, 25, 93, 85, 28, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
560 { 4, 25, 62, 85, 28, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
561 { 5,180, 46, 79, 28, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
562 { 6,180, 54, 79, 28, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
563 { 7,180, 62, 79, 28, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
564 { 8,180, 70, 79, 28, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
565 { 9,180, 78, 79, 28, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
566 { 10,180, 90, 79, 28, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
567 { 11,180, 98, 79, 28, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
568 { 12,180,106, 79, 28, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
569 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
570 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
571 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
572 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
573 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
574 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
575 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
576 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
577 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
578 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
579 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
580 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
581 { 25, 25,109, 85, 28, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
582 { 26, 25, 70, 85, 28, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
583 { 27, 25,117, 85, 28, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
584 { 28,180,114, 79, 28, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
585 { 29,180,122, 79, 28, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
586 { 30, 25,125, 85, 28, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
588 kc_item kc_superjoy[NUM_OTHER_CONTROLS] = {
589 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
590 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
591 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
592 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
593 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
594 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
595 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
596 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
597 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
598 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
599 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
600 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
601 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
602 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
603 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
604 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
605 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
606 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
607 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
608 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
609 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
610 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
611 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
612 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
613 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
614 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
615 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
616 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
617 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
618 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
619 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
622 kc_item kc_mouse[NUM_OTHER_CONTROLS] = {
623 { 0, 25, 46, 85, 26, 28, 1, 28, 5,"Fire primary", BT_MOUSE_BUTTON, 255 },
624 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_MOUSE_BUTTON, 255 },
625 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_MOUSE_BUTTON, 255 },
626 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_MOUSE_BUTTON, 255 },
627 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_MOUSE_BUTTON, 255 },
628 { 5,180, 46, 59, 26, 24, 6, 0, 1,"Slide on", BT_MOUSE_BUTTON, 255 },
629 { 6,180, 54, 59, 26, 5, 7, 1, 4,"Slide left", BT_MOUSE_BUTTON, 255 },
630 { 7,180, 62, 59, 26, 6, 8, 4, 26,"Slide right", BT_MOUSE_BUTTON, 255 },
631 { 8,180, 70, 59, 26, 7, 9, 26, 9,"Slide up", BT_MOUSE_BUTTON, 255 },
632 { 9,180, 78, 59, 26, 8, 10, 8, 2,"Slide down", BT_MOUSE_BUTTON, 255 },
633 { 10,180, 90, 59, 26, 9, 11, 2, 3,"Bank on", BT_MOUSE_BUTTON, 255 },
634 { 11,180, 98, 59, 26, 10, 12, 3, 12,"Bank left", BT_MOUSE_BUTTON, 255 },
635 { 12,180,106, 59, 26, 11, 28, 11, 25,"Bank right", BT_MOUSE_BUTTON, 255 },
636 { 13,103,138, 58, 26, 27, 15, 27, 14,"Pitch U/D", BT_MOUSE_AXIS, 255 },
637 { 14,103,138,106, 8, 23, 16, 13, 15,"Pitch U/D", BT_INVERT, 255 },
638 { 15,103,146, 58, 26, 13, 17, 14, 16,"Turn L/R", BT_MOUSE_AXIS, 255 },
639 { 16,103,146,106, 8, 14, 18, 15, 17,"Turn L/R", BT_INVERT, 255 },
640 { 17,103,154, 58, 26, 15, 19, 16, 18,"Slide L/R", BT_MOUSE_AXIS, 255 },
641 { 18,103,154,106, 8, 16, 20, 17, 19,"Slide L/R", BT_INVERT, 255 },
642 { 19,103,162, 58, 26, 17, 21, 18, 20,"Slide U/D", BT_MOUSE_AXIS, 255 },
643 { 20,103,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
644 { 21,103,170, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_MOUSE_AXIS, 255 },
645 { 22,103,170,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
646 { 23,103,182, 58, 26, 21, 14, 22, 24,"throttle", BT_MOUSE_AXIS, 255 },
647 { 24,103,182,106, 8, 22, 5, 23, 28,"throttle", BT_INVERT, 255 },
648 { 25, 25,109, 85, 26, 3, 27, 12, 27,"REAR VIEW", BT_MOUSE_BUTTON, 255 },
649 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_MOUSE_BUTTON, 255 },
650 { 27, 25,117, 85, 26, 25, 13, 25, 13,"Afterburner", BT_MOUSE_BUTTON, 255 },
655 //added on 2/4/99 by Victor Rachels to add new keys system
656 ubyte default_kconfig_d2x_settings[MAX_D2X_CONTROLS] = {
657 0x2 ,0xff,0x3 ,0xff,0x4 ,0xff,0x5 ,0xff,0x6 ,0xff,0x7 ,0xff,0x8 ,0xff,0x9 ,
658 0xff,0xa ,0xff,0xb ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
659 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff };
660 //end this section addition - VR
662 void kc_drawitem( kc_item *item, int is_current );
663 void kc_change_key( kc_item * item );
664 void kc_change_joybutton( kc_item * item );
665 void kc_change_mousebutton( kc_item * item );
666 void kc_next_joyaxis(kc_item *item); //added by WraithX on 11/22/00
667 void kc_change_joyaxis( kc_item * item );
668 void kc_change_mouseaxis( kc_item * item );
669 void kc_change_invert( kc_item * item );
670 void kconfig_read_fcs( int raw_axis );
671 void kconfig_set_fcs_button( int btn, int button );
672 void kconfig_read_external_controls( void );
674 // the following methods added by WraithX, 4/17/00
675 int isJoyRotationKey(int test_key)
677 if (test_key == kc_joystick[11].value ||
678 test_key == kc_joystick[12].value)
685 }// method isJoyRotationKey
687 int isMouseRotationKey(int test_key)
689 if (test_key == kc_mouse[11].value ||
690 test_key == kc_mouse[12].value)
697 }// method isMouseRotationKey
699 int isKeyboardRotationKey(int test_key)
701 if (test_key == kc_keyboard[0].value ||
702 test_key == kc_keyboard[1].value ||
703 test_key == kc_keyboard[2].value ||
704 test_key == kc_keyboard[3].value ||
705 test_key == kc_keyboard[4].value ||
706 test_key == kc_keyboard[5].value ||
707 test_key == kc_keyboard[6].value ||
708 test_key == kc_keyboard[7].value ||
709 test_key == kc_keyboard[20].value ||
710 test_key == kc_keyboard[21].value ||
711 test_key == kc_keyboard[22].value ||
712 test_key == kc_keyboard[23].value)
719 }// method isKeyboardRotationKey
720 // end addition - WraithX
722 int kconfig_is_axes_used(int axis)
725 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
726 if (( kc_joystick[i].type == BT_JOY_AXIS ) && (kc_joystick[i].value == axis ))
732 #ifdef TABLE_CREATION
733 int find_item_at( kc_item * items, int nitems, int x, int y )
737 for (i=0; i<nitems; i++ ) {
738 if ( ((items[i].x+items[i].w1)==x) && (items[i].y==y))
744 int find_next_item_up( kc_item * items, int nitems, int citem )
749 x = items[citem].x+items[citem].w1;
754 y = grd_curcanv->cv_bitmap.bm_h-1;
757 x = grd_curcanv->cv_bitmap.bm_w-1;
760 i = find_item_at( items, nitems, x, y );
766 int find_next_item_down( kc_item * items, int nitems, int citem )
771 x = items[citem].x+items[citem].w1;
775 if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) {
778 if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) {
782 i = find_item_at( items, nitems, x, y );
788 int find_next_item_right( kc_item * items, int nitems, int citem )
793 x = items[citem].x+items[citem].w1;
797 if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) {
800 if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) {
804 i = find_item_at( items, nitems, x, y );
810 int find_next_item_left( kc_item * items, int nitems, int citem )
815 x = items[citem].x+items[citem].w1;
820 x = grd_curcanv->cv_bitmap.bm_w-1;
823 y = grd_curcanv->cv_bitmap.bm_h-1;
826 i = find_item_at( items, nitems, x, y );
834 int get_item_height(kc_item *item)
839 if (item->value==255) {
842 switch( item->type ) {
844 strncpy( btext, key_text[item->value], 10 ); break;
845 case BT_MOUSE_BUTTON:
847 strncpy( btext, Text_string[mousebutton_text[item->value]], 10); break;
849 strncpy( btext, mousebutton_text[item->value], 10 ); break;
852 strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break;
855 sprintf(btext, "J%d B%d", j_button[item->value].joydev, j_Get_joydev_button_number(item->value));
856 #elif defined(SDL_INPUT)
857 strncpy(btext, joybutton_text[item->value], 10);
859 if ( joybutton_text[item->value] !=-1 )
860 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
862 sprintf( btext, "BTN%d", item->value );
867 sprintf( btext, "J%d A%d", j_axis[item->value].joydev, j_Get_joydev_axis_number (item->value) );
868 #elif defined(SDL_INPUT)
869 strncpy(btext, joyaxis_text[item->value], 10);
871 strncpy(btext, Text_string[joyaxis_text[item->value]], 10);
875 strncpy( btext, Text_string[invert_text[item->value]], 10 ); break;
878 gr_get_string_size(btext, &w, &h, &aw );
884 void kconfig_sub(kc_item * items,int nitems, char * title)
887 dd_grs_canvas * save_canvas,
888 grs_canvas * save_canvas
890 grs_font * save_font;
893 int mouse_state, omouse_state, mx, my, x1, x2, y1, y2;
894 int close_x, close_y, close_size;
897 int i,k,ocitem,citem;
898 int time_stopped = 0;
899 WIN(char *old_bg_pcx);
901 WIN(old_bg_pcx = _SCRContext.bkg_filename);
902 WIN(DEFINE_SCREEN(NULL));
907 if (!((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence)) )
913 // if (Config_control_type == CONTROL_WINJOYSTICK) {
915 // joydefsw_win_joyselect(title2); title = title2,
917 // ); // Get Samir...
921 save_canvas = dd_grd_curcanv,
922 save_canvas = grd_curcanv
927 dd_gr_set_current_canvas(NULL),
928 gr_set_current_canvas(NULL)
930 save_font = grd_curcanv->cv_font;
936 old_keyd_repeat = keyd_repeat;
939 //gr_clear_canvas( BM_XRGB(0,0,0) );
941 nm_draw_background(0, 0, grd_curcanv->cv_bitmap.bm_w - 1, grd_curcanv->cv_bitmap.bm_h - 1);
942 gr_palette_load (gr_palette);
944 grd_curcanv->cv_font = MEDIUM3_FONT;
946 WIN(DDGRLOCK(dd_grd_curcanv));
949 p = strchr( title, '\n' );
951 gr_string( 0x8000, LHY(8), title );
956 // if ( items == kc_keyboard ) {
957 // gr_string( 0x8000, 8, "Keyboard" );
958 // } else if ( items == kc_joystick ) {
959 // gr_string( 0x8000, 8, "Joysticks" );
960 // } else if ( items == kc_mouse ) {
961 // gr_string( 0x8000, 8, "Mouse" );
965 close_x = close_y = MenuHires?15:7;
966 close_size = MenuHires?10:5;
967 gr_setcolor( BM_XRGB(0, 0, 0) );
968 gr_rect(close_x, close_y, close_x + close_size, close_y + close_size);
969 gr_setcolor( BM_XRGB(21, 21, 21) );
970 gr_rect(close_x + LHX(1), close_y + LHX(1), close_x + close_size - LHX(1), close_y + close_size - LHX(1));
973 grd_curcanv->cv_font = GAME_FONT;
974 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
977 gr_string( 0x8000, LHY(20), TXT_KCONFIG_STRING_1 );
979 gr_string( 0x8000, LHY(20), "Enter changes, ctrl-d deletes, ctrl-r resets defaults, ESC exits");
981 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
982 if ( items == kc_keyboard ) {
983 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
984 gr_setcolor( BM_XRGB(31,27,6) );
986 gr_scanline( LHX(98), LHX(106), LHY(42) );
987 gr_scanline( LHX(120), LHX(128), LHY(42) );
988 gr_pixel( LHX(98), LHY(43) );
989 gr_pixel( LHX(98), LHY(44) );
990 gr_pixel( LHX(128), LHY(43) );
991 gr_pixel( LHX(128), LHY(44) );
993 gr_string( LHX(109), LHY(40), "OR" );
995 gr_scanline( LHX(253), LHX(261), LHY(42) );
996 gr_scanline( LHX(274), LHX(283), LHY(42) );
997 gr_pixel( LHX(253), LHY(43) );
998 gr_pixel( LHX(253), LHY(44) );
999 gr_pixel( LHX(283), LHY(43) );
1000 gr_pixel( LHX(283), LHY(44) );
1002 gr_string( LHX(264), LHY(40), "OR" );
1004 } if ( items == kc_joystick ) {
1005 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1006 gr_setcolor( BM_XRGB(31,27,6) );
1007 gr_scanline( LHX(18), LHX(135), LHY(37) );
1008 gr_scanline( LHX(181), LHX(294), LHY(37) );
1009 gr_scanline( LHX(18), LHX(144), LHY(119+18) );
1010 gr_scanline( LHX(174), LHX(294), LHY(119+18) );
1011 gr_string( 0x8000, LHY(35), TXT_BUTTONS );
1012 gr_string( 0x8000,LHY(117+18), TXT_AXES );
1013 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1014 gr_string( LHX(81), LHY(137+8), TXT_AXIS );
1015 gr_string( LHX(111), LHY(137+8), TXT_INVERT );
1016 gr_string( LHX(222), LHY(137+8), TXT_AXIS );
1017 gr_string( LHX(252), LHY(137+8), TXT_INVERT );
1018 } else if ( items == kc_mouse ) {
1019 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1020 gr_setcolor( BM_XRGB(31,27,6) );
1021 gr_scanline( LHX(18), LHX(135), LHY(37) );
1022 gr_scanline( LHX(181), LHX(294), LHY(37) );
1023 gr_scanline( LHX(18), LHX(144), LHY(119+5) );
1024 gr_scanline( LHX(174), LHX(294), LHY(119+5) );
1025 gr_string( 0x8000, LHY(35), TXT_BUTTONS );
1026 gr_string( 0x8000,LHY(117+5), TXT_AXES );
1027 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1028 gr_string( LHX(169), LHY(129), TXT_AXIS );
1029 gr_string( LHX(199), LHY(129), TXT_INVERT );
1032 else if ( items == kc_d2x )
1034 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1035 gr_setcolor( BM_XRGB(31,27,6) );
1037 gr_string(LHX( 94), LHY(40), "KB");
1038 gr_string(LHX(121), LHY(40), "JOY");
1042 WIN(DDGRUNLOCK(dd_grd_curcanv));
1044 for (i=0; i<nitems; i++ ) {
1045 kc_drawitem( &items[i], 0 );
1049 kc_drawitem( &items[citem], 1 );
1051 newmenu_show_cursor();
1053 #ifdef NEWMENU_MOUSE
1054 mouse_state = omouse_state = 0;
1058 // Windows addendum to allow for kconfig input.
1063 DoMessageStuff(&msg);
1065 if (_RedrawScreen) {
1066 _RedrawScreen = FALSE;
1068 dd_gr_set_current_canvas(NULL);
1078 //see if redbook song needs to be restarted
1079 songs_check_redbook_repeat();
1083 #ifdef NEWMENU_MOUSE
1084 omouse_state = mouse_state;
1085 mouse_state = mouse_button_state(0);
1088 if ( !time_stopped ) {
1090 if (multi_menu_poll() == -1)
1099 MAC(case KEY_COMMAND+KEY_SHIFTED+KEY_3:)
1100 case KEY_PRINT_SCREEN:
1101 save_screen_shot(0);
1103 case KEY_CTRLED+KEY_D:
1104 items[citem].value = 255;
1105 kc_drawitem( &items[citem], 1 );
1107 case KEY_CTRLED+KEY_R:
1108 if ( items==kc_keyboard ) {
1109 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1110 items[i].value=default_kconfig_settings[0][i];
1111 kc_drawitem( &items[i], 0 );
1114 } else if ( items==kc_d2x ) {
1115 for(i=0;i<NUM_D2X_CONTROLS;i++)
1117 items[i].value=default_kconfig_d2x_settings[i];
1118 kc_drawitem( &items[i], 0 );
1123 // hack for firebire and mousestick default controls since I made
1124 // them the same control type -- dumb dumb dumb
1125 if (joy_have_firebird())
1126 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1127 items[i].value = default_firebird_settings[i];
1128 kc_drawitem( &items[i], 0 );
1130 else if (joy_have_mousestick())
1131 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1132 items[i].value = default_mousestick_settings[i];
1133 kc_drawitem( &items[i], 0 );
1136 #endif // note link to above else
1137 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1138 items[i].value = default_kconfig_settings[Config_control_type][i];
1139 kc_drawitem( &items[i], 0 );
1142 kc_drawitem( &items[citem], 1 );
1145 items[citem].value=255;
1146 kc_drawitem( &items[citem], 1 );
1150 #ifdef TABLE_CREATION
1151 if (items[citem].u==-1) items[citem].u=find_next_item_up( items,nitems, citem);
1153 citem = items[citem].u;
1158 #ifdef TABLE_CREATION
1159 if (items[citem].d==-1) items[citem].d=find_next_item_down( items,nitems, citem);
1161 citem = items[citem].d;
1165 #ifdef TABLE_CREATION
1166 if (items[citem].l==-1) items[citem].l=find_next_item_left( items,nitems, citem);
1168 citem = items[citem].l;
1172 #ifdef TABLE_CREATION
1173 if (items[citem].r==-1) items[citem].r=find_next_item_right( items,nitems, citem);
1175 citem = items[citem].r;
1179 switch( items[citem].type ) {
1180 case BT_KEY: kc_change_key( &items[citem] ); break;
1181 case BT_MOUSE_BUTTON: kc_change_mousebutton( &items[citem] ); break;
1182 case BT_MOUSE_AXIS: kc_change_mouseaxis( &items[citem] ); break;
1183 case BT_JOY_BUTTON: kc_change_joybutton( &items[citem] ); break;
1184 case BT_JOY_AXIS: kc_change_joyaxis( &items[citem] ); break;
1185 case BT_INVERT: kc_change_invert( &items[citem] ); break;
1188 //the following case added by WraithX on 11/22/00 to work around the weird joystick bug...
1190 switch(items[citem].type)
1193 kc_next_joyaxis(&items[citem]);
1197 //end addition by WraithX
1200 grd_curcanv->cv_font = save_font;
1202 WIN(DEFINE_SCREEN(old_bg_pcx));
1205 dd_gr_set_current_canvas(save_canvas),
1206 gr_set_current_canvas( save_canvas )
1208 keyd_repeat = old_keyd_repeat;
1209 game_flush_inputs();
1210 newmenu_hide_cursor();
1214 #ifdef TABLE_CREATION
1215 case KEY_DEBUGGED+KEY_F12: {
1217 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1218 kc_keyboard[i].u = find_next_item_up( kc_keyboard,NUM_KEY_CONTROLS, i);
1219 kc_keyboard[i].d = find_next_item_down( kc_keyboard,NUM_KEY_CONTROLS, i);
1220 kc_keyboard[i].l = find_next_item_left( kc_keyboard,NUM_KEY_CONTROLS, i);
1221 kc_keyboard[i].r = find_next_item_right( kc_keyboard,NUM_KEY_CONTROLS, i);
1223 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1224 kc_joystick[i].u = find_next_item_up( kc_joystick,NUM_OTHER_CONTROLS, i);
1225 kc_joystick[i].d = find_next_item_down( kc_joystick,NUM_OTHER_CONTROLS, i);
1226 kc_joystick[i].l = find_next_item_left( kc_joystick,NUM_OTHER_CONTROLS, i);
1227 kc_joystick[i].r = find_next_item_right( kc_joystick,NUM_OTHER_CONTROLS, i);
1229 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1230 kc_mouse[i].u = find_next_item_up( kc_mouse,NUM_OTHER_CONTROLS, i);
1231 kc_mouse[i].d = find_next_item_down( kc_mouse,NUM_OTHER_CONTROLS, i);
1232 kc_mouse[i].l = find_next_item_left( kc_mouse,NUM_OTHER_CONTROLS, i);
1233 kc_mouse[i].r = find_next_item_right( kc_mouse,NUM_OTHER_CONTROLS, i);
1235 fp = fopen( "kconfig.cod", "wt" );
1237 fprintf( fp, "ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {\n" );
1238 for (i=0; i<CONTROL_MAX_TYPES; i++ ) {
1240 fprintf( fp, "{0x%x", kconfig_settings[i][0] );
1241 for (j=1; j<MAX_CONTROLS; j++ )
1242 fprintf( fp, ",0x%x", kconfig_settings[i][j] );
1243 fprintf( fp, "},\n" );
1245 fprintf( fp, "};\n" );
1247 fprintf( fp, "\nkc_item kc_keyboard[NUM_KEY_CONTROLS] = {\n" );
1248 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1249 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1250 kc_keyboard[i].id, kc_keyboard[i].x, kc_keyboard[i].y, kc_keyboard[i].w1, kc_keyboard[i].w2,
1251 kc_keyboard[i].u, kc_keyboard[i].d, kc_keyboard[i].l, kc_keyboard[i].r,
1252 34, kc_keyboard[i].text, 34, btype_text[kc_keyboard[i].type] );
1254 fprintf( fp, "};" );
1256 fprintf( fp, "\nkc_item kc_joystick[NUM_OTHER_CONTROLS] = {\n" );
1257 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1258 if (kc_joystick[i].type == BT_JOY_BUTTON)
1259 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1260 kc_joystick[i].id, kc_joystick[i].x, kc_joystick[i].y, kc_joystick[i].w1, kc_joystick[i].w2,
1261 kc_joystick[i].u, kc_joystick[i].d, kc_joystick[i].l, kc_joystick[i].r,
1262 34, kc_joystick[i].text, 34, btype_text[kc_joystick[i].type] );
1264 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1265 kc_joystick[i].id, kc_joystick[i].x, kc_joystick[i].y, kc_joystick[i].w1, kc_joystick[i].w2,
1266 kc_joystick[i].u, kc_joystick[i].d, kc_joystick[i].l, kc_joystick[i].r,
1267 34, kc_joystick[i].text, 34, btype_text[kc_joystick[i].type] );
1269 fprintf( fp, "};" );
1271 fprintf( fp, "\nkc_item kc_mouse[NUM_OTHER_CONTROLS] = {\n" );
1272 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1273 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1274 kc_mouse[i].id, kc_mouse[i].x, kc_mouse[i].y, kc_mouse[i].w1, kc_mouse[i].w2,
1275 kc_mouse[i].u, kc_mouse[i].d, kc_mouse[i].l, kc_mouse[i].r,
1276 34, kc_mouse[i].text, 34, btype_text[kc_mouse[i].type] );
1278 fprintf( fp, "};" );
1287 #ifdef NEWMENU_MOUSE
1288 if ( (mouse_state && !omouse_state) || (mouse_state && omouse_state) ) {
1291 mouse_get_pos(&mx, &my);
1292 for (i=0; i<nitems; i++ ) {
1293 item_height = get_item_height( &items[i] );
1294 x1 = grd_curcanv->cv_bitmap.bm_x + LHX(items[i].x) + LHX(items[i].w1);
1295 x2 = x1 + LHX(items[i].w2);
1296 y1 = grd_curcanv->cv_bitmap.bm_y + LHY(items[i].y);
1297 y2 = y1 + LHX(item_height);
1298 if (((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2))) {
1304 else if ( !mouse_state && omouse_state ) {
1307 mouse_get_pos(&mx, &my);
1308 item_height = get_item_height( &items[citem] );
1309 x1 = grd_curcanv->cv_bitmap.bm_x + LHX(items[citem].x) + LHX(items[citem].w1);
1310 x2 = x1 + LHX(items[citem].w2);
1311 y1 = grd_curcanv->cv_bitmap.bm_y + LHY(items[citem].y);
1312 y2 = y1 + LHY(item_height);
1313 if (((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2))) {
1314 newmenu_hide_cursor();
1315 switch( items[citem].type ) {
1316 case BT_KEY: kc_change_key( &items[citem] ); break;
1317 case BT_MOUSE_BUTTON: kc_change_mousebutton( &items[citem] ); break;
1318 case BT_MOUSE_AXIS: kc_change_mouseaxis( &items[citem] ); break;
1319 case BT_JOY_BUTTON: kc_change_joybutton( &items[citem] ); break;
1320 case BT_JOY_AXIS: kc_change_joyaxis( &items[citem] ); break;
1321 case BT_INVERT: kc_change_invert( &items[citem] ); break;
1323 newmenu_show_cursor();
1325 x1 = grd_curcanv->cv_bitmap.bm_x + close_x + LHX(1);
1326 x2 = x1 + close_size - LHX(1);
1327 y1 = grd_curcanv->cv_bitmap.bm_y + close_y + LHX(1);
1328 y2 = y1 + close_size - LHX(1);
1329 if ( ((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2)) ) {
1330 grd_curcanv->cv_font = save_font;
1331 WINDOS(dd_gr_set_current_canvas( save_canvas ),
1332 gr_set_current_canvas( save_canvas ));
1333 keyd_repeat = old_keyd_repeat;
1334 game_flush_inputs();
1335 newmenu_hide_cursor();
1343 #endif // NEWMENU_MOUSE
1345 if (ocitem!=citem) {
1346 newmenu_hide_cursor();
1347 kc_drawitem( &items[ocitem], 0 );
1348 kc_drawitem( &items[citem], 1 );
1349 newmenu_show_cursor();
1355 void kc_drawitem( kc_item *item, int is_current )
1359 // PA_DFX (pa_set_frontbuffer_current());
1360 WIN(DDGRLOCK(dd_grd_curcanv));
1363 gr_set_fontcolor( BM_XRGB(20,20,29), -1 );
1365 gr_set_fontcolor( BM_XRGB(15,15,24), -1 );
1366 gr_string( LHX(item->x), LHY(item->y), item->text );
1367 WIN(DDGRUNLOCK(dd_grd_curcanv));
1369 if (item->value==255) {
1370 strcpy( btext, "" );
1372 switch( item->type ) {
1374 strncpy( btext, key_text[item->value], 10 ); break;
1375 case BT_MOUSE_BUTTON:
1377 //strncpy( btext, Text_string[mousebutton_text[item->value]], 10 ); break;
1378 strncpy( btext, (item->value <= 3)?Text_string[mousebutton_text[item->value]]:mousebutton_textra[item->value-3], 10 ); break;
1380 strncpy( btext, mousebutton_text[item->value], 10 ); break;
1383 strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break;
1385 #ifdef USE_LINUX_JOY
1386 sprintf(btext, "J%d B%d", j_button[item->value].joydev, j_Get_joydev_button_number(item->value));
1387 #elif defined(SDL_INPUT)
1388 strncpy(btext, joybutton_text[item->value], 10);
1392 if (joybutton_text[item->value] != -1)
1393 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1395 sprintf( btext, "BTN%2d", item->value+1 );
1397 if ( joybutton_text[item->value] !=-1 )
1398 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1400 sprintf( btext, "BTN%d", item->value );
1403 strncpy( btext, joy_btn_name( item->value ), 10);
1405 sprintf( btext, "BTN%d", item->value );
1410 #ifdef USE_LINUX_JOY
1411 sprintf(btext, "J%d A%d", j_axis[item->value].joydev, j_Get_joydev_axis_number(item->value));
1412 #elif defined(SDL_INPUT)
1413 strncpy(btext, joyaxis_text[item->value], 10);
1415 strncpy(btext, Text_string[joyaxis_text[item->value]], 10);
1419 strncpy( btext, Text_string[invert_text[item->value]], 10 ); break;
1423 WIN(DDGRLOCK(dd_grd_curcanv));
1424 gr_get_string_size(btext, &w, &h, &aw );
1427 gr_setcolor( BM_XRGB(21,0,24) );
1429 gr_setcolor( BM_XRGB(16,0,19) );
1430 gr_urect( LHX(item->w1+item->x), LHY(item->y-1), LHX(item->w1+item->x+item->w2), LHY(item->y)+h );
1432 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1434 x = LHX(item->w1+item->x)+((LHX(item->w2)-w)/2);
1436 gr_string( x, LHY(item->y), btext );
1437 // PA_DFX (pa_set_backbuffer_current());
1439 WIN(DDGRUNLOCK(dd_grd_curcanv));
1444 static int looper=0;
1446 void kc_drawquestion( kc_item *item )
1450 WIN(DDGRLOCK(dd_grd_curcanv));
1451 // PA_DFX (pa_set_frontbuffer_current());
1453 gr_get_string_size("?", &w, &h, &aw );
1455 c = BM_XRGB(21,0,24);
1457 //@@gr_setcolor( gr_fade_table[fades[looper]*256+c] );
1458 gr_setcolor(BM_XRGB(21*fades[looper]/31,0,24*fades[looper]/31));
1460 if (looper>63) looper=0;
1462 gr_urect( LHX(item->w1+item->x), LHY(item->y-1), LHX(item->w1+item->x+item->w2), LHY(item->y)+h );
1464 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1466 x = LHX(item->w1+item->x)+((LHX(item->w2)-w)/2);
1468 gr_string( x, LHY(item->y), "?" );
1469 // PA_DFX (pa_set_backbuffer_current());
1470 WIN(DDGRUNLOCK(dd_grd_curcanv));
1474 void kc_change_key( kc_item * item )
1479 WIN(DDGRLOCK(dd_grd_curcanv));
1480 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1482 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_KEY );
1483 WIN(DDGRUNLOCK(dd_grd_curcanv));
1485 game_flush_inputs();
1489 while( (k!=KEY_ESC) && (keycode==255) )
1495 DoMessageStuff(&msg);
1502 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1505 // if ( Game_mode & GM_MULTI )
1506 // GameLoop( 0, 0 ); // Continue
1508 timer_delay(f0_1/10);
1509 kc_drawquestion( item );
1511 for (i=0; i<256; i++ ) {
1512 if (keyd_pressed[i] && (strlen(key_text[i])>0)) {
1514 for (n=0; n<sizeof(system_keys); n++ )
1515 if ( system_keys[n] == i )
1524 for (i=0; i<Num_items; i++ ) {
1525 n = item - All_items;
1526 if ( (i!=n) && (All_items[i].type==BT_KEY) && (All_items[i].value==keycode) ) {
1527 All_items[i].value = 255;
1528 kc_drawitem( &All_items[i], 0 );
1531 item->value = keycode;
1533 kc_drawitem( item, 1 );
1535 WIN(DDGRLOCK(dd_grd_curcanv));
1536 gr_set_fontcolor( BM_XRGB(28,28,28), BM_XRGB(0,0,0) );
1537 WIN(DDGRUNLOCK(dd_grd_curcanv));
1539 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1541 game_flush_inputs();
1545 void kc_change_joybutton( kc_item * item )
1550 WIN(DDGRLOCK(dd_grd_curcanv));
1551 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1553 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_JBUTTON );
1554 WIN(DDGRUNLOCK(dd_grd_curcanv));
1556 game_flush_inputs();
1560 while( (k!=KEY_ESC) && (code==255))
1565 DoMessageStuff(&msg);
1571 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1574 // if ( Game_mode & GM_MULTI )
1575 // GameLoop( 0, 0 ); // Continue
1577 timer_delay(f0_1/10);
1579 if (k == KEY_PRINT_SCREEN)
1580 save_screen_shot(0);
1582 kc_drawquestion( item );
1584 WIN(code = joydefsw_do_button());
1587 code = joy_do_buttons();
1590 #if !defined(WINDOWS) && !defined(MACINTOSH)
1591 if (Config_control_type==CONTROL_THRUSTMASTER_FCS) {
1593 joystick_read_raw_axis( JOY_ALL_AXIS, axis );
1594 kconfig_read_fcs( axis[3] );
1595 if ( joy_get_button_state(7) ) code = 7;
1596 if ( joy_get_button_state(11) ) code = 11;
1597 if ( joy_get_button_state(15) ) code = 15;
1598 if ( joy_get_button_state(19) ) code = 19;
1599 for (i=0; i<4; i++ ) {
1600 if ( joy_get_button_state(i) )
1603 } else if (Config_control_type==CONTROL_FLIGHTSTICK_PRO) {
1604 for (i=4; i<20; i++ ) {
1605 if ( joy_get_button_state(i) ) {
1607 mprintf(( 0, "JB: %d\n", code ));
1611 for (i = 0; i < MAX_BUTTONS; i++)
1613 if ( joy_get_button_state(i) )
1620 for (i=0; i<Num_items; i++ ) {
1621 n = item - All_items;
1622 if ( (i!=n) && (All_items[i].type==BT_JOY_BUTTON) && (All_items[i].value==code) ) {
1623 All_items[i].value = 255;
1624 kc_drawitem( &All_items[i], 0 );
1629 kc_drawitem( item, 1 );
1630 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1631 game_flush_inputs();
1634 void kc_change_mousebutton( kc_item * item )
1639 WIN(DDGRLOCK(dd_grd_curcanv));
1640 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1642 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_MBUTTON );
1643 WIN(DDGRUNLOCK(dd_grd_curcanv));
1646 game_flush_inputs();
1650 while( (k!=KEY_ESC) && (code==255))
1655 DoMessageStuff(&msg);
1661 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1664 // if ( Game_mode & GM_MULTI )
1665 // GameLoop( 0, 0 ); // Continue
1667 timer_delay(f0_1/10);
1669 if (k == KEY_PRINT_SCREEN)
1670 save_screen_shot(0);
1672 kc_drawquestion( item );
1674 b = mouse_get_btns();
1675 for (i = 0; i < 16; i++ ) {
1681 for (i=0; i<Num_items; i++ ) {
1682 n = item - All_items;
1683 if ( (i!=n) && (All_items[i].type==BT_MOUSE_BUTTON) && (All_items[i].value==code) ) {
1684 All_items[i].value = 255;
1685 kc_drawitem( &All_items[i], 0 );
1690 kc_drawitem( item, 1 );
1691 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1692 game_flush_inputs();
1697 // the following function added by WraithX on 11/22/00 to work around the weird joystick bug... - modified my Matt Mueller to skip already allocated axes
1698 void kc_next_joyaxis(kc_item *item)
1700 int n, i, k, max, tries;
1707 // I modelled this ifdef after the code in the kc_change_joyaxis method.
1708 // So, if somethin's not workin here, it might not be workin there either.
1711 code = (item->value + 1) % max;
1715 for (i = 0; i < Num_items; i++)
1717 n = item - All_items;
1718 if ((i != n) && (All_items[i].type == BT_JOY_AXIS) && (All_items[i].value == code))
1721 return; // all axes allocated already
1722 i = -1; // -1 so the i++ will push back to 0
1723 code = (item->value + ++tries) % max; // try next axis
1730 kc_drawitem(item, 1);
1731 nm_restore_background(0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h);
1732 game_flush_inputs();
1734 }//method kc_next_joyaxis
1735 //end addition by WraithX
1738 void kc_change_joyaxis( kc_item * item )
1740 int axis[JOY_MAX_AXES];
1741 int old_axis[JOY_MAX_AXES];
1742 int numaxis = joy_num_axes;
1746 WIN(DDGRLOCK(dd_grd_curcanv));
1747 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1749 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_JOY_AXIS );
1750 WIN(DDGRUNLOCK(dd_grd_curcanv));
1752 game_flush_inputs();
1757 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, old_axis ),
1758 joystick_read_raw_axis( JOY_ALL_AXIS, old_axis )
1761 while( (k!=KEY_ESC) && (code==255))
1766 DoMessageStuff(&msg);
1772 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1775 // if ( Game_mode & GM_MULTI )
1776 // GameLoop( 0, 0 ); // Continue
1778 timer_delay(f0_1/10);
1780 if (k == KEY_PRINT_SCREEN)
1781 save_screen_shot(0);
1783 kc_drawquestion( item );
1786 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, axis ),
1787 joystick_read_raw_axis( JOY_ALL_AXIS, axis )
1790 for (i=0; i<numaxis; i++ ) {
1791 #if defined (MACINTOSH)
1792 if ( abs(axis[i]-old_axis[i])>100 ) {
1793 #elif defined(WINDOWS)
1794 if ( abs(axis[i]-old_axis[i])>1024 ) {
1796 if ( abs(axis[i]-old_axis[i])>200 ) {
1799 con_printf(CON_DEBUG, "Axis Movement detected: Axis %i\n", i);
1801 //old_axis[i] = axis[i];
1803 for (i=0; i<Num_items; i++ )
1805 n = item - All_items;
1806 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) )
1812 for (i=0; i<Num_items; i++ ) {
1813 n = item - All_items;
1814 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) ) {
1815 All_items[i].value = 255;
1816 kc_drawitem( &All_items[i], 0 );
1822 kc_drawitem( item, 1 );
1823 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1824 game_flush_inputs();
1828 void kc_change_mouseaxis( kc_item * item )
1837 WIN(DDGRLOCK(dd_grd_curcanv));
1838 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1840 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_MSE_AXIS );
1841 WIN(DDGRUNLOCK(dd_grd_curcanv));
1843 game_flush_inputs();
1847 mouse_get_delta( &dx, &dy );
1849 while( (k!=KEY_ESC) && (code==255))
1854 DoMessageStuff(&msg);
1860 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1863 // if ( Game_mode & GM_MULTI )
1864 // GameLoop( 0, 0 ); // Continue
1866 timer_delay(f0_1/10);
1868 if (k == KEY_PRINT_SCREEN)
1869 save_screen_shot(0);
1871 kc_drawquestion( item );
1874 mouse_get_delta_z( &dx, &dy, &dz );
1876 mouse_get_delta( &dx, &dy );
1878 if ( abs(dx)>20 ) code = 0;
1879 if ( abs(dy)>20 ) code = 1;
1881 if ( abs(dz)>20 ) code = 2;
1885 for (i=0; i<Num_items; i++ ) {
1886 n = item - All_items;
1887 if ( (i!=n) && (All_items[i].type==BT_MOUSE_AXIS) && (All_items[i].value==code) ) {
1888 All_items[i].value = 255;
1889 kc_drawitem( &All_items[i], 0 );
1894 kc_drawitem( item, 1 );
1895 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1896 game_flush_inputs();
1901 void kc_change_invert( kc_item * item )
1903 game_flush_inputs();
1910 kc_drawitem( item, 1 );
1914 #include "screens.h"
1916 void kconfig(int n, char * title)
1919 grs_bitmap *save_bm;
1921 set_screen_mode( SCREEN_MENU );
1926 WIN(mouse_set_mode(0));
1927 WIN(dd_gr_set_current_canvas(NULL));
1929 #if defined(POLY_ACC)
1930 save_bm = gr_create_bitmap2( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h, grd_curcanv->cv_bitmap.bm_type, NULL );
1932 save_bm = gr_create_bitmap( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h );
1934 Assert( save_bm != NULL );
1936 WIN(DDGRLOCK(dd_grd_curcanv));
1937 gr_bm_bitblt(grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_w,
1938 0, 0, 0, 0, &grd_curcanv->cv_bitmap, save_bm );
1939 WIN(DDGRUNLOCK(dd_grd_curcanv));
1942 case 0:kconfig_sub( kc_keyboard, NUM_KEY_CONTROLS, title );break;
1943 case 1:kconfig_sub( kc_joystick, NUM_OTHER_CONTROLS, title );break;
1944 case 2:kconfig_sub( kc_mouse, NUM_OTHER_CONTROLS, title ); break;
1945 case 3:kconfig_sub( kc_superjoy, NUM_OTHER_CONTROLS, title); break;
1947 //added on 2/4/99 by Victor Rachels for new keys menu
1948 case 4:kconfig_sub( kc_d2x, NUM_D2X_CONTROLS, title ); break;
1949 //end this section addition - VR
1957 WIN(mouse_set_mode(1));
1958 WIN(dd_gr_set_current_canvas(NULL));
1959 WIN(DDGRLOCK(dd_grd_curcanv));
1960 gr_bitmap(0, 0, save_bm);
1961 WIN(DDGRUNLOCK(dd_grd_curcanv));
1962 gr_free_bitmap(save_bm);
1964 #if 0 // set_screen_mode always calls this later... right?
1965 reset_cockpit(); //force cockpit redraw next time
1968 // Update save values...
1970 for (i=0; i<NUM_KEY_CONTROLS; i++ )
1971 kconfig_settings[0][i] = kc_keyboard[i].value;
1973 if ( (Config_control_type>0) && (Config_control_type<5)) {
1974 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
1975 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
1976 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
1977 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
1978 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
1980 else if (Config_control_type == CONTROL_WINJOYSTICK) {
1981 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
1982 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
1986 for (i=0; i<NUM_D2X_CONTROLS; i++)
1987 kconfig_d2x_settings[i] = kc_d2x[i].value;
1992 void kconfig_read_fcs( int raw_axis )
1994 int raw_button, button, axis_min[4], axis_center[4], axis_max[4];
1996 if (Config_control_type!=CONTROL_THRUSTMASTER_FCS) return;
1998 joy_get_cal_vals(axis_min, axis_center, axis_max);
2000 if ( axis_max[3] > 1 )
2001 raw_button = (raw_axis*100)/axis_max[3];
2005 if ( raw_button > 88 )
2007 else if ( raw_button > 63 )
2009 else if ( raw_button > 39 )
2011 else if ( raw_button > 15 )
2016 kconfig_set_fcs_button( 19, button );
2017 kconfig_set_fcs_button( 15, button );
2018 kconfig_set_fcs_button( 11, button );
2019 kconfig_set_fcs_button( 7, button );
2023 void kconfig_set_fcs_button( int btn, int button )
2025 int state,time_down,upcount,downcount;
2026 state = time_down = upcount = downcount = 0;
2028 if ( joy_get_button_state(btn) ) {
2029 if ( btn==button ) {
2031 time_down = FrameTime;
2036 if ( btn==button ) {
2038 time_down = FrameTime;
2045 joy_set_btn_values( btn, state, time_down, downcount, upcount );
2051 fix Last_angles_p = 0;
2052 fix Last_angles_b = 0;
2053 fix Last_angles_h = 0;
2054 ubyte Last_angles_read = 0;
2056 extern int VR_sensitivity;
2058 int VR_sense_range[3] = { 25, 50, 75 };
2060 #if 0 //ndef MACINTOSH
2065 fix yaw, pitch, roll;
2068 //------ read vfx1 helmet --------
2069 if (vfx1_installed) {
2070 vfx_get_data(&yaw,&pitch,&roll,&buttons);
2071 } else if (iglasses_headset_installed) {
2072 iglasses_read_headset( &yaw, &pitch, &roll );
2073 } else if (Victor_headset_installed) {
2074 victor_read_headset_filtered( &yaw, &pitch, &roll );
2079 Use_player_head_angles = 0;
2080 if ( Last_angles_read ) {
2084 if ( (Last_angles_h < (F1_0/4) ) && (yaw > ((F1_0*3)/4) ) )
2086 else if ( (yaw < (F1_0/4) ) && (Last_angles_h > ((F1_0*3)/4) ) )
2089 Controls.pitch_time += fixmul((pitch- Last_angles_p)*VR_sense_range[VR_sensitivity],FrameTime);
2090 Controls.heading_time+= fixmul((yaw1 - Last_angles_h)*VR_sense_range[VR_sensitivity],FrameTime);
2091 Controls.bank_time += fixmul((roll - Last_angles_b)*VR_sense_range[VR_sensitivity],FrameTime);
2093 Last_angles_read = 1;
2094 Last_angles_p = pitch;
2095 Last_angles_h = yaw;
2096 Last_angles_b = roll;
2103 #ifndef __MSDOS__ // WINDOWS
2104 #define JOYSTICK_READ_TIME (F1_0/40) // Read joystick at 40 Hz.
2106 #define JOYSTICK_READ_TIME (F1_0/10) // Read joystick at 10 Hz.
2109 fix LastReadTime = 0;
2111 fix joy_axis[JOY_MAX_AXES];
2113 ubyte kc_use_external_control = 0;
2114 ubyte kc_enable_external_control = 0;
2115 ubyte kc_external_intno = 0;
2116 ext_control_info *kc_external_control = NULL;
2117 char *kc_external_name = NULL;
2118 ubyte kc_external_version = 0;
2119 extern int Automap_active;
2121 void kconfig_init_external_controls(int intno, int address)
2124 kc_external_intno = intno;
2125 kc_external_control = (ext_control_info *)address;
2126 kc_use_external_control = 1;
2127 kc_enable_external_control = 1;
2129 i = FindArg ( "-xname" );
2131 kc_external_name = Args[i+1];
2133 kc_external_name = "External Controller";
2135 for (i=0;i<strlen (kc_external_name);i++)
2136 if (kc_external_name[i]=='_')
2137 kc_external_name[i]=' ';
2139 i = FindArg ( "-xver" );
2141 kc_external_version = atoi(Args[i+1]);
2143 printf( "%s int: 0x%x, data: 0x%p, ver:%d\n", kc_external_name, kc_external_intno, kc_external_control, kc_external_version );
2147 #if !defined(MACINTOSH)
2148 /*void kconfig_read_external_controls()
2152 if ( !kc_enable_external_control && !CybermouseActive)
2155 if ( kc_external_version == 0 )
2156 memset( kc_external_control, 0, sizeof(control_info) );
2157 else if ( kc_external_version > 0 ) {
2158 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 );
2159 if ( kc_external_version > 1 ) {
2160 // Write ship pos and angles to external controls...
2161 ubyte *temp_ptr = (ubyte *)kc_external_control;
2162 vms_vector *ship_pos;
2163 vms_matrix *ship_orient;
2164 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
2165 temp_ptr += sizeof(control_info)+sizeof(vms_angvec) + 64;
2166 ship_pos = (vms_vector *)temp_ptr;
2167 temp_ptr += sizeof(vms_vector);
2168 ship_orient = (vms_matrix *)temp_ptr;
2169 // Fill in ship postion...
2170 *ship_pos = Objects[Players[Player_num].objnum].pos;
2171 // Fill in ship orientation...
2172 *ship_orient = Objects[Players[Player_num].objnum].orient;
2176 if ( Automap_active ) // (If in automap...)
2177 kc_external_control->automap_state = 1;
2178 memset(&r,0,sizeof(r));
2182 if (!CybermouseActive)
2183 int386 ( kc_external_intno, &r, &r); // Read external info...
2185 // ReadOWL (kc_external_control);
2189 if ( Player_num > -1 ) {
2190 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
2191 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
2192 Auto_leveling_on = 0;
2194 if ( kc_external_version > 0 ) {
2195 vms_matrix tempm, ViewMatrix;
2196 vms_angvec * Kconfig_abs_movement;
2199 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
2201 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
2202 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
2203 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
2204 Objects[Players[Player_num].objnum].orient = ViewMatrix;
2206 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
2207 if (oem_message[0] != '\0' )
2208 HUD_init_message( oem_message );
2212 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
2213 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
2214 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
2215 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
2216 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
2217 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
2218 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
2219 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
2220 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
2221 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
2222 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
2223 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
2224 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
2225 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
2226 Controls.automap_down_count += kc_external_control->automap_down_count;
2227 Controls.automap_state |= kc_external_control->automap_state;
2232 void controls_read_all_win()
2235 int slide_on, bank_on;
2239 int raw_joy_axis[7];
2241 fix k0, k1, k2, k3, kp;
2242 fix k4, k5, k6, k7, kh;
2243 ubyte channel_masks;
2244 int use_mouse, use_joystick;
2247 if (Game_turbo_mode)
2251 fix temp = Controls.heading_time;
2252 fix temp1 = Controls.pitch_time;
2253 memset( &Controls, 0, sizeof(control_info) );
2254 Controls.heading_time = temp;
2255 Controls.pitch_time = temp1;
2260 ctime = timer_get_fixed_seconds();
2262 // DO JOYSTICK (X,Y,Z R,U,V)
2263 // ----------------------------------------------------------------------------
2264 if ( (LastReadTime + JOYSTICK_READ_TIME) > ctime ) {
2265 if ((ctime < 0) && (LastReadTime > 0))
2266 LastReadTime = ctime;
2268 } else if ((Config_control_type==CONTROL_WINJOYSTICK)) {
2269 LastReadTime = ctime;
2270 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, raw_joy_axis );
2272 for (i=0; i<7; i++ ) {
2273 if (channel_masks&(1<<i)) {
2274 int joy_null_value = 28;
2276 // DO POV if joystick has a hat.
2277 // --------------------------------------------------------------------
2279 joydefsw_do_winjoybutton(raw_joy_axis);
2283 // --------------------------------------------------------------------
2284 // mprintf((0, "(%d)=%d,", i, raw_joy_axis[i]));
2285 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2286 // mprintf((0, "%d ",raw_joy_axis[i]));
2287 // if (i%2) mprintf((0,"\n"));
2290 if (kc_superjoy[23].value==i) // If this is the throttle
2291 joy_null_value = 32; // Then use a larger dead-zone
2293 if (raw_joy_axis[i] > (joy_null_value-2))
2294 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
2295 else if (raw_joy_axis[i] < -(joy_null_value+2))
2296 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
2298 raw_joy_axis[i] = 0;
2299 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
2308 for (i=0; i<6; i++ )
2314 // ----------------------------------------------------------------------------
2315 if (Config_control_type==5) {
2316 mouse_get_delta( &dx, &dy );
2317 mouse_axis[0] = (dx*FrameTime)/35;
2318 mouse_axis[1] = (dy*FrameTime)/25;
2319 mouse_buttons = mouse_get_btns();
2320 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
2329 //------------- Read slide_on -------------
2332 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
2333 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
2335 if ((use_joystick)&&(kc_superjoy[5].value<255)) slide_on |= joy_get_button_state( kc_superjoy[5].value );
2337 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
2339 //------------- Read bank_on ---------------
2342 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
2343 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
2345 if ( (use_joystick)&&(kc_superjoy[10].value < 255 )) bank_on |= joy_get_button_state( kc_superjoy[10].value );
2347 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
2349 //------------ Read pitch_time -----------
2351 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2353 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
2354 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
2355 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
2356 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
2359 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
2360 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
2361 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
2362 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
2365 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2366 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
2367 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
2371 Controls.pitch_time = 0;
2373 if (Controls.pitch_time < 0)
2374 Controls.pitch_time = 0;
2376 if (Controls.pitch_time > 0)
2377 Controls.pitch_time = 0;
2378 Controls.pitch_time += kp;
2381 if ( (use_joystick)&&(kc_superjoy[13].value < 255 )) {
2382 if ( !kc_superjoy[14].value ) // If not inverted...
2383 Controls.pitch_time -= (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2385 Controls.pitch_time += (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2389 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
2390 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
2391 if ( !kc_mouse[14].value ) // If not inverted...
2392 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2394 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2397 Controls.pitch_time = 0;
2401 //----------- Read vertical_thrust_time -----------------
2404 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
2405 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
2406 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
2407 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
2410 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
2411 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
2412 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
2413 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
2416 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2417 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
2418 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
2422 if ((use_joystick)&&( kc_superjoy[13].value < 255 )) {
2423 if ( !kc_superjoy[14].value ) // If not inverted...
2424 Controls.vertical_thrust_time += joy_axis[kc_superjoy[13].value];
2426 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[13].value];
2430 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
2431 if ( !kc_mouse[14].value ) // If not inverted...
2432 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
2434 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
2439 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
2440 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
2441 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
2442 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
2445 if ((use_joystick)&&( kc_superjoy[19].value < 255 )) {
2446 if ( !kc_superjoy[20].value ) // If not inverted...
2447 Controls.vertical_thrust_time += joy_axis[kc_superjoy[19].value];
2449 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[19].value];
2452 // From joystick buttons
2453 if ( (use_joystick)&&(kc_superjoy[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_superjoy[8].value );
2454 if ( (use_joystick)&&(kc_superjoy[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_superjoy[9].value );
2456 // From mouse buttons
2457 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
2458 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
2461 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
2462 if ( !kc_mouse[20].value ) // If not inverted...
2463 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
2465 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
2469 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2470 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
2471 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
2474 //---------- Read heading_time -----------
2476 if (!slide_on && !bank_on) {
2477 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2479 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
2480 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
2481 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
2482 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
2485 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
2486 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
2487 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
2488 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
2491 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2492 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
2493 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
2497 Controls.heading_time = 0;
2499 if (Controls.heading_time < 0)
2500 Controls.heading_time = 0;
2502 if (Controls.heading_time > 0)
2503 Controls.heading_time = 0;
2504 Controls.heading_time += kh;
2507 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2508 if ( !kc_superjoy[16].value ) // If not inverted...
2509 Controls.heading_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2511 Controls.heading_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2515 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2516 if ( !kc_mouse[16].value ) // If not inverted...
2517 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2519 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2522 Controls.heading_time = 0;
2525 //----------- Read sideways_thrust_time -----------------
2528 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2529 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2530 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2531 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2534 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
2535 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
2536 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
2537 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
2540 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2541 if ( !kc_superjoy[16].value ) // If not inverted...
2542 Controls.sideways_thrust_time += joy_axis[kc_superjoy[15].value];
2544 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[15].value];
2548 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2549 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
2550 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
2554 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2555 if ( !kc_mouse[16].value ) // If not inverted...
2556 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
2558 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
2563 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
2564 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
2565 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
2566 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
2569 if ( (use_joystick)&&(kc_superjoy[17].value < 255 )) {
2570 if ( !kc_superjoy[18].value ) // If not inverted...
2571 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[17].value];
2573 Controls.sideways_thrust_time += joy_axis[kc_superjoy[17].value];
2576 // From joystick buttons
2577 if ( (use_joystick)&&(kc_superjoy[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_superjoy[6].value );
2578 if ( (use_joystick)&&(kc_superjoy[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_superjoy[7].value );
2580 // From mouse buttons
2581 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
2582 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
2585 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
2586 if ( !kc_mouse[18].value ) // If not inverted...
2587 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
2589 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
2592 //----------- Read bank_time -----------------
2595 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2596 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2597 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2598 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2601 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
2602 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
2603 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
2604 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
2607 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2608 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
2609 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
2613 if ( (use_joystick)&&(kc_superjoy[15].value < 255) ) {
2614 if ( !kc_superjoy[16].value ) // If not inverted...
2615 Controls.bank_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2617 Controls.bank_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2621 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2622 if ( !kc_mouse[16].value ) // If not inverted...
2623 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2625 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2630 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
2631 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
2632 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
2633 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
2636 if ( (use_joystick)&&(kc_superjoy[21].value < 255) ) {
2637 if ( !kc_superjoy[22].value ) // If not inverted...
2638 Controls.bank_time -= joy_axis[kc_superjoy[21].value];
2640 Controls.bank_time += joy_axis[kc_superjoy[21].value];
2643 // From joystick buttons
2644 if ( (use_joystick)&&(kc_superjoy[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_superjoy[11].value );
2645 if ( (use_joystick)&&(kc_superjoy[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_superjoy[12].value );
2647 // From mouse buttons
2648 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
2649 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
2652 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
2653 if ( !kc_mouse[22].value ) // If not inverted...
2654 Controls.bank_time += mouse_axis[kc_mouse[21].value];
2656 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
2660 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2661 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
2662 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
2665 //----------- Read forward_thrust_time -------------
2668 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
2669 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
2670 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
2671 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
2674 if ( (use_joystick)&&(kc_superjoy[23].value < 255 )) {
2675 if ( !kc_superjoy[24].value ) // If not inverted...
2676 Controls.forward_thrust_time -= joy_axis[kc_superjoy[23].value];
2678 Controls.forward_thrust_time += joy_axis[kc_superjoy[23].value];
2681 // From joystick buttons
2682 if ( (use_joystick)&&(kc_superjoy[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_superjoy[2].value );
2683 if ( (use_joystick)&&(kc_superjoy[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_superjoy[3].value );
2686 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
2687 if ( !kc_mouse[24].value ) // If not inverted...
2688 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
2690 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
2693 // From mouse buttons
2694 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
2695 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
2697 //----------- Read afterburner_state -------------
2700 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
2701 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
2703 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
2705 if ( (use_joystick)&&(kc_superjoy[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_superjoy[27].value);
2707 //-------Read headlight key--------------------------
2708 if (kc_keyboard[52].value < 255 )
2709 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
2710 if (kc_keyboard[53].value < 255 )
2711 Controls.headlight_count=key_down_count(kc_keyboard[53].value);
2712 if ((use_joystick)&&(kc_superjoy[30].value < 255 ))
2713 Controls.headlight_count=joy_get_button_down_cnt(kc_superjoy[30].value);
2715 //--------Read Cycle Primary Key------------------
2717 if (kc_keyboard[48].value<255)
2718 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
2719 if (kc_keyboard[49].value<255)
2720 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
2721 if ((use_joystick)&&(kc_superjoy[28].value < 255 ))
2722 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_superjoy[28].value);
2724 //--------Read Cycle Secondary Key------------------
2726 if (kc_keyboard[50].value<255)
2727 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
2728 if (kc_keyboard[51].value<255)
2729 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
2730 if ((use_joystick)&&(kc_superjoy[29].value < 255 ))
2731 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_superjoy[29].value);
2733 //--------Read Toggle Bomb key----------------------
2735 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
2737 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
2739 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
2740 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
2742 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
2743 HUD_init_message ("No bombs available!");
2747 if (Players[Player_num].secondary_ammo[bomb]==0)
2749 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
2750 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
2754 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
2755 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
2760 //---------Read Energy->Shield key----------
2762 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
2763 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
2764 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
2765 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
2767 //----------- Read fire_primary_down_count
2768 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
2769 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
2770 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_superjoy[0].value);
2771 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
2773 //----------- Read fire_primary_state
2774 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
2775 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
2776 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_superjoy[0].value);
2777 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
2779 //----------- Read fire_secondary_down_count
2780 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
2781 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
2782 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_superjoy[1].value);
2783 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
2785 //----------- Read fire_secondary_state
2786 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
2787 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
2788 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_superjoy[1].value);
2789 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
2791 //----------- Read fire_flare_down_count
2792 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
2793 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
2794 if ((use_joystick)&&(kc_superjoy[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_superjoy[4].value);
2795 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
2797 //----------- Read drop_bomb_down_count
2798 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
2799 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
2800 if ((use_joystick)&&(kc_superjoy[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_superjoy[26].value);
2801 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
2803 //----------- Read rear_view_down_count
2804 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
2805 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
2806 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_superjoy[25].value);
2807 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
2809 //----------- Read rear_view_down_state
2810 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
2811 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
2812 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_superjoy[25].value);
2813 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
2815 //----------- Read automap_down_count
2816 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
2817 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
2819 //----------- Read automap_state
2820 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
2821 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
2823 //----------- Read stupid-cruise-control-type of throttle.
2825 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
2826 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
2827 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
2828 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
2829 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
2831 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
2834 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
2835 if (Cruise_speed < 0 ) Cruise_speed = 0;
2837 if (Controls.forward_thrust_time==0)
2838 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
2841 //read_head_tracker();
2843 // Read external controls
2844 if (kc_use_external_control || CybermouseActive)
2845 kconfig_read_external_controls();
2847 //----------- Clamp values between -FrameTime and FrameTime
2848 if (FrameTime > F1_0 )
2849 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
2851 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
2852 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
2853 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
2854 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
2855 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
2856 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
2857 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
2859 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
2860 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
2861 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
2862 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
2863 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
2864 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
2865 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
2868 //--------- Don't do anything if in debug mode
2870 if ( keyd_pressed[KEY_DELETE] ) {
2871 memset( &Controls, 0, sizeof(control_info) );
2878 fix Next_toggle_time[3]={0,0,0};
2880 int allowed_to_toggle(int i)
2882 //used for keeping tabs of when its ok to toggle headlight,primary,and secondary
2884 if (Next_toggle_time[i] > GameTime)
2885 if (Next_toggle_time[i] < GameTime + (F1_0/8)) // In case time is bogus, never wait > 1 second.
2888 Next_toggle_time[i] = GameTime + (F1_0/8);
2895 //added on 2/7/99 by Victor Rachels for jostick state setting
2896 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};
2897 //end this section adition - VR
2901 void controls_read_all()
2904 int slide_on, bank_on;
2911 fix mouse_axis[3] = {0,0,0};
2912 int raw_joy_axis[JOY_MAX_AXES];
2914 fix k0, k1, k2, k3, kp;
2915 fix k4, k5, k6, k7, kh;
2916 ubyte channel_masks;
2917 int use_mouse, use_joystick;
2923 if (Game_turbo_mode)
2927 fix temp = Controls.heading_time;
2928 fix temp1 = Controls.pitch_time;
2929 memset( &Controls, 0, sizeof(control_info) );
2930 Controls.heading_time = temp;
2931 Controls.pitch_time = temp1;
2936 ctime = timer_get_fixed_seconds();
2938 //--------- Read Joystick -----------
2940 if ( (LastReadTime + JOYSTICK_READ_TIME > ctime) && (Config_control_type!=CONTROL_THRUSTMASTER_FCS) ) {
2942 if ((ctime < 0) && (LastReadTime >= 0))
2944 if ((ctime < 0) && (LastReadTime > 0))
2946 LastReadTime = ctime;
2948 } else if ((Config_control_type>0) && (Config_control_type<5) ) {
2949 LastReadTime = ctime;
2950 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
2952 for (i = 0; i < joy_num_axes; i++)
2955 if (channel_masks&(1<<i)) {
2957 int joy_null_value = 10;
2959 if ( (i==3) && (Config_control_type==CONTROL_THRUSTMASTER_FCS) ) {
2960 kconfig_read_fcs( raw_joy_axis[i] );
2962 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2964 if (kc_joystick[23].value==i) // If this is the throttle
2965 joy_null_value = 20; // Then use a larger dead-zone
2967 if (raw_joy_axis[i] > joy_null_value)
2968 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
2969 else if (raw_joy_axis[i] < -joy_null_value)
2970 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
2972 raw_joy_axis[i] = 0;
2973 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
2983 for (i = 0; i < joy_num_axes; i++)
2988 //--------- Read Joystick -----------
2989 if ((Config_control_type>0) && (Config_control_type<5) ) {
2990 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
2991 for (i=0; i<4; i++ ) {
2992 if (channel_masks&(1<<i)) {
2993 int joy_null_value = 10;
2995 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2997 if (kc_joystick[23].value==i) // If this is the throttle
2998 joy_null_value = 20; // Then use a larger dead-zone
3000 if (raw_joy_axis[i] > joy_null_value)
3001 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
3002 else if (raw_joy_axis[i] < -joy_null_value)
3003 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
3005 raw_joy_axis[i] = 0;
3006 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
3013 for (i=0; i<4; i++ )
3017 #endif // ifndef MACINTOSH
3019 if (Config_control_type==5 && !CybermouseActive) {
3020 //--------- Read Mouse -----------
3022 mouse_get_delta_z( &dx, &dy, &dz );
3024 mouse_get_delta( &dx, &dy );
3026 mouse_axis[0] = (dx*FrameTime)/35;
3027 mouse_axis[1] = (dy*FrameTime)/25;
3029 mouse_axis[2] = (dz*FrameTime);
3031 mouse_buttons = mouse_get_btns();
3032 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
3034 } else if (Config_control_type==6 && !CybermouseActive) {
3035 //--------- Read Cyberman -----------
3036 mouse_get_cyberman_pos(&idx,&idy );
3037 mouse_axis[0] = (idx*FrameTime)/128;
3038 mouse_axis[1] = (idy*FrameTime)/128;
3039 mouse_buttons = mouse_get_btns();
3041 } else if (CybermouseActive) {
3042 // ReadOWL (kc_external_control);
3043 // CybermouseAdjust();
3052 //added on 2/4/99 by Victor Rachels for d1x keys
3053 //--------- Read primary weapon select -------------
3054 //the following "if" added by WraithX to stop deadies from switchin weapons, 4/14/00
3055 if (!Player_is_dead)
3058 int d2x_joystick_state[10];
3061 d2x_joystick_state[i] = joy_get_button_state(kc_d2x[i*2+1].value);
3064 //----------------Weapon 1----------------
3065 if(key_down_count(kc_d2x[0].value) ||
3066 (joy_get_button_state(kc_d2x[1].value) &&
3067 (d2x_joystick_state[0]!=d2x_joystick_ostate[0]) ) )
3070 do_weapon_select(0,0);
3072 for(i=MAX_PRIMARY_WEAPONS;i<MAX_PRIMARY_WEAPONS+NEWPRIMS;i++)
3073 if(primary_order[i]>primary_order[valu]&&player_has_weapon(i,0))
3075 LaserPowSelected = valu;
3078 //----------------Weapon 2----------------
3079 if(key_down_count(kc_d2x[2].value) ||
3080 (joy_get_button_state(kc_d2x[3].value) &&
3081 (d2x_joystick_state[1]!=d2x_joystick_ostate[1]) ) )
3082 do_weapon_select(1,0);
3083 //----------------Weapon 3----------------
3084 if(key_down_count(kc_d2x[4].value) ||
3085 (joy_get_button_state(kc_d2x[5].value) &&
3086 (d2x_joystick_state[2]!=d2x_joystick_ostate[2]) ) )
3087 do_weapon_select(2,0);
3088 //----------------Weapon 4----------------
3089 if(key_down_count(kc_d2x[6].value) ||
3090 (joy_get_button_state(kc_d2x[7].value) &&
3091 (d2x_joystick_state[3]!=d2x_joystick_ostate[3]) ) )
3092 do_weapon_select(3,0);
3093 //----------------Weapon 5----------------
3094 if(key_down_count(kc_d2x[8].value) ||
3095 (joy_get_button_state(kc_d2x[9].value) &&
3096 (d2x_joystick_state[4]!=d2x_joystick_ostate[4]) ) )
3097 do_weapon_select(4,0);
3099 //--------- Read secondary weapon select ----------
3100 //----------------Weapon 6----------------
3101 if(key_down_count(kc_d2x[10].value) ||
3102 (joy_get_button_state(kc_d2x[11].value) &&
3103 (d2x_joystick_state[5]!=d2x_joystick_ostate[5]) ) )
3104 do_weapon_select(0,1);
3105 //----------------Weapon 7----------------
3106 if(key_down_count(kc_d2x[12].value) ||
3107 (joy_get_button_state(kc_d2x[13].value) &&
3108 (d2x_joystick_state[6]!=d2x_joystick_ostate[6]) ) )
3109 do_weapon_select(1,1);
3110 //----------------Weapon 8----------------
3111 if(key_down_count(kc_d2x[14].value) ||
3112 (joy_get_button_state(kc_d2x[15].value) &&
3113 (d2x_joystick_state[7]!=d2x_joystick_ostate[7]) ) )
3114 do_weapon_select(2,1);
3115 //----------------Weapon 9----------------
3116 if(key_down_count(kc_d2x[16].value) ||
3117 (joy_get_button_state(kc_d2x[17].value) &&
3118 (d2x_joystick_state[8]!=d2x_joystick_ostate[8]) ) )
3119 do_weapon_select(3,1);
3120 //----------------Weapon 0----------------
3121 if(key_down_count(kc_d2x[18].value) ||
3122 (joy_get_button_state(kc_d2x[19].value) &&
3123 (d2x_joystick_state[9]!=d2x_joystick_ostate[9]) ) )
3124 do_weapon_select(4,1);
3125 memcpy(d2x_joystick_ostate,d2x_joystick_state,10*sizeof(int));
3127 //end this section addition - VR
3130 }//end "if (!Player_is_dead)" - WraithX
3134 //------------- Read slide_on -------------
3137 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
3138 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
3140 if ((use_joystick)&&(kc_joystick[5].value<255)) slide_on |= joy_get_button_state( kc_joystick[5].value );
3142 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
3144 //------------- Read bank_on ---------------
3147 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
3148 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
3150 if ( (use_joystick)&&(kc_joystick[10].value < 255 )) bank_on |= joy_get_button_state( kc_joystick[10].value );
3152 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
3154 //------------ Read pitch_time -----------
3156 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3158 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
3159 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
3160 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
3161 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
3164 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
3165 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
3166 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
3167 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
3170 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3171 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
3172 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
3176 Controls.pitch_time = 0;
3178 if (Controls.pitch_time < 0)
3179 Controls.pitch_time = 0;
3181 if (Controls.pitch_time > 0)
3182 Controls.pitch_time = 0;
3183 Controls.pitch_time += kp;
3186 if ( (use_joystick)&&(kc_joystick[13].value < 255 )) {
3187 if ( !kc_joystick[14].value ) // If not inverted...
3188 Controls.pitch_time -= (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3190 Controls.pitch_time += (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3194 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
3195 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
3196 if ( !kc_mouse[14].value ) // If not inverted...
3197 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3199 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3202 Controls.pitch_time = 0;
3206 // the following "if" added by WraithX, 4/14/00
3207 // done so that dead players can't move
3208 if (!Player_is_dead)
3210 //----------- Read vertical_thrust_time -----------------
3213 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
3214 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
3215 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
3216 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
3219 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
3220 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
3221 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
3222 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
3225 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3226 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
3227 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
3231 if ((use_joystick)&&( kc_joystick[13].value < 255 )) {
3232 if ( !kc_joystick[14].value ) // If not inverted...
3233 Controls.vertical_thrust_time += joy_axis[kc_joystick[13].value];
3235 Controls.vertical_thrust_time -= joy_axis[kc_joystick[13].value];
3239 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
3240 if ( !kc_mouse[14].value ) // If not inverted...
3241 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
3243 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
3248 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
3249 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
3250 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
3251 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
3254 if ((use_joystick)&&( kc_joystick[19].value < 255 )) {
3255 if ( !kc_joystick[20].value ) // If not inverted...
3256 Controls.vertical_thrust_time += joy_axis[kc_joystick[19].value];
3258 Controls.vertical_thrust_time -= joy_axis[kc_joystick[19].value];
3261 // From joystick buttons
3262 if ( (use_joystick)&&(kc_joystick[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_joystick[8].value );
3263 if ( (use_joystick)&&(kc_joystick[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_joystick[9].value );
3265 // From mouse buttons
3266 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
3267 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
3270 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
3271 if ( !kc_mouse[20].value ) // If not inverted...
3272 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
3274 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
3278 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3279 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
3280 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
3282 }// end "if" added by WraithX
3284 //---------- Read heading_time -----------
3286 if (!slide_on && !bank_on) {
3287 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3289 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
3290 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
3291 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
3292 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
3295 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
3296 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
3297 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
3298 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
3301 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3302 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
3303 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
3307 Controls.heading_time = 0;
3309 if (Controls.heading_time < 0)
3310 Controls.heading_time = 0;
3312 if (Controls.heading_time > 0)
3313 Controls.heading_time = 0;
3314 Controls.heading_time += kh;
3317 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3318 if ( !kc_joystick[16].value ) // If not inverted...
3319 Controls.heading_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3321 Controls.heading_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3325 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3326 if ( !kc_mouse[16].value ) // If not inverted...
3327 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3329 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3332 Controls.heading_time = 0;
3335 // the following "if" added by WraithX, 4/14/00
3336 // done so that dead players can't move
3337 if (!Player_is_dead)
3339 //----------- Read sideways_thrust_time -----------------
3342 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3343 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3344 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3345 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3348 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
3349 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
3350 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
3351 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
3354 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3355 if ( !kc_joystick[16].value ) // If not inverted...
3356 Controls.sideways_thrust_time += joy_axis[kc_joystick[15].value];
3358 Controls.sideways_thrust_time -= joy_axis[kc_joystick[15].value];
3362 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3363 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
3364 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
3368 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3369 if ( !kc_mouse[16].value ) // If not inverted...
3370 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
3372 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
3377 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
3378 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
3379 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
3380 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
3383 if ( (use_joystick)&&(kc_joystick[17].value < 255 )) {
3384 if ( !kc_joystick[18].value ) // If not inverted...
3385 Controls.sideways_thrust_time -= joy_axis[kc_joystick[17].value];
3387 Controls.sideways_thrust_time += joy_axis[kc_joystick[17].value];
3390 // From joystick buttons
3391 if ( (use_joystick)&&(kc_joystick[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_joystick[6].value );
3392 if ( (use_joystick)&&(kc_joystick[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_joystick[7].value );
3394 // From mouse buttons
3395 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
3396 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
3399 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
3400 if ( !kc_mouse[18].value ) // If not inverted...
3401 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
3403 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
3405 }// end "if" added by WraithX
3407 //----------- Read bank_time -----------------
3410 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3411 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3412 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3413 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3416 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
3417 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
3418 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
3419 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
3422 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3423 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
3424 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
3428 if ( (use_joystick)&&(kc_joystick[15].value < 255) ) {
3429 if ( !kc_joystick[16].value ) // If not inverted...
3430 Controls.bank_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3432 Controls.bank_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3436 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3437 if ( !kc_mouse[16].value ) // If not inverted...
3438 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3440 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3445 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
3446 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
3447 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
3448 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
3451 if ( (use_joystick)&&(kc_joystick[21].value < 255) ) {
3452 if ( !kc_joystick[22].value ) // If not inverted...
3453 Controls.bank_time -= joy_axis[kc_joystick[21].value];
3455 Controls.bank_time += joy_axis[kc_joystick[21].value];
3458 // From joystick buttons
3459 if ( (use_joystick)&&(kc_joystick[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_joystick[11].value );
3460 if ( (use_joystick)&&(kc_joystick[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_joystick[12].value );
3462 // From mouse buttons
3463 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
3464 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
3467 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
3468 if ( !kc_mouse[22].value ) // If not inverted...
3469 Controls.bank_time += mouse_axis[kc_mouse[21].value];
3471 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
3475 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3476 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
3477 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
3480 // the following "if" added by WraithX, 4/14/00
3481 // done so that dead players can't move
3482 if (!Player_is_dead)
3484 //----------- Read forward_thrust_time -------------
3487 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
3488 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
3489 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
3490 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
3493 if ( (use_joystick)&&(kc_joystick[23].value < 255 )) {
3494 if ( !kc_joystick[24].value ) // If not inverted...
3495 Controls.forward_thrust_time -= joy_axis[kc_joystick[23].value];
3497 Controls.forward_thrust_time += joy_axis[kc_joystick[23].value];
3500 // From joystick buttons
3501 if ( (use_joystick)&&(kc_joystick[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_joystick[2].value );
3502 if ( (use_joystick)&&(kc_joystick[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_joystick[3].value );
3505 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
3506 if ( !kc_mouse[24].value ) // If not inverted...
3507 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
3509 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
3512 // From mouse buttons
3513 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
3514 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
3516 //----------- Read afterburner_state -------------
3519 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
3520 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
3522 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
3524 if ( (use_joystick)&&(kc_joystick[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_joystick[27].value);
3526 //-------Read headlight key--------------------------
3528 if (kc_keyboard[52].value < 255 )
3529 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
3530 if (kc_keyboard[53].value < 255 )
3531 Controls.headlight_count+=key_down_count(kc_keyboard[53].value);
3532 if ((use_joystick)&&(kc_joystick[30].value < 255 ))
3533 Controls.headlight_count+=joy_get_button_down_cnt(kc_joystick[30].value);
3535 //--------Read Cycle Primary Key------------------
3537 if (kc_keyboard[48].value<255)
3538 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
3539 if (kc_keyboard[49].value<255)
3540 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
3541 if ((use_joystick)&&(kc_joystick[28].value < 255 ))
3542 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_joystick[28].value);
3545 //--------Read Cycle Secondary Key------------------
3547 if (kc_keyboard[50].value<255)
3548 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
3549 if (kc_keyboard[51].value<255)
3550 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
3551 if ((use_joystick)&&(kc_joystick[29].value < 255 ))
3552 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_joystick[29].value);
3554 //--------Read Toggle Bomb key----------------------
3556 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
3558 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
3560 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
3561 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
3563 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3564 HUD_init_message ("No bombs available!");
3568 if (Players[Player_num].secondary_ammo[bomb]==0)
3570 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3571 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
3575 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
3576 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
3581 //---------Read Energy->Shield key----------
3583 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
3584 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
3585 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
3586 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
3588 //----------- Read fire_primary_down_count
3589 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
3590 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
3591 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_joystick[0].value);
3592 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
3594 //----------- Read fire_primary_state
3595 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
3596 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
3597 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_joystick[0].value);
3598 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
3600 //----------- Read fire_secondary_down_count
3601 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
3602 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
3603 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_joystick[1].value);
3604 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
3606 //----------- Read fire_secondary_state
3607 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
3608 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
3609 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_joystick[1].value);
3610 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
3612 //----------- Read fire_flare_down_count
3613 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
3614 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
3615 if ((use_joystick)&&(kc_joystick[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_joystick[4].value);
3616 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
3618 //----------- Read drop_bomb_down_count
3619 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
3620 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
3621 if ((use_joystick)&&(kc_joystick[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_joystick[26].value);
3622 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
3624 //----------- Read rear_view_down_count
3625 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
3626 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
3627 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_joystick[25].value);
3628 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
3630 //----------- Read rear_view_down_state
3631 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
3632 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
3633 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_joystick[25].value);
3634 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
3636 }//end "if" added by WraithX
3638 //----------- Read automap_down_count
3639 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
3640 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
3642 //----------- Read automap_state
3643 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
3644 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
3646 //----------- Read stupid-cruise-control-type of throttle.
3648 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
3649 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
3650 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
3651 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
3652 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
3654 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
3657 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
3658 if (Cruise_speed < 0 ) Cruise_speed = 0;
3660 if (Controls.forward_thrust_time==0)
3661 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
3664 #if !defined(MACINTOSH)
3665 //read_head_tracker();
3667 // Read external controls
3668 // if (kc_use_external_control || CybermouseActive)
3669 // kconfig_read_external_controls();
3672 //----------- Clamp values between -FrameTime and FrameTime
3673 if (FrameTime > F1_0 )
3674 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
3676 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
3677 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
3678 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
3679 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
3680 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
3681 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
3682 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
3684 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
3685 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
3686 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
3687 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
3688 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
3689 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
3690 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
3693 //--------- Don't do anything if in debug mode
3695 if ( keyd_pressed[KEY_DELETE] ) {
3696 memset( &Controls, 0, sizeof(control_info) );
3702 void reset_cruise(void)
3708 void kc_set_controls()
3712 for (i=0; i<NUM_KEY_CONTROLS; i++ )
3713 kc_keyboard[i].value = kconfig_settings[0][i];
3715 if ( (Config_control_type>0) && (Config_control_type<5)) {
3716 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3717 kc_joystick[i].value = kconfig_settings[Config_control_type][i];
3718 if (kc_joystick[i].type == BT_INVERT ) {
3719 if (kc_joystick[i].value!=1)
3720 kc_joystick[i].value = 0;
3721 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
3724 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
3725 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3726 kc_mouse[i].value = kconfig_settings[Config_control_type][i];
3727 if (kc_mouse[i].type == BT_INVERT ) {
3728 if (kc_mouse[i].value!=1)
3729 kc_mouse[i].value = 0;
3730 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
3733 } else if (Config_control_type == CONTROL_WINJOYSTICK) {
3734 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3735 kc_superjoy[i].value = kconfig_settings[Config_control_type][i];
3736 if (kc_superjoy[i].type == BT_INVERT ) {
3737 if (kc_superjoy[i].value!=1)
3738 kc_superjoy[i].value = 0;
3739 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
3745 for (i=0; i<NUM_D2X_CONTROLS; i++ )
3746 kc_d2x[i].value = kconfig_d2x_settings[i];
3750 #if 0 //ndef MACINTOSH // no mac support for vr headset
3752 void kconfig_center_headset()
3756 vfx_center_headset();
3758 // } else if (iglasses_headset_installed) {
3759 // } else if (Victor_headset_installed) {
3765 #endif // end of #ifndef MACINTOSH for kconfig_center_headset
3767 void CybermouseAdjust ()
3769 /* if ( Player_num > -1 ) {
3770 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
3771 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
3772 Auto_leveling_on = 0;
3774 if ( kc_external_version > 0 ) {
3775 vms_matrix tempm, ViewMatrix;
3776 vms_angvec * Kconfig_abs_movement;
3779 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
3781 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
3782 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
3783 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
3784 Objects[Players[Player_num].objnum].orient = ViewMatrix;
3786 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
3787 if (oem_message[0] != '\0' )
3788 HUD_init_message( oem_message );
3792 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
3793 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
3794 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
3795 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
3796 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
3797 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
3798 // Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
3799 // Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
3800 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
3801 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
3802 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
3803 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
3804 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
3805 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
3806 // Controls.automap_down_count += kc_external_control->automap_down_count;
3807 // Controls.automap_state |= kc_external_control->automap_state;
3810 char GetKeyValue (char key)
3812 mprintf ((0,"Returning %c!\n",kc_keyboard[(int)key].value));
3813 return (kc_keyboard[(int)key].value);
3816 #if !defined(MACINTOSH)
3819 extern object *obj_find_first_of_type (int);
3820 void kconfig_read_external_controls()
3825 if ( !kc_enable_external_control ) return;
3827 if ( kc_external_version == 0 )
3828 memset( kc_external_control, 0, sizeof(ext_control_info));
3829 else if ( kc_external_version > 0 ) {
3831 if (kc_external_version>=4)
3832 memset( kc_external_control, 0, sizeof(advanced_ext_control_info));
3833 else if (kc_external_version>0)
3834 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 );
3835 else if (kc_external_version>2)
3836 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof(vms_matrix) +4 );
3838 if ( kc_external_version > 1 ) {
3839 // Write ship pos and angles to external controls...
3840 ubyte *temp_ptr = (ubyte *)kc_external_control;
3841 vms_vector *ship_pos;
3842 vms_matrix *ship_orient;
3843 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
3844 temp_ptr += sizeof(ext_control_info) + sizeof(vms_angvec) + 64;
3845 ship_pos = (vms_vector *)temp_ptr;
3846 temp_ptr += sizeof(vms_vector);
3847 ship_orient = (vms_matrix *)temp_ptr;
3848 // Fill in ship postion...
3849 *ship_pos = Objects[Players[Player_num].objnum].pos;
3850 // Fill in ship orientation...
3851 *ship_orient = Objects[Players[Player_num].objnum].orient;
3853 if (kc_external_version>=4)
3855 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
3857 temp_ptr->headlight_state=(Players[Player_num].flags & PLAYER_FLAGS_HEADLIGHT_ON);
3858 temp_ptr->primary_weapon_flags=Players[Player_num].primary_weapon_flags;
3859 temp_ptr->secondary_weapon_flags=Players[Player_num].secondary_weapon_flags;
3860 temp_ptr->current_primary_weapon=Primary_weapon;
3861 temp_ptr->current_secondary_weapon=Secondary_weapon;
3863 temp_ptr->current_guidebot_command=Escort_goal_object;
3865 temp_ptr->force_vector=ExtForceVec;
3866 temp_ptr->force_matrix=ExtApplyForceMatrix;
3868 temp_ptr->joltinfo[i]=ExtJoltInfo[i];
3870 temp_ptr->x_vibrate_info[i]=ExtXVibrateInfo[i];
3871 temp_ptr->x_vibrate_clear=ExtXVibrateClear;
3872 temp_ptr->game_status=ExtGameStatus;
3874 memset ((void *)&ExtForceVec,0,sizeof(vms_vector));
3875 memset ((void *)&ExtApplyForceMatrix,0,sizeof(vms_matrix));
3880 ExtXVibrateInfo[i]=0;
3885 if ( Automap_active ) // (If in automap...)
3886 kc_external_control->automap_state = 1;
3887 //memset(&r,0,sizeof(r));
3891 int386 ( kc_external_intno, &r, &r); // Read external info...
3895 if ( Player_num > -1 ) {
3896 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
3897 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
3898 Auto_leveling_on = 0;
3900 if ( kc_external_version > 0 ) {
3901 vms_matrix tempm, ViewMatrix;
3902 vms_angvec * Kconfig_abs_movement;
3905 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(ext_control_info));
3907 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
3908 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
3909 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
3910 Objects[Players[Player_num].objnum].orient = ViewMatrix;
3912 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
3913 if (oem_message[0] != '\0' )
3914 HUD_init_message( oem_message );
3918 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
3919 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
3920 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
3921 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
3922 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
3923 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
3924 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
3925 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
3926 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
3927 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
3928 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
3929 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
3930 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
3931 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
3932 Controls.automap_down_count += kc_external_control->automap_down_count;
3933 Controls.automap_state |= kc_external_control->automap_state;
3935 if (kc_external_version>=3)
3937 ubyte *temp_ptr = (ubyte *)kc_external_control;
3938 temp_ptr += (sizeof(ext_control_info) + sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof (vms_matrix));
3941 Controls.cycle_primary_count=(*(temp_ptr));
3943 Controls.cycle_secondary_count=(*(temp_ptr+1));
3946 Controls.afterburner_state=(*(temp_ptr+2));
3948 Controls.headlight_count=(*(temp_ptr+3));
3950 if (kc_external_version>=4)
3953 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
3956 if (temp_ptr->keyboard[i])
3959 if (temp_ptr->Reactor_blown)
3961 if (Game_mode & GM_MULTI)
3962 net_destroy_controlcen (obj_find_first_of_type (OBJ_CNTRLCEN));
3964 do_controlcen_destroyed_stuff(obj_find_first_of_type (OBJ_CNTRLCEN));