diff --git a/config/GMPE01_00/rels/w06Dll/symbols.txt b/config/GMPE01_00/rels/w06Dll/symbols.txt index dbc4f922..c86ec89b 100644 --- a/config/GMPE01_00/rels/w06Dll/symbols.txt +++ b/config/GMPE01_00/rels/w06Dll/symbols.txt @@ -98,25 +98,25 @@ fn_1_8F20 = .text:0x00008F20; // type:function size:0x2B8 fn_1_91D8 = .text:0x000091D8; // type:function size:0xBC fn_1_9294 = .text:0x00009294; // type:function size:0x44 fn_1_92D8 = .text:0x000092D8; // type:function size:0xF0 -fn_1_93C8 = .text:0x000093C8; // type:function size:0x10C -fn_1_94D4 = .text:0x000094D4; // type:function size:0xD8 -fn_1_95AC = .text:0x000095AC; // type:function size:0x8B0 -fn_1_9E5C = .text:0x00009E5C; // type:function size:0x5AC -fn_1_A408 = .text:0x0000A408; // type:function size:0x744 -fn_1_AB4C = .text:0x0000AB4C; // type:function size:0x730 -fn_1_B27C = .text:0x0000B27C; // type:function size:0x424 -fn_1_B6A0 = .text:0x0000B6A0; // type:function size:0x240 -fn_1_B8E0 = .text:0x0000B8E0; // type:function size:0x230 -fn_1_BB10 = .text:0x0000BB10; // type:function size:0x1F8 -fn_1_BD08 = .text:0x0000BD08; // type:function size:0x3C -fn_1_BD44 = .text:0x0000BD44; // type:function size:0x48 -fn_1_BD8C = .text:0x0000BD8C; // type:function size:0x37C +fn_1_93C8 = .text:0x000093C8; // type:function size:0x10C scope:local +fn_1_94D4 = .text:0x000094D4; // type:function size:0xD8 scope:local +fn_1_95AC = .text:0x000095AC; // type:function size:0x8B0 scope:local +fn_1_9E5C = .text:0x00009E5C; // type:function size:0x5AC scope:local +fn_1_A408 = .text:0x0000A408; // type:function size:0x744 scope:local +fn_1_AB4C = .text:0x0000AB4C; // type:function size:0x730 scope:local +fn_1_B27C = .text:0x0000B27C; // type:function size:0x424 scope:local +fn_1_B6A0 = .text:0x0000B6A0; // type:function size:0x240 scope:local +fn_1_B8E0 = .text:0x0000B8E0; // type:function size:0x230 scope:local +fn_1_BB10 = .text:0x0000BB10; // type:function size:0x1F8 scope:local +fn_1_BD08 = .text:0x0000BD08; // type:function size:0x3C scope:local +fn_1_BD44 = .text:0x0000BD44; // type:function size:0x48 scope:local +fn_1_BD8C = .text:0x0000BD8C; // type:function size:0x37C scope:local fn_1_C108 = .text:0x0000C108; // type:function size:0x1AC fn_1_C2B4 = .text:0x0000C2B4; // type:function size:0x158 -fn_1_C40C = .text:0x0000C40C; // type:function size:0x5B0 -fn_1_C9BC = .text:0x0000C9BC; // type:function size:0xD0 -fn_1_CA8C = .text:0x0000CA8C; // type:function size:0x40 -fn_1_CACC = .text:0x0000CACC; // type:function size:0x1C4 +fn_1_C40C = .text:0x0000C40C; // type:function size:0x5B0 scope:local +fn_1_C9BC = .text:0x0000C9BC; // type:function size:0xD0 scope:local +fn_1_CA8C = .text:0x0000CA8C; // type:function size:0x40 scope:local +fn_1_CACC = .text:0x0000CACC; // type:function size:0x1C4 scope:local fn_1_CC90 = .text:0x0000CC90; // type:function size:0x7C fn_1_CD0C = .text:0x0000CD0C; // type:function size:0x398 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte @@ -230,44 +230,44 @@ lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 scope:local data: lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 scope:local data:float lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 scope:local data:float lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x8 scope:local data:float -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 data:float -lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 data:float -lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 data:float -lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 data:float -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 data:float -lbl_1_rodata_23C = .rodata:0x0000023C; // type:object size:0x4 data:float -lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x8 data:double -lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x8 data:double -lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 data:float -lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 data:float -lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 data:float -lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 data:float -lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 data:float -lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 data:float -lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x4 data:float -lbl_1_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 data:float -lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 data:float -lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 data:float -lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 data:float -lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 data:float -lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 data:float -lbl_1_rodata_284 = .rodata:0x00000284; // type:object size:0x4 data:float -lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 data:float -lbl_1_rodata_28C = .rodata:0x0000028C; // type:object size:0x4 data:float -lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 data:float -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x8 data:double -lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 data:float -lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 data:float -lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 data:float -lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 data:float -lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 data:float -lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 data:float -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x8 data:double -lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 data:float -lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x8 data:double -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 scope:local data:float +lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 scope:local data:float +lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 scope:local data:float +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 scope:local data:float +lbl_1_rodata_23C = .rodata:0x0000023C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x8 scope:local data:double +lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x8 scope:local data:double +lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 scope:local data:float +lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 scope:local data:float +lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 scope:local data:float +lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 scope:local data:float +lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 scope:local data:float +lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x4 scope:local data:float +lbl_1_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 scope:local data:float +lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 scope:local data:float +lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 scope:local data:float +lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 scope:local data:float +lbl_1_rodata_284 = .rodata:0x00000284; // type:object size:0x4 scope:local data:float +lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28C = .rodata:0x0000028C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 scope:local data:float +lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0xF0 scope:local lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x2 scope:local data:2byte lbl_1_data_F2 = .data:0x000000F2; // type:object size:0x2 scope:local data:2byte @@ -319,19 +319,19 @@ lbl_1_data_434 = .data:0x00000434; // type:object size:0x18 scope:local lbl_1_data_44C = .data:0x0000044C; // type:object size:0xC scope:local lbl_1_data_458 = .data:0x00000458; // type:object size:0x20 scope:local lbl_1_data_478 = .data:0x00000478; // type:object size:0x20 scope:local -lbl_1_data_498 = .data:0x00000498; // type:object size:0x2 data:2byte -lbl_1_data_49A = .data:0x0000049A; // type:object size:0x2 data:2byte -lbl_1_data_49C = .data:0x0000049C; // type:object size:0x2 data:2byte -lbl_1_data_49E = .data:0x0000049E; // type:object size:0x2 data:2byte -lbl_1_data_4A0 = .data:0x000004A0; // type:object size:0x2 data:2byte -lbl_1_data_4A2 = .data:0x000004A2; // type:object size:0x2 data:2byte -lbl_1_data_4A4 = .data:0x000004A4; // type:object size:0x8 -lbl_1_data_4AC = .data:0x000004AC; // type:object size:0x20 -lbl_1_data_4CC = .data:0x000004CC; // type:object size:0x20 -lbl_1_data_4EC = .data:0x000004EC; // type:object size:0x24 -lbl_1_data_510 = .data:0x00000510; // type:object size:0x20 -lbl_1_data_530 = .data:0x00000530; // type:object size:0x6 data:string -lbl_1_data_536 = .data:0x00000536; // type:object size:0xB data:string +lbl_1_data_498 = .data:0x00000498; // type:object size:0x2 scope:local data:2byte +lbl_1_data_49A = .data:0x0000049A; // type:object size:0x2 scope:local data:2byte +lbl_1_data_49C = .data:0x0000049C; // type:object size:0x2 scope:local data:2byte +lbl_1_data_49E = .data:0x0000049E; // type:object size:0x2 scope:local data:2byte +lbl_1_data_4A0 = .data:0x000004A0; // type:object size:0x2 scope:local data:2byte +lbl_1_data_4A2 = .data:0x000004A2; // type:object size:0x2 scope:local data:2byte +lbl_1_data_4A4 = .data:0x000004A4; // type:object size:0x8 scope:local data:byte +lbl_1_data_4AC = .data:0x000004AC; // type:object size:0x20 scope:local +lbl_1_data_4CC = .data:0x000004CC; // type:object size:0x20 scope:local +lbl_1_data_4EC = .data:0x000004EC; // type:object size:0x24 scope:local +lbl_1_data_510 = .data:0x00000510; // type:object size:0x20 scope:local +lbl_1_data_530 = .data:0x00000530; // type:object size:0x6 scope:local data:string +lbl_1_data_536 = .data:0x00000536; // type:object size:0xB scope:local data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 scope:local data:4byte @@ -369,7 +369,7 @@ lbl_1_bss_D6 = .bss:0x000000D6; // type:object size:0xC scope:local lbl_1_bss_E2 = .bss:0x000000E2; // type:object size:0x2 scope:local data:2byte lbl_1_bss_E4 = .bss:0x000000E4; // type:object size:0x2 scope:local data:2byte lbl_1_bss_E6 = .bss:0x000000E6; // type:object size:0x1 scope:local data:byte -lbl_1_bss_E8 = .bss:0x000000E8; // type:object size:0x4 data:4byte -lbl_1_bss_EC = .bss:0x000000EC; // type:object size:0x4 data:4byte -lbl_1_bss_F0 = .bss:0x000000F0; // type:object size:0x4 data:4byte -lbl_1_bss_F4 = .bss:0x000000F4; // type:object size:0x1 data:byte +lbl_1_bss_E8 = .bss:0x000000E8; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_EC = .bss:0x000000EC; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_F0 = .bss:0x000000F0; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_F4 = .bss:0x000000F4; // type:object size:0x1 scope:local data:byte diff --git a/configure.py b/configure.py index fde37b83..9b3ea8ab 100644 --- a/configure.py +++ b/configure.py @@ -1297,7 +1297,7 @@ config.libs = [ Object(Matching, "REL/w06Dll/mg_coin.c"), Object(Matching, "REL/w06Dll/fire.c"), Object(Matching, "REL/w06Dll/bridge.c"), - Object(NonMatching, "REL/w06Dll/bowser.c"), + Object(Matching, "REL/w06Dll/bowser.c"), } ), Rel('w10Dll', diff --git a/include/REL/w06Dll.h b/include/REL/w06Dll.h index 5423f049..4f19052d 100755 --- a/include/REL/w06Dll.h +++ b/include/REL/w06Dll.h @@ -12,20 +12,26 @@ typedef struct { u8 unk00_field0 : 1; u8 unk00_field1 : 1; u8 unk00_field2 : 1; + u8 unk00_field3 : 1; + u8 unk00_field4 : 1; }; s8 unk01; s8 unk02; + s8 unk03; + s8 unk04; + u8 unk05; + s16 unk06; } UnkW06BoardData; extern void fn_1_D70(void); extern void fn_1_F6C(void); -extern void fn_1_1054(void); // return s32? +extern void fn_1_1054(void); extern void fn_1_4878(void); extern void fn_1_4A10(void); -extern void fn_1_4A60(void); // return s32? +extern void fn_1_4A60(void); -extern void fn_1_6EF0(void); // return s32? +extern void fn_1_6EF0(void); extern void fn_1_7BB0(void); extern void fn_1_7F3C(void); diff --git a/src/REL/w06Dll/bowser.c b/src/REL/w06Dll/bowser.c new file mode 100755 index 00000000..961e5187 --- /dev/null +++ b/src/REL/w06Dll/bowser.c @@ -0,0 +1,1228 @@ +#include "REL/w06Dll.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/flag.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/hsfdraw.h" +#include "game/hsfex.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/process.h" +#include "game/window.h" +#include "game/wipe.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" + +typedef struct { + struct { + u8 unk00_field0 : 1; + }; + char unk01[3]; + s32 unk04; + s32 unk08; + s16 unk0C; +} BssECWork; + +static void fn_1_93C8(void); +static void fn_1_94D4(void); +static void fn_1_95AC(s32 arg0); +static void fn_1_9E5C(s32 arg0); +static void fn_1_A408(s32 arg0); +static void fn_1_AB4C(s32 arg0, s32 arg1); +static void fn_1_B27C(s32 arg0); +static void fn_1_B6A0(float arg0, s16 arg1); +static void fn_1_B8E0(omObjData *arg0); +static void fn_1_BB10(s32 arg0); +static void fn_1_BD08(s32 arg0); +static void fn_1_BD44(void); +static void fn_1_BD8C(s32 arg0); +static void fn_1_C40C(void); +static s32 fn_1_C9BC(void); +static s32 fn_1_CA8C(s32 arg0, s32 arg1); +static void fn_1_CACC(void); + +static s8 lbl_1_bss_F4; +static s32 lbl_1_bss_F0; +static omObjData *lbl_1_bss_EC; +static Process *lbl_1_bss_E8; + +static s16 lbl_1_data_498 = -1; +static s16 lbl_1_data_49A = -1; +static s16 lbl_1_data_49C = -1; +static s16 lbl_1_data_49E = -1; +static s16 lbl_1_data_4A0 = -1; +static s16 lbl_1_data_4A2 = -1; + +static s8 lbl_1_data_4A4[] = { + 0, 0, 90, 0, + 0, 0, 0, 166 +}; + +static s32 lbl_1_data_4AC[8] = { + 0x00000128, + 0x00000168, + 0x000001A8, + 0x000001E8, + 0x00000228, + 0x00000268, + 0x000002A8, + 0x000002E8 +}; + +static s32 lbl_1_data_4CC[8] = { + 0x00000123, + 0x00000163, + 0x000001A3, + 0x000001E3, + 0x00000223, + 0x00000263, + 0x000002A3, + 0x000002E3 +}; + +static s32 lbl_1_data_4EC[] = { + DATA_MAKE_NUM(DATADIR_BKOOPA, 8), + DATA_MAKE_NUM(DATADIR_BKOOPA, 10), + DATA_MAKE_NUM(DATADIR_BKOOPA, 11), + DATA_MAKE_NUM(DATADIR_BKOOPA, 12), + DATA_MAKE_NUM(DATADIR_W06, 24), + DATA_MAKE_NUM(DATADIR_BKOOPA, 9), + DATA_MAKE_NUM(DATADIR_W06, 25), + DATA_MAKE_NUM(DATADIR_W06, 26), + -1 +}; + +static s32 lbl_1_data_510[8] = { + DATA_MAKE_NUM(DATADIR_MARIOMOT, 19), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 19), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 19), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 19), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 19), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 19), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 19), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 19) +}; + +void fn_1_8F20(void) { + omObjData *temp_r3; + BssECWork *temp_r31; + s32 var_r28; + s32 i; + + temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_B8E0); + lbl_1_bss_EC = temp_r3; + temp_r31 = OM_GET_WORK_PTR(temp_r3, BssECWork); + temp_r31->unk00_field0 = 0; + temp_r31->unk0C = 0; + temp_r31->unk08 = 0; + temp_r31->unk04 = 1; + lbl_1_data_498 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BKOOPA, 7), lbl_1_data_4EC, 0); + BoardModelMotionStart(lbl_1_data_498, 1, 0x40000001); + BoardModelScaleSet(lbl_1_data_498, 2.0f, 2.0f, 2.0f); + lbl_1_data_49A = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 11), NULL, 0); + BoardModelMotionStart(lbl_1_data_49A, 0, 0x40000001); + if (_CheckFlag(FLAG_ID_MAKE(1, 1))) { + fn_1_CACC(); + if (lbl_1_bss_0->unk00_field3 == 0) { + var_r28 = BoardSpaceStarGet(lbl_1_bss_0->unk04 - 1); + BoardSpaceTypeSet(0, var_r28, 10); + } + } else { + BoardModelVisibilitySet(lbl_1_data_49A, 0); + BoardModelVisibilitySet(lbl_1_data_498, 0); + } + HuDataDirClose(DATADIR_BKOOPA); + if (_CheckFlag(FLAG_ID_MAKE(1, 9))) { + for (i = 0; i < 4; i++) { + if (lbl_1_bss_0->unk05 & (1 << i)) { + BoardPlayerPreTurnHookSet(i, fn_1_C9BC); + } + } + } + if (lbl_1_bss_0->unk00_field4 != 0) { + BoardModelMotionStart(lbl_1_data_498, 2, 0); + BoardModelMotionTimeSet(lbl_1_data_498, 90.0f); + BoardModelMotionSpeedSet(lbl_1_data_498, 0.0f); + } +} + +void fn_1_91D8(void) { + fn_1_BD44(); + if (lbl_1_data_498 != -1) { + BoardModelKill(lbl_1_data_498); + lbl_1_data_498 = -1; + } + if (lbl_1_data_49A != -1) { + BoardModelKill(lbl_1_data_49A); + lbl_1_data_49A = -1; + } + if (lbl_1_data_49E != -1) { + BoardModelKill(lbl_1_data_49E); + lbl_1_data_49E = -1; + } +} + +void fn_1_9294(s32 arg0, s32 arg1) { + BoardDiceDigit2DInit(arg0, 0); + fn_1_92D8(arg0, arg1); +} + +s32 fn_1_92D8(s32 arg0, s32 arg1) { + lbl_1_bss_F0 = 0; + if (fn_1_CA8C(arg0, arg1) == 0) { + return lbl_1_bss_F0; + } + lbl_1_bss_F4 = arg0; + BoardDiceDigit2DShowSet(0); + lbl_1_bss_E8 = HuPrcChildCreate(fn_1_93C8, 0x2003, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_E8, fn_1_94D4); + while (lbl_1_bss_E8) { + HuPrcVSleep(); + } + BoardDiceDigit2DShowSet(1); + return lbl_1_bss_F0; +} + +static void fn_1_93C8(void) { + s32 temp_r31; + s32 temp_r30; + + temp_r31 = GWSystem.player_curr; + temp_r30 = GWPlayer[temp_r31].space_curr; + BoardAudSeqPause(0, 1, 0x1F4); + fn_1_BD8C(temp_r31); + if (_CheckFlag(FLAG_ID_MAKE(1, 6))) { + fn_1_AB4C(temp_r31, temp_r30); + } else if (GWPlayer[temp_r31].bowser_suit) { + fn_1_B27C(temp_r31); + } else { + switch (BoardPlayerSizeGet(temp_r31)) { + case 1: + fn_1_95AC(temp_r31); + break; + case 0: + fn_1_9E5C(temp_r31); + break; + case 2: + fn_1_A408(temp_r31); + break; + } + } + HuPrcEnd(); +} + +static void fn_1_94D4(void) { + if (lbl_1_data_4A2 != -1) { + BoardModelKill(lbl_1_data_4A2); + lbl_1_data_4A2 = -1; + } + if (lbl_1_data_4A0 != -1) { + BoardModelKill(lbl_1_data_4A0); + lbl_1_data_4A0 = -1; + } + if (lbl_1_data_49C != -1) { + BoardPlayerMotionKill(GWSystem.player_curr, lbl_1_data_49C); + lbl_1_data_49C = -1; + } + lbl_1_bss_E8 = NULL; +} + +static void fn_1_95AC(s32 arg0) { + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float var_f30; + float var_f31; + s32 temp_r30; + s32 temp_r29; + + lbl_1_data_49C = BoardPlayerMotionCreate(arg0, lbl_1_data_510[GWPlayer[arg0].character]); + BoardPlayerPosGet(arg0, &sp38); + BoardModelPosGet(lbl_1_data_49A, &sp2C); + PSVECSubtract(&sp2C, &sp38, &sp20); + PSVECNormalize(&sp20, &sp20); + BoardModelMotionShiftSet(lbl_1_data_498, 4, 0.0f, 8.0f, 0); + HuPrcSleep(8); + HuAudFXPlay(0x3C); + BoardMusStart(1, 6, 0x7F, 0); + sp14.x = 0.0f; + sp14.y = 150.0f; + sp14.z = 0.0f; + sp8.x = -14.0f; + sp8.y = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI); + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_data_49A, &sp8, &sp14, 1620.0f, -1.0f, 21); + BoardCameraMotionWait(); + BoardCameraTargetModelSet(-1); + omVibrate(arg0, 12, 4, 2); + BoardPlayerMotionStart(arg0, 9, 0); + HuAudFXPlay(lbl_1_data_4AC[GWPlayer[arg0].character]); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + while (!BoardPlayerMotionEndCheck(arg0)) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(arg0); + HuPrcSleep(30); + BoardModelAttrSet(lbl_1_data_498, 0x40000004); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(lbl_1_data_498, 1, 0.0f, 8.0f, 0x40000001); + BoardWinCreate(2, MAKE_MESSID(48, 2), 5); + BoardWinWait(); + BoardWinKill(); + BoardCameraMotionStartEx(-1, NULL, NULL, 2000.0f, -1.0f, 21); + BoardCameraMotionWait(); + BoardModelMotionShiftSet(lbl_1_data_498, 5, 0.0f, 8.0f, 0); + HuPrcSleep(8); + while (BoardModelMotionTimeGet(lbl_1_data_498) < 80.0f) { + HuPrcVSleep(); + } + temp_r29 = HuAudFXPlay(0x34E); + fn_1_BB10(1); + while (BoardModelMotionTimeGet(lbl_1_data_498) < 60.0f) { + HuPrcVSleep(); + } + HuAudFXPlay(lbl_1_data_4CC[GWPlayer[arg0].character]); + omVibrate(arg0, 12, 4, 2); + BoardPlayerMotionStart(arg0, lbl_1_data_49C, 0x40000001); + temp_r30 = BoardSpaceFlagPosGet(0, 0x8000, &sp2C); + PSVECSubtract(&sp2C, &sp38, &sp20); + PSVECNormalize(&sp20, &sp20); + sp20.x = 500.0f * sp20.x / 90.0f; + sp20.z = 500.0f * sp20.z / 90.0f; + sp38.y += 150.0f; + for (var_f31 = 0.0f; var_f31 < 90.0f; var_f31 += 1.0f) { + sp38.x += sp20.x; + sp38.z += sp20.z; + if (sp38.y < 0.0f) { + sp38.y = 0.0f; + break; + } + sp38.y += 30.0f + -0.08166667f * var_f31 * var_f31 * 0.125f; + BoardPlayerPosSetV(arg0, &sp38); + HuPrcVSleep(); + } + WipeColorSet(0xFF, 0xFF, 0xFF); + WipeCreate(2, 1, 1); + HuPrcSleep(2); + BoardCameraMoveSet(0); + BoardModelVisibilitySet(BoardPlayerModelGet(arg0), 0); + BoardPlayerRotYSet(arg0, 0.0f); + BoardCameraViewSet(2); + BoardCameraMotionWait(); + BoardCameraTargetSpaceSet(temp_r30); + HuAudFXFadeOut(temp_r29, 0xC8); + fn_1_BB10(0); + BoardModelMotionStart(lbl_1_data_498, 1, 0x40000001); + BoardModelRotYSet(lbl_1_data_498, 0.0f); + sp38.x = sp2C.x; + sp38.y = sp2C.y + 1000.0f; + sp38.z = sp2C.z; + BoardPlayerPosSetV(arg0, &sp38); + BoardModelVisibilitySet(BoardPlayerModelGet(arg0), 1); + WipeCreate(1, 1, 30); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + var_f31 = 0.0f; + var_f30 = var_f31; + while (TRUE) { + if (sp38.y < sp2C.y) { + if (var_f30 >= 3.0f) { + break; + } + HuAudFXPlay(0x4A7); + omVibrate(arg0, 12, 6, 6); + sp38.y = sp2C.y + 30.0f * (3.0f - var_f30); + var_f31 = 0.0f; + var_f30 += 1.0f; + } + sp38.y += 5.0f + -0.08166667f * var_f31 * var_f31; + BoardPlayerPosSetV(arg0, &sp38); + HuPrcVSleep(); + var_f31 += 1.0f; + } + BoardPlayerPosSetV(arg0, &sp2C); + BoardPlayerMotionStart(arg0, 6, 0x40000001); + HuPrcSleep(60); + GWPlayer[arg0].space_curr = temp_r30; + BoardAudSeqFadeOut(1, 1000); + HuPrcSleep(24); + fn_1_B6A0(0.0f, 20); + BoardCameraMoveSet(1); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + BoardAudSeqPause(0, 0, 1000); +} + +static void fn_1_9E5C(s32 arg0) { + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + u16 var_r30; + s32 var_r25; + s32 var_r29; + s16 i; + s16 var_r26; + s16 var_r28; + + BoardPlayerPosGet(arg0, &sp38); + BoardModelPosGet(lbl_1_data_49A, &sp2C); + PSVECSubtract(&sp2C, &sp38, &sp20); + PSVECNormalize(&sp20, &sp20); + BoardModelMotionShiftSet(lbl_1_data_498, 4, 0.0f, 8.0f, 0); + HuPrcSleep(8); + HuAudFXPlay(0x3C); + BoardMusStart(1, 6, 0x7F, 0); + sp14.x = 0.0f; + sp14.y = 150.0f; + sp14.z = 0.0f; + sp8.x = -14.0f; + sp8.y = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI); + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_data_49A, &sp8, &sp14, 1620.0f, -1.0f, 21); + BoardCameraMotionWait(); + BoardCameraTargetModelSet(-1); + omVibrate(arg0, 12, 4, 2); + BoardPlayerMotionStart(arg0, 9, 0); + HuAudFXPlay(lbl_1_data_4AC[GWPlayer[arg0].character]); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + while (!BoardPlayerMotionEndCheck(arg0)) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(arg0); + HuPrcSleep(30); + BoardModelAttrSet(lbl_1_data_498, 0x40000004); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(lbl_1_data_498, 7, 0.0f, 8.0f, 0); + HuPrcSleep(9); + while (BoardModelMotionTimeGet(lbl_1_data_498) < 33.0f) { + HuPrcVSleep(); + } + HuAudFXPlay(0x51); + var_r30 = BoardPlayerCoinsGet(arg0); + if (var_r30 != 0) { + var_r29 = 0x300003; + var_r28 = -1; + var_r30 = BoardPlayerCoinsGet(arg0) - (var_r30 >> 1); + var_r25 = 8; + } else { + var_r29 = 0x300005; + var_r28 = 1; + var_r30 = 50; + var_r25 = 7; + } + BoardWinCreate(2, var_r29, 5); + BoardWinWait(); + if (var_r30 >= 50) { + var_r26 = 1; + } else if (var_r30 >= 20) { + var_r26 = 3; + } else { + var_r26 = 6; + } + for (i = 0; i < var_r30; i++) { + BoardPlayerCoinsAdd(arg0, var_r28); + if (var_r28 == -1) { + HuAudFXPlay(0xE); + } else { + HuAudFXPlay(7); + } + HuPrcSleep(var_r26); + } + HuAudFXPlay(0xF); + BoardPlayerMotBlendSet(arg0, BoardPlayerRotYGet(arg0) + 180.0f, 0x14); + while (!BoardPlayerMotBlendCheck(arg0)) { + HuPrcVSleep(); + } + BoardModelAttrSet(lbl_1_data_498, 0x40000004); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(lbl_1_data_498, 1, 0.0f, 8.0f, 0x40000001); + BoardPlayerMotionShiftSet(arg0, var_r25, 0.0f, 8.0f, 0); + HuPrcSleep(10); + while (!BoardPlayerMotionEndCheck(arg0)) { + HuPrcVSleep(); + } + if (var_r28 == -1) { + var_r29 = 0x300004; + } else { + var_r29 = 0x300006; + } + BoardModelMotionShiftSet(lbl_1_data_498, 3, 0.0f, 8.0f, 0); + HuAudFXPlay(0x3A); + BoardWinCreate(2, var_r29, 5); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqFadeOut(1, 1000); + HuPrcSleep(24); + BoardPlayerIdleSet(arg0); + BoardCameraMoveSet(1); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + BoardModelMotionShiftSet(lbl_1_data_498, 1, 0.0f, 8.0f, 0x40000001); + fn_1_B6A0(0.0f, 20); + BoardAudSeqPause(0, 0, 1000); +} + +static void fn_1_A408(s32 arg0) { + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float var_f31; + OverlayID var_r29; + s32 temp_r28; + s32 temp_r27; + s32 i; + + BoardPlayerPosGet(arg0, &sp38); + BoardModelPosGet(lbl_1_data_49A, &sp2C); + PSVECSubtract(&sp2C, &sp38, &sp20); + PSVECNormalize(&sp20, &sp20); + BoardModelMotionShiftSet(lbl_1_data_498, 4, 0.0f, 8.0f, 0); + HuPrcSleep(8); + HuAudFXPlay(0x3C); + BoardMusStart(1, 6, 0x7F, 0); + sp14.x = 0.0f; + sp14.y = 250.0f; + sp14.z = 0.0f; + sp8.x = -8.0f; + sp8.y = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI) - 45.0; + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_data_49A, &sp8, &sp14, 1700.0f, -1.0f, 63); + BoardCameraMotionWait(); + BoardCameraTargetModelSet(-1); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + HuPrcSleep(30); + BoardModelAttrSet(lbl_1_data_498, 0x40000004); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(lbl_1_data_498, 1, 0.0f, 8.0f, 0x40000001); + BoardWinCreate(2, MAKE_MESSID(48, 7), 5); + BoardWinWait(); + BoardWinKill(); + fn_1_BD08(0); + BoardPlayerPosGet(arg0, &sp38); + BoardAudSeqFadeOut(1, 1000); + BoardModelMotionShiftSet(lbl_1_data_498, 2, 0.0f, 10.0f, 0); + HuPrcSleep(55); + BoardPlayerMotionShiftSet(arg0, 4, 0.0f, 5.0f, 0); + HuPrcSleep(5); + temp_r28 = HuAudFXPlay(0x3D); + BoardPlayerPosGet(arg0, &sp20); + var_f31 = 0.0f; + while (TRUE) { + if (BoardModelMotionTimeGet(lbl_1_data_498) >= 90.0f) { + BoardModelAttrSet(lbl_1_data_498, 0x40000002); + } + sp38.y += 50.0f; + if (sp38.y > sp20.y + 700.0f) { + break; + } + BoardPlayerPosSetV(arg0, &sp38); + HuPrcVSleep(); + var_f31 += 1.0f; + } + BoardModelVisibilitySet(lbl_1_data_498, 0); + _SetFlag(FLAG_ID_MAKE(1, 28)); + _SetFlag(FLAG_ID_MAKE(1, 14)); + WipeColorSet(0xFF, 0xFF, 0xFF); + WipeCreate(2, 0, -1); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + if (temp_r28 >= 0) { + while (HuAudFXStatusGet(temp_r28) != 0) { + HuPrcVSleep(); + } + } + HuAudFXAllStop(); + BoardAudSeqFadeOutAll(); + lbl_1_bss_0->unk06 = BoardRollTypeGet() + 1; + if (BoardRandMod(100) < 50) { + var_r29 = OVL_M457; + GWMGAvailSet(0x1C9); + GWSystem.mg_next = 0x38; + } else { + var_r29 = OVL_M458; + GWMGAvailSet(0x1CA); + GWSystem.mg_next = 0x39; + } + _SetFlag(FLAG_ID_MAKE(1, 6)); + BoardDiceDigit2DUpdateEnable(arg0); + if (!_CheckFlag(FLAG_ID_MAKE(1, 12))) { + GWPlayer->coin_win = 0; + } + if (!_CheckFlag(FLAG_ID_MAKE(1, 12))) { + GWPlayer[1].coin_win = 0; + } + if (!_CheckFlag(FLAG_ID_MAKE(1, 12))) { + GWPlayer[2].coin_win = 0; + } + if (!_CheckFlag(FLAG_ID_MAKE(1, 12))) { + GWPlayer[3].coin_win = 0; + } + _ClearFlag(FLAG_ID_MAKE(1, 7)); + for (i = 0; i < 4; i++) { + if (GWPlayerTeamGet(i)) { + GWPlayer[i].team_backup = 1; + } else { + GWPlayer[i].team_backup = 0; + } + if (i == arg0) { + GWPlayerCfg[i].group = 0; + } else { + GWPlayerCfg[i].group = 1; + } + } + if (GWPlayer[arg0].com && !GWMGShowComGet()) { + if (BoardRandMod(100) > 60) { + _SetFlag(FLAG_ID_MAKE(1, 7)); + } + BoardAudSeqFadeOutFast(0); + BoardAudSeqFadeOutFast(1); + lbl_1_bss_0->unk00_field4 = 0; + fn_1_BD08(1); + HuPrcSleep(60); + for (i = 0; i < 4; i++) { + temp_r27 = GWPlayer[i].team_backup; + GWPlayer[i].team = temp_r27; + GWPlayerCfg[i].group = temp_r27; + } + fn_1_AB4C(arg0, GWPlayer[arg0].space_curr); + BoardMusStartBoard(); + _ClearFlag(FLAG_ID_MAKE(1, 6)); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + BoardDiceDigit2DInit(arg0, 0); + } else { + BoardNextOvlSet(var_r29); + } +} + +static void fn_1_AB4C(s32 arg0, s32 arg1) { + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + Vec spC; + s16 i; + s16 var_r27; + s16 var_r30; + s16 var_r24; + s32 var_r26; + s32 var_r25; + s32 temp_r23; + s32 var_r29; + + var_r29 = 0; + lbl_1_bss_F0 = 1; + if (GWPlayer[arg0].com && !GWMGShowComGet()) { + BoardModelVisibilitySet(lbl_1_data_498, 1); + BoardModelVisibilitySet(lbl_1_data_49A, 1); + BoardModelMotionStart(lbl_1_data_498, 1, 0x40000001); + BoardPlayerMotionStart(arg0, 1, 0x40000001); + } + BoardStatusItemSet(1); + BoardMusStart(1, 6, 0x7F, 0); + BoardRollTypeSet(lbl_1_bss_0->unk06 - 1); + lbl_1_bss_0->unk06 = 0; + BoardSpacePosGet(0, arg1, &sp3C); + BoardPlayerPosSetV(arg0, &sp3C); + BoardModelPosGet(lbl_1_data_49A, &sp30); + PSVECSubtract(&sp30, &sp3C, &sp24); + PSVECNormalize(&sp24, &sp24); + BoardPlayerRotYSet(arg0, 180.0 * (atan2(sp24.x, sp24.z) / M_PI)); + BoardPlayerSizeSet(arg0, 2); + sp18.x = 0.0f; + sp18.y = 150.0f; + sp18.z = 0.0f; + spC.x = -25.0f; + spC.y = 180.0 * (atan2(-sp24.x, -sp24.z) / M_PI); + spC.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_data_49A, &spC, &sp18, 2000.0f, -1.0f, 2); + BoardCameraMotionWait(); + BoardCameraTargetModelSet(-1); + WipeCreate(1, 0, 21); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + _ClearFlag(FLAG_ID_MAKE(1, 28)); + _ClearFlag(FLAG_ID_MAKE(1, 14)); + if (_CheckFlag(FLAG_ID_MAKE(1, 7))) { + var_r29 = 0; + } else { + var_r29 = 1; + } + if (var_r29 != 0) { + var_r26 = MAKE_MESSID(48, 10); + var_r25 = 8; + HuAudFXPlay(0x3A); + BoardModelMotionShiftSet(lbl_1_data_498, 3, 0.0f, 8.0f, 0); + } else { + var_r26 = MAKE_MESSID(48, 8); + var_r25 = 7; + } + HuAudFXPlay(0x3C); + BoardWinCreate(2, var_r26, 5); + BoardWinWait(); + BoardWinKill(); + BoardPlayerMotBlendSet(arg0, BoardPlayerRotYGet(arg0) + 180.0f, 0x14); + while (!BoardPlayerMotBlendCheck(arg0)) { + HuPrcVSleep(); + } + if (var_r29 != 0) { + BoardModelMotionShiftSet(lbl_1_data_498, 7, 0.0f, 8.0f, 0); + temp_r23 = BoardPlayerCoinsGet(arg0); + var_r30 = temp_r23 - (BoardPlayerCoinsGet(arg0) >> 1); + if (var_r30 < 0) { + var_r30 = 0; + } + if (var_r30 >= 50) { + var_r27 = 1; + } else if (var_r30 >= 20) { + var_r27 = 3; + } else { + var_r27 = 6; + } + for (i = 0; i < var_r30; i++) { + BoardPlayerCoinsAdd(arg0, -1); + HuAudFXPlay(0xE); + HuPrcSleep(var_r27); + } + HuAudFXPlay(0xF); + } else { + BoardModelMotionShiftSet(lbl_1_data_498, 8, 0.0f, 8.0f, 0); + BoardWinCreate(2, MAKE_MESSID(48, 9), 5); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqFadeOut(1, 1000); + lbl_1_data_4A2 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 16), NULL, 0); + HuAudFXPlay(0x4A8); + BoardModelPosGet(lbl_1_data_49A, &sp30); + BoardModelPosSetV(lbl_1_data_4A2, &sp30); + BoardModelMotionStart(lbl_1_data_4A2, 0, 0); + BoardModelScaleSet(lbl_1_data_4A2, 2.0f, 2.0f, 2.0f); + while (BoardModelMotionTimeGet(lbl_1_data_4A2) < 110.0f) { + HuPrcVSleep(); + } + BoardModelVisibilitySet(lbl_1_data_498, 0); + BoardModelVisibilitySet(lbl_1_data_49A, 0); + while (!BoardModelMotionEndCheck(lbl_1_data_4A2)) { + HuPrcVSleep(); + } + BoardModelVisibilitySet(lbl_1_data_4A2, 0); + lbl_1_bss_0->unk00_field3 = 1; + var_r24 = BoardSpaceStarGet(lbl_1_bss_0->unk04 - 1); + BoardSpaceTypeSet(0, var_r24, 1); + BoardMusStartBoard(); + } + BoardPlayerMotionShiftSet(arg0, var_r25, 0.0f, 8.0f, 0); + HuPrcSleep(8); + BoardModelAttrSet(lbl_1_data_498, 0x40000004); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + while (!BoardPlayerMotionEndCheck(arg0)) { + HuPrcVSleep(); + } + if (var_r29 != 0) { + BoardAudSeqFadeOut(1, 1000); + } + HuPrcSleep(48); + BoardModelMotionShiftSet(lbl_1_data_498, 1, 0.0f, 8.0f, 0x40000001); + BoardPlayerIdleSet(arg0); + fn_1_B6A0(0.0f, 20); +} + +static void fn_1_B27C(s32 arg0) { + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + s16 i; + s32 var_r29; + s16 var_r28; + u16 var_r27; + + BoardPlayerPosGet(arg0, &sp38); + BoardModelPosGet(lbl_1_data_49A, &sp2C); + PSVECSubtract(&sp2C, &sp38, &sp20); + PSVECNormalize(&sp20, &sp20); + BoardModelMotionShiftSet(lbl_1_data_498, 4, 0.0f, 8.0f, 0); + HuPrcSleep(8); + HuAudFXPlay(0x3C); + sp14.x = 0.0f; + sp14.y = 150.0f; + sp14.z = 0.0f; + sp8.x = -14.0f; + sp8.y = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI); + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_data_49A, &sp8, &sp14, 1620.0f, -1.0f, 21); + BoardCameraMotionWait(); + BoardCameraTargetModelSet(-1); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(arg0); + HuPrcSleep(30); + BoardModelAttrSet(lbl_1_data_498, 0x40000004); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(lbl_1_data_498, 1, 0.0f, 8.0f, 0x40000001); + BoardMusStart(1, 6, 0x7F, 0); + BoardModelMotionShiftSet(lbl_1_data_498, 7, 0.0f, 8.0f, 0); + HuPrcSleep(8); + var_r29 = 0x300026; + var_r27 = 50; + BoardWinCreate(2, var_r29, 5); + BoardWinWait(); + var_r28 = 1; + for (i = 0; i < var_r27; i++) { + BoardPlayerCoinsAdd(arg0, 1); + HuAudFXPlay(7); + HuPrcSleep(var_r28); + } + HuAudFXPlay(0xF); + BoardPlayerMotBlendSet(arg0, BoardPlayerRotYGet(arg0) + 180.0f, 0x14); + while (!BoardPlayerMotBlendCheck(arg0)) { + HuPrcVSleep(); + } + BoardModelAttrSet(lbl_1_data_498, 0x40000004); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + var_r29 = 0x300027; + BoardModelMotionShiftSet(lbl_1_data_498, 3, 0.0f, 8.0f, 0); + HuAudFXPlay(0x3A); + BoardWinCreate(2, var_r29, 5); + BoardWinWait(); + BoardWinKill(); + BoardModelMotionShiftSet(lbl_1_data_498, 1, 0.0f, 8.0f, 0x40000001); + BoardAudSeqFadeOut(1, 1000); + HuPrcSleep(24); + BoardPlayerIdleSet(arg0); + BoardCameraMoveSet(1); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + fn_1_B6A0(0.0f, 20); + BoardAudSeqPause(0, 0, 1000); +} + +static void fn_1_B6A0(float arg0, s16 arg1) { + float var_f30; + float var_f28; + float var_f27; + float var_f26; + float var_f25; + float var_f24; + + if (arg1 <= 0) { + arg1 = 1; + } + OSs16tof32(&arg1, &var_f24); + arg0 = BoardDAngleCalc(arg0); + var_f26 = BoardDAngleCalc(BoardModelRotYGet(lbl_1_data_498)); + var_f30 = BoardDAngleCalc(arg0 - var_f26); + var_f25 = var_f30 / var_f24; + if (var_f30 < 0.0f) { + var_f28 = -var_f30; + } else { + var_f28 = var_f30; + } + if (var_f28 < 5.0f) { + BoardModelRotYSet(lbl_1_data_498, arg0); + return; + } + BoardModelMotionShiftSet(lbl_1_data_498, 6, 0.0f, 8.0f, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_data_498, 2.0f); + while (arg1 > 0) { + var_f27 = var_f25 + BoardModelRotYGet(lbl_1_data_498); + BoardModelRotYSet(lbl_1_data_498, var_f27); + HuPrcVSleep(); + arg1--; + } + BoardModelRotYSet(lbl_1_data_498, arg0); + BoardModelMotionShiftSet(lbl_1_data_498, 1, 0.0f, 8.0f, 0x40000001); +} + +static void fn_1_B8E0(omObjData *arg0) { + Mtx sp14; + Vec sp8; + float temp_f30; + BssECWork *temp_r30; + + temp_r30 = OM_GET_WORK_PTR(arg0, BssECWork); + if (temp_r30->unk00_field0 != 0 || lbl_1_data_49A == -1 || BoardIsKill()) { + fn_1_BB10(0); + lbl_1_bss_EC = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + // Bug? Likely to be "%=" instead. + temp_r30->unk0C % 360; + OSs16tof32(&temp_r30->unk0C, &temp_f30); + temp_f30 = 0.5 * sin(temp_f30 * M_PI / 180.0); + BoardModelPosGet(lbl_1_data_49A, &sp8); + sp8.y += temp_f30; + BoardModelPosSetV(lbl_1_data_49A, &sp8); + if (temp_r30->unk04 != 0 && lbl_1_bss_0->unk00_field4 == 0) { + Hu3DModelObjMtxGet(BoardModelIDGet(lbl_1_data_49A), "kuppa", sp14); + Hu3DMtxTransGet(sp14, &sp8); + BoardModelPosSetV(lbl_1_data_498, &sp8); + } + if (temp_r30->unk08 != 0) { + Hu3DModelObjMtxGet(BoardModelIDGet(lbl_1_data_498), "itemhook_M", sp14); + Hu3DMtxTransGet(sp14, &sp8); + BoardModelPosSetV(lbl_1_data_49E, &sp8); + } + temp_r30->unk0C += 4; +} + +static void fn_1_BB10(s32 arg0) { + float var_f30; + BssECWork *var_r30; + + if (lbl_1_bss_EC) { + var_r30 = OM_GET_WORK_PTR(lbl_1_bss_EC, BssECWork); + var_r30->unk08 = arg0; + } + if (arg0 != 0) { + if (lbl_1_data_49E == -1) { + OSs8tof32(&lbl_1_data_4A4[lbl_1_bss_0->unk04 - 1], &var_f30); + lbl_1_data_49E = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 14), NULL, 0); + BoardModelRotSet(lbl_1_data_49E, 45.0f, var_f30, 0.0f); + BoardModelScaleSet(lbl_1_data_49E, 1.8f, 1.8f, 1.8f); + BoardModelLayerSet(lbl_1_data_49E, 2); + BoardModelPassSet(lbl_1_data_49E, 1); + BoardModelMotionStart(lbl_1_data_49E, 0, 0x40000001); + BoardModelVisibilitySet(lbl_1_data_49E, 1); + } + } else if (lbl_1_data_49E != -1) { + BoardModelKill(lbl_1_data_49E); + lbl_1_data_49E = -1; + } +} + +static void fn_1_BD08(s32 arg0) { + BssECWork *var_r31; + + if (lbl_1_bss_EC) { + var_r31 = OM_GET_WORK_PTR(lbl_1_bss_EC, BssECWork); + var_r31->unk04 = arg0; + } +} + +static void fn_1_BD44(void) { + BssECWork *var_r31; + + if (lbl_1_bss_EC) { + var_r31 = OM_GET_WORK_PTR(lbl_1_bss_EC, BssECWork); + var_r31->unk00_field0 = 1; + } +} + +static void fn_1_BD8C(s32 arg0) { + Vec sp24; + Vec sp18; + Vec spC; + float var_f26; + float var_f25; + + OSs8tof32(&lbl_1_data_4A4[lbl_1_bss_0->unk04 - 1], &var_f25); + BoardPlayerPosGet(arg0, &sp18); + BoardModelPosGet(lbl_1_data_49A, &sp24); + PSVECSubtract(&sp18, &sp24, &spC); + var_f26 = 180.0 * (atan2(spC.x, spC.z) / M_PI); + BoardPlayerMotBlendSet(arg0, var_f26 + 180.0f, 0x14); + fn_1_B6A0(var_f25, 20); + while (!BoardPlayerMotBlendCheck(arg0)) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(arg0); +} + +void fn_1_C108(s32 arg0) { + if (arg0 != 0) { + BoardModelMotionShiftSet(lbl_1_data_498, 2, 0.0f, 10.0f, 0); + BoardModelMotionSpeedSet(lbl_1_data_498, 2.0f); + HuPrcSleep(30); + lbl_1_bss_0->unk00_field4 = 1; + while (BoardModelMotionTimeGet(lbl_1_data_498) < 90.0f) { + HuPrcVSleep(); + } + BoardModelAttrSet(lbl_1_data_498, 0x40000002); + } else { + lbl_1_bss_0->unk00_field4 = 0; + BoardModelMotionStart(lbl_1_data_498, 2, 0); + BoardModelMotionTimeSet(lbl_1_data_498, 90.0f); + BoardModelMotionSpeedSet(lbl_1_data_498, 2.0f); + HuPrcSleep(2); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(lbl_1_data_498, 1, 0.0f, 8.0f, 0x40000001); + } +} + +void fn_1_C2B4(void) { + s32 i; + + if (lbl_1_bss_0->unk00_field3 != 0) { + return; + } + if (lbl_1_bss_0->unk03 != 0) { + lbl_1_bss_0->unk03--; + return; + } + for (i = 0; i < 4; i++) { + if (BoardPlayerAutoSizeGet(i) != 0) { + return; + } + } + if ((BoardPlayerCoinsGet(0) > 5 || BoardPlayerCoinsGet(1) > 5 || BoardPlayerCoinsGet(2) > 5 || BoardPlayerCoinsGet(3) > 5) && GWSystem.turn > 5) { + lbl_1_bss_E8 = HuPrcChildCreate(fn_1_C40C, 0x2003, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_E8, fn_1_94D4); + while (lbl_1_bss_E8) { + HuPrcVSleep(); + } + } +} + +static void fn_1_C40C(void) { + Vec sp20; + Vec sp14; + Vec sp8; + float var_f30; + s16 var_r29; + s16 i; + + OSs8tof32(&lbl_1_data_4A4[lbl_1_bss_0->unk04 - 1], &var_f30); + sp14.x = 0.0f; + sp14.y = 150.0f; + sp14.z = 0.0f; + sp8.x = -14.0f; + sp8.y = var_f30; + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_data_49A, &sp8, &sp14, 1620.0f, -1.0f, 1); + BoardCameraMotionWait(); + BoardCameraTargetModelSet(-1); + BoardModelRotYSet(lbl_1_data_498, var_f30); + lbl_1_data_4A0 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 99), NULL, 0); + BoardModelVisibilitySet(lbl_1_data_4A0, 0); + BoardModelLayerSet(lbl_1_data_4A0, 2); + var_r29 = BoardSpaceStarGet(lbl_1_bss_0->unk04 - 1); + var_r29 = BoardSpaceLinkFlagSearch(0, var_r29, 0x04000000); + BoardSpacePosGet(0, var_r29, &sp14); + BoardModelPosGet(lbl_1_data_498, &sp20); + sp20.x += -100.0 * sin(BoardModelRotYGet(lbl_1_data_498) * M_PI / 180.0); + sp20.z += -100.0 * cos(BoardModelRotYGet(lbl_1_data_498) * M_PI / 180.0); + sp20.y += 250.0f; + BoardModelPosSetV(lbl_1_data_4A0, &sp20); + BoardModelScaleSet(lbl_1_data_4A0, 10.0f, 10.0f, 10.0f); + WipeCreate(1, 0, 21); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + BoardMusStart(1, 6, 0x7F, 0); + HuAudFXPlay(0x3B); + BoardWinCreate(2, MAKE_MESSID(48, 11), 5); + BoardWinWait(); + BoardWinKill(); + HuAudFXPlay(0x359); + BoardModelMotionShiftSet(lbl_1_data_498, 4, 0.0f, 10.0f, 0); + HuPrcSleep(11); + HuAudFXPlay(0x33F); + HuAudFXPlay(0x3C); + for (i = 0; i < 4; i++) { + omVibrate(i, 12, 0xC, 0); + } + HuAudFXPlay(0x352); + BoardModelVisibilitySet(lbl_1_data_4A0, 1); + BoardModelMotionStart(lbl_1_data_4A0, 0, 0); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + HuPrcSleep(90); + BoardModelAttrSet(lbl_1_data_498, 0x40000004); + BoardModelVisibilitySet(lbl_1_data_4A0, 0); + while (!BoardModelMotionEndCheck(lbl_1_data_498)) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(lbl_1_data_498, 1, 0.0f, 10.0f, 0); + BoardWinCreate(0, MAKE_MESSID(48, 12), -1); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqFadeOut(1, 1000); + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, 21); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + BoardModelRotYSet(lbl_1_data_498, 0.0f); + BoardCameraMoveSet(0); + BoardCameraViewSet(2); + BoardCameraMotionWait(); + BoardCameraMoveSet(1); + lbl_1_bss_0->unk03 = 3; + _SetFlag(FLAG_ID_MAKE(1, 9)); + for (i = 0; i < 4; i++) { + BoardPlayerPreTurnHookSet(i, fn_1_C9BC); + lbl_1_bss_0->unk05 |= (1 << i); + } + HuPrcEnd(); +} + +static s32 fn_1_C9BC(void) { + omVibrate(GWSystem.player_curr, 90, 6, 6); + HuAudFXPlay(0x314); + HuAudFXPlay(0x313); + BoardPlayerResizeAnimExec(GWSystem.player_curr, 1); + BoardPlayerSizeSet(GWSystem.player_curr, 1); + BoardWinCreate(0, MAKE_MESSID(48, 13), -1); + BoardWinWait(); + BoardWinKill(); + lbl_1_bss_0->unk05 &= ~(1 << GWSystem.player_curr); + return 1; +} + +static s32 fn_1_CA8C(s32 arg0, s32 arg1) { + if (BoardSpaceTypeGet(0, arg1) == 10) { + return 1; + } else { + return 0; + } +} + +static void fn_1_CACC(void) { + Vec sp8; + float var_f30; + s16 var_r30; + s16 var_r29; + s16 var_r28; + + if (lbl_1_bss_0->unk00_field3 != 0) { + BoardModelVisibilitySet(lbl_1_data_498, 0); + BoardModelVisibilitySet(lbl_1_data_49A, 0); + return; + } + BoardModelVisibilitySet(lbl_1_data_49A, 1); + BoardModelVisibilitySet(lbl_1_data_498, 1); + var_r30 = lbl_1_bss_0->unk04 - 1; + OSs8tof32(&lbl_1_data_4A4[var_r30], &var_f30); + var_r28 = BoardSpaceStarGet(var_r30); + var_r29 = BoardSpaceLinkFlagSearch(0, var_r28, 0x04000000); + BoardSpacePosGet(0, var_r29, &sp8); + BoardModelPosSetV(lbl_1_data_49A, &sp8); + BoardModelPosSetV(lbl_1_data_498, &sp8); + BoardModelRotYSet(lbl_1_data_49A, var_f30); + BoardModelVisibilitySet(lbl_1_data_498, 1); + BoardModelVisibilitySet(lbl_1_data_49A, 1); + BoardModelRotYSet(lbl_1_data_498, 0.0f); +} + +void fn_1_CC90(void) { + s32 var_r31; + + var_r31 = BoardSpaceStarGet(lbl_1_bss_0->unk04 - 1); + BoardSpaceTypeSet(0, var_r31, 1); + BoardModelVisibilitySet(lbl_1_data_498, 0); + BoardModelVisibilitySet(lbl_1_data_49A, 0); +} + +void fn_1_CD0C(void) { + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f30; + float var_f29; + s32 var_r28; + s32 var_r27; + s16 var_r29; + s16 var_r26; + s16 var_r25; + s16 var_r30; + s8 *var_r24; + + if (lbl_1_bss_0->unk00_field3 != 0) { + lbl_1_bss_0->unk00_field3 = 0; + } + if (lbl_1_bss_0->unk00_field4 != 0) { + lbl_1_bss_0->unk00_field4 = 0; + } + var_r27 = BoardSpaceStarGetRandom(lbl_1_bss_0->unk04 - 1); + lbl_1_bss_0->unk04 = var_r27 + 1; + fn_1_7FA4(); + if (lbl_1_bss_0->unk00_field3 != 0) { + BoardModelVisibilitySet(lbl_1_data_498, 0); + BoardModelVisibilitySet(lbl_1_data_49A, 0); + } else { + BoardModelVisibilitySet(lbl_1_data_49A, 1); + BoardModelVisibilitySet(lbl_1_data_498, 1); + var_r29 = lbl_1_bss_0->unk04 - 1; + var_r24 = &lbl_1_data_4A4[var_r29]; + OSs8tof32(var_r24, &var_f29); + var_r26 = BoardSpaceStarGet(var_r29); + var_r25 = BoardSpaceLinkFlagSearch(0, var_r26, 0x04000000); + BoardSpacePosGet(0, var_r25, &sp8); + BoardModelPosSetV(lbl_1_data_49A, &sp8); + BoardModelPosSetV(lbl_1_data_498, &sp8); + BoardModelRotYSet(lbl_1_data_49A, var_f29); + BoardModelVisibilitySet(lbl_1_data_498, 1); + BoardModelVisibilitySet(lbl_1_data_49A, 1); + BoardModelRotYSet(lbl_1_data_498, 0.0f); + } + BoardModelVisibilitySet(lbl_1_data_498, 1); + BoardModelVisibilitySet(lbl_1_data_49A, 1); + BoardModelPosGet(lbl_1_data_498, &sp20); + BoardViewFocusGetPos(&sp2C); + PSVECSubtract(&sp2C, &sp20, &sp14); + sp14.y = 0.0f; + temp_f30 = PSVECMag(&sp14); + if (temp_f30 > 3000.0f) { + var_r30 = 180; + } else if (temp_f30 > 1500.0f) { + var_r30 = 90; + } else { + var_r30 = 60; + } + BoardViewFocusSet(&sp20, var_r30); + var_r28 = BoardSpaceStarGet(lbl_1_bss_0->unk04 - 1); + BoardSpaceTypeSet(0, var_r28, 10); + BoardViewMoveEnd(); + while (!BoardViewMoveCheck()) { + HuPrcVSleep(); + } + BoardWinCreate(3, 0x300001, -1); + BoardWinWait(); + BoardWinKill(); +} diff --git a/src/REL/w06Dll/main.c b/src/REL/w06Dll/main.c index d629ed78..827796cf 100755 --- a/src/REL/w06Dll/main.c +++ b/src/REL/w06Dll/main.c @@ -229,15 +229,15 @@ static s32 fn_1_900(void) { var_r30 = GWPlayer[GWSystem.player_curr].space_curr; temp_r31 = BoardSpaceFlagGet(0, var_r30) & 0x600000; if (temp_r31 == 0x200000) { - fn_1_1054(); // TODO: return? + fn_1_1054(); } else if (temp_r31 == 0x400000) { - fn_1_4A60(); // TODO: return? + fn_1_4A60(); } } static s32 fn_1_984(void) { if (BoardPlayerSizeGet(GWSystem.player_curr) != 2) { - fn_1_6EF0(); // TODO: return? + fn_1_6EF0(); } }