1 #ifndef savegame_h_
2 #define savegame_h_ 1
3 
4 #define SAVELOAD_REQUEST_NONE -1
5 extern int LoadGameRequest; //slot number of game to be loaded
6 extern int SaveGameRequest;	//slot number of game to be saved
7 
8 extern int NumberOfSavesLeft;
9 
10 typedef enum save_block_type
11 {
12 	SaveBlock_MainHeader,
13 	SaveBlock_DeadStrategy,
14 	SaveBlock_Strategy,
15 	SaveBlock_Track,
16 	SaveBlock_GlobalHive,
17 	SaveBlock_Hierarchy,
18 	SaveBlock_HierarchySection,
19 	SaveBlock_HierarchyDecals,
20 	SaveBlock_HierarchyTween,
21 	SaveBlock_HierarchyDelta,
22 	SaveBlock_MiscGlobal,
23 	SaveBlock_MarineSquad,
24 	SaveBlock_Particles,
25 	SaveBlock_Decals,
26 	SaveBlock_PheromoneTrail,
27 	SaveBlock_VolumetricExplosions,
28 	SaveBlock_LightElements,
29 	SaveBlock_MessageHistory,
30 	SaveBlock_WeaponsCGlobals,
31 	SaveBlock_SoundState,
32 }SAVE_BLOCK_TYPE;
33 
34 
35 //structure needs to be at the start of each block
36 typedef struct save_block_header
37 {
38 	SAVE_BLOCK_TYPE type;
39 	int size;
40 }SAVE_BLOCK_HEADER;
41 
42 
43 //structure to go at the start of stategy save blocks
44 typedef struct save_block_strategy_header
45 {
46 	SAVE_BLOCK_TYPE type;
47 	int size;
48 
49 	AVP_BEHAVIOUR_TYPE bhvr_type;
50 	char SBname[SB_NAME_LENGTH];
51 
52 }SAVE_BLOCK_STRATEGY_HEADER;
53 
54 typedef struct level_save_block
55 {
56 	SAVE_BLOCK_HEADER header;
57 
58 	char AvP_Save_String[8];
59 
60 	unsigned char	Species;
61 	unsigned char	Episode;
62 	unsigned char	ElapsedTime_Hours;
63 	unsigned char	ElapsedTime_Minutes;
64 	unsigned int	ElapsedTime_Seconds;
65 	unsigned char	Difficulty;
66 	unsigned char 	NumberOfSavesLeft;//For Load/Save menu only (if it gets used)
67 
68 }LEVEL_SAVE_BLOCK;
69 
70 
71 #define COPYELEMENT_LOAD(element) SAVELOAD_BEHAV->element = SAVELOAD_BLOCK->element;
72 #define COPYELEMENT_SAVE(element) SAVELOAD_BLOCK->element = SAVELOAD_BEHAV->element;
73 
74 #define COPYELEMENT_LOAD_EXT(block,behav) behav=block;
75 #define COPYELEMENT_SAVE_EXT(block,behav) block=behav;
76 
77 
78 
79 extern void* GetPointerForSaveBlock(unsigned int size);
80 extern struct aimodule * GetPointerFromAIModuleIndex(int index);
81 extern int GetIndexFromAIModulePointer(struct aimodule* module);
82 
83 extern SAVE_BLOCK_HEADER* GetNextBlockIfOfType(SAVE_BLOCK_TYPE type);
84 
85 #define GET_SAVE_BLOCK_POINTER(block) block = GetPointerForSaveBlock(sizeof(*block))
86 
87 #define GET_STRATEGY_SAVE_BLOCK(block,sbPtr)\
88 	block = GetPointerForSaveBlock(sizeof(*block));\
89 	block->header.type = SaveBlock_Strategy;\
90 	block->header.size = sizeof(*block);\
91 	block->header.bhvr_type = sbPtr->I_SBtype;\
92 	COPY_NAME(block->header.SBname,sbPtr->SBname);
93 
94 
95 extern void SaveGame();
96 extern void LoadSavedGame();
97 extern void ResetNumberOfSaves();
98 
99 #endif
100