Exemple #1
0
static mle *build_mission_list(int anarchy_mode)
{
	mle *mission_list;
	int top_place;
    char	builtin_mission_filename[FILENAME_LEN];
	char	search_str[PATH_MAX] = MISSION_DIR;

	//now search for levels on disk

//@@Took out this code because after this routine was called once for
//@@a list of single-player missions, a subsequent call for a list of
//@@anarchy missions would not scan again, and thus would not find the
//@@anarchy-only missions.  If we retain the minimum level of install,
//@@we may want to put the code back in, having it always scan for all
//@@missions, and have the code that uses it sort out the ones it wants.
//@@	if (num_missions != -1) {
//@@		if (Current_mission_num != 0)
//@@			load_mission(0);				//set built-in mission as default
//@@		return num_missions;
//@@	}

	MALLOC(mission_list, mle, MAX_MISSIONS);
	num_missions = 0;
	
	add_builtin_mission_to_list(mission_list + num_missions, builtin_mission_filename);  //read built-in first
	add_d1_builtin_mission_to_list(mission_list + num_missions);
	add_missions_to_list(mission_list, search_str, search_str + strlen(search_str), anarchy_mode);
	
	// move original missions (in story-chronological order)
	// to top of mission list
	top_place = 0;
	promote(mission_list, "descent", &top_place); // original descent 1 mission
	promote(mission_list, builtin_mission_filename, &top_place); // d2 or d2demo
	promote(mission_list, "d2x", &top_place); // vertigo

	if (num_missions > top_place)
		qsort(&mission_list[top_place],
		      num_missions - top_place,
		      sizeof(*mission_list),
 				(int (*)( const void *, const void * ))ml_sort_func);


	if (num_missions > top_place)
		qsort(&mission_list[top_place],
		      num_missions - top_place,
		      sizeof(*mission_list),
		      (int (*)( const void *, const void * ))ml_sort_func);

	return mission_list;
}
Exemple #2
0
int BuildMissionList(int anarchy_mode, int nSubFolder)
{
	static int num_missions=-1;
	int count = 0;
	int top_place, bSubFolder, bHaveSubFolders;

	//now search for levels on disk

//@@Took out this code because after this routine was called once for
//@@a list of single-player missions, a subsequent call for a list of
//@@anarchy missions would not scan again, and thus would not ffs the
//@@anarchy-only missions.  If we retain the minimum level of install,
//@@we may want to put the code back in, having it always scan for all
//@@missions, and have the code that uses it sort out the ones it wants.
//@@	if (num_missions != -1) {
//@@		if (gameData.missions.nCurrentMission != 0)
//@@			LoadMission(0);				//set built-in mission as default
//@@		return num_missions;
//@@	}

	if (nSubFolder >= 0) {
		if (strcmp (gameData.missions.list [nSubFolder].mission_name, "[..]"))
			MoveMsnFolderDown (nSubFolder);
		else
			MoveMsnFolderUp ();
		}

	bSubFolder = (*gameFolders.szMsnSubFolder != '\0');
	if (!bSubFolder && gameOpts->app.bSinglePlayer) {
		strcpy (gameFolders.szMsnSubFolder, "single/");
//		bSubFolder = 1;
		}
	if (!bSubFolder) {// || (gameOpts->app.bSinglePlayer && !strcmp (gameFolders.szMsnSubFolder, "single"))) {
		if (gameOpts->app.nVersionFilter & 2) {
			add_builtin_mission_to_list(&count);  //read built-in first
			if (gameOpts->app.bSinglePlayer)
				add_d2x_builtin_mission_to_list(&count);  //read built-in first
			}
		if (gameOpts->app.nVersionFilter & 1)
			add_d1_builtin_mission_to_list(&count);
		}
	nBuiltIns = count;
	sprintf (gameFolders.szMissionDirs [0], "%s/%s", gameFolders.szMissionDir, gameFolders.szMsnSubFolder);
	bHaveSubFolders = 0;
	if (gameOpts->app.nVersionFilter & 2) {
		AddMissionsToList(&count, anarchy_mode, 0, bSubFolder, bHaveSubFolders, ML_MISSIONDIR);
		bHaveSubFolders = 1;
		}
	if (gameOpts->app.nVersionFilter & 1) {
		AddMissionsToList(&count, anarchy_mode, 1, bSubFolder, bHaveSubFolders, ML_MISSIONDIR);
		bHaveSubFolders = 1;
		}
	if (gameFolders.bAltHogDirInited && strcmp (gameFolders.szAltHogDir, gameFolders.szGameDir)) {
		bHaveSubFolders = 0;
		sprintf (gameFolders.szMissionDirs [1], "%s/%s%s", gameFolders.szAltHogDir, MISSION_DIR, gameFolders.szMsnSubFolder);
		if (gameOpts->app.nVersionFilter & 2) {
			AddMissionsToList(&count, anarchy_mode, 0, bSubFolder, bHaveSubFolders, ML_ALTHOGDIR);
			bHaveSubFolders = 1;
			}
		if (gameOpts->app.nVersionFilter & 1) {
			AddMissionsToList(&count, anarchy_mode, 1, bSubFolder, bHaveSubFolders, ML_ALTHOGDIR);
			bHaveSubFolders = 1;
		}
	}

	// move original missions (in story-chronological order)
	// to top of mission list
	top_place = 0;
	if (bSubFolder) {
		gameData.missions.nBuiltinMission =
		gameData.missions.nD1BuiltinMission = -1;
		}
	else {
		promote("descent", &top_place, count); // original descent 1 mission
		gameData.missions.nD1BuiltinMission = top_place - 1;
		promote(gameData.missions.szBuiltinMissionFilename, &top_place, count); // d2 or d2demo
		gameData.missions.nBuiltinMission = top_place - 1;
		promote("d2x", &top_place, count); // vertigo
		}
	if (count > top_place)
		qsort(gameData.missions.list + top_place,
		      count - top_place,
		      sizeof(*gameData.missions.list),
 				(int (_CDECL_ *)( const void *, const void * ))ml_sort_func);


	if (count > top_place)
		qsort(gameData.missions.list + top_place,
		      count - top_place,
		      sizeof(*gameData.missions.list),
		      (int (_CDECL_ *)( const void *, const void * ))ml_sort_func);

	//LoadMission(0);   //set built-in mission as default
	num_missions = count;
	return count;
}