int ReadControls(d_event *event) { int key; static ubyte exploding_flag=0; Player_fired_laser_this_frame=-1; if (Player_exploded) { if (exploding_flag==0) { exploding_flag = 1; // When player starts exploding, clear all input devices... game_flush_inputs(); } } else { exploding_flag=0; } if (Player_is_dead && !( (Game_mode & GM_MULTI) && (multi_sending_message[Player_num] || multi_defining_message) )) if (HandleDeathInput(event)) { if( (Game_mode & GM_MULTI) && (Netgame.SpawnStyle == SPAWN_STYLE_PREVIEW) ) { // fall through to normal key handler // Make sure flares/shots go in direction of preview ConsoleObject->orient = Dead_player_camera->orient; } else { return 1; } } if (Newdemo_state == ND_STATE_PLAYBACK) update_vcr_state(); if (event->type == EVENT_KEY_COMMAND) { key = event_key_get(event); #ifdef NETWORK if ( (Game_mode & GM_MULTI) && (multi_sending_message[Player_num] || multi_defining_message) ) { return multi_message_input_sub(key); } #endif #ifndef RELEASE #ifdef NETWORK if ((key&KEY_DEBUGGED)&&(Game_mode&GM_MULTI)) { Network_message_reciever = 100; // Send to everyone... sprintf( Network_message, "%s %s", TXT_I_AM_A, TXT_CHEATER); } #endif #endif if (Endlevel_sequence) { if (HandleEndlevelKey(key)) return 1; } else if (Newdemo_state == ND_STATE_PLAYBACK ) { if (HandleDemoKey(key)) return 1; } else { if (FinalCheats(key)) return 1; if (HandleSystemKey(key)) return 1; if (HandleGameKey(key)) return 1; } #ifndef RELEASE if (HandleTestKey(key)) return 1; #endif if (call_default_handler(event)) return 1; } int should_read_controls; if (!Endlevel_sequence && !Player_is_dead && (Newdemo_state != ND_STATE_PLAYBACK)) { should_read_controls = 1; } else { should_read_controls = 0; } #ifdef NETWORK if((Game_mode & GM_NETWORK) && (Netgame.SpawnStyle == SPAWN_STYLE_PREVIEW) && Player_is_dead && Player_exploded) { if (!Endlevel_sequence && (Newdemo_state != ND_STATE_PLAYBACK)) { should_read_controls = 1; } } #endif if (should_read_controls) { kconfig_read_controls(event, 0); check_rear_view(); // If automap key pressed, enable automap unless you are in network mode, control center destroyed and < 10 seconds left if ( Controls.automap_count > 0 ) { Controls.automap_count = 0; if (!((Game_mode & GM_MULTI) && Control_center_destroyed && (Countdown_seconds_left < 10))) { do_automap(0); return 1; } } do_weapon_n_item_stuff(); } return 0; }
int ReadControls (void) { int key, skipControls = 0; fix keyTime; static ubyte explodingFlag=0; gameStates.app.bPlayerFiredLaserThisFrame=-1; if (!gameStates.app.bEndLevelSequence && !gameStates.app.bPlayerIsDead) { if ((gameData.demo.nState == ND_STATE_PLAYBACK) || (gameData.marker.nDefiningMsg) || gameData.multigame.msg.bSending || gameData.multigame.msg.bDefining ) // WATCH OUT!!! WEIRD CODE ABOVE!!! memset(&Controls, 0, sizeof(tControlInfo)); else skipControls = ControlsReadAll (); //NOTE LINK TO ABOVE!!! CheckRearView (); // If automap key pressed, enable automap unless you are in network mode, control center destroyed and < 10 seconds left if (Controls [0].automapDownCount && !gameData.objs.speedBoost [OBJ_IDX (gameData.objs.consoleP)].bBoosted && !(IsMultiGame && gameData.reactor.bDestroyed && (gameData.reactor.countdown.nSecsLeft < 10))) automap.m_bDisplay = -1; DoWeaponStuff (); } if (gameStates.app.bPlayerExploded) { //gameStates.app.bPlayerIsDead && (gameData.objs.consoleP->flags & OF_EXPLODING)) { if (!explodingFlag) { explodingFlag = 1; // When CPlayerData starts exploding, clear all input devices... GameFlushInputs (); } else { int i; for (i = 0; i < 4; i++) if (JoyGetButtonDownCnt (i) > 0) gameStates.app.bDeathSequenceAborted = 1; for (i = 0; i < 3; i++) if (MouseButtonDownCount (i) > 0) gameStates.app.bDeathSequenceAborted = 1; if (gameStates.app.bDeathSequenceAborted) GameFlushInputs (); } } else { explodingFlag = 0; } if (gameData.demo.nState == ND_STATE_PLAYBACK) UpdateVCRState (); while ((key = KeyInKeyTime (&keyTime)) != 0) { if (gameData.marker.nDefiningMsg) { MarkerInputMessage (key); continue; } if (IsMultiGame && (gameData.multigame.msg.bSending || gameData.multigame.msg.bDefining)) { MultiMsgInputSub (key); continue; //get next key } #if DBG if ((key&KEYDBGGED) && IsMultiGame) { gameData.multigame.msg.nReceiver = 100; // Send to everyone... sprintf(gameData.multigame.msg.szMsg, "%s %s", TXT_I_AM_A, TXT_CHEATER); } #endif #ifdef CONSOLE if(!console.Events (key)) continue; #endif if (gameStates.app.bPlayerIsDead) HandleDeathKey (key); if (gameStates.app.bEndLevelSequence) HandleEndlevelKey (key); else if (gameData.demo.nState == ND_STATE_PLAYBACK) { HandleDemoKey (key); #if DBG HandleTestKey (key); #endif } else { FinalCheats (key); HandleSystemKey (key); HandleVRKey (key); HandleGameKey (key); #if DBG HandleTestKey (key); #endif } } return skipControls; }