diff --git a/config/GMPE01_00/rels/w06Dll/symbols.txt b/config/GMPE01_00/rels/w06Dll/symbols.txt index d4839302..5be0a806 100644 --- a/config/GMPE01_00/rels/w06Dll/symbols.txt +++ b/config/GMPE01_00/rels/w06Dll/symbols.txt @@ -14,41 +14,41 @@ fn_1_B5C = .text:0x00000B5C; // type:function size:0x214 scope:local fn_1_D70 = .text:0x00000D70; // type:function size:0x1FC fn_1_F6C = .text:0x00000F6C; // type:function size:0xE8 fn_1_1054 = .text:0x00001054; // type:function size:0x90 -fn_1_10E4 = .text:0x000010E4; // type:function size:0x64 -fn_1_1148 = .text:0x00001148; // type:function size:0x68 -fn_1_11B0 = .text:0x000011B0; // type:function size:0xF0 -fn_1_12A0 = .text:0x000012A0; // type:function size:0x32C -fn_1_15CC = .text:0x000015CC; // type:function size:0x614 -fn_1_1BE0 = .text:0x00001BE0; // type:function size:0xD0 -fn_1_1CB0 = .text:0x00001CB0; // type:function size:0xAC -fn_1_1D5C = .text:0x00001D5C; // type:function size:0xD4 -fn_1_1E30 = .text:0x00001E30; // type:function size:0xD8 -fn_1_1F08 = .text:0x00001F08; // type:function size:0x140 -fn_1_2048 = .text:0x00002048; // type:function size:0x84 -fn_1_20CC = .text:0x000020CC; // type:function size:0xA8 -fn_1_2174 = .text:0x00002174; // type:function size:0x58 -fn_1_21CC = .text:0x000021CC; // type:function size:0x54 -fn_1_2220 = .text:0x00002220; // type:function size:0x21C -fn_1_243C = .text:0x0000243C; // type:function size:0x5E0 -fn_1_2A1C = .text:0x00002A1C; // type:function size:0x144 -fn_1_2B60 = .text:0x00002B60; // type:function size:0xB8 -fn_1_2C18 = .text:0x00002C18; // type:function size:0x178 -fn_1_2D90 = .text:0x00002D90; // type:function size:0x40 -fn_1_2DD0 = .text:0x00002DD0; // type:function size:0x48 -fn_1_2E18 = .text:0x00002E18; // type:function size:0xDC -fn_1_2EF4 = .text:0x00002EF4; // type:function size:0x57C -fn_1_3470 = .text:0x00003470; // type:function size:0xF0 -fn_1_3560 = .text:0x00003560; // type:function size:0x5C -fn_1_35BC = .text:0x000035BC; // type:function size:0x48 -fn_1_3604 = .text:0x00003604; // type:function size:0x94 -fn_1_3698 = .text:0x00003698; // type:function size:0x2DC -fn_1_3974 = .text:0x00003974; // type:function size:0x6FC -fn_1_4070 = .text:0x00004070; // type:function size:0xB4 -fn_1_4124 = .text:0x00004124; // type:function size:0x70 -fn_1_4194 = .text:0x00004194; // type:function size:0x118 -fn_1_42AC = .text:0x000042AC; // type:function size:0x130 -fn_1_43DC = .text:0x000043DC; // type:function size:0x84 -fn_1_4460 = .text:0x00004460; // type:function size:0x418 +fn_1_10E4 = .text:0x000010E4; // type:function size:0x64 scope:local +fn_1_1148 = .text:0x00001148; // type:function size:0x68 scope:local +fn_1_11B0 = .text:0x000011B0; // type:function size:0xF0 scope:local +fn_1_12A0 = .text:0x000012A0; // type:function size:0x32C scope:local +fn_1_15CC = .text:0x000015CC; // type:function size:0x614 scope:local +fn_1_1BE0 = .text:0x00001BE0; // type:function size:0xD0 scope:local +fn_1_1CB0 = .text:0x00001CB0; // type:function size:0xAC scope:local +fn_1_1D5C = .text:0x00001D5C; // type:function size:0xD4 scope:local +fn_1_1E30 = .text:0x00001E30; // type:function size:0xD8 scope:local +fn_1_1F08 = .text:0x00001F08; // type:function size:0x140 scope:local +fn_1_2048 = .text:0x00002048; // type:function size:0x84 scope:local +fn_1_20CC = .text:0x000020CC; // type:function size:0xA8 scope:local +fn_1_2174 = .text:0x00002174; // type:function size:0x58 scope:local +fn_1_21CC = .text:0x000021CC; // type:function size:0x54 scope:local +fn_1_2220 = .text:0x00002220; // type:function size:0x21C scope:local +fn_1_243C = .text:0x0000243C; // type:function size:0x5E0 scope:local +fn_1_2A1C = .text:0x00002A1C; // type:function size:0x144 scope:local +fn_1_2B60 = .text:0x00002B60; // type:function size:0xB8 scope:local +fn_1_2C18 = .text:0x00002C18; // type:function size:0x178 scope:local +fn_1_2D90 = .text:0x00002D90; // type:function size:0x40 scope:local +fn_1_2DD0 = .text:0x00002DD0; // type:function size:0x48 scope:local +fn_1_2E18 = .text:0x00002E18; // type:function size:0xDC scope:local +fn_1_2EF4 = .text:0x00002EF4; // type:function size:0x57C scope:local +fn_1_3470 = .text:0x00003470; // type:function size:0xF0 scope:local +fn_1_3560 = .text:0x00003560; // type:function size:0x5C scope:local +fn_1_35BC = .text:0x000035BC; // type:function size:0x48 scope:local +fn_1_3604 = .text:0x00003604; // type:function size:0x94 scope:local +fn_1_3698 = .text:0x00003698; // type:function size:0x2DC scope:local +fn_1_3974 = .text:0x00003974; // type:function size:0x6FC scope:local +fn_1_4070 = .text:0x00004070; // type:function size:0xB4 scope:local +fn_1_4124 = .text:0x00004124; // type:function size:0x70 scope:local +fn_1_4194 = .text:0x00004194; // type:function size:0x118 scope:local +fn_1_42AC = .text:0x000042AC; // type:function size:0x130 scope:local +fn_1_43DC = .text:0x000043DC; // type:function size:0x84 scope:local +fn_1_4460 = .text:0x00004460; // type:function size:0x418 scope:local fn_1_4878 = .text:0x00004878; // type:function size:0x198 fn_1_4A10 = .text:0x00004A10; // type:function size:0x50 fn_1_4A60 = .text:0x00004A60; // type:function size:0xA0 @@ -131,45 +131,45 @@ lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:f lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 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:0x8 data:double -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 data:double -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x2 data:byte -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x3 data:byte -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x6 data:2byte -lbl_1_rodata_9A = .rodata:0x0000009A; // type:object size:0x3 data:byte -lbl_1_rodata_9E = .rodata:0x0000009E; // type:object size:0x6 data:2byte -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:0x4 data:float -lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 data:float -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 data:float -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 data:float -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 data:float +lbl_1_rodata_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:0x8 scope:local data:double +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 scope:local data:double +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:double +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x2 scope:local data:byte +lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x3 scope:local data:byte +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x6 scope:local data:2byte +lbl_1_rodata_9A = .rodata:0x0000009A; // type:object size:0x3 scope:local data:byte +lbl_1_rodata_9E = .rodata:0x0000009E; // type:object size:0x6 scope:local data:2byte +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:0x4 scope:local data:float +lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 scope:local data:float lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x5 lbl_1_rodata_F5 = .rodata:0x000000F5; // type:object size:0x7 lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 data:float @@ -276,13 +276,13 @@ lbl_1_data_F6 = .data:0x000000F6; // type:object size:0x2 scope:local data:2byte lbl_1_data_F8 = .data:0x000000F8; // type:object size:0x8 scope:local lbl_1_data_100 = .data:0x00000100; // type:object size:0x8 scope:local lbl_1_data_108 = .data:0x00000108; // type:object size:0xA0 scope:local -lbl_1_data_1A8 = .data:0x000001A8; // type:object size:0x2 data:2byte -lbl_1_data_1AA = .data:0x000001AA; // type:object size:0x1 data:byte -lbl_1_data_1AD = .data:0x000001AD; // type:object size:0x3 -lbl_1_data_1B0 = .data:0x000001B0; // type:object size:0x2 data:2byte -lbl_1_data_1B4 = .data:0x000001B4; // type:object size:0xC -lbl_1_data_1C0 = .data:0x000001C0; // type:object size:0x5 data:string -lbl_1_data_1C5 = .data:0x000001C5; // type:object size:0xE +lbl_1_data_1A8 = .data:0x000001A8; // type:object size:0x2 scope:local data:2byte +lbl_1_data_1AA = .data:0x000001AA; // type:object size:0x3 scope:local data:byte +lbl_1_data_1AD = .data:0x000001AD; // type:object size:0x3 scope:local +lbl_1_data_1B0 = .data:0x000001B0; // type:object size:0x2 scope:local data:2byte +lbl_1_data_1B4 = .data:0x000001B4; // type:object size:0xC scope:local +lbl_1_data_1C0 = .data:0x000001C0; // type:object size:0x5 scope:local data:string +lbl_1_data_1C5 = .data:0x000001C5; // type:object size:0xE scope:local data:byte lbl_1_data_1D8 = .data:0x000001D8; // type:object size:0x2 data:2byte lbl_1_data_1DA = .data:0x000001DA; // type:object size:0x2 data:2byte lbl_1_data_1DC = .data:0x000001DC; // type:object size:0x2 data:2byte @@ -336,17 +336,17 @@ lbl_1_bss_0 = .bss:0x00000000; // 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:0x4 scope:local data:4byte lbl_1_bss_C = .bss:0x0000000C; // type:object size:0xC data:2byte -lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte -lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x1 data:byte -lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x4 data:4byte -lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x4 data:4byte -lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x4 data:4byte -lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x4 data:4byte -lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x1 data:byte -lbl_1_bss_33 = .bss:0x00000033; // type:object size:0x1 data:byte -lbl_1_bss_34 = .bss:0x00000034; // type:object size:0x2 data:2byte -lbl_1_bss_36 = .bss:0x00000036; // type:object size:0x6 -lbl_1_bss_3C = .bss:0x0000003C; // type:object size:0x6 data:2byte +lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x1 scope:local data:byte +lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x3 scope:local data:byte +lbl_1_bss_33 = .bss:0x00000033; // type:object size:0x1 scope:local data:byte +lbl_1_bss_34 = .bss:0x00000034; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_36 = .bss:0x00000036; // type:object size:0x6 scope:local +lbl_1_bss_3C = .bss:0x0000003C; // type:object size:0x6 scope:local data:2byte 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:0x4 data:4byte diff --git a/configure.py b/configure.py index 92042a2b..a1b33cb7 100644 --- a/configure.py +++ b/configure.py @@ -1139,7 +1139,7 @@ config.libs = [ objects = { Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w06Dll/main.c"), - Object(NonMatching, "REL/w06Dll/mg_item.c"), + Object(Matching, "REL/w06Dll/mg_item.c"), Object(NonMatching, "REL/w06Dll/mg_coin.c"), Object(NonMatching, "REL/w06Dll/fire.c"), Object(NonMatching, "REL/w06Dll/bridge.c"), diff --git a/src/REL/w01Dll/main.c b/src/REL/w01Dll/main.c index 6c7cf52f..96a8cd79 100755 --- a/src/REL/w01Dll/main.c +++ b/src/REL/w01Dll/main.c @@ -2297,7 +2297,7 @@ static void fn_1_918C(BssCData *arg0, omObjData *arg1) { BoardPlayerMtxSet(arg0->unk01, &arg0->unk20); PSVECSubtract(&sp20, &sp14, &sp8); BoardPlayerRotYSet(arg0->unk01, 180.0 * (atan2(-sp8.z, -sp8.x) / M_PI)); - BoardPlayerPosLerpStart(arg0->unk01, &sp14, &sp20, 0x14); + BoardPlayerPosLerpStart(arg0->unk01, &sp14, &sp20, 20); arg0->unk00 = 5; } diff --git a/src/REL/w06Dll/main.c b/src/REL/w06Dll/main.c index ed7eb0a7..fd5e1d78 100755 --- a/src/REL/w06Dll/main.c +++ b/src/REL/w06Dll/main.c @@ -258,7 +258,7 @@ static void fn_1_9C0(void) { for (i = 0; i < 10; i++) { temp_r30->unk01[i] = 0; } - if (!_CheckFlag(0x10010)) { + if (!_CheckFlag(FLAG_ID_MAKE(1, 16))) { if (lbl_1_bss_4 == 0) { HuAudFXPauseAll(1); lbl_1_bss_4 = 1; @@ -294,7 +294,7 @@ static void fn_1_B5C(omObjData *arg0) { BoardCameraDirGet(&sp8); BoardCameraTargetGet(&sp14); sp14.y += 2000.0f; - if (!_CheckFlag(0x10010)) { + if (!_CheckFlag(FLAG_ID_MAKE(1, 16))) { if (lbl_1_bss_4 == 0) { HuAudFXPauseAll(1); lbl_1_bss_4 = 1; @@ -303,7 +303,7 @@ static void fn_1_B5C(omObjData *arg0) { HuAudFXPauseAll(0); lbl_1_bss_4 = 0; } - if (!_CheckFlag(0x1001C)) { + if (!_CheckFlag(FLAG_ID_MAKE(1, 28))) { for (var_r29 = i = 0; i < 10; i++) { if (temp_r30->unk01[i] != 0) { var_r29++; diff --git a/src/REL/w06Dll/mg_item.c b/src/REL/w06Dll/mg_item.c new file mode 100755 index 00000000..b91910c1 --- /dev/null +++ b/src/REL/w06Dll/mg_item.c @@ -0,0 +1,1195 @@ +#include "REL/w06Dll.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfman.h" +#include "game/minigame_seq.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/board/audio.h" +#include "game/board/com.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" + +#define ABS(x) ((x) < 0 ? -(x) : (x)) + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 2; + u8 unk00_field2 : 2; + u8 unk00_field3 : 1; + u8 unk00_field4 : 1; + }; + u8 unk01; + s8 unk02; + s8 unk03; + char unk04[2]; + s16 unk06; + s16 unk08; + char unk0A[2]; + s32 unk0C; +} Data1B4Work; + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 2; + u8 unk00_field2 : 1; + }; + s8 unk01; + s8 unk02; + s8 unk03; +} Bss24Work; + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 3; + u8 unk00_field2 : 1; + u8 unk00_field3 : 1; + }; + s8 unk01[2]; + s8 unk03; + u8 unk04; + char unk05[1]; + s16 unk06; + s16 unk08; + s16 unk0A; +} Bss28Work; + +typedef struct { + struct { + u8 unk00_field0 : 1; + }; + u8 unk01; + u8 unk02; + char unk03[1]; + s16 unk04; +} Bss2CWork; + +static void fn_1_10E4(void); +static void fn_1_1148(void); +static void fn_1_11B0(void); +static s32 fn_1_12A0(s32 arg0); +static void fn_1_15CC(s32 arg0); +static void fn_1_1BE0(s32 arg0, s32 arg1); +static void fn_1_1CB0(s32 arg0); +static void fn_1_1D5C(s32 arg0); +static void fn_1_1E30(s32 arg0); +static void fn_1_1F08(s32 arg0); +static void fn_1_2048(s32 arg0, s32 arg1); +static void fn_1_20CC(s32 arg0); +static s32 fn_1_2174(s32 arg0); +static s16 fn_1_21CC(s32 arg0); +static void fn_1_2220(s32 arg0, s32 arg1, s32 arg2); +static void fn_1_243C(omObjData *arg0); +static s32 fn_1_2A1C(s32 arg0); +static void fn_1_2B60(s32 arg0); +static void fn_1_2C18(void); +static void fn_1_2D90(s32 arg0); +static s32 fn_1_2DD0(void); +static u32 fn_1_2E18(Bss24Work *arg0); +static void fn_1_2EF4(omObjData *arg0); +static void fn_1_3470(void); +static void fn_1_3560(s32 arg0); +static s32 fn_1_35BC(void); +static void fn_1_3604(s32 arg0); +static void fn_1_3698(s8 arg0); +static void fn_1_3974(omObjData *arg0); +static void fn_1_4070(void); +static void fn_1_4124(void); +static void fn_1_4194(omObjData *arg0); +static void fn_1_42AC(s16 arg0); +static void fn_1_43DC(void); +static void fn_1_4460(ModelData *model, ParticleData *particle, Mtx matrix); + +static s16 lbl_1_bss_3C[3]; +static s16 lbl_1_bss_36[3]; +static s16 lbl_1_bss_34; +static s8 lbl_1_bss_33; +static s8 lbl_1_bss_30[3]; +static omObjData *lbl_1_bss_2C; +static omObjData *lbl_1_bss_28; +static omObjData *lbl_1_bss_24; +static AnimData *lbl_1_bss_20; +static s8 lbl_1_bss_1C; +static Process *lbl_1_bss_18; + +static s16 lbl_1_data_1A8 = -1; +static s8 lbl_1_data_1AA[3] = { -1, -1, -1 }; +static s8 lbl_1_data_1AD[3] = { 0, 0, 0 }; +static s16 lbl_1_data_1B0 = -1; +static omObjData *lbl_1_data_1B4[3] = { NULL, NULL, NULL }; + +void fn_1_D70(void) { + Vec sp20; + Vec sp14; + Vec sp8; + s32 i; + + BoardModelPosGet(lbl_1_bss_C[1], &sp20); + sp8.x = sp20.x; + sp8.y = sp20.y + 60.0f; + sp8.z = sp20.z + -50.0f; + BoardModelPosSetV(lbl_1_bss_C[4], &sp8); + for (i = 0; i < 3; i++) { + lbl_1_bss_3C[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 9), NULL, 0); + sp14.x = sp20.x + 150.0f * (i - 1.0f); + sp14.y = sp20.y; + sp14.z = sp20.z + 100.0f; + BoardModelPosSetV(lbl_1_bss_3C[i], &sp14); + BoardModelMotionSpeedSet(lbl_1_bss_3C[i], 0.0f); + lbl_1_data_1AD[i] = 0; + lbl_1_bss_36[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 10), NULL, 0); + BoardModelVisibilitySet(lbl_1_bss_36[i], 0); + BoardModelHookSet(lbl_1_bss_3C[i], "batu", lbl_1_bss_36[i]); + } +} + +void fn_1_F6C(void) { + s32 i; + + for (i = 0; i < 3; i++) { + BoardModelHookReset(lbl_1_bss_3C[i]); + if (lbl_1_bss_3C[i] != -1) { + BoardModelKill(lbl_1_bss_3C[i]); + lbl_1_bss_3C[i] = -1; + } + if (lbl_1_bss_36[i] != -1) { + BoardModelKill(lbl_1_bss_36[i]); + lbl_1_bss_36[i] = -1; + } + } +} + +void fn_1_1054(void) { + BoardDiceDigit2DShowSet(0); + lbl_1_bss_18 = HuPrcChildCreate(fn_1_1148, 0x2003, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_18, fn_1_10E4); + while (lbl_1_bss_18) { + HuPrcVSleep(); + } + BoardDiceDigit2DShowSet(1); +} + +static void fn_1_10E4(void) { + fn_1_43DC(); + if (lbl_1_data_1A8 != -1) { + HuWinKill(lbl_1_data_1A8); + lbl_1_data_1A8 = -1; + } + lbl_1_bss_18 = NULL; +} + +static void fn_1_1148(void) { + s32 temp_r3; + s32 temp_r31; + + temp_r31 = GWSystem.player_curr; + temp_r3 = fn_1_12A0(temp_r31); + if (temp_r3 != 0) { + fn_1_15CC(temp_r31); + } + fn_1_1BE0(temp_r31, temp_r3); + HuPrcEnd(); +} + +static void fn_1_11B0(void) { + float sp8[2]; + float var_f31; + float var_f30; + + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(48, 25)); + var_f31 = -10000.0f; + var_f30 = 352.0f; + lbl_1_data_1A8 = HuWinCreate(var_f31, var_f30, sp8[0], sp8[1], 0); + HuWinBGTPLvlSet(lbl_1_data_1A8, 0.0f); + HuWinMesSpeedSet(lbl_1_data_1A8, 0); + HuWinMesSet(lbl_1_data_1A8, MAKE_MESSID(48, 25)); +} + +static s32 fn_1_12A0(s32 arg0) { + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + s16 var_r30; + + if (BoardPlayerItemCount(arg0) == 3) { + BoardWinCreate(2, MAKE_MESSID(48, 17), 6); + BoardWinWait(); + BoardWinKill(); + return 0; + } + HuAudFXPlay(0x362); + fn_1_1D5C(0); + fn_1_1D5C(2); + fn_1_1D5C(1); + fn_1_1CB0(0); + fn_1_1CB0(1); + fn_1_1CB0(2); + lbl_1_bss_30[0] = lbl_1_bss_30[1] = lbl_1_bss_30[2] = 0; + fn_1_1F08(arg0); + BoardWinCreateChoice(2, MAKE_MESSID(48, 18), 6, 0); + if (GWPlayer[arg0].com) { + BoardComKeySetLeft(); + } + BoardWinWait(); + if (BoardWinChoiceGet() != 0) { + BoardWinCreate(2, MAKE_MESSID(48, 19), 6); + BoardWinWait(); + BoardWinKill(); + fn_1_2048(-1, 1); + while (fn_1_2174(0) != 0) { + HuPrcVSleep(); + } + fn_1_1E30(0); + fn_1_1E30(2); + fn_1_1E30(1); + return 0; + } + BoardWinKill(); + BoardAudSeqPause(0, 1, 1000); + sp14.x = 0.0f; + sp14.y = 100.0f; + sp14.z = 0.0f; + sp8.x = -20.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_C[1], &sp8, &sp14, 1600.0f, -1.0f, 21); + var_r30 = GWPlayer[arg0].space_curr; + lbl_1_bss_34 = BoardSpaceLinkFlagSearch(0, var_r30, 0x02000000); + BoardPlayerPosGet(arg0, &sp2C); + BoardSpacePosGet(0, lbl_1_bss_34, &sp38); + PSVECSubtract(&sp38, &sp2C, &sp20); + PSVECNormalize(&sp20, &sp20); + BoardPlayerRotYSet(arg0, 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI)); + BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 20); + while (GWPlayer[arg0].moving) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(arg0); + HuPrcSleep(60); + return 1; +} + +static void fn_1_15CC(s32 arg0) { + s8 sp8[] = { 80, 50 }; + s32 var_r28; + s16 temp_r26; + s32 temp_r25; + s32 var_r30; + s32 var_r31; + + BoardMusStart(1, 0x26, 0x7F, 0); + temp_r26 = MGSeqCreate(3, 0); + while (MGSeqStatGet(temp_r26) != 0) { + HuPrcVSleep(); + } + fn_1_2048(-1, 1); + while (fn_1_2174(0) != 0) { + HuPrcVSleep(); + } + fn_1_1E30(0); + fn_1_1E30(2); + fn_1_1E30(1); + fn_1_1CB0(0); + fn_1_1CB0(1); + fn_1_1CB0(2); + lbl_1_bss_30[0] = lbl_1_bss_30[1] = lbl_1_bss_30[2] = 0; + fn_1_3470(); + fn_1_2B60(arg0); + for (var_r30 = 0; var_r30 < 2; var_r30++) { + fn_1_4070(); + fn_1_11B0(); + fn_1_2D90(2); + fn_1_2C18(); + while (fn_1_2DD0() != 3) { + HuPrcVSleep(); + } + fn_1_4124(); + HuWinDispOff(lbl_1_data_1A8); + fn_1_3560(1); + fn_1_3698(lbl_1_bss_33); + while (fn_1_35BC() != 0) { + HuPrcVSleep(); + } + BoardWinCreate(2, MAKE_MESSID(48, 20), 6); + BoardWinWait(); + var_r28 = (BoardRandMod(100) >= sp8[var_r30]) ? 1 : 0; + HuPrcSleep(60); + if (var_r28 != 0) { + break; + } + BoardWinCreate(2, MAKE_MESSID(48, 21), 6); + BoardWinWait(); + lbl_1_bss_30[lbl_1_bss_33] = 1; + BoardModelVisibilitySet(lbl_1_bss_36[lbl_1_bss_33], 1); + HuAudFXPlay(0xB); + HuPrcSleep(60); + if (var_r30 == 0) { + BoardWinCreate(2, MAKE_MESSID(48, 41), 6); + BoardWinWait(); + BoardWinKill(); + } else { + for (var_r31 = 0; var_r31 < 3; var_r31++) { + if (lbl_1_bss_30[var_r31] == 0) { + lbl_1_bss_33 = var_r31; + break; + } + } + fn_1_3560(1); + fn_1_3698(lbl_1_bss_33); + while (fn_1_35BC() != 0) { + HuPrcVSleep(); + } + break; + } + } + fn_1_2D90(4); + BoardAudSeqFadeOut(1, 1000); + fn_1_1D5C(lbl_1_bss_33); + fn_1_42AC(fn_1_21CC(lbl_1_bss_33)); + fn_1_1CB0(lbl_1_bss_33); + fn_1_20CC(lbl_1_bss_33); + fn_1_2048(lbl_1_bss_33, 2); + BoardWinCreate(2, MAKE_MESSID(48, 23), 6); + BoardWinInsertMesSet(MAKE_MESSID(8, lbl_1_data_1AA[lbl_1_bss_33]), 0); + BoardWinWait(); + BoardWinKill(); + fn_1_3560(1); + fn_1_3698(1); + BoardPlayerMotBlendSet(arg0, 0, 0xF); + while (!BoardPlayerMotBlendCheck(arg0)) { + HuPrcVSleep(); + } + fn_1_2048(lbl_1_bss_33, 3); + temp_r25 = HuAudSStreamPlay(2); + BoardPlayerMotionShiftSet(arg0, 7, 0.0f, 8.0f, 0); + HuPrcSleep(8); + while (!BoardPlayerMotionEndCheck(arg0)) { + HuPrcVSleep(); + } + while (HuAudSStreamStatGet(temp_r25) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + BoardPlayerItemAdd(arg0, lbl_1_data_1AA[lbl_1_bss_33]); + while (fn_1_35BC() != 0) { + HuPrcVSleep(); + } + BoardWinCreate(2, MAKE_MESSID(48, 24), 6); + BoardWinWait(); + BoardWinKill(); + fn_1_1E30(lbl_1_bss_33); + fn_1_1CB0(lbl_1_bss_33); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + BoardModelVisibilitySet(lbl_1_bss_36[var_r31], 0); + } +} + +static void fn_1_1BE0(s32 arg0, s32 arg1) { + Vec sp18; + Vec spC; + s16 temp_r30; + + temp_r30 = GWPlayer[arg0].space_curr; + BoardPlayerPosGet(arg0, &sp18); + BoardSpacePosGet(0, temp_r30, &spC); + BoardCameraTargetPlayerSet(arg0); + BoardCameraViewSet(1); + if (arg1 != 0) { + BoardPlayerPosLerpStart(arg0, &sp18, &spC, 40); + while (GWPlayer[arg0].moving) { + HuPrcVSleep(); + } + } + BoardCameraMotionWait(); + fn_1_2048(-1, 4); +} + +static void fn_1_1CB0(s32 arg0) { + while (!BoardModelMotionEndCheck(lbl_1_bss_3C[arg0])) { + HuPrcVSleep(); + } + if (lbl_1_data_1AD[arg0] == 0) { + BoardModelAttrReset(lbl_1_bss_3C[arg0], 0x40000004); + BoardModelAttrSet(lbl_1_bss_3C[arg0], 0x40000002); + } +} + +static void fn_1_1D5C(s32 arg0) { + s8 spC[] = { 0x20, 0x40, 0x60 }; + s16 sp10[] = { -100, 0, 100 }; + s32 sp8; + + if (lbl_1_data_1AD[arg0] == 0) { + sp8 = HuAudFXPlayVolPan(0x4A4, 0x7F, spC[arg0]); + BoardModelMotionStart(lbl_1_bss_3C[arg0], 0, 0); + lbl_1_data_1AD[arg0] = 1; + } +} + +static void fn_1_1E30(s32 arg0) { + s8 spC[] = { 0x20, 0x40, 0x60 }; + s16 sp10[] = { -100, 0, 100 }; + s32 sp8; + + if (lbl_1_data_1AD[arg0] != 0) { + sp8 = HuAudFXPlayVolPan(0x4A5, 0x7F, spC[arg0]); + BoardModelMotionStart(lbl_1_bss_3C[arg0], 0, 0x40000004); + lbl_1_data_1AD[arg0] = 0; + } +} + +static void fn_1_1F08(s32 arg0) { + s32 i; + s32 j; + + i = 0; + while (i < 3) { + lbl_1_data_1AA[i] = frandmod(14); + if (lbl_1_data_1AA[i] != 10 && lbl_1_data_1AA[i] != 13) { + for (j = 0; j < i; j++) { + if (lbl_1_data_1AA[i] == lbl_1_data_1AA[j]) { + lbl_1_data_1AA[i] = -1; + } + } + if (lbl_1_data_1AA[i] != -1) { + i++; + } + } + } + for (i = 0; i < 3; i++) { + fn_1_2220(arg0, i, lbl_1_data_1AA[i]); + } +} + +static void fn_1_2048(s32 arg0, s32 arg1) { + Data1B4Work *temp_r30; + s32 i; + + for (i = 0; i < 3; i++) { + if ((arg0 == i || arg0 == -1) && lbl_1_data_1B4[i]) { + temp_r30 = OM_GET_WORK_PTR(lbl_1_data_1B4[i], Data1B4Work); + temp_r30->unk02 = arg1; + temp_r30->unk08 = 0; + } + } +} + +static void fn_1_20CC(s32 arg0) { + Data1B4Work *temp_r30; + s32 i; + + for (i = 0; i < 3; i++) { + if ((arg0 == i || arg0 == -1) && lbl_1_data_1B4[i]) { + temp_r30 = OM_GET_WORK_PTR(lbl_1_data_1B4[i], Data1B4Work); + if (temp_r30->unk0C == -1) { + temp_r30->unk0C = HuAudFXPlay(0x35F); + } + } + } +} + +static s32 fn_1_2174(s32 arg0) { + Data1B4Work *temp_r31; + + if (!lbl_1_data_1B4[arg0]) { + return -1; + } + temp_r31 = OM_GET_WORK_PTR(lbl_1_data_1B4[arg0], Data1B4Work); + return temp_r31->unk02; +} + +static s16 fn_1_21CC(s32 arg0) { + Data1B4Work *temp_r31; + + if (!lbl_1_data_1B4[arg0]) { + return -1; + } + temp_r31 = OM_GET_WORK_PTR(lbl_1_data_1B4[arg0], Data1B4Work); + return temp_r31->unk06; +} + +static void fn_1_2220(s32 arg0, s32 arg1, s32 arg2) { + Mtx sp18; + Vec spC; + omObjData *temp_r3; + Data1B4Work *temp_r31; + s32 var_r28; + + temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_243C); + lbl_1_data_1B4[arg1] = temp_r3; + temp_r31 = OM_GET_WORK_PTR(temp_r3, Data1B4Work); + temp_r31->unk00_field0 = 0; + temp_r31->unk02 = 2; + temp_r31->unk03 = 0; + temp_r31->unk00_field2 = arg1; + temp_r31->unk08 = 0; + temp_r31->unk01 = 0; + temp_r31->unk00_field4 = 0; + temp_r31->unk00_field3 = 0; + temp_r31->unk00_field1 = arg0; + temp_r31->unk0C = -1; + var_r28 = BoardItemModelGet(arg2); + temp_r31->unk06 = BoardModelCreate(var_r28, NULL, 0); + BoardModelMotionSpeedSet(temp_r31->unk06, 0.0f); + BoardModelPosGet(lbl_1_bss_3C[arg1], &spC); + temp_r3->trans.x = spC.x; + temp_r3->trans.y = spC.y; + temp_r3->trans.z = spC.z; + temp_r3->rot.x = 0.0f; + temp_r3->rot.y = 0.0f; + temp_r3->rot.z = 0.0f; + if (arg2 == 5) { + PSMTXTrans(sp18, 0.0f, -50.0f, 0.0f); + BoardModelMtxSet(temp_r31->unk06, &sp18); + } + BoardModelPosSet(temp_r31->unk06, temp_r3->trans.x, temp_r3->trans.y, temp_r3->trans.z); + BoardModelScaleSet(temp_r31->unk06, 0.1f, 0.1f, 0.1f); + BoardModelLayerSet(temp_r31->unk06, 2); +} + +static void fn_1_243C(omObjData *arg0) { + Vec sp14; + Vec sp8; + Data1B4Work *temp_r31; + + temp_r31 = OM_GET_WORK_PTR(arg0, Data1B4Work); + if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + if (temp_r31->unk0C != -1) { + HuAudFXStop(temp_r31->unk0C); + temp_r31->unk0C = -1; + } + BoardModelKill(temp_r31->unk06); + lbl_1_data_1B4[temp_r31->unk00_field2] = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r31->unk01 != 0) { + temp_r31->unk01--; + return; + } + switch (temp_r31->unk02) { + case 2: + if (temp_r31->unk00_field3 == 0) { + BoardModelPosGet(temp_r31->unk06, &sp14); + if (temp_r31->unk08 == 0) { + BoardModelPosGet(lbl_1_bss_3C[temp_r31->unk00_field2], &sp8); + sp8.y += 200.0f; + arg0->trans.y = (sp8.y - sp14.y) / 30.0f; + arg0->rot.z = 0.01f; + } else { + arg0->rot.z += 0.033333335f; + if (arg0->rot.z > 1.0f) { + arg0->rot.z = 1.0f; + } + sp14.y += arg0->trans.y; + } + BoardModelPosSetV(temp_r31->unk06, &sp14); + BoardModelScaleSet(temp_r31->unk06, arg0->rot.z, arg0->rot.z, arg0->rot.z); + temp_r31->unk08++; + if (temp_r31->unk08 >= 31) { + temp_r31->unk00_field3 = 1; + } + return; + } + fn_1_2048(temp_r31->unk00_field2, 0); + break; + case 1: + if (temp_r31->unk00_field3 != 0) { + BoardModelPosGet(temp_r31->unk06, &sp14); + if (temp_r31->unk08 == 0) { + HuAudFXPlay(0x30D); + BoardModelPosGet(lbl_1_bss_3C[temp_r31->unk00_field2], &sp8); + arg0->trans.y = (sp8.y - sp14.y) / 30.0f; + arg0->rot.z = 1.0f; + } else { + arg0->rot.z -= 0.033333335f; + if (arg0->rot.z < 0.001f) { + arg0->rot.z = 0.001f; + } + sp14.y += arg0->trans.y; + } + BoardModelPosSetV(temp_r31->unk06, &sp14); + BoardModelScaleSet(temp_r31->unk06, arg0->rot.z, arg0->rot.z, arg0->rot.z); + temp_r31->unk08++; + if (temp_r31->unk08 >= 31) { + if (temp_r31->unk0C != -1) { + HuAudFXStop(temp_r31->unk0C); + temp_r31->unk0C = -1; + } + temp_r31->unk00_field3 = 0; + } + return; + } + fn_1_2048(temp_r31->unk00_field2, 0); + break; + case 3: + BoardModelPosGet(temp_r31->unk06, &sp14); + if (temp_r31->unk08 == 0) { + BoardPlayerPosGet(temp_r31->unk00_field1, &sp8); + arg0->rot.x = (sp8.x - sp14.x) / 30.0f; + arg0->rot.z = (sp8.z - sp14.z) / 30.0f; + } else if (temp_r31->unk08 < 30) { + sp14.x += arg0->rot.x; + sp14.z += arg0->rot.z; + BoardModelPosSetV(temp_r31->unk06, &sp14); + } else { + BoardPlayerPosGet(temp_r31->unk00_field1, &sp8); + arg0->trans.x = sp8.x; + arg0->trans.y = sp8.y; + arg0->trans.z = sp8.z; + temp_r31->unk01 = 30; + temp_r31->unk08 = 0; + arg0->rot.z = 1.0f; + fn_1_2048(temp_r31->unk00_field2, 1); + break; + } + temp_r31->unk08++; + break; + case 4: + temp_r31->unk00_field0 = 1; + break; + case 0: + break; + } +} + +static s8 lbl_1_data_1C5[14] = { + 1, 1, 3, 3, 2, + 2, 2, 1, 2, 3, + 0, 4, 5, 0 +}; + +static s32 fn_1_2A1C(s32 arg0) { + s32 var_r29; + s32 var_r28; + s32 var_r30; + s32 var_r31; + + var_r29 = lbl_1_data_1C5[lbl_1_data_1AA[0]]; + var_r28 = lbl_1_data_1C5[lbl_1_data_1AA[1]]; + var_r30 = lbl_1_data_1C5[lbl_1_data_1AA[2]]; + if (lbl_1_bss_30[0] != 0) { + var_r29 = 0; + } + if (lbl_1_bss_30[1] != 0) { + var_r28 = 0; + } + if (lbl_1_bss_30[2] != 0) { + var_r30 = 0; + } + if (var_r29 > var_r28) { + if (var_r29 > var_r30) { + var_r31 = 0; + } else if (var_r30 > var_r28) { + var_r31 = 2; + } else { + var_r31 = 1; + } + } else { + if (var_r28 > var_r30) { + var_r31 = 1; + } else if (var_r30 > var_r29) { + var_r31 = 2; + } else { + var_r31 = 0; + } + } + return var_r31; +} + +static void fn_1_2B60(s32 arg0) { + omObjData *temp_r3; + Bss24Work *temp_r31; + + temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_2EF4); + lbl_1_bss_24 = temp_r3; + temp_r31 = OM_GET_WORK_PTR(temp_r3, Bss24Work); + temp_r31->unk00_field0 = 0; + temp_r31->unk00_field2 = 0; + temp_r31->unk00_field1 = arg0; + temp_r31->unk01 = 0; + temp_r31->unk03 = 0; + temp_r31->unk02 = 1; +} + +static void fn_1_2C18(void) { + Bss24Work *var_r27; + + if (lbl_1_bss_24) { + var_r27 = OM_GET_WORK_PTR(lbl_1_bss_24, Bss24Work); + var_r27->unk03 = fn_1_2A1C(var_r27->unk00_field1); + } +} + +static void fn_1_2D90(s32 arg0) { + Bss24Work *var_r31; + + if (lbl_1_bss_24) { + var_r31 = OM_GET_WORK_PTR(lbl_1_bss_24, Bss24Work); + var_r31->unk01 = arg0; + } +} + +static s32 fn_1_2DD0(void) { + Bss24Work *var_r31; + + if (!lbl_1_bss_24) { + return 4; + } + var_r31 = OM_GET_WORK_PTR(lbl_1_bss_24, Bss24Work); + return var_r31->unk01; +} + +static u32 fn_1_2E18(Bss24Work *arg0) { + s32 temp_r31; + s32 var_r30; + + if (GWPlayer[arg0->unk00_field1].com) { + if (arg0->unk02 == arg0->unk03) { + return 0x100; + } + if (arg0->unk02 > arg0->unk03) { + return 1; + } + return 2; + } + temp_r31 = GWPlayer[arg0->unk00_field1].port; + var_r30 = HuPadDStk[temp_r31] | HuPadBtnDown[temp_r31]; + return var_r30; +} + +static void fn_1_2EF4(omObjData *arg0) { + Vec sp14; + Vec sp8; + float var_f30; + s32 var_r28; + s32 temp_r19; + s32 var_r26; + s32 var_r25; + u32 var_r29; + Bss24Work *temp_r30; + + var_r29 = 0; + temp_r30 = OM_GET_WORK_PTR(arg0, Bss24Work); + if (temp_r30->unk00_field0 != 0 || BoardIsKill()) { + lbl_1_bss_24 = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (lbl_1_bss_30[0] != 0) { + var_r25 = 1; + } else { + var_r25 = 0; + } + if (lbl_1_bss_30[2] != 0) { + var_r26 = 1; + } else { + var_r26 = 2; + } + switch (temp_r30->unk01) { + case 2: + var_r29 = fn_1_2E18(temp_r30); + if (var_r29 == 0x100 || lbl_1_bss_1C != 0) { + if (lbl_1_bss_30[temp_r30->unk02] == 0) { + HuAudFXPlay(2); + lbl_1_bss_33 = temp_r30->unk02; + fn_1_2D90(3); + return; + } + if (lbl_1_bss_1C == 0) { + HuAudFXPlay(4); + break; + } + if (temp_r30->unk02 == 1) { + if (lbl_1_bss_30[0] == 0 && lbl_1_bss_30[1] == 0) { + if (BoardRandMod(100) < 50) { + var_r29 = 1; + } else { + var_r29 = 2; + } + } else { + if (lbl_1_bss_30[0] == 0) { + var_r29 = 2; + } else if (lbl_1_bss_30[1] == 0) { + var_r29 = 1; + } + } + } + if (temp_r30->unk02 == 0) { + var_r29 = 2; + } + if (temp_r30->unk02 == 2) { + var_r29 = 1; + } + } + temp_r19 = temp_r30->unk02; + var_r28 = 0; + if (var_r29 & 1) { + var_r28 = -1; + } + if (var_r29 & 2) { + var_r28 = 1; + } + temp_r30->unk02 += var_r28; + if (temp_r30->unk02 == 1 && lbl_1_bss_30[1] != 0) { + temp_r30->unk02 += var_r28; + } + if (temp_r30->unk02 > var_r26) { + temp_r30->unk02 = var_r26; + } + if (temp_r30->unk02 < var_r25) { + temp_r30->unk02 = var_r25; + } + if (temp_r30->unk02 == temp_r19) { + break; + } + fn_1_2D90(1); + BoardSpacePosGet(0, lbl_1_bss_34, &sp8); + BoardPlayerPosGet(temp_r30->unk00_field1, &sp14); + OSs8tof32(&temp_r30->unk02, &var_f30); + sp8.x += 150.0f * (var_f30 - 1.0f); + BoardPlayerPosLerpStart(temp_r30->unk00_field1, &sp14, &sp8, 20); + break; + case 0: + break; + case 1: + if (!GWPlayer[temp_r30->unk00_field1].moving) { + fn_1_2D90(2); + BoardPlayerRotYSet(temp_r30->unk00_field1, 180.0f); + BoardPlayerIdleSet(temp_r30->unk00_field1); + } + break; + case 3: + fn_1_2D90(0); + break; + case 4: + temp_r30->unk00_field0 = 1; + break; + } +} + +static void fn_1_3470(void) { + omObjData *temp_r3; + Bss28Work *temp_r31; + + temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_3974); + lbl_1_bss_28 = temp_r3; + temp_r31 = OM_GET_WORK_PTR(temp_r3, Bss28Work); + temp_r31->unk00_field0 = 0; + temp_r31->unk00_field1 = 0; + temp_r31->unk03 = 0; + temp_r31->unk00_field2 = 0; + temp_r31->unk04 = 0; + temp_r31->unk06 = 0; + temp_r31->unk08 = BoardModelMotionCreate(lbl_1_bss_C[4], DATA_MAKE_NUM(DATADIR_W06, 22)); + temp_r31->unk0A = BoardModelMotionCreate(lbl_1_bss_C[4], DATA_MAKE_NUM(DATADIR_W06, 23)); +} + +static void fn_1_3560(s32 arg0) { + Bss28Work *temp_r31; + + if (!lbl_1_bss_28) { + return; + } + temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_28, Bss28Work); + temp_r31->unk00_field1 = arg0; + if (arg0 != 1) { + (void) 0; + } else { + temp_r31->unk06 = 20; + } +} + +static s32 fn_1_35BC(void) { + Bss28Work *temp_r31; + + if (!lbl_1_bss_28) { + return 5; + } + temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_28, Bss28Work); + return temp_r31->unk00_field1; +} + +static void fn_1_3604(s32 arg0) { + Bss28Work *temp_r31; + + if (!lbl_1_bss_28) { + return; + } + temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_28, Bss28Work); + switch (arg0) { + case 0: + temp_r31->unk01[0] = 1; + temp_r31->unk01[1] = 2; + break; + case 2: + temp_r31->unk01[0] = 1; + temp_r31->unk01[1] = 0; + break; + default: + temp_r31->unk01[0] = 0; + temp_r31->unk01[1] = 2; + break; + } +} + +static void fn_1_3698(s8 arg0) { + Vec sp24; + Vec sp18; + Vec spC; + float temp_f31; + float var_f30; + Bss28Work *temp_r31; + + if (!lbl_1_bss_28) { + return; + } + temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_28, Bss28Work); + BoardModelPosGet(lbl_1_bss_C[4], &sp24); + BoardModelPosGet(lbl_1_bss_3C[1], &sp18); + lbl_1_bss_28->trans.x = arg0 - 1; + sp18.x += 150.0f * lbl_1_bss_28->trans.x; + sp18.y = sp24.y; + sp18.z = sp24.z; + temp_f31 = sp18.x - sp24.x; + if (ABS(temp_f31) < 1.0f) { + BoardModelMotionShiftSet(lbl_1_bss_C[4], 1, 0.0f, 8.0f, 0x40000001); + lbl_1_bss_28->trans.y = 0.0f; + return; + } + if (ABS(temp_f31) >= 300.0f) { + var_f30 = 40.0f; + temp_r31->unk06 *= 2; + } else { + var_f30 = 20.0f; + } + PSVECSubtract(&sp18, &sp24, &spC); + lbl_1_bss_28->trans.y = temp_f31 / var_f30; + BoardModelRotYSet(lbl_1_bss_C[4], 180.0 * (atan2(spC.x, spC.z) / M_PI)); + BoardModelMotionShiftSet(lbl_1_bss_C[4], temp_r31->unk08, 0.0f, 8.0f, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_bss_C[4], 2.0f); +} + +static void fn_1_3974(omObjData *arg0) { + Vec sp30; + Vec sp24; + s32 sp8; + Bss28Work *temp_r31; + + sp8 = 0; + temp_r31 = OM_GET_WORK_PTR(arg0, Bss28Work); + if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + lbl_1_bss_28 = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r31->unk04 != 0) { + temp_r31->unk04--; + return; + } + switch (temp_r31->unk00_field1) { + case 0: + break; + case 3: + if (temp_r31->unk03 >= 2) { + if (BoardRandMod(100) < 60) { + fn_1_3560(4); + return; + } + } else { + temp_r31->unk03++; + } + fn_1_3560(1); + temp_r31->unk00_field2 ^= 1; + fn_1_3698(temp_r31->unk01[temp_r31->unk00_field2]); + temp_r31->unk00_field3 = 1; + break; + case 1: + if (temp_r31->unk06 != 0) { + BoardModelPosGet(lbl_1_bss_C[4], &sp30); + sp30.x += arg0->trans.y; + BoardModelPosSetV(lbl_1_bss_C[4], &sp30); + temp_r31->unk06--; + break; + } + if (temp_r31->unk00_field3 != 0) { + fn_1_3560(2); + temp_r31->unk06 = 0; + temp_r31->unk04 = 10; + break; + } + fn_1_3560(0); + temp_r31->unk06 = 0; + BoardModelRotYSet(lbl_1_bss_C[4], 0.0f); + BoardModelMotionShiftSet(lbl_1_bss_C[4], 1, 0.0f, 10.0f, 0x40000001); + break; + case 2: + if (temp_r31->unk06++ == 0) { + BoardModelMotionShiftSet(lbl_1_bss_C[4], temp_r31->unk0A, 0.0f, 10.0f, 0x40000001); + break; + } + if (temp_r31->unk06 < 50) { + BoardModelRotYSet(lbl_1_bss_C[4], 0.0f); + break; + } + fn_1_3560(3); + break; + case 4: + temp_r31->unk00_field3 = 0; + lbl_1_bss_33 = temp_r31->unk01[temp_r31->unk00_field2]; + BoardModelMotionShiftSet(lbl_1_bss_C[4], 1, 0.0f, 10.0f, 0x40000001); + fn_1_3560(0); + break; + case 5: + temp_r31->unk00_field0 = 1; + break; + } +} + +static void fn_1_4070(void) { + Bss2CWork *temp_r31; + + lbl_1_bss_1C = 0; + lbl_1_bss_2C = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_4194); + temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_2C, Bss2CWork); + temp_r31->unk00_field0 = 0; + temp_r31->unk01 = 5; + temp_r31->unk02 = 60; + temp_r31->unk04 = MGSeqCreate(1, temp_r31->unk01, 0x120, 0x40); +} + +static void fn_1_4124(void) { + Bss2CWork *temp_r31; + + if (!lbl_1_bss_2C) { + return; + } + temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_2C, Bss2CWork); + MGSeqParamSet(temp_r31->unk04, 2, -1); + temp_r31->unk04 = -1; + temp_r31->unk00_field0 = 1; +} + +static void fn_1_4194(omObjData *arg0) { + Bss2CWork *temp_r31; + + temp_r31 = OM_GET_WORK_PTR(arg0, Bss2CWork); + if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + if (temp_r31->unk04 != -1) { + MGSeqParamSet(temp_r31->unk04, 2, -1); + } + lbl_1_bss_2C = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r31->unk04 == -1) { + return; + } + if (temp_r31->unk02 != 0) { + temp_r31->unk02--; + return; + } + if (temp_r31->unk01 != 0) { + temp_r31->unk01--; + } else { + MGSeqParamSet(temp_r31->unk04, 2, -1); + temp_r31->unk04 = -1; + lbl_1_bss_1C = 1; + return; + } + MGSeqParamSet(temp_r31->unk04, 1, temp_r31->unk01); + temp_r31->unk02 = 60; +} + +static void fn_1_42AC(s16 arg0) { + ParticleData *var_r31; + + lbl_1_bss_20 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0)); + HuSprAnimLock(lbl_1_bss_20); + lbl_1_data_1B0 = Hu3DParticleCreate(lbl_1_bss_20, 100); + Hu3DParticleHookSet(lbl_1_data_1B0, fn_1_4460); + Hu3DParticleColSet(lbl_1_data_1B0, 0xFF, 0xFF, 0); + Hu3DModelPosSet(lbl_1_data_1B0, 0.0f, 0.0f, 0.0f); + Hu3DParticleBlendModeSet(lbl_1_data_1B0, 1); + Hu3DModelLayerSet(lbl_1_data_1B0, 2); + var_r31 = Hu3DData[lbl_1_data_1B0].unk_120; + var_r31->unk_02 = arg0; +} + +static void fn_1_43DC(void) { + if (lbl_1_data_1B0 != -1) { + Hu3DModelKill(lbl_1_data_1B0); + lbl_1_data_1B0 = -1; + } + if (lbl_1_bss_20) { + HuSprAnimKill(lbl_1_bss_20); + lbl_1_bss_20 = NULL; + } +} + +static void fn_1_4460(ModelData *model, ParticleData *particle, Mtx matrix) { + HsfanimStruct01 *var_r31; + Vec sp8; + float var_f31; + float temp_f30; + float temp_f29; + s32 i; + s32 j; + + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + var_r31->unk40.a = 0; + var_r31->unk2C = 0.0f; + } + particle->unk_00 = 0; + } + BoardModelScaleGet(particle->unk_02, &sp8); + var_f31 = sp8.x; + BoardModelPosGet(particle->unk_02, &sp8); + for (i = 0; i < 22; i++) { + var_r31 = particle->unk_48; + for (j = 0; j < particle->unk_30; j++, var_r31++) { + if (var_r31->unk2C == 0.0f) { + break; + } + } + if (j != particle->unk_30) { + temp_f30 = 0.003921569f * (frand() & 0xFF) * 360.0f; + temp_f29 = var_f31 * (20.0f + 0.003921569f * (frand() & 0xFF) * 60.0f); + var_r31->unk34.x = sp8.x + temp_f29 * sin(temp_f30 * M_PI / 180.0); + var_r31->unk34.z = sp8.z + temp_f29 * cos(temp_f30 * M_PI / 180.0); + var_r31->unk34.y = sp8.y + var_f31 * (-30.0f + 0.003921569f * (frand() & 0xFF) * 40.0f); + var_r31->unk08.x = 0.5f + 0.003921569f * (frand() & 0xFF) * 3.0f; + var_r31->unk08.y = 0.3f + 0.003921569f * (frand() & 0xFF) * 2.0f; + var_r31->unk40.a = 0xB4; + var_r31->unk2C = 15.0f * var_f31; + } + } + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + if (var_r31->unk2C != 0.0f) { + var_r31->unk34.y -= var_r31->unk08.x; + var_r31->unk2C -= var_r31->unk08.y; + if (var_r31->unk2C <= 0.0f) { + var_r31->unk2C = 0.0f; + } + } + } +}