diff --git a/config/GMPE01_00/rels/m425Dll/symbols.txt b/config/GMPE01_00/rels/m425Dll/symbols.txt index cae3368f..627df9e1 100644 --- a/config/GMPE01_00/rels/m425Dll/symbols.txt +++ b/config/GMPE01_00/rels/m425Dll/symbols.txt @@ -65,211 +65,212 @@ fn_1_11A74 = .text:0x00011A74; // type:function size:0x46C fn_1_11EE0 = .text:0x00011EE0; // type:function size:0x7B4 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x10 data:4byte -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 data:float -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 data:float -lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 data:float -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0xC0 -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 data:double -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 data:double -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 data:double -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 data:double -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 data:double -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 data:double -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x8 data:double -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x8 data:double -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 data:double -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x8 data:double -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x8 data:double -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x8 data:double -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x8 data:double -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x8 data:double -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 data:double -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x8 data:double -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8 data:double -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float -lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 data:float -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x8 data:double -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 data:float -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x8 data:double -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float -lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 data:float -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 data:float -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 data:double -lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 data:float -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 data:double -lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x8 data:double -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 data:float -lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x8 data:double -lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x4 data:float -lbl_1_rodata_24C = .rodata:0x0000024C; // type:object size:0x4 data:float -lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 data:float -lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 data:float -lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 data:float -lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 data:float -lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 data:float -lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 data:float -lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x8 data:double -lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 data:float -lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x8 data:double -lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x8 data:double -lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 data:float -lbl_1_rodata_28C = .rodata:0x0000028C; // type:object size:0x4 data:float -lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 data:float -lbl_1_rodata_294 = .rodata:0x00000294; // type:object size:0x4 data:float -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x4 data:float -lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x10 data:4byte -lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x10 data:4byte -lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 data:float -lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 data:float -lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x8 data:double -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float -lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 data:float -lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 data:float -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x8 data:double -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 data:double -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x8 data:double -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 data:double -lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x8 data:double -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x8 data:double -lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x4 data:float -lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x8 data:double -lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 data:float -lbl_1_rodata_324 = .rodata:0x00000324; // type:object size:0x4 data:float -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 data:double -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x8 data:double -lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x8 data:double -lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 data:float -lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x8 data:double -lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 data:float -lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 data:float -lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 data:float -lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x8 data:double -lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x20 data:4byte -lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 data:float -lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 data:float -lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 data:float -lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 data:float -lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 data:float -lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 data:float -lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x8 data:float -lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 data:float -lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 data:float -lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 data:float -lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 data:float -lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 data:float -lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 data:float -lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 data:float -lbl_1_rodata_3CC = .rodata:0x000003CC; // type:object size:0x4 data:float -lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x4 data:float -lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x8 data:double -lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x8 data:double -lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 data:float -lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 data:float -lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 data:float -lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 data:float -lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 data:float -lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x8 data:double -lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x8 data:double -lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x4 data:float -lbl_1_rodata_414 = .rodata:0x00000414; // type:object size:0x4 data:float -lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 data:float -lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 data:float -lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 data:float -lbl_1_rodata_424 = .rodata:0x00000424; // type:object size:0x4 data:float -lbl_1_rodata_428 = .rodata:0x00000428; // type:object size:0x8 data:double -lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x4 data:float -lbl_1_rodata_434 = .rodata:0x00000434; // type:object size:0x4 data:float -lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 data:float -lbl_1_rodata_43C = .rodata:0x0000043C; // type:object size:0x4 data:float -lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x8 data:double -lbl_1_rodata_448 = .rodata:0x00000448; // type:object size:0x8 data:double -lbl_1_rodata_450 = .rodata:0x00000450; // type:object size:0x8 data:double -lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x4 data:float -lbl_1_rodata_45C = .rodata:0x0000045C; // type:object size:0x4 data:float -lbl_1_rodata_460 = .rodata:0x00000460; // type:object size:0x8 data:double -lbl_1_rodata_468 = .rodata:0x00000468; // type:object size:0x8 data:double -lbl_1_rodata_470 = .rodata:0x00000470; // type:object size:0x4 data:float -lbl_1_rodata_478 = .rodata:0x00000478; // type:object size:0x8 data:double -lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x4 data:float -lbl_1_rodata_484 = .rodata:0x00000484; // type:object size:0x4 data:float -lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 data:float -lbl_1_rodata_48C = .rodata:0x0000048C; // type:object size:0x4 data:float -lbl_1_rodata_490 = .rodata:0x00000490; // type:object size:0x4 data:float -lbl_1_rodata_494 = .rodata:0x00000494; // type:object size:0x4 data:float -lbl_1_rodata_498 = .rodata:0x00000498; // type:object size:0x4 data:float -lbl_1_rodata_49C = .rodata:0x0000049C; // type:object size:0x4 data:float -lbl_1_rodata_4A0 = .rodata:0x000004A0; // type:object size:0x4 data:float -lbl_1_rodata_4A4 = .rodata:0x000004A4; // type:object size:0x4 data:float -lbl_1_rodata_4A8 = .rodata:0x000004A8; // type:object size:0x4 data:float -lbl_1_rodata_4AC = .rodata:0x000004AC; // type:object size:0x4 data:float -lbl_1_rodata_4B0 = .rodata:0x000004B0; // type:object size:0x4 data:float -lbl_1_rodata_4B4 = .rodata:0x000004B4; // type:object size:0x4 data:float -lbl_1_rodata_4B8 = .rodata:0x000004B8; // type:object size:0x4 data:float -lbl_1_rodata_4BC = .rodata:0x000004BC; // type:object size:0x4 data:float -lbl_1_rodata_4C0 = .rodata:0x000004C0; // type:object size:0x4 data:float -lbl_1_rodata_4C8 = .rodata:0x000004C8; // type:object size:0x8 data:double -lbl_1_rodata_4D0 = .rodata:0x000004D0; // type:object size:0x4 data:float -lbl_1_rodata_4D4 = .rodata:0x000004D4; // type:object size:0x4 data:float -lbl_1_rodata_4D8 = .rodata:0x000004D8; // type:object size:0x4 data:float -lbl_1_rodata_4DC = .rodata:0x000004DC; // type:object size:0x4 data:float -lbl_1_rodata_4E0 = .rodata:0x000004E0; // type:object size:0x4 data:float -lbl_1_rodata_4E4 = .rodata:0x000004E4; // type:object size:0x4 data:float -lbl_1_rodata_4E8 = .rodata:0x000004E8; // type:object size:0x8 data:double -lbl_1_rodata_4F0 = .rodata:0x000004F0; // type:object size:0x4 data:float -lbl_1_rodata_4F4 = .rodata:0x000004F4; // type:object size:0x4 data:float -lbl_1_rodata_4F8 = .rodata:0x000004F8; // type:object size:0x4 data:float -lbl_1_rodata_4FC = .rodata:0x000004FC; // type:object size:0x4 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 scope:local data:float +lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 scope:local data:float +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0xC0 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 scope:local data:double +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 scope:local data:double +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 scope:local data:double +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 scope:local data:double +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 scope:local data:double +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:double +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x8 scope:local data:double +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x8 scope:local data:double +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x8 scope:local data:double +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 scope:local data:float +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 scope:local data:double +lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data:double +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x8 scope:local data:double +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 scope:local data:float +lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x8 scope:local data:double +lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24C = .rodata:0x0000024C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 scope:local data:float +lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 scope:local data:float +lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 scope:local data:float +lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 scope:local data:float +lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 scope:local data:float +lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x8 scope:local data:double +lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 scope:local data:float +lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x8 scope:local data:double +lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x8 scope:local data:double +lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28C = .rodata:0x0000028C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 scope:local data:float +lbl_1_rodata_294 = .rodata:0x00000294; // type:object size:0x4 scope:local data:float +lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x4 scope:local data:float +lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x10 scope:local data:float +lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x10 scope:local data:float +lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x8 scope:local data:double +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x8 scope:local data:double +lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x4 scope:local data:float +lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x8 scope:local data:double +lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 scope:local data:float +lbl_1_rodata_324 = .rodata:0x00000324; // type:object size:0x4 scope:local data:float +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 scope:local data:double +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x8 scope:local data:double +lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x8 scope:local data:double +lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:float +lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x8 scope:local data:double +lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 scope:local data:float +lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 scope:local data:float +lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x8 scope:local data:double +lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x20 scope:local data:float +lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 scope:local data:float +lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 scope:local data:float +lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 scope:local data:float +lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x8 scope:local data:float +lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3CC = .rodata:0x000003CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x8 scope:local data:double +lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x8 scope:local data:double +lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x4 scope:local data:float +lbl_1_rodata_414 = .rodata:0x00000414; // type:object size:0x4 scope:local data:float +lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 scope:local data:float +lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 scope:local data:float +lbl_1_rodata_424 = .rodata:0x00000424; // type:object size:0x4 scope:local data:float +lbl_1_rodata_428 = .rodata:0x00000428; // type:object size:0x8 scope:local data:double +lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x4 scope:local data:float +lbl_1_rodata_434 = .rodata:0x00000434; // type:object size:0x4 scope:local data:float +lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 scope:local data:float +lbl_1_rodata_43C = .rodata:0x0000043C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x8 scope:local data:double +lbl_1_rodata_448 = .rodata:0x00000448; // type:object size:0x8 scope:local data:double +lbl_1_rodata_450 = .rodata:0x00000450; // type:object size:0x8 scope:local data:double +lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x4 scope:local data:float +lbl_1_rodata_45C = .rodata:0x0000045C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_460 = .rodata:0x00000460; // type:object size:0x8 scope:local data:double +lbl_1_rodata_468 = .rodata:0x00000468; // type:object size:0x8 scope:local data:double +lbl_1_rodata_470 = .rodata:0x00000470; // type:object size:0x4 scope:local data:float +lbl_1_rodata_478 = .rodata:0x00000478; // type:object size:0x8 scope:local data:double +lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x4 scope:local data:float +lbl_1_rodata_484 = .rodata:0x00000484; // type:object size:0x4 scope:local data:float +lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48C = .rodata:0x0000048C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_490 = .rodata:0x00000490; // type:object size:0x4 scope:local data:float +lbl_1_rodata_494 = .rodata:0x00000494; // type:object size:0x4 scope:local data:float +lbl_1_rodata_498 = .rodata:0x00000498; // type:object size:0x4 scope:local data:float +lbl_1_rodata_49C = .rodata:0x0000049C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4A0 = .rodata:0x000004A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4A4 = .rodata:0x000004A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4A8 = .rodata:0x000004A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4AC = .rodata:0x000004AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B0 = .rodata:0x000004B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B4 = .rodata:0x000004B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B8 = .rodata:0x000004B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4BC = .rodata:0x000004BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C0 = .rodata:0x000004C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C8 = .rodata:0x000004C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_4D0 = .rodata:0x000004D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4D4 = .rodata:0x000004D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4D8 = .rodata:0x000004D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4DC = .rodata:0x000004DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4E0 = .rodata:0x000004E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4E4 = .rodata:0x000004E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4E8 = .rodata:0x000004E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_4F0 = .rodata:0x000004F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4F4 = .rodata:0x000004F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4F8 = .rodata:0x000004F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4FC = .rodata:0x000004FC; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x2 data:2byte lbl_1_data_4 = .data:0x00000004; // type:object size:0xC lbl_1_data_10 = .data:0x00000010; // type:object size:0xC -lbl_1_data_1C = .data:0x0000001C; // type:object size:0x24 +lbl_1_data_1C = .data:0x0000001C; // type:object size:0x24 data:float lbl_1_data_40 = .data:0x00000040; // type:object size:0x4 -lbl_1_data_44 = .data:0x00000044; // type:object size:0x23 data:string +lbl_1_data_44 = .data:0x00000044; // type:object size:0x23 scope:local data:string lbl_1_data_68 = .data:0x00000068; // type:object size:0x4 data:4byte lbl_1_data_6C = .data:0x0000006C; // type:object size:0x28 lbl_1_data_94 = .data:0x00000094; // type:object size:0x30 jumptable_1_data_C4 = .data:0x000000C4; // type:object size:0x28 scope:local jumptable_1_data_EC = .data:0x000000EC; // type:object size:0x28 scope:local lbl_1_data_114 = .data:0x00000114; // type:object size:0x4 data:4byte -lbl_1_data_118 = .data:0x00000118; // type:object size:0x18 -lbl_1_data_130 = .data:0x00000130; // type:object size:0x1F data:string +lbl_1_data_118 = .data:0x00000118; // type:object size:0x18 data:float +lbl_1_data_130 = .data:0x00000130; // type:object size:0x1F scope:local data:string lbl_1_data_150 = .data:0x00000150; // type:object size:0x18 lbl_1_data_168 = .data:0x00000168; // type:object size:0x4 data:byte -lbl_1_data_16C = .data:0x0000016C; // type:object size:0x30 -lbl_1_data_19C = .data:0x0000019C; // type:object size:0x30 +lbl_1_data_16C = .data:0x0000016C; // type:object size:0x30 data:float +lbl_1_data_19C = .data:0x0000019C; // type:object size:0x30 data:float lbl_1_data_1CC = .data:0x000001CC; // type:object size:0x20 +lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:float lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:float lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 data:float @@ -287,7 +288,7 @@ lbl_1_bss_668 = .bss:0x00000668; // type:object size:0x4 data:4byte lbl_1_bss_670 = .bss:0x00000670; // type:object size:0xC data:float lbl_1_bss_67C = .bss:0x0000067C; // type:object size:0xC data:float lbl_1_bss_688 = .bss:0x00000688; // type:object size:0x40 -lbl_1_bss_6C8 = .bss:0x000006C8; // type:object size:0x1 data:byte +lbl_1_bss_6C8 = .bss:0x000006C8; // type:object size:0x4 data:byte lbl_1_bss_6CC = .bss:0x000006CC; // type:object size:0x4 data:4byte lbl_1_bss_6D0 = .bss:0x000006D0; // type:object size:0x1 data:byte lbl_1_bss_6D4 = .bss:0x000006D4; // type:object size:0x4 data:4byte diff --git a/include/REL/m425Dll.h b/include/REL/m425Dll.h new file mode 100644 index 00000000..413e47c3 --- /dev/null +++ b/include/REL/m425Dll.h @@ -0,0 +1,15 @@ +#ifndef M425DLL_H +#define M425DLL_H + +#include "game/object.h" + +omObjData *fn_1_6A0C(Process *process, s32 arg1); +void fn_1_6C08(void); +void fn_1_6CD0(s32 arg0, Vec *arg1); +s32 fn_1_109EC(s32 arg0, s32 arg1, Vec *arg2, Vec *arg3, Vec *arg4, s32 arg5); +float fn_1_10CF4(s32 arg0); +void fn_1_10DB4(s32 arg0); +void fn_1_10E3C(s32 arg0); +float fn_1_10EF8(s32 arg0, s32 arg1, float arg8, float arg9); + +#endif diff --git a/src/REL/m425Dll/main.c b/src/REL/m425Dll/main.c new file mode 100644 index 00000000..ae214b28 --- /dev/null +++ b/src/REL/m425Dll/main.c @@ -0,0 +1,1685 @@ +#define HUSPR_USE_OLD_DEFS +#include "dolphin/gx/GXEnum.h" +#include "dolphin/gx/GXStruct.h" +#include "dolphin/gx/GXVert.h" +#include "ext_math.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/esprite.h" +#include "game/flag.h" +#include "game/frand.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/printfunc.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/wipe.h" +#include "math.h" +#include "string.h" + +#include "REL/m425Dll.h" + +extern u8 texMtxTbl[]; // TODO maybe put in hsfdraw.h? + +typedef struct M425DllWork { + u8 unk_00; + u8 unk_01; + u8 unk_02; + u8 unk_03; + u8 unk_04; + u8 unk_05; + u8 unk_06; + char unk07[2]; + u8 unk_09; + u8 unk_0A; + u8 unk_0B; + u8 unk_0C; + char unk0D; + s16 unk_0E; + float unk_10; + float unk_14; + Vec unk_18; + Vec unk_24; + Vec unk_30; + float unk_3C[8]; + s32 unk_5C; + float unk_60; + s32 unk_64; + s32 unk_68; +} M425DllWork; /* size = 0x6C */ + +typedef struct M425DllWork2 { + char unk00[4]; + Vec unk_04; + Vec unk_10; + Vec unk_1C; + Vec unk_28; + float unk_34; + float unk_38; + float unk_3C; + float unk_40; + float unk_44; + float unk_48; + char unk4C[0x18]; + float unk_64; + float unk_68; + float unk_6C; + char unk70[4]; + s16 unk_74; + s16 unk_76; +} M425DllWork2; /* size = 0x78 */ + +typedef struct M425DllUnkStruct { + s16 unk_00; + s16 unk_02; + s16 unk_04; + char unk06[0x42]; +} M425DllUnkStruct; /* size = 0x48 */ + +typedef struct M425DllUnkStruct2 { + AnimData *unk_00; + s16 unk_04; + Vec unk_08; + Mtx unk_14; + Vec2f *unk_44; + s16 unk_48; +} M425DllUnkStruct2; /* size = 0x4C */ + +typedef struct M425DllUnkStruct3 { + char unk00[0xC]; + s16 unk_0C; + void *unk_10; + Vec *unk_14; + GXColor *unk_18; + Vec *unk_1C; + GXColor unk_20; + GXColor unk_24; + s16 unk_28; + s16 unk_2A; + M425DllUnkStruct2 *unk_2C; +} M425DllUnkStruct3; /* size = 0x30 */ + +typedef struct M425DllUnkBss10Struct { + /* 0x00 */ u8 unk_00; + /* 0x01 */ char pad_01[1]; + /* 0x02 */ u8 unk_02; + /* 0x03 */ u8 unk_03; + /* 0x04 */ float unk_04; + /* 0x08 */ Vec unk_08; + /* 0x14 */ float unk_14; + /* 0x18 */ float unk_18; + /* 0x1C */ float unk_1C; + /* 0x20 */ float unk_20; + /* 0x24 */ float unk_24; + /* 0x28 */ float unk_28; + /* 0x2C */ float unk_2C; + /* 0x30 */ float unk_30; + /* 0x34 */ float unk_34; + /* 0x38 */ float unk_38; + /* 0x3C */ float unk_3C; + /* 0x40 */ float unk_40; + union { + /* 0x44 */ s16 unk_44[0x20]; + struct { + float unk_44f; + float unk_48; + char unk4C[4]; + float unk_50; + char unk54[0x30]; + }; + }; +} M425DllUnkBss10Struct; /* size = 0x84 */ + +void fn_1_1B40(omObjData *object); +void fn_1_2784(omObjData *object); +void fn_1_2870(omObjData *object); +void fn_1_2A94(s16 arg0, Vec *arg1, Vec *arg2, float arg8); +void fn_1_2B2C(omObjData *object); +void fn_1_2E78(omObjData *object); +void fn_1_33E0(omObjData *object); +void fn_1_3764(omObjData *object); +s16 fn_1_3ED0(s32 arg0, s16 arg1, ParticleHook arg2); +void fn_1_3F80(ModelData *model, ParticleData *particle, Mtx matrix); +void fn_1_460(omObjData *object); +void fn_1_480(omObjData *object); +void fn_1_4A88(ModelData *model, ParticleData *particle, Mtx matrix); +void fn_1_5044(s16 arg0); +void fn_1_573C(Vec2f **arg0, s16 arg1, Vec2f *arg2); +void fn_1_57D4(ModelData *model, Mtx matrix); +void fn_1_5C20(ModelData *model, Mtx matrix); +s32 fn_1_64D4(void); +void fn_1_8E4(omObjData *object); +void fn_1_F48(omObjData *object); +void fn_1_FA8(omObjData *object); + +s16 lbl_1_data_0 = -1; +Vec lbl_1_data_4 = { -200.0f, 2500.0f, 1200.0f }; +Vec lbl_1_data_10 = { 0.2f, -0.8f, -0.2f }; +float lbl_1_data_1C[9] = { 0.0f, 2500.0f, 1500.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f }; +GXColor lbl_1_data_40 = { 0xFF, 0xFF, 0xFF, 0xFF }; + +omObjData *lbl_1_bss_668; +omObjData *lbl_1_bss_664; +// M425DllWork2 +omObjData *lbl_1_bss_660; +omObjData *lbl_1_bss_65C; +// M425DllWork +omObjData *lbl_1_bss_64C[4]; +u16 lbl_1_bss_648; +s16 lbl_1_bss_646; +s16 lbl_1_bss_644; +s16 lbl_1_bss_642; +s16 lbl_1_bss_640; +M425DllUnkBss10Struct lbl_1_bss_10[0xC]; +float lbl_1_bss_C; +float lbl_1_bss_8; +float lbl_1_bss_4; +char lbl_1_bss_0[4]; + +void ObjectSetup(void) +{ + s32 var_r31; + Process *process; + omObjData *object; + s32 var_r28; + LightData *var_r27; + CameraData *var_r26; + s32 var_r25; + s32 var_r24; + s32 sp8[4] = { 0, 0, 0, 0 }; + + OSReport("******* M425ObjectSetup *********\n"); + Hu3DLighInit(); + var_r24 = Hu3DGLightCreateV(&lbl_1_data_4, &lbl_1_data_10, &lbl_1_data_40); + Hu3DGLightInfinitytSet(var_r24); + var_r27 = Hu3DGlobalLight; + var_r27->unk_00 |= 0x8000; + process = omInitObjMan(0x32, 0x2000); + var_r25 = frand() & 0x1F; + for (var_r31 = 0; var_r31 < var_r25; var_r31++) { + fn_1_64D4(); + } + CRot.x = 8.0f; + CRot.y = 0.0f; + CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 430.0f; + Center.z = -400.0f; + CZoom = 1650.0f; + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 45.0f, 100.0f, 50000.0f, 1.2f); + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + lbl_1_bss_664 = omAddObjEx(process, 0x7FDA, 0, 0, -1, omOutView); + var_r26 = Hu3DCamera; + var_r26->fov = -1.0f; + lbl_1_bss_668 = omAddObjEx(process, 0x10, 8, 0, -1, fn_1_460); + lbl_1_bss_65C = omAddObjEx(process, 0x20, 0x10, 0, -1, fn_1_FA8); + lbl_1_bss_660 = omAddObjEx(process, 0x50, 0x10, 0, -1, fn_1_2784); + fn_1_6A0C(process, 0x40); + omMakeGroupEx(process, 0, 4); + omGetGroupMemberListEx(process, 0); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + object = omAddObjEx(process, 0x30, 2, 0xA, 0, fn_1_2B2C); + lbl_1_bss_64C[var_r31] = object; + object->work[0] = var_r31; + object->work[1] = GWPlayerCfg[var_r31].group; + for (var_r28 = object->work[1] * 2; var_r28 < 4; var_r28++) { + if (sp8[var_r28] == 0) { + object->work[1] = var_r28; + sp8[var_r28]++; + break; + } + } + } + omGameSysInit(process); + HuAudSndGrpSet(0x32); +} + +void fn_1_460(omObjData *object) +{ + lbl_1_bss_648 = 0; + object->func = fn_1_480; +} + +void fn_1_480(omObjData *object) +{ + Vec sp14; + Vec sp8; + float var_f31; + CameraData *var_r30; + + switch (lbl_1_bss_648) { + case 0: + sp14.x = -250.0f; + sp14.y = 225.0f; + sp14.z = 200.0f; + sp8.x = 22.0f; + sp8.y = 10.0f; + sp8.z = 0.0f; + var_f31 = 500.0f; + fn_1_2A94(1, &sp14, &sp8, var_f31); + lbl_1_bss_C = -4.866667f; + lbl_1_bss_8 = 600.0f; + sp14.x = -300.0f; + sp14.y = lbl_1_bss_8; + sp14.z = 0.0f; + fn_1_6CD0(0, &sp14); + sp14.x = 300.0f; + fn_1_6CD0(1, &sp14); + var_r30 = Hu3DCamera; + var_r30->fov = 45.0f; + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + lbl_1_bss_648++; + break; + case 1: + lbl_1_bss_8 += lbl_1_bss_C; + lbl_1_bss_C += -2.4333334f; + if (lbl_1_bss_8 < 0.0f) { + lbl_1_bss_8 = 0.0f; + lbl_1_bss_648++; + lbl_1_bss_640 = 0x3C; + fn_1_10DB4(0); + fn_1_10DB4(1); + fn_1_10E3C(0); + } + sp14.x = -300.0f; + sp14.y = lbl_1_bss_8; + sp14.z = 0.0f; + fn_1_6CD0(0, &sp14); + sp14.x = 300.0f; + fn_1_6CD0(1, &sp14); + break; + case 2: + if (--lbl_1_bss_640 == 0) { + sp14.x = 0.0f; + sp14.y = 430.0f; + sp14.z = -400.0f; + sp8.x = 8.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + var_f31 = 1650.0f; + lbl_1_bss_640 = 0x48; + fn_1_2A94(0x3C, &sp14, &sp8, var_f31); + lbl_1_bss_648++; + } + break; + case 3: + if (--lbl_1_bss_640 == 0) { + lbl_1_bss_648 = 4; + object->func = fn_1_8E4; + lbl_1_bss_646 = lbl_1_bss_644 = -1; + } + break; + } + if ((omSysExitReq != 0) && (WipeStatGet() == 0)) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + object->func = fn_1_F48; + } +} + +s32 lbl_1_data_68 = -1; +s32 lbl_1_data_6C[0xA] = { 0, 2, 3, 5, 6, 8, 0xA, 9, 0x17, 0x18 }; +Vec lbl_1_data_94[4] = { + { -350.0f, 800.0f, 100.0f }, + { -200.0f, 1000.0f, 0.0f }, + { 200.0f, 1200.0f, 0.0f }, + { 350.0f, 1400.0f, 100.0f }, +}; + +void fn_1_8E4(omObjData *object) +{ + s16 sp8[2]; + float var_f31; + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + s16 var_r26; + s16 var_r25; + + switch (lbl_1_bss_648) { + case 4: + if (lbl_1_bss_644 == -1) { + lbl_1_bss_642 = 0x708; + lbl_1_bss_644 = MGSeqCreate(3, 0); + MGSeqPosSet(lbl_1_bss_644, 320.0f, 240.0f); + } + else { + if (MGSeqStatGet(lbl_1_bss_644) == 0) { + lbl_1_bss_644 = -1; + lbl_1_bss_648++; + lbl_1_bss_646 = MGSeqCreate(1, lbl_1_bss_642 / 60, -1, -1); + } + } + if ((lbl_1_data_68 == -1) && ((MGSeqStatGet(lbl_1_bss_644) & 0x10) != 0)) { + lbl_1_data_68 = HuAudSeqPlay(0x48); + } + break; + case 5: + var_r30 = 0; + lbl_1_bss_642--; + var_r28 = (lbl_1_bss_642 + 0x3B) / 60; + if (var_r28 < 0) { + var_r28 = 0; + } + MGSeqParamSet(lbl_1_bss_646, 1, var_r28); + if (lbl_1_bss_642 < -1) { + var_r30++; + if ((fn_1_10CF4(0) == 1000.0f) && (fn_1_10CF4(1) == 1000.0f)) { + lbl_1_data_0 = -1; + } + else { + var_f31 = fn_1_10CF4(1); + if (fn_1_10CF4(0) <= var_f31) { + lbl_1_data_0 = 0; + } + else { + lbl_1_data_0 = 1; + } + } + } + for (var_r31 = 0; var_r31 < 2; var_r31++) { + if (!(fn_1_10CF4(var_r31) > 0.0f)) { + lbl_1_data_0 = var_r31; + var_r30++; + } + } + if (var_r30 != 0) { + lbl_1_bss_648++; + } + break; + case 6: + if (lbl_1_bss_644 == -1) { + lbl_1_bss_644 = MGSeqCreate(3, 1); + MGSeqPosSet(lbl_1_bss_644, 320.0f, 240.0f); + MGSeqParamSet(lbl_1_bss_646, 2, -1); + HuAudSeqFadeOut(lbl_1_data_68, 0x64); + } + else if (MGSeqStatGet(lbl_1_bss_644) == 0) { + lbl_1_bss_644 = -1; + lbl_1_bss_640 = 1; + lbl_1_bss_648++; + } + break; + case 7: + if (--lbl_1_bss_640 <= 0) { + lbl_1_bss_644 = -1; + lbl_1_bss_648++; + } + break; + case 8: + if (lbl_1_data_0 != -1) { + for (var_r31 = 0, var_r29 = 0; var_r31 < 4; var_r31++) { + if (lbl_1_data_0 == OM_GET_DATA_PTR(lbl_1_bss_64C[var_r31], M425DllWork)->unk_02) { + sp8[var_r29] = OM_GET_DATA_PTR(lbl_1_bss_64C[var_r31], M425DllWork)->unk_01; + var_r29++; + GWPlayerCoinWinAdd(var_r31, 10); + } + } + lbl_1_bss_644 = MGSeqCreate(5, 3, sp8[0], sp8[1], -1, -1); + HuAudSStreamPlay(1); + } + else { + lbl_1_bss_644 = MGSeqCreate(3, 2); + HuAudSStreamPlay(4); + } + lbl_1_bss_640 = 0xD2; + lbl_1_bss_648++; + break; + case 9: + if (--lbl_1_bss_640 <= 0) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + object->func = fn_1_F48; + } + break; + } + if ((omSysExitReq != 0) && (WipeStatGet() == 0)) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + object->func = fn_1_F48; + } +} + +void fn_1_F48(omObjData *object) +{ + if (WipeStatGet() == 0) { + CharModelKill(-1); + MGSeqKill(lbl_1_bss_646); + MGSeqKillAll(); + fn_1_6C08(); + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + } +} + +void fn_1_FA8(omObjData *object) +{ + M425DllUnkBss10Struct *var_r31; + s32 var_ctr; + void *var_r4; + s32 temp_r3; + s32 var_r30; + s16 *var_r28; + s32 var_r27; + s32 var_r26; + Vec sp8[] = { + { 475.0f, 800.0f, -1400.0f }, + { -300.0f, 900.0f, -1400.0f }, + { 300.0f, 875.0f, -1450.0f }, + { -575.0f, 850.0f, -1550.0f }, + { 350.0f, 750.0f, -1500.0f }, + { -450.0f, 775.0f, -1550.0f }, + { 325.0f, 725.0f, -1450.0f }, + { -525.0f, 725.0f, -1500.0f }, + { 575.0f, 850.0f, -1550.0f }, + { -350.0f, 750.0f, -1500.0f }, + { 450.0f, 775.0f, -1550.0f }, + { -325.0f, 725.0f, -1450.0f }, + { 525.0f, 725.0f, -1500.0f }, + { -475.0f, 800.0f, -1400.0f }, + { 300.0f, 900.0f, -1400.0f }, + { -300.0f, 875.0f, -1450.0f }, + }; + + var_r30 = Hu3DModelCreateFile(0x380000); + object->model[0] = var_r30; + var_r30 = Hu3DModelCreateFile(0x380001); + object->model[1] = var_r30; + Hu3DModelAttrSet(var_r30, HU3D_MOTATTR_LOOP); + var_r30 = Hu3DHookFuncCreate(fn_1_57D4); + object->model[2] = var_r30; + fn_1_5044(var_r30); + var_r30 = fn_1_3ED0(0x1E0020, 0xC8, fn_1_4A88); + object->model[3] = var_r30; + Hu3DParticleBlendModeSet(var_r30, 1); + var_r30 = fn_1_3ED0(0x380005, 1, fn_1_3F80); + object->model[5] = var_r30; + Hu3DParticleBlendModeSet(var_r30, 1); + Hu3DModelLayerSet(var_r30, 6); + var_r28 = ((ParticleData *)Hu3DData[var_r30].unk_120)->unk_1C; + var_r28[1] = 0; + var_r30 = fn_1_3ED0(0x380008, 0xA, fn_1_3F80); + object->model[6] = var_r30; + Hu3DParticleBlendModeSet(var_r30, 1); + Hu3DModelLayerSet(var_r30, 6); + var_r28 = ((ParticleData *)Hu3DData[var_r30].unk_120)->unk_1C; + var_r28[1] = 1; + var_r30 = fn_1_3ED0(0x380007, 4, fn_1_3F80); + object->model[7] = var_r30; + Hu3DParticleBlendModeSet(var_r30, 1); + Hu3DModelLayerSet(var_r30, 6); + var_r28 = ((ParticleData *)Hu3DData[var_r30].unk_120)->unk_1C; + var_r28[1] = 2; + var_r30 = fn_1_3ED0(0x380006, 6, fn_1_3F80); + object->model[8] = var_r30; + Hu3DParticleBlendModeSet(var_r30, 1); + Hu3DModelLayerSet(var_r30, 6); + var_r28 = ((ParticleData *)Hu3DData[var_r30].unk_120)->unk_1C; + var_r28[1] = 3; + for (var_r27 = 0; var_r27 < 0xC; var_r27++) { + var_r31 = &lbl_1_bss_10[var_r27]; + var_r30 = Hu3DModelCreateFile(0x380002); + var_r31->unk_00 = var_r30; + var_r31->unk_08.x = sp8[var_r27].x; + var_r31->unk_08.y = sp8[var_r27].y; + var_r31->unk_08.z = sp8[var_r27].z; + Hu3DModelPosSet(var_r30, var_r31->unk_08.x, var_r31->unk_08.y, var_r31->unk_08.z); + Hu3DMotionSpeedSet(var_r30, 6.0f); + var_r31->unk_02 = var_r31->unk_03 = 0; + var_r31->unk_14 = var_r31->unk_18 = var_r31->unk_1C = 0.0f; + var_r31->unk_20 = var_r31->unk_24 = var_r31->unk_28 = 1.0f; + var_r31->unk_38 = var_r31->unk_3C = var_r31->unk_40 = 0.0f; + var_r31->unk_2C = var_r31->unk_08.x; + var_r31->unk_30 = var_r31->unk_08.y; + var_r31->unk_34 = var_r31->unk_08.z; + if ((var_r27 & 1) != 0) { + var_r31->unk_18 = 90.0f; + var_r31->unk_08.y += 650.0; + var_r31->unk_08.x -= 1400.0; + } + else { + var_r31->unk_18 = 90.0f; + } + var_r31->unk_18 += 10.0 * (3.0517578125e-05 * (float)((u16)frand() - 0x8000)); + var_r31->unk_08.z -= 400.0; + var_r31->unk_04 = 100.0 * (0.10000000149011612 + (0.019999999552965164 * (1.52587890625e-05 * (float)(s32)(u16)frand()))); + for (var_r26 = 0; var_r26 < 0x20; var_r26++) { + var_r31->unk_44[var_r26] = 0; + } + var_r31->unk_50 = var_r31->unk_04; + } + HuAudFXPlay(0x633); + HuAudFXPlay(0x635); + object->func = fn_1_1B40; +} + +void fn_1_14CC(Mtx arg0, float arg8, float arg9, float argA) +{ + Mtx sp38; + Mtx sp8; + if (argA != 0.0f) { + PSMTXRotRad(arg0, 0x5A, 0.017453292f * argA); + } + else { + PSMTXIdentity(arg0); + } + if (arg8 != 0.0f) { + PSMTXRotRad(sp38, 0x58, 0.017453292f * arg8); + PSMTXConcat(sp38, arg0, arg0); + } + if (arg9 != 0.0f) { + PSMTXRotRad(sp8, 0x59, 0.017453292f * arg9); + PSMTXConcat(sp8, arg0, arg0); + } +} + +float fn_1_15EC(float arg8, float arg9) +{ + float var_f31; + float var_f30; + + var_f30 = 360.0f; + var_f31 = 180.0 * (atan2f(arg9, arg8) / M_PI); + if (var_f31 < 0.0f) { + var_f31 += var_f30; + } + else if (var_f31 >= var_f30) { + var_f31 -= var_f30; + } + return var_f31; +} + +void fn_1_16B0(Mtx var_r30, Vec *var_r31) +{ + float var_f29; + float var_f25; + + var_r31->x = fn_1_15EC(var_r30[2][2], var_r30[1][2]); + var_r31->z = fn_1_15EC(var_r30[0][0], var_r30[0][1]); + var_f29 = -var_r30[0][2]; + var_f25 = sqrtf((1.0 - (var_f29 * var_f29)) < 0.0 ? (-1.0 - (var_f29 * var_f29)) : (1.0 - (var_f29 * var_f29))); + if ((var_r31->x > 90.0f) && (var_r31->x < 270.0f) && (var_r31->z > 90.0f) && (var_r31->z < 270.0f)) { + var_r31->x = fmod(180.0f + var_r31->x, 360.0); + var_r31->z = fmod(180.0f + var_r31->z, 360.0); + var_f25 = -var_f25; + } + var_r31->y = fn_1_15EC(var_f25, var_f29); +} + +static inline float fn_1_1B40_inline(omObjData *object, s32 arg1, s32 arg2, float arg8, float arg9) +{ + float var_f31; + float var_f30; + + var_f30 = sqrtf(arg8); + var_f31 = arg9 + arg8; + if (var_f31 < 0.0f) { + var_f31 += var_f30 + arg2 + arg1; + } + else if (var_f31 >= var_f30) { + var_f31 -= var_f30 + object->group; + } + return var_f31; +} + +// TODO get a working stripped out inline https://decomp.me/scratch/2IbZG +void fn_1_1B40(omObjData *object) +{ + Mtx spCC; + Mtx sp9C; + Mtx sp6C; + Vec sp60; + M425DllUnkBss10Struct *var_r31; + s32 var_r27; + + for (var_r27 = 0; var_r27 < 0xC; var_r27++) { + var_r31 = &lbl_1_bss_10[var_r27]; + switch (var_r31->unk_03) { + case 0: + if (var_r31->unk_04 < var_r31->unk_50) { + var_r31->unk_04 += 0.4f; + } + if ((s32)(64.0 * (1.52587890625e-05 * (float)fn_1_64D4())) == 0) { + Hu3DMotionTimeSet(var_r31->unk_00, 0.0f); + } + if (Hu3DMotionEndCheck(var_r31->unk_00) != 0) { + var_r31->unk_3C = -2.92f; + } + else { + var_r31->unk_3C = -0.48666668f; + } + var_r31->unk_44f += 0.10000000149011612 * (3.0517578125e-05 * (float)((u16)frand() - 0x8000)); + var_r31->unk_48 += var_r31->unk_44f; + if (var_r31->unk_48 > 180.0f) { + var_r31->unk_48 -= 180.0f; + } + if (var_r31->unk_48 < -180.0f) { + var_r31->unk_48 += 180.0f; + } + var_r31->unk_14 = -30.0 * sind(var_r31->unk_48) * sind(var_r31->unk_18); + var_r31->unk_1C = -30.0 * sind(var_r31->unk_48) * cosd(var_r31->unk_18); + if ((var_r31->unk_08.y <= 700.0f) || (fabs(var_r31->unk_08.x) > 2000.0)) { + var_r31->unk_3C = 0.0f; + var_r31->unk_44[6] = (s32)(20.0 * (3.0517578125e-05 * (float)(fn_1_64D4() - 0x8000))) + 0xB4; + var_r31->unk_04 *= 0.75f; + var_r31->unk_03++; + } + break; + case 1: + var_r31->unk_18 += 1.0f; + var_r31->unk_14 = 0.0f; + var_r31->unk_1C = 60.0 * sind(var_r31->unk_44[6]) * cosd(var_r31->unk_18); + if (--var_r31->unk_44[6] == 0) { + Hu3DModelAttrSet(var_r31->unk_00, HU3D_MOTATTR_LOOP); + Hu3DMotionSpeedSet(var_r31->unk_00, 6.0f); + var_r31->unk_3C = 5.3533335f; + var_r31->unk_03++; + } + break; + case 2: + if (var_r31->unk_04 > 4.0f) { + var_r31->unk_04 -= 0.1f; + var_r31->unk_3C += 0.73f; + } + var_r31->unk_3C += -0.5475f; + if (var_r31->unk_3C < 0.0f) { + Hu3DModelAttrReset(var_r31->unk_00, HU3D_MOTATTR_LOOP); + Hu3DMotionSpeedSet(var_r31->unk_00, 2.0f); + var_r31->unk_50 = 100.0 * (0.10000000149011612 + (0.019999999552965164 * (1.52587890625e-05 * (float)(s32)(u16)frand()))); + var_r31->unk_03 = 0; + } + break; + } + if (0) { + fn_1_1B40_inline(object, 1, 2, 0.0f, 0.0f); + fn_1_1B40_inline(object, 1, 2, 0.0f, 0.0f); + } + var_r31->unk_38 = var_r31->unk_04 * sind(var_r31->unk_18); + var_r31->unk_40 = var_r31->unk_04 * cosd(var_r31->unk_18); + var_r31->unk_08.x += var_r31->unk_38; + var_r31->unk_08.y += var_r31->unk_3C; + var_r31->unk_08.z += var_r31->unk_40; + Hu3DModelPosSet(var_r31->unk_00, var_r31->unk_08.x, var_r31->unk_08.y, var_r31->unk_08.z); + fn_1_14CC(spCC, var_r31->unk_14, -var_r31->unk_18, var_r31->unk_1C); + fn_1_16B0(spCC, &sp60); + Hu3DModelRotSetV(var_r31->unk_00, &sp60); + } +} + +void fn_1_2784(omObjData *object) +{ + M425DllWork2 *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M425DllWork2), MEMORY_DEFAULT_NUM); + object->data = work; + work->unk_76 = work->unk_74 = 0; + work->unk_10.x = work->unk_28.x = 8.0f; + work->unk_10.y = work->unk_28.y = 0.0f; + work->unk_10.z = work->unk_28.z = 0.0f; + work->unk_04.x = work->unk_1C.x = 0.0f; + work->unk_04.y = work->unk_1C.y = 430.0f; + work->unk_04.z = work->unk_1C.z = -400.0f; + work->unk_64 = work->unk_68 = 1650.0f; + object->func = fn_1_2870; +} + +void fn_1_2870(omObjData *object) +{ + float var_f31; + M425DllWork2 *work; + + work = object->data; + if (work->unk_76 != 0) { + work->unk_76--; + var_f31 = (float)(work->unk_74 - work->unk_76) / work->unk_74; + var_f31 = sind((90.0f * var_f31)); + work->unk_04.x = work->unk_1C.x + (var_f31 * (work->unk_34 - work->unk_1C.x)); + work->unk_04.y = work->unk_1C.y + (var_f31 * (work->unk_38 - work->unk_1C.y)); + work->unk_04.z = work->unk_1C.z + (var_f31 * (work->unk_3C - work->unk_1C.z)); + work->unk_10.x = work->unk_28.x + (var_f31 * (work->unk_40 - work->unk_28.x)); + work->unk_10.y = work->unk_28.y + (var_f31 * (work->unk_44 - work->unk_28.y)); + work->unk_10.z = work->unk_28.z + (var_f31 * (work->unk_48 - work->unk_28.z)); + work->unk_64 = work->unk_68 + (var_f31 * (work->unk_6C - work->unk_68)); + } + CRot.x = work->unk_10.x; + CRot.y = work->unk_10.y; + CRot.z = work->unk_10.z; + Center.x = work->unk_04.x; + Center.y = work->unk_04.y; + Center.z = work->unk_04.z; + CZoom = work->unk_64; +} + +void fn_1_2A94(s16 arg0, Vec *arg1, Vec *arg2, float arg8) +{ + M425DllWork2 *work = lbl_1_bss_660->data; + work->unk_74 = arg0; + work->unk_76 = arg0; + work->unk_1C = work->unk_04; + work->unk_34 = arg1->x; + work->unk_38 = arg1->y; + work->unk_3C = arg1->z; + work->unk_28 = work->unk_10; + work->unk_40 = arg2->x; + work->unk_44 = arg2->y; + work->unk_48 = arg2->z; + work->unk_68 = work->unk_64; + work->unk_6C = arg8; +} + +void fn_1_2B2C(omObjData *object) +{ + s32 sp8; + M425DllWork *var_r31; + s32 var_r29; + s32 var_r28; + s32 var_r27; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M425DllWork), MEMORY_DEFAULT_NUM); + object->data = var_r31; + var_r31->unk_00 = object->work[0]; + var_r31->unk_01 = GWPlayerCfg[var_r31->unk_00].character; + var_r31->unk_02 = GWPlayerCfg[var_r31->unk_00].group; + var_r31->unk_03 = object->work[1] & 1; + var_r31->unk_04 = GWPlayerCfg[var_r31->unk_00].pad_idx; + var_r31->unk_05 = GWPlayerCfg[var_r31->unk_00].iscom; + var_r31->unk_06 = GWPlayerCfg[var_r31->unk_00].diff; + var_r31->unk_0E = 0; + var_r31->unk_0B = 1; + var_r31->unk_0C = 0; + memset(var_r31->unk_3C, 0, sizeof(var_r31->unk_3C)); + var_r31->unk_5C = 0; + var_r31->unk_60 = 1.0f; + var_r31->unk_64 = 0; + var_r31->unk_68 = 0; + for (var_r29 = 0; var_r29 < 4; var_r29++) { + if ((var_r29 != var_r31->unk_00) && (var_r31->unk_02 == GWPlayerCfg[var_r29].group)) { + var_r31->unk_09 = var_r29; + break; + } + } + var_r27 = object->work[1]; + var_r31->unk_18.x = lbl_1_data_94[var_r27].x; + var_r31->unk_18.y = lbl_1_data_94[var_r27].y; + var_r31->unk_18.z = lbl_1_data_94[var_r27].z; + var_r31->unk_24.x = var_r31->unk_24.y = var_r31->unk_24.z = 0.0f; + if (var_r31->unk_02 == 0) { + var_r31->unk_10 = 30.0f; + } + else { + var_r31->unk_10 = -30.0f; + } + var_r28 = CharModelCreate(var_r31->unk_01, 4); + object->model[0] = var_r28; + Hu3DModelAttrSet(var_r28, HU3D_MOTATTR_LOOP); + CharModelStepTypeSet(var_r31->unk_01, 1); + for (var_r29 = 0; var_r29 < 0xA; var_r29++) { + object->motion[var_r29] = CharModelMotionCreate(var_r31->unk_01, lbl_1_data_6C[var_r29]); + if (var_r29 == 5) { + CharModelVoiceEnableSet(var_r31->unk_01, object->motion[var_r29], 0); + } + } + CharModelMotionDataClose(var_r31->unk_01); + CharModelMotionSet(var_r31->unk_01, object->motion[var_r31->unk_0E]); + omSetTra(object, var_r31->unk_18.x, var_r31->unk_18.y, var_r31->unk_18.z); + Hu3DModelPosSet(var_r28, var_r31->unk_18.x, var_r31->unk_18.y, var_r31->unk_18.z); + Hu3DModelRotSet(var_r28, 0.0f, 30.0f, 0.0f); + HuDataDirClose(sp8); + object->func = fn_1_2E78; +} + +void fn_1_2E78(omObjData *object) +{ + float spC[8]; + s32 sp8; + M425DllWork *var_r31; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 var_r26; + + var_r26 = 0; + sp8 = object->model[0]; + var_r31 = object->data; + var_r31->unk_30 = var_r31->unk_18; + if ((lbl_1_bss_648 == 5) && (var_r31->unk_05 != 0)) { + fn_1_33E0(object); + } + fn_1_3764(object); + switch (lbl_1_bss_648) { + case 2: + if (lbl_1_bss_640 == 1) { + var_r31->unk_0E = 5; + CharModelMotionShiftSet(var_r31->unk_01, object->motion[var_r31->unk_0E], 0.0f, 8.0f, 0); + var_r31->unk_24.y = 0.0f; + var_r31->unk_0B = 0; + } + var_r31->unk_68 = 0; + break; + case 3: + if (var_r31->unk_64 != 0) { + var_r31->unk_18.y = fn_1_10EF8(var_r31->unk_02, var_r31->unk_03, var_r31->unk_18.x, var_r31->unk_18.z); + var_r31->unk_18.y -= 10.0f; + } + else if (fn_1_109EC(var_r31->unk_02, var_r31->unk_03, &var_r31->unk_30, &var_r31->unk_24, &var_r31->unk_18, 0) != 0) { + if (var_r31->unk_0B == 0) { + HuAudFXPlay(0x62F); + } + CharModelVoiceEnableSet(var_r31->unk_01, object->motion[5], 1); + var_r31->unk_0B = 1; + } + break; + case 5: + if ((var_r31->unk_0E == 5) && (var_r31->unk_0C == 0)) { + var_r26 = 1; + } + + case 4: + case 6: + case 7: + if (var_r31->unk_64 != 0) { + var_r31->unk_18.y = fn_1_10EF8(var_r31->unk_02, var_r31->unk_03, var_r31->unk_18.x, var_r31->unk_18.z); + var_r31->unk_18.y -= 10.0f; + } + else if (fn_1_109EC(var_r31->unk_02, var_r31->unk_03, &var_r31->unk_30, &var_r31->unk_24, &var_r31->unk_18, var_r26) != 0) { + var_r31->unk_0B = 1; + } + break; + case 8: + if (var_r31->unk_64 != 0) { + var_r31->unk_18.y = fn_1_10EF8(var_r31->unk_02, var_r31->unk_03, var_r31->unk_18.x, var_r31->unk_18.z); + var_r31->unk_18.y -= 10.0f; + var_r31->unk_0B = 1; + } + else if (fn_1_109EC(var_r31->unk_02, var_r31->unk_03, &var_r31->unk_30, &var_r31->unk_24, &var_r31->unk_18, 0) != 0) { + var_r31->unk_0B = 1; + } + if ((var_r31->unk_0B != 0) && (var_r31->unk_0E != 8) && (var_r31->unk_0E != 9)) { + if (var_r31->unk_02 == lbl_1_data_0) { + var_r31->unk_0E = 8; + } + else { + var_r31->unk_0E = 9; + } + CharModelMotionShiftSet(var_r31->unk_01, object->motion[var_r31->unk_0E], 0.0f, 8.0f, 0); + } + break; + case 9: + if (var_r31->unk_64 != 0) { + var_r31->unk_18.y = fn_1_10EF8(var_r31->unk_02, var_r31->unk_03, var_r31->unk_18.x, var_r31->unk_18.z); + var_r31->unk_18.y -= 10.0f; + } + else if (fn_1_109EC(var_r31->unk_02, var_r31->unk_03, &var_r31->unk_30, &var_r31->unk_24, &var_r31->unk_18, 0) != 0) { + var_r31->unk_0B = 1; + } + break; + } + if (var_r31->unk_18.y < 0.0f) { + var_r31->unk_18.y = 0.0f; + var_r31->unk_0B = 1; + } + var_r27 = var_r31->unk_5C % 8; + var_r31->unk_3C[var_r27] = var_r31->unk_18.y; + if (++var_r31->unk_5C > 8) { + for (var_r29 = 0; var_r29 < 8; var_r29++) { + var_r28 = var_r27 - var_r29; + if (var_r28 < 0) { + var_r28 += 8; + } + spC[var_r29] = var_r31->unk_3C[var_r28]; + } + for (var_r29 = 1; var_r29 < 8; var_r29++) { + if (fabs(spC[var_r29] - spC[0]) > 25.0) { + break; + } + } + if (((var_r31->unk_0E == 0) || (var_r31->unk_0E == 8) || (var_r31->unk_0E == 9)) && (var_r29 >= 8)) { + var_r31->unk_60 = var_r31->unk_60 - 0.05f; + if (var_r31->unk_60 < 0.75f) { + var_r31->unk_60 = 0.75f; + } + } + else { + var_r31->unk_60 = 1.0f; + } + } + omSetTra(object, var_r31->unk_18.x, var_r31->unk_18.y, var_r31->unk_18.z); +} + +void fn_1_33E0(omObjData *object) +{ + s32 spC; + s16 sp8; + M425DllWork *var_r31; + M425DllWork *var_r30; + + var_r31 = object->data; + var_r30 = lbl_1_bss_64C[var_r31->unk_09]->data; + spC = object->model[0]; + sp8 = var_r31->unk_0E; + switch (var_r31->unk_0E) { + case 4: + case 7: + case 0: + if (var_r30->unk_0E == 3) { + if ((var_r30->unk_05 == 0) || ((s32)((0x18 - (var_r31->unk_06 * 3)) * (1.52587890625e-05 * (float)fn_1_64D4())) == 0)) { + HuPadBtnDown[var_r31->unk_04] |= 0x100; + break; + } + } + else { + if ((s32)((0x30 - (var_r31->unk_06 * 4)) * (1.52587890625e-05 * (float)fn_1_64D4())) == 0) { + HuPadBtnDown[var_r31->unk_04] |= 0x100; + break; + } + break; + } + break; + case 3: + if ((s32)(4.0 * (1.52587890625e-05 * (float)fn_1_64D4())) != 0) { + HuPadBtn[var_r31->unk_04] |= 0x100; + } + if ((var_r30->unk_05 == 0) && (var_r30->unk_0E == 5)) { + HuPadBtnDown[var_r31->unk_04] |= 0x100; + break; + } + if ((var_r31->unk_24.y < 5.353333473205566) && ((s32)((0xE - (var_r31->unk_06 * 2)) * (1.52587890625e-05 * (float)fn_1_64D4())) == 0)) { + HuPadBtnDown[var_r31->unk_04] |= 0x100; + } + break; + } +} + +void fn_1_3764(omObjData *object) +{ + float var_f30; + float var_f29; + + M425DllWork *var_r31; + s16 var_r30; + s16 var_r29; + s16 var_r27; + s16 var_r26; + s16 var_r25; + s16 var_r24; + s32 var_r23; + + var_r31 = object->data; + var_r23 = object->model[0]; + var_r30 = var_r31->unk_0E; + if (lbl_1_bss_648 == 5) { + var_r26 = 0; + var_r25 = 0; + var_r27 = HuPadBtnDown[var_r31->unk_04]; + var_r24 = HuPadBtn[var_r31->unk_04]; + } + else { + var_r26 = 0; + var_r25 = 0; + var_r27 = 0; + var_r24 = 0; + } + var_r31->unk_64 = 0; + switch (var_r31->unk_0E) { + case 4: + case 7: + if (CharModelMotionEndCheck(var_r31->unk_01) != 0) { + var_r30 = 0; + var_r29 = 1; + } + + case 0: + case 1: + case 2: + var_r31->unk_24.x = 0.25f * var_r26; + var_r31->unk_24.z = 0.25f * -var_r25; + var_r31->unk_14 = sqrtf((var_r31->unk_24.x * var_r31->unk_24.x) + (var_r31->unk_24.z * var_r31->unk_24.z)); + var_r31->unk_64 = 1; + if (var_r31->unk_14 > 0.1f) { + if (var_r31->unk_14 >= 8.0f) { + var_r30 = 2; + var_r29 = 1; + } + else { + var_r30 = 1; + var_r29 = 1; + } + var_f30 = atan2d(var_r31->unk_24.x, var_r31->unk_24.z); + if (var_f30 >= 180.0f) { + var_f30 = var_f30 - 360.0f; + } + else if (var_f30 < -180.0f) { + var_f30 += 360.0f; + } + var_f29 = var_r31->unk_10 - var_f30; + if (var_f29 >= 180.0f) { + var_f29 -= 360.0f; + } + else if (var_f29 < -180.0f) { + var_f29 += 360.0f; + } + var_r31->unk_10 = var_f30 + (0.5f * var_f29); + if (var_r31->unk_10 >= 180.0f) { + var_r31->unk_10 = var_r31->unk_10 - 360.0f; + } + else if (var_r31->unk_10 < -180.0f) { + var_r31->unk_10 += 360.0f; + } + } + else { + var_r30 = 0; + var_r29 = 1; + } + var_r31->unk_24.y = 0.0f; + var_r31->unk_24.y += -2.4333334f * var_r31->unk_60; + if ((var_r27 & 0x100) != 0) { + var_r31->unk_0B = 0; + var_r31->unk_0A = 1; + var_r31->unk_24.y = 26.766666f; + var_r30 = 3; + var_r29 = 0; + } + break; + case 3: + if (var_r31->unk_0A != 0) { + if ((var_r24 & 0x100) != 0) { + if (++var_r31->unk_0A > 4) { + var_r31->unk_0A = 0; + } + else { + var_r31->unk_24.y += 4.866667f; + } + } + else { + var_r31->unk_0A = 0; + } + } + var_r31->unk_24.y += -2.4333334f; + if (var_r31->unk_0B != 0) { + var_r31->unk_0B = 1; + var_r30 = 4; + var_r29 = 0; + var_r31->unk_24.y = 0.0f; + } + if (((var_r27 & 0x100) != 0) || ((var_r27 & 0x40) != 0)) { + var_r31->unk_24.y = 0.0f; + var_r31->unk_0C = 0; + var_r30 = 5; + var_r29 = 0; + } + break; + case 5: + if ((Hu3DData[var_r23].unk_0C == -1) && (CharModelMotionEndCheck(var_r31->unk_01) != 0)) { + var_r31->unk_24.y += -2.4333334f; + } + else { + var_r31->unk_24.y = 0.0f; + } + if (var_r31->unk_0B != 0) { + if (var_r31->unk_0C != 0) { + var_r31->unk_24.y = 0.0f; + var_r31->unk_0C = 0; + var_r30 = 7; + var_r29 = 0; + } + else { + var_r31->unk_24.y = 9.733334f; + var_r31->unk_0B = 0; + var_r30 = 6; + var_r29 = 0; + } + } + break; + case 6: + var_r31->unk_24.y += -2.4333334f; + if ((var_r31->unk_0B != 0) && (CharModelMotionEndCheck(var_r31->unk_01) != 0)) { + var_r30 = 7; + var_r29 = 0; + } + break; + case 8: + case 9: + var_r31->unk_24.y = -2.4333334f * var_r31->unk_60; + var_r31->unk_64 = 1; + break; + } + var_r31->unk_18.x += var_r31->unk_24.x; + if (var_r31->unk_0B == 0) { + var_r31->unk_18.y += var_r31->unk_24.y; + } + var_r31->unk_18.z += var_r31->unk_24.z; + if (var_r30 != var_r31->unk_0E) { + var_r31->unk_0E = var_r30; + CharModelMotionShiftSet(var_r31->unk_01, object->motion[var_r31->unk_0E], 0.0f, 8.0f, var_r29); + } + omSetTra(object, var_r31->unk_18.x, var_r31->unk_18.y, var_r31->unk_18.z); + omSetRot(object, 0.0f, var_r31->unk_10, 0.0f); +} + +s16 fn_1_3ED0(s32 arg0, s16 arg1, ParticleHook arg2) +{ + s32 var_r31; + M425DllUnkStruct *var_r30; + ParticleData *var_r29; + AnimData *var_r28; + + var_r28 = HuSprAnimRead(HuDataReadNum(arg0, MEMORY_DEFAULT_NUM)); + var_r31 = Hu3DParticleCreate(var_r28, arg1); + Hu3DParticleHookSet(var_r31, arg2); + var_r29 = Hu3DData[var_r31].unk_120; + var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M425DllUnkStruct), MEMORY_DEFAULT_NUM); + var_r29->unk_1C = var_r30; + var_r30->unk_04 = 0; + return var_r31; +} + +void fn_1_3F80(ModelData *model, ParticleData *particle, Mtx matrix) +{ + float var_f29; + float var_f28; + float var_f26; + float var_f25; + float var_f24; + + HsfanimStruct01 *var_r31; + M425DllUnkStruct *var_r29; + s32 var_r28; + + float sp54[4] = { 1000.0f, 200.0f, 600.0f, 1200.0f }; + float sp44[4] = { 1.0f, 0.6f, 0.3f, 0.425f }; + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + s16 sp8 = 0; + + var_r29 = particle->unk_1C; + switch (var_r29->unk_04) { + case 0: + var_r31 = particle->unk_48; + if (var_r29->unk_02 != 0) { + sp14.x = 0.0f; + sp14.y = -3600.0f; + sp14.z = 6250.0f; + var_f28 = (sp14.z * sp14.z) + ((sp14.x * sp14.x) + (sp14.y * sp14.y)); + var_f29 = 1.0f / sqrtf(var_f28); + sp14.x *= var_f29; + sp14.y *= var_f29; + sp14.z *= var_f29; + var_f24 = 6000.0f / particle->unk_30; + for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + var_f26 = 500.0 + ((var_f24 * var_r28) + ((0.25f * var_f24) * (1.52587890625e-05 * (float)(s32)(u16)frand()))); + var_f25 = var_f26 / 6000.0f; + var_r31->unk14.x = var_f26; + var_r31->unk34.x = var_f26 * sp14.x; + var_r31->unk34.y = 4000.0f + (var_f26 * sp14.y); + var_r31->unk34.z = -6750.0f + (var_f26 * sp14.z); + var_r31->unk2C = (0.3f + (0.7f * (var_f25 * var_f25))) + * (sp54[var_r29->unk_02] * (0.699999988079071 + (0.30000001192092896 * (1.52587890625e-05 * (float)(s32)(u16)frand())))); + var_r31->unk40.r = (s32)(160.0 * (1.52587890625e-05 * (float)fn_1_64D4())) + 0x20; + var_r31->unk40.g = (s32)(96.0 * (1.52587890625e-05 * (float)fn_1_64D4())) + 0x20; + var_r31->unk40.b = (s32)(128.0 * (1.52587890625e-05 * (float)fn_1_64D4())) + 0x20; + var_r31->unk40.a + = ((1.0 - (0.4 * var_f25)) * (255.0f * sp44[var_r29->unk_02])) - (s32)(16.0 * (1.52587890625e-05 * (float)fn_1_64D4())); + } + var_r29->unk_04++; + } + else { + var_r31->unk34.x = 0.0f; + var_r31->unk34.y = 4000.0f; + var_r31->unk34.z = -6750.0f; + var_r31->unk2C = 1000.0f; + } + break; + case 1: + sp38.x = sind(CRot.y) * cosd(CRot.x); + sp38.y = -sind(CRot.x); + sp38.z = cosd(CRot.y) * cosd(CRot.x); + sp2C.x = -(Center.x + (1.25f * (sp38.x * CZoom))); + sp2C.y = 4000.0f - (Center.y + (sp38.y * CZoom)); + sp2C.z = -6750.0f - (Center.z + (1.25f * (sp38.z * CZoom))); + var_f29 = 1.0f / sqrtf((sp2C.z * sp2C.z) + ((sp2C.x * sp2C.x) + (sp2C.y * sp2C.y))); + sp2C.x *= var_f29; + sp2C.y *= var_f29; + sp2C.z *= var_f29; + var_f29 = -((-sp2C.z * -sp38.z) + ((-sp2C.x * -sp38.x) + (-sp2C.y * -sp38.y))); + sp20.x = -sp38.x + (-2.0f * sp2C.x * var_f29); + sp20.y = -sp38.y + (-2.0f * sp2C.y * var_f29); + sp20.z = -sp38.z + (-2.0f * sp2C.z * var_f29); + for (var_r31 = particle->unk_48, var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + var_r31->unk34.x = sp20.x * var_r31->unk14.x; + var_r31->unk34.y = 4000.0f + (sp20.y * var_r31->unk14.x); + var_r31->unk34.z = -6750.0f + (sp20.z * var_r31->unk14.x); + } + break; + } + DCFlushRange(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01)); +} + +void fn_1_4A88(ModelData *model, ParticleData *particle, Mtx matrix) +{ + float var_f31; + HsfanimStruct01 *var_r31; + M425DllUnkStruct *var_r29; + s32 var_r28; + s16 var_r27; + + var_r27 = 0; + var_r29 = particle->unk_1C; + switch (var_r29->unk_04) { + case 0: + for (var_r31 = particle->unk_48, var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + var_r31->unk00_s16 = var_r31->unk02 = 0; + } + var_r29->unk_04++; + break; + case 1: + for (var_r31 = particle->unk_48, var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + if (var_r31->unk00_s16 != 0) { + var_r31->unk00_s16--; + } + else { + if (var_r31->unk02 == 0) { + var_f31 = 180.0 * (1.52587890625e-05 * (float)(s32)(u16)frand()); + var_f31 = var_f31; + if ((s32)(4.0 * (1.52587890625e-05 * (float)fn_1_64D4())) != 0) { + var_r31->unk34.x = 100.0 * (4.0 * (1.52587890625e-05 * (float)(s32)(u16)frand())) * cosd(var_f31); + } + else { + var_r31->unk34.x = 100.0 * (2.0 * (1.52587890625e-05 * (float)(s32)(u16)frand())) * cosd(var_f31); + } + var_r31->unk34.y = -10.0f; + var_r31->unk34.z = -7000.0 + (100.0 * (40.0 * (1.52587890625e-05 * (float)(s32)(u16)frand())) * sind(var_f31)); + var_r31->unk30 = 1.5707964f; + var_r31->unk40.r = var_r31->unk40.g = var_r31->unk40.b = var_r31->unk40.a = 0xC0; + var_r31->unk40.b = 0xA0; + var_r31->unk2C = 0.0f; + var_r31->unk00_s16 = (s32)(90.0 * (1.52587890625e-05 * (float)fn_1_64D4())); + var_r31->unk02 = 0x3C; + var_r31->unk40.r = 0xC0; + var_r31->unk40.g = 0xE0; + var_r31->unk40.b = 0xE0; + var_r31->unk08.z = 0.01f * (0.05f * (3000.0f + -var_r31->unk34.z)); + var_r31->unk08.z *= var_r31->unk08.z; + var_r31->unk08.z *= 0.125f; + } + var_r31->unk40.a = 248.0 * sind((var_r31->unk02 * 3)); + var_r31->unk2C = (30.0f * var_r31->unk08.z) * sind((var_r31->unk02 * 3)); + var_r31->unk02--; + } + } + if (particle->unk_30 == var_r27) { + Hu3DModelAttrReset(var_r29->unk_00, HU3D_ATTR_PARTICLE_KILL); + Hu3DModelKill(var_r29->unk_00); + return; + } + } + DCFlushRange(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01)); +} + +void fn_1_5044(s16 sp8) +{ + M425DllUnkStruct3 *var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + ModelData *var_r27; + void *var_r26; + + Vec2f spC[4] = { { 0.0f, 0.0f }, { 1.0f, 0.0f }, { 1.0f, 1.0f }, { 0.0f, 1.0f } }; + var_r27 = &Hu3DData[sp8]; + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M425DllUnkStruct3), MEMORY_DEFAULT_NUM); + var_r27->unk_120 = var_r31; + var_r31->unk_2A = 1; + var_r31->unk_20.r = var_r31->unk_20.g = var_r31->unk_20.b = 0x40; + var_r31->unk_20.a = 0xFF; + var_r31->unk_24.a = var_r31->unk_24.g = var_r31->unk_24.b = 0xFF; + var_r31->unk_24.r = var_r31->unk_24.b = 0; + // maybe Mtx? + var_r31->unk_14 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_2A * (4 * sizeof(Vec)), MEMORY_DEFAULT_NUM); + var_r31->unk_14[0].x = -4500.0f; + var_r31->unk_14[0].y = 0.0f; + var_r31->unk_14[0].z = -7000.0f; + var_r31->unk_14[1].x = 4500.0f; + var_r31->unk_14[1].y = 0.0f; + var_r31->unk_14[1].z = -7000.0f; + var_r31->unk_14[2].x = 3000.0f; + var_r31->unk_14[2].y = -200.0f; + var_r31->unk_14[2].z = 0.0f; + var_r31->unk_14[3].x = -3000.0f; + var_r31->unk_14[3].y = -200.0f; + var_r31->unk_14[3].z = 0.0f; + var_r31->unk_18 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_2A * (4 * sizeof(GXColor)), MEMORY_DEFAULT_NUM); + var_r31->unk_18[0].r = 0xFF; + var_r31->unk_18[0].g = 0xFF; + var_r31->unk_18[0].b = 0xFF; + var_r31->unk_18[0].a = 0xFF; + var_r31->unk_18[1].r = 0xFF; + var_r31->unk_18[1].g = 0xFF; + var_r31->unk_18[1].b = 0xFF; + var_r31->unk_18[1].a = 0xFF; + var_r31->unk_18[2].r = 0xFF; + var_r31->unk_18[2].g = 0xFF; + var_r31->unk_18[2].b = 0xFF; + var_r31->unk_18[2].a = 0xFF; + var_r31->unk_18[3].r = 0xFF; + var_r31->unk_18[3].g = 0xFF; + var_r31->unk_18[3].b = 0xFF; + var_r31->unk_18[3].a = 0xFF; + var_r31->unk_1C = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_2A * sizeof(Vec), MEMORY_DEFAULT_NUM); + var_r31->unk_1C->x = 0.0f; + var_r31->unk_1C->y = 1.0f; + var_r31->unk_1C->z = 0.0f; + var_r31->unk_28 = 2; + var_r31->unk_2C = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_2A * (var_r31->unk_28 * sizeof(M425DllUnkStruct2)), MEMORY_DEFAULT_NUM); + var_r31->unk_2C[0].unk_00 = HuSprAnimReadFile(0x380003); + var_r31->unk_2C[0].unk_04 = 0; + var_r31->unk_2C[1].unk_00 = HuSprAnimReadFile(0x380004); + var_r31->unk_2C[1].unk_04 = 0; + var_r31->unk_2C[1].unk_48 = 0x80; + for (var_r30 = 0; var_r30 < (var_r31->unk_28 * var_r31->unk_2A); var_r30++) { + PSMTXIdentity(var_r31->unk_2C[var_r30].unk_14); + var_r31->unk_2C[var_r30].unk_08.x = var_r31->unk_2C[var_r30].unk_08.y = var_r31->unk_2C[var_r30].unk_08.z = 0.0f; + } + for (var_r30 = 0; var_r30 < var_r31->unk_28; var_r30++) { + fn_1_573C(&var_r31->unk_2C[var_r30].unk_44, var_r31->unk_2A, spC); + } + var_r26 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x20000, MEMORY_DEFAULT_NUM); + var_r31->unk_10 = var_r26; + DCFlushRange(var_r31->unk_10, 0x20000); + GXBeginDisplayList(var_r26, 0x20000); + GXBegin(GX_QUADS, GX_VTXFMT0, var_r31->unk_2A * 4); + for (var_r30 = 0; var_r30 < var_r31->unk_2A; var_r30++) { + for (var_r29 = 0; var_r29 < 4; var_r29++) { + GXUnknownu16(var_r29 + (var_r30 * 4)); + GXUnknownu16(var_r30); + GXUnknownu16(var_r29 + (var_r30 * 4)); + for (var_r28 = 0; var_r28 < var_r31->unk_28; var_r28++) { + GXUnknownu16(var_r29 + (var_r30 * 4)); + } + } + } + var_r31->unk_0C = GXEndDisplayList(); +} + +void fn_1_5568(Vec **arg0, s16 arg1, Vec *arg2) +{ + Vec *var_r31; + s32 var_r29; + s32 var_r28; + + var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * (4 * sizeof(Vec)), MEMORY_DEFAULT_NUM); + for (var_r29 = 0; var_r29 < arg1; var_r29++) { + for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) { + var_r31->x = arg2->x; + var_r31->y = arg2->y; + var_r31->z = arg2->z; + } + } +} + +void fn_1_5608(GXColor **arg0, s16 arg1, GXColor *arg2) +{ + GXColor *var_r31; + s32 var_r29; + s32 var_r28; + + var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * (4 * sizeof(GXColor)), 0x10000000); + for (var_r29 = 0; var_r29 < arg1; var_r29++) { + for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) { + var_r31->r = arg2->r; + var_r31->g = arg2->g; + var_r31->b = arg2->b; + var_r31->a = arg2->a; + } + } +} + +void fn_1_56B0(Vec **arg0, s16 arg1, Vec *arg2) +{ + Vec *var_r31; + s32 var_r29; + + var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(Vec), MEMORY_DEFAULT_NUM); + for (var_r29 = 0; var_r29 < arg1; var_r31++, arg2++, var_r29++) { + var_r31->x = arg2->x; + var_r31->y = arg2->y; + var_r31->z = arg2->z; + } +} + +void fn_1_573C(Vec2f **arg0, s16 arg1, Vec2f *arg2) +{ + Vec2f *var_r31; + s32 var_r29; + s32 var_r28; + + var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * (4 * sizeof(Vec2f)), MEMORY_DEFAULT_NUM); + for (var_r29 = 0; var_r29 < arg1; var_r29++) { + for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) { + var_r31->x = arg2->x; + var_r31->y = arg2->y; + } + } +} + +void fn_1_57D4(ModelData *model, Mtx matrix) +{ + float var_f31; + float var_f30; + s32 var_r31; + M425DllUnkStruct3 *var_r30; + + var_r30 = model->unk_120; + var_r30->unk_2C[1].unk_08.y -= 0.0005f; + var_f31 = sind(lbl_1_bss_4); + var_f30 = cosd(lbl_1_bss_4); + for (var_r31 = 0; var_r31 < 1; var_r31++) { + var_r30->unk_2C[var_r31].unk_44[0].x = 0.005f * var_f31 * (var_r31 != 0 ? 10.0f : -1.0f); + var_r30->unk_2C[var_r31].unk_44[0].y = 0.005f * var_f30 * (var_r31 != 0 ? 1.0f : -1.0f); + var_r30->unk_2C[var_r31].unk_44[1].x = 1.0f + (0.005f * var_f30 * (var_r31 != 0 ? 10.0f : -1.0f)); + var_r30->unk_2C[var_r31].unk_44[1].y = 0.005f * var_f31 * (var_r31 != 0 ? 1.0f : -1.0f); + var_r30->unk_2C[var_r31].unk_44[2].x = 1.0f + (0.005f * var_f31 * (var_r31 != 0 ? 10.0f : -1.0f)); + var_r30->unk_2C[var_r31].unk_44[2].y = 1.0f + (0.005f * var_f30 * (var_r31 != 0 ? 1.0f : -1.0f)); + var_r30->unk_2C[var_r31].unk_44[3].x = 0.005f * var_f30 * (var_r31 != 0 ? 10.0f : -1.0f); + var_r30->unk_2C[var_r31].unk_44[3].y = 1.0f + (0.005f * var_f31 * (var_r31 != 0 ? 1.0f : -1.0f)); + } + lbl_1_bss_4 += 1.0f; + fn_1_5C20(model, matrix); +} + +void fn_1_5C20(ModelData *var_r27, Mtx sp8) +{ + Mtx sp5C; + Mtx sp2C; + GXColor sp26; + s16 spC; + GXTexMapID var_r29; + M425DllUnkStruct3 *var_r31; + s16 var_r30; + s16 var_r28; + s16 var_r26; + s32 var_r25; + s32 var_r24; + s32 var_r23; + + var_r31 = var_r27->unk_120; + GXSetChanAmbColor(GX_COLOR0A0, var_r31->unk_20); + GXSetChanMatColor(GX_COLOR0A0, var_r31->unk_24); + GXLoadPosMtxImm(sp8, 0); + PSMTXInverse(sp8, sp5C); + PSMTXTranspose(sp5C, sp2C); + GXLoadNrmMtxImm(sp2C, 0); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + GXSetZMode(1, GX_LEQUAL, 1); + var_r30 = 0; + var_r28 = 0; + spC = 0; + for (var_r29 = GX_TEXMAP0; var_r29 < var_r31->unk_28; var_r29++) { + PSMTXRotRad(var_r31->unk_2C[var_r29].unk_14, 0x5A, 0.0f); + mtxTransCat( + var_r31->unk_2C[var_r29].unk_14, var_r31->unk_2C[var_r29].unk_08.x, var_r31->unk_2C[var_r29].unk_08.y, var_r31->unk_2C[var_r29].unk_08.z); + switch (var_r31->unk_2C[var_r29].unk_04) { + case 0: + GXLoadTexMtxImm(var_r31->unk_2C[var_r29].unk_14, texMtxTbl[var_r28], GX_MTX2x4); + var_r25 = texMtxTbl[var_r28]; + GXSetTexCoordGen2(var_r28, GX_TG_MTX2x4, var_r29 + 4, var_r25, GX_FALSE, 0x7D); + GXSetTevOrder(var_r30, var_r28, var_r29, GX_COLOR0A0); + if (var_r29 == GX_TEXMAP0) { + GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); + GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO); + } + else { + sp26.a = var_r31->unk_2C[var_r29].unk_48; + GXSetTevColor(GX_TEVREG2, sp26); + GXSetTevColorIn(var_r30, GX_CC_CPREV, GX_CC_TEXC, GX_CC_ZERO, GX_CC_TEXC); + GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO); + } + GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + break; + case 1: + GXLoadTexMtxImm(var_r31->unk_2C[var_r29].unk_14, texMtxTbl[var_r28], GX_MTX2x4); + var_r24 = texMtxTbl[var_r28]; + GXSetTexCoordGen2(var_r28, GX_TG_MTX2x4, var_r29 + 4, var_r24, GX_FALSE, 0x7D); + GXSetTevOrder(var_r30, var_r28, var_r29, GX_COLOR0A0); + GXSetTevColor(GX_TEVREG2, sp26); + GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_CPREV, GX_CC_TEXA, GX_CC_ZERO); + GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO); + GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + break; + case 2: + sp26.a = 0xE0; + GXSetTevColor(GX_TEVREG1, sp26); + GXSetTexCoordGen2(var_r28 + 1, GX_TG_BUMP0, var_r28, 0x3C, GX_FALSE, 0x7D); + GXSetTevOrder(var_r30, var_r28, var_r29, GX_COLOR0A0); + GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A1, GX_CC_RASC); + GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); + var_r30++; + GXSetTevOrder(var_r30, var_r28 + 1, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A1, GX_CC_CPREV); + GXSetTevColorOp(var_r30, GX_TEV_SUB, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); + break; + case 3: + var_r28--; + GXLoadTexMtxImm(var_r31->unk_2C[var_r29].unk_14, texMtxTbl[var_r28], GX_MTX2x4); + var_r23 = texMtxTbl[var_r28]; + GXSetTexCoordGen2(var_r28, GX_TG_MTX2x4, var_r29 + 4, var_r23, 0, 0x7D); + GXSetTevOrder(var_r30, var_r28, var_r29, GX_COLOR0A0); + GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_CPREV, GX_CC_TEXC, GX_CC_ZERO); + GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_TEXA); + GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + var_r28++; + break; + } + var_r30++; + var_r28++; + HuSprTexLoad(var_r31->unk_2C[var_r29].unk_00, 0, var_r29, GX_REPEAT, GX_REPEAT, GX_LINEAR); + } + sp26.a = var_r31->unk_24.a; + GXSetTevColor(GX_TEVREG0, sp26); + GXSetTevOrder(var_r30, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_CPREV, GX_CC_RASC, GX_CC_ZERO); + GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_APREV, GX_CA_A0, GX_CA_KONST); + GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + var_r30++; + GXSetNumTevStages((s32)var_r30); + GXSetNumTexGens((s32)var_r28); + var_r26 = Hu3DLightSet(var_r27, &Hu3DCameraMtx, &Hu3DCameraMtxXPose, 0.0f); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_TRUE, GX_SRC_REG, GX_SRC_VTX, var_r26, GX_DF_CLAMP, GX_AF_SPOT); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_ST, GX_RGBA6, 0); + GXSetArray(GX_VA_POS, var_r31->unk_14, 0xC); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_TEX_ST, GX_RGBA8, 0); + GXSetArray(GX_VA_CLR0, var_r31->unk_18, 4); + for (var_r29 = GX_TEXMAP0; var_r29 < (var_r31->unk_28 * var_r31->unk_2A); var_r29++) { + GXSetVtxDesc(var_r29 + 0xD, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, var_r29 + 0xD, GX_TEX_ST, GX_RGBA6, 0); + GXSetArray(var_r29 + 0xD, var_r31->unk_2C[var_r29].unk_44, 8); + } + GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_TEX_S, GX_RGBA6, 0); + GXSetArray(GX_VA_NRM, var_r31->unk_1C, 0xC); + GXCallDisplayList(var_r31->unk_10, var_r31->unk_0C); +} + +u32 lbl_1_data_114 = 0x41C64E6D; + +s32 fn_1_64D4(void) +{ + lbl_1_data_114 *= 0x41C64E6D; + lbl_1_data_114 += 0x3039; + return lbl_1_data_114 >> 0x10; +} + +float fn_1_6528(float arg8, float arg9, float argA, float argB) +{ + float var_f31 = 1.0 - arg8; + float var_f30 = (argB * (arg8 * arg8)) + ((arg9 * (var_f31 * var_f31)) + (2.0 * (argA * (var_f31 * arg8)))); + return var_f30; +} + +void fn_1_65A0(float *arg0, float *arg1, float *arg2, float *arg3, float arg8) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + *arg3++ = fn_1_6528(arg8, *arg0++, *arg1++, *arg2++); + } +} + +float fn_1_66BC(float arg8, float arg9, float argA, float argB) +{ + float var_f31 = 2.0 * ((arg8 * argB) + (((arg8 - 1.0) * arg9) + ((1.0 - (2.0 * arg8)) * argA))); + return var_f31; +} + +void fn_1_6734(float *arg0, float *arg1, float *arg2, float *arg3, float arg8) +{ + float spC[3]; + float sp8; + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + float var_f26; + float var_f25; + float var_f24; + float var_f23; + float var_f22; + float var_f21; + s32 var_r31; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + spC[var_r31] = fn_1_66BC(arg8, *arg0++, *arg1++, *arg2++); + } + + var_f29 = sqrtf((spC[2] * spC[2]) + ((spC[0] * spC[0]) + (spC[1] * spC[1]))); + if (var_f29) { + var_f29 = 1.0 / var_f29; + var_f29 = var_f29; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + *arg3++ = var_f29 * spC[var_r31]; + } + return; + } + *arg3++ = 0.0f; + *arg3++ = 0.0f; + *arg3++ = 1.0f; +} diff --git a/src/REL/m425Dll/thwomp.c b/src/REL/m425Dll/thwomp.c new file mode 100644 index 00000000..0a320286 --- /dev/null +++ b/src/REL/m425Dll/thwomp.c @@ -0,0 +1,2768 @@ +#include "dolphin/gx/GXEnum.h" +#include "dolphin/gx/GXVert.h" +#include "dolphin/mtx/GeoTypes.h" +#include "ext_math.h" +#include "game/animdata.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/esprite.h" +#include "game/flag.h" +#include "game/frand.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/printfunc.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/wipe.h" +#include "string.h" + +#include "REL/m425Dll.h" + +extern u32 GlobalCounter; +extern LightData Hu3DLocalLight[0x20]; + +typedef struct M425DllUnkStruct4 { + s16 unk_00; + s16 unk_02; + s16 unk_04; + s16 unk_06; + float unk_08; + float unk_0C; + float unk_10; + float unk_14; + float unk_18; + float unk_1C; + float unk_20; + float unk_24; + s32 unk_28; + s32 unk_2C; + float unk_30; + s32 unk_34; + s32 unk_38; + s32 unk_3C[5]; + s32 unk_50; + float unk_54[6]; + s32 unk_6C[6]; + s32 unk_84[6]; + float unk_9C[6]; + s32 unk_B4[6]; + Vec unk_CC; + float unk_D8; + float unk_DC; + float unk_E0; + float unk_E4; + float unk_E8; + float unk_EC; + s32 unk_F0[3]; + float unk_FC; + float unk_100; + char unk104[0x8]; + s16 unk_10C; + s16 unk_10E; + s16 unk_110; + s16 unk_112[0x19]; + s16 unk_144[0x1A]; + s16 *unk_178; + Vec *unk_17C; + Vec *unk_180; + Vec2f *unk_184; + Vec *unk_188; + Vec *unk_18C; + s16 (*unk_190)[3]; + Vec *unk_194; + Vec *unk_198; + s32 unk_19C; + u8 *unk_1A0; + s16 *unk_1A4[0x19]; + s16 unk_208[0x19]; + GXColor unk_23A; + s32 unk_240; + u32 unk_244[0x19]; + void *unk_2A8[0x19]; +} M425DllUnkStruct4; /* size = 0x30C */ + +typedef struct M425DllUnkStruct5 { + char unk00[4]; + Vec unk_04; + Vec unk_10; + float unk_1C; + char unk20[8]; + float unk_28; + float unk_2C; + Vec unk_30; + GXColor unk_3C; + s32 unk_40; +} M425DllUnkStruct5; /* size = 0x44 */ + +typedef void (*UnkHook)(ModelData *model, struct M425DllUnkStruct6 *particle, Mtx matrix); + +typedef struct M425DllUnkStruct6 { + s16 unk_00; + s16 unk_02; + char unk04[0x1C]; + u8 unk_20; + u8 unk_21; + char unk22[2]; + s16 unk_24; + s32 unk_28; + s32 unk_2C; + u32 unk_30; + u32 unk_34; + AnimData *unk_38; + M425DllUnkStruct5 *unk_3C; + Vec *unk_40; + Vec2f *unk_44; + void *unk_48; + UnkHook unk_4C; +} M425DllUnkStruct6; /* size = 0x50 */ + +void fn_1_6BD8(omObjData *object); +s32 fn_1_6EC4(float arg8, float arg9, s16 arg0, s16 arg1); +void fn_1_6DFC(s32 arg0, float arg8); +void fn_1_E210(s32 arg0); +void fn_1_E914(ModelData *arg0, Mtx matrix); +void fn_1_D9A8(M425DllUnkStruct4 *var_r31, ModelData *var_r24, s32 var_r30, s32 var_r26, s32 var_r25); +void fn_1_DB44(M425DllUnkStruct4 *arg0, ModelData *model); +void fn_1_DE3C(M425DllUnkStruct4 *arg0, ModelData *model); +void fn_1_101C4(ModelData *model, Mtx matrix); +void fn_1_11284(void); +void fn_1_112FC(void); +void fn_1_11418(void); +s32 fn_1_11454(Vec *arg0, Vec *arg1, float arg8, float arg9); +s16 fn_1_115D4(ModelData *arg0, Mtx arg1, Mtx arg2, float arg8); +void fn_1_116E4(ModelData *arg1, LightData *arg2, s16 arg3, Mtx arg4, Mtx arg5, float arg8); +s16 fn_1_11A74(AnimData *arg0, s16 arg1); +void fn_1_11EE0(ModelData *model, Mtx matrix); + +Vec lbl_1_data_118[2] = { + { -300.0f, 1.0f, 0.0f }, + { 300.0f, 1.0f, 0.0f }, +}; + +Process *lbl_1_bss_6F0; +omObjData *lbl_1_bss_6EC; +s32 lbl_1_bss_6E8; +u8 *lbl_1_bss_6E4; +AnimData *lbl_1_bss_6E0; +AnimData *lbl_1_bss_6DC; +AnimData *lbl_1_bss_6D8; +// M425DllUnkStruct6 +s32 lbl_1_bss_6D4; +u8 lbl_1_bss_6D0; +s32 lbl_1_bss_6CC; +GXColor lbl_1_bss_6C8; +GXLightObj lbl_1_bss_688; +Vec lbl_1_bss_67C; +Vec lbl_1_bss_670; + +omObjData *fn_1_6A0C(Process *process, s32 sp8) +{ + omObjData *object; + + lbl_1_bss_6F0 = process; + object = omAddObjEx(process, sp8, 6, 0, -1, fn_1_6BD8); + lbl_1_bss_6EC = object; + object->stat |= 0x100; + lbl_1_bss_6E8 = 0; + lbl_1_bss_6D0 = 0x40; + lbl_1_bss_6CC = 0; + object->model[0] = fn_1_6EC4(350.0f, 350.0f, 0x10, 0x10); + object->model[1] = fn_1_6EC4(350.0f, 350.0f, 0x10, 0x10); + fn_1_6CD0(0, &lbl_1_data_118[0]); + fn_1_6CD0(1, &lbl_1_data_118[1]); + fn_1_6DFC(0, 30.0f); + fn_1_6DFC(1, -30.0f); + lbl_1_bss_6E4 = HuDataReadNum(0x38000A, MEMORY_DEFAULT_NUM); + lbl_1_bss_6E0 = HuSprAnimRead(HuDataReadNum(0x38000B, MEMORY_DEFAULT_NUM)); + lbl_1_bss_6DC = HuSprAnimRead(HuDataReadNum(0x38000C, MEMORY_DEFAULT_NUM)); + fn_1_11284(); + return lbl_1_bss_6EC; +} + +void fn_1_6BD8(omObjData *object) +{ + fn_1_E210(0); + fn_1_E210(1); + fn_1_112FC(); +} + +void fn_1_6C08(void) +{ + omObjData *object = lbl_1_bss_6EC; + if (object) { + HuMemDirectFree(lbl_1_bss_6E4); + lbl_1_bss_6E4 = NULL; + HuSprAnimKill(lbl_1_bss_6E0); + lbl_1_bss_6E0 = NULL; + HuSprAnimKill(lbl_1_bss_6DC); + lbl_1_bss_6DC = NULL; + fn_1_11418(); + lbl_1_bss_6EC = NULL; + object->func = NULL; + omDelObjEx(lbl_1_bss_6F0, object); + } +} + +void fn_1_6CD0(s32 arg0, Vec *arg1) +{ + M425DllUnkStruct4 *var_r30; + s32 var_r29; + ModelData *var_r28; + + if (lbl_1_bss_6EC) { + var_r28 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; + var_r30 = var_r28->unk_120; + var_r30->unk_CC.x = arg1->x; + var_r30->unk_CC.y = arg1->y; + var_r30->unk_CC.z = arg1->z; + Hu3DModelPosSet(lbl_1_bss_6EC->model[arg0], arg1->x, arg1->y, arg1->z); + if ((lbl_1_bss_6CC == 0) && (arg0 == 0) && (arg1->y <= 0.0f)) { + for (var_r29 = 0; var_r29 < 4; var_r29++) { + omVibrate(0, 0xC, 6, 6); + } + HuAudFXPlay(0x62E); + lbl_1_bss_6CC = 1; + } + } +} + +void fn_1_6DFC(s32 arg0, float arg8) +{ + ModelData *var_r31; + M425DllUnkStruct4 *var_r30; + + if (lbl_1_bss_6EC) { + var_r31 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; + var_r30 = var_r31->unk_120; + var_r30->unk_D8 = arg8; + Hu3DModelRotSet(lbl_1_bss_6EC->model[arg0], 0.0f, arg8, 0.0f); + } +} + +s32 fn_1_6EC4(float var_f24, float sp8, s16 var_r22, s16 var_r24) +{ + float sp24; + float sp20; + float sp1C; + float sp18; + float sp14; + float sp10; + void *spC; + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + float var_f26; + float var_f25; + float var_f23; + float var_f22; + float var_f21; + float var_f20; + float var_f19; + float var_f18; + + M425DllUnkStruct4 *var_r31; + s32 var_r30; + Vec *var_r29; + Vec2f *var_r28; + s32 var_r27; + Vec *var_r26; + s16 *var_r25; + ModelData *var_r23; + s32 var_r21; + s16 *var_r20; + s32 var_r19; + s16 var_r18; + void *var_r17; + + var_r19 = Hu3DHookFuncCreate(fn_1_101C4); + var_r23 = &Hu3DData[var_r19]; + Hu3DModelLayerSet(var_r19, 5); + var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(M425DllUnkStruct4), var_r23->unk_48); + var_r23->unk_120 = var_r31; + memset(var_r31, 0, sizeof(M425DllUnkStruct4)); + var_r31->unk_00 = lbl_1_bss_6E8; + lbl_1_bss_6E8++; + var_r31->unk_02 = 0; + var_r31->unk_04 = Hu3DModelCreateFile(0x38000D); + Hu3DModelLayerSet(var_r31->unk_04, 6); + var_r31->unk_06 = 0; + var_r31->unk_08 = 1000.0f; + var_r31->unk_0C = 1000.0f; + var_r31->unk_10 = 1000.0f; + var_r31->unk_14 = 0.0f; + var_r31->unk_18 = 0.0f; + var_r31->unk_1C = 0.0f; + var_r31->unk_20 = 0.0f; + var_r31->unk_24 = sp8; + var_r31->unk_FC = var_f24; + var_r31->unk_100 = sp8; + var_r31->unk_28 = 0; + var_r31->unk_2C = 0; + var_r31->unk_30 = 0.0f; + for (var_r30 = 0; var_r30 < 6; var_r30++) { + var_r31->unk_3C[var_r30] = -1; + var_r31->unk_54[var_r30] = 0.0f; + var_r31->unk_84[var_r30] = -1; + var_r31->unk_9C[var_r30] = 0.0f; + } + var_r31->unk_CC.x = var_r31->unk_CC.y = var_r31->unk_CC.z = 0.0f; + var_r31->unk_D8 = 0.0f; + var_r31->unk_DC = 1.0f; + var_r31->unk_F0[0] = -1; + var_r31->unk_F0[1] = -1; + var_r31->unk_F0[2] = -1; + lbl_1_bss_6EC->model[var_r31->unk_00 + 2] = var_r31->unk_04; + if (var_r31->unk_00 == 0) { + var_r31->unk_E0 = var_f22 = 302.0f; + var_r31->unk_E4 = var_f27 = 193.0f; + } + else { + var_r31->unk_E0 = var_f22 = 302.0f; + var_r31->unk_E4 = var_f27 = 150.0f; + } + var_r31->unk_E8 = var_r31->unk_EC = 0.0f; + var_f30 = sind(var_f27) * cosd(var_f22); + var_f26 = cosd(var_f27) * cosd(var_f22); + var_f28 = sind(var_f22); + sp24 = sqrtf((var_f26 * var_f26) + ((var_f30 * var_f30) + (var_f28 * var_f28))); + if (sp24 != 0.0f) { + sp24 = 1.0f / sp24; + } + else { + sp24 = 0.0f; + } + var_f30 *= sp24; + var_f28 *= sp24; + var_f26 *= sp24; + var_r30 = Hu3DLLightCreate(var_r19, 1000.0f * var_f30, 1000.0f * var_f28, 1000.0f * var_f26, var_f30, var_f28, var_f26, 0xFF, 0xFF, 0xFF); + Hu3DLLightInfinitytSet(var_r19, var_r30); + Hu3DLLightStaticSet(var_r19, var_r30, 1); + var_r22++; + var_r24++; + sp14 = var_f24 - 50.0f; + sp10 = sp8 - 50.0f; + var_r31->unk_112[0] = var_r24 * var_r24; + var_r31->unk_144[0] = 0; + var_r31->unk_112[1] = var_r22 * var_r24; + var_r31->unk_144[1] = var_r31->unk_144[0] + var_r31->unk_112[0]; + if (var_r31->unk_00 != 0) { + var_r31->unk_112[2] = 0; + } + else { + var_r31->unk_112[2] = var_r22 * var_r24; + } + var_r31->unk_144[2] = var_r31->unk_144[1] + var_r31->unk_112[1]; + if (var_r31->unk_00 == 0) { + var_r31->unk_112[3] = 0; + } + else { + var_r31->unk_112[3] = var_r22 * var_r24; + } + var_r31->unk_144[3] = var_r31->unk_144[2] + var_r31->unk_112[2]; + var_r31->unk_112[4] = var_r24 * 5; + var_r31->unk_144[4] = var_r31->unk_144[3] + var_r31->unk_112[3]; + var_r31->unk_112[5] = var_r24 * 5; + var_r31->unk_144[5] = var_r31->unk_144[4] + var_r31->unk_112[4]; + var_r31->unk_112[6] = var_r22 * 5; + var_r31->unk_144[6] = var_r31->unk_144[5] + var_r31->unk_112[5]; + var_r31->unk_112[7] = var_r22 * 5; + var_r31->unk_144[7] = var_r31->unk_144[6] + var_r31->unk_112[6]; + var_r31->unk_112[8] = var_r24 * 5; + var_r31->unk_144[8] = var_r31->unk_144[7] + var_r31->unk_112[7]; + var_r31->unk_112[9] = var_r24 * 5; + var_r31->unk_144[9] = var_r31->unk_144[8] + var_r31->unk_112[8]; + var_r31->unk_112[10] = var_r24 * 5; + var_r31->unk_144[10] = var_r31->unk_144[9] + var_r31->unk_112[9]; + var_r31->unk_112[11] = var_r24 * 5; + var_r31->unk_144[11] = var_r31->unk_144[10] + var_r31->unk_112[10]; + var_r31->unk_112[12] = var_r24 * 5; + var_r31->unk_144[12] = var_r31->unk_144[11] + var_r31->unk_112[11]; + var_r31->unk_112[13] = var_r24 * 5; + var_r31->unk_144[13] = var_r31->unk_144[12] + var_r31->unk_112[12]; + if (var_r31->unk_00 == 0) { + var_r31->unk_112[14] = 0; + } + else { + var_r31->unk_112[14] = var_r22 * 5; + } + var_r31->unk_144[14] = var_r31->unk_144[13] + var_r31->unk_112[13]; + if (var_r31->unk_00 != 0) { + var_r31->unk_112[15] = 0; + } + else { + var_r31->unk_112[15] = var_r22 * 5; + } + var_r31->unk_144[15] = var_r31->unk_144[14] + var_r31->unk_112[14]; + var_r31->unk_112[16] = 0x19; + var_r31->unk_144[16] = var_r31->unk_144[15] + var_r31->unk_112[15]; + var_r31->unk_112[17] = 0x19; + var_r31->unk_144[17] = var_r31->unk_144[16] + var_r31->unk_112[16]; + var_r31->unk_112[18] = 0x19; + var_r31->unk_144[18] = var_r31->unk_144[17] + var_r31->unk_112[17]; + var_r31->unk_112[19] = 0x19; + var_r31->unk_144[19] = var_r31->unk_144[18] + var_r31->unk_112[18]; + var_r31->unk_112[20] = 0x19; + var_r31->unk_144[20] = var_r31->unk_144[19] + var_r31->unk_112[19]; + var_r31->unk_112[21] = 0x19; + var_r31->unk_144[21] = var_r31->unk_144[20] + var_r31->unk_112[20]; + var_r31->unk_112[22] = 0x19; + var_r31->unk_144[22] = var_r31->unk_144[21] + var_r31->unk_112[21]; + var_r31->unk_112[23] = 0x19; + var_r31->unk_144[23] = var_r31->unk_144[22] + var_r31->unk_112[22]; + var_r31->unk_112[24] = var_r24 * var_r24; + var_r31->unk_144[24] = var_r31->unk_144[23] + var_r31->unk_112[23]; + if (var_r31->unk_00 == 0) { + var_r31->unk_06 = var_r31->unk_144[17] + (var_r31->unk_112[17] / 2) + 1; + } + else { + var_r31->unk_06 = var_r31->unk_144[16] + (var_r31->unk_112[16] / 2) - 1; + } + var_r31->unk_10C = var_r22; + var_r31->unk_10E = var_r24; + var_r31->unk_110 = var_r31->unk_144[24] + var_r31->unk_112[24]; + var_r31->unk_240 = 0x19; + var_r31->unk_178 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 2, var_r23->unk_48); + memset(var_r31->unk_178, 0, var_r31->unk_110 * 2); + var_r31->unk_17C = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 0xC, var_r23->unk_48); + memset(var_r31->unk_17C, 0, var_r31->unk_110 * 0xC); + var_r31->unk_180 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 0xC, var_r23->unk_48); + memset(var_r31->unk_180, 0, var_r31->unk_110 * 0xC); + var_r31->unk_184 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 8, var_r23->unk_48); + memset(var_r31->unk_184, 0, var_r31->unk_110 * 8); + var_r31->unk_188 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 0xC, var_r23->unk_48); + memset(var_r31->unk_188, 0, var_r31->unk_110 * 0xC); + var_r31->unk_18C = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 0xC, var_r23->unk_48); + memset(var_r31->unk_18C, 0, var_r31->unk_110 * 0xC); + var_r31->unk_190 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 6, var_r23->unk_48); + memset(var_r31->unk_190, 0, var_r31->unk_110 * 6); + var_r31->unk_194 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 0xC, var_r23->unk_48); + memset(var_r31->unk_194, 0, var_r31->unk_110 * 0xC); + var_r31->unk_198 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_112[0] * 0xC, var_r23->unk_48); + memset(var_r31->unk_198, 0, var_r31->unk_112[0] * 0xC); + var_r31->unk_1A0 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110, var_r23->unk_48); + memset(var_r31->unk_1A0, 0, var_r31->unk_110); + for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { + if (((var_r31->unk_112[0] > 0) && (var_r30 >= var_r31->unk_144[0]) && (var_r30 < (var_r31->unk_144[0] + var_r31->unk_112[0]))) + || ((var_r31->unk_112[4] > 0) && (var_r30 >= var_r31->unk_144[4]) && (var_r30 < (var_r31->unk_144[4] + var_r31->unk_112[4]))) + || ((var_r31->unk_112[8] > 0) && (var_r30 >= var_r31->unk_144[8]) && (var_r30 < (var_r31->unk_144[8] + var_r31->unk_112[8]))) + || ((var_r31->unk_112[10] > 0) && (var_r30 >= var_r31->unk_144[10]) && (var_r30 < (var_r31->unk_144[10] + var_r31->unk_112[10]))) + || ((var_r31->unk_112[12] > 0) && (var_r30 >= var_r31->unk_144[12]) && (var_r30 < (var_r31->unk_144[12] + var_r31->unk_112[12]))) + || ((var_r31->unk_112[16] > 0) && (var_r30 >= var_r31->unk_144[16]) && (var_r30 < (var_r31->unk_144[16] + var_r31->unk_112[16]))) + || ((var_r31->unk_112[17] > 0) && (var_r30 >= var_r31->unk_144[17]) && (var_r30 < (var_r31->unk_144[17] + var_r31->unk_112[17]))) + || ((var_r31->unk_112[20] > 0) && (var_r30 >= var_r31->unk_144[20]) && (var_r30 < (var_r31->unk_144[20] + var_r31->unk_112[20]))) + || ((var_r31->unk_112[21] > 0) && (var_r30 >= var_r31->unk_144[21]) && (var_r30 < (var_r31->unk_144[21] + var_r31->unk_112[21])))) { + var_r31->unk_1A0[var_r30] = 1; + } + else { + var_r31->unk_1A0[var_r30] = 0; + } + } + var_r31->unk_23A.r = 0; + var_r31->unk_23A.g = 0; + var_r31->unk_23A.b = 0xFF; + var_r31->unk_23A.a = 0x40; + var_r29 = &var_r31->unk_17C[var_r31->unk_144[0]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[0]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[0]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[0]]; + var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); + sp20 = var_f28 = sp8; + sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp14 / (var_r24 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[0] != 0) { + for (var_r30 = 0; var_r30 < var_r31->unk_10E; var_r30++) { + for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { + var_r29->x = var_f30; + var_r29->y = var_f28; + var_r29->z = var_f26; + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f26 = var_f26 + var_f23; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0, var_r24 - 1, var_r24 - 1); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[1]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[1]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[1]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[1]]; + var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = 0.5f * var_f24; + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[1] != 0) { + for (var_r30 = 0; var_r30 < var_r31->unk_10E; var_r30++) { + for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { + var_r29->x = var_f30; + var_r29->y = var_f28; + var_r29->z = var_f26; + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 1, var_r24 - 1, var_r22 - 1); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[2]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[2]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[2]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[2]]; + var_f25 = var_f30 = -(0.5f * var_f24); + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[2] != 0) { + for (var_r30 = 0; var_r30 < var_r31->unk_10E; var_r30++) { + for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { + var_r29->x = var_f30; + var_r29->y = var_f28; + var_r29->z = var_f26; + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f26 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f26 = sp1C; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 2, var_r24 - 1, var_r22 - 1); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[3]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[3]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[3]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[3]]; + var_f25 = var_f30 = 0.5f * var_f24; + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = (0.5f * var_f24) - 25.0f; + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[3] != 0) { + for (var_r30 = 0; var_r30 < var_r31->unk_10E; var_r30++) { + for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { + var_r29->x = var_f30; + var_r29->y = var_f28; + var_r29->z = var_f26; + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f26 -= var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f26 = sp1C; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 3, var_r24 - 1, var_r22 - 1); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[4]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[4]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[4]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[4]]; + var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); + sp20 = var_f28 = sp8; + sp1C = var_f26 = (0.5f * var_f24) - 25.0f; + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[4] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { + var_f27 = 90.0f * (var_r30 / 4.0f); + var_r29->x = var_f30; + var_r29->y = sp20 + (25.0 * (cosd(var_f27) - 1.0)); + var_r29->z = sp1C + (25.0 * sind(var_f27)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 4, var_r24 - 1, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[5]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[5]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[5]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[5]]; + var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); + sp20 = var_f28 = 25.0f; + sp1C = var_f26 = (0.5f * var_f24) - 25.0f; + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[5] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { + var_f27 = 90.0f + (90.0f * (var_r30 / 4.0f)); + var_r29->x = var_f30; + var_r29->y = sp20 + (25.0 * cosd(var_f27)); + var_r29->z = sp1C + (25.0 * sind(var_f27)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 5, var_r24 - 1, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[6]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[6]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[6]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[6]]; + var_f25 = var_f30 = -(0.5f * var_f24); + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = (0.5f * var_f24) - 25.0f; + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[6] != 0) { + for (var_r30 = 0; var_r30 < var_r31->unk_10C; var_r30++) { + for (var_r27 = 0; var_r27 < 5; var_r27++) { + var_f27 = 90.0f * (var_r27 / 4.0f); + var_r29->x = var_f25 - (25.0 * (cosd(var_f27) - 1.0)); + var_r29->y = var_f28; + var_r29->z = sp1C + (25.0 * sind(var_f27)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 6, 4, var_r22 - 1); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[7]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[7]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[7]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[7]]; + var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = 0.5f * var_f24; + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[7] != 0) { + for (var_r30 = 0; var_r30 < var_r31->unk_10C; var_r30++) { + for (var_r27 = 0; var_r27 < 5; var_r27++) { + var_f27 = 90.0f - (90.0f * (var_r27 / 4.0f)); + var_r29->x = var_f25 + (25.0 * cosd(var_f27)); + var_r29->y = var_f28; + var_r29->z = sp1C + (25.0 * (sind(var_f27) - 1.0)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 7, 4, var_r22 - 1); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[8]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[8]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[8]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[8]]; + var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[8] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { + var_f27 = 90.0f + (90.0f * (var_r30 / 4.0f)); + var_r29->x = var_f25 + 25.0 * cosd(var_f27); + var_r29->y = sp20 + (25.0 * sind(var_f27)); + var_r29->z = var_f26; + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f26 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f26 = sp1C; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 8, var_r24 - 1, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[9]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[9]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[9]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[9]]; + var_f25 = var_f30 = -(0.5f * var_f24 - 25.0f); + sp20 = var_f28 = 25.0f; + sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[9] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { + var_f27 = 180.0f + (90.0f * (var_r30 / 4.0f)); + var_r29->x = var_f25 + (25.0 * cosd(var_f27)); + var_r29->y = sp20 + (25.0 * sind(var_f27)); + var_r29->z = var_f26; + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f26 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f26 = sp1C; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 9, var_r24 - 1, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[10]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[10]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[10]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[10]]; + var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = (0.5f * var_f24) - 25.0f; + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[10] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { + var_f27 = 90.0f - (90.0f * (var_r30 / 4.0f)); + var_r29->x = var_f25 + (25.0 * cosd(var_f27)); + var_r29->y = sp20 + (25.0 * sind(var_f27)); + var_r29->z = var_f26; + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f26 -= var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f26 = sp1C; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0xA, var_r24 - 1, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[11]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[11]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[11]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[11]]; + var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; + sp20 = var_f28 = 25.0f; + sp1C = var_f26 = (0.5f * var_f24) - 25.0f; + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[11] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { + var_f27 = -(90.0f * (var_r30 / 4.0f)); + var_r29->x = var_f25 + (25.0 * cosd(var_f27)); + var_r29->y = sp20 + (25.0 * sind(var_f27)); + var_r29->z = var_f26; + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f26 -= var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f26 = sp1C; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0xB, var_r24 - 1, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[12]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[12]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[12]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[12]]; + var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[12] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { + var_f27 = 90.0f + (90.0f * (var_r30 / 4.0f)); + var_r29->x = var_f30; + var_r29->y = sp20 + (25.0 * sind(var_f27)); + var_r29->z = sp1C + (25.0 * cosd(var_f27)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 -= var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0xC, var_r24 - 1, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[13]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[13]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[13]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[13]]; + var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; + sp20 = var_f28 = 25.0f; + sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[13] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { + var_f27 = 180.0f + (90.0f * (var_r30 / 4.0f)); + var_r29->x = var_f30; + var_r29->y = sp20 + (25.0 * sind(var_f27)); + var_r29->z = sp1C + (25.0 * cosd(var_f27)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 -= var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0xD, var_r24 - 1, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[14]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[14]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[14]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[14]]; + var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[14] != 0) { + for (var_r30 = 0; var_r30 < var_r31->unk_10C; var_r30++) { + for (var_r27 = 0; var_r27 < 5; var_r27++) { + var_f27 = -(90.0f * (var_r27 / 4.0f)); + var_r29->x = var_f25 + (25.0 * cosd(var_f27)); + var_r29->y = var_f28; + var_r29->z = sp1C + (25.0 * sind(var_f27)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0xE, 4, var_r22 - 1); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[15]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[15]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[15]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[15]]; + var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[15] != 0) { + for (var_r30 = 0; var_r30 < var_r31->unk_10C; var_r30++) { + for (var_r27 = 0; var_r27 < 5; var_r27++) { + var_f27 = -90.0f - (90.0f * (var_r27 / 4.0f)); + var_r29->x = var_f25 + (25.0 * cosd(var_f27)); + var_r29->y = var_f28; + var_r29->z = sp1C + (25.0 * sind(var_f27)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0xF, 4, var_r22 - 1); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[16]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[16]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[16]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[16]]; + var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = (0.5f * var_f24) - 25.0f; + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[16] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < 5; var_r27++) { + var_f27 = 90.0f * (var_r27 / 4.0f); + var_f22 = 90.0f * (var_r30 / 4.0f); + var_r29->x = var_f25 - (25.0 * cosd(var_f27) * sind(var_f22)); + var_r29->y = sp20 + (25.0 * cosd(var_f22)); + var_r29->z = sp1C + (25.0 * sind(var_f27) * sind(var_f22)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0x10, 4, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[17]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[17]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[17]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[17]]; + var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = (0.5f * var_f24) - 25.0f; + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[17] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < 5; var_r27++) { + var_f27 = 90.0f - (90.0f * (var_r27 / 4.0f)); + var_f22 = -(90.0f * (var_r30 / 4.0f)); + var_r29->x = var_f25 + (25.0 * cosd(var_f27) * -sind(var_f22)); + var_r29->y = sp20 + (25.0 * cosd(var_f22)); + var_r29->z = sp1C + (25.0 * sind(var_f27) * -sind(var_f22)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0x11, 4, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[18]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[18]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[18]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[18]]; + var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); + sp20 = var_f28 = 25.0f; + sp1C = var_f26 = (0.5f * var_f24) - 25.0f; + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[18] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < 5; var_r27++) { + var_f27 = 90.0f * (var_r27 / 4.0f); + var_f22 = 90.0f + (90.0f * (var_r30 / 4.0f)); + var_r29->x = var_f25 - (25.0 * cosd(var_f27) * sind(var_f22)); + var_r29->y = sp20 + (25.0 * cosd(var_f22)); + var_r29->z = sp1C + (25.0 * sind(var_f27) * sind(var_f22)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0x12, 4, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[19]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[19]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[19]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[19]]; + var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; + sp20 = var_f28 = 25.0f; + sp1C = var_f26 = (0.5f * var_f24) - 25.0f; + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[19] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < 5; var_r27++) { + var_f27 = 90.0f * (var_r27 / 4.0f); + var_f22 = 90.0f * (var_r30 / 4.0f); + var_r29->x = var_f25 + (25.0 * cosd(var_f27) * sind(var_f22)); + var_r29->y = sp20 - (25.0 * cosd(var_f22)); + var_r29->z = sp1C + (25.0 * sind(var_f27) * sind(var_f22)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0x13, 4, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[20]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[20]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[20]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[20]]; + var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[20] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < 5; var_r27++) { + var_f27 = 180.0f + (90.0f * (var_r27 / 4.0f)); + var_f22 = 90.0f * (var_r30 / 4.0f); + var_r29->x = var_f25 - (25.0 * cosd(var_f27) * sind(var_f22)); + var_r29->y = sp20 + (25.0 * cosd(var_f22)); + var_r29->z = sp1C + (25.0 * sind(var_f27) * sind(var_f22)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0x14, 4, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[21]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[21]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[21]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[21]]; + var_f25 = var_f30 = -(0.5f * var_f24 - 25.0f); + sp20 = var_f28 = sp8 - 25.0f; + sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[21] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < 5; var_r27++) { + var_f27 = 270.0f - (90.0f * (var_r27 / 4.0f)); + var_f22 = -(90.0f * (var_r30 / 4.0f)); + var_r29->x = var_f25 + (cosd(var_f27) * 25.0 * -sind(var_f22)); + var_r29->y = sp20 + 25.0 * cosd(var_f22); + var_r29->z = sp1C + (25.0 * sind(var_f27) * -sind(var_f22)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0x15, 4, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[22]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[22]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[22]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[22]]; + var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; + sp20 = var_f28 = 25.0f; + sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[22] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < 5; var_r27++) { + var_f27 = 180.0f + (90.0f * (var_r27 / 4.0f)); + var_f22 = 90.0f + (90.0f * (var_r30 / 4.0f)); + var_r29->x = var_f25 - (25.0 * cosd(var_f27) * sind(var_f22)); + var_r29->y = sp20 + (25.0 * cosd(var_f22)); + var_r29->z = sp1C + (25.0 * sind(var_f27) * sind(var_f22)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0x16, 4, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[23]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[23]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[23]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[23]]; + var_f25 = var_f30 = -((var_f24 * 0.5f) - 25.0f); + sp20 = var_f28 = 25.0f; + sp1C = var_f26 = -((var_f24 * 0.5f) - 25.0f); + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp10 / (var_r22 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[23] != 0) { + for (var_r30 = 0; var_r30 < 5; var_r30++) { + for (var_r27 = 0; var_r27 < 5; var_r27++) { + var_f27 = 180.0f + (90.0f * (var_r27 / 4.0f)); + var_f22 = 90.0f * (var_r30 / 4.0f); + var_r29->x = var_f25 + (25.0 * cosd(var_f27) * sind(var_f22)); + var_r29->y = sp20 - (25.0 * cosd(var_f22)); + var_r29->z = sp1C + (25.0 * sind(var_f27) * sind(var_f22)); + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f28 -= var_f18; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0x17, 4, 4); + } + var_r29 = &var_r31->unk_17C[var_r31->unk_144[24]]; + var_r26 = &var_r31->unk_188[var_r31->unk_144[24]]; + var_r28 = &var_r31->unk_184[var_r31->unk_144[24]]; + var_r25 = &var_r31->unk_178[var_r31->unk_144[24]]; + var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); + sp20 = var_f28 = 0.0f; + sp1C = var_f26 = (0.5f * var_f24) - 25.0f; + var_f19 = var_f31 = 0.0f; + sp18 = var_f29 = 0.0f; + var_f23 = sp14 / (var_r24 - 1); + var_f18 = sp14 / (var_r24 - 1); + var_f21 = 1.0f / (var_r31->unk_10E - 1); + var_f20 = 1.0f / (var_r31->unk_10E - 1); + if (var_r31->unk_112[0x18] != 0) { + for (var_r30 = 0; var_r30 < var_r31->unk_10E; var_r30++) { + for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { + var_r29->x = var_f30; + var_r29->y = var_f28; + var_r29->z = var_f26; + var_r28->x = var_f31; + var_r28->y = var_f29; + var_f30 += var_f23; + var_f31 += var_f21; + var_r29++; + var_r26++; + var_r28++; + var_r25++; + } + var_f30 = var_f25; + var_f31 = var_f19; + var_f26 = var_f26 - var_f23; + var_f29 += var_f20; + } + fn_1_D9A8(var_r31, var_r23, 0x18, var_r24 - 1, var_r24 - 1); + } + for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { + for (var_r27 = 0; var_r27 < var_r30; var_r27++) { + var_f30 = var_r31->unk_17C[var_r30].x - var_r31->unk_17C[var_r27].x; + var_f28 = var_r31->unk_17C[var_r30].y - var_r31->unk_17C[var_r27].y; + var_f26 = var_r31->unk_17C[var_r30].z - var_r31->unk_17C[var_r27].z; + sp24 = (var_f26 * var_f26) + ((var_f30 * var_f30) + (var_f28 * var_f28)); + if (sp24 < 10.0f) { + var_r31->unk_178[var_r30] = var_r27; + if (var_r31->unk_178[var_r27] != -1) { + var_r31->unk_178[var_r30] = var_r31->unk_178[var_r27]; + } + break; + } + } + if (var_r27 >= var_r30) { + var_r31->unk_178[var_r30] = -1; + } + } + memcpy(var_r31->unk_180, var_r31->unk_17C, var_r31->unk_110 * 0xC); + memcpy(var_r31->unk_198, &var_r31->unk_180[var_r31->unk_144[0]], var_r31->unk_112[0] * 0xC); + var_r31->unk_19C = 0; + fn_1_DB44(var_r31, var_r23); + fn_1_DE3C(var_r31, var_r23); + var_f31 = sqrtf((0.5f * sp8 * (0.5f * sp8)) + ((0.5f * var_f24 * (0.5f * var_f24)) + (0.5f * var_f24 * (0.5f * var_f24)))); + for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { + var_f30 = var_r31->unk_17C[var_r30].x; + var_f28 = var_r31->unk_17C[var_r30].y - (0.5f * sp8); + var_f26 = var_r31->unk_17C[var_r30].z; + sp24 = sqrtf((var_f26 * var_f26) + ((var_f30 * var_f30) + (var_f28 * var_f28))); + var_f27 = sp24; + sp24 = 1.0f - (sp24 / var_f31); + if (var_f27 != 0.0f) { + var_f22 = 1.0f / var_f27; + } + else { + var_f22 = 0.0; + } + var_r31->unk_194[var_r30].x = sp24 * (var_f22 * var_r31->unk_17C[var_r30].x); + var_r31->unk_194[var_r30].y = sp24 * (var_f22 * var_r31->unk_17C[var_r30].y); + var_r31->unk_194[var_r30].z = sp24 * (var_f22 * var_r31->unk_17C[var_r30].z); + } + for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { + if ((((var_r31->unk_112[6] <= 0) || (var_r30 < var_r31->unk_144[6]) || (var_r30 >= (var_r31->unk_144[6] + var_r31->unk_112[6]))) + && ((var_r31->unk_112[7] <= 0) || (var_r30 < var_r31->unk_144[7]) || (var_r30 >= (var_r31->unk_144[7] + var_r31->unk_112[7]))) + && ((var_r31->unk_112[0xE] <= 0) || (var_r30 < var_r31->unk_144[0xE]) || (var_r30 >= (var_r31->unk_144[0xE] + var_r31->unk_112[0xE]))) + && ((var_r31->unk_112[0xF] <= 0) || (var_r30 < var_r31->unk_144[0xF]) || (var_r30 >= (var_r31->unk_144[0xF] + var_r31->unk_112[0xF]))) + && ((var_r31->unk_112[4] <= 0) || (var_r30 < var_r31->unk_144[4]) || (var_r30 >= (var_r31->unk_144[4] + var_r31->unk_112[4]))) + && ((var_r31->unk_112[8] <= 0) || (var_r30 < var_r31->unk_144[8]) || (var_r30 >= (var_r31->unk_144[8] + var_r31->unk_112[8]))) + && ((var_r31->unk_112[0xA] <= 0) || (var_r30 < var_r31->unk_144[0xA]) || (var_r30 >= (var_r31->unk_144[0xA] + var_r31->unk_112[0xA]))) + && ((var_r31->unk_112[0xC] <= 0) || (var_r30 < var_r31->unk_144[0xC]) || (var_r30 >= (var_r31->unk_144[0xC] + var_r31->unk_112[0xC]))) + && ((var_r31->unk_112[0x10] <= 0) || (var_r30 < var_r31->unk_144[0x10]) + || (var_r30 >= (var_r31->unk_144[0x10] + var_r31->unk_112[0x10]))) + && ((var_r31->unk_112[0x11] <= 0) || (var_r30 < var_r31->unk_144[0x11]) + || (var_r30 >= (var_r31->unk_144[0x11] + var_r31->unk_112[0x11]))) + && ((var_r31->unk_112[0x14] <= 0) || (var_r30 < var_r31->unk_144[0x14]) + || (var_r30 >= (var_r31->unk_144[0x14] + var_r31->unk_112[0x14]))) + && ((var_r31->unk_112[0x15] <= 0) || (var_r30 < var_r31->unk_144[0x15]) + || (var_r30 >= (var_r31->unk_144[0x15] + var_r31->unk_112[0x15]))) + && (var_r30 >= var_r31->unk_144[4])) + || (var_r31->unk_178[var_r30] != -1)) { + var_r31->unk_18C[var_r30].x = var_r31->unk_18C[var_r30].y = var_r31->unk_18C[var_r30].z = 0.0; + var_r31->unk_190[var_r30][0] = var_r31->unk_190[var_r30][1] = 0; + var_r31->unk_190[var_r30][2] = 0; + } + else if (((var_r31->unk_112[0] > 0) && (var_r30 >= var_r31->unk_144[0]) && (var_r30 < (var_r31->unk_144[0] + var_r31->unk_112[0]))) + || ((var_r31->unk_112[4] > 0) && (var_r30 >= var_r31->unk_144[4]) && (var_r30 < (var_r31->unk_144[4] + var_r31->unk_112[4]))) + || ((var_r31->unk_112[8] > 0) && (var_r30 >= var_r31->unk_144[8]) && (var_r30 < (var_r31->unk_144[8] + var_r31->unk_112[8]))) + || ((var_r31->unk_112[0xA] > 0) && (var_r30 >= var_r31->unk_144[0xA]) && (var_r30 < (var_r31->unk_144[0xA] + var_r31->unk_112[0xA]))) + || ((var_r31->unk_112[0xC] > 0) && (var_r30 >= var_r31->unk_144[0xC]) && (var_r30 < (var_r31->unk_144[0xC] + var_r31->unk_112[0xC]))) + || ((var_r31->unk_112[0x10] > 0) && (var_r30 >= var_r31->unk_144[0x10]) && (var_r30 < (var_r31->unk_144[0x10] + var_r31->unk_112[0x10]))) + || ((var_r31->unk_112[0x11] > 0) && (var_r30 >= var_r31->unk_144[0x11]) && (var_r30 < (var_r31->unk_144[0x11] + var_r31->unk_112[0x11]))) + || ((var_r31->unk_112[0x14] > 0) && (var_r30 >= var_r31->unk_144[0x14]) && (var_r30 < (var_r31->unk_144[0x14] + var_r31->unk_112[0x14]))) + || ((var_r31->unk_112[0x15] > 0) && (var_r30 >= var_r31->unk_144[0x15]) + && (var_r30 < (var_r31->unk_144[0x15] + var_r31->unk_112[0x15])))) { + *var_r31->unk_190[var_r30] = var_r31->unk_190[var_r30][1] = 0; + sp24 = sqrtf((var_r31->unk_17C[var_r30].x * var_r31->unk_17C[var_r30].x) + (var_r31->unk_17C[var_r30].z * var_r31->unk_17C[var_r30].z)); + var_f27 = sp24; + sp24 = 1.0f - (sp24 / sqrtf(var_f24 * var_f24)); + var_r31->unk_18C[var_r30].y = -(180.0f * sp24); + var_f27 = sqrtf(var_f27); + if (var_f27 != 0.0f) { + var_f22 = 1.0f / var_f27; + } + else { + var_f22 = 0.0; + } + var_r31->unk_18C[var_r30].x = sind((180.0f * (var_f22 * var_r31->unk_17C[var_r30].x))); + var_r31->unk_18C[var_r30].z = sind((180.0f * (var_f22 * var_r31->unk_17C[var_r30].z))); + var_r31->unk_18C[var_r30].x *= 20.0f * -(1.0f - sp24); + var_r31->unk_18C[var_r30].z *= (20.0f * -(1.0f - sp24)); + var_r31->unk_190[var_r30][2] = 1; + } + else { + sp24 = sqrtf((var_r31->unk_17C[var_r30].x * var_r31->unk_17C[var_r30].x) + (var_r31->unk_17C[var_r30].z * var_r31->unk_17C[var_r30].z)); + if (sp24 != 0.0f) { + sp24 = 1.0f / sp24; + } + else { + sp24 = 0.0f; + } + var_r31->unk_18C[var_r30].x = -(sp24 * var_r31->unk_17C[var_r30].x); + var_r31->unk_18C[var_r30].z = -(sp24 * var_r31->unk_17C[var_r30].z); + var_r31->unk_18C[var_r30].y = 0.0; + var_f27 = 180.0 + (180.0 * (atan2(var_r31->unk_17C[var_r30].x, var_r31->unk_17C[var_r30].z) / 3.141592653589793)); + if (var_f27 > 360.0f) { + var_f27 = fmod(var_f27, 360.0); + } + else if (var_f27 < 0.0f) { + var_f27 += 360.0f; + } + var_f27 = 255.0f * (0.0027777778f * var_f27); + if (var_f27 >= 255.0f) { + var_f27 = 255.0f; + } + else if (var_f27 < 0.0f) { + var_f27 = 0.0; + } + var_f22 = 64.0f * (var_r31->unk_17C[var_r30].y / sp8); + if (var_f22 >= 63.0f) { + var_f22 = 63.0f; + } + else if (var_f22 < 0.0f) { + var_f22 = 0.0; + } + var_r31->unk_190[var_r30][0] = var_f27; + var_r31->unk_190[var_r30][1] = var_f22; + var_r31->unk_190[var_r30][2] = 2; + } + } + DCFlushRangeNoSync(var_r31->unk_180, var_r31->unk_110 * 0xC); + DCFlushRangeNoSync(var_r31->unk_17C, var_r31->unk_110 * 0xC); + DCFlushRangeNoSync(var_r31->unk_188, var_r31->unk_110 * 0xC); + DCFlushRangeNoSync(var_r31->unk_184, var_r31->unk_110 * 8); + DCFlushRangeNoSync(var_r31->unk_178, var_r31->unk_110 * 2); + PPCSync(); + for (var_r21 = 0; var_r21 < 0x19; var_r21++) { + if ((var_r31->unk_208[var_r21] != 0) && var_r31->unk_1A4[var_r21] && (var_r31->unk_112[var_r21] != 0)) { + var_r17 = HuMemDirectMallocNum(HEAP_DATA, 0x4000, var_r23->unk_48); + spC = var_r17; + (void)var_r18; + DCFlushRange(var_r17, 0x4000); + GXBeginDisplayList(spC, 0x4000); + GXBegin(GX_QUADS, GX_VTXFMT0, var_r31->unk_208[var_r21] * 4); + var_r20 = var_r31->unk_1A4[var_r21]; + for (var_r30 = 0; var_r30 < var_r31->unk_208[var_r21]; var_r30++) { + for (var_r27 = 0; var_r27 < 4; var_r27++) { + if (var_r31->unk_178[var_r20[var_r27]] == -1) { + var_r18 = var_r20[var_r27]; + } + else { + var_r18 = var_r31->unk_178[var_r20[var_r27]]; + } + GXPosition1x16(var_r18); + GXNormal1x16(var_r18); + GXColor1x16(0); + GXTexCoord1x16(var_r20[var_r27]); + } + var_r20 += 5; + } + var_r31->unk_244[var_r21] = GXEndDisplayList(); + if (var_r31->unk_244[var_r21] >= 0x4000) { + OSReport("ERROR! GList test size over! \n"); + } + var_r31->unk_2A8[var_r21] = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_244[var_r21], var_r23->unk_48); + memcpy(var_r31->unk_2A8[var_r21], var_r17, var_r31->unk_244[var_r21]); + DCFlushRange(var_r31->unk_2A8[var_r21], var_r31->unk_244[var_r21]); + HuMemDirectFree(var_r17); + } + } + return var_r19; +} + +void fn_1_D9A8(M425DllUnkStruct4 *var_r31, ModelData *var_r24, s32 var_r30, s32 var_r26, s32 var_r25) +{ + s16 *var_r29; + s32 var_r28; + s32 var_r27; + + var_r31->unk_208[var_r30] = var_r26 * var_r25; + var_r31->unk_1A4[var_r30] = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_208[var_r30] * 0xA, var_r24->unk_48); + memset(var_r31->unk_1A4[var_r30], 0, var_r31->unk_208[var_r30] * 0xA); + var_r29 = var_r31->unk_1A4[var_r30]; + for (var_r28 = 0; var_r28 < var_r25; var_r28++) { + for (var_r27 = 0; var_r27 < var_r26; var_r27++) { + var_r29[0] = var_r31->unk_144[var_r30] + (var_r26 + 1) * var_r28 + var_r27; + var_r29[1] = var_r31->unk_144[var_r30] + (var_r26 + 1) * var_r28 + (var_r27 + 1); + var_r29[2] = var_r31->unk_144[var_r30] + (var_r26 + 1) * (var_r28 + 1) + (var_r27 + 1); + var_r29[3] = var_r31->unk_144[var_r30] + (var_r26 + 1) * (var_r28 + 1) + var_r27; + var_r29 += 5; + } + } + DCFlushRangeNoSync(var_r31->unk_1A4[var_r30], var_r31->unk_208[var_r30] * 0xA); + PPCSync(); +} + +void fn_1_DB44(M425DllUnkStruct4 *arg0, ModelData *model) +{ + float var_f31; + float var_f30; + float var_f29; + float var_f28; + s16 *var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + + for (var_r30 = 0; var_r30 < 0x19; var_r30++) { + if ((arg0->unk_208[var_r30] != 0) && arg0->unk_1A4[var_r30]) { + for (var_r31 = arg0->unk_1A4[var_r30], var_r29 = 0; var_r29 < arg0->unk_208[var_r30]; var_r29++, var_r31 += 0x5) { + for (var_r28 = 0; var_r28 < 4; var_r28++) { + if (arg0->unk_178[var_r31[var_r28]] != -1) { + var_r31[var_r28] = arg0->unk_178[var_r31[var_r28]]; + } + } + } + } + } + for (var_r30 = 0; var_r30 < 0x19; var_r30++) { + if ((arg0->unk_208[var_r30] != 0) && arg0->unk_1A4[var_r30]) { + for (var_r31 = arg0->unk_1A4[var_r30], var_r29 = 0; var_r29 < arg0->unk_208[var_r30]; var_r29++, var_r31 += 0x5) { + var_f31 = arg0->unk_17C[var_r31[0]].x - arg0->unk_17C[var_r31[1]].x; + var_f30 = arg0->unk_17C[var_r31[0]].y - arg0->unk_17C[var_r31[1]].y; + var_f29 = arg0->unk_17C[var_r31[0]].z - arg0->unk_17C[var_r31[1]].z; + var_f28 = (var_f29 * var_f29) + ((var_f31 * var_f31) + (var_f30 * var_f30)); + if (var_f28 < 10.0f) { + var_r31[4] = 1; + } + else { + var_f31 = arg0->unk_17C[var_r31[0]].x - arg0->unk_17C[var_r31[2]].x; + var_f30 = arg0->unk_17C[var_r31[0]].y - arg0->unk_17C[var_r31[2]].y; + var_f29 = arg0->unk_17C[var_r31[0]].z - arg0->unk_17C[var_r31[2]].z; + var_f28 = (var_f29 * var_f29) + ((var_f31 * var_f31) + (var_f30 * var_f30)); + if (var_f28 < 10.0f) { + var_r31[4] = 2; + } + else { + var_r31[4] = 0; + } + } + } + } + } +} + +void fn_1_DE3C(M425DllUnkStruct4 *arg0, ModelData *model) +{ + Vec sp20; + Vec sp14; + Vec sp8; + s32 var_r30; + s32 var_r29; + s16 *var_r28; + s32 var_r27; + s32 var_r26; + s32 var_r25; + s32 var_r24; + + memset(arg0->unk_188, 0, arg0->unk_110 * sizeof(Vec)); + for (var_r30 = 0; var_r30 < arg0->unk_240; var_r30++) { + if ((arg0->unk_208[var_r30] != 0) && arg0->unk_1A4[var_r30]) { + for (var_r28 = arg0->unk_1A4[var_r30], var_r24 = 0; var_r24 < arg0->unk_208[var_r30]; var_r24++, var_r28 += 5) { + switch (var_r28[4]) { + case 1: + var_r27 = 0; + var_r29 = 2; + var_r26 = 3; + var_r25 = 1; + break; + case 2: + var_r27 = 0; + var_r29 = 1; + var_r26 = 3; + var_r25 = 2; + break; + default: + var_r27 = 0; + var_r29 = 1; + var_r26 = 2; + var_r25 = 3; + break; + } + var_r27 = var_r28[var_r27]; + var_r29 = var_r28[var_r29]; + var_r26 = var_r28[var_r26]; + var_r25 = var_r28[var_r25]; + sp14.x = arg0->unk_180[var_r29].x - arg0->unk_180[var_r27].x; + sp14.y = arg0->unk_180[var_r29].y - arg0->unk_180[var_r27].y; + sp14.z = arg0->unk_180[var_r29].z - arg0->unk_180[var_r27].z; + sp8.x = arg0->unk_180[var_r26].x - arg0->unk_180[var_r29].x; + sp8.y = arg0->unk_180[var_r26].y - arg0->unk_180[var_r29].y; + sp8.z = arg0->unk_180[var_r26].z - arg0->unk_180[var_r29].z; + PSVECCrossProduct(&sp14, &sp8, &sp20); + sp20.x *= -1.0f; + sp20.y *= -1.0f; + sp20.z *= -1.0f; + arg0->unk_188[var_r27].x += sp20.x; + arg0->unk_188[var_r27].y += sp20.y; + arg0->unk_188[var_r27].z += sp20.z; + arg0->unk_188[var_r29].x += sp20.x; + arg0->unk_188[var_r29].y += sp20.y; + arg0->unk_188[var_r29].z += sp20.z; + arg0->unk_188[var_r26].x += sp20.x; + arg0->unk_188[var_r26].y += sp20.y; + arg0->unk_188[var_r26].z += sp20.z; + arg0->unk_188[var_r25].x += sp20.x; + arg0->unk_188[var_r25].y += sp20.y; + arg0->unk_188[var_r25].z += sp20.z; + } + } + } + for (var_r30 = 0; var_r30 < arg0->unk_110; var_r30++) { + PSVECNormalize(&arg0->unk_188[var_r30], &arg0->unk_188[var_r30]); + } +} + +s32 lbl_1_data_150[3][2] = { { 0x638, 0x63B }, { 0x639, 0x63C }, { 0x63A, 0x63D } }; +GXColor lbl_1_data_168 = { 255, 255, 255, 255 }; +Mtx lbl_1_data_16C = { + { 0.5f, 0.0f, 0.0f, -0.5f }, + { 0.0f, 0.5f, 0.0f, -0.5f }, + { 0.0f, 0.0f, 0.5f, -0.5f }, +}; +Vec lbl_1_data_19C[4] = { + { -0.5f, 0.5f, 0.0f }, + { 0.5f, 0.5f, 0.0f }, + { 0.5f, -0.5f, 0.0f }, + { -0.5f, -0.5f, 0.0f }, +}; +Vec2f lbl_1_data_1CC[4] = { + { 0.0f, 0.0f }, + { 0.25f, 0.0f }, + { 0.25f, 0.25f }, + { 0.0f, 0.25f }, +}; + +void fn_1_E210(s32 arg0) +{ + Vec sp8; + float var_f31; + float var_f30; + float var_f29; + M425DllUnkStruct4 *var_r31; + s32 var_r30; + s32 var_r29; + LightData *var_r28; + ModelData *var_r27; + s32 var_r26; + + if (lbl_1_bss_6EC) { + var_r27 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; + var_r31 = var_r27->unk_120; + for (var_r30 = 0, var_f31 = 0.0f; var_r30 < 6; var_r30++) { + if ((var_r31->unk_84[var_r30] == -1) || (var_r31->unk_9C[var_r30] < 0.0f)) { + var_r31->unk_84[var_r30] = -1; + var_r31->unk_9C[var_r30] = 0.0f; + } + else { + var_f31 += var_r31->unk_9C[var_r30]; + for (var_r29 = 0; var_r29 < 5; var_r29++) { + if (var_r31->unk_3C[var_r29] == var_r31->unk_84[var_r30]) { + break; + } + } + if (var_r29 >= 5) { + for (var_r29 = 0; var_r29 < 5; var_r29++) { + if ((var_r31->unk_3C[var_r29] == -1) && (var_r31->unk_54[var_r29] <= 0.0f)) { + break; + } + } + } + if ((var_r29 < 5) && (var_r31->unk_54[var_r29] < var_r31->unk_9C[var_r30])) { + var_r31->unk_3C[var_r29] = var_r31->unk_84[var_r30]; + var_r31->unk_54[var_r29] = var_r31->unk_9C[var_r30]; + var_r31->unk_6C[var_r29] = var_r31->unk_B4[var_r30]; + } + var_r31->unk_84[var_r30] = -1; + var_r31->unk_9C[var_r30] = 0.0f; + var_r31->unk_B4[var_r30] = 0; + } + } + for (var_r30 = 0, var_r29 = 0, var_r31->unk_14 = 0.0f; var_r30 < 6; var_r30++) { + if ((var_r31->unk_3C[var_r30] != -1) && (var_r31->unk_54[var_r30] > 0.0f)) { + var_r31->unk_14 += 0.8f * var_r31->unk_54[var_r30]; + var_r29++; + } + } + + for (var_r30 = 0, var_r29 = 0, var_r31->unk_20 = 0.0f; var_r30 < 6; var_r30++) { + if ((var_r31->unk_3C[var_r30] != -1) && (var_r31->unk_54[var_r30] > 0.0f) && (var_r31->unk_6C[var_r30] != 0)) { + var_r31->unk_20 += 0.8f * var_r31->unk_54[var_r30]; + var_r29++; + } + } + if (var_r29 != 0) { + var_r31->unk_18 = 20.0f * (var_r31->unk_20 * var_r31->unk_20); + var_r31->unk_08 -= var_r31->unk_18; + if (var_r31->unk_08 < 0.0f) { + var_r31->unk_08 = 0.0f; + } + if ((var_r31->unk_18 > var_r31->unk_1C) && (var_r31->unk_18 >= 0.0f)) { + if (var_r31->unk_18 >= 13.200000000000001) { + var_r26 = HuAudFXPlay(lbl_1_data_150[2][arg0]); + } + else if (var_r31->unk_18 >= 6.6000000000000005) { + var_r26 = HuAudFXPlay(lbl_1_data_150[1][arg0]); + } + else { + var_r26 = HuAudFXPlay(lbl_1_data_150[0][arg0]); + } + var_f30 = var_r31->unk_08 / 1000.0f; + if (var_r26 != -1) { + HuAudFXPitchSet(var_r26, (s32)(8191.0f * (1.0f - var_f30))); + } + } + } + else { + var_r31->unk_18 = 0.0f; + } + var_r31->unk_1C = var_r31->unk_18; + if (var_r31->unk_2C != 0) { + if (++var_r31->unk_28 >= var_r31->unk_2C) { + var_r31->unk_2C = var_r31->unk_28 = 0; + var_r31->unk_30 = 0.0f; + } + } + if ((var_r31->unk_E0 != var_r31->unk_E8) || (var_r31->unk_E4 != var_r31->unk_EC)) { + sp8.x = sind(var_r31->unk_E4) * cosd(var_r31->unk_E0); + sp8.z = cosd(var_r31->unk_E4) * cosd(var_r31->unk_E0); + sp8.y = sind(var_r31->unk_E0); + PSVECNormalize(&sp8, &sp8); + var_r28 = &Hu3DLocalLight[var_r27->unk_38[0]]; + var_r28->unk_1C.x = 1000.0f * sp8.x; + var_r28->unk_1C.y = 1000.0f * sp8.y; + var_r28->unk_1C.z = 1000.0f * sp8.z; + var_r28->unk_28.x = sp8.x; + var_r28->unk_28.y = sp8.y; + var_r28->unk_28.z = sp8.z; + var_r31->unk_E8 = var_r31->unk_E0; + var_r31->unk_EC = var_r31->unk_E4; + } + var_r31->unk_20 = 0.0f; + } +} + +void fn_1_E914(ModelData *var_r27, Mtx matrix) +{ + s32 spB4; + s32 spB0; + Mtx sp70; + Vec sp64; + Vec sp58; + float sp48; + float sp44; + float sp40; + float sp3C; + float sp38; + float sp34; + float sp30; + float sp2C; + float sp28; + + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + float var_f26; + float var_f25; + float var_f24; + float var_f19; + float var_f18; + + M425DllUnkStruct4 *var_r31; + s32 var_r30; + s32 var_r29; + s16 var_r28; + s32 var_r26; + + var_r31 = var_r27->unk_120; + if (var_r31->unk_2C != 0) { + var_f24 = (float)var_r31->unk_28 / var_r31->unk_2C; + var_r31->unk_30 = 0.30000001192092896 * cosd((90.0f * var_f24)); + sp40 = var_r31->unk_30 * (0.5 * sind((720.0f * var_f24))); + } + else { + sp40 = 0.0f; + } + if (var_r31->unk_0C != 0.0f) { + var_f19 = var_r31->unk_08 / var_r31->unk_0C; + } + else { + var_f19 = 1.0f; + } + var_r27->scale.y = var_r31->unk_DC = (0.100000024f + (0.9f * var_f19)) - sp40; + if (var_r31->unk_DC > 0.3f) { + sp3C = 1.0f - (-0.39999998f * ((var_r31->unk_DC - 0.3f) / 0.7f)); + } + else { + sp3C = 0.6f * (var_r31->unk_DC / 0.3f); + } + if (var_r31->unk_DC != 0.0f) { + sp3C /= var_r31->unk_DC; + } + else { + sp3C = 0.0f; + } + if (var_r31->unk_08 < 0.0f) { + sp3C = 0.0f; + } + if (var_f19 <= 0.3f) { + var_f24 = var_f19 / 0.3f; + var_r31->unk_E0 = 222.0f + (80.0f * var_f24); + } + var_f18 = 100.0f * var_r31->unk_14; + if (var_f19 > 0.85f) { + var_f18 += 100.0f * (4.0f * (var_f19 - 0.85f)); + } + if (var_f18 > 150.0f) { + var_f18 = 150.0f; + } + sp38 = 1.0f - var_f19; + if (var_f18 >= 0.0f) { + for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { + if (var_r31->unk_178[var_r30] == -1) { + var_r31->unk_180[var_r30].x = var_r31->unk_17C[var_r30].x + (var_f18 * var_r31->unk_194[var_r30].x); + var_r31->unk_180[var_r30].y = var_r31->unk_17C[var_r30].y + (var_f18 * var_r31->unk_194[var_r30].y); + var_r31->unk_180[var_r30].z = var_r31->unk_17C[var_r30].z + (var_f18 * var_r31->unk_194[var_r30].z); + } + } + } + else { + memcpy(var_r31->unk_180, var_r31->unk_17C, var_r31->unk_110 * 0xC); + } + var_r31->unk_14 = 0.0f; + for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { + if (!(var_f19 >= 1.0f) && (var_r31->unk_190[var_r30][2] != 0)) { + switch (var_r31->unk_190[var_r30][2]) { + case 1: + var_r31->unk_180[var_r30].x += sp38 * var_r31->unk_18C[var_r30].x; + var_r31->unk_180[var_r30].y += sp38 * var_r31->unk_18C[var_r30].y; + var_r31->unk_180[var_r30].z += sp38 * var_r31->unk_18C[var_r30].z; + break; + case 2: + var_f24 = lbl_1_bss_6E4[var_r31->unk_190[var_r30][0] + (var_r31->unk_190[var_r30][1] << 8)]; + var_f24 = 80.0f * (0.003921569f * (255.0f - var_f24) * sp38); + var_r31->unk_180[var_r30].x += var_f24 * var_r31->unk_18C[var_r30].x; + var_r31->unk_180[var_r30].y += var_f24 * var_r31->unk_18C[var_r30].y; + var_r31->unk_180[var_r30].z += var_f24 * var_r31->unk_18C[var_r30].z; + break; + } + } + } + for (var_r29 = 0, var_r28 = 0, var_f27 = var_f26 = var_f25 = 0.0f; var_r29 < 6; var_r29++) { + if ((var_r31->unk_54[var_r29] > 0.0f) || (var_r31->unk_3C[var_r29] != -1)) { + var_f27 += var_r31->unk_180[var_r31->unk_3C[var_r29]].x; + var_f25 += var_r31->unk_180[var_r31->unk_3C[var_r29]].z; + var_f26 += var_r31->unk_54[var_r29]; + var_r28++; + } + } + if (var_r28 >= 2) { + var_f27 /= var_r28; + var_f25 /= var_r28; + var_f26 /= var_r28; + mtxRot(sp70, 0.0f, var_r31->unk_D8, 0.0f); + var_f30 = var_r31->unk_CC.x + ((sp70[0][0] * var_f27) + (sp70[0][2] * var_f25)); + var_f31 = var_r31->unk_CC.z + ((sp70[2][0] * var_f27) + (sp70[2][2] * var_f25)); + fn_1_10EF8(var_r31->unk_00, 2, var_f30, var_f31); + var_r31->unk_50 = var_r31->unk_34; + var_r31->unk_54[5] = var_f26; + var_r31->unk_6C[5] = 0; + } + else { + var_r31->unk_50 = -1; + var_r31->unk_54[5] = 0.0f; + var_r31->unk_6C[5] = 0; + } + for (var_r29 = 0; var_r29 < 6; var_r29++) { + if ((var_r31->unk_54[var_r29] <= 0.0f) || (var_r31->unk_3C[var_r29] == -1)) { + var_r31->unk_3C[var_r29] = -1; + var_r31->unk_54[var_r29] = 0.0f; + var_r31->unk_6C[var_r29] = 0; + } + else { + var_f24 = 150.0f * var_r31->unk_54[var_r29] * sp3C; + sp44 = 50.0f * var_r31->unk_54[var_r29]; + if (sp44 > 15.000001f) { + sp44 = 15.000001f; + } + var_f27 = var_r31->unk_180[var_r31->unk_3C[var_r29]].x; + var_f26 = var_r31->unk_180[var_r31->unk_3C[var_r29]].y; + var_f25 = var_r31->unk_180[var_r31->unk_3C[var_r29]].z; + if (var_r29 != 5) { + for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { + if (var_r31->unk_178[var_r30] == -1) { + var_f30 = var_r31->unk_180[var_r30].x - var_f27; + var_f29 = var_r31->unk_DC * (var_r31->unk_180[var_r30].y - var_f26); + var_f31 = 0.425f * (var_r31->unk_180[var_r30].z - var_f25); + var_f28 = (var_f31 * var_f31) + ((var_f30 * var_f30) + (var_f29 * var_f29)); + if (var_f28 < 10000.0f) { + var_f28 = sqrtf((var_f31 * var_f31) + ((var_f30 * var_f30) + (var_f29 * var_f29))); + var_f28 = var_f28 * 0.01f; + var_r31->unk_180[var_r30].y -= (1.0f - var_f28) * var_f24; + if (var_r31->unk_180[var_r30].y < 1.0f) { + var_r31->unk_180[var_r30].y = 1.0f; + } + } + if (var_r31->unk_1A0[var_r30] != 0) { + var_f31 = var_r31->unk_180[var_r30].z - var_f25; + if (!(fabs(var_f31) > 100.0)) { + var_f28 = sqrtf((var_f30 * var_f30) + (var_f31 * var_f31)); + if (var_f28 < 200.0f) { + var_f28 = var_f28 * 0.005f; + var_r31->unk_180[var_r30].y += (sp44 * sind((90.0f * var_f28))); // is this right? + } + else if (var_f28 < 400.0f) { + var_f28 -= 200.0f; + var_f28 = var_f28 * 0.005f; + var_r31->unk_180[var_r30].y += (sp44 * cosd((90.0f * var_f28))); + } + } + } + } + } + } + else { + for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { + if ((var_r31->unk_178[var_r30] == -1) && ((var_r31->unk_F0[0] != var_r30) || (var_r31->unk_F0[1] != var_r30))) { + var_f30 = var_r31->unk_180[var_r30].x - var_f27; + var_f29 = var_r31->unk_DC * (var_r31->unk_180[var_r30].y - var_f26); + var_f31 = 0.425f * (var_r31->unk_180[var_r30].z - var_f25); + var_f28 = (var_f31 * var_f31) + ((var_f30 * var_f30) + (var_f29 * var_f29)); + if (var_f28 < 10000.0f) { + var_f28 = sqrtf((var_f31 * var_f31) + ((var_f30 * var_f30) + (var_f29 * var_f29))); + var_f28 = var_f28 * 0.01f; + var_r31->unk_180[var_r30].y -= (1.0f - var_f28) * var_f24; + if (var_r31->unk_180[var_r30].y < 1.0f) { + var_r31->unk_180[var_r30].y = 1.0f; + } + } + } + } + } + if (var_r29 < 5) { + if ((var_r31->unk_54[var_r29] -= 0.075f) <= 0.0f) { + var_r31->unk_54[var_r29] = 0.0f; + var_r31->unk_3C[var_r29] = -1; + var_r31->unk_6C[var_r29] = 0; + } + } + else { + var_r31->unk_54[var_r29] = 0.0f; + var_r31->unk_3C[var_r29] = -1; + var_r31->unk_6C[var_r29] = 0; + } + } + } + var_r31->unk_38 = 0; + memcpy(var_r31->unk_198, &var_r31->unk_180[var_r31->unk_144[0]], var_r31->unk_112[0] * 0xC); + var_r31->unk_19C = 0; + fn_1_DE3C(var_r31, var_r27); + if ((var_r31->unk_04 != -1) && (var_r31->unk_06 != -1)) { + mtxRot(sp70, 0.0f, var_r31->unk_D8, 0.0f); + sp70[1][0] *= var_r31->unk_DC; + sp70[1][1] *= var_r31->unk_DC; + sp70[1][2] *= var_r31->unk_DC; + var_f30 = var_r31->unk_180[var_r31->unk_06].x; + var_f29 = var_r31->unk_180[var_r31->unk_06].y; + var_f31 = var_r31->unk_180[var_r31->unk_06].z; + var_f27 = var_r31->unk_CC.x + ((sp70[0][2] * var_f31) + ((sp70[0][0] * var_f30) + (sp70[0][1] * var_f29))); + var_f26 = var_r31->unk_CC.y + ((sp70[1][2] * var_f31) + ((sp70[1][0] * var_f30) + (sp70[1][1] * var_f29))); + var_f25 = var_r31->unk_CC.z + ((sp70[2][2] * var_f31) + ((sp70[2][0] * var_f30) + (sp70[2][1] * var_f29))); + Hu3DModelPosSet(var_r31->unk_04, var_f27, var_f26, var_f25); + var_f30 = var_r31->unk_188[var_r31->unk_06].x; + var_f29 = var_r31->unk_188[var_r31->unk_06].y; + var_f31 = var_r31->unk_188[var_r31->unk_06].z; + sp64.x = var_f27 + (20.0f * var_f30); + sp64.y = var_f26 + (20.0f * var_f29); + sp64.z = var_f25 + (20.0f * var_f31); + sp48 = sqrtf((var_f30 * var_f30) + (var_f31 * var_f31)); + var_f27 = sp34 = atan2d(sp48, var_f29); + var_f26 = sp30 = atan2d(var_f30, var_f31); + var_f25 = sp2C = 0.0f; + Hu3DModelRotSet(var_r31->unk_04, var_f27, var_f26, var_f25); + var_r30 = (s32)(10.0f * var_r31->unk_18) / 40; + if (var_r30 > 0x10) { + var_r30 = 0x10; + } + for (var_r26 = 0; var_r26 < var_r30; var_r26++) { + var_f27 = sp34; + var_f26 = sp30; + var_f25 = sp2C; + var_f27 += 0.5f * ((s32)frand() % 48); + var_f30 = sind(var_f26) * sind(var_f27); + var_f31 = cosd(var_f26) * sind(var_f27); + var_f29 = cosd(var_f27); + sp28 = 12.0f - ((s32)frand() % 6); + sp58.x = var_f30; + sp58.y = var_f29; + sp58.z = var_f31; + fn_1_11454(&sp64, &sp58, 50.0f + (5.0f * var_r30), sp28); + } + } + DCFlushRangeNoSync(var_r31->unk_180, var_r31->unk_110 * 0xC); + DCFlushRangeNoSync(var_r31->unk_188, var_r31->unk_110 * 0xC); + PPCSync(); +} + +void fn_1_101C4(ModelData *var_r29, Mtx var_r28) +{ + Mtx sp50; + ROMtx sp20; + GXColor sp1C; + M425DllUnkStruct4 *var_r31; + s32 var_r30; + s16 var_r27; + + var_r31 = var_r29->unk_120; + GXLoadPosMtxImm(var_r28, 0); + PSMTXInvXpose(var_r28, sp50); + GXLoadNrmMtxImm(sp50, 0); + var_r27 = fn_1_115D4(var_r29, Hu3DCameraMtx, Hu3DCameraMtxXPose, 4.0f); + if (omPauseChk() == 0) { + fn_1_E914(var_r29, var_r28); + } + var_r29->scale.y = var_r31->unk_DC; + memcpy(sp50, lbl_1_data_16C, sizeof(lbl_1_data_16C)); + mtxRotCat(&sp50[0], CRot.x, CRot.y + var_r31->unk_D8, 180.0f); + GXLoadTexMtxImm(sp50, 0x36, GX_MTX2x4); + sp1C.a = lbl_1_bss_6D0; + GXSetTevColor(GX_TEVREG2, sp1C); + HuSprTexLoad(lbl_1_bss_6E0, 0, 0, GX_CLAMP, GX_CLAMP, GX_LINEAR); + HuSprTexLoad(lbl_1_bss_6DC, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR); + GXSetNumTevStages(1); + GXSetNumTexGens(1); + GXSetNumChans(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_NRM, 0x36, GX_FALSE, 0x7D); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP1, GX_COLOR0A0); + GXSetTevOp(GX_TEVSTAGE0, GX_REPLACE); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_RASC, GX_CC_TEXC, GX_CC_A2, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_RASA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + lbl_1_bss_6C8.r = var_r31->unk_23A.r; + lbl_1_bss_6C8.g = var_r31->unk_23A.g; + lbl_1_bss_6C8.b = var_r31->unk_23A.b; + lbl_1_bss_6C8.a = var_r31->unk_23A.a; + GXSetChanAmbColor(GX_COLOR0A0, lbl_1_bss_6C8); + GXSetChanMatColor(GX_COLOR0A0, lbl_1_data_168); + GXSetChanCtrl(GX_COLOR0A0, GX_TRUE, GX_SRC_REG, GX_SRC_REG, var_r27, GX_DF_CLAMP, GX_AF_SPEC); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetZMode(1, GX_LEQUAL, GX_FALSE); + GXSetZCompLoc(0); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + if (HmfInverseMtxF3X3(var_r28, sp50) == 0) { + PSMTXIdentity(sp50); + } + PSMTXReorder(sp50, sp20); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetArray(GX_VA_POS, var_r31->unk_180, 0xC); + GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0); + GXSetArray(GX_VA_NRM, var_r31->unk_188, 0xC); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetArray(GX_VA_CLR0, &var_r31->unk_23A, 4); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA6, 0); + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); + GXSetArray(GX_VA_TEX0, var_r31->unk_184, 8); + for (var_r30 = 0; var_r30 < var_r31->unk_240; var_r30++) { + if (var_r31->unk_2A8[var_r30] && var_r31->unk_244[var_r30] != 0 && var_r30 != 1) { + GXCallDisplayList(var_r31->unk_2A8[var_r30], var_r31->unk_244[var_r30]); + } + } + GXSetNumTevStages(2); + GXSetNumTexGens(2); + GXSetNumChans(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, GX_FALSE, 0x7D); + GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_NRM, 0x36, GX_FALSE, 0x7D); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR0A0); + GXSetTevOp(GX_TEVSTAGE0, GX_REPLACE); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_RASC, GX_CC_TEXC, GX_CC_TEXA, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_RASA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_TEXA); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevOp(GX_TEVSTAGE1, GX_REPLACE); + GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_CPREV, GX_CC_TEXC, GX_CC_A2, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_APREV, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + lbl_1_bss_6C8.r = var_r31->unk_23A.r; + lbl_1_bss_6C8.g = var_r31->unk_23A.g; + lbl_1_bss_6C8.b = var_r31->unk_23A.b; + lbl_1_bss_6C8.a = var_r31->unk_23A.a; + GXSetChanAmbColor(GX_COLOR0A0, lbl_1_bss_6C8); + GXSetChanMatColor(GX_COLOR0A0, lbl_1_data_168); + GXSetChanCtrl(GX_COLOR0A0, GX_TRUE, GX_SRC_REG, GX_SRC_REG, var_r27, GX_DF_CLAMP, GX_AF_SPEC); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE); + GXSetZCompLoc(0); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + GXClearVtxDesc(); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_ST, GX_RGBA6, 0); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetArray(GX_VA_POS, var_r31->unk_180, 0xC); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_TEX_S, GX_RGBA6, 0); + GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); + GXSetArray(GX_VA_NRM, var_r31->unk_188, 0xC); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_TEX_ST, GX_RGBA8, 0); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); + GXSetArray(GX_VA_CLR0, &var_r31->unk_23A, 4); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0); + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); + GXSetArray(GX_VA_TEX0, var_r31->unk_184, 8); + if (var_r31->unk_2A8[1] && (var_r31->unk_244[1] != 0)) { + GXCallDisplayList(var_r31->unk_2A8[1], var_r31->unk_244[1]); + } +} + +s32 fn_1_109EC(s32 arg0, s32 arg1, Vec *arg2, Vec *arg3, Vec *arg4, s32 arg5) +{ + float var_f31; + float var_f30; + M425DllUnkStruct4 *var_r31; + s32 var_r29; + ModelData *var_r26; + + if (!lbl_1_bss_6EC) { + return; + } + var_r26 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; + var_r31 = var_r26->unk_120; + if (var_r31->unk_0C != 0.0f) { + var_f30 = var_r31->unk_08 / var_r31->unk_0C; + } + else { + var_f30 = 1.0f; + } + var_r31->unk_24 = fn_1_10EF8(arg0, arg1, arg2->x, arg2->z); + arg4->x = arg2->x + arg3->x; + arg4->y = arg2->y + arg3->y; + arg4->z = arg2->z + arg3->z; + if ((arg4->y < var_r31->unk_24) && (arg3->y < 0.0f) && (var_r31->unk_34 >= 0)) { + var_f31 = -arg3->y; + if (var_f31 > 50.0f) { + var_f31 = 50.0f; + } + else if (var_f31 < 10.0f) { + var_f31 = 0.0f; + } + if ((var_f31 > 0.0f) && (arg5 != 0)) { + var_f31 = (var_f31 - 10.0f) / 40.0f; + var_r31->unk_20 += var_f31; + } + var_f31 = -arg3->y; + var_f31 = var_f31 * 0.02f; + if (var_r31->unk_34 >= 0) { + for (var_r29 = 0; var_r29 < var_r31->unk_38; var_r29++) { + if (var_r31->unk_84[var_r29] == var_r31->unk_34) { + break; + } + } + if (var_r29 >= var_r31->unk_38) { + var_r29 = var_r31->unk_38; + } + if (var_r29 < 6) { + var_r31->unk_84[var_r29] = var_r31->unk_34; + if (var_r31->unk_9C[var_r29] < var_f31) { + var_r31->unk_9C[var_r29] = var_f31; + var_r31->unk_B4[var_r29] = arg5; + } + var_r31->unk_38++; + } + } + arg4->y = var_r31->unk_24 - (150.0f * (var_f30 * var_f31)); + if (arg4->y < 1.0f) { + arg4->y = 1.0f; + } + return 1; + } + if (arg4->y < var_r31->unk_24) { + arg4->y = var_r31->unk_24; + } + return 0; +} + +float fn_1_10CF4(s32 arg0) +{ + ModelData *var_r31; + M425DllUnkStruct4 *var_r30; + + if (!lbl_1_bss_6EC) { + return; + } + var_r31 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; + var_r30 = var_r31->unk_120; + return var_r30->unk_08; +} + +void fn_1_10D54(s32 arg0, float arg8) +{ + ModelData *var_r31; + M425DllUnkStruct4 *var_r30; + + if (lbl_1_bss_6EC) { + var_r31 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; + var_r30 = var_r31->unk_120; + var_r30->unk_08 = arg8; + } +} + +void fn_1_10DB4(s32 arg0) +{ + M425DllUnkStruct4 *var_r31; + ModelData *var_r30; + + if (lbl_1_bss_6EC) { + var_r30 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; + var_r31 = var_r30->unk_120; + if (var_r31->unk_2C == 0) { + var_r31->unk_28 = 0; + var_r31->unk_2C = 0x28; + var_r31->unk_30 = 0.3f; + } + } +} + +void fn_1_10E3C(s32 arg0) +{ + M425DllUnkStruct4 *var_r31; + s32 var_r30; + ModelData *var_r29; + + if (lbl_1_bss_6EC) { + for (var_r30 = 0; var_r30 < 2; var_r30++) { + var_r29 = &Hu3DData[lbl_1_bss_6EC->model[var_r30]]; + var_r31 = var_r29->unk_120; + if (arg0 != 0) { + var_r31->unk_110 = var_r31->unk_144[0x18] + var_r31->unk_112[24]; + var_r31->unk_240 = 0x19; + } + else { + var_r31->unk_110 = var_r31->unk_144[0x17] + var_r31->unk_112[23]; + var_r31->unk_240 = 0x18; + } + } + } +} + +float fn_1_10EF8(s32 arg0, s32 arg1, float arg8, float arg9) +{ + Mtx spC; + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f25; + M425DllUnkStruct4 *var_r31; + Vec *var_r30; + s32 var_r29; + s32 var_r28; + ModelData *var_r26; + + if (!lbl_1_bss_6EC) { + return 0.0f; + } + var_r26 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; + var_r31 = var_r26->unk_120; + if ((arg1 >= 0) && (arg1 <= 2) && (var_r31->unk_F0[arg1] != -1)) { + var_r28 = var_r31->unk_F0[arg1]; + var_r31->unk_34 = var_r28; + if (var_r31->unk_19C == 0) { + return var_r31->unk_DC * var_r31->unk_198[var_r28].y; + } + return var_r31->unk_198[var_r28].y; + } + if (var_r31->unk_19C == 0) { + mtxRot(spC, 0.0f, var_r31->unk_D8, 0.0f); + spC[1][0] *= var_r31->unk_DC; + spC[1][1] *= var_r31->unk_DC; + spC[1][2] *= var_r31->unk_DC; + for (var_r29 = 0, var_r30 = var_r31->unk_198; var_r29 < var_r31->unk_112[0]; var_r29++, var_r30++) { + var_f31 = (spC[0][2] * var_r30->z) + ((spC[0][0] * var_r30->x) + (spC[0][1] * var_r30->y)); + var_f25 = (spC[1][2] * var_r30->z) + ((spC[1][0] * var_r30->x) + (spC[1][1] * var_r30->y)); + var_f30 = (spC[2][2] * var_r30->z) + ((spC[2][0] * var_r30->x) + (spC[2][1] * var_r30->y)); + var_r30->x = var_f31; + var_r30->y = var_f25; + var_r30->z = var_f30; + } + var_r31->unk_19C = 1; + } + arg8 -= var_r31->unk_CC.x; + arg9 -= var_r31->unk_CC.z; + var_f28 = 10000.0f; + var_r28 = -1; + for (var_r29 = 0, var_r30 = var_r31->unk_198; var_r29 < var_r31->unk_112[0]; var_r29++, var_r30++) { + var_f31 = arg8 - var_r30->x; + var_f30 = arg9 - var_r30->z; + if (!(fabs(var_f31) > 100.0)) { + if (!(fabs(var_f30) > 100.0)) { + var_f29 = (var_f31 * var_f31) + (var_f30 * var_f30); + if (var_f29 < var_f28) { + var_r28 = var_r29; + var_f28 = var_f29; + } + } + } + } + (void)var_r29; + var_r31->unk_34 = var_r28; + if ((arg1 >= 0) && (arg1 <= 2)) { + var_r31->unk_F0[arg1] = var_r28; + } + if (var_r28 >= 0) { + return var_r31->unk_198[var_r28].y; + } + return 0.0f; +} + +void fn_1_11284(void) +{ + lbl_1_bss_6D8 = HuSprAnimRead(HuDataReadNum(0x38000E, 0x10000000)); + lbl_1_bss_6D4 = fn_1_11A74(lbl_1_bss_6D8, 0x40); + Hu3DModelLayerSet(lbl_1_bss_6D4, 6); +} + +void fn_1_112FC(void) +{ + M425DllUnkStruct5 *var_r31; + M425DllUnkStruct6 *var_r30; + s32 var_r29; + ModelData *var_r28; + + var_r28 = &Hu3DData[lbl_1_bss_6D4]; + var_r30 = var_r28->unk_120; + for (var_r31 = var_r30->unk_3C, var_r29 = 0; var_r29 < var_r30->unk_24; var_r29++, var_r31++) { + if (!(var_r31->unk_28 <= 0.0f)) { + var_r31->unk_04.x = var_r31->unk_10.x * var_r31->unk_1C; + var_r31->unk_04.y = var_r31->unk_10.y * var_r31->unk_1C; + var_r31->unk_04.z = var_r31->unk_10.z * var_r31->unk_1C; + var_r31->unk_1C *= 0.95f; + PSVECAdd(&var_r31->unk_30, &var_r31->unk_04, &var_r31->unk_30); + if (++var_r31->unk_40 >= 0xF) { + var_r31->unk_40 = 0; + var_r31->unk_28 = 0.0f; + } + } + } +} + +void fn_1_11418(void) +{ + HuSprAnimKill(lbl_1_bss_6D8); + lbl_1_bss_6D8 = NULL; +} + +s32 fn_1_11454(Vec *arg0, Vec *arg1, float arg8, float arg9) +{ + M425DllUnkStruct5 *var_r31; + M425DllUnkStruct6 *var_r29; + s32 var_r28; + ModelData *var_r26; + + var_r26 = &Hu3DData[lbl_1_bss_6D4]; + var_r29 = var_r26->unk_120; + for (var_r31 = var_r29->unk_3C, var_r28 = 0; var_r28 < var_r29->unk_24; var_r28++, var_r31++) { + if (var_r31->unk_28 <= 0.0f) { + break; + } + } + if (var_r28 >= var_r29->unk_24) { + return -1; + } + var_r31->unk_30.x = arg0->x; + var_r31->unk_30.y = arg0->y; + var_r31->unk_30.z = arg0->z; + var_r31->unk_10.x = arg1->x; + var_r31->unk_10.y = arg1->y; + var_r31->unk_10.z = arg1->z; + var_r31->unk_04.x = arg1->x * arg9; + var_r31->unk_04.y = arg1->y * arg9; + var_r31->unk_04.z = arg1->z * arg9; + var_r31->unk_1C = arg9; + var_r31->unk_28 = arg8; + var_r31->unk_2C = (s32)frand() % 360; + var_r31->unk_3C.a = 0x40; + var_r31->unk_40 = 0; + return var_r28; +} + +s16 fn_1_115D4(ModelData *arg0, Mtx arg1, Mtx arg2, float arg8) +{ + s16 var_r31; + s16 var_r30; + LightData *var_r29; + s16 var_r27; + + var_r27 = 0; + var_r30 = 1; + for (var_r29 = Hu3DGlobalLight, var_r31 = 0; var_r31 < 8; var_r31++, var_r29++) { + if (var_r29->unk_00 != -1) { + var_r30 <<= 1; + } + } + if ((arg0->attr & 0x1000) != 0) { + for (var_r31 = 0; var_r31 < 8; var_r31++) { + if (arg0->unk_38[var_r31] != -1) { + var_r29 = &Hu3DLocalLight[arg0->unk_38[var_r31]]; + fn_1_116E4(arg0, var_r29, var_r30, arg2, arg1, arg8); + var_r27 |= var_r30; + var_r30 <<= 1; + } + } + } + return var_r27; +} + +void fn_1_116E4(ModelData *arg1, LightData *var_r31, s16 sp8, Mtx spC, Mtx sp10, float var_f31) +{ + switch ((u8)var_r31->unk_00) { + case 0: + GXInitLightAttn(&lbl_1_bss_688, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); + GXInitLightSpot(&lbl_1_bss_688, var_r31->unk_04, var_r31->unk_02); + break; + case 1: + GXInitLightAttn(&lbl_1_bss_688, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); + PSVECScale(&var_r31->unk_28, &var_r31->unk_1C, -100000.0f); + break; + case 2: + GXInitLightAttn(&lbl_1_bss_688, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f); + GXInitLightDistAttn(&lbl_1_bss_688, var_r31->unk_04, var_r31->unk_08, var_r31->unk_02); + break; + } + if ((var_r31->unk_00 & 0x8000) != 0) { + PSMTXMultVec(spC, &var_r31->unk_28, &lbl_1_bss_67C); + PSMTXMultVec(sp10, &var_r31->unk_1C, &lbl_1_bss_670); + GXInitLightPos(&lbl_1_bss_688, lbl_1_bss_670.x, lbl_1_bss_670.y, lbl_1_bss_670.z); + } + else { + GXInitLightPos(&lbl_1_bss_688, var_r31->unk_1C.x, var_r31->unk_1C.y, var_r31->unk_1C.z); + lbl_1_bss_67C = var_r31->unk_28; + } + if (var_f31 == 0.0f) { + GXInitLightDir(&lbl_1_bss_688, lbl_1_bss_67C.x, lbl_1_bss_67C.y, lbl_1_bss_67C.z); + } + else { + GXInitSpecularDir(&lbl_1_bss_688, lbl_1_bss_67C.x, lbl_1_bss_67C.y, lbl_1_bss_67C.z); + GXInitLightAttn(&lbl_1_bss_688, 0.0f, 0.0f, 1.0f, var_f31 / 2, 0.0f, 1.0f - (var_f31 / 2)); + } + GXInitLightColor(&lbl_1_bss_688, var_r31->color); + GXLoadLightObjImm(&lbl_1_bss_688, sp8); +} + +s16 fn_1_11A74(AnimData *arg0, s16 arg1) +{ + M425DllUnkStruct6 *var_r31; + s16 var_r30; + Vec2f *var_r29; + M425DllUnkStruct5 *var_r28; + ModelData *var_r27; + Vec *var_r26; + void *var_r24; + s16 var_r23; + void *var_r21; + + var_r23 = Hu3DHookFuncCreate(fn_1_11EE0); + var_r27 = &Hu3DData[var_r23]; + var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(M425DllUnkStruct6), var_r27->unk_48); + var_r27->unk_120 = var_r31; + var_r31->unk_38 = arg0; + arg0->useNum++; + var_r31->unk_24 = arg1; + var_r31->unk_20 = 0; + var_r31->unk_4C = 0; + var_r31->unk_28 = 0; + var_r31->unk_21 = 0; + var_r31->unk_30 = 0; + var_r31->unk_00 = var_r31->unk_02 = 0; + var_r28 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(M425DllUnkStruct5), var_r27->unk_48); + var_r31->unk_3C = var_r28; + for (var_r30 = 0; var_r30 < arg1; var_r30++, var_r28++) { + var_r28->unk_28 = 0.0f; + var_r28->unk_2C = 0.0f; + var_r28->unk_30.x = (s32)((frand() & 0x7F) - 0x40) * 0x14; + var_r28->unk_30.y = (s32)((frand() & 0x7F) - 0x40) * 0x1E; + var_r28->unk_30.z = (s32)((frand() & 0x7F) - 0x40) * 0x14; + var_r28->unk_3C.r = var_r28->unk_3C.g = var_r28->unk_3C.b = var_r28->unk_3C.a = 0xFF; + var_r28->unk_40 = 0; + } + var_r26 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(Vec) * 4, var_r27->unk_48); + var_r31->unk_40 = var_r26; + for (var_r30 = 0; var_r30 < (arg1 * 4); var_r30++, var_r26++) { + var_r26->x = var_r26->y = var_r26->z = 0.0f; + } + var_r29 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(Vec2f) * 4, var_r27->unk_48); + var_r31->unk_44 = var_r29; + for (var_r30 = 0; var_r30 < arg1; var_r30++) { + var_r29->x = 0.0f; + var_r29->y = 0.0f; + var_r29++; + var_r29->x = 1.0f; + var_r29->y = 0.0f; + var_r29++; + var_r29->x = 1.0f; + var_r29->y = 1.0f; + var_r29++; + var_r29->x = 0.0f; + var_r29->y = 1.0f; + var_r29++; + } + var_r24 = HuMemDirectMallocNum(HEAP_DATA, 0x4000, var_r27->unk_48); + var_r21 = var_r24; + DCFlushRange(var_r24, 0x4000); + GXBeginDisplayList(var_r21, 0x4000); + GXBegin(GX_QUADS, GX_VTXFMT0, arg1 * 4); + for (var_r30 = 0; var_r30 < arg1; var_r30++) { + GXUnknownu16(var_r30 * 4); + GXUnknownu16(var_r30); + GXUnknownu16(var_r30 * 4); + GXUnknownu16(var_r30 * 4 + 1); + GXUnknownu16(var_r30); + GXUnknownu16(var_r30 * 4 + 1); + GXUnknownu16(var_r30 * 4 + 2); + GXUnknownu16(var_r30); + GXUnknownu16(var_r30 * 4 + 2); + GXUnknownu16(var_r30 * 4 + 3); + GXUnknownu16(var_r30); + GXUnknownu16(var_r30 * 4 + 3); + } + var_r31->unk_34 = GXEndDisplayList(); + var_r31->unk_48 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_34, var_r27->unk_48); + memcpy(var_r31->unk_48, var_r24, var_r31->unk_34); + DCFlushRange(var_r31->unk_48, var_r31->unk_34); + HuMemDirectFree(var_r24); + return var_r23; +} + +void fn_1_11EE0(ModelData *var_r24, Mtx var_r21) +{ + Mtx sp128; + Mtx spF8; + Mtx spC8; + Vec sp98[4]; + Vec sp68[4]; + Vec sp38[4]; + ROMtx sp8; + M425DllUnkStruct6 *var_r31; + Vec *var_r30; + M425DllUnkStruct5 *var_r29; + Vec *var_r28; + Vec *var_r27; + Vec2f *var_r26; + s16 var_r25; + s16 var_r23; + s16 var_r22; + s16 var_r20; + s16 var_r19; + UnkHook var_r18; + + var_r31 = var_r24->unk_120; + if ((var_r31->unk_2C != GlobalCounter) || (shadowModelDrawF != 0)) { + GXLoadPosMtxImm(var_r21, 0); + GXSetNumTevStages(1); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, GX_FALSE, 0x7D); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + if (shadowModelDrawF != 0) { + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ONE, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); + GXSetZMode(0, GX_LEQUAL, 0); + } + else { + var_r22 = var_r31->unk_38->bmp->dataFmt & 0xF; + if ((var_r22 == 7) || (var_r22 == 8)) { + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ONE, GX_CC_RASC, GX_CC_ZERO); + } + else { + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); + } + if ((var_r24->attr & 2) != 0) { + GXSetZMode(1, GX_LEQUAL, GX_TRUE); + } + else { + GXSetZMode(1, GX_LEQUAL, GX_FALSE); + } + } + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + HuSprTexLoad(var_r31->unk_38, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetZCompLoc(0); + switch (var_r31->unk_20) { + case 0: + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + break; + case 1: + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_NOOP); + break; + case 2: + GXSetBlendMode(GX_BM_BLEND, GX_BL_ZERO, GX_BL_INVDSTCLR, GX_LO_NOOP); + break; + } + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_ST, GX_RGBA6, 0); + GXSetArray(GX_VA_POS, var_r31->unk_40, 0xC); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_TEX_ST, GX_RGBA8, 0); + GXSetArray(GX_VA_CLR0, &var_r31->unk_3C->unk_3C, 0x44); + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0); + GXSetArray(GX_VA_TEX0, var_r31->unk_44, 8); + if (HmfInverseMtxF3X3(var_r21, sp128) == 0) { + PSMTXIdentity(sp128); + } + PSMTXReorder(sp128, &sp8[0]); + if (var_r31->unk_4C) { + var_r18 = var_r31->unk_4C; + var_r18(var_r24, var_r31, var_r21); + } + var_r29 = var_r31->unk_3C; + var_r30 = var_r31->unk_40; + var_r26 = var_r31->unk_44; + PSMTXROMultVecArray(sp8, lbl_1_data_19C, &sp38[0], 4); + for (var_r23 = 0; var_r23 < var_r31->unk_24; var_r23++, var_r29++) { + if (!var_r29->unk_28) { + var_r30->x = var_r30->y = var_r30->z = 0.0f; + var_r30++; + var_r30->x = var_r30->y = var_r30->z = 0.0f; + var_r30++; + var_r30->x = var_r30->y = var_r30->z = 0.0f; + var_r30++; + var_r30->x = var_r30->y = var_r30->z = 0.0f; + var_r30++; + } + else { + if (!var_r29->unk_2C) { + var_r28 = &sp98[0]; + var_r27 = &sp38[0]; + PSVECScale(var_r27++, var_r28, var_r29->unk_28); + PSVECAdd(var_r28++, &var_r29->unk_30, var_r30++); + PSVECScale(var_r27++, var_r28, var_r29->unk_28); + PSVECAdd(var_r28++, &var_r29->unk_30, var_r30++); + PSVECScale(var_r27++, var_r28, var_r29->unk_28); + PSVECAdd(var_r28++, &var_r29->unk_30, var_r30++); + PSVECScale(var_r27++, var_r28, var_r29->unk_28); + PSVECAdd(var_r28++, &var_r29->unk_30, var_r30++); + } + else { + PSVECScale(lbl_1_data_19C, &sp98[0], var_r29->unk_28); + PSVECScale(&lbl_1_data_19C[1], &sp98[1], var_r29->unk_28); + PSVECScale(&lbl_1_data_19C[2], &sp98[2], var_r29->unk_28); + PSVECScale(&lbl_1_data_19C[3], &sp98[3], var_r29->unk_28); + PSMTXRotRad(spC8, 0x5A, var_r29->unk_2C); + PSMTXConcat(sp128, spC8, spF8); + PSMTXMultVecArray(spF8, &sp98[0], &sp68[0], 4); + PSVECAdd(&sp68[0], &var_r29->unk_30, var_r30++); + PSVECAdd(&sp68[1], &var_r29->unk_30, var_r30++); + PSVECAdd(&sp68[2], &var_r29->unk_30, var_r30++); + PSVECAdd(&sp68[3], &var_r29->unk_30, var_r30++); + } + var_r20 = var_r29->unk_40 & 3; + var_r19 = (var_r29->unk_40 >> 2) & 3; + for (var_r25 = 0; var_r25 < 4; var_r25++, var_r26++) { + var_r26->x = (0.25f * var_r20) + lbl_1_data_1CC[var_r25].x; + var_r26->y = (0.25f * var_r19) + lbl_1_data_1CC[var_r25].y; + } + } + } + DCFlushRangeNoSync(var_r31->unk_40, var_r31->unk_24 * 0xC * 4); + DCFlushRangeNoSync(var_r31->unk_44, var_r31->unk_24 * 8 * 4); + PPCSync(); + GXCallDisplayList(var_r31->unk_48, var_r31->unk_34); + if (shadowModelDrawF == 0) { + if ((var_r31->unk_21 & 2) == 0) { + var_r31->unk_28++; + } + if ((var_r31->unk_30 != 0) && (var_r31->unk_30 <= var_r31->unk_28)) { + if ((var_r31->unk_21 & 1) != 0) { + var_r31->unk_28 = 0; + } + var_r31->unk_28 = var_r31->unk_30; + } + var_r31->unk_2C = GlobalCounter; + } + } +}