1 /* $Id: kconfig.c,v 1.33 2004-11-22 23:32:54 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.33 2004-11-22 23:32:54 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 };
121 int joybutton_text[28] =
122 { TNUM_BTN_1, TNUM_BTN_2, TNUM_BTN_3, TNUM_BTN_4,
123 -1, TNUM_TRIG, TNUM_LEFT, TNUM_HAT_L,
124 TNUM_RIGHT, -1, TNUM_HAT2_D, TNUM_HAT_R,
125 TNUM_MID, -1, TNUM_HAT2_R, TNUM_HAT_U,
126 TNUM_HAT2_L, -1, TNUM_HAT2_U, TNUM_HAT_D,
127 TNUM_TRIG, TNUM_LEFT, TNUM_RIGHT, -1,
128 TNUM_UP, TNUM_DOWN, TNUM_LEFT, TNUM_RIGHT };
130 int joyaxis_text[7] = { TNUM_X1, TNUM_Y1, TNUM_Z1, TNUM_UN, TNUM_P1,TNUM_R1,TNUM_YA1 };
131 // int joyaxis_text[4] = { TNUM_X1, TNUM_Y1, TNUM_X2, TNUM_Y2 };
135 int mouseaxis_text[3] = { TNUM_L_R, TNUM_F_B, TNUM_Z1 };
137 int mousebutton_text[3] = { TNUM_LEFT, TNUM_RIGHT, TNUM_MID };
138 char * mousebutton_textra[13] = { "M4", "M5", "M6", "M7", "M8", "M9", "M10","M11","M12","M13","M14","M15","M16" };//text for buttons above 3. -MPM
140 char *mousebutton_text[3] = { "Btn", "", "" }; // only one silly mouse button on the mac
144 char * key_text[256] = {
145 "","S","D","F","H","G","Z","X","C","V","","B","Q", "W", "E", "R",
146 "Y","T","1","2","3","4","6","5","=","9","7","-", "8", "0", "]", "O",
147 "U","[","I","P","RET","L","J","'","K", ";", "\\", ",", "/", "N", "M", ".",
148 "TAB","SPC","`","DEL","","ESC","","APL","SHIFT","CAPSL","OPTN","CTRL","","","","A",
149 "","PAD.","","PAD*","","PAD+","","NMLCK","","","","PAD/","ENTER","","PAD-","",
150 "","PAD=","PAD0","PAD1","PAD2","PAD3","PAD4","PAD5","PAD6","PAD7","","PAD8","PAD9","","","",
151 "F5","F6","F7","","F8","F9","","F11","","F13","","F14","","F10","","F12",
152 "","PAUSE","HELP","HOME","PGUP","DEL","","END","F2","","F1","LARW","RARW","DARW","UARW","",
153 "","","","","","","","","","","","","","","","",
154 "","","","","","","","","","","","","","","","",
155 "","","","","","","","","","","","","","","","",
156 "","","","","","","","","","","","","","","","",
157 "","","","","","","","","","","","","","","","",
158 "","","","","","","","","","","","","","","","",
159 "","","","","","","","","","","","","","","","",
160 "","","","","","","","","","","","","","","",""};
162 #if !defined OGL && !defined SDL_INPUT
163 char * key_text[256] = { \
164 "","ESC","1","2","3","4","5","6","7","8","9","0","-", \
165 "=","BSPC","TAB","Q","W","E","R","T","Y","U","I","O", \
166 "P","[","]","
\83","LCTRL","A","S","D","F", \
167 "G","H","J","K","L",";","'","`", \
168 "LSHFT","\\","Z","X","C","V","B","N","M",",", \
169 ".","/","RSHFT","PAD*","LALT","SPC", \
170 "CPSLK","F1","F2","F3","F4","F5","F6","F7","F8","F9", \
171 "F10","NMLCK","SCLK","PAD7","PAD8","PAD9","PAD-", \
172 "PAD4","PAD5","PAD6","PAD+","PAD1","PAD2","PAD3","PAD0", \
173 "PAD.","","","","F11","F12","","","","","","","","","", \
174 "","","","","","","","","","","","","","","","","","","","", \
175 "","","","","","","","","","","","","","","","","","","","", \
176 "","","","","","","","","","","","","","","","","","", \
177 "PAD
\83","RCTRL","","","","","","","","","","","","","", \
178 "","","","","","","","","","","PAD/","","","RALT","", \
179 "","","","","","","","","","","","","","HOME","
\82","PGUP", \
180 "","
\81","","
\7f","","END","
\80","PGDN","INS", \
181 "DEL","","","","","","","","","","","","","","","","","", \
182 "","","","","","","","","","","","","","","","","","","","", \
183 "","","","","","","" };
188 //added/removed by Victor Rachels for adding rebindable keys for these
189 // KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0
190 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 };
192 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 };
195 //extern void GameLoop(int, int );
197 extern void transfer_energy_to_shield(fix);
198 extern void CyclePrimary(),CycleSecondary(),InitMarkerInput();
199 extern ubyte DefiningMarkerMessage;
200 extern char CybermouseActive;
203 extern int joydefsw_do_button();
204 extern int joydefsw_do_winjoybutton(int *axis);
205 extern joydefsw_win_joyselect(char *title);
208 control_info Controls;
212 // macros for drawing lo/hi res kconfig screens (see scores.c as well)
214 #define LHX(x) ((x)*(MenuHires?2:1))
215 #define LHY(y) ((y)*(MenuHires?2.4:1))
219 #define BT_MOUSE_BUTTON 1
220 #define BT_MOUSE_AXIS 2
221 #define BT_JOY_BUTTON 3
222 #define BT_JOY_AXIS 4
225 char *btype_text[] = { "BT_KEY", "BT_MOUSE_BUTTON", "BT_MOUSE_AXIS", "BT_JOY_BUTTON", "BT_JOY_AXIS", "BT_INVERT" };
229 typedef struct kc_item {
230 short id; // The id of this item
238 ubyte value; // what key,button,etc
244 ubyte kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS];
246 //added on 2/4/99 by Victor Rachels to add d1x new keys
247 ubyte kconfig_d2x_settings[MAX_D2X_CONTROLS];
248 //end this section addition - VR
250 //----------- WARNING!!!!!!! -------------------------------------------
251 // THESE NEXT FOUR BLOCKS OF DATA ARE GENERATED BY PRESSING DEL+F12 WHEN
252 // IN THE KEYBOARD CONFIG SCREEN. BASICALLY, THAT PROCEDURE MODIFIES THE
253 // U,D,L,R FIELDS OF THE ARRAYS AND DUMPS THE NEW ARRAYS INTO KCONFIG.COD
254 //-------------------------------------------------------------------------
255 /*ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
256 {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},
257 {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},
258 {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},
259 {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},
260 {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},
261 {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},
262 {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},
266 ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
267 {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},
268 {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},
269 {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},
270 {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},
271 {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},
272 {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},
273 {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},
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,0xff,0x0,0x0,0x0,0x0},
281 kc_item kc_keyboard[NUM_KEY_CONTROLS] = {
282 { 0, 15, 49, 71, 26, 55, 2, 55, 1,"Pitch forward", BT_KEY, 255 },
283 { 1, 15, 49,100, 26, 50, 3, 0, 24,"Pitch forward", BT_KEY, 255 },
284 { 2, 15, 57, 71, 26, 0, 4, 25, 3,"Pitch backward", BT_KEY, 255 },
285 { 3, 15, 57,100, 26, 1, 5, 2, 26,"Pitch backward", BT_KEY, 255 },
286 { 4, 15, 65, 71, 26, 2, 6, 27, 5,"Turn left", BT_KEY, 255 },
287 { 5, 15, 65,100, 26, 3, 7, 4, 28,"Turn left", BT_KEY, 255 },
288 { 6, 15, 73, 71, 26, 4, 8, 29, 7,"Turn right", BT_KEY, 255 },
289 { 7, 15, 73,100, 26, 5, 9, 6, 34,"Turn right", BT_KEY, 255 },
290 { 8, 15, 85, 71, 26, 6, 10, 35, 9,"Slide on", BT_KEY, 255 },
291 { 9, 15, 85,100, 26, 7, 11, 8, 36,"Slide on", BT_KEY, 255 },
292 { 10, 15, 93, 71, 26, 8, 12, 37, 11,"Slide left", BT_KEY, 255 },
293 { 11, 15, 93,100, 26, 9, 13, 10, 44,"Slide left", BT_KEY, 255 },
294 { 12, 15,101, 71, 26, 10, 14, 45, 13,"Slide right", BT_KEY, 255 },
295 { 13, 15,101,100, 26, 11, 15, 12, 30,"Slide right", BT_KEY, 255 },
296 { 14, 15,109, 71, 26, 12, 16, 31, 15,"Slide up", BT_KEY, 255 },
297 { 15, 15,109,100, 26, 13, 17, 14, 32,"Slide up", BT_KEY, 255 },
298 { 16, 15,117, 71, 26, 14, 18, 33, 17,"Slide down", BT_KEY, 255 },
299 { 17, 15,117,100, 26, 15, 19, 16, 46,"Slide down", BT_KEY, 255 },
300 { 18, 15,129, 71, 26, 16, 20, 47, 19,"Bank on", BT_KEY, 255 },
301 { 19, 15,129,100, 26, 17, 21, 18, 38,"Bank on", BT_KEY, 255 },
302 { 20, 15,137, 71, 26, 18, 22, 39, 21,"Bank left", BT_KEY, 255 },
303 { 21, 15,137,100, 26, 19, 23, 20, 40,"Bank left", BT_KEY, 255 },
304 { 22, 15,145, 71, 26, 20, 48, 41, 23,"Bank right", BT_KEY, 255 },
305 { 23, 15,145,100, 26, 21, 49, 22, 42,"Bank right", BT_KEY, 255 },
306 { 24,158, 49, 83, 26, 51, 26, 1, 25,"Fire primary", BT_KEY, 255 },
307 { 25,158, 49,112, 26, 54, 27, 24, 2,"Fire primary", BT_KEY, 255 },
308 { 26,158, 57, 83, 26, 24, 28, 3, 27,"Fire secondary", BT_KEY, 255 },
309 { 27,158, 57,112, 26, 25, 29, 26, 4,"Fire secondary", BT_KEY, 255 },
310 { 28,158, 65, 83, 26, 26, 34, 5, 29,"Fire flare", BT_KEY, 255 },
311 { 29,158, 65,112, 26, 27, 35, 28, 6,"Fire flare", BT_KEY, 255 },
312 { 30,158,105, 83, 26, 44, 32, 13, 31,"Accelerate", BT_KEY, 255 },
313 { 31,158,105,112, 26, 45, 33, 30, 14,"Accelerate", BT_KEY, 255 },
314 { 32,158,113, 83, 26, 30, 46, 15, 33,"reverse", BT_KEY, 255 },
315 { 33,158,113,112, 26, 31, 47, 32, 16,"reverse", BT_KEY, 255 },
316 { 34,158, 73, 83, 26, 28, 36, 7, 35,"Drop Bomb", BT_KEY, 255 },
317 { 35,158, 73,112, 26, 29, 37, 34, 8,"Drop Bomb", BT_KEY, 255 },
318 { 36,158, 85, 83, 26, 34, 44, 9, 37,"REAR VIEW", BT_KEY, 255 },
319 { 37,158, 85,112, 26, 35, 45, 36, 10,"REAR VIEW", BT_KEY, 255 },
320 { 38,158,133, 83, 26, 46, 40, 19, 39,"Cruise Faster", BT_KEY, 255 },
321 { 39,158,133,112, 26, 47, 41, 38, 20,"Cruise Faster", BT_KEY, 255 },
322 { 40,158,141, 83, 26, 38, 42, 21, 41,"Cruise Slower", BT_KEY, 255 },
323 { 41,158,141,112, 26, 39, 43, 40, 22,"Cruise Slower", BT_KEY, 255 },
324 { 42,158,149, 83, 26, 40, 52, 23, 43,"Cruise Off", BT_KEY, 255 },
325 { 43,158,149,112, 26, 41, 53, 42, 48,"Cruise Off", BT_KEY, 255 },
326 { 44,158, 93, 83, 26, 36, 30, 11, 45,"Automap", BT_KEY, 255 },
327 { 45,158, 93,112, 26, 37, 31, 44, 12,"Automap", BT_KEY, 255 },
328 { 46,158,121, 83, 26, 32, 38, 17, 47,"Afterburner", BT_KEY, 255 },
329 { 47,158,121,112, 26, 33, 39, 46, 18,"Afterburner", BT_KEY, 255 },
330 { 48, 15,161, 71, 26, 22, 50, 43, 49,"Cycle Primary", BT_KEY, 255 },
331 { 49, 15,161,100, 26, 23, 51, 48, 52,"Cycle Primary", BT_KEY, 255 },
332 { 50, 15,169, 71, 26, 48, 1, 53, 51,"Cycle Second", BT_KEY, 255 },
333 { 51, 15,169,100, 26, 49, 24, 50, 54,"Cycle Second", BT_KEY, 255 },
334 { 52,158,163, 83, 26, 42, 54, 49, 53,"Headlight", BT_KEY, 255 },
335 { 53,158,163,112, 26, 43, 55, 52, 50,"Headlight", BT_KEY, 255 },
336 { 54,158,171, 83, 26, 52, 56, 51, 55,"Energy->Shield", BT_KEY, 255 },
337 { 55,158,171,112, 26, 53, 0, 54, 0,"Energy->Shield", BT_KEY, 255 },
338 { 56,158,179,83, 26, 54, 0, 0, 0, "Toggle Bomb", BT_KEY,255},
340 kc_item kc_joystick[NUM_OTHER_CONTROLS] = {
341 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
342 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
343 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
344 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
345 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
346 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
347 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
348 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
349 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
350 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
351 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
352 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
353 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
354 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
355 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
356 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
357 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
358 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
359 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
360 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
361 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
362 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
363 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
364 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
365 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
366 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
367 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
368 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
369 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
370 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
371 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
373 kc_item kc_superjoy[NUM_OTHER_CONTROLS] = {
374 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
375 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
376 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
377 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
378 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
379 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
380 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
381 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
382 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
383 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
384 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
385 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
386 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
387 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
388 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
389 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
390 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
391 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
392 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
393 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
394 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
395 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
396 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
397 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
398 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
399 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
400 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
401 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
402 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
403 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
404 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
407 kc_item kc_mouse[NUM_OTHER_CONTROLS] = {
408 { 0, 25, 46, 85, 26, 12, 1, 24, 5,"Fire primary", BT_MOUSE_BUTTON, 255 },
409 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_MOUSE_BUTTON, 255 },
410 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_MOUSE_BUTTON, 255 },
411 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_MOUSE_BUTTON, 255 },
412 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_MOUSE_BUTTON, 255 },
413 { 5,180, 46, 59, 26, 24, 6, 0, 1,"Slide on", BT_MOUSE_BUTTON, 255 },
414 { 6,180, 54, 59, 26, 5, 7, 1, 4,"Slide left", BT_MOUSE_BUTTON, 255 },
415 { 7,180, 62, 59, 26, 6, 8, 4, 26,"Slide right", BT_MOUSE_BUTTON, 255 },
416 { 8,180, 70, 59, 26, 7, 9, 26, 9,"Slide up", BT_MOUSE_BUTTON, 255 },
417 { 9,180, 78, 59, 26, 8, 10, 8, 2,"Slide down", BT_MOUSE_BUTTON, 255 },
418 { 10,180, 90, 59, 26, 9, 11, 2, 3,"Bank on", BT_MOUSE_BUTTON, 255 },
419 { 11,180, 98, 59, 26, 10, 12, 3, 12,"Bank left", BT_MOUSE_BUTTON, 255 },
420 { 12,180,106, 59, 26, 11, 0, 11, 25,"Bank right", BT_MOUSE_BUTTON, 255 },
421 { 13,103,138, 58, 26, 27, 15, 25, 14,"Pitch U/D", BT_MOUSE_AXIS, 255 },
422 { 14,103,138,106, 8, 23, 16, 13, 15,"Pitch U/D", BT_INVERT, 255 },
423 { 15,103,146, 58, 26, 13, 17, 14, 16,"Turn L/R", BT_MOUSE_AXIS, 255 },
424 { 16,103,146,106, 8, 14, 18, 15, 17,"Turn L/R", BT_INVERT, 255 },
425 { 17,103,154, 58, 26, 15, 19, 16, 18,"Slide L/R", BT_MOUSE_AXIS, 255 },
426 { 18,103,154,106, 8, 16, 20, 17, 19,"Slide L/R", BT_INVERT, 255 },
427 { 19,103,162, 58, 26, 17, 21, 18, 20,"Slide U/D", BT_MOUSE_AXIS, 255 },
428 { 20,103,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
429 { 21,103,170, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_MOUSE_AXIS, 255 },
430 { 22,103,170,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
431 { 23,103,182, 58, 26, 21, 14, 22, 24,"throttle", BT_MOUSE_AXIS, 255 },
432 { 24,103,182,106, 8, 22, 5, 23, 0,"throttle", BT_INVERT, 255 },
433 { 25, 25,109, 85, 26, 3, 27, 12, 13,"REAR VIEW", BT_MOUSE_BUTTON, 255 },
434 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_MOUSE_BUTTON, 255 },
435 { 27, 25,117, 85, 26, 25, 13, 25, 13,"Afterburner", BT_MOUSE_BUTTON, 255 },
439 //added on 2/4/99 by Victor Rachels to add d1x new keys
440 kc_item kc_d2x[NUM_D2X_CONTROLS] = {
441 // id,x,y,w1,w2,u,d,l,r,text_num1,type,value
442 { 0, 15, 49, 71, 26, 27, 2, 27, 1, "WEAPON 1", BT_KEY, 255},
443 { 1, 15, 49,100, 26, 26, 3, 0, 2, "WEAPON 1", BT_JOY_BUTTON, 255},
444 { 2, 15, 57, 71, 26, 0, 4, 1, 3, "WEAPON 2", BT_KEY, 255},
445 { 3, 15, 57,100, 26, 1, 5, 2, 4, "WEAPON 2", BT_JOY_BUTTON, 255},
446 { 4, 15, 65, 71, 26, 2, 6, 3, 5, "WEAPON 3", BT_KEY, 255},
447 { 5, 15, 65,100, 26, 3, 7, 4, 6, "WEAPON 3", BT_JOY_BUTTON, 255},
448 { 6, 15, 73, 71, 26, 4, 8, 5, 7, "WEAPON 4", BT_KEY, 255},
449 { 7, 15, 73,100, 26, 5, 9, 6, 8, "WEAPON 4", BT_JOY_BUTTON, 255},
450 { 8, 15, 81, 71, 26, 6, 10, 7, 9, "WEAPON 5", BT_KEY, 255},
451 { 9, 15, 81,100, 26, 7, 11, 8, 10, "WEAPON 5", BT_JOY_BUTTON, 255},
453 { 10, 15, 89, 71, 26, 8, 12, 9, 11, "WEAPON 6", BT_KEY, 255},
454 { 11, 15, 89,100, 26, 9, 13, 10, 12, "WEAPON 6", BT_JOY_BUTTON, 255},
455 { 12, 15, 97, 71, 26, 10, 14, 11, 13, "WEAPON 7", BT_KEY, 255},
456 { 13, 15, 97,100, 26, 11, 15, 12, 14, "WEAPON 7", BT_JOY_BUTTON, 255},
457 { 14, 15,105, 71, 26, 12, 16, 13, 15, "WEAPON 8", BT_KEY, 255},
458 { 15, 15,105,100, 26, 13, 17, 14, 16, "WEAPON 8", BT_JOY_BUTTON, 255},
459 { 16, 15,113, 71, 26, 14, 18, 15, 17, "WEAPON 9", BT_KEY, 255},
460 { 17, 15,113,100, 26, 15, 19, 16, 18, "WEAPON 9", BT_JOY_BUTTON, 255},
461 { 18, 15,121, 71, 26, 16, 20, 17, 19, "WEAPON 0", BT_KEY, 255},
462 { 19, 15,121,100, 26, 17, 21, 18, 20, "WEAPON 0", BT_JOY_BUTTON, 255},
464 //{ 20, 15,131, 71, 26, 18, 22, 19, 21, "CYC PRIMARY", BT_KEY, 255},
465 //{ 21, 15,131,100, 26, 19, 23, 20, 22, "CYC PRIMARY", BT_JOY_BUTTON, 255},
466 //{ 22, 15,139, 71, 26, 20, 24, 21, 23, "CYC SECONDARY", BT_KEY, 255},
467 //{ 23, 15,139,100, 26, 21, 25, 22, 24, "CYC SECONDARY", BT_JOY_BUTTON, 255},
468 //{ 24, 8,147, 78, 26, 22, 26, 23, 25, "TOGGLE_PRIM AUTO", BT_KEY, 255},
469 //{ 25, 8,147,107, 26, 23, 27, 24, 26, "TOGGLE_PRIM_AUTO", BT_JOY_BUTTON, 255},
470 //{ 26, 8,155, 78, 26, 24, 1, 25, 27, "TOGGLE SEC AUTO", BT_KEY, 255},
471 //{ 27, 8,155,107, 26, 25, 0, 26, 0, "TOGGLE SEC AUTO", BT_JOY_BUTTON, 255},
473 //end this section addition - VR
476 #else // ifndef MACINTOSH (following are macintosh controls)
478 ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
479 {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},
480 {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},
481 {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},
482 {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},
483 {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},
484 {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},
485 {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},
488 ubyte default_firebird_settings[MAX_CONTROLS] =
489 {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};
491 ubyte default_mousestick_settings[MAX_CONTROLS] =
492 {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};
494 kc_item kc_keyboard[NUM_KEY_CONTROLS] = {
495 { 0, 15, 49, 71, 26, 55, 2, 55, 1,"Pitch forward", BT_KEY, 255 },
496 { 1, 15, 49,100, 26, 50, 3, 0, 24,"Pitch forward", BT_KEY, 255 },
497 { 2, 15, 57, 71, 26, 0, 4, 25, 3,"Pitch backward", BT_KEY, 255 },
498 { 3, 15, 57,100, 26, 1, 5, 2, 26,"Pitch backward", BT_KEY, 255 },
499 { 4, 15, 65, 71, 26, 2, 6, 27, 5,"Turn left", BT_KEY, 255 },
500 { 5, 15, 65,100, 26, 3, 7, 4, 28,"Turn left", BT_KEY, 255 },
501 { 6, 15, 73, 71, 26, 4, 8, 29, 7,"Turn right", BT_KEY, 255 },
502 { 7, 15, 73,100, 26, 5, 9, 6, 34,"Turn right", BT_KEY, 255 },
503 { 8, 15, 85, 71, 26, 6, 10, 35, 9,"Slide on", BT_KEY, 255 },
504 { 9, 15, 85,100, 26, 7, 11, 8, 36,"Slide on", BT_KEY, 255 },
505 { 10, 15, 93, 71, 26, 8, 12, 37, 11,"Slide left", BT_KEY, 255 },
506 { 11, 15, 93,100, 26, 9, 13, 10, 44,"Slide left", BT_KEY, 255 },
507 { 12, 15,101, 71, 26, 10, 14, 45, 13,"Slide right", BT_KEY, 255 },
508 { 13, 15,101,100, 26, 11, 15, 12, 30,"Slide right", BT_KEY, 255 },
509 { 14, 15,109, 71, 26, 12, 16, 31, 15,"Slide up", BT_KEY, 255 },
510 { 15, 15,109,100, 26, 13, 17, 14, 32,"Slide up", BT_KEY, 255 },
511 { 16, 15,117, 71, 26, 14, 18, 33, 17,"Slide down", BT_KEY, 255 },
512 { 17, 15,117,100, 26, 15, 19, 16, 46,"Slide down", BT_KEY, 255 },
513 { 18, 15,129, 71, 26, 16, 20, 47, 19,"Bank on", BT_KEY, 255 },
514 { 19, 15,129,100, 26, 17, 21, 18, 38,"Bank on", BT_KEY, 255 },
515 { 20, 15,137, 71, 26, 18, 22, 39, 21,"Bank left", BT_KEY, 255 },
516 { 21, 15,137,100, 26, 19, 23, 20, 40,"Bank left", BT_KEY, 255 },
517 { 22, 15,145, 71, 26, 20, 48, 41, 23,"Bank right", BT_KEY, 255 },
518 { 23, 15,145,100, 26, 21, 49, 22, 42,"Bank right", BT_KEY, 255 },
519 { 24,158, 49, 83, 26, 51, 26, 1, 25,"Fire primary", BT_KEY, 255 },
520 { 25,158, 49,112, 26, 54, 27, 24, 2,"Fire primary", BT_KEY, 255 },
521 { 26,158, 57, 83, 26, 24, 28, 3, 27,"Fire secondary", BT_KEY, 255 },
522 { 27,158, 57,112, 26, 25, 29, 26, 4,"Fire secondary", BT_KEY, 255 },
523 { 28,158, 65, 83, 26, 26, 34, 5, 29,"Fire flare", BT_KEY, 255 },
524 { 29,158, 65,112, 26, 27, 35, 28, 6,"Fire flare", BT_KEY, 255 },
525 { 30,158,105, 83, 26, 44, 32, 13, 31,"Accelerate", BT_KEY, 255 },
526 { 31,158,105,112, 26, 45, 33, 30, 14,"Accelerate", BT_KEY, 255 },
527 { 32,158,113, 83, 26, 30, 46, 15, 33,"reverse", BT_KEY, 255 },
528 { 33,158,113,112, 26, 31, 47, 32, 16,"reverse", BT_KEY, 255 },
529 { 34,158, 73, 83, 26, 28, 36, 7, 35,"Drop Bomb", BT_KEY, 255 },
530 { 35,158, 73,112, 26, 29, 37, 34, 8,"Drop Bomb", BT_KEY, 255 },
531 { 36,158, 85, 83, 26, 34, 44, 9, 37,"REAR VIEW", BT_KEY, 255 },
532 { 37,158, 85,112, 26, 35, 45, 36, 10,"REAR VIEW", BT_KEY, 255 },
533 { 38,158,133, 83, 26, 46, 40, 19, 39,"Cruise Faster", BT_KEY, 255 },
534 { 39,158,133,112, 26, 47, 41, 38, 20,"Cruise Faster", BT_KEY, 255 },
535 { 40,158,141, 83, 26, 38, 42, 21, 41,"Cruise Slower", BT_KEY, 255 },
536 { 41,158,141,112, 26, 39, 43, 40, 22,"Cruise Slower", BT_KEY, 255 },
537 { 42,158,149, 83, 26, 40, 52, 23, 43,"Cruise Off", BT_KEY, 255 },
538 { 43,158,149,112, 26, 41, 53, 42, 48,"Cruise Off", BT_KEY, 255 },
539 { 44,158, 93, 83, 26, 36, 30, 11, 45,"Automap", BT_KEY, 255 },
540 { 45,158, 93,112, 26, 37, 31, 44, 12,"Automap", BT_KEY, 255 },
541 { 46,158,121, 83, 26, 32, 38, 17, 47,"Afterburner", BT_KEY, 255 },
542 { 47,158,121,112, 26, 33, 39, 46, 18,"Afterburner", BT_KEY, 255 },
543 { 48, 15,161, 71, 26, 22, 50, 43, 49,"Cycle Primary", BT_KEY, 255 },
544 { 49, 15,161,100, 26, 23, 51, 48, 52,"Cycle Primary", BT_KEY, 255 },
545 { 50, 15,169, 71, 26, 48, 1, 53, 51,"Cycle Second", BT_KEY, 255 },
546 { 51, 15,169,100, 26, 49, 24, 50, 54,"Cycle Second", BT_KEY, 255 },
547 { 52,158,163, 83, 26, 42, 54, 49, 53,"Headlight", BT_KEY, 255 },
548 { 53,158,163,112, 26, 43, 55, 52, 50,"Headlight", BT_KEY, 255 },
549 { 54,158,171, 83, 26, 52, 25, 51, 55,"Energy->Shield", BT_KEY, 255 },
550 { 55,158,171,112, 26, 53, 0, 54, 0,"Energy->Shield", BT_KEY, 255 },
552 kc_item kc_joystick[NUM_OTHER_CONTROLS] = {
553 { 0, 25, 46, 85, 28, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
554 { 1, 25, 54, 85, 28, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
555 { 2, 25, 85, 85, 28, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
556 { 3, 25, 93, 85, 28, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
557 { 4, 25, 62, 85, 28, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
558 { 5,180, 46, 79, 28, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
559 { 6,180, 54, 79, 28, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
560 { 7,180, 62, 79, 28, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
561 { 8,180, 70, 79, 28, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
562 { 9,180, 78, 79, 28, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
563 { 10,180, 90, 79, 28, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
564 { 11,180, 98, 79, 28, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
565 { 12,180,106, 79, 28, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
566 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
567 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
568 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
569 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
570 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
571 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
572 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
573 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
574 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
575 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
576 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
577 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
578 { 25, 25,109, 85, 28, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
579 { 26, 25, 70, 85, 28, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
580 { 27, 25,117, 85, 28, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
581 { 28,180,114, 79, 28, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
582 { 29,180,122, 79, 28, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
583 { 30, 25,125, 85, 28, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
585 kc_item kc_superjoy[NUM_OTHER_CONTROLS] = {
586 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
587 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
588 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
589 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
590 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
591 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
592 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
593 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
594 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
595 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
596 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
597 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
598 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
599 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
600 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
601 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
602 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
603 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
604 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
605 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
606 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
607 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
608 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
609 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
610 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
611 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
612 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
613 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
614 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
615 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
616 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
619 kc_item kc_mouse[NUM_OTHER_CONTROLS] = {
620 { 0, 25, 46, 85, 26, 28, 1, 28, 5,"Fire primary", BT_MOUSE_BUTTON, 255 },
621 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_MOUSE_BUTTON, 255 },
622 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_MOUSE_BUTTON, 255 },
623 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_MOUSE_BUTTON, 255 },
624 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_MOUSE_BUTTON, 255 },
625 { 5,180, 46, 59, 26, 24, 6, 0, 1,"Slide on", BT_MOUSE_BUTTON, 255 },
626 { 6,180, 54, 59, 26, 5, 7, 1, 4,"Slide left", BT_MOUSE_BUTTON, 255 },
627 { 7,180, 62, 59, 26, 6, 8, 4, 26,"Slide right", BT_MOUSE_BUTTON, 255 },
628 { 8,180, 70, 59, 26, 7, 9, 26, 9,"Slide up", BT_MOUSE_BUTTON, 255 },
629 { 9,180, 78, 59, 26, 8, 10, 8, 2,"Slide down", BT_MOUSE_BUTTON, 255 },
630 { 10,180, 90, 59, 26, 9, 11, 2, 3,"Bank on", BT_MOUSE_BUTTON, 255 },
631 { 11,180, 98, 59, 26, 10, 12, 3, 12,"Bank left", BT_MOUSE_BUTTON, 255 },
632 { 12,180,106, 59, 26, 11, 28, 11, 25,"Bank right", BT_MOUSE_BUTTON, 255 },
633 { 13,103,138, 58, 26, 27, 15, 27, 14,"Pitch U/D", BT_MOUSE_AXIS, 255 },
634 { 14,103,138,106, 8, 23, 16, 13, 15,"Pitch U/D", BT_INVERT, 255 },
635 { 15,103,146, 58, 26, 13, 17, 14, 16,"Turn L/R", BT_MOUSE_AXIS, 255 },
636 { 16,103,146,106, 8, 14, 18, 15, 17,"Turn L/R", BT_INVERT, 255 },
637 { 17,103,154, 58, 26, 15, 19, 16, 18,"Slide L/R", BT_MOUSE_AXIS, 255 },
638 { 18,103,154,106, 8, 16, 20, 17, 19,"Slide L/R", BT_INVERT, 255 },
639 { 19,103,162, 58, 26, 17, 21, 18, 20,"Slide U/D", BT_MOUSE_AXIS, 255 },
640 { 20,103,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
641 { 21,103,170, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_MOUSE_AXIS, 255 },
642 { 22,103,170,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
643 { 23,103,182, 58, 26, 21, 14, 22, 24,"throttle", BT_MOUSE_AXIS, 255 },
644 { 24,103,182,106, 8, 22, 5, 23, 28,"throttle", BT_INVERT, 255 },
645 { 25, 25,109, 85, 26, 3, 27, 12, 27,"REAR VIEW", BT_MOUSE_BUTTON, 255 },
646 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_MOUSE_BUTTON, 255 },
647 { 27, 25,117, 85, 26, 25, 13, 25, 13,"Afterburner", BT_MOUSE_BUTTON, 255 },
652 //added on 2/4/99 by Victor Rachels to add new keys system
653 ubyte default_kconfig_d2x_settings[MAX_D2X_CONTROLS] = {
654 0x2 ,0xff,0x3 ,0xff,0x4 ,0xff,0x5 ,0xff,0x6 ,0xff,0x7 ,0xff,0x8 ,0xff,0x9 ,
655 0xff,0xa ,0xff,0xb ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
656 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff };
657 //end this section addition - VR
659 void kc_drawitem( kc_item *item, int is_current );
660 void kc_change_key( kc_item * item );
661 void kc_change_joybutton( kc_item * item );
662 void kc_change_mousebutton( kc_item * item );
663 void kc_next_joyaxis(kc_item *item); //added by WraithX on 11/22/00
664 void kc_change_joyaxis( kc_item * item );
665 void kc_change_mouseaxis( kc_item * item );
666 void kc_change_invert( kc_item * item );
667 void kconfig_read_fcs( int raw_axis );
668 void kconfig_set_fcs_button( int btn, int button );
669 void kconfig_read_external_controls( void );
671 // the following methods added by WraithX, 4/17/00
672 int isJoyRotationKey(int test_key)
674 if (test_key == kc_joystick[11].value ||
675 test_key == kc_joystick[12].value)
682 }// method isJoyRotationKey
684 int isMouseRotationKey(int test_key)
686 if (test_key == kc_mouse[11].value ||
687 test_key == kc_mouse[12].value)
694 }// method isMouseRotationKey
696 int isKeyboardRotationKey(int test_key)
698 if (test_key == kc_keyboard[0].value ||
699 test_key == kc_keyboard[1].value ||
700 test_key == kc_keyboard[2].value ||
701 test_key == kc_keyboard[3].value ||
702 test_key == kc_keyboard[4].value ||
703 test_key == kc_keyboard[5].value ||
704 test_key == kc_keyboard[6].value ||
705 test_key == kc_keyboard[7].value ||
706 test_key == kc_keyboard[20].value ||
707 test_key == kc_keyboard[21].value ||
708 test_key == kc_keyboard[22].value ||
709 test_key == kc_keyboard[23].value)
716 }// method isKeyboardRotationKey
717 // end addition - WraithX
719 int kconfig_is_axes_used(int axis)
722 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
723 if (( kc_joystick[i].type == BT_JOY_AXIS ) && (kc_joystick[i].value == axis ))
729 #ifdef TABLE_CREATION
730 int find_item_at( kc_item * items, int nitems, int x, int y )
734 for (i=0; i<nitems; i++ ) {
735 if ( ((items[i].x+items[i].w1)==x) && (items[i].y==y))
741 int find_next_item_up( kc_item * items, int nitems, int citem )
746 x = items[citem].x+items[citem].w1;
751 y = grd_curcanv->cv_bitmap.bm_h-1;
754 x = grd_curcanv->cv_bitmap.bm_w-1;
757 i = find_item_at( items, nitems, x, y );
763 int find_next_item_down( kc_item * items, int nitems, int citem )
768 x = items[citem].x+items[citem].w1;
772 if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) {
775 if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) {
779 i = find_item_at( items, nitems, x, y );
785 int find_next_item_right( kc_item * items, int nitems, int citem )
790 x = items[citem].x+items[citem].w1;
794 if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) {
797 if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) {
801 i = find_item_at( items, nitems, x, y );
807 int find_next_item_left( kc_item * items, int nitems, int citem )
812 x = items[citem].x+items[citem].w1;
817 x = grd_curcanv->cv_bitmap.bm_w-1;
820 y = grd_curcanv->cv_bitmap.bm_h-1;
823 i = find_item_at( items, nitems, x, y );
831 int get_item_height(kc_item *item)
836 if (item->value==255) {
839 switch( item->type ) {
841 strncpy( btext, key_text[item->value], 10 ); break;
842 case BT_MOUSE_BUTTON:
844 strncpy( btext, Text_string[mousebutton_text[item->value]], 10); break;
846 strncpy( btext, mousebutton_text[item->value], 10 ); break;
849 strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break;
852 sprintf(btext, "J%d B%d", j_button[item->value].joydev, j_Get_joydev_button_number(item->value));
854 if ( joybutton_text[item->value] !=-1 )
855 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
857 sprintf( btext, "BTN%d", item->value );
862 sprintf( btext, "J%d A%d", j_axis[item->value].joydev, j_Get_joydev_axis_number (item->value) );
864 strncpy(btext, Text_string[joyaxis_text[item->value]], 10);
868 strncpy( btext, Text_string[invert_text[item->value]], 10 ); break;
871 gr_get_string_size(btext, &w, &h, &aw );
877 void kconfig_sub(kc_item * items,int nitems, char * title)
880 dd_grs_canvas * save_canvas,
881 grs_canvas * save_canvas
883 grs_font * save_font;
886 int mouse_state, omouse_state, mx, my, x1, x2, y1, y2;
887 int close_x, close_y, close_size;
890 int i,k,ocitem,citem;
891 int time_stopped = 0;
892 WIN(char *old_bg_pcx);
894 WIN(old_bg_pcx = _SCRContext.bkg_filename);
895 WIN(DEFINE_SCREEN(NULL));
900 if (!((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence)) )
906 // if (Config_control_type == CONTROL_WINJOYSTICK) {
908 // joydefsw_win_joyselect(title2); title = title2,
910 // ); // Get Samir...
914 save_canvas = dd_grd_curcanv,
915 save_canvas = grd_curcanv
920 dd_gr_set_current_canvas(NULL),
921 gr_set_current_canvas(NULL)
923 save_font = grd_curcanv->cv_font;
929 old_keyd_repeat = keyd_repeat;
932 //gr_clear_canvas( BM_XRGB(0,0,0) );
934 nm_draw_background(0, 0, grd_curcanv->cv_bitmap.bm_w - 1, grd_curcanv->cv_bitmap.bm_h - 1);
935 gr_palette_load (gr_palette);
937 grd_curcanv->cv_font = MEDIUM3_FONT;
939 WIN(DDGRLOCK(dd_grd_curcanv));
942 p = strchr( title, '\n' );
944 gr_string( 0x8000, LHY(8), title );
949 // if ( items == kc_keyboard ) {
950 // gr_string( 0x8000, 8, "Keyboard" );
951 // } else if ( items == kc_joystick ) {
952 // gr_string( 0x8000, 8, "Joysticks" );
953 // } else if ( items == kc_mouse ) {
954 // gr_string( 0x8000, 8, "Mouse" );
958 close_x = close_y = MenuHires?15:7;
959 close_size = MenuHires?10:5;
960 gr_setcolor( BM_XRGB(0, 0, 0) );
961 gr_rect(close_x, close_y, close_x + close_size, close_y + close_size);
962 gr_setcolor( BM_XRGB(21, 21, 21) );
963 gr_rect(close_x + LHX(1), close_y + LHX(1), close_x + close_size - LHX(1), close_y + close_size - LHX(1));
966 grd_curcanv->cv_font = GAME_FONT;
967 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
970 gr_string( 0x8000, LHY(20), TXT_KCONFIG_STRING_1 );
972 gr_string( 0x8000, LHY(20), "Enter changes, ctrl-d deletes, ctrl-r resets defaults, ESC exits");
974 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
975 if ( items == kc_keyboard ) {
976 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
977 gr_setcolor( BM_XRGB(31,27,6) );
979 gr_scanline( LHX(98), LHX(106), LHY(42) );
980 gr_scanline( LHX(120), LHX(128), LHY(42) );
981 gr_pixel( LHX(98), LHY(43) );
982 gr_pixel( LHX(98), LHY(44) );
983 gr_pixel( LHX(128), LHY(43) );
984 gr_pixel( LHX(128), LHY(44) );
986 gr_string( LHX(109), LHY(40), "OR" );
988 gr_scanline( LHX(253), LHX(261), LHY(42) );
989 gr_scanline( LHX(274), LHX(283), LHY(42) );
990 gr_pixel( LHX(253), LHY(43) );
991 gr_pixel( LHX(253), LHY(44) );
992 gr_pixel( LHX(283), LHY(43) );
993 gr_pixel( LHX(283), LHY(44) );
995 gr_string( LHX(264), LHY(40), "OR" );
997 } if ( items == kc_joystick ) {
998 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
999 gr_setcolor( BM_XRGB(31,27,6) );
1000 gr_scanline( LHX(18), LHX(135), LHY(37) );
1001 gr_scanline( LHX(181), LHX(294), LHY(37) );
1002 gr_scanline( LHX(18), LHX(144), LHY(119+18) );
1003 gr_scanline( LHX(174), LHX(294), LHY(119+18) );
1004 gr_string( 0x8000, LHY(35), TXT_BUTTONS );
1005 gr_string( 0x8000,LHY(117+18), TXT_AXES );
1006 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1007 gr_string( LHX(81), LHY(137+8), TXT_AXIS );
1008 gr_string( LHX(111), LHY(137+8), TXT_INVERT );
1009 gr_string( LHX(222), LHY(137+8), TXT_AXIS );
1010 gr_string( LHX(252), LHY(137+8), TXT_INVERT );
1011 } else if ( items == kc_mouse ) {
1012 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1013 gr_setcolor( BM_XRGB(31,27,6) );
1014 gr_scanline( LHX(18), LHX(135), LHY(37) );
1015 gr_scanline( LHX(181), LHX(294), LHY(37) );
1016 gr_scanline( LHX(18), LHX(144), LHY(119+5) );
1017 gr_scanline( LHX(174), LHX(294), LHY(119+5) );
1018 gr_string( 0x8000, LHY(35), TXT_BUTTONS );
1019 gr_string( 0x8000,LHY(117+5), TXT_AXES );
1020 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1021 gr_string( LHX(169), LHY(129), TXT_AXIS );
1022 gr_string( LHX(199), LHY(129), TXT_INVERT );
1025 else if ( items == kc_d2x )
1027 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1028 gr_setcolor( BM_XRGB(31,27,6) );
1030 gr_string(LHX( 94), LHY(40), "KB");
1031 gr_string(LHX(121), LHY(40), "JOY");
1035 WIN(DDGRUNLOCK(dd_grd_curcanv));
1037 for (i=0; i<nitems; i++ ) {
1038 kc_drawitem( &items[i], 0 );
1042 kc_drawitem( &items[citem], 1 );
1044 newmenu_show_cursor();
1046 #ifdef NEWMENU_MOUSE
1047 mouse_state = omouse_state = 0;
1051 // Windows addendum to allow for kconfig input.
1056 DoMessageStuff(&msg);
1058 if (_RedrawScreen) {
1059 _RedrawScreen = FALSE;
1061 dd_gr_set_current_canvas(NULL);
1071 //see if redbook song needs to be restarted
1072 songs_check_redbook_repeat();
1076 #ifdef NEWMENU_MOUSE
1077 omouse_state = mouse_state;
1078 mouse_state = mouse_button_state(0);
1081 if ( !time_stopped ) {
1083 if (multi_menu_poll() == -1)
1092 MAC(case KEY_COMMAND+KEY_SHIFTED+KEY_3:)
1093 case KEY_PRINT_SCREEN:
1094 save_screen_shot(0);
1096 case KEY_CTRLED+KEY_D:
1097 items[citem].value = 255;
1098 kc_drawitem( &items[citem], 1 );
1100 case KEY_CTRLED+KEY_R:
1101 if ( items==kc_keyboard ) {
1102 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1103 items[i].value=default_kconfig_settings[0][i];
1104 kc_drawitem( &items[i], 0 );
1107 } else if ( items==kc_d2x ) {
1108 for(i=0;i<NUM_D2X_CONTROLS;i++)
1110 items[i].value=default_kconfig_d2x_settings[i];
1111 kc_drawitem( &items[i], 0 );
1116 // hack for firebire and mousestick default controls since I made
1117 // them the same control type -- dumb dumb dumb
1118 if (joy_have_firebird())
1119 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1120 items[i].value = default_firebird_settings[i];
1121 kc_drawitem( &items[i], 0 );
1123 else if (joy_have_mousestick())
1124 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1125 items[i].value = default_mousestick_settings[i];
1126 kc_drawitem( &items[i], 0 );
1129 #endif // note link to above else
1130 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1131 items[i].value = default_kconfig_settings[Config_control_type][i];
1132 kc_drawitem( &items[i], 0 );
1135 kc_drawitem( &items[citem], 1 );
1138 items[citem].value=255;
1139 kc_drawitem( &items[citem], 1 );
1143 #ifdef TABLE_CREATION
1144 if (items[citem].u==-1) items[citem].u=find_next_item_up( items,nitems, citem);
1146 citem = items[citem].u;
1151 #ifdef TABLE_CREATION
1152 if (items[citem].d==-1) items[citem].d=find_next_item_down( items,nitems, citem);
1154 citem = items[citem].d;
1158 #ifdef TABLE_CREATION
1159 if (items[citem].l==-1) items[citem].l=find_next_item_left( items,nitems, citem);
1161 citem = items[citem].l;
1165 #ifdef TABLE_CREATION
1166 if (items[citem].r==-1) items[citem].r=find_next_item_right( items,nitems, citem);
1168 citem = items[citem].r;
1172 switch( items[citem].type ) {
1173 case BT_KEY: kc_change_key( &items[citem] ); break;
1174 case BT_MOUSE_BUTTON: kc_change_mousebutton( &items[citem] ); break;
1175 case BT_MOUSE_AXIS: kc_change_mouseaxis( &items[citem] ); break;
1176 case BT_JOY_BUTTON: kc_change_joybutton( &items[citem] ); break;
1177 case BT_JOY_AXIS: kc_change_joyaxis( &items[citem] ); break;
1178 case BT_INVERT: kc_change_invert( &items[citem] ); break;
1181 //the following case added by WraithX on 11/22/00 to work around the weird joystick bug...
1183 switch(items[citem].type)
1186 kc_next_joyaxis(&items[citem]);
1190 //end addition by WraithX
1193 grd_curcanv->cv_font = save_font;
1195 WIN(DEFINE_SCREEN(old_bg_pcx));
1198 dd_gr_set_current_canvas(save_canvas),
1199 gr_set_current_canvas( save_canvas )
1201 keyd_repeat = old_keyd_repeat;
1202 game_flush_inputs();
1203 newmenu_hide_cursor();
1207 #ifdef TABLE_CREATION
1208 case KEY_DEBUGGED+KEY_F12: {
1210 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1211 kc_keyboard[i].u = find_next_item_up( kc_keyboard,NUM_KEY_CONTROLS, i);
1212 kc_keyboard[i].d = find_next_item_down( kc_keyboard,NUM_KEY_CONTROLS, i);
1213 kc_keyboard[i].l = find_next_item_left( kc_keyboard,NUM_KEY_CONTROLS, i);
1214 kc_keyboard[i].r = find_next_item_right( kc_keyboard,NUM_KEY_CONTROLS, i);
1216 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1217 kc_joystick[i].u = find_next_item_up( kc_joystick,NUM_OTHER_CONTROLS, i);
1218 kc_joystick[i].d = find_next_item_down( kc_joystick,NUM_OTHER_CONTROLS, i);
1219 kc_joystick[i].l = find_next_item_left( kc_joystick,NUM_OTHER_CONTROLS, i);
1220 kc_joystick[i].r = find_next_item_right( kc_joystick,NUM_OTHER_CONTROLS, i);
1222 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1223 kc_mouse[i].u = find_next_item_up( kc_mouse,NUM_OTHER_CONTROLS, i);
1224 kc_mouse[i].d = find_next_item_down( kc_mouse,NUM_OTHER_CONTROLS, i);
1225 kc_mouse[i].l = find_next_item_left( kc_mouse,NUM_OTHER_CONTROLS, i);
1226 kc_mouse[i].r = find_next_item_right( kc_mouse,NUM_OTHER_CONTROLS, i);
1228 fp = fopen( "kconfig.cod", "wt" );
1230 fprintf( fp, "ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {\n" );
1231 for (i=0; i<CONTROL_MAX_TYPES; i++ ) {
1233 fprintf( fp, "{0x%x", kconfig_settings[i][0] );
1234 for (j=1; j<MAX_CONTROLS; j++ )
1235 fprintf( fp, ",0x%x", kconfig_settings[i][j] );
1236 fprintf( fp, "},\n" );
1238 fprintf( fp, "};\n" );
1240 fprintf( fp, "\nkc_item kc_keyboard[NUM_KEY_CONTROLS] = {\n" );
1241 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1242 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1243 kc_keyboard[i].id, kc_keyboard[i].x, kc_keyboard[i].y, kc_keyboard[i].w1, kc_keyboard[i].w2,
1244 kc_keyboard[i].u, kc_keyboard[i].d, kc_keyboard[i].l, kc_keyboard[i].r,
1245 34, kc_keyboard[i].text, 34, btype_text[kc_keyboard[i].type] );
1247 fprintf( fp, "};" );
1249 fprintf( fp, "\nkc_item kc_joystick[NUM_OTHER_CONTROLS] = {\n" );
1250 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1251 if (kc_joystick[i].type == BT_JOY_BUTTON)
1252 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1253 kc_joystick[i].id, kc_joystick[i].x, kc_joystick[i].y, kc_joystick[i].w1, kc_joystick[i].w2,
1254 kc_joystick[i].u, kc_joystick[i].d, kc_joystick[i].l, kc_joystick[i].r,
1255 34, kc_joystick[i].text, 34, btype_text[kc_joystick[i].type] );
1257 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1258 kc_joystick[i].id, kc_joystick[i].x, kc_joystick[i].y, kc_joystick[i].w1, kc_joystick[i].w2,
1259 kc_joystick[i].u, kc_joystick[i].d, kc_joystick[i].l, kc_joystick[i].r,
1260 34, kc_joystick[i].text, 34, btype_text[kc_joystick[i].type] );
1262 fprintf( fp, "};" );
1264 fprintf( fp, "\nkc_item kc_mouse[NUM_OTHER_CONTROLS] = {\n" );
1265 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1266 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1267 kc_mouse[i].id, kc_mouse[i].x, kc_mouse[i].y, kc_mouse[i].w1, kc_mouse[i].w2,
1268 kc_mouse[i].u, kc_mouse[i].d, kc_mouse[i].l, kc_mouse[i].r,
1269 34, kc_mouse[i].text, 34, btype_text[kc_mouse[i].type] );
1271 fprintf( fp, "};" );
1280 #ifdef NEWMENU_MOUSE
1281 if ( (mouse_state && !omouse_state) || (mouse_state && omouse_state) ) {
1284 mouse_get_pos(&mx, &my);
1285 for (i=0; i<nitems; i++ ) {
1286 item_height = get_item_height( &items[i] );
1287 x1 = grd_curcanv->cv_bitmap.bm_x + LHX(items[i].x) + LHX(items[i].w1);
1288 x2 = x1 + LHX(items[i].w2);
1289 y1 = grd_curcanv->cv_bitmap.bm_y + LHY(items[i].y);
1290 y2 = y1 + LHX(item_height);
1291 if (((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2))) {
1297 else if ( !mouse_state && omouse_state ) {
1300 mouse_get_pos(&mx, &my);
1301 item_height = get_item_height( &items[citem] );
1302 x1 = grd_curcanv->cv_bitmap.bm_x + LHX(items[citem].x) + LHX(items[citem].w1);
1303 x2 = x1 + LHX(items[citem].w2);
1304 y1 = grd_curcanv->cv_bitmap.bm_y + LHY(items[citem].y);
1305 y2 = y1 + LHY(item_height);
1306 if (((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2))) {
1307 newmenu_hide_cursor();
1308 switch( items[citem].type ) {
1309 case BT_KEY: kc_change_key( &items[citem] ); break;
1310 case BT_MOUSE_BUTTON: kc_change_mousebutton( &items[citem] ); break;
1311 case BT_MOUSE_AXIS: kc_change_mouseaxis( &items[citem] ); break;
1312 case BT_JOY_BUTTON: kc_change_joybutton( &items[citem] ); break;
1313 case BT_JOY_AXIS: kc_change_joyaxis( &items[citem] ); break;
1314 case BT_INVERT: kc_change_invert( &items[citem] ); break;
1316 newmenu_show_cursor();
1318 x1 = grd_curcanv->cv_bitmap.bm_x + close_x + LHX(1);
1319 x2 = x1 + close_size - LHX(1);
1320 y1 = grd_curcanv->cv_bitmap.bm_y + close_y + LHX(1);
1321 y2 = y1 + close_size - LHX(1);
1322 if ( ((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2)) ) {
1323 grd_curcanv->cv_font = save_font;
1324 WINDOS(dd_gr_set_current_canvas( save_canvas ),
1325 gr_set_current_canvas( save_canvas ));
1326 keyd_repeat = old_keyd_repeat;
1327 game_flush_inputs();
1328 newmenu_hide_cursor();
1336 #endif // NEWMENU_MOUSE
1338 if (ocitem!=citem) {
1339 newmenu_hide_cursor();
1340 kc_drawitem( &items[ocitem], 0 );
1341 kc_drawitem( &items[citem], 1 );
1342 newmenu_show_cursor();
1348 void kc_drawitem( kc_item *item, int is_current )
1352 // PA_DFX (pa_set_frontbuffer_current());
1353 WIN(DDGRLOCK(dd_grd_curcanv));
1356 gr_set_fontcolor( BM_XRGB(20,20,29), -1 );
1358 gr_set_fontcolor( BM_XRGB(15,15,24), -1 );
1359 gr_string( LHX(item->x), LHY(item->y), item->text );
1360 WIN(DDGRUNLOCK(dd_grd_curcanv));
1362 if (item->value==255) {
1363 strcpy( btext, "" );
1365 switch( item->type ) {
1367 strncpy( btext, key_text[item->value], 10 ); break;
1368 case BT_MOUSE_BUTTON:
1370 //strncpy( btext, Text_string[mousebutton_text[item->value]], 10 ); break;
1371 strncpy( btext, (item->value <= 3)?Text_string[mousebutton_text[item->value]]:mousebutton_textra[item->value-3], 10 ); break;
1373 strncpy( btext, mousebutton_text[item->value], 10 ); break;
1376 strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break;
1378 #ifdef USE_LINUX_JOY
1379 sprintf(btext, "J%d B%d", j_button[item->value].joydev, j_Get_joydev_button_number(item->value));
1383 if (joybutton_text[item->value] != -1)
1384 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1386 sprintf( btext, "BTN%2d", item->value+1 );
1388 if ( joybutton_text[item->value] !=-1 )
1389 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1391 sprintf( btext, "BTN%d", item->value );
1394 strncpy( btext, joy_btn_name( item->value ), 10);
1396 sprintf( btext, "BTN%d", item->value );
1401 #ifdef USE_LINUX_JOY
1402 sprintf(btext, "J%d A%d", j_axis[item->value].joydev, j_Get_joydev_axis_number(item->value));
1404 strncpy(btext, Text_string[joyaxis_text[item->value]], 10);
1408 strncpy( btext, Text_string[invert_text[item->value]], 10 ); break;
1412 WIN(DDGRLOCK(dd_grd_curcanv));
1413 gr_get_string_size(btext, &w, &h, &aw );
1416 gr_setcolor( BM_XRGB(21,0,24) );
1418 gr_setcolor( BM_XRGB(16,0,19) );
1419 gr_urect( LHX(item->w1+item->x), LHY(item->y-1), LHX(item->w1+item->x+item->w2), LHY(item->y)+h );
1421 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1423 x = LHX(item->w1+item->x)+((LHX(item->w2)-w)/2);
1425 gr_string( x, LHY(item->y), btext );
1426 // PA_DFX (pa_set_backbuffer_current());
1428 WIN(DDGRUNLOCK(dd_grd_curcanv));
1433 static int looper=0;
1435 void kc_drawquestion( kc_item *item )
1439 WIN(DDGRLOCK(dd_grd_curcanv));
1440 // PA_DFX (pa_set_frontbuffer_current());
1442 gr_get_string_size("?", &w, &h, &aw );
1444 c = BM_XRGB(21,0,24);
1446 //@@gr_setcolor( gr_fade_table[fades[looper]*256+c] );
1447 gr_setcolor(BM_XRGB(21*fades[looper]/31,0,24*fades[looper]/31));
1449 if (looper>63) looper=0;
1451 gr_urect( LHX(item->w1+item->x), LHY(item->y-1), LHX(item->w1+item->x+item->w2), LHY(item->y)+h );
1453 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1455 x = LHX(item->w1+item->x)+((LHX(item->w2)-w)/2);
1457 gr_string( x, LHY(item->y), "?" );
1458 // PA_DFX (pa_set_backbuffer_current());
1459 WIN(DDGRUNLOCK(dd_grd_curcanv));
1463 void kc_change_key( kc_item * item )
1468 WIN(DDGRLOCK(dd_grd_curcanv));
1469 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1471 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_KEY );
1472 WIN(DDGRUNLOCK(dd_grd_curcanv));
1474 game_flush_inputs();
1478 while( (k!=KEY_ESC) && (keycode==255) )
1484 DoMessageStuff(&msg);
1491 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1494 // if ( Game_mode & GM_MULTI )
1495 // GameLoop( 0, 0 ); // Continue
1497 timer_delay(f0_1/10);
1498 kc_drawquestion( item );
1500 for (i=0; i<256; i++ ) {
1501 if (keyd_pressed[i] && (strlen(key_text[i])>0)) {
1503 for (n=0; n<sizeof(system_keys); n++ )
1504 if ( system_keys[n] == i )
1513 for (i=0; i<Num_items; i++ ) {
1514 n = item - All_items;
1515 if ( (i!=n) && (All_items[i].type==BT_KEY) && (All_items[i].value==keycode) ) {
1516 All_items[i].value = 255;
1517 kc_drawitem( &All_items[i], 0 );
1520 item->value = keycode;
1522 kc_drawitem( item, 1 );
1524 WIN(DDGRLOCK(dd_grd_curcanv));
1525 gr_set_fontcolor( BM_XRGB(28,28,28), BM_XRGB(0,0,0) );
1526 WIN(DDGRUNLOCK(dd_grd_curcanv));
1528 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1530 game_flush_inputs();
1534 void kc_change_joybutton( kc_item * item )
1539 WIN(DDGRLOCK(dd_grd_curcanv));
1540 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1542 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_JBUTTON );
1543 WIN(DDGRUNLOCK(dd_grd_curcanv));
1545 game_flush_inputs();
1549 while( (k!=KEY_ESC) && (code==255))
1554 DoMessageStuff(&msg);
1560 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1563 // if ( Game_mode & GM_MULTI )
1564 // GameLoop( 0, 0 ); // Continue
1566 timer_delay(f0_1/10);
1568 if (k == KEY_PRINT_SCREEN)
1569 save_screen_shot(0);
1571 kc_drawquestion( item );
1573 WIN(code = joydefsw_do_button());
1576 code = joy_do_buttons();
1579 #if !defined(WINDOWS) && !defined(MACINTOSH)
1580 if (Config_control_type==CONTROL_THRUSTMASTER_FCS) {
1582 joystick_read_raw_axis( JOY_ALL_AXIS, axis );
1583 kconfig_read_fcs( axis[3] );
1584 if ( joy_get_button_state(7) ) code = 7;
1585 if ( joy_get_button_state(11) ) code = 11;
1586 if ( joy_get_button_state(15) ) code = 15;
1587 if ( joy_get_button_state(19) ) code = 19;
1588 for (i=0; i<4; i++ ) {
1589 if ( joy_get_button_state(i) )
1592 } else if (Config_control_type==CONTROL_FLIGHTSTICK_PRO) {
1593 for (i=4; i<20; i++ ) {
1594 if ( joy_get_button_state(i) ) {
1596 mprintf(( 0, "JB: %d\n", code ));
1600 for (i=0; i<MAX_BUTTONS; i++ ) {
1601 if ( joy_get_button_state(i) )
1608 for (i=0; i<Num_items; i++ ) {
1609 n = item - All_items;
1610 if ( (i!=n) && (All_items[i].type==BT_JOY_BUTTON) && (All_items[i].value==code) ) {
1611 All_items[i].value = 255;
1612 kc_drawitem( &All_items[i], 0 );
1617 kc_drawitem( item, 1 );
1618 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1619 game_flush_inputs();
1622 void kc_change_mousebutton( kc_item * item )
1627 WIN(DDGRLOCK(dd_grd_curcanv));
1628 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1630 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_MBUTTON );
1631 WIN(DDGRUNLOCK(dd_grd_curcanv));
1634 game_flush_inputs();
1638 while( (k!=KEY_ESC) && (code==255))
1643 DoMessageStuff(&msg);
1649 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1652 // if ( Game_mode & GM_MULTI )
1653 // GameLoop( 0, 0 ); // Continue
1655 timer_delay(f0_1/10);
1657 if (k == KEY_PRINT_SCREEN)
1658 save_screen_shot(0);
1660 kc_drawquestion( item );
1662 b = mouse_get_btns();
1663 for (i = 0; i < 16; i++ ) {
1669 for (i=0; i<Num_items; i++ ) {
1670 n = item - All_items;
1671 if ( (i!=n) && (All_items[i].type==BT_MOUSE_BUTTON) && (All_items[i].value==code) ) {
1672 All_items[i].value = 255;
1673 kc_drawitem( &All_items[i], 0 );
1678 kc_drawitem( item, 1 );
1679 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1680 game_flush_inputs();
1685 // 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
1686 void kc_next_joyaxis(kc_item *item)
1688 int n, i, k, max, tries;
1695 // I modelled this ifdef after the code in the kc_change_joyaxis method.
1696 // So, if somethin's not workin here, it might not be workin there either.
1699 code = (item->value + 1) % max;
1703 for (i = 0; i < Num_items; i++)
1705 n = item - All_items;
1706 if ((i != n) && (All_items[i].type == BT_JOY_AXIS) && (All_items[i].value == code))
1709 return; // all axes allocated already
1710 i = -1; // -1 so the i++ will push back to 0
1711 code = (item->value + ++tries) % max; // try next axis
1718 kc_drawitem(item, 1);
1719 nm_restore_background(0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h);
1720 game_flush_inputs();
1722 }//method kc_next_joyaxis
1723 //end addition by WraithX
1726 void kc_change_joyaxis( kc_item * item )
1728 int axis[JOY_MAX_AXES];
1729 int old_axis[JOY_MAX_AXES];
1730 int numaxis = joy_num_axes;
1734 WIN(DDGRLOCK(dd_grd_curcanv));
1735 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1737 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_JOY_AXIS );
1738 WIN(DDGRUNLOCK(dd_grd_curcanv));
1740 game_flush_inputs();
1745 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, old_axis ),
1746 joystick_read_raw_axis( JOY_ALL_AXIS, old_axis )
1749 while( (k!=KEY_ESC) && (code==255))
1754 DoMessageStuff(&msg);
1760 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1763 // if ( Game_mode & GM_MULTI )
1764 // GameLoop( 0, 0 ); // Continue
1766 timer_delay(f0_1/10);
1768 if (k == KEY_PRINT_SCREEN)
1769 save_screen_shot(0);
1771 kc_drawquestion( item );
1774 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, axis ),
1775 joystick_read_raw_axis( JOY_ALL_AXIS, axis )
1778 for (i=0; i<numaxis; i++ ) {
1779 #if defined (MACINTOSH)
1780 if ( abs(axis[i]-old_axis[i])>100 ) {
1781 #elif defined(WINDOWS)
1782 if ( abs(axis[i]-old_axis[i])>1024 ) {
1784 if ( abs(axis[i]-old_axis[i])>200 ) {
1787 con_printf(CON_DEBUG, "Axis Movement detected: Axis %i\n", i);
1789 //old_axis[i] = axis[i];
1791 for (i=0; i<Num_items; i++ )
1793 n = item - All_items;
1794 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) )
1800 for (i=0; i<Num_items; i++ ) {
1801 n = item - All_items;
1802 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) ) {
1803 All_items[i].value = 255;
1804 kc_drawitem( &All_items[i], 0 );
1810 kc_drawitem( item, 1 );
1811 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1812 game_flush_inputs();
1816 void kc_change_mouseaxis( kc_item * item )
1825 WIN(DDGRLOCK(dd_grd_curcanv));
1826 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1828 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_MSE_AXIS );
1829 WIN(DDGRUNLOCK(dd_grd_curcanv));
1831 game_flush_inputs();
1835 mouse_get_delta( &dx, &dy );
1837 while( (k!=KEY_ESC) && (code==255))
1842 DoMessageStuff(&msg);
1848 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1851 // if ( Game_mode & GM_MULTI )
1852 // GameLoop( 0, 0 ); // Continue
1854 timer_delay(f0_1/10);
1856 if (k == KEY_PRINT_SCREEN)
1857 save_screen_shot(0);
1859 kc_drawquestion( item );
1862 mouse_get_delta_z( &dx, &dy, &dz );
1864 mouse_get_delta( &dx, &dy );
1866 if ( abs(dx)>20 ) code = 0;
1867 if ( abs(dy)>20 ) code = 1;
1869 if ( abs(dz)>20 ) code = 2;
1873 for (i=0; i<Num_items; i++ ) {
1874 n = item - All_items;
1875 if ( (i!=n) && (All_items[i].type==BT_MOUSE_AXIS) && (All_items[i].value==code) ) {
1876 All_items[i].value = 255;
1877 kc_drawitem( &All_items[i], 0 );
1882 kc_drawitem( item, 1 );
1883 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1884 game_flush_inputs();
1889 void kc_change_invert( kc_item * item )
1891 game_flush_inputs();
1898 kc_drawitem( item, 1 );
1902 #include "screens.h"
1904 void kconfig(int n, char * title)
1907 grs_bitmap *save_bm;
1909 set_screen_mode( SCREEN_MENU );
1914 WIN(mouse_set_mode(0));
1915 WIN(dd_gr_set_current_canvas(NULL));
1917 #if defined(POLY_ACC)
1918 save_bm = gr_create_bitmap2( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h, grd_curcanv->cv_bitmap.bm_type, NULL );
1920 save_bm = gr_create_bitmap( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h );
1922 Assert( save_bm != NULL );
1924 WIN(DDGRLOCK(dd_grd_curcanv));
1925 gr_bm_bitblt(grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_w,
1926 0, 0, 0, 0, &grd_curcanv->cv_bitmap, save_bm );
1927 WIN(DDGRUNLOCK(dd_grd_curcanv));
1930 case 0:kconfig_sub( kc_keyboard, NUM_KEY_CONTROLS, title );break;
1931 case 1:kconfig_sub( kc_joystick, NUM_OTHER_CONTROLS, title );break;
1932 case 2:kconfig_sub( kc_mouse, NUM_OTHER_CONTROLS, title ); break;
1933 case 3:kconfig_sub( kc_superjoy, NUM_OTHER_CONTROLS, title); break;
1935 //added on 2/4/99 by Victor Rachels for new keys menu
1936 case 4:kconfig_sub( kc_d2x, NUM_D2X_CONTROLS, title ); break;
1937 //end this section addition - VR
1945 WIN(mouse_set_mode(1));
1946 WIN(dd_gr_set_current_canvas(NULL));
1947 WIN(DDGRLOCK(dd_grd_curcanv));
1948 gr_bitmap(0, 0, save_bm);
1949 WIN(DDGRUNLOCK(dd_grd_curcanv));
1950 gr_free_bitmap(save_bm);
1952 reset_cockpit(); //force cockpit redraw next time
1954 // Update save values...
1956 for (i=0; i<NUM_KEY_CONTROLS; i++ )
1957 kconfig_settings[0][i] = kc_keyboard[i].value;
1959 if ( (Config_control_type>0) && (Config_control_type<5)) {
1960 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
1961 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
1962 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
1963 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
1964 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
1966 else if (Config_control_type == CONTROL_WINJOYSTICK) {
1967 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
1968 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
1972 for (i=0; i<NUM_D2X_CONTROLS; i++)
1973 kconfig_d2x_settings[i] = kc_d2x[i].value;
1978 void kconfig_read_fcs( int raw_axis )
1980 int raw_button, button, axis_min[4], axis_center[4], axis_max[4];
1982 if (Config_control_type!=CONTROL_THRUSTMASTER_FCS) return;
1984 joy_get_cal_vals(axis_min, axis_center, axis_max);
1986 if ( axis_max[3] > 1 )
1987 raw_button = (raw_axis*100)/axis_max[3];
1991 if ( raw_button > 88 )
1993 else if ( raw_button > 63 )
1995 else if ( raw_button > 39 )
1997 else if ( raw_button > 15 )
2002 kconfig_set_fcs_button( 19, button );
2003 kconfig_set_fcs_button( 15, button );
2004 kconfig_set_fcs_button( 11, button );
2005 kconfig_set_fcs_button( 7, button );
2009 void kconfig_set_fcs_button( int btn, int button )
2011 int state,time_down,upcount,downcount;
2012 state = time_down = upcount = downcount = 0;
2014 if ( joy_get_button_state(btn) ) {
2015 if ( btn==button ) {
2017 time_down = FrameTime;
2022 if ( btn==button ) {
2024 time_down = FrameTime;
2031 joy_set_btn_values( btn, state, time_down, downcount, upcount );
2037 fix Last_angles_p = 0;
2038 fix Last_angles_b = 0;
2039 fix Last_angles_h = 0;
2040 ubyte Last_angles_read = 0;
2042 extern int VR_sensitivity;
2044 int VR_sense_range[3] = { 25, 50, 75 };
2046 #if 0 //ndef MACINTOSH
2051 fix yaw, pitch, roll;
2054 //------ read vfx1 helmet --------
2055 if (vfx1_installed) {
2056 vfx_get_data(&yaw,&pitch,&roll,&buttons);
2057 } else if (iglasses_headset_installed) {
2058 iglasses_read_headset( &yaw, &pitch, &roll );
2059 } else if (Victor_headset_installed) {
2060 victor_read_headset_filtered( &yaw, &pitch, &roll );
2065 Use_player_head_angles = 0;
2066 if ( Last_angles_read ) {
2070 if ( (Last_angles_h < (F1_0/4) ) && (yaw > ((F1_0*3)/4) ) )
2072 else if ( (yaw < (F1_0/4) ) && (Last_angles_h > ((F1_0*3)/4) ) )
2075 Controls.pitch_time += fixmul((pitch- Last_angles_p)*VR_sense_range[VR_sensitivity],FrameTime);
2076 Controls.heading_time+= fixmul((yaw1 - Last_angles_h)*VR_sense_range[VR_sensitivity],FrameTime);
2077 Controls.bank_time += fixmul((roll - Last_angles_b)*VR_sense_range[VR_sensitivity],FrameTime);
2079 Last_angles_read = 1;
2080 Last_angles_p = pitch;
2081 Last_angles_h = yaw;
2082 Last_angles_b = roll;
2089 #ifndef __MSDOS__ // WINDOWS
2090 #define JOYSTICK_READ_TIME (F1_0/40) // Read joystick at 40 Hz.
2092 #define JOYSTICK_READ_TIME (F1_0/10) // Read joystick at 10 Hz.
2095 fix LastReadTime = 0;
2097 fix joy_axis[JOY_MAX_AXES];
2099 ubyte kc_use_external_control = 0;
2100 ubyte kc_enable_external_control = 0;
2101 ubyte kc_external_intno = 0;
2102 ext_control_info *kc_external_control = NULL;
2103 char *kc_external_name = NULL;
2104 ubyte kc_external_version = 0;
2105 extern int Automap_active;
2107 void kconfig_init_external_controls(int intno, int address)
2110 kc_external_intno = intno;
2111 kc_external_control = (ext_control_info *)address;
2112 kc_use_external_control = 1;
2113 kc_enable_external_control = 1;
2115 i = FindArg ( "-xname" );
2117 kc_external_name = Args[i+1];
2119 kc_external_name = "External Controller";
2121 for (i=0;i<strlen (kc_external_name);i++)
2122 if (kc_external_name[i]=='_')
2123 kc_external_name[i]=' ';
2125 i = FindArg ( "-xver" );
2127 kc_external_version = atoi(Args[i+1]);
2129 printf( "%s int: 0x%x, data: 0x%p, ver:%d\n", kc_external_name, kc_external_intno, kc_external_control, kc_external_version );
2133 #if !defined(MACINTOSH)
2134 /*void kconfig_read_external_controls()
2138 if ( !kc_enable_external_control && !CybermouseActive)
2141 if ( kc_external_version == 0 )
2142 memset( kc_external_control, 0, sizeof(control_info) );
2143 else if ( kc_external_version > 0 ) {
2144 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 );
2145 if ( kc_external_version > 1 ) {
2146 // Write ship pos and angles to external controls...
2147 ubyte *temp_ptr = (ubyte *)kc_external_control;
2148 vms_vector *ship_pos;
2149 vms_matrix *ship_orient;
2150 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
2151 temp_ptr += sizeof(control_info)+sizeof(vms_angvec) + 64;
2152 ship_pos = (vms_vector *)temp_ptr;
2153 temp_ptr += sizeof(vms_vector);
2154 ship_orient = (vms_matrix *)temp_ptr;
2155 // Fill in ship postion...
2156 *ship_pos = Objects[Players[Player_num].objnum].pos;
2157 // Fill in ship orientation...
2158 *ship_orient = Objects[Players[Player_num].objnum].orient;
2162 if ( Automap_active ) // (If in automap...)
2163 kc_external_control->automap_state = 1;
2164 memset(&r,0,sizeof(r));
2168 if (!CybermouseActive)
2169 int386 ( kc_external_intno, &r, &r); // Read external info...
2171 // ReadOWL (kc_external_control);
2175 if ( Player_num > -1 ) {
2176 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
2177 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
2178 Auto_leveling_on = 0;
2180 if ( kc_external_version > 0 ) {
2181 vms_matrix tempm, ViewMatrix;
2182 vms_angvec * Kconfig_abs_movement;
2185 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
2187 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
2188 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
2189 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
2190 Objects[Players[Player_num].objnum].orient = ViewMatrix;
2192 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
2193 if (oem_message[0] != '\0' )
2194 HUD_init_message( oem_message );
2198 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
2199 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
2200 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
2201 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
2202 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
2203 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
2204 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
2205 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
2206 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
2207 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
2208 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
2209 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
2210 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
2211 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
2212 Controls.automap_down_count += kc_external_control->automap_down_count;
2213 Controls.automap_state |= kc_external_control->automap_state;
2218 void controls_read_all_win()
2221 int slide_on, bank_on;
2225 int raw_joy_axis[7];
2227 fix k0, k1, k2, k3, kp;
2228 fix k4, k5, k6, k7, kh;
2229 ubyte channel_masks;
2230 int use_mouse, use_joystick;
2233 if (Game_turbo_mode)
2237 fix temp = Controls.heading_time;
2238 fix temp1 = Controls.pitch_time;
2239 memset( &Controls, 0, sizeof(control_info) );
2240 Controls.heading_time = temp;
2241 Controls.pitch_time = temp1;
2246 ctime = timer_get_fixed_seconds();
2248 // DO JOYSTICK (X,Y,Z R,U,V)
2249 // ----------------------------------------------------------------------------
2250 if ( (LastReadTime + JOYSTICK_READ_TIME) > ctime ) {
2251 if ((ctime < 0) && (LastReadTime > 0))
2252 LastReadTime = ctime;
2254 } else if ((Config_control_type==CONTROL_WINJOYSTICK)) {
2255 LastReadTime = ctime;
2256 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, raw_joy_axis );
2258 for (i=0; i<7; i++ ) {
2259 if (channel_masks&(1<<i)) {
2260 int joy_null_value = 28;
2262 // DO POV if joystick has a hat.
2263 // --------------------------------------------------------------------
2265 joydefsw_do_winjoybutton(raw_joy_axis);
2269 // --------------------------------------------------------------------
2270 // mprintf((0, "(%d)=%d,", i, raw_joy_axis[i]));
2271 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2272 // mprintf((0, "%d ",raw_joy_axis[i]));
2273 // if (i%2) mprintf((0,"\n"));
2276 if (kc_superjoy[23].value==i) // If this is the throttle
2277 joy_null_value = 32; // Then use a larger dead-zone
2279 if (raw_joy_axis[i] > (joy_null_value-2))
2280 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
2281 else if (raw_joy_axis[i] < -(joy_null_value+2))
2282 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
2284 raw_joy_axis[i] = 0;
2285 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
2294 for (i=0; i<6; i++ )
2300 // ----------------------------------------------------------------------------
2301 if (Config_control_type==5) {
2302 mouse_get_delta( &dx, &dy );
2303 mouse_axis[0] = (dx*FrameTime)/35;
2304 mouse_axis[1] = (dy*FrameTime)/25;
2305 mouse_buttons = mouse_get_btns();
2306 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
2315 //------------- Read slide_on -------------
2318 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
2319 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
2321 if ((use_joystick)&&(kc_superjoy[5].value<255)) slide_on |= joy_get_button_state( kc_superjoy[5].value );
2323 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
2325 //------------- Read bank_on ---------------
2328 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
2329 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
2331 if ( (use_joystick)&&(kc_superjoy[10].value < 255 )) bank_on |= joy_get_button_state( kc_superjoy[10].value );
2333 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
2335 //------------ Read pitch_time -----------
2337 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2339 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
2340 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
2341 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
2342 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
2345 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
2346 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
2347 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
2348 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
2351 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2352 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
2353 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
2357 Controls.pitch_time = 0;
2359 if (Controls.pitch_time < 0)
2360 Controls.pitch_time = 0;
2362 if (Controls.pitch_time > 0)
2363 Controls.pitch_time = 0;
2364 Controls.pitch_time += kp;
2367 if ( (use_joystick)&&(kc_superjoy[13].value < 255 )) {
2368 if ( !kc_superjoy[14].value ) // If not inverted...
2369 Controls.pitch_time -= (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2371 Controls.pitch_time += (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2375 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
2376 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
2377 if ( !kc_mouse[14].value ) // If not inverted...
2378 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2380 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2383 Controls.pitch_time = 0;
2387 //----------- Read vertical_thrust_time -----------------
2390 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
2391 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
2392 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
2393 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
2396 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
2397 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
2398 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
2399 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
2402 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2403 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
2404 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
2408 if ((use_joystick)&&( kc_superjoy[13].value < 255 )) {
2409 if ( !kc_superjoy[14].value ) // If not inverted...
2410 Controls.vertical_thrust_time += joy_axis[kc_superjoy[13].value];
2412 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[13].value];
2416 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
2417 if ( !kc_mouse[14].value ) // If not inverted...
2418 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
2420 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
2425 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
2426 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
2427 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
2428 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
2431 if ((use_joystick)&&( kc_superjoy[19].value < 255 )) {
2432 if ( !kc_superjoy[20].value ) // If not inverted...
2433 Controls.vertical_thrust_time += joy_axis[kc_superjoy[19].value];
2435 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[19].value];
2438 // From joystick buttons
2439 if ( (use_joystick)&&(kc_superjoy[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_superjoy[8].value );
2440 if ( (use_joystick)&&(kc_superjoy[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_superjoy[9].value );
2442 // From mouse buttons
2443 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
2444 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
2447 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
2448 if ( !kc_mouse[20].value ) // If not inverted...
2449 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
2451 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
2455 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2456 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
2457 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
2460 //---------- Read heading_time -----------
2462 if (!slide_on && !bank_on) {
2463 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2465 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
2466 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
2467 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
2468 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
2471 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
2472 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
2473 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
2474 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
2477 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2478 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
2479 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
2483 Controls.heading_time = 0;
2485 if (Controls.heading_time < 0)
2486 Controls.heading_time = 0;
2488 if (Controls.heading_time > 0)
2489 Controls.heading_time = 0;
2490 Controls.heading_time += kh;
2493 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2494 if ( !kc_superjoy[16].value ) // If not inverted...
2495 Controls.heading_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2497 Controls.heading_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2501 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2502 if ( !kc_mouse[16].value ) // If not inverted...
2503 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2505 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2508 Controls.heading_time = 0;
2511 //----------- Read sideways_thrust_time -----------------
2514 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2515 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2516 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2517 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2520 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
2521 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
2522 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
2523 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
2526 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2527 if ( !kc_superjoy[16].value ) // If not inverted...
2528 Controls.sideways_thrust_time += joy_axis[kc_superjoy[15].value];
2530 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[15].value];
2534 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2535 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
2536 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
2540 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2541 if ( !kc_mouse[16].value ) // If not inverted...
2542 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
2544 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
2549 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
2550 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
2551 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
2552 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
2555 if ( (use_joystick)&&(kc_superjoy[17].value < 255 )) {
2556 if ( !kc_superjoy[18].value ) // If not inverted...
2557 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[17].value];
2559 Controls.sideways_thrust_time += joy_axis[kc_superjoy[17].value];
2562 // From joystick buttons
2563 if ( (use_joystick)&&(kc_superjoy[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_superjoy[6].value );
2564 if ( (use_joystick)&&(kc_superjoy[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_superjoy[7].value );
2566 // From mouse buttons
2567 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
2568 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
2571 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
2572 if ( !kc_mouse[18].value ) // If not inverted...
2573 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
2575 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
2578 //----------- Read bank_time -----------------
2581 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2582 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2583 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2584 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2587 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
2588 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
2589 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
2590 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
2593 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2594 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
2595 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
2599 if ( (use_joystick)&&(kc_superjoy[15].value < 255) ) {
2600 if ( !kc_superjoy[16].value ) // If not inverted...
2601 Controls.bank_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2603 Controls.bank_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2607 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2608 if ( !kc_mouse[16].value ) // If not inverted...
2609 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2611 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2616 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
2617 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
2618 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
2619 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
2622 if ( (use_joystick)&&(kc_superjoy[21].value < 255) ) {
2623 if ( !kc_superjoy[22].value ) // If not inverted...
2624 Controls.bank_time -= joy_axis[kc_superjoy[21].value];
2626 Controls.bank_time += joy_axis[kc_superjoy[21].value];
2629 // From joystick buttons
2630 if ( (use_joystick)&&(kc_superjoy[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_superjoy[11].value );
2631 if ( (use_joystick)&&(kc_superjoy[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_superjoy[12].value );
2633 // From mouse buttons
2634 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
2635 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
2638 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
2639 if ( !kc_mouse[22].value ) // If not inverted...
2640 Controls.bank_time += mouse_axis[kc_mouse[21].value];
2642 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
2646 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2647 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
2648 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
2651 //----------- Read forward_thrust_time -------------
2654 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
2655 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
2656 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
2657 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
2660 if ( (use_joystick)&&(kc_superjoy[23].value < 255 )) {
2661 if ( !kc_superjoy[24].value ) // If not inverted...
2662 Controls.forward_thrust_time -= joy_axis[kc_superjoy[23].value];
2664 Controls.forward_thrust_time += joy_axis[kc_superjoy[23].value];
2667 // From joystick buttons
2668 if ( (use_joystick)&&(kc_superjoy[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_superjoy[2].value );
2669 if ( (use_joystick)&&(kc_superjoy[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_superjoy[3].value );
2672 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
2673 if ( !kc_mouse[24].value ) // If not inverted...
2674 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
2676 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
2679 // From mouse buttons
2680 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
2681 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
2683 //----------- Read afterburner_state -------------
2686 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
2687 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
2689 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
2691 if ( (use_joystick)&&(kc_superjoy[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_superjoy[27].value);
2693 //-------Read headlight key--------------------------
2694 if (kc_keyboard[52].value < 255 )
2695 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
2696 if (kc_keyboard[53].value < 255 )
2697 Controls.headlight_count=key_down_count(kc_keyboard[53].value);
2698 if ((use_joystick)&&(kc_superjoy[30].value < 255 ))
2699 Controls.headlight_count=joy_get_button_down_cnt(kc_superjoy[30].value);
2701 //--------Read Cycle Primary Key------------------
2703 if (kc_keyboard[48].value<255)
2704 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
2705 if (kc_keyboard[49].value<255)
2706 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
2707 if ((use_joystick)&&(kc_superjoy[28].value < 255 ))
2708 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_superjoy[28].value);
2710 //--------Read Cycle Secondary Key------------------
2712 if (kc_keyboard[50].value<255)
2713 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
2714 if (kc_keyboard[51].value<255)
2715 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
2716 if ((use_joystick)&&(kc_superjoy[29].value < 255 ))
2717 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_superjoy[29].value);
2719 //--------Read Toggle Bomb key----------------------
2721 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
2723 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
2725 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
2726 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
2728 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
2729 HUD_init_message ("No bombs available!");
2733 if (Players[Player_num].secondary_ammo[bomb]==0)
2735 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
2736 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
2740 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
2741 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
2746 //---------Read Energy->Shield key----------
2748 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
2749 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
2750 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
2751 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
2753 //----------- Read fire_primary_down_count
2754 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
2755 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
2756 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_superjoy[0].value);
2757 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
2759 //----------- Read fire_primary_state
2760 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
2761 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
2762 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_superjoy[0].value);
2763 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
2765 //----------- Read fire_secondary_down_count
2766 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
2767 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
2768 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_superjoy[1].value);
2769 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
2771 //----------- Read fire_secondary_state
2772 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
2773 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
2774 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_superjoy[1].value);
2775 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
2777 //----------- Read fire_flare_down_count
2778 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
2779 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
2780 if ((use_joystick)&&(kc_superjoy[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_superjoy[4].value);
2781 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
2783 //----------- Read drop_bomb_down_count
2784 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
2785 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
2786 if ((use_joystick)&&(kc_superjoy[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_superjoy[26].value);
2787 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
2789 //----------- Read rear_view_down_count
2790 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
2791 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
2792 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_superjoy[25].value);
2793 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
2795 //----------- Read rear_view_down_state
2796 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
2797 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
2798 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_superjoy[25].value);
2799 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
2801 //----------- Read automap_down_count
2802 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
2803 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
2805 //----------- Read automap_state
2806 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
2807 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
2809 //----------- Read stupid-cruise-control-type of throttle.
2811 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
2812 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
2813 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
2814 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
2815 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
2817 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
2820 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
2821 if (Cruise_speed < 0 ) Cruise_speed = 0;
2823 if (Controls.forward_thrust_time==0)
2824 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
2827 //read_head_tracker();
2829 // Read external controls
2830 if (kc_use_external_control || CybermouseActive)
2831 kconfig_read_external_controls();
2833 //----------- Clamp values between -FrameTime and FrameTime
2834 if (FrameTime > F1_0 )
2835 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
2837 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
2838 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
2839 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
2840 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
2841 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
2842 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
2843 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
2845 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
2846 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
2847 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
2848 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
2849 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
2850 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
2851 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
2854 //--------- Don't do anything if in debug mode
2856 if ( keyd_pressed[KEY_DELETE] ) {
2857 memset( &Controls, 0, sizeof(control_info) );
2864 fix Next_toggle_time[3]={0,0,0};
2866 int allowed_to_toggle(int i)
2868 //used for keeping tabs of when its ok to toggle headlight,primary,and secondary
2870 if (Next_toggle_time[i] > GameTime)
2871 if (Next_toggle_time[i] < GameTime + (F1_0/8)) // In case time is bogus, never wait > 1 second.
2874 Next_toggle_time[i] = GameTime + (F1_0/8);
2881 //added on 2/7/99 by Victor Rachels for jostick state setting
2882 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};
2883 //end this section adition - VR
2887 void controls_read_all()
2890 int slide_on, bank_on;
2897 fix mouse_axis[3] = {0,0,0};
2898 int raw_joy_axis[JOY_MAX_AXES];
2900 fix k0, k1, k2, k3, kp;
2901 fix k4, k5, k6, k7, kh;
2902 ubyte channel_masks;
2903 int use_mouse, use_joystick;
2909 if (Game_turbo_mode)
2913 fix temp = Controls.heading_time;
2914 fix temp1 = Controls.pitch_time;
2915 memset( &Controls, 0, sizeof(control_info) );
2916 Controls.heading_time = temp;
2917 Controls.pitch_time = temp1;
2922 ctime = timer_get_fixed_seconds();
2924 //--------- Read Joystick -----------
2926 if ( (LastReadTime + JOYSTICK_READ_TIME > ctime) && (Config_control_type!=CONTROL_THRUSTMASTER_FCS) ) {
2928 if ((ctime < 0) && (LastReadTime >= 0))
2930 if ((ctime < 0) && (LastReadTime > 0))
2932 LastReadTime = ctime;
2934 } else if ((Config_control_type>0) && (Config_control_type<5) ) {
2935 LastReadTime = ctime;
2936 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
2938 for (i = 0; i < joy_num_axes; i++)
2941 if (channel_masks&(1<<i)) {
2943 int joy_null_value = 10;
2945 if ( (i==3) && (Config_control_type==CONTROL_THRUSTMASTER_FCS) ) {
2946 kconfig_read_fcs( raw_joy_axis[i] );
2948 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2950 if (kc_joystick[23].value==i) // If this is the throttle
2951 joy_null_value = 20; // Then use a larger dead-zone
2953 if (raw_joy_axis[i] > joy_null_value)
2954 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
2955 else if (raw_joy_axis[i] < -joy_null_value)
2956 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
2958 raw_joy_axis[i] = 0;
2959 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
2969 for (i = 0; i < joy_num_axes; i++)
2974 //--------- Read Joystick -----------
2975 if ((Config_control_type>0) && (Config_control_type<5) ) {
2976 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
2977 for (i=0; i<4; i++ ) {
2978 if (channel_masks&(1<<i)) {
2979 int joy_null_value = 10;
2981 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2983 if (kc_joystick[23].value==i) // If this is the throttle
2984 joy_null_value = 20; // Then use a larger dead-zone
2986 if (raw_joy_axis[i] > joy_null_value)
2987 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
2988 else if (raw_joy_axis[i] < -joy_null_value)
2989 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
2991 raw_joy_axis[i] = 0;
2992 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
2999 for (i=0; i<4; i++ )
3003 #endif // ifndef MACINTOSH
3005 if (Config_control_type==5 && !CybermouseActive) {
3006 //--------- Read Mouse -----------
3008 mouse_get_delta_z( &dx, &dy, &dz );
3010 mouse_get_delta( &dx, &dy );
3012 mouse_axis[0] = (dx*FrameTime)/35;
3013 mouse_axis[1] = (dy*FrameTime)/25;
3015 mouse_axis[2] = (dz*FrameTime);
3017 mouse_buttons = mouse_get_btns();
3018 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
3020 } else if (Config_control_type==6 && !CybermouseActive) {
3021 //--------- Read Cyberman -----------
3022 mouse_get_cyberman_pos(&idx,&idy );
3023 mouse_axis[0] = (idx*FrameTime)/128;
3024 mouse_axis[1] = (idy*FrameTime)/128;
3025 mouse_buttons = mouse_get_btns();
3027 } else if (CybermouseActive) {
3028 // ReadOWL (kc_external_control);
3029 // CybermouseAdjust();
3038 //added on 2/4/99 by Victor Rachels for d1x keys
3039 //--------- Read primary weapon select -------------
3040 //the following "if" added by WraithX to stop deadies from switchin weapons, 4/14/00
3041 if (!Player_is_dead)
3044 int d2x_joystick_state[10];
3047 d2x_joystick_state[i] = joy_get_button_state(kc_d2x[i*2+1].value);
3050 //----------------Weapon 1----------------
3051 if(key_down_count(kc_d2x[0].value) ||
3052 (joy_get_button_state(kc_d2x[1].value) &&
3053 (d2x_joystick_state[0]!=d2x_joystick_ostate[0]) ) )
3056 do_weapon_select(0,0);
3058 for(i=MAX_PRIMARY_WEAPONS;i<MAX_PRIMARY_WEAPONS+NEWPRIMS;i++)
3059 if(primary_order[i]>primary_order[valu]&&player_has_weapon(i,0))
3061 LaserPowSelected = valu;
3064 //----------------Weapon 2----------------
3065 if(key_down_count(kc_d2x[2].value) ||
3066 (joy_get_button_state(kc_d2x[3].value) &&
3067 (d2x_joystick_state[1]!=d2x_joystick_ostate[1]) ) )
3068 do_weapon_select(1,0);
3069 //----------------Weapon 3----------------
3070 if(key_down_count(kc_d2x[4].value) ||
3071 (joy_get_button_state(kc_d2x[5].value) &&
3072 (d2x_joystick_state[2]!=d2x_joystick_ostate[2]) ) )
3073 do_weapon_select(2,0);
3074 //----------------Weapon 4----------------
3075 if(key_down_count(kc_d2x[6].value) ||
3076 (joy_get_button_state(kc_d2x[7].value) &&
3077 (d2x_joystick_state[3]!=d2x_joystick_ostate[3]) ) )
3078 do_weapon_select(3,0);
3079 //----------------Weapon 5----------------
3080 if(key_down_count(kc_d2x[8].value) ||
3081 (joy_get_button_state(kc_d2x[9].value) &&
3082 (d2x_joystick_state[4]!=d2x_joystick_ostate[4]) ) )
3083 do_weapon_select(4,0);
3085 //--------- Read secondary weapon select ----------
3086 //----------------Weapon 6----------------
3087 if(key_down_count(kc_d2x[10].value) ||
3088 (joy_get_button_state(kc_d2x[11].value) &&
3089 (d2x_joystick_state[5]!=d2x_joystick_ostate[5]) ) )
3090 do_weapon_select(0,1);
3091 //----------------Weapon 7----------------
3092 if(key_down_count(kc_d2x[12].value) ||
3093 (joy_get_button_state(kc_d2x[13].value) &&
3094 (d2x_joystick_state[6]!=d2x_joystick_ostate[6]) ) )
3095 do_weapon_select(1,1);
3096 //----------------Weapon 8----------------
3097 if(key_down_count(kc_d2x[14].value) ||
3098 (joy_get_button_state(kc_d2x[15].value) &&
3099 (d2x_joystick_state[7]!=d2x_joystick_ostate[7]) ) )
3100 do_weapon_select(2,1);
3101 //----------------Weapon 9----------------
3102 if(key_down_count(kc_d2x[16].value) ||
3103 (joy_get_button_state(kc_d2x[17].value) &&
3104 (d2x_joystick_state[8]!=d2x_joystick_ostate[8]) ) )
3105 do_weapon_select(3,1);
3106 //----------------Weapon 0----------------
3107 if(key_down_count(kc_d2x[18].value) ||
3108 (joy_get_button_state(kc_d2x[19].value) &&
3109 (d2x_joystick_state[9]!=d2x_joystick_ostate[9]) ) )
3110 do_weapon_select(4,1);
3111 memcpy(d2x_joystick_ostate,d2x_joystick_state,10*sizeof(int));
3113 //end this section addition - VR
3116 }//end "if (!Player_is_dead)" - WraithX
3120 //------------- Read slide_on -------------
3123 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
3124 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
3126 if ((use_joystick)&&(kc_joystick[5].value<255)) slide_on |= joy_get_button_state( kc_joystick[5].value );
3128 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
3130 //------------- Read bank_on ---------------
3133 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
3134 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
3136 if ( (use_joystick)&&(kc_joystick[10].value < 255 )) bank_on |= joy_get_button_state( kc_joystick[10].value );
3138 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
3140 //------------ Read pitch_time -----------
3142 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3144 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
3145 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
3146 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
3147 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
3150 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
3151 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
3152 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
3153 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
3156 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3157 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
3158 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
3162 Controls.pitch_time = 0;
3164 if (Controls.pitch_time < 0)
3165 Controls.pitch_time = 0;
3167 if (Controls.pitch_time > 0)
3168 Controls.pitch_time = 0;
3169 Controls.pitch_time += kp;
3172 if ( (use_joystick)&&(kc_joystick[13].value < 255 )) {
3173 if ( !kc_joystick[14].value ) // If not inverted...
3174 Controls.pitch_time -= (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3176 Controls.pitch_time += (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3180 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
3181 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
3182 if ( !kc_mouse[14].value ) // If not inverted...
3183 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3185 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3188 Controls.pitch_time = 0;
3192 // the following "if" added by WraithX, 4/14/00
3193 // done so that dead players can't move
3194 if (!Player_is_dead)
3196 //----------- Read vertical_thrust_time -----------------
3199 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
3200 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
3201 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
3202 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
3205 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
3206 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
3207 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
3208 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
3211 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3212 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
3213 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
3217 if ((use_joystick)&&( kc_joystick[13].value < 255 )) {
3218 if ( !kc_joystick[14].value ) // If not inverted...
3219 Controls.vertical_thrust_time += joy_axis[kc_joystick[13].value];
3221 Controls.vertical_thrust_time -= joy_axis[kc_joystick[13].value];
3225 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
3226 if ( !kc_mouse[14].value ) // If not inverted...
3227 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
3229 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
3234 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
3235 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
3236 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
3237 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
3240 if ((use_joystick)&&( kc_joystick[19].value < 255 )) {
3241 if ( !kc_joystick[20].value ) // If not inverted...
3242 Controls.vertical_thrust_time += joy_axis[kc_joystick[19].value];
3244 Controls.vertical_thrust_time -= joy_axis[kc_joystick[19].value];
3247 // From joystick buttons
3248 if ( (use_joystick)&&(kc_joystick[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_joystick[8].value );
3249 if ( (use_joystick)&&(kc_joystick[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_joystick[9].value );
3251 // From mouse buttons
3252 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
3253 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
3256 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
3257 if ( !kc_mouse[20].value ) // If not inverted...
3258 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
3260 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
3264 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3265 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
3266 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
3268 }// end "if" added by WraithX
3270 //---------- Read heading_time -----------
3272 if (!slide_on && !bank_on) {
3273 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3275 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
3276 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
3277 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
3278 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
3281 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
3282 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
3283 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
3284 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
3287 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3288 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
3289 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
3293 Controls.heading_time = 0;
3295 if (Controls.heading_time < 0)
3296 Controls.heading_time = 0;
3298 if (Controls.heading_time > 0)
3299 Controls.heading_time = 0;
3300 Controls.heading_time += kh;
3303 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3304 if ( !kc_joystick[16].value ) // If not inverted...
3305 Controls.heading_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3307 Controls.heading_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3311 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3312 if ( !kc_mouse[16].value ) // If not inverted...
3313 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3315 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3318 Controls.heading_time = 0;
3321 // the following "if" added by WraithX, 4/14/00
3322 // done so that dead players can't move
3323 if (!Player_is_dead)
3325 //----------- Read sideways_thrust_time -----------------
3328 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3329 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3330 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3331 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3334 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
3335 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
3336 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
3337 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
3340 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3341 if ( !kc_joystick[16].value ) // If not inverted...
3342 Controls.sideways_thrust_time += joy_axis[kc_joystick[15].value];
3344 Controls.sideways_thrust_time -= joy_axis[kc_joystick[15].value];
3348 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3349 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
3350 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
3354 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3355 if ( !kc_mouse[16].value ) // If not inverted...
3356 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
3358 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
3363 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
3364 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
3365 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
3366 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
3369 if ( (use_joystick)&&(kc_joystick[17].value < 255 )) {
3370 if ( !kc_joystick[18].value ) // If not inverted...
3371 Controls.sideways_thrust_time -= joy_axis[kc_joystick[17].value];
3373 Controls.sideways_thrust_time += joy_axis[kc_joystick[17].value];
3376 // From joystick buttons
3377 if ( (use_joystick)&&(kc_joystick[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_joystick[6].value );
3378 if ( (use_joystick)&&(kc_joystick[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_joystick[7].value );
3380 // From mouse buttons
3381 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
3382 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
3385 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
3386 if ( !kc_mouse[18].value ) // If not inverted...
3387 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
3389 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
3391 }// end "if" added by WraithX
3393 //----------- Read bank_time -----------------
3396 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3397 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3398 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3399 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3402 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
3403 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
3404 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
3405 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
3408 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3409 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
3410 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
3414 if ( (use_joystick)&&(kc_joystick[15].value < 255) ) {
3415 if ( !kc_joystick[16].value ) // If not inverted...
3416 Controls.bank_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3418 Controls.bank_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3422 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3423 if ( !kc_mouse[16].value ) // If not inverted...
3424 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3426 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3431 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
3432 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
3433 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
3434 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
3437 if ( (use_joystick)&&(kc_joystick[21].value < 255) ) {
3438 if ( !kc_joystick[22].value ) // If not inverted...
3439 Controls.bank_time -= joy_axis[kc_joystick[21].value];
3441 Controls.bank_time += joy_axis[kc_joystick[21].value];
3444 // From joystick buttons
3445 if ( (use_joystick)&&(kc_joystick[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_joystick[11].value );
3446 if ( (use_joystick)&&(kc_joystick[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_joystick[12].value );
3448 // From mouse buttons
3449 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
3450 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
3453 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
3454 if ( !kc_mouse[22].value ) // If not inverted...
3455 Controls.bank_time += mouse_axis[kc_mouse[21].value];
3457 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
3461 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3462 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
3463 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
3466 // the following "if" added by WraithX, 4/14/00
3467 // done so that dead players can't move
3468 if (!Player_is_dead)
3470 //----------- Read forward_thrust_time -------------
3473 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
3474 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
3475 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
3476 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
3479 if ( (use_joystick)&&(kc_joystick[23].value < 255 )) {
3480 if ( !kc_joystick[24].value ) // If not inverted...
3481 Controls.forward_thrust_time -= joy_axis[kc_joystick[23].value];
3483 Controls.forward_thrust_time += joy_axis[kc_joystick[23].value];
3486 // From joystick buttons
3487 if ( (use_joystick)&&(kc_joystick[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_joystick[2].value );
3488 if ( (use_joystick)&&(kc_joystick[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_joystick[3].value );
3491 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
3492 if ( !kc_mouse[24].value ) // If not inverted...
3493 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
3495 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
3498 // From mouse buttons
3499 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
3500 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
3502 //----------- Read afterburner_state -------------
3505 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
3506 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
3508 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
3510 if ( (use_joystick)&&(kc_joystick[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_joystick[27].value);
3512 //-------Read headlight key--------------------------
3514 if (kc_keyboard[52].value < 255 )
3515 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
3516 if (kc_keyboard[53].value < 255 )
3517 Controls.headlight_count+=key_down_count(kc_keyboard[53].value);
3518 if ((use_joystick)&&(kc_joystick[30].value < 255 ))
3519 Controls.headlight_count+=joy_get_button_down_cnt(kc_joystick[30].value);
3521 //--------Read Cycle Primary Key------------------
3523 if (kc_keyboard[48].value<255)
3524 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
3525 if (kc_keyboard[49].value<255)
3526 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
3527 if ((use_joystick)&&(kc_joystick[28].value < 255 ))
3528 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_joystick[28].value);
3531 //--------Read Cycle Secondary Key------------------
3533 if (kc_keyboard[50].value<255)
3534 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
3535 if (kc_keyboard[51].value<255)
3536 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
3537 if ((use_joystick)&&(kc_joystick[29].value < 255 ))
3538 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_joystick[29].value);
3540 //--------Read Toggle Bomb key----------------------
3542 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
3544 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
3546 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
3547 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
3549 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3550 HUD_init_message ("No bombs available!");
3554 if (Players[Player_num].secondary_ammo[bomb]==0)
3556 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3557 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
3561 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
3562 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
3567 //---------Read Energy->Shield key----------
3569 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
3570 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
3571 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
3572 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
3574 //----------- Read fire_primary_down_count
3575 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
3576 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
3577 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_joystick[0].value);
3578 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
3580 //----------- Read fire_primary_state
3581 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
3582 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
3583 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_joystick[0].value);
3584 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
3586 //----------- Read fire_secondary_down_count
3587 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
3588 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
3589 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_joystick[1].value);
3590 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
3592 //----------- Read fire_secondary_state
3593 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
3594 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
3595 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_joystick[1].value);
3596 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
3598 //----------- Read fire_flare_down_count
3599 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
3600 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
3601 if ((use_joystick)&&(kc_joystick[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_joystick[4].value);
3602 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
3604 //----------- Read drop_bomb_down_count
3605 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
3606 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
3607 if ((use_joystick)&&(kc_joystick[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_joystick[26].value);
3608 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
3610 //----------- Read rear_view_down_count
3611 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
3612 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
3613 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_joystick[25].value);
3614 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
3616 //----------- Read rear_view_down_state
3617 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
3618 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
3619 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_joystick[25].value);
3620 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
3622 }//end "if" added by WraithX
3624 //----------- Read automap_down_count
3625 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
3626 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
3628 //----------- Read automap_state
3629 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
3630 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
3632 //----------- Read stupid-cruise-control-type of throttle.
3634 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
3635 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
3636 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
3637 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
3638 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
3640 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
3643 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
3644 if (Cruise_speed < 0 ) Cruise_speed = 0;
3646 if (Controls.forward_thrust_time==0)
3647 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
3650 #if !defined(MACINTOSH)
3651 //read_head_tracker();
3653 // Read external controls
3654 // if (kc_use_external_control || CybermouseActive)
3655 // kconfig_read_external_controls();
3658 //----------- Clamp values between -FrameTime and FrameTime
3659 if (FrameTime > F1_0 )
3660 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
3662 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
3663 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
3664 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
3665 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
3666 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
3667 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
3668 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
3670 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
3671 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
3672 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
3673 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
3674 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
3675 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
3676 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
3679 //--------- Don't do anything if in debug mode
3681 if ( keyd_pressed[KEY_DELETE] ) {
3682 memset( &Controls, 0, sizeof(control_info) );
3688 void reset_cruise(void)
3694 void kc_set_controls()
3698 for (i=0; i<NUM_KEY_CONTROLS; i++ )
3699 kc_keyboard[i].value = kconfig_settings[0][i];
3701 if ( (Config_control_type>0) && (Config_control_type<5)) {
3702 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3703 kc_joystick[i].value = kconfig_settings[Config_control_type][i];
3704 if (kc_joystick[i].type == BT_INVERT ) {
3705 if (kc_joystick[i].value!=1)
3706 kc_joystick[i].value = 0;
3707 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
3710 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
3711 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3712 kc_mouse[i].value = kconfig_settings[Config_control_type][i];
3713 if (kc_mouse[i].type == BT_INVERT ) {
3714 if (kc_mouse[i].value!=1)
3715 kc_mouse[i].value = 0;
3716 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
3719 } else if (Config_control_type == CONTROL_WINJOYSTICK) {
3720 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3721 kc_superjoy[i].value = kconfig_settings[Config_control_type][i];
3722 if (kc_superjoy[i].type == BT_INVERT ) {
3723 if (kc_superjoy[i].value!=1)
3724 kc_superjoy[i].value = 0;
3725 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
3731 for (i=0; i<NUM_D2X_CONTROLS; i++ )
3732 kc_d2x[i].value = kconfig_d2x_settings[i];
3736 #if 0 //ndef MACINTOSH // no mac support for vr headset
3738 void kconfig_center_headset()
3742 vfx_center_headset();
3744 // } else if (iglasses_headset_installed) {
3745 // } else if (Victor_headset_installed) {
3751 #endif // end of #ifndef MACINTOSH for kconfig_center_headset
3753 void CybermouseAdjust ()
3755 /* if ( Player_num > -1 ) {
3756 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
3757 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
3758 Auto_leveling_on = 0;
3760 if ( kc_external_version > 0 ) {
3761 vms_matrix tempm, ViewMatrix;
3762 vms_angvec * Kconfig_abs_movement;
3765 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
3767 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
3768 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
3769 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
3770 Objects[Players[Player_num].objnum].orient = ViewMatrix;
3772 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
3773 if (oem_message[0] != '\0' )
3774 HUD_init_message( oem_message );
3778 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
3779 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
3780 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
3781 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
3782 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
3783 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
3784 // Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
3785 // Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
3786 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
3787 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
3788 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
3789 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
3790 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
3791 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
3792 // Controls.automap_down_count += kc_external_control->automap_down_count;
3793 // Controls.automap_state |= kc_external_control->automap_state;
3796 char GetKeyValue (char key)
3798 mprintf ((0,"Returning %c!\n",kc_keyboard[(int)key].value));
3799 return (kc_keyboard[(int)key].value);
3802 #if !defined(MACINTOSH)
3805 extern object *obj_find_first_of_type (int);
3806 void kconfig_read_external_controls()
3811 if ( !kc_enable_external_control ) return;
3813 if ( kc_external_version == 0 )
3814 memset( kc_external_control, 0, sizeof(ext_control_info));
3815 else if ( kc_external_version > 0 ) {
3817 if (kc_external_version>=4)
3818 memset( kc_external_control, 0, sizeof(advanced_ext_control_info));
3819 else if (kc_external_version>0)
3820 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 );
3821 else if (kc_external_version>2)
3822 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof(vms_matrix) +4 );
3824 if ( kc_external_version > 1 ) {
3825 // Write ship pos and angles to external controls...
3826 ubyte *temp_ptr = (ubyte *)kc_external_control;
3827 vms_vector *ship_pos;
3828 vms_matrix *ship_orient;
3829 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
3830 temp_ptr += sizeof(ext_control_info) + sizeof(vms_angvec) + 64;
3831 ship_pos = (vms_vector *)temp_ptr;
3832 temp_ptr += sizeof(vms_vector);
3833 ship_orient = (vms_matrix *)temp_ptr;
3834 // Fill in ship postion...
3835 *ship_pos = Objects[Players[Player_num].objnum].pos;
3836 // Fill in ship orientation...
3837 *ship_orient = Objects[Players[Player_num].objnum].orient;
3839 if (kc_external_version>=4)
3841 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
3843 temp_ptr->headlight_state=(Players[Player_num].flags & PLAYER_FLAGS_HEADLIGHT_ON);
3844 temp_ptr->primary_weapon_flags=Players[Player_num].primary_weapon_flags;
3845 temp_ptr->secondary_weapon_flags=Players[Player_num].secondary_weapon_flags;
3846 temp_ptr->current_primary_weapon=Primary_weapon;
3847 temp_ptr->current_secondary_weapon=Secondary_weapon;
3849 temp_ptr->current_guidebot_command=Escort_goal_object;
3851 temp_ptr->force_vector=ExtForceVec;
3852 temp_ptr->force_matrix=ExtApplyForceMatrix;
3854 temp_ptr->joltinfo[i]=ExtJoltInfo[i];
3856 temp_ptr->x_vibrate_info[i]=ExtXVibrateInfo[i];
3857 temp_ptr->x_vibrate_clear=ExtXVibrateClear;
3858 temp_ptr->game_status=ExtGameStatus;
3860 memset ((void *)&ExtForceVec,0,sizeof(vms_vector));
3861 memset ((void *)&ExtApplyForceMatrix,0,sizeof(vms_matrix));
3866 ExtXVibrateInfo[i]=0;
3871 if ( Automap_active ) // (If in automap...)
3872 kc_external_control->automap_state = 1;
3873 //memset(&r,0,sizeof(r));
3877 int386 ( kc_external_intno, &r, &r); // Read external info...
3881 if ( Player_num > -1 ) {
3882 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
3883 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
3884 Auto_leveling_on = 0;
3886 if ( kc_external_version > 0 ) {
3887 vms_matrix tempm, ViewMatrix;
3888 vms_angvec * Kconfig_abs_movement;
3891 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(ext_control_info));
3893 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
3894 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
3895 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
3896 Objects[Players[Player_num].objnum].orient = ViewMatrix;
3898 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
3899 if (oem_message[0] != '\0' )
3900 HUD_init_message( oem_message );
3904 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
3905 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
3906 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
3907 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
3908 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
3909 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
3910 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
3911 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
3912 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
3913 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
3914 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
3915 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
3916 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
3917 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
3918 Controls.automap_down_count += kc_external_control->automap_down_count;
3919 Controls.automap_state |= kc_external_control->automap_state;
3921 if (kc_external_version>=3)
3923 ubyte *temp_ptr = (ubyte *)kc_external_control;
3924 temp_ptr += (sizeof(ext_control_info) + sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof (vms_matrix));
3927 Controls.cycle_primary_count=(*(temp_ptr));
3929 Controls.cycle_secondary_count=(*(temp_ptr+1));
3932 Controls.afterburner_state=(*(temp_ptr+2));
3934 Controls.headlight_count=(*(temp_ptr+3));
3936 if (kc_external_version>=4)
3939 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
3942 if (temp_ptr->keyboard[i])
3945 if (temp_ptr->Reactor_blown)
3947 if (Game_mode & GM_MULTI)
3948 net_destroy_controlcen (obj_find_first_of_type (OBJ_CNTRLCEN));
3950 do_controlcen_destroyed_stuff(obj_find_first_of_type (OBJ_CNTRLCEN));