Skip to content

Commit 18f39dc

Browse files
committed
Serialise sector names list (message addresses)
1 parent 9056c38 commit 18f39dc

File tree

4 files changed

+63
-5
lines changed

4 files changed

+63
-5
lines changed

TheForceEngine/TFE_Jedi/InfSystem/message.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include <TFE_Jedi/InfSystem/infSystem.h>
88
#include <TFE_Jedi/Task/task.h>
99
#include <TFE_Jedi/Level/robject.h>
10+
#include <TFE_Jedi/Serialization/serialization.h>
11+
#include <TFE_Jedi/Level/levelData.h>
1012
#include <TFE_DarkForces/logic.h>
1113
#include <assert.h>
1214
#include <stdio.h>
@@ -99,4 +101,52 @@ namespace TFE_Jedi
99101
inf_sendSectorMessage(sector, msgType);
100102
inf_sendLinkMessages(sector->infLink, entity, evt, msgType);
101103
}
104+
105+
// Serialisation
106+
// param0 and param1 are not serialised because they appear to be always set to 0 and never used
107+
void level_serializeMessageAddresses(Stream* stream)
108+
{
109+
if (serialization_getMode() == SMODE_READ)
110+
{
111+
message_free();
112+
s_messageAddr = allocator_create(sizeof(MessageAddress));
113+
114+
s32 msgCount = 0;
115+
SERIALIZE(LevelState_SaveSectorNames, msgCount, 0);
116+
117+
for (s32 m = 0; m < msgCount; m++)
118+
{
119+
MessageAddress* msgAddr = (MessageAddress*)allocator_newItem(s_messageAddr);
120+
121+
u32 nameLength = 0;
122+
SERIALIZE(LevelState_SaveSectorNames, nameLength, 0);
123+
for (s32 i = 0; i < nameLength; i++)
124+
{
125+
SERIALIZE(LevelState_SaveSectorNames, msgAddr->name[i], 0);
126+
}
127+
128+
serialization_serializeSectorPtr(stream, LevelState_SaveSectorNames, msgAddr->sector);
129+
}
130+
}
131+
else // SMODE_WRITE
132+
{
133+
s32 msgCount = allocator_getCount(s_messageAddr);
134+
SERIALIZE(LevelState_SaveSectorNames, msgCount, 0);
135+
136+
MessageAddress* msgAddr = (MessageAddress*)allocator_getHead(s_messageAddr);
137+
while (msgAddr)
138+
{
139+
u32 nameLength = strlen(msgAddr->name);
140+
SERIALIZE(LevelState_SaveSectorNames, nameLength, 0);
141+
for (s32 i = 0; i < nameLength; i++)
142+
{
143+
SERIALIZE(LevelState_SaveSectorNames, msgAddr->name[i], 0);
144+
}
145+
146+
serialization_serializeSectorPtr(stream, LevelState_SaveSectorNames, msgAddr->sector);
147+
148+
msgAddr = (MessageAddress*)allocator_getNext(s_messageAddr);
149+
}
150+
}
151+
}
102152
}

TheForceEngine/TFE_Jedi/InfSystem/message.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ namespace TFE_Jedi
6060
void message_sendToObj(SecObject* obj, MessageType msgType, MessageFunc func);
6161
void message_sendToSector(RSector* sector, SecObject* entity, u32 evt, MessageType msgType);
6262

63+
// Serialisation
64+
void level_serializeMessageAddresses(Stream* stream);
65+
6366
// Optional message values - set these before calling message_XXX() and read inside the message function.
6467
extern void* s_msgEntity;
6568
extern void* s_msgTarget;

TheForceEngine/TFE_Jedi/Level/levelData.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,6 @@ namespace TFE_DarkForces
2222

2323
namespace TFE_Jedi
2424
{
25-
enum LevelStateVersion : u32
26-
{
27-
LevelState_InitVersion = 1,
28-
LevelState_CurVersion = LevelState_InitVersion,
29-
};
3025
enum LevelTextureType : u32
3126
{
3227
LEVTEX_TYPE_TEX = 1,
@@ -221,6 +216,9 @@ namespace TFE_Jedi
221216
level_serializeFixupMirrors();
222217
}
223218

219+
// Serialise sector names - so the scripting system can access sectors by their names after save & load
220+
level_serializeMessageAddresses(stream);
221+
224222
// Serialize objects.
225223
objData_serialize(stream);
226224
}

TheForceEngine/TFE_Jedi/Level/levelData.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ struct Task;
3232

3333
namespace TFE_Jedi
3434
{
35+
enum LevelStateVersion : u32
36+
{
37+
LevelState_InitVersion = 1,
38+
LevelState_SaveSectorNames = 2,
39+
LevelState_CurVersion = LevelState_SaveSectorNames,
40+
};
41+
3542
enum GoalConstants
3643
{
3744
COMPL_TRIG = 0,

0 commit comments

Comments
 (0)