void NetworkLeaveGame (void) { int nsave; NetworkDoFrame (1, 1); #ifdef NETPROFILING fclose (SendLogFile); fclose (ReceiveLogFile); #endif if ((NetworkIAmMaster ())) { bool bSyncExtras = true; while (bSyncExtras) { bSyncExtras = false; for (short i = 0; i < networkData.nJoining; i++) if (networkData.sync [i].nExtras && (networkData.sync [i].nExtrasPlayer != -1)) { NetworkSyncExtras (networkData.sync + i); bSyncExtras = true; } } netGame.nNumPlayers = 0; nsave = gameData.multiplayer.nPlayers; gameData.multiplayer.nPlayers = 0; NetworkSendGameInfo (NULL); gameData.multiplayer.nPlayers = nsave; } LOCALPLAYER.connected = 0; NetworkSendEndLevelPacket (); ChangePlayerNumTo (0); gameData.app.nGameMode = GM_GAME_OVER; SavePlayerProfile (); IpxHandleLeaveGame (); NetworkFlush (); }
void MultiDefineMacroEnd () { Assert (gameData.multigame.msg.bDefining > 0); strcpy (gameData.multigame.msg.szMacro [gameData.multigame.msg.bDefining-1], gameData.multigame.msg.szMsg); SavePlayerProfile (); MultiSendMsgQuit (); }
int DifficultyMenu (void) { int i, choice = gameStates.app.nDifficultyLevel; CMenu m (5); for (i = 0; i < 5; i++) m.AddMenu ( MENU_DIFFICULTY_TEXT (i), 0, ""); i = m.Menu (NULL, TXT_DIFFICULTY_LEVEL, NULL, &choice); if (i <= -1) return 0; if (choice != gameStates.app.nDifficultyLevel) { gameStates.app.nDifficultyLevel = choice; SavePlayerProfile (); } return 1; }
int CleanUp (void) { if (gameStates.input.bHaveTrackIR) { pfnTIRExit (); TIRUnload (); } songManager.StopAll (); audio.StopCurrentSong (); SaveModelData (); /*---*/PrintLog ("Saving configuration file\n"); WriteConfigFile (true); /*---*/PrintLog ("Saving player profile\n"); SavePlayerProfile (); /*---*/PrintLog ("Releasing tracker list\n"); tracker.DestroyList (); profile.Destroy (); #if DBG if (!FindArg ("-notitles")) #endif //ShowOrderForm (); ogl.DestroyDrawBuffer (); return 0; }
//------------------------------------------------------------------------------ //returns number of item chosen int MainMenu (void) { CMenu m; int i, nChoice = 0, nOptions = 0; IpxClose (); //paletteManager.Load (MENU_PALETTE, NULL, 0, 1, 0); //get correct palette if (!LOCALPLAYER.callsign [0]) { SelectPlayer (); return 0; } if (gameData.multiplayer.autoNG.bValid) { ExecMultiMenuOption (mainOpts.nMulti); return 0; } PrintLog ("launching main menu\n"); do { nOptions = SetupMainMenu (m); // may have to change, eg, maybe selected pilot and no save games. gameStates.input.keys.xLastPressTime = TimerGetFixedSeconds (); // .. 20 seconds from now! if (nChoice < 0) nChoice = 0; gameStates.menus.bDrawCopyright = 1; i = m.Menu ("", NULL, AutoDemoMenuCheck, &nChoice, BackgroundName (BG_MENU)); if (gameStates.app.bNostalgia) gameOpts->app.nVersionFilter = 3; if (i > -1) { ExecMainMenuOption (nChoice); SavePlayerProfile (); } } while (gameStates.app.nFunctionMode == FMODE_MENU); if (gameStates.app.nFunctionMode == FMODE_GAME) paletteManager.DisableEffect (); FlushInput (); return mainOpts.nChoice; }
void NewGameMenu (void) { CMenu menu; int optSelMsn, optMsnName, optLevelText, optLevel, optLaunch, optLoadout; int nMission = gameData.missions.nLastMission, bMsnLoaded = 0; int i, choice = 0; char szDifficulty [50]; char szLevelText [32]; char szLevel [5]; #if DBG int optLives; char szLives [5]; #endif static int nPlayerMaxLevel = 1; static int nLevel = 0; if (gameStates.app.bNostalgia) { LegacyNewGameMenu (); return; } gameStates.app.bD1Mission = 0; gameStates.app.bD1Data = 0; gameOpts->app.nVersionFilter = 3; SetDataVersion (-1); if (nMission < 0) gameFolders.szMsnSubDir [0] = '\0'; else if (gameOpts->app.bSinglePlayer) { if (!strstr (gameFolders.szMsnSubDir, "single/")) nMission = -1; gameFolders.szMsnSubDir [0] = '\0'; } hogFileManager.UseMission (""); for (;;) { menu.Destroy (); menu.Create (15); optSelMsn = menu.AddMenu (TXT_SEL_MISSION, KEY_I, HTX_MULTI_MISSION); optMsnName = menu.AddText ((nMission < 0) ? TXT_NONE_SELECTED : gameData.missions.list [nMission].szMissionName, 0); if ((nMission >= 0) && (nPlayerMaxLevel > 1)) { sprintf (szLevelText, "%s (1-%d)", TXT_LEVEL_, nPlayerMaxLevel); Assert (strlen (szLevelText) < 100); optLevelText = menu.AddText (szLevelText, 0); menu [optLevelText].m_bRebuild = 1; sprintf (szLevel, "%d", nLevel); optLevel = menu.AddInput (szLevel, 4, HTX_MULTI_LEVEL); } else optLevel = -1; #if DBG menu.AddText (""); menu.AddText ("Initial Lives:"); sprintf (szLives, "%d", gameStates.gameplay.nInitialLives); optLives = menu.AddInput (szLives, 4); #endif menu.AddText (" ", 0); sprintf (szDifficulty + 1, TXT_DIFFICULTY2, MENU_DIFFICULTY_TEXT (gameStates.app.nDifficultyLevel)); *szDifficulty = *(TXT_DIFFICULTY2 - 1); nOptDifficulty = menu.AddSlider (szDifficulty + 1, gameStates.app.nDifficultyLevel, 0, 4, KEY_D, HTX_GPLAY_DIFFICULTY); menu.AddText ("", 0); optLoadout = menu.AddMenu (TXT_LOADOUT_OPTION, KEY_B, HTX_MULTI_LOADOUT); if (nMission >= 0) { menu.AddText ("", 0); optLaunch = menu.AddMenu (TXT_LAUNCH_GAME, KEY_L, ""); menu [optLaunch].m_bCentered = 1; } else optLaunch = -1; i = menu.Menu (NULL, TXT_NEWGAME_MENUTITLE, NewGameMenuCallback, &choice); if (i < 0) { SetFunctionMode (FMODE_MENU); return; } if (choice == optLoadout) LoadoutOptionsMenu (); else if (choice == optSelMsn) { i = SelectAndLoadMission (0, NULL); if (i >= 0) { bMsnLoaded = 1; nMission = i; nLevel = 1; PrintLog (" getting highest level allowed to play\n"); nPlayerMaxLevel = GetHighestLevel (); if (nPlayerMaxLevel > gameData.missions.nLastLevel) nPlayerMaxLevel = gameData.missions.nLastLevel; } } else if (choice == optLevel) { i = atoi (menu [optLevel].m_text); #if DBG if (!i || (i < -gameData.missions.nSecretLevels) || (i > nPlayerMaxLevel)) #else if ((i <= 0) || (i > nPlayerMaxLevel)) #endif MsgBox (NULL, NULL, 1, TXT_OK, TXT_INVALID_LEVEL); else if (nLevel == i) break; else nLevel = i; } else if (nMission >= 0) { if ((optLevel > 0) && !(nLevel = atoi (menu [optLevel].m_text))) { MsgBox (NULL, NULL, 1, TXT_OK, TXT_INVALID_LEVEL); nLevel = 1; } else break; } #if DBG else { i = atoi (menu [optLives].m_text); if (i > 0) gameStates.gameplay.nInitialLives = min (i, 255); } #endif } i = menu [nOptDifficulty].m_value; if (gameStates.app.nDifficultyLevel != i) { gameStates.app.nDifficultyLevel = i; gameData.bosses.InitGateIntervals (); } SavePlayerProfile (); paletteManager.DisableEffect (); if (!bMsnLoaded) LoadMission (nMission); if (!StartNewGame (nLevel)) SetFunctionMode (FMODE_MENU); }
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); }
//------------------------------------------------------------------------------ //switch a cockpit window to the next function int SelectNextWindowFunction(int nWindow) { Assert(nWindow==0 || nWindow==1); switch (gameStates.render.cockpit.n3DView [nWindow]) { case CV_NONE: gameStates.render.cockpit.n3DView [nWindow] = CV_REAR; break; case CV_REAR: if (!(gameStates.app.bNostalgia || COMPETITION) && EGI_FLAG (bRadarEnabled, 0, 1, 0) && (!(gameData.app.nGameMode & GM_MULTI) || (netGame.gameFlags & NETGAME_FLAG_SHOW_MAP))) { gameStates.render.cockpit.n3DView [nWindow] = CV_RADAR_TOPDOWN; break; } case CV_RADAR_TOPDOWN: if (!(gameStates.app.bNostalgia || COMPETITION) && EGI_FLAG (bRadarEnabled, 0, 1, 0) && (!(gameData.app.nGameMode & GM_MULTI) || (netGame.gameFlags & NETGAME_FLAG_SHOW_MAP))) { gameStates.render.cockpit.n3DView [nWindow] = CV_RADAR_HEADSUP; break; } case CV_RADAR_HEADSUP: if (FindEscort()) { gameStates.render.cockpit.n3DView [nWindow] = CV_ESCORT; break; } //if no ecort, fall through case CV_ESCORT: gameStates.render.cockpit.nCoopPlayerView [nWindow] = -1; //force first CPlayerData //fall through case CV_COOP: gameData.marker.viewers [nWindow] = -1; if ((gameData.app.nGameMode & GM_MULTI_COOP) || (gameData.app.nGameMode & GM_TEAM)) { gameStates.render.cockpit.n3DView [nWindow] = CV_COOP; while (1) { gameStates.render.cockpit.nCoopPlayerView [nWindow]++; if (gameStates.render.cockpit.nCoopPlayerView [nWindow] == gameData.multiplayer.nPlayers) { gameStates.render.cockpit.n3DView [nWindow] = CV_MARKER; goto case_marker; } if (gameStates.render.cockpit.nCoopPlayerView [nWindow]==gameData.multiplayer.nLocalPlayer) continue; if (gameData.app.nGameMode & GM_MULTI_COOP) break; else if (GetTeam(gameStates.render.cockpit.nCoopPlayerView [nWindow]) == GetTeam(gameData.multiplayer.nLocalPlayer)) break; } break; } //if not multi, fall through case CV_MARKER: case_marker:; if (!IsMultiGame || IsCoopGame || netGame.bAllowMarkerView) { //anarchy only gameStates.render.cockpit.n3DView [nWindow] = CV_MARKER; if (gameData.marker.viewers [nWindow] == -1) gameData.marker.viewers [nWindow] = gameData.multiplayer.nLocalPlayer * 3; else if (gameData.marker.viewers [nWindow] < gameData.multiplayer.nLocalPlayer * 3 + MaxDrop ()) gameData.marker.viewers [nWindow]++; else gameStates.render.cockpit.n3DView [nWindow] = CV_NONE; } else gameStates.render.cockpit.n3DView [nWindow] = CV_NONE; break; } SavePlayerProfile(); return 1; //bScreenChanged }
void ConfigMenu (void) { static int choice = 0; CMenu menu; int i; int optSound, optConfig, optPerformance, optScrRes, optReorderPrim, optReorderSec, optEffects, optMiscellaneous, optRender, optGameplay, optCockpit, optPhysics = -1; do { menu.Destroy (); menu.Create (20); optRender = optGameplay = optCockpit = -1; optSound = menu.AddMenu (TXT_SOUND_MUSIC, KEY_M, HTX_OPTIONS_SOUND); menu.AddText ("", 0); optConfig = menu.AddMenu (TXT_CONTROLS_, KEY_O, HTX_OPTIONS_CONFIG); menu.AddText ("", 0); if (gameStates.app.bNostalgia) optBrightness = menu.AddSlider (TXT_BRIGHTNESS, paletteManager.GetGamma (), 0, 16, KEY_B, HTX_RENDER_BRIGHTNESS); if (gameStates.app.bNostalgia) optPerformance = menu.AddMenu (TXT_DETAIL_LEVELS, KEY_D, HTX_OPTIONS_DETAIL); else optPerformance = -1; optScrRes = menu.AddMenu (TXT_SCREEN_RES, KEY_S, HTX_OPTIONS_SCRRES); menu.AddText ("", 0); if (gameStates.app.bNostalgia) { optReorderPrim = menu.AddMenu (TXT_PRIMARY_PRIO, KEY_P, HTX_OPTIONS_PRIMPRIO); optReorderSec = menu.AddMenu (TXT_SECONDARY_PRIO, KEY_E, HTX_OPTIONS_SECPRIO); } else optReorderPrim = optReorderSec = -1; optMiscellaneous = menu.AddMenu (gameStates.app.bNostalgia ? TXT_TOGGLES : TXT_MISCELLANEOUS, gameStates.app.bNostalgia ? KEY_T : KEY_I, HTX_OPTIONS_MISC); if (!gameStates.app.bNostalgia) { optCockpit = menu.AddMenu (TXT_COCKPIT_OPTS2, KEY_C, HTX_OPTIONS_COCKPIT); optRender = menu.AddMenu (TXT_RENDER_OPTS2, KEY_R, HTX_OPTIONS_RENDER); optEffects = menu.AddMenu (TXT_EFFECT_OPTIONS, KEY_E, HTX_RENDER_EFFECTOPTS); #ifndef DBG if (gameStates.app.bGameRunning && IsMultiGame && !IsCoopGame) optPhysics = optGameplay = -1; else #endif { optGameplay = menu.AddMenu (TXT_GAMEPLAY_OPTS2, KEY_G, HTX_OPTIONS_GAMEPLAY); optPhysics = menu.AddMenu (TXT_PHYSICS_MENUCALL, KEY_P, HTX_OPTIONS_PHYSICS); } #if 0 optMultiThreading = menu.AddMenu (TXT_MT_MENU_OPTION, KEY_U, HTX_MULTI_THREADING); #endif } i = menu.Menu (NULL, TXT_OPTIONS, ConfigMenuCallback, &choice); if (i >= 0) { if (i == optSound) SoundMenu (); else if (i == optConfig) InputDeviceConfig (); else if (i == optPerformance) { if (gameStates.app.bNostalgia) DetailLevelMenu (); } else if (i == optScrRes) ScreenResMenu (); else if ((optReorderPrim >= 0) && (i == optReorderPrim)) ReorderPrimary (); else if ((optReorderSec >= 0) && (i == optReorderSec)) ReorderSecondary (); else if (i == optMiscellaneous) MiscellaneousMenu (); else if (!gameStates.app.bNostalgia) { if (i == optCockpit) CockpitOptionsMenu (); else if (i == optRender) RenderOptionsMenu (); else if (i == optEffects) EffectOptionsMenu (); else if ((optGameplay >= 0) && (i == optGameplay)) GameplayOptionsMenu (); else if ((optPhysics >= 0) && (i == optPhysics)) PhysicsOptionsMenu (); #if 0 else if ((optMultiThreading >= 0) && (i == optMultiThreading)) MultiThreadingOptionsMenu (); #endif } } } while (i > -1); SavePlayerProfile (); }