/* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. */ /* * $Source: /cvsroot/dxx-rebirth/d1x-rebirth/main/kconfig.c,v $ * $Revision: 1.1.1.1 $ * $Author: zicodxx $ * $Date: 2006/03/17 19:44:27 $ * * Routines to configure keyboard, joystick, etc.. * * $Log: kconfig.c,v $ * Revision 1.1.1.1 2006/03/17 19:44:27 zicodxx * initial import * * Revision 1.9 2000/10/27 04:08:33 donut * allow up to 16 mouse buttons to be used (dependant upon arch supporting that many) * * Revision 1.8 2000/10/27 02:57:28 donut * key/joy/etc config boxes and text appear in the right places when modifying config * * Revision 1.7 2000/10/17 22:14:29 sekmu * mingw version joystick 0 movement bug fixed * * Revision 1.6 2000/04/19 21:27:56 sekmu * movable death-cam from WraithX * * Revision 1.5 1999/11/21 13:00:08 donut * Changed screen_mode format. Now directly encodes res into a 32bit int, rather than using arbitrary values. * * Revision 1.4 1999/11/20 10:05:17 donut * variable size menu patch from Jan Bobrowski. Variable menu font size support and a bunch of fixes for menus that didn't work quite right, by me (MPM). * * Revision 1.3 1999/10/14 20:33:06 donut * alpha fixes from Falk Hueffner * * Revision 1.2 1999/09/06 07:01:37 sekmu * better dos jostick config menu * * Revision 1.1.1.1 1999/06/14 22:08:14 donut * Import of d1x 1.37 source. * * Revision 2.11 1995/08/23 16:08:04 john * Added version 2 of external controls that passes the ship * position and orientation the drivers. * * Revision 2.10 1995/07/07 16:48:01 john * Fixed bug with new interface. * * Revision 2.9 1995/07/03 15:02:32 john * Added new version of external controls for Cybermouse absolute position. * * Revision 2.8 1995/06/30 12:30:28 john * Added -Xname command line. * * Revision 2.7 1995/03/30 16:36:56 mike * text localization. * * Revision 2.6 1995/03/21 14:39:31 john * Ifdef'd out the NETWORK code. * * Revision 2.5 1995/03/16 10:53:07 john * Move VFX center to Shift+Z instead of Enter because * it conflicted with toggling HUD on/off. * * Revision 2.4 1995/03/10 13:47:24 john * Added head tracking sensitivity. * * Revision 2.3 1995/03/09 18:07:06 john * Fixed bug with iglasses tracking not "centering" right. * Made VFX have bright headlight lighting. * * Revision 2.2 1995/03/08 15:32:39 john * Made VictorMaxx head tracking use Greenleaf code. * * Revision 2.1 1995/03/06 15:23:31 john * New screen techniques. * * Revision 2.0 1995/02/27 11:29:26 john * New version 2.0, which has no anonymous unions, builds with * Watcom 10.0, and doesn't require parsing BITMAPS.TBL. * * Revision 1.105 1995/02/22 14:11:58 allender * remove anonymous unions from object structure * * Revision 1.104 1995/02/13 12:01:56 john * Fixed bug with buggin not mmaking player faster. * * Revision 1.103 1995/02/09 22:00:46 john * Added i-glasses tracking. * * Revision 1.102 1995/01/24 21:25:47 john * Fixed bug with slide/bank on not working with * Cyberman heading., * * Revision 1.101 1995/01/24 16:09:56 john * Fixed bug with Wingman extreme customize text overwriting title. * * Revision 1.100 1995/01/24 12:37:46 john * Made Esc exit key define menu. * * Revision 1.99 1995/01/23 23:54:43 matt * Made keypad enter work * * Revision 1.98 1995/01/23 16:42:00 john * Made the external controls always turn banking off, leveling off * and passed automap state thru to the tsr. * * Revision 1.97 1995/01/12 11:41:33 john * Added external control reading. * * Revision 1.96 1995/01/05 10:43:58 mike * Handle case when timer_get_fixed_seconds() goes negative. Happens at 9.1 * hours. Previously, joystick would stop functioning. Now will work. * * Revision 1.95 1994/12/29 11:17:38 john * Took out some warnings and mprintf. * * Revision 1.94 1994/12/29 11:07:41 john * Fixed Thrustmaster and Logitech Wingman extreme * Hat by reading the y2 axis during the center stage * of the calibration, and using 75, 50, 27, and 3 % * as values for the 4 positions. * * Revision 1.93 1994/12/27 12:16:20 john * Fixed bug with slide on not working with joystick or mouse buttons. * * Revision 1.92 1994/12/20 10:34:15 john * Made sensitivity work for mouse & joystick and made * it only affect, pitch, heading, and roll. * * Revision 1.91 1994/12/16 00:11:23 matt * Made delete key act normally when debug out * * Revision 1.90 1994/12/14 17:41:15 john * Added more buttons so that Yoke would work. * * Revision 1.89 1994/12/13 17:25:35 allender * Added Assert for bogus time for joystick reading. * * Revision 1.88 1994/12/13 14:48:01 john * Took out some debugging mprintf's * * * Revision 1.87 1994/12/13 14:43:02 john * Took out the code in kconfig to build direction array. * Called kc_set_controls after selecting a new control type. * * Revision 1.86 1994/12/13 01:11:32 john * Fixed bug with message clearing overwriting * right border. * * Revision 1.85 1994/12/12 00:35:58 john * Added or thing for keys. * * Revision 1.84 1994/12/09 17:08:06 john * Made mouse a bit less sensitive. * * Revision 1.83 1994/12/09 16:04:00 john * Increased mouse sensitivity. * * Revision 1.82 1994/12/09 00:41:26 mike * fix hang in automap print screen * * Revision 1.81 1994/12/08 11:50:37 john * Made strcpy only copy corect number of chars,. * * Revision 1.80 1994/12/07 16:16:06 john * Added command to check to see if a joystick axes has been used. * * Revision 1.79 1994/12/07 14:52:28 yuan * Localization 492 * * Revision 1.78 1994/12/07 13:37:40 john * Made the joystick thrust work in reverse. * * Revision 1.77 1994/12/07 11:28:24 matt * Did a little localization support * * Revision 1.76 1994/12/04 12:30:03 john * Made the Thrustmaster stick read every frame, not every 10 frames, * because it uses analog axis as buttons. * * Revision 1.75 1994/12/03 22:35:25 yuan * Localization 412 * * Revision 1.74 1994/12/03 15:39:24 john * Made numeric keypad move in conifg. * * Revision 1.73 1994/12/01 16:23:39 john * Fixed include mistake. * * Revision 1.72 1994/12/01 16:07:57 john * Fixed bug that disabled joystick in automap because it used gametime, which is * paused during automap. Fixed be used timer_Get_fixed_seconds instead of GameTime. * * Revision 1.71 1994/12/01 12:30:49 john * Made Ctrl+D delete, not Ctrl+E * * Revision 1.70 1994/12/01 11:52:52 john * Added default values for GamePad. * * Revision 1.69 1994/11/30 00:59:12 mike * optimizations. * * Revision 1.68 1994/11/29 03:45:50 john * Added joystick sensitivity; Added sound channels to detail menu. Removed -maxchannels * command line arg. * * Revision 1.67 1994/11/27 23:13:44 matt * Made changes for new mprintf calling convention * * Revision 1.66 1994/11/27 19:52:12 matt * Made screen shots work in a few more places * * Revision 1.65 1994/11/22 16:54:50 mike * autorepeat on missiles. * * Revision 1.64 1994/11/21 11:16:17 rob * Changed calls to GameLoop to calls to multi_menu_poll and changed * conditions under which they are called. * * Revision 1.63 1994/11/19 15:14:48 mike * remove unused code and data * * Revision 1.62 1994/11/18 23:37:56 john * Changed some shorts to ints. * * Revision 1.61 1994/11/17 13:36:35 rob * Added better network hook in kconfig menu. * * Revision 1.60 1994/11/14 20:09:13 john * Made Tab be default for automap. * * Revision 1.59 1994/11/13 16:34:07 matt * Fixed victormaxx angle conversions * * Revision 1.58 1994/11/12 14:47:05 john * Added support for victor head tracking. * * Revision 1.57 1994/11/08 15:14:55 john * Added more calls so net doesn't die in net game. * * Revision 1.56 1994/11/07 14:01:07 john * Changed the gamma correction sequencing. * * Revision 1.55 1994/11/01 16:40:08 john * Added Gamma correction. * * Revision 1.54 1994/10/25 23:09:26 john * Made the automap key configurable. * * Revision 1.53 1994/10/25 13:11:59 john * Made keys the way Adam speced 'em for final game. * * Revision 1.52 1994/10/24 17:44:22 john * Added stereo channel reversing. * * Revision 1.51 1994/10/22 13:23:18 john * Made default rear view key be R. * * Revision 1.50 1994/10/22 13:20:09 john * Took out toggle primary/secondary weapons. Fixed black * background for 'axes' and 'buttons' text. * * Revision 1.49 1994/10/21 15:20:15 john * Made PrtScr do screen dump, not F2. * * Revision 1.48 1994/10/21 13:41:36 john * Allowed F2 to screen dump. * * Revision 1.47 1994/10/17 13:07:05 john * Moved the descent.cfg info into the player config file. * * Revision 1.46 1994/10/14 15:30:22 john * Added Cyberman default positions. * * Revision 1.45 1994/10/14 15:24:54 john * Made Cyberman work with config. * * Revision 1.44 1994/10/14 12:46:04 john * Added the ability to reset all to default. * * Revision 1.43 1994/10/14 12:18:31 john * Made mouse invert axis always be 0 or 1. * * Revision 1.42 1994/10/14 12:16:03 john * Changed code so that by doing DEL+F12 saves the current kconfig * values as default. Added support for drop_bomb key. Took out * unused slots for keyboard. Made keyboard use control_type of 0 * save slots. * * Revision 1.41 1994/10/13 21:27:02 john * Made axis invert value always be 0 or 1. n * * Revision 1.40 1994/10/13 20:18:15 john * Added some more system keys, such as F? and CAPSLOCK. * * Revision 1.39 1994/10/13 19:22:29 john * Added separate config saves for different devices. * Made all the devices work together better, such as mice won't * get read when you're playing with the joystick. * * Revision 1.38 1994/10/13 15:41:57 mike * Remove afterburner. * */ #ifdef RCS static char rcsid[] = "$Id: kconfig.c,v 1.1.1.1 2006/03/17 19:44:27 zicodxx Exp $"; #endif #define TABLE_CREATION #include #include #include #include #include #ifdef __MSDOS__ #include #include #endif #include "error.h" #include "types.h" #include "gr.h" #include "mono.h" #include "key.h" #include "palette.h" #include "game.h" #include "gamefont.h" #include "iff.h" #include "u_mem.h" #include "joy.h" #include "mouse.h" #include "kconfig.h" #include "gauges.h" #include "joydefs.h" #include "render.h" #include "digi.h" #include "newmenu.h" #include "endlevel.h" #include "multi.h" #include "timer.h" #include "text.h" #include "player.h" #include "menu.h" #include "args.h" #include "key.h" //added on 2/4/99 by Victor Rachels for new weapon selectable keys #include "reorder.h" //end this section addition //added on 9/2/98 by Matt Mueller #include "d_delay.h" //end addition -MM //added on 3/12/99 by VR to screw with sporbs #include "physics.h" //end this section addition - VR //added on 4/16/99 by VR to add alt vulcan fire #include "vlcnfire.h" //end this section addition - VR // Array used to 'blink' the cursor while waiting for a keypress. byte 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 }; //char * invert_text[2] = { "N", "Y" }; //char * joybutton_text[28] = { "BTN 1", "BTN 2", "BTN 3", "BTN 4", "", "TRIG", "LEFT", "HAT ", "RIGHT", "", "", "HAT ", "MID", "", "", "HAT ", "", "", "", "HAT ", "TRIG", "LEFT", "RIGHT", "", "UP","DOWN","LEFT", "RIGHT" }; //char * joyaxis_text[4] = { "X1", "Y1", "X2", "Y2" }; //char * mouseaxis_text[2] = { "L/R", "F/B" }; //char * mousebutton_text[3] = { "Left", "Right", "Mid" }; int invert_text[2] = { TNUM_N, TNUM_Y }; #ifndef __LINUX__ int joybutton_text[28] = { TNUM_BTN_1, TNUM_BTN_2, TNUM_BTN_3, TNUM_BTN_4, -1, TNUM_TRIG, TNUM_LEFT, TNUM_HAT_L, TNUM_RIGHT, -1, TNUM_HAT2_D, TNUM_HAT_R, TNUM_MID, -1, TNUM_HAT2_R, TNUM_HAT_U, TNUM_HAT2_L, -1, TNUM_HAT2_U, TNUM_HAT_D, TNUM_TRIG, TNUM_LEFT, TNUM_RIGHT, -1, TNUM_UP, TNUM_DOWN, TNUM_LEFT, TNUM_RIGHT }; int joyaxis_text[4] = { TNUM_X1, TNUM_Y1, TNUM_X2, TNUM_Y2 }; #endif int mouseaxis_text[2] = { TNUM_L_R, TNUM_F_B }; int mousebutton_text[3] = { TNUM_LEFT, TNUM_RIGHT, TNUM_MID }; char * mousebutton_textra[13] = { "M4", "M5", "M6", "M7", "M8", "M9", "M10","M11","M12","M13","M14","M15","M16" };//text for buttons above 3. -MPM //added/removed by Victor Rachels for adding rebindable keys for these // KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0 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 }; //extern void GameLoop(int, int ); control_info Controls; ubyte Config_digi_volume = 16; ubyte Config_midi_volume = 16; ubyte Config_control_type = 0; ubyte Config_channels_reversed = 0; ubyte Config_joystick_sensitivity = 8; fix Cruise_speed=0; //added/edited on 11/01/98 by Victor Rachels for primary/secondary autotoggle int Allow_primary_cycle=1; int Allow_secondary_cycle=1; //end this section edit - Victor Rachels #define BT_KEY 0 #define BT_MOUSE_BUTTON 1 #define BT_MOUSE_AXIS 2 #define BT_JOY_BUTTON 3 #define BT_JOY_AXIS 4 #define BT_INVERT 5 char *btype_text[] = { "BT_KEY", "BT_MOUSE_BUTTON", "BT_MOUSE_AXIS", "BT_JOY_BUTTON", "BT_JOY_AXIS", "BT_INVERT" }; #define INFO_Y (188*scale) //scale to res. -MPM typedef struct kc_item { short id; // The id of this item short x, y; short w1; short w2; short u,d,l,r; short text_num1; ubyte type; ubyte value; // what key,button,etc } kc_item; int Num_items=23; kc_item *All_items; ubyte kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS]; //added on 2/4/99 by Victor Rachels to add d1x new keys ubyte kconfig_d1x_settings[MAX_D1X_CONTROLS]; //end this section addition - VR //----------- WARNING!!!!!!! ------------------------------------------- // THESE NEXT FOUR BLOCKS OF DATA ARE GENERATED BY PRESSING DEL+F12 WHEN // IN THE KEYBOARD CONFIG SCREEN. BASICALLY, THAT PROCEDURE MODIFIES THE // U,D,L,R FIELDS OF THE ARRAYS AND DUMPS THE NEW ARRAYS INTO KCONFIG.COD //------------------------------------------------------------------------- ubyte default_kconfig_settings[CONTROL_MAX_TYPES][MAX_CONTROLS] = { {KEY_UP, KEY_PAD8, KEY_DOWN, KEY_PAD2, KEY_LEFT, KEY_PAD4, KEY_RIGHT, KEY_PAD6, KEY_LALT, 255, 255, KEY_PAD1, 255, KEY_PAD3, 255, KEY_PADMINUS, 255, KEY_PADPLUS, 255, 255, KEY_Q, KEY_PAD7, KEY_E, KEY_PAD9, KEY_LCTRL, KEY_RCTRL, KEY_SPACEBAR, 255, KEY_F, 255, KEY_A, 255, KEY_Z, 255, KEY_B, 255, KEY_R, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff, KEY_TAB, 0xff,0xff,0xff,0xff,0xff, //added/edited on 9/3/98 by Victor Rachels to fix the default keysetting 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, //end this section change - Victor Rachels {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, //added/edited on 9/3/98 by Victor Rachels to fix the default keysetting 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, //end this section change - Victor Rachels {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, //added/edited on 9/3/98 by Victor Rachels to fix the default keysetting 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, //end this section change - Victor Rachels {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, //added/edited on 9/3/98 by Victor Rachels to fix the default keysetting 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, //end this section change - Victor Rachels {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, //added/edited on 9/3/98 by Victor Rachels to fix the default keysetting 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, //end this section change - Victor Rachels {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, //added/edited on 9/3/98 by Victor Rachels to fix the default keysetting 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, //end this section change - Victor Rachels {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, //added/edited on 9/3/98 by Victor Rachels to fix the default keysetting 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, //end this section change - Victor Rachels }; //added on 2/4/99 by Victor Rachels to add new keys system ubyte default_kconfig_d1x_settings[MAX_D1X_CONTROLS] = { 0x2 ,0xff,0x3 ,0xff,0x4 ,0xff,0x5 ,0xff,0x6 ,0xff,0x7 ,0xff,0x8 ,0xff,0x9 , 0xff,0xa ,0xff,0xb ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }; //end this section addition - VR kc_item kc_keyboard[NUM_ALL_KEY_CONTROLS] = { { 0, 15, 49, 71, 26, 43, 2, 23, 1,TNUM_PITCH_FORWARD, BT_KEY, 255 }, { 1, 15, 49,100, 26, 22, 3, 0, 24,TNUM_PITCH_FORWARD, BT_KEY, 255 }, { 2, 15, 57, 71, 26, 0, 4, 25, 3,TNUM_PITCH_BACKWARD, BT_KEY, 255 }, { 3, 15, 57,100, 26, 1, 5, 2, 26,TNUM_PITCH_BACKWARD, BT_KEY, 255 }, { 4, 15, 65, 71, 26, 2, 6, 27, 5,TNUM_TURN_LEFT, BT_KEY, 255 }, { 5, 15, 65,100, 26, 3, 7, 4, 28,TNUM_TURN_LEFT, BT_KEY, 255 }, { 6, 15, 73, 71, 26, 4, 8, 29, 7,TNUM_TURN_RIGHT, BT_KEY, 255 }, { 7, 15, 73,100, 26, 5, 9, 6, 34,TNUM_TURN_RIGHT, BT_KEY, 255 }, { 8, 15, 85, 71, 26, 6, 10, 35, 9,TNUM_SLIDE_ON, BT_KEY, 255 }, { 9, 15, 85,100, 26, 7, 11, 8, 36,TNUM_SLIDE_ON, BT_KEY, 255 }, { 10, 15, 93, 71, 26, 8, 12, 37, 11,TNUM_SLIDE_LEFT, BT_KEY, 255 }, { 11, 15, 93,100, 26, 9, 13, 10, 44,TNUM_SLIDE_LEFT, BT_KEY, 255 }, { 12, 15,101, 71, 26, 10, 14, 45, 13,TNUM_SLIDE_RIGHT, BT_KEY, 255 }, { 13, 15,101,100, 26, 11, 15, 12, 30,TNUM_SLIDE_RIGHT, BT_KEY, 255 }, { 14, 15,109, 71, 26, 12, 16, 31, 15,TNUM_SLIDE_UP, BT_KEY, 255 }, { 15, 15,109,100, 26, 13, 17, 14, 32,TNUM_SLIDE_UP, BT_KEY, 255 }, { 16, 15,117, 71, 26, 14, 18, 33, 17,TNUM_SLIDE_DOWN, BT_KEY, 255 }, { 17, 15,117,100, 26, 15, 19, 16, 38,TNUM_SLIDE_DOWN, BT_KEY, 255 }, { 18, 15,129, 71, 26, 16, 20, 39, 19,TNUM_BANK_ON, BT_KEY, 255 }, { 19, 15,129,100, 26, 17, 21, 18, 40,TNUM_BANK_ON, BT_KEY, 255 }, { 20, 15,137, 71, 26, 18, 22, 41, 21,TNUM_BANK_LEFT, BT_KEY, 255 }, { 21, 15,137,100, 26, 19, 23, 20, 42,TNUM_BANK_LEFT, BT_KEY, 255 }, { 22, 15,145, 71, 26, 20, 1, 43, 23,TNUM_BANK_RIGHT, BT_KEY, 255 }, { 23, 15,145,100, 26, 21, 24, 22, 0,TNUM_BANK_RIGHT, BT_KEY, 255 }, { 24,158, 49, 83, 26, 23, 26, 1, 25,TNUM_FIRE_PRIMARY, BT_KEY, 255 }, { 25,158, 49,112, 26, 42, 27, 24, 2,TNUM_FIRE_PRIMARY, BT_KEY, 255 }, { 26,158, 57, 83, 26, 24, 28, 3, 27,TNUM_FIRE_SECONDARY, BT_KEY, 255 }, { 27,158, 57,112, 26, 25, 29, 26, 4,TNUM_FIRE_SECONDARY, BT_KEY, 255 }, { 28,158, 65, 83, 26, 26, 34, 5, 29,TNUM_FIRE_FLARE, BT_KEY, 255 }, { 29,158, 65,112, 26, 27, 35, 28, 6,TNUM_FIRE_FLARE, BT_KEY, 255 }, { 30,158,105, 83, 26, 44, 32, 13, 31,TNUM_ACCELERATE, BT_KEY, 255 }, { 31,158,105,112, 26, 45, 33, 30, 14,TNUM_ACCELERATE, BT_KEY, 255 }, { 32,158,113, 83, 26, 30, 38, 15, 33,TNUM_REVERSE, BT_KEY, 255 }, { 33,158,113,112, 26, 31, 39, 32, 16,TNUM_REVERSE, BT_KEY, 255 }, { 34,158, 73, 83, 26, 28, 36, 7, 35,TNUM_DROP_BOMB, BT_KEY, 255 }, { 35,158, 73,112, 26, 29, 37, 34, 8,TNUM_DROP_BOMB, BT_KEY, 255 }, { 36,158, 85, 83, 26, 34, 44, 9, 37,TNUM_REAR_VIEW, BT_KEY, 255 }, { 37,158, 85,112, 26, 35, 45, 36, 10,TNUM_REAR_VIEW, BT_KEY, 255 }, { 38,158,125, 83, 26, 32, 40, 17, 39,TNUM_CRUISE_FASTER, BT_KEY, 255 }, { 39,158,125,112, 26, 33, 41, 38, 18,TNUM_CRUISE_FASTER, BT_KEY, 255 }, { 40,158,133, 83, 26, 38, 42, 19, 41,TNUM_CRUISE_SLOWER, BT_KEY, 255 }, { 41,158,133,112, 26, 39, 43, 40, 20,TNUM_CRUISE_SLOWER, BT_KEY, 255 }, { 42,158,141, 83, 26, 40, 25, 21, 43,TNUM_CRUISE_OFF, BT_KEY, 255 }, { 43,158,141,112, 26, 41, 0, 42, 22,TNUM_CRUISE_OFF, BT_KEY, 255 }, { 44,158, 93, 83, 26, 36, 30, 11, 45,TNUM_AUTOMAP, BT_KEY, 255 }, { 45,158, 93,112, 26, 37, 31, 44, 12,TNUM_AUTOMAP, BT_KEY, 255 }, }; kc_item kc_joystick[NUM_ALL_OTHER_CONTROLS] = { { 0, 25, 46, 85, 26, 15, 1, 24, 5,TNUM_FIRE_PRIMARY, BT_JOY_BUTTON, 255 }, { 1, 25, 54, 85, 26, 0, 4, 5, 6,TNUM_FIRE_SECONDARY, BT_JOY_BUTTON, 255 }, { 2, 25, 82, 85, 26, 26, 3, 9, 3,TNUM_ACCELERATE, BT_JOY_BUTTON, 255 }, { 3, 25, 90, 85, 26, 2, 25, 2, 10,TNUM_REVERSE, BT_JOY_BUTTON, 255 }, { 4, 25, 62, 85, 26, 1, 26, 6, 7,TNUM_FIRE_FLARE, BT_JOY_BUTTON, 255 }, { 5,180, 46, 59, 26, 23, 6, 0, 1,TNUM_SLIDE_ON, BT_JOY_BUTTON, 255 }, { 6,180, 54, 59, 26, 5, 7, 1, 4,TNUM_SLIDE_LEFT, BT_JOY_BUTTON, 255 }, { 7,180, 62, 59, 26, 6, 8, 4, 26,TNUM_SLIDE_RIGHT, BT_JOY_BUTTON, 255 }, { 8,180, 70, 59, 26, 7, 9, 26, 9,TNUM_SLIDE_UP, BT_JOY_BUTTON, 255 }, { 9,180, 78, 59, 26, 8, 10, 8, 2,TNUM_SLIDE_DOWN, BT_JOY_BUTTON, 255 }, { 10,180, 90, 59, 26, 9, 11, 3, 11,TNUM_BANK_ON, BT_JOY_BUTTON, 255 }, { 11,180, 98, 59, 26, 10, 12, 10, 25,TNUM_BANK_LEFT, BT_JOY_BUTTON, 255 }, { 12,180,106, 59, 26, 11, 18, 25, 13,TNUM_BANK_RIGHT, BT_JOY_BUTTON, 255 }, { 13, 22,146, 51, 26, 24, 15, 12, 14,TNUM_PITCH_UD, BT_JOY_AXIS, 255 }, { 14, 22,146, 99, 8, 25, 16, 13, 17,TNUM_PITCH_UD, BT_INVERT, 255 }, { 15, 22,154, 51, 26, 13, 0, 18, 16,TNUM_TURN_LR, BT_JOY_AXIS, 255 }, { 16, 22,154, 99, 8, 14, 17, 15, 19,TNUM_TURN_LR, BT_INVERT, 255 }, { 17,164,146, 58, 26, 16, 19, 14, 18,TNUM_SLIDE_LR, BT_JOY_AXIS, 255 }, { 18,164,146,106, 8, 12, 20, 17, 15,TNUM_SLIDE_LR, BT_INVERT, 255 }, { 19,164,154, 58, 26, 17, 21, 16, 20,TNUM_SLIDE_UD, BT_JOY_AXIS, 255 }, { 20,164,154,106, 8, 18, 22, 19, 21,TNUM_SLIDE_UD, BT_INVERT, 255 }, { 21,164,162, 58, 26, 19, 23, 20, 22,TNUM_BANK_LR, BT_JOY_AXIS, 255 }, { 22,164,162,106, 8, 20, 24, 21, 23,TNUM_BANK_LR, BT_INVERT, 255 }, { 23,164,174, 58, 26, 21, 5, 22, 24,TNUM_THROTTLE, BT_JOY_AXIS, 255 }, { 24,164,174,106, 8, 22, 13, 23, 0,TNUM_THROTTLE, BT_INVERT, 255 }, { 25, 25,102, 85, 26, 3, 14, 11, 12,TNUM_REAR_VIEW, BT_JOY_BUTTON, 255 }, { 26, 25, 70, 85, 26, 4, 2, 7, 8,TNUM_DROP_BOMB, BT_JOY_BUTTON, 255 }, }; kc_item kc_mouse[NUM_OTHER_CONTROLS] = { { 0, 25, 46, 85, 26, 12, 1, 24, 5,TNUM_FIRE_PRIMARY, BT_MOUSE_BUTTON, 255 }, { 1, 25, 54, 85, 26, 0, 4, 5, 6,TNUM_FIRE_SECONDARY, BT_MOUSE_BUTTON, 255 }, { 2, 25, 85, 85, 26, 26, 3, 9, 10,TNUM_ACCELERATE, BT_MOUSE_BUTTON, 255 }, { 3, 25, 93, 85, 26, 2, 25, 10, 11,TNUM_REVERSE, BT_MOUSE_BUTTON, 255 }, { 4, 25, 62, 85, 26, 1, 26, 6, 7,TNUM_FIRE_FLARE, BT_MOUSE_BUTTON, 255 }, { 5,180, 46, 59, 26, 24, 6, 0, 1,TNUM_SLIDE_ON, BT_MOUSE_BUTTON, 255 }, { 6,180, 54, 59, 26, 5, 7, 1, 4,TNUM_SLIDE_LEFT, BT_MOUSE_BUTTON, 255 }, { 7,180, 62, 59, 26, 6, 8, 4, 26,TNUM_SLIDE_RIGHT, BT_MOUSE_BUTTON, 255 }, { 8,180, 70, 59, 26, 7, 9, 26, 9,TNUM_SLIDE_UP, BT_MOUSE_BUTTON, 255 }, { 9,180, 78, 59, 26, 8, 10, 8, 2,TNUM_SLIDE_DOWN, BT_MOUSE_BUTTON, 255 }, { 10,180, 90, 59, 26, 9, 11, 2, 3,TNUM_BANK_ON, BT_MOUSE_BUTTON, 255 }, { 11,180, 98, 59, 26, 10, 12, 3, 12,TNUM_BANK_LEFT, BT_MOUSE_BUTTON, 255 }, { 12,180,106, 59, 26, 11, 0, 11, 25,TNUM_BANK_RIGHT, BT_MOUSE_BUTTON, 255 }, { 13,103,138, 58, 26, 25, 15, 25, 14,TNUM_PITCH_UD, BT_MOUSE_AXIS, 255 }, { 14,103,138,106, 8, 23, 16, 13, 15,TNUM_PITCH_UD, BT_INVERT, 255 }, { 15,103,146, 58, 26, 13, 17, 14, 16,TNUM_TURN_LR, BT_MOUSE_AXIS, 255 }, { 16,103,146,106, 8, 14, 18, 15, 17,TNUM_TURN_LR, BT_INVERT, 255 }, { 17,103,154, 58, 26, 15, 19, 16, 18,TNUM_SLIDE_LR, BT_MOUSE_AXIS, 255 }, { 18,103,154,106, 8, 16, 20, 17, 19,TNUM_SLIDE_LR, BT_INVERT, 255 }, { 19,103,162, 58, 26, 17, 21, 18, 20,TNUM_SLIDE_UD, BT_MOUSE_AXIS, 255 }, { 20,103,162,106, 8, 18, 22, 19, 21,TNUM_SLIDE_UD, BT_INVERT, 255 }, { 21,103,170, 58, 26, 19, 23, 20, 22,TNUM_BANK_LR, BT_MOUSE_AXIS, 255 }, { 22,103,170,106, 8, 20, 24, 21, 23,TNUM_BANK_LR, BT_INVERT, 255 }, { 23,103,182, 58, 26, 21, 14, 22, 24,TNUM_THROTTLE, BT_MOUSE_AXIS, 255 }, { 24,103,182,106, 8, 22, 5, 23, 0,TNUM_THROTTLE, BT_INVERT, 255 }, { 25, 25,109, 85, 26, 3, 13, 12, 13,TNUM_REAR_VIEW, BT_MOUSE_BUTTON, 255 }, { 26, 25, 70, 85, 26, 4, 2, 7, 8,TNUM_DROP_BOMB, BT_MOUSE_BUTTON, 255 }, }; //added on 2/4/99 by Victor Rachels to add d1x new keys kc_item kc_d1x[NUM_D1X_CONTROLS] = { // id,x,y,w1,w2,u,d,l,r,text_num1,type,value { 0, 15, 49, 71, 26, 27, 2, 27, 1,TNUM_PRIMARY_1, BT_KEY, 255}, { 1, 15, 49,100, 26, 26, 3, 0, 2,TNUM_PRIMARY_1, BT_JOY_BUTTON, 255}, { 2, 15, 57, 71, 26, 0, 4, 1, 3,TNUM_PRIMARY_2, BT_KEY, 255}, { 3, 15, 57,100, 26, 1, 5, 2, 4,TNUM_PRIMARY_2, BT_JOY_BUTTON, 255}, { 4, 15, 65, 71, 26, 2, 6, 3, 5,TNUM_PRIMARY_3, BT_KEY, 255}, { 5, 15, 65,100, 26, 3, 7, 4, 6,TNUM_PRIMARY_3, BT_JOY_BUTTON, 255}, { 6, 15, 73, 71, 26, 4, 8, 5, 7,TNUM_PRIMARY_4, BT_KEY, 255}, { 7, 15, 73,100, 26, 5, 9, 6, 8,TNUM_PRIMARY_4, BT_JOY_BUTTON, 255}, { 8, 15, 81, 71, 26, 6, 10, 7, 9,TNUM_PRIMARY_5, BT_KEY, 255}, { 9, 15, 81,100, 26, 7, 11, 8, 10,TNUM_PRIMARY_5, BT_JOY_BUTTON, 255}, { 10, 15, 89, 71, 26, 8, 12, 9, 11,TNUM_SECONDARY_1, BT_KEY, 255}, { 11, 15, 89,100, 26, 9, 13, 10, 12,TNUM_SECONDARY_1, BT_JOY_BUTTON, 255}, { 12, 15, 97, 71, 26, 10, 14, 11, 13,TNUM_SECONDARY_2, BT_KEY, 255}, { 13, 15, 97,100, 26, 11, 15, 12, 14,TNUM_SECONDARY_2, BT_JOY_BUTTON, 255}, { 14, 15,105, 71, 26, 12, 16, 13, 15,TNUM_SECONDARY_3, BT_KEY, 255}, { 15, 15,105,100, 26, 13, 17, 14, 16,TNUM_SECONDARY_3, BT_JOY_BUTTON, 255}, { 16, 15,113, 71, 26, 14, 18, 15, 17,TNUM_SECONDARY_4, BT_KEY, 255}, { 17, 15,113,100, 26, 15, 19, 16, 18,TNUM_SECONDARY_4, BT_JOY_BUTTON, 255}, { 18, 15,121, 71, 26, 16, 20, 17, 19,TNUM_SECONDARY_5, BT_KEY, 255}, { 19, 15,121,100, 26, 17, 21, 18, 20,TNUM_SECONDARY_5, BT_JOY_BUTTON, 255}, { 20, 15,131, 71, 26, 18, 22, 19, 21,TNUM_PRIMARY_CYCLE, BT_KEY, 255}, { 21, 15,131,100, 26, 19, 23, 20, 22,TNUM_PRIMARY_CYCLE, BT_JOY_BUTTON, 255}, { 22, 15,139, 71, 26, 20, 24, 21, 23,TNUM_SECONDARY_CYCLE, BT_KEY, 255}, { 23, 15,139,100, 26, 21, 25, 22, 24,TNUM_SECONDARY_CYCLE, BT_JOY_BUTTON, 255}, { 24, 8,147, 78, 26, 22, 26, 23, 25,TNUM_CYCLE_P_TOGGLE, BT_KEY, 255}, { 25, 8,147,107, 26, 23, 27, 24, 26,TNUM_CYCLE_P_TOGGLE, BT_JOY_BUTTON, 255}, { 26, 8,155, 78, 26, 24, 1, 25, 27,TNUM_CYCLE_S_TOGGLE, BT_KEY, 255}, { 27, 8,155,107, 26, 25, 0, 26, 0,TNUM_CYCLE_S_TOGGLE, BT_JOY_BUTTON, 255}, }; //end this section addition - VR void kc_drawitem( kc_item *item, int is_current ); void kc_change_key( kc_item * item ); void kc_change_joybutton( kc_item * item ); void kc_change_mousebutton( kc_item * item ); void kc_change_joyaxis( kc_item * item ); void kc_change_mouseaxis( kc_item * item ); void kc_change_invert( kc_item * item ); void kconfig_read_fcs( int raw_axis ); void kconfig_set_fcs_button( int btn, int button ); //the following methods added by WraithX, 4/17/00 int isJoyRotationKey(int test_key) { if ( test_key == kc_joystick[11].value || test_key == kc_joystick[12].value) { return 1; }//end if //else... return 0; }//method isJoyRotationKey int isMouseRotationKey(int test_key) { if ( test_key == kc_mouse[11].value || test_key == kc_mouse[12].value) { return 1; }//end if //else... return 0; }//method isMouseRotationKey int isKeyboardRotationKey(int test_key) { if ( test_key == kc_keyboard[0].value || test_key == kc_keyboard[1].value || test_key == kc_keyboard[2].value || test_key == kc_keyboard[3].value || test_key == kc_keyboard[4].value || test_key == kc_keyboard[5].value || test_key == kc_keyboard[6].value || test_key == kc_keyboard[7].value || test_key == kc_keyboard[20].value || test_key == kc_keyboard[21].value || test_key == kc_keyboard[22].value || test_key == kc_keyboard[23].value) { return 1; }//end if //else... return 0; }//method isKeyboardRotationKey //end addition - WraithX int kconfig_is_axes_used(int axis) { int i; for (i=0; icv_bitmap.bm_h-1; x--; if ( x < 0 ) { x = grd_curcanv->cv_bitmap.bm_w-1; } } i = find_item_at( items, nitems, x, y ); } while ( i < 0 ); return i; } int find_next_item_down( kc_item * items, int nitems, int citem ) { int x, y, i; y = items[citem].y; x = items[citem].x+items[citem].w1; do { y++; if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) { y = 0; x++; if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) { x = 0; } } i = find_item_at( items, nitems, x, y ); } while ( i < 0 ); return i; } int find_next_item_right( kc_item * items, int nitems, int citem ) { int x, y, i; y = items[citem].y; x = items[citem].x+items[citem].w1; do { x++; if ( x > grd_curcanv->cv_bitmap.bm_w-1 ) { x = 0; y++; if ( y > grd_curcanv->cv_bitmap.bm_h-1 ) { y = 0; } } i = find_item_at( items, nitems, x, y ); } while ( i < 0 ); return i; } int find_next_item_left( kc_item * items, int nitems, int citem ) { int x, y, i; y = items[citem].y; x = items[citem].x+items[citem].w1; do { x--; if ( x < 0 ) { x = grd_curcanv->cv_bitmap.bm_w-1; y--; if ( y < 0 ) { y = grd_curcanv->cv_bitmap.bm_h-1; } } i = find_item_at( items, nitems, x, y ); } while ( i < 0 ); return i; } #endif static float scale=1.0; void kconfig_sub(kc_item * items,int nitems, char * title) { grs_canvas * save_canvas, canvas; grs_font * save_font; int old_keyd_repeat; int i,k,ocitem,citem; int time_stopped = 0; All_items = items; Num_items = nitems; #ifdef NETWORK if (! ( (Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence) ) ) #else if (Endlevel_sequence) #endif { time_stopped = 1; stop_time(); } save_canvas = grd_curcanv; // menu screen scaling, 10/14/99 Jan Bobrowski - scaling for different font sizes 11/18/99 Matt Mueller scale=GAME_FONT->ft_h/5.0;//5 is the size of the standard font the menus were designed for. printf("scale=%f\n",scale); gr_init_sub_canvas(&canvas, &grd_curscreen->sc_canvas, (SWIDTH - 320*scale)/2, (SHEIGHT - 200*scale)/2, 320*scale, 200*scale); gr_set_current_canvas(&canvas); save_font = grd_curcanv->cv_font; game_flush_inputs(); old_keyd_repeat = keyd_repeat; keyd_repeat = 1; nm_draw_background(0,0,grd_curcanv->cv_bitmap.bm_w-1, grd_curcanv->cv_bitmap.bm_h-1 );//args are x,y,x2,y2 NOT x,y,w,h grd_curcanv->cv_font = Gamefonts[GFONT_MEDIUM_3]; { char * p; p = strchr( title, '\n' ); if ( p ) *p = 32; gr_string( 0x8000, 8*scale, title ); if ( p ) *p = '\n'; } grd_curcanv->cv_font = GAME_FONT; gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); gr_string( 0x8000, 28*scale, TXT_KCONFIG_STRING_1 ); gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); if ( items == kc_keyboard ) { gr_set_fontcolor( BM_XRGB(31,27,6), -1 ); gr_setcolor( BM_XRGB(31,27,6) ); gr_scanline( 98*scale, 106*scale, 42*scale ); gr_scanline( 120*scale, 128*scale, 42*scale ); gr_pixel( 98*scale, 43*scale ); gr_pixel( 98*scale, 44*scale ); gr_pixel( 128*scale, 43*scale ); gr_pixel( 128*scale, 44*scale ); gr_string( 109*scale, 40*scale, "OR" ); gr_scanline( 253*scale, 261*scale, 42*scale ); gr_scanline( 274*scale, 283*scale, 42*scale ); gr_pixel( 253*scale, 43*scale ); gr_pixel( 253*scale, 44*scale ); gr_pixel( 283*scale, 43*scale ); gr_pixel( 283*scale, 44*scale ); gr_string( 264*scale, 40*scale, "OR" ); } else if ( items == kc_joystick ) { gr_set_fontcolor( BM_XRGB(31,27,6), -1 ); gr_setcolor( BM_XRGB(31,27,6) ); gr_scanline( 18*scale, 135*scale, 37*scale ); gr_scanline( 181*scale, 294*scale, 37*scale ); gr_scanline( 18*scale, 144*scale, (122+10)*scale ); //122 was 119 gr_scanline( 174*scale, 294*scale, (122+10)*scale ); //122 was 119 gr_string( 0x8000, 35*scale, TXT_BUTTONS ); gr_string( 0x8000,(120+10)*scale, TXT_AXES ); //120 was 117 gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); gr_string( 81*scale, 137*scale, TXT_AXIS ); gr_string( 111*scale, 137*scale, TXT_INVERT ); gr_string( 222*scale, 137*scale, TXT_AXIS ); gr_string( 252*scale, 137*scale, TXT_INVERT ); } else if ( items == kc_mouse ) { gr_set_fontcolor( BM_XRGB(31,27,6), -1 ); gr_setcolor( BM_XRGB(31,27,6) ); gr_scanline( 18*scale, 135*scale, 37*scale ); gr_scanline( 181*scale, 294*scale, 37*scale ); gr_scanline( 18*scale, 144*scale, (119+5)*scale ); gr_scanline( 174*scale, 294*scale, (119+5)*scale ); gr_string( 0x8000, 35*scale, TXT_BUTTONS ); gr_string( 0x8000,(117+5)*scale, TXT_AXES ); gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); gr_string( 169*scale, 129*scale, TXT_AXIS ); gr_string( 199*scale, 129*scale, TXT_INVERT ); } else if ( items == kc_d1x ) { gr_set_fontcolor( BM_XRGB(31,27,6), -1 ); gr_setcolor( BM_XRGB(31,27,6) ); gr_string( 94*scale, 40*scale, "KB"); gr_string(121*scale, 40*scale, "JOY"); } for (i=0; icv_font = save_font; gr_set_current_canvas( save_canvas ); keyd_repeat = old_keyd_repeat; game_flush_inputs(); if (time_stopped) start_time(); return; #ifdef TABLE_CREATION case KEY_F12: { //KEY_DEBUGGED+KEY_F12: { FILE * fp; for (i=0; itext_num1) < N_TEXT_STRINGS) gr_string( item->x*scale, item->y*scale, Text_string[item->text_num1] ); else { switch(item->text_num1-N_TEXT_STRINGS) { case 0: gr_string( item->x*scale, item->y*scale,"CYC PRIMARY"); break; case 1: gr_string( item->x*scale, item->y*scale,"CYC SECONDARY"); break; case 2: gr_string( item->x*scale, item->y*scale,"TOGGLE PRIM AUTO"); break; case 3: gr_string( item->x*scale, item->y*scale,"TOGGLE SEC AUTO"); break; case 4: gr_string( item->x*scale, item->y*scale,"WEAPON 1"); break; case 5: gr_string( item->x*scale, item->y*scale,"WEAPON 2"); break; case 6: gr_string( item->x*scale, item->y*scale,"WEAPON 3"); break; case 7: gr_string( item->x*scale, item->y*scale,"WEAPON 4"); break; case 8: gr_string( item->x*scale, item->y*scale,"WEAPON 5"); break; case 9: gr_string( item->x*scale, item->y*scale,"WEAPON 6"); break; case 10: gr_string( item->x*scale, item->y*scale,"WEAPON 7"); break; case 11: gr_string( item->x*scale, item->y*scale,"WEAPON 8"); break; case 12: gr_string( item->x*scale, item->y*scale,"WEAPON 9"); break; case 13: gr_string( item->x*scale, item->y*scale,"WEAPON 0"); break; } } if (item->value==255) { strcpy( btext, "" ); } else { switch( item->type ) { case BT_KEY: strncpy( btext, key_text[item->value], 10 ); break; case BT_MOUSE_BUTTON: strncpy( btext, item->value<=3?Text_string[mousebutton_text[item->value]]:mousebutton_textra[item->value-3], 10 ); break; case BT_MOUSE_AXIS: strncpy( btext, Text_string[mouseaxis_text[item->value]], 10 ); break; case BT_JOY_BUTTON: //added/changed 9/6/98 Matt Mueller -> #endif #ifdef __LINUX__ sprintf( btext, "J%d B%d", j_button[item->value].joydev, j_Get_joydev_button_number (item->value) ); #else if ( joybutton_text[item->value] !=-1 ) strncpy( btext, Text_string[ joybutton_text[item->value] ], 10 ); else sprintf( btext, "BTN%d", item->value ); #endif break; case BT_JOY_AXIS: //added/changed 9/6/98 Matt Mueller -> #endif #ifdef __LINUX__ sprintf( btext, "J%d A%d", j_axis[item->value].joydev, j_Get_joydev_axis_number (item->value) ); #else strncpy( btext, Text_string[joyaxis_text[item->value]], 10 ); #endif break; case BT_INVERT: strncpy( btext, Text_string[invert_text[item->value]], 10 ); break; } } gr_get_string_size(btext, &w, &h, &aw ); if (is_current) gr_setcolor( BM_XRGB(21,0,24) ); else gr_setcolor( BM_XRGB(16,0,19) ); gr_urect( (item->w1+item->x)*scale, item->y*scale-1, (item->w1+item->x+item->w2)*scale, item->y*scale+h ); gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); x = (item->w1+item->x)*scale+((item->w2*scale-w)/2); gr_string( x, item->y*scale, btext ); } static int looper=0; void kc_drawquestion( kc_item *item ) { int c, x, w, h, aw; gr_get_string_size("?", &w, &h, &aw ); c = BM_XRGB(21,0,24); gr_setcolor( gr_fade_table[fades[looper]*256+c] ); looper++; if (looper>63) looper=0; gr_urect( (item->w1+item->x)*scale, item->y*scale-1, (item->w1+item->x+item->w2)*scale, item->y*scale+h ); gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); x = (item->w1+item->x)*scale+((item->w2*scale-w)/2); gr_string( x, item->y*scale, "?" ); gr_update(); } void kc_change_key( kc_item * item ) { int i,n,f,k; ubyte keycode; gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); gr_string( 0x8000, INFO_Y, TXT_PRESS_NEW_KEY ); game_flush_inputs(); keycode=255; k=255; while( (k!=KEY_ESC) && (keycode==255) ) { #ifdef NETWORK if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence)) multi_menu_poll(); #endif // if ( Game_mode & GM_MULTI ) // GameLoop( 0, 0 ); // Continue k = key_inkey(); //added/changed on 9/2/98 by Matt Mueller d_delay(10); //end change -MM kc_drawquestion( item ); for (i=0; i<256; i++ ) { if (keyd_pressed[i] && (strlen(key_text[i])>0)) { f = 0; for (n=0; nvalue = keycode; } kc_drawitem( item, 1 ); gr_set_fontcolor( BM_XRGB(28,28,28), BM_XRGB(0,0,0) ); nm_restore_background( 0, INFO_Y, GWIDTH-10, grd_curcanv->cv_font->ft_h ); game_flush_inputs(); } void kc_change_joybutton( kc_item * item ) { int n,i,k; ubyte code; gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); gr_string( 0x8000, INFO_Y, TXT_PRESS_NEW_JBUTTON ); game_flush_inputs(); code=255; k=255; while( (k!=KEY_ESC) && (code==255)) { #ifdef NETWORK if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence)) multi_menu_poll(); #endif // if ( Game_mode & GM_MULTI ) // GameLoop( 0, 0 ); // Continue k = key_inkey(); //added/changed on 9/2/98 by Matt Mueller d_delay(10); //end change -MM if (k == KEY_PRINT_SCREEN) save_screen_shot(0); kc_drawquestion( item ); //added/changed 9/6/98 Matt Mueller + 9/19/98 Owen Evans-> #endif #ifdef __LINUX__ for (i = 0; i < j_num_buttons; i++) { #else if (Config_control_type==CONTROL_THRUSTMASTER_FCS) { int axis[JOY_NUM_AXES]; joystick_read_raw_axis( JOY_ALL_AXIS, axis ); kconfig_read_fcs( axis[3] ); if ( joy_get_button_state(7) ) code = 7; if ( joy_get_button_state(11) ) code = 11; if ( joy_get_button_state(15) ) code = 15; if ( joy_get_button_state(19) ) code = 19; for (i=0; i<4; i++ ) { #endif if ( joy_get_button_state(i) ) code = i; } //added/changed 9/6/98 Matt Mueller -> #endif #ifndef __LINUX__ } else if (Config_control_type==CONTROL_FLIGHTSTICK_PRO) { for (i=4; i<20; i++ ) { if ( joy_get_button_state(i) ) { code = i; mprintf(( 0, "JB: %d\n", code )); } } } else { //added/changed 3/7/99 Owen Evans (next line) for (i=0; ivalue = code; } kc_drawitem( item, 1 ); nm_restore_background( 0, INFO_Y, GWIDTH-10, grd_curcanv->cv_font->ft_h ); game_flush_inputs(); } void kc_change_mousebutton( kc_item * item ) { int n,i,b,k; ubyte code; gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); gr_string( 0x8000, INFO_Y, TXT_PRESS_NEW_MBUTTON ); game_flush_inputs(); code=255; k=255; while( (k!=KEY_ESC) && (code==255)) { #ifdef NETWORK if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence)) multi_menu_poll(); #endif // if ( Game_mode & GM_MULTI ) // GameLoop( 0, 0 ); // Continue k = key_inkey(); //added/changed on 9/2/98 by Matt Mueller d_delay(10); //end change -MM if (k == KEY_PRINT_SCREEN) save_screen_shot(0); kc_drawquestion( item ); b = mouse_get_btns(); for (i=0; i<16; i++ ) { if ( b & (1<value = code; } kc_drawitem( item, 1 ); nm_restore_background( 0, INFO_Y, GWIDTH-10, grd_curcanv->cv_font->ft_h ); game_flush_inputs(); } void kc_change_joyaxis( kc_item * item ) { //added/changed 9/6/98 Matt Mueller -> #endif #ifdef __LINUX__ int axis[32]; int old_axis[32]; #else //added/changed 3/7/99 Owen Evans -> #endif int axis[JOY_NUM_AXES]; int old_axis[JOY_NUM_AXES]; // int temp_min[JOY_NUM_AXES]; // int temp_center[JOY_NUM_AXES]; // int temp_max[JOY_NUM_AXES]; #endif int n,i,k; ubyte code; gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); gr_string( 0x8000, INFO_Y, TXT_MOVE_NEW_JOY_AXIS ); game_flush_inputs(); code=255; k=255; joystick_read_raw_axis( JOY_ALL_AXIS, old_axis ); while( (k!=KEY_ESC) && (code==255)) { #ifdef NETWORK if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence)) multi_menu_poll(); #endif // if ( Game_mode & GM_MULTI ) // GameLoop( 0, 0 ); // Continue k = key_inkey(); //added/changed on 9/2/98 by Matt Mueller d_delay(10); //end change -MM if (k == KEY_PRINT_SCREEN) save_screen_shot(0); kc_drawquestion( item ); joystick_read_raw_axis( JOY_ALL_AXIS, axis ); //added/changed 9/6/98 Matt Mueller + 9/19/98 Owen Evans -> #endif #ifdef __LINUX__ for (i = 0; i < j_num_axes; i++) { if (abs (axis[i] - old_axis[i]) > ((j_axis[i].max_val - j_axis[i].min_val) / 32)) { #else //added/changed 3/17/99 Owen Evans //added/edited on 9/6/99 by Victor Rachels for better config //-unneeded- joy_get_cal_vals(temp_min, temp_center, temp_max); for (i=0; i ((temp_max[i] - temp_min[i]) / 32)) //end this section addition/edit - VR { #endif code = i; } old_axis[i] = axis[i]; } } if (code!=255) { for (i=0; ivalue = code; } kc_drawitem( item, 1 ); nm_restore_background( 0, INFO_Y, GWIDTH-10, grd_curcanv->cv_font->ft_h ); game_flush_inputs(); } void kc_change_mouseaxis( kc_item * item ) { int i,n,k; ubyte code; int dx,dy; gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); gr_string( 0x8000, INFO_Y, TXT_MOVE_NEW_MSE_AXIS ); game_flush_inputs(); code=255; k=255; mouse_get_delta( &dx, &dy ); while( (k!=KEY_ESC) && (code==255)) { #ifdef NETWORK if ((Game_mode & GM_MULTI) && (Function_mode == FMODE_GAME) && (!Endlevel_sequence)) multi_menu_poll(); #endif // if ( Game_mode & GM_MULTI ) // GameLoop( 0, 0 ); // Continue k = key_inkey(); //added/changed on 9/2/98 by Matt Mueller d_delay(10); //end change -MM if (k == KEY_PRINT_SCREEN) save_screen_shot(0); kc_drawquestion( item ); mouse_get_delta( &dx, &dy ); if ( abs(dx)>20 ) code = 0; if ( abs(dy)>20 ) code = 1; } if (code!=255) { for (i=0; ivalue = code; } kc_drawitem( item, 1 ); nm_restore_background( 0, INFO_Y, GWIDTH-10, grd_curcanv->cv_font->ft_h ); game_flush_inputs(); } void kc_change_invert( kc_item * item ) { game_flush_inputs(); if (item->value) item->value = 0; else item->value = 1; kc_drawitem( item, 1 ); } #include "screens.h" void kconfig(int n, char * title) { int i; set_screen_mode( SCREEN_MENU ); kc_set_controls(); switch(n) { case 0:kconfig_sub( kc_keyboard,NUM_ALL_KEY_CONTROLS, title); break; case 1:kconfig_sub( kc_joystick,NUM_ALL_OTHER_CONTROLS,title); break; case 2:kconfig_sub( kc_mouse, NUM_OTHER_CONTROLS, title); break; //added on 2/4/99 by Victor Rachels for new keys menu case 3:kconfig_sub( kc_d1x, NUM_D1X_CONTROLS, title); break; //end this section addition - VR default: Int3(); return; } reset_cockpit(); //force cockpit redraw next time // Update save values... for (i=0; i0) && (Config_control_type<5)) { for (i=0; i4) { for (i=0; i #endif #ifndef __LINUX__ void kconfig_read_fcs( int raw_axis ) { int raw_button, button, axis_min[JOY_NUM_AXES], axis_center[JOY_NUM_AXES], axis_max[JOY_NUM_AXES]; if (Config_control_type!=CONTROL_THRUSTMASTER_FCS) return; joy_get_cal_vals(axis_min, axis_center, axis_max); if ( axis_max[3] > 1 ) raw_button = (raw_axis*100)/axis_max[3]; else raw_button = 0; if ( raw_button > 88 ) button = 0; else if ( raw_button > 63 ) button = 7; else if ( raw_button > 39 ) button = 11; else if ( raw_button > 15 ) button = 15; else button = 19; kconfig_set_fcs_button( 19, button ); kconfig_set_fcs_button( 15, button ); kconfig_set_fcs_button( 11, button ); kconfig_set_fcs_button( 7, button ); } void kconfig_set_fcs_button( int btn, int button ) { int state,time_down,upcount,downcount; state = time_down = upcount = downcount = 0; if ( joy_get_button_state(btn) ) { if ( btn==button ) { state = 1; time_down = FrameTime; } else { upcount=1; } } else { if ( btn==button ) { state = 1; time_down = FrameTime; downcount=1; } else { upcount=1; } } joy_set_btn_values( btn, state, time_down, downcount, upcount ); } #endif #define PH_SCALE 8 //added/changed 9/6/98 Matt Mueller -> #endif #ifdef __LINUX__ #define JOYSTICK_READ_TIME (F1_0/20) // Read joystick at 20 Hz. #else #define JOYSTICK_READ_TIME (F1_0/10) // Read joystick at 10 Hz. #endif fix LastReadTime = 0; //added/changed 9/6/98 Matt Mueller -> #endif #ifdef __LINUX__ fix joy_axis[32]; #else fix joy_axis[JOY_NUM_AXES]; #endif ubyte kc_use_external_control = 0; ubyte kc_enable_external_control = 1; ubyte kc_external_intno = 0; control_info *kc_external_control = NULL; //added on 8/8/98 by Matt Mueller - sporb support #ifdef __DJGPP__ unsigned long kc_external_control_addr=0; #endif //end modified section - Matt Mueller ubyte *kc_external_name = NULL; ubyte kc_external_version = 0; void kconfig_init_external_controls(int intno, ssize_t address) { int i; kc_external_intno = intno; //added/changed on 8/8/98 by Matt Mueller - sporb support #ifdef __DJGPP__ MALLOC(kc_external_control,control_info,1); kc_external_control_addr=address; #else kc_external_control = (control_info *)address; #endif //end modified section kc_use_external_control = 1; kc_enable_external_control = 1; i = FindArg( "-xname" ); if ( i ) kc_external_name = Args[i+1]; else kc_external_name = "External Controller"; i = FindArg( "-xver" ); if ( i ) kc_external_version = atoi(Args[i+1]); printf( "%s int: 0x%x, data: 0x%p, ver:%d\n", kc_external_name, kc_external_intno, kc_external_control, kc_external_version ); } #ifdef __MSDOS__ void kconfig_read_external_controls() { union REGS r; if ( !kc_enable_external_control ) return; if ( kc_external_version == 0 ) memset( kc_external_control, 0, sizeof(control_info) ); else if ( kc_external_version > 0 ) { memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 ); if ( kc_external_version > 1 ) { // Write ship pos and angles to external controls... ubyte *temp_ptr = (ubyte *)kc_external_control; vms_vector *ship_pos; vms_matrix *ship_orient; memset( kc_external_control, 0, sizeof(control_info)+sizeof(vms_angvec) + 64 + sizeof(vms_vector)+sizeof(vms_matrix) ); temp_ptr += sizeof(control_info)+sizeof(vms_angvec) + 64; ship_pos = (vms_vector *)temp_ptr; temp_ptr += sizeof(vms_vector); ship_orient = (vms_matrix *)temp_ptr; // Fill in ship postion... *ship_pos = Objects[Players[Player_num].objnum].pos; // Fill in ship orientation... *ship_orient = Objects[Players[Player_num].objnum].orient; } } if ( grd_curscreen->sc_mode != SM(320,200) ) // (If in automap...) kc_external_control->automap_state = 1; //added on 8/8/98 by Matt Mueller - sporb support #ifdef __DJGPP__ dosmemput(kc_external_control,sizeof(control_info),kc_external_control_addr); #endif //end modified section - Matt Mueller memset(&r,0,sizeof(r)); int386 ( kc_external_intno, &r, &r); // Read external info... //added on 8/8/98 by Matt Mueller - sporb support #ifdef __DJGPP__ dosmemget(kc_external_control_addr,sizeof(control_info),kc_external_control); #endif //end modified section - Matt Mueller if ( Player_num > -1 ) { Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_TURNROLL); // Turn off roll when turning Objects[Players[Player_num].objnum].mtype.phys_info.flags &= (~PF_LEVELLING); // Turn off leveling to nearest side. Auto_leveling_on = 0; if ( kc_external_version > 0 ) { vms_matrix tempm, ViewMatrix; vms_angvec * Kconfig_abs_movement; char * oem_message; Kconfig_abs_movement = (vms_angvec *)((uint)kc_external_control + sizeof(control_info)); if ( Kconfig_abs_movement->p || Kconfig_abs_movement->b || Kconfig_abs_movement->h ) { vm_angles_2_matrix(&tempm,Kconfig_abs_movement); vm_matrix_x_matrix(&ViewMatrix,&Objects[Players[Player_num].objnum].orient,&tempm); Objects[Players[Player_num].objnum].orient = ViewMatrix; } oem_message = (char *)((uint)Kconfig_abs_movement + sizeof(vms_angvec)); if (oem_message[0] != '\0' ) hud_message(MSGC_GAME_FEEDBACK, oem_message ); } } //added/changed on 3/12/99 by Victor Rachels for faster sporb if(extfaster) { externalctrlp = fixmul(kc_external_control->pitch_time,FrameTime); externalctrlh = fixmul(kc_external_control->heading_time,FrameTime); externalctrlb = fixmul(kc_external_control->bank_time,FrameTime); } else { Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime); Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime); Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime); } //^ Controls.pitch_time += fixmul(kc_external_control->pitch_time,FrameTime); Controls.vertical_thrust_time += fixmul(kc_external_control->vertical_thrust_time,FrameTime); //^ Controls.heading_time += fixmul(kc_external_control->heading_time,FrameTime); Controls.sideways_thrust_time += fixmul(kc_external_control->sideways_thrust_time ,FrameTime); //^ Controls.bank_time += fixmul(kc_external_control->bank_time ,FrameTime); //end this section addition/change - VR Controls.forward_thrust_time += fixmul(kc_external_control->forward_thrust_time ,FrameTime); Controls.rear_view_down_count += kc_external_control->rear_view_down_count; Controls.rear_view_down_state |= kc_external_control->rear_view_down_state; Controls.fire_primary_down_count += kc_external_control->fire_primary_down_count; Controls.fire_primary_state |= kc_external_control->fire_primary_state; Controls.fire_secondary_state |= kc_external_control->fire_secondary_state; Controls.fire_secondary_down_count += kc_external_control->fire_secondary_down_count; Controls.fire_flare_down_count += kc_external_control->fire_flare_down_count; Controls.drop_bomb_down_count += kc_external_control->drop_bomb_down_count; Controls.automap_down_count += kc_external_control->automap_down_count; Controls.automap_state |= kc_external_control->automap_state; } #else void kconfig_read_external_controls() {} #endif //added/edited on 11/01/98 by Victor Rachels for primary/secondary //added on 9/15/98 by Victor Rachels to finagle the weapon toggle stuff int Allow_primary_cycle_ostate = 0; int Allow_secondary_cycle_ostate = 0; //end addition //end this section edit - Victor Rachels //added on 2/7/99 by Victor Rachels for jostick state setting int d1x_joystick_ostate[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //end this section adition - VR //added on 4/16/99 by Victor Rachels for vulcantoggle int Vulcan_kostate = 0; int Vulcan_jostate = 0; int Vulcan_mostate = 0; //end addition - VR void controls_read_all() { int i; int slide_on, bank_on; int dx, dy; int idx, idy; fix ctime; fix mouse_axis[2]; //added/changed 9/6/98 Matt Mueller -> #endif #ifdef __LINUX__ int raw_joy_axis[32]; #else int raw_joy_axis[JOY_NUM_AXES]; #endif int mouse_buttons; fix k0, k1, k2, k3, kp; fix k4, k5, k6, k7, kh; ubyte channel_masks; int use_mouse, use_joystick; int speed_factor=1; int ph_div; if ((i=FindArg("-mouselook")) && (Config_control_type == 5) ) { ph_div = 2; } else { ph_div = 8; } if (Game_turbo_mode) speed_factor = 2; { fix temp = Controls.heading_time; fix temp1 = Controls.pitch_time; memset( &Controls, 0, sizeof(control_info) ); Controls.heading_time = temp; Controls.pitch_time = temp1; } slide_on = 0; bank_on = 0; ctime = timer_get_fixed_seconds(); //--------- Read Joystick ----------- if ( (LastReadTime + JOYSTICK_READ_TIME > ctime) && (Config_control_type!=CONTROL_THRUSTMASTER_FCS) ) { //added/changed 9/6/98 Matt Mueller -> #endif #if defined(__LINUX__) || defined(__WINDOWS__) if ((ctime < 0) && (LastReadTime >= 0)) #else if ((ctime < 0) && (LastReadTime > 0)) #endif LastReadTime = ctime; use_joystick=1; } else if ((Config_control_type>0) && (Config_control_type<5) ) { LastReadTime = ctime; channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis ); //added/changed 9/6/98 Matt Mueller -> #endif #ifdef __LINUX__ for (i=0; i < j_num_axes; i++ ) { #else //added/changed 3/7/99 Owen Evans (next line) for (i=0; i #endif #ifndef __LINUX__ if ( (i==3) && (Config_control_type==CONTROL_THRUSTMASTER_FCS) ) { kconfig_read_fcs( raw_joy_axis[i] ); } else { #endif raw_joy_axis[i] = joy_get_scaled_reading( raw_joy_axis[i], i ); if (kc_joystick[23].value==i) // If this is the throttle joy_null_value = 20; // Then use a larger dead-zone if (raw_joy_axis[i] > joy_null_value) raw_joy_axis[i] = ((raw_joy_axis[i]-joy_null_value)*128)/(128-joy_null_value); else if (raw_joy_axis[i] < -joy_null_value) raw_joy_axis[i] = ((raw_joy_axis[i]+joy_null_value)*128)/(128-joy_null_value); else raw_joy_axis[i] = 0; joy_axis[i] = (raw_joy_axis[i]*FrameTime)/128; } //added/changed 9/6/98 Matt Mueller -> #endif #ifndef __LINUX__ } else { joy_axis[i] = 0; } } #endif use_joystick=1; } else { //added/changed 9/6/98 Matt Mueller -> #endif #ifdef __LINUX__ for (i=0; iprimary_order[valu]&&player_has_weapon(i,0)) valu = i; LaserPowSelected = valu; } //----------------Weapon 2---------------- if(key_down_count(kc_d1x[2].value) || (joy_get_button_state(kc_d1x[3].value) && (d1x_joystick_state[1]!=d1x_joystick_ostate[1]) ) ) do_weapon_select(1,0); //----------------Weapon 3---------------- if(key_down_count(kc_d1x[4].value) || (joy_get_button_state(kc_d1x[5].value) && (d1x_joystick_state[2]!=d1x_joystick_ostate[2]) ) ) do_weapon_select(2,0); //----------------Weapon 4---------------- if(key_down_count(kc_d1x[6].value) || (joy_get_button_state(kc_d1x[7].value) && (d1x_joystick_state[3]!=d1x_joystick_ostate[3]) ) ) do_weapon_select(3,0); //----------------Weapon 5---------------- if(key_down_count(kc_d1x[8].value) || (joy_get_button_state(kc_d1x[9].value) && (d1x_joystick_state[4]!=d1x_joystick_ostate[4]) ) ) do_weapon_select(4,0); //--------- Read secondary weapon select ---------- //----------------Weapon 6---------------- if(key_down_count(kc_d1x[10].value) || (joy_get_button_state(kc_d1x[11].value) && (d1x_joystick_state[5]!=d1x_joystick_ostate[5]) ) ) do_weapon_select(0,1); //----------------Weapon 7---------------- if(key_down_count(kc_d1x[12].value) || (joy_get_button_state(kc_d1x[13].value) && (d1x_joystick_state[6]!=d1x_joystick_ostate[6]) ) ) do_weapon_select(1,1); //----------------Weapon 8---------------- if(key_down_count(kc_d1x[14].value) || (joy_get_button_state(kc_d1x[15].value) && (d1x_joystick_state[7]!=d1x_joystick_ostate[7]) ) ) do_weapon_select(2,1); //----------------Weapon 9---------------- if(key_down_count(kc_d1x[16].value) || (joy_get_button_state(kc_d1x[17].value) && (d1x_joystick_state[8]!=d1x_joystick_ostate[8]) ) ) do_weapon_select(3,1); //----------------Weapon 0---------------- if(key_down_count(kc_d1x[18].value) || (joy_get_button_state(kc_d1x[19].value) && (d1x_joystick_state[9]!=d1x_joystick_ostate[9]) ) ) do_weapon_select(4,1); memcpy(d1x_joystick_ostate,d1x_joystick_state,10*sizeof(int)); } //end this section addition - VR //added/edited on 11/01/98 by Victor Rachels for primary/secondary //added on 9/15/98 by Victor Rachels to add weapon cycle toggle //from keybaord { int Allow_primary_cycle_count=0; int Allow_primary_cycle_jstate=0; //added/killed on 2/4/99 by Victor Rachels for d1x keys if ( kc_d1x[24].value < 255 ) Allow_primary_cycle_count += key_down_count(kc_d1x[24].value); if ( (use_joystick)&&(kc_d1x[25].value < 255) ) Allow_primary_cycle_jstate= joy_get_button_state( kc_d1x[25].value ); //-killed- if ( kc_keyboard[50].value < 255 ) Allow_primary_cycle_count += key_down_count(kc_keyboard[50].value); //-killed- if ( kc_keyboard[51].value < 255 ) Allow_primary_cycle_count += key_down_count(kc_keyboard[51].value); //-killed- if ( (use_joystick)&&(kc_joystick[29].value < 255) ) Allow_primary_cycle_jstate= joy_get_button_state( kc_joystick[29].value ); //end this section change - VR if (Allow_primary_cycle_count || Allow_primary_cycle_jstate!=Allow_primary_cycle_ostate) { if((Allow_primary_cycle_jstate!=Allow_primary_cycle_ostate)&&(Allow_primary_cycle_jstate==0)) Allow_primary_cycle_ostate = Allow_primary_cycle_jstate; else { Allow_primary_cycle = !Allow_primary_cycle; if(!Allow_primary_cycle) hud_message(MSGC_GAME_FEEDBACK, "Primary autoselect Off"); else hud_message(MSGC_GAME_FEEDBACK, "Primary autoselect On"); Allow_primary_cycle_count = 0; Allow_primary_cycle_ostate = Allow_primary_cycle_jstate; } } } //end addition - Victor Rachels { int Allow_secondary_cycle_count=0; int Allow_secondary_cycle_jstate=0; //added/killed on 2/4/99 by Victor Rachels for d1x keys if ( kc_d1x[26].value < 255 ) Allow_secondary_cycle_count += key_down_count(kc_d1x[26].value); if ( (use_joystick)&&(kc_d1x[27].value < 255) ) Allow_secondary_cycle_jstate= joy_get_button_state( kc_d1x[27].value ); //-killed- if ( kc_keyboard[52].value < 255 ) Allow_secondary_cycle_count += key_down_count(kc_keyboard[52].value); //-killed- if ( kc_keyboard[53].value < 255 ) Allow_secondary_cycle_count += key_down_count(kc_keyboard[53].value); //-killed- if ( (use_joystick)&&(kc_joystick[30].value < 255) ) Allow_secondary_cycle_jstate= joy_get_button_state( kc_joystick[30].value ); //end this section change - VR if (Allow_secondary_cycle_count || Allow_secondary_cycle_jstate!=Allow_secondary_cycle_ostate) { if((Allow_secondary_cycle_jstate!=Allow_secondary_cycle_ostate)&&(Allow_secondary_cycle_jstate==0)) Allow_secondary_cycle_ostate = Allow_secondary_cycle_jstate; else { Allow_secondary_cycle = !Allow_secondary_cycle; if(!Allow_secondary_cycle) hud_message(MSGC_GAME_FEEDBACK, "Secondary autoselect Off"); else hud_message(MSGC_GAME_FEEDBACK, "Secondary autoselect On"); Allow_secondary_cycle_count = 0; Allow_secondary_cycle_ostate = Allow_secondary_cycle_jstate; } } } //end this section addition/edit - Victor Rachels //added on 8/6/98 by Victor Rachels to add cycle primary/secondary //killed on 8/7/98 by Victor Rachels due to compatability problems. //brought back on 8/21/98 by Victor Rachels cuz I think I fixed it //Read primary cycle ///added/killed on 2/4/99 by Victor Rachels for d1x keys if ( kc_d1x[20].value < 255 ) Controls.cycle_primary_down_count += key_down_count(kc_d1x[20].value); if ( (use_joystick)&&(kc_d1x[21].value < 255) ) Controls.cycle_primary_state= joy_get_button_state( kc_d1x[21].value ); //-killed- if ( kc_keyboard[46].value < 255 ) Controls.cycle_primary_down_count += key_down_count(kc_keyboard[46].value); //-killed- if ( kc_keyboard[47].value < 255 ) Controls.cycle_primary_down_count += key_down_count(kc_keyboard[47].value); //-killed- if ( (use_joystick)&&(kc_joystick[27].value < 255 ) ) Controls.cycle_primary_state = joy_get_button_state( kc_joystick[27].value ); //Read secondary cycle if ( kc_d1x[22].value < 255 ) Controls.cycle_secondary_down_count += key_down_count(kc_d1x[22].value); if ( (use_joystick)&&(kc_d1x[23].value < 255) ) Controls.cycle_secondary_state= joy_get_button_state( kc_d1x[23].value ); //-killed- if ( kc_keyboard[48].value < 255 ) Controls.cycle_secondary_down_count += key_down_count(kc_keyboard[48].value); //-killed- if ( kc_keyboard[49].value < 255 ) Controls.cycle_secondary_down_count += key_down_count(kc_keyboard[49].value); //-killed- if ( (use_joystick)&&(kc_joystick[28].value < 255 ) ) Controls.cycle_secondary_state = joy_get_button_state( kc_joystick[28].value ); //end this section addition/kill - VR //end edit - Victor Rachels }//end "if (!Player_is_dead)" - WraithX //------------- Read slide_on ------------- // From keyboard... if ( kc_keyboard[8].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[8].value ]; if ( kc_keyboard[9].value < 255 ) slide_on |= keyd_pressed[ kc_keyboard[9].value ]; // From joystick... if ((use_joystick)&&(kc_joystick[5].value<255)) slide_on |= joy_get_button_state( kc_joystick[5].value ); // From mouse... if ((use_mouse)&&(kc_mouse[5].value<255)) slide_on |= mouse_buttons & (1< 0) { if (Controls.pitch_time < 0) Controls.pitch_time = 0; } else // kp < 0 if (Controls.pitch_time > 0) Controls.pitch_time = 0; Controls.pitch_time += kp; // From joystick... if ( (use_joystick)&&(kc_joystick[13].value < 255 )) { if ( !kc_joystick[14].value ) // If not inverted... Controls.pitch_time -= (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8; else Controls.pitch_time += (joy_axis[kc_joystick[13].value]*Config_joystick_sensitivity)/8; } // From mouse... //mprintf(( 0, "UM: %d, PV: %d\n", use_mouse, kc_mouse[13].value )); if ( (use_mouse)&&(kc_mouse[13].value < 255) ) { if ( !kc_mouse[14].value ) // If not inverted... Controls.pitch_time -= (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/ph_div; // ZICO we call pitch_div here for better pitching if mouselook else Controls.pitch_time += (mouse_axis[kc_mouse[13].value]*Config_joystick_sensitivity)/ph_div; } } else { Controls.pitch_time = 0; } //the following "if" added by WraithX, 4/14/00 //done so that dead players can't move if (!Player_is_dead) { //----------- Read vertical_thrust_time ----------------- if ( slide_on ) { k0 = speed_factor*key_down_time( kc_keyboard[0].value ); k1 = speed_factor*key_down_time( kc_keyboard[1].value ); k2 = speed_factor*key_down_time( kc_keyboard[2].value ); k3 = speed_factor*key_down_time( kc_keyboard[3].value ); // From keyboard... if ( kc_keyboard[0].value < 255 ) Controls.vertical_thrust_time += k0; if ( kc_keyboard[1].value < 255 ) Controls.vertical_thrust_time += k1; if ( kc_keyboard[2].value < 255 ) Controls.vertical_thrust_time -= k2; if ( kc_keyboard[3].value < 255 ) Controls.vertical_thrust_time -= k3; // From Cyberman... if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) { Controls.vertical_thrust_time -= mouse_button_down_time(MB_PITCH_FORWARD); Controls.vertical_thrust_time += mouse_button_down_time(MB_PITCH_BACKWARD); } // From joystick... if ((use_joystick)&&( kc_joystick[13].value < 255 )) { if ( !kc_joystick[14].value ) // If not inverted... Controls.vertical_thrust_time += joy_axis[kc_joystick[13].value]; else Controls.vertical_thrust_time -= joy_axis[kc_joystick[13].value]; } // From mouse... if ( (use_mouse)&&(kc_mouse[13].value < 255 )) { if ( !kc_mouse[14].value ) // If not inverted... Controls.vertical_thrust_time -= mouse_axis[kc_mouse[13].value]; else Controls.vertical_thrust_time += mouse_axis[kc_mouse[13].value]; } } // From keyboard... if ( kc_keyboard[14].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[14].value ); if ( kc_keyboard[15].value < 255 ) Controls.vertical_thrust_time += speed_factor*key_down_time( kc_keyboard[15].value ); if ( kc_keyboard[16].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[16].value ); if ( kc_keyboard[17].value < 255 ) Controls.vertical_thrust_time -= speed_factor*key_down_time( kc_keyboard[17].value ); // From joystick... if ((use_joystick)&&( kc_joystick[19].value < 255 )) { if ( !kc_joystick[20].value ) // If not inverted... Controls.vertical_thrust_time += joy_axis[kc_joystick[19].value]; else Controls.vertical_thrust_time -= joy_axis[kc_joystick[19].value]; } // From joystick buttons if ( (use_joystick)&&(kc_joystick[8].value < 255 )) Controls.vertical_thrust_time += joy_get_button_down_time( kc_joystick[8].value ); if ( (use_joystick)&&(kc_joystick[9].value < 255 )) Controls.vertical_thrust_time -= joy_get_button_down_time( kc_joystick[9].value ); // From mouse buttons if ( (use_mouse)&&(kc_mouse[8].value < 255 )) Controls.vertical_thrust_time += mouse_button_down_time( kc_mouse[8].value ); if ( (use_mouse)&&(kc_mouse[9].value < 255 )) Controls.vertical_thrust_time -= mouse_button_down_time( kc_mouse[9].value ); // From mouse... if ( (use_mouse)&&(kc_mouse[19].value < 255 )) { if ( !kc_mouse[20].value ) // If not inverted... Controls.vertical_thrust_time += mouse_axis[kc_mouse[19].value]; else Controls.vertical_thrust_time -= mouse_axis[kc_mouse[19].value]; } // From Cyberman... if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) { Controls.vertical_thrust_time += mouse_button_down_time(MB_Z_UP)/2; Controls.vertical_thrust_time -= mouse_button_down_time(MB_Z_DOWN)/2; } }//end "if" added by WraithX //---------- Read heading_time ----------- if (!slide_on && !bank_on) { //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time))); kh = 0; k4 = speed_factor*key_down_time( kc_keyboard[4].value ); k5 = speed_factor*key_down_time( kc_keyboard[5].value ); k6 = speed_factor*key_down_time( kc_keyboard[6].value ); k7 = speed_factor*key_down_time( kc_keyboard[7].value ); // From keyboard... if ( kc_keyboard[4].value < 255 ) kh -= k4/PH_SCALE; if ( kc_keyboard[5].value < 255 ) kh -= k5/PH_SCALE; if ( kc_keyboard[6].value < 255 ) kh += k6/PH_SCALE; if ( kc_keyboard[7].value < 255 ) kh += k7/PH_SCALE; // From Cyberman... if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) { kh -= mouse_button_down_time(MB_HEAD_LEFT)/PH_SCALE; kh += mouse_button_down_time(MB_HEAD_RIGHT)/PH_SCALE; } if (kh == 0) Controls.heading_time = 0; else if (kh > 0) { if (Controls.heading_time < 0) Controls.heading_time = 0; } else // kh < 0 if (Controls.heading_time > 0) Controls.heading_time = 0; Controls.heading_time += kh; // From joystick... if ( (use_joystick)&&(kc_joystick[15].value < 255 )) { if ( !kc_joystick[16].value ) // If not inverted... Controls.heading_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8; else Controls.heading_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8; } // From mouse... if ( (use_mouse)&&(kc_mouse[15].value < 255 )) { if ( !kc_mouse[16].value ) // If not inverted... Controls.heading_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/ph_div; // ZICO we call head_div here for better pitching if mouselook else Controls.heading_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/ph_div; } } else { Controls.heading_time = 0; } //the following "if" added by WraithX, 4/14/00 //done so that dead players can't move if (!Player_is_dead) { //----------- Read sideways_thrust_time ----------------- if ( slide_on ) { k0 = speed_factor*key_down_time( kc_keyboard[4].value ); k1 = speed_factor*key_down_time( kc_keyboard[5].value ); k2 = speed_factor*key_down_time( kc_keyboard[6].value ); k3 = speed_factor*key_down_time( kc_keyboard[7].value ); // From keyboard... if ( kc_keyboard[4].value < 255 ) Controls.sideways_thrust_time -= k0; if ( kc_keyboard[5].value < 255 ) Controls.sideways_thrust_time -= k1; if ( kc_keyboard[6].value < 255 ) Controls.sideways_thrust_time += k2; if ( kc_keyboard[7].value < 255 ) Controls.sideways_thrust_time += k3; // From joystick... if ( (use_joystick)&&(kc_joystick[15].value < 255 )) { if ( !kc_joystick[16].value ) // If not inverted... Controls.sideways_thrust_time += joy_axis[kc_joystick[15].value]; else Controls.sideways_thrust_time -= joy_axis[kc_joystick[15].value]; } // From cyberman if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) { Controls.sideways_thrust_time -= mouse_button_down_time(MB_HEAD_LEFT); Controls.sideways_thrust_time += mouse_button_down_time(MB_HEAD_RIGHT); } // From mouse... if ( (use_mouse)&&(kc_mouse[15].value < 255 )) { if ( !kc_mouse[16].value ) // If not inverted... Controls.sideways_thrust_time += mouse_axis[kc_mouse[15].value]; else Controls.sideways_thrust_time -= mouse_axis[kc_mouse[15].value]; } } // From keyboard... if ( kc_keyboard[10].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[10].value ); if ( kc_keyboard[11].value < 255 ) Controls.sideways_thrust_time -= speed_factor*key_down_time( kc_keyboard[11].value ); if ( kc_keyboard[12].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[12].value ); if ( kc_keyboard[13].value < 255 ) Controls.sideways_thrust_time += speed_factor*key_down_time( kc_keyboard[13].value ); // From joystick... if ( (use_joystick)&&(kc_joystick[17].value < 255 )) { if ( !kc_joystick[18].value ) // If not inverted... Controls.sideways_thrust_time -= joy_axis[kc_joystick[17].value]; else Controls.sideways_thrust_time += joy_axis[kc_joystick[17].value]; } // From joystick buttons if ( (use_joystick)&&(kc_joystick[6].value < 255 )) Controls.sideways_thrust_time -= joy_get_button_down_time( kc_joystick[6].value ); if ( (use_joystick)&&(kc_joystick[7].value < 255 )) Controls.sideways_thrust_time += joy_get_button_down_time( kc_joystick[7].value ); // From mouse buttons if ( (use_mouse)&&(kc_mouse[6].value < 255 )) Controls.sideways_thrust_time -= mouse_button_down_time( kc_mouse[6].value ); if ( (use_mouse)&&(kc_mouse[7].value < 255 )) Controls.sideways_thrust_time += mouse_button_down_time( kc_mouse[7].value ); // From mouse... if ( (use_mouse)&&(kc_mouse[17].value < 255 )) { if ( !kc_mouse[18].value ) // If not inverted... Controls.sideways_thrust_time += mouse_axis[kc_mouse[17].value]; else Controls.sideways_thrust_time -= mouse_axis[kc_mouse[17].value]; } }//end "if" added by WraithX //----------- Read bank_time ----------------- if ( bank_on ) { k0 = speed_factor*key_down_time( kc_keyboard[4].value ); k1 = speed_factor*key_down_time( kc_keyboard[5].value ); k2 = speed_factor*key_down_time( kc_keyboard[6].value ); k3 = speed_factor*key_down_time( kc_keyboard[7].value ); // From keyboard... if ( kc_keyboard[4].value < 255 ) Controls.bank_time += k0; if ( kc_keyboard[5].value < 255 ) Controls.bank_time += k1; if ( kc_keyboard[6].value < 255 ) Controls.bank_time -= k2; if ( kc_keyboard[7].value < 255 ) Controls.bank_time -= k3; // From Cyberman... if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) { Controls.bank_time -= mouse_button_down_time(MB_HEAD_LEFT); Controls.bank_time += mouse_button_down_time(MB_HEAD_RIGHT); } // From joystick... if ( (use_joystick)&&(kc_joystick[15].value < 255) ) { if ( !kc_joystick[16].value ) // If not inverted... Controls.bank_time -= (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8; else Controls.bank_time += (joy_axis[kc_joystick[15].value]*Config_joystick_sensitivity)/8; } // From mouse... if ( (use_mouse)&&(kc_mouse[15].value < 255 )) { if ( !kc_mouse[16].value ) // If not inverted... Controls.bank_time += (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8; else Controls.bank_time -= (mouse_axis[kc_mouse[15].value]*Config_joystick_sensitivity)/8; } } // From keyboard... if ( kc_keyboard[20].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[20].value ); if ( kc_keyboard[21].value < 255 ) Controls.bank_time += speed_factor*key_down_time( kc_keyboard[21].value ); if ( kc_keyboard[22].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[22].value ); if ( kc_keyboard[23].value < 255 ) Controls.bank_time -= speed_factor*key_down_time( kc_keyboard[23].value ); // From joystick... if ( (use_joystick)&&(kc_joystick[21].value < 255) ) { if ( !kc_joystick[22].value ) // If not inverted... Controls.bank_time -= joy_axis[kc_joystick[21].value]; else Controls.bank_time += joy_axis[kc_joystick[21].value]; } // From joystick buttons if ( (use_joystick)&&(kc_joystick[11].value < 255 )) Controls.bank_time += joy_get_button_down_time( kc_joystick[11].value ); if ( (use_joystick)&&(kc_joystick[12].value < 255 )) Controls.bank_time -= joy_get_button_down_time( kc_joystick[12].value ); // From mouse buttons if ( (use_mouse)&&(kc_mouse[11].value < 255 )) Controls.bank_time += mouse_button_down_time( kc_mouse[11].value ); if ( (use_mouse)&&(kc_mouse[12].value < 255 )) Controls.bank_time -= mouse_button_down_time( kc_mouse[12].value ); // From mouse... if ( (use_mouse)&&(kc_mouse[21].value < 255 )) { if ( !kc_mouse[22].value ) // If not inverted... Controls.bank_time += mouse_axis[kc_mouse[21].value]; else Controls.bank_time -= mouse_axis[kc_mouse[21].value]; } // From Cyberman if ((use_mouse)&&(Config_control_type==CONTROL_CYBERMAN)) { Controls.bank_time += mouse_button_down_time(MB_BANK_LEFT); Controls.bank_time -= mouse_button_down_time(MB_BANK_RIGHT); } //the following "if" added by WraithX, 4/14/00 //done so that dead players can't move if (!Player_is_dead) { //----------- Read forward_thrust_time ------------- // From keyboard... if ( kc_keyboard[30].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[30].value ); if ( kc_keyboard[31].value < 255 ) Controls.forward_thrust_time += speed_factor*key_down_time( kc_keyboard[31].value ); if ( kc_keyboard[32].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[32].value ); if ( kc_keyboard[33].value < 255 ) Controls.forward_thrust_time -= speed_factor*key_down_time( kc_keyboard[33].value ); // From joystick... if ( (use_joystick)&&(kc_joystick[23].value < 255 )) { if ( !kc_joystick[24].value ) // If not inverted... Controls.forward_thrust_time -= joy_axis[kc_joystick[23].value]; else Controls.forward_thrust_time += joy_axis[kc_joystick[23].value]; } // From joystick buttons if ( (use_joystick)&&(kc_joystick[2].value < 255 )) Controls.forward_thrust_time += joy_get_button_down_time( kc_joystick[2].value ); if ( (use_joystick)&&(kc_joystick[3].value < 255 )) Controls.forward_thrust_time -= joy_get_button_down_time( kc_joystick[3].value ); // From mouse... if ( (use_mouse)&&(kc_mouse[23].value < 255 )) { if ( !kc_mouse[24].value ) // If not inverted... Controls.forward_thrust_time -= mouse_axis[kc_mouse[23].value]; else Controls.forward_thrust_time += mouse_axis[kc_mouse[23].value]; } // From mouse buttons if ( (use_mouse)&&(kc_mouse[2].value < 255 )) Controls.forward_thrust_time += mouse_button_down_time( kc_mouse[2].value ); if ( (use_mouse)&&(kc_mouse[3].value < 255 )) Controls.forward_thrust_time -= mouse_button_down_time( kc_mouse[3].value ); //----------- Read fire_primary_down_count if (!Global_laser_firing_count) { // ZICO - prevets primary counts if energy is 0 ansd lasers go wild while recharge - VERY DIRTY HACK if (kc_keyboard[24].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[24].value); if (kc_keyboard[25].value < 255 ) Controls.fire_primary_down_count += key_down_count(kc_keyboard[25].value); if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_down_count += joy_get_button_down_cnt(kc_joystick[0].value); if ((use_mouse)&&(kc_mouse[0].value < 255 )) Controls.fire_primary_down_count += mouse_button_down_count(kc_mouse[0].value); } #ifdef NETWORK if(use_alt_vulcanfire) { if(Primary_weapon != VULCAN_INDEX) { Vulcan_jostate = 0; Vulcan_kostate = 0; Vulcan_mostate = 0; do_vulcan_fire(0); } else { int Vulcan_jstate=0; int Vulcan_kstate=0; int Vulcan_mstate=0; Vulcan_kstate = (keyd_pressed[kc_keyboard[24].value]||keyd_pressed[kc_keyboard[25].value]); Vulcan_jstate = joy_get_button_state( kc_joystick[0].value); Vulcan_mstate = mouse_button_state( kc_mouse[0].value); if (Vulcan_kstate!=Vulcan_kostate || Vulcan_jstate!=Vulcan_jostate || Vulcan_mstate!=Vulcan_mostate) { do_vulcan_fire(Vulcan_kstate||Vulcan_jstate||Vulcan_mstate); Vulcan_kostate = Vulcan_kstate; Vulcan_jostate = Vulcan_jstate; Vulcan_mostate = Vulcan_mstate; } } } #endif //----------- Read fire_primary_state if (!Global_laser_firing_count) { // ZICO - prevets primary counts if energy is 0 ansd lasers go wild while recharge - VERY DIRTY HACK if (kc_keyboard[24].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[24].value]; if (kc_keyboard[25].value < 255 ) Controls.fire_primary_state |= keyd_pressed[kc_keyboard[25].value]; if ((use_joystick)&&(kc_joystick[0].value < 255 )) Controls.fire_primary_state |= joy_get_button_state(kc_joystick[0].value); if ((use_mouse)&&(kc_mouse[0].value < 255) ) Controls.fire_primary_state |= mouse_button_state(kc_mouse[0].value); } //----------- Read fire_secondary_down_count if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[26].value); if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_down_count += key_down_count(kc_keyboard[27].value); if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_down_count += joy_get_button_down_cnt(kc_joystick[1].value); if ((use_mouse)&&(kc_mouse[1].value < 255 )) Controls.fire_secondary_down_count += mouse_button_down_count(kc_mouse[1].value); //----------- Read fire_secondary_state if (kc_keyboard[26].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[26].value]; if (kc_keyboard[27].value < 255 ) Controls.fire_secondary_state |= keyd_pressed[kc_keyboard[27].value]; if ((use_joystick)&&(kc_joystick[1].value < 255 )) Controls.fire_secondary_state |= joy_get_button_state(kc_joystick[1].value); if ((use_mouse)&&(kc_mouse[1].value < 255) ) Controls.fire_secondary_state |= mouse_button_state(kc_mouse[1].value); //----------- Read fire_flare_down_count if (kc_keyboard[28].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[28].value); if (kc_keyboard[29].value < 255 ) Controls.fire_flare_down_count += key_down_count(kc_keyboard[29].value); if ((use_joystick)&&(kc_joystick[4].value < 255 )) Controls.fire_flare_down_count += joy_get_button_down_cnt(kc_joystick[4].value); if ((use_mouse)&&(kc_mouse[4].value < 255 )) Controls.fire_flare_down_count += mouse_button_down_count(kc_mouse[4].value); //----------- Read drop_bomb_down_count if (kc_keyboard[34].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[34].value); if (kc_keyboard[35].value < 255 ) Controls.drop_bomb_down_count += key_down_count(kc_keyboard[35].value); if ((use_joystick)&&(kc_joystick[26].value < 255 )) Controls.drop_bomb_down_count += joy_get_button_down_cnt(kc_joystick[26].value); if ((use_mouse)&&(kc_mouse[26].value < 255 )) Controls.drop_bomb_down_count += mouse_button_down_count(kc_mouse[26].value); //----------- Read rear_view_down_count if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[36].value); if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_count += key_down_count(kc_keyboard[37].value); if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_count += joy_get_button_down_cnt(kc_joystick[25].value); if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_count += mouse_button_down_count(kc_mouse[25].value); //----------- Read rear_view_down_state if (kc_keyboard[36].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[36].value]; if (kc_keyboard[37].value < 255 ) Controls.rear_view_down_state |= keyd_pressed[kc_keyboard[37].value]; if ((use_joystick)&&(kc_joystick[25].value < 255 )) Controls.rear_view_down_state |= joy_get_button_state(kc_joystick[25].value); if ((use_mouse)&&(kc_mouse[25].value < 255 )) Controls.rear_view_down_state |= mouse_button_state(kc_mouse[25].value); }//end "if" added by WraithX //----------- Read automap_down_count if (kc_keyboard[44].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[44].value); if (kc_keyboard[45].value < 255 ) Controls.automap_down_count += key_down_count(kc_keyboard[45].value); //----------- Read automap_state if (kc_keyboard[44].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[44].value]; if (kc_keyboard[45].value < 255 ) Controls.automap_state |= keyd_pressed[kc_keyboard[45].value]; //----------- Read stupid-cruise-control-type of throttle. { if ( kc_keyboard[38].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[38].value)*5,FrameTime); if ( kc_keyboard[39].value < 255 ) Cruise_speed += fixdiv(speed_factor*key_down_time(kc_keyboard[39].value)*5,FrameTime); if ( kc_keyboard[40].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[40].value)*5,FrameTime); if ( kc_keyboard[41].value < 255 ) Cruise_speed -= fixdiv(speed_factor*key_down_time(kc_keyboard[41].value)*5,FrameTime); if ( (kc_keyboard[42].value < 255) && (key_down_count(kc_keyboard[42].value)) ) Cruise_speed = 0; if ( (kc_keyboard[43].value < 255) && (key_down_count(kc_keyboard[43].value)) ) Cruise_speed = 0; if (Cruise_speed > i2f(100) ) Cruise_speed = i2f(100); if (Cruise_speed < 0 ) Cruise_speed = 0; if (Controls.forward_thrust_time==0) Controls.forward_thrust_time = fixmul(Cruise_speed,FrameTime)/100; } // Read external controls if (kc_use_external_control) kconfig_read_external_controls(); //----------- Clamp values between -FrameTime and FrameTime if (FrameTime > F1_0 ) mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) )); // ZICO - remove clamp for pitch and heading if mouselook on and no multiplayer game if ((Config_control_type != 5) || !(i=FindArg("-mouselook")) || (Game_mode & GM_MULTI) ) { if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2; if (Controls.heading_time > FrameTime ) Controls.heading_time = FrameTime; if (Controls.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2; if (Controls.heading_time < -FrameTime ) Controls.heading_time = -FrameTime; } if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime; if (Controls.sideways_thrust_time > FrameTime ) Controls.sideways_thrust_time = FrameTime; if (Controls.bank_time > FrameTime ) Controls.bank_time = FrameTime; if (Controls.forward_thrust_time > FrameTime ) Controls.forward_thrust_time = FrameTime; // if (Controls.afterburner_time > FrameTime ) Controls.afterburner_time = FrameTime; if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime; if (Controls.sideways_thrust_time < -FrameTime ) Controls.sideways_thrust_time = -FrameTime; if (Controls.bank_time < -FrameTime ) Controls.bank_time = -FrameTime; if (Controls.forward_thrust_time < -FrameTime ) Controls.forward_thrust_time = -FrameTime; // if (Controls.afterburner_time < -FrameTime ) Controls.afterburner_time = -FrameTime; //--------- Don't do anything if in debug mode #ifndef NDEBUG if ( keyd_pressed[KEY_DELETE] ) { memset( &Controls, 0, sizeof(control_info) ); } #endif } void reset_cruise(void) { Cruise_speed=0; } void kc_set_controls() { int i; for (i=0; i0) && (Config_control_type<5)) { for (i=0; i4) { for (i=0; i