From 3f773121c91cdfb5eee82f1da1d8c8163d9753d0 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Wed, 5 Jun 2024 18:17:06 +0200 Subject: [PATCH 01/23] 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 02/23] 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); } From 24fa3369d7fcc74ace67b56a717703bc823957c9 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Wed, 5 Jun 2024 11:30:36 -0500 Subject: [PATCH 03/23] Fix m417dll/water.c --- configure.py | 2 +- src/REL/m417Dll/water.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/configure.py b/configure.py index fafe9b6d..ca93e8ba 100644 --- a/configure.py +++ b/configure.py @@ -956,7 +956,7 @@ config.libs = [ objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/m417Dll/main.c"), - Object(NonMatching, "REL/m417Dll/water.c"), + Object(Matching, "REL/m417Dll/water.c"), Object(Matching, "REL/m417Dll/player.c"), Object(Matching, "REL/m417Dll/sequence.c"), }, diff --git a/src/REL/m417Dll/water.c b/src/REL/m417Dll/water.c index 765b268f..9127b22a 100644 --- a/src/REL/m417Dll/water.c +++ b/src/REL/m417Dll/water.c @@ -437,7 +437,6 @@ void fn_1_3D58(omObjData *object) fn_1_5E3C(object); } -#pragma dont_inline on void fn_1_4BC8(float arg8, float arg9) { float var_f30; @@ -475,8 +474,8 @@ void fn_1_4BC8(float arg8, float arg9) return; } } + (void)var_r31; } -#pragma dont_inline reset void fn_1_4E64(omObjData *object) { @@ -689,6 +688,8 @@ void fn_1_57B0(omObjData *object) 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)var_r30; + (void)var_r30; } void fn_1_5E3C(omObjData *object) From ee1aa02f88e142bdf85e33f448c2b04e133affd5 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Wed, 5 Jun 2024 11:40:49 -0500 Subject: [PATCH 04/23] Change unk_120 to void * --- include/game/hsfman.h | 2 +- src/REL/m408Dll/camera.c | 14 +++++++------- src/REL/m408Dll/main.c | 4 ++-- src/REL/m408Dll/stage.c | 16 ++++++++-------- src/REL/m417Dll/water.c | 2 +- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/include/game/hsfman.h b/include/game/hsfman.h index afc7fb52..7b25cfd9 100644 --- a/include/game/hsfman.h +++ b/include/game/hsfman.h @@ -64,7 +64,7 @@ typedef struct model_data { Vec rot; Vec scale; Mtx unk_F0; - ParticleData *unk_120; + void *unk_120; } ModelData; // sizeof 0x124 typedef struct camera_data { f32 fov; diff --git a/src/REL/m408Dll/camera.c b/src/REL/m408Dll/camera.c index 4e39b1b1..0638ba4d 100644 --- a/src/REL/m408Dll/camera.c +++ b/src/REL/m408Dll/camera.c @@ -75,8 +75,8 @@ void fn_1_8A20(omObjData *object) Hu3DParticleColSet(temp_r31, 255, 255, 255); Hu3DParticleHookSet(temp_r31, fn_1_A894); Hu3DModelPosSet(temp_r31, 0, 0, 0); - Hu3DData[temp_r31].unk_120->unk_00 = 0; - Hu3DData[temp_r31].unk_120->unk_02 = 0; + ((ParticleData *)Hu3DData[temp_r31].unk_120)->unk_00 = 0; + ((ParticleData *)Hu3DData[temp_r31].unk_120)->unk_02 = 0; temp_r31 = Hu3DParticleCreate(HuSprAnimReadFile(0x27000D), 1); object->model[3] = temp_r31; Hu3DParticleBlendModeSet(temp_r31, 1); @@ -84,16 +84,16 @@ void fn_1_8A20(omObjData *object) Hu3DParticleColSet(temp_r31, 255, 255, 255); Hu3DParticleHookSet(temp_r31, fn_1_A894); Hu3DModelPosSet(temp_r31, 0, 0, 0); - Hu3DData[temp_r31].unk_120->unk_00 = 0; - Hu3DData[temp_r31].unk_120->unk_02 = 1; + ((ParticleData *)Hu3DData[temp_r31].unk_120)->unk_00 = 0; + ((ParticleData *)Hu3DData[temp_r31].unk_120)->unk_02 = 1; temp_r31 = Hu3DParticleCreate(HuSprAnimReadFile(0x270011), 1); object->model[5] = temp_r31; Hu3DModelLayerSet(temp_r31, 7); Hu3DParticleColSet(temp_r31, 255, 255, 255); Hu3DParticleHookSet(temp_r31, fn_1_A894); Hu3DModelPosSet(temp_r31, 0, 0, 0); - Hu3DData[temp_r31].unk_120->unk_00 = 0; - Hu3DData[temp_r31].unk_120->unk_02 = 2; + ((ParticleData *)Hu3DData[temp_r31].unk_120)->unk_00 = 0; + ((ParticleData *)Hu3DData[temp_r31].unk_120)->unk_02 = 2; temp_r31 = Hu3DParticleCreate(HuSprAnimReadFile(0x270010), 8); object->model[6] = temp_r31; Hu3DParticleBlendModeSet(temp_r31, 1); @@ -249,7 +249,7 @@ void fn_1_9770(omObjData *object) Hu3DParticleColSet(temp_r29, 255, 255, 255); Hu3DParticleHookSet(temp_r29, fn_1_A37C); Hu3DModelPosSet(temp_r29, 0, 0, 0); - Hu3DData[temp_r29].unk_120->unk_00 = 0; + ((ParticleData *)Hu3DData[temp_r29].unk_120)->unk_00 = 0; temp_r31->unk30.y = -35; temp_r31->unk30.z = 350; temp_r31->unk18.y = 800+object->trans.y; diff --git a/src/REL/m408Dll/main.c b/src/REL/m408Dll/main.c index e516cba7..4268df6b 100644 --- a/src/REL/m408Dll/main.c +++ b/src/REL/m408Dll/main.c @@ -672,7 +672,7 @@ void fn_1_26E4(omObjData *object) Hu3DParticleColSet(temp_r27, 255, 255, 255); Hu3DParticleHookSet(temp_r27, fn_1_5AB4); Hu3DModelPosSet(temp_r27, 0, 0, 0); - Hu3DData[temp_r27].unk_120->unk_00 = 0; + ((ParticleData *)Hu3DData[temp_r27].unk_120)->unk_00 = 0; temp_r31->unk74 = temp_r31->unk78 = 0; temp_r31->unk7C[0] = temp_r31->unk7C[1] = 0; temp_r31->unk8C = -1; @@ -765,7 +765,7 @@ void fn_1_2FAC(omObjData *object) object->trans.z = temp_r31->unk1C.z = temp_r31->unk94.z = lbl_1_data_104[temp_r31->unk0][1]; object->rot.y = temp_r31->unk58.x = atan2d(object->trans.x, object->trans.z)+180.0; Hu3DModelAttrReset(object->model[1], 1); - Hu3DData[object->model[2]].unk_120->unk_00 = 0; + ((ParticleData *)Hu3DData[object->model[2]].unk_120)->unk_00 = 0; object->func = fn_1_3E80; } } diff --git a/src/REL/m408Dll/stage.c b/src/REL/m408Dll/stage.c index 7d550dd9..a294fed9 100644 --- a/src/REL/m408Dll/stage.c +++ b/src/REL/m408Dll/stage.c @@ -142,7 +142,7 @@ void fn_1_C530(omObjData *object) Hu3DModelLayerSet(temp_r31, 1); Hu3DModelPosSet(temp_r31, 0, 5100, 0); Hu3DParticleBlendModeSet(temp_r31, 1); - temp_r29 = Hu3DData[temp_r31].unk_120->unk_1C; + temp_r29 = ((ParticleData *)Hu3DData[temp_r31].unk_120)->unk_1C; temp_r29[2] = 140; object->model[14] = Hu3DModelCreateFile(0x270021); object->model[15] = Hu3DModelCreateFile(0x270022); @@ -161,7 +161,7 @@ void fn_1_C530(omObjData *object) Hu3DModelLayerSet(temp_r31, 3); Hu3DModelAttrReset(temp_r31, 1); Hu3DParticleBlendModeSet(temp_r31, 1); - temp_r29 = Hu3DData[temp_r31].unk_120->unk_1C; + temp_r29 = ((ParticleData *)Hu3DData[temp_r31].unk_120)->unk_1C; temp_r29[1] = 800; object->func = fn_1_CD14; } @@ -296,7 +296,7 @@ void fn_1_D004(omObjData *object) temp_f29 = 1.0f-((temp_f30-5000)/15000); Hu3DMotionTimeSet(object->model[12], 95.0f*temp_f29); temp_r27 = object->model[6]; - temp_r28 = Hu3DData[temp_r27].unk_120->unk_1C; + temp_r28 = ((ParticleData *)Hu3DData[temp_r27].unk_120)->unk_1C; temp_r28[2] = 1.0f-((temp_f30-5000)/(temp_f28-5000)); if(temp_f30 <= 5400 && temp_r30[2] == 0) { temp_r30[2] = 30; @@ -343,7 +343,7 @@ void fn_1_D004(omObjData *object) temp_r27 = object->model[6]; if(temp_r27 != 0) { Hu3DModelPosSet(temp_r27, 0, 200+temp_f30, 0); - temp_r28 = Hu3DData[temp_r27].unk_120->unk_1C; + temp_r28 = ((ParticleData *)Hu3DData[temp_r27].unk_120)->unk_1C; temp_r28[2] -= 0.025f; if(temp_r28[2] <= 0) { Hu3DModelAttrReset(temp_r27, 0x20); @@ -757,7 +757,7 @@ WorkF4B0 *fn_1_F4B0(s16 arg0, s16 arg1) ModelData *temp_r29; temp_r29 = &Hu3DData[arg0]; temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkF4B0), MEMORY_DEFAULT_NUM); - temp_r29->unk_120 = (void *)temp_r31; + temp_r29->unk_120 = temp_r31; temp_r31->unk0 = arg0; temp_r31->unk2 = arg1; temp_r31->unk4 = NULL; @@ -778,7 +778,7 @@ void fn_1_F564(s16 arg0) ModelData *temp_r27; temp_r27 = &Hu3DData[arg0]; temp_r29 = temp_r27->hsfData->root; - temp_r31 = (WorkF4B0 *)temp_r27->unk_120; + temp_r31 = temp_r27->unk_120; if(temp_r31->unk8 == NULL) { temp_r31->unk8 = HuMemDirectMallocNum(HEAP_SYSTEM, temp_r29->data.st->count*sizeof(HsfVector2f), MEMORY_DEFAULT_NUM); temp_r31->unkC = HuMemDirectMallocNum(HEAP_SYSTEM, temp_r29->data.st->count, MEMORY_DEFAULT_NUM); @@ -838,7 +838,7 @@ void fn_1_F8A0(ModelData *arg0, Mtx arg1) Mtx sp40; Mtx sp10; s16 spC = 0; - temp_r31 = (void *)arg0->unk_120; + temp_r31 = arg0->unk_120; spA0.unk0 = &Hu3DData[temp_r31->unk2]; spA0.unk4 = spA0.unk0->hsfData->root; MTXCopy(arg1, spA0.unkC); @@ -901,7 +901,7 @@ void fn_1_FB98(ModelData *arg0, Mtx arg1) float sp50[2][8]; float sp10[2][8]; s16 spC = 0; - temp_r31 = (void *)arg0->unk_120; + temp_r31 = arg0->unk_120; sp120.unk0 = &Hu3DData[temp_r31->unk2]; sp120.unk4 = sp120.unk0->hsfData->root; MTXCopy(arg1, sp120.unkC); diff --git a/src/REL/m417Dll/water.c b/src/REL/m417Dll/water.c index 9127b22a..aeb0c910 100644 --- a/src/REL/m417Dll/water.c +++ b/src/REL/m417Dll/water.c @@ -253,7 +253,7 @@ void fn_1_3BC4(omObjData *object) 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; + ((ParticleData *)Hu3DData[var_r30].unk_120)->unk_00 = 0; lbl_1_bss_58 = var_r30; fn_1_3D58(object); object->func = fn_1_3D54; From dbe41408e22f3bd1f9422da4c5e37dddcd6bf313 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Wed, 5 Jun 2024 19:50:11 +0200 Subject: [PATCH 05/23] More unk_120 cleanups --- src/REL/m404Dll/main.c | 4 ++-- src/REL/m426Dll/main.c | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/REL/m404Dll/main.c b/src/REL/m404Dll/main.c index c0c92a96..6cd5b3f1 100644 --- a/src/REL/m404Dll/main.c +++ b/src/REL/m404Dll/main.c @@ -696,7 +696,7 @@ void fn_1_1344(omObjData *object) object->model[2] = Hu3DHookFuncCreate(fn_1_58E4); Hu3DModelPosSet(object->model[2], 0.0f, object->trans.y, object->trans.z); var_r22 = &Hu3DData[object->model[2]]; - var_r22->unk_120 = (void *)object; + var_r22->unk_120 = object; var_r31->unk_4C = fn_1_5D64(960, 64, 1); var_r31->unk_48 = 4096; var_r31->unk_44 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_48, MEMORY_DEFAULT_NUM); @@ -1220,7 +1220,7 @@ void fn_1_58E4(ModelData *modelData, Mtx arg1) omObjData *var_r30; s32 var_r29; - var_r30 = (omObjData *)modelData->unk_120; // TODO fix in modelData struct + var_r30 = modelData->unk_120; var_r31 = var_r30->data; { GXColor sp18 = { 255, 0, 0, 255 }; diff --git a/src/REL/m426Dll/main.c b/src/REL/m426Dll/main.c index 9a810739..48c9abcf 100644 --- a/src/REL/m426Dll/main.c +++ b/src/REL/m426Dll/main.c @@ -1562,7 +1562,7 @@ void fn_1_3714(omObjData *object) for (var_r29 = 0; var_r29 < 2; var_r29++) { var_r27 = Hu3DHookFuncCreate(fn_1_88B4); var_r26 = &Hu3DData[var_r27]; - var_r26->unk_120 = (ParticleData *)lbl_1_bss_24; // TODO fix this? + var_r26->unk_120 = lbl_1_bss_24; Hu3DModelPosSetV(var_r27, &lbl_1_data_200[var_r29]); Hu3DModelScaleSet(var_r27, 4.0f, 4.0f, 4.0f); Hu3DModelLayerSet(var_r27, 4); @@ -2200,7 +2200,7 @@ void fn_1_5EBC(omObjData *object) } Hu3DModelLayerSet(var_r31->unk_04, 5); var_r26 = &Hu3DData[var_r31->unk_04]; - var_r27 = (UnkModelDataUnk120Struct *)var_r26->unk_120; // TODO fix + var_r27 = var_r26->unk_120; var_r27->unk_20 = 0; Hu3DModelAttrSet(var_r31->unk_04, 1); var_r31->unk_00 = var_r30; @@ -2233,7 +2233,7 @@ void fn_1_6008(omObjData *object) } else { Hu3DModelAttrReset(var_r30->unk_04, 1); var_r26 = &Hu3DData[var_r30->unk_04]; - var_r29 = (UnkModelDataUnk120Struct *)var_r26->unk_120; + var_r29 = var_r26->unk_120; var_r31 = var_r29->unk_3C; for (var_r27 = var_r25 = 0; var_r27 < var_r29->unk_24; var_r27++, var_r31++) { if (var_r31->unk_28 <= 0.0f) { @@ -2341,7 +2341,7 @@ s32 fn_1_63B8(s32 arg0, Vec *arg1, Vec *arg2, float arg8, GXColor arg3) return -1; } var_r27 = &Hu3DData[var_r30->unk_04]; - var_r29 = (UnkModelDataUnk120Struct *)var_r27->unk_120; + var_r29 = var_r27->unk_120; var_r31 = var_r29->unk_3C; for (var_r28 = 0; var_r28 < var_r29->unk_24; var_r28++, var_r31++) { @@ -2759,7 +2759,7 @@ s16 fn_1_795C(AnimData *arg0, s16 arg1) var_r23 = Hu3DHookFuncCreate(fn_1_80DC); var_r27 = &Hu3DData[var_r23]; var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(UnkModelDataUnk120Struct), (u32)var_r27->unk_48); - var_r27->unk_120 = (ParticleData *)var_r31; + var_r27->unk_120 = var_r31; var_r31->unk_38 = arg0; var_r31->unk_24 = arg1; var_r31->unk_20 = 0; @@ -2845,11 +2845,11 @@ s16 fn_1_7DC8(s16 arg0) s16 var_r22; var_r23 = &Hu3DData[arg0]; - var_r26 = (UnkModelDataUnk120Struct *)var_r23->unk_120; + var_r26 = var_r23->unk_120; var_r22 = Hu3DHookFuncCreate(var_r23->hook); var_r27 = &Hu3DData[var_r22]; var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(UnkModelDataUnk120Struct), (u32)var_r27->unk_48); // TODO fix - var_r27->unk_120 = (ParticleData *)var_r31; + var_r27->unk_120 = var_r31; var_r31->unk_38 = var_r26->unk_38; var_r31->unk_24 = var_r26->unk_24; var_r24 = var_r31->unk_24; @@ -2923,7 +2923,7 @@ void fn_1_80DC(ModelData *arg0, Mtx arg1) s16 var_r19; UnkModelDataUnk120Hook var_r18; - var_r31 = (UnkModelDataUnk120Struct *)arg0->unk_120; + var_r31 = arg0->unk_120; if ((var_r31->unk_2C != GlobalCounter) || shadowModelDrawF) { if ((var_r31->unk_50) && (var_r31->unk_50 != arg0)) { fn_1_80DC(var_r31->unk_50, arg1); @@ -3071,7 +3071,7 @@ void fn_1_88B4(ModelData *arg0, Mtx arg1) var_f26 = sqrtf((var_f31 * var_f31) + (var_f30 * var_f30)); arg0->rot.x = (atan2d(var_f26, var_f27)) - 90.0; arg0->rot.y = atan2d(var_f31, var_f30); - var_r29 = (AnimData *)arg0->unk_120; // AnimData ?! + var_r29 = arg0->unk_120; GXLoadPosMtxImm(arg1, 0); GXSetNumTevStages(1); GXSetNumTexGens(1); From 1cd98b28b68289a99897b55504892b11058e92ba Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 8 Jun 2024 14:45:48 -0500 Subject: [PATCH 06/23] Decompile first translation unit of m434 Also did several fixes --- config/GMPE01_00/rels/m434Dll/symbols.txt | 94 ++-- config/GMPE01_00/splits.txt | 4 +- configure.py | 3 +- include/REL/m434Dll.h | 23 + include/game/audio.h | 2 +- src/REL/m434Dll/main.c | 621 ++++++++++++++++++++++ src/REL/w10Dll/host.c | 4 +- src/game/audio.c | 2 +- 8 files changed, 703 insertions(+), 50 deletions(-) create mode 100644 include/REL/m434Dll.h create mode 100644 src/REL/m434Dll/main.c diff --git a/config/GMPE01_00/rels/m434Dll/symbols.txt b/config/GMPE01_00/rels/m434Dll/symbols.txt index 642a9fa9..3bd117eb 100644 --- a/config/GMPE01_00/rels/m434Dll/symbols.txt +++ b/config/GMPE01_00/rels/m434Dll/symbols.txt @@ -82,40 +82,40 @@ fn_1_8F3C = .text:0x00008F3C; // type:function size:0x64 fn_1_8FA0 = .text:0x00008FA0; // type:function size:0x1EC _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_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:0x8 data:double -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:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 data:double -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_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:0x8 scope:local data:double +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:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local 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 @@ -270,17 +270,21 @@ lbl_1_rodata_43C = .rodata:0x0000043C; // type:object size:0x4 data:4byte lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x48 lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x48 lbl_1_data_0 = .data:0x00000000; // type:object size:0xC data:float -lbl_1_data_C = .data:0x0000000C; // type:object size:0x18 data:float -lbl_1_data_24 = .data:0x00000024; // type:object size:0x28 -lbl_1_data_4C = .data:0x0000004C; // type:object size:0x23 data:string +lbl_1_data_C = .data:0x0000000C; // type:object size:0xC data:float +lbl_1_data_18 = .data:0x00000018; // type:object size:0xC data:float +lbl_1_data_24 = .data:0x00000024; // type:object size:0x4 +lbl_1_data_28 = .data:0x00000028; // type:object size:0xC data:float +lbl_1_data_34 = .data:0x00000034; // type:object size:0xC data:float +lbl_1_data_40 = .data:0x00000040; // type:object size:0xC data:float +lbl_1_data_4C = .data:0x0000004C; // type:object size:0x23 scope:local data:string lbl_1_data_70 = .data:0x00000070; // type:object size:0x4 data:4byte -lbl_1_data_74 = .data:0x00000074; // type:object size:0x12 data:string -lbl_1_data_86 = .data:0x00000086; // type:object size:0x1C data:string +lbl_1_data_74 = .data:0x00000074; // type:object size:0x12 scope:local data:string +lbl_1_data_86 = .data:0x00000086; // type:object size:0x1C scope:local data:string lbl_1_data_A4 = .data:0x000000A4; // type:object size:0x8 lbl_1_data_AC = .data:0x000000AC; // type:object size:0x8 lbl_1_data_B4 = .data:0x000000B4; // type:object size:0xC -lbl_1_data_C0 = .data:0x000000C0; // type:object size:0x30 -lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x10 +lbl_1_data_C0 = .data:0x000000C0; // type:object size:0x30 data:float +lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x10 data:float lbl_1_data_100 = .data:0x00000100; // type:object size:0x34 lbl_1_data_134 = .data:0x00000134; // type:object size:0x5 data:string lbl_1_data_139 = .data:0x00000139; // type:object size:0x4 data:byte @@ -312,13 +316,15 @@ lbl_1_bss_39C = .bss:0x0000039C; // type:object size:0x4 data:4byte lbl_1_bss_3A0 = .bss:0x000003A0; // type:object size:0x8 lbl_1_bss_3A8 = .bss:0x000003A8; // type:object size:0x2 data:2byte lbl_1_bss_3AA = .bss:0x000003AA; // type:object size:0x2 data:2byte -lbl_1_bss_3AC = .bss:0x000003AC; // type:object size:0x2 data:2byte -lbl_1_bss_3B0 = .bss:0x000003B0; // type:object size:0x8 data:2byte +lbl_1_bss_3AC = .bss:0x000003AC; // type:object size:0x4 data:2byte +lbl_1_bss_3B0 = .bss:0x000003B0; // type:object size:0x2 data:2byte +lbl_1_bss_3B2 = .bss:0x000003B2; // type:object size:0x6 data:2byte lbl_1_bss_3B8 = .bss:0x000003B8; // type:object size:0x4 data:4byte lbl_1_bss_3BC = .bss:0x000003BC; // type:object size:0x4 data:4byte lbl_1_bss_3C0 = .bss:0x000003C0; // type:object size:0x2 data:2byte lbl_1_bss_3C2 = .bss:0x000003C2; // type:object size:0x2 data:2byte -lbl_1_bss_3C4 = .bss:0x000003C4; // type:object size:0x8 data:4byte +lbl_1_bss_3C4 = .bss:0x000003C4; // type:object size:0x4 data:4byte +lbl_1_bss_3C8 = .bss:0x000003C8; // type:object size:0x4 data:4byte lbl_1_bss_3CC = .bss:0x000003CC; // type:object size:0x4 data:4byte lbl_1_bss_3D0 = .bss:0x000003D0; // type:object size:0x4 data:4byte lbl_1_bss_3D4 = .bss:0x000003D4; // type:object size:0x4 data:4byte diff --git a/config/GMPE01_00/splits.txt b/config/GMPE01_00/splits.txt index 94bf7283..47bd92ab 100644 --- a/config/GMPE01_00/splits.txt +++ b/config/GMPE01_00/splits.txt @@ -958,9 +958,11 @@ Runtime.PPCEABI.H/NMWException.cp: extab start:0x80005650 end:0x80005670 extabindex start:0x80005718 end:0x80005748 .text start:0x800E2108 end:0x800E23CC + .sdata start:0x801D39A8 end:0x801D39B0 + +Runtime.PPCEABI.H/runtime.c: .text start:0x800E23CC end:0x800E2AA8 .rodata start:0x8011E4F0 end:0x8011E508 - .sdata start:0x801D39A8 end:0x801D39B0 Runtime.PPCEABI.H/__init_cpp_exceptions.cpp: .text start:0x800E2AA8 end:0x800E2B24 diff --git a/configure.py b/configure.py index ca93e8ba..515938b4 100644 --- a/configure.py +++ b/configure.py @@ -602,6 +602,7 @@ config.libs = [ Object(NonMatching, "Runtime.PPCEABI.H/New.cp"), Object(NonMatching, "Runtime.PPCEABI.H/NewMore.cp"), Object(NonMatching, "Runtime.PPCEABI.H/NMWException.cp"), + Object(NonMatching, "Runtime.PPCEABI.H/runtime.c"), Object(Matching, "Runtime.PPCEABI.H/__init_cpp_exceptions.cpp"), Object(NonMatching, "Runtime.PPCEABI.H/Gecko_ExceptionPPC.cp"), Object(NonMatching, "Runtime.PPCEABI.H/GCN_mem_alloc.c"), @@ -1093,7 +1094,7 @@ config.libs = [ "m434Dll", objects={ Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/m434Dll/main.c"), + Object(Matching, "REL/m434Dll/main.c"), Object(NonMatching, "REL/m434Dll/map.c"), Object(NonMatching, "REL/m434Dll/player.c"), Object(NonMatching, "REL/m434Dll/fish.c"), diff --git a/include/REL/m434Dll.h b/include/REL/m434Dll.h new file mode 100644 index 00000000..5ea5f4ea --- /dev/null +++ b/include/REL/m434Dll.h @@ -0,0 +1,23 @@ +#ifndef M434DLL_H +#define M434DLL_H + +#include "game/object.h" + +void fn_1_1C44(s32 arg0, s32 arg1); +s32 fn_1_1C88(s32 arg0); +s32 fn_1_1CB8(void); +s32 fn_1_1D54(void); +void fn_1_1D64(s32 arg0); +s32 fn_1_1D74(s32 arg0); + +void fn_1_1DB0(Process *objman); +void fn_1_1E44(void); +void fn_1_43AC(Vec *arg0); +void fn_1_47EC(Vec *arg0); +void fn_1_4854(Process *objman); +void fn_1_4964(void); +void fn_1_6860(Process *objman); +void fn_1_6A84(void); + + +#endif diff --git a/include/game/audio.h b/include/game/audio.h index 0aa2d3af..ef1ca3a9 100644 --- a/include/game/audio.h +++ b/include/game/audio.h @@ -17,7 +17,7 @@ s32 HuAudStreamPlay(char *name, s32 arg1); void HuAudStreamVolSet(s16 vol); void HuAudStreamPauseOn(void); void HuAudStreamPauseOff(void); -void HuAudStreamFadeOut(void); +void HuAudStreamFadeOut(s32 arg0); void HuAudAllStop(void); void HuAudFadeOut(s32 arg0); s32 HuAudFXPlay(s32 arg0); diff --git a/src/REL/m434Dll/main.c b/src/REL/m434Dll/main.c new file mode 100644 index 00000000..bbd39128 --- /dev/null +++ b/src/REL/m434Dll/main.c @@ -0,0 +1,621 @@ +#include "game/object.h" +#include "game/objsub.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/audio.h" +#include "game/wipe.h" + +#include "game/minigame_seq.h" +#include "game/gamework_data.h" +#include "REL/m434Dll.h" +#include "math.h" +#include "ext_math.h" + +#include "rel_sqrt_consts.h" + + +typedef struct camera_view { + float zoom; + Vec pos; + Vec rot; +} CameraView; + +Vec lbl_1_data_0 = { -700, 2500, -700 }; +Vec lbl_1_data_C = { 0.3, -0.8, 0.3 }; +Vec lbl_1_data_18 = { 34.75, -24.75, 3500 }; +GXColor lbl_1_data_24 = { 255, 255, 255, 255 }; +Vec lbl_1_data_28 = { -700, 2500, 700 }; +Vec lbl_1_data_34 = { 0, 1, 0 }; +Vec lbl_1_data_40 = { 0, 0, 0 }; + + +omObjData *lbl_1_bss_3D4; +omObjData *lbl_1_bss_3D0; +omObjData *lbl_1_bss_3CC; +omObjData *lbl_1_bss_3C8; +omObjData *lbl_1_bss_3C4; +s16 lbl_1_bss_3C2; +s16 lbl_1_bss_3C0; +s32 lbl_1_bss_3BC; +s32 lbl_1_bss_3B8; +s16 lbl_1_bss_3B2[3]; +s16 lbl_1_bss_3B0; +s16 lbl_1_bss_3AC[2]; +s16 lbl_1_bss_3AA; +s16 lbl_1_bss_3A8; +s16 lbl_1_bss_3A0[4]; +s32 lbl_1_bss_39C; +CameraView lbl_1_bss_1C[32]; +s32 lbl_1_bss_18; +s32 lbl_1_bss_10[2]; +s32 lbl_1_bss_8[2]; +s32 lbl_1_bss_4; +float lbl_1_bss_0; + +void fn_1_4FC(omObjData *object); +void fn_1_CC8(omObjData *object); +s32 fn_1_10F4(void); +void fn_1_1104(Process *objman); +void fn_1_1684(void); +void fn_1_16B4(void); + +void ModuleProlog(void) +{ + s32 i; + Process *objman; + OSReport("******* M434ObjectSetup *********\n"); + objman = omInitObjMan(50, 8192); + omGameSysInit(objman); + CZoom = 2097.6f; + Center.x = 0; + Center.y = 172; + Center.z = 361; + CRot.x = -32; + CRot.y = 0; + CRot.z = 0; + for(i=0; i<4; i++) { + CZoomM[i] = CZoom; + CenterM[i] = Center; + CRotM[i] = CRot; + } + fn_1_16B4(); + Hu3DCameraCreate(15); + Hu3DCameraPerspectiveSet(2, 30, 20, 25000, 1.2f); + Hu3DCameraViewportSet(2, 0, 0, 320, 240, 0, 1); + Hu3DCameraPerspectiveSet(13, 30, 20, 25000, 1.2f); + Hu3DCameraViewportSet(13, 0, 0, 640, 480, 0, 1); + lbl_1_bss_3CC = omAddObjEx(objman, 32730, 0, 0, -1, omOutViewMulti); + lbl_1_bss_3CC->work[0] = 4; + HuAudSndGrpSet(59); + lbl_1_data_C.x = -lbl_1_data_0.x; + lbl_1_data_C.y = -lbl_1_data_0.y; + lbl_1_data_C.z = -lbl_1_data_0.z; + VECNormalize(&lbl_1_data_C, &lbl_1_data_C); + lbl_1_bss_3B0 = Hu3DGLightCreateV(&lbl_1_data_0, &lbl_1_data_C, &lbl_1_data_24); + Hu3DGLightInfinitytSet(lbl_1_bss_3B0); + Hu3DGLightStaticSet(lbl_1_bss_3B0, 1); + for(i=0; i<4; i++) { + lbl_1_bss_3A0[i] = GWPlayerCfg[i].group; + } + lbl_1_bss_3D4 = omAddObjEx(objman, 0, 0, 0, -1, fn_1_4FC); + lbl_1_bss_3D0 = omAddObjEx(objman, 0, 1, 0, -1, fn_1_CC8); + fn_1_1DB0(objman); + fn_1_4854(objman); + fn_1_6860(objman); + fn_1_1104(objman); +} + +void fn_1_558(omObjData *object); + +void fn_1_4FC(omObjData *object) +{ + fn_1_1D64(0); + lbl_1_bss_3AA = 0; + lbl_1_bss_3A8 = 0; + object->func = fn_1_558; +} + +s32 lbl_1_data_70 = -1; + +void fn_1_C64(omObjData *object); +void fn_1_1638(s32 arg0); + +void fn_1_558(omObjData *object) +{ + s32 temp_r31; + s32 temp_r29; + s32 sp10[2][4]; + s32 sp8[2]; + + switch(fn_1_1D54()) { + case 0: + lbl_1_bss_3C2 = 60; + lbl_1_bss_3C0 = 60; + fn_1_1D64(1); + lbl_1_bss_10[1] = 60; + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + HuAudFXPlay(1736); + break; + + case 1: + if(fn_1_10F4() == 2) { + if(lbl_1_bss_10[1] != 0) { + if(--lbl_1_bss_10[1] == 0) { + lbl_1_bss_3BC = MGSeqStartCreate(); + HuAudStreamPlay("sound/mu_047a.adp", 1); + } + } else { + if(MGSeqStatGet(lbl_1_bss_3BC) == 0) { + fn_1_1D64(2); + HuAudFXPlay(1738); + lbl_1_bss_3B8 = MGSeqTimerCreate(60); + fn_1_1638(1); + } + if(lbl_1_data_70 < 0 && (MGSeqStatGet(lbl_1_bss_3BC) & 0x10)) { + lbl_1_data_70 = HuAudSeqPlay(67); + } + } + } + break; + + case 2: + if(--lbl_1_bss_3C0 == 0) { + lbl_1_bss_3C2--; + MGSeqParamSet(lbl_1_bss_3B8, 1, lbl_1_bss_3C2); + lbl_1_bss_3C0 = 60; + } + if(!lbl_1_bss_3C2 || lbl_1_bss_3A8 == 1) { + fn_1_1D64(3); + lbl_1_bss_10[1] = 60; + lbl_1_bss_3BC = MGSeqFinishCreate(); + HuAudStreamFadeOut(30); + HuAudSeqFadeOut(lbl_1_data_70, 100); + } + break; + + case 3: + if(lbl_1_bss_3B8 >= 0) { + MGSeqParamSet(lbl_1_bss_3B8, 2, -1); + lbl_1_bss_3B8 = -1; + } + if(MGSeqStatGet(lbl_1_bss_3BC) == 0) { + fn_1_1D64(4); + lbl_1_bss_10[1] = 60; + } + break; + + case 4: + if(--lbl_1_bss_10[1] == 0) { + sp8[0] = sp8[1] = 0; + for(temp_r31=0; temp_r31<4; temp_r31++) { + temp_r29 = fn_1_1D74(temp_r31); + sp10[temp_r29][sp8[temp_r29]++] = temp_r31; + } + lbl_1_bss_3AA = fn_1_1CB8(); + switch(lbl_1_bss_3AA) { + case -1: + lbl_1_bss_3AC[0] = GWPlayerCfg[sp10[0][0]].character; + lbl_1_bss_3AC[1] = GWPlayerCfg[sp10[0][1]].character; + MGSeqWinCreate(lbl_1_bss_3AC[0], lbl_1_bss_3AC[1], -1, -1); + GWPlayerCoinWinSet(sp10[0][0], 10); + GWPlayerCoinWinSet(sp10[0][1], 10); + HuAudSStreamPlay(1); + break; + + case 0: + MGSeqDrawCreate(); + HuAudSStreamPlay(4); + break; + + case 1: + lbl_1_bss_3AC[0] = GWPlayerCfg[sp10[1][0]].character; + lbl_1_bss_3AC[1] = GWPlayerCfg[sp10[1][1]].character; + MGSeqWinCreate(lbl_1_bss_3AC[0], lbl_1_bss_3AC[1], -1, -1); + GWPlayerCoinWinSet(sp10[1][0], 10); + GWPlayerCoinWinSet(sp10[1][1], 10); + HuAudSStreamPlay(1); + break; + } + fn_1_1D64(5); + lbl_1_bss_10[1] = 210; + } + break; + + case 5: + if(--lbl_1_bss_10[1] == 0) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + object->func = fn_1_C64; + } + + break; + } + for(temp_r31=0; temp_r31<4; temp_r31++) { + CZoomM[temp_r31] = CZoom; + CRotM[temp_r31] = CRot; + CenterM[temp_r31] = Center; + + } + if(omSysExitReq && !WipeStatGet()) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + object->func = fn_1_C64; + } +} + +void fn_1_C64(omObjData *object) +{ + if(WipeStatGet()) { + return; + } + fn_1_1E44(); + fn_1_4964(); + fn_1_6A84(); + fn_1_1684(); + MGSeqKillAll(); + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + OSReport("******* M434Exit *********\n"); +} + +void fn_1_E44(omObjData *object); +void fn_1_16D8(void); +void fn_1_1950(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5, float arg6); +void fn_1_1A00(s32 arg0); +void fn_1_1A10(float arg0); + +void fn_1_CC8(omObjData *object) +{ + lbl_1_bss_8[0] = 0; + lbl_1_bss_8[1] = 140; + fn_1_16D8(); + fn_1_1950(302, 0, 125, -188, -24, 28, 0); + fn_1_1A00(1); + object->func = fn_1_E44; + omSetStatBit(object, 0x100); + object->model[0] = Hu3DModelCreateFile(0x410007); + Hu3DModelCameraSet(object->model[0], 4); + Hu3DModelLayerSet(object->model[0], 4); + Hu3DModelPosSet(object->model[0], -50, -40, -540); + Hu3DMotionSpeedSet(object->model[0], 1); + Hu3DModelRotSet(object->model[0], 0, 70, 0); + +} + +s32 lbl_1_data_A4[] = { 74, 98 }; +float lbl_1_data_AC[] = { -120, -267.9 }; + +void fn_1_10BC(omObjData *object); + +void fn_1_E44(omObjData *object) +{ + ModelData *temp_r31; + s32 temp_r30; + Vec sp8; + switch(lbl_1_bss_8[0]) { + case 0: + if(--lbl_1_bss_8[1] == 0) { + Hu3DModelAttrSet(object->model[0], 1); + lbl_1_bss_8[0] = 1; + } + for(temp_r30=0; temp_r30<2u; temp_r30++) { + if(lbl_1_bss_4 == lbl_1_data_A4[temp_r30]) { + temp_r31 = &Hu3DData[object->model[0]]; + sp8.x = temp_r31->pos.x+(lbl_1_data_AC[temp_r30]*cosd(temp_r31->rot.y)); + sp8.y = -15.000001f; + sp8.z = temp_r31->pos.z-(lbl_1_data_AC[temp_r30]*sind(temp_r31->rot.y)); + if(temp_r30 == 0) { + fn_1_47EC(&sp8); + HuAudFXPlay(1731); + } else { + fn_1_43AC(&sp8); + HuAudFXPlay(1739); + } + } + } + lbl_1_bss_4++; + break; + + case 1: + lbl_1_bss_0 += 0.02f; + if(lbl_1_bss_0 >= 1.0f) { + lbl_1_bss_8[0] = 2; + lbl_1_bss_0 = 1.0f; + object->func = fn_1_10BC; + } + fn_1_1A10(lbl_1_bss_0); + break; + } +} + +void fn_1_1788(void); + +void fn_1_10BC(omObjData *object) +{ + fn_1_1788(); + fn_1_1788(); + object->func = NULL; +} + +s32 fn_1_10F4(void) +{ + return lbl_1_bss_8[0]; +} + +void fn_1_1150(omObjData *object); + +u16 lbl_1_data_B4[6] = { + 0, 1, 2, 3, 4, 4 +}; + +float lbl_1_data_C0[6][2] = { + 0,0, + 0,0, + -33,-2, + -9,-2, + 11,-2, + 31,-2 +}; + +float lbl_1_data_F0[2][2] = { + 104, 56, + 472, 56 +}; + +typedef struct work_1150 { + s32 unk0; + s16 unk4; + s16 unk6[6]; + u16 unk12; +} Work1150; + +void fn_1_1104(Process *objman) +{ + lbl_1_bss_3C4 = omAddObjEx(objman, 0, 0, 0, -1, fn_1_1150); +} + +void fn_1_1470(omObjData *object); + +void fn_1_1150(omObjData *object) +{ + Work1150 *temp_r31; + u32 temp_r30; + s32 temp_r29; + temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 2*sizeof(Work1150), MEMORY_DEFAULT_NUM); + object->data = temp_r31; + memset(object->data, 0, 2*sizeof(Work1150)); + for(temp_r29=0; temp_r29<2; temp_r31++, temp_r29++) { + for(temp_r30=0; temp_r30<6; temp_r30++) { + switch(lbl_1_data_B4[temp_r30]) { + case 0: + temp_r31->unk6[temp_r30] = espEntry(0x61001D, 1, 0); + espPriSet(temp_r31->unk6[temp_r30], 256); + espColorSet(temp_r31->unk6[temp_r30], 0, 0, 0); + espTPLvlSet(temp_r31->unk6[temp_r30], 0.5); + break; + + case 1: + temp_r31->unk6[temp_r30] = espEntry((temp_r29 == 0) ? 0x61001B : 0x61001C, 1, 0); + espPriSet(temp_r31->unk6[temp_r30], 256); + break; + + case 2: + temp_r31->unk6[temp_r30] = espEntry(0x41000C, 1, 0); + espPriSet(temp_r31->unk6[temp_r30], 256); + espScaleSet(temp_r31->unk6[temp_r30], 0.75, 0.75); + break; + + case 3: + temp_r31->unk6[temp_r30] = espEntry(0x41000D, 1, 0); + espPriSet(temp_r31->unk6[temp_r30], 256); + break; + + case 4: + temp_r31->unk6[temp_r30] = espEntry(0x610033, 1, 0); + espPriSet(temp_r31->unk6[temp_r30], 255); + break; + } + espDispOff(temp_r31->unk6[temp_r30]); + espDrawNoSet(temp_r31->unk6[temp_r30], 0); + espAttrSet(temp_r31->unk6[temp_r30], 1); + espPosSet(temp_r31->unk6[temp_r30], lbl_1_data_F0[temp_r29][0]+lbl_1_data_C0[temp_r30][0], lbl_1_data_F0[temp_r29][1]+lbl_1_data_C0[temp_r30][1]); + } + temp_r31->unk0 = -1; + } + HuDataDirClose(0x610000); + object->func = fn_1_1470; +} + +void fn_1_1470(omObjData *object) +{ + float temp_f31; + Work1150 *temp_r31; + s32 temp_r30; + s32 temp_r29; + temp_r31 = object->data; + for(temp_r29=0; temp_r29<2; temp_r29++, temp_r31++) { + if(temp_r31->unk0 >= 0) { + if(temp_r31->unk0 == 0) { + for(temp_r30=0; temp_r30<6; temp_r30++) { + espDispOn(temp_r31->unk6[temp_r30]); + } + temp_r31->unk0++; + } + if(temp_r31->unk12) { + temp_r31->unk12--; + temp_f31 = (0.5*sind((180.0f*temp_r31->unk12)/16.0f))+1.0; + espScaleSet(temp_r31->unk6[4], temp_f31, temp_f31); + espScaleSet(temp_r31->unk6[5], temp_f31, temp_f31); + } + espBankSet(temp_r31->unk6[4], temp_r31->unk4/10); + espBankSet(temp_r31->unk6[5], temp_r31->unk4%10); + } + } +} + +void fn_1_1638(s32 arg0) +{ + Work1150 *temp_r31; + s32 temp_r30; + temp_r31 = lbl_1_bss_3C4->data; + for(temp_r30=0; temp_r30<2; temp_r30++, temp_r31++) { + temp_r31->unk0 = 0; + } +} + +void fn_1_1684(void) +{ + HuMemDirectFree(lbl_1_bss_3C4->data); +} + +void fn_1_16B4(void) +{ + lbl_1_bss_39C = 0; + lbl_1_bss_18 = 0; +} + +void fn_1_16D8(void) +{ + CameraView *temp_r31 = &lbl_1_bss_1C[lbl_1_bss_39C++]; + temp_r31->zoom = CZoom; + temp_r31->pos.x = Center.x; + temp_r31->pos.y = Center.y; + temp_r31->pos.z = Center.z; + temp_r31->rot.x = CRot.x; + temp_r31->rot.y = CRot.y; + temp_r31->rot.z = CRot.z; +} + +void fn_1_1788(void) +{ + CameraView *temp_r31 = &lbl_1_bss_1C[--lbl_1_bss_39C]; + CZoom = temp_r31->zoom; + Center.x = temp_r31->pos.x; + Center.y = temp_r31->pos.y; + Center.z = temp_r31->pos.z; + CRot.x = temp_r31->rot.x; + CRot.y = temp_r31->rot.y; + CRot.z = temp_r31->rot.z; +} + +void fn_1_1838(CameraView *arg0) +{ + CameraView *temp_r30; + CameraView sp8; + sp8 = lbl_1_bss_1C[lbl_1_bss_39C++]; + temp_r30 = &sp8; + memcpy(temp_r30, arg0, sizeof(CameraView)); + CZoom = arg0->zoom; + Center.x = arg0->pos.x; + Center.y = arg0->pos.y; + Center.z = arg0->pos.z; + CRot.x = arg0->rot.x; + CRot.y = arg0->rot.y; + CRot.z = arg0->rot.z; +} + +void fn_1_1950(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5, float arg6) +{ + CameraView *temp_r31 = &lbl_1_bss_1C[lbl_1_bss_39C++]; + temp_r31->zoom = CZoom = arg0; + temp_r31->pos.x = Center.x = arg1; + temp_r31->pos.y = Center.y = arg2; + temp_r31->pos.z = Center.z = arg3; + temp_r31->rot.x = CRot.x = arg4; + temp_r31->rot.y = CRot.y = arg5; + temp_r31->rot.z = CRot.z = arg6; +} + +void fn_1_1A00(s32 arg0) +{ + lbl_1_bss_18 = arg0; +} + +#define LERP_PARAM(view1, view2, field, weight) ((view1)->field+) + +void fn_1_1A10(float arg0) +{ + float weight; + CameraView *view1 = &lbl_1_bss_1C[lbl_1_bss_39C-1]; + CameraView *view2 = view1-1; + if(lbl_1_bss_39C < 2) { + return; + } + switch(lbl_1_bss_18) { + case 0: + weight = arg0; + break; + + case 1: + weight = sind(90.0f*arg0); + break; + + case 2: + weight = sind(90.0f*arg0); + weight *= weight; + break; + } + + CZoom = view1->zoom+(weight*(view2->zoom-view1->zoom)); + Center.x = view1->pos.x+(weight*(view2->pos.x-view1->pos.x)); + Center.y = view1->pos.y+(weight*(view2->pos.y-view1->pos.y)); + Center.z = view1->pos.z+(weight*(view2->pos.z-view1->pos.z)); + CRot.x = view1->rot.x+(weight*(view2->rot.x-view1->rot.x)); + CRot.y = view1->rot.y+(weight*(view2->rot.y-view1->rot.y)); + CRot.z = view1->rot.z+(weight*(view2->rot.z-view1->rot.z)); +} + +void fn_1_1C44(s32 arg0, s32 arg1) +{ + Work1150 *temp_r31 = &((Work1150 *)lbl_1_bss_3C4->data)[arg0]; + temp_r31->unk4 += arg1; + temp_r31->unk12 = 16; +} + +s32 fn_1_1C88(s32 arg0) +{ + Work1150 *temp_r31 = &((Work1150 *)lbl_1_bss_3C4->data)[arg0]; + return temp_r31->unk4; +} + +s32 fn_1_1CB8(void) +{ + s32 temp_r31 = fn_1_1C88(0); + s32 temp_r30 = fn_1_1C88(1); + if(temp_r31 == temp_r30) { + return 0; + } + if(temp_r31 > temp_r30) { + return -1; + } else { + return 1; + } +} + +s16 fn_1_1D44(void) +{ + return lbl_1_bss_3C2; +} + +s32 fn_1_1D54(void) +{ + return lbl_1_bss_10[0]; +} + +void fn_1_1D64(s32 arg0) +{ + lbl_1_bss_10[0] = arg0; +} + +s32 fn_1_1D74(s32 arg0) +{ + return lbl_1_bss_3A0[arg0]; +} + +s16 fn_1_1D8C(void) +{ + return lbl_1_bss_3AA; +} + +void fn_1_1D9C(void) +{ + lbl_1_bss_3A8 = 1; +} \ No newline at end of file diff --git a/src/REL/w10Dll/host.c b/src/REL/w10Dll/host.c index 8fb2d502..d183aa8c 100644 --- a/src/REL/w10Dll/host.c +++ b/src/REL/w10Dll/host.c @@ -50,7 +50,7 @@ void HostPosSet(s16 arg0) { hostPos = arg0; } -void UpdateHost(void) { +static void UpdateHost(void) { Mtx rot; Vec sp14; Vec sp8; @@ -64,7 +64,7 @@ void UpdateHost(void) { Hu3D2Dto3D(&hostPosTbl[hostPos], 1, &sp14); BoardModelPosSetV(hostMdl, &sp14); BoardCameraRotGet(&sp8); - PSMTXRotRad(rot, 'y', 0.2617994f); + MTXRotDeg(rot, 'y', 15); BoardModelMtxSet(hostMdl, &rot); BoardModelRotSet(hostMdl, sp8.x, 0.0f, 0.0f); BoardModelScaleSet(hostMdl, 0.2f, 0.2f, 0.2f); diff --git a/src/game/audio.c b/src/game/audio.c index 6d06279b..b90ac0bd 100644 --- a/src/game/audio.c +++ b/src/game/audio.c @@ -86,7 +86,7 @@ void HuAudStreamPauseOff(void) { AISetStreamPlayState(1); } -void HuAudStreamFadeOut(void) { +void HuAudStreamFadeOut(s32 arg0) { } void HuAudAllStop(void) { From 3a82e894e3a36779c0c91c6ff95f73688565d616 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 8 Jun 2024 22:21:50 -0500 Subject: [PATCH 07/23] Decompile m434dll/map.c --- config/GMPE01_00/rels/m434Dll/symbols.txt | 211 ++++---- configure.py | 2 +- src/REL/m434Dll/map.c | 616 ++++++++++++++++++++++ 3 files changed, 724 insertions(+), 105 deletions(-) create mode 100644 src/REL/m434Dll/map.c diff --git a/config/GMPE01_00/rels/m434Dll/symbols.txt b/config/GMPE01_00/rels/m434Dll/symbols.txt index 3bd117eb..8ac4caf6 100644 --- a/config/GMPE01_00/rels/m434Dll/symbols.txt +++ b/config/GMPE01_00/rels/m434Dll/symbols.txt @@ -116,104 +116,104 @@ lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:f lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 scope:local data:double lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data: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_C4 = .rodata:0x000000C4; // type:object size:0x4 data:float -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 data:float -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x8 data:double -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 data:float -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x8 data:double -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 data:double -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x8 data:double -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 data:double -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 data:float -lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 data:float -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 data:double -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:0x8 data:double -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -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_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:0x8 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x8 data:4byte -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x10 data:4byte -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x10 data:4byte -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:0x8 data:double -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0xC data:4byte -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0xC data:4byte -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 data:double -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 data:double -lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x8 data:double -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 data:double -lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 data:float -lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 data:float -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 data:double -lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x8 data:double -lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x4 data:float -lbl_1_rodata_24C = .rodata:0x0000024C; // type:object size:0x4 data:float -lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 data:float -lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 data:float -lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 data:float -lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 data:float -lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 data:float -lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 data:float -lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x8 data:double -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:0x8 data:double -lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x8 data:4byte -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x4 data:float -lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 data:float -lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 data:float -lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 data:float -lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 data:float -lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 data:float -lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 data:float -lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 data:float -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 data:float -lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x8 data:double -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 data:float -lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 data:float +lbl_1_rodata_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_C4 = .rodata:0x000000C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 scope:local data:double +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x8 scope:local data:double +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 scope:local data:double +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 scope:local data:float +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 scope:local data:double +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 scope:local data:double +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size: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:0x8 scope:local data:double +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +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_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:0x8 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x8 scope:local data:4byte +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x10 scope:local data:4byte +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:0x8 scope:local data:double +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 scope:local data:double +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 scope:local data:double +lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x8 scope:local data:double +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data:double +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 scope:local data:float +lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 scope:local data:float +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 scope:local data:double +lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x8 scope:local data:double +lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24C = .rodata:0x0000024C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 scope:local data:float +lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 scope:local data:float +lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 scope:local data:float +lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 scope:local data:float +lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 scope:local data:float +lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x8 scope:local data:double +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:0x8 scope:local data:double +lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x8 scope:local data:4byte +lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x4 scope:local data:float +lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 scope:local data:float lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 data:float @@ -285,8 +285,9 @@ lbl_1_data_AC = .data:0x000000AC; // type:object size:0x8 lbl_1_data_B4 = .data:0x000000B4; // type:object size:0xC lbl_1_data_C0 = .data:0x000000C0; // type:object size:0x30 data:float lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x10 data:float -lbl_1_data_100 = .data:0x00000100; // type:object size:0x34 -lbl_1_data_134 = .data:0x00000134; // type:object size:0x5 data:string +lbl_1_data_100 = .data:0x00000100; // type:object size:0x32 +lbl_1_data_132 = .data:0x00000132; // type:object size:0x2 +lbl_1_data_134 = .data:0x00000134; // type:object size:0x5 scope:local data:string lbl_1_data_139 = .data:0x00000139; // type:object size:0x4 data:byte lbl_1_data_140 = .data:0x00000140; // type:object size:0x18 lbl_1_data_158 = .data:0x00000158; // type:object size:0x18 @@ -294,9 +295,9 @@ lbl_1_data_170 = .data:0x00000170; // type:object size:0x4 lbl_1_data_174 = .data:0x00000174; // type:object size:0x4 data:byte lbl_1_data_178 = .data:0x00000178; // type:object size:0x4 data:byte lbl_1_data_17C = .data:0x0000017C; // type:object size:0x4 data:byte -lbl_1_data_180 = .data:0x00000180; // type:object size:0x10 +lbl_1_data_180 = .data:0x00000180; // type:object size:0x10 scope:local lbl_1_data_190 = .data:0x00000190; // type:object size:0x20 -lbl_1_data_1B0 = .data:0x000001B0; // type:object size:0xB data:string +lbl_1_data_1B0 = .data:0x000001B0; // type:object size:0xB scope:local data:string lbl_1_data_1BC = .data:0x000001BC; // type:object size:0x20 lbl_1_data_1DC = .data:0x000001DC; // type:object size:0x8 lbl_1_data_1E4 = .data:0x000001E4; // type:object size:0x18 @@ -330,10 +331,12 @@ lbl_1_bss_3D0 = .bss:0x000003D0; // type:object size:0x4 data:4byte lbl_1_bss_3D4 = .bss:0x000003D4; // type:object size:0x4 data:4byte lbl_1_bss_3D8 = .bss:0x000003D8; // type:object size:0x18 data:4byte lbl_1_bss_3F0 = .bss:0x000003F0; // type:object size:0x50 data:4byte -lbl_1_bss_440 = .bss:0x00000440; // type:object size:0x10 data:4byte +lbl_1_bss_440 = .bss:0x00000440; // type:object size:0x8 data:4byte +lbl_1_bss_448 = .bss:0x00000448; // type:object size:0x8 data:4byte lbl_1_bss_450 = .bss:0x00000450; // type:object size:0x8 data:4byte lbl_1_bss_458 = .bss:0x00000458; // type:object size:0x4 data:4byte -lbl_1_bss_45C = .bss:0x0000045C; // type:object size:0x8 data:4byte +lbl_1_bss_45C = .bss:0x0000045C; // type:object size:0x4 data:4byte +lbl_1_bss_460 = .bss:0x00000460; // type:object size:0x4 data:4byte lbl_1_bss_464 = .bss:0x00000464; // type:object size:0x2000 data:float lbl_1_bss_2464 = .bss:0x00002464; // type:object size:0x4 data:4byte lbl_1_bss_2468 = .bss:0x00002468; // type:object size:0x400 data:2byte diff --git a/configure.py b/configure.py index 515938b4..d22d5a97 100644 --- a/configure.py +++ b/configure.py @@ -1095,7 +1095,7 @@ config.libs = [ objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/m434Dll/main.c"), - Object(NonMatching, "REL/m434Dll/map.c"), + Object(Matching, "REL/m434Dll/map.c"), Object(NonMatching, "REL/m434Dll/player.c"), Object(NonMatching, "REL/m434Dll/fish.c"), }, diff --git a/src/REL/m434Dll/map.c b/src/REL/m434Dll/map.c new file mode 100644 index 00000000..ff42bdf1 --- /dev/null +++ b/src/REL/m434Dll/map.c @@ -0,0 +1,616 @@ +#include "game/object.h" +#include "game/objsub.h" +#include "game/hsfman.h" +#include "game/hsfdraw.h" + +#include "game/hsfmotion.h" +#include "game/audio.h" +#include "game/wipe.h" +#include "game/sprite.h" +#include "game/frand.h" + +#include "game/minigame_seq.h" +#include "game/gamework_data.h" +#include "REL/m434Dll.h" +#include "math.h" +#include "ext_math.h" + +typedef struct bss_2468_data { + Vec unk0; + u16 unkC; +} Bss2468Data; + +typedef struct bss_450_data { + void *unk0; + u32 unk4; +} Bss450Data; + +typedef struct bss_3F0_data { + void *unk0; + u16 unk4; + u16 unk6; + u16 unk8; + u16 unkA; + u32 unkC; + s32 unk10; +} Bss3F0Data; + +typedef struct struct_data100 { + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; + u16 unk8; +} StructData100; + +StructData100 lbl_1_data_100[5] = { + { 200, 200, 200, 200, 0 }, + { 320, 240, 160, 120, 1 }, + { 640, 480, 320, 240, 1 }, + { 640, 480, 640, 480, 0 }, + { 0, 0, 0, 0, 0 }, +}; + + +omObjData *lbl_1_bss_5868; +Vec lbl_1_bss_2868[1024]; +Bss2468Data lbl_1_bss_2468[64]; +s32 lbl_1_bss_2464; +HsfVector2f lbl_1_bss_464[1024]; +AnimData *lbl_1_bss_460; +AnimData *lbl_1_bss_45C; +AnimData *lbl_1_bss_458; +Bss450Data lbl_1_bss_450; +Bss450Data lbl_1_bss_448; +Bss450Data lbl_1_bss_440; +Bss3F0Data lbl_1_bss_3F0[4]; +Vec lbl_1_bss_3D8[2]; + +void fn_1_1E64(omObjData *object); + +void fn_1_1DB0(Process *objman) +{ + "\0"; //Force lbl_1_data_132 to 0 + lbl_1_bss_5868 = omAddObjEx(objman, 10, 16, 0, -1, fn_1_1E64); + CenterM[1].y = -CenterM[2].y + -15.000001f; + CRotM[1].x = -CRotM[2].x; +} + +void fn_1_28F0(void); + +void fn_1_1E44(void) +{ + fn_1_28F0(); +} + +void fn_1_26A4(omObjData *object); + +void fn_1_2978(ModelData *model, Mtx mtx); +void fn_1_3004(void); +void fn_1_3128(void); + +void fn_1_33A4(ModelData *model, Mtx mtx); +void fn_1_349C(ModelData *model, Mtx mtx); +void fn_1_3594(ModelData *model, Mtx mtx); +void fn_1_3CC8(ModelData *model, Mtx mtx); + +void fn_1_443C(ModelData *model, ParticleData *particle, Mtx matrix); + +void fn_1_1E64(omObjData *object) +{ + s32 temp_r30; + Vec *temp_r29; + HsfVector2f *temp_r28; + s32 temp_r27; + AnimData *temp_r26; + + object->model[9] = Hu3DHookFuncCreate(fn_1_3CC8); + Hu3DModelLayerSet(object->model[9], 1); + Hu3DModelCameraSet(object->model[9], 1); + object->model[1] = Hu3DModelCreateFile(0x410002); + Hu3DModelLayerSet(object->model[1], 2); + Hu3DModelCameraSet(object->model[1], 2); + object->model[0] = Hu3DModelCreateFile(0x410000); + Hu3DModelLayerSet(object->model[0], 2); + Hu3DModelCameraSet(object->model[0], 8); + object->model[8] = Hu3DModelCreateFile(0x410001); + Hu3DModelLayerSet(object->model[8], 2); + Hu3DModelCameraSet(object->model[8], 4); + object->model[3] = Hu3DModelCreateFile(0x410008); + Hu3DModelClusterAttrSet(object->model[3], 0, 0xC0000001); + Hu3DModelLayerSet(object->model[3], 2); + Hu3DModelCameraSet(object->model[3], 8); + object->model[4] = Hu3DModelCreateFile(0x410009); + Hu3DModelClusterAttrSet(object->model[4], 0, 0xC0000001); + Hu3DModelLayerSet(object->model[4], 2); + Hu3DModelCameraSet(object->model[4], 8); + object->model[2] = Hu3DHookFuncCreate(fn_1_2978); + Hu3DModelLayerSet(object->model[2], 3); + Hu3DModelCameraSet(object->model[2], 8); + temp_r29 = lbl_1_bss_2868; + for(temp_r30=0; temp_r30<32; temp_r30++) { + for(temp_r27=0; temp_r27<32; temp_r29++, temp_r27++) { + temp_r29->x = -700.0f+((1400.0f*temp_r27)/31.0f); + temp_r29->y = -15.000001f; + temp_r29->z = -600.0f+((1200.0f*temp_r30)/31.0f); + if(temp_r30 & 0x1) { + temp_r29->x += 700.0f/31.0f; + } + } + } + DCFlushRangeNoSync(lbl_1_bss_2868, sizeof(lbl_1_bss_2868)); + temp_r28 = lbl_1_bss_464; + for(temp_r30=0; temp_r30<1024; temp_r30++, temp_r28++) { + temp_r28->x = 360.0f*((1.0f/256.0f)*frand8()); + temp_r28->y = 2.0f*((1.0f/256.0f)*frand8())+0.5f; + } + memset(lbl_1_bss_2468, 0, sizeof(lbl_1_bss_2468)); + lbl_1_bss_2464 = 0; + lbl_1_bss_450.unk4 = 16384; + lbl_1_bss_450.unk0 = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_450.unk4, MEMORY_DEFAULT_NUM); + DCInvalidateRange(lbl_1_bss_450.unk0, lbl_1_bss_450.unk4); + fn_1_3004(); + lbl_1_bss_440.unk4 = 16384; + lbl_1_bss_440.unk0 = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_440.unk4, MEMORY_DEFAULT_NUM); + fn_1_3128(); + lbl_1_bss_45C = HuSprAnimReadFile(0x3D0019); + lbl_1_bss_458 = HuSprAnimReadFile(0x41000A); + HuDataDirClose(0x3D0000); + for(temp_r30=0; temp_r30<4; temp_r30++) { + lbl_1_bss_3F0[temp_r30].unk4 = lbl_1_data_100[temp_r30].unk0; + lbl_1_bss_3F0[temp_r30].unk6 = lbl_1_data_100[temp_r30].unk2; + lbl_1_bss_3F0[temp_r30].unk8 = lbl_1_data_100[temp_r30].unk4; + lbl_1_bss_3F0[temp_r30].unkA = lbl_1_data_100[temp_r30].unk6; + lbl_1_bss_3F0[temp_r30].unk10 = lbl_1_data_100[temp_r30].unk8; + lbl_1_bss_3F0[temp_r30].unkC = GXGetTexBufferSize(lbl_1_bss_3F0[temp_r30].unk8, lbl_1_bss_3F0[temp_r30].unkA, GX_TF_RGB565, GX_FALSE, 0); + lbl_1_bss_3F0[temp_r30].unk0 = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_3F0[temp_r30].unkC, MEMORY_DEFAULT_NUM); + memset(lbl_1_bss_3F0[temp_r30].unk0, 0, lbl_1_bss_3F0[temp_r30].unkC); + } + object->model[5] = Hu3DHookFuncCreate(fn_1_33A4); + Hu3DModelLayerSet(object->model[5], 3); + Hu3DModelCameraSet(object->model[5], 2); + object->model[6] = Hu3DHookFuncCreate(fn_1_349C); + Hu3DModelLayerSet(object->model[6], 3); + Hu3DModelCameraSet(object->model[6], 4); + object->model[7] = Hu3DHookFuncCreate(fn_1_3594); + Hu3DModelLayerSet(object->model[7], 5); + Hu3DModelCameraSet(object->model[7], 4); + temp_r26 = HuSprAnimReadFile(0x41000B); + object->model[10] = Hu3DParticleCreate(temp_r26, 100); + Hu3DParticleHookSet(object->model[10], fn_1_443C); + Hu3DModelAttrSet(object->model[10], 1); + Hu3DModelLayerSet(object->model[10], 4); + Hu3DModelCameraSet(object->model[10], 8); + object->func = fn_1_26A4; +} + +HsfAttribute *fn_1_2608(s16 model, char *name) +{ + HsfData *temp_r31; + HsfAttribute *temp_r30; + s32 temp_r29; + ModelData *temp_r28; + HsfBitmap *temp_r27; + temp_r28 = &Hu3DData[model]; + temp_r31 = temp_r28->hsfData; + temp_r30 = temp_r31->attribute; + for(temp_r29=0; temp_r29attributeCnt; temp_r29++, temp_r30++) { + temp_r27 = temp_r30->bitmap; + if(strcmp(name, temp_r27->name) == 0) { + break; + } + } + if(temp_r29 >= temp_r31->attributeCnt) { + return NULL; + } + return temp_r30; +} + +void fn_1_26A4(omObjData *object) +{ + s32 temp_r31; + Bss2468Data *temp_r30; + HsfVector2f *temp_r29; + HsfAttribute *temp_r27; + Vec *temp_r25; + s32 temp_r23; + s32 temp_r22; + Bss2468Data *sp8[64]; + + temp_r27 = fn_1_2608(object->model[1], "sora"); + if(temp_r27 != NULL) { + temp_r27->unk30 += 0.0001f; + temp_r27->unk34 -= 0.00005f; + } + temp_r30 = lbl_1_bss_2468; + temp_r22 = 0; + for(temp_r31=0; temp_r31<64; temp_r31++, temp_r30++) { + if(temp_r30->unkC) { + sp8[temp_r22++] = temp_r30; + } + } + temp_r25 = lbl_1_bss_2868; + temp_r29 = lbl_1_bss_464; + for(temp_r31=0; temp_r31<32; temp_r31++) { + for(temp_r23=0; temp_r23<32; temp_r23++, temp_r25++, temp_r29++) { + temp_r25->y = -15.000001f+(2.0f*sind(temp_r29->x)); + temp_r29->x += temp_r29->y; + } + } + DCFlushRangeNoSync(lbl_1_bss_2868, sizeof(lbl_1_bss_2868)); + for(temp_r31=0; temp_r31unkC--; + } + CenterM[1].y = -15.000001f+(-CenterM[2].y); + CRotM[1].x = -CRotM[2].x; +} + +void fn_1_28F0(void) +{ + s32 temp_r31; + for(temp_r31=0; temp_r31<4; temp_r31++) { + if(lbl_1_bss_3F0[temp_r31].unk0 != NULL) { + HuMemDirectFree(lbl_1_bss_3F0[temp_r31].unk0); + lbl_1_bss_3F0[temp_r31].unk0 = NULL; + } + } +} + +GXColor lbl_1_data_139 = { 255, 255, 255, 64 }; + +float lbl_1_data_140[2][3] = { + 0.012f, 0, 0, + 0, 0.012f, 0 +}; + +float lbl_1_data_158[2][3] = { + 0, 0, 0.5f, + 0, 0.5f, 0 +}; + +void fn_1_2978(ModelData *model, Mtx mtx) +{ + float temp_f31; + + Mtx sp1AC; + Mtx sp17C; + Mtx sp14C; + Mtx sp11C; + Mtx spEC; + Mtx spBC; + Mtx sp8C; + Mtx sp5C; + Mtx sp2C; + GXTexObj spC; + GXLoadPosMtxImm(mtx, GX_PNMTX0); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); + GXSetNumTexGens(4); + GXInitTexObj(&spC, lbl_1_bss_3F0[2].unk0, lbl_1_bss_3F0[2].unk8, lbl_1_bss_3F0[2].unkA, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXLoadTexObj(&spC, GX_TEXMAP0); + GXInitTexObj(&spC, lbl_1_bss_3F0[1].unk0, lbl_1_bss_3F0[1].unk8, lbl_1_bss_3F0[1].unkA, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXLoadTexObj(&spC, GX_TEXMAP1); + MTXLightPerspective(sp1AC, 30.0f, 1.2f, 0.5f, -0.5f, 0.5f, 0.5f); + MTXInverse(Hu3DCameraMtx, spBC); + MTXConcat(spBC, mtx, spBC); + MTXConcat(sp1AC, Hu3DCameraMtx, sp8C); + MTXConcat(sp8C, spBC, spBC); + GXLoadTexMtxImm(spBC, GX_TEXMTX0, GX_MTX3x4); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX0); + MTXLightPerspective(sp1AC, 30.0f, 1.2f, 0.5f, 0.5f, 0.5f, 0.5f); + MTXInverse(Hu3DCameraMtx, sp5C); + MTXConcat(sp5C, mtx, sp5C); + MTXConcat(sp1AC, Hu3DCameraMtx, sp2C); + MTXConcat(sp2C, sp5C, sp5C); + GXLoadTexMtxImm(sp5C, GX_TEXMTX1, GX_MTX3x4); + GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX1); + GXSetNumTevStages(2); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_CPREV, GX_CC_TEXC, GX_CC_A0, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); + GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevColor(GX_TEVSTAGE1, lbl_1_data_139); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE); + HuSprTexLoad(lbl_1_bss_45C, 0, GX_TEXMAP2, GX_REPEAT, GX_REPEAT, GX_LINEAR); + GXInitTexObj(&spC, lbl_1_bss_3F0[0].unk0, lbl_1_bss_3F0[0].unk8, lbl_1_bss_3F0[0].unkA, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXLoadTexObj(&spC, GX_TEXMAP3); + GXSetNumIndStages(2); + MTXRotDeg(sp11C, 'X', -90.0f); + temp_f31 = 1.0f/600.0f; + MTXScale(sp14C, temp_f31, temp_f31, temp_f31); + MTXConcat(sp14C, sp11C, sp17C); + sp17C[0][1] = -0.03f; + GXLoadTexMtxImm(sp17C, GX_TEXMTX2, GX_MTX2x4); + GXSetTexCoordGen(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_POS, GX_TEXMTX2); + GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD2, GX_TEXMAP2); + GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1); + GXSetIndTexMtx(GX_ITM_0, lbl_1_data_140, 0); + GXSetTevIndWarp(GX_TEVSTAGE0, GX_INDTEXSTAGE0, GX_TRUE, GX_FALSE, GX_ITM_0); + MTXRotDeg(sp11C, 'X', -90.0f); + temp_f31 = 1.0f/1200.0f; + MTXScale(sp14C, temp_f31, temp_f31, temp_f31); + MTXConcat(sp14C, sp11C, sp17C); + MTXTrans(spEC, 0.5f, 0.5f, 0.0f); + MTXConcat(spEC, sp17C, sp17C); + GXLoadTexMtxImm(sp17C, GX_TEXMTX3, GX_MTX2x4); + GXSetTexCoordGen(GX_TEXCOORD3, GX_TG_MTX2x4, GX_TG_POS, GX_TEXMTX3); + GXSetIndTexOrder(GX_INDTEXSTAGE1, GX_TEXCOORD3, GX_TEXMAP3); + GXSetIndTexCoordScale(GX_INDTEXSTAGE1, GX_ITS_1, GX_ITS_1); + GXSetIndTexMtx(GX_ITM_1, lbl_1_data_158, 0); + GXSetTevIndWarp(GX_TEVSTAGE1, GX_INDTEXSTAGE1, GX_TRUE, GX_FALSE, GX_ITM_1); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetArray(GX_VA_POS, lbl_1_bss_2868, sizeof(Vec)); + GXSetCullMode(GX_CULL_BACK); + GXCallDisplayList(lbl_1_bss_450.unk0, lbl_1_bss_450.unk4); + GXSetNumIndStages(0); + GXSetTevDirect(GX_TEVSTAGE0); + GXSetTevDirect(GX_TEVSTAGE1); +} + +void fn_1_3004(void) +{ + s32 temp_r31; + s32 temp_r30; + s32 temp_r29; + GXBeginDisplayList(lbl_1_bss_450.unk0, lbl_1_bss_450.unk4); + for(temp_r30=0; temp_r30<31; temp_r30++) { + temp_r29 = temp_r30*32; + GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 64); + if(temp_r30 & 0x1) { + for(temp_r31=0; temp_r31<32; temp_r31++) { + GXPosition1x16(temp_r29+temp_r31+32); + GXPosition1x16(temp_r29+temp_r31); + } + } else { + for(temp_r31=31; temp_r31>=0; temp_r31--) { + GXPosition1x16(temp_r29+temp_r31); + GXPosition1x16(temp_r29+temp_r31+32); + + } + } + } + lbl_1_bss_450.unk4 = GXEndDisplayList(); + DCFlushRangeNoSync(lbl_1_bss_450.unk0, lbl_1_bss_450.unk4); +} + +void fn_1_3128(void) +{ + GXBeginDisplayList(lbl_1_bss_440.unk0, lbl_1_bss_440.unk4); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition2f32(-0.5f, -0.5f); + GXTexCoord2f32(0, 0); + GXPosition2f32(0.5f, -0.5f); + GXTexCoord2f32(1, 0); + GXPosition2f32(0.5f, 0.5f); + GXTexCoord2f32(1, 1); + GXPosition2f32(-0.5f, 0.5f); + GXTexCoord2f32(0, 1); + GXEnd(); + lbl_1_bss_440.unk4 = GXEndDisplayList(); + DCFlushRangeNoSync(lbl_1_bss_440.unk0, lbl_1_bss_440.unk4); +} + +void fn_1_32DC(Bss3F0Data *arg0, GXBool arg1) +{ + GXSetZMode(GX_FALSE, GX_LEQUAL, GX_TRUE); + GXSetTexCopySrc(0, 0, arg0->unk4, arg0->unk6); + GXSetTexCopyDst(arg0->unk8, arg0->unkA, GX_TF_RGB565, arg0->unk10); + GXSetCopyClear(BGColor, 0xFFFFFF); + GXCopyTex(arg0->unk0, arg1); + GXPixModeSync(); + DCFlushRange(arg0->unk0, arg0->unkC); + +} + +void fn_1_33A4(ModelData *model, Mtx mtx) +{ + fn_1_32DC(&lbl_1_bss_3F0[1], GX_TRUE); + +} + +void fn_1_349C(ModelData *model, Mtx mtx) +{ + fn_1_32DC(&lbl_1_bss_3F0[2], GX_TRUE); +} + +void fn_1_3594(ModelData *model, Mtx mtx) +{ + Mtx sp90; + Mtx sp60; + Mtx sp30; + GXTexObj sp10; + + fn_1_32DC(&lbl_1_bss_3F0[3], GX_FALSE); + GXLoadPosMtxImm(mtx, GX_PNMTX0); + MTXLightPerspective(sp90, 30.0f, 1.2f, 0.5f, -0.5f, 0.5f, 0.5f); + MTXInverse(Hu3DCameraMtx, sp60); + MTXConcat(sp60, mtx, sp60); + MTXConcat(sp90, Hu3DCameraMtx, sp30); + MTXConcat(sp30, sp60, sp60); + GXLoadTexMtxImm(sp60, GX_TEXMTX0, GX_MTX3x4); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(1); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX0); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + GXSetZMode(GX_TRUE, GX_GREATER, GX_FALSE); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0); + GXSetNumTevStages(1); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevOp(GX_TEVSTAGE0, GX_REPLACE); + GXInitTexObj(&sp10, lbl_1_bss_3F0[2].unk0, lbl_1_bss_3F0[2].unk8, lbl_1_bss_3F0[2].unkA, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXLoadTexObj(&sp10, GX_TEXMAP0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(-1000.0f, -5.000001f, -1000.0f); + GXPosition3f32(1000.0f, -5.000001f, -1000.0f); + GXPosition3f32(1000.0f, -5.000001f, 1000.0f); + GXPosition3f32(-1000.0f, -5.000001f, 1000.0f); + GXEnd(); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(-1000.0f, -70.0f, -1000.0f); + GXPosition3f32(1000.0f, -70.0f, -1000.0f); + GXPosition3f32(1000.0f, -70.0f, 1000.0f); + GXPosition3f32(-1000.0f, -70.0f, 1000.0f); + GXEnd(); + fn_1_32DC(&lbl_1_bss_3F0[2], GX_FALSE); + GXInitTexObj(&sp10, lbl_1_bss_3F0[3].unk0, lbl_1_bss_3F0[3].unk8, lbl_1_bss_3F0[3].unkA, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXLoadTexObj(&sp10, GX_TEXMAP0); + GXSetZMode(GX_TRUE, GX_GREATER, GX_FALSE); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(-1000.0f, -5.000001f, -1000.0f); + GXPosition3f32(1000.0f, -5.000001f, -1000.0f); + GXPosition3f32(1000.0f, -5.000001f, 1000.0f); + GXPosition3f32(-1000.0f, -5.000001f, 1000.0f); + GXEnd(); +} + +GXColor lbl_1_data_170 = { 255, 0, 0, 255 }; +GXColor lbl_1_data_174 = { 255, 255, 255, 32 }; +GXColor lbl_1_data_178 = { 0, 126, 126, 255 }; + +void fn_1_3CC8(ModelData *model, Mtx mtx) +{ + + float temp_f31; + Mtx sp44; + Mtx sp14; + Bss2468Data *temp_r31; + s32 temp_r30; + s32 temp_r29; + + MTXOrtho(sp44, 0, 480, 0, 640, 0, 100); + GXSetProjection(sp44, GX_ORTHOGRAPHIC); + MTXIdentity(sp14); + GXLoadPosMtxImm(sp14, GX_PNMTX0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE); + GXSetChanMatColor(GX_COLOR0A0, lbl_1_data_178); + GXSetNumTexGens(0); + HuSprTexLoad(lbl_1_bss_458, 0, GX_TEXMAP0, GX_REPEAT, GX_REPEAT, GX_LINEAR); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE); + + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0); + GXSetNumTevStages(1); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); + GXSetScissor(0, 0, lbl_1_bss_3F0[0].unk8, lbl_1_bss_3F0[0].unkA); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_U16, 0); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition2u16(0, 0); + GXPosition2u16(lbl_1_bss_3F0[0].unk8, 0); + GXPosition2u16(lbl_1_bss_3F0[0].unk8, lbl_1_bss_3F0[0].unkA); + GXPosition2u16(0, lbl_1_bss_3F0[0].unkA); + GXEnd(); + GXSetNumTexGens(1); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); + GXSetNumTevStages(1); + + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevOp(GX_TEVSTAGE0, GX_REPLACE); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXClearVtxDesc(); + + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + temp_r29 = lbl_1_bss_2464; + for(temp_r30=0; temp_r30<64; temp_r29 = (temp_r29+1)%64, temp_r30++) { + temp_r31 = &lbl_1_bss_2468[temp_r29]; + if(temp_r31->unkC == 0) { + continue; + } + temp_f31 = (0.2f+cosd((90.0f*temp_r31->unkC)/60.0f))*128.0f; + lbl_1_data_174.a = 255.0f*sind((90.0f*temp_r31->unkC)/60.0f); + GXSetChanMatColor(GX_COLOR0A0, lbl_1_data_174); + MTXScale(sp14, 0.5f*temp_f31, 0.5f*temp_f31, 1.0f); + mtxTransCat(sp14, (200.0f*(600.0f+temp_r31->unk0.x))/1200.0f, (200.0f*(600.0f+temp_r31->unk0.z))/1200.0f, 0); + GXLoadPosMtxImm(sp14, GX_PNMTX0); + GXCallDisplayList(lbl_1_bss_440.unk0, lbl_1_bss_440.unk4); + } + fn_1_32DC(&lbl_1_bss_3F0[0], GX_TRUE); +} + +void fn_1_43AC(Vec *arg0) +{ + Bss2468Data *temp_r31; + temp_r31 = &lbl_1_bss_2468[lbl_1_bss_2464]; + if(temp_r31->unkC == 0) { + temp_r31->unk0.x = arg0->x; + temp_r31->unk0.y = arg0->y; + temp_r31->unk0.z = arg0->z; + temp_r31->unkC = 60; + lbl_1_bss_2464 = (lbl_1_bss_2464+1)%64; + return; + } +} + +void fn_1_443C(ModelData *model, ParticleData *particle, Mtx matrix) +{ + float temp_f31; + float temp_f30; + HsfanimStruct01 *temp_r31; + s32 temp_r29; + s32 temp_r28; + if(particle->unk_00 == 0) { + particle->unk_00 = 1; + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r31++, temp_r29++) { + temp_r31->unk2C = 10; + temp_f31 = ((1.0f/256.0f)*frand8())*360.0f; + temp_r31->unk34.x = (0.2f*sind(temp_f31))*100.0f; + temp_r31->unk34.y = 0; + temp_r31->unk34.z = (0.2f*cosd(temp_f31))*100.0f; + temp_f30 = (100.0f*(0.025f*((1.0f/256.0f)*frand8())))+2.5f; + temp_r31->unk08.x = temp_f30*sind(temp_f31); + temp_r31->unk08.y = (100.0f*(0.025f*(((1.0f/256.0f)*(s32)(frand() & 0x1FF))-1.0f)))+7.5000005f; + temp_r31->unk08.z = temp_f30*cosd(temp_f31); + temp_r31->unk40.r = temp_r31->unk40.g = temp_r31->unk40.b = 255; + temp_r31->unk40.a = (frand() & 0x1F)+16; + } + } + temp_r28 = 0; + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + if(temp_r31->unk40.a == 0) { + temp_r28++; + continue; + } + temp_r31->unk34.x += temp_r31->unk08.x; + temp_r31->unk34.y += temp_r31->unk08.y; + temp_r31->unk34.z += temp_r31->unk08.z; + temp_r31->unk08.y += -0.5f; + temp_r31->unk40.a--; + } + if(temp_r28 == particle->unk_30) { + model->attr |= 0x1; + } + DCStoreRangeNoSync(particle->unk_48, particle->unk_30*sizeof(HsfanimStruct01)); +} + +void fn_1_47EC(Vec *arg0) +{ + Hu3DModelPosSet(lbl_1_bss_5868->model[10], arg0->x, arg0->y, arg0->z); + Hu3DModelAttrReset(lbl_1_bss_5868->model[10], 1); + +} \ No newline at end of file From 9a4cbc42306a17d296b4942dd75dae0c7ebdb17f Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 8 Jun 2024 23:39:45 -0500 Subject: [PATCH 08/23] Match board/player.c --- configure.py | 2 +- include/game/board/item.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/configure.py b/configure.py index d22d5a97..e82a3049 100644 --- a/configure.py +++ b/configure.py @@ -391,7 +391,7 @@ config.libs = [ Object(Matching, "game/saveload.c"), Object(Matching, "game/sreset.c"), Object(Matching, "game/board/main.c"), - Object(NonMatching, "game/board/player.c"), + Object(Matching, "game/board/player.c"), Object(Matching, "game/board/model.c"), Object(Matching, "game/board/window.c"), Object(Matching, "game/board/audio.c"), diff --git a/include/game/board/item.h b/include/game/board/item.h index 4ede4953..2a637c05 100755 --- a/include/game/board/item.h +++ b/include/game/board/item.h @@ -5,7 +5,6 @@ void BoardItemStart(s32 arg0, s32 arg1); BOOL BoardItemDoneCheck(void); -void BoardItemPlayerRestore(s32 arg0, s32 arg1); void BoardItemBagItemSet(s16 *arg0); #endif From 933e2ab6934ae36c9b61edfdba166154a142161d Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 9 Jun 2024 10:43:30 -0500 Subject: [PATCH 09/23] Clean up board/player.c BoardDiceDigit2DShowSet still needs to be renamed to BoardRollDispSet but this requires changing quite a few translation units. --- config/GMPE01_00/symbols.txt | 14 ++++---- include/game/board/player.h | 21 ++---------- src/REL/w01Dll/main.c | 2 +- src/REL/w06Dll/bowser.c | 6 ++-- src/game/board/main.c | 2 +- src/game/board/player.c | 66 +++++++++++++++++------------------- src/game/board/roll.c | 2 +- src/game/hsfdraw.c | 1 + src/game/kerent.c | 16 ++++----- 9 files changed, 55 insertions(+), 75 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 18e32acf..c23a34d9 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -1183,13 +1183,13 @@ BoardPlayerDiceJumpCheck = .text:0x80067760; // type:function size:0x54 DiceJumpFunc = .text:0x800677B4; // type:function size:0x3E4 scope:local BoardPlayerIdleSet = .text:0x80067B98; // type:function size:0xF8 BoardPlayerMotBlendSet = .text:0x80067C90; // type:function size:0x5A0 -BoardPlayerMotBlendExec = .text:0x80068230; // type:function size:0x51C +ExecMotBlend = .text:0x80068230; // type:function size:0x51C scope:local BoardPlayerMotBlendCheck = .text:0x8006874C; // type:function size:0x2C -BoardDiceDigit2DInit = .text:0x80068778; // type:function size:0x138 -BoardDiceDigit2DUpdateEnable = .text:0x800688B0; // type:function size:0x38 +BoardRollCreate = .text:0x80068778; // type:function size:0x138 +BoardRollUpdateSet = .text:0x800688B0; // type:function size:0x38 BoardDiceDigit2DShowSet = .text:0x800688E8; // type:function size:0x10C -UpdateDiceDigitSprite = .text:0x800689F4; // type:function size:0x194 scope:local -UpdateDiceDigit2D = .text:0x80068B88; // type:function size:0x278 scope:local +UpdateRollSprite = .text:0x800689F4; // type:function size:0x194 scope:local +UpdateRoll = .text:0x80068B88; // type:function size:0x278 scope:local BoardPlayerBtnDownWait = .text:0x80068E00; // type:function size:0x6C BoardPlayerAutoSizeSet = .text:0x80068E6C; // type:function size:0x9C BoardPlayerAutoSizeGet = .text:0x80068F08; // type:function size:0x40 @@ -4163,7 +4163,7 @@ lbl_801398F0 = .data:0x801398F0; // type:object size:0xE data:string lbl_801398FE = .data:0x801398FE; // type:object size:0xE data:string lbl_8013990C = .data:0x8013990C; // type:object size:0x18 data:string lbl_80139924 = .data:0x80139924; // type:object size:0x18 data:string -lbl_8013993C = .data:0x8013993C; // type:object size:0x40 +eyeMatTbl = .data:0x8013993C; // type:object size:0x40 scope:local lbl_8013997C = .data:0x8013997C; // type:object size:0x20 boardMotTbl = .data:0x8013999C; // type:object size:0x20 scope:local boardMotRevTbl = .data:0x801399BC; // type:object size:0x20 scope:local @@ -5347,7 +5347,7 @@ rollResized = .sbss:0x801D3F20; // type:object size:0x4 scope:local data:4byte bowserSuitObj = .sbss:0x801D3F24; // type:object size:0x4 scope:local data:4byte junctionMask = .sbss:0x801D3F28; // type:object size:0x4 scope:local data:4byte junctionObj = .sbss:0x801D3F2C; // type:object size:0x4 scope:local data:4byte -diceDigit2DObj = .sbss:0x801D3F30; // type:object size:0x4 scope:local data:4byte +rollObj = .sbss:0x801D3F30; // type:object size:0x4 scope:local data:4byte moveAwayObj = .sbss:0x801D3F34; // type:object size:0x4 scope:local data:4byte junctionArrowRot = .sbss:0x801D3F38; // type:object size:0x8 scope:local moveAwayPlayer = .sbss:0x801D3F40; // type:object size:0x4 scope:local data:byte diff --git a/include/game/board/player.h b/include/game/board/player.h index 03467958..45a66c53 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -20,33 +20,17 @@ static inline s32 BoardPlayerHandicapGet(s32 player) return GWPlayer[player].handicap; } -static inline s32 BoardPlayerGetCurrIdx() -{ - return GWSystem.player_curr; -} - static inline PlayerState *BoardPlayerGet(s32 player) { return &GWPlayer[player]; } -static inline PlayerState *BoardPlayerGetCurr() -{ - return &GWPlayer[BoardPlayerGetCurrIdx()]; -} - static inline s16 BoardPlayerModelGet(s32 player) { PlayerState *player_ptr = BoardPlayerGet(player); return boardPlayerMdl[player_ptr->player_idx]; } -static inline s16 BoardPlayerModelGetCurr() -{ - PlayerState *player = BoardPlayerGetCurr(); - return boardPlayerMdl[player->player_idx]; -} - s32 BoardRollTypeGet(void); void BoardRollTypeSet(s32 type); s32 BoardPlayerGetCharMess(s32 player); @@ -131,14 +115,13 @@ void BoardPlayerMoveAwayStartCurr(s32, s32); void BoardPlayerCopyMat(s32); void BoardBowserSuitMotionSetJump(void); //... -void BoardPlayerMotBlendExec(omObjData*); s32 BoardPlayerAutoSizeGet(s32); void BoardPlayerAutoSizeSet(s32, s32); void BoardPlayerCopyMat(s32); void BoardBowserSuitInit(s32); void BoardBowserSuitKill(s32); -void BoardDiceDigit2DInit(s32, s32); -void BoardDiceDigit2DUpdateEnable(s32); +void BoardRollCreate(s32, s32); +void BoardRollUpdateSet(s32); void BoardPlayerResizeAnimExec(s32 player, s32 size); s32 BoardPlayerAnimBlendCheck(s32); s16 BoardBowserSuitPlayerModelGet(void); diff --git a/src/REL/w01Dll/main.c b/src/REL/w01Dll/main.c index 615dce8c..da46efb7 100755 --- a/src/REL/w01Dll/main.c +++ b/src/REL/w01Dll/main.c @@ -1717,7 +1717,7 @@ static void fn_1_63F0(Bss18Work *arg0, omObjData *arg1) { if (GWPlayer[GWSystem.player_curr].bowser_suit) { BoardModelHookSet(arg0->unk04, lbl_1_data_604[lbl_1_bss_28], BoardBowserSuitModelGet()); } else { - BoardModelHookSet(arg0->unk04, lbl_1_data_604[lbl_1_bss_28], BoardPlayerModelGetCurr()); + BoardModelHookSet(arg0->unk04, lbl_1_data_604[lbl_1_bss_28], BoardPlayerModelGet(GWSystem.player_curr)); } var_r24 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][lbl_1_bss_28]]; if (arg0->unk00_field3 != 0) { diff --git a/src/REL/w06Dll/bowser.c b/src/REL/w06Dll/bowser.c index acc1bb8b..aa63164a 100755 --- a/src/REL/w06Dll/bowser.c +++ b/src/REL/w06Dll/bowser.c @@ -172,7 +172,7 @@ void fn_1_91D8(void) { } void fn_1_9294(s32 arg0, s32 arg1) { - BoardDiceDigit2DInit(arg0, 0); + BoardRollCreate(arg0, 0); fn_1_92D8(arg0, arg1); } @@ -575,7 +575,7 @@ static void fn_1_A408(s32 arg0) { GWSystem.mg_next = 0x39; } _SetFlag(FLAG_ID_MAKE(1, 6)); - BoardDiceDigit2DUpdateEnable(arg0); + BoardRollUpdateSet(arg0); if (!_CheckFlag(FLAG_ID_MAKE(1, 12))) { GWPlayer->coin_win = 0; } @@ -620,7 +620,7 @@ static void fn_1_A408(s32 arg0) { _ClearFlag(FLAG_ID_MAKE(1, 6)); BoardCameraViewSet(1); BoardCameraMotionWait(); - BoardDiceDigit2DInit(arg0, 0); + BoardRollCreate(arg0, 0); } else { BoardNextOvlSet(var_r29); } diff --git a/src/game/board/main.c b/src/game/board/main.c index 54fd6cf2..936e50c7 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -794,7 +794,7 @@ void BoardCameraViewSet(s32 type) } else { size = 1.0f; } - BoardCameraTargetModelSet(BoardPlayerModelGetCurr()); + BoardCameraTargetModelSet(BoardPlayerModelGet(GWSystem.player_curr)); BoardPlayerPosGet(GWSystem.player_curr, &focus->target_end); BoardCameraOffsetSet(0.0f, 100.0f*size, 0.0f); focus->target_end.y += 100.0f*size; diff --git a/src/game/board/player.c b/src/game/board/player.c index e10c8820..7e0f7d5d 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -30,8 +30,8 @@ static s32 ExecJunction(s32, s16*); static void PlayerPosLerpFunc(omObjData*); static void DiceJumpFunc(omObjData*); -static void UpdateDiceDigitSprite(omObjData*); -static void UpdateDiceDigit2D(omObjData*); +static void UpdateRollSprite(omObjData*); +static void UpdateRoll(omObjData*); static void MoveAwayObjFunc(omObjData*); static void MoveAwayObjFunc(omObjData*); @@ -71,7 +71,7 @@ static s8 rollType; static s8 moveAwayPlayer[4]; static s16 junctionArrowRot[4]; static omObjData* moveAwayObj; -static omObjData* diceDigit2DObj; +static omObjData* rollObj; static omObjData* junctionObj; static s32 junctionMask; static omObjData* bowserSuitObj; @@ -84,7 +84,7 @@ static s16 suitCurrMot = -1; static omObjData* diceJumpObj[4] = {0, 0, 0, 0}; static omObjData* motDoneF[4] = {0, 0, 0, 0}; static s16 bowserSuitMot[5] = {-1, -1, -1, -1, -1}; -char* lbl_8013993C[8][2] = { +static char* eyeMatTbl[8][2] = { { "eye1", "eye2" }, { "eye1", "eye2" }, { "mat14", "mat16" }, @@ -141,9 +141,7 @@ static s32 boardSparkSfxTblAlt[] = { 0x223, 0x263, 0x2A3, 0x2E3, }; -static omObjData *megaSquishObj[] = { - 0, 0, 0, 0, -}; +static omObjData *megaSquishObj[4] = {}; static s32 megaSquishSfxTbl[] = { 0x128, 0x168, 0x1A8, 0x1E8, @@ -696,7 +694,7 @@ void BoardPlayerTurnExec(s32 arg0) { if (_CheckFlag(0x10006U) == 0) { BoardCameraViewSet(2); omVibrate((s16) arg0, 0xC, 4, 2); - rollType = -1; + BoardRollTypeSet(-1); BoardYourTurnExec(arg0); rollResized = 0; SetRollPlayerSize(arg0); @@ -716,10 +714,6 @@ void BoardPlayerTurnExec(s32 arg0) { BoardPlayerTurnMoveExec(arg0); } -static inline s32 PlayerItemUseExec(s32 arg0) { - return BoardItemUseExec(arg0); -} - void BoardPlayerTurnRollExec(s32 arg0) { s32 temp_r28; s32 temp_r30; @@ -735,7 +729,7 @@ void BoardPlayerTurnRollExec(s32 arg0) { BoardRollKill(); BoardCameraTargetPlayerSet(arg0); BoardCameraMotionWait(); - rollType = PlayerItemUseExec(arg0); + BoardRollTypeSet(BoardItemUseExec(arg0)); if (BoardRollTypeGet() == 0xC) { _SetFlag(0x10016); BoardSpaceLandExec(arg0, GWPlayer[arg0].space_curr); @@ -830,7 +824,7 @@ block_14: if (--GWPlayer[arg0].roll == 0) break; } while (1); BoardPauseDisableSet(1); - BoardDiceDigit2DUpdateEnable(arg0); + BoardRollUpdateSet(arg0); BoardPlayerIdleSet(arg0); if (GWPlayer[arg0].bowser_suit != 0) { BoardCameraTargetPlayerSet(arg0); @@ -843,7 +837,7 @@ block_14: while (BoardItemDoneCheck() == 0) { HuPrcVSleep(); } - rollType = -1; + BoardRollTypeSet(-1); } BoardPlayerSizeRestore(arg0); rollResized = 0; @@ -1762,6 +1756,8 @@ void BoardPlayerIdleSet(s32 arg0) BoardPlayerMotionShiftSet(arg0, 1, 0.0f, 8.0f, 0x40000001); } +static void ExecMotBlend(omObjData *arg0); + void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2) { s16 sp1C; f32 temp_f25; @@ -1792,7 +1788,7 @@ void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2) { } if (arg2 > 0) { var_r18 = GWPlayer[arg0].character; - temp_r3 = omAddObjEx(boardObjMan, 0x100, 0, 0, -1, &BoardPlayerMotBlendExec); + temp_r3 = omAddObjEx(boardObjMan, 0x100, 0, 0, -1, ExecMotBlend); temp_r26 = OM_GET_WORK_PTR(temp_r3, bitcopy2); temp_r26->field00_bit0 = 0; temp_r26->unk_02 = arg2; @@ -1843,7 +1839,7 @@ void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2) { } } -void BoardPlayerMotBlendExec(omObjData* arg0) { +static void ExecMotBlend(omObjData* arg0) { f32 sp48; f32 var_f27; bitcopy2* temp_r30; @@ -1900,13 +1896,13 @@ typedef struct bitcopy3 { s16 unk_06[5]; } bitcopy3; -void BoardDiceDigit2DInit(s32 arg0, s32 arg1) { +void BoardRollCreate(s32 arg0, s32 arg1) { omObjData* temp_r3; s32 var_r30; bitcopy3* temp_r31; - temp_r3 = omAddObjEx(boardObjMan, 0x105, 0, 0, -1, &UpdateDiceDigit2D); - temp_r31 = OM_GET_WORK_PTR(temp_r3, bitcopy3);; + temp_r3 = omAddObjEx(boardObjMan, 0x105, 0, 0, -1, &UpdateRoll); + temp_r31 = OM_GET_WORK_PTR(temp_r3, bitcopy3); temp_r31->field00_bit0 = 0; temp_r31->field00_bit1 = 1; temp_r31->unk_01 = 0; @@ -1924,14 +1920,14 @@ void BoardDiceDigit2DInit(s32 arg0, s32 arg1) { HuSprPosSet(temp_r31->unk_04, var_r30, 288.0f, 240.0f); HuSprAttrSet(temp_r31->unk_04, var_r30, 4); } - diceDigit2DObj = temp_r3; + rollObj = temp_r3; } -void BoardDiceDigit2DUpdateEnable(s32 arg0) { +void BoardRollUpdateSet(s32 arg0) { bitcopy3* temp_r31; - if (diceDigit2DObj != 0) { - temp_r31 = OM_GET_WORK_PTR(diceDigit2DObj, bitcopy3); + if (rollObj != 0) { + temp_r31 = OM_GET_WORK_PTR(rollObj, bitcopy3); temp_r31->field00_bit0 = 1; } } @@ -1940,8 +1936,8 @@ void BoardDiceDigit2DShowSet(s32 arg0) { s32 var_r30; bitcopy3* temp_r31; - if (diceDigit2DObj != 0) { - temp_r31 = OM_GET_WORK_PTR(diceDigit2DObj, bitcopy3); + if (rollObj != 0) { + temp_r31 = OM_GET_WORK_PTR(rollObj, bitcopy3); for (var_r30 = 0; var_r30 < 2; var_r30++) { if (arg0 != 0) { @@ -1956,11 +1952,11 @@ void BoardDiceDigit2DShowSet(s32 arg0) { HuSprAttrSet(temp_r31->unk_04, var_r30, 4); } } - UpdateDiceDigitSprite(diceDigit2DObj); + UpdateRollSprite(rollObj); } } -static void UpdateDiceDigitSprite(omObjData* arg0) { +static void UpdateRollSprite(omObjData* arg0) { Vec sp1C; s32 sp14[2]; f32 spC[2] = { 320.0f, 256.0f }; @@ -1994,17 +1990,17 @@ static void UpdateDiceDigitSprite(omObjData* arg0) { } } -static void UpdateDiceDigit2D(omObjData* arg0) { +static void UpdateRoll(omObjData* arg0) { f32 var_f30; bitcopy3* temp_r30; - temp_r30 = OM_GET_WORK_PTR(diceDigit2DObj, bitcopy3); + temp_r30 = OM_GET_WORK_PTR(rollObj, bitcopy3); if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) { if (temp_r30->unk_04 != -1) { HuSprGrpKill(temp_r30->unk_04); temp_r30->unk_04 = -1; } - diceDigit2DObj = NULL; + rollObj = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); return; } @@ -2020,7 +2016,7 @@ static void UpdateDiceDigit2D(omObjData* arg0) { var_f30 -= 90.0f; } } - UpdateDiceDigitSprite(arg0); + UpdateRollSprite(arg0); } void BoardPlayerBtnDownWait(s32 arg0, u32 arg1) { @@ -2231,7 +2227,7 @@ void BoardBowserSuitPlayerModelKill(void) { } } -void UpdateBowserSuit(omObjData* arg0) { +static void UpdateBowserSuit(omObjData* arg0) { s16 temp_r30; bitcopy3* temp_r31; @@ -2359,7 +2355,7 @@ static s32 DoSparkSpace(s32 player, s32 pause_cam) while(!BoardItemDoneCheck()) { HuPrcVSleep(); } - rollType = -1; + BoardRollTypeSet(-1); } if(rollResized) { BoardPlayerSizeRestore(player); @@ -2850,7 +2846,7 @@ void BoardPlayerCopyEyeMat(s32 arg0, s32 arg1) { material = hsfData->material; var_r29 = playerMatCopy[arg0]; if (arg1 != 0) { - temp_r28 = &lbl_8013993C[GWPlayer[arg0].character][0]; + temp_r28 = &eyeMatTbl[GWPlayer[arg0].character][0]; for (var_r25 = 0; var_r25 < hsfData->materialCnt; var_r25++, material++, var_r29++) { var_r24 = 1; diff --git a/src/game/board/roll.c b/src/game/board/roll.c index 918fae5e..44498482 100755 --- a/src/game/board/roll.c +++ b/src/game/board/roll.c @@ -296,7 +296,7 @@ static void RollMain(void) { } destMode = var_r30; GWPlayer[rollPlayer].roll = var_r30; - BoardDiceDigit2DInit(rollPlayer, 1); + BoardRollCreate(rollPlayer, 1); if (_CheckFlag(0x1000B)) { BoardTutorialHookExec(6, 0); } diff --git a/src/game/hsfdraw.c b/src/game/hsfdraw.c index 6bea3dfb..5b70c69d 100755 --- a/src/game/hsfdraw.c +++ b/src/game/hsfdraw.c @@ -2,6 +2,7 @@ #include "game/hsfanim.h" #include "game/hsfformat.h" #include "game/hsfload.h" +#include "game/sprite.h" #include "ext_math.h" #include "string.h" diff --git a/src/game/kerent.c b/src/game/kerent.c index bbde6772..c65cfd67 100644 --- a/src/game/kerent.c +++ b/src/game/kerent.c @@ -918,8 +918,8 @@ void BoardPlayerPosLerpStart(void); void BoardPlayerMoveToAsync(void); void BoardPlayerDiceJumpStart(void); void BoardPlayerDiceJumpCheck(void); -void BoardDiceDigit2DInit(void); -void BoardDiceDigit2DUpdateEnable(void); +void BoardRollCreate(void); +void BoardRollUpdateSet(void); void BoardDiceDigit2DShowSet(void); void BoardPlayerBtnDownWait(void); void BoardPlayerAutoSizeSet(void); @@ -1935,8 +1935,8 @@ extern void _kerjmp_BoardPlayerPosLerpStart(void); extern void _kerjmp_BoardPlayerMoveToAsync(void); extern void _kerjmp_BoardPlayerDiceJumpStart(void); extern void _kerjmp_BoardPlayerDiceJumpCheck(void); -extern void _kerjmp_BoardDiceDigit2DInit(void); -extern void _kerjmp_BoardDiceDigit2DUpdateEnable(void); +extern void _kerjmp_BoardRollCreate(void); +extern void _kerjmp_BoardRollUpdateSet(void); extern void _kerjmp_BoardDiceDigit2DShowSet(void); extern void _kerjmp_BoardPlayerBtnDownWait(void); extern void _kerjmp_BoardPlayerAutoSizeSet(void); @@ -3875,10 +3875,10 @@ asm void _kerent(void) { b BoardPlayerDiceJumpStart entry _kerjmp_BoardPlayerDiceJumpCheck b BoardPlayerDiceJumpCheck - entry _kerjmp_BoardDiceDigit2DInit - b BoardDiceDigit2DInit - entry _kerjmp_BoardDiceDigit2DUpdateEnable - b BoardDiceDigit2DUpdateEnable + entry _kerjmp_BoardRollCreate + b BoardRollCreate + entry _kerjmp_BoardRollUpdateSet + b BoardRollUpdateSet entry _kerjmp_BoardDiceDigit2DShowSet b BoardDiceDigit2DShowSet entry _kerjmp_BoardPlayerBtnDownWait From f5ca9fba8e852d7312234c1d40e7d84a5360cdbc Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 9 Jun 2024 11:05:21 -0500 Subject: [PATCH 10/23] More name cleanups --- config/GMPE01_00/symbols.txt | 12 ++++----- include/game/board/player.h | 5 ++-- src/REL/w06Dll/bowser.c | 4 +-- src/game/board/player.c | 49 ++++++++++++++++++------------------ src/game/board/roll.c | 13 +++++----- src/game/board/star.c | 4 +-- src/game/board/ui.c | 2 +- src/game/kerent.c | 16 ++++++------ 8 files changed, 52 insertions(+), 53 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index c23a34d9..cef26135 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -1100,8 +1100,8 @@ BoardTauntKill = .text:0x80061B4C; // type:function size:0x54 TauntUpdate = .text:0x80061BA0; // type:function size:0x3A4 scope:local BoardDataDirReadAsync = .text:0x80061F44; // type:function size:0x38 BoardDataAsyncWait = .text:0x80061F7C; // type:function size:0x48 -BoardRollTypeGet = .text:0x80061FC4; // type:function size:0xC -BoardRollTypeSet = .text:0x80061FD0; // type:function size:0xC +BoardItemPrevGet = .text:0x80061FC4; // type:function size:0xC +BoardItemPrevSet = .text:0x80061FD0; // type:function size:0xC BoardPlayerGetCharMess = .text:0x80061FDC; // type:function size:0x78 BoardPlayerGetCharName = .text:0x80062054; // type:function size:0x78 BoardPlayerIsAllCom = .text:0x800620CC; // type:function size:0x80 @@ -1211,8 +1211,8 @@ UpdateBowserSuit = .text:0x80069784; // type:function size:0x1F0 scope:local BoardPlayerSparkSet = .text:0x80069974; // type:function size:0x5C DoSparkSpace = .text:0x800699D0; // type:function size:0x1294 scope:local RemoveSparkSpace = .text:0x8006AC64; // type:function size:0xA0 scope:local -SetRollPlayerSize = .text:0x8006AD04; // type:function size:0x24C scope:local -BoardRollResizeCheck = .text:0x8006AF50; // type:function size:0x8 +SetPlayerSizeAuto = .text:0x8006AD04; // type:function size:0x24C scope:local +BoardMegaDoubleDiceCheck = .text:0x8006AF50; // type:function size:0x8 BoardPlayerResizeAnimExec = .text:0x8006AF58; // type:function size:0x38C MegaSquishFunc = .text:0x8006B2E4; // type:function size:0x950 scope:local MegaPlayerPassFunc = .text:0x8006BC34; // type:function size:0x980 scope:local @@ -5343,7 +5343,7 @@ confettiObj = .sbss:0x801D3F0C; // type:object size:0x4 scope:local data:4byte last5GfxObj = .sbss:0x801D3F10; // type:object size:0x4 scope:local data:4byte boardRandSeed = .sbss:0x801D3F14; // type:object size:0x4 data:4byte boardMainObj = .sbss:0x801D3F18; // type:object size:0x4 data:4byte -rollResized = .sbss:0x801D3F20; // type:object size:0x4 scope:local data:4byte +megaDoubleDiceF = .sbss:0x801D3F20; // type:object size:0x4 scope:local data:4byte bowserSuitObj = .sbss:0x801D3F24; // type:object size:0x4 scope:local data:4byte junctionMask = .sbss:0x801D3F28; // type:object size:0x4 scope:local data:4byte junctionObj = .sbss:0x801D3F2C; // type:object size:0x4 scope:local data:4byte @@ -5351,7 +5351,7 @@ rollObj = .sbss:0x801D3F30; // type:object size:0x4 scope:local data:4byte moveAwayObj = .sbss:0x801D3F34; // type:object size:0x4 scope:local data:4byte junctionArrowRot = .sbss:0x801D3F38; // type:object size:0x8 scope:local moveAwayPlayer = .sbss:0x801D3F40; // type:object size:0x4 scope:local data:byte -rollType = .sbss:0x801D3F44; // type:object size:0x1 scope:local data:byte +itemPrev = .sbss:0x801D3F44; // type:object size:0x1 scope:local data:byte playerMot = .sbss:0x801D3F46; // type:object size:0x8 scope:local boardPlayerMdl = .sbss:0x801D3F4E; // type:object size:0x8 modelDataList = .sbss:0x801D3F58; // type:object size:0x4 scope:local data:4byte diff --git a/include/game/board/player.h b/include/game/board/player.h index 45a66c53..893bf6ec 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -31,8 +31,8 @@ static inline s16 BoardPlayerModelGet(s32 player) return boardPlayerMdl[player_ptr->player_idx]; } -s32 BoardRollTypeGet(void); -void BoardRollTypeSet(s32 type); +s32 BoardItemPrevGet(void); +void BoardItemPrevSet(s32 type); s32 BoardPlayerGetCharMess(s32 player); char* BoardPlayerGetCharName(s32 player); s32 BoardPlayerIsAllCom(void); @@ -122,6 +122,7 @@ void BoardBowserSuitInit(s32); void BoardBowserSuitKill(s32); void BoardRollCreate(s32, s32); void BoardRollUpdateSet(s32); +s32 BoardMegaDoubleDiceCheck(void); void BoardPlayerResizeAnimExec(s32 player, s32 size); s32 BoardPlayerAnimBlendCheck(s32); s16 BoardBowserSuitPlayerModelGet(void); diff --git a/src/REL/w06Dll/bowser.c b/src/REL/w06Dll/bowser.c index aa63164a..bd6aabc0 100755 --- a/src/REL/w06Dll/bowser.c +++ b/src/REL/w06Dll/bowser.c @@ -564,7 +564,7 @@ static void fn_1_A408(s32 arg0) { } HuAudFXAllStop(); BoardAudSeqFadeOutAll(); - lbl_1_bss_0->unk06 = BoardRollTypeGet() + 1; + lbl_1_bss_0->unk06 = BoardItemPrevGet() + 1; if (BoardRandMod(100) < 50) { var_r29 = OVL_M457; GWMGAvailSet(0x1C9); @@ -651,7 +651,7 @@ static void fn_1_AB4C(s32 arg0, s32 arg1) { } BoardStatusItemSet(1); BoardMusStart(1, 6, 0x7F, 0); - BoardRollTypeSet(lbl_1_bss_0->unk06 - 1); + BoardItemPrevSet(lbl_1_bss_0->unk06 - 1); lbl_1_bss_0->unk06 = 0; BoardSpacePosGet(0, arg1, &sp3C); BoardPlayerPosSetV(arg0, &sp3C); diff --git a/src/game/board/player.c b/src/game/board/player.c index 7e0f7d5d..54aa6f89 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -42,7 +42,7 @@ static void MegaSquishFunc(omObjData *object); static s32 DoSparkSpace(s32 player, s32 pause_cam); static void RemoveSparkSpace(s32 player); -static void SetRollPlayerSize(s32 player); +static void SetPlayerSizeAuto(s32 player); static s32 MegaPlayerPassFunc(s32 player, s32 space); static s32 MegaExecJump(s32 player, s32 space); @@ -67,7 +67,7 @@ static s32 (*preTurnHook[4])(); s16 boardPlayerMdl[4]; static s16 playerMot[4]; -static s8 rollType; +static s8 itemPrev; static s8 moveAwayPlayer[4]; static s16 junctionArrowRot[4]; static omObjData* moveAwayObj; @@ -75,7 +75,7 @@ static omObjData* rollObj; static omObjData* junctionObj; static s32 junctionMask; static omObjData* bowserSuitObj; -static s32 rollResized; +static s32 megaDoubleDiceF; static s16 suitMdl = -1; static s16 suitPlayerMdl = -1; @@ -148,12 +148,12 @@ static s32 megaSquishSfxTbl[] = { 0x228, 0x268, 0x2A8, 0x2E8, }; -s32 BoardRollTypeGet(void) { - return rollType; +s32 BoardItemPrevGet(void) { + return itemPrev; } -void BoardRollTypeSet(s32 type) { - rollType = type; +void BoardItemPrevSet(s32 type) { + itemPrev = type; } s32 BoardPlayerGetCharMess(s32 player) { @@ -694,10 +694,10 @@ void BoardPlayerTurnExec(s32 arg0) { if (_CheckFlag(0x10006U) == 0) { BoardCameraViewSet(2); omVibrate((s16) arg0, 0xC, 4, 2); - BoardRollTypeSet(-1); + BoardItemPrevSet(-1); BoardYourTurnExec(arg0); - rollResized = 0; - SetRollPlayerSize(arg0); + megaDoubleDiceF = 0; + SetPlayerSizeAuto(arg0); if (preTurnHook[arg0] != 0U) { if (preTurnHook[arg0]() != 0) { preTurnHook[arg0] = 0; @@ -729,8 +729,8 @@ void BoardPlayerTurnRollExec(s32 arg0) { BoardRollKill(); BoardCameraTargetPlayerSet(arg0); BoardCameraMotionWait(); - BoardRollTypeSet(BoardItemUseExec(arg0)); - if (BoardRollTypeGet() == 0xC) { + BoardItemPrevSet(BoardItemUseExec(arg0)); + if (BoardItemPrevGet() == 0xC) { _SetFlag(0x10016); BoardSpaceLandExec(arg0, GWPlayer[arg0].space_curr); BoardCameraMoveSet(1); @@ -832,15 +832,15 @@ block_14: if (_CheckFlag(0x1000BU) != 0) { BoardTutorialHookExec(7, 0); } - if (BoardRollTypeGet() != -1) { - BoardItemPlayerRestore(arg0, BoardRollTypeGet()); + if (BoardItemPrevGet() != -1) { + BoardItemPlayerRestore(arg0, BoardItemPrevGet()); while (BoardItemDoneCheck() == 0) { HuPrcVSleep(); } - BoardRollTypeSet(-1); + BoardItemPrevSet(-1); } BoardPlayerSizeRestore(arg0); - rollResized = 0; + megaDoubleDiceF = 0; if (_CheckFlag(0x1000BU) != 0) { BoardTutorialHookExec(8, 0); } @@ -2346,7 +2346,7 @@ static s32 DoSparkSpace(s32 player, s32 pause_cam) BoardModelAlphaSet(sp2E, sp2C); HuPrcVSleep(); } - temp_r17 = BoardRollTypeGet(); + temp_r17 = BoardItemPrevGet(); if(temp_r17 == 0 || temp_r17 == 1 || temp_r17 == 2 || temp_r17 == 3 || temp_r17 == 10) { BoardCameraTargetPlayerSet(player); BoardPlayerIdleSet(player); @@ -2355,11 +2355,11 @@ static s32 DoSparkSpace(s32 player, s32 pause_cam) while(!BoardItemDoneCheck()) { HuPrcVSleep(); } - BoardRollTypeSet(-1); + BoardItemPrevSet(-1); } - if(rollResized) { + if(megaDoubleDiceF) { BoardPlayerSizeRestore(player); - rollResized = 0; + megaDoubleDiceF = 0; } if(sp128 != -1) { HuAudFXPlay(boardSparkSfxTbl[GWPlayer[sp128].character]); @@ -2428,7 +2428,7 @@ static void RemoveSparkSpace(s32 player) } } -static void SetRollPlayerSize(s32 player) +static void SetPlayerSizeAuto(s32 player) { s32 auto_size = BoardPlayerAutoSizeGet(player); if(auto_size != 0) { @@ -2446,14 +2446,13 @@ static void SetRollPlayerSize(s32 player) BoardPlayerResizeAnimExec(player, auto_size); BoardPlayerSizeSet(player, auto_size); HuPrcSleep(30); - rollResized = 1; + megaDoubleDiceF = 1; } - } -s32 BoardRollResizeCheck(void) +s32 BoardMegaDoubleDiceCheck(void) { - return rollResized; + return megaDoubleDiceF; } void BoardPlayerResizeAnimExec(s32 player, s32 size) diff --git a/src/game/board/roll.c b/src/game/board/roll.c index 44498482..318f382c 100755 --- a/src/game/board/roll.c +++ b/src/game/board/roll.c @@ -41,7 +41,6 @@ typedef struct { float unk08; } DiceDigitWork; -s32 BoardRollResizeCheck(void); static void RollMain(void); static void DiceCreate(s32 arg0); @@ -129,7 +128,7 @@ s32 BoardRollExec(s32 arg0) { numDice = 1; diceSize = 0; maxRoll = 0xA; - switch (BoardRollTypeGet()) { + switch (BoardItemPrevGet()) { case 0: numDice = 1; break; @@ -149,7 +148,7 @@ s32 BoardRollExec(s32 arg0) { } else if (BoardPlayerSizeGet(arg0) == 2) { diceSize = 2; maxRoll = 10; - if (BoardRollResizeCheck() != 0) { + if (BoardMegaDoubleDiceCheck() != 0) { numDice = 2; } } @@ -226,7 +225,7 @@ static void RollMain(void) { temp_r25 = BoardPlayerSameTeamFind(temp_r26); var_r27 += BoardPlayerItemCount(temp_r25); } - if (BoardRollTypeGet() != -1 || var_r27 == 0 || _CheckFlag(0x10009) || BoardRollResizeCheck()) { + if (BoardItemPrevGet() != -1 || var_r27 == 0 || _CheckFlag(0x10009) || BoardMegaDoubleDiceCheck()) { var_r29 = 0x90004; } else { var_r29 = 0x90002; @@ -389,7 +388,7 @@ static void DoInput(s32 arg0) { var_r30 = BoardPlayerSameTeamFind(rollPlayer); var_r31 += BoardPlayerItemCount(var_r30); } - if (var_r31 == 0 || BoardRollTypeGet() != -1 || BoardRollResizeCheck() || _CheckFlag(0x10009)) { + if (var_r31 == 0 || BoardItemPrevGet() != -1 || BoardMegaDoubleDiceCheck() || _CheckFlag(0x10009)) { if (_CheckFlag(0x10009) && GWBoardGet() == 5 && *sp8 == 0x200 && var_r31 != 0) { HuAudFXPlay(4); } @@ -910,7 +909,7 @@ static s32 GetBtnRoll(s32 arg0) { var_r31 = HuPadBtnDown[var_r29]; return var_r31; } - if (_CheckFlag(0x10009) || BoardRollTypeGet() != -1) { + if (_CheckFlag(0x10009) || BoardItemPrevGet() != -1) { return 0x100; } var_r31 = GetComBtnRoll(arg0); @@ -918,7 +917,7 @@ static s32 GetBtnRoll(s32 arg0) { } static s32 GetComBtnRoll(s32 arg0) { - if (BoardRollTypeGet() != -1 || BoardPlayerItemCount(arg0) == 0 || BoardRollResizeCheck() || _CheckFlag(0x10009)) { + if (BoardItemPrevGet() != -1 || BoardPlayerItemCount(arg0) == 0 || BoardMegaDoubleDiceCheck() || _CheckFlag(0x10009)) { return 0x100; } if (BoardComUseItemCheck(arg0)) { diff --git a/src/game/board/star.c b/src/game/board/star.c index 79f3e8fa..012a475a 100755 --- a/src/game/board/star.c +++ b/src/game/board/star.c @@ -671,7 +671,7 @@ void BoardStarShowNext(s32 arg0) { HuPrcSleep(18); } BoardStatusItemSet(0); - if (GWBoardGet() == 5 && BoardRollTypeGet() != 9 && boardStarGiveHook) { + if (GWBoardGet() == 5 && BoardItemPrevGet() != 9 && boardStarGiveHook) { boardStarGiveHook(); } BoardSpaceStarMove(); @@ -753,7 +753,7 @@ void BoardStarShowNext(s32 arg0) { BoardWinCreate(3, var_r30, -1); BoardWinWait(); BoardWinKill(); - if (GWBoardGet() == 5 && BoardRollTypeGet() != 9 && boardStarShowNextHook) { + if (GWBoardGet() == 5 && BoardItemPrevGet() != 9 && boardStarShowNextHook) { boardStarShowNextHook(); } BoardAudSeqFadeOut(1, 1000); diff --git a/src/game/board/ui.c b/src/game/board/ui.c index 57d3d101..730ee8fd 100755 --- a/src/game/board/ui.c +++ b/src/game/board/ui.c @@ -1096,7 +1096,7 @@ static void ItemUseProc(void) { BoardDataAsyncWait(var_r24); } HideItemWindow(); - BoardRollTypeSet(itemUsed); + BoardItemPrevSet(itemUsed); if (itemUsed != -1) { switch (itemUsed) { case 13: diff --git a/src/game/kerent.c b/src/game/kerent.c index c65cfd67..89e1a56b 100644 --- a/src/game/kerent.c +++ b/src/game/kerent.c @@ -903,8 +903,8 @@ void BoardPlayerIdleSet(void); void BoardPlayerMotBlendSet(void); void BoardPlayerMotBlendCheck(void); void BoardPlayerRankCalc(void); -void BoardRollTypeGet(void); -void BoardRollTypeSet(void); +void BoardItemPrevGet(void); +void BoardItemPrevSet(void); void BoardPlayerItemRemove(void); void BoardPlayerItemFind(void); void BoardPlayerItemAdd(void); @@ -1920,8 +1920,8 @@ extern void _kerjmp_BoardPlayerIdleSet(void); extern void _kerjmp_BoardPlayerMotBlendSet(void); extern void _kerjmp_BoardPlayerMotBlendCheck(void); extern void _kerjmp_BoardPlayerRankCalc(void); -extern void _kerjmp_BoardRollTypeGet(void); -extern void _kerjmp_BoardRollTypeSet(void); +extern void _kerjmp_BoardItemPrevGet(void); +extern void _kerjmp_BoardItemPrevSet(void); extern void _kerjmp_BoardPlayerItemRemove(void); extern void _kerjmp_BoardPlayerItemFind(void); extern void _kerjmp_BoardPlayerItemAdd(void); @@ -3845,10 +3845,10 @@ asm void _kerent(void) { b BoardPlayerMotBlendCheck entry _kerjmp_BoardPlayerRankCalc b BoardPlayerRankCalc - entry _kerjmp_BoardRollTypeGet - b BoardRollTypeGet - entry _kerjmp_BoardRollTypeSet - b BoardRollTypeSet + entry _kerjmp_BoardItemPrevGet + b BoardItemPrevGet + entry _kerjmp_BoardItemPrevSet + b BoardItemPrevSet entry _kerjmp_BoardPlayerItemRemove b BoardPlayerItemRemove entry _kerjmp_BoardPlayerItemFind From 3f30fd613da69687b72b2e36e3276234dab5566e Mon Sep 17 00:00:00 2001 From: kabiskac Date: Sun, 9 Jun 2024 18:09:26 +0200 Subject: [PATCH 11/23] Renamed BoardDiceDigit2DShowSet to BoardRollDispSet --- config/GMPE01_00/symbols.txt | 2 +- include/game/board/player.h | 2 +- src/REL/w01Dll/main.c | 12 ++++++------ src/REL/w02Dll/main.c | 6 +++--- src/REL/w02Dll/roulette.c | 4 ++-- src/REL/w03Dll/condor.c | 4 ++-- src/REL/w03Dll/mg_coin.c | 4 ++-- src/REL/w03Dll/mg_item.c | 4 ++-- src/REL/w03Dll/river.c | 4 ++-- src/REL/w03Dll/statue.c | 4 ++-- src/REL/w04Dll/boo_event.c | 4 ++-- src/REL/w04Dll/bridge.c | 4 ++-- src/REL/w04Dll/main.c | 8 ++++---- src/REL/w05Dll/hotel.c | 6 +++--- src/REL/w05Dll/main.c | 4 ++-- src/REL/w05Dll/monkey.c | 6 +++--- src/REL/w06Dll/bowser.c | 4 ++-- src/REL/w06Dll/bridge.c | 4 ++-- src/REL/w06Dll/fire.c | 4 ++-- src/REL/w06Dll/mg_coin.c | 4 ++-- src/REL/w06Dll/mg_item.c | 4 ++-- src/game/board/boo_house.c | 6 +++--- src/game/board/lottery.c | 4 ++-- src/game/board/pause.c | 4 ++-- src/game/board/player.c | 14 +++++++------- src/game/board/shop.c | 4 ++-- src/game/board/star.c | 4 ++-- src/game/kerent.c | 10 +++++----- 28 files changed, 72 insertions(+), 72 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index cef26135..b93c5259 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -1187,7 +1187,7 @@ ExecMotBlend = .text:0x80068230; // type:function size:0x51C scope:local BoardPlayerMotBlendCheck = .text:0x8006874C; // type:function size:0x2C BoardRollCreate = .text:0x80068778; // type:function size:0x138 BoardRollUpdateSet = .text:0x800688B0; // type:function size:0x38 -BoardDiceDigit2DShowSet = .text:0x800688E8; // type:function size:0x10C +BoardRollDispSet = .text:0x800688E8; // type:function size:0x10C UpdateRollSprite = .text:0x800689F4; // type:function size:0x194 scope:local UpdateRoll = .text:0x80068B88; // type:function size:0x278 scope:local BoardPlayerBtnDownWait = .text:0x80068E00; // type:function size:0x6C diff --git a/include/game/board/player.h b/include/game/board/player.h index 893bf6ec..df4e2c49 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -128,7 +128,7 @@ s32 BoardPlayerAnimBlendCheck(s32); s16 BoardBowserSuitPlayerModelGet(void); void BoardBowserSuitMotionSetWait(void); void BoardBowserSuitPlayerModelKill(void); -void BoardDiceDigit2DShowSet(s32); +void BoardRollDispSet(s32); s32 BoardPlayerMotBlendCheck(s32); void BoardBowserSuitMotionSetWalk(void); s16 BoardBowserSuitModelGet(void); diff --git a/src/REL/w01Dll/main.c b/src/REL/w01Dll/main.c index da46efb7..70dce0bd 100755 --- a/src/REL/w01Dll/main.c +++ b/src/REL/w01Dll/main.c @@ -650,13 +650,13 @@ static s32 fn_1_157C(void) { temp_curr = GWPlayer[GWSystem.player_curr].space_curr; temp_r31 = BoardSpaceFlagGet(0, temp_curr) & 0x600000; - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); if (temp_r31 == 0x200000) { fn_1_130C(); } else if (temp_r31 == 0x400000) { fn_1_128C(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } static void fn_1_1670(void) { @@ -1355,7 +1355,7 @@ static void fn_1_4FA8(void) { static void fn_1_4FD8(void) { lbl_1_bss_6B4 = GWSystem.player_curr; - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); if (BoardPlayerSizeGet(lbl_1_bss_6B4) == 2 || GWPlayer[lbl_1_bss_6B4].bowser_suit) { return; } @@ -1364,7 +1364,7 @@ static void fn_1_4FD8(void) { while (lbl_1_bss_8) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } static void fn_1_50D4(void) { @@ -1518,13 +1518,13 @@ static void fn_1_5694(s32 arg0) { static void fn_1_586C(s32 arg0, s32 arg1) { lbl_1_bss_29 = arg0; lbl_1_bss_26 = arg1; - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); lbl_1_bss_14 = HuPrcChildCreate(fn_1_592C, 0x2003, 0x2000, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_14, fn_1_5B2C); while (lbl_1_bss_14) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } static void fn_1_592C(void) { diff --git a/src/REL/w02Dll/main.c b/src/REL/w02Dll/main.c index 9caf50aa..d50f3d08 100644 --- a/src/REL/w02Dll/main.c +++ b/src/REL/w02Dll/main.c @@ -432,7 +432,7 @@ s32 fn_1_1128(void) { s16 currSpace; currSpace = GWPlayer[GWSystem.player_curr].space_curr; spaceFlags = BoardSpaceFlagGet(0, currSpace) & 0x600000; - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); if (spaceFlags & 0x200000) { fn_1_990(); @@ -444,7 +444,7 @@ s32 fn_1_1128(void) { } } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } void fn_1_121C(u32 mesg) { @@ -453,4 +453,4 @@ void fn_1_121C(u32 mesg) { BoardWinKill(); } -f32 const padMain = 0.0f; \ No newline at end of file +f32 const padMain = 0.0f; diff --git a/src/REL/w02Dll/roulette.c b/src/REL/w02Dll/roulette.c index 9105d06e..eb273ffc 100644 --- a/src/REL/w02Dll/roulette.c +++ b/src/REL/w02Dll/roulette.c @@ -105,7 +105,7 @@ void fn_1_BCFC(void) { s32 temp_r30; s32 temp_r29; - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); spaceLinkFlags = BoardSpaceLinkFlagSearch(0, (s32) GWPlayer[lbl_1_bss_388].space_curr, 2U); BoardPlayerMoveToAsync(lbl_1_bss_388, spaceLinkFlags); while (GWPlayer[lbl_1_bss_388].moving) { @@ -129,7 +129,7 @@ void fn_1_BCFC(void) { BoardCameraViewSet(1); BoardStatusShowSetAll(1); BoardCameraMotionWait(); - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); HuPrcKill(NULL); while(TRUE) { HuPrcVSleep(); diff --git a/src/REL/w03Dll/condor.c b/src/REL/w03Dll/condor.c index 4a937672..a8d7a2a8 100644 --- a/src/REL/w03Dll/condor.c +++ b/src/REL/w03Dll/condor.c @@ -105,7 +105,7 @@ void fn_1_3058(void) { } s32 fn_1_309C(void) { - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); lbl_1_bss_70 = HuPrcChildCreate(fn_1_313C, 0x2003U, 0x2000U, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_70, fn_1_3218); @@ -113,7 +113,7 @@ s32 fn_1_309C(void) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); return lbl_1_bss_7C; } diff --git a/src/REL/w03Dll/mg_coin.c b/src/REL/w03Dll/mg_coin.c index a52e5570..6a06ff1e 100644 --- a/src/REL/w03Dll/mg_coin.c +++ b/src/REL/w03Dll/mg_coin.c @@ -94,13 +94,13 @@ void fn_1_7B58(void) { } void fn_1_7BA8(void) { - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); lbl_1_bss_140 = HuPrcChildCreate(&fn_1_7C98, 0x2003, 0x2000, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_140, &fn_1_7C38); while (lbl_1_bss_140) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } void fn_1_7C38(void) { diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index 0b9441b9..afb983f6 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -141,7 +141,7 @@ void fn_1_9A9C(void) { } void fn_1_9AA0(void) { - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); lbl_1_bss_180 = HuPrcChildCreate(fn_1_9C8C, 0x2003, 0x2000, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_180, fn_1_9B30); @@ -149,7 +149,7 @@ void fn_1_9AA0(void) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } void fn_1_9B30(void) { diff --git a/src/REL/w03Dll/river.c b/src/REL/w03Dll/river.c index 577e1994..a1359f2e 100644 --- a/src/REL/w03Dll/river.c +++ b/src/REL/w03Dll/river.c @@ -101,7 +101,7 @@ s32 fn_1_6698(void) { } s16 fn_1_675C(void) { - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); lbl_1_bss_120 = HuPrcChildCreate(fn_1_67F8, 0x2003, 0x2000, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_120, fn_1_6884); @@ -109,7 +109,7 @@ s16 fn_1_675C(void) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); return lbl_1_bss_128; } diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c index 91374679..c5855b55 100644 --- a/src/REL/w03Dll/statue.c +++ b/src/REL/w03Dll/statue.c @@ -53,7 +53,7 @@ s8 lbl_1_bss_2C; Process* lbl_1_bss_28; void fn_1_12C8(void) { - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); lbl_1_bss_28 = HuPrcChildCreate(&fn_1_1358, 0x2003, 0x2000, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_28, &fn_1_152C); @@ -61,7 +61,7 @@ void fn_1_12C8(void) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } void fn_1_1358(void) { diff --git a/src/REL/w04Dll/boo_event.c b/src/REL/w04Dll/boo_event.c index d61dbbac..3a89e85b 100755 --- a/src/REL/w04Dll/boo_event.c +++ b/src/REL/w04Dll/boo_event.c @@ -180,7 +180,7 @@ static void fn_1_20EC(void) { } fn_1_5648(); fn_1_2C10(); - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); BoardPlayerMotBlendSet(temp_r30, 180, 15); BoardCameraViewSet(2); while (!BoardPlayerMotBlendCheck(temp_r30)) { @@ -238,7 +238,7 @@ static void fn_1_20EC(void) { fn_1_28BC(); fn_1_2B8C(); BoardAudSeqPause(0, 0, 1000); - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); BoardCameraViewSet(1); BoardCameraMotionWait(); BoardPlayerMotionKill(temp_r30, lbl_1_bss_52[temp_r30][0]); diff --git a/src/REL/w04Dll/bridge.c b/src/REL/w04Dll/bridge.c index f3fa85fb..8198e5e7 100755 --- a/src/REL/w04Dll/bridge.c +++ b/src/REL/w04Dll/bridge.c @@ -101,7 +101,7 @@ void fn_1_1618(void) { temp_r31 = GWSystem.player_curr; temp_r30 = BoardPlayerMotionCreate(temp_r31, lbl_1_data_2AC[GWPlayer[temp_r31].character]); - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); BoardPlayerMotBlendSet(temp_r31, 180, 15); BoardCameraViewSet(2); while (!BoardPlayerMotBlendCheck(temp_r31)) { @@ -125,7 +125,7 @@ void fn_1_1618(void) { BoardPlayerMotionShiftSet(temp_r31, 1, 0.0f, 10.0f, 0x40000001); BoardCameraViewSet(1); BoardCameraMotionWait(); - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); BoardPlayerMotionKill(temp_r31, temp_r30); HuPrcKill(NULL); while (TRUE) { diff --git a/src/REL/w04Dll/main.c b/src/REL/w04Dll/main.c index 25da96a5..ec194dc7 100755 --- a/src/REL/w04Dll/main.c +++ b/src/REL/w04Dll/main.c @@ -208,12 +208,12 @@ static s32 fn_1_7FC(void) { if (lbl_1_bss_0->unk00 & 1) { fn_1_55B4(); } else { - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); BoardPlayerIdleSet(temp_r31); BoardWinCreate(0, MAKE_MESSID(32, 25), -1); BoardWinWait(); BoardWinKill(); - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } return 1; } @@ -389,7 +389,7 @@ static s32 fn_1_103C(void) { var_r30 = GWPlayer[GWSystem.player_curr].space_curr; temp_r31 = BoardSpaceFlagGet(0, var_r30) & 0x600000; - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); if (temp_r31 & 0x200000) { lbl_1_bss_4 = HuPrcChildCreate(fn_1_958, 0x2003, 0x2000, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_4, fn_1_CF8); @@ -399,7 +399,7 @@ static s32 fn_1_103C(void) { } else if (temp_r31 & 0x400000) { fn_1_DB0(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } s32 fn_1_1130(s16 arg0, float arg1, float arg2) { diff --git a/src/REL/w05Dll/hotel.c b/src/REL/w05Dll/hotel.c index 30043d10..285330e9 100644 --- a/src/REL/w05Dll/hotel.c +++ b/src/REL/w05Dll/hotel.c @@ -69,7 +69,7 @@ void fn_1_155C(void) { u32 var_r31; lbl_1_bss_28 = GWSystem.player_curr; - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); temp_r28 = BoardModelMotionCreate(lbl_1_bss_14[4], lbl_1_data_180); temp_f30 = BoardPlayerRotYGet(lbl_1_bss_28); BoardPlayerPosGet(lbl_1_bss_28, &sp58); @@ -195,7 +195,7 @@ void fn_1_155C(void) { } BoardCameraMotionWait(); BoardModelMotionKill(lbl_1_bss_14[4], temp_r28); - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } s32 lbl_1_data_188[4] = { 0x79000C, 0x79000E, 0x79000F, 0x790010 }; @@ -229,7 +229,7 @@ void fn_1_1E44(void) { s32 var_r30; lbl_1_bss_28 = GWSystem.player_curr; - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); for (var_r31 = 0; var_r31 < 4; var_r31++) { sp8[var_r31] = BoardModelMotionCreate(lbl_1_bss_14[4], lbl_1_data_188[var_r31]); diff --git a/src/REL/w05Dll/main.c b/src/REL/w05Dll/main.c index 7e679724..f2c14f97 100644 --- a/src/REL/w05Dll/main.c +++ b/src/REL/w05Dll/main.c @@ -404,7 +404,7 @@ s32 fn_1_1114(void) { s16 var_r30 = GWPlayer[GWSystem.player_curr].space_curr; temp_r31 = BoardSpaceFlagGet(0, var_r30) & 0x600000; - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); if ((temp_r31 & 0x200000) != 0) { lbl_1_bss_4 = HuPrcChildCreate(fn_1_954, 0x2003, 0x3000, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_4, fn_1_D4C); @@ -415,7 +415,7 @@ s32 fn_1_1114(void) { } else if ((temp_r31 & 0x400000) != 0) { fn_1_E40(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } s32 fn_1_1208(s16 arg0, f32 arg8, f32 arg9) { diff --git a/src/REL/w05Dll/monkey.c b/src/REL/w05Dll/monkey.c index 71f0d0b5..e68f49af 100644 --- a/src/REL/w05Dll/monkey.c +++ b/src/REL/w05Dll/monkey.c @@ -62,7 +62,7 @@ void fn_1_2C7C(s32 arg0) { for (var_r31 = 0; var_r31 < 3; var_r31++) { lbl_1_bss_30[var_r31] = BoardPlayerMotionCreate(lbl_1_bss_4C, lbl_1_data_1CC[var_r31] | lbl_1_data_124[GWPlayer[lbl_1_bss_4C].character]); } - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); BoardPlayerIdleSet(lbl_1_bss_4C); spC.y = 100.0f; spC.z = 0.0f; @@ -83,7 +83,7 @@ void fn_1_2C7C(s32 arg0) { BoardPlayerIdleSet(lbl_1_bss_4C); BoardCameraViewSet(1); BoardCameraMotionWait(); - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); for (var_r31 = 0; var_r31 < 2; var_r31++) { BoardModelKill(lbl_1_bss_44[var_r31]); @@ -333,4 +333,4 @@ void fn_1_3E8C(void) { HuPrcVSleep(); } HuPrcEnd(); -} \ No newline at end of file +} diff --git a/src/REL/w06Dll/bowser.c b/src/REL/w06Dll/bowser.c index bd6aabc0..5b05c367 100755 --- a/src/REL/w06Dll/bowser.c +++ b/src/REL/w06Dll/bowser.c @@ -182,13 +182,13 @@ s32 fn_1_92D8(s32 arg0, s32 arg1) { return lbl_1_bss_F0; } lbl_1_bss_F4 = arg0; - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); lbl_1_bss_E8 = HuPrcChildCreate(fn_1_93C8, 0x2003, 0x3800, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_E8, fn_1_94D4); while (lbl_1_bss_E8) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); return lbl_1_bss_F0; } diff --git a/src/REL/w06Dll/bridge.c b/src/REL/w06Dll/bridge.c index 6078145d..9045bc1e 100755 --- a/src/REL/w06Dll/bridge.c +++ b/src/REL/w06Dll/bridge.c @@ -171,7 +171,7 @@ void fn_1_7FA4(void) { } void fn_1_8264(s32 arg0, s16 arg1) { - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); lbl_1_bss_E6 = arg0; lbl_1_bss_E4 = arg1; lbl_1_bss_C8 = HuPrcChildCreate(fn_1_8320, 0x2003, 0x3800, 0, boardMainProc); @@ -179,7 +179,7 @@ void fn_1_8264(s32 arg0, s16 arg1) { while (lbl_1_bss_C8) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } static void fn_1_8320(void) { diff --git a/src/REL/w06Dll/fire.c b/src/REL/w06Dll/fire.c index 4b0cdba0..be247094 100755 --- a/src/REL/w06Dll/fire.c +++ b/src/REL/w06Dll/fire.c @@ -67,13 +67,13 @@ static s32 lbl_1_data_230[] = { }; void fn_1_6EF0(void) { - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); lbl_1_bss_90 = HuPrcChildCreate(fn_1_6F80, 0x2003, 0x3800, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_90, fn_1_7210); while (lbl_1_bss_90) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } static void fn_1_6F80(void) { diff --git a/src/REL/w06Dll/mg_coin.c b/src/REL/w06Dll/mg_coin.c index b480e7c4..112ba588 100755 --- a/src/REL/w06Dll/mg_coin.c +++ b/src/REL/w06Dll/mg_coin.c @@ -138,13 +138,13 @@ void fn_1_4A10(void) { void fn_1_4A60(void) { lbl_1_bss_8C = 0; - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); lbl_1_bss_48 = HuPrcChildCreate(fn_1_4BA0, 0x2003, 0x3800, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_48, fn_1_4B00); while (lbl_1_bss_48) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } static void fn_1_4B00(void) { diff --git a/src/REL/w06Dll/mg_item.c b/src/REL/w06Dll/mg_item.c index 3fe296f0..60400ef0 100755 --- a/src/REL/w06Dll/mg_item.c +++ b/src/REL/w06Dll/mg_item.c @@ -174,13 +174,13 @@ void fn_1_F6C(void) { } void fn_1_1054(void) { - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); lbl_1_bss_18 = HuPrcChildCreate(fn_1_1148, 0x2003, 0x3800, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_18, fn_1_10E4); while (lbl_1_bss_18) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } static void fn_1_10E4(void) { diff --git a/src/game/board/boo_house.c b/src/game/board/boo_house.c index 05e5b246..1e88d796 100644 --- a/src/game/board/boo_house.c +++ b/src/game/board/boo_house.c @@ -120,13 +120,13 @@ void BoardBooHouseKill(void) { void BoardBooHouseExec(s32 arg0) { currPlayer = arg0; if (BoardPlayerSizeGet(currPlayer) != 2) { - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); houseProc = HuPrcChildCreate(&ExecBooHouse, 0x2003, 0x3800, 0, boardMainProc); HuPrcDestructorSet2(houseProc, &DestroyBooHouse); while (houseProc != 0U) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } } @@ -181,7 +181,7 @@ static void ExecBooHouse(void) { } } BoardWinKill(); - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); BoardAudSeqPause(0, 1, 0x3E8); BoardDataAsyncWait(var_r28); temp_r29 = BoardSpaceLinkFlagSearch(0, var_r30, 0x02000000); diff --git a/src/game/board/lottery.c b/src/game/board/lottery.c index fe14093c..8b718597 100755 --- a/src/game/board/lottery.c +++ b/src/game/board/lottery.c @@ -210,13 +210,13 @@ void BoardLotteryExec(void) { if (BoardPlayerSizeGet(GWSystem.player_curr) == 2) { return; } - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); lotteryProc = HuPrcChildCreate(ExecLottery, 0x2003, 0x3800, 0, boardMainProc); HuPrcDestructorSet2(lotteryProc, DestroyLottery); while (lotteryProc) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } void BoardLotteryInit(void) { diff --git a/src/game/board/pause.c b/src/game/board/pause.c index 3bdcbfe3..75c5f74e 100755 --- a/src/game/board/pause.c +++ b/src/game/board/pause.c @@ -154,7 +154,7 @@ void BoardPauseStart(void) { static void PauseExit(void) { if (pauseQuitF == 0) { BoardRollWinDispSet(1); - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); BoardStatusItemSet(1); BoardRollUPauseSet(1); BoardLast5GfxShowSet(1); @@ -200,7 +200,7 @@ static void PauseProcess(void) { BoardFilterFadeInit(30, 0xA0); temp_r31 = BoardDataDirReadAsync(DATADIR_BPAUSE); BoardRollWinDispSet(0); - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); BoardStatusItemSet(0); BoardRollUPauseSet(0); BoardLast5GfxShowSet(0); diff --git a/src/game/board/player.c b/src/game/board/player.c index 54aa6f89..b24a3d2a 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -1241,12 +1241,12 @@ static s32 DoDebugMove(s32 arg0, s16* arg1) { goto end; } else { if (HuPadBtnDown[var_r20] == 0x10) { - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); BoardPlayerIdleSet(arg0); StopJunctionPlayer(0); BoardViewMapExec(arg0); InitJunction(arg0, sp28->space_curr, -1.0f); - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); goto loop_21; } if ((0.0f != spA0.x) || (0.0f != spA0.z)) { @@ -1438,7 +1438,7 @@ static s32 ExecJunction(s32 arg0, s16* arg1) { break; } else if (var_r20 == 0x20 || var_r20 == 0x10) { HuAudFXPlay(1); - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); BoardPlayerIdleSet(arg0); StopJunctionPlayer(0); if (var_r20 == 0x10) { @@ -1447,7 +1447,7 @@ static s32 ExecJunction(s32 arg0, s16* arg1) { BoardViewOverheadExec(arg0); } InitJunction(arg0, sp30->space_curr, var_f28); - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } else { if ((0.0f != spC4.x) || (0.0f != spC4.z)) { var_f29 = (90.0 + (180.0 * (atan2(spC4.z, spC4.x) / M_PI))); @@ -1932,7 +1932,7 @@ void BoardRollUpdateSet(s32 arg0) { } } -void BoardDiceDigit2DShowSet(s32 arg0) { +void BoardRollDispSet(s32 arg0) { s32 var_r30; bitcopy3* temp_r31; @@ -2292,7 +2292,7 @@ static s32 DoSparkSpace(s32 player, s32 pause_cam) if(!sp138) { return 0; } - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); if(pause_cam) { BoardCameraMoveSet(0); } else { @@ -2413,7 +2413,7 @@ static s32 DoSparkSpace(s32 player, s32 pause_cam) BoardCameraTargetPlayerSet(sp30); BoardCameraMotionWait(); BoardCameraMoveSet(1); - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); return 1; } diff --git a/src/game/board/shop.c b/src/game/board/shop.c index 20608ce6..f6ed2050 100755 --- a/src/game/board/shop.c +++ b/src/game/board/shop.c @@ -194,13 +194,13 @@ void BoardShopExec(s32 player, s32 space) { return; } shopPlayer = player; - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); shopProc = HuPrcChildCreate(ExecShop, 0x2003, 0x3800, 0, boardMainProc); HuPrcDestructorSet2(shopProc, DestroyShop); while (shopProc) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } static void ExecShop(void) { diff --git a/src/game/board/star.c b/src/game/board/star.c index 012a475a..b980c827 100755 --- a/src/game/board/star.c +++ b/src/game/board/star.c @@ -161,13 +161,13 @@ void BoardStarExec(s32 arg0, s32 arg1) { return; } if (BoardPlayerSizeGet(arg0) != 2) { - BoardDiceDigit2DShowSet(0); + BoardRollDispSet(0); starProc = HuPrcChildCreate(ExecStar, 0x2003, 0x3800, 0, boardMainProc); HuPrcDestructorSet2(starProc, DestroyStar); while (starProc != NULL) { HuPrcVSleep(); } - BoardDiceDigit2DShowSet(1); + BoardRollDispSet(1); } } diff --git a/src/game/kerent.c b/src/game/kerent.c index 89e1a56b..68e81c2a 100644 --- a/src/game/kerent.c +++ b/src/game/kerent.c @@ -920,7 +920,7 @@ void BoardPlayerDiceJumpStart(void); void BoardPlayerDiceJumpCheck(void); void BoardRollCreate(void); void BoardRollUpdateSet(void); -void BoardDiceDigit2DShowSet(void); +void BoardRollDispSet(void); void BoardPlayerBtnDownWait(void); void BoardPlayerAutoSizeSet(void); void BoardPlayerAutoSizeGet(void); @@ -1937,7 +1937,7 @@ extern void _kerjmp_BoardPlayerDiceJumpStart(void); extern void _kerjmp_BoardPlayerDiceJumpCheck(void); extern void _kerjmp_BoardRollCreate(void); extern void _kerjmp_BoardRollUpdateSet(void); -extern void _kerjmp_BoardDiceDigit2DShowSet(void); +extern void _kerjmp_BoardRollDispSet(void); extern void _kerjmp_BoardPlayerBtnDownWait(void); extern void _kerjmp_BoardPlayerAutoSizeSet(void); extern void _kerjmp_BoardPlayerAutoSizeGet(void); @@ -3879,8 +3879,8 @@ asm void _kerent(void) { b BoardRollCreate entry _kerjmp_BoardRollUpdateSet b BoardRollUpdateSet - entry _kerjmp_BoardDiceDigit2DShowSet - b BoardDiceDigit2DShowSet + entry _kerjmp_BoardRollDispSet + b BoardRollDispSet entry _kerjmp_BoardPlayerBtnDownWait b BoardPlayerBtnDownWait entry _kerjmp_BoardPlayerAutoSizeSet @@ -4072,4 +4072,4 @@ asm void _kerent(void) { entry _kerjmp_BoardBooHouseTutorialExec b BoardBooHouseTutorialExec #endif -} \ No newline at end of file +} From 6bfa15a230ac38ec1779cc4c90e7a0972198badb Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 9 Jun 2024 14:11:30 -0500 Subject: [PATCH 12/23] Fix Window MesMaxSize symbols --- config/GMPE01_00/symbols.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index b93c5259..2fe543bf 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -795,8 +795,8 @@ HuWinMesMaxSizeGet = .text:0x80046F04; // type:function size:0x170 HuWinInsertMesSizeGet = .text:0x80047074; // type:function size:0x54 HuWinMesSizeCancelCRSet = .text:0x800470C8; // type:function size:0x8 HuWinMesMaxSizeBetGet = .text:0x800470D0; // type:function size:0x114 -GetMesMaxSizeSub = .text:0x800471E4; // type:function size:0x2A0 -GetMesMaxSizeSub2 = .text:0x80047484; // type:function size:0x1CC +GetMesMaxSizeSub = .text:0x800471E4; // type:function size:0x2A0 scope:local +GetMesMaxSizeSub2 = .text:0x80047484; // type:function size:0x1CC scope:local HuWinKeyWaitNumGet = .text:0x80047650; // type:function size:0x88 HuWinPushKeySet = .text:0x800476D8; // type:function size:0x2C HuWinDisablePlayerSet = .text:0x80047704; // type:function size:0x34 From 42e933819f4eb985b2f74deb96f4bfd0cc81338d Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 10 Jun 2024 08:35:27 -0500 Subject: [PATCH 13/23] Decompile rest of m434dll --- config/GMPE01_00/rels/m434Dll/symbols.txt | 110 +-- configure.py | 2 +- include/REL/m434Dll.h | 13 + src/REL/m434Dll/fish.c | 816 ++++++++++++++++++++++ src/REL/m434Dll/main.c | 2 +- src/REL/m434Dll/player.c | 676 ++++++++++++++++++ src/REL/modeseldll/modesel.c | 4 +- 7 files changed, 1564 insertions(+), 59 deletions(-) create mode 100644 src/REL/m434Dll/fish.c create mode 100644 src/REL/m434Dll/player.c diff --git a/config/GMPE01_00/rels/m434Dll/symbols.txt b/config/GMPE01_00/rels/m434Dll/symbols.txt index 8ac4caf6..8ffa0589 100644 --- a/config/GMPE01_00/rels/m434Dll/symbols.txt +++ b/config/GMPE01_00/rels/m434Dll/symbols.txt @@ -214,61 +214,61 @@ lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 scope:local data: lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x8 scope:local data:double lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 scope:local data:float lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 scope:local data:float -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float -lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 data:float -lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 data:float -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x8 data:double -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 data:double -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 data:float -lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 data:float -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 data:double -lbl_1_rodata_300 = .rodata:0x00000300; // type:object size: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:0x4 data:float -lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 data:float -lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 data:float -lbl_1_rodata_324 = .rodata:0x00000324; // type:object size:0x4 data:float -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 data:float -lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 data:float -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 data:float -lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 data:float -lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 data:float -lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 data:float -lbl_1_rodata_344 = .rodata:0x00000344; // type:object size: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:0x8 data:double -lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 data:float -lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 data:float -lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 data:float -lbl_1_rodata_364 = .rodata:0x00000364; // type:object size:0x4 data:float -lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 data:float -lbl_1_rodata_36C = .rodata:0x0000036C; // type:object size:0x4 data:float -lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 data:float -lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 data:float -lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 data:float -lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x48 -lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x48 -lbl_1_rodata_40C = .rodata:0x0000040C; // type:object size:0x4 data:float -lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x4 data:float -lbl_1_rodata_414 = .rodata:0x00000414; // type:object size:0x4 data:float -lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 data:float -lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 data:float -lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x8 data:double -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_434 = .rodata:0x00000434; // type:object size:0x4 data:float -lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 data:float -lbl_1_rodata_43C = .rodata:0x0000043C; // type:object size:0x4 data:4byte -lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x48 -lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x48 +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_300 = .rodata:0x00000300; // type:object size: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:0x4 scope:local data:float +lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 scope:local data:float +lbl_1_rodata_324 = .rodata:0x00000324; // type:object size:0x4 scope:local data:float +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 scope:local data:float +lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 scope:local data:float +lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 scope:local data:float +lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 scope:local data:float +lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 scope:local data: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:0x8 scope:local data:double +lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 scope:local data:float +lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 scope:local data:float +lbl_1_rodata_364 = .rodata:0x00000364; // type:object size:0x4 scope:local data:float +lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 scope:local data:float +lbl_1_rodata_36C = .rodata:0x0000036C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 scope:local data:float +lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 scope:local data:float +lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 scope:local data:float +lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x48 scope:local +lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x48 scope:local +lbl_1_rodata_40C = .rodata:0x0000040C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x4 scope:local data:float +lbl_1_rodata_414 = .rodata:0x00000414; // type:object size:0x4 scope:local data:float +lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 scope:local data:float +lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x8 scope:local data:double +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_434 = .rodata:0x00000434; // type:object size:0x4 scope:local data:float +lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 scope:local data:float +lbl_1_rodata_43C = .rodata:0x0000043C; // type:object size:0x4 scope:local data:4byte +lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x48 scope:local +lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x48 scope:local lbl_1_data_0 = .data:0x00000000; // type:object size:0xC data:float lbl_1_data_C = .data:0x0000000C; // type:object size:0xC data:float lbl_1_data_18 = .data:0x00000018; // type:object size:0xC data:float diff --git a/configure.py b/configure.py index e82a3049..525fce57 100644 --- a/configure.py +++ b/configure.py @@ -1097,7 +1097,7 @@ config.libs = [ Object(Matching, "REL/m434Dll/main.c"), Object(Matching, "REL/m434Dll/map.c"), Object(NonMatching, "REL/m434Dll/player.c"), - Object(NonMatching, "REL/m434Dll/fish.c"), + Object(Matching, "REL/m434Dll/fish.c"), }, ), Rel( diff --git a/include/REL/m434Dll.h b/include/REL/m434Dll.h index 5ea5f4ea..d83bd084 100644 --- a/include/REL/m434Dll.h +++ b/include/REL/m434Dll.h @@ -9,6 +9,8 @@ s32 fn_1_1CB8(void); s32 fn_1_1D54(void); void fn_1_1D64(s32 arg0); s32 fn_1_1D74(s32 arg0); +s32 fn_1_1D8C(void); +void fn_1_1D9C(void); void fn_1_1DB0(Process *objman); void fn_1_1E44(void); @@ -16,8 +18,19 @@ void fn_1_43AC(Vec *arg0); void fn_1_47EC(Vec *arg0); void fn_1_4854(Process *objman); void fn_1_4964(void); +float fn_1_6690(float arg0, float arg1, float arg2); +float fn_1_67AC(float arg0, float arg1); void fn_1_6860(Process *objman); void fn_1_6A84(void); +s32 fn_1_8884(Vec *arg0, float arg1, float arg2, float arg3, float arg4, float arg5, s32 arg6, s32 arg7); +void fn_1_8AEC(s16 arg0, Vec *arg1); +void fn_1_8B58(s16 arg0); + +void fn_1_8C14(s32 arg0, Vec *arg1, float arg2); +s32 fn_1_8D78(Vec *arg0); +s32 fn_1_8E2C(s32 arg0, Vec *arg1); +s32 fn_1_8F3C(s32 arg0); +s32 fn_1_8FA0(Vec *arg0); #endif diff --git a/src/REL/m434Dll/fish.c b/src/REL/m434Dll/fish.c new file mode 100644 index 00000000..12c5df8c --- /dev/null +++ b/src/REL/m434Dll/fish.c @@ -0,0 +1,816 @@ +#include "game/object.h" +#include "game/objsub.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/audio.h" +#include "game/wipe.h" + +#include "game/minigame_seq.h" +#include "game/gamework_data.h" +#include "REL/m434Dll.h" +#include "math.h" +#include "ext_math.h" + +typedef struct bss_7480_struct { + s32 unk0; + s32 unk4; + s32 unk8; + float unkC; + float unk10; + Vec unk14; +} Bss7480Struct; + +omObjData *lbl_1_bss_7880; +Bss7480Struct lbl_1_bss_7480[32]; +float lbl_1_bss_6480[1024]; +u8 lbl_1_bss_6080[1024]; +u16 lbl_1_bss_5880[1024]; + +s32 lbl_1_data_2C0[] = { 0x410005, 0x410006 }; + +void fn_1_6A88(omObjData *object); + +void fn_1_6860(Process *objman) +{ + float temp_f31; + Vec spC; + s32 temp_r31; + s32 temp_r30; + s32 temp_r29; + omObjData *temp_r28; + for(temp_r31=0; temp_r31<32; temp_r31++) { + lbl_1_bss_7480[temp_r31].unk4 = lbl_1_bss_7480[temp_r31].unk0 = 0; + lbl_1_bss_7480[temp_r31].unkC = lbl_1_bss_7480[temp_r31].unk10 = 0; + lbl_1_bss_7480[temp_r31].unk8 = -1; + } + spC.y = 0; + spC.z = -650; + for(temp_r31=0; temp_r31<32; temp_r31++) { + temp_r30 = temp_r31*32; + spC.x = -650.0f; + for(temp_r29=0; temp_r29<32; temp_r29++, temp_r30++) { + lbl_1_bss_6480[temp_r30] = 0; + lbl_1_bss_6080[temp_r30] = 0; + lbl_1_bss_5880[temp_r30] = 0; + temp_f31 = VECMag(&spC); + if(temp_f31 < 522.0f) { + lbl_1_bss_6080[temp_r30] = 1; + } + spC.x += (1300.0f/32.0f); + } + spC.z += (1300.0f/32.0f); + } + temp_r28 = lbl_1_bss_7880 = omAddObjEx(objman, 30, 1, 0, -1, fn_1_6A88); + temp_r28->work[0] = 0; +} + +void fn_1_6A84(void) +{ + +} + +typedef struct work_6A88 { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; + s16 unkC; + s16 unkE; + s32 unk10; + s32 unk14; + s32 unk18; + Vec unk1C; + Vec unk28; + Vec unk34; + Vec unk40; + float unk4C; +} Work6A88; + +void fn_1_6D7C(ModelData *model, Mtx mtx); +void fn_1_6DB8(omObjData *object); + +s32 fn_1_8254(s32 arg0, Vec *arg1); + +void fn_1_6A88(omObjData *object) +{ + float temp_f31; + float temp_f30; + s16 sp8[2]; + Work6A88 *temp_r31; + s32 temp_r30; + s32 temp_r28; + Work6A88 *temp_r27; + temp_r27 = HuMemDirectMallocNum(HEAP_SYSTEM, 20*sizeof(Work6A88), MEMORY_DEFAULT_NUM); + object->data = temp_r27; + memset(temp_r27, 0, 20*sizeof(Work6A88)); + for(temp_r30=0; temp_r30<2; temp_r30++) { + sp8[temp_r30] = Hu3DModelCreateFile(lbl_1_data_2C0[temp_r30]); + } + temp_r31 = temp_r27; + for(temp_r30=0; temp_r30<20; temp_r30++, temp_r31++) { + temp_r28 = 0; + if(temp_r30 >= 15) { + temp_r28++; + } + temp_r31->unk0 = temp_r28+1; + temp_r31->unk2 = Hu3DModelLink(sp8[temp_r28]); + Hu3DModelCameraSet(temp_r31->unk2, 4); + Hu3DModelLayerSet(temp_r31->unk2, 4); + temp_f31 = frandmod(360); + temp_f30 = frandmod(464); + temp_r31->unk4C = temp_f31; + temp_r31->unk1C.x = temp_f30*sind(temp_f31); + temp_r31->unk1C.y = -50.0f; + temp_r31->unk1C.z = temp_f30*cosd(temp_f31); + temp_r31->unk34.z = frandmod(360); + temp_r31->unk40.y = 1.0f; + temp_r31->unk40.z = 0; + temp_r31->unk10 = 1; + temp_r31->unk14 = 0; + temp_r31->unkE = -1; + temp_r31->unkC = 0; + temp_r31->unk18 = fn_1_8254(-1, &temp_r31->unk1C); + temp_r31->unkA = 20; + } + for(temp_r30=0; temp_r30<2; temp_r30++) { + if(sp8[temp_r30] > 0) { + Hu3DModelKill(sp8[temp_r30]); + } + + + } + object->work[1] = 140; + object->model[0] = Hu3DHookFuncCreate(fn_1_6D7C); + Hu3DModelCameraSet(object->model[0], 8); + Hu3DModelLayerSet(object->model[0], 7); + object->func = fn_1_6DB8; +} + +void fn_1_6DBC(omObjData *object); + +void fn_1_6D7C(ModelData *model, Mtx mtx) +{ + if(!omPauseChk()) { + fn_1_6DBC(lbl_1_bss_7880); + } +} + + +void fn_1_6DB8(omObjData *object) +{ + +} + +void fn_1_7DF0(void); +s32 fn_1_84D0(Work6A88 *arg0); +void fn_1_85C4(Work6A88 *arg0, Vec *arg1); + +void fn_1_6DBC(omObjData *object) +{ + Vec sp8; + float temp_f31; + float temp_f30; + Work6A88 *temp_r31; + s32 temp_r30; + s32 temp_r29; + s32 temp_r27; + s32 temp_r26; + s32 temp_r25; + s32 temp_r24; + Work6A88 *temp_r23; + temp_r23 = object->data; + fn_1_7DF0(); + if(object->work[1]) { + object->work[1]--; + return; + } + temp_r26 = 0; + temp_r31 = temp_r23; + for(temp_r27=0; temp_r27<20; temp_r27++, temp_r31++) { + temp_r30 = 0; + temp_r24 = 0; + switch(temp_r31->unk4) { + case 0: + if(temp_r31->unkC == 0) { + temp_r24 = fn_1_84D0(temp_r31); + if(temp_r24) { + temp_r30 = 1; + temp_r31->unkC = 60; + } + } else { + temp_r31->unkC--; + } + if(temp_r31->unkC == 0 && temp_r31->unk40.y > temp_r31->unk40.z) { + temp_r30 = 1; + } else { + VECSubtract(&temp_r31->unk28, &temp_r31->unk1C, &sp8); + temp_f31 = VECMag(&sp8); + if(temp_f31 < 50.0f) { + temp_r30 = 1; + } + } + if(temp_r30) { + if(temp_r31->unkC == 0) { + temp_f31 = frandmod(1000); + temp_f30 = frandmod(1000); + if(temp_f31 > temp_f30) { + temp_f30 = temp_f31; + } + temp_f30 = 0.53f*temp_f30; + temp_f31 = temp_r31->unk4C+((0.06f*frandmod(1000))-30); + temp_r31->unk4C = temp_f31; + temp_r31->unk28.x = temp_f30*sind(temp_f31); + temp_r31->unk28.z = temp_f30*cosd(temp_f31); + } else { + fn_1_85C4(temp_r31, &temp_r31->unk28); + } + temp_r31->unk28.y = temp_r31->unk1C.y; + temp_r31->unk40.y = 0; + temp_r31->unk40.z = frandmod(200)+100.0f; + temp_r31->unk34.y = 200; + if(temp_r31->unkC) { + temp_r31->unk34.y *= 2.0f; + } + } + VECSubtract(&temp_r31->unk28, &temp_r31->unk1C, &sp8); + temp_r31->unk40.x = atan2d(sp8.x, sp8.z); + if(temp_r31->unkC != 0) { + temp_r31->unk34.z = fn_1_6690(temp_r31->unk34.z, temp_r31->unk40.x, 0.15f); + temp_r31->unk4C = atan2d(temp_r31->unk28.x, temp_r31->unk28.z); + } else { + temp_r31->unk34.z = fn_1_6690(temp_r31->unk34.z, temp_r31->unk40.x, 0.07f); + } + if(temp_r31->unkC != 0) { + temp_r31->unk34.y += (300.0f-temp_r31->unk34.y)*0.02f; + } else { + temp_r31->unk34.y += (75.0f-temp_r31->unk34.y)*0.02f; + } + temp_r31->unk34.x += (temp_r31->unk34.y-temp_r31->unk34.x)*0.2f; + temp_r31->unk1C.x += sind(temp_r31->unk34.z)*((1.0f/60.0f)*temp_r31->unk34.x); + temp_r31->unk1C.z += cosd(temp_r31->unk34.z)*((1.0f/60.0f)*temp_r31->unk34.x); + temp_r31->unk40.y += (1.0f/60.0f)*temp_r31->unk34.x; + temp_r31->unk18 = fn_1_8254(temp_r31->unk18, &temp_r31->unk1C); + Hu3DModelPosSetV(temp_r31->unk2, &temp_r31->unk1C); + Hu3DModelRotSet(temp_r31->unk2, 0, temp_r31->unk34.z, 0); + break; + + case 1: + temp_r31->unk34.z += 3.0000002f; + Hu3DModelPosSetV(temp_r31->unk2, &temp_r31->unk1C); + Hu3DModelRotSet(temp_r31->unk2, 0, temp_r31->unk34.z, 0); + if(fn_1_1D54() == 4) { + Hu3DModelAttrSet(temp_r31->unk2, 1); + } + break; + + case 2: + if(temp_r31->unk14) { + if(temp_r31->unk8 == 0) { + sp8.x = (0.1f*frandmod(1000)+500.0f)-50.0f; + sp8.y = temp_r31->unk1C.y; + sp8.z = (0.1f*frandmod(1000)+500.0f)-50.0f; + if(temp_r31->unk1C.x < 0.0f) { + sp8.x = -sp8.x; + } + VECSubtract(&sp8, &temp_r31->unk1C, &sp8); + temp_r31->unk40.x = temp_r31->unk34.z = atan2d(sp8.x, sp8.z); + temp_r31->unk28.x = (1.0f/60.0f)*sp8.x; + temp_r31->unk28.y = 6.666667f; + temp_r31->unk28.z = (1.0f/60.0f)*sp8.z; + temp_r31->unk8++; + HuAudFXPlay(1734); + } + temp_r29 = 0; + if(temp_r31->unk1C.y <= -15.000001f) { + temp_r29 = 1; + } + temp_r31->unk28.y += -0.27222225f; + VECAdd(&temp_r31->unk1C, &temp_r31->unk28, &temp_r31->unk1C); + if(!temp_r29 && temp_r31->unk1C.y <= -15.000001f) { + fn_1_43AC(&temp_r31->unk1C); + if(temp_r31->unkE >= 0) { + omVibrate(temp_r31->unkE, 12, 6, 6); + temp_r31->unkE = -1; + } + HuAudFXPlay(1741); + } + sp8 = temp_r31->unk28; + sp8.y = 0; + temp_f31 = VECMag(&sp8); + temp_f31 = atan2d(temp_r31->unk28.y, temp_f31); + Hu3DModelPosSetV(temp_r31->unk2, &temp_r31->unk1C); + Hu3DModelRotSet(temp_r31->unk2, -temp_f31, temp_r31->unk34.z, 0); + if(temp_r31->unk1C.y <= -50.0) { + temp_r31->unk14 = 0; + temp_r31->unk40.z = 0; + temp_r31->unk40.y = 1; + temp_r31->unk4++; + } + } + + break; + + case 3: + if(temp_r31->unk40.y > temp_r31->unk40.z) { + temp_r30 = 1; + } + VECSubtract(&temp_r31->unk28, &temp_r31->unk1C, &sp8); + temp_f31 = VECMag(&sp8); + if(temp_f31 < 30.000002f) { + temp_r30 = 1; + } + if(temp_r30) { + temp_f31 = frandmod(360); + temp_f30 = (0.08f*frandmod(1000))+20; + temp_r31->unk28.x = temp_f30*sind(temp_f31); + temp_r31->unk28.z = temp_f30*cosd(temp_f31); + temp_r31->unk28.y = -50; + temp_r31->unk1C.y = temp_r31->unk28.y; + temp_r31->unk28.x += 480.00003f; + temp_r31->unk28.z += 480.00003f; + if(temp_r31->unk1C.x < 0.0f) { + temp_r31->unk28.x *= -1.0f; + } + temp_r31->unk40.y = 0; + temp_r31->unk40.z = frandmod(100)+100.0f; + temp_r31->unk34.y = 100; + if(frandmod(100) < 5) { + temp_r31->unk4++; + temp_r31->unk8 = 0; + HuAudFXPlay(1740); + } + } + VECSubtract(&temp_r31->unk28, &temp_r31->unk1C, &sp8); + temp_r31->unk40.x = atan2d(sp8.x, sp8.z); + temp_r31->unk34.z = fn_1_6690(temp_r31->unk34.z, temp_r31->unk40.x, 0.07f); + temp_r31->unk34.y += (50.0f-temp_r31->unk34.y)*0.02f; + temp_r31->unk34.x += (temp_r31->unk34.y-temp_r31->unk34.x)*0.2f; + temp_r31->unk1C.x += sind(temp_r31->unk34.z)*((1.0f/60.0f)*temp_r31->unk34.x); + temp_r31->unk1C.z += cosd(temp_r31->unk34.z)*((1.0f/60.0f)*temp_r31->unk34.x); + temp_r31->unk40.y += (1.0f/60.0f)*temp_r31->unk34.x; + Hu3DModelPosSetV(temp_r31->unk2, &temp_r31->unk1C); + Hu3DModelRotSet(temp_r31->unk2, 0, temp_r31->unk34.z, 0); + + break; + + case 4: + if(temp_r31->unk8 == 0) { + sp8.x = (0.1f*frandmod(1000)+480.00003f)-50.0f; + sp8.y = temp_r31->unk1C.y; + sp8.z = (0.1f*frandmod(1000)+480.00003f)-50.0f; + if(temp_r31->unk1C.x < 0) { + sp8.x = -sp8.x; + } + VECSubtract(&sp8, &temp_r31->unk1C, &sp8); + temp_r31->unk40.x = temp_r31->unk34.z = atan2d(sp8.x, sp8.z); + temp_r31->unk28.x = (1.0f/60.0f)*sp8.x; + temp_r31->unk28.y = 6.666667f; + temp_r31->unk28.z = (1.0f/60.0f)*sp8.z; + temp_r31->unk8++; + } + temp_r29 = temp_r25 = 0; + if(temp_r31->unk1C.y <= -15.000001f) { + temp_r29 = 1; + } + temp_r31->unk28.y += -0.27222225f; + VECAdd(&temp_r31->unk1C, &temp_r31->unk28, &temp_r31->unk1C); + if(temp_r31->unk1C.y <= -15.000001f) { + temp_r25 = 1; + } + if(temp_r29 != temp_r25) { + fn_1_43AC(&temp_r31->unk1C); + if(temp_r31->unk28.y < 0.0f) { + HuAudFXPlay(1741); + } + } + sp8 = temp_r31->unk28; + sp8.y = 0; + temp_f31 = VECMag(&sp8); + temp_f31 = atan2d(temp_r31->unk28.y*0.3f, temp_f31); + Hu3DModelPosSetV(temp_r31->unk2, &temp_r31->unk1C); + Hu3DModelRotSet(temp_r31->unk2, -temp_f31, temp_r31->unk34.z, 0); + if(temp_r31->unk1C.y <= -50.0) { + temp_r31->unk40.z = 0; + temp_r31->unk40.y = 1; + temp_r31->unk4--; + } + break; + } + if(temp_r31->unk4 < 2) { + temp_r26++; + } + } + if(temp_r26 == 0) { + fn_1_1D9C(); + } +} + +void fn_1_7DF0(void) +{ + Vec sp14; + Vec sp8; + float temp_f31; + float temp_f30; + + Bss7480Struct *temp_r31; + s32 temp_r30; + s32 temp_r29; + s32 temp_r28; + s32 temp_r27; + s32 temp_r26; + s32 temp_r25; + s32 temp_r24; + + temp_r31 = lbl_1_bss_7480; + temp_r31 = lbl_1_bss_7480; + for(temp_r30=0; temp_r30<32; temp_r30++, temp_r31++) { + if(temp_r31->unk0 == 0) { + continue; + } + temp_r31->unk0--; + if(temp_r31->unk4) { + temp_r31->unk4--; + temp_r31->unkC += (temp_r31->unk10-temp_r31->unkC)*0.2f; + } else { + if(temp_r31->unk0 < 100.0f) { + temp_r31->unkC *= 0.98f; + } + } + } + for(temp_r30=0; temp_r30<1024; temp_r30++) { + lbl_1_bss_6480[temp_r30] = 0; + } + temp_r31 = lbl_1_bss_7480; + for(temp_r30=0; temp_r30<32; temp_r30++, temp_r31++) { + if(temp_r31->unk0 == 0) { + continue; + } + temp_r28 = (16.0f/650.0f)*(650.0f+(temp_r31->unk14.x-temp_r31->unkC)); + temp_r25 = 1.0f+(temp_r28+((16.0f/650.0f)*(2.0f*temp_r31->unkC))); + temp_r29 = (16.0f/650.0f)*(650.0f+(temp_r31->unk14.z-temp_r31->unkC)); + temp_r24 = 1.0f+(temp_r29+((16.0f/650.0f)*(2.0f*temp_r31->unkC))); + if(temp_r28 < 0) { + temp_r28 = 0; + } + if(temp_r25 > 32) { + temp_r25 = 32; + } + if(temp_r29 < 0) { + temp_r29 = 0; + } + if(temp_r24 > 32) { + temp_r24 = 32; + } + temp_f30 = 1.0f/temp_r31->unkC; + sp14.y = 0; + sp14.z = ((1300.0f/32.0f)*temp_r29)-650.0f; + while(temp_r29unk14, &sp14, &sp8); + temp_f31 = 1.0f-(temp_f30*VECMag(&sp8)); + if(temp_f31 > 0.0f) { + lbl_1_bss_6480[temp_r26] += temp_f31; + } + sp14.x += (1300.0f/32.0f); + } + sp14.z += (1300.0f/32.0f); + temp_r29++; + } + } + +} + +void fn_1_83C8(s32 arg0); + +s32 fn_1_8254(s32 arg0, Vec *arg1) +{ + s32 temp_r31; + s32 temp_r30; + s32 temp_r29; + s32 temp_r28; + s32 temp_r27; + s32 sp8[9][2] = { + -1,-1, + 0,-1, + 1,-1, + -1,0, + 0,0, + 1,0, + -1,1, + 0,1, + 1,1 + }; + fn_1_83C8(arg0); + arg0 = -1; + temp_r29 = (16.0f/650.0f)*(650.0f+arg1->x); + temp_r30 = (16.0f/650.0f)*(650.0f+arg1->z); + if(temp_r29 >= 0 && temp_r29 < 32 && temp_r30 >= 0 && temp_r30 < 32) { + arg0 = temp_r29+(32*temp_r30); + for(temp_r31=0; temp_r31<9; temp_r31++) { + temp_r28 = temp_r29+sp8[temp_r31][0]; + temp_r27 = temp_r30+sp8[temp_r31][1]; + if(temp_r28 >= 0 && temp_r28 < 32 && temp_r27 >= 0 && temp_r27 < 32) { + lbl_1_bss_5880[temp_r28+(32*temp_r27)]++; + } + } + } + return arg0; +} + +void fn_1_83C8(s32 arg0) +{ + s32 temp_r31; + s32 temp_r30; + s32 temp_r29; + s32 temp_r28; + s32 temp_r27; + s32 sp8[9][2] = { + -1,-1, + 0,-1, + 1,-1, + -1,0, + 0,0, + 1,0, + -1,1, + 0,1, + 1,1 + }; + if(arg0 < 0 || arg0 >= 1024) { + return; + } + temp_r28 = arg0%32; + temp_r27 = (arg0-temp_r28)/32; + for(temp_r31=0; temp_r31<9; temp_r31++) { + temp_r30 = temp_r28+sp8[temp_r31][0]; + temp_r29 = temp_r27+sp8[temp_r31][1]; + if(temp_r30 >= 0 && temp_r30 < 32 && temp_r29 >= 0 && temp_r29 < 32) { + lbl_1_bss_5880[temp_r30+(32*temp_r29)]--; + } + } +} + +s32 fn_1_84D0(Work6A88 *arg0) +{ + float temp_f31; + Vec spC; + Bss7480Struct *temp_r31; + s32 temp_r30; + s32 temp_r29; + s32 temp_r28; + temp_r31 = lbl_1_bss_7480; + temp_r28 = 0; + temp_r31 = lbl_1_bss_7480; + for(temp_r29=0; temp_r29<32; temp_r29++, temp_r31++) { + if(temp_r31->unk0 == 0) { + continue; + } + VECSubtract(&temp_r31->unk14, &arg0->unk1C, &spC); + temp_f31 = 1.0f-(VECMag(&spC)/temp_r31->unkC); + if(temp_f31 < 0.3f) { + continue; + } + temp_r30 = 1; + if(temp_r31->unk4) { + temp_r30++; + } + if(temp_r28 < temp_r30) { + temp_r28 = temp_r30; + } + } + return temp_r28; +} + +void fn_1_85C4(Work6A88 *arg0, Vec *arg1) +{ + Vec sp24; + Vec sp18; + Vec spC; + float temp_f31; + float temp_f30; + s32 temp_r31; + s32 temp_r30; + s32 temp_r29; + sp18.x = sp18.y = sp18.z = 0; + temp_f30 = 5000; + sp24.y = 0; + sp24.z = -650; + for(temp_r30=0; temp_r30<32; temp_r30++) { + temp_r31 = 32*temp_r30; + sp24.x = -650; + for(temp_r29=0; temp_r29<32; temp_r29++, temp_r31++) { + if(lbl_1_bss_6480[temp_r31] < 0.15f && lbl_1_bss_6080[temp_r31]) { + VECSubtract(&arg0->unk1C, &sp24, &spC); + temp_f31 = VECMag(&spC); + if(temp_f31 > 81.25f) { + temp_f31 += 162.5f*lbl_1_bss_5880[temp_r31]; + if(temp_f31 < temp_f30) { + temp_f30 = temp_f31; + sp18 = sp24; + } + } + } + sp24.x += (1300.0f/32.0f); + } + sp24.z += (1300.0f/32.0f); + } + sp18.x += ((1300.0f/32000.0f)*frandmod(1000))-(1300.0f/64.0f); + sp18.z += ((1300.0f/32000.0f)*frandmod(1000))-(1300.0f/64.0f); + *arg1 = sp18; +} + +s32 fn_1_8884(Vec *arg0, float arg1, float arg2, float arg3, float arg4, float arg5, s32 arg6, s32 arg7) +{ + float temp_f31; + float temp_f30; + Vec sp24; + Work6A88 *temp_r31; + s32 temp_r30; + s32 temp_r28; + Work6A88 *temp_r23; + temp_r23 = lbl_1_bss_7880->data; + temp_r30 = -1; + temp_r31 = temp_r23; + for(temp_r28=0; temp_r28<20; temp_r28++, temp_r31++) { + if(temp_r31->unk10 == 0) { + continue; + } + VECSubtract(&temp_r31->unk1C, arg0, &sp24); + temp_f30 = VECMag(&sp24); + if(temp_f30 < arg1 || temp_f30 > arg2) { + continue; + } + temp_f31 = atan2d(sp24.x, sp24.z); + temp_f31 = fn_1_67AC(arg3, temp_f31); + if(temp_f31 < arg4 || temp_f31 > arg5) { + continue; + } + temp_r30++; + if(arg6) { + temp_r31->unk14 = 1; + temp_r31->unk10 = 0; + temp_r31->unk4 = 1; + fn_1_83C8(temp_r31->unk18); + temp_r31->unk18 = -1; + temp_r31->unkE = arg7; + HuAudFXPlay(1733); + temp_r30 = temp_r28; + break; + } + + } + if(!arg6) { + temp_r30++; + } + return temp_r30; +} + +void fn_1_8AEC(s16 arg0, Vec *arg1) +{ + Work6A88 *temp_r31; + Work6A88 *temp_r30 = lbl_1_bss_7880->data; + if(arg0 < 0 || arg0 >= 20) { + return; + } + temp_r31 = &temp_r30[arg0]; + temp_r31->unk1C = *arg1; +} + +void fn_1_8B58(s16 arg0) +{ + Work6A88 *temp_r31; + s32 temp_r30; + Work6A88 *temp_r28 = lbl_1_bss_7880->data; + if(arg0 < 0 || arg0 >= 20) { + return; + } + temp_r31 = &temp_r28[arg0]; + temp_r31->unk4 = 2; + temp_r31->unk8 = 0; + if(temp_r31->unk1C.x >= 0.0f) { + temp_r30 = 1; + } else { + temp_r30 = 0; + } + fn_1_1C44(temp_r30, temp_r31->unk0); +} + +void fn_1_8C14(s32 arg0, Vec *arg1, float arg2) +{ + Bss7480Struct *temp_r31; + s32 temp_r30; + temp_r31 = lbl_1_bss_7480; + for(temp_r30=0; temp_r30<32; temp_r30++, temp_r31++) { + if(temp_r31->unk0 && temp_r31->unk8 == arg0) { + temp_r31->unk0 *= 0.8f; + } + } + temp_r31 = lbl_1_bss_7480; + for(temp_r30=0; temp_r30<32; temp_r30++, temp_r31++) { + if(!temp_r31->unk0) { + temp_r31->unk4 = 30; + temp_r31->unk0 = (60.0f*(3.0f*arg2))+150.0f; + temp_r31->unk8 = arg0; + temp_r31->unk14 = *arg1; + temp_r31->unkC = 0; + temp_r31->unk10 = 150.0f+(250.0f*arg2); + break; + } + } +} + +s32 fn_1_8D78(Vec *arg0) +{ + s32 temp_r31; + s32 temp_r30; + s32 temp_r29 = -1; + temp_r31 = (16.0f/650.0f)*(670.3125f+arg0->x); + temp_r30 = (16.0f/650.0f)*(670.3125f+arg0->z); + if(temp_r31 >= 0 && temp_r31 < 32 && temp_r30 >= 0 && temp_r30 < 32) { + temp_r29 = temp_r31+(32*temp_r30); + } + return temp_r29; +} + +s32 fn_1_8E2C(s32 arg0, Vec *arg1) +{ + s32 temp_r31; + s32 temp_r30; + if(arg0 < 0 || arg0 >= 1024) { + arg1->x = arg1->y = arg1->z = 0; + return 0; + } + temp_r31 = arg0%32; + temp_r30 = (arg0-temp_r31)/32; + arg1->x = ((1300.0f/32.0f)*temp_r31)-670.3125f; + arg1->y = 0; + arg1->z = ((1300.0f/32.0f)*temp_r30)-670.3125f; + return 1; +} + +s32 fn_1_8F3C(s32 arg0) +{ + s32 sp8[9][2] = { + -1,-1, + 0,-1, + 1,-1, + -1,0, + 0,0, + 1,0, + -1,1, + 0,1, + 1,1 + }; + if(arg0 < 0 || arg0 >= 1024) { + return 0; + } + return lbl_1_bss_5880[arg0]; +} + +s32 fn_1_8FA0(Vec *arg0) +{ + s32 sp24[9][2] = { + -1,-1, + 0,-1, + 1,-1, + -1,0, + 0,0, + 1,0, + -1,1, + 0,1, + 1,1 + }; + Vec sp18; + Vec spC; + s32 temp_r31; + s32 temp_r30; + s32 temp_r29; + s32 temp_r28; + s32 temp_r27 = -1; + float temp_f31; + float temp_f30 = 5000; + sp18.y = 0; + sp18.z = -650; + for(temp_r31=0; temp_r31<32; temp_r31++) { + temp_r30 = temp_r31*32; + sp18.x = -650; + for(temp_r29=0; temp_r29<32; temp_r29++, temp_r30++) { + temp_r28 = lbl_1_bss_5880[temp_r30]; + if(temp_r28 > 0) { + VECSubtract(arg0, &sp18, &spC); + temp_f31 = VECMag(&spC)+(0.2f*frandmod(1000)); + temp_f31 -= 50.0f*temp_r28; + if(temp_f31 < temp_f30) { + temp_f30 = temp_f31; + temp_r27 = temp_r30; + } + } + sp18.x += (1300.0f/32.0f); + } + sp18.z += (1300.0f/32.0f); + } + return temp_r27; +} \ No newline at end of file diff --git a/src/REL/m434Dll/main.c b/src/REL/m434Dll/main.c index bbd39128..dbffb236 100644 --- a/src/REL/m434Dll/main.c +++ b/src/REL/m434Dll/main.c @@ -610,7 +610,7 @@ s32 fn_1_1D74(s32 arg0) return lbl_1_bss_3A0[arg0]; } -s16 fn_1_1D8C(void) +s32 fn_1_1D8C(void) { return lbl_1_bss_3AA; } diff --git a/src/REL/m434Dll/player.c b/src/REL/m434Dll/player.c new file mode 100644 index 00000000..7d1988e9 --- /dev/null +++ b/src/REL/m434Dll/player.c @@ -0,0 +1,676 @@ +#include "game/object.h" +#include "game/objsub.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/audio.h" +#include "game/wipe.h" +#include "game/chrman.h" +#include "game/pad.h" + +#include "game/minigame_seq.h" +#include "game/gamework_data.h" +#include "REL/m434Dll.h" +#include "math.h" +#include "ext_math.h" + +typedef struct data_224_struct { + u16 unk0; + u16 unk2; + float unk4; + float unk8; + u32 unkC; +} Data224Struct; + +omObjData *lbl_1_bss_5870[4]; + +char *lbl_1_data_190[8] = { + "dmy-itemhook-r", + "dmy-itemhook-r", + "dmy-itemhook-r", + "dmy-itemhook-r", + "dmy-itemhook-r", + "dmy-itemhook-r", + "dmy-itemhook-r", + "dmy-itemhook-r", +}; + +char *lbl_1_data_1BC[8] = { + "itemhook-r", + "itemhook-r", + "itemhook-r", + "itemhook-r", + "itemhook-r", + "itemhook-r", + "itemhook-r", + "itemhook-r", +}; + +s32 lbl_1_data_1DC[2] = { + 0x410003, + 0x410004 +}; + +Vec lbl_1_data_1E4[2] = { + { -550, 0, 550 }, + { 550, 0, 550 } +}; + +u32 lbl_1_data_1FC[10] = { + 0, + 2, + 23, + 133, + 0x41000E, + 0x410016, + 0x41001E, + 0x410026, + 0x41002E, + 0x410036 +}; + +Data224Struct lbl_1_data_224[9] = { + { 0, 4, 12, 0, 0x40000001 }, + { 1, 6, 6, 0, 0x40000001 }, + { 0, 8, 6, 0, 0 }, + { 0, 5, 6, 0, 0x40000001 }, + { 1, 5, 6, 0, 0x40000001 }, + { 0, 8, 6, 30, 0 }, + { 0, 9, 6, 0, 0 }, + { 2, 0, 12, 0, 0 }, + { 3, 0, 12, 0, 0 }, +}; + +void fn_1_4988(omObjData *object); + +void fn_1_4854(Process *objman) +{ + s16 temp_r31; + omObjData *temp_r30; + s16 temp_r29; + s32 sp8[2] = { 0, 0 }; + omMakeGroupEx(objman, 0, 4); + omGetGroupMemberListEx(objman, 0); + for(temp_r31=0; temp_r31<4; temp_r31++) { + temp_r30 = lbl_1_bss_5870[temp_r31] = omAddObjEx(objman, 40, 2, 10, 0, fn_1_4988); + temp_r30->work[0] = temp_r31; + temp_r29 = fn_1_1D74(temp_r31); + temp_r30->work[1] = (temp_r29*2)+sp8[temp_r29]; + sp8[temp_r29]++; + } +} + +void fn_1_4964(void) +{ + CharModelKill(-1); +} + +typedef struct work_4988 { + s32 unk0; + s32 unk4; + s32 unk8; + s32 unkC; + s32 unk10; + u32 unk14; + u32 unk18; + float unk1C; + float unk20; + s32 unk24; + Vec unk28; + float unk34; + u16 unk38; + s16 unk3A; + s16 unk3C; + s16 unk3E; + float unk40; + float unk44; + float unk48; + float unk4C; + float unk50; + s32 unk54; + s16 unk58[3]; + s32 unk60; + float unk64; + s32 unk68; + u16 unk6C; + s32 unk70; + Vec unk74; + s16 unk80; + float unk84; + Vec unk88; + Vec unk94; +} Work4988; + +void fn_1_4DF4(omObjData *object); +void fn_1_60AC(omObjData *arg0, u32 arg1); + +void fn_1_4988(omObjData *object) +{ + Work4988 *temp_r31; + s16 temp_r29; + s32 temp_r28; + s32 temp_r27; + + float sp1C[4] = { 0.5f, 0.65f, 0.8f, 1.0f }; + s32 spC[4] = { 1, 1, 2, 2 }; + s32 sp8; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Work4988), MEMORY_DEFAULT_NUM); + temp_r31 = object->data; + memset(temp_r31, 0, sizeof(Work4988)); + temp_r27 = object->work[0]; + temp_r28 = GWPlayerCfg[temp_r27].character; + temp_r31->unk8 = temp_r28; + sp8 = temp_r31->unkC = 0; + temp_r31->unk0 = (object->work[1] >> 1) & 0x1; + temp_r31->unk4 = object->work[1] & 0x1; + temp_r31->unk6C = 0; + temp_r31->unk64 = sp1C[GWPlayerCfg[temp_r27].diff & 0x3]; + temp_r31->unk68 = spC[GWPlayerCfg[temp_r27].diff & 0x3]; + object->model[0] = CharModelCreate(temp_r28, 8); + CharModelStepTypeSet(temp_r28, 3); + Hu3DModelCameraSet(object->model[0], 4); + Hu3DModelLayerSet(object->model[0], 4); + object->model[1] = Hu3DModelCreateFile(lbl_1_data_1DC[temp_r31->unk0]); + Hu3DModelCameraSet(object->model[1], 4); + Hu3DModelLayerSet(object->model[1], 4); + Hu3DModelHookSet(object->model[0], lbl_1_data_190[temp_r31->unkC], object->model[1]); + Hu3DModelClusterAttrSet(object->model[1], 0, 0xC0000001); + for(temp_r29=0; temp_r29<10; temp_r29++) { + if(lbl_1_data_1FC[temp_r29] < 0x10000) { + object->motion[temp_r29] = CharModelMotionCreate(temp_r28, lbl_1_data_1FC[temp_r29]); + } else { + object->motion[temp_r29] = Hu3DJointMotionFile(object->model[0], temp_r28+lbl_1_data_1FC[temp_r29]); + } + } + CharModelMotionDataClose(temp_r28); + object->trans.x = temp_r31->unk88.x = ((2.0f*object->work[1])*100.0f)-300.0f; + object->trans.y = temp_r31->unk88.y = -70; + object->trans.z = temp_r31->unk88.z = 0; + temp_r31->unk94.x = temp_r31->unk94.y = temp_r31->unk94.z = 0; + temp_r31->unk40 = temp_r31->unk44 = 0; + temp_r31->unk48 = 0; + temp_r31->unk4C = 0.02f; + temp_r31->unk84 = 55; + temp_r31->unk28 = lbl_1_data_1E4[temp_r31->unk0]; + temp_r31->unk28.y = object->trans.y; + temp_r31->unk34 = 400; + temp_r31->unk54 = 0; + for(temp_r29=0; temp_r29<3; temp_r29++) { + temp_r31->unk58[temp_r29] = -1; + } + temp_r31->unk50 = 0; + temp_r31->unk10 = -1; + temp_r31->unk60 = 0; + fn_1_60AC(object, 0); + temp_r31->unk38 = 0; + object->func = fn_1_4DF4; +} + +void fn_1_4E50(omObjData *object); +void fn_1_5BEC(omObjData *object); + +void fn_1_4DF4(omObjData *object) +{ + Work4988 *temp_r31 = object->data; + fn_1_5BEC(object); + temp_r31->unk3C++; + temp_r31->unk38 = 0; + object->func = fn_1_4E50; +} + +void fn_1_5AB0(omObjData *object); + +void fn_1_5C98(omObjData *object); +void fn_1_64C0(omObjData *object); + +float fn_1_67AC(float arg0, float arg1); + +//Issues with assignment of temp_f30 +//Scratch is at https://decomp.me/scratch/EqCuG +void fn_1_4E50(omObjData *object) +{ + float temp_f31; + float temp_f30; + float temp_f28; + Work4988 *temp_r31 = object->data; + + s32 temp_r29; + s32 temp_r28; + s32 temp_r27 = 0; + Mtx sp2C; + Vec sp20; + char *sp14[3] = { + "f0", + "f1", + "f2" + }; + float spC[2] = { 0.05, 0.02 }; + temp_r31->unk14 = 0; + temp_r31->unk18 = 0; + temp_r31->unk20 = 0; + temp_r31->unk1C = 0; + if(fn_1_1D54() == 2) { + if(GWPlayerCfg[object->work[0]].iscom) { + fn_1_5C98(object); + } else { + temp_r31->unk18 = HuPadBtn[GWPlayerCfg[object->work[0]].pad_idx]; + temp_r31->unk14 = HuPadBtnDown[GWPlayerCfg[object->work[0]].pad_idx]; + temp_f31 = HuPadStkX[GWPlayerCfg[object->work[0]].pad_idx]; + temp_f30 = -HuPadStkY[GWPlayerCfg[object->work[0]].pad_idx]; + + temp_r31->unk20 = atan2d(temp_f31, temp_f30); + temp_r31->unk1C = (1.0f/72.0f)*VECMagPoint(temp_f31, temp_f30, 0); + if(temp_r31->unk1C > 1.0f) { + temp_r31->unk1C = 1.0f; + } + } + } + temp_r31->unk60 = 0; + switch(temp_r31->unk38) { + case 0: + temp_r27 = 1; + if(temp_r31->unk1C > spC[temp_r31->unk24]) { + temp_r31->unk24 = 1; + temp_r31->unk44 = temp_r31->unk20; + temp_r31->unk94.x += 225.0f*(temp_r31->unk1C*sind(temp_r31->unk20))*(1.0f/60.0f); + temp_r31->unk94.z += 225.0f*(temp_r31->unk1C*cosd(temp_r31->unk20))*(1.0f/60.0f); + temp_r31->unk48 = 0.2f; + temp_r31->unk4C = 0; + if(CharModelMotionShiftIDGet(temp_r31->unk8) < 0) { + fn_1_60AC(object, 1); + CharModelMotionSpeedSet(temp_r31->unk8, temp_r31->unk1C); + } + if(temp_r31->unk1C > 0.75f && (temp_r31->unk3A & 0x7) == 0) { + fn_1_8C14(object->work[0], &temp_r31->unk88, temp_r31->unk1C); + if((temp_r31->unk3A & 0xF) == 0) { + fn_1_43AC(&temp_r31->unk88); + } + } + } else { + temp_r31->unk24 = 0; + if(CharModelMotionShiftIDGet(temp_r31->unk8) < 0) { + fn_1_60AC(object, 0); + } + } + if(temp_r31->unk14 & PAD_BUTTON_A) { + temp_r31->unk38 = 1; + temp_r31->unk3C = 0; + } else if(temp_r31->unk14 & PAD_BUTTON_B) { + temp_r31->unk38 = 3; + temp_r31->unk3C = 0; + temp_r31->unk3A = 0; + } else { + temp_r31->unk60 = 1; + } + break; + + case 1: + temp_r31->unk24 = 0; + if(temp_r31->unk3C == 0) { + fn_1_60AC(object, 2); + temp_r31->unk3A = 0; + temp_r31->unk3C++; + } else if(temp_r31->unk3C == 1 && temp_r31->unk3A > 30.0f) { + if(temp_r31->unk54 < 3) { + temp_r28 = fn_1_8884(&temp_r31->unk88, 20, 150, temp_r31->unk40, -30, 30, 1, object->work[0]); + if(temp_r28 >= 0) { + temp_r31->unk58[temp_r31->unk54++] = temp_r28; + omVibrate(object->work[0], 12, 6, 6); + } + } + temp_r31->unk38 = 2; + temp_r31->unk3A = 0; + temp_r31->unk3C = 0; + } + break; + + case 2: + if(temp_r31->unk3C == 0) { + if(!(temp_r31->unk18 & PAD_BUTTON_A)) { + temp_r31->unk24 = 0; + fn_1_60AC(object, 5); + temp_r31->unk3A = 0; + temp_r31->unk3C++; + } else { + temp_f28 = fn_1_67AC(temp_r31->unk40, temp_r31->unk20); + if(temp_f28 > 10.0f) { + temp_f28 = 10.0f; + } else if(temp_f28 < -10.0f) { + temp_f28 = -10.0f; + } + if(temp_r31->unk1C > spC[temp_r31->unk24] && fabs(temp_f28) > 5.0) { + temp_r31->unk24 = 1; + temp_r31->unk44 = temp_r31->unk40+temp_f28; + temp_r31->unk48 = 0.2f; + temp_r31->unk4C = 0; + if(CharModelMotionShiftIDGet(temp_r31->unk8) < 0) { + fn_1_60AC(object, 4); + CharModelMotionSpeedSet(temp_r31->unk8, 0.5f); + } + if(temp_r31->unk54 < 3) { + temp_r28 = fn_1_8884(&temp_r31->unk88, 20, 150, temp_r31->unk40, -15, 15, 1, object->work[0]); + if(temp_r28 >= 0) { + temp_r31->unk58[temp_r31->unk54++] = temp_r28; + omVibrate(object->work[0], 12, 6, 6); + } + } + } else { + temp_r31->unk24 = 0; + if(CharModelMotionShiftIDGet(temp_r31->unk8) < 0) { + fn_1_60AC(object, 3); + } + } + } + } else { + if(temp_r31->unk3A > 30.0f) { + temp_r31->unk38 = 0; + } + } + break; + + case 3: + temp_r31->unk24 = 0; + if(temp_r31->unk3C == 0) { + temp_r31->unk3E = 0; + VECSubtract(&temp_r31->unk28, &temp_r31->unk88, &sp20); + temp_r31->unk44 = atan2d(sp20.x, sp20.z); + temp_f28 = VECMag(&sp20); + if(temp_f28 < temp_r31->unk34) { + temp_r31->unk3E++; + fn_1_60AC(object, 6); + } else { + fn_1_60AC(object, 0); + } + temp_r31->unk3A = 0; + temp_r31->unk3C++; + } + if(temp_r31->unk3E) { + if(temp_r31->unk3A > 36.0f) { + for(temp_r29=0; temp_r29unk54; temp_r29++) { + fn_1_8B58(temp_r31->unk58[temp_r29]); + } + temp_r31->unk54 = 0; + temp_r31->unk3E = 0; + } + } + if(temp_r31->unk3A > 60.0f) { + temp_r31->unk38 = 0; + } + break; + } + VECAdd(&temp_r31->unk88, &temp_r31->unk94, &temp_r31->unk88); + temp_r31->unk94.x = temp_r31->unk94.y = temp_r31->unk94.z = 0; + fn_1_64C0(object); + temp_f28 = 0; + if(temp_r31->unk54) { + temp_f28 = (temp_r31->unk54*10)+10; + } + temp_r31->unk50 += (temp_f28-temp_r31->unk50)*0.3f; + Hu3DData[object->model[1]].unk_A4[0] = temp_r31->unk50; + Hu3DModelObjMtxGet(object->model[0], lbl_1_data_190[temp_r31->unkC], sp2C); + for(temp_r29=0; temp_r29unk54; temp_r29++) { + Hu3DModelObjPosGet(object->model[1], sp14[temp_r29], &sp20); + MTXMultVec(sp2C, &sp20, &sp20); + fn_1_8AEC(temp_r31->unk58[temp_r29], &sp20); + } + fn_1_5BEC(object); + if(fn_1_1D54() == 5 && temp_r27) { + temp_r31->unk38 = 0; + object->func = fn_1_5AB0; + } +} + +s32 fn_1_6248(omObjData *object); + +void fn_1_5AB0(omObjData *object) +{ + Work4988 *temp_r31 = object->data; + s32 sp8[2] = { -1, 1 }; + fn_1_5BEC(object); + switch(temp_r31->unk38) { + case 0: + temp_r31->unk38++; + break; + + case 1: + Hu3DModelHookReset(object->model[0]); + Hu3DModelAttrSet(object->model[1], 1); + if(sp8[temp_r31->unk0] == fn_1_1D8C()) { + fn_1_60AC(object, 7); + } else { + fn_1_60AC(object, 8); + } + temp_r31->unk44 = 0; + temp_r31->unk48 = 0; + temp_r31->unk4C = 0.005f; + temp_r31->unk38++; + break; + + case 2: + if(fn_1_6248(object)) { + temp_r31->unk38++; + } + break; + } +} + +float fn_1_6690(float arg0, float arg1, float arg2); + +void fn_1_5BEC(omObjData *object) +{ + Work4988 *temp_r31 = object->data; + temp_r31->unk3A++; + object->trans.x = temp_r31->unk88.x; + object->trans.y = temp_r31->unk88.y; + object->trans.z = temp_r31->unk88.z; + temp_r31->unk48 += temp_r31->unk4C; + if(temp_r31->unk48 > 0.45f) { + temp_r31->unk48 = 0.45f; + } + temp_r31->unk40 = fn_1_6690(temp_r31->unk40, temp_r31->unk44, temp_r31->unk48); + object->rot.y = temp_r31->unk40; +} + +void fn_1_5C98(omObjData *object) +{ + Vec sp8; + Work4988 *temp_r31 = object->data; + s32 temp_r30; + s32 temp_r29 = 0; + s32 temp_r28; + switch(temp_r31->unk6C) { + case 0: + if(temp_r31->unk60) { + temp_r31->unk70 = fn_1_8FA0(&temp_r31->unk88); + if(temp_r31->unk70 < 0 || temp_r31->unk54 >= temp_r31->unk68 || fn_1_1D44() < 10) { + temp_r29 = 1; + } + if(temp_r31->unk54 && temp_r29) { + temp_r31->unk6C = 3; + temp_r31->unk80 = 0; + } else if(temp_r31->unk70 >= 0) { + temp_r31->unk6C = 1; + temp_r31->unk80 = 0; + fn_1_8E2C(temp_r31->unk70, &temp_r31->unk74); + temp_r31->unk74.y = temp_r31->unk88.y; + } + } + break; + + case 1: + temp_r31->unk1C = 0.73f*temp_r31->unk64; + if(temp_r31->unk54 && fn_1_1D44() < 10) { + temp_r31->unk6C = 0; + } else { + temp_r28 = fn_1_8D78(&temp_r31->unk88); + if(fn_1_8F3C(temp_r28) > 0) { + temp_r31->unk6C = 2; + temp_r31->unk80 = 0; + } else { + VECSubtract(&temp_r31->unk74, &temp_r31->unk88, &sp8); + temp_r31->unk20 = fn_1_6690(temp_r31->unk40, atan2d(sp8.x, sp8.z), temp_r31->unk64*0.25f); + temp_r30 = 0; + if(VECMag(&sp8) < 50.0f) { + temp_r30 = 1; + } + if(temp_r30 && fn_1_8F3C(temp_r31->unk70) > 0) { + temp_r31->unk6C = 2; + temp_r31->unk80 = 0; + } else { + temp_r31->unk80++; + if(temp_r30 || temp_r31->unk80 > 60.0f) { + if(temp_r30 || frandmod(1000) < 10) { + temp_r31->unk70 = fn_1_8FA0(&temp_r31->unk88); + fn_1_8E2C(temp_r31->unk70, &temp_r31->unk74); + temp_r31->unk74.y = temp_r31->unk88.y; + temp_r31->unk80 = 0; + if(temp_r31->unk70 < 0) { + temp_r31->unk6C = 0; + } + } + } + } + } + } + break; + + case 2: + temp_r31->unk80++; + if(temp_r31->unk80 < 120*temp_r31->unk64) { + temp_r31->unk1C = 0.4f; + temp_r31->unk20 = temp_r31->unk40+10.0f; + temp_r31->unk14 = temp_r31->unk18 = PAD_BUTTON_A; + } else { + temp_r31->unk6C = 0; + } + break; + + case 3: + temp_r31->unk1C = 0.75f+(0.25f*temp_r31->unk64); + VECSubtract(&temp_r31->unk28, &temp_r31->unk88, &sp8); + temp_r31->unk20 = fn_1_6690(temp_r31->unk40, atan2d(sp8.x, sp8.z), 0.2f); + if(VECMag(&sp8) < temp_r31->unk34-30.000002f) { + temp_r31->unk14 = temp_r31->unk18 = PAD_BUTTON_B; + temp_r31->unk6C = 0; + } + break; + } +} + +void fn_1_60AC(omObjData *arg0, u32 arg1) +{ + float temp_f31; + Work4988 *temp_r30 = arg0->data; + if(temp_r30->unk10 != arg1 && arg1 < 9) { + temp_f31 = lbl_1_data_224[arg1].unk4; + if(temp_r30->unk10 < 0) { + temp_f31 = 0; + } + temp_r30->unk10 = arg1; + CharModelMotionShiftSet(temp_r30->unk8, arg0->motion[lbl_1_data_224[arg1].unk0], 0, temp_f31, lbl_1_data_224[arg1].unkC); + CharModelMotionSpeedSet(temp_r30->unk8, 1.0f); + if(lbl_1_data_224[arg1].unk2) { + Hu3DMotionOverlaySet(arg0->model[0], arg0->motion[lbl_1_data_224[arg1].unk2]); + Hu3DMotionOverlayTimeSet(arg0->model[0], lbl_1_data_224[arg1].unk8); + Hu3DData[arg0->model[0]].unk_78 = 1.0f; + } else { + Hu3DMotionOverlayReset(arg0->model[0]); + } + } +} + +s32 fn_1_6248(omObjData *object) +{ + Work4988 *temp_r31 = object->data; + s32 temp_r30 = 0; + if(CharModelMotionEndCheck(temp_r31->unk8) && CharModelMotionShiftIDGet(temp_r31->unk8) < 0) { + temp_r30 = 1; + } + return temp_r30; +} + +s32 fn_1_62BC(omObjData *arg0, u32 arg1) +{ + s32 result = 0; + if(fn_1_6248(arg0)) { + fn_1_60AC(arg0, arg1); + result = 1; + } + return result; +} + +s32 fn_1_649C(omObjData *object) +{ + Work4988 *sp8 = object->data; + s32 temp_r31 = 0; + return temp_r31; +} + + +void fn_1_64C0(omObjData *object) +{ + float temp_f31; + Vec sp8; + Work4988 *temp_r31; + Work4988 *temp_r30; + s32 temp_r29; + s32 temp_r28; + s32 temp_r27; + for(temp_r27=0; temp_r27<2; temp_r27++) { + for(temp_r29=0; temp_r29<4; temp_r29++) { + temp_r31 = lbl_1_bss_5870[temp_r29]->data; + for(temp_r28=0; temp_r28<4; temp_r28++) { + if(temp_r29 == temp_r28) { + continue; + } + temp_r30 = lbl_1_bss_5870[temp_r28]->data; + VECSubtract(&temp_r31->unk88, &temp_r30->unk88, &sp8); + temp_f31 = VECMag(&sp8); + if(temp_f31 < temp_r31->unk84+temp_r30->unk84) { + temp_f31 = 0.5f*((temp_r31->unk84+temp_r30->unk84)-temp_f31); + VECNormalize(&sp8, &sp8); + VECScale(&sp8, &sp8, temp_f31); + VECAdd(&temp_r31->unk88, &sp8, &temp_r31->unk88); + VECSubtract(&temp_r30->unk88, &sp8, &temp_r30->unk88); + } + } + sp8 = temp_r31->unk88; + sp8.y = 0; + temp_f31 = VECMag(&sp8); + if(temp_f31 > 510.0f-temp_r31->unk84) { + VECNormalize(&sp8, &sp8); + VECScale(&sp8, &sp8, -(temp_f31-(510.0f-temp_r31->unk84))); + VECAdd(&sp8, &temp_r31->unk88, &temp_r31->unk88); + } + } + } +} + +float fn_1_6690(float arg0, float arg1, float arg2) +{ + float temp_f31; + temp_f31 = fmodf(arg1-arg0, 360.0); + if(temp_f31 < 0.0f) { + temp_f31 += 360.0f; + } + if(temp_f31 > 180.0f) { + temp_f31 -= 360.0f; + } + temp_f31 = fmodf((arg2*temp_f31)+arg0, 360.0); + if(temp_f31 < 0.0f) { + temp_f31 += 360.0f; + } + return temp_f31; +} + +float fn_1_67AC(float arg0, float arg1) +{ + float temp_f31; + temp_f31 = fmodf(arg1-arg0, 360.0); + if(temp_f31 < 0.0f) { + temp_f31 += 360.0f; + } + if(temp_f31 > 180.0f) { + temp_f31 -= 360.0f; + } + return temp_f31; +} \ No newline at end of file diff --git a/src/REL/modeseldll/modesel.c b/src/REL/modeseldll/modesel.c index f1032d6a..115c17e3 100644 --- a/src/REL/modeseldll/modesel.c +++ b/src/REL/modeseldll/modesel.c @@ -116,8 +116,8 @@ s32 fn_1_2490(void) Hu3DModelPosSet(lbl_1_bss_19A[lbl_1_data_80[temp_r31]], 0, -50, 0); } HuWinMesWait(lbl_1_bss_82); - temp_r26 = 0; - lbl_1_bss_80 = temp_r26; + + lbl_1_bss_80 = temp_r26 = 0; espAttrReset(lbl_1_bss_152[10], HUSPR_ATTR_DISPOFF); espBankSet(lbl_1_bss_152[10], 0); for(temp_r31=0; temp_r31<=10; temp_r31++) { From f77ef40a9f643b9835ff991cc4762b7caf33dda9 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 10 Jun 2024 17:25:35 -0500 Subject: [PATCH 14/23] Decompile w02dll dice and gamble --- config/GMPE01_00/rels/w02Dll/symbols.txt | 104 ++--- configure.py | 4 +- include/REL/w02Dll.h | 38 ++ src/REL/w02Dll/dice.c | 551 +++++++++++++++++++---- src/REL/w02Dll/gamble.c | 303 ++++++++++++- 5 files changed, 861 insertions(+), 139 deletions(-) diff --git a/config/GMPE01_00/rels/w02Dll/symbols.txt b/config/GMPE01_00/rels/w02Dll/symbols.txt index ad1b1e8c..5d690fdf 100644 --- a/config/GMPE01_00/rels/w02Dll/symbols.txt +++ b/config/GMPE01_00/rels/w02Dll/symbols.txt @@ -120,51 +120,51 @@ lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:f 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:0x8 scope:local 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:0x8 data:double -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 data:double -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 data:double -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x8 data:double -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 data:double -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0xC data:4byte -lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x18 data:4byte -lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x24 data:4byte -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0xC data:4byte -lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 data:float -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 data:float -lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 data:float -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x28 data:4byte -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 data:float -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:0x8 data:double +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:0x8 scope:local data:double +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 scope:local data:double +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 scope:local data:double +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x8 scope:local data:double +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:double +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 scope:local data:double +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x18 scope:local data:4byte +lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x24 scope:local data:4byte +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 scope:local data:float +lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 scope:local data:float +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x28 scope:local data:4byte +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 scope:local data:float +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data:float +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:0x8 scope:local data:double lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 data:double @@ -370,14 +370,14 @@ lbl_1_data_284 = .data:0x00000284; // type:object size:0x2 data:2byte lbl_1_data_286 = .data:0x00000286; // type:object size:0x2 data:2byte lbl_1_data_288 = .data:0x00000288; // type:object size:0x8 lbl_1_data_290 = .data:0x00000290; // type:object size:0x18 -lbl_1_data_2A8 = .data:0x000002A8; // type:object size:0x12 data:string -lbl_1_data_2BA = .data:0x000002BA; // type:object size:0xE data:string -lbl_1_data_2C8 = .data:0x000002C8; // type:object size:0x10 data:string +lbl_1_data_2A8 = .data:0x000002A8; // type:object size:0x12 scope:local data:string +lbl_1_data_2BA = .data:0x000002BA; // type:object size:0xE scope:local data:string +lbl_1_data_2C8 = .data:0x000002C8; // type:object size:0x10 scope:local data:string lbl_1_data_2D8 = .data:0x000002D8; // type:object size:0x50 -lbl_1_data_328 = .data:0x00000328; // type:object size:0x1D data:string -lbl_1_data_345 = .data:0x00000345; // type:object size:0x1B data:string -lbl_1_data_360 = .data:0x00000360; // type:object size:0x11 data:string -lbl_1_data_371 = .data:0x00000371; // type:object size:0x7 +lbl_1_data_328 = .data:0x00000328; // type:object size:0x1D scope:local data:string +lbl_1_data_345 = .data:0x00000345; // type:object size:0x1B scope:local data:string +lbl_1_data_360 = .data:0x00000360; // type:object size:0x11 scope:local data:string +lbl_1_data_371 = .data:0x00000371; // type:object size:0x7 scope:local lbl_1_data_378 = .data:0x00000378; // type:object size:0x24 lbl_1_data_39C = .data:0x0000039C; // type:object size:0x24 lbl_1_data_3C0 = .data:0x000003C0; // type:object size:0x24 diff --git a/configure.py b/configure.py index 525fce57..43ff532f 100644 --- a/configure.py +++ b/configure.py @@ -1484,8 +1484,8 @@ config.libs = [ objects={ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w02Dll/main.c"), - Object(NonMatching, "REL/w02Dll/dice.c"), - Object(NonMatching, "REL/w02Dll/gamble.c"), + Object(Matching, "REL/w02Dll/dice.c"), + Object(Matching, "REL/w02Dll/gamble.c"), Object(NonMatching, "REL/w02Dll/mg_coin.c"), Object(NonMatching, "REL/w02Dll/mg_item.c"), Object(NonMatching, "REL/w02Dll/shuffleboard.c"), diff --git a/include/REL/w02Dll.h b/include/REL/w02Dll.h index bf99e873..28dc596e 100644 --- a/include/REL/w02Dll.h +++ b/include/REL/w02Dll.h @@ -12,7 +12,41 @@ #include "game/board/window.h" #include "game/board/map_object.h" + +/* STRUCTS*/ +typedef struct m02_dice { + /* 0x00 */ s16 unk00; + /* 0x02 */ s16 unk02; + /* 0x04 */ s32 unk04; + /* 0x08 */ s32 *unk08; + /* 0x0C */ Vec unk0C; + /* 0x18 */ s16 unk18; + /* 0x1A */ s16 unk1A; + /* 0x1C */ u16 unk1C[3]; + /* 0x22 */ s16 unk22; + /* 0x24 */ f32 unk24; + /* 0x28 */ s16 unk28; + /* 0x2A */ u8 unk2A[0x2]; + /* 0x2C */ Process *unk2C; + /* 0x30 */ s16 unk30[3]; + /* 0x36 */ s16 unk36[3]; + /* 0x3C */ omObjData *unk3C[3]; + /* 0x48 */ s16 unk48[3]; + /* 0x4E */ u8 unk4E[0x2]; + /* 0x50 */ omObjData *unk50[3]; + /* 0x5C */ u8 unk5C[0x08]; + /* 0x64 */ Vec unk64[2]; + /* 0x7C */ Vec unk7C; + /* 0x88 */ s32 unk88[3]; + /* 0x94 */ s16 unk94; + /* 0x96 */ s16 unk96; + /* 0x98 */ f32 unk98; + /* 0x9C */ s16 unk9C; +} m02Dice; + + extern s16 lbl_1_bss_30[0x10]; // Model List +extern s16 lbl_1_data_286; // main.c extern void fn_1_770(); @@ -23,6 +57,10 @@ extern void fn_1_92C(); extern s32 fn_1_1128(); extern void fn_1_121C(u32); +void fn_1_1254(m02Dice* arg0); +void fn_1_1518(m02Dice* arg0); +s32 fn_1_17F4(m02Dice* arg0); + // roulette.c extern void fn_1_D3AC(); extern s32 fn_1_D8C4(); diff --git a/src/REL/w02Dll/dice.c b/src/REL/w02Dll/dice.c index 637189ea..521ff986 100644 --- a/src/REL/w02Dll/dice.c +++ b/src/REL/w02Dll/dice.c @@ -1,49 +1,5 @@ #include "REL/w02Dll.h" - -/* DATA */ -extern char lbl_1_data_2A8[0x12]; -extern char lbl_1_data_2BA[0x0D]; -extern char lbl_1_data_2C8[0x10]; - -/* RODATA*/ -extern f32 lbl_1_rodata_38; -extern f32 lbl_1_rodata_3C; -extern f32 lbl_1_rodata_40; -extern f32 lbl_1_rodata_44; -extern f32 lbl_1_rodata_48; -extern f32 lbl_1_rodata_4C; - -/* STRUCTS*/ -typedef struct { - /* 0x00 */ s16 unk00; - /* 0x02 */ s16 unk02; - /* 0x04 */ s32 unk04; - /* 0x08 */ u8 unk08[0x04]; - /* 0x0C */ Vec unk0C; - /* 0x18 */ s16 unk18; - /* 0x1A */ s16 unk1A; - /* 0x1C */ u8 unk1C[0x6]; - /* 0x22 */ s16 unk22; - /* 0x24 */ f32 unk24; - /* 0x28 */ s16 unk28; - /* 0x2A */ u8 unk2A[0x2]; - /* 0x2C */ Process* unk2C; - /* 0x30 */ s16 unk30[3]; - /* 0x36 */ s16 unk36[3]; - /* 0x3C */ omObjData* unk3C[3]; - /* 0x48 */ s16 unk48[3]; - /* 0x4E */ u8 unk4E[0x2]; - /* 0x50 */ s32 unk50[3]; - /* 0x5C */ u8 unk5C[0x08]; - /* 0x64 */ Vec unk64; - /* 0x70 */ Vec unk70; - /* 0x7C */ Vec unk7C; - /* 0x88 */ s32 unk88[3]; - /* 0x94 */ s16 unk94; - /* 0x96 */ s16 unk96; - /* 0x98 */ f32 unk98; - /* 0x9C */ s16 unk9C; -} unkW02Dice; +#include "ext_math.h" typedef struct { union { @@ -59,27 +15,31 @@ typedef struct { /* 0x01 */ u8 unk01; /* 0x02 */ u8 unk02; /* 0x03 */ u8 unk03; -/* 0x04 */ u16 unk04; -} unkW02DiceBitfields; +/* 0x04 */ s16 unk04; +/* 0x06 */ s16 unk06; +} WorkDice; /* EXTERN FUNCTIONS */ void fn_1_13D0(void); -void fn_1_1574(unkW02Dice*); /* extern */ -void fn_1_1794(unkW02Dice*); /* extern */ -void fn_1_1850(omObjData*); /* extern */ -void fn_1_2030(unkW02Dice*); /* extern */ -void fn_1_2220(unkW02Dice*); /* extern */ -s32 fn_1_233C(unkW02Dice*); /* extern */ -void fn_1_23B4(unkW02Dice*, s32 i); /* extern */ -void fn_1_272C(unkW02Dice*); /* extern */ +void fn_1_1574(m02Dice *arg0); +void fn_1_1794(m02Dice *arg0); +void fn_1_1850(omObjData *object); +void fn_1_1F94(m02Dice* arg0, s32 arg1); +void fn_1_2030(m02Dice *arg0); +void fn_1_2100(m02Dice *arg0, s32 arg1); +void fn_1_2220(m02Dice *arg0); +s32 fn_1_233C(m02Dice *arg0); +void fn_1_23FC(m02Dice *arg0, s32 arg1); +void fn_1_23B4(m02Dice *arg0, s32 arg1); +void fn_1_272C(m02Dice *arg0); /* LOCAL FUNCTIONS */ -void fn_1_1254(unkW02Dice* arg0) { +void fn_1_1254(m02Dice* arg0) { Vec sp8; s32 i; - OSReport(lbl_1_data_2A8); - arg0->unk2C = HuPrcChildCreate(&fn_1_13D0, 0x2005, 0x2000, 0, boardMainProc); + OSReport("m02GenDiceCreate\n"); + arg0->unk2C = HuPrcChildCreate(fn_1_13D0, 0x2005, 0x2000, 0, boardMainProc); arg0->unk2C->user_data = arg0; arg0->unk94 = 0; arg0->unk9C = 0; @@ -87,9 +47,9 @@ void fn_1_1254(unkW02Dice* arg0) { Hu3D3Dto2D(&arg0->unk0C, 1, &sp8); /* Initialize Matrix */ - arg0->unk64 = arg0->unk70 = arg0->unk7C = sp8; - arg0->unk7C.y = arg0->unk70.y = arg0->unk64.y = lbl_1_rodata_38; - arg0->unk7C.z = arg0->unk70.z = arg0->unk64.z = lbl_1_rodata_3C; + arg0->unk64[0] = arg0->unk64[1] = arg0->unk7C = sp8; + arg0->unk7C.y = arg0->unk64[1].y = arg0->unk64[0].y = 155; + arg0->unk7C.z = arg0->unk64[1].z = arg0->unk64[0].z = 1400; arg0->unk96 = -1; for (i = 0; i < 3; i++) { @@ -105,7 +65,7 @@ void fn_1_13D0(void) { s32 var_r29; s32 i; s32 var_r30_2; - unkW02Dice* temp_r31; + m02Dice* temp_r31; temp_r31 = HuPrcCurrentGet()->user_data; temp_r31->unk36[0] = temp_r31->unk36[1] = temp_r31->unk36[2] = 0; @@ -127,7 +87,7 @@ void fn_1_13D0(void) { for ( i = 0; i < temp_r31->unk00; i++) { var_r29 += temp_r31->unk36[i]; } - OSReport(lbl_1_data_2BA, var_r29); + OSReport("Dice res: %d\n", var_r29); while (fn_1_233C(temp_r31) == 0) { HuPrcVSleep(); @@ -146,8 +106,8 @@ void fn_1_13D0(void) { } } -void fn_1_1518(unkW02Dice* arg0) { - OSReport(lbl_1_data_2C8); +void fn_1_1518(m02Dice* arg0) { + OSReport("m02GenDiceKill\n"); if (arg0->unk2C) { HuPrcKill(arg0->unk2C); } @@ -155,21 +115,21 @@ void fn_1_1518(unkW02Dice* arg0) { fn_1_272C(arg0); } -void fn_1_1574(unkW02Dice* arg0) { +void fn_1_1574(m02Dice* arg0) { Vec sp8; f32 temp_f0; omObjData* temp_r3; s32 temp_r28; - unkW02DiceBitfields* temp_r29; + WorkDice* temp_r29; temp_r28 = arg0->unk96; arg0->unk30[temp_r28] = BoardModelCreate(arg0->unk04, NULL, 0); - arg0->unk98 = lbl_1_rodata_40 + BoardRandMod(arg0->unk1A); + arg0->unk98 = 0.5f + BoardRandMod(arg0->unk1A); BoardModelMotionStart(arg0->unk30[temp_r28], 0, 0x40000001U); - BoardModelMotionSpeedSet(arg0->unk30[temp_r28], lbl_1_rodata_44); + BoardModelMotionSpeedSet(arg0->unk30[temp_r28], 0); BoardModelMotionTimeSet(arg0->unk30[temp_r28], arg0->unk98); temp_r3 = omAddObjEx(boardObjMan, 0x102, 0U, 0U, -1, fn_1_1850); - temp_r29 = (unkW02DiceBitfields*) temp_r3->work; + temp_r29 = (WorkDice*) temp_r3->work; temp_r29->unk7 = 0; temp_r29->unk6 = 0; @@ -182,39 +142,156 @@ void fn_1_1574(unkW02Dice* arg0) { temp_r3->unk10 = (u32) arg0; arg0->unk3C[temp_r28] = temp_r3; sp8 = arg0->unk0C; - sp8.y += (lbl_1_rodata_48 * arg0->unk24); + sp8.y += (250.0f * arg0->unk24); temp_r3->trans.x = sp8.x; temp_r3->trans.y = sp8.y; temp_r3->trans.z = sp8.z; - temp_r3->scale.x = lbl_1_rodata_44; - temp_r3->scale.y = lbl_1_rodata_44; - temp_r3->scale.z = lbl_1_rodata_44; - sp8.z += lbl_1_rodata_4C; + temp_r3->scale.x = 0; + temp_r3->scale.y = 0; + temp_r3->scale.z = 0; + sp8.z += 70.0f; HuAudFXPlay(0x302); } -void fn_1_1794(unkW02Dice* arg0) { - unkW02DiceBitfields* temp_r30; +void fn_1_1794(m02Dice* arg0) { + WorkDice* temp_r30; - temp_r30 = (unkW02DiceBitfields*) arg0->unk3C[arg0->unk96]->work; + temp_r30 = OM_GET_WORK_PTR(arg0->unk3C[arg0->unk96], WorkDice); while (temp_r30->unk3 != 1) { HuPrcVSleep(); } } -s32 fn_1_17F4(unkW02Dice* arg0) { - unkW02DiceBitfields* temp; +s32 fn_1_17F4(m02Dice* arg0) +{ + WorkDice* temp; if ( arg0->unk96 < 0) { return 0; } - temp = (unkW02DiceBitfields*) arg0->unk3C[arg0->unk96]->work; + temp = OM_GET_WORK_PTR(arg0->unk3C[arg0->unk96], WorkDice); if (temp->unk3 != 1) { return 0; } return 1; } -void fn_1_1F94(unkW02Dice* arg0, s32 arg1) { +void fn_1_1850(omObjData *object) +{ + WorkDice *temp_r29; + m02Dice *temp_r27; + s16 temp_r26; + s16 temp_r25; + float temp_f29; + float temp_f28; + float temp_f27; + temp_r27 = (m02Dice *)object->unk10; + temp_r29 = OM_GET_WORK_PTR(object, WorkDice); + if(temp_r29->unk7 || BoardIsKill()) { + fn_1_1F94(temp_r27, temp_r29->unk1); + temp_r27->unk3C[temp_r29->unk1] = NULL; + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + if(BoardPauseActiveCheck()) { + return; + } + switch(temp_r29->unk3) { + case 0: + if(temp_r29->unk06 >= 1080) { + temp_r29->unk3 = 1; + object->scale.x = object->scale.y = object->scale.z = 1; + + object->rot.y = temp_r29->unk04 = 0; + } else { + if(!temp_r29->unk04 && temp_r27->unk88[temp_r29->unk1] == -1) { + temp_r27->unk88[temp_r29->unk1] = HuAudFXPlay(768); + } + object->rot.y = temp_r29->unk06%360; + temp_r29->unk06 += 25; + if(temp_r29->unk04 < 180) { + temp_f27 = 0; + temp_f28 = 1; + } else { + temp_f27 = 1; + temp_f28 = 0.5f; + } + object->scale.x = (temp_f28*sind((float)(temp_r29->unk04%180)))+temp_f27; + object->scale.y = object->scale.x; + object->scale.z = object->scale.x; + if(temp_r29->unk04 <= 360) { + if(temp_r29->unk04 < 180) { + temp_r29->unk04 += 6; + } else { + temp_r29->unk04 += 18; + } + if(temp_r29->unk04 > 360) { + temp_r29->unk04 = 360; + } + } + + } + break; + + case 1: + temp_r29->unk04 += 4; + if(temp_r29->unk04 > 360) { + temp_r29->unk04 -= 360; + } + OSs16tof32(&temp_r29->unk04, &temp_f29); + object->trans.y += sind(temp_f29)*0.2f; + break; + + case 2: + temp_r29->unk04++; + if(temp_r29->unk04 >= 8) { + if(temp_r27->unk88[temp_r29->unk1] != -1) { + HuAudFXStop(temp_r27->unk88[temp_r29->unk1]); + temp_r27->unk88[temp_r29->unk1] = -1; + } + HuAudFXPlay(771); + HuAudFXPlay(780); + temp_r29->unk3 = 3; + temp_r29->unk04 = 0; + fn_1_23FC(temp_r27, temp_r27->unk36[temp_r29->unk1]); + fn_1_2100(temp_r27, temp_r29->unk1); + Hu3DParManPosSet(temp_r27->unk48[temp_r29->unk1], object->trans.x, object->trans.y, object->trans.z); + BoardModelVisibilitySet(temp_r27->unk30[temp_r29->unk1], 0); + } else { + OSs16tof32(&temp_r29->unk04, &temp_f29); + if(temp_r29->unk04 < 4) { + object->trans.y += (0.5f*temp_f29)+10.0f; + object->scale.x += (0.1f*sind(4.0f*temp_f29)); + object->scale.y = object->scale.x; + object->scale.z = object->scale.x; + } else { + BoardModelAlphaSet(temp_r27->unk30[temp_r29->unk1], 255-(temp_r29->unk04*32)); + } + object->trans.y += -0.49f*temp_f29*temp_f29; + } + break; + + case 3: + if(++temp_r29->unk04 >= 150) { + temp_r29->unk7 = 1; + } + break; + } + if(!temp_r29->unk6 || temp_r29->unk3 != 3) { + if(temp_r29->unk02++ > temp_r29->unk01) { + temp_r29->unk02 = 0; + temp_r25 = BoardModelMotionTimeGet(temp_r27->unk30[temp_r29->unk1]); + do { + temp_r26 = BoardRandMod(temp_r27->unk1A); + } while(temp_r26 == temp_r25); + BoardModelMotionTimeSet(temp_r27->unk30[temp_r29->unk1], temp_r26+0.5f); + } + } + BoardModelPosSet(temp_r27->unk30[temp_r29->unk1], object->trans.x, object->trans.y, object->trans.z); + BoardModelRotSet(temp_r27->unk30[temp_r29->unk1], object->rot.x, object->rot.y, object->rot.z); + BoardModelScaleSet(temp_r27->unk30[temp_r29->unk1], object->scale.x, object->scale.y, object->scale.z); +} + +void fn_1_1F94(m02Dice* arg0, s32 arg1) { if (arg0->unk30[arg1] != -1) { BoardModelKill(arg0->unk30[arg1]); arg0->unk30[arg1] = -1; @@ -223,6 +300,314 @@ void fn_1_1F94(unkW02Dice* arg0, s32 arg1) { if (arg0->unk48[arg1] != -1) { Hu3DParManKill(arg0->unk48[arg1]); arg0->unk48[arg1] = -1; - } +} + +void fn_1_2030(m02Dice *arg0) +{ + fn_1_1F94(arg0, 0); + fn_1_1F94(arg0, 1); + fn_1_1F94(arg0, 2); +} + + +HsfanimStruct00 lbl_1_data_2D8 = { + 150, + { 0x00, 0x00 }, // padding? + 50, + 0, + 65.0f, + { 0.0f, -0.195f, 0.0f }, + 100.0f, + 0.99f, + 40.0f, + 0.999f, + 0x0004, + { + 0xFF, 0xFF, 0x20, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0x80, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF + }, + { + 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0x00 + } +}; + +void fn_1_2100(m02Dice *arg0, s32 arg1) +{ + s16 temp_r29; + AnimData *temp_r28; + void *temp_r27; + temp_r27 = HuDataSelHeapReadNum(0x120001, MEMORY_DEFAULT_NUM, HEAP_DATA); + temp_r28 = HuSprAnimRead(temp_r27); + arg0->unk48[arg1] = Hu3DParManCreate(temp_r28, 100, &lbl_1_data_2D8); + Hu3DParManAttrSet(arg0->unk48[arg1], 0x108); + Hu3DParManRotSet(arg0->unk48[arg1], 0, 0, 0); + Hu3DParManVecSet(arg0->unk48[arg1], 0, 0.4f, 0.2f); + temp_r29 = Hu3DParManModelIDGet(arg0->unk48[arg1]); + Hu3DModelLayerSet(temp_r29, 2); + Hu3DParticleBlendModeSet(temp_r29, 0); +} + +void fn_1_2220(m02Dice *arg0) +{ + s32 temp_r30; + WorkDice *temp_r29; + temp_r30 = arg0->unk96; + temp_r29 = OM_GET_WORK_PTR(arg0->unk3C[temp_r30], WorkDice); + temp_r29->unk3 = 2; + temp_r29->unk04 = 0; + BoardModelMotionSpeedSet(arg0->unk30[temp_r30], 0); + + arg0->unk36[temp_r30] = arg0->unk1C[temp_r30]; +} + +typedef struct { + u8 field0_bit0 : 1; + u8 field0_bit1 : 1; + u8 field0_bit2 : 1; + u8 field0_bit3 : 2; + s8 unk01; + s16 unk02; + s16 unk04[2]; + float unk08; +} WorkDiceNum; + +void fn_1_22BC(m02Dice *arg0) +{ + s32 temp_r31; + WorkDiceNum *temp_r30; + for(temp_r31=0; temp_r31unk00; temp_r31++) { + if(arg0->unk50[temp_r31]) { + temp_r30 = OM_GET_WORK_PTR(arg0->unk50[temp_r31], WorkDiceNum); + temp_r30->field0_bit1 = 1; + temp_r30->field0_bit2 = 1; + temp_r30->unk02 = 0; + } + } +} + +s32 fn_1_233C(m02Dice* arg0) +{ + s32 temp_r31; + WorkDiceNum *temp_r30; + for(temp_r31=0; temp_r31unk00; temp_r31++) { + if(!arg0->unk50[temp_r31]) { + continue; + } + temp_r30 = OM_GET_WORK_PTR(arg0->unk50[temp_r31], WorkDiceNum); + if(temp_r30->field0_bit2) { + return 0; + } + } + return 1; +} + +void fn_1_23B4(m02Dice *arg0, s32 arg1) +{ + WorkDiceNum *work; + if(!arg0->unk50[arg1]) { + return; + } + work = OM_GET_WORK_PTR(arg0->unk50[arg1], WorkDiceNum); + work->field0_bit0 = 1; +} + +void fn_1_25D0(omObjData *object); + +void fn_1_23FC(m02Dice *arg0, s32 arg1) +{ + Vec spC; + s16 sp8[2]; + WorkDiceNum *temp_r31; + s16 temp_r29; + omObjData *temp_r28; + s32 temp_r26; + s16 temp_r25; + temp_r26 = arg0->unk96; + if(arg1 > 99) { + arg1 = 99; + } + sp8[0] = arg1%10; + sp8[1] = arg1/10; + spC = arg0->unk0C; + spC.y += 300.0f; + temp_r28 = omAddObjEx(boardObjMan, 258, 0, 0, -1, fn_1_25D0); + temp_r28->unk10 = (u32)arg0; + temp_r31 = OM_GET_WORK_PTR(temp_r28, WorkDiceNum); + temp_r31->field0_bit0 = 0; + temp_r31->field0_bit1 = 0; + temp_r31->field0_bit2 = 0; + temp_r31->field0_bit3 = temp_r26; + temp_r31->unk08 = 0.3f; + temp_r31->unk01 = arg1; + temp_r31->unk02 = 360; + for(temp_r29=0; temp_r29<2; temp_r29++) { + temp_r25 = BoardModelCreate(arg0->unk08[sp8[temp_r29]], NULL, 0); + BoardModelPosSetV(temp_r25, &spC); + temp_r31->unk04[temp_r29] = temp_r25; + } + if(sp8[1] == 0) { + BoardModelVisibilitySet(temp_r31->unk04[1], 0); + } + arg0->unk50[temp_r26] = temp_r28; + +} + +void fn_1_2694(WorkDiceNum *arg0); +void fn_1_2830(m02Dice *arg0, WorkDiceNum *arg1, s32 arg2); +void fn_1_2BE4(m02Dice *arg0, WorkDiceNum *arg1, s32 arg2); + +void fn_1_25D0(omObjData *object) +{ + WorkDiceNum *temp_r31; + m02Dice *temp_r30; + temp_r30 = (m02Dice *)object->unk10; + temp_r31 = OM_GET_WORK_PTR(object, WorkDiceNum); + if(temp_r31->field0_bit0 || BoardIsKill()) { + fn_1_2694(temp_r31); + temp_r30->unk50[temp_r31->field0_bit3] = NULL; + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + if(BoardPauseActiveCheck()) { + return; + } + fn_1_2830(temp_r30, temp_r31, temp_r31->field0_bit1); + fn_1_2BE4(temp_r30, temp_r31, temp_r31->field0_bit1); +} + +void fn_1_2694(WorkDiceNum *arg0) +{ + s32 i; + for(i=0; i<2; i++) { + if(arg0->unk04[i] == -1) { + continue; + } + OSReport("%d:GenDiceNumExitOM Kill %d\n", i, arg0->unk04[i]); + BoardModelKill(arg0->unk04[i]); + arg0->unk04[i] = -1; + (void)i; + } +} + +void fn_1_272C(m02Dice *arg0) +{ + s32 i; + WorkDiceNum *work; + s32 j; + for(i=0; i<3; i++) { + if(!arg0->unk50[i]) { + continue; + } + work = OM_GET_WORK_PTR(arg0->unk50[i], WorkDiceNum); + for(j=0; j<2; j++) { + if(work->unk04[j] == -1) { + continue; + } + OSReport("%d:GenDiceNumOMKillAll %d\n", j, work->unk04[j]); + BoardModelKill(work->unk04[j]); + work->unk04[j] = -1; + (void)j; + } + fn_1_23B4(arg0, i); + } + +} + +void fn_1_2830(m02Dice *arg0, WorkDiceNum *arg1, s32 arg2) +{ + float temp_f31; + s16 temp_r31; + Vec *temp_r29; + s16 temp_r27; + s32 sp8 = 0; + Vec sp30; + Vec sp24; + Vec sp18 = { 288, 155, 1400 }; + Vec sp54[2]; + Vec sp3C[2] = { + { 144, 155, 1400 }, + { 432, 155, 1400 } + }; + Vec sp6C[3] = { + { 144, 155, 1400 }, + { 432, 155, 1400 }, + { 288, 155, 1400 } + }; + Vec spC = { 288, 176, 1400 }; + temp_r27 = arg1->unk01/10; + if(arg2) { + temp_r29 = &spC; + temp_f31 = -20.0f*arg1->field0_bit3; + } else { + switch(arg0->unk00) { + case 1: + temp_r29 = &arg0->unk7C; + break; + + case 2: + case 3: + temp_r29 = &arg0->unk64[arg1->field0_bit3]; + break; + } + temp_f31 = 0; + } + for(temp_r31=0; temp_r31<2; temp_r31++) { + if(temp_r27 == 0) { + sp54[temp_r31].x = temp_r29->x; + } else { + if(temp_r31) { + sp54[temp_r31].x = temp_r29->x-30; + } else { + sp54[temp_r31].x = temp_r29->x+30; + } + } + sp54[temp_r31].y = temp_r29->y; + sp54[temp_r31].z = temp_r29->z+temp_f31; + } + for(temp_r31=0; temp_r31<2; temp_r31++) { + BoardModelPosGet(arg1->unk04[temp_r31], &sp30); + Hu3D2Dto3D(&sp54[temp_r31], 1, &sp54[temp_r31]); + VECSubtract(&sp54[temp_r31], &sp30, &sp24); + if(VECMag(&sp24) < 0.01f) { + arg1->field0_bit2 = 0; + if(arg2 && arg1->field0_bit3) { + BoardModelVisibilitySet(arg1->unk04[temp_r31], 0); + } + } else { + arg1->field0_bit2 = 1; + } + VECScale(&sp24, &sp24, arg1->unk08); + VECAdd(&sp30, &sp24, &sp30); + BoardModelPosSetV(arg1->unk04[temp_r31], &sp30); + } +} + +void fn_1_2BE4(m02Dice *arg0, WorkDiceNum *arg1, s32 arg2) +{ + s32 temp_r29; + float temp_f30; + if(arg2) { + arg1->unk02 += 18; + if(arg1->unk02 >= 360) { + arg1->unk02 = 360; + } + } else { + arg1->unk02 -= 18; + if(arg1->unk02 <= 0) { + arg1->unk02 = 0; + } + } + OSs16tof32(&arg1->unk02, &temp_f30); + for(temp_r29=0; temp_r29<2; temp_r29++) { + if(arg1->unk04[temp_r29] == -1) { + continue; + } + BoardModelRotSet(arg1->unk04[temp_r29], 0, temp_f30, 0); + } } \ No newline at end of file diff --git a/src/REL/w02Dll/gamble.c b/src/REL/w02Dll/gamble.c index dcb77bfa..d7df7c81 100644 --- a/src/REL/w02Dll/gamble.c +++ b/src/REL/w02Dll/gamble.c @@ -1,9 +1,308 @@ #include "REL/w02Dll.h" +#include "game/audio.h" +#include "game/pad.h" +#include "game/objsub.h" + +#include "game/board/basic_space.h" -Process* lbl_1_bss_50; s32 lbl_1_bss_54; +Process* lbl_1_bss_50; -void fn_1_2D04(); +void fn_1_2D04(void) +{ + float temp_f31; + float temp_f30; + float temp_f29; + + m02Dice spEC; + m02Dice sp4C; + s32 sp24[10] = { + 0x0076001C, + 0x0076001D, + 0x0076001E, + 0x0076001F, + 0x00760020, + 0x00760021, + 0x00760022, + 0x00760023, + 0x00760024, + 0x00760025 + }; + Vec sp18; + Vec spC; + BoardSpace *sp8; + s32 temp_r31; + s16 temp_r30; + s32 temp_r29; + s16 temp_r28; + s32 temp_r27; + s32 temp_r26; + s32 temp_r25; + u16 temp_r24; + temp_r31 = GWSystem.player_curr; + OSReport("gamble start %d\n", temp_r31); + sp8 = BoardSpaceGet(0, GWPlayer[temp_r31].space_curr); + BoardRollDispSet(0); + temp_r28 = BoardModelCreate(0x76000F, NULL, 0); + BoardModelVisibilitySet(temp_r28, 0); + switch(lbl_1_bss_54) { + case 0: + temp_r30 = lbl_1_bss_30[0]; + break; + + case 1: + temp_r30 = lbl_1_bss_30[1]; + break; + + case 2: + temp_r30 = lbl_1_bss_30[2]; + break; + } + BoardPlayerIdleSet(temp_r31); + BoardPlayerMotBlendSet(temp_r31, -90, 30); + while(!BoardPlayerMotBlendCheck(temp_r31)) { + HuPrcVSleep(); + } + BoardCameraViewSet(3); + BoardCameraMotionWait(); + BoardModelMotionStart(lbl_1_data_286, 1, 0x40000001); + BoardModelHookSet(temp_r30, "kuri", lbl_1_data_286); + BoardModelVisibilitySet(lbl_1_data_286, 1); + BoardModelMotionTimeSet(temp_r30, 0); + BoardModelAttrReset(temp_r30, 0x40000002); + HuAudFXPlay(813); + while(BoardModelMotionTimeGet(temp_r30) < 30.0f) { + HuPrcVSleep(); + } + BoardModelAttrSet(temp_r30, 0x40000002); + BoardModelHookReset(temp_r30); + BoardModelPosGet(temp_r30, &sp18); + BoardModelPosSetV(lbl_1_data_286, &sp18); + fn_1_121C(0x13000A); + spEC.unk00 = 1; + spEC.unk04 = 0x76001B; + spEC.unk08 = sp24; + spEC.unk0C = sp18; + spEC.unk18 = 1; + spEC.unk1A = 10; + spEC.unk22 = 0; + spEC.unk24 = 1; + temp_r25 = frandmod(100); + if(temp_r25 <= 59) { + spEC.unk1C[0] = frandmod(4)+4; + } else if(temp_r25 <= 89) { + if(temp_r25 & 0x1) { + spEC.unk1C[0] = 2; + } else { + spEC.unk1C[0] = 8; + } + spEC.unk1C[0] += frand() & 0x1; + } else { + if(temp_r25 & 0x1) { + spEC.unk1C[0] = 1; + } else { + spEC.unk1C[0] = 10; + } + } + fn_1_1254(&spEC); + while(!fn_1_17F4(&spEC)) { + HuPrcVSleep(); + } + temp_r29 = frandmod(45)+45; + HuPrcSleep(temp_r29); + BoardModelPosGet(lbl_1_data_286, &spC); + BoardModelMotionStart(lbl_1_data_286, 4, 0); + temp_f29 = 15; + temp_f31 = 0; + while(1) { + temp_f30 = temp_f29-(0.08166667f*(0.25f*(temp_f31*temp_f31))); + temp_f31++; + spC.y += temp_f30; + if(spC.y >= (250.0f+sp18.y)-130.0f) { + spC.y = (250.0f+sp18.y)-130.0f; + temp_f29 = -10; + temp_f31 = 0; + spEC.unk9C = 1; + } + if(spC.y <= sp18.y) { + spC.y = sp18.y; + spEC.unk9C = 0; + break; + } + BoardModelPosSetV(lbl_1_data_286, &spC); + HuPrcVSleep(); + } + BoardModelPosSetV(lbl_1_data_286, &sp18); + BoardModelMotionStart(lbl_1_data_286, 1, 0x40000001); + while(spEC.unk28 == 0) { + HuPrcVSleep(); + } + temp_r27 = spEC.unk94; + if(temp_r27 == 10) { + HuAudPlayerVoicePlay(temp_r31, 302); + fn_1_121C(0x130010); + } else { + fn_1_121C(0x13000C); + } + BoardPlayerMotBlendSet(temp_r31, 0, 15); + while(!BoardPlayerMotBlendCheck(temp_r31)) { + HuPrcVSleep(); + } + BoardCameraTargetModelSet(-1); + if(temp_r27 != 10) { + sp4C = spEC; + BoardPlayerPosGet(temp_r31, &sp4C.unk0C); + sp4C.unk24 = 1; + sp4C.unk1C[0] = frandmod(10)+1; + if(sp4C.unk1C[0] == temp_r27) { + if(sp4C.unk1C[0] == 9) { + sp4C.unk1C[0]--; + } else { + sp4C.unk1C[0]++; + } + } + fn_1_1254(&sp4C); + while(!fn_1_17F4(&sp4C)) { + HuPrcVSleep(); + } + temp_r24 = 0; + while(!(temp_r24 & PAD_BUTTON_A)) { + HuPrcVSleep(); + if(GWPlayer[temp_r31].com) { + temp_r29 = frandmod(45)+20; + HuPrcSleep(temp_r29); + temp_r24 = PAD_BUTTON_A; + } else { + temp_r24 = HuPadBtnDown[GWPlayer[temp_r31].port]; + } + } + BoardPlayerDiceJumpStart(temp_r31); + while(!BoardPlayerDiceJumpCheck(temp_r31)) { + HuPrcVSleep(); + } + sp4C.unk9C = 1; + while(GWPlayer[temp_r31].jump) { + HuPrcVSleep(); + } + sp4C.unk9C = 0; + while(sp4C.unk28 == 0) { + HuPrcVSleep(); + } + if(sp4C.unk94 > temp_r27) { + fn_1_121C(0x13000D); + } else { + HuAudPlayerVoicePlay(temp_r31, 302); + fn_1_121C(0x13000F); + } + } else { + sp4C.unk94 = 0; + } + fn_1_1518(&spEC); + if(temp_r27 != 10) { + fn_1_1518(&sp4C); + } + BoardPlayerPosGet(temp_r31, &spC); + if(sp4C.unk94 > temp_r27) { + spC.y += 250.0f; + HuAudFXPlay(839); + temp_r29 = BoardCoinChgCreate(&spC, 10); + while(!BoardCoinChgExist(temp_r29)) { + HuPrcVSleep(); + } + for(temp_r29=0; temp_r29<10; temp_r29++) { + BoardPlayerCoinsAdd(temp_r31, 1); + HuAudFXPlay(7); + HuPrcSleep(6); + } + fn_1_121C(0x13000E); + } else { + temp_r26 = GWPlayer[temp_r31].space_curr; + BoardCameraTargetSpaceSet(temp_r26); + BoardPlayerMotionShiftSet(temp_r31, 6, 0, 5, 0x40000001); + HuPrcSleep(60); + HuPrcSleep(30); + BoardModelPosSetV(temp_r28, &spC); + BoardModelMotionTimeSet(temp_r28, 0); + BoardModelVisibilitySet(temp_r28, 1); + HuAudFXPlay(1058); + while(BoardModelMotionTimeGet(temp_r28) < BoardModelMotionMaxTimeGet(temp_r28)) { + HuPrcVSleep(); + } + omVibrate(temp_r31, 12, 4, 2); + temp_f30 = -4; + for(temp_r29=0; temp_r29<30; temp_r29++) { + spC.y += temp_f30; + temp_f30 *= 1.08f; + BoardPlayerPosSetV(temp_r31, &spC); + HuPrcVSleep(); + } + temp_r26 = BoardSpaceFlagSearch(0, 0x80000000); + BoardCameraMoveSet(0); + BoardCameraTargetSpaceSet(temp_r26); + HuPrcVSleep(); + BoardCameraMoveSet(1); + BoardSpacePosGet(0, temp_r26, &sp18); + spC = sp18; + spC.y -= 180.0f; + BoardPlayerPosSetV(temp_r31, &spC); + GWPlayer[temp_r31].space_curr = temp_r26; + HuPrcSleep(15); + BoardModelPosSetV(temp_r28, &sp18); + BoardModelMotionTimeSet(temp_r28, 0); + HuAudFXPlay(1058); + while(BoardModelMotionTimeGet(temp_r28) < BoardModelMotionMaxTimeGet(temp_r28)) { + HuPrcVSleep(); + } + HuPrcSleep(15); + temp_f29 = 22; + temp_f31 = 1; + while(1) { + temp_f30 = temp_f29-((90.0f/1200.0f)*(0.25f*(temp_f31*temp_f31))); + temp_f31++; + spC.y += temp_f30; + if(spC.y >= sp18.y) { + BoardModelAttrSet(temp_r28, 0x40000004); + } + if(temp_f30 < 0 && spC.y <= sp18.y) { + omVibrate(temp_r31, 12, 4, 2); + temp_f29 = -temp_f30*0.31f; + temp_f31 = 1; + HuAudFXPlay(1068); + if(fabs(temp_f29) <= 5.0) { + break; + } + spC.y = sp18.y; + } + + BoardPlayerPosSetV(temp_r31, &spC); + HuPrcVSleep(); + } + BoardPlayerPosSetV(temp_r31, &sp18); + HuPrcSleep(90); + BoardPlayerIdleSet(temp_r31); + HuPrcSleep(9); + BoardCameraTargetPlayerSet(temp_r31); + } + BoardModelHookSet(temp_r30, "kuri", lbl_1_data_286); + BoardModelAttrReset(temp_r30, 0x40000002); + if(sp4C.unk94 > temp_r27) { + HuPrcSleep(10); + HuAudFXPlay(815); + } + while(BoardModelMotionTimeGet(temp_r30) < BoardModelMotionMaxTimeGet(temp_r30)) { + HuPrcVSleep(); + } + BoardModelHookReset(temp_r30); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + BoardRollDispSet(1); + BoardModelVisibilitySet(lbl_1_data_286, 0); + BoardModelKill(temp_r28); + HuPrcKill(NULL); + while(1) { + HuPrcVSleep(); + } +} void fn_1_3938(void) { From 741bdc15524805e98426e5f866d2a583c9eb1959 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 10 Jun 2024 17:30:27 -0500 Subject: [PATCH 15/23] Rename m02Dice to m02GenDice --- include/REL/w02Dll.h | 8 ++--- src/REL/w02Dll/dice.c | 66 ++++++++++++++++++++--------------------- src/REL/w02Dll/gamble.c | 4 +-- 3 files changed, 39 insertions(+), 39 deletions(-) diff --git a/include/REL/w02Dll.h b/include/REL/w02Dll.h index 28dc596e..52567979 100644 --- a/include/REL/w02Dll.h +++ b/include/REL/w02Dll.h @@ -42,7 +42,7 @@ typedef struct m02_dice { /* 0x96 */ s16 unk96; /* 0x98 */ f32 unk98; /* 0x9C */ s16 unk9C; -} m02Dice; +} m02GenDice; extern s16 lbl_1_bss_30[0x10]; // Model List @@ -57,9 +57,9 @@ extern void fn_1_92C(); extern s32 fn_1_1128(); extern void fn_1_121C(u32); -void fn_1_1254(m02Dice* arg0); -void fn_1_1518(m02Dice* arg0); -s32 fn_1_17F4(m02Dice* arg0); +void fn_1_1254(m02GenDice* arg0); +void fn_1_1518(m02GenDice* arg0); +s32 fn_1_17F4(m02GenDice* arg0); // roulette.c extern void fn_1_D3AC(); diff --git a/src/REL/w02Dll/dice.c b/src/REL/w02Dll/dice.c index 521ff986..ddd0bc83 100644 --- a/src/REL/w02Dll/dice.c +++ b/src/REL/w02Dll/dice.c @@ -21,20 +21,20 @@ typedef struct { /* EXTERN FUNCTIONS */ void fn_1_13D0(void); -void fn_1_1574(m02Dice *arg0); -void fn_1_1794(m02Dice *arg0); +void fn_1_1574(m02GenDice *arg0); +void fn_1_1794(m02GenDice *arg0); void fn_1_1850(omObjData *object); -void fn_1_1F94(m02Dice* arg0, s32 arg1); -void fn_1_2030(m02Dice *arg0); -void fn_1_2100(m02Dice *arg0, s32 arg1); -void fn_1_2220(m02Dice *arg0); -s32 fn_1_233C(m02Dice *arg0); -void fn_1_23FC(m02Dice *arg0, s32 arg1); -void fn_1_23B4(m02Dice *arg0, s32 arg1); -void fn_1_272C(m02Dice *arg0); +void fn_1_1F94(m02GenDice* arg0, s32 arg1); +void fn_1_2030(m02GenDice *arg0); +void fn_1_2100(m02GenDice *arg0, s32 arg1); +void fn_1_2220(m02GenDice *arg0); +s32 fn_1_233C(m02GenDice *arg0); +void fn_1_23FC(m02GenDice *arg0, s32 arg1); +void fn_1_23B4(m02GenDice *arg0, s32 arg1); +void fn_1_272C(m02GenDice *arg0); /* LOCAL FUNCTIONS */ -void fn_1_1254(m02Dice* arg0) { +void fn_1_1254(m02GenDice* arg0) { Vec sp8; s32 i; @@ -65,7 +65,7 @@ void fn_1_13D0(void) { s32 var_r29; s32 i; s32 var_r30_2; - m02Dice* temp_r31; + m02GenDice* temp_r31; temp_r31 = HuPrcCurrentGet()->user_data; temp_r31->unk36[0] = temp_r31->unk36[1] = temp_r31->unk36[2] = 0; @@ -106,7 +106,7 @@ void fn_1_13D0(void) { } } -void fn_1_1518(m02Dice* arg0) { +void fn_1_1518(m02GenDice* arg0) { OSReport("m02GenDiceKill\n"); if (arg0->unk2C) { HuPrcKill(arg0->unk2C); @@ -115,7 +115,7 @@ void fn_1_1518(m02Dice* arg0) { fn_1_272C(arg0); } -void fn_1_1574(m02Dice* arg0) { +void fn_1_1574(m02GenDice* arg0) { Vec sp8; f32 temp_f0; omObjData* temp_r3; @@ -153,7 +153,7 @@ void fn_1_1574(m02Dice* arg0) { HuAudFXPlay(0x302); } -void fn_1_1794(m02Dice* arg0) { +void fn_1_1794(m02GenDice* arg0) { WorkDice* temp_r30; temp_r30 = OM_GET_WORK_PTR(arg0->unk3C[arg0->unk96], WorkDice); @@ -162,7 +162,7 @@ void fn_1_1794(m02Dice* arg0) { } } -s32 fn_1_17F4(m02Dice* arg0) +s32 fn_1_17F4(m02GenDice* arg0) { WorkDice* temp; if ( arg0->unk96 < 0) { @@ -178,13 +178,13 @@ s32 fn_1_17F4(m02Dice* arg0) void fn_1_1850(omObjData *object) { WorkDice *temp_r29; - m02Dice *temp_r27; + m02GenDice *temp_r27; s16 temp_r26; s16 temp_r25; float temp_f29; float temp_f28; float temp_f27; - temp_r27 = (m02Dice *)object->unk10; + temp_r27 = (m02GenDice *)object->unk10; temp_r29 = OM_GET_WORK_PTR(object, WorkDice); if(temp_r29->unk7 || BoardIsKill()) { fn_1_1F94(temp_r27, temp_r29->unk1); @@ -291,7 +291,7 @@ void fn_1_1850(omObjData *object) BoardModelScaleSet(temp_r27->unk30[temp_r29->unk1], object->scale.x, object->scale.y, object->scale.z); } -void fn_1_1F94(m02Dice* arg0, s32 arg1) { +void fn_1_1F94(m02GenDice* arg0, s32 arg1) { if (arg0->unk30[arg1] != -1) { BoardModelKill(arg0->unk30[arg1]); arg0->unk30[arg1] = -1; @@ -303,7 +303,7 @@ void fn_1_1F94(m02Dice* arg0, s32 arg1) { } } -void fn_1_2030(m02Dice *arg0) +void fn_1_2030(m02GenDice *arg0) { fn_1_1F94(arg0, 0); fn_1_1F94(arg0, 1); @@ -337,7 +337,7 @@ HsfanimStruct00 lbl_1_data_2D8 = { } }; -void fn_1_2100(m02Dice *arg0, s32 arg1) +void fn_1_2100(m02GenDice *arg0, s32 arg1) { s16 temp_r29; AnimData *temp_r28; @@ -353,7 +353,7 @@ void fn_1_2100(m02Dice *arg0, s32 arg1) Hu3DParticleBlendModeSet(temp_r29, 0); } -void fn_1_2220(m02Dice *arg0) +void fn_1_2220(m02GenDice *arg0) { s32 temp_r30; WorkDice *temp_r29; @@ -377,7 +377,7 @@ typedef struct { float unk08; } WorkDiceNum; -void fn_1_22BC(m02Dice *arg0) +void fn_1_22BC(m02GenDice *arg0) { s32 temp_r31; WorkDiceNum *temp_r30; @@ -391,7 +391,7 @@ void fn_1_22BC(m02Dice *arg0) } } -s32 fn_1_233C(m02Dice* arg0) +s32 fn_1_233C(m02GenDice* arg0) { s32 temp_r31; WorkDiceNum *temp_r30; @@ -407,7 +407,7 @@ s32 fn_1_233C(m02Dice* arg0) return 1; } -void fn_1_23B4(m02Dice *arg0, s32 arg1) +void fn_1_23B4(m02GenDice *arg0, s32 arg1) { WorkDiceNum *work; if(!arg0->unk50[arg1]) { @@ -419,7 +419,7 @@ void fn_1_23B4(m02Dice *arg0, s32 arg1) void fn_1_25D0(omObjData *object); -void fn_1_23FC(m02Dice *arg0, s32 arg1) +void fn_1_23FC(m02GenDice *arg0, s32 arg1) { Vec spC; s16 sp8[2]; @@ -459,14 +459,14 @@ void fn_1_23FC(m02Dice *arg0, s32 arg1) } void fn_1_2694(WorkDiceNum *arg0); -void fn_1_2830(m02Dice *arg0, WorkDiceNum *arg1, s32 arg2); -void fn_1_2BE4(m02Dice *arg0, WorkDiceNum *arg1, s32 arg2); +void fn_1_2830(m02GenDice *arg0, WorkDiceNum *arg1, s32 arg2); +void fn_1_2BE4(m02GenDice *arg0, WorkDiceNum *arg1, s32 arg2); void fn_1_25D0(omObjData *object) { WorkDiceNum *temp_r31; - m02Dice *temp_r30; - temp_r30 = (m02Dice *)object->unk10; + m02GenDice *temp_r30; + temp_r30 = (m02GenDice *)object->unk10; temp_r31 = OM_GET_WORK_PTR(object, WorkDiceNum); if(temp_r31->field0_bit0 || BoardIsKill()) { fn_1_2694(temp_r31); @@ -495,7 +495,7 @@ void fn_1_2694(WorkDiceNum *arg0) } } -void fn_1_272C(m02Dice *arg0) +void fn_1_272C(m02GenDice *arg0) { s32 i; WorkDiceNum *work; @@ -519,7 +519,7 @@ void fn_1_272C(m02Dice *arg0) } -void fn_1_2830(m02Dice *arg0, WorkDiceNum *arg1, s32 arg2) +void fn_1_2830(m02GenDice *arg0, WorkDiceNum *arg1, s32 arg2) { float temp_f31; s16 temp_r31; @@ -588,7 +588,7 @@ void fn_1_2830(m02Dice *arg0, WorkDiceNum *arg1, s32 arg2) } } -void fn_1_2BE4(m02Dice *arg0, WorkDiceNum *arg1, s32 arg2) +void fn_1_2BE4(m02GenDice *arg0, WorkDiceNum *arg1, s32 arg2) { s32 temp_r29; float temp_f30; diff --git a/src/REL/w02Dll/gamble.c b/src/REL/w02Dll/gamble.c index d7df7c81..92fa2ce9 100644 --- a/src/REL/w02Dll/gamble.c +++ b/src/REL/w02Dll/gamble.c @@ -14,8 +14,8 @@ void fn_1_2D04(void) float temp_f30; float temp_f29; - m02Dice spEC; - m02Dice sp4C; + m02GenDice spEC; + m02GenDice sp4C; s32 sp24[10] = { 0x0076001C, 0x0076001D, From 54b235af8b941a6c95307fa846c3acf42fb1a4d8 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 10 Jun 2024 17:32:48 -0500 Subject: [PATCH 16/23] Rename dice to gendice --- config/GMPE01_00/rels/w02Dll/splits.txt | 2 +- configure.py | 2 +- src/REL/w02Dll/{dice.c => gendice.c} | 60 ++++++++++++------------- 3 files changed, 32 insertions(+), 32 deletions(-) rename src/REL/w02Dll/{dice.c => gendice.c} (91%) diff --git a/config/GMPE01_00/rels/w02Dll/splits.txt b/config/GMPE01_00/rels/w02Dll/splits.txt index 7283acad..675246eb 100644 --- a/config/GMPE01_00/rels/w02Dll/splits.txt +++ b/config/GMPE01_00/rels/w02Dll/splits.txt @@ -16,7 +16,7 @@ REL/w02Dll/main.c: .data start:0x00000000 end:0x000002A8 .bss start:0x00000000 end:0x00000050 -REL/w02Dll/dice.c: +REL/w02Dll/gendice.c: .text start:0x00001254 end:0x00002D04 .rodata start:0x00000038 end:0x00000108 .data start:0x000002A8 end:0x00000360 diff --git a/configure.py b/configure.py index 43ff532f..a34c2ad8 100644 --- a/configure.py +++ b/configure.py @@ -1484,7 +1484,7 @@ config.libs = [ objects={ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w02Dll/main.c"), - Object(Matching, "REL/w02Dll/dice.c"), + Object(Matching, "REL/w02Dll/gendice.c"), Object(Matching, "REL/w02Dll/gamble.c"), Object(NonMatching, "REL/w02Dll/mg_coin.c"), Object(NonMatching, "REL/w02Dll/mg_item.c"), diff --git a/src/REL/w02Dll/dice.c b/src/REL/w02Dll/gendice.c similarity index 91% rename from src/REL/w02Dll/dice.c rename to src/REL/w02Dll/gendice.c index ddd0bc83..7562a53b 100644 --- a/src/REL/w02Dll/dice.c +++ b/src/REL/w02Dll/gendice.c @@ -17,7 +17,7 @@ typedef struct { /* 0x03 */ u8 unk03; /* 0x04 */ s16 unk04; /* 0x06 */ s16 unk06; -} WorkDice; +} WorkGenDice; /* EXTERN FUNCTIONS */ void fn_1_13D0(void); @@ -120,7 +120,7 @@ void fn_1_1574(m02GenDice* arg0) { f32 temp_f0; omObjData* temp_r3; s32 temp_r28; - WorkDice* temp_r29; + WorkGenDice* temp_r29; temp_r28 = arg0->unk96; arg0->unk30[temp_r28] = BoardModelCreate(arg0->unk04, NULL, 0); @@ -129,7 +129,7 @@ void fn_1_1574(m02GenDice* arg0) { BoardModelMotionSpeedSet(arg0->unk30[temp_r28], 0); BoardModelMotionTimeSet(arg0->unk30[temp_r28], arg0->unk98); temp_r3 = omAddObjEx(boardObjMan, 0x102, 0U, 0U, -1, fn_1_1850); - temp_r29 = (WorkDice*) temp_r3->work; + temp_r29 = (WorkGenDice*) temp_r3->work; temp_r29->unk7 = 0; temp_r29->unk6 = 0; @@ -154,9 +154,9 @@ void fn_1_1574(m02GenDice* arg0) { } void fn_1_1794(m02GenDice* arg0) { - WorkDice* temp_r30; + WorkGenDice* temp_r30; - temp_r30 = OM_GET_WORK_PTR(arg0->unk3C[arg0->unk96], WorkDice); + temp_r30 = OM_GET_WORK_PTR(arg0->unk3C[arg0->unk96], WorkGenDice); while (temp_r30->unk3 != 1) { HuPrcVSleep(); } @@ -164,11 +164,11 @@ void fn_1_1794(m02GenDice* arg0) { s32 fn_1_17F4(m02GenDice* arg0) { - WorkDice* temp; + WorkGenDice* temp; if ( arg0->unk96 < 0) { return 0; } - temp = OM_GET_WORK_PTR(arg0->unk3C[arg0->unk96], WorkDice); + temp = OM_GET_WORK_PTR(arg0->unk3C[arg0->unk96], WorkGenDice); if (temp->unk3 != 1) { return 0; } @@ -177,7 +177,7 @@ s32 fn_1_17F4(m02GenDice* arg0) void fn_1_1850(omObjData *object) { - WorkDice *temp_r29; + WorkGenDice *temp_r29; m02GenDice *temp_r27; s16 temp_r26; s16 temp_r25; @@ -185,7 +185,7 @@ void fn_1_1850(omObjData *object) float temp_f28; float temp_f27; temp_r27 = (m02GenDice *)object->unk10; - temp_r29 = OM_GET_WORK_PTR(object, WorkDice); + temp_r29 = OM_GET_WORK_PTR(object, WorkGenDice); if(temp_r29->unk7 || BoardIsKill()) { fn_1_1F94(temp_r27, temp_r29->unk1); temp_r27->unk3C[temp_r29->unk1] = NULL; @@ -356,9 +356,9 @@ void fn_1_2100(m02GenDice *arg0, s32 arg1) void fn_1_2220(m02GenDice *arg0) { s32 temp_r30; - WorkDice *temp_r29; + WorkGenDice *temp_r29; temp_r30 = arg0->unk96; - temp_r29 = OM_GET_WORK_PTR(arg0->unk3C[temp_r30], WorkDice); + temp_r29 = OM_GET_WORK_PTR(arg0->unk3C[temp_r30], WorkGenDice); temp_r29->unk3 = 2; temp_r29->unk04 = 0; BoardModelMotionSpeedSet(arg0->unk30[temp_r30], 0); @@ -375,15 +375,15 @@ typedef struct { s16 unk02; s16 unk04[2]; float unk08; -} WorkDiceNum; +} WorkGenDiceNum; void fn_1_22BC(m02GenDice *arg0) { s32 temp_r31; - WorkDiceNum *temp_r30; + WorkGenDiceNum *temp_r30; for(temp_r31=0; temp_r31unk00; temp_r31++) { if(arg0->unk50[temp_r31]) { - temp_r30 = OM_GET_WORK_PTR(arg0->unk50[temp_r31], WorkDiceNum); + temp_r30 = OM_GET_WORK_PTR(arg0->unk50[temp_r31], WorkGenDiceNum); temp_r30->field0_bit1 = 1; temp_r30->field0_bit2 = 1; temp_r30->unk02 = 0; @@ -394,12 +394,12 @@ void fn_1_22BC(m02GenDice *arg0) s32 fn_1_233C(m02GenDice* arg0) { s32 temp_r31; - WorkDiceNum *temp_r30; + WorkGenDiceNum *temp_r30; for(temp_r31=0; temp_r31unk00; temp_r31++) { if(!arg0->unk50[temp_r31]) { continue; } - temp_r30 = OM_GET_WORK_PTR(arg0->unk50[temp_r31], WorkDiceNum); + temp_r30 = OM_GET_WORK_PTR(arg0->unk50[temp_r31], WorkGenDiceNum); if(temp_r30->field0_bit2) { return 0; } @@ -409,11 +409,11 @@ s32 fn_1_233C(m02GenDice* arg0) void fn_1_23B4(m02GenDice *arg0, s32 arg1) { - WorkDiceNum *work; + WorkGenDiceNum *work; if(!arg0->unk50[arg1]) { return; } - work = OM_GET_WORK_PTR(arg0->unk50[arg1], WorkDiceNum); + work = OM_GET_WORK_PTR(arg0->unk50[arg1], WorkGenDiceNum); work->field0_bit0 = 1; } @@ -423,7 +423,7 @@ void fn_1_23FC(m02GenDice *arg0, s32 arg1) { Vec spC; s16 sp8[2]; - WorkDiceNum *temp_r31; + WorkGenDiceNum *temp_r31; s16 temp_r29; omObjData *temp_r28; s32 temp_r26; @@ -438,7 +438,7 @@ void fn_1_23FC(m02GenDice *arg0, s32 arg1) spC.y += 300.0f; temp_r28 = omAddObjEx(boardObjMan, 258, 0, 0, -1, fn_1_25D0); temp_r28->unk10 = (u32)arg0; - temp_r31 = OM_GET_WORK_PTR(temp_r28, WorkDiceNum); + temp_r31 = OM_GET_WORK_PTR(temp_r28, WorkGenDiceNum); temp_r31->field0_bit0 = 0; temp_r31->field0_bit1 = 0; temp_r31->field0_bit2 = 0; @@ -458,16 +458,16 @@ void fn_1_23FC(m02GenDice *arg0, s32 arg1) } -void fn_1_2694(WorkDiceNum *arg0); -void fn_1_2830(m02GenDice *arg0, WorkDiceNum *arg1, s32 arg2); -void fn_1_2BE4(m02GenDice *arg0, WorkDiceNum *arg1, s32 arg2); +void fn_1_2694(WorkGenDiceNum *arg0); +void fn_1_2830(m02GenDice *arg0, WorkGenDiceNum *arg1, s32 arg2); +void fn_1_2BE4(m02GenDice *arg0, WorkGenDiceNum *arg1, s32 arg2); void fn_1_25D0(omObjData *object) { - WorkDiceNum *temp_r31; + WorkGenDiceNum *temp_r31; m02GenDice *temp_r30; temp_r30 = (m02GenDice *)object->unk10; - temp_r31 = OM_GET_WORK_PTR(object, WorkDiceNum); + temp_r31 = OM_GET_WORK_PTR(object, WorkGenDiceNum); if(temp_r31->field0_bit0 || BoardIsKill()) { fn_1_2694(temp_r31); temp_r30->unk50[temp_r31->field0_bit3] = NULL; @@ -481,7 +481,7 @@ void fn_1_25D0(omObjData *object) fn_1_2BE4(temp_r30, temp_r31, temp_r31->field0_bit1); } -void fn_1_2694(WorkDiceNum *arg0) +void fn_1_2694(WorkGenDiceNum *arg0) { s32 i; for(i=0; i<2; i++) { @@ -498,13 +498,13 @@ void fn_1_2694(WorkDiceNum *arg0) void fn_1_272C(m02GenDice *arg0) { s32 i; - WorkDiceNum *work; + WorkGenDiceNum *work; s32 j; for(i=0; i<3; i++) { if(!arg0->unk50[i]) { continue; } - work = OM_GET_WORK_PTR(arg0->unk50[i], WorkDiceNum); + work = OM_GET_WORK_PTR(arg0->unk50[i], WorkGenDiceNum); for(j=0; j<2; j++) { if(work->unk04[j] == -1) { continue; @@ -519,7 +519,7 @@ void fn_1_272C(m02GenDice *arg0) } -void fn_1_2830(m02GenDice *arg0, WorkDiceNum *arg1, s32 arg2) +void fn_1_2830(m02GenDice *arg0, WorkGenDiceNum *arg1, s32 arg2) { float temp_f31; s16 temp_r31; @@ -588,7 +588,7 @@ void fn_1_2830(m02GenDice *arg0, WorkDiceNum *arg1, s32 arg2) } } -void fn_1_2BE4(m02GenDice *arg0, WorkDiceNum *arg1, s32 arg2) +void fn_1_2BE4(m02GenDice *arg0, WorkGenDiceNum *arg1, s32 arg2) { s32 temp_r29; float temp_f30; From 81d021a43830acb1dcbbaf342aa3d115827d9af2 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 10 Jun 2024 20:30:02 -0500 Subject: [PATCH 17/23] Decompile w02dll/roulette.c --- config/GMPE01_00/rels/w02Dll/symbols.txt | 124 ++--- configure.py | 2 +- include/REL/w02Dll.h | 2 +- src/REL/w02Dll/roulette.c | 580 ++++++++++++++++------- 4 files changed, 469 insertions(+), 239 deletions(-) diff --git a/config/GMPE01_00/rels/w02Dll/symbols.txt b/config/GMPE01_00/rels/w02Dll/symbols.txt index 5d690fdf..bc6f7e5e 100644 --- a/config/GMPE01_00/rels/w02Dll/symbols.txt +++ b/config/GMPE01_00/rels/w02Dll/symbols.txt @@ -302,67 +302,67 @@ lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 data:float lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 data:float 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:0x4 data:float -lbl_1_rodata_414 = .rodata:0x00000414; // type:object size:0x4 data:float -lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 data:float -lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 data:float -lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 data:float -lbl_1_rodata_424 = .rodata:0x00000424; // type:object size:0x4 data:float -lbl_1_rodata_428 = .rodata:0x00000428; // type:object size: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_434 = .rodata:0x00000434; // type:object size:0x4 data:float -lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 data:float -lbl_1_rodata_43C = .rodata:0x0000043C; // type:object size:0x4 data:float -lbl_1_rodata_440 = .rodata:0x00000440; // type:object size: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_450 = .rodata:0x00000450; // type:object size:0x8 data:double -lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x8 data:double -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:0x4 data:float -lbl_1_rodata_46C = .rodata:0x0000046C; // type:object size:0x4 data:float -lbl_1_rodata_470 = .rodata:0x00000470; // type:object size:0x4 data:float -lbl_1_rodata_474 = .rodata:0x00000474; // type:object size:0x4 data:float -lbl_1_rodata_478 = .rodata:0x00000478; // type:object size:0x4 data:float -lbl_1_rodata_47C = .rodata:0x0000047C; // type:object size:0x4 data:float -lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x8 data:double -lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x8 data:double -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:0x8 data:double -lbl_1_rodata_4A0 = .rodata:0x000004A0; // type:object size:0x8 data:double -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_4B8 = .rodata:0x000004B8; // type:object size:0x8 data:double -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:0xC data:4byte -lbl_1_rodata_4EC = .rodata:0x000004EC; // type:object size:0x4 data:float -lbl_1_rodata_4F0 = .rodata:0x000004F0; // type:object size:0x4 data:float -lbl_1_rodata_4F4 = .rodata:0x000004F4; // type:object size:0x4 data:float -lbl_1_rodata_4F8 = .rodata:0x000004F8; // type:object size:0x4 data:float -lbl_1_rodata_4FC = .rodata:0x000004FC; // type:object size:0x4 data:float -lbl_1_rodata_500 = .rodata:0x00000500; // type:object size:0x4 data:float -lbl_1_rodata_504 = .rodata:0x00000504; // type:object size:0x4 data:float -lbl_1_rodata_508 = .rodata:0x00000508; // type:object size:0x4 data:float -lbl_1_rodata_50C = .rodata:0x0000050C; // type:object size:0x4 data:float -lbl_1_rodata_510 = .rodata:0x00000510; // type:object size:0x4 data:float -lbl_1_rodata_514 = .rodata:0x00000514; // type:object size:0x4 data:float -lbl_1_rodata_518 = .rodata:0x00000518; // type:object size:0x8 data:double -lbl_1_rodata_520 = .rodata:0x00000520; // type:object size:0x4 data:float -lbl_1_rodata_524 = .rodata:0x00000524; // type:object size:0x4 data:float -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_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:0x4 scope:local data:float +lbl_1_rodata_414 = .rodata:0x00000414; // type:object size:0x4 scope:local data:float +lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 scope:local data:float +lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 scope:local data:float +lbl_1_rodata_424 = .rodata:0x00000424; // type:object size:0x4 scope:local data:float +lbl_1_rodata_428 = .rodata:0x00000428; // type:object size: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_434 = .rodata:0x00000434; // type:object size:0x4 scope:local data:float +lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 scope:local data:float +lbl_1_rodata_43C = .rodata:0x0000043C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_440 = .rodata:0x00000440; // type:object size: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_450 = .rodata:0x00000450; // type:object size:0x8 scope:local data:double +lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x8 scope:local data:double +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:0x4 scope:local data:float +lbl_1_rodata_46C = .rodata:0x0000046C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_470 = .rodata:0x00000470; // type:object size:0x4 scope:local data:float +lbl_1_rodata_474 = .rodata:0x00000474; // type:object size:0x4 scope:local data:float +lbl_1_rodata_478 = .rodata:0x00000478; // type:object size:0x4 scope:local data:float +lbl_1_rodata_47C = .rodata:0x0000047C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x8 scope:local data:double +lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x8 scope:local data:double +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:0x8 scope:local data:double +lbl_1_rodata_4A0 = .rodata:0x000004A0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_4A8 = .rodata:0x000004A8; // type:object size: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_4B8 = .rodata:0x000004B8; // type:object size:0x8 scope:local data:double +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:0xC scope:local data:4byte +lbl_1_rodata_4EC = .rodata:0x000004EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4F0 = .rodata:0x000004F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4F4 = .rodata:0x000004F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4F8 = .rodata:0x000004F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4FC = .rodata:0x000004FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_500 = .rodata:0x00000500; // type:object size:0x4 scope:local data:float +lbl_1_rodata_504 = .rodata:0x00000504; // type:object size:0x4 scope:local data:float +lbl_1_rodata_508 = .rodata:0x00000508; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50C = .rodata:0x0000050C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_510 = .rodata:0x00000510; // type:object size:0x4 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:0x8 scope:local data:double +lbl_1_rodata_520 = .rodata:0x00000520; // type:object size:0x4 scope:local data:float +lbl_1_rodata_524 = .rodata:0x00000524; // type:object size:0x4 scope:local data:float +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_data_0 = .data:0x00000000; // type:object size:0x280 scope:local lbl_1_data_280 = .data:0x00000280; // type:object size:0x2 data:2byte lbl_1_data_282 = .data:0x00000282; // type:object size:0x2 data:2byte @@ -393,7 +393,7 @@ lbl_1_data_480 = .data:0x00000480; // type:object size:0x10 lbl_1_data_490 = .data:0x00000490; // type:object size:0x20 lbl_1_data_4B0 = .data:0x000004B0; // type:object size:0x20 lbl_1_data_4D0 = .data:0x000004D0; // type:object size:0x40 -lbl_1_data_510 = .data:0x00000510; // type:object size:0x14 data:string +lbl_1_data_510 = .data:0x00000510; // type:object size:0x14 scope:local data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x8 data:2byte diff --git a/configure.py b/configure.py index a34c2ad8..fd82e277 100644 --- a/configure.py +++ b/configure.py @@ -1489,7 +1489,7 @@ config.libs = [ Object(NonMatching, "REL/w02Dll/mg_coin.c"), Object(NonMatching, "REL/w02Dll/mg_item.c"), Object(NonMatching, "REL/w02Dll/shuffleboard.c"), - Object(NonMatching, "REL/w02Dll/roulette.c"), + Object(Matching, "REL/w02Dll/roulette.c"), }, ), Rel( diff --git a/include/REL/w02Dll.h b/include/REL/w02Dll.h index 52567979..4a09e43f 100644 --- a/include/REL/w02Dll.h +++ b/include/REL/w02Dll.h @@ -80,6 +80,6 @@ extern void fn_1_BC1C(); extern s32 fn_1_BE88(); extern s32 fn_1_C108(s32); extern void fn_1_CD04(s32); -extern void fn_1_E41C(); +void fn_1_E41C(void); #endif //W02DLL \ No newline at end of file diff --git a/src/REL/w02Dll/roulette.c b/src/REL/w02Dll/roulette.c index eb273ffc..dda61fc4 100644 --- a/src/REL/w02Dll/roulette.c +++ b/src/REL/w02Dll/roulette.c @@ -1,80 +1,30 @@ #include "REL/w02Dll.h" #include "game/audio.h" +#include "game/frand.h" +#include "game/chrman.h" +#include "game/pad.h" -#define ROULETTE_CHOICE_YES 0 -#define ROULETTE_CHOICE_NO 1 -#define ROULETTE_CHOICE_MAP 2 - -#define BRIBE_CHOICE_20 0 -#define BRIBE_CHOICE_10 1 -#define BRIBE_CHOICE_5 2 -#define BRIBE_CHOICE_NVM 3 -#define BRIBE_CHOICE_INVALID -1 +#include "ext_math.h" -/* RODATA */ -extern f32 lbl_1_rodata_408; -extern f32 lbl_1_rodata_40C; -extern f32 lbl_1_rodata_410; -extern f32 lbl_1_rodata_414; -extern f32 lbl_1_rodata_418; -extern f32 lbl_1_rodata_41C; -extern f32 lbl_1_rodata_420; -extern f32 lbl_1_rodata_424; -extern f32 lbl_1_rodata_428; -extern f32 lbl_1_rodata_42C; -extern f32 lbl_1_rodata_430; -extern f32 lbl_1_rodata_434; -extern f32 lbl_1_rodata_438; -extern f32 lbl_1_rodata_43C; -extern f32 lbl_1_rodata_440; -extern f32 lbl_1_rodata_444; -extern f32 lbl_1_rodata_448; -extern f64 lbl_1_rodata_450; -extern f64 lbl_1_rodata_458; -extern f32 lbl_1_rodata_460; -extern f32 lbl_1_rodata_464; -extern f32 lbl_1_rodata_468; -extern f32 lbl_1_rodata_46C; -extern f32 lbl_1_rodata_470; -extern f32 lbl_1_rodata_474; -extern f32 lbl_1_rodata_478; -extern f32 lbl_1_rodata_47C; -extern f64 lbl_1_rodata_480; -extern f64 lbl_1_rodata_488; -extern f32 lbl_1_rodata_490; -extern f32 lbl_1_rodata_494; -extern f64 lbl_1_rodata_498; -extern f64 lbl_1_rodata_4A0; -extern f32 lbl_1_rodata_4A8; -extern f32 lbl_1_rodata_4AC; -extern f32 lbl_1_rodata_4B0; -extern f32 lbl_1_rodata_4B8; -extern f32 lbl_1_rodata_4C0; -extern f32 lbl_1_rodata_4C4; -extern f32 lbl_1_rodata_4C8; -extern f32 lbl_1_rodata_4CC; -extern f64 lbl_1_rodata_4D0; -extern f32 lbl_1_rodata_4D8; -extern f32 lbl_1_rodata_4DC; /* DATA */ -extern s32 lbl_1_data_4D0[]; +s32 lbl_1_data_4D0[] = { + -1, 2, 2, 2, + -1, 1, 1, 1, + -1, 0, 0, 0, + -1, 3, 3, 3 +}; -/* BSS */ -extern s32 lbl_1_bss_38C; -extern s16 lbl_1_bss_388; -extern s32 lbl_1_bss_384; -extern f32 lbl_1_bss_380; - -//Function Externs -extern s16 BoardBowserSuitModelGet(); -extern s16 BoardBowserSuitPlayerModelGet(); -extern void BoardComKeySetDown(); -extern void BoardComKeySetUp(); -extern void omVibrate(s16 player, s16 duration, s16 off, s16 on); -extern u32 frand(); +Process *lbl_1_bss_38C; +s16 lbl_1_bss_388; +s32 lbl_1_bss_384; +float lbl_1_bss_380; //Local Functions +void fn_1_D3AC(void); +s32 fn_1_D8C4(void); +void fn_1_DF48(void); + s32 fn_1_E2AC(void); void fn_1_E310(f32); @@ -90,13 +40,13 @@ void fn_1_BC1C(void) { Point3d sp8; BoardModelPosGet(lbl_1_bss_30[15], &sp8); - sp8.z -= lbl_1_rodata_408; - sp8.y += lbl_1_rodata_40C; + sp8.z -= 90.0f; + sp8.y += 50.0f; BoardModelPosSetV(lbl_1_bss_30[6], &sp8); BoardModelAttrSet(lbl_1_bss_30[5], 0x40000002); - BoardModelMotionTimeSet(lbl_1_bss_30[5], lbl_1_rodata_410); + BoardModelMotionTimeSet(lbl_1_bss_30[5], 0.0f); BoardModelRotGet(lbl_1_bss_30[15], &sp8); - sp8.y = lbl_1_rodata_410; + sp8.y = 0.0f; BoardModelRotSetV(lbl_1_bss_30[15], &sp8); } @@ -111,14 +61,14 @@ void fn_1_BCFC(void) { while (GWPlayer[lbl_1_bss_388].moving) { HuPrcVSleep(); } - BoardRotateDiceNumbers((s32) lbl_1_bss_388); + BoardPlayerIdleSet(lbl_1_bss_388); BoardCameraViewSet(2); BoardCameraMotionWait(); BoardPlayerMotBlendSet((s32) lbl_1_bss_388, 0x5A, 0xF); while (BoardPlayerMotBlendCheck((s32) lbl_1_bss_388) == 0) { HuPrcVSleep(); } - BoardModelRotYSet(lbl_1_bss_30[15], lbl_1_rodata_414); + BoardModelRotYSet(lbl_1_bss_30[15], -90.0f); fn_1_121C(0x130000); HuAudFXPlay(0x44); temp_r29 = fn_1_BE88(); @@ -160,7 +110,7 @@ s32 fn_1_BE88(void) { BoardWinCreateChoice(2, 0x13001DU, 4, 0); /* COM has 50% to bribe goomba */ if (GWPlayer[lbl_1_bss_388].com) { - if (frand() & 1) { + if (frandBool()) { BoardComKeySetRight(); } else { BoardComKeySetLeft(); @@ -170,7 +120,7 @@ s32 fn_1_BE88(void) { BoardWinKill(); rouletteChoice = BoardWinChoiceGet(); // If chose to play roulette - if (rouletteChoice == ROULETTE_CHOICE_YES) { + if (rouletteChoice == 0) { BoardWinCreateChoice(1, 0x130003U, 4, 0); playerCoinRegion = 3; if (coinAmount < 0x14) { @@ -186,7 +136,7 @@ s32 fn_1_BE88(void) { if (GWPlayer[lbl_1_bss_388].com) { if (playerCoinRegion < 2) { BoardComKeySetUp(); - } else if (frand() & 1) { + } else if (frandBool()) { BoardComKeySetUp(); } else { BoardComKeySetDown(); @@ -195,24 +145,24 @@ s32 fn_1_BE88(void) { BoardWinWait(); BoardWinKill(); bribeChoice = BoardWinChoiceGet(); - if (bribeChoice == BRIBE_CHOICE_INVALID || - bribeChoice == BRIBE_CHOICE_NVM) { + if (bribeChoice == -1 || + bribeChoice == 3) { continue; } // Coin amount is now the bribe amount in coins switch (bribeChoice) { - case BRIBE_CHOICE_20: + case 0: mesg = 0x130004; coinAmount = 0x14; var_r30 = 0x5A; // 90% break; - case BRIBE_CHOICE_10: + case 1: mesg = 0x130005; coinAmount = 0xA; var_r30 = 0x3C; // 60% break; - case BRIBE_CHOICE_5: + case 2: mesg = 0x130006; coinAmount = 5; var_r30 = 0x1E; // 30% @@ -228,22 +178,21 @@ s32 fn_1_BE88(void) { } HuAudFXPlay(0xF); // If chose to view map - } else if (rouletteChoice == ROULETTE_CHOICE_MAP) { + } else if (rouletteChoice == 2) { BoardViewMapExec(lbl_1_bss_388); } - } while (rouletteChoice == ROULETTE_CHOICE_MAP); // While viewing map + } while (rouletteChoice == 2); // While viewing map if (var_r30 == -1) { fn_1_121C(0x130007); } return var_r30; } -// https://decomp.me/scratch/rctvo s32 fn_1_C108(s32 arg0) { Vec sp34; Vec sp28; Vec sp1C; - UnkPoint spC; + Vec sp10; f32 var_f27; @@ -273,7 +222,7 @@ s32 fn_1_C108(s32 arg0) { var_r29 = frandmod(0x10U); var_r27 = frandmod(4U); } - BoardModelPosGet(lbl_1_bss_30[4], &spC.point); + BoardModelPosGet(lbl_1_bss_30[4], &sp10); BoardCameraViewSet(1); BoardCameraMotionWait(); var_r26 = BoardSpaceFlagSearch(0, 0x800U); @@ -282,32 +231,32 @@ s32 fn_1_C108(s32 arg0) { BoardModelRotGet(lbl_1_bss_30[15], &sp34); for (i = 0; i < 0xF; i++) { - sp34.y -= lbl_1_rodata_418; + sp34.y -= 6.0f; BoardModelRotSetV(lbl_1_bss_30[15], &sp34); HuPrcVSleep(); } - sp34.y = lbl_1_rodata_41C; + sp34.y = 180.0f; BoardModelRotSetV(lbl_1_bss_30[15], &sp34); BoardCameraMotionWait(); lbl_1_bss_384 = HuAudFXPlay(0x41D); var_r28 = -0x1FFF; - var_f29 = lbl_1_rodata_410; + var_f29 = 0.0f; for (i = 0; i < 0x3C; i++) { - var_f29 -= lbl_1_rodata_420; + var_f29 -= 0.375f; fn_1_E310(var_f29); - var_r28 = (s16) ((f32) (s16) var_r28 + lbl_1_rodata_424); + var_r28 += 136.51666f; HuAudFXPitchSet(lbl_1_bss_384, var_r28); HuPrcVSleep(); } - var_f29 = lbl_1_rodata_428; + var_f29 = -22.5f; HuAudFXPitchSet(lbl_1_bss_384, 0); BoardModelMotionStart(lbl_1_bss_30[15], 2, 0x40000001); BoardModelPosGet(lbl_1_bss_30[15], &sp34); for (i = 0; i < 0x1E; i++) { - sp34.z += lbl_1_rodata_42C; + sp34.z += 2.1f; BoardModelPosSetV(lbl_1_bss_30[15], &sp34); fn_1_E310(var_f29); HuPrcVSleep(); @@ -319,69 +268,57 @@ s32 fn_1_C108(s32 arg0) { var_r29 -= 1; } BoardModelMotionStart(lbl_1_bss_30[15], 3, 0x40000001); - BoardModelMotionSpeedSet(lbl_1_bss_30[15], lbl_1_rodata_430); + BoardModelMotionSpeedSet(lbl_1_bss_30[15], 4.0f); for (i = 0; i < 0xA; i++) { - sp34.z -= lbl_1_rodata_434; + sp34.z -= 6.2999997f; BoardModelPosSetV(lbl_1_bss_30[15], &sp34); fn_1_E310(var_f29); HuPrcVSleep(); } BoardModelMotionStart(lbl_1_bss_30[15], 1, 0x40000001); - BoardModelMotionSpeedSet(lbl_1_bss_30[15], lbl_1_rodata_438); + BoardModelMotionSpeedSet(lbl_1_bss_30[15], 1.0f); HuAudFXPlay(0x41F); HuAudFXPlay(0x42D); omVibrate(lbl_1_bss_388, 0xC, 6, 6); - var_f31 = lbl_1_rodata_410; - var_f27 = lbl_1_rodata_43C; - sp1C.x = lbl_1_rodata_410; - sp1C.z = lbl_1_rodata_440; + var_f31 = 0.0f; + var_f27 = 16.0f; + sp1C.x = 0.0f; + sp1C.z = -50.0f; // Roulette motion and ball ? while(TRUE) { - sp1C.y = var_f27 - (lbl_1_rodata_444 * (lbl_1_rodata_448 * (var_f31 * var_f31))); - var_f31 += lbl_1_rodata_438; + sp1C.y = var_f27 - (0.55833334f * (0.25f * (var_f31 * var_f31))); + var_f31 += 1.0f; BoardModelPosGet(lbl_1_bss_30[6], &sp28); PSVECAdd(&sp28, &sp1C, &sp28); - var_f28 = (sp28.x - spC.point.x) * (sp28.x - spC.point.x) + ((sp28.z - spC.point.z) * (sp28.z - spC.point.z)); - if (var_f28 > lbl_1_rodata_410) { - var_f30 = __frsqrte(var_f28); - var_f30 = lbl_1_rodata_450 * var_f30 * (lbl_1_rodata_458 - ((f64) var_f28 * (var_f30 * var_f30))); - var_f30 = lbl_1_rodata_450 * var_f30 * (lbl_1_rodata_458 - ((f64) var_f28 * (var_f30 * var_f30))); - var_f30 = (lbl_1_rodata_450 * var_f30 * (lbl_1_rodata_458 - (var_f28 * (var_f30 * var_f30)))); - spC.unk00 = (var_f28 * var_f30); - var_f26 = spC.unk00; - } else { - var_f26 = var_f28; - } - - var_f25 = var_f26; - if (var_f25 >= lbl_1_rodata_460) { - if (sp28.y <= (lbl_1_rodata_464 + spC.point.y)) { - PSVECSubtract(&sp28, &spC.point, (Vec* ) &sp1C); + var_f25 = VECDistanceXZ(&sp28, &sp10); + if (var_f25 >= 430.0f) { + if (sp28.y <= (55.0f + sp10.y)) { + PSVECSubtract(&sp28, &sp10, (Vec* ) &sp1C); PSVECNormalize((Vec* ) &sp1C, (Vec* ) &sp1C); - sp1C.y = lbl_1_rodata_410; - PSVECScale((Vec* ) &sp1C, (Vec* ) &sp1C, lbl_1_rodata_468); - PSVECAdd((Vec* ) &sp1C, &spC.point, (Vec* ) &sp1C); + sp1C.y = 0.0f; + PSVECScale((Vec* ) &sp1C, (Vec* ) &sp1C, 429.0f); + PSVECAdd((Vec* ) &sp1C, &sp10, (Vec* ) &sp1C); sp28.x = sp1C.x; sp28.z = sp1C.z; - sp1C.x = lbl_1_rodata_46C; - sp1C.z = lbl_1_rodata_470; + sp1C.x = -5.0f; + sp1C.z = 10.0f; } } - if (sp28.y < spC.point.y) { - sp28.y = spC.point.y; + if (sp28.y < sp10.y) { + sp28.y = sp10.y; if (var_r27 >= 3) { break; } - //var_f31 = (lbl_1_rodata_474 * (lbl_1_rodata_418 * (s32) (u8) frand())); - var_f27 = lbl_1_rodata_418 + (lbl_1_rodata_474 * (lbl_1_rodata_418 * (s32) (u8) frand())); - var_f31 = lbl_1_rodata_438; + //var_f31 = ((1.0f/255.0f) * (6.0f * frand8())); + var_f27 = 6.0f + ((1.0f/255.0f) * (6.0f * frand8())); + var_f31 = 1.0f; var_r27 += 1; - //var_f31 = (lbl_1_rodata_474 * (lbl_1_rodata_47C * (s32) (u8) frand())); - sp1C.x = lbl_1_rodata_478 + (lbl_1_rodata_474 * (lbl_1_rodata_47C * (s32) (u8) frand())); - sp1C.z = lbl_1_rodata_478 + (lbl_1_rodata_474 * (lbl_1_rodata_47C * (s32) (u8) frand())); + //var_f31 = ((1.0f/255.0f) * (5.0f * frand8())); + sp1C.x = 15.0f + ((1.0f/255.0f) * (5.0f * frand8())); + sp1C.z = 15.0f + ((1.0f/255.0f) * (5.0f * frand8())); HuAudFXPlay(0x41E); } @@ -391,58 +328,58 @@ s32 fn_1_C108(s32 arg0) { } HuAudFXPlay(0x41E); - PSVECSubtract(&sp28, &spC.point, (Vec* ) &sp1C); + PSVECSubtract(&sp28, &sp10, (Vec* ) &sp1C); PSVECNormalize((Vec* ) &sp1C, (Vec* ) &sp1C); - var_f31 = (f32) (lbl_1_rodata_480 * (atan2((f64) -sp1C.z, (f64) sp1C.x) / lbl_1_rodata_488)); + var_f31 = atan2d(-sp1C.z, sp1C.x); BoardModelRotGet(lbl_1_bss_30[4], &sp34); var_f31 = var_f31 - sp34.y; - if (var_f31 < lbl_1_rodata_410) { - var_f31 += lbl_1_rodata_490; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; } - var_r30 = (s32) (var_f31 / lbl_1_rodata_494); - if (fmod(var_f31, lbl_1_rodata_498) > lbl_1_rodata_4A0) { + var_r30 = (s32) (var_f31 / 22.5f); + if (fmod(var_f31, 22.5) > 11.25) { var_r30 += 1; } if (var_r30 >= 0x10) { var_r30 -= 0x10; } - sp1C.y = lbl_1_rodata_410; + sp1C.y = 0.0f; while(TRUE) { fn_1_E310(var_f29); BoardModelRotGet(lbl_1_bss_30[4], &sp34); - var_f31 = (lbl_1_rodata_494 * var_r30) + sp34.y; // TODO: Update rodata for asm change - sp1C.x= cos((lbl_1_rodata_488 * var_f31) / lbl_1_rodata_480); - sp1C.z = -sin((lbl_1_rodata_488 * var_f31) / lbl_1_rodata_480); - PSVECScale(&sp1C, &sp1C, lbl_1_rodata_468); - PSVECAdd(&sp1C, &spC.point, &sp1C); + var_f31 = (22.5f * var_r30) + sp34.y; // TODO: Update rodata for asm change + sp1C.x = cosd(var_f31); + sp1C.z = -sind(var_f31); + PSVECScale(&sp1C, &sp1C, 429.0f); + PSVECAdd(&sp1C, &sp10, &sp1C); sp28.x = sp1C.x; sp28.z = sp1C.z; BoardModelPosSetV(lbl_1_bss_30[6], &sp28); - if (sp34.y >= lbl_1_rodata_4A8 && - sp34.y < lbl_1_rodata_4AC) { + if (sp34.y >= 292.5f && + sp34.y < 315.0f) { break; } HuPrcVSleep(); } for (i = 0; i < 0x3C; i++) { - var_f29 += lbl_1_rodata_420; + var_f29 += 0.375f; fn_1_E310(var_f29); BoardModelRotGet(lbl_1_bss_30[4], &sp34); - var_f31 = (lbl_1_rodata_494 * (f32) var_r30) + sp34.y; // TODO: Update rodata for asm change - sp1C.x = (f32) cos((lbl_1_rodata_488 * (f64) var_f31) / lbl_1_rodata_480); - sp1C.z = (f32) -sin((lbl_1_rodata_488 * (f64) var_f31) / lbl_1_rodata_480); - PSVECScale(&sp1C, &sp1C, lbl_1_rodata_468); - PSVECAdd((Vec* ) &sp1C, &spC.point, (Vec* ) &sp1C); + var_f31 = (22.5f * (f32) var_r30) + sp34.y; + sp1C.x = cosd(var_f31); + sp1C.z = -sind(var_f31); + PSVECScale(&sp1C, &sp1C, 429.0f); + PSVECAdd((Vec* ) &sp1C, &sp10, (Vec* ) &sp1C); sp28.x = sp1C.x; sp28.z = sp1C.z; BoardModelPosSetV(lbl_1_bss_30[6], (Vec* ) &sp28); - var_r28 = var_r28 + lbl_1_rodata_4B0; // TODO: Weird extra rodata + var_r28 += -136.51666f; HuAudFXPitchSet(lbl_1_bss_384, var_r28); HuPrcVSleep(); } - BoardModelRotYSet(lbl_1_bss_30[4], lbl_1_rodata_410); + BoardModelRotYSet(lbl_1_bss_30[4], 0.0f); HuAudFXStop(lbl_1_bss_384); return lbl_1_data_4D0[var_r30]; } @@ -482,25 +419,25 @@ void fn_1_CD04(s32 arg0) { BoardModelAttrReset(lbl_1_bss_30[5], 0x40000002); HuAudFXPlay(0x420); if (BoardPlayerSizeGet(lbl_1_bss_388) == 2) { - while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_4C0) { + while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < 25.0f) { HuPrcVSleep(); } BoardPlayerScaleGet(lbl_1_bss_388, &spC); - while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_4C4) { - spC.x -= lbl_1_rodata_448; - spC.y -= lbl_1_rodata_448; + while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < 30.0f) { + spC.x -= 0.25f; + spC.y -= 0.25f; //temp_f1 = spC.z; - spC.z = spC.z - lbl_1_rodata_448; + spC.z = spC.z - 0.25f; BoardPlayerScaleSetV(lbl_1_bss_388, &spC); HuPrcVSleep(); } - spC.x = spC.y = spC.z = lbl_1_rodata_4C8; + spC.x = spC.y = spC.z = 1.25f; BoardPlayerScaleSetV(lbl_1_bss_388, &spC); } - while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_4C4) { + while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < 30.0f) { HuPrcVSleep(); } if (GWPlayer[lbl_1_bss_388].bowser_suit) { @@ -512,18 +449,18 @@ void fn_1_CD04(s32 arg0) { HuAudFXPlay(0x421); omVibrate(lbl_1_bss_388, 0xC, 4, 2); - while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_4CC) { + while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < 60.0f) { HuPrcVSleep(); } BoardModelPosGet(lbl_1_bss_30[5], &sp18); - temp_f30 = (f32) ((lbl_1_rodata_480 * (atan2(sp24.x - sp18.x, sp24.z - sp18.z) / lbl_1_rodata_488)) / lbl_1_rodata_4D0); + temp_f30 = atan2d(sp24.x - sp18.x, sp24.z - sp18.z)/30; - while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_408) { + while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < 90.0f) { BoardModelRotYSet(lbl_1_bss_30[5], temp_f30 + BoardModelRotYGet(lbl_1_bss_30[5])); HuPrcVSleep(); } - BoardModelRotYSet(lbl_1_bss_30[5], (f32) (lbl_1_rodata_480 * (atan2(sp24.x - sp18.x, sp24.z - sp18.z) / lbl_1_rodata_488))); + BoardModelRotYSet(lbl_1_bss_30[5], atan2d(sp24.x - sp18.x, sp24.z - sp18.z)); omVibrate(lbl_1_bss_388, 0xC, 4, 2); if (GWPlayer[lbl_1_bss_388].bowser_suit) { @@ -544,15 +481,15 @@ void fn_1_CD04(s32 arg0) { if (var_r30 != (s32) temp_r31->link_cnt) { BoardSpacePosGet(0, temp_r31->link[var_r30], &sp18); - BoardPlayerRotYSet(lbl_1_bss_388, (f32) (lbl_1_rodata_480 * (atan2(sp18.x - sp24.x, sp18.z - sp24.z) / lbl_1_rodata_488))); + BoardPlayerRotYSet(lbl_1_bss_388, atan2d(sp18.x - sp24.x, sp18.z - sp24.z)); } if (BoardPlayerSizeGet(lbl_1_bss_388) == 2) { var_f31 = spC.x; - while (var_f31 < lbl_1_rodata_4DC) { - var_f31 += lbl_1_rodata_4D8; - if (var_f31 > lbl_1_rodata_4DC) { - var_f31 = lbl_1_rodata_4DC; + while (var_f31 < 2.5f) { + var_f31 += 0.104166664f; + if (var_f31 > 2.5f) { + var_f31 = 2.5f; } spC.z = var_f31; spC.y = var_f31; @@ -565,20 +502,313 @@ void fn_1_CD04(s32 arg0) { while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < BoardModelMotionMaxTimeGet(lbl_1_bss_30[5])) { HuPrcVSleep(); } - HuPrcCreate(&fn_1_DF48, 0x2004, 0x1000, 0); + HuPrcCreate(fn_1_DF48, 0x2004, 0x1000, 0); +} + +void fn_1_D3AC(void) +{ + float temp_f31; + float temp_f30; + s32 temp_r31; + s32 temp_r30; + s16 sp38[20]; + Vec sp2C; + Vec sp20; + Vec sp14; + float sp8[3] = { 1.0f, 0.3f, 2.5f }; + fn_1_121C(0x130008); + BoardStatusShowSetAll(1); + BoardPlayerMotBlendSet(lbl_1_bss_388, 0, 15); + BoardPlayerPosGet(lbl_1_bss_388, &sp14); + for(temp_r31=0; temp_r31<20; temp_r31++) { + sp38[temp_r31] = BoardModelCreate(0x7000A, NULL, 1); + sp2C.x = (sp14.x-25.0f)+((1.0f/255.0f)*(frand8()*50.0f)); + sp2C.y = (sp14.y+1200.0f)+(temp_r31*130.0f)+((1.0f/255.0f)*(frand8()*60.0f)); + sp2C.z = (sp14.z-25.0f)+((1.0f/255.0f)*(frand8()*50.0f)); + BoardModelPosSetV(sp38[temp_r31], &sp2C); + sp20.x = sp20.z = 0; + sp20.y = (1.0f/255.0f)*(frand8()*360.0f); + BoardModelRotSetV(sp38[temp_r31], &sp20); + } + temp_f31 = -4; + temp_r30 = 0; + temp_f30 = sp8[BoardPlayerSizeGet(lbl_1_bss_388)]; + while(1) { + for(temp_r31=0; temp_r31<20; temp_r31++) { + if(temp_r31 < temp_r30) { + continue; + } + BoardModelPosGet(sp38[temp_r31], &sp2C); + BoardModelRotGet(sp38[temp_r31], &sp20); + sp2C.y += temp_f31; + sp20.y += 45.0f; + BoardModelPosSetV(sp38[temp_r31], &sp2C); + BoardModelRotSetV(sp38[temp_r31], &sp20); + if(sp2C.y <= sp14.y+(180.0f*temp_f30)) { + CharModelCoinEffectCreate(1, &sp2C); + BoardModelVisibilitySet(sp38[temp_r31], 0); + temp_r30++; + BoardPlayerCoinsAdd(lbl_1_bss_388, 1); + HuAudFXPlay(7); + omVibrate(lbl_1_bss_388, 12, 6, 6); + + } + } + temp_f31 *= 1.05f; + if(temp_f31 < -40.0f) { + temp_f31 = -40.0f; + } + if(temp_r30 == 20) { + BoardPlayerMotionShiftSet(lbl_1_bss_388, 7, 0, 10, 0); + break; + } + HuPrcVSleep(); + } + while(!BoardPlayerMotionEndCheck(lbl_1_bss_388)) { + HuPrcVSleep(); + } + for(temp_r31=0; temp_r31<20; temp_r31++) { + BoardModelKill(sp38[temp_r31]); + } + HuPrcSleep(60); + BoardPlayerMotBlendSet(lbl_1_bss_388, 180, 15); + BoardStatusShowSetAll(0); + while(!BoardPlayerMotBlendCheck(lbl_1_bss_388)) { + HuPrcVSleep(); + } +} + +s32 fn_1_D8C4(void) +{ + Vec sp40; + Vec sp34; + Vec sp28; + Vec sp1C; + s16 sp14[4]; + float spC[2]; + s32 sp8; + + float temp_f31; + float temp_f30; + + s32 temp_r31; + s16 temp_r30; + BoardSpace *temp_r29; + s32 temp_r28; + s16 temp_r27; + s16 temp_r26; + s32 temp_r25; + s16 temp_r24; + s16 temp_r23; + s16 temp_r22; + + u32 temp_r21; + fn_1_121C(0x130009); + temp_r29 = BoardSpaceGet(0, BoardSpaceFlagSearch(0, 0x800)); + BoardModelPosGet(lbl_1_bss_30[3], &sp40); + for(temp_r31=0; temp_r31<4; temp_r31++) { + sp14[temp_r31] = BoardModelCreate(0x70000, NULL, 1); + BoardModelLayerSet(sp14[temp_r31], 2); + for(temp_r28=0; temp_r28link_cnt; temp_r28++) { + temp_r21 = (BoardSpaceFlagGet(0, temp_r29->link[temp_r28]) & 0xE) >> 1; + if(temp_r21 == temp_r31+2) { + break; + } + } + sp8 = BoardSpacePosGet(0, temp_r29->link[temp_r28], &sp28); + VECSubtract(&sp28, &sp40, &sp34); + BoardModelRotYSet(sp14[temp_r31], atan2d(sp34.x, sp34.z)); + VECNormalize(&sp34, &sp34); + VECScale(&sp34, &sp34, 400); + VECAdd(&sp34, &sp40, &sp34); + sp34.y += 300.0f; + BoardModelPosSetV(sp14[temp_r31], &sp34); + sp1C.x = sp1C.y = sp1C.z = 3; + BoardModelScaleSetV(sp14[temp_r31], &sp1C); + } + temp_r25 = fn_1_E2AC(); + HuWinMesMaxSizeGet(1, spC, 0x13001E); + temp_r30 = HuWinCreate(-10000, 356, spC[0], spC[1], 0); + HuWinMesSet(temp_r30, 0x13001E); + HuWinBGTPLvlSet(temp_r30, 0); + HuWinMesSpeedSet(temp_r30, 0); + temp_r23 = GWPlayer[lbl_1_bss_388].port; + temp_f30 = 0; + temp_r22 = frandmod(20)+20; + restart: + while(1) { + if(GWPlayer[lbl_1_bss_388].com) { + temp_r27 = 0; + temp_r26 = 0; + if(temp_r22) { + temp_r22--; + temp_r24 = 0; + } else { + temp_r24 = PAD_BUTTON_A; + } + break; + } + temp_r24 = HuPadBtnDown[temp_r23]; + temp_r27 = HuPadStkX[temp_r23]; + temp_r26 = HuPadStkY[temp_r23]; + if(!(temp_r24 & PAD_TRIGGER_Z)) { + break; + } + HuAudFXPlay(1); + for(temp_r31=0; temp_r31<4; temp_r31++) { + BoardModelVisibilitySet(sp14[temp_r31], 0); + } + HuWinDispOff(temp_r30); + BoardViewMapExec(lbl_1_bss_388); + HuWinDispOn(temp_r30); + for(temp_r31=0; temp_r31<4; temp_r31++) { + BoardModelVisibilitySet(sp14[temp_r31], 1); + } + } + if(!(temp_r24 & PAD_BUTTON_A)) { + if(abs(temp_r27) < 10) { + temp_r27 = 0; + } + if(abs(temp_r26) < 10) { + temp_r26 = 0; + } + if(temp_r27 != 0 || temp_r26 != 0) { + temp_f31 = atan2d(-temp_r27, -temp_r26); + if(temp_f31 < 0.0f) { + temp_f31 += 360.0f; + } + temp_r31 = temp_f31/90.0f; + temp_f31 = fmod(temp_f31, 90.0); + if(temp_r31 != temp_r25 && temp_f31 >= 20.0f && temp_f31 <= 70.0f){ + temp_f30 = 0; + temp_r25 = temp_r31; + HuAudFXPlay(0); + } + + } + for(temp_r31=0; temp_r31<4; temp_r31++) { + if(temp_r31 == temp_r25) { + sp1C.x = sp1C.y = sp1C.z = sind(temp_f30)+3.0; + temp_f30 += 8.0f; + if(temp_f30 > 180.0f) { + temp_f30 -= 180.0f; + } + } else { + sp1C.x = sp1C.y = sp1C.z = 3.0f; + } + + + BoardModelScaleSetV(sp14[temp_r31], &sp1C); + } + HuPrcVSleep(); + goto restart; + } else { + HuAudFXPlay(2); + for(temp_r31=0; temp_r31<4; temp_r31++) { + BoardModelKill(sp14[temp_r31]); + } + HuWinKill(temp_r30); + return temp_r25; + } +} + +void fn_1_DF48(void) +{ + Vec sp14; + Vec sp8; + s32 temp_r31; + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + BoardModelMotionTimeSet(lbl_1_bss_30[5], 0); + BoardModelAttrSet(lbl_1_bss_30[5], 0x40000002); + temp_f31 = BoardModelRotYGet(lbl_1_bss_30[5]); + temp_f29 = -temp_f31/20.0f; + temp_f30 = BoardModelRotYGet(lbl_1_bss_30[15]); + temp_f28 = -temp_f30/20.0f; + BoardModelScaleGet(lbl_1_bss_30[6], &sp14); + for(temp_r31=0; temp_r31<10; temp_r31++) { + sp14.x = sp14.y = sp14.z = 1.0f-(temp_r31*0.1f); + if(sp14.x < 0.0f) { + sp14.x = sp14.y = sp14.z = 0.0f; + } + BoardModelScaleSetV(lbl_1_bss_30[6], &sp14); + temp_f31 += temp_f29; + BoardModelRotYSet(lbl_1_bss_30[5], temp_f31); + temp_f30 += temp_f28; + BoardModelRotYSet(lbl_1_bss_30[15], temp_f30); + HuPrcVSleep(); + } + BoardModelPosGet(lbl_1_bss_30[15], &sp8); + sp8.z -= 90.0f; + sp8.y += 50.0f; + BoardModelPosSetV(lbl_1_bss_30[6], &sp8); + for(temp_r31=0; temp_r31<10; temp_r31++) { + sp14.x = sp14.y = sp14.z = temp_r31*0.1f; + if(sp14.x > 1.0f) { + sp14.x = sp14.y = sp14.z = 1.0f; + } + BoardModelScaleSetV(lbl_1_bss_30[6], &sp14); + temp_f31 += temp_f29; + BoardModelRotYSet(lbl_1_bss_30[5], temp_f31); + temp_f30 += temp_f28; + BoardModelRotYSet(lbl_1_bss_30[15], temp_f30); + HuPrcVSleep(); + } + sp14.x = sp14.y = sp14.z = 1.0f; + BoardModelScaleSetV(lbl_1_bss_30[6], &sp14); + BoardModelRotYSet(lbl_1_bss_30[5], 0); + BoardModelRotYSet(lbl_1_bss_30[15], 0); + HuPrcEnd(); +} + +s32 fn_1_E2AC(void) +{ + switch(GWSystem.star_pos) { + case 0: + return 3; + + case 1: + case 2: + return 0; + + case 3: + case 4: + return 1; + + case 5: + case 6: + case 7: + return 2; + + default: + return -1; + } } /* Rotate (yaw) of model 4 */ void fn_1_E310(f32 degrees) { Point3d spC; lbl_1_bss_380 += degrees; - if (lbl_1_bss_380 >= lbl_1_rodata_490) { - lbl_1_bss_380 -= lbl_1_rodata_490; + if (lbl_1_bss_380 >= 360.0f) { + lbl_1_bss_380 -= 360.0f; } - if (lbl_1_bss_380 < lbl_1_rodata_410) { - lbl_1_bss_380 += lbl_1_rodata_490; + if (lbl_1_bss_380 < 0.0f) { + lbl_1_bss_380 += 360.0f; } BoardModelRotGet(lbl_1_bss_30[4], &spC); spC.y = lbl_1_bss_380; BoardModelRotSetV(lbl_1_bss_30[4], &spC); } + +void fn_1_E41C(void) +{ + lbl_1_bss_388 = GWSystem.player_curr; + OSReport("Roulette Player %d\n", lbl_1_bss_388); + lbl_1_bss_38C = HuPrcChildCreate(fn_1_BCFC, 8195, 8192, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_38C, (void *)fn_1_BE74); //fn_1_BE74 requires implicit return + while(lbl_1_bss_38C) { + HuPrcVSleep(); + } +} \ No newline at end of file From 4b631c2770fa36a2bf648508e3dc9074fab9d18e Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 10 Jun 2024 23:48:49 -0500 Subject: [PATCH 18/23] Decompile mg_coin.c Progress is 33.33% or 1/3rd --- config/GMPE01_00/rels/w02Dll/symbols.txt | 71 +-- configure.py | 2 +- src/REL/w02Dll/mg_coin.c | 683 +++++++++++++++++++++++ 3 files changed, 720 insertions(+), 36 deletions(-) create mode 100644 src/REL/w02Dll/mg_coin.c diff --git a/config/GMPE01_00/rels/w02Dll/symbols.txt b/config/GMPE01_00/rels/w02Dll/symbols.txt index bc6f7e5e..81c1bca4 100644 --- a/config/GMPE01_00/rels/w02Dll/symbols.txt +++ b/config/GMPE01_00/rels/w02Dll/symbols.txt @@ -165,39 +165,39 @@ lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data: 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:0x8 scope:local data:double -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -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:0x4 data:float -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 data:double -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 data:float -lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x8 data:double -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 data:double -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x8 data:double -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size: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:0x4 data:float -lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 data:float -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 data:float -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float -lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 data:float -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 data:float -lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 data:float +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +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:0x4 scope:local data:float +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size: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:0x4 scope:local data:float +lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 scope:local data:float +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:float +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 scope:local data:float +lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 scope:local data:float lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 data:byte lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 data:float lbl_1_rodata_224 = .rodata:0x00000224; // type:object size:0x4 data:float @@ -383,7 +383,7 @@ lbl_1_data_39C = .data:0x0000039C; // type:object size:0x24 lbl_1_data_3C0 = .data:0x000003C0; // type:object size:0x24 lbl_1_data_3E4 = .data:0x000003E4; // type:object size:0x20 lbl_1_data_404 = .data:0x00000404; // type:object size:0x20 -lbl_1_data_424 = .data:0x00000424; // type:object size:0x4 +lbl_1_data_424 = .data:0x00000424; // type:object size:0x4 scope:local lbl_1_data_428 = .data:0x00000428; // type:object size:0x38 lbl_1_data_460 = .data:0x00000460; // type:object size:0x5 data:string lbl_1_data_465 = .data:0x00000465; // type:object size:0x6 data:string @@ -408,7 +408,8 @@ lbl_1_bss_54 = .bss:0x00000054; // type:object size:0x4 data:4byte lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x4 data:4byte lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x28 data:2byte lbl_1_bss_84 = .bss:0x00000084; // type:object size:0x2 data:2byte -lbl_1_bss_86 = .bss:0x00000086; // type:object size:0xE data:2byte +lbl_1_bss_86 = .bss:0x00000086; // type:object size:0x2 data:2byte +lbl_1_bss_88 = .bss:0x00000088; // type:object size:0xC data:4byte lbl_1_bss_94 = .bss:0x00000094; // type:object size:0xC data:4byte lbl_1_bss_A0 = .bss:0x000000A0; // type:object size:0x2 data:2byte lbl_1_bss_A4 = .bss:0x000000A4; // type:object size:0x4 data:4byte diff --git a/configure.py b/configure.py index fd82e277..97b5852e 100644 --- a/configure.py +++ b/configure.py @@ -1486,7 +1486,7 @@ config.libs = [ Object(Matching, "REL/w02Dll/main.c"), Object(Matching, "REL/w02Dll/gendice.c"), Object(Matching, "REL/w02Dll/gamble.c"), - Object(NonMatching, "REL/w02Dll/mg_coin.c"), + Object(Matching, "REL/w02Dll/mg_coin.c"), Object(NonMatching, "REL/w02Dll/mg_item.c"), Object(NonMatching, "REL/w02Dll/shuffleboard.c"), Object(Matching, "REL/w02Dll/roulette.c"), diff --git a/src/REL/w02Dll/mg_coin.c b/src/REL/w02Dll/mg_coin.c new file mode 100644 index 00000000..d1cf3755 --- /dev/null +++ b/src/REL/w02Dll/mg_coin.c @@ -0,0 +1,683 @@ +#include "REL/w02Dll.h" +#include "game/audio.h" +#include "game/pad.h" +#include "game/objsub.h" +#include "game/frand.h" +#include "game/objsub.h" +#include "game/chrman.h" + +#include "ext_math.h" + +#include "game/minigame_seq.h" + +s16 lbl_1_bss_C2[3]; +s16 lbl_1_bss_BC[3]; +float lbl_1_bss_B0[3]; +omObjData *lbl_1_bss_AC; +omObjData *lbl_1_bss_A8; +omObjData *lbl_1_bss_A4; +u16 lbl_1_bss_A0; +Vec lbl_1_bss_94; +Vec lbl_1_bss_88; +s16 lbl_1_bss_86; +s16 lbl_1_bss_84; +s16 lbl_1_bss_5C[20]; +s32 lbl_1_bss_58; + +Vec lbl_1_data_378[3] = { + { -45, 155, 108 }, + { 0, 155, 108 }, + { 45, 155, 108 } +}; + +Vec lbl_1_data_39C[3] = { + { -45, 25, 200 }, + { 0, 25, 200 }, + { 45, 25, 200 } +}; + +s32 lbl_1_data_3C0[9] = { + 5, 10, 20, + 5, 10, 20, + 5, 10, 20 +}; + +s32 lbl_1_data_3E4[8] = { + 0x5F0008, + 0x1A0008, + 0x6D0008, + 0x8A0008, + 0x850008, + 0x110008, + 0x0D0008, + 0x810008 +}; + +s32 lbl_1_data_404[8] = { + 0x5F000A, + 0x1A000A, + 0x6D000A, + 0x8A000A, + 0x85000A, + 0x11000A, + 0x0D000A, + 0x81000A +}; + +void fn_1_51B4(Vec *arg0); + +void fn_1_39F4(void) +{ + Vec sp8; + s32 temp_r31; + BoardModelVisibilitySet(lbl_1_bss_30[7], 1); + BoardModelVisibilitySet(lbl_1_bss_30[8], 1); + BoardModelVisibilitySet(lbl_1_bss_30[9], 0); + BoardModelAttrSet(lbl_1_bss_30[8], 0x40000002); + BoardModelAttrSet(lbl_1_bss_30[9], 0x40000003); + BoardModelAttrSet(lbl_1_bss_30[7], 0x40000001); + BoardModelPosGet(lbl_1_bss_30[8], &lbl_1_bss_94); + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_C2[temp_r31] = BoardModelCreate(0x760013, NULL, 1); + lbl_1_bss_BC[temp_r31] = BoardModelCreate(0x760014, NULL, 1); + BoardModelAttrSet(lbl_1_bss_BC[temp_r31], 0x40000002); + lbl_1_bss_B0[temp_r31] = (s32)frandmod(9)*40.0f; + sp8.x = lbl_1_bss_B0[temp_r31]; + sp8.y = sp8.z = 0; + BoardModelRotSetV(lbl_1_bss_C2[temp_r31], &sp8); + } + BoardModelPosSetV(lbl_1_bss_30[7], &lbl_1_bss_94); + fn_1_51B4(&lbl_1_bss_94); +} + +void fn_1_3F0C(omObjData *object); +void fn_1_4050(omObjData *object); + +typedef struct work_mgcoin_player { + float unk0[3]; + float unkC[3]; + float unk18[3]; + s16 unk24[3]; +} WorkMGCoinPlayer; + +typedef struct work_mgcoin { + float unk0; + float unk4; + s16 unk8; + Vec unkC; + s16 unk18; + s16 unk1A; + s16 unk1C; + s16 unk1E; + s16 unk20; +} WorkMGCoin; + +void fn_1_3BF4(void) +{ + Vec sp8; + + s32 temp_r31; + WorkMGCoinPlayer *temp_r30; + lbl_1_bss_86 = GWSystem.player_curr; + lbl_1_bss_AC = omAddObjEx(boardObjMan, 257, 0, 0, -1, fn_1_3F0C); + lbl_1_bss_A4 = omAddObjEx(boardObjMan, 257, 0, 0, -1, fn_1_4050); + lbl_1_bss_A8 = omAddObjEx(boardObjMan, 257, 0, 2, -1, NULL); + lbl_1_bss_A8->motion[0] = BoardPlayerMotionCreate(lbl_1_bss_86, lbl_1_data_3E4[GWPlayer[lbl_1_bss_86].character]); + lbl_1_bss_A8->motion[1] = BoardPlayerMotionCreate(lbl_1_bss_86, lbl_1_data_404[GWPlayer[lbl_1_bss_86].character]); + lbl_1_bss_A4->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkMGCoinPlayer), MEMORY_DEFAULT_NUM); + temp_r30 = lbl_1_bss_A4->data; + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r30->unk0[temp_r31] = lbl_1_bss_B0[temp_r31]; + temp_r30->unkC[temp_r31] = 0; + temp_r30->unk18[temp_r31] = 0; + temp_r30->unk24[temp_r31] = 0; + } + lbl_1_bss_A8->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkMGCoin), MEMORY_DEFAULT_NUM); + BoardPlayerPosGet(lbl_1_bss_86, &sp8); + lbl_1_bss_A8->trans.x = sp8.x; + lbl_1_bss_A8->trans.y = sp8.y; + lbl_1_bss_A8->trans.z = sp8.z; + for(temp_r31=0; temp_r31<20; temp_r31++) { + lbl_1_bss_5C[temp_r31] = BoardModelCreate(0x7000A, NULL, 1); + BoardModelVisibilitySet(lbl_1_bss_5C[temp_r31], 0); + } + lbl_1_bss_A0 = 0; +} + +void fn_1_3F94(void); + +void fn_1_3F0C(omObjData *object) +{ + if(lbl_1_bss_A0 && BoardMGDoneFlagGet() == 1) { + fn_1_3F94(); + omDelObjEx(boardObjMan, object); + } +} + +void fn_1_3F64(void) +{ + lbl_1_bss_A0 = 1; + BoardMGExit(); +} + +void fn_1_3F94(void) +{ + s32 temp_r31; + BoardPlayerMotionKill(lbl_1_bss_86, lbl_1_bss_A8->motion[0]); + BoardPlayerMotionKill(lbl_1_bss_86, lbl_1_bss_A8->motion[1]); + omDelObjEx(boardObjMan, lbl_1_bss_A8); + for(temp_r31=0; temp_r31<20; temp_r31++) { + BoardModelKill(lbl_1_bss_5C[temp_r31]); + } + BoardMGDoneFlagSet(0); +} + +void fn_1_4100(omObjData *object); + +void fn_1_4050(omObjData *object) +{ + if(object->work[0] == 0) { + object->work[0] = MGSeqStartCreate(); + return; + } + if(MGSeqStatGet(object->work[0])) { + return; + } + object->func = fn_1_4100; + BoardModelMotionTimeSet(lbl_1_bss_30[8], 0); + BoardModelAttrReset(lbl_1_bss_30[8], 0x40000006); + HuAudFXPlay(1062); +} + +void fn_1_41B8(omObjData *object); + +void fn_1_4100(omObjData *object) +{ + if(BoardModelMotionTimeGet(lbl_1_bss_30[8]) >= BoardModelMotionMaxTimeGet(lbl_1_bss_30[8])) { + object->work[0] = 0; + object->work[1] = 0; + object->work[2] = 1; + object->work[3] = 0; + object->func = fn_1_41B8; + BoardModelAttrSet(lbl_1_bss_30[8], 0x40000004); + lbl_1_bss_58 = HuAudFXPlay(1063); + } +} + +void fn_1_4378(omObjData *object); +void fn_1_5290(omObjData *object); + +void fn_1_41B8(omObjData *object) +{ + Vec sp8; + WorkMGCoinPlayer *temp_r30; + s32 temp_r29; + s32 temp_r28; + u32 temp_r27; + temp_r30 = object->data; + if(object->work[1] == 0) { + object->work[0] |= object->work[2]; + object->work[1] = 12; + object->work[2] <<= 1; + } else { + object->work[1]--; + } + sp8.y = sp8.z = 0; + temp_r28 = 0; + for(temp_r29=0; temp_r29<3; temp_r29++) { + temp_r27 = 1 << temp_r29; + if(object->work[0] & temp_r27) { + temp_r30->unkC[temp_r29] += 0.25f; + if(temp_r30->unkC[temp_r29] > 5.0f) { + temp_r30->unkC[temp_r29] = 5.0f; + temp_r28++; + } + temp_r30->unk0[temp_r29] += temp_r30->unkC[temp_r29]; + if(temp_r30->unk0[temp_r29] >= 360.0f) { + temp_r30->unk0[temp_r29] -= 360.0f; + } + sp8.x = temp_r30->unk0[temp_r29]; + BoardModelRotSetV(lbl_1_bss_C2[temp_r29], &sp8); + } + } + if(temp_r28 == 3) { + object->func = fn_1_4378; + lbl_1_bss_A8->func = fn_1_5290; + } + +} + +void fn_1_4698(omObjData *object); + +void fn_1_46E8(void); + +void fn_1_4378(omObjData *object) +{ + Vec sp8; + float temp_f31; + WorkMGCoinPlayer *temp_r31; + s32 temp_r30; + s32 temp_r28; + Process *temp_r27; + temp_r31 = object->data; + sp8.y = sp8.z = 0; + for(temp_r30=0; temp_r30<3; temp_r30++) { + temp_r28 = 1<work[0] & temp_r28) { + if(object->work[3] & temp_r28) { + temp_r31->unk18[temp_r30] = 360; + temp_r31->unk24[temp_r30] = 1; + object->work[3] &= ~temp_r28; + } + if(temp_r31->unk24[temp_r30]) { + if(0.0f == temp_r31->unk18[temp_r30]) { + temp_f31 = fmod(temp_r31->unk0[temp_r30], 40.0); + if(temp_f31+temp_r31->unkC[temp_r30] >= 40.0f) { + temp_r31->unk0[temp_r30] += (temp_f31+temp_r31->unkC[temp_r30])-40.0f; + temp_f31 = 0; + } + if(0.0f == temp_f31) { + HuAudFXPlay(1067); + object->work[0] &= ~temp_r28; + temp_r31->unkC[temp_r30] = 0; + lbl_1_bss_A8->work[2] = 60; + if(temp_r30 != 2) { + lbl_1_bss_A8->func = fn_1_5290; + } else { + BoardAudSeqFadeOut(1, 100); + temp_r27 = HuPrcCreate(fn_1_46E8, 8196, 6144, 0); + temp_r27->user_data = object; + HuAudFXStop(lbl_1_bss_58); + object->func = fn_1_4698; + } + } + } else { + temp_r31->unk18[temp_r30] -= temp_r31->unkC[temp_r30]; + if(temp_r31->unk18[temp_r30] < 0.0f) { + temp_r31->unk18[temp_r30] = 0.0f; + } + } + } + temp_r31->unk0[temp_r30] += temp_r31->unkC[temp_r30]; + if(temp_r31->unk0[temp_r30] >= 360.0f) { + temp_r31->unk0[temp_r30] -= 360.0f; + } + } + sp8.x = temp_r31->unk0[temp_r30]; + BoardModelRotSetV(lbl_1_bss_C2[temp_r30], &sp8); + } +} + +void fn_1_4698(omObjData *object) +{ + if(msmMusGetStatus(1) == 0) { + BoardAudSeqPause(0, 0, 1000); + object->func = NULL; + } +} + +void fn_1_511C(omObjData *object); + +void fn_1_46E8(void) +{ + Vec sp21C[20]; + Vec sp12C[20]; + Vec sp3C[20]; + s32 sp30[3]; + Vec sp24; + Vec sp18; + Vec spC; + char sp8[4]; + float temp_f31; + s32 temp_r31; + s32 temp_r30; + s32 temp_r29; + s32 temp_r28; + omObjData *temp_r27; + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelRotGet(lbl_1_bss_C2[temp_r31], &sp24); + sp30[temp_r31] = lbl_1_data_3C0[(int)(sp24.x/40.0f)]; + } + if(sp30[0] == sp30[1] && sp30[0] == sp30[2]) { + lbl_1_bss_84 = sp30[0]; + } else { + lbl_1_bss_84 = 1; + } + if(lbl_1_bss_84 != 1) { + BoardModelVisibilitySet(lbl_1_bss_30[9], 1); + BoardModelAttrReset(lbl_1_bss_30[9], 0x40000002); + } + sprintf(sp8, "%d", lbl_1_bss_84); + BoardWinCreate(2, 0x130013, 4); + BoardWinInsertMesSet((u32)sp8, 0); + BoardWinWait(); + BoardWinKill(); + BoardCameraTargetModelSet(-1); + temp_r30 = 0; + temp_r29 = 45; + temp_f31 = 0; + sp18 = lbl_1_bss_94; + HuAudFXPlay(1065); + while(1) { + temp_r28 = 0; + if(temp_r29 == 0 && temp_r30 < lbl_1_bss_84) { + HuAudFXPlay(18); + BoardModelVisibilitySet(lbl_1_bss_5C[temp_r30], 1); + sp21C[temp_r30].x = -5.0f+((1.0f/255.0f)*(10.0f*frand8())); + sp21C[temp_r30].y = 212.5f; + sp21C[temp_r30].z = 130.0f; + VECAdd(&sp21C[temp_r30], &sp18, &sp21C[temp_r30]); + BoardModelPosSetV(lbl_1_bss_5C[temp_r30], &sp21C[temp_r30]); + sp12C[temp_r30].x = -1.0f+((1.0f/255.0f)*(2.0f*frand8())); + sp12C[temp_r30].y = 18.0f; + sp12C[temp_r30].z = 0.0f; + temp_r29 = frandmod(3)+5; + temp_r30++; + } else { + temp_r29--; + } + for(temp_r31=0; temp_r31= 500.0f) { + BoardModelVisibilitySet(lbl_1_bss_5C[temp_r31], 0); + temp_r28++; + } else { + VECAdd(&sp21C[temp_r31], &sp12C[temp_r31], &sp21C[temp_r31]); + } + BoardModelPosSetV(lbl_1_bss_5C[temp_r31], &sp21C[temp_r31]); + } + sp18.y += 0.8f*sind(temp_f31); + temp_f31 += 45.0f; + if(temp_f31 >= 360.0f) { + temp_f31 -= 360.0f; + } + fn_1_51B4(&sp18); + if(temp_r28 == lbl_1_bss_84) { + break; + } + HuPrcVSleep(); + } + fn_1_51B4(&lbl_1_bss_94); + BoardModelAttrSet(lbl_1_bss_30[9], 0x40000002); + BoardModelMotionTimeSet(lbl_1_bss_30[9], 0); + BoardModelVisibilitySet(lbl_1_bss_30[9], 0); + BoardPlayerPosGet(lbl_1_bss_86, &sp18); + for(temp_r31=0; temp_r31= 360.0f) { + sp3C[temp_r31].y -= 360.0f; + } + BoardModelRotSetV(lbl_1_bss_5C[temp_r31], &sp3C[temp_r31]); + if(sp21C[temp_r31].y <= 80.0f+sp18.y) { + spC = sp21C[temp_r31]; + CharModelCoinEffectCreate(1, &spC); + BoardModelVisibilitySet(lbl_1_bss_5C[temp_r31], 0); + temp_r30++; + BoardPlayerCoinsAdd(lbl_1_bss_86, 1); + HuAudFXPlay(7); + omVibrate(lbl_1_bss_86, 12, 6, 6); + } + } + temp_f31 *= 1.05f; + if(temp_f31 < -20.0f) { + temp_f31 = -20.0f; + } + if(temp_r30 == lbl_1_bss_84) { + BoardPlayerMotionShiftSet(lbl_1_bss_86, 7, 0, 10, 0); + break; + } + HuPrcVSleep(); + } + while(!BoardPlayerMotionEndCheck(lbl_1_bss_86)) { + HuPrcVSleep(); + } + fn_1_121C(0x130014); + temp_r27 = HuPrcCurrentGet()->user_data; + temp_r27->func = fn_1_511C; + HuPrcEnd(); +} + +void fn_1_511C(omObjData *object) +{ + Vec spC; + s32 temp_r31; + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelRotGet(lbl_1_bss_C2[temp_r31], &spC); + lbl_1_bss_B0[temp_r31] = spC.x; + } + fn_1_3F64(); + omDelObjEx(boardObjMan, object); +} + +void fn_1_51B4(Vec *arg0) +{ + s32 temp_r31; + Vec sp8; + BoardModelPosSetV(lbl_1_bss_30[8], arg0); + BoardModelPosSetV(lbl_1_bss_30[9], arg0); + for(temp_r31=0; temp_r31<3; temp_r31++) { + VECAdd(arg0, &lbl_1_data_378[temp_r31], &sp8); + BoardModelPosSetV(lbl_1_bss_C2[temp_r31], &sp8); + VECAdd(arg0, &lbl_1_data_39C[temp_r31], &sp8); + BoardModelPosSetV(lbl_1_bss_BC[temp_r31], &sp8); + } +} + +void fn_1_53B8(omObjData *object); + +void fn_1_5290(omObjData *object) +{ + WorkMGCoin *temp_r31; + float sp8[2]; + if(object->work[2] == 0) { + temp_r31 = object->data; + temp_r31->unk18 = 5; + temp_r31->unk1A = 60; + temp_r31->unk1C = MGSeqTimerCreateXY(temp_r31->unk18, 288, 64); + HuWinMesMaxSizeGet(1, sp8, 0x130015); + temp_r31->unk1E = HuWinCreate(-10000, 400, sp8[0], sp8[1], 0); + HuWinMesSet(temp_r31->unk1E, 0x130015); + HuWinBGTPLvlSet(temp_r31->unk1E, 0); + HuWinMesSpeedSet(temp_r31->unk1E, 0); + temp_r31->unk20 = frandmod(100)+20; + object->func = fn_1_53B8; + } else { + object->work[2]--; + } +} + +void fn_1_5634(omObjData *object); + +void fn_1_53B8(omObjData *object) +{ + Vec sp14; + Vec sp8; + WorkMGCoin *temp_r31; + s32 temp_r29; + s32 temp_r28; + temp_r31 = object->data; + temp_r28 = GWPlayer[lbl_1_bss_86].port; + if(--temp_r31->unk1A == 0) { + temp_r31->unk1A = 60; + if(--temp_r31->unk18 >= 0) { + MGSeqParamSet(temp_r31->unk1C, 1, temp_r31->unk18); + } + } + if(!GWPlayer[lbl_1_bss_86].com) { + temp_r29 = HuPadBtnDown[temp_r28]; + } else { + if(--temp_r31->unk20 == 0) { + temp_r29 = PAD_BUTTON_A; + } + } + if((temp_r29 & PAD_BUTTON_A) || temp_r31->unk18 < 0) { + MGSeqParamSet(temp_r31->unk1C, 2, -1); + HuWinKill(temp_r31->unk1E); + BoardPlayerMotionShiftSet(lbl_1_bss_86, 4, 0, 5, 0); + temp_r31->unk0 = 10; + temp_r31->unk4 = 0; + if(lbl_1_bss_A4->work[0] & 0x1) { + temp_r31->unk8 = 0; + } else { + if(lbl_1_bss_A4->work[0] & 0x2) { + temp_r31->unk8 = 1; + } else { + temp_r31->unk8 = 2; + } + } + BoardPlayerPosGet(lbl_1_bss_86, &sp14); + sp8 = lbl_1_bss_94; + VECAdd(&sp8, &lbl_1_data_39C[temp_r31->unk8], &sp8); + VECSubtract(&sp8, &sp14, &temp_r31->unkC); + VECScale(&temp_r31->unkC, &temp_r31->unkC, 0.05f); + object->work[0] = 1; + object->func = fn_1_5634; + } +} + +void fn_1_5868(omObjData *object); + +void fn_1_5634(omObjData *object) +{ + Vec sp14; + Vec sp8; + float temp_f31; + WorkMGCoin *temp_r31; + temp_r31 = object->data; + if(object->work[0] == 1) { + BoardPlayerPosGet(lbl_1_bss_86, &sp14); + temp_r31->unkC.y = temp_r31->unk0-(0.075f*(0.25f*(temp_r31->unk4*temp_r31->unk4))); + temp_r31->unk4++; + VECAdd(&sp14, &temp_r31->unkC, &sp14); + if(sp14.y <= lbl_1_bss_94.y) { + sp14.y = lbl_1_bss_94.y; + } + BoardPlayerPosSetV(lbl_1_bss_86, &sp14); + sp8 = lbl_1_bss_94; + VECAdd(&sp8, &lbl_1_data_39C[temp_r31->unk8], &sp8); + sp8.y = sp14.y = 0; + VECSubtract(&sp8, &sp14, &sp14); + temp_f31 = VECMag(&sp14); + if(temp_f31 <= 1.0f) { + BoardPlayerMotionStart(lbl_1_bss_86, object->motion[0], 0); + object->work[0] = 0; + } + } else { + if(BoardPlayerMotionTimeGet(lbl_1_bss_86) >= BoardPlayerMotionMaxTimeGet(lbl_1_bss_86)) { + temp_r31->unk0 = -5; + temp_r31->unk4 = 0; + temp_r31->unkC.x = temp_r31->unkC.z = 0; + object->func = fn_1_5868; + } + } +} + +void fn_1_5AC0(omObjData *object); + +void fn_1_5868(omObjData *object) +{ + Vec sp14; + Vec sp8; + WorkMGCoin *temp_r31; + temp_r31 = object->data; + BoardPlayerPosGet(lbl_1_bss_86, &sp14); + temp_r31->unkC.y = temp_r31->unk0-(0.075f*(0.25f*(temp_r31->unk4*temp_r31->unk4))); + temp_r31->unk4++; + VECAdd(&sp14, &temp_r31->unkC, &sp14); + sp8 = lbl_1_bss_94; + VECAdd(&sp8, &lbl_1_data_39C[temp_r31->unk8], &sp8); + sp8.y += 16.0f; + if(sp14.y <= sp8.y) { + sp14.y = sp8.y; + } + BoardPlayerPosSetV(lbl_1_bss_86, &sp14); + if(sp14.y == sp8.y) { + BoardModelMotionTimeSet(lbl_1_bss_BC[temp_r31->unk8], 0); + BoardModelAttrReset(lbl_1_bss_BC[temp_r31->unk8], 0x40000002); + BoardPlayerMotionShiftSet(lbl_1_bss_86, object->motion[1], 0, 5, 0); + lbl_1_bss_A4->work[3] |= 1 << temp_r31->unk8; + temp_r31->unk0 = 5; + temp_r31->unk4 = 0; + sp8.x = object->trans.x; + sp8.y = object->trans.y; + sp8.z = object->trans.z; + VECSubtract(&sp8, &sp14, &temp_r31->unkC); + VECScale(&temp_r31->unkC, &temp_r31->unkC, 0.03f); + HuAudFXPlay(1064); + object->func = fn_1_5AC0; + + } +} + +void fn_1_5C84(omObjData *object); + +void fn_1_5AC0(omObjData *object) +{ + float temp_f31; + float temp_f30; + Vec sp14; + Vec sp8; + WorkMGCoin *temp_r30; + temp_r30 = object->data; + BoardPlayerPosGet(lbl_1_bss_86, &sp14); + temp_r30->unkC.y = temp_r30->unk0-(0.075f*(0.25f*(temp_r30->unk4*temp_r30->unk4))); + temp_r30->unk4++; + VECAdd(&sp14, &temp_r30->unkC, &sp14); + sp8.x = object->trans.x; + sp8.y = 0; + sp8.z = object->trans.z; + temp_f30 = sp14.y; + sp14.y = 0; + VECSubtract(&sp8, &sp14, &sp8); + sp14.y = temp_f30; + temp_f31 = VECMag(&sp8); + if(temp_f31 <= 1.0f) { + temp_r30->unkC.x = temp_r30->unkC.z = 0; + } + if(sp14.y <= object->trans.y) { + sp14.x = object->trans.x; + sp14.y = object->trans.y; + sp14.z = object->trans.z; + BoardPlayerIdleSet(lbl_1_bss_86); + if(temp_r30->unk8 != 2) { + object->func = NULL; + } else { + object->work[1] = 8; + object->func = fn_1_5C84; + } + } + BoardPlayerPosSetV(lbl_1_bss_86, &sp14); +} + +void fn_1_5C84(omObjData *object) +{ + WorkMGCoin *sp8; + sp8 = object->data; + if(object->work[1] != 0) { + if(--object->work[1] == 0) { + BoardPlayerMotBlendSet(lbl_1_bss_86, 0, 15); + object->func = NULL; + } + (void)object; + } else { + (void)object; + } +} \ No newline at end of file From d9760904d6b47f3439407d190da6cee4cc71fd3e Mon Sep 17 00:00:00 2001 From: kabiskac Date: Tue, 11 Jun 2024 14:32:54 +0200 Subject: [PATCH 19/23] GXUnknownu16 moved to GXVert.h --- include/dolphin/gx/GXVert.h | 4 ++++ src/game/hsfdraw.c | 5 ----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/include/dolphin/gx/GXVert.h b/include/dolphin/gx/GXVert.h index 5f33d576..61d4dabf 100644 --- a/include/dolphin/gx/GXVert.h +++ b/include/dolphin/gx/GXVert.h @@ -171,6 +171,10 @@ static inline void GXTexCoord1x16(u16 index) { GXWGFifo.u16 = index; } +static inline void GXUnknownu16(const u16 x) { + GXWGFifo.u16 = x; +} + static inline void GXEnd(void) {} #endif diff --git a/src/game/hsfdraw.c b/src/game/hsfdraw.c index 5b70c69d..5d5b32d5 100755 --- a/src/game/hsfdraw.c +++ b/src/game/hsfdraw.c @@ -117,11 +117,6 @@ static s16 oneceF = 1; static GXColor firstTev = { 0xFF, 0xFF, 0x00, 0x00 }; static GXColor secondTev = { 0x00, 0x00, 0xFF, 0xFF }; -// TODO: move to GXVert -static inline void GXUnknownu16(const u16 x) { - GXWGFifo.u16 = x; -} - void Hu3DDrawPreInit(void) { DrawObjIdx = 0; } From 0b3989dec11823c2deec6e599665f86b96f68ade Mon Sep 17 00:00:00 2001 From: kabiskac Date: Tue, 11 Jun 2024 14:34:04 +0200 Subject: [PATCH 20/23] Matched m406Dll/main.c --- config/GMPE01_00/rels/m406Dll/symbols.txt | 436 ++++++++--------- configure.py | 2 +- include/REL/m406Dll.h | 19 + src/REL/m406Dll/main.c | 565 ++++++++++++++++++++++ 4 files changed, 804 insertions(+), 218 deletions(-) create mode 100644 include/REL/m406Dll.h create mode 100644 src/REL/m406Dll/main.c diff --git a/config/GMPE01_00/rels/m406Dll/symbols.txt b/config/GMPE01_00/rels/m406Dll/symbols.txt index 325549ff..d54169c5 100644 --- a/config/GMPE01_00/rels/m406Dll/symbols.txt +++ b/config/GMPE01_00/rels/m406Dll/symbols.txt @@ -121,224 +121,226 @@ fn_1_13C10 = .text:0x00013C10; // type:function size:0x7E4 fn_1_143F4 = .text:0x000143F4; // type:function size:0x330 _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:0x8 data:double -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 data:double -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 data:double -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size: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_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 data:float -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 data:double -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 data:double -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 data:float -lbl_1_rodata_C4 = .rodata:0x000000C4; // 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:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 data:double -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:0x4 data:float -lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 data:float -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x8 data:double -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 data:double -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x8 data:double -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 data:double -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 data:double -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 data:float -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:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 data:float -lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 data:float -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float -lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 data:float -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_1A4 = .rodata:0x000001A4; // type:object size:0x4 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x8 data:double -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x8 data:double -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 data:float -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 data:double -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:0x4 data:float -lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 data:float -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 data:float -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float -lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 data:float -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 data:float -lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 data:float -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 data:float -lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x8 data:double -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 data:double -lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 data:float -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 data:double -lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x4 data:float -lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x8 data:double -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:0x8 data:double -lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x8 data:double -lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x8 data:double -lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x8 data:double -lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x8 data:double -lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x8 data:double -lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 data:float -lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x8 data:double -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x1 data:byte -lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 data:float -lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 data:float -lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 data:float -lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 data:float -lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 data:float -lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 data:float -lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 data:float -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 data:float -lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 data:float -lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 data:float -lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 data:float -lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 data:float -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float -lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 data:float -lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 data:float -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x8 data:double -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 data:float -lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 data:float -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x8 data:double -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 data:double -lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 data:float -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x8 data:double -lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x8 data:double -lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 data:float -lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 data:float -lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x8 data:double -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 data:float -lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 data:float -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 data:float -lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 data:float -lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 data:float -lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 data:float -lbl_1_rodata_344 = .rodata:0x00000344; // type:object size: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:0x4 data:float -lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 data:float -lbl_1_rodata_36C = .rodata:0x0000036C; // type:object size:0x4 data:float -lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 data:float -lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 data:float -lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 data:float -lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x4 data:float -lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 data:float -lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 data:float -lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x4 data:float -lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 data:float -lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 data:float -lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 data:float -lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 data:float -lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 data:float -lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 data:float -lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 data:float -lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 data:float -lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 data:float -lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 data:float -lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 data:float -lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 data:float -lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 data:float -lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 data:float -lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 data:float -lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 data:float -lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x8 data:double -lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x8 data:double -lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x4 data:float -lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 data:float -lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 data:float -lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 data:float -lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 data:float -lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 data:float -lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 data:float -lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 data:float -lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 data:float -lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x8 data:double -lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x8 data:double -lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 data:float -lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 data:float -lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x8 data:double -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_434 = .rodata:0x00000434; // type:object size:0x4 data:float -lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 data:float +__fakeHalf = .rodata:0x00000000; // type:object size:0x8 data:float +__fakeThree = .rodata:0x00000008; // type:object size:0x8 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x8 scope:local data:double +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 scope:local data:double +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 scope:local data:double +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size: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_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C4 = .rodata:0x000000C4; // 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:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 scope:local data:double +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:0x4 scope:local data:float +lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 scope:local data:float +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x8 scope:local data:double +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 scope:local data:double +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 scope:local data:float +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x8 scope:local data:double +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 scope:local data:double +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 scope:local data:double +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data:float +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:0x4 scope:local data:float +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 scope:local data:float +lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 scope:local data:float +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float +lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data:float +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_1A4 = .rodata:0x000001A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 scope:local data:double +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:0x4 scope:local data:float +lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 scope:local data:float +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:float +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 scope:local data:float +lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 scope:local data:float +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 scope:local data:float +lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x8 scope:local data:double +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data:double +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 scope:local data:float +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 scope:local data:double +lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x4 scope:local data:float +lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x8 scope:local data:double +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:0x8 scope:local data:double +lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x8 scope:local data:double +lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x8 scope:local data:double +lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x8 scope:local data:double +lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x8 scope:local data:double +lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x8 scope:local data:double +lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 scope:local data:float +lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x8 scope:local data:double +lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x1 scope:local data:byte +lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 scope:local data:float +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x8 scope:local data:double +lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x8 scope:local data:double +lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 scope:local data:float +lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x8 scope:local data:double +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 scope:local data:float +lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 scope:local data:float +lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 scope:local data:float +lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 scope:local data:float +lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 scope:local data: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:0x4 scope:local data:float +lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 scope:local data:float +lbl_1_rodata_36C = .rodata:0x0000036C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 scope:local data:float +lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 scope:local data:float +lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 scope:local data:float +lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 scope:local data:float +lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 scope:local data:float +lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 scope:local data:float +lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 scope:local data:float +lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 scope:local data:float +lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 scope:local data:float +lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x8 scope:local data:double +lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x8 scope:local data:double +lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 scope:local data:float +lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x8 scope:local data:double +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_434 = .rodata:0x00000434; // type:object size:0x4 scope:local data:float +lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x8C data:float -lbl_1_data_8C = .data:0x0000008C; // type:object size:0x24 +lbl_1_data_8C = .data:0x0000008C; // type:object size:0x24 scope:local data:string jumptable_1_data_B0 = .data:0x000000B0; // type:object size:0x40 scope:local lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x348 lbl_1_data_438 = .data:0x00000438; // type:object size:0x348 diff --git a/configure.py b/configure.py index 97b5852e..9633618d 100644 --- a/configure.py +++ b/configure.py @@ -860,7 +860,7 @@ config.libs = [ "m406Dll", objects={ Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/m406Dll/main.c"), + Object(Matching, "REL/m406Dll/main.c"), Object(NonMatching, "REL/m406Dll/map.c"), Object(NonMatching, "REL/m406Dll/player.c"), }, diff --git a/include/REL/m406Dll.h b/include/REL/m406Dll.h new file mode 100644 index 00000000..e782bf1d --- /dev/null +++ b/include/REL/m406Dll.h @@ -0,0 +1,19 @@ +#ifndef M406DLL_H +#define M406DLL_H + +#include "game/object.h" +#include "game/process.h" + +u32 fn_1_122C(void); +// ? fn_1_2308(Process *); +// ? fn_1_2BEC(void); +void fn_1_3064(s32 arg0); +void fn_1_696C(float arg8); +void fn_1_6B5C(void); +void fn_1_B104(float arg8); +void fn_1_B25C(void); +// ? fn_1_B41C(void); +// ? fn_1_D65C(Process *); +// ? fn_1_D8B0(void); + +#endif diff --git a/src/REL/m406Dll/main.c b/src/REL/m406Dll/main.c new file mode 100644 index 00000000..81c9f1dd --- /dev/null +++ b/src/REL/m406Dll/main.c @@ -0,0 +1,565 @@ + +#include "ext_math.h" +#include "game/audio.h" +#include "game/gamework_data.h" +#include "game/hsfdraw.h" +#include "game/minigame_seq.h" +#include "game/wipe.h" +#include "rel_sqrt_consts.h" + +#include "REL/m406Dll.h" + +typedef struct UnkM417Data0Struct { + float unk_00; + float unk_04; + float unk_08; + float unk0C; + float unk10; + float unk14; + float unk18; + float unk_1C; + float unk_20; + float unk_24; + float unk_28; + float unk_2C; + float unk_30; + float unk_34; + float unk_38; // it's the same structure twice, rot, center etc. + float unk_3C; + float unk_40; + float unk_44; + float unk_48; + float unk_4C; + float unk_50; + float unk_54; + float unk_58; + float unk_5C; + float unk_60; + float unk_64; + float unk_68; + float unk_6C; + float unk_70; + float unk_74; + float unk_78; + float unk_7C; + float unk_80; + float unk_84; + float unk_88; +} UnkM417Data0Struct; /* size = unknown */ + +void fn_1_110C(omObjData *object); +void fn_1_1168(omObjData *object); +void fn_1_1340(void); +void fn_1_151C(omObjData *object); +void fn_1_15D0(float arg8); +void fn_1_183C(float arg8); +float fn_1_1F10(float arg9, float argA, float argB); +void fn_1_3B8(omObjData *object); +void fn_1_40C(omObjData *object); + +UnkM417Data0Struct lbl_1_data_0 = { + 330.0f, + 105.0f, + 0.0f, + 0.0f, + 100.0f, + 0.0f, + 1650.0f, + 91.0f, + 124.0f, + 0.0f, + 0.0f, + -35440.0f, + -60022.0f, + 1226.0f, + 0.0f, + 180.0f, + 0.0f, + 0.0f, + -1300.0f, + -2000.0f, + 1000.0f, + -5.0f, + 0.0f, + 0.0f, + 31.0f, + 75.0f, + -250.0f, + 675.0f, + 111.0f, + 164.0f, + 0.0f, + 0.0f, + -35440.0f, + -60022.0f, + 1226.0f, +}; + +Process *lbl_1_bss_2C; +omObjData *lbl_1_bss_28; +s32 lbl_1_bss_24; +s32 lbl_1_bss_20; +s32 lbl_1_bss_1C; +s32 lbl_1_bss_18; +s32 lbl_1_bss_14; +s32 lbl_1_bss_10; +s32 lbl_1_bss_C; +s32 lbl_1_bss_8; +omObjData *lbl_1_bss_4; +s32 lbl_1_bss_0; + +void ModuleProlog(void) +{ + Vec sp14; + Vec sp8; + + Process *var_r31; + + OSReport("******* M426ObjectSetup *********\n"); + var_r31 = omInitObjMan(50, 8192); + lbl_1_bss_2C = var_r31; + omGameSysInit(var_r31); + fn_1_1340(); + HuAudSndGrpSet(0x1F); + sp14.x = Center.x + (CZoom * (sind(CRot.y) * cosd(CRot.x))); + sp14.y = Center.y + (CZoom * -sind(CRot.x)); + sp14.z = Center.z + (CZoom * (cosd(CRot.y) * cosd(CRot.x))); + PSVECSubtract(&Center, &sp14, &sp8); + PSVECNormalize(&sp8, &sp8); + HuAudFXListnerSetEX(&sp14, &sp8, 100000.0f, 4166.6665f, 0.0f, 300.0f, 300.0f); + Hu3DLightAllKill(); + Hu3DLighInit(); + lbl_1_bss_28 = omAddObjEx(var_r31, 255, 2, 0, -1, fn_1_3B8); + lbl_1_bss_24 = lbl_1_bss_20 = -1; + lbl_1_bss_1C = 0; + lbl_1_bss_18 = 0; + lbl_1_bss_10 = -1; + lbl_1_bss_C = -1; + lbl_1_bss_8 = 0; + WipeCreate(1, 0, 60); + lbl_1_bss_8 = 0; +} + +void fn_1_3B8(omObjData *object) +{ + fn_1_2308(lbl_1_bss_2C); + fn_1_D65C(lbl_1_bss_2C); + object->func = fn_1_40C; +} + +void fn_1_40C(omObjData *object) +{ + Vec sp14; + Vec sp8; + + float var_f31; + + u8 var_r31; + + switch (lbl_1_bss_1C) { + case 0: + if (!WipeStatGet()) { + lbl_1_bss_1C = 1; + lbl_1_bss_18 = 0; + } + break; + case 1: + lbl_1_bss_18++; + if (lbl_1_bss_18 >= 48.0f) { + fn_1_696C(30.000002f); + } + break; + case 2: + lbl_1_bss_18++; + var_f31 = lbl_1_bss_18 / 45.0f; + fn_1_15D0(var_f31); + if (lbl_1_bss_18 >= 45.0f) { + lbl_1_bss_24 = MGSeqCreate(3, 0); + lbl_1_bss_1C = 3; + lbl_1_bss_18 = 0; + } + break; + case 3: + if (lbl_1_bss_24 != -1) { + var_r31 = MGSeqStatGet(lbl_1_bss_24); + if (var_r31 & 16 && lbl_1_bss_C == -1) { + lbl_1_bss_C = HuAudSeqPlay(74); + } + } else { + var_r31 = 0; + } + if (lbl_1_bss_24 == -1 || !var_r31) { + lbl_1_bss_24 = -1; + lbl_1_bss_1C = 4; + lbl_1_bss_18 = 0; + } + break; + case 4: + if (lbl_1_bss_10 != -1) { + lbl_1_bss_24 = MGSeqCreate(3, 1); + HuAudFXAllStop(); + if (lbl_1_bss_C != -1) { + HuAudSeqFadeOut(lbl_1_bss_C, 100); + } + if (lbl_1_bss_10 != 99) { + fn_1_B25C(); + fn_1_B104(1.0f); + fn_1_6B5C(); + fn_1_183C(0.0f); + Hu3DBGColorSet(0x40, 0x40, 0xFF); + lbl_1_bss_1C = 5; + lbl_1_bss_18 = 0; + } else { + WipeCreate(2, 0, 30); + WipeColorSet(0xFF, 0xFF, 0xFF); + lbl_1_bss_8 = 1; + lbl_1_bss_1C = 9; + lbl_1_bss_18 = 0; + lbl_1_bss_14 = 0; + } + } + break; + case 5: + lbl_1_bss_14++; + var_f31 = lbl_1_bss_14 / 90.0f; + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + fn_1_183C(var_f31); + Hu3DBGColorSet(0x40, 0x40, 0xFF); + break; + case 6: + lbl_1_bss_14++; + var_f31 = lbl_1_bss_14 / 90.0f; + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + fn_1_183C(var_f31); + WipeCreate(2, 0, 30); + WipeColorSet(0xFF, 0xFF, 0xFF); + lbl_1_bss_8 = 1; + lbl_1_bss_1C = 7; + lbl_1_bss_18 = 0; + break; + case 7: + lbl_1_bss_14++; + var_f31 = lbl_1_bss_14 / 90.0f; + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + fn_1_183C(var_f31); + if (!WipeStatGet() && (lbl_1_bss_24 == -1 || !MGSeqStatGet(lbl_1_bss_24))) { + lbl_1_bss_24 = -1; + WipeCreate(1, 0, 30); + WipeColorSet(0xFF, 0xFF, 0xFF); + lbl_1_bss_8 = 0; + CRot.x = lbl_1_data_0.unk_54; + CRot.y = lbl_1_data_0.unk_58; + CRot.z = lbl_1_data_0.unk_5C; + Center.x = lbl_1_data_0.unk_60; + Center.y = lbl_1_data_0.unk_64; + Center.z = lbl_1_data_0.unk_68; + CZoom = lbl_1_data_0.unk_6C; + fn_1_3064(1); + lbl_1_bss_1C = 8; + lbl_1_bss_18 = 0; + } + break; + case 8: + if (!WipeStatGet()) { + lbl_1_bss_1C = 11; + lbl_1_bss_18 = 0; + } + break; + case 9: + if (!WipeStatGet() && (lbl_1_bss_24 == -1 || !MGSeqStatGet(lbl_1_bss_24))) { + lbl_1_bss_24 = -1; + WipeCreate(1, 0, 30); + WipeColorSet(0xFF, 0xFF, 0xFF); + lbl_1_bss_8 = 0; + CRot.x = lbl_1_data_0.unk_54; + CRot.y = lbl_1_data_0.unk_58; + CRot.z = lbl_1_data_0.unk_5C; + Center.x = lbl_1_data_0.unk_60; + Center.y = lbl_1_data_0.unk_64; + Center.z = lbl_1_data_0.unk_68; + CZoom = lbl_1_data_0.unk_6C; + sp14.x = Center.x + (CZoom * (sind(CRot.y) * cosd(CRot.x))); + sp14.y = Center.y + (CZoom * -sind(CRot.x)); + sp14.z = Center.z + (CZoom * (cosd(CRot.y) * cosd(CRot.x))); + PSVECSubtract(&Center, &sp14, &sp8); + PSVECNormalize(&sp8, &sp8); + HuAudFXListnerUpdate(&sp14, &sp8); + fn_1_6B5C(); + fn_1_3064(1); + lbl_1_bss_1C = 10; + lbl_1_bss_18 = 0; + } + break; + case 10: + if (!WipeStatGet()) { + lbl_1_bss_1C = 11; + lbl_1_bss_18 = 0; + } + break; + case 11: + break; + case 12: + if (lbl_1_bss_10 != 99) { + lbl_1_bss_24 = MGSeqCreate(5, 3, GWPlayerCfg[lbl_1_bss_10].character, -1, -1, -1); + HuAudSStreamPlay(1); + GWPlayerCoinWinAdd(lbl_1_bss_10, 10); + lbl_1_bss_1C = 13; + lbl_1_bss_18 = 0; + } else { + lbl_1_bss_24 = MGSeqCreate(3, 2); + HuAudSStreamPlay(4); + lbl_1_bss_1C = 13; + lbl_1_bss_18 = 0; + } + break; + case 13: + if (++lbl_1_bss_18 >= 210.0f) { + lbl_1_bss_24 = -1; + WipeCreate(2, 0, 60); + lbl_1_bss_8 = 1; + lbl_1_bss_1C = 14; + lbl_1_bss_18 = 0; + } + break; + case 14: + if (!WipeStatGet()) { + Hu3DBGColorSet(0, 0, 0); + lbl_1_bss_1C = 15; + lbl_1_bss_18 = 0; + } + break; + case 15: + default: + object->func = fn_1_110C; + break; + } + fn_1_1168(object); +} + +void fn_1_110C(omObjData *object) +{ + if (!WipeStatGet()) { + fn_1_D8B0(); + fn_1_2BEC(); + fn_1_B41C(); + HuAudFXListnerKill(); + HuDataDirClose(DATA_MAKE_NUM(DATADIR_M406, 0)); + MGSeqKillAll(); + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + } +} + +void fn_1_1168(omObjData *object) +{ + s32 var_r30; + + var_r30 = 0; + if (WipeStatGet() || object->func == fn_1_110C) { + return; + } + if (omSysExitReq) { + var_r30 = 1; + } + if (var_r30) { + if (!lbl_1_bss_8) { + WipeCreate(2, 0, 60); + } + lbl_1_bss_8 = 1; + HuAudStreamFadeOut(30); + object->func = fn_1_110C; + } +} + +u32 fn_1_122C(void) +{ + return lbl_1_bss_1C; +} + +void fn_1_123C(void) +{ + if (lbl_1_bss_1C <= 1) { + lbl_1_bss_1C = 2; + lbl_1_bss_18 = 0; + } +} + +void fn_1_1274(s32 arg0) +{ + lbl_1_bss_10 = arg0; +} + +void fn_1_1284(void) +{ + if (lbl_1_bss_1C == 5) { + lbl_1_bss_1C = 6; + lbl_1_bss_18 = 0; + } +} + +void fn_1_12BC(void) +{ + if (lbl_1_bss_10 != 99) { + if (lbl_1_bss_1C == 11) { + lbl_1_bss_1C = 12; + lbl_1_bss_18 = 0; + } + } else if (lbl_1_bss_1C == 11) { + lbl_1_bss_1C = 12; + lbl_1_bss_18 = 0; + } +} + +void fn_1_1340(void) +{ + omObjData *sp8; + + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 45.0f, 100.0f, 50000.0f, 1.2f); + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + Hu3DCameraScissorSet(1, 0, 0, 640, 480); + sp8 = lbl_1_bss_4 = omAddObjEx(lbl_1_bss_2C, 0x7FDA, 0, 0, -1, omOutView); + CRot.x = lbl_1_data_0.unk_38; + CRot.y = lbl_1_data_0.unk_3C; + CRot.z = lbl_1_data_0.unk_40; + Center.x = lbl_1_data_0.unk_44; + Center.y = lbl_1_data_0.unk_48; + Center.z = lbl_1_data_0.unk_4C; + CZoom = lbl_1_data_0.unk_50; + lbl_1_bss_0 = 0; + omAddObjEx(lbl_1_bss_2C, 0xFF, 0, 0, -1, fn_1_151C); +} + +void fn_1_151C(omObjData *object) { } + +void fn_1_1520(void) { } + +void fn_1_1524(void) +{ + CRot.x = lbl_1_data_0.unk_38; + CRot.y = lbl_1_data_0.unk_3C; + CRot.z = lbl_1_data_0.unk_40; + Center.x = lbl_1_data_0.unk_44; + Center.y = lbl_1_data_0.unk_48; + Center.z = lbl_1_data_0.unk_4C; + CZoom = lbl_1_data_0.unk_50; +} + +void fn_1_15D0(float arg8) +{ + Vec sp14; + Vec sp8; + + CRot.x = fn_1_1F10(arg8, lbl_1_data_0.unk_38, lbl_1_data_0.unk_00); + CRot.y = fn_1_1F10(arg8, lbl_1_data_0.unk_3C, lbl_1_data_0.unk_04); + CRot.z = fn_1_1F10(arg8, lbl_1_data_0.unk_40, lbl_1_data_0.unk_08); + sp14.x = Center.x + (CZoom * (sind(CRot.y) * cosd(CRot.x))); + sp14.y = Center.y + (CZoom * -sind(CRot.x)); + sp14.z = Center.z + (CZoom * (cosd(CRot.y) * cosd(CRot.x))); + PSVECSubtract(&Center, &sp14, &sp8); + PSVECNormalize(&sp8, &sp8); + HuAudFXListnerUpdate(&sp14, &sp8); +} + +void fn_1_183C(float arg8) +{ + Vec sp14; + Vec sp8; + + CRot.x = fn_1_1F10(arg8, lbl_1_data_0.unk_1C, lbl_1_data_0.unk_70); + CRot.y = fn_1_1F10(arg8, lbl_1_data_0.unk_20, lbl_1_data_0.unk_74); + CRot.z = fn_1_1F10(arg8, lbl_1_data_0.unk_24, lbl_1_data_0.unk_78); + Center.x = lbl_1_data_0.unk_28 + (arg8 * (lbl_1_data_0.unk_7C - lbl_1_data_0.unk_28)); + Center.y = lbl_1_data_0.unk_2C + (arg8 * (lbl_1_data_0.unk_80 - lbl_1_data_0.unk_2C)); + Center.z = lbl_1_data_0.unk_30 + (arg8 * (lbl_1_data_0.unk_84 - lbl_1_data_0.unk_30)); + CZoom = lbl_1_data_0.unk_34 + (arg8 * (lbl_1_data_0.unk_88 - lbl_1_data_0.unk_34)); + sp14.x = Center.x + (CZoom * (sind(CRot.y) * cosd(CRot.x))); + sp14.y = Center.y + (CZoom * -sind(CRot.x)); + sp14.z = Center.z + (CZoom * (cosd(CRot.y) * cosd(CRot.x))); + PSVECSubtract(&Center, &sp14, &sp8); + PSVECNormalize(&sp8, &sp8); + HuAudFXListnerUpdate(&sp14, &sp8); +} + +s32 fn_1_1B98(void) +{ + return lbl_1_bss_0; +} + +float fn_1_1BA8(float arg8, float arg9) +{ + float var_f31; + + if (arg8 >= 360.0f) { + arg8 -= 360.0f; + } else if (arg8 < 0.0f) { + arg8 += 360.0f; + } + if (arg9 >= 360.0f) { + arg9 -= 360.0f; + } else if (arg9 < 0.0f) { + arg9 += 360.0f; + } + var_f31 = arg8 - arg9; + if (var_f31 <= -180.0f) { + var_f31 += 360.0f; + } else if (var_f31 >= 180.0f) { + var_f31 -= 360.0f; + } + return var_f31; +} + +float fn_1_1CC0(float arg8, float arg9, float argA) +{ + float var_f31; + float var_f30; + + if (arg8 >= 360.0) { + arg8 -= 360.0; + } else if (arg8 < 0.0) { + arg8 += 360.0; + } + if (arg9 >= 360.0) { + arg9 -= 360.0; + } else if (arg9 < 0.0) { + arg9 += 360.0; + } + var_f30 = 360.0 + (arg8 - arg9); + if (fabs(var_f30) >= 360.0) { + var_f30 = fmod(var_f30, 360.0); + } + if (var_f30 < 180.0) { + if (var_f30 <= argA) { + var_f31 = var_f30; + } else { + var_f31 = argA; + } + } else if (360.0 - var_f30 <= argA) { + var_f31 = -(360.0 - var_f30); + } else { + var_f31 = -argA; + } + var_f31 += arg9; + if (var_f31 >= 360.0) { + var_f31 -= 360.0; + } else if (var_f31 < 0.0) { + var_f31 += 360.0; + } + return var_f31; +} + +float fn_1_1F10(float arg8, float arg9, float argA) +{ + float var_f24; + float var_f23; + + var_f23 = fn_1_1BA8(argA, arg9); + var_f24 = fabs(var_f23 * arg8); + return fn_1_1CC0(argA, arg9, var_f24); +} From 12f10421409dfcd5765e01bf5d102535bc160e72 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 11 Jun 2024 10:42:30 -0500 Subject: [PATCH 21/23] Decompile w02dll/mg_item.c --- config/GMPE01_00/rels/w02Dll/symbols.txt | 98 +-- configure.py | 2 +- include/REL/w02Dll.h | 4 +- src/REL/w02Dll/mg_item.c | 1000 ++++++++++++++++++++++ src/REL/w03Dll/mg_item.c | 19 +- 5 files changed, 1062 insertions(+), 61 deletions(-) create mode 100644 src/REL/w02Dll/mg_item.c diff --git a/config/GMPE01_00/rels/w02Dll/symbols.txt b/config/GMPE01_00/rels/w02Dll/symbols.txt index 81c1bca4..239369db 100644 --- a/config/GMPE01_00/rels/w02Dll/symbols.txt +++ b/config/GMPE01_00/rels/w02Dll/symbols.txt @@ -198,52 +198,52 @@ lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data: lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 scope:local data:float lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 scope:local data:float lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 scope:local data:float -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 data:byte -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:0x8 data:double -lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x8 data:double -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_288 = .rodata:0x00000288; // type:object size:0x8 data:double -lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 data:float -lbl_1_rodata_294 = .rodata:0x00000294; // type:object size:0x4 data:float -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x4 data:float -lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 data:float -lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 data:float -lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 data:float -lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 data:float -lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 data:float -lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 data:float -lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 data:float -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 data:float -lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x8 data:double -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 data:float -lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 data:float -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float -lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 data:float -lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 data:float -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 data:float -lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 data:float -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 data:double +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 scope:local data:byte +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:0x8 scope:local data:double +lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x8 scope:local data:double +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_288 = .rodata:0x00000288; // type:object size:0x8 scope:local data:double +lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 scope:local data:float +lbl_1_rodata_294 = .rodata:0x00000294; // type:object size:0x4 scope:local data:float +lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x4 scope:local data:float +lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 scope:local data:double lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 data:float lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 data:float lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x4 data:float @@ -385,9 +385,9 @@ lbl_1_data_3E4 = .data:0x000003E4; // type:object size:0x20 lbl_1_data_404 = .data:0x00000404; // type:object size:0x20 lbl_1_data_424 = .data:0x00000424; // type:object size:0x4 scope:local lbl_1_data_428 = .data:0x00000428; // type:object size:0x38 -lbl_1_data_460 = .data:0x00000460; // type:object size:0x5 data:string -lbl_1_data_465 = .data:0x00000465; // type:object size:0x6 data:string -lbl_1_data_46B = .data:0x0000046B; // type:object size:0x9 +lbl_1_data_460 = .data:0x00000460; // type:object size:0x5 scope:local data:string +lbl_1_data_465 = .data:0x00000465; // type:object size:0x6 scope:local data:string +lbl_1_data_46B = .data:0x0000046B; // type:object size:0x9 scope:local lbl_1_data_474 = .data:0x00000474; // type:object size:0xC lbl_1_data_480 = .data:0x00000480; // type:object size:0x10 lbl_1_data_490 = .data:0x00000490; // type:object size:0x20 diff --git a/configure.py b/configure.py index 9633618d..89f2bba3 100644 --- a/configure.py +++ b/configure.py @@ -1487,7 +1487,7 @@ config.libs = [ Object(Matching, "REL/w02Dll/gendice.c"), Object(Matching, "REL/w02Dll/gamble.c"), Object(Matching, "REL/w02Dll/mg_coin.c"), - Object(NonMatching, "REL/w02Dll/mg_item.c"), + Object(Matching, "REL/w02Dll/mg_item.c"), Object(NonMatching, "REL/w02Dll/shuffleboard.c"), Object(Matching, "REL/w02Dll/roulette.c"), }, diff --git a/include/REL/w02Dll.h b/include/REL/w02Dll.h index 4a09e43f..ca42e815 100644 --- a/include/REL/w02Dll.h +++ b/include/REL/w02Dll.h @@ -72,8 +72,8 @@ extern void fn_1_39F4(); extern void fn_1_5CF8(); extern void fn_1_5D28(); extern void fn_1_5F90(); -extern void fn_1_79BC(s16* itemList); -extern void fn_1_8244(s32); +extern void fn_1_79BC(s16 *arg0); +extern void fn_1_8244(u16 arg0); extern void fn_1_9250(); extern void fn_1_93C8(s32 spaceFlag); extern void fn_1_BC1C(); diff --git a/src/REL/w02Dll/mg_item.c b/src/REL/w02Dll/mg_item.c new file mode 100644 index 00000000..895e3a69 --- /dev/null +++ b/src/REL/w02Dll/mg_item.c @@ -0,0 +1,1000 @@ +#include "REL/w02Dll.h" +#include "game/audio.h" +#include "game/pad.h" +#include "game/objsub.h" +#include "game/frand.h" +#include "game/objsub.h" +#include "game/chrman.h" +#include "game/hsfdraw.h" + +#include "ext_math.h" + +#include "game/minigame_seq.h" + +s32 lbl_1_data_428[14] = { + 0x0007006D, + 0x0007006E, + 0x0007006F, + 0x00070070, + 0x00070071, + 0x00070072, + 0x00070073, + 0x00070074, + 0x00070076, + 0x00070077, + 0x00070078, + 0x00070079, + 0x0007007A, + 0x0007007B +}; + +char *lbl_1_data_474[3] = { + "item", + "item1", + "item2" +}; + +s32 lbl_1_data_480[] = { + 0x760018, + 0x760019, + 0x76001A, + -1 +}; + +u16 lbl_1_bss_198; +s16 lbl_1_bss_196; +s16 lbl_1_bss_190[3]; +s16 lbl_1_bss_18A[3]; +s16 lbl_1_bss_184[3]; +Vec lbl_1_bss_160[3]; +Vec lbl_1_bss_13C[3]; +Vec lbl_1_bss_118[3]; +float lbl_1_bss_114; +float lbl_1_bss_110; +omObjData *lbl_1_bss_10C; +omObjData *lbl_1_bss_108; +omObjData *lbl_1_bss_104; +Process *lbl_1_bss_100; +Vec lbl_1_bss_DC[3]; +s32 lbl_1_bss_D8; +s32 lbl_1_bss_CC[3]; +AnimData *lbl_1_bss_C8; + +void fn_1_5CF8(void) +{ + BoardModelVisibilitySet(lbl_1_bss_30[10], 1); +} + +typedef struct work_mgitem { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; + s16 unkC; +} WorkMGItem; + +typedef struct work_mgitem_player { + Vec unk0[3]; + s16 unk24[3]; + s16 unk2A[3]; + float unk30[2]; + float unk38[2]; + s16 unk40[2]; + Vec unk44[3]; + s16 unk68; +} WorkMGItemPlayer; + +void fn_1_8570(void); + +void fn_1_5F08(omObjData *object); +void fn_1_606C(omObjData *object); + +void fn_1_5D28(void) +{ + Vec spC; + WorkMGItem *sp8; + lbl_1_bss_196 = GWSystem.player_curr; + BoardPlayerPosGet(lbl_1_bss_196, &spC); + BoardPlayerPosLerpStart(lbl_1_bss_196, &spC, &lbl_1_bss_DC[1], 20); + while(GWPlayer[lbl_1_bss_196].moving) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_196); + HuPrcSleep(120); + BoardAudSeqPause(0, 1, 1000); + HuAudFXPlay(781); + fn_1_8570(); + HuPrcSleep(60); + lbl_1_bss_104 = omAddObjEx(boardObjMan, 257, 0, 0, -1, fn_1_5F08); + lbl_1_bss_108 = omAddObjEx(boardObjMan, 257, 0, 0, -1, fn_1_606C); + lbl_1_bss_10C = omAddObjEx(boardObjMan, 257, 0, 0, -1, NULL); + lbl_1_bss_108->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkMGItemPlayer), MEMORY_DEFAULT_NUM); + lbl_1_bss_10C->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkMGItem), MEMORY_DEFAULT_NUM); + sp8 = lbl_1_bss_10C->data; + lbl_1_bss_198 = 0; +} + +void fn_1_602C(void); + +void fn_1_5F08(omObjData *object) +{ + if(lbl_1_bss_198 && BoardMGDoneFlagGet() == 1) { + fn_1_602C(); + omDelObjEx(boardObjMan, object); + } +} + +void fn_1_5F60(void) +{ + lbl_1_bss_198 = 1; + BoardMGExit(); +} + +void fn_1_5F90(void) +{ + s32 i; + for(i=0; i<3; i++) { + BoardModelKill(lbl_1_bss_184[i]); + BoardModelKill(lbl_1_bss_18A[i]); + } + if(lbl_1_bss_C8) { + HuSprAnimKill(lbl_1_bss_C8); + lbl_1_bss_C8 = NULL; + } +} + +void fn_1_602C(void) +{ + omDelObjEx(boardObjMan, lbl_1_bss_10C); + BoardMGDoneFlagSet(0); +} + +void fn_1_6248(omObjData *object); + +void fn_1_606C(omObjData *object) +{ + WorkMGItemPlayer *temp_r31 = object->data; + temp_r31->unk24[0] = lbl_1_bss_18A[0]; + temp_r31->unk24[1] = lbl_1_bss_18A[1]; + temp_r31->unk24[2] = lbl_1_bss_18A[2]; + BoardModelPosGet(lbl_1_bss_18A[1], &temp_r31->unk44[0]); + temp_r31->unk44[0].x -= lbl_1_bss_110; + BoardModelPosGet(lbl_1_bss_18A[1], &temp_r31->unk44[1]); + temp_r31->unk44[1].x += lbl_1_bss_110; + BoardModelPosGet(lbl_1_bss_18A[1], &temp_r31->unk44[2]); + BoardMusStart(1, 19, 127, 0); + object->work[0] = 300; + object->work[1] = 0; + object->func = fn_1_6248; +} + +void fn_1_616C(s16 arg0, s16 arg1) +{ + s32 temp; + temp = lbl_1_bss_190[arg0]; + lbl_1_bss_190[arg0] = lbl_1_bss_190[arg1]; + lbl_1_bss_190[arg1] = temp; + temp = lbl_1_bss_184[arg0]; + lbl_1_bss_184[arg0] = lbl_1_bss_184[arg1]; + lbl_1_bss_184[arg1] = temp; +} + +void fn_1_6AB0(omObjData *object); + +void fn_1_6248(omObjData *object) +{ + float temp_f31; + float temp_f30; + Vec sp34; + Vec sp28; + Vec sp1C; + Vec sp10; + u8 sp8[8] = { + 0, 1, 1, 2, + 0, 1, 0, 2 + }; + WorkMGItemPlayer *temp_r31 = object->data; + s32 temp_r30; + s32 temp_r28; + if(object->work[0]) { + object->work[0]--; + } + if(object->work[1] == 0) { + if(object->work[0] == 0) { + object->func = fn_1_6AB0; + } + temp_r28 = sp8[frand() & 0x7]; + switch(temp_r28) { + case 0: + temp_r31->unk2A[0] = temp_r31->unk24[0]; + temp_r31->unk2A[1] = temp_r31->unk24[1]; + sp28 = lbl_1_bss_160[0]; + sp34 = lbl_1_bss_160[1]; + temp_f31 = 15; + break; + + case 1: + temp_r31->unk2A[0] = temp_r31->unk24[1]; + temp_r31->unk2A[1] = temp_r31->unk24[2]; + sp28 = lbl_1_bss_160[1]; + sp34 = lbl_1_bss_160[2]; + temp_f31 = 15; + break; + + case 2: + temp_r31->unk2A[0] = temp_r31->unk24[0]; + temp_r31->unk2A[1] = temp_r31->unk24[2]; + temp_f31 = 22.5f; + break; + } + temp_r31->unk68 = temp_r28; + temp_r31->unk30[0] = 180; + temp_r31->unk30[1] = 0; + if(temp_r28 != 2) { + temp_r31->unk40[0] = frandmod(3); + temp_r31->unk40[1] = frandmod(3); + while(temp_r31->unk40[1] == temp_r31->unk40[0]) { + temp_r31->unk40[1] = frandmod(3); + } + VECSubtract(&sp34, &sp28, &temp_r31->unk0[0]); + VECScale(&temp_r31->unk0[0], &temp_r31->unk0[0], 1.0f/temp_f31); + VECSubtract(&sp28, &sp34, &temp_r31->unk0[1]); + VECScale(&temp_r31->unk0[1], &temp_r31->unk0[1], 1.0f/temp_f31); + } else { + temp_r31->unk40[0] = frandmod(2); + temp_r31->unk40[1] = temp_r31->unk40[0]^1; + } + for(temp_r30=0; temp_r30<2; temp_r30++) { + if(temp_r31->unk40[temp_r30] == 0) { + temp_r31->unk38[temp_r30] = 180.0f/temp_f31; + } else { + temp_r31->unk38[temp_r30] = -180.0f/temp_f31; + } + if(temp_r30 == 1) { + temp_r31->unk38[temp_r30] = -temp_r31->unk38[temp_r30]; + } + } + object->work[2] = temp_f31; + object->work[1] = 1; + BoardModelMotionStart(temp_r31->unk2A[temp_r30], 2, 0x40000001); + BoardModelMotionSpeedSet(temp_r31->unk2A[temp_r30], 3.0f); + } else { + for(temp_r30=0; temp_r30<2; temp_r30++) { + BoardModelPosGet(temp_r31->unk2A[temp_r30], &sp1C); + sp10 = sp1C; + if(temp_r31->unk68 != 2) { + temp_f30 = lbl_1_bss_110; + } else { + temp_f30 = 2.0f*lbl_1_bss_110; + } + if(temp_r31->unk40[temp_r30] != 2) { + sp1C.x = temp_r31->unk44[temp_r31->unk68].x+(temp_f30*cosd(temp_r31->unk30[temp_r30])); + sp1C.z = temp_r31->unk44[temp_r31->unk68].z+(temp_f30*sind(temp_r31->unk30[temp_r30])); + temp_r31->unk30[temp_r30] += temp_r31->unk38[temp_r30]; + } else { + VECAdd(&sp1C, &temp_r31->unk0[temp_r30], &sp1C); + } + BoardModelPosSetV(temp_r31->unk2A[temp_r30], &sp1C); + VECSubtract(&sp1C, &sp10, &sp10); + BoardModelRotGet(temp_r31->unk2A[temp_r30], &sp1C); + sp1C.y = atan2d(sp10.x, sp10.z); + BoardModelRotSetV(temp_r31->unk2A[temp_r30], &sp1C); + } + if(--object->work[2] == 0) { + object->work[1] = 0; + BoardModelMotionStart(temp_r31->unk2A[temp_r30], 1, 0x40000001); + BoardModelMotionSpeedSet(temp_r31->unk2A[temp_r30], 1.0f); + for(temp_r30=0; temp_r30<2; temp_r30++) { + if(temp_r31->unk40[temp_r30] == 0) { + BoardModelRotGet(temp_r31->unk2A[temp_r30], &sp1C); + sp1C.y = 0; + BoardModelRotSetV(temp_r31->unk2A[temp_r30], &sp1C); + } else if(temp_r31->unk40[temp_r30] == 1) { + BoardModelRotGet(temp_r31->unk2A[temp_r30], &sp1C); + sp1C.y = 180; + BoardModelRotSetV(temp_r31->unk2A[temp_r30], &sp1C); + } + } + switch(temp_r31->unk68) { + case 0: + temp_r31->unk24[0] = temp_r31->unk2A[1]; + temp_r31->unk24[1] = temp_r31->unk2A[0]; + fn_1_616C(0, 1); + break; + + case 1: + temp_r31->unk24[1] = temp_r31->unk2A[1]; + temp_r31->unk24[2] = temp_r31->unk2A[0]; + fn_1_616C(1, 2); + break; + + case 2: + temp_r31->unk24[0] = temp_r31->unk2A[1]; + temp_r31->unk24[2] = temp_r31->unk2A[0]; + fn_1_616C(0, 2); + break; + } + for(temp_r30=0; temp_r30<3; temp_r30++) { + BoardModelPosSetV(temp_r31->unk24[temp_r30], &lbl_1_bss_160[temp_r30]); + } + } + } +} + +void fn_1_6CA4(omObjData *object); + +void fn_1_6AB0(omObjData *object) +{ + Vec sp8; + s32 temp_r31; + s32 temp_r30; + temp_r30 = 0; + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelRotGet(lbl_1_bss_18A[temp_r31], &sp8); + if(sp8.y < 0.0f) { + sp8.y += 360.0f; + } + if(0.0f == sp8.y) { + temp_r30++; + continue; + } + if(sp8.y < 180.0f) { + if(sp8.y < -10.0f) { + sp8.y = 0; + } else { + sp8.y -= 10.0f; + } + } else { + if(360.0f-sp8.y < 10.0f) { + sp8.y = 0; + } else { + sp8.y += 10.0f; + } + } + BoardModelRotSetV(lbl_1_bss_18A[temp_r31], &sp8); + } + if(temp_r30 == 3) { + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelPosSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_160[temp_r31]); + } + object->work[0] = MGSeqStartCreate(); + object->func = fn_1_6CA4; + } +} + +void fn_1_73C8(omObjData *object); + +void fn_1_6CA4(omObjData *object) +{ + if(!MGSeqStatGet(object->work[0])) { + lbl_1_bss_10C->func = fn_1_73C8; + object->func = NULL; + } +} + +void fn_1_6E34(omObjData *object); +void fn_1_85FC(void); +void fn_1_8DAC(void); + +void fn_1_6D04(omObjData *object) +{ + Vec sp8; + BoardModelRotGet(lbl_1_bss_18A[object->work[0]], &sp8); + sp8.y += 8.0f; + if(sp8.y >= 360.0f) { + sp8.y = 0.0f; + HuAudFXPlay(784); + lbl_1_bss_100 = HuPrcCreate(fn_1_85FC, 8196, 8192, 0); + HuPrcDestructorSet2(lbl_1_bss_100, fn_1_8DAC); + *((u32 *)&lbl_1_bss_100->user_data) = (1 << object->work[0])|0x10000000; + lbl_1_bss_D8 = HuAudFXPlay(863); + object->func = fn_1_6E34; + } + BoardModelRotSetV(lbl_1_bss_18A[object->work[0]], &sp8); +} + +void fn_1_6EA8(void); + +void fn_1_6E34(omObjData *object) +{ + Process *temp_r31; + if((u32)lbl_1_bss_100->user_data & 0x40000000) { + temp_r31 = HuPrcCreate(fn_1_6EA8, 8196, 6144, 0); + temp_r31->user_data = object; + object->func = NULL; + } +} + +void fn_1_72E4(omObjData *object); + +void fn_1_6EA8(void) +{ + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f31; + float temp_f30; + float temp_f29; + s32 temp_r31; + s32 temp_r30; + s32 temp_r29; + s32 temp_r28; + + temp_r31 = lbl_1_bss_108->work[0]; + BoardWinCreate(2, 0x130018, 4); + BoardWinInsertMesSet(lbl_1_bss_190[temp_r31]+0x80000, 1); + BoardWinWait(); + BoardWinKill(); + BoardPlayerPosGet(lbl_1_bss_196, &sp20); + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp2C); + sp20.y = sp2C.y = 0; + VECSubtract(&sp20, &sp2C, &sp14); + temp_f30 = VECMag(&sp14); + VECScale(&sp14, &sp14, 1.0f/60.0f); + for(temp_r30=0; temp_r30<60; temp_r30++) { + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp2C); + VECAdd(&sp2C, &sp14, &sp2C); + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp2C); + HuPrcVSleep(); + } + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp2C); + sp2C.x = sp20.x; + sp2C.z = sp20.z; + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp2C); + BoardPlayerMotBlendSet(lbl_1_bss_196, 0, 15); + while(!BoardPlayerMotBlendCheck(lbl_1_bss_196)) { + HuPrcVSleep(); + } + HuPrcKill(lbl_1_bss_100); + lbl_1_bss_100 = NULL; + HuPrcVSleep(); + HuAudFXPlay(781); + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp2C); + BoardModelScaleGet(lbl_1_bss_184[temp_r31], &sp8); + temp_f31 = sp8.x; + temp_f29 = -0.04f; + temp_f30 = (sp20.y-sp2C.y)/30.0f; + temp_r29 = 0; + HuAudFXFadeOut(lbl_1_bss_D8, 499); + while(!temp_r29) { + sp2C.y += temp_f30; + temp_f31 += temp_f29; + if(temp_f31 < 0.0f) { + temp_f31 = 0.0f; + temp_r29 = 1; + } + sp8.x = sp8.y = sp8.z = temp_f31; + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp2C); + BoardModelScaleSetV(lbl_1_bss_184[temp_r31], &sp8); + HuPrcVSleep(); + } + HuAudFXStop(lbl_1_bss_D8); + BoardModelVisibilitySet(lbl_1_bss_184[temp_r31], 0); + BoardPlayerItemAdd(lbl_1_bss_196, lbl_1_bss_190[temp_r31]); + omVibrate(lbl_1_bss_196, 12, 6, 6); + temp_r28 = HuAudSStreamPlay(2); + BoardPlayerMotionShiftSet(lbl_1_bss_196, 7, 0, 5, 0); + while(!BoardPlayerMotionEndCheck(lbl_1_bss_196)) { + HuPrcVSleep(); + } + HuPrcSleep(30); + while(HuAudSStreamStatGet(temp_r28)) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + HuAudFXPlay(68); + fn_1_121C(0x130019); + lbl_1_bss_108->func = fn_1_72E4; + HuPrcKill(NULL); + while(1) { + HuPrcVSleep(); + } +} + +void fn_1_72E4(omObjData *object) +{ + fn_1_5F60(); + omDelObjEx(boardObjMan, object); +} + +void fn_1_732C(s32 arg0) +{ + lbl_1_bss_108->work[0] = arg0; + lbl_1_bss_108->func = fn_1_6D04; +} + +void fn_1_7358(WorkMGItem *arg0) +{ + if(--arg0->unk2 == 0) { + arg0->unk2 = 60; + if(--arg0->unk0 >= 0) { + MGSeqParamSet(arg0->unk4, 1, arg0->unk0); + } + } +} + +void fn_1_74E4(omObjData *object); + +void fn_1_73C8(omObjData *object) +{ + float sp8[2]; + WorkMGItem *temp_r31; + temp_r31 = object->data; + temp_r31->unk0 = 5; + temp_r31->unk2 = 60; + temp_r31->unk4 = MGSeqTimerCreateXY(temp_r31->unk0, 288, 64); + HuWinMesMaxSizeGet(1, sp8, 0x13001B); + temp_r31->unk6 = HuWinCreate(-10000, 368, sp8[0], sp8[1], 0); + HuWinMesSet(temp_r31->unk6, 0x13001B); + HuWinBGTPLvlSet(temp_r31->unk6, 0); + HuWinMesSpeedSet(temp_r31->unk6, 0); + temp_r31->unk8 = 1; + temp_r31->unkA = frandmod(30)+15; + temp_r31->unkC = 0; + object->func = fn_1_74E4; +} + +void fn_1_7898(omObjData *arg0, s32 *arg1, s32 *arg2); + +void fn_1_7750(omObjData *object); +void fn_1_7818(omObjData *object); + +void fn_1_74E4(omObjData *object) +{ + s32 spC; + s32 sp8; + WorkMGItem *temp_r31; + s32 temp_r29; + temp_r31 = object->data; + fn_1_7358(temp_r31); + temp_r29 = GWPlayer[lbl_1_bss_196].port; + if(GWPlayer[lbl_1_bss_196].com) { + fn_1_7898(object, &spC, &sp8); + } else { + spC = HuPadDStkRep[temp_r29]; + sp8 = HuPadBtnDown[temp_r29]; + } + if((sp8 & PAD_BUTTON_A) || temp_r31->unk0 < 0) { + MGSeqParamSet(temp_r31->unk4, 2, -1); + HuWinKill(temp_r31->unk6); + BoardPlayerMotBlendSet(lbl_1_bss_196, 180, 10); + BoardAudSeqFadeOut(1, 1000); + object->func = fn_1_7818; + } else if(spC & PAD_BUTTON_LEFT) { + if(temp_r31->unk8 != 0) { + temp_r31->unk8--; + BoardPlayerPosLerpStart(lbl_1_bss_196, &lbl_1_bss_DC[temp_r31->unk8+1], &lbl_1_bss_DC[temp_r31->unk8], 12); + object->func = fn_1_7750; + } + } else if(spC & PAD_BUTTON_RIGHT) { + if(temp_r31->unk8 != 2) { + temp_r31->unk8++; + BoardPlayerPosLerpStart(lbl_1_bss_196, &lbl_1_bss_DC[temp_r31->unk8-1], &lbl_1_bss_DC[temp_r31->unk8], 12); + object->func = fn_1_7750; + } + } +} + +void fn_1_7750(omObjData *object) +{ + WorkMGItem *temp_r31 = object->data; + fn_1_7358(temp_r31); + if(!GWPlayer[lbl_1_bss_196].moving) { + BoardPlayerIdleSet(lbl_1_bss_196); + object->func = fn_1_74E4; + } +} + +void fn_1_7818(omObjData *object) +{ + if(BoardPlayerMotBlendCheck(lbl_1_bss_196)) { + fn_1_732C(((WorkMGItem *)object->data)->unk8); + object->func = NULL; + } +} + +void fn_1_7898(omObjData *arg0, s32 *arg1, s32 *arg2) +{ + WorkMGItem *temp_r31; + s32 temp_r28; + temp_r31 = arg0->data; + *arg1 = *arg2 = 0; + if(temp_r31->unkA) { + temp_r31->unkA--; + } else { + temp_r31->unkA = frandmod(30)+15; + if(temp_r31->unkC == 4) { + *arg2 |= PAD_BUTTON_A; + } else if((s32)frandmod(10) < 4) { + *arg2 |= PAD_BUTTON_A; + } else { + temp_r28 = frandBool(); + if((temp_r28 == 0 && temp_r31->unk8 != 2) || temp_r31->unk8 == 0) { + *arg1 |= PAD_BUTTON_RIGHT; + } else if((temp_r28 == 1 && temp_r31->unk8 != 0) || temp_r31->unk8 == 2) { + *arg1 |= PAD_BUTTON_LEFT; + } + temp_r31->unkC++; + } + } +} + +static inline void WriteTrans(s32 index, float value) +{ + Hu3DData[BoardModelIDGet(lbl_1_bss_184[index])].unk_F0[1][3] = value; +} + +void fn_1_79BC(s16 *arg0) +{ + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f25; + Vec sp8; + s32 temp_r31; + s32 temp_r29; + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_190[temp_r31] = arg0[temp_r31]; + lbl_1_bss_184[temp_r31] = BoardModelCreate(lbl_1_data_428[lbl_1_bss_190[temp_r31]], NULL, 0); + if(lbl_1_bss_190[temp_r31] == 5) { + WriteTrans(temp_r31, -50.0f); + } + if(arg0[temp_r31] == 4) { + BoardModelMotionSpeedSet(lbl_1_bss_184[temp_r31], 0); + } + BoardModelVisibilitySet(lbl_1_bss_184[temp_r31], 0); + if(arg0[temp_r31] == 11) { + BoardModelAttrSet(lbl_1_bss_184[temp_r31], 0x40000001); + } + } + if(lbl_1_bss_C8 == NULL) { + lbl_1_bss_C8 = HuSprAnimReadFile(0x120000); + HuSprAnimLock(lbl_1_bss_C8); + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_18A[temp_r31] = BoardModelCreate(0x760017, lbl_1_data_480, 0); + lbl_1_bss_118[temp_r31].x = lbl_1_bss_118[temp_r31].z = 0.1f; + lbl_1_bss_118[temp_r31].y = 0.1f; + lbl_1_bss_13C[temp_r31].x = 0; + lbl_1_bss_13C[temp_r31].y = lbl_1_bss_13C[temp_r31].z = 0; + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_30[10]), lbl_1_data_474[temp_r31], &lbl_1_bss_160[temp_r31]); + BoardModelPosSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_160[temp_r31]); + BoardModelRotSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_13C[temp_r31]); + BoardModelScaleSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_118[temp_r31]); + } + lbl_1_bss_114 = lbl_1_bss_160[0].y; + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelPosGet(lbl_1_bss_30[10], &lbl_1_bss_DC[temp_r31]); + lbl_1_bss_DC[temp_r31].x = lbl_1_bss_160[temp_r31].x; + lbl_1_bss_DC[temp_r31].z = lbl_1_bss_160[temp_r31].z+200.0f; + BoardModelMotionStart(lbl_1_bss_18A[temp_r31], 3, 0); + } + lbl_1_bss_110 = fabs(lbl_1_bss_160[0].x-lbl_1_bss_160[1].x)/2; + temp_f31 = 0; + temp_f29 = 20; + sp8.x = 0.04f; + sp8.y = 0.04f; + sp8.z = 0.04f; + for(temp_r29=0; temp_r29<3;) { + temp_f30 = temp_f29-((7.0f/60.0f)*(0.25f*(temp_f31*temp_f31))); + temp_f31++; + temp_r29 = 0; + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_160[temp_r31].y += temp_f30; + if(lbl_1_bss_160[temp_r31].y < lbl_1_bss_114) { + lbl_1_bss_160[temp_r31].y = lbl_1_bss_114; + temp_r29++; + } + BoardModelPosSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_160[temp_r31]); + VECAdd(&lbl_1_bss_118[temp_r31], &sp8, &lbl_1_bss_118[temp_r31]); + if(lbl_1_bss_118[temp_r31].x > 0.7f) { + lbl_1_bss_118[temp_r31].x = 0.7f; + } + if(lbl_1_bss_118[temp_r31].y > 0.7f) { + lbl_1_bss_118[temp_r31].y = 0.7f; + } + if(lbl_1_bss_118[temp_r31].z > 0.7f) { + lbl_1_bss_118[temp_r31].z = 0.7f; + } + BoardModelScaleSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_118[temp_r31]); + } + HuPrcVSleep(); + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_118[temp_r31].x = lbl_1_bss_118[temp_r31].y = lbl_1_bss_118[temp_r31].z = 0.7f; + BoardModelScaleSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_118[temp_r31]); + BoardModelMotionStart(lbl_1_bss_18A[temp_r31], 1, 0x40000001); + } + lbl_1_bss_100 = HuPrcCreate(fn_1_85FC, 8196, 8192, 0); + HuPrcDestructorSet2(lbl_1_bss_100, fn_1_8DAC); + *((u32 *)&lbl_1_bss_100->user_data) = 7; + HuAudFXPlay(866); + while(((u32)lbl_1_bss_100->user_data & 0x40000000) == 0) { + HuPrcVSleep(); + } +} + +void fn_1_8244(u16 arg0) +{ + float temp_f31; + float temp_f30; + float temp_f29; + Vec spC; + + s32 temp_r31; + s32 temp_r30; + if(arg0) { + fn_1_8570(); + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelMotionStart(lbl_1_bss_18A[temp_r31], 3, 0); + } + temp_f31 = 0; + temp_f29 = 20; + spC.x = -0.02f; + spC.y = -0.02f; + spC.z = -0.02f; + for(temp_r30=0; temp_r30<3;) { + temp_f30 = temp_f29-((7.0f/60.0f)*(0.25f*(temp_f31*temp_f31))); + temp_f31++; + temp_r30 = 0; + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_160[temp_r31].y += temp_f30; + BoardModelPosSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_160[temp_r31]); + if(temp_f30 < 0.0f) { + VECAdd(&lbl_1_bss_118[temp_r31], &spC, &lbl_1_bss_118[temp_r31]); + if(lbl_1_bss_118[temp_r31].x < 0.0f) { + lbl_1_bss_118[temp_r31].x = 0.0f; + } + if(lbl_1_bss_118[temp_r31].y < 0.0f) { + lbl_1_bss_118[temp_r31].y = 0.0f; + } + if(lbl_1_bss_118[temp_r31].z < 0.0f) { + lbl_1_bss_118[temp_r31].z = 0.0f; + } + BoardModelScaleSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_118[temp_r31]); + if(lbl_1_bss_118[temp_r31].x == 0.0f) { + temp_r30++; + } + } + + + } + HuPrcVSleep(); + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelVisibilitySet(lbl_1_bss_18A[temp_r31], 0); + } +} + +void fn_1_8570(void) +{ + u32 temp_r31; + temp_r31 = (u32)lbl_1_bss_100->user_data; + temp_r31 |= 0x20000000; + *(u32 *)&lbl_1_bss_100->user_data = temp_r31; + while(((u32)lbl_1_bss_100->user_data & 0x80000000) == 0) { + HuPrcVSleep(); + } + HuPrcKill(lbl_1_bss_100); + lbl_1_bss_100 = NULL; +} + +void fn_1_8E38(ModelData *model, ParticleData *particle, Mtx matrix); + +void fn_1_85FC(void) +{ + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + + Vec sp20[3]; + Vec sp14; + float sp8[3]; + s32 temp_r31; + u32 temp_r30; + u32 temp_r29; + s32 temp_r28; + ParticleData *temp_r27; + temp_r30 = (u32)HuPrcCurrentGet()->user_data; + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + BoardModelPosGet(lbl_1_bss_18A[temp_r31], &sp20[temp_r31]); + sp20[temp_r31].y += 50.0f; + sp8[temp_r31] = 0.0f; + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + sp14.x = sp14.y = sp14.z = sp8[temp_r31]; + BoardModelScaleSetV(lbl_1_bss_184[temp_r31], &sp14); + BoardModelVisibilitySet(lbl_1_bss_184[temp_r31], 1); + temp_f28 = 130.0f+sp20[temp_r31].y; + if(temp_r30 & 0x10000000) { + lbl_1_bss_CC[temp_r31] = Hu3DParticleCreate(lbl_1_bss_C8, 100); + temp_r27 = Hu3DData[lbl_1_bss_CC[temp_r31]].unk_120; + temp_r27->unk_02 = lbl_1_bss_184[temp_r31]; + Hu3DParticleHookSet(lbl_1_bss_CC[temp_r31], fn_1_8E38); + Hu3DParticleColSet(lbl_1_bss_CC[temp_r31], 255, 255, 0); + Hu3DModelPosSet(lbl_1_bss_CC[temp_r31], 0, 0, 0); + Hu3DParticleBlendModeSet(lbl_1_bss_CC[temp_r31], 1); + Hu3DModelLayerSet(lbl_1_bss_CC[temp_r31], 2); + } + } + } + temp_f31 = 12; + temp_f29 = 0.05f; + while(1) { + temp_r28 = 0; + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + temp_r28++; + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + sp20[temp_r31].y += temp_f31; + if(sp20[temp_r31].y >= temp_f28) { + sp20[temp_r31].y = temp_f28; + temp_r28--; + } + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + sp8[temp_r31] += temp_f29; + if(sp8[temp_r31] > 1.0f) { + sp8[temp_r31] = 1.0f; + } + sp14.x = sp14.y = sp14.z = sp8[temp_r31]; + BoardModelScaleSetV(lbl_1_bss_184[temp_r31], &sp14); + } + } + temp_f31 *= 0.92f; + if(temp_r28 == 0) { + break; + } + HuPrcVSleep(); + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + sp8[temp_r31] = 1.0f; + sp14.x = sp14.y = sp14.z = sp8[temp_r31]; + BoardModelScaleSetV(lbl_1_bss_184[temp_r31], &sp14); + } + } + temp_r30 |= 0x40000000; + *((u32 *)&HuPrcCurrentGet()->user_data) = temp_r30; + temp_f30 = 0; + while(1) { + + temp_r30 = (u32)HuPrcCurrentGet()->user_data; + if(temp_r30 & 0x20000000) { + break; + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + sp20[temp_r31].y += sind(temp_f30)*0.25f; + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + } + + } + temp_f30 += 5.0f; + if(temp_f30 >= 360.0f) { + temp_f30 -= 360.0f; + } + + HuPrcVSleep(); + } + temp_f31 = -12; + temp_f29 = -0.05f; + while(1) { + temp_r28 = 0; + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + temp_r28++; + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + sp20[temp_r31].y += temp_f31; + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + sp8[temp_r31] += temp_f29; + if(sp8[temp_r31] < 0.0f) { + sp8[temp_r31] = 0.0f; + } + if(sp8[temp_r31] == 0.0f) { + temp_r28--; + } + sp14.x = sp14.y = sp14.z = sp8[temp_r31]; + BoardModelScaleSetV(lbl_1_bss_184[temp_r31], &sp14); + } + } + temp_f31 *= 0.92f; + if(temp_r28 == 0) { + break; + } + HuPrcVSleep(); + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + sp14.x = sp14.y = sp14.z = 1.0f; + BoardModelScaleSetV(lbl_1_bss_184[temp_r31], &sp14); + BoardModelVisibilitySet(lbl_1_bss_184[temp_r31], 0); + } + } + temp_r30 |= 0x80000000; + *((u32 *)&HuPrcCurrentGet()->user_data) = temp_r30; + while(1) { + HuPrcVSleep(); + } +} + +void fn_1_8DAC(void) +{ + s32 temp_r31; + u32 temp_r30 = (u32)HuPrcCurrentGet()->user_data; + u32 temp_r29; + if(temp_r30 & 0x10000000) { + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + Hu3DModelKill(lbl_1_bss_CC[temp_r31]); + } + } + } +} + +void fn_1_8E38(ModelData *model, ParticleData *particle, Mtx matrix) +{ + Vec sp8; + f32 temp_f30; + f32 temp_f29; + f32 temp_f31; + HsfanimStruct01* var_r31; + s32 i, j; + + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + var_r31->unk40.a = 0; + var_r31->unk2C = 0.0f; + } + particle->unk_00 = 0; + } + + BoardModelScaleGet(particle->unk_02, &sp8); + temp_f31 = sp8.x; + BoardModelPosGet(particle->unk_02, &sp8); + + for (i = 0; i < 22; i++) { + var_r31 = particle->unk_48; + for (j = 0; j < particle->unk_30; j++, var_r31++) { + if (0.0f == var_r31->unk2C) { + break; + } + } + if (j != particle->unk_30) { + temp_f30 = 360.0f * ((1.0f/255.0f) * frand8()); + temp_f29 = temp_f31 * (20.0f + (60.0f * ((1.0f/255.0f) * frand8()))); + var_r31->unk34.x = (sp8.x + (temp_f29 * sind(temp_f30))); + var_r31->unk34.z = (sp8.z + (temp_f29 * cosd(temp_f30))); + var_r31->unk34.y = (sp8.y + (temp_f31 * (-30.0f + (40.0f * ((1.0f/255.0f) * frand8()))))); + var_r31->unk08.x = (0.5f + (3.0f * ((1.0f/255.0f) * frand8()))); + var_r31->unk08.y = (0.3f + (2.0f * ((1.0f/255.0f) * frand8()))); + var_r31->unk40.a = 180; + var_r31->unk2C = (15.0f * temp_f31); + } + } + + var_r31 = particle->unk_48; + + for (i = 0; i < particle->unk_30; i++, var_r31++) { + if (0.0f != var_r31->unk2C) { + var_r31->unk34.y = (var_r31->unk34.y - var_r31->unk08.x); + var_r31->unk2C = (var_r31->unk2C - var_r31->unk08.y); + if (var_r31->unk2C <= 0.0f) { + var_r31->unk2C = 0.0f; + } + } + } +} diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index afb983f6..e672440f 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -19,6 +19,7 @@ #include "game/hsfmotion.h" #include "game/pad.h" #include "game/frand.h" +#include "ext_math.h" typedef struct someBits { /* 0x00 */ struct { @@ -939,7 +940,7 @@ void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix) { HsfanimStruct01* var_r31; s32 i, j; - if (particle->unk_34 == 0U) { + if (particle->unk_34 == 0) { var_r31 = particle->unk_48; for (i = 0; i < particle->unk_30; i++, var_r31++) { var_r31->unk40.a = 0; @@ -952,7 +953,7 @@ void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix) { temp_f31 = sp8.x; BoardModelPosGet(particle->unk_02, &sp8); - for (i = 0; i < 0x16; i++) { + for (i = 0; i < 22; i++) { var_r31 = particle->unk_48; for (j = 0; j < particle->unk_30; j++, var_r31++) { if (0.0f == var_r31->unk2C) { @@ -960,13 +961,13 @@ void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix) { } } if (j != particle->unk_30) { - temp_f30 = 360.0f * (0.003921569f * frand8()); - temp_f29 = temp_f31 * (20.0f + (60.0f * (0.003921569f * frand8()))); - var_r31->unk34.x = (sp8.x + (temp_f29 * sin((M_PI * temp_f30) / 180.0))); - var_r31->unk34.z = (sp8.z + (temp_f29 * cos((M_PI * temp_f30) / 180.0))); - var_r31->unk34.y = (sp8.y + (temp_f31 * (-30.0f + (40.0f * (0.003921569f * frand8()))))); - var_r31->unk08.x = (0.5f + (3.0f * (0.003921569f * frand8()))); - var_r31->unk08.y = (0.3f + (2.0f * (0.003921569f * frand8()))); + temp_f30 = 360.0f * ((1.0f/255.0f) * frand8()); + temp_f29 = temp_f31 * (20.0f + (60.0f * ((1.0f/255.0f) * frand8()))); + var_r31->unk34.x = (sp8.x + (temp_f29 * sind(temp_f30))); + var_r31->unk34.z = (sp8.z + (temp_f29 * cosd(temp_f30))); + var_r31->unk34.y = (sp8.y + (temp_f31 * (-30.0f + (40.0f * ((1.0f/255.0f) * frand8()))))); + var_r31->unk08.x = (0.5f + (3.0f * ((1.0f/255.0f) * frand8()))); + var_r31->unk08.y = (0.3f + (2.0f * ((1.0f/255.0f) * frand8()))); var_r31->unk40.a = 180; var_r31->unk2C = (15.0f * temp_f31); } From d06c30c46e32816ce45fc0dbe84b13d2ba5b57e8 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 11 Jun 2024 13:12:18 -0500 Subject: [PATCH 22/23] Finish w02dll --- config/GMPE01_00/rels/w02Dll/symbols.txt | 116 ++--- configure.py | 2 +- include/REL/w02Dll.h | 8 +- src/REL/w02Dll/main.c | 4 +- src/REL/w02Dll/shuffleboard.c | 585 +++++++++++++++++++++++ 5 files changed, 652 insertions(+), 63 deletions(-) create mode 100644 src/REL/w02Dll/shuffleboard.c diff --git a/config/GMPE01_00/rels/w02Dll/symbols.txt b/config/GMPE01_00/rels/w02Dll/symbols.txt index 239369db..8aa80e00 100644 --- a/config/GMPE01_00/rels/w02Dll/symbols.txt +++ b/config/GMPE01_00/rels/w02Dll/symbols.txt @@ -244,64 +244,64 @@ lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 scope:local data: lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 scope:local data:float lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 scope:local data:float lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 scope:local data:double -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 data:float -lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 data:float -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_310 = .rodata:0x00000310; // type:object size:0x8 data:double -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:0x8 data:double -lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x8 data:double -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:0x8 data:double -lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 data:float -lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 data:float -lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 data:float -lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 data:float -lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 data:float -lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 data:float -lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 data:float -lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 data:float -lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 data:float -lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 data:float -lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 data:float -lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 data:float -lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 data:float -lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 data:float -lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 data:float -lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x8 data:double -lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x8 data:double -lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x8 data:double -lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 data:float -lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 data:float -lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 data:float -lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 data:float -lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 data:float -lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 data:float -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_2F0 = .rodata:0x000002F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 scope:local data:float +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_310 = .rodata:0x00000310; // type:object size:0x8 scope:local data:double +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:0x8 scope:local data:double +lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x8 scope:local data:double +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:0x8 scope:local data:double +lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 scope:local data:float +lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 scope:local data:float +lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 scope:local data:float +lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 scope:local data:float +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:0x4 scope:local data:float diff --git a/configure.py b/configure.py index 89f2bba3..b86ac90e 100644 --- a/configure.py +++ b/configure.py @@ -1488,7 +1488,7 @@ config.libs = [ Object(Matching, "REL/w02Dll/gamble.c"), Object(Matching, "REL/w02Dll/mg_coin.c"), Object(Matching, "REL/w02Dll/mg_item.c"), - Object(NonMatching, "REL/w02Dll/shuffleboard.c"), + Object(Matching, "REL/w02Dll/shuffleboard.c"), Object(Matching, "REL/w02Dll/roulette.c"), }, ), diff --git a/include/REL/w02Dll.h b/include/REL/w02Dll.h index ca42e815..b62d4a44 100644 --- a/include/REL/w02Dll.h +++ b/include/REL/w02Dll.h @@ -45,6 +45,10 @@ typedef struct m02_dice { } m02GenDice; +extern s16 lbl_1_bss_2E; +extern s16 lbl_1_bss_2C; +extern Vec lbl_1_bss_20; +extern Vec lbl_1_bss_14; extern s16 lbl_1_bss_30[0x10]; // Model List extern s16 lbl_1_data_286; @@ -74,8 +78,8 @@ extern void fn_1_5D28(); extern void fn_1_5F90(); extern void fn_1_79BC(s16 *arg0); extern void fn_1_8244(u16 arg0); -extern void fn_1_9250(); -extern void fn_1_93C8(s32 spaceFlag); +extern s32 fn_1_9250(); +extern void fn_1_93C8(u32 arg0); extern void fn_1_BC1C(); extern s32 fn_1_BE88(); extern s32 fn_1_C108(s32); diff --git a/src/REL/w02Dll/main.c b/src/REL/w02Dll/main.c index d50f3d08..af50d141 100644 --- a/src/REL/w02Dll/main.c +++ b/src/REL/w02Dll/main.c @@ -23,8 +23,8 @@ s16 lbl_1_bss_30[0x10]; // Model List s16 lbl_1_bss_2E; s16 lbl_1_bss_2C; -Point3d lbl_1_bss_20; -Point3d lbl_1_bss_14; +Vec lbl_1_bss_20; +Vec lbl_1_bss_14; s32* lbl_1_bss_10; s16 lbl_1_bss_8[4]; // Item List Process* lbl_1_bss_4; diff --git a/src/REL/w02Dll/shuffleboard.c b/src/REL/w02Dll/shuffleboard.c new file mode 100644 index 00000000..2d3d0ff9 --- /dev/null +++ b/src/REL/w02Dll/shuffleboard.c @@ -0,0 +1,585 @@ +#include "REL/w02Dll.h" +#include "game/audio.h" +#include "game/pad.h" +#include "game/objsub.h" +#include "game/frand.h" +#include "game/chrman.h" + +#include "ext_math.h" + + +Process *lbl_1_bss_378; +Process *lbl_1_bss_374; +s16 lbl_1_bss_370; +s16 lbl_1_bss_36E; +s16 lbl_1_bss_36C; +s16 lbl_1_bss_36A; +s16 lbl_1_bss_34C[15]; +Vec lbl_1_bss_298[15]; +Vec lbl_1_bss_1E4[15]; +s16 lbl_1_bss_1C4[15]; +s16 lbl_1_bss_1C0[2]; +float lbl_1_bss_1BC; +Vec lbl_1_bss_1B0; +s16 lbl_1_bss_1AC; +Vec lbl_1_bss_1A0; + +s32 lbl_1_data_490[8] = { + 0x0076002E, + 0x0076002F, + 0x00760030, + 0x00760031, + 0x00760032, + 0x00760033, + 0x00760034, + 0x00760035 +}; + +s32 lbl_1_data_4B0[8] = { + 0x00760026, + 0x00760027, + 0x00760028, + 0x00760029, + 0x0076002A, + 0x0076002B, + 0x0076002C, + 0x0076002D +}; + +s32 fn_1_9250(void) +{ + s32 temp_r31; + Vec sp14; + Vec sp8; + BoardModelVisibilitySet(lbl_1_bss_30[13], 1); + BoardModelVisibilitySet(lbl_1_bss_30[14], 1); + sp8.x = sp8.y = sp8.z = 0; + BoardModelRotSetV(lbl_1_bss_30[13], &sp8); + BoardModelRotSetV(lbl_1_bss_30[14], &sp8); + BoardModelPosSetV(lbl_1_bss_30[13], &lbl_1_bss_20); + BoardModelPosSetV(lbl_1_bss_30[14], &lbl_1_bss_14); + BoardModelVisibilitySet(lbl_1_bss_2E, 1); + BoardModelVisibilitySet(lbl_1_bss_2C, 1); + temp_r31 = BoardSpaceFlagSearch(0, 0x200); + BoardSpacePosGet(0, temp_r31, &sp14); + BoardModelPosSetV(lbl_1_bss_2E, &sp14); + BoardModelRotSetV(lbl_1_bss_2E, &sp8); + temp_r31 = BoardSpaceFlagSearch(0, 0x400); + BoardSpacePosGet(0, temp_r31, &sp14); + BoardModelPosSetV(lbl_1_bss_2C, &sp14); + BoardModelRotSetV(lbl_1_bss_2C, &sp8); + return 1; +} + +s32 fn_1_94AC(void); +void fn_1_94C0(void); + +void fn_1_93C8(u32 arg0) +{ + BoardEventFlagSet(); + if(arg0 < 2) { + lbl_1_bss_370 = 0; + } else { + lbl_1_bss_370 = 1; + } + lbl_1_bss_36E = GWSystem.player_curr; + BoardPlayerPostTurnHookSet(lbl_1_bss_36E, fn_1_9250); + lbl_1_bss_378 = HuPrcCreate(fn_1_94C0, 8196, 8192, 0); + HuPrcDestructorSet2(lbl_1_bss_378, (void *)fn_1_94AC); + while(lbl_1_bss_378) { + HuPrcVSleep(); + } + BoardEventFlagReset(); +} + +s32 fn_1_94AC(void) +{ + lbl_1_bss_378 = NULL; +} + +void fn_1_98D8(void); +void fn_1_9EC4(void); +void fn_1_A558(void); +void fn_1_A8E8(void); +void fn_1_B450(s32 arg0); + +void fn_1_94C0(void) +{ + s32 temp_r31; + s32 temp_r30; + Vec sp10; + float sp8[2]; + if(lbl_1_bss_370) { + BoardModelVisibilitySet(lbl_1_bss_2E, 0); + BoardModelVisibilitySet(lbl_1_bss_30[13], 0); + lbl_1_bss_36A = lbl_1_bss_30[14]; + lbl_1_bss_36C = lbl_1_bss_2C; + sp10.x = sp10.z = 0; + sp10.y = -90; + temp_r30 = BoardSpaceFlagSearch(0, 0x40); + } else { + BoardModelVisibilitySet(lbl_1_bss_2C, 0); + BoardModelVisibilitySet(lbl_1_bss_30[14], 0); + lbl_1_bss_36A = lbl_1_bss_30[13]; + lbl_1_bss_36C = lbl_1_bss_2E; + sp10.x = sp10.z = 0; + sp10.y = 90; + temp_r30 = BoardSpaceFlagSearch(0, 0x100); + } + lbl_1_bss_1C0[0] = BoardPlayerMotionCreate(lbl_1_bss_36E, lbl_1_data_490[GWPlayer[lbl_1_bss_36E].character]); + lbl_1_bss_1C0[1] = BoardPlayerMotionCreate(lbl_1_bss_36E, lbl_1_data_4B0[GWPlayer[lbl_1_bss_36E].character]); + fn_1_98D8(); + BoardModelRotSetV(lbl_1_bss_36A, &sp10); + BoardCameraMoveSet(0); + BoardCameraTargetPlayerSet(lbl_1_bss_36E); + BoardCameraRotSet(-10, -sp10.y); + BoardCameraZoomSet(900); + BoardStatusShowSetAll(0); + HuWinMesMaxSizeGet(1, sp8, 0x13001C); + lbl_1_bss_1AC = HuWinCreate(-10000, 400, sp8[0], sp8[1], 0); + HuWinMesSet(lbl_1_bss_1AC, 0x13001C); + HuWinBGTPLvlSet(lbl_1_bss_1AC, 0); + HuWinMesSpeedSet(lbl_1_bss_1AC, 0); + fn_1_9EC4(); + BoardAudSeqPause(0, 1, 1000); + HuPrcSleep(45); + BoardCameraTargetGet(&lbl_1_bss_1A0); + BoardCameraTargetModelSet(-1); + fn_1_A558(); + HuAudPlayerVoicePlay(lbl_1_bss_36E, 291); + fn_1_A8E8(); + HuPrcKill(lbl_1_bss_374); + for(temp_r31=0; temp_r31<15; temp_r31++) { + BoardModelKill(lbl_1_bss_34C[temp_r31]); + + } + BoardStatusShowSetAll(1); + BoardCameraMoveSet(0); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + BoardCameraMoveSet(1); + BoardAudSeqPause(0, 0, 1000); + fn_1_B450(temp_r30); + BoardPlayerMotionKill(lbl_1_bss_36E, lbl_1_bss_1C0[0]); + BoardPlayerMotionKill(lbl_1_bss_36E, lbl_1_bss_1C0[1]); + HuPrcEnd(); +} + +void fn_1_98D8(void) +{ + Vec sp1C; + Vec sp10; + float temp_f27; + float temp_f26; + float temp_f23; + float temp_f22; + BoardModelPosGet(lbl_1_bss_36C, &lbl_1_bss_1B0); + BoardPlayerPosGet(lbl_1_bss_36E, &sp1C); + temp_f23 = atan2d(lbl_1_bss_1B0.x-sp1C.x, lbl_1_bss_1B0.z-sp1C.z); + BoardPlayerMotBlendSet(lbl_1_bss_36E, temp_f23, 15); + while(!BoardPlayerMotBlendCheck(lbl_1_bss_36E)) { + HuPrcVSleep(); + } + BoardCameraTargetModelSet(-1); + temp_f26 = VECDistanceXZ(&lbl_1_bss_1B0, &sp1C); + VECSubtract(&lbl_1_bss_1B0, &sp1C, &sp10); + VECNormalize(&sp10, &sp10); + VECScale(&sp10, &sp10, temp_f26/45.0f); + BoardPlayerMotionStart(lbl_1_bss_36E, 4, 0); + + temp_f27 = 0; + temp_f22 = 15; + while(1) { + sp10.y = temp_f22-(0.075f*(0.25f*(temp_f27*temp_f27))); + temp_f27++; + VECAdd(&sp1C, &sp10, &sp1C); + temp_f26 = VECDistanceXZ(&lbl_1_bss_1B0, &sp1C); + if(temp_f26 < 5.0f) { + sp10.x = sp10.z = 0; + sp1C.x = lbl_1_bss_1B0.x; + sp1C.z = lbl_1_bss_1B0.z; + } + if(sp1C.y <= lbl_1_bss_1B0.y+8.5f) { + sp1C.y = lbl_1_bss_1B0.y+8.5f; + break; + } + BoardPlayerPosSetV(lbl_1_bss_36E, &sp1C); + HuPrcVSleep(); + } + BoardPlayerPosSetV(lbl_1_bss_36E, &sp1C); + BoardPlayerIdleSet(lbl_1_bss_36E); + HuPrcSleep(8); + if(lbl_1_bss_370) { + BoardPlayerMotBlendSet(lbl_1_bss_36E, -90, 15); + } else { + BoardPlayerMotBlendSet(lbl_1_bss_36E, 90, 15); + } + while(!BoardPlayerMotBlendCheck(lbl_1_bss_36E)) { + HuPrcVSleep(); + } + BoardPlayerMotionShiftSet(lbl_1_bss_36E, lbl_1_bss_1C0[0], 0, 10, 0x40000001); + HuPrcSleep(20); + +} + +void fn_1_BB30(void); + +void fn_1_9EC4(void) +{ + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + float temp_f27; + + s32 sp80[15]; + float sp44[15]; + float sp8[15]; + s32 temp_r31; + s32 temp_r30; + for(temp_r31=0; temp_r31<15; temp_r31++) { + lbl_1_bss_34C[temp_r31] = BoardModelCreate(0x7000A, NULL, 1); + BoardModelVisibilitySet(lbl_1_bss_34C[temp_r31], 0); + lbl_1_bss_1C4[temp_r31] = 1; + } + temp_f31 = ((1.0f/255.0f)*(90.0f*frand8()))+45; + if(frandBool()) { + temp_f31 += 180.0f; + } + if(lbl_1_bss_370) { + temp_f30 = 1430; + temp_f29 = -1730; + } else { + temp_f30 = -1730; + temp_f29 = 1430; + } + temp_f27 = (temp_f29-temp_f30)/15.0f; + for(temp_r31=0; temp_r31<15; temp_r31++) { + lbl_1_bss_298[temp_r31].x = temp_f30+(temp_f27*temp_r31); + lbl_1_bss_298[temp_r31].z = -2100+(190*sind(temp_f31)); + lbl_1_bss_298[temp_r31].y = (500.0f+(50.0f+lbl_1_bss_1B0.y))+(temp_r31*50)+(400.0f*((1.0f/255.0f)*frand8())); + temp_f31 += 60.0f; + lbl_1_bss_1E4[temp_r31].x = lbl_1_bss_1E4[temp_r31].z = 0; + lbl_1_bss_1E4[temp_r31].y = (360.0f*((1.0f/255.0f)*frand8())); + BoardModelVisibilitySet(lbl_1_bss_34C[temp_r31], 1); + BoardModelPosSetV(lbl_1_bss_34C[temp_r31], &lbl_1_bss_298[temp_r31]); + BoardModelRotSetV(lbl_1_bss_34C[temp_r31], &lbl_1_bss_1E4[temp_r31]); + } + lbl_1_bss_374 = HuPrcCreate(fn_1_BB30, 8196, 2048, 0); + for(temp_r31=0; temp_r31<15; temp_r31++) { + sp8[temp_r31] = sp44[temp_r31] = 0; + sp80[temp_r31] = 1; + } + while(1) { + temp_r30 = 0; + for(temp_r31=0; temp_r31<15; temp_r31++) { + if(sp80[temp_r31] == 1) { + temp_f28 = sp44[temp_r31]-((1.0f/15.0f)*(0.25f*(sp8[temp_r31]*sp8[temp_r31]))); + lbl_1_bss_298[temp_r31].y += temp_f28; + if(lbl_1_bss_298[temp_r31].y <= 50.0f+lbl_1_bss_1B0.y) { + lbl_1_bss_298[temp_r31].y = 50.0f+lbl_1_bss_1B0.y; + sp44[temp_r31] = -temp_f28*0.2f; + sp8[temp_r31] = 0; + if(sp44[temp_r31] < 5.0f) { + sp44[temp_r31] = 0; + sp80[temp_r31] = 0; + } + HuAudFXPlay(18); + } + BoardModelPosSetV(lbl_1_bss_34C[temp_r31], &lbl_1_bss_298[temp_r31]); + sp8[temp_r31]++; + } else { + temp_r30++; + } + } + if(temp_r30 == 15) { + break; + } + HuPrcVSleep(); + } +} + +void fn_1_A558(void) +{ + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f31; + s32 temp_r31; + BoardMusStart(1, 20, 127, 0); + BoardModelPosGet(lbl_1_bss_36A, &sp2C); + BoardModelMotionStart(lbl_1_bss_36A, 2, 0x40000001); + for(temp_r31=0; temp_r31<60; temp_r31++) { + if(lbl_1_bss_370) { + sp2C.x += 5.0f; + } else { + sp2C.x -= 5.0f; + } + BoardModelPosSetV(lbl_1_bss_36A, &sp2C); + HuPrcVSleep(); + } + BoardModelRotGet(lbl_1_bss_36A, &sp14); + BoardPlayerPosGet(lbl_1_bss_36E, &sp20); + VECSubtract(&sp20, &sp2C, &sp8); + temp_f31 = VECMag(&sp8); + sp14.y = atan2d(lbl_1_bss_298[0].x-sp20.x, lbl_1_bss_298[0].z-sp20.z); + sp2C.x = sp20.x+(temp_f31*sind(sp14.y-180.0f)); + sp2C.z = sp20.z+(temp_f31*cosd(sp14.y-180.0f)); + BoardModelPosSetV(lbl_1_bss_36A, &sp2C); + BoardModelRotSetV(lbl_1_bss_36A, &sp14); + lbl_1_bss_1BC = sp14.y; + HuPrcSleep(20); + BoardModelMotionStart(lbl_1_bss_36A, 3, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_bss_36A, 4.0f); + VECSubtract(&sp20, &sp2C, &sp8); + temp_f31 = ((VECMag(&sp8)-50)-50)/20; + VECNormalize(&sp8, &sp8); + VECScale(&sp8, &sp8, temp_f31); + for(temp_r31=0; temp_r31<20; temp_r31++) { + VECAdd(&sp2C, &sp8, &sp2C); + BoardModelPosSetV(lbl_1_bss_36A, &sp2C); + HuPrcVSleep(); + } + BoardModelMotionStart(lbl_1_bss_36A, 1, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_bss_36A, 1.0f); + omVibrate(lbl_1_bss_36E, 12, 4, 2); + HuAudFXPlay(1069); +} + +void fn_1_B8A8(s8 *arg0); + +void fn_1_A8E8(void) +{ + Vec sp28; + Vec sp1C; + Vec sp10; + s8 sp8; + float temp_f29; + float temp_f28; + float temp_f27; + float temp_f26; + float temp_f25; + s16 temp_r31; + s8 temp_r30; + s16 temp_r29; + temp_r29 = GWPlayer[lbl_1_bss_36E].port; + if(lbl_1_bss_370) { + temp_f27 = 2430; + temp_f26 = -1830; + } else { + temp_f27 = -2730; + temp_f26 = 1530; + } + temp_f25 = (temp_f26-temp_f27)/2; + while(1) { + temp_r30 = 0; + BoardPlayerPosGet(lbl_1_bss_36E, &sp28); + if(GWPlayer[lbl_1_bss_36E].com) { + fn_1_B8A8(&sp8); + } else { + sp8 = HuPadStkX[temp_r29]; + } + temp_f28 = -sp8*0.025f; + if(lbl_1_bss_370) { + if(lbl_1_bss_1BC < -90.0f) { + lbl_1_bss_1BC += temp_f28; + if(lbl_1_bss_1BC < -165.0f) { + lbl_1_bss_1BC = -165.0f; + } + if(lbl_1_bss_1BC > -105.0f) { + lbl_1_bss_1BC = -105.0f; + } + } else { + lbl_1_bss_1BC += temp_f28; + if(lbl_1_bss_1BC < -75.0f) { + lbl_1_bss_1BC = -75.0f; + } + if(lbl_1_bss_1BC > -15.0f) { + lbl_1_bss_1BC = -15.0f; + } + } + } else { + if(lbl_1_bss_1BC > 90.0f) { + lbl_1_bss_1BC += temp_f28; + if(lbl_1_bss_1BC > 165.0f) { + lbl_1_bss_1BC = 165.0f; + } + if(lbl_1_bss_1BC < 105.0f) { + lbl_1_bss_1BC = 105.0f; + } + } else { + lbl_1_bss_1BC += temp_f28; + if(lbl_1_bss_1BC > 75.0f) { + lbl_1_bss_1BC = 75.0f; + } + if(lbl_1_bss_1BC < 15.0f) { + lbl_1_bss_1BC = 15.0f; + } + } + } + temp_f29 = 4.0+(15.0*(1.0-fabs((sp28.x-(temp_f25+temp_f27))/temp_f25))); + sp28.x += temp_f29*sind(lbl_1_bss_1BC); + sp28.z += temp_f29*cosd(lbl_1_bss_1BC); + if(lbl_1_bss_370) { + if(sp28.z-50 < -2340) { + sp28.z = -2290; + lbl_1_bss_1BC = (-90-lbl_1_bss_1BC)+-90; + temp_r30 = 1; + } else if(sp28.z+50 > -1860) { + lbl_1_bss_1BC = (-90-lbl_1_bss_1BC)+-90; + sp28.z = -1910; + temp_r30 = 1; + } + } else { + if(sp28.z-50 < -2340) { + sp28.z = -2290; + lbl_1_bss_1BC = (90-lbl_1_bss_1BC)+90; + temp_r30 = 1; + } else if(sp28.z+50 > -1860) { + lbl_1_bss_1BC = (90-lbl_1_bss_1BC)+90; + sp28.z = -1910; + temp_r30 = 1; + } + } + BoardPlayerPosSetV(lbl_1_bss_36E, &sp28); + sp28.y -= 8.5f; + BoardModelPosSetV(lbl_1_bss_36C, &sp28); + if(temp_r30) { + HuAudFXPlay(1060); + } + BoardPlayerRotGet(lbl_1_bss_36E, &sp1C); + sp1C.y += 1.25f*temp_f29; + if(sp1C.y >= 360.0f) { + sp1C.y -= 360.0f; + } + BoardPlayerRotSetV(lbl_1_bss_36E, &sp1C); + BoardModelRotGet(lbl_1_bss_36C, &sp1C); + sp1C.y += 1.25f*temp_f29; + if(sp1C.y >= 360.0f) { + sp1C.y -= 360.0f; + } + BoardModelRotSetV(lbl_1_bss_36C, &sp1C); + for(temp_r31=0; temp_r31<15; temp_r31++) { + if(lbl_1_bss_1C4[temp_r31] == 0) { + continue; + } + BoardModelPosGet(lbl_1_bss_34C[temp_r31], &sp10); + if(VECDistanceXZ(&sp10, &sp28) < 100.0f) { + lbl_1_bss_1C4[temp_r31] = 0; + BoardModelVisibilitySet(lbl_1_bss_34C[temp_r31], 0); + CharModelCoinEffectCreate(1, &sp10); + BoardPlayerCoinsAdd(lbl_1_bss_36E, 1); + HuAudFXPlay(7); + } + } + lbl_1_bss_1A0.x = sp28.x; + BoardCameraTargetSet(lbl_1_bss_1A0.x, lbl_1_bss_1A0.y, lbl_1_bss_1A0.z); + if(temp_f29 <= 3.0f) { + break; + } + HuPrcVSleep(); + } + HuWinKill(lbl_1_bss_1AC); + BoardPlayerMotionStart(lbl_1_bss_36E, lbl_1_bss_1C0[1], 0); + BoardPlayerMotionEndWait(lbl_1_bss_36E); + BoardPlayerMotionShiftSet(lbl_1_bss_36E, 6, 0, 15, 0x40000001); + HuPrcSleep(40); + BoardAudSeqFadeOut(1, 1000); + HuPrcSleep(70); + BoardPlayerMotBlendSet(lbl_1_bss_36E, 0, 1); +} + +void fn_1_B450(s32 arg0) +{ + float temp_f27; + float temp_f26; + float temp_f23; + Vec sp28; + Vec sp1C; + Vec sp10; + BoardSpacePosGet(0, arg0, &sp28); + BoardPlayerPosGet(lbl_1_bss_36E, &sp1C); + HuAudPlayerVoicePlay(lbl_1_bss_36E, 290); + temp_f26 = VECDistanceXZ(&sp28, &sp1C); + VECSubtract(&sp28, &sp1C, &sp10); + VECNormalize(&sp10, &sp10); + VECScale(&sp10, &sp10, temp_f26/45.0f); + BoardPlayerMotionStart(lbl_1_bss_36E, 4, 0); + temp_f27 = 0; + temp_f23 = 15; + while(1) { + sp10.y = temp_f23-(0.075f*(0.25f*(temp_f27*temp_f27))); + temp_f27++; + VECAdd(&sp1C, &sp10, &sp1C); + temp_f26 = VECDistanceXZ(&sp28, &sp1C); + if(temp_f26 < 5.0f) { + sp10.x = sp10.z = 0; + sp1C.x = sp28.x; + sp1C.z = sp28.z; + } + if(sp1C.y <= sp28.y) { + sp1C.y = sp28.y; + break; + } + BoardPlayerPosSetV(lbl_1_bss_36E, &sp1C); + HuPrcVSleep(); + } + BoardPlayerPosSetV(lbl_1_bss_36E, &sp1C); + GWPlayer[lbl_1_bss_36E].space_curr = arg0; + BoardPlayerIdleSet(lbl_1_bss_36E); + HuPrcSleep(8); + HuPrcSleep(20); +} + +void fn_1_B8A8(s8 *arg0) +{ + float temp_f29; + float temp_f28; + Vec spC; + s32 temp_r31; + s32 temp_r29; + *arg0 = 0; + BoardPlayerPosGet(lbl_1_bss_36E, &spC); + temp_f29 = -1000; + temp_r29 = -1; + for(temp_r31=0; temp_r31<15; temp_r31++) { + if(lbl_1_bss_1C4[temp_r31] == 0) { + continue; + } + temp_f28 = VECDistanceXZ(&spC, &lbl_1_bss_298[temp_r31]); + if(temp_f28 > temp_f29) { + temp_f29 = temp_f28; + temp_r29 = temp_r31; + } + } + if(temp_r29 >= 0) { + if(spC.z > lbl_1_bss_298[temp_r31].z) { + *arg0 = -70; + } else { + *arg0 = 70; + } + if(lbl_1_bss_370) { + *arg0 = -(*arg0); + } + } +} + +void fn_1_BB30(void) +{ + s32 temp_r31; + while(1) { + for(temp_r31=0; temp_r31<15; temp_r31++) { + if(lbl_1_bss_1C4[temp_r31] == 0) { + continue; + } + lbl_1_bss_1E4[temp_r31].y += 10.0f; + if(lbl_1_bss_1E4[temp_r31].y >= 360.0f) { + lbl_1_bss_1E4[temp_r31].y -= 360.0f; + } + BoardModelRotSetV(lbl_1_bss_34C[temp_r31], &lbl_1_bss_1E4[temp_r31]); + } + HuPrcVSleep(); + } + +} \ No newline at end of file From 3669f59cdb1c6eea4fb1726dd3d42ff2a4dc6fe1 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Thu, 13 Jun 2024 11:50:54 -0500 Subject: [PATCH 23/23] Decompile m431dll/main.c --- config/GMPE01_00/rels/m431Dll/symbols.txt | 164 +- configure.py | 2 +- include/REL/m431Dll.h | 49 + include/game/hsfdraw.h | 2 +- include/game/hsfman.h | 4 +- src/REL/m431Dll/main.c | 2253 +++++++++++++++++++++ src/game/hsfdraw.c | 4 +- src/game/hsfman.c | 26 +- 8 files changed, 2404 insertions(+), 100 deletions(-) create mode 100644 include/REL/m431Dll.h create mode 100644 src/REL/m431Dll/main.c diff --git a/config/GMPE01_00/rels/m431Dll/symbols.txt b/config/GMPE01_00/rels/m431Dll/symbols.txt index 24174c15..10f102a4 100644 --- a/config/GMPE01_00/rels/m431Dll/symbols.txt +++ b/config/GMPE01_00/rels/m431Dll/symbols.txt @@ -94,81 +94,81 @@ fn_1_B4F8 = .text:0x0000B4F8; // type:function size:0x38 fn_1_B530 = .text:0x0000B530; // type:function size:0x28 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 data:double -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 data:double -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 data:double -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 data:float -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 data:float -lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 data:float -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 data:double -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 data:float -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 data:double -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 data:double -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 data:float -lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 data:float -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 data:double -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 data:float -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_100 = .rodata:0x00000100; // type:object size:0x8 data:double -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 data:float -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 data:double -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x1 data:byte -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 data:double -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 data:double -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 data:double -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 scope:local data:double +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 scope:local data:double +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 scope:local data:double +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 scope:local data:float +lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 scope:local data:float +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 scope:local data:double +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 scope:local data:float +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_100 = .rodata:0x00000100; // type:object size:0x8 scope:local data:double +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 scope:local data:float +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 scope:local data:double +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x1 scope:local data:byte +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 scope:local data:double +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 scope:local data:double +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 scope:local data:double +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:float lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float @@ -202,7 +202,8 @@ lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 data:double lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0xC lbl_1_data_C = .data:0x0000000C; // type:object size:0xC -lbl_1_data_18 = .data:0x00000018; // type:object size:0x10 +lbl_1_data_18 = .data:0x00000018; // type:object size:0x4 +lbl_1_data_1C = .data:0x0000001C; // type:object size:0xC lbl_1_data_28 = .data:0x00000028; // type:object size:0xC lbl_1_data_34 = .data:0x00000034; // type:object size:0xC lbl_1_data_40 = .data:0x00000040; // type:object size:0xC @@ -214,12 +215,13 @@ lbl_1_data_114 = .data:0x00000114; // type:object size:0x10 lbl_1_data_124 = .data:0x00000124; // type:object size:0x10 lbl_1_data_134 = .data:0x00000134; // type:object size:0x14 lbl_1_data_148 = .data:0x00000148; // type:object size:0x14 -lbl_1_data_15C = .data:0x0000015C; // type:object size:0x6 data:string +lbl_1_data_15C = .data:0x0000015C; // type:object size:0x6 scope:local data:string lbl_1_data_162 = .data:0x00000162; // type:object size:0x2 data:2byte -lbl_1_data_164 = .data:0x00000164; // type:object size:0x10 data:4byte -lbl_1_data_174 = .data:0x00000174; // type:object size:0x10 data:string -lbl_1_data_184 = .data:0x00000184; // type:object size:0x26 data:string -lbl_1_data_1AA = .data:0x000001AA; // type:object size:0x24 data:string +lbl_1_data_164 = .data:0x00000164; // type:object size:0x4 data:4byte +lbl_1_data_168 = .data:0x00000168; // type:object size:0xC data:float +lbl_1_data_174 = .data:0x00000174; // type:object size:0x10 scope:local data:string +lbl_1_data_184 = .data:0x00000184; // type:object size:0x26 scope:local data:string +lbl_1_data_1AA = .data:0x000001AA; // type:object size:0x24 scope:local data:string lbl_1_data_1D0 = .data:0x000001D0; // type:object size:0x4 data:float lbl_1_data_1D4 = .data:0x000001D4; // type:object size:0x20 lbl_1_data_1F4 = .data:0x000001F4; // type:object size:0x20 diff --git a/configure.py b/configure.py index b86ac90e..39d5c169 100644 --- a/configure.py +++ b/configure.py @@ -1071,7 +1071,7 @@ config.libs = [ "m431Dll", objects={ Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/m431Dll/main.c"), + Object(Matching, "REL/m431Dll/main.c"), Object(NonMatching, "REL/m431Dll/object.c"), }, ), diff --git a/include/REL/m431Dll.h b/include/REL/m431Dll.h new file mode 100644 index 00000000..a886a409 --- /dev/null +++ b/include/REL/m431Dll.h @@ -0,0 +1,49 @@ +#ifndef M431DLL_H +#define M431DLL_H + +#include "game/object.h" + +typedef struct bss_12C_inner { + Vec unk0; + float unkC; + s8 unk10; +} Bss12CInner; + +typedef struct bss_12c_struct { + s16 unk0[2]; + u8 unk4[0x8]; + Vec unkC; + u8 unk18[4]; + Bss12CInner unk1C[2]; + u8 unk44[0xF0]; + s16 unk134[2]; + s16 unk138[2]; +} Bss12CStruct; + +typedef struct bss_61C_work { + u8 unk0[0x4]; + s16 unk4; + s16 unk6[2]; + s16 unkA; + u8 unkC[8]; + struct bss_61C_work *unk14; + u8 unk18[0x46]; + s16 unk5E[8]; + s16 unk6E; + s16 unk70; + s16 unk72; + u8 unk74[0x44]; +} Bss61CWork; + +extern Bss12CStruct lbl_1_bss_12C[4]; +extern omObjData *lbl_1_bss_61C[4]; +extern float lbl_1_data_1D0; + +void fn_1_7ABC(Process *objman); +s32 fn_1_7FB8(s16 arg0); +void fn_1_A7D0(s16 arg0); +void fn_1_A904(s16 arg0); + +s32 fn_1_8474(s16 arg0); + +#endif diff --git a/include/game/hsfdraw.h b/include/game/hsfdraw.h index 6af28ca4..12d6e179 100755 --- a/include/game/hsfdraw.h +++ b/include/game/hsfdraw.h @@ -49,7 +49,7 @@ void Hu3DDrawPreInit(void); void Hu3DDraw(ModelData *arg0, Mtx arg1, Vec *arg2); s32 ObjCullCheck(HsfData *arg0, HsfObject *arg1, Mtx arg2); void Hu3DDrawPost(void); -void MakeDisplayList(s16 arg0, HsfData *arg1); +void MakeDisplayList(s16 arg0, u32 arg1); HsfConstData *ObjConstantMake(HsfObject *arg0, u32 arg1); void mtxTransCat(Mtx arg0, float arg1, float arg2, float arg3); void mtxRotCat(Mtx arg0, float arg1, float arg2, float arg3); diff --git a/include/game/hsfman.h b/include/game/hsfman.h index 7b25cfd9..0c7ee048 100644 --- a/include/game/hsfman.h +++ b/include/game/hsfman.h @@ -32,8 +32,8 @@ typedef struct model_data { u16 unk_26; u16 unk_28[8]; s16 unk_38[8]; - HsfData *unk_48; - HsfData *unk_4C; + u32 unk_48; + u32 unk_4C; u32 attr; u32 motion_attr; Point3d unk_58; diff --git a/src/REL/m431Dll/main.c b/src/REL/m431Dll/main.c new file mode 100644 index 00000000..7d30afcd --- /dev/null +++ b/src/REL/m431Dll/main.c @@ -0,0 +1,2253 @@ +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/msm.h" + +#include "game/object.h" +#include "game/objsub.h" +#include "game/audio.h" +#include "game/wipe.h" +#include "game/pad.h" + +#include "game/sprite.h" +#include "game/minigame_seq.h" +#include "game/gamework_data.h" + +#include "ext_math.h" + +#include "REL/m431Dll.h" + +#include "rel_sqrt_consts.h" + +#define rand16() ((rand8() << 8)|(rand8())) + +typedef struct bss_5C_struct { + s16 unk0[6]; + s16 unkC[2]; + s16 unk10; + s16 unk12; + s16 unk14; + s16 unk16; + float unk18; + float unk1C; + float unk20; + float unk24; + float unk28[2]; + float unk30; + float unk34; +} Bss5CStruct; + +typedef struct camera_view_params { + float zoom; + Vec pos; + Vec rot; +} CameraViewParams; + +Bss5CStruct lbl_1_bss_5C; +s16 lbl_1_bss_34[20]; +omObjData *lbl_1_bss_30; +omObjData *lbl_1_bss_2C; +s16 lbl_1_bss_28; +float lbl_1_bss_20[2]; +float lbl_1_bss_18[2]; +s16 lbl_1_bss_14; +s8 lbl_1_bss_12; +s16 lbl_1_bss_10; +s8 lbl_1_bss_E; +s16 lbl_1_bss_C; +s16 lbl_1_bss_A; +s16 lbl_1_bss_8; +s32 lbl_1_bss_4; +s8 lbl_1_bss_0; + +Vec lbl_1_data_0 = { 800, 1300, 1000 }; +Vec lbl_1_data_C = { 0, 0, 0 }; +GXColor lbl_1_data_18 = { 255, 255, 255, 255 }; +Vec lbl_1_data_1C = { 10, 45, 0}; +Vec lbl_1_data_28 = { 1300, 2500, 1300 }; +Vec lbl_1_data_34 = { 0, 1, 0 }; +Vec lbl_1_data_40 = { 0, 0, -1200 }; + +CameraViewParams lbl_1_data_4C[4] = { + { + 760, + { -324, -97, 0 }, + { -43, 0, 0 } + }, + { + 800, + { 325, -64, 0 }, + { -43, -20, 0 } + }, + { + 1460, + { 0, 57, 0 }, + { -37, 0, 0 } + }, + { + 880, + { -381, 25, 0 }, + { -14, 10, 0 } + } +}; + +s32 lbl_1_data_BC[3] = { + -32, + -2, + 28 +}; + +s32 lbl_1_data_C8[2] = { + 90, + 486 +}; + +void fn_1_424(omObjData *object); +void fn_1_A44(omObjData *object); +void fn_1_2110(omObjData *object); + + +void ModuleProlog(void) +{ + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + Process *temp_r31; + LightData *temp_r30; + CameraData *temp_r29; + + Hu3DLightAllKill(); + lbl_1_bss_28 = Hu3DGLightCreateV(&lbl_1_data_0, &lbl_1_data_C, &lbl_1_data_18); + Hu3DGLightInfinitytSet(lbl_1_bss_28); + temp_r30 = &Hu3DGlobalLight[lbl_1_bss_28]; + temp_r30->unk_00 |= 0x8000; + sp2C.x = sp2C.y = sp2C.z = 0; + Hu3DGLightPosAimSetV(lbl_1_bss_28, &lbl_1_data_0, &sp2C); + Hu3DShadowCreate(45, 20, 10000); + Hu3DShadowTPLvlSet(0.425f); + Hu3DShadowPosSet(&lbl_1_data_28, &lbl_1_data_34, &lbl_1_data_40); + temp_r31 = omInitObjMan(50, 8192); + omGameSysInit(temp_r31); + HuAudSndGrpSet(56); + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 41.5, 5, 5000, 1.2f); + omAddObjEx(temp_r31, 32730, 0, 0, -1, omOutView); + temp_r29 = &Hu3DCamera[0]; + temp_r29->fov = -1; + sp14.x = 0; + sp14.y = 374; + sp14.z = 1086; + sp20.x = 0; + sp20.y = 568; + sp20.z = -1316; + sp8.z = sp20.x-sp14.x; + sp8.y = sp20.y-sp14.y; + sp8.x = sp20.z-sp14.z; + CRot.x = lbl_1_data_4C[0].rot.x; + CRot.y = lbl_1_data_4C[0].rot.y; + CRot.z = lbl_1_data_4C[0].rot.z; + Center.x = lbl_1_data_4C[0].pos.x; + Center.y = lbl_1_data_4C[0].pos.y; + Center.z = lbl_1_data_4C[0].pos.z; + CZoom = lbl_1_data_4C[0].zoom; + omAddObjEx(temp_r31, 1000, 0, 0, -1, fn_1_424); + lbl_1_bss_30 = omAddObjEx(temp_r31, 10, 9, 0, -1, fn_1_A44); + lbl_1_bss_2C = omAddObjEx(temp_r31, 50, 9, 9, -1, fn_1_2110); + Hu3DBGColorSet(0, 0, 0); + fn_1_7ABC(temp_r31); +} + +void fn_1_49C(omObjData *object); + +void fn_1_424(omObjData *object) +{ + if(omSysExitReq || lbl_1_bss_0) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + HuAudSeqAllFadeOut(100); + object->func = fn_1_49C; + } +} + +void fn_1_71B8(s16 arg0); + +void fn_1_49C(omObjData *object) +{ + s16 i; + if(WipeStatGet()) { + return; + } + fn_1_71B8(lbl_1_bss_30->model[0]); + for(i=0; i<6; i++) { + fn_1_71B8(lbl_1_bss_5C.unk0[i]); + } + HuSprGrpKill(lbl_1_bss_30->model[1]); + HuSprGrpKill(lbl_1_bss_30->model[2]); + HuSprGrpKill(lbl_1_bss_30->model[3]); + MGSeqKillAll(); + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + +} + +float fn_1_65CC(float arg0, float arg1, float arg2); + +u8 fn_1_57C(void) +{ + float temp_f31; + float temp_f30; + CameraViewParams *temp_r31; + s32 temp_r30; + temp_r31 = &lbl_1_data_4C[0]; + temp_r30 = 0; + lbl_1_bss_8++; + temp_f30 = lbl_1_bss_8/90.0f; + if(lbl_1_bss_8 > 90) { + lbl_1_bss_8 = 0; + temp_f30 = 1; + temp_r30 = 1; + } + temp_f31 = sind(90*temp_f30)*sind(90*temp_f30); + CZoom = fn_1_65CC(temp_r31[0].zoom, temp_r31[2].zoom, temp_f31); + Center.x = fn_1_65CC(temp_r31[0].pos.x, temp_r31[2].pos.x, temp_f31); + Center.y = fn_1_65CC(temp_r31[0].pos.y, temp_r31[2].pos.y, temp_f31); + Center.z = fn_1_65CC(temp_r31[0].pos.z, temp_r31[2].pos.z, temp_f31); + CRot.x = fn_1_65CC(temp_r31[0].rot.x, temp_r31[2].rot.x, temp_f31); + CRot.y = fn_1_65CC(temp_r31[0].rot.y, temp_r31[2].rot.y, temp_f31); + CRot.z = fn_1_65CC(temp_r31[0].rot.z, temp_r31[2].rot.z, temp_f31); + return temp_r30; +} + +typedef struct work_a44 { + u16 unk0; + s16 unk2; + s16 unk4; + s16 unk6[2]; + s16 unkA; + s32 unkC; + s16 unk10; + s16 unk12; + s16 unk14; + s16 unk16; +} WorkA44; + +s32 fn_1_7B0(void) +{ + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + CameraViewParams *temp_r31; + WorkA44 *temp_r30; + s32 temp_r29; + temp_r30 = lbl_1_bss_30->data; + temp_r31 = &lbl_1_data_4C[0]; + temp_r29 = 0; + lbl_1_bss_8++; + temp_f30 = lbl_1_bss_8/120.0f; + if(lbl_1_bss_8 > 120) { + lbl_1_bss_8 = 120; + temp_f30 = 1; + temp_r29 = 1; + } + temp_f31 = sind(90*temp_f30)*sind(90*temp_f30); + if(temp_r30->unk4 == 0) { + temp_f29 = temp_r31[3].pos.x; + temp_f28 = temp_r31[3].rot.y; + } else { + temp_f29 = -temp_r31[3].pos.x; + temp_f28 = -temp_r31[3].rot.y; + } + CZoom = fn_1_65CC(temp_r31[2].zoom, temp_r31[3].zoom, temp_f31); + Center.x = fn_1_65CC(temp_r31[2].pos.x, temp_f29, temp_f31); + Center.y = fn_1_65CC(temp_r31[2].pos.y, temp_r31[3].pos.y, temp_f31); + Center.z = fn_1_65CC(temp_r31[2].pos.z, temp_r31[3].pos.z, temp_f31); + CRot.x = fn_1_65CC(temp_r31[2].rot.x, temp_r31[3].rot.x, temp_f31); + CRot.y = fn_1_65CC(temp_r31[2].rot.y, temp_f28, temp_f31); + CRot.z = fn_1_65CC(temp_r31[2].rot.z, temp_r31[3].rot.z, temp_f31); + return temp_r29; +} + +typedef void (*unkHook72B4Data18)(struct unk_72B4_data_18 *); +typedef void (*unkHook72B4)(ModelData *, struct work_72B4 *, Mtx); + +typedef struct unk_72B4_data_18 { + Vec unk0; + Vec unkC; + char unk18[16]; + s16 unk28; + s16 unk2A; + s16 unk2C; + unkHook72B4Data18 unk30; + s16 unk34; + float unk38; + Vec unk3C; + Vec unk48; + s16 unk54; + s8 unk56; +} Unk72B4Data18; + +typedef struct work_72B4 { + s16 unk0; + u32 unk4; + u8 unk8; + unkHook72B4 unkC; + AnimData *unk10; + s16 unk14; + Unk72B4Data18 *unk18; + Vec *unk1C; + HsfVector2f *unk20; + GXColor *unk24; + void *unk28; + Vec unk2C[4]; + HsfVector2f *unk5C; + float unk60; + float unk64; +} Work72B4; + +void fn_1_6030(ModelData *arg0, Work72B4 *arg1, Mtx arg2); +s16 fn_1_6C74(AnimData *arg0, s16 arg1, float arg2, s16 arg3, s16 arg4); +void fn_1_7244(s16 arg0, unkHook72B4 arg1); + +void fn_1_10A4(omObjData *object); + +void fn_1_A44(omObjData *object) +{ + float temp_f31; + + s16 temp_r31; + s16 temp_r30; + s16 temp_r28; + + AnimData *temp_r27; + WorkA44 *temp_r26; + s16 temp_r25; + + AnimData *temp_r24; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkA44), MEMORY_DEFAULT_NUM); + temp_r26 = object->data; + temp_r26->unk0 = 4; + temp_r26->unk6[0] = 0; + temp_r26->unkA = 900; + temp_r26->unk10 = -1; + temp_r27 = HuSprAnimRead(HuDataReadNum(0x3E001A, MEMORY_DEFAULT_NUM)); + object->model[0] = fn_1_6C74(temp_r27, 1024, 25, 64, 64); + fn_1_7244(object->model[0], fn_1_6030); + Hu3DModelLayerSet(object->model[0], 7); + temp_r30 = HuSprGrpCreate(4); + object->model[3] = temp_r30; + temp_r27 = HuSprAnimRead(HuDataReadNum(0x61001B, MEMORY_DEFAULT_NUM)); + temp_r28 = HuSprCreate(temp_r27, 16, 0); + HuSprGrpMemberSet(temp_r30, 0, temp_r28); + HuSprAttrSet(temp_r30, 0, HUSPR_ATTR_DISPOFF); + temp_r27 = HuSprAnimRead(HuDataReadNum(0x61001D, MEMORY_DEFAULT_NUM)); + temp_r28 = HuSprCreate(temp_r27, 32, 0); + HuSprGrpMemberSet(temp_r30, 2, temp_r28); + HuSprAttrSet(temp_r30, 2, HUSPR_ATTR_DISPOFF); + temp_r27 = HuSprAnimRead(HuDataReadNum(0x61001C, MEMORY_DEFAULT_NUM)); + temp_r28 = HuSprCreate(temp_r27, 16, 0); + HuSprGrpMemberSet(temp_r30, 1, temp_r28); + HuSprAttrSet(temp_r30, 1, HUSPR_ATTR_DISPOFF); + temp_r27 = HuSprAnimRead(HuDataReadNum(0x61001D, MEMORY_DEFAULT_NUM)); + temp_r28 = HuSprCreate(temp_r27, 32, 0); + HuSprGrpMemberSet(temp_r30, 3, temp_r28); + HuSprAttrSet(temp_r30, 3, HUSPR_ATTR_DISPOFF); + temp_f31 = 288; + HuSprPosSet(temp_r30, 0, temp_f31-198, 64); + HuSprPosSet(temp_r30, 1, temp_f31+198, 64); + HuSprPosSet(temp_r30, 2, temp_f31-198, 64); + HuSprTPLvlSet(temp_r30, 2, 88); + HuSprColorSet(temp_r30, 2, 0, 0, 0); + HuSprPosSet(temp_r30, 3, temp_f31+198, 64); + HuSprTPLvlSet(temp_r30, 3, 88); + HuSprColorSet(temp_r30, 3, 0, 0, 0); + temp_r27 = HuSprAnimRead(HuDataReadNum(0x61000B, MEMORY_DEFAULT_NUM)); + temp_r24 = HuSprAnimRead(HuDataReadNum(0x61000A, MEMORY_DEFAULT_NUM)); + temp_r30 = HuSprGrpCreate(6); + object->model[1] = temp_r30; + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r28 = HuSprCreate(temp_r27, 0, 0); + HuSprGrpMemberSet(temp_r30, temp_r31, temp_r28); + HuSprPosSet(temp_r30, temp_r31, lbl_1_data_C8[0]+lbl_1_data_BC[temp_r31], 63); + HuSprAttrSet(temp_r30, temp_r31, HUSPR_ATTR_DISPOFF); + } + for(temp_r31=3; temp_r31<6; temp_r31++) { + temp_r25 = temp_r31-3; + temp_r28 = HuSprCreate(temp_r24, 8, 0); + HuSprGrpMemberSet(temp_r30, temp_r31, temp_r28); + HuSprPosSet(temp_r30, temp_r31, lbl_1_data_C8[0]+lbl_1_data_BC[temp_r25], 63); + HuSprAttrSet(temp_r30, temp_r31, HUSPR_ATTR_DISPOFF); + } + temp_r30 = HuSprGrpCreate(6); + object->model[2] = temp_r30; + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r28 = HuSprCreate(temp_r27, 0, 0); + HuSprGrpMemberSet(temp_r30, temp_r31, temp_r28); + HuSprPosSet(temp_r30, temp_r31, lbl_1_data_C8[1]+lbl_1_data_BC[temp_r31], 63); + HuSprAttrSet(temp_r30, temp_r31, HUSPR_ATTR_DISPOFF); + } + for(temp_r31=3; temp_r31<6; temp_r31++) { + temp_r25 = temp_r31-3; + temp_r28 = HuSprCreate(temp_r24, 8, 0); + HuSprGrpMemberSet(temp_r30, temp_r31, temp_r28); + HuSprPosSet(temp_r30, temp_r31, lbl_1_data_C8[1]+lbl_1_data_BC[temp_r25], 63); + HuSprAttrSet(temp_r30, temp_r31, HUSPR_ATTR_DISPOFF); + } + (void)temp_r31; + (void)temp_r31; + object->func = fn_1_10A4; +} + +void fn_1_140C(omObjData *object); +u8 fn_1_1634(omObjData *object); +u8 fn_1_1A40(omObjData *object); +void fn_1_2000(s16 arg0); +void fn_1_2050(u16 arg0, u16 arg1); +u16 fn_1_2090(u16 arg0); +void fn_1_5480(void); + +void fn_1_10A4(omObjData *object) +{ + WorkA44 *temp_r31; + s16 temp_r30; + s16 temp_r28; + CameraData *temp_r27; + temp_r31 = object->data; + temp_r30 = 99; + switch(fn_1_2090(28)) { + case 4: + if(lbl_1_bss_E == 0) { + lbl_1_bss_E = 1; + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + temp_r27 = &Hu3DCamera[0]; + temp_r27->fov = 41.5f; + } + if(!WipeStatGet()) { + fn_1_2050(28, 8); + fn_1_2050(224, 32); + } + break; + + case 8: + if(fn_1_1634(object)) { + fn_1_2050(1, 0); + fn_1_2050(28, 12); + } + break; + + case 12: + if(temp_r31->unk10 != -1) { + temp_r28 = (temp_r31->unkA+59)/60; + if(temp_r28 < 0) { + temp_r28 = 0; + } + MGSeqParamSet(temp_r31->unk10, 1, temp_r28); + } + fn_1_140C(object); + if(fn_1_2090(224) == 128) { + if(lbl_1_bss_12C[0].unk138[0] == 3) { + temp_r30 = 0; + } else if(lbl_1_bss_12C[1].unk138[0] == 3) { + temp_r30 = 1; + } else { + if(temp_r31->unk6[0] == 5) { + if(lbl_1_bss_12C[0].unk138[0] == lbl_1_bss_12C[1].unk138[0]) { + temp_r30 = -1; + } else { + if(lbl_1_bss_12C[0].unk138[0] > lbl_1_bss_12C[1].unk138[0]) { + temp_r30 = 0; + } else { + temp_r30 = 1; + } + } + } + } + } + if(temp_r30 != 99) { + if(fn_1_2090(1) == 0) { + temp_r31->unk2 = MGSeqFinishCreate(); + HuAudSeqAllFadeOut(100); + } + fn_1_5480(); + fn_1_2000(temp_r30); + fn_1_2050(1, 1); + if(temp_r31->unk0 & 0x2) { + if(temp_r30 == -1) { + lbl_1_bss_A = 1; + } + fn_1_2050(28, 16); + } + if(temp_r30 != -1) { + fn_1_8474(temp_r30^1); + } else { + fn_1_8474(0); + fn_1_8474(1); + } + } + break; + + case 16: + if(fn_1_1A40(object)) { + fn_1_2050(28, 20); + } + break; + + case 20: + if(++lbl_1_bss_C > 210.0f) { + lbl_1_bss_0 = 1; + } + break; + } +} + +void fn_1_140C(omObjData *object) +{ + float temp_f31; + float temp_f30; + WorkA44 *temp_r31 = object->data; + if((temp_r31->unk0 & 0x300) == 0) { + return; + } + temp_r31->unk12++; + temp_f31 = temp_r31->unk12/18.0f; + if(temp_r31->unk12 > 18.0f) { + temp_r31->unk12 = 0; + temp_f31 = 1.0f; + temp_r31->unk12 = 18; + temp_r31->unk0 &= ~0x300; + } + temp_f30 = 1.0-cosd(90.0f*temp_f31); + + temp_f31 = 1.0+sind(180.0f*temp_f31); + HuSprAttrReset(lbl_1_bss_30->model[temp_r31->unk6[1]+1], temp_r31->unk16, HUSPR_ATTR_DISPOFF); + HuSprScaleSet(lbl_1_bss_30->model[temp_r31->unk6[1]+1], temp_r31->unk16, temp_f31, temp_f31); + HuSprTPLvlSet(lbl_1_bss_30->model[temp_r31->unk6[1]+1], temp_r31->unk16, temp_f30); + +} + +void fn_1_2AB0(s16 arg0); + +u8 fn_1_1634(omObjData *object) +{ + WorkA44 *temp_r30 = object->data; + s32 temp_r29; + s32 temp_r27; + s32 temp_r26; + switch(lbl_1_bss_A) { + case 0: + if(fn_1_2090(224) == 64) { + fn_1_2050(1, 1); + lbl_1_bss_A++; + } + break; + + case 1: + if(fn_1_57C()) { + lbl_1_bss_A++; + } + break; + + case 2: + temp_r30->unk2 = MGSeqStartCreate(); + temp_r30->unkC = -1; + lbl_1_bss_A++; + break; + + case 3: + if(temp_r30->unk2 != -1) { + temp_r26 = MGSeqStatGet(temp_r30->unk2); + if((temp_r26 & 0x10) && temp_r30->unkC == -1) { + temp_r30->unkC = HuAudSeqPlay(72); + } + } + if(temp_r30->unk2 == -1 || temp_r26 == 0) { + temp_r27 = object->model[1]; + for(temp_r29=3; temp_r29<6; temp_r29++) { + HuSprAttrReset(temp_r27, temp_r29, HUSPR_ATTR_DISPOFF); + } + temp_r27 = object->model[2]; + for(temp_r29=3; temp_r29<6; temp_r29++) { + HuSprAttrReset(temp_r27, temp_r29, HUSPR_ATTR_DISPOFF); + } + temp_r27 = object->model[3]; + for(temp_r29=0; temp_r29<4; temp_r29++) { + HuSprAttrReset(temp_r27, temp_r29, HUSPR_ATTR_DISPOFF); + } + fn_1_2AB0(999); + lbl_1_bss_A = 0; + + return 1; + } + break; + } + return 0; +} + +u8 fn_1_1A40(omObjData *object) +{ + WorkA44 *temp_r30; + Bss12CStruct *temp_r29; + s32 temp_r28; + s32 temp_r25; + temp_r30 = object->data; + switch(lbl_1_bss_A) { + case 0: + temp_r28 = fn_1_7FB8(temp_r30->unk4); + fn_1_8474(temp_r30->unk4^1); + temp_r28 &= fn_1_7B0(); + if((u8)temp_r28) { + lbl_1_bss_4 = 1; + fn_1_A7D0(temp_r30->unk4); + HuAudSStreamPlay(1); + lbl_1_bss_C = 0; + lbl_1_bss_A++; + } + break; + + case 1: + if(temp_r30->unk4 == -1) { + temp_r28 = fn_1_8474(0); + temp_r25 = fn_1_8474(1); + if((u8)temp_r28 == 0 || (u8)temp_r25 == 0) { + return 0; + } + if(temp_r30->unk2 == -1 || !MGSeqStatGet(temp_r30->unk2)) { + temp_r30->unk2 = -1; + lbl_1_bss_4 = 1; + fn_1_A904(0); + fn_1_A904(1); + HuAudSStreamPlay(4); + lbl_1_bss_A++; + } + } else { + if(++lbl_1_bss_C > 1) { + lbl_1_bss_A++; + } + } + break; + + case 2: + if(temp_r30->unk4 != -1) { + temp_r29 = &lbl_1_bss_12C[temp_r30->unk4]; + temp_r30->unk2 = MGSeqWinCreate(GWPlayerCfg[temp_r29->unk0[0]].character, + GWPlayerCfg[temp_r29->unk0[1]].character, + -1, + -1); + GWPlayerCoinWinAdd(temp_r29->unk0[0], 10); + GWPlayerCoinWinAdd(temp_r29->unk0[1], 10); + } else { + temp_r30->unk2 = MGSeqDrawCreate(); + } + lbl_1_bss_A++; + break; + + case 3: + lbl_1_bss_A = lbl_1_bss_C = 0; + return 1; + + default: + break; + + } + return 0; +} + +void fn_1_2000(s16 arg0) +{ + WorkA44 *temp_r31 = lbl_1_bss_30->data; + if(arg0 == -1 || temp_r31->unk6[1] == -1) { + temp_r31->unk0 |= 0x2; + } + temp_r31->unk4 = arg0; +} + +void fn_1_2050(u16 arg0, u16 arg1) +{ + WorkA44 *temp_r31 = lbl_1_bss_30->data; + temp_r31->unk0 &= ~arg0; + temp_r31->unk0 |= arg1; +} + +u16 fn_1_2090(u16 arg0) +{ + WorkA44 *temp_r31 = lbl_1_bss_30->data; + if(!temp_r31) { + return 0; + } + return temp_r31->unk0 & arg0; +} + +void fn_1_20D0(s16 arg0) +{ + WorkA44 *temp_r31 = lbl_1_bss_30->data; + temp_r31->unk0 |= 0x100; + temp_r31->unk12 = 0; + temp_r31->unk16 = arg0; +} + +s32 lbl_1_data_114[2][2] = { + 0x003E0001, + 0x003E0003, + 0x003E0005, + 0x003E0006 +}; + +s32 lbl_1_data_124[2][2] = { + 0x003E0007, + 0x003E0008, + 0x003E0009, + 0x003E000A +}; + +s32 lbl_1_data_134[5] = { + 0x003E000C, + 0x003E000D, + 0x003E000E, + 0x003E000F, + 0x003E0010 +}; + +s32 lbl_1_data_148[5] = { + 0x003E001C, + 0x003E001D, + 0x003E001E, + 0x003E001F, + 0x003E0020 +}; + +typedef struct unk2110_obj { + u32 unk0; + float unk4; + float unk8; + Vec unkC; + s16 unk18; + s16 unk1A; + s16 unk1C; + s16 unk1E; + float unk20; +} Unk2110Obj; + +typedef struct work_2110 { + float unk0; + Unk2110Obj unk4[10]; + s16 unk16C[10]; +} Work2110; + +void fn_1_2AC0(omObjData *object); + +void fn_1_48D0(Work2110 *arg0); +void fn_1_498C(s16 arg0, Work2110 *arg1); + +void fn_1_2110(omObjData *object) +{ + float temp_f31; + float temp_f30; + float temp_f29; + s16 temp_r31; + Unk2110Obj *temp_r29; + Work2110 *temp_r28; + s16 temp_r27; + AnimData *temp_r26; + s16 temp_r25; + + object->stat |= 0x100; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 2*sizeof(Work2110), MEMORY_DEFAULT_NUM); + temp_r28 = object->data; + object->model[0] = Hu3DModelCreateFile(0x3E0000); + Hu3DModelLayerSet(object->model[0], 0); + Hu3DModelScaleSet(object->model[0], 1.2f, 1.2f, 1.2f); + temp_r31 = Hu3DModelCreateFile(0x3E0011); + Hu3DModelAttrSet(temp_r31, 0x40000001); + Hu3DModelLayerSet(temp_r31, 0); + Hu3DMotionSpeedSet(temp_r31, 0.25f); + temp_r31 = Hu3DModelCreateFile(0x3E0012); + Hu3DModelAttrSet(temp_r31, 0x40000001); + Hu3DModelLayerSet(temp_r31, 0); + Hu3DMotionSpeedSet(temp_r31, 0.25f); + temp_r31 = Hu3DModelCreateFile(0x3E0013); + object->model[5] = temp_r31; + object->motion[0] = Hu3DJointMotionFile(temp_r31, 0x3E0014); + object->motion[1] = Hu3DJointMotionFile(temp_r31, 0x3E0015); + object->motion[2] = Hu3DJointMotionFile(temp_r31, 0x3E0016); + object->motion[3] = Hu3DJointMotionFile(temp_r31, 0x3E0017); + object->motion[4] = Hu3DJointMotionFile(temp_r31, 0x3E0014); + object->motion[5] = Hu3DJointMotionFile(temp_r31, 0x3E0018); + object->motion[6] = Hu3DJointMotionFile(temp_r31, 0x3E0019); + Hu3DModelPosSet(temp_r31, 0, 0, -230); + Hu3DModelShadowSet(temp_r31); + Hu3DModelAttrSet(temp_r31, 0x40000001); + Hu3DMotionSet(temp_r31, object->motion[0]); + for(temp_r31=0; temp_r31<2; temp_r31++, temp_r28++) { + temp_r25 = Hu3DModelCreateFile(lbl_1_data_114[0][temp_r31]); + temp_f30 = (temp_r31 == 0) ? -317.0f : 317.0f; + temp_f31 = 0; + temp_f29 = 100; + Hu3DModelPosSet(temp_r25, temp_f30, temp_f31, temp_f29); + object->model[temp_r31+1] = Hu3DModelCreateFile(0x3E0002); + temp_f30 = (temp_r31 == 0) ? -317.0f : 317.0f; + temp_f31 = 0; + temp_f29 = 100; + Hu3DModelPosSet(object->model[temp_r31+1], temp_f30, temp_f31, temp_f29); + Hu3DModelAttrSet(object->model[temp_r31+1], 0x40000002); + + object->model[temp_r31+3] = Hu3DModelCreateFile(lbl_1_data_114[1][temp_r31]); + temp_f31 = 45; + Hu3DModelPosSet(object->model[temp_r31+3], temp_f30, temp_f31, temp_f29); + Hu3DModelRotSet(object->model[temp_r31+3], 0, lbl_1_data_1D0, 0); + for(temp_r27 = 0, temp_r29 = &temp_r28->unk4[0]; temp_r27<10; temp_r27++, temp_r29++) { + if(fmod((float)temp_r27, 2)) { + if(temp_r27 == 1) { + temp_r29->unk1E = Hu3DModelCreateFile(lbl_1_data_124[temp_r31][0]); + } else { + temp_r29->unk1E = Hu3DModelLink(temp_r28->unk4[1].unk1E); + } + } else { + if(temp_r27 == 0) { + temp_r29->unk1E = Hu3DModelCreateFile(lbl_1_data_124[temp_r31][1]); + } else { + temp_r29->unk1E = Hu3DModelLink(temp_r28->unk4[0].unk1E); + } + } + Hu3DModelPosSet(temp_r29->unk1E, 0, -500, 0); + if(temp_r27 == 0) { + temp_r29->unk1C = Hu3DModelCreateFile(0x3E000B); + } else { + temp_r29->unk1C = Hu3DModelLink(temp_r28->unk4[0].unk1C); + } + Hu3DData[temp_r29->unk1C].pos.y = 1000; + Hu3DModelAttrSet(temp_r29->unk1C, 1); + temp_r29->unk0 = 0; + temp_r29->unk4 = lbl_1_data_1D0+(36.0f*temp_r27); + } + temp_r28->unk0 = 0; + fn_1_48D0(temp_r28); + fn_1_498C(temp_r31, temp_r28); + } + for(temp_r31=0; temp_r31<20; temp_r31++) { + if(temp_r31 < 5) { + lbl_1_bss_34[temp_r31] = Hu3DModelCreateFile(lbl_1_data_134[temp_r31]); + } else { + temp_r27 = fmod((float)temp_r31, 5); + lbl_1_bss_34[temp_r31] = Hu3DModelLink(lbl_1_bss_34[temp_r27]); + } + Hu3DModelPosSet(lbl_1_bss_34[temp_r31], 0, -500, 0); + } + Hu3DModelShadowMapObjSet(object->model[0], "field"); + Hu3DModelShadowMapSet(object->model[1]); + Hu3DModelShadowMapSet(object->model[2]); + temp_r26 = HuSprAnimRead(HuDataReadNum(0x3E001B, MEMORY_DEFAULT_NUM)); + lbl_1_bss_5C.unk0[0] = fn_1_6C74(temp_r26, 1, 140, 0, 0); + Hu3DModelLayerSet(lbl_1_bss_5C.unk0[0], 7); + for(temp_r31=0; temp_r31<5; temp_r31++) { + temp_r26 = HuSprAnimRead(HuDataReadNum(lbl_1_data_148[temp_r31], MEMORY_DEFAULT_NUM)); + lbl_1_bss_5C.unk0[temp_r31+1] = fn_1_6C74(temp_r26, 2, 45, 0, 0); + Hu3DModelLayerSet(lbl_1_bss_5C.unk0[temp_r31+1], 7); + } + object->func = fn_1_2AC0; +} + +void fn_1_2AB0(s16 arg0) +{ + lbl_1_bss_10 = arg0; +} + +void fn_1_2C94(Work2110 *arg0); +void fn_1_30E0(Work2110 *arg0); +void fn_1_3540(Work2110 *arg0); +void fn_1_3D7C(Work2110 *arg0); +void fn_1_4028(Work2110 *arg0); +void fn_1_5708(void); + +void fn_1_2AC0(omObjData *object) +{ + Work2110 *temp_r31 = object->data; + if(!fn_1_2090(1)) { + if(fn_1_2090(28) == 12 || fn_1_2090(28) == 8) { + switch(fn_1_2090(224)) { + case 32: + fn_1_2C94(temp_r31); + break; + + case 64: + fn_1_30E0(temp_r31); + break; + + case 96: + fn_1_3540(temp_r31); + break; + + case 128: + if(fn_1_2090(28) == 12) { + fn_1_3D7C(temp_r31); + } + break; + + case 0: + fn_1_4028(temp_r31); + break; + } + fn_1_498C(0, &temp_r31[0]); + fn_1_498C(1, &temp_r31[1]); + } + } + fn_1_5708(); +} + +u16 lbl_1_data_162 = 1; + +void fn_1_4798(Work2110 *arg0); + +void fn_1_2C94(Work2110 *arg0) +{ + float temp_f31; + float temp_f30; + Unk2110Obj *temp_r31; + s16 temp_r29; + s16 temp_r28; + WorkA44 *temp_r26; + temp_r26 = lbl_1_bss_30->data; + + switch(lbl_1_data_162) { + case 0: + if(lbl_1_bss_10 == 1) { + HuAudFXPlay(1670); + } + lbl_1_bss_10++; + temp_f31 = lbl_1_bss_10/60.0f; + if(temp_f31 >= 1.0f) { + temp_r26->unkA = 900; + lbl_1_bss_10 = 0; + temp_f31 = 1; + lbl_1_data_162++; + + } + temp_f31 = cosd(temp_f31*90.0f); + temp_f30 = -50+(95*temp_f31); + break; + + case 1: + temp_f30 = -50; + fn_1_4798(arg0); + lbl_1_data_162++; + break; + + case 2: + if(lbl_1_bss_10 == 1) { + HuAudFXPlay(1663); + } + lbl_1_bss_10++; + temp_f31 = lbl_1_bss_10/60.0f; + if(temp_f31 >= 1.0f) { + lbl_1_bss_10 = 0; + temp_f31 = 1.0f; + lbl_1_data_162++; + } + temp_f31 = sind(temp_f31*90.0f); + temp_f30 = -50+(95*temp_f31); + break; + + case 3: + temp_f30 = 45; + fn_1_2050(224, 64); + lbl_1_data_162 = 0; + break; + } + for(temp_r29=0; temp_r29<2; temp_r29++, arg0++) { + temp_r31 = &arg0->unk4[0]; + for(temp_r28=0; temp_r28<10; temp_r28++, temp_r31++) { + if(lbl_1_data_162 || -50.0f != Hu3DData[temp_r31->unk1A].pos.y) { + Hu3DModelPosSet(temp_r31->unk1A, temp_r31->unkC.x, temp_f30, temp_r31->unkC.z); + Hu3DModelRotSet(temp_r31->unk1A, 0, temp_r31->unk8, 0); + Hu3DModelPosSet(temp_r31->unk1E, temp_r31->unkC.x, temp_f30, temp_r31->unkC.z); + Hu3DModelRotSet(temp_r31->unk1E, 0, temp_r31->unk8, 0); + } + + } + } +} + +void fn_1_30E0(Work2110 *arg0) +{ + float temp_f31; + s16 sp8[2]; + Unk2110Obj *temp_r31; + s16 temp_r29; + s16 temp_r28; + s16 temp_r27; + s16 temp_r25; + u32 temp_r22; + switch(lbl_1_data_162) { + case 0: + lbl_1_bss_10++; + if(lbl_1_bss_10 > 60) { + lbl_1_bss_10 = 0; + lbl_1_data_162++; + } + return; + + case 1: + temp_r28 = arg0[0].unk16C[4]; + arg0[0].unk4[temp_r28].unk0 = 4; + temp_r28 = arg0[1].unk16C[4]; + arg0[1].unk4[temp_r28].unk0 = 4; + lbl_1_bss_10 = 999; + lbl_1_data_162++; + break; + + case 2: + temp_r31 = &arg0[0].unk4[arg0[0].unk16C[5]]; + if((temp_r31->unk0 & 0x1C) == 0x10) { + lbl_1_bss_10 = 0; + fn_1_2050(224, 96); + lbl_1_data_162 = 0; + return; + } + break; + } + temp_r25 = 0; + sp8[0] = sp8[1] = ++lbl_1_bss_10; + for(temp_r27=0; temp_r27<2; temp_r27++, arg0++) { + for(temp_r29=4; temp_r29>-6; temp_r29--) { + temp_r28 = (temp_r29 < 0) ? arg0->unk16C[temp_r29+10] : arg0->unk16C[temp_r29]; + temp_r31 = &arg0[0].unk4[temp_r28]; + switch(temp_r22 = temp_r31->unk0 & 0x1C) { + case 4: + if(sp8[temp_r27] > 15) { + sp8[temp_r27] = 0; + temp_r25 = 1; + if(temp_r29-1 > -6) { + temp_r28 = ((temp_r29-1) < 0) ? arg0->unk16C[(temp_r29-1)+10] : arg0->unk16C[(temp_r29-1)]; + arg0[0].unk4[temp_r28].unk0 &= ~0x1C; + arg0[0].unk4[temp_r28].unk0 |= 0x4; + } + temp_r31->unk0 &= ~0x1C; + temp_r31->unk0 |= 8; + temp_r31->unk20 = 0; + Hu3DModelAttrReset(temp_r31->unk1C, 1); + } + break; + + case 8: + case 12: + temp_f31 = Hu3DData[temp_r31->unk1C].pos.y; + temp_r31->unk20 -= 0.98f; + temp_f31 += temp_r31->unk20; + if(temp_f31 <= 50.0f) { + temp_f31 = 50.0f; + temp_r31->unk0 &= ~0x1C; + if(temp_r22 == 8) { + temp_r31->unk20 = 6; + temp_r31->unk0 |= 12; + HuAudFXPlay(1664); + } else { + temp_r31->unk20 = 0; + temp_r31->unk0 |= 16; + } + } + Hu3DModelPosSet(temp_r31->unk1C, temp_r31->unkC.x, temp_f31, temp_r31->unkC.z); + Hu3DModelRotSet(temp_r31->unk1C, 0, temp_r31->unk8, 0); + break; + + default: + break; + } + } + } + if(temp_r25) { + lbl_1_bss_10 = 0; + } +} + +s32 lbl_1_data_164 = -1; +Vec lbl_1_data_168 = { -150, 150, 0 }; +void fn_1_4D4C(void); +void fn_1_4E30(s16 arg0, Bss61CWork *arg1); +void fn_1_52D8(void); +void fn_1_566C(s16 arg0); +s32 fn_1_7A78(s32 arg0, s16 arg1); + +void fn_1_3540(Work2110 *arg0) +{ + float sp8[2]; + float temp_f31; + float temp_f30; + Unk2110Obj *temp_r30; + s16 temp_r29; + Bss61CWork *temp_r27; + s16 temp_r26; + s16 temp_r25; + temp_r25 = 0; + switch(lbl_1_data_162) { + case 0: + lbl_1_bss_20[0] = arg0[0].unk0; + lbl_1_bss_20[1] = arg0[1].unk0; + temp_r29 = rand16()%11; + temp_f31 = (temp_r29 < 5) ? 360.0f : 180.0f; + temp_f31 += temp_r29*36.0f; + lbl_1_bss_18[0] = lbl_1_bss_20[0]+temp_f31; + lbl_1_bss_18[1] = lbl_1_bss_20[1]-temp_f31; + lbl_1_bss_14 = (0.01f*temp_f31)*60; + lbl_1_data_162++; + lbl_1_data_164 = HuAudFXPlay(1665); + break; + + case 1: + if(lbl_1_bss_10 == lbl_1_bss_14) { + arg0[0].unk0 = fmod(arg0[0].unk0, 360); + arg0[1].unk0 = fmod(arg0[1].unk0, 360); + if(arg0[0].unk0 < 0.0f) { + arg0[0].unk0 += 360.0f; + } + if(arg0[1].unk0 < 0.0f) { + arg0[1].unk0 += 360.0f; + } + fn_1_48D0(&arg0[0]); + fn_1_48D0(&arg0[1]); + lbl_1_data_162++; + lbl_1_bss_10 = 0; + temp_r25 = 1; + } + break; + + case 2: + temp_r25 = 1; + fn_1_4D4C(); + fn_1_52D8(); + fn_1_566C(1); + for(temp_r29=0; temp_r29<4; temp_r29++) { + temp_r27 = lbl_1_bss_61C[temp_r29]->data; + fn_1_4E30(temp_r27->unkA, temp_r27); + } + lbl_1_data_162 = 0; + fn_1_2050(224, 0); + break; + } + sp8[0] = lbl_1_data_1D0+arg0[0].unk0; + sp8[1] = lbl_1_data_1D0+arg0[1].unk0; + if(temp_r25 == 0) { + lbl_1_bss_10++; + temp_f31 = lbl_1_bss_10/(float)lbl_1_bss_14; + temp_f31 = sind(temp_f31*90.0f); + if(lbl_1_bss_10 > lbl_1_bss_14-120) { + temp_f30 = (lbl_1_bss_10-(lbl_1_bss_14-120))/120.0f; + if(temp_f30 < 0.0f) { + temp_f30 = 0.0f; + } else { + if(temp_f30 > 1.0f) { + temp_f30 = 1.0f; + } + } + if(lbl_1_data_164 != -1) { + HuAudFXPitchSet(lbl_1_data_164, -8191.0f*temp_f30); + fn_1_7A78(lbl_1_data_164, (1.0f-temp_f30)*127); + } + if(lbl_1_bss_10 >= lbl_1_bss_14) { + if(lbl_1_data_164 != -1) { + HuAudFXStop(lbl_1_data_164); + lbl_1_data_164 = -1; + HuAudFXPlay(1675); + } + } + } + if(lbl_1_bss_10 > lbl_1_bss_14) { + lbl_1_bss_10 = lbl_1_bss_14; + temp_f31 = 1; + } + arg0[0].unk0 = lbl_1_bss_20[0]+(temp_f31*(lbl_1_bss_18[0]-lbl_1_bss_20[0])); + arg0[1].unk0 = lbl_1_bss_20[1]+(temp_f31*(lbl_1_bss_18[1]-lbl_1_bss_20[1])); + } + Hu3DData[lbl_1_bss_2C->model[3]].rot.y = sp8[0]; + Hu3DData[lbl_1_bss_2C->model[4]].rot.y = sp8[1]; + for(temp_r29=0; temp_r29<2; temp_r29++, arg0++) { + temp_r30 = &arg0->unk4[0]; + for(temp_r26=0; temp_r26<10; temp_r26++, temp_r30++) { + float temp_f29 = temp_r30->unkC.x; + float temp_f28 = temp_r30->unkC.z; + Hu3DModelPosSet(temp_r30->unk1A, temp_f29, 45, temp_f28); + Hu3DModelRotSet(temp_r30->unk1A, 0, temp_r30->unk8, 0); + Hu3DModelPosSet(temp_r30->unk1E, temp_f29, 45, temp_f28); + Hu3DModelRotSet(temp_r30->unk1E, 0, temp_r30->unk8, 0); + Hu3DModelPosSet(temp_r30->unk1C, temp_f29, 50, temp_f28); + Hu3DModelRotSet(temp_r30->unk1C, 0, temp_r30->unk8, 0); + } + } +} + +void fn_1_3FD0(Unk72B4Data18 *arg0); + +void fn_1_5B70(float arg0, float arg1, float arg2, s16 arg3, unkHook72B4Data18 arg4, s16 arg5); + +void fn_1_3D7C(Work2110 *arg0) +{ + Unk2110Obj *temp_r31; + ModelData *temp_r30; + s16 temp_r29; + WorkA44 *temp_r28; + s16 temp_r27; + switch(lbl_1_data_162) { + case 0: + if(++lbl_1_bss_10 > 60) { + lbl_1_bss_10 = 0; + lbl_1_data_162++; + } + break; + + case 1: + for(temp_r29=0; temp_r29<2; temp_r29++, arg0++) { + temp_r31 = &arg0->unk4[0]; + for(temp_r27=0; temp_r27<10; temp_r27++, temp_r31++) { + temp_r30 = &Hu3DData[temp_r31->unk1C]; + temp_r31->unk0 &= ~0x1C; + if(!(temp_r31->unk0 & 0x1)) { + fn_1_5B70(temp_r30->pos.x, 20+temp_r30->pos.y, temp_r30->pos.z, 20, fn_1_3FD0, temp_r31->unk1C); + if(temp_r29 == 0) { + HuAudFXPlay(1669); + } else { + HuAudFXPlay(1674); + } + } else { + temp_r30->pos.y = 1000; + } + temp_r31->unk0 &= ~0x3; + Hu3DModelScaleSet(temp_r31->unk1A, 1, 1, 1); + } + } + lbl_1_data_162++; + break; + + case 2: + if(++lbl_1_bss_10 > 60) { + lbl_1_bss_10 = lbl_1_data_162 = 0; + fn_1_2050(224, 32); + } + break; + } +} + +void fn_1_3FD0(Unk72B4Data18 *arg0) +{ + Hu3DData[arg0->unk2C].pos.y = 1000; + Hu3DModelAttrSet(arg0->unk2C, 1); +} + +void fn_1_4028(Work2110 *arg0) +{ + float temp_f31; + float temp_f30; + Unk2110Obj *temp_r31; + WorkA44 *temp_r30; + s16 temp_r29; + s16 temp_r28; + s16 temp_r27; + Bss61CWork *temp_r24; + temp_r30 = lbl_1_bss_30->data; + temp_r27 = -1; + switch(lbl_1_data_162) { + case 0: + temp_r30->unk10 = MGSeqTimerCreate(15); + lbl_1_data_162++; + break; + + case 1: + if(lbl_1_bss_12C[0].unk134[0] && lbl_1_bss_12C[0].unk134[1]) { + temp_r27 = 0; + } + if(lbl_1_bss_12C[1].unk134[0] && lbl_1_bss_12C[1].unk134[1]) { + if(temp_r27 == 0) { + temp_r27 = (rand16() % 2) ? 0 : 1; + } else { + temp_r27 = 1; + } + } + temp_r30->unk6[1] = temp_r27; + if(temp_r27 != -1) { + fn_1_A7D0(temp_r30->unk6[1]); + fn_1_20D0(lbl_1_bss_12C[temp_r27].unk138[0]); + fn_1_5480(); + fn_1_566C(3); + lbl_1_bss_12C[temp_r27].unk138[0]++; + MGSeqParamSet(temp_r30->unk10, 2, -1); + temp_r30->unk10 = -1; + temp_r30->unk6[0]++; + lbl_1_bss_10 = 0; + lbl_1_data_162++; + } else { + if(--temp_r30->unkA < -1) { + for(temp_r29=0; temp_r29<4; temp_r29++) { + temp_r24 = lbl_1_bss_61C[temp_r29]->data; + for(temp_r28=0; temp_r28<8; temp_r28++) { + temp_r24->unk5E[temp_r28] = -1; + } + } + fn_1_5480(); + fn_1_566C(4); + temp_r30->unkA = 0; + MGSeqParamSet(temp_r30->unk10, 2, -1); + + temp_r30->unk10 = -1; + temp_r30->unk6[0]++; + lbl_1_bss_10 = 0; + lbl_1_data_162++; + } + } + if(temp_r30->unk6[0] >= 5) { + if(lbl_1_bss_12C[0].unk138[0] == lbl_1_bss_12C[1].unk138[0]) { + HuAudFXPlay(11); + } + } + break; + + case 2: + if(++lbl_1_bss_10 > 90.0f) { + lbl_1_bss_10 = 0; + lbl_1_data_162 = 1; + fn_1_2050(224, 128); + } + break; + } + for(temp_r29=0; temp_r29<2; temp_r29++, arg0++) { + temp_r31 = &arg0->unk4[0]; + for(temp_r28=0; temp_r28<10; temp_r28++, temp_r31++) { + if(!(temp_r31->unk0 & 0x1)) { + continue; + } + if(temp_r31->unk0 & 0x2) { + temp_r31->unk18++; + temp_f31 = temp_r31->unk18/30.0f; + if(temp_f31 >= 1.0f) { + temp_r31->unk20 -= 1.0f; + if(temp_r31->unk20 < 0.4f) { + temp_r31->unk20 = 0.4f; + } + temp_r31->unk18 = 0; + temp_f31 = 1.0f; + } + temp_f31 = (temp_r31->unk20*0.7f)*sind(180.0f*temp_f31)+1.0f; + Hu3DModelScaleSet(temp_r31->unk1A, temp_f31, temp_f31, temp_f31); + } else { + if(!temp_r31->unk20) { + if(++temp_r31->unk18 > 30.0f) { + temp_r31->unk20 = 1; + temp_r31->unk18 = 0; + } + } else { + temp_r31->unk18++; + temp_f31 = temp_r31->unk18/54.0f; + if(temp_f31 >= 1.0f) { + temp_r31->unk18 = 54; + temp_f31 = 1.0f; + } + temp_f31 = cosd(temp_f31*90.0f); + temp_f30 = -50+(95*temp_f31); + Hu3DModelPosSet(temp_r31->unk1A, temp_r31->unkC.x, temp_f30, temp_r31->unkC.z); + Hu3DModelPosSet(temp_r31->unk1E, temp_r31->unkC.x, temp_f30, temp_r31->unkC.z); + } + } + } + } +} + +s16 fn_1_4724(void) +{ + return lbl_1_data_162; +} + +u32 fn_1_4738(s16 arg0, s16 arg1) +{ + Work2110 *temp_r31; + temp_r31 = lbl_1_bss_2C->data; + temp_r31 += arg0; + if(arg1 == -1) { + return 0; + } + return temp_r31->unk4[temp_r31->unk16C[arg1]].unk0; +} + +void fn_1_66DC(s16 *arg0, s16 arg1, s16 arg2); + +void fn_1_4798(Work2110 *arg0) +{ + s16 temp_r31; + s16 sp10[10]; + Unk2110Obj *sp8[2]; + fn_1_66DC(sp10, 0, 10); + sp8[0] = &arg0[0].unk4[0]; + sp8[1] = &arg0[1].unk4[0]; + for(temp_r31=0; temp_r31<10; temp_r31++, sp8[0]++, sp8[1]++) { + sp8[0]->unk1A = lbl_1_bss_34[sp10[temp_r31]]; + sp8[1]->unk1A = lbl_1_bss_34[sp10[temp_r31]+10]; + sp8[0]->unk18 = sp8[1]->unk18 = (sp10[temp_r31] < 5) ? sp10[temp_r31] : sp10[temp_r31]-5; + } +} + +void fn_1_48D0(Work2110 *arg0) +{ + float temp_f31; + s16 temp_r31; + s16 temp_r30; + for(temp_r30=0; temp_r30<10; temp_r30++) { + temp_f31 = arg0->unk0+arg0->unk4[temp_r30].unk4; + temp_r31 = (temp_f31/360.0f)*10.0f; + if(temp_r31 >= 10) { + temp_r31 -= 10; + } else if(temp_r31 < 0) { + temp_r31 += 10; + } + arg0->unk16C[temp_r31] = temp_r30; + } +} + +void fn_1_498C(s16 arg0, Work2110 *arg1) +{ + float temp_f31; + Unk2110Obj *temp_r31; + Bss12CStruct *temp_r30; + s16 temp_r29; + temp_r31 = &arg1->unk4[0]; + temp_r30 = &lbl_1_bss_12C[arg0]; + for(temp_r29=0; temp_r29<10; temp_r29++, temp_r31++) { + temp_f31 = arg1->unk0+temp_r31->unk4; + if(temp_f31 >= 360.0f) { + temp_f31 -= 360.0f; + } + temp_r31->unkC.x = temp_r30->unkC.x+(153.0*sind(temp_f31)); + temp_r31->unkC.z = temp_r30->unkC.z+(153.0*cosd(temp_f31)); + temp_r31->unk8 = atan2d(temp_r30->unkC.x-temp_r31->unkC.x, temp_r30->unkC.z-temp_r31->unkC.z); + } +} + +s16 fn_1_4B14(s16 arg0, s16 arg1, s16 *arg2) +{ + Unk2110Obj *temp_r31; + s16 temp_r30; + Work2110 *temp_r29; + temp_r29 = lbl_1_bss_2C->data; + *arg2 = 0; + temp_r29 += arg0; + temp_r31 = &temp_r29->unk4[temp_r29->unk16C[arg1]]; + if(temp_r31->unk0 & 0x1) { + return -1; + } + temp_r31->unk0 |= 0x1; + for(temp_r30=0; temp_r30<2; temp_r30++) { + if(!lbl_1_bss_12C[arg0].unk134[temp_r30] && lbl_1_bss_5C.unkC[temp_r30] == temp_r31->unk18) { + *arg2 = 1; + lbl_1_bss_12C[arg0].unk134[temp_r30] = 1; + temp_r31->unk0 |= 0x2; + temp_r31->unk18 = 0; + temp_r31->unk20 = 1; + Hu3DMotionTimeSet(lbl_1_bss_2C->model[arg0+1], 0); + Hu3DModelAttrReset(lbl_1_bss_2C->model[arg0+1], 0x40000002); + HuAudFXPlay(9); + break; + } + + } + return temp_r31->unk1C; +} + +s16 fn_1_4CDC(s16 arg0, s16 arg1) +{ + Work2110 *temp_r31; + Unk2110Obj *temp_r30; + temp_r31 = lbl_1_bss_2C->data; + temp_r31 += arg0; + temp_r30 = &temp_r31->unk4[temp_r31->unk16C[arg1]]; + if(temp_r30->unk0 & 0x1) { + return 0; + } else { + return 1; + } +} + +void fn_1_4D4C(void) +{ + lbl_1_bss_5C.unkC[0] = rand16()%5; + lbl_1_bss_5C.unkC[1] = rand16()%5; + lbl_1_bss_12C[0].unk134[0] = lbl_1_bss_12C[0].unk134[1] = 0; + lbl_1_bss_12C[1].unk134[0] = lbl_1_bss_12C[1].unk134[1] = 0; +} + +void fn_1_6638(s16 *arg0, s16 arg1); + +void fn_1_4E30(s16 arg0, Bss61CWork *arg1) +{ + s16 sp1E[10]; + s16 spA[10]; + s16 temp_r30; + s16 temp_r29; + s16 temp_r28; + Work2110 *temp_r27; + Unk2110Obj *temp_r26; + temp_r27 = lbl_1_bss_2C->data; + for(temp_r30=0; temp_r30<10; temp_r30++) { + sp1E[temp_r30] = spA[temp_r30] = 0; + } + for(temp_r30=0; temp_r30<8; temp_r30++) { + arg1->unk5E[temp_r30] = -1; + } + temp_r27 += arg0; + for(temp_r28=0, temp_r29=0; temp_r28<2; temp_r28++) { + for(temp_r30=0; temp_r30<10; temp_r30++) { + temp_r26 = &temp_r27->unk4[temp_r27->unk16C[temp_r30]]; + if(temp_r26->unk18 == lbl_1_bss_5C.unkC[temp_r28] && !sp1E[temp_r30]) { + arg1->unk5E[temp_r29++] = temp_r30; + sp1E[temp_r30] = 1; + } + } + } + for(temp_r28=0, temp_r30=0; temp_r28<10; temp_r28++) { + if(!sp1E[temp_r28]) { + spA[temp_r30++] = temp_r28; + } + } + fn_1_6638(spA, temp_r30); + temp_r30 = 0; + if(temp_r29 == 2) { + temp_r29 += 2; + } + + while(1) { + if(temp_r29 >= 8) { + break; + } + arg1->unk5E[temp_r29++] = spA[temp_r30++]; + } + arg1->unk70 = 0; + temp_r29 = arg1->unk14->unk4; + switch(GWPlayerCfg[arg1->unk4].diff) { + case 0: + arg1->unk72 = (GWPlayerCfg[temp_r29].iscom) ? ((rand16()%3)+2) : ((rand16()%3)+1); + arg1->unk6E = 8; + break; + + case 1: + arg1->unk72 = (GWPlayerCfg[temp_r29].iscom) ? ((rand16()%3)+1) : ((rand16()%3)+0); + arg1->unk6E = 7; + break; + + case 2: + arg1->unk72 = (GWPlayerCfg[temp_r29].iscom) ? ((rand16()%3)+0) : ((rand16()%2)+0); + arg1->unk6E = 6; + break; + + case 3: + arg1->unk72 = (GWPlayerCfg[temp_r29].iscom) ? ((rand16()%2)+0) : 0; + arg1->unk6E = 5; + break; + } + if(arg1->unk6E < 4) { + arg1->unk6E = 4; + } +} + +void fn_1_5524(void); + +Unk72B4Data18 *fn_1_6B34(s16 arg0, Vec *arg1, Vec *arg2, float arg3, GXColor *arg4); + +void fn_1_52D8(void) +{ + Bss5CStruct *temp_r31; + s16 temp_r30; + Unk72B4Data18 *temp_r29; + Vec sp18; + Vec spC; + GXColor sp8 = { 255, 255, 255, 255 }; + temp_r31 = &lbl_1_bss_5C; + sp18.x = 0; + sp18.y = 200; + sp18.z = -300; + spC.x = spC.z = 1; + spC.y = 0.5f; + fn_1_6B34(temp_r31->unk0[0], &sp18, &spC, 0, &sp8); + for(temp_r30=0; temp_r30<2; temp_r30++) { + sp18.x = (temp_r30 == 0) ? -60.0f : 60.0f; + sp18.y = 220; + sp18.z = -290; + spC.x = spC.y = spC.z = 1; + temp_r29 = fn_1_6B34(temp_r31->unk0[temp_r31->unkC[temp_r30]+1], &sp18, &spC, 0, &sp8); + temp_r29->unk28 = temp_r30; + } + fn_1_5524(); +} + +Work72B4 *fn_1_7218(s16 arg0); + +void fn_1_5480(void) +{ + Work72B4 *temp_r31; + Bss5CStruct *temp_r30 = &lbl_1_bss_5C; + s16 temp_r29; + temp_r31 = fn_1_7218(temp_r30->unk0[0]); + temp_r31->unk18[0].unk56 = 0; + for(temp_r29=0; temp_r29<2; temp_r29++) { + temp_r31 = fn_1_7218(temp_r30->unk0[temp_r30->unkC[temp_r29]+1]); + temp_r31->unk18[0].unk56 = temp_r31->unk18[1].unk56 = 0; + + } +} + +void fn_1_5524(void) +{ + float temp_f30; + Bss5CStruct *temp_r31; + Work72B4 *temp_r30; + s16 temp_r29; + s16 temp_r28; + temp_r31 = &lbl_1_bss_5C; + temp_r30 = fn_1_7218(temp_r31->unk0[0]); + temp_r30->unk18[0].unk48.x = temp_r31->unk18; + for(temp_r28=0; temp_r28<2; temp_r28++) { + temp_r30 = fn_1_7218(temp_r31->unk0[temp_r31->unkC[temp_r28]+1]); + for(temp_r29=0; temp_r29<2; temp_r29++) { + if(temp_r30->unk18[temp_r29].unk56) { + temp_f30 = (temp_r30->unk18[temp_r29].unk28 == 0) ? -60.0f : 60.0f; + temp_r30->unk18[temp_r29].unk48.x = temp_f30+temp_r31->unk18; + } + } + } + +} + +void fn_1_566C(s16 arg0) +{ + ModelData *sp8 = &Hu3DData[lbl_1_bss_2C->model[5]]; + lbl_1_bss_5C.unk14 = 0; + lbl_1_bss_5C.unk12 = 0; + lbl_1_bss_5C.unk10 = arg0; + lbl_1_bss_5C.unk20 = lbl_1_bss_5C.unk34 = 0; + lbl_1_bss_5C.unk28[1] = lbl_1_bss_5C.unk28[0]; +} + +void fn_1_5708(void) +{ + Bss5CStruct *temp_r31; + ModelData *temp_r30; + WorkA44 *temp_r29; + temp_r30 = &Hu3DData[lbl_1_bss_2C->model[5]]; + temp_r29 = lbl_1_bss_30->data; + temp_r31 = &lbl_1_bss_5C; + switch(temp_r31->unk10) { + case 0: + if(temp_r30->unk_08 != lbl_1_bss_2C->motion[0]) { + Hu3DMotionShiftSet(lbl_1_bss_2C->model[5], lbl_1_bss_2C->motion[0], 0, 8, 0x40000001); + } + break; + + case 1: + if(temp_r31->unk12 == 0) { + temp_r31->unk12 = 1; + Hu3DMotionShiftSet(lbl_1_bss_2C->model[5], lbl_1_bss_2C->motion[1], 0, 8, 0); + } else { + if(temp_r30->unk_0C == -1) { + if(temp_r30->unk_64 >= Hu3DMotionMaxTimeGet(lbl_1_bss_2C->model[5])) { + temp_r31->unk16 = rand16()%2; + temp_r31->unk12 = 0; + temp_r31->unk10 = 2; + } + } + } + break; + + case 2: + if(temp_r31->unk12 == 0) { + temp_r31->unk12 = 1; + Hu3DMotionShiftSet(lbl_1_bss_2C->model[5], lbl_1_bss_2C->motion[5], 0, 8, 0x40000001); + } else { + if(temp_r29->unkA < 180) { + temp_r31->unk12 = 0; + temp_r31->unk10 = 5; + } + } + break; + + case 3: + if(temp_r31->unk12 == 0) { + temp_r31->unk12 = 1; + Hu3DMotionShiftSet(lbl_1_bss_2C->model[5], lbl_1_bss_2C->motion[2], 0, 8, 0x40000001); + } else { + if(temp_r30->unk_0C == -1) { + if(temp_r30->unk_64 >= Hu3DMotionMaxTimeGet(lbl_1_bss_2C->model[5])-1.0f) { + if(++temp_r31->unk14 > 1) { + temp_r31->unk12 = 0; + temp_r31->unk10 = 0; + } + } + } + } + break; + + case 4: + if(temp_r31->unk12 == 0) { + temp_r31->unk12 = 1; + Hu3DMotionShiftSet(lbl_1_bss_2C->model[5], lbl_1_bss_2C->motion[3], 0, 8, 0); + } else { + if(temp_r30->unk_0C == -1) { + if(temp_r30->unk_64 >= Hu3DMotionMaxTimeGet(lbl_1_bss_2C->model[5])) { + temp_r31->unk12 = 0; + temp_r31->unk10 = 0; + } + } + } + break; + + case 5: + if(temp_r31->unk12 == 0) { + temp_r31->unk12 = 1; + Hu3DMotionShiftSet(lbl_1_bss_2C->model[5], lbl_1_bss_2C->motion[6], 0, 8, 0x40000001); + } + break; + } + temp_r30->pos.x = temp_r31->unk18; + temp_r30->rot.y = temp_r31->unk28[0]; +} + +void fn_1_5B70(float arg0, float arg1, float arg2, s16 arg3, unkHook72B4Data18 arg4, s16 arg5) +{ + Vec sp2C; + Vec sp20; + GXColor sp1A; + float temp_f31; + float temp_f30; + + Unk72B4Data18 *temp_r31; + s16 temp_r30; + temp_f30 = 360.0f/arg3; + temp_f31 = rand16()%361; + for(temp_r30=0; temp_r30model[0], &sp2C, &sp20, 0, &sp1A); + if(!temp_r31) { + break; + } + temp_r31->unk30 = arg4; + temp_r31->unk2C = arg5; + temp_r31->unk28 = 0; + temp_r31->unk2A = (rand16()%2)+2; + temp_r31->unk0.x = 3.5*sind(temp_f31); + temp_r31->unk0.y = 0.01f*((rand16()%16)+20); + temp_r31->unk0.z = 3.5*cosd(temp_f31); + temp_r31->unkC.x = temp_r31->unk0.x*0.03f; + temp_r31->unkC.y = temp_r31->unk0.y*0.03f; + temp_r31->unkC.z = temp_r31->unk0.z*0.03f; + } +} + +void fn_1_6030(ModelData *arg0, Work72B4 *arg1, Mtx arg2) +{ + Unk72B4Data18 *temp_r31; + s16 temp_r29; + GXColor *temp_r28; + unkHook72B4Data18 temp_r27; + temp_r31 = arg1->unk18; + temp_r28 = arg1->unk24; + for(temp_r29=0; temp_r29unk0; temp_r29++, temp_r31++, temp_r28++) { + if(temp_r31->unk56 == 0){ + continue; + } + temp_r31->unk48.x += temp_r31->unk0.x; + temp_r31->unk48.y += temp_r31->unk0.y; + temp_r31->unk48.z += temp_r31->unk0.z; + temp_r31->unk0.x -= temp_r31->unkC.x; + temp_r31->unk0.y -= temp_r31->unkC.y; + temp_r31->unk0.z -= temp_r31->unkC.z; + temp_r31->unk28++; + if(temp_r31->unk28 >= temp_r31->unk2A) { + temp_r31->unk28 = 0; + temp_r31->unk54++; + } + if(temp_r31->unk54 >= arg1->unk14) { + temp_r31->unk30 = NULL; + temp_r31->unk56 = 0; + } else { + if(temp_r31->unk54 == 2 && temp_r31->unk30) { + temp_r27 = temp_r31->unk30; + temp_r27(temp_r31); + } + } + } +} + +void fn_1_6184(Vec *arg0, Bss12CInner *arg1) +{ + s16 temp_r31; + s16 temp_r30; + float spC[3]; + float temp_f29; + float temp_f28; + float temp_f27; + float temp_f26; + float temp_f25; + float temp_f24; + float temp_f23; + temp_f28 = arg0[1].x-arg0[0].x; + temp_f27 = arg0[1].y-arg0[0].y; + temp_f26 = arg0[1].z-arg0[0].z; + temp_f25 = arg0[2].x-arg0[0].x; + temp_f24 = arg0[2].y-arg0[0].y; + temp_f23 = arg0[2].z-arg0[0].z; + spC[0] = (temp_f27*temp_f23)-(temp_f26*temp_f24); + spC[1] = (temp_f26*temp_f25)-(temp_f28*temp_f23); + spC[2] = (temp_f28*temp_f24)-(temp_f27*temp_f25); + temp_f29 = VECMagPoint(spC[0], spC[1], spC[2]); + if(0.0f != temp_f29) { + spC[0] /= temp_f29; + spC[1] /= temp_f29; + spC[2] /= temp_f29; + } + arg1->unkC = (spC[0]*arg0[0].x)+(spC[1]*arg0[0].y)+(spC[2]*arg0[0].z); + temp_r30 = 0; + for(temp_r31=1; temp_r31<3; temp_r31++) { + if(ABS(spC[temp_r30]) < ABS(spC[temp_r31])) { + temp_r30 = temp_r31; + } + } + arg1->unk0.x = spC[0]; + arg1->unk0.y = spC[1]; + arg1->unk0.z = spC[2]; + arg1->unk10 = temp_r30; +} + +float fn_1_6504(float arg0, float arg1, float arg2) +{ + float temp_f31 = arg1-arg0; + if(temp_f31 > 180.0f) { + temp_f31 -= 360.0f; + } else if(temp_f31 < -180.0f) { + temp_f31 += 360.0f; + } + temp_f31 = arg0+(temp_f31*arg2); + if(temp_f31 >= 360.0f) { + temp_f31 -= 360.0f; + } else if(temp_f31 < 0.0f) { + temp_f31 += 360.0f; + } + return temp_f31; +} + +float fn_1_65CC(float arg0, float arg1, float arg2) +{ + return arg0+(arg2*(arg1-arg0)); +} + +float fn_1_65DC(float arg0, float arg1, float arg2, float arg3) +{ + float temp_f31 = 1.0f-arg3; + return (arg0*(temp_f31*temp_f31))+((2.0f*temp_f31)*arg3*arg1)+(arg2*(arg3*arg3)); +} + +void fn_1_6638(s16 *arg0, s16 arg1) +{ + s16 temp_r31; + s16 spCE[99]; + s16 sp8[99]; + memcpy(sp8, arg0, arg1*sizeof(s16)); + fn_1_66DC(spCE, 0, arg1); + for(temp_r31=0; temp_r31=0; temp_r31--) { + temp_r29 = rand16()%(s16)(temp_r31+1); + temp_r28 = arg0[temp_r31]; + arg0[temp_r31] = arg0[temp_r29]; + arg0[temp_r29] = temp_r28; + } +} + +void fn_1_67C0(void) +{ + if(HuPadBtnDown[0] & PAD_TRIGGER_L) { + lbl_1_bss_12 ^= 1; + } + if(lbl_1_bss_12 == 0) { + return; + } + if(HuPadBtn[0] & PAD_BUTTON_LEFT) { + CRot.y++; + } + if(HuPadBtn[0] & PAD_BUTTON_RIGHT) { + CRot.y--; + } + if(HuPadBtn[0] & PAD_BUTTON_UP) { + CRot.x--; + } + if(HuPadBtn[0] & PAD_BUTTON_DOWN) { + CRot.x++; + } + Center.x += HuPadSubStkX[0]; + if(HuPadBtn[0] & PAD_TRIGGER_R) { + Center.y += HuPadSubStkY[0]; + } else { + Center.z += HuPadSubStkY[0]; + } + if(HuPadBtn[0] & PAD_BUTTON_X) { + CZoom += 10; + } + if(HuPadBtn[0] & PAD_BUTTON_Y) { + CZoom -= 10; + } + if(HuPadBtnDown[0] & PAD_BUTTON_A) { + OSReport("\nCZoom = %.2f \n", CZoom); + OSReport("Center x = %.2f: y = %.2f: z = %.2f \n", Center.x, Center.y, Center.z); + OSReport("CRot x = %.2f: y = %.2f: z = %.2f \n", CRot.x, CRot.y, CRot.z); + } + +} + +Unk72B4Data18 *fn_1_6B34(s16 arg0, Vec *arg1, Vec *arg2, float arg3, GXColor *arg4) +{ + Unk72B4Data18 *temp_r31; + Work72B4 *temp_r30; + s16 temp_r29; + ModelData *temp_r28; + temp_r28 = &Hu3DData[arg0]; + temp_r30 = temp_r28->unk_120; + for(temp_r29 = 0, temp_r31 = temp_r30->unk18; temp_r29unk0; temp_r29++, temp_r31++) { + if(!temp_r31->unk56) { + break; + } + } + if(temp_r29 == temp_r30->unk0) { + return NULL; + } + temp_r30->unk24[temp_r29].r = arg4->r; + temp_r30->unk24[temp_r29].g = arg4->g; + temp_r30->unk24[temp_r29].b = arg4->b; + temp_r30->unk24[temp_r29].a = arg4->a; + temp_r31->unk34 = temp_r29; + temp_r31->unk38 = arg3; + temp_r31->unk3C = *arg2; + temp_r31->unk48 = *arg1; + temp_r31->unk54 = 0; + temp_r31->unk30 = NULL; + temp_r31->unk56 = 1; + return temp_r31; +} + +void fn_1_72B4(ModelData *model, Mtx mtx); +void fn_1_7824(HsfVector2f *arg0, s16 arg1, s16 arg2, float arg3, float arg4); + +s16 fn_1_6C74(AnimData *arg0, s16 arg1, float arg2, s16 arg3, s16 arg4) +{ + Work72B4 *temp_r31; + s16 temp_r30; + HsfVector2f *temp_r29; + ModelData *temp_r28; + GXColor *temp_r27; + Vec *temp_r25; + Unk72B4Data18 *temp_r24; + s16 temp_r22; + void *temp_r21; + s16 temp_r20; + s16 temp_r19; + void *temp_r18; + temp_r20 = Hu3DHookFuncCreate(fn_1_72B4); + temp_r28 = &Hu3DData[temp_r20]; + temp_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(Work72B4), temp_r28->unk_48); + temp_r28->unk_120 = temp_r31; + arg0->useNum++; + temp_r31->unk10 = arg0; + temp_r31->unk0 = arg1; + temp_r31->unk8 = 0; + temp_r31->unkC = 0; + temp_r24 = HuMemDirectMallocNum(HEAP_DATA, arg1*sizeof(Unk72B4Data18), temp_r28->unk_48); + temp_r31->unk18 = temp_r24; + for(temp_r30=0; temp_r30unk54 = -1; + temp_r24->unk56 = 0; + } + temp_r25 = HuMemDirectMallocNum(HEAP_DATA, arg1*sizeof(Vec)*4, temp_r28->unk_48); + temp_r31->unk1C = temp_r25; + for(temp_r30=0; temp_r30x = temp_r25->y = temp_r25->z = 0; + } + temp_r27 = HuMemDirectMallocNum(HEAP_DATA, arg1*sizeof(GXColor), temp_r28->unk_48); + temp_r31->unk24 = temp_r27; + for(temp_r30=0; temp_r30r = temp_r27->g = temp_r27->b = temp_r27->a = 255; + } + temp_r29 = HuMemDirectMallocNum(HEAP_DATA, arg1*sizeof(HsfVector2f)*4, temp_r28->unk_48); + temp_r31->unk20 = temp_r29; + for(temp_r30=0; temp_r30x = 0; + temp_r29->y = 0; + temp_r29++; + temp_r29->x = 1; + temp_r29->y = 0; + temp_r29++; + temp_r29->x = 1; + temp_r29->y = 1; + temp_r29++; + temp_r29->x = 0; + temp_r29->y = 1; + temp_r29++; + } + if(arg3 != 0 || arg4 != 0) { + temp_r22 = arg0->bmp->sizeX/arg3; + temp_r19 = arg0->bmp->sizeY/arg4; + temp_r31->unk14 = temp_r22*temp_r19; + temp_r31->unk60 = 1.0f/temp_r22; + temp_r31->unk64 = 1.0f/temp_r19; + } else { + temp_r22 = 1; + temp_r31->unk14 = 1; + temp_r31->unk60 = 1; + temp_r31->unk64 = 1; + } + temp_r31->unk5C = HuMemDirectMallocNum(HEAP_DATA, temp_r31->unk14*sizeof(HsfVector2f), temp_r28->unk_48); + fn_1_7824(temp_r31->unk5C, temp_r31->unk14, temp_r22, temp_r31->unk60, temp_r31->unk64); + temp_r31->unk2C[0].x = temp_r31->unk2C[3].x = temp_r31->unk2C[2].y = temp_r31->unk2C[3].y = -arg2; + temp_r31->unk2C[1].x = temp_r31->unk2C[2].x = temp_r31->unk2C[0].y = temp_r31->unk2C[1].y = arg2; + temp_r31->unk2C[0].z = temp_r31->unk2C[1].z = temp_r31->unk2C[2].z = temp_r31->unk2C[3].z = 0; + temp_r21 = HuMemDirectMallocNum(HEAP_DATA, 0x20000, temp_r28->unk_48); + temp_r18 = temp_r21; + DCFlushRange(temp_r21, 0x20000); + GXBeginDisplayList(temp_r18, 0x20000); + GXBegin(GX_QUADS, GX_VTXFMT0, 4*arg1); + for(temp_r30=0; temp_r30unk4 = GXEndDisplayList(); + temp_r31->unk28 = HuMemDirectMallocNum(HEAP_DATA, temp_r31->unk4, temp_r28->unk_48); + memcpy(temp_r31->unk28, temp_r21, temp_r31->unk4); + DCFlushRange(temp_r31->unk28, temp_r31->unk4); + HuMemDirectFree(temp_r21); + return temp_r20; +} + +void fn_1_71B8(s16 arg0) +{ + ModelData *temp_r31; + Work72B4 *temp_r30; + temp_r31 = &Hu3DData[arg0]; + temp_r30 = temp_r31->unk_120; + HuSprAnimKill(temp_r30->unk10); + Hu3DModelKill(arg0); +} + +Work72B4 *fn_1_7218(s16 arg0) +{ + ModelData *temp_r31; + temp_r31 = &Hu3DData[arg0]; + return temp_r31->unk_120; +} + +void fn_1_7244(s16 arg0, unkHook72B4 arg1) +{ + ModelData *temp_r31; + Work72B4 *temp_r30; + temp_r31 = &Hu3DData[arg0]; + temp_r30 = temp_r31->unk_120; + temp_r30->unkC = arg1; +} + +void fn_1_727C(s16 arg0, u8 arg1) +{ + ModelData *temp_r31; + Work72B4 *temp_r30; + temp_r31 = &Hu3DData[arg0]; + temp_r30 = temp_r31->unk_120; + temp_r30->unk8 = arg1; +} + +void fn_1_78F0(HsfVector2f *arg0, HsfVector2f *arg1, s16 arg2, float arg3, float arg4); +void fn_1_7994(Vec *arg0, Vec *arg1, Vec *arg2, s16 arg3); + +void fn_1_79FC(Mtx arg0, Mtx arg1); + +void fn_1_72B4(ModelData *model, Mtx mtx) +{ + Mtx sp128; + ROMtx spF8; + Mtx spC8; + Mtx sp98; + Vec sp68[4]; + Vec sp38[4]; + Vec sp8[4]; + Vec *temp_r31; + Work72B4 *temp_r30; + Unk72B4Data18 *temp_r29; + HsfVector2f *temp_r27; + s16 temp_r26; + s16 temp_r25; + unkHook72B4 temp_r23; + temp_r30 = model->unk_120; + GXLoadPosMtxImm(mtx, GX_PNMTX0); + GXSetNumTevStages(1); + GXSetNumTexGens(1); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + temp_r25 = temp_r30->unk10->bmp->dataFmt & ANIM_BMP_FMTMASK; + if(temp_r25 == ANIM_BMP_I8 || temp_r25 == ANIM_BMP_I4) { + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ONE, GX_CC_RASC, GX_CC_ZERO); + } else { + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); + } + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + if(model->attr & 0x2) { + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); + } else { + GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE); + } + HuSprTexLoad(temp_r30->unk10, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetZCompLoc(GX_FALSE); + switch(temp_r30->unk8) { + case 0: + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + break; + + case 1: + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_NOOP); + break; + + case 2: + GXSetBlendMode(GX_BM_BLEND, GX_BL_ZERO, GX_BL_INVSRCCLR, GX_LO_NOOP); + break; + } + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetArray(GX_VA_POS, temp_r30->unk1C, sizeof(Vec)); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetArray(GX_VA_CLR0, temp_r30->unk24, sizeof(GXColor)); + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GXSetArray(GX_VA_TEX0, temp_r30->unk20, sizeof(HsfVector2f)); + fn_1_79FC(mtx, sp128); + PSMTXReorder(sp128, spF8); + if(!omPauseChk() && temp_r30->unkC) { + temp_r23 = temp_r30->unkC; + temp_r23(model, temp_r30, mtx); + } + temp_r29 = temp_r30->unk18; + temp_r31 = temp_r30->unk1C; + temp_r27 = temp_r30->unk20; + PSMTXROMultVecArray(spF8, temp_r30->unk2C, sp68, 4); + for(temp_r26=0; temp_r26unk0; temp_r26++, temp_r29++, temp_r27 += 4) { + if(temp_r29->unk56 == 0) { + temp_r31->x = temp_r31->y = temp_r31->z = 0; + temp_r31++; + temp_r31->x = temp_r31->y = temp_r31->z = 0; + temp_r31++; + temp_r31->x = temp_r31->y = temp_r31->z = 0; + temp_r31++; + temp_r31->x = temp_r31->y = temp_r31->z = 0; + temp_r31++; + } else { + if(0.0f == temp_r29->unk38) { + fn_1_7994(sp68, sp38, &temp_r29->unk3C, 4); + VECAdd(&sp38[0], &temp_r29->unk48, temp_r31++); + VECAdd(&sp38[1], &temp_r29->unk48, temp_r31++); + VECAdd(&sp38[2], &temp_r29->unk48, temp_r31++); + VECAdd(&sp38[3], &temp_r29->unk48, temp_r31++); + } else { + fn_1_7994(temp_r30->unk2C, sp38, &temp_r29->unk3C, 4); + MTXRotDeg(spC8, 'Z', temp_r29->unk38); + MTXConcat(sp128, spC8, sp98); + MTXMultVecArray(sp98, sp38, sp8, 4); + VECAdd(&sp8[0], &temp_r29->unk48, temp_r31++); + VECAdd(&sp8[1], &temp_r29->unk48, temp_r31++); + VECAdd(&sp8[2], &temp_r29->unk48, temp_r31++); + VECAdd(&sp8[3], &temp_r29->unk48, temp_r31++); + } + if(temp_r29->unk54 != -1) { + fn_1_78F0(temp_r27, temp_r30->unk5C, temp_r29->unk54, temp_r30->unk60, temp_r30->unk64); + } + } + } + DCFlushRangeNoSync(temp_r30->unk1C, (temp_r30->unk0*sizeof(Vec))*4); + DCFlushRangeNoSync(temp_r30->unk20, (temp_r30->unk0*sizeof(HsfVector2f))*4); + PPCSync(); + GXCallDisplayList(temp_r30->unk28, temp_r30->unk4); +} + +void fn_1_7824(HsfVector2f *arg0, s16 arg1, s16 arg2, float arg3, float arg4) +{ + s16 temp_r30; + s16 temp_r29; + s16 temp_r31; + for(temp_r31=0; temp_r31x = temp_r30*arg3; + arg0->y = temp_r29*arg4; + } +} + +void fn_1_78F0(HsfVector2f *arg0, HsfVector2f *arg1, s16 arg2, float arg3, float arg4) +{ + arg0[0].x = arg1[arg2].x; + arg0[0].y = arg1[arg2].y; + arg0[1].x = arg3+arg1[arg2].x; + arg0[1].y = arg1[arg2].y; + arg0[2].x = arg3+arg1[arg2].x; + arg0[2].y = arg4+arg1[arg2].y; + arg0[3].x = arg1[arg2].x; + arg0[3].y = arg4+arg1[arg2].y; +} + +void fn_1_7994(Vec *arg0, Vec *arg1, Vec *arg2, s16 arg3) +{ + s16 temp_r31; + for(temp_r31=0; temp_r31x = arg0->x*arg2->x; + arg1->y = arg0->y*arg2->y; + arg1->z = arg0->z*arg2->z; + } +} + +void fn_1_79FC(Mtx arg0, Mtx arg1) +{ + arg1[0][0] = arg0[0][0]; + arg1[1][0] = arg0[0][1]; + arg1[2][0] = arg0[0][2]; + arg1[0][1] = arg0[1][0]; + arg1[1][1] = arg0[1][1]; + arg1[2][1] = arg0[1][2]; + arg1[0][2] = arg0[2][0]; + arg1[1][2] = arg0[2][1]; + arg1[2][2] = arg0[2][2]; + arg1[0][3] = 0; + arg1[1][3] = 0; + arg1[2][3] = 0; +} + +s32 fn_1_7A78(s32 arg0, s16 arg1) +{ + UnkMsmStruct_01 sp10; + sp10.unk00 = 1; + sp10.unk04 = arg1; + return msmSeSetParam(arg0, &sp10); +} \ No newline at end of file diff --git a/src/game/hsfdraw.c b/src/game/hsfdraw.c index 5d5b32d5..7018f952 100755 --- a/src/game/hsfdraw.c +++ b/src/game/hsfdraw.c @@ -2375,14 +2375,14 @@ static void ObjDraw(HsfDrawObject *arg0) { } } -void MakeDisplayList(s16 arg0, HsfData *arg1) { +void MakeDisplayList(s16 arg0, u32 arg1) { HsfData *temp_r31; ModelData *var_r30; temp_r31 = Hu3DData[arg0].hsfData; var_r30 = &Hu3DData[arg0]; curModelID = arg0; - mallocNo = (u32) arg1; + mallocNo = arg1; faceNumBuf = HuMemDirectMallocNum(HEAP_DATA, 0x800 * sizeof(u16), mallocNo); MDObjCall(temp_r31, temp_r31->root); HuMemDirectFree(faceNumBuf); diff --git a/src/game/hsfman.c b/src/game/hsfman.c index ad679e66..1a30df2c 100644 --- a/src/game/hsfman.c +++ b/src/game/hsfman.c @@ -38,7 +38,7 @@ s32 shadowModelDrawF; s16 Hu3DProjectionNum; s16 Hu3DCameraNo; s16 Hu3DCameraBit; -HsfData* Hu3DMallocNo; +u32 Hu3DMallocNo; s16 Hu3DPauseF; u16 Hu3DCameraExistF; static u16 NoSyncF; @@ -343,11 +343,11 @@ s16 Hu3DModelCreate(void *arg0) { return -1; } var_r31->hsfData = LoadHSF(arg0); - var_r31->unk_48 = Hu3DMallocNo = var_r31->hsfData; + var_r31->unk_48 = Hu3DMallocNo = (u32)var_r31->hsfData; var_r31->attr = 0; var_r31->motion_attr = 0; var_r31->unk_02 = 0; - MakeDisplayList(var_r30, (HsfData* ) var_r31->unk_48); + MakeDisplayList(var_r30, var_r31->unk_48); var_r31->unk_68 = 1.0f; for (i = 0; i < 4; i++) { var_r31->unk_10[i] = -1; @@ -424,10 +424,10 @@ s16 Hu3DModelLink(s16 arg0) { return -1; } var_r31->unk_C8 = temp_r30->hsfData; - var_r31->hsfData = HuMemDirectMallocNum(HEAP_DATA, 0x80, (u32)var_r31->unk_4C); - var_r31->unk_4C = var_r31->hsfData; + var_r31->hsfData = HuMemDirectMallocNum(HEAP_DATA, 0x80, var_r31->unk_4C); + var_r31->unk_4C = (u32)var_r31->hsfData; *var_r31->hsfData = *temp_r30->hsfData; - temp_r3_2 = Hu3DObjDuplicate(var_r31->hsfData, (u32)var_r31->unk_4C); + temp_r3_2 = Hu3DObjDuplicate(var_r31->hsfData, var_r31->unk_4C); var_r31->hsfData->root = (HsfObject*)((u32)temp_r3_2 + ((u32)var_r31->hsfData->root - (u32)var_r31->hsfData->object)); var_r31->hsfData->object = temp_r3_2; var_r31->unk_48 = temp_r30->unk_48; @@ -487,7 +487,7 @@ s16 Hu3DHookFuncCreate(ModelHookFunc hook) { return -1; } var_r31->hook = hook; - var_r31->unk_48 = (HsfData *)(var_r29 + 10000); + var_r31->unk_48 = var_r29+10000; var_r31->attr = 0x10; var_r31->motion_attr = 0; var_r31->pos.x = var_r31->pos.y = var_r31->pos.z = 0.0f; @@ -536,7 +536,7 @@ void Hu3DModelKill(s16 arg0) { layerNum[temp_r31->layer] -= 1; if ((temp_r31->attr & 0x10) != 0) { - HuMemDirectFreeNum(HEAP_DATA, (u32) temp_r31->unk_48); + HuMemDirectFreeNum(HEAP_DATA, temp_r31->unk_48); if ((temp_r31->attr & 0x20) != 0) { copy = temp_r31->unk_120; HuSprAnimKill(copy->unk_44); @@ -551,14 +551,14 @@ void Hu3DModelKill(s16 arg0) { if (temp_r31->unk_08 != -1) { Hu3DMotionKill(temp_r31->unk_08); } - HuMemDirectFreeNum(HEAP_DATA, (u32) temp_r31->unk_48); + HuMemDirectFreeNum(HEAP_DATA, temp_r31->unk_48); temp_r31->hsfData = NULL; return; } Hu3DAnimModelKill(arg0); if (temp_r31->unk_24 != -1) { HuMemDirectFree(temp_r31->hsfData); - HuMemDirectFreeNum(HEAP_DATA, (u32) temp_r31->unk_4C); + HuMemDirectFreeNum(HEAP_DATA, temp_r31->unk_4C); var_r28 = temp_r31->unk_C8; temp_r31->hsfData = var_r28; } @@ -586,7 +586,7 @@ void Hu3DModelKill(s16 arg0) { } if (temp_r31->unk_20 != -1 && Hu3DMotionKill(temp_r31->unk_20) == 0) { Hu3DMotion[temp_r31->unk_20].unk_02 = -1; - HuMemDirectFreeNum(HEAP_DATA, (u32) temp_r31->unk_48); + HuMemDirectFreeNum(HEAP_DATA, temp_r31->unk_48); temp_r31->hsfData = NULL; if (modelKillAllF == 0) { HuMemDCFlush(HEAP_DATA); @@ -594,7 +594,7 @@ void Hu3DModelKill(s16 arg0) { return; } HuMemDirectFree(temp_r31->hsfData); - HuMemDirectFreeNum(HEAP_DATA, (u32) temp_r31->unk_48); + HuMemDirectFreeNum(HEAP_DATA, temp_r31->unk_48); for (i = 0; i < temp_r31->unk_26; i++) { Hu3DGLightKill(temp_r31->unk_28[i]); } @@ -2103,7 +2103,7 @@ void Hu3DMipMapSet(char* arg0, s16 arg1, s32 arg2, f32 arg8) { for ( i = 0, var_r24 = i; i < temp_r3->bmpNum; i++, var_r30++) { var_r24 += var_r30->dataSize; } - var_r23 = HuMemDirectMallocNum(HEAP_DATA, var_r24, (u32)temp_r25->unk_48); + var_r23 = HuMemDirectMallocNum(HEAP_DATA, var_r24, temp_r25->unk_48); temp_r22 = var_r23; var_r30 = temp_r3->bmp; temp_r31->data = temp_r22;