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