diff --git a/config/GMPE01_00/rels/m460Dll/symbols.txt b/config/GMPE01_00/rels/m460Dll/symbols.txt index 0261cad3..bd1cca6f 100644 --- a/config/GMPE01_00/rels/m460Dll/symbols.txt +++ b/config/GMPE01_00/rels/m460Dll/symbols.txt @@ -86,167 +86,167 @@ fn_1_91E4 = .text:0x000091E4; // type:function size:0x8C fn_1_9270 = .text:0x00009270; // type:function size:0x164 _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:0xC data:4byte -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0xC data:4byte -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_60 = .rodata:0x00000060; // type:object size:0x8 data:double -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 data:double -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_80 = .rodata:0x00000080; // type:object size:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 data:double -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:4byte -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x50 -lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x14 data:4byte -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 data:float -lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 data:float -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x10 data:4byte -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -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:0x4 data:float -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -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:0x8 data:double -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 data:double -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x8 data:double -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:0x10 data:4byte -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x30 data:4byte -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 data:float -lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size: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:0x18 data:4byte -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x18 data:4byte -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 data:float -lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 data:float -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:0x4 data:float -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 data:double -lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x8 data:double -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 data:float -lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x8 data:double -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 data:double -lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x4 data:float -lbl_1_rodata_244 = .rodata:0x00000244; // type:object size:0x4 data:float -lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x18 data:4byte -lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x8 data:4byte -lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x4 data:float -lbl_1_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 data:float -lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 data:float -lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 data:float -lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 data:float -lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 data:float -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_290 = .rodata:0x00000290; // type:object size:0x8 data:double -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:0x4 data:float -lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float -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:0x4 data:float -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 data:double -lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x8 data:double -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 data:float -lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x4 data:float -lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x4 data:float -lbl_1_rodata_314 = .rodata:0x00000314; // type:object size:0x4 data:float -lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 data:float -lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 data:float -lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 data:float -lbl_1_rodata_324 = .rodata:0x00000324; // type:object size:0x4 data:float -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 data:float -lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 data:float -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 data:float -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:0x1 data:byte -lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x1 data:byte -lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0xC data:4byte -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_364 = .rodata:0x00000364; // type:object size:0x4 data:float -lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 data:float -lbl_1_rodata_36C = .rodata:0x0000036C; // type:object size:0x4 data:float -lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 data:float -lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 data:float -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:0x4 data:float -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_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 data:float -lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 data:float -lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x8 data:float -lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 data:float -lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 data:float -lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 data:float -lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 data:float -lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 data:float -lbl_1_rodata_3CC = .rodata:0x000003CC; // type:object size:0x4 data:float -lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x8 data:double -lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x4 data:float -lbl_1_rodata_3DC = .rodata:0x000003DC; // type:object size:0x4 data:float -lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x4 data:float -lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0xC scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0xC 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_60 = .rodata:0x00000060; // type:object size:0x8 scope:local data:double +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 scope:local data:double +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_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:double +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 scope:local data:double +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:4byte +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x50 scope:local data:float +lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x14 scope:local data:4byte +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 scope:local data:float +lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 scope:local data:float +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +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:0x4 scope:local data:float +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +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:0x8 scope:local data:double +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 scope:local data:double +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x8 scope:local data:double +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:0x10 scope:local data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x30 scope:local data:float +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size: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:0x18 scope:local data:float +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x18 scope:local data:float +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 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:0x4 scope:local data:float +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 scope:local data:double +lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x8 scope:local data:double +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 scope:local data:float +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x8 scope:local data:double +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 scope:local data:double +lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x4 scope:local data:float +lbl_1_rodata_244 = .rodata:0x00000244; // type:object size:0x4 scope:local data:float +lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x18 scope:local data:float +lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x8 scope:local data:4byte +lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x4 scope:local data:float +lbl_1_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 scope:local data:float +lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 scope:local data:float +lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 scope:local data:float +lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 scope:local data:float +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_290 = .rodata:0x00000290; // type:object size:0x8 scope:local data:double +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:0x4 scope:local data:float +lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size: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:0x4 scope:local data:float +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x8 scope:local data:double +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x4 scope:local data:float +lbl_1_rodata_314 = .rodata:0x00000314; // type:object size:0x4 scope:local data:float +lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 scope:local data:float +lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 scope:local data:float +lbl_1_rodata_324 = .rodata:0x00000324; // type:object size:0x4 scope:local data:float +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 scope:local data:float +lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 scope:local data:float +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:byte +lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:byte +lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0xC scope:local data:4byte +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_364 = .rodata:0x00000364; // type:object size:0x4 scope:local data:float +lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 scope:local data:float +lbl_1_rodata_36C = .rodata:0x0000036C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 scope:local data:float +lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 scope:local data:float +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:float +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_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x8 scope:local data:float +lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3CC = .rodata:0x000003CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3DC = .rodata:0x000003DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0xC lbl_1_data_C = .data:0x0000000C; // type:object size:0xC lbl_1_data_18 = .data:0x00000018; // type:object size:0xC data:float @@ -259,9 +259,9 @@ lbl_1_data_70 = .data:0x00000070; // type:object size:0x24 lbl_1_data_94 = .data:0x00000094; // type:object size:0xC lbl_1_data_A0 = .data:0x000000A0; // type:object size:0xC lbl_1_data_AC = .data:0x000000AC; // type:object size:0xC -lbl_1_data_B8 = .data:0x000000B8; // type:object size:0x1 data:byte -lbl_1_data_BC = .data:0x000000BC; // type:object size:0x1A data:string -lbl_1_data_D6 = .data:0x000000D6; // type:object size:0x19 data:string +lbl_1_data_B8 = .data:0x000000B8; // type:object size:0x4 data:byte +lbl_1_data_BC = .data:0x000000BC; // type:object size:0x1A scope:local data:string +lbl_1_data_D6 = .data:0x000000D6; // type:object size:0x19 scope:local data:string lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x20 lbl_1_data_110 = .data:0x00000110; // type:object size:0xA0 jumptable_1_data_1B0 = .data:0x000001B0; // type:object size:0x24 scope:local @@ -273,10 +273,10 @@ lbl_1_data_334 = .data:0x00000334; // type:object size:0xC lbl_1_data_340 = .data:0x00000340; // type:object size:0xC lbl_1_data_34C = .data:0x0000034C; // type:object size:0x8 lbl_1_data_354 = .data:0x00000354; // type:object size:0x8 -lbl_1_data_35C = .data:0x0000035C; // type:object size:0x7 data:string -lbl_1_data_363 = .data:0x00000363; // type:object size:0x7 data:string +lbl_1_data_35C = .data:0x0000035C; // type:object size:0x7 scope:local data:string +lbl_1_data_363 = .data:0x00000363; // type:object size:0x7 scope:local data:string lbl_1_data_36C = .data:0x0000036C; // type:object size:0xC -lbl_1_data_378 = .data:0x00000378; // type:object size:0x8 data:byte +lbl_1_data_378 = .data:0x00000378; // type:object size:0x4 data:byte lbl_1_data_380 = .data:0x00000380; // type:object size:0xC lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte diff --git a/configure.py b/configure.py index c7a4f2e5..3f14b329 100644 --- a/configure.py +++ b/configure.py @@ -1273,10 +1273,10 @@ config.libs = [ Rel( "m460Dll", # Doors of Doom objects={ - Object(NonMatching, "REL/m460Dll/main.c"), - Object(NonMatching, "REL/m460Dll/player.c"), - Object(NonMatching, "REL/m460Dll/map.c"), - Object(NonMatching, "REL/m460Dll/score.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m460Dll/main.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m460Dll/player.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m460Dll/map.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m460Dll/score.c"), }, ), Rel( diff --git a/include/REL/m460Dll.h b/include/REL/m460Dll.h new file mode 100644 index 00000000..6f97310d --- /dev/null +++ b/include/REL/m460Dll.h @@ -0,0 +1,64 @@ +#ifndef M460DLL_H +#define M460DLL_H + +#include "game/object.h" + +typedef struct UnkM460DllStruct { + float unk_00; + float unk_04; + float unk_08; + float unk_0C; +} UnkM460DllStruct; + +typedef struct M460DllCameraStruct { + s32 unk_00; + s32 unk_04; + s32 unk_08; + u32 unk_0C; + float unk_10; + float unk_14; + float unk_18; + Vec unk_1C; + Vec unk_28; + float unk_34; + s32 unk_38; + s32 unk_3C; + float unk_40; + UnkM460DllStruct unk_44; + char unk54[0x30]; + float unk_84; + char unk88[0x4]; + float unk_8C; + float unk_90; + s32 unk_94; + char unk98[0xC]; +} M460DllCameraStruct; /* size = 0xA4 */ // same as M443DllCameraStruct // TODO does this have to be here? + +void fn_1_3E68(u32 arg0); +M460DllCameraStruct *fn_1_3E90(s32 arg0); +M460DllCameraStruct *fn_1_3F2C(s32 arg0); +u32 fn_1_414C(void); +u32 fn_1_4164(void); +s32 fn_1_419C(void); +void fn_1_41B4(s32 arg0, s32 arg1, s32 arg2); +void fn_1_41F4(s32 arg0); +void fn_1_4224(s32 arg0); +void fn_1_42BC(u32 arg0); +s32 fn_1_42F0(void); +void fn_1_4308(void); +s32 fn_1_4324(void); +void fn_1_433C(void); +s32 fn_1_4358(void); +u32 fn_1_4370(void); +float fn_1_47D0(float arg8, float arg9, float argA); + +void fn_1_49A0(Process *process); +void fn_1_4BE4(void); +void fn_1_67B4(Process *process); +void fn_1_6814(void); +void fn_1_8BA0(float arg8); +void fn_1_8CAC(Process *process, s16 arg1); +void fn_1_8F38(void); +void fn_1_8FAC(s32 arg0); + +#endif diff --git a/src/REL/m453Dll/main.c b/src/REL/m453Dll/main.c index 2c8f9116..f72224c2 100644 --- a/src/REL/m453Dll/main.c +++ b/src/REL/m453Dll/main.c @@ -87,7 +87,7 @@ typedef struct M453DllWork2 { M453DllUnkStruct unk_5C; u8 unk_9C; s32 unk_A0; -} M453DllWork2; /* size 0xA4 */ +} M453DllWork2; /* size 0xA4 */ // same as Unkm403Struct_01 void fn_1_440(omObjData *object); void fn_1_460(omObjData *object); diff --git a/src/REL/m460Dll/main.c b/src/REL/m460Dll/main.c new file mode 100644 index 00000000..73c153ea --- /dev/null +++ b/src/REL/m460Dll/main.c @@ -0,0 +1,1015 @@ +#include "dolphin/gx/GXEnum.h" +#include "dolphin/gx/GXVert.h" +#include "ext_math.h" +#include "game/audio.h" +#include "game/gamework.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/memory.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/wipe.h" +#include "string.h" + +#include "REL/m460Dll.h" + +#ifndef __MWERKS__ +#include "game/frand.h" +#endif + +typedef struct M460DllWork { + u32 unk_00; + s32 unk_04; + s32 unk_08; + u32 unk_0C; + s32 unk_10; + u32 unk_14; + u32 unk_18; + u32 unk_1C; + u32 unk_20; + u32 unk_24; + s32 unk_28; + u32 unk_2C; + s32 unk_30; + char unk34[0x4]; + u32 unk_38; + s32 unk_3C; + s32 unk_40; + s32 unk_44; + s32 unk_48; + s32 unk_4C; + u32 unk_50; + s32 unk_54[4]; + s32 unk_64[4]; + s32 unk_74; + s32 unk_78; + s32 unk_7C; + s32 unk_80; + char unk84[4]; + s32 unk_88; + u32 unk_8C; + u32 unk_90; + s32 unk_94; +} M460DllWork; /* size = 0x98 */ + +void fn_1_11EC(omObjData *object); +void fn_1_1548(omObjData *object); +void fn_1_197C(omObjData *object); +void fn_1_201C(omObjData *object); +omObjFunc fn_1_24F4(Process *arg1, omObjData *object); +void fn_1_2564(omObjData *object); +omObjFunc fn_1_2D64(Process *process, omObjData *object); +void fn_1_2D70(omObjData *object); +void fn_1_32CC(Process *process); +void fn_1_337C(omObjData *object); +void fn_1_35F0(omObjData *object); +void fn_1_3618(omObjData *object); +void fn_1_3BC0(ModelData *model, Mtx mtx); +M460DllCameraStruct *fn_1_3E90(s32 arg0); +M460DllCameraStruct *fn_1_3F2C(s32 arg0); +void fn_1_42BC(u32 arg0); +s32 fn_1_4358(void); +void fn_1_4C8(omObjData *object); +void fn_1_7FC(omObjData *object); +void fn_1_948(omObjData *object); +void fn_1_D7C(omObjData *object); + +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 = { 0xFF, 0xFF, 0xFF, 0xFF }; +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[3] = { + { 0.0f, 442.0f, -927.00006f }, + { 0.0f, 442.0f, -927.00006f }, + { 0.0f, 325.0f, -600.0f }, +}; +Vec lbl_1_data_70[3] = { + { 4.5f, 0.0f, 450.0f }, + { 4.5f, 0.0f, 450.0f }, + { 9.75f, 0.0f, 1275.0f }, +}; +float lbl_1_data_94[3] = { 70.0f, 70.0f, 41.5f }; +float lbl_1_data_A0[3] = { 0.0f, 0.016666668f, 0.0f }; +s32 lbl_1_data_AC[3] = { -0x3C, 0x3C, 0 }; +GXColor lbl_1_data_B8 = { 0, 0, 0, 0 }; + +Process *lbl_1_bss_30; +// M460DllWork2 +omObjData *lbl_1_bss_2C; +omObjData *lbl_1_bss_28; +// M460DllWork2 +omObjData *lbl_1_bss_24; +s16 lbl_1_bss_20; +s16 lbl_1_bss_1A[3]; +s16 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; + +void ObjectSetup(void) +{ + Mtx sp2C; + Process *var_r31; + LightData *var_r30; + + Vec sp20 = { 0.0f, 0.0f, 0.0f }; + Vec sp14 = { 0.0f, 0.0f, -1.0f }; + Vec sp8; + + lbl_1_bss_C = 0; + HuAudSndGrpSet(0x53); + HuAudFXListnerSetEX(&sp20, &sp14, 10000.0f, 566.6667f, 0.0f, 300.0f, 300.0f); + lbl_1_bss_8 = lbl_1_bss_4 = -1; + lbl_1_bss_20 = -1; + lbl_1_bss_0 = 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(30.0f, 20.0f, 25000.0f); + Hu3DShadowTPLvlSet(0.625f); + Hu3DShadowPosSet(&lbl_1_data_28, &lbl_1_data_34, &lbl_1_data_40); + lbl_1_bss_1A[0] = Hu3DGLightCreateV(&lbl_1_data_0, &lbl_1_data_C, &lbl_1_data_24); + Hu3DGLightInfinitytSet(lbl_1_bss_1A[0]); + var_r30 = &Hu3DGlobalLight[lbl_1_bss_1A[0]]; + var_r30->unk_00 |= 0x8000; + lbl_1_data_18.x = 160.0f; + lbl_1_data_18.y = 0.0f; + lbl_1_data_18.z = 4200.0f; + sp8.x = sp8.z = 0.0f; + sp8.y = lbl_1_data_18.z; + mtxRot(sp2C, lbl_1_data_18.x, lbl_1_data_18.y, 0.0f); + PSMTXMultVec(sp2C, &sp8, &lbl_1_data_28); + Hu3DGLightPosAimSetV(lbl_1_bss_1A[0], &lbl_1_data_28, &lbl_1_data_40); + Hu3DShadowPosSet(&lbl_1_data_28, &lbl_1_data_34, &lbl_1_data_40); + lbl_1_bss_18 = lbl_1_bss_16 = lbl_1_bss_14 = lbl_1_bss_12 = lbl_1_bss_10 = -1; + var_r31 = omInitObjMan(0x32, 0x2000); + lbl_1_bss_30 = var_r31; + omGameSysInit(var_r31); + fn_1_32CC(var_r31); + lbl_1_bss_2C = omAddObjEx(var_r31, 0xA, 0, 0, -1, fn_1_4C8); + fn_1_67B4(var_r31); + fn_1_49A0(var_r31); +} + +void fn_1_4C8(omObjData *var_r30) +{ + M460DllWork *var_r31; + + var_r30->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M460DllWork), MEMORY_DEFAULT_NUM); + var_r31 = var_r30->data; + memset(var_r31, 0, sizeof(M460DllWork)); + 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_4C = 0; + var_r31->unk_50 = 0; + var_r31->unk_08 = 0; + var_r31->unk_88 = 0; + var_r31->unk_74 = var_r31->unk_78 = var_r31->unk_7C = var_r31->unk_80 = -1; + var_r31->unk_8C = 0; + var_r31->unk_94 = 0; + var_r31->unk_30 = 0; + var_r31->unk_30 = GWMGRecordGet(0xC); + var_r31->unk_28 = (var_r31->unk_30 >> 0x10) & 0xFF; + var_r31->unk_24 = (var_r31->unk_30 >> 0x18) & 0xFF; + var_r31->unk_30 = (u16)var_r31->unk_30; + fn_1_8CAC(lbl_1_bss_30, var_r31->unk_30); + var_r30->func = fn_1_948; +} + +void fn_1_5F0(omObjData *var_r29) +{ + Vec sp14; + Vec sp8; + M460DllCameraStruct *var_r31; + M460DllWork *var_r30; + + var_r30 = var_r29->data; + var_r30->unk_04++; + var_r30->unk_10++; + var_r30->unk_18++; + var_r30->unk_50++; + if ((omSysExitReq != 0) && (var_r30->unk_00 != 5)) { + var_r30->unk_00 = 4; + fn_1_7FC(var_r29); + } + var_r31 = fn_1_3F2C(1); + sp8.x = -(sind(var_r31->unk_28.y) * cosd(var_r31->unk_28.x)); + sp8.y = -(-sind(var_r31->unk_28.x)); + sp8.z = -(cosd(var_r31->unk_28.y) * cosd(var_r31->unk_28.x)); + sp14.x = var_r31->unk_1C.x - (sp8.x * var_r31->unk_34); + sp14.y = var_r31->unk_1C.y - (sp8.y * var_r31->unk_34); + sp14.z = var_r31->unk_1C.z - (sp8.z * var_r31->unk_34); + HuAudFXListnerUpdate(&sp14, &sp8); +} + +void fn_1_7FC(omObjData *object) +{ + M460DllWork *work = object->data; + + if (work->unk_08 == 0) { + switch (work->unk_00) { + case 0: + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 0x3C); + lbl_1_bss_0 = 1; + fn_1_8FAC(0); + work->unk_00 = 1; + work->unk_10 = 0; + object->func = fn_1_24F4(lbl_1_bss_30, object); + break; + case 1: + work->unk_00 = 2; + work->unk_18 = 0; + object->func = fn_1_1548; + break; + case 2: + work->unk_00 = 3; + work->unk_50 = 0; + object->func = fn_1_2D64(lbl_1_bss_30, object); + break; + case 3: + case 4: + work->unk_08 = 1; + work->unk_00 = 5; + object->func = fn_1_D7C; + break; + case 5: + default: + work->unk_00 = 5; + object->func = fn_1_11EC; + } + work->unk_04 = 0; + } +} + +void fn_1_948(omObjData *object) +{ + fn_1_5F0(object); + fn_1_7FC(object); +} + +void fn_1_D7C(omObjData *object) +{ + M460DllWork *work = object->data; + fn_1_5F0(object); + if (WipeStatGet() == 0) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 0x3C); + WipeColorSet(0xFF, 0xFF, 0xFF); + work->unk_08 = 0; + fn_1_7FC(object); + } +} + +void fn_1_11EC(omObjData *object) +{ + fn_1_5F0(object); + if (WipeStatGet() == 0) { + fn_1_4BE4(); + fn_1_6814(); + fn_1_8F38(); + MGSeqKillAll(); + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + } +} + +void fn_1_1548(omObjData *object) +{ + M460DllWork *var_r28 = object->data; + fn_1_5F0(object); + switch (var_r28->unk_14) { + case 0: + var_r28->unk_1C = 0x3C; + var_r28->unk_20 = 0x3C; + lbl_1_bss_18 = MGSeqCreate(3, 0); + MGSeqPosSet(lbl_1_bss_18, 320.0f, 240.0f); + var_r28->unk_14 = 1; + var_r28->unk_18 = 0; + break; + case 1: + if ((lbl_1_bss_8 < 0) && ((MGSeqStatGet(lbl_1_bss_18) & 0x10) != 0)) { + lbl_1_bss_8 = HuAudSeqPlay(0x49); + } + if (MGSeqStatGet(lbl_1_bss_18) == 0) { + var_r28->unk_2C = 0; + var_r28->unk_44 = 0; + if (var_r28->unk_08 == 0) { + var_r28->unk_18 = 0; + object->func = fn_1_197C; + } + } + break; + } +} + +void fn_1_197C(omObjData *object) +{ + M460DllWork *var_r31 = object->data; + s32 var_r26 = 0; + s32 sp8 = 0; + fn_1_5F0(object); + switch (var_r31->unk_14) { + case 1: + if (WipeStatGet() == 0) { + var_r31->unk_38 = 3; + var_r31->unk_3C = 0; + var_r31->unk_40 = 0; + var_r31->unk_1C = 0x3C; + var_r31->unk_20 = 0x3C; + var_r31->unk_14 = 2; + var_r31->unk_18 = 0; + } + break; + case 2: + if (var_r31->unk_38 == 3) { + if ((--var_r31->unk_20) == 0) { + var_r31->unk_20 = 0x3C; + var_r31->unk_1C--; + if (var_r31->unk_1C == 0) { + var_r31->unk_44 = 1; + fn_1_42BC(frandmod(2)); + } + } + if ((lbl_1_bss_16 < 0) && (var_r31->unk_1C < 0xA)) { + lbl_1_bss_16 = MGSeqCreate(1, var_r31->unk_1C, -1, -1); + } + MGSeqParamSet(lbl_1_bss_16, 1, var_r31->unk_1C); + } + else { + if (lbl_1_bss_16 >= 0) { + MGSeqParamSet(lbl_1_bss_16, 2, -1); + lbl_1_bss_16 = -1; + } + if (frandmod(0x3E8) < 0x1F4) { + var_r31->unk_44 = 1; + } + if (var_r31->unk_2C >= 0x1E) { + var_r31->unk_44 = 1; + } + if (var_r31->unk_44 != 0) { + var_r31->unk_44 = 1; + var_r31->unk_88 = 1; + } + var_r31->unk_14 = 3; + var_r31->unk_18 = 0; + } + break; + case 3: + if (fn_1_4358() != 0) { + if (var_r31->unk_44 != 0) { + var_r26 = 1; + } + else if (var_r31->unk_18 > 60.0f) { + if (var_r31->unk_08 == 0) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 0x1E); + WipeColorSet(0, 0, 0); + } + var_r31->unk_14 = 4; + var_r31->unk_18 = 0; + } + } + else { + var_r31->unk_18 = 0; + } + break; + case 4: + if (WipeStatGet() == 0) { + var_r31->unk_2C++; + if (var_r31->unk_08 == 0) { + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 0x1E); + } + var_r31->unk_14 = 1; + var_r31->unk_18 = 0; + } + break; + } + if (var_r26 != 0) { + lbl_1_bss_14 = MGSeqCreate(3, 1); + HuAudSeqFadeOut(lbl_1_bss_8, 0x64); + var_r31->unk_24++; + if (var_r31->unk_24 > 0xFF) { + var_r31->unk_24 = 0xFF; + } + if (var_r31->unk_2C > var_r31->unk_30) { + var_r31->unk_28 = var_r31->unk_24; + var_r31->unk_30 = var_r31->unk_2C; + var_r31->unk_48 = 1; + GWMGRecordSet(0xC, var_r31->unk_30); + } + mgRecordExtra = var_r31->unk_2C; + var_r31->unk_14 = 5; + var_r31->unk_18 = 0; + if (var_r31->unk_08 == 0) { + object->func = fn_1_201C; + } + } +} + +void fn_1_201C(omObjData *object) +{ + M460DllWork *var_r26 = object->data; + + if (lbl_1_bss_16 >= 0) { + MGSeqParamSet(lbl_1_bss_16, 2, -1); + lbl_1_bss_16 = -1; + } + fn_1_5F0(object); + if (MGSeqStatGet(lbl_1_bss_14) == 0) { + if (var_r26->unk_48 != 0) { + fn_1_8FAC(1); + lbl_1_bss_12 = MGSeqCreate(0xE, var_r26->unk_30); + var_r26->unk_48 = 0; + } + var_r26->unk_14 = 6; + var_r26->unk_18 = 0; + fn_1_7FC(object); + } +} + +omObjFunc fn_1_24F4(Process *process, omObjData *object) +{ + M460DllCameraStruct *var_r31; + + object->work[0] = object->work[1] = 0; + fn_1_3E68(1); + var_r31 = fn_1_3E90(1); + var_r31->unk_84 = 1.0f; + var_r31->unk_94 = 0; + return fn_1_2564; +} + +void fn_1_2564(omObjData *object) +{ + Vec sp20; + M460DllCameraStruct *var_r26; + M460DllWork *var_r25; + s32 var_r24; + float var_f31; + + var_r25 = object->data; + fn_1_5F0(object); + object->work[0]++; + var_f31 = lbl_1_data_AC[object->work[1]]; + var_r24 = 1; + if (var_f31 < 0.0f) { + var_r24 = 0; + var_f31 *= -1.0f; + } + var_f31 = object->work[0] / var_f31; + PSVECSubtract(&lbl_1_data_4C[object->work[1] + var_r24], &lbl_1_data_4C[object->work[1]], &sp20); + PSVECScale(&sp20, &sp20, var_f31); + PSVECAdd(&lbl_1_data_4C[object->work[1]], &sp20, &sp20); + Center.x = sp20.x; + Center.y = sp20.y; + Center.z = sp20.z; + PSVECSubtract(&lbl_1_data_70[object->work[1] + var_r24], &lbl_1_data_70[object->work[1]], &sp20); + PSVECScale(&sp20, &sp20, var_f31); + PSVECAdd(&lbl_1_data_70[object->work[1]], &sp20, &sp20); + CRot.x = sp20.x; + CRot.y = sp20.y; + CRot.z = 0.0f; + CZoom = sp20.z; + var_r26 = fn_1_3E90(1); + var_r26->unk_1C = Center; + var_r26->unk_28 = CRot; + var_r26->unk_34 = CZoom; + var_r26->unk_10 = lbl_1_data_94[object->work[1]] + (var_f31 * (lbl_1_data_94[object->work[1] + var_r24] - lbl_1_data_94[object->work[1]])); + if (var_f31 >= 1.0f) { + object->work[0] = 0; + object->work[1]++; + if (lbl_1_data_A0[object->work[1]] > 0.0f) { + fn_1_8BA0(lbl_1_data_A0[object->work[1]]); + } + if (lbl_1_data_AC[object->work[1]] == 0) { + var_r25->unk_0C = 2; + fn_1_7FC(object); + } + else if (lbl_1_data_AC[object->work[1] + 1] == 0) { + var_r25->unk_0C = 1; + } + } +} + +omObjFunc fn_1_2D64(Process *process, omObjData *object) +{ + return fn_1_2D70; +} + +void fn_1_2D70(omObjData *object) +{ + M460DllWork *var_r26 = object->data; + s32 var_r23 = 1; + fn_1_5F0(object); + if (lbl_1_bss_12 >= 0) { + if (MGSeqStatGet(lbl_1_bss_12) != 0) { + var_r23 = 0; + } + else { + lbl_1_bss_12 = -1; + } + } + if (var_r26->unk_8C != 1) { + var_r23 = 0; + } + if (var_r23 != 0) { + var_r26->unk_4C = 1; + if (lbl_1_bss_4 < 0) { + lbl_1_bss_4 = HuAudSStreamPlay(4); + } + if (var_r26->unk_50 >= 210.0f) { + var_r26->unk_4C = 2; + fn_1_7FC(object); + } + } + else { + var_r26->unk_50 = 0; + } +} + +void fn_1_32CC(Process *process) +{ + Hu3DCameraCreate(0x1F); + lbl_1_bss_28 = omAddObjEx(process, 0x7FDA, 0, 0, -1, omOutViewMulti); + lbl_1_bss_28->work[0] = 5; + lbl_1_bss_24 = omAddObjEx(process, 0xC, 1, 0, -1, fn_1_337C); + lbl_1_bss_24->work[0] = 0; +} + +void fn_1_337C(omObjData *object) +{ + UnkM460DllStruct sp1C[5] = { + { 320.0f, 240.0f, 640.0f, 480.0f }, + { 160.0f, 120.0f, 320.0f, 240.0f }, + { 160.0f, 360.0f, 320.0f, 240.0f }, + { 480.0f, 120.0f, 320.0f, 240.0f }, + { 480.0f, 360.0f, 320.0f, 240.0f }, + }; + s32 sp8[5] = { 1, 2, 4, 8, 16 }; + M460DllCameraStruct *var_r31; + s32 var_r29; + M460DllCameraStruct *var_r28; + + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 10 * sizeof(M460DllCameraStruct), MEMORY_DEFAULT_NUM); + var_r28 = object->data; + memset(var_r28, 0, 0x668); + object->model[0] = Hu3DHookFuncCreate(fn_1_3BC0); + Hu3DModelLayerSet(object->model[0], 0); + Hu3DModelCameraSet(object->model[0], 0x1E); + for (var_r31 = var_r28, var_r29 = 0; var_r29 < 5; var_r29++, var_r31++) { + var_r31->unk_00 = 0; + var_r31->unk_04 = var_r29 * 0x64; + var_r31->unk_10 = 41.5f; + var_r31->unk_14 = 100.0f; + var_r31->unk_18 = 5500.0f; + var_r31->unk_1C.x = 0.0f; + var_r31->unk_1C.y = 0.0f; + var_r31->unk_1C.z = 0.0f; + var_r31->unk_28.x = -15.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_34 = 1000.0f; + var_r31->unk_40 = 1.0f; + var_r31->unk_44.unk_00 = sp1C[var_r29].unk_00; + var_r31->unk_44.unk_04 = sp1C[var_r29].unk_04; + var_r31->unk_44.unk_08 = sp1C[var_r29].unk_08; + var_r31->unk_44.unk_0C = sp1C[var_r29].unk_0C; + var_r31->unk_3C = var_r31->unk_0C = sp8[var_r29]; + var_r31->unk_08 = var_r29; + var_r31->unk_38 = var_r29; + } + var_r31 = var_r28; + var_r31->unk_00 = 1; + object->work[1] = object->work[2] = 0; + object->work[0]++; + fn_1_3618(object); + object->func = fn_1_35F0; +} + +void fn_1_35F0(omObjData *object) +{ + fn_1_3618(object); +} + +void fn_1_3618(omObjData *var_r28) +{ + float var_f31; + M460DllCameraStruct *var_r31; + s32 var_r30; + s32 var_r29; + M460DllCameraStruct *var_r27; + u32 var_r26; + u32 var_r25; + s32 var_r24; + u32 var_r23; + u32 var_r22; + u32 var_r21; + + var_r27 = var_r28->data; + { + s32 sp40[4] = { 2, 4, 8, 16 }; + u32 sp30[4]; + s32 sp20[4]; + float sp10[4]; + float sp8[2]; + var_r24 = 0; + var_r26 = 0; + memcpy(&var_r27[5], var_r27, 5 * sizeof(M460DllCameraStruct)); + var_r28->work[1] = var_r28->work[2]; + switch (var_r28->work[1]) { + case 0: + break; + case 1: + var_r26 |= 1; + break; + case 2: + var_r26 |= 1; + case 3: + var_r24 = 1; + case 4: + var_r26 |= 0x1E; + break; + } + if (var_r24 != 0) { + Hu3DModelAttrReset(var_r28->model[0], HU3D_ATTR_DISPOFF); + } + else { + Hu3DModelAttrSet(var_r28->model[0], HU3D_ATTR_DISPOFF); + } + for (var_r30 = 0; var_r30 < 4; var_r30++) { + sp30[var_r30] = var_r27[var_r30 + 6].unk_04; + sp20[var_r30] = var_r30; + } + for (var_r30 = 0; var_r30 < 3; var_r30++) { + for (var_r29 = var_r30 + 1; var_r29 < 4; var_r29++) { + if ((var_r30 != var_r29) && (sp30[var_r30] > sp30[var_r29])) { + var_r25 = sp30[var_r30]; + sp30[var_r30] = sp30[var_r29]; + sp30[var_r29] = var_r25; + var_r25 = sp20[var_r30]; + sp20[var_r30] = sp20[var_r29]; + sp20[var_r29] = var_r25; + } + } + } + for (var_r30 = 0; var_r30 < 4; var_r30++) { + var_r27[sp20[var_r30] + 6].unk_3C = sp40[var_r30]; + var_r27[sp20[var_r30] + 6].unk_38 = var_r30 + 1; + } + + for (var_r31 = &var_r27[5], var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) { + if ((var_r31->unk_00 == 0) || ((var_r26 & var_r31->unk_0C) == 0)) { + Hu3DCamera[var_r31->unk_38].fov = -1.0f; + } + else { + var_f31 = 1.2f * ((var_r31->unk_44.unk_08 / 640.0f) / (var_r31->unk_44.unk_0C / 480.0f)); + sp10[2] = var_r31->unk_44.unk_08 * var_r31->unk_40; + sp10[3] = var_r31->unk_44.unk_0C * var_r31->unk_40; + Hu3DCameraPerspectiveSet(var_r31->unk_3C, var_r31->unk_10, var_r31->unk_14, var_r31->unk_18, var_f31); + Hu3DCameraViewportSet( + var_r31->unk_3C, var_r31->unk_44.unk_00 - (0.5f * sp10[2]), var_r31->unk_44.unk_04 - (0.5f * sp10[3]), sp10[2], sp10[3], 0.0f, 1.0f); + sp10[0] = var_r31->unk_44.unk_00 - (0.5f * sp10[2]); + sp10[1] = var_r31->unk_44.unk_04 - (0.5f * sp10[3]); + sp8[0] = var_r31->unk_44.unk_00 + (0.5f * sp10[2]); + sp8[1] = var_r31->unk_44.unk_04 + (0.5f * sp10[3]); + if (sp10[0] < 0.0f) { + sp10[0] = 0.0f; + } + if (sp10[1] < 0.0f) { + sp10[1] = 0.0f; + } + if (sp8[0] > 640.0f) { + sp8[0] = 640.0f; + } + if (sp8[1] > 480.0f) { + sp8[1] = 480.0f; + } + sp8[0] -= sp10[0]; + sp8[1] -= sp10[1]; + var_r21 = sp8[1]; + var_r22 = sp8[0]; + var_r23 = sp10[1]; + Hu3DCameraScissorSet(var_r31->unk_3C, sp10[0], var_r23, var_r22, var_r21); + var_r29 = var_r31->unk_38; + CenterM[var_r29].x = var_r31->unk_1C.x; + CenterM[var_r29].y = var_r31->unk_1C.y; + CenterM[var_r29].z = var_r31->unk_1C.z; + CRotM[var_r29].x = var_r31->unk_28.x; + CRotM[var_r29].y = var_r31->unk_28.y; + CRotM[var_r29].z = var_r31->unk_28.z; + CZoomM[var_r29] = var_r31->unk_34; + } + } + } +} + +void fn_1_3BC0(ModelData *model, Mtx mtx) +{ + Mtx sp3C; + Mtx spC; + float var_f31; + float var_f30; + float var_f29; + + DCStoreRange(&lbl_1_data_B8, 4); + C_MTXPerspective(spC, 41.5f, 1.2f, 100.0f, 5500.0f); + GXSetProjection(spC, GX_PERSPECTIVE); + PSMTXIdentity(sp3C); + GXLoadPosMtxImm(sp3C, 0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, lbl_1_data_B8); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, 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_ZERO, GX_CA_ZERO, GX_CA_KONST); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET); + GXSetZMode(GX_TRUE, GX_ALWAYS, GX_TRUE); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + var_f31 = 4125.0f; + var_f30 = 2750.0f; + var_f29 = 2530.0f; + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(-var_f31, var_f30, -var_f29); + GXPosition3f32(var_f31, var_f30, -var_f29); + GXPosition3f32(var_f31, -var_f30, -var_f29); + GXPosition3f32(-var_f31, -var_f30, -var_f29); +} + +void fn_1_3E68(u32 arg0) +{ + lbl_1_bss_24->work[2] = arg0; +} + +u32 fn_1_3E7C(void) +{ + return lbl_1_bss_24->work[1]; +} + +M460DllCameraStruct *fn_1_3E90(s32 arg0) +{ + M460DllCameraStruct *var_r31; + s32 var_r30; + M460DllCameraStruct *var_r29; + + var_r29 = lbl_1_bss_24->data; + for (var_r31 = var_r29, var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) { + if ((var_r31->unk_0C & arg0) != 0) { + break; + } + } + if (var_r30 >= 5) { + OSReport("M460:Camera Flag Error!!\n"); + return NULL; + } + return var_r31; +} + +M460DllCameraStruct *fn_1_3F2C(s32 arg0) +{ + M460DllCameraStruct *var_r31; + s32 var_r30; + M460DllCameraStruct *var_r29; + + var_r29 = lbl_1_bss_24->data; + for (var_r31 = &var_r29[5], var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) { + if ((var_r31->unk_0C & arg0) != 0) { + break; + } + } + if (var_r30 >= 5) { + OSReport("M460:Camera Flag Error!!\n"); + return NULL; + } + return var_r31; +} + +M460DllCameraStruct *fn_1_3FC8(u32 arg0) +{ + M460DllCameraStruct *var_r31 = lbl_1_bss_24->data; + if (arg0 >= 5) { + OSReport("M460:Camera No. Error!!\n"); + return NULL; + } + return &var_r31[arg0]; +} + +M460DllCameraStruct *fn_1_4030(u32 arg0) +{ + M460DllCameraStruct *var_r31 = lbl_1_bss_24->data; + if (arg0 >= 5) { + OSReport("M460:Camera No. Error!!\n"); + return NULL; + } + return &var_r31[arg0 + 5]; +} + +void fn_1_409C(s32 arg0, s32 arg1) +{ + M460DllCameraStruct *var_r31; + s32 var_r30; + s32 var_r29; + M460DllCameraStruct *var_r28; + M460DllCameraStruct *var_r27; + + var_r29 = 0; + if (arg0 >= 0) { + var_r27 = lbl_1_bss_24->data; + var_r28 = &var_r27[5]; + for (var_r31 = var_r28, var_r30 = 0; var_r30 < 5; var_r30++, var_r31++) { + if ((var_r31->unk_0C & arg1) != 0) { + var_r29 |= var_r31->unk_3C; + } + } + Hu3DModelCameraSet(arg0, var_r29); + } +} + +s32 fn_1_4134(void) +{ + return ((M460DllWork *)lbl_1_bss_2C->data)->unk_00; +} + +u32 fn_1_414C(void) +{ + return ((M460DllWork *)lbl_1_bss_2C->data)->unk_0C; +} + +u32 fn_1_4164(void) +{ + return ((M460DllWork *)lbl_1_bss_2C->data)->unk_14; +} + +s32 fn_1_417C(void) +{ + return ((M460DllWork *)lbl_1_bss_2C->data)->unk_4C; +} + +s32 fn_1_4194(void) +{ + return 1; +} + +s32 fn_1_419C(void) +{ + return ((M460DllWork *)lbl_1_bss_2C->data)->unk_88; +} + +void fn_1_41B4(s32 arg0, s32 arg1, s32 arg2) +{ + M460DllWork *var_r31 = lbl_1_bss_2C->data; + var_r31->unk_64[arg0 &= 3] = arg1; + var_r31->unk_54[arg0] = arg2; +} + +void fn_1_41F4(s32 arg0) +{ + ((M460DllWork *)lbl_1_bss_2C->data)->unk_8C |= (1 << ((arg0 & 7) * 4)); +} + +void fn_1_4224(s32 arg0) +{ + ((M460DllWork *)lbl_1_bss_2C->data)->unk_90 |= (1 << ((arg0 & 3) * 4)); +} + +void fn_1_4254(s32 arg0) +{ + ((M460DllWork *)lbl_1_bss_2C->data)->unk_94 |= (1 << ((arg0 & 3) * 4)); +} + +s32 fn_1_4284(void) +{ + return MGSeqStatGet(lbl_1_bss_14) == 0; +} + +void fn_1_42BC(u32 arg0) +{ + M460DllWork *var_r31 = lbl_1_bss_2C->data; + if (var_r31->unk_38 == 3) { + var_r31->unk_38 = arg0; + } +} + +s32 fn_1_42F0(void) +{ + return ((M460DllWork *)lbl_1_bss_2C->data)->unk_38; +} + +void fn_1_4308(void) +{ + ((M460DllWork *)lbl_1_bss_2C->data)->unk_3C = 1; +} + +s32 fn_1_4324(void) +{ + return ((M460DllWork *)lbl_1_bss_2C->data)->unk_3C; +} + +void fn_1_433C(void) +{ + ((M460DllWork *)lbl_1_bss_2C->data)->unk_40 = 1; +} + +s32 fn_1_4358(void) +{ + return ((M460DllWork *)lbl_1_bss_2C->data)->unk_40; +} + +u32 fn_1_4370(void) +{ + return ((M460DllWork *)lbl_1_bss_2C->data)->unk_2C; +} + +void fn_1_4388(Vec *sp8, Vec *var_r31) +{ + Vec sp10; + float var_f30; + float var_f29; + + PSVECSubtract(var_r31, sp8, &sp10); + Center = *var_r31; + CRot.x = atan2d(sp10.y, sqrtf((sp10.x * sp10.x) + (sp10.z * sp10.z))); + CRot.y = atan2d(-sp10.x, -sp10.z); + CRot.z = 0.0f; + CZoom = PSVECMag(&sp10); +} + +void fn_1_4590(float arg8, float arg9, float argA, float argB, float argC, float argD) +{ + Vec sp3C; + Vec sp30; + Vec sp24; + + sp3C.x = arg8; + sp3C.y = arg9; + sp3C.z = argA; + sp30.x = argB; + sp30.y = argC; + sp30.z = argD; + PSVECSubtract(&sp30, &sp3C, &sp24); + Center = sp30; + CRot.x = atan2d(sp24.y, sqrtf((sp24.x * sp24.x) + (sp24.z * sp24.z))); + CRot.y = atan2d(-sp24.x, -sp24.z); + CRot.z = 0.0f; + CZoom = PSVECMag(&sp24); +} + +float fn_1_47D0(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_48EC(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/m460Dll/map.c b/src/REL/m460Dll/map.c new file mode 100644 index 00000000..c2fea221 --- /dev/null +++ b/src/REL/m460Dll/map.c @@ -0,0 +1,547 @@ +#include "datadir_enum.h" +#include "dolphin/gx/GXEnum.h" +#include "dolphin/gx/GXVert.h" +#include "ext_math.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/gamework_data.h" +#include "game/hsfanim.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 "string.h" + +#include "REL/m460Dll.h" + +#ifndef __MWERKS__ +#include "game/frand.h" +#endif + +typedef struct UnkM460MapWork { + s32 unk_00; + u32 unk_04; + s32 unk_08; + s32 unk_0C; + s32 unk_10; + s32 unk_14; + s32 unk_18; + s32 unk_1C; + char unk20[4]; + u32 unk_24; + s32 unk_28; + s32 unk_2C; + u32 unk_30; + float unk_34; + float unk_38; + Vec unk_3C; + Vec unk_48; + HsfObject *unk_54; + u32 unk_58; + void *unk_5C; +} UnkM460MapWork; /* size = 0x60 */ + +void fn_1_6818(omObjData *object); +void fn_1_6C00(omObjData *object); +void fn_1_73F8(omObjData *object); +u32 fn_1_76C4(u32 arg0, u32 arg1); +void fn_1_7724(ModelData *model, Mtx mtx); +void fn_1_7790(ModelData *model, Mtx mtx); +void fn_1_7B94(s32 arg0); +void fn_1_7DA8(omObjData *object, Vec *arg1, u32 arg2); + +float lbl_1_data_1E8[8][8] = { + { 0.0f, 325.0f, -387.0f, -8.25f, 15.0f, 0.0f, 1208.0f, 38.65f }, + { 0.0f, 325.0f, -387.0f, -8.25f, -15.0f, 0.0f, 1208.0f, 38.65f }, + { 0.0f, 325.0f, -700.0f, -45.0f, 18.0f, 0.0f, 1500.0f, 41.5f }, + { 0.0f, 325.0f, -700.0f, -45.0f, 0.0f, 0.0f, 1500.0f, 41.5f }, + { 0.0f, 325.0f, -700.0f, -45.0f, -18.0f, 0.0f, 925.0f, 68.0f }, + { 0.0f, 302.0f, -783.0f, 14.25f, 28.5f, 0.0f, 833.0f, 61.0f }, + { 0.0f, 302.0f, -783.0f, 14.25f, 0.0f, 0.0f, 833.0f, 61.0f }, + { 0.0f, 302.0f, -783.0f, 14.25f, -28.5f, 0.0f, 833.0f, 61.0f }, +}; +float lbl_1_data_2E8[2][8] = { + { -250.0f, 200.0f, -1000.0f, -10.0f, 0.0f, 0.0f, 1200.0f, 41.5f }, + { 250.0f, 200.0f, -1000.0f, -10.0f, 0.0f, 0.0f, 1200.0f, 41.5f }, +}; +s32 lbl_1_data_328[3] = { DATA_MAKE_NUM(DATADIR_M460, 0x00), DATA_MAKE_NUM(DATADIR_M460, 0x01), DATA_MAKE_NUM(DATADIR_M460, 0x02) }; +s32 lbl_1_data_334[3] = { DATA_MAKE_NUM(DATADIR_M460, 0x03), DATA_MAKE_NUM(DATADIR_M460, 0x04), DATA_MAKE_NUM(DATADIR_M460, 0x05) }; +s32 lbl_1_data_340[3] = { DATA_MAKE_NUM(DATADIR_M460, 0x06), DATA_MAKE_NUM(DATADIR_M460, 0x07), DATA_MAKE_NUM(DATADIR_M460, 0x08) }; +s32 lbl_1_data_34C[2] = { DATA_MAKE_NUM(DATADIR_M460, 0x09), DATA_MAKE_NUM(DATADIR_M460, 0x0A) }; +s32 lbl_1_data_354[2] = { DATA_MAKE_NUM(DATADIR_M460, 0x0B), DATA_MAKE_NUM(DATADIR_M460, 0x0C) }; + +// UnkM460MapWork +omObjData *lbl_1_bss_48; + +void fn_1_67B4(Process *process) +{ + omObjData *var_r31 = omAddObjEx(process, 0x1E, 0x10, 0, -1, fn_1_6818); + lbl_1_bss_48 = var_r31; + var_r31->work[0] = 0; +} + +void fn_1_6814(void) { } + +void fn_1_6818(omObjData *object) +{ + s32 var_r31; + s32 var_r30; + UnkM460MapWork *var_r28; + HsfanimStruct01 *var_r27; + + var_r28 = object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM460MapWork), MEMORY_DEFAULT_NUM); + memset(var_r28, 0, sizeof(UnkM460MapWork)); + omSetTra(object, 0.0f, 0.0f, 0.0f); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_r30 = Hu3DModelCreateFile(lbl_1_data_328[var_r31]); + object->model[var_r31] = var_r30; + Hu3DModelLayerSet(var_r30, 1); + Hu3DModelAttrSet(var_r30, HU3D_ATTR_DISPOFF); + } + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_r30 = Hu3DModelCreateFile(lbl_1_data_334[var_r31]); + object->model[var_r31 + 3] = var_r30; + Hu3DModelLayerSet(var_r30, 1); + Hu3DModelAttrSet(var_r30, HU3D_ATTR_DISPOFF); + } + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_r30 = Hu3DModelCreateFile(lbl_1_data_340[var_r31]); + object->model[var_r31 + 6] = var_r30; + Hu3DModelLayerSet(var_r30, 1); + Hu3DModelAttrSet(var_r30, HU3D_ATTR_DISPOFF); + } + for (var_r31 = 0; var_r31 < 2; var_r31++) { + var_r30 = Hu3DModelCreateFile(lbl_1_data_34C[var_r31]); + object->model[var_r31 + 9] = var_r30; + Hu3DModelLayerSet(var_r30, 1); + Hu3DModelAttrSet(var_r30, HU3D_MOTATTR_LOOP); + } + for (var_r31 = 0; var_r31 < 2; var_r31++) { + var_r30 = Hu3DModelCreateFile(lbl_1_data_354[var_r31]); + object->model[var_r31 + 0xB] = var_r30; + Hu3DModelLayerSet(var_r30, 3); + Hu3DModelAttrSet(var_r30, HU3D_ATTR_DISPOFF); + } + var_r28->unk_08 = 8; + fn_1_73F8(object); + var_r30 = Hu3DHookFuncCreate(fn_1_7724); + object->model[13] = var_r30; + Hu3DModelCameraSet(var_r30, 1); + Hu3DModelLayerSet(var_r30, 7); + var_r30 = Hu3DHookFuncCreate(fn_1_7790); + object->model[14] = var_r30; + Hu3DModelCameraSet(var_r30, 2); + Hu3DModelLayerSet(var_r30, 7); + var_r28->unk_58 = GXGetTexBufferSize(0x280, 0x1E0, 5, 0, 0); + var_r28->unk_5C = HuMemDirectMallocNum(HEAP_SYSTEM, var_r28->unk_58, MEMORY_DEFAULT_NUM); + DCFlushRange(var_r28->unk_5C, var_r28->unk_58); + var_r30 = Hu3DParticleCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_M460, 0x23)), 0x100); + object->model[15] = var_r30; + Hu3DModelLayerSet(var_r30, 4); + for (var_r27 = ((ParticleData *)Hu3DData[var_r30].unk_120)->unk_48, var_r31 = 0; var_r31 < 0x100; var_r31++, var_r27++) { + var_r27->unk2C = 0.0f; + var_r27->unk40.a = 0; + var_r27->unk00 = 0; + } + DCStoreRange(((ParticleData *)Hu3DData[var_r30].unk_120)->unk_48, 0x4400); + var_r28->unk_28 = 1; + var_r28->unk_2C = -1; + object->func = fn_1_6C00; +} + +void fn_1_6C00(omObjData *object) +{ + Vec sp14; + Vec sp8; + float var_f31; + UnkM460MapWork *var_r31; + M460DllCameraStruct *var_r30; + M460DllCameraStruct *var_r28; + u32 var_r27; + s32 var_r26; + s32 var_r25; + + var_r31 = object->data; + var_r30 = fn_1_3E90(1); + var_r28 = fn_1_3E90(2); + switch (fn_1_4164()) { + case 1: + var_r31->unk_18 = 0; + var_r31->unk_1C = 0; + var_r31->unk_24 = 0; + if (var_r31->unk_00 != 0) { + fn_1_73F8(object); + var_r31->unk_00 = 0; + } + break; + case 3: + var_r27 = fn_1_42F0(); + Hu3DMotionSpeedSet(object->model[var_r27 + 9], 1.5f); + if (var_r31->unk_18 == 0) { + if (fn_1_4324() != 0) { + var_r31->unk_18 = 1; + if (var_r27 == 0) { + var_r31->unk_2C = object->model[var_r31->unk_14 + 3]; + var_r31->unk_54 = Hu3DModelObjPtrGet(var_r31->unk_2C, "door_l"); + } + else if (var_r27 == 1) { + var_r31->unk_2C = object->model[var_r31->unk_10 + 6]; + var_r31->unk_54 = Hu3DModelObjPtrGet(var_r31->unk_2C, "door_r"); + } + var_r31->unk_28 = 0; + var_r31->unk_30 = 0; + Hu3DModelAttrReset(object->model[var_r27 + 0xB], HU3D_ATTR_DISPOFF); + } + } + else if (var_r31->unk_28 != 0) { + fn_1_433C(); + var_r30->unk_10 -= 0.116666675f; + } + if (var_r31->unk_1C == 0) { + var_r31->unk_24++; + if (var_r31->unk_24 > 102.0f) { + var_r31->unk_1C = 1; + fn_1_8BA0(0.041666668f); + var_r30->unk_1C.x = lbl_1_data_2E8[var_r27][0]; + var_r30->unk_1C.y = lbl_1_data_2E8[var_r27][1]; + var_r30->unk_1C.z = lbl_1_data_2E8[var_r27][2]; + var_r30->unk_28.x = lbl_1_data_2E8[var_r27][3]; + var_r30->unk_28.y = lbl_1_data_2E8[var_r27][4]; + var_r30->unk_28.z = lbl_1_data_2E8[var_r27][5]; + var_r30->unk_34 = lbl_1_data_2E8[var_r27][6]; + var_r30->unk_10 = lbl_1_data_2E8[var_r27][7]; + } + } + break; + case 4: + var_r30->unk_10 -= 0.116666675f; + var_r31->unk_00 = 1; + break; + } + if ((var_r31->unk_28 == 0) && (var_r31->unk_2C >= 0)) { + if (var_r31->unk_30 == 0) { + var_r31->unk_34 = 0.0f; + var_r31->unk_38 = 0.0f; + var_r31->unk_3C.x = var_r31->unk_3C.y = var_r31->unk_3C.z = 0.0f; + var_r31->unk_48 = var_r31->unk_3C; + var_r31->unk_38 = 2.9166667f; + if (var_r31->unk_54) { + sp14.x = var_r31->unk_54->data.base.pos.x; + sp14.y = 10.0f + var_r31->unk_54->data.base.pos.y; + sp14.z = 20.0f + var_r31->unk_54->data.base.pos.z; + fn_1_7DA8(object, &sp14, 0); + } + HuAudFXPlay(0x818); + } + if (var_r31->unk_30 < 24.0f) { + var_r31->unk_38 *= 0.93f; + } + else { + var_f31 = 3.888889f; + var_r31->unk_38 = var_r31->unk_38 + (0.033333335f * var_f31); + if (var_r31->unk_38 > var_f31) { + var_r31->unk_38 = var_f31; + } + } + var_r26 = 0.5f + (0.2f * var_r31->unk_34); + var_r31->unk_34 = var_r31->unk_34 + var_r31->unk_38; + if (var_r31->unk_34 >= 350.0f) { + var_r31->unk_34 = 350.0f; + var_r31->unk_28 = 1; + HuAudFXPlay(0x819); + if (var_r31->unk_54) { + sp14.x = var_r31->unk_54->data.base.pos.x; + sp14.y = (var_r31->unk_54->data.base.pos.y + var_r31->unk_34) - 15.000001f; + sp14.z = 10.0f + var_r31->unk_54->data.base.pos.z; + fn_1_7DA8(object, &sp14, 2); + } + } + var_r25 = 0.5f + (0.2f * var_r31->unk_34); + if (var_r26 != var_r25) { + var_r31->unk_48.x = 100.0f * ((0.00003f * frandmod(0x3E8)) - 0.015f); + var_r31->unk_48.y = 100.0f * ((0.00006f * frandmod(0x3E8)) - 0.03f); + var_r31->unk_48.z = 100.0f * ((0.00006f * frandmod(0x3E8)) - 0.03f); + if (var_r31->unk_54) { + sp14.x = var_r31->unk_54->data.base.pos.x; + sp14.y = (var_r31->unk_54->data.base.pos.y + var_r31->unk_34) - 15.000001f; + sp14.z = 15.000001f + var_r31->unk_54->data.base.pos.z; + fn_1_7DA8(object, &sp14, 1); + } + } + PSVECSubtract(&var_r31->unk_48, &var_r31->unk_3C, &sp8); + PSVECScale(&sp8, &sp8, 0.4f); + PSVECAdd(&var_r31->unk_3C, &sp8, &sp14); + sp14.y += var_r31->unk_34; + Hu3DModelPosSetV(var_r31->unk_2C, &sp14); + var_r31->unk_30++; + } + fn_1_7B94(object->model[15]); + if (var_r28->unk_00 != 0) { + var_r28->unk_90 = var_r28->unk_90 + var_r28->unk_8C; + if (var_r28->unk_90 > 1.0f) { + var_r28->unk_00 = 0; + var_r28->unk_90 = 1.0f; + fn_1_3E68(1); + } + } +} + +Vec lbl_1_data_36C = { 0.0f, 0.0f, 0.0f }; +GXColor lbl_1_data_378 = { 0, 0, 0, 0x80 }; + +void fn_1_73F8(omObjData *object) +{ + UnkM460MapWork *var_r31; + M460DllCameraStruct *var_r29; + u32 var_r28; + + var_r31 = object->data; + Hu3DModelAttrSet(object->model[var_r31->unk_0C], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(object->model[var_r31->unk_10 + 6], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(object->model[var_r31->unk_14 + 3], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(object->model[11], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(object->model[12], HU3D_ATTR_DISPOFF); + if (var_r31->unk_04 != 0) { + var_r31->unk_0C = fn_1_76C4(3, var_r31->unk_0C); + var_r31->unk_14 = fn_1_76C4(3, var_r31->unk_14); + var_r31->unk_10 = fn_1_76C4(3, var_r31->unk_10); + var_r29 = fn_1_3E90(1); + var_r28 = var_r31->unk_08 = fn_1_76C4(8, var_r31->unk_08); + var_r29->unk_1C.x = lbl_1_data_1E8[var_r28][0]; + var_r29->unk_1C.y = lbl_1_data_1E8[var_r28][1]; + var_r29->unk_1C.z = lbl_1_data_1E8[var_r28][2]; + var_r29->unk_28.x = lbl_1_data_1E8[var_r28][3]; + var_r29->unk_28.y = lbl_1_data_1E8[var_r28][4]; + var_r29->unk_28.z = lbl_1_data_1E8[var_r28][5]; + var_r29->unk_34 = lbl_1_data_1E8[var_r28][6]; + var_r29->unk_10 = lbl_1_data_1E8[var_r28][7]; + } + Hu3DMotionTimeSet(object->model[9], 0.0f); + Hu3DMotionSpeedSet(object->model[9], 0.0f); + Hu3DMotionTimeSet(object->model[10], 0.0f); + Hu3DMotionSpeedSet(object->model[10], 0.0f); + Hu3DModelAttrReset(object->model[var_r31->unk_0C], HU3D_ATTR_DISPOFF); + Hu3DModelAttrReset(object->model[var_r31->unk_14 + 3], HU3D_ATTR_DISPOFF); + Hu3DModelAttrReset(object->model[var_r31->unk_10 + 6], HU3D_ATTR_DISPOFF); + Hu3DModelPosSetV(object->model[var_r31->unk_14 + 3], &lbl_1_data_36C); + Hu3DModelPosSetV(object->model[var_r31->unk_10 + 6], &lbl_1_data_36C); + var_r31->unk_04++; +} + +u32 fn_1_76C4(u32 arg0, u32 arg8) +{ + u32 var_r31 = frandmod(arg0); + if (var_r31 == arg8) { + var_r31++; + } + var_r31 %= arg0; + return var_r31; +} + +void fn_1_7724(ModelData *model, Mtx mtx) +{ + UnkM460MapWork *var_r31 = lbl_1_bss_48->data; + GXSetTexCopySrc(0, 0, 0x280, 0x1E0); + GXSetTexCopyDst(0x280, 0x1E0, GX_TF_RGB5A3, 0); + GXCopyTex(var_r31->unk_5C, 0); + GXPixModeSync(); +} + +void fn_1_7790(ModelData *model, Mtx mtx) +{ + Mtx sp5C; + Mtx sp2C; + GXTexObj spC; + float var_f31; + float var_f30; + float var_f29; + UnkM460MapWork *var_r31; + M460DllCameraStruct *var_r30; + + var_r31 = lbl_1_bss_48->data; + var_r30 = fn_1_3F2C(2); + lbl_1_data_378.a = 255.0f * var_r30->unk_90; + DCStoreRange(&lbl_1_data_378, 4); + C_MTXPerspective(sp2C, 41.5f, 1.2f, 100.0f, 5500.0f); + GXSetProjection(sp2C, GX_PERSPECTIVE); + PSMTXIdentity(sp5C); + GXLoadPosMtxImm(sp5C, 0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, 0, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + GXInitTexObj(&spC, var_r31->unk_5C, 0x280, 0x1E0, 5, GX_CLAMP, GX_CLAMP, 0); + GXInitTexObjLOD(&spC, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0, 0, GX_ANISO_1); + GXLoadTexObj(&spC, GX_TEXMAP0); + C_MTXLightPerspective(sp2C, 41.5f, 1.2f, 0.5f, -0.5f, 0.5f, 0.5f); + GXLoadTexMtxImm(sp2C, 0x1E, GX_MTX3x4); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, 0x1E, 0, 0x7D); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, lbl_1_data_378); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET); + GXSetZMode(0, GX_LEQUAL, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + var_f31 = 4125.0f; + var_f30 = 2750.0f; + var_f29 = 2530.0f; + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(-var_f31, var_f30, -var_f29); + GXPosition3f32(var_f31, var_f30, -var_f29); + GXPosition3f32(var_f31, -var_f30, -var_f29); + GXPosition3f32(-var_f31, -var_f30, -var_f29); +} + +void fn_1_7B94(s32 arg0) +{ + HsfanimStruct01 *var_r31; + ParticleData *var_r30; + s32 var_r29; + + var_r30 = Hu3DData[arg0].unk_120; + for (var_r31 = var_r30->unk_48, var_r29 = 0; var_r29 < var_r30->unk_30; var_r29++, var_r31++) { + if (var_r31->unk00_s16 != 0) { + PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34); + switch (var_r31->unk02) { + case 0: + var_r31->unk2C += 1.0f; + var_r31->unk20 *= 0.99f; + var_r31->unk08.y += 0.019444447f; + break; + case 1: + var_r31->unk2C += 2.0f; + var_r31->unk20 *= 0.98f; + break; + case 2: + var_r31->unk2C += 1.0f; + var_r31->unk20 *= 0.995f; + break; + } + if (var_r31->unk00_s16 < 12.0f) { + var_r31->unk20 = 0.9f * var_r31->unk20; + } + var_r31->unk40.a = var_r31->unk20; + if (--var_r31->unk00_s16 == 0) { + var_r31->unk00 = 0; + var_r31->unk2C = 0.0f; + var_r31->unk40.a = 0; + } + } + } + DCStoreRange(var_r30->unk_48, var_r30->unk_30 * 0x44); +} + +void fn_1_7DA8(omObjData *object, Vec *arg1, u32 arg2) +{ + Vec sp1C; + float var_f31; + + HsfanimStruct01 *var_r31; + ParticleData *var_r30; + s32 var_r28; + u32 var_r27; + + GXColor spC = { 0xA2, 0x97, 0x7B, 0x80 }; + GXColor sp8 = { 0xE7, 0xDD, 0xC0, 0xFF }; + s32 sp10[3] = { 0x00000032, 4, 0x00000046 }; + + var_r30 = Hu3DData[object->model[15]].unk_120; + if (arg2 > 2) { + arg2 = 1; + } + var_r27 = sp10[arg2]; + for (var_r31 = var_r30->unk_48, var_r28 = 0; var_r28 < var_r30->unk_30; var_r28++, var_r31++) { + if (var_r31->unk00_s16 == 0) { + var_r31->unk02 = arg2; + sp1C.x = 100.0f * ((0.0026f * frandmod(0x3E8)) - 1.3f); + sp1C.y = 0.0f; + sp1C.z = 100.0f * ((0.000100000005f * frandmod(0x3E8)) - 0.05f); + PSVECAdd(&sp1C, arg1, &var_r31->unk34); + var_r31->unk30 = 0.0031415902f * frandmod(0x3E8); + switch (arg2) { + case 0: + var_r31->unk00_s16 = 60.0f * (0.8f + (0.0007f * frandmod(0x3E8))); + var_r31->unk08.x = 1.6666667f * (0.000100000005f * frandmod(0x3E8) - 0.05f); + var_r31->unk08.y = 1.6666667f * (0.05f + (0.00020000001f * frandmod(0x3E8))); + var_r31->unk08.z = 1.6666667f * (0.1f + (0.0006f * frandmod(0x3E8))); + var_f31 = 0.001f * frandmod(0x3E8); + var_r31->unk2C = 30.0f + (30.0f * var_f31); + var_r31->unk40.a = 40.0f + (40.0f * (1.0f - var_f31)); + var_r31->unk40.r = spC.r + (var_f31 * (sp8.r - spC.r)); + var_r31->unk40.g = spC.g + (var_f31 * (sp8.g - spC.g)); + var_r31->unk40.b = spC.b + (var_f31 * (sp8.b - spC.b)); + break; + case 1: + sp1C.x = 100.0f * (1.1f + (0.00020000001f * frandmod(0x3E8))); + sp1C.y = 100.0f * (0.2f + (0.0005f * frandmod(0x3E8))); + if (frandmod(0x3E8) < 0x1F4) { + sp1C.x *= -1.0f; + } + PSVECAdd(&sp1C, arg1, &var_r31->unk34); + var_r31->unk00 = 60.0f * (0.2f + (0.0005f * frandmod(0x3E8))); + var_r31->unk08.x = 1.6666667f * ((0.000100000005f * frandmod(0x3E8)) - 0.05f); + var_r31->unk08.y = -1.6666667f * (0.2f + (0.0003f * frandmod(0x3E8))); + var_r31->unk08.z = 1.6666667f * (0.05f + (0.000100000005f * frandmod(0x3E8))); + var_f31 = 0.001f * frandmod(0x3E8); + var_r31->unk2C = 20.0f + (30.0f * var_f31); + var_r31->unk40.a = 8.0f + (13.0f * (1.0f - var_f31)); + var_r31->unk40.r = spC.r + (var_f31 * (sp8.r - spC.r)); + var_r31->unk40.g = spC.g + (var_f31 * (sp8.g - spC.g)); + var_r31->unk40.b = spC.b + (var_f31 * (sp8.b - spC.b)); + break; + case 2: + var_r31->unk00 = 60.0f * (0.9f + (0.00080000004f * frandmod(0x3E8))); + var_r31->unk08.x = 1.6666667f * ((0.00020000001f * frandmod(0x3E8)) - 0.1f); + var_r31->unk08.y = -1.6666667f * (0.1f + (0.0007f * frandmod(0x3E8))); + var_r31->unk08.z = 1.6666667f * ((0.00020000001f * frandmod(0x3E8)) - 0.1f); + var_f31 = 0.001f * frandmod(0x3E8); + var_r31->unk2C = 40.0f + (60.0f * var_f31); + var_r31->unk40.a = 8.0f + (10.0f * (1.0f - var_f31)); + var_r31->unk40.r = spC.r + (var_f31 * (sp8.r - spC.r)); + var_r31->unk40.g = spC.g + (var_f31 * (sp8.g - spC.g)); + var_r31->unk40.b = spC.b + (var_f31 * (sp8.b - spC.b)); + break; + } + var_r31->unk20 = var_r31->unk40.a; + var_r27--; + if (var_r27 < 1) { + break; + } + } + } + + DCStoreRange(var_r30->unk_48, var_r30->unk_30 * sizeof(HsfanimStruct01)); +} + +void fn_1_8BA0(float arg8) +{ + M460DllCameraStruct *var_r31; + M460DllCameraStruct *var_r30; + + var_r30 = fn_1_3E90(1); + var_r31 = fn_1_3E90(2); + var_r31->unk_00 = 1; + var_r31->unk_1C = var_r30->unk_1C; + var_r31->unk_28 = var_r30->unk_28; + var_r31->unk_34 = var_r30->unk_34; + var_r31->unk_10 = var_r30->unk_10; + var_r31->unk_44 = var_r30->unk_44; + var_r31->unk_40 = var_r30->unk_40; + var_r31->unk_8C = arg8; + var_r31->unk_90 = 0.0f; + fn_1_3E68(2); +} + +s32 fn_1_8C78(void) +{ + M460DllCameraStruct *var_r31 = fn_1_3E90(2); + return var_r31->unk_00; +} diff --git a/src/REL/m460Dll/player.c b/src/REL/m460Dll/player.c new file mode 100644 index 00000000..740af4a2 --- /dev/null +++ b/src/REL/m460Dll/player.c @@ -0,0 +1,658 @@ +#include "datadir_enum.h" +#include "ext_math.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/object.h" +#include "game/pad.h" +#include "string.h" + +#include "REL/m460Dll.h" + +#ifndef __MWERKS__ +#include "game/frand.h" +#endif + +typedef struct UnkData110Struct { + /* 0x00 */ u16 unk_00; + /* 0x04 */ float unk_04; + /* 0x08 */ float unk_08; + /* 0x0C */ float unk_0C; + /* 0x10 */ u32 unk_10; +} UnkData110Struct; /* size = 0x14 */ + +typedef struct UnkM460DllPlayerWork { + s32 unk_00; + s32 unk_04; + s32 unk_08; + s32 unk_0C; + s32 unk_10; + u32 unk_14; + u32 unk_18; + float unk_1C; + float unk_20; + s32 unk_24; + s32 unk_28; + u16 unk_2C; + s32 unk_30; + char unk34[0x4]; + s16 unk_38; + char unk3A[6]; + s32 unk_40; + float unk_44; + float unk_48; + float unk_4C; + float unk_50; + float unk_54; + s32 unk_58; + float unk_5C; + Vec unk_60; + Vec unk_6C; + Vec unk_78; + s32 unk_84; +} UnkM460DllPlayerWork; /* size = 0x88 */ + +void fn_1_4C08(omObjData *object); +void fn_1_4F6C(omObjData *object); +void fn_1_5168(omObjData *object); +void fn_1_55EC(omObjData *object); +void fn_1_57D8(omObjData *object); +s32 fn_1_58C8(omObjData *object, float arg8, float arg9); +void fn_1_5A14(omObjData *object); +void fn_1_5C88(omObjData *object); +void fn_1_5CE0(omObjData *object, u32 arg1); +s32 fn_1_5E6C(omObjData *object); +void fn_1_60B0(omObjData *object); +void fn_1_61F4(omObjData *object); + +u32 lbl_1_data_F0[8] = { 0, 2, 3, 0x590015, 0x59000D, 0x17, 0x18, 0x1A }; +struct UnkData110Struct lbl_1_data_110[8] = { + { 0, 0.2f, 0.0f, -1.0f, 0x40000001 }, + { 1, 0.2f, 0.0f, -1.0f, 0x40000001 }, + { 2, 0.2f, 0.0f, -1.0f, 0x40000001 }, + { 3, 0.2f, 0.0f, -1.0f, 0x40000001 }, + { 4, 0.2f, 0.0f, -1.0f, 0 }, + { 5, 0.2f, 0.0f, -1.0f, 0 }, + { 6, 0.2f, 0.0f, -1.0f, 0 }, + { 7, 0.2f, 0.0f, -1.0f, 0x40000001 }, +}; + +omObjData *lbl_1_bss_40[1]; +omObjData *lbl_1_bss_3C; +s32 lbl_1_bss_38[1]; + +void fn_1_49A0(Process *process) +{ + u32 spC[1]; + u32 sp8[1]; + + s16 var_r31; + s16 var_r30; + u32 var_r29; + omObjData *var_r27; + + for (var_r31 = 0; var_r31 < 1; var_r31++) { + spC[var_r31] = GWPlayerCfg[var_r31].group; + sp8[var_r31] = var_r31; + } + for (var_r31 = 0; var_r31 < 0; var_r31++) { + for (var_r30 = var_r31 + 1; var_r30 < 1; var_r30++) { + if (spC[var_r31] > spC[var_r30]) { + var_r29 = spC[var_r31]; + spC[var_r31] = spC[var_r30]; + spC[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 < 1; var_r31++) { + lbl_1_bss_38[sp8[var_r31]] = var_r31; + } + omMakeGroupEx(process, 0, 1); + omGetGroupMemberListEx(process, 0); + for (var_r31 = 0; var_r31 < 1; var_r31++) { + var_r27 = lbl_1_bss_40[var_r31] = omAddObjEx(process, 0x28, 1, 8, 0, fn_1_4C08); + var_r27->work[0] = var_r31; + } + lbl_1_bss_3C = omAddObjEx(process, 0x28, 1, 5, -1, fn_1_60B0); +} + +void fn_1_4BE4(void) +{ + CharModelKill(-1); +} + +void fn_1_4C08(omObjData *object) +{ + UnkM460DllPlayerWork *var_r31; + s32 var_r29; + + float sp8[4] = { 0.25f, 0.5f, 0.75f, 1.0f }; + Vec sp18[4] = { + { 0.0f, 0.0f, 300.0f }, + { -450.0f, 0.0f, -50.0f }, + { 0.0f, 0.0f, -350.0f }, + { 450.0f, 0.0f, -50.0f }, + }; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM460DllPlayerWork), MEMORY_DEFAULT_NUM); + var_r31 = object->data; + memset(var_r31, 0, sizeof(UnkM460DllPlayerWork)); + object->stat |= 0x100; + var_r31->unk_00 = GWPlayerCfg[object->work[0]].character; + var_r31->unk_08 = lbl_1_bss_38[object->work[0]]; + fn_1_41B4(object->work[0], var_r31->unk_08, var_r31->unk_00); + var_r31->unk_54 = sp8[GWPlayerCfg[object->work[0]].diff & 3]; + var_r31->unk_24 = GWPlayerCfg[object->work[0]].iscom; + object->model[0] = CharModelCreate(var_r31->unk_00, 2); + Hu3DModelLayerSet(object->model[0], 1); + CharModelLayerSetAll(2); + Hu3DModelShadowSet(object->model[0]); + for (var_r29 = 0; var_r29 < 8; var_r29++) { + if (lbl_1_data_F0[var_r29] < 0x10000) { + object->motion[var_r29] = CharModelMotionCreate(var_r31->unk_00, lbl_1_data_F0[var_r29]); + } + else { + object->motion[var_r29] = Hu3DJointMotionFile(object->model[0], var_r31->unk_00 + lbl_1_data_F0[var_r29]); + } + } + CharModelMotionDataClose(var_r31->unk_00); + CharModelEffectNpcInitSilent(object->model[0], object->motion[3], 1); + object->trans.x = var_r31->unk_60.x = sp18[var_r31->unk_08].x; + object->trans.y = var_r31->unk_60.y = sp18[var_r31->unk_08].y; + object->trans.z = var_r31->unk_60.z = sp18[var_r31->unk_08].z; + var_r31->unk_44 = var_r31->unk_48 = 0.0f; + var_r31->unk_4C = 0.0f; + var_r31->unk_50 = 0.02f; + var_r31->unk_5C = 50.0f; + var_r31->unk_58 = 0; + var_r31->unk_2C = 0; + var_r31->unk_04 = -1; + fn_1_5CE0(object, 0); + var_r31->unk_84 = -1; + object->func = fn_1_4F6C; +} + +void fn_1_4F6C(omObjData *object) +{ + UnkM460DllPlayerWork *var_r31; + s32 var_r29; + + var_r31 = object->data; + var_r31->unk_14 = var_r31->unk_18 = 0; + var_r31->unk_0C = var_r31->unk_10 = 0; + var_r31->unk_1C = 0.0f; + var_r31->unk_20 = 0.0f; + switch (var_r31->unk_2C) { + case 0: + var_r31->unk_44 = var_r31->unk_48 = 180.0f; + var_r31->unk_60.x = 0.0f; + var_r31->unk_60.y = 0.0f; + var_r31->unk_60.z = -450.0f; + fn_1_5CE0(object, 7); + var_r31->unk_2C = 1; + var_r31->unk_30 = 0; + break; + case 1: + if (fn_1_414C() == 1) { + var_r31->unk_60.x = 0.0f; + var_r31->unk_60.y = 0.0f; + var_r31->unk_60.z = -100.0f; + var_r31->unk_78.x = 0.0f; + var_r31->unk_78.y = 0.0f; + var_r31->unk_78.z = -450.0f; + var_r31->unk_2C = 2; + var_r31->unk_30 = 0; + } + break; + case 2: + var_r29 = fn_1_58C8(object, 0.5f, 20.0f); + fn_1_5A14(object); + if (var_r29 != 0) { + var_r31->unk_2C = 3; + var_r31->unk_30 = 0; + } + break; + } + PSVECAdd(&var_r31->unk_60, &var_r31->unk_6C, &var_r31->unk_60); + fn_1_57D8(object); + if (fn_1_414C() == 2) { + var_r31->unk_2C = 0; + object->func = fn_1_5168; + } +} + +void fn_1_5168(omObjData *object) +{ + UnkM460DllPlayerWork *var_r31; + s32 var_r29; + u32 var_r28; + s32 var_r27; + + var_r31 = object->data; + var_r27 = 0; + { + Vec sp20[2] = { + { -250.0f, 0.0f, -900.0f }, + { 250.0f, 0.0f, -900.0f }, + }; + + Vec sp8[2] = { + { -250.0f, 0.0f, -1400.0f }, + { 250.0f, 0.0f, -1400.0f }, + }; + var_r31->unk_14 = var_r31->unk_18 = 0; + var_r31->unk_0C = var_r31->unk_10 = 0; + var_r31->unk_1C = 0.0f; + var_r31->unk_20 = 0.0f; + if (fn_1_4164() == 2) { + if (var_r31->unk_24 != 0) { + fn_1_5C88(object); + } + else { + if (HuPadTrigL[GWPlayerCfg[object->work[0]].pad_idx] > 0x28) { + var_r31->unk_14 = 1; + } + if (HuPadTrigR[GWPlayerCfg[object->work[0]].pad_idx] > 0x28) { + var_r31->unk_18 = 1; + } + } + } + switch (var_r31->unk_2C) { + case 0: + if (fn_1_4370() != 0) { + var_r31->unk_60.x = -140.0f; + var_r31->unk_60.y = 0.0f; + var_r31->unk_60.z = -150.0f; + } + var_r31->unk_78.x = 0.0f; + var_r31->unk_78.y = 0.0f; + var_r31->unk_78.z = -450.0f; + var_r31->unk_40 = 3; + var_r31->unk_2C = 4; + case 4: + var_r29 = fn_1_58C8(object, 0.5f, 20.0f); + fn_1_5A14(object); + if ((var_r29 != 0) && (fn_1_4164() == 2)) { + var_r31->unk_48 = 180.0f; + var_r31->unk_6C.x = var_r31->unk_6C.y = var_r31->unk_6C.z = 0.0f; + var_r31->unk_2C = 5; + } + break; + case 5: + var_r29 = 0; + fn_1_5A14(object); + if (CharModelMotionShiftIDGet(var_r31->unk_00) < 0) { + var_r29 = 1; + } + var_r28 = fn_1_42F0(); + if (var_r28 == 3) { + if (var_r29 != 0) { + if (var_r31->unk_14 != 0) { + var_r28 = 0; + } + else if (var_r31->unk_18 != 0) { + var_r28 = 1; + } + if (var_r28 != 3) { + fn_1_42BC(var_r28); + } + } + } + else { + var_r31->unk_40 = var_r28; + var_r31->unk_78 = sp20[var_r31->unk_40]; + var_r31->unk_2C = 6; + } + break; + case 6: + var_r29 = fn_1_58C8(object, 1.0f, 20.0f); + fn_1_5A14(object); + if (var_r29 != 0) { + fn_1_4308(); + var_r31->unk_48 = 180.0f; + var_r31->unk_6C.x = var_r31->unk_6C.y = var_r31->unk_6C.z = 0.0f; + var_r31->unk_2C = 7; + } + break; + case 7: + fn_1_5A14(object); + if (fn_1_4358() != 0) { + if (fn_1_419C() == 0) { + var_r31->unk_78 = sp8[var_r31->unk_40]; + var_r31->unk_2C = 8; + } + else { + var_r27 = 1; + } + } + break; + case 8: + var_r29 = fn_1_58C8(object, 0.5f, 20.0f); + fn_1_5A14(object); + + default: + if (fn_1_4164() == 1) { + var_r31->unk_2C = 0; + } + var_r27 = 1; + break; + } + } + PSVECAdd(&var_r31->unk_60, &var_r31->unk_6C, &var_r31->unk_60); + fn_1_57D8(object); + if ((fn_1_4164() == 5) && (var_r27 != 0)) { + var_r31->unk_2C = 0; + object->func = fn_1_55EC; + } +} + +void fn_1_55EC(omObjData *object) +{ + Vec sp8; + UnkM460DllPlayerWork *var_r31; + s32 var_r29; + + var_r31 = object->data; + var_r29 = 0; + switch (var_r31->unk_2C) { + case 0: + fn_1_41F4(object->work[0]); + fn_1_5CE0(object, 4); + sp8 = var_r31->unk_60; + sp8.y += 160.0f; + var_r31->unk_2C = 9; + break; + case 9: + if (fn_1_5E6C(object) != 0) { + var_r31->unk_78.x = 0.0f; + var_r31->unk_78.y = 0.0f; + var_r31->unk_78.z = 500.0f; + fn_1_4224(object->work[0]); + HuAudCharVoicePlay(var_r31->unk_00, 0x128); + var_r31->unk_28 = 1; + var_r31->unk_2C = 0xA; + } + break; + case 10: + var_r29 = fn_1_58C8(object, 1.0f, 20.0f); + fn_1_5A14(object); + if (var_r29 != 0) { + var_r31->unk_6C.x = var_r31->unk_6C.y = var_r31->unk_6C.z = 0.0f; + var_r31->unk_2C = 0xB; + } + break; + case 11: + fn_1_5CE0(object, 0); + break; + } + PSVECAdd(&var_r31->unk_60, &var_r31->unk_6C, &var_r31->unk_60); + fn_1_57D8(object); + if (var_r31->unk_84 >= 0) { + sp8 = var_r31->unk_60; + sp8.y += 160.0f; + HuAudFXEmiterUpDate(var_r31->unk_84, &sp8); + } +} + +void fn_1_57D8(omObjData *object) +{ + UnkM460DllPlayerWork *var_r31 = object->data; + var_r31->unk_38++; + var_r31->unk_30++; + object->trans.x = var_r31->unk_60.x; + object->trans.y = var_r31->unk_60.y; + object->trans.z = var_r31->unk_60.z; + var_r31->unk_4C = var_r31->unk_4C + var_r31->unk_50; + if (var_r31->unk_4C > 0.45f) { + var_r31->unk_4C = 0.45f; + } + var_r31->unk_44 = fn_1_47D0(var_r31->unk_44, var_r31->unk_48, var_r31->unk_4C); + object->rot.y = var_r31->unk_44; + Hu3DModelPosSetV(object->model[0], &var_r31->unk_60); + Hu3DModelRotSet(object->model[0], 0.0f, var_r31->unk_44, 0.0f); +} + +s32 fn_1_58C8(omObjData *object, float arg8, float arg9) +{ + Vec spC; + float var_f31; + UnkM460DllPlayerWork *var_r31; + s32 var_r30; + + var_r31 = object->data; + var_r30 = 0; + PSVECSubtract(&var_r31->unk_78, &var_r31->unk_60, &spC); + spC.y = 0.0f; + var_f31 = PSVECMag(&spC); + if (var_f31 < arg9) { + var_f31 = 0.0f; + var_r30 = 1; + } + else { + if (PSVECMag(&spC) >= 100.0f) { + var_f31 = 100.0f; + } + var_f31 = 0.2f + (0.008f * var_f31); + } + var_r31->unk_1C = atan2d(spC.x, spC.z); + var_r31->unk_20 = var_f31; + if (var_r31->unk_20 > arg8) { + var_r31->unk_20 = arg8; + } + return var_r30; +} + +void fn_1_5A14(omObjData *object) +{ + float var_f31; + float var_f30; + + UnkM460DllPlayerWork *var_r31 = object->data; + if (var_r31->unk_20 > 0.0f) { + var_r31->unk_48 = var_r31->unk_1C; + } + if (var_r31->unk_20 > 0.05f) { + // 1 / REFRESH_RATE? + var_r31->unk_6C.x = 0.01666666753590107 * (550.0 * (var_r31->unk_20 * sind(var_r31->unk_1C))); + var_r31->unk_6C.z = 0.01666666753590107 * (550.0 * (var_r31->unk_20 * cosd(var_r31->unk_1C))); + if (var_r31->unk_28 != 0) { + var_r31->unk_6C.x *= 1.5f; + var_r31->unk_6C.z *= 1.5f; + } + var_r31->unk_4C = 0.2f; + var_r31->unk_50 = 0.0f; + if (CharModelMotionShiftIDGet(var_r31->unk_00) < 0) { + var_f31 = 0.5f; + if (var_r31->unk_04 == 2) { + var_f31 = 0.45f; + } + if (var_r31->unk_20 > var_f31) { + if (var_r31->unk_28 != 0) { + fn_1_5CE0(object, 3); + } + else { + fn_1_5CE0(object, 2); + } + var_f30 = var_r31->unk_20; + } + else { + fn_1_5CE0(object, 1); + var_f30 = var_r31->unk_20 / var_f31; + } + CharModelMotionSpeedSet(var_r31->unk_00, var_f30); + } + } + else { + var_r31->unk_6C.x = var_r31->unk_6C.y = var_r31->unk_6C.z = 0.0f; + if (CharModelMotionShiftIDGet(var_r31->unk_00) < 0) { + fn_1_5CE0(object, 0); + } + } +} + +void fn_1_5C88(omObjData *object) +{ + UnkM460DllPlayerWork *var_r31 = object->data; + if (frandmod(0x3E8) < 0x1F4) { + var_r31->unk_14 = 1; + return; + } + var_r31->unk_18 = 1; +} + +void fn_1_5CE0(omObjData *object, u32 arg1) +{ + UnkM460DllPlayerWork *var_r30 = object->data; + if ((var_r30->unk_04 != arg1) && (arg1 < 8)) { + float var_f31 = 60.0f * lbl_1_data_110[arg1].unk_04; + if (var_r30->unk_04 < 0) { + var_f31 = 0.0f; + } + var_r30->unk_04 = arg1; + CharModelMotionShiftSet( + var_r30->unk_00, object->motion[lbl_1_data_110[arg1].unk_00], 60.0f * lbl_1_data_110[arg1].unk_08, var_f31, lbl_1_data_110[arg1].unk_10); + if (lbl_1_data_110[arg1].unk_0C >= 0.0f) { + Hu3DMotionShiftStartEndSet(object->model[0], 60.0f * lbl_1_data_110[arg1].unk_08, 60.0f * lbl_1_data_110[arg1].unk_0C); + } + } +} + +s32 fn_1_5E6C(omObjData *object) +{ + M460DllCameraStruct *var_r31 = object->data; + s32 var_r30 = 0; + if ((CharModelMotionEndCheck(var_r31->unk_00) != 0) && (CharModelMotionShiftIDGet(var_r31->unk_00) < 0)) { + var_r30 = 1; + } + return var_r30; +} + +s32 fn_1_5EE0(omObjData *object, u32 arg1) +{ + s32 var_r27 = 0; + if (fn_1_5E6C(object)) { + fn_1_5CE0(object, arg1); + var_r27 = 1; + } + return var_r27; +} + +s32 lbl_1_data_1D4[5] = { + DATA_MAKE_NUM(DATADIR_M460, 0x1E), + DATA_MAKE_NUM(DATADIR_M460, 0x1F), + DATA_MAKE_NUM(DATADIR_M460, 0x20), + DATA_MAKE_NUM(DATADIR_M460, 0x21), + DATA_MAKE_NUM(DATADIR_M460, 0x22), +}; + +void fn_1_60B0(omObjData *object) +{ + s32 var_r30; + s32 var_r29; + + omSetTra(object, 0.0f, 0.0f, 0.0f); + var_r30 = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M460, 0x1D)); + object->model[0] = var_r30; + Hu3DModelLayerSet(var_r30, 1); + Hu3DModelShadowSet(var_r30); + Hu3DModelAttrSet(var_r30, HU3D_ATTR_DISPOFF); + for (var_r29 = 0; var_r29 < 5; var_r29++) { + object->motion[var_r29] = Hu3DJointMotionFile(var_r30, lbl_1_data_1D4[var_r29]); + } + CharModelEffectNpcInitSilent(var_r30, object->motion[1], 0); + CharModelEffectNpcInitSilent(var_r30, object->motion[2], 1); + CharModelEffectNpcInitSilent(var_r30, object->motion[3], 1); + object->work[1] = 0; + object->func = fn_1_61F4; +} + +void fn_1_61F4(omObjData *object) +{ + float var_f31; + float var_f30; + s32 var_r30; + s32 var_r29; + + Vec sp1C[2] = { + { -250.0f, 0.0f, -2200.0f }, + { 250.0f, 0.0f, -2200.0f }, + }; + Vec sp10; + s32 sp8[2] = { 6, 21 }; + switch (object->work[1]) { + case 0: + if ((fn_1_4164() == 3) && (fn_1_419C() != 0) && (fn_1_4324() != 0)) { + Hu3DModelAttrReset(object->model[0], HU3D_ATTR_DISPOFF); + Hu3DMotionShiftSet(object->model[0], object->motion[0], 0.0f, 0.0f, HU3D_MOTATTR_LOOP); + var_r30 = fn_1_42F0(); + object->trans.x = sp1C[var_r30].x; + object->trans.y = sp1C[var_r30].y; + object->trans.z = sp1C[var_r30].z; + object->rot.y = 0.0f; + object->work[1] = 1; + object->work[2] = 0; + } + break; + case 1: + object->work[2]++; + if (object->work[2] > 18.0f) { + Hu3DMotionShiftSet(object->model[0], object->motion[2], 0.0f, 30.0f, HU3D_MOTATTR_LOOP); + object->work[1] = 2; + } + break; + case 2: + sp10.x = (*lbl_1_bss_40)->trans.x - object->trans.x; + sp10.y = 0.0f; + sp10.z = (*lbl_1_bss_40)->trans.z - object->trans.z; + object->rot.y = fn_1_47D0(object->rot.y, atan2d(sp10.x, sp10.z), 0.1f); + object->trans.z += 6.666667f; + if (fn_1_4358() != 0) { + HuAudFXPlay(0x3C); + Hu3DMotionShiftSet(object->model[0], object->motion[3], 0.0f, 30.0f, HU3D_MOTATTR_LOOP); + object->work[1] = 3; + object->work[3] = 0x3C; + } + break; + case 3: + Hu3DMotionSpeedSet(object->model[0], 0.9f); + var_r29 = Hu3DMotionTimeGet(object->model[0]); + for (var_r30 = 0; var_r30 < 2; var_r30++) { + if (var_r29 == sp8[var_r30]) { + var_f30 = 2.1166666f * object->work[3]; + HuAudFXPlayVol(0x6B, var_f30); + } + } + sp10.x = (*lbl_1_bss_40)->trans.x - object->trans.x; + sp10.y = 0.0f; + sp10.z = (*lbl_1_bss_40)->trans.z - object->trans.z; + object->rot.y = fn_1_47D0(object->rot.y, atan2d(sp10.x, sp10.z), 0.1f); + if (object->trans.z < -900.0f) { + // depending on refresh rate? + object->trans.z += 11.666667f; + } + else { + var_f31 = PSVECMag(&sp10); + if (var_f31 < 20.0f) { + var_f31 = 0.0f; + } + else { + if (PSVECMag(&sp10) >= 100.0f) { + var_f31 = 100.0f; + } + var_f31 = 0.2f + (0.008f * var_f31); + var_f31 *= 11.666667f; + } + object->trans.x = object->trans.x + (var_f31 * sind(object->rot.y)); + object->trans.z = object->trans.z + (var_f31 * cosd(object->rot.y)); + } + if ((object->trans.z > 450.0f) && (object->work[3] != 0)) { + object->work[3]--; + } + break; + } +} diff --git a/src/REL/m460Dll/score.c b/src/REL/m460Dll/score.c new file mode 100644 index 00000000..357c2d8c --- /dev/null +++ b/src/REL/m460Dll/score.c @@ -0,0 +1,183 @@ +#include "datadir_enum.h" +#include "game/data.h" + +#include "REL/m460Dll.h" +#include "game/memory.h" + +#include "game/esprite.h" +#ifndef __MWERKS__ +#endif + +typedef struct UnkM460DllScoreWork { + s32 unk_00; + s32 unk_04; + s16 unk_08; + s16 unk_0A; + s16 unk_0C[6]; + s32 unk_18; + float unk_1C; +} UnkM460DllScoreWork; /* size = 0x20 */ + +typedef void (*UnkM460DllScoreFunc)(void); + +void fn_1_9020(s32 arg0); +void fn_1_9050(omObjData *object); +void fn_1_916C(void); +void fn_1_91E4(void); +void fn_1_9270(void); + +UnkM460DllScoreFunc lbl_1_data_380[3] = { fn_1_916C, fn_1_91E4, fn_1_9270 }; + +Process *lbl_1_bss_54; +omObjData *lbl_1_bss_50; +// ? lbl_1_rodata_3D0; + +void fn_1_8CAC(Process *process, s16 arg1) +{ + UnkM460DllScoreWork *var_r31; + u32 var_r30; + + lbl_1_bss_54 = process; + lbl_1_bss_50 = omAddObjEx(lbl_1_bss_54, 0x800, 0, 0, 7, fn_1_9050); + lbl_1_bss_50->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM460DllScoreWork), MEMORY_DEFAULT_NUM); + var_r31 = lbl_1_bss_50->data; + var_r31->unk_08 = arg1; + var_r31->unk_0A = 0; + var_r31->unk_0C[4] = espEntry(0x590024, 2, 0); + espColorSet(var_r31->unk_0C[4], 0, 0, 0); + espTPLvlSet(var_r31->unk_0C[4], 0.5f); + espPosSet(var_r31->unk_0C[4], 508.0f, 64.0f); + var_r31->unk_0C[5] = espEntry(0x610037, 1, 0); + espPosSet(var_r31->unk_0C[5], 490.0f, 56.0f); + for (var_r30 = 0; var_r30 < 2; var_r30++) { + var_r31->unk_0C[var_r30] = espEntry(0x610030, 0, 0); + espPosSet(var_r31->unk_0C[var_r30], (var_r30 * 0x10) + 0x1FE, 56.0f); + espDispOff(var_r31->unk_0C[var_r30]); + } + for (var_r30 = 0; var_r30 < 2; var_r30++) { + var_r31->unk_0C[var_r30 + 2] = espEntry(0x610031, 1, 0); + espPosSet(var_r31->unk_0C[var_r30 + 2], (var_r30 * 0x10) + 0x1FE, 74.0f); + } + for (var_r30 = 0; var_r30 < 6; var_r30++) { + espDispOff(var_r31->unk_0C[var_r30]); + } + HuDataDirClose(DATA_MAKE_NUM(DATADIR_MGCONST, 0)); + fn_1_9020(0); +} + +void fn_1_8F38(void) +{ + s32 var_r31; + UnkM460DllScoreWork *var_r30 = lbl_1_bss_50->data; + for (var_r31 = 0; var_r31 < 6; var_r31++) { + espKill(var_r30->unk_0C[var_r31]); + } + HuMemDirectFree(lbl_1_bss_50->data); +} + +void fn_1_8FAC(s32 arg0) +{ + s32 sp8; + s32 var_r3; + + switch (arg0) { + case 0: + fn_1_9020(1); + break; + case 1: + fn_1_9020(2); + break; + } +} + +void fn_1_8FFC(void) +{ + fn_1_9020(0); +} + +void fn_1_9020(s32 arg0) +{ + UnkM460DllScoreWork *var_r31; + + var_r31 = lbl_1_bss_50->data; + var_r31->unk_00 = arg0; + var_r31->unk_04 = 0; +} + +void fn_1_9050(omObjData *arg0) +{ + UnkM460DllScoreWork *var_r31; + s16 var_r30; + + var_r31 = lbl_1_bss_50->data; + lbl_1_data_380[var_r31->unk_00](); + var_r30 = var_r31->unk_08; + espBankSet(var_r31->unk_0C[0], var_r30 / 10); + var_r30 -= (var_r30 / 10) * 10; + espBankSet(var_r31->unk_0C[1], var_r30); + var_r30 = var_r31->unk_0A; + espBankSet(var_r31->unk_0C[2], var_r30 / 10); + var_r30 -= (var_r30 / 10) * 10; + espBankSet(var_r31->unk_0C[3], var_r30); +} + +void fn_1_916C(void) +{ + UnkM460DllScoreWork *var_r31; + s32 var_r30; + + var_r31 = lbl_1_bss_50->data; + if (var_r31->unk_04 == 0) { + for (var_r30 = 0; var_r30 < 6; var_r30++) { + espDispOff(var_r31->unk_0C[var_r30]); + } + var_r31->unk_04++; + } +} + +void fn_1_91E4(void) +{ + UnkM460DllScoreWork *var_r31; + s16 var_r30; + + var_r31 = lbl_1_bss_50->data; + if (var_r31->unk_04 == 0) { + for (var_r30 = 0; var_r30 < 6; var_r30++) { + espDispOn(var_r31->unk_0C[var_r30]); + } + var_r31->unk_04++; + } + var_r31->unk_0A = fn_1_4370(); +} + +void fn_1_9270(void) +{ + UnkM460DllScoreWork *var_r31; + s32 var_r30; + + var_r31 = lbl_1_bss_50->data; + if (var_r31->unk_04 == 0) { + var_r31->unk_18 = 0; + var_r31->unk_1C = 1.0f; + if (var_r31->unk_0A > var_r31->unk_08) { + var_r31->unk_08 = var_r31->unk_0A; + } + var_r31->unk_04++; + } + if (var_r31->unk_18 == 0) { + if ((var_r31->unk_1C += 0.02f) >= 1.2f) { + var_r31->unk_1C = 1.2f; + var_r31->unk_18 = 1; + } + } + else { + if ((var_r31->unk_1C -= 0.04f) <= 1.0f) { + var_r31->unk_1C = 1.0f; + var_r31->unk_18 = 0; + } + } + for (var_r30 = 0; var_r30 <= 1; var_r30++) { + espScaleSet(var_r31->unk_0C[var_r30], var_r31->unk_1C, var_r31->unk_1C); + } + espScaleSet(var_r31->unk_0C[5], var_r31->unk_1C, var_r31->unk_1C); +}