parent
f93749b40e
commit
7d7b4fce33
|
@ -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"
|
||||||
|
|
207
src/loadsave.cc
207
src/loadsave.cc
|
@ -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");
|
||||||
|
|
||||||
|
|
126
src/loadsave.h
126
src/loadsave.h
|
@ -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 */
|
||||||
|
|
Loading…
Reference in New Issue