From 1e255d3ea4339d409b162076a1c23f2d40f59567 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Sat, 13 Apr 2024 17:18:59 -0700 Subject: [PATCH] Matched REL/w04/main + bridge + boo_event --- config/GMPE01_00/rels/w04Dll/symbols.txt | 332 +++--- config/GMPE01_00/symbols.txt | 2 +- configure.py | 6 +- include/REL/w04Dll.h | 40 + include/game/object.h | 1 + src/REL/w04Dll/boo_event.c | 1215 ++++++++++++++++++++++ src/REL/w04Dll/bridge.c | 297 ++++++ src/REL/w04Dll/main.c | 445 ++++++++ src/game/objsysobj.c | 2 +- 9 files changed, 2169 insertions(+), 171 deletions(-) create mode 100755 include/REL/w04Dll.h create mode 100755 src/REL/w04Dll/boo_event.c create mode 100755 src/REL/w04Dll/bridge.c create mode 100755 src/REL/w04Dll/main.c diff --git a/config/GMPE01_00/rels/w04Dll/symbols.txt b/config/GMPE01_00/rels/w04Dll/symbols.txt index c6c37698..ca7ccedd 100644 --- a/config/GMPE01_00/rels/w04Dll/symbols.txt +++ b/config/GMPE01_00/rels/w04Dll/symbols.txt @@ -3,55 +3,55 @@ _prolog = .text:0x00000030; // type:function size:0x64 scope:global _epilog = .text:0x00000094; // type:function size:0x4C scope:global BoardCreate = .text:0x000000E0; // type:function size:0x514 BoardDestroy = .text:0x000005F4; // type:function size:0x15C -fn_1_750 = .text:0x00000750; // type:function size:0x44 -fn_1_794 = .text:0x00000794; // type:function size:0x4 -fn_1_798 = .text:0x00000798; // type:function size:0x64 -fn_1_7FC = .text:0x000007FC; // type:function size:0x134 -fn_1_930 = .text:0x00000930; // type:function size:0x24 -fn_1_954 = .text:0x00000954; // type:function size:0x4 -fn_1_958 = .text:0x00000958; // type:function size:0x3A0 -fn_1_CF8 = .text:0x00000CF8; // type:function size:0x38 -fn_1_D30 = .text:0x00000D30; // type:function size:0x80 -fn_1_DB0 = .text:0x00000DB0; // type:function size:0x28C -fn_1_103C = .text:0x0000103C; // type:function size:0xF4 +fn_1_750 = .text:0x00000750; // type:function size:0x44 scope:local +fn_1_794 = .text:0x00000794; // type:function size:0x4 scope:local +fn_1_798 = .text:0x00000798; // type:function size:0x64 scope:local +fn_1_7FC = .text:0x000007FC; // type:function size:0x134 scope:local +fn_1_930 = .text:0x00000930; // type:function size:0x24 scope:local +fn_1_954 = .text:0x00000954; // type:function size:0x4 scope:local +fn_1_958 = .text:0x00000958; // type:function size:0x3A0 scope:local +fn_1_CF8 = .text:0x00000CF8; // type:function size:0x38 scope:local +fn_1_D30 = .text:0x00000D30; // type:function size:0x80 scope:local +fn_1_DB0 = .text:0x00000DB0; // type:function size:0x28C scope:local +fn_1_103C = .text:0x0000103C; // type:function size:0xF4 scope:local fn_1_1130 = .text:0x00001130; // type:function size:0x1CC fn_1_12FC = .text:0x000012FC; // type:function size:0x2CC fn_1_15C8 = .text:0x000015C8; // type:function size:0x50 fn_1_1618 = .text:0x00001618; // type:function size:0x19C -fn_1_17B4 = .text:0x000017B4; // type:function size:0x168 -fn_1_191C = .text:0x0000191C; // type:function size:0x27C -fn_1_1B98 = .text:0x00001B98; // type:function size:0x94 -fn_1_1C2C = .text:0x00001C2C; // type:function size:0x234 -fn_1_1E60 = .text:0x00001E60; // type:function size:0x1A8 -fn_1_2008 = .text:0x00002008; // type:function size:0x3C -fn_1_2044 = .text:0x00002044; // type:function size:0x14 +fn_1_17B4 = .text:0x000017B4; // type:function size:0x168 scope:local +fn_1_191C = .text:0x0000191C; // type:function size:0x27C scope:local +fn_1_1B98 = .text:0x00001B98; // type:function size:0x94 scope:local +fn_1_1C2C = .text:0x00001C2C; // type:function size:0x234 scope:local +fn_1_1E60 = .text:0x00001E60; // type:function size:0x1A8 scope:local +fn_1_2008 = .text:0x00002008; // type:function size:0x3C scope:local +fn_1_2044 = .text:0x00002044; // type:function size:0x14 scope:local fn_1_2058 = .text:0x00002058; // type:function size:0x94 -fn_1_20EC = .text:0x000020EC; // type:function size:0x7D0 -fn_1_28BC = .text:0x000028BC; // type:function size:0x2D0 -fn_1_2B8C = .text:0x00002B8C; // type:function size:0x84 -fn_1_2C10 = .text:0x00002C10; // type:function size:0x250 -fn_1_2E60 = .text:0x00002E60; // type:function size:0x88 -fn_1_2EE8 = .text:0x00002EE8; // type:function size:0x6C -fn_1_2F54 = .text:0x00002F54; // type:function size:0x68 -fn_1_2FBC = .text:0x00002FBC; // type:function size:0x20 -fn_1_2FDC = .text:0x00002FDC; // type:function size:0xC8 -fn_1_30A4 = .text:0x000030A4; // type:function size:0x834 -fn_1_38D8 = .text:0x000038D8; // type:function size:0x3C4 -fn_1_3C9C = .text:0x00003C9C; // type:function size:0x90C -fn_1_45A8 = .text:0x000045A8; // type:function size:0x88 -fn_1_4630 = .text:0x00004630; // type:function size:0x50 -fn_1_4680 = .text:0x00004680; // type:function size:0x1C8 -fn_1_4848 = .text:0x00004848; // type:function size:0x7D0 -fn_1_5018 = .text:0x00005018; // type:function size:0x288 -fn_1_52A0 = .text:0x000052A0; // type:function size:0x300 -fn_1_55A0 = .text:0x000055A0; // type:function size:0x14 +fn_1_20EC = .text:0x000020EC; // type:function size:0x7D0 scope:local +fn_1_28BC = .text:0x000028BC; // type:function size:0x2D0 scope:local +fn_1_2B8C = .text:0x00002B8C; // type:function size:0x84 scope:local +fn_1_2C10 = .text:0x00002C10; // type:function size:0x250 scope:local +fn_1_2E60 = .text:0x00002E60; // type:function size:0x88 scope:local +fn_1_2EE8 = .text:0x00002EE8; // type:function size:0x6C scope:local +fn_1_2F54 = .text:0x00002F54; // type:function size:0x68 scope:local +fn_1_2FBC = .text:0x00002FBC; // type:function size:0x20 scope:local +fn_1_2FDC = .text:0x00002FDC; // type:function size:0xC8 scope:local +fn_1_30A4 = .text:0x000030A4; // type:function size:0x834 scope:local +fn_1_38D8 = .text:0x000038D8; // type:function size:0x3C4 scope:local +fn_1_3C9C = .text:0x00003C9C; // type:function size:0x90C scope:local +fn_1_45A8 = .text:0x000045A8; // type:function size:0x88 scope:local +fn_1_4630 = .text:0x00004630; // type:function size:0x50 scope:local +fn_1_4680 = .text:0x00004680; // type:function size:0x1C8 scope:local +fn_1_4848 = .text:0x00004848; // type:function size:0x7D0 scope:local +fn_1_5018 = .text:0x00005018; // type:function size:0x288 scope:local +fn_1_52A0 = .text:0x000052A0; // type:function size:0x300 scope:local +fn_1_55A0 = .text:0x000055A0; // type:function size:0x14 scope:local fn_1_55B4 = .text:0x000055B4; // type:function size:0x94 -fn_1_5648 = .text:0x00005648; // type:function size:0x1E0 -fn_1_5828 = .text:0x00005828; // type:function size:0x7C -fn_1_58A4 = .text:0x000058A4; // type:function size:0xDC -fn_1_5980 = .text:0x00005980; // type:function size:0x44 -fn_1_59C4 = .text:0x000059C4; // type:function size:0x68 -fn_1_5A2C = .text:0x00005A2C; // type:function size:0x5F8 +fn_1_5648 = .text:0x00005648; // type:function size:0x1E0 scope:local +fn_1_5828 = .text:0x00005828; // type:function size:0x7C scope:local +fn_1_58A4 = .text:0x000058A4; // type:function size:0xDC scope:local +fn_1_5980 = .text:0x00005980; // type:function size:0x44 scope:local +fn_1_59C4 = .text:0x000059C4; // type:function size:0x68 scope:local +fn_1_5A2C = .text:0x00005A2C; // type:function size:0x5F8 scope:local fn_1_6024 = .text:0x00006024; // type:function size:0x28C fn_1_62B0 = .text:0x000062B0; // type:function size:0x628 fn_1_68D8 = .text:0x000068D8; // type:function size:0x420 @@ -98,82 +98,82 @@ fn_1_E6AC = .text:0x0000E6AC; // type:function size:0x1D4 fn_1_E880 = .text:0x0000E880; // type:function size:0x18C _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:0x8 data:double -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 data:double -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size: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:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 data:double -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 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_A8 = .rodata:0x000000A8; // type:object size:0x8 data:double -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 data:double -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_E0 = .rodata:0x000000E0; // type:object size:0x8 data:double -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: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_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:0x8 data:double -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_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: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_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:0x8 scope:local 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:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 scope:local data:double +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size: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:0x8 scope:local data:double +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: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_A8 = .rodata:0x000000A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data:double +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_E0 = .rodata:0x000000E0; // type:object size:0x8 scope:local data:double +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: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_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:0x8 scope:local data:double +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_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: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 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 @@ -318,29 +318,29 @@ 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_data_0 = .data:0x00000000; // type:object size:0x280 -lbl_1_data_280 = .data:0x00000280; // type:object size:0x2 data:2byte -lbl_1_data_282 = .data:0x00000282; // type:object size:0x2 data:2byte -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:0x8 -lbl_1_data_298 = .data:0x00000298; // type:object size:0x8 -lbl_1_data_2A0 = .data:0x000002A0; // type:object size:0xC -lbl_1_data_2AC = .data:0x000002AC; // type:object size:0x20 -lbl_1_data_2D0 = .data:0x000002D0; // type:object size:0x20 -lbl_1_data_2F0 = .data:0x000002F0; // type:object size:0x4 data:4byte -lbl_1_data_2F4 = .data:0x000002F4; // type:object size:0x20 -lbl_1_data_314 = .data:0x00000314; // type:object size:0x20 -lbl_1_data_334 = .data:0x00000334; // type:object size:0x5 data:string -lbl_1_data_339 = .data:0x00000339; // type:object size:0x5 data:string -lbl_1_data_33E = .data:0x0000033E; // type:object size:0x5 data:string -lbl_1_data_343 = .data:0x00000343; // type:object size:0x5 data:string -lbl_1_data_348 = .data:0x00000348; // type:object size:0x10 -lbl_1_data_358 = .data:0x00000358; // type:object size:0x10 -lbl_1_data_368 = .data:0x00000368; // type:object size:0x8 data:string -lbl_1_data_370 = .data:0x00000370; // type:object size:0x12 data:string -lbl_1_data_382 = .data:0x00000382; // type:object size:0x11 data:string -lbl_1_data_393 = .data:0x00000393; // type:object size:0x10 +lbl_1_data_280 = .data:0x00000280; // type:object size:0x2 scope:local data:2byte +lbl_1_data_282 = .data:0x00000282; // type:object size:0x2 scope:local data:2byte +lbl_1_data_284 = .data:0x00000284; // type:object size:0x2 scope:local data:2byte +lbl_1_data_286 = .data:0x00000286; // type:object size:0x2 scope:local data:2byte +lbl_1_data_288 = .data:0x00000288; // type:object size:0x8 scope:local +lbl_1_data_290 = .data:0x00000290; // type:object size:0x8 scope:local +lbl_1_data_298 = .data:0x00000298; // type:object size:0x8 scope:local +lbl_1_data_2A0 = .data:0x000002A0; // type:object size:0xB scope:local data:string +lbl_1_data_2AC = .data:0x000002AC; // type:object size:0x20 scope:local +lbl_1_data_2D0 = .data:0x000002D0; // type:object size:0x20 scope:local +lbl_1_data_2F0 = .data:0x000002F0; // type:object size:0x4 scope:local data:4byte +lbl_1_data_2F4 = .data:0x000002F4; // type:object size:0x20 scope:local +lbl_1_data_314 = .data:0x00000314; // type:object size:0x20 scope:local +lbl_1_data_334 = .data:0x00000334; // type:object size:0x5 scope:local data:string +lbl_1_data_339 = .data:0x00000339; // type:object size:0x5 scope:local data:string +lbl_1_data_33E = .data:0x0000033E; // type:object size:0x5 scope:local data:string +lbl_1_data_343 = .data:0x00000343; // type:object size:0x5 scope:local data:string +lbl_1_data_348 = .data:0x00000348; // type:object size:0x10 scope:local +lbl_1_data_358 = .data:0x00000358; // type:object size:0x10 scope:local +lbl_1_data_368 = .data:0x00000368; // type:object size:0x8 scope:local data:string +lbl_1_data_370 = .data:0x00000370; // type:object size:0x12 scope:local data:string +lbl_1_data_382 = .data:0x00000382; // type:object size:0x11 scope:local data:string +lbl_1_data_393 = .data:0x00000393; // type:object size:0x10 scope:local lbl_1_data_3A8 = .data:0x000003A8; // type:object size:0x8 data:string lbl_1_data_3B0 = .data:0x000003B0; // type:object size:0x9 data:string lbl_1_data_3B9 = .data:0x000003B9; // type:object size:0x6 data:string @@ -385,32 +385,32 @@ lbl_1_data_61E = .data:0x0000061E; // type:object size:0xE data:string lbl_1_data_62C = .data:0x0000062C; // type:object size:0x10 lbl_1_data_63C = .data:0x0000063C; // type:object size:0x3 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 -lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 data:4byte +lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x8 scope:local data:2byte +lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 scope:local data:4byte lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x20 data:2byte lbl_1_bss_38 = .bss:0x00000038; // type:object size:0x4 data:4byte -lbl_1_bss_3C = .bss:0x0000003C; // type:object size:0xC -lbl_1_bss_48 = .bss:0x00000048; // type:object size:0x4 data:4byte -lbl_1_bss_4C = .bss:0x0000004C; // type:object size:0x4 data:4byte -lbl_1_bss_50 = .bss:0x00000050; // type:object size:0x2 data:2byte -lbl_1_bss_52 = .bss:0x00000052; // type:object size:0x18 -lbl_1_bss_6A = .bss:0x0000006A; // type:object size:0x2 data:2byte -lbl_1_bss_6C = .bss:0x0000006C; // type:object size:0x4 data:4byte -lbl_1_bss_70 = .bss:0x00000070; // type:object size:0x2 data:2byte -lbl_1_bss_74 = .bss:0x00000074; // type:object size:0x4 data:4byte -lbl_1_bss_78 = .bss:0x00000078; // type:object size:0x4 data:4byte -lbl_1_bss_7C = .bss:0x0000007C; // type:object size:0x2 data:2byte -lbl_1_bss_80 = .bss:0x00000080; // type:object size:0x30 -lbl_1_bss_B0 = .bss:0x000000B0; // type:object size:0x2 data:2byte -lbl_1_bss_B2 = .bss:0x000000B2; // type:object size:0x8 -lbl_1_bss_BA = .bss:0x000000BA; // type:object size:0x8 data:2byte -lbl_1_bss_C2 = .bss:0x000000C2; // type:object size:0x2 data:2byte -lbl_1_bss_C4 = .bss:0x000000C4; // type:object size:0x10 -lbl_1_bss_D4 = .bss:0x000000D4; // type:object size:0x10 -lbl_1_bss_E4 = .bss:0x000000E4; // type:object size:0x10 -lbl_1_bss_F4 = .bss:0x000000F4; // type:object size:0x6 data:2byte -lbl_1_bss_FA = .bss:0x000000FA; // type:object size:0x2 data:2byte +lbl_1_bss_3C = .bss:0x0000003C; // type:object size:0xC scope:local +lbl_1_bss_48 = .bss:0x00000048; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_4C = .bss:0x0000004C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_50 = .bss:0x00000050; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_52 = .bss:0x00000052; // type:object size:0x18 scope:local +lbl_1_bss_6A = .bss:0x0000006A; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_6C = .bss:0x0000006C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_70 = .bss:0x00000070; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_74 = .bss:0x00000074; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_78 = .bss:0x00000078; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_7C = .bss:0x0000007C; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_80 = .bss:0x00000080; // type:object size:0x30 scope:local +lbl_1_bss_B0 = .bss:0x000000B0; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_B2 = .bss:0x000000B2; // type:object size:0x8 scope:local +lbl_1_bss_BA = .bss:0x000000BA; // type:object size:0x8 scope:local data:2byte +lbl_1_bss_C2 = .bss:0x000000C2; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_C4 = .bss:0x000000C4; // type:object size:0x10 scope:local +lbl_1_bss_D4 = .bss:0x000000D4; // type:object size:0x10 scope:local +lbl_1_bss_E4 = .bss:0x000000E4; // type:object size:0x10 scope:local +lbl_1_bss_F4 = .bss:0x000000F4; // type:object size:0x6 scope:local data:2byte +lbl_1_bss_FA = .bss:0x000000FA; // type:object size:0x2 scope:local data:2byte lbl_1_bss_100 = .bss:0x00000100; // type:object size:0x4 data:4byte lbl_1_bss_104 = .bss:0x00000104; // type:object size:0x4 data:4byte lbl_1_bss_108 = .bss:0x00000108; // type:object size:0xC diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 77ad7c84..18e32acf 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5211,7 +5211,7 @@ y_start = .sbss:0x801D3CF0; // type:object size:0x4 scope:local data:4byte x_start = .sbss:0x801D3CF4; // type:object size:0x4 scope:local data:4byte Draw_Color = .sbss:0x801D3CF8; // type:object size:0x3 scope:local data:byte XFB_putc = .sbss:0x801D3CFC; // type:object size:0x4 scope:local data:4byte -omDBGMenuButton = .sbss:0x801D3D00; // type:object size:0x4 +omDBGMenuButton = .sbss:0x801D3D00; // type:object size:0x2 CZoom = .sbss:0x801D3D04; // type:object size:0x4 data:float omDLLFileList = .sbss:0x801D3D08; // type:object size:0x8 scope:local data:4byte frand_seed = .sbss:0x801D3D10; // type:object size:0x8 scope:local data:4byte diff --git a/configure.py b/configure.py index caa5145b..b3d0471f 100644 --- a/configure.py +++ b/configure.py @@ -1270,9 +1270,9 @@ config.libs = [ Rel('w04Dll', objects = { Object(Matching, "REL/board_executor.c"), - Object(NonMatching, "REL/w04Dll/main.c"), - Object(NonMatching, "REL/w04Dll/bridge.c"), - Object(NonMatching, "REL/w04Dll/boo_event.c"), + Object(Matching, "REL/w04Dll/main.c"), + Object(Matching, "REL/w04Dll/bridge.c"), + Object(Matching, "REL/w04Dll/boo_event.c"), Object(NonMatching, "REL/w04Dll/big_boo.c"), Object(NonMatching, "REL/w04Dll/mg_item.c"), Object(NonMatching, "REL/w04Dll/mg_coin.c"), diff --git a/include/REL/w04Dll.h b/include/REL/w04Dll.h new file mode 100755 index 00000000..0ca359a3 --- /dev/null +++ b/include/REL/w04Dll.h @@ -0,0 +1,40 @@ +#ifndef REL_W04_H +#define REL_W04_H + +#include "game/process.h" +#include "game/board/map_object.h" + +#include "dolphin/types.h" + +enum { + MAPOBJ_MAX = 16 +}; + +extern s32 fn_1_1130(s16 arg0, float arg1, float arg2); + +extern void fn_1_12FC(void); +extern void fn_1_15C8(void); +extern void fn_1_1618(void); + +extern void fn_1_2058(void); +extern void fn_1_55B4(void); + +extern void fn_1_6024(void); +extern void fn_1_9EBC(void); + +extern void fn_1_A0F8(void); +extern void fn_1_A1F0(void); +extern void fn_1_BA7C(void); +extern void fn_1_BB00(s16 *arg0); +extern void fn_1_C2BC(void); + +extern void fn_1_C7A0(void); +extern void fn_1_C7D4(void); + +extern s16 lbl_1_bss_14[MAPOBJ_MAX]; +extern BoardMapObject lbl_1_data_0[MAPOBJ_MAX]; +extern s8 *lbl_1_bss_0; + +extern Process *lbl_1_bss_38; + +#endif diff --git a/include/game/object.h b/include/game/object.h index a78e5b07..58d84ca1 100644 --- a/include/game/object.h +++ b/include/game/object.h @@ -132,5 +132,6 @@ extern float CZoom; extern Vec CRotM[16]; extern Vec CenterM[16]; extern float CZoomM[16]; +extern s16 omDBGMenuButton; #endif \ No newline at end of file diff --git a/src/REL/w04Dll/boo_event.c b/src/REL/w04Dll/boo_event.c new file mode 100755 index 00000000..95145384 --- /dev/null +++ b/src/REL/w04Dll/boo_event.c @@ -0,0 +1,1215 @@ +#include "REL/w04Dll.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/memory.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/board/audio.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/ui.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "math.h" + +// TODO: required to match fn_1_3C9C. Can be removed once abs is removed from math.h. +#undef abs + +typedef struct { + /* 0x00 */ char unk00[0x50]; + /* 0x50 */ u32 unk50; // pointer? + /* 0x54 */ s32 unk54; +} UnkParticleDataStruct; // Size unknown + +typedef struct { + /* 0x00 */ s16 unk00; + /* 0x02 */ s16 unk02; + /* 0x04 */ s16 unk04; + /* 0x06 */ s16 unk06; + /* 0x08 */ s16 unk08; + /* 0x0A */ s16 unk0A; + /* 0x0C */ s16 unk0C; + /* 0x0E */ s16 unk0E; + /* 0x10 */ float unk10; + /* 0x14 */ float unk14; + /* 0x18 */ float unk18; + /* 0x1C */ float unk1C; + /* 0x20 */ Vec unk20; + /* 0x2C */ Process *unk2C; +} BssE4Data; // Size 0x30 + +static void fn_1_2044(void); +static void fn_1_20EC(void); +static void fn_1_28BC(void); +static void fn_1_2B8C(void); +static void fn_1_2C10(void); +static void fn_1_2E60(s16 arg0); +static void fn_1_2EE8(s32 arg0); +static s32 fn_1_2F54(u32 arg0); +static BssE4Data *fn_1_2FBC(s16 arg0); +static void fn_1_2FDC(void); +static void fn_1_30A4(void); +static void fn_1_38D8(void); +static s32 fn_1_3C9C(void); +static void fn_1_45A8(void); +static void fn_1_4630(void); +static s32 fn_1_4680(s16 arg0); +static void fn_1_4848(void); +static void fn_1_5018(void); +static void fn_1_52A0(s16 arg0, Vec *arg1); +static void fn_1_55A0(void); +static void fn_1_5648(void); +static void fn_1_5828(void); +static s16 fn_1_58A4(Vec *arg0); +static void fn_1_5980(s16 arg0); +static void fn_1_59C4(omObjData *arg0); +static void fn_1_5A2C(ModelData *model, ParticleData *particle, Mtx matrix); + +static s16 lbl_1_bss_FA; +static s16 lbl_1_bss_F4[3]; +static Process *lbl_1_bss_E4[4]; +static Process *lbl_1_bss_D4[4]; +static omObjData *lbl_1_bss_C4[4]; +static s16 lbl_1_bss_C2; +static s16 lbl_1_bss_BA[4]; +static s16 lbl_1_bss_B2[4]; +static s16 lbl_1_bss_B0; +static Vec lbl_1_bss_80[4]; +static s16 lbl_1_bss_7C; +static s32 lbl_1_bss_78; +static s32 lbl_1_bss_74; +static s16 lbl_1_bss_70; +static s32 lbl_1_bss_6C; +static s16 lbl_1_bss_6A; +static s16 lbl_1_bss_52[4][3]; +static s16 lbl_1_bss_50; +static AnimData *lbl_1_bss_4C; +static Process *lbl_1_bss_48; + +static s32 lbl_1_data_2D0[8] = { + DATADIR_MARIOMOT, + DATADIR_LUIGIMOT, + DATADIR_PEACHMOT, + DATADIR_YOSHIMOT, + DATADIR_WARIOMOT, + DATADIR_DONKEYMOT, + DATADIR_DAISYMOT, + DATADIR_WALUIGIMOT +}; + +static s32 lbl_1_data_2F0 = 28; + +static s32 lbl_1_data_2F4[8] = { + DATA_MAKE_NUM(DATADIR_W04, 35), + DATA_MAKE_NUM(DATADIR_W04, 36), + DATA_MAKE_NUM(DATADIR_W04, 37), + DATA_MAKE_NUM(DATADIR_W04, 38), + DATA_MAKE_NUM(DATADIR_W04, 39), + DATA_MAKE_NUM(DATADIR_W04, 40), + DATA_MAKE_NUM(DATADIR_W04, 41), + DATA_MAKE_NUM(DATADIR_W04, 42) +}; + +static s32 lbl_1_data_314[8] = { + DATA_MAKE_NUM(DATADIR_W04, 43), + DATA_MAKE_NUM(DATADIR_W04, 44), + DATA_MAKE_NUM(DATADIR_W04, 45), + DATA_MAKE_NUM(DATADIR_W04, 46), + DATA_MAKE_NUM(DATADIR_W04, 47), + DATA_MAKE_NUM(DATADIR_W04, 48), + DATA_MAKE_NUM(DATADIR_W04, 49), + DATA_MAKE_NUM(DATADIR_W04, 50) +}; + +static char *lbl_1_data_348[] = { + "kan1", "kan2", "kan3", "kan4" +}; + +static float lbl_1_data_358[] = { + -150.00001f, -170.00001f, -30.0f, -220.0f +}; + +static void fn_1_2044(void) { + lbl_1_bss_38 = NULL; +} + +void fn_1_2058(void) { + s32 sp8; + + sp8 = GWSystem.player_curr; + lbl_1_bss_38 = HuPrcChildCreate(fn_1_1618, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_38, fn_1_2044); + while (lbl_1_bss_38) { + HuPrcVSleep(); + } +} + +static void fn_1_20EC(void) { + Vec sp20; + Vec sp14; + Vec sp8; + float var_f31; + s32 temp_r30; + s32 temp_r28; + BoardSpace *var_r27; + BoardMapObject *var_r26; + s32 i; + s32 j; + + temp_r30 = GWSystem.player_curr; + lbl_1_bss_70 = 0; + lbl_1_bss_7C = 0; + temp_r28 = lbl_1_data_2D0[GWPlayer[temp_r30].character]; + lbl_1_bss_52[temp_r30][0] = BoardPlayerMotionCreate(temp_r30, temp_r28 | lbl_1_data_2F0); + lbl_1_bss_52[temp_r30][1] = BoardPlayerMotionCreate(temp_r30, lbl_1_data_2F4[GWPlayer[temp_r30].character]); + for (i = 0; i < 4; i++) { + if (i != temp_r30) { + lbl_1_bss_52[i][0] = BoardPlayerMotionCreate(i, temp_r28 | lbl_1_data_2F0); + lbl_1_bss_52[i][1] = BoardPlayerMotionCreate(i, lbl_1_data_2F4[GWPlayer[i].character]); + lbl_1_bss_52[i][2] = BoardPlayerMotionCreate(i, lbl_1_data_314[GWPlayer[i].character]); + } + } + for (i = 0; i < 3; i++) { + lbl_1_bss_F4[i] = BoardModelCreate(0x70000, NULL, 1); + BoardModelLayerSet(lbl_1_bss_F4[i], 2); + BoardModelVisibilitySet(lbl_1_bss_F4[i], 0); + } + var_r26 = &lbl_1_data_0[8]; + lbl_1_bss_FA = lbl_1_bss_14[8]; + BoardModelPosSetV(lbl_1_bss_FA, &var_r26->pos); + BoardModelRotSetV(lbl_1_bss_FA, &var_r26->rot); + BoardModelVisibilitySet(lbl_1_bss_FA, 1); + BoardModelAlphaSet(lbl_1_bss_FA, 0); + var_f31 = 0.0f; + for (i = 0; i < 4; i++) { + lbl_1_bss_B2[i] = 0; + lbl_1_bss_D4[i] = NULL; + } + fn_1_5648(); + fn_1_2C10(); + BoardDiceDigit2DShowSet(0); + BoardPlayerMotBlendSet(temp_r30, 180, 15); + BoardCameraViewSet(2); + while (!BoardPlayerMotBlendCheck(temp_r30)) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + BoardPlayerMotionShiftSet(temp_r30, lbl_1_bss_52[temp_r30][0], 0.0f, 5.0f, 0); + HuAudPlayerVoicePlay(temp_r30, 0x128); + BoardModelPosGet(lbl_1_bss_14[3], &sp20); + BoardModelPosSetV(lbl_1_bss_FA, &sp20); + BoardModelVisibilitySet(lbl_1_bss_FA, 1); + for (i = 0; i < 60; i++) { + var_f31 += 4.25f; + BoardModelAlphaSet(lbl_1_bss_FA, var_f31); + HuPrcVSleep(); + } + BoardModelAlphaSet(lbl_1_bss_FA, 0xFF); + HuAudFXPlay(0x4C); + BoardPlayerIdleSet(temp_r30); + HuPrcSleep(8); + BoardWinCreate(2, MAKE_MESSID(32, 1), 3); + BoardWinWait(); + BoardWinKill(); + var_r27 = BoardSpaceGet(0, GWPlayer[temp_r30].space_curr); + lbl_1_bss_74 = lbl_1_bss_78 = var_r27->link[0]; + BoardSpacePosGet(0, lbl_1_bss_78, &sp14); + BoardModelPosGet(lbl_1_bss_FA, &sp20); + while (fn_1_1130(lbl_1_bss_FA, 180.0 * (atan2(sp14.x - sp20.x, sp14.z - sp20.z) / M_PI), 2.0f) == 0) { + HuPrcVSleep(); + } + PSVECSubtract(&sp14, &sp20, &sp8); + PSVECScale(&sp8, &sp8, 0.022222223f); + for (i = 0; i < 45; i++) { + PSVECAdd(&sp20, &sp8, &sp20); + BoardModelPosSetV(lbl_1_bss_FA, &sp20); + HuPrcVSleep(); + } + BoardAudSeqPause(0, 1, 1000); + BoardModelPosSetV(lbl_1_bss_FA, &sp14); + BoardPlayerPosGet(temp_r30, &sp14); + while (fn_1_1130(lbl_1_bss_FA, 180.0 * (atan2(sp14.x - sp20.x, sp14.z - sp20.z) / M_PI), 3.0f) == 0) { + HuPrcVSleep(); + } + fn_1_2EE8(1); + while (fn_1_2F54(0) == 0) { + HuPrcVSleep(); + } + fn_1_2FBC(0)->unk00 = 2; + while (fn_1_1130(lbl_1_bss_FA, 90.0f, 3.0f) == 0) { + HuPrcVSleep(); + } + while (fn_1_2F54(0) == 0) { + HuPrcVSleep(); + } + fn_1_28BC(); + fn_1_2B8C(); + BoardAudSeqPause(0, 0, 1000); + BoardDiceDigit2DShowSet(1); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + BoardPlayerMotionKill(temp_r30, lbl_1_bss_52[temp_r30][0]); + BoardPlayerMotionKill(temp_r30, lbl_1_bss_52[temp_r30][1]); + for (i = 0; i < 4; i++) { + if (i != temp_r30) { + for (j = 0; j < 3; j++) { + BoardPlayerMotionKill(i, lbl_1_bss_52[i][j]); + } + } + } + for (i = 0; i < 3; i++) { + BoardModelKill(lbl_1_bss_F4[i]); + } + fn_1_5828(); + BoardModelVisibilitySet(lbl_1_bss_FA, 0); + HuPrcEnd(); +} + +static void fn_1_28BC(void) { + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f30; + float var_f31; + BoardSpace *var_r30; + s16 var_r29; + s32 var_r31; + s32 i; + Process *var_r27; + float *var_r26; + + var_r27 = HuPrcChildCreate(fn_1_45A8, 0x2001, 0x800, 0, boardMainProc); + HuPrcDestructorSet2(var_r27, fn_1_4630); + var_r26 = (float*) &var_r27->user_data; + lbl_1_bss_C2 = fn_1_4680(lbl_1_bss_78); + var_r29 = 0; + while (var_r29 == 0) { + var_r31 = fn_1_3C9C(); + if (var_r31 != -1) { + var_r30 = BoardSpaceGet(0, var_r31); + if (var_r30->flag & 1) { + lbl_1_bss_50 = var_r31; + } + if (var_r30->flag & 8) { + fn_1_52A0(lbl_1_bss_50, lbl_1_bss_80); + var_r29 = 1; + var_f31 = 255.0f; + HuPrcKill(var_r27); + } + BoardSpacePosGet(0, var_r31, &sp20); + BoardModelPosGet(lbl_1_bss_FA, &sp14); + temp_f30 = 180.0 * (atan2(sp20.x - sp14.x, sp20.z - sp14.z) / M_PI); + BoardModelRotYSet(lbl_1_bss_FA, temp_f30); + PSVECSubtract(&sp20, &sp14, &sp8); + PSVECScale(&sp8, &sp8, 0.022222223f); + *var_r26 = temp_f30 - 180.0f; + fn_1_2EE8(3); + for (i = 0; i < 45; i++) { + PSVECAdd(&sp8, &sp14, &sp14); + BoardModelPosSetV(lbl_1_bss_FA, &sp14); + fn_1_5018(); + if (var_r29 != 0) { + var_f31 -= 5.6666665f; + BoardModelAlphaSet(lbl_1_bss_FA, var_f31); + } + HuPrcVSleep(); + } + BoardModelPosSetV(lbl_1_bss_FA, &sp20); + lbl_1_bss_74 = lbl_1_bss_78; + lbl_1_bss_78 = var_r31; + if (var_r29 != 0) { + BoardModelVisibilitySet(lbl_1_bss_FA, 0); + } + } + HuPrcVSleep(); + } +} + +static void fn_1_2B8C(void) { + s32 i; + + while (fn_1_2F54(4) == 0 || lbl_1_bss_7C != 0) { + fn_1_2EE8(3); + HuPrcVSleep(); + } + HuAudFXStop(lbl_1_bss_6C); + for (i = 0; i < 4; i++) { + fn_1_2E60(i); + } +} + +static void fn_1_2C10(void) { + Vec sp8; + BssE4Data *temp_r31; + s32 i; + + for (i = 0; i < 4; i++) { + temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(BssE4Data), MEMORY_DEFAULT_NUM); + temp_r31->unk04 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 3), NULL, 0); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[3]), lbl_1_data_348[i], &sp8); + BoardModelLayerSet(temp_r31->unk04, 2); + BoardModelPosSetV(temp_r31->unk04, &sp8); + temp_r31->unk10 = lbl_1_data_358[i]; + BoardModelRotYSet(temp_r31->unk04, temp_r31->unk10); + temp_r31->unk18 = 0.0f; + BoardModelAlphaSet(temp_r31->unk04, temp_r31->unk18); + BoardModelVisibilitySet(temp_r31->unk04, 0); + temp_r31->unk14 = 0.003921569f * (frand() & 0xFF) * 360.0f; + temp_r31->unk08 = -1; + temp_r31->unk00 = 0; + temp_r31->unk06 = i; + temp_r31->unk1C = 0.0f; + temp_r31->unk02 = 1; + temp_r31->unk0C = 0; + if (i == 0) { + temp_r31->unk0A = lbl_1_bss_FA; + } else { + temp_r31->unk0A = ((BssE4Data*) lbl_1_bss_E4[i - 1]->user_data)->unk04; + } + lbl_1_bss_E4[i] = HuPrcChildCreate(fn_1_30A4, 0x2003, 0x1000, 0, boardMainProc); + lbl_1_bss_E4[i]->user_data = temp_r31; + temp_r31->unk2C = HuPrcChildCreate(fn_1_2FDC, 0x2002, 0x1000, 0, boardMainProc); + temp_r31->unk2C->user_data = temp_r31; + } +} + +static void fn_1_2E60(s16 arg0) { + BssE4Data *temp_r3; + + temp_r3 = fn_1_2FBC(arg0); + BoardModelKill(temp_r3->unk04); + HuPrcKill(temp_r3->unk2C); + HuPrcKill(lbl_1_bss_E4[arg0]); + HuMemDirectFree(lbl_1_bss_E4[arg0]->user_data); +} + +static void fn_1_2EE8(s32 arg0) { + s32 i; + + for (i = 0; i < 4; i++) { + if (fn_1_2FBC(i)->unk02 != 0) { + fn_1_2FBC(i)->unk00 = arg0; + } + } +} + +static s32 fn_1_2F54(u32 arg0) { + s32 i; + + for (i = 0; i < 4; i++) { + if (arg0 != fn_1_2FBC(i)->unk00) { + break; + } + } + if (i != 4) { + return 0; + } else { + return 1; + } +} + +static BssE4Data *fn_1_2FBC(s16 arg0) { + return lbl_1_bss_E4[arg0]->user_data; +} + +static void fn_1_2FDC(void) { + Vec sp8; + BssE4Data *temp_r31; + + temp_r31 = HuPrcCurrentGet()->user_data; + while (TRUE) { + BoardModelPosGet(temp_r31->unk04, &sp8); + sp8.y = temp_r31->unk1C + 4.0 * sin(temp_r31->unk14 * M_PI / 180.0); + BoardModelPosSetV(temp_r31->unk04, &sp8); + if (temp_r31->unk08 != -1) { + sp8.y += 50.0f; + BoardPlayerPosSetV(temp_r31->unk08, &sp8); + } + temp_r31->unk14 += 2.0f; + HuPrcVSleep(); + } +} + +static void fn_1_30A4(void) { + Vec sp20; + Vec sp14; + float temp_f31; + BssE4Data *temp_r31; + BoardSpace *var_r28; + Process *var_r27; + s16 var_r29; + s16 temp_r22; + s32 i; + + var_r29 = 0; + temp_r31 = HuPrcCurrentGet()->user_data; + while (TRUE) { + switch (temp_r31->unk00) { + case 0: + case 4: + break; + case 1: + BoardModelPosGet(temp_r31->unk04, &sp20); + BoardMusStart(1, 0x20, 0x7F, 0); + lbl_1_bss_6A = 1; + HuAudFXPlay(0x45F); + temp_r22 = fn_1_58A4(&sp20); + HuPrcSleep(45); + if (temp_r31->unk06 == 0) { + BoardPlayerPosGet(GWSystem.player_curr, &temp_r31->unk20); + temp_r31->unk20.y += 65.0f; + } else { + temp_r31->unk20 = fn_1_2FBC(temp_r31->unk06 - 1)->unk20; + temp_r31->unk20.z -= 300.0f; + } + BoardModelPosGet(lbl_1_bss_14[3], &sp20); + temp_r31->unk1C = sp20.y; + BoardModelVisibilitySet(temp_r31->unk04, 1); + if (temp_r31->unk06 == 0) { + lbl_1_bss_6C = HuAudFXPlay(0x460); + } + for (i = 0; i < 60; i++) { + temp_r31->unk18 += 4.25f; + BoardModelAlphaSet(temp_r31->unk04, temp_r31->unk18); + temp_r31->unk1C += 1.0833334f; + HuPrcVSleep(); + } + fn_1_5980(temp_r22); + BoardModelPosGet(temp_r31->unk04, &sp20); + temp_f31 = 180.0 * (atan2(temp_r31->unk20.x - sp20.x, temp_r31->unk20.z - sp20.z) / M_PI); + while (fn_1_1130(temp_r31->unk04, temp_f31, 5.0f) == 0) { + HuPrcVSleep(); + } + PSVECSubtract(&temp_r31->unk20, &sp20, &sp14); + PSVECScale(&sp14, &sp14, 0.016666668f); + for (i = 0; i < 60; i++) { + PSVECAdd(&sp14, &sp20, &sp20); + BoardModelPosSetV(temp_r31->unk04, &sp20); + HuPrcVSleep(); + } + BoardModelPosSetV(temp_r31->unk04, &temp_r31->unk20); + while (fn_1_1130(temp_r31->unk04, 0.0f, 5.0f) == 0) { + HuPrcVSleep(); + } + if (temp_r31->unk06 == 0) { + i = GWSystem.player_curr; + temp_f31 = BoardPlayerRotYGet(i); + omVibrate(i, 12, 6, 6); + while (TRUE) { + if (temp_f31 > 0.0f) { + temp_f31 -= 2.0f; + if (temp_f31 < 0.0f) { + temp_f31 = 0.0f; + } + } + BoardPlayerRotYSet(i, temp_f31); + BoardPlayerPosGet(i, &sp14); + BoardModelPosGet(temp_r31->unk04, &sp20); + sp14.y += 2.2f; + if (sp14.y > sp20.y + 50.0f) { + sp14.y = sp20.y + 50.0f; + break; + } + BoardPlayerPosSetV(i, &sp14); + HuPrcVSleep(); + } + BoardPlayerPosSetV(i, &sp14); + BoardPlayerRotYSet(i, 0.0f); + BoardPlayerMotionShiftSet(i, lbl_1_bss_52[GWSystem.player_curr][1], 0.0f, 10.0f, 0x40000001); + temp_r31->unk08 = i; + } + if (temp_r31->unk06 == 0) { + BoardModelPosGet(lbl_1_bss_FA, &temp_r31->unk20); + } else { + BoardModelPosGet(fn_1_2FBC(temp_r31->unk06 - 1)->unk04, &temp_r31->unk20); + } + temp_r31->unk00 = 0; + break; + case 2: + while (fn_1_1130(temp_r31->unk04, 90.0f, 3.0f) == 0) { + BoardPlayerRotYSet(temp_r31->unk08, BoardModelRotYGet(temp_r31->unk04)); + HuPrcVSleep(); + } + BoardPlayerRotYSet(temp_r31->unk08, BoardModelRotYGet(temp_r31->unk04)); + temp_r31->unk00 = 0; + break; + case 3: + BoardModelPosGet(temp_r31->unk04, &sp20); + temp_f31 = 180.0 * (atan2(temp_r31->unk20.x - sp20.x, temp_r31->unk20.z - sp20.z) / M_PI); + BoardModelRotYSet(temp_r31->unk04, temp_f31); + if (temp_r31->unk08 != -1) { + BoardPlayerRotYSet(temp_r31->unk08, temp_f31); + } + PSVECSubtract(&temp_r31->unk20, &sp20, &sp14); + PSVECScale(&sp14, &sp14, 0.022222223f); + if (temp_r31->unk0C > 0) { + var_r28 = BoardSpaceGet(0, temp_r31->unk0C); + if (var_r28->flag & 1) { + var_r29 = 1; + if (temp_r31->unk08 != -1) { + var_r27 = HuPrcChildCreate(fn_1_38D8, 0x2002, 0x1000, 0, boardMainProc); + var_r27->user_data = temp_r31; + lbl_1_bss_7C++; + } + } + } + for (i = 0; i < 45; i++) { + PSVECAdd(&sp20, &sp14, &sp20); + BoardModelPosSetV(temp_r31->unk04, &sp20); + if (temp_r31->unk08 != -1) { + BoardPlayerPosSetV(temp_r31->unk08, &sp20); + } + if (var_r29 != 0) { + if (temp_r31->unk06 == 2 && lbl_1_bss_6A != 0) { + BoardAudSeqFadeOut(1, 1000); + lbl_1_bss_6A = 0; + } + temp_r31->unk18 -= 5.6666665f; + BoardModelAlphaSet(temp_r31->unk04, temp_r31->unk18); + } + HuPrcVSleep(); + } + temp_r31->unk0E = temp_r31->unk0C; + if (temp_r31->unk06 == 0) { + temp_r31->unk0C = lbl_1_bss_74; + } else { + temp_r31->unk0C = fn_1_2FBC(temp_r31->unk06 - 1)->unk0E; + } + BoardModelPosSetV(temp_r31->unk04, &temp_r31->unk20); + if (temp_r31->unk08 != -1) { + BoardPlayerPosSetV(temp_r31->unk08, &temp_r31->unk20); + } + if (temp_r31->unk06 == 0) { + BoardModelPosGet(lbl_1_bss_FA, &temp_r31->unk20); + } else { + BoardModelPosGet(fn_1_2FBC(temp_r31->unk06 - 1)->unk04, &temp_r31->unk20); + } + if (var_r29 != 0) { + BoardModelVisibilitySet(temp_r31->unk04, 0); + temp_r31->unk02 = 0; + temp_r31->unk00 = 4; + } else { + temp_r31->unk00 = 0; + } + break; + } + HuPrcVSleep(); + } +} + +static void fn_1_38D8(void) { + Vec sp24; + Vec sp18; + Vec spC; + float var_f28; + float temp_f26; + float var_f29; + BssE4Data *temp_r30; + s16 temp_r31; + + OSReport("Getoff\n"); + temp_r30 = HuPrcCurrentGet()->user_data; + temp_r31 = temp_r30->unk08; + temp_r30->unk08 = -1; + BoardPlayerMotionShiftSet(temp_r31, 4, 0.0f, 5.0f, 0); + sp18 = lbl_1_bss_80[temp_r31]; + GWPlayer[temp_r31].space_curr = lbl_1_bss_B0; + BoardPlayerPosGet(temp_r31, &sp24); + var_f28 = 180.0 * (atan2(sp18.x - sp24.x, sp18.z - sp24.z) / M_PI); + BoardPlayerRotYSet(temp_r31, var_f28); + PSVECSubtract(&sp18, &sp24, &spC); + PSVECScale(&spC, &spC, 0.025f); + temp_f26 = 12.0f; + var_f29 = 0.0f; + while (TRUE) { + spC.y = temp_f26 - var_f29 * var_f29 * 0.25f * 0.075f; + var_f29 += 1.0f; + PSVECAdd(&spC, &sp24, &sp24); + if (sp24.y <= sp18.y) { + sp24.y = sp18.y; + break; + } + var_f28 = sqrtf((sp18.x - sp24.x) * (sp18.x - sp24.x) + (sp18.z - sp24.z) * (sp18.z - sp24.z)); + if (var_f28 <= 1.0f) { + spC.x = spC.z = 0.0f; + } + BoardPlayerPosSetV(temp_r31, &sp24); + HuPrcVSleep(); + } + BoardPlayerPosSetV(temp_r31, &sp18); + BoardPlayerIdleSet(temp_r31); + HuPrcSleep(8); + BoardPlayerMotBlendSet(temp_r31, 0, 0xF); + while (!BoardPlayerMotBlendCheck(temp_r31)) { + HuPrcVSleep(); + } + lbl_1_bss_7C--; + HuPrcEnd(); +} + +static s32 fn_1_3C9C(void) { + Vec sp50; + Vec sp44; + Vec sp38; + float sp28[4]; + s16 sp20[4]; + s16 sp18[4]; + s16 sp10[4]; + float sp8[2]; + BoardSpace *temp_r30; + BoardSpace *var_r28; + float var_f29; + float var_f30; + float var_f31; + s8 var_r26; + s8 var_r25; + s32 var_r24; + s16 var_r23; + s16 var_r22; + s16 temp_r20; + s16 var_r19; + s16 var_r21; + s16 var_r27; + s16 var_r29; + s16 var_r18; + s32 temp_r17; + s32 i; + + temp_r30 = BoardSpaceGet(0, lbl_1_bss_78); + if (temp_r30->flag & 8) { + return -1; + } + if (temp_r30->flag & 0x400) { + var_r29 = 0; + i = BoardSpaceLinkTargetListGet(0, lbl_1_bss_78, sp10); + for (i--; i >= 0; i--) { + var_r28 = BoardSpaceGet(0, sp10[i]); + if (var_r28->flag & 4) { + sp20[var_r29] = sp10[i]; + sp18[var_r29] = 1; + var_r29++; + } + } + for (i = 0; i < temp_r30->link_cnt; i++) { + var_r28 = BoardSpaceGet(0, temp_r30->link[i]); + if (var_r28->flag & 4) { + sp20[var_r29] = temp_r30->link[i]; + sp18[var_r29] = 0; + var_r29++; + } + } + var_r27 = 0; + BoardModelPosGet(lbl_1_bss_FA, &sp50); + for (i = 0; i < var_r29; i++) { + BoardSpacePosGet(0, sp20[i], &sp44); + sp50.y = sp44.y; + PSVECSubtract(&sp44, &sp50, &sp38); + var_f31 = 180.0 * (atan2(sp38.x, sp38.z) / M_PI); + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + sp28[i] = var_f31; + PSVECNormalize(&sp38, &sp44); + PSVECScale(&sp44, &sp44, 110.0f); + sp44.y += 200.0f; + PSVECAdd(&sp50, &sp44, &sp44); + BoardModelPosSetV(lbl_1_bss_F4[i], &sp44); + BoardModelRotYSet(lbl_1_bss_F4[i], var_f31); + BoardModelVisibilitySet(lbl_1_bss_F4[i], 1); + } + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(19, 27)); + var_r22 = HuWinCreate(-10000.0f, 368.0f, sp8[0], sp8[1], 0); + HuWinMesSet(var_r22, MAKE_MESSID(19, 27)); + HuWinBGTPLvlSet(var_r22, 0.0f); + HuWinMesSpeedSet(var_r22, 0); + var_f31 = 0.0f; + temp_r17 = GWSystem.player_curr; + temp_r20 = GWPlayer[temp_r17].port; + var_f29 = BoardModelRotYGet(lbl_1_bss_FA) - 180.0f; + if (var_f29 < 0.0f) { + var_f29 += 360.0f; + } + var_r21 = frandmod(30) + 30; + var_r18 = 0; + while (TRUE) { + var_r23 = var_r27; + if (GWPlayer[temp_r17].com) { + var_r26 = var_r25 = 0; + var_r19 = 0; + if (var_r21 != 0) { + var_r21--; + } else { + var_r21 = frandmod(10) + 15; + if ((frand() & 1) || var_r18 == 3) { + var_r19 = 0x100; + } else { + OSReport("com sel chg: %d \n", var_r29); + var_r18++; + var_r23 = frandmod(var_r29); + } + } + } else { + var_r26 = HuPadStkX[temp_r20]; + var_r25 = HuPadStkY[temp_r20]; + var_r19 = HuPadBtnDown[temp_r20]; + } + if (abs(var_r26) < 10) { + var_r26 = 0; + } + if (abs(var_r25) < 10) { + var_r25 = 0; + } + if (var_r26 != 0 || var_r25 != 0) { + var_f30 = 180.0 * (atan2(-var_r26, var_r25) / M_PI) - 180.0; + var_f30 += var_f29; + if (var_f30 >= 360.0f) { + var_f30 -= 360.0f; + } + if (var_f30 < 0.0f) { + var_f30 += 360.0f; + } + for (i = 0; i < var_r29; i++) { + if (fabs(sp28[i] - var_f30) < 30.0) { + var_r23 = i; + break; + } + } + } + if (var_r23 != var_r27) { + HuAudFXPlay(0); + var_f31 = 0.0f; + var_r27 = var_r23; + } + if (var_r19 & 0x100) { + break; + } + for (i = 0; i < var_r29; i++) { + if (var_r27 == i) { + sp38.x = sp38.y = sp38.z = 1.7999999523162842 + sin(var_f31 * M_PI / 180.0); + var_f31 += 8.0f; + if (var_f31 > 180.0f) { + var_f31 -= 180.0f; + } + } else { + sp38.x = sp38.y = sp38.z = 1.8f; + } + BoardModelScaleSetV(lbl_1_bss_F4[i], &sp38); + } + HuPrcVSleep(); + } + HuAudFXPlay(2); + for (i = 0; i < var_r29; i++) { + BoardModelVisibilitySet(lbl_1_bss_F4[i], 0); + } + HuWinKill(var_r22); + var_r24 = sp20[var_r27]; + lbl_1_bss_70 = sp18[var_r27]; + lbl_1_bss_C2 = fn_1_4680(var_r24); + } else if (lbl_1_bss_70 != 0) { + i = BoardSpaceLinkTargetListGet(0, lbl_1_bss_78, sp10); + for (i--; i >= 0; i--) { + var_r28 = BoardSpaceGet(0, sp10[i]); + if (var_r28->flag & 0x200) { + break; + } + } + var_r24 = sp10[i]; + } else { + for (i = 0; i < temp_r30->link_cnt; i++) { + var_r28 = BoardSpaceGet(0, temp_r30->link[i]); + if (var_r28->flag & 0x200) { + break; + } + } + var_r24 = temp_r30->link[i]; + } + return var_r24; +} + +static void fn_1_45A8(void) { + float *temp_r30; + s32 var_r31; + + var_r31 = 15; + temp_r30 = (float*) &HuPrcCurrentGet()->user_data; + while (TRUE) { + if (var_r31 == 0) { + BoardCameraMoveSet(0); + BoardCameraTargetPlayerSet(GWSystem.player_curr); + BoardCameraZoomSet(700.0f); + BoardStatusShowSetAll(0); + break; + } + var_r31--; + HuPrcVSleep(); + } + while (TRUE) { + BoardCameraRotSet(-15.0f, *temp_r30); + HuPrcVSleep(); + } +} + +static void fn_1_4630(void) { + BoardCameraMoveSet(0); + BoardCameraTargetPlayerSet(GWSystem.player_curr); + BoardCameraViewSet(2); + BoardStatusShowSetAll(1); + BoardCameraMoveSet(1); +} + +static s32 fn_1_4680(s16 arg0) { + BoardSpace *var_r30; + BoardSpace *var_r29; + s16 sp8[4]; + s16 var_r26; + s32 var_r27; + s32 i; + + var_r27 = 0; + var_r26 = 0; + var_r30 = BoardSpaceGet(0, arg0); + lbl_1_bss_C2 = 0; + while (TRUE) { + for (i = 0; i < 4; i++) { + if (i != GWSystem.player_curr && arg0 == GWPlayer[i].space_curr) { + lbl_1_bss_BA[var_r27++] = i; + } + } + if (var_r27 == 3 || var_r26 == 1) { + break; + } + if (lbl_1_bss_70 != 0) { + i = BoardSpaceLinkTargetListGet(0, arg0, sp8); + for (i--; i >= 0; i--) { + var_r29 = BoardSpaceGet(0, sp8[i]); + if (var_r29->flag & 0x200) { + break; + } + } + arg0 = sp8[i]; + } else { + for (i = 0; i < var_r30->link_cnt; i++) { + var_r29 = BoardSpaceGet(0, var_r30->link[i]); + if (var_r29->flag & 0x200) { + break; + } + } + arg0 = var_r30->link[i]; + } + var_r30 = BoardSpaceGet(0, arg0); + if (var_r30->flag & 0x401) { + var_r26 = 1; + } + } + return var_r27; +} + +static void fn_1_4848(void) { + Vec sp20; + Vec sp14; + float temp_f28; + BssE4Data *var_r29; + s32 temp_r30; + s32 i; + + temp_r30 = (s32) HuPrcCurrentGet()->user_data; + BoardPlayerPosGet(temp_r30, &sp20); + BoardPlayerMotBlendSet(temp_r30, BoardModelRotYGet(lbl_1_bss_FA) - 180.0f, 0xA); + while (!BoardPlayerMotBlendCheck(temp_r30)) { + BoardModelPosGet(lbl_1_bss_FA, &sp14); + temp_f28 = sqrtf((sp20.x - sp14.x) * (sp20.x - sp14.x) + (sp20.z - sp14.z) * (sp20.z - sp14.z)); + if (temp_f28 <= 200.0f) { + HuAudPlayerVoicePlay(temp_r30, 0x128); + goto block_A; + } + HuPrcVSleep(); + } + BoardPlayerMotionShiftSet(temp_r30, lbl_1_bss_52[temp_r30][0], 0.0f, 5.0f, 0); + HuAudPlayerVoicePlay(temp_r30, 0x128); + for (i = 0; i < 65; i++) { + BoardModelPosGet(lbl_1_bss_FA, &sp14); + temp_f28 = sqrtf((sp20.x - sp14.x) * (sp20.x - sp14.x) + (sp20.z - sp14.z) * (sp20.z - sp14.z)); + if (temp_f28 <= 200.0f) { + goto block_A; + } + HuPrcVSleep(); + } + BoardPlayerMotionShiftSet(temp_r30, 1, 0.0f, 5.0f, 0); + BoardModelPosGet(lbl_1_bss_FA, &sp14); + temp_f28 = sqrtf((sp20.x - sp14.x) * (sp20.x - sp14.x) + (sp20.z - sp14.z) * (sp20.z - sp14.z)); + if (temp_f28 > 200.0f) { + HuPrcVSleep(); + } +block_A: + lbl_1_bss_B2[temp_r30] = 2; + BoardPlayerMotionStart(temp_r30, lbl_1_bss_52[temp_r30][2], 0x40000001); + temp_f28 = 20.0f; + omVibrate(temp_r30, 12, 4, 2); + while (TRUE) { + sp20.y += temp_f28; + BoardPlayerPosSetV(temp_r30, &sp20); + if (sp20.y >= 600.0f) { + break; + } + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r30, lbl_1_bss_52[temp_r30][1], 0x40000001); + for (i = 0; i < 4; i++) { + var_r29 = fn_1_2FBC(i); + if (var_r29->unk08 == -1) { + break; + } + } + var_r29->unk08 = temp_r30; + BoardPlayerRotYSet(temp_r30, BoardModelRotYGet(var_r29->unk04)); + for (i = 0; i < 4; i++) { + HuPrcSetStat(lbl_1_bss_E4[i], 1); + } + for (i = 0; i < 4; i++) { + if (lbl_1_bss_D4[i] && i != temp_r30) { + HuPrcSetStat(lbl_1_bss_D4[i], 1); + } + } + HuPrcSetStat(lbl_1_bss_48, 1); + BoardWinCreate(0, MAKE_MESSID(32, 2), -1); + BoardWinInsertMesSet(GWPlayer[temp_r30].character, 0); + BoardWinWait(); + BoardWinKill(); + for (i = 0; i < 4; i++) { + HuPrcResetStat(lbl_1_bss_E4[i], 1); + } + for (i = 0; i < 4; i++) { + if (lbl_1_bss_D4[i] && i != temp_r30) { + HuPrcResetStat(lbl_1_bss_D4[i], 1); + } + } + HuPrcResetStat(lbl_1_bss_48, 1); + lbl_1_bss_D4[temp_r30] = NULL; + HuPrcEnd(); +} + +static void fn_1_5018(void) { + Vec sp18; + Vec spC; + float var_f29; + Process *temp_r3; + s32 i; + + BoardModelPosGet(lbl_1_bss_FA, &spC); + for (i = 0; i < lbl_1_bss_C2; i++) { + BoardPlayerPosGet(lbl_1_bss_BA[i], &sp18); + var_f29 = sqrtf((sp18.x - spC.x) * (sp18.x - spC.x) + (sp18.z - spC.z) * (sp18.z - spC.z)); + if (var_f29 < 900.0f && lbl_1_bss_B2[lbl_1_bss_BA[i]] == 0) { + temp_r3 = HuPrcChildCreate(fn_1_4848, 0x2003, 0x2000, 0, boardMainProc); + lbl_1_bss_D4[lbl_1_bss_BA[i]] = temp_r3; + temp_r3->user_data = (u8*) lbl_1_bss_BA[i]; + lbl_1_bss_B2[lbl_1_bss_BA[i]] = 1; + } + } +} + +static void fn_1_52A0(s16 arg0, Vec *arg1) { + Vec sp40[4]; + Vec sp10[4]; + BssE4Data *var_r30; + BoardSpace *var_r29; + BoardSpace *var_r28; + s16 sp8[4]; + s32 var_r27; + s32 i; + + OSReport("Landing Pos Get\n"); + lbl_1_bss_B0 = -1; + var_r29 = BoardSpaceGet(0, arg0); + for (i = 0; i < var_r29->link_cnt; i++) { + var_r28 = BoardSpaceGet(0, var_r29->link[i]); + if (var_r28->flag & 2) { + lbl_1_bss_B0 = var_r29->link[i]; + break; + } + } + if (lbl_1_bss_B0 == -1) { + i = BoardSpaceLinkTargetListGet(0, arg0, sp8); + for (i--; i >= 0; i--) { + var_r28 = BoardSpaceGet(0, sp8[i]); + if (var_r28->flag & 2) { + lbl_1_bss_B0 = sp8[i]; + break; + } + } + } + if (lbl_1_bss_B0 == -1) { + OSReport("\x92\x85\x92\x6E\x92\x6E\x93_\x82\xAA\x96\xB3\x82\xA2\n"); + while (TRUE) { + HuPrcVSleep(); + } + } + var_r27 = 0; + for (i = 0; i < 4; i++) { + BoardPlayerPosGet(i, &sp40[i]); + BoardPlayerRotGet(i, &sp10[i]); + sp8[i] = GWPlayer[i].space_curr; + if (lbl_1_bss_B0 == sp8[i]) { + var_r27 += 1; + } + } + for (i = 0; i < 4; i++) { + var_r30 = fn_1_2FBC(i); + if (var_r30->unk08 != -1 && var_r30->unk08 != GWSystem.player_curr) { + BoardSpaceCornerPosGet(lbl_1_bss_B0, var_r27++, &arg1[var_r30->unk08]); + } + } + for (i = 0; i < 4; i++) { + BoardPlayerPosSetV(i, &sp40[i]); + BoardPlayerRotSetV(i, &sp10[i]); + GWPlayer[i].space_curr = sp8[i]; + } + BoardSpacePosGet(0, lbl_1_bss_B0, &arg1[GWSystem.player_curr]); +} + +static void fn_1_55A0(void) { + lbl_1_bss_48 = NULL; +} + +void fn_1_55B4(void) { + s32 sp8; + + sp8 = GWSystem.player_curr; + lbl_1_bss_48 = HuPrcChildCreate(fn_1_20EC, 0x2004, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_48, fn_1_55A0); + while (lbl_1_bss_48) { + HuPrcVSleep(); + } +} + +static void fn_1_5648(void) { + ParticleData *var_r30; + s32 i; + + lbl_1_bss_4C = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_W04, 6)); + for (i = 0; i < 4; i++) { + lbl_1_bss_C4[i] = omAddObjEx(boardObjMan, 0x101, 1, 0, -1, fn_1_59C4); + lbl_1_bss_C4[i]->model[0] = Hu3DParticleCreate(lbl_1_bss_4C, 100); + Hu3DParticleColSet(lbl_1_bss_C4[i]->model[0], 0x40, 0xD2, 0xFF); + Hu3DParticleScaleSet(lbl_1_bss_C4[i]->model[0], 5.0f); + Hu3DParticleHookSet(lbl_1_bss_C4[i]->model[0], fn_1_5A2C); + Hu3DParticleBlendModeSet(lbl_1_bss_C4[i]->model[0], 1); + Hu3DModelAttrSet(lbl_1_bss_C4[i]->model[0], 1); + var_r30 = Hu3DData[lbl_1_bss_C4[i]->model[0]].unk_120; + var_r30->unk_1C = lbl_1_bss_C4[i]; + } +} + +static void fn_1_5828(void) { + s32 i; + + for (i = 0; i < 4; i++) { + Hu3DModelKill(lbl_1_bss_C4[i]->model[0]); + omDelObjEx(boardObjMan, lbl_1_bss_C4[i]); + } +} + +static s16 fn_1_58A4(Vec *arg0) { + s16 i; + + for (i = 0; i < 4; i++) { + if (lbl_1_bss_C4[i]->work[0] == 0) { + lbl_1_bss_C4[i]->work[0] = 1; + lbl_1_bss_C4[i]->trans.x = arg0->x; + lbl_1_bss_C4[i]->trans.y = arg0->y; + lbl_1_bss_C4[i]->trans.z = arg0->z; + return i; + } + } + return -1; +} + +static void fn_1_5980(s16 arg0) { + lbl_1_bss_C4[arg0]->work[1] = 1; + lbl_1_bss_C4[arg0]->work[2] = 0; +} + +static void fn_1_59C4(omObjData *arg0) { + if (arg0->work[0] != 0) { + Hu3DModelAttrReset(arg0->model[0], 1); + } + if (arg0->work[2] != 0) { + arg0->work[0] = 0; + Hu3DModelAttrSet(arg0->model[0], 1); + } +} + +static void fn_1_5A2C(ModelData *model, ParticleData *particle, Mtx matrix) { + s32 var_r26; + s32 i; + s32 j; + HsfanimStruct01 *var_r31; + UnkParticleDataStruct *temp_r27; + + temp_r27 = particle->unk_1C; + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + var_r31->unk08.z = 0.0f; + var_r31->unk2C = 0.0f; + } + } + if (temp_r27->unk50 == 0) { + for (i = 0; i < 3; i++) { + var_r31 = particle->unk_48; + for (j = 0; j < particle->unk_30; j++, var_r31++) { + if (var_r31->unk08.z == 0.0f) { + break; + } + } + if (j != particle->unk_30) { + var_r31->unk08.x = 0.003921569f * (frand() & 0xFF) * 360.0f; + var_r31->unk08.y = 1.0f + 0.003921569f * (frand() & 0xFF) * 1.5f; + var_r31->unk08.z = 240.0f; + var_r31->unk40.r = 0x40; + var_r31->unk40.g = 0xD2; + var_r31->unk40.b = 0xFF; + var_r31->unk20 = 2.0f + 0.003921569f * (frand() & 0xFF) * 8.0f; + var_r31->unk24 = 2.0f + 0.003921569f * (frand() & 0xFF) * 6.0f; + var_r31->unk28 = 1.0f + 0.003921569f * (frand() & 0xFF) * 3.0f; + var_r31->unk34.x = -100.0f + 0.003921569f * (frand() & 0xFF) * 200.0f; + var_r31->unk34.y = 0.003921569f * (frand() & 0xFF) * 10.0f; + var_r31->unk34.z = -100.0f + 0.003921569f * (frand() & 0xFF) * 200.0f; + var_r31->unk2C = 7.0f + 0.003921569f * (frand() & 0xFF) * 3.0f; + } + } + } + var_r31 = particle->unk_48; + var_r26 = 0; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + if (var_r31->unk08.z != 0.0f) { + var_r31->unk34.x += var_r31->unk28 * sin(var_r31->unk08.x * M_PI / 180.0); + var_r31->unk34.y += var_r31->unk08.y; + var_r31->unk34.z += var_r31->unk28 * cos(var_r31->unk08.x * M_PI / 180.0); + var_r31->unk08.x += var_r31->unk24 * sin(var_r31->unk08.x * M_PI / 180.0); + if (var_r31->unk08.x >= 360.0f) { + var_r31->unk08.x -= 360.0f; + } + var_r31->unk40.a = var_r31->unk08.z; + var_r31->unk08.z -= var_r31->unk20; + if (var_r31->unk08.z <= 0.0f) { + var_r31->unk08.z = 0.0f; + } + } else { + var_r26++; + } + } + if (var_r26 == particle->unk_30) { + temp_r27->unk54 = 1; + } +} diff --git a/src/REL/w04Dll/bridge.c b/src/REL/w04Dll/bridge.c new file mode 100755 index 00000000..92618900 --- /dev/null +++ b/src/REL/w04Dll/bridge.c @@ -0,0 +1,297 @@ +#include "REL/w04Dll.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "game/memory.h" +#include "game/objsub.h" +#include "game/window.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "math.h" + +static void fn_1_17B4(s16 arg0, s16 arg1); +static void fn_1_191C(void); +static void fn_1_1B98(s16 arg0); +static void fn_1_1C2C(void); +static void fn_1_1E60(void); +static void fn_1_2008(void); + +static Process *lbl_1_bss_3C[3]; +Process *lbl_1_bss_38; + +static s32 lbl_1_data_298[] = { + DATA_MAKE_NUM(DATADIR_W04, 32), + -1 +}; + +void fn_1_12FC(void) { + Vec sp14; + Vec sp8; + s16 *temp_r3; + s32 var_r29; + s32 i; + + sp8.x = sp8.y = sp8.z = 1.5f; + for (i = 0; i < 3; i++) { + lbl_1_bss_3C[i] = HuPrcChildCreate(fn_1_1E60, 0x2003, 0x1000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_3C[i], fn_1_2008); + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, 5 * sizeof(s16), MEMORY_DEFAULT_NUM); + lbl_1_bss_3C[i]->user_data = temp_r3; + temp_r3[0] = i; + temp_r3[1] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 31), lbl_1_data_298, 1); + BoardModelScaleSetV(temp_r3[1], &sp8); + temp_r3[2] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 33), NULL, 1); + BoardModelAttrSet(temp_r3[2], 0x40000001); + BoardModelHookSet(temp_r3[1], "itemhook_R", temp_r3[2]); + BoardModelMotionStart(temp_r3[1], 1, 0x40000001); + var_r29 = (0x8000 >> i); + var_r29 |= 0x1000; + temp_r3[3] = BoardSpaceFlagSearch(0, var_r29); + var_r29 = (0x8000 >> i); + var_r29 |= 0x800; + temp_r3[4] = BoardSpaceFlagSearch(0, var_r29); + BoardSpacePosGet(0, temp_r3[3], &sp14); + BoardModelPosSetV(temp_r3[1], &sp14); + } + sp8.x = sp8.y = sp8.z = 2.0f; + BoardModelScaleSetV(lbl_1_bss_14[11], &sp8); + fn_1_1C2C(); + if (lbl_1_bss_0[0] & 1) { + BoardModelMotionStartEndSet(lbl_1_bss_14[5], 0, 180); + BoardModelMotionTimeSet(lbl_1_bss_14[5], 108.0f); + fn_1_17B4(0, 1); + BoardModelAttrSet(lbl_1_bss_14[5], 0x40000002); + return; + } + BoardModelAttrReset(lbl_1_bss_14[5], 0x40000002); + BoardModelMotionStartEndSet(lbl_1_bss_14[5], 0, 60); + BoardModelMotionTimeSet(lbl_1_bss_14[5], 0.0f); + fn_1_17B4(1, 1); +} + +void fn_1_15C8(void) { + s32 i; + + for (i = 0; i < 3; i++) { + HuPrcKill(lbl_1_bss_3C[i]); + } +} + +static s32 lbl_1_data_2AC[8] = { + DATA_MAKE_NUM(DATADIR_MARIOMOT, 28), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 28), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 28), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 28), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 28), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 28), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 28), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 28) +}; + +void fn_1_1618(void) { + s32 temp_r31; + s16 temp_r30; + + temp_r31 = GWSystem.player_curr; + temp_r30 = BoardPlayerMotionCreate(temp_r31, lbl_1_data_2AC[GWPlayer[temp_r31].character]); + BoardDiceDigit2DShowSet(0); + BoardPlayerMotBlendSet(temp_r31, 180, 15); + BoardCameraViewSet(2); + while (!BoardPlayerMotBlendCheck(temp_r31)) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + *lbl_1_bss_0 ^= 1; + fn_1_191C(); + fn_1_1C2C(); + HuAudPlayerVoicePlay(temp_r31, 0x128); + BoardPlayerMotionStart(temp_r31, temp_r30, 0); + while (!BoardPlayerMotionEndCheck(temp_r31)) { + HuPrcVSleep(); + } + HuPrcSleep(30); + if (!(*lbl_1_bss_0 & 1)) { + BoardWinCreate(2, MAKE_MESSID(32, 24), 11); + BoardWinWait(); + BoardWinKill(); + } + BoardPlayerMotionShiftSet(temp_r31, 1, 0.0f, 10.0f, 0x40000001); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + BoardDiceDigit2DShowSet(1); + BoardPlayerMotionKill(temp_r31, temp_r30); + HuPrcKill(NULL); + while (TRUE) { + HuPrcVSleep(); + } +} + +static void fn_1_17B4(s16 arg0, s16 arg1) { + float var_f30; + float var_f31; + s32 i; + + if (arg0 != 0) { + var_f31 = 0.0f; + var_f30 = 255.0f / arg1; + } else { + var_f31 = 255.0f; + var_f30 = -255.0f / arg1; + } + for (i = 0; i < arg1; i++) { + BoardModelAlphaSet(lbl_1_bss_14[11], var_f31); + var_f31 += var_f30; + HuPrcVSleep(); + } + if (arg0 != 0) { + BoardModelAlphaSet(lbl_1_bss_14[11], 0xFF); + } else { + BoardModelAlphaSet(lbl_1_bss_14[11], 0); + } +} + +static void fn_1_191C(void) { + float var_f31; + float temp_f29; + float var_f30; + float temp_f28; + s32 var_r31; + s32 var_r30; + + HuAudFXPlay(0x4B); + if (*lbl_1_bss_0 & 1) { + BoardWinCreate(2, MAKE_MESSID(32, 23), 11); + BoardWinWait(); + BoardWinKill(); + omVibrate(GWSystem.player_curr, 12, 6, 6); + HuAudFXPlay(0x45E); + BoardModelMotionStartEndSet(lbl_1_bss_14[5], 0, 180); + BoardModelMotionTimeSet(lbl_1_bss_14[5], 59.0f); + var_f31 = 255.0f; + temp_f29 = -5.1f; + for (var_r31 = 0; var_r31 < 50; var_r31++) { + BoardModelAlphaSet(lbl_1_bss_14[11], var_f31); + var_f31 += temp_f29; + HuPrcVSleep(); + } + BoardModelAlphaSet(lbl_1_bss_14[11], 0); + BoardModelAttrSet(lbl_1_bss_14[5], 0x40000002); + } else { + omVibrate(GWSystem.player_curr, 12, 6, 6); + HuAudFXPlay(0x45D); + BoardModelAttrReset(lbl_1_bss_14[5], 0x40000002); + BoardModelMotionStartEndSet(lbl_1_bss_14[5], 0, 180); + BoardModelMotionTimeSet(lbl_1_bss_14[5], 110.0f); + var_f30 = 0.0f; + temp_f28 = 3.642857f; + for (var_r30 = 0; var_r30 < 70; var_r30++) { + BoardModelAlphaSet(lbl_1_bss_14[11], var_f30); + var_f30 += temp_f28; + HuPrcVSleep(); + } + BoardModelAlphaSet(lbl_1_bss_14[11], 0xFF); + BoardModelMotionStartEndSet(lbl_1_bss_14[5], 0, 60); + } +} + +static void fn_1_1B98(s16 arg0) { + BoardSpace *temp_r3; + s32 i; + + for (i = 0; i < BoardSpaceCountGet(0); i++) { + temp_r3 = BoardSpaceGet(0, i + 1); + if (temp_r3->flag & 0x20) { + if (arg0 != 0) { + temp_r3->flag |= 0x04000000; + } else { + temp_r3->flag &= ~0x04000000; + } + } + } +} + +static void fn_1_1C2C(void) { + s16 *var_r28; + s32 i; + + if (*lbl_1_bss_0 == 0) { + BoardModelMotionStartEndSet(lbl_1_bss_14[3], 0, 80); + BoardModelMotionTimeSet(lbl_1_bss_14[3], 0.0f); + BoardModelVisibilitySet(lbl_1_bss_14[0], 1); + BoardModelVisibilitySet(lbl_1_bss_14[1], 1); + BoardModelVisibilitySet(lbl_1_bss_14[2], 1); + fn_1_1B98(0); + for (i = 0; i < 3; i++) { + var_r28 = lbl_1_bss_3C[i]->user_data; + BoardModelMotionStartEndSet(var_r28[2], 0, 20); + } + } else { + BoardModelMotionStartEndSet(lbl_1_bss_14[3], 100, 100); + BoardModelMotionTimeSet(lbl_1_bss_14[3], 100.0f); + BoardModelVisibilitySet(lbl_1_bss_14[0], 0); + BoardModelVisibilitySet(lbl_1_bss_14[1], 0); + BoardModelVisibilitySet(lbl_1_bss_14[2], 0); + fn_1_1B98(1); + for (i = 0; i < 3; i++) { + var_r28 = lbl_1_bss_3C[i]->user_data; + BoardModelMotionStartEndSet(var_r28[2], 25, 25); + } + } +} + +static void fn_1_1E60(void) { + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f31; + s16 *temp_r31; + s16 var_r29; + s16 var_r28; + s16 i; + + temp_r31 = HuPrcCurrentGet()->user_data; + var_r29 = temp_r31[3]; + var_r28 = temp_r31[4]; + while (TRUE) { + BoardSpacePosGet(0, var_r29, &sp14); + BoardSpacePosGet(0, var_r28, &sp8); + PSVECSubtract(&sp8, &sp14, &sp20); + PSVECScale(&sp20, &sp20, 0.008333334f); + temp_f31 = 180.0 * (atan2(sp8.x - sp14.x, sp8.z - sp14.z) / M_PI); + BoardModelPosGet(temp_r31[1], &sp14); + while (fn_1_1130(temp_r31[1], temp_f31, 2.5f) == 0) { + if (*lbl_1_bss_0 == 0) { + BoardModelAlphaSet(temp_r31[1], 0xFF); + } else { + BoardModelAlphaSet(temp_r31[1], 0); + } + HuPrcVSleep(); + } + for (i = 0; i < 120; i++) { + if (*lbl_1_bss_0 == 0) { + BoardModelAlphaSet(temp_r31[1], 0xFF); + } else { + BoardModelAlphaSet(temp_r31[1], 0); + } + PSVECAdd(&sp14, &sp20, &sp14); + BoardModelPosSetV(temp_r31[1], &sp14); + HuPrcVSleep(); + } + i = var_r29; + var_r29 = var_r28; + var_r28 = i; + } +} + +static void fn_1_2008(void) { + s16 *temp_r31; + + temp_r31 = HuPrcCurrentGet()->user_data; + BoardModelKill(temp_r31[1]); + HuMemDirectFree(temp_r31); +} diff --git a/src/REL/w04Dll/main.c b/src/REL/w04Dll/main.c new file mode 100755 index 00000000..ec429ece --- /dev/null +++ b/src/REL/w04Dll/main.c @@ -0,0 +1,445 @@ +#include "REL/w04Dll.h" +#include "REL/board_executor.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "game/object.h" +#include "game/window.h" +#include "game/board/boo_house.h" +#include "game/board/com.h" +#include "game/board/lottery.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/shop.h" +#include "game/board/space.h" +#include "game/board/star.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "math.h" + +static void fn_1_750(void); +static void fn_1_794(void); +static s32 fn_1_798(void); +static s32 fn_1_7FC(void); +static void fn_1_930(void); +static void fn_1_954(void); +static void fn_1_958(void); +static void fn_1_CF8(void); +static void fn_1_D30(void); +static void fn_1_DB0(void); +static s32 fn_1_103C(void); + +s16 lbl_1_bss_14[MAPOBJ_MAX]; + +BoardMapObject lbl_1_data_0[MAPOBJ_MAX] = { + { { 750.0f, 0.0f, 1500.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 5) }, + { { -1500.0f, 0.0f, 150.0f }, { 0.0f, 89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 5) }, + { { 1200.0f, 0.0f, -1650.0f }, { 0.0f, -89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 5) }, + { { -1950.0f, 0.0f, -2100.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 4) }, + { { 2100.0f, 0.0f, -2100.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 18) }, + { { -150.0f, 0.0f, -150.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 23) }, + { { 3000.0f, 0.0f, -600.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 12) }, + { { -1500.0f, 0.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 15) }, + { { -1950.0f, 0.0f, -2000.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 34) }, + { { -1350.0f, 50.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 34) }, + { { 2750.0f, 0.0f, -600.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 34) }, + { { -150.0f, 0.0f, -100.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 29) }, + { { 2850.0f, 0.0f, -1500.0f }, { 0.0f, -89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 17) }, + { { -3150.0f, 0.0f, 300.0f }, { 0.0f, 89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 17) }, + { { 2850.0f, 0.0f, 0.000003f }, { 0.0f, -89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 17) }, + { { 900.0f, 0.0f, 2250.0f }, { 0.0f, 180.00001f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 17) } +}; + +static s32 *lbl_1_bss_10; +static s16 lbl_1_bss_8[4]; +static Process *lbl_1_bss_4; +s8 *lbl_1_bss_0; + +static s16 lbl_1_data_280 = -1; +static s16 lbl_1_data_282 = -1; +static s16 lbl_1_data_284 = -1; +static s16 lbl_1_data_286 = -1; + +static s32 lbl_1_data_288[] = { + DATA_MAKE_NUM(DATADIR_W04, 8), + -1 +}; + +static s32 lbl_1_data_290[] = { + DATA_MAKE_NUM(DATADIR_BGUEST, 24), + -1 +}; + +void BoardCreate(void) { + BoardMapObject *temp_r30; + s32 sp8; + s32 i; + + omDBGMenuButton = 1; + sp8 = GWBoardGet(); + lbl_1_bss_0 = (s8*) GWSystem.board_data; + BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W04, 0)); + lbl_1_data_280 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 1), NULL, 0); + fn_8006DDE8(lbl_1_data_280, -1.0f); + BoardModelPosSet(lbl_1_data_280, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_280, 0, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_data_280, 1.0f); + lbl_1_data_282 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 2), NULL, 0); + fn_8006DDE8(lbl_1_data_282, -1.0f); + BoardModelPosSet(lbl_1_data_282, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_282, 0, 0x40000001); + lbl_1_data_284 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 7), lbl_1_data_288, 0); + BoardModelPosSet(lbl_1_data_284, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_284, 1, 0x40000001); + lbl_1_data_286 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 18), lbl_1_data_290, 0); + BoardModelMotionStart(lbl_1_data_286, 1, 0x40000001); + BoardLightHookSet(fn_1_750, fn_1_794); + for (i = 0; i < 16; i++) { + temp_r30 = &lbl_1_data_0[i]; + if (temp_r30->data_num != -1) { + if (i == 8 || i == 9 || i == 10 || i == 11) { + lbl_1_bss_10 = lbl_1_data_290; + } else { + lbl_1_bss_10 = NULL; + } + lbl_1_bss_14[i] = BoardModelCreate(temp_r30->data_num, lbl_1_bss_10, 0); + BoardModelPosSetV(lbl_1_bss_14[i], &temp_r30->pos); + BoardModelRotSetV(lbl_1_bss_14[i], &temp_r30->rot); + BoardModelScaleSetV(lbl_1_bss_14[i], &temp_r30->scale); + BoardModelVisibilitySet(lbl_1_bss_14[i], 1); + if (lbl_1_bss_10 != NULL) { + BoardModelMotionStart(lbl_1_bss_14[i], 1, 0x40000001); + } + } + } + BoardModelAlphaSet(lbl_1_bss_14[8], 0); + BoardModelVisibilitySet(lbl_1_bss_14[8], 0); + BoardModelMotionStartEndSet(lbl_1_bss_14[5], 0, 60); + BoardModelAttrSet(lbl_1_bss_14[5], 0x40000001); + BoardModelAttrSet(lbl_1_bss_14[4], 0x40000001); + fn_1_930(); + fn_1_12FC(); + fn_1_6024(); + BoardModelAttrSet(lbl_1_bss_14[0], 0x40000001); + BoardModelAttrSet(lbl_1_bss_14[1], 0x40000001); + BoardModelAttrSet(lbl_1_bss_14[2], 0x40000001); + BoardModelAttrSet(lbl_1_bss_14[3], 0x40000001); + BoardSpaceWalkEventFuncSet(fn_1_7FC); + BoardSpaceWalkMiniEventFuncSet(fn_1_103C); + BoardSpaceLandEventFuncSet(fn_1_798); + BoardStarHostSet(lbl_1_data_284); + BoardBooHouseHostSet(lbl_1_data_286); + BoardShopHostSet(lbl_1_data_286); + BoardLotteryHostSet(lbl_1_data_286); + BoardJunctionMaskSet(0x100); + BoardJunctionMaskSet(0x40); +} + +void BoardDestroy(void) { + s32 i; + + fn_1_15C8(); + for (i = 0; i < MAPOBJ_MAX; i++) { + if (lbl_1_bss_14[i] != 0) { + BoardModelKill(lbl_1_bss_14[i]); + lbl_1_bss_14[i] = 0; + } + } + if (lbl_1_data_286 != -1) { + BoardModelKill(lbl_1_data_286); + lbl_1_data_286 = -1; + } + if (lbl_1_data_284 != -1) { + BoardModelKill(lbl_1_data_284); + lbl_1_data_284 = -1; + } + if (lbl_1_data_280 != -1) { + BoardModelKill(lbl_1_data_280); + lbl_1_data_280 = -1; + } + if (lbl_1_data_282 != -1) { + BoardModelKill(lbl_1_data_282); + lbl_1_data_282 = -1; + } + BoardSpaceDestroy(); +} + +static void fn_1_750(void) { + s16 var_r31; + + var_r31 = BoardModelIDGet(lbl_1_data_280); + Hu3DModelLightInfoSet(var_r31, 1); +} + +static void fn_1_794(void) { +} + +static s32 fn_1_798(void) { + s32 var_r31; + s32 var_r30; + s32 sp8; + + var_r31 = GWSystem.player_curr; + var_r30 = GWPlayer[var_r31].space_curr; + sp8 = BoardSpaceFlagGet(0, var_r30); + fn_1_9EBC(); +} + +static s32 fn_1_7FC(void) { + s32 temp_r31; + BoardSpace *temp_r3; + + temp_r31 = GWSystem.player_curr; + if (BoardPlayerSizeGet(temp_r31) == 2) { + return 0; + } + if (GWPlayer[temp_r31].bowser_suit) { + return 0; + } + temp_r3 = BoardSpaceGet(0, GWPlayer[temp_r31].space_curr); + if (temp_r3->flag & 0x80) { + fn_1_2058(); + return 1; + } + if (temp_r3->flag & 0x100) { + if (lbl_1_bss_0[0] & 1) { + fn_1_55B4(); + } else { + BoardDiceDigit2DShowSet(0); + BoardPlayerIdleSet(temp_r31); + BoardWinCreate(0, MAKE_MESSID(32, 25), -1); + BoardWinWait(); + BoardWinKill(); + BoardDiceDigit2DShowSet(1); + } + return 1; + } + return 0; +} + +static void fn_1_930(void) { + fn_1_A0F8(); + fn_1_C7A0(); +} + +static void fn_1_954(void) { +} + +static void fn_1_958(void) { + Vec sp8; + u32 temp_r3; + s32 temp_r27; + s32 temp_r31; + s32 var_r26; + s32 var_r30; + s32 var_r29; + + temp_r31 = GWSystem.player_curr; + if (BoardPlayerItemCount(temp_r31) == 3) { + BoardWinCreate(2, MAKE_MESSID(32, 12), 3); + BoardWinWait(); + BoardWinKill(); + HuPrcEnd(); + } + lbl_1_bss_8[0] = 0; + var_r30 = 1; + while (var_r30 < 3) { + lbl_1_bss_8[var_r30] = frandmod(14); + if (lbl_1_bss_8[var_r30] != 10 && lbl_1_bss_8[var_r30] != 13) { + for (var_r29 = 0; var_r29 < var_r30; var_r29++) { + if (lbl_1_bss_8[var_r30] == lbl_1_bss_8[var_r29]) { + lbl_1_bss_8[var_r30] = -1; + } + } + if (lbl_1_bss_8[var_r30] != -1) { + var_r30++; + } + } + } + fn_1_BB00(lbl_1_bss_8); + BoardWinCreateChoice(2, MAKE_MESSID(32, 13), 3, 0); + if (GWPlayer[temp_r31].com) { + if (BoardComPreferItemCheck(temp_r31, lbl_1_bss_8[0], lbl_1_bss_8[1], lbl_1_bss_8[2]) != -1) { + BoardComKeySetLeft(); + } else { + BoardComKeySetRight(); + } + } + BoardWinWait(); + BoardWinKill(); + temp_r3 = BoardWinChoiceGet(); + if (temp_r3 == 1 || temp_r3 == -1) { + BoardWinCreate(2, MAKE_MESSID(32, 14), 3); + BoardWinWait(); + BoardWinKill(); + BoardMGExit(); + fn_1_C2BC(); + while (BoardMGDoneFlagGet() != 1) { + HuPrcVSleep(); + } + BoardMGDoneFlagSet(0); + fn_1_BA7C(); + HuPrcEnd(); + } + temp_r27 = GWPlayer[temp_r31].space_curr; + var_r26 = BoardSpaceLinkFlagSearch(0, temp_r27, 0x02000000); + BoardPlayerMoveBetween(temp_r31, temp_r27, var_r26); + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r31, 1, 0x40000001); + BoardPlayerPosGet(temp_r31, &sp8); + sp8.y += 5.0f; + BoardPlayerPosSetV(temp_r31, &sp8); + BoardCameraViewSet(2); + BoardPlayerMotBlendSet(temp_r31, 180, 15); + while (!BoardPlayerMotBlendCheck(temp_r31)) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + fn_1_A1F0(); + while (BoardEventFlagGet() != 0) { + HuPrcVSleep(); + } + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r31, 1, 0x40000001); + HuPrcEnd(); +} + +static void fn_1_CF8(void) { + BoardWinKill(); + CharModelDataClose(-1); + lbl_1_bss_4 = NULL; +} + +static void fn_1_D30(void) { + lbl_1_bss_4 = HuPrcChildCreate(fn_1_958, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_4, fn_1_CF8); + while (lbl_1_bss_4) { + HuPrcVSleep(); + } +} + +static void fn_1_DB0(void) { + Vec sp20; + Vec sp14; + Vec sp8; + s32 temp_r31; + s32 temp_r3; + s32 temp_r29; + s32 temp_r3_2; + + temp_r31 = GWSystem.player_curr; + BoardWinCreateChoice(2, MAKE_MESSID(32, 17), 3, 0); + if (GWPlayer[temp_r31].com) { + if (frand() & 1) { + BoardComKeySetLeft(); + } else { + BoardComKeySetRight(); + } + } + BoardWinWait(); + BoardWinKill(); + temp_r3 = BoardWinChoiceGet(); + if (temp_r3 == 1 || temp_r3 == -1) { + BoardWinCreate(2, MAKE_MESSID(32, 18), 3); + BoardWinWait(); + BoardWinKill(); + BoardMGExit(); + while (BoardMGDoneFlagGet() != 1) { + HuPrcVSleep(); + } + BoardMGDoneFlagSet(0); + return; + } + sp20.x = -45.0f; + sp20.y = sp20.z = 0.0f; + sp14.y = 50.0f; + sp14.x = sp14.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[7], &sp20, &sp14, 1200.0f, 25.0f, 21); + temp_r29 = GWPlayer[temp_r31].space_curr; + temp_r3_2 = BoardSpaceLinkFlagSearch(0, temp_r29, 0x02000000); + BoardSpacePosGet(0, temp_r3_2, &sp8); + BoardPlayerMoveBetween(temp_r31, temp_r29, temp_r3_2); + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r31, 1, 0x40000001); + fn_1_C7D4(); + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + while (BoardEventFlagGet() != 0) { + HuPrcVSleep(); + } + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r31, 1, 0x40000001); +} + +static s32 fn_1_103C(void) { + s16 var_r30; + u32 temp_r31; + + var_r30 = GWPlayer[GWSystem.player_curr].space_curr; + temp_r31 = BoardSpaceFlagGet(0, var_r30) & 0x600000; + BoardDiceDigit2DShowSet(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); + while (lbl_1_bss_4) { + HuPrcVSleep(); + } + } else if (temp_r31 & 0x400000) { + fn_1_DB0(); + } + BoardDiceDigit2DShowSet(1); +} + +s32 fn_1_1130(s16 arg0, float arg1, float arg2) { + float var_f29; + float var_f31; + s32 var_r31; + + var_r31 = 0; + var_f31 = BoardModelRotYGet(arg0); + arg1 = fmod(arg1, 360.0); + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (arg1 < 0.0f) { + arg1 += 360.0f; + } + if (var_f31 != arg1) { + var_f29 = arg1 - var_f31; + if (var_f29 < 0.0f) { + var_f29 += 360.0f; + } + if (var_f29 < 180.0f) { + if (var_f29 > arg2) { + var_f31 = var_f31 + arg2; + } else { + var_f31 = arg1; + } + } else if (360.0f - var_f29 > arg2) { + var_f31 = var_f31 - arg2; + } else { + var_f31 = arg1; + } + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + BoardModelRotYSet(arg0, var_f31); + } else { + var_r31 = 1; + } + return var_r31; +} diff --git a/src/game/objsysobj.c b/src/game/objsysobj.c index f58ab4b3..765fd55b 100644 --- a/src/game/objsysobj.c +++ b/src/game/objsysobj.c @@ -15,7 +15,7 @@ Vec CRotM[16]; Vec CenterM[16]; float CZoomM[16]; -omObjData *omDBGMenuButton; +s16 omDBGMenuButton; void omOutView(omObjData *object) {