From 934fad3e92ec63891aca90e69f030d5cfcb52acd Mon Sep 17 00:00:00 2001 From: Bradley Bell Date: Sun, 18 Jan 2015 17:05:59 -0800 Subject: [PATCH] start refactoring Controls stuff more logically, now that it no longer has anything to do with kconfig --- main/ai.c | 2 +- main/automap.c | 8 +- main/concntl.c | 8 -- main/concntl.h | 2 - main/controls.c | 330 +++++++++++++++++++++++++++++++++++++++++++++- main/controls.h | 39 ++++++ main/game.c | 14 +- main/gamecntl.c | 34 ++--- main/gameseq.c | 4 +- main/inferno.c | 2 +- main/inferno.h | 1 + main/kconfig.c | 342 ------------------------------------------------ main/kconfig.h | 34 ----- 13 files changed, 398 insertions(+), 422 deletions(-) diff --git a/main/ai.c b/main/ai.c index c5f6ff40..9723c358 100644 --- a/main/ai.c +++ b/main/ai.c @@ -248,7 +248,7 @@ void init_ai_frame(void) Dist_to_last_fired_upon_player_pos = vm_vec_dist_quick(&Last_fired_upon_player_pos, &Believed_player_pos); - ab_state = Afterburner_charge && Controls.afterburner_state && (Players[Player_num].flags & PLAYER_FLAGS_AFTERBURNER); + ab_state = Afterburner_charge && Controls.state[afterburner] && (Players[Player_num].flags & PLAYER_FLAGS_AFTERBURNER); if (!(Players[Player_num].flags & PLAYER_FLAGS_CLOAKED) || (Players[Player_num].flags & PLAYER_FLAGS_HEADLIGHT_ON) || ab_state) { ai_do_cloak_stuff(); diff --git a/main/automap.c b/main/automap.c index 481e55d7..6bd7d341 100644 --- a/main/automap.c +++ b/main/automap.c @@ -807,10 +807,10 @@ void do_automap( int key_code ) { adjust_segment_limit(SegmentLimit); while(!done) { - if ( leave_mode==0 && Controls.automap_state && (timer_get_fixed_seconds()-entry_time)>LEAVE_TIME) + if ( leave_mode == 0 && Controls.state[automap] && (timer_get_fixed_seconds() - entry_time) > LEAVE_TIME) leave_mode = 1; - if ( !Controls.automap_state && (leave_mode==1) ) + if ( !Controls.state[automap] && (leave_mode == 1) ) done=1; if (!pause_game) { @@ -830,7 +830,7 @@ void do_automap( int key_code ) { controls_read_all(); - if ( Controls.automap_down_count ) { + if ( Controls.count[automap] ) { if (leave_mode==0) done = 1; c = 0; @@ -990,7 +990,7 @@ void do_automap( int key_code ) { } } - if ( Controls.fire_primary_down_count ) { + if ( Controls.count[fire_primary] ) { // Reset orientation ViewDist = ZOOM_DEFAULT; tangles.p = PITCH_DEFAULT; diff --git a/main/concntl.c b/main/concntl.c index e84c3c55..aa95611b 100644 --- a/main/concntl.c +++ b/main/concntl.c @@ -26,8 +26,6 @@ void concntl_cmd_left_on(int argc, char **argv) { console_control_set_st void concntl_cmd_left_off(int argc, char **argv) { console_control_set_state(CONCNTL_LEFT, 0); } void concntl_cmd_right_on(int argc, char **argv) { console_control_set_state(CONCNTL_RIGHT, 1); } void concntl_cmd_right_off(int argc, char **argv) { console_control_set_state(CONCNTL_RIGHT, 0); } -void concntl_cmd_strafe_on(int argc, char **argv) { console_control_set_state(CONCNTL_STRAFE, 1); } -void concntl_cmd_strafe_off(int argc, char **argv) { console_control_set_state(CONCNTL_STRAFE, 0); } void concntl_cmd_moveleft_on(int argc, char **argv) { console_control_set_state(CONCNTL_MOVELEFT, 1); } void concntl_cmd_moveleft_off(int argc, char **argv) { console_control_set_state(CONCNTL_MOVELEFT, 0); } void concntl_cmd_moveright_on(int argc, char **argv) { console_control_set_state(CONCNTL_MOVERIGHT, 1); } @@ -36,8 +34,6 @@ void concntl_cmd_moveup_on(int argc, char **argv) { console_control_set_st void concntl_cmd_moveup_off(int argc, char **argv) { console_control_set_state(CONCNTL_MOVEUP, 0); } void concntl_cmd_movedown_on(int argc, char **argv) { console_control_set_state(CONCNTL_MOVEDOWN, 1); } void concntl_cmd_movedown_off(int argc, char **argv) { console_control_set_state(CONCNTL_MOVEDOWN, 0); } -void concntl_cmd_bank_on(int argc, char **argv) { console_control_set_state(CONCNTL_BANK, 1); } -void concntl_cmd_bank_off(int argc, char **argv) { console_control_set_state(CONCNTL_BANK, 0); } void concntl_cmd_bankleft_on(int argc, char **argv) { console_control_set_state(CONCNTL_BANKLEFT, 1); } void concntl_cmd_bankleft_off(int argc, char **argv) { console_control_set_state(CONCNTL_BANKLEFT, 0); } void concntl_cmd_bankright_on(int argc, char **argv) { console_control_set_state(CONCNTL_BANKRIGHT, 1); } @@ -143,8 +139,6 @@ void console_control_init(void) cmd_addcommand("-left", concntl_cmd_left_off); cmd_addcommand("+right", concntl_cmd_right_on); cmd_addcommand("-right", concntl_cmd_right_off); - cmd_addcommand("+strafe", concntl_cmd_strafe_on); - cmd_addcommand("-strafe", concntl_cmd_strafe_off); cmd_addcommand("+moveleft", concntl_cmd_moveleft_on); cmd_addcommand("-moveleft", concntl_cmd_moveleft_off); cmd_addcommand("+moveright", concntl_cmd_moveright_on); @@ -153,8 +147,6 @@ void console_control_init(void) cmd_addcommand("-moveup", concntl_cmd_moveup_off); cmd_addcommand("+movedown", concntl_cmd_movedown_on); cmd_addcommand("-movedown", concntl_cmd_movedown_off); - cmd_addcommand("+bank", concntl_cmd_bank_on); - cmd_addcommand("-bank", concntl_cmd_bank_off); cmd_addcommand("+bankleft", concntl_cmd_bankleft_on); cmd_addcommand("-bankleft", concntl_cmd_bankleft_off); cmd_addcommand("+bankright", concntl_cmd_bankright_on); diff --git a/main/concntl.h b/main/concntl.h index 15e6b86d..338da766 100644 --- a/main/concntl.h +++ b/main/concntl.h @@ -12,12 +12,10 @@ typedef enum CONCNTL_LOOKUP, // Pitch backward CONCNTL_LEFT, // Turn left CONCNTL_RIGHT, // Turn right - CONCNTL_STRAFE, // Slide on CONCNTL_MOVELEFT, // Slide left CONCNTL_MOVERIGHT, // Slide right CONCNTL_MOVEUP, // Slide up CONCNTL_MOVEDOWN, // Slide down - CONCNTL_BANK, // Bank on CONCNTL_BANKLEFT, // Bank left CONCNTL_BANKRIGHT, // Bank right CONCNTL_FORWARD, // Accelerate diff --git a/main/controls.c b/main/controls.c index 0e93a33f..85250d98 100644 --- a/main/controls.c +++ b/main/controls.c @@ -119,7 +119,7 @@ void read_flying_controls( object * obj ) if (Players[Player_num].flags & PLAYER_FLAGS_AFTERBURNER) { - if (Controls.afterburner_state) { //player has key down + if (Controls.state[afterburner]) { // player has key down //if (forward_thrust_time >= 0) { //..and isn't moving backward { fix afterburner_scale; @@ -214,3 +214,331 @@ void read_flying_controls( object * obj ) }// end if } + + +extern void transfer_energy_to_shield(fix); + +control_info Controls; + +fix Cruise_speed = 0; + +#define PH_SCALE 8 + +#ifndef __MSDOS__ +#define JOYSTICK_READ_TIME (F1_0 / 40) // Read joystick at 40 Hz. +#else +#define JOYSTICK_READ_TIME (F1_0 / 10) // Read joystick at 10 Hz. +#endif + +fix LastReadTime = 0; + +fix joy_axis[JOY_MAX_AXES]; + + +void reset_cruise(void) +{ + Cruise_speed = 0; +} + + +static inline void button_down(control_button button) +{ + Controls.count[button]++; + Controls.state[button] = 1; + Controls.time_went_down[button] = timer_get_fixed_seconds(); +} + + +static inline void button_up(control_button button) +{ + Controls.state[button] = 0; + Controls.time_held_down[button] += timer_get_fixed_seconds() - Controls.time_went_down[button]; +} + + +void controls_cmd_strafe_on(int argc, char **argv) { button_down(slide_on); } +void controls_cmd_strafe_off(int argc, char **argv) { button_up(slide_on); } +void controls_cmd_bank_on(int argc, char **argv) { button_down(bank_on); } +void controls_cmd_bank_off(int argc, char **argv) { button_up(bank_on); } +void controls_cmd_attack_on(int argc, char **argv) { button_down(fire_primary); } +void controls_cmd_attack_off(int argc, char **argv) { button_up(fire_primary); } +void controls_cmd_attack2_on(int argc, char **argv) { button_down(fire_secondary); } +void controls_cmd_attack2_off(int argc, char **argv) { button_up(fire_secondary); } +void controls_cmd_rearview_on(int argc, char **argv) { button_down(rear_view); } +void controls_cmd_rearview_off(int argc, char **argv) { button_up(rear_view); } +void controls_cmd_automap_on(int argc, char **argv) { button_down(automap); } +void controls_cmd_automap_off(int argc, char **argv) { button_up(automap); } +void controls_cmd_afterburn_on(int argc, char **argv) { button_down(afterburner); } +void controls_cmd_afterburn_off(int argc, char **argv) { button_up(afterburner); } +void controls_cmd_flare(int argc, char **argv) { button_down(fire_flare); } +void controls_cmd_bomb(int argc, char **argv) { button_up(drop_bomb); } +void controls_cmd_cycle(int argc, char **argv) { button_down(cycle_primary); } +void controls_cmd_cycle2(int argc, char **argv) { button_up(cycle_secondary); } +void controls_cmd_headlight(int argc, char **argv) { button_down(headlight); } + + + +void controls_init(void) +{ + cmd_addcommand("+strafe", controls_cmd_strafe_on); + cmd_addcommand("-strafe", controls_cmd_strafe_off); + cmd_addcommand("+bank", controls_cmd_bank_on); + cmd_addcommand("-bank", controls_cmd_bank_off); + cmd_addcommand("+attack", controls_cmd_attack_on); + cmd_addcommand("-attack", controls_cmd_attack_off); + cmd_addcommand("+attack2", controls_cmd_attack2_on); + cmd_addcommand("-attack2", controls_cmd_attack2_off); + cmd_addcommand("+rearview", controls_cmd_rearview_on); + cmd_addcommand("-rearview", controls_cmd_rearview_off); + cmd_addcommand("+automap", controls_cmd_automap_on); + cmd_addcommand("-automap", controls_cmd_automap_off); + cmd_addcommand("+afterburner", controls_cmd_afterburn_on); + cmd_addcommand("-afterburner", controls_cmd_afterburn_off); + cmd_addcommand("flare", controls_cmd_flare); + cmd_addcommand("bomb", controls_cmd_bomb); + cmd_addcommand("cycle", controls_cmd_cycle); + cmd_addcommand("cycle2", controls_cmd_cycle2); + cmd_addcommand("headlight", controls_cmd_headlight); +} + + +/* Preserves pitch, heading, and states */ +void controls_reset(void) +{ + Controls.forward_thrust_time = 0; + Controls.sideways_thrust_time = 0; + Controls.vertical_thrust_time = 0; + Controls.bank_time = 0; + memset(Controls.count, 0, CONTROL_NUM_BUTTONS); +} + + +void controls_read_all() +{ + int i; + int slide_on, bank_on; + int dx, dy, dz; + fix ctime; + int raw_joy_axis[JOY_MAX_AXES]; + fix kp, kh; + ubyte channel_masks; + fix analog_control[7]; // indexed on control_analog + + memset(analog_control, 0, sizeof(analog_control)); + + controls_reset(); + + cmd_queue_process(); + + slide_on = 0; + bank_on = 0; + + ctime = timer_get_fixed_seconds(); + + //--------- Read Joystick ----------- + if ( (LastReadTime + JOYSTICK_READ_TIME > ctime) ) { +#ifndef __MSDOS__ + if ((ctime < 0) && (LastReadTime >= 0)) +#else + if ((ctime < 0) && (LastReadTime > 0)) +#endif + LastReadTime = ctime; + } else if (Config_control_joystick.intval) { + LastReadTime = ctime; + channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis ); + + Assert(joy_num_axes <= 6); // don't have cvar mapping above 6 yet + for (i = 0; i < joy_num_axes; i++) { +#ifndef SDL_INPUT + if (channel_masks&(1< 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; +#ifndef SDL_INPUT + } else { + joy_axis[i] = 0; + } +#endif + } + } else { + for (i = 0; i < joy_num_axes; i++) + joy_axis[i] = 0; + } + + if (Config_control_joystick.intval) + for (i = 0; i < 6; i++) + analog_control[joy_advaxes[i].intval] += joy_axis[i] * (joy_invert[i].intval ? -1 : 1) * Config_joystick_sensitivity[joy_advaxes[i].intval-1].value; + + if (Config_control_mouse.intval) { + //--------- Read Mouse ----------- + mouse_get_delta( &dx, &dy, &dz ); + + analog_control[mouse_axes[0].intval] += dx * FrameTime / 35 * (mouse_invert[0].intval ? -1 : 1) * Config_mouse_sensitivity[mouse_axes[0].intval-1].value; + analog_control[mouse_axes[1].intval] += dy * FrameTime / 25 * (mouse_invert[1].intval ? -1 : 1) * Config_mouse_sensitivity[mouse_axes[1].intval-1].value; + analog_control[mouse_axes[2].intval] += dz * FrameTime * (mouse_invert[2].intval ? -1 : 1) * Config_mouse_sensitivity[mouse_axes[2].intval-1].value; + } + + //------------ Read pitch ----------- + if ( !Controls.state[slide_on] ) { + // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time))); + kp = 0; + + kp += console_control_down_time(CONCNTL_LOOKDOWN) / (PH_SCALE * 2); + kp -= console_control_down_time(CONCNTL_LOOKUP) / (PH_SCALE * 2); + + if (kp == 0) + Controls.pitch_time = 0; + else if (kp > 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; + + Controls.pitch_time -= analog_control[AXIS_PITCH]; + + } else + Controls.pitch_time = 0; + + if (!Player_is_dead) { + + //----------- Read vertical_thrust ----------------- + + if ( Controls.state[slide_on] ) { + Controls.vertical_thrust_time += console_control_down_time(CONCNTL_LOOKDOWN); + Controls.vertical_thrust_time -= console_control_down_time(CONCNTL_LOOKUP); + Controls.vertical_thrust_time += analog_control[AXIS_PITCH]; + } + + Controls.vertical_thrust_time += console_control_down_time(CONCNTL_MOVEUP); + Controls.vertical_thrust_time -= console_control_down_time(CONCNTL_MOVEDOWN); + Controls.vertical_thrust_time += analog_control[AXIS_UPDOWN]; + + } + + //---------- Read heading ----------- + + if ( !Controls.state[slide_on] && !Controls.state[bank_on] ) { + //mprintf((0, "heading: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time))); + kh = 0; + + kh -= console_control_down_time(CONCNTL_LEFT) / PH_SCALE; + kh += console_control_down_time(CONCNTL_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; + + Controls.heading_time += analog_control[AXIS_TURN]; + + } else + Controls.heading_time = 0; + + if (!Player_is_dead) { + + //----------- Read sideways_thrust ----------------- + + if ( slide_on ) { + Controls.sideways_thrust_time -= console_control_down_time(CONCNTL_LEFT); + Controls.sideways_thrust_time += console_control_down_time(CONCNTL_RIGHT); + Controls.sideways_thrust_time += analog_control[AXIS_TURN]; + } + + Controls.sideways_thrust_time -= console_control_down_time(CONCNTL_MOVELEFT); + Controls.sideways_thrust_time += console_control_down_time(CONCNTL_MOVERIGHT); + Controls.sideways_thrust_time += analog_control[AXIS_LEFTRIGHT]; + + } + + //----------- Read bank ----------------- + + if ( Controls.state[bank_on] ) { + Controls.bank_time += console_control_down_time(CONCNTL_LEFT); + Controls.bank_time -= console_control_down_time(CONCNTL_RIGHT); + Controls.bank_time -= analog_control[AXIS_TURN]; + } + + Controls.bank_time += console_control_down_time(CONCNTL_BANKLEFT); + Controls.bank_time -= console_control_down_time(CONCNTL_BANKRIGHT); + Controls.bank_time -= analog_control[AXIS_BANK]; + + // the following "if" added by WraithX, 4/14/00 + // done so that dead players can't move + if (!Player_is_dead) { + + //----------- Read forward_thrust ------------- + + Controls.forward_thrust_time += console_control_down_time(CONCNTL_FORWARD); + Controls.forward_thrust_time -= console_control_down_time(CONCNTL_BACK); + Controls.forward_thrust_time -= analog_control[AXIS_THROTTLE]; + + //---------Read Energy->Shield key---------- + + if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && console_control_state(CONCNTL_NRGSHIELD)) + transfer_energy_to_shield(console_control_down_time(CONCNTL_NRGSHIELD)); + + } + + //----------- Read stupid-cruise-control-type of throttle. + + Cruise_speed += console_control_down_time(CONCNTL_CRUISEUP); + Cruise_speed -= console_control_down_time(CONCNTL_CRUISEDOWN); + + if (console_control_down_count(CONCNTL_CRUISEOFF)) + 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; + +#if 0 + read_head_tracker(); +#endif + + //----------- Clamp values between -FrameTime and FrameTime + if (FrameTime > F1_0 ) + mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) )); + + if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2; + if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime; + if (Controls.heading_time > FrameTime ) Controls.heading_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.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2; + if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime; + if (Controls.heading_time < -FrameTime ) Controls.heading_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 RELEASE + if ( keyd_pressed[KEY_DELETE] ) { + memset( &Controls, 0, sizeof(control_info) ); + } +#endif +} diff --git a/main/controls.h b/main/controls.h index ed934260..dc301e1b 100644 --- a/main/controls.h +++ b/main/controls.h @@ -22,6 +22,45 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #define _CONTROLS_H +typedef enum { + slide_on, + bank_on, + rear_view, + fire_primary, + fire_secondary, + fire_flare, + drop_bomb, + automap, + afterburner, + cycle_primary, + cycle_secondary, + headlight, + CONTROL_NUM_BUTTONS +} control_button; + + +typedef struct _control_info { + fix pitch_time; + fix vertical_thrust_time; + fix heading_time; + fix sideways_thrust_time; + fix bank_time; + fix forward_thrust_time; + + fix time_held_down[CONTROL_NUM_BUTTONS]; + fix time_went_down[CONTROL_NUM_BUTTONS]; + ubyte count[CONTROL_NUM_BUTTONS]; + ubyte state[CONTROL_NUM_BUTTONS]; +} control_info; + + +extern control_info Controls; +extern void controls_read_all(); +extern void controls_init(void); + +//set the cruise speed to zero +extern void reset_cruise(void); + void read_flying_controls( object * obj ); extern ubyte Controls_stopped; diff --git a/main/game.c b/main/game.c index 5d067617..2e0de2c3 100644 --- a/main/game.c +++ b/main/game.c @@ -1438,9 +1438,9 @@ void do_afterburner_stuff(void) #endif } - if ((Controls.afterburner_state != Last_afterburner_state && Last_afterburner_charge) || (Last_afterburner_state && Last_afterburner_charge && !Afterburner_charge)) { + if ((Controls.state[afterburner] != Last_afterburner_state && Last_afterburner_charge) || (Last_afterburner_state && Last_afterburner_charge && !Afterburner_charge)) { - if (Afterburner_charge && Controls.afterburner_state && (Players[Player_num].flags & PLAYER_FLAGS_AFTERBURNER)) { + if (Afterburner_charge && Controls.state[afterburner] && (Players[Player_num].flags & PLAYER_FLAGS_AFTERBURNER)) { digi_link_sound_to_object3( SOUND_AFTERBURNER_IGNITE, Players[Player_num].objnum, 1, F1_0, i2f(256), AFTERBURNER_LOOP_START, AFTERBURNER_LOOP_END ); #ifdef NETWORK if (Game_mode & GM_MULTI) @@ -1457,10 +1457,10 @@ void do_afterburner_stuff(void) } } - //@@if (Controls.afterburner_state && Afterburner_charge) + //@@if (Controls.state[afterburner] && Afterburner_charge) //@@ afterburner_shake(); - Last_afterburner_state = Controls.afterburner_state; + Last_afterburner_state = Controls.state[afterburner]; Last_afterburner_charge = Afterburner_charge; } @@ -1749,7 +1749,7 @@ void check_rear_view() static int leave_mode; static fix entry_time; - if ( Controls.rear_view_down_count ) { //key/button has gone down + if ( Controls.count[rear_view] ) { // key/button has gone down if (Rear_view) { Rear_view = 0; @@ -1780,7 +1780,7 @@ void check_rear_view() } } else - if (Controls.rear_view_down_state) { + if (Controls.state[rear_view]) { if (leave_mode == 0 && (timer_get_fixed_seconds() - entry_time) > Rear_view_leave_time) leave_mode = 1; @@ -2777,7 +2777,7 @@ int add_flicker(int segnum, int sidenum, fix delay, unsigned long mask) void FireLaser() { - Global_laser_firing_count = Weapon_info[Primary_weapon_to_weapon_info[Primary_weapon]].fire_count * (Controls.fire_primary_state || Controls.fire_primary_down_count); + Global_laser_firing_count = Weapon_info[Primary_weapon_to_weapon_info[Primary_weapon]].fire_count * (Controls.state[fire_primary] || Controls.count[fire_primary]); if ((Primary_weapon == FUSION_INDEX) && (Global_laser_firing_count)) { if ((Players[Player_num].energy < F1_0*2) && (Auto_fire_fusion_cannon_time == 0)) { diff --git a/main/gamecntl.c b/main/gamecntl.c index e6b3dc48..95811fc0 100644 --- a/main/gamecntl.c +++ b/main/gamecntl.c @@ -298,42 +298,36 @@ void do_weapon_stuff(void) { int i; - if (Controls.fire_flare_down_count) + if (Controls.count[fire_flare]) if (allowed_to_fire_flare()) Flare_create(ConsoleObject); if (allowed_to_fire_missile()) - Global_missile_firing_count += Weapon_info[Secondary_weapon_to_weapon_info[Secondary_weapon]].fire_count * (Controls.fire_secondary_state || Controls.fire_secondary_down_count); + Global_missile_firing_count += Weapon_info[Secondary_weapon_to_weapon_info[Secondary_weapon]].fire_count * (Controls.state[fire_secondary] || Controls.count[fire_secondary]); if (Global_missile_firing_count) { do_missile_firing(1); //always enable autoselect for normal missile firing Global_missile_firing_count--; } - if (Controls.cycle_primary_count) - { - for (i=0;i GameTime) - if (Next_toggle_time[i] < GameTime + (F1_0/8)) // In case time is bogus, never wait > 1 second. - return 0; - - Next_toggle_time[i] = GameTime + (F1_0/8); - - return 1; -} - - -void kc_cmd_attack_on(int argc, char **argv) { Controls.fire_primary_state = 1; Controls.fire_primary_down_count++; } -void kc_cmd_attack_off(int argc, char **argv) { Controls.fire_primary_state = 0; } -void kc_cmd_attack2_on(int argc, char **argv) { Controls.fire_secondary_state = 1; Controls.fire_secondary_down_count++; } -void kc_cmd_attack2_off(int argc, char **argv) { Controls.fire_secondary_state = 0; } -void kc_cmd_rearview_on(int argc, char **argv) { Controls.rear_view_down_state = 1; Controls.rear_view_down_count++; } -void kc_cmd_rearview_off(int argc, char **argv) { Controls.rear_view_down_state = 0; } -void kc_cmd_automap_on(int argc, char **argv) { Controls.automap_state = 1; Controls.automap_down_count++; } -void kc_cmd_automap_off(int argc, char **argv) { Controls.automap_state = 0; } -void kc_cmd_afterburn_on(int argc, char **argv) { Controls.afterburner_state = 1; } -void kc_cmd_afterburn_off(int argc, char **argv) { Controls.afterburner_state = 0; } -void kc_cmd_flare(int argc, char **argv) { Controls.fire_flare_down_count++; } -void kc_cmd_bomb(int argc, char **argv) { Controls.drop_bomb_down_count++; } -void kc_cmd_cycle(int argc, char **argv) { Controls.cycle_primary_count++; } -void kc_cmd_cycle2(int argc, char **argv) { Controls.cycle_secondary_count++; } -void kc_cmd_headlight(int argc, char **argv) { Controls.headlight_count++; } - - - -void kconfig_init(void) -{ - cmd_addcommand("+attack", kc_cmd_attack_on); - cmd_addcommand("-attack", kc_cmd_attack_off); - cmd_addcommand("+attack2", kc_cmd_attack2_on); - cmd_addcommand("-attack2", kc_cmd_attack2_off); - cmd_addcommand("+rearview", kc_cmd_rearview_on); - cmd_addcommand("-rearview", kc_cmd_rearview_off); - cmd_addcommand("+automap", kc_cmd_automap_on); - cmd_addcommand("-automap", kc_cmd_automap_off); - cmd_addcommand("+afterburner", kc_cmd_afterburn_on); - cmd_addcommand("-afterburner", kc_cmd_afterburn_off); - cmd_addcommand("flare", kc_cmd_flare); - cmd_addcommand("bomb", kc_cmd_bomb); - cmd_addcommand("cycle", kc_cmd_cycle); - cmd_addcommand("cycle2", kc_cmd_cycle2); - cmd_addcommand("headlight", kc_cmd_headlight); -} - - -/* Preserves pitch, heading, and states */ -void controls_reset(void) -{ - Controls.forward_thrust_time = 0; - Controls.sideways_thrust_time = 0; - Controls.vertical_thrust_time = 0; - Controls.bank_time = 0; - Controls.rear_view_down_count = 0; - Controls.fire_primary_down_count = 0; - Controls.fire_secondary_down_count = 0; - Controls.fire_flare_down_count = 0; - Controls.drop_bomb_down_count = 0; - Controls.automap_down_count = 0; - Controls.cycle_primary_count = 0; - Controls.cycle_secondary_count = 0; - Controls.headlight_count = 0; -} - - -void controls_read_all() -{ - int i; - int slide_on, bank_on; - int dx, dy, dz; - fix ctime; - int raw_joy_axis[JOY_MAX_AXES]; - fix kp, kh; - ubyte channel_masks; - fix analog_control[7]; // indexed on kc_axis_map - - memset(analog_control, 0, sizeof(analog_control)); - - controls_reset(); - - cmd_queue_process(); - - slide_on = 0; - bank_on = 0; - - ctime = timer_get_fixed_seconds(); - - //--------- Read Joystick ----------- - if ( (LastReadTime + JOYSTICK_READ_TIME > ctime) ) { -# ifndef __MSDOS__ - if ((ctime < 0) && (LastReadTime >= 0)) -# else - if ((ctime < 0) && (LastReadTime > 0)) -# endif - LastReadTime = ctime; - } else if (Config_control_joystick.intval) { - LastReadTime = ctime; - channel_masks = joystick_read_raw_axis( JOY_ALL_AXIS, raw_joy_axis ); - - Assert(joy_num_axes <= 6); // don't have cvar mapping above 6 yet - for (i = 0; i < joy_num_axes; i++) - { -#ifndef SDL_INPUT - if (channel_masks&(1< 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; -#ifndef SDL_INPUT - } else { - joy_axis[i] = 0; - } -#endif - } - } else { - for (i = 0; i < joy_num_axes; i++) - joy_axis[i] = 0; - } - - if (Config_control_joystick.intval) - for (i = 0; i < 6; i++) - analog_control[joy_advaxes[i].intval] += joy_axis[i] * (joy_invert[i].intval ? -1 : 1) * Config_joystick_sensitivity[joy_advaxes[i].intval-1].value; - - if (Config_control_mouse.intval) { - //--------- Read Mouse ----------- - mouse_get_delta( &dx, &dy, &dz ); - - analog_control[mouse_axes[0].intval] += dx * FrameTime / 35 * (mouse_invert[0].intval ? -1 : 1) * Config_mouse_sensitivity[mouse_axes[0].intval-1].value; - analog_control[mouse_axes[1].intval] += dy * FrameTime / 25 * (mouse_invert[1].intval ? -1 : 1) * Config_mouse_sensitivity[mouse_axes[1].intval-1].value; - analog_control[mouse_axes[2].intval] += dz * FrameTime * (mouse_invert[2].intval ? -1 : 1) * Config_mouse_sensitivity[mouse_axes[2].intval-1].value; - } - -//------------- Read slide_on ------------- - - slide_on |= console_control_state(CONCNTL_STRAFE); - -//------------- Read bank_on --------------- - - bank_on |= console_control_state(CONCNTL_BANK); - -//------------ Read pitch_time ----------- - if ( !slide_on ) { - // mprintf((0, "pitch: %7.3f %7.3f: %7.3f\n", f2fl(k4), f2fl(k6), f2fl(Controls.heading_time))); - kp = 0; - - kp += console_control_down_time(CONCNTL_LOOKDOWN) / (PH_SCALE * 2); - kp -= console_control_down_time(CONCNTL_LOOKUP) / (PH_SCALE * 2); - - if (kp == 0) - Controls.pitch_time = 0; - else if (kp > 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; - - Controls.pitch_time -= analog_control[AXIS_PITCH]; - - } 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 ) { - Controls.vertical_thrust_time += console_control_down_time(CONCNTL_LOOKDOWN); - Controls.vertical_thrust_time -= console_control_down_time(CONCNTL_LOOKUP); - Controls.vertical_thrust_time += analog_control[AXIS_PITCH]; - } - - Controls.vertical_thrust_time += console_control_down_time(CONCNTL_MOVEUP); - Controls.vertical_thrust_time -= console_control_down_time(CONCNTL_MOVEDOWN); - Controls.vertical_thrust_time += analog_control[AXIS_UPDOWN]; - -}// 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; - - kh -= console_control_down_time(CONCNTL_LEFT) / PH_SCALE; - kh += console_control_down_time(CONCNTL_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; - - Controls.heading_time += analog_control[AXIS_TURN]; - - } 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 ) { - Controls.sideways_thrust_time -= console_control_down_time(CONCNTL_LEFT); - Controls.sideways_thrust_time += console_control_down_time(CONCNTL_RIGHT); - Controls.sideways_thrust_time += analog_control[AXIS_TURN]; - } - - Controls.sideways_thrust_time -= console_control_down_time(CONCNTL_MOVELEFT); - Controls.sideways_thrust_time += console_control_down_time(CONCNTL_MOVERIGHT); - Controls.sideways_thrust_time += analog_control[AXIS_LEFTRIGHT]; - -}// end "if" added by WraithX - -//----------- Read bank_time ----------------- - - if ( bank_on ) { - Controls.bank_time += console_control_down_time(CONCNTL_LEFT); - Controls.bank_time -= console_control_down_time(CONCNTL_RIGHT); - Controls.bank_time -= analog_control[AXIS_TURN]; - } - - Controls.bank_time += console_control_down_time(CONCNTL_BANKLEFT); - Controls.bank_time -= console_control_down_time(CONCNTL_BANKRIGHT); - Controls.bank_time -= analog_control[AXIS_BANK]; - -// 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 ------------- - - Controls.forward_thrust_time += console_control_down_time(CONCNTL_FORWARD); - Controls.forward_thrust_time -= console_control_down_time(CONCNTL_BACK); - Controls.forward_thrust_time -= analog_control[AXIS_THROTTLE]; - -//---------Read Energy->Shield key---------- - - if ((Players[Player_num].flags & PLAYER_FLAGS_CONVERTER) && console_control_state(CONCNTL_NRGSHIELD)) - transfer_energy_to_shield(console_control_down_time(CONCNTL_NRGSHIELD)); - -}//end "if" added by WraithX -//----------- Read stupid-cruise-control-type of throttle. - - Cruise_speed += console_control_down_time(CONCNTL_CRUISEUP); - Cruise_speed -= console_control_down_time(CONCNTL_CRUISEDOWN); - - if (console_control_down_count(CONCNTL_CRUISEOFF)) - 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; - -#if 0 - read_head_tracker(); -#endif - -//----------- Clamp values between -FrameTime and FrameTime - if (FrameTime > F1_0 ) - mprintf( (1, "Bogus frame time of %.2f seconds\n", f2fl(FrameTime) )); - - if (Controls.pitch_time > FrameTime/2 ) Controls.pitch_time = FrameTime/2; - if (Controls.vertical_thrust_time > FrameTime ) Controls.vertical_thrust_time = FrameTime; - if (Controls.heading_time > FrameTime ) Controls.heading_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.pitch_time < -FrameTime/2 ) Controls.pitch_time = -FrameTime/2; - if (Controls.vertical_thrust_time < -FrameTime ) Controls.vertical_thrust_time = -FrameTime; - if (Controls.heading_time < -FrameTime ) Controls.heading_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 RELEASE - if ( keyd_pressed[KEY_DELETE] ) { - memset( &Controls, 0, sizeof(control_info) ); - } -#endif -} - - -void reset_cruise(void) -{ - Cruise_speed=0; -} - void kc_set_controls() { diff --git a/main/kconfig.h b/main/kconfig.h index a95c5835..e80e00ac 100644 --- a/main/kconfig.h +++ b/main/kconfig.h @@ -24,37 +24,8 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "config.h" #include "gamestat.h" -typedef struct _control_info { - fix pitch_time; - fix vertical_thrust_time; - fix heading_time; - fix sideways_thrust_time; - fix bank_time; - fix forward_thrust_time; - - ubyte rear_view_down_count; - ubyte rear_view_down_state; - - ubyte fire_primary_down_count; - ubyte fire_primary_state; - ubyte fire_secondary_state; - ubyte fire_secondary_down_count; - ubyte fire_flare_down_count; - - ubyte drop_bomb_down_count; - - ubyte automap_down_count; - ubyte automap_state; - - ubyte afterburner_state; - ubyte cycle_primary_count; - ubyte cycle_secondary_count; - ubyte headlight_count; -} control_info; extern ubyte ExtGameStatus; -extern control_info Controls; -extern void controls_read_all(); extern void kconfig(int n, char *title); @@ -84,11 +55,6 @@ extern void kc_set_controls(); // Tries to use vfx1 head tracking. void kconfig_sense_init(); -//set the cruise speed to zero -extern void reset_cruise(void); - extern int kconfig_is_axes_used(int axis); -extern void kconfig_init(void); - #endif /* _KCONFIG_H */ -- 2.39.2