diff --git a/.gitignore b/.gitignore index 81558d47..2ac13758 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,8 @@ orig/*/* !orig/*/.gitkeep /*.txt ctx.c -tools/output/* \ No newline at end of file +tools/output/* +rels_to_mod.py +orig/root +*.iso +mod_root/ \ No newline at end of file diff --git a/config/GMPE01_00/build.sha1 b/config/GMPE01_00/build.sha1 index 0c205375..cd58622f 100644 --- a/config/GMPE01_00/build.sha1 +++ b/config/GMPE01_00/build.sha1 @@ -91,6 +91,7 @@ f9e8d9c4581d44488adaffa3d46d9bc835d4f9bd build/GMPE01_00/w03Dll/w03Dll.rel 821126eeb7054150744b925cc4cb06c751ddcefd build/GMPE01_00/w04Dll/w04Dll.rel d29f7ccadcba23c8446d05101c4efa5caba26dfd build/GMPE01_00/w05Dll/w05Dll.rel d11a7a6d44189ba8d1e3a7168ea640ea9f2152fe build/GMPE01_00/w06Dll/w06Dll.rel +f1ad7b5a5198a14d34141b28c654bc1704c9dcd9 build/GMPE01_00/w07Dll/w07Dll.rel 54bb23228b04c5aaa6aa7c8ca1f846baec5a1f2c build/GMPE01_00/w10Dll/w10Dll.rel 98cc41456afa9e1ccbb8e03718b8d3cb64e4e86f build/GMPE01_00/w20Dll/w20Dll.rel b888f2c6703e680699ff8c59ad9200b9d78d30a1 build/GMPE01_00/w21Dll/w21Dll.rel diff --git a/config/GMPE01_00/config.yml b/config/GMPE01_00/config.yml index 8e687a60..bd07ac13 100644 --- a/config/GMPE01_00/config.yml +++ b/config/GMPE01_00/config.yml @@ -471,6 +471,11 @@ modules: symbols: config/GMPE01_00/rels/w06Dll/symbols.txt splits: config/GMPE01_00/rels/w06Dll/splits.txt links: [] +- object: orig/GMPE01_00/files/dll/w07Dll.rel + hash: f1ad7b5a5198a14d34141b28c654bc1704c9dcd9 + symbols: config/GMPE01_00/rels/w07Dll/symbols.txt + splits: config/GMPE01_00/rels/w07Dll/splits.txt + links: [] - object: orig/GMPE01_00/files/dll/w10Dll.rel hash: 54bb23228b04c5aaa6aa7c8ca1f846baec5a1f2c symbols: config/GMPE01_00/rels/w10Dll/symbols.txt diff --git a/config/GMPE01_00/rels/w07Dll/splits.txt b/config/GMPE01_00/rels/w07Dll/splits.txt new file mode 100644 index 00000000..e787a0ee --- /dev/null +++ b/config/GMPE01_00/rels/w07Dll/splits.txt @@ -0,0 +1,3 @@ +Sections: + .ctors type:rodata align:4 + .dtors type:rodata align:4 diff --git a/config/GMPE01_00/rels/w07Dll/symbols.txt b/config/GMPE01_00/rels/w07Dll/symbols.txt new file mode 100644 index 00000000..120e2d17 --- /dev/null +++ b/config/GMPE01_00/rels/w07Dll/symbols.txt @@ -0,0 +1,2 @@ +_ctors = .ctors:0x00000000; // type:label scope:global +_dtors = .dtors:0x00000000; // type:label scope:global diff --git a/configure b/configure deleted file mode 100644 index 965a9b7f..00000000 --- a/configure +++ /dev/null @@ -1 +0,0 @@ -python3 configure.py "$@" \ No newline at end of file diff --git a/configure.py b/configure.py index 08d6561b..9386391b 100644 --- a/configure.py +++ b/configure.py @@ -1541,6 +1541,18 @@ config.libs = [ Object(Matching, "REL/w06Dll/bowser.c"), }, ), + Rel( + "w07Dll", # Custom Board + objects={ + Object(Matching, "REL/board_executor.c"), + # Object(Matching, "REL/w07Dll/main.c"), + # Object(Matching, "REL/w06Dll/mg_item.c"), + # Object(Matching, "REL/w06Dll/mg_coin.c"), + # Object(Matching, "REL/w06Dll/fire.c"), + # Object(Matching, "REL/w06Dll/bridge.c"), + # Object(Matching, "REL/w06Dll/bowser.c"), + }, + ), Rel( "w10Dll", # Tutorial board objects={ diff --git a/dolphin_rels_to_mod.py b/dolphin_rels_to_mod.py new file mode 100644 index 00000000..6c7d592f --- /dev/null +++ b/dolphin_rels_to_mod.py @@ -0,0 +1,74 @@ +import os +import shutil +import sys + +""" +Usage: extract an mp4 iso to mod_root/orig/ +Build the dtk project, then run this script which you can then run your mod changes by running +mod_root/mod/sys/main.dol in dolphin +""" + +def copy_build_files_to_mod(src_dir, dest_dir): + #copy dol + build_dol = "build/GMPE01_00/main.dol" + mod_dol_dir = "mod_root/mod/sys/main.dol" + shutil.copy(build_dol, mod_dol_dir) + print(f"Copied {build_dol} to {mod_dol_dir}") + + #copy rels + rel_files_found = False + for root, dirs, files in os.walk(src_dir): + for file in files: + if file.endswith('.rel'): + rel_files_found = True + source_path = os.path.join(root, file) + destination_path = os.path.join(dest_dir, file) + + # Create destination directory if it doesn't exist + os.makedirs(os.path.dirname(destination_path), exist_ok=True) + + # Copy .rel file to root/dll/ + shutil.copy(source_path, destination_path) + + print(f"{file} found and copied to {destination_path}") + + if not rel_files_found: + print("No .rel files found.") + +def copy_mod_orig_to_mod(mod_orig, mod_dir): + # Ensure the mod directory exists + os.makedirs(mod_dir, exist_ok=True) + + # Iterate through all items in the source directory + for item in os.listdir(mod_orig): + s = os.path.join(mod_orig, item) + d = os.path.join(mod_dir, item) + # If the item is a directory, copy it to the destination + if os.path.isdir(s): + shutil.copytree(s, d, dirs_exist_ok=True) + print(f"Copied directory {s} to {d}") + +def main(): + src_directory = "build/GMPE01_00" + rels_destination_directory = "mod_root/mod/files/dll" + mod_dest = "mod_root/" + mod_orig = "mod_root/orig/" + mod_dir = "mod_root/mod/" + + if not os.path.isdir(mod_dest): + raise FileNotFoundError(f"The directory {mod_dest} does not exist. Manually create a mod_root/ directory at the root of the project.") + if not os.path.isdir(mod_orig): + raise FileNotFoundError(f"The directory {mod_orig} does not exist. Extract the entire iso to mod_root/orig/") + + if '--clean' in sys.argv: + print("--clean option detected. Copying directories from mod_root/orig/ to mod_root/mod/.") + copy_mod_orig_to_mod(mod_orig, mod_dir) + elif not os.path.isdir(mod_dir): + os.makedirs(mod_dir) + print(f"{mod_dir} created.") + copy_mod_orig_to_mod(mod_orig, mod_dir) + + copy_build_files_to_mod(src_directory, rels_destination_directory) + +if __name__ == "__main__": + main() diff --git a/include/datadir_table.h b/include/datadir_table.h index 408931fb..0cdc79ad 100644 --- a/include/datadir_table.h +++ b/include/datadir_table.h @@ -137,4 +137,5 @@ DATADIR_DEFINE(YOSHI, "data/yoshi.bin") DATADIR_DEFINE(YOSHIMDL0, "data/yoshimdl0.bin") DATADIR_DEFINE(YOSHIMDL1, "data/yoshimdl1.bin") DATADIR_DEFINE(YOSHIMOT, "data/yoshimot.bin") -DATADIR_DEFINE(ZTAR, "data/ztar.bin") \ No newline at end of file +DATADIR_DEFINE(ZTAR, "data/ztar.bin") +DATADIR_DEFINE(W07, "data/w07.bin") \ No newline at end of file diff --git a/include/game/board/main.h b/include/game/board/main.h index 2b4d84cc..6a6870fd 100644 --- a/include/game/board/main.h +++ b/include/game/board/main.h @@ -15,6 +15,7 @@ #define BOARD_ID_TUTORIAL 6 //TUTORIAL_BOARD #define BOARD_ID_EXTRA1 7 //MEGA_BOARD_MAYHEM #define BOARD_ID_EXTRA2 8 //MINI_BOARD_MAD_DASH +#define BOARD_ID_CUSTOM 9 //Custom Test Board #define BOARD_FABS(value) ((value < 0) ? -(value) : (value)) diff --git a/include/game/gamework_data.h b/include/game/gamework_data.h index 5376c63e..26dcc030 100644 --- a/include/game/gamework_data.h +++ b/include/game/gamework_data.h @@ -34,8 +34,8 @@ typedef struct system_state { /* 0x06 */ u8 star_flag; /* 0x07 */ u8 star_total; /* 0x08 */ struct { - u8 star_pos : 3; - u8 board : 5; + u16 star_pos : 3; + u16 board : 10; //double board count }; /* 0x09 */ s8 last5_effect; /* 0x0A */ s8 player_curr; diff --git a/include/ovl_table.h b/include/ovl_table.h index 4f66a2d2..148e2295 100644 --- a/include/ovl_table.h +++ b/include/ovl_table.h @@ -96,4 +96,5 @@ OVL_DEFINE(OVL_W06, "dll/w06dll.rel") OVL_DEFINE(OVL_W10, "dll/w10dll.rel") OVL_DEFINE(OVL_W20, "dll/w20dll.rel") OVL_DEFINE(OVL_W21, "dll/w21dll.rel") -OVL_DEFINE(OVL_ZTAR, "dll/ztardll.rel") \ No newline at end of file +OVL_DEFINE(OVL_ZTAR, "dll/ztardll.rel") +OVL_DEFINE(OVL_W07, "dll/w07Dll.rel") \ No newline at end of file diff --git a/src/REL/mstory4Dll/main.c b/src/REL/mstory4Dll/main.c index 1fa909da..fd94bb3a 100644 --- a/src/REL/mstory4Dll/main.c +++ b/src/REL/mstory4Dll/main.c @@ -161,7 +161,8 @@ void fn_1_EC(void) OVL_W04, OVL_W05, OVL_W06, - OVL_W10 + OVL_W10, + OVL_W07 }; WipeColorSet(255, 255, 255); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); diff --git a/src/REL/w07Dll/big_boo.c b/src/REL/w07Dll/big_boo.c new file mode 100644 index 00000000..ff859078 --- /dev/null +++ b/src/REL/w07Dll/big_boo.c @@ -0,0 +1,1176 @@ +#include "REL/w04Dll.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/msm.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/wipe.h" +#include "game/board/audio.h" +#include "game/board/com.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/ui.h" +#include "game/board/view.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "ext_math.h" + +// Remove this and include frand.h header once we decide what to do with frandmod. +#define frand8() (((s32)frand() & 0xFF)) + +static void fn_1_62B0(void); +static void fn_1_68D8(void); +static void fn_1_6CF8(void); +static void fn_1_7300(void); +static void fn_1_757C(void); +static void fn_1_75D8(void); +static void fn_1_7888(void); +static void fn_1_8A60(void); +static void fn_1_98A0(void); +static void fn_1_9B34(void); +static void fn_1_9BDC(void); +static void fn_1_9C18(void); +static void fn_1_9EA8(void); +static s16 fn_1_9F50(void); +static void fn_1_A074(s16 arg0); + +static s16 lbl_1_bss_282; +static s16 lbl_1_bss_280; +static s16 lbl_1_bss_27E; +static s16 lbl_1_bss_27C; +static Process *lbl_1_bss_278; +static s16 lbl_1_bss_274; +static s16 lbl_1_bss_272; +static s16 lbl_1_bss_270; +static Vec lbl_1_bss_240[4]; +static Vec lbl_1_bss_210[4]; +static s16 lbl_1_bss_13C[105]; +static s16 lbl_1_bss_13A; +static s16 lbl_1_bss_134[3]; +static s16 lbl_1_bss_114[4][4]; +static Vec lbl_1_bss_108; +static Process *lbl_1_bss_104; +static AnimData *lbl_1_bss_100; + +static char *lbl_1_data_3CC[] = { + "picture", "picture2", "clock", "hari", "papa" +}; + +static s32 lbl_1_data_3E0[] = { + DATA_MAKE_NUM(DATADIR_W04, 25), + DATA_MAKE_NUM(DATADIR_W04, 26), + DATA_MAKE_NUM(DATADIR_W04, 27), + DATA_MAKE_NUM(DATADIR_W04, 28), + -1 +}; + +static s32 lbl_1_data_3F4[8] = { + DATADIR_MARIOMOT, + DATADIR_LUIGIMOT, + DATADIR_PEACHMOT, + DATADIR_YOSHIMOT, + DATADIR_WARIOMOT, + DATADIR_DONKEYMOT, + DATADIR_DAISYMOT, + DATADIR_WALUIGIMOT +}; + +static s32 lbl_1_data_414[] = { + 26, 28, 93, 12 +}; + +static s16 lbl_1_data_424[][2] = { + { 0, 0 }, { 6, 1 }, { 7, 3 }, { 12, 2 }, + { 15, 3 }, { 18, 4 }, { 20, 6 }, { 23, 5 }, + { 26, 6 }, { 28, 7 }, { 29, 8 }, { -1, 9 } +}; + +void fn_1_6024(void) { + lbl_1_bss_27C = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 19), NULL, 0); + BoardModelHookSet(lbl_1_bss_14[4], lbl_1_data_3CC[0], lbl_1_bss_27C); + lbl_1_bss_280 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 20), NULL, 0); + BoardModelHookSet(lbl_1_bss_14[4], lbl_1_data_3CC[2], lbl_1_bss_280); + lbl_1_bss_27E = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 21), NULL, 0); + BoardModelHookSet(lbl_1_bss_280, lbl_1_data_3CC[3], lbl_1_bss_27E); + BoardModelAttrSet(lbl_1_bss_27E, 0x40000002); + BoardModelAttrSet(lbl_1_bss_27C, 0x40000002); + BoardModelMotionTimeSet(lbl_1_bss_27C, 20.0f); + BoardModelAttrSet(lbl_1_bss_280, 0x40000003); + BoardModelMotionSpeedSet(lbl_1_bss_27C, 0.5f); + if (lbl_1_bss_0->unk01 != 0) { + BoardModelMotionTimeSet(lbl_1_bss_280, 0.0f); + BoardModelMotionSpeedSet(lbl_1_bss_280, 0.5f); + BoardModelAttrReset(lbl_1_bss_280, 0x40000002); + BoardModelMotionTimeSet(lbl_1_bss_27E, 120.0f * lbl_1_bss_0->unk01); + BoardModelMotionTimeSet(lbl_1_bss_27C, 25.0f + 30.0f * lbl_1_bss_0->unk01); + } +} + +static void fn_1_62B0(void) { + Vec sp14; + Vec sp8; + s32 var_r31; + + lbl_1_bss_0->unk01++; + if (lbl_1_bss_0->unk01 == 3) { + lbl_1_bss_272 = GWPlayer[lbl_1_bss_282].space_curr; + var_r31 = BoardSpaceLinkFlagSearch(0, lbl_1_bss_272, 0x02000000); + BoardPlayerMoveToAsync(lbl_1_bss_282, var_r31); + while (GWPlayer[lbl_1_bss_282].moving) { + HuPrcVSleep(); + } + lbl_1_bss_274 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 24), lbl_1_data_3E0, 0); + BoardModelMotionStart(lbl_1_bss_274, 4, 0); + BoardModelAttrSet(lbl_1_bss_274, 0x40000002); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[4]), lbl_1_data_3CC[4], &sp14); + BoardModelPosSetV(lbl_1_bss_274, &sp14); + sp8.x = sp8.y = sp8.z = 3.0f; + BoardModelScaleSetV(lbl_1_bss_274, &sp8); + BoardModelVisibilitySet(lbl_1_bss_274, 0); + } + BoardPlayerMotBlendSet(lbl_1_bss_282, 180, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + fn_1_9C18(); + switch (lbl_1_bss_0->unk01) { + case 1: + HuAudFXPlay(0x4E); + omVibrate(lbl_1_bss_282, 0x7FFF, 6, 6); + BoardModelMotionTimeSet(lbl_1_bss_27C, 30.0f); + BoardModelAttrReset(lbl_1_bss_27C, 0x40000002); + HuPrcSleep(40); + BoardModelAttrSet(lbl_1_bss_27C, 0x40000002); + HuPadRumbleStop(GWPlayer[lbl_1_bss_282].port); + BoardWinCreate(0, MAKE_MESSID(32, 26), -1); + BoardWinWait(); + BoardWinKill(); + break; + case 2: + HuAudFXPlay(0x4E); + omVibrate(lbl_1_bss_282, 0x7FFF, 6, 6); + BoardModelMotionTimeSet(lbl_1_bss_27C, 60.0f); + BoardModelAttrReset(lbl_1_bss_27C, 0x40000002); + HuPrcSleep(40); + BoardModelAttrSet(lbl_1_bss_27C, 0x40000002); + HuPadRumbleStop(GWPlayer[lbl_1_bss_282].port); + BoardWinCreate(0, MAKE_MESSID(32, 27), -1); + BoardWinWait(); + BoardWinKill(); + break; + case 3: + BoardWinCreate(0, MAKE_MESSID(32, 28), -1); + BoardWinWait(); + BoardWinKill(); + HuAudFXPlay(0x4E); + sp14.x = 5.0f; + sp14.y = 0.0f; + sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 300.0f; + sp8.z = -200.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[4], &sp14, &sp8, 1400.0f, -1.0f, 30); + BoardCameraMotionWait(); + HuPrcSleep(9); + HuAudFXPlay(0x464); + BoardModelMotionTimeSet(lbl_1_bss_27C, 90.0f); + BoardModelAttrReset(lbl_1_bss_27C, 0x40000002); + HuPrcSleep(10); + omVibrate(lbl_1_bss_282, 12, 4, 2); + BoardModelVisibilitySet(lbl_1_bss_274, 1); + BoardModelAttrReset(lbl_1_bss_274, 0x40000002); + HuPrcSleep(39); + BoardModelPosGet(lbl_1_bss_274, &sp14); + BoardModelScaleGet(lbl_1_bss_274, &sp8); + while (!BoardModelMotionEndCheck(lbl_1_bss_274)) { + sp14.z += 15.0f; + BoardModelPosSetV(lbl_1_bss_274, &sp14); + HuPrcVSleep(); + } + BoardModelMotionStart(lbl_1_bss_274, 1, 0x40000001); + break; + } + if (lbl_1_bss_0->unk01 == 3) { + fn_1_68D8(); + BoardCameraViewSet(1); + BoardPlayerMoveToAsync(lbl_1_bss_282, lbl_1_bss_272); + while (GWPlayer[lbl_1_bss_282].moving) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_282); + BoardCameraMotionWait(); + } else { + HuPrcSleep(29); + } + HuPrcEnd(); +} + +static void fn_1_68D8(void) { + float var_f31; + s32 var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 i; + + BoardWinCreate(2, MAKE_MESSID(32, 3), 9); + BoardWinWait(); + BoardWinKill(); + if (BoardPlayerCoinsGet(lbl_1_bss_282) < 15) { + BoardWinCreate(2, MAKE_MESSID(32, 4), 9); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqFadeOut(1, 1000); + while (msmMusGetStatus(1) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + fn_1_98A0(); + return; + } + do { + var_r30 = 0; + for (i = 0; i < 4; i++) { + if (i != lbl_1_bss_282) { + var_r30 += GWStarsGet(i); + } + } + var_r28 = 0; + for (i = 0; i < 4; i++) { + if (i != lbl_1_bss_282) { + var_r28 += BoardPlayerCoinsGet(i); + } + } + BoardWinCreateChoice(4, MAKE_MESSID(32, 5), 9, 0); + if (BoardPlayerCoinsGet(lbl_1_bss_282) < 150 || var_r30 == 0) { + BoardWinChoiceDisable(1); + } + if (var_r28 == 0) { + BoardWinChoiceDisable(0); + } + if (GWPlayer[lbl_1_bss_282].com) { + if (var_r30 != 0 && BoardPlayerCoinsGet(lbl_1_bss_282) >= 150) { + BoardComKeySetDown(); + } else { + BoardComKeySetUp(); + } + } + BoardWinWait(); + BoardWinKill(); + var_r27 = BoardWinChoiceGet(); + var_r29 = 6; + switch (var_r27) { + case 1: + var_r29 /= 4; + for (i = 0; i < 135; i++) { + BoardPlayerCoinsAdd(lbl_1_bss_282, -1); + HuAudFXPlay(0xE); + HuPrcSleep(var_r29); + } + /* fallthrough */ + case 0: + for (i = 0; i < 15; i++) { + BoardPlayerCoinsAdd(lbl_1_bss_282, -1); + HuAudFXPlay(0xE); + HuPrcSleep(var_r29); + } + HuAudFXPlay(0xF); + HuAudFXPlay(0x4E); + BoardWinCreate(2, MAKE_MESSID(32, 7), 9); + BoardWinWait(); + BoardWinKill(); + var_f31 = 255.0f; + for (i = 0; i < 60; i++) { + var_f31 -= 4.25f; + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + } + BoardModelAlphaSet(lbl_1_bss_274, var_f31); + HuPrcVSleep(); + } + BoardModelAlphaSet(lbl_1_bss_274, 0); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + WipeColorSet(0, 0, 0); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + BoardModelAlphaSet(lbl_1_bss_274, 0xFF); + if (var_r27 == 0) { + fn_1_7888(); + } else { + fn_1_8A60(); + } + break; + case -1: + case 2: + BoardWinCreate(2, MAKE_MESSID(32, 6), 9); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqFadeOut(1, 1000); + while (msmMusGetStatus(1) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + break; + case 3: + BoardViewMapExec(lbl_1_bss_282); + break; + } + } while (var_r27 == 3); + fn_1_98A0(); +} + +static void fn_1_6CF8(void) { + Vec sp10; + s16 sp8[4]; + s16 var_r29; + s16 var_r28; + s32 temp_r27; + s32 var_r30; + s32 i; + + var_r29 = 0; + for (i = 0; i < 4; i++) { + if (i != lbl_1_bss_282) { + BoardPlayerPosGet(i, &lbl_1_bss_240[i]); + BoardPlayerRotGet(i, &lbl_1_bss_210[i]); + sp8[var_r29++] = i; + } + } + BoardModelHideSetAll(1); + BoardSpaceHide(1); + for (i = 0; i < 4; i++) { + BoardStatusShowSet(i, 0); + } + BoardLightResetExec(); + lbl_1_bss_270 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 22), NULL, 0); + BoardModelAttrSet(lbl_1_bss_270, 0x40000001); + sp10.y = 0.0f; + for (i = -1; i < 2; i++) { + sp10.z = 220.0f + -20.0f * abs(i); + sp10.x = 150.0f * i; + BoardPlayerPosSetV(sp8[i + 1], &sp10); + BoardPlayerRotYSet(sp8[i + 1], 180.0f); + BoardModelVisibilitySet(BoardPlayerModelGet(sp8[i + 1]), 1); + temp_r27 = lbl_1_data_3F4[GWPlayer[sp8[i + 1]].character]; + for (var_r30 = 0; var_r30 < 4; var_r30++) { + lbl_1_bss_114[sp8[i + 1]][var_r30] = BoardPlayerMotionCreate(sp8[i + 1], temp_r27 | lbl_1_data_414[var_r30]); + } + BoardPlayerMotionStart(sp8[i + 1], lbl_1_bss_114[sp8[i + 1]][0], 0x40000001); + } + BoardModelPosGet(lbl_1_bss_274, &lbl_1_bss_108); + BoardModelVisibilitySet(lbl_1_bss_274, 1); + sp10.x = sp10.z = 0.0f; + sp10.y = 800.0f; + BoardModelPosSetV(lbl_1_bss_274, &sp10); + sp10.x = sp10.y = sp10.z = 4.0f; + BoardModelScaleSetV(lbl_1_bss_274, &sp10); + BoardModelMotionStart(lbl_1_bss_274, 0, 0); + BoardCameraMoveSet(0); + BoardCameraTargetModelSet(lbl_1_bss_270); + BoardCameraOffsetSet(0.0f, 200.0f, 0.0f); + BoardCameraXRotZoomSet(1600.0f, -5.0f); + lbl_1_bss_104 = HuPrcChildCreate(fn_1_75D8, 0x2003, 0x1000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_104, fn_1_757C); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + HuPrcSleep(0x78); + for (i = 0; i < 3; i++) { + BoardPlayerModelAttrReset(sp8[i], 0x40000001); + BoardPlayerMotionShiftSet(sp8[i], lbl_1_bss_114[sp8[i]][1], 0.0f, 5.0f, 0); + } + BoardModelPosGet(lbl_1_bss_274, &sp10); + var_r28 = 10; + for (i = 0; i < 60; i++) { + if (--var_r28 == 0) { + HuAudFXPlay(0x4E); + for (var_r30 = 0; var_r30 < 3; var_r30++) { + HuAudPlayerVoicePlay(sp8[var_r30], 0x12F); + } + } + sp10.y -= 10.0f; + BoardModelPosSetV(lbl_1_bss_274, &sp10); + HuPrcVSleep(); + } + for (i = 0; i < 3; i++) { + BoardPlayerMotionShiftSet(sp8[i], 1, 0.0f, 5.0f, 0x40000001); + } +} + +static void fn_1_7300(void) { + Vec sp14; + Vec sp8; + s32 i; + s32 j; + + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + BoardModelKill(lbl_1_bss_270); + for (i = 0; i < 4; i++) { + if (i != lbl_1_bss_282) { + BoardPlayerPosSetV(i, &lbl_1_bss_240[i]); + BoardPlayerRotSetV(i, &lbl_1_bss_210[i]); + for (j = 0; j < 4; j++) { + BoardPlayerMotionKill(i, lbl_1_bss_114[i][j]); + } + BoardPlayerMotionStart(i, 1, 0x40000001); + } + } + HuPrcKill(lbl_1_bss_104); + HuPrcVSleep(); + BoardModelHideSetAll(0); + BoardSpaceHide(0); + for (i = 0; i < 4; i++) { + BoardStatusShowSet(i, 1); + } + BoardLightSetExec(); + BoardCameraMoveSet(0); + sp14.x = 5.0f; + sp14.y = 0.0f; + sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 220.0f; + sp8.z = -200.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[4], &sp14, &sp8, 1400.0f, -1.0f, 0); + BoardCameraMoveSet(1); + BoardModelMotionStart(lbl_1_bss_274, 1, 0x40000001); + sp8.x = sp8.y = sp8.z = 3.0f; + BoardModelScaleSetV(lbl_1_bss_274, &sp8); + BoardModelPosSetV(lbl_1_bss_274, &lbl_1_bss_108); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } +} + +static void fn_1_757C(void) { + s16 temp_r31; + s16 temp_r30; + + temp_r31 = ((s32) HuPrcCurrentGet()->user_data) >> 16; + temp_r30 = (u16) HuPrcCurrentGet()->user_data; + Hu3DGLightKill(temp_r31); + Hu3DGLightKill(temp_r30); +} + +static void fn_1_75D8(void) { + Vec sp1C; + Vec sp10; + GXColor spC; + float sp8; + float var_f31; + s16 temp_r3; + s16 temp_r3_2; + + temp_r3 = Hu3DGLightCreate(0.0f, 1000.0f, 0.0f, 0.0f, 0.9f, -0.1f, 0xFF, 0x64, 0xC8); + Hu3DGLightInfinitytSet(temp_r3); + Hu3DGLightStaticSet(temp_r3, 1); + spC.r = 0xCD; + spC.g = 0x32; + spC.b = 0x96; + sp1C.x = sp1C.y = sp1C.z = 0.0f; + sp10.x = 0.0f; + sp10.y = -1.0f; + sp10.z = 0.0f; + temp_r3_2 = Hu3DGLightCreateV(&sp1C, &sp10, &spC); + Hu3DGLightInfinitytSet(temp_r3_2); + Hu3DGLightStaticSet(temp_r3_2, 1); + HuPrcCurrentGet()->user_data = (void*) (((temp_r3 << 16) & 0xFFFF0000) | (temp_r3_2 & 0xFFFF)); + var_f31 = 0.0f; + sp8 = var_f31; + while (TRUE) { + sp10.x = cosd(var_f31 - 180.0f); + sp10.y = sind(var_f31); + sp10.z = cosd(var_f31) * sind(var_f31); + var_f31 += 3.0f + 6.0f * frand8() * 0.003921569f; + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + Hu3DGLightPosSetV(temp_r3_2, &sp1C, &sp10); + HuPrcVSleep(); + } +} + +static void fn_1_7888(void) { + Vec sp8F8[105]; + Vec sp40C[105]; + float sp268[105]; + float spC4[105]; + u8 sp58[105]; + Vec sp4C; + float sp40[3] = { 270.0f, 0.0f, 90.0f }; + float sp28[2]; + float var_f31; + char sp30[16]; + s16 sp20[4]; + s16 sp18[4]; + s16 sp10[4]; + s16 sp8[4]; + u16 var_r26; + u16 var_r24; + s16 var_r28; + s16 var_r27; + s16 var_r22; + s16 var_r21; + s16 var_r20; + s16 var_r23; + s32 var_r25; + s32 i; + s32 j; + s32 k; + + fn_1_6CF8(); + HuWinMesMaxSizeGet(1, sp28, MAKE_MESSID(32, 8)); + var_r21 = HuWinCreate(-10000.0f, 32.0f, sp28[0], sp28[1], 1); + HuWinMesSet(var_r21, MAKE_MESSID(32, 8)); + HuWinMesSpeedSet(var_r21, 0); + BoardModelMotionStart(lbl_1_bss_274, 3, 0x40000001); + for (i = 0; i < 4; i++) { + sp20[i] = 0; + sp18[i] = 0; + } + BoardModelPosGet(lbl_1_bss_274, &sp4C); + var_r20 = 48; + for (i = 0; i < 120; i++) { + if (--var_r20 == 0) { + var_r20 = 48; + for (j = 0; j < 4; j++) { + if (j != lbl_1_bss_282) { + HuAudPlayerVoicePlay(j, 0x130); + } + } + } + for (j = 0; j < 4; j++) { + if (j == lbl_1_bss_282) { + continue; + } + if (GWPlayer[j].com) { + switch (GWPlayer[j].diff) { + case 0: + var_r28 = 12; + break; + case 1: + var_r28 = 22; + break; + case 2: + var_r28 = 50; + break; + case 3: + var_r28 = 1000; + break; + } + if (frandmod(100) < var_r28) { + var_r26 = 0x100; + } else { + var_r26 = 0; + } + } else { + var_r24 = GWPlayer[j].port; + var_r26 = HuPadBtnDown[var_r24]; + } + if (var_r26 & 0x100) { + sp20[j]++; + } + if (sp18[j] != 0) { + if (BoardPlayerMotionEndCheck(j)) { + sp18[j] = 0; + BoardPlayerMotionStart(j, 1, 0x40000001); + } + } else if (var_r26 & 0x100) { + sp18[j] = 1; + BoardPlayerMotionStart(j, lbl_1_bss_114[j][2], 0); + } + } + HuPrcVSleep(); + } + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + BoardPlayerMotionStart(i, lbl_1_bss_114[i][3], 0); + OSReport("%d:%dhit ", i, sp20[i]); + omVibrate(i, 12, 4, 2); + } + OSReport("\n"); + HuWinKill(var_r21); + var_r27 = 0; + var_r23 = GWSystem.turn; + if (var_r23 <= 5) { + var_r25 = 15; + } else if (var_r23 <= 15) { + var_r25 = 25; + } else if (var_r23 <= 25) { + var_r25 = 27; + } else if (var_r23 <= 35) { + var_r25 = 30; + } else if (var_r23 <= 45) { + var_r25 = 32; + } else { + var_r25 = 35; + } + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + j = 0; + while (TRUE) { + if (lbl_1_data_424[j][0] == -1) { + sp8[i] = lbl_1_data_424[j][1]; + break; + } else if (sp20[i] <= lbl_1_data_424[j][0]) { + sp8[i] = lbl_1_data_424[j][1]; + break; + } + j++; + } + sp10[i] = var_r25 - sp8[i]; + if (BoardPlayerCoinsGet(i) < sp10[i]) { + sp10[i] = BoardPlayerCoinsGet(i); + } + var_r27 += sp10[i]; + BoardPlayerCoinsAdd(i, -sp10[i]); + OSReport("%d:%dlost ", i, sp10[i]); + } + OSReport("\n"); + for (i = 0; i < var_r27; i++) { + lbl_1_bss_13C[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), 0, 1); + BoardModelVisibilitySet(lbl_1_bss_13C[i], 0); + sp58[i] = 0; + } + for (i = 0; i < 10; i++) { + sp4C.z += 21.0f - i; + BoardModelPosSetV(lbl_1_bss_274, &sp4C); + HuPrcVSleep(); + } + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + omVibrate(i, 12, 4, 2); + HuAudPlayerVoicePlay(i, 0x131); + } + HuAudFXPlay(0x4E); + var_r28 = 0; + var_r24 = var_r27; + while (TRUE) { + if (var_r28 == 0) { + var_r22 = 0; + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + for (j = 0; j < 3; j++) { + if (sp10[i] == 0) { + continue; + } + sp10[i]--; + var_r24--; + for (k = 0; k < var_r27; k++) { + if (sp58[k] == 0) { + break; + } + } + if (k == var_r27) { + OSReport("\x82\xB1\x82\xA2\x82\xF1\x82\xAA\x8F\x6F\x82\xB9\x82\xC8\x82\xA2 total %d\n", var_r27); + while (TRUE) { + HuPrcVSleep(); + } + } + HuAudFXPlay(0x12); + sp58[k] = 1; + BoardPlayerPosGet(i, &sp8F8[k]); + sp8F8[k].y += 180.0f; + BoardModelVisibilitySet(lbl_1_bss_13C[k], 1); + BoardModelPosSetV(lbl_1_bss_13C[k], &sp8F8[k]); + sp40C[k].x = 10.0 * sind(sp40[var_r22] - 20.0f + 40.0f * j); + sp40C[k].z = 10.0 * cosd(sp40[var_r22] - 20.0f + 40.0f * j); + sp40C[k].y = 6.0f + 6.0f * frand8() * 0.003921569f; + sp268[k] = 0.0f; + spC4[k] = 360.0f * frand8() * 0.003921569f; + } + var_r22++; + } + var_r28 = 8; + } else { + var_r28--; + } + var_r26 = 0; + for (i = 0; i < var_r27; i++) { + if (sp58[i] == 0) { + continue; + } + var_r26++; + sp8F8[i].x += sp40C[i].x; + sp8F8[i].z += sp40C[i].z; + sp8F8[i].y += sp40C[i].y - sp268[i] * sp268[i] * 0.25f * 0.075f; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp8F8[i]); + BoardModelRotYSet(lbl_1_bss_13C[i], spC4[i]); + sp268[i] += 1.0f; + spC4[i] += 12.0f; + if (spC4[i] >= 360.0f) { + spC4[i] -= 360.0f; + } + if (sp8F8[i].y < -450.0f) { + sp58[i] = 0; + BoardModelVisibilitySet(lbl_1_bss_13C[i], 0); + } + } + if (var_r26 == 0 && var_r24 == 0) { + break; + } + HuPrcVSleep(); + } + fn_1_7300(); + sprintf(sp30, "%d", var_r27); + BoardWinCreate(2, MAKE_MESSID(32, 9), 9); + BoardWinInsertMesSet(MAKE_MESSID_PTR(sp30), 0); + BoardWinWait(); + BoardWinKill(); + BoardPlayerMotBlendSet(lbl_1_bss_282, 0, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_282); + BoardPlayerPosGet(lbl_1_bss_282, &sp4C); + for (i = 0; i < var_r27; i++) { + BoardModelVisibilitySet(lbl_1_bss_13C[i], 1); + sp8F8[i].x = sp4C.x - 25.0f + 50.0f * frand8() * 0.003921569f; + sp8F8[i].y = sp4C.y + 1200.0f + 130.0f * i + 60.0f * frand8() * 0.003921569f; + sp8F8[i].z = sp4C.z - 25.0f + 50.0f * frand8() * 0.003921569f; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp8F8[i]); + } + var_f31 = -4.0f; + var_r28 = 0; + while (TRUE) { + for (i = 0; i < var_r27; i++) { + if (i < var_r28) { + continue; + } + sp8F8[i].y += var_f31; + spC4[i] += 45.0f; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp8F8[i]); + BoardModelRotYSet(lbl_1_bss_13C[i], spC4[i]); + if (sp8F8[i].y <= sp4C.y + 180.0f) { + CharModelCoinEffectCreate(1, &sp8F8[i]); + BoardModelVisibilitySet(lbl_1_bss_13C[i], 0); + var_r28++; + BoardPlayerCoinsAdd(lbl_1_bss_282, 1); + HuAudFXPlay(7); + omVibrate(lbl_1_bss_282, 12, 6, 6); + } + } + var_f31 *= 1.05f; + if (var_f31 < -40.0f) { + var_f31 = -40.0f; + } + if (var_r28 == var_r27) { + BoardPlayerMotionShiftSet(lbl_1_bss_282, 7, 0.0f, 10.0f, 0); + break; + } + HuPrcVSleep(); + } + while (!BoardPlayerMotionEndCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + HuPrcSleep(30); + for (i = 0; i < var_r27; i++) { + BoardModelKill(lbl_1_bss_13C[i]); + } + BoardPlayerMotBlendSet(lbl_1_bss_282, 0xB4, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_282); + BoardWinCreate(2, MAKE_MESSID(32, 10), 9); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqFadeOut(1, 1000); + while (msmMusGetStatus(1) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); +} + +static void fn_1_8A60(void) { + Vec sp7C[3]; + Vec sp58[3]; + Vec sp4C; + Vec sp40; + float sp34[3]; + float sp28[3]; + float sp1C[3] = { 315.0f, 0.0f, 45.0f }; + char sp10[12]; + float var_f31; + float var_f30; + s16 sp8[4]; + s16 var_r30; + s32 temp_r27; + s32 var_r28; + s32 var_r29; + s32 i; + + fn_1_6CF8(); + lbl_1_bss_13A = 0; + BoardModelMotionStart(lbl_1_bss_274, 3, 0x40000001); + BoardModelPosGet(lbl_1_bss_274, &sp4C); + for (i = 0; i < 120; i++) { + HuPrcVSleep(); + } + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + BoardPlayerMotionStart(i, lbl_1_bss_114[i][3], 0); + omVibrate(i, 12, 4, 2); + } + var_r29 = 0; + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + if (GWStarsGet(i) > 0) { + sp8[i] = 1; + var_r29++; + } else { + sp8[i] = 0; + } + BoardPlayerStarsAdd(i, -sp8[i]); + } + OSReport("Total Star %d\n", var_r29); + for (i = 0; i < var_r29; i++) { + lbl_1_bss_13C[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 8), NULL, 0); + BoardModelAttrSet(lbl_1_bss_13C[i], 0x40000002); + BoardModelVisibilitySet(lbl_1_bss_13C[i], 0); + } + for (i = 0; i < 10; i++) { + sp4C.z += 21.0f - i; + BoardModelPosSetV(lbl_1_bss_274, &sp4C); + HuPrcVSleep(); + } + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282) { + continue; + } + omVibrate(i, 12, 4, 2); + HuAudPlayerVoicePlay(i, 0x131); + } + HuAudFXPlay(0x4E); + var_r30 = 0; + for (i = 0; i < 4; i++) { + if (i == lbl_1_bss_282 || sp8[i] == 0) { + continue; + } + BoardPlayerPosGet(i, &sp7C[var_r30]); + sp7C[var_r30].y += 180.0f; + sp34[var_r30] = 0.0f; + sp58[var_r30].x = 10.0 * sind(sp1C[var_r30]); + sp58[var_r30].z = 10.0 * cosd(sp1C[var_r30]); + sp58[var_r30].y = 6.0f + 6.0f * frand8() * 0.003921569f; + sp34[var_r30] = 360.0f * frand8() * 0.003921569f; + sp28[var_r30] = 0.0f; + BoardModelVisibilitySet(lbl_1_bss_13C[var_r30], 1); + lbl_1_bss_134[var_r30] = fn_1_9F50(); + var_r30++; + } + while (TRUE) { + var_r30 = 0; + for (i = 0; i < var_r29; i++) { + sp7C[i].x += sp58[i].x; + sp7C[i].z += sp58[i].z; + sp7C[i].y += sp58[i].y - sp28[i] * sp28[i] * 0.25f * 0.075f; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp7C[i]); + BoardModelRotYSet(lbl_1_bss_13C[i], sp34[i]); + sp28[i] += 1.0f; + sp34[i] += 12.0f; + if (sp34[i] >= 360.0f) { + sp34[i] -= 360.0f; + } + if (sp7C[i].y < -500.0f) { + BoardModelVisibilitySet(lbl_1_bss_13C[i], 0); + var_r30++; + } + Hu3DParManPosSet(lbl_1_bss_134[i], sp7C[i].x, sp7C[i].y + -70.0f, sp7C[i].z); + } + if (var_r30 == var_r29) { + break; + } + HuPrcVSleep(); + } + fn_1_7300(); + sprintf(sp10, "%d", var_r29); + BoardWinCreate(2, MAKE_MESSID(32, 11), 9); + BoardWinInsertMesSet(MAKE_MESSID_PTR(sp10), 0); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqFadeOut(1, 1000); + BoardPlayerMotBlendSet(lbl_1_bss_282, 0, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_282); + BoardPlayerPosGet(lbl_1_bss_282, &sp4C); + for (i = 0; i < var_r29; i++) { + BoardModelVisibilitySet(lbl_1_bss_13C[i], 1); + sp7C[i] = sp4C; + sp7C[i].y += 600.0f; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp7C[i]); + sp34[i] = 0.0f; + BoardModelRotYSet(lbl_1_bss_13C[i], sp34[i]); + } + for (i = 0; i < var_r29; i++) { + var_f31 = -4.0f; + HuAudFXPlay(0x338); + HuAudFXPlay(0x353); + while (TRUE) { + sp7C[i].y += var_f31; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp7C[i]); + Hu3DParManPosSet(lbl_1_bss_134[i], sp7C[i].x, sp7C[i].y + -70.0f, sp7C[i].z); + if (sp7C[i].y <= sp4C.y + 270.0f) { + sp7C[i].y = sp4C.y + 270.0f; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp7C[i]); + Hu3DParManPosSet(lbl_1_bss_134[i], sp7C[i].x, sp7C[i].y + -70.0f, sp7C[i].z); + BoardModelAttrReset(lbl_1_bss_13C[i], 0x40000002); + while (BoardModelMotionTimeGet(lbl_1_bss_13C[i]) < BoardModelMotionMaxTimeGet(lbl_1_bss_13C[i]) - 10.0f) { + HuPrcVSleep(); + } + var_f31 = -5.0f; + var_f30 = 1.0f; + HuAudFXPlay(0x339); + for (var_r28 = 0; var_r28 < 30; var_r28++) { + var_f30 -= 0.033333335f; + sp40.x = sp40.y = sp40.z = var_f30; + BoardModelScaleSetV(lbl_1_bss_13C[i], &sp40); + sp7C[i].y += var_f31; + BoardModelPosSetV(lbl_1_bss_13C[i], &sp7C[i]); + sp34[i] += 25.0f; + BoardModelRotYSet(lbl_1_bss_13C[i], sp34[i]); + Hu3DParManPosSet(lbl_1_bss_134[i], sp7C[i].x, sp7C[i].y + -70.0f, sp7C[i].z); + HuPrcVSleep(); + } + omVibrate(lbl_1_bss_282, 12, 0xC, 0); + BoardPlayerStarsAdd(lbl_1_bss_282, 1); + BoardModelVisibilitySet(lbl_1_bss_13C[i], 0); + fn_1_A074(lbl_1_bss_134[i]); + break; + } + var_f31 *= 1.05f; + if (var_f31 < -20.0f) { + var_f31 = -20.0f; + } + HuPrcVSleep(); + } + } + temp_r27 = HuAudSStreamPlay(6); + BoardPlayerMotionShiftSet(lbl_1_bss_282, 7, 0.0f, 10.0f, 0); + while (!BoardPlayerMotionEndCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + HuPrcSleep(30); + while (HuAudSStreamStatGet(temp_r27) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + for (i = 0; i < var_r29; i++) { + BoardModelKill(lbl_1_bss_13C[i]); + } + BoardPlayerMotBlendSet(lbl_1_bss_282, 0xB4, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_282)) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_282); + BoardWinCreate(2, MAKE_MESSID(32, 10), 9); + BoardWinWait(); + BoardWinKill(); +} + +static void fn_1_98A0(void) { + Vec sp14; + Vec sp8; + float var_f30; + float var_f31; + s32 i; + + BoardModelPosGet(lbl_1_bss_274, &sp14); + var_f30 = BoardModelRotYGet(lbl_1_bss_274); + BoardModelMotionShiftSet(lbl_1_bss_274, 2, 0.0f, 25.0f, 0x40000001); + for (i = 0; i < 25; i++) { + var_f30 += 7.2f; + BoardModelRotYSet(lbl_1_bss_274, var_f30); + HuPrcVSleep(); + } + BoardModelRotYSet(lbl_1_bss_274, 180.0f); + BoardModelMotionTimeSet(lbl_1_bss_27C, 0.0f); + BoardModelAttrReset(lbl_1_bss_27C, 0x40000002); + HuAudFXPlay(0x464); + HuAudFXPlay(0x4E); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[4]), lbl_1_data_3CC[4], &sp8); + var_f31 = 255.0f; + while (TRUE) { + sp14.z -= 10.0f; + if (sp14.z <= sp8.z + 200.0f) { + var_f31 -= 20.0f; + if (var_f31 <= 0.0f) { + break; + } + BoardModelAlphaSet(lbl_1_bss_274, var_f31); + } + BoardModelPosSetV(lbl_1_bss_274, &sp14); + if (BoardModelMotionTimeGet(lbl_1_bss_27C) >= 20.0f) { + BoardModelAttrSet(lbl_1_bss_27C, 0x40000002); + } + HuPrcVSleep(); + } + BoardModelAlphaSet(lbl_1_bss_274, 0); + BoardModelMotionTimeSet(lbl_1_bss_27C, 20.0f); + BoardModelAttrSet(lbl_1_bss_27C, 0x40000002); + fn_1_9B34(); +} + +static void fn_1_9B34(void) { + BoardModelKill(lbl_1_bss_274); + lbl_1_bss_0->unk01 = 0; + BoardModelMotionTimeSet(lbl_1_bss_280, 0.0f); + BoardModelAttrSet(lbl_1_bss_280, 0x40000002); + BoardModelMotionTimeSet(lbl_1_bss_27E, 0.0f); + BoardModelAttrSet(lbl_1_bss_280, 0x40000002); +} + +static void fn_1_9BDC(void) { + HuPrcSleep(240); + BoardMusStart(1, 0x1F, 0x7F, 0); + HuPrcEnd(); +} + +static void fn_1_9C18(void) { + Vec sp14; + Vec sp8; + s32 temp_r31; + + sp14.x = -150.0f; + sp14.y = 0.0f; + sp14.z = 120.0f; + sp8.x = -45.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[4], &sp8, &sp14, 2300.0f, -1.0f, 30); + BoardCameraMotionWait(); + if (lbl_1_bss_0->unk01 == 1) { + BoardModelMotionTimeSet(lbl_1_bss_280, 0.0f); + BoardModelMotionSpeedSet(lbl_1_bss_280, 0.5f); + BoardModelAttrReset(lbl_1_bss_280, 0x40000002); + } + HuAudFXPlay(0x461); + temp_r31 = HuAudFXPlay(0x462); + BoardModelAttrReset(lbl_1_bss_27E, 0x40000002); + HuPrcSleep(110); + BoardModelAttrSet(lbl_1_bss_27E, 0x40000002); + HuAudFXStop(temp_r31); + switch (lbl_1_bss_0->unk01) { + case 1: + case 2: + HuAudFXPlay(0x46A); + break; + case 3: + HuAudFXPlay(0x46B); + BoardAudSeqPause(0, 1, 1000); + HuPrcChildCreate(fn_1_9BDC, 0x2003, 0x1000, 0, boardMainProc); + break; + } + HuPrcSleep(9); + sp14.x = -150.0f; + sp14.y = 250.0f; + sp14.z = 120.0f; + sp8.x = -5.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[4], &sp8, &sp14, 1800.0f, -1.0f, 30); + BoardCameraMotionWait(); + HuPrcSleep(30); +} + +static void fn_1_9EA8(void) { + lbl_1_bss_278 = NULL; +} + +void fn_1_9EBC(void) { + lbl_1_bss_282 = GWSystem.player_curr; + lbl_1_bss_278 = HuPrcCreate(fn_1_62B0, 0x2004, 0x2000, 0); + HuPrcDestructorSet2(lbl_1_bss_278, fn_1_9EA8); + while (lbl_1_bss_278) { + HuPrcVSleep(); + } + BoardEventFlagReset(); +} + +static HsfanimStruct00 lbl_1_data_49C = { + 0x001E, + { 0x00, 0x00 }, // padding? + 3.3f, + 70.0f, + 7.0f, + { 0.0f, -0.05f, 0.0f }, + 2.0f, + 1.0f, + 20.0f, + 0.98f, + 0x0002, + { + { 0xFF, 0xFF, 0xFF, 0xFF }, + { 0xFF, 0xFF, 0x40, 0xFF }, + { 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00 } + }, + { + { 0xFF, 0x80, 0x80, 0x00 }, + { 0xFF, 0x40, 0x20, 0x00 }, + { 0x00, 0x00, 0x00, 0x00 }, + { 0x00, 0x00, 0x00, 0x00 } + } +}; + +static s16 fn_1_9F50(void) { + void *var_r29; + s16 temp_r3; + s16 temp_r3_2; + + if (lbl_1_bss_100 == NULL) { + var_r29 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_EFFECT, 1), MEMORY_DEFAULT_NUM, HEAP_DATA); + lbl_1_bss_100 = HuSprAnimRead(var_r29); + HuSprAnimLock(lbl_1_bss_100); + } + temp_r3 = Hu3DParManCreate(lbl_1_bss_100, 0x64, &lbl_1_data_49C); + Hu3DParManAttrSet(temp_r3, 0x64); + Hu3DParManRotSet(temp_r3, 90.0f, 0.0f, 0.0f); + temp_r3_2 = Hu3DParManModelIDGet(temp_r3); + Hu3DParticleBlendModeSet(temp_r3_2, 1); + Hu3DModelLayerSet(temp_r3_2, 2); + lbl_1_bss_13A++; + return temp_r3; +} + +static void fn_1_A074(s16 arg0) { + if (arg0 == -1) { + return; + } + Hu3DParManKill(arg0); + if (--lbl_1_bss_13A == 0) { + HuSprAnimKill(lbl_1_bss_100); + lbl_1_bss_100 = NULL; + } +} diff --git a/src/REL/w07Dll/boo_event.c b/src/REL/w07Dll/boo_event.c new file mode 100644 index 00000000..3a89e85b --- /dev/null +++ b/src/REL/w07Dll/boo_event.c @@ -0,0 +1,1198 @@ +#include "REL/w04Dll.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/memory.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/board/audio.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/ui.h" +#include "game/board/window.h" +#include "game/frand.h" + +#include "dolphin.h" +#include "ext_math.h" + +typedef struct { + /* 0x00 */ char unk00[0x50]; + /* 0x50 */ u32 unk50; // pointer? + /* 0x54 */ s32 unk54; +} UnkParticleDataStruct; // Size unknown + +typedef struct { + /* 0x00 */ s16 unk00; + /* 0x02 */ s16 unk02; + /* 0x04 */ s16 unk04; + /* 0x06 */ s16 unk06; + /* 0x08 */ s16 unk08; + /* 0x0A */ s16 unk0A; + /* 0x0C */ s16 unk0C; + /* 0x0E */ s16 unk0E; + /* 0x10 */ float unk10; + /* 0x14 */ float unk14; + /* 0x18 */ float unk18; + /* 0x1C */ float unk1C; + /* 0x20 */ Vec unk20; + /* 0x2C */ Process *unk2C; +} BssE4Data; // Size 0x30 + +static void fn_1_20EC(void); +static void fn_1_28BC(void); +static void fn_1_2B8C(void); +static void fn_1_2C10(void); +static void fn_1_2E60(s16 arg0); +static void fn_1_2EE8(s32 arg0); +static s32 fn_1_2F54(u32 arg0); +static BssE4Data *fn_1_2FBC(s16 arg0); +static void fn_1_2FDC(void); +static void fn_1_30A4(void); +static void fn_1_38D8(void); +static s32 fn_1_3C9C(void); +static void fn_1_45A8(void); +static void fn_1_4630(void); +static s32 fn_1_4680(s16 arg0); +static void fn_1_4848(void); +static void fn_1_5018(void); +static void fn_1_52A0(s16 arg0, Vec *arg1); +static void fn_1_55A0(void); +static void fn_1_5648(void); +static void fn_1_5828(void); +static s16 fn_1_58A4(Vec *arg0); +static void fn_1_5980(s16 arg0); +static void fn_1_59C4(omObjData *arg0); +static void fn_1_5A2C(ModelData *model, ParticleData *particle, Mtx matrix); + +static s16 lbl_1_bss_FA; +static s16 lbl_1_bss_F4[3]; +static Process *lbl_1_bss_E4[4]; +static Process *lbl_1_bss_D4[4]; +static omObjData *lbl_1_bss_C4[4]; +static s16 lbl_1_bss_C2; +static s16 lbl_1_bss_BA[4]; +static s16 lbl_1_bss_B2[4]; +static s16 lbl_1_bss_B0; +static Vec lbl_1_bss_80[4]; +static s16 lbl_1_bss_7C; +static s32 lbl_1_bss_78; +static s32 lbl_1_bss_74; +static s16 lbl_1_bss_70; +static s32 lbl_1_bss_6C; +static s16 lbl_1_bss_6A; +static s16 lbl_1_bss_52[4][3]; +static s16 lbl_1_bss_50; +static AnimData *lbl_1_bss_4C; +static Process *lbl_1_bss_48; + +static s32 lbl_1_data_2D0[8] = { + DATADIR_MARIOMOT, + DATADIR_LUIGIMOT, + DATADIR_PEACHMOT, + DATADIR_YOSHIMOT, + DATADIR_WARIOMOT, + DATADIR_DONKEYMOT, + DATADIR_DAISYMOT, + DATADIR_WALUIGIMOT +}; + +static s32 lbl_1_data_2F0 = 28; + +static s32 lbl_1_data_2F4[8] = { + DATA_MAKE_NUM(DATADIR_W04, 35), + DATA_MAKE_NUM(DATADIR_W04, 36), + DATA_MAKE_NUM(DATADIR_W04, 37), + DATA_MAKE_NUM(DATADIR_W04, 38), + DATA_MAKE_NUM(DATADIR_W04, 39), + DATA_MAKE_NUM(DATADIR_W04, 40), + DATA_MAKE_NUM(DATADIR_W04, 41), + DATA_MAKE_NUM(DATADIR_W04, 42) +}; + +static s32 lbl_1_data_314[8] = { + DATA_MAKE_NUM(DATADIR_W04, 43), + DATA_MAKE_NUM(DATADIR_W04, 44), + DATA_MAKE_NUM(DATADIR_W04, 45), + DATA_MAKE_NUM(DATADIR_W04, 46), + DATA_MAKE_NUM(DATADIR_W04, 47), + DATA_MAKE_NUM(DATADIR_W04, 48), + DATA_MAKE_NUM(DATADIR_W04, 49), + DATA_MAKE_NUM(DATADIR_W04, 50) +}; + +static char *lbl_1_data_348[] = { + "kan1", "kan2", "kan3", "kan4" +}; + +static float lbl_1_data_358[] = { + -150.00001f, -170.00001f, -30.0f, -220.0f +}; + +static void fn_1_20EC(void) { + Vec sp20; + Vec sp14; + Vec sp8; + float var_f31; + s32 temp_r30; + s32 temp_r28; + BoardSpace *var_r27; + BoardMapObject *var_r26; + s32 i; + s32 j; + + temp_r30 = GWSystem.player_curr; + lbl_1_bss_70 = 0; + lbl_1_bss_7C = 0; + temp_r28 = lbl_1_data_2D0[GWPlayer[temp_r30].character]; + lbl_1_bss_52[temp_r30][0] = BoardPlayerMotionCreate(temp_r30, temp_r28 | lbl_1_data_2F0); + lbl_1_bss_52[temp_r30][1] = BoardPlayerMotionCreate(temp_r30, lbl_1_data_2F4[GWPlayer[temp_r30].character]); + for (i = 0; i < 4; i++) { + if (i != temp_r30) { + lbl_1_bss_52[i][0] = BoardPlayerMotionCreate(i, temp_r28 | lbl_1_data_2F0); + lbl_1_bss_52[i][1] = BoardPlayerMotionCreate(i, lbl_1_data_2F4[GWPlayer[i].character]); + lbl_1_bss_52[i][2] = BoardPlayerMotionCreate(i, lbl_1_data_314[GWPlayer[i].character]); + } + } + for (i = 0; i < 3; i++) { + lbl_1_bss_F4[i] = BoardModelCreate(0x70000, NULL, 1); + BoardModelLayerSet(lbl_1_bss_F4[i], 2); + BoardModelVisibilitySet(lbl_1_bss_F4[i], 0); + } + var_r26 = &lbl_1_data_0[8]; + lbl_1_bss_FA = lbl_1_bss_14[8]; + BoardModelPosSetV(lbl_1_bss_FA, &var_r26->pos); + BoardModelRotSetV(lbl_1_bss_FA, &var_r26->rot); + BoardModelVisibilitySet(lbl_1_bss_FA, 1); + BoardModelAlphaSet(lbl_1_bss_FA, 0); + var_f31 = 0.0f; + for (i = 0; i < 4; i++) { + lbl_1_bss_B2[i] = 0; + lbl_1_bss_D4[i] = NULL; + } + fn_1_5648(); + fn_1_2C10(); + BoardRollDispSet(0); + BoardPlayerMotBlendSet(temp_r30, 180, 15); + BoardCameraViewSet(2); + while (!BoardPlayerMotBlendCheck(temp_r30)) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + BoardPlayerMotionShiftSet(temp_r30, lbl_1_bss_52[temp_r30][0], 0.0f, 5.0f, 0); + HuAudPlayerVoicePlay(temp_r30, 0x128); + BoardModelPosGet(lbl_1_bss_14[3], &sp20); + BoardModelPosSetV(lbl_1_bss_FA, &sp20); + BoardModelVisibilitySet(lbl_1_bss_FA, 1); + for (i = 0; i < 60; i++) { + var_f31 += 4.25f; + BoardModelAlphaSet(lbl_1_bss_FA, var_f31); + HuPrcVSleep(); + } + BoardModelAlphaSet(lbl_1_bss_FA, 0xFF); + HuAudFXPlay(0x4C); + BoardPlayerIdleSet(temp_r30); + HuPrcSleep(8); + BoardWinCreate(2, MAKE_MESSID(32, 1), 3); + BoardWinWait(); + BoardWinKill(); + var_r27 = BoardSpaceGet(0, GWPlayer[temp_r30].space_curr); + lbl_1_bss_74 = lbl_1_bss_78 = var_r27->link[0]; + BoardSpacePosGet(0, lbl_1_bss_78, &sp14); + BoardModelPosGet(lbl_1_bss_FA, &sp20); + while (fn_1_1130(lbl_1_bss_FA, atan2d(sp14.x - sp20.x, sp14.z - sp20.z), 2.0f) == 0) { + HuPrcVSleep(); + } + PSVECSubtract(&sp14, &sp20, &sp8); + PSVECScale(&sp8, &sp8, 0.022222223f); + for (i = 0; i < 45; i++) { + PSVECAdd(&sp20, &sp8, &sp20); + BoardModelPosSetV(lbl_1_bss_FA, &sp20); + HuPrcVSleep(); + } + BoardAudSeqPause(0, 1, 1000); + BoardModelPosSetV(lbl_1_bss_FA, &sp14); + BoardPlayerPosGet(temp_r30, &sp14); + while (fn_1_1130(lbl_1_bss_FA, atan2d(sp14.x - sp20.x, sp14.z - sp20.z), 3.0f) == 0) { + HuPrcVSleep(); + } + fn_1_2EE8(1); + while (fn_1_2F54(0) == 0) { + HuPrcVSleep(); + } + fn_1_2FBC(0)->unk00 = 2; + while (fn_1_1130(lbl_1_bss_FA, 90.0f, 3.0f) == 0) { + HuPrcVSleep(); + } + while (fn_1_2F54(0) == 0) { + HuPrcVSleep(); + } + fn_1_28BC(); + fn_1_2B8C(); + BoardAudSeqPause(0, 0, 1000); + BoardRollDispSet(1); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + BoardPlayerMotionKill(temp_r30, lbl_1_bss_52[temp_r30][0]); + BoardPlayerMotionKill(temp_r30, lbl_1_bss_52[temp_r30][1]); + for (i = 0; i < 4; i++) { + if (i != temp_r30) { + for (j = 0; j < 3; j++) { + BoardPlayerMotionKill(i, lbl_1_bss_52[i][j]); + } + } + } + for (i = 0; i < 3; i++) { + BoardModelKill(lbl_1_bss_F4[i]); + } + fn_1_5828(); + BoardModelVisibilitySet(lbl_1_bss_FA, 0); + HuPrcEnd(); +} + +static void fn_1_28BC(void) { + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f30; + float var_f31; + BoardSpace *var_r30; + s16 var_r29; + s32 var_r31; + s32 i; + Process *var_r27; + float *var_r26; + + var_r27 = HuPrcChildCreate(fn_1_45A8, 0x2001, 0x800, 0, boardMainProc); + HuPrcDestructorSet2(var_r27, fn_1_4630); + var_r26 = (float*) &var_r27->user_data; + lbl_1_bss_C2 = fn_1_4680(lbl_1_bss_78); + var_r29 = 0; + while (var_r29 == 0) { + var_r31 = fn_1_3C9C(); + if (var_r31 != -1) { + var_r30 = BoardSpaceGet(0, var_r31); + if (var_r30->flag & 1) { + lbl_1_bss_50 = var_r31; + } + if (var_r30->flag & 8) { + fn_1_52A0(lbl_1_bss_50, lbl_1_bss_80); + var_r29 = 1; + var_f31 = 255.0f; + HuPrcKill(var_r27); + } + BoardSpacePosGet(0, var_r31, &sp20); + BoardModelPosGet(lbl_1_bss_FA, &sp14); + temp_f30 = atan2d(sp20.x - sp14.x, sp20.z - sp14.z); + BoardModelRotYSet(lbl_1_bss_FA, temp_f30); + PSVECSubtract(&sp20, &sp14, &sp8); + PSVECScale(&sp8, &sp8, 0.022222223f); + *var_r26 = temp_f30 - 180.0f; + fn_1_2EE8(3); + for (i = 0; i < 45; i++) { + PSVECAdd(&sp8, &sp14, &sp14); + BoardModelPosSetV(lbl_1_bss_FA, &sp14); + fn_1_5018(); + if (var_r29 != 0) { + var_f31 -= 5.6666665f; + BoardModelAlphaSet(lbl_1_bss_FA, var_f31); + } + HuPrcVSleep(); + } + BoardModelPosSetV(lbl_1_bss_FA, &sp20); + lbl_1_bss_74 = lbl_1_bss_78; + lbl_1_bss_78 = var_r31; + if (var_r29 != 0) { + BoardModelVisibilitySet(lbl_1_bss_FA, 0); + } + } + HuPrcVSleep(); + } +} + +static void fn_1_2B8C(void) { + s32 i; + + while (fn_1_2F54(4) == 0 || lbl_1_bss_7C != 0) { + fn_1_2EE8(3); + HuPrcVSleep(); + } + HuAudFXStop(lbl_1_bss_6C); + for (i = 0; i < 4; i++) { + fn_1_2E60(i); + } +} + +static void fn_1_2C10(void) { + Vec sp8; + BssE4Data *temp_r31; + s32 i; + + for (i = 0; i < 4; i++) { + temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(BssE4Data), MEMORY_DEFAULT_NUM); + temp_r31->unk04 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 3), NULL, 0); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[3]), lbl_1_data_348[i], &sp8); + BoardModelLayerSet(temp_r31->unk04, 2); + BoardModelPosSetV(temp_r31->unk04, &sp8); + temp_r31->unk10 = lbl_1_data_358[i]; + BoardModelRotYSet(temp_r31->unk04, temp_r31->unk10); + temp_r31->unk18 = 0.0f; + BoardModelAlphaSet(temp_r31->unk04, temp_r31->unk18); + BoardModelVisibilitySet(temp_r31->unk04, 0); + temp_r31->unk14 = 0.003921569f * frand8() * 360.0f; + temp_r31->unk08 = -1; + temp_r31->unk00 = 0; + temp_r31->unk06 = i; + temp_r31->unk1C = 0.0f; + temp_r31->unk02 = 1; + temp_r31->unk0C = 0; + if (i == 0) { + temp_r31->unk0A = lbl_1_bss_FA; + } else { + temp_r31->unk0A = ((BssE4Data*) lbl_1_bss_E4[i - 1]->user_data)->unk04; + } + lbl_1_bss_E4[i] = HuPrcChildCreate(fn_1_30A4, 0x2003, 0x1000, 0, boardMainProc); + lbl_1_bss_E4[i]->user_data = temp_r31; + temp_r31->unk2C = HuPrcChildCreate(fn_1_2FDC, 0x2002, 0x1000, 0, boardMainProc); + temp_r31->unk2C->user_data = temp_r31; + } +} + +static void fn_1_2E60(s16 arg0) { + BssE4Data *temp_r3; + + temp_r3 = fn_1_2FBC(arg0); + BoardModelKill(temp_r3->unk04); + HuPrcKill(temp_r3->unk2C); + HuPrcKill(lbl_1_bss_E4[arg0]); + HuMemDirectFree(lbl_1_bss_E4[arg0]->user_data); +} + +static void fn_1_2EE8(s32 arg0) { + s32 i; + + for (i = 0; i < 4; i++) { + if (fn_1_2FBC(i)->unk02 != 0) { + fn_1_2FBC(i)->unk00 = arg0; + } + } +} + +static s32 fn_1_2F54(u32 arg0) { + s32 i; + + for (i = 0; i < 4; i++) { + if (arg0 != fn_1_2FBC(i)->unk00) { + break; + } + } + if (i != 4) { + return 0; + } else { + return 1; + } +} + +static BssE4Data *fn_1_2FBC(s16 arg0) { + return lbl_1_bss_E4[arg0]->user_data; +} + +static void fn_1_2FDC(void) { + Vec sp8; + BssE4Data *temp_r31; + + temp_r31 = HuPrcCurrentGet()->user_data; + while (TRUE) { + BoardModelPosGet(temp_r31->unk04, &sp8); + sp8.y = temp_r31->unk1C + 4.0 * sind(temp_r31->unk14); + BoardModelPosSetV(temp_r31->unk04, &sp8); + if (temp_r31->unk08 != -1) { + sp8.y += 50.0f; + BoardPlayerPosSetV(temp_r31->unk08, &sp8); + } + temp_r31->unk14 += 2.0f; + HuPrcVSleep(); + } +} + +static void fn_1_30A4(void) { + Vec sp20; + Vec sp14; + float temp_f31; + BssE4Data *temp_r31; + BoardSpace *var_r28; + Process *var_r27; + s16 var_r29; + s16 temp_r22; + s32 i; + + var_r29 = 0; + temp_r31 = HuPrcCurrentGet()->user_data; + while (TRUE) { + switch (temp_r31->unk00) { + case 0: + case 4: + break; + case 1: + BoardModelPosGet(temp_r31->unk04, &sp20); + BoardMusStart(1, 0x20, 0x7F, 0); + lbl_1_bss_6A = 1; + HuAudFXPlay(0x45F); + temp_r22 = fn_1_58A4(&sp20); + HuPrcSleep(45); + if (temp_r31->unk06 == 0) { + BoardPlayerPosGet(GWSystem.player_curr, &temp_r31->unk20); + temp_r31->unk20.y += 65.0f; + } else { + temp_r31->unk20 = fn_1_2FBC(temp_r31->unk06 - 1)->unk20; + temp_r31->unk20.z -= 300.0f; + } + BoardModelPosGet(lbl_1_bss_14[3], &sp20); + temp_r31->unk1C = sp20.y; + BoardModelVisibilitySet(temp_r31->unk04, 1); + if (temp_r31->unk06 == 0) { + lbl_1_bss_6C = HuAudFXPlay(0x460); + } + for (i = 0; i < 60; i++) { + temp_r31->unk18 += 4.25f; + BoardModelAlphaSet(temp_r31->unk04, temp_r31->unk18); + temp_r31->unk1C += 1.0833334f; + HuPrcVSleep(); + } + fn_1_5980(temp_r22); + BoardModelPosGet(temp_r31->unk04, &sp20); + temp_f31 = atan2d(temp_r31->unk20.x - sp20.x, temp_r31->unk20.z - sp20.z); + while (fn_1_1130(temp_r31->unk04, temp_f31, 5.0f) == 0) { + HuPrcVSleep(); + } + PSVECSubtract(&temp_r31->unk20, &sp20, &sp14); + PSVECScale(&sp14, &sp14, 0.016666668f); + for (i = 0; i < 60; i++) { + PSVECAdd(&sp14, &sp20, &sp20); + BoardModelPosSetV(temp_r31->unk04, &sp20); + HuPrcVSleep(); + } + BoardModelPosSetV(temp_r31->unk04, &temp_r31->unk20); + while (fn_1_1130(temp_r31->unk04, 0.0f, 5.0f) == 0) { + HuPrcVSleep(); + } + if (temp_r31->unk06 == 0) { + i = GWSystem.player_curr; + temp_f31 = BoardPlayerRotYGet(i); + omVibrate(i, 12, 6, 6); + while (TRUE) { + if (temp_f31 > 0.0f) { + temp_f31 -= 2.0f; + if (temp_f31 < 0.0f) { + temp_f31 = 0.0f; + } + } + BoardPlayerRotYSet(i, temp_f31); + BoardPlayerPosGet(i, &sp14); + BoardModelPosGet(temp_r31->unk04, &sp20); + sp14.y += 2.2f; + if (sp14.y > sp20.y + 50.0f) { + sp14.y = sp20.y + 50.0f; + break; + } + BoardPlayerPosSetV(i, &sp14); + HuPrcVSleep(); + } + BoardPlayerPosSetV(i, &sp14); + BoardPlayerRotYSet(i, 0.0f); + BoardPlayerMotionShiftSet(i, lbl_1_bss_52[GWSystem.player_curr][1], 0.0f, 10.0f, 0x40000001); + temp_r31->unk08 = i; + } + if (temp_r31->unk06 == 0) { + BoardModelPosGet(lbl_1_bss_FA, &temp_r31->unk20); + } else { + BoardModelPosGet(fn_1_2FBC(temp_r31->unk06 - 1)->unk04, &temp_r31->unk20); + } + temp_r31->unk00 = 0; + break; + case 2: + while (fn_1_1130(temp_r31->unk04, 90.0f, 3.0f) == 0) { + BoardPlayerRotYSet(temp_r31->unk08, BoardModelRotYGet(temp_r31->unk04)); + HuPrcVSleep(); + } + BoardPlayerRotYSet(temp_r31->unk08, BoardModelRotYGet(temp_r31->unk04)); + temp_r31->unk00 = 0; + break; + case 3: + BoardModelPosGet(temp_r31->unk04, &sp20); + temp_f31 = atan2d(temp_r31->unk20.x - sp20.x, temp_r31->unk20.z - sp20.z); + BoardModelRotYSet(temp_r31->unk04, temp_f31); + if (temp_r31->unk08 != -1) { + BoardPlayerRotYSet(temp_r31->unk08, temp_f31); + } + PSVECSubtract(&temp_r31->unk20, &sp20, &sp14); + PSVECScale(&sp14, &sp14, 0.022222223f); + if (temp_r31->unk0C > 0) { + var_r28 = BoardSpaceGet(0, temp_r31->unk0C); + if (var_r28->flag & 1) { + var_r29 = 1; + if (temp_r31->unk08 != -1) { + var_r27 = HuPrcChildCreate(fn_1_38D8, 0x2002, 0x1000, 0, boardMainProc); + var_r27->user_data = temp_r31; + lbl_1_bss_7C++; + } + } + } + for (i = 0; i < 45; i++) { + PSVECAdd(&sp20, &sp14, &sp20); + BoardModelPosSetV(temp_r31->unk04, &sp20); + if (temp_r31->unk08 != -1) { + BoardPlayerPosSetV(temp_r31->unk08, &sp20); + } + if (var_r29 != 0) { + if (temp_r31->unk06 == 2 && lbl_1_bss_6A != 0) { + BoardAudSeqFadeOut(1, 1000); + lbl_1_bss_6A = 0; + } + temp_r31->unk18 -= 5.6666665f; + BoardModelAlphaSet(temp_r31->unk04, temp_r31->unk18); + } + HuPrcVSleep(); + } + temp_r31->unk0E = temp_r31->unk0C; + if (temp_r31->unk06 == 0) { + temp_r31->unk0C = lbl_1_bss_74; + } else { + temp_r31->unk0C = fn_1_2FBC(temp_r31->unk06 - 1)->unk0E; + } + BoardModelPosSetV(temp_r31->unk04, &temp_r31->unk20); + if (temp_r31->unk08 != -1) { + BoardPlayerPosSetV(temp_r31->unk08, &temp_r31->unk20); + } + if (temp_r31->unk06 == 0) { + BoardModelPosGet(lbl_1_bss_FA, &temp_r31->unk20); + } else { + BoardModelPosGet(fn_1_2FBC(temp_r31->unk06 - 1)->unk04, &temp_r31->unk20); + } + if (var_r29 != 0) { + BoardModelVisibilitySet(temp_r31->unk04, 0); + temp_r31->unk02 = 0; + temp_r31->unk00 = 4; + } else { + temp_r31->unk00 = 0; + } + break; + } + HuPrcVSleep(); + } +} + +static void fn_1_38D8(void) { + Vec sp24; + Vec sp18; + Vec spC; + float var_f28; + float temp_f26; + float var_f29; + BssE4Data *temp_r30; + s16 temp_r31; + + OSReport("Getoff\n"); + temp_r30 = HuPrcCurrentGet()->user_data; + temp_r31 = temp_r30->unk08; + temp_r30->unk08 = -1; + BoardPlayerMotionShiftSet(temp_r31, 4, 0.0f, 5.0f, 0); + sp18 = lbl_1_bss_80[temp_r31]; + GWPlayer[temp_r31].space_curr = lbl_1_bss_B0; + BoardPlayerPosGet(temp_r31, &sp24); + var_f28 = atan2d(sp18.x - sp24.x, sp18.z - sp24.z); + BoardPlayerRotYSet(temp_r31, var_f28); + PSVECSubtract(&sp18, &sp24, &spC); + PSVECScale(&spC, &spC, 0.025f); + temp_f26 = 12.0f; + var_f29 = 0.0f; + while (TRUE) { + spC.y = temp_f26 - var_f29 * var_f29 * 0.25f * 0.075f; + var_f29 += 1.0f; + PSVECAdd(&spC, &sp24, &sp24); + if (sp24.y <= sp18.y) { + sp24.y = sp18.y; + break; + } + var_f28 = VECDistanceXZ(&sp18, &sp24); + if (var_f28 <= 1.0f) { + spC.x = spC.z = 0.0f; + } + BoardPlayerPosSetV(temp_r31, &sp24); + HuPrcVSleep(); + } + BoardPlayerPosSetV(temp_r31, &sp18); + BoardPlayerIdleSet(temp_r31); + HuPrcSleep(8); + BoardPlayerMotBlendSet(temp_r31, 0, 0xF); + while (!BoardPlayerMotBlendCheck(temp_r31)) { + HuPrcVSleep(); + } + lbl_1_bss_7C--; + HuPrcEnd(); +} + +static s32 fn_1_3C9C(void) { + Vec sp50; + Vec sp44; + Vec sp38; + float sp28[4]; + s16 sp20[4]; + s16 sp18[4]; + s16 sp10[4]; + float sp8[2]; + BoardSpace *temp_r30; + BoardSpace *var_r28; + float var_f29; + float var_f30; + float var_f31; + s8 var_r26; + s8 var_r25; + s32 var_r24; + s16 var_r23; + s16 var_r22; + s16 temp_r20; + s16 var_r19; + s16 var_r21; + s16 var_r27; + s16 var_r29; + s16 var_r18; + s32 temp_r17; + s32 i; + + temp_r30 = BoardSpaceGet(0, lbl_1_bss_78); + if (temp_r30->flag & 8) { + return -1; + } + if (temp_r30->flag & 0x400) { + var_r29 = 0; + i = BoardSpaceLinkTargetListGet(0, lbl_1_bss_78, sp10); + for (i--; i >= 0; i--) { + var_r28 = BoardSpaceGet(0, sp10[i]); + if (var_r28->flag & 4) { + sp20[var_r29] = sp10[i]; + sp18[var_r29] = 1; + var_r29++; + } + } + for (i = 0; i < temp_r30->link_cnt; i++) { + var_r28 = BoardSpaceGet(0, temp_r30->link[i]); + if (var_r28->flag & 4) { + sp20[var_r29] = temp_r30->link[i]; + sp18[var_r29] = 0; + var_r29++; + } + } + var_r27 = 0; + BoardModelPosGet(lbl_1_bss_FA, &sp50); + for (i = 0; i < var_r29; i++) { + BoardSpacePosGet(0, sp20[i], &sp44); + sp50.y = sp44.y; + PSVECSubtract(&sp44, &sp50, &sp38); + var_f31 = atan2d(sp38.x, sp38.z); + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + sp28[i] = var_f31; + PSVECNormalize(&sp38, &sp44); + PSVECScale(&sp44, &sp44, 110.0f); + sp44.y += 200.0f; + PSVECAdd(&sp50, &sp44, &sp44); + BoardModelPosSetV(lbl_1_bss_F4[i], &sp44); + BoardModelRotYSet(lbl_1_bss_F4[i], var_f31); + BoardModelVisibilitySet(lbl_1_bss_F4[i], 1); + } + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(19, 27)); + var_r22 = HuWinCreate(-10000.0f, 368.0f, sp8[0], sp8[1], 0); + HuWinMesSet(var_r22, MAKE_MESSID(19, 27)); + HuWinBGTPLvlSet(var_r22, 0.0f); + HuWinMesSpeedSet(var_r22, 0); + var_f31 = 0.0f; + temp_r17 = GWSystem.player_curr; + temp_r20 = GWPlayer[temp_r17].port; + var_f29 = BoardModelRotYGet(lbl_1_bss_FA) - 180.0f; + if (var_f29 < 0.0f) { + var_f29 += 360.0f; + } + var_r21 = frandmod(30) + 30; + var_r18 = 0; + while (TRUE) { + var_r23 = var_r27; + if (GWPlayer[temp_r17].com) { + var_r26 = var_r25 = 0; + var_r19 = 0; + if (var_r21 != 0) { + var_r21--; + } else { + var_r21 = frandmod(10) + 15; + if (frandBool() || var_r18 == 3) { + var_r19 = 0x100; + } else { + OSReport("com sel chg: %d \n", var_r29); + var_r18++; + var_r23 = frandmod(var_r29); + } + } + } else { + var_r26 = HuPadStkX[temp_r20]; + var_r25 = HuPadStkY[temp_r20]; + var_r19 = HuPadBtnDown[temp_r20]; + } + if (abs(var_r26) < 10) { + var_r26 = 0; + } + if (abs(var_r25) < 10) { + var_r25 = 0; + } + if (var_r26 != 0 || var_r25 != 0) { + var_f30 = atan2d(-var_r26, var_r25) - 180.0; + var_f30 += var_f29; + if (var_f30 >= 360.0f) { + var_f30 -= 360.0f; + } + if (var_f30 < 0.0f) { + var_f30 += 360.0f; + } + for (i = 0; i < var_r29; i++) { + if (fabs(sp28[i] - var_f30) < 30.0) { + var_r23 = i; + break; + } + } + } + if (var_r23 != var_r27) { + HuAudFXPlay(0); + var_f31 = 0.0f; + var_r27 = var_r23; + } + if (var_r19 & 0x100) { + break; + } + for (i = 0; i < var_r29; i++) { + if (var_r27 == i) { + sp38.x = sp38.y = sp38.z = 1.8f + sind(var_f31); + var_f31 += 8.0f; + if (var_f31 > 180.0f) { + var_f31 -= 180.0f; + } + } else { + sp38.x = sp38.y = sp38.z = 1.8f; + } + BoardModelScaleSetV(lbl_1_bss_F4[i], &sp38); + } + HuPrcVSleep(); + } + HuAudFXPlay(2); + for (i = 0; i < var_r29; i++) { + BoardModelVisibilitySet(lbl_1_bss_F4[i], 0); + } + HuWinKill(var_r22); + var_r24 = sp20[var_r27]; + lbl_1_bss_70 = sp18[var_r27]; + lbl_1_bss_C2 = fn_1_4680(var_r24); + } else if (lbl_1_bss_70 != 0) { + i = BoardSpaceLinkTargetListGet(0, lbl_1_bss_78, sp10); + for (i--; i >= 0; i--) { + var_r28 = BoardSpaceGet(0, sp10[i]); + if (var_r28->flag & 0x200) { + break; + } + } + var_r24 = sp10[i]; + } else { + for (i = 0; i < temp_r30->link_cnt; i++) { + var_r28 = BoardSpaceGet(0, temp_r30->link[i]); + if (var_r28->flag & 0x200) { + break; + } + } + var_r24 = temp_r30->link[i]; + } + return var_r24; +} + +static void fn_1_45A8(void) { + float *temp_r30; + s32 var_r31; + + var_r31 = 15; + temp_r30 = (float*) &HuPrcCurrentGet()->user_data; + while (TRUE) { + if (var_r31 == 0) { + BoardCameraMoveSet(0); + BoardCameraTargetPlayerSet(GWSystem.player_curr); + BoardCameraZoomSet(700.0f); + BoardStatusShowSetAll(0); + break; + } + var_r31--; + HuPrcVSleep(); + } + while (TRUE) { + BoardCameraRotSet(-15.0f, *temp_r30); + HuPrcVSleep(); + } +} + +static void fn_1_4630(void) { + BoardCameraMoveSet(0); + BoardCameraTargetPlayerSet(GWSystem.player_curr); + BoardCameraViewSet(2); + BoardStatusShowSetAll(1); + BoardCameraMoveSet(1); +} + +static s32 fn_1_4680(s16 arg0) { + BoardSpace *var_r30; + BoardSpace *var_r29; + s16 sp8[4]; + s16 var_r26; + s32 var_r27; + s32 i; + + var_r27 = 0; + var_r26 = 0; + var_r30 = BoardSpaceGet(0, arg0); + lbl_1_bss_C2 = 0; + while (TRUE) { + for (i = 0; i < 4; i++) { + if (i != GWSystem.player_curr && arg0 == GWPlayer[i].space_curr) { + lbl_1_bss_BA[var_r27++] = i; + } + } + if (var_r27 == 3 || var_r26 == 1) { + break; + } + if (lbl_1_bss_70 != 0) { + i = BoardSpaceLinkTargetListGet(0, arg0, sp8); + for (i--; i >= 0; i--) { + var_r29 = BoardSpaceGet(0, sp8[i]); + if (var_r29->flag & 0x200) { + break; + } + } + arg0 = sp8[i]; + } else { + for (i = 0; i < var_r30->link_cnt; i++) { + var_r29 = BoardSpaceGet(0, var_r30->link[i]); + if (var_r29->flag & 0x200) { + break; + } + } + arg0 = var_r30->link[i]; + } + var_r30 = BoardSpaceGet(0, arg0); + if (var_r30->flag & 0x401) { + var_r26 = 1; + } + } + return var_r27; +} + +static void fn_1_4848(void) { + Vec sp20; + Vec sp14; + float temp_f28; + BssE4Data *var_r29; + s32 temp_r30; + s32 i; + + temp_r30 = (s32) HuPrcCurrentGet()->user_data; + BoardPlayerPosGet(temp_r30, &sp20); + BoardPlayerMotBlendSet(temp_r30, BoardModelRotYGet(lbl_1_bss_FA) - 180.0f, 0xA); + while (!BoardPlayerMotBlendCheck(temp_r30)) { + BoardModelPosGet(lbl_1_bss_FA, &sp14); + temp_f28 = VECDistanceXZ(&sp20, &sp14); + if (temp_f28 <= 200.0f) { + HuAudPlayerVoicePlay(temp_r30, 0x128); + goto block_A; + } + HuPrcVSleep(); + } + BoardPlayerMotionShiftSet(temp_r30, lbl_1_bss_52[temp_r30][0], 0.0f, 5.0f, 0); + HuAudPlayerVoicePlay(temp_r30, 0x128); + for (i = 0; i < 65; i++) { + BoardModelPosGet(lbl_1_bss_FA, &sp14); + temp_f28 = VECDistanceXZ(&sp20, &sp14); + if (temp_f28 <= 200.0f) { + goto block_A; + } + HuPrcVSleep(); + } + BoardPlayerMotionShiftSet(temp_r30, 1, 0.0f, 5.0f, 0); + BoardModelPosGet(lbl_1_bss_FA, &sp14); + temp_f28 = VECDistanceXZ(&sp20, &sp14); + if (temp_f28 > 200.0f) { + HuPrcVSleep(); + } +block_A: + lbl_1_bss_B2[temp_r30] = 2; + BoardPlayerMotionStart(temp_r30, lbl_1_bss_52[temp_r30][2], 0x40000001); + temp_f28 = 20.0f; + omVibrate(temp_r30, 12, 4, 2); + while (TRUE) { + sp20.y += temp_f28; + BoardPlayerPosSetV(temp_r30, &sp20); + if (sp20.y >= 600.0f) { + break; + } + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r30, lbl_1_bss_52[temp_r30][1], 0x40000001); + for (i = 0; i < 4; i++) { + var_r29 = fn_1_2FBC(i); + if (var_r29->unk08 == -1) { + break; + } + } + var_r29->unk08 = temp_r30; + BoardPlayerRotYSet(temp_r30, BoardModelRotYGet(var_r29->unk04)); + for (i = 0; i < 4; i++) { + HuPrcSetStat(lbl_1_bss_E4[i], 1); + } + for (i = 0; i < 4; i++) { + if (lbl_1_bss_D4[i] && i != temp_r30) { + HuPrcSetStat(lbl_1_bss_D4[i], 1); + } + } + HuPrcSetStat(lbl_1_bss_48, 1); + BoardWinCreate(0, MAKE_MESSID(32, 2), -1); + BoardWinInsertMesSet(GWPlayer[temp_r30].character, 0); + BoardWinWait(); + BoardWinKill(); + for (i = 0; i < 4; i++) { + HuPrcResetStat(lbl_1_bss_E4[i], 1); + } + for (i = 0; i < 4; i++) { + if (lbl_1_bss_D4[i] && i != temp_r30) { + HuPrcResetStat(lbl_1_bss_D4[i], 1); + } + } + HuPrcResetStat(lbl_1_bss_48, 1); + lbl_1_bss_D4[temp_r30] = NULL; + HuPrcEnd(); +} + +static void fn_1_5018(void) { + Vec sp18; + Vec spC; + float var_f29; + Process *temp_r3; + s32 i; + + BoardModelPosGet(lbl_1_bss_FA, &spC); + for (i = 0; i < lbl_1_bss_C2; i++) { + BoardPlayerPosGet(lbl_1_bss_BA[i], &sp18); + var_f29 = VECDistanceXZ(&sp18, &spC); + if (var_f29 < 900.0f && lbl_1_bss_B2[lbl_1_bss_BA[i]] == 0) { + temp_r3 = HuPrcChildCreate(fn_1_4848, 0x2003, 0x2000, 0, boardMainProc); + lbl_1_bss_D4[lbl_1_bss_BA[i]] = temp_r3; + temp_r3->user_data = (u8*) lbl_1_bss_BA[i]; + lbl_1_bss_B2[lbl_1_bss_BA[i]] = 1; + } + } +} + +static void fn_1_52A0(s16 arg0, Vec *arg1) { + Vec sp40[4]; + Vec sp10[4]; + BssE4Data *var_r30; + BoardSpace *var_r29; + BoardSpace *var_r28; + s16 sp8[4]; + s32 var_r27; + s32 i; + + OSReport("Landing Pos Get\n"); + lbl_1_bss_B0 = -1; + var_r29 = BoardSpaceGet(0, arg0); + for (i = 0; i < var_r29->link_cnt; i++) { + var_r28 = BoardSpaceGet(0, var_r29->link[i]); + if (var_r28->flag & 2) { + lbl_1_bss_B0 = var_r29->link[i]; + break; + } + } + if (lbl_1_bss_B0 == -1) { + i = BoardSpaceLinkTargetListGet(0, arg0, sp8); + for (i--; i >= 0; i--) { + var_r28 = BoardSpaceGet(0, sp8[i]); + if (var_r28->flag & 2) { + lbl_1_bss_B0 = sp8[i]; + break; + } + } + } + if (lbl_1_bss_B0 == -1) { + OSReport("\x92\x85\x92\x6E\x92\x6E\x93_\x82\xAA\x96\xB3\x82\xA2\n"); + while (TRUE) { + HuPrcVSleep(); + } + } + var_r27 = 0; + for (i = 0; i < 4; i++) { + BoardPlayerPosGet(i, &sp40[i]); + BoardPlayerRotGet(i, &sp10[i]); + sp8[i] = GWPlayer[i].space_curr; + if (lbl_1_bss_B0 == sp8[i]) { + var_r27 += 1; + } + } + for (i = 0; i < 4; i++) { + var_r30 = fn_1_2FBC(i); + if (var_r30->unk08 != -1 && var_r30->unk08 != GWSystem.player_curr) { + BoardSpaceCornerPosGet(lbl_1_bss_B0, var_r27++, &arg1[var_r30->unk08]); + } + } + for (i = 0; i < 4; i++) { + BoardPlayerPosSetV(i, &sp40[i]); + BoardPlayerRotSetV(i, &sp10[i]); + GWPlayer[i].space_curr = sp8[i]; + } + BoardSpacePosGet(0, lbl_1_bss_B0, &arg1[GWSystem.player_curr]); +} + +static void fn_1_55A0(void) { + lbl_1_bss_48 = NULL; +} + +void fn_1_55B4(void) { + s32 sp8; + + sp8 = GWSystem.player_curr; + lbl_1_bss_48 = HuPrcChildCreate(fn_1_20EC, 0x2004, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_48, fn_1_55A0); + while (lbl_1_bss_48) { + HuPrcVSleep(); + } +} + +static void fn_1_5648(void) { + ParticleData *var_r30; + s32 i; + + lbl_1_bss_4C = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_W04, 6)); + for (i = 0; i < 4; i++) { + lbl_1_bss_C4[i] = omAddObjEx(boardObjMan, 0x101, 1, 0, -1, fn_1_59C4); + lbl_1_bss_C4[i]->model[0] = Hu3DParticleCreate(lbl_1_bss_4C, 100); + Hu3DParticleColSet(lbl_1_bss_C4[i]->model[0], 0x40, 0xD2, 0xFF); + Hu3DParticleScaleSet(lbl_1_bss_C4[i]->model[0], 5.0f); + Hu3DParticleHookSet(lbl_1_bss_C4[i]->model[0], fn_1_5A2C); + Hu3DParticleBlendModeSet(lbl_1_bss_C4[i]->model[0], 1); + Hu3DModelAttrSet(lbl_1_bss_C4[i]->model[0], 1); + var_r30 = Hu3DData[lbl_1_bss_C4[i]->model[0]].unk_120; + var_r30->unk_1C = lbl_1_bss_C4[i]; + } +} + +static void fn_1_5828(void) { + s32 i; + + for (i = 0; i < 4; i++) { + Hu3DModelKill(lbl_1_bss_C4[i]->model[0]); + omDelObjEx(boardObjMan, lbl_1_bss_C4[i]); + } +} + +static s16 fn_1_58A4(Vec *arg0) { + s16 i; + + for (i = 0; i < 4; i++) { + if (lbl_1_bss_C4[i]->work[0] == 0) { + lbl_1_bss_C4[i]->work[0] = 1; + lbl_1_bss_C4[i]->trans.x = arg0->x; + lbl_1_bss_C4[i]->trans.y = arg0->y; + lbl_1_bss_C4[i]->trans.z = arg0->z; + return i; + } + } + return -1; +} + +static void fn_1_5980(s16 arg0) { + lbl_1_bss_C4[arg0]->work[1] = 1; + lbl_1_bss_C4[arg0]->work[2] = 0; +} + +static void fn_1_59C4(omObjData *arg0) { + if (arg0->work[0] != 0) { + Hu3DModelAttrReset(arg0->model[0], 1); + } + if (arg0->work[2] != 0) { + arg0->work[0] = 0; + Hu3DModelAttrSet(arg0->model[0], 1); + } +} + +static void fn_1_5A2C(ModelData *model, ParticleData *particle, Mtx matrix) { + s32 var_r26; + s32 i; + s32 j; + HsfanimStruct01 *var_r31; + UnkParticleDataStruct *temp_r27; + + temp_r27 = particle->unk_1C; + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + var_r31->unk08.z = 0.0f; + var_r31->unk2C = 0.0f; + } + } + if (temp_r27->unk50 == 0) { + for (i = 0; i < 3; i++) { + var_r31 = particle->unk_48; + for (j = 0; j < particle->unk_30; j++, var_r31++) { + if (var_r31->unk08.z == 0.0f) { + break; + } + } + if (j != particle->unk_30) { + var_r31->unk08.x = 0.003921569f * frand8() * 360.0f; + var_r31->unk08.y = 1.0f + 0.003921569f * frand8() * 1.5f; + var_r31->unk08.z = 240.0f; + var_r31->unk40.r = 0x40; + var_r31->unk40.g = 0xD2; + var_r31->unk40.b = 0xFF; + var_r31->unk20 = 2.0f + 0.003921569f * frand8() * 8.0f; + var_r31->unk24 = 2.0f + 0.003921569f * frand8() * 6.0f; + var_r31->unk28 = 1.0f + 0.003921569f * frand8() * 3.0f; + var_r31->unk34.x = -100.0f + 0.003921569f * frand8() * 200.0f; + var_r31->unk34.y = 0.003921569f * frand8() * 10.0f; + var_r31->unk34.z = -100.0f + 0.003921569f * frand8() * 200.0f; + var_r31->unk2C = 7.0f + 0.003921569f * frand8() * 3.0f; + } + } + } + var_r31 = particle->unk_48; + var_r26 = 0; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + if (var_r31->unk08.z != 0.0f) { + var_r31->unk34.x += var_r31->unk28 * sind(var_r31->unk08.x); + var_r31->unk34.y += var_r31->unk08.y; + var_r31->unk34.z += var_r31->unk28 * cosd(var_r31->unk08.x); + var_r31->unk08.x += var_r31->unk24 * sind(var_r31->unk08.x); + if (var_r31->unk08.x >= 360.0f) { + var_r31->unk08.x -= 360.0f; + } + var_r31->unk40.a = var_r31->unk08.z; + var_r31->unk08.z -= var_r31->unk20; + if (var_r31->unk08.z <= 0.0f) { + var_r31->unk08.z = 0.0f; + } + } else { + var_r26++; + } + } + if (var_r26 == particle->unk_30) { + temp_r27->unk54 = 1; + } +} diff --git a/src/REL/w07Dll/bridge.c b/src/REL/w07Dll/bridge.c new file mode 100644 index 00000000..8198e5e7 --- /dev/null +++ b/src/REL/w07Dll/bridge.c @@ -0,0 +1,314 @@ +#include "REL/w04Dll.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "game/memory.h" +#include "game/objsub.h" +#include "game/process.h" +#include "game/window.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "ext_math.h" + +static void fn_1_17B4(s16 arg0, s16 arg1); +static void fn_1_191C(void); +static void fn_1_1B98(s16 arg0); +static void fn_1_1C2C(void); +static void fn_1_1E60(void); +static void fn_1_2008(void); +static void fn_1_2044(void); + +static Process *lbl_1_bss_3C[3]; +static Process *lbl_1_bss_38; + +static s32 lbl_1_data_298[] = { + DATA_MAKE_NUM(DATADIR_W04, 32), + -1 +}; + +void fn_1_12FC(void) { + Vec sp14; + Vec sp8; + s16 *temp_r3; + s32 var_r29; + s32 i; + + sp8.x = sp8.y = sp8.z = 1.5f; + for (i = 0; i < 3; i++) { + lbl_1_bss_3C[i] = HuPrcChildCreate(fn_1_1E60, 0x2003, 0x1000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_3C[i], fn_1_2008); + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, 5 * sizeof(s16), MEMORY_DEFAULT_NUM); + lbl_1_bss_3C[i]->user_data = temp_r3; + temp_r3[0] = i; + temp_r3[1] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 31), lbl_1_data_298, 1); + BoardModelScaleSetV(temp_r3[1], &sp8); + temp_r3[2] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 33), NULL, 1); + BoardModelAttrSet(temp_r3[2], 0x40000001); + BoardModelHookSet(temp_r3[1], "itemhook_R", temp_r3[2]); + BoardModelMotionStart(temp_r3[1], 1, 0x40000001); + var_r29 = (0x8000 >> i); + var_r29 |= 0x1000; + temp_r3[3] = BoardSpaceFlagSearch(0, var_r29); + var_r29 = (0x8000 >> i); + var_r29 |= 0x800; + temp_r3[4] = BoardSpaceFlagSearch(0, var_r29); + BoardSpacePosGet(0, temp_r3[3], &sp14); + BoardModelPosSetV(temp_r3[1], &sp14); + } + sp8.x = sp8.y = sp8.z = 2.0f; + BoardModelScaleSetV(lbl_1_bss_14[11], &sp8); + fn_1_1C2C(); + if (lbl_1_bss_0->unk00 & 1) { + BoardModelMotionStartEndSet(lbl_1_bss_14[5], 0, 180); + BoardModelMotionTimeSet(lbl_1_bss_14[5], 108.0f); + fn_1_17B4(0, 1); + BoardModelAttrSet(lbl_1_bss_14[5], 0x40000002); + return; + } + BoardModelAttrReset(lbl_1_bss_14[5], 0x40000002); + BoardModelMotionStartEndSet(lbl_1_bss_14[5], 0, 60); + BoardModelMotionTimeSet(lbl_1_bss_14[5], 0.0f); + fn_1_17B4(1, 1); +} + +void fn_1_15C8(void) { + s32 i; + + for (i = 0; i < 3; i++) { + HuPrcKill(lbl_1_bss_3C[i]); + } +} + +static s32 lbl_1_data_2AC[8] = { + DATA_MAKE_NUM(DATADIR_MARIOMOT, 28), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 28), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 28), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 28), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 28), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 28), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 28), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 28) +}; + +void fn_1_1618(void) { + s32 temp_r31; + s16 temp_r30; + + temp_r31 = GWSystem.player_curr; + temp_r30 = BoardPlayerMotionCreate(temp_r31, lbl_1_data_2AC[GWPlayer[temp_r31].character]); + BoardRollDispSet(0); + BoardPlayerMotBlendSet(temp_r31, 180, 15); + BoardCameraViewSet(2); + while (!BoardPlayerMotBlendCheck(temp_r31)) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + lbl_1_bss_0->unk00 ^= 1; + fn_1_191C(); + fn_1_1C2C(); + HuAudPlayerVoicePlay(temp_r31, 0x128); + BoardPlayerMotionStart(temp_r31, temp_r30, 0); + while (!BoardPlayerMotionEndCheck(temp_r31)) { + HuPrcVSleep(); + } + HuPrcSleep(30); + if (!(lbl_1_bss_0->unk00 & 1)) { + BoardWinCreate(2, MAKE_MESSID(32, 24), 11); + BoardWinWait(); + BoardWinKill(); + } + BoardPlayerMotionShiftSet(temp_r31, 1, 0.0f, 10.0f, 0x40000001); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + BoardRollDispSet(1); + BoardPlayerMotionKill(temp_r31, temp_r30); + HuPrcKill(NULL); + while (TRUE) { + HuPrcVSleep(); + } +} + +static void fn_1_17B4(s16 arg0, s16 arg1) { + float var_f30; + float var_f31; + s32 i; + + if (arg0 != 0) { + var_f31 = 0.0f; + var_f30 = 255.0f / arg1; + } else { + var_f31 = 255.0f; + var_f30 = -255.0f / arg1; + } + for (i = 0; i < arg1; i++) { + BoardModelAlphaSet(lbl_1_bss_14[11], var_f31); + var_f31 += var_f30; + HuPrcVSleep(); + } + if (arg0 != 0) { + BoardModelAlphaSet(lbl_1_bss_14[11], 0xFF); + } else { + BoardModelAlphaSet(lbl_1_bss_14[11], 0); + } +} + +static void fn_1_191C(void) { + float var_f31; + float temp_f29; + float var_f30; + float temp_f28; + s32 var_r31; + s32 var_r30; + + HuAudFXPlay(0x4B); + if (lbl_1_bss_0->unk00 & 1) { + BoardWinCreate(2, MAKE_MESSID(32, 23), 11); + BoardWinWait(); + BoardWinKill(); + omVibrate(GWSystem.player_curr, 12, 6, 6); + HuAudFXPlay(0x45E); + BoardModelMotionStartEndSet(lbl_1_bss_14[5], 0, 180); + BoardModelMotionTimeSet(lbl_1_bss_14[5], 59.0f); + var_f31 = 255.0f; + temp_f29 = -5.1f; + for (var_r31 = 0; var_r31 < 50; var_r31++) { + BoardModelAlphaSet(lbl_1_bss_14[11], var_f31); + var_f31 += temp_f29; + HuPrcVSleep(); + } + BoardModelAlphaSet(lbl_1_bss_14[11], 0); + BoardModelAttrSet(lbl_1_bss_14[5], 0x40000002); + } else { + omVibrate(GWSystem.player_curr, 12, 6, 6); + HuAudFXPlay(0x45D); + BoardModelAttrReset(lbl_1_bss_14[5], 0x40000002); + BoardModelMotionStartEndSet(lbl_1_bss_14[5], 0, 180); + BoardModelMotionTimeSet(lbl_1_bss_14[5], 110.0f); + var_f30 = 0.0f; + temp_f28 = 3.642857f; + for (var_r30 = 0; var_r30 < 70; var_r30++) { + BoardModelAlphaSet(lbl_1_bss_14[11], var_f30); + var_f30 += temp_f28; + HuPrcVSleep(); + } + BoardModelAlphaSet(lbl_1_bss_14[11], 0xFF); + BoardModelMotionStartEndSet(lbl_1_bss_14[5], 0, 60); + } +} + +static void fn_1_1B98(s16 arg0) { + BoardSpace *temp_r3; + s32 i; + + for (i = 0; i < BoardSpaceCountGet(0); i++) { + temp_r3 = BoardSpaceGet(0, i + 1); + if (temp_r3->flag & 0x20) { + if (arg0 != 0) { + temp_r3->flag |= 0x04000000; + } else { + temp_r3->flag &= ~0x04000000; + } + } + } +} + +static void fn_1_1C2C(void) { + s16 *var_r28; + s32 i; + + if (lbl_1_bss_0->unk00 == 0) { + BoardModelMotionStartEndSet(lbl_1_bss_14[3], 0, 80); + BoardModelMotionTimeSet(lbl_1_bss_14[3], 0.0f); + BoardModelVisibilitySet(lbl_1_bss_14[0], 1); + BoardModelVisibilitySet(lbl_1_bss_14[1], 1); + BoardModelVisibilitySet(lbl_1_bss_14[2], 1); + fn_1_1B98(0); + for (i = 0; i < 3; i++) { + var_r28 = lbl_1_bss_3C[i]->user_data; + BoardModelMotionStartEndSet(var_r28[2], 0, 20); + } + } else { + BoardModelMotionStartEndSet(lbl_1_bss_14[3], 100, 100); + BoardModelMotionTimeSet(lbl_1_bss_14[3], 100.0f); + BoardModelVisibilitySet(lbl_1_bss_14[0], 0); + BoardModelVisibilitySet(lbl_1_bss_14[1], 0); + BoardModelVisibilitySet(lbl_1_bss_14[2], 0); + fn_1_1B98(1); + for (i = 0; i < 3; i++) { + var_r28 = lbl_1_bss_3C[i]->user_data; + BoardModelMotionStartEndSet(var_r28[2], 25, 25); + } + } +} + +static void fn_1_1E60(void) { + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f31; + s16 *temp_r31; + s16 var_r29; + s16 var_r28; + s16 i; + + temp_r31 = HuPrcCurrentGet()->user_data; + var_r29 = temp_r31[3]; + var_r28 = temp_r31[4]; + while (TRUE) { + BoardSpacePosGet(0, var_r29, &sp14); + BoardSpacePosGet(0, var_r28, &sp8); + PSVECSubtract(&sp8, &sp14, &sp20); + PSVECScale(&sp20, &sp20, 0.008333334f); + temp_f31 = atan2d(sp8.x - sp14.x, sp8.z - sp14.z); + BoardModelPosGet(temp_r31[1], &sp14); + while (fn_1_1130(temp_r31[1], temp_f31, 2.5f) == 0) { + if (lbl_1_bss_0->unk00 == 0) { + BoardModelAlphaSet(temp_r31[1], 0xFF); + } else { + BoardModelAlphaSet(temp_r31[1], 0); + } + HuPrcVSleep(); + } + for (i = 0; i < 120; i++) { + if (lbl_1_bss_0->unk00 == 0) { + BoardModelAlphaSet(temp_r31[1], 0xFF); + } else { + BoardModelAlphaSet(temp_r31[1], 0); + } + PSVECAdd(&sp14, &sp20, &sp14); + BoardModelPosSetV(temp_r31[1], &sp14); + HuPrcVSleep(); + } + i = var_r29; + var_r29 = var_r28; + var_r28 = i; + } +} + +static void fn_1_2008(void) { + s16 *temp_r31; + + temp_r31 = HuPrcCurrentGet()->user_data; + BoardModelKill(temp_r31[1]); + HuMemDirectFree(temp_r31); +} + +static void fn_1_2044(void) { + lbl_1_bss_38 = NULL; +} + +void fn_1_2058(void) { + s32 sp8; + + sp8 = GWSystem.player_curr; + lbl_1_bss_38 = HuPrcChildCreate(fn_1_1618, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_38, fn_1_2044); + while (lbl_1_bss_38) { + HuPrcVSleep(); + } +} diff --git a/src/REL/w07Dll/main.c b/src/REL/w07Dll/main.c new file mode 100644 index 00000000..ec194dc7 --- /dev/null +++ b/src/REL/w07Dll/main.c @@ -0,0 +1,446 @@ +#include "REL/w04Dll.h" +#include "REL/board_executor.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "game/object.h" +#include "game/process.h" +#include "game/window.h" +#include "game/board/boo_house.h" +#include "game/board/com.h" +#include "game/board/lottery.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/shop.h" +#include "game/board/space.h" +#include "game/board/star.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "math.h" + +static void fn_1_750(void); +static void fn_1_794(void); +static s32 fn_1_798(void); +static s32 fn_1_7FC(void); +static void fn_1_930(void); +static void fn_1_954(void); +static void fn_1_958(void); +static void fn_1_CF8(void); +static void fn_1_D30(void); +static void fn_1_DB0(void); +static s32 fn_1_103C(void); + +s16 lbl_1_bss_14[MAPOBJ_MAX]; + +BoardMapObject lbl_1_data_0[MAPOBJ_MAX] = { + { { 750.0f, 0.0f, 1500.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 5) }, + { { -1500.0f, 0.0f, 150.0f }, { 0.0f, 89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 5) }, + { { 1200.0f, 0.0f, -1650.0f }, { 0.0f, -89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 5) }, + { { -1950.0f, 0.0f, -2100.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 4) }, + { { 2100.0f, 0.0f, -2100.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 18) }, + { { -150.0f, 0.0f, -150.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 23) }, + { { 3000.0f, 0.0f, -600.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 12) }, + { { -1500.0f, 0.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 15) }, + { { -1950.0f, 0.0f, -2000.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 34) }, + { { -1350.0f, 50.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 34) }, + { { 2750.0f, 0.0f, -600.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 34) }, + { { -150.0f, 0.0f, -100.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 29) }, + { { 2850.0f, 0.0f, -1500.0f }, { 0.0f, -89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 17) }, + { { -3150.0f, 0.0f, 300.0f }, { 0.0f, 89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 17) }, + { { 2850.0f, 0.0f, 0.000003f }, { 0.0f, -89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 17) }, + { { 900.0f, 0.0f, 2250.0f }, { 0.0f, 180.00001f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W04, 17) } +}; + +static s32 *lbl_1_bss_10; +static s16 lbl_1_bss_8[4]; +static Process *lbl_1_bss_4; +UnkW04BoardData *lbl_1_bss_0; + +static s16 lbl_1_data_280 = -1; +static s16 lbl_1_data_282 = -1; +static s16 lbl_1_data_284 = -1; +static s16 lbl_1_data_286 = -1; + +static s32 lbl_1_data_288[] = { + DATA_MAKE_NUM(DATADIR_W04, 8), + -1 +}; + +static s32 lbl_1_data_290[] = { + DATA_MAKE_NUM(DATADIR_BGUEST, 24), + -1 +}; + +void BoardCreate(void) { + BoardMapObject *temp_r30; + s32 sp8; + s32 i; + + omDBGMenuButton = 1; + sp8 = GWBoardGet(); + lbl_1_bss_0 = (UnkW04BoardData*) GWSystem.board_data; + BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W04, 0)); + lbl_1_data_280 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 1), NULL, 0); + fn_8006DDE8(lbl_1_data_280, -1.0f); + BoardModelPosSet(lbl_1_data_280, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_280, 0, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_data_280, 1.0f); + lbl_1_data_282 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 2), NULL, 0); + fn_8006DDE8(lbl_1_data_282, -1.0f); + BoardModelPosSet(lbl_1_data_282, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_282, 0, 0x40000001); + lbl_1_data_284 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 7), lbl_1_data_288, 0); + BoardModelPosSet(lbl_1_data_284, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_284, 1, 0x40000001); + lbl_1_data_286 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 18), lbl_1_data_290, 0); + BoardModelMotionStart(lbl_1_data_286, 1, 0x40000001); + BoardLightHookSet(fn_1_750, fn_1_794); + for (i = 0; i < 16; i++) { + temp_r30 = &lbl_1_data_0[i]; + if (temp_r30->data_num != -1) { + if (i == 8 || i == 9 || i == 10 || i == 11) { + lbl_1_bss_10 = lbl_1_data_290; + } else { + lbl_1_bss_10 = NULL; + } + lbl_1_bss_14[i] = BoardModelCreate(temp_r30->data_num, lbl_1_bss_10, 0); + BoardModelPosSetV(lbl_1_bss_14[i], &temp_r30->pos); + BoardModelRotSetV(lbl_1_bss_14[i], &temp_r30->rot); + BoardModelScaleSetV(lbl_1_bss_14[i], &temp_r30->scale); + BoardModelVisibilitySet(lbl_1_bss_14[i], 1); + if (lbl_1_bss_10 != NULL) { + BoardModelMotionStart(lbl_1_bss_14[i], 1, 0x40000001); + } + } + } + BoardModelAlphaSet(lbl_1_bss_14[8], 0); + BoardModelVisibilitySet(lbl_1_bss_14[8], 0); + BoardModelMotionStartEndSet(lbl_1_bss_14[5], 0, 60); + BoardModelAttrSet(lbl_1_bss_14[5], 0x40000001); + BoardModelAttrSet(lbl_1_bss_14[4], 0x40000001); + fn_1_930(); + fn_1_12FC(); + fn_1_6024(); + BoardModelAttrSet(lbl_1_bss_14[0], 0x40000001); + BoardModelAttrSet(lbl_1_bss_14[1], 0x40000001); + BoardModelAttrSet(lbl_1_bss_14[2], 0x40000001); + BoardModelAttrSet(lbl_1_bss_14[3], 0x40000001); + BoardSpaceWalkEventFuncSet(fn_1_7FC); + BoardSpaceWalkMiniEventFuncSet(fn_1_103C); + BoardSpaceLandEventFuncSet(fn_1_798); + BoardStarHostSet(lbl_1_data_284); + BoardBooHouseHostSet(lbl_1_data_286); + BoardShopHostSet(lbl_1_data_286); + BoardLotteryHostSet(lbl_1_data_286); + BoardJunctionMaskSet(0x100); + BoardJunctionMaskSet(0x40); +} + +void BoardDestroy(void) { + s32 i; + + fn_1_15C8(); + for (i = 0; i < MAPOBJ_MAX; i++) { + if (lbl_1_bss_14[i] != 0) { + BoardModelKill(lbl_1_bss_14[i]); + lbl_1_bss_14[i] = 0; + } + } + if (lbl_1_data_286 != -1) { + BoardModelKill(lbl_1_data_286); + lbl_1_data_286 = -1; + } + if (lbl_1_data_284 != -1) { + BoardModelKill(lbl_1_data_284); + lbl_1_data_284 = -1; + } + if (lbl_1_data_280 != -1) { + BoardModelKill(lbl_1_data_280); + lbl_1_data_280 = -1; + } + if (lbl_1_data_282 != -1) { + BoardModelKill(lbl_1_data_282); + lbl_1_data_282 = -1; + } + BoardSpaceDestroy(); +} + +static void fn_1_750(void) { + s16 var_r31; + + var_r31 = BoardModelIDGet(lbl_1_data_280); + Hu3DModelLightInfoSet(var_r31, 1); +} + +static void fn_1_794(void) { +} + +static s32 fn_1_798(void) { + s32 var_r31; + s32 var_r30; + s32 sp8; + + var_r31 = GWSystem.player_curr; + var_r30 = GWPlayer[var_r31].space_curr; + sp8 = BoardSpaceFlagGet(0, var_r30); + fn_1_9EBC(); +} + +static s32 fn_1_7FC(void) { + s32 temp_r31; + BoardSpace *temp_r3; + + temp_r31 = GWSystem.player_curr; + if (BoardPlayerSizeGet(temp_r31) == 2) { + return 0; + } + if (GWPlayer[temp_r31].bowser_suit) { + return 0; + } + temp_r3 = BoardSpaceGet(0, GWPlayer[temp_r31].space_curr); + if (temp_r3->flag & 0x80) { + fn_1_2058(); + return 1; + } + if (temp_r3->flag & 0x100) { + if (lbl_1_bss_0->unk00 & 1) { + fn_1_55B4(); + } else { + BoardRollDispSet(0); + BoardPlayerIdleSet(temp_r31); + BoardWinCreate(0, MAKE_MESSID(32, 25), -1); + BoardWinWait(); + BoardWinKill(); + BoardRollDispSet(1); + } + return 1; + } + return 0; +} + +static void fn_1_930(void) { + fn_1_A0F8(); + fn_1_C7A0(); +} + +static void fn_1_954(void) { +} + +static void fn_1_958(void) { + Vec sp8; + u32 temp_r3; + s32 temp_r27; + s32 temp_r31; + s32 var_r26; + s32 var_r30; + s32 var_r29; + + temp_r31 = GWSystem.player_curr; + if (BoardPlayerItemCount(temp_r31) == 3) { + BoardWinCreate(2, MAKE_MESSID(32, 12), 3); + BoardWinWait(); + BoardWinKill(); + HuPrcEnd(); + } + lbl_1_bss_8[0] = 0; + var_r30 = 1; + while (var_r30 < 3) { + lbl_1_bss_8[var_r30] = frandmod(14); + if (lbl_1_bss_8[var_r30] != 10 && lbl_1_bss_8[var_r30] != 13) { + for (var_r29 = 0; var_r29 < var_r30; var_r29++) { + if (lbl_1_bss_8[var_r30] == lbl_1_bss_8[var_r29]) { + lbl_1_bss_8[var_r30] = -1; + } + } + if (lbl_1_bss_8[var_r30] != -1) { + var_r30++; + } + } + } + fn_1_BB00(lbl_1_bss_8); + BoardWinCreateChoice(2, MAKE_MESSID(32, 13), 3, 0); + if (GWPlayer[temp_r31].com) { + if (BoardComPreferItemCheck(temp_r31, lbl_1_bss_8[0], lbl_1_bss_8[1], lbl_1_bss_8[2]) != -1) { + BoardComKeySetLeft(); + } else { + BoardComKeySetRight(); + } + } + BoardWinWait(); + BoardWinKill(); + temp_r3 = BoardWinChoiceGet(); + if (temp_r3 == 1 || temp_r3 == -1) { + BoardWinCreate(2, MAKE_MESSID(32, 14), 3); + BoardWinWait(); + BoardWinKill(); + BoardMGExit(); + fn_1_C2BC(); + while (BoardMGDoneFlagGet() != 1) { + HuPrcVSleep(); + } + BoardMGDoneFlagSet(0); + fn_1_BA7C(); + HuPrcEnd(); + } + temp_r27 = GWPlayer[temp_r31].space_curr; + var_r26 = BoardSpaceLinkFlagSearch(0, temp_r27, 0x02000000); + BoardPlayerMoveBetween(temp_r31, temp_r27, var_r26); + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r31, 1, 0x40000001); + BoardPlayerPosGet(temp_r31, &sp8); + sp8.y += 5.0f; + BoardPlayerPosSetV(temp_r31, &sp8); + BoardCameraViewSet(2); + BoardPlayerMotBlendSet(temp_r31, 180, 15); + while (!BoardPlayerMotBlendCheck(temp_r31)) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + fn_1_A1F0(); + while (BoardEventFlagGet() != 0) { + HuPrcVSleep(); + } + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r31, 1, 0x40000001); + HuPrcEnd(); +} + +static void fn_1_CF8(void) { + BoardWinKill(); + CharModelDataClose(-1); + lbl_1_bss_4 = NULL; +} + +static void fn_1_D30(void) { + lbl_1_bss_4 = HuPrcChildCreate(fn_1_958, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_4, fn_1_CF8); + while (lbl_1_bss_4) { + HuPrcVSleep(); + } +} + +static void fn_1_DB0(void) { + Vec sp20; + Vec sp14; + Vec sp8; + s32 temp_r31; + s32 temp_r3; + s32 temp_r29; + s32 temp_r3_2; + + temp_r31 = GWSystem.player_curr; + BoardWinCreateChoice(2, MAKE_MESSID(32, 17), 3, 0); + if (GWPlayer[temp_r31].com) { + if (frand() & 1) { + BoardComKeySetLeft(); + } else { + BoardComKeySetRight(); + } + } + BoardWinWait(); + BoardWinKill(); + temp_r3 = BoardWinChoiceGet(); + if (temp_r3 == 1 || temp_r3 == -1) { + BoardWinCreate(2, MAKE_MESSID(32, 18), 3); + BoardWinWait(); + BoardWinKill(); + BoardMGExit(); + while (BoardMGDoneFlagGet() != 1) { + HuPrcVSleep(); + } + BoardMGDoneFlagSet(0); + return; + } + sp20.x = -45.0f; + sp20.y = sp20.z = 0.0f; + sp14.y = 50.0f; + sp14.x = sp14.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[7], &sp20, &sp14, 1200.0f, 25.0f, 21); + temp_r29 = GWPlayer[temp_r31].space_curr; + temp_r3_2 = BoardSpaceLinkFlagSearch(0, temp_r29, 0x02000000); + BoardSpacePosGet(0, temp_r3_2, &sp8); + BoardPlayerMoveBetween(temp_r31, temp_r29, temp_r3_2); + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r31, 1, 0x40000001); + fn_1_C7D4(); + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + while (BoardEventFlagGet() != 0) { + HuPrcVSleep(); + } + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r31, 1, 0x40000001); +} + +static s32 fn_1_103C(void) { + s16 var_r30; + u32 temp_r31; + + var_r30 = GWPlayer[GWSystem.player_curr].space_curr; + temp_r31 = BoardSpaceFlagGet(0, var_r30) & 0x600000; + BoardRollDispSet(0); + if (temp_r31 & 0x200000) { + lbl_1_bss_4 = HuPrcChildCreate(fn_1_958, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_4, fn_1_CF8); + while (lbl_1_bss_4) { + HuPrcVSleep(); + } + } else if (temp_r31 & 0x400000) { + fn_1_DB0(); + } + BoardRollDispSet(1); +} + +s32 fn_1_1130(s16 arg0, float arg1, float arg2) { + float var_f29; + float var_f31; + s32 var_r31; + + var_r31 = 0; + var_f31 = BoardModelRotYGet(arg0); + arg1 = fmod(arg1, 360.0); + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (arg1 < 0.0f) { + arg1 += 360.0f; + } + if (var_f31 != arg1) { + var_f29 = arg1 - var_f31; + if (var_f29 < 0.0f) { + var_f29 += 360.0f; + } + if (var_f29 < 180.0f) { + if (var_f29 > arg2) { + var_f31 += arg2; + } else { + var_f31 = arg1; + } + } else if (360.0f - var_f29 > arg2) { + var_f31 -= arg2; + } else { + var_f31 = arg1; + } + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + BoardModelRotYSet(arg0, var_f31); + } else { + var_r31 = 1; + } + return var_r31; +} diff --git a/src/REL/w07Dll/mg_coin.c b/src/REL/w07Dll/mg_coin.c new file mode 100644 index 00000000..4be845b4 --- /dev/null +++ b/src/REL/w07Dll/mg_coin.c @@ -0,0 +1,663 @@ +#include "REL/w04Dll.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/frand.h" +#include "game/gamework_data.h" +#include "game/hsfdraw.h" +#include "game/hsfmotion.h" +#include "game/minigame_seq.h" +#include "game/msm.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/window.h" +#include "game/board/audio.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/window.h" + +static void fn_1_CF8C(omObjData *arg0); +static void fn_1_D0AC(void); +static void fn_1_D0DC(void); +static void fn_1_D174(omObjData *arg0); +static void fn_1_D230(omObjData *arg0); +static void fn_1_D2A4(omObjData *arg0); +static void fn_1_D554(omObjData *arg0); +static void fn_1_D6A8(omObjData *arg0); +static void fn_1_D70C(omObjData *arg0); +static void fn_1_D770(void); +static void fn_1_E004(void); +static void fn_1_E144(omObjData *arg0); +static void fn_1_E18C(omObjData *arg0); +static void fn_1_E374(omObjData *arg0); +static void fn_1_E4C0(omObjData *arg0); +static void fn_1_E6AC(omObjData *arg0); +static s16 fn_1_E880(omObjData *arg0); + +static u16 lbl_1_bss_326; +static s16 lbl_1_bss_324; +static omObjData *lbl_1_bss_320; +static omObjData *lbl_1_bss_31C; +static omObjData *lbl_1_bss_318; +static s16 lbl_1_bss_314; +static Vec lbl_1_bss_308; +static Vec lbl_1_bss_2FC; +static s16 lbl_1_bss_2FA; +static s16 lbl_1_bss_2F8; +static s16 lbl_1_bss_2D0[20]; +static u16 lbl_1_bss_2C2[7]; +static u16 lbl_1_bss_2B4[7]; +static s32 lbl_1_bss_2B0; + +static s32 lbl_1_data_588 = -1; + +static char *lbl_1_data_5BC[] = { + "pia1", "pia2", "pia3", "pia4", + "pia5", "pia6", "pia7", "pia8", + "pia9" +}; + +static u16 lbl_1_data_5E0[] = { + 0x0100, 0x0200, 0x0040, 0x0020, + 0x0800, 0x0400, 0x0010 +}; + +static s32 lbl_1_data_5F0[] = { + 0x0000046D, + 0x0000046E, + 0x0000046F, + 0x00000470, + 0x00000471, + 0x00000472, + 0x00000473, + 0x00000474 +}; + +void fn_1_C7A0(void) { + BoardModelAttrSet(lbl_1_bss_14[7], 0x40000002); +} + +void fn_1_C7D4(void) { + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f30; + float var_f31; + float var_f29; + s16 temp_r30; + s32 i; + + BoardModelLayerSet(lbl_1_bss_14[9], 1); + lbl_1_bss_324 = GWSystem.player_curr; + lbl_1_data_588 = -1; + lbl_1_bss_2FA = 0; + for (i = 0; i < 7; i++) { + lbl_1_bss_2B4[i] = 0; + } + for (i = 0; i < 7; i++) { + do { + temp_r30 = frandmod(7); + } while (lbl_1_bss_2B4[temp_r30] != 0); + lbl_1_bss_2B4[temp_r30] = i + 1; + lbl_1_bss_2C2[temp_r30] = lbl_1_data_5E0[i]; + } + for (i = 0; i < 7; i++) { + OSReport("%d: %d %04X\n", i, lbl_1_bss_2B4[i], lbl_1_bss_2C2[i]); + } + lbl_1_bss_2F8 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 16), NULL, 0); + BoardModelVisibilitySet(lbl_1_bss_2F8, 0); + BoardModelAttrSet(lbl_1_bss_2F8, 0x40000002); + for (i = 0; i < 20; i++) { + lbl_1_bss_2D0[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), NULL, 1); + BoardModelVisibilitySet(lbl_1_bss_2D0[i], 0); + } + BoardPlayerMotBlendSet(lbl_1_bss_324, 0xB4, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_324)) { + HuPrcVSleep(); + } + BoardWinCreate(2, MAKE_MESSID(32, 19), 3); + BoardWinWait(); + BoardWinKill(); + BoardPlayerPosGet(lbl_1_bss_324, &lbl_1_bss_308); + BoardModelPosGet(lbl_1_bss_14[9], &lbl_1_bss_2FC); + BoardPlayerPosGet(lbl_1_bss_324, &sp38); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[7]), lbl_1_data_5BC[0], &sp2C); + sp20 = sp2C; + sp20.z = sp38.z; + sp20.y = sp38.y; + BoardPlayerPosLerpStart(lbl_1_bss_324, &sp38, &sp20, 0x3C); + while (fn_1_1130(lbl_1_bss_14[9], 270.0f, 30.0f) == 0) { + HuPrcVSleep(); + } + BoardModelPosGet(lbl_1_bss_14[9], &sp8); + sp14 = sp8; + sp14.x = sp2C.x; + PSVECSubtract(&sp14, &sp8, &sp38); + PSVECScale(&sp38, &sp38, 0.022727273f); + for (i = 0; i < 44; i++) { + BoardModelPosGet(lbl_1_bss_14[9], &sp8); + PSVECAdd(&sp8, &sp38, &sp8); + BoardModelPosSetV(lbl_1_bss_14[9], &sp8); + HuPrcVSleep(); + } + BoardModelPosSetV(lbl_1_bss_14[9], &sp14); + while (fn_1_1130(lbl_1_bss_14[9], 0.0f, 30.0f) == 0) { + HuPrcVSleep(); + } + while (GWPlayer[lbl_1_bss_324].moving) { + HuPrcVSleep(); + } + BoardPlayerMotBlendSet(lbl_1_bss_324, 0xB4, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_324)) { + HuPrcVSleep(); + } + BoardPlayerMotionShiftSet(lbl_1_bss_324, 4, 0.0f, 5.0f, 0); + var_f31 = 0.0f; + temp_f30 = 8.0f; + PSVECSubtract(&sp2C, &sp20, &sp38); + PSVECScale(&sp38, &sp38, 0.05f); + while (TRUE) { + BoardPlayerPosGet(lbl_1_bss_324, &sp20); + sp38.y = temp_f30 - var_f31 * var_f31 * 0.25f * 0.075f; + var_f31 += 1.0f; + PSVECAdd(&sp38, &sp20, &sp20); + sp14 = sp2C; + sp14.y = sp20.y; + PSVECSubtract(&sp14, &sp20, &sp14); + var_f29 = PSVECMag(&sp14); + if (var_f29 <= 1.0f) { + sp38.x = sp38.z = 0.0f; + sp20.x = sp2C.x; + sp20.z = sp2C.z; + } + if (sp20.y <= sp2C.y && sp38.y < 0.0f) { + sp20.y = sp2C.y; + break; + } + BoardPlayerPosSetV(lbl_1_bss_324, &sp20); + HuPrcVSleep(); + } + BoardPlayerPosSetV(lbl_1_bss_324, &sp20); + BoardPlayerMotBlendSet(lbl_1_bss_324, 0x5A, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_324)) { + HuPrcVSleep(); + } + HuPrcSleep(60); + lbl_1_bss_320 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_CF8C); + lbl_1_bss_318 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_D174); + lbl_1_bss_31C = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, NULL); + lbl_1_bss_318->scale.x = 255.0f; + lbl_1_bss_314 = 0; + lbl_1_bss_326 = 0; +} + +static void fn_1_CF8C(omObjData *arg0) { + s32 spC; + + if (lbl_1_data_588 != -1) { + spC = HuAudSeqMidiCtrlGet(lbl_1_data_588, 0, 1); + if (msmMusGetStatus(lbl_1_data_588) == 0) { + HuAudSeqFadeOut(lbl_1_data_588, 100); + lbl_1_bss_2FA = 1; + } + if (lbl_1_bss_2FA == 1 && msmMusGetStatus(lbl_1_data_588) == 0) { + lbl_1_data_588 = -1; + BoardAudSeqPause(0, 0, 1000); + OSReport("BGM1 Restore\n"); + } + } + if (lbl_1_bss_326 != 0 && BoardMGDoneFlagGet() == 1) { + fn_1_D0DC(); + omDelObjEx(boardObjMan, arg0); + } +} + +static void fn_1_D0AC(void) { + lbl_1_bss_326 = 1; + BoardMGExit(); +} + +static void fn_1_D0DC(void) { + s32 i; + + omDelObjEx(boardObjMan, lbl_1_bss_31C); + BoardModelKill(lbl_1_bss_2F8); + for (i = 0; i < 20; i++) { + BoardModelKill(lbl_1_bss_2D0[i]); + } + BoardModelLayerSet(lbl_1_bss_14[9], 0); + BoardMGDoneFlagSet(0); +} + +static void fn_1_D174(omObjData *arg0) { + UnkMsmStruct_03 sp8; + + if (arg0->work[0] == 0) { + arg0->work[0] = MGSeqCreate(3, 0); + BoardAudSeqPause(0, 1, 1000); + return; + } + if (MGSeqStatGet(arg0->work[0]) == 0) { + sp8.unk00 = 1; + sp8.unk06 = 0; + sp8.unk05 = 0x7F; + sp8.unk04 = 1; + lbl_1_data_588 = msmMusPlay(0x1D, &sp8); + arg0->func = fn_1_D230; + } +} + +static void fn_1_D230(omObjData *arg0) { + s32 temp_r3; + + temp_r3 = HuAudSeqMidiCtrlGet(lbl_1_data_588, 0, 1); + if (temp_r3 >= 10 && temp_r3 <= 19) { + arg0->work[1]++; + arg0->func = fn_1_D2A4; + } +} + +static void fn_1_D2A4(omObjData *arg0) { + Vec sp18; + Vec spC; + float sp8; + ModelData *temp_r30; + s32 temp_r3; + + temp_r30 = &Hu3DData[BoardModelIDGet(lbl_1_bss_2F8)]; + sp8 = BoardModelRotYGet(lbl_1_bss_14[9]); + BoardModelPosGet(lbl_1_bss_14[9], &spC); + if (arg0->scale.x != 0.0f) { + arg0->scale.x -= 8.5f; + if (arg0->scale.x < 0.0f) { + arg0->scale.x = 0.0f; + } + BoardModelAlphaSet(lbl_1_bss_14[9], arg0->scale.x); + return; + } + temp_r3 = HuAudSeqMidiCtrlGet(lbl_1_data_588, 0, 1); + if (temp_r3 >= 20 && temp_r3 <= 29) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[7]), lbl_1_data_5BC[arg0->work[1]], &sp18); + spC.x = sp18.x; + BoardModelPosSetV(lbl_1_bss_14[9], &spC); + arg0->func = fn_1_D554; + if (arg0->work[1] < 8) { + BoardModelHookReset(lbl_1_bss_14[7]); + BoardModelVisibilitySet(lbl_1_bss_2F8, 1); + BoardModelMotionTimeSet(lbl_1_bss_2F8, lbl_1_bss_2B4[arg0->work[1] - 1]); + BoardModelHookSet(lbl_1_bss_14[7], lbl_1_data_5BC[arg0->work[1]], lbl_1_bss_2F8); + Hu3DMotionExec(BoardModelIDGet(lbl_1_bss_2F8), temp_r30->unk_08, temp_r30->unk_64, 0); + } + lbl_1_bss_31C->work[0] = 60; + lbl_1_bss_31C->unk10 = frandmod(40) + 10; + lbl_1_bss_31C->work[1] = arg0->work[1]; + lbl_1_bss_31C->func = fn_1_E18C; + } +} + +static void fn_1_D554(omObjData *arg0) { + float sp8; + + sp8 = BoardModelRotYGet(lbl_1_bss_14[9]); + arg0->scale.x += 8.5f; + if (arg0->scale.x > 255.0f) { + arg0->scale.x = 255.0f; + } + BoardModelAlphaSet(lbl_1_bss_14[9], arg0->scale.x); + if (arg0->scale.x == 255.0f) { + arg0->work[0] = 0; + lbl_1_bss_31C->work[1] = arg0->work[1]; + arg0->scale.x = 255.0f; + BoardModelAlphaSet(lbl_1_bss_14[9], arg0->scale.x); + if (arg0->work[1] == 8) { + arg0->func = fn_1_D70C; + lbl_1_bss_31C->work[2] = 1; + lbl_1_bss_31C->func = fn_1_E374; + } else { + arg0->func = fn_1_D6A8; + } + } +} + +static void fn_1_D6A8(omObjData *arg0) { + if (arg0->work[0] != 0) { + BoardModelHookReset(lbl_1_bss_14[7]); + BoardModelVisibilitySet(lbl_1_bss_2F8, 0); + arg0->func = fn_1_D230; + } +} + +static void fn_1_D70C(omObjData *arg0) { + Process *var_r30; + + if (arg0->work[0] == 1) { + var_r30 = HuPrcCreate(fn_1_D770, 0x2004, 0x1800, 0); + var_r30->user_data = arg0; + arg0->func = NULL; + } +} + +s16 lbl_1_data_62C[] = { + 1, 3, 5, 7, 10, 14, 18, 20 +}; + +static void fn_1_D770(void) { + Vec sp114[20]; + Vec sp24[20]; + Vec sp18; + Vec spC; + float temp_f29; + float var_f30; + float var_f31; + char sp8[4]; + Process *temp_r3; + omObjData *var_r28; + s32 var_r29; + s32 i; + + lbl_1_bss_314 = lbl_1_data_62C[lbl_1_bss_314 - 1]; + sprintf(sp8, "%d", lbl_1_bss_314); + BoardWinCreate(2, MAKE_MESSID(32, 20), 3); + BoardWinInsertMesSet(MAKE_MESSID_PTR(sp8), 0); + BoardWinWait(); + BoardWinKill(); + BoardPlayerMotBlendSet(lbl_1_bss_324, 0, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_324)) { + HuPrcVSleep(); + } + BoardPlayerPosGet(lbl_1_bss_324, &sp18); + for (i = 0; i < lbl_1_bss_314; i++) { + BoardModelVisibilitySet(lbl_1_bss_2D0[i], 1); + sp114[i] = sp18; + sp114[i].y += 800.0f + i * 120; + sp114[i].x += -25.0f + 50.0f * frand8() * 0.003921569f; + sp114[i].z += -25.0f + 50.0f * frand8() * 0.003921569f; + sp24[i].x = sp24[i].z = 0.0f; + sp24[i].y = 360.0f * frand8() * 0.003921569f; + BoardModelPosSetV(lbl_1_bss_2D0[i], &sp114[i]); + BoardModelRotSetV(lbl_1_bss_2D0[i], &sp24[i]); + } + var_f31 = -1.0f; + var_r29 = 0; + while (TRUE) { + for (i = 0; i < lbl_1_bss_314; i++) { + if (i < var_r29) { + continue; + } + sp114[i].y += var_f31; + BoardModelPosSetV(lbl_1_bss_2D0[i], &sp114[i]); + sp24[i].y += 45.0f; + if (sp24[i].y >= 360.0f) { + sp24[i].y -= 360.0f; + } + BoardModelRotSetV(lbl_1_bss_2D0[i], &sp24[i]); + if (sp114[i].y <= sp18.y + 80.0f) { + spC = sp114[i]; + CharModelCoinEffectCreate(1, &spC); + BoardModelVisibilitySet(lbl_1_bss_2D0[i], 0); + var_r29 += 1; + BoardPlayerCoinsAdd(lbl_1_bss_324, 1); + HuAudFXPlay(7); + omVibrate(lbl_1_bss_324, 12, 6, 6); + } + } + var_f31 *= 1.05f; + if (var_f31 < -20.0f) { + var_f31 = -20.0f; + } + if (var_r29 == lbl_1_bss_314) { + BoardPlayerMotionShiftSet(lbl_1_bss_324, 7, 0.0f, 10.0f, 0); + break; + } + HuPrcVSleep(); + } + while (!BoardPlayerMotionEndCheck(lbl_1_bss_324)) { + HuPrcVSleep(); + } + BoardWinCreate(2, MAKE_MESSID(32, 21), 3); + BoardWinWait(); + BoardWinKill(); + temp_r3 = HuPrcCreate(fn_1_E004, 0x2004, 0x1000, 0); + temp_r3->user_data = NULL; + BoardPlayerMotionShiftSet(lbl_1_bss_324, 4, 0.0f, 5.0f, 0); + var_f30 = 0.0f; + temp_f29 = 8.0f; + lbl_1_bss_308.z = sp18.z + 100.0f; + lbl_1_bss_308.x = sp18.x + 50.0f; + PSVECSubtract(&lbl_1_bss_308, &sp18, &spC); + PSVECScale(&spC, &spC, 0.04f); + while (TRUE) { + BoardPlayerPosGet(lbl_1_bss_324, &sp18); + spC.y = temp_f29 - var_f30 * var_f30 * 0.25f * 0.075f; + var_f30 += 1.0f; + PSVECAdd(&spC, &sp18, &sp18); + sp114[0] = lbl_1_bss_308; + sp114[0].y = sp18.y; + PSVECSubtract(&sp114[0], &sp18, &sp114[0]); + var_f31 = PSVECMag(&sp114[0]); + if (var_f31 <= 1.0f) { + spC.x = spC.z = 0.0f; + sp18.x = lbl_1_bss_308.x; + sp18.z = lbl_1_bss_308.z; + } + if (sp18.y <= lbl_1_bss_308.y && spC.y < 0.0f) { + sp18.y = lbl_1_bss_308.y; + break; + } + BoardPlayerPosSetV(lbl_1_bss_324, &sp18); + HuPrcVSleep(); + } + BoardPlayerPosSetV(lbl_1_bss_324, &sp18); + omVibrate(lbl_1_bss_324, 12, 6, 6); + while (!temp_r3->user_data) { + HuPrcVSleep(); + } + HuPrcKill(temp_r3); + var_r28 = HuPrcCurrentGet()->user_data; + var_r28->func = fn_1_E144; + HuPrcEnd(); +} + +static void fn_1_E004(void) { + Vec sp14; + Vec sp8; + s32 i; + + while (fn_1_1130(lbl_1_bss_14[9], 90.0f, 30.0f) == 0) { + HuPrcVSleep(); + } + BoardModelPosGet(lbl_1_bss_14[9], &sp14); + PSVECSubtract(&lbl_1_bss_2FC, &sp14, &sp8); + PSVECScale(&sp8, &sp8, 0.1f); + for (i = 0; i < 10; i++) { + BoardModelPosGet(lbl_1_bss_14[9], &sp14); + PSVECAdd(&sp14, &sp8, &sp14); + BoardModelPosSetV(lbl_1_bss_14[9], &sp14); + HuPrcVSleep(); + } + BoardModelPosSetV(lbl_1_bss_14[9], &lbl_1_bss_2FC); + while (fn_1_1130(lbl_1_bss_14[9], 0.0f, 30.0f) == 0) { + HuPrcVSleep(); + } + HuPrcCurrentGet()->user_data = (void*) 1; + while (TRUE) { + HuPrcVSleep(); + } +} + +static void fn_1_E144(omObjData *arg0) { + lbl_1_bss_326 = 1; + BoardMGExit(); + omDelObjEx(boardObjMan, arg0); +} + +static void fn_1_E18C(omObjData *arg0) { + s32 var_r29; + s16 var_r28; + s16 var_r30; + + var_r29 = HuAudSeqMidiCtrlGet(lbl_1_data_588, 0, 1); + if (var_r29 >= 20 && var_r29 <= 29) { + var_r28 = GWPlayer[lbl_1_bss_324].port; + var_r30 = 0; + if (GWPlayer[lbl_1_bss_324].com) { + if (--arg0->unk10 == 0) { + var_r30 = fn_1_E880(arg0); + } + } else { + var_r30 = HuPadBtnDown[var_r28]; + } + if (var_r30 & 0xF70) { + if ((var_r30 & lbl_1_bss_2C2[arg0->work[1] - 1]) && !(var_r30 & ~lbl_1_bss_2C2[arg0->work[1] - 1])) { + arg0->work[2] = 1; + } else { + arg0->work[2] = 0; + } + BoardModelVisibilitySet(lbl_1_bss_2F8, 0); + arg0->func = fn_1_E374; + } + } else { + BoardModelVisibilitySet(lbl_1_bss_2F8, 0); + arg0->work[2] = 0; + arg0->func = fn_1_E374; + lbl_1_bss_318->work[0] = 1; + fn_1_E374(arg0); + } +} + +static void fn_1_E374(omObjData *arg0) { + Vec sp20; + Vec sp14; + Vec sp8; + s32 temp_r3; + + temp_r3 = HuAudSeqMidiCtrlGet(lbl_1_data_588, 0, 1); + if (temp_r3 >= 30 && temp_r3 <= 39) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[7]), lbl_1_data_5BC[arg0->work[1]], &sp14); + BoardPlayerPosGet(lbl_1_bss_324, &sp20); + PSVECSubtract(&sp14, &sp20, &sp8); + PSVECScale(&sp8, &sp8, 0.04f); + arg0->trans.x = sp8.x; + arg0->trans.z = sp8.z; + arg0->trans.y = 5.0f; + arg0->rot.x = 0.0f; + arg0->scale.x = sp14.x; + arg0->scale.y = sp14.y; + arg0->scale.z = sp14.z; + BoardPlayerMotionShiftSet(lbl_1_bss_324, 4, 0.0f, 5.0f, 0); + arg0->func = fn_1_E4C0; + } +} + +static void fn_1_E4C0(omObjData *arg0) { + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float var_f31; + + BoardPlayerPosGet(lbl_1_bss_324, &sp2C); + sp14.x = arg0->scale.x; + sp14.y = arg0->scale.y; + sp14.z = arg0->scale.z; + sp20.x = arg0->trans.x; + sp20.z = arg0->trans.z; + sp20.y = arg0->trans.y - arg0->rot.x * arg0->rot.x * 0.25f * 0.075f; + arg0->rot.x += 1.0f; + PSVECAdd(&sp2C, &sp20, &sp2C); + sp8 = sp2C; + sp8.y = sp14.y; + PSVECSubtract(&sp14, &sp8, &sp8); + var_f31 = PSVECMag(&sp8); + if (var_f31 <= 1.0f) { + arg0->trans.x = arg0->trans.z = 0.0f; + sp2C.x = sp14.x; + sp2C.z = sp14.z; + } + if (sp2C.y <= sp14.y && sp20.y < 0.0f) { + sp2C.y = sp14.y; + BoardPlayerIdleSet(lbl_1_bss_324); + arg0->work[3] = 0; + if (arg0->work[2] != 0) { + arg0->func = fn_1_E6AC; + } else { + lbl_1_bss_318->work[0] = 1; + HuAudFXPlay(0x475); + arg0->func = NULL; + } + } + BoardPlayerPosSetV(lbl_1_bss_324, &sp2C); +} + +static void fn_1_E6AC(omObjData *arg0) { + Vec sp8; + float var_f31; + + if (arg0->work[3] == 0) { + lbl_1_bss_2B0 = -1; + var_f31 = 4.0f + 20.0f * (arg0->work[1] - 1); + BoardModelMotionTimeSet(lbl_1_bss_14[7], var_f31); + BoardModelAttrReset(lbl_1_bss_14[7], 0x40000002); + lbl_1_bss_314++; + arg0->work[3] = 1; + arg0->work[0] = 0x10; + lbl_1_bss_2B0 = HuAudFXPlay(lbl_1_data_5F0[arg0->work[1] - 1]); + } + if (--arg0->work[0] != 0) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[7]), lbl_1_data_5BC[arg0->work[1]], &sp8); + BoardPlayerPosSetV(lbl_1_bss_324, &sp8); + return; + } + if (lbl_1_bss_2B0 >= 0) { + HuAudFXStop(lbl_1_bss_2B0); + } + lbl_1_bss_318->work[0] = 1; + BoardModelAttrSet(lbl_1_bss_14[7], 0x40000002); + arg0->func = NULL; +} + +static s16 fn_1_E880(omObjData *arg0) { + s16 temp_r28; + s16 var_r30; + s32 temp_r29; + + temp_r28 = GWPlayer[lbl_1_bss_324].diff; + var_r30 = 0; + temp_r29 = frandmod(100); + switch (temp_r28) { + case 0: + if (temp_r29 < 35) { + var_r30 = lbl_1_bss_2C2[arg0->work[1] - 1]; + } else if (temp_r29 < 90) { + var_r30 = -1; + } else { + arg0->unk10 = 100; + } + break; + case 1: + if (temp_r29 < 55) { + var_r30 = lbl_1_bss_2C2[arg0->work[1] - 1]; + } else if (temp_r29 < 90) { + var_r30 = -1; + } else { + arg0->unk10 = 100; + } + break; + case 2: + if (temp_r29 < 85) { + var_r30 = lbl_1_bss_2C2[arg0->work[1] - 1]; + } else { + var_r30 = -1; + } + break; + case 3: + var_r30 = lbl_1_bss_2C2[arg0->work[1] - 1]; + break; + } + return var_r30; +} diff --git a/src/REL/w07Dll/mg_item.c b/src/REL/w07Dll/mg_item.c new file mode 100644 index 00000000..342d8f5c --- /dev/null +++ b/src/REL/w07Dll/mg_item.c @@ -0,0 +1,656 @@ +#include "REL/w04Dll.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/frand.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/minigame_seq.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/board/audio.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "ext_math.h" + +static void fn_1_A71C(void); +static void fn_1_A7E8(void); +static void fn_1_C388(ModelData *model, ParticleData *particle, Mtx matrix); + +static s16 lbl_1_bss_2AC; +static s16 lbl_1_bss_2A6[3]; +static s16 lbl_1_bss_29E[4]; +static s16 lbl_1_bss_298[3]; +static float lbl_1_bss_294; +static s32 lbl_1_bss_290_pad; +static s32 lbl_1_bss_28C; +static AnimData *lbl_1_bss_288; + +static char *lbl_1_data_51C[] = { + "item1", "item2", "item3", + "switch1", "switch2", "switch3" +}; + +static s32 lbl_1_data_534[] = { + 0x00000466, + 0x00000467, + 0x00000468 +}; + +static s32 lbl_1_data_540[] = { + DATA_MAKE_NUM(DATADIR_BOARD, 109), + DATA_MAKE_NUM(DATADIR_BOARD, 110), + DATA_MAKE_NUM(DATADIR_BOARD, 111), + DATA_MAKE_NUM(DATADIR_BOARD, 112), + DATA_MAKE_NUM(DATADIR_BOARD, 113), + DATA_MAKE_NUM(DATADIR_BOARD, 114), + DATA_MAKE_NUM(DATADIR_BOARD, 115), + DATA_MAKE_NUM(DATADIR_BOARD, 116), + DATA_MAKE_NUM(DATADIR_BOARD, 118), + DATA_MAKE_NUM(DATADIR_BOARD, 119), + DATA_MAKE_NUM(DATADIR_BOARD, 120), + DATA_MAKE_NUM(DATADIR_BOARD, 121), + DATA_MAKE_NUM(DATADIR_BOARD, 122), + DATA_MAKE_NUM(DATADIR_BOARD, 123), + DATA_MAKE_NUM(DATADIR_W02, 24), + DATA_MAKE_NUM(DATADIR_W02, 25), + DATA_MAKE_NUM(DATADIR_W02, 26), + -1 +}; + +void fn_1_A0F8(void) { + Vec sp8; + s32 i; + + BoardModelAttrSet(lbl_1_bss_14[6], 0x40000002); + for (i = 0; i < 3; i++) { + lbl_1_bss_29E[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 13), NULL, 1); + BoardModelHookSet(lbl_1_bss_14[6], lbl_1_data_51C[i + 3], lbl_1_bss_29E[i]); + BoardModelAttrSet(lbl_1_bss_29E[i], 0x40000002); + } + BoardModelPosGet(lbl_1_bss_14[6], &sp8); + lbl_1_bss_294 = sp8.y; +} + +void fn_1_A1F0(void) { + Vec sp38[3]; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float var_f31; + s16 temp_r29; + s32 var_r30; + s32 i; + + lbl_1_bss_2AC = GWSystem.player_curr; + temp_r29 = BoardModelMotionCreate(lbl_1_bss_14[10], DATA_MAKE_NUM(DATADIR_BGUEST, 25)); + HuPrcSleep(60); + var_f31 = 0.0f; + for (i = 0; i < 30; i++) { + var_f31 += 3.0f; + BoardModelRotYSet(lbl_1_bss_14[10], var_f31); + HuPrcVSleep(); + } + BoardModelMotionStart(lbl_1_bss_14[10], temp_r29, 0); + for (i = 0; i < 3; i++) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[6]), lbl_1_data_51C[i], &sp38[i]); + } + while (TRUE) { + var_r30 = 0; + for (i = 0; i < 3; i++) { + BoardModelPosGet(lbl_1_bss_298[i], &sp2C); + sp2C.y += 2.0f; + if (sp2C.y >= sp38[i].y) { + sp2C.y = sp38[i].y; + var_r30++; + } + BoardModelPosSetV(lbl_1_bss_298[i], &sp2C); + } + if (var_r30 == 3) { + break; + } + HuPrcVSleep(); + } + for (i = 0; i < 3; i++) { + BoardModelHookSet(lbl_1_bss_14[6], lbl_1_data_51C[i], lbl_1_bss_298[i]); + } + while (BoardModelMotionTimeGet(lbl_1_bss_14[10]) < BoardModelMotionMaxTimeGet(lbl_1_bss_14[10])) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(lbl_1_bss_14[10], 1, 0.0f, 5.0f, 0x40000001); + BoardAudSeqPause(0, 1, 1000); + BoardModelMotionTimeSet(lbl_1_bss_14[6], 0.0f); + BoardModelAttrReset(lbl_1_bss_14[6], 0x40000002); + HuPrcSleep(20); + HuAudFXPlay(0x469); + HuPrcSleep(50); + BoardMusStart(1, 0x1E, 0x7F, 0); + HuAudFXPlay(0x46C); + while (BoardModelMotionTimeGet(lbl_1_bss_14[6]) < 202.0f) { + HuPrcVSleep(); + } + BoardModelMotionTimeSet(lbl_1_bss_14[6], 202.0f); + BoardModelAttrSet(lbl_1_bss_14[6], 0x40000002); + BoardModelMotionKill(lbl_1_bss_14[10], temp_r29); + sp14.x = -35.0f; + sp14.y = sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 0.0f; + sp8.z = -150.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[6], &sp14, &sp8, 1500.0f, 25.0f, 21); + BoardPlayerPosGet(lbl_1_bss_2AC, &sp2C); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[6]), lbl_1_data_51C[4], &sp20); + sp20.z = sp2C.z - 50.0f; + sp20.y = sp2C.y; + BoardPlayerPosLerpStart(lbl_1_bss_2AC, &sp2C, &sp20, 0x3C); + while (GWPlayer[lbl_1_bss_2AC].moving) { + HuPrcVSleep(); + } + BoardPlayerMotBlendSet(lbl_1_bss_2AC, 0xB4, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_2AC)) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + fn_1_A7E8(); + BoardMGExit(); + while (TRUE) { + if (BoardMGDoneFlagGet() == 1) { + BoardMGDoneFlagSet(0); + fn_1_BA7C(); + break; + } + HuPrcVSleep(); + } + HuPrcEnd(); +} + +static void fn_1_A71C(void) { + Vec sp8; + float var_f31; + s16 temp_r31; + + var_f31 = 0.0f; + temp_r31 = (s16) HuPrcCurrentGet()->user_data; + while (TRUE) { + BoardModelPosGet(temp_r31, &sp8); + sp8.y += 0.25 * sind(var_f31); + var_f31 += 5.0f; + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + BoardModelPosSetV(temp_r31, &sp8); + HuPrcVSleep(); + } +} + +static void fn_1_A7E8(void) { + Vec sp54[3]; + Vec sp48; + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + float sp10[2]; + float var_f29; + float var_f30; + float var_f31; + Process *var_r20; + s16 var_r30; + s16 var_r28; + s16 var_r27; + s16 var_r26; + s16 var_r25; + s16 var_r24; + u16 temp_r29; + u16 var_r23; + s16 var_r22; + s16 var_r21; + s16 var_r19; + u16 temp_r18; + u16 var_r17; + ParticleData *spC; + s32 sp8; + s32 i; + + var_r28 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W04, 14), NULL, 0); + BoardModelAttrSet(var_r28, 0x40000001); + BoardModelVisibilitySet(var_r28, 0); + var_r30 = 1; + for (i = 0; i < 3; i++) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[6]), lbl_1_data_51C[i + 3], &sp54[i]); + sp54[i].y += 50.0f; + } + var_r25 = MGSeqCreate(3, 0); + while (MGSeqStatGet(var_r25) != 0) { + HuPrcVSleep(); + } + var_r24 = 5; + var_r21 = 60; + var_r25 = MGSeqCreate(1, var_r24, 0x120, 0x40); + HuWinMesMaxSizeGet(1, sp10, MAKE_MESSID(32, 22)); + var_r27 = HuWinCreate(-10000.0f, 368.0f, sp10[0], sp10[1], 0); + HuWinMesSet(var_r27, MAKE_MESSID(32, 22)); + HuWinBGTPLvlSet(var_r27, 0.0f); + HuWinMesSpeedSet(var_r27, 0); + BoardModelVisibilitySet(var_r28, 1); + BoardModelPosSetV(var_r28, &sp54[var_r30]); + var_r22 = 30; + var_r19 = 0; + temp_r18 = GWPlayer[lbl_1_bss_2AC].port; + while (TRUE) { + var_r21--; + if (var_r21 == 0) { + var_r21 = 60; + if (--var_r24 < 0) { + break; + } + MGSeqParamSet(var_r25, 1, var_r24); + } + if (GWPlayer[lbl_1_bss_2AC].com) { + if (var_r22 != 0) { + var_r22--; + } else { + var_r22 = frandmod(30) + 15; + if (frandBool() || var_r19 == 3) { + var_r17 = 0x100; + } else { + if (frandBool()) { + var_r23 = 1; + } else { + var_r23 = 2; + } + var_r19++; + } + } + } else { + var_r17 = HuPadBtnDown[temp_r18]; + var_r23 = HuPadDStkRep[temp_r18]; + } + if (var_r17 & 0x100) { + break; + } + if ((var_r23 & 1) && var_r30 != 0) { + HuAudFXPlay(0); + var_r30--; + } + if ((var_r23 & 2) && var_r30 != 2) { + HuAudFXPlay(0); + var_r30++; + } + BoardModelPosSetV(var_r28, &sp54[var_r30]); + HuPrcVSleep(); + } + HuAudFXPlay(2); + MGSeqParamSet(var_r25, 2, -1); + HuWinKill(var_r27); + for (i = 0; i < 360; i += 12) { + sp48.x = sp48.y = sp48.z = 1.0 + 0.8f * sind(i % 180); + BoardModelScaleSetV(var_r28, &sp48); + HuPrcVSleep(); + } + BoardModelVisibilitySet(var_r28, 0); + BoardPlayerPosGet(lbl_1_bss_2AC, &sp18); + BoardPlayerMotionShiftSet(lbl_1_bss_2AC, 4, 0.0f, 5.0f, 0); + var_f30 = 0.0f; + var_f29 = 12.0f; + sp3C = sp54[var_r30]; + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + PSVECSubtract(&sp3C, &sp30, &sp3C); + PSVECScale(&sp3C, &sp3C, 0.05f); + while (TRUE) { + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + sp3C.y = var_f29 - var_f30 * var_f30 * 0.25f * 0.075f; + var_f30 += 1.0f; + PSVECAdd(&sp3C, &sp30, &sp30); + if (sp30.y <= sp54[var_r30].y - 40.0f && sp3C.y < 0.0f) { + sp30.y = sp54[var_r30].y - 40.0f; + break; + } + BoardPlayerPosSetV(lbl_1_bss_2AC, &sp30); + sp48 = sp54[var_r30]; + sp48.y = sp30.y = 0.0f; + PSVECSubtract(&sp48, &sp30, &sp30); + var_f31 = PSVECMag(&sp30); + if (var_f31 <= 1.0f) { + sp3C.x = sp3C.z = 0.0f; + } + HuPrcVSleep(); + } + BoardAudSeqFadeOut(1, 100); + HuAudFXPlay(lbl_1_data_534[var_r30]); + BoardModelMotionTimeSet(lbl_1_bss_29E[var_r30], 0.0f); + BoardModelAttrReset(lbl_1_bss_29E[var_r30], 0x40000002); + BoardPlayerPosSetV(lbl_1_bss_2AC, &sp30); + BoardPlayerMotionShiftSet(lbl_1_bss_2AC, 1, 0.0f, 5.0f, 0x40000001); + while (BoardModelMotionTimeGet(lbl_1_bss_29E[var_r30]) < BoardModelMotionMaxTimeGet(lbl_1_bss_29E[var_r30])) { + if (BoardModelMotionTimeGet(lbl_1_bss_29E[var_r30]) >= 13.0f) { + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + sp30.y += 1.0f; + BoardPlayerPosSetV(lbl_1_bss_2AC, &sp30); + } + HuPrcVSleep(); + } + temp_r29 = frandmod(3); + BoardModelHookReset(lbl_1_bss_14[6]); + for (i = 0; i < 3; i++) { + BoardModelHookSet(lbl_1_bss_14[6], lbl_1_data_51C[i + 3], lbl_1_bss_29E[i]); + if (i != temp_r29) { + BoardModelVisibilitySet(lbl_1_bss_298[i], 0); + } + } + BoardModelHookSet(lbl_1_bss_14[6], lbl_1_data_51C[1], lbl_1_bss_298[temp_r29]); + BoardModelAttrReset(lbl_1_bss_14[6], 0x40000002); + HuPrcSleep(30); + HuAudFXPlay(0x310); + while (BoardModelMotionTimeGet(lbl_1_bss_14[6]) < BoardModelMotionMaxTimeGet(lbl_1_bss_14[6])) { + HuPrcVSleep(); + } + BoardModelHookReset(lbl_1_bss_14[6]); + for (i = 0; i < 3; i++) { + BoardModelHookSet(lbl_1_bss_14[6], lbl_1_data_51C[i + 3], lbl_1_bss_29E[i]); + } + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[6]), lbl_1_data_51C[1], &sp24); + BoardModelPosSetV(lbl_1_bss_298[temp_r29], &sp24); + var_r20 = HuPrcChildCreate(fn_1_A71C, 0x2002, 0x800, 0, boardMainProc); + var_r20->user_data = (void*) lbl_1_bss_298[temp_r29]; + var_r26 = Hu3DParticleCreate(lbl_1_bss_288, 100); + spC = Hu3DData[var_r26].unk_120; + spC->unk_02 = lbl_1_bss_298[temp_r29]; + Hu3DParticleHookSet(var_r26, fn_1_C388); + Hu3DParticleColSet(var_r26, 0xFF, 0xFF, 0); + Hu3DModelPosSet(var_r26, 0.0f, 0.0f, 0.0f); + Hu3DParticleBlendModeSet(var_r26, 1); + Hu3DModelLayerSet(var_r26, 2); + lbl_1_bss_28C = HuAudFXPlay(0x35F); + BoardPlayerMotBlendSet(lbl_1_bss_2AC, 0, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_2AC)) { + HuPrcVSleep(); + } + BoardPlayerMotionShiftSet(lbl_1_bss_2AC, 4, 0.0f, 5.0f, 0); + var_f30 = 0.0f; + var_f29 = 12.0f; + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + PSVECSubtract(&sp18, &sp30, &sp3C); + PSVECScale(&sp3C, &sp3C, 0.05f); + while (TRUE) { + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + sp3C.y = var_f29 - var_f30 * var_f30 * 0.25f * 0.075f; + var_f30 += 1.0f; + PSVECAdd(&sp3C, &sp30, &sp30); + if (sp30.y < sp18.y) { + sp30.y = sp18.y; + break; + } + BoardPlayerPosSetV(lbl_1_bss_2AC, &sp30); + sp48 = sp18; + sp48.y = sp30.y = 0.0f; + PSVECSubtract(&sp48, &sp30, &sp30); + var_f31 = PSVECMag(&sp30); + if (var_f31 <= 1.0f) { + sp3C.x = sp3C.z = 0.0f; + } + HuPrcVSleep(); + } + omVibrate(lbl_1_bss_2AC, 12, 6, 6); + BoardPlayerPosSetV(lbl_1_bss_2AC, &sp30); + BoardPlayerMotionShiftSet(lbl_1_bss_2AC, 1, 0.0f, 5.0f, 0x40000001); + BoardModelPosGet(lbl_1_bss_298[temp_r29], &sp24); + sp3C = sp24; + sp3C.z += 100.0f; + PSVECSubtract(&sp3C, &sp24, &sp3C); + PSVECScale(&sp3C, &sp3C, 0.033333335f); + for (i = 0; i < 30; i++) { + BoardModelPosGet(lbl_1_bss_298[temp_r29], &sp24); + PSVECAdd(&sp24, &sp3C, &sp24); + BoardModelPosSetV(lbl_1_bss_298[temp_r29], &sp24); + HuPrcVSleep(); + } + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + sp24.y = sp30.y; + BoardPlayerPosLerpStart(lbl_1_bss_2AC, &sp30, &sp24, 0x3C); + while (GWPlayer[lbl_1_bss_2AC].moving) { + HuPrcVSleep(); + } + BoardPlayerMotBlendSet(lbl_1_bss_2AC, 0, 0xF); + while (!BoardPlayerMotBlendCheck(lbl_1_bss_2AC)) { + HuPrcVSleep(); + } + var_f31 = 90.0f; + for (i = 0; i < 15; i++) { + var_f31 -= 3.0f; + BoardModelRotYSet(lbl_1_bss_14[10], var_f31); + HuPrcVSleep(); + } + BoardWinCreate(2, MAKE_MESSID(32, 15), 3); + BoardWinInsertMesSet(MAKE_MESSID(8, lbl_1_bss_2A6[temp_r29]), 0); + BoardWinWait(); + BoardWinKill(); + HuAudFXPlay(0x30D); + HuPrcKill(var_r20); + BoardPlayerPosGet(lbl_1_bss_2AC, &sp30); + BoardModelPosGet(lbl_1_bss_298[temp_r29], &sp24); + var_f29 = 1.0f; + var_f31 = (sp30.y - sp24.y) / 30.0f; + var_f30 = -0.04f; + var_r27 = 0; + HuAudFXFadeOut(lbl_1_bss_28C, 0x1F3); + while (var_r27 == 0) { + sp24.y += var_f31; + var_f29 += var_f30; + if (var_f29 < 0.0f) { + var_f29 = 0.0f; + var_r27 = 1; + } + sp48.x = sp48.y = sp48.z = var_f29; + BoardModelPosSetV(lbl_1_bss_298[temp_r29], &sp24); + BoardModelScaleSetV(lbl_1_bss_298[temp_r29], &sp48); + HuPrcVSleep(); + } + HuAudFXStop(lbl_1_bss_28C); + BoardModelVisibilitySet(lbl_1_bss_298[temp_r29], 0); + BoardPlayerItemAdd(lbl_1_bss_2AC, lbl_1_bss_2A6[temp_r29]); + omVibrate(lbl_1_bss_2AC, 12, 6, 6); + sp8 = HuAudSStreamPlay(2); + BoardPlayerMotionShiftSet(lbl_1_bss_2AC, 7, 0.0f, 5.0f, 0); + while (!BoardPlayerMotionEndCheck(lbl_1_bss_2AC)) { + HuPrcVSleep(); + } + var_f31 = 45.0f; + for (i = 0; i < 15; i++) { + var_f31 -= 3.0f; + BoardModelRotYSet(lbl_1_bss_14[10], var_f31); + HuPrcVSleep(); + } + BoardModelRotYSet(lbl_1_bss_14[10], 0.0f); + HuPrcSleep(30); + while (HuAudSStreamStatGet(sp8) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + BoardWinCreate(2, MAKE_MESSID(32, 16), 3); + BoardWinWait(); + BoardWinKill(); + BoardModelMotionTimeSet(lbl_1_bss_14[6], 0.0f); + BoardModelAttrSet(lbl_1_bss_14[6], 0x40000002); + Hu3DModelKill(var_r26); + BoardModelKill(var_r28); +} + +void fn_1_BA7C(void) { + s32 i; + + for (i = 0; i < 3; i++) { + BoardModelKill(lbl_1_bss_298[i]); + } + if (lbl_1_bss_288) { + HuSprAnimKill(lbl_1_bss_288); + lbl_1_bss_288 = NULL; + } +} + +void fn_1_BB00(s16 *arg0) { + Vec sp54[3]; + Vec sp30[3]; + Vec sp24; + Vec sp18; + float spC[3]; + float temp_f28; + float var_f27; + float var_f29; + s32 var_r30; + s32 i; + + for (i = 0; i < 3; i++) { + lbl_1_bss_2A6[i] = arg0[i]; + lbl_1_bss_298[i] = BoardModelCreate(lbl_1_data_540[lbl_1_bss_2A6[i]], NULL, 0); + BoardModelVisibilitySet(lbl_1_bss_298[i], 0); + if (lbl_1_bss_2A6[i] == 11) { + BoardModelAttrSet(lbl_1_bss_298[i], 0x40000001); + } + if (lbl_1_bss_2A6[i] == 5) { + Hu3DData[BoardModelIDGet(lbl_1_bss_298[i])].unk_F0[1][3] = -50.0f; + } + if (lbl_1_bss_2A6[i] == 4) { + BoardModelMotionSpeedSet(lbl_1_bss_298[i], 0.0f); + } + } + if (lbl_1_bss_288 == NULL) { + lbl_1_bss_288 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0)); + HuSprAnimLock(lbl_1_bss_288); + } + BoardModelMotionTimeSet(lbl_1_bss_14[6], 0.0f); + BoardModelAttrSet(lbl_1_bss_14[6], 0x40000002); + sp18.x = sp18.y = sp18.z = 0.0f; + for (i = 0; i < 3; i++) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[6]), lbl_1_data_51C[i], &sp54[i]); + sp54[i].y += -50.0f; + BoardModelVisibilitySet(lbl_1_bss_298[i], 1); + BoardModelPosSetV(lbl_1_bss_298[i], &sp54[i]); + BoardModelPosGet(lbl_1_bss_14[10], &sp24); + BoardModelPosSetV(lbl_1_bss_298[i], &sp24); + BoardModelScaleSetV(lbl_1_bss_298[i], &sp18); + PSVECSubtract(&sp54[i], &sp24, &sp30[i]); + PSVECNormalize(&sp30[i], &sp30[i]); + spC[i] = 0.0f; + } + sp30[0].y = 16.0f; + sp30[1].y = 13.0f; + sp30[2].y = 10.0f; + HuAudFXPlay(0x362); + var_f29 = 0.0f; + while (TRUE) { + var_r30 = 0; + var_f29 += 0.05f; + if (var_f29 > 1.0f) { + var_f29 = 1.0f; + } + sp18.x = sp18.y = sp18.z = var_f29; + for (i = 0; i < 3; i++) { + BoardModelPosGet(lbl_1_bss_298[i], &sp24); + temp_f28 = sp30[i].y - spC[i] * spC[i] * 0.25f * 0.075f; + sp24.x += 6.55f * sp30[i].x; + sp24.z += 6.55f * sp30[i].z; + sp24.y += temp_f28; + var_f27 = VECDistanceXZ(&sp54[i], &sp24); + if (var_f27 < 3.0f) { + sp30[i].x = sp30[i].z = 0.0f; + sp24.x = sp54[i].x; + sp24.z = sp54[i].z; + } + if (sp24.y <= sp54[i].y && temp_f28 < 0.0f) { + sp24.y = sp54[i].y; + var_r30++; + } + BoardModelPosSetV(lbl_1_bss_298[i], &sp24); + BoardModelScaleSetV(lbl_1_bss_298[i], &sp18); + spC[i] += 1.0f; + } + if (var_r30 == 3) { + break; + } + HuPrcVSleep(); + } + for (i = 0; i < 3; i++) { + BoardModelPosSetV(lbl_1_bss_298[i], &sp54[i]); + } +} + +void fn_1_C2BC(void) { + Vec sp8; + float var_f31; + s32 i; + s32 j; + + var_f31 = 1.0f; + for (i = 0; i < 20; i++) { + var_f31 -= 0.05f; + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + } + sp8.x = sp8.y = sp8.z = var_f31; + for (j = 0; j < 3; j++) { + BoardModelScaleSetV(lbl_1_bss_298[j], &sp8); + } + HuPrcVSleep(); + } +} + +static void fn_1_C388(ModelData *model, ParticleData *particle, Mtx matrix) { + Vec sp8; + HsfanimStruct01 *var_r31; + float var_f31; + float temp_f30; + float temp_f29; + s32 var_r28; + s32 i; + + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + var_r31->unk40.a = 0; + var_r31->unk2C = 0.0f; + } + particle->unk_00 = 0; + } + BoardModelScaleGet(particle->unk_02, &sp8); + var_f31 = sp8.x; + BoardModelPosGet(particle->unk_02, &sp8); + for (i = 0; i < 22; i++) { + var_r31 = particle->unk_48; + for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + if (var_r31->unk2C == 0.0f) { + break; + } + } + if (var_r28 != particle->unk_30) { + temp_f30 = 0.003921569f * frand8() * 360.0f; + temp_f29 = var_f31 * (20.0f + 0.003921569f * frand8() * 60.0f); + var_r31->unk34.x = sp8.x + temp_f29 * sind(temp_f30); + var_r31->unk34.z = sp8.z + temp_f29 * cosd(temp_f30); + var_r31->unk34.y = sp8.y + var_f31 * (-30.0f + 0.003921569f * frand8() * 40.0f); + var_r31->unk08.x = 0.5f + 0.003921569f * frand8() * 3.0f; + var_r31->unk08.y = 0.3f + 0.003921569f * frand8() * 2.0f; + var_r31->unk40.a = 0xB4; + var_r31->unk2C = var_f31 * 15.0f; + } + } + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + if (var_r31->unk2C != 0.0f) { + var_r31->unk34.y -= var_r31->unk08.x; + var_r31->unk2C -= var_r31->unk08.y; + if (var_r31->unk2C <= 0.0f) { + var_r31->unk2C = 0.0f; + } + } + } +} diff --git a/src/game/board/audio.c b/src/game/board/audio.c index 3be2dcbb..18e8340d 100755 --- a/src/game/board/audio.c +++ b/src/game/board/audio.c @@ -8,10 +8,18 @@ static s16 boardSeq[2][2]; static s32 boardFX = -1; +//mod: add new music id for extra board static s16 boardMusTbl[] = { - 0x000D, 0x0011, 0x0015, - 0x001C, 0x0021, 0x0025, - 0x0028, 0x0029, 0x002A +/* [BOARD_ID_MAIN1] */ 0x000D, +/* [BOARD_ID_MAIN2] */ 0x0011, +/* [BOARD_ID_MAIN3] */ 0x0015, +/* [BOARD_ID_MAIN4] */ 0x001C, +/* [BOARD_ID_MAIN5] */ 0x0021, +/* [BOARD_ID_MAIN6] */ 0x0025, +/* [BOARD_ID_TUTORIAL] */ 0x0028, +/* [BOARD_ID_EXTRA1] */ 0x0029, +/* [BOARD_ID_EXTRA2] */ 0x002A, +/* [BOARD_ID_CUSTOM] */ 0x002A, }; void BoardMusStartBoard(void) { diff --git a/src/game/board/battle.c b/src/game/board/battle.c index 650a0132..884ef9c4 100755 --- a/src/game/board/battle.c +++ b/src/game/board/battle.c @@ -150,6 +150,7 @@ static void ExecBattle(void) { s32 var_r23; MgInfo *var_r29; s32 var_r27 = 0; + //mod: extend for custom board s32 sp8[] = { DATADIR_W01, DATADIR_W02, @@ -159,7 +160,8 @@ static void ExecBattle(void) { DATADIR_W06, DATADIR_W10, DATADIR_W20, - DATADIR_W21 + DATADIR_W21, + DATADIR_W07 }; var_r29 = mgInfoTbl; diff --git a/src/game/board/boo.c b/src/game/board/boo.c index f8323694..ff5feee2 100755 --- a/src/game/board/boo.c +++ b/src/game/board/boo.c @@ -182,13 +182,22 @@ static s32 booSfxTbl[4][8] = { } }; +//mod: extend for custom board static s32 hostMess[] = { MAKE_MESSID(7, 14), MAKE_MESSID(7, 20), MAKE_MESSID(7, 26), MAKE_MESSID(7, 32), MAKE_MESSID(7, 38), - MAKE_MESSID(7, 44) + MAKE_MESSID(7, 44), + + //dummy data for tutorial and extra board + MAKE_MESSID(7, 44), + MAKE_MESSID(7, 44), + MAKE_MESSID(7, 44), + + //custom board data + MAKE_MESSID(7, 44), }; static s32 ballMdlTbl[] = { diff --git a/src/game/board/boo_house.c b/src/game/board/boo_house.c index b3197298..76456ed9 100644 --- a/src/game/board/boo_house.c +++ b/src/game/board/boo_house.c @@ -21,35 +21,57 @@ static s16 houseMdl[6]; // data -static s32 hostMesTbl[6][6] = { - { 0x7000C, 0x7000D, 0x7000E, 0x7000F, 0x70010, 0x70011 }, - { 0x70012, 0x70013, 0x70014, 0x70015, 0x70016, 0x70017 }, - { 0x70018, 0x70019, 0x7001A, 0x7001B, 0x7001C, 0x7001D }, - { 0x7001E, 0x7001F, 0x70020, 0x70021, 0x70022, 0x70023 }, - { 0x70024, 0x70025, 0x70026, 0x70027, 0x70028, 0x70029 }, - { 0x7002A, 0x7002B, 0x7002C, 0x7002D, 0x7002E, 0x7002F }, +//mod: extend for custom board +static s32 hostMesTbl[10][9] = { +/* [BOARD_ID_MAIN1] */ { 0x7000C, 0x7000D, 0x7000E, 0x7000F, 0x70010, 0x70011 }, +/* [BOARD_ID_MAIN2] */ { 0x70012, 0x70013, 0x70014, 0x70015, 0x70016, 0x70017 }, +/* [BOARD_ID_MAIN3] */ { 0x70018, 0x70019, 0x7001A, 0x7001B, 0x7001C, 0x7001D }, +/* [BOARD_ID_MAIN4] */ { 0x7001E, 0x7001F, 0x70020, 0x70021, 0x70022, 0x70023 }, +/* [BOARD_ID_MAIN5] */ { 0x70024, 0x70025, 0x70026, 0x70027, 0x70028, 0x70029 }, +/* [BOARD_ID_MAIN6] */ { 0x7002A, 0x7002B, 0x7002C, 0x7002D, 0x7002E, 0x7002F }, + + //dummy data for tutorial and extra board +/* [BOARD_ID_TUTORIAL] */ { 0x7002A, 0x7002B, 0x7002C, 0x7002D, 0x7002E, 0x7002F }, +/* [BOARD_ID_EXTRA2] */ { 0x7002A, 0x7002B, 0x7002C, 0x7002D, 0x7002E, 0x7002F }, + + //custom board data +/* [BOARD_ID_CUSTOM] */ { 0x7002A, 0x7002B, 0x7002C, 0x7002D, 0x7002E, 0x7002F }, }; -static BoardModelParam houseMdlTbl[6] = { - { 0x90000, { 0, 1, 0, 0, 0 }, 0xFFFF }, - { 0x90001, { 1, 1, 0, 0, 0 }, 0xFFFF }, - { 0x90003, { 1, 1, 0, 0, 0 }, 0xFFFF }, - { 0x90004, { 1, 1, 0, 0, 0 }, 0xFFFF }, - { 0x90004, { 1, 1, 0, 0, 0 }, 0xFFFF }, - { 0x90007, { 0, 1, 0, 0, 0 }, 0xFFFF }, + +//mod: extend for custom board +static BoardModelParam houseMdlTbl[10] = { +/* [BOARD_ID_MAIN1] */ { 0x90000, { 0, 1, 0, 0, 0 }, 0xFFFF }, +/* [BOARD_ID_MAIN2] */ { 0x90001, { 1, 1, 0, 0, 0 }, 0xFFFF }, +/* [BOARD_ID_MAIN3] */ { 0x90003, { 1, 1, 0, 0, 0 }, 0xFFFF }, +/* [BOARD_ID_MAIN4] */ { 0x90004, { 1, 1, 0, 0, 0 }, 0xFFFF }, +/* [BOARD_ID_MAIN5] */ { 0x90004, { 1, 1, 0, 0, 0 }, 0xFFFF }, +/* [BOARD_ID_MAIN6] */ { 0x90007, { 0, 1, 0, 0, 0 }, 0xFFFF }, + + //dummy data for tutorial and extra board +/* [BOARD_ID_TUTORIAL] */ { 0x90007, { 0, 1, 0, 0, 0 }, 0xFFFF }, +/* [BOARD_ID_EXTRA1] */ { 0x90007, { 0, 1, 0, 0, 0 }, 0xFFFF }, +/* [BOARD_ID_EXTRA2] */ { 0x90007, { 0, 1, 0, 0, 0 }, 0xFFFF }, + + //custom board data +/* [BOARD_ID_CUSTOM] */ { 0x90007, { 0, 1, 0, 0, 0 }, 0xFFFF }, }; + static s32 booMotTbl[3] = { 0x20013, 0x20016, 0xFFFFFFFF }; -static s32 houseMotTbl[9][3] = { - { 0x20001, 0x20003, 0x20004 }, - { 0x20009, 0x2000B, 0x2000C }, - { 0x2000E, 0x20010, 0x20011 }, - { 0x20018, 0x2001A, 0x2001B }, - { 0x2001D, 0x2001F, 0x20020 }, - { 0x20022, 0x20024, 0x20025 }, - { 0x20018, 0x2001A, 0x2001B }, - { 0x20001, 0x20003, 0x20004 }, - { 0x20001, 0x20003, 0x20004 } + +//mod: add entry for custom board +static s32 houseMotTbl[10][3] = { +/* [BOARD_ID_MAIN1] */ { 0x20001, 0x20003, 0x20004 }, +/* [BOARD_ID_MAIN2] */ { 0x20009, 0x2000B, 0x2000C }, +/* [BOARD_ID_MAIN3] */ { 0x2000E, 0x20010, 0x20011 }, +/* [BOARD_ID_MAIN4] */ { 0x20018, 0x2001A, 0x2001B }, +/* [BOARD_ID_MAIN5] */ { 0x2001D, 0x2001F, 0x20020 }, +/* [BOARD_ID_MAIN6] */ { 0x20022, 0x20024, 0x20025 }, +/* [BOARD_ID_TUTORIAL] */ { 0x20018, 0x2001A, 0x2001B }, +/* [BOARD_ID_EXTRA1] */ { 0x20001, 0x20003, 0x20004 }, +/* [BOARD_ID_EXTRA2] */ { 0x20001, 0x20003, 0x20004 }, +/* [BOARD_ID_CUSTOM] */ { 0x20001, 0x20003, 0x20004 } }; // sbss diff --git a/src/game/board/com.c b/src/game/board/com.c index 00a66a66..cb419e8a 100755 --- a/src/game/board/com.c +++ b/src/game/board/com.c @@ -736,9 +736,9 @@ s32 BoardComJunctionInputGet(s32 item, Vec *input, s32 num_dirs, float *dirs) { choose_path = 0; } if (choose_path != 0) { - if (board >= 0 && board <= 5) { + if (board >= BOARD_ID_MAIN1 && board <= BOARD_ID_MAIN6) { space_next = BoardComPathBestGet(space); - } else if (board == 7) { + } else if (board == BOARD_ID_EXTRA1) { space_next = BoardComPathBestGetFlag(space, 0x10000000, 10); } if (space_next == -1) { diff --git a/src/game/board/item.c b/src/game/board/item.c index 76563ee2..ae5b0639 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -169,7 +169,12 @@ static s32 itemMdlTbl[] = { }; static s32 forceMoveSfxTbl[] = { - 0x38, 0x45, 0x42, 0x4D, 0x48, 0x3F + 0x38, + 0x45, + 0x42, + 0x4D, + 0x48, + 0x3F }; static s32 callMotTbl[] = { @@ -194,22 +199,39 @@ static char *callHookTbl[] = { "c007m01-itemhook-r" }; +//mod: add data for custom board static s32 callAttackMotTbl[] = { DATA_MAKE_NUM(DATADIR_W01, 31), DATA_MAKE_NUM(DATADIR_W02, 5), DATA_MAKE_NUM(DATADIR_W03, 29), DATA_MAKE_NUM(DATADIR_W04, 9), DATA_MAKE_NUM(DATADIR_W05, 7), + DATA_MAKE_NUM(DATADIR_W06, 19), + + //dummy data for tutorial and extra board + DATA_MAKE_NUM(DATADIR_W06, 19), + DATA_MAKE_NUM(DATADIR_W06, 19), + DATA_MAKE_NUM(DATADIR_W06, 19), + + //Mod TODO: update this to w07 DATA_MAKE_NUM(DATADIR_W06, 19) }; +//mod: add data for custom board static s32 callAttackMotTbl2[] = { DATA_MAKE_NUM(DATADIR_W01, 32), DATA_MAKE_NUM(DATADIR_W02, 6), DATA_MAKE_NUM(DATADIR_W03, 30), DATA_MAKE_NUM(DATADIR_W04, 10), DATA_MAKE_NUM(DATADIR_W05, 8), - DATA_MAKE_NUM(DATADIR_W06, 20) + DATA_MAKE_NUM(DATADIR_W06, 20), + + DATA_MAKE_NUM(DATADIR_W06, 20), + DATA_MAKE_NUM(DATADIR_W06, 20), + DATA_MAKE_NUM(DATADIR_W06, 20), + + //Mod TODO: update this to w07 + DATA_MAKE_NUM(DATADIR_W06, 20), }; static s32 suitMotTbl[][2] = { diff --git a/src/game/board/lottery.c b/src/game/board/lottery.c index 9e307af2..cabf498b 100755 --- a/src/game/board/lottery.c +++ b/src/game/board/lottery.c @@ -247,6 +247,7 @@ void BoardLotteryInit(void) { } } +//mod: extend for custom board static void CreateModel(void) { s32 i; s32 sp10[4] = { @@ -259,7 +260,8 @@ static void CreateModel(void) { DATA_MAKE_NUM(DATADIR_BKUJIYA, 3), DATA_MAKE_NUM(DATADIR_BKUJIYA, 4) }; - s32 sp20[9][4] = { + //mod: extend for custom board + s32 sp20[10][4] = { { DATA_MAKE_NUM(DATADIR_BGUEST, 1), DATA_MAKE_NUM(DATADIR_BGUEST, 2), @@ -308,6 +310,13 @@ static void CreateModel(void) { DATA_MAKE_NUM(DATADIR_BGUEST, 44), DATA_MAKE_NUM(DATADIR_BGUEST, 45) }, + { + DATA_MAKE_NUM(DATADIR_BGUEST, 42), + DATA_MAKE_NUM(DATADIR_BGUEST, 43), + DATA_MAKE_NUM(DATADIR_BGUEST, 44), + DATA_MAKE_NUM(DATADIR_BGUEST, 45) + }, + //Mod TODO: added for custom board { DATA_MAKE_NUM(DATADIR_BGUEST, 42), DATA_MAKE_NUM(DATADIR_BGUEST, 43), diff --git a/src/game/board/main.c b/src/game/board/main.c index 9aaa66a1..1e3071c6 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -157,6 +157,10 @@ void BoardObjectSetup(BoardFunc create, BoardFunc destroy) case OVL_W21: GWSystem.board = BOARD_ID_EXTRA2; break; + + case OVL_W07: + GWSystem.board = BOARD_ID_CUSTOM; + break; } } @@ -678,6 +682,7 @@ static void CreateBoard(void) static void DestroyBoard(void) { + //mod: extend for custom board s32 dir_table[] = { DATADIR_W01, DATADIR_W02, @@ -687,7 +692,8 @@ static void DestroyBoard(void) DATADIR_W06, DATADIR_W10, DATADIR_W20, - DATADIR_W21 + DATADIR_W21, + DATADIR_W07 }; BoardTauntKill(); BoardAudSeqFadeOutAll(); diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index 82e6b55b..6885c829 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -76,9 +76,19 @@ static Vec statusLayout2Vs2[4] = { { 406.0f, 260.0f, 0.0f }, { 406.0f, 348.0f, 0.0f }, }; -static s32 luckyMessTbl[9] = { - 0x00140000, 0x00140005, 0x0014000A, 0x0014000F, - 0x00140014, 0x00140019, 0x00140000, 0x00140000, + +//mod: extend for custom board +static s32 luckyMessTbl[10] = { + 0x00140000, + 0x00140005, + 0x0014000A, + 0x0014000F, + 0x00140014, + 0x00140019, + 0x00140000, + 0x00140000, + 0x00140000, + //added for custom board 0x00140000 }; @@ -144,10 +154,18 @@ static inline s32 setupObjGet(void) { } static void ExecMGSetup(void) { - s32 sp60[9] = { - 0x750000, 0x760000, 0x770000, - 0x780000, 0x790000, 0x7A0000, - 0x7B0000, 0x7C0000, 0x7D0000 + s32 sp60[10] = { + 0x750000, + 0x760000, + 0x770000, + 0x780000, + 0x790000, + 0x7A0000, + 0x7B0000, + 0x7C0000, + 0x7D0000, + //added for custom board + 0x7D0000 }; Vec sp54; u16 var_r24; diff --git a/src/game/board/pause.c b/src/game/board/pause.c index 7c426ae9..c88fad1e 100755 --- a/src/game/board/pause.c +++ b/src/game/board/pause.c @@ -113,6 +113,7 @@ static float padConfigPosTbl[4][2] = { { 458.0f, 160.0f } }; +//mod: extend for custom board static s32 boardLogoTbl[] = { DATA_MAKE_NUM(DATADIR_BOARD, 87), DATA_MAKE_NUM(DATADIR_BOARD, 88), @@ -122,6 +123,8 @@ static s32 boardLogoTbl[] = { DATA_MAKE_NUM(DATADIR_BOARD, 92), DATA_MAKE_NUM(DATADIR_BOARD, 87), DATA_MAKE_NUM(DATADIR_BOARD, 93), + DATA_MAKE_NUM(DATADIR_BOARD, 94), + //added for custom board DATA_MAKE_NUM(DATADIR_BOARD, 94) }; @@ -288,7 +291,7 @@ void CreatePauseScreen(void) { HuSprZRotSet(pauseSprGrp, 2, -30.0f); HuSprPosSet(pauseSprGrp, 2, 87.0f, 245.0f); HuSprAttrSet(pauseSprGrp, 2, 8); - if (GWBoardGet() == 7 || GWBoardGet() == 8) { + if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) { HuSprAttrSet(pauseSprGrp, 2, 4); } if (GWPartyGet() == 1) { @@ -332,7 +335,7 @@ void CreatePauseScreen(void) { hostOldLayer = BoardModelLayerGet(hostMdl); BoardModelLayerSet(hostMdl, 6); sp24.x = 68.0f; - if (GWBoardGet() == 3) { + if (GWBoardGet() == BOARD_ID_MAIN4) { sp24.y = 464.0f; } else { sp24.y = 434.0f; @@ -466,7 +469,7 @@ static void DeletePauseScreen(void) { BoardModelVisibilitySet(hostMdl, 1); BoardModelMtxSet(hostMdl, &sp8); BoardStarHostSet(hostMdl); - if (GWBoardGet() == 7 || GWBoardGet() == 8) { + if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) { BoardModelVisibilitySet(hostMdl, 0); } } @@ -1278,7 +1281,7 @@ static void CreatePauseControlWin(void) { HuWinMesSpeedSet(settingsControlWin, 0); HuWinMesSet(settingsControlWin, var_r31); HuWinDispOff(settingsControlWin); - if (GWBoardGet() == 7 || GWBoardGet() == 8) { + if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) { var_r31 = MAKE_MESSID(16, 73); } else { var_r31 = MAKE_MESSID(16, 52); @@ -1325,7 +1328,7 @@ static s32 WaitPauseInput(void) { u32 temp_r30; mainScreenF = 1; - if (GWBoardGet() == 7 || GWBoardGet() == 8) { + if (GWBoardGet() == BOARD_ID_EXTRA1 || GWBoardGet() == BOARD_ID_EXTRA2) { var_r28 = 1; } else { var_r28 = 0; diff --git a/src/game/board/shop.c b/src/game/board/shop.c index 52a018e5..814e5b1a 100755 --- a/src/game/board/shop.c +++ b/src/game/board/shop.c @@ -114,6 +114,7 @@ static s8 defaultItemTbl[5] = { 0x05, 0x07, 0x02, 0x03, 0x00 }; +//mod: extend for custom board static s32 hostMessTbl[] = { 0x000F0004, 0x000F0007, @@ -123,6 +124,8 @@ static s32 hostMessTbl[] = { 0x000F0013, 0x000F0004, 0x000F0024, + 0x000F0024, + //Mod TODO: fix for custom board data 0x000F0024 }; @@ -133,7 +136,8 @@ static s8 itemPriceTbl[] = { 30, 30, 0, 0 }; -static s32 shopMotTbl[9][3] = { +//mod: extend for custom data +static s32 shopMotTbl[10][3] = { { 0x00020001, 0x00020003, 0x00020004 }, { 0x00020009, 0x0002000B, 0x0002000C }, { 0x0002000E, 0x00020010, 0x00020011 }, @@ -142,6 +146,9 @@ static s32 shopMotTbl[9][3] = { { 0x00020022, 0x00020024, 0x00020025 }, { 0x00020009, 0x0002000B, 0x0002000C }, { 0x0002002A, 0x0002002C, 0x0002002D }, + { 0x0002002A, 0x0002002C, 0x0002002D }, + + //Mod TODO: fix for custom data { 0x0002002A, 0x0002002C, 0x0002002D } }; diff --git a/src/game/board/star.c b/src/game/board/star.c index cbccef34..4c8aa409 100755 --- a/src/game/board/star.c +++ b/src/game/board/star.c @@ -72,7 +72,8 @@ static Process *starProc; static s16 starParman = -1; static s16 hostMdl = -1; -const s32 lbl_8011E040[9] = { +//mod: extend for custom board +const s32 lbl_8011E040[10] = { MAKE_MESSID(12, 0), MAKE_MESSID(12, 9), MAKE_MESSID(12, 18), @@ -81,10 +82,13 @@ const s32 lbl_8011E040[9] = { MAKE_MESSID(12, 45), MAKE_MESSID(12, 0), MAKE_MESSID(12, 0), + MAKE_MESSID(12, 0), + //Mod TODO: fix for custom board data MAKE_MESSID(12, 0) }; -const s32 lbl_8011E064[9][2] = { +//mod: extend for custom board +const s32 lbl_8011E064[10][2] = { { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, { MAKE_MESSID(21, 35), MAKE_MESSID(21, 41) }, { MAKE_MESSID(21, 36), MAKE_MESSID(21, 42) }, @@ -93,6 +97,9 @@ const s32 lbl_8011E064[9][2] = { { MAKE_MESSID(21, 39), MAKE_MESSID(21, 45) }, { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, + { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, + + //Mod TODO: fix for custom board data { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) } }; @@ -107,12 +114,21 @@ s32 boardStarSndTbl[] = { 0x000002E0 }; -static s32 hostMotTbl[9][2] = { +//mod: extend for custom board +static s32 hostMotTbl[10][2] = { { DATA_MAKE_NUM(DATADIR_W01, 33), DATA_MAKE_NUM(DATADIR_BOARD, 157) }, { DATA_MAKE_NUM(DATADIR_W02, 7), DATA_MAKE_NUM(DATADIR_BOARD, 158) }, { DATA_MAKE_NUM(DATADIR_W03, 31), DATA_MAKE_NUM(DATADIR_BOARD, 159) }, { DATA_MAKE_NUM(DATADIR_W04, 11), DATA_MAKE_NUM(DATADIR_BOARD, 160) }, { DATA_MAKE_NUM(DATADIR_W05, 9), DATA_MAKE_NUM(DATADIR_BOARD, 161) }, + { DATA_MAKE_NUM(DATADIR_W06, 21), DATA_MAKE_NUM(DATADIR_BOARD, 162) }, + + //dummy data for tutorial and extra board + { DATA_MAKE_NUM(DATADIR_W06, 21), DATA_MAKE_NUM(DATADIR_BOARD, 162) }, + { DATA_MAKE_NUM(DATADIR_W06, 21), DATA_MAKE_NUM(DATADIR_BOARD, 162) }, + { DATA_MAKE_NUM(DATADIR_W06, 21), DATA_MAKE_NUM(DATADIR_BOARD, 162) }, + + //Mod TODO: fix for custom board data { DATA_MAKE_NUM(DATADIR_W06, 21), DATA_MAKE_NUM(DATADIR_BOARD, 162) } }; diff --git a/src/game/board/start.c b/src/game/board/start.c index b07ae07a..ea25e32d 100755 --- a/src/game/board/start.c +++ b/src/game/board/start.c @@ -89,7 +89,8 @@ static s32 hitFX[4] = { -1, -1, -1, -1 }; -static s32 startMesTbl[9][5] = { +//mod: extend for custom data +static s32 startMesTbl[10][5] = { { 0x00150001, 0x00150007, 0x0015000D, 0x00150016, 0x0015001C }, { 0x00150002, 0x00150008, 0x0015000E, 0x00150017, 0x0015001D }, { 0x00150003, 0x00150009, 0x0015000F, 0x00150018, 0x0015001E }, @@ -98,13 +99,24 @@ static s32 startMesTbl[9][5] = { { 0x00150006, 0x0015000C, 0x00150012, 0x0015001B, 0x00150021 }, { 0x00150001, 0x00150007, 0x0015000D, 0x00150016, 0x0015001C }, { 0x00150033, 0x00150034, 0x00150035, 0x00150036, 0x00150037 }, + { 0x0015003B, 0x0015003C, 0x0015003D, 0x0015003E, 0x0015003F }, + //Mod TODO: fix for custom board data { 0x0015003B, 0x0015003C, 0x0015003D, 0x0015003E, 0x0015003F } }; +//mod: extend for custom board static s32 logoSprTbl[] = { - 0x00070057, 0x00070058, 0x00070059, - 0x0007005A, 0x0007005B, 0x0007005C, - 0x00070057, 0x0007005D, 0x0007005E + 0x00070057, + 0x00070058, + 0x00070059, + 0x0007005A, + 0x0007005B, + 0x0007005C, + 0x00070057, + 0x0007005D, + 0x0007005E, + //Mod TODO: custom board data + 0x0007005E }; void BoardStartExec(void) { diff --git a/src/game/board/view.c b/src/game/board/view.c index a22e11d9..fa6575dd 100755 --- a/src/game/board/view.c +++ b/src/game/board/view.c @@ -58,40 +58,94 @@ static float overhead2DPos[][2] = { { 288.0f, 72.0f } }; +//mod: extend for custom board static float mapViewMinZ[] = { - -2000.0f, -1500.0f, -2200.0f, - -1800.0f, -2100.0f, -3000.0f, - -3000.0f, -1800.0f, -1800.0f + -2000.0f, + -1500.0f, + -2200.0f, + -1800.0f, + -2100.0f, + -3000.0f, + -3000.0f, + -1800.0f, + -1800.0f, + //Mod TODO: fix data for custom board + -1800.0f }; +//mod: extend for custom board static float mapViewMaxZ[] = { - 2300.0f, 2500.0f, 2600.0f, - 2000.0f, 2300.0f, 2500.0f, - 2500.0f, 2000.0f, 2000.0f + 2300.0f, + 2500.0f, + 2600.0f, + 2000.0f, + 2300.0f, + 2500.0f, + 2500.0f, + 2000.0f, + 2000.0f, + //Mod TODO: fix for custom board data + 2000.0f }; +//mod: extend for custom board static float mapViewMinX[] = { - -3000.0f, -3000.0f, -3000.0f, - -3000.0f, -3000.0f, -3000.0f, - -3000.0f, -2000.0f, -2000.0f + -3000.0f, + -3000.0f, + -3000.0f, + -3000.0f, + -3000.0f, + -3000.0f, + -3000.0f, + -2000.0f, + -2000.0f, + //Mod TODO: fix for custom board data + -2000.0f }; +//mod: extend for custom board static float mapViewMaxX[] = { - 3000.0f, 3000.0f, 3000.0f, - 3000.0f, 3000.0f, 3000.0f, - 3000.0f, 1600.0f, 2000.0f + 3000.0f, + 3000.0f, + 3000.0f, + 3000.0f, + 3000.0f, + 3000.0f, + 3000.0f, + 1600.0f, + 2000.0f, + //Mod TODO: fix for custom board data + 2000.0f, }; +//mod: extend for custom board static float overheadCamZoom[] = { - 14370.0f, 14500.0f, 15000.0f, - 15000.0f, 13000.0f, 15000.0f, - 100.0f, 10000.0f, 10000.0f + 14370.0f, + 14500.0f, + 15000.0f, + 15000.0f, + 13000.0f, + 15000.0f, + 100.0f, + 10000.0f, + 10000.0f, + //Mod TODO: fix for custom board data + 10000.0f }; +//mod: extend for custom board static float overheadCamPosZ[] = { - 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, - 0.0f, -160.0f, 0.0f + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + 0.0f, + -160.0f, + 0.0f, + //Mod TODO: fix for custom board data + 0.0f }; void BoardViewOverheadExec(s32 arg0) {