@@ -62,7 +62,6 @@ public override AbstractAsset Deserialize(byte[] bytes, ResourceKey tgi, DBPFFil
62
62
63
63
Debug . Log ( $ " Data array offset: { reader . Position : X} ") ;
64
64
65
- /*
66
65
// 8 unknown shorts called "data".
67
66
var dataArray = new short [ 8 ] ;
68
67
for ( var i = 0 ; i < dataArray . Length ; i ++ )
@@ -72,7 +71,7 @@ public override AbstractAsset Deserialize(byte[] bytes, ResourceKey tgi, DBPFFil
72
71
Debug . Log ( $ "dataArray: [{ string . Join ( ", " , dataArray ) } ]") ;
73
72
74
73
// Next is a number of shorts that depends on the exact version of the file.
75
- uint numShorts = 0x57 + 6 ;
74
+ uint numShorts = 0x58 ;
76
75
for ( var i = 0 ; i < numShorts ; i ++ )
77
76
{
78
77
reader . ReadInt16 ( ) ;
@@ -84,6 +83,17 @@ public override AbstractAsset Deserialize(byte[] bytes, ResourceKey tgi, DBPFFil
84
83
reader . ReadInt16 ( ) ;
85
84
}
86
85
86
+ // Inventory token.
87
+ var tokenGUID = reader . ReadUInt32 ( ) ;
88
+ var tokenFlags = reader . ReadUInt16 ( ) ;
89
+ var numTokenProperties = reader . ReadUInt32 ( ) ;
90
+ for ( var i = 0 ; i < numTokenProperties ; i ++ )
91
+ {
92
+ reader . ReadUInt16 ( ) ;
93
+ }
94
+ Debug . Log ( $ "InventoryToken(tokenGUID={ tokenGUID } , tokenFlags={ tokenFlags } , numTokenProps={ numTokenProperties } )") ;
95
+
96
+
87
97
// Next is the number of object arrays. Each being a short array itself.
88
98
var numObjectArrays = reader . ReadInt16 ( ) ;
89
99
var shortArrays = new List < short [ ] > ( numObjectArrays ) ;
@@ -111,9 +121,9 @@ public override AbstractAsset Deserialize(byte[] bytes, ResourceKey tgi, DBPFFil
111
121
112
122
Debug . Log ( $ " Position before strings: 0x{ reader . Position : X} ") ;
113
123
// A number of material subsitution strings.
114
- var numMaterialSubstitues = reader.ReadInt16();
115
- Debug.Log($" numMaterialSubstitues: {numMaterialSubstitues }");
116
- for (var i = 0; i < numMaterialSubstitues ; i++)
124
+ var materialSubstitutes = reader . ReadInt16 ( ) ;
125
+ Debug . Log ( $ " numMaterialSubstitues: { materialSubstitutes } ") ;
126
+ for ( var i = 0 ; i < materialSubstitutes ; i ++ )
117
127
{
118
128
var materialSubstitute = reader . ReadVariableLengthPascalString ( ) ;
119
129
Debug . Log ( $ "materialSubstitute: { materialSubstitute } ") ;
@@ -122,21 +132,135 @@ public override AbstractAsset Deserialize(byte[] bytes, ResourceKey tgi, DBPFFil
122
132
var persistentFlag = reader . ReadUInt16 ( ) ;
123
133
Debug . Log ( $ "persistentFlag: { persistentFlag } ") ;
124
134
135
+ // Read the cTSTreeStack, a set of cTreeStackElems, probably the edith execution stack?
136
+ var numStackFrames = reader . ReadInt32 ( ) ;
137
+ Debug . Log ( $ " numStackFrames: { numStackFrames } ") ;
138
+ reader . ReadUInt32 ( ) ; // unknown
139
+ for ( var i = 0 ; i < numStackFrames ; i ++ )
140
+ {
141
+ var objectID = reader . ReadUInt16 ( ) ;
142
+ var treeID = reader . ReadUInt16 ( ) ;
143
+ var nodeNum = reader . ReadUInt16 ( ) ;
144
+
145
+ var numLocals = reader . ReadByte ( ) ;
146
+ Debug . Log ( $ "- numLocals: { numLocals } ") ;
147
+
148
+ var numParams = reader . ReadByte ( ) ;
149
+
150
+ var runningObjId = reader . ReadUInt16 ( ) ;
151
+ var runningOnObjId = reader . ReadUInt16 ( ) ;
152
+
153
+ var frameParams = new short [ numParams ] ;
154
+ for ( var j = 0 ; j < frameParams . Length ; j ++ )
155
+ {
156
+ frameParams [ j ] = reader . ReadInt16 ( ) ;
157
+ }
158
+
159
+ var locals = new short [ numLocals ] ;
160
+ for ( var j = 0 ; j < locals . Length ; j ++ )
161
+ {
162
+ locals [ j ] = reader . ReadInt16 ( ) ;
163
+ }
164
+
165
+ var primState = reader . ReadInt32 ( ) ;
166
+
167
+ // next part is related to loading the cITSBehavior
168
+ var behavSaveType = reader . ReadUInt16 ( ) ;
169
+
170
+ Debug . Log ( $ "- objectID: { objectID } , bhav: { behavSaveType } , runningObjID: { runningObjId } , runningOnObjID: { runningOnObjId } ") ;
171
+ Debug . Log ( $ " locals: { string . Join ( ", " , locals ) } ") ;
172
+ }
173
+
174
+ Debug . Log ( $ "[P] Position before cTSRelationshipTable: 0x{ reader . Position : X} ") ;
175
+ // Read the cTSRelationshipTable
176
+ var relationshipTableFlag = reader . ReadInt32 ( ) ;
177
+ Debug . Log ( $ " relationshipTableFlag: { relationshipTableFlag } ") ;
178
+ if ( relationshipTableFlag < 0 )
179
+ {
180
+ var relationShipCount = reader . ReadInt32 ( ) ;
181
+ Debug . Log ( $ " relationShipCount: { relationShipCount } ") ;
182
+ for ( var i = 0 ; i < relationShipCount ; i ++ )
183
+ {
184
+ var isPresent = reader . ReadInt32 ( ) ;
185
+ if ( isPresent == 0 )
186
+ {
187
+ continue ;
188
+ }
189
+
190
+ var relationInstanceId = reader . ReadUInt32 ( ) ;
191
+
192
+ // TODO: read the entry here
193
+ var relationEntryCount = reader . ReadInt32 ( ) ;
194
+ for ( var j = 0 ; j < relationEntryCount ; j ++ )
195
+ {
196
+ var entry = reader . ReadUInt32 ( ) ;
197
+ }
198
+ }
199
+ } else if ( relationshipTableFlag - 2 <= 1 )
200
+ {
201
+ var relationShipCount = reader . ReadInt32 ( ) ;
202
+ Debug . Log ( $ " relationShipCount: { relationShipCount } ") ;
203
+ for ( var i = 0 ; i < relationShipCount ; i ++ )
204
+ {
205
+ var relationEntryId = reader . ReadUInt32 ( ) ;
206
+ }
207
+ }
208
+
125
209
// Slots...
126
210
var slotsFlag = reader . ReadInt16 ( ) ;
127
211
Debug . Log ( $ "slotsFlag: { slotsFlag } ") ;
212
+ if ( slotsFlag < 0 )
213
+ {
214
+ if ( slotsFlag == - 100 )
215
+ {
216
+ // Unknown short.
217
+ reader . ReadUInt16 ( ) ;
218
+ }
128
219
129
- var numSlots = reader.ReadInt16();
130
- for (var i = 0; i < numSlots; i++)
220
+ var numSlots = reader . ReadInt16 ( ) ;
221
+ for ( var i = 0 ; i < numSlots ; i ++ )
222
+ {
223
+ var slotValue = reader . ReadInt16 ( ) ;
224
+ }
225
+ Debug . Log ( $ "numSlots: { numSlots } ") ;
226
+ }
227
+ else
131
228
{
132
- var slotValue = reader.ReadInt16();
229
+ if ( slotsFlag > 0 )
230
+ {
231
+ // Two unknown shorts.
232
+ reader . ReadUInt16 ( ) ;
233
+ reader . ReadUInt16 ( ) ;
234
+ }
235
+
236
+ for ( var i = 0 ; i < slotsFlag - 1 ; i ++ )
237
+ {
238
+ // Two shorts per flag.
239
+ reader . ReadInt16 ( ) ;
240
+ reader . ReadInt16 ( ) ;
241
+ }
133
242
}
134
- Debug.Log($"numSlots: {numSlots}");
135
243
136
- var numEffects = reader.ReadInt16();
137
- Debug.Log($"numEffects: {numEffects}");
244
+ Debug . Log ( $ "Position before readEffects: 0x{ reader . Position : X} ") ;
138
245
139
- Debug.Log($"Position after numEffects: 0x{reader.Position:X}");
246
+ var effectsFlag = reader . ReadInt16 ( ) ;
247
+ Debug . Log ( $ "effectsFlag: { effectsFlag } ") ;
248
+ if ( effectsFlag != 0 )
249
+ {
250
+ var hasEffects = reader . ReadUInt16 ( ) == 1 ;
251
+ Debug . Log ( $ "hasEffects: { hasEffects } ") ;
252
+ if ( hasEffects )
253
+ {
254
+ var effectCount = reader . ReadUInt32 ( ) ;
255
+ for ( var i = 0 ; i < effectCount ; i ++ )
256
+ {
257
+ reader . ReadVariableLengthPascalString ( ) ;
258
+ reader . ReadVariableLengthPascalString ( ) ;
259
+ reader . ReadUInt32 ( ) ;
260
+ reader . ReadUInt32 ( ) ;
261
+ }
262
+ }
263
+ }
140
264
141
265
var numbOverrides = reader . ReadInt16 ( ) ;
142
266
Debug . Log ( $ "numOverides: { numbOverrides } ") ;
@@ -147,7 +271,7 @@ public override AbstractAsset Deserialize(byte[] bytes, ResourceKey tgi, DBPFFil
147
271
var overrideString2 = reader . ReadVariableLengthPascalString ( ) ;
148
272
var overrideString3 = reader . ReadVariableLengthPascalString ( ) ;
149
273
Debug . Log ( $ "{ overrideString1 } / { overrideString2 } / { overrideString3 } ") ;
150
- }*/
274
+ }
151
275
152
276
return asset ;
153
277
}
0 commit comments