dhewm3-sdk/d3xp/gamesys/SaveGame.h
Daniel Gibson 3bbe350f48 Add information about dhewm3 build to savegames
like the dhewm3 version and the OS and architecture of the dhewm3
version that created the savegame.
Also added an internalSavegameVersion so be independent of BUILD_NUMBER

fixes #344
2021-02-22 05:22:36 +01:00

186 lines
6.7 KiB
C++

/*
===========================================================================
Doom 3 GPL Source Code
Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
This file is part of the Doom 3 GPL Source Code ("Doom 3 Source Code").
Doom 3 Source Code 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.
Doom 3 Source Code 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 Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
===========================================================================
*/
#ifndef __SAVEGAME_H__
#define __SAVEGAME_H__
#include "framework/DeclFX.h"
#include "framework/Game.h"
#include "renderer/Model.h"
#include "renderer/RenderSystem.h"
#include "gamesys/Class.h"
/*
Save game related helper classes.
*/
const int INITIAL_RELEASE_BUILD_NUMBER = 1262;
class idSaveGame {
public:
idSaveGame( idFile *savefile );
~idSaveGame();
void Close( void );
void AddObject( const idClass *obj );
void WriteObjectList( void );
void Write( const void *buffer, int len );
void WriteInt( const int value );
void WriteJoint( const jointHandle_t value );
void WriteShort( const short value );
void WriteByte( const byte value );
void WriteSignedChar( const signed char value );
void WriteFloat( const float value );
void WriteBool( const bool value );
void WriteString( const char *string );
void WriteVec2( const idVec2 &vec );
void WriteVec3( const idVec3 &vec );
void WriteVec4( const idVec4 &vec );
void WriteVec6( const idVec6 &vec );
void WriteWinding( const idWinding &winding );
void WriteBounds( const idBounds &bounds );
void WriteMat3( const idMat3 &mat );
void WriteAngles( const idAngles &angles );
void WriteObject( const idClass *obj );
void WriteStaticObject( const idClass &obj );
void WriteDict( const idDict *dict );
void WriteMaterial( const idMaterial *material );
void WriteSkin( const idDeclSkin *skin );
void WriteParticle( const idDeclParticle *particle );
void WriteFX( const idDeclFX *fx );
void WriteSoundShader( const idSoundShader *shader );
void WriteModelDef( const class idDeclModelDef *modelDef );
void WriteModel( const idRenderModel *model );
void WriteUserInterface( const idUserInterface *ui, bool unique );
void WriteRenderEntity( const renderEntity_t &renderEntity );
void WriteRenderLight( const renderLight_t &renderLight );
void WriteRefSound( const refSound_t &refSound );
void WriteRenderView( const renderView_t &view );
void WriteUsercmd( const usercmd_t &usercmd );
void WriteContactInfo( const contactInfo_t &contactInfo );
void WriteTrace( const trace_t &trace );
void WriteTraceModel( const idTraceModel &trace );
void WriteClipModel( const class idClipModel *clipModel );
void WriteSoundCommands( void );
void WriteBuildNumber( const int value );
private:
idFile * file;
idList<const idClass *> objects;
void CallSave_r( const idTypeInfo *cls, const idClass *obj );
};
class idRestoreGame {
public:
idRestoreGame( idFile *savefile );
~idRestoreGame();
void CreateObjects( void );
void RestoreObjects( void );
void DeleteObjects( void );
void Error( const char *fmt, ... ) id_attribute((format(printf,2,3)));
void Read( void *buffer, int len );
void ReadInt( int &value );
void ReadJoint( jointHandle_t &value );
void ReadShort( short &value );
void ReadByte( byte &value );
void ReadSignedChar( signed char &value );
void ReadFloat( float &value );
void ReadBool( bool &value );
void ReadString( idStr &string );
void ReadVec2( idVec2 &vec );
void ReadVec3( idVec3 &vec );
void ReadVec4( idVec4 &vec );
void ReadVec6( idVec6 &vec );
void ReadWinding( idWinding &winding );
void ReadBounds( idBounds &bounds );
void ReadMat3( idMat3 &mat );
void ReadAngles( idAngles &angles );
void ReadObject( idClass *&obj );
void ReadStaticObject( idClass &obj );
void ReadDict( idDict *dict );
void ReadMaterial( const idMaterial *&material );
void ReadSkin( const idDeclSkin *&skin );
void ReadParticle( const idDeclParticle *&particle );
void ReadFX( const idDeclFX *&fx );
void ReadSoundShader( const idSoundShader *&shader );
void ReadModelDef( const idDeclModelDef *&modelDef );
void ReadModel( idRenderModel *&model );
void ReadUserInterface( idUserInterface *&ui );
void ReadRenderEntity( renderEntity_t &renderEntity );
void ReadRenderLight( renderLight_t &renderLight );
void ReadRefSound( refSound_t &refSound );
void ReadRenderView( renderView_t &view );
void ReadUsercmd( usercmd_t &usercmd );
void ReadContactInfo( contactInfo_t &contactInfo );
void ReadTrace( trace_t &trace );
void ReadTraceModel( idTraceModel &trace );
void ReadClipModel( idClipModel *&clipModel );
void ReadSoundCommands( void );
void ReadBuildNumber( void );
// Used to retrieve the saved game buildNumber from within class Restore methods
int GetBuildNumber( void );
// DG: added these methods, internalSavegameVersion makes us independent of the global BUILD_NUMBER
void ReadInternalSavegameVersion( void )
{
ReadInt( internalSavegameVersion );
}
// if it's 0, this is from a GetBuildNumber() < 1305 savegame
// otherwise, compare it to idGameLocal::INTERNAL_SAVEGAME_VERSION
int GetInternalSavegameVersion( void ) const
{
return internalSavegameVersion;
}
// DG end
private:
int buildNumber;
int internalSavegameVersion; // DG added this
idFile * file;
idList<idClass *> objects;
void CallRestore_r( const idTypeInfo *cls, idClass *obj );
};
#endif /* !__SAVEGAME_H__*/