//loads the named mission if exists. //Returns true if mission loaded ok, else false. int load_mission_by_name(char *mission_name) { int n,i; n = build_mission_list(1); for (i=0;i<n;i++) if (!strcasecmp(mission_name,Mission_list[i].filename)) return load_mission(i); return 0; //couldn't find mission }
//loads the named mission if exists. //Returns true if mission loaded ok, else false. int load_mission_by_name(const char *mission_name) { int i; mle *mission_list = build_mission_list(1); bool found = 0; for (i = 0; i < num_missions; i++) if (!stricmp(mission_name, mission_list[i].filename)) found = load_mission(mission_list + i); free_mission_list(mission_list); return found; }
int select_mission(int anarchy_mode, const char *message, int (*when_selected)(void)) { mle *mission_list = build_mission_list(anarchy_mode); int new_mission_num; if (num_missions <= 1) { new_mission_num = load_mission(mission_list) ? 0 : -1; free_mission_list(mission_list); (*when_selected)(); return (new_mission_num >= 0); } else { mission_menu *mm; int i, default_mission; const char **m; MALLOC(m, const char *, num_missions); if (!m) { free_mission_list(mission_list); return 0; } MALLOC(mm, mission_menu, 1); if (!mm) { d_free(m); free_mission_list(mission_list); return 0; } mm->mission_list = mission_list; mm->when_selected = when_selected; default_mission = 0; for (i = 0; i < num_missions; i++) { m[i] = mission_list[i].mission_name; if ( !stricmp( m[i], GameCfg.LastMission ) ) default_mission = i; } newmenu_listbox1( message, num_missions, m, 1, default_mission, (int (*)(listbox *, d_event *, void *))mission_menu_handler, mm ); } return 1; // presume success }
void do_new_game_menu() { int new_level_num,player_highest_level; #ifndef SHAREWARE int n_missions = build_mission_list(0); if (n_missions > 1) { int new_mission_num,i, default_mission; char * m[MAX_MISSIONS]; default_mission = 0; for (i=0;i<n_missions;i++) { m[i] = Mission_list[i].mission_name; if ( !strcasecmp( m[i], config_last_mission ) ) default_mission = i; } new_mission_num = newmenu_listbox1( "New Game\n\nSelect mission", n_missions, m, 1, default_mission, NULL ); if (new_mission_num == -1) return; //abort! strcpy(config_last_mission, m[new_mission_num] ); if (!load_mission(new_mission_num)) { nm_messagebox( NULL, 1, TXT_OK, "Error in Mission file"); return; } } #endif new_level_num = 1; player_highest_level = get_highest_level(); if (player_highest_level > Last_level) player_highest_level = Last_level; if (player_highest_level > 1) { newmenu_item m[2]; char info_text[80]; char num_text[10]; int choice; try_again: sprintf(info_text,"%s %d",TXT_START_ANY_LEVEL, player_highest_level); m[0].type=NM_TYPE_TEXT; m[0].text = info_text; m[1].type=NM_TYPE_INPUT; m[1].text_len = 10; m[1].text = num_text; strcpy(num_text,"1"); choice = newmenu_do( NULL, TXT_SELECT_START_LEV, 2, m, NULL ); if (choice==-1 || m[1].text[0]==0) return; new_level_num = atoi(m[1].text); if (!(new_level_num>0 && new_level_num<=player_highest_level)) { m[0].text = TXT_ENTER_TO_CONT; nm_messagebox( NULL, 1, TXT_OK, TXT_INVALID_LEVEL); goto try_again; } } Difficulty_level = Player_default_difficulty; if (!do_difficulty_menu()) return; gr_palette_fade_out( gr_palette, 32, 0 ); #ifdef PSX_BUILD_TOOLS { int i; for (i=Last_secret_level; i<=Last_level; i++ ) { if ( i!=0 ) StartNewGame(i); } } #endif StartNewGame(new_level_num); }