From e34a300610e58191c4b90d0eff0e8e3c661c7646 Mon Sep 17 00:00:00 2001 From: dbalatoni13 Date: Sun, 27 Oct 2024 19:09:24 +0100 Subject: [PATCH] Almost finished m420dll --- config/GMPE01_00/rels/m420dll/splits.txt | 11 +- config/GMPE01_00/rels/m420dll/symbols.txt | 246 ++-- configure.py | 1 + include/REL/m420dll.h | 68 ++ src/REL/m420dll/camera.c | 144 +++ src/REL/m420dll/main.c | 251 +++++ src/REL/m420dll/map.c | 1235 +++++++++++++++++++++ src/REL/m420dll/player.c | 992 +++++++++++++++++ 8 files changed, 2823 insertions(+), 125 deletions(-) create mode 100644 include/REL/m420dll.h create mode 100644 src/REL/m420dll/camera.c create mode 100644 src/REL/m420dll/main.c create mode 100644 src/REL/m420dll/map.c create mode 100644 src/REL/m420dll/player.c diff --git a/config/GMPE01_00/rels/m420dll/splits.txt b/config/GMPE01_00/rels/m420dll/splits.txt index eb2fc2b9..9c77e32d 100644 --- a/config/GMPE01_00/rels/m420dll/splits.txt +++ b/config/GMPE01_00/rels/m420dll/splits.txt @@ -10,10 +10,15 @@ REL/executor.c: .text start:0x00000000 end:0x000000A0 REL/m420dll/main.c: - .text start:0x000000A0 end:0x00001B8C - .rodata start:0x00000000 end:0x000000F8 + .text start:0x000000A0 end:0x00000D98 + .rodata start:0x00000000 end:0x00000098 + .bss start:0x00000000 end:0x00000030 + +REL/m420dll/camera.c: + .text start:0x00000D98 end:0x00001B8C + .rodata start:0x00000098 end:0x000000F8 .data start:0x00000000 end:0x00000050 - .bss start:0x00000000 end:0x000000B0 + .bss start:0x00000030 end:0x000000B0 REL/m420dll/player.c: .text start:0x00001B8C end:0x00004964 diff --git a/config/GMPE01_00/rels/m420dll/symbols.txt b/config/GMPE01_00/rels/m420dll/symbols.txt index 415bc67d..8e6b2a20 100644 --- a/config/GMPE01_00/rels/m420dll/symbols.txt +++ b/config/GMPE01_00/rels/m420dll/symbols.txt @@ -83,127 +83,129 @@ fn_1_8934 = .text:0x00008934; // type:function size:0x10 fn_1_8944 = .text:0x00008944; // type:function size:0x34 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x54 -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x24 data:4byte -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:0x4 data:float -lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 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:0x8 data:double -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:0x4 data:float -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x8 data:double -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 data:float -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x160 -lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x60 -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_2C8 = .rodata:0x000002C8; // type:object size:0x8 data:double -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float -lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 data:float -lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 data:float -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 data:float -lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 data:float -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 data:float -lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 data:float -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 data:float -lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 data:float -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x10 -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 data:float -lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x1C -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_338 = .rodata:0x00000338; // type:object size:0x8 data:double -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:0x8 data:float -lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x6C -lbl_1_rodata_3CC = .rodata:0x000003CC; // type:object size:0xC data:4byte -lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0xC data:4byte -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_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_428 = .rodata:0x00000428; // type:object size:0x8 data:double -lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x8 data:double -lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x8 data:double -lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x8 data:double -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:0x8 data:double -lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x4 data:float -lbl_1_rodata_45C = .rodata:0x0000045C; // type:object size:0x4 data:float -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:0x8 data:double -lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x8 data:double -lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 data:float -lbl_1_rodata_490 = .rodata:0x00000490; // type:object size:0x8 data:double -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:0x30 data:4byte -lbl_1_rodata_4F8 = .rodata:0x000004F8; // type:object size:0x30 data:4byte -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:0xC data:4byte -lbl_1_rodata_54C = .rodata:0x0000054C; // type:object size:0x4 data:float -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:0x8 data:float -lbl_1_data_0 = .data:0x00000000; // type:object size:0x1E data:string -lbl_1_data_1E = .data:0x0000001E; // type:object size:0x1E data:string -lbl_1_data_3C = .data:0x0000003C; // type:object size:0x11 +__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:0x54 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x24 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:0x4 scope:local data:float +lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 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:0x8 scope:local data:double +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: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:0x8 scope:local data:float +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x160 scope:local +lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x60 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_2C8 = .rodata:0x000002C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x10 scope:local +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x1C scope:local +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_338 = .rodata:0x00000338; // type:object size:0x8 scope:local data:double +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:0x8 scope:local data:float +lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x6C scope:local +lbl_1_rodata_3CC = .rodata:0x000003CC; // type:object size:0xC scope:local data:float +lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0xC 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_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 +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_428 = .rodata:0x00000428; // type:object size:0x8 scope:local data:double +lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x8 scope:local data:double +lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x8 scope:local data:double +lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x8 scope:local data:double +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:0x8 scope:local data:double +lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x4 scope:local data:float +lbl_1_rodata_45C = .rodata:0x0000045C; // type:object size:0x4 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: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:0x8 scope:local data:double +lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x8 scope:local data:double +lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 scope:local data:float +lbl_1_rodata_490 = .rodata:0x00000490; // type:object size:0x8 scope:local data:double +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:0x30 scope:local data:float +lbl_1_rodata_4F8 = .rodata:0x000004F8; // type:object size:0x30 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_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:0xC scope:local data:4byte +lbl_1_rodata_54C = .rodata:0x0000054C; // type:object size:0x4 scope:local data:float +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:0x8 scope:local data:float +lbl_1_data_0 = .data:0x00000000; // type:object size:0x1E scope:local data:string +lbl_1_data_1E = .data:0x0000001E; // type:object size:0x1E scope:local data:string +lbl_1_data_3C = .data:0x0000003C; // type:object size:0x11 scope:local data:string lbl_1_data_50 = .data:0x00000050; // type:object size:0x80 lbl_1_data_D0 = .data:0x000000D0; // type:object size:0x1B data:string lbl_1_data_EC = .data:0x000000EC; // type:object size:0x30 @@ -211,7 +213,7 @@ lbl_1_data_11C = .data:0x0000011C; // type:object size:0x19 data:string lbl_1_data_135 = .data:0x00000135; // type:object size:0x1 lbl_1_data_138 = .data:0x00000138; // type:object size:0x1C lbl_1_data_154 = .data:0x00000154; // type:object size:0x10 data:4byte -lbl_1_data_164 = .data:0x00000164; // type:object size:0xD data:string +lbl_1_data_164 = .data:0x00000164; // type:object size:0xD 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:0x4 data:4byte diff --git a/configure.py b/configure.py index 2fe8e8ee..eeeb17a4 100644 --- a/configure.py +++ b/configure.py @@ -977,6 +977,7 @@ config.libs = [ "m420dll", # Fish n' Drips objects={ Object(NonMatching, "REL/m420dll/main.c"), + Object(Matching, "REL/m420dll/camera.c"), Object(NonMatching, "REL/m420dll/player.c"), Object(NonMatching, "REL/m420dll/map.c"), Object(Matching, "REL/m420dll/rand.c"), diff --git a/include/REL/m420dll.h b/include/REL/m420dll.h new file mode 100644 index 00000000..9d3dce97 --- /dev/null +++ b/include/REL/m420dll.h @@ -0,0 +1,68 @@ +#ifndef M420DLL_H +#define M420DLL_H + +#include "game/object.h" + +typedef struct M420DllUnkStruct { + /* 0x00 */ Vec unk_00; + /* 0x0C */ Vec unk_0C; + /* 0x18 */ float unk_18; +} M420DllUnkStruct; /* size = 0x1C */ // same as in m447dll/camera.c + +typedef struct M420DllPlayerStruct { + /* 0x00 */ struct { + s8 unk_00_field0 : 1; + s8 unk_00_field1 : 1; + s8 unk_00_field2 : 1; + }; + /* 0x04 */ s32 unk_04; + /* 0x08 */ u8 unk_08; + /* 0x0A */ s16 unk_0A; + /* 0x0C */ u8 unk_0C; + /* 0x10 */ Vec unk_10; + /* 0x1C */ Vec unk_1C; + /* 0x28 */ Vec unk_28; + /* 0x34 */ Vec unk_34; + /* 0x40 */ Process *unk_40; + /* 0x44 */ char unk44[4]; + /* 0x48 */ s32 unk_48; + /* 0x4C */ s32 unk_4C; + /* 0x50 */ s16 unk_50; + /* 0x52 */ char unk52[6]; + /* 0x58 */ s32 unk_58; + /* 0x5C */ s32 unk_5C[0xA]; + /* 0x84 */ s32 unk_84[0xA]; + /* 0xAC */ s16 unk_AC; + /* 0xAE */ s16 unk_AE[0xB]; + /* 0xC4 */ s16 unk_C4[0xA]; + /* 0xD8 */ s16 unk_D8; + /* 0xDC */ float unk_DC; + /* 0xE0 */ float unk_E0; + /* 0xE4 */ s32 unk_E4; + /* 0xE8 */ struct M420DllPlayerStruct *unk_E8; +} M420DllPlayerStruct; /* size = 0xEC */ + +void fn_1_1184(void); + +s32 fn_1_4964(void); +void fn_1_596C(void); +s32 fn_1_59F4(s32); +s32 fn_1_5AA8(s32 arg0, float arg1); +s32 fn_1_60F0(void); +void fn_1_6268(void); +void fn_1_636C(void); +void fn_1_63EC(void); +void fn_1_6554(void); +s16 fn_1_6660(void); +void fn_1_669C(s32 arg0); +void fn_1_6728(void); +s32 fn_1_67E8(s32); +s32 fn_1_6810(void); +void fn_1_8934(void); +s32 fn_1_8944(void); +M420DllPlayerStruct *fn_1_1B8C(s32, s32); +void fn_1_1E14(M420DllPlayerStruct *); + +extern Process *lbl_1_bss_4; + +#endif diff --git a/src/REL/m420dll/camera.c b/src/REL/m420dll/camera.c new file mode 100644 index 00000000..c587a69e --- /dev/null +++ b/src/REL/m420dll/camera.c @@ -0,0 +1,144 @@ +#include "ext_math.h" +#include "game/audio.h" +#include "game/flag.h" +#include "game/hsfman.h" +#include "game/minigame_seq.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/printfunc.h" +#include "game/wipe.h" + +#include "REL/m420dll.h" + +Process *lbl_1_bss_A8; +M420DllUnkStruct lbl_1_bss_8C; +M420DllUnkStruct lbl_1_bss_70; +M420DllUnkStruct lbl_1_bss_54; +s32 lbl_1_bss_50; +s32 lbl_1_bss_4C; +s32 lbl_1_bss_48; +float lbl_1_bss_44; +float lbl_1_bss_40; +float lbl_1_bss_3C; +float lbl_1_bss_38; +float lbl_1_bss_34; +float lbl_1_bss_30; + +s32 fn_1_D98(void) +{ + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + Hu3DCameraPerspectiveSet(1, 30.0f, 10.0f, 8000.0f, 1.2f); + lbl_1_bss_8C.unk_00.x = 0.0f; + lbl_1_bss_8C.unk_00.y = 0.0f; + lbl_1_bss_8C.unk_00.z = 0.0f; + lbl_1_bss_8C.unk_0C.x = -10.0f; + lbl_1_bss_8C.unk_0C.y = 0.0f; + lbl_1_bss_8C.unk_0C.z = 0.0f; + lbl_1_bss_8C.unk_18 = 1000.0f; + lbl_1_bss_50 = 0; + lbl_1_bss_4C = 0; + lbl_1_bss_48 = 0; + lbl_1_bss_A8 = HuPrcChildCreate(fn_1_1184, 0x1F4, 0x2000, 0, lbl_1_bss_4); + return 1; +} + +void fn_1_F48(void) +{ + HuPrcKill(lbl_1_bss_A8); +} + +void fn_1_F74(const Vec *arg0, s32 arg1) +{ + lbl_1_bss_54.unk_00 = *arg0; + lbl_1_bss_70.unk_00 = lbl_1_bss_8C.unk_00; + lbl_1_bss_44 = 0.0f; + lbl_1_bss_38 = 1.0f / arg1; + lbl_1_bss_50 = 1; +} + +void fn_1_1030(const Vec *arg0, s32 arg1) +{ + lbl_1_bss_54.unk_0C = *arg0; + lbl_1_bss_70.unk_0C = lbl_1_bss_8C.unk_0C; + lbl_1_bss_40 = 0.0f; + lbl_1_bss_34 = 1.0f / arg1; + lbl_1_bss_4C = 1; +} + +void fn_1_10EC(float arg8, s32 arg0) +{ + lbl_1_bss_54.unk_18 = arg8; + lbl_1_bss_70.unk_18 = lbl_1_bss_8C.unk_18; + lbl_1_bss_3C = 0.0f; + lbl_1_bss_30 = 1.0f / arg0; + lbl_1_bss_48 = 1; +} + +void fn_1_1184(void) +{ + Vec sp28; + Vec sp1C; + Vec sp10; + float var_f31; + + while (TRUE) { + if (lbl_1_bss_50 != 0) { + var_f31 = sind((90.0f * lbl_1_bss_44)); + var_f31 *= var_f31; + lbl_1_bss_8C.unk_00.x = lbl_1_bss_70.unk_00.x + (var_f31 * (lbl_1_bss_54.unk_00.x - lbl_1_bss_70.unk_00.x)); + lbl_1_bss_8C.unk_00.y = lbl_1_bss_70.unk_00.y + (var_f31 * (lbl_1_bss_54.unk_00.y - lbl_1_bss_70.unk_00.y)); + lbl_1_bss_8C.unk_00.z = lbl_1_bss_70.unk_00.z + (var_f31 * (lbl_1_bss_54.unk_00.z - lbl_1_bss_70.unk_00.z)); + if ((lbl_1_bss_44 += lbl_1_bss_38) >= 1.0f) { + lbl_1_bss_8C.unk_00 = lbl_1_bss_54.unk_00; + lbl_1_bss_50 = 0; + } + } + if (lbl_1_bss_4C != 0) { + var_f31 = sind((90.0f * lbl_1_bss_40)); + var_f31 *= var_f31; + lbl_1_bss_8C.unk_0C.x = lbl_1_bss_70.unk_0C.x + (var_f31 * (lbl_1_bss_54.unk_0C.x - lbl_1_bss_70.unk_0C.x)); + lbl_1_bss_8C.unk_0C.y = lbl_1_bss_70.unk_0C.y + (var_f31 * (lbl_1_bss_54.unk_0C.y - lbl_1_bss_70.unk_0C.y)); + lbl_1_bss_8C.unk_0C.z = lbl_1_bss_70.unk_0C.z + (var_f31 * (lbl_1_bss_54.unk_0C.z - lbl_1_bss_70.unk_0C.z)); + if ((lbl_1_bss_40 += lbl_1_bss_34) >= 1.0f) { + lbl_1_bss_8C.unk_0C = lbl_1_bss_54.unk_0C; + lbl_1_bss_4C = 0; + } + } + if (lbl_1_bss_48 != 0) { + var_f31 = sind((90.0f * lbl_1_bss_3C)); + var_f31 *= var_f31; + lbl_1_bss_8C.unk_18 = lbl_1_bss_70.unk_18 + (var_f31 * (lbl_1_bss_54.unk_18 - lbl_1_bss_70.unk_18)); + if ((lbl_1_bss_3C += lbl_1_bss_30) >= 1.0f) { + lbl_1_bss_8C.unk_18 = lbl_1_bss_54.unk_18; + lbl_1_bss_48 = 0; + } + } + sp28.x = lbl_1_bss_8C.unk_00.x + (lbl_1_bss_8C.unk_18 * (sind(lbl_1_bss_8C.unk_0C.y) * cosd(lbl_1_bss_8C.unk_0C.x))); + sp28.y = lbl_1_bss_8C.unk_00.y + (lbl_1_bss_8C.unk_18 * -sind(lbl_1_bss_8C.unk_0C.x)); + sp28.z = lbl_1_bss_8C.unk_00.z + (lbl_1_bss_8C.unk_18 * (cosd(lbl_1_bss_8C.unk_0C.y) * cosd(lbl_1_bss_8C.unk_0C.x))); + sp10.x = sind(lbl_1_bss_8C.unk_0C.y) * sind(lbl_1_bss_8C.unk_0C.x); + sp10.y = cosd(lbl_1_bss_8C.unk_0C.x); + sp10.z = cosd(lbl_1_bss_8C.unk_0C.y) * sind(lbl_1_bss_8C.unk_0C.x); + sp1C = lbl_1_bss_8C.unk_00; + + Hu3DCameraPosSet(1, sp28.x, sp28.y, sp28.z, sp10.x, sp10.y, sp10.z, sp1C.x, sp1C.y, sp1C.z); + HuPrcVSleep(); + } +} + +void fn_1_189C(void) +{ + lbl_1_bss_8C.unk_00.x += (0.02f * *HuPadStkX); + lbl_1_bss_8C.unk_00.y += (0.02f * *HuPadStkY); + lbl_1_bss_8C.unk_0C.y -= (0.02f * *HuPadSubStkX); + lbl_1_bss_8C.unk_0C.x += (0.02f * *HuPadSubStkY); + lbl_1_bss_8C.unk_18 += (0.02f * *HuPadTrigL); + lbl_1_bss_8C.unk_18 -= (0.02f * *HuPadTrigR); +} + +void fn_1_1AB0(void) +{ + print8(0x20, 0x84, 1.5f, "LOOKAT : x=%.2f y=%.2f z=%.2f", lbl_1_bss_8C.unk_00.x, lbl_1_bss_8C.unk_00.y, lbl_1_bss_8C.unk_00.z); + print8(0x20, 0x94, 1.5f, "ANGLE : x=%.2f y=%.2f z=%.2f", lbl_1_bss_8C.unk_0C.x, lbl_1_bss_8C.unk_0C.y, lbl_1_bss_8C.unk_0C.z); + print8(0x20, 0xA4, 1.5f, "ZOOM : x=%.2f", lbl_1_bss_8C.unk_18); +} diff --git a/src/REL/m420dll/main.c b/src/REL/m420dll/main.c new file mode 100644 index 00000000..4bad4ddf --- /dev/null +++ b/src/REL/m420dll/main.c @@ -0,0 +1,251 @@ +#include "ext_math.h" +#include "game/audio.h" +#include "game/flag.h" +#include "game/hsfman.h" +#include "game/minigame_seq.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/printfunc.h" +#include "game/wipe.h" +#include "rel_sqrt_consts.h" + +#include "REL/m420dll.h" + +s32 fn_1_198(void); +void fn_1_3D4(void); +void fn_1_43C(void); +void fn_1_D14(s32 arg0, s32 arg1); +s32 fn_1_D98(void); +void fn_1_F48(void); +void fn_1_F74(const Vec *arg0, s32 arg1); +void fn_1_1030(const Vec *arg0, s32 arg1); +void fn_1_10EC(float arg8, s32 arg0); +void fn_1_118(void); + +s32 lbl_1_bss_2C; +Process *lbl_1_bss_28; +M420DllPlayerStruct *lbl_1_bss_18[4]; +s16 lbl_1_bss_14; +s16 lbl_1_bss_12; +s16 lbl_1_bss_10; +s32 lbl_1_bss_C; +s32 lbl_1_bss_8; +Process *lbl_1_bss_4; +Process *lbl_1_bss_0; + +static const M420DllUnkStruct lbl_1_rodata_10[3] = { + { { 0.0f, 1040.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, 680.0f }, + { { 0.0f, 800.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, 680.0f }, + { { 0.0f, 310.0f, 0.0f }, { -10.0f, 0.0f, 0.0f }, 1950.0f }, +}; + +void ObjectSetup(void) +{ + lbl_1_bss_4 = omInitObjMan(1, 0x2000); + omGameSysInit(lbl_1_bss_4); + lbl_1_bss_0 = HuPrcChildCreate(fn_1_118, 0x3E8, 0x4000, 0, lbl_1_bss_4); + fn_1_198(); +} + +void fn_1_118(void) +{ + while (omSysExitReq == 0) { + HuPrcVSleep(); + } + WipeCreate(2, 0, 0x3C); + + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + HuAudFadeOut(0x64); + fn_1_3D4(); + HuPrcVSleep(); + omOvlReturnEx(1, 1); + HuPrcEnd(); +} + +s32 fn_1_198(void) +{ + s32 sp8[3]; + s32 var_r31; + s32 var_r30; + + Vec sp14[3] = { { 0.0f, 4000.0f, 100.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } }; + frand(); + fn_1_8934(); + fn_1_4964(); + fn_1_D98(); + fn_1_D14(0, 1); + Hu3DShadowCreate(30.0f, 20.0f, 10000.0f); + Hu3DShadowTPLvlSet(0.5f); + Hu3DShadowPosSet(&sp14[0], &sp14[1], &sp14[2]); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + sp8[var_r31] = 0; + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (GWPlayerCfg[var_r31].group == 0) { + lbl_1_bss_18[0] = fn_1_1B8C(var_r31, 0); + } + else { + do { + var_r30 = fn_1_8944() % 3; + } while (sp8[var_r30] != 0); + sp8[var_r30] = 1; + lbl_1_bss_18[var_r30 + 1] = fn_1_1B8C(var_r31, var_r30 + 1); + } + } + lbl_1_bss_18[1]->unk_E8 = NULL; + lbl_1_bss_18[2]->unk_E8 = lbl_1_bss_18[1]; + lbl_1_bss_18[3]->unk_E8 = lbl_1_bss_18[2]; + lbl_1_bss_28 = HuPrcChildCreate(fn_1_43C, 0x3E9, 0x4000, 0, lbl_1_bss_4); + return 1; +} + +void fn_1_3D4(void) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + fn_1_1E14(lbl_1_bss_18[var_r31]); + } + fn_1_596C(); + fn_1_F48(); + HuPrcKill(lbl_1_bss_28); +} + +void fn_1_43C(void) +{ + s32 var_r31; + s32 var_r30; + + lbl_1_bss_C = 0; + WipeCreate(1, 0, 0x3C); + + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + fn_1_59F4(0); + fn_1_D14(1, 0x50); + HuPrcSleep(0x4E); + fn_1_D14(2, 0x3C); + HuPrcSleep(0xB4); + fn_1_59F4(2); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_18[var_r31]->unk_48 = 9; + } + lbl_1_bss_8 = HuAudSeqPlay(0x48); + lbl_1_bss_10 = MGSeqCreate(3, 0); + + while (MGSeqStatGet(lbl_1_bss_10) != 0) { + HuPrcVSleep(); + } + MGSeqKill(lbl_1_bss_10); + lbl_1_bss_12 = 0xE10; + lbl_1_bss_14 = MGSeqCreate(1, lbl_1_bss_12 / 60, -1, -1); + var_r30 = 1; + while (TRUE) { + if (lbl_1_bss_18[0]->unk_48 == 0) { + lbl_1_bss_18[0]->unk_48 = 1; + } + if ((lbl_1_bss_18[var_r30]->unk_48 == 0) && (lbl_1_bss_12 > 5)) { + lbl_1_bss_18[var_r30]->unk_48 = 3; + } + if ((lbl_1_bss_18[var_r30]->unk_00_field1) && (var_r30 != 1)) { + lbl_1_bss_18[var_r30 - 1]->unk_48 = 4; + } + if (lbl_1_bss_18[var_r30]->unk_48 == 6) { + var_r30++; + if (var_r30 > 3) { + var_r30 = 1; + lbl_1_bss_18[3]->unk_48 = 0; + } + } + if (lbl_1_bss_12 >= 0) { + if (((--lbl_1_bss_12) % 60) == 0) { + MGSeqParamSet(lbl_1_bss_14, 1, lbl_1_bss_12 / 60); + } + } + if ((fn_1_67E8(0) == 0) && (fn_1_67E8(1) == 0) && (lbl_1_bss_12 > 0)) { + HuPrcVSleep(); + } + else { + break; + } + } + if ((fn_1_67E8(0) != 0) && (fn_1_67E8(1) != 0)) { + lbl_1_bss_C = 3; + } + else if (fn_1_67E8(0) != 0) { + lbl_1_bss_C = 1; + } + else if (fn_1_67E8(1) != 0) { + lbl_1_bss_C = 2; + } + else { + lbl_1_bss_C = 3; + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_18[var_r31]->unk_48 = 0xB; + } + HuPrcVSleep(); + MGSeqParamSet(lbl_1_bss_14, 2, -1); + HuAudSeqFadeOut(lbl_1_bss_8, 0x64); + lbl_1_bss_10 = MGSeqCreate(3, 1); + + while (MGSeqStatGet(lbl_1_bss_10) != 0) { + HuPrcVSleep(); + } + MGSeqKill(lbl_1_bss_10); + fn_1_6728(); + HuPrcSleep(0x3C); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_18[var_r31]->unk_48 = 0xA; + } + HuPrcSleep(0x3C); + if (lbl_1_bss_C == 3) { + lbl_1_bss_10 = MGSeqCreate(3, 2); + HuAudSStreamPlay(4); + lbl_1_bss_18[0]->unk_48 = 8; + lbl_1_bss_18[1]->unk_48 = 8; + lbl_1_bss_18[2]->unk_48 = 8; + lbl_1_bss_18[3]->unk_48 = 8; + } + else { + fn_1_59F4(1); + while (fn_1_6810() == 0) { + HuPrcVSleep(); + } + if (lbl_1_bss_C == 1) { + lbl_1_bss_10 = MGSeqCreate(5, 3, lbl_1_bss_18[0]->unk_0A, -1, -1, -1); + HuAudSStreamPlay(1); + lbl_1_bss_18[0]->unk_48 = 7; + lbl_1_bss_18[1]->unk_48 = 8; + lbl_1_bss_18[2]->unk_48 = 8; + lbl_1_bss_18[3]->unk_48 = 8; + GWPlayerCoinWinAdd(lbl_1_bss_18[0]->unk_04, 10); + } + else { + lbl_1_bss_10 = MGSeqCreate(5, 3, lbl_1_bss_18[1]->unk_0A, lbl_1_bss_18[2]->unk_0A, lbl_1_bss_18[3]->unk_0A, -1); + HuAudSStreamPlay(1); + lbl_1_bss_18[0]->unk_48 = 8; + lbl_1_bss_18[1]->unk_48 = 7; + lbl_1_bss_18[2]->unk_48 = 7; + lbl_1_bss_18[3]->unk_48 = 7; + GWPlayerCoinWinAdd(lbl_1_bss_18[1]->unk_04, 10); + GWPlayerCoinWinAdd(lbl_1_bss_18[2]->unk_04, 10); + GWPlayerCoinWinAdd(lbl_1_bss_18[3]->unk_04, 10); + } + } + HuPrcSleep(0xD2); + omSysExitReq = 1; + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_D14(s32 arg0, s32 arg1) +{ + fn_1_F74(&lbl_1_rodata_10[arg0].unk_00, arg1); + fn_1_1030(&lbl_1_rodata_10[arg0].unk_0C, arg1); + fn_1_10EC(lbl_1_rodata_10[arg0].unk_18, arg1); +} diff --git a/src/REL/m420dll/map.c b/src/REL/m420dll/map.c new file mode 100644 index 00000000..baf43997 --- /dev/null +++ b/src/REL/m420dll/map.c @@ -0,0 +1,1235 @@ +#include "ext_math.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +#include "REL/m420dll.h" + +typedef struct M420DllUnkMapStruct2 { + /* 0x00 */ struct { + s8 unk_00_field0 : 1; + s8 unk_00_field1 : 1; + s8 unk_00_field2 : 1; + s8 unk_00_field3 : 1; + s8 unk_00_field4 : 1; + s8 unk_00_field5 : 1; + s8 unk_00_field6 : 1; + s8 unk_00_field7 : 1; + }; + /* 0x04 */ s16 unk_02; + /* 0x04 */ Vec unk_04; + /* 0x10 */ Vec unk_10; + /* 0x1C */ Vec unk_1C; + /* 0x28 */ Vec unk_28; + /* 0x34 */ Vec unk_34; + /* 0x40 */ Vec unk_40; + /* 0x4C */ Vec unk_4C; + /* 0x58 */ Vec unk_58; + /* 0x64 */ Vec unk_64; + /* 0x70 */ float unk_70; + /* 0x74 */ float unk_74; + /* 0x78 */ s32 unk_78; + /* 0x7C */ float unk_7C; + /* 0x80 */ float unk_80; + /* 0x84 */ s32 unk_84; + /* 0x88 */ float unk_88; + /* 0x8C */ float unk_8C; + /* 0x90 */ s32 unk_90; +} M420DllUnkMapStruct2; /* size = 0x94 */ + +typedef struct M420DllUnkMapStruct { + /* 0x00 */ M420DllUnkMapStruct2 *unk_00; + /* 0x04 */ M420DllUnkMapStruct2 *unk_04; + /* 0x08 */ M420DllUnkMapStruct2 *unk_08; + /* 0x0C */ M420DllUnkMapStruct2 *unk_0C; + /* 0x10 */ M420DllUnkMapStruct2 *unk_10; + /* 0x14 */ s32 unk_14; + /* 0x18 */ char pad_18[4]; + /* 0x1C */ float unk_1C; + /* 0x20 */ float unk_20; + /* 0x24 */ float unk_24; + /* 0x28 */ float unk_28; + /* 0x2C */ float unk_2C; + /* 0x30 */ s32 unk_30; + /* 0x34 */ s32 unk_34; + /* 0x38 */ s32 unk_38; + /* 0x3C */ s32 unk_3C; +} M420DllUnkMapStruct; /* size = 0x40 */ + +typedef struct M420DllUnkMapStruct3 { + /* 0x00 */ Vec unk_00; + /* 0x0C */ Vec unk_0C; + /* 0x18 */ GXColor unk_18; +} M420DllUnkMapStruct3; /* size = 0x1C */ + +s32 fn_1_5A7C(s32 arg0); +void fn_1_6820(void); +void fn_1_6884(void); +void fn_1_6950(void); +void fn_1_6D0C(void); +void fn_1_6D5C(void); +void fn_1_6DF0(M420DllUnkMapStruct2 *arg0); +void fn_1_7230(M420DllUnkMapStruct2 *arg0, Vec *arg1, s32 arg2, s32 arg3); +void fn_1_7704(void); +void fn_1_7E24(void); +void fn_1_8240(void); +void fn_1_8414(void); + +M420DllUnkMapStruct3 lbl_1_data_138 = { + { 1000.0f, 2000.0f, 0.0f }, + { -0.5f, -0.5f, -0.5f }, + { 0xFF, 0xFF, 0xFF, 0xFF }, +}; +void (*lbl_1_data_154[4])() = { fn_1_7704, fn_1_7E24, fn_1_8240, fn_1_8414 }; + +static const s32 lbl_1_rodata_360[0x1B] = { + DATA_MAKE_NUM(DATADIR_M420, 0x00), + DATA_MAKE_NUM(DATADIR_M420, 0x14), + DATA_MAKE_NUM(DATADIR_M420, 0x07), + DATA_MAKE_NUM(DATADIR_M420, 0x08), + DATA_MAKE_NUM(DATADIR_M420, 0x01), + DATA_MAKE_NUM(DATADIR_M420, 0x02), + DATA_MAKE_NUM(DATADIR_M420, 0x03), + DATA_MAKE_NUM(DATADIR_M420, 0x04), + DATA_MAKE_NUM(DATADIR_M420, 0x05), + DATA_MAKE_NUM(DATADIR_M420, 0x06), + DATA_MAKE_NUM(DATADIR_M420, 0x15), + DATA_MAKE_NUM(DATADIR_M420, 0x16), + DATA_MAKE_NUM(DATADIR_M420, 0x17), + DATA_MAKE_NUM(DATADIR_M420, 0x09), + DATA_MAKE_NUM(DATADIR_M420, 0x09), + DATA_MAKE_NUM(DATADIR_M420, 0x0A), + DATA_MAKE_NUM(DATADIR_M420, 0x0B), + DATA_MAKE_NUM(DATADIR_M420, 0x0E), + DATA_MAKE_NUM(DATADIR_M420, 0x0F), + DATA_MAKE_NUM(DATADIR_M420, 0x0C), + DATA_MAKE_NUM(DATADIR_M420, 0x0D), + DATA_MAKE_NUM(DATADIR_M420, 0x12), + DATA_MAKE_NUM(DATADIR_M420, 0x11), + DATA_MAKE_NUM(DATADIR_M420, 0x10), + DATA_MAKE_NUM(DATADIR_M420, 0x10), + DATA_MAKE_NUM(DATADIR_M420, 0x13), + DATA_MAKE_NUM(DATADIR_M420, 0x13), +}; + +Process *lbl_1_bss_A40; +Process *lbl_1_bss_A3C; +Process *lbl_1_bss_A2C[4]; +s32 lbl_1_bss_A28; +s16 lbl_1_bss_9F0[0x1C]; +s16 lbl_1_bss_9EC; +M420DllUnkMapStruct2 lbl_1_bss_140[15]; +struct M420DllUnkMapStruct lbl_1_bss_C0[2]; +s32 lbl_1_bss_BC; +s32 lbl_1_bss_B8; +s32 lbl_1_bss_B4; +s32 lbl_1_bss_B0; + +s32 fn_1_4964(void) +{ + M420DllUnkMapStruct2 *var_r31; + M420DllUnkMapStruct *var_r30; + s32 var_r29; + + lbl_1_bss_A40 = HuPrcChildCreate(fn_1_6820, 0x3E9, 0x4000, 0, lbl_1_bss_4); + lbl_1_bss_A3C = HuPrcChildCreate(fn_1_6884, 0x3EA, 0x4000, 0, lbl_1_bss_4); + for (var_r29 = 0; var_r29 < 4; var_r29++) { + lbl_1_bss_A2C[var_r29] = NULL; + } + lbl_1_bss_A28 = 0; + fn_1_6D5C(); + fn_1_6950(); + + var_r31 = lbl_1_bss_140; + var_r31->unk_02 = lbl_1_bss_9F0[1]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 1000.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[1]; + var_r31->unk_02 = lbl_1_bss_9F0[0xA]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[2]; + var_r31->unk_02 = lbl_1_bss_9F0[0xC]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[3]; + var_r31->unk_02 = lbl_1_bss_9F0[0xB]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[4]; + var_r31->unk_02 = lbl_1_bss_9F0[0xD]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = -220.0f; + var_r31->unk_04.y = -60.0f; + var_r31->unk_04.z = 170.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[9]; + var_r31->unk_02 = lbl_1_bss_9F0[0x17]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = -170.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 170.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[11]; + var_r31->unk_02 = lbl_1_bss_9F0[0x19]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = -160.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 220.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[6]; + var_r31->unk_02 = lbl_1_bss_9F0[0x11]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = -65.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[5]; + var_r31->unk_02 = lbl_1_bss_9F0[0xE]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 220.0f; + var_r31->unk_04.y = -60.0f; + var_r31->unk_04.z = 170.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[10]; + var_r31->unk_02 = lbl_1_bss_9F0[0x18]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 190.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 170.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[12]; + var_r31->unk_02 = lbl_1_bss_9F0[0x1A]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 185.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 220.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[7]; + var_r31->unk_02 = lbl_1_bss_9F0[0x12]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = -65.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[8]; + var_r31->unk_02 = lbl_1_bss_9F0[0x13]; + var_r31->unk_00_field3 = 1; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 300.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[13]; + var_r31->unk_02 = lbl_1_bss_9F0[3]; + var_r31->unk_00_field3 = 0; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + var_r31 = &lbl_1_bss_140[14]; + var_r31->unk_02 = lbl_1_bss_9F0[2]; + var_r31->unk_00_field3 = 0; + var_r31->unk_00_field0 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 0.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_r31->unk_4C.x = 1.0f; + var_r31->unk_4C.y = 1.0f; + var_r31->unk_4C.z = 1.0f; + fn_1_6DF0(var_r31); + + for (var_r29 = 0; var_r29 < 2; var_r29++) { + var_r30 = &lbl_1_bss_C0[var_r29]; + var_r30->unk_14 = var_r29; + var_r30->unk_1C = 20.0f; + var_r30->unk_20 = 0.0f; + var_r30->unk_2C = 0.0f; + var_r30->unk_24 = 0.2f; + var_r30->unk_28 = 0.1f; + var_r30->unk_38 = 0; + var_r30->unk_3C = 0; + var_r30->unk_30 = 1; + var_r30->unk_00 = &lbl_1_bss_140[var_r29 + 13]; + var_r30->unk_04 = &lbl_1_bss_140[var_r29 + 4]; + var_r30->unk_08 = &lbl_1_bss_140[var_r29 + 6]; + var_r30->unk_0C = &lbl_1_bss_140[var_r29 + 9]; + var_r30->unk_10 = &lbl_1_bss_140[var_r29 + 11]; + } + lbl_1_bss_B8 = 0; + lbl_1_bss_B4 = 0; + lbl_1_bss_B0 = 0; + fn_1_6728(); + + { + Vec sp14 = { 0.0f, 0.0f, 0.0f }; + Vec sp8 = { 0.0f, 0.0f, -1.0f }; + HuAudFXListnerSetEX(&sp14, &sp8, 3000.0, 1000.0, 100.0, 300.0, 300.0); + HuAudFXPlay(0x5F0); + } + return 1; +} + +void fn_1_596C(void) +{ + Process *var_r30; + s32 var_r31; + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + var_r30 = lbl_1_bss_A2C[var_r31]; + if (var_r30) { + HuPrcKill(var_r30); + } + } + fn_1_6D0C(); + HuPrcKill(lbl_1_bss_A3C); + HuPrcKill(lbl_1_bss_A40); +} + +s32 fn_1_59F4(s32 arg0) +{ + if (fn_1_5A7C(arg0) != 0) { + return 0; + } + lbl_1_bss_A2C[arg0] = HuPrcChildCreate(lbl_1_data_154[arg0], 0x3ED, 0x5000, 0, lbl_1_bss_4); + return 1; +} + +s32 fn_1_5A7C(s32 arg0) +{ + return lbl_1_bss_A2C[arg0] != NULL; +} + +s32 fn_1_5AA8(s32 arg0, float arg1) +{ + M420DllUnkMapStruct *var_r31; + s32 var_r29; + s32 var_r30; + + var_r31 = &lbl_1_bss_C0[arg0]; + if ((var_r31->unk_1C += arg1) >= 200.0f) { + var_r31->unk_1C = 200.0f; + } + var_r31->unk_38 = 1; + var_r31->unk_30 = (s32)(200.0f - var_r31->unk_1C) / 10.0f; + switch (arg0) { + case 0: + var_r29 = 3; + var_r30 = 0x15; + break; + case 1: + var_r29 = 2; + var_r30 = 0x16; + break; + } + if (var_r31->unk_1C >= 200.0f) { + if (lbl_1_bss_B0 == 0) { + var_r31->unk_3C = 1; + Hu3DMotionTimeSet(lbl_1_bss_9F0[var_r30], 0.0f); + Hu3DModelAttrReset(lbl_1_bss_9F0[var_r30], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[var_r30], 0x40000001); + Hu3DModelAttrSet(lbl_1_bss_9F0[var_r29], 1); + } + return 1; + } + return 0; +} + +void fn_1_5C8C(M420DllUnkMapStruct *arg0) +{ + Vec sp8; + + if (arg0->unk_38 != 0) { + if (arg0->unk_30 > 0) { + arg0->unk_30--; + } + if (arg0->unk_30 <= 0) { + sp8 = arg0->unk_04->unk_04; + sp8.y = -60.0f + arg0->unk_1C; + fn_1_7230(arg0->unk_04, &sp8, 0x1E, 0); + + sp8 = arg0->unk_08->unk_04; + sp8.y = -65.0f + arg0->unk_1C; + fn_1_7230(arg0->unk_08, &sp8, 0x1E, 0); + + sp8 = arg0->unk_0C->unk_04; + sp8.y = 40.0f + arg0->unk_1C; + fn_1_7230(arg0->unk_0C, &sp8, 0x1E, 1); + + Hu3DMotionTimeSet(arg0->unk_0C->unk_02, 0.0f); + Hu3DModelAttrReset(arg0->unk_0C->unk_02, 1); + + sp8 = arg0->unk_10->unk_04; + sp8.y = -50.0f + arg0->unk_1C; + fn_1_7230(arg0->unk_10, &sp8, 0x1E, 1); + + Hu3DMotionTimeSet(arg0->unk_10->unk_02, 0.0f); + Hu3DModelAttrReset(arg0->unk_10->unk_02, 1); + Hu3DMotionStartEndSet(arg0->unk_00->unk_02, 0.0f, 30.0f); + Hu3DMotionTimeSet(arg0->unk_00->unk_02, 0.0f); + Hu3DModelAttrReset(arg0->unk_00->unk_02, 0x40000002); + Hu3DModelAttrReset(arg0->unk_00->unk_02, 0x40000001); + arg0->unk_34 = 3; + arg0->unk_38 = 0; + arg0->unk_24 = 0.8f; + arg0->unk_28 = 0.3f; + arg0->unk_2C = 0.0f; + if (arg0->unk_14 == 0) { + HuAudFXPlay(0x5F7); + } + else { + HuAudFXPlay(0x5F8); + } + } + } + if ((Hu3DMotionEndCheck(arg0->unk_00->unk_02) != 0) && (arg0->unk_34 > 0)) { + if (--arg0->unk_34 > 0) { + Hu3DMotionTimeSet(arg0->unk_00->unk_02, 0.0f); + } + else { + Hu3DMotionStartEndSet(arg0->unk_00->unk_02, 0.0f, 1.0f); + Hu3DMotionTimeSet(arg0->unk_00->unk_02, 0.0f); + Hu3DModelAttrSet(arg0->unk_00->unk_02, 0x40000002); + } + } + if (arg0->unk_24 > 0.2f) { + if ((arg0->unk_24 -= 0.005f) <= 0.2f) { + arg0->unk_24 = 0.2f; + } + } + arg0->unk_04->unk_28.y += arg0->unk_24; + if (arg0->unk_28 > 0.05f) { + if ((arg0->unk_28 -= 0.003f) <= 0.05f) { + arg0->unk_28 = 0.05f; + } + } + arg0->unk_04->unk_4C.y = 1.0 + (arg0->unk_28 * sind((90.0f * arg0->unk_2C))); + arg0->unk_2C += 0.02f; +} + +s32 fn_1_60F0(void) +{ + float var_f31; + float var_f30; + s32 var_r31; + + if (lbl_1_bss_BC >= 6) { + return 1; + } + var_f31 = 5.0f * (6 - lbl_1_bss_BC); + var_f30 = var_f31 - 5.0f; + Hu3DMotionStartEndSet(lbl_1_bss_9F0[0xF], var_f30, var_f31); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0xF], var_f31); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000001); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xF], 0x40000004); + lbl_1_bss_B8 = 5; + lbl_1_bss_BC += 1; + if (lbl_1_bss_BC == 6) { + var_r31 = 1; + } + else { + var_r31 = 0; + } + return var_r31; +} + +void fn_1_6268(void) +{ + float var_f31 = 0.0f; + float var_f30 = 30.0f; + + Hu3DMotionStartEndSet(lbl_1_bss_9F0[0xF], var_f31, var_f30); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0xF], var_f31); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000001); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000004); + Hu3DMotionStartEndSet(lbl_1_bss_9F0[0x10], var_f31, var_f30); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0x10], var_f31); + lbl_1_bss_BC = 0; +} + +void fn_1_636C(void) +{ + float var_f31 = 0.0f; + float var_f30 = 30.0f; + + Hu3DMotionStartEndSet(lbl_1_bss_9F0[0x14], var_f31, var_f30); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0x14], var_f31); +} + +void fn_1_63EC(void) +{ + float var_f31 = 5.0f * (6 - lbl_1_bss_BC); + float var_f30 = 30.0f; + + Hu3DMotionStartEndSet(lbl_1_bss_9F0[0xF], var_f31, var_f30); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0xF], var_f31); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000001); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xF], 0x40000004); + lbl_1_bss_BC = 0; + lbl_1_bss_B8 = 0; +} + +s32 fn_1_650C(void) +{ + s32 var_r31 = 0; + + if ((lbl_1_bss_BC == 6) && (lbl_1_bss_B8 == 0)) { + var_r31 = 1; + } + return var_r31; +} + +void fn_1_6554(void) +{ + Vec sp8; + M420DllUnkMapStruct2 *var_r31; + + var_r31 = &lbl_1_bss_140[8]; + var_r31->unk_04.x = 480.0f; + var_r31->unk_04.y = 800.0f; + var_r31->unk_04.z = -314.0f; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + fn_1_6DF0(var_r31); + sp8.x = 480.0f; + sp8.y = 370.0f; + sp8.z = -314.0f; + Hu3DModelAttrReset(var_r31->unk_02, 1); + fn_1_7230(var_r31, &sp8, 0x14, 0); + Hu3DMotionTimeSet(fn_1_6660(), 0.0f); + Hu3DModelAttrSet(fn_1_6660(), 0x40000002); +} + +s16 fn_1_6660(void) +{ + return lbl_1_bss_140[8].unk_02; +} + +s32 fn_1_6670(void) +{ + M420DllUnkMapStruct2 *var_r31 = &lbl_1_bss_140[8]; + return var_r31->unk_00_field0; +} + +void fn_1_669C(s32 arg0) +{ + M420DllUnkMapStruct2 *var_r31 = &lbl_1_bss_140[8]; + if (arg0 == 0) { + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 0.0f; + var_r31->unk_04.z = 0.0f; + fn_1_6DF0(var_r31); + } + var_r31->unk_00_field3 = arg0; +} + +void fn_1_6728(void) +{ + M420DllUnkMapStruct2 *var_r31 = &lbl_1_bss_140[8]; + var_r31->unk_04.x = 0.0f; + var_r31->unk_04.y = 1000.0f; + var_r31->unk_04.z = 0.0f; + fn_1_6DF0(var_r31); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x13], 1); +} + +s32 fn_1_67A4(s32 arg0) +{ + M420DllUnkMapStruct *var_r31 = &lbl_1_bss_C0[arg0]; + return var_r31->unk_1C >= 200.0f; +} + +s32 fn_1_67E8(s32 arg0) +{ + M420DllUnkMapStruct *var_r31 = &lbl_1_bss_C0[arg0]; + return var_r31->unk_3C; +} + +s32 fn_1_6810(void) +{ + return lbl_1_bss_B4; +} + +void fn_1_6820(void) +{ + while (TRUE) { + if (lbl_1_bss_B8 > 0) { + if (--lbl_1_bss_B8 <= 0) { + Hu3DModelAttrSet(lbl_1_bss_9F0[0xF], 0x40000002); + } + } + HuPrcVSleep(); + } +} + +void fn_1_6884(void) +{ + s32 var_r31; + M420DllUnkMapStruct *var_r30; + M420DllUnkMapStruct *var_r29; + + while (TRUE) { + for (var_r31 = 0; var_r31 < 0xF; var_r31++) { + fn_1_6DF0(&lbl_1_bss_140[var_r31]); + } + for (var_r31 = 0; var_r31 < 2; var_r31++) { + fn_1_5C8C(&lbl_1_bss_C0[var_r31]); + } + var_r30 = lbl_1_bss_C0; + if ((var_r30->unk_1C >= 200.0f) || (var_r29 = &lbl_1_bss_C0[1], var_r29->unk_1C >= 200.0f)) { + lbl_1_bss_B0 = 1; + } + HuPrcVSleep(); + } +} + +void fn_1_6950(void) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0x1B; var_r31++) { + lbl_1_bss_9F0[var_r31] = Hu3DModelCreateFile(lbl_1_rodata_360[var_r31]); + } + Hu3DModelAttrSet(lbl_1_bss_9F0[1], 0x40000001); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xA], 0x40000001); + Hu3DModelAttrSet(lbl_1_bss_9F0[3], 0x40000002); + Hu3DModelAttrSet(lbl_1_bss_9F0[2], 0x40000002); + Hu3DModelPosSet(lbl_1_bss_9F0[0xF], -219.0f, 300.0f, -92.0f); + Hu3DModelRotSet(lbl_1_bss_9F0[0xF], 0.0f, 0.0f, 0.0f); + Hu3DModelPosSet(lbl_1_bss_9F0[0x10], 0.0f, 0.0f, 0.0f); + Hu3DModelShadowMapSet(lbl_1_bss_9F0[0]); + Hu3DModelShadowMapSet(lbl_1_bss_9F0[0xD]); + Hu3DModelShadowMapSet(lbl_1_bss_9F0[0xE]); + Hu3DModelShadowSet(lbl_1_bss_9F0[0xF]); + Hu3DModelShadowSet(lbl_1_bss_9F0[1]); + Hu3DModelShadowSet(lbl_1_bss_9F0[0xA]); + Hu3DModelShadowSet(lbl_1_bss_9F0[0xB]); + Hu3DModelShadowSet(lbl_1_bss_9F0[0x10]); + Hu3DModelShadowSet(lbl_1_bss_9F0[0x14]); + Hu3DModelShadowSet(lbl_1_bss_9F0[0x13]); + Hu3DModelAttrSet(lbl_1_bss_9F0[4], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[5], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[6], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[7], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[8], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[9], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xB], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xC], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x15], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x16], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x17], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x18], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x19], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0x1A], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xF], 0x40000002); + Hu3DMotionStartEndSet(lbl_1_bss_9F0[0xF], 30.0f, 30.0f); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0xF], 30.0f); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xF], 0x40000002); + Hu3DModelHookSet(lbl_1_bss_9F0[1], "itemhook_sao", lbl_1_bss_9F0[0xA]); +} + +void fn_1_6D0C(void) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0x1B; var_r31++) { + Hu3DModelKill(lbl_1_bss_9F0[var_r31]); + } +} + +void fn_1_6D5C(void) +{ + LightData *var_r31; + + Hu3DLighInit(); + lbl_1_bss_9EC = Hu3DGLightCreateV(&lbl_1_data_138.unk_00, &lbl_1_data_138.unk_0C, &lbl_1_data_138.unk_18); + Hu3DGLightInfinitytSet(lbl_1_bss_9EC); + var_r31 = &Hu3DGlobalLight[lbl_1_bss_9EC]; + var_r31->unk_00 |= 0x8000; +} + +void fn_1_6DF0(M420DllUnkMapStruct2 *arg0) +{ + float var_f31; + + if (arg0->unk_00_field3) { + if (arg0->unk_00_field0) { + switch (arg0->unk_78) { + case 0: + var_f31 = arg0->unk_70; + break; + case 1: + var_f31 = sind((90.0f * arg0->unk_70)); + var_f31 *= var_f31; + break; + case 2: + var_f31 = sind((90.0f * arg0->unk_70)); + var_f31 *= var_f31 * var_f31; + break; + } + arg0->unk_04.x = arg0->unk_10.x + (var_f31 * (arg0->unk_1C.x - arg0->unk_10.x)); + arg0->unk_04.y = arg0->unk_10.y + (var_f31 * (arg0->unk_1C.y - arg0->unk_10.y)); + arg0->unk_04.z = arg0->unk_10.z + (var_f31 * (arg0->unk_1C.z - arg0->unk_10.z)); + if ((arg0->unk_70 += arg0->unk_74) >= 1.0f) { + arg0->unk_04 = arg0->unk_1C; + arg0->unk_00_field0 = 0; + } + } + Hu3DModelPosSet(arg0->unk_02, arg0->unk_04.x, arg0->unk_04.y, arg0->unk_04.z); + if (arg0->unk_00_field1) { + switch (arg0->unk_84) { + case 0: + var_f31 = arg0->unk_7C; + break; + case 1: + var_f31 = sind((90.0f * arg0->unk_7C)); + var_f31 *= var_f31; + break; + } + arg0->unk_28.x = arg0->unk_34.x + (var_f31 * (arg0->unk_40.x - arg0->unk_34.x)); + arg0->unk_28.y = arg0->unk_34.y + (var_f31 * (arg0->unk_40.y - arg0->unk_34.y)); + arg0->unk_28.z = arg0->unk_34.z + (var_f31 * (arg0->unk_40.z - arg0->unk_34.z)); + if ((arg0->unk_7C += arg0->unk_80) >= 1.0f) { + arg0->unk_28 = arg0->unk_40; + arg0->unk_00_field1 = 0; + } + } + Hu3DModelRotSet(arg0->unk_02, arg0->unk_28.x, arg0->unk_28.y, arg0->unk_28.z); + if (arg0->unk_00_field2) { + switch (arg0->unk_90) { + case 0: + var_f31 = arg0->unk_88; + break; + case 1: + var_f31 = sind((90.0f * arg0->unk_88)); + var_f31 *= var_f31; + break; + } + arg0->unk_4C.x = arg0->unk_58.x + (var_f31 * (arg0->unk_64.x - arg0->unk_58.x)); + arg0->unk_4C.y = arg0->unk_58.y + (var_f31 * (arg0->unk_64.y - arg0->unk_58.y)); + arg0->unk_4C.z = arg0->unk_58.z + (var_f31 * (arg0->unk_64.z - arg0->unk_58.z)); + if ((arg0->unk_88 += arg0->unk_8C) >= 1.0f) { + arg0->unk_4C = arg0->unk_64; + arg0->unk_00_field2 = 0; + } + } + Hu3DModelScaleSet(arg0->unk_02, arg0->unk_4C.x, arg0->unk_4C.y, arg0->unk_4C.z); + } +} + +void fn_1_7230(M420DllUnkMapStruct2 *arg0, Vec *arg1, s32 arg2, s32 arg3) +{ + arg0->unk_1C = *arg1; + arg0->unk_10 = arg0->unk_04; + arg0->unk_70 = 0.0f; + arg0->unk_74 = 1.0f / arg2; + arg0->unk_78 = arg3; + arg0->unk_00_field0 = 1; +} + +void fn_1_72C8(M420DllUnkMapStruct2 *arg0, Vec *arg1, s32 arg2, s32 arg3) +{ + arg0->unk_40 = *arg1; + arg0->unk_34 = arg0->unk_28; + arg0->unk_7C = 0.0f; + arg0->unk_80 = 1.0f / arg2; + arg0->unk_84 = arg3; + arg0->unk_00_field1 = 1; +} + +void fn_1_7360(M420DllUnkMapStruct2 *arg0, Vec *arg1, s32 arg2, s32 arg3) +{ + arg0->unk_64 = *arg1; + arg0->unk_58 = arg0->unk_4C; + arg0->unk_88 = 0.0f; + arg0->unk_8C = 1.0f / arg2; + arg0->unk_90 = arg3; + arg0->unk_00_field2 = 1; +} + +float fn_1_73F8(float arg8) +{ + float var_f31; + float var_f30; + + if (arg8 < 0.0f) { + arg8 = -arg8; + } + if (arg8 < 1.0f) { + var_f31 = (4.0f + ((arg8 * (3.0f * arg8 * arg8)) - (6.0f * arg8 * arg8))) / 6.0f; + } + else if (arg8 < 2.0f) { + var_f30 = arg8 - 2.0f; + var_f31 = (var_f30 * (-var_f30 * var_f30)) / 6.0f; + } + else { + var_f31 = 0.0f; + } + return var_f31; +} + +void fn_1_74F8(float *arg0, float *arg1, float *arg2, float *arg3, float arg8) +{ + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + float var_f26; + float var_f25; + + s32 var_r31; + s32 var_r30; + s32 var_r29; + + var_r29 = 0xB; + var_f30 = 0.0f; + var_f29 = 0.0f; + for (var_r31 = -2; var_r31 <= var_r29 + 2; var_r31++) { + var_r30 = var_r31; + if (var_r31 < 0) { + var_r30 = 0; + } + if (var_r31 > var_r29) { + var_r30 = var_r29; + } + var_f31 = arg8 - var_r31; + if (var_f31 < 0.0f) { + var_f31 = -var_f31; + } + if (var_f31 < 1.0f) { + var_f27 = (4.0f + ((var_f31 * (3.0f * var_f31 * var_f31)) - (6.0f * var_f31 * var_f31))) / 6.0f; + } + else if (var_f31 < 2.0f) { + var_f28 = var_f31 - 2.0f; + var_f27 = (var_f28 * (-var_f28 * var_f28)) / 6.0f; + } + else { + var_f27 = 0.0f; + } + var_f25 = var_f27; + var_f26 = var_f25; + var_f30 += var_f26 * arg0[var_r30]; + var_f29 += var_f26 * arg1[var_r30]; + } + *arg2 = var_f30; + *arg3 = var_f29; +} + +void fn_1_7704(void) +{ + Vec sp20; + Vec sp14; + Vec sp8; + + M420DllUnkMapStruct2 *var_r31; + s32 var_r29; + s32 var_r28; + + var_r28 = 0; + var_r31 = &lbl_1_bss_140[0]; + sp20.x = 0.0f; + sp20.y = 1000.0f; + sp20.z = 0.0f; + + sp14.x = 0.0f; + sp14.y = 0.0f; + sp14.z = 0.0f; + + sp8.x = 1.0f; + sp8.y = 1.0f; + sp8.z = 1.0f; + + fn_1_7230(var_r31, &sp20, 1, 0); + fn_1_72C8(var_r31, &sp14, 1, 0); + var_r28 = HuAudFXEmiterPlay(0x5EF, &sp20); + sp20.y = 750.0f; + fn_1_7230(var_r31, &sp20, 80, 1); + HuPrcSleep(0x50); + { + float var_f30; + float sp5C[12] = { + 0.0f, + 50.0f, + 300.0f, + 350.0f, + 300.0f, + 0.0f, + -300.0f, + -350.0f, + -350.0f, + -300.0f, + -100.0f, + 0.0f, + }; + float sp2C[12] = { + 750.0f, + 700.0f, + 600.0f, + 500.0f, + 400.0f, + 300.0f, + 350.0f, + 400.0f, + 450.0f, + 500.0f, + 600.0f, + 900.0f, + }; + float var_f24 = 0.050000004f; + for (var_f30 = -1.0f; var_f30 < 12.0f; var_f30 += var_f24) { + fn_1_74F8(sp5C, sp2C, &sp20.x, &sp20.y, var_f30); + fn_1_7230(var_r31, &sp20, 1, 0); + HuAudFXEmiterUpDate(var_r28, &sp20); + HuPrcVSleep(); + } + } + for (var_r29 = 0; var_r29 < 0x1E; var_r29++) { + Hu3DModelTPLvlSet(lbl_1_bss_9F0[1], 1.0f - (0.033333335f * var_r29)); + Hu3DModelTPLvlSet(lbl_1_bss_9F0[0xA], 1.0f - (0.033333335f * var_r29)); + HuAudFXEmiterUpDate(var_r28, &sp20); + HuPrcSleep(1); + } + HuAudFXStop(var_r28); + sp20.x = 1000.0f; + sp20.y = 0.0f; + sp20.z = 0.0f; + fn_1_7230(var_r31, &sp20, 1, 0); + HuPrcSleep(1); + Hu3DModelTPLvlSet(lbl_1_bss_9F0[1], 1.0f); + Hu3DModelTPLvlSet(lbl_1_bss_9F0[0xA], 1.0f); + *lbl_1_bss_A2C = NULL; + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_7E24(void) +{ + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + float var_f26; + + M420DllUnkMapStruct2 *var_r31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + M420DllUnkMapStruct *var_r27; + s32 var_r26; + s32 var_r25; + + var_r31 = &lbl_1_bss_140[0]; + { + Vec sp8 = { 0.0f, 0.0f, 0.0f }; + var_f29 = 800.0f; + var_f28 = 10.0f; + var_r29 = 0; + var_r28 = 0; + var_r30 = 0; + var_r31->unk_28.x = 0.0f; + var_r31->unk_28.y = 0.0f; + var_r31->unk_28.z = 0.0f; + var_f31 = 0.0f; + var_f26 = 0.005f; + var_r27 = &lbl_1_bss_C0[1]; + var_r26 = var_r27->unk_3C; + var_r25 = var_r26; + if (var_r25 != 0) { + var_f27 = 220.0f; + } + else { + var_f27 = -220.0f; + } + + for (var_f30 = var_f27; var_f31 < 1.0f; var_f31 += var_f26) { + sp8.x = (var_f29 * cosd((-180.0f * var_f31))) - (var_f28 * sind((-180.0f * var_f31))); + sp8.y = 1200.0 + ((var_f28 * cosd((-180.0f * var_f31))) + (var_f29 * sind((-180.0f * var_f31)))); + sp8.z = 0.0f; + if (var_f31 <= 0.0f) { + var_r30 = HuAudFXEmiterPlay(0x5EF, &sp8); + } + if ((sp8.x < (200.0f + var_f30)) && (var_r28 == 0)) { + Hu3DModelHookReset(lbl_1_bss_9F0[1]); + Hu3DModelAttrSet(lbl_1_bss_9F0[0xA], 1); + Hu3DModelHookSet(lbl_1_bss_9F0[1], "itemhook_sao", lbl_1_bss_9F0[0xC]); + Hu3DModelAttrReset(lbl_1_bss_9F0[0xC], 1); + Hu3DMotionTimeSet(lbl_1_bss_9F0[0xC], 0.0f); + var_r28 = 1; + } + if ((sp8.x < var_f30) && (var_r29 == 0)) { + sp8.x = var_f30; + if (lbl_1_bss_A2C[3] == NULL) { + lbl_1_bss_A2C[3] = HuPrcChildCreate(lbl_1_data_154[3], 0x3ED, 0x5000, 0, lbl_1_bss_4); + } + var_r29 = 1; + } + fn_1_7230(var_r31, &sp8, 1, 0); + HuAudFXEmiterUpDate(var_r30, &sp8); + HuPrcVSleep(); + } + } + HuAudFXStop(var_r30); + lbl_1_bss_A2C[1] = NULL; + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_8240(void) +{ + Hu3DModelAttrReset(lbl_1_bss_9F0[4], 1); + Hu3DMotionTimeSet(lbl_1_bss_9F0[4], 0.0f); + Hu3DModelAttrReset(lbl_1_bss_9F0[6], 1); + Hu3DMotionTimeSet(lbl_1_bss_9F0[6], 0.0f); + Hu3DModelAttrReset(lbl_1_bss_9F0[8], 1); + Hu3DMotionTimeSet(lbl_1_bss_9F0[8], 0.0f); + HuPrcSleep(0x78); + Hu3DModelAttrSet(lbl_1_bss_9F0[4], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[6], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[8], 1); + Hu3DModelAttrReset(lbl_1_bss_9F0[5], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[5], 0x40000001); + Hu3DMotionTimeSet(lbl_1_bss_9F0[5], 0.0f); + Hu3DModelAttrReset(lbl_1_bss_9F0[7], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[7], 0x40000001); + Hu3DMotionTimeSet(lbl_1_bss_9F0[7], 0.0f); + Hu3DModelAttrReset(lbl_1_bss_9F0[9], 1); + Hu3DModelAttrSet(lbl_1_bss_9F0[9], 0x40000001); + Hu3DMotionTimeSet(lbl_1_bss_9F0[9], 0.0f); + lbl_1_bss_A2C[2] = NULL; + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_8414(void) +{ + Vec sp14; + Vec sp8; + + float var_f31; + float var_f30; + + M420DllUnkMapStruct2 *var_r31; + M420DllUnkMapStruct *var_r30; + M420DllUnkMapStruct2 *var_r29; + M420DllUnkMapStruct2 *var_r28; + M420DllUnkMapStruct2 *var_r27; + M420DllUnkMapStruct2 *var_r26; + s32 var_r25; + + var_r31 = &lbl_1_bss_140[2]; + var_r27 = &lbl_1_bss_140[3]; + var_r26 = &lbl_1_bss_140[0]; + Hu3DModelHookReset(lbl_1_bss_9F0[1]); + var_r31->unk_04 = var_r26->unk_04; + var_r31->unk_04.y -= 100.0f; + var_r31->unk_04.z += 148.0f; + fn_1_6DF0(var_r31); + + sp14 = var_r31->unk_04; + sp14.y = 80.0f; + sp14.z = 170.0f; + + sp8 = var_r31->unk_28; + sp8.x += 45.0f; + + fn_1_7230(var_r31, &sp14, 30, 0); + fn_1_72C8(var_r31, &sp8, 30, 0); + HuPrcSleep(0xA); + HuAudFXPlay(0x5F5); + var_r25 = fn_1_67A4(0) != 0 ? 0 : 1; + var_r30 = &lbl_1_bss_C0[var_r25]; + if (var_r25 == 0) { + var_f30 = -220.0f; + } + else { + var_f30 = 220.0f; + } + var_f31 = var_f30; + + sp14 = var_r30->unk_0C->unk_04; + sp14.y = 40.0f + var_r30->unk_1C; + sp14.x = var_f31; + + var_r29 = var_r30->unk_0C; + fn_1_7230(var_r29, &sp14, 30, 1); + + Hu3DMotionTimeSet(var_r30->unk_0C->unk_02, 0.0f); + Hu3DModelAttrReset(var_r30->unk_0C->unk_02, 1); + sp14 = var_r30->unk_10->unk_04; + sp14.y = -50.0f + var_r30->unk_1C; + sp14.x = var_f31; + var_r28 = var_r30->unk_10; + fn_1_7230(var_r28, &sp14, 30, 1); + Hu3DMotionTimeSet(var_r30->unk_10->unk_02, 0.0f); + Hu3DModelAttrReset(var_r30->unk_10->unk_02, 1); + HuPrcSleep(5); + lbl_1_bss_B4 = 1; + sp8.x = 0.0f; + fn_1_72C8(var_r31, &sp8, 15, 1); + HuPrcSleep(0xF); + var_r27->unk_04 = var_r31->unk_04; + Hu3DModelAttrSet(var_r31->unk_02, 1); + Hu3DModelAttrReset(var_r27->unk_02, 1); + Hu3DMotionTimeSet(var_r27->unk_02, 0.0f); + Hu3DModelAttrReset(var_r27->unk_02, 0x40000002); + Hu3DModelAttrSet(var_r27->unk_02, 0x40000001); + HuPrcSleep(0x78); + lbl_1_bss_A2C[3] = NULL; + HuPrcEnd(); + + while (TRUE) { + HuPrcVSleep(); + } +} diff --git a/src/REL/m420dll/player.c b/src/REL/m420dll/player.c new file mode 100644 index 00000000..2a749b74 --- /dev/null +++ b/src/REL/m420dll/player.c @@ -0,0 +1,992 @@ +#include "ext_math.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/esprite.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/wipe.h" + +#include "REL/m420dll.h" + +typedef void (*M420DllUnkFunc)(M420DllPlayerStruct *); + +typedef struct M420DllUnkStruct2 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ s32 unk_0C; + /* 0x10 */ s32 unk_10; + /* 0x14 */ s32 unk_14; + /* 0x18 */ s32 unk_18; + /* 0x1C */ s32 unk_1C; +} M420DllUnkStruct2; /* size = 0x20 */ + +void fn_1_1F14(void); +void fn_1_1F54(M420DllPlayerStruct *arg0); +void fn_1_1F94(M420DllPlayerStruct *arg0); +void fn_1_200C(M420DllPlayerStruct *arg0); +void fn_1_20EC(M420DllPlayerStruct *arg0); +void fn_1_211C(M420DllPlayerStruct *arg0); +void fn_1_2174(M420DllPlayerStruct *arg0); +void fn_1_2260(M420DllPlayerStruct *arg0); +void fn_1_22CC(M420DllPlayerStruct *arg0); +void fn_1_276C(M420DllPlayerStruct *arg0); +void fn_1_2CE0(M420DllPlayerStruct *arg0); +void fn_1_2D7C(M420DllPlayerStruct *arg0); +void fn_1_2EA8(M420DllPlayerStruct *arg0); +void fn_1_3098(M420DllPlayerStruct *arg0); +void fn_1_326C(M420DllPlayerStruct *arg0); +void fn_1_3450(M420DllPlayerStruct *arg0); +s32 fn_1_34AC(M420DllPlayerStruct *arg0); +void fn_1_355C(M420DllPlayerStruct *arg0); +void fn_1_36E4(M420DllPlayerStruct *arg0); +void fn_1_374C(M420DllPlayerStruct *arg0); +void fn_1_378C(M420DllPlayerStruct *arg0); +void fn_1_3854(void); +void fn_1_3970(M420DllPlayerStruct *arg0); +void fn_1_3F94(M420DllPlayerStruct *arg0); +void fn_1_4294(M420DllPlayerStruct *arg0); +void fn_1_4574(M420DllPlayerStruct *arg0); +void fn_1_476C(M420DllPlayerStruct *arg0); + +M420DllUnkStruct2 lbl_1_data_50[4] = { + { 0x19, 0x01, 0x2A, 0x08, 0x2D, 0x10, 0x01, 0x01 }, + { 0x19, 0x01, 0x22, 0x06, 0x22, 0x0C, 0x01, 0x01 }, + { 0x19, 0x01, 0x1B, 0x05, 0x14, 0x0A, 0x01, 0x01 }, + { 0x19, 0x01, 0x14, 0x04, 0x0A, 0x08, 0x01, 0x01 }, +}; + +// TODO MAKE_NUM +static const s32 lbl_1_rodata_F8[8][0xB] = { + { 0x5F0000, 0x5F0017, 0x5F0018, 0x5F0068, 0x5F0069, 0x5F006A, 0x5F0035, 0x5F006B, 0x5F006E, 0x5F0049, 0x33001B }, + { 0x1A0000, 0x1A0017, 0x1A0018, 0x1A0068, 0x1A0069, 0x1A006A, 0x1A0035, 0x1A006B, 0x1A006E, 0x1A0049, 0x33001C }, + { 0x6D0000, 0x6D0017, 0x6D0018, 0x6D0068, 0x6D0069, 0x6D006A, 0x6D0035, 0x6D006B, 0x6D006E, 0x6D0049, 0x33001D }, + { 0x8A0000, 0x8A0017, 0x8A0018, 0x8A0068, 0x8A0069, 0x8A006A, 0x8A0035, 0x8A006B, 0x8A006E, 0x8A0049, 0x33001E }, + { 0x850000, 0x850017, 0x850018, 0x850068, 0x850069, 0x85006A, 0x850035, 0x85006B, 0x85006E, 0x850049, 0x33001F }, + { 0x110000, 0x110017, 0x110018, 0x110068, 0x110069, 0x11006A, 0x110035, 0x11006B, 0x11006E, 0x110049, 0x330020 }, + { 0x0D0000, 0x0D0017, 0x0D0018, 0x0D0068, 0x0D0069, 0x0D006A, 0x0D0035, 0x0D006B, 0x0D006E, 0x0D0049, 0x330021 }, + { 0x810000, 0x810017, 0x810018, 0x810068, 0x810069, 0x81006A, 0x810035, 0x81006B, 0x81006E, 0x810049, 0x330022 }, +}; +static const Vec lbl_1_rodata_258[4][2] = { + { { -372.0f, 300.0f, -220.0f }, { 0.0f, 50.0f, 0.0f } }, + { { 435.0f, 300.0f, -260.0f }, { 0.0f, 140.0f, 0.0f } }, + { { 315.0f, 300.0f, -153.0f }, { 0.0f, 140.0f, 0.0f } }, + { { 195.0f, 300.0f, -46.0f }, { 0.0f, 140.0f, 0.0f } }, +}; + +M420DllPlayerStruct *fn_1_1B8C(s32 arg0, s32 arg1) +{ + M420DllPlayerStruct *var_r31; + s32 var_r30; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M420DllPlayerStruct), MEMORY_DEFAULT_NUM); + if (!var_r31) { + OSReport("M420PlayerCreate ERROR...\n"); + return NULL; + } + var_r31->unk_04 = arg0; + var_r31->unk_4C = arg1; + var_r31->unk_08 = GWPlayerCfg[arg0].diff; + var_r31->unk_00_field0 = GWPlayerCfg[arg0].iscom; + var_r31->unk_0A = GWPlayerCfg[arg0].character; + var_r31->unk_0C = GWPlayerCfg[arg0].pad_idx; + var_r31->unk_10 = lbl_1_rodata_258[arg1][0]; + var_r31->unk_1C = lbl_1_rodata_258[arg1][1]; + var_r31->unk_48 = 0; + var_r31->unk_50 = 0; + var_r31->unk_00_field2 = 0; + var_r31->unk_00_field1 = 0; + var_r31->unk_E8 = NULL; + for (var_r30 = 0; var_r30 < 0xA; var_r30++) { + var_r31->unk_84[var_r30] = 7; + } + fn_1_1F54(var_r31); + fn_1_1F94(var_r31); + + switch (arg1) { + case 0: + if (var_r31->unk_0A == 5) { + CharModelMotionSet(var_r31->unk_0A, var_r31->unk_AE[0xA]); + Hu3DMotionStartEndSet(var_r31->unk_AC, 0.0f, 1.0f); + Hu3DMotionTimeSet(var_r31->unk_AC, 0.0f); + } + else { + CharModelMotionSet(var_r31->unk_0A, var_r31->unk_AE[0]); + } + break; + case 1: + case 2: + case 3: + var_r31->unk_1C.y = 0.0f; + CharModelMotionSet(var_r31->unk_0A, var_r31->unk_AE[0]); + break; + default: + break; + } + + CharModelMotionDataClose(var_r31->unk_0A); + fn_1_200C(var_r31); + var_r31->unk_40 = HuPrcChildCreate(fn_1_1F14, 0x64, 0x5000, 0, lbl_1_bss_4); + var_r31->unk_40->user_data = var_r31; + return var_r31; +} + +void fn_1_1E14(M420DllPlayerStruct *arg0) +{ + fn_1_2174(arg0); + fn_1_211C(arg0); + fn_1_20EC(arg0); + HuPrcKill(arg0->unk_40); + HuMemDirectFree(arg0); +} + +void fn_1_1E64(M420DllPlayerStruct *arg0, s32 arg1, s32 arg2) +{ + switch (arg1) { + case 0: + omVibrate(arg0->unk_04, arg2, 6, 6); + break; + case 1: + omVibrate(arg0->unk_04, arg2, 4, 2); + break; + case 2: + omVibrate(arg0->unk_04, arg2, 0xC, 0); + break; + } +} + +M420DllUnkFunc lbl_1_data_EC[0xC] = { + fn_1_2260, + fn_1_22CC, + fn_1_2D7C, + fn_1_276C, + fn_1_2CE0, + fn_1_2EA8, + fn_1_2260, + fn_1_4574, + fn_1_476C, + fn_1_3F94, + fn_1_4294, + fn_1_3970, +}; + +void fn_1_1F14(void) +{ + M420DllPlayerStruct *var_r31 = HuPrcCurrentGet()->user_data; + while (TRUE) { + lbl_1_data_EC[var_r31->unk_48](var_r31); + } +} + +void fn_1_1F54(M420DllPlayerStruct *arg0) +{ + arg0->unk_AC = CharModelCreate(arg0->unk_0A, 2); + Hu3DModelShadowSet(arg0->unk_AC); +} + +void fn_1_1F94(M420DllPlayerStruct *arg0) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0xB; var_r31++) { + arg0->unk_AE[var_r31] = CharModelMotionCreate(arg0->unk_0A, lbl_1_rodata_F8[arg0->unk_0A][var_r31]); + } +} + +void fn_1_200C(M420DllPlayerStruct *arg0) +{ + s32 var_r30; + + for (var_r30 = 0; var_r30 <= 9; var_r30++) { + arg0->unk_C4[var_r30] = espEntry(0x330018, 0, 0); + espDispOff(arg0->unk_C4[var_r30]); + } + switch (arg0->unk_4C) { + case 0: + arg0->unk_D8 = espEntry(0x330019, 1, 0); + break; + case 1: + case 2: + case 3: + arg0->unk_D8 = espEntry(0x33001A, 1, 0); + break; + default: + break; + } + espDispOff(arg0->unk_D8); + espTPLvlSet(arg0->unk_D8, 0.8f); +} + +void fn_1_20EC(M420DllPlayerStruct *arg0) +{ + CharModelKill(arg0->unk_0A); +} + +void fn_1_211C(M420DllPlayerStruct *arg0) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0xB; var_r31++) { + CharModelMotionKill(arg0->unk_0A, arg0->unk_AE[var_r31]); + } +} + +void fn_1_2174(M420DllPlayerStruct *arg0) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0xB; var_r31++) { + espKill(arg0->unk_C4[var_r31]); + } +} + +void fn_1_21C8(M420DllPlayerStruct *arg0, Vec *arg1, s32 arg2, s32 arg3) +{ + arg0->unk_34 = *arg1; + arg0->unk_28 = arg0->unk_1C; + arg0->unk_DC = 0.0f; + arg0->unk_E0 = 1.0f / arg2; + arg0->unk_E4 = arg3; + arg0->unk_00_field2 = 1; +} + +void inline fn_1_2260_alt(M420DllPlayerStruct *arg0, s32 arg1) +{ + s32 var_r30; + s32 var_r29; + + for (var_r30 = 0; var_r30 < arg1; var_r30++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + break; + } + } +} + +void fn_1_2260(M420DllPlayerStruct *arg0) +{ + s32 var_r30; + s32 var_r29; + + while (TRUE) { + for (var_r30 = 0; var_r30 < 1; var_r30++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + return; + } + } + } +} + +void fn_1_22CC(M420DllPlayerStruct *arg0) +{ + float var_f31; + float var_f30; + M420DllUnkStruct2 *var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r26; + s32 var_r23; + s32 var_r21; + s32 var_r18; + + var_r30 = &lbl_1_data_50[arg0->unk_08]; + fn_1_3098(arg0); + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[8], 0.0f, 10.0f, 0x40000001); + arg0->unk_50 = 0; + arg0->unk_58 = var_r30->unk_00 + (fn_1_8944() % var_r30->unk_04); + + while (arg0->unk_50 < 6) { + fn_1_326C(arg0); + while (var_r29 == 0) { + if (arg0->unk_00_field0 == 0) { + var_r29 = fn_1_34AC(arg0); + } + else if (arg0->unk_58 > 0) { + arg0->unk_58--; + var_r29 = 0; + } + else if ((fn_1_8944() % 30) != 0) { + var_r29 = 1; + arg0->unk_58 = (var_r30->unk_08 - (var_r30->unk_0C / 2)) + (fn_1_8944() % var_r30->unk_0C); + } + else { + var_r29 = 2; + arg0->unk_58 = (var_r30->unk_08 - (var_r30->unk_0C / 2)) + (fn_1_8944() % var_r30->unk_0C); + } + switch (var_r29) { + case 0: + fn_1_2260(arg0); + break; + case 1: + var_f31 = 5.0f * arg0->unk_50; + var_f30 = 5.0f + var_f31; + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[5]); + Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30); + Hu3DMotionTimeSet(arg0->unk_AC, var_f31); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000001); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000004); + arg0->unk_5C[arg0->unk_50++] = 1; + HuAudFXPlay(0x5F4); + fn_1_60F0(); + fn_1_2260_alt(arg0, 5); + break; + case 2: + if (arg0->unk_50 <= 0) { + fn_1_2260(arg0); + } + else { + Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000001); + Hu3DModelAttrSet(arg0->unk_AC, 0x40000004); + fn_1_63EC(); + fn_1_2260_alt(arg0, 1); + if (Hu3DMotionEndCheck(arg0->unk_AC) != 0) { + for (var_r28 = 0; var_r28 < 0xA; var_r28++) { + arg0->unk_5C[var_r28] = 0; + } + arg0->unk_50 = 0; + var_f31 = 0.0f; + var_f30 = 0.0f; + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[5]); + Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30); + Hu3DMotionTimeSet(arg0->unk_AC, var_f31); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000001); + } + } + break; + default: + break; + } + } + } + fn_1_326C(arg0); + fn_1_2260_alt(arg0, 5); + fn_1_3450(arg0); + arg0->unk_48 = 2; +} + +void fn_1_276C(M420DllPlayerStruct *arg0) +{ + s32 sp8[4]; + + float var_f31; + float var_f30; + + s32 var_r30; + M420DllUnkStruct2 *var_r29; + s32 var_r28; + s32 var_r27; + s32 var_r26; + s32 var_r25; + s32 var_r24; + s32 var_r23; + s32 var_r22; + s32 var_r21; + s32 var_r20; + s32 var_r19; + s32 var_r18; + s32 var_r17; + + var_r29 = &lbl_1_data_50[arg0->unk_08]; + if (arg0->unk_4C == 1) { + HuAudFXPlay(0x5F1); + fn_1_669C(1); + fn_1_6554(); + for (var_r28 = 0; var_r28 < 0xF; var_r28++) { + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[7], 0.0f, 6.0f, 0); + for (var_r27 = 0; var_r27 < 6; var_r27++) { + fn_1_669C(1); + fn_1_36E4(arg0); + HuAudFXPlay(0x5F2); + + fn_1_355C(arg0); + var_r19 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r19) { + break; + } + } + fn_1_355C(arg0); + var_r20 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r20) { + break; + } + } + } + else { + block_10: + fn_1_3098(arg0); + arg0->unk_50 = 0; + arg0->unk_58 = var_r29->unk_10 + (fn_1_8944() % var_r29->unk_14); + + while (arg0->unk_50 < 1) { + fn_1_326C(arg0); + for (var_r21 = 0; var_r21 < 0x12; var_r21++) { + fn_1_3450(arg0); + arg0->unk_48 = 6; + + fn_1_355C(arg0); + sp8[0] = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 == sp8[0]) { + break; + } + } + } + fn_1_326C(arg0); + loop_12: + if (arg0->unk_00_field0 == 0) { + var_r30 = fn_1_34AC(arg0); + } + else if (arg0->unk_58 > 0) { + arg0->unk_58 = arg0->unk_58 - 1; + var_r30 = 0; + } + else if ((fn_1_8944() % 30) != 0) { + var_r30 = 1; + } + else { + var_r30 = 2; + } + switch (var_r30) { + case 0: + for (var_r26 = 0; var_r26 < 1; var_r26++) { + fn_1_355C(arg0); + var_r18 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r18) { + break; + } + } + case 1: + if (arg0->unk_4C != 1) { + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[7], 0.0f, 6.0f, 0); + for (var_r25 = 0; var_r25 < 6; var_r25++) { + fn_1_374C(arg0->unk_E8); + fn_1_36E4(arg0); + HuAudFXPlay(0x5F2); + fn_1_355C(arg0); + var_r17 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 == var_r17) { + break; + } + } + } + block_36: + arg0->unk_5C[arg0->unk_50++] = 1; + switch (arg0->unk_4C) { + case 1: + case 2: + var_f31 = 0.0f; + var_f30 = 34.0f; + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]); + Hu3DMotionStartEndSet(arg0->unk_AC, 0.0f, 34.0f); + Hu3DMotionTimeSet(arg0->unk_AC, 0.0f); + Hu3DMotionSpeedSet(arg0->unk_AC, 2.0f); + break; + } + arg0->unk_48 = 5; + break; + case 2: + switch (arg0->unk_4C) { + case 0: + break; + case 1: + var_f31 = 0.0f; + var_f30 = 10.0f; + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]); + Hu3DMotionStartEndSet(arg0->unk_AC, 0.0f, 10.0f); + Hu3DMotionTimeSet(arg0->unk_AC, 0.0f); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); + for (var_r24 = 0; var_r24 < 0x1E; var_r24++) { + var_f31 = 60.0f; + var_f30 = 70.0f; + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]); + Hu3DMotionStartEndSet(arg0->unk_AC, 60.0f, 70.0f); + Hu3DMotionTimeSet(arg0->unk_AC, 60.0f); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); + for (var_r23 = 0; var_r23 < 0x1E; var_r23++) { + fn_1_355C(arg0); + sp8[2] = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != sp8[2]) { + break; + } + } + fn_1_355C(arg0); + sp8[3] = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != sp8[3]) { + break; + } + } + case 2: + case 3: + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[9], 0.0f, 2.0f, 0); + for (var_r22 = 0; var_r22 < 0x3C; var_r22++) { + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 8.0f, 0); + fn_1_355C(arg0); + sp8[1] = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != sp8[1]) { + break; + } + } + break; + } + break; + } + } +} + +void fn_1_2CE0(M420DllPlayerStruct *arg0) +{ + s32 var_r30; + s32 var_r29; + + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 30.0f, 0x40000001); + + // fn_1_2260? + for (var_r30 = 0; var_r30 < 0x23; var_r30++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + return; + } + } + arg0->unk_48 = 0; +} + +void fn_1_2D7C(M420DllPlayerStruct *arg0) +{ + float var_f31; + float var_f30; + s32 var_r30; + s32 var_r29; + + var_f30 = 0.0f; + var_f31 = 30.0f; + Hu3DMotionStartEndSet(arg0->unk_AC, var_f30, var_f31); + Hu3DMotionTimeSet(arg0->unk_AC, var_f31); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000001); + Hu3DModelAttrSet(arg0->unk_AC, 0x40000004); + HuAudFXPlay(0x5F6); + fn_1_6268(); + fn_1_5AA8(0, 22.5f); + fn_1_1E64(arg0, 1, 0x1E); + // fn_1_2260? + for (var_r30 = 0; var_r30 < 0x1E; var_r30++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + return; + } + } + arg0->unk_48 = 0; +} + +void fn_1_2EA8(M420DllPlayerStruct *arg0) +{ + s16 var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 var_r26; + s32 var_r25; + s32 var_r24; + s32 var_r23; + s32 var_r22; + + fn_1_326C(arg0); + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[3], 0.0f, 1.0f, 0); + var_r30 = fn_1_6660(); + Hu3DModelAttrReset(var_r30, 0x40000002); + Hu3DModelAttrSet(var_r30, 0x40000001); + Hu3DMotionTimeSet(var_r30, 0.0f); + + for (var_r29 = 0; var_r29 < 0x18; var_r29++) { + HuAudFXPlay(0x5F7); + fn_1_636C(); + fn_1_1E64(arg0, 0x1E, 1); + Hu3DModelAttrSet(var_r30, 0x40000002); + fn_1_5AA8(1, 22.5f); + for (var_r28 = 0; var_r28 < 0x14; var_r28++) { + HuAudFXPlay(0x5F8); + fn_1_3450(arg0); + fn_1_378C(arg0); + for (var_r27 = 0; var_r27 < 0x14; var_r27++) { + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 30.0f, 0x40000001); + for (var_r26 = 0; var_r26 < 0x19; var_r26++) { + arg0->unk_48 = 6; + + fn_1_355C(arg0); + var_r22 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r22) { + break; + } + } + fn_1_355C(arg0); + var_r23 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r23) { + break; + } + } + fn_1_355C(arg0); + var_r24 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r24) { + break; + } + } + fn_1_355C(arg0); + var_r25 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r25) { + break; + } + } +} + +void fn_1_3098(M420DllPlayerStruct *arg0) +{ + s32 var_r30; + s32 var_r29; + s32 var_r28; + + for (var_r30 = 0; var_r30 < 0xA; var_r30++) { + arg0->unk_5C[var_r30] = 0; + } + arg0->unk_50 = 0; + switch (arg0->unk_4C) { + case 0: + for (var_r29 = 0; var_r29 < 6;) { + arg0->unk_84[var_r29] = fn_1_8944() % 7; + if (arg0->unk_84[var_r29] == 6) { + arg0->unk_84[var_r29] = 0; + } + if ((var_r29 <= 0) || (arg0->unk_84[var_r29] != arg0->unk_84[var_r29 - 1])) { + for (var_r30 = 0, var_r28 = 0; var_r30 < var_r29; var_r30++) { + if (arg0->unk_84[var_r29] == arg0->unk_84[var_r30]) { + var_r28++; + } + } + if (var_r28 < 2) { + var_r29++; + } + } + } + break; + case 1: + case 2: + case 3: + for (var_r30 = 0; var_r30 < 0xA; var_r30++) { + arg0->unk_84[1] = arg0->unk_84[0]; + arg0->unk_84[0] = fn_1_8944() % 7; + if (arg0->unk_84[0] == 6) { + arg0->unk_84[0] = 0; + } + if (arg0->unk_84[0] != arg0->unk_84[1]) { + break; + } + } + break; + default: + break; + } +} + +static const s32 lbl_1_rodata_2F8[4] = { 6, 1, 1, 1 }; + +void fn_1_326C(M420DllPlayerStruct *arg0) +{ + Vec sp14; + Vec sp8; + + s32 var_r30; + s16 var_r29; + s32 var_r28; + s32 var_r26; + + sp14 = arg0->unk_10; + sp14.y += 300.0f; + Hu3D3Dto2D(&sp14, 1, &sp8); + + var_r26 = arg0->unk_4C == 0 ? -6 : 0; + espPosSet(arg0->unk_D8, sp8.x + var_r26, 6.0f + sp8.y); + espDispOn(arg0->unk_D8); + var_r28 = lbl_1_rodata_2F8[arg0->unk_4C]; + sp8.x -= (var_r28 / 2) * 0x1E; + for (var_r30 = 0; var_r30 < var_r28; var_r30++) { + var_r29 = arg0->unk_C4[var_r30]; + if (arg0->unk_5C[var_r30] != 0) { + espBankSet(var_r29, arg0->unk_84[var_r30] + 7); + } + else { + espBankSet(var_r29, arg0->unk_84[var_r30]); + } + espPosSet(var_r29, sp8.x + var_r30 * 0x20, sp8.y); + espDispOn(var_r29); + } +} + +void fn_1_3450(M420DllPlayerStruct *arg0) +{ + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0xA; var_r31++) { + espDispOff(arg0->unk_C4[var_r31]); + } + espDispOff(arg0->unk_D8); +} + +static const s32 lbl_1_rodata_30C[7] = { 0x100, 0x200, 0x40, 0x20, 0x800, 0x400, 0x10 }; + +s32 fn_1_34AC(M420DllPlayerStruct *arg0) +{ + s32 var_r31; + u16 var_r30; + u16 var_r29; + + var_r31 = 0; + var_r30 = HuPadBtnDown[arg0->unk_0C] & 0xF60; + var_r29 = lbl_1_rodata_30C[arg0->unk_84[arg0->unk_50]]; + if (var_r30 != 0) { + var_r31 = 2; + } + if (((var_r30 & var_r29) != 0) && ((var_r30 & ~var_r29) == 0)) { + var_r31 = 1; + } + return var_r31; +} + +void fn_1_355C(M420DllPlayerStruct *arg0) +{ + float var_f31; + + arg0 = HuPrcCurrentGet()->user_data; + Hu3DModelPosSet(arg0->unk_AC, arg0->unk_10.x, arg0->unk_10.y, arg0->unk_10.z); + if (arg0->unk_00_field2) { + switch (arg0->unk_E4) { + case 0: + var_f31 = arg0->unk_DC; + break; + case 1: + var_f31 = sind((90.0f * arg0->unk_DC)); + var_f31 *= var_f31; + break; + } + arg0->unk_1C.x = arg0->unk_28.x + (var_f31 * (arg0->unk_34.x - arg0->unk_28.x)); + arg0->unk_1C.y = arg0->unk_28.y + (var_f31 * (arg0->unk_34.y - arg0->unk_28.y)); + arg0->unk_1C.z = arg0->unk_28.z + (var_f31 * (arg0->unk_34.z - arg0->unk_28.z)); + if ((arg0->unk_DC += arg0->unk_E0) >= 1.0f) { + arg0->unk_1C = arg0->unk_34; + arg0->unk_00_field2 = 0; + } + } + Hu3DModelRotSet(arg0->unk_AC, arg0->unk_1C.x, arg0->unk_1C.y, arg0->unk_1C.z); +} + +void fn_1_36E4(M420DllPlayerStruct *arg0) +{ + Hu3DModelHookSet(arg0->unk_AC, "test11_tex_we-itemhook-r", fn_1_6660()); + arg0->unk_00_field1 = 1; + fn_1_1E64(arg0, 1, 0x14); +} + +void fn_1_374C(M420DllPlayerStruct *arg0) +{ + Hu3DModelHookReset(arg0->unk_AC); + arg0->unk_00_field1 = 0; +} + +void fn_1_378C(M420DllPlayerStruct *arg0) +{ + Mtx sp20; + Vec sp14; + Vec sp8; + + if (arg0->unk_00_field1) { + Hu3DModelObjMtxGet(arg0->unk_AC, "test11_tex_we-itemhook-r", sp20); + Hu3DModelHookObjReset(arg0->unk_AC, "test11_tex_we-itemhook-r"); + Hu3DMtxTransGet(sp20, &sp14); + Hu3DMtxRotGet(sp20, &sp8); + Hu3DModelPosSetV(fn_1_6660(), &sp14); + Hu3DModelRotSetV(fn_1_6660(), &sp8); + } + HuPrcChildCreate(fn_1_3854, 0x64, 0x2000, 0, lbl_1_bss_4); + arg0->unk_00_field1 = 0; +} + +char lbl_1_data_135[1] = { 0 }; + +void fn_1_3854(void) +{ + Mtx sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + + float var_f31; + s16 var_r31; + + var_r31 = fn_1_6660(); + Hu3DModelObjMtxGet(var_r31, lbl_1_data_135, sp2C); + Hu3DMtxRotGet(sp2C, &sp8); + Hu3DMtxTransGet(sp2C, &sp20); + var_f31 = 0.0f; + + while (var_f31 < 1.0f) { + sp14.x = cosd((90.0f * var_f31)); + sp14.y = sp14.z = sp14.x; + Hu3DModelScaleSet(var_r31, sp14.x, sp14.y, sp14.z); + var_f31 += 0.05f; + HuPrcVSleep(); + } + fn_1_6728(); + sp14.x = sp14.y = sp14.z = 1.0f; + Hu3DModelScaleSet(var_r31, sp14.x, sp14.y, sp14.z); + HuPrcEnd(); + while (TRUE) { + HuPrcVSleep(); + } +} + +void fn_1_3970(M420DllPlayerStruct *arg0) +{ + Vec sp38; + + s32 var_r27; + s32 var_r26; + s32 var_r25; + s32 var_r24; + + if (arg0->unk_00_field1) { + fn_1_378C(arg0); + } + else if (arg0->unk_4C == 1) { + fn_1_378C(arg0); + } + fn_1_3450(arg0); + if (arg0->unk_4C == 0) { + Hu3DModelAttrReset(arg0->unk_AC, 0x40000002); + Hu3DModelAttrReset(arg0->unk_AC, 0x40000001); + Hu3DModelAttrSet(arg0->unk_AC, 0x40000004); + fn_1_63EC(); + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[6], 0.0f, 32.0f, 0); + Hu3DMotionShiftStartEndSet(arg0->unk_AC, 0.0f, 59.0f); + sp38 = arg0->unk_1C; + sp38.y = 0.0f; + fn_1_21C8(arg0, &sp38, 60, 1); + } + for (var_r27 = 0; var_r27 < 0x3C; var_r27++) { + fn_1_355C(arg0); + var_r25 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r25) { + return; + } + } + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 16.0f, 0); + for (var_r26 = 0; var_r26 < 0x3C; var_r26++) { + fn_1_355C(arg0); + var_r24 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r24) { + return; + } + } + arg0->unk_48 = 0; +} + +void fn_1_3F94(M420DllPlayerStruct *arg0) +{ + Vec sp8; + s32 var_r29; + s32 var_r28; + + if (arg0->unk_4C != 0) { + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[6]); + Hu3DMotionStartEndSet(arg0->unk_AC, 60.0f, 119.0f); + Hu3DMotionTimeSet(arg0->unk_AC, 60.0f); + sp8 = arg0->unk_1C; + sp8.y = lbl_1_rodata_258[arg0->unk_4C][1].y; + fn_1_21C8(arg0, &sp8, 60, 1); + while (arg0->unk_00_field2 != 0) { + for (var_r28 = 0; var_r28 < 1; var_r28++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + return; + } + } + } + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 4.0f, 0); + } + arg0->unk_48 = 0; +} + +void fn_1_4294(M420DllPlayerStruct *arg0) +{ + Vec sp8; + s32 var_r29; + s32 var_r28; + + if (arg0->unk_4C != 0) { + CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[6]); + Hu3DMotionStartEndSet(arg0->unk_AC, 0.0f, 59.0f); + sp8 = arg0->unk_1C; + sp8.y = 0.0f; + fn_1_21C8(arg0, &sp8, 60, 1); + while (arg0->unk_00_field2 != 0) { + for (var_r28 = 0; var_r28 < 1; var_r28++) { + fn_1_355C(arg0); + var_r29 = arg0->unk_48; + HuPrcVSleep(); + if (arg0->unk_48 != var_r29) { + return; + } + } + } + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 8.0f, 0); + } + arg0->unk_48 = 0; +} + +void fn_1_4574(M420DllPlayerStruct *arg0) +{ + float var_f31; + M420DllPlayerStruct *var_r31; + s32 var_r29; + s32 var_r28; + + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[1], 0.0f, 4.0f, 0); + fn_1_2260(arg0); +} + +void fn_1_476C(M420DllPlayerStruct *arg0) +{ + float var_f31; + M420DllPlayerStruct *var_r31; + s32 var_r29; + s32 var_r28; + + CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[2], 0.0f, 4.0f, 0); + fn_1_2260(arg0); +}