Cleanup loadsave.h

See #42
This commit is contained in:
Alexander Batalov 2022-06-19 14:07:58 +03:00
parent f93749b40e
commit 7d7b4fce33
3 changed files with 150 additions and 184 deletions

View File

@ -2,6 +2,7 @@
#include "actions.h" #include "actions.h"
#include "animation.h" #include "animation.h"
#include "art.h"
#include "color.h" #include "color.h"
#include "combat.h" #include "combat.h"
#include "combat_ai.h" #include "combat_ai.h"

View File

@ -1,5 +1,6 @@
#include "loadsave.h" #include "loadsave.h"
#include "art.h"
#include "automap.h" #include "automap.h"
#include "character_editor.h" #include "character_editor.h"
#include "color.h" #include "color.h"
@ -8,6 +9,7 @@
#include "core.h" #include "core.h"
#include "critter.h" #include "critter.h"
#include "cycle.h" #include "cycle.h"
#include "db.h"
#include "dbox.h" #include "dbox.h"
#include "debug.h" #include "debug.h"
#include "display_monitor.h" #include "display_monitor.h"
@ -18,15 +20,18 @@
#include "game_mouse.h" #include "game_mouse.h"
#include "game_movie.h" #include "game_movie.h"
#include "game_sound.h" #include "game_sound.h"
#include "geometry.h"
#include "interface.h" #include "interface.h"
#include "item.h" #include "item.h"
#include "map.h" #include "map.h"
#include "memory.h" #include "memory.h"
#include "message.h"
#include "object.h" #include "object.h"
#include "options.h" #include "options.h"
#include "party_member.h" #include "party_member.h"
#include "perk.h" #include "perk.h"
#include "pipboy.h" #include "pipboy.h"
#include "platform_compat.h"
#include "proto.h" #include "proto.h"
#include "queue.h" #include "queue.h"
#include "random.h" #include "random.h"
@ -70,8 +75,94 @@
#define ITEMS_DIR_NAME "items" #define ITEMS_DIR_NAME "items"
#define PROTO_FILE_EXT "pro" #define PROTO_FILE_EXT "pro"
#define LOAD_SAVE_DESCRIPTION_LENGTH (30)
#define LOAD_SAVE_HANDLER_COUNT (27)
typedef enum LoadSaveWindowType {
LOAD_SAVE_WINDOW_TYPE_SAVE_GAME,
LOAD_SAVE_WINDOW_TYPE_PICK_QUICK_SAVE_SLOT,
LOAD_SAVE_WINDOW_TYPE_LOAD_GAME,
LOAD_SAVE_WINDOW_TYPE_LOAD_GAME_FROM_MAIN_MENU,
LOAD_SAVE_WINDOW_TYPE_PICK_QUICK_LOAD_SLOT,
} LoadSaveWindowType;
typedef enum LoadSaveSlotState {
SLOT_STATE_EMPTY,
SLOT_STATE_OCCUPIED,
SLOT_STATE_ERROR,
SLOT_STATE_UNSUPPORTED_VERSION,
} LoadSaveSlotState;
typedef int LoadGameHandler(File* stream);
typedef int SaveGameHandler(File* stream);
#define LSGAME_MSG_NAME ("LSGAME.MSG")
typedef struct STRUCT_613D30 {
char field_0[24];
short field_18;
short field_1A;
// TODO: The type is probably char, but it's read with the same function as
// reading unsigned chars, which in turn probably result of collapsing
// reading functions.
unsigned char field_1C;
char character_name[32];
char description[LOAD_SAVE_DESCRIPTION_LENGTH];
short field_5C;
short field_5E;
short field_60;
int field_64;
short field_68;
short field_6A;
short field_6C;
int field_70;
short field_74;
short field_76;
char file_name[16];
} STRUCT_613D30;
typedef enum LoadSaveFrm {
LOAD_SAVE_FRM_BACKGROUND,
LOAD_SAVE_FRM_BOX,
LOAD_SAVE_FRM_PREVIEW_COVER,
LOAD_SAVE_FRM_RED_BUTTON_PRESSED,
LOAD_SAVE_FRM_RED_BUTTON_NORMAL,
LOAD_SAVE_FRM_ARROW_DOWN_NORMAL,
LOAD_SAVE_FRM_ARROW_DOWN_PRESSED,
LOAD_SAVE_FRM_ARROW_UP_NORMAL,
LOAD_SAVE_FRM_ARROW_UP_PRESSED,
LOAD_SAVE_FRM_COUNT,
} LoadSaveFrm;
static int _QuickSnapShot();
static int lsgWindowInit(int windowType);
static int lsgWindowFree(int windowType);
static int lsgPerformSaveGame();
static int lsgLoadGameInSlot(int slot);
static int lsgSaveHeaderInSlot(int slot);
static int lsgLoadHeaderInSlot(int slot);
static int _GetSlotList();
static void _ShowSlotList(int a1);
static void _DrawInfoBox(int a1);
static int _LoadTumbSlot(int a1);
static int _GetComment(int a1);
static int _get_input_str2(int win, int doneKeyCode, int cancelKeyCode, char* description, int maxLength, int x, int y, int textColor, int backgroundColor, int flags);
static int _DummyFunc(File* stream);
static int _PrepLoad(File* stream);
static int _EndLoad(File* stream);
static int _GameMap2Slot(File* stream);
static int _SlotMap2Game(File* stream);
static int _mygets(char* dest, File* stream);
static int _copy_file(const char* a1, const char* a2);
static int _MapDirErase(const char* path, const char* a2);
static int _SaveBackup();
static int _RestoreSave();
static int _LoadObjDudeCid(File* stream);
static int _SaveObjDudeCid(File* stream);
static int _EraseSave();
// 0x47B7C0 // 0x47B7C0
const int gLoadSaveFrmIds[LOAD_SAVE_FRM_COUNT] = { static const int gLoadSaveFrmIds[LOAD_SAVE_FRM_COUNT] = {
237, // lsgame.frm - load/save game 237, // lsgame.frm - load/save game
238, // lsgbox.frm - load/save game 238, // lsgbox.frm - load/save game
239, // lscover.frm - load/save game 239, // lscover.frm - load/save game
@ -84,28 +175,28 @@ const int gLoadSaveFrmIds[LOAD_SAVE_FRM_COUNT] = {
}; };
// 0x5193B8 // 0x5193B8
int _slot_cursor = 0; static int _slot_cursor = 0;
// 0x5193BC // 0x5193BC
bool _quick_done = false; static bool _quick_done = false;
// 0x5193C0 // 0x5193C0
bool gLoadSaveWindowIsoWasEnabled = false; static bool gLoadSaveWindowIsoWasEnabled = false;
// 0x5193C4 // 0x5193C4
int _map_backup_count = -1; static int _map_backup_count = -1;
// 0x5193C8 // 0x5193C8
int _automap_db_flag = 0; static int _automap_db_flag = 0;
// 0x5193CC // 0x5193CC
char* _patches = NULL; static char* _patches = NULL;
// 0x5193D0 // 0x5193D0
char _emgpath[] = "\\FALLOUT\\CD\\DATA\\SAVEGAME"; static char _emgpath[] = "\\FALLOUT\\CD\\DATA\\SAVEGAME";
// 0x5193EC // 0x5193EC
SaveGameHandler* _master_save_list[LOAD_SAVE_HANDLER_COUNT] = { static SaveGameHandler* _master_save_list[LOAD_SAVE_HANDLER_COUNT] = {
_DummyFunc, _DummyFunc,
_SaveObjDudeCid, _SaveObjDudeCid,
scriptsSaveGameGlobalVars, scriptsSaveGameGlobalVars,
@ -136,7 +227,7 @@ SaveGameHandler* _master_save_list[LOAD_SAVE_HANDLER_COUNT] = {
}; };
// 0x519458 // 0x519458
LoadGameHandler* _master_load_list[LOAD_SAVE_HANDLER_COUNT] = { static LoadGameHandler* _master_load_list[LOAD_SAVE_HANDLER_COUNT] = {
_PrepLoad, _PrepLoad,
_LoadObjDudeCid, _LoadObjDudeCid,
scriptsLoadGameGlobalVars, scriptsLoadGameGlobalVars,
@ -167,72 +258,72 @@ LoadGameHandler* _master_load_list[LOAD_SAVE_HANDLER_COUNT] = {
}; };
// 0x5194C4 // 0x5194C4
int _loadingGame = 0; static int _loadingGame = 0;
// 0x613CE0 // 0x613CE0
Size gLoadSaveFrmSizes[LOAD_SAVE_FRM_COUNT]; static Size gLoadSaveFrmSizes[LOAD_SAVE_FRM_COUNT];
// lsgame.msg // lsgame.msg
// //
// 0x613D28 // 0x613D28
MessageList gLoadSaveMessageList; static MessageList gLoadSaveMessageList;
// 0x613D30 // 0x613D30
STRUCT_613D30 _LSData[10]; static STRUCT_613D30 _LSData[10];
// 0x614280 // 0x614280
int _LSstatus[10]; static int _LSstatus[10];
// 0x6142A8 // 0x6142A8
unsigned char* _thumbnail_image; static unsigned char* _thumbnail_image;
// 0x6142AC // 0x6142AC
unsigned char* _snapshotBuf; static unsigned char* _snapshotBuf;
// 0x6142B0 // 0x6142B0
MessageListItem gLoadSaveMessageListItem; static MessageListItem gLoadSaveMessageListItem;
// 0x6142C0 // 0x6142C0
int _dbleclkcntr; static int _dbleclkcntr;
// 0x6142C4 // 0x6142C4
int gLoadSaveWindow; static int gLoadSaveWindow;
// 0x6142C8 // 0x6142C8
unsigned char* gLoadSaveFrmData[LOAD_SAVE_FRM_COUNT]; static unsigned char* gLoadSaveFrmData[LOAD_SAVE_FRM_COUNT];
// 0x6142EC // 0x6142EC
unsigned char* _snapshot; static unsigned char* _snapshot;
// 0x6142F0 // 0x6142F0
char _str2[COMPAT_MAX_PATH]; static char _str2[COMPAT_MAX_PATH];
// 0x6143F4 // 0x6143F4
char _str0[COMPAT_MAX_PATH]; static char _str0[COMPAT_MAX_PATH];
// 0x6144F8 // 0x6144F8
char _str1[COMPAT_MAX_PATH]; static char _str1[COMPAT_MAX_PATH];
// 0x6145FC // 0x6145FC
char _str[COMPAT_MAX_PATH]; static char _str[COMPAT_MAX_PATH];
// 0x614700 // 0x614700
unsigned char* gLoadSaveWindowBuffer; static unsigned char* gLoadSaveWindowBuffer;
// 0x614704 // 0x614704
char _gmpath[COMPAT_MAX_PATH]; static char _gmpath[COMPAT_MAX_PATH];
// 0x614808 // 0x614808
File* _flptr; static File* _flptr;
// 0x61480C // 0x61480C
int _ls_error_code; static int _ls_error_code;
// 0x614810 // 0x614810
int gLoadSaveWindowOldFont; static int gLoadSaveWindowOldFont;
// 0x614814 // 0x614814
CacheEntry* gLoadSaveFrmHandles[LOAD_SAVE_FRM_COUNT]; static CacheEntry* gLoadSaveFrmHandles[LOAD_SAVE_FRM_COUNT];
// 0x47B7E4 // 0x47B7E4
void _InitLoadSave() void _InitLoadSave()
@ -618,7 +709,7 @@ int lsgSaveGame(int mode)
} }
// 0x47C5B4 // 0x47C5B4
int _QuickSnapShot() static int _QuickSnapShot()
{ {
_snapshot = (unsigned char*)internal_malloc(LS_PREVIEW_SIZE); _snapshot = (unsigned char*)internal_malloc(LS_PREVIEW_SIZE);
if (_snapshot == NULL) { if (_snapshot == NULL) {
@ -1073,7 +1164,7 @@ int lsgLoadGame(int mode)
} }
// 0x47D2E4 // 0x47D2E4
int lsgWindowInit(int windowType) static int lsgWindowInit(int windowType)
{ {
gLoadSaveWindowOldFont = fontGetCurrent(); gLoadSaveWindowOldFont = fontGetCurrent();
fontSetCurrent(103); fontSetCurrent(103);
@ -1303,7 +1394,7 @@ int lsgWindowInit(int windowType)
} }
// 0x47D824 // 0x47D824
int lsgWindowFree(int windowType) static int lsgWindowFree(int windowType)
{ {
windowDestroy(gLoadSaveWindow); windowDestroy(gLoadSaveWindow);
fontSetCurrent(gLoadSaveWindowOldFont); fontSetCurrent(gLoadSaveWindowOldFont);
@ -1328,7 +1419,7 @@ int lsgWindowFree(int windowType)
} }
// 0x47D88C // 0x47D88C
int lsgPerformSaveGame() static int lsgPerformSaveGame()
{ {
_ls_error_code = 0; _ls_error_code = 0;
_map_backup_count = -1; _map_backup_count = -1;
@ -1429,7 +1520,7 @@ int _isLoadingGame()
} }
// 0x47DC68 // 0x47DC68
int lsgLoadGameInSlot(int slot) static int lsgLoadGameInSlot(int slot)
{ {
_loadingGame = 1; _loadingGame = 1;
@ -1500,7 +1591,7 @@ int lsgLoadGameInSlot(int slot)
} }
// 0x47DF10 // 0x47DF10
int lsgSaveHeaderInSlot(int slot) static int lsgSaveHeaderInSlot(int slot)
{ {
_ls_error_code = 4; _ls_error_code = 4;
@ -1611,7 +1702,7 @@ int lsgSaveHeaderInSlot(int slot)
} }
// 0x47E2E4 // 0x47E2E4
int lsgLoadHeaderInSlot(int slot) static int lsgLoadHeaderInSlot(int slot)
{ {
_ls_error_code = 3; _ls_error_code = 3;
@ -1703,7 +1794,7 @@ int lsgLoadHeaderInSlot(int slot)
} }
// 0x47E5D0 // 0x47E5D0
int _GetSlotList() static int _GetSlotList()
{ {
int index = 0; int index = 0;
for (; index < 10; index += 1) { for (; index < 10; index += 1) {
@ -1739,7 +1830,7 @@ int _GetSlotList()
} }
// 0x47E6D8 // 0x47E6D8
void _ShowSlotList(int a1) static void _ShowSlotList(int a1)
{ {
bufferFill(gLoadSaveWindowBuffer + LS_WINDOW_WIDTH * 87 + 55, 230, 353, LS_WINDOW_WIDTH, gLoadSaveWindowBuffer[LS_WINDOW_WIDTH * 86 + 55] & 0xFF); bufferFill(gLoadSaveWindowBuffer + LS_WINDOW_WIDTH * 87 + 55, 230, 353, LS_WINDOW_WIDTH, gLoadSaveWindowBuffer[LS_WINDOW_WIDTH * 86 + 55] & 0xFF);
@ -1781,7 +1872,7 @@ void _ShowSlotList(int a1)
} }
// 0x47E8E0 // 0x47E8E0
void _DrawInfoBox(int a1) static void _DrawInfoBox(int a1)
{ {
blitBufferToBuffer(gLoadSaveFrmData[LOAD_SAVE_FRM_BACKGROUND] + LS_WINDOW_WIDTH * 254 + 396, 164, 60, LS_WINDOW_WIDTH, gLoadSaveWindowBuffer + LS_WINDOW_WIDTH * 254 + 396, 640); blitBufferToBuffer(gLoadSaveFrmData[LOAD_SAVE_FRM_BACKGROUND] + LS_WINDOW_WIDTH * 254 + 396, 164, 60, LS_WINDOW_WIDTH, gLoadSaveWindowBuffer + LS_WINDOW_WIDTH * 254 + 396, 640);
@ -1850,7 +1941,7 @@ void _DrawInfoBox(int a1)
} }
// 0x47EC48 // 0x47EC48
int _LoadTumbSlot(int a1) static int _LoadTumbSlot(int a1)
{ {
File* stream; File* stream;
int v2; int v2;
@ -1885,7 +1976,7 @@ int _LoadTumbSlot(int a1)
} }
// 0x47ED5C // 0x47ED5C
int _GetComment(int a1) static int _GetComment(int a1)
{ {
// Maintain original position in original resolution, otherwise center it. // Maintain original position in original resolution, otherwise center it.
int commentWindowX = screenGetWidth() != 640 int commentWindowX = screenGetWidth() != 640
@ -2007,7 +2098,7 @@ int _GetComment(int a1)
} }
// 0x47F084 // 0x47F084
int _get_input_str2(int win, int doneKeyCode, int cancelKeyCode, char* description, int maxLength, int x, int y, int textColor, int backgroundColor, int flags) static int _get_input_str2(int win, int doneKeyCode, int cancelKeyCode, char* description, int maxLength, int x, int y, int textColor, int backgroundColor, int flags)
{ {
int cursorWidth = fontGetStringWidth("_") - 4; int cursorWidth = fontGetStringWidth("_") - 4;
int windowWidth = windowGetWidth(win); int windowWidth = windowGetWidth(win);
@ -2104,13 +2195,13 @@ int _get_input_str2(int win, int doneKeyCode, int cancelKeyCode, char* descripti
} }
// 0x47F48C // 0x47F48C
int _DummyFunc(File* stream) static int _DummyFunc(File* stream)
{ {
return 0; return 0;
} }
// 0x47F490 // 0x47F490
int _PrepLoad(File* stream) static int _PrepLoad(File* stream)
{ {
gameReset(); gameReset();
gameMouseSetCursor(MOUSE_CURSOR_WAIT_PLANET); gameMouseSetCursor(MOUSE_CURSOR_WAIT_PLANET);
@ -2120,7 +2211,7 @@ int _PrepLoad(File* stream)
} }
// 0x47F4C8 // 0x47F4C8
int _EndLoad(File* stream) static int _EndLoad(File* stream)
{ {
worldmapStartMapMusic(); worldmapStartMapMusic();
dudeSetName(_LSData[_slot_cursor].character_name); dudeSetName(_LSData[_slot_cursor].character_name);
@ -2134,7 +2225,7 @@ int _EndLoad(File* stream)
} }
// 0x47F510 // 0x47F510
int _GameMap2Slot(File* stream) static int _GameMap2Slot(File* stream)
{ {
if (_partyMemberPrepSave() == -1) { if (_partyMemberPrepSave() == -1) {
return -1; return -1;
@ -2247,7 +2338,7 @@ int _GameMap2Slot(File* stream)
// SlotMap2Game // SlotMap2Game
// 0x47F990 // 0x47F990
int _SlotMap2Game(File* stream) static int _SlotMap2Game(File* stream)
{ {
debugPrint("LOADSAVE: in SlotMap2Game\n"); debugPrint("LOADSAVE: in SlotMap2Game\n");
@ -2347,7 +2438,7 @@ int _SlotMap2Game(File* stream)
} }
// 0x47FE14 // 0x47FE14
int _mygets(char* dest, File* stream) static int _mygets(char* dest, File* stream)
{ {
int index = 14; int index = 14;
while (true) { while (true) {
@ -2374,7 +2465,7 @@ int _mygets(char* dest, File* stream)
} }
// 0x47FE58 // 0x47FE58
int _copy_file(const char* a1, const char* a2) static int _copy_file(const char* a1, const char* a2)
{ {
File* stream1; File* stream1;
File* stream2; File* stream2;
@ -2455,7 +2546,7 @@ void lsgInit()
} }
// 0x480040 // 0x480040
int _MapDirErase(const char* relativePath, const char* extension) static int _MapDirErase(const char* relativePath, const char* extension)
{ {
char path[COMPAT_MAX_PATH]; char path[COMPAT_MAX_PATH];
sprintf(path, "%s*.%s", relativePath, extension); sprintf(path, "%s*.%s", relativePath, extension);
@ -2485,7 +2576,7 @@ int _MapDirEraseFile_(const char* a1, const char* a2)
} }
// 0x480104 // 0x480104
int _SaveBackup() static int _SaveBackup()
{ {
debugPrint("\nLOADSAVE: Backing up save slot files..\n"); debugPrint("\nLOADSAVE: Backing up save slot files..\n");
@ -2556,7 +2647,7 @@ int _SaveBackup()
} }
// 0x4803D8 // 0x4803D8
int _RestoreSave() static int _RestoreSave()
{ {
debugPrint("\nLOADSAVE: Restoring save file backup...\n"); debugPrint("\nLOADSAVE: Restoring save file backup...\n");
@ -2626,7 +2717,7 @@ int _RestoreSave()
} }
// 0x480710 // 0x480710
int _LoadObjDudeCid(File* stream) static int _LoadObjDudeCid(File* stream)
{ {
int value; int value;
@ -2640,13 +2731,13 @@ int _LoadObjDudeCid(File* stream)
} }
// 0x480734 // 0x480734
int _SaveObjDudeCid(File* stream) static int _SaveObjDudeCid(File* stream)
{ {
return fileWriteInt32(stream, gDude->cid); return fileWriteInt32(stream, gDude->cid);
} }
// 0x480754 // 0x480754
int _EraseSave() static int _EraseSave()
{ {
debugPrint("\nLOADSAVE: Erasing save(bad) slot...\n"); debugPrint("\nLOADSAVE: Erasing save(bad) slot...\n");

View File

@ -1,15 +1,6 @@
#ifndef LOAD_SAVE_GAME_H #ifndef LOAD_SAVE_GAME_H
#define LOAD_SAVE_GAME_H #define LOAD_SAVE_GAME_H
#include "art.h"
#include "db.h"
#include "geometry.h"
#include "message.h"
#include "platform_compat.h"
#define LOAD_SAVE_DESCRIPTION_LENGTH (30)
#define LOAD_SAVE_HANDLER_COUNT (27)
typedef enum LoadSaveMode { typedef enum LoadSaveMode {
// Special case - loading game from main menu. // Special case - loading game from main menu.
LOAD_SAVE_MODE_FROM_MAIN_MENU, LOAD_SAVE_MODE_FROM_MAIN_MENU,
@ -21,129 +12,12 @@ typedef enum LoadSaveMode {
LOAD_SAVE_MODE_QUICK, LOAD_SAVE_MODE_QUICK,
} LoadSaveMode; } LoadSaveMode;
typedef enum LoadSaveWindowType {
LOAD_SAVE_WINDOW_TYPE_SAVE_GAME,
LOAD_SAVE_WINDOW_TYPE_PICK_QUICK_SAVE_SLOT,
LOAD_SAVE_WINDOW_TYPE_LOAD_GAME,
LOAD_SAVE_WINDOW_TYPE_LOAD_GAME_FROM_MAIN_MENU,
LOAD_SAVE_WINDOW_TYPE_PICK_QUICK_LOAD_SLOT,
} LoadSaveWindowType;
typedef enum LoadSaveSlotState {
SLOT_STATE_EMPTY,
SLOT_STATE_OCCUPIED,
SLOT_STATE_ERROR,
SLOT_STATE_UNSUPPORTED_VERSION,
} LoadSaveSlotState;
typedef int LoadGameHandler(File* stream);
typedef int SaveGameHandler(File* stream);
#define LSGAME_MSG_NAME ("LSGAME.MSG")
typedef struct STRUCT_613D30 {
char field_0[24];
short field_18;
short field_1A;
// TODO: The type is probably char, but it's read with the same function as
// reading unsigned chars, which in turn probably result of collapsing
// reading functions.
unsigned char field_1C;
char character_name[32];
char description[LOAD_SAVE_DESCRIPTION_LENGTH];
short field_5C;
short field_5E;
short field_60;
int field_64;
short field_68;
short field_6A;
short field_6C;
int field_70;
short field_74;
short field_76;
char file_name[16];
} STRUCT_613D30;
typedef enum LoadSaveFrm {
LOAD_SAVE_FRM_BACKGROUND,
LOAD_SAVE_FRM_BOX,
LOAD_SAVE_FRM_PREVIEW_COVER,
LOAD_SAVE_FRM_RED_BUTTON_PRESSED,
LOAD_SAVE_FRM_RED_BUTTON_NORMAL,
LOAD_SAVE_FRM_ARROW_DOWN_NORMAL,
LOAD_SAVE_FRM_ARROW_DOWN_PRESSED,
LOAD_SAVE_FRM_ARROW_UP_NORMAL,
LOAD_SAVE_FRM_ARROW_UP_PRESSED,
LOAD_SAVE_FRM_COUNT,
} LoadSaveFrm;
extern const int gLoadSaveFrmIds[LOAD_SAVE_FRM_COUNT];
extern int _slot_cursor;
extern bool _quick_done;
extern bool gLoadSaveWindowIsoWasEnabled;
extern int _map_backup_count;
extern int _automap_db_flag;
extern char* _patches;
extern char _emgpath[];
extern SaveGameHandler* _master_save_list[LOAD_SAVE_HANDLER_COUNT];
extern LoadGameHandler* _master_load_list[LOAD_SAVE_HANDLER_COUNT];
extern int _loadingGame;
extern Size gLoadSaveFrmSizes[LOAD_SAVE_FRM_COUNT];
extern MessageList gLoadSaveMessageList;
extern STRUCT_613D30 _LSData[10];
extern int _LSstatus[10];
extern unsigned char* _thumbnail_image;
extern unsigned char* _snapshotBuf;
extern MessageListItem gLoadSaveMessageListItem;
extern int _dbleclkcntr;
extern int gLoadSaveWindow;
extern unsigned char* gLoadSaveFrmData[LOAD_SAVE_FRM_COUNT];
extern unsigned char* _snapshot;
extern char _str2[COMPAT_MAX_PATH];
extern char _str0[COMPAT_MAX_PATH];
extern char _str1[COMPAT_MAX_PATH];
extern char _str[COMPAT_MAX_PATH];
extern unsigned char* gLoadSaveWindowBuffer;
extern char _gmpath[COMPAT_MAX_PATH];
extern File* _flptr;
extern int _ls_error_code;
extern int gLoadSaveWindowOldFont;
extern CacheEntry* gLoadSaveFrmHandles[LOAD_SAVE_FRM_COUNT];
void _InitLoadSave(); void _InitLoadSave();
void _ResetLoadSave(); void _ResetLoadSave();
int lsgSaveGame(int mode); int lsgSaveGame(int mode);
int _QuickSnapShot();
int lsgLoadGame(int mode); int lsgLoadGame(int mode);
int lsgWindowInit(int windowType);
int lsgWindowFree(int windowType);
int lsgPerformSaveGame();
int _isLoadingGame(); int _isLoadingGame();
int lsgLoadGameInSlot(int slot);
int lsgSaveHeaderInSlot(int slot);
int lsgLoadHeaderInSlot(int slot);
int _GetSlotList();
void _ShowSlotList(int a1);
void _DrawInfoBox(int a1);
int _LoadTumbSlot(int a1);
int _GetComment(int a1);
int _get_input_str2(int win, int doneKeyCode, int cancelKeyCode, char* description, int maxLength, int x, int y, int textColor, int backgroundColor, int flags);
int _DummyFunc(File* stream);
int _PrepLoad(File* stream);
int _EndLoad(File* stream);
int _GameMap2Slot(File* stream);
int _SlotMap2Game(File* stream);
int _mygets(char* dest, File* stream);
int _copy_file(const char* a1, const char* a2);
void lsgInit(); void lsgInit();
int _MapDirErase(const char* path, const char* a2);
int _MapDirEraseFile_(const char* a1, const char* a2); int _MapDirEraseFile_(const char* a1, const char* a2);
int _SaveBackup();
int _RestoreSave();
int _LoadObjDudeCid(File* stream);
int _SaveObjDudeCid(File* stream);
int _EraseSave();
#endif /* LOAD_SAVE_GAME_H */ #endif /* LOAD_SAVE_GAME_H */