mirror of
https://github.com/dhewm/dhewm3-sdk.git
synced 2024-11-25 05:51:15 +00:00
Implement saving and restoring of event strings
Required for events with string arguments. On debug builds an assert() is triggered when trying to save such an event, while events could not be properly restored in any build. This happens when going from map delta4 to hell1 and the autosave feature kicks in. The trigger event 'selectWeapon' with the string argument 'weapon_fists' is in the event queue. With the binary from id a warning is issued: WARNING: player1 is not carrying weapon '' so the bug exists in there too, just that its a release build and doesn't abort(). I also managed to trigger this while saving shortly after activating an elevator switch.
This commit is contained in:
parent
85a3a7089a
commit
92023f44ca
2 changed files with 26 additions and 0 deletions
|
@ -755,6 +755,7 @@ void idEvent::Save( idSaveGame *savefile ) {
|
||||||
byte *dataPtr;
|
byte *dataPtr;
|
||||||
bool validTrace;
|
bool validTrace;
|
||||||
const char *format;
|
const char *format;
|
||||||
|
idStr s;
|
||||||
|
|
||||||
savefile->WriteInt( EventQueue.Num() );
|
savefile->WriteInt( EventQueue.Num() );
|
||||||
|
|
||||||
|
@ -783,6 +784,12 @@ void idEvent::Save( idSaveGame *savefile ) {
|
||||||
savefile->WriteVec3( *reinterpret_cast<idVec3 *>( dataPtr ) );
|
savefile->WriteVec3( *reinterpret_cast<idVec3 *>( dataPtr ) );
|
||||||
size += sizeof( idVec3 );
|
size += sizeof( idVec3 );
|
||||||
break;
|
break;
|
||||||
|
case D_EVENT_STRING :
|
||||||
|
s.Clear();
|
||||||
|
s.Append(reinterpret_cast<char *>(dataPtr), MAX_STRING_LEN);
|
||||||
|
savefile->WriteString(s);
|
||||||
|
size += MAX_STRING_LEN;
|
||||||
|
break;
|
||||||
case D_EVENT_TRACE :
|
case D_EVENT_TRACE :
|
||||||
validTrace = *reinterpret_cast<bool *>( dataPtr );
|
validTrace = *reinterpret_cast<bool *>( dataPtr );
|
||||||
savefile->WriteBool( validTrace );
|
savefile->WriteBool( validTrace );
|
||||||
|
@ -836,6 +843,7 @@ void idEvent::Restore( idRestoreGame *savefile ) {
|
||||||
byte *dataPtr;
|
byte *dataPtr;
|
||||||
idEvent *event;
|
idEvent *event;
|
||||||
const char *format;
|
const char *format;
|
||||||
|
idStr s;
|
||||||
|
|
||||||
savefile->ReadInt( num );
|
savefile->ReadInt( num );
|
||||||
|
|
||||||
|
@ -892,6 +900,11 @@ void idEvent::Restore( idRestoreGame *savefile ) {
|
||||||
savefile->ReadVec3( *reinterpret_cast<idVec3 *>( dataPtr ) );
|
savefile->ReadVec3( *reinterpret_cast<idVec3 *>( dataPtr ) );
|
||||||
size += sizeof( idVec3 );
|
size += sizeof( idVec3 );
|
||||||
break;
|
break;
|
||||||
|
case D_EVENT_STRING :
|
||||||
|
savefile->ReadString(s);
|
||||||
|
idStr::Copynz(reinterpret_cast<char *>(dataPtr), s, MAX_STRING_LEN);
|
||||||
|
size += MAX_STRING_LEN;
|
||||||
|
break;
|
||||||
case D_EVENT_TRACE :
|
case D_EVENT_TRACE :
|
||||||
savefile->ReadBool( *reinterpret_cast<bool *>( dataPtr ) );
|
savefile->ReadBool( *reinterpret_cast<bool *>( dataPtr ) );
|
||||||
size += sizeof( bool );
|
size += sizeof( bool );
|
||||||
|
|
|
@ -621,6 +621,7 @@ void idEvent::Save( idSaveGame *savefile ) {
|
||||||
byte *dataPtr;
|
byte *dataPtr;
|
||||||
bool validTrace;
|
bool validTrace;
|
||||||
const char *format;
|
const char *format;
|
||||||
|
idStr s;
|
||||||
|
|
||||||
savefile->WriteInt( EventQueue.Num() );
|
savefile->WriteInt( EventQueue.Num() );
|
||||||
|
|
||||||
|
@ -649,6 +650,12 @@ void idEvent::Save( idSaveGame *savefile ) {
|
||||||
savefile->WriteVec3( *reinterpret_cast<idVec3 *>( dataPtr ) );
|
savefile->WriteVec3( *reinterpret_cast<idVec3 *>( dataPtr ) );
|
||||||
size += sizeof( idVec3 );
|
size += sizeof( idVec3 );
|
||||||
break;
|
break;
|
||||||
|
case D_EVENT_STRING :
|
||||||
|
s.Clear();
|
||||||
|
s.Append(reinterpret_cast<char *>(dataPtr), MAX_STRING_LEN);
|
||||||
|
savefile->WriteString(s);
|
||||||
|
size += MAX_STRING_LEN;
|
||||||
|
break;
|
||||||
case D_EVENT_TRACE :
|
case D_EVENT_TRACE :
|
||||||
validTrace = *reinterpret_cast<bool *>( dataPtr );
|
validTrace = *reinterpret_cast<bool *>( dataPtr );
|
||||||
savefile->WriteBool( validTrace );
|
savefile->WriteBool( validTrace );
|
||||||
|
@ -685,6 +692,7 @@ void idEvent::Restore( idRestoreGame *savefile ) {
|
||||||
byte *dataPtr;
|
byte *dataPtr;
|
||||||
idEvent *event;
|
idEvent *event;
|
||||||
const char *format;
|
const char *format;
|
||||||
|
idStr s;
|
||||||
|
|
||||||
savefile->ReadInt( num );
|
savefile->ReadInt( num );
|
||||||
|
|
||||||
|
@ -741,6 +749,11 @@ void idEvent::Restore( idRestoreGame *savefile ) {
|
||||||
savefile->ReadVec3( *reinterpret_cast<idVec3 *>( dataPtr ) );
|
savefile->ReadVec3( *reinterpret_cast<idVec3 *>( dataPtr ) );
|
||||||
size += sizeof( idVec3 );
|
size += sizeof( idVec3 );
|
||||||
break;
|
break;
|
||||||
|
case D_EVENT_STRING :
|
||||||
|
savefile->ReadString(s);
|
||||||
|
idStr::Copynz(reinterpret_cast<char *>(dataPtr), s, MAX_STRING_LEN);
|
||||||
|
size += MAX_STRING_LEN;
|
||||||
|
break;
|
||||||
case D_EVENT_TRACE :
|
case D_EVENT_TRACE :
|
||||||
savefile->ReadBool( *reinterpret_cast<bool *>( dataPtr ) );
|
savefile->ReadBool( *reinterpret_cast<bool *>( dataPtr ) );
|
||||||
size += sizeof( bool );
|
size += sizeof( bool );
|
||||||
|
|
Loading…
Reference in a new issue