@@ -161,13 +161,12 @@ std_read_file(
161
161
162
162
for (;;) {
163
163
quad_type = (unsigned int * )map ;
164
- if (* quad_type == 0x0004FFFF ) {
164
+ if (* quad_type == 0x4FFFF ) {
165
165
break ;
166
166
}
167
167
168
168
list_append_new (& entry -> quads , (std_object_t * )map );
169
-
170
- map = map + sizeof (std_object_t );
169
+ map = map + ((std_object_t * )map )-> size ;
171
170
}
172
171
}
173
172
@@ -262,6 +261,10 @@ std_dump(
262
261
fprintf (stream , " Padding: %i\n" , object -> _padding );
263
262
fprintf (stream , " Width: %g\n" , object -> width );
264
263
fprintf (stream , " Height: %g\n" , object -> height );
264
+ if (object -> size == 36 ) {
265
+ fprintf (stream , " Unknown_ex1: %g\n" , object -> unknown_ex1 );
266
+ fprintf (stream , " Unknown_ex2: %g\n" , object -> unknown_ex2 );
267
+ }
265
268
}
266
269
fprintf (stream , "\n" );
267
270
@@ -519,6 +522,7 @@ std_create(
519
522
} else if (util_strcmp_ref (line , stringref ("QUAD:" )) == 0 ) {
520
523
std -> header -> nb_faces ++ ;
521
524
quad = malloc (sizeof (* quad ));
525
+ quad -> size = 0x1c ;
522
526
list_append_new (& entry -> quads , quad );
523
527
set_object = 0 ;
524
528
} else if (util_strcmp_ref (line , stringref ("FACE: " )) == 0 ) {
@@ -613,25 +617,37 @@ std_create(
613
617
sscanf (line , "Padding: %hu" , & quad -> _padding );
614
618
sscanf (line , "Width: %g" , & quad -> width );
615
619
sscanf (line , "Height: %g" , & quad -> height );
620
+ if (1 == sscanf (line , "Unknown_ex1: %g" , & quad -> unknown_ex1 )) {
621
+ quad -> size = 36 ;
622
+ }
623
+ if (1 == sscanf (line , "Unknown_ex2: %g" , & quad -> unknown_ex2 )) {
624
+ quad -> size = 36 ;
625
+ }
616
626
}
617
627
}
618
628
sscanf (line , "%u" , & instr_time );
619
629
}
620
630
}
621
631
fclose (f );
622
632
633
+ size_t total_entry_size = 0 ;
634
+ list_for_each (& std -> entries , entry ) {
635
+ list_for_each (& entry -> quads , quad ) {
636
+ total_entry_size += quad -> size ;
637
+ }
638
+ }
623
639
if (option_version == 0 )
624
640
std -> header_06 -> faces_offset = (sizeof (std_header_06_t ) +
625
641
sizeof (int32_t ) * std -> header -> nb_objects +
626
642
sizeof (std_entry_header_t ) * std -> header -> nb_objects +
627
643
sizeof (int32_t ) * std -> header -> nb_objects +
628
- sizeof ( std_object_t ) * std -> header -> nb_faces );
644
+ total_entry_size );
629
645
else
630
646
std -> header_10 -> faces_offset = (sizeof (std_header_10_t ) +
631
647
sizeof (int32_t ) * std -> header -> nb_objects +
632
648
sizeof (std_entry_header_t ) * std -> header -> nb_objects +
633
649
sizeof (int32_t ) * std -> header -> nb_objects +
634
- sizeof ( std_object_t ) * std -> header -> nb_faces );
650
+ total_entry_size );
635
651
636
652
int inst_test = 0 ;
637
653
list_for_each (& std -> instances , instance ) {
@@ -694,9 +710,8 @@ std_write(
694
710
entry_offset += sizeof (std_entry_header_t );
695
711
696
712
list_for_each (& entry -> quads , quad ) {
697
- quad -> size = 0x1c ;
698
- file_write (stream , quad , sizeof (std_object_t ));
699
- entry_offset += sizeof (std_object_t );
713
+ file_write (stream , quad , quad -> size );
714
+ entry_offset += quad -> size ;
700
715
}
701
716
702
717
endcode = 0x0004FFFF ;
0 commit comments