/* =========================================================================== 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 . 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 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 objects; void CallRestore_r( const idTypeInfo *cls, idClass *obj ); }; #endif /* !__SAVEGAME_H__*/