void ResumeGame (void) { GameFlushInputs (); paletteManager.LoadEffect (); StartTime (0); if (redbook.Playing ()) RBAResume (); audio.ResumeAll (); gameData.app.bGamePaused = 0; }
void PauseGame (void) { if (!gameData.app.bGamePaused) { gameData.app.bGamePaused = 1; audio.PauseAll (); RBAPause (); StopTime (); paletteManager.SaveEffect (); paletteManager.ResetEffect (); GameFlushInputs (); #if defined (TACTILE) if (TactileStick) DisableForces(); #endif } }
int SelectAndLoadMission (int bMulti, int *bAnarchyOnly) { int i, j, nMissions, nDefaultMission, nNewMission = -1; CStack<char*> msnNames (MAX_MISSIONS); CListBox lb; static const char *menuTitles [4]; menuTitles [0] = TXT_NEW_GAME; menuTitles [1] = TXT_NEW_D1GAME; menuTitles [2] = TXT_NEW_D2GAME; menuTitles [3] = TXT_NEW_GAME; if (bAnarchyOnly) *bAnarchyOnly = 0; do { msnNames.Reset (); nMissions = BuildMissionList (1, nNewMission); if (nMissions < 1) return -1; nDefaultMission = 0; for (i = 0; i < nMissions; i++) { msnNames.Push (gameData.missions.list [i].szMissionName); j = MsnHasGameVer (msnNames [i]) ? 4 : 0; if (!stricmp (msnNames [i] + j, gameConfig.szLastMission)) nDefaultMission = i; } gameStates.app.nExtGameStatus = bMulti ? GAMESTAT_START_MULTIPLAYER_MISSION : GAMESTAT_SELECT_MISSION; gameOpts->app.nVersionFilter = NMCLAMP (gameOpts->app.nVersionFilter, 1, 3); nNewMission = lb.ListBox (bMulti ? TXT_MULTI_MISSION : menuTitles [gameOpts->app.nVersionFilter], msnNames, nDefaultMission); GameFlushInputs (); if (nNewMission == -1) return -1; //abort! } while (!gameData.missions.list [nNewMission].nDescentVersion); strcpy (gameConfig.szLastMission, msnNames [nNewMission]); if (!LoadMission (nNewMission)) { MsgBox (NULL, NULL, 1, TXT_OK, TXT_MISSION_ERROR); return -1; } gameStates.app.bD1Mission = (gameData.missions.list [nNewMission].nDescentVersion == 1); gameData.missions.nLastMission = nNewMission; if (bAnarchyOnly) *bAnarchyOnly = gameData.missions.list [nNewMission].bAnarchyOnly; return nNewMission; }
void HandleDeathKey(int key) { /* Commented out redundant calls because the key used here typically will be passed to HandleSystemKey later. Note that I do this to pause which is supposed to pass the ESC key to leave the level. This doesn't work in the DOS version anyway. -Samir */ if (gameStates.app.bPlayerExploded && !key_isfunc (key) && !key_ismod (key)) gameStates.app.bDeathSequenceAborted = 1; //Any key but func or modifier aborts if (key == KEY_COMMAND + KEY_SHIFTED + KEY_P) { gameStates.app.bDeathSequenceAborted = 0; // Clear because code above sets this for any key. } else if (key == KEY_PRINT_SCREEN) { gameStates.app.bDeathSequenceAborted = 0; // Clear because code above sets this for any key. } else if (key == (KEY_COMMAND + KEY_P)) { gameStates.app.bDeathSequenceAborted = 0; // Clear because code above sets this for any key. } else if (key == KEY_PAUSE) { gameStates.app.bDeathSequenceAborted = 0; // Clear because code above sets this for any key. } else if (key == KEY_ESC) { if (gameData.objs.consoleP->info.nFlags & OF_EXPLODING) gameStates.app.bDeathSequenceAborted = 1; } else if (key == KEY_BACKSPACE) { gameStates.app.bDeathSequenceAborted = 0; // Clear because code above sets this for any key. Int3 (); } //don't abort death sequence for netgame join/refuse keys else if ((key == KEY_ALTED + KEY_1) || (key == KEY_ALTED + KEY_2)) gameStates.app.bDeathSequenceAborted = 0; if (gameStates.app.bDeathSequenceAborted) GameFlushInputs (); }
void MultiMsgInputSub (int key) { switch (key) { case KEY_F8: case KEY_ESC: MultiSendMsgQuit (); GameFlushInputs (); break; case KEY_LEFT: case KEY_BACKSP: case KEY_PAD4: if (gameData.multigame.msg.nIndex > 0) gameData.multigame.msg.nIndex--; gameData.multigame.msg.szMsg [gameData.multigame.msg.nIndex] = 0; break; case KEY_ENTER: if (gameData.multigame.msg.bSending) MultiSendMsgEnd (); else if (gameData.multigame.msg.bDefining) MultiDefineMacroEnd (); GameFlushInputs (); break; default: if (key > 0) { int ascii = KeyToASCII (key); if (ascii < 255) { if (gameData.multigame.msg.nIndex < MAX_MESSAGE_LEN-2) { gameData.multigame.msg.szMsg [gameData.multigame.msg.nIndex++] = ascii; gameData.multigame.msg.szMsg [gameData.multigame.msg.nIndex] = 0; } else if (gameData.multigame.msg.bSending) { int i; char * ptext, *pcolon; ptext = NULL; gameData.multigame.msg.szMsg [gameData.multigame.msg.nIndex++] = ascii; gameData.multigame.msg.szMsg [gameData.multigame.msg.nIndex] = 0; for (i = gameData.multigame.msg.nIndex-1; i >= 0; i--) { if (gameData.multigame.msg.szMsg [i] == 32) { ptext = &gameData.multigame.msg.szMsg [i+1]; gameData.multigame.msg.szMsg [i] = 0; break; } } MultiSendMsgEnd (); if (ptext) { gameData.multigame.msg.bSending = 1; pcolon = strchr (gameData.multigame.msg.szMsg, ':'); if (pcolon) strcpy (pcolon+1, ptext); else strcpy (gameData.multigame.msg.szMsg, ptext); gameData.multigame.msg.nIndex = (int) strlen (gameData.multigame.msg.szMsg); } } } } } }
void ScoreTableView (int bNetwork) { int i, k, done, choice, nInMenu; uint entryTime = SDL_GetTicks (); int key; int oldstates [MAX_PLAYERS]; int previousSeconds_left = -1; int nReady,nEscaped; int bRedraw = 0; gameStates.menus.nInMenu++; gameStates.app.bGameRunning = 0; bNetwork = gameData.app.nGameMode & GM_NETWORK; for (i = 0; i < MAX_NUM_NET_PLAYERS; i++) audio.DestroyObjectSound (gameData.multiplayer.players [i].nObject); SetScreenMode (SCREEN_MENU); gameData.score.bWaitingForOthers = 0; //@@GrPaletteFadeIn (grPalette,32, 0); GameFlushInputs (); done = 0; for (i = 0; i < gameData.multiplayer.nPlayers; i++) oldstates [i] = gameData.multiplayer.players [i].connected; if (bNetwork) NetworkEndLevel (&key); backgroundManager.LoadStars (true); while (!done) { if (!bRedraw || (ogl.m_states.nDrawBuffer == GL_BACK)) { backgroundManager.Redraw (); ScoreTableRedraw (); bRedraw = 1; } gameData.score.nKillsChanged = 0; for (i = 0; i < 4; i++) if (JoyGetButtonDownCnt (i)) { if (LAST_OEM_LEVEL) { ScoreTableQuit (1, bNetwork); return; } LOCALPLAYER.connected = 7; if (bNetwork) NetworkSendEndLevelPacket (); break; } for (i = 0; i < 3; i++) if (MouseButtonDownCount (i)) { if (LAST_OEM_LEVEL) { ScoreTableQuit (1, bNetwork); return; } LOCALPLAYER.connected=7; if (bNetwork) NetworkSendEndLevelPacket (); break; } //see if redbook song needs to be restarted redbook.CheckRepeat (); k = KeyInKey (); switch (k) { case KEY_ENTER: case KEY_SPACEBAR: if ((gameData.app.nGameMode & GM_SERIAL) || (gameData.app.nGameMode & GM_MODEM)) { done=1; break; } if (LAST_OEM_LEVEL) { ScoreTableQuit (1, bNetwork); return; } gameData.multiplayer.players [gameData.multiplayer.nLocalPlayer].connected = 7; if (bNetwork) NetworkSendEndLevelPacket (); break; case KEY_ESC: if (gameData.app.nGameMode & GM_NETWORK) { gameData.multiplayer.xStartAbortMenuTime = TimerGetApproxSeconds (); nInMenu = gameStates.menus.nInMenu; gameStates.menus.nInMenu = 0; choice = MsgBox (NULL, NetworkEndLevelPoll3, NULL, 2, TXT_YES, TXT_NO, TXT_ABORT_GAME); gameStates.menus.nInMenu = nInMenu; } else nInMenu = gameStates.menus.nInMenu; gameStates.menus.nInMenu = 0; choice = MsgBox (NULL, NULL, 2, TXT_YES, TXT_NO, TXT_ABORT_GAME); gameStates.menus.nInMenu = nInMenu; if (choice == 0) { ScoreTableQuit (1, bNetwork); return; } gameData.score.nKillsChanged = 1; break; case KEY_PRINT_SCREEN: SaveScreenShot (NULL, 0); break; case KEY_BACKSPACE: Int3 (); break; default: break; } if ((SDL_GetTicks () >= entryTime + MAX_VIEW_TIME) && (LOCALPLAYER.connected != 7)) { if (LAST_OEM_LEVEL) { ScoreTableQuit (1, bNetwork); return; } if ((gameData.app.nGameMode & GM_SERIAL) || (gameData.app.nGameMode & GM_MODEM)) { done = 1; break; } LOCALPLAYER.connected = 7; if (bNetwork) NetworkSendEndLevelPacket (); } if (bNetwork && (gameData.app.nGameMode & GM_NETWORK)) { CMenu m (1); m.AddGauge ("", -1, 1000); //dummy for NetworkEndLevelPoll2() NetworkEndLevelPoll2 (m, key, 0, 0); for (nEscaped = 0, nReady = 0, i = 0; i < gameData.multiplayer.nPlayers; i++) { if (gameData.multiplayer.players [i].connected && (i != gameData.multiplayer.nLocalPlayer)) { // Check timeout for idle players if (SDL_GetTicks () > (uint) networkData.nLastPacketTime [i] + ENDLEVEL_IDLE_TIME) { #if TRACE console.printf (CON_DBG, "idle timeout for CPlayerData %d.\n", i); #endif gameData.multiplayer.players [i].connected = 0; NetworkSendEndLevelSub (i); } } if (gameData.multiplayer.players [i].connected != oldstates [i]) { if (szConditionLetters [gameData.multiplayer.players [i].connected] != szConditionLetters [oldstates [i]]) gameData.score.nKillsChanged = 1; oldstates [i] = gameData.multiplayer.players [i].connected; NetworkSendEndLevelPacket (); } if ((gameData.multiplayer.players [i].connected == 0) || (gameData.multiplayer.players [i].connected == 7)) nReady++; if (gameData.multiplayer.players [i].connected != 1) nEscaped++; } if (nReady >= gameData.multiplayer.nPlayers) done = 1; if (nEscaped >= gameData.multiplayer.nPlayers) gameData.reactor.countdown.nSecsLeft = -1; if (previousSeconds_left != gameData.reactor.countdown.nSecsLeft) { previousSeconds_left = gameData.reactor.countdown.nSecsLeft; gameData.score.nKillsChanged=1; } if (gameData.score.nKillsChanged) { ScoreTableRedraw (); gameData.score.nKillsChanged = 0; } } } LOCALPLAYER.connected = 7; // Restore background and exit paletteManager.DisableEffect (); GameFlushInputs (); ScoreTableQuit (0, bNetwork); }
void LegacyNewGameMenu (void) { int nNewLevel, nHighestPlayerLevel; int nMissions; CStack<char*> m (MAX_MISSIONS); int i, choice = 0, nFolder = -1, nDefaultMission = 0; CListBox lb; static int nMission = -1; static const char *menuTitles [4]; menuTitles [0] = TXT_NEW_GAME; menuTitles [1] = TXT_NEW_D1GAME; menuTitles [2] = TXT_NEW_D2GAME; menuTitles [3] = TXT_NEW_GAME; gameStates.app.bD1Mission = 0; gameStates.app.bD1Data = 0; SetDataVersion (-1); if ((nMission < 0) || gameOpts->app.bSinglePlayer) gameFolders.szMsnSubDir [0] = '\0'; hogFileManager.UseMission (""); do { nMissions = BuildMissionList (0, nFolder); if (nMissions < 1) return; for (i = 0; i < nMissions; i++) { m.Push (gameData.missions.list [i].szMissionName); if (!stricmp (m [i], gameConfig.szLastMission)) nDefaultMission = i; } nMission = lb.ListBox (menuTitles [gameOpts->app.nVersionFilter], m, nDefaultMission); GameFlushInputs (); if (nMission == -1) return; //abort! nFolder = nMission; } while (!gameData.missions.list [nMission].nDescentVersion); strcpy (gameConfig.szLastMission, m [nMission]); if (!LoadMission (nMission)) { MsgBox (NULL, NULL, 1, TXT_OK, TXT_ERROR_MSNFILE); return; } gameStates.app.bD1Mission = (gameData.missions.list [nMission].nDescentVersion == 1); gameData.missions.nLastMission = nMission; nNewLevel = 1; PrintLog (" getting highest level allowed to play\n"); nHighestPlayerLevel = GetHighestLevel (); if (nHighestPlayerLevel > gameData.missions.nLastLevel) nHighestPlayerLevel = gameData.missions.nLastLevel; if (nHighestPlayerLevel > 1) { CMenu m (2); char szInfo [80]; char szNumber [10]; try_again: sprintf (szInfo, "%s %d", TXT_START_ANY_LEVEL, nHighestPlayerLevel); m.AddText (szInfo, 0); strcpy (szNumber, "1"); m.AddInput (szNumber, 10, ""); choice = m.Menu (NULL, TXT_SELECT_START_LEV); if ((choice == -1) || !m [1].m_text [0]) return; nNewLevel = atoi (m [1].m_text); if ((nNewLevel <= 0) || (nNewLevel > nHighestPlayerLevel)) { m [0].SetText (const_cast<char*> (TXT_ENTER_TO_CONT)); MsgBox (NULL, NULL, 1, TXT_OK, TXT_INVALID_LEVEL); goto try_again; } } SavePlayerProfile (); if (!DifficultyMenu ()) return; paletteManager.DisableEffect (); if (!StartNewGame (nNewLevel)) SetFunctionMode (FMODE_MENU); }
void ScoreTableView (int bNetwork) { int i, k, done,choice; fix entryTime = TimerGetApproxSeconds (); int key; int oldstates [MAX_PLAYERS]; int previousSeconds_left=-1; int nReady,nEscaped; int bRedraw = 0; bkg bg; gameStates.menus.nInMenu++; gameStates.app.bGameRunning = 0; memset (&bg, 0, sizeof (bg)); bNetwork = gameData.app.nGameMode & GM_NETWORK; for (i = 0; i < MAX_NUM_NET_PLAYERS; i++) DigiKillSoundLinkedToObject (gameData.multiplayer.players [i].nObject); SetScreenMode (SCREEN_MENU); gameData.score.bWaitingForOthers = 0; //@@GrPaletteFadeIn (grPalette,32, 0); GameFlushInputs (); done = 0; for (i = 0; i < gameData.multiplayer.nPlayers; i++) oldstates [i] = gameData.multiplayer.players [i].connected; if (bNetwork) NetworkEndLevel (&key); while (!done) { if (!bRedraw || (curDrawBuffer == GL_BACK)) { LoadStars (&bg, bRedraw); ScoreTableRedraw (); bRedraw = 1; } gameData.score.nKillsChanged = 0; for (i = 0; i < 4; i++) if (JoyGetButtonDownCnt (i)) { if (LAST_OEM_LEVEL) { ScoreTableQuit (&bg, 1, bNetwork); return; } LOCALPLAYER.connected = 7; if (bNetwork) NetworkSendEndLevelPacket (); break; } for (i = 0; i < 3; i++) if (MouseButtonDownCount (i)) { if (LAST_OEM_LEVEL) { ScoreTableQuit (&bg, 1, bNetwork); return; } LOCALPLAYER.connected=7; if (bNetwork) NetworkSendEndLevelPacket (); break; } //see if redbook song needs to be restarted SongsCheckRedbookRepeat (); k = KeyInKey (); switch (k) { case KEY_ENTER: case KEY_SPACEBAR: if ((gameData.app.nGameMode & GM_SERIAL) || (gameData.app.nGameMode & GM_MODEM)) { done=1; break; } if (LAST_OEM_LEVEL) { ScoreTableQuit (&bg, 1, bNetwork); return; } gameData.multiplayer.players [gameData.multiplayer.nLocalPlayer].connected = 7; if (bNetwork) NetworkSendEndLevelPacket (); break; case KEY_ESC: if (gameData.app.nGameMode & GM_NETWORK) { gameData.multiplayer.xStartAbortMenuTime = TimerGetApproxSeconds (); choice=ExecMessageBox1 (NULL, NetworkEndLevelPoll3, NULL, 2, TXT_YES, TXT_NO, TXT_ABORT_GAME); } else choice=ExecMessageBox (NULL, NULL, 2, TXT_YES, TXT_NO, TXT_ABORT_GAME); if (choice == 0) { ScoreTableQuit (&bg, 1, bNetwork); return; } gameData.score.nKillsChanged=1; break; case KEY_PRINT_SCREEN: SaveScreenShot (NULL, 0); break; case KEY_BACKSP: Int3 (); break; default: break; } if ((TimerGetApproxSeconds () >= entryTime + MAX_VIEW_TIME) && (LOCALPLAYER.connected != 7)) { if (LAST_OEM_LEVEL) { ScoreTableQuit (&bg, 1, bNetwork); return; } if ((gameData.app.nGameMode & GM_SERIAL) || (gameData.app.nGameMode & GM_MODEM)) { done=1; break; } LOCALPLAYER.connected = 7; if (bNetwork) NetworkSendEndLevelPacket (); } if (bNetwork && (gameData.app.nGameMode & GM_NETWORK)) { NetworkEndLevelPoll2 (0, NULL, &key, 0); for (nEscaped = 0, nReady = 0, i = 0; i < gameData.multiplayer.nPlayers; i++) { if (gameData.multiplayer.players [i].connected && i!=gameData.multiplayer.nLocalPlayer) { // Check timeout for idle players if (TimerGetApproxSeconds () > networkData.nLastPacketTime [i]+ENDLEVEL_IDLE_TIME) { #if TRACE con_printf (CONDBG, "idle timeout for tPlayer %d.\n", i); #endif gameData.multiplayer.players [i].connected = 0; NetworkSendEndLevelSub (i); } } if (gameData.multiplayer.players [i].connected!=oldstates [i]) { if (szConditionLetters [gameData.multiplayer.players [i].connected] != szConditionLetters [oldstates [i]]) gameData.score.nKillsChanged = 1; oldstates [i] = gameData.multiplayer.players [i].connected; NetworkSendEndLevelPacket (); } if (gameData.multiplayer.players [i].connected==0 || gameData.multiplayer.players [i].connected==7) nReady++; if (gameData.multiplayer.players [i].connected!=1) nEscaped++; } if (nReady >= gameData.multiplayer.nPlayers) done = 1; if (nEscaped >= gameData.multiplayer.nPlayers) gameData.reactor.countdown.nSecsLeft = -1; if (previousSeconds_left != gameData.reactor.countdown.nSecsLeft) { previousSeconds_left = gameData.reactor.countdown.nSecsLeft; gameData.score.nKillsChanged=1; } if (gameData.score.nKillsChanged) { ScoreTableRedraw (); gameData.score.nKillsChanged = 0; } } } LOCALPLAYER.connected = 7; // Restore background and exit GrPaletteFadeOut (NULL, 32, 0); GameFlushInputs (); ScoreTableQuit (&bg, 0, bNetwork); }
void HandleTestKey(int key) { switch (key) { case KEYDBGGED + KEY_0: ShowWeaponStatus (); break; #ifdef SHOW_EXIT_PATH case KEYDBGGED + KEY_1: MarkPathToExit (); break; #endif case KEYDBGGED + KEY_Y: DoReactorDestroyedStuff(NULL); break; case KEYDBGGED + KEY_ALTED + KEY_D: networkData.nNetLifeKills=4000; networkData.nNetLifeKilled=5; MultiAddLifetimeKills (); break; case KEY_BACKSPACE: case KEY_CTRLED + KEY_BACKSPACE: case KEY_ALTED + KEY_BACKSPACE: case KEY_ALTED + KEY_CTRLED + KEY_BACKSPACE: case KEY_SHIFTED + KEY_BACKSPACE: case KEY_SHIFTED + KEY_ALTED + KEY_BACKSPACE: case KEY_SHIFTED + KEY_CTRLED + KEY_BACKSPACE: case KEY_SHIFTED + KEY_CTRLED + KEY_ALTED + KEY_BACKSPACE: Int3 (); break; case KEY_CTRLED + KEY_ALTED + KEY_ENTER: exit (0); break; case KEYDBGGED + KEY_S: audio.Reset (); break; case KEYDBGGED + KEY_P: if (gameStates.app.bGameSuspended & SUSP_ROBOTS) gameStates.app.bGameSuspended &= ~SUSP_ROBOTS; //robots move else gameStates.app.bGameSuspended |= SUSP_ROBOTS; //robots don't move break; case KEYDBGGED + KEY_K: LOCALPLAYER.shields = 1; MultiSendShields (); break; // a virtual kill case KEYDBGGED + KEY_SHIFTED + KEY_K: LOCALPLAYER.shields = -1; MultiSendShields (); break; // an actual kill case KEYDBGGED + KEY_X: LOCALPLAYER.lives++; break; // Extra life cheat key. case KEYDBGGED + KEY_H: // if (!(gameData.app.nGameMode & GM_MULTI)) { LOCALPLAYER.flags ^= PLAYER_FLAGS_CLOAKED; if (LOCALPLAYER.flags & PLAYER_FLAGS_CLOAKED) { if (gameData.app.nGameMode & GM_MULTI) MultiSendCloak (); AIDoCloakStuff (); LOCALPLAYER.cloakTime = gameData.time.xGame; #if TRACE console.printf (CON_DBG, "You are cloaked!\n"); #endif } else #if TRACE console.printf (CON_DBG, "You are DE-cloaked!\n"); #endif // } break; case KEYDBGGED + KEY_R: gameStates.app.cheats.bRobotsFiring = !gameStates.app.cheats.bRobotsFiring; break; case KEYDBGGED + KEY_R + KEY_SHIFTED: KillAllRobots (1); break; //flythrough keys #if DBG case KEYDBGGED + KEY_LAPOSTRO: showViewTextTimer = 0x30000; ObjectGotoNextViewer (); break; case KEYDBGGED + KEY_CTRLED + KEY_LAPOSTRO: showViewTextTimer = 0x30000; ObjectGotoPrevViewer (); break; #endif case KEYDBGGED + KEY_SHIFTED + KEY_LAPOSTRO: gameData.objs.viewerP=gameData.objs.consoleP; break; #if DBG case KEYDBGGED + KEY_O: ToggleOutlineMode (); break; #endif case KEYDBGGED + KEY_T: *Toggle_var = !*Toggle_var; #if TRACE console.printf (CON_DBG, "Variable at %08x set to %i\n", Toggle_var, *Toggle_var); #endif break; case KEYDBGGED + KEY_L: if (++gameStates.render.nLighting >= 2) gameStates.render.nLighting = 0; break; case KEYDBGGED + KEY_SHIFTED + KEY_L: xBeamBrightness = 0x38000 - xBeamBrightness; break; case KEY_PAD5: slew_stop (); break; case KEYDBGGED + KEY_F4: { //tCollisionData hitData; //CFixVector p0 = {-0x1d99a7, -0x1b20000, 0x186ab7f}; //CFixVector p1 = {-0x217865, -0x1b20000, 0x187de3e}; //FindHitpoint(&hitData, &p0, 0x1b9, &p1, 0x40000, 0x0, NULL, -1); break; } case KEYDBGGED + KEY_M: gameStates.app.bDebugSpew = !gameStates.app.bDebugSpew; if (gameStates.app.bDebugSpew) { mopen(0, 8, 1, 78, 16, "Debug Spew"); HUDInitMessage("Debug Spew: ON"); } else { mclose(0); HUDInitMessage("Debug Spew: OFF"); } break; case KEYDBGGED + KEY_C: paletteManager.SaveEffectAndReset (); DoCheatMenu (); paletteManager.LoadEffect (); break; case KEYDBGGED + KEY_SHIFTED + KEY_A: DoMegaWowPowerup(10); break; case KEYDBGGED + KEY_A: { DoMegaWowPowerup(200); // if (gameData.app.nGameMode & GM_MULTI) { // MsgBox(NULL, 1, "Damn", "CHEATER!\nYou cannot use the\nmega-thing in network mode."); // gameData.multigame.msg.nReceiver = 100; // Send to everyone... // sprintf(gameData.multigame.msg.szMsg, "%s cheated!", LOCALPLAYER.callsign); // } else { // DoMegaWowPowerup (); // } break; } case KEYDBGGED + KEY_F: gameStates.render.bShowFrameRate = !gameStates.render.bShowFrameRate; break; case KEYDBGGED + KEY_SPACEBAR: //KEY_F7: // Toggle physics flying slew_stop (); GameFlushInputs (); if (gameData.objs.consoleP->info.controlType != CT_FLYING) { FlyInit(gameData.objs.consoleP); gameStates.app.bGameSuspended &= ~SUSP_ROBOTS; //robots move } else { slew_init(gameData.objs.consoleP); //start CPlayerData slewing gameStates.app.bGameSuspended |= SUSP_ROBOTS; //robots don't move } break; case KEYDBGGED + KEY_COMMA: gameStates.render.xZoom = FixMul(gameStates.render.xZoom, 62259); break; case KEYDBGGED + KEY_PERIOD: gameStates.render.xZoom = FixMul(gameStates.render.xZoom, 68985); break; case KEYDBGGED + KEY_P + KEY_SHIFTED: Debug_pause = 1; break; case KEYDBGGED + KEY_B: { CMenu m (1); char text [FILENAME_LEN] = ""; int item; m.AddInput (text, FILENAME_LEN); item = m.Menu (NULL, "Briefing to play?"); if (item != -1) briefing.Run (text, 1); break; } case KEYDBGGED + KEY_F5: ToggleMovieSaving (); break; case KEYDBGGED + KEY_SHIFTED + KEY_F5: { extern int Movie_fixed_frametime; Movie_fixed_frametime = !Movie_fixed_frametime; break; } case KEYDBGGED + KEY_ALTED + KEY_F5: gameData.time.xGame = I2X(0x7fff - 840); //will overflow in 14 minutes #if TRACE console.printf (CON_DBG, "gameData.time.xGame bashed to %d secs\n", X2I(gameData.time.xGame)); #endif break; case KEYDBGGED + KEY_SHIFTED + KEY_B: KillEverything (1); break; } }
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; }
void scores_view(int citem) { fix t0 = 0, t1; int c,i,done,looper; int k, bRedraw = 0; sbyte fades[64] = { 1,1,1,2,2,3,4,4,5,6,8,9,10,12,13,15,16,17,19,20,22,23,24,26,27,28,28,29,30,30,31,31,31,31,31,30,30,29,28,28,27,26,24,23,22,20,19,17,16,15,13,12,10,9,8,6,5,4,4,3,2,2,1,1 }; bkg bg; memset (&bg, 0, sizeof (bg)); ReshowScores: scores_read(); SetScreenMode(SCREEN_MENU); WINDOS( DDGrSetCurrentCanvas(NULL), GrSetCurrentCanvas(NULL) ); xOffs = (grdCurCanv->cv_bitmap.bm_props.w - 640) / 2; yOffs = (grdCurCanv->cv_bitmap.bm_props.h - 480) / 2; if (xOffs < 0) xOffs = 0; if (yOffs < 0) yOffs = 0; GameFlushInputs(); done = 0; looper = 0; while(!done) { if (!bRedraw || gameOpts->menus.nStyle) { NMDrawBackground(&bg,xOffs, yOffs, xOffs + 640, xOffs + 480, bRedraw); grdCurCanv->cv_font = MEDIUM3_FONT; WIN(DDGRLOCK(dd_grd_curcanv)); GrString( 0x8000, yOffs + LHY(15), TXT_HIGH_SCORES ); grdCurCanv->cv_font = SMALL_FONT; GrSetFontColorRGBi (RGBA_PAL (31,26,5), 1, 0, 0); GrString( xOffs + LHX(31+33+XX), yOffs + LHY(46+7+YY), TXT_NAME ); GrString( xOffs + LHX(82+33+XX), yOffs + LHY(46+7+YY), TXT_SCORE ); GrString( xOffs + LHX(127+33+XX), yOffs + LHY(46+7+YY), TXT_SKILL ); GrString( xOffs + LHX(170+33+XX), yOffs + LHY(46+7+YY), TXT_LEVELS ); // GrString( 202, 46, "Kills" ); // GrString( 234, 46, "Rescues" ); GrString( xOffs + LHX(288-42+XX), yOffs + LHY(46+7+YY), TXT_TIME ); if ( citem < 0 ) GrString( 0x8000, yOffs + LHY(175), TXT_PRESS_CTRL_R ); GrSetFontColorRGBi (RGBA_PAL (28,28,28), 1, 0, 0); //GrPrintF( 0x8000, yOffs + LHY(31), "%c%s%c - %s", 34, Scores.cool_saying, 34, Scores.stats[0].name ); WIN(DDGRUNLOCK(dd_grd_curcanv)); for (i=0; i<MAX_HIGH_SCORES; i++ ) { //@@if (i==0) { //@@ GrSetFontColorRGBi (RGBA_PAL (28,28,28), 1, 0, 0); //@@} else { //@@ GrSetFontColor( grFadeTable[BM_XRGB(28,28,28)+((28-i*2)*256)], 1, 0, 0); //@@} c = 28 - i * 2; GrSetFontColorRGBi (RGBA_PAL (c, c, c), 1, 0, 0); scores_draw_item( i, Scores.stats + i); } GrPaletteFadeIn( NULL,32, 0); #ifdef OGL if (citem < 0) GrUpdate (0); #endif bRedraw = 1; } if ( citem > -1 ) { t1 = TimerGetFixedSeconds(); //if (t1 - t0 >= F1_0/128 ) { t0 = t1; //@@GrSetFontColor( grFadeTable[fades[looper]*256+BM_XRGB(28,28,28)], -1 ); c = 7 + fades [looper]; GrSetFontColorRGBi (RGBA_PAL (c, c, c), 1, 0, 0); if (++looper > 63) looper=0; if ( citem == MAX_HIGH_SCORES ) scores_draw_item( MAX_HIGH_SCORES, &Last_game ); else scores_draw_item( citem, Scores.stats + citem ); } GrUpdate (0); } for (i=0; i<4; i++ ) if (joy_get_button_down_cnt(i)>0) done=1; for (i=0; i<3; i++ ) if (MouseButtonDownCount(i)>0) done=1; //see if redbook song needs to be restarted songs_check_redbook_repeat(); #ifdef WINDOWS { MSG msg; DoMessageStuff(&msg); if (_RedrawScreen) { _RedrawScreen = FALSE; goto ReshowScores; } DDGRRESTORE; } #endif k = KeyInKey(); switch( k ) { case KEY_CTRLED+KEY_R: if ( citem < 0 ) { // Reset scores... if ( ExecMessageBox( NULL, NULL, 2, TXT_NO, TXT_YES, TXT_RESET_HIGH_SCORES )==1 ) { CFDelete(get_scores_filename(), gameFolders.szDataDir); GrPaletteFadeOut (NULL, 32, 0 ); goto ReshowScores; } } break; case KEY_BACKSP: Int3(); k = 0; break; case KEY_PRINT_SCREEN: SaveScreenShot (NULL, 0); k = 0; break; case KEY_ENTER: case KEY_SPACEBAR: case KEY_ESC: done=1; break; } } // Restore background and exit GrPaletteFadeOut (NULL, 32, 0 ); #ifdef WINDOWS DDGRRESTORE; #endif WINDOS( DDGrSetCurrentCanvas(NULL), GrSetCurrentCanvas(NULL) ); GameFlushInputs(); NMRemoveBackground (&bg); }
void DoEscortMenu(void) { int i; int paused; int next_goal; char goal_str[32], tstr[32]; if (gameData.app.nGameMode & GM_MULTI) { HUDInitMessage(TXT_GB_MULTIPLAYER); return; } for (i=0; i<=gameData.objs.nLastObject; i++) { if (gameData.objs.objects[i].type == OBJ_ROBOT) if (gameData.bots.pInfo[gameData.objs.objects[i].id].companion) break; } if (i > gameData.objs.nLastObject) { #if 1//def _DEBUG - always allow buddy bot creation // If no buddy bot, create one! HUDInitMessage (TXT_GB_CREATE); CreateBuddyBot(); #else HUDInitMessage(TXT_GB_NONE); return; #endif } BuddyMayTalk(); // Needed here or we might not know buddy can talk when he can. if (!gameData.escort.bMayTalk) { HUDInitMessage(TXT_GB_RELEASE, gameData.escort.szName); return; } DigiPauseDigiSounds(); if (!gameOpts->menus.nStyle) StopTime(); PaletteSave(); apply_modified_palette(); ResetPaletteAdd(); GameFlushInputs(); paused = 1; // SetScreenMode( SCREEN_MENU ); SetPopupScreenMode(); GrPaletteStepLoad( NULL ); // This prevents the buddy from coming back if you've told him to scram. // If we don't set next_goal, we get garbage there. if (gameData.escort.nSpecialGoal == ESCORT_GOAL_SCRAM) { gameData.escort.nSpecialGoal = -1; // Else setting next goal might fail. next_goal = EscortSetGoalObject(); gameData.escort.nSpecialGoal = ESCORT_GOAL_SCRAM; } else { gameData.escort.nSpecialGoal = -1; // Else setting next goal might fail. next_goal = EscortSetGoalObject(); } switch (next_goal) { #ifndef NDEBUG case ESCORT_GOAL_UNSPECIFIED: Int3(); sprintf(goal_str, "ERROR"); break; #endif case ESCORT_GOAL_BLUE_KEY: sprintf(goal_str, TXT_GB_BLUEKEY); break; case ESCORT_GOAL_GOLD_KEY: sprintf(goal_str, TXT_GB_YELLOWKEY); break; case ESCORT_GOAL_RED_KEY: sprintf(goal_str, TXT_GB_REDKEY); break; case ESCORT_GOAL_CONTROLCEN: sprintf(goal_str, TXT_GB_REACTOR); break; case ESCORT_GOAL_BOSS: sprintf(goal_str, TXT_GB_BOSS); break; case ESCORT_GOAL_EXIT: sprintf(goal_str, TXT_GB_EXIT); break; case ESCORT_GOAL_MARKER1: case ESCORT_GOAL_MARKER2: case ESCORT_GOAL_MARKER3: case ESCORT_GOAL_MARKER4: case ESCORT_GOAL_MARKER5: case ESCORT_GOAL_MARKER6: case ESCORT_GOAL_MARKER7: case ESCORT_GOAL_MARKER8: case ESCORT_GOAL_MARKER9: sprintf(goal_str, TXT_GB_MARKER, next_goal-ESCORT_GOAL_MARKER1+1); break; } if (!gameData.escort.bMsgsSuppressed) sprintf(tstr, TXT_GB_SUPPRESS); else sprintf(tstr, TXT_GB_ENABLE); i = ShowEscortHelp (goal_str, tstr); if (i < 11) { gameData.escort.bSearchingMarker = -1; gameData.escort.nLastKey = -1; EscortSetSpecialGoal (i ? KEY_1 + i - 1 : KEY_0); gameData.escort.nLastKey = -1; paused = 0; } else if (i == 11) { BuddyMessage (gameData.escort.bMsgsSuppressed ? TXT_GB_MSGS_ON : TXT_GB_MSGS_OFF); gameData.escort.bMsgsSuppressed = !gameData.escort.bMsgsSuppressed; paused = 0; } GameFlushInputs(); PaletteRestore(); if (!gameOpts->menus.nStyle) StartTime(); DigiResumeDigiSounds(); }