-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSaveLoadGame.h
110 lines (69 loc) · 3.67 KB
/
SaveLoadGame.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#ifndef _SAVE_LOAD_GAME_H_
#define _SAVE_LOAD_GAME_H_
#include "GameSettings.h"
//forward declarations of common classes to eliminate includes
class OBJECTTYPE;
class SOLDIERTYPE;
#define BYTESINMEGABYTE 1048576 //1024*1024
#define REQUIRED_FREE_SPACE (20 * BYTESINMEGABYTE)
#define SIZE_OF_SAVE_GAME_DESC 128
#define GAME_VERSION_LENGTH 16
#define SAVE__ERROR_NUM 249//99
// WANNE: The end turn have 2 saves (Auto00.sav and Auto01.sav). This 2 save slots should be underneath the 5 auto save slots
#define SAVE__END_TURN_NUM 248//98
#define SAVE__END_TURN_NUM_1 6//98
#define SAVE__END_TURN_NUM_2 7//98
// WDS - Automatically try to save when an assertion failure occurs
// WANNE: This SAVEGAME should not show up in the load screen
#define SAVE__ASSERTION_FAILURE 247//97
#define SAVE__TIMED_AUTOSAVE_SLOT1 1 //19 // WANNE: This slot does not show up in the load/save screen because it is > 18
#define SAVE__TIMED_AUTOSAVE_SLOT2 2
#define SAVE__TIMED_AUTOSAVE_SLOT3 3
#define SAVE__TIMED_AUTOSAVE_SLOT4 4
#define SAVE__TIMED_AUTOSAVE_SLOT5 5
#define EARLIST_SPECIAL_SAVE 247//97
typedef struct
{
UINT32 uiSavedGameVersion;
CHAR8 zGameVersionNumber[ GAME_VERSION_LENGTH ];
CHAR16 sSavedGameDesc[ SIZE_OF_SAVE_GAME_DESC ];
UINT32 uiFlags;
#ifdef CRIPPLED_VERSION
UINT8 ubCrippleFiller[20];
#endif
//The following will be used to quickly access info to display in the save/load screen
UINT32 uiDay;
UINT8 ubHour;
UINT8 ubMin;
INT16 sSectorX;
INT16 sSectorY;
INT8 bSectorZ;
UINT8 ubNumOfMercsOnPlayersTeam;
INT32 iCurrentBalance;
UINT32 uiCurrentScreen;
BOOLEAN fAlternateSector;
BOOLEAN fWorldLoaded;
UINT8 ubLoadScreenID; //The load screen that should be used when loading the saved game
GAME_OPTIONS sInitialGameOptions; //need these in the header so we can get the info from it on the save load screen.
UINT32 uiRandom;
UINT8 ubFiller[500]; // WANNE: Decrease this filler by 1, for each new UINT8 variable!
} SAVED_GAME_HEADER;
extern UINT32 guiScreenToGotoAfterLoadingSavedGame;
extern UINT32 guiCurrentSaveGameVersion;
void CreateSavedGameFileNameFromNumber( UINT8 ubSaveGameID, STR pzNewFileName );
BOOLEAN InitSaveDir();
BOOLEAN SaveGame( int ubSaveGameID, STR16 pGameDesc );
BOOLEAN LoadSavedGame( int ubSavedGameID );
BOOLEAN CopySavedSoldierInfoToNewSoldier( SOLDIERTYPE *pDestSourceInfo, SOLDIERTYPE *pSourceInfo );
BOOLEAN SaveFilesToSavedGame( STR pSrcFileName, HWFILE hFile );
BOOLEAN LoadFilesFromSavedGame( STR pSrcFileName, HWFILE hFile );
BOOLEAN DoesUserHaveEnoughHardDriveSpace();
void GetBestPossibleSectorXYZValues( INT16 *psSectorX, INT16 *psSectorY, INT8 *pbSectorZ );
extern UINT32 guiLastSaveGameNum; // The end turn auto save number (0 = Auto00.sav, 1 = Auto01.sav)
INT8 GetNumberForAutoSave( BOOLEAN fLatestAutoSave );
/*CHRISL: This function is designed to allow reading the save game file one field at a time. We currently save structures by saving a block of memory,
but variables are stored in memory so that they fit neatly into a WORD resulting in the program automatically adding some padding. This padding is saved
during the save game process and this function is designed to calculate where that padding is so that we can account for it during the load process. The
use of this function should allow changes to be made to various structures within the designated "POD", while still allowing for save game continuity.*/
INT32 ReadFieldByField( HWFILE hFile, PTR pDest, UINT32 uiFieldSize, UINT32 uiElementSize, UINT32 uiCurByteCount );
#endif