@@ -37,7 +37,7 @@ def __init__(self, rom : 'ROM', start : int, end : int = None, layer = 0, level
37
37
self .mario_spawn = None
38
38
self .layer = layer
39
39
self .level = level
40
- self .current_area = None
40
+ self .current_area = 0x0
41
41
self .water_boxes = []
42
42
43
43
self .macro_tables = {}
@@ -205,7 +205,7 @@ def process(self, start, end):
205
205
(b1 , b2 , b3 , b4 ) = tuple ([self .rom .read_integer (cursor + 16 + n ) for n in range (4 )])
206
206
b_script = self .rom .read_integer (cursor + 20 , 4 )
207
207
208
- self .objects .append (Object3D ("PLACE_OBJ" , model_id , position , self .level , rotation , b_script , [b1 , b2 , b3 , b4 ], cursor + 2 ))
208
+ self .objects .append (Object3D ("PLACE_OBJ" , self . current_area , model_id , position , self .level , rotation , b_script , [b1 , b2 , b3 , b4 ], cursor + 2 ))
209
209
elif command .identifier == 0x39 :
210
210
if self .rom .rom_type == 'EXTENDED' :
211
211
""" 0x39 PLACE_MACRO_OBJECTS """
@@ -253,7 +253,7 @@ def process(self, start, end):
253
253
spawn_area_id = self .rom .read_integer (cursor + 2 )
254
254
rotation_y = self .rom .read_integer (cursor + 4 , 2 , True )
255
255
position = (self .rom .read_integer (cursor + 6 , 2 , True ), self .rom .read_integer (cursor + 8 , 2 , True ), self .rom .read_integer (cursor + 10 , 2 , True ))
256
- self .objects .append (Object3D ("MARIO_SPAWN" , None , position , self .level , (None , rotation_y , None ), mem_address = cursor + 2 ))
256
+ self .objects .append (Object3D ("MARIO_SPAWN" , spawn_area_id , None , position , self .level , (None , rotation_y , None ), mem_address = cursor + 2 ))
257
257
#print(self.level.name, spawn_area_id, rotation_y, position)
258
258
elif command .identifier == 0x20 :
259
259
""" 0x20 END_AREA """
@@ -375,7 +375,7 @@ def process_macro_objects(self, start, end):
375
375
preset = preset_table [preset_id ]
376
376
position = (self .rom .read_integer (None , 2 , True ), self .rom .read_integer (None , 2 , True ), self .rom .read_integer (None , 2 , True ))
377
377
(bparam1 , bparam2 ) = (self .rom .read_integer (None , 1 ), self .rom .read_integer (None , 1 ))
378
- object3d = Object3D ("MACRO_OBJ" , preset .model_id , position , self .level , (None , rot_y , None ), preset .behaviour_addr , mem_address = cursor , bparams = [bparam1 , bparam2 ])
378
+ object3d = Object3D ("MACRO_OBJ" , self . current_area , preset .model_id , position , self .level , (None , rot_y , None ), preset .behaviour_addr , mem_address = cursor , bparams = [bparam1 , bparam2 ])
379
379
objects_found .append (object3d )
380
380
macro_table ["entries" ].append (dict (
381
381
object3d = object3d ,
@@ -582,6 +582,7 @@ def process_special_objects_level(self, start, end):
582
582
cursor += entry_length
583
583
584
584
triangles .append (indices )
585
+ #print(self.level.name)
585
586
#print(f'{len(triangles)} {hex(cd_type_int)} ({format_binary(cd_type)})')
586
587
self .level_geometry .add_area (self .current_area , vertices , triangles , cd_type_int )
587
588
collision_entry ["triangle_bytes" ] = triangle_bytes
@@ -620,18 +621,18 @@ def process_special_objects_level(self, start, end):
620
621
if length == 8 :
621
622
model_id = preset .model_id
622
623
position = (self .rom .read_integer (None , 2 , True ), self .rom .read_integer (None , 2 , True ), self .rom .read_integer (None , 2 , True ))
623
- entry = Object3D ("SPECIAL_MACRO_OBJ" , model_id , position , self .level , None , preset .behaviour_addr , mem_address = cursor )
624
+ entry = Object3D ("SPECIAL_MACRO_OBJ" , self . current_area , model_id , position , self .level , None , preset .behaviour_addr , mem_address = cursor )
624
625
elif length == 10 :
625
626
model_id = preset .model_id
626
627
position = (self .rom .read_integer (None , 2 , True ), self .rom .read_integer (None , 2 , True ), self .rom .read_integer (None , 2 , True ))
627
628
rotation = (None , self .rom .read_integer (None , 2 , True ), None )
628
- entry = Object3D ("SPECIAL_MACRO_OBJ" , model_id , position , self .level , rotation , preset .behaviour_addr , mem_address = cursor )
629
+ entry = Object3D ("SPECIAL_MACRO_OBJ" , self . current_area , model_id , position , self .level , rotation , preset .behaviour_addr , mem_address = cursor )
629
630
elif length == 12 :
630
631
model_id = preset .model_id
631
632
position = (self .rom .read_integer (None , 2 , True ), self .rom .read_integer (None , 2 , True ), self .rom .read_integer (None , 2 , True ))
632
633
rotation = (None , self .rom .read_integer (None , 2 , True ), None )
633
634
(b1 , b2 ) = (self .rom .read_integer (), self .rom .read_integer ())
634
- entry = Object3D ("SPECIAL_MACRO_OBJ" , model_id , position , self .level , rotation , preset .behaviour_addr , [b1 , b2 ], mem_address = cursor )
635
+ entry = Object3D ("SPECIAL_MACRO_OBJ" , self . current_area , model_id , position , self .level , rotation , preset .behaviour_addr , [b1 , b2 ], mem_address = cursor )
635
636
else :
636
637
raise Exception ("Invalid Preset Length" )
637
638
@@ -672,12 +673,12 @@ def process_special_objects_level(self, start, end):
672
673
elif water_box_id == 0x32 or water_box_id == 0xF0 :
673
674
water_box_type = "TOXIC"
674
675
675
- water_box = (
676
- water_box_id ,
677
- water_box_start_x , water_box_start_z ,
678
- water_box_end_x , water_box_end_z ,
679
- water_box_y ,
680
- water_box_type
676
+ water_box = dict (
677
+ box_id = water_box_id ,
678
+ start = ( water_box_start_x , water_box_y , water_box_start_z ) ,
679
+ end = ( water_box_end_x , - 8192.0 , water_box_end_z ) ,
680
+ type = water_box_type ,
681
+ area_id = self . current_area
681
682
)
682
683
self .water_boxes .append (water_box )
683
684
special_macro_table ["waterboxes" ].append (dict (
0 commit comments