1 //============================================================================= 2 // 3 // Adventure Game Studio (AGS) 4 // 5 // Copyright (C) 1999-2011 Chris Jones and 2011-20xx others 6 // The full list of copyright holders can be found in the Copyright.txt 7 // file, which is part of this source code distribution. 8 // 9 // The AGS source code is provided under the Artistic License 2.0. 10 // A copy of this license can be found in the file License.txt and at 11 // http://www.opensource.org/licenses/artistic-license-2.0.php 12 // 13 //============================================================================= 14 15 #ifndef __AGS_EE_GAME__SAVEGAME_H 16 #define __AGS_EE_GAME__SAVEGAME_H 17 18 #include "util/version.h" 19 20 21 namespace AGS 22 { 23 24 namespace Common { class Bitmap; class Stream; } 25 26 namespace Engine 27 { 28 29 using Common::Bitmap; 30 using Common::Stream; 31 using Common::String; 32 using Common::Version; 33 34 //----------------------------------------------------------------------------- 35 // Savegame version history 36 // 37 // 8 last old style saved game format (of AGS 3.2.1) 38 //----------------------------------------------------------------------------- 39 enum SavegameVersion 40 { 41 kSvgVersion_Undefined = 0, 42 kSvgVersion_321 = 8, 43 kSvgVersion_Current = kSvgVersion_321, 44 kSvgVersion_LowestSupported = kSvgVersion_321 45 }; 46 47 // Error codes for save restoration routine 48 enum SavegameError 49 { 50 kSvgErr_NoError, 51 kSvgErr_FileNotFound, 52 kSvgErr_NoStream, 53 kSvgErr_SignatureFailed, 54 kSvgErr_FormatVersionNotSupported, 55 kSvgErr_IncompatibleEngine, 56 kSvgErr_InconsistentFormat, 57 kSvgErr_GameContentAssertion, 58 kSvgErr_InconsistentPlugin, 59 kSvgErr_DifferentColorDepth, 60 kSvgErr_GameObjectInitFailed, 61 kNumSavegameError 62 }; 63 64 typedef std::auto_ptr<Stream> AStream; 65 typedef std::auto_ptr<Bitmap> ABitmap; 66 67 // SavegameSource defines a successfully opened savegame stream 68 struct SavegameSource 69 { 70 // Signature of the current savegame format 71 static const String Signature; 72 73 // Name of the savefile 74 String Filename; 75 // Savegame format version 76 SavegameVersion Version; 77 // A ponter to the opened stream 78 AStream InputStream; 79 80 SavegameSource(); 81 }; 82 83 // Supported elements of savegame description; 84 // these may be used as flags to define valid fields 85 enum SavegameDescElem 86 { 87 kSvgDesc_None = 0, 88 kSvgDesc_EnvInfo = 0x0001, 89 kSvgDesc_UserText = 0x0002, 90 kSvgDesc_UserImage = 0x0004, 91 kSvgDesc_All = kSvgDesc_EnvInfo | kSvgDesc_UserText | kSvgDesc_UserImage 92 }; 93 94 // SavegameDescription describes savegame with information about the enviroment 95 // it was created in, and custom data provided by user 96 struct SavegameDescription 97 { 98 // Version of the engine that saved the game 99 Version EngineVersion; 100 // Name of the main data file used; this is needed to properly 101 // load saves made by "minigames" 102 String MainDataFilename; 103 // Color depth the engine was running in; this is required to 104 // properly restore dynamic graphics from the save 105 int ColorDepth; 106 107 String UserText; 108 ABitmap UserImage; 109 110 SavegameDescription(); 111 }; 112 113 114 String GetSavegameErrorText(SavegameError err); 115 // Opens savegame for reading; optionally reads description, if any is provided 116 SavegameError OpenSavegame(const String &filename, SavegameSource &src, 117 SavegameDescription &desc, SavegameDescElem elems = kSvgDesc_All); 118 // Opens savegame and reads the savegame description 119 SavegameError OpenSavegame(const String &filename, SavegameDescription &desc, SavegameDescElem elems = kSvgDesc_All); 120 121 // Reads the game data from the save stream and reinitializes game state 122 SavegameError RestoreGameState(Stream *in, SavegameVersion svg_version); 123 124 // Opens savegame for writing and puts in savegame description 125 Stream *StartSavegame(const String &filename, const String &desc, const Bitmap *image); 126 127 // Prepares game for saving state and writes data into the save stream 128 void SaveGameState(Stream *out); 129 130 } // namespace Engine 131 } // namespace AGS 132 133 #endif // __AGS_EE_GAME__SAVEGAME_H 134