From 3355f3c86ddc5fd4957a37d92f9058325182ae89 Mon Sep 17 00:00:00 2001 From: Bradley Bell Date: Tue, 13 Jan 2015 15:37:52 -0800 Subject: [PATCH] new mission-specific cfg file, holds highest level. --- main/game.c | 1 + main/gameseq.c | 4 ++- main/gameseq.h | 2 +- main/menu.c | 14 ++++---- main/mission.c | 37 ++++++++++++++++++++ main/mission.h | 3 ++ main/playsave.c | 89 +------------------------------------------------ main/playsave.h | 6 ---- 8 files changed, 53 insertions(+), 103 deletions(-) diff --git a/main/game.c b/main/game.c index e572261b..bf9b1eed 100644 --- a/main/game.c +++ b/main/game.c @@ -418,6 +418,7 @@ void init_game() /* Register cvars */ cvar_registervariable(&r_framerate); cvar_registervariable(&cg_fov); + cvar_registervariable(&Player_highest_level); /* Register cmds */ cmd_addcommand("player", game_cmd_player); diff --git a/main/gameseq.c b/main/gameseq.c index 17bc7b74..c9a89844 100644 --- a/main/gameseq.c +++ b/main/gameseq.c @@ -141,6 +141,8 @@ int Player_num=0; // The player number who is on the console. player Players[MAX_PLAYERS+4]; // Misc player info obj_position Player_init[MAX_PLAYERS]; +cvar_t Player_highest_level = { "HighestLevel", "0", 0 }; + // Global variables telling what sort of game we have int MaxNumNetPlayers = -1; int NumNetPlayerPositions = -1; @@ -1821,7 +1823,7 @@ void StartNewLevelSub(int level_num, int page_in_textures, int secret_flag) turn_cheats_off(); if (!(Game_mode & GM_MULTI) && !Cheats_enabled) - set_highest_level(Current_level_num); + mission_write_config(); else read_player_file(); //get window sizes diff --git a/main/gameseq.h b/main/gameseq.h index bd007d57..ac88a5ea 100644 --- a/main/gameseq.h +++ b/main/gameseq.h @@ -40,7 +40,7 @@ extern obj_position Player_init[MAX_PLAYERS]; // This is the highest level the player has ever reached -extern int Player_highest_level; +extern cvar_t Player_highest_level; // // New game sequencing functions diff --git a/main/menu.c b/main/menu.c index ab584156..d637057a 100644 --- a/main/menu.c +++ b/main/menu.c @@ -867,19 +867,19 @@ void do_screen_res_menu() void do_new_game_menu() { - int new_level_num,player_highest_level; + int new_level_num; if (!select_mission(0, "New Game\n\nSelect mission")) return; new_level_num = 1; - player_highest_level = get_highest_level(); + mission_read_config(); - if (player_highest_level > Last_level) - player_highest_level = Last_level; + if (Player_highest_level.intval > Last_level) + cvar_setint(&Player_highest_level, Last_level); - if (player_highest_level > 1) { + if (Player_highest_level.intval > 1) { newmenu_item m[4]; char info_text[80]; char num_text[10]; @@ -887,7 +887,7 @@ void do_new_game_menu() int n_items; try_again: - sprintf(info_text,"%s %d",TXT_START_ANY_LEVEL, player_highest_level); + sprintf(info_text, "%s %d", TXT_START_ANY_LEVEL, Player_highest_level.intval); 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; @@ -908,7 +908,7 @@ try_again: new_level_num = atoi(m[1].text); - if (!(new_level_num>0 && new_level_num<=player_highest_level)) { + if (!(new_level_num > 0 && new_level_num <= Player_highest_level.intval)) { m[0].text = TXT_ENTER_TO_CONT; nm_messagebox( NULL, 1, TXT_OK, TXT_INVALID_LEVEL); goto try_again; diff --git a/main/mission.c b/main/mission.c index 72cca9bd..b22eb555 100644 --- a/main/mission.c +++ b/main/mission.c @@ -872,3 +872,40 @@ int select_mission(int anarchy_mode, char *message) free_mission_list(mission_list); return (new_mission_num >= 0); } + + +//set a new highest level for player for this mission +int mission_write_config(void) +{ + char filename[FILENAME_LEN+15]; + PHYSFS_file *file; + + PHYSFS_mkdir(MISSION_DIR); + + sprintf(filename, MISSION_DIR "%s.cfg", Current_mission_filename); + file = PHYSFSX_openWriteBuffered(filename); + + if (!file) + { + nm_messagebox(NULL, 1, TXT_OK, "Cannot open mission config file"); + return -1; + } + + PHYSFSX_printf(file, "%s=%d\n", Player_highest_level.name, Current_level_num); + + PHYSFS_close(file); + + return 0; +} + + +//gets the player's highest level from the file for this mission +int mission_read_config(void) +{ + cvar_setint(&Player_highest_level, 0); + + cmd_appendf("exec " MISSION_DIR "%s.cfg", Current_mission_filename); + while (cmd_queue_process()) {} + + return 0; +} diff --git a/main/mission.h b/main/mission.h index 5daa9c52..0eafc5a5 100644 --- a/main/mission.h +++ b/main/mission.h @@ -118,4 +118,7 @@ int load_mission_by_name (char *mission_name); //Returns 1 if a mission was loaded. int select_mission (int anarchy_mode, char *message); +int mission_write_config(void); +int mission_read_config(void); + #endif diff --git a/main/playsave.c b/main/playsave.c index 24d50ad2..1bb413ee 100644 --- a/main/playsave.c +++ b/main/playsave.c @@ -81,15 +81,6 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #endif -typedef struct hli { - char shortname[9]; - ubyte level_num; -} hli; - -short n_highest_levels; - -hli highest_levels[MAX_MISSIONS]; - #define PLAYER_FILE_VERSION 25 //increment this every time the player file changes //version 5 -> 6: added new highest level information @@ -111,7 +102,7 @@ hli highest_levels[MAX_MISSIONS]; //version 21 -> 22: save lifetime netstats //version 22 -> 23: ?? //version 23 -> 24: add name of joystick for windows version. -//version 24 -> 25: removed kconfig data, joy name, guidebot name, joy sensitivity, cockpit views, netstats, taunt macros +//version 24 -> 25: removed kconfig data, joy name, guidebot name, joy sensitivity, cockpit views, netstats, taunt macros, highest levels #define COMPATIBLE_PLAYER_FILE_VERSION 17 @@ -123,9 +114,6 @@ int new_player_config() { Player_default_difficulty = 1; Auto_leveling_on = Default_leveling_on = 1; - n_highest_levels = 1; - highest_levels[0].shortname[0] = 0; //no name for mission 0 - highest_levels[0].level_num = 1; //was highest level in old struct return 1; } @@ -221,16 +209,6 @@ int read_player_file() Auto_leveling_on = Default_leveling_on; - //read new highest level info - - n_highest_levels = cfile_read_short(file); - if (swap) - n_highest_levels = SWAPSHORT(n_highest_levels); - Assert(n_highest_levels <= MAX_MISSIONS); - - if (PHYSFS_read(file, highest_levels, sizeof(hli), n_highest_levels) != n_highest_levels) - goto read_player_file_failed; - if (!PHYSFS_close(file)) goto read_player_file_failed; @@ -248,66 +226,6 @@ int read_player_file() } -//finds entry for this level in table. if not found, returns ptr to -//empty entry. If no empty entries, takes over last one -int find_hli_entry() -{ - int i; - - for (i=0;i highest_levels[i].level_num) - highest_levels[i].level_num = levelnum; - - write_player_file(); -} - -//gets the player's highest level from the file for this mission -int get_highest_level(void) -{ - int i; - int highest_saturn_level = 0; - read_player_file(); -#ifndef SATURN - if (strlen(Current_mission_filename)==0 ) { - for (i=0;i i ) - i = highest_saturn_level; - return i; -} - extern int Cockpit_mode_save; @@ -365,11 +283,6 @@ int write_player_file() PHYSFSX_writeU8(file, Guided_in_big_window); PHYSFSX_writeU8(file, Automap_always_hires); - //write higest level info - PHYSFS_writeULE16(file, n_highest_levels); - if ((PHYSFS_write(file, highest_levels, sizeof(hli), n_highest_levels) != n_highest_levels)) - goto write_player_file_failed; - if (!PHYSFS_close(file)) goto write_player_file_failed; diff --git a/main/playsave.h b/main/playsave.h index e5fd23d1..0aa75446 100644 --- a/main/playsave.h +++ b/main/playsave.h @@ -46,10 +46,4 @@ int new_player_config(); int read_player_file(); -// set a new highest level for player for this mission -void set_highest_level(int levelnum); - -// gets the player's highest level from the file for this mission -int get_highest_level(void); - #endif /* _PLAYSAVE_H */ -- 2.39.2