1 /* $Id: kconfig.c,v 1.40 2005-08-02 06:13:56 chris 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.40 2005-08-02 06:13:56 chris Exp $";
79 ubyte ExtGameStatus=1;
81 vms_vector ExtForceVec;
82 vms_matrix ExtApplyForceMatrix;
84 int ExtJoltInfo[3]={0,0,0};
85 int ExtXVibrateInfo[2]={0,0};
86 int ExtYVibrateInfo[2]={0,0};
87 ubyte ExtXVibrateClear=0;
88 ubyte ExtYVibrateClear=0;
90 #define TABLE_CREATION 1
92 // Array used to 'blink' the cursor while waiting for a keypress.
93 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 };
95 //char * invert_text[2] = { "N", "Y" };
96 //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" };
97 //char * joyaxis_text[4] = { "X1", "Y1", "X2", "Y2" };
98 //char * mouseaxis_text[2] = { "L/R", "F/B" };
99 //char * mousebutton_text[3] = { "Left", "Right", "Mid" };
101 int invert_text[2] = { TNUM_N, TNUM_Y };
103 #ifndef USE_LINUX_JOY
105 int joybutton_text[28] =
106 { TNUM_BTN_1, TNUM_BTN_2, TNUM_BTN_3, TNUM_BTN_4,
110 TNUM_HAT_L, TNUM_HAT_R, TNUM_HAT_U, TNUM_HAT_D,
114 int joyaxis_text[7] = { TNUM_X1, TNUM_Y1, TNUM_Z1, TNUM_UN, TNUM_P1,TNUM_R1,TNUM_YA1 };
115 #elif defined(SDL_INPUT)
116 char *joybutton_text[JOY_MAX_BUTTONS];
117 char *joyaxis_text[JOY_MAX_AXES];
119 int joybutton_text[28] =
120 { TNUM_BTN_1, TNUM_BTN_2, TNUM_BTN_3, TNUM_BTN_4,
121 -1, TNUM_TRIG, TNUM_LEFT, TNUM_HAT_L,
122 TNUM_RIGHT, -1, TNUM_HAT2_D, TNUM_HAT_R,
123 TNUM_MID, -1, TNUM_HAT2_R, TNUM_HAT_U,
124 TNUM_HAT2_L, -1, TNUM_HAT2_U, TNUM_HAT_D,
125 TNUM_TRIG, TNUM_LEFT, TNUM_RIGHT, -1,
126 TNUM_UP, TNUM_DOWN, TNUM_LEFT, TNUM_RIGHT };
128 int joyaxis_text[7] = { TNUM_X1, TNUM_Y1, TNUM_Z1, TNUM_UN, TNUM_P1,TNUM_R1,TNUM_YA1 };
129 // int joyaxis_text[4] = { TNUM_X1, TNUM_Y1, TNUM_X2, TNUM_Y2 };
133 int mouseaxis_text[3] = { TNUM_L_R, TNUM_F_B, TNUM_Z1 };
135 int mousebutton_text[3] = { TNUM_LEFT, TNUM_RIGHT, TNUM_MID };
136 char * mousebutton_textra[13] = { "M4", "M5", "M6", "M7", "M8", "M9", "M10","M11","M12","M13","M14","M15","M16" };//text for buttons above 3. -MPM
138 char *mousebutton_text[3] = { "Btn", "", "" }; // only one silly mouse button on the mac
142 char * key_text[256] = {
143 "","S","D","F","H","G","Z","X","C","V","","B","Q", "W", "E", "R",
144 "Y","T","1","2","3","4","6","5","=","9","7","-", "8", "0", "]", "O",
145 "U","[","I","P","RET","L","J","'","K", ";", "\\", ",", "/", "N", "M", ".",
146 "TAB","SPC","`","DEL","","ESC","","APL","SHIFT","CAPSL","OPTN","CTRL","","","","A",
147 "","PAD.","","PAD*","","PAD+","","NMLCK","","","","PAD/","ENTER","","PAD-","",
148 "","PAD=","PAD0","PAD1","PAD2","PAD3","PAD4","PAD5","PAD6","PAD7","","PAD8","PAD9","","","",
149 "F5","F6","F7","","F8","F9","","F11","","F13","","F14","","F10","","F12",
150 "","PAUSE","HELP","HOME","PGUP","DEL","","END","F2","","F1","LARW","RARW","DARW","UARW","",
151 "","","","","","","","","","","","","","","","",
152 "","","","","","","","","","","","","","","","",
153 "","","","","","","","","","","","","","","","",
154 "","","","","","","","","","","","","","","","",
155 "","","","","","","","","","","","","","","","",
156 "","","","","","","","","","","","","","","","",
157 "","","","","","","","","","","","","","","","",
158 "","","","","","","","","","","","","","","",""};
160 #if !defined OGL && !defined SDL_INPUT
161 char * key_text[256] = { \
162 "","ESC","1","2","3","4","5","6","7","8","9","0","-", \
163 "=","BSPC","TAB","Q","W","E","R","T","Y","U","I","O", \
164 "P","[","]","
\83","LCTRL","A","S","D","F", \
165 "G","H","J","K","L",";","'","`", \
166 "LSHFT","\\","Z","X","C","V","B","N","M",",", \
167 ".","/","RSHFT","PAD*","LALT","SPC", \
168 "CPSLK","F1","F2","F3","F4","F5","F6","F7","F8","F9", \
169 "F10","NMLCK","SCLK","PAD7","PAD8","PAD9","PAD-", \
170 "PAD4","PAD5","PAD6","PAD+","PAD1","PAD2","PAD3","PAD0", \
171 "PAD.","","","","F11","F12","","","","","","","","","", \
172 "","","","","","","","","","","","","","","","","","","","", \
173 "","","","","","","","","","","","","","","","","","","","", \
174 "","","","","","","","","","","","","","","","","","", \
175 "PAD
\83","RCTRL","","","","","","","","","","","","","", \
176 "","","","","","","","","","","PAD/","","","RALT","", \
177 "","","","","","","","","","","","","","HOME","
\82","PGUP", \
178 "","
\81","","
\7f","","END","
\80","PGDN","INS", \
179 "DEL","","","","","","","","","","","","","","","","","", \
180 "","","","","","","","","","","","","","","","","","","","", \
181 "","","","","","","" };
186 //added/removed by Victor Rachels for adding rebindable keys for these
187 // KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0
188 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 };
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_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 };
193 //extern void GameLoop(int, int );
195 extern void transfer_energy_to_shield(fix);
196 extern void CyclePrimary(),CycleSecondary(),InitMarkerInput();
197 extern ubyte DefiningMarkerMessage;
198 extern char CybermouseActive;
201 extern int joydefsw_do_button();
202 extern int joydefsw_do_winjoybutton(int *axis);
203 extern joydefsw_win_joyselect(char *title);
206 control_info Controls;
210 // macros for drawing lo/hi res kconfig screens (see scores.c as well)
212 #define LHX(x) ((x)*(MenuHires?2:1))
213 #define LHY(y) ((y)*(MenuHires?2.4:1))
217 #define BT_MOUSE_BUTTON 1
218 #define BT_MOUSE_AXIS 2
219 #define BT_JOY_BUTTON 3
220 #define BT_JOY_AXIS 4
223 char *btype_text[] = { "BT_KEY", "BT_MOUSE_BUTTON", "BT_MOUSE_AXIS", "BT_JOY_BUTTON", "BT_JOY_AXIS", "BT_INVERT" };
227 typedef struct kc_item {
228 short id; // The id of this item
236 ubyte value; // what key,button,etc
242 ubyte kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS];
244 //added on 2/4/99 by Victor Rachels to add d1x new keys
245 ubyte kconfig_d2x_settings[MAX_D2X_CONTROLS];
246 //end this section addition - VR
248 //----------- WARNING!!!!!!! -------------------------------------------
249 // THESE NEXT FOUR BLOCKS OF DATA ARE GENERATED BY PRESSING DEL+F12 WHEN
250 // IN THE KEYBOARD CONFIG SCREEN. BASICALLY, THAT PROCEDURE MODIFIES THE
251 // U,D,L,R FIELDS OF THE ARRAYS AND DUMPS THE NEW ARRAYS INTO KCONFIG.COD
252 //-------------------------------------------------------------------------
253 /*ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
254 {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},
255 {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},
256 {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},
257 {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},
258 {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},
259 {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},
260 {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},
264 ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
265 {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},
266 {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},
267 {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},
268 {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},
269 {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},
270 {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},
271 {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},
273 {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},
279 kc_item kc_keyboard[NUM_KEY_CONTROLS] = {
280 { 0, 15, 49, 71, 26, 55, 2, 55, 1,"Pitch forward", BT_KEY, 255 },
281 { 1, 15, 49,100, 26, 50, 3, 0, 24,"Pitch forward", BT_KEY, 255 },
282 { 2, 15, 57, 71, 26, 0, 4, 25, 3,"Pitch backward", BT_KEY, 255 },
283 { 3, 15, 57,100, 26, 1, 5, 2, 26,"Pitch backward", BT_KEY, 255 },
284 { 4, 15, 65, 71, 26, 2, 6, 27, 5,"Turn left", BT_KEY, 255 },
285 { 5, 15, 65,100, 26, 3, 7, 4, 28,"Turn left", BT_KEY, 255 },
286 { 6, 15, 73, 71, 26, 4, 8, 29, 7,"Turn right", BT_KEY, 255 },
287 { 7, 15, 73,100, 26, 5, 9, 6, 34,"Turn right", BT_KEY, 255 },
288 { 8, 15, 85, 71, 26, 6, 10, 35, 9,"Slide on", BT_KEY, 255 },
289 { 9, 15, 85,100, 26, 7, 11, 8, 36,"Slide on", BT_KEY, 255 },
290 { 10, 15, 93, 71, 26, 8, 12, 37, 11,"Slide left", BT_KEY, 255 },
291 { 11, 15, 93,100, 26, 9, 13, 10, 44,"Slide left", BT_KEY, 255 },
292 { 12, 15,101, 71, 26, 10, 14, 45, 13,"Slide right", BT_KEY, 255 },
293 { 13, 15,101,100, 26, 11, 15, 12, 30,"Slide right", BT_KEY, 255 },
294 { 14, 15,109, 71, 26, 12, 16, 31, 15,"Slide up", BT_KEY, 255 },
295 { 15, 15,109,100, 26, 13, 17, 14, 32,"Slide up", BT_KEY, 255 },
296 { 16, 15,117, 71, 26, 14, 18, 33, 17,"Slide down", BT_KEY, 255 },
297 { 17, 15,117,100, 26, 15, 19, 16, 46,"Slide down", BT_KEY, 255 },
298 { 18, 15,129, 71, 26, 16, 20, 47, 19,"Bank on", BT_KEY, 255 },
299 { 19, 15,129,100, 26, 17, 21, 18, 38,"Bank on", BT_KEY, 255 },
300 { 20, 15,137, 71, 26, 18, 22, 39, 21,"Bank left", BT_KEY, 255 },
301 { 21, 15,137,100, 26, 19, 23, 20, 40,"Bank left", BT_KEY, 255 },
302 { 22, 15,145, 71, 26, 20, 48, 41, 23,"Bank right", BT_KEY, 255 },
303 { 23, 15,145,100, 26, 21, 49, 22, 42,"Bank right", BT_KEY, 255 },
304 { 24,158, 49, 83, 26, 51, 26, 1, 25,"Fire primary", BT_KEY, 255 },
305 { 25,158, 49,112, 26, 54, 27, 24, 2,"Fire primary", BT_KEY, 255 },
306 { 26,158, 57, 83, 26, 24, 28, 3, 27,"Fire secondary", BT_KEY, 255 },
307 { 27,158, 57,112, 26, 25, 29, 26, 4,"Fire secondary", BT_KEY, 255 },
308 { 28,158, 65, 83, 26, 26, 34, 5, 29,"Fire flare", BT_KEY, 255 },
309 { 29,158, 65,112, 26, 27, 35, 28, 6,"Fire flare", BT_KEY, 255 },
310 { 30,158,105, 83, 26, 44, 32, 13, 31,"Accelerate", BT_KEY, 255 },
311 { 31,158,105,112, 26, 45, 33, 30, 14,"Accelerate", BT_KEY, 255 },
312 { 32,158,113, 83, 26, 30, 46, 15, 33,"reverse", BT_KEY, 255 },
313 { 33,158,113,112, 26, 31, 47, 32, 16,"reverse", BT_KEY, 255 },
314 { 34,158, 73, 83, 26, 28, 36, 7, 35,"Drop Bomb", BT_KEY, 255 },
315 { 35,158, 73,112, 26, 29, 37, 34, 8,"Drop Bomb", BT_KEY, 255 },
316 { 36,158, 85, 83, 26, 34, 44, 9, 37,"REAR VIEW", BT_KEY, 255 },
317 { 37,158, 85,112, 26, 35, 45, 36, 10,"REAR VIEW", BT_KEY, 255 },
318 { 38,158,133, 83, 26, 46, 40, 19, 39,"Cruise Faster", BT_KEY, 255 },
319 { 39,158,133,112, 26, 47, 41, 38, 20,"Cruise Faster", BT_KEY, 255 },
320 { 40,158,141, 83, 26, 38, 42, 21, 41,"Cruise Slower", BT_KEY, 255 },
321 { 41,158,141,112, 26, 39, 43, 40, 22,"Cruise Slower", BT_KEY, 255 },
322 { 42,158,149, 83, 26, 40, 52, 23, 43,"Cruise Off", BT_KEY, 255 },
323 { 43,158,149,112, 26, 41, 53, 42, 48,"Cruise Off", BT_KEY, 255 },
324 { 44,158, 93, 83, 26, 36, 30, 11, 45,"Automap", BT_KEY, 255 },
325 { 45,158, 93,112, 26, 37, 31, 44, 12,"Automap", BT_KEY, 255 },
326 { 46,158,121, 83, 26, 32, 38, 17, 47,"Afterburner", BT_KEY, 255 },
327 { 47,158,121,112, 26, 33, 39, 46, 18,"Afterburner", BT_KEY, 255 },
328 { 48, 15,161, 71, 26, 22, 50, 43, 49,"Cycle Primary", BT_KEY, 255 },
329 { 49, 15,161,100, 26, 23, 51, 48, 52,"Cycle Primary", BT_KEY, 255 },
330 { 50, 15,169, 71, 26, 48, 1, 53, 51,"Cycle Second", BT_KEY, 255 },
331 { 51, 15,169,100, 26, 49, 24, 50, 54,"Cycle Second", BT_KEY, 255 },
332 { 52,158,163, 83, 26, 42, 54, 49, 53,"Headlight", BT_KEY, 255 },
333 { 53,158,163,112, 26, 43, 55, 52, 50,"Headlight", BT_KEY, 255 },
334 { 54,158,171, 83, 26, 52, 56, 51, 55,"Energy->Shield", BT_KEY, 255 },
335 { 55,158,171,112, 26, 53, 0, 54, 0,"Energy->Shield", BT_KEY, 255 },
336 { 56,158,179,83, 26, 54, 0, 0, 0, "Toggle Bomb", BT_KEY,255},
338 kc_item kc_joystick[NUM_OTHER_CONTROLS] = {
339 { 0, 25, 46, 85, 40, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
340 { 1, 25, 54, 85, 40, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
341 { 2, 25, 85, 85, 40, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
342 { 3, 25, 93, 85, 40, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
343 { 4, 25, 62, 85, 40, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
344 { 5,180, 46, 79, 40, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
345 { 6,180, 54, 79, 40, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
346 { 7,180, 62, 79, 40, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
347 { 8,180, 70, 79, 40, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
348 { 9,180, 78, 79, 40, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
349 { 10,180, 90, 79, 40, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
350 { 11,180, 98, 79, 40, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
351 { 12,180,106, 79, 40, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
352 { 13, 22,154, 51, 40, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
353 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
354 { 15, 22,162, 51, 40, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
355 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
356 { 17,164,154, 58, 40, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
357 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
358 { 19,164,162, 58, 40, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
359 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
360 { 21,164,172, 58, 40, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
361 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
362 { 23,164,180, 58, 40, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
363 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
364 { 25, 25,109, 85, 40, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
365 { 26, 25, 70, 85, 40, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
366 { 27, 25,117, 85, 40, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
367 { 28,180,114, 79, 40, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
368 { 29,180,122, 79, 40, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
369 { 30, 25,125, 85, 40, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
371 kc_item kc_superjoy[NUM_OTHER_CONTROLS] = {
372 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
373 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
374 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
375 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
376 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
377 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
378 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
379 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
380 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
381 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
382 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
383 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
384 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
385 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
386 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
387 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
388 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
389 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
390 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
391 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
392 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
393 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
394 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
395 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
396 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
397 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
398 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
399 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
400 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
401 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
402 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
405 kc_item kc_mouse[NUM_OTHER_CONTROLS] = {
406 { 0, 25, 46, 85, 26, 12, 1, 24, 5,"Fire primary", BT_MOUSE_BUTTON, 255 },
407 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_MOUSE_BUTTON, 255 },
408 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_MOUSE_BUTTON, 255 },
409 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_MOUSE_BUTTON, 255 },
410 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_MOUSE_BUTTON, 255 },
411 { 5,180, 46, 59, 26, 24, 6, 0, 1,"Slide on", BT_MOUSE_BUTTON, 255 },
412 { 6,180, 54, 59, 26, 5, 7, 1, 4,"Slide left", BT_MOUSE_BUTTON, 255 },
413 { 7,180, 62, 59, 26, 6, 8, 4, 26,"Slide right", BT_MOUSE_BUTTON, 255 },
414 { 8,180, 70, 59, 26, 7, 9, 26, 9,"Slide up", BT_MOUSE_BUTTON, 255 },
415 { 9,180, 78, 59, 26, 8, 10, 8, 2,"Slide down", BT_MOUSE_BUTTON, 255 },
416 { 10,180, 90, 59, 26, 9, 11, 2, 3,"Bank on", BT_MOUSE_BUTTON, 255 },
417 { 11,180, 98, 59, 26, 10, 12, 3, 12,"Bank left", BT_MOUSE_BUTTON, 255 },
418 { 12,180,106, 59, 26, 11, 0, 11, 25,"Bank right", BT_MOUSE_BUTTON, 255 },
419 { 13,103,138, 58, 26, 27, 15, 25, 14,"Pitch U/D", BT_MOUSE_AXIS, 255 },
420 { 14,103,138,106, 8, 23, 16, 13, 15,"Pitch U/D", BT_INVERT, 255 },
421 { 15,103,146, 58, 26, 13, 17, 14, 16,"Turn L/R", BT_MOUSE_AXIS, 255 },
422 { 16,103,146,106, 8, 14, 18, 15, 17,"Turn L/R", BT_INVERT, 255 },
423 { 17,103,154, 58, 26, 15, 19, 16, 18,"Slide L/R", BT_MOUSE_AXIS, 255 },
424 { 18,103,154,106, 8, 16, 20, 17, 19,"Slide L/R", BT_INVERT, 255 },
425 { 19,103,162, 58, 26, 17, 21, 18, 20,"Slide U/D", BT_MOUSE_AXIS, 255 },
426 { 20,103,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
427 { 21,103,170, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_MOUSE_AXIS, 255 },
428 { 22,103,170,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
429 { 23,103,182, 58, 26, 21, 14, 22, 24,"throttle", BT_MOUSE_AXIS, 255 },
430 { 24,103,182,106, 8, 22, 5, 23, 0,"throttle", BT_INVERT, 255 },
431 { 25, 25,109, 85, 26, 3, 27, 12, 13,"REAR VIEW", BT_MOUSE_BUTTON, 255 },
432 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_MOUSE_BUTTON, 255 },
433 { 27, 25,117, 85, 26, 25, 13, 25, 13,"Afterburner", BT_MOUSE_BUTTON, 255 },
437 //added on 2/4/99 by Victor Rachels to add d1x new keys
438 kc_item kc_d2x[NUM_D2X_CONTROLS] = {
439 // id,x,y,w1,w2,u,d,l,r,text_num1,type,value
440 { 0, 15, 49, 71, 26, 27, 2, 27, 1, "WEAPON 1", BT_KEY, 255},
441 { 1, 15, 49,100, 26, 26, 3, 0, 2, "WEAPON 1", BT_JOY_BUTTON, 255},
442 { 2, 15, 57, 71, 26, 0, 4, 1, 3, "WEAPON 2", BT_KEY, 255},
443 { 3, 15, 57,100, 26, 1, 5, 2, 4, "WEAPON 2", BT_JOY_BUTTON, 255},
444 { 4, 15, 65, 71, 26, 2, 6, 3, 5, "WEAPON 3", BT_KEY, 255},
445 { 5, 15, 65,100, 26, 3, 7, 4, 6, "WEAPON 3", BT_JOY_BUTTON, 255},
446 { 6, 15, 73, 71, 26, 4, 8, 5, 7, "WEAPON 4", BT_KEY, 255},
447 { 7, 15, 73,100, 26, 5, 9, 6, 8, "WEAPON 4", BT_JOY_BUTTON, 255},
448 { 8, 15, 81, 71, 26, 6, 10, 7, 9, "WEAPON 5", BT_KEY, 255},
449 { 9, 15, 81,100, 26, 7, 11, 8, 10, "WEAPON 5", BT_JOY_BUTTON, 255},
451 { 10, 15, 89, 71, 26, 8, 12, 9, 11, "WEAPON 6", BT_KEY, 255},
452 { 11, 15, 89,100, 26, 9, 13, 10, 12, "WEAPON 6", BT_JOY_BUTTON, 255},
453 { 12, 15, 97, 71, 26, 10, 14, 11, 13, "WEAPON 7", BT_KEY, 255},
454 { 13, 15, 97,100, 26, 11, 15, 12, 14, "WEAPON 7", BT_JOY_BUTTON, 255},
455 { 14, 15,105, 71, 26, 12, 16, 13, 15, "WEAPON 8", BT_KEY, 255},
456 { 15, 15,105,100, 26, 13, 17, 14, 16, "WEAPON 8", BT_JOY_BUTTON, 255},
457 { 16, 15,113, 71, 26, 14, 18, 15, 17, "WEAPON 9", BT_KEY, 255},
458 { 17, 15,113,100, 26, 15, 19, 16, 18, "WEAPON 9", BT_JOY_BUTTON, 255},
459 { 18, 15,121, 71, 26, 16, 20, 17, 19, "WEAPON 0", BT_KEY, 255},
460 { 19, 15,121,100, 26, 17, 21, 18, 20, "WEAPON 0", BT_JOY_BUTTON, 255},
462 //{ 20, 15,131, 71, 26, 18, 22, 19, 21, "CYC PRIMARY", BT_KEY, 255},
463 //{ 21, 15,131,100, 26, 19, 23, 20, 22, "CYC PRIMARY", BT_JOY_BUTTON, 255},
464 //{ 22, 15,139, 71, 26, 20, 24, 21, 23, "CYC SECONDARY", BT_KEY, 255},
465 //{ 23, 15,139,100, 26, 21, 25, 22, 24, "CYC SECONDARY", BT_JOY_BUTTON, 255},
466 //{ 24, 8,147, 78, 26, 22, 26, 23, 25, "TOGGLE_PRIM AUTO", BT_KEY, 255},
467 //{ 25, 8,147,107, 26, 23, 27, 24, 26, "TOGGLE_PRIM_AUTO", BT_JOY_BUTTON, 255},
468 //{ 26, 8,155, 78, 26, 24, 1, 25, 27, "TOGGLE SEC AUTO", BT_KEY, 255},
469 //{ 27, 8,155,107, 26, 25, 0, 26, 0, "TOGGLE SEC AUTO", BT_JOY_BUTTON, 255},
471 //end this section addition - VR
474 #else // ifndef MACINTOSH (following are macintosh controls)
476 ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {
477 {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},
478 {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},
479 {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},
480 {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},
481 {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},
482 {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},
483 {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},
486 ubyte default_firebird_settings[MAX_CONTROLS] =
487 {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};
489 ubyte default_mousestick_settings[MAX_CONTROLS] =
490 {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};
492 kc_item kc_keyboard[NUM_KEY_CONTROLS] = {
493 { 0, 15, 49, 71, 26, 55, 2, 55, 1,"Pitch forward", BT_KEY, 255 },
494 { 1, 15, 49,100, 26, 50, 3, 0, 24,"Pitch forward", BT_KEY, 255 },
495 { 2, 15, 57, 71, 26, 0, 4, 25, 3,"Pitch backward", BT_KEY, 255 },
496 { 3, 15, 57,100, 26, 1, 5, 2, 26,"Pitch backward", BT_KEY, 255 },
497 { 4, 15, 65, 71, 26, 2, 6, 27, 5,"Turn left", BT_KEY, 255 },
498 { 5, 15, 65,100, 26, 3, 7, 4, 28,"Turn left", BT_KEY, 255 },
499 { 6, 15, 73, 71, 26, 4, 8, 29, 7,"Turn right", BT_KEY, 255 },
500 { 7, 15, 73,100, 26, 5, 9, 6, 34,"Turn right", BT_KEY, 255 },
501 { 8, 15, 85, 71, 26, 6, 10, 35, 9,"Slide on", BT_KEY, 255 },
502 { 9, 15, 85,100, 26, 7, 11, 8, 36,"Slide on", BT_KEY, 255 },
503 { 10, 15, 93, 71, 26, 8, 12, 37, 11,"Slide left", BT_KEY, 255 },
504 { 11, 15, 93,100, 26, 9, 13, 10, 44,"Slide left", BT_KEY, 255 },
505 { 12, 15,101, 71, 26, 10, 14, 45, 13,"Slide right", BT_KEY, 255 },
506 { 13, 15,101,100, 26, 11, 15, 12, 30,"Slide right", BT_KEY, 255 },
507 { 14, 15,109, 71, 26, 12, 16, 31, 15,"Slide up", BT_KEY, 255 },
508 { 15, 15,109,100, 26, 13, 17, 14, 32,"Slide up", BT_KEY, 255 },
509 { 16, 15,117, 71, 26, 14, 18, 33, 17,"Slide down", BT_KEY, 255 },
510 { 17, 15,117,100, 26, 15, 19, 16, 46,"Slide down", BT_KEY, 255 },
511 { 18, 15,129, 71, 26, 16, 20, 47, 19,"Bank on", BT_KEY, 255 },
512 { 19, 15,129,100, 26, 17, 21, 18, 38,"Bank on", BT_KEY, 255 },
513 { 20, 15,137, 71, 26, 18, 22, 39, 21,"Bank left", BT_KEY, 255 },
514 { 21, 15,137,100, 26, 19, 23, 20, 40,"Bank left", BT_KEY, 255 },
515 { 22, 15,145, 71, 26, 20, 48, 41, 23,"Bank right", BT_KEY, 255 },
516 { 23, 15,145,100, 26, 21, 49, 22, 42,"Bank right", BT_KEY, 255 },
517 { 24,158, 49, 83, 26, 51, 26, 1, 25,"Fire primary", BT_KEY, 255 },
518 { 25,158, 49,112, 26, 54, 27, 24, 2,"Fire primary", BT_KEY, 255 },
519 { 26,158, 57, 83, 26, 24, 28, 3, 27,"Fire secondary", BT_KEY, 255 },
520 { 27,158, 57,112, 26, 25, 29, 26, 4,"Fire secondary", BT_KEY, 255 },
521 { 28,158, 65, 83, 26, 26, 34, 5, 29,"Fire flare", BT_KEY, 255 },
522 { 29,158, 65,112, 26, 27, 35, 28, 6,"Fire flare", BT_KEY, 255 },
523 { 30,158,105, 83, 26, 44, 32, 13, 31,"Accelerate", BT_KEY, 255 },
524 { 31,158,105,112, 26, 45, 33, 30, 14,"Accelerate", BT_KEY, 255 },
525 { 32,158,113, 83, 26, 30, 46, 15, 33,"reverse", BT_KEY, 255 },
526 { 33,158,113,112, 26, 31, 47, 32, 16,"reverse", BT_KEY, 255 },
527 { 34,158, 73, 83, 26, 28, 36, 7, 35,"Drop Bomb", BT_KEY, 255 },
528 { 35,158, 73,112, 26, 29, 37, 34, 8,"Drop Bomb", BT_KEY, 255 },
529 { 36,158, 85, 83, 26, 34, 44, 9, 37,"REAR VIEW", BT_KEY, 255 },
530 { 37,158, 85,112, 26, 35, 45, 36, 10,"REAR VIEW", BT_KEY, 255 },
531 { 38,158,133, 83, 26, 46, 40, 19, 39,"Cruise Faster", BT_KEY, 255 },
532 { 39,158,133,112, 26, 47, 41, 38, 20,"Cruise Faster", BT_KEY, 255 },
533 { 40,158,141, 83, 26, 38, 42, 21, 41,"Cruise Slower", BT_KEY, 255 },
534 { 41,158,141,112, 26, 39, 43, 40, 22,"Cruise Slower", BT_KEY, 255 },
535 { 42,158,149, 83, 26, 40, 52, 23, 43,"Cruise Off", BT_KEY, 255 },
536 { 43,158,149,112, 26, 41, 53, 42, 48,"Cruise Off", BT_KEY, 255 },
537 { 44,158, 93, 83, 26, 36, 30, 11, 45,"Automap", BT_KEY, 255 },
538 { 45,158, 93,112, 26, 37, 31, 44, 12,"Automap", BT_KEY, 255 },
539 { 46,158,121, 83, 26, 32, 38, 17, 47,"Afterburner", BT_KEY, 255 },
540 { 47,158,121,112, 26, 33, 39, 46, 18,"Afterburner", BT_KEY, 255 },
541 { 48, 15,161, 71, 26, 22, 50, 43, 49,"Cycle Primary", BT_KEY, 255 },
542 { 49, 15,161,100, 26, 23, 51, 48, 52,"Cycle Primary", BT_KEY, 255 },
543 { 50, 15,169, 71, 26, 48, 1, 53, 51,"Cycle Second", BT_KEY, 255 },
544 { 51, 15,169,100, 26, 49, 24, 50, 54,"Cycle Second", BT_KEY, 255 },
545 { 52,158,163, 83, 26, 42, 54, 49, 53,"Headlight", BT_KEY, 255 },
546 { 53,158,163,112, 26, 43, 55, 52, 50,"Headlight", BT_KEY, 255 },
547 { 54,158,171, 83, 26, 52, 25, 51, 55,"Energy->Shield", BT_KEY, 255 },
548 { 55,158,171,112, 26, 53, 0, 54, 0,"Energy->Shield", BT_KEY, 255 },
550 kc_item kc_joystick[NUM_OTHER_CONTROLS] = {
551 { 0, 25, 46, 85, 28, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
552 { 1, 25, 54, 85, 28, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
553 { 2, 25, 85, 85, 28, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
554 { 3, 25, 93, 85, 28, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
555 { 4, 25, 62, 85, 28, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
556 { 5,180, 46, 79, 28, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
557 { 6,180, 54, 79, 28, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
558 { 7,180, 62, 79, 28, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
559 { 8,180, 70, 79, 28, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
560 { 9,180, 78, 79, 28, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
561 { 10,180, 90, 79, 28, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
562 { 11,180, 98, 79, 28, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
563 { 12,180,106, 79, 28, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
564 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
565 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
566 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
567 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
568 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
569 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
570 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
571 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
572 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
573 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
574 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
575 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
576 { 25, 25,109, 85, 28, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
577 { 26, 25, 70, 85, 28, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
578 { 27, 25,117, 85, 28, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
579 { 28,180,114, 79, 28, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
580 { 29,180,122, 79, 28, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
581 { 30, 25,125, 85, 28, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
583 kc_item kc_superjoy[NUM_OTHER_CONTROLS] = {
584 { 0, 25, 46, 85, 26, 15, 1, 24, 5,"Fire primary", BT_JOY_BUTTON, 255 },
585 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_JOY_BUTTON, 255 },
586 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_JOY_BUTTON, 255 },
587 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_JOY_BUTTON, 255 },
588 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_JOY_BUTTON, 255 },
589 { 5,180, 46, 79, 26, 23, 6, 0, 1,"Slide on", BT_JOY_BUTTON, 255 },
590 { 6,180, 54, 79, 26, 5, 7, 1, 4,"Slide left", BT_JOY_BUTTON, 255 },
591 { 7,180, 62, 79, 26, 6, 8, 4, 26,"Slide right", BT_JOY_BUTTON, 255 },
592 { 8,180, 70, 79, 26, 7, 9, 26, 9,"Slide up", BT_JOY_BUTTON, 255 },
593 { 9,180, 78, 79, 26, 8, 10, 8, 2,"Slide down", BT_JOY_BUTTON, 255 },
594 { 10,180, 90, 79, 26, 9, 11, 2, 3,"Bank on", BT_JOY_BUTTON, 255 },
595 { 11,180, 98, 79, 26, 10, 12, 3, 12,"Bank left", BT_JOY_BUTTON, 255 },
596 { 12,180,106, 79, 26, 11, 28, 11, 25,"Bank right", BT_JOY_BUTTON, 255 },
597 { 13, 22,154, 51, 26, 24, 15, 30, 14,"Pitch U/D", BT_JOY_AXIS, 255 },
598 { 14, 22,154, 99, 8, 30, 16, 13, 17,"Pitch U/D", BT_INVERT, 255 },
599 { 15, 22,162, 51, 26, 13, 0, 18, 16,"Turn L/R", BT_JOY_AXIS, 255 },
600 { 16, 22,162, 99, 8, 14, 17, 15, 19,"Turn L/R", BT_INVERT, 255 },
601 { 17,164,154, 58, 26, 16, 19, 14, 18,"Slide L/R", BT_JOY_AXIS, 255 },
602 { 18,164,154,106, 8, 29, 20, 17, 15,"Slide L/R", BT_INVERT, 255 },
603 { 19,164,162, 58, 26, 17, 21, 16, 20,"Slide U/D", BT_JOY_AXIS, 255 },
604 { 20,164,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
605 { 21,164,172, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_JOY_AXIS, 255 },
606 { 22,164,172,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
607 { 23,164,180, 58, 26, 21, 5, 22, 24,"throttle", BT_JOY_AXIS, 255 },
608 { 24,164,180,106, 8, 22, 13, 23, 0,"throttle", BT_INVERT, 255 },
609 { 25, 25,109, 85, 26, 3, 27, 12, 28,"REAR VIEW", BT_JOY_BUTTON, 255 },
610 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_JOY_BUTTON, 255 },
611 { 27, 25,117, 85, 26, 25, 30, 28, 29,"Afterburner", BT_JOY_BUTTON, 255 },
612 { 28,180,114, 79, 26, 12, 29, 25, 27,"Cycle Primary", BT_JOY_BUTTON, 255 },
613 { 29,180,122, 79, 26, 28, 18, 27, 30,"Cycle Secondary", BT_JOY_BUTTON, 255 },
614 { 30, 25,125, 85, 26, 27, 14, 29, 13,"Headlight", BT_JOY_BUTTON, 255 },
617 kc_item kc_mouse[NUM_OTHER_CONTROLS] = {
618 { 0, 25, 46, 85, 26, 28, 1, 28, 5,"Fire primary", BT_MOUSE_BUTTON, 255 },
619 { 1, 25, 54, 85, 26, 0, 4, 5, 6,"Fire secondary", BT_MOUSE_BUTTON, 255 },
620 { 2, 25, 85, 85, 26, 26, 3, 9, 10,"Accelerate", BT_MOUSE_BUTTON, 255 },
621 { 3, 25, 93, 85, 26, 2, 25, 10, 11,"reverse", BT_MOUSE_BUTTON, 255 },
622 { 4, 25, 62, 85, 26, 1, 26, 6, 7,"Fire flare", BT_MOUSE_BUTTON, 255 },
623 { 5,180, 46, 59, 26, 24, 6, 0, 1,"Slide on", BT_MOUSE_BUTTON, 255 },
624 { 6,180, 54, 59, 26, 5, 7, 1, 4,"Slide left", BT_MOUSE_BUTTON, 255 },
625 { 7,180, 62, 59, 26, 6, 8, 4, 26,"Slide right", BT_MOUSE_BUTTON, 255 },
626 { 8,180, 70, 59, 26, 7, 9, 26, 9,"Slide up", BT_MOUSE_BUTTON, 255 },
627 { 9,180, 78, 59, 26, 8, 10, 8, 2,"Slide down", BT_MOUSE_BUTTON, 255 },
628 { 10,180, 90, 59, 26, 9, 11, 2, 3,"Bank on", BT_MOUSE_BUTTON, 255 },
629 { 11,180, 98, 59, 26, 10, 12, 3, 12,"Bank left", BT_MOUSE_BUTTON, 255 },
630 { 12,180,106, 59, 26, 11, 28, 11, 25,"Bank right", BT_MOUSE_BUTTON, 255 },
631 { 13,103,138, 58, 26, 27, 15, 27, 14,"Pitch U/D", BT_MOUSE_AXIS, 255 },
632 { 14,103,138,106, 8, 23, 16, 13, 15,"Pitch U/D", BT_INVERT, 255 },
633 { 15,103,146, 58, 26, 13, 17, 14, 16,"Turn L/R", BT_MOUSE_AXIS, 255 },
634 { 16,103,146,106, 8, 14, 18, 15, 17,"Turn L/R", BT_INVERT, 255 },
635 { 17,103,154, 58, 26, 15, 19, 16, 18,"Slide L/R", BT_MOUSE_AXIS, 255 },
636 { 18,103,154,106, 8, 16, 20, 17, 19,"Slide L/R", BT_INVERT, 255 },
637 { 19,103,162, 58, 26, 17, 21, 18, 20,"Slide U/D", BT_MOUSE_AXIS, 255 },
638 { 20,103,162,106, 8, 18, 22, 19, 21,"Slide U/D", BT_INVERT, 255 },
639 { 21,103,170, 58, 26, 19, 23, 20, 22,"Bank L/R", BT_MOUSE_AXIS, 255 },
640 { 22,103,170,106, 8, 20, 24, 21, 23,"Bank L/R", BT_INVERT, 255 },
641 { 23,103,182, 58, 26, 21, 14, 22, 24,"throttle", BT_MOUSE_AXIS, 255 },
642 { 24,103,182,106, 8, 22, 5, 23, 28,"throttle", BT_INVERT, 255 },
643 { 25, 25,109, 85, 26, 3, 27, 12, 27,"REAR VIEW", BT_MOUSE_BUTTON, 255 },
644 { 26, 25, 70, 85, 26, 4, 2, 7, 8,"Drop Bomb", BT_MOUSE_BUTTON, 255 },
645 { 27, 25,117, 85, 26, 25, 13, 25, 13,"Afterburner", BT_MOUSE_BUTTON, 255 },
650 //added on 2/4/99 by Victor Rachels to add new keys system
651 ubyte default_kconfig_d2x_settings[MAX_D2X_CONTROLS] = {
652 0x2 ,0xff,0x3 ,0xff,0x4 ,0xff,0x5 ,0xff,0x6 ,0xff,0x7 ,0xff,0x8 ,0xff,0x9 ,
653 0xff,0xa ,0xff,0xb ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
654 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff };
655 //end this section addition - VR
657 void kc_drawitem( kc_item *item, int is_current );
658 void kc_change_key( kc_item * item );
659 void kc_change_joybutton( kc_item * item );
660 void kc_change_mousebutton( kc_item * item );
661 void kc_next_joyaxis(kc_item *item); //added by WraithX on 11/22/00
662 void kc_change_joyaxis( kc_item * item );
663 void kc_change_mouseaxis( kc_item * item );
664 void kc_change_invert( kc_item * item );
665 void kconfig_read_fcs( int raw_axis );
666 void kconfig_set_fcs_button( int btn, int button );
667 void kconfig_read_external_controls( void );
669 // the following methods added by WraithX, 4/17/00
670 int isJoyRotationKey(int test_key)
672 if (test_key == kc_joystick[11].value ||
673 test_key == kc_joystick[12].value)
680 }// method isJoyRotationKey
682 int isMouseRotationKey(int test_key)
684 if (test_key == kc_mouse[11].value ||
685 test_key == kc_mouse[12].value)
692 }// method isMouseRotationKey
694 int isKeyboardRotationKey(int test_key)
696 if (test_key == kc_keyboard[0].value ||
697 test_key == kc_keyboard[1].value ||
698 test_key == kc_keyboard[2].value ||
699 test_key == kc_keyboard[3].value ||
700 test_key == kc_keyboard[4].value ||
701 test_key == kc_keyboard[5].value ||
702 test_key == kc_keyboard[6].value ||
703 test_key == kc_keyboard[7].value ||
704 test_key == kc_keyboard[20].value ||
705 test_key == kc_keyboard[21].value ||
706 test_key == kc_keyboard[22].value ||
707 test_key == kc_keyboard[23].value)
714 }// method isKeyboardRotationKey
715 // end addition - WraithX
717 int kconfig_is_axes_used(int axis)
720 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
721 if (( kc_joystick[i].type == BT_JOY_AXIS ) && (kc_joystick[i].value == axis ))
727 #ifdef TABLE_CREATION
728 int find_item_at( kc_item * items, int nitems, int x, int y )
732 for (i=0; i<nitems; i++ ) {
733 if ( ((items[i].x+items[i].w1)==x) && (items[i].y==y))
739 int find_next_item_up( kc_item * items, int nitems, int citem )
744 x = items[citem].x+items[citem].w1;
749 y = grd_curcanv->cv_bitmap.bm_h-1;
752 x = grd_curcanv->cv_bitmap.bm_w-1;
755 i = find_item_at( items, nitems, x, y );
761 int find_next_item_down( kc_item * items, int nitems, int citem )
766 x = items[citem].x+items[citem].w1;
770 if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) {
773 if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) {
777 i = find_item_at( items, nitems, x, y );
783 int find_next_item_right( kc_item * items, int nitems, int citem )
788 x = items[citem].x+items[citem].w1;
792 if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) {
795 if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) {
799 i = find_item_at( items, nitems, x, y );
805 int find_next_item_left( kc_item * items, int nitems, int citem )
810 x = items[citem].x+items[citem].w1;
815 x = grd_curcanv->cv_bitmap.bm_w-1;
818 y = grd_curcanv->cv_bitmap.bm_h-1;
821 i = find_item_at( items, nitems, x, y );
829 int get_item_height(kc_item *item)
834 if (item->value==255) {
837 switch( item->type ) {
839 strncpy( btext, key_text[item->value], 10 ); break;
840 case BT_MOUSE_BUTTON:
842 strncpy( btext, Text_string[mousebutton_text[item->value]], 10); break;
844 strncpy( btext, mousebutton_text[item->value], 10 ); break;
847 strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break;
850 sprintf(btext, "J%d B%d", j_button[item->value].joydev, j_Get_joydev_button_number(item->value));
851 #elif defined(SDL_INPUT)
852 if (joybutton_text[item->value])
853 strncpy(btext, joybutton_text[item->value], 10);
855 sprintf(btext, "BTN%2d", item->value + 1);
857 if ( joybutton_text[item->value] !=-1 )
858 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
860 sprintf( btext, "BTN%d", item->value );
865 sprintf( btext, "J%d A%d", j_axis[item->value].joydev, j_Get_joydev_axis_number (item->value) );
866 #elif defined(SDL_INPUT)
867 if (joyaxis_text[item->value])
868 strncpy(btext, joyaxis_text[item->value], 10);
870 sprintf(btext, "AXIS%2d", item->value + 1);
872 strncpy(btext, Text_string[joyaxis_text[item->value]], 10);
876 strncpy( btext, Text_string[invert_text[item->value]], 10 ); break;
879 gr_get_string_size(btext, &w, &h, &aw );
885 void kconfig_sub(kc_item * items,int nitems, char * title)
887 grs_canvas * save_canvas;
888 grs_font * save_font;
891 int mouse_state, omouse_state, mx, my, x1, x2, y1, y2;
892 int close_x, close_y, close_size;
895 int i,k,ocitem,citem;
896 int time_stopped = 0;
901 if (!((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence)) )
907 // if (Config_control_type == CONTROL_WINJOYSTICK) {
909 // joydefsw_win_joyselect(title2); title = title2,
911 // ); // Get Samir...
914 save_canvas = grd_curcanv;
917 gr_set_current_canvas(NULL);
918 save_font = grd_curcanv->cv_font;
924 old_keyd_repeat = keyd_repeat;
927 //gr_clear_canvas( BM_XRGB(0,0,0) );
929 nm_draw_background(0, 0, grd_curcanv->cv_bitmap.bm_w - 1, grd_curcanv->cv_bitmap.bm_h - 1);
930 gr_palette_load (gr_palette);
932 grd_curcanv->cv_font = MEDIUM3_FONT;
936 p = strchr( title, '\n' );
938 gr_string( 0x8000, LHY(8), title );
943 // if ( items == kc_keyboard ) {
944 // gr_string( 0x8000, 8, "Keyboard" );
945 // } else if ( items == kc_joystick ) {
946 // gr_string( 0x8000, 8, "Joysticks" );
947 // } else if ( items == kc_mouse ) {
948 // gr_string( 0x8000, 8, "Mouse" );
952 close_x = close_y = MenuHires?15:7;
953 close_size = MenuHires?10:5;
954 gr_setcolor( BM_XRGB(0, 0, 0) );
955 gr_rect(close_x, close_y, close_x + close_size, close_y + close_size);
956 gr_setcolor( BM_XRGB(21, 21, 21) );
957 gr_rect(close_x + LHX(1), close_y + LHX(1), close_x + close_size - LHX(1), close_y + close_size - LHX(1));
960 grd_curcanv->cv_font = GAME_FONT;
961 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
964 gr_string( 0x8000, LHY(20), TXT_KCONFIG_STRING_1 );
966 gr_string( 0x8000, LHY(20), "Enter changes, ctrl-d deletes, ctrl-r resets defaults, ESC exits");
968 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
969 if ( items == kc_keyboard ) {
970 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
971 gr_setcolor( BM_XRGB(31,27,6) );
973 gr_scanline( LHX(98), LHX(106), LHY(42) );
974 gr_scanline( LHX(120), LHX(128), LHY(42) );
975 gr_pixel( LHX(98), LHY(43) );
976 gr_pixel( LHX(98), LHY(44) );
977 gr_pixel( LHX(128), LHY(43) );
978 gr_pixel( LHX(128), LHY(44) );
980 gr_string( LHX(109), LHY(40), "OR" );
982 gr_scanline( LHX(253), LHX(261), LHY(42) );
983 gr_scanline( LHX(274), LHX(283), LHY(42) );
984 gr_pixel( LHX(253), LHY(43) );
985 gr_pixel( LHX(253), LHY(44) );
986 gr_pixel( LHX(283), LHY(43) );
987 gr_pixel( LHX(283), LHY(44) );
989 gr_string( LHX(264), LHY(40), "OR" );
991 } if ( items == kc_joystick ) {
992 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
993 gr_setcolor( BM_XRGB(31,27,6) );
994 gr_scanline( LHX(18), LHX(135), LHY(37) );
995 gr_scanline( LHX(181), LHX(294), LHY(37) );
996 gr_scanline( LHX(18), LHX(144), LHY(119+18) );
997 gr_scanline( LHX(174), LHX(294), LHY(119+18) );
998 gr_string( 0x8000, LHY(35), TXT_BUTTONS );
999 gr_string( 0x8000,LHY(117+18), TXT_AXES );
1000 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1001 gr_string( LHX(81), LHY(137+8), TXT_AXIS );
1002 gr_string( LHX(111), LHY(137+8), TXT_INVERT );
1003 gr_string( LHX(230), LHY(137+8), TXT_AXIS );
1004 gr_string( LHX(260), LHY(137+8), TXT_INVERT );
1005 } else if ( items == kc_mouse ) {
1006 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1007 gr_setcolor( BM_XRGB(31,27,6) );
1008 gr_scanline( LHX(18), LHX(135), LHY(37) );
1009 gr_scanline( LHX(181), LHX(294), LHY(37) );
1010 gr_scanline( LHX(18), LHX(144), LHY(119+5) );
1011 gr_scanline( LHX(174), LHX(294), LHY(119+5) );
1012 gr_string( 0x8000, LHY(35), TXT_BUTTONS );
1013 gr_string( 0x8000,LHY(117+5), TXT_AXES );
1014 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1015 gr_string( LHX(169), LHY(129), TXT_AXIS );
1016 gr_string( LHX(199), LHY(129), TXT_INVERT );
1019 else if ( items == kc_d2x )
1021 gr_set_fontcolor( BM_XRGB(31,27,6), -1 );
1022 gr_setcolor( BM_XRGB(31,27,6) );
1024 gr_string(LHX( 94), LHY(40), "KB");
1025 gr_string(LHX(121), LHY(40), "JOY");
1029 for (i=0; i<nitems; i++ ) {
1030 kc_drawitem( &items[i], 0 );
1034 kc_drawitem( &items[citem], 1 );
1036 newmenu_show_cursor();
1038 #ifdef NEWMENU_MOUSE
1039 mouse_state = omouse_state = 0;
1043 // Windows addendum to allow for kconfig input.
1046 //see if redbook song needs to be restarted
1047 songs_check_redbook_repeat();
1051 #ifdef NEWMENU_MOUSE
1052 omouse_state = mouse_state;
1053 mouse_state = mouse_button_state(0);
1056 if ( !time_stopped ) {
1058 if (multi_menu_poll() == -1)
1067 MAC(case KEY_COMMAND+KEY_SHIFTED+KEY_3:)
1068 case KEY_PRINT_SCREEN:
1069 save_screen_shot(0);
1071 case KEY_CTRLED+KEY_D:
1072 items[citem].value = 255;
1073 kc_drawitem( &items[citem], 1 );
1075 case KEY_CTRLED+KEY_R:
1076 if ( items==kc_keyboard ) {
1077 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1078 items[i].value=default_kconfig_settings[0][i];
1079 kc_drawitem( &items[i], 0 );
1082 } else if ( items==kc_d2x ) {
1083 for(i=0;i<NUM_D2X_CONTROLS;i++)
1085 items[i].value=default_kconfig_d2x_settings[i];
1086 kc_drawitem( &items[i], 0 );
1091 // hack for firebire and mousestick default controls since I made
1092 // them the same control type -- dumb dumb dumb
1093 if (joy_have_firebird())
1094 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1095 items[i].value = default_firebird_settings[i];
1096 kc_drawitem( &items[i], 0 );
1098 else if (joy_have_mousestick())
1099 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1100 items[i].value = default_mousestick_settings[i];
1101 kc_drawitem( &items[i], 0 );
1104 #endif // note link to above else
1105 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1106 items[i].value = default_kconfig_settings[Config_control_type][i];
1107 kc_drawitem( &items[i], 0 );
1110 kc_drawitem( &items[citem], 1 );
1113 items[citem].value=255;
1114 kc_drawitem( &items[citem], 1 );
1118 #ifdef TABLE_CREATION
1119 if (items[citem].u==-1) items[citem].u=find_next_item_up( items,nitems, citem);
1121 citem = items[citem].u;
1126 #ifdef TABLE_CREATION
1127 if (items[citem].d==-1) items[citem].d=find_next_item_down( items,nitems, citem);
1129 citem = items[citem].d;
1133 #ifdef TABLE_CREATION
1134 if (items[citem].l==-1) items[citem].l=find_next_item_left( items,nitems, citem);
1136 citem = items[citem].l;
1140 #ifdef TABLE_CREATION
1141 if (items[citem].r==-1) items[citem].r=find_next_item_right( items,nitems, citem);
1143 citem = items[citem].r;
1147 switch( items[citem].type ) {
1148 case BT_KEY: kc_change_key( &items[citem] ); break;
1149 case BT_MOUSE_BUTTON: kc_change_mousebutton( &items[citem] ); break;
1150 case BT_MOUSE_AXIS: kc_change_mouseaxis( &items[citem] ); break;
1151 case BT_JOY_BUTTON: kc_change_joybutton( &items[citem] ); break;
1152 case BT_JOY_AXIS: kc_change_joyaxis( &items[citem] ); break;
1153 case BT_INVERT: kc_change_invert( &items[citem] ); break;
1156 //the following case added by WraithX on 11/22/00 to work around the weird joystick bug...
1158 switch(items[citem].type)
1161 kc_next_joyaxis(&items[citem]);
1165 //end addition by WraithX
1168 grd_curcanv->cv_font = save_font;
1170 gr_set_current_canvas( save_canvas );
1171 keyd_repeat = old_keyd_repeat;
1172 game_flush_inputs();
1173 newmenu_hide_cursor();
1177 #ifdef TABLE_CREATION
1178 case KEY_DEBUGGED+KEY_F12: {
1180 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1181 kc_keyboard[i].u = find_next_item_up( kc_keyboard,NUM_KEY_CONTROLS, i);
1182 kc_keyboard[i].d = find_next_item_down( kc_keyboard,NUM_KEY_CONTROLS, i);
1183 kc_keyboard[i].l = find_next_item_left( kc_keyboard,NUM_KEY_CONTROLS, i);
1184 kc_keyboard[i].r = find_next_item_right( kc_keyboard,NUM_KEY_CONTROLS, i);
1186 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1187 kc_joystick[i].u = find_next_item_up( kc_joystick,NUM_OTHER_CONTROLS, i);
1188 kc_joystick[i].d = find_next_item_down( kc_joystick,NUM_OTHER_CONTROLS, i);
1189 kc_joystick[i].l = find_next_item_left( kc_joystick,NUM_OTHER_CONTROLS, i);
1190 kc_joystick[i].r = find_next_item_right( kc_joystick,NUM_OTHER_CONTROLS, i);
1192 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1193 kc_mouse[i].u = find_next_item_up( kc_mouse,NUM_OTHER_CONTROLS, i);
1194 kc_mouse[i].d = find_next_item_down( kc_mouse,NUM_OTHER_CONTROLS, i);
1195 kc_mouse[i].l = find_next_item_left( kc_mouse,NUM_OTHER_CONTROLS, i);
1196 kc_mouse[i].r = find_next_item_right( kc_mouse,NUM_OTHER_CONTROLS, i);
1198 fp = fopen( "kconfig.cod", "wt" );
1200 fprintf( fp, "ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = {\n" );
1201 for (i=0; i<CONTROL_MAX_TYPES; i++ ) {
1203 fprintf( fp, "{0x%x", kconfig_settings[i][0] );
1204 for (j=1; j<MAX_CONTROLS; j++ )
1205 fprintf( fp, ",0x%x", kconfig_settings[i][j] );
1206 fprintf( fp, "},\n" );
1208 fprintf( fp, "};\n" );
1210 fprintf( fp, "\nkc_item kc_keyboard[NUM_KEY_CONTROLS] = {\n" );
1211 for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
1212 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1213 kc_keyboard[i].id, kc_keyboard[i].x, kc_keyboard[i].y, kc_keyboard[i].w1, kc_keyboard[i].w2,
1214 kc_keyboard[i].u, kc_keyboard[i].d, kc_keyboard[i].l, kc_keyboard[i].r,
1215 34, kc_keyboard[i].text, 34, btype_text[kc_keyboard[i].type] );
1217 fprintf( fp, "};" );
1219 fprintf( fp, "\nkc_item kc_joystick[NUM_OTHER_CONTROLS] = {\n" );
1220 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1221 if (kc_joystick[i].type == BT_JOY_BUTTON)
1222 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1223 kc_joystick[i].id, kc_joystick[i].x, kc_joystick[i].y, kc_joystick[i].w1, kc_joystick[i].w2,
1224 kc_joystick[i].u, kc_joystick[i].d, kc_joystick[i].l, kc_joystick[i].r,
1225 34, kc_joystick[i].text, 34, btype_text[kc_joystick[i].type] );
1227 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1228 kc_joystick[i].id, kc_joystick[i].x, kc_joystick[i].y, kc_joystick[i].w1, kc_joystick[i].w2,
1229 kc_joystick[i].u, kc_joystick[i].d, kc_joystick[i].l, kc_joystick[i].r,
1230 34, kc_joystick[i].text, 34, btype_text[kc_joystick[i].type] );
1232 fprintf( fp, "};" );
1234 fprintf( fp, "\nkc_item kc_mouse[NUM_OTHER_CONTROLS] = {\n" );
1235 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
1236 fprintf( fp, "\t{ %2d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%3d,%c%s%c, %s, 255 },\n",
1237 kc_mouse[i].id, kc_mouse[i].x, kc_mouse[i].y, kc_mouse[i].w1, kc_mouse[i].w2,
1238 kc_mouse[i].u, kc_mouse[i].d, kc_mouse[i].l, kc_mouse[i].r,
1239 34, kc_mouse[i].text, 34, btype_text[kc_mouse[i].type] );
1241 fprintf( fp, "};" );
1250 #ifdef NEWMENU_MOUSE
1251 if ( (mouse_state && !omouse_state) || (mouse_state && omouse_state) ) {
1254 mouse_get_pos(&mx, &my);
1255 for (i=0; i<nitems; i++ ) {
1256 item_height = get_item_height( &items[i] );
1257 x1 = grd_curcanv->cv_bitmap.bm_x + LHX(items[i].x) + LHX(items[i].w1);
1258 x2 = x1 + LHX(items[i].w2);
1259 y1 = grd_curcanv->cv_bitmap.bm_y + LHY(items[i].y);
1260 y2 = y1 + LHX(item_height);
1261 if (((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2))) {
1267 else if ( !mouse_state && omouse_state ) {
1270 mouse_get_pos(&mx, &my);
1271 item_height = get_item_height( &items[citem] );
1272 x1 = grd_curcanv->cv_bitmap.bm_x + LHX(items[citem].x) + LHX(items[citem].w1);
1273 x2 = x1 + LHX(items[citem].w2);
1274 y1 = grd_curcanv->cv_bitmap.bm_y + LHY(items[citem].y);
1275 y2 = y1 + LHY(item_height);
1276 if (((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2))) {
1277 newmenu_hide_cursor();
1278 switch( items[citem].type ) {
1279 case BT_KEY: kc_change_key( &items[citem] ); break;
1280 case BT_MOUSE_BUTTON: kc_change_mousebutton( &items[citem] ); break;
1281 case BT_MOUSE_AXIS: kc_change_mouseaxis( &items[citem] ); break;
1282 case BT_JOY_BUTTON: kc_change_joybutton( &items[citem] ); break;
1283 case BT_JOY_AXIS: kc_change_joyaxis( &items[citem] ); break;
1284 case BT_INVERT: kc_change_invert( &items[citem] ); break;
1286 newmenu_show_cursor();
1288 x1 = grd_curcanv->cv_bitmap.bm_x + close_x + LHX(1);
1289 x2 = x1 + close_size - LHX(1);
1290 y1 = grd_curcanv->cv_bitmap.bm_y + close_y + LHX(1);
1291 y2 = y1 + close_size - LHX(1);
1292 if ( ((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2)) ) {
1293 grd_curcanv->cv_font = save_font;
1294 gr_set_current_canvas( save_canvas );
1295 keyd_repeat = old_keyd_repeat;
1296 game_flush_inputs();
1297 newmenu_hide_cursor();
1305 #endif // NEWMENU_MOUSE
1307 if (ocitem!=citem) {
1308 newmenu_hide_cursor();
1309 kc_drawitem( &items[ocitem], 0 );
1310 kc_drawitem( &items[citem], 1 );
1311 newmenu_show_cursor();
1317 void kc_drawitem( kc_item *item, int is_current )
1323 gr_set_fontcolor( BM_XRGB(20,20,29), -1 );
1325 gr_set_fontcolor( BM_XRGB(15,15,24), -1 );
1326 gr_string( LHX(item->x), LHY(item->y), item->text );
1328 if (item->value==255) {
1329 strcpy( btext, "" );
1331 switch( item->type ) {
1333 strncpy( btext, key_text[item->value], 10 ); break;
1334 case BT_MOUSE_BUTTON:
1336 //strncpy( btext, Text_string[mousebutton_text[item->value]], 10 ); break;
1337 strncpy( btext, (item->value <= 3)?Text_string[mousebutton_text[item->value]]:mousebutton_textra[item->value-3], 10 ); break;
1339 strncpy( btext, mousebutton_text[item->value], 10 ); break;
1342 strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break;
1344 #ifdef USE_LINUX_JOY
1345 sprintf(btext, "J%d B%d", j_button[item->value].joydev, j_Get_joydev_button_number(item->value));
1346 #elif defined(SDL_INPUT)
1347 if (joybutton_text[item->value])
1348 strncpy(btext, joybutton_text[item->value], 10);
1350 sprintf(btext, "BTN%2d", item->value + 1);
1354 if (joybutton_text[item->value] != -1)
1355 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1357 sprintf( btext, "BTN%2d", item->value+1 );
1359 if ( joybutton_text[item->value] !=-1 )
1360 strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 );
1362 sprintf( btext, "BTN%d", item->value );
1365 strncpy( btext, joy_btn_name( item->value ), 10);
1367 sprintf( btext, "BTN%d", item->value );
1372 #ifdef USE_LINUX_JOY
1373 sprintf(btext, "J%d A%d", j_axis[item->value].joydev, j_Get_joydev_axis_number(item->value));
1374 #elif defined(SDL_INPUT)
1375 if (joyaxis_text[item->value])
1376 strncpy(btext, joyaxis_text[item->value], 10);
1378 sprintf(btext, "AXIS%2d", item->value + 1);
1380 strncpy(btext, Text_string[joyaxis_text[item->value]], 10);
1384 strncpy( btext, Text_string[invert_text[item->value]], 10 ); break;
1388 gr_get_string_size(btext, &w, &h, &aw );
1391 gr_setcolor( BM_XRGB(21,0,24) );
1393 gr_setcolor( BM_XRGB(16,0,19) );
1394 gr_urect( LHX(item->w1+item->x), LHY(item->y-1), LHX(item->w1+item->x+item->w2), LHY(item->y)+h );
1396 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1398 x = LHX(item->w1+item->x)+((LHX(item->w2)-w)/2);
1400 gr_string( x, LHY(item->y), btext );
1405 static int looper=0;
1407 void kc_drawquestion( kc_item *item )
1411 gr_get_string_size("?", &w, &h, &aw );
1413 c = BM_XRGB(21,0,24);
1415 //@@gr_setcolor( gr_fade_table[fades[looper]*256+c] );
1416 gr_setcolor(BM_XRGB(21*fades[looper]/31,0,24*fades[looper]/31));
1418 if (looper>63) looper=0;
1420 gr_urect( LHX(item->w1+item->x), LHY(item->y-1), LHX(item->w1+item->x+item->w2), LHY(item->y)+h );
1422 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1424 x = LHX(item->w1+item->x)+((LHX(item->w2)-w)/2);
1426 gr_string( x, LHY(item->y), "?" );
1430 void kc_change_key( kc_item * item )
1435 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1437 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_KEY );
1439 game_flush_inputs();
1443 while( (k!=KEY_ESC) && (keycode==255) )
1446 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1449 // if ( Game_mode & GM_MULTI )
1450 // GameLoop( 0, 0 ); // Continue
1452 timer_delay(f0_1/10);
1453 kc_drawquestion( item );
1455 for (i=0; i<256; i++ ) {
1456 if (keyd_pressed[i] && (strlen(key_text[i])>0)) {
1458 for (n=0; n<sizeof(system_keys); n++ )
1459 if ( system_keys[n] == i )
1468 for (i=0; i<Num_items; i++ ) {
1469 n = item - All_items;
1470 if ( (i!=n) && (All_items[i].type==BT_KEY) && (All_items[i].value==keycode) ) {
1471 All_items[i].value = 255;
1472 kc_drawitem( &All_items[i], 0 );
1475 item->value = keycode;
1477 kc_drawitem( item, 1 );
1479 gr_set_fontcolor( BM_XRGB(28,28,28), BM_XRGB(0,0,0) );
1481 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1483 game_flush_inputs();
1487 void kc_change_joybutton( kc_item * item )
1492 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1494 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_JBUTTON );
1496 game_flush_inputs();
1500 while( (k!=KEY_ESC) && (code==255))
1503 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1506 // if ( Game_mode & GM_MULTI )
1507 // GameLoop( 0, 0 ); // Continue
1509 timer_delay(f0_1/10);
1511 if (k == KEY_PRINT_SCREEN)
1512 save_screen_shot(0);
1514 kc_drawquestion( item );
1516 WIN(code = joydefsw_do_button());
1519 code = joy_do_buttons();
1522 #if !defined(WINDOWS) && !defined(MACINTOSH)
1523 if (Config_control_type==CONTROL_THRUSTMASTER_FCS) {
1525 joystick_read_raw_axis( JOY_ALL_AXIS, axis );
1526 kconfig_read_fcs( axis[3] );
1527 if ( joy_get_button_state(7) ) code = 7;
1528 if ( joy_get_button_state(11) ) code = 11;
1529 if ( joy_get_button_state(15) ) code = 15;
1530 if ( joy_get_button_state(19) ) code = 19;
1531 for (i=0; i<4; i++ ) {
1532 if ( joy_get_button_state(i) )
1535 } else if (Config_control_type==CONTROL_FLIGHTSTICK_PRO) {
1536 for (i=4; i<20; i++ ) {
1537 if ( joy_get_button_state(i) ) {
1539 mprintf(( 0, "JB: %d\n", code ));
1543 for (i = 0; i < JOY_MAX_BUTTONS; i++)
1545 if ( joy_get_button_state(i) )
1552 for (i=0; i<Num_items; i++ ) {
1553 n = item - All_items;
1554 if ( (i!=n) && (All_items[i].type==BT_JOY_BUTTON) && (All_items[i].value==code) ) {
1555 All_items[i].value = 255;
1556 kc_drawitem( &All_items[i], 0 );
1561 kc_drawitem( item, 1 );
1562 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1563 game_flush_inputs();
1566 void kc_change_mousebutton( kc_item * item )
1571 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1573 gr_string( 0x8000, LHY(INFO_Y), TXT_PRESS_NEW_MBUTTON );
1575 game_flush_inputs();
1579 while( (k!=KEY_ESC) && (code==255))
1582 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1585 // if ( Game_mode & GM_MULTI )
1586 // GameLoop( 0, 0 ); // Continue
1588 timer_delay(f0_1/10);
1590 if (k == KEY_PRINT_SCREEN)
1591 save_screen_shot(0);
1593 kc_drawquestion( item );
1595 b = mouse_get_btns();
1596 for (i = 0; i < 16; i++ ) {
1602 for (i=0; i<Num_items; i++ ) {
1603 n = item - All_items;
1604 if ( (i!=n) && (All_items[i].type==BT_MOUSE_BUTTON) && (All_items[i].value==code) ) {
1605 All_items[i].value = 255;
1606 kc_drawitem( &All_items[i], 0 );
1611 kc_drawitem( item, 1 );
1612 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1613 game_flush_inputs();
1618 // 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
1619 void kc_next_joyaxis(kc_item *item)
1621 int n, i, k, max, tries;
1628 // I modelled this ifdef after the code in the kc_change_joyaxis method.
1629 // So, if somethin's not workin here, it might not be workin there either.
1632 code = (item->value + 1) % max;
1636 for (i = 0; i < Num_items; i++)
1638 n = item - All_items;
1639 if ((i != n) && (All_items[i].type == BT_JOY_AXIS) && (All_items[i].value == code))
1642 return; // all axes allocated already
1643 i = -1; // -1 so the i++ will push back to 0
1644 code = (item->value + ++tries) % max; // try next axis
1651 kc_drawitem(item, 1);
1652 nm_restore_background(0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h);
1653 game_flush_inputs();
1655 }//method kc_next_joyaxis
1656 //end addition by WraithX
1659 void kc_change_joyaxis( kc_item * item )
1661 int axis[JOY_MAX_AXES];
1662 int old_axis[JOY_MAX_AXES];
1663 int numaxis = joy_num_axes;
1667 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1669 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_JOY_AXIS );
1671 game_flush_inputs();
1676 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, old_axis ),
1677 joystick_read_raw_axis( JOY_ALL_AXIS, old_axis )
1680 while( (k!=KEY_ESC) && (code==255))
1683 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1686 // if ( Game_mode & GM_MULTI )
1687 // GameLoop( 0, 0 ); // Continue
1689 timer_delay(f0_1/10);
1691 if (k == KEY_PRINT_SCREEN)
1692 save_screen_shot(0);
1694 kc_drawquestion( item );
1697 joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, axis ),
1698 joystick_read_raw_axis( JOY_ALL_AXIS, axis )
1701 for (i=0; i<numaxis; i++ ) {
1702 #if defined (MACINTOSH)
1703 if ( abs(axis[i]-old_axis[i])>100 ) {
1704 #elif defined(WINDOWS)
1705 if ( abs(axis[i]-old_axis[i])>1024 ) {
1707 if ( abs(axis[i]-old_axis[i])>200 ) {
1710 con_printf(CON_DEBUG, "Axis Movement detected: Axis %i\n", i);
1712 //old_axis[i] = axis[i];
1714 for (i=0; i<Num_items; i++ )
1716 n = item - All_items;
1717 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) )
1723 for (i=0; i<Num_items; i++ ) {
1724 n = item - All_items;
1725 if ( (i!=n) && (All_items[i].type==BT_JOY_AXIS) && (All_items[i].value==code) ) {
1726 All_items[i].value = 255;
1727 kc_drawitem( &All_items[i], 0 );
1733 kc_drawitem( item, 1 );
1734 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1735 game_flush_inputs();
1739 void kc_change_mouseaxis( kc_item * item )
1748 gr_set_fontcolor( BM_XRGB(28,28,28), -1 );
1750 gr_string( 0x8000, LHY(INFO_Y), TXT_MOVE_NEW_MSE_AXIS );
1752 game_flush_inputs();
1756 mouse_get_delta( &dx, &dy );
1758 while( (k!=KEY_ESC) && (code==255))
1761 if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence))
1764 // if ( Game_mode & GM_MULTI )
1765 // GameLoop( 0, 0 ); // Continue
1767 timer_delay(f0_1/10);
1769 if (k == KEY_PRINT_SCREEN)
1770 save_screen_shot(0);
1772 kc_drawquestion( item );
1775 mouse_get_delta_z( &dx, &dy, &dz );
1777 mouse_get_delta( &dx, &dy );
1779 if ( abs(dx)>20 ) code = 0;
1780 if ( abs(dy)>20 ) code = 1;
1782 if ( abs(dz)>20 ) code = 2;
1786 for (i=0; i<Num_items; i++ ) {
1787 n = item - All_items;
1788 if ( (i!=n) && (All_items[i].type==BT_MOUSE_AXIS) && (All_items[i].value==code) ) {
1789 All_items[i].value = 255;
1790 kc_drawitem( &All_items[i], 0 );
1795 kc_drawitem( item, 1 );
1796 nm_restore_background( 0, LHY(INFO_Y), LHX(310), grd_curcanv->cv_font->ft_h );
1797 game_flush_inputs();
1802 void kc_change_invert( kc_item * item )
1804 game_flush_inputs();
1811 kc_drawitem( item, 1 );
1815 #include "screens.h"
1817 void kconfig(int n, char * title)
1820 grs_bitmap *save_bm;
1822 set_screen_mode( SCREEN_MENU );
1827 save_bm = gr_create_bitmap( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h );
1828 Assert( save_bm != NULL );
1830 gr_bm_bitblt(grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_w,
1831 0, 0, 0, 0, &grd_curcanv->cv_bitmap, save_bm );
1834 case 0:kconfig_sub( kc_keyboard, NUM_KEY_CONTROLS, title );break;
1835 case 1:kconfig_sub( kc_joystick, NUM_OTHER_CONTROLS, title );break;
1836 case 2:kconfig_sub( kc_mouse, NUM_OTHER_CONTROLS, title ); break;
1837 case 3:kconfig_sub( kc_superjoy, NUM_OTHER_CONTROLS, title); break;
1839 //added on 2/4/99 by Victor Rachels for new keys menu
1840 case 4:kconfig_sub( kc_d2x, NUM_D2X_CONTROLS, title ); break;
1841 //end this section addition - VR
1849 gr_bitmap(0, 0, save_bm);
1850 gr_free_bitmap(save_bm);
1852 #if 0 // set_screen_mode always calls this later... right?
1853 reset_cockpit(); //force cockpit redraw next time
1856 // Update save values...
1858 for (i=0; i<NUM_KEY_CONTROLS; i++ )
1859 kconfig_settings[0][i] = kc_keyboard[i].value;
1861 if ( (Config_control_type>0) && (Config_control_type<5)) {
1862 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
1863 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
1864 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
1865 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
1866 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
1868 else if (Config_control_type == CONTROL_WINJOYSTICK) {
1869 for (i=0; i<NUM_OTHER_CONTROLS; i++ )
1870 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
1874 for (i=0; i<NUM_D2X_CONTROLS; i++)
1875 kconfig_d2x_settings[i] = kc_d2x[i].value;
1880 void kconfig_read_fcs( int raw_axis )
1882 int raw_button, button, axis_min[4], axis_center[4], axis_max[4];
1884 if (Config_control_type!=CONTROL_THRUSTMASTER_FCS) return;
1886 joy_get_cal_vals(axis_min, axis_center, axis_max);
1888 if ( axis_max[3] > 1 )
1889 raw_button = (raw_axis*100)/axis_max[3];
1893 if ( raw_button > 88 )
1895 else if ( raw_button > 63 )
1897 else if ( raw_button > 39 )
1899 else if ( raw_button > 15 )
1904 kconfig_set_fcs_button( 19, button );
1905 kconfig_set_fcs_button( 15, button );
1906 kconfig_set_fcs_button( 11, button );
1907 kconfig_set_fcs_button( 7, button );
1911 void kconfig_set_fcs_button( int btn, int button )
1913 int state,time_down,upcount,downcount;
1914 state = time_down = upcount = downcount = 0;
1916 if ( joy_get_button_state(btn) ) {
1917 if ( btn==button ) {
1919 time_down = FrameTime;
1924 if ( btn==button ) {
1926 time_down = FrameTime;
1933 joy_set_btn_values( btn, state, time_down, downcount, upcount );
1939 fix Last_angles_p = 0;
1940 fix Last_angles_b = 0;
1941 fix Last_angles_h = 0;
1942 ubyte Last_angles_read = 0;
1944 extern int VR_sensitivity;
1946 int VR_sense_range[3] = { 25, 50, 75 };
1948 #if 0 //ndef MACINTOSH
1953 fix yaw, pitch, roll;
1956 //------ read vfx1 helmet --------
1957 if (vfx1_installed) {
1958 vfx_get_data(&yaw,&pitch,&roll,&buttons);
1959 } else if (iglasses_headset_installed) {
1960 iglasses_read_headset( &yaw, &pitch, &roll );
1961 } else if (Victor_headset_installed) {
1962 victor_read_headset_filtered( &yaw, &pitch, &roll );
1967 Use_player_head_angles = 0;
1968 if ( Last_angles_read ) {
1972 if ( (Last_angles_h < (F1_0/4) ) && (yaw > ((F1_0*3)/4) ) )
1974 else if ( (yaw < (F1_0/4) ) && (Last_angles_h > ((F1_0*3)/4) ) )
1977 Controls.pitch_time += fixmul((pitch- Last_angles_p)*VR_sense_range[VR_sensitivity],FrameTime);
1978 Controls.heading_time+= fixmul((yaw1 - Last_angles_h)*VR_sense_range[VR_sensitivity],FrameTime);
1979 Controls.bank_time += fixmul((roll - Last_angles_b)*VR_sense_range[VR_sensitivity],FrameTime);
1981 Last_angles_read = 1;
1982 Last_angles_p = pitch;
1983 Last_angles_h = yaw;
1984 Last_angles_b = roll;
1991 #ifndef __MSDOS__ // WINDOWS
1992 #define JOYSTICK_READ_TIME (F1_0/40) // Read joystick at 40 Hz.
1994 #define JOYSTICK_READ_TIME (F1_0/10) // Read joystick at 10 Hz.
1997 fix LastReadTime = 0;
1999 fix joy_axis[JOY_MAX_AXES];
2001 ubyte kc_use_external_control = 0;
2002 ubyte kc_enable_external_control = 0;
2003 ubyte kc_external_intno = 0;
2004 ext_control_info *kc_external_control = NULL;
2005 char *kc_external_name = NULL;
2006 ubyte kc_external_version = 0;
2007 extern int Automap_active;
2009 void kconfig_init_external_controls(int intno, int address)
2012 kc_external_intno = intno;
2013 kc_external_control = (ext_control_info *)address;
2014 kc_use_external_control = 1;
2015 kc_enable_external_control = 1;
2017 i = FindArg ( "-xname" );
2019 kc_external_name = Args[i+1];
2021 kc_external_name = "External Controller";
2023 for (i=0;i<strlen (kc_external_name);i++)
2024 if (kc_external_name[i]=='_')
2025 kc_external_name[i]=' ';
2027 i = FindArg ( "-xver" );
2029 kc_external_version = atoi(Args[i+1]);
2031 printf( "%s int: 0x%x, data: 0x%p, ver:%d\n", kc_external_name, kc_external_intno, kc_external_control, kc_external_version );
2035 #if !defined(MACINTOSH)
2036 /*void kconfig_read_external_controls()
2040 if ( !kc_enable_external_control && !CybermouseActive)
2043 if ( kc_external_version == 0 )
2044 memset( kc_external_control, 0, sizeof(control_info) );
2045 else if ( kc_external_version > 0 ) {
2046 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 );
2047 if ( kc_external_version > 1 ) {
2048 // Write ship pos and angles to external controls...
2049 ubyte *temp_ptr = (ubyte *)kc_external_control;
2050 vms_vector *ship_pos;
2051 vms_matrix *ship_orient;
2052 memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
2053 temp_ptr += sizeof(control_info)+sizeof(vms_angvec) + 64;
2054 ship_pos = (vms_vector *)temp_ptr;
2055 temp_ptr += sizeof(vms_vector);
2056 ship_orient = (vms_matrix *)temp_ptr;
2057 // Fill in ship postion...
2058 *ship_pos = Objects[Players[Player_num].objnum].pos;
2059 // Fill in ship orientation...
2060 *ship_orient = Objects[Players[Player_num].objnum].orient;
2064 if ( Automap_active ) // (If in automap...)
2065 kc_external_control->automap_state = 1;
2066 memset(&r,0,sizeof(r));
2070 if (!CybermouseActive)
2071 int386 ( kc_external_intno, &r, &r); // Read external info...
2073 // ReadOWL (kc_external_control);
2077 if ( Player_num > -1 ) {
2078 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
2079 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
2080 Auto_leveling_on = 0;
2082 if ( kc_external_version > 0 ) {
2083 vms_matrix tempm, ViewMatrix;
2084 vms_angvec * Kconfig_abs_movement;
2087 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
2089 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
2090 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
2091 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
2092 Objects[Players[Player_num].objnum].orient = ViewMatrix;
2094 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
2095 if (oem_message[0] != '\0' )
2096 HUD_init_message( oem_message );
2100 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
2101 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
2102 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
2103 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
2104 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
2105 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
2106 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
2107 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
2108 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
2109 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
2110 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
2111 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
2112 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
2113 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
2114 Controls.automap_down_count += kc_external_control->automap_down_count;
2115 Controls.automap_state |= kc_external_control->automap_state;
2120 void controls_read_all_win()
2123 int slide_on, bank_on;
2127 int raw_joy_axis[7];
2129 fix k0, k1, k2, k3, kp;
2130 fix k4, k5, k6, k7, kh;
2131 ubyte channel_masks;
2132 int use_mouse, use_joystick;
2135 if (Game_turbo_mode)
2139 fix temp = Controls.heading_time;
2140 fix temp1 = Controls.pitch_time;
2141 memset( &Controls, 0, sizeof(control_info) );
2142 Controls.heading_time = temp;
2143 Controls.pitch_time = temp1;
2148 ctime = timer_get_fixed_seconds();
2150 // DO JOYSTICK (X,Y,Z R,U,V)
2151 // ----------------------------------------------------------------------------
2152 if ( (LastReadTime + JOYSTICK_READ_TIME) > ctime ) {
2153 if ((ctime < 0) && (LastReadTime > 0))
2154 LastReadTime = ctime;
2156 } else if ((Config_control_type==CONTROL_WINJOYSTICK)) {
2157 LastReadTime = ctime;
2158 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS+JOY_EXT_AXIS, raw_joy_axis );
2160 for (i=0; i<7; i++ ) {
2161 if (channel_masks&(1<<i)) {
2162 int joy_null_value = 28;
2164 // DO POV if joystick has a hat.
2165 // --------------------------------------------------------------------
2167 joydefsw_do_winjoybutton(raw_joy_axis);
2171 // --------------------------------------------------------------------
2172 // mprintf((0, "(%d)=%d,", i, raw_joy_axis[i]));
2173 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2174 // mprintf((0, "%d ",raw_joy_axis[i]));
2175 // if (i%2) mprintf((0,"\n"));
2178 if (kc_superjoy[23].value==i) // If this is the throttle
2179 joy_null_value = 32; // Then use a larger dead-zone
2181 if (raw_joy_axis[i] > (joy_null_value-2))
2182 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
2183 else if (raw_joy_axis[i] < -(joy_null_value+2))
2184 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
2186 raw_joy_axis[i] = 0;
2187 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
2196 for (i=0; i<6; i++ )
2202 // ----------------------------------------------------------------------------
2203 if (Config_control_type==5) {
2204 mouse_get_delta( &dx, &dy );
2205 mouse_axis[0] = (dx*FrameTime)/35;
2206 mouse_axis[1] = (dy*FrameTime)/25;
2207 mouse_buttons = mouse_get_btns();
2208 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
2217 //------------- Read slide_on -------------
2220 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
2221 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
2223 if ((use_joystick)&&(kc_superjoy[5].value<255)) slide_on |= joy_get_button_state( kc_superjoy[5].value );
2225 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
2227 //------------- Read bank_on ---------------
2230 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
2231 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
2233 if ( (use_joystick)&&(kc_superjoy[10].value < 255 )) bank_on |= joy_get_button_state( kc_superjoy[10].value );
2235 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
2237 //------------ Read pitch_time -----------
2239 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2241 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
2242 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
2243 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
2244 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
2247 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
2248 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
2249 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
2250 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
2253 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2254 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
2255 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
2259 Controls.pitch_time = 0;
2261 if (Controls.pitch_time < 0)
2262 Controls.pitch_time = 0;
2264 if (Controls.pitch_time > 0)
2265 Controls.pitch_time = 0;
2266 Controls.pitch_time += kp;
2269 if ( (use_joystick)&&(kc_superjoy[13].value < 255 )) {
2270 if ( !kc_superjoy[14].value ) // If not inverted...
2271 Controls.pitch_time -= (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2273 Controls.pitch_time += (joy_axis[kc_superjoy[13].value]*Config_joystick_sensitivity)/8;
2277 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
2278 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
2279 if ( !kc_mouse[14].value ) // If not inverted...
2280 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2282 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
2285 Controls.pitch_time = 0;
2289 //----------- Read vertical_thrust_time -----------------
2292 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
2293 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
2294 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
2295 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
2298 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
2299 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
2300 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
2301 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
2304 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2305 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
2306 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
2310 if ((use_joystick)&&( kc_superjoy[13].value < 255 )) {
2311 if ( !kc_superjoy[14].value ) // If not inverted...
2312 Controls.vertical_thrust_time += joy_axis[kc_superjoy[13].value];
2314 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[13].value];
2318 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
2319 if ( !kc_mouse[14].value ) // If not inverted...
2320 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
2322 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
2327 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
2328 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
2329 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
2330 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
2333 if ((use_joystick)&&( kc_superjoy[19].value < 255 )) {
2334 if ( !kc_superjoy[20].value ) // If not inverted...
2335 Controls.vertical_thrust_time += joy_axis[kc_superjoy[19].value];
2337 Controls.vertical_thrust_time -= joy_axis[kc_superjoy[19].value];
2340 // From joystick buttons
2341 if ( (use_joystick)&&(kc_superjoy[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_superjoy[8].value );
2342 if ( (use_joystick)&&(kc_superjoy[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_superjoy[9].value );
2344 // From mouse buttons
2345 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
2346 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
2349 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
2350 if ( !kc_mouse[20].value ) // If not inverted...
2351 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
2353 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
2357 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2358 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
2359 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
2362 //---------- Read heading_time -----------
2364 if (!slide_on && !bank_on) {
2365 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
2367 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
2368 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
2369 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
2370 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
2373 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
2374 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
2375 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
2376 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
2379 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2380 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
2381 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
2385 Controls.heading_time = 0;
2387 if (Controls.heading_time < 0)
2388 Controls.heading_time = 0;
2390 if (Controls.heading_time > 0)
2391 Controls.heading_time = 0;
2392 Controls.heading_time += kh;
2395 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2396 if ( !kc_superjoy[16].value ) // If not inverted...
2397 Controls.heading_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2399 Controls.heading_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2403 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2404 if ( !kc_mouse[16].value ) // If not inverted...
2405 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2407 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2410 Controls.heading_time = 0;
2413 //----------- Read sideways_thrust_time -----------------
2416 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2417 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2418 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2419 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2422 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
2423 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
2424 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
2425 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
2428 if ( (use_joystick)&&(kc_superjoy[15].value < 255 )) {
2429 if ( !kc_superjoy[16].value ) // If not inverted...
2430 Controls.sideways_thrust_time += joy_axis[kc_superjoy[15].value];
2432 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[15].value];
2436 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2437 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
2438 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
2442 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2443 if ( !kc_mouse[16].value ) // If not inverted...
2444 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
2446 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
2451 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
2452 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
2453 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
2454 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
2457 if ( (use_joystick)&&(kc_superjoy[17].value < 255 )) {
2458 if ( !kc_superjoy[18].value ) // If not inverted...
2459 Controls.sideways_thrust_time -= joy_axis[kc_superjoy[17].value];
2461 Controls.sideways_thrust_time += joy_axis[kc_superjoy[17].value];
2464 // From joystick buttons
2465 if ( (use_joystick)&&(kc_superjoy[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_superjoy[6].value );
2466 if ( (use_joystick)&&(kc_superjoy[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_superjoy[7].value );
2468 // From mouse buttons
2469 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
2470 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
2473 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
2474 if ( !kc_mouse[18].value ) // If not inverted...
2475 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
2477 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
2480 //----------- Read bank_time -----------------
2483 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
2484 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
2485 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
2486 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
2489 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
2490 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
2491 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
2492 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
2495 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2496 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
2497 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
2501 if ( (use_joystick)&&(kc_superjoy[15].value < 255) ) {
2502 if ( !kc_superjoy[16].value ) // If not inverted...
2503 Controls.bank_time -= (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2505 Controls.bank_time += (joy_axis[kc_superjoy[15].value]*Config_joystick_sensitivity)/8;
2509 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
2510 if ( !kc_mouse[16].value ) // If not inverted...
2511 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2513 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
2518 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
2519 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
2520 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
2521 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
2524 if ( (use_joystick)&&(kc_superjoy[21].value < 255) ) {
2525 if ( !kc_superjoy[22].value ) // If not inverted...
2526 Controls.bank_time -= joy_axis[kc_superjoy[21].value];
2528 Controls.bank_time += joy_axis[kc_superjoy[21].value];
2531 // From joystick buttons
2532 if ( (use_joystick)&&(kc_superjoy[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_superjoy[11].value );
2533 if ( (use_joystick)&&(kc_superjoy[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_superjoy[12].value );
2535 // From mouse buttons
2536 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
2537 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
2540 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
2541 if ( !kc_mouse[22].value ) // If not inverted...
2542 Controls.bank_time += mouse_axis[kc_mouse[21].value];
2544 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
2548 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
2549 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
2550 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
2553 //----------- Read forward_thrust_time -------------
2556 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
2557 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
2558 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
2559 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
2562 if ( (use_joystick)&&(kc_superjoy[23].value < 255 )) {
2563 if ( !kc_superjoy[24].value ) // If not inverted...
2564 Controls.forward_thrust_time -= joy_axis[kc_superjoy[23].value];
2566 Controls.forward_thrust_time += joy_axis[kc_superjoy[23].value];
2569 // From joystick buttons
2570 if ( (use_joystick)&&(kc_superjoy[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_superjoy[2].value );
2571 if ( (use_joystick)&&(kc_superjoy[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_superjoy[3].value );
2574 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
2575 if ( !kc_mouse[24].value ) // If not inverted...
2576 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
2578 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
2581 // From mouse buttons
2582 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
2583 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
2585 //----------- Read afterburner_state -------------
2588 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
2589 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
2591 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
2593 if ( (use_joystick)&&(kc_superjoy[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_superjoy[27].value);
2595 //-------Read headlight key--------------------------
2596 if (kc_keyboard[52].value < 255 )
2597 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
2598 if (kc_keyboard[53].value < 255 )
2599 Controls.headlight_count=key_down_count(kc_keyboard[53].value);
2600 if ((use_joystick)&&(kc_superjoy[30].value < 255 ))
2601 Controls.headlight_count=joy_get_button_down_cnt(kc_superjoy[30].value);
2603 //--------Read Cycle Primary Key------------------
2605 if (kc_keyboard[48].value<255)
2606 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
2607 if (kc_keyboard[49].value<255)
2608 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
2609 if ((use_joystick)&&(kc_superjoy[28].value < 255 ))
2610 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_superjoy[28].value);
2612 //--------Read Cycle Secondary Key------------------
2614 if (kc_keyboard[50].value<255)
2615 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
2616 if (kc_keyboard[51].value<255)
2617 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
2618 if ((use_joystick)&&(kc_superjoy[29].value < 255 ))
2619 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_superjoy[29].value);
2621 //--------Read Toggle Bomb key----------------------
2623 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
2625 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
2627 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
2628 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
2630 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
2631 HUD_init_message ("No bombs available!");
2635 if (Players[Player_num].secondary_ammo[bomb]==0)
2637 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
2638 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
2642 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
2643 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
2648 //---------Read Energy->Shield key----------
2650 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
2651 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
2652 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
2653 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
2655 //----------- Read fire_primary_down_count
2656 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
2657 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
2658 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_superjoy[0].value);
2659 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
2661 //----------- Read fire_primary_state
2662 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
2663 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
2664 if ((use_joystick)&&(kc_superjoy[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_superjoy[0].value);
2665 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
2667 //----------- Read fire_secondary_down_count
2668 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
2669 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
2670 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_superjoy[1].value);
2671 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
2673 //----------- Read fire_secondary_state
2674 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
2675 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
2676 if ((use_joystick)&&(kc_superjoy[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_superjoy[1].value);
2677 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
2679 //----------- Read fire_flare_down_count
2680 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
2681 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
2682 if ((use_joystick)&&(kc_superjoy[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_superjoy[4].value);
2683 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
2685 //----------- Read drop_bomb_down_count
2686 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
2687 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
2688 if ((use_joystick)&&(kc_superjoy[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_superjoy[26].value);
2689 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
2691 //----------- Read rear_view_down_count
2692 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
2693 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
2694 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_superjoy[25].value);
2695 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
2697 //----------- Read rear_view_down_state
2698 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
2699 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
2700 if ((use_joystick)&&(kc_superjoy[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_superjoy[25].value);
2701 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
2703 //----------- Read automap_down_count
2704 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
2705 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
2707 //----------- Read automap_state
2708 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
2709 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
2711 //----------- Read stupid-cruise-control-type of throttle.
2713 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
2714 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
2715 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
2716 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
2717 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
2719 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
2722 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
2723 if (Cruise_speed < 0 ) Cruise_speed = 0;
2725 if (Controls.forward_thrust_time==0)
2726 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
2729 //read_head_tracker();
2731 // Read external controls
2732 if (kc_use_external_control || CybermouseActive)
2733 kconfig_read_external_controls();
2735 //----------- Clamp values between -FrameTime and FrameTime
2736 if (FrameTime > F1_0 )
2737 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
2739 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
2740 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
2741 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
2742 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
2743 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
2744 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
2745 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
2747 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
2748 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
2749 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
2750 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
2751 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
2752 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
2753 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
2756 //--------- Don't do anything if in debug mode
2758 if ( keyd_pressed[KEY_DELETE] ) {
2759 memset( &Controls, 0, sizeof(control_info) );
2766 fix Next_toggle_time[3]={0,0,0};
2768 int allowed_to_toggle(int i)
2770 //used for keeping tabs of when its ok to toggle headlight,primary,and secondary
2772 if (Next_toggle_time[i] > GameTime)
2773 if (Next_toggle_time[i] < GameTime + (F1_0/8)) // In case time is bogus, never wait > 1 second.
2776 Next_toggle_time[i] = GameTime + (F1_0/8);
2783 //added on 2/7/99 by Victor Rachels for jostick state setting
2784 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};
2785 //end this section adition - VR
2789 void controls_read_all()
2792 int slide_on, bank_on;
2799 fix mouse_axis[3] = {0,0,0};
2800 int raw_joy_axis[JOY_MAX_AXES];
2802 fix k0, k1, k2, k3, kp;
2803 fix k4, k5, k6, k7, kh;
2804 ubyte channel_masks;
2805 int use_mouse, use_joystick;
2811 if (Game_turbo_mode)
2815 fix temp = Controls.heading_time;
2816 fix temp1 = Controls.pitch_time;
2817 memset( &Controls, 0, sizeof(control_info) );
2818 Controls.heading_time = temp;
2819 Controls.pitch_time = temp1;
2824 ctime = timer_get_fixed_seconds();
2826 //--------- Read Joystick -----------
2828 if ( (LastReadTime + JOYSTICK_READ_TIME > ctime) && (Config_control_type!=CONTROL_THRUSTMASTER_FCS) ) {
2830 if ((ctime < 0) && (LastReadTime >= 0))
2832 if ((ctime < 0) && (LastReadTime > 0))
2834 LastReadTime = ctime;
2836 } else if ((Config_control_type>0) && (Config_control_type<5) ) {
2837 LastReadTime = ctime;
2838 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
2840 for (i = 0; i < joy_num_axes; i++)
2843 if (channel_masks&(1<<i)) {
2845 int joy_null_value = 10;
2847 if ( (i==3) && (Config_control_type==CONTROL_THRUSTMASTER_FCS) ) {
2848 kconfig_read_fcs( raw_joy_axis[i] );
2850 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2852 if (kc_joystick[23].value==i) // If this is the throttle
2853 joy_null_value = 20; // Then use a larger dead-zone
2855 if (raw_joy_axis[i] > joy_null_value)
2856 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
2857 else if (raw_joy_axis[i] < -joy_null_value)
2858 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
2860 raw_joy_axis[i] = 0;
2861 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
2871 for (i = 0; i < joy_num_axes; i++)
2876 //--------- Read Joystick -----------
2877 if ((Config_control_type>0) && (Config_control_type<5) ) {
2878 channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis );
2879 for (i=0; i<4; i++ ) {
2880 if (channel_masks&(1<<i)) {
2881 int joy_null_value = 10;
2883 raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i );
2885 if (kc_joystick[23].value==i) // If this is the throttle
2886 joy_null_value = 20; // Then use a larger dead-zone
2888 if (raw_joy_axis[i] > joy_null_value)
2889 raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value);
2890 else if (raw_joy_axis[i] < -joy_null_value)
2891 raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value);
2893 raw_joy_axis[i] = 0;
2894 joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128;
2901 for (i=0; i<4; i++ )
2905 #endif // ifndef MACINTOSH
2907 if (Config_control_type==5 && !CybermouseActive) {
2908 //--------- Read Mouse -----------
2910 mouse_get_delta_z( &dx, &dy, &dz );
2912 mouse_get_delta( &dx, &dy );
2914 mouse_axis[0] = (dx*FrameTime)/35;
2915 mouse_axis[1] = (dy*FrameTime)/25;
2917 mouse_axis[2] = (dz*FrameTime);
2919 mouse_buttons = mouse_get_btns();
2920 //mprintf(( 0, "Mouse %d,%d b:%d, 0x%x\n", mouse_axis[0], mouse_axis[1], mouse_buttons, FrameTime ));
2922 } else if (Config_control_type==6 && !CybermouseActive) {
2923 //--------- Read Cyberman -----------
2924 mouse_get_cyberman_pos(&idx,&idy );
2925 mouse_axis[0] = (idx*FrameTime)/128;
2926 mouse_axis[1] = (idy*FrameTime)/128;
2927 mouse_buttons = mouse_get_btns();
2929 } else if (CybermouseActive) {
2930 // ReadOWL (kc_external_control);
2931 // CybermouseAdjust();
2940 //added on 2/4/99 by Victor Rachels for d1x keys
2941 //--------- Read primary weapon select -------------
2942 //the following "if" added by WraithX to stop deadies from switchin weapons, 4/14/00
2943 if (!Player_is_dead)
2946 int d2x_joystick_state[10];
2949 d2x_joystick_state[i] = joy_get_button_state(kc_d2x[i*2+1].value);
2952 //----------------Weapon 1----------------
2953 if(key_down_count(kc_d2x[0].value) ||
2954 (joy_get_button_state(kc_d2x[1].value) &&
2955 (d2x_joystick_state[0]!=d2x_joystick_ostate[0]) ) )
2958 do_weapon_select(0,0);
2960 for(i=MAX_PRIMARY_WEAPONS;i<MAX_PRIMARY_WEAPONS+NEWPRIMS;i++)
2961 if(primary_order[i]>primary_order[valu]&&player_has_weapon(i,0))
2963 LaserPowSelected = valu;
2966 //----------------Weapon 2----------------
2967 if(key_down_count(kc_d2x[2].value) ||
2968 (joy_get_button_state(kc_d2x[3].value) &&
2969 (d2x_joystick_state[1]!=d2x_joystick_ostate[1]) ) )
2970 do_weapon_select(1,0);
2971 //----------------Weapon 3----------------
2972 if(key_down_count(kc_d2x[4].value) ||
2973 (joy_get_button_state(kc_d2x[5].value) &&
2974 (d2x_joystick_state[2]!=d2x_joystick_ostate[2]) ) )
2975 do_weapon_select(2,0);
2976 //----------------Weapon 4----------------
2977 if(key_down_count(kc_d2x[6].value) ||
2978 (joy_get_button_state(kc_d2x[7].value) &&
2979 (d2x_joystick_state[3]!=d2x_joystick_ostate[3]) ) )
2980 do_weapon_select(3,0);
2981 //----------------Weapon 5----------------
2982 if(key_down_count(kc_d2x[8].value) ||
2983 (joy_get_button_state(kc_d2x[9].value) &&
2984 (d2x_joystick_state[4]!=d2x_joystick_ostate[4]) ) )
2985 do_weapon_select(4,0);
2987 //--------- Read secondary weapon select ----------
2988 //----------------Weapon 6----------------
2989 if(key_down_count(kc_d2x[10].value) ||
2990 (joy_get_button_state(kc_d2x[11].value) &&
2991 (d2x_joystick_state[5]!=d2x_joystick_ostate[5]) ) )
2992 do_weapon_select(0,1);
2993 //----------------Weapon 7----------------
2994 if(key_down_count(kc_d2x[12].value) ||
2995 (joy_get_button_state(kc_d2x[13].value) &&
2996 (d2x_joystick_state[6]!=d2x_joystick_ostate[6]) ) )
2997 do_weapon_select(1,1);
2998 //----------------Weapon 8----------------
2999 if(key_down_count(kc_d2x[14].value) ||
3000 (joy_get_button_state(kc_d2x[15].value) &&
3001 (d2x_joystick_state[7]!=d2x_joystick_ostate[7]) ) )
3002 do_weapon_select(2,1);
3003 //----------------Weapon 9----------------
3004 if(key_down_count(kc_d2x[16].value) ||
3005 (joy_get_button_state(kc_d2x[17].value) &&
3006 (d2x_joystick_state[8]!=d2x_joystick_ostate[8]) ) )
3007 do_weapon_select(3,1);
3008 //----------------Weapon 0----------------
3009 if(key_down_count(kc_d2x[18].value) ||
3010 (joy_get_button_state(kc_d2x[19].value) &&
3011 (d2x_joystick_state[9]!=d2x_joystick_ostate[9]) ) )
3012 do_weapon_select(4,1);
3013 memcpy(d2x_joystick_ostate,d2x_joystick_state,10*sizeof(int));
3015 //end this section addition - VR
3018 }//end "if (!Player_is_dead)" - WraithX
3022 //------------- Read slide_on -------------
3025 if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ];
3026 if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ];
3028 if ((use_joystick)&&(kc_joystick[5].value<255)) slide_on |= joy_get_button_state( kc_joystick[5].value );
3030 if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1<<kc_mouse[5].value);
3032 //------------- Read bank_on ---------------
3035 if ( kc_keyboard[18].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[18].value ];
3036 if ( kc_keyboard[19].value < 255 ) bank_on |= keyd_pressed[ kc_keyboard[19].value ];
3038 if ( (use_joystick)&&(kc_joystick[10].value < 255 )) bank_on |= joy_get_button_state( kc_joystick[10].value );
3040 if ( (use_mouse)&&(kc_mouse[10].value < 255 )) bank_on |= mouse_buttons & (1<<kc_mouse[10].value);
3042 //------------ Read pitch_time -----------
3044 // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3046 k0 = speed_factor*key_down_time( kc_keyboard[0].value )/2; // Divide by two since we want pitch to go slower
3047 k1 = speed_factor*key_down_time( kc_keyboard[1].value )/2;
3048 k2 = speed_factor*key_down_time( kc_keyboard[2].value )/2;
3049 k3 = speed_factor*key_down_time( kc_keyboard[3].value )/2;
3052 if ( kc_keyboard[0].value < 255 ) kp += k0/PH_SCALE;
3053 if ( kc_keyboard[1].value < 255 ) kp += k1/PH_SCALE;
3054 if ( kc_keyboard[2].value < 255 ) kp -= k2/PH_SCALE;
3055 if ( kc_keyboard[3].value < 255 ) kp -= k3/PH_SCALE;
3058 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3059 kp += mouse_button_down_time(MB_PITCH_FORWARD)/(PH_SCALE*2);
3060 kp -= mouse_button_down_time(MB_PITCH_BACKWARD)/(PH_SCALE*2);
3064 Controls.pitch_time = 0;
3066 if (Controls.pitch_time < 0)
3067 Controls.pitch_time = 0;
3069 if (Controls.pitch_time > 0)
3070 Controls.pitch_time = 0;
3071 Controls.pitch_time += kp;
3074 if ( (use_joystick)&&(kc_joystick[13].value < 255 )) {
3075 if ( !kc_joystick[14].value ) // If not inverted...
3076 Controls.pitch_time -= (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3078 Controls.pitch_time += (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8;
3082 //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value ));
3083 if ( (use_mouse)&&(kc_mouse[13].value < 255) ) {
3084 if ( !kc_mouse[14].value ) // If not inverted...
3085 Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3087 Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/8;
3090 Controls.pitch_time = 0;
3094 // the following "if" added by WraithX, 4/14/00
3095 // done so that dead players can't move
3096 if (!Player_is_dead)
3098 //----------- Read vertical_thrust_time -----------------
3101 k0 = speed_factor*key_down_time( kc_keyboard[0].value );
3102 k1 = speed_factor*key_down_time( kc_keyboard[1].value );
3103 k2 = speed_factor*key_down_time( kc_keyboard[2].value );
3104 k3 = speed_factor*key_down_time( kc_keyboard[3].value );
3107 if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0;
3108 if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1;
3109 if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2;
3110 if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3;
3113 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3114 Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD);
3115 Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD);
3119 if ((use_joystick)&&( kc_joystick[13].value < 255 )) {
3120 if ( !kc_joystick[14].value ) // If not inverted...
3121 Controls.vertical_thrust_time += joy_axis[kc_joystick[13].value];
3123 Controls.vertical_thrust_time -= joy_axis[kc_joystick[13].value];
3127 if ( (use_mouse)&&(kc_mouse[13].value < 255 )) {
3128 if ( !kc_mouse[14].value ) // If not inverted...
3129 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value];
3131 Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value];
3136 if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value );
3137 if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value );
3138 if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value );
3139 if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value );
3142 if ((use_joystick)&&( kc_joystick[19].value < 255 )) {
3143 if ( !kc_joystick[20].value ) // If not inverted...
3144 Controls.vertical_thrust_time += joy_axis[kc_joystick[19].value];
3146 Controls.vertical_thrust_time -= joy_axis[kc_joystick[19].value];
3149 // From joystick buttons
3150 if ( (use_joystick)&&(kc_joystick[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_joystick[8].value );
3151 if ( (use_joystick)&&(kc_joystick[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_joystick[9].value );
3153 // From mouse buttons
3154 if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value );
3155 if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value );
3158 if ( (use_mouse)&&(kc_mouse[19].value < 255 )) {
3159 if ( !kc_mouse[20].value ) // If not inverted...
3160 Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value];
3162 Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value];
3166 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3167 Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2;
3168 Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2;
3170 }// end "if" added by WraithX
3172 //---------- Read heading_time -----------
3174 if (!slide_on && !bank_on) {
3175 //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time)));
3177 k4 = speed_factor*key_down_time( kc_keyboard[4].value );
3178 k5 = speed_factor*key_down_time( kc_keyboard[5].value );
3179 k6 = speed_factor*key_down_time( kc_keyboard[6].value );
3180 k7 = speed_factor*key_down_time( kc_keyboard[7].value );
3183 if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE;
3184 if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE;
3185 if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE;
3186 if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE;
3189 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3190 kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE;
3191 kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE;
3195 Controls.heading_time = 0;
3197 if (Controls.heading_time < 0)
3198 Controls.heading_time = 0;
3200 if (Controls.heading_time > 0)
3201 Controls.heading_time = 0;
3202 Controls.heading_time += kh;
3205 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3206 if ( !kc_joystick[16].value ) // If not inverted...
3207 Controls.heading_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3209 Controls.heading_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3213 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3214 if ( !kc_mouse[16].value ) // If not inverted...
3215 Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3217 Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3220 Controls.heading_time = 0;
3223 // the following "if" added by WraithX, 4/14/00
3224 // done so that dead players can't move
3225 if (!Player_is_dead)
3227 //----------- Read sideways_thrust_time -----------------
3230 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3231 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3232 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3233 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3236 if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0;
3237 if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1;
3238 if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2;
3239 if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3;
3242 if ( (use_joystick)&&(kc_joystick[15].value < 255 )) {
3243 if ( !kc_joystick[16].value ) // If not inverted...
3244 Controls.sideways_thrust_time += joy_axis[kc_joystick[15].value];
3246 Controls.sideways_thrust_time -= joy_axis[kc_joystick[15].value];
3250 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3251 Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT);
3252 Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT);
3256 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3257 if ( !kc_mouse[16].value ) // If not inverted...
3258 Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value];
3260 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value];
3265 if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value );
3266 if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value );
3267 if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value );
3268 if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value );
3271 if ( (use_joystick)&&(kc_joystick[17].value < 255 )) {
3272 if ( !kc_joystick[18].value ) // If not inverted...
3273 Controls.sideways_thrust_time -= joy_axis[kc_joystick[17].value];
3275 Controls.sideways_thrust_time += joy_axis[kc_joystick[17].value];
3278 // From joystick buttons
3279 if ( (use_joystick)&&(kc_joystick[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_joystick[6].value );
3280 if ( (use_joystick)&&(kc_joystick[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_joystick[7].value );
3282 // From mouse buttons
3283 if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value );
3284 if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value );
3287 if ( (use_mouse)&&(kc_mouse[17].value < 255 )) {
3288 if ( !kc_mouse[18].value ) // If not inverted...
3289 Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value];
3291 Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value];
3293 }// end "if" added by WraithX
3295 //----------- Read bank_time -----------------
3298 k0 = speed_factor*key_down_time( kc_keyboard[4].value );
3299 k1 = speed_factor*key_down_time( kc_keyboard[5].value );
3300 k2 = speed_factor*key_down_time( kc_keyboard[6].value );
3301 k3 = speed_factor*key_down_time( kc_keyboard[7].value );
3304 if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0;
3305 if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1;
3306 if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2;
3307 if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3;
3310 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3311 Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT);
3312 Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT);
3316 if ( (use_joystick)&&(kc_joystick[15].value < 255) ) {
3317 if ( !kc_joystick[16].value ) // If not inverted...
3318 Controls.bank_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3320 Controls.bank_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8;
3324 if ( (use_mouse)&&(kc_mouse[15].value < 255 )) {
3325 if ( !kc_mouse[16].value ) // If not inverted...
3326 Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3328 Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8;
3333 if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value );
3334 if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value );
3335 if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value );
3336 if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value );
3339 if ( (use_joystick)&&(kc_joystick[21].value < 255) ) {
3340 if ( !kc_joystick[22].value ) // If not inverted...
3341 Controls.bank_time -= joy_axis[kc_joystick[21].value];
3343 Controls.bank_time += joy_axis[kc_joystick[21].value];
3346 // From joystick buttons
3347 if ( (use_joystick)&&(kc_joystick[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_joystick[11].value );
3348 if ( (use_joystick)&&(kc_joystick[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_joystick[12].value );
3350 // From mouse buttons
3351 if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value );
3352 if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value );
3355 if ( (use_mouse)&&(kc_mouse[21].value < 255 )) {
3356 if ( !kc_mouse[22].value ) // If not inverted...
3357 Controls.bank_time += mouse_axis[kc_mouse[21].value];
3359 Controls.bank_time -= mouse_axis[kc_mouse[21].value];
3363 if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) {
3364 Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT);
3365 Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT);
3368 // the following "if" added by WraithX, 4/14/00
3369 // done so that dead players can't move
3370 if (!Player_is_dead)
3372 //----------- Read forward_thrust_time -------------
3375 if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value );
3376 if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value );
3377 if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value );
3378 if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value );
3381 if ( (use_joystick)&&(kc_joystick[23].value < 255 )) {
3382 if ( !kc_joystick[24].value ) // If not inverted...
3383 Controls.forward_thrust_time -= joy_axis[kc_joystick[23].value];
3385 Controls.forward_thrust_time += joy_axis[kc_joystick[23].value];
3388 // From joystick buttons
3389 if ( (use_joystick)&&(kc_joystick[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_joystick[2].value );
3390 if ( (use_joystick)&&(kc_joystick[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_joystick[3].value );
3393 if ( (use_mouse)&&(kc_mouse[23].value < 255 )) {
3394 if ( !kc_mouse[24].value ) // If not inverted...
3395 Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value];
3397 Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value];
3400 // From mouse buttons
3401 if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value );
3402 if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value );
3404 //----------- Read afterburner_state -------------
3407 if ( kc_keyboard[46].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[46].value];
3408 if ( kc_keyboard[47].value < 255 ) Controls.afterburner_state |= keyd_pressed[kc_keyboard[47].value];
3410 if ( (use_mouse)&&(kc_mouse[27].value < 255 )) Controls.afterburner_state |= mouse_button_state(kc_mouse[27].value);
3412 if ( (use_joystick)&&(kc_joystick[27].value < 255 )) Controls.afterburner_state |= joy_get_button_state(kc_joystick[27].value);
3414 //-------Read headlight key--------------------------
3416 if (kc_keyboard[52].value < 255 )
3417 Controls.headlight_count=key_down_count(kc_keyboard[52].value);
3418 if (kc_keyboard[53].value < 255 )
3419 Controls.headlight_count+=key_down_count(kc_keyboard[53].value);
3420 if ((use_joystick)&&(kc_joystick[30].value < 255 ))
3421 Controls.headlight_count+=joy_get_button_down_cnt(kc_joystick[30].value);
3423 //--------Read Cycle Primary Key------------------
3425 if (kc_keyboard[48].value<255)
3426 Controls.cycle_primary_count=key_down_count(kc_keyboard[48].value);
3427 if (kc_keyboard[49].value<255)
3428 Controls.cycle_primary_count+=key_down_count(kc_keyboard[49].value);
3429 if ((use_joystick)&&(kc_joystick[28].value < 255 ))
3430 Controls.cycle_primary_count+=joy_get_button_down_cnt(kc_joystick[28].value);
3433 //--------Read Cycle Secondary Key------------------
3435 if (kc_keyboard[50].value<255)
3436 Controls.cycle_secondary_count=key_down_count(kc_keyboard[50].value);
3437 if (kc_keyboard[51].value<255)
3438 Controls.cycle_secondary_count+=key_down_count(kc_keyboard[51].value);
3439 if ((use_joystick)&&(kc_joystick[29].value < 255 ))
3440 Controls.cycle_secondary_count=joy_get_button_down_cnt(kc_joystick[29].value);
3442 //--------Read Toggle Bomb key----------------------
3444 if (kc_keyboard[56].value<255 && key_down_count(kc_keyboard[56].value))
3446 int bomb = Secondary_last_was_super[PROXIMITY_INDEX]?PROXIMITY_INDEX:SMART_MINE_INDEX;
3448 if (!Players[Player_num].secondary_ammo[PROXIMITY_INDEX] &&
3449 !Players[Player_num].secondary_ammo[SMART_MINE_INDEX])
3451 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3452 HUD_init_message ("No bombs available!");
3456 if (Players[Player_num].secondary_ammo[bomb]==0)
3458 digi_play_sample_once( SOUND_BAD_SELECTION, F1_0 );
3459 HUD_init_message ("No %s available!",(bomb==SMART_MINE_INDEX)?"Smart mines":"Proximity bombs");
3463 Secondary_last_was_super[PROXIMITY_INDEX]=!Secondary_last_was_super[PROXIMITY_INDEX];
3464 digi_play_sample_once( SOUND_GOOD_SELECTION_SECONDARY, F1_0 );
3469 //---------Read Energy->Shield key----------
3471 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[54].value])
3472 transfer_energy_to_shield(key_down_time(kc_keyboard[54].value));
3473 if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && keyd_pressed[kc_keyboard[55].value])
3474 transfer_energy_to_shield(key_down_time(kc_keyboard[55].value));
3476 //----------- Read fire_primary_down_count
3477 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value);
3478 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value);
3479 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_joystick[0].value);
3480 if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value);
3482 //----------- Read fire_primary_state
3483 if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value];
3484 if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value];
3485 if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_joystick[0].value);
3486 if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value);
3488 //----------- Read fire_secondary_down_count
3489 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value);
3490 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value);
3491 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_joystick[1].value);
3492 if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value);
3494 //----------- Read fire_secondary_state
3495 if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value];
3496 if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value];
3497 if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_joystick[1].value);
3498 if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value);
3500 //----------- Read fire_flare_down_count
3501 if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value);
3502 if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value);
3503 if ((use_joystick)&&(kc_joystick[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_joystick[4].value);
3504 if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value);
3506 //----------- Read drop_bomb_down_count
3507 if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value);
3508 if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value);
3509 if ((use_joystick)&&(kc_joystick[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_joystick[26].value);
3510 if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value);
3512 //----------- Read rear_view_down_count
3513 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value);
3514 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value);
3515 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_joystick[25].value);
3516 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value);
3518 //----------- Read rear_view_down_state
3519 if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value];
3520 if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value];
3521 if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_joystick[25].value);
3522 if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value);
3524 }//end "if" added by WraithX
3526 //----------- Read automap_down_count
3527 if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value);
3528 if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value);
3530 //----------- Read automap_state
3531 if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value];
3532 if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value];
3534 //----------- Read stupid-cruise-control-type of throttle.
3536 if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime);
3537 if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime);
3538 if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime);
3539 if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime);
3540 if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) )
3542 if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) )
3545 if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100);
3546 if (Cruise_speed < 0 ) Cruise_speed = 0;
3548 if (Controls.forward_thrust_time==0)
3549 Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100;
3552 #if !defined(MACINTOSH)
3553 //read_head_tracker();
3555 // Read external controls
3556 // if (kc_use_external_control || CybermouseActive)
3557 // kconfig_read_external_controls();
3560 //----------- Clamp values between -FrameTime and FrameTime
3561 if (FrameTime > F1_0 )
3562 mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) ));
3564 if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2;
3565 if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime;
3566 if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime;
3567 if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime;
3568 if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime;
3569 if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime;
3570 // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime;
3572 if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2;
3573 if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime;
3574 if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime;
3575 if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime;
3576 if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime;
3577 if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime;
3578 // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime;
3581 //--------- Don't do anything if in debug mode
3583 if ( keyd_pressed[KEY_DELETE] ) {
3584 memset( &Controls, 0, sizeof(control_info) );
3590 void reset_cruise(void)
3596 void kc_set_controls()
3600 for (i=0; i<NUM_KEY_CONTROLS; i++ )
3601 kc_keyboard[i].value = kconfig_settings[0][i];
3603 if ( (Config_control_type>0) && (Config_control_type<5)) {
3604 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3605 kc_joystick[i].value = kconfig_settings[Config_control_type][i];
3606 if (kc_joystick[i].type == BT_INVERT ) {
3607 if (kc_joystick[i].value!=1)
3608 kc_joystick[i].value = 0;
3609 kconfig_settings[Config_control_type][i] = kc_joystick[i].value;
3612 } else if (Config_control_type>4 && Config_control_type<CONTROL_WINJOYSTICK) {
3613 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3614 kc_mouse[i].value = kconfig_settings[Config_control_type][i];
3615 if (kc_mouse[i].type == BT_INVERT ) {
3616 if (kc_mouse[i].value!=1)
3617 kc_mouse[i].value = 0;
3618 kconfig_settings[Config_control_type][i] = kc_mouse[i].value;
3621 } else if (Config_control_type == CONTROL_WINJOYSTICK) {
3622 for (i=0; i<NUM_OTHER_CONTROLS; i++ ) {
3623 kc_superjoy[i].value = kconfig_settings[Config_control_type][i];
3624 if (kc_superjoy[i].type == BT_INVERT ) {
3625 if (kc_superjoy[i].value!=1)
3626 kc_superjoy[i].value = 0;
3627 kconfig_settings[Config_control_type][i] = kc_superjoy[i].value;
3633 for (i=0; i<NUM_D2X_CONTROLS; i++ )
3634 kc_d2x[i].value = kconfig_d2x_settings[i];
3638 #if 0 //ndef MACINTOSH // no mac support for vr headset
3640 void kconfig_center_headset()
3644 vfx_center_headset();
3646 // } else if (iglasses_headset_installed) {
3647 // } else if (Victor_headset_installed) {
3653 #endif // end of #ifndef MACINTOSH for kconfig_center_headset
3655 void CybermouseAdjust ()
3657 /* if ( Player_num > -1 ) {
3658 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
3659 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
3660 Auto_leveling_on = 0;
3662 if ( kc_external_version > 0 ) {
3663 vms_matrix tempm, ViewMatrix;
3664 vms_angvec * Kconfig_abs_movement;
3667 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info));
3669 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
3670 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
3671 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
3672 Objects[Players[Player_num].objnum].orient = ViewMatrix;
3674 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
3675 if (oem_message[0] != '\0' )
3676 HUD_init_message( oem_message );
3680 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
3681 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
3682 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
3683 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
3684 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
3685 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
3686 // Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
3687 // Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
3688 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
3689 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
3690 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
3691 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
3692 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
3693 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
3694 // Controls.automap_down_count += kc_external_control->automap_down_count;
3695 // Controls.automap_state |= kc_external_control->automap_state;
3698 char GetKeyValue (char key)
3700 mprintf ((0,"Returning %c!\n",kc_keyboard[(int)key].value));
3701 return (kc_keyboard[(int)key].value);
3704 #if !defined(MACINTOSH)
3707 extern object *obj_find_first_of_type (int);
3708 void kconfig_read_external_controls()
3713 if ( !kc_enable_external_control ) return;
3715 if ( kc_external_version == 0 )
3716 memset( kc_external_control, 0, sizeof(ext_control_info));
3717 else if ( kc_external_version > 0 ) {
3719 if (kc_external_version>=4)
3720 memset( kc_external_control, 0, sizeof(advanced_ext_control_info));
3721 else if (kc_external_version>0)
3722 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 );
3723 else if (kc_external_version>2)
3724 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof(vms_matrix) +4 );
3726 if ( kc_external_version > 1 ) {
3727 // Write ship pos and angles to external controls...
3728 ubyte *temp_ptr = (ubyte *)kc_external_control;
3729 vms_vector *ship_pos;
3730 vms_matrix *ship_orient;
3731 memset( kc_external_control, 0, sizeof(ext_control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) );
3732 temp_ptr += sizeof(ext_control_info) + sizeof(vms_angvec) + 64;
3733 ship_pos = (vms_vector *)temp_ptr;
3734 temp_ptr += sizeof(vms_vector);
3735 ship_orient = (vms_matrix *)temp_ptr;
3736 // Fill in ship postion...
3737 *ship_pos = Objects[Players[Player_num].objnum].pos;
3738 // Fill in ship orientation...
3739 *ship_orient = Objects[Players[Player_num].objnum].orient;
3741 if (kc_external_version>=4)
3743 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
3745 temp_ptr->headlight_state=(Players[Player_num].flags & PLAYER_FLAGS_HEADLIGHT_ON);
3746 temp_ptr->primary_weapon_flags=Players[Player_num].primary_weapon_flags;
3747 temp_ptr->secondary_weapon_flags=Players[Player_num].secondary_weapon_flags;
3748 temp_ptr->current_primary_weapon=Primary_weapon;
3749 temp_ptr->current_secondary_weapon=Secondary_weapon;
3751 temp_ptr->current_guidebot_command=Escort_goal_object;
3753 temp_ptr->force_vector=ExtForceVec;
3754 temp_ptr->force_matrix=ExtApplyForceMatrix;
3756 temp_ptr->joltinfo[i]=ExtJoltInfo[i];
3758 temp_ptr->x_vibrate_info[i]=ExtXVibrateInfo[i];
3759 temp_ptr->x_vibrate_clear=ExtXVibrateClear;
3760 temp_ptr->game_status=ExtGameStatus;
3762 memset ((void *)&ExtForceVec,0,sizeof(vms_vector));
3763 memset ((void *)&ExtApplyForceMatrix,0,sizeof(vms_matrix));
3768 ExtXVibrateInfo[i]=0;
3773 if ( Automap_active ) // (If in automap...)
3774 kc_external_control->automap_state = 1;
3775 //memset(&r,0,sizeof(r));
3779 int386 ( kc_external_intno, &r, &r); // Read external info...
3783 if ( Player_num > -1 ) {
3784 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning
3785 Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side.
3786 Auto_leveling_on = 0;
3788 if ( kc_external_version > 0 ) {
3789 vms_matrix tempm, ViewMatrix;
3790 vms_angvec * Kconfig_abs_movement;
3793 Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(ext_control_info));
3795 if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) {
3796 vm_angles_2_matrix(&tempm,Kconfig_abs_movement);
3797 vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm);
3798 Objects[Players[Player_num].objnum].orient = ViewMatrix;
3800 oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec));
3801 if (oem_message[0] != '\0' )
3802 HUD_init_message( oem_message );
3806 Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime);
3807 Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime);
3808 Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime);
3809 Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime);
3810 Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime);
3811 Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime);
3812 Controls.rear_view_down_count += kc_external_control->rear_view_down_count;
3813 Controls.rear_view_down_state |= kc_external_control->rear_view_down_state;
3814 Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count;
3815 Controls.fire_primary_state |= kc_external_control->fire_primary_state;
3816 Controls.fire_secondary_state |= kc_external_control->fire_secondary_state;
3817 Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count;
3818 Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count;
3819 Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count;
3820 Controls.automap_down_count += kc_external_control->automap_down_count;
3821 Controls.automap_state |= kc_external_control->automap_state;
3823 if (kc_external_version>=3)
3825 ubyte *temp_ptr = (ubyte *)kc_external_control;
3826 temp_ptr += (sizeof(ext_control_info) + sizeof(vms_angvec) + 64 + sizeof(vms_vector) + sizeof (vms_matrix));
3829 Controls.cycle_primary_count=(*(temp_ptr));
3831 Controls.cycle_secondary_count=(*(temp_ptr+1));
3834 Controls.afterburner_state=(*(temp_ptr+2));
3836 Controls.headlight_count=(*(temp_ptr+3));
3838 if (kc_external_version>=4)
3841 advanced_ext_control_info *temp_ptr=(advanced_ext_control_info *)kc_external_control;
3844 if (temp_ptr->keyboard[i])
3847 if (temp_ptr->Reactor_blown)
3849 if (Game_mode & GM_MULTI)
3850 net_destroy_controlcen (obj_find_first_of_type (OBJ_CNTRLCEN));
3852 do_controlcen_destroyed_stuff(obj_find_first_of_type (OBJ_CNTRLCEN));