mirror of
https://github.com/halpz/re3.git
synced 2025-07-05 00:00:45 +00:00
Merge pull request #229 from Sergeanur/SaveLoadTemplates
Added read/write template functions for save data
This commit is contained in:
@ -2401,28 +2401,28 @@ CStreaming::LoadScene(const CVector &pos)
|
||||
}
|
||||
|
||||
void
|
||||
CStreaming::MemoryCardSave(uint8 *buffer, uint32 *length)
|
||||
CStreaming::MemoryCardSave(uint8 *buf, uint32 *size)
|
||||
{
|
||||
int i;
|
||||
|
||||
*length = NUM_DEFAULT_MODELS;
|
||||
*size = NUM_DEFAULT_MODELS;
|
||||
for(i = 0; i < NUM_DEFAULT_MODELS; i++)
|
||||
if(ms_aInfoForModel[i].m_loadState == STREAMSTATE_LOADED)
|
||||
buffer[i] = ms_aInfoForModel[i].m_flags;
|
||||
buf[i] = ms_aInfoForModel[i].m_flags;
|
||||
else
|
||||
buffer[i] = 0xFF;
|
||||
buf[i] = 0xFF;
|
||||
}
|
||||
|
||||
void
|
||||
CStreaming::MemoryCardLoad(uint8 *buffer, uint32 length)
|
||||
CStreaming::MemoryCardLoad(uint8 *buf, uint32 size)
|
||||
{
|
||||
uint32 i;
|
||||
|
||||
assert(length == NUM_DEFAULT_MODELS);
|
||||
for(i = 0; i < length; i++)
|
||||
assert(size == NUM_DEFAULT_MODELS);
|
||||
for(i = 0; i < size; i++)
|
||||
if(ms_aInfoForModel[i].m_loadState == STREAMSTATE_LOADED)
|
||||
if(buffer[i] != 0xFF)
|
||||
ms_aInfoForModel[i].m_flags = buffer[i];
|
||||
if(buf[i] != 0xFF)
|
||||
ms_aInfoForModel[i].m_flags = buf[i];
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -317,3 +317,54 @@ _TWEEKCLASS(CTweakUInt32, uint32);
|
||||
_TWEEKCLASS(CTweakFloat, float);
|
||||
|
||||
#undef _TWEEKCLASS
|
||||
|
||||
#ifdef VALIDATE_SAVE_SIZE
|
||||
static int32 _bufBytesRead;
|
||||
#define INITSAVEBUF _bufBytesRead = 0;
|
||||
#define VALIDATESAVEBUF(b) assert(_bufBytesRead == b);
|
||||
#else
|
||||
#define INITSAVEBUF
|
||||
#define VALIDATESAVEBUF(b)
|
||||
#endif
|
||||
|
||||
inline void SkipSaveBuf(uint8 *&buf, int32 skip)
|
||||
{
|
||||
buf += skip;
|
||||
#ifdef VALIDATE_SAVE_SIZE
|
||||
_bufBytesRead += skip;
|
||||
#endif
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline const T ReadSaveBuf(uint8 *&buf)
|
||||
{
|
||||
T &value = *(T*)buf;
|
||||
SkipSaveBuf(buf, sizeof(T));
|
||||
return value;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline T *WriteSaveBuf(uint8 *&buf, const T &value)
|
||||
{
|
||||
T *p = (T*)buf;
|
||||
*p = value;
|
||||
SkipSaveBuf(buf, sizeof(T));
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
#define SAVE_HEADER_SIZE (4*sizeof(char)+sizeof(uint32))
|
||||
|
||||
#define WriteSaveHeader(buf,a,b,c,d,size) \
|
||||
WriteSaveBuf(buf, a);\
|
||||
WriteSaveBuf(buf, b);\
|
||||
WriteSaveBuf(buf, c);\
|
||||
WriteSaveBuf(buf, d);\
|
||||
WriteSaveBuf(buf, size);
|
||||
|
||||
#define CheckSaveHeader(buf,a,b,c,d,size)\
|
||||
assert(ReadSaveBuf<char>(buf) == a);\
|
||||
assert(ReadSaveBuf<char>(buf) == b);\
|
||||
assert(ReadSaveBuf<char>(buf) == c);\
|
||||
assert(ReadSaveBuf<char>(buf) == d);\
|
||||
assert(ReadSaveBuf<uint32>(buf) == size);
|
@ -126,6 +126,7 @@ enum Config {
|
||||
// only in master builds
|
||||
#else
|
||||
// not in master builds
|
||||
#define VALIDATE_SAVE_SIZE
|
||||
#endif
|
||||
|
||||
#ifdef FINAL
|
||||
|
Reference in New Issue
Block a user