Files
2026-02-02 04:50:13 +01:00

264 lines
6.8 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef ASYLUM_SYSTEM_SAVEGAME_H
#define ASYLUM_SYSTEM_SAVEGAME_H
#include "common/savefile.h"
#include "common/serializer.h"
#include "common/util.h"
#include "asylum/shared.h"
namespace Asylum {
#define SAVEGAME_COUNT 25
class AsylumEngine;
class Savegame {
public:
Savegame(AsylumEngine *engine);
~Savegame() {};
/**
* Checks if saved games are present
*
* @return true if it succeeds, false if it fails.
*/
bool hasSavegames() const;
/**
* Loads the list of saved games.
*/
void loadList();
/**
* Loads a game
*/
void load();
/**
* Quick loads a game
*
* @return true if it succeeds, false if it fails.
*/
bool quickLoad();
/**
* Saves a game
*
* @return true if it succeeds, false if it fails.
*/
void save();
/**
* Quick saves a game
*
* @return true if it succeeds, false if it fails.
*/
bool quickSave();
/**
* Removes a savegame
*/
void remove();
/**
* Checks if a savegame is compatible
*
* @return true if it is, false otherwise.
*/
bool isCompatible();
//////////////////////////////////////////////////////////////////////////
// Static methods
//////////////////////////////////////////////////////////////////////////
/**
* Seeks to a specific place in the file
*
* @param [in,out] file If non-null, the file.
* @param offset Offset index of the info into the file
* @param description The description.
*/
static void seek(Common::InSaveFile *file, uint32 offset, const Common::String &description);
/**
* Reads data from a file.
*
* @param [in,out] file If non-null, the file.
* @param description The description.
*
* @return the value
*/
static uint32 read(Common::InSaveFile *file, const Common::String &description);
/**
* Reads data from a file.
*
* @param [in,out] file If non-null, the file.
* @param strLength Length of the string.
* @param description The description.
*
* @return the string
*/
static Common::String read(Common::InSaveFile *file, uint32 strLength, const Common::String &description);
/**
* Reads data from a file.
*
* @param [in,out] file If non-null, the file.
* @param [in,out] data If non-null, the data.
* @param size The size.
* @param count Number of.
* @param description The description.
*/
static void read(Common::InSaveFile *file, Common::Serializable *data, uint32 size, uint32 count, const Common::String &description);
/**
* Writes data to a file.
*
* @param [in,out] file If non-null, the file.
* @param val The value
* @param description The description.
*/
static void write(Common::OutSaveFile *file, uint32 val, const Common::String &description);
/**
* Writes data to a file.
*
* @param [in,out] file If non-null, the file.
* @param val The string
* @param strLength The size of the string.
* @param description The description.
*/
static void write(Common::OutSaveFile *file, const Common::String &val, uint32 strLength, const Common::String &description);
/**
* Writes data to a file.
*
* @param [in,out] file If non-null, the file.
* @param [in,out] data If non-null, the data.
* @param size The size.
* @param count Number of.
* @param description The description.
*/
static void write(Common::OutSaveFile *file, Common::Serializable *data, uint32 size, uint32 count, const Common::String &description);
//////////////////////////////////////////////////////////////////////////
// Movies
//////////////////////////////////////////////////////////////////////////
void setMovieViewed(uint32 index);
uint32 getMoviesViewed(int32 *movieList) const;
void loadMoviesViewed();
//////////////////////////////////////////////////////////////////////////
// Accessors
//////////////////////////////////////////////////////////////////////////
void setName(uint32 index, const Common::String &name);
Common::String getName(uint32 index) const;
Common::String *getName() { return &_names[_index]; }
void setIndex(uint32 index) { _index = index; }
uint32 getIndex() { return _index; }
bool hasSavegame(uint32 index) const;
ResourcePackId getScenePack() { return (ResourcePackId)(_savegameToScene[_index] + 4); }
void resetVersion();
const char *getVersion() { return _version.c_str(); }
uint32 getBuild() { return _build; }
private:
AsylumEngine *_vm;
uint32 _index;
byte _moviesViewed[196];
uint32 _savegameToScene[SAVEGAME_COUNT];
bool _savegames[SAVEGAME_COUNT];
Common::String _names[SAVEGAME_COUNT];
Common::String _version;
uint32 _build;
//////////////////////////////////////////////////////////////////////////
// Helpers
//////////////////////////////////////////////////////////////////////////
/**
* Gets a filename for a given save index
*
* @param index Zero-based index of the savegame
*
* @return The filename.
*/
Common::String getFilename(uint32 index) const;
/**
* Check if a specific savegame exists
*
* @param filename Filename of the file.
*
* @return true if savegame present, false if not.
*/
bool isSavegamePresent(const Common::String &filename) const;
//////////////////////////////////////////////////////////////////////////
// Reading & writing
//////////////////////////////////////////////////////////////////////////
/**
* Reads a savegame header.
*
* @param [in,out] file If non-null, the file.
*
* @return true if it succeeds, false if it fails.
*/
bool readHeader(Common::InSaveFile *file);
/**
* Writes a savegame header.
*
* @param [in,out] file If non-null, the file.
*/
void writeHeader(Common::OutSaveFile *file) const;
/**
* Loads savegame data
*
* @param filename Filename of the file.
*/
void loadData(const Common::String &filename);
/**
* Save savegame data.
*
* @param filename Filename of the file.
* @param name The name.
* @param chapter The chapter.
*/
void saveData(const Common::String &filename, const Common::String &name, ChapterIndex chapter);
};
} // End of namespace Asylum
#endif // ASYLUM_SYSTEM_SAVEGAME_H