Skip to content

Commit 52db5ce

Browse files
committed
Fix deserialization of cTSObject
1 parent 4e6596a commit 52db5ce

2 files changed

Lines changed: 31 additions & 16 deletions

File tree

Assets/Scripts/OpenTS2/Engine/Tests/LotObjectSimulationTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ private void LoadLot(string neighborhoodPrefix, int id)
6161
TypeIDs.OBJM));
6262
foreach (var key in objectModule.ObjectIdToSaveType.Keys)
6363
{
64-
Debug.Log($"item id: {key}");
64+
//Debug.Log($"item id: {key}");
6565
}
6666
Debug.Log($"ItemIndex: {ItemIndex}");
6767
var objectToLoadSaveType = objectModule.ObjectIdToSaveType[ItemIndex];
@@ -82,7 +82,7 @@ private void LoadLot(string neighborhoodPrefix, int id)
8282
}
8383

8484
saveTypeToGuid[selector.saveType] = selector.objectGuid;
85-
//Debug.Log($"{index}: saveType: {selector.saveType} resource name: {selector.catalogResourceName}, Obj name: {def.FileName}");
85+
Debug.Log($"{index}: saveType: {selector.saveType} resource name: {selector.catalogResourceName}, Obj name: {def.FileName}");
8686
}
8787

8888
Debug.Log($"ItemIndex: {ItemIndex}, saveType: {objectToLoadSaveType}");
@@ -91,7 +91,7 @@ private void LoadLot(string neighborhoodPrefix, int id)
9191
var objectDefinition = ObjectManager.Instance.GetObjectByGUID(objectToLoad.objectGuid);
9292
Debug.Assert(objectDefinition != null, "Could not find objd.");
9393

94-
Debug.Log($"Loading object {objectToLoad.catalogResourceName} with guid {objectToLoad.objectGuid:X} group: {objectDefinition.GlobalTGI.GroupID:X}");
94+
Debug.Log($"Loading object {objectToLoad.catalogResourceName} with guid {objectToLoad.objectGuid:X} group: {objectDefinition.GlobalTGI.GroupID:X}, version: {objectModule.Version}");
9595

9696
// Now load the state of the object.
9797
var objectStateBytes = lotPackage.GetBytesByTGI(
@@ -125,7 +125,7 @@ private void LoadLot(string neighborhoodPrefix, int id)
125125
};
126126
entity.MainThread.Frames.Push(vmFrame);
127127

128-
Debug.Log($" BHAV TGI: {entity.MainThread.Frames.Peek().BHAV.GlobalTGI}");
128+
Debug.Log($" BHAV TGI: {entity.MainThread.Frames.Peek().BHAV.GlobalTGI} - {bhav.FileName}");
129129
Debug.Log($" params: ({string.Join(", ", vmFrame.Arguments)})");
130130
}
131131

Assets/Scripts/OpenTS2/Files/Formats/DBPF/SimsObjectCodec.cs

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ private static SimsObjectAsset DeserializeWithVersion(IoBuffer reader, int versi
7171
semiAttrs[i] = reader.ReadInt16();
7272
}
7373

74-
// 8 unknown shorts called "data".
75-
var dataArray = new short[8];
76-
for (var i = 0; i < dataArray.Length; i++)
74+
// 8 shorts, read as the beginning of "data", this is called "temp"
75+
var temp = new short[8];
76+
for (var i = 0; i < temp.Length; i++)
7777
{
78-
dataArray[i] = reader.ReadInt16();
78+
temp[i] = reader.ReadInt16();
7979
}
8080

8181
// Next is a number of shorts that depends on the exact version of the file.
@@ -86,12 +86,7 @@ private static SimsObjectAsset DeserializeWithVersion(IoBuffer reader, int versi
8686
_ => throw new NotImplementedException($"SimObjectCodec not implemented for version {version:X}"),
8787
};
8888

89-
var temp = new short[8];
90-
for (var i = 0; i < temp.Length; i++)
91-
{
92-
temp[i] = reader.ReadInt16();
93-
}
94-
var data = new short[numShorts - 8];
89+
var data = new short[numShorts];
9590
for (var i = 0; i < data.Length; i++)
9691
{
9792
data[i] = reader.ReadInt16();
@@ -122,6 +117,7 @@ private static SimsObjectAsset DeserializeWithVersion(IoBuffer reader, int versi
122117

123118
// Next is the number of object arrays. Each being a short array itself.
124119
var numObjectArrays = reader.ReadInt16();
120+
Debug.Log($"numObjectArrays: {numObjectArrays}");
125121
var shortArrays = new List<short[]>(numObjectArrays);
126122
for (var i = 0; i < numObjectArrays; i++)
127123
{
@@ -132,15 +128,15 @@ private static SimsObjectAsset DeserializeWithVersion(IoBuffer reader, int versi
132128
}
133129
shortArrays.Add(objectArray);
134130
}
135-
Debug.Log($"numObjectArrays: {numObjectArrays}");
136131

137132
// An array of shorts. Unknown.
133+
Debug.Log($" Position before numSecondShortArray: 0x{reader.Position:X}");
138134
var numSecondShortArray = reader.ReadInt16();
135+
Debug.Log($"numSecondShortArrays: {numSecondShortArray}");
139136
for (var i = 0; i < numSecondShortArray; i++)
140137
{
141138
reader.ReadInt16();
142139
}
143-
Debug.Log($"numSecondShortArrays: {numSecondShortArray}");
144140

145141
var ownershipValue = reader.ReadInt32();
146142
Debug.Log($"ownershipValue: {ownershipValue}");
@@ -160,6 +156,7 @@ private static SimsObjectAsset DeserializeWithVersion(IoBuffer reader, int versi
160156

161157
// Read the cTSTreeStack, a set of cTreeStackElems, probably the edith execution stack?
162158
var numStackFrames = reader.ReadInt32();
159+
Debug.Log($"numStackFrames: {numStackFrames}");
163160
var frames = new SimsObjectStackFrame[numStackFrames];
164161
reader.ReadUInt32(); // unknown
165162
for (var i = 0; i < numStackFrames; i++)
@@ -307,6 +304,24 @@ private static SimsObjectAsset DeserializeWithVersion(IoBuffer reader, int versi
307304
Debug.Log($"{overrideString1} / {overrideString2} / {overrideString3}");
308305
}
309306

307+
// Timers
308+
var numTimers = reader.ReadUInt32();
309+
for (var i = 0; i < numTimers; i++)
310+
{
311+
reader.ReadUInt32();
312+
reader.ReadUInt32();
313+
reader.ReadUInt16();
314+
reader.ReadUInt32();
315+
reader.ReadInt32();
316+
reader.ReadInt32();
317+
for (var j = 0; j < 8; j++)
318+
{
319+
reader.ReadInt16();
320+
}
321+
}
322+
323+
// Maybe 6 int32s and 1 int16 here dependent on some flag in the file.
324+
310325
return new SimsObjectAsset(tileLocationY: tileLocationY, tileLocationX: tileLocationX, level: level,
311326
elevation: elevation, objectGroupId: objectGroupId, attrs: attrs, semiAttrs: semiAttrs, temp: temp,
312327
data: data,

0 commit comments

Comments
 (0)