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; }
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; }
//Process selected keys until game unpaused. returns key that left pause (p or esc) int DoGamePause (void) { int key = 0; int bScreenChanged; char msg [1000]; char totalTime [9], xLevelTime [9]; if (gameData.app.bGamePaused) { //unpause! gameData.app.bGamePaused = 0; gameStates.app.bEnterGame = 1; #if defined (TACTILE) if (TactileStick) EnableForces(); #endif return KEY_PAUSE; } if (gameData.app.nGameMode & GM_NETWORK) { DoShowNetgameHelp(); return (KEY_PAUSE); } else if (gameData.app.nGameMode & GM_MULTI) { HUDInitMessage (TXT_MODEM_PAUSE); return (KEY_PAUSE); } PauseGame (); SetPopupScreenMode (); paletteManager.LoadEffect (); formatTime (totalTime, X2I (LOCALPLAYER.timeTotal) + LOCALPLAYER.hoursTotal * 3600); formatTime (xLevelTime, X2I (LOCALPLAYER.timeLevel) + LOCALPLAYER.hoursLevel * 3600); if (gameData.demo.nState!=ND_STATE_PLAYBACK) sprintf (msg, TXT_PAUSE_MSG1, GAMETEXT (332 + gameStates.app.nDifficultyLevel), LOCALPLAYER.hostages.nOnBoard, xLevelTime, totalTime); else sprintf (msg, TXT_PAUSE_MSG2, GAMETEXT (332 + gameStates.app.nDifficultyLevel), LOCALPLAYER.hostages.nOnBoard); if (!gameOpts->menus.nStyle) { gameStates.menus.nInMenu++; GameRenderFrame (); gameStates.menus.nInMenu--; } messageBox.Show (pszPauseMsg = msg, false); GrabMouse (0, 0); while (gameData.app.bGamePaused) { if (!(gameOpts->menus.nStyle && gameStates.app.bGameRunning)) key = KeyGetChar(); else { gameStates.menus.nInMenu++; while (!(key = KeyInKey ())) { GameRenderFrame (); paletteManager.LoadEffect (NULL); messageBox.Render (); G3_SLEEP (1); } gameStates.menus.nInMenu--; } #if DBG HandleTestKey(key); #endif bScreenChanged = HandleSystemKey (key); HandleVRKey (key); if (bScreenChanged) { GameRenderFrame (); messageBox.Render (); #if 0 show_extraViews (); if ((gameStates.render.cockpit.nType == CM_FULL_COCKPIT) || (gameStates.render.cockpit.nType == CM_STATUS_BAR)) RenderGauges(); #endif } } GrabMouse (1, 0); messageBox.Clear (); ResumeGame (); return key; }