From 3f773121c91cdfb5eee82f1da1d8c8163d9753d0 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Wed, 5 Jun 2024 18:17:06 +0200 Subject: [PATCH 1/2] Finished m417Dll except 2 functions --- config/GMPE01_00/rels/m417Dll/splits.txt | 3 +- config/GMPE01_00/rels/m417Dll/symbols.txt | 502 ++++----- configure.py | 6 +- include/REL/m417Dll.h | 36 + include/dolphin/gx/GXVert.h | 4 + src/REL/m417Dll/main.c | 498 +++++++++ src/REL/m417Dll/player.c | 1239 +++++++++++++++++++++ src/REL/m417Dll/sequence.c | 203 ++++ src/REL/m417Dll/water.c | 1097 ++++++++++++++++++ 9 files changed, 3333 insertions(+), 255 deletions(-) create mode 100644 include/REL/m417Dll.h create mode 100644 src/REL/m417Dll/main.c create mode 100644 src/REL/m417Dll/player.c create mode 100644 src/REL/m417Dll/sequence.c create mode 100644 src/REL/m417Dll/water.c diff --git a/config/GMPE01_00/rels/m417Dll/splits.txt b/config/GMPE01_00/rels/m417Dll/splits.txt index 8f137131..26235fcf 100644 --- a/config/GMPE01_00/rels/m417Dll/splits.txt +++ b/config/GMPE01_00/rels/m417Dll/splits.txt @@ -18,13 +18,12 @@ REL/m417Dll/main.c: REL/m417Dll/water.c: .text start:0x00003274 end:0x00007A34 .rodata start:0x000000B8 end:0x00000298 - .data start:0x00000050 end:0x00000090 .bss start:0x00000028 end:0x00000880 REL/m417Dll/player.c: .text start:0x00007A34 end:0x0000BCAC .rodata start:0x00000298 end:0x000004D8 - .data start:0x00000090 end:0x000001F0 + .data start:0x00000050 end:0x000001F0 .bss start:0x00000880 end:0x000008B0 REL/m417Dll/sequence.c: diff --git a/config/GMPE01_00/rels/m417Dll/symbols.txt b/config/GMPE01_00/rels/m417Dll/symbols.txt index bc93f364..e54124fd 100644 --- a/config/GMPE01_00/rels/m417Dll/symbols.txt +++ b/config/GMPE01_00/rels/m417Dll/symbols.txt @@ -82,256 +82,258 @@ fn_1_C658 = .text:0x0000C658; // type:function size:0x134 fn_1_C78C = .text:0x0000C78C; // type:function size:0xF0 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0xC data:4byte -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0xC data:4byte -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x8 data:double -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 data:double -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 data:float -lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 data:float -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 data:double -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 data:double -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x8 data:double -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:0x8 data:float -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 data:float -lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 data:float -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 data:float -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 data:double -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 data:double -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x8 data:double -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 data:float -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 data:float -lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 data:float -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x24 data:4byte -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x24 data:4byte -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 data:double -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 data:float -lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 data:float -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 data:float -lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 data:float -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 data:double -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 data:double -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x8 data:double -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 data:float -lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 data:float -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x8 data:double -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0xC data:4byte -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 data:float -lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 data:float -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 data:float -lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 data:float -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 data:float -lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 data:float -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 data:float -lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 data:float -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:0x8 data:double -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 data:float -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float -lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 data:float -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x1 data:byte -lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x1 data:byte -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 data:float -lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 data:float -lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 data:float -lbl_1_rodata_224 = .rodata:0x00000224; // type:object size:0x4 data:float -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 data:float -lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 data:float -lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 data:float -lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 data:float -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 data:float -lbl_1_rodata_23C = .rodata:0x0000023C; // type:object size:0x4 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:0x8 data:4byte -lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 data:float -lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 data:float -lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 data:float -lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 data:float -lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 data:float -lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 data:float -lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x4 data:float -lbl_1_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 data:float -lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 data:float -lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 data:float -lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 data:float -lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 data:float -lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 data:float -lbl_1_rodata_284 = .rodata:0x00000284; // type:object size:0x4 data:float -lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 data:float -lbl_1_rodata_28C = .rodata:0x0000028C; // type:object size:0x4 data:float -lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x8 data:float -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x10 data:4byte -lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x10 data:4byte -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x10 data:4byte -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0xC data:4byte -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0xC data:4byte -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 data:float -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 data:double -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x8 data:double -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x4 data:float -lbl_1_rodata_2FC = .rodata:0x000002FC; // type:object size:0x4 data:float -lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 data:float -lbl_1_rodata_304 = .rodata:0x00000304; // type:object size:0x4 data:float -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 data:float -lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x4 data:float -lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x4 data:float -lbl_1_rodata_314 = .rodata:0x00000314; // type:object size:0x4 data:float -lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x8 data:double -lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x8 data:double -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 data:double -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 data:float -lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 data:float -lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 data:float -lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 data:float -lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 data:float -lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 data:float -lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 data:float -lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 data:float -lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 data:float -lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 data:float -lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 data:float -lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 data:float -lbl_1_rodata_364 = .rodata:0x00000364; // type:object size:0xC data:4byte -lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 data:float -lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 data:float -lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 data:float -lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x4 data:float -lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 data:float -lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 data:float -lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x4 data:float -lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 data:float -lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 data:float -lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x8 data:double -lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 data:float -lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 data:float -lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x8 data:double -lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x8 data:double -lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 data:float -lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 data:float -lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 data:float -lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x8 data:double -lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x10 data:4byte -lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0xC data:4byte -lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 data:float -lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 data:float -lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x8 data:double -lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 data:float -lbl_1_rodata_404 = .rodata:0x00000404; // type:object size:0x4 data:float -lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x4 data:float -lbl_1_rodata_40C = .rodata:0x0000040C; // type:object size:0x4 data:float -lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x8 data:double -lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x8 data:double -lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 data:float -lbl_1_rodata_424 = .rodata:0x00000424; // type:object size:0x4 data:float -lbl_1_rodata_428 = .rodata:0x00000428; // type:object size:0x4 data:float -lbl_1_rodata_42C = .rodata:0x0000042C; // type:object size:0x4 data:float -lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x4 data:float -lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x8 data:double -lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x4 data:float -lbl_1_rodata_444 = .rodata:0x00000444; // type:object size:0x4 data:float -lbl_1_rodata_448 = .rodata:0x00000448; // type:object size:0x4 data:float -lbl_1_rodata_44C = .rodata:0x0000044C; // type:object size:0x4 data:float -lbl_1_rodata_450 = .rodata:0x00000450; // type:object size:0x4 data:float -lbl_1_rodata_454 = .rodata:0x00000454; // type:object size:0x4 data:float -lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x8 data:4byte -lbl_1_rodata_460 = .rodata:0x00000460; // type:object size:0x4 data:float -lbl_1_rodata_464 = .rodata:0x00000464; // type:object size:0x4 data:float -lbl_1_rodata_468 = .rodata:0x00000468; // type:object size:0x8 data:double -lbl_1_rodata_470 = .rodata:0x00000470; // type:object size:0x4 data:float -lbl_1_rodata_478 = .rodata:0x00000478; // type:object size:0x8 data:double -lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x4 data:float -lbl_1_rodata_484 = .rodata:0x00000484; // type:object size:0x4 data:float -lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 data:float -lbl_1_rodata_48C = .rodata:0x0000048C; // type:object size:0x4 data:float -lbl_1_rodata_490 = .rodata:0x00000490; // type:object size:0x4 data:float -lbl_1_rodata_494 = .rodata:0x00000494; // type:object size:0x4 data:float -lbl_1_rodata_498 = .rodata:0x00000498; // type:object size:0x4 data:float -lbl_1_rodata_49C = .rodata:0x0000049C; // type:object size:0x4 data:float -lbl_1_rodata_4A0 = .rodata:0x000004A0; // type:object size:0x4 data:float -lbl_1_rodata_4A4 = .rodata:0x000004A4; // type:object size:0x4 data:float -lbl_1_rodata_4A8 = .rodata:0x000004A8; // type:object size:0x4 data:float -lbl_1_rodata_4AC = .rodata:0x000004AC; // type:object size:0x4 data:float -lbl_1_rodata_4B0 = .rodata:0x000004B0; // type:object size:0x4 data:float -lbl_1_rodata_4B4 = .rodata:0x000004B4; // type:object size:0x4 data:float -lbl_1_rodata_4B8 = .rodata:0x000004B8; // type:object size:0x4 data:float -lbl_1_rodata_4BC = .rodata:0x000004BC; // type:object size:0x4 data:float -lbl_1_rodata_4C0 = .rodata:0x000004C0; // type:object size:0x4 data:float -lbl_1_rodata_4C4 = .rodata:0x000004C4; // type:object size:0x4 data:float -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:0x18 data:4byte -lbl_1_rodata_4FC = .rodata:0x000004FC; // type:object size:0x18 data:4byte -lbl_1_rodata_514 = .rodata:0x00000514; // type:object size:0x4 data:float -lbl_1_rodata_518 = .rodata:0x00000518; // type:object size:0x4 data:float -lbl_1_rodata_520 = .rodata:0x00000520; // type:object size:0x8 data:double -lbl_1_rodata_528 = .rodata:0x00000528; // type:object size:0x4 data:float -lbl_1_rodata_52C = .rodata:0x0000052C; // type:object size:0x4 data:float -lbl_1_rodata_530 = .rodata:0x00000530; // type:object size:0x4 data:float -lbl_1_rodata_534 = .rodata:0x00000534; // type:object size:0x4 data:float -lbl_1_rodata_538 = .rodata:0x00000538; // type:object size:0x4 data:float -lbl_1_rodata_53C = .rodata:0x0000053C; // type:object size:0x4 data:float -lbl_1_rodata_540 = .rodata:0x00000540; // type:object size:0x8 data:double -lbl_1_rodata_548 = .rodata:0x00000548; // type:object size:0x8 data:double -lbl_1_rodata_550 = .rodata:0x00000550; // type:object size:0x8 data:double -lbl_1_rodata_558 = .rodata:0x00000558; // type:object size:0x4 data:float -lbl_1_rodata_55C = .rodata:0x0000055C; // type:object size:0x4 data:float -lbl_1_rodata_560 = .rodata:0x00000560; // type:object size:0x4 data:float -lbl_1_rodata_564 = .rodata:0x00000564; // type:object size:0x4 data:float -lbl_1_rodata_568 = .rodata:0x00000568; // type:object size:0x4 data:float -lbl_1_rodata_56C = .rodata:0x0000056C; // type:object size:0x4 data:float -lbl_1_rodata_570 = .rodata:0x00000570; // type:object size:0x8 data:double -lbl_1_rodata_578 = .rodata:0x00000578; // type:object size:0x8 data:double -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 +__fakeHalf = .rodata:0x00000000; // type:object size:0x8 data:double +__fakeThree = .rodata:0x00000008; // type:object size:0x8 data:double +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0xC scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0xC scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x8 scope:local data:double +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 scope:local data:double +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 scope:local data:float +lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 scope:local data:float +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 scope:local data:double +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 scope:local data:double +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x8 scope:local data:double +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:0x8 scope:local data:float +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 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:0x4 scope:local data:float +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x24 scope:local data:float +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x24 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 scope:local data:double +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 scope:local data:float +lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 scope:local data:float +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 scope:local data:double +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:double +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x8 scope:local data:double +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 scope:local data:float +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:0x8 scope:local data:double +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 scope:local data:float +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:float +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 scope:local data:byte +lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 scope:local data:byte +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 scope:local data:float +lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float +lbl_1_rodata_224 = .rodata:0x00000224; // type:object size:0x4 scope:local data:float +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 scope:local data:float +lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 scope:local data:float +lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 scope:local data:float +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 scope:local data:float +lbl_1_rodata_23C = .rodata:0x0000023C; // 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:0x8 scope:local data:float +lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 scope:local data:float +lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 scope:local data:float +lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 scope:local data:float +lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 scope:local data:float +lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 scope:local data:float +lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x4 scope:local data:float +lbl_1_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 scope:local data:float +lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 scope:local data:float +lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 scope:local data:float +lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 scope:local data:float +lbl_1_rodata_284 = .rodata:0x00000284; // type:object size:0x4 scope:local data:float +lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28C = .rodata:0x0000028C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x8 scope:local data:float +lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x10 scope:local data:float +lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x10 scope:local data:float +lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x10 scope:local data:float +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0xC scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0xC scope:local data:float +lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2FC = .rodata:0x000002FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 scope:local data:float +lbl_1_rodata_304 = .rodata:0x00000304; // type:object size:0x4 scope:local data:float +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x4 scope:local data:float +lbl_1_rodata_314 = .rodata:0x00000314; // type:object size:0x4 scope:local data:float +lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x8 scope:local data:double +lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x8 scope:local data:double +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 scope:local data:double +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 scope:local data:float +lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 scope:local data:float +lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 scope:local data:float +lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 scope:local data:float +lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 scope:local data:float +lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 scope:local data:float +lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 scope:local data:float +lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 scope:local data:float +lbl_1_rodata_364 = .rodata:0x00000364; // type:object size:0xC scope:local data:float +lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 scope:local data:float +lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 scope:local data:float +lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 scope:local data:float +lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 scope:local data:float +lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 scope:local data:float +lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 scope:local data:float +lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x10 scope:local data:float +lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0xC scope:local data:float +lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 scope:local data:float +lbl_1_rodata_404 = .rodata:0x00000404; // type:object size:0x4 scope:local data:float +lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40C = .rodata:0x0000040C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x8 scope:local data:double +lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x8 scope:local data:double +lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 scope:local data:float +lbl_1_rodata_424 = .rodata:0x00000424; // type:object size:0x4 scope:local data:float +lbl_1_rodata_428 = .rodata:0x00000428; // type:object size:0x4 scope:local data:float +lbl_1_rodata_42C = .rodata:0x0000042C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x4 scope:local data:float +lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x8 scope:local data:double +lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x4 scope:local data:float +lbl_1_rodata_444 = .rodata:0x00000444; // type:object size:0x4 scope:local data:float +lbl_1_rodata_448 = .rodata:0x00000448; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44C = .rodata:0x0000044C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_450 = .rodata:0x00000450; // type:object size:0x4 scope:local data:float +lbl_1_rodata_454 = .rodata:0x00000454; // type:object size:0x4 scope:local data:float +lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x8 scope:local data:float +lbl_1_rodata_460 = .rodata:0x00000460; // type:object size:0x4 scope:local data:float +lbl_1_rodata_464 = .rodata:0x00000464; // type:object size:0x4 scope:local data:float +lbl_1_rodata_468 = .rodata:0x00000468; // type:object size:0x8 scope:local data:double +lbl_1_rodata_470 = .rodata:0x00000470; // type:object size:0x4 scope:local data:float +lbl_1_rodata_478 = .rodata:0x00000478; // type:object size:0x8 scope:local data:double +lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x4 scope:local data:float +lbl_1_rodata_484 = .rodata:0x00000484; // type:object size:0x4 scope:local data:float +lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48C = .rodata:0x0000048C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_490 = .rodata:0x00000490; // type:object size:0x4 scope:local data:float +lbl_1_rodata_494 = .rodata:0x00000494; // type:object size:0x4 scope:local data:float +lbl_1_rodata_498 = .rodata:0x00000498; // type:object size:0x4 scope:local data:float +lbl_1_rodata_49C = .rodata:0x0000049C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4A0 = .rodata:0x000004A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4A4 = .rodata:0x000004A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4A8 = .rodata:0x000004A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4AC = .rodata:0x000004AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B0 = .rodata:0x000004B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B4 = .rodata:0x000004B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B8 = .rodata:0x000004B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4BC = .rodata:0x000004BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C0 = .rodata:0x000004C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C4 = .rodata:0x000004C4; // type:object size:0x4 scope:local data:float +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:0x18 scope:local data:float +lbl_1_rodata_4FC = .rodata:0x000004FC; // type:object size:0x18 scope:local data:float +lbl_1_rodata_514 = .rodata:0x00000514; // type:object size:0x4 scope:local data:float +lbl_1_rodata_518 = .rodata:0x00000518; // type:object size:0x4 scope:local data:float +lbl_1_rodata_520 = .rodata:0x00000520; // type:object size:0x8 scope:local data:double +lbl_1_rodata_528 = .rodata:0x00000528; // type:object size:0x4 scope:local data:float +lbl_1_rodata_52C = .rodata:0x0000052C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_530 = .rodata:0x00000530; // type:object size:0x4 scope:local data:float +lbl_1_rodata_534 = .rodata:0x00000534; // type:object size:0x4 scope:local data:float +lbl_1_rodata_538 = .rodata:0x00000538; // type:object size:0x4 scope:local data:float +lbl_1_rodata_53C = .rodata:0x0000053C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_540 = .rodata:0x00000540; // type:object size:0x8 scope:local data:double +lbl_1_rodata_548 = .rodata:0x00000548; // type:object size:0x8 scope:local data:double +lbl_1_rodata_550 = .rodata:0x00000550; // type:object size:0x8 scope:local data:double +lbl_1_rodata_558 = .rodata:0x00000558; // type:object size:0x4 scope:local data:float +lbl_1_rodata_55C = .rodata:0x0000055C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_560 = .rodata:0x00000560; // type:object size:0x4 scope:local data:float +lbl_1_rodata_564 = .rodata:0x00000564; // type:object size:0x4 scope:local data:float +lbl_1_rodata_568 = .rodata:0x00000568; // type:object size:0x4 scope:local data:float +lbl_1_rodata_56C = .rodata:0x0000056C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_570 = .rodata:0x00000570; // type:object size:0x8 scope:local data:double +lbl_1_rodata_578 = .rodata:0x00000578; // type:object size:0x8 scope:local data:double +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_data_0 = .data:0x00000000; // type:object size:0xC lbl_1_data_C = .data:0x0000000C; // type:object size:0xC lbl_1_data_18 = .data:0x00000018; // type:object size:0xC data:float diff --git a/configure.py b/configure.py index 961fb427..fafe9b6d 100644 --- a/configure.py +++ b/configure.py @@ -955,10 +955,10 @@ config.libs = [ "m417Dll", objects={ Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/m417Dll/main.c"), + Object(Matching, "REL/m417Dll/main.c"), Object(NonMatching, "REL/m417Dll/water.c"), - Object(NonMatching, "REL/m417Dll/player.c"), - Object(NonMatching, "REL/m417Dll/sequence.c"), + Object(Matching, "REL/m417Dll/player.c"), + Object(Matching, "REL/m417Dll/sequence.c"), }, ), Rel( diff --git a/include/REL/m417Dll.h b/include/REL/m417Dll.h new file mode 100644 index 00000000..a0062a7a --- /dev/null +++ b/include/REL/m417Dll.h @@ -0,0 +1,36 @@ +#ifndef M417DLL_H +#define M417DLL_H + +#include "game/object.h" +#include "game/process.h" + +typedef struct UnkM417Struct2 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ float unk_04; + /* 0x08 */ float unk_08; + /* 0x0C */ float unk_0C; +} UnkM417Struct2; /* size = 0x10 */ + +void fn_1_5B0(omObjData *object); +void fn_1_800(omObjData *object); +u32 fn_1_26F8(void); +u32 fn_1_2710(void); +void fn_1_2728(u32 arg0); +s32 fn_1_2740(s32 arg0); +void fn_1_2770(s32 arg0); +void fn_1_27A0(s32 arg0); +s32 fn_1_27D0(void); +void fn_1_2808(s32 arg0, s32 arg1, s32 arg2); +float fn_1_2F08(float arg8, float arg9, float argA); +float fn_1_3024(float arg8, float arg9); +void fn_1_3274(Process *arg0); +void fn_1_33B4(void); +void fn_1_7510(float arg8, float arg9, float argA, float argB); +float fn_1_75BC(void); +float fn_1_78BC(float arg8, float arg9, float argA); +UnkM417Struct2 *fn_1_7A28(void); +void fn_1_7A34(Process *arg0); +omObjFunc fn_1_BCAC(Process *arg0); +omObjFunc fn_1_C658(Process *arg0, omObjData *object); + +#endif diff --git a/include/dolphin/gx/GXVert.h b/include/dolphin/gx/GXVert.h index b7122fb8..5f33d576 100644 --- a/include/dolphin/gx/GXVert.h +++ b/include/dolphin/gx/GXVert.h @@ -159,6 +159,10 @@ static inline void GXPosition1x16(u16 index) { GXWGFifo.u16 = index; } +static inline void GXNormal1x16(u16 index) { + GXWGFifo.u16 = index; +} + static inline void GXColor1x16(u16 index) { GXWGFifo.u16 = index; } diff --git a/src/REL/m417Dll/main.c b/src/REL/m417Dll/main.c new file mode 100644 index 00000000..0c18fb4a --- /dev/null +++ b/src/REL/m417Dll/main.c @@ -0,0 +1,498 @@ +#include "ext_math.h" +#include "game/audio.h" +#include "game/hsfdraw.h" +#include "game/minigame_seq.h" +#include "game/wipe.h" +#include "rel_sqrt_consts.h" + +#include "REL/m417Dll.h" + +typedef struct UnkM417Struct { + /* 0x00 */ u32 unk_00; + /* 0x04 */ u32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ s32 unk_0C; + /* 0x10 */ s32 unk_10; + /* 0x14 */ s32 unk_14; + /* 0x18 */ s32 unk_18; + /* 0x1C */ u32 unk_1C; + /* 0x20 */ u32 unk_20; + /* 0x24 */ s32 unk_24; + /* 0x28 */ s32 unk_28; + /* 0x2C */ s32 unk_2C[4]; + /* 0x3C */ s32 unk_3C[4]; + /* 0x4C */ s32 unk_4C[4]; + /* 0x5C */ u32 unk_5C; + /* 0x60 */ u32 unk_60; + /* 0x64 */ s32 unk_64; +} UnkM417Struct; /* size = 0x68 */ + +void fn_1_4D8(omObjData *object); +void fn_1_990(omObjData *object); +void fn_1_EA8(omObjData *object); +void fn_1_13DC(omObjData *object); +void fn_1_17C0(omObjData *object); +void fn_1_1CA8(omObjData *object); +void fn_1_2158(omObjData *object); +s32 fn_1_27D0(void); + +Vec lbl_1_data_0 = { 100.0f, 800.0f, -100.0f }; +Vec lbl_1_data_C = { 0.3f, -0.8f, 0.3f }; +Vec lbl_1_data_18 = { 10.0f, 45.0f, 1000.0f }; +GXColor lbl_1_data_24 = { 255, 255, 255, 255 }; +Vec lbl_1_data_28 = { 50.0f, 150000.0f, 50.0f }; +Vec lbl_1_data_34 = { 0.0f, 1.0f, 0.0f }; +Vec lbl_1_data_40 = { 0.0f, 0.0f, 0.0f }; + +Process *lbl_1_bss_20; +omObjData *lbl_1_bss_1C; +omObjData *lbl_1_bss_18; +s16 lbl_1_bss_14; +s16 lbl_1_bss_12; +s16 lbl_1_bss_10; +s16 lbl_1_bss_8[4]; +s32 lbl_1_bss_4; +s32 lbl_1_bss_0; + +void ModuleProlog(void) +{ + Mtx sp38; + Vec sp2C = { 0.0f, 0.0f, 0.0f }; + Vec sp20 = { 0.0f, 0.0f, -1.0f }; + Vec sp14; + Vec sp8; + + Process *var_r31; + LightData *var_r30; + + HuAudSndGrpSet(42); + HuAudFXListnerSetEX(&sp2C, &sp20, 10000.0f, 1000.0f, 0.0f, 300.0f, 300.0f); + lbl_1_bss_4 = lbl_1_bss_0 = -1; + lbl_1_bss_14 = -1; + lbl_1_bss_8[0] = Hu3DGLightCreateV(&lbl_1_data_0, &lbl_1_data_C, &lbl_1_data_24); + Hu3DGLightInfinitytSet(lbl_1_bss_8[0]); + var_r30 = &Hu3DGlobalLight[lbl_1_bss_8[0]]; + var_r30->unk_00 |= 32768; + lbl_1_data_18.x = 20.0f; + lbl_1_data_18.y = 45.0f; + lbl_1_data_18.z = 1000.0f; + sp14.x = sp14.y = sp14.z = 0.0f; + sp8.x = sp8.z = 0.0f; + sp8.y = lbl_1_data_18.z; + mtxRot(sp38, lbl_1_data_18.x, lbl_1_data_18.y, 0.0f); + PSMTXMultVec(sp38, &sp8, &sp8); + Hu3DGLightPosAimSetV(lbl_1_bss_8[0], &sp8, &sp14); + lbl_1_data_28.x = 200.0f; + lbl_1_data_28.y = 3000.0f; + lbl_1_data_28.z = 100.0f; + lbl_1_data_34.x = 0.0f; + lbl_1_data_34.y = 1.0f; + lbl_1_data_34.z = 0.0f; + lbl_1_data_40.x = 0.0f; + lbl_1_data_40.y = 0.0f; + lbl_1_data_40.z = 0.0f; + Hu3DShadowCreate(30.0f, 20.0f, 25000.0f); + Hu3DShadowTPLvlSet(0.625f); + Hu3DShadowPosSet(&lbl_1_data_28, &lbl_1_data_34, &lbl_1_data_40); + var_r31 = omInitObjMan(50, 8192); + lbl_1_bss_20 = var_r31; + omGameSysInit(var_r31); + lbl_1_bss_12 = lbl_1_bss_10 = -1; + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, -1.0f, 5.0f, 5000.0f, 1.2f); + lbl_1_bss_18 = omAddObjEx(var_r31, 32730, 0, 0, -1, omOutView); + lbl_1_bss_1C = omAddObjEx(var_r31, 10, 0, 0, -1, fn_1_4D8); + fn_1_7A34(var_r31); + fn_1_7A34(var_r31); +} + +void fn_1_4D8(omObjData *object) +{ + UnkM417Struct *var_r31; + + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x68, 268435456); + var_r31 = object->data; + memset(var_r31, 0, 0x68); + var_r31->unk_00 = 0; + var_r31->unk_04 = 0; + var_r31->unk_0C = 0; + var_r31->unk_10 = 0; + var_r31->unk_14 = 0; + var_r31->unk_18 = 0; + var_r31->unk_24 = 0; + var_r31->unk_28 = 0; + var_r31->unk_08 = 0; + var_r31->unk_5C = 3; + var_r31->unk_4C[0] = var_r31->unk_4C[1] = var_r31->unk_4C[2] = var_r31->unk_4C[3] = -1; + var_r31->unk_60 = 0; + var_r31->unk_64 = 0; + object->func = fn_1_990; +} + +void fn_1_5B0(omObjData *object) +{ + Vec sp14; + Vec sp8; + + UnkM417Struct *var_r31; + + var_r31 = object->data; + var_r31->unk_04++; + var_r31->unk_10++; + var_r31->unk_18++; + var_r31->unk_28++; + sp8.x = -(sind(CRot.y) * cosd(CRot.x)); + sp8.y = -(-sind(CRot.x)); + sp8.z = -(cosd(CRot.y) * cosd(CRot.x)); + sp14.x = Center.x - (sp8.x * CZoom); + sp14.y = Center.y - (sp8.y * CZoom); + sp14.z = Center.z - (sp8.z * CZoom); + HuAudFXListnerUpdate(&sp14, &sp8); + if (omSysExitReq && (var_r31->unk_00 != 5)) { + var_r31->unk_00 = 4; + fn_1_800(object); + } +} + +void fn_1_800(omObjData *object) +{ + UnkM417Struct *var_r31; + + var_r31 = object->data; + if (var_r31->unk_08) { + return; + } + switch (var_r31->unk_00) { + case 0: + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + Hu3DCameraPerspectiveSet(1, 35.0f, 5.0f, 5000.0f, 1.2f); + var_r31->unk_00 = 1; + var_r31->unk_10 = 0; + object->func = fn_1_BCAC(lbl_1_bss_20); + break; + case 1: + var_r31->unk_00 = 2; + var_r31->unk_18 = 0; + object->func = fn_1_17C0; + break; + case 2: + if (lbl_1_bss_0 < 0) { + lbl_1_bss_0 = HuAudSStreamPlay(1); + } + var_r31->unk_00 = 3; + var_r31->unk_28 = 0; + object->func = fn_1_C658(lbl_1_bss_20, object); + break; + case 3: + case 4: + var_r31->unk_08 = 1; + var_r31->unk_00 = 5; + object->func = fn_1_EA8; + break; + case 5: + default: + var_r31->unk_00 = 5; + object->func = fn_1_13DC; + break; + } + var_r31->unk_04 = 0; +} + +void fn_1_990(omObjData *object) +{ + fn_1_5B0(object); + fn_1_800(object); +} + +void fn_1_EA8(omObjData *object) +{ + UnkM417Struct *var_r27; + + var_r27 = object->data; + + fn_1_5B0(object); + if (!WipeStatGet()) { + WipeCreate(2, 0, 60); + var_r27->unk_08 = 0; + fn_1_800(object); + } +} + +void fn_1_13DC(omObjData *object) +{ + fn_1_5B0(object); + if (!WipeStatGet()) { + fn_1_33B4(); + CharModelKill(-1); + MGSeqKillAll(); + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + } +} + +void fn_1_17C0(omObjData *object) +{ + s16 sp8; + + UnkM417Struct *var_r30; + + var_r30 = object->data; + fn_1_5B0(object); + + switch (var_r30->unk_14) { + case 0: + var_r30->unk_1C = 30; + var_r30->unk_20 = 60; + lbl_1_bss_12 = MGSeqCreate(3, 0); + MGSeqPosSet(sp8, 320.0f, 240.0f); + var_r30->unk_14 = 1; + var_r30->unk_18 = 0; + break; + case 1: + if (lbl_1_bss_4 < 0 && MGSeqStatGet(lbl_1_bss_12) & 16) { + lbl_1_bss_4 = HuAudSeqPlay(72); + } + if (!MGSeqStatGet(lbl_1_bss_12) && !var_r30->unk_08) { + lbl_1_bss_14 = MGSeqCreate(1, var_r30->unk_1C, -1, -1); + var_r30->unk_14 = 2; + var_r30->unk_18 = 0; + object->func = fn_1_1CA8; + } + break; + default: + break; + } +} + +void fn_1_1CA8(omObjData *object) +{ + UnkM417Struct *var_r30; + s32 var_r27; + + var_r30 = object->data; + var_r27 = 0; + fn_1_5B0(object); + + if (--var_r30->unk_20 == 0) { + var_r30->unk_20 = 60; + var_r30->unk_1C--; + if (var_r30->unk_1C == 0) { + var_r27 = 1; + } + } + if (var_r30->unk_5C != 3) { + var_r27 = 1; + } + if (var_r27) { + if (var_r30->unk_5C == 3) { + var_r30->unk_5C = 1; + } + lbl_1_bss_10 = MGSeqCreate(3, 1); + MGSeqPosSet(lbl_1_bss_10, 320.0f, 240.0f); + HuAudSeqFadeOut(lbl_1_bss_4, 100); + var_r30->unk_14 = 3; + var_r30->unk_18 = 0; + if (var_r30->unk_08 == 0) { + object->func = fn_1_2158; + } + } + MGSeqParamSet(lbl_1_bss_14, 1, var_r30->unk_1C); +} + +void fn_1_2158(omObjData *object) +{ + UnkM417Struct *var_r27; + + var_r27 = object->data; + if (lbl_1_bss_14 >= 0) { + MGSeqParamSet(lbl_1_bss_14, 2, -1); + lbl_1_bss_14 = -1; + } + fn_1_5B0(object); + if (fn_1_27D0() && var_r27->unk_60 == 4369) { + var_r27->unk_14 = 4; + var_r27->unk_18 = 0; + fn_1_800(object); + } +} + +u32 fn_1_26C8(void) +{ + return ((UnkM417Struct *)lbl_1_bss_1C->data)->unk_00; +} + +s32 fn_1_26E0(void) +{ + return ((UnkM417Struct *)lbl_1_bss_1C->data)->unk_0C; +} + +u32 fn_1_26F8(void) +{ + return ((UnkM417Struct *)lbl_1_bss_1C->data)->unk_14; +} + +u32 fn_1_2710(void) +{ + return ((UnkM417Struct *)lbl_1_bss_1C->data)->unk_24; +} + +void fn_1_2728(u32 arg0) +{ + ((UnkM417Struct *)lbl_1_bss_1C->data)->unk_5C = arg0; +} + +s32 fn_1_2740(s32 arg0) +{ + UnkM417Struct *var_r31; + + var_r31 = lbl_1_bss_1C->data; + return var_r31->unk_4C[arg0]; +} + +void fn_1_2770(s32 arg0) +{ + ((UnkM417Struct *)lbl_1_bss_1C->data)->unk_60 |= (1 << ((arg0 & 3) * 4)); +} + +void fn_1_27A0(s32 arg0) +{ + ((UnkM417Struct *)lbl_1_bss_1C->data)->unk_64 |= (1 << ((arg0 & 3) * 4)); +} + +s32 fn_1_27D0(void) +{ + return !MGSeqStatGet(lbl_1_bss_10); +} + +void fn_1_2808(s32 arg0, s32 arg1, s32 arg2) +{ + UnkM417Struct *var_r31; + + var_r31 = lbl_1_bss_1C->data; + arg0 &= 3; + var_r31->unk_2C[arg0] = arg1; + var_r31->unk_3C[arg0] = arg2; +} + +void fn_1_2848(Vec *arg0, Vec *arg1) +{ + Vec sp10; + + float var_f29; + float var_f28; + + sp10.x = arg1->x - arg0->x; + sp10.y = arg1->y - arg0->y; + sp10.z = arg1->z - arg0->z; + + Center.x = arg1->x; + Center.y = arg1->y; + Center.z = arg1->z; + + var_f29 = (sp10.x * sp10.x) + (sp10.z * sp10.z); + CRot.x = atan2d(sp10.y, sqrtf(var_f29)); + CRot.y = atan2d(-sp10.x, -sp10.z); + CRot.z = 0.0f; + + var_f28 = (sp10.z * sp10.z) + ((sp10.x * sp10.x) + (sp10.y * sp10.y)); + CZoom = sqrtf(var_f28); +} + +void fn_1_2B90(float arg8, float arg9, float argA, float argB, float argC, float argD) +{ + Vec sp40; + Vec sp34; + Vec sp28; + + float var_f29; + float var_f28; + + sp40.x = arg8; + sp40.y = arg9; + sp40.z = argA; + + sp34.x = argB; + sp34.y = argC; + sp34.z = argD; + + sp28.x = sp34.x - sp40.x; + sp28.y = sp34.y - sp40.y; + sp28.z = sp34.z - sp40.z; + + Center.x = sp34.x; + Center.y = sp34.y; + Center.z = sp34.z; + + var_f29 = (sp28.x * sp28.x) + (sp28.z * sp28.z); + CRot.x = atan2d(sp28.y, sqrtf(var_f29)); + CRot.y = atan2d(-sp28.x, -sp28.z); + CRot.z = 0.0f; + + var_f28 = (sp28.z * sp28.z) + ((sp28.x * sp28.x) + (sp28.y * sp28.y)); + CZoom = sqrtf(var_f28); +} + +float fn_1_2F08(float arg8, float arg9, float argA) +{ + float var_f31; + float var_f30; + float var_f29; + + var_f30 = fmod(arg9 - arg8, 360.0); + var_f31 = var_f30; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 > 180.0f) { + var_f31 -= 360.0f; + } + var_f29 = fmod(arg8 + (argA * var_f31), 360.0); + var_f31 = var_f29; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + return var_f31; +} + +float fn_1_3024(float arg8, float arg9) +{ + float var_f31; + float var_f30; + + var_f30 = fmod(arg9 - arg8, 360.0); + var_f31 = var_f30; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 > 180.0f) { + var_f31 -= 360.0f; + } + return var_f31; +} + +void fn_1_30D8(float *arg1, float *arg2, float *arg3, float *arg4) +{ + *arg2 = *arg3 = *arg4 = 0.0f; + *arg2 = *arg3 = *arg4 = 0.0f; +} + +void fn_1_310C(float arg8, float arg9, float argA, float *arg0, float *arg1, float *arg2) +{ + Mtx sp38; + Mtx sp8; + + if (arg8 != 0.0f) { + PSMTXRotRad(sp38, 88, 0.017453292f * arg8); + } else { + PSMTXIdentity(sp38); + } + if (arg9 != 0.0f) { + PSMTXRotRad(sp8, 89, 0.017453292f * arg9); + PSMTXConcat(sp38, sp8, sp38); + } + if (argA != 0.0f) { + PSMTXRotRad(sp8, 90, 0.017453292f * argA); + PSMTXConcat(sp38, sp8, sp38); + } + fn_1_30D8(NULL, arg0, arg1, arg2); +} diff --git a/src/REL/m417Dll/player.c b/src/REL/m417Dll/player.c new file mode 100644 index 00000000..558b61a8 --- /dev/null +++ b/src/REL/m417Dll/player.c @@ -0,0 +1,1239 @@ +#include "ext_math.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/gamework_data.h" +#include "game/hsfdraw.h" +#include "game/hsfmotion.h" +#include "game/minigame_seq.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/wipe.h" + +#include "REL/m417Dll.h" + +typedef struct UnkM417Struct8 { + /* 0x00 */ u16 unk_00; + /* 0x04 */ float unk_04; + /* 0x08 */ float unk_08; + /* 0x0C */ float unk_0C; + /* 0x10 */ u32 unk_10; +} UnkM417Struct8; /* size = 0x14 */ + +typedef struct UnkM417Struct10 { + /* 0x04 */ s32 unk_00; + /* 0x08 */ s32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ u32 unk_0C; + /* 0x10 */ u32 unk_10; + /* 0x14 */ s32 unk_14; + /* 0x18 */ s32 unk_18; + /* 0x1C */ s32 unk_1C; + /* 0x20 */ float unk_20; + /* 0x24 */ float unk_24; + /* 0x28 */ s32 unk_28; + /* 0x2C */ s32 unk_2C; + /* 0x30 */ s32 unk_30; + /* 0x34 */ s32 unk_34; + /* 0x38 */ s32 unk_38; + /* 0x3C */ s32 unk_3C; + /* 0x40 */ s32 unk_40; + /* 0x44 */ s32 unk_44; + /* 0x48 */ s32 unk_48; + /* 0x4C */ s32 unk_4C; + /* 0x50 */ u16 unk_50; + /* 0x52 */ char unk52[2]; + /* 0x54 */ s32 unk_54; + /* 0x58 */ char unk58[4]; + /* 0x5C */ s16 unk_5C; + /* 0x5E */ char unk5E[6]; + /* 0x64 */ float unk_64; + /* 0x68 */ float unk_68; + /* 0x6C */ float unk_6C; + /* 0x70 */ float unk_70; + /* 0x74 */ float unk_74; + /* 0x78 */ s32 unk_78; + /* 0x7C */ float unk_7C; + /* 0x80 */ u32 unk_80; + /* 0x84 */ u32 unk_84; + /* 0x88 */ float unk_88; + /* 0x8C */ float unk_8C; + /* 0x90 */ u32 unk_90; + /* 0x94 */ char unk94[4]; + /* 0x98 */ float unk_98; + /* 0x9C */ s32 unk_9C; + /* 0xA0 */ s32 unk_A0; + /* 0xA4 */ u32 unk_A4; + /* 0xA8 */ u32 unk_A8; + /* 0xAC */ float unk_AC; + /* 0xB0 */ float unk_B0; + /* 0xB4 */ Vec unk_B4; + /* 0xC0 */ u32 unk_C0; + /* 0xC4 */ u32 unk_C4; + /* 0xC8 */ Vec unk_C8; + /* 0xD4 */ Vec unk_D4; + /* 0xE0 */ Vec unk_E0; + /* 0xEC */ Vec unk_EC; + /* 0xF8 */ Vec unk_F8; + /* 0x104 */ Vec unk_104; + /* 0x110 */ Vec unk_110; + /* 0x11C */ Quaternion unk_11C; + /* 0x12C */ float unk_12C; + /* 0x130 */ float unk_130; + /* 0x134 */ float unk_134; + /* 0x138 */ float unk_138; + /* 0x13C */ float unk_13C; + /* 0x140 */ float unk_140; + /* 0x144 */ float unk_144; + /* 0x148 */ float unk_148; + /* 0x14C */ Vec unk_14C; + /* 0x158 */ char unk_158[0xC]; + /* 0x164 */ Quaternion unk_164; + /* 0x174 */ Quaternion unk_174; + /* 0x184 */ Quaternion unk_184; + /* 0x194 */ Quaternion unk_194; + /* 0x1A4 */ Quaternion unk_1A4; + /* 0x1B4 */ Quaternion unk_1B4; + /* 0x1C4 */ Mtx unk_1C4; + /* 0x1F4 */ Mtx unk_1F4; + /* 0x224 */ Mtx unk_224; + /* 0x254 */ Vec unk_254[16]; // maybe less +} UnkM417Struct10; /* size = 0x314 */ + +void fn_1_7C8C(omObjData *object); +void fn_1_82FC(omObjData *object); +void fn_1_86E8(omObjData *object); +void fn_1_8B0C(omObjData *object); +void fn_1_8D30(omObjData *object); +void fn_1_8E44(omObjData *object); +void fn_1_91E0(omObjData *object); +void fn_1_9298(omObjData *object); +void fn_1_9A1C(omObjData *object); +void fn_1_9C14(omObjData *object); +void fn_1_9FF0(omObjData *object); +void fn_1_AD24(omObjData *object); +void fn_1_ADC4(omObjData *object); +void fn_1_B2C0(omObjData *object); +void fn_1_B8A0(omObjData *object, u32 arg1); +s32 fn_1_BA2C(omObjData *object); +void fn_1_BC70(float arg8, float arg9, Quaternion *arg0); + +s32 lbl_1_data_50[][2] = { + { DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 6) }, + { DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 7) }, + { DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 8) }, + { DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 9) }, + { DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 10) }, + { DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 11) }, + { DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 12) }, + { DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 13) }, +}; + +u32 lbl_1_data_90[11][3] = { + { 0, 1, 1 }, + { 23, 1, 1 }, + { 24, 1, 1 }, + { 2, 1, 0 }, + { 3, 1, 0 }, + { DATA_MAKE_NUM(DATADIR_M417, 18), 1, 0 }, + { DATA_MAKE_NUM(DATADIR_M417, 26), 1, 0 }, + { 5, 0, 1 }, + { 6, 0, 1 }, + { 8, 0, 1 }, + { 9, 0, 1 }, +}; + +UnkM417Struct8 lbl_1_data_114[11] = { + { 0, 0.2f, 0.0f, -1.0f, 0x40000001 }, + { 1, 0.2f, 0.0f, -1.0f, 0 }, + { 2, 0.2f, 0.0f, -1.0f, 0 }, + { 3, 0.2f, 0.0f, -1.0f, 0x40000001 }, + { 4, 0.2f, 0.0f, -1.0f, 0x40000001 }, + { 5, 0.5f, 0.0f, -1.0f, 0 }, + { 6, 0.2f, 0.0f, -1.0f, 0x40000001 }, + { 7, 0.03f, 0.0f, -1.0f, 0 }, + { 8, 0.0f, 0.0f, -1.0f, 0 }, + { 9, 0.2f, 0.0f, -1.0f, 0 }, + { 10, 0.0f, 0.0f, -1.0f, 0 }, +}; + +s32 lbl_1_bss_8AC; // unused +s32 lbl_1_bss_8A8; // unused +omObjData *lbl_1_bss_898[4]; +u32 lbl_1_bss_888[4]; +u32 lbl_1_bss_884; +u32 lbl_1_bss_880; + +void fn_1_7A34(Process *arg0) +{ + u32 sp18[4]; + u32 sp8[4]; + + s16 var_r31; + s16 var_r30; + s32 var_r29; + omObjData *var_r28; + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + sp18[var_r31] = GWPlayerCfg[var_r31].group; + sp8[var_r31] = var_r31; + } + for (var_r31 = 0; var_r31 < 3; var_r31++) { + for (var_r30 = var_r31 + 1; var_r30 < 4; var_r30++) { + if (sp18[var_r31] > sp18[var_r30]) { + var_r29 = sp18[var_r31]; + sp18[var_r31] = sp18[var_r30]; + sp18[var_r30] = var_r29; + var_r29 = sp8[var_r31]; + sp8[var_r31] = sp8[var_r30]; + sp8[var_r30] = var_r29; + } + } + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_888[sp8[var_r31]] = var_r31; + } + omMakeGroupEx(arg0, 0, 4); + omGetGroupMemberListEx(arg0, 0); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + var_r28 = lbl_1_bss_898[var_r31] = omAddObjEx(arg0, 40, 2, 11, 0, fn_1_7C8C); + var_r28->work[0] = var_r31; + } + lbl_1_bss_880 = lbl_1_bss_884 = 0; +} + +void fn_1_7C68(void) +{ + CharModelKill(-1); +} + +void fn_1_7C8C(omObjData *object) +{ + s32 sp8; + + UnkM417Struct10 *var_r31; + s32 var_r29; + s32 var_r28; + u32 var_r27; + u32 var_r26; + + float sp44[4] = { 0.25f, 0.5f, 0.75f, 1.0f }; + float sp34[4] = { 0.0f, 650.0f, 650.0f, 650.0f }; + float sp24[4] = { 180.0f, 180.0f, 300.0f, 60.0f }; + + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM417Struct10), MEMORY_DEFAULT_NUM); + var_r31 = object->data; + memset(var_r31, 0, sizeof(UnkM417Struct10)); + object->stat |= 256; + var_r26 = object->work[0]; + var_r28 = GWPlayerCfg[var_r26].character; + var_r31->unk_00 = var_r28; + sp8 = var_r31->unk_04 = 0; + var_r31->unk_0C = lbl_1_bss_888[object->work[0]]; + var_r27 = 0; + if (var_r31->unk_0C) { + var_r27++; + } + fn_1_2808(object->work[0], var_r31->unk_0C, var_r31->unk_00); + var_r31->unk_74 = sp44[GWPlayerCfg[var_r26].diff & 3]; + var_r31->unk_44 = GWPlayerCfg[object->work[0]].iscom; + object->model[0] = CharModelCreate(var_r28, 4); + Hu3DModelLayerSet(object->model[0], 4); + Hu3DModelShadowSet(object->model[0]); + for (var_r29 = 0; var_r29 < 11; var_r29++) { + if (lbl_1_data_90[var_r29][var_r27 + 1]) { + if (lbl_1_data_90[var_r29][0] < 65536) { + object->motion[var_r29] = CharModelMotionCreate(var_r28, lbl_1_data_90[var_r29][0]); + } else { + object->motion[var_r29] + = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(var_r28 + lbl_1_data_90[var_r29][0], MEMORY_DEFAULT_NUM, HEAP_DATA)); + } + } + } + CharModelMotionDataClose(var_r28); + object->model[1] = Hu3DModelCreateFile(lbl_1_data_50[var_r28][var_r27]); + Hu3DModelShadowMapSet(object->model[1]); + + var_r31->unk_B4.x = sp24[var_r31->unk_0C]; + var_r31->unk_B4.y = 0.0f; + var_r31->unk_B4.z = sp34[var_r31->unk_0C]; + + object->trans.x = var_r31->unk_C8.x = var_r31->unk_B4.z * sind(var_r31->unk_B4.x); + object->trans.y = var_r31->unk_C8.y = 0.0f; + object->trans.z = var_r31->unk_C8.z = var_r31->unk_B4.z * cosd(var_r31->unk_B4.x); + + var_r31->unk_D4 = var_r31->unk_C8; + var_r31->unk_F8 = var_r31->unk_C8; + var_r31->unk_104 = var_r31->unk_F8; + + var_r31->unk_64 = var_r31->unk_68 = var_r31->unk_B4.x - 180.0f; + var_r31->unk_6C = 0.0f; + var_r31->unk_70 = 0.02f; + if (var_r31->unk_0C) { + Vec sp18 = { 0.0f, 1.0f, 0.0f }; + PSMTXRotAxisRad(var_r31->unk_1C4, &sp18, 0.017453292f * var_r31->unk_64); + } else { + Vec spC = { 0.0f, 1.0f, 0.0f }; + PSMTXIdentity(var_r31->unk_1C4); + C_QUATRotAxisRad(&var_r31->unk_184, &spC, 0.0f); + var_r31->unk_194 = var_r31->unk_184; + PSQUATInverse(&var_r31->unk_194, &var_r31->unk_1A4); + var_r31->unk_1B4 = var_r31->unk_1A4; + var_r31->unk_164 = var_r31->unk_194; + var_r31->unk_174 = var_r31->unk_194; + var_r31->unk_144 = 1.0f; + var_r31->unk_D4.z += 50.0f; + } + PSMTXInverse(var_r31->unk_1C4, var_r31->unk_1F4); + PSMTXCopy(var_r31->unk_1F4, var_r31->unk_224); + var_r31->unk_134 = var_r31->unk_138 = 0.0f; + var_r31->unk_12C = 1.0f; + var_r31->unk_08 = -1; + fn_1_B8A0(object, 0); + var_r31->unk_78 = 0; + var_r31->unk_9C = -1; + lbl_1_bss_884 = object->work[0]; + lbl_1_bss_880 = 60.0f * (4.0f + (0.002f * frandmod(1000))); + var_r31->unk_28 = 1; + var_r31->unk_50 = 0; + if (!var_r27) { + object->func = fn_1_82FC; + return; + } + var_r31->unk_2C = 1; + object->func = fn_1_86E8; +} + +void fn_1_82FC(omObjData *object) +{ + float var_f31; + float var_f30; + double var_f29; + float var_f28; + + UnkM417Struct10 *var_r31; + s32 var_r29; + + var_r31 = object->data; + var_r29 = 0; + var_r31->unk_10 = var_r31->unk_18 = 0; + var_r31->unk_14 = 0; + var_r31->unk_20 = 0.0f; + var_r31->unk_24 = 0.0f; + if (fn_1_26F8() == 2) { + if (var_r31->unk_44) { + fn_1_ADC4(object); + } else { + var_r31->unk_14 = HuPadBtn[GWPlayerCfg[object->work[0]].pad_idx]; + var_r31->unk_10 = HuPadBtnDown[GWPlayerCfg[object->work[0]].pad_idx]; + var_f31 = HuPadStkX[GWPlayerCfg[object->work[0]].pad_idx]; + var_f30 = -HuPadStkY[GWPlayerCfg[object->work[0]].pad_idx]; + var_r31->unk_20 = atan2d(var_f31, var_f30); + var_r31->unk_24 = 0.013888889f * sqrtf((var_f31 * var_f31) + (var_f30 * var_f30)); + if (var_r31->unk_24 > 1.0f) { + var_r31->unk_24 = 1.0f; + } + } + } + if ((s32)var_r31->unk_50 != 0) { + (void)var_r29; + } else { + var_r29 = 1; + } + fn_1_9FF0(object); + fn_1_9C14(object); + fn_1_91E0(object); + fn_1_AD24(object); + if (fn_1_26F8() == 3) { + if (var_r29 && fn_1_27D0()) { + var_r31->unk_50 = 0; + object->func = fn_1_8B0C; + } + } else if (var_r31->unk_3C) { + var_r31->unk_40 = 1; + fn_1_2728(2); + var_r31->unk_50 = 0; + object->func = fn_1_8E44; + } +} + +void fn_1_86E8(omObjData *object) +{ + float var_f31; + float var_f30; + double var_f29; + float var_f28; + + UnkM417Struct10 *var_r31; + s32 var_r29; + s32 var_r28; + + var_r31 = object->data; + var_r29 = 0; + var_r31->unk_10 = var_r31->unk_18 = 0; + var_r31->unk_14 = 0; + var_r31->unk_20 = 0.0f; + var_r31->unk_24 = 0.0f; + if (fn_1_26F8() == 2) { + if (var_r31->unk_44 != 0) { + var_r31->unk_1C = 0; + fn_1_B2C0(object); + } else { + var_r31->unk_14 = HuPadBtn[GWPlayerCfg[object->work[0]].pad_idx]; + var_r31->unk_10 = HuPadBtnDown[GWPlayerCfg[object->work[0]].pad_idx]; + var_f31 = HuPadStkX[GWPlayerCfg[object->work[0]].pad_idx]; + var_f30 = -HuPadStkY[GWPlayerCfg[object->work[0]].pad_idx]; + var_r31->unk_20 = atan2d(var_f31, var_f30); + var_r31->unk_24 = 0.013888889f * sqrtf((var_f31 * var_f31) + (var_f30 * var_f30)); + if (var_r31->unk_24 > 1.0f) { + var_r31->unk_24 = 1.0f; + } + var_r28 = var_r31->unk_1C; + var_r31->unk_1C = 0; + if (HuPadTrigL[GWPlayerCfg[object->work[0]].pad_idx] > 80) { + var_r31->unk_1C = 1; + } + var_r31->unk_18 = var_r31->unk_1C & ~var_r28; + } + } + fn_1_9298(object); + if ((s32)var_r31->unk_50 != 0) { + (void)var_r29; + } else if (var_r31->unk_2C) { + var_r29 = 1; + } + fn_1_91E0(object); + fn_1_AD24(object); + if (fn_1_26F8() == 3 && var_r29 && fn_1_27D0()) { + fn_1_2770(object->work[0]); + var_r31->unk_50 = 0; + object->func = fn_1_8D30; + } +} + +void fn_1_8B0C(omObjData *object) +{ + Vec sp8; + + float var_f31; + + UnkM417Struct10 *var_r31; + + var_r31 = object->data; + var_r31->unk_10 = var_r31->unk_18 = 0; + var_r31->unk_14 = 0; + var_r31->unk_20 = 0.0f; + var_r31->unk_24 = 0.0f; + + switch (var_r31->unk_50) { + case 0: + sp8 = var_r31->unk_EC; + sp8.y = 0.0f; + var_f31 = PSVECMag(&sp8); + if (var_f31 > 30.000002f) { + var_r31->unk_20 = atan2d(-sp8.x, -sp8.z); + var_r31->unk_24 = 0.01f * var_f31; + if (var_r31->unk_24 > 1.0f) { + var_r31->unk_24 = 1.0f; + } + } else { + var_r31->unk_20 = 0.0f; + var_r31->unk_24 = 0.01f; + fn_1_2770(object->work[0]); + var_r31->unk_50++; + } + break; + case 1: + if (fn_1_2710() == 1) { + var_r31->unk_28 = 0; + if (fn_1_2740(object->work[0]) >= 0) { + fn_1_B8A0(object, 1); + } else { + fn_1_B8A0(object, 2); + } + var_r31->unk_50++; + } + break; + case 2: + if (fn_1_BA2C(object)) { + fn_1_27A0(object->work[0]); + } + break; + } + fn_1_9FF0(object); + fn_1_9C14(object); + fn_1_91E0(object); + fn_1_AD24(object); +} + +void fn_1_8D30(omObjData *object) +{ + UnkM417Struct10 *var_r31; + + var_r31 = object->data; + var_r31->unk_10 = var_r31->unk_18 = 0; + var_r31->unk_14 = 0; + var_r31->unk_20 = 0.0f; + var_r31->unk_24 = 0.0f; + switch (var_r31->unk_50) { + case 0: + if (fn_1_2710() == 1) { + var_r31->unk_28 = 0; + if (fn_1_2740(object->work[0]) >= 0) { + var_r31->unk_68 = 0.0f; + fn_1_B8A0(object, 1); + } else { + fn_1_B8A0(object, 2); + } + var_r31->unk_50++; + } + break; + case 1: + if (fn_1_BA2C(object)) { + fn_1_27A0(object->work[0]); + } + break; + } + fn_1_9298(object); + fn_1_91E0(object); + fn_1_AD24(object); +} + +void fn_1_8E44(omObjData *object) +{ + Vec sp14; + Vec sp8; + + float var_f31; + + UnkM417Struct10 *var_r31; + + var_r31 = object->data; + var_r31->unk_10 = var_r31->unk_18 = 0; + var_r31->unk_14 = 0; + var_r31->unk_20 = 0.0f; + var_r31->unk_24 = 0.0f; + switch (var_r31->unk_50) { + case 0: + sp8 = var_r31->unk_14C; + sp8.y = 0.0f; + if (PSVECMag(&sp8) > 0.0f) { + PSVECNormalize(&sp8, &sp8); + } else { + sp8.x = 1.0f; + sp8.z = 0.0f; + } + var_r31->unk_68 = atan2d(-sp8.x, -sp8.z); + PSVECScale(&sp8, &var_r31->unk_E0, 1.6666667f); + fn_1_B8A0(object, 5); + Hu3DModelLayerSet(object->model[0], 0); + Hu3DModelShadowReset(object->model[0]); + var_r31->unk_50++; + + case 1: + var_r31->unk_E0.y += -0.8166667f; + if ((var_r31->unk_D4.y < -50.0f) && (var_r31->unk_9C < 0)) { + var_r31->unk_9C = HuAudFXPlay(1483); + } + if (var_r31->unk_D4.y < -300.0f) { + sp8 = var_r31->unk_D4; + sp8.y = 0.0f; + if (PSVECMag(&sp8) > 0.0f) { + PSVECNormalize(&sp8, &sp8); + } else { + sp8.x = 0.0f; + sp8.z = 1.0f; + } + PSVECScale(&sp8, &sp14, 250.0f); + sp14.y = -100.0f; + PSVECSubtract(&sp14, &var_r31->unk_D4, &sp8); + PSVECScale(&sp8, &var_r31->unk_E0, 1.0f / 60.0f); + fn_1_B8A0(object, 6); + var_r31->unk_50++; + } + break; + case 2: + if (-100.0f > var_r31->unk_D4.y) { + break; + } + var_r31->unk_E0.x = var_r31->unk_E0.y = var_r31->unk_E0.z = 0.0f; + fn_1_2770(object->work[0]); + fn_1_27A0(object->work[0]); + var_r31->unk_50++; + case 3: + var_f31 = fn_1_78BC(var_r31->unk_D4.x, var_r31->unk_D4.y, var_r31->unk_D4.z); + var_r31->unk_D4.y += (0.1f * ((var_f31 - 80.0f) - var_r31->unk_D4.y)); + + break; + } + PSVECAdd(&var_r31->unk_D4, &var_r31->unk_E0, &var_r31->unk_D4); + fn_1_9FF0(object); + fn_1_91E0(object); + fn_1_AD24(object); +} + +void fn_1_91E0(omObjData *object) +{ + UnkM417Struct10 *var_r31; + + var_r31 = object->data; + var_r31->unk_5C++; + var_r31->unk_54++; + object->trans.x = var_r31->unk_C8.x; + object->trans.y = var_r31->unk_C8.y; + object->trans.z = var_r31->unk_C8.z; + var_r31->unk_6C += var_r31->unk_70; + if (var_r31->unk_6C > 0.45f) { + var_r31->unk_6C = 0.45f; + } + var_r31->unk_64 = fn_1_2F08(var_r31->unk_64, var_r31->unk_68, var_r31->unk_6C); + object->rot.y = var_r31->unk_64; +} + +void fn_1_9298(omObjData *object) +{ + Vec sp20; + Vec sp14; + + float var_f31; + + UnkM417Struct10 *var_r31; + + var_r31 = object->data; + { + Vec sp8 = { 0.0f, 1.0f, 0.0f }; + fn_1_9A1C(object); + var_f31 = fn_1_78BC(var_r31->unk_F8.x, var_r31->unk_F8.y, var_r31->unk_F8.z); + var_r31->unk_F8.y += (0.2f * (var_f31 - var_r31->unk_F8.y)); + var_f31 = 0.0f; + if (var_r31->unk_24 > 0.05f && var_r31->unk_2C) { + sp20.x = sind(90.0f + var_r31->unk_B4.x); + sp20.y = 0.0f; + sp20.z = cosd(90.0f + var_r31->unk_B4.x); + sp14.x = sind(var_r31->unk_20); + sp14.y = 0.0f; + sp14.z = cosd(var_r31->unk_20); + var_f31 = PSVECDotProduct(&sp20, &sp14); + var_f31 *= (1.0f / 60.0f) * (30.0f * var_r31->unk_24); + } + var_r31->unk_B4.y += (0.1f * (var_f31 - var_r31->unk_B4.y)); + var_r31->unk_B4.x += var_r31->unk_B4.y; + if (var_r31->unk_B4.x >= 360.0f) { + var_r31->unk_B4.x -= 360.0f; + } else if (var_r31->unk_B4.x < 0.0f) { + var_r31->unk_B4.x += 360.0f; + } + PSMTXRotAxisRad(var_r31->unk_1C4, &sp8, 0.017453292f * var_r31->unk_B4.x); + } + object->rot.y = var_r31->unk_68 = var_r31->unk_B4.x - 180.0f; + object->trans.x = var_r31->unk_D4.x = var_r31->unk_F8.x = var_r31->unk_C8.x = var_r31->unk_B4.z * sind(var_r31->unk_B4.x); + object->trans.z = var_r31->unk_D4.z = var_r31->unk_F8.z = var_r31->unk_C8.z = var_r31->unk_B4.z * cosd(var_r31->unk_B4.x); + if (var_r31->unk_10 & 256) { + var_r31->unk_A8 = 9; + } + if (var_r31->unk_A8) { + var_r31->unk_A8--; + } + switch (var_r31->unk_A0) { + case 0: + var_r31->unk_2C = 1; + var_r31->unk_34 = 0; + if (var_r31->unk_28) { + fn_1_B8A0(object, 0); + if (var_r31->unk_A8) { + var_r31->unk_2C = 0; + var_r31->unk_38 = 0; + fn_1_B8A0(object, 7); + var_r31->unk_A4 = 9; + var_r31->unk_A0++; + } + } + break; + case 1: + var_r31->unk_A4--; + if (!var_r31->unk_A4) { + var_r31->unk_30 = 1; + fn_1_BC70(400.0f, 0.3f, &var_r31->unk_11C); + var_r31->unk_E0.y = (1.0f / 60.0f) * var_r31->unk_11C.z; + var_r31->unk_AC = 0.0f; + var_r31->unk_A0++; + } + break; + case 2: + if (var_r31->unk_E0.y >= 0.0f) { + var_r31->unk_AC += (1.0f / 60.0f); + } else { + var_r31->unk_AC -= (1.0f / 60.0f); + } + var_r31->unk_34 = 0; + var_r31->unk_B0 = 0.0f; + var_f31 = var_r31->unk_AC - 0.060000002f; + if (var_f31 > 0.0f) { + var_r31->unk_34 = 1; + var_f31 = var_f31 * 9.009008f; + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + var_r31->unk_B0 = var_f31; + } + if (var_r31->unk_34 && var_r31->unk_10 & 320) { + var_r31->unk_34 = 0; + var_r31->unk_38 = 1; + var_r31->unk_E0.y = 0.0f; + fn_1_B8A0(object, 9); + var_r31->unk_A0++; + } else { + var_r31->unk_E0.y += (0.016666668f * (0.016666668f * var_r31->unk_11C.w)); + var_r31->unk_D4.y += var_r31->unk_E0.y; + if (var_r31->unk_D4.y <= var_r31->unk_F8.y) { + var_r31->unk_30 = 0; + var_r31->unk_34 = 0; + var_r31->unk_E0.y = 0.0f; + var_r31->unk_D4.y = var_r31->unk_F8.y; + var_r31->unk_A0 = 0; + } + } + break; + case 3: + if (fn_1_BA2C(object)) { + var_r31->unk_A0++; + } + break; + case 4: + var_r31->unk_E0.y += (0.016666668f * (0.016666668f * var_r31->unk_11C.w)); + var_r31->unk_D4.y += +var_r31->unk_E0.y; + if (var_r31->unk_D4.y <= var_r31->unk_F8.y) { + fn_1_7510(var_r31->unk_F8.x, 0.0f, var_r31->unk_F8.z, var_r31->unk_B0); + HuAudFXEmiterPlay(1482, &var_r31->unk_D4); + omVibrate(object->work[0], 12, 4, 2); + var_r31->unk_30 = 0; + var_r31->unk_E0.y = 0.0f; + var_r31->unk_D4.y = var_r31->unk_F8.y; + fn_1_B8A0(object, 10); + var_r31->unk_A0 = var_r31->unk_A0 + 1; + } + break; + case 5: + if (fn_1_BA2C(object) != 0) { + var_r31->unk_38 = 0; + var_r31->unk_A0 = 0; + } + break; + } + if (!var_r31->unk_30) { + var_r31->unk_D4.y = var_r31->unk_F8.y; + } +} + +void fn_1_9A1C(omObjData *object) +{ + float var_f31; + float var_f30; + + s32 var_r31; + UnkM417Struct10 *var_r30; + UnkM417Struct10 *var_r29; + UnkM417Struct10 *var_r28; + s32 var_r27; + + var_r30 = object->data; + var_r30->unk_C0++; + if (((UnkM417Struct10 *)lbl_1_bss_898[0]->data)->unk_C4 == var_r30->unk_C0) { + return; + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + ((UnkM417Struct10 *)lbl_1_bss_898[var_r31]->data)->unk_C4 = var_r30->unk_C0; + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + var_r29 = lbl_1_bss_898[var_r31]->data; + if (!var_r29->unk_0C) { + continue; + } + for (var_r27 = 0; var_r27 < 4; var_r27++) { + if (var_r31 == var_r27) { + continue; + } + var_r28 = lbl_1_bss_898[var_r27]->data; + if (!var_r28->unk_0C) { + continue; + } + var_f31 = fn_1_3024(var_r29->unk_B4.x, var_r28->unk_B4.x); + if (fabs(var_f31) > 23.0) { + continue; + } + if (var_f31 == 0.0f) { + var_f30 = 11.5f; + } else { + var_f30 = 23.0 - fabs(var_f31); + var_f30 = (0.5f * var_f30) * (var_f31 / fabs(var_f31)); + } + var_r29->unk_B4.x -= var_f30; + var_r28->unk_B4.x += var_f30; + } + } +} + +void fn_1_9C14(omObjData *object) +{ + Qtrn sp28; + Vec sp1C; + Vec sp10; + float spC; + float sp8; + + float var_f31; + float var_f30; + float var_f29; + + UnkM417Struct10 *var_r31; + + var_r31 = object->data; + if (var_r31->unk_24 > 0.0f) { + var_r31->unk_68 = var_r31->unk_20; + } + if (var_r31->unk_24 > 0.05f) { + var_r31->unk_E0.x = 0.01666666753590107 * (500.0 * (var_r31->unk_24 * sind(var_r31->unk_20))); + var_r31->unk_E0.z = 0.01666666753590107 * (500.0 * (var_r31->unk_24 * cosd(var_r31->unk_20))); + var_r31->unk_6C = 0.2f; + var_r31->unk_70 = 0.0f; + if (CharModelMotionShiftIDGet(var_r31->unk_00) < 0) { + var_f30 = 0.5f; + if (var_r31->unk_08 == 4) { + var_f30 = 0.45f; + } + if (var_r31->unk_24 > var_f30) { + fn_1_B8A0(object, 4); + var_f29 = var_r31->unk_24; + } else { + fn_1_B8A0(object, 3); + var_f29 = var_r31->unk_24 / var_f30; + } + CharModelMotionSpeedSet(var_r31->unk_00, var_f29); + } + } else { + var_r31->unk_E0.x = var_r31->unk_E0.y = var_r31->unk_E0.z = 0.0f; + if (var_r31->unk_28 && CharModelMotionShiftIDGet(var_r31->unk_00) < 0) { + fn_1_B8A0(object, 0); + } + } + PSVECSubtract(&var_r31->unk_D4, &var_r31->unk_104, &sp1C); + if (fn_1_26F8() == 2) { + sp1C.y += -5.8333335f * var_r31->unk_148; + } + PSMTXMultVec(var_r31->unk_224, &sp1C, &sp1C); + PSVECAdd(&sp1C, &var_r31->unk_E0, &sp1C); + sp10 = sp1C; + sp10.y = 0.0f; + var_f31 = sp8 = PSVECMag(&sp10); + if (var_f31 > 150.0f) { + var_f31 = 150.0f / var_f31; + sp1C.x = sp1C.x * var_f31; + sp1C.z *= var_f31; + } + sp1C.y = 80.0f; + var_r31->unk_EC = sp1C; + spC = atan2d(sp1C.x, sp1C.z); + PSMTXMultVec(var_r31->unk_1C4, &sp1C, &sp1C); + PSVECAdd(&sp1C, &var_r31->unk_F8, &var_r31->unk_D4); + if (var_r31->unk_13C >= 0.95f) { + var_r31->unk_3C = 1; + return; + } + PSQUATNormalize(&var_r31->unk_194, &sp28); + if (sp28.w < cos(0.4363323129985824)) { + var_r31->unk_3C = 1; + } +} + +void fn_1_9FF0(omObjData *object) +{ + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + float var_f26; + float var_f25; + float var_f24; + float var_f23; + + UnkM417Struct10 *var_r31; + s32 var_r30; + UnkM417Struct2 *var_r29; + s32 var_r28; + + var_r31 = object->data; + { + Quaternion sp3C; + Quaternion sp2C = { 0.0f, 0.0f, 0.0f, 1.0f }; + Vec sp20; + Vec sp14; + Vec sp8 = { 0.0f, 0.0f, 0.0f }; + + if (fn_1_26F8() == 2) { + var_r31->unk_148 += 0.0011111111f; + if (var_r31->unk_148 > 1.0f) { + var_r31->unk_148 = 1.0f; + } + } + var_r31->unk_1B4 = var_r31->unk_1A4; + PSMTXCopy(var_r31->unk_1F4, var_r31->unk_224); + var_r31->unk_104 = var_r31->unk_F8; + var_f31 = fn_1_75BC(); + for (var_r30 = 0; var_r30 < 8; var_r30++) { + var_f29 = 45.0f * var_r30; + var_f31 += fn_1_78BC(0.5 * (150.0 * sind(var_f29)), 0.0f, 0.5 * (150.0 * cosd(var_f29))); + } + var_f31 *= 0.11111111f; + var_r31->unk_F8.y = var_r31->unk_F8.y + var_r31->unk_98; + if (var_f31 > var_r31->unk_F8.y || (!var_r31->unk_30 && fn_1_26F8() != 2)) { + var_r31->unk_F8.y = var_r31->unk_F8.y + (0.1388889f * (var_f31 - var_r31->unk_F8.y)); + var_r31->unk_98 = var_r31->unk_F8.y - var_r31->unk_104.y; + var_r31->unk_98 += -0.27222225f; + var_r31->unk_30 = 0; + } else { + var_r31->unk_98 = var_r31->unk_F8.y - var_r31->unk_104.y; + var_r31->unk_98 += -0.8166667f; + var_r31->unk_30 = 1; + } + if (var_r31->unk_40) { + var_r31->unk_12C += 1.0f / 60.0f; + if (var_r31->unk_12C > 2.0f) { + var_r31->unk_12C = 2.0f; + } + } + var_r31->unk_130 += 1.0f / 60.0f; + var_f28 = 0.1f * var_r31->unk_130; + var_f26 = fmod(var_f28, 1.0); + var_f25 = var_f26; + var_r31->unk_134 = 360.0f * var_f25; + var_f27 = var_r31->unk_130; + var_f24 = fmod(var_f27, 1.0); + var_f23 = var_f24; + var_r31->unk_138 = 0.04712389037013054 * sind((360.0f * var_f23)); + + sp8.x = sind(var_r31->unk_134); + sp8.y = 0.0f; + sp8.z = cosd(var_r31->unk_134); + C_QUATRotAxisRad(&var_r31->unk_164, &sp8, var_r31->unk_138 * var_r31->unk_12C); + if (!var_r31->unk_40) { + sp20 = var_r31->unk_EC; + sp20.y = 0.0f; + var_f31 = (2.0f / 300.0f) * PSVECMag(&sp20); + if (var_f31 <= 0.0f) { + var_f31 = 0.0f; + sp8.x = 1.0f; + sp8.y = sp8.z = 0.0f; + } else { + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + sp8.x = sp20.z; + sp8.y = 0.0f; + sp8.z = -sp20.x; + } + C_QUATRotAxisRad(&var_r31->unk_174, &sp8, 0.09424778f * var_f31); + if (!var_r31->unk_30 && !var_r31->unk_40) { + for (var_r29 = fn_1_7A28(); var_r29->unk_00 > -2; var_r29++) { + if (var_r29->unk_00 >= 0 && var_r29->unk_00 < 16) { + var_r28 = var_r29->unk_00; + var_f31 = var_r29->unk_08 * var_r29->unk_0C; + if (var_r31->unk_254[var_r28].y <= var_f31) { + var_r31->unk_254[var_r28].y += 0.044444446f; + var_r31->unk_254[var_r28].x = var_r29->unk_04; + } + if (fn_1_26F8() == 2 && var_r31->unk_254[var_r28].z <= var_f31) { + var_r31->unk_254[var_r28].z += 0.08888889f; + } + } + } + } + } + sp2C.w = 1.0f; + sp2C.x = sp2C.y = sp2C.z = 0.0f; + + sp20.x = sp20.y = sp20.z = 0.0f; + + var_f30 = 0.0f; + for (var_r30 = 0; var_r30 < 16; var_r30++) { + if (var_r31->unk_254[var_r30].z > 0.0f) { + var_f30 += 0.5f * var_r31->unk_254[var_r30].z; + if (var_r31->unk_30 == 0) { + var_r31->unk_254[var_r30].z -= 1.0f / 60.0f; + if (var_r31->unk_254[var_r30].z < 0.0f) { + var_r31->unk_254[var_r30].z = 0.0f; + } + } + } + if (var_r31->unk_254[var_r30].y > 0.0f) { + sp20.x += var_r31->unk_254[var_r30].y * sind(var_r31->unk_254[var_r30].x); + sp20.z += var_r31->unk_254[var_r30].y * cosd(var_r31->unk_254[var_r30].x); + var_r31->unk_254[var_r30].y -= 0.012820514f; + if (var_r31->unk_254[var_r30].y < 0.0f) { + var_r31->unk_254[var_r30].y = 0.0f; + } + } + } + if (var_f30 > 1.0f) { + var_f30 = 1.0f; + } + var_f30 *= 1.0f / 60.0f; + var_f30 *= var_r31->unk_148; + var_r31->unk_144 = var_r31->unk_144 + (0.1f * (var_f30 - var_r31->unk_144)); + var_f31 = 90.0 + (atan2d(sp20.x, sp20.z)); + sp8.x = sind(var_f31); + sp8.y = 0.0f; + sp8.z = cosd(var_f31); + var_f29 = PSVECMag(&sp20); + if (var_f29 > 0.5f) { + var_f29 = 0.5f; + } + C_QUATRotAxisRad(&sp2C, &sp8, 3.1415927f * var_f29 * 0.18f); + if (!var_r31->unk_40) { + if (fn_1_26F8() == 2) { + sp20 = var_r31->unk_EC; + sp20.y = 0.0f; + var_f31 = PSVECMag(&sp20); + var_f29 = 0.006666667f * var_f31; + if (var_f31 > 0.0f) { + PSVECNormalize(&sp20, &sp20); + } + PSVECSubtract(&sp20, &var_r31->unk_14C, &sp14); + if (PSVECMag(&sp14)) { + PSVECNormalize(&sp14, &sp14); + } + PSVECScale(&sp14, &sp14, (0.0033333336f * var_f29) + var_r31->unk_144); + PSVECAdd(&var_r31->unk_14C, &sp14, &var_r31->unk_14C); + } else { + PSVECScale(&var_r31->unk_14C, &var_r31->unk_14C, 0.98f); + } + var_r31->unk_14C.y = 0.0f; + var_f31 = PSVECMag(&var_r31->unk_14C); + if (var_f31 > 1.0f) { + var_f31 = 1.0f / var_f31; + var_r31->unk_14C.x *= var_f31; + var_r31->unk_14C.z *= var_f31; + var_f31 = 1.0f; + } + var_r31->unk_13C = var_f31; + var_r31->unk_140 = atan2d(var_r31->unk_14C.x, var_r31->unk_14C.z); + if (var_f31 > 0.0f) { + sp8.x = var_r31->unk_14C.z; + sp8.y = 0.0f; + sp8.z = -var_r31->unk_14C.x; + } else { + sp8.x = 1.0f; + sp8.y = sp8.z = 0.0f; + } + C_QUATRotAxisRad(&var_r31->unk_184, &sp8, 0.9424779f * var_f31); + } else { + sp8.x = var_r31->unk_14C.z; + sp8.y = 0.0f; + sp8.z = -var_r31->unk_14C.x; + C_QUATRotAxisRad(&sp3C, &sp8, M_PI); + C_QUATSlerp(&var_r31->unk_184, &sp3C, &var_r31->unk_184, 0.027777778f); + } + PSQUATMultiply(&var_r31->unk_174, &var_r31->unk_184, &var_r31->unk_194); + PSQUATMultiply(&var_r31->unk_164, &var_r31->unk_194, &var_r31->unk_194); + PSQUATMultiply(&sp2C, &var_r31->unk_194, &var_r31->unk_194); + PSMTXQuat(var_r31->unk_1C4, &var_r31->unk_194); + PSMTXInverse(var_r31->unk_1C4, var_r31->unk_1F4); + PSQUATInverse(&var_r31->unk_194, &var_r31->unk_1A4); + } +} + +void fn_1_AD24(omObjData *object) +{ + UnkM417Struct10 *var_r30; + + var_r30 = object->data; + Hu3DModelPosSetV(object->model[0], &var_r30->unk_D4); + Hu3DModelRotSet(object->model[0], 0.0f, var_r30->unk_64, 0.0f); + Hu3DModelPosSetV(object->model[1], &var_r30->unk_F8); + PSMTXCopy(var_r30->unk_1C4, Hu3DData[object->model[1]].unk_F0); +} + +void fn_1_ADC4(omObjData *object) +{ + Vec sp28; + Vec sp1C; + Vec sp10; + + float var_f31; + float var_f30; + + UnkM417Struct10 *var_r31; + s32 var_r30; + s32 var_r29; + + var_r31 = object->data; + { + float sp8[2] = { 30.000002f, 80.0f }; + + if (!var_r31->unk_84) { + sp28 = var_r31->unk_14C; + sp28.y = 0.0f; + var_f31 = 0.75f + (2.5f * (var_r31->unk_74 * var_r31->unk_74)); + PSVECScale(&sp28, &sp28, 150.0f * -var_f31); + var_f31 = PSVECMag(&sp28); + if (var_f31 > 150.0f) { + var_f31 = 150.0f / var_f31; + sp28.x *= var_f31; + sp28.z *= var_f31; + } + sp28.x += (100.0 * ((0.9f - (0.3f * var_r31->unk_74)) * ((0.002 * (float)frandmod(1000)) - 1.0))); + sp28.z += (100.0 * ((0.9f - (0.3f * var_r31->unk_74)) * ((0.002 * (float)frandmod(1000)) - 1.0))); + sp1C = var_r31->unk_110; + sp1C.y = 0.0f; + PSVECSubtract(&sp28, &sp1C, &sp10); + var_f31 = PSVECMag(&sp10); + if (var_f31 > (100.0f * (1.2f - (0.3f * var_r31->unk_74)))) { + var_r31->unk_110 = sp28; + } + var_r31->unk_84 = 60.0f * ((0.23f - (0.04f * var_r31->unk_74)) + (0.001f * ((0.4f - (0.15f * var_r31->unk_74)) * frandmod(1000)))); + } else { + var_r31->unk_84--; + } + sp28 = var_r31->unk_110; + sp28.y = 0.0f; + sp1C = var_r31->unk_EC; + sp1C.y = 0.0f; + PSVECSubtract(&sp28, &sp1C, &sp10); + var_f31 = PSVECMag(&sp10); + if (var_r31->unk_48) { + var_r30 = 1; + } else { + var_r30 = 0; + } + var_r29 = var_r30; + if (var_f31 > sp8[var_r29]) { + var_r31->unk_48 = 0; + var_r31->unk_20 = fn_1_2F08(var_r31->unk_64, atan2d(sp10.x, sp10.z), 0.5f); + var_f30 = 0.014285714f * var_f31; + if (var_f30 > 1.0f) { + var_f30 = 1.0f; + } + var_r31->unk_24 = var_f30; + return; + } + var_r31->unk_48 = 1; + var_r31->unk_110 = var_r31->unk_EC; + } +} + +void fn_1_B2C0(omObjData *object) +{ + UnkM417Struct10 *var_r31; + s32 var_r29; + + var_r31 = object->data; + var_r29 = 0; + if (var_r31->unk_90) { + var_r31->unk_90--; + } else { + var_r31->unk_88 = 1.0f; + if (frandmod(1000) < 500) { + var_r31->unk_88 = -1.0f; + } + var_r31->unk_8C = 0.001f * frandmod(1000); + var_r31->unk_90 = 0.15f * frandmod(1000); + } + var_r31->unk_20 = var_r31->unk_B4.x + (90.0f * var_r31->unk_88); + var_r31->unk_24 = 0.5f + (0.5f * var_r31->unk_74); + if (lbl_1_bss_884 >= object->work[0]) { + if (lbl_1_bss_880) { + lbl_1_bss_880--; + } else { + lbl_1_bss_880 = 60.0f * (8.0f + (0.004f * frandmod(1000))); + } + } + lbl_1_bss_884 = object->work[0]; + if (var_r31->unk_2C) { + if (!var_r31->unk_4C && lbl_1_bss_880 < 132.0f && lbl_1_bss_880 > 30.0f) { + var_r31->unk_80 = 0; + var_r29 = 1; + } + if (!var_r31->unk_80) { + if (var_r29) { + var_r31->unk_80 = lbl_1_bss_880; + var_r31->unk_80 -= (60.0f * (0.16f + (0.6f * (0.1f + (0.5f * var_r31->unk_74))))); + var_r31->unk_4C = 1; + if (var_r31->unk_80 > 240.0f) { + var_r31->unk_80 = 1; + } + } else { + var_r31->unk_80 = 60.0f * (0.00080000004f * ((1.05f - var_r31->unk_74) * frandmod(1000))); + var_r31->unk_80 += (var_r31->unk_8C * (30.0f + (0.03f * frandmod(1000)))); + } + } else { + var_r31->unk_80--; + if (!var_r31->unk_80) { + var_r31->unk_10 |= 256; + var_r31->unk_7C = (0.5f * var_r31->unk_74) + (((1.2f * var_r31->unk_74) / 1000.0f) * frandmod(1000)); + if (var_r31->unk_7C < 0.25f) { + var_r31->unk_7C = 0.25f; + } + if (var_r31->unk_4C) { + var_r31->unk_7C = 0.0f; + } + var_r31->unk_4C = 0; + } + } + } + if (var_r31->unk_34 && ((var_r31->unk_E0.y < 0.0f && var_r31->unk_B0 < var_r31->unk_7C) || !lbl_1_bss_880)) { + var_r31->unk_10 |= 256; + } +} + +void fn_1_B8A0(omObjData *object, u32 arg1) +{ + float var_f31; + + UnkM417Struct10 *var_r30; + + var_r30 = object->data; + if (var_r30->unk_08 != arg1 && arg1 < 11) { + var_f31 = 60.0f * lbl_1_data_114[arg1].unk_04; + if (var_r30->unk_08 < 0) { + var_f31 = 0.0f; + } + var_r30->unk_08 = arg1; + CharModelMotionShiftSet( + var_r30->unk_00, object->motion[lbl_1_data_114[arg1].unk_00], 60.0f * lbl_1_data_114[arg1].unk_08, var_f31, lbl_1_data_114[arg1].unk_10); + if (lbl_1_data_114[arg1].unk_0C >= 0.0f) { + Hu3DMotionShiftStartEndSet(*object->model, 60.0f * lbl_1_data_114[arg1].unk_08, 60.0f * lbl_1_data_114[arg1].unk_0C); + } + } +} + +s32 fn_1_BA2C(omObjData *object) +{ + UnkM417Struct10 *var_r31; + s32 var_r30; + + var_r31 = object->data; + var_r30 = 0; + if (CharModelMotionEndCheck(var_r31->unk_00) && CharModelMotionShiftIDGet(var_r31->unk_00) < 0) { + var_r30 = 1; + } + return var_r30; +} + +s32 fn_1_BAA0(omObjData *object, u32 arg1) +{ + s32 var_r27; + + var_r27 = 0; + if (fn_1_BA2C(object)) { + fn_1_B8A0(object, arg1); + var_r27 = 1; + } + return var_r27; +} + +void fn_1_BC70(float arg8, float arg9, Quaternion *arg0) +{ + arg0->x = arg9; + arg0->y = arg8; + arg0->w = (2.0f * -arg8) / (arg9 * arg9); + arg0->z = -arg0->w * arg9; +} diff --git a/src/REL/m417Dll/sequence.c b/src/REL/m417Dll/sequence.c new file mode 100644 index 00000000..672218a7 --- /dev/null +++ b/src/REL/m417Dll/sequence.c @@ -0,0 +1,203 @@ +#include "ext_math.h" +#include "game/audio.h" +#include "game/hsfdraw.h" +#include "game/minigame_seq.h" +#include "game/objsub.h" + +#include "REL/m417Dll.h" + +typedef struct UnkM417Struct7 { + /* 0x00 */ char unk00[0x10]; + /* 0x10 */ u32 unk_10; + /* 0x14 */ char unk14[0x10]; + /* 0x24 */ s32 unk_24; + /* 0x28 */ u32 unk_28; + /* 0x2C */ s32 unk_2C[4]; + /* 0x3C */ s32 unk_3C[4]; + /* 0x3C */ s32 unk_4C[4]; + /* 0x5C */ u32 unk_5C; +} UnkM417Struct7; /* size = unknown */ + +void fn_1_BD9C(omObjData *object); +void fn_1_BFB0(omObjData *object); +void fn_1_C050(omObjData *object); +void fn_1_C434(omObjData *object); +void fn_1_C78C(omObjData *object); + +extern omObjData *lbl_1_bss_8AC; +extern s32 lbl_1_bss_8A8; + +omObjFunc fn_1_BCAC(Process *arg0) +{ + CRot.x = -80.5f; + CRot.y = CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 0.0f; + Center.z = 0.0f; + CZoom = 1000.0f; + lbl_1_bss_8AC = omAddObjEx(arg0, 30, 1, 0, -1, fn_1_BFB0); + return fn_1_BD9C; +} + +void fn_1_BD9C(omObjData *object) +{ + Vec sp8; + + float var_f31; + + UnkM417Struct7 *var_r31; + s32 var_r29; + + var_r31 = object->data; + { + Vec sp2C[2] = { { -400.0f, 0.0f, -200.0f }, { 0.0f, 150.0f, 0.0f } }; + Vec sp14[2] = { { -50.0f, 30.0f, 1500.0f }, { -50.0f, 0.0f, 2700.0f } }; + + var_r29 = 60; + fn_1_5B0(object); + if (var_r31->unk_10 < var_r29) { + var_f31 = 0.0f; + } else { + var_f31 = 0.0055555557f * (var_r31->unk_10 - var_r29); + } + PSVECSubtract(&sp2C[1], &sp2C[0], &sp8); + PSVECScale(&sp8, &sp8, var_f31); + PSVECAdd(&sp2C[0], &sp8, &sp8); + Center.x = sp8.x; + Center.y = sp8.y; + Center.z = sp8.z; + PSVECSubtract(&sp14[1], &sp14[0], &sp8); + PSVECScale(&sp8, &sp8, var_f31); + PSVECAdd(&sp14[0], &sp8, &sp8); + CRot.x = sp8.x; + CRot.y = sp8.y; + CRot.z = 0.0f; + CZoom = sp8.z; + if (var_f31 >= 1.0f) { + fn_1_800(object); + } + } +} + +void fn_1_BFB0(omObjData *object) +{ + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M417, 5)); + object->trans.x = -300.0f; + object->trans.z = -200.0f; + object->trans.y = 0.0f; + object->rot.y = 20.0f; + object->work[0] = object->work[1] = 0; + object->func = fn_1_C050; +} + +void fn_1_C050(omObjData *object) +{ + float var_f31; + float var_f30; + + object->work[0] += 1; + switch (object->work[1]) { + case 0: + if (object->work[0] > 0.0f) { + fn_1_7510(-object->trans.x, object->trans.y, -object->trans.z, 1.0f); + object->work[0] = 0; + object->work[1] += 1; + } + break; + case 1: + if (object->work[0] == 60.0f) { + omVibrate(0, 12, 6, 6); + omVibrate(1, 12, 6, 6); + omVibrate(2, 12, 6, 6); + omVibrate(3, 12, 6, 6); + } + if (object->work[0] > 96.0f) { + object->work[0] = 0; + object->work[1] += 1; + } + break; + case 2: + var_f31 = 3.0f * object->work[0]; + object->rot.z = var_f31; + var_f30 = 0.5 + (0.5 * -cosd(var_f31)); + object->trans.x = -300.0f - (200.0f * var_f30); + object->trans.z = -200.0f - (50.0f * var_f30); + var_f31 = 6.0f * object->work[0]; + if (var_f31 >= 180.0f) { + var_f30 = 0.5 + (0.5 * cosd(var_f31)); + object->trans.y += -5.0f * var_f30; + } + if (object->work[0] > 60.0f) { + object->work[0] = 0; + object->work[1] += 1; + } + break; + default: + object->work[2] = 0; + object->func = fn_1_C434; + break; + } + object->trans.y += 0.05f * (fn_1_78BC(object->trans.x, 0.0f, object->trans.z) - object->trans.y); +} + +void fn_1_C434(omObjData *object) +{ + float var_f31; + + object->work[0] = (object->work[0] + 1) % 120; + var_f31 = 6.0f * object->work[0]; + object->rot.z = 180.0 + (10.0 * sind(var_f31)); + var_f31 = 3.0f * object->work[0]; + object->rot.x = 5.0 * sind(var_f31); + if (object->work[2] < 120.0f) { + object->work[2] += 1; + } + var_f31 = 100.0f * (-2.0f * (0.008333334f * object->work[2])); + object->trans.y += 0.1f * ((var_f31 + fn_1_78BC(object->trans.x, 0.0f, object->trans.z)) - object->trans.y); +} + +omObjFunc fn_1_C658(Process *arg0, omObjData *object) +{ + UnkM417Struct7 *var_r31; + s32 var_r30; + s32 var_r29; + s16 var_r28; + s16 var_r27; + + var_r31 = object->data; + var_r29 = 1; + if (var_r31->unk_5C == 2) { + var_r29 = 0; + } + for (var_r30 = 0; var_r30 < 4; var_r30++) { + var_r31->unk_4C[var_r30] = -1; + if (!var_r31->unk_2C[var_r30] == var_r29) { + var_r31->unk_4C[var_r30] = var_r31->unk_3C[var_r30]; + } + } + for (var_r30 = 0; var_r30 < 4; var_r30++) { + if (var_r31->unk_4C[var_r30] >= 0) { + GWPlayerCoinWinAdd(var_r30, 10); + } + } + HuAudSStreamPlay(1); + var_r31->unk_24 = 1; + lbl_1_bss_8A8 = -1; + return fn_1_C78C; +} + +void fn_1_C78C(omObjData *object) +{ + UnkM417Struct7 *var_r31; + + var_r31 = object->data; + fn_1_5B0(object); + if (lbl_1_bss_8A8 < 0) { + lbl_1_bss_8A8 = MGSeqCreate(5, 3, var_r31->unk_4C[0], var_r31->unk_4C[1], var_r31->unk_4C[2], var_r31->unk_4C[3]); + return; + } + if (!MGSeqStatGet(lbl_1_bss_8A8) && var_r31->unk_28 >= 210.0f) { + var_r31->unk_24 = 2; + fn_1_800(object); + } +} diff --git a/src/REL/m417Dll/water.c b/src/REL/m417Dll/water.c new file mode 100644 index 00000000..765b268f --- /dev/null +++ b/src/REL/m417Dll/water.c @@ -0,0 +1,1097 @@ +#include "ext_math.h" +#include "game/audio.h" +#include "game/hsfdraw.h" +#include "game/hsfmotion.h" +#include "game/sprite.h" + +#include "REL/m417Dll.h" + +typedef struct UnkM417Struct3 { + /* 0x00 */ s16 unk_00; + /* 0x02 */ char unk02[4]; + /* 0x06 */ s16 unk_06; + /* 0x08 */ Vec unk_08; + /* 0x14 */ Vec unk_14; + /* 0x20 */ float unk_20; + /* 0x24 */ float unk_24; + /* 0x28 */ float unk_28; + /* 0x2C */ float unk_2C; + /* 0x30 */ float unk_30; + /* 0x34 */ float unk_34; +} UnkM417Struct3; /* size = 0x38 */ + +typedef struct UnkM417Struct5 { + /* 0x00 */ Vec unk_00; + /* 0x0C */ float unk_0C; + /* 0x10 */ float unk_10; + /* 0x14 */ float unk_14; + /* 0x18 */ float unk_18; + /* 0x1C */ s32 unk_1C; + /* 0x20 */ float *unk_20; + /* 0x24 */ u16 *unk_24; +} UnkM417Struct5; /* size = 0x28 */ + +typedef struct UnkM417Struct6 { + /* 0x00 */ u32 unk_00; + /* 0x04 */ Vec unk_04; + /* 0x10 */ float unk_10; + /* 0x14 */ float unk_14; + /* 0x18 */ float unk_18; + /* 0x1C */ float unk_1C; + /* 0x20 */ float unk_20; + /* 0x24 */ float unk_24; + /* 0x28 */ float unk_28; + /* 0x2C */ s32 unk_2C; + /* 0x30 */ char unk30[0x30]; +} UnkM417Struct6; /* size = 0x60 */ + +typedef struct UnkM417Struct4 { + /* 0x00 */ float unk_00; // maybe Vec + /* 0x04 */ float unk_04; + /* 0x08 */ float unk_08; + /* 0x0C */ Vec unk_0C; + /* 0x18 */ u32 unk_18; + /* 0x1C */ u16 *unk_1C; + /* 0x20 */ float *unk_20; + /* 0x24 */ float *unk_24; + /* 0x28 */ s32 *unk_28; + /* 0x2C */ Vec *unk_2C; + /* 0x30 */ Vec *unk_30; + /* 0x34 */ Vec *unk_34; + /* 0x38 */ u16 (*unk_38)[4]; + /* 0x3C */ UnkM417Struct5 unk_3C[3]; + /* 0xB4 */ UnkM417Struct6 unk_B4[16]; + /* 0x6B4 */ s32 unk_6B4; + /* 0x6B8 */ float unk_6B8; + /* 0x6BC */ Vec *unk_6BC[2]; + /* 0x6C4 */ Vec *unk_6C4[2]; + /* 0x6CC */ GXColor *unk_6CC[2]; + /* 0x6D4 */ Vec2f *unk_6D4[2]; + /* 0x6DC */ s32 unk_6DC; + /* 0x6E0 */ void *unk_6E0[2]; + /* 0x6E8 */ s32 unk_6E8[2]; + /* 0x6F0 */ u32 unk_6F0; + /* 0x6F4 */ void *unk_6F4; + /* 0x6F8 */ char unk6F8[8]; +} UnkM417Struct4; /* size = 0x700 */ + +float fn_1_2F08(float arg8, float arg9, float arg10); +void fn_1_3400(omObjData *object); +void fn_1_3534(omObjData *object); +UnkM417Struct3 *fn_1_3574(omObjData *object, s16 arg1, s16 arg2); +void fn_1_37A0(omObjData *object, UnkM417Struct3 *arg1); +void fn_1_3B1C(omObjData *object, UnkM417Struct3 *arg1); +void fn_1_3BC4(omObjData *object); +void fn_1_3D54(omObjData *object); +void fn_1_3D58(omObjData *object); +void fn_1_57B0(omObjData *object); +void fn_1_5E3C(omObjData *object); +void fn_1_604C(ModelData *model, Mtx mtx); +void fn_1_6B04(ModelData *model, Mtx mtx); +void fn_1_6B60(ModelData *model, Mtx mtx); +void fn_1_6B94(ModelData *model, ParticleData *particle, Mtx mtx); +void fn_1_6D64(s32 arg0, u32 arg1, float arg8, float arg9, float argA); + +omObjData *lbl_1_bss_878; +UnkM417Struct4 lbl_1_bss_178; +UnkM417Struct2 lbl_1_bss_68[17]; +AnimData *lbl_1_bss_64; +AnimData *lbl_1_bss_60; +AnimData *lbl_1_bss_5C; +s16 lbl_1_bss_58; +char lbl_1_bss_28[0x30]; // unused, might be in main.c + +void fn_1_3274(Process *arg0) +{ + omObjData *var_r31; + s32 var_r30; + + lbl_1_bss_64 = HuSprAnimRead(HuDataReadNum(3145742, MEMORY_DEFAULT_NUM)); + lbl_1_bss_60 = HuSprAnimRead(HuDataReadNum(3145744, MEMORY_DEFAULT_NUM)); + lbl_1_bss_5C = HuSprAnimRead(HuDataReadNum(3145743, MEMORY_DEFAULT_NUM)); + var_r31 = omAddObjEx(arg0, 30, 9, 0, -1, fn_1_3400); + var_r31->work[0] = 0; + var_r31 = lbl_1_bss_878 = omAddObjEx(arg0, 31, 5, 0, -1, fn_1_3BC4); + var_r31->work[0] = 0; + for (var_r30 = 0; var_r30 < 16; var_r30++) { + lbl_1_bss_68[var_r30].unk_00 = -1; + } + lbl_1_bss_68[var_r30].unk_00 = -2; +} + +void fn_1_33B4(void) +{ + HuSprAnimKill(lbl_1_bss_64); + HuSprAnimKill(lbl_1_bss_60); + HuSprAnimKill(lbl_1_bss_5C); +} + +void fn_1_3400(omObjData *object) +{ + omSetTra(object, 0.0f, 0.0f, 0.0f); + object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M417, 0)); + Hu3DModelLayerSet(object->model[0], 0); + object->model[3] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M417, 4)); + Hu3DModelLayerSet(object->model[3], 3); + object->model[2] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M417, 2)); + Hu3DModelLayerSet(object->model[2], 5); + Hu3DModelAttrSet(object->model[2], 0x40000001); + Hu3DMotionSpeedSet(object->model[2], 0.7f); + object->data = fn_1_3574(object, 5, 3); + HuAudFXPlay(1480); + object->func = fn_1_3534; +} + +void fn_1_3534(omObjData *object) +{ + fn_1_37A0(object, object->data); + fn_1_3B1C(object, object->data); +} + +UnkM417Struct3 *fn_1_3574(omObjData *arg0, s16 arg1, s16 arg2) +{ + float var_f31; + float var_f30; + float var_f29; + + UnkM417Struct3 *var_r31; // size 0x38 + UnkM417Struct3 *var_r30; + s32 var_r29; + + var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, arg2 * sizeof(UnkM417Struct3), MEMORY_DEFAULT_NUM); + memset(var_r30, 0, arg2 * sizeof(UnkM417Struct3)); + var_f31 = -200.0f; + var_r31 = var_r30; + for (var_r29 = 0; var_r29 < arg2; var_r29++, var_r31++, arg1++) { + var_r31->unk_00 = arg1; + arg0->model[arg1] = Hu3DModelCreate(HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_M417, 3), MEMORY_DEFAULT_NUM, HEAP_DATA)); + Hu3DModelLayerSet(arg0->model[var_r31->unk_00], 0); + var_f30 = frandmod(360); + var_f29 = frandmod(640); + var_r31->unk_08.x = var_f29 * sind(var_f30); + var_r31->unk_08.y = var_f31; + var_r31->unk_08.z = var_f29 * cosd(var_f30); + var_r31->unk_28 = frandmod(360); + var_r31->unk_30 = 1.0f; + var_r31->unk_34 = 0.0f; + var_f31 -= 80.0f; + var_r31->unk_06 = arg2; + } + return var_r30; +} + +void fn_1_37A0(omObjData *object, UnkM417Struct3 *arg1) +{ + Vec sp8; + + float var_f31; + float var_f30; + + s32 var_r30; + s32 var_r29; + s32 var_r28; + + var_r28 = arg1->unk_06; + for (var_r30 = 0; var_r30 < var_r28; var_r30++, arg1++) { + var_r29 = 0; + if (arg1->unk_30 > arg1->unk_34) { + var_r29 = 1; + } else { + PSVECSubtract(&arg1->unk_14, &arg1->unk_08, &sp8); + var_f31 = PSVECMag(&sp8); + if (var_f31 < 50.0f) { + var_r29 = 1; + } + } + if (var_r29) { + var_f31 = frandmod(360); + var_f30 = 200.0f + frandmod(550); + arg1->unk_14.x = var_f30 * sind(var_f31); + arg1->unk_14.z = var_f30 * cosd(var_f31); + arg1->unk_14.y = arg1->unk_08.y; + arg1->unk_30 = 0.0f; + arg1->unk_34 = 200.0f + frandmod(600); + arg1->unk_24 = 0.0f; + } + PSVECSubtract(&arg1->unk_14, &arg1->unk_08, &sp8); + arg1->unk_2C = atan2d(sp8.x, sp8.z); + arg1->unk_28 = fn_1_2F08(arg1->unk_28, arg1->unk_2C, 0.05f); + arg1->unk_24 += (0.05f * (300.0f - arg1->unk_24)); + arg1->unk_20 += (0.2f * (arg1->unk_24 - arg1->unk_20)); + arg1->unk_08.x += (((1.0f / 60.0f) * arg1->unk_20) * sind(arg1->unk_28)); + arg1->unk_08.z += (((1.0f / 60.0f) * arg1->unk_20) * cosd(arg1->unk_28)); + arg1->unk_30 += (1.0f / 60.0f) * arg1->unk_20; + } +} + +void fn_1_3B1C(omObjData *object, UnkM417Struct3 *arg1) +{ + s32 var_r30; + s32 var_r28; + + var_r28 = arg1->unk_06; + for (var_r30 = 0; var_r30 < var_r28; var_r30++, arg1++) { + Hu3DModelPosSetV(object->model[arg1->unk_00], &arg1->unk_08); + Hu3DModelRotSet(object->model[arg1->unk_00], 0.0f, arg1->unk_28, 0.0f); + } +} + +void fn_1_3BC4(omObjData *object) +{ + s16 var_r30; + + omSetTra(object, 0.0f, 0.0f, 0.0f); + object->model[0] = Hu3DHookFuncCreate(fn_1_604C); + Hu3DModelLayerSet(object->model[0], 2); + object->model[1] = Hu3DHookFuncCreate(fn_1_6B04); + Hu3DModelLayerSet(object->model[1], 1); + object->model[2] = Hu3DHookFuncCreate(fn_1_6B60); + Hu3DModelLayerSet(object->model[2], 7); + var_r30 = Hu3DParticleCreate(HuSprAnimRead(HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_M417, 17), MEMORY_DEFAULT_NUM, HEAP_DATA)), 512); + object->model[3] = var_r30; + Hu3DModelLayerSet(var_r30, 4); + Hu3DParticleColSet(var_r30, 255, 255, 255); + Hu3DParticleHookSet(var_r30, fn_1_6B94); + Hu3DModelPosSet(var_r30, 0.0f, 0.0f, 0.0f); + Hu3DData[var_r30].unk_120->unk_00 = 0; + lbl_1_bss_58 = var_r30; + fn_1_3D58(object); + object->func = fn_1_3D54; +} + +void fn_1_3D54(omObjData *object) { } + +void fn_1_3D58(omObjData *object) +{ + Vec spC; + float sp8; + + float var_f31; + float var_f29; + float var_f28; + float var_f27; + + s32 var_r31; + s32 var_r30; + Vec *var_r28; + s32 var_r29; + u16(*var_r27)[4]; + s32 var_r26; + + Vec sp3C[3] = { { 0.0f, 0.0f, 700.0f }, { -609.0f, 0.0f, -350.0f }, { 609.0f, 0.0f, -350.0f } }; + Vec sp18[3] = { { 0.006f, -0.013333335f, 10.8f }, { 0.0045f, -0.010000001f, 9.6f }, { 0.0033f, -0.0066666673f, 12.0f } }; + + lbl_1_bss_178.unk_00 = 0.0f; + lbl_1_bss_178.unk_04 = 0.0f; + lbl_1_bss_178.unk_08 = 0.0f; + lbl_1_bss_178.unk_0C.x = 0.0f; + lbl_1_bss_178.unk_0C.y = 1.0f; + lbl_1_bss_178.unk_0C.z = 0.0f; + lbl_1_bss_178.unk_20 = HuMemDirectMallocNum(HEAP_SYSTEM, 30 * 36 * sizeof(float), MEMORY_DEFAULT_NUM); + lbl_1_bss_178.unk_28 = HuMemDirectMallocNum(HEAP_SYSTEM, 1080 * sizeof(s32), MEMORY_DEFAULT_NUM); + lbl_1_bss_178.unk_24 = HuMemDirectMallocNum(HEAP_SYSTEM, 1080 * sizeof(float), MEMORY_DEFAULT_NUM); + lbl_1_bss_178.unk_1C = HuMemDirectMallocNum(HEAP_SYSTEM, 1080 * sizeof(s16), MEMORY_DEFAULT_NUM); + lbl_1_bss_178.unk_2C = HuMemDirectMallocNum(HEAP_SYSTEM, 30 * 36 * sizeof(Vec), MEMORY_DEFAULT_NUM); + lbl_1_bss_178.unk_30 = HuMemDirectMallocNum(HEAP_SYSTEM, 30 * 36 * sizeof(Vec), MEMORY_DEFAULT_NUM); + lbl_1_bss_178.unk_34 = HuMemDirectMallocNum(HEAP_SYSTEM, 30 * 36 * sizeof(Vec), MEMORY_DEFAULT_NUM); + lbl_1_bss_178.unk_38 = HuMemDirectMallocNum(HEAP_SYSTEM, 8120, MEMORY_DEFAULT_NUM); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + lbl_1_bss_178.unk_3C[var_r31].unk_20 = HuMemDirectMallocNum(HEAP_SYSTEM, 4320, MEMORY_DEFAULT_NUM); + lbl_1_bss_178.unk_3C[var_r31].unk_24 = HuMemDirectMallocNum(HEAP_SYSTEM, 2160, MEMORY_DEFAULT_NUM); + } + lbl_1_bss_178.unk_6B4 = 0; + lbl_1_bss_178.unk_6DC = 19296; + for (var_r31 = 0; var_r31 < 2; var_r31++) { + lbl_1_bss_178.unk_6BC[var_r31] = HuMemDirectMallocNum(HEAP_SYSTEM, 30 * 36 * sizeof(Vec), MEMORY_DEFAULT_NUM); + lbl_1_bss_178.unk_6C4[var_r31] = HuMemDirectMallocNum(HEAP_SYSTEM, 30 * 36 * sizeof(Vec), MEMORY_DEFAULT_NUM); + lbl_1_bss_178.unk_6CC[var_r31] = HuMemDirectMallocNum(HEAP_SYSTEM, 1080 * sizeof(GXColor), MEMORY_DEFAULT_NUM); + lbl_1_bss_178.unk_6D4[var_r31] = HuMemDirectMallocNum(HEAP_SYSTEM, 30 * 36 * sizeof(Vec2f), MEMORY_DEFAULT_NUM); + lbl_1_bss_178.unk_6E0[var_r31] = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_178.unk_6DC, MEMORY_DEFAULT_NUM); + DCFlushRange(lbl_1_bss_178.unk_6E0[var_r31], lbl_1_bss_178.unk_6DC); + lbl_1_bss_178.unk_6E8[var_r31] = 0; + } + lbl_1_bss_178.unk_6F0 = GXGetTexBufferSize(640, 480, 5, GX_FALSE, 0); + lbl_1_bss_178.unk_6F4 = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_178.unk_6F0, MEMORY_DEFAULT_NUM); + DCFlushRange(lbl_1_bss_178.unk_6F4, lbl_1_bss_178.unk_6F0); + lbl_1_bss_178.unk_6B8 = 30.0f; + var_r28 = lbl_1_bss_178.unk_2C; + var_f31 = 0.0f; + var_f29 = -900.0f; + var_f28 = 60.0f; + for (var_r31 = 0; var_r31 < 36; var_r31++) { + var_f31 = 26.666666f - var_f31; + for (var_r30 = 0; var_r30 < 30; var_r28++, var_r30++) { + var_r28->x = var_f31 + ((var_r30 * var_f28) - 900.0f); + var_r28->y = 0.0f; + var_r28->z = var_f29; + } + var_f29 += (var_f28 * sin(1.0471975511965976)); + } + var_r28 = lbl_1_bss_178.unk_2C; + var_r30 = 0; + var_r29 = 1080; + for (var_r31 = 0; var_r31 < 1080; var_r31++, var_r28++) { + var_f31 = PSVECMag(var_r28); + if (var_f31 > 850.0f) { + var_r29--; + lbl_1_bss_178.unk_28[var_r31] = 0; + lbl_1_bss_178.unk_1C[var_r31] = var_r29; + lbl_1_bss_178.unk_24[var_r29] = 0.0f; + var_f31 = 850.0f / var_f31; + PSVECScale(var_r28, var_r28, var_f31); + } else { + lbl_1_bss_178.unk_28[var_r31] = 1; + lbl_1_bss_178.unk_1C[var_r31] = var_r30; + lbl_1_bss_178.unk_24[var_r30] = 1.0f; + var_f31 = 750.0f - var_f31; + if (var_f31 < 100.0f) { + var_f31 *= 0.01f; + lbl_1_bss_178.unk_24[var_r30] = sqrtf(var_f31); + } + var_r30++; + } + } + lbl_1_bss_178.unk_18 = var_r30; + var_r28 = HuMemDirectMallocNum(HEAP_SYSTEM, 30 * 36 * sizeof(Vec), MEMORY_DEFAULT_NUM); + for (var_r31 = 0; var_r31 < 30 * 36; var_r31++) { + var_r28[lbl_1_bss_178.unk_1C[var_r31]] = lbl_1_bss_178.unk_2C[var_r31]; + } + HuMemDirectFree(lbl_1_bss_178.unk_2C); + lbl_1_bss_178.unk_2C = var_r28; + memset(lbl_1_bss_178.unk_30, 0, 30 * 36 * sizeof(Vec)); + var_r27 = lbl_1_bss_178.unk_38; + for (var_r31 = 0; var_r31 < 35; var_r31++) { + for (var_r30 = 0; var_r30 < 29; var_r27++, var_r30++) { + if ((var_r31 & 1) == 0) { + var_r29 = var_r30 + (var_r31 * 30); + (*var_r27)[0] = lbl_1_bss_178.unk_1C[var_r29]; + (*var_r27)[1] = lbl_1_bss_178.unk_1C[var_r29 + 30]; + (*var_r27)[2] = lbl_1_bss_178.unk_1C[var_r29 + 1]; + (*var_r27)[3] = lbl_1_bss_178.unk_1C[var_r29 + 31]; + } else { + var_r29 = var_r30 + (var_r31 * 30); + (*var_r27)[1] = lbl_1_bss_178.unk_1C[var_r29]; + (*var_r27)[3] = lbl_1_bss_178.unk_1C[var_r29 + 30]; + (*var_r27)[0] = lbl_1_bss_178.unk_1C[var_r29 + 1]; + (*var_r27)[2] = lbl_1_bss_178.unk_1C[var_r29 + 31]; + } + var_r31 == 1; + } + } + for (var_r31 = 0; var_r31 < 3; var_r31++) { + lbl_1_bss_178.unk_3C[var_r31].unk_00 = sp3C[var_r31]; + lbl_1_bss_178.unk_3C[var_r31].unk_0C = 0.0f; + lbl_1_bss_178.unk_3C[var_r31].unk_10 = 360.0f * sp18[var_r31].x; + lbl_1_bss_178.unk_3C[var_r31].unk_18 = 360.0f * sp18[var_r31].y; + lbl_1_bss_178.unk_3C[var_r31].unk_14 = sp18[var_r31].z; + var_r29 = -1; + var_f28 = 500000.0f; + var_r28 = lbl_1_bss_178.unk_2C; + for (var_r30 = 0; var_r30 < lbl_1_bss_178.unk_18; var_r30++) { + PSVECSubtract(var_r28++, &lbl_1_bss_178.unk_3C[var_r31].unk_00, &spC); + var_f31 = PSVECMag(&spC); + if (var_f31 < var_f28) { + var_r29 = var_r30; + var_f28 = var_f31; + } + } + lbl_1_bss_178.unk_3C[var_r31].unk_00 = lbl_1_bss_178.unk_2C[var_r29]; + var_r28 = lbl_1_bss_178.unk_2C; + var_r26 = 0; + for (var_r30 = 0; var_r30 < lbl_1_bss_178.unk_18; var_r30++) { + PSVECSubtract(var_r28++, &lbl_1_bss_178.unk_3C[var_r31].unk_00, &spC); + var_f31 = lbl_1_bss_178.unk_3C[var_r31].unk_10 * PSVECMag(&spC); + lbl_1_bss_178.unk_3C[var_r31].unk_20[var_r26] = var_f31; + for (var_r29 = 0; var_r29 <= var_r26; var_r29++) { + var_f29 = lbl_1_bss_178.unk_3C[var_r31].unk_20[var_r29] - var_f31; + if (fabs(var_f29) < 5.0) { + if (var_r29 == var_r26) { + var_r26++; + } + break; + } + } + lbl_1_bss_178.unk_3C[var_r31].unk_24[var_r30] = var_r29; + } + lbl_1_bss_178.unk_3C[var_r31].unk_1C = var_r26; + } + for (var_r31 = 0; var_r31 < 2; var_r31++) { + memcpy(lbl_1_bss_178.unk_6BC[var_r31], lbl_1_bss_178.unk_2C, 12960); + for (var_r30 = 0; var_r30 < 1080; var_r30++) { + lbl_1_bss_178.unk_6CC[var_r31][var_r30].r = 240; + lbl_1_bss_178.unk_6CC[var_r31][var_r30].g = 250; + lbl_1_bss_178.unk_6CC[var_r31][var_r30].b = 255; + lbl_1_bss_178.unk_6CC[var_r31][var_r30].a = 192; + } + for (var_r26 = 0, var_r30 = 0; var_r30 < 36; var_r30++) { + for (var_r29 = 0; var_r29 < 30; var_r29++) { + var_r26 = lbl_1_bss_178.unk_1C[var_r29 + (var_r30 * 30)]; + lbl_1_bss_178.unk_6D4[var_r31][var_r26].x = 0.000625f * lbl_1_bss_178.unk_2C[var_r26].x; + lbl_1_bss_178.unk_6D4[var_r31][var_r26].y = 0.000625f * lbl_1_bss_178.unk_2C[var_r26].z; + lbl_1_bss_178.unk_6D4[var_r31][var_r26].x *= 3.0f; + lbl_1_bss_178.unk_6D4[var_r31][var_r26].y *= 3.0f; + } + } + } + fn_1_57B0(object); + fn_1_5E3C(object); +} + +#pragma dont_inline on +void fn_1_4BC8(float arg8, float arg9) +{ + float var_f30; + float var_f28; + + UnkM417Struct6 *var_r31; + s32 var_r30; + + if (arg9 < 0.0f) { + arg9 = 0.0f; + } else if (arg9 > 1.0f) { + arg9 = 1.0f; + } + var_f30 = 1.0f - arg9; + var_f28 = var_f30; + arg9 = 0.5f + (0.5f * arg9); + var_f30 = 0.5f + (0.5f * var_f30); + var_r31 = &lbl_1_bss_178.unk_B4[0]; + + for (var_r30 = 0; var_r30 < 16; var_r30++, var_r31++) { + if (!var_r31->unk_00) { + var_r31->unk_00 = 1; + var_r31->unk_04.x = 700.0 * sind(180.0f + arg8); + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 700.0 * cosd(180.0f + arg8); + var_r31->unk_10 = arg8; + var_r31->unk_14 = 520.0f + (80.0f * var_f28); + var_r31->unk_14 *= 1.0f / 60.0f; + var_r31->unk_18 = 800.0f * arg9; + var_r31->unk_1C = 0.05f; + var_r31->unk_20 = arg9; + var_r31->unk_24 = 0.0f; + var_r31->unk_28 = 0.2f + (0.2f * var_f30); + var_r31->unk_2C = HuAudFXEmiterPlay(1484, &var_r31->unk_04); + return; + } + } +} +#pragma dont_inline reset + +void fn_1_4E64(omObjData *object) +{ + Mtx spC8; + Mtx sp98; + Mtx sp68; + ROMtx sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + + UnkM417Struct6 *var_r31; + u32 var_r30; + UnkM417Struct2 *var_r29; + GXColor *var_r28; + Vec *var_r27; + Vec *var_r26; + s32 var_r25; + + Vec sp8 = { 0.0f, 0.0f, 0.0f }; + var_r28 = lbl_1_bss_178.unk_6CC[lbl_1_bss_178.unk_6B4]; + for (var_r30 = 0; var_r30 < lbl_1_bss_178.unk_18; var_r30++) { + var_r28[var_r30].a += -(float)(var_r28[var_r30].a) * 0.15f; + } + var_r29 = &lbl_1_bss_68[0]; // looks like fn_1_7A28 but it doesn't get inlined + var_r31 = &lbl_1_bss_178.unk_B4[0]; + + for (var_r25 = 0; var_r25 < 16; var_r25++, var_r31++, var_r29++) { + var_r29->unk_00 = -1; + if (var_r31->unk_00 != 0) { + sp14.x = var_r31->unk_14 * sind(var_r31->unk_10); + sp14.y = 0.0f; + sp14.z = var_r31->unk_14 * cosd(var_r31->unk_10); + PSVECAdd(&var_r31->unk_04, &sp14, &var_r31->unk_04); + if (var_r31->unk_2C >= 0) { + HuAudFXEmiterUpDate(var_r31->unk_2C, &var_r31->unk_04); + } + if (PSVECMag(&var_r31->unk_04) > 800.0f && var_r31->unk_00 >= 2 && (var_r31->unk_1C -= 0.033333335f, var_r31->unk_1C < 0.0f)) { + var_r31->unk_00 = 0; + } else { + if (var_r31->unk_00 < 2) { + PSVECSubtract(&sp8, &var_r31->unk_04, &sp20); + if (PSVECDotProduct(&sp14, &sp20) <= 0.0f) { + var_r31->unk_00 = 2; + } else { + var_f31 = 1.2f * (PSVECMag(&sp20) / (var_r31->unk_18 * var_r31->unk_28)); + if (var_f31 < 1.2f) { + if (var_f31 > 1.0f) { + var_f31 = 5.0f * (1.2f - var_f31); + } + var_r29->unk_00 = var_r25; + var_r29->unk_08 = var_r31->unk_20; + var_r29->unk_04 = var_r31->unk_10; + var_r29->unk_0C = var_f31; + } + } + } else if (var_r31->unk_00 == 2 && PSVECMag(&var_r31->unk_04) > ((800.0f - (100.0f * (2.0f * var_r31->unk_20))) - 30.000002f)) { + var_r31->unk_00 = 3; + fn_1_6D64(lbl_1_bss_58, 0, var_r31->unk_10, 20.0f + (40.0f * var_r31->unk_20), var_r31->unk_20); + sp2C.x = sind(var_r31->unk_10); + sp2C.y = 0.0f; + sp2C.z = cosd(var_r31->unk_10); + PSVECScale(&sp2C, &sp2C, 800.0f); + HuAudFXEmiterPlay(1481, &sp2C); + if (var_r31->unk_2C >= 0) { + var_r31->unk_2C = -1; + } + } + var_r31->unk_1C += 0.016666668f; + if (var_r31->unk_1C > 1.0f) { + var_r31->unk_1C = 1.0f; + } + if (var_r31->unk_00 >= 2) { + var_r31->unk_24 += 0.016666668f; + if (var_r31->unk_24 > 1.0f) { + var_r31->unk_24 = 1.0f; + } + } + PSMTXTrans(spC8, var_r31->unk_04.x, var_r31->unk_04.y, var_r31->unk_04.z); + PSMTXRotRad(sp98, 89, 0.017453292f * var_r31->unk_10); + PSMTXConcat(spC8, sp98, sp68); + var_f31 = var_r31->unk_18 * var_r31->unk_1C; + PSMTXScale(spC8, var_f31, var_f31, var_f31 * var_r31->unk_28); + PSMTXConcat(sp68, spC8, sp98); + PSMTXInverse(sp98, spC8); + PSMTXReorder(spC8, sp38); + PSMTXROMultVecArray(sp38, lbl_1_bss_178.unk_2C, lbl_1_bss_178.unk_34, lbl_1_bss_178.unk_18); + sp2C.x = (0.15f * var_r31->unk_18) * (var_r31->unk_24 * sind(var_r31->unk_10)); + sp2C.y = 0.0f; + sp2C.z = (0.15f * var_r31->unk_18) * (var_r31->unk_24 * cosd(var_r31->unk_10)); + var_f29 = 255.0f; + var_r26 = lbl_1_bss_178.unk_34; + var_r27 = lbl_1_bss_178.unk_30; + var_r28 = lbl_1_bss_178.unk_6CC[lbl_1_bss_178.unk_6B4]; + for (var_r30 = 0; var_r30 < lbl_1_bss_178.unk_18; var_r30++, var_r26++, var_r27++) { + var_f31 = PSVECMag(var_r26); + if (!(var_f31 >= 1.0f)) { + var_f30 = (1.0f - var_f31) * var_r31->unk_1C; + var_f28 = var_r31->unk_24 * ((1.0f - var_f31) * (1.0f - var_f31)); + var_f27 = ((1.0f - var_f31) * (1.0f - (var_f31 * var_f31))) + (var_f31 * ((1.0f - var_f31) * (1.0f - var_f31))); + var_r27->x += lbl_1_bss_178.unk_24[var_r30] * (sp2C.x * var_f30); + var_r27->y += lbl_1_bss_178.unk_24[var_r30] + * (((sp2C.y * var_f30) + (var_r31->unk_1C * (0.3f * var_r31->unk_18 * var_f27))) - (0.3f * var_r31->unk_18 * var_f28)); + var_r27->z += lbl_1_bss_178.unk_24[var_r30] * (sp2C.z * var_f30); + if (var_r26->z >= -0.2f) { + var_f31 = var_r28[var_r30].a + (var_f29 * (1.0f - (var_f31 * (var_f31 * var_f31)))); + if (var_f31 > var_f29) { + var_f31 = var_f29; + } + var_r28[var_r30].a = var_f31; + } + } + } + } + } + } + var_r29->unk_00 = -2; +} + +void fn_1_57B0(omObjData *object) +{ + Vec sp30; + Vec sp24; + Vec sp18; + Vec spC; + + float var_f31; + + u16(*var_r31)[4]; + s32 var_r30; + UnkM417Struct5 *var_r29; + Vec *var_r28; + Vec *var_r27; + u32 var_r26; + Vec *var_r25; + Vec *var_r24; + Vec *var_r23; + + lbl_1_bss_178.unk_6B4 = 1 - lbl_1_bss_178.unk_6B4; + fn_1_4E64(object); + lbl_1_bss_178.unk_6B8 += 0.083333336f; + if (lbl_1_bss_178.unk_6B8 >= 360.0f) { + lbl_1_bss_178.unk_6B8 -= 360.0f; + } + var_r29 = lbl_1_bss_178.unk_3C; + for (var_r30 = 0; var_r30 < 3; var_r30++, var_r29++) { + var_r29->unk_0C += var_r29->unk_18; + if (var_r29->unk_0C >= 360.0f) { + var_r29->unk_0C -= 360.0f; + } else if (var_r29->unk_0C < 0.0f) { + var_r29->unk_0C += 360.0f; + } + var_f31 = var_r29->unk_0C; + for (var_r26 = 0; var_r26 < var_r29->unk_1C; var_r26++) { + lbl_1_bss_178.unk_20[var_r26] = var_r29->unk_14 * sind((var_f31 + var_r29->unk_20[var_r26])); + } + var_r27 = lbl_1_bss_178.unk_30; + for (var_r26 = 0; var_r26 < lbl_1_bss_178.unk_18; var_r26++, var_r27++) { + var_r27->y = var_r27->y + lbl_1_bss_178.unk_20[var_r29->unk_24[var_r26]]; + } + } + var_r23 = lbl_1_bss_178.unk_2C; + var_r24 = lbl_1_bss_178.unk_30; + var_r25 = lbl_1_bss_178.unk_6BC[lbl_1_bss_178.unk_6B4]; + for (var_r30 = 0; var_r30 < lbl_1_bss_178.unk_18; var_r23++, var_r24++, var_r25++, var_r30++) { + PSVECAdd(var_r23, var_r24, var_r25); + } + memset(lbl_1_bss_178.unk_30, 0, 30 * 36 * sizeof(Vec)); + var_r28 = lbl_1_bss_178.unk_6C4[lbl_1_bss_178.unk_6B4]; + memset(var_r28, 0, 30 * 36 * sizeof(Vec)); + var_r27 = lbl_1_bss_178.unk_6BC[lbl_1_bss_178.unk_6B4]; + var_r31 = lbl_1_bss_178.unk_38; + for (var_r30 = 0; var_r30 < 1015; var_r31++, var_r30++) { + PSVECSubtract(&var_r27[(*var_r31)[1]], &var_r27[(*var_r31)[0]], &sp30); + PSVECSubtract(&var_r27[(*var_r31)[3]], &var_r27[(*var_r31)[0]], &sp24); + PSVECSubtract(&var_r27[(*var_r31)[2]], &var_r27[(*var_r31)[0]], &sp18); + PSVECCrossProduct(&sp30, &sp24, &spC); + PSVECNormalize(&spC, &spC); + PSVECAdd(&spC, &var_r28[(*var_r31)[0]], &var_r28[(*var_r31)[0]]); + PSVECAdd(&spC, &var_r28[(*var_r31)[1]], &var_r28[(*var_r31)[1]]); + PSVECAdd(&spC, &var_r28[(*var_r31)[3]], &var_r28[(*var_r31)[3]]); + PSVECCrossProduct(&sp24, &sp18, &spC); + PSVECNormalize(&spC, &spC); + PSVECAdd(&spC, &var_r28[(*var_r31)[0]], &var_r28[(*var_r31)[0]]); + PSVECAdd(&spC, &var_r28[(*var_r31)[3]], &var_r28[(*var_r31)[3]]); + PSVECAdd(&spC, &var_r28[(*var_r31)[2]], &var_r28[(*var_r31)[2]]); + } + for (var_r30 = 0; var_r30 < 1080; var_r30++, var_r28++) { + PSVECNormalize(var_r28, var_r28); + } + var_r25 = lbl_1_bss_178.unk_6BC[lbl_1_bss_178.unk_6B4]; + for (var_r30 = 0; var_r30 < lbl_1_bss_178.unk_18; var_r25++, var_r30++) { + var_f31 = 0.5f - (0.00041666668f * var_r25->y); + var_r25->y = 1600.0f * (0.25f - (var_f31 * var_f31)); + } + var_r30 = lbl_1_bss_178.unk_1C[555]; + var_f31 = lbl_1_bss_178.unk_6BC[lbl_1_bss_178.unk_6B4][var_r30].y; + lbl_1_bss_178.unk_08 = var_f31 - lbl_1_bss_178.unk_04; + lbl_1_bss_178.unk_04 = var_f31; + lbl_1_bss_178.unk_0C = lbl_1_bss_178.unk_6C4[lbl_1_bss_178.unk_6B4][var_r30]; + + DCStoreRangeNoSync(lbl_1_bss_178.unk_6BC[lbl_1_bss_178.unk_6B4], 30 * 36 * sizeof(Vec)); + DCStoreRangeNoSync(lbl_1_bss_178.unk_6C4[lbl_1_bss_178.unk_6B4], 30 * 36 * sizeof(Vec)); + DCStoreRangeNoSync(lbl_1_bss_178.unk_6CC[lbl_1_bss_178.unk_6B4], 1080 * sizeof(GXColor)); + DCStoreRangeNoSync(lbl_1_bss_178.unk_6D4[lbl_1_bss_178.unk_6B4], 30 * 36 * sizeof(Vec2f)); + PPCSync(); +} + +void fn_1_5E3C(omObjData *object) +{ + s32 var_r31; + s32 var_r30; + s32 var_r29; + + GXBeginDisplayList(lbl_1_bss_178.unk_6E0[0], lbl_1_bss_178.unk_6DC); + for (var_r29 = 0; var_r29 < 35; var_r29++) { + if ((var_r29 & 1) == 0) { + GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 60); + for (var_r30 = 0; var_r30 < 30; var_r30++) { + var_r31 = lbl_1_bss_178.unk_1C[var_r30 + ((var_r29 + 1) * 30)]; + GXPosition1x16(var_r31); + GXNormal1x16(var_r31); + GXColor1x16(var_r31); + GXTexCoord1x16(var_r31); + var_r31 = lbl_1_bss_178.unk_1C[var_r30 + (var_r29 * 30)]; + GXPosition1x16(var_r31); + GXNormal1x16(var_r31); + GXColor1x16(var_r31); + GXTexCoord1x16(var_r31); + } + } else { + GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 59); + for (var_r30 = 29; var_r30 >= 0; var_r30--) { + var_r31 = lbl_1_bss_178.unk_1C[var_r30 + (var_r29 * 30)]; + GXPosition1x16(var_r31); + GXNormal1x16(var_r31); + GXColor1x16(var_r31); + GXTexCoord1x16(var_r31); + if (!var_r30) { + break; + } + var_r31 = lbl_1_bss_178.unk_1C[((var_r29 + 1) * 30) + var_r30 - 1]; + GXPosition1x16(var_r31); + GXNormal1x16(var_r31); + GXColor1x16(var_r31); + GXTexCoord1x16(var_r31); + } + } + } + lbl_1_bss_178.unk_6E8[0] = GXEndDisplayList(); +} + +void fn_1_604C(ModelData *arg0, Mtx arg1) +{ + Mtx sp98; + Mtx sp68; + Mtx sp38; + GXTexObj sp18; + + GXColor *var_r30; + GXColor *var_r29; + + GXColor sp14 = { 0xD8, 0xE2, 0xE5, 0x4C }; + GXColor sp10 = { 0xE0, 0xD8, 0xF4, 0x40 }; + DCStoreRangeNoSync(&sp14, 4); + DCStoreRangeNoSync(&sp10, 4); + PPCSync(); + GXLoadPosMtxImm(arg1, 0); + PSMTXInvXpose(arg1, sp98); + GXLoadNrmMtxImm(sp98, 0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + GXInitTexObj(&sp18, lbl_1_bss_178.unk_6F4, 640, 480, 5, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXInitTexObjLOD(&sp18, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); + GXLoadTexObj(&sp18, GX_TEXMAP0); + HuSprTexLoad(lbl_1_bss_64, 0, 1, GX_CLAMP, GX_CLAMP, GX_LINEAR); + HuSprTexLoad(lbl_1_bss_5C, 0, 2, GX_CLAMP, GX_CLAMP, GX_LINEAR); + HuSprTexLoad(lbl_1_bss_60, 0, 3, GX_MIRROR, GX_MIRROR, GX_LINEAR); + GXSetNumTexGens(5); + C_MTXLightPerspective(sp38, 35.0f, 1.2f, 0.5f, -0.5f, 0.5f, 0.5f); + PSMTXInverse(Hu3DCameraMtx, sp98); + PSMTXConcat(sp98, arg1, sp98); + PSMTXConcat(sp38, Hu3DCameraMtx, sp68); + PSMTXConcat(sp68, sp98, sp68); + sp68[1][3] -= 44.0f; + GXLoadTexMtxImm(sp68, 30, GX_MTX3x4); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, 30, GX_FALSE, 125); + C_MTXLightPerspective(sp38, 70.0f, 1.0f, 0.5f, -0.5f, 0.5f, 0.5f); + PSMTXInverse(Hu3DCameraMtx, sp98); + PSMTXConcat(sp98, arg1, sp98); + PSMTXConcat(sp38, Hu3DCameraMtx, sp68); + PSMTXConcat(sp68, sp98, sp68); + GXLoadTexMtxImm(sp68, 36, GX_MTX3x4); + GXSetTexCoordGen2(GX_TEXCOORD2, GX_TG_MTX3x4, GX_TG_POS, 36, GX_FALSE, 125); + PSMTXRotRad(sp68, 90, 0.017453292f * lbl_1_bss_178.unk_6B8); + GXLoadTexMtxImm(sp68, 39, GX_MTX2x4); + GXSetTexCoordGen2(GX_TEXCOORD3, GX_TG_MTX2x4, GX_TG_TEXCOORD0, 39, GX_FALSE, 125); + PSMTXScale(sp98, 1.2f, -1.2f, 1.2f); + PSMTXConcat(sp68, sp98, sp68); + GXLoadTexMtxImm(sp68, 42, GX_MTX2x4); + GXSetTexCoordGen2(GX_TEXCOORD4, GX_TG_MTX2x4, GX_TG_TEXCOORD0, 42, GX_FALSE, 125); + PSMTXScale(sp98, 0.49f, -0.49f, 0.49f); + PSMTXConcat(sp98, Hu3DCameraMtx, sp68); + sp68[0][3] = 0.5f; + sp68[1][3] = 0.5f; + GXLoadTexMtxImm(sp68, 33, GX_MTX2x4); + GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_NRM, 33, GX_FALSE, 125); + GXSetNumIndStages(3); + GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD1, GX_TEXMAP1); + GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1); + GXSetTevIndWarp(GX_TEVSTAGE0, GX_INDTEXSTAGE0, GX_TRUE, GX_FALSE, GX_ITM_0); + PSMTXScale(sp68, -0.5f, -0.5f, 0.5f); + GXSetIndTexMtx(GX_ITM_0, (float(*)[3])sp68, -2); + GXSetIndTexOrder(GX_INDTEXSTAGE1, GX_TEXCOORD1, GX_TEXMAP1); + GXSetIndTexCoordScale(GX_INDTEXSTAGE1, GX_ITS_1, GX_ITS_1); + GXSetTevIndWarp(GX_TEVSTAGE1, GX_INDTEXSTAGE1, GX_TRUE, GX_FALSE, GX_ITM_1); + PSMTXScale(sp68, 0.5f, 0.5f, 0.5f); + GXSetIndTexMtx(GX_ITM_1, (float(*)[3])sp68, 0); + GXSetIndTexOrder(GX_INDTEXSTAGE2, GX_TEXCOORD1, GX_TEXMAP1); + GXSetIndTexCoordScale(GX_INDTEXSTAGE2, GX_ITS_1, GX_ITS_1); + GXSetTevIndWarp(GX_TEVSTAGE2, GX_INDTEXSTAGE2, GX_TRUE, GX_FALSE, GX_ITM_2); + GXSetTevIndWarp(GX_TEVSTAGE3, GX_INDTEXSTAGE2, GX_TRUE, GX_FALSE, GX_ITM_2); + PSMTXScale(sp68, -0.65f, -0.65f, 0.65f); + GXSetIndTexMtx(GX_ITM_2, (float(*)[3])sp68, -3); + GXSetNumTevStages(5); + GXSetTevColor(GX_TEVREG0, sp14); + GXSetTevColor(GX_TEVREG1, sp10); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_C0, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); + GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD2, GX_TEXMAP2, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A0, GX_CC_CPREV); + GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); + GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); + GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD3, GX_TEXMAP3, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A1, GX_CC_CPREV); + GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); + GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); + GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD4, GX_TEXMAP3, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE3, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASA, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG2); + GXSetTevAlphaIn(GX_TEVSTAGE3, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); + GXSetTevAlphaOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVREG2); + GXSetTevOrder(GX_TEVSTAGE4, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE4, GX_CC_CPREV, GX_CC_C1, GX_CC_C2, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE4, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE4, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); + GXSetTevAlphaOp(GX_TEVSTAGE4, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); + GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GXSetArray(GX_VA_POS, lbl_1_bss_178.unk_6BC[lbl_1_bss_178.unk_6B4], 12); + GXSetArray(GX_VA_NRM, lbl_1_bss_178.unk_6C4[lbl_1_bss_178.unk_6B4], 12); + GXSetArray(GX_VA_CLR0, lbl_1_bss_178.unk_6CC[lbl_1_bss_178.unk_6B4], 4); + GXSetArray(GX_VA_TEX0, lbl_1_bss_178.unk_6D4[lbl_1_bss_178.unk_6B4], 8); + GXCallDisplayList(lbl_1_bss_178.unk_6E0[0], lbl_1_bss_178.unk_6E8[0]); + GXSetNumIndStages(0); + GXSetTevDirect(GX_TEVSTAGE0); + GXSetTevDirect(GX_TEVSTAGE1); + GXSetTevDirect(GX_TEVSTAGE2); + GXSetTevDirect(GX_TEVSTAGE3); +} + +void fn_1_6B04(ModelData *model, Mtx arg1) +{ + GXSetTexCopySrc(0, 0, 640, 480); + GXSetTexCopyDst(640, 480, GX_TF_RGB5A3, GX_FALSE); + GXCopyTex(lbl_1_bss_178.unk_6F4, GX_FALSE); + GXPixModeSync(); +} + +void fn_1_6B60(ModelData *model, Mtx arg1) +{ + if (!omPauseChk()) { + fn_1_57B0(NULL); + } +} + +void fn_1_6B94(ModelData *model, ParticleData *particle, float (*matrix)[4]) +{ + HsfanimStruct01 *var_r31; + s32 var_r29; + + if (!particle->unk_00) { + particle->unk_00++; + var_r31 = particle->unk_48; + for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { + var_r31->unk00_s16 = 0; + var_r31->unk2C = 0.0f; + var_r31->unk40.a = 0; + } + return; + } + var_r31 = particle->unk_48; + for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { + if (var_r31->unk00_s16) { + var_r31->unk34.x += var_r31->unk08.x; + var_r31->unk34.y += var_r31->unk08.y; + var_r31->unk34.z += var_r31->unk08.z; + var_r31->unk08.y += -0.27222225f; + if (var_r31->unk00_s16 < 12.0f) { + var_r31->unk40.a = 0.88f * var_r31->unk40.a; + } + if (!(--var_r31->unk00_s16)) { + var_r31->unk00_s16 = 0; + var_r31->unk2C = 0.0f; + var_r31->unk40.a = 0; + } + } + } + DCStoreRange(particle->unk_48, particle->unk_30 * 68); +} + +void fn_1_6D64(s32 arg0, u32 arg1, float arg8, float arg9, float argA) +{ + Vec sp14; + + float var_f31; + float var_f30; + float var_f28; + float var_f27; + + HsfanimStruct01 *var_r31; + ParticleData *var_r30; + s32 var_r29; + u32 var_r28; + + var_r30 = Hu3DData[arg0].unk_120; + { + float spC[2] = { 800.0f, 150.0f }; + if (!var_r30->unk_00) { + return; + } + var_r31 = var_r30->unk_48; + if (arg1) { + var_r28 = 10.0f + (20.0f * argA); + argA *= 0.7f; + arg8 += 180.0f; + arg9 = 60.0f; + var_f27 = fn_1_75BC(); + } else { + var_r28 = 20.0f + (80.0f * argA); + var_f27 = 0.0f; + } + for (var_r29 = 0; var_r29 < var_r30->unk_30; var_r29++, var_r31++) { + if (var_r31->unk00_s16) { + continue; + } + var_r31->unk00 = 60.0f * (1.0f + (0.0005f * frandmod(1000))); + var_f30 = 0.001f * frandmod(1000); + var_f28 = var_f30; + if (frandmod(1000) < 500) { + var_f28 *= -1.0f; + } + var_f30 = argA * (0.4f + (0.6f * (1.0f - (var_f30 * var_f30)))); + var_f31 = arg8 + (var_f28 * arg9); + sp14.x = sind(var_f31); + sp14.y = 0.0f; + sp14.z = cosd(var_f31); + var_r31->unk34.x = sp14.x * spC[arg1]; + var_r31->unk34.y = (var_f27 + (0.15f * frandmod(1000))) - 100.0f; + var_r31->unk34.z = sp14.z * spC[arg1]; + var_r31->unk08.x = 0.016666668f * (((100.0f * (1.5f * sp14.x)) + (0.1f * frandmod(1000))) - 50.0f); + var_r31->unk08.y = 0.016666668f * (450.0f + (0.5f * frandmod(1000))); + var_r31->unk08.z = 0.016666668f * (((100.0f * (1.5f * sp14.z)) + (0.1f * frandmod(1000))) - 50.0f); + var_r31->unk08.x *= var_f30; + var_r31->unk08.y *= 0.2f + (0.8f * var_f30); + var_r31->unk08.z *= var_f30; + var_r31->unk30 = frandmod(360); + var_f31 = 0.001f * frandmod(1000); + if (arg1) { + var_r31->unk2C = 50.0f + frandmod(50); + var_r31->unk40.a = frandmod(80) + 60; + var_r31->unk40.r = 200.0f + (55.0f * var_f31); + var_r31->unk40.g = 220.0f + (20.0f * var_f31); + var_r31->unk40.b = 245.0f + (10.0f * var_f31); + } else { + var_r31->unk2C = 100.0f + frandmod(100); + var_r31->unk40.a = frandmod(100) + 80; + var_r31->unk40.r = 200.0f + (55.0f * var_f31); + var_r31->unk40.g = 220.0f + (20.0f * var_f31); + var_r31->unk40.b = 245.0f + (10.0f * var_f31); + } + var_r28--; + if (!var_r28) { + break; + } + } + } + (void)var_r29; +} + +void fn_1_7510(float arg8, float arg9, float argA, float argB) +{ + float var_f31; + float var_f30; + float var_f28; + + s32 var_r31; + s32 var_r30; + + var_f31 = 180.0 + (atan2d(arg8, argA)); + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + fn_1_4BC8(var_f31, argB); +} + +float fn_1_75BC(void) +{ + return 10.0f + (lbl_1_bss_178.unk_04 + lbl_1_bss_878->trans.y); +} + +float fn_1_75F0(void) +{ + return lbl_1_bss_178.unk_08; +} + +void fn_1_7600(Vec *arg0) +{ + *arg0 = lbl_1_bss_178.unk_0C; +} + +s32 fn_1_7624(float arg8, float arg9, float argA) +{ + float var_f31; + float var_f30; + float var_f29; + + s32 var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 var_r26; + s32 var_r25; + + var_f31 = lbl_1_bss_178.unk_2C[lbl_1_bss_178.unk_1C[555]].x - lbl_1_bss_178.unk_2C[lbl_1_bss_178.unk_1C[554]].x; + var_r30 = (15.0f + (s32)(arg8 / var_f31)) - 1.0f; + var_r28 = var_r30 + 2; + if (var_r30 < 0) { + var_r30 = 0; + } + if (var_r28 > 30) { + var_r28 = 30; + } + var_f31 = lbl_1_bss_178.unk_2C[lbl_1_bss_178.unk_1C[555]].z - lbl_1_bss_178.unk_2C[lbl_1_bss_178.unk_1C[525]].z; + var_r31 = (18.0f + (s32)(argA / var_f31)) - 1.0f; + var_r27 = var_r31 + 2; + if (var_r31 < 0) { + var_r31 = 0; + } + if (var_r27 > 36) { + var_r27 = 36; + } + var_f29 = 1e10f; + var_r25 = -1; + for (; var_r31 < var_r27; var_r31++) { + for (var_r29 = var_r30; var_r29 < var_r28; var_r29++) { + var_r26 = lbl_1_bss_178.unk_1C[var_r29 + (var_r31 * 30)]; + var_f31 = arg8 - lbl_1_bss_178.unk_2C[var_r26].x; + var_f30 = argA - lbl_1_bss_178.unk_2C[var_r26].z; + var_f31 = (var_f31 * var_f31) + (var_f30 * var_f30); + if (var_f31 < var_f29) { + var_f29 = var_f31; + var_r25 = var_r26; + } + } + } + return var_r25; +} + +float fn_1_78BC(float arg8, float arg9, float argA) +{ + s32 var_r31; + + var_r31 = fn_1_7624(arg8, arg9, argA); + if (var_r31 < 0) { + return 0.0f; + } + return 25.0f + (lbl_1_bss_878->trans.y + lbl_1_bss_178.unk_6BC[lbl_1_bss_178.unk_6B4][var_r31].y); +} + +void fn_1_7968(float arg8, float arg9, float argA, Vec *arg0) +{ + s32 var_r30; + + var_r30 = fn_1_7624(arg8, arg9, argA); + if (var_r30 < 0) { + arg0->x = arg0->z = 0.0f; + arg0->y = 1.0f; + } else { + *arg0 = lbl_1_bss_178.unk_6C4[lbl_1_bss_178.unk_6B4][var_r30]; + } +} + +UnkM417Struct2 *fn_1_7A28(void) +{ + return &lbl_1_bss_68[0]; +} From eb025754464eced470a98a21f147e3c748d47526 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Wed, 5 Jun 2024 18:21:50 +0200 Subject: [PATCH 2/2] Fixed a function call in m417Dll/main.c --- src/REL/m417Dll/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/REL/m417Dll/main.c b/src/REL/m417Dll/main.c index 0c18fb4a..749bc066 100644 --- a/src/REL/m417Dll/main.c +++ b/src/REL/m417Dll/main.c @@ -102,7 +102,7 @@ void ModuleProlog(void) Hu3DCameraPerspectiveSet(1, -1.0f, 5.0f, 5000.0f, 1.2f); lbl_1_bss_18 = omAddObjEx(var_r31, 32730, 0, 0, -1, omOutView); lbl_1_bss_1C = omAddObjEx(var_r31, 10, 0, 0, -1, fn_1_4D8); - fn_1_7A34(var_r31); + fn_1_3274(var_r31); fn_1_7A34(var_r31); }