diff --git a/config/GMPE01_00/rels/m447dll/symbols.txt b/config/GMPE01_00/rels/m447dll/symbols.txt index 189f63b5..b32598b2 100644 --- a/config/GMPE01_00/rels/m447dll/symbols.txt +++ b/config/GMPE01_00/rels/m447dll/symbols.txt @@ -114,182 +114,182 @@ fn_1_A240 = .text:0x0000A240; // type:function size:0x34 _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:0x64 -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0xC data:4byte -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0xC data:4byte -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0xC data:4byte -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 data:float -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x18 -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 data:float -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 data:double -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0xC -lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0xC -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x18 data:4byte -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:0x4 data:float -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -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_74 = .rodata:0x00000074; // type:object size:0xC scope:local data:float +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0xC scope:local data:float +lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0xC scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x18 scope:local data:float +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0xC scope:local data:float +lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0xC scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x18 scope:local data:4byte +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:0x4 scope:local data:float +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +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:0x58 -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x3C -lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 data:float -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 data:float -lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 data:float -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 data:float -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8 data:double -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float -lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 data:float -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:0x1 data:byte -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:0x8 data:double -lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x8 data:double -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 data:float -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:0x4 data:float -lbl_1_rodata_24C = .rodata:0x0000024C; // type:object size:0x4 data:float -lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 data:float -lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 data:float -lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 data:float -lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 data:float -lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 data:float -lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 data:float -lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x8 data:double -lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x8 data:double -lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 data:float -lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x8 data:double -lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 data:float -lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x8 data:double -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x8 data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x3C data:float +lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size: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:byte +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:0x8 scope:local data:double +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x8 scope:local data:double +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 scope:local data:float +lbl_1_rodata_240 = .rodata:0x00000240; // type:object size: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:0x4 scope:local data:float +lbl_1_rodata_24C = .rodata:0x0000024C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 scope:local data:float +lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 scope:local data:float +lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 scope:local data:float +lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 scope:local data:float +lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 scope:local data:float +lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x8 scope:local data:double +lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x8 scope:local data:double +lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 scope:local data:float +lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x8 scope:local data:double +lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 scope:local data:float +lbl_1_rodata_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_2A0 = .rodata:0x000002A0; // type:object size:0x144 -lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x24 -lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x60 -lbl_1_rodata_468 = .rodata:0x00000468; // type:object size:0x14 -lbl_1_rodata_47C = .rodata:0x0000047C; // type:object size:0x4 data:float -lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x4 data:float -lbl_1_rodata_484 = .rodata:0x00000484; // type:object size:0x4 data:float -lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 data:float -lbl_1_rodata_48C = .rodata:0x0000048C; // type:object size:0x4 data:float -lbl_1_rodata_490 = .rodata:0x00000490; // type:object size:0x4 data:float -lbl_1_rodata_498 = .rodata:0x00000498; // type:object size:0x8 data:double -lbl_1_rodata_4A0 = .rodata:0x000004A0; // type:object size:0x8 data:double -lbl_1_rodata_4A8 = .rodata:0x000004A8; // type:object size:0x8 data:double -lbl_1_rodata_4B0 = .rodata:0x000004B0; // type:object size:0x4 data:float -lbl_1_rodata_4B8 = .rodata:0x000004B8; // type:object size:0x8 data:double -lbl_1_rodata_4C0 = .rodata:0x000004C0; // type:object size:0x8 data:double -lbl_1_rodata_4C8 = .rodata:0x000004C8; // type:object size:0x4 data:float -lbl_1_rodata_4CC = .rodata:0x000004CC; // type:object size:0x4 data:float -lbl_1_rodata_4D0 = .rodata:0x000004D0; // type:object size:0x8 data:double -lbl_1_rodata_4D8 = .rodata:0x000004D8; // type:object size:0x4 data:float -lbl_1_rodata_4DC = .rodata:0x000004DC; // type:object size:0x4 data:float -lbl_1_rodata_4E0 = .rodata:0x000004E0; // type:object size:0x4 data:float -lbl_1_rodata_4E4 = .rodata:0x000004E4; // type:object size:0x4 data:float -lbl_1_rodata_4E8 = .rodata:0x000004E8; // type:object size:0x4 data:float -lbl_1_rodata_4EC = .rodata:0x000004EC; // type:object size:0x20 -lbl_1_rodata_50C = .rodata:0x0000050C; // type:object size:0x4 data:float -lbl_1_rodata_510 = .rodata:0x00000510; // type:object size:0x60 -lbl_1_rodata_570 = .rodata:0x00000570; // type:object size:0x4 data:float -lbl_1_rodata_574 = .rodata:0x00000574; // type:object size:0x4 data:float -lbl_1_rodata_578 = .rodata:0x00000578; // type:object size:0x4 data:float -lbl_1_rodata_57C = .rodata:0x0000057C; // type:object size:0x4 data:float -lbl_1_rodata_580 = .rodata:0x00000580; // type:object size:0x4 data:float -lbl_1_rodata_584 = .rodata:0x00000584; // type:object size:0x4 data:float -lbl_1_rodata_588 = .rodata:0x00000588; // type:object size:0x4 data:float -lbl_1_rodata_58C = .rodata:0x0000058C; // type:object size:0x4 data:float -lbl_1_rodata_590 = .rodata:0x00000590; // type:object size:0x4 data:float -lbl_1_rodata_594 = .rodata:0x00000594; // type:object size:0x4 data:float -lbl_1_rodata_598 = .rodata:0x00000598; // type:object size:0x8 data:float -lbl_1_rodata_5A0 = .rodata:0x000005A0; // type:object size:0x4 data:float -lbl_1_rodata_5A4 = .rodata:0x000005A4; // type:object size:0x4 data:float -lbl_1_rodata_5A8 = .rodata:0x000005A8; // type:object size:0x4 data:float -lbl_1_rodata_5AC = .rodata:0x000005AC; // type:object size:0x4 data:float -lbl_1_rodata_5B0 = .rodata:0x000005B0; // type:object size:0x4 data:float -lbl_1_rodata_5B4 = .rodata:0x000005B4; // type:object size:0x4 data:float -lbl_1_rodata_5B8 = .rodata:0x000005B8; // type:object size:0x8 data:double -lbl_1_rodata_5C0 = .rodata:0x000005C0; // type:object size:0x8 data:double -lbl_1_rodata_5C8 = .rodata:0x000005C8; // type:object size:0x8 data:double -lbl_1_rodata_5D0 = .rodata:0x000005D0; // type:object size:0x8 data:double -lbl_1_rodata_5D8 = .rodata:0x000005D8; // type:object size:0x4 data:float -lbl_1_rodata_5E0 = .rodata:0x000005E0; // type:object size:0x8 data:double -lbl_1_rodata_5E8 = .rodata:0x000005E8; // type:object size:0x8 data:double -lbl_1_rodata_5F0 = .rodata:0x000005F0; // type:object size:0x8 data:float +lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x24 data:float +lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x60 data:float +lbl_1_rodata_468 = .rodata:0x00000468; // type:object size:0x14 data:byte +lbl_1_rodata_47C = .rodata:0x0000047C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x4 scope:local data:float +lbl_1_rodata_484 = .rodata:0x00000484; // type:object size:0x4 scope:local data:float +lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48C = .rodata:0x0000048C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_490 = .rodata:0x00000490; // type:object size:0x4 scope:local data:float +lbl_1_rodata_498 = .rodata:0x00000498; // type:object size:0x8 scope:local data:double +lbl_1_rodata_4A0 = .rodata:0x000004A0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_4A8 = .rodata:0x000004A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_4B0 = .rodata:0x000004B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B8 = .rodata:0x000004B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_4C0 = .rodata:0x000004C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_4C8 = .rodata:0x000004C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4CC = .rodata:0x000004CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4D0 = .rodata:0x000004D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_4D8 = .rodata:0x000004D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4DC = .rodata:0x000004DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4E0 = .rodata:0x000004E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4E4 = .rodata:0x000004E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4E8 = .rodata:0x000004E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4EC = .rodata:0x000004EC; // type:object size:0x20 scope:local +lbl_1_rodata_50C = .rodata:0x0000050C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_510 = .rodata:0x00000510; // type:object size:0x60 scope:local +lbl_1_rodata_570 = .rodata:0x00000570; // type:object size:0x4 scope:local data:float +lbl_1_rodata_574 = .rodata:0x00000574; // type:object size:0x4 scope:local data:float +lbl_1_rodata_578 = .rodata:0x00000578; // type:object size:0x4 scope:local data:float +lbl_1_rodata_57C = .rodata:0x0000057C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_580 = .rodata:0x00000580; // type:object size:0x4 scope:local data:float +lbl_1_rodata_584 = .rodata:0x00000584; // type:object size:0x4 scope:local data:float +lbl_1_rodata_588 = .rodata:0x00000588; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58C = .rodata:0x0000058C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_590 = .rodata:0x00000590; // type:object size:0x4 scope:local data:float +lbl_1_rodata_594 = .rodata:0x00000594; // type:object size:0x4 scope:local data:float +lbl_1_rodata_598 = .rodata:0x00000598; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5A0 = .rodata:0x000005A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5A4 = .rodata:0x000005A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5A8 = .rodata:0x000005A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5AC = .rodata:0x000005AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5B0 = .rodata:0x000005B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5B4 = .rodata:0x000005B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5B8 = .rodata:0x000005B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_5C0 = .rodata:0x000005C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_5C8 = .rodata:0x000005C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_5D0 = .rodata:0x000005D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_5D8 = .rodata:0x000005D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5E0 = .rodata:0x000005E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_5E8 = .rodata:0x000005E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_5F0 = .rodata:0x000005F0; // type:object size:0x4 scope:local data:float lbl_1_rodata_5F8 = .rodata:0x000005F8; // type:object size:0x50 -lbl_1_rodata_648 = .rodata:0x00000648; // type:object size:0x50 -lbl_1_rodata_698 = .rodata:0x00000698; // type:object size:0x4 data:float -lbl_1_rodata_69C = .rodata:0x0000069C; // type:object size:0x4 data:float -lbl_1_rodata_6A0 = .rodata:0x000006A0; // type:object size:0x4 data:float -lbl_1_rodata_6A4 = .rodata:0x000006A4; // type:object size:0x4 data:float -lbl_1_rodata_6A8 = .rodata:0x000006A8; // type:object size:0x4 data:float -lbl_1_rodata_6AC = .rodata:0x000006AC; // type:object size:0x4 data:float -lbl_1_rodata_6B0 = .rodata:0x000006B0; // type:object size:0x4 data:float -lbl_1_rodata_6B4 = .rodata:0x000006B4; // type:object size:0x4 data:float -lbl_1_rodata_6B8 = .rodata:0x000006B8; // type:object size:0x8 data:double -lbl_1_rodata_6C0 = .rodata:0x000006C0; // type:object size:0x4 data:float -lbl_1_rodata_6C8 = .rodata:0x000006C8; // type:object size:0x8 data:double -lbl_1_rodata_6D0 = .rodata:0x000006D0; // type:object size:0x4 data:float -lbl_1_rodata_6D4 = .rodata:0x000006D4; // type:object size:0x4 data:float -lbl_1_rodata_6D8 = .rodata:0x000006D8; // type:object size:0x4 data:float -lbl_1_rodata_6DC = .rodata:0x000006DC; // type:object size:0x4 data:float -lbl_1_rodata_6E0 = .rodata:0x000006E0; // type:object size:0x4 data:float -lbl_1_rodata_6E4 = .rodata:0x000006E4; // type:object size:0x4 data:float -lbl_1_rodata_6E8 = .rodata:0x000006E8; // type:object size:0x4 data:float -lbl_1_rodata_6EC = .rodata:0x000006EC; // type:object size:0x4 data:float -lbl_1_rodata_6F0 = .rodata:0x000006F0; // type:object size:0x8 data:double -lbl_1_rodata_6F8 = .rodata:0x000006F8; // type:object size:0x4 data:float -lbl_1_rodata_700 = .rodata:0x00000700; // type:object size:0x8 data:double -lbl_1_rodata_708 = .rodata:0x00000708; // type:object size:0x4 data:float -lbl_1_rodata_710 = .rodata:0x00000710; // type:object size:0x8 data:double -lbl_1_rodata_718 = .rodata:0x00000718; // type:object size:0x4 data:float -lbl_1_rodata_720 = .rodata:0x00000720; // type:object size:0x8 data:double -lbl_1_rodata_728 = .rodata:0x00000728; // type:object size:0x4 data:float -lbl_1_rodata_72C = .rodata:0x0000072C; // type:object size:0x4 data:float -lbl_1_rodata_730 = .rodata:0x00000730; // type:object size:0x4 data:float -lbl_1_rodata_734 = .rodata:0x00000734; // type:object size:0x1 data:byte -lbl_1_rodata_738 = .rodata:0x00000738; // type:object size:0x4 data:float -lbl_1_rodata_73C = .rodata:0x0000073C; // type:object size:0x4 data:float -lbl_1_data_0 = .data:0x00000000; // type:object size:0x1C +lbl_1_rodata_648 = .rodata:0x00000648; // type:object size:0x50 data:float +lbl_1_rodata_698 = .rodata:0x00000698; // type:object size:0x4 scope:local data:float +lbl_1_rodata_69C = .rodata:0x0000069C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6A0 = .rodata:0x000006A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6A4 = .rodata:0x000006A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6A8 = .rodata:0x000006A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6AC = .rodata:0x000006AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6B0 = .rodata:0x000006B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6B4 = .rodata:0x000006B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6B8 = .rodata:0x000006B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_6C0 = .rodata:0x000006C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C8 = .rodata:0x000006C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_6D0 = .rodata:0x000006D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6D4 = .rodata:0x000006D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6D8 = .rodata:0x000006D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6DC = .rodata:0x000006DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6E0 = .rodata:0x000006E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6E4 = .rodata:0x000006E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6E8 = .rodata:0x000006E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6EC = .rodata:0x000006EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6F0 = .rodata:0x000006F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_6F8 = .rodata:0x000006F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_700 = .rodata:0x00000700; // type:object size:0x8 scope:local data:double +lbl_1_rodata_708 = .rodata:0x00000708; // type:object size:0x4 scope:local data:float +lbl_1_rodata_710 = .rodata:0x00000710; // type:object size:0x8 scope:local data:double +lbl_1_rodata_718 = .rodata:0x00000718; // type:object size:0x4 scope:local data:float +lbl_1_rodata_720 = .rodata:0x00000720; // type:object size:0x8 scope:local data:double +lbl_1_rodata_728 = .rodata:0x00000728; // type:object size:0x4 scope:local data:float +lbl_1_rodata_72C = .rodata:0x0000072C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_730 = .rodata:0x00000730; // type:object size:0x4 scope:local data:float +lbl_1_rodata_734 = .rodata:0x00000734; // type:object size:0x4 scope:local data:byte +lbl_1_rodata_738 = .rodata:0x00000738; // type:object size:0x4 scope:local data:float +lbl_1_rodata_73C = .rodata:0x0000073C; // type:object size:0x4 scope:local data:float +lbl_1_data_0 = .data:0x00000000; // type:object size:0x19 scope:local data:string lbl_1_data_1C = .data:0x0000001C; // type:object size:0x14 jumptable_1_data_30 = .data:0x00000030; // type:object size:0x28 scope:local jumptable_1_data_58 = .data:0x00000058; // type:object size:0x28 scope:local jumptable_1_data_80 = .data:0x00000080; // type:object size:0x20 scope:local lbl_1_data_A0 = .data:0x000000A0; // type:object size:0xA8 lbl_1_data_148 = .data:0x00000148; // type:object size:0x14 -lbl_1_data_160 = .data:0x00000160; // type:object size:0x1E data:string -lbl_1_data_17E = .data:0x0000017E; // type:object size:0x1E data:string -lbl_1_data_19C = .data:0x0000019C; // type:object size:0x14 -lbl_1_data_1B0 = .data:0x000001B0; // type:object size:0x1C +lbl_1_data_160 = .data:0x00000160; // type:object size:0x1E scope:local data:string +lbl_1_data_17E = .data:0x0000017E; // type:object size:0x1E scope:local data:string +lbl_1_data_19C = .data:0x0000019C; // type:object size:0x10 scope:local data:string +lbl_1_data_1B0 = .data:0x000001B0; // type:object size:0x1B scope:local data:string lbl_1_data_1CC = .data:0x000001CC; // type:object size:0x2C jumptable_1_data_1F8 = .data:0x000001F8; // type:object size:0x24 scope:local -lbl_1_data_21C = .data:0x0000021C; // type:object size:0x40 -lbl_1_data_25C = .data:0x0000025C; // type:object size:0x18 -lbl_1_data_278 = .data:0x00000278; // type:object size:0x1A data:string +lbl_1_data_21C = .data:0x0000021C; // type:object size:0x40 data:float +lbl_1_data_25C = .data:0x0000025C; // type:object size:0x18 data:float +lbl_1_data_278 = .data:0x00000278; // type:object size:0x1A scope:local data:string lbl_1_data_294 = .data:0x00000294; // type:object size:0x18 -lbl_1_data_2AC = .data:0x000002AC; // type:object size:0x37 data:string +lbl_1_data_2AC = .data:0x000002AC; // type:object size:0x37 scope:local data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte -lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x8 data:4byte -lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x8 data:4byte +lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte +lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 data:4byte lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:float lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x4 data:float lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x4 data:float diff --git a/configure.py b/configure.py index 157ff442..1ac25a5a 100644 --- a/configure.py +++ b/configure.py @@ -1203,12 +1203,12 @@ config.libs = [ "m447dll", # Archaeologuess objects={ Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/m447dll/main.c"), - Object(NonMatching, "REL/m447dll/stage.c"), - Object(NonMatching, "REL/m447dll/camera.c"), - Object(NonMatching, "REL/m447dll/player.c"), - Object(NonMatching, "REL/m447dll/player_col.c"), - Object(NonMatching, "REL/m447dll/block.c"), + Object(Matching, "REL/m447dll/main.c"), + Object(Matching, "REL/m447dll/stage.c"), + Object(Matching, "REL/m447dll/camera.c"), + Object(Matching, "REL/m447dll/player.c"), + Object(Matching, "REL/m447dll/player_col.c"), + Object(Matching, "REL/m447dll/block.c"), }, ), Rel( diff --git a/include/REL/m447dll.h b/include/REL/m447dll.h new file mode 100755 index 00000000..ad069429 --- /dev/null +++ b/include/REL/m447dll.h @@ -0,0 +1,158 @@ +#ifndef M447DLL_H +#define M447DLL_H + +#include "game/animdata.h" +#include "game/process.h" + +typedef struct { + /* 0x00 */ Process* unk00; + /* 0x04 */ Process* unk04; + /* 0x08 */ s32 unk08; + /* 0x0C */ s32 unk0C; + /* 0x10 */ s32 unk10; + /* 0x14 */ s32 unk14; + /* 0x18 */ s32 unk18; + /* 0x1C */ s32 unk1C; + /* 0x20 */ s32 unk20; + /* 0x24 */ s32 unk24; + /* 0x28 */ s32 unk28; + /* 0x2C */ s32 unk2C; + /* 0x30 */ s16 unk30; + /* 0x32 */ s16 unk32; + /* 0x34 */ s16 unk34[25]; + /* 0x66 */ char unk66[0xA]; + /* 0x70 */ s32 unk70; +} UnkM447Struct_00; // Size 0x74 + +typedef struct { + /* 0x00 */ s16 unk00[22]; + /* 0x2C */ s16 unk2C[6]; + /* 0x38 */ s32 unk38; + /* 0x3C */ s32 unk3C; + /* 0x40 */ s32 unk40; + /* 0x44 */ s32 unk44; + /* 0x48 */ float unk48; + /* 0x4C */ float unk4C; + /* 0x50 */ AnimData* unk50; + /* 0x54 */ s32 unk54[5]; + /* 0x68 */ s32 unk68[5]; + /* 0x7C */ Process* unk7C; +} UnkM447Struct_06; // Size 0x80 + +typedef struct { + /* 0x00 */ s32 unk00; + /* 0x04 */ s32 unk04; + /* 0x08 */ s32 unk08; + /* 0x0C */ s32 unk0C; + /* 0x10 */ Vec unk10; + /* 0x1C */ Vec unk1C; + /* 0x28 */ Vec unk28; + /* 0x34 */ float unk34; + /* 0x38 */ float unk38; + /* 0x3C */ float unk3C; + /* 0x40 */ float unk40; + /* 0x44 */ float unk44; + /* 0x48 */ float unk48; + /* 0x4C */ float unk4C; + /* 0x50 */ float unk50; + /* 0x54 */ float unk54; + /* 0x58 */ s16 unk58[23]; + /* 0x86 */ char unk86[2]; + /* 0x88 */ float unk88; + /* 0x8C */ float unk8C; + /* 0x90 */ float unk90; + /* 0x94 */ float unk94; + /* 0x98 */ float unk98; + /* 0x9C */ float unk9C; + /* 0xA0 */ AnimData* unkA0; + /* 0xA4 */ Process* unkA4; + /* 0xA8 */ Vec unkA8; + /* 0xB4 */ float unkB4; + /* 0xB8 */ float unkB8; + /* 0xBC */ float unkBC; + /* 0xC0 */ float unkC0; + /* 0xC4 */ float unkC4; + /* 0xC8 */ float unkC8; +} UnkM447Struct_01; // Size 0xCC + +typedef struct { + /* 0x00 */ s16 unk00; + /* 0x02 */ char unk02[2]; + /* 0x04 */ s32 unk04; + /* 0x08 */ s32 unk08; + /* 0x0C */ s32 unk0C; + /* 0x10 */ s32 unk10; + /* 0x14 */ s32 unk14; + /* 0x18 */ u8 unk18; + /* 0x19 */ u8 unk19; + /* 0x1A */ u8 unk1A; + /* 0x1B */ u8 unk1B; + /* 0x1C */ s32 unk1C; + /* 0x20 */ s16 unk20; + /* 0x22 */ char unk22[2]; + /* 0x24 */ s32 unk24; + /* 0x28 */ Vec unk28; + /* 0x34 */ float unk34; + /* 0x38 */ float unk38; + /* 0x3C */ float unk3C; + /* 0x40 */ float unk40; + /* 0x44 */ float unk44; + /* 0x48 */ float unk48; + /* 0x4C */ float unk4C; + /* 0x50 */ float unk50; + /* 0x54 */ char unk54[0xC]; + /* 0x60 */ s32 unk60; + /* 0x64 */ s32 unk64; + /* 0x68 */ s16 unk68; + /* 0x6A */ s16 unk6A[9]; + /* 0x7C */ s16 unk7C[2]; + /* 0x80 */ char unk80[0x24]; + /* 0xA4 */ s32 unkA4; + /* 0xA8 */ UnkM447Struct_01* unkA8; + /* 0xAC */ Process* unkAC; + /* 0xB0 */ Process* unkB0; + /* 0xB4 */ Process* unkB4; +} UnkM447Struct_04; // Size 0xB8 + +UnkM447Struct_06* fn_1_1D90(void); +void fn_1_1E70(UnkM447Struct_06* arg0); +void fn_1_1EB0(UnkM447Struct_06* arg0, s32 arg1); +BOOL fn_1_1EC0(UnkM447Struct_06* arg0); +void fn_1_1ED4(s32 arg0, Vec* arg1); +void fn_1_1F00(UnkM447Struct_06* arg0, s32 arg1); +s32 fn_1_1F9C(UnkM447Struct_06* arg0); +void fn_1_1FEC(UnkM447Struct_06* arg0, s32 arg1); + +s32 fn_1_3130(void); +void fn_1_32E0(void); +void fn_1_330C(const Vec* arg0, s32 arg1); +void fn_1_33C8(const Vec* arg0, s32 arg1); +void fn_1_3484(float arg0, s32 arg1); +void fn_1_351C(Vec* arg0); +void fn_1_3540(Vec* arg0); + +void fn_1_3F84(void); +UnkM447Struct_04* fn_1_3FC4(s32 arg0); +void fn_1_43CC(UnkM447Struct_04* arg0, s32 arg1); +void fn_1_7A6C(UnkM447Struct_04* arg0); +void fn_1_7AA4(UnkM447Struct_04* arg0, s32 arg1, s32 arg2); + +void fn_1_7B54(Vec* arg0, Vec* arg1, s32 arg2, float arg3); +s32 fn_1_80BC(float* arg0, float* arg1, float* arg2); +s32 fn_1_879C(float* arg0, float* arg1, s32 arg2, s32 arg3); + +UnkM447Struct_01* fn_1_8DF8(void); +void fn_1_8FF4(UnkM447Struct_01* arg0, s32 arg1); +void fn_1_9004(UnkM447Struct_01* arg0, s32 arg1, s32 arg2); +void fn_1_90FC(s32 arg0); +void fn_1_A230(s32 arg0); +s32 fn_1_A240(void); + +extern UnkM447Struct_06* lbl_1_bss_10; +extern UnkM447Struct_00* lbl_1_bss_8; +extern Process* lbl_1_bss_4; +extern UnkM447Struct_04* lbl_1_bss_98[2]; +extern const float lbl_1_rodata_648[20]; +extern UnkM447Struct_01* lbl_1_bss_A4[5]; + +#endif diff --git a/src/REL/m447dll/block.c b/src/REL/m447dll/block.c new file mode 100755 index 00000000..15ce223d --- /dev/null +++ b/src/REL/m447dll/block.c @@ -0,0 +1,458 @@ +#include "REL/m447dll.h" +#include "game/audio.h" +#include "game/hsfanim.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/sprite.h" + +#include "ext_math.h" + +void fn_1_8F7C(void* arg0); +void fn_1_910C(void); +void fn_1_9158(UnkM447Struct_01* arg0); +void fn_1_9320(UnkM447Struct_01* arg0); +void fn_1_9374(UnkM447Struct_01* arg0); +void fn_1_9538(UnkM447Struct_01* arg0); +void fn_1_953C(UnkM447Struct_01* arg0); +void fn_1_9758(UnkM447Struct_01* arg0); +void fn_1_991C(UnkM447Struct_01* arg0); +void fn_1_9BCC(UnkM447Struct_01* arg0); +void fn_1_9CEC(UnkM447Struct_01* arg0); +void fn_1_9EEC(UnkM447Struct_01* arg0); +void fn_1_9F40(ModelData* model, ParticleData* particle, Mtx matrix); + +u32 lbl_1_bss_B8; // Maybe part of another file with fn_1_A230 and fn_1_A240. +UnkM447Struct_01* lbl_1_bss_A4[5]; +s32 lbl_1_bss_A0; + +const s32 lbl_1_rodata_5F8[] = { + DATA_MAKE_NUM(DATADIR_M447, 12), + DATA_MAKE_NUM(DATADIR_M447, 13), + DATA_MAKE_NUM(DATADIR_M447, 10), + DATA_MAKE_NUM(DATADIR_M447, 11), + DATA_MAKE_NUM(DATADIR_M447, 4), + DATA_MAKE_NUM(DATADIR_M447, 5), + DATA_MAKE_NUM(DATADIR_M447, 16), + DATA_MAKE_NUM(DATADIR_M447, 17), + DATA_MAKE_NUM(DATADIR_M447, 8), + DATA_MAKE_NUM(DATADIR_M447, 9), + DATA_MAKE_NUM(DATADIR_M447, 6), + DATA_MAKE_NUM(DATADIR_M447, 7), + DATA_MAKE_NUM(DATADIR_M447, 18), + DATA_MAKE_NUM(DATADIR_M447, 19), + DATA_MAKE_NUM(DATADIR_M447, 20), + DATA_MAKE_NUM(DATADIR_M447, 21), + DATA_MAKE_NUM(DATADIR_M447, 22), + DATA_MAKE_NUM(DATADIR_M447, 23), + DATA_MAKE_NUM(DATADIR_M447, 14), + DATA_MAKE_NUM(DATADIR_M447, 15) +}; + +const float lbl_1_rodata_648[20] = { + 30.0f, 30.0f, 80.0f, 30.0f, + 80.0f, 80.0f, 60.0f, 60.0f, + 80.0f, 80.0f, 30.0f, 30.0f, + 45.0f, 45.0f, 50.0f, 50.0f, + 30.0f, 30.0f, 75.0f, 50.0f +}; + +UnkM447Struct_01* fn_1_8DF8(void) { + UnkM447Struct_01* temp_r3; + + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r3), MEMORY_DEFAULT_NUM); + if (!temp_r3) { + OSReport("M447BlockCreate ERROR...\n"); + return NULL; + } + temp_r3->unk04 = 0; + temp_r3->unk00 = 0; + temp_r3->unk08 = 0; + temp_r3->unk0C = 0; + temp_r3->unk10.x = 0.0f; + temp_r3->unk10.y = 0.0f; + temp_r3->unk10.z = 0.0f; + temp_r3->unk40 = 0.0f; + temp_r3->unk44 = 0.0f; + temp_r3->unk48 = 0.0f; + temp_r3->unk4C = 0.0f; + temp_r3->unk50 = 0.0f; + temp_r3->unk54 = 0.0f; + temp_r3->unk1C.x = 0.0f; + temp_r3->unk1C.y = 0.0f; + temp_r3->unk1C.z = 0.0f; + temp_r3->unk8C = 1.0f; + fn_1_9158(temp_r3); + temp_r3->unkA4 = HuPrcChildCreate(fn_1_910C, 105, 0x3000, 0, lbl_1_bss_4); + temp_r3->unkA4->user_data = temp_r3; + return temp_r3; +} + +void fn_1_8F7C(void* arg0) { + fn_1_8F7C(arg0); + HuMemDirectFree(arg0); +} + +void fn_1_8FF4(UnkM447Struct_01* arg0, s32 arg1) { + arg0->unk04 = arg1; + arg0->unk0C = 0; +} + +void fn_1_9004(UnkM447Struct_01* arg0, s32 arg1, s32 arg2) { + if (lbl_1_bss_A0 != 0) { + arg0->unk00 = arg1 * 2 + (arg2 != 0 ? 0 : 1); + } else { + arg0->unk00 = arg1 * 2 + (arg2 != 0 ? 1 : 0); + } + arg0->unk08 = arg2; + arg0->unk8C = 1.0f; + arg0->unk4C = 1.0f; + arg0->unk50 = 1.0f; + arg0->unk54 = 1.0f; + Hu3DModelAttrSet(arg0->unk58[arg0->unk00], 1); + Hu3DModelAttrSet(arg0->unk58[21], 1); +} + +void fn_1_90FC(s32 arg0) { + lbl_1_bss_A0 = arg0; +} + +void (*lbl_1_data_294[])(UnkM447Struct_01*) = { + fn_1_9538, + fn_1_953C, + fn_1_9758, + fn_1_991C, + fn_1_9BCC, + fn_1_9CEC +}; + +void fn_1_910C(void) { + UnkM447Struct_01* temp_r31; + + temp_r31 = HuPrcCurrentGet()->user_data; + while (TRUE) { + lbl_1_data_294[temp_r31->unk04](temp_r31); + fn_1_9374(temp_r31); + HuPrcVSleep(); + } +} + +void fn_1_9158(UnkM447Struct_01* arg0) { + s32 i; + + for (i = 0; i <= 19; i++) { + arg0->unk58[i] = Hu3DModelCreateFile(lbl_1_rodata_5F8[i]); + Hu3DModelAttrSet(arg0->unk58[i], 2); + Hu3DModelLayerSet(arg0->unk58[i], 7); + } + arg0->unk58[20] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M447, 30)); + Hu3DModelLayerSet(arg0->unk58[20], 7); + arg0->unk58[21] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M447, 25)); + Hu3DModelLayerSet(arg0->unk58[21], 7); + arg0->unkA0 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_M447, 57)); + arg0->unk58[22] = Hu3DParticleCreate(arg0->unkA0, 64); + Hu3DParticleHookSet(arg0->unk58[22], fn_1_9F40); + Hu3DParticleBlendModeSet(arg0->unk58[22], 1); + Hu3DModelLayerSet(arg0->unk58[22], 6); + Hu3DModelAttrSet(arg0->unk58[22], 1); + for (i = 0; i <= 19; i++) { + Hu3DModelAttrSet(arg0->unk58[i], 1); + } + Hu3DModelAttrReset(arg0->unk58[arg0->unk00], 1); + Hu3DModelAttrSet(arg0->unk58[20], 1); + Hu3DModelAttrSet(arg0->unk58[21], 1); + for (i = 0; i <= 19; i++) { + Hu3DModelShadowSet(arg0->unk58[i]); + } +} + +void fn_1_9320(UnkM447Struct_01* arg0) { + s32 i; + + for (i = 0; i < 23; i++) { + Hu3DModelKill(arg0->unk58[i]); + } +} + +void fn_1_9374(UnkM447Struct_01* arg0) { + ModelData* temp_r30; + Mtx sp8; + + temp_r30 = &Hu3DData[arg0->unk58[arg0->unk00]]; + PSMTXIdentity(temp_r30->unk_F0); + PSMTXRotRad(sp8, 'x', MTXDegToRad(arg0->unk1C.x)); + PSMTXConcat(temp_r30->unk_F0, sp8, temp_r30->unk_F0); + PSMTXRotRad(sp8, 'y', MTXDegToRad(arg0->unk1C.y)); + PSMTXConcat(temp_r30->unk_F0, sp8, temp_r30->unk_F0); + PSMTXRotRad(sp8, 'z', MTXDegToRad(arg0->unk1C.z)); + PSMTXConcat(temp_r30->unk_F0, sp8, temp_r30->unk_F0); + Hu3DModelPosSet(arg0->unk58[arg0->unk00], arg0->unk10.x, arg0->unk10.y, arg0->unk10.z); + Hu3DModelPosSet(arg0->unk58[20], arg0->unk10.x, arg0->unk10.y - 100.0f, arg0->unk10.z); + Hu3DModelPosSet(arg0->unk58[21], arg0->unk10.x, arg0->unk10.y, arg0->unk10.z + 120.0f * arg0->unk54); + Hu3DModelRotSet(arg0->unk58[arg0->unk00], arg0->unk40, arg0->unk44, arg0->unk48); + Hu3DModelScaleSet(arg0->unk58[arg0->unk00], arg0->unk4C, arg0->unk50, arg0->unk54); + Hu3DModelScaleSet(arg0->unk58[21], arg0->unk4C, arg0->unk50, arg0->unk54); + Hu3DModelTPLvlSet(arg0->unk58[arg0->unk00], arg0->unk8C); +} + +void fn_1_9538(UnkM447Struct_01* arg0) { +} + +void fn_1_953C(UnkM447Struct_01* arg0) { + float temp_f31; + + switch (arg0->unk0C) { + case 0: + arg0->unk90 = 0.0f; + arg0->unk98 = 0.016666668f; + arg0->unk10.y = -100.0f; + arg0->unk44 = 0.0f; + arg0->unk4C = 0.0f; + arg0->unk50 = 0.0f; + arg0->unk54 = 0.0f; + arg0->unk88 = -50.0f; + Hu3DModelAttrReset(arg0->unk58[arg0->unk00], 1); + arg0->unk0C = 1; + /* fallthrough */ + case 1: + arg0->unk44 += arg0->unk88; + temp_f31 = sind(90.0f * arg0->unk90); + arg0->unk10.y = -100.0f + 500.0f * temp_f31; + arg0->unk4C = arg0->unk90; + arg0->unk50 = arg0->unk90; + arg0->unk54 = arg0->unk90; + arg0->unk8C = temp_f31; + arg0->unk90 += arg0->unk98; + if (arg0->unk90 < 1.0f) { + break; + } + arg0->unk10.y = 400.0f; + arg0->unk4C = 1.0f; + arg0->unk50 = 1.0f; + arg0->unk54 = 1.0f; + arg0->unk8C = 1.0f; + arg0->unk0C = 2; + /* fallthrough */ + case 2: + fn_1_8FF4(arg0, 2); + break; + } +} + +void fn_1_9758(UnkM447Struct_01* arg0) { + float temp_f31; + + switch (arg0->unk0C) { + case 0: + arg0->unk90 = 0.1f * (fn_1_A240() % 10); + arg0->unk98 = 0.011111111f; + arg0->unk0C = 1; + /* fallthrough */ + case 1: + if (arg0->unk88 < -8.0f) { + arg0->unk88 += 0.05f; + } + temp_f31 = sind(180.0f * arg0->unk90); + temp_f31 *= temp_f31; + arg0->unk10.y = 400.0f + temp_f31 * 25.0f; + arg0->unk44 += arg0->unk88; + arg0->unk90 += arg0->unk98; + if (arg0->unk90 < 1.0f) { + break; + } + arg0->unk90 = 0.0f; + break; + case 2: + fn_1_8FF4(arg0, 0); + break; + } +} + +void fn_1_991C(UnkM447Struct_01* arg0) { + float temp_f31; + + switch (arg0->unk0C) { + case 0: + arg0->unk90 = 0.0f; + arg0->unk98 = 0.5f; + arg0->unk94 = 0.0f; + arg0->unk9C = 0.05f; + arg0->unk8C = 1.0f; + arg0->unk10.y = 400.0f; + arg0->unk28 = arg0->unk1C; + arg0->unk34 = 0.0f; + arg0->unk38 = arg0->unk1C.y; + arg0->unk3C = 0.0f; + arg0->unk0C = 1; + /* fallthrough */ + case 1: + temp_f31 = arg0->unk94; + arg0->unk1C.x = arg0->unk28.x + temp_f31 * (arg0->unk34 - arg0->unk28.x); + arg0->unk1C.y = arg0->unk28.y + temp_f31 * (arg0->unk38 - arg0->unk28.y); + arg0->unk1C.z = arg0->unk28.z + temp_f31 * (arg0->unk3C - arg0->unk28.z); + if (arg0->unk94 < 1.0f) { + arg0->unk94 += arg0->unk9C; + if (arg0->unk94 > 1.0f) { + arg0->unk94 = 1.0f; + } + } + temp_f31 = arg0->unk90; + arg0->unk10.y = 400.0 + 50.0f * temp_f31 * sind(90) - 4.9f * temp_f31 * temp_f31; + arg0->unk90 += arg0->unk98; + if (arg0->unk10.y >= lbl_1_rodata_648[arg0->unk00]) { + break; + } + arg0->unk10.y = lbl_1_rodata_648[arg0->unk00]; + HuAudFXPlay(0x785); + fn_1_1FEC(lbl_1_bss_10, 30); + arg0->unk0C = 2; + /* fallthrough */ + case 2: + Hu3DModelAttrReset(arg0->unk58[20], 1); + Hu3DMotionTimeSet(arg0->unk58[20], 0.0f); + fn_1_8FF4(arg0, 4); + break; + } +} + +void fn_1_9BCC(UnkM447Struct_01* arg0) { + switch (arg0->unk0C) { + case 0: + arg0->unk90 = 0.0f; + arg0->unk98 = 0.016666668f; + arg0->unk0C = 1; + /* fallthrough */ + case 1: + arg0->unk8C = 1.0 - sind(90.0f * arg0->unk90); + arg0->unk90 += arg0->unk98; + if (arg0->unk90 < 1.0f) { + break; + } + arg0->unk0C = 2; + /* fallthrough */ + case 2: + Hu3DModelAttrSet(arg0->unk58[arg0->unk00], 1); + fn_1_8FF4(arg0, 0); + break; + } +} + +void fn_1_9CEC(UnkM447Struct_01* arg0) { + float temp_f31; + + switch (arg0->unk0C) { + case 0: + arg0->unk90 = 0.0f; + arg0->unk98 = 0.008333334f; + Hu3DModelAttrReset(arg0->unk58[21], 1); + Hu3DMotionTimeSet(arg0->unk58[21], 0.0f); + Hu3DModelAttrSet(arg0->unk58[21], 0x40000001); + arg0->unkA8 = arg0->unk10; + arg0->unkB4 = 0.0f; + arg0->unkB8 = 200.0f; + arg0->unkBC = -700.0f - arg0->unk10.z / 2; + arg0->unkC0 = 0.0f; + arg0->unkC4 = 400.0f; + arg0->unkC8 = -700.0f; + fn_1_9EEC(arg0); + HuAudFXPlay(0x781); + arg0->unk0C = 1; + /* fallthrough */ + case 1: + temp_f31 = arg0->unk90; + arg0->unk4C = 1.0f - temp_f31; + arg0->unk50 = 1.0f - temp_f31; + arg0->unk54 = 1.0f - temp_f31; + fn_1_7B54(&arg0->unk10, &arg0->unkA8, 3, temp_f31); + arg0->unk90 += arg0->unk98; + if (arg0->unk90 < 1.0f) { + break; + } + arg0->unk0C = 2; + /* fallthrough */ + case 2: + fn_1_1EB0(lbl_1_bss_10, 2); + fn_1_8FF4(arg0, 0); + break; + } +} + +void fn_1_9EEC(UnkM447Struct_01* arg0) { + ModelData* temp_r30; + ParticleData* temp_r31; + + temp_r30 = &Hu3DData[arg0->unk58[22]]; + temp_r31 = temp_r30->unk_120; + temp_r30->attr &= ~1; + temp_r31->unk_00 = 0; + temp_r31->unk_02 = 1; + temp_r31->unk_1C = arg0; +} + +void fn_1_9F40(ModelData* model, ParticleData* particle, Mtx matrix) { + GXColor sp8 = { 0xFF, 0xFF, 0xFF, 0xFF }; + UnkM447Struct_01* temp_r29; + HsfanimStruct01* var_r31; + s32 var_r27; + s32 i; + + if (particle->unk_02 == 0) { + return; + } + temp_r29 = particle->unk_1C; + if (particle->unk_00 == 0) { + particle->unk_00 = 1; + for (i = 0, var_r31 = particle->unk_48; i < particle->unk_30; i++, var_r31++) { + var_r31->unk00_s16 = i * 5; + var_r31->unk02 = 0; + var_r31->unk2C = 0.0f; + var_r31->unk40.r = sp8.r; + var_r31->unk40.g = sp8.g; + var_r31->unk40.b = sp8.b; + var_r31->unk40.a = sp8.a; + } + } + for (i = 0, var_r27 = 0, var_r31 = particle->unk_48; i < particle->unk_30; i++, var_r31++) { + if (var_r31->unk00_s16 > 0 && --var_r31->unk00_s16 > 0) { + continue; + } + if (var_r31->unk02 == 0 && temp_r29->unk04 == 5 && temp_r29->unk10.z > -700.0f) { + var_r31->unk34.x = temp_r29->unk10.x; + var_r31->unk34.y = temp_r29->unk10.y; + var_r31->unk34.z = temp_r29->unk10.z; + var_r31->unk2C = 20.0f; + var_r31->unk02 = 1; + } else if (var_r31->unk02 == 1) { + var_r31->unk34.y -= 1.0f; + var_r31->unk34.z += 3.0f; + var_r31->unk2C = 20.0f + fn_1_A240() % 60; + if (var_r31->unk40.a > 10) { + var_r31->unk40.a -= 4; + } else { + var_r31->unk40.a = 0; + var_r31->unk02 = 2; + } + } else { + var_r27++; + } + } + if (var_r27 == particle->unk_30) { + OSReport("*****************************************************\n"); + OSReport("*****************************************************\n"); + OSReport("*****************************************************\n"); + OSReport("*****************************************************\n"); + OSReport("*****************************************************\n"); + OSReport("*****************************************************\n"); + OSReport("*****************************************************\n"); + OSReport("*****************************************************\n"); + particle->unk_02 = 0; + } +} + +void fn_1_A230(s32 arg0) { + lbl_1_bss_B8 = arg0; +} + +s32 fn_1_A240(void) { + return ((lbl_1_bss_B8 = lbl_1_bss_B8 * 0x41C64E6D + 0x3039) >> 16) % (1 << 15); +} diff --git a/src/REL/m447dll/camera.c b/src/REL/m447dll/camera.c new file mode 100755 index 00000000..25e58b5b --- /dev/null +++ b/src/REL/m447dll/camera.c @@ -0,0 +1,151 @@ +#include "REL/m447dll.h" +#include "game/hsfman.h" +#include "game/pad.h" +#include "game/printfunc.h" +#include "game/process.h" + +#include "ext_math.h" + +typedef struct { + /* 0x00 */ Vec unk00; + /* 0x0C */ Vec unk0C; + /* 0x18 */ float unk18; +} UnkM447Struct_05; // Size 0x1C + +void fn_1_3564(void); +void fn_1_3C7C(void); +void fn_1_3EA8(void); + +Process* lbl_1_bss_90; +UnkM447Struct_05 lbl_1_bss_74; +UnkM447Struct_05 lbl_1_bss_58; +UnkM447Struct_05 lbl_1_bss_3C; +s32 lbl_1_bss_38; +s32 lbl_1_bss_34; +s32 lbl_1_bss_30; +float lbl_1_bss_2C; +float lbl_1_bss_28; +float lbl_1_bss_24; +float lbl_1_bss_20; +float lbl_1_bss_1C; +float lbl_1_bss_18; + +s32 fn_1_3130(void) { + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + Hu3DCameraPerspectiveSet(1, 55.0f, 10.0f, 8000.0f, 1.2f); + lbl_1_bss_74.unk00.x = 0.0f; + lbl_1_bss_74.unk00.y = 400.0f; + lbl_1_bss_74.unk00.z = 0.0f; + lbl_1_bss_74.unk0C.x = 0.0f; + lbl_1_bss_74.unk0C.y = 0.0f; + lbl_1_bss_74.unk0C.z = 0.0f; + lbl_1_bss_74.unk18 = 200.0f; + lbl_1_bss_38 = 0; + lbl_1_bss_34 = 0; + lbl_1_bss_30 = 0; + lbl_1_bss_90 = HuPrcChildCreate(fn_1_3564, 100, 0x2000, 0, lbl_1_bss_4); + return 1; +} + +void fn_1_32E0(void) { + HuPrcKill(lbl_1_bss_90); +} + +void fn_1_330C(const Vec* arg0, s32 arg1) { + lbl_1_bss_3C.unk00 = *arg0; + lbl_1_bss_58.unk00 = lbl_1_bss_74.unk00; + lbl_1_bss_2C = 0.0f; + lbl_1_bss_20 = 1.0f / arg1; + lbl_1_bss_38 = 1; +} + +void fn_1_33C8(const Vec* arg0, s32 arg1) { + lbl_1_bss_3C.unk0C = *arg0; + lbl_1_bss_58.unk0C = lbl_1_bss_74.unk0C; + lbl_1_bss_28 = 0.0f; + lbl_1_bss_1C = 1.0f / arg1; + lbl_1_bss_34 = 1; +} + +void fn_1_3484(float arg0, s32 arg1) { + lbl_1_bss_3C.unk18 = arg0; + lbl_1_bss_58.unk18 = lbl_1_bss_74.unk18; + lbl_1_bss_24 = 0.0f; + lbl_1_bss_18 = 1.0f / arg1; + lbl_1_bss_30 = 1; +} + +void fn_1_351C(Vec* arg0) { + *arg0 = lbl_1_bss_74.unk00; +} + +void fn_1_3540(Vec* arg0) { + lbl_1_bss_74.unk00 = *arg0; +} + +void fn_1_3564(void) { + Vec sp28; + Vec sp1C; + Vec sp10; + float temp_f31; + + while (TRUE) { + if (lbl_1_bss_38 != 0) { + temp_f31 = sind(90.0f * lbl_1_bss_2C); + temp_f31 *= temp_f31; + lbl_1_bss_74.unk00.x = lbl_1_bss_58.unk00.x + temp_f31 * (lbl_1_bss_3C.unk00.x - lbl_1_bss_58.unk00.x); + lbl_1_bss_74.unk00.y = lbl_1_bss_58.unk00.y + temp_f31 * (lbl_1_bss_3C.unk00.y - lbl_1_bss_58.unk00.y); + lbl_1_bss_74.unk00.z = lbl_1_bss_58.unk00.z + temp_f31 * (lbl_1_bss_3C.unk00.z - lbl_1_bss_58.unk00.z); + if ((lbl_1_bss_2C += lbl_1_bss_20) >= 1.0f) { + lbl_1_bss_74.unk00 = lbl_1_bss_3C.unk00; + lbl_1_bss_38 = 0; + } + } + if (lbl_1_bss_34 != 0) { + temp_f31 = sind(90.0f * lbl_1_bss_28); + temp_f31 *= temp_f31; + lbl_1_bss_74.unk0C.x = lbl_1_bss_58.unk0C.x + temp_f31 * (lbl_1_bss_3C.unk0C.x - lbl_1_bss_58.unk0C.x); + lbl_1_bss_74.unk0C.y = lbl_1_bss_58.unk0C.y + temp_f31 * (lbl_1_bss_3C.unk0C.y - lbl_1_bss_58.unk0C.y); + lbl_1_bss_74.unk0C.z = lbl_1_bss_58.unk0C.z + temp_f31 * (lbl_1_bss_3C.unk0C.z - lbl_1_bss_58.unk0C.z); + if ((lbl_1_bss_28 += lbl_1_bss_1C) >= 1.0f) { + lbl_1_bss_74.unk0C = lbl_1_bss_3C.unk0C; + lbl_1_bss_34 = 0; + } + } + if (lbl_1_bss_30 != 0) { + temp_f31 = sind(90.0f * lbl_1_bss_24); + temp_f31 *= temp_f31; + lbl_1_bss_74.unk18 = lbl_1_bss_58.unk18 + temp_f31 * (lbl_1_bss_3C.unk18 - lbl_1_bss_58.unk18); + if ((lbl_1_bss_24 += lbl_1_bss_18) >= 1.0f) { + lbl_1_bss_74.unk18 = lbl_1_bss_3C.unk18; + lbl_1_bss_30 = 0; + } + } + sp28.x = lbl_1_bss_74.unk00.x + sind(lbl_1_bss_74.unk0C.y) * cosd(lbl_1_bss_74.unk0C.x) * lbl_1_bss_74.unk18; + sp28.y = lbl_1_bss_74.unk00.y + -sind(lbl_1_bss_74.unk0C.x) * lbl_1_bss_74.unk18; + sp28.z = lbl_1_bss_74.unk00.z + cosd(lbl_1_bss_74.unk0C.y) * cosd(lbl_1_bss_74.unk0C.x) * lbl_1_bss_74.unk18; + sp10.x = sind(lbl_1_bss_74.unk0C.y) * sind(lbl_1_bss_74.unk0C.x); + sp10.y = cosd(lbl_1_bss_74.unk0C.x); + sp10.z = cosd(lbl_1_bss_74.unk0C.y) * sind(lbl_1_bss_74.unk0C.x); + sp1C = lbl_1_bss_74.unk00; + Hu3DCameraPosSet(1, sp28.x, sp28.y, sp28.z, sp10.x, sp10.y, sp10.z, sp1C.x, sp1C.y, sp1C.z); + HuPrcVSleep(); + } +} + +void fn_1_3C7C(void) { + if (HuPadBtn[0] & 4) { + lbl_1_bss_74.unk00.x += 0.02f * HuPadStkX[0]; + lbl_1_bss_74.unk00.y += 0.02f * HuPadStkY[0]; + lbl_1_bss_74.unk0C.y -= 0.02f * HuPadSubStkX[0]; + lbl_1_bss_74.unk0C.x += 0.02f * HuPadSubStkY[0]; + lbl_1_bss_74.unk18 += 0.02f * HuPadTrigL[0]; + lbl_1_bss_74.unk18 -= 0.02f * HuPadTrigR[0]; + } +} + +void fn_1_3EA8(void) { + print8(32, 132, 1.5f, "LOOKAT : x=%.2f y=%.2f z=%.2f", lbl_1_bss_74.unk00.x, lbl_1_bss_74.unk00.y, lbl_1_bss_74.unk00.z); + print8(32, 148, 1.5f, "ANGLE : x=%.2f y=%.2f z=%.2f", lbl_1_bss_74.unk0C.x, lbl_1_bss_74.unk0C.y, lbl_1_bss_74.unk0C.z); + print8(32, 164, 1.5f, "ZOOM : x=%.2f", lbl_1_bss_74.unk18); +} diff --git a/src/REL/m447dll/main.c b/src/REL/m447dll/main.c new file mode 100755 index 00000000..a8389fa0 --- /dev/null +++ b/src/REL/m447dll/main.c @@ -0,0 +1,713 @@ +#include "REL/m447dll.h" +#include "REL/executor.h" +#include "game/esprite.h" +#include "game/frand.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/memory.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/window.h" +#include "game/wipe.h" + +#include "rel_sqrt_consts.h" + +typedef struct { + /* 0x00 */ s16 unk00; + /* 0x02 */ char unk02[2]; + /* 0x04 */ float unk04; + /* 0x08 */ float unk08; +} UnkM447Struct_03; // Size 0xC + +void fn_1_12C(void); +UnkM447Struct_00* fn_1_1B8(void); +void fn_1_43C(UnkM447Struct_00* arg0); +BOOL fn_1_490(UnkM447Struct_00* arg0); +void fn_1_4A0(UnkM447Struct_00* arg0, s32 arg1); +void fn_1_4B0(void); +void fn_1_544(UnkM447Struct_00* arg0); +void fn_1_7A8(UnkM447Struct_00* arg0); +void fn_1_B5C(UnkM447Struct_00* arg0); +void fn_1_F34(UnkM447Struct_00* arg0); +void fn_1_1068(UnkM447Struct_00* arg0); +void fn_1_1394(UnkM447Struct_00* arg0, s16 arg1, s32 arg2); +s32 fn_1_141C(UnkM447Struct_00* arg0, s16 arg1, s32 arg2, s32 arg3, s32 arg4); +void fn_1_1484(void); +void fn_1_1754(UnkM447Struct_00* arg0); +void fn_1_1830(UnkM447Struct_00* arg0); +void fn_1_1884(UnkM447Struct_00* arg0); +void fn_1_1AFC(UnkM447Struct_00* arg0, s32 arg1, s32 arg2); +void fn_1_1BF8(void); +void fn_1_1CE0(UnkM447Struct_00* arg0); +void fn_1_1D34(UnkM447Struct_00* arg0); + +UnkM447Struct_06* lbl_1_bss_10; +char lbl_1_bss_C_pad[4]; +UnkM447Struct_00* lbl_1_bss_8; +Process* lbl_1_bss_4; +Process* lbl_1_bss_0; + +const s32 lbl_1_rodata_10[] = { + DATA_MAKE_NUM(DATADIR_M447, 53), + DATA_MAKE_NUM(DATADIR_M447, 53), + DATA_MAKE_NUM(DATADIR_M447, 54), + DATA_MAKE_NUM(DATADIR_M447, 54), + DATA_MAKE_NUM(DATADIR_M447, 55), + DATA_MAKE_NUM(DATADIR_M447, 55), + DATA_MAKE_NUM(DATADIR_M447, 55), + DATA_MAKE_NUM(DATADIR_M447, 56), + DATA_MAKE_NUM(DATADIR_M447, 56), + DATA_MAKE_NUM(DATADIR_M447, 56), + DATA_MAKE_NUM(DATADIR_M447, 55), + DATA_MAKE_NUM(DATADIR_M447, 55), + DATA_MAKE_NUM(DATADIR_M447, 55), + DATA_MAKE_NUM(DATADIR_M447, 56), + DATA_MAKE_NUM(DATADIR_M447, 56), + DATA_MAKE_NUM(DATADIR_M447, 56), + DATA_MAKE_NUM(DATADIR_M447, 44), + DATA_MAKE_NUM(DATADIR_M447, 45), + DATA_MAKE_NUM(DATADIR_M447, 46), + DATA_MAKE_NUM(DATADIR_M447, 47), + DATA_MAKE_NUM(DATADIR_M447, 48), + DATA_MAKE_NUM(DATADIR_M447, 49), + DATA_MAKE_NUM(DATADIR_M447, 50), + DATA_MAKE_NUM(DATADIR_M447, 51), + DATA_MAKE_NUM(DATADIR_M447, 52) +}; + +void ObjectSetup(void) { + lbl_1_bss_4 = omInitObjMan(10, 0x2000); + omGameSysInit(lbl_1_bss_4); + HuWinInit(1); + lbl_1_bss_0 = HuPrcChildCreate(fn_1_12C, 1000, 0x2000, 0, lbl_1_bss_4); + lbl_1_bss_8 = fn_1_1B8(); +} + +void fn_1_12C(void) { + while (omSysExitReq == 0) { + HuPrcVSleep(); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + HuAudFadeOut(100); + fn_1_43C(lbl_1_bss_8); + HuPrcVSleep(); + omOvlReturnEx(1, 1); + HuPrcEnd(); +} + +UnkM447Struct_00* fn_1_1B8(void) { + Vec sp2C; + Vec sp20 = { 0.0f, 3000.0f, 1.0f }; + Vec sp14 = { 0.0f, 1.0f, 0.0f }; + Vec sp8 = { 0.0f, 0.0f, 0.0f }; + UnkM447Struct_00* temp_r3; + s32 i; + + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r3), MEMORY_DEFAULT_NUM); + if (!temp_r3) { + OSReport("M447FlowCreate ERROR...\n"); + return NULL; + } + Hu3DShadowCreate(30.0f, 20.0f, 5000.0f); + Hu3DShadowTPLvlSet(0.45f); + Hu3DShadowPosSet(&sp20, &sp14, &sp8); + fn_1_A230(frand()); + temp_r3->unk08 = 0; + fn_1_3130(); + lbl_1_bss_10 = fn_1_1D90(); + sp2C.x = 0.0f; + sp2C.y = -1000.0f; + sp2C.z = 0.0f; + for (i = 0; i < 5; i++) { + lbl_1_bss_A4[i] = fn_1_8DF8(); + lbl_1_bss_A4[i]->unk10 = sp2C; + } + fn_1_3F84(); + for (i = 0; i < 2; i++) { + lbl_1_bss_98[i] = fn_1_3FC4(i); + } + fn_1_1D34(temp_r3); + fn_1_1754(temp_r3); + temp_r3->unk14 = 0; + temp_r3->unk1C = 0; + temp_r3->unk24 = 0; + temp_r3->unk28 = 0; + temp_r3->unk2C = 0; + temp_r3->unk10 = 0; + temp_r3->unk70 = -1; + temp_r3->unk30 = -1; + temp_r3->unk32 = -1; + temp_r3->unk00 = HuPrcChildCreate(fn_1_4B0, 100, 0x4000, 0, lbl_1_bss_4); + temp_r3->unk00->user_data = temp_r3; + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + return temp_r3; +} + +void fn_1_43C(UnkM447Struct_00* arg0) { + fn_1_1830(arg0); + fn_1_1E70(lbl_1_bss_10); + fn_1_32E0(); + HuPrcKill(arg0->unk00); + HuMemDirectFree(arg0); +} + +BOOL fn_1_490(UnkM447Struct_00* arg0) { + return arg0->unk08 == 0; +} + +void fn_1_4A0(UnkM447Struct_00* arg0, s32 arg1) { + arg0->unk14 = arg1; + arg0->unk1C = 0; +} + +void (*lbl_1_data_1C[])(UnkM447Struct_00*) = { + fn_1_544, + fn_1_7A8, + fn_1_B5C, + fn_1_F34, + fn_1_1068 +}; + +void fn_1_4B0(void) { + UnkM447Struct_00* temp_r31; + + temp_r31 = HuPrcCurrentGet()->user_data; + while (omSysExitReq == 0 || !fn_1_490(temp_r31)) { + lbl_1_data_1C[temp_r31->unk14](temp_r31); + HuPrcVSleep(); + } + omSysExitReq = 1; + temp_r31->unk08 = 1; + HuPrcEnd(); +} + +const Vec lbl_1_rodata_B0[2] = { + { 0.0f, 300.0f, 0.0f }, + { -0.12f, 176.0f, 0.0f } +}; + +void fn_1_544(UnkM447Struct_00* arg0) { + s32 i; + + switch (arg0->unk1C) { + case 0: + arg0->unk20 = 0; + arg0->unk1C = 1; + break; + case 1: + WipeStatGet(); + arg0->unk1C = 2; + break; + case 2: + if (arg0->unk20++ >= 60) { + arg0->unk1C = 3; + } + break; + case 3: + fn_1_1EB0(lbl_1_bss_10, 1); + arg0->unk20 = 0; + arg0->unk1C = 4; + break; + case 4: + if (!fn_1_1EC0(lbl_1_bss_10)) { + arg0->unk1C = 5; + } + break; + case 5: + if (lbl_1_bss_98[1]->unk18 == 8) { + arg0->unk70 = HuAudSeqPlay(0x3D); + } + fn_1_3484(860.0f, 60); + fn_1_330C(&lbl_1_rodata_B0[1], 60); + arg0->unk20 = 0; + arg0->unk1C = 6; + break; + case 6: + if (arg0->unk20++ >= 60) { + if (lbl_1_bss_98[1]->unk18 == 8) { + arg0->unk1C = 7; + } else { + arg0->unk1C = 9; + } + } + break; + case 7: + arg0->unk04 = HuPrcChildCreate(fn_1_1484, 100, 0x2000, 0, lbl_1_bss_4); + arg0->unk04->user_data = arg0; + arg0->unk0C = 1; + arg0->unk1C = 8; + break; + case 8: + if (arg0->unk0C != 0) { + break; + } + arg0->unk04 = NULL; + arg0->unk1C = 9; + /* fallthrough */ + case 9: + if (arg0->unk70 != -1) { + HuAudSeqFadeOut(arg0->unk70, 1000); + } + fn_1_3484(1150.0f, 60); + fn_1_330C(&lbl_1_rodata_B0[0], 60); + for (i = 0; i < 2; i++) { + fn_1_43CC(lbl_1_bss_98[i], 6); + } + fn_1_4A0(arg0, 1); + break; + } +} + +void fn_1_7A8(UnkM447Struct_00* arg0) { + Vec sp14; + Vec sp8; + s32 temp_r29; + s32 temp_r28; + s32 i; + + switch (arg0->unk1C) { + case 0: + arg0->unk1C = 1; + /* fallthrough */ + case 1: + fn_1_1EB0(lbl_1_bss_10, 3); + arg0->unk20 = 0; + arg0->unk1C = 2; + /* fallthrough */ + case 2: + if (arg0->unk20++ < 110) { + break; + } + arg0->unk1C = 3; + /* fallthrough */ + case 3: + fn_1_90FC(fn_1_A240() % 10 > 5); + temp_r29 = arg0->unk2C * 2 + fn_1_A240() % 2; + temp_r28 = fn_1_A240() % 5; + for (i = 0; i < 5; i++) { + fn_1_9004(lbl_1_bss_A4[i], temp_r29, temp_r28 == i); + fn_1_1ED4(i, &sp8); + lbl_1_bss_A4[i]->unk10 = sp8; + sp14.x = fn_1_A240() % 360; + sp14.y = 0.0f; + sp14.z = fn_1_A240() % 360; + lbl_1_bss_A4[i]->unk1C = sp14; + fn_1_8FF4(lbl_1_bss_A4[i], 1); + } + arg0->unk20 = 0; + arg0->unk1C = 4; + /* fallthrough */ + case 4: + if (arg0->unk20++ < 60) { + break; + } + for (i = 0; i < 5; i++) { + fn_1_8FF4(lbl_1_bss_A4[i], 2); + } + /* fallthrough */ + arg0->unk1C = 5; + case 5: + fn_1_1EB0(lbl_1_bss_10, 4); + arg0->unk20 = 0; + arg0->unk1C = 6; + /* fallthrough */ + case 6: + if (!fn_1_1EC0(lbl_1_bss_10)) { + if (arg0->unk10 != 0) { + arg0->unk1C = 9; + } else { + arg0->unk1C = 7; + } + } + break; + case 7: + arg0->unk70 = HuAudSeqPlay(0x3E); + arg0->unk30 = MGSeqStartCreate(); + arg0->unk1C = 8; + /* fallthrough */ + case 8: + if (MGSeqStatGet(arg0->unk30) != 0) { + break; + } + arg0->unk10 = 1; + arg0->unk1C = 9; + /* fallthrough */ + case 9: + fn_1_4A0(arg0, 2); + break; + } +} + +void fn_1_B5C(UnkM447Struct_00* arg0) { + s32 temp_r26; + s32 var_r27; + s32 i; + + switch (arg0->unk1C) { + case 0: + fn_1_1884(arg0); + arg0->unk24 = 900; + arg0->unk32 = MGSeqCreate(1, arg0->unk24 / 60, -1, -1); + for (i = 0; i < 2; i++) { + fn_1_43CC(lbl_1_bss_98[i], 1); + lbl_1_bss_98[i]->unk04 = 1; + } + arg0->unk1C = 1; + /* fallthrough */ + case 1: + temp_r26 = fn_1_1F9C(lbl_1_bss_10); + if (arg0->unk24 > 0 && temp_r26 > 0 && --arg0->unk24 % 60 == 0) { + MGSeqParamSet(arg0->unk32, 1, arg0->unk24 / 60); + } + if (arg0->unk24 > 0 && temp_r26 > 0) { + break; + } + arg0->unk1C = 2; + /* fallthrough */ + case 2: + for (i = 0; i < 2; i++) { + lbl_1_bss_98[i]->unk04 = 0; + fn_1_7A6C(lbl_1_bss_98[i]); + } + arg0->unk1C = 3; + break; + case 3: + if (arg0->unk32 != -1) { + MGSeqParamSet(arg0->unk32, 2, -1); + arg0->unk32 = -1; + } + for (i = 0; i < 2; i++) { + if (lbl_1_bss_98[i]->unk24 != 1 && lbl_1_bss_98[i]->unk24 != 0) { + return; + } + } + for (i = 0; i < 5; i++) { + if (lbl_1_bss_A4[i]->unk04 != 0 && lbl_1_bss_A4[i]->unk04 != 2) { + return; + } + } + arg0->unk1C = 4; + /* fallthrough */ + case 4: + for (i = 0; i < 2; i++) { + if (lbl_1_bss_98[i]->unk14 != 0) { + fn_1_1AFC(arg0, i, lbl_1_bss_98[i]->unk1B - 1); + } + } + arg0->unk2C++; + for (i = 0, var_r27 = 0; i < 2; i++) { + if (lbl_1_bss_98[i]->unk1B > var_r27) { + var_r27 = lbl_1_bss_98[i]->unk1B; + } + } + if (var_r27 >= 3 || arg0->unk2C >= 5) { + fn_1_4A0(lbl_1_bss_8, 4); + } else { + fn_1_4A0(lbl_1_bss_8, 3); + } + break; + } +} + +void fn_1_F34(UnkM447Struct_00* arg0) { + s32 i; + + switch (arg0->unk1C) { + case 0: + for (i = 0; i < 2; i++) { + fn_1_43CC(lbl_1_bss_98[i], 6); + } + arg0->unk1C = 1; + /* fallthrough */ + case 1: + for (i = 0; i < 5; i++) { + if (lbl_1_bss_A4[i]->unk04 != 0) { + fn_1_8FF4(lbl_1_bss_A4[i], 4); + } + } + arg0->unk20 = 0; + arg0->unk1C = 2; + /* fallthrough */ + case 2: + if (arg0->unk20++ < 160) { + break; + } + arg0->unk1C = 3; + /* fallthrough */ + case 3: + fn_1_4A0(lbl_1_bss_8, 1); + break; + } +} + +const Vec lbl_1_rodata_D8 = { 0.0f, 150.0f, 0.0f }; +const Vec lbl_1_rodata_E4 = { 6.0f, 0.0f, 0.0f }; + +void fn_1_1068(UnkM447Struct_00* arg0) { + s32 temp_r29; + s32 temp_r28; + s32 i; + + switch (arg0->unk1C) { + case 0: + for (i = 0; i < 5; i++) { + if (lbl_1_bss_A4[i]->unk04 != 0) { + fn_1_8FF4(lbl_1_bss_A4[i], 4); + } + } + arg0->unk1C = 1; + /* fallthrough */ + case 1: + // Bug: HuAudSeqFadeOut takes two arguments. + HuAudSeqFadeOut(arg0->unk70); + arg0->unk30 = MGSeqCreate(3, 1); + arg0->unk1C = 2; + /* fallthrough */ + case 2: + if (MGSeqStatGet(arg0->unk30) != 0) { + break; + } + arg0->unk1C = 3; + /* fallthrough */ + case 3: + for (i = 0; i < 2; i++) { + fn_1_43CC(lbl_1_bss_98[i], 7); + } + fn_1_330C(&lbl_1_rodata_D8, 180); + fn_1_3484(300.0f, 180); + fn_1_33C8(&lbl_1_rodata_E4, 180); + arg0->unk20 = 0; + arg0->unk1C = 4; + /* fallthrough */ + case 4: + if (arg0->unk20++ < 180) { + break; + } + arg0->unk1C = 5; + /* fallthrough */ + case 5: + temp_r29 = lbl_1_bss_98[0]->unk1B; + temp_r28 = lbl_1_bss_98[1]->unk1B; + if (lbl_1_bss_98[1]->unk18 != 8 && temp_r29 == temp_r28) { + fn_1_43CC(lbl_1_bss_98[0], 10); + fn_1_43CC(lbl_1_bss_98[1], 10); + HuAudSStreamPlay(4); + } else if (temp_r29 > temp_r28) { + fn_1_43CC(lbl_1_bss_98[0], 9); + fn_1_43CC(lbl_1_bss_98[1], 10); + GWPlayerCoinWinAdd(0, 10); + HuAudSStreamPlay(1); + } else { + fn_1_43CC(lbl_1_bss_98[0], 10); + fn_1_43CC(lbl_1_bss_98[1], 9); + GWPlayerCoinWinAdd(1, 10); + if (lbl_1_bss_98[1]->unk18 == 8) { + HuAudSStreamPlay(3); + } else { + HuAudSStreamPlay(1); + } + } + arg0->unk20 = 0; + arg0->unk1C = 6; + /* fallthrough */ + case 6: + if (arg0->unk20++ < 210) { + break; + } + arg0->unk1C = 7; + /* fallthrough */ + case 7: + omSysExitReq = 1; + arg0->unk08 = 1; + break; + } +} + +void fn_1_1394(UnkM447Struct_00* arg0, s16 arg1, s32 arg2) { + HuWinComKeyReset(); + if (arg0->unk18 == 2) { + HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, arg2); + } + winData[arg1].active_pad = 1; + HuWinMesWait(arg1); +} + +s32 fn_1_141C(UnkM447Struct_00* arg0, s16 arg1, s32 arg2, s32 arg3, s32 arg4) { + if (arg0->unk18 == 2) { + HuPrcSleep(arg4); + return arg3; + } + return HuWinChoiceGet(arg1, arg2); +} + +const s32 lbl_1_rodata_F4[] = { + MAKE_MESSID(42, 3), + MAKE_MESSID(42, 4), + MAKE_MESSID(42, 5), + MAKE_MESSID(42, 6), + MAKE_MESSID(42, 7), + 0 +}; + +void fn_1_1484(void) { + UnkM447Struct_00* temp_r30; + s16 temp_r3; + s16 var_r29; + s32 var_r28; + u32 temp_r26; + + temp_r30 = HuPrcCurrentGet()->user_data; + temp_r3 = HuWinExCreateStyled(-10000.0f, 40.0f, 280, 120, -1, 1); + HuWinExAnimIn(temp_r3); + HuWinBGTPLvlSet(temp_r3, 0.8f); + HuWinMesSpeedSet(temp_r3, 1); + HuWinMesColSet(temp_r3, 0); + HuWinMesSet(temp_r3, MAKE_MESSID(42, 1)); + fn_1_1394(temp_r30, temp_r3, 60); + if (temp_r30->unk18 < 2) { + HuWinMesColSet(temp_r3, 0); + HuWinMesSet(temp_r3, MAKE_MESSID(42, 2)); + var_r29 = fn_1_141C(temp_r30, temp_r3, 0, 1, 60); + } else { + var_r29 = 1; + } + if (var_r29 == 0) { + var_r28 = 0; + while ((temp_r26 = lbl_1_rodata_F4[var_r28++]) != 0) { + HuWinMesColSet(temp_r3, 0); + HuWinMesSet(temp_r3, temp_r26); + fn_1_1394(temp_r30, temp_r3, 60); + } + HuWinMesColSet(temp_r3, 0); + HuWinMesSet(temp_r3, MAKE_MESSID(42, 8)); + fn_1_1394(temp_r30, temp_r3, 60); + } else { + HuWinMesColSet(temp_r3, 0); + HuWinMesSet(temp_r3, MAKE_MESSID(42, 9)); + fn_1_1394(temp_r30, temp_r3, 60); + } + HuWinExAnimOut(temp_r3); + HuWinExCleanup(temp_r3); + temp_r30->unk0C = 0; + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_1754(UnkM447Struct_00* arg0) { + s32 i; + + for (i = 0; i < 25; i++) { + arg0->unk34[i] = espEntry(lbl_1_rodata_10[i], 0, 0); + espDispOff(arg0->unk34[i]); + espPriSet(arg0->unk34[i], 100); + } + espPriSet(arg0->unk34[7], 99); + espPriSet(arg0->unk34[8], 99); + espPriSet(arg0->unk34[9], 99); + espPriSet(arg0->unk34[13], 99); + espPriSet(arg0->unk34[14], 99); + espPriSet(arg0->unk34[15], 99); +} + +void fn_1_1830(UnkM447Struct_00* arg0) { + s32 i; + + for (i = 0; i < 25; i++) { + espKill(arg0->unk34[i]); + } +} + +void fn_1_1884(UnkM447Struct_00* arg0) { + s16 temp_r28; + s32 sp8; + s32 i; + s32 j; + + espDispOn(arg0->unk34[0]); + espPosSet(arg0->unk34[0], 96.0f, 64.0f); + espDispOn(arg0->unk34[2]); + espPosSet(arg0->unk34[2], 96.0f, 63.0f); + espTPLvlSet(arg0->unk34[2], 0.5f); + espColorSet(arg0->unk34[2], 0, 0, 0); + espDispOn(arg0->unk34[1]); + espPosSet(arg0->unk34[1], 480.0f, 64.0f); + espDispOn(arg0->unk34[3]); + espPosSet(arg0->unk34[3], 480.0f, 63.0f); + espTPLvlSet(arg0->unk34[3], 0.5f); + espColorSet(arg0->unk34[3], 0, 0, 0); + for (i = 0; i < 2; i++) { + temp_r28 = lbl_1_bss_98[i]->unk18 + 16; + espDispOn(arg0->unk34[temp_r28]); + espPosSet(arg0->unk34[temp_r28], i * 384 + 46, 63.0f); + } + for (j = 0; j < 2; j++) { + sp8 = lbl_1_bss_98[j]->unk1B; + for (i = 0; i < 3; i++) { + temp_r28 = i + 4 + j * 6; + espDispOn(arg0->unk34[temp_r28]); + espPosSet(arg0->unk34[temp_r28], j * 384 + 80 + i * 32, 63.0f); + } + } +} + +void fn_1_1AFC(UnkM447Struct_00* arg0, s32 arg1, s32 arg2) { + UnkM447Struct_03* temp_r3; + Process* var_r30; + + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r3), MEMORY_DEFAULT_NUM); + temp_r3->unk00 = arg0->unk34[arg2 + 7 + arg1 * 6]; + espPosSet(temp_r3->unk00, arg1 * 384 + 80 + arg2 * 32, 63.0f); + temp_r3->unk04 = 0.0f; + temp_r3->unk08 = 0.05f; + var_r30 = HuPrcChildCreate(fn_1_1BF8, 100, 0x1000, 0, lbl_1_bss_4); + var_r30->user_data = temp_r3; +} + +void fn_1_1BF8(void) { + float temp_f31; + UnkM447Struct_03* temp_r31; + + temp_r31 = HuPrcCurrentGet()->user_data; + espDispOn(temp_r31->unk00); + while (TRUE) { + if ((temp_r31->unk04 += temp_r31->unk08) > 1.0f) { + temp_r31->unk04 = 1.0f; + break; + } + temp_f31 = 1.0f + 1.5f * (1.0f - temp_r31->unk04); + espScaleSet(temp_r31->unk00, temp_f31, temp_f31); + HuPrcVSleep(); + } + espScaleSet(temp_r31->unk00, 1.0f, 1.0f); + HuAudFXPlay(9); + HuMemDirectFree(temp_r31); + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_1CE0(UnkM447Struct_00* arg0) { + s32 i; + + for (i = 0; i <= 25; i++) { + espDispOff(arg0->unk34[i]); + } +} + +void fn_1_1D34(UnkM447Struct_00* arg0) { + s32 i; + + arg0->unk18 = 0; + for (i = 0; i < 2; i++) { + if (lbl_1_bss_98[i]->unk08 != 0) { + arg0->unk18++; + } + } +} diff --git a/src/REL/m447dll/player.c b/src/REL/m447dll/player.c new file mode 100755 index 00000000..6a311bff --- /dev/null +++ b/src/REL/m447dll/player.c @@ -0,0 +1,1107 @@ +#include "REL/m447dll.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/esprite.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" + +#include "ext_math.h" + +void fn_1_4300(UnkM447Struct_04* arg0); +float fn_1_43DC(UnkM447Struct_04* arg0); +void fn_1_43F8(void); +void fn_1_4444(UnkM447Struct_04* arg0); +void fn_1_44B0(UnkM447Struct_04* arg0); +void fn_1_4590(UnkM447Struct_04* arg0); +void fn_1_4638(UnkM447Struct_04* arg0); +void fn_1_4680(UnkM447Struct_04* arg0); +void fn_1_470C(UnkM447Struct_04* arg0); +void fn_1_4760(UnkM447Struct_04* arg0); +void fn_1_4764(UnkM447Struct_04* arg0); +void fn_1_4C84(UnkM447Struct_04* arg0); +float fn_1_4F7C(float arg0, float arg1, float arg2); +void fn_1_5080(UnkM447Struct_04* arg0); +void fn_1_5298(UnkM447Struct_04* arg0); +void fn_1_5520(UnkM447Struct_04* arg0); +void fn_1_5760(UnkM447Struct_04* arg0); +void fn_1_59D8(UnkM447Struct_04* arg0); +void fn_1_5AF0(UnkM447Struct_04* arg0); +void fn_1_5BD0(UnkM447Struct_04* arg0); +void fn_1_5C78(UnkM447Struct_04* arg0); +void fn_1_671C(UnkM447Struct_04* arg0); +void fn_1_70BC(UnkM447Struct_04* arg0); +void fn_1_717C(UnkM447Struct_04* arg0, s32 arg1, s32 arg2); +void fn_1_71FC(UnkM447Struct_04* arg0, s32 arg1, float arg2, float arg3, s32 arg4); +void fn_1_72A8(UnkM447Struct_04* arg0); +void fn_1_7688(UnkM447Struct_04* arg0); +void fn_1_78A8(UnkM447Struct_04* arg0); +s32 fn_1_7984(UnkM447Struct_04* arg0); +void fn_1_7A34(UnkM447Struct_04* arg0); + +UnkM447Struct_04* lbl_1_bss_98[2]; + +const s32 lbl_1_rodata_2A0[][9] = { + { + DATA_MAKE_NUM(DATADIR_MARIOMOT, 0), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 2), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 3), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 113), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 31), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 28), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 72), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 23), + DATA_MAKE_NUM(DATADIR_MARIOMOT, 24) + }, + { + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 0), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 2), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 3), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 113), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 31), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 28), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 72), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 23), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 24) + }, + { + DATA_MAKE_NUM(DATADIR_PEACHMOT, 0), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 2), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 3), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 113), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 31), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 28), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 72), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 23), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 24) + }, + { + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 0), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 2), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 3), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 113), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 31), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 28), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 72), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 23), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 24) + }, + { + DATA_MAKE_NUM(DATADIR_WARIOMOT, 0), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 2), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 3), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 113), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 31), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 28), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 72), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 23), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 24) + }, + { + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 0), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 2), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 3), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 113), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 31), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 28), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 72), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 23), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 24) + }, + { + DATA_MAKE_NUM(DATADIR_DAISYMOT, 0), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 2), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 3), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 113), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 31), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 28), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 72), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 23), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 24) + }, + { + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 0), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 2), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 3), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 113), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 31), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 28), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 72), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 23), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 24) + }, + { + DATA_MAKE_NUM(DATADIR_M447, 32), + DATA_MAKE_NUM(DATADIR_M447, 33), + DATA_MAKE_NUM(DATADIR_M447, 34), + DATA_MAKE_NUM(DATADIR_M447, 41), + DATA_MAKE_NUM(DATADIR_M447, 39), + DATA_MAKE_NUM(DATADIR_M447, 38), + DATA_MAKE_NUM(DATADIR_M447, 37), + DATA_MAKE_NUM(DATADIR_M447, 36), + DATA_MAKE_NUM(DATADIR_M447, 40) + } +}; + +const float lbl_1_rodata_3E4[] = { + 150.0f, 170.0f, 188.0f, + 169.0f, 164.0f, 140.0f, + 180.0f, 145.0f, 150.0f +}; + +const float lbl_1_rodata_408[][6] = { + { -150.0f, 0.0f, 350.0f, 0.0f, 90.0f, 0.0f }, + { 150.0f, 0.0f, 350.0f, 0.0f, -90.0f, 0.0f }, + { -150.0f, 0.0f, -200.0f, 0.0f, 90.0f, 0.0f }, + { 150.0f, 0.0f, -200.0f, 0.0f, -90.0f, 0.0f } +}; + +const u8 lbl_1_rodata_468[][5] = { + { 5, 6, 7, 8, 9 }, + { 4, 5, 6, 7, 8 }, + { 3, 4, 5, 6, 7 }, + { 2, 3, 4, 5, 6 } +}; + +void fn_1_3F84(void) { + s32 i; + + for (i = 0; i < 2; i++) { + lbl_1_bss_98[i] = NULL; + } +} + +UnkM447Struct_04* fn_1_3FC4(s32 arg0) { + UnkM447Struct_04* temp_r3; + s16 var_r28; + s16 var_r27; + s32 i; + + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r3), MEMORY_DEFAULT_NUM); + if (!temp_r3) { + OSReport("M447PlayerCreate ERROR...\n"); + return NULL; + } + temp_r3->unk00 = arg0; + temp_r3->unk19 = GWPlayerCfg[arg0].diff; + temp_r3->unk08 = GWPlayerCfg[arg0].iscom; + if (temp_r3->unk08 != 0) { + var_r28 = 4; + } else { + var_r28 = GWPlayerCfg[arg0].pad_idx; + } + temp_r3->unk1A = var_r28; + temp_r3->unk1C = (GWPlayerCfg[arg0].character == 10); + if (temp_r3->unk1C != 0) { + var_r27 = 8; + } else { + var_r27 = GWPlayerCfg[arg0].character; + } + temp_r3->unk18 = var_r27; + temp_r3->unk24 = 0; + temp_r3->unk20 = 0; + temp_r3->unk1B = 0; + temp_r3->unk28.x = lbl_1_rodata_408[arg0][0]; + temp_r3->unk28.y = lbl_1_rodata_408[arg0][1]; + temp_r3->unk28.z = lbl_1_rodata_408[arg0][2]; + temp_r3->unk34 = lbl_1_rodata_408[arg0][3]; + temp_r3->unk38 = lbl_1_rodata_408[arg0][4]; + temp_r3->unk3C = lbl_1_rodata_408[arg0][5]; + temp_r3->unk44 = 0.0f; + temp_r3->unk48 = 0.0f; + temp_r3->unk4C = 0.0f; + temp_r3->unk50 = 50.0f; + temp_r3->unk04 = 0; + temp_r3->unkB0 = NULL; + temp_r3->unkB4 = NULL; + fn_1_4444(temp_r3); + Hu3DModelLayerSet(temp_r3->unk68, 6); + fn_1_44B0(temp_r3); + fn_1_4590(temp_r3); + fn_1_717C(temp_r3, 0, 0x40000001); + if (temp_r3->unk1C == 0) { + CharModelMotionDataClose(temp_r3->unk18); + } + if (temp_r3->unk1C != 0) { + temp_r3->unkB0 = (Process*) CharModelEffectNpcInit(temp_r3->unk68, temp_r3->unk6A[2], 1, 10); + temp_r3->unkB4 = (Process*) CharModelEffectNpcInit(temp_r3->unk68, temp_r3->unk6A[1], 0, 10); + } + CharModelLayerSetAll(2); + temp_r3->unkAC = HuPrcChildCreate(fn_1_43F8, 102, 0x3000, 0, lbl_1_bss_4); + temp_r3->unkAC->user_data = temp_r3; + for (i = 0; i < 2; i++) { + if (!lbl_1_bss_98[i]) { + lbl_1_bss_98[i] = temp_r3; + break; + } + } + return temp_r3; +} + +void fn_1_4300(UnkM447Struct_04* arg0) { + s32 i; + + if (arg0->unkB0) { + HuPrcKill(arg0->unkB0); + } + if (arg0->unkB4) { + HuPrcKill(arg0->unkB4); + } + fn_1_470C(arg0); + fn_1_4680(arg0); + fn_1_4638(arg0); + HuPrcKill(arg0->unkAC); + for (i = 0; i < 2; i++) { + if (lbl_1_bss_98[i] == arg0) { + lbl_1_bss_98[i] = NULL; + break; + } + } + HuMemDirectFree(arg0); +} + +void fn_1_43CC(UnkM447Struct_04* arg0, s32 arg1) { + arg0->unk24 = arg1; + arg0->unk20 = 0; +} + +float fn_1_43DC(UnkM447Struct_04* arg0) { + return lbl_1_rodata_3E4[arg0->unk18]; +} + +void (*lbl_1_data_1CC[])(UnkM447Struct_04*) = { + fn_1_4760, + fn_1_4764, + fn_1_5080, + fn_1_5298, + fn_1_5520, + fn_1_5760, + fn_1_5C78, + fn_1_671C, + fn_1_59D8, + fn_1_5AF0, + fn_1_5BD0 +}; + +void fn_1_43F8(void) { + UnkM447Struct_04* temp_r31; + + temp_r31 = HuPrcCurrentGet()->user_data; + while (TRUE) { + lbl_1_data_1CC[temp_r31->unk24](temp_r31); + fn_1_70BC(temp_r31); + HuPrcVSleep(); + } +} + +void fn_1_4444(UnkM447Struct_04* arg0) { + if (arg0->unk1C != 0) { + arg0->unk68 = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M447, 31)); + } else { + arg0->unk68 = CharModelCreate(arg0->unk18, 2); + } + Hu3DModelShadowSet(arg0->unk68); +} + +void fn_1_44B0(UnkM447Struct_04* arg0) { + s32 i; + + if (arg0->unk1C != 0) { + for (i = 0; i < 9; i++) { + arg0->unk6A[i] = Hu3DJointMotionFile(arg0->unk68, lbl_1_rodata_2A0[arg0->unk18][i]); + } + } else { + for (i = 0; i < 9; i++) { + arg0->unk6A[i] = CharModelMotionCreate(arg0->unk18, lbl_1_rodata_2A0[arg0->unk18][i]); + } + } +} + +void fn_1_4590(UnkM447Struct_04* arg0) { + arg0->unk7C[0] = espEntry(DATA_MAKE_NUM(DATADIR_M447, 42), 0, 0); + espPriSet(arg0->unk7C[0], arg0->unk00 * 10); + arg0->unk7C[1] = espEntry(DATA_MAKE_NUM(DATADIR_M447, 43), 0, 0); + espPriSet(arg0->unk7C[1], arg0->unk00 * 10 + 1); + espDispOff(arg0->unk7C[0]); + espDispOff(arg0->unk7C[1]); + espTPLvlSet(arg0->unk7C[1], 0.8f); +} + +void fn_1_4638(UnkM447Struct_04* arg0) { + if (arg0->unk1C != 0) { + Hu3DModelKill(arg0->unk68); + } else { + CharModelKill(arg0->unk18); + } +} + +void fn_1_4680(UnkM447Struct_04* arg0) { + s32 i; + + if (arg0->unk1C != 0) { + for (i = 0; i < 9; i++) { + Hu3DMotionKill(arg0->unk6A[i]); + } + } else { + for (i = 0; i < 9; i++) { + CharModelMotionKill(arg0->unk18, arg0->unk6A[i]); + } + } +} + +void fn_1_470C(UnkM447Struct_04* arg0) { + s32 i; + + for (i = 0; i < 2; i++) { + espKill(arg0->unk7C[i]); + } +} + +void fn_1_4760(UnkM447Struct_04* arg0) { +} + +void fn_1_4764(UnkM447Struct_04* arg0) { + Vec sp8; + float temp_f31; + s32 var_r29; + s32 var_r28; + s32 i; + + switch (arg0->unk20) { + case 0: + arg0->unk0C = 0; + arg0->unk10 = 0; + arg0->unk28.y = 0.0f; + arg0->unk20 = 1; + arg0->unk14 = 0; + /* fallthrough */ + case 1: + if (arg0->unk04 != 0) { + if (arg0->unk08 != 0) { + if (arg0->unk0C == 0 && arg0->unk10 == 0) { + arg0->unk44 = 0.0f; + arg0->unk48 = 0.0f; + arg0->unk4C = 0.0f; + if (fn_1_A240() % lbl_1_rodata_468[arg0->unk19][lbl_1_bss_8->unk2C] == 0) { + var_r29 = 5; + for (i = 0; i < 5; i++) { + if (lbl_1_bss_10->unk54[i] == 0 && lbl_1_bss_A4[i]->unk08 != 0) { + var_r29 = i; + break; + } + } + } else { + for (i = 0; i < 10; i++) { + var_r29 = fn_1_A240() % 5; + if (lbl_1_bss_10->unk54[var_r29] == 0) { + break; + } + } + if (i == 10) { + var_r29 = 5; + } + } + if (var_r29 < 5) { + fn_1_1ED4(var_r29, &sp8); + temp_f31 = 10.0f - 0.1f * (fn_1_A240() % 10); + arg0->unk44 = (sp8.x - arg0->unk28.x) / temp_f31; + arg0->unk4C = (sp8.z - arg0->unk28.z) / temp_f31; + arg0->unk48 = 0.0f; + arg0->unk64 = fn_1_A240() % 20 + 10; + arg0->unk0C = 1; + } + } + } else { + arg0->unk44 = (float) HuPadStkX[arg0->unk1A] / 4; + arg0->unk4C = -(float) HuPadStkY[arg0->unk1A] / 4; + } + var_r28 = 0; + var_r29 = fn_1_7984(arg0); + if (var_r29 != 5) { + if (lbl_1_bss_10->unk68[var_r29] == 0) { + fn_1_7A34(arg0); + if (arg0->unk08 != 0) { + arg0->unk10 = 1; + arg0->unk44 = 0.0f; + arg0->unk48 = 0.0f; + arg0->unk4C = 0.0f; + if (arg0->unk64-- <= 0) { + var_r28 = 1; + } + } else if (HuPadBtnDown[arg0->unk1A] & 0x100) { + var_r28 = 1; + } + if (var_r28 != 0) { + arg0->unk44 = 0.0f; + arg0->unk4C = 0.0f; + lbl_1_bss_10->unk68[var_r29] = 1; + fn_1_43CC(arg0, 2); + arg0->unk10 = 0; + } + } + } else { + if (arg0->unk10 != 0) { + arg0->unk10 = 0; + arg0->unk0C = 0; + } + fn_1_7A6C(arg0); + } + } else { + arg0->unk44 = 0.0f; + arg0->unk48 = 0.0f; + arg0->unk4C = 0.0f; + } + fn_1_4C84(arg0); + break; + } +} + +void fn_1_4C84(UnkM447Struct_04* arg0) { + s16 var_r30; + + var_r30 = 0; + arg0->unk40 = sqrtf(arg0->unk44 * arg0->unk44 + arg0->unk4C * arg0->unk4C); + if (0.5f <= arg0->unk40) { + if (10.0f <= arg0->unk40) { + arg0->unk44 /= arg0->unk40; + arg0->unk4C /= arg0->unk40; + arg0->unk40 = 10.0f; + arg0->unk44 = arg0->unk44 * 10.0f; + arg0->unk4C = arg0->unk4C * 10.0f; + } + arg0->unk38 = fn_1_4F7C(arg0->unk38, atan2d(arg0->unk44, arg0->unk4C), 0.4f); + if (8.0f <= arg0->unk40) { + var_r30 = 2; + } else { + var_r30 = 1; + } + } + arg0->unk28.x += arg0->unk44; + arg0->unk28.z += arg0->unk4C; + switch (arg0->unk24) { + case 1: + fn_1_72A8(arg0); + fn_1_78A8(arg0); + fn_1_7688(arg0); + break; + case 6: + case 7: + fn_1_78A8(arg0); + fn_1_7688(arg0); + break; + } + if (var_r30 >= 0 && arg0->unkA4 != var_r30) { + fn_1_71FC(arg0, var_r30, 0.0f, 8.0f, 0x40000001); + } +} + +float fn_1_4F7C(float arg0, float arg1, float arg2) { + float var_f31; + float var_f30; + + var_f31 = fmod(arg1 - arg0, 360.0); + if (0.0f > var_f31) { + var_f31 += 360.0f; + } + if (180.0f < var_f31) { + var_f31 -= 360.0f; + } + var_f30 = fmod(arg0 + var_f31 * arg2, 360.0); + if (0.0f > var_f30) { + var_f30 += 360.0f; + } + return var_f30; +} + +void fn_1_5080(UnkM447Struct_04* arg0) { + Vec sp14; + Vec sp8; + s32 var_r30; + + switch (arg0->unk20) { + case 0: + fn_1_7A6C(arg0); + var_r30 = fn_1_7984(arg0); + fn_1_1ED4(var_r30, &sp14); + PSVECSubtract(&sp14, &arg0->unk28, &sp8); + arg0->unk38 = fn_1_4F7C(arg0->unk38, atan2d(sp8.x, sp8.z), 1.0f); + fn_1_71FC(arg0, 3, 0.0f, 8.0f, 0); + arg0->unk20 = 1; + /* fallthrough */ + case 1: + if (!Hu3DMotionEndCheck(arg0->unk68)) { + break; + } + arg0->unk20 = 2; + /* fallthrough */ + case 2: + fn_1_43CC(arg0, 3); + break; + } +} + +void fn_1_5298(UnkM447Struct_04* arg0) { + Vec sp8; + s32 temp_r29; + UnkM447Struct_01* temp_r28; + s32 i; + + switch (arg0->unk20) { + case 0: + temp_r29 = fn_1_7984(arg0); + fn_1_717C(arg0, 0, 0x40000001); + fn_1_1ED4(temp_r29, &sp8); + arg0->unk28.x = sp8.x; + arg0->unk28.z = sp8.z; + arg0->unk28.y = 30.0f; + fn_1_1F00(lbl_1_bss_10, temp_r29); + HuAudFXPlay(0x784); + arg0->unk60 = 0; + arg0->unk20 = 1; + /* fallthrough */ + case 1: + arg0->unk28.y -= 1.0f; + if (arg0->unk60++ >= 30) { + arg0->unk28.y = 2.0f; + arg0->unk20 = 2; + temp_r29 = fn_1_7984(arg0); + arg0->unkA8 = lbl_1_bss_A4[temp_r29]; + if (arg0->unkA8->unk08 != 0) { + fn_1_8FF4(arg0->unkA8, 5); + for (i = 0; i < 5; i++) { + temp_r28 = lbl_1_bss_A4[i]; + if (temp_r28 != arg0->unkA8 && lbl_1_bss_10->unk68[i] == 0) { + fn_1_1F00(lbl_1_bss_10, i); + if (temp_r28->unk04 == 2) { + fn_1_8FF4(temp_r28, 4); + } + } + } + for (i = 0; i < 2; i++) { + if (lbl_1_bss_98[i] != arg0) { + lbl_1_bss_98[i]->unk04 = 0; + } + } + arg0->unk1B++; + arg0->unk14 = 1; + fn_1_43CC(arg0, 5); + } else { + fn_1_8FF4(arg0->unkA8, 3); + fn_1_43CC(arg0, 4); + } + } + break; + case 2: + fn_1_43CC(arg0, 1); + break; + } +} + +const s32 lbl_1_rodata_4EC[] = { + 0x0000012A, + 0x0000016A, + 0x000001AA, + 0x000001EA, + 0x0000022A, + 0x0000026A, + 0x000002AA, + 0x000002EA +}; + +void fn_1_5520(UnkM447Struct_04* arg0) { + Vec sp8; + float var_f31; + float var_f30; + + switch (arg0->unk20) { + case 0: + fn_1_71FC(arg0, 5, 0.0f, 8.0f, 0); + arg0->unk60 = 0; + arg0->unk20 = 1; + /* fallthrough */ + case 1: + var_f30 = lbl_1_rodata_3E4[arg0->unk18]; + var_f31 = var_f30; // inline? + sp8 = arg0->unkA8->unk10; + if (var_f31 + lbl_1_rodata_648[arg0->unkA8->unk00] + 120.0f < sp8.y) { + break; + } + arg0->unk20 = 2; + /* fallthrough */ + case 2: + fn_1_717C(arg0, 4, 0); + arg0->unk60 = 0; + arg0->unk20 = 3; + fn_1_7AA4(arg0, 1, 60); + if (arg0->unk18 == 8) { + HuAudFXPlay(0x42); + } else { + HuAudFXPlay(lbl_1_rodata_4EC[arg0->unk18]); + } + /* fallthrough */ + case 3: + if (arg0->unk60++ < 40) { + break; + } + arg0->unk60 = 0; + arg0->unk20 = 4; + /* fallthrough */ + case 4: + Hu3DModelAttrSet(arg0->unk68, 0x40000002); + arg0->unk60 = 0; + arg0->unk20 = 5; + /* fallthrough */ + case 5: + if (arg0->unk60++ < 20) { + break; + } + arg0->unk20 = 6; + /* fallthrough */ + case 6: + Hu3DModelAttrReset(arg0->unk68, 0x40000002); + Hu3DModelAttrReset(arg0->unk68, 0x40000001); + arg0->unk60 = 0; + arg0->unk20 = 7; + /* fallthrough */ + case 7: + if (arg0->unk60++ < 40) { + break; + } + arg0->unk20 = 8; + case 8: + /* fallthrough */ + fn_1_43CC(arg0, 1); + break; + } +} + +void fn_1_5760(UnkM447Struct_04* arg0) { + Vec sp14; + Vec sp8; + s32 var_r30; + + switch (arg0->unk20) { + case 0: + Hu3DModelAttrReset(arg0->unk68, 0x40000001); + fn_1_71FC(arg0, 5, 0.0f, 8.0f, 0); + arg0->unk60 = 0; + arg0->unk20 = 1; + /* fallthrough */ + case 1: + var_r30 = fn_1_7984(arg0); + sp14 = lbl_1_bss_A4[var_r30]->unk10; + PSVECSubtract(&sp14, &arg0->unk28, &sp8); + arg0->unk38 = fn_1_4F7C(arg0->unk38, atan2d(sp8.x, sp8.z), 0.1f); + if (arg0->unk60++ < 30) { + break; + } + arg0->unk20 = 2; + case 2: + fn_1_71FC(arg0, 0, 0.0f, 8.0f, 0x40000001); + fn_1_43CC(arg0, 8); + break; + } +} + +const s32 lbl_1_rodata_510[] = { + 0x00000122, + 0x00000162, + 0x000001A2, + 0x000001E2, + 0x00000222, + 0x00000262, + 0x000002A2, + 0x000002E2, + 0x00000124, + 0x00000164, + 0x000001A4, + 0x000001E4, + 0x00000224, + 0x00000264, + 0x000002A4, + 0x000002E4, + 0x00000121, + 0x00000161, + 0x000001A1, + 0x000001E1, + 0x00000221, + 0x00000261, + 0x000002A1, + 0x000002E1 +}; + +void fn_1_59D8(UnkM447Struct_04* arg0) { + switch (arg0->unk20) { + case 0: + if (arg0->unk18 == 8) { + HuAudFXPlay(0x40); + } else { + HuAudFXPlay(lbl_1_rodata_510[arg0->unk18]); + } + fn_1_71FC(arg0, 6, 0.0f, 8.0f, 0); + arg0->unk20 = 1; + /* fallthrough */ + case 1: + if (!Hu3DMotionEndCheck(arg0->unk68)) { + break; + } + arg0->unk20 = 2; + /* fallthrough */ + case 2: + fn_1_71FC(arg0, 0, 0.0f, 8.0f, 0x40000001); + fn_1_43CC(arg0, 0); + fn_1_7AA4(arg0, 0, 60); + break; + } +} + +void fn_1_5AF0(UnkM447Struct_04* arg0) { + s32 var_r30; + + switch (arg0->unk20) { + case 0: + if (arg0->unk1C != 0) { + HuAudFXPlay(0x40); + } + if (arg0->unk1C != 0) { + var_r30 = 0x40000001; + } else { + var_r30 = 0; + } + fn_1_71FC(arg0, 7, 0.0f, 8.0f, var_r30); + arg0->unk20 = 1; + /* fallthrough */ + case 1: + if (!Hu3DMotionEndCheck(arg0->unk68)) { + break; + } + arg0->unk20 = 2; + /* fallthrough */ + case 2: + fn_1_43CC(arg0, 0); + break; + } +} + +void fn_1_5BD0(UnkM447Struct_04* arg0) { + switch (arg0->unk20) { + case 0: + fn_1_71FC(arg0, 8, 0.0f, 8.0f, 0); + arg0->unk20 = 1; + /* fallthrough */ + case 1: + if (!Hu3DMotionEndCheck(arg0->unk68)) { + break; + } + arg0->unk20 = 2; + /* fallthrough */ + case 2: + fn_1_43CC(arg0, 0); + break; + } +} + +void fn_1_5C78(UnkM447Struct_04* arg0) { + float temp_f22; + float temp_f21; + float temp_f25; + + switch (arg0->unk20) { + case 0: + fn_1_7A6C(arg0); + temp_f22 = arg0->unk28.x - lbl_1_rodata_408[arg0->unk00][0]; + temp_f21 = arg0->unk28.z - lbl_1_rodata_408[arg0->unk00][2] - 25.0f; + if (ABS(temp_f22) < 5.0f && ABS(temp_f21) < 5.0f && 180.0f == arg0->unk38) { + arg0->unk20 = 3; + } else { + arg0->unk20 = 1; + } + /* fallthrough */ + case 1: + temp_f25 = 8.0f; + arg0->unk44 = (lbl_1_rodata_408[arg0->unk00][0] - arg0->unk28.x) / temp_f25; + arg0->unk4C = (lbl_1_rodata_408[arg0->unk00][2] - arg0->unk28.z) / temp_f25; + arg0->unk48 = 0.0f; + if (!(arg0->unk44 > -0.1f && arg0->unk44 < 0.1f && arg0->unk4C > -0.1f && arg0->unk4C < 0.1f)) { + fn_1_4C84(arg0); + break; + } + arg0->unk20 = 2; + /* fallthrough */ + case 2: + temp_f25 = 8.0f; + arg0->unk44 = (lbl_1_rodata_408[arg0->unk00][0] - arg0->unk28.x) / temp_f25; + arg0->unk4C = (lbl_1_rodata_408[arg0->unk00][2] - 25.0f - arg0->unk28.z) / temp_f25; + arg0->unk48 = 0.0f; + if (!(arg0->unk44 > -0.1f && arg0->unk44 < 0.1f && arg0->unk4C > -0.1f && arg0->unk4C < 0.1f)) { + fn_1_4C84(arg0); + break; + } + arg0->unk20 = 3; + /* fallthrough */ + case 3: + fn_1_43CC(arg0, 1); + break; + } +} + +void fn_1_671C(UnkM447Struct_04* arg0) { + float var_f25; + + switch (arg0->unk20) { + case 0: + fn_1_7A6C(arg0); + arg0->unk20 = 1; + /* fallthrough */ + case 1: + var_f25 = 8.0f; + arg0->unk44 = (lbl_1_rodata_408[arg0->unk00][12] - arg0->unk28.x) / var_f25; + arg0->unk4C = (lbl_1_rodata_408[arg0->unk00][14] - 25.0f - arg0->unk28.z) / var_f25; + arg0->unk48 = 0.0f; + fn_1_4C84(arg0); + if (!(arg0->unk44 > -0.1f && arg0->unk44 < 0.1f && arg0->unk4C > -0.1f && arg0->unk4C < 0.1f)) { + break; + } + arg0->unk20 = 2; + /* fallthrough */ + case 2: + var_f25 = 8.0f; + arg0->unk44 = (lbl_1_rodata_408[arg0->unk00][12] - arg0->unk28.x) / var_f25; + arg0->unk4C = (lbl_1_rodata_408[arg0->unk00][14] - arg0->unk28.z) / var_f25; + arg0->unk48 = 0.0f; + fn_1_4C84(arg0); + if (!(arg0->unk44 > -0.1f && arg0->unk44 < 0.1f && arg0->unk4C > -0.1f && arg0->unk4C < 0.1f)) { + break; + } + arg0->unk20 = 3; + /* fallthrough */ + case 3: + fn_1_43CC(arg0, 1); + break; + } +} + +void fn_1_70BC(UnkM447Struct_04* arg0) { + Vec sp14; + Vec sp8; + + Hu3DModelPosSet(arg0->unk68, arg0->unk28.x, arg0->unk28.y, arg0->unk28.z); + Hu3DModelRotSet(arg0->unk68, arg0->unk34, arg0->unk38, arg0->unk3C); + sp14 = arg0->unk28; + sp14.y += 300.0f; + Hu3D3Dto2D(&sp14, 1, &sp8); + espPosSet(arg0->unk7C[1], sp8.x, sp8.y + 3.0f); + espPosSet(arg0->unk7C[0], sp8.x, sp8.y); +} + +void fn_1_717C(UnkM447Struct_04* arg0, s32 arg1, s32 arg2) { + if (arg0->unk1C != 0) { + Hu3DMotionSet(arg0->unk68, arg0->unk6A[arg1]); + } else { + CharModelMotionSet(arg0->unk18, arg0->unk6A[arg1]); + } + Hu3DModelAttrSet(arg0->unk68, arg2); + arg0->unkA4 = arg1; +} + +void fn_1_71FC(UnkM447Struct_04* arg0, s32 arg1, float arg2, float arg3, s32 arg4) { + if (arg0->unk1C != 0) { + Hu3DMotionShiftSet(arg0->unk68, arg0->unk6A[arg1], arg2, arg3, arg4); + } else { + CharModelMotionShiftSet(arg0->unk18, arg0->unk6A[arg1], arg2, arg3, arg4); + } + arg0->unkA4 = arg1; +} + +float lbl_1_data_21C[][4] = { + { -700.0f, -700.0f, -700.0f, 700.0f }, + { 700.0f, -700.0f, 700.0f, 700.0f }, + { -800.0f, 450.0f, 800.0f, 450.0f }, + { -700.0f, -700.0f, 700.0f, -700.0f } +}; + +// Vec[]? +float lbl_1_data_25C[][3] = { + { -700.0f, -700.0f, 200.0f }, + { 700.0f, -700.0f, 200.0f } +}; + +void fn_1_72A8(UnkM447Struct_04* arg0) { + float sp28[3]; // Vec? + float sp18[4]; + float spC[3]; // Vec? + float temp_f31; + float temp_f30; + float var_f28; + s32 i; + + sp28[0] = arg0->unk28.x; + sp28[1] = arg0->unk28.z; + sp28[2] = 95.0f; + for (i = 0; i < 4; i++) { + if (fn_1_80BC(sp28, lbl_1_data_21C[i], sp18) == 0) { + continue; + } + if (i / 2 == 0) { + if (lbl_1_data_21C[i][0] < 0.0f) { + arg0->unk28.x = sp28[2] + lbl_1_data_21C[i][0]; + } else { + arg0->unk28.x = lbl_1_data_21C[i][0] - sp28[2]; + } + } else { + if (lbl_1_data_21C[i][1] < 0.0f) { + arg0->unk28.z = sp28[2] + lbl_1_data_21C[i][1]; + } else { + arg0->unk28.z = lbl_1_data_21C[i][1] - sp28[2]; + } + } + arg0->unk0C = 0; + } + spC[0] = arg0->unk28.x; + spC[1] = arg0->unk28.z; + spC[2] = arg0->unk50; + for (i = 0; i < 2; i++) { + if (fn_1_879C(spC, lbl_1_data_25C[i], 1, 0) != 0) { + arg0->unk28.x = spC[0]; + arg0->unk28.z = spC[1]; + arg0->unk0C = 0; + } + } + if (arg0->unk28.z > 0.0f) { + temp_f31 = arg0->unk28.x; + temp_f30 = arg0->unk28.z - -120.0f; + var_f28 = sqrtf(temp_f31 * temp_f31 + temp_f30 * temp_f30); + if (700.0f - arg0->unk50 < var_f28) { + temp_f31 /= var_f28; + temp_f30 /= var_f28; + arg0->unk28.x = temp_f31 * (700.0f - arg0->unk50); + arg0->unk28.z = -120.0f + temp_f30 * (700.0f - arg0->unk50); + } + } +} + +void fn_1_7688(UnkM447Struct_04* arg0) { + float sp14[3]; // Vec? + float sp8[3]; // Vec? + UnkM447Struct_04* temp_r30; + s32 var_r26; + s32 i; + + for (i = 0; i < 2; i++) { + temp_r30 = lbl_1_bss_98[i]; + if (!temp_r30 || temp_r30 == arg0) { + continue; + } + sp14[0] = arg0->unk28.x; + sp14[1] = arg0->unk28.z; + sp14[2] = arg0->unk50; + sp8[0] = temp_r30->unk28.x; + sp8[1] = temp_r30->unk28.z; + sp8[2] = temp_r30->unk50; + var_r26 = (temp_r30->unk24 == 1) ? 1 : 0; + if (fn_1_879C(sp14, sp8, 1, var_r26) == 0) { + continue; + } + switch (arg0->unk24) { + case 1: + arg0->unk28.x = sp14[0]; + arg0->unk28.z = sp14[1]; + temp_r30->unk28.x = sp8[0]; + temp_r30->unk28.z = sp8[1]; + arg0->unk0C = 0; + break; + case 6: + case 7: + arg0->unk28.x = sp14[0]; + arg0->unk28.z = sp14[1]; + if (ABS(arg0->unk28.z - temp_r30->unk28.z) < 2.0f) { + arg0->unk28.z += 55.0f * (0.0f > arg0->unk28.z ? -1 : 1); + } + arg0->unk0C = 0; + break; + } + switch (arg0->unk24) { + case 1: + fn_1_72A8(arg0); + fn_1_72A8(temp_r30); + break; + } + } +} + +void fn_1_78A8(UnkM447Struct_04* arg0) { + float sp20[3]; // Vec? + float sp14[3]; // Vec? + Vec sp8; + s32 i; + + sp20[0] = arg0->unk28.x; + sp20[1] = arg0->unk28.z; + sp20[2] = arg0->unk50; + for (i = 0; i < 5; i++) { + if (lbl_1_bss_10->unk54[i] != 0) { + continue; + } + fn_1_1ED4(i, &sp8); + sp14[0] = sp8.x; + sp14[1] = sp8.z; + sp14[2] = 35.0f; + if (fn_1_879C(sp20, sp14, 1, 0) != 0) { + arg0->unk28.x = sp20[0]; + arg0->unk28.z = sp20[1]; + arg0->unk0C = 0; + } + } +} + +s32 fn_1_7984(UnkM447Struct_04* arg0) { + float sp20[3]; // Vec? + float sp14[3]; // Vec? + Vec sp8; + s32 i; + + sp20[0] = arg0->unk28.x; + sp20[1] = arg0->unk28.z; + sp20[2] = arg0->unk50; + for (i = 0; i < 5; i++) { + fn_1_1ED4(i, &sp8); + sp14[0] = sp8.x; + sp14[1] = sp8.z; + sp14[2] = 40.0f; + if (fn_1_879C(sp20, sp14, 0, 0) != 0) { + return i; + } + } + return 5; +} + +void fn_1_7A34(UnkM447Struct_04* arg0) { + espDispOn(arg0->unk7C[1]); + espDispOn(arg0->unk7C[0]); +} + +void fn_1_7A6C(UnkM447Struct_04* arg0) { + espDispOff(arg0->unk7C[1]); + espDispOff(arg0->unk7C[0]); +} + +void fn_1_7AA4(UnkM447Struct_04* arg0, s32 arg1, s32 arg2) { + if (arg0->unk1C == 0) { + switch (arg1) { + case 0: + omVibrate(arg0->unk00, arg2, 6, 6); + return; + case 1: + omVibrate(arg0->unk00, arg2, 4, 2); + return; + case 2: + omVibrate(arg0->unk00, arg2, 12, 0); + break; + } + } +} diff --git a/src/REL/m447dll/player_col.c b/src/REL/m447dll/player_col.c new file mode 100755 index 00000000..0bd2216a --- /dev/null +++ b/src/REL/m447dll/player_col.c @@ -0,0 +1,199 @@ +#include "REL/m447dll.h" + +#include "ext_math.h" + +float fn_1_7D94(float* arg0, float* arg1); +void fn_1_7F64(float* arg0, float arg1, float* arg2, float* arg3); +s32 fn_1_89BC(float* arg0, float* arg1); + +void fn_1_7B54(Vec* arg0, Vec* arg1, s32 arg2, float arg3) { + float temp_f29; + float var_f30; + float var_f31; + s32 temp_r29; + s32 var_r30; + s32 i; + + temp_r29 = arg2 - 1; + arg0->x = 0.0f; + arg0->y = 0.0f; + arg0->z = 0.0f; + arg3 = (arg2 + 1) * arg3 - 1.0f; + for (i = -2; i <= temp_r29 + 2; i++) { + var_r30 = i; + if (i < 0) { + var_r30 = 0; + } + if (i > temp_r29) { + var_r30 = temp_r29; + } + var_f31 = arg3 - i; + if (var_f31 < 0.0f) { + var_f31 = -var_f31; + } + if (var_f31 < 1.0f) { + var_f30 = (3.0f * var_f31 * var_f31 * var_f31 - 6.0f * var_f31 * var_f31 + 4.0f) / 6.0f; + } else if (var_f31 < 2.0f) { + temp_f29 = var_f31 - 2.0f; + var_f30 = -temp_f29 * temp_f29 * temp_f29 / 6.0f; + } else { + var_f30 = 0.0f; + } + arg0->x += var_f30 * arg1[var_r30].x; + arg0->y += var_f30 * arg1[var_r30].y; + arg0->z += var_f30 * arg1[var_r30].z; + } +} + +float fn_1_7D94(float* arg0, float* arg1) { + float var_f30; + float var_f31; + float temp_f29; + float var_f28; + s32 var_r31; + + var_f30 = arg1[0] - arg0[0]; + var_f31 = arg1[1] - arg0[1]; + if (var_f30 >= 0.0f) { + if (var_f31 >= 0.0f) { + var_r31 = 0; + } else { + var_r31 = 3; + temp_f29 = var_f30; + var_f30 = -var_f31; + var_f31 = temp_f29; + } + } else { + if (var_f31 >= 0.0f) { + var_r31 = 1; + temp_f29 = var_f30; + var_f30 = var_f31; + var_f31 = -temp_f29; + } else { + var_r31 = 2; + var_f30 = -var_f30; + var_f31 = -var_f31; + } + } + if (var_f31 > var_f30) { + var_f28 = M_PI / 2 - atan2d(var_f30, var_f31); + } else { + var_f28 = atan2d(var_f31, var_f30); + } + return var_f28 + (M_PI / 2) * var_r31; +} + +void fn_1_7F64(float* arg0, float arg1, float* arg2, float* arg3) { + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + + // 57.29578 = 180 / M_PI (1 rad in degrees) + temp_f31 = cosd(-(57.29578f * arg1)); + temp_f30 = sind(-(57.29578f * arg1)); + temp_f29 = arg2[0] - arg0[0]; + temp_f28 = arg2[1] - arg0[1]; + arg3[0] = temp_f29 * temp_f31 + temp_f28 * temp_f30 + arg0[0]; + arg3[1] = -temp_f29 * temp_f30 + temp_f28 * temp_f31 + arg0[1]; +} + +s32 fn_1_80BC(float* arg0, float* arg1, float* arg2) { + float sp40[2]; + float sp38[2]; + float sp30[2]; + float sp2C; + float var_f26; + + sp40[0] = 0.0f; + sp40[1] = 0.0f; + sp38[0] = arg0[0] - arg1[0]; + sp38[1] = arg0[1] - arg1[1]; + sp2C = fn_1_7D94(arg1, &arg1[2]); + fn_1_7F64(sp40, -sp2C, sp38, sp30); + if (ABS(sp30[1]) > arg0[2]) { + return 0; + } + var_f26 = sqrtf(arg0[2] * arg0[2] - sp30[1] * sp30[1]); + sp38[0] = arg0[0] + var_f26; + sp38[1] = arg0[1] - sp30[1]; + fn_1_7F64(arg0, sp2C, sp38, arg2); + if (var_f26 == 0.0f) { + return 1; + } + sp38[0] = arg0[0] - var_f26; + sp38[1] = arg0[1] - sp30[1]; + fn_1_7F64(arg0, sp2C, sp38, &arg2[2]); + return 2; +} + +s32 fn_1_879C(float* arg0, float* arg1, s32 arg2, s32 arg3) { + float spC[2]; + float var_f28; + + spC[0] = arg0[0] - arg1[0]; + spC[1] = arg0[1] - arg1[1]; + var_f28 = sqrtf(spC[0] * spC[0] + spC[1] * spC[1]); + if (var_f28 < arg0[2] + arg1[2]) { + if (var_f28 == 0.0f) { + spC[0] = 0.0f; + spC[1] = -1.0f; + } else { + spC[0] /= var_f28; + spC[1] /= var_f28; + if (arg3 != 0) { + arg1[0] -= spC[0]; + arg1[1] -= spC[1]; + } + } + if (arg2 != 0) { + arg0[0] = arg1[0] + spC[0] * (arg0[2] + arg1[2]); + arg0[1] = arg1[1] + spC[1] * (arg0[2] + arg1[2]); + } + return 1; + } + return 0; +} + +s32 fn_1_89BC(float* arg0, float* arg1) { + float temp_f30; + float temp_f29; + float temp_f28; + float temp_f26; + float temp_f27; + float temp_f24; + + temp_f26 = arg0[2] * arg0[2] - 2.0f * arg0[0] * arg0[2] + arg0[0] * arg0[0] + arg0[3] * arg0[3] - 2.0f * arg0[1] * arg0[3] + arg0[1] * arg0[1]; + temp_f27 = 2.0f * (arg0[0] * arg0[2] - arg0[2] * arg1[0] + arg0[0] * arg0[0] + arg0[1] * arg0[3] - arg0[3] * arg1[1] + arg0[1] * arg0[1]); + temp_f24 = arg0[0] * arg0[0] - 2.0f * arg0[0] * arg1[0] + arg1[0] * arg1[0] + arg0[1] * arg0[1] - 2.0f * arg0[1] * arg1[1] + arg1[1] * arg1[1] - arg1[2] * arg1[2]; + if (temp_f26 == 0.0f) { + if (temp_f27 != 0.0f) { + return 1; + } else { + return 0; + } + } + temp_f30 = temp_f27 * temp_f27 - 4.0f * temp_f26 * temp_f24; + if (temp_f30 < 0.0f) { + return 0; + } + temp_f30 = sqrtf(temp_f30); + temp_f29 = (-temp_f27 + temp_f30) / (2.0f * temp_f26); + temp_f28 = (-temp_f27 - temp_f30) / (2.0f * temp_f26); + if (temp_f29 < temp_f28) { + if (temp_f29 >= 0.0f && temp_f29 > 1.0f) { + return 1; + } + if (temp_f28 >= 0.0f && temp_f28 < 1.0f) { + return 1; + } + } else { + if (temp_f28 >= 0.0f && temp_f28 < 1.0f) { + return 1; + } + if (temp_f29 >= 0.0f && temp_f29 < 1.0f) { + return 1; + } + } + return 0; +} diff --git a/src/REL/m447dll/stage.c b/src/REL/m447dll/stage.c new file mode 100755 index 00000000..ea976882 --- /dev/null +++ b/src/REL/m447dll/stage.c @@ -0,0 +1,471 @@ +#include "REL/m447dll.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/hsfanim.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/process.h" +#include "game/sprite.h" + +#include "ext_math.h" + +typedef struct { + /* 0x00 */ Vec unk00; + /* 0x0C */ Vec unk0C; + /* 0x18 */ GXColor unk18; +} UnkM447Struct_07; // Size 0x1C + +void fn_1_1FF4(void); +void fn_1_2164(UnkM447Struct_06* arg0); +void fn_1_231C(UnkM447Struct_06* arg0); +void fn_1_236C(UnkM447Struct_06* arg0); +void fn_1_2490(UnkM447Struct_06* arg0); +void fn_1_2494(UnkM447Struct_06* arg0); +void fn_1_25E4(UnkM447Struct_06* arg0); +void fn_1_2700(UnkM447Struct_06* arg0); +void fn_1_2A3C(UnkM447Struct_06* arg0); +void fn_1_2D08(UnkM447Struct_06* arg0); +void fn_1_2DAC(ModelData* model, ParticleData* particle, Mtx matrix); + +const s32 lbl_1_rodata_138[] = { + DATA_MAKE_NUM(DATADIR_M447, 0), + DATA_MAKE_NUM(DATADIR_M447, 2), + DATA_MAKE_NUM(DATADIR_M447, 3), + DATA_MAKE_NUM(DATADIR_M447, 1), + DATA_MAKE_NUM(DATADIR_M447, 1), + DATA_MAKE_NUM(DATADIR_M447, 1), + DATA_MAKE_NUM(DATADIR_M447, 1), + DATA_MAKE_NUM(DATADIR_M447, 1), + DATA_MAKE_NUM(DATADIR_M447, 24), + DATA_MAKE_NUM(DATADIR_M447, 24), + DATA_MAKE_NUM(DATADIR_M447, 24), + DATA_MAKE_NUM(DATADIR_M447, 24), + DATA_MAKE_NUM(DATADIR_M447, 24), + DATA_MAKE_NUM(DATADIR_M447, 25), + DATA_MAKE_NUM(DATADIR_M447, 26), + DATA_MAKE_NUM(DATADIR_M447, 28), + DATA_MAKE_NUM(DATADIR_M447, 29), + DATA_MAKE_NUM(DATADIR_M447, 29), + DATA_MAKE_NUM(DATADIR_M447, 29), + DATA_MAKE_NUM(DATADIR_M447, 29), + DATA_MAKE_NUM(DATADIR_M447, 29), + 0 +}; + +const Vec lbl_1_rodata_190[] = { + { 0.0f, 0.1f, 0.0f }, + { 400.0f, 0.1f, 0.0f }, + { -400.0f, 0.1f, 0.0f }, + { 200.0f, 0.1f, -400.0f }, + { -200.0f, 0.1f, -400.0f } +}; + +UnkM447Struct_07 lbl_1_data_A0[] = { + { { 0.0f, 2500.0f, 0.0f }, { 0.0f, -0.5f, 0.0f }, { 0xFF, 0xFF, 0xFF, 0xFF } }, + { { 0.0f, -100.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, { 0xFF, 0xFF, 0xFF, 0xFF } }, + { { 400.0f, -100.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, { 0xFF, 0xFF, 0xFF, 0xFF } }, + { { -400.0f, -100.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, { 0xFF, 0xFF, 0xFF, 0xFF } }, + { { 200.0f, -100.0f, -400.0f }, { 0.0f, 1.0f, 0.0f }, { 0xFF, 0xFF, 0xFF, 0xFF } }, + { { -200.0f, -100.0f, -400.0f }, { 0.0f, 1.0f, 0.0f }, { 0xFF, 0xFF, 0xFF, 0xFF } } +}; + +UnkM447Struct_06* fn_1_1D90(void) { + UnkM447Struct_06* temp_r3; + s32 i; + + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r3), MEMORY_DEFAULT_NUM); + if (!temp_r3) { + return NULL; + } + temp_r3->unk38 = 0; + temp_r3->unk50 = NULL; + temp_r3->unk44 = 0; + for (i = 0; i < 5; i++) { + temp_r3->unk54[i] = 0; + temp_r3->unk68[i] = 0; + } + fn_1_2164(temp_r3); + fn_1_236C(temp_r3); + temp_r3->unk7C = HuPrcChildCreate(fn_1_1FF4, 0x65, 0x3000, 0, lbl_1_bss_4); + temp_r3->unk7C->user_data = temp_r3; + return temp_r3; +} + +void fn_1_1E70(UnkM447Struct_06* arg0) { + fn_1_231C(arg0); + HuPrcKill(arg0->unk7C); + HuMemDirectFree(arg0); +} + +void fn_1_1EB0(UnkM447Struct_06* arg0, s32 arg1) { + arg0->unk38 = arg1; + arg0->unk3C = 0; +} + +BOOL fn_1_1EC0(UnkM447Struct_06* arg0) { + return arg0->unk38 != 0; +} + +void fn_1_1ED4(s32 arg0, Vec* arg1) { + *arg1 = lbl_1_rodata_190[arg0]; +} + +void fn_1_1F00(UnkM447Struct_06* arg0, s32 arg1) { + s16 temp_r31; + + temp_r31 = arg0->unk00[arg1 + 3]; + Hu3DModelAttrReset(temp_r31, 0x40000002); + Hu3DMotionTimeSet(temp_r31, 0.0f); + Hu3DMotionStartEndSet(temp_r31, 0.0f, 40.0f); + arg0->unk54[arg1] = 1; +} + +s32 fn_1_1F9C(UnkM447Struct_06* arg0) { + s32 var_r30; + s32 i; + + var_r30 = 0; + for (i = 0; i < 5; i++) { + if (arg0->unk54[i] == 0) { + var_r30++; + } + } + return var_r30; +} + +void fn_1_1FEC(UnkM447Struct_06* arg0, s32 arg1) { + arg0->unk44 = arg1; +} + +void (*lbl_1_data_148[])(UnkM447Struct_06*) = { + fn_1_2490, + fn_1_2494, + fn_1_25E4, + fn_1_2700, + fn_1_2A3C, + NULL // padding? +}; + +void fn_1_1FF4(void) { + Vec sp8; + UnkM447Struct_06* temp_r31; + s16 temp_r29; + s32 i; + + temp_r31 = HuPrcCurrentGet()->user_data; + while (TRUE) { + if (lbl_1_data_148[temp_r31->unk38]) { + lbl_1_data_148[temp_r31->unk38](temp_r31); + } + for (i = 0; i < 5; i++) { + temp_r29 = temp_r31->unk00[i + 3]; + if (Hu3DMotionEndCheck(temp_r29)) { + Hu3DMotionStartEndSet(temp_r29, 20.0f, 40.0f); + Hu3DModelAttrSet(temp_r29, 0x40000001); + } + } + if (temp_r31->unk44 > 0) { + fn_1_351C(&sp8); + if (--temp_r31->unk44 == 0) { + sp8.y = 300.0f; + } else { + sp8.y = fn_1_A240() % 20 - 10 + 300.0f; + } + fn_1_3540(&sp8); + } + HuPrcVSleep(); + } +} + +void fn_1_2164(UnkM447Struct_06* arg0) { + s32 i; + + for (i = 0; i <= 20; i++) { + arg0->unk00[i] = Hu3DModelCreateFile(lbl_1_rodata_138[i]); + Hu3DModelLayerSet(arg0->unk00[i], 0); + } + arg0->unk50 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_M447, 57)); + arg0->unk00[21] = Hu3DParticleCreate(arg0->unk50, 64); + Hu3DParticleHookSet(arg0->unk00[21], fn_1_2DAC); + Hu3DParticleBlendModeSet(arg0->unk00[21], 1); + Hu3DModelLayerSet(arg0->unk00[21], 0); + Hu3DModelAttrSet(arg0->unk00[21], 1); + Hu3DModelShadowMapSet(arg0->unk00[2]); + for (i = 0; i < 5; i++) { + Hu3DModelPosSet(arg0->unk00[i + 3], lbl_1_rodata_190[i].x, lbl_1_rodata_190[i].y, lbl_1_rodata_190[i].z); + Hu3DModelAttrSet(arg0->unk00[i + 3], 0x40000002); + Hu3DModelShadowMapSet(arg0->unk00[i + 3]); + } + for (i = 8; i <= 15; i++) { + Hu3DModelAttrSet(arg0->unk00[i], 1); + } + for (i = 16; i <= 20; i++) { + Hu3DModelAttrSet(arg0->unk00[i], 1); + } +} + +void fn_1_231C(UnkM447Struct_06* arg0) { + s32 i; + + for (i = 0; i < 22; i++) { + Hu3DModelKill(arg0->unk00[i]); + } +} + +void fn_1_236C(UnkM447Struct_06* arg0) { + s32 i; + + Hu3DLighInit(); + for (i = 0; i < 6; i++) { + arg0->unk2C[i] = Hu3DGLightCreateV(&lbl_1_data_A0[i].unk00, &lbl_1_data_A0[i].unk0C, &lbl_1_data_A0[i].unk18); + switch (i) { + case 0: + Hu3DGLightInfinitytSet(arg0->unk2C[i]); + Hu3DGLightStaticSet(arg0->unk2C[i], 1); + break; + case 1: + case 2: + case 3: + case 4: + case 5: + Hu3DGLightStaticSet(arg0->unk2C[i], 1); + Hu3DGLightSpotSet(arg0->unk2C[i], 20.0f, 2); + Hu3DGLightColorSet(arg0->unk2C[i], 0, 0, 0, 0); + break; + } + } +} + +void fn_1_2490(UnkM447Struct_06* arg0) { +} + +void fn_1_2494(UnkM447Struct_06* arg0) { + s32 i; + + switch (arg0->unk3C) { + case 0: + arg0->unk3C = 1; + break; + case 1: + Hu3DModelPosSet(arg0->unk00[14], 0.0f, 0.0f, 0.0f); + Hu3DMotionTimeSet(arg0->unk00[14], 0.0f); + Hu3DModelAttrReset(arg0->unk00[14], 1); + Hu3DModelAttrSet(arg0->unk00[14], 0x40000001); + arg0->unk40 = 0; + arg0->unk3C = 2; + HuAudFXPlay(0x77E); + for (i = 0; i < 2; i++) { + fn_1_7AA4(lbl_1_bss_98[i], 0, 0x3C); + } + break; + case 2: + if (arg0->unk40++ >= 60) { + arg0->unk3C = 3; + } + break; + case 3: + Hu3DModelAttrSet(arg0->unk00[14], 1); + arg0->unk38 = 0; + arg0->unk3C = 0; + break; + } +} + +void fn_1_25E4(UnkM447Struct_06* arg0) { + switch (arg0->unk3C) { + case 0: + arg0->unk3C = 1; + break; + case 1: + fn_1_2D08(arg0); + Hu3DModelPosSet(arg0->unk00[15], 0.0f, 0.0f, 0.0f); + Hu3DMotionTimeSet(arg0->unk00[15], 0.0f); + Hu3DModelAttrReset(arg0->unk00[15], 1); + Hu3DModelAttrSet(arg0->unk00[15], 0x40000001); + arg0->unk40 = 0; + arg0->unk3C = 2; + HuAudFXPlay(0x782); + break; + case 2: + if (arg0->unk40++ >= 60) { + arg0->unk3C = 3; + } + break; + case 3: + Hu3DModelAttrSet(arg0->unk00[15], 1); + arg0->unk38 = 0; + arg0->unk3C = 0; + break; + } +} + +void fn_1_2700(UnkM447Struct_06* arg0) { + float temp_f31; + s16 temp_r29; + s32 i; + + switch (arg0->unk3C) { + case 0: + arg0->unk48 = 0.0f; + arg0->unk4C = 0.011111111f; + arg0->unk3C = 1; + HuAudFXPlay(0x77F); + break; + case 1: + temp_f31 = -90.0f * arg0->unk48; + for (i = 0; i < 5; i++) { + Hu3DModelPosSet(arg0->unk00[i + 3], lbl_1_rodata_190[i].x, temp_f31, lbl_1_rodata_190[i].z); + } + arg0->unk48 += arg0->unk4C; + if (arg0->unk48 < 1.0f) { + break; + } + for (i = 0; i < 5; i++) { + Hu3DMotionTimeSet(arg0->unk00[i + 3], 0.0f); + Hu3DModelAttrSet(arg0->unk00[i + 3], 0x40000002); + arg0->unk54[i] = 0; + arg0->unk68[i] = 0; + } + arg0->unk3C = 2; + break; + case 2: + for (i = 0; i < 5; i++) { + temp_r29 = arg0->unk00[i + 8]; + Hu3DModelPosSet(temp_r29, lbl_1_rodata_190[i].x, lbl_1_rodata_190[i].y, lbl_1_rodata_190[i].z); + Hu3DMotionTimeSet(temp_r29, 0.0f); + Hu3DModelAttrReset(temp_r29, 1); + Hu3DGLightColorSet(arg0->unk2C[i + 1], lbl_1_data_A0[i + 1].unk18.r, lbl_1_data_A0[i + 1].unk18.g, lbl_1_data_A0[i + 1].unk18.b, lbl_1_data_A0[i + 1].unk18.a); + } + arg0->unk40 = 0; + arg0->unk3C = 3; + HuAudFXPlay(0x780); + break; + case 3: + if (arg0->unk40++ >= 60) { + for (i = 0; i < 5; i++) { + Hu3DModelAttrSet(arg0->unk00[i + 8], 1); + Hu3DGLightColorSet(arg0->unk2C[i + 1], 0, 0, 0, 0); + } + arg0->unk3C = 4; + } + break; + case 4: + arg0->unk38 = 0; + arg0->unk3C = 0; + break; + } +} + +void fn_1_2A3C(UnkM447Struct_06* arg0) { + float temp_f31; + s16 temp_r29; + s32 i; + + switch (arg0->unk3C) { + case 0: + arg0->unk48 = 0.0f; + arg0->unk4C = 0.033333335f; + arg0->unk3C = 1; + HuAudFXPlay(0x77F); + break; + case 1: + temp_f31 = 90.0f * arg0->unk48 + -90.0f + 0.1f; + for (i = 0; i < 5; i++) { + Hu3DModelPosSet(arg0->unk00[i + 3], lbl_1_rodata_190[i].x, temp_f31, lbl_1_rodata_190[i].z); + } + arg0->unk48 += arg0->unk4C; + if (arg0->unk48 < 1.0f) { + break; + } + for (i = 0; i < 5; i++) { + Hu3DModelPosSet(arg0->unk00[i + 3], lbl_1_rodata_190[i].x, lbl_1_rodata_190[i].y, lbl_1_rodata_190[i].z); + } + HuAudFXPlay(0x783); + arg0->unk3C = 2; + break; + case 2: + for (i = 0; i < 5; i++) { + temp_r29 = arg0->unk00[i + 16]; + Hu3DModelPosSet(temp_r29, lbl_1_rodata_190[i].x, lbl_1_rodata_190[i].y, lbl_1_rodata_190[i].z); + Hu3DMotionTimeSet(temp_r29, 0.0f); + Hu3DModelAttrReset(temp_r29, 0x40000001); + Hu3DModelAttrReset(temp_r29, 1); + } + arg0->unk40 = 0; + arg0->unk3C = 3; + break; + case 3: + if (arg0->unk40++ >= 20) { + for (i = 0; i < 5; i++) { + Hu3DModelAttrSet(arg0->unk00[i + 16], 1); + } + arg0->unk3C = 4; + break; + } + break; + case 4: + arg0->unk38 = 0; + arg0->unk3C = 0; + break; + } +} + +void fn_1_2D08(UnkM447Struct_06* arg0) { + ModelData* temp_r30; + ParticleData* temp_r31; + + temp_r30 = &Hu3DData[arg0->unk00[21]]; + temp_r31 = temp_r30->unk_120; + temp_r30->attr &= ~1; + temp_r31->unk_00 = 0; + temp_r31->unk_02 = 1; + temp_r31->unk_04.x = 0.0f; + temp_r31->unk_04.y = 350.0f; + temp_r31->unk_04.z = -700.0f; + HuAudFXPlay(0x780); +} + +void fn_1_2DAC(ModelData* model, ParticleData* particle, Mtx matrix) { + GXColor sp8 = { 0xFF, 0xFF, 0xFF, 0xFF }; + HsfanimStruct01* var_r31; + s32 i; + + if (particle->unk_02 == 0) { + return; + } + if (particle->unk_00 == 0) { + particle->unk_00 = 1; + particle->unk_04.z = 0.0f; + particle->unk_10.z = 0.016666668f; + for (i = 0, var_r31 = particle->unk_48; i < particle->unk_30; i++, var_r31++) { + var_r31->unk00 = 0; + var_r31->unk2C = 20.0f; + var_r31->unk40.r = sp8.r; + var_r31->unk40.g = sp8.g; + var_r31->unk40.b = sp8.b; + var_r31->unk40.a = sp8.a; + var_r31->unk34.x = particle->unk_04.x; + var_r31->unk34.y = particle->unk_04.y; + var_r31->unk34.z = particle->unk_04.z; + var_r31->unk08.x = -8.0f + 0.1f * (fn_1_A240() % 160); + var_r31->unk08.y = -8.0f + 0.1f * (fn_1_A240() % 160); + var_r31->unk08.z = 0.0f; + } + } + for (i = 0, var_r31 = particle->unk_48; i < particle->unk_30; i++, var_r31++) { + if (var_r31->unk00_s16 < 0) { + continue; + } + var_r31->unk34.x += var_r31->unk08.x; + var_r31->unk34.y += var_r31->unk08.y; + var_r31->unk34.z = -700.0 + 500.0 * sind(90.0f * particle->unk_04.z); + var_r31->unk40.a = 255.0f * (1.0f - particle->unk_04.z); + var_r31->unk2C = 20.0f + fn_1_A240() % 30; + } + particle->unk_04.z += particle->unk_10.z; + if (particle->unk_04.z >= 1.0f) { + model->attr |= 1; + particle->unk_02 = 0; + } +}