savegame: remove GAME_INFO.current_level

It is confusing to have this and g_CurrentLevel at the same time.
This commit is contained in:
rr- 2022-01-14 02:00:33 +01:00 committed by Marcin Kurczewski
parent 44bb2d584a
commit 016cd906c2
6 changed files with 29 additions and 24 deletions

View file

@ -86,7 +86,7 @@ static bool SaveGame_NeedsEvilLaraFix(GAME_INFO *game_info)
assert(game_info);
bool result = false;
if (game_info->current_level != 14) {
if (g_CurrentLevel != 14) {
return result;
}
@ -260,7 +260,6 @@ static void SaveGame_FillSaveBuffer(GAME_INFO *game_info)
// Write current game information into the save buffer.
assert(game_info);
game_info->current_level = g_CurrentLevel;
CreateStartInfo(g_CurrentLevel);
@ -270,13 +269,13 @@ static void SaveGame_FillSaveBuffer(GAME_INFO *game_info)
char title[SAVEGAME_TITLE_SIZE];
snprintf(
title, SAVEGAME_TITLE_SIZE, "%s",
g_GameFlow.levels[game_info->current_level].level_title);
g_GameFlow.levels[g_CurrentLevel].level_title);
SaveGame_WriteSG(title, SAVEGAME_TITLE_SIZE);
SaveGame_WriteSG(&g_SaveCounter, sizeof(int32_t));
for (int i = 0; i < g_GameFlow.level_count; i++) {
if (g_GameFlow.levels[i].level_type == GFL_CURRENT) {
game_info->start[i] = game_info->start[game_info->current_level];
game_info->start[i] = game_info->start[g_CurrentLevel];
}
}
@ -298,7 +297,7 @@ static void SaveGame_FillSaveBuffer(GAME_INFO *game_info)
SaveGame_WriteSG(&game_info->timer, sizeof(uint32_t));
SaveGame_WriteSG(&game_info->kills, sizeof(uint32_t));
SaveGame_WriteSG(&game_info->secrets, sizeof(uint16_t));
SaveGame_WriteSG(&game_info->current_level, sizeof(uint16_t));
SaveGame_WriteSG(&g_CurrentLevel, sizeof(uint16_t));
SaveGame_WriteSG(&game_info->pickups, sizeof(uint8_t));
SaveGame_WriteSG(&game_info->bonus_flag, sizeof(uint8_t));
@ -411,19 +410,19 @@ void SaveGame_ApplySaveBuffer(GAME_INFO *game_info)
SaveGame_ReadSG(&start->flags, sizeof(uint16_t));
}
for (int i = 0; i < g_GameFlow.level_count; i++) {
if (g_GameFlow.levels[i].level_type == GFL_CURRENT) {
game_info->start[game_info->current_level] = game_info->start[i];
}
}
SaveGame_ReadSG(&game_info->timer, sizeof(uint32_t));
SaveGame_ReadSG(&game_info->kills, sizeof(uint32_t));
SaveGame_ReadSG(&game_info->secrets, sizeof(uint16_t));
SaveGame_ReadSG(&game_info->current_level, sizeof(uint16_t));
SaveGame_ReadSG(&g_CurrentLevel, sizeof(uint16_t));
SaveGame_ReadSG(&game_info->pickups, sizeof(uint8_t));
SaveGame_ReadSG(&game_info->bonus_flag, sizeof(uint8_t));
for (int i = 0; i < g_GameFlow.level_count; i++) {
if (g_GameFlow.levels[i].level_type == GFL_CURRENT) {
game_info->start[g_CurrentLevel] = game_info->start[i];
}
}
InitialiseLaraInventory(g_CurrentLevel);
SAVEGAME_ITEM_STATS item_stats = { 0 };
SaveGame_ReadSG(&item_stats, sizeof(item_stats));
@ -809,7 +808,7 @@ static void SaveGame_ReadSGLOT(LOT_INFO *lot)
SaveGame_ReadSG(&lot->target, sizeof(PHD_VECTOR));
}
bool SaveGame_LoadSaveBufferFromFile(GAME_INFO *game_info, int32_t slot)
int16_t SaveGame_LoadSaveBufferFromFile(GAME_INFO *game_info, int32_t slot)
{
assert(game_info);
@ -819,7 +818,7 @@ bool SaveGame_LoadSaveBufferFromFile(GAME_INFO *game_info, int32_t slot)
MYFILE *fp = File_Open(filename, FILE_OPEN_READ);
if (!fp) {
return false;
return -1;
}
File_Read(
&game_info->savegame_buffer[0], sizeof(char), MAX_SAVEGAME_BUFFER, fp);
@ -843,9 +842,11 @@ bool SaveGame_LoadSaveBufferFromFile(GAME_INFO *game_info, int32_t slot)
SaveGame_SkipSG(sizeof(uint32_t));
SaveGame_SkipSG(sizeof(uint32_t));
SaveGame_SkipSG(sizeof(uint16_t));
SaveGame_ReadSG(&game_info->current_level, sizeof(uint16_t));
return true;
uint16_t level_num;
SaveGame_ReadSG(&level_num, sizeof(int16_t));
return level_num;
}
bool SaveGame_SaveToFile(GAME_INFO *game_info, int32_t slot)

View file

@ -8,7 +8,7 @@ void InitialiseStartInfo();
void ModifyStartInfo(int32_t level_num);
void CreateStartInfo(int level_num);
bool SaveGame_LoadSaveBufferFromFile(GAME_INFO *save, int32_t slot);
int16_t SaveGame_LoadSaveBufferFromFile(GAME_INFO *save, int32_t slot);
void SaveGame_ApplySaveBuffer(GAME_INFO *save);
bool SaveGame_SaveToFile(GAME_INFO *save, int32_t slot);

View file

@ -103,11 +103,16 @@ void Shell_Main()
gf_option = GameFlow_InterpretSequence(gf_param, GFL_NORMAL);
break;
case GF_START_SAVED_GAME:
SaveGame_LoadSaveBufferFromFile(&g_GameInfo, gf_param);
gf_option =
GameFlow_InterpretSequence(g_GameInfo.current_level, GFL_SAVED);
case GF_START_SAVED_GAME: {
int16_t level_num =
SaveGame_LoadSaveBufferFromFile(&g_GameInfo, gf_param);
if (level_num < 0) {
gf_option = GF_EXIT_TO_TITLE;
} else {
gf_option = GameFlow_InterpretSequence(level_num, GFL_SAVED);
}
break;
}
case GF_START_CINE:
gf_option = GameFlow_InterpretSequence(gf_param, GFL_CUTSCENE);

View file

@ -1467,7 +1467,6 @@ typedef struct GAME_INFO {
uint32_t timer;
uint32_t kills;
uint16_t secrets;
uint16_t current_level;
uint8_t pickups;
uint8_t bonus_flag;
char savegame_buffer[MAX_SAVEGAME_BUFFER];

View file

@ -57,7 +57,7 @@ CAMERA_INFO g_Camera = { 0 };
GAME_INFO g_GameInfo = { 0 };
int32_t g_SavedGamesCount = 0;
int32_t g_SaveCounter = 0;
int32_t g_CurrentLevel = -1;
int16_t g_CurrentLevel = -1;
uint32_t *g_DemoData = NULL;
bool g_LevelComplete = false;
bool g_ResetFlag = false;

View file

@ -49,7 +49,7 @@ extern CAMERA_INFO g_Camera;
extern GAME_INFO g_GameInfo;
extern int32_t g_SavedGamesCount;
extern int32_t g_SaveCounter;
extern int32_t g_CurrentLevel;
extern int16_t g_CurrentLevel;
extern uint32_t *g_DemoData;
extern bool g_LevelComplete;
extern bool g_ResetFlag;