@@ -86,6 +86,8 @@ bool ParseSingleBlock(uint8_t* blockBlob, size_t *blockSize)
86
86
{
87
87
Block_VERT* block = reinterpret_cast <Block_VERT*>(blockBlob);
88
88
printf (" Block_VERT\n " );
89
+ printf (" \t unk1 = 0x%08x\n " , block->unk1 );
90
+
89
91
assert (block->unk1 == 0x45c );
90
92
*blockSize = sizeof (Block_VERT);
91
93
}
@@ -94,6 +96,8 @@ bool ParseSingleBlock(uint8_t* blockBlob, size_t *blockSize)
94
96
{
95
97
Block_FRAG* block = reinterpret_cast <Block_FRAG*>(blockBlob);
96
98
printf (" Block_FRAG\n " );
99
+ printf (" \t unk1 = 0x%08x\n " , block->unk1 );
100
+
97
101
assert (block->unk1 == 0x37c );
98
102
*blockSize = sizeof (Block_FRAG);
99
103
}
@@ -102,7 +106,10 @@ bool ParseSingleBlock(uint8_t* blockBlob, size_t *blockSize)
102
106
{
103
107
Block_COMP* block = reinterpret_cast <Block_COMP*>(blockBlob);
104
108
printf (" Block_COMP\n " );
105
- assert (block->unk1 == 0x1a8 );
109
+ printf (" \t unk1 = 0x%08x\n " , block->unk1 );
110
+
111
+ // XXX: Changes, probably a size
112
+ // assert(block->unk1 == 0x1a8);
106
113
*blockSize = sizeof (Block_COMP);
107
114
}
108
115
break ;
@@ -162,13 +169,13 @@ bool ParseSingleBlock(uint8_t* blockBlob, size_t *blockSize)
162
169
{
163
170
Block_SSYM* block = reinterpret_cast <Block_SSYM*>(blockBlob);
164
171
printf (" Block_SSYM\n " );
165
- printf (" \t unk1 = 0x%08x\n " , block->unk1 );
172
+ printf (" \t size = 0x%08x\n " , block->size );
166
173
printf (" \t unk2 = 0x%08x\n " , block->unk2 );
167
174
168
175
// XXX: Sometimes different
169
- // assert(block->unk1 == 0xa8);
170
176
// assert(block->unk2 == 0x2);
171
- *blockSize = sizeof (Block_SSYM);
177
+ // XXX: Skipping the entire SSYM because parsing of sub blocks(STRI) aren't complete
178
+ *blockSize = sizeof (Block_SSYM) + block->size - 4 ;
172
179
}
173
180
break ;
174
181
case COOKIE (" SYMB" ):
@@ -247,16 +254,16 @@ bool ParseSingleBlock(uint8_t* blockBlob, size_t *blockSize)
247
254
printf (" \t unk3 = 0x%08x\n " , block->unk3 );
248
255
printf (" \t unk4 = 0x%08x\n " , block->unk4 );
249
256
printf (" \t unk5 = 0x%08x\n " , block->unk5 );
250
- printf (" \t unk6 = 0x%08x\n " , block->unk6 );
257
+ // printf("\tunk6 = 0x%08x\n", block->unk6);
251
258
252
259
assert (block->unk1 == 0xc );
253
260
// XXX: Sometimes different
254
261
// assert(block->unk2 == 0x01020102);
255
262
// assert(block->unk3 == 0x1);
256
263
// Probably a bitfield
257
264
// assert(block->unk4 == 0x8);
258
- assert (block->unk5 == 0x0 || block->unk5 == 0x45535054 );
259
- assert (block->unk6 == 0x0 || block->unk6 == 0x3c );
265
+ // assert(block->unk5 == 0x0 || block->unk5 == 0x45535054);
266
+ // assert(block->unk6 == 0x0 || block->unk6 == 0x3c);
260
267
*blockSize = sizeof (Block_TPGE);
261
268
}
262
269
break ;
@@ -296,7 +303,8 @@ bool ParseSingleBlock(uint8_t* blockBlob, size_t *blockSize)
296
303
printf (" \t unk2 = 0x%08x\n " , block->unk2 );
297
304
298
305
assert (block->unk1 == 0x20 );
299
- assert (block->unk2 == 0x18 );
306
+ // XXX: Probably an array size
307
+ // assert(block->unk2 == 0x18);
300
308
301
309
*blockSize = sizeof (Block_TPAR);
302
310
}
@@ -310,11 +318,13 @@ bool ParseSingleBlock(uint8_t* blockBlob, size_t *blockSize)
310
318
printf (" \t unk3 = 0x%08x\n " , block->unk3 );
311
319
312
320
313
- assert (block->unk1 == 0x4 );
314
- assert (block->unk2 == 0x0 );
315
- assert (block->unk3 == 0x1 );
321
+ // XXX: sometimes different
322
+ // assert(block->unk1 == 0x4);
323
+ // assert(block->unk2 == 0x0);
324
+ // assert(block->unk3 == 0x1);
316
325
317
- *blockSize = sizeof (Block_UBUF);
326
+ // XXX: unk2...?
327
+ *blockSize = sizeof (Block_UBUF) + (block->unk2 ? 4 : 0 );
318
328
}
319
329
break ;
320
330
case COOKIE (" EBIN" ):
@@ -332,10 +342,12 @@ bool ParseSingleBlock(uint8_t* blockBlob, size_t *blockSize)
332
342
// assert(block->unk1 == 0xd4);
333
343
assert (block->unk2 == 0x0 );
334
344
assert (block->unk3 == ~0U );
335
- assert (block->unk4 == 0x0 );
345
+ // assert(block->unk4 == 0x0);
336
346
assert (block->unk5 == 0x0 );
337
- assert (block->unk6 == ~0U );
338
- *blockSize = sizeof (Block_EBIN);
347
+ // assert(block->unk6 == ~0U);
348
+
349
+ // XXX: unk4...?
350
+ *blockSize = sizeof (Block_EBIN) + (block->unk4 ? -4 : 0 );
339
351
}
340
352
break ;
341
353
case COOKIE (" FSHA" ):
@@ -354,7 +366,7 @@ bool ParseSingleBlock(uint8_t* blockBlob, size_t *blockSize)
354
366
assert (block->unk2 == 0x0 );
355
367
assert (block->unk3 == 0x0 );
356
368
assert (block->unk4 == 0x20 );
357
- assert (block->unk5 == 0x0 );
369
+ // assert(block->unk5 == 0x0);
358
370
// XXX:Sometimes different
359
371
// Probably a bitfield
360
372
// assert(block->unk6 == 0x0);
@@ -454,7 +466,8 @@ bool ParseSingleBlock(uint8_t* blockBlob, size_t *blockSize)
454
466
printf (" Block_CCOM\n " );
455
467
printf (" \t unk1 = 0x%08x\n " , block->unk1 );
456
468
457
- assert (block->unk1 == 0x180 );
469
+ // XXX: Probably a size
470
+ // assert(block->unk1 == 0x180);
458
471
*blockSize = sizeof (Block_CCOM);
459
472
}
460
473
break ;
@@ -478,7 +491,27 @@ bool ParseSingleBlock(uint8_t* blockBlob, size_t *blockSize)
478
491
*blockSize = sizeof (Block_KWGS);
479
492
}
480
493
break ;
494
+ case COOKIE (" RLOC" ):
495
+ {
496
+ Block_RLOC* block = reinterpret_cast <Block_RLOC*>(blockBlob);
497
+ printf (" Block_RLOC\n " );
498
+ printf (" \t unk1 = 0x%08x\n " , block->unk1 );
499
+ printf (" \t unk2 = 0x%08x\n " , block->unk2 );
500
+ printf (" \t unk3 = 0x%08x\n " , block->unk3 );
501
+ printf (" \t unk4 = 0x%08x\n " , block->unk4 );
502
+ printf (" \t unk5 = 0x%08x\n " , block->unk5 );
503
+ printf (" \t unk6 = 0x%08x\n " , block->unk6 );
481
504
505
+ assert (block->unk1 == 0x10 );
506
+ assert (block->unk2 == 0x0 );
507
+ assert (block->unk3 == 0x0 );
508
+ assert (block->unk4 == 0x0 );
509
+ assert (block->unk5 == 0x8 );
510
+ // XXX: Sometimes different
511
+ // assert(block->unk6 == 0x0);
512
+ *blockSize = sizeof (Block_RLOC);
513
+ }
514
+ break ;
482
515
483
516
default :
484
517
{
0 commit comments