//------------------------------------------------------------------------------ //loads the named mission if exists. //Returns true if mission loaded ok, else false. int FindMissionByName (char *szMissionName, int nSubFolder) { int n,i,j; if (nSubFolder < 0) *gameFolders.szMsnSubDir = '\0'; n = BuildMissionList (1, nSubFolder); for (i = 0; i < n; i++) if (!stricmp (szMissionName, gameData.missions.list [i].filename)) return gameData.missions.list [i].nDescentVersion; for (i = 0; i < n; i++) if (!gameData.missions.list [i].nDescentVersion && strcmp (gameData.missions.list [i].szMissionName, "[..]")) { if ((j = FindMissionByName (szMissionName, i))) return j; MoveMsnFolderUp (); n = BuildMissionList (1, -1); } return 0; //couldn't ffs mission }
//------------------------------------------------------------------------------ //loads the named mission if exists. //Returns true if mission loaded ok, else false. int LoadMissionByName (char *szMissionName, int nSubFolder) { int n, i, j; if (nSubFolder < 0) { *gameFolders.szMsnSubDir = '\0'; PrintLog (" searching mission '%s'\n", szMissionName); } n = BuildMissionList (1, nSubFolder); for (i = 0; i < n; i++) if (!stricmp (szMissionName, gameData.missions.list [i].filename)) return LoadMission (i); for (i = 0; i < n; i++) if (!gameData.missions.list [i].nDescentVersion && strcmp (gameData.missions.list [i].szMissionName, "[..]")) { if ((j = LoadMissionByName (szMissionName, i))) return j; MoveMsnFolderUp (); n = BuildMissionList (1, -1); } return 0; //couldn't ffs mission }
void CFolderNew::OnFocus(LTBOOL bFocus) { if (bFocus) { BuildMissionList(); SetSelection(g_pGameClientShell->GetPlayerSummary()->GetNextMission()); } else { SetSelection(kNoSelection); ClearMissionList(); } CBaseSelectionFolder::OnFocus(bFocus); }
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 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); }