diff --git a/config/GMPE01_00/rels/w05Dll/symbols.txt b/config/GMPE01_00/rels/w05Dll/symbols.txt index 591987af..ba96e087 100644 --- a/config/GMPE01_00/rels/w05Dll/symbols.txt +++ b/config/GMPE01_00/rels/w05Dll/symbols.txt @@ -114,63 +114,63 @@ lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 scope:local data:f lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 scope:local data:float lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 data:float -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 data:float -lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 data:float -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 data:double -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 data:float -lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 data:float -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_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:0x8 data:double -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 data:float -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 data:float -lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 data:float -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 data:float -lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 data:float -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 data:double -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x8 data:double -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 data:double -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 data:double -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 data:double -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 data:float -lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 data:float -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 data:double -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 data:float -lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 data:float -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x8 data:double -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 data:4byte -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 data:float -lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_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:0x8 scope:local data:double +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 scope:local data:float +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 scope:local data:float +lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 scope:local data:float +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 scope:local data:double +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x8 scope:local data:double +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 scope:local data:double +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 scope:local data:double +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 scope:local data:double +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 scope:local data:float +lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 scope:local data:float +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 scope:local data:double +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 scope:local data:float +lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 scope:local data:float +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x8 scope:local data:double +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 scope:local data:4byte +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 scope:local data:float lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float @@ -264,20 +264,20 @@ lbl_1_data_188 = .data:0x00000188; // type:object size:0x10 lbl_1_data_198 = .data:0x00000198; // type:object size:0x8 lbl_1_data_1A0 = .data:0x000001A0; // type:object size:0x8 scope:local data:float lbl_1_data_1A8 = .data:0x000001A8; // type:object size:0xC -lbl_1_data_1B4 = .data:0x000001B4; // type:object size:0x7 data:string -lbl_1_data_1BB = .data:0x000001BB; // type:object size:0x9 +lbl_1_data_1B4 = .data:0x000001B4; // type:object size:0x7 scope:local data:string +lbl_1_data_1BB = .data:0x000001BB; // type:object size:0x9 scope:local lbl_1_data_1C4 = .data:0x000001C4; // type:object size:0x8 data:4byte lbl_1_data_1CC = .data:0x000001CC; // type:object size:0xC -lbl_1_data_1D8 = .data:0x000001D8; // type:object size:0x8 data:string -lbl_1_data_1E0 = .data:0x000001E0; // type:object size:0x8 data:string -lbl_1_data_1E8 = .data:0x000001E8; // type:object size:0xA data:string -lbl_1_data_1F2 = .data:0x000001F2; // type:object size:0xB data:string -lbl_1_data_200 = .data:0x00000200; // type:object size:0x8 data:string -lbl_1_data_208 = .data:0x00000208; // type:object size:0x8 data:string -lbl_1_data_210 = .data:0x00000210; // type:object size:0x6 data:string -lbl_1_data_216 = .data:0x00000216; // type:object size:0x6 data:string -lbl_1_data_21C = .data:0x0000021C; // type:object size:0x7 data:string -lbl_1_data_223 = .data:0x00000223; // type:object size:0x7 data:string +lbl_1_data_1D8 = .data:0x000001D8; // type:object size:0x8 scope:local data:string +lbl_1_data_1E0 = .data:0x000001E0; // type:object size:0x8 scope:local data:string +lbl_1_data_1E8 = .data:0x000001E8; // type:object size:0xA scope:local data:string +lbl_1_data_1F2 = .data:0x000001F2; // type:object size:0xB scope:local data:string +lbl_1_data_200 = .data:0x00000200; // type:object size:0x8 scope:local data:string +lbl_1_data_208 = .data:0x00000208; // type:object size:0x8 scope:local data:string +lbl_1_data_210 = .data:0x00000210; // type:object size:0x6 scope:local data:string +lbl_1_data_216 = .data:0x00000216; // type:object size:0x6 scope:local data:string +lbl_1_data_21C = .data:0x0000021C; // type:object size:0x7 scope:local data:string +lbl_1_data_223 = .data:0x00000223; // type:object size:0x7 scope:local data:string lbl_1_data_22C = .data:0x0000022C; // type:object size:0x18 lbl_1_data_244 = .data:0x00000244; // type:object size:0x18 lbl_1_data_25C = .data:0x0000025C; // type:object size:0x48 @@ -317,7 +317,7 @@ lbl_1_bss_14 = .bss:0x00000014; // type:object size:0xE data:2byte lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x2 data:2byte lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x8 data:2byte lbl_1_bss_38 = .bss:0x00000038; // type:object size:0xC data:float -lbl_1_bss_44 = .bss:0x00000044; // type:object size:0x2 data:2byte +lbl_1_bss_44 = .bss:0x00000044; // type:object size:0x4 data:2byte lbl_1_bss_48 = .bss:0x00000048; // type:object size:0x2 data:2byte lbl_1_bss_4A = .bss:0x0000004A; // type:object size:0x2 data:2byte lbl_1_bss_4C = .bss:0x0000004C; // type:object size:0x2 data:2byte diff --git a/configure.py b/configure.py index b3d0471f..82d3a5ea 100644 --- a/configure.py +++ b/configure.py @@ -1283,8 +1283,8 @@ config.libs = [ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w05Dll/main.c"), Object(Matching, "REL/w05Dll/hotel.c"), - Object(NonMatching, "REL/w05Dll/monkey.c"), - Object(NonMatching, "REL/w05Dll/dolphin.c"), + Object(Matching, "REL/w05Dll/monkey.c"), + Object(Matching, "REL/w05Dll/dolphin.c"), Object(NonMatching, "REL/w05Dll/mg_item.c"), Object(NonMatching, "REL/w05Dll/mg_coin.c"), } diff --git a/include/REL/w05Dll.h b/include/REL/w05Dll.h index 1915bf2c..ac413078 100644 --- a/include/REL/w05Dll.h +++ b/include/REL/w05Dll.h @@ -26,6 +26,38 @@ s16 fn_1_14FC(void); void fn_1_155C(void); void fn_1_1E44(void); +void fn_1_2B40(void); +void fn_1_2C7C(s32); +void fn_1_3044(void); +void fn_1_3430(void); +void fn_1_3514(void); +void fn_1_3D88(void); +void fn_1_3E8C(void); + +void fn_1_3F74(void); +void fn_1_3FD8(void); +void fn_1_4034(s32); +void fn_1_4EB4(s32, s32, Vec*); +void fn_1_5648(void); +void fn_1_5794(s32, s32, Vec*); +void fn_1_6670(void); +omObjData* fn_1_66C0(u32, Vec*); +void fn_1_6914(omObjData*); +void fn_1_62AC(s32, Vec*); +void fn_1_64BC(void); +void fn_1_65E8(void); +void fn_1_6670(void); +omObjData* fn_1_66C0(u32, Vec*); +void fn_1_6914(omObjData*); + +// unknown +void fn_1_62AC(s32, Vec*); +void fn_1_64BC(); +void fn_1_65E8(); +void fn_1_6670(); +omObjData* fn_1_66C0(u32, Vec*); +void fn_1_6914(omObjData*); + // structs typedef struct bitcopy { u32 unk_00; @@ -42,6 +74,7 @@ extern s16 lbl_1_data_120; extern s32 lbl_1_data_124[8]; extern s32 lbl_1_data_144[2]; extern s32 lbl_1_data_14C; + extern s32 lbl_1_data_150[5]; extern s16 lbl_1_data_164; extern u32 lbl_1_data_170[4]; @@ -50,7 +83,32 @@ extern s16 lbl_1_data_184; extern s32 lbl_1_data_188[4]; extern s32 lbl_1_data_198[2]; +extern s32 lbl_1_data_1A8[3]; +extern char *lbl_1_data_1C4[2]; +extern s32 lbl_1_data_1CC[3]; + +extern char *lbl_1_data_22C[6]; +extern s32 lbl_1_data_244[6]; +extern Vec lbl_1_data_25C[6]; +extern Vec lbl_1_data_2A4[6]; +extern s32 lbl_1_data_2EC[2]; +extern s32 lbl_1_data_2F4[6]; + // bss +extern s16 lbl_1_bss_72[2]; +extern s16 lbl_1_bss_6C[3]; +extern s32 lbl_1_bss_68; +extern s16 lbl_1_bss_64; +extern s16 lbl_1_bss_58[6]; + +extern s16 lbl_1_bss_4E[2]; +extern s16 lbl_1_bss_4C; +extern s16 lbl_1_bss_4A; +extern s16 lbl_1_bss_48; +extern s16 lbl_1_bss_44[2]; +extern Vec lbl_1_bss_38; +extern s16 lbl_1_bss_30[4]; + extern s16 lbl_1_bss_28; extern s16 lbl_1_bss_14[7]; diff --git a/include/game/board/player.h b/include/game/board/player.h index cad3fb39..03467958 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -115,7 +115,6 @@ void BoardPlayerVoiceEnableSet(s32, s32, s32); void BoardPlayerMoveTo(s32, s32); -void BoardPlayerMoveBetween(s32, s32, s32); void BoardPlayerMoveToAsync(s32, s32); void BoardPlayerPosLerpStart(s32, Vec*, Vec*, s16); void BoardPlayerDiceJumpStart(s32); diff --git a/src/REL/w05Dll/dolphin.c b/src/REL/w05Dll/dolphin.c new file mode 100644 index 00000000..48f35a0a --- /dev/null +++ b/src/REL/w05Dll/dolphin.c @@ -0,0 +1,710 @@ +#include "REL/w05Dll.h" + +#include "game/hsfdraw.h" +#include "game/audio.h" +#include "game/pad.h" +#include "game/objsub.h" +#include "game/wipe.h" +#include "game/chrman.h" +#include "game/frand.h" + +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/window.h" +#include "game/board/audio.h" + +// bss +s16 lbl_1_bss_72[2]; +s16 lbl_1_bss_6C[3]; +s32 lbl_1_bss_68; +s16 lbl_1_bss_64; +s16 lbl_1_bss_58[6]; + +// data +char *lbl_1_data_22C[6] = { "orange1", "orange2", "pine2", "pine1", "suika1", "suika2" }; +s32 lbl_1_data_244[6] = { 0x00790027, 0x00790028, 0x00790029, 0x0079002A, 0x0079002B, 0xFFFFFFFF }; +Vec lbl_1_data_25C[6] = { + { 0.0f, 0.0f, 0.0f }, + { 0.0f, 90.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, + { 0.0f, 180.0f, 0.0f }, + { 0.0f, 270.0f, 0.0f }, + { 0.0f, 90.0f, 0.0f }, +}; +Vec lbl_1_data_2A4[6] = { + { 0.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, + { 0.0f, 300.0f, 0.0f }, + { 0.0f, 450.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, +}; +s32 lbl_1_data_2EC[2] = { 0x76, 0x77 }; +s32 lbl_1_data_2F4[6] = { 0x0079002C, 0x0079002D, 0x0079002E, 0x0079002C, 0x0079002F, 0x00790030 }; + +void fn_1_3F74(void) { + s32 var_r31; + + BoardAudSeqPause(0, 1, 0x3E8); + + for (var_r31 = 0x3C; var_r31 != 0; var_r31--) { + HuPrcVSleep(); + } + + BoardMusStart(1, 0x24, 0x7F, 0); + HuPrcEnd(); +} + +void fn_1_3FD8(void) { + s32 var_r31; + + BoardAudSeqFadeOut(1, 0x3E8); + + for (var_r31 = 0x3C; var_r31 != 0; var_r31--) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 0x3E8); + HuPrcEnd(); +} + +void fn_1_4034(s32 arg0) { + Vec sp40; + Vec sp34; + Vec sp28; + Vec sp1C; + s16 sp14[4]; + s32 sp10; + f32 temp_f22; + f32 temp_f25; + f32 var_f26; + f32 var_f27; + s16 var_r30; + s32 var_r27; + BoardSpace *var_r25; + omObjData* temp_r24; + BoardSpace *var_r28; + s32 var_r31; + s32 temp_r26; + + lbl_1_bss_68 = GWSystem.player_curr; + sp10 = GWPlayer[lbl_1_bss_68].character; + + for (var_r31 = 0; var_r31 < 2; var_r31++) { + lbl_1_bss_72[var_r31] = BoardPlayerMotionCreate(lbl_1_bss_68, lbl_1_data_2EC[var_r31] | lbl_1_data_124[GWPlayer[lbl_1_bss_68].character]); + } + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + lbl_1_bss_6C[var_r31] = BoardModelCreate(0x7000A, NULL, 1); + BoardModelAttrSet(lbl_1_bss_6C[var_r31], 0x40000001); + BoardModelVisibilitySet(lbl_1_bss_6C[var_r31], 0); + } + fn_1_65E8(); + var_r27 = BoardSpaceLinkFlagSearch(0, GWPlayer[lbl_1_bss_68].space_curr, 0x02000000); + BoardPlayerMoveBetween(lbl_1_bss_68, GWPlayer[lbl_1_bss_68].space_curr, var_r27); + var_r28 = BoardSpaceGet(0, var_r27); + + var_r31 = 0; + while (var_r31 < var_r28->link_cnt) { + var_r25 = BoardSpaceGet(0, var_r28->link[var_r31]); + if ((var_r25->flag & 0x02000000) == 0) { + var_r31++; + continue; + } + break; + } + temp_r26 = var_r28->link[var_r31]; + BoardPlayerMotBlendSet(lbl_1_bss_68, lbl_1_data_25C[arg0].y - 180.0f, 5); + + while (BoardPlayerMotBlendCheck(lbl_1_bss_68) == 0) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_68); + HuPrcSleep(8); + lbl_1_bss_64 = BoardModelCreate(0x790026, lbl_1_data_244, 0); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), lbl_1_data_22C[arg0], &sp40); + PSVECAdd(&sp40, &lbl_1_data_2A4[arg0], &sp40); + BoardModelMotionStart(lbl_1_bss_64, 4, 0); + sp40.y = -50.0f; + BoardModelPosSetV(lbl_1_bss_64, &sp40); + BoardModelRotSetV(lbl_1_bss_64, &lbl_1_data_25C[arg0]); + fn_1_66C0(0, &sp40); + + var_r30 = 0; + while (BoardModelMotionTimeGet(lbl_1_bss_64) < BoardModelMotionMaxTimeGet(lbl_1_bss_64)) { + if (BoardModelMotionTimeGet(lbl_1_bss_64) > 50.0f && var_r30 == 0) { + var_r30++; + HuAudFXPlay(0x47D); + HuAudFXPlay(0x48E); + } + if (BoardModelMotionTimeGet(lbl_1_bss_64) > 70.0f && var_r30 == 1) { + var_r30++; + HuAudFXPlay(0x47E); + } + if (BoardModelMotionTimeGet(lbl_1_bss_64) > 105.0f && var_r30 == 2) { + var_r30++; + HuAudFXPlay(0x481); + } + HuPrcVSleep(); + } + BoardModelMotionStart(lbl_1_bss_64, 1, 0x40000001); + temp_r24 = fn_1_66C0(2, &sp40); + BoardCameraViewSet(2); + BoardCameraMotionWait(); + HuAudFXPlay(0x480); + BoardWinCreate(2, 0x270007, 0xA); + BoardWinWait(); + BoardWinKill(); + if (arg0 >= 4) { + HuPrcChildCreate(fn_1_3F74, 0x2001, 0x800, 0, boardMainProc); + } + if ((arg0 & 1) != 0) { + var_r27 = arg0 - 1; + } else { + var_r27 = arg0 + 1; + } + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), lbl_1_data_22C[var_r27], &sp34); + temp_f25 = (180.0 * (atan2((sp34.x - sp40.x), (sp34.z - sp40.z)) / M_PI)); + BoardModelMotionShiftSet(lbl_1_bss_64, 2, 0.0f, 10.0f, 0x40000001); + + while (fn_1_1208(lbl_1_bss_64, temp_f25, 10.0f) == 0) { + HuPrcVSleep(); + } + + BoardPlayerPosGet(lbl_1_bss_68, &sp28); + var_f27 = sqrtf(((sp40.x - sp28.x) * (sp40.x - sp28.x)) + ((sp40.z - sp28.z) * (sp40.z - sp28.z))); + PSVECSubtract(&sp40, &sp28, &sp1C); + PSVECNormalize(&sp1C, &sp1C); + PSVECScale(&sp1C, &sp1C, var_f27 / 50.0f); + BoardPlayerMotionStart(lbl_1_bss_68, 4, 0); + var_f26 = 0.0f; + temp_f22 = 15.0f; + +loop_37: + sp1C.y = temp_f22 - (0.075f * (0.25f * (var_f26 * var_f26))); + var_f26++; + PSVECAdd(&sp28, &sp1C, &sp28); + var_f27 = sqrtf(((sp40.x - sp28.x) * (sp40.x - sp28.x)) + ((sp40.z - sp28.z) * (sp40.z - sp28.z))); + if (var_f27 < 5.0f) { + sp1C.x = sp1C.z = 0.0f; + sp28.x = sp40.x; + sp28.z = sp40.z; + } + + if (sp28.y <= 20.0f + sp40.y) { + sp28.y = 20.0f + sp40.y; + } else { + BoardPlayerPosSetV(lbl_1_bss_68, &sp28); + HuPrcVSleep(); + goto loop_37; + } + BoardPlayerPosSetV(lbl_1_bss_68, &sp28); + BoardPlayerMotionStart(lbl_1_bss_68, lbl_1_bss_72[0], 0); + + while (fn_1_1208(BoardPlayerModelGet(lbl_1_bss_68), temp_f25, 10.0f) == 0) { + HuPrcVSleep(); + } + + while (BoardPlayerMotionEndCheck(lbl_1_bss_68) == 0) { + HuPrcVSleep(); + } + + BoardPlayerMotionStart(lbl_1_bss_68, lbl_1_bss_72[1], 0x40000001); + HuPrcSleep(0x12); + temp_r24->work[1] = 1; + if (arg0 < 4) { + fn_1_4EB4(arg0, temp_r26, &sp34); + } else { + fn_1_5794(arg0, temp_r26, &sp34); + } + BoardModelPosGet(lbl_1_bss_64, &sp40); + BoardPlayerPosGet(lbl_1_bss_68, &sp28); + var_f27 = 180.0 * (atan2((sp40.x - sp28.x), (sp40.z - sp28.z)) / M_PI); + BoardPlayerMotBlendSet(lbl_1_bss_68, var_f27, 0xF); + + while (BoardPlayerMotBlendCheck(lbl_1_bss_68) == 0) { + HuPrcVSleep(); + } + + fn_1_66C0(1, &sp40); + BoardModelMotionShiftSet(lbl_1_bss_64, 5, 0.0f, 5.0f, 0); + var_r30 = 0; + var_r31 = 0; + + while (var_r31 < 0x5AU) { + if ((BoardModelMotionTimeGet(lbl_1_bss_64) > 15.0f) && (var_r30 == 0)) { + var_r30++; + HuAudFXPlay(0x47D); + if (arg0 >= 4) { + BoardAudSeqFadeOut(1, 0x3E8); + HuPrcChildCreate(fn_1_3FD8, 0x2001, 0x800, 0, boardMainProc); + } + } + if ((BoardModelMotionTimeGet(lbl_1_bss_64) > 30.0f) && (var_r30 == 1)) { + var_r30++; + HuAudFXPlay(0x47E); + } + if ((BoardModelMotionTimeGet(lbl_1_bss_64) > 65.0f) && (var_r30 == 2)) { + var_r30++; + HuAudFXPlay(0x481); + } + HuPrcVSleep(); + var_r31++; + } + BoardCameraMoveSet(0); + GWPlayer[lbl_1_bss_68].space_curr = temp_r26; + var_r27 = BoardSpaceLinkTargetListGet(0, temp_r26, sp14); + + for (var_r31 = 0; (s32)var_r31 < var_r27;) { + var_r28 = BoardSpaceGet(0, sp14[var_r31]); + if ((var_r28->flag & 0x80) == 0) { + var_r31++; + continue; + } + break; + } + BoardPlayerMoveBetween(lbl_1_bss_68, temp_r26, sp14[var_r31]); + GWPlayer[lbl_1_bss_68].space_curr = sp14[var_r31]; + BoardPlayerIdleSet(lbl_1_bss_68); + HuPrcSleep(8); + if (arg0 >= 4) { + BoardStatusShowSetAll(1); + } + BoardModelKill(lbl_1_bss_64); + + for (var_r31 = 0; var_r31 < 2; var_r31++) { + BoardPlayerMotionKill(lbl_1_bss_68, lbl_1_bss_72[var_r31]); + } + + fn_1_6670(); + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + BoardModelKill(lbl_1_bss_6C[var_r31]); + } +} + +void fn_1_4EB4(s32 arg1, s32 arg2, Vec* arg3) { + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + f32 temp_f19; + f32 temp_f23; + f32 var_f20; + f32 var_f22; + f32 var_f24; + f32 var_f28; + omObjData* temp_r30; + omObjData* temp_r29; + s32 temp_r28; + + temp_f23 = 10.0f; + BoardModelPosGet(lbl_1_bss_64, &sp3C); + arg3->y = sp3C.y; + PSVECSubtract(arg3, &sp3C, &sp24); + PSVECNormalize(&sp24, &sp24); + PSVECScale(&sp24, &sp24, temp_f23); + temp_r28 = HuAudFXPlay(0x47F); + BoardModelPosGet(lbl_1_bss_64, &sp18); + temp_r30 = fn_1_66C0(4, &sp18); + temp_r29 = fn_1_66C0(5, &sp18); +loop_1: + var_f28 = sqrtf((arg3->x - sp3C.x) * (arg3->x - sp3C.x) + (arg3->z - sp3C.z) * (arg3->z - sp3C.z)); + if (var_f28 <= temp_f23) { + sp3C.x = arg3->x; + sp3C.z = arg3->z; + BoardModelPosSetV(lbl_1_bss_64, &sp3C); + sp30 = sp3C; + sp30.y += 20.0f; + BoardPlayerPosSetV(lbl_1_bss_68, &sp30); + } else { + PSVECAdd(&sp3C, &sp24, &sp3C); + BoardModelPosSetV(lbl_1_bss_64, &sp3C); + sp30 = sp3C; + sp30.y += 20.0f; + BoardPlayerPosSetV(lbl_1_bss_68, &sp30); + HuPrcVSleep(); + goto loop_1; + } + HuAudFXStop(temp_r28); + temp_r30->work[1] = 1; + temp_r29->work[1] = 1; + BoardPlayerIdleSet(lbl_1_bss_68); + HuPrcSleep(8); + BoardSpacePosGet(0, arg2, &sp3C); + var_f28 = 180.0 * (atan2((sp3C.x - sp30.x), (sp3C.z - sp30.z)) / M_PI); + BoardPlayerMotBlendSet(lbl_1_bss_68, var_f28, 0xF); + + while (BoardPlayerMotBlendCheck(lbl_1_bss_68) == 0) { + HuPrcVSleep(); + } + + BoardPlayerPosGet(lbl_1_bss_68, &sp30); + var_f28 = sqrtf(((sp3C.x - sp30.x) * (sp3C.x - sp30.x)) + ((sp3C.z - sp30.z) * (sp3C.z - sp30.z))); + PSVECSubtract(&sp3C, &sp30, &sp24); + PSVECNormalize(&sp24, &sp24); + PSVECScale(&sp24, &sp24, var_f28 / 45.0f); + BoardPlayerMotionStart(lbl_1_bss_68, 4, 0); + + var_f24 = 0.0f; + temp_f19 = 15.0f; + +loop_14: + sp24.y = temp_f19 - (0.075f * (0.25f * (var_f24 * var_f24))); + var_f24++; + PSVECAdd(&sp30, &sp24, &sp30); + var_f28 = sqrtf(((sp3C.x - sp30.x) * (sp3C.x - sp30.x)) + ((sp3C.z - sp30.z) * (sp3C.z - sp30.z))); + if (var_f28 < 5.0f) { + sp24.x = sp24.z = 0.0f; + sp30.x = sp3C.x; + sp30.z = sp3C.z; + } + if (sp30.y <= sp3C.y && sp24.y < 0.0f) { + sp30.y = sp3C.y; + } else { + BoardPlayerPosSetV(lbl_1_bss_68, &sp30); + HuPrcVSleep(); + goto loop_14; + } + BoardPlayerPosSetV(lbl_1_bss_68, &sp30); +} + +void fn_1_5648(void) { + Vec sp8; + s32 var_r31; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + BoardModelRotGet(lbl_1_bss_6C[var_r31], &sp8); + sp8.y = 0.003921569f * (360.0f * (int)(frand() & 0xFF)); + BoardModelRotSetV(lbl_1_bss_6C[var_r31], &sp8); + } +loop_3: + for (var_r31 = 0; var_r31 < 3; var_r31++) { + BoardModelRotGet(lbl_1_bss_6C[var_r31], &sp8); + sp8.y += 10.0f; + if (sp8.y >= 360.0f) { + sp8.y -= 360.0f; + } + BoardModelRotSetV(lbl_1_bss_6C[var_r31], &sp8); + } + HuPrcVSleep(); + goto loop_3; +} + +void fn_1_5794(s32 arg0, s32 arg1, Vec* arg2) { + Vec sp64; + Vec sp58; + Vec sp4C; + Vec sp40; + Vec sp34; + Vec sp28; + Vec sp1C; + f32 sp18; + Process* temp_r23; + f32 temp_f18; + f32 temp_f22; + f32 var_f27; + f32 var_f23; + f32 var_f28; + omObjData* temp_r27; + omObjData* var_r26; + omObjData* temp_r25; + omObjData* var_r24; + s32 var_r28; + s32 var_r29; + s32 var_r30; + + BoardModelPosGet(lbl_1_bss_64, &sp58); + temp_r23 = HuPrcChildCreate(fn_1_5648, 0x2001, 0x800, 0, boardMainProc); + BoardCameraMoveSet(0); + BoardCameraTargetPlayerSet(lbl_1_bss_68); + BoardCameraRotSet(-15.0f, 180.0f + BoardModelRotYGet(lbl_1_bss_64)); + BoardCameraZoomSet(1400.0f); + BoardStatusShowSetAll(0); + fn_1_62AC(arg0, arg2); + temp_f22 = 10.0f; + arg2->y = sp58.y; + PSVECSubtract(arg2, &sp58, &sp40); + PSVECNormalize(&sp40, &sp40); + PSVECScale(&sp40, &sp40, temp_f22); + if (arg0 == 5) { + var_r29 = 0x96; + } else { + var_r29 = 0x5A; + } + var_f28 = 0.0f; + sp64 = sp58; + BoardModelRotGet(lbl_1_bss_64, &sp34); + BoardPlayerRotGet(lbl_1_bss_68, &sp28); + BoardCameraTargetModelSet(-1); + var_r30 = 0; + var_r28 = HuAudFXPlay(0x47F); + BoardModelPosGet(lbl_1_bss_64, &sp1C); + temp_r27 = fn_1_66C0(4, &sp1C); + temp_r25 = fn_1_66C0(5, &sp1C); + +loop_4: + sp18 = BoardModelRotYGet(lbl_1_bss_64); + sp58 = sp64; + var_f27 = sqrtf(((arg2->x - sp58.x) * (arg2->x - sp58.x)) + ((arg2->z - sp58.z) * (arg2->z - sp58.z))); + if (var_f27 <= temp_f22) { + sp58.x = arg2->x; + sp58.z = arg2->z; + BoardModelPosSetV(lbl_1_bss_64, &sp58); + sp4C = sp58; + sp4C.y += 20.0f; + BoardPlayerPosSetV(lbl_1_bss_68, &sp4C); + } else { + PSVECAdd(&sp58, &sp40, &sp58); + sp64 = sp58; + if (var_r29 == 0) { + sp58.y += 250.0 * sin((M_PI * var_f28) / 180.0); + var_f28 -= 2.5f; + if (var_f28 < -540.0f) { + var_f28 = -540.0f; + } + + if (var_r30 == 0) { + temp_r27->work[1] = 1; + temp_r25->work[1] = 1; + var_r30++; + } else if (var_r30 == 1 && var_f28 < -180.0f) { + HuAudFXStop(var_r28); + HuAudFXPlay(0x47D); + HuAudPlayerVoicePlay(lbl_1_bss_68, 0x125); + fn_1_66C0(3, &sp58); + var_r30++; + } else if ((var_r30 == 2) && (var_f28 < -360.0f)) { + var_r28 = HuAudFXPlay(0x47F); + HuAudFXPlay(0x481); + fn_1_66C0(3, &sp58); + var_r30++; + } else if ((var_r30 == 3) && (-540.0f == var_f28)) { + var_r30++; + BoardModelPosGet(lbl_1_bss_64, &sp1C); + var_r26 = fn_1_66C0(4, &sp1C); + var_r24 = fn_1_66C0(5, &sp1C); + } + } else { + var_r29--; + } + BoardModelPosSetV(lbl_1_bss_64, &sp58); + sp28.x = sp34.x = (45.0 * -sin((M_PI * var_f28) / 180.0)); + BoardModelRotSetV(lbl_1_bss_64, &sp34); + BoardPlayerRotSetV(lbl_1_bss_68, &sp28); + sp4C = sp58; + sp4C.y += 20.0f; + BoardPlayerPosSetV(lbl_1_bss_68, &sp4C); + fn_1_64BC(); + BoardCameraTargetSet(sp58.x, -50.0f, sp58.z); + HuPrcVSleep(); + goto loop_4; + } + HuAudFXStop(var_r28); + var_r26->work[1] = 1; + var_r24->work[1] = 1; + BoardCameraMoveSet(1); + BoardCameraTargetPlayerSet(lbl_1_bss_68); + BoardPlayerIdleSet(lbl_1_bss_68); + HuPrcSleep(8); + BoardSpacePosGet(0, arg1, &sp58); + var_f27 = (180.0 * (atan2((sp58.x - sp4C.x), (sp58.z - sp4C.z)) / M_PI)); + BoardPlayerMotBlendSet(lbl_1_bss_68, var_f27, 0xF); + + while (BoardPlayerMotBlendCheck(lbl_1_bss_68) == 0) { + HuPrcVSleep(); + } + BoardPlayerPosGet(lbl_1_bss_68, &sp4C); + var_f27 = sqrtf(((sp58.x - sp4C.x) * (sp58.x - sp4C.x)) + ((sp58.z - sp4C.z) * (sp58.z - sp4C.z))); + PSVECSubtract(&sp58, &sp4C, &sp40); + PSVECNormalize(&sp40, &sp40); + PSVECScale(&sp40, &sp40, var_f27 / 45.0f); + BoardPlayerMotionStart(lbl_1_bss_68, 4, 0); + var_f23 = 0.0f; + temp_f18 = 15.0f; +loop_32: + sp40.y = temp_f18 - (0.075f * (0.25f * (var_f23 * var_f23))); + var_f23++; + PSVECAdd(&sp4C, &sp40, &sp4C); + var_f27 = sqrtf(((sp58.x - sp4C.x) * (sp58.x - sp4C.x)) + ((sp58.z - sp4C.z) * (sp58.z - sp4C.z))); + if (var_f27 < 5.0f) { + sp40.x = sp40.z = 0.0f; + sp4C.x = sp58.x; + sp4C.z = sp58.z; + } + if (sp4C.y <= sp58.y && sp40.y < 0.0f) { + sp4C.y = sp58.y; + } else { + BoardPlayerPosSetV(lbl_1_bss_68, &sp4C); + HuPrcVSleep(); + goto loop_32; + } + BoardPlayerPosSetV(lbl_1_bss_68, &sp4C); + HuPrcKill(temp_r23); +} + +void fn_1_62AC(s32 arg0, Vec* arg1) { + Vec sp34; + Vec sp28; + Vec sp1C; + Vec sp10; + f32 sp8[2] = { 1950.0f, 2550.0f }; + f32 var_f30; + f32 var_f31; + s32 var_r31; + + BoardModelPosGet(lbl_1_bss_64, &sp34); + arg0 -= 4; + arg1->y = sp34.y; + PSVECSubtract(arg1, &sp34, &sp28); + PSVECNormalize(&sp28, &sp28); + var_f31 = 45.0f; + var_r31 = 0; + while (var_r31 < 3) { + sp1C = sp28; + sp10 = sp28; + PSVECScale(&sp1C, &sp1C, sp8[arg0]); + sp1C.y += (250.0 * sin((M_PI * var_f31) / 180.0)); + var_f30 = (250.0 * -cos((M_PI * var_f31) / 180.0)); + PSVECScale(&sp10, &sp10, var_f30); + PSVECAdd(&sp10, &sp1C, &sp1C); + PSVECAdd(&sp1C, &sp34, &sp1C); + BoardModelPosSetV(lbl_1_bss_6C[var_r31], &sp1C); + BoardModelVisibilitySet(lbl_1_bss_6C[var_r31], 1); + var_f31 += 45.0f; + var_r31++; + } +} + +void fn_1_64BC(void) { + Vec sp20; + Vec sp14; + Vec sp8; + s32 var_r31; + f32 var_f31; + + BoardPlayerPosGet(lbl_1_bss_68, &sp20); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + if (BoardModelVisibilityGet(lbl_1_bss_6C[var_r31]) != 0) { + BoardModelPosGet(lbl_1_bss_6C[var_r31], &sp14); + PSVECSubtract(&sp14, &sp20, &sp8); + var_f31 = PSVECMag(&sp8); + if (var_f31 < 60.0f) { + CharModelCoinEffectCreate(1, &sp14); + BoardModelVisibilitySet(lbl_1_bss_6C[var_r31], 0); + BoardPlayerCoinsAdd(lbl_1_bss_68, 1); + HuAudFXPlay(7); + omVibrate(lbl_1_bss_68, 0xC, 6, 6); + } + } + } +} + +void fn_1_65E8(void) { + s32 var_r31; + + for (var_r31 = 0; var_r31 < 6; var_r31++) { + lbl_1_bss_58[var_r31] = BoardModelCreate(lbl_1_data_2F4[var_r31], NULL, 0); + BoardModelVisibilitySet(lbl_1_bss_58[var_r31], 0); + } +} + +void fn_1_6670(void) { + s32 var_r31; + + for (var_r31 = 0; var_r31 < 6; var_r31++) { + BoardModelKill(lbl_1_bss_58[var_r31]); + } +} + +omObjData* fn_1_66C0(u32 arg0, Vec* arg1) { + Vec sp8; + omObjData* temp_r31; + f32 temp_f31; + + temp_r31 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_6914); + temp_r31->trans.x = arg1->x; + temp_r31->trans.y = arg1->y; + temp_r31->trans.z = arg1->z; + temp_r31->work[0] = BoardModelCreate(lbl_1_data_2F4[arg0], NULL, 1); + temp_r31->work[2] = arg0; + BoardModelPosSetV(temp_r31->work[0], arg1); + BoardModelMotionTimeSet(temp_r31->work[0], 0.0f); + switch (arg0) { + case 0: + case 1: + break; + case 2: + BoardModelAttrSet(temp_r31->work[0], 0x40000001); + break; + case 3: + BoardModelMotionTimeSet(temp_r31->work[0], 110.0f); + break; + case 4: + temp_f31 = BoardModelRotYGet(lbl_1_bss_64); + BoardModelRotYSet(temp_r31->work[0], temp_f31); + BoardModelAttrSet(temp_r31->work[0], 0x40000001); + BoardModelPosGet(lbl_1_bss_64, &sp8); + temp_r31->rot.x = arg1->x - sp8.x; + temp_r31->rot.y = arg1->y - sp8.y; + temp_r31->rot.z = arg1->z - sp8.z; + BoardModelLayerSet(temp_r31->work[0], 2); + break; + case 5: + temp_f31 = BoardModelRotYGet(lbl_1_bss_64); + BoardModelRotYSet(temp_r31->work[0], temp_f31); + BoardModelAttrSet(temp_r31->work[0], 0x40000001); + BoardModelPosGet(lbl_1_bss_64, &sp8); + temp_r31->rot.x = arg1->x - sp8.x; + temp_r31->rot.y = arg1->y - sp8.y; + temp_r31->rot.z = arg1->z - sp8.z; + break; + } + return temp_r31; +} + +void fn_1_6914(omObjData* arg0) { + Vec sp8; + + if (arg0->work[1] != 0) { + if (arg0->work[2] != 4) { + BoardModelKill(arg0->work[0]); + omDelObjEx(boardObjMan, arg0); + return; + } + BoardModelAttrReset(arg0->work[0], 0x40000001); + BoardModelMotionStartEndSet(arg0->work[0], 0x14, 0x50); + if (BoardModelMotionEndCheck(arg0->work[0]) != 0) { + BoardModelKill(arg0->work[0]); + omDelObjEx(boardObjMan, arg0); + } + } else { + switch (arg0->work[2]) { + case 0: + case 1: + case 3: + if (BoardModelMotionEndCheck(arg0->work[0]) != 0) { + BoardModelKill(arg0->work[0]); + omDelObjEx(boardObjMan, arg0); + return; + } + break; + case 4: + if (BoardModelMotionTimeGet(arg0->work[0]) >= 20.0f) { + BoardModelMotionStartEndSet(arg0->work[0], 0x14, 0x3C); + } + BoardModelPosGet(lbl_1_bss_64, &sp8); + sp8.x += arg0->rot.x; + sp8.y += arg0->rot.y; + sp8.z += arg0->rot.z; + BoardModelPosSetV(arg0->work[0], &sp8); + break; + case 5: + BoardModelPosGet(lbl_1_bss_64, &sp8); + sp8.x += arg0->rot.x; + sp8.y += arg0->rot.y; + sp8.z += arg0->rot.z; + BoardModelPosSetV(arg0->work[0], &sp8); + break; + } + } +} diff --git a/src/REL/w05Dll/main.c b/src/REL/w05Dll/main.c index 708eda8b..641816f2 100644 --- a/src/REL/w05Dll/main.c +++ b/src/REL/w05Dll/main.c @@ -16,11 +16,6 @@ // frand.h extern u32 frandmod(u32); -// #include "REL/w05Dll/monkey.h" -extern void fn_1_2B40(void); -extern void fn_1_2C7C(s32); -// #include "REL/w05Dll/dolphin.h" -extern void fn_1_4034(u32); // #include "REL/w05Dll/mg_item.h" extern void fn_1_6B28(void); extern void fn_1_6B7C(void); diff --git a/src/REL/w05Dll/monkey.c b/src/REL/w05Dll/monkey.c new file mode 100644 index 00000000..015dce7f --- /dev/null +++ b/src/REL/w05Dll/monkey.c @@ -0,0 +1,335 @@ +#include "REL/w05Dll.h" + +#include "game/hsfdraw.h" + +#include "game/board/model.h" +#include "game/board/player.h" + +// data +s32 lbl_1_data_1A8[3] = { 0x0079001F, 0x00790020, 0xFFFFFFFF }; +char *lbl_1_data_1C4[2] = { "monkyA", "monkyB"}; +s32 lbl_1_data_1CC[3] = { 0x78, 0x6F, 0x70 }; + +// bss +s16 lbl_1_bss_4E[2]; +s16 lbl_1_bss_4C; +s16 lbl_1_bss_4A; +s16 lbl_1_bss_48; +s16 lbl_1_bss_44[2]; +Vec lbl_1_bss_38; +s16 lbl_1_bss_30[4]; + +void fn_1_2B40(void) { + s32 var_r31; + + BoardModelAttrSet(lbl_1_bss_14[2], 0x40000002); + BoardModelAttrSet(lbl_1_bss_14[3], 0x40000002); + BoardModelMotionTimeSet(lbl_1_bss_14[2], 0.0f); + BoardModelMotionTimeSet(lbl_1_bss_14[3], 0.0f); + + for (var_r31 = 0; var_r31 < 2; var_r31++) { + lbl_1_bss_4E[var_r31] = BoardModelCreate(0x79001E, lbl_1_data_1A8, 0); + BoardModelAttrSet(lbl_1_bss_4E[var_r31], 0x40000001); + } + BoardModelHookSet(lbl_1_bss_14[2], lbl_1_data_1C4[0], lbl_1_bss_4E[0]); + BoardModelHookSet(lbl_1_bss_14[3], lbl_1_data_1C4[1], lbl_1_bss_4E[1]); +} + +void fn_1_2C7C(s32 arg0) { + Vec spC; + s32 var_r31; + + lbl_1_bss_4C = GWSystem.player_curr; + lbl_1_bss_48 = arg0; + if (lbl_1_bss_48 == 0) { + lbl_1_bss_4A = lbl_1_bss_14[2]; + spC.x = 150.0f; + BoardModelPosGet(lbl_1_bss_4A, &lbl_1_bss_38); + lbl_1_bss_38.x += 140.0f; + } else { + lbl_1_bss_4A = lbl_1_bss_14[3]; + spC.x = -150.0f; + BoardModelPosGet(lbl_1_bss_4A, &lbl_1_bss_38); + lbl_1_bss_38.x -= 140.0f; + } + lbl_1_bss_44[0] = BoardModelCreate(0x79001C, NULL, 0); + lbl_1_bss_44[1] = BoardModelCreate(0x79001D, NULL, 0); + BoardModelVisibilitySet(lbl_1_bss_44[0], 0); + BoardModelVisibilitySet(lbl_1_bss_44[1], 0); + BoardModelAttrSet(lbl_1_bss_44[0], 0x40000001); + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + lbl_1_bss_30[var_r31] = BoardPlayerMotionCreate(lbl_1_bss_4C, lbl_1_data_1CC[var_r31] | lbl_1_data_124[GWPlayer[lbl_1_bss_4C].character]); + } + BoardDiceDigit2DShowSet(0); + BoardPlayerIdleSet(lbl_1_bss_4C); + spC.y = 100.0f; + spC.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_4A, NULL, &spC, 2300.0f, -1.0f, 0x1E); + BoardCameraRotSet(-33.0f, 0.0f); + BoardCameraMotionWait(); + HuAudFXPlay(0x48A); + BoardWinCreate(0, 0x270018, -1); + BoardWinWait(); + BoardWinKill(); + fn_1_3044(); + fn_1_3430(); + if (GWPlayer[lbl_1_bss_4C].bowser_suit != 0) { + fn_1_3D88(); + } else { + fn_1_3514(); + } + BoardPlayerIdleSet(lbl_1_bss_4C); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + BoardDiceDigit2DShowSet(1); + + for (var_r31 = 0; var_r31 < 2; var_r31++) { + BoardModelKill(lbl_1_bss_44[var_r31]); + } + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + BoardPlayerMotionKill(lbl_1_bss_4C, lbl_1_bss_30[var_r31]); + } +} + +void fn_1_3044(void) { + Vec sp20; + Vec sp14; + Vec sp8; + f32 temp_f30; + f32 var_f29; + f32 temp_f28; + f32 var_f31; + + HuPrcSleep(0x1E); + BoardModelMotionStart(lbl_1_bss_4E[lbl_1_bss_48], 1, 0); + BoardModelAttrReset(lbl_1_bss_4A, 0x40000002); + BoardModelMotionTimeSet(lbl_1_bss_4A, 0.0f); + HuPrcSleep(0x88); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_4A), lbl_1_data_1C4[lbl_1_bss_48], &sp20); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_4E[lbl_1_bss_48]), "bakawa1", &sp14); + PSVECAdd(&sp20, &sp14, &sp14); + BoardModelPosSetV(lbl_1_bss_44[0], &sp14); + BoardModelVisibilitySet(lbl_1_bss_44[0], 1); + BoardModelMotionTimeSet(lbl_1_bss_44[0], 0.0f); + HuAudFXPlay(0x48C); + PSVECSubtract(&lbl_1_bss_38, &sp14, &sp8); + sp8.y = 0.0f; + PSVECNormalize(&sp8, &sp8); + PSVECScale(&sp8, &sp8, 8.0f); + temp_f30 = 11.0f; + var_f31 = 0.0f; + + while (1) { + sp8.y = (temp_f30 - (0.075 * (0.25f * (var_f31 * var_f31)))); + var_f31 += 1.0f; + PSVECAdd(&sp14, &sp8, &sp14); + PSVECSubtract(&lbl_1_bss_38, &sp14, &sp20); + sp20.y = 0.0f; + var_f29 = PSVECMag(&sp20); + if (var_f29 <= 8.0f) { + sp14.x = lbl_1_bss_38.x; + sp14.z = lbl_1_bss_38.z; + sp8.x = sp8.z = 0.0f; + } + if (sp14.y <= lbl_1_bss_38.y) { + sp14.y = lbl_1_bss_38.y; + BoardModelVisibilitySet(lbl_1_bss_44[0], 0); + BoardModelVisibilitySet(lbl_1_bss_44[1], 1); + BoardModelPosSetV(lbl_1_bss_44[1], &sp14); + BoardModelMotionTimeSet(lbl_1_bss_44[1], 0.0f); + break; + } else { + BoardModelPosSetV(lbl_1_bss_44[0], &sp14); + if (BoardModelMotionTimeGet(lbl_1_bss_4E[lbl_1_bss_48]) >= BoardModelMotionMaxTimeGet(lbl_1_bss_4E[lbl_1_bss_48])) { + BoardModelMotionStart(lbl_1_bss_4E[lbl_1_bss_48], 0, 0x40000001); + } + HuPrcVSleep(); + } + } +} + +void fn_1_3430(void) { + if (GWPlayer[lbl_1_bss_4C].bowser_suit == 0) { + BoardPlayerMotionShiftSet(lbl_1_bss_4C, lbl_1_bss_30[2], 0.0f, 8.0f, 0); + HuPrcSleep(8); + + while (BoardPlayerMotionEndCheck(lbl_1_bss_4C) == 0) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(lbl_1_bss_4C, lbl_1_bss_30[1], 0x40000001); + HuPrcSleep(0x5A); + return; + } + HuPrcSleep(0x2D); +} + +void fn_1_3514(void) { + Vec sp2C; /* compiler-managed */ + Vec sp20; /* compiler-managed */ + Vec sp14; + Vec sp8; + f32 var_f29; + f32 var_f30; + f32 var_f31; + s32 var_r30; + s32 var_r31; + + BoardPlayerPosGet(lbl_1_bss_4C, &sp2C); + BoardPlayerMotionShiftSet(lbl_1_bss_4C, 4, 0.0f, 5.0f, 0); + PSVECSubtract(&lbl_1_bss_38, &sp2C, &sp20); + sp20.y = 0.0f; + PSVECNormalize(&sp20, &sp20); + PSVECScale(&sp20, &sp20, 7.2f); + var_f30 = 10.0f; + var_f31 = 0.0f; + while (1) { + sp20.y = (var_f30 - (0.075f * (0.25f * (var_f31 * var_f31)))); + var_f31 += 1.0f; + PSVECAdd(&sp2C, &sp20, &sp2C); + PSVECSubtract(&lbl_1_bss_38, &sp2C, &sp14); + sp14.y = 0.0f; + var_f29 = PSVECMag(&sp14); + if (var_f29 <= 7.2f) { + sp2C.x = lbl_1_bss_38.x; + sp2C.z = lbl_1_bss_38.z; + sp20.x = sp20.z = 0.0f; + } + if (sp2C.y <= lbl_1_bss_38.y) { + sp2C.y = lbl_1_bss_38.y; + BoardPlayerMotionStart(lbl_1_bss_4C, lbl_1_bss_30[0], 0); + break; + } else { + BoardPlayerPosSetV(lbl_1_bss_4C, &sp2C); + HuPrcVSleep(); + } + } + HuAudFXPlay(0x48B); + HuAudPlayerVoicePlay(lbl_1_bss_4C, 0x123); + HuPrcChildCreate(fn_1_3E8C, 0x2001, 0x1000, 0, boardMainProc); + HuAudFXPlay(0x48A); + BoardModelMotionStart(lbl_1_bss_4E[lbl_1_bss_48], 2, 0); + var_r31 = BoardSpaceLinkFlagSearch(0, GWPlayer[lbl_1_bss_4C].space_curr, 0x100); + if ((frand() & 1) != 0) { + var_r31 = BoardSpaceLinkFlagSearch(0, var_r31, 0x200); + } else { + var_r31 = BoardSpaceLinkFlagSearch(0, var_r31, 0x400); + } + BoardSpacePosGet(0, var_r31, &sp8); + PSVECSubtract(&sp8, &sp2C, &sp20); + sp20.y = 0.0f; + PSVECNormalize(&sp20, &sp20); + PSVECScale(&sp20, &sp20, 10.0f); + var_f30 = 9.0f; + var_f31 = 0.0f; + while (1) { + sp20.y = var_f30 - (0.075f * (0.25f * (var_f31 * var_f31))); + var_f31 += 1.0f; + PSVECAdd(&sp2C, &sp20, &sp2C); + PSVECSubtract(&sp8, &sp2C, &sp14); + sp14.y = 0.0f; + var_f29 = PSVECMag(&sp14); + if (var_f29 <= 10.0f) { + sp2C.x = sp8.x; + sp2C.z = sp8.z; + sp20.x = sp20.z = 0.0f; + } + if (sp2C.y <= sp8.y) { + sp2C.y = sp8.y; + omVibrate(lbl_1_bss_4C, 0xC, 4, 2); + break; + } + BoardPlayerPosSetV(lbl_1_bss_4C, &sp2C); + if (BoardModelMotionTimeGet(lbl_1_bss_4E[lbl_1_bss_48]) >= BoardModelMotionMaxTimeGet(lbl_1_bss_4E[lbl_1_bss_48])) { + BoardModelMotionStart(lbl_1_bss_4E[lbl_1_bss_48], 0, 0x40000001); + } + HuPrcVSleep(); + } + var_f30 = 10.0f; + var_f31 = 0.0f; + if (BoardPlayerSizeGet(lbl_1_bss_4C) == 2) { + HuAudFXPlay(0x490); + } else if (BoardPlayerSizeGet(lbl_1_bss_4C) == 1) { + HuAudFXPlay(0x48F); + } else { + HuAudPlayerVoicePlay(lbl_1_bss_4C, 0x119); + } + while (1) { + sp20.y = var_f30 - (0.18333334f * (0.25f * (var_f31 * var_f31))); + var_f31 += 1.0f; + sp2C.y += sp20.y; + if (sp2C.y <= sp8.y) { + var_f30 = 0.25f * -sp20.y; + var_f31 = 0.0f; + sp2C.y = sp8.y; + if (BoardPlayerSizeGet(lbl_1_bss_4C) == 2) { + OSReport("big se\n"); + HuAudFXPlay(0x490); + } else { + if (BoardPlayerSizeGet(lbl_1_bss_4C) == 1) { + OSReport("small se\n"); + HuAudFXPlay(0x48F); + } else { + OSReport("normal se\n"); + HuAudPlayerVoicePlay(lbl_1_bss_4C, 0x119); + } + } + } + BoardPlayerPosSetV(lbl_1_bss_4C, &sp2C); + if (!(fabs(var_f30) < 5.0)) { + if (BoardModelMotionTimeGet(lbl_1_bss_4E[lbl_1_bss_48]) >= BoardModelMotionMaxTimeGet(lbl_1_bss_4E[lbl_1_bss_48])) { + BoardModelMotionStart(lbl_1_bss_4E[lbl_1_bss_48], 0, 0x40000001U); + } + HuPrcVSleep(); + } else { + BoardPlayerMotionShiftSet(lbl_1_bss_4C, 6, 0.0f, 8.0f, 0x40000001U); + break; + } + } + + var_r30 = 0x44; + while (var_r30--, var_r30 != 0) { + if (BoardModelMotionTimeGet(lbl_1_bss_4E[lbl_1_bss_48]) >= BoardModelMotionMaxTimeGet(lbl_1_bss_4E[lbl_1_bss_48])) { + BoardModelMotionStart(lbl_1_bss_4E[lbl_1_bss_48], 0, 0x40000001U); + } + HuPrcVSleep(); + } + GWPlayer[lbl_1_bss_4C].space_curr = var_r31; +} + +void fn_1_3D88(void) { + s32 temp_r3; + + temp_r3 = BoardSpaceLinkFlagSearch(0, GWPlayer[lbl_1_bss_4C].space_curr, 0x100U); + BoardPlayerMoveBetween(lbl_1_bss_4C, GWPlayer[lbl_1_bss_4C].space_curr, temp_r3); + GWPlayer[lbl_1_bss_4C].space_curr = temp_r3; + HuAudFXPlay(0x48B); + HuPrcChildCreate(fn_1_3E8C, 0x2001U, 0x1000U, 0, boardMainProc); + BoardPlayerIdleSet(lbl_1_bss_4C); + BoardWinCreate(0, 0x270019, -1); + BoardWinWait(); + BoardWinKill(); +} + +void fn_1_3E8C(void) { + Vec sp14; + Vec sp8; + s32 i; + + BoardModelPosGet(lbl_1_bss_44[1], &sp14); + sp8.z = 0.0f; + sp8.y = 10.0f; + if (lbl_1_bss_48 == 0) { + sp8.x = -25.0f; + } else { + sp8.x = 25.0f; + } + for (i = 0; i < 60; i++) { + PSVECAdd(&sp14, &sp8, &sp14); + sp8.y -= 0.625f; + BoardModelPosSetV(lbl_1_bss_44[1], &sp14); + HuPrcVSleep(); + } + HuPrcEnd(); +} \ No newline at end of file