mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-13 07:57:52 +00:00
Stop DLevelScript from recursively Serializing
This commit is contained in:
parent
c28c0b8f0b
commit
e3640b5bf5
2 changed files with 50 additions and 3 deletions
|
@ -2881,9 +2881,55 @@ DACSThinker::~DACSThinker ()
|
||||||
void DACSThinker::Serialize (FArchive &arc)
|
void DACSThinker::Serialize (FArchive &arc)
|
||||||
{
|
{
|
||||||
int scriptnum;
|
int scriptnum;
|
||||||
|
int scriptcount = 0;
|
||||||
|
|
||||||
Super::Serialize (arc);
|
Super::Serialize (arc);
|
||||||
arc << Scripts << LastScript;
|
if (SaveVersion < 4515)
|
||||||
|
arc << Scripts << LastScript;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (arc.IsStoring())
|
||||||
|
{
|
||||||
|
DLevelScript *script;
|
||||||
|
script = Scripts;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
scriptcount++;
|
||||||
|
|
||||||
|
// We want to store this list backwards, so we can't loose the last pointer
|
||||||
|
if (script->next == NULL)
|
||||||
|
break;
|
||||||
|
script = script->next;
|
||||||
|
}
|
||||||
|
arc << scriptcount;
|
||||||
|
|
||||||
|
while (script)
|
||||||
|
{
|
||||||
|
arc << script;
|
||||||
|
script = script->prev;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// We are running through this list backwards, so the next entry is the last processed
|
||||||
|
DLevelScript *next = NULL;
|
||||||
|
arc << scriptcount;
|
||||||
|
for (int i = 0; i < scriptcount; i++)
|
||||||
|
{
|
||||||
|
arc << Scripts;
|
||||||
|
|
||||||
|
Scripts->next = next;
|
||||||
|
Scripts->prev = NULL;
|
||||||
|
if (next != NULL)
|
||||||
|
next->prev = Scripts;
|
||||||
|
|
||||||
|
next = Scripts;
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
|
LastScript = Scripts;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (arc.IsStoring ())
|
if (arc.IsStoring ())
|
||||||
{
|
{
|
||||||
ScriptMap::Iterator it(RunningScripts);
|
ScriptMap::Iterator it(RunningScripts);
|
||||||
|
@ -2969,7 +3015,8 @@ void DLevelScript::Serialize (FArchive &arc)
|
||||||
DWORD i;
|
DWORD i;
|
||||||
|
|
||||||
Super::Serialize (arc);
|
Super::Serialize (arc);
|
||||||
arc << next << prev;
|
if (SaveVersion < 4515)
|
||||||
|
arc << next << prev;
|
||||||
|
|
||||||
P_SerializeACSScriptNumber(arc, script, false);
|
P_SerializeACSScriptNumber(arc, script, false);
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,7 @@ const char *GetVersionString();
|
||||||
|
|
||||||
// Use 4500 as the base git save version, since it's higher than the
|
// Use 4500 as the base git save version, since it's higher than the
|
||||||
// SVN revision ever got.
|
// SVN revision ever got.
|
||||||
#define SAVEVER 4514
|
#define SAVEVER 4515
|
||||||
|
|
||||||
#define SAVEVERSTRINGIFY2(x) #x
|
#define SAVEVERSTRINGIFY2(x) #x
|
||||||
#define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x)
|
#define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x)
|
||||||
|
|
Loading…
Reference in a new issue