Skip to content

Commit f518bfb

Browse files
committed
Serialize the ScriptCalls
1 parent b51d01f commit f518bfb

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed

TheForceEngine/TFE_DarkForces/darkForcesMain.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1619,9 +1619,10 @@ namespace TFE_DarkForces
16191619
TFE_ForceScript::serialize(stream);
16201620
if (!writeState)
16211621
{
1622-
// Setup the level script after script serialization and fixup INF function pointers.
1622+
// Setup the level script after script serialization and fixup ScriptCall function pointers.
16231623
loadLevelScript();
16241624
inf_fixupScriptCalls();
1625+
logic_fixupScriptCalls();
16251626
}
16261627

16271628
TFE_System::messages_serialize(stream);

TheForceEngine/TFE_DarkForces/logic.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,4 +671,56 @@ namespace TFE_DarkForces
671671
};
672672
}
673673

674+
void logic_serializeScriptCalls(Stream* stream)
675+
{
676+
s32 count;
677+
if (serialization_getMode() == SMODE_WRITE)
678+
{
679+
count = s_logicScriptCalls.size();
680+
}
681+
else if (serialization_getMode() == SMODE_READ)
682+
{
683+
logic_clearScriptCalls();
684+
count = 0;
685+
}
686+
687+
SERIALIZE(ObjState_LogicScriptCallV1, count, 0);
688+
689+
for (s32 i = 0; i < count; i++)
690+
{
691+
LogicScriptCall* scriptCall = nullptr;
692+
if (serialization_getMode() == SMODE_READ)
693+
{
694+
LogicScriptCall newCall = {};
695+
scriptCall = &newCall;
696+
}
697+
else
698+
{
699+
scriptCall = &s_logicScriptCalls[i];
700+
}
701+
702+
SERIALIZE(ObjState_LogicScriptCallV1, scriptCall->argCount, 0);
703+
for (s32 arg = 0; arg < scriptCall->argCount; arg++)
704+
{
705+
serialization_serializeScriptArg(stream, ObjState_LogicScriptCallV1, &scriptCall->args[arg]);
706+
}
707+
708+
SERIALIZE_CSTRING(ObjState_LogicScriptCallV1, scriptCall->funcName);
709+
if (serialization_getMode() == SMODE_READ)
710+
{
711+
scriptCall->funcPtr = nullptr;
712+
s_logicScriptCalls.push_back(*scriptCall);
713+
}
714+
}
715+
}
716+
717+
void logic_fixupScriptCalls()
718+
{
719+
// Fixup the function pointers
720+
for (s32 i = 0; i < s_logicScriptCalls.size(); i++)
721+
{
722+
s_logicScriptCalls[i].funcPtr = getLevelScriptFunc(s_logicScriptCalls[i].funcName);
723+
}
724+
}
725+
674726
} // TFE_DarkForces

TheForceEngine/TFE_DarkForces/logic.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ namespace TFE_DarkForces
8484

8585
LogicScriptCall* logic_getScriptCall(s32 index);
8686
void logic_clearScriptCalls();
87+
void logic_serializeScriptCalls(Stream* stream);
88+
void logic_fixupScriptCalls();
8789

8890
// Shared variables used for loading.
8991
extern char s_objSeqArg0[];

TheForceEngine/TFE_Jedi/Level/robjData.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ namespace TFE_Jedi
273273
}
274274

275275
objRefList_serialize(stream);
276+
TFE_DarkForces::logic_serializeScriptCalls(stream);
276277
}
277278

278279
////////////////////////////////////////////

0 commit comments

Comments
 (0)