1 /* $Id: kconfig.c,v 1.32 2004-08-28 23:17:45 schaffner 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.32 2004-08-28 23:17:45 schaffner 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.
1697 #ifdef USE_LINUX_JOY
1703 code = (item->value + 1) % max;
1707 for (i = 0; i < Num_items; i++)
1709 n = item - All_items;
1710 if ((i != n) && (All_items[i].type == BT_JOY_AXIS) && (All_items[i].value == code))
1713 return; // all axes allocated already
1714 i = -1; // -1 so the i++ will push back to 0
1715 code = (item->value + ++tries) % max; // try next axis
1722 kc_drawitem(item, 1);
1723 nm_restore_background(0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h);
1724 game_flush_inputs();
1726 }//method kc_next_joyaxis
1727 //end addition by WraithX
1730 void kc_change_joyaxis( kc_item * item )
1732 #ifdef USE_LINUX_JOY
1734 int old_axis[MAX_AXES];
1735 int numaxis = j_num_axes;
1737 int axis[JOY_NUM_AXES];
1738 int old_axis[JOY_NUM_AXES];
1739 int numaxis = JOY_NUM_AXES;
1744 WIN(DDGRLOCK(dd_grd_curcanv));
1745 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1747 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_JOY_AXIS );
1748 WIN(DDGRUNLOCK(dd_grd_curcanv));
1750 game_flush_inputs();
1755 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, old_axis ),
1756 joystick_read_raw_axis( JOY_ALL_AXIS, old_axis )
1759 while( (k!=KEY_ESC) && (code==255))
1764 DoMessageStuff(&msg);
1770 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1773 // if ( Game_mode & GM_MULTI )
1774 // GameLoop( 0, 0 ); // Continue
1776 timer_delay(f0_1/10);
1778 if (k == KEY_PRINT_SCREEN)
1779 save_screen_shot(0);
1781 kc_drawquestion( item );
1784 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, axis ),
1785 joystick_read_raw_axis( JOY_ALL_AXIS, axis )
1788 for (i=0; i<numaxis; i++ ) {
1789 #if defined (MACINTOSH)
1790 if ( abs(axis[i]-old_axis[i])>100 ) {
1791 #elif defined(WINDOWS)
1792 if ( abs(axis[i]-old_axis[i])>1024 ) {
1794 if ( abs(axis[i]-old_axis[i])>200 ) {
1797 con_printf(CON_DEBUG, "Axis Movement detected: Axis %i\n", i);
1799 //old_axis[i] = axis[i];
1801 for (i=0; i<Num_items; i++ )
1803 n = item - All_items;
1804 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) )
1810 for (i=0; i<Num_items; i++ ) {
1811 n = item - All_items;
1812 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) ) {
1813 All_items[i].value = 255;
1814 kc_drawitem( &All_items[i], 0 );
1820 kc_drawitem( item, 1 );
1821 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1822 game_flush_inputs();
1826 void kc_change_mouseaxis( kc_item * item )
1835 WIN(DDGRLOCK(dd_grd_curcanv));
1836 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1838 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_MSE_AXIS );
1839 WIN(DDGRUNLOCK(dd_grd_curcanv));
1841 game_flush_inputs();
1845 mouse_get_delta( &dx, &dy );
1847 while( (k!=KEY_ESC) && (code==255))
1852 DoMessageStuff(&msg);
1858 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1861 // if ( Game_mode & GM_MULTI )
1862 // GameLoop( 0, 0 ); // Continue
1864 timer_delay(f0_1/10);
1866 if (k == KEY_PRINT_SCREEN)
1867 save_screen_shot(0);
1869 kc_drawquestion( item );
1872 mouse_get_delta_z( &dx, &dy, &dz );
1874 mouse_get_delta( &dx, &dy );
1876 if ( abs(dx)>20 ) code = 0;
1877 if ( abs(dy)>20 ) code = 1;
1879 if ( abs(dz)>20 ) code = 2;
1883 for (i=0; i<Num_items; i++ ) {
1884 n = item - All_items;
1885 if ( (i!=n) && (All_items[i].type==BT_MOUSE_AXIS) && (All_items[i].value==code) ) {
1886 All_items[i].value = 255;
1887 kc_drawitem( &All_items[i], 0 );
1892 kc_drawitem( item, 1 );
1893 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1894 game_flush_inputs();
1899 void kc_change_invert( kc_item * item )
1901 game_flush_inputs();
1908 kc_drawitem( item, 1 );
1912 #include "screens.h"
1914 void kconfig(int n, char * title)
1917 grs_bitmap *save_bm;
1919 set_screen_mode( SCREEN_MENU );
1924 WIN(mouse_set_mode(0));
1925 WIN(dd_gr_set_current_canvas(NULL));
1927 #if defined(POLY_ACC)
1928 save_bm = gr_create_bitmap2( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h, grd_curcanv->cv_bitmap.bm_type, NULL );
1930 save_bm = gr_create_bitmap( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h );
1932 Assert( save_bm != NULL );
1934 WIN(DDGRLOCK(dd_grd_curcanv));
1935 gr_bm_bitblt(grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_w,
1936 0, 0, 0, 0, &grd_curcanv->cv_bitmap, save_bm );
1937 WIN(DDGRUNLOCK(dd_grd_curcanv));
1940 case 0:kconfig_sub( kc_keyboard, NUM_KEY_CONTROLS, title );break;
1941 case 1:kconfig_sub( kc_joystick, NUM_OTHER_CONTROLS, title );break;
1942 case 2:kconfig_sub( kc_mouse, NUM_OTHER_CONTROLS, title ); break;
1943 case 3:kconfig_sub( kc_superjoy, NUM_OTHER_CONTROLS, title); break;
1945 //added on 2/4/99 by Victor Rachels for new keys menu
1946 case 4:kconfig_sub( kc_d2x, NUM_D2X_CONTROLS, title ); break;
1947 //end this section addition - VR
1955 WIN(mouse_set_mode(1));
1956 WIN(dd_gr_set_current_canvas(NULL));
1957 WIN(DDGRLOCK(dd_grd_curcanv));
1958 gr_bitmap(0, 0, save_bm);
1959 WIN(DDGRUNLOCK(dd_grd_curcanv));
1960 gr_free_bitmap(save_bm);
1962 reset_cockpit(); //force cockpit redraw next time
1964 // Update save values...
1966 for (i=0; i<NUM_KEY_CONTROLS; i++ )
1967 kconfig_settings[0][i] = kc_keyboard[i].value;
1969 if ( (Config_control_type>0) && (Config_control_type<5)) {
1970 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
1971 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
1972 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
1973 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
1974 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
1976 else if (Config_control_type == CONTROL_WINJOYSTICK) {
1977 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
1978 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
1982 for (i=0; i<NUM_D2X_CONTROLS; i++)
1983 kconfig_d2x_settings[i] = kc_d2x[i].value;
1988 void kconfig_read_fcs( int raw_axis )
1990 int raw_button, button, axis_min[4], axis_center[4], axis_max[4];
1992 if (Config_control_type!=CONTROL_THRUSTMASTER_FCS) return;
1994 joy_get_cal_vals(axis_min, axis_center, axis_max);
1996 if ( axis_max[3] > 1 )
1997 raw_button = (raw_axis*100)/axis_max[3];
2001 if ( raw_button > 88 )
2003 else if ( raw_button > 63 )
2005 else if ( raw_button > 39 )
2007 else if ( raw_button > 15 )
2012 kconfig_set_fcs_button( 19, button );
2013 kconfig_set_fcs_button( 15, button );
2014 kconfig_set_fcs_button( 11, button );
2015 kconfig_set_fcs_button( 7, button );
2019 void kconfig_set_fcs_button( int btn, int button )
2021 int state,time_down,upcount,downcount;
2022 state = time_down = upcount = downcount = 0;
2024 if ( joy_get_button_state(btn) ) {
2025 if ( btn==button ) {
2027 time_down = FrameTime;
2032 if ( btn==button ) {
2034 time_down = FrameTime;
2041 joy_set_btn_values( btn, state, time_down, downcount, upcount );
2047 fix Last_angles_p = 0;
2048 fix Last_angles_b = 0;
2049 fix Last_angles_h = 0;
2050 ubyte Last_angles_read = 0;
2052 extern int VR_sensitivity;
2054 int VR_sense_range[3] = { 25, 50, 75 };
2056 #if 0 //ndef MACINTOSH
2061 fix yaw, pitch, roll;
2064 //------ read vfx1 helmet --------
2065 if (vfx1_installed) {
2066 vfx_get_data(&yaw,&pitch,&roll,&buttons);
2067 } else if (iglasses_headset_installed) {
2068 iglasses_read_headset( &yaw, &pitch, &roll );
2069 } else if (Victor_headset_installed) {
2070 victor_read_headset_filtered( &yaw, &pitch, &roll );
2075 Use_player_head_angles = 0;
2076 if ( Last_angles_read ) {
2080 if ( (Last_angles_h < (F1_0/4) ) && (yaw > ((F1_0*3)/4) ) )
2082 else if ( (yaw < (F1_0/4) ) && (Last_angles_h > ((F1_0*3)/4) ) )
2085 Controls.pitch_time += fixmul((pitch- Last_angles_p)*VR_sense_range[VR_sensitivity],FrameTime);
2086 Controls.heading_time+= fixmul((yaw1 - Last_angles_h)*VR_sense_range[VR_sensitivity],FrameTime);
2087 Controls.bank_time += fixmul((roll - Last_angles_b)*VR_sense_range[VR_sensitivity],FrameTime);
2089 Last_angles_read = 1;
2090 Last_angles_p = pitch;
2091 Last_angles_h = yaw;
2092 Last_angles_b = roll;
2099 #ifndef __MSDOS__ // WINDOWS
2100 #define JOYSTICK_READ_TIME (F1_0/40) // Read joystick at 40 Hz.
2102 #define JOYSTICK_READ_TIME (F1_0/10) // Read joystick at 10 Hz.
2105 fix LastReadTime = 0;
2107 #ifdef USE_LINUX_JOY
2108 fix joy_axis[MAX_AXES];
2110 fix joy_axis[JOY_NUM_AXES];
2113 ubyte kc_use_external_control = 0;
2114 ubyte kc_enable_external_control = 0;
2115 ubyte kc_external_intno = 0;
2116 ext_control_info *kc_external_control = NULL;
2117 char *kc_external_name = NULL;
2118 ubyte kc_external_version = 0;
2119 extern int Automap_active;
2121 void kconfig_init_external_controls(int intno, int address)
2124 kc_external_intno = intno;
2125 kc_external_control = (ext_control_info *)address;
2126 kc_use_external_control = 1;
2127 kc_enable_external_control = 1;
2129 i = FindArg ( "-xname" );
2131 kc_external_name = Args[i+1];
2133 kc_external_name = "External Controller";
2135 for (i=0;i<strlen (kc_external_name);i++)
2136 if (kc_external_name[i]=='_')
2137 kc_external_name[i]=' ';
2139 i = FindArg ( "-xver" );
2141 kc_external_version = atoi(Args[i+1]);
2143 printf( "%s int: 0x%x, data: 0x%p, ver:%d\n", kc_external_name, kc_external_intno, kc_external_control, kc_external_version );
2147 #if !defined(MACINTOSH)
2148 /*void kconfig_read_external_controls()
2152 if ( !kc_enable_external_control && !CybermouseActive)
2155 if ( kc_external_version == 0 )
2156 memset( kc_external_control, 0, sizeof(control_info) );
2157 else if ( kc_external_version > 0 ) {
2158 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 );
2159 if ( kc_external_version > 1 ) {
2160 // Write ship pos and angles to external controls...
2161 ubyte *temp_ptr = (ubyte *)kc_external_control;
2162 vms_vector *ship_pos;
2163 vms_matrix *ship_orient;
2164 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
2165 temp_ptr += sizeof(control_info)+sizeof(vms_angvec) + 64;
2166 ship_pos = (vms_vector *)temp_ptr;
2167 temp_ptr += sizeof(vms_vector);
2168 ship_orient = (vms_matrix *)temp_ptr;
2169 // Fill in ship postion...
2170 *ship_pos = Objects[Players[Player_num].objnum].pos;
2171 // Fill in ship orientation...
2172 *ship_orient = Objects[Players[Player_num].objnum].orient;
2176 if ( Automap_active ) // (If in automap...)
2177 kc_external_control->automap_state = 1;
2178 memset(&r,0,sizeof(r));
2182 if (!CybermouseActive)
2183 int386 ( kc_external_intno, &r, &r); // Read external info...
2185 // ReadOWL (kc_external_control);
2189 if ( Player_num > -1 ) {
2190 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
2191 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
2192 Auto_leveling_on = 0;
2194 if ( kc_external_version > 0 ) {
2195 vms_matrix tempm, ViewMatrix;
2196 vms_angvec * Kconfig_abs_movement;
2199 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
2201 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
2202 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
2203 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
2204 Objects[Players[Player_num].objnum].orient = ViewMatrix;
2206 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
2207 if (oem_message[0] != '\0' )
2208 HUD_init_message( oem_message );
2212 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
2213 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
2214 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
2215 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
2216 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
2217 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
2218 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
2219 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
2220 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
2221 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
2222 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
2223 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
2224 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
2225 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
2226 Controls.automap_down_count += kc_external_control->automap_down_count;
2227 Controls.automap_state |= kc_external_control->automap_state;
2232 void controls_read_all_win()
2235 int slide_on, bank_on;
2239 int raw_joy_axis[7];
2241 fix k0, k1, k2, k3, kp;
2242 fix k4, k5, k6, k7, kh;
2243 ubyte channel_masks;
2244 int use_mouse, use_joystick;
2247 if (Game_turbo_mode)
2251 fix temp = Controls.heading_time;
2252 fix temp1 = Controls.pitch_time;
2253 memset( &Controls, 0, sizeof(control_info) );
2254 Controls.heading_time = temp;
2255 Controls.pitch_time = temp1;
2260 ctime = timer_get_fixed_seconds();
2262 // DO JOYSTICK (X,Y,Z R,U,V)
2263 // ----------------------------------------------------------------------------
2264 if ( (LastReadTime + JOYSTICK_READ_TIME) > ctime ) {
2265 if ((ctime < 0) && (LastReadTime > 0))
2266 LastReadTime = ctime;
2268 } else if ((Config_control_type==CONTROL_WINJOYSTICK)) {
2269 LastReadTime = ctime;
2270 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, raw_joy_axis );
2272 for (i=0; i<7; i++ ) {
2273 if (channel_masks&(1<<i)) {
2274 int joy_null_value = 28;
2276 // DO POV if joystick has a hat.
2277 // --------------------------------------------------------------------
2279 joydefsw_do_winjoybutton(raw_joy_axis);
2283 // --------------------------------------------------------------------
2284 // mprintf((0, "(%d)=%d,", i, raw_joy_axis[i]));
2285 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2286 // mprintf((0, "%d ",raw_joy_axis[i]));
2287 // if (i%2) mprintf((0,"\n"));
2290 if (kc_superjoy[23].value==i) // If this is the throttle
2291 joy_null_value = 32; // Then use a larger dead-zone
2293 if (raw_joy_axis[i] > (joy_null_value-2))
2294 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
2295 else if (raw_joy_axis[i] < -(joy_null_value+2))
2296 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
2298 raw_joy_axis[i] = 0;
2299 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
2308 for (i=0; i<6; i++ )
2314 // ----------------------------------------------------------------------------
2315 if (Config_control_type==5) {
2316 mouse_get_delta( &dx, &dy );
2317 mouse_axis[0] = (dx*FrameTime)/35;
2318 mouse_axis[1] = (dy*FrameTime)/25;
2319 mouse_buttons = mouse_get_btns();
2320 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
2329 //------------- Read slide_on -------------
2332 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
2333 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
2335 if ((use_joystick)&&(kc_superjoy[5].value<255)) slide_on |= joy_get_button_state( kc_superjoy[5].value );
2337 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
2339 //------------- Read bank_on ---------------
2342 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
2343 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
2345 if ( (use_joystick)&&(kc_superjoy[10].value < 255 )) bank_on |= joy_get_button_state( kc_superjoy[10].value );
2347 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
2349 //------------ Read pitch_time -----------
2351 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2353 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
2354 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
2355 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
2356 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
2359 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
2360 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
2361 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
2362 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
2365 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2366 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
2367 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
2371 Controls.pitch_time = 0;
2373 if (Controls.pitch_time < 0)
2374 Controls.pitch_time = 0;
2376 if (Controls.pitch_time > 0)
2377 Controls.pitch_time = 0;
2378 Controls.pitch_time += kp;
2381 if ( (use_joystick)&&(kc_superjoy[13].value < 255 )) {
2382 if ( !kc_superjoy[14].value ) // If not inverted...
2383 Controls.pitch_time -= (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2385 Controls.pitch_time += (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2389 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
2390 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
2391 if ( !kc_mouse[14].value ) // If not inverted...
2392 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2394 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2397 Controls.pitch_time = 0;
2401 //----------- Read vertical_thrust_time -----------------
2404 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
2405 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
2406 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
2407 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
2410 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
2411 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
2412 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
2413 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
2416 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2417 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
2418 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
2422 if ((use_joystick)&&( kc_superjoy[13].value < 255 )) {
2423 if ( !kc_superjoy[14].value ) // If not inverted...
2424 Controls.vertical_thrust_time += joy_axis[kc_superjoy[13].value];
2426 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[13].value];
2430 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
2431 if ( !kc_mouse[14].value ) // If not inverted...
2432 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
2434 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
2439 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
2440 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
2441 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
2442 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
2445 if ((use_joystick)&&( kc_superjoy[19].value < 255 )) {
2446 if ( !kc_superjoy[20].value ) // If not inverted...
2447 Controls.vertical_thrust_time += joy_axis[kc_superjoy[19].value];
2449 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[19].value];
2452 // From joystick buttons
2453 if ( (use_joystick)&&(kc_superjoy[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_superjoy[8].value );
2454 if ( (use_joystick)&&(kc_superjoy[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_superjoy[9].value );
2456 // From mouse buttons
2457 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
2458 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
2461 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
2462 if ( !kc_mouse[20].value ) // If not inverted...
2463 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
2465 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
2469 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2470 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
2471 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
2474 //---------- Read heading_time -----------
2476 if (!slide_on && !bank_on) {
2477 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2479 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
2480 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
2481 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
2482 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
2485 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
2486 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
2487 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
2488 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
2491 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2492 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
2493 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
2497 Controls.heading_time = 0;
2499 if (Controls.heading_time < 0)
2500 Controls.heading_time = 0;
2502 if (Controls.heading_time > 0)
2503 Controls.heading_time = 0;
2504 Controls.heading_time += kh;
2507 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2508 if ( !kc_superjoy[16].value ) // If not inverted...
2509 Controls.heading_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2511 Controls.heading_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2515 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2516 if ( !kc_mouse[16].value ) // If not inverted...
2517 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2519 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2522 Controls.heading_time = 0;
2525 //----------- Read sideways_thrust_time -----------------
2528 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2529 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2530 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2531 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2534 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
2535 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
2536 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
2537 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
2540 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2541 if ( !kc_superjoy[16].value ) // If not inverted...
2542 Controls.sideways_thrust_time += joy_axis[kc_superjoy[15].value];
2544 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[15].value];
2548 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2549 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
2550 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
2554 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2555 if ( !kc_mouse[16].value ) // If not inverted...
2556 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
2558 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
2563 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
2564 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
2565 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
2566 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
2569 if ( (use_joystick)&&(kc_superjoy[17].value < 255 )) {
2570 if ( !kc_superjoy[18].value ) // If not inverted...
2571 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[17].value];
2573 Controls.sideways_thrust_time += joy_axis[kc_superjoy[17].value];
2576 // From joystick buttons
2577 if ( (use_joystick)&&(kc_superjoy[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_superjoy[6].value );
2578 if ( (use_joystick)&&(kc_superjoy[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_superjoy[7].value );
2580 // From mouse buttons
2581 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
2582 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
2585 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
2586 if ( !kc_mouse[18].value ) // If not inverted...
2587 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
2589 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
2592 //----------- Read bank_time -----------------
2595 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2596 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2597 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2598 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2601 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
2602 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
2603 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
2604 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
2607 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2608 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
2609 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
2613 if ( (use_joystick)&&(kc_superjoy[15].value < 255) ) {
2614 if ( !kc_superjoy[16].value ) // If not inverted...
2615 Controls.bank_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2617 Controls.bank_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2621 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2622 if ( !kc_mouse[16].value ) // If not inverted...
2623 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2625 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2630 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
2631 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
2632 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
2633 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
2636 if ( (use_joystick)&&(kc_superjoy[21].value < 255) ) {
2637 if ( !kc_superjoy[22].value ) // If not inverted...
2638 Controls.bank_time -= joy_axis[kc_superjoy[21].value];
2640 Controls.bank_time += joy_axis[kc_superjoy[21].value];
2643 // From joystick buttons
2644 if ( (use_joystick)&&(kc_superjoy[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_superjoy[11].value );
2645 if ( (use_joystick)&&(kc_superjoy[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_superjoy[12].value );
2647 // From mouse buttons
2648 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
2649 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
2652 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
2653 if ( !kc_mouse[22].value ) // If not inverted...
2654 Controls.bank_time += mouse_axis[kc_mouse[21].value];
2656 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
2660 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2661 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
2662 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
2665 //----------- Read forward_thrust_time -------------
2668 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
2669 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
2670 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
2671 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
2674 if ( (use_joystick)&&(kc_superjoy[23].value < 255 )) {
2675 if ( !kc_superjoy[24].value ) // If not inverted...
2676 Controls.forward_thrust_time -= joy_axis[kc_superjoy[23].value];
2678 Controls.forward_thrust_time += joy_axis[kc_superjoy[23].value];
2681 // From joystick buttons
2682 if ( (use_joystick)&&(kc_superjoy[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_superjoy[2].value );
2683 if ( (use_joystick)&&(kc_superjoy[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_superjoy[3].value );
2686 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
2687 if ( !kc_mouse[24].value ) // If not inverted...
2688 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
2690 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
2693 // From mouse buttons
2694 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
2695 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
2697 //----------- Read afterburner_state -------------
2700 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
2701 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
2703 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
2705 if ( (use_joystick)&&(kc_superjoy[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_superjoy[27].value);
2707 //-------Read headlight key--------------------------
2708 if (kc_keyboard[52].value < 255 )
2709 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
2710 if (kc_keyboard[53].value < 255 )
2711 Controls.headlight_count=key_down_count(kc_keyboard[53].value);
2712 if ((use_joystick)&&(kc_superjoy[30].value < 255 ))
2713 Controls.headlight_count=joy_get_button_down_cnt(kc_superjoy[30].value);
2715 //--------Read Cycle Primary Key------------------
2717 if (kc_keyboard[48].value<255)
2718 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
2719 if (kc_keyboard[49].value<255)
2720 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
2721 if ((use_joystick)&&(kc_superjoy[28].value < 255 ))
2722 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_superjoy[28].value);
2724 //--------Read Cycle Secondary Key------------------
2726 if (kc_keyboard[50].value<255)
2727 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
2728 if (kc_keyboard[51].value<255)
2729 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
2730 if ((use_joystick)&&(kc_superjoy[29].value < 255 ))
2731 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_superjoy[29].value);
2733 //--------Read Toggle Bomb key----------------------
2735 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
2737 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
2739 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
2740 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
2742 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
2743 HUD_init_message ("No bombs available!");
2747 if (Players[Player_num].secondary_ammo[bomb]==0)
2749 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
2750 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
2754 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
2755 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
2760 //---------Read Energy->Shield key----------
2762 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
2763 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
2764 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
2765 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
2767 //----------- Read fire_primary_down_count
2768 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
2769 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
2770 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_superjoy[0].value);
2771 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
2773 //----------- Read fire_primary_state
2774 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
2775 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
2776 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_superjoy[0].value);
2777 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
2779 //----------- Read fire_secondary_down_count
2780 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
2781 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
2782 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_superjoy[1].value);
2783 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
2785 //----------- Read fire_secondary_state
2786 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
2787 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
2788 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_superjoy[1].value);
2789 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
2791 //----------- Read fire_flare_down_count
2792 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
2793 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
2794 if ((use_joystick)&&(kc_superjoy[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_superjoy[4].value);
2795 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
2797 //----------- Read drop_bomb_down_count
2798 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
2799 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
2800 if ((use_joystick)&&(kc_superjoy[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_superjoy[26].value);
2801 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
2803 //----------- Read rear_view_down_count
2804 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
2805 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
2806 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_superjoy[25].value);
2807 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
2809 //----------- Read rear_view_down_state
2810 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
2811 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
2812 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_superjoy[25].value);
2813 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
2815 //----------- Read automap_down_count
2816 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
2817 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
2819 //----------- Read automap_state
2820 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
2821 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
2823 //----------- Read stupid-cruise-control-type of throttle.
2825 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
2826 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
2827 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
2828 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
2829 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
2831 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
2834 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
2835 if (Cruise_speed < 0 ) Cruise_speed = 0;
2837 if (Controls.forward_thrust_time==0)
2838 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
2841 //read_head_tracker();
2843 // Read external controls
2844 if (kc_use_external_control || CybermouseActive)
2845 kconfig_read_external_controls();
2847 //----------- Clamp values between -FrameTime and FrameTime
2848 if (FrameTime > F1_0 )
2849 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
2851 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
2852 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
2853 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
2854 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
2855 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
2856 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
2857 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
2859 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
2860 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
2861 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
2862 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
2863 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
2864 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
2865 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
2868 //--------- Don't do anything if in debug mode
2870 if ( keyd_pressed[KEY_DELETE] ) {
2871 memset( &Controls, 0, sizeof(control_info) );
2878 fix Next_toggle_time[3]={0,0,0};
2880 int allowed_to_toggle(int i)
2882 //used for keeping tabs of when its ok to toggle headlight,primary,and secondary
2884 if (Next_toggle_time[i] > GameTime)
2885 if (Next_toggle_time[i] < GameTime + (F1_0/8)) // In case time is bogus, never wait > 1 second.
2888 Next_toggle_time[i] = GameTime + (F1_0/8);
2895 //added on 2/7/99 by Victor Rachels for jostick state setting
2896 int d2x_joystick_ostate[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
2897 //end this section adition - VR
2901 void controls_read_all()
2904 int slide_on, bank_on;
2911 fix mouse_axis[3] = {0,0,0};
2912 #ifdef USE_LINUX_JOY
2913 int raw_joy_axis[MAX_AXES];
2915 int raw_joy_axis[JOY_NUM_AXES];
2918 fix k0, k1, k2, k3, kp;
2919 fix k4, k5, k6, k7, kh;
2920 ubyte channel_masks;
2921 int use_mouse, use_joystick;
2927 if (Game_turbo_mode)
2931 fix temp = Controls.heading_time;
2932 fix temp1 = Controls.pitch_time;
2933 memset( &Controls, 0, sizeof(control_info) );
2934 Controls.heading_time = temp;
2935 Controls.pitch_time = temp1;
2940 ctime = timer_get_fixed_seconds();
2942 //--------- Read Joystick -----------
2944 if ( (LastReadTime + JOYSTICK_READ_TIME > ctime) && (Config_control_type!=CONTROL_THRUSTMASTER_FCS) ) {
2946 if ((ctime < 0) && (LastReadTime >= 0))
2948 if ((ctime < 0) && (LastReadTime > 0))
2950 LastReadTime = ctime;
2952 } else if ((Config_control_type>0) && (Config_control_type<5) ) {
2953 LastReadTime = ctime;
2954 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
2956 # ifdef USE_LINUX_JOY
2957 for (i = 0; i < j_num_axes; i++)
2959 for (i = 0; i < JOY_NUM_AXES; i++)
2963 if (channel_masks&(1<<i)) {
2965 int joy_null_value = 10;
2967 if ( (i==3) && (Config_control_type==CONTROL_THRUSTMASTER_FCS) ) {
2968 kconfig_read_fcs( raw_joy_axis[i] );
2970 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2972 if (kc_joystick[23].value==i) // If this is the throttle
2973 joy_null_value = 20; // Then use a larger dead-zone
2975 if (raw_joy_axis[i] > joy_null_value)
2976 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
2977 else if (raw_joy_axis[i] < -joy_null_value)
2978 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
2980 raw_joy_axis[i] = 0;
2981 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
2991 #ifdef USE_LINUX_JOY
2992 for (i = 0; i < j_num_axes; i++)
2994 for (i = 0; i < JOY_NUM_AXES; i++)
3000 //--------- Read Joystick -----------
3001 if ((Config_control_type>0) && (Config_control_type<5) ) {
3002 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
3003 for (i=0; i<4; i++ ) {
3004 if (channel_masks&(1<<i)) {
3005 int joy_null_value = 10;
3007 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
3009 if (kc_joystick[23].value==i) // If this is the throttle
3010 joy_null_value = 20; // Then use a larger dead-zone
3012 if (raw_joy_axis[i] > joy_null_value)
3013 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
3014 else if (raw_joy_axis[i] < -joy_null_value)
3015 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
3017 raw_joy_axis[i] = 0;
3018 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
3025 for (i=0; i<4; i++ )
3029 #endif // ifndef MACINTOSH
3031 if (Config_control_type==5 && !CybermouseActive) {
3032 //--------- Read Mouse -----------
3034 mouse_get_delta_z( &dx, &dy, &dz );
3036 mouse_get_delta( &dx, &dy );
3038 mouse_axis[0] = (dx*FrameTime)/35;
3039 mouse_axis[1] = (dy*FrameTime)/25;
3041 mouse_axis[2] = (dz*FrameTime);
3043 mouse_buttons = mouse_get_btns();
3044 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
3046 } else if (Config_control_type==6 && !CybermouseActive) {
3047 //--------- Read Cyberman -----------
3048 mouse_get_cyberman_pos(&idx,&idy );
3049 mouse_axis[0] = (idx*FrameTime)/128;
3050 mouse_axis[1] = (idy*FrameTime)/128;
3051 mouse_buttons = mouse_get_btns();
3053 } else if (CybermouseActive) {
3054 // ReadOWL (kc_external_control);
3055 // CybermouseAdjust();
3064 //added on 2/4/99 by Victor Rachels for d1x keys
3065 //--------- Read primary weapon select -------------
3066 //the following "if" added by WraithX to stop deadies from switchin weapons, 4/14/00
3067 if (!Player_is_dead)
3070 int d2x_joystick_state[10];
3073 d2x_joystick_state[i] = joy_get_button_state(kc_d2x[i*2+1].value);
3076 //----------------Weapon 1----------------
3077 if(key_down_count(kc_d2x[0].value) ||
3078 (joy_get_button_state(kc_d2x[1].value) &&
3079 (d2x_joystick_state[0]!=d2x_joystick_ostate[0]) ) )
3082 do_weapon_select(0,0);
3084 for(i=MAX_PRIMARY_WEAPONS;i<MAX_PRIMARY_WEAPONS+NEWPRIMS;i++)
3085 if(primary_order[i]>primary_order[valu]&&player_has_weapon(i,0))
3087 LaserPowSelected = valu;
3090 //----------------Weapon 2----------------
3091 if(key_down_count(kc_d2x[2].value) ||
3092 (joy_get_button_state(kc_d2x[3].value) &&
3093 (d2x_joystick_state[1]!=d2x_joystick_ostate[1]) ) )
3094 do_weapon_select(1,0);
3095 //----------------Weapon 3----------------
3096 if(key_down_count(kc_d2x[4].value) ||
3097 (joy_get_button_state(kc_d2x[5].value) &&
3098 (d2x_joystick_state[2]!=d2x_joystick_ostate[2]) ) )
3099 do_weapon_select(2,0);
3100 //----------------Weapon 4----------------
3101 if(key_down_count(kc_d2x[6].value) ||
3102 (joy_get_button_state(kc_d2x[7].value) &&
3103 (d2x_joystick_state[3]!=d2x_joystick_ostate[3]) ) )
3104 do_weapon_select(3,0);
3105 //----------------Weapon 5----------------
3106 if(key_down_count(kc_d2x[8].value) ||
3107 (joy_get_button_state(kc_d2x[9].value) &&
3108 (d2x_joystick_state[4]!=d2x_joystick_ostate[4]) ) )
3109 do_weapon_select(4,0);
3111 //--------- Read secondary weapon select ----------
3112 //----------------Weapon 6----------------
3113 if(key_down_count(kc_d2x[10].value) ||
3114 (joy_get_button_state(kc_d2x[11].value) &&
3115 (d2x_joystick_state[5]!=d2x_joystick_ostate[5]) ) )
3116 do_weapon_select(0,1);
3117 //----------------Weapon 7----------------
3118 if(key_down_count(kc_d2x[12].value) ||
3119 (joy_get_button_state(kc_d2x[13].value) &&
3120 (d2x_joystick_state[6]!=d2x_joystick_ostate[6]) ) )
3121 do_weapon_select(1,1);
3122 //----------------Weapon 8----------------
3123 if(key_down_count(kc_d2x[14].value) ||
3124 (joy_get_button_state(kc_d2x[15].value) &&
3125 (d2x_joystick_state[7]!=d2x_joystick_ostate[7]) ) )
3126 do_weapon_select(2,1);
3127 //----------------Weapon 9----------------
3128 if(key_down_count(kc_d2x[16].value) ||
3129 (joy_get_button_state(kc_d2x[17].value) &&
3130 (d2x_joystick_state[8]!=d2x_joystick_ostate[8]) ) )
3131 do_weapon_select(3,1);
3132 //----------------Weapon 0----------------
3133 if(key_down_count(kc_d2x[18].value) ||
3134 (joy_get_button_state(kc_d2x[19].value) &&
3135 (d2x_joystick_state[9]!=d2x_joystick_ostate[9]) ) )
3136 do_weapon_select(4,1);
3137 memcpy(d2x_joystick_ostate,d2x_joystick_state,10*sizeof(int));
3139 //end this section addition - VR
3142 }//end "if (!Player_is_dead)" - WraithX
3146 //------------- Read slide_on -------------
3149 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
3150 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
3152 if ((use_joystick)&&(kc_joystick[5].value<255)) slide_on |= joy_get_button_state( kc_joystick[5].value );
3154 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
3156 //------------- Read bank_on ---------------
3159 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
3160 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
3162 if ( (use_joystick)&&(kc_joystick[10].value < 255 )) bank_on |= joy_get_button_state( kc_joystick[10].value );
3164 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
3166 //------------ Read pitch_time -----------
3168 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3170 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
3171 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
3172 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
3173 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
3176 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
3177 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
3178 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
3179 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
3182 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3183 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
3184 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
3188 Controls.pitch_time = 0;
3190 if (Controls.pitch_time < 0)
3191 Controls.pitch_time = 0;
3193 if (Controls.pitch_time > 0)
3194 Controls.pitch_time = 0;
3195 Controls.pitch_time += kp;
3198 if ( (use_joystick)&&(kc_joystick[13].value < 255 )) {
3199 if ( !kc_joystick[14].value ) // If not inverted...
3200 Controls.pitch_time -= (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3202 Controls.pitch_time += (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3206 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
3207 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
3208 if ( !kc_mouse[14].value ) // If not inverted...
3209 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3211 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3214 Controls.pitch_time = 0;
3218 // the following "if" added by WraithX, 4/14/00
3219 // done so that dead players can't move
3220 if (!Player_is_dead)
3222 //----------- Read vertical_thrust_time -----------------
3225 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
3226 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
3227 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
3228 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
3231 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
3232 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
3233 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
3234 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
3237 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3238 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
3239 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
3243 if ((use_joystick)&&( kc_joystick[13].value < 255 )) {
3244 if ( !kc_joystick[14].value ) // If not inverted...
3245 Controls.vertical_thrust_time += joy_axis[kc_joystick[13].value];
3247 Controls.vertical_thrust_time -= joy_axis[kc_joystick[13].value];
3251 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
3252 if ( !kc_mouse[14].value ) // If not inverted...
3253 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
3255 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
3260 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
3261 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
3262 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
3263 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
3266 if ((use_joystick)&&( kc_joystick[19].value < 255 )) {
3267 if ( !kc_joystick[20].value ) // If not inverted...
3268 Controls.vertical_thrust_time += joy_axis[kc_joystick[19].value];
3270 Controls.vertical_thrust_time -= joy_axis[kc_joystick[19].value];
3273 // From joystick buttons
3274 if ( (use_joystick)&&(kc_joystick[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_joystick[8].value );
3275 if ( (use_joystick)&&(kc_joystick[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_joystick[9].value );
3277 // From mouse buttons
3278 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
3279 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
3282 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
3283 if ( !kc_mouse[20].value ) // If not inverted...
3284 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
3286 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
3290 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3291 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
3292 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
3294 }// end "if" added by WraithX
3296 //---------- Read heading_time -----------
3298 if (!slide_on && !bank_on) {
3299 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3301 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
3302 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
3303 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
3304 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
3307 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
3308 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
3309 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
3310 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
3313 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3314 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
3315 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
3319 Controls.heading_time = 0;
3321 if (Controls.heading_time < 0)
3322 Controls.heading_time = 0;
3324 if (Controls.heading_time > 0)
3325 Controls.heading_time = 0;
3326 Controls.heading_time += kh;
3329 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3330 if ( !kc_joystick[16].value ) // If not inverted...
3331 Controls.heading_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3333 Controls.heading_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3337 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3338 if ( !kc_mouse[16].value ) // If not inverted...
3339 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3341 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3344 Controls.heading_time = 0;
3347 // the following "if" added by WraithX, 4/14/00
3348 // done so that dead players can't move
3349 if (!Player_is_dead)
3351 //----------- Read sideways_thrust_time -----------------
3354 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3355 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3356 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3357 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3360 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
3361 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
3362 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
3363 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
3366 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3367 if ( !kc_joystick[16].value ) // If not inverted...
3368 Controls.sideways_thrust_time += joy_axis[kc_joystick[15].value];
3370 Controls.sideways_thrust_time -= joy_axis[kc_joystick[15].value];
3374 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3375 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
3376 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
3380 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3381 if ( !kc_mouse[16].value ) // If not inverted...
3382 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
3384 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
3389 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
3390 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
3391 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
3392 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
3395 if ( (use_joystick)&&(kc_joystick[17].value < 255 )) {
3396 if ( !kc_joystick[18].value ) // If not inverted...
3397 Controls.sideways_thrust_time -= joy_axis[kc_joystick[17].value];
3399 Controls.sideways_thrust_time += joy_axis[kc_joystick[17].value];
3402 // From joystick buttons
3403 if ( (use_joystick)&&(kc_joystick[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_joystick[6].value );
3404 if ( (use_joystick)&&(kc_joystick[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_joystick[7].value );
3406 // From mouse buttons
3407 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
3408 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
3411 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
3412 if ( !kc_mouse[18].value ) // If not inverted...
3413 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
3415 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
3417 }// end "if" added by WraithX
3419 //----------- Read bank_time -----------------
3422 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3423 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3424 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3425 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3428 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
3429 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
3430 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
3431 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
3434 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3435 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
3436 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
3440 if ( (use_joystick)&&(kc_joystick[15].value < 255) ) {
3441 if ( !kc_joystick[16].value ) // If not inverted...
3442 Controls.bank_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3444 Controls.bank_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3448 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3449 if ( !kc_mouse[16].value ) // If not inverted...
3450 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3452 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3457 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
3458 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
3459 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
3460 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
3463 if ( (use_joystick)&&(kc_joystick[21].value < 255) ) {
3464 if ( !kc_joystick[22].value ) // If not inverted...
3465 Controls.bank_time -= joy_axis[kc_joystick[21].value];
3467 Controls.bank_time += joy_axis[kc_joystick[21].value];
3470 // From joystick buttons
3471 if ( (use_joystick)&&(kc_joystick[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_joystick[11].value );
3472 if ( (use_joystick)&&(kc_joystick[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_joystick[12].value );
3474 // From mouse buttons
3475 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
3476 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
3479 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
3480 if ( !kc_mouse[22].value ) // If not inverted...
3481 Controls.bank_time += mouse_axis[kc_mouse[21].value];
3483 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
3487 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3488 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
3489 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
3492 // the following "if" added by WraithX, 4/14/00
3493 // done so that dead players can't move
3494 if (!Player_is_dead)
3496 //----------- Read forward_thrust_time -------------
3499 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
3500 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
3501 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
3502 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
3505 if ( (use_joystick)&&(kc_joystick[23].value < 255 )) {
3506 if ( !kc_joystick[24].value ) // If not inverted...
3507 Controls.forward_thrust_time -= joy_axis[kc_joystick[23].value];
3509 Controls.forward_thrust_time += joy_axis[kc_joystick[23].value];
3512 // From joystick buttons
3513 if ( (use_joystick)&&(kc_joystick[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_joystick[2].value );
3514 if ( (use_joystick)&&(kc_joystick[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_joystick[3].value );
3517 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
3518 if ( !kc_mouse[24].value ) // If not inverted...
3519 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
3521 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
3524 // From mouse buttons
3525 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
3526 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
3528 //----------- Read afterburner_state -------------
3531 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
3532 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
3534 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
3536 if ( (use_joystick)&&(kc_joystick[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_joystick[27].value);
3538 //-------Read headlight key--------------------------
3540 if (kc_keyboard[52].value < 255 )
3541 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
3542 if (kc_keyboard[53].value < 255 )
3543 Controls.headlight_count+=key_down_count(kc_keyboard[53].value);
3544 if ((use_joystick)&&(kc_joystick[30].value < 255 ))
3545 Controls.headlight_count+=joy_get_button_down_cnt(kc_joystick[30].value);
3547 //--------Read Cycle Primary Key------------------
3549 if (kc_keyboard[48].value<255)
3550 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
3551 if (kc_keyboard[49].value<255)
3552 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
3553 if ((use_joystick)&&(kc_joystick[28].value < 255 ))
3554 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_joystick[28].value);
3557 //--------Read Cycle Secondary Key------------------
3559 if (kc_keyboard[50].value<255)
3560 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
3561 if (kc_keyboard[51].value<255)
3562 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
3563 if ((use_joystick)&&(kc_joystick[29].value < 255 ))
3564 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_joystick[29].value);
3566 //--------Read Toggle Bomb key----------------------
3568 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
3570 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
3572 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
3573 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
3575 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3576 HUD_init_message ("No bombs available!");
3580 if (Players[Player_num].secondary_ammo[bomb]==0)
3582 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3583 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
3587 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
3588 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
3593 //---------Read Energy->Shield key----------
3595 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
3596 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
3597 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
3598 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
3600 //----------- Read fire_primary_down_count
3601 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
3602 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
3603 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_joystick[0].value);
3604 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
3606 //----------- Read fire_primary_state
3607 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
3608 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
3609 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_joystick[0].value);
3610 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
3612 //----------- Read fire_secondary_down_count
3613 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
3614 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
3615 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_joystick[1].value);
3616 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
3618 //----------- Read fire_secondary_state
3619 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
3620 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
3621 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_joystick[1].value);
3622 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
3624 //----------- Read fire_flare_down_count
3625 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
3626 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
3627 if ((use_joystick)&&(kc_joystick[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_joystick[4].value);
3628 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
3630 //----------- Read drop_bomb_down_count
3631 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
3632 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
3633 if ((use_joystick)&&(kc_joystick[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_joystick[26].value);
3634 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
3636 //----------- Read rear_view_down_count
3637 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
3638 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
3639 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_joystick[25].value);
3640 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
3642 //----------- Read rear_view_down_state
3643 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
3644 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
3645 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_joystick[25].value);
3646 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
3648 }//end "if" added by WraithX
3650 //----------- Read automap_down_count
3651 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
3652 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
3654 //----------- Read automap_state
3655 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
3656 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
3658 //----------- Read stupid-cruise-control-type of throttle.
3660 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
3661 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
3662 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
3663 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
3664 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
3666 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
3669 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
3670 if (Cruise_speed < 0 ) Cruise_speed = 0;
3672 if (Controls.forward_thrust_time==0)
3673 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
3676 #if !defined(MACINTOSH)
3677 //read_head_tracker();
3679 // Read external controls
3680 // if (kc_use_external_control || CybermouseActive)
3681 // kconfig_read_external_controls();
3684 //----------- Clamp values between -FrameTime and FrameTime
3685 if (FrameTime > F1_0 )
3686 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
3688 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
3689 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
3690 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
3691 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
3692 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
3693 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
3694 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
3696 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
3697 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
3698 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
3699 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
3700 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
3701 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
3702 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
3705 //--------- Don't do anything if in debug mode
3707 if ( keyd_pressed[KEY_DELETE] ) {
3708 memset( &Controls, 0, sizeof(control_info) );
3714 void reset_cruise(void)
3720 void kc_set_controls()
3724 for (i=0; i<NUM_KEY_CONTROLS; i++ )
3725 kc_keyboard[i].value = kconfig_settings[0][i];
3727 if ( (Config_control_type>0) && (Config_control_type<5)) {
3728 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3729 kc_joystick[i].value = kconfig_settings[Config_control_type][i];
3730 if (kc_joystick[i].type == BT_INVERT ) {
3731 if (kc_joystick[i].value!=1)
3732 kc_joystick[i].value = 0;
3733 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
3736 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
3737 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3738 kc_mouse[i].value = kconfig_settings[Config_control_type][i];
3739 if (kc_mouse[i].type == BT_INVERT ) {
3740 if (kc_mouse[i].value!=1)
3741 kc_mouse[i].value = 0;
3742 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
3745 } else if (Config_control_type == CONTROL_WINJOYSTICK) {
3746 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3747 kc_superjoy[i].value = kconfig_settings[Config_control_type][i];
3748 if (kc_superjoy[i].type == BT_INVERT ) {
3749 if (kc_superjoy[i].value!=1)
3750 kc_superjoy[i].value = 0;
3751 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
3757 for (i=0; i<NUM_D2X_CONTROLS; i++ )
3758 kc_d2x[i].value = kconfig_d2x_settings[i];
3762 #if 0 //ndef MACINTOSH // no mac support for vr headset
3764 void kconfig_center_headset()
3768 vfx_center_headset();
3770 // } else if (iglasses_headset_installed) {
3771 // } else if (Victor_headset_installed) {
3777 #endif // end of #ifndef MACINTOSH for kconfig_center_headset
3779 void CybermouseAdjust ()
3781 /* if ( Player_num > -1 ) {
3782 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
3783 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
3784 Auto_leveling_on = 0;
3786 if ( kc_external_version > 0 ) {
3787 vms_matrix tempm, ViewMatrix;
3788 vms_angvec * Kconfig_abs_movement;
3791 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
3793 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
3794 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
3795 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
3796 Objects[Players[Player_num].objnum].orient = ViewMatrix;
3798 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
3799 if (oem_message[0] != '\0' )
3800 HUD_init_message( oem_message );
3804 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
3805 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
3806 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
3807 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
3808 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
3809 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
3810 // Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
3811 // Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
3812 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
3813 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
3814 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
3815 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
3816 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
3817 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
3818 // Controls.automap_down_count += kc_external_control->automap_down_count;
3819 // Controls.automap_state |= kc_external_control->automap_state;
3822 char GetKeyValue (char key)
3824 mprintf ((0,"Returning %c!\n",kc_keyboard[(int)key].value));
3825 return (kc_keyboard[(int)key].value);
3828 #if !defined(MACINTOSH)
3831 extern object *obj_find_first_of_type (int);
3832 void kconfig_read_external_controls()
3837 if ( !kc_enable_external_control ) return;
3839 if ( kc_external_version == 0 )
3840 memset( kc_external_control, 0, sizeof(ext_control_info));
3841 else if ( kc_external_version > 0 ) {
3843 if (kc_external_version>=4)
3844 memset( kc_external_control, 0, sizeof(advanced_ext_control_info));
3845 else if (kc_external_version>0)
3846 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 );
3847 else if (kc_external_version>2)
3848 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof(vms_matrix) +4 );
3850 if ( kc_external_version > 1 ) {
3851 // Write ship pos and angles to external controls...
3852 ubyte *temp_ptr = (ubyte *)kc_external_control;
3853 vms_vector *ship_pos;
3854 vms_matrix *ship_orient;
3855 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
3856 temp_ptr += sizeof(ext_control_info) + sizeof(vms_angvec) + 64;
3857 ship_pos = (vms_vector *)temp_ptr;
3858 temp_ptr += sizeof(vms_vector);
3859 ship_orient = (vms_matrix *)temp_ptr;
3860 // Fill in ship postion...
3861 *ship_pos = Objects[Players[Player_num].objnum].pos;
3862 // Fill in ship orientation...
3863 *ship_orient = Objects[Players[Player_num].objnum].orient;
3865 if (kc_external_version>=4)
3867 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
3869 temp_ptr->headlight_state=(Players[Player_num].flags & PLAYER_FLAGS_HEADLIGHT_ON);
3870 temp_ptr->primary_weapon_flags=Players[Player_num].primary_weapon_flags;
3871 temp_ptr->secondary_weapon_flags=Players[Player_num].secondary_weapon_flags;
3872 temp_ptr->current_primary_weapon=Primary_weapon;
3873 temp_ptr->current_secondary_weapon=Secondary_weapon;
3875 temp_ptr->current_guidebot_command=Escort_goal_object;
3877 temp_ptr->force_vector=ExtForceVec;
3878 temp_ptr->force_matrix=ExtApplyForceMatrix;
3880 temp_ptr->joltinfo[i]=ExtJoltInfo[i];
3882 temp_ptr->x_vibrate_info[i]=ExtXVibrateInfo[i];
3883 temp_ptr->x_vibrate_clear=ExtXVibrateClear;
3884 temp_ptr->game_status=ExtGameStatus;
3886 memset ((void *)&ExtForceVec,0,sizeof(vms_vector));
3887 memset ((void *)&ExtApplyForceMatrix,0,sizeof(vms_matrix));
3892 ExtXVibrateInfo[i]=0;
3897 if ( Automap_active ) // (If in automap...)
3898 kc_external_control->automap_state = 1;
3899 //memset(&r,0,sizeof(r));
3903 int386 ( kc_external_intno, &r, &r); // Read external info...
3907 if ( Player_num > -1 ) {
3908 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
3909 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
3910 Auto_leveling_on = 0;
3912 if ( kc_external_version > 0 ) {
3913 vms_matrix tempm, ViewMatrix;
3914 vms_angvec * Kconfig_abs_movement;
3917 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(ext_control_info));
3919 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
3920 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
3921 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
3922 Objects[Players[Player_num].objnum].orient = ViewMatrix;
3924 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
3925 if (oem_message[0] != '\0' )
3926 HUD_init_message( oem_message );
3930 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
3931 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
3932 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
3933 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
3934 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
3935 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
3936 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
3937 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
3938 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
3939 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
3940 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
3941 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
3942 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
3943 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
3944 Controls.automap_down_count += kc_external_control->automap_down_count;
3945 Controls.automap_state |= kc_external_control->automap_state;
3947 if (kc_external_version>=3)
3949 ubyte *temp_ptr = (ubyte *)kc_external_control;
3950 temp_ptr += (sizeof(ext_control_info) + sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof (vms_matrix));
3953 Controls.cycle_primary_count=(*(temp_ptr));
3955 Controls.cycle_secondary_count=(*(temp_ptr+1));
3958 Controls.afterburner_state=(*(temp_ptr+2));
3960 Controls.headlight_count=(*(temp_ptr+3));
3962 if (kc_external_version>=4)
3965 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
3968 if (temp_ptr->keyboard[i])
3971 if (temp_ptr->Reactor_blown)
3973 if (Game_mode & GM_MULTI)
3974 net_destroy_controlcen (obj_find_first_of_type (OBJ_CNTRLCEN));
3976 do_controlcen_destroyed_stuff(obj_find_first_of_type (OBJ_CNTRLCEN));