diff --git a/config/GMPE01_00/rels/m404Dll/symbols.txt b/config/GMPE01_00/rels/m404Dll/symbols.txt index 70a77577..2f84190a 100644 --- a/config/GMPE01_00/rels/m404Dll/symbols.txt +++ b/config/GMPE01_00/rels/m404Dll/symbols.txt @@ -141,7 +141,8 @@ lbl_1_data_9AC = .data:0x000009AC; // type:object size:0x30 data:4byte lbl_1_data_9DC = .data:0x000009DC; // type:object size:0x18 data:4byte lbl_1_data_9F4 = .data:0x000009F4; // type:object size:0x18 data:4byte lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte -lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x8 data:float +lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:float +lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x2 data:2byte lbl_1_bss_10 = .bss:0x00000010; // type:object size:0xC data:float lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x4 data:4byte diff --git a/config/GMPE01_00/rels/m410Dll/symbols.txt b/config/GMPE01_00/rels/m410Dll/symbols.txt index 8aa1e144..eda76b5c 100644 --- a/config/GMPE01_00/rels/m410Dll/symbols.txt +++ b/config/GMPE01_00/rels/m410Dll/symbols.txt @@ -86,208 +86,210 @@ fn_1_A9A4 = .text:0x0000A9A4; // type:function size:0x79C fn_1_B140 = .text:0x0000B140; // type:function size:0x644 _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:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -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:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 data:double -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x8 data:double -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 data:double -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 data:double -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 data:double -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 data:double -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 data:float -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x8 data:double -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 data:float -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 data:float -lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 data:float -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 data:float -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x8 data:double -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 data:double -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x8 data:double -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x8 data:double -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 data:float -lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 data:float -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 data:double -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -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_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -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:0x4 data:float -lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 data:float -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 data:double -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x8 data:double -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 data:float -lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 data:float -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 data:float -lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 data:float -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 data:float -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8 data:double -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x10 data:4byte -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 data:float -lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 data:float -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 data:float -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:0x8 data:double -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x10 data:4byte -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 data:float -lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 data:float -lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 data:float -lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 data:float -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 data:double -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:0x4 data:float -lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x8 data:double -lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x8 data:double -lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 data:float -lbl_1_rodata_284 = .rodata:0x00000284; // type:object size:0x4 data:float -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:0x4 data:float -lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 data:float -lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 data:float -lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 data:float -lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 data:float -lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 data:float -lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 data:float -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 data:float -lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 data:float -lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x8 data:double -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 data:float -lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 data:float -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:0x4 data:float -lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 data:float -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 data:float -lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 data:float -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x8 data:double -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x4 data:float -lbl_1_rodata_2FC = .rodata:0x000002FC; // type:object size:0x4 data:float -lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 data:float -lbl_1_rodata_304 = .rodata:0x00000304; // type:object size:0x4 data:float -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x20 data:4byte -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 data:float -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x8 data:double -lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 data:float -lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 data:float -lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 data:float -lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 data:float -lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 data:float -lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 data:float -lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 data:float -lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 data:float -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:0x8 data:double -lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 data:float -lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x4 data:float -lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 data:float -lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 data:float -lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x1 data:byte -lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 data:float -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_data_0 = .data:0x00000000; // type:object size:0xC -lbl_1_data_C = .data:0x0000000C; // type:object size:0xC +__fakeHalf = .rodata:0x00000000; // type:object size:0x4 data:float +__fakeThree = .rodata:0x00000004; // type:object size:0x4 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +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:0x8 scope:local data:double +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 scope:local data:double +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 scope:local data:float +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x8 scope:local data:double +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 scope:local data:double +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x8 scope:local data:double +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x8 scope:local data:double +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 scope:local data:double +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 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_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +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:0x4 scope:local data:float +lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 scope:local data:float +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x10 scope:local data:float +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 scope:local data:float +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:float +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:0x8 scope:local data:double +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 scope:local data:float +lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 scope:local data:float +lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 scope:local data:float +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 scope:local data:double +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:0x4 scope:local data:float +lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x8 scope:local data:double +lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x8 scope:local data:double +lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 scope:local data:float +lbl_1_rodata_284 = .rodata:0x00000284; // type:object size:0x4 scope:local data:float +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:0x4 scope:local data:float +lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 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:0x8 scope:local data:double +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 scope:local data:float +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:0x4 scope:local data:float +lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2FC = .rodata:0x000002FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 scope:local data:float +lbl_1_rodata_304 = .rodata:0x00000304; // type:object size:0x4 scope:local data:float +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x20 scope:local data:float +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 scope:local data:float +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x8 scope:local data:double +lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 scope:local data:float +lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 scope:local data:float +lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 scope:local data:float +lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 scope:local data:float +lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 scope:local data:float +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:0x8 scope:local data:double +lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 scope:local data:float +lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 scope:local data:float +lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 scope:local data:float +lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x4 scope:local data:byte +lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 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_data_0 = .data:0x00000000; // type:object size:0xC data:float +lbl_1_data_C = .data:0x0000000C; // type:object size:0xC data:float lbl_1_data_18 = .data:0x00000018; // type:object size:0xC data:float -lbl_1_data_24 = .data:0x00000024; // type:object size:0x4 +lbl_1_data_24 = .data:0x00000024; // type:object size:0x4 data:byte lbl_1_data_28 = .data:0x00000028; // type:object size:0xC data:float lbl_1_data_34 = .data:0x00000034; // type:object size:0xC data:float lbl_1_data_40 = .data:0x00000040; // type:object size:0xC data:float -lbl_1_data_4C = .data:0x0000004C; // type:object size:0x3C -lbl_1_data_88 = .data:0x00000088; // type:object size:0x3C +lbl_1_data_4C = .data:0x0000004C; // type:object size:0x3C data:float +lbl_1_data_88 = .data:0x00000088; // type:object size:0x3C data:float lbl_1_data_C4 = .data:0x000000C4; // type:object size:0x14 lbl_1_data_D8 = .data:0x000000D8; // type:object size:0x2 data:2byte lbl_1_data_DC = .data:0x000000DC; // type:object size:0x20 -lbl_1_data_FC = .data:0x000000FC; // type:object size:0x8 +lbl_1_data_FC = .data:0x000000FC; // type:object size:0x8 scope:local data:string lbl_1_data_104 = .data:0x00000104; // type:object size:0xC lbl_1_data_110 = .data:0x00000110; // type:object size:0x4 data:4byte -lbl_1_data_114 = .data:0x00000114; // type:object size:0x16 data:string -lbl_1_data_130 = .data:0x00000130; // type:object size:0x10 +lbl_1_data_114 = .data:0x00000114; // type:object size:0x16 scope:local data:string +lbl_1_data_130 = .data:0x00000130; // type:object size:0x10 scope:local data:string lbl_1_data_140 = .data:0x00000140; // type:object size:0x20 -lbl_1_data_160 = .data:0x00000160; // type:object size:0xC +lbl_1_data_160 = .data:0x00000160; // type:object size:0xC scope:local data:string lbl_1_data_16C = .data:0x0000016C; // type:object size:0x20 lbl_1_data_18C = .data:0x0000018C; // type:object size:0x20 lbl_1_data_1AC = .data:0x000001AC; // type:object size:0x28 -lbl_1_data_1D4 = .data:0x000001D4; // type:object size:0xA0 +lbl_1_data_1D4 = .data:0x000001D4; // type:object size:0xA0 data:float lbl_1_data_274 = .data:0x00000274; // type:object size:0x20 -lbl_1_data_294 = .data:0x00000294; // type:object size:0x20 +lbl_1_data_294 = .data:0x00000294; // type:object size:0x20 data:byte lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte @@ -295,7 +297,8 @@ lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 data:4byte lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x2 data:2byte lbl_1_bss_12 = .bss:0x00000012; // type:object size:0x2 data:2byte lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x2 data:2byte -lbl_1_bss_16 = .bss:0x00000016; // type:object size:0x6 data:2byte +lbl_1_bss_16 = .bss:0x00000016; // type:object size:0x2 data:2byte +lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x2 data:2byte lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x4 data:4byte lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x4 data:4byte diff --git a/configure.py b/configure.py index 8509d97a..251f8db7 100644 --- a/configure.py +++ b/configure.py @@ -279,6 +279,7 @@ def DolphinLib(lib_name, objects): "objects": objects, } + def MusyX(objects, mw_version="GC/1.3.2", debug=False, major=1, minor=5, patch=4): cflags = cflags_musyx if not debug else cflags_musyx_debug return { @@ -295,6 +296,7 @@ def MusyX(objects, mw_version="GC/1.3.2", debug=False, major=1, minor=5, patch=4 "objects": objects, } + # Helper function for REL script objects def Rel(lib_name, objects): return { @@ -766,73 +768,84 @@ config.libs = [ Object(Matching, "REL/empty.c"), # Must be marked as matching ], }, - Rel('_minigameDLL', - objects = { + Rel( + "_minigameDLL", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/_minigameDLL/_minigameDLL.c"), - } + }, ), - Rel('bootDll', - objects = { + Rel( + "bootDll", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/bootDll/main.c"), Object(Matching, "REL/bootDll/nintendo_data.c"), - } + }, ), - Rel('E3setupDLL', - objects = { + Rel( + "E3setupDLL", + objects={ Object(Matching, "REL/E3setupDLL/mgselect.c"), Object(Matching, "REL/executor.c"), Object(Matching, "REL/E3setupDLL/main.c"), - } + }, ), - Rel('instDll', - objects = { + Rel( + "instDll", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/instDll/main.c"), Object(NonMatching, "REL/instDll/font.c"), - } + }, ), - Rel('m401Dll', - objects = { + Rel( + "m401Dll", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/m401Dll/main.c"), Object(NonMatching, "REL/m401Dll/main_ex.c"), - } + }, ), - Rel('m402Dll', - objects = { + Rel( + "m402Dll", + objects={ Object(Matching, "REL/m402Dll/main.c"), - } + }, ), - Rel('m403Dll', - objects = { + Rel( + "m403Dll", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/m403Dll/main.c"), Object(Matching, "REL/m403Dll/scene.c"), - } + }, ), - Rel('m404Dll', - objects = { + Rel( + "m404Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m404Dll/main.c"), - } + }, ), - Rel('m405Dll', - objects = { + Rel( + "m405Dll", + objects={ Object(Matching, "REL/m405Dll/main.c"), - } + }, ), - Rel('m406Dll', - objects = { + Rel( + "m406Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m406Dll/main.c"), Object(NonMatching, "REL/m406Dll/map.c"), Object(NonMatching, "REL/m406Dll/player.c"), - } + }, ), - Rel('m407dll', - objects = { + Rel( + "m407dll", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/m407dll/player.c"), Object(Matching, "REL/m407dll/map.c"), @@ -842,278 +855,317 @@ config.libs = [ Object(Matching, "REL/m407dll/effect.c"), Object(Matching, "REL/m407dll/main.c"), Object(Matching, "REL/m407dll/score.c"), - } + }, ), - Rel('m408Dll', - objects = { + Rel( + "m408Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m408Dll/main.c"), Object(NonMatching, "REL/m408Dll/camera.c"), Object(NonMatching, "REL/m408Dll/stage.c"), Object(NonMatching, "REL/m408Dll/object.c"), - } + }, ), - Rel('m409Dll', - objects = { + Rel( + "m409Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m409Dll/main.c"), Object(NonMatching, "REL/m409Dll/player.c"), Object(NonMatching, "REL/m409Dll/cursor.c"), - } + }, ), - Rel('m410Dll', - objects = { + Rel( + "m410Dll", + objects={ Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/m410Dll/main.c"), - Object(NonMatching, "REL/m410Dll/stage.c"), + Object(Matching, "REL/m410Dll/main.c"), + Object(Matching, "REL/m410Dll/stage.c"), Object(NonMatching, "REL/m410Dll/game.c"), - Object(NonMatching, "REL/m410Dll/player.c"), - } + Object(Matching, "REL/m410Dll/player.c"), + }, ), - Rel('m411Dll', - objects = { + Rel( + "m411Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m411Dll/main.c"), - } + }, ), - Rel('m412Dll', - objects = { + Rel( + "m412Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m412Dll/main.c"), - } + }, ), - Rel('m413Dll', - objects = { + Rel( + "m413Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m413Dll/main.c"), - } + }, ), - Rel('m414Dll', - objects = { + Rel( + "m414Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m414Dll/main.c"), - } + }, ), - Rel('m415Dll', - objects = { + Rel( + "m415Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m415Dll/main.c"), Object(NonMatching, "REL/m415Dll/map.c"), - } + }, ), - Rel('m416Dll', - objects = { + Rel( + "m416Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m416Dll/main.c"), Object(NonMatching, "REL/m416Dll/map.c"), - } + }, ), - Rel('m417Dll', - objects = { + Rel( + "m417Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m417Dll/main.c"), Object(NonMatching, "REL/m417Dll/water.c"), Object(NonMatching, "REL/m417Dll/player.c"), Object(NonMatching, "REL/m417Dll/sequence.c"), - } + }, ), - Rel('m418Dll', - objects = { + Rel( + "m418Dll", + objects={ Object(NonMatching, "REL/m418Dll/main.c"), Object(NonMatching, "REL/m418Dll/sequence.c"), - } + }, ), - Rel('m419Dll', - objects = { + Rel( + "m419Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m419Dll/main.c"), - } + }, ), - Rel('m420dll', - objects = { + Rel( + "m420dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m420dll/main.c"), Object(NonMatching, "REL/m420dll/player.c"), Object(NonMatching, "REL/m420dll/map.c"), Object(NonMatching, "REL/m420dll/rand.c"), - } + }, ), - Rel('m421Dll', - objects = { + Rel( + "m421Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m421Dll/main.c"), Object(NonMatching, "REL/m421Dll/player.c"), Object(NonMatching, "REL/m421Dll/map.c"), - } + }, ), - Rel('m422Dll', - objects = { + Rel( + "m422Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m422Dll/main.c"), - } + }, ), - Rel('m423Dll', - objects = { + Rel( + "m423Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m423Dll/main.c"), - } + }, ), - Rel('m424Dll', - objects = { + Rel( + "m424Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m424Dll/main.c"), Object(NonMatching, "REL/m424Dll/map.c"), Object(NonMatching, "REL/m424Dll/ball.c"), Object(NonMatching, "REL/m424Dll/claw.c"), - } + }, ), - Rel('m425Dll', - objects = { + Rel( + "m425Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m425Dll/main.c"), Object(NonMatching, "REL/m425Dll/thwomp.c"), - } + }, ), - Rel('m426Dll', - objects = { + Rel( + "m426Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m426Dll/main.c"), - } + }, ), - Rel('m427Dll', - objects = { + Rel( + "m427Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m427Dll/main.c"), Object(NonMatching, "REL/m427Dll/map.c"), Object(NonMatching, "REL/m427Dll/player.c"), - } + }, ), - Rel('m428Dll', - objects = { + Rel( + "m428Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m428Dll/main.c"), Object(NonMatching, "REL/m428Dll/map.c"), Object(NonMatching, "REL/m428Dll/player.c"), - } + }, ), - Rel('m429Dll', - objects = { + Rel( + "m429Dll", + objects={ Object(NonMatching, "REL/m429Dll/main.c"), - } + }, ), - Rel('m430Dll', - objects = { + Rel( + "m430Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m430Dll/main.c"), Object(NonMatching, "REL/m430Dll/water.c"), Object(NonMatching, "REL/m430Dll/player.c"), - } + }, ), - Rel('m431Dll', - objects = { + Rel( + "m431Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m431Dll/main.c"), Object(NonMatching, "REL/m431Dll/object.c"), - } + }, ), - Rel('m432Dll', - objects = { + Rel( + "m432Dll", + objects={ Object(NonMatching, "REL/m432Dll/main.c"), - } + }, ), - Rel('m433Dll', - objects = { + Rel( + "m433Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m433Dll/main.c"), Object(NonMatching, "REL/m433Dll/map.c"), Object(NonMatching, "REL/m433Dll/player.c"), - } + }, ), - Rel('m434Dll', - objects = { + Rel( + "m434Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m434Dll/main.c"), Object(NonMatching, "REL/m434Dll/map.c"), Object(NonMatching, "REL/m434Dll/player.c"), Object(NonMatching, "REL/m434Dll/fish.c"), - } + }, ), - Rel('m435Dll', - objects = { + Rel( + "m435Dll", + objects={ Object(NonMatching, "REL/m435Dll/main.c"), Object(NonMatching, "REL/m435Dll/sequence.c"), - } + }, ), - Rel('m436Dll', - objects = { + Rel( + "m436Dll", + objects={ Object(NonMatching, "REL/m436Dll/main.c"), Object(NonMatching, "REL/m436Dll/sequence.c"), - } + }, ), - Rel('m437Dll', - objects = { + Rel( + "m437Dll", + objects={ Object(NonMatching, "REL/m437Dll/main.c"), Object(NonMatching, "REL/m437Dll/sequence.c"), - } + }, ), - Rel('m438Dll', - objects = { + Rel( + "m438Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m438Dll/main.c"), Object(NonMatching, "REL/m438Dll/map.c"), Object(NonMatching, "REL/m438Dll/fire.c"), - } + }, ), - Rel('m439Dll', - objects = { + Rel( + "m439Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m439Dll/main.c"), - } + }, ), - Rel('m440Dll', - objects = { + Rel( + "m440Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m440Dll/main.c"), Object(NonMatching, "REL/m440Dll/object.c"), - } + }, ), - Rel('m441Dll', - objects = { + Rel( + "m441Dll", + objects={ Object(NonMatching, "REL/m441Dll/main.c"), - } + }, ), - Rel('m442Dll', - objects = { + Rel( + "m442Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m442Dll/main.c"), Object(NonMatching, "REL/m442Dll/score.c"), - } + }, ), - Rel('m443Dll', - objects = { + Rel( + "m443Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m443Dll/main.c"), Object(NonMatching, "REL/m443Dll/map.c"), Object(NonMatching, "REL/m443Dll/player.c"), - } + }, ), - Rel('m444dll', - objects = { + Rel( + "m444dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m444dll/main.c"), Object(NonMatching, "REL/m444dll/pinball.c"), Object(NonMatching, "REL/m444dll/datalist.c"), Object(NonMatching, "REL/m444dll/shadow.c"), - } + }, ), - Rel('m445Dll', - objects = { + Rel( + "m445Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m445Dll/main.c"), - } + }, ), - Rel('m446dll', - objects = { + Rel( + "m446dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m446dll/main.c"), Object(Matching, "REL/m446dll/card.c"), @@ -1123,10 +1175,11 @@ config.libs = [ Object(NonMatching, "REL/m446dll/camera.c"), Object(NonMatching, "REL/m446dll/cursor.c"), Object(NonMatching, "REL/m446dll/stage.c"), - } + }, ), - Rel('m447dll', - objects = { + Rel( + "m447dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m447dll/main.c"), Object(NonMatching, "REL/m447dll/stage.c"), @@ -1134,110 +1187,127 @@ config.libs = [ Object(NonMatching, "REL/m447dll/player.c"), Object(NonMatching, "REL/m447dll/player_col.c"), Object(NonMatching, "REL/m447dll/block.c"), - } + }, ), - Rel('m448Dll', - objects = { + Rel( + "m448Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m448Dll/main.c"), - } + }, ), - Rel('m449Dll', - objects = { + Rel( + "m449Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m449Dll/main.c"), - } + }, ), - Rel('m450Dll', - objects = { + Rel( + "m450Dll", + objects={ Object(NonMatching, "REL/m450Dll/main.c"), - } + }, ), - Rel('m451Dll', - objects = { + Rel( + "m451Dll", + objects={ Object(NonMatching, "REL/m451Dll/m451.c"), - } + }, ), - Rel('m453Dll', - objects = { + Rel( + "m453Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m453Dll/main.c"), Object(NonMatching, "REL/m453Dll/map.c"), Object(NonMatching, "REL/m453Dll/score.c"), - } + }, ), - Rel('m455Dll', - objects = { + Rel( + "m455Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m455Dll/main.c"), Object(NonMatching, "REL/m455Dll/stage.c"), - } + }, ), - Rel('m456Dll', - objects = { + Rel( + "m456Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m456Dll/main.c"), Object(NonMatching, "REL/m456Dll/stage.c"), - } + }, ), - Rel('m457Dll', - objects = { + Rel( + "m457Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m457Dll/main.c"), - } + }, ), - Rel('m458Dll', - objects = { + Rel( + "m458Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m458Dll/main.c"), - } + }, ), - Rel('m459dll', - objects = { + Rel( + "m459dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m459dll/main.c"), - } + }, ), - Rel('m460Dll', - objects = { + Rel( + "m460Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m460Dll/main.c"), Object(NonMatching, "REL/m460Dll/player.c"), Object(NonMatching, "REL/m460Dll/map.c"), Object(NonMatching, "REL/m460Dll/score.c"), - } + }, ), - Rel('m461Dll', - objects = { + Rel( + "m461Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m461Dll/main.c"), - } + }, ), - Rel('m461Dll', - objects = { + Rel( + "m461Dll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m462Dll/main.c"), - } + }, ), - Rel('m463Dll', - objects = { + Rel( + "m463Dll", + objects={ Object(NonMatching, "REL/m463Dll/main.c"), - } + }, ), - Rel('mentDll', - objects = { + Rel( + "mentDll", + objects={ Object(NonMatching, "REL/mentDll/common.c"), Object(NonMatching, "REL/mentDll/main.c"), - } + }, ), - Rel('messDll', - objects = { + Rel( + "messDll", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/messDll/main.c"), - } + }, ), - Rel('mgmodedll', - objects = { + Rel( + "mgmodedll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/mgmodedll/mgmode.c"), Object(NonMatching, "REL/mgmodedll/free_play.c"), @@ -1247,35 +1317,39 @@ config.libs = [ Object(NonMatching, "REL/mgmodedll/main.c"), Object(NonMatching, "REL/mgmodedll/datalist.c"), Object(NonMatching, "REL/mgmodedll/minigame.c"), - } + }, ), - Rel('modeltestDll', - objects = { + Rel( + "modeltestDll", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/modeltestDll/main.c"), Object(Matching, "REL/modeltestDll/modeltest00.c"), Object(NonMatching, "REL/modeltestDll/modeltest01.c"), - } + }, ), - Rel('modeseldll', - objects = { + Rel( + "modeseldll", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/modeseldll/main.c"), Object(NonMatching, "REL/modeseldll/modesel.c"), Object(Matching, "REL/modeseldll/filesel.c"), Object(Matching, "REL/modeseldll/datalist.c"), - } + }, ), - Rel('mpexDll', - objects = { + Rel( + "mpexDll", + objects={ Object(NonMatching, "REL/mpexDll/main.c"), Object(NonMatching, "REL/mpexDll/mpex.c"), Object(NonMatching, "REL/mpexDll/charsel.c"), Object(NonMatching, "REL/mpexDll/mgname.c"), - } + }, ), - Rel('mstory2Dll', - objects = { + Rel( + "mstory2Dll", + objects={ Object(NonMatching, "REL/mstory2Dll/main.c"), Object(NonMatching, "REL/mstory2Dll/board_entrance.c"), Object(NonMatching, "REL/mstory2Dll/board_clear.c"), @@ -1284,33 +1358,37 @@ config.libs = [ Object(NonMatching, "REL/mstory2Dll/mg_miss.c"), Object(NonMatching, "REL/mstory2Dll/ending.c"), Object(NonMatching, "REL/mstory2Dll/save.c"), - } + }, ), - Rel('mstory3Dll', - objects = { + Rel( + "mstory3Dll", + objects={ Object(NonMatching, "REL/mstory3Dll/main.c"), Object(NonMatching, "REL/mstory3Dll/result_seq.c"), Object(NonMatching, "REL/mstory3Dll/result.c"), Object(NonMatching, "REL/mstory3Dll/win_effect.c"), - } + }, ), - Rel('mstory4Dll', - objects = { + Rel( + "mstory4Dll", + objects={ Object(Matching, "REL/mstory4Dll/main.c"), - } + }, ), - Rel('mstoryDll', - objects = { + Rel( + "mstoryDll", + objects={ Object(NonMatching, "REL/mstoryDll/main.c"), Object(NonMatching, "REL/mstoryDll/board_clear.c"), Object(NonMatching, "REL/mstoryDll/board_miss.c"), Object(NonMatching, "REL/mstoryDll/mg_clear.c"), Object(NonMatching, "REL/mstoryDll/mg_miss.c"), Object(NonMatching, "REL/mstoryDll/save.c"), - } + }, ), - Rel('option', - objects = { + Rel( + "option", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/option/scene.c"), Object(Matching, "REL/option/camera.c"), @@ -1321,59 +1399,67 @@ config.libs = [ Object(Matching, "REL/option/sound.c"), Object(Matching, "REL/option/record.c"), Object(Matching, "REL/option/window.c"), - } + }, ), - Rel('present', - objects = { + Rel( + "present", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/present/init.c"), Object(Matching, "REL/present/camera.c"), Object(Matching, "REL/present/present.c"), Object(Matching, "REL/present/main.c"), Object(Matching, "REL/present/common.c"), - } + }, ), - Rel('resultDll', - objects = { + Rel( + "resultDll", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/resultDll/main.c"), Object(Matching, "REL/resultDll/battle.c"), Object(Matching, "REL/resultDll/datalist.c"), - } + }, ), - Rel('safDll', - objects = { + Rel( + "safDll", + objects={ Object(Matching, "REL/safDll/main.c"), - } + }, ), - Rel('selmenuDll', - objects = { + Rel( + "selmenuDll", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/selmenuDll/main.c"), - } + }, ), - Rel('staffDll', - objects = { + Rel( + "staffDll", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/staffDll/main.c"), - } + }, ), - Rel('subchrselDll', - objects = { + Rel( + "subchrselDll", + objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/subchrselDll/main.c"), - } + }, ), - Rel('w01Dll', - objects = { + Rel( + "w01Dll", + objects={ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w01Dll/main.c"), Object(Matching, "REL/w01Dll/mg_coin.c"), Object(Matching, "REL/w01Dll/mg_item.c"), - } + }, ), - Rel('w02Dll', - objects = { + Rel( + "w02Dll", + objects={ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w02Dll/main.c"), Object(NonMatching, "REL/w02Dll/dice.c"), @@ -1382,10 +1468,11 @@ config.libs = [ Object(NonMatching, "REL/w02Dll/mg_item.c"), Object(NonMatching, "REL/w02Dll/shuffleboard.c"), Object(NonMatching, "REL/w02Dll/roulette.c"), - } + }, ), - Rel('w03Dll', - objects = { + Rel( + "w03Dll", + objects={ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w03Dll/main.c"), Object(Matching, "REL/w03Dll/statue.c"), @@ -1394,10 +1481,11 @@ config.libs = [ Object(Matching, "REL/w03Dll/smoke.c"), Object(Matching, "REL/w03Dll/mg_coin.c"), Object(Matching, "REL/w03Dll/mg_item.c"), - } + }, ), - Rel('w04Dll', - objects = { + Rel( + "w04Dll", + objects={ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w04Dll/main.c"), Object(Matching, "REL/w04Dll/bridge.c"), @@ -1405,10 +1493,11 @@ config.libs = [ Object(Matching, "REL/w04Dll/big_boo.c"), Object(Matching, "REL/w04Dll/mg_item.c"), Object(Matching, "REL/w04Dll/mg_coin.c"), - } + }, ), - Rel('w05Dll', - objects = { + Rel( + "w05Dll", + objects={ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w05Dll/main.c"), Object(Matching, "REL/w05Dll/hotel.c"), @@ -1416,10 +1505,11 @@ config.libs = [ Object(Matching, "REL/w05Dll/dolphin.c"), Object(Matching, "REL/w05Dll/mg_item.c"), Object(Matching, "REL/w05Dll/mg_coin.c"), - } + }, ), - Rel('w06Dll', - objects = { + Rel( + "w06Dll", + objects={ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w06Dll/main.c"), Object(Matching, "REL/w06Dll/mg_item.c"), @@ -1427,36 +1517,40 @@ config.libs = [ Object(Matching, "REL/w06Dll/fire.c"), Object(Matching, "REL/w06Dll/bridge.c"), Object(Matching, "REL/w06Dll/bowser.c"), - } + }, ), - Rel('w10Dll', - objects = { + Rel( + "w10Dll", + objects={ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w10Dll/main.c"), Object(Matching, "REL/w10Dll/host.c"), Object(Matching, "REL/w10Dll/scene.c"), Object(Matching, "REL/w10Dll/tutorial.c"), - } + }, ), - Rel('w20Dll', - objects = { + Rel( + "w20Dll", + objects={ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w20Dll/main.c"), - } + }, ), - Rel('w21Dll', - objects = { + Rel( + "w21Dll", + objects={ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w21Dll/main.c"), - } + }, ), - Rel('ztardll', - objects = { + Rel( + "ztardll", + objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/ztardll/main.c"), Object(NonMatching, "REL/ztardll/font.c"), Object(NonMatching, "REL/ztardll/select.c"), - } + }, ), ] diff --git a/include/REL/m410Dll.h b/include/REL/m410Dll.h new file mode 100644 index 00000000..81e3c34e --- /dev/null +++ b/include/REL/m410Dll.h @@ -0,0 +1,217 @@ +#ifndef M410DLL_H +#define M410DLL_H + +#include "dolphin.h" + +typedef struct UnkM410Struct { + u32 unk_00; + s32 unk_04; + s32 unk_08; + s32 unk_0C; + s32 unk_10; + u32 unk_14; + s32 unk_18; + u32 unk_1C; + u32 unk_20; + s32 unk_24; + u32 unk_28; + s32 unk_2C; + s32 unk_30; + s32 unk_34; +} UnkM410Struct; // size 0x38 + +typedef struct UnkM410Struct2 { + struct { + u8 unk_00_field0 : 1; + u8 unk_00_field1 : 1; + u8 unk_00_field2 : 1; + u8 unk_00_field3 : 1; + u8 unk_00_field4 : 1; + u8 unk_00_field5 : 1; + u8 unk_00_field6 : 1; + u8 unk_00_field7 : 1; + }; + Vec unk_04; + Vec unk_10; + Vec unk_1C; + float unk_28; + float unk_2C; + s16 unk_30; + s16 unk_32; + s16 unk_34; + s16 unk_36; + struct UnkM410Struct2 *unk_38; + s16 unk_3C; + void *unk_40; + s16 unk_44; + s16 unk46; +} UnkM410Struct2; // size 0x48 + +typedef struct UnkM410Struct3 { + s32 unk00[6]; + Vec unk_18; +} UnkM410Struct3; // size unknown TODO is this even a thing? + +typedef struct UnkM410Struct4 { + s32 unk_00; + u8 unk_04; + u8 unk05; + u8 unk06; + u8 unk07; + UnkM410Struct2 *unk_08; + union { + UnkM410Struct2 *unk_0C_unk; + omObjData *unk_0C_obj; + }; +} UnkM410Struct4; // size 0x10 + +typedef struct UnkM410Struct5 { + s32 unk_00; + u32 unk_04; + s32 unk_08; + s32 unk_0C; + u32 unk_10; + s32 unk_14; + s32 unk_18; + s32 unk_1C; + s32 unk_20; + s32 unk_24; + s32 unk_28; + s32 unk_2C; + s32 unk_30; + u16 unk_34; + s16 unk_36; + s16 unk_38; + s16 unk40; + float unk_3C; + float unk_40; + float unk_44; + float unk_48; + float unk_4C; + u16 unk_50; + u16 unk_52; + u16 unk_54; + Vec unk_58; + float unk_64; + float unk_68; + float unk_6C; + Vec unk_70; + Vec unk_7C; + Vec unk_88; +} UnkM410Struct5; // size 0x94 + +typedef struct UnkM410Struct6 { + float unk_00[4]; +} UnkM410Struct6; // size 0x10 + +typedef struct UnkM410Struct7 { + u32 unk_00[4]; +} UnkM410Struct7; // size 0x10 + +typedef struct UnkM410Struct8 { + u16 unk_00; + u16 unk_02; + float unk_04; + float unk_08; + float unk_0C; + Vec unk_10; +} UnkM410Struct8; // size 0x1C + +typedef struct UnkM410Struct9 { + s32 unk_00; + s32 unk_04; + u32 unk_08; + float unk_0C; + float unk_10; + s32 unk_14; + s32 unk_18; + s32 unk_1C; + s32 unk_20; + s32 unk_24; + s32 unk28; + float unk_2C[2]; + s32 unk34[2]; + s16 unk_3C[2]; + s16 unk_40; + s16 unk_42; + s16 unk_44; + s16 unk46; +} UnkM410Struct9; // size 0x48 + +typedef struct UnkM410Struct10 { + float unk_00; + float unk04; + float unk_08; + s32 unk_0C; +} UnkM410Struct10; // size 0x10 + +typedef struct UnkM410Struct11 { + float unk_00; + float unk_04; + float unk08; + float unk_0C; + float unk_10; + float unk_14; + float unk_18; + float unk_1C; + float unk20; + float unk_24; + float unk_28; + float unk2C; + float unk_30; + float unk_34; + float unk38; +} UnkM410Struct11; // size 0x3C + +typedef struct UnkM410Struct12 { + float unk_00; + float unk_04; + float unk_08; + float unk_0C; + float unk_10; + float unk_14; + float unk_18; + float unk_1C; + float unk_20; + float unk_24; +} UnkM410Struct12; // size 0x28 + +typedef struct UnkM410Struct13 { + UnkM410Struct8 unk_00[16]; + UnkM410Struct11 unk_1C0[32]; + UnkM410Struct12 unk_940[32]; + GXColor unk_E40[5]; + s32 unk_E54; + u32 unk_E58; + void *unk_E5C; +} UnkM410Struct13; // size 0xE60 + +typedef struct UnkM410Struct14 { + UnkM410Struct9 unk_00[4]; + UnkM410Struct13 unk_120; + u32 unk_F80; + void *unk_F84; + char unkF88[0x2E98]; +} UnkM410Struct14; // size 0x3E20 + +s32 fn_1_27EC(void); +u32 fn_1_2804(void); +u32 fn_1_281C(void); +u32 fn_1_2834(void); +void fn_1_284C(s32 arg0); +u32 fn_1_2864(void); +void fn_1_287C(s32 arg0); +void fn_1_28AC(s32 arg0); +s32 fn_1_28DC(void); +float fn_1_2FD4(float arg8, float arg9, float argA); +float fn_1_30F0(float arg8, float arg9); +s32 fn_1_76B8(void *arg0, Vec *arg1, u16 arg2); +void fn_1_77E8(void *arg0); +void fn_1_77F8(u16 arg0, Vec *arg1); +void fn_1_7840(u16 arg0, Vec *arg1); +void fn_1_7888(u16 arg0, u16 arg1, Vec *arg2); +s32 fn_1_79F8(s16 arg0, char *arg1, Mtx arg2); +void fn_1_7AC4(HsfObject *arg0, Mtx arg1, char *arg2, Mtx arg3); +void fn_1_7E30(Process *objman); + +#endif diff --git a/include/ext_math.h b/include/ext_math.h index ac88df13..6e9dafdd 100644 --- a/include/ext_math.h +++ b/include/ext_math.h @@ -13,6 +13,7 @@ typedef struct vec2f { #define VECDistanceXZ(a, b) sqrtf((((a)->x-(b)->x)*((a)->x-(b)->x))+(((a)->z-(b)->z)*((a)->z-(b)->z))) #define VECDistanceZY(a, b) sqrtf((((a)->z-(b)->z)*((a)->z-(b)->z))+(((a)->y-(b)->y)*((a)->y-(b)->y))) +#define VECSumXZ(a, b) sqrtf((((a)->x+(b)->x)*((a)->x+(b)->x))+(((a)->z+(b)->z)*((a)->z+(b)->z))) #define VECMagXZ(a) sqrtf(((a)->x*(a)->x)+((a)->z*(a)->z)) #define VECMagPoint(x, y, z) sqrtf(((x)*(x))+((y)*(y))+((z)*(z))) diff --git a/include/game/hsfman.h b/include/game/hsfman.h index 704648c6..d4b6eae8 100644 --- a/include/game/hsfman.h +++ b/include/game/hsfman.h @@ -64,7 +64,7 @@ typedef struct model_data { Vec rot; Vec scale; Mtx unk_F0; - ParticleData *unk_120; + void *unk_120; } ModelData; // sizeof 0x124 typedef struct camera_data { f32 fov; diff --git a/src/REL/m404Dll/main.c b/src/REL/m404Dll/main.c index e5d8f8ba..a7b4ea23 100644 --- a/src/REL/m404Dll/main.c +++ b/src/REL/m404Dll/main.c @@ -76,20 +76,21 @@ typedef struct UnkM404Struct3 { s32 unk78[91]; } UnkM404Struct3; // size 0x1E4 -s32 lbl_1_bss_0; -float lbl_1_bss_4; -s16 lbl_1_bss_C; -Vec lbl_1_bss_10; -s32 lbl_1_bss_1C; -s32 lbl_1_bss_20; -s32 lbl_1_bss_24; -s32 lbl_1_bss_28[4]; -s32 lbl_1_bss_38[4]; -s32 lbl_1_bss_48; -omObjData *lbl_1_bss_4C; -omObjData *lbl_1_bss_50; -omObjData *lbl_1_bss_54; omObjData *lbl_1_bss_58; +omObjData *lbl_1_bss_54; +omObjData *lbl_1_bss_50; +omObjData *lbl_1_bss_4C; +s32 lbl_1_bss_48; +s32 lbl_1_bss_38[4]; +s32 lbl_1_bss_28[4]; +s32 lbl_1_bss_24; +s32 lbl_1_bss_20; +s32 lbl_1_bss_1C; +Vec lbl_1_bss_10; +s16 lbl_1_bss_C; +s32 lbl_1_bss_8; +float lbl_1_bss_4; +s32 lbl_1_bss_0; float lbl_1_data_0[][2] = { { -0.00026f, 0.51953f }, @@ -859,7 +860,7 @@ float fn_1_2EBC(float arg0[], float arg8) var_f22 = var_f27 * (fn_1_1DF8(arg0, var_f31) + fn_1_1DF8(arg0, arg8)) / 2; for (var_r30 = 1; var_r30 <= var_r29; var_r30 *= 2) { - for (var_f23 = 0.0f, var_r31 = 1; var_r31 <= var_r30; var_r31 += 1) { + for (var_f23 = 0.0f, var_r31 = 1; var_r31 <= var_r30; var_r31++) { var_f23 += fn_1_1DF8(arg0, var_f31 + var_f27 * (var_r31 - 0.5f)); } var_f23 *= var_f27; diff --git a/src/REL/m410Dll/game.c b/src/REL/m410Dll/game.c new file mode 100644 index 00000000..899dcca5 --- /dev/null +++ b/src/REL/m410Dll/game.c @@ -0,0 +1,1323 @@ +#include "ext_math.h" +#include "game/audio.h" +#include "game/gamework_data.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/sprite.h" + +#include "REL/m410Dll.h" + +typedef void (*lbl_1_bss_44_type)(u16, u16, u16); + +omObjData *lbl_1_bss_5C; +omObjData *lbl_1_bss_58; +omObjData *lbl_1_bss_54; +float lbl_1_bss_50; +float lbl_1_bss_4C; +float lbl_1_bss_48; +lbl_1_bss_44_type lbl_1_bss_44; +Process *lbl_1_bss_40; +s32 lbl_1_bss_3C; +s32 lbl_1_bss_38; +s32 lbl_1_bss_34; +s32 lbl_1_bss_30; + +s16 lbl_1_data_D8 = 0x0384; +s32 lbl_1_data_DC[] + = { DATA_MAKE_NUM(DATADIR_M410, 0), DATA_MAKE_NUM(DATADIR_M410, 1), DATA_MAKE_NUM(DATADIR_M410, 2), DATA_MAKE_NUM(DATADIR_M410, 3), + DATA_MAKE_NUM(DATADIR_M410, 4), DATA_MAKE_NUM(DATADIR_M410, 5), DATA_MAKE_NUM(DATADIR_M410, 6), DATA_MAKE_NUM(DATADIR_M410, 7) }; + +void fn_1_34C0(omObjData *object); +void fn_1_3614(omObjData *object); +void fn_1_3BE0(s16 arg0); +float fn_1_48D8(UnkM410Struct2 *arg0, u8 *arg1); +float fn_1_4C04(Vec arg0, Vec arg1, float arg8, Vec arg2, Vec arg3, float arg9); +float fn_1_4FEC(Vec arg0, Vec arg1, float arg8, Vec arg2, Vec arg3, float arg9, float argA); +float fn_1_55C8(Vec arg0, Vec arg1, float arg8, Vec arg2, float arg9); +s32 fn_1_598C(Vec *arg0, Vec *arg1, float arg8, Vec *arg2, Vec *arg3, float arg9, float argA); +void fn_1_5AF4(UnkM410Struct2 *arg0, u8 arg1); +void fn_1_5CA0(Vec arg0, Vec arg1, Vec arg2, Vec *arg3, Vec *arg4); +void fn_1_61DC(UnkM410Struct2 *arg0, UnkM410Struct2 *arg1); +void fn_1_6364(UnkM410Struct2 *arg0, UnkM410Struct2 *arg1); +void fn_1_66B8(UnkM410Struct2 *arg0, UnkM410Struct2 *arg1); +void fn_1_67D4(omObjData *object); +void fn_1_6968(omObjData *object); +void fn_1_6D84(omObjData *object); +void fn_1_6DB4(omObjData *object); +void fn_1_7138(omObjData *object); +void fn_1_7464(omObjData *object); +void fn_1_7494(void); +void fn_1_7520(Vec *arg0); +void fn_1_75A0(ModelData *model, ParticleData *particle, Mtx matrix); + +void fn_1_33A8(Process *objman) +{ + lbl_1_bss_5C = omAddObjEx(objman, 3, 3, 0, -1, fn_1_34C0); + lbl_1_bss_54 = omAddObjEx(objman, 5, 54, 3, -1, fn_1_6DB4); + lbl_1_bss_58 = omAddObjEx(objman, 7, 60, 0, -1, fn_1_67D4); + lbl_1_bss_44 = NULL; + lbl_1_bss_40 = objman; + lbl_1_bss_3C = 300; + fn_1_7494(); +} + +void fn_1_3484(void) +{ + fn_1_6D84(lbl_1_bss_58); + fn_1_7464(lbl_1_bss_54); +} + +void fn_1_34C0(omObjData *object) +{ + s32 var_r30; + + object->stat |= 0x100; + for (var_r30 = 0; var_r30 < 3; var_r30++) { + if (!var_r30) { + object->model[var_r30] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M410, 12)); + } else { + object->model[var_r30] = Hu3DModelLink(*object->model); + } + Hu3DModelPosSet(object->model[var_r30], 0.0f, 140.0f + (140.0f * var_r30), -790.0f); + } + object->func = fn_1_3614; + Hu3DLayerHookSet(7, fn_1_3BE0); + lbl_1_bss_50 = lbl_1_bss_4C = lbl_1_bss_48 = 0.0f; +} + +void fn_1_3614(omObjData *object) +{ + float var_f31; + float var_f30; + float var_f29; + ModelData *var_r30; + s32 var_r29; + s16 var_r28; + + switch (object->work[0]) { + case 0: + if (fn_1_2804() == 1) { + object->work[0]++; + object->work[1] = 256; + } + break; + case 1: + if (!--object->work[1]) { + object->work[0]++; + object->work[1] = 90; + lbl_1_bss_50 = 0.0f; + lbl_1_bss_4C = -10.000001f; + lbl_1_bss_48 = 2.0000002f; + lbl_1_bss_34 = HuAudFXPlay(1381); + } + break; + case 2: + if (!--object->work[1]) { + object->work[0]++; + lbl_1_bss_4C = 0.0f; + lbl_1_bss_48 = 0.40000007f; + } + break; + case 3: + if (fn_1_281C() == 2) { + object->work[0]++; + lbl_1_bss_4C = -2.0000002f; + lbl_1_bss_48 = 0.05000001f; + } + break; + } + if (fn_1_281C() == 2) { + if (!--lbl_1_data_D8) { + lbl_1_bss_4C = -lbl_1_bss_4C; + lbl_1_data_D8 = 900; + } + } else if (fn_1_281C() > 2) { + lbl_1_bss_4C = 0.0f; + } + if (lbl_1_bss_50 != lbl_1_bss_4C) { + if (lbl_1_bss_50 < lbl_1_bss_4C) { + lbl_1_bss_50 += lbl_1_bss_48; + if (lbl_1_bss_50 > lbl_1_bss_4C) { + lbl_1_bss_50 = lbl_1_bss_4C; + } + } else { + lbl_1_bss_50 -= lbl_1_bss_48; + if (lbl_1_bss_50 < lbl_1_bss_4C) { + lbl_1_bss_50 = lbl_1_bss_4C; + } + } + } + if (lbl_1_bss_34 >= 0) { + var_r28 = 512.0 * fabs(lbl_1_bss_50); + if (var_r28 > 127) { + var_r28 = 127; + } + HuAudFXVolSet(lbl_1_bss_34, var_r28); + var_f31 = (0.5 * (16384.0 * fabs(lbl_1_bss_50))) - 8191.0; + if (var_f31 < -8191.0f) { + var_f31 = -8191.0f; + } else if (var_f31 > 8191.0f) { + var_f31 = 8191.0f; + } + HuAudFXPitchSet(lbl_1_bss_34, var_f31); + } + + for (var_r29 = 0; var_r29 < 3; var_r29++) { + var_r30 = &Hu3DData[object->model[var_r29]]; + if (var_r29 & 1) { + var_f29 = lbl_1_bss_50; + } else { + var_f29 = -lbl_1_bss_50; + } + var_f30 = var_f29; + var_r30->pos.x += var_f30; + if (var_f30 < 0.0) { + if (var_r30->pos.x <= -40.0f) { + var_r30->pos.x += 40.0f; + } + } else { + if (var_r30->pos.x >= 40.0f) { + var_r30->pos.x -= 40.0f; + } + } + } +} + +void fn_1_3BE0(s16 arg0) // what happens with the argument? +{ + UnkM410Struct4 sp1B0[128]; // TODO get size right + UnkM410Struct2 *spC0[60]; // TODO get size right + Vec spB4; + Vec spA8; + + u8 sp8; + + f32 var_f31; + f32 var_f30; + f32 var_f29; + + UnkM410Struct2 *var_r31; + UnkM410Struct2 *var_r30; + s32 var_r29; + UnkM410Struct2 *var_r28; + u8 var_r27; + s32 var_r26; + s32 var_r25; + s32 var_r24; + omObjData *var_r23; + omObjData **var_r22; + + var_r24 = 0; + if (omPauseChk()) { + + return; + } + + for (var_r25 = 0, var_r31 = lbl_1_bss_58->data, var_r29 = 0; var_r29 < 60; var_r29++, var_r31++) { + if (var_r31->unk_00_field0) { + spC0[var_r25++] = var_r31; + var_r31->unk_10 = var_r31->unk_04; + } + } + for (var_r29 = 0; var_r29 < var_r25; var_r29++) { + var_r31 = spC0[var_r29]; + var_r31->unk_00_field5 = 0; + var_r31->unk_40 = 0; + var_r31->unk_3C = 0; + } + for (var_r31 = lbl_1_bss_54->data, var_r29 = 0; var_r29 < 18; var_r29++, var_r31++) { + var_r31->unk_40 = 0; + var_r31->unk_10 = var_r31->unk_04; + } + var_f30 = 1.0f; + do { + for (var_r27 = 0, var_f29 = var_f30, var_r29 = 0; var_r29 < var_r25; var_r29++) { + var_r30 = spC0[var_r29]; + if (var_r30->unk_00_field5) { + continue; + } + if (var_r30->unk_3C >= 8) { + var_r30->unk_1C.x = var_r30->unk_1C.y = var_r30->unk_1C.z = 0.0f; + continue; + } + var_r30->unk_00_field5 = 1; + if (!var_r30->unk_00_field1) { + var_f31 = fn_1_48D8(var_r30, &sp8); + if (var_f31 >= 0.0f && var_f31 < var_f30) { + var_r30->unk_00_field5 = 0; + if (var_f31 <= var_f29) { + if (var_f31 < var_f29) { + var_r27 = 0; + } + sp1B0[var_r27].unk_00 = 0; + sp1B0[var_r27].unk_08 = var_r30; + sp1B0[var_r27].unk_04 = sp8; + var_r27++; + var_f29 = var_f31; + if (!var_r30->unk_00_field3 && (sp8 & 2) && var_r30->unk_1C.y < 0.0f) { + var_r30->unk_00_field3 = 1; + var_r30->unk_36 = 240; + } + } + } + } + + for (var_r26 = 0; var_r26 < var_r25; var_r26++) { + var_r28 = spC0[var_r26]; + if (var_r30 != var_r28 && (var_r30->unk_40 != var_r28 || var_r28->unk_40 != var_r30) + && !(var_r30->unk_00_field3 ^ var_r28->unk_00_field3)) { + var_f31 = fn_1_4C04(var_r30->unk_04, var_r30->unk_1C, var_r30->unk_28, var_r28->unk_04, var_r28->unk_1C, var_r28->unk_28); + if (var_f31 >= 0.0f && var_f31 < var_f30) { + var_r30->unk_00_field5 = 0; + if (var_f31 <= var_f29) { + if (var_f31 < var_f29) { + var_r27 = 0; + } + sp1B0[var_r27].unk_00 = 1; + sp1B0[var_r27].unk_08 = var_r30; + sp1B0[var_r27].unk_0C_unk = var_r28; + var_r27++; + var_f29 = var_f31; + } + } + } + } + var_r22 = omGetGroupMemberListEx(lbl_1_bss_40, 0); + for (var_r26 = 0; var_r26 < 4; var_r26++) { + var_r23 = var_r22[var_r26]; + if (var_r30->unk_40 != var_r23 && var_r30->unk_00_field3) { + var_f31 = fn_1_55C8(var_r30->unk_04, var_r30->unk_1C, var_r30->unk_28, var_r23->trans, 30.000002f); + if (var_f31 >= 0.0f && var_f31 < var_f30) { + var_r30->unk_00_field5 = 0; + if (var_f31 <= var_f29) { + if (var_f31 < var_f29) { + var_r27 = 0; + } + sp1B0[var_r27].unk_00 = 2; + sp1B0[var_r27].unk_08 = var_r30; + sp1B0[var_r27].unk_0C_obj = var_r23; + var_r27++; + var_f29 = var_f31; + } + } + } + } + if (!var_r30->unk_00_field3) { + var_r28 = lbl_1_bss_54->data; + + for (var_r26 = 0; var_r26 < 18; var_r26++, var_r28++) { + if (var_r30->unk_40 != var_r28 || var_r28->unk_40 != var_r30) { + var_f31 = fn_1_4FEC(var_r30->unk_04, var_r30->unk_1C, var_r30->unk_28, var_r28->unk_04, var_r28->unk_1C, var_r28->unk_28, var_r28->unk_2C); + if (var_f31 >= 0.0f && var_f31 < var_f30) { + var_r30->unk_00_field5 = 0; + if (var_f31 <= var_f29) { + if (var_f31 < var_f29) { + var_r27 = 0; + } + sp1B0[var_r27].unk_00 = 3; + sp1B0[var_r27].unk_08 = var_r30; + sp1B0[var_r27].unk_0C_unk = var_r28; + var_r27++; + var_f29 = var_f31; + } + } + } + } + } + } + if (!var_r27) { + break; + } + for (var_r29 = 0; var_r29 < var_r25; var_r29++) { + var_r31 = spC0[var_r29]; + var_r31->unk_04.x += var_r31->unk_1C.x * var_f29 * var_f30; + var_r31->unk_04.y += var_r31->unk_1C.y * var_f29 * var_f30; + var_r31->unk_04.z += var_r31->unk_1C.z * var_f29 * var_f30; + } + var_r31 = lbl_1_bss_54->data; + + for (var_r29 = 0; var_r29 < 18; var_r29++, var_r31++) { + var_r31->unk_04.x += var_r31->unk_1C.x * var_f29 * var_f30; + var_r31->unk_04.y += var_r31->unk_1C.y * var_f29 * var_f30; + var_r31->unk_04.z += var_r31->unk_1C.z * var_f29 * var_f30; + } + for (var_r29 = 0; var_r29 < var_r27; var_r29++) { + switch (sp1B0[var_r29].unk_00) { + case 0: + fn_1_5AF4(sp1B0[var_r29].unk_08, sp1B0[var_r29].unk_04); + sp1B0[var_r29].unk_08->unk_40 = NULL; + sp1B0[var_r29].unk_08->unk_3C++; + break; + case 1: + fn_1_61DC(sp1B0[var_r29].unk_08, sp1B0[var_r29].unk_0C_unk); + sp1B0[var_r29].unk_08->unk_40 = sp1B0[var_r29].unk_0C_unk; + sp1B0[var_r29].unk_0C_unk->unk_40 = sp1B0[var_r29].unk_08; + sp1B0[var_r29].unk_08->unk_3C++; + sp1B0[var_r29].unk_0C_unk->unk_3C++; + break; + case 2: + fn_1_66B8(sp1B0[var_r29].unk_08, sp1B0[var_r29].unk_0C_unk); + sp1B0[var_r29].unk_08->unk_40 = sp1B0[var_r29].unk_0C_unk; + sp1B0[var_r29].unk_08->unk_3C++; + break; + case 3: + fn_1_6364(sp1B0[var_r29].unk_08, sp1B0[var_r29].unk_0C_unk); + sp1B0[var_r29].unk_08->unk_40 = sp1B0[var_r29].unk_0C_unk; + sp1B0[var_r29].unk_0C_unk->unk_40 = sp1B0[var_r29].unk_08; + sp1B0[var_r29].unk_08->unk_3C++; + sp1B0[var_r29].unk_08->unk_44 = 2; + if (PSVECMag(&sp1B0[var_r29].unk_08->unk_1C) > 10.0f) { + HuAudFXPlay(1377); + } + break; + } + } + var_f30 *= 1.0f - var_f29; + var_r24++; + } while (var_r24 < 100); + (void)var_r24; + + for (var_r29 = 0; var_r29 < var_r25; var_r29++) { + var_r31 = spC0[var_r29]; + var_r31->unk_04.x += var_r31->unk_1C.x * var_f30; + var_r31->unk_04.y += var_r31->unk_1C.y * var_f30; + var_r31->unk_04.z += var_r31->unk_1C.z * var_f30; + } + var_r31 = lbl_1_bss_54->data; + + for (var_r29 = 0; var_r29 < 18; var_r29++, var_r31++) { + var_r31->unk_04.x += var_r31->unk_1C.x * var_f30; + var_r31->unk_04.y += var_r31->unk_1C.y * var_f30; + var_r31->unk_04.z += var_r31->unk_1C.z * var_f30; + } + for (var_r29 = 0; var_r29 < var_r25; var_r29++) { + var_r30 = spC0[var_r29]; + PSVECSubtract(&var_r30->unk_04, &var_r30->unk_10, &spB4); + var_r28 = lbl_1_bss_54->data; + + for (var_r26 = 0; var_r26 < 18; var_r26++, var_r28++) { + PSVECSubtract(&var_r28->unk_04, &var_r28->unk_10, &spA8); + if (fn_1_598C(&var_r30->unk_10, &spB4, var_r30->unk_28, &var_r28->unk_10, &spA8, var_r28->unk_28, var_r28->unk_2C) + && !var_r30->unk_00_field1 && var_r28->unk_38 == NULL) { + var_r30->unk_00_field1 = 1; + var_r30->unk_38 = var_r28; + var_r30->unk_36 = 10; + var_r28->unk_00_field4 = 1; + var_r28->unk_38 = var_r30; + if (lbl_1_bss_44 != NULL) { + lbl_1_bss_44(var_r30->unk_34, (var_r28->unk_34 & 1) + 1, var_r28->unk_32); + if (fn_1_281C() == 2) { + omVibrate(var_r30->unk_34, 12, 6, 6); + HuAudFXPlay(9); + HuAudFXPlay(1378); + } + } + } + } + } +} + +float fn_1_48D8(UnkM410Struct2 *arg0, u8 *arg1) +{ + float var_f31; + float var_f30; + float var_f29; + + var_f30 = 1.0f; + if (0.0f == arg0->unk_1C.x && 0.0f == arg0->unk_1C.y && 0.0f == arg0->unk_1C.z) { + return -1.0f; + } + *arg1 = 0; + if (0.0f != arg0->unk_1C.x) { + if (arg0->unk_1C.x < 0.0f) { + var_f29 = (-500.0f - arg0->unk_04.x + arg0->unk_28) / arg0->unk_1C.x; + } else { + var_f29 = (500.0f - arg0->unk_04.x - arg0->unk_28) / arg0->unk_1C.x; + } + var_f31 = var_f29; + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + } + if (var_f31 >= 0.0f && var_f31 < 1.0f && var_f31 < var_f30) { + *arg1 = 1; + var_f30 = var_f31; + } + } + if (arg0->unk_1C.y < 0.0f) { + var_f31 = (-arg0->unk_04.y + arg0->unk_28) / arg0->unk_1C.y; + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + } + if (var_f31 >= 0.0f && var_f31 < 1.0f) { + if (var_f31 == var_f30) { + *arg1 |= 2; + } else if (var_f31 < var_f30) { + var_f30 = var_f31; + *arg1 = 2; + } + } + } + if (arg0->unk_1C.z < 0.0f) { + var_f31 = (-800.0f - arg0->unk_04.z + arg0->unk_28) / arg0->unk_1C.z; + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + } + if (var_f31 >= 0.0f && var_f31 < 1.0f) { + if (var_f31 == var_f30) { + *arg1 |= 4; + } else if (var_f31 < var_f30) { + *arg1 = 4; + var_f30 = var_f31; + } + } + } + if (var_f30 >= 0.0f && var_f30 < 1.0f) { + return var_f30; + } + return -1.0f; +} + +float fn_1_4C04(Vec arg0, Vec arg1, float arg8, Vec arg2, Vec arg3, float arg9) +{ + float var_f30; + float var_f29; + float var_f28; + float var_f27; + float var_f26; + float var_f22; + float var_f21; + + PSVECSubtract(&arg2, &arg0, &arg2); + PSVECSubtract(&arg3, &arg1, &arg3); + if (PSVECMag(&arg2) > arg9 + (arg8 + PSVECMag(&arg3))) { + return -1.0f; + } + var_f22 = (arg8 + arg9) * (arg8 + arg9); + var_f28 = arg3.z * arg3.z + (arg3.x * arg3.x + (arg3.y * arg3.y)); + var_f27 = 2.0f * (arg3.z * arg2.z + (arg3.x * arg2.x + arg3.y * arg2.y)); + var_f21 = (arg2.z * arg2.z + (arg2.x * arg2.x + arg2.y * arg2.y)) - var_f22; + if (0.0f == var_f28) { + return -1.0f; + } + var_f30 = var_f27 * var_f27 - 4.0f * var_f28 * var_f21; + if (var_f30 <= 0.0f) { + return -1.0f; + } + var_f30 = sqrtf(var_f30); + var_f26 = (-var_f27 + var_f30) / (2.0f * var_f28); + var_f29 = (-var_f27 - var_f30) / (2.0f * var_f28); + if (var_f26 * var_f29 < 0.0f && var_f29 < 0.0f) { + if (var_f26 > fabs(var_f29)) { + return 0.0f; + } + } + if (var_f29 >= 0.0f && var_f29 < 1.0f) { + return var_f29; + } + return -1.0f; +} + +float fn_1_4FEC(Vec arg0, Vec arg1, float arg8, Vec arg2, Vec arg3, float arg9, float argA) +{ + float sp2C; + + float var_f28; + float var_f26; + float var_f25; + float var_f24; + float var_f23; + float var_f22; + float var_f21; + float var_f18; + + PSVECSubtract(&arg0, &arg2, &arg0); + PSVECSubtract(&arg1, &arg3, &arg1); + + if (PSVECMag(&arg0) > (arg8) + PSVECMag(&arg1) + arg9 + argA) { + return -1.0f; + } + arg8 += arg9; + var_f24 = VECMagXZ(&arg0); + + var_f23 = VECSumXZ(&arg0, &arg1) - var_f24; + + var_f22 = (var_f23 * var_f23) + (arg1.y * arg1.y); + var_f21 = 2.0f * ((arg0.y * arg1.y) + ((-argA * var_f23) + (var_f24 * var_f23))); + sp2C = (arg0.y * arg0.y + (((argA * argA) + (var_f24 * var_f24)) - (2.0f * argA * var_f24))) - (arg8 * arg8); + if (0.0f == var_f22) { + return -1.0f; + } + var_f28 = (var_f21 * var_f21) - (4.0f * var_f22 * sp2C); + if (var_f28 < 0.0f) { + return -1.0f; + } + + var_f28 = sqrtf(var_f28); + var_f18 = (-var_f21 + var_f28) / (2.0f * var_f22); + var_f25 = (-var_f21 - var_f28) / (2.0f * var_f22); + + if (var_f18 * var_f25 < 0.0f && var_f25 < 0.0f) { + if (var_f18 > fabs(var_f25)) { + return 0.0f; + } + } + if (var_f25 >= 0.0f && var_f25 < 1.0f) { + return var_f25; + } + return -1.0f; +} + +float fn_1_55C8(Vec arg0, Vec arg1, float arg8, Vec arg2, float arg9) +{ + float var_f30; + float var_f29; + float var_f28; + float var_f27; + float var_f26; + float var_f22; + float var_f21; + + PSVECSubtract(&arg0, &arg2, &arg0); + arg0.y = 0.0f; + arg1.y = 0.0f; + if (PSVECMag(&arg0) > arg8 + PSVECMag(&arg1) + arg9) { + return -1.0f; + } + var_f22 = (arg8 + arg9) * (arg8 + arg9); + var_f28 = (arg1.x * arg1.x) + (arg1.z * arg1.z); + var_f27 = 2.0f * ((arg1.x * arg0.x) + (arg1.z * arg0.z)); + var_f21 = ((arg0.x * arg0.x) + (arg0.z * arg0.z)) - var_f22; + if (0.0f == var_f28) { + return -1.0f; + } + var_f30 = (var_f27 * var_f27) - (4.0f * var_f28 * var_f21); + if (var_f30 <= 0.0f) { + return -1.0f; + } + var_f30 = sqrtf(var_f30); + var_f26 = (-var_f27 + var_f30) / (2.0f * var_f28); + var_f29 = (-var_f27 - var_f30) / (2.0f * var_f28); + if (var_f26 * var_f29 < 0.0f && var_f29 < 0.0f) { + if (var_f26 > fabs(var_f29)) { + return 0.0f; + } + } + if (var_f29 >= 0.0f && var_f29 < 1.0f) { + return var_f29; + } + return -1.0f; +} + +s32 fn_1_598C(Vec *arg0, Vec *arg1, float arg8, Vec *arg2, Vec *arg3, float arg9, float argA) +{ + Vec sp38; + Vec sp2C; + Vec sp20; + float var_f31; + + PSVECSubtract(arg0, arg2, &sp38); + PSVECSubtract(arg1, arg3, &sp2C); + if (PSVECMag(&sp38) > arg8 + PSVECMag(&sp2C) + arg9 + argA) { + return 0; + } + if (sp2C.y < 0.0f) { + var_f31 = -sp38.y / sp2C.y; + if (var_f31 >= 0.0f && var_f31 < 1.0f) { + sp20.x = var_f31 * sp2C.x + sp38.x; + sp20.y = var_f31 * sp2C.y + sp38.y; + sp20.z = var_f31 * sp2C.z + sp38.z; + if (PSVECMag(&sp20) < argA) { + return 1; + } + } + } + return 0; +} + +void fn_1_5AF4(UnkM410Struct2 *arg0, u8 arg1) +{ + if (arg1 & 1) { + arg0->unk_1C.x = -arg0->unk_1C.x; + } + if (arg1 & 2) { + arg0->unk_1C.y = -arg0->unk_1C.y; + if (fabs(arg0->unk_1C.y) < 4.0) { + arg0->unk_1C.y = 0.0f; + } + if (fabs(arg0->unk_1C.y) > 10.0) { + if (arg0->unk_04.z < -400.0f) { + HuAudFXPlay(1380); + } else { + HuAudFXPlay(1379); + } + } + } + if (arg1 & 4) { + arg0->unk_1C.z = -arg0->unk_1C.z; + } + arg0->unk_1C.x *= 0.7f; + arg0->unk_1C.y *= 0.7f; + arg0->unk_1C.z *= 0.7f; +} + +void fn_1_5CA0(Vec arg0, Vec arg1, Vec arg2, Vec *arg3, Vec *arg4) +{ + Vec sp34; + Vec sp28; + Vec sp1C; + Vec sp10; + float var_f31; + float var_f30; + float var_f29; + float var_f28; + + sp34 = arg1; + var_f31 = PSVECMag(&sp34); + if (var_f31 < 0.001f) { + arg3->x = arg3->y = arg3->z = 0.0f; + arg4->x = arg4->y = arg4->z = 0.0f; + return; + } + PSVECNormalize(&sp34, &sp34); + var_f31 *= 0.9f; + PSVECSubtract(&arg2, &arg0, &sp28); + PSVECNormalize(&sp28, &sp28); + var_f28 = PSVECDotProduct(&sp34, &sp28); + if (var_f28 < 0.0f) { + arg3->x = arg1.x; + arg3->y = arg1.y; + arg3->z = arg1.z; + arg4->x = arg4->y = arg4->z = 0.0f; + return; + } + var_f29 = var_f31 * var_f28; + var_f30 = var_f31 - var_f29; + if (var_f30 < 0.001f) { + arg3->x = arg3->y = arg3->z = 0.0f; + } else { + PSVECCrossProduct(&sp34, &sp28, &sp10); + PSVECNormalize(&sp10, &sp10); + PSVECCrossProduct(&sp28, &sp10, &sp1C); + PSVECNormalize(&sp1C, &sp1C); + arg3->x = sp1C.x * var_f30; + arg3->y = sp1C.y * var_f30; + arg3->z = sp1C.z * var_f30; + } + arg4->x = sp28.x * var_f29; + arg4->y = sp28.y * var_f29; + arg4->z = sp28.z * var_f29; +} + +void fn_1_5EDC(UnkM410Struct2 *arg0, UnkM410Struct2 *arg1) +{ + Vec sp14; + Vec sp8; + float var_f31; + float var_f30; + float var_f29; + + arg0->unk_1C.x *= 0.9f; + arg0->unk_1C.y *= 0.9f; + arg0->unk_1C.z *= 0.9f; + PSVECSubtract(&arg0->unk_04, &arg1->unk_04, &sp14); + PSVECNormalize(&sp14, &sp8); + var_f30 = (arg0->unk_28 + arg1->unk_28) - PSVECMag(&sp14); + if (var_f30 > 0.001f) { + PSVECSubtract(&arg0->unk_1C, &arg1->unk_1C, &sp14); + if (PSVECMag(&sp14) < 0.001f) { + arg0->unk_04.x += sp8.x * var_f30; + arg0->unk_04.y += sp8.y * var_f30; + arg0->unk_04.z += sp8.z * var_f30; + } else { + PSVECNormalize(&sp14, &sp14); + arg0->unk_04.x -= sp14.x * var_f30; + arg0->unk_04.y -= sp14.y * var_f30; + arg0->unk_04.z -= sp14.z * var_f30; + } + } + var_f31 = ((-arg0->unk_1C.x * sp8.x) - (arg0->unk_1C.y * sp8.y)) - (arg0->unk_1C.z * sp8.z); + if (var_f31 > 0.0f) { + arg0->unk_1C.x += 2.0f * sp8.x * var_f31; + arg0->unk_1C.y += 2.0f * sp8.y * var_f31; + arg0->unk_1C.z += 2.0f * sp8.z * var_f31; + } + PSVECSubtract(&arg1->unk_1C, &arg0->unk_1C, &sp14); + var_f29 = PSVECMag(&sp14); + if (var_f29 < 0.001f) { + return; + } + PSVECNormalize(&sp14, &sp14); + var_f31 = PSVECDotProduct(&sp8, &sp14); + if (var_f31 > 0.0f) { + arg0->unk_1C.x += sp8.x * var_f31 * var_f29; + arg0->unk_1C.y += sp8.y * var_f31 * var_f29; + arg0->unk_1C.z += sp8.z * var_f31 * var_f29; + } +} + +void fn_1_61DC(UnkM410Struct2 *arg0, UnkM410Struct2 *arg1) +{ + Vec sp74; + Vec sp68; + Vec sp5C; + Vec sp50; + Vec sp44; + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + + Vec *var_r29; + Vec *var_r28; + Vec *var_r27; + Vec *var_r26; + Vec *var_r25; + Vec *var_r24; + + if (arg0->unk_00_field1 || arg1->unk_00_field1) { + if (arg0->unk_00_field1) { + fn_1_5EDC(arg1, arg0); + } else { + fn_1_5EDC(arg0, arg1); + } + return; + } + fn_1_5CA0(arg0->unk_04, arg0->unk_1C, arg1->unk_04, &sp68, &sp74); + fn_1_5CA0(arg1->unk_04, arg1->unk_1C, arg0->unk_04, &sp50, &sp5C); + PSVECAdd(&sp68, &sp5C, &arg0->unk_1C); + PSVECAdd(&sp74, &sp50, &arg1->unk_1C); +} + +void fn_1_6364(UnkM410Struct2 *arg0, UnkM410Struct2 *arg1) +{ + Vec sp20; + Vec sp14; + Vec sp8; + + float var_f31; + float var_f30; + + arg0->unk_1C.x *= 0.7f; + arg0->unk_1C.y *= 0.7f; + arg0->unk_1C.z *= 0.7f; + PSVECSubtract(&arg0->unk_04, &arg1->unk_04, &sp14); + + sp14.y = 0.0f; + PSVECNormalize(&sp14, &sp14); + + sp20.x = sp14.x * arg1->unk_2C + arg1->unk_04.x; + sp20.y = arg1->unk_04.y; + sp20.z = sp14.z * arg1->unk_2C + arg1->unk_04.z; + + PSVECSubtract(&arg0->unk_04, &sp20, &sp14); + PSVECNormalize(&sp14, &sp8); + var_f31 = (arg0->unk_28 + arg1->unk_28) - PSVECMag(&sp14); + + if (var_f31 > 0.001f) { + PSVECSubtract(&arg0->unk_1C, &arg1->unk_1C, &sp14); + if (PSVECMag(&sp14) < 0.001f) { + arg0->unk_04.x += sp8.x * var_f31; + arg0->unk_04.y += sp8.y * var_f31; + arg0->unk_04.z += sp8.z * var_f31; + } else { + PSVECNormalize(&sp14, &sp14); + arg0->unk_04.x -= sp14.x * var_f31; + arg0->unk_04.y -= sp14.y * var_f31; + arg0->unk_04.z -= sp14.z * var_f31; + } + } + var_f30 = -arg0->unk_1C.x * sp8.x - arg0->unk_1C.y * sp8.y - arg0->unk_1C.z * sp8.z; + if (var_f30 > 0.0f) { + arg0->unk_1C.x += 2.0f * sp8.x * var_f30; + arg0->unk_1C.y += 2.0f * sp8.y * var_f30; + arg0->unk_1C.z += 2.0f * sp8.z * var_f30; + } + PSVECSubtract(&arg1->unk_1C, &arg0->unk_1C, &sp14); + var_f31 = PSVECMag(&sp14); + if (!(var_f31 < 0.001f)) { + PSVECNormalize(&sp14, &sp14); + var_f30 = PSVECDotProduct(&sp8, &sp14); + if (var_f30 > 0.0f) { + arg0->unk_1C.x += sp8.x * var_f30 * var_f31; + arg0->unk_1C.y += sp8.y * var_f30 * var_f31; + arg0->unk_1C.z += sp8.z * var_f30 * var_f31; + } + } +} + +void fn_1_66B8(UnkM410Struct2 *arg0, UnkM410Struct2 *arg1) // TODO maybe UnkM410Struct3? +{ + Vec spC; + float var_f31; + + PSVECSubtract(&arg0->unk_04, (Vec *)&arg1->unk_10.z, &spC); + spC.y = 0.0f; + PSVECNormalize(&spC, &spC); + var_f31 = -arg0->unk_1C.x * spC.x - arg0->unk_1C.z * spC.z; + arg0->unk_1C.x += 2.0f * spC.x * var_f31; + arg0->unk_1C.z += 2.0f * spC.z * var_f31; + arg0->unk_1C.x *= 0.5f; + arg0->unk_1C.y *= 0.5f; + arg0->unk_1C.z *= 0.5f; +} + +void fn_1_67D4(omObjData *arg0) +{ + s32 var_r30; + UnkM410Struct2 *var_r29; + s16 var_r28; + + arg0->stat |= 0x100; + var_r29 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM410Struct2) * 60, MEMORY_DEFAULT_NUM); + arg0->data = var_r29; + memset(var_r29, 0, 4320); + + for (var_r30 = 0; var_r30 < 60; var_r30++, var_r29++) { + var_r29->unk_32 = var_r30; + var_r29->unk_34 = var_r30 / 15; + if ((var_r30 % 15) == 0) { + arg0->model[var_r30] = Hu3DModelCreateFile(lbl_1_data_DC[GWPlayerCfg[var_r29->unk_34].character]); + var_r28 = arg0->model[var_r30]; + } else { + arg0->model[var_r30] = Hu3DModelLink(var_r28); + } + var_r29->unk_30 = arg0->model[var_r30]; + Hu3DModelAttrSet(arg0->model[var_r30], 1); + Hu3DModelShadowSet(arg0->model[var_r30]); + } + arg0->func = fn_1_6968; +} + +void fn_1_6968(omObjData *object) +{ + Mtx sp14; + Vec sp8; + float var_f31; + float var_f30; + UnkM410Struct2 *var_r31; + s32 var_r30; + ModelData *var_r28; + + var_r31 = object->data; + + for (var_r30 = 0; var_r30 < 60; var_r30++, var_r31++) { + if (!var_r31->unk_00_field0) { + Hu3DModelAttrSet(var_r31->unk_30, 1); + continue; + } + if (var_r31->unk_00_field1) { + Hu3DModelObjPosGet(var_r31->unk_38->unk_30, "i_hook", &sp8); + PSVECSubtract(&sp8, &var_r31->unk_04, &sp8); + if (var_r31->unk_36 != 0) { + var_f31 = cosd(90.0f * var_r31->unk_36 / 10.0f); + var_r31->unk_1C.x = var_f31 * sp8.x; + var_r31->unk_1C.y = var_f31 * sp8.y; + var_r31->unk_1C.z = var_f31 * sp8.z; + var_r31->unk_36--; + } else { + var_r31->unk_1C = sp8; + } + } else { + var_r31->unk_1C.y += -0.95277786f; + if (var_r31->unk_00_field3 && (fn_1_281C() != 4 || (fn_1_281C() == 4 && var_r31->unk_36 < 15))) { + if (--var_r31->unk_36 == 0) { + var_r31->unk_00_field0 = 0; + } + if (var_r31->unk_36 < 15) { + var_r31->unk_00_field2 ^= 1; + } + } + if (!var_r31->unk_44) { + if (0.0f != var_r31->unk_1C.x || 0.0f != var_r31->unk_1C.z) { + sp8.x = var_r31->unk_1C.z; + sp8.y = 0.0f; + sp8.z = -var_r31->unk_1C.x; + var_f30 = PSVECMag(&sp8) / 30.000002f; + if (var_f30 >= 0.001f) { + PSMTXRotAxisRad(sp14, &sp8, var_f30); + var_r28 = &Hu3DData[object->model[var_r30]]; + PSMTXConcat(sp14, var_r28->unk_F0, var_r28->unk_F0); + } + } + } else { + var_r31->unk_44--; + } + } + if (var_r31->unk_00_field2) { + Hu3DModelAttrReset(var_r31->unk_30, 1); + } else { + Hu3DModelAttrSet(var_r31->unk_30, 1); + } + Hu3DModelPosSet(object->model[var_r30], var_r31->unk_04.x, var_r31->unk_04.y, var_r31->unk_04.z); + } + if (fn_1_281C() > 2 && fn_1_28DC() == 1) { + var_r31 = lbl_1_bss_58->data; + + for (var_r30 = 0; var_r30 < 60; var_r30++, var_r31++) { + if (var_r31->unk_00_field0) { + fn_1_7520(&var_r31->unk_04); + Hu3DModelAttrSet(var_r31->unk_30, 1); + var_r31->unk_00_field0 = 0; + } + } + lbl_1_bss_58->func = NULL; + Hu3DModelAttrReset(lbl_1_bss_38, 1); + fn_1_287C(4); + } +} + +void fn_1_6D84(omObjData *object) +{ + HuMemDirectFree(object->data); +} + +s32 lbl_1_data_104[] = { DATA_MAKE_NUM(DATADIR_M410, 8), DATA_MAKE_NUM(DATADIR_M410, 9), DATA_MAKE_NUM(DATADIR_M410, 8) }; + +void fn_1_6DB4(omObjData *object) +{ + UnkM410Struct2 *var_r31; + s32 var_r29; + s16 var_r28; + + object->stat |= 0x100; + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM410Struct2) * 18, MEMORY_DEFAULT_NUM); + object->data = var_r31; + memset(var_r31, 0, sizeof(UnkM410Struct2) * 18); + + for (var_r29 = 0; var_r29 < 18; var_r29++, var_r31++) { + var_r31->unk_34 = var_r29 / 6; + object->model[var_r29] = Hu3DModelCreateFile(lbl_1_data_104[var_r31->unk_34]); + var_r28 = object->model[var_r29]; + (void)var_r28; + Hu3DModelAttrSet(object->model[var_r29], 0x40000002); + Hu3DData[object->model[var_r29]].cluster_attr[0] = 0; + var_r31->unk_30 = object->model[var_r29]; + var_r31->unk_32 = var_r29; + var_r31->unk_04.x = (250.0f * (var_r29 % 6)) - 750.0f; + + if ((var_r31->unk_34 & 1) == 0) { + var_r31->unk_04.x += 125.0f; + } + var_r31->unk_04.y = 140.0f + (140.0f * var_r31->unk_34); + var_r31->unk_04.z = -700.0f; + var_r31->unk_28 = 1.0f; + var_r31->unk_2C = 50.0f; + Hu3DModelPosSet(object->model[var_r29], var_r31->unk_04.x, var_r31->unk_04.y, var_r31->unk_04.z); + + if (!var_r29) { + object->model[var_r29 + 0x12] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M410, 10)); + } else { + object->model[var_r29 + 0x12] = Hu3DModelLink(object->model[18]); + } + Hu3DModelShadowMapSet(object->model[var_r29 + 18]); + Hu3DModelPosSet(object->model[var_r29 + 18], var_r31->unk_04.x, var_r31->unk_04.y, var_r31->unk_04.z); + if (!var_r29) { + object->model[var_r29 + 36] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M410, 11)); + + } else { + object->model[var_r29 + 36] = Hu3DModelLink(object->model[36]); + } + Hu3DModelPosSet(object->model[var_r29 + 0x24], 20.0f + var_r31->unk_04.x, -10.0f + var_r31->unk_04.y, var_r31->unk_04.z); + } + object->func = fn_1_7138; +} + +void fn_1_7138(omObjData *object) +{ + float var_f31; + UnkM410Struct2 *var_r31; + s32 var_r29; + + var_r31 = object->data; + + for (var_r29 = 0; var_r29 < 18; var_r29++, var_r31++) { + if (var_r31->unk_34 & 1) { + var_f31 = lbl_1_bss_50; + } else { + var_f31 = -lbl_1_bss_50; + } + var_r31->unk_1C.x = var_f31; + if (var_r31->unk_00_field4) { + Hu3DModelAttrReset(object->model[var_r29], 0x40000002); + Hu3DMotionSpeedSet(object->model[var_r29], 4.0f); + Hu3DMotionSet(object->model[var_r29], 0); + Hu3DMotionClusterNoSet(object->model[var_r29], Hu3DData[object->model[var_r29]].unk_10[0], 0); + Hu3DData[object->model[var_r29]].unk_B4[0] = 4.0f; + var_r31->unk_00_field4 = 0; + } + if (var_r31->unk_1C.x < 0.0f) { + if (var_r31->unk_04.x < -750.0f) { + var_r31->unk_04.x += 1500.0f; + var_r31->unk_00_field6 = 1; + } + } else if (var_r31->unk_04.x > 750.0f) { + var_r31->unk_04.x -= 1500.0f; + var_r31->unk_00_field6 = 1; + } + if (var_r31->unk_00_field6) { + if (var_r31->unk_38 != NULL) { + var_r31->unk_38->unk_00_field0 = 0; + var_r31->unk_38 = NULL; + Hu3DMotionClusterNoSet(object->model[var_r29], Hu3DData[object->model[var_r29]].unk_10[0], 0); + Hu3DData[object->model[var_r29]].unk_B4[0] = 0.0f; + } + var_r31->unk_00_field6 = 0; + } + Hu3DModelPosSet(object->model[var_r29], var_r31->unk_04.x, var_r31->unk_04.y, var_r31->unk_04.z); + Hu3DModelPosSet(object->model[var_r29 + 18], var_r31->unk_04.x, var_r31->unk_04.y, var_r31->unk_04.z); + Hu3DModelPosSet(object->model[var_r29 + 36], 20.0f + var_r31->unk_04.x, -10.0f + var_r31->unk_04.y, var_r31->unk_04.z); + } +} + +void fn_1_7464(omObjData *object) +{ + HuMemDirectFree(object->data); +} + +void fn_1_7494(void) +{ + AnimData *var_r31; + + var_r31 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_EFFECT, 2), MEMORY_DEFAULT_NUM)); + lbl_1_bss_38 = Hu3DParticleCreate(var_r31, 60); + Hu3DParticleHookSet(lbl_1_bss_38, fn_1_75A0); + Hu3DModelAttrSet(lbl_1_bss_38, 1); +} + +void fn_1_7520(Vec *arg0) +{ + ParticleData *var_r30; // no, custom struct + void *var_r31; + + var_r30 = Hu3DData[lbl_1_bss_38].unk_120; // unk_120 is not ParticleData + // var_r31 = var_r30->unk_48 + (var_r30->unk_02++ * 0x44); + 100.0f; // to fit rodata temporarily + // var_r31->unk_2C = 100.0f; + // var_r31->unk_34 = arg0->x; + // var_r31->unk_38 = arg0->y; + // var_r31->unk_3C = arg0->z; +} + +s32 lbl_1_data_110 = 60; + +void fn_1_75A0(ModelData *model, ParticleData *particle, Mtx matrix) +{ + HsfanimStruct01 *var_r30; + s16 var_r29; + u8 var_r28; + + if (!particle->unk_00) { + particle->unk_00 = 1; + var_r30 = &particle->unk_48[particle->unk_02]; // TODO + var_r29 = particle->unk_02; + for (; var_r29 < particle->unk_30; var_r29++, var_r30 += 0x44) { + var_r30->unk2C = 0.0f; + } + } + var_r28 = (lbl_1_data_110 * 0xFF) / 60; + var_r30 = particle->unk_48; + + // for (var_r29 = 0; var_r29 < particle->unk_02; var_r29++, var_r30 += 0x44) { + // var_r30->unk_43 = var_r28; // 43? + // } + // if (--lbl_1_data_110 == 0) { + // model->unk_50 = model->unk_50 | 1; + // } + // DCStoreRange(particle->unk_048, particle->unk_30 * 0x44); +} + +s32 fn_1_76B8(void *arg0, Vec *arg1, u16 arg2) +{ + UnkM410Struct2 *var_r31; + s32 var_r30; + + var_r31 = &((UnkM410Struct2 *)lbl_1_bss_58->data)[arg2 * 15]; + var_r30 = 0; + while (TRUE) { + if (var_r30 >= 15) { + return 0; + } + if (!var_r31->unk_00_field0) { + var_r31->unk_00_field4 = 0; // TODO this sets two bytes... so maybe wrong struct, the size is right though + // var_r31->unk_0 = var_r31->unk_0 | 0x80; + // var_r31->unk_0 = var_r31->unk_0 | 0x20; + // var_r31->unk_04 = arg0->unk_0; + // var_r31->unk_08 = arg0->unk_04; + // var_r31->unk_0C = arg0->unk_08; + // var_r31->unk_1C = arg1->unk_0; + // var_r31->unk_20 = arg1->unk_04; + // var_r31->unk_24 = arg1->unk_08; + var_r31->unk_28 = 30.000002f; + var_r31->unk_38 = 0; + var_r31->unk_36 = 0; + return 1; + } + var_r30++; + var_r31++; + } +} + +void fn_1_77A4(u16 arg0, u16 arg1, u16 arg2) +{ + OSReport("GOAL!!(%d , %d , %d)\n", arg0, arg1, arg2); +} + +void fn_1_77E8(void *arg0) +{ + lbl_1_bss_44 = arg0; +} + +void fn_1_77F8(u16 arg0, Vec *arg1) +{ + UnkM410Struct2 *var_r31; + + var_r31 = &((UnkM410Struct2 *)lbl_1_bss_54->data)[arg0]; + arg1->x = var_r31->unk_04.x; + arg1->y = var_r31->unk_04.y; + arg1->z = var_r31->unk_04.z; +} + +void fn_1_7840(u16 arg0, Vec *arg1) +{ + UnkM410Struct2 *var_r31; + + var_r31 = &((UnkM410Struct2 *)lbl_1_bss_54->data)[arg0]; + arg1->x = var_r31->unk_1C.x; + arg1->y = var_r31->unk_1C.y; + arg1->z = var_r31->unk_1C.z; +} + +void fn_1_7888(u16 arg0, u16 arg1, Vec *arg2) +{ + Vec sp8; + UnkM410Struct2 *var_r31; + + var_r31 = &((UnkM410Struct2 *)lbl_1_bss_54->data)[arg0]; + sp8.x = var_r31->unk_04.x + var_r31->unk_1C.x * arg1; + sp8.y = var_r31->unk_04.y + var_r31->unk_1C.y * arg1; + sp8.z = var_r31->unk_04.z + var_r31->unk_1C.z * arg1; + if (var_r31->unk_1C.x < 0.0f) { + while (sp8.x < -750.0f) { + sp8.x += 1500.0f; + } + } else { + while (sp8.x > 750.0f) { + sp8.x -= 1500.0f; + } + } + arg2->x = sp8.x; + arg2->y = sp8.y; + arg2->z = sp8.z; +} + +s32 fn_1_79F8(s16 arg0, char *arg1, Mtx arg2) +{ + Mtx sp44; + Mtx sp14; + HsfData *var_r30; + ModelData *var_r31; + + var_r31 = &Hu3DData[arg0]; + var_r30 = var_r31->hsfData; + lbl_1_bss_30 = 0; + mtxRot(sp14, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z); + PSMTXScale(sp44, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); + PSMTXConcat(sp14, sp44, sp44); + mtxTransCat(sp44, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z); + fn_1_7AC4(var_r30->root, sp44, arg1, arg2); + return lbl_1_bss_30; +} + +void fn_1_7AC4(HsfObject *arg0, Mtx arg1, char *arg2, Mtx arg3) +{ + Mtx sp15C; + Mtx sp12C; + Mtx spFC; + Mtx spCC; + Mtx sp9C; + Mtx sp6C; + Mtx sp3C; + Mtx spC; + + HsfTransform *var_r31; + HsfTransform *var_r30; + HsfTransform *var_r29; + HsfTransform *var_r28; + HsfObject *var_r27; + HsfObject *var_r26; + HsfObject *var_r25; + u32 var_r23; + u32 var_r22; + u32 var_r21; + u32 var_r20; + + if (lbl_1_bss_30) { + return; + } + var_r31 = &arg0->data.curr; + + mtxRot(sp12C, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z); + PSMTXScale(sp15C, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z); + PSMTXConcat(sp12C, sp15C, sp15C); + mtxTransCat(sp15C, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z); + PSMTXConcat(arg1, sp15C, sp15C); + if (!strcmp(arg2, arg0->name)) { + PSMTXCopy(sp15C, arg3); + lbl_1_bss_30 = 1; + } + + for (var_r23 = 0; var_r23 < arg0->data.childrenCount; var_r23++) { + var_r27 = arg0->data.children[var_r23]; + if (!lbl_1_bss_30) { + var_r30 = &var_r27->data.curr; + mtxRot(spFC, var_r30->rot.x, var_r30->rot.y, var_r30->rot.z); + PSMTXScale(spCC, var_r30->scale.x, var_r30->scale.y, var_r30->scale.z); + PSMTXConcat(spFC, spCC, spCC); + mtxTransCat(spCC, var_r30->pos.x, var_r30->pos.y, var_r30->pos.z); + PSMTXConcat(sp15C, spCC, spCC); + if (!strcmp(arg2, var_r27->name)) { + PSMTXCopy(spCC, arg3); + lbl_1_bss_30 = 1; + } + for (var_r22 = 0; var_r22 < var_r27->data.childrenCount; var_r22++) { + var_r26 = var_r27->data.children[var_r22]; + if (!lbl_1_bss_30) { + var_r29 = &var_r26->data.curr; + mtxRot(sp9C, var_r29->rot.x, var_r29->rot.y, var_r29->rot.z); + PSMTXScale(sp6C, var_r29->scale.x, var_r29->scale.y, var_r29->scale.z); + PSMTXConcat(sp9C, sp6C, sp6C); + mtxTransCat(sp6C, var_r29->pos.x, var_r29->pos.y, var_r29->pos.z); + PSMTXConcat(spCC, sp6C, sp6C); + if (!strcmp(arg2, var_r26->name)) { + PSMTXCopy(sp6C, arg3); + lbl_1_bss_30 = 1; + } + + for (var_r21 = 0; var_r21 < var_r26->data.childrenCount; var_r21++) { + var_r25 = var_r26->data.children[var_r21]; + if (!lbl_1_bss_30) { + var_r28 = &var_r25->data.curr; + mtxRot(sp3C, var_r28->rot.x, var_r28->rot.y, var_r28->rot.z); + PSMTXScale(spC, var_r28->scale.x, var_r28->scale.y, var_r28->scale.z); + PSMTXConcat(sp3C, spC, spC); + mtxTransCat(spC, var_r28->pos.x, var_r28->pos.y, var_r28->pos.z); + PSMTXConcat(sp6C, spC, spC); + if (!strcmp(arg2, var_r25->name)) { + PSMTXCopy(spC, arg3); + lbl_1_bss_30 = 1; + } + + for (var_r20 = 0; var_r20 < var_r25->data.childrenCount; var_r20++) { + fn_1_7AC4(var_r25->data.children[var_r20], spC, arg2, arg3); + } + } + } + } + } + } + } +} diff --git a/src/REL/m410Dll/main.c b/src/REL/m410Dll/main.c new file mode 100644 index 00000000..145d9728 --- /dev/null +++ b/src/REL/m410Dll/main.c @@ -0,0 +1,561 @@ +#include "ext_math.h" +#include "game/gamework_data.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/wipe.h" +#include "rel_sqrt_consts.h" + +#include "REL/m410Dll.h" + +Process *lbl_1_bss_28; +omObjData *lbl_1_bss_24; +omObjData *lbl_1_bss_20; +s16 lbl_1_bss_1C; +s32 lbl_1_bss_18; +s16 lbl_1_bss_16; +s16 lbl_1_bss_14; +s16 lbl_1_bss_12; +s16 lbl_1_bss_10; +s32 lbl_1_bss_C; +s32 lbl_1_bss_8; +s32 lbl_1_bss_4; +s32 lbl_1_bss_0; + +Vec lbl_1_data_0 = { 100.0f, 800.0f, -100.0f }; +Vec lbl_1_data_C = { 0.3f, -0.8f, 0.3f }; +Vec lbl_1_data_18 = { 10.0f, 45.0f, 3500.0f }; +GXColor lbl_1_data_24 = { 255, 255, 255, 255 }; +Vec lbl_1_data_28 = { 50.0f, 150000.0f, 50.0f }; +Vec lbl_1_data_34 = { 0.0f, 1.0f, 0.0f }; +Vec lbl_1_data_40 = { 0.0f, 0.0f, 0.0f }; +Vec lbl_1_data_4C[] = { + { -350.0f, 120.00001f, 0.0f }, + { -350.0f, 120.00001f, 0.0f }, + { 0.0f, 350.0f, -300.0f }, + { 0.0f, 350.0f, -300.0f }, + { 0.0f, 367.0f, 252.0f }, +}; +Vec lbl_1_data_88[] = { + { 20.0f, -25.0f, 300.0f }, + { 20.0f, -25.0f, 300.0f }, + { 15.0f, 15.0f, 1100.0f }, + { 15.0f, 15.0f, 1100.0f }, + { -11.2f, 0.0f, 592.0f }, +}; +s32 lbl_1_data_C4[] = { 60, 90, 108, 30, 0 }; + +void fn_1_4E4(omObjData *object); +void fn_1_63C(omObjData *object); +void fn_1_7A8(omObjData *object); +void fn_1_ABC(omObjData *object); +void fn_1_DEC(omObjData *object); +void fn_1_FF0(omObjData *object); +void fn_1_139C(omObjData *object); +void fn_1_1648(omObjData *object); +omObjFunc fn_1_19C8(Process *objman, omObjData *object); +void fn_1_1A7C(omObjData *object); +omObjFunc fn_1_216C(Process *objman, omObjData *object); +void fn_1_2188(omObjData *object); + +void ModuleProlog(void) +{ + Mtx sp20; + Vec sp14; + Vec sp8; + Process *var_r31; + LightData *var_r30; + + HuAudSndGrpSet(35); + lbl_1_bss_4 = lbl_1_bss_0 = -1; + lbl_1_bss_C = lbl_1_bss_8 = -1; + lbl_1_bss_1C = -1; + lbl_1_data_28.x = 200.0f; + lbl_1_data_28.y = 1200.0f; + lbl_1_data_28.z = 160.0f; + lbl_1_data_34.x = 0.0f; + lbl_1_data_34.y = 1.0f; + lbl_1_data_34.z = 0.0f; + lbl_1_data_40.x = 0.0f; + lbl_1_data_40.y = 0.0f; + lbl_1_data_40.z = 0.0f; + Hu3DShadowCreate(45.0f, 20.0f, 25000.0f); + Hu3DShadowTPLvlSet(0.625f); + Hu3DShadowPosSet(&lbl_1_data_28, &lbl_1_data_34, &lbl_1_data_40); + lbl_1_bss_16 = Hu3DGLightCreateV(&lbl_1_data_0, &lbl_1_data_C, &lbl_1_data_24); + Hu3DGLightInfinitytSet(lbl_1_bss_16); + var_r30 = &Hu3DGlobalLight[lbl_1_bss_16]; + var_r30->unk_00 = var_r30->unk_00 | 0x8000; + lbl_1_data_18.x = 34.75f; + lbl_1_data_18.y = -24.75f; + lbl_1_data_18.z = 3500.0f; + sp14.x = sp14.y = sp14.z = 0.0f; + sp8.x = sp8.z = 0.0f; + sp8.y = lbl_1_data_18.z; + mtxRot(sp20, lbl_1_data_18.x, lbl_1_data_18.y, 0.0f); + PSMTXMultVec(sp20, &sp8, &sp8); + Hu3DGLightPosAimSetV(lbl_1_bss_16, &sp8, &sp14); + Hu3DShadowPosSet(&sp8, &lbl_1_data_34, &sp14); + lbl_1_bss_14 = lbl_1_bss_12 = lbl_1_bss_10 = -1; + var_r31 = omInitObjMan(50, 8192); + lbl_1_bss_28 = var_r31; + omGameSysInit(var_r31); + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, -1.0f, 5.0f, 5000.0f, 1.2f); + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + lbl_1_bss_20 = omAddObjEx(var_r31, 32730, 0, 0, -1, omOutView); + lbl_1_bss_24 = omAddObjEx(var_r31, 10, 0, 0, -1, fn_1_4E4); + fn_1_31A4(var_r31); + fn_1_33A8(var_r31); + fn_1_7E30(var_r31); +} + +void fn_1_4E4(omObjData *object) +{ + UnkM410Struct *var_r31; + + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM410Struct), MEMORY_DEFAULT_NUM); + var_r31 = object->data; + memset(var_r31, 0, sizeof(UnkM410Struct)); + var_r31->unk_00 = 0; + var_r31->unk_04 = 0; + var_r31->unk_0C = 0; + var_r31->unk_10 = 0; + var_r31->unk_14 = 0; + var_r31->unk_18 = 0; + var_r31->unk_24 = 0; + var_r31->unk_28 = 0; + var_r31->unk_08 = 0; + var_r31->unk_2C = 0; + var_r31->unk_30 = 0; + var_r31->unk_34 = 0; + object->func = fn_1_7A8; +} + +void fn_1_5A8(omObjData *object) +{ + UnkM410Struct *var_r31; + + var_r31 = object->data; + var_r31->unk_04++; + var_r31->unk_10++; + var_r31->unk_18++; + var_r31->unk_28++; + if (omSysExitReq && var_r31->unk_00 != 5) { + var_r31->unk_00 = 4; + fn_1_63C(object); + } +} + +void fn_1_63C(omObjData *object) +{ + UnkM410Struct *var_r31; + + var_r31 = object->data; + + if (var_r31->unk_08) { + return; + } + switch (var_r31->unk_00) { + case 0: + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + Hu3DCameraPerspectiveSet(1, 41.5f, 5.0f, 5000.0f, 1.2f); + var_r31->unk_00 = 1; + var_r31->unk_10 = 0; + object->func = fn_1_19C8(lbl_1_bss_28, object); + break; + case 1: + var_r31->unk_00 = 2; + var_r31->unk_18 = 0; + object->func = fn_1_FF0; + break; + case 2: + var_r31->unk_00 = 3; + var_r31->unk_28 = 0; + object->func = fn_1_216C(lbl_1_bss_28, object); + break; + case 3: + case 4: + var_r31->unk_08 = 1; + var_r31->unk_00 = 5; + object->func = fn_1_ABC; + break; + case 5: + default: + var_r31->unk_00 = 5; + object->func = fn_1_DEC; + break; + } + var_r31->unk_04 = 0; + +} + +void fn_1_7A8(omObjData *object) +{ + fn_1_5A8(object); + fn_1_63C(object); +} + +void fn_1_ABC(omObjData *object) +{ + UnkM410Struct *var_r27; + + var_r27 = object->data; + fn_1_5A8(object); + if (!WipeStatGet()) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + var_r27->unk_08 = 0; + fn_1_63C(object); + } +} + +void fn_1_DEC(omObjData *object) +{ + fn_1_5A8(object); + if (!WipeStatGet()) { + fn_1_806C(); + fn_1_3484(); + fn_1_31F8(); + MGSeqKillAll(); + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + } +} + +void fn_1_FF0(omObjData *object) +{ + void *var_r31; + UnkM410Struct *var_r29; + void *var_r28; + + var_r29 = object->data; + + fn_1_5A8(object); + switch (var_r29->unk_14) { + case 0: + var_r29->unk_1C = 30; + var_r29->unk_20 = 60; + lbl_1_bss_14 = MGSeqCreate(3, 0); + MGSeqPosSet(lbl_1_bss_14, 320.0f, 240.0f); + CRot.x = -11.2f; + CRot.y = CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 367.0f; + Center.z = 252.0f; + CZoom = 592.0f; + var_r29->unk_14 = 1; + var_r29->unk_18 = 0; + break; + + case 1: + if (lbl_1_bss_4 < 0 && MGSeqStatGet(lbl_1_bss_14) & 16) { + lbl_1_bss_4 = HuAudSeqPlay(71); + } + if (!MGSeqStatGet(lbl_1_bss_14) && !var_r29->unk_08) { + lbl_1_bss_1C = MGSeqCreate(1, var_r29->unk_1C, -1, -1); + var_r29->unk_14 = 2; + var_r29->unk_18 = 0; + object->func = fn_1_139C; + } + break; + + default: + break; + } + + +} + +void fn_1_139C(omObjData *object) +{ + UnkM410Struct *var_r29; + s32 var_r27; + + var_r29 = object->data; + var_r27 = 0; + fn_1_5A8(object); + + if (!--var_r29->unk_20) { + var_r29->unk_20 = 60; + var_r29->unk_1C--; + if (!var_r29->unk_1C) { + var_r27 = 1; + } + } + if (var_r27) { + lbl_1_bss_12 = MGSeqCreate(3, 1); + MGSeqPosSet(lbl_1_bss_12, 320.0f, 240.0f); + HuAudSeqFadeOut(lbl_1_bss_4, 100); + var_r29->unk_14 = 3; + var_r29->unk_18 = 0; + if (var_r29->unk_08 == 0) { + object->func = fn_1_1648; + } + } + MGSeqParamSet(lbl_1_bss_1C, 1, var_r29->unk_1C); +} + +void fn_1_1648(omObjData *object) +{ + UnkM410Struct *var_r27; + + var_r27 = object->data; + if (lbl_1_bss_1C >= 0) { + MGSeqParamSet(lbl_1_bss_1C, 2, -1); + lbl_1_bss_1C = -1; + } + fn_1_5A8(object); + + if (!MGSeqStatGet(lbl_1_bss_12) && (var_r27->unk_30 + 0xFFFF0000 == 0x1111)) { // -4294897391 + var_r27->unk_14 = 4; + var_r27->unk_18 = 0; + fn_1_63C(object); + } +} + +omObjFunc fn_1_19C8(Process *objman, omObjData *object) +{ + CRot.x = -80.5f; + CRot.y = CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 0.0f; + Center.z = 0.0f; + CZoom = 1000.0f; + object->work[0] = object->work[1] = 0; + return fn_1_1A7C; +} + +void fn_1_1A7C(omObjData *object) +{ + Vec sp8; + float var_f31; + UnkM410Struct *var_r27; + + var_r27 = object->data; + fn_1_5A8(object); + var_r27->unk_0C = 1; + object->work[0]++; + + if (!object->work[1] && object->work[0] > 12.0f) { + if (lbl_1_bss_C < 0) { + lbl_1_bss_C = HuAudFXPlay(1382); + } + if (lbl_1_bss_8 < 0) { + lbl_1_bss_8 = HuAudFXPlay(1383); + } + } + var_f31 = (float)object->work[0] / lbl_1_data_C4[object->work[1]]; + + PSVECSubtract(&lbl_1_data_4C[object->work[1] + 1], &lbl_1_data_4C[object->work[1]], &sp8); + PSVECScale(&sp8, &sp8, var_f31); + PSVECAdd(&lbl_1_data_4C[object->work[1]], &sp8, &sp8); + + Center.x = sp8.x; + Center.y = sp8.y; + Center.z = sp8.z; + + PSVECSubtract(&lbl_1_data_88[object->work[1] + 1], &lbl_1_data_88[object->work[1]], &sp8); + PSVECScale(&sp8, &sp8, var_f31); + PSVECAdd(&lbl_1_data_88[object->work[1]], &sp8, &sp8); + + CRot.x = sp8.x; + CRot.y = sp8.y; + CRot.z = 0.0f; + CZoom = sp8.z; + + if (var_f31 >= 1.0f) { + object->work[0] = 0; + object->work[1] += 1; + if (!lbl_1_data_C4[object->work[1]]) { + var_r27->unk_0C = 2; + fn_1_63C(object); + } + } +} + +omObjFunc fn_1_216C(Process *objman, omObjData *object) +{ + u32 sp8 = object->work[4]; + return fn_1_2188; +} + +void fn_1_2188(omObjData *object) +{ + s32 sp10[5]; + UnkM410Struct *var_r27; + s32 var_r26; + u32 var_r25; + s32 var_r24; + + var_r27 = object->data; + fn_1_5A8(object); + + var_r27->unk_24 = 1; + if (var_r27->unk_28 < 60.0f) { + Center.y -= 1.6666667f; + } + if (lbl_1_bss_10 < 0) { + for (var_r24 = 0, var_r25 = 1, var_r26 = 0; var_r26 < 4; var_r25 *= 2, var_r26++) { + sp10[var_r26] = -1; + if (var_r27->unk_2C & var_r25) { + sp10[var_r24++] = GWPlayerCfg[var_r26].character; + GWPlayerCoinWinAdd(var_r26, 10); + } + } + if (sp10[0] == -1) { + lbl_1_bss_10 = MGSeqCreate(3, 2); + if (lbl_1_bss_0 >= 0) { + return; + } + lbl_1_bss_0 = HuAudSStreamPlay(4); + return; + } + lbl_1_bss_10 = MGSeqCreate(5, 3, sp10[0], sp10[1], sp10[2], sp10[3]); + if (lbl_1_bss_0 >= 0) { + return; + } + lbl_1_bss_0 = HuAudSStreamPlay(1); + return; + } + if (!MGSeqStatGet(lbl_1_bss_10)) { + if (var_r27->unk_28 >= 210.0f) { + var_r27->unk_24 = 2; + fn_1_63C(object); + } + } +} + +s32 fn_1_27EC(void) +{ + return ((UnkM410Struct *)lbl_1_bss_24->data)->unk_00; +} + +u32 fn_1_2804(void) +{ + return ((UnkM410Struct *)lbl_1_bss_24->data)->unk_0C; +} + +u32 fn_1_281C(void) +{ + return ((UnkM410Struct *)lbl_1_bss_24->data)->unk_14; +} + +u32 fn_1_2834(void) +{ + return ((UnkM410Struct *)lbl_1_bss_24->data)->unk_24; +} + +void fn_1_284C(s32 arg0) +{ + ((UnkM410Struct *)lbl_1_bss_24->data)->unk_2C = arg0; +} + +u32 fn_1_2864(void) +{ + return ((UnkM410Struct *)lbl_1_bss_24->data)->unk_2C; +} + +void fn_1_287C(s32 arg0) +{ + ((UnkM410Struct *)lbl_1_bss_24->data)->unk_30 |= (1 << ((arg0 & 7) * 4)); +} + +void fn_1_28AC(s32 arg0) +{ + ((UnkM410Struct *)lbl_1_bss_24->data)->unk_34 |= (1 << ((arg0 & 3) * 4)); +} + +s32 fn_1_28DC(void) +{ + return MGSeqStatGet(lbl_1_bss_12) == 0; +} + +void fn_1_2914(Vec *arg0, Vec *arg1) +{ + Vec sp10; + float var_f29; + float var_f28; + float var_f27; + + sp10.x = arg1->x - arg0->x; + sp10.y = arg1->y - arg0->y; + sp10.z = arg1->z - arg0->z; + + Center.x = arg1->x; + Center.y = arg1->y; + Center.z = arg1->z; + + CRot.x = atan2d(sp10.y, VECMagXZ(&sp10)); + CRot.y = atan2d(-sp10.x, -sp10.z); + CRot.z = 0.0f; + + CZoom = VECMagPoint(sp10.x, sp10.y, sp10.z); +} + +void fn_1_2C5C(float arg8, float arg9, float argA, float argB, float argC, float argD) +{ + Vec sp28; + Vec sp14; + Vec sp8; + + sp28.x = arg8; + sp28.y = arg9; + sp28.z = argA; + + sp14.x = argB; + sp14.y = argC; + sp14.z = argD; + + sp8.x = sp14.x - sp28.x; + sp8.y = sp14.y - sp28.y; + sp8.z = sp14.z - sp28.z; + + Center.x = sp14.x; + Center.y = sp14.y; + Center.z = sp14.z; + + CRot.x = atan2d(sp8.y, VECMagXZ(&sp8)); + CRot.y = atan2d(-sp8.x, -sp8.z); + CRot.z = 0.0f; + + CZoom = VECMagPoint(sp8.x, sp8.y, sp8.z); +} + +float fn_1_2FD4(float arg8, float arg9, float argA) +{ + float var_f31; + float var_f30; + float var_f29; + + var_f30 = fmod(arg9 - arg8, 360.0); + var_f31 = var_f30; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 > 180.0f) { + var_f31 -= 360.0f; + } + var_f29 = fmod(arg8 + (argA * var_f31), 360.0); + var_f31 = var_f29; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + return var_f31; +} + +float fn_1_30F0(float arg8, float arg9) +{ + float var_f31; + float var_f30; + + var_f30 = fmod(arg9 - arg8, 360.0); + var_f31 = var_f30; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 > 180.0f) { + var_f31 -= 360.0f; + } + return var_f31; +} diff --git a/src/REL/m410Dll/player.c b/src/REL/m410Dll/player.c new file mode 100644 index 00000000..b5d02b1e --- /dev/null +++ b/src/REL/m410Dll/player.c @@ -0,0 +1,1101 @@ +#include "ext_math.h" +#include "game/chrman.h" +#include "game/gamework_data.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/object.h" +#include "game/pad.h" +#include "game/sprite.h" + +#include "REL/m410Dll.h" + +omObjData *lbl_1_bss_74; +AnimData *lbl_1_bss_70; +s32 lbl_1_bss_60[4]; + +char *lbl_1_data_140[] = { "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r", + "dmy-itemhook-r", "dmy-itemhook-r" }; + +char *lbl_1_data_16C[] = { "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r" }; + +s32 lbl_1_data_18C[] + = { DATA_MAKE_NUM(DATADIR_M410, 0), DATA_MAKE_NUM(DATADIR_M410, 1), DATA_MAKE_NUM(DATADIR_M410, 2), DATA_MAKE_NUM(DATADIR_M410, 3), + DATA_MAKE_NUM(DATADIR_M410, 4), DATA_MAKE_NUM(DATADIR_M410, 5), DATA_MAKE_NUM(DATADIR_M410, 6), DATA_MAKE_NUM(DATADIR_M410, 7) }; + +u32 lbl_1_data_1AC[] = { 0, DATA_MAKE_NUM(DATADIR_M410, 70), DATA_MAKE_NUM(DATADIR_M410, 22), DATA_MAKE_NUM(DATADIR_M410, 30), + DATA_MAKE_NUM(DATADIR_M410, 38), DATA_MAKE_NUM(DATADIR_M410, 46), DATA_MAKE_NUM(DATADIR_M410, 62), DATA_MAKE_NUM(DATADIR_M410, 54), + DATA_MAKE_NUM(DATADIR_E3SETUP, 23), DATA_MAKE_NUM(DATADIR_E3SETUP, 24) }; + +UnkM410Struct10 lbl_1_data_1D4[] = { { 0.0f, 0.0f, 12.0f, 0x40000001 }, { 0.0f, 0.0f, 1.1999999, 0 }, { 0.0f, 0.0f, 12.0f, 0x40000001 }, + { 0.0f, 0.0f, 6.0f, 0 }, { 6.0f, 0.0f, 4.7999997f, 0 }, { 0.0f, 0.0f, 1.1999999f, 0 }, { 0.0f, 0.0f, 1.1999999f, 0 }, { 0.0f, 0.0f, 1.1999999f, 0 }, + { 0.0f, 0.0f, 12.0f, 0 }, { 0.0f, 0.0f, 12.0f, 0 } }; + +s32 lbl_1_data_274[] = { DATA_MAKE_NUM(DATADIR_MGCONST, 0), DATA_MAKE_NUM(DATADIR_MGCONST, 1), DATA_MAKE_NUM(DATADIR_MGCONST, 2), + DATA_MAKE_NUM(DATADIR_MGCONST, 3), DATA_MAKE_NUM(DATADIR_MGCONST, 4), DATA_MAKE_NUM(DATADIR_MGCONST, 5), DATA_MAKE_NUM(DATADIR_MGCONST, 6), + DATA_MAKE_NUM(DATADIR_MGCONST, 7) }; + +GXColor lbl_1_data_294[] = { + { 102, 0, 0, 255 }, + { 0, 0, 102, 255 }, + { 102, 0, 91, 255 }, + { 0, 102, 0, 255 }, + { 66, 0, 76, 255 }, + { 71, 40, 0, 255 }, + { 102, 102, 0, 255 }, + { 0, 0, 0, 255 }, +}; + +void fn_1_80A0(omObjData *object); +void fn_1_8414(omObjData *object); +void fn_1_8678(omObjData *object); +void fn_1_88D8(omObjData *object); +void fn_1_8A10(omObjData *object); +void fn_1_8ABC(omObjData *object); +void fn_1_9E0C(omObjData *arg0, u32 arg1); +void fn_1_96F4(omObjData *object); +s32 fn_1_9A90(omObjData *object); +s32 fn_1_9C84(omObjData *object); +s32 fn_1_9EFC(omObjData *object); +s32 fn_1_9F70(omObjData *object, u32 arg1); +void fn_1_A0A4(omObjData *object); +void fn_1_A3C0(omObjData *object); +void fn_1_A828(u16 arg0, u16 arg1, u16 arg2); +void fn_1_A9A4(UnkM410Struct13 *arg0); +void fn_1_B140(ModelData *arg0, Mtx arg1); + +void fn_1_7E30(Process *objman) +{ + u32 sp18[4]; + u32 sp8[4]; + + s16 var_r31; + s16 var_r30; + u32 var_r29; + omObjData *var_r27; + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + sp18[var_r31] = frandmod(1000); + sp8[var_r31] = var_r31; + } + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + for (var_r30 = var_r31 + 1; var_r30 < 4; var_r30++) { + if (sp18[var_r31] > sp18[var_r30]) { + var_r29 = sp18[var_r31]; + sp18[var_r31] = sp18[var_r30]; + sp18[var_r30] = var_r29; + var_r29 = sp8[var_r31]; + sp8[var_r31] = sp8[var_r30]; + sp8[var_r30] = var_r29; + } + } + } + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_60[sp8[var_r31]] = var_r31; + } + omMakeGroupEx(objman, 0, 4); + omGetGroupMemberListEx(objman, 0); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + var_r27 = omAddObjEx(objman, 40, 2, 10, 0, fn_1_80A0); + var_r27->work[0] = var_r31; + } + lbl_1_bss_74 = omAddObjEx(objman, 10, 1, 0, -1, fn_1_A0A4); + lbl_1_bss_70 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M410, 19), MEMORY_DEFAULT_NUM)); +} + +void fn_1_806C(void) +{ + s32 var_lr; + + HuSprAnimKill(lbl_1_bss_70); + CharModelKill(-1); +} + +void fn_1_80A0(omObjData *object) +{ + s32 sp8; + + UnkM410Struct5 *var_r31; + s16 var_r29; + s32 var_r28; + s32 var_r27; + + UnkM410Struct6 spC = { { 0.0f, 0.13f, 0.26f, 0.4f } }; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 148, MEMORY_DEFAULT_NUM); + var_r31 = object->data; + memset(var_r31, 0, 148); + var_r27 = object->work[0]; + var_r28 = GWPlayerCfg[var_r27].character; + var_r31->unk_00 = var_r28; + var_r31->unk_04 = lbl_1_bss_60[object->work[0]]; + sp8 = var_r31->unk_08 = 0; + var_r31->unk_4C = spC.unk_00[GWPlayerCfg[var_r27].diff & 3]; + object->model[0] = CharModelCreate(var_r28, 2); + Hu3DModelLayerSet(object->model[0], 4); + Hu3DModelShadowSet(object->model[0]); + object->model[1] = Hu3DModelCreateFile(lbl_1_data_18C[var_r28]); + Hu3DModelShadowSet(object->model[1]); + Hu3DModelLayerSet(object->model[1], 4); + + for (var_r29 = 0; var_r29 < 10; var_r29++) { + if (lbl_1_data_1AC[var_r29] < 0x10000) { + object->motion[var_r29] = CharModelMotionCreate(var_r28, lbl_1_data_1AC[var_r29]); + } else { + object->motion[var_r29] + = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(var_r28 + lbl_1_data_1AC[var_r29], MEMORY_DEFAULT_NUM, HEAP_DATA)); + } + } + CharModelMotionDataClose(var_r28); + object->trans.x = var_r31->unk_58.x = 2.0f * var_r31->unk_04 * 100.0f - 300.0f; + object->trans.y = var_r31->unk_58.y = 0.0f; + object->trans.z = var_r31->unk_58.z = 0.0f; + + var_r31->unk_64 = var_r31->unk_68 = var_r31->unk_6C = 0.0f; + var_r31->unk_3C = var_r31->unk_40 = 0.0f; + var_r31->unk_44 = 0.0f; + var_r31->unk_48 = 0.02f; + var_r31->unk_70.x = var_r31->unk_58.x; + var_r31->unk_70.y = 100.0f + var_r31->unk_58.y; + var_r31->unk_70.z = 400.0f + var_r31->unk_58.z; + var_r31->unk_14 = 1; + var_r31->unk_0C = -1; + fn_1_9E0C(object, 0); + Hu3DModelPosSet(object->model[1], var_r31->unk_70.x, var_r31->unk_70.y, var_r31->unk_70.z); + var_r31->unk_34 = 0; + object->func = fn_1_8414; +} + +void fn_1_8414(omObjData *object) +{ + UnkM410Struct5 *var_r31; + + var_r31 = object->data; + { + UnkM410Struct7 sp8 = { { 42, 78, 108, 125 } }; + + switch (var_r31->unk_34) { + case 0: + fn_1_9F70(object, 0); + if (fn_1_2804()) { + var_r31->unk_38 = 0; + var_r31->unk_34++; + } + break; + case 1: + if (var_r31->unk_38 >= sp8.unk_00[var_r31->unk_04]) { + var_r31->unk_28 = 1; + var_r31->unk_34++; + } + break; + case 2: + fn_1_96F4(object); + if (var_r31->unk_38 >= (2.8f + 0.00040000002f * frandmod(1000)) * 60.0f) { + var_r31->unk_2C = 1; + var_r31->unk_38 = 0; + var_r31->unk_34++; + } + break; + case 3: + if (var_r31->unk_24) { + if (var_r31->unk_38 >= 27.0f) { + var_r31->unk_30 = 1; + } + } + if (fn_1_9A90(object)) { + var_r31->unk_34++; + } + break; + case 4: + fn_1_9F70(object, 0); + break; + } + } + fn_1_8A10(object); + var_r31->unk_38++; + if (fn_1_2804() == 2) { + var_r31->unk_28 = 1; + var_r31->unk_34 = 0; + object->func = fn_1_8678; + } +} + +void fn_1_8678(omObjData *object) +{ + float var_f31; + float var_f30; + float var_f29; + UnkM410Struct5 *var_r31; + s32 var_r29; + + var_r31 = object->data; + var_r29 = 0; + var_r31->unk_10 = 0; + if (fn_1_281C() == 2) { + var_r31->unk_10 = HuPadBtnDown[GWPlayerCfg[object->work[0]].pad_idx]; + if (GWPlayerCfg[object->work[0]].iscom) { + fn_1_8ABC(object); + } + } + switch (var_r31->unk_34) { + case 0: + if (fn_1_9F70(object, 0)) { + var_r31->unk_28 = 1; + } + fn_1_96F4(object); + if (var_r31->unk_18) { + var_r31->unk_34++; + } + break; + case 1: + if (!var_r31->unk_1C && !var_r31->unk_20) { + if (var_r31->unk_10 & 0x100) { + if (fn_1_281C() == 2) { + var_r31->unk_2C = 1; + } + } else if (var_r31->unk_10 & 0x200 && fn_1_281C() == 2) { + if (fabs(fn_1_30F0(var_r31->unk_3C, var_r31->unk_40)) < 45.0) { + var_r31->unk_30 = 1; + } + } + var_r29 = 1; + } else if (var_r31->unk_24 && var_r31->unk_10 & 0x200) { + var_r31->unk_30 = 1; + } + if (fn_1_9A90(object) || fn_1_9C84(object)) { + var_r31->unk_36 = 0; + var_r31->unk_34--; + } + break; + } + fn_1_8A10(object); + if (fn_1_281C() == 3 && var_r29) { + fn_1_287C(object->work[0]); + var_r31->unk_34 = 0; + object->func = fn_1_88D8; + } +} + +void fn_1_88D8(omObjData *object) +{ + UnkM410Struct5 *var_r31; + + var_r31 = object->data; + fn_1_8A10(object); + switch (var_r31->unk_34) { + case 0: + var_r31->unk_34++; + return; + case 1: + if (fn_1_2834() == 1) { + Hu3DModelHookReset(object->model[0]); + Hu3DModelAttrSet(object->model[1], 1); + if ((1 << object->work[0]) & fn_1_2864()) { + fn_1_9E0C(object, 8); + } else { + fn_1_9E0C(object, 9); + } + var_r31->unk_40 = 0.0f; + var_r31->unk_44 = 0.0f; + var_r31->unk_48 = 0.005f; + var_r31->unk_34++; + } + break; + case 2: + if (fn_1_9EFC(object)) { + fn_1_28AC(object->work[0]); + var_r31->unk_34++; + } + break; + default: + break; + } +} + +void fn_1_8A10(omObjData *object) +{ + UnkM410Struct5 *var_r31; + + var_r31 = object->data; + var_r31->unk_36++; + object->trans.x = var_r31->unk_58.x; + object->trans.y = var_r31->unk_58.y; + object->trans.z = var_r31->unk_58.z; + + var_r31->unk_44 += var_r31->unk_48; + if (var_r31->unk_44 > 0.45f) { + var_r31->unk_44 = 0.45f; + } + var_r31->unk_3C = fn_1_2FD4(var_r31->unk_3C, var_r31->unk_40, var_r31->unk_44); + object->rot.y = var_r31->unk_3C; +} + +void fn_1_8ABC(omObjData *object) +{ + Vec sp34; + Vec sp28; + + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + + UnkM410Struct5 *var_r31; + s32 var_r30; + s32 var_r29; + + var_r31 = object->data; + var_r31->unk_10 = 0; + switch (var_r31->unk_50) { + case 0: + if (!var_r31->unk_18) { + return; + } + if (frandmod(1000) <= 1000.0f * var_r31->unk_4C) { + var_f28 = 42.0f; + if (frandmod(1000) <= 1000.0f * var_r31->unk_4C) { + var_f29 = 280.0f; + var_r31->unk_54 = 31.8f + frandmod(6); + } else { + var_f29 = 419.99997f; + var_r31->unk_54 = 9.0f + frandmod(15); + } + var_f27 = var_f28 + var_r31->unk_54; + var_r29 = -1; + var_f31 = 10000.0f; + for (var_r30 = 0; var_r30 < 18; var_r30++) { + fn_1_7888(var_r30, (s32)var_f27, &sp28); + if (fabs(sp28.y - var_f29) > 10.0) { + continue; + } + fn_1_7840(var_r30, &sp34); + if (fabs(sp34.x) < 1.9166667461395264) { + continue; + } + var_f30 = sp28.x - var_r31->unk_88.x; + if (sp34.x >= 0.0f) { + if (var_f30 < 0.0f) { + if (fabs(var_f30) < var_f31) { + var_r29 = var_r30; + var_f31 = fabs(var_f30); + } + } + } else if (var_f30 > 0.0f) { + if (fabs(var_f30) < var_f31) { + var_r29 = var_r30; + var_f31 = fabs(var_f30); + } + } + } + if (var_r29 < 0) { + return; + } + fn_1_7840(var_r29, &sp34); + var_f31 /= fabs(sp34.x); + var_r31->unk_52 = var_f27 + var_f31 - var_f28 - var_r31->unk_54; + } else { + var_r31->unk_52 = 24.0f + frandmod(36); + var_r31->unk_54 = 12.0f + frandmod(18); + } + var_r31->unk_50++; + return; + case 1: + if (!var_r31->unk_52) { + var_r31->unk_10 |= 256; + var_r31->unk_50++; + } + var_r31->unk_52--; + return; + case 2: + if (!var_r31->unk_54) { + var_r31->unk_10 |= 512; + var_r31->unk_50 = 0; + } + var_r31->unk_54--; + break; + } +} + +void fn_1_9040(omObjData *object) +{ + Mtx sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec 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; + double var_f21; + double var_f20; + + UnkM410Struct5 *var_r31; + s32 var_r29; + s32 var_r28; + s16 var_r27; + Vec *var_r26; + Vec *var_r25; + + var_r31 = object->data; + fn_1_79F8(object->model[0], lbl_1_data_16C[var_r31->unk_08], sp38); + + var_r31->unk_70.x = sp38[0][3]; + var_r31->unk_70.y = sp38[1][3]; + var_r31->unk_70.z = sp38[2][3]; + + if (fn_1_2804() == 1) { + var_r31->unk_88 = var_r31->unk_70; + var_r28 = -1; + var_f30 = 10000.0f; + + for (var_r29 = 0; var_r29 < 18; var_r29++) { + fn_1_77F8(var_r29, &sp20); + if (sp20.y < 350.0f) { + continue; + } + PSVECSubtract(&sp20, &var_r31->unk_58, &sp2C); + var_f28 = PSVECMag(&sp2C); + if (var_f28 < var_f30) { + var_r28 = var_r29; + var_f30 = var_f28; + } + } + fn_1_77F8(var_r28, &sp20); + var_f29 = 5.0f + sp20.y; + var_f31 = 0.65f + 0.000100000005f * frandmod(1000); + var_f26 = -3430.0002f; + var_f27 = (var_f29 - var_r31->unk_70.y - (var_f31 * var_f31 * var_f26 * 0.5f)) / var_f31; + sp2C.x = (0.016666668f * (sp20.x - var_r31->unk_70.x)) / var_f31; + sp2C.y = 0.016666668f * var_f27; + sp2C.z = (0.016666668f * (sp20.z - var_r31->unk_70.z)) / var_f31; + } else { + if (var_r31->unk_20 != 0) { + var_f30 = -450.0f + (0.05f * frandmod(1000)); + var_f29 = -100.0f; + var_f31 = 0.75f + (0.000100000005f * frandmod(1000)); + sp20.x = var_r31->unk_70.x + (0.05f * (frandmod(2000) - 1000)); + sp20.y = var_f29; + sp20.z = var_f30; + } else { + var_f30 = -700.0f; + var_f29 = 420.0f; + if (var_r31->unk_68 < -600.0f) { + var_f29 = 280.0f; + } + var_f31 = 0.65f + (0.000100000005f * frandmod(1000)); + var_r27 = 60.0f * var_f31; + var_r28 = -1; + var_f30 = 10000.0f; + + for (var_r29 = 0; var_r29 < 18; var_r29++) { + fn_1_7888(var_r29, var_r27, &sp20); + if (fabs(sp20.y - var_f29) > 20.0) { + continue; + } + var_f28 = fabs(sp20.x - var_r31->unk_88.x); + if (var_f28 < var_f30) { + var_r28 = var_r29; + var_f30 = var_f28; + } + } + var_f25 = 75.0f; + if (GWPlayerCfg[object->work[0]].iscom) { + var_f25 *= 0.25f; + } + if (var_r28 >= 0 && var_f30 <= var_f25) { + fn_1_7888(var_r28, var_r27, &sp20); + } else { + sp20.x = var_r31->unk_88.x; + sp20.y = var_f29; + sp20.z = -700.0f; + } + } + var_f26 = -3430.0002f; + var_f27 = ((sp20.y - var_r31->unk_70.y) - var_f31 * var_f31 * var_f26 * 0.5f) / var_f31; + sp2C.x = (sp20.x - var_r31->unk_70.x) * 0.016666668f / var_f31; + sp2C.y = 0.016666668f * var_f27; + sp2C.z = (sp20.z - var_r31->unk_70.z) * 0.016666668f / var_f31; + } + sp8 = sp2C; + var_r26 = &sp8; + sp14 = var_r31->unk_70; + var_r25 = &sp14; + fn_1_76B8(var_r25, var_r26, object->work[0]); + var_r31->unk_18 = 0; + var_r31->unk_24 = 0; + if (var_r31->unk_1C) { + fn_1_9E0C(object, 5); + } + Hu3DModelHookReset(object->model[0]); + Hu3DModelPosSet(object->model[1], var_r31->unk_70.x, var_r31->unk_70.y, var_r31->unk_70.z); +} + +void fn_1_96F4(omObjData *object) +{ + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + + UnkM410Struct5 *var_r31; + + var_r31 = object->data; + if (!var_r31->unk_18 && (!var_r31->unk_14 || var_r31->unk_28)) { + var_f29 = -3430.0002f; + var_f30 = 70.0f + object->trans.y; + var_f31 = 0.3f; + if (var_r31->unk_14 && var_r31->unk_28) { + var_r31->unk_14 = 0; + var_r31->unk_28 = 0; + Hu3DModelAttrReset(object->model[1], 1); + var_r31->unk_36 = 0; + var_r31->unk_70.x = object->trans.x; + var_r31->unk_70.y = 100.0f + object->trans.y; + var_r31->unk_70.z = 500.0f + object->trans.z; + var_f28 = ((var_f30 - var_r31->unk_70.y) - (var_f31 * var_f31 * var_f29 * 0.5f)) / var_f31; + var_f27 = 70.0f + object->trans.z; + var_r31->unk_7C.x = 0.0f; + var_r31->unk_7C.y = 0.016666668f * var_f28; + var_r31->unk_7C.z = (0.016666668f * (var_f27 - var_r31->unk_70.z)) / var_f31; + var_r31->unk_40 = 0.0f; + var_r31->unk_44 = 0.0f; + var_r31->unk_48 = 0.04f; + } + PSVECAdd(&var_r31->unk_70, &var_r31->unk_7C, &var_r31->unk_70); + var_r31->unk_7C.y = var_r31->unk_7C.y + (0.0002777778f * var_f29); + if ((var_r31->unk_7C.y < 0.0f) && (var_r31->unk_70.y <= var_f30)) { + var_r31->unk_18 = 1; + var_r31->unk_14 = 1; + var_r31->unk_28 = 0; + Hu3DModelHookSet(object->model[0], lbl_1_data_140[var_r31->unk_08], object->model[1]); + CharModelMotionSpeedSet(var_r31->unk_00, 2.0f); + var_r31->unk_40 = 180.0f; + var_r31->unk_44 = 0.0f; + var_r31->unk_48 = 0.005f; + HuAudFXPlay(1376); + } + if (var_r31->unk_18 != 0) { + Hu3DModelPosSet(object->model[1], 0.0f, 0.0f, 0.0f); + } else { + Hu3DModelPosSet(object->model[1], var_r31->unk_70.x, var_r31->unk_70.y, var_r31->unk_70.z); + } + if (var_r31->unk_36 >= (60.0f * (var_f31 - 0.17f))) { + fn_1_9E0C(object, 1); + } + } +} + +s32 fn_1_9A90(omObjData *object) +{ + UnkM410Struct5 *var_r31; + s32 var_r29; + + var_r31 = object->data; + var_r29 = 0; + if (var_r31->unk_20) { + return var_r29; + } + if (!var_r31->unk_18) { + Hu3DModelAttrSet(object->model[1], 1); + } + if (var_r31->unk_18 && !var_r31->unk_1C && var_r31->unk_2C) { + var_r31->unk_1C = 1; + var_r31->unk_2C = 0; + fn_1_9E0C(object, 4); + var_r31->unk_48 = 0.05f; + var_r31->unk_68 = 1300.0f; + } + if (var_r31->unk_1C) { + var_r31->unk_58.y = var_r31->unk_58.y + (0.016666668f * var_r31->unk_68); + var_r31->unk_68 += -66.66667014360428; + if (var_r31->unk_58.y <= 0.0f) { + var_r31->unk_1C = 0; + if (var_r31->unk_18) { + fn_1_9E0C(object, 7); + } else { + var_r29 = 1; + fn_1_9E0C(object, 6); + } + var_r31->unk_58.y = 0.0f; + } + var_r31->unk_24 = 0; + if (var_r31->unk_58.y >= 30.000002f && var_r31->unk_18) { + var_r31->unk_24 = 1; + if (var_r31->unk_30) { + fn_1_9040(object); + var_r31->unk_24 = 0; + var_r31->unk_30 = 0; + } + } + } else if (var_r31->unk_18) { + fn_1_9F70(object, 2); + } + return var_r29; +} + +s32 fn_1_9C84(omObjData *object) +{ + UnkM410Struct5 *var_r31; + s32 var_r29; + + object = object; + var_r31 = object->data; + var_r29 = 0; + if (!var_r31->unk_18) { + Hu3DModelAttrSet(object->model[1], 1); + } + if (!var_r31->unk_20 && var_r31->unk_18 && !var_r31->unk_1C && var_r31->unk_30) { + fn_1_9E0C(object, 3); + var_r31->unk_30 = 0; + var_r31->unk_20 = 1; + var_r31->unk_36 = 0; + } else if (var_r31->unk_20) { + if (var_r31->unk_18) { + if (var_r31->unk_36 >= 18.0f) { + fn_1_9040(object); + } + } else if (var_r31->unk_36 >= 30.0f && fn_1_9EFC(object)) { + var_r31->unk_30 = 0; + var_r31->unk_2C = 0; + var_r31->unk_20 = 0; + var_r29 = 1; + } + } + return var_r29; +} + +void fn_1_9E0C(omObjData *object, u32 arg1) +{ + float var_f31; + + UnkM410Struct5 *var_r31; + + var_r31 = object->data; + if ((var_r31->unk_0C != arg1) && (arg1 < 10)) { + var_f31 = lbl_1_data_1D4[arg1].unk_08; + if (var_r31->unk_0C < 0) { + var_f31 = 0.0f; + } + var_r31->unk_0C = arg1; + CharModelMotionShiftSet(var_r31->unk_00, object->motion[arg1], lbl_1_data_1D4[arg1].unk_00, var_f31, lbl_1_data_1D4[arg1].unk_0C); + CharModelMotionSpeedSet(var_r31->unk_00, 1.0f); + } +} + +s32 fn_1_9EFC(omObjData *object) +{ + UnkM410Struct5 *var_r31; + s32 var_r30; + + var_r31 = object->data; + var_r30 = 0; + if (CharModelMotionEndCheck(var_r31->unk_00) && (CharModelMotionShiftIDGet(var_r31->unk_00) < 0)) { + var_r30 = 1; + } + return var_r30; +} + +s32 fn_1_9F70(omObjData *object, u32 arg1) +{ + UnkM410Struct5 *var_r28; + s32 var_r27; + s32 var_r26; + + var_r27 = 0; + var_r28 = object->data; + var_r26 = 0; + if (CharModelMotionEndCheck(var_r28->unk_00) && (CharModelMotionShiftIDGet(var_r28->unk_00) < 0)) { + var_r26 = 1; + } + if (var_r26) { + fn_1_9E0C(object, arg1); + var_r27 = 1; + } + return var_r27; +} + +void fn_1_A0A4(omObjData *object) +{ + + UnkM410Struct9 *var_r31; + UnkM410Struct14 *var_r30; + s32 var_r28; + + float sp8[4][2] = { { 36.0f, 64.0f }, { 476.0f, 64.0f }, { 36.0f, 416.0f }, { 476.0f, 416.0f } }; + object->stat |= 256; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM410Struct14), MEMORY_DEFAULT_NUM); + var_r30 = object->data; + memset(var_r30, 0, sizeof(UnkM410Struct14)); + var_r30->unk_F80 = GXGetTexBufferSize(640, 480, 5, GX_FALSE, 0); + var_r30->unk_F84 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r30->unk_F80, MEMORY_DEFAULT_NUM); + DCFlushRange(var_r30->unk_F84, var_r30->unk_F80); + fn_1_A9A4(&var_r30->unk_120); + var_r31 = var_r30->unk_00; + + for (var_r28 = 0; var_r28 < 4; var_r28++, var_r31++) { + var_r31->unk_0C = sp8[lbl_1_bss_60[var_r28]][0]; + var_r31->unk_10 = sp8[lbl_1_bss_60[var_r28]][1]; + var_r31->unk_2C[0] = var_r31->unk_2C[1] = 1.0f; + var_r31->unk_3C[0] = var_r31->unk_3C[1] = var_r31->unk_40 = var_r31->unk_42 = -1; + var_r31->unk_3C[0] = espEntry(6357043, 2, 0); + var_r31->unk_3C[1] = espEntry(6357043, 2, 0); + var_r31->unk_40 = espEntry(lbl_1_data_274[GWPlayerCfg[var_r28].character], 2, 0); + var_r31->unk_42 = espEntry(6357014, 3, 0); + espPosSet(var_r31->unk_42, 36.0f + var_r31->unk_0C, var_r31->unk_10); + var_r31->unk_44 = espEntry(6357015, 4, 0); + espPosSet(var_r31->unk_44, 36.0f + var_r31->unk_0C, var_r31->unk_10); + espColorSet(var_r31->unk_44, 0, 0, 0); + espTPLvlSet(var_r31->unk_44, 0.5); + espDispOff(var_r31->unk_3C[0]); + espDispOff(var_r31->unk_3C[1]); + espDispOff(var_r31->unk_40); + espDispOff(var_r31->unk_42); + espDispOff(var_r31->unk_44); + var_r31->unk_00 = 0; + } + fn_1_77E8(fn_1_A828); + object->model[0] = Hu3DHookFuncCreate(fn_1_B140); + Hu3DModelLayerSet(object->model[0], 3); + HuDataDirClose(DATADIR_MGCONST); + object->func = fn_1_A3C0; +} + +void fn_1_A3C0(omObjData *object) +{ + float var_f31; + + UnkM410Struct9 *var_r31; + UnkM410Struct8 *var_r30; + s32 var_r29; + s32 var_r28; + UnkM410Struct14 *var_r27; + u32 var_r26; + s32 var_r25; + + var_r27 = object->data; + var_r31 = var_r27->unk_00; + + for (var_r29 = 0; var_r29 < 4; var_r29++, var_r31++) { + switch (var_r31->unk_14) { + case 0: + if (fn_1_281C() == 2) { + var_r31->unk_14 = 1; + } + break; + case 1: + var_r31->unk_18 = 0; + var_r31->unk_20 = var_r31->unk_08 % 10; + var_r31->unk_1C = (var_r31->unk_08 / 10) % 10; + espDispOn(var_r31->unk_3C[0]); + espDispOn(var_r31->unk_3C[1]); + espDispOn(var_r31->unk_40); + espDispOn(var_r31->unk_42); + espDispOn(var_r31->unk_44); + espBankSet(var_r31->unk_3C[0], var_r31->unk_1C); + espBankSet(var_r31->unk_3C[1], var_r31->unk_20); + espBankSet(var_r31->unk_40, var_r31->unk_24); + if (var_r31->unk_00) { + var_r31->unk_2C[0] = var_r31->unk_2C[1] = 0.5f; + var_r31->unk_14++; + } else { + var_r31->unk_00 = 1; + var_r31->unk_2C[0] = var_r31->unk_2C[1] = 1.0f; + var_r31->unk_14 += 3; + break; + } + case 2: + var_f31 = var_r31->unk_2C[0]; + var_f31 += 0.10000001f; + if (var_f31 >= 1.5f) { + var_r31->unk_14++; + } + var_r31->unk_2C[0] = var_r31->unk_2C[1] = var_f31; + break; + case 3: + var_f31 = var_r31->unk_2C[0]; + var_f31 -= 0.10000001f; + if (var_f31 <= 1.0f) { + var_f31 = 1.0f; + var_r31->unk_14 = var_r31->unk_14 + 1; + } + var_r31->unk_2C[0] = var_r31->unk_2C[1] = var_f31; + break; + } + var_r31->unk_18++; + + for (var_r28 = 0; var_r28 < 2; var_r28++) { + espPosSet(var_r31->unk_3C[var_r28], 34.0f + var_r31->unk_0C + (21.0f * var_r28), 2.0f + var_r31->unk_10); + espScaleSet(var_r31->unk_3C[var_r28], var_r31->unk_2C[var_r28], var_r31->unk_2C[var_r28]); + } + espPosSet(var_r31->unk_40, var_r31->unk_0C, var_r31->unk_10 - 2.0f); + } + var_r30 = var_r27->unk_120.unk_00; + + for (var_r29 = 0; var_r29 < 16; var_r29++, var_r30++) { + if (var_r30->unk_00) { + var_r30->unk_00++; + if (var_r30->unk_00 < 12.0f) { + var_r30->unk_04 += 0.058333337f; + } else { + var_r30->unk_04 += 0.025000002f; + var_r30->unk_0C -= 0.050000004f; + } + if (var_r30->unk_0C < 0.0f) { + var_r30->unk_00 = 0; + } + } + } + if (fn_1_281C() == 3) { + var_r25 = 0; + var_r31 = var_r27->unk_00; + var_r26 = 0; + + for (var_r29 = 0; var_r29 < 4; var_r29++, var_r31++) { + if (var_r31->unk_04 > var_r26) { + var_r26 = var_r31->unk_04; + } + } + if (var_r26) { + var_r31 = var_r27->unk_00; + + for (var_r29 = 0; var_r29 < 4; var_r29++, var_r31++) { + if (var_r31->unk_04 >= var_r26) { + var_r25 |= 1 << var_r29; + } + } + } + fn_1_284C(var_r25); + } +} + +void fn_1_A828(u16 arg0, u16 arg1, u16 arg2) +{ + UnkM410Struct8 *var_r31; + UnkM410Struct9 *var_r30; + s32 var_r29; + UnkM410Struct14 *var_r27; + + var_r27 = lbl_1_bss_74->data; + if (fn_1_281C() == 2 || fn_1_281C() == 3) { + var_r30 = var_r27->unk_00; + var_r30[arg0].unk_04 += arg1; + var_r30[arg0].unk_08 += arg1; + var_r30[arg0].unk_14 = 1; + + var_r31 = var_r27->unk_120.unk_00; + + for (var_r29 = 0; var_r29 < 16; var_r29++, var_r31++) { + if (!var_r31->unk_00) { + break; + } + } + if (var_r29 < 16) { + var_r31->unk_00 = 1; + var_r31->unk_02 = GWPlayerCfg[arg0].character; + var_r31->unk_0C = 1.0f; + var_r31->unk_04 = 0.25f; + var_r31->unk_08 = frandmod(360); + fn_1_77F8(arg2, &var_r31->unk_10); + var_r31->unk_10.y -= 30.000002f; + } + } +} + +void fn_1_A9A4(UnkM410Struct13 *arg0) +{ + float sp88[32][2]; + float sp8[32]; + + float var_f31; + float var_f30; + float var_f29; + float var_f28; + + s32 var_r31; + UnkM410Struct12 *var_r29; + UnkM410Struct11 *var_r28; + + var_f31 = 0.0f; + for (var_r31 = 0; var_r31 < 32; var_r31++) { + var_f28 = 1.0f + (0.001f * frandmod(1000)); + sp8[var_r31] = var_f28; + var_f31 += var_f28; + sp88[var_r31][1] = 80.0f * var_f28; + sp88[var_r31][0] = 10.0f + (0.02f * frandmod(1000)); + } + var_f31 = 360.0f / var_f31; + for (var_r31 = 0; var_r31 < 32; var_r31++) { + sp8[var_r31] *= var_f31; + } + var_f31 = frandmod(90); + var_r28 = arg0->unk_1C0; + var_r29 = arg0->unk_940; + for (var_r31 = 0; var_r31 < 32; var_r28++, var_r29++, var_r31++) { + var_f29 = -cosd(var_f31); + var_f30 = sind(var_f31); + var_r28->unk_24 = var_f29 * sp88[var_r31][0]; + var_r28->unk_28 = var_f30 * sp88[var_r31][0]; + var_r28->unk_0C = var_f29 * (sp88[var_r31][0] + sp88[var_r31][1]); + var_r28->unk_10 = var_f30 * (sp88[var_r31][0] + sp88[var_r31][1]); + var_r28->unk_00 = var_f29 * (sp88[var_r31][0] + (0.85f * sp88[var_r31][1])); + var_r28->unk_04 = var_f30 * (sp88[var_r31][0] + (0.85f * sp88[var_r31][1])); + var_r29->unk_00 = -0.3f * -var_f29; + var_r29->unk_04 = -0.3f * var_f30; + var_f29 = -cosd(var_f31 - (0.4f * sp8[var_r31])); + var_f30 = sind(var_f31 - (0.4f * (&sp8[0])[var_r31])); + var_r28->unk_30 = var_f29 * (sp88[var_r31][0] + (0.7f * sp88[var_r31][1])); + var_r28->unk_34 = var_f30 * (sp88[var_r31][0] + (0.7f * sp88[var_r31][1])); + var_f29 = -cosd(var_f31 + (0.4f * sp8[var_r31])); + var_f30 = sind(var_f31 + (0.4f * sp8[var_r31])); + var_r28->unk_18 = var_f29 * (sp88[var_r31][0] + (0.7f * sp88[var_r31][1])); + var_r28->unk_1C = var_f30 * (sp88[var_r31][0] + (0.7f * sp88[var_r31][1])); + var_r29->unk_08 = var_r29->unk_0C = var_r29->unk_10 = var_r29->unk_14 = 0.0f; + var_r29->unk_18 = var_r29->unk_1C = var_r29->unk_20 = var_r29->unk_24 = 0.0f; + var_f31 += sp8[var_r31]; + } + + for (var_r31 = 0; var_r31 < 5; var_r31++) { + arg0->unk_E40[var_r31].r = arg0->unk_E40[var_r31].g = arg0->unk_E40[var_r31].b = 255; + arg0->unk_E40[var_r31].a = 255; + } + arg0->unk_E54 = 0x6C0; + arg0->unk_E5C = HuMemDirectMallocNum(HEAP_SYSTEM, arg0->unk_E54, MEMORY_DEFAULT_NUM); + DCFlushRange(arg0->unk_E5C, arg0->unk_E54); + GXBeginDisplayList(arg0->unk_E5C, arg0->unk_E54); + + for (var_r31 = 0; var_r31 < 32; var_r31++) { + GXBegin(GX_TRIANGLEFAN, GX_VTXFMT0, 6); + + GXPosition1x16(var_r31 * 5); + GXColor1x16(0); + GXTexCoord1x16(var_r31 * 5); + + GXPosition1x16(var_r31 * 5 + 1); + GXColor1x16(1); + GXTexCoord1x16(var_r31 * 5 + 1); + + GXPosition1x16(var_r31 * 5 + 2); + GXColor1x16(2); + GXTexCoord1x16(var_r31 * 5 + 2); + + GXPosition1x16(var_r31 * 5 + 3); + GXColor1x16(3); + GXTexCoord1x16(var_r31 * 5 + 3); + + GXPosition1x16(var_r31 * 5 + 4); + GXColor1x16(4); + GXTexCoord1x16(var_r31 * 5 + 4); + + GXPosition1x16(var_r31 * 5 + 1); + GXColor1x16(1); + GXTexCoord1x16(var_r31 * 5 + 1); + } + arg0->unk_E58 = GXEndDisplayList(); + DCStoreRange(arg0, sizeof(UnkM410Struct13)); +} + +void fn_1_B140(ModelData *arg0, Mtx arg1) +{ + Mtx sp124; + Mtx spF4; + Mtx spC4; + Mtx sp94; + Mtx sp64; + Mtx sp34; + GXTexObj sp14; + + UnkM410Struct8 *var_r31; + UnkM410Struct14 *var_r30; + s32 var_r29; + + var_r30 = lbl_1_bss_74->data; + { + GXColor sp10 = { 204, 204, 204, 204 }; + GXSetTexCopySrc(0, 0, 640, 480); + GXSetTexCopyDst(640, 480, GX_TF_RGB5A3, GX_FALSE); + GXCopyTex(var_r30->unk_F84, GX_FALSE); + GXPixModeSync(); + DCStoreRange(&sp10, 4); + + DCStoreRange(&lbl_1_data_294, 32); + PSMTXTrans(spF4, -400.0f, 400.0f, -700.0f); + PSMTXConcat(Hu3DCameraMtx, spF4, sp64); + GXLoadPosMtxImm(sp64, 0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + GXInitTexObj(&sp14, var_r30->unk_F84, 640, 480, 5, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXInitTexObjLOD(&sp14, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); + GXLoadTexObj(&sp14, GX_TEXMAP0); + HuSprTexLoad(lbl_1_bss_70, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR); + GXSetNumTexGens(2); + C_MTXLightPerspective(sp94, 41.5f, 1.2f, 0.5555555f, -0.5f, 0.5555555f, 0.5f); + PSMTXConcat(sp94, Hu3DCameraMtx, sp94); + PSMTXInverse(Hu3DCameraMtx, sp34); + PSMTXConcat(sp34, sp64, sp124); + PSMTXConcat(sp94, sp124, spF4); + GXLoadTexMtxImm(spF4, 30, GX_MTX3x4); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, 30, GX_FALSE, 125); + GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEXCOORD0, 33, GX_FALSE, 125); + GXSetNumIndStages(1); + GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD1, GX_TEXMAP1); + GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1); + GXSetTevIndWarp(GX_TEVSTAGE0, GX_INDTEXSTAGE0, GX_TRUE, GX_FALSE, GX_ITM_0); + PSMTXScale(spF4, -0.5f, -0.5f, 0.5f); + GXSetIndTexMtx(GX_ITM_0, (float(*)[3])spF4, -1); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG1, sp10); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_C1, GX_CC_C0); + 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_RASA, GX_CA_A0, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET); + GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GXSetArray(GX_VA_POS, var_r30->unk_120.unk_1C0, 12); + GXSetArray(GX_VA_CLR0, var_r30->unk_120.unk_E40, 4); + GXSetArray(GX_VA_TEX0, var_r30->unk_120.unk_940, 8); + var_r31 = var_r30->unk_120.unk_00; + + for (var_r29 = 0; var_r29 < 16; var_r29++, var_r31++) { + if (var_r31->unk_00) { + lbl_1_data_294[var_r31->unk_02].a = 255.0f * var_r31->unk_0C; + GXSetTevColor(GX_TEVREG0, lbl_1_data_294[var_r31->unk_02]); + PSMTXTrans(spF4, var_r31->unk_10.x, var_r31->unk_10.y, var_r31->unk_10.z); + PSMTXRotRad(sp124, 90, 0.017453292f * var_r31->unk_08); + PSMTXConcat(spF4, sp124, spF4); + PSMTXScale(spC4, var_r31->unk_04, var_r31->unk_04, var_r31->unk_04); + PSMTXConcat(spF4, spC4, spF4); + PSMTXConcat(Hu3DCameraMtx, spF4, sp64); + GXLoadPosMtxImm(sp64, 0); + PSMTXConcat(sp34, sp64, sp124); + PSMTXConcat(sp94, sp124, spF4); + GXLoadTexMtxImm(spF4, 30, GX_MTX3x4); + PSMTXRotRad(sp124, 90, 0.017453292f * -var_r31->unk_08); + GXLoadTexMtxImm(sp124, 33, GX_MTX2x4); + GXCallDisplayList(var_r30->unk_120.unk_E5C, var_r30->unk_120.unk_E58); + } + } + GXSetNumIndStages(0); + GXSetTevDirect(GX_TEVSTAGE0); + } +} diff --git a/src/REL/m410Dll/stage.c b/src/REL/m410Dll/stage.c new file mode 100644 index 00000000..f4b8ac21 --- /dev/null +++ b/src/REL/m410Dll/stage.c @@ -0,0 +1,35 @@ +#include "game/hsfman.h" +#include "game/object.h" + +void fn_1_31FC(omObjData *object); +void fn_1_3350(omObjData *object); + +void fn_1_31A4(Process *process) +{ + omObjData *var_r31; + + var_r31 = omAddObjEx(process, 30, 6, 0, -1, fn_1_31FC); + var_r31->work[0] = 0; +} + +void fn_1_31F8(void) { } + +void fn_1_31FC(omObjData *object) +{ + omSetTra(object, 0.0f, 0.0f, 0.0f); + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M410, 13)); + Hu3DModelShadowMapSet(object->model[0]); + object->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M410, 14)); + object->model[2] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M410, 15)); + object->model[3] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M410, 16)); + Hu3DModelAttrSet(object->model[3], 0x40000001); + object->model[4] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M410, 17)); + Hu3DModelAttrSet(object->model[4], 0x40000001); + object->model[5] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M410, 18)); + object->func = fn_1_3350; +} + +void fn_1_3350(omObjData *object) +{ + Hu3DModelPosSet(object->model[5], Center.x, Center.y, Center.z); +}