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