From 6934e4307e1dfb2d938c6394b04ae8ad9dfa80d0 Mon Sep 17 00:00:00 2001 From: Rainchus Date: Thu, 18 Jan 2024 17:42:49 -0600 Subject: [PATCH] add statue.c decomp to w03Dll --- config/GMPE01_00/rels/w03Dll/symbols.txt | 52 +- configure.py | 2 +- include/board_unsplit.h | 15 +- include/game/board/space.h | 3 + src/REL/w03Dll/file0.c | 457 ---------------- src/REL/w03Dll/file1.c | 75 --- src/REL/w03Dll/main.c | 18 +- src/REL/w03Dll/statue.c | 649 +++++++++++++++++++++++ src/REL/w10Dll/main.c | 6 +- src/game/board/main.c | 2 +- src/game/board/space.c | 4 +- 11 files changed, 706 insertions(+), 577 deletions(-) delete mode 100644 src/REL/w03Dll/file0.c delete mode 100644 src/REL/w03Dll/file1.c create mode 100644 src/REL/w03Dll/statue.c diff --git a/config/GMPE01_00/rels/w03Dll/symbols.txt b/config/GMPE01_00/rels/w03Dll/symbols.txt index eb5f0d70..2cc857d8 100644 --- a/config/GMPE01_00/rels/w03Dll/symbols.txt +++ b/config/GMPE01_00/rels/w03Dll/symbols.txt @@ -135,32 +135,32 @@ lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:f lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x8 data:double -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 data:double -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0xC data:4byte -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x24 data:4byte -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 data:float -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 data:float -lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 data:float -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x6 data:2byte -lbl_1_rodata_BE = .rodata:0x000000BE; // type:object size:0x1 data:byte -lbl_1_rodata_C2 = .rodata:0x000000C2; // type:object size:0x6 data:byte -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 data:float -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x8 scope:local data:double +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 scope:local data:double +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x24 scope:local data:4byte +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x6 scope:local data:2byte +lbl_1_rodata_BE = .rodata:0x000000BE; // type:object size:0x1 scope:local data:byte +lbl_1_rodata_C2 = .rodata:0x000000C2; // type:object size:0x6 scope:local data:byte +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 scope:local data:float lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float diff --git a/configure.py b/configure.py index 915c123f..582c0a36 100644 --- a/configure.py +++ b/configure.py @@ -928,7 +928,7 @@ config.libs = [ objects = { Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w03Dll/main.c"), - Object(NonMatching, "REL/w03Dll/statue.c"), + Object(Matching, "REL/w03Dll/statue.c"), Object(NonMatching, "REL/w03Dll/condor.c"), Object(NonMatching, "REL/w03Dll/river.c"), Object(NonMatching, "REL/w03Dll/smoke.c"), diff --git a/include/board_unsplit.h b/include/board_unsplit.h index be7dcee5..7631dcf2 100644 --- a/include/board_unsplit.h +++ b/include/board_unsplit.h @@ -3,10 +3,15 @@ #include "dolphin.h" +#ifndef _BOARD_SPACE_EVENT_FUNC +#define _BOARD_SPACE_EVENT_FUNC +typedef s32 (*BoardSpaceEventFunc)(void); +#endif + void BoardCameraTargetModelSet(s16 model); void BoardCameraMotionStartEx(s16, Vec *, Vec *, f32, f32, s16); void BoardCameraMotionWait(void); -void BoardSpacePosGet(s32, s32, Vec*); +s32 BoardSpacePosGet(s32, s32, Vec*); void BoardShopTutorialExec(s32); void BoardLotteryTutorialExec(void); s16 BoardStarHostMdlGet(void); @@ -34,10 +39,10 @@ void BoardModelPosSetV(s16, Vec*); void BoardModelPosSet(s16, f32, f32, f32); void BoardModelRotSetV(s16 arg0, Vec* arg1); void BoardModelVisibilitySet(s16, s32); -void BoardSpaceWalkEventFuncSet(void*); -void BoardSpaceWalkMiniEventFuncSet(void*); -void BoardSpaceLandEventFuncSet(void*); -s32 BoardSpaceFlagSearch(s32, s32); +void BoardSpaceWalkEventFuncSet(BoardSpaceEventFunc func); +void BoardSpaceWalkMiniEventFuncSet(BoardSpaceEventFunc func); +void BoardSpaceLandEventFuncSet(BoardSpaceEventFunc func); +s32 BoardSpaceFlagSearch(s32, u32); void BoardSpaceInit(s32); void BoardSpaceDestroy(void); void BoardShopHostSet(s16); diff --git a/include/game/board/space.h b/include/game/board/space.h index 3c948eef..a4e68b27 100644 --- a/include/game/board/space.h +++ b/include/game/board/space.h @@ -5,7 +5,10 @@ #define BOARD_SPACE_LINKMAX 4 +#ifndef _BOARD_SPACE_EVENT_FUNC +#define _BOARD_SPACE_EVENT_FUNC typedef s32 (*BoardSpaceEventFunc)(void); +#endif typedef struct board_space { Vec pos; diff --git a/src/REL/w03Dll/file0.c b/src/REL/w03Dll/file0.c deleted file mode 100644 index 1558b9d2..00000000 --- a/src/REL/w03Dll/file0.c +++ /dev/null @@ -1,457 +0,0 @@ -#include "common.h" -#include "dolphin.h" -#include "REL/executor.h" -#include "game/process.h" -#include "game/data.h" - -void fn_8005B150(void*, void*); -void fn_1_740(void); -void fn_1_E0(void); -typedef void (*VoidFunc)(void); -extern const VoidFunc _ctors[]; -extern const VoidFunc _dtors[]; - -typedef struct w03StructUnk0 { -/* 0x00 */ Vec unk_00; -/* 0x0C */ Vec unk_0C; -/* 0x18 */ Vec unk_18; -/* 0x24 */ s32 datanum; -} w03StructUnk0; - -typedef struct w03State { - s8 unk0; - u8 unk1; - u8 unk2; - s8 unk3; - u16 unk4; - u16 unk6; - s16 unk8; -} w03State; - -//DATA -w03StructUnk0 lbl_1_data_0[] = { -{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0004)}, -{{145.099f, 65.6173f, -2004.14f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0005)}, -{{-2004.14f, -1148.76f, -1095.54f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0006)}, -{{1050.0f, 50.0f, -1810.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x000B)}, -{{-1950.0f, 50.0f, 1790.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x000B)}, -{{1050.0f, 0.0f, -1750.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x000A)}, -{{-1950.0f, 0.0f, 1850.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x000A)}, -{{1950.0f, 0.0f, -1800.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0010)}, -{{-3150.0f, 0.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0011)}, -{{-3150.0f, 270.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0012)}, -{{2080.0f, 0.0f, -1635.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x000D)}, -{{-3000.0f, 0.0f, -500.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x000D)}, -}; - -s16 lbl_1_data_1E0 = 1; -s16 lbl_1_data_1E2 = 1; -s16 lbl_1_data_1E4 = 1; -s16 lbl_1_data_1E6 = 1; -s16 lbl_1_data_1E8 = 1; - -typedef struct w03StructUnk1 { - f32 unk_00; - f32 unk_04; - f32 unk_08; - f32 unk_0C; - f32 unk_10; - f32 unk_14; - f32 unk_18; - f32 unk_1C; -} w03StructUnk1; - -w03StructUnk1 lbl_1_data_1EC = { - 0.0f, 118.0f, 120.0f, 180.0f, 180.0f, 240.0f, 240.0f, 300.0f -}; - -s32 lbl_1_data_20C = { - MAKE_DATA_NUM(0x0077, 0x001C), - DATA_NUM_LISTEND -}; - -s32 lbl_1_data_214 = { - MAKE_DATA_NUM(0x0002, 0x000E), - DATA_NUM_LISTEND -}; - -s32 lbl_1_data_21C[] = { - -1, -1, -1, -1 -}; - -Vec lbl_1_data_22C[] = { - {3900.0f, 0.0f, 2100.0f}, - {3900.0f, 0.0f, 3600.0f}, - {2700.0f, 0.0f, 5400.0f}, - {2700.0f, 0.0f, 6300.0f}, -}; - -s32 lbl_1_data_25C[] = { - 0x0000044B, 0x00000439, 0x00000439, 0x0000044D -}; - -s32 lbl_1_data_26C[] = { - 0x0000044C, 0x0000043A, 0x0000043A, 0x0000044E -}; - -//BSS -w03State* lbl_1_bss_0; - -void fn_1_CF4(void); - -void fn_1_0(void) { - fn_8005B150(&fn_1_E0, &fn_1_740); -} - -int _prolog(void) { - const VoidFunc* ctors = _ctors; - while (*ctors != 0) { - (**ctors)(); - ctors++; - } - fn_8005B150(&fn_1_E0, &fn_1_740); - return 0; -} - -void _epilog(void) { - const VoidFunc* dtors = _dtors; - while (*dtors != 0) { - (**dtors)(); - dtors++; - } -} - -void fn_1_E0(void) { - Vec* var_r29; - f32 var_f30; - f32 var_f31; - s32 var_r31; - s32 var_r31_2; - w03StructUnk0* temp_r30; - s32 i; - - lbl_1_bss_0 = (w03State*)&GWSystem.board_data; - lbl_1_bss_0->unk3 = 0; - fn_800772EC(0x770000); - lbl_1_data_1E0 = fn_8006D9A4(0x770001, NULL, 0); - fn_8006DDE8(lbl_1_data_1E0, -1.0f); - fn_8006F1A8(lbl_1_data_1E0, 0.0f, 0.0f, 0.0f); - fn_8006E2B8(lbl_1_data_1E0, 0, 0x40000001); - lbl_1_data_1E8 = fn_8006D9A4(0x770003, NULL, 0); - fn_8006DDE8(lbl_1_data_1E8, -1.0f); - fn_8006F1A8(lbl_1_data_1E8, 0.0f, 0.0f, 0.0f); - fn_8006F61C(lbl_1_data_1E8, 2); - lbl_1_data_1E2 = fn_8006D9A4(0x770002, NULL, 0); - fn_8006DDE8(lbl_1_data_1E2, -1.0f); - fn_8006F1A8(lbl_1_data_1E2, 0.0f, 0.0f, 0.0f); - fn_8006E2B8(lbl_1_data_1E2, 0, 0x40000001); - lbl_1_data_1E4 = fn_8006D9A4(0x77001B, &lbl_1_data_20C, 0); - fn_8006F1A8(lbl_1_data_1E4, 0.0f, 0.0f, 0.0f); - fn_8006E2B8(lbl_1_data_1E4, 1, 0x40000001); - lbl_1_data_1E6 = fn_8006D9A4(0x2000D, &lbl_1_data_214, 0); - fn_8006F1A8(lbl_1_data_1E6, 0.0f, 0.0f, 0.0f); - fn_8006E2B8(lbl_1_data_1E6, 1, 0x40000001); - - for (i = 0; i < 0xC; i++) { - temp_r30 = &lbl_1_data_0[i]; - if (temp_r30->datanum != -1) { - if ((i == 10) || (i == 11)) { - var_r29 = &lbl_1_data_214; - } else { - var_r29 = NULL; - } - lbl_1_bss_C[i]= fn_8006D9A4(temp_r30->datanum, var_r29, 0); - fn_8006F158(lbl_1_bss_C[i], temp_r30); - fn_8006F220(lbl_1_bss_C[i], &temp_r30->unk_0C); - fn_8006F2E8(lbl_1_bss_C[i], &temp_r30->unk_18); - fn_8006F50C(lbl_1_bss_C[i], 1); - } - } - fn_8006E2B8(lbl_1_bss_C[10], 1, 0x40000001); - fn_8006E2B8(lbl_1_bss_C[11], 1, 0x40000001); - fn_8006E2B8(lbl_1_bss_C[7], 0, 0x40000002); - fn_8006E2B8(lbl_1_bss_C[9], 0, 0x40000002); - fn_8006E2B8(lbl_1_bss_C[1], 0, 0x40000002); - fn_1_3058(); - fn_1_6494(); - fn_1_7ABC(); - fn_1_9A7C(); - fn_8005D10C(&fn_1_884, &fn_1_8F0); - fn_80073FF4(&fn_1_910); - fn_80073FFC(&fn_1_A74); - fn_80074004(&fn_1_AF8); - fn_80083EDC(lbl_1_data_1E4); - fn_800A4F6C(lbl_1_data_1E6); - fn_8007A83C(lbl_1_data_1E6); - fn_80077AAC(lbl_1_data_1E6); - fn_80064D84(0x0000C000); - fn_80064D84(0x3000); - fn_1_CF4(); - fn_8006E2B8(lbl_1_bss_C[0], 0, 0x40000001); - if (lbl_1_bss_0->unk0 != 0) { - var_f30 = lbl_1_data_1EC.unk_10; - var_f31 = lbl_1_data_1EC.unk_14; - fn_1_63F4(0); - } else { - var_f30 = lbl_1_data_1EC.unk_00; - var_f31 = lbl_1_data_1EC.unk_04; - fn_1_63F4(1); - } - fn_8006E0B0(lbl_1_bss_C[0], var_f30, var_f31); - fn_8006E2B8(lbl_1_bss_C[2], 0, 0x40000001); - fn_8006E0B0(lbl_1_bss_C[2], 1, 0x64); - fn_1_785C(); - if (lbl_1_bss_0->unk2 != 0) { - for (i = 0; i < 4; i++) { - if ((lbl_1_bss_0->unk2 & (1 << i)) != 0) { - fn_80064338(i, &fn_1_2930); - break; - } - } - } - fn_1_DEC(); -} - -void fn_1_740(void) { - s32 i; - - fn_1_10B0(); - fn_1_9A9C(); - fn_1_7B58(); - for (i = 0; i < 0x0C; i++) { - fn_8006DB90(lbl_1_bss_C[i]); - lbl_1_bss_C[i] = -1; - } - if (lbl_1_data_1E6 != -1) { - fn_8006DB90(lbl_1_data_1E6); - lbl_1_data_1E6 = -1; - } - if (lbl_1_data_1E4 != -1) { - fn_8006DB90(lbl_1_data_1E4); - lbl_1_data_1E4 = -1; - } - if (lbl_1_data_1E0 != -1) { - fn_8006DB90(lbl_1_data_1E0); - lbl_1_data_1E0 = -1; - } - if (lbl_1_data_1E2 != -1) { - fn_8006DB90(lbl_1_data_1E2); - lbl_1_data_1E2 = -1; - } -} - -extern f32 lbl_1_rodata_18; -extern f32 lbl_1_rodata_1C; - -void fn_1_884(void) { - s32 var = fn_8006DBD4(lbl_1_data_1E0); - Hu3DModelLightInfoSet(var, 1); - Hu3DFogSet(lbl_1_rodata_18, lbl_1_rodata_1C, 0xE4U, 0xF0U, 0xFFU); -} - -void fn_1_8F0(void) { - Hu3DFogClear(); -} - -s32 fn_1_910(void) { - u32 temp_r3; - s32 cur_player_index; - s32 unkC; - - cur_player_index = GWSystem.player_curr; - unkC = GWPlayer[cur_player_index].unkC; - temp_r3 = fn_80074138(0, unkC); - if (temp_r3 & 0xC000) { - if ((fn_8006413C(cur_player_index) == 2) || ((u8) (( GWPlayer[cur_player_index].placement >> 4U) & 1))) { - return 0; - } - if (temp_r3 & 0x4000) { - if (lbl_1_bss_0->unk1 == 0) { - return 0; - } - } - else if (temp_r3 & 0x8000 && lbl_1_bss_0->unk1 != 0) { - return 0; - } - - return fn_1_309C(); - } - if (temp_r3 & 0x200) { - if ((fn_8006413C(cur_player_index) == 2) || ((u8) ((GWPlayer[cur_player_index].placement >> 4U) & 1) != 0)) { - return 0; - } - return fn_1_675C(); - } - return 0; -} - -void fn_1_A74(void) { - s16 temp = GWPlayer[GWSystem.player_curr].unkC; - u32 var = fn_80074138(0, temp) & 0x600000; - if (var + -0x200000 == 0) { - fn_1_7BA8(); - return; - } - if (var + -0x400000 == 0) { - fn_1_9AA0(); - } -} - -void fn_1_AF8(void) { - if ((fn_8006413C(GWSystem.player_curr) == 0) && (fn_1_12C8() != 0) && (lbl_1_bss_0->unk2 != 0)) { - fn_80064D84(0xC00); - } -} -void fn_1_B5C(s32 arg0) { - f32 var_f31; - f32 var_f30; - f32 var_f29; - f32 var_f28; - f32 temp; - - if (arg0 != 0) { - var_f30 = lbl_1_data_1EC.unk_08; - var_f29 = lbl_1_data_1EC.unk_0C; - var_f31 = lbl_1_data_1EC.unk_10; - var_f28 = lbl_1_data_1EC.unk_14; - fn_1_63F4(0); - } else { - var_f30 = lbl_1_data_1EC.unk_18; - var_f29 = lbl_1_data_1EC.unk_1C; - var_f31 = lbl_1_data_1EC.unk_00; - var_f28 = lbl_1_data_1EC.unk_04; - fn_1_63F4(1); - } - fn_8006E2B8(lbl_1_bss_C[0], 0, 0); - fn_8006E674(lbl_1_bss_C[0], var_f30); - while (1) { - temp = fn_8006E6F8(lbl_1_bss_C[0]); - if (temp >= var_f29) { - break; - } - HuPrcVSleep(); - } - fn_8006E5C4(lbl_1_bss_C[0], 0x40000001); - fn_8006E674(lbl_1_bss_C[0], var_f31); - fn_8006E0B0(lbl_1_bss_C[0], (s32) var_f31, (s32) var_f28); -} - -void fn_1_CF4(void) { - s16 var; - s32 i, j; - spaceData* temp_r28; - spaceData* temp_r31; - - for (i = 0; i < fn_800740B4(0); i++) { - var = i + 1; - temp_r31 = fn_800740C4(0, var); - for (j = 0; j < temp_r31->num_links; j++) { - if (fn_80074138(0, temp_r31->links[j]) & 0xC00) { - temp_r28 = fn_800740C4(0, temp_r31->links[j]); - if (lbl_1_bss_0->unk0 != 0) { - temp_r28->flag |= 0x04000000; - fn_80064D84(0xC00); - } else { - temp_r28->flag &= ~0x04000000; - fn_80064D94(0xC00); - } - } - } - } -} - -void fn_1_DEC(void) { - Vec sp20; - Vec sp14; - Vec sp8; - omObjData* temp_r3; - s32 var_r31; - s32 var_r31_2; - w03UnkStruct2* temp_r29; - s32 i; - - temp_r3 = omAddObjEx(lbl_801D3ED4, 0x101, 0, 0, -1, &fn_1_10E4); - lbl_1_bss_4 = temp_r3; - temp_r29 = (w03UnkStruct2*)&temp_r3->work[0]; - temp_r29->unk0 = 0; - lbl_1_bss_8 = 0; - fn_8005D530(&sp20); - fn_8005D628(&sp14); - HuAudFXListnerSetEX(&sp20, &sp14, 1200.0f, 4800.0f, 36000.0f, 0.0f, 1200.0f); - for (i = 0; i < 4; i++) { - sp8.x = lbl_1_data_22C[i].x - 3600.0f; - sp8.y = lbl_1_data_22C[i].y; - sp8.z = lbl_1_data_22C[i].z - 3600.0f; - if (lbl_1_bss_0->unk2 != 0) { - lbl_1_data_21C[i] = HuAudFXEmiterPlay(lbl_1_data_26C[i], &sp8); - } else { - lbl_1_data_21C[i] = HuAudFXEmiterPlay(lbl_1_data_25C[i], &sp8); - } - } - - for (i = 0; i < 4; i++) { - if ((WipeStatGet() != 0) || (_CheckFlag(0x1001CU) != 0)) { - HuAudFXVolSet(lbl_1_data_21C[i], 0); - } else { - HuAudFXVolSet(lbl_1_data_21C[i], 0x7F); - } - } - - if (_CheckFlag(0x10010) == 0) { - if (lbl_1_bss_8 == 0) { - HuAudFXPauseAll(1); - lbl_1_bss_8 = 1; - } - } else if (lbl_1_bss_8 != 0) { - HuAudFXPauseAll(0); - lbl_1_bss_8 = 0; - } -} - -void fn_1_10B0(void) { - if (lbl_1_bss_4) { - ((w03UnkStruct2*)&lbl_1_bss_4->work[0])->unk0 = 1; - } -} - -void fn_1_10E4(omObjData* arg0) { - Vec sp14; - Vec sp8; - s32 i; - w03UnkStruct2* temp_r29; - - temp_r29 = (w03UnkStruct2*)&arg0->work[0]; - if (temp_r29->unk0 != 0 || (fn_8005B6A8() != 0)) { - for (i = 0; i < 4; i++) { - if (lbl_1_data_21C[i] != -1) { - HuAudFXFadeOut(lbl_1_data_21C[i], 100); - } - } - HuAudFXListnerKill(); - lbl_1_bss_4 = 0; - omDelObjEx(HuPrcCurrentGet(), arg0); - return; - } - fn_8005D628(&sp8); - fn_8005D578(&sp14); - - for (i = 0; i < 4; i++) { - if ((WipeStatGet() != 0) || (_CheckFlag(0x1001C) != 0)) { - HuAudFXVolSet(lbl_1_data_21C[i], 0); - } else { - HuAudFXVolSet(lbl_1_data_21C[i], 0x7F); - } - } - - sp14.y += 2000.0f; - if (_CheckFlag(0x10010) == 0) { - if (lbl_1_bss_8 == 0) { - HuAudFXPauseAll(1); - lbl_1_bss_8 = 1; - } - } else if (lbl_1_bss_8 != 0) { - HuAudFXPauseAll(0); - lbl_1_bss_8 = 0; - } - HuAudFXListnerUpdate(&sp14, &sp8); -} \ No newline at end of file diff --git a/src/REL/w03Dll/file1.c b/src/REL/w03Dll/file1.c deleted file mode 100644 index 8aeef64a..00000000 --- a/src/REL/w03Dll/file1.c +++ /dev/null @@ -1,75 +0,0 @@ -#include "common.h" -#include "dolphin.h" -#include "REL/executor.h" -#include "game/process.h" -#include "game/data.h" - -//DATA file1 -s16 lbl_1_data_280 = -1; -s16 lbl_1_data_282 = -1; -s16 lbl_1_data_284 = -1; -s16 lbl_1_data_286 = -1; -s32 lbl_1_data_288 = -1; - -//char lbl_1_data_28C[] = "%d"; - -//shouldn't use MAKE_DATA_NUM -s32 lbl_1_data_290[] = { - MAKE_DATA_NUM(0x005F, 0x0062), - MAKE_DATA_NUM(0x001A, 0x0062), - MAKE_DATA_NUM(0x006D, 0x0062), - MAKE_DATA_NUM(0x008A, 0x0062), - MAKE_DATA_NUM(0x0085, 0x0062), - MAKE_DATA_NUM(0x0011, 0x0062), - MAKE_DATA_NUM(0x000D, 0x0062), - MAKE_DATA_NUM(0x0081, 0x0062), -}; - -//shouldn't use MAKE_DATA_NUM -s32 lbl_1_data_2B0[] = { - MAKE_DATA_NUM(0x005F, 0x0033), - MAKE_DATA_NUM(0x001A, 0x0033), - MAKE_DATA_NUM(0x006D, 0x0033), - MAKE_DATA_NUM(0x008A, 0x0033), - MAKE_DATA_NUM(0x0085, 0x0033), - MAKE_DATA_NUM(0x0011, 0x0033), - MAKE_DATA_NUM(0x000D, 0x0033), - MAKE_DATA_NUM(0x0081, 0x0033), -}; - -s32 lbl_1_data_2D0[] = { - 0x125, 0x165, 0x1A5, 0x1E5, 0x225, 0x265, 0x2A5, 0x2E5 -}; - -s32 lbl_1_data_2F0[] = { - 0x12E, 0x16E, 0x1AE, 0x1EE, 0x22E, 0x26E, 0x2AE, 0x2EE -}; - -s16 lbl_1_data_310 = -1; -s16 lbl_1_data_312 = -1; -s16 lbl_1_data_314 = -1; -s16 lbl_1_data_316 = -1; - - -s32 lbl_1_data_318[] = { - MAKE_DATA_NUM(0x0077, 0x0016), - MAKE_DATA_NUM(0x0077, 0x0017), - MAKE_DATA_NUM(0x0077, 0x0018), - MAKE_DATA_NUM(0x0077, 0x0019), - MAKE_DATA_NUM(0x0077, 0x001A), - DATA_NUM_LISTEND -}; - -char lbl_1_data_330[] = "itemhook_oya"; -char lbl_1_data_33D[] = "jyanA"; -char lbl_1_data_343[] = "jyanB"; - -char* lbl_1_data_34C[] = { - &lbl_1_data_33D, &lbl_1_data_343 -}; - -char lbl_1_data_354[] = "coin"; - -char* lbl_1_data_35C[] = { - &lbl_1_data_33D, &lbl_1_data_343 -}; \ No newline at end of file diff --git a/src/REL/w03Dll/main.c b/src/REL/w03Dll/main.c index 8c521919..2d5d0b55 100644 --- a/src/REL/w03Dll/main.c +++ b/src/REL/w03Dll/main.c @@ -8,6 +8,11 @@ #include "game/object.h" #include "game/board/player.h" #include "math.h" +#include "board_unsplit.h" +#include "game/hsfman.h" + +void BoardModelPosSet(s16, f32, f32, f32); +s32 BoardModelMotionStart(s16, s32, s32); void fn_8005B150(void*, void*); void fn_1_740(void); @@ -22,14 +27,13 @@ void fn_1_DEC(void); void fn_1_10B0(void); s32 fn_1_12C8(void); void fn_8006DDE8(s16, f32); -BoardSpace* BoardSpaceGet(s32, s32); void fn_1_10E4(omObjData* arg0); extern Process *boardObjMan; typedef void (*VoidFunc)(void); extern const VoidFunc _ctors[]; extern const VoidFunc _dtors[]; -void BoardModelPosSet(s16, f32, f32, f32); -void BoardModelMotionStart(s16, s32, s32); + + f32 BoardModelMotionTimeGet(s16); s16 BoardModelCreate(s32, void*, s32); void BoardModelKill(s16); @@ -154,7 +158,7 @@ void BoardCreate(void) { var_r29 = NULL; } lbl_1_bss_C[i]= BoardModelCreate(temp_r30->datanum, var_r29, 0); - BoardModelPosSetV(lbl_1_bss_C[i], temp_r30); + BoardModelPosSetV(lbl_1_bss_C[i], &temp_r30->unk_00); BoardModelRotSetV(lbl_1_bss_C[i], &temp_r30->unk_0C); BoardModelScaleSetV(lbl_1_bss_C[i], &temp_r30->unk_18); BoardModelVisibilitySet(lbl_1_bss_C[i], 1); @@ -171,7 +175,7 @@ void BoardCreate(void) { fn_1_9A7C(); BoardLightHookSet(&fn_1_884, &fn_1_8F0); BoardSpaceWalkEventFuncSet(&fn_1_910); - BoardSpaceWalkMiniEventFuncSet(&fn_1_A74); + BoardSpaceWalkMiniEventFuncSet((void*)&fn_1_A74); BoardSpaceLandEventFuncSet((void*)&fn_1_AF8); BoardStarHostSet(lbl_1_data_1E4); BoardBooHouseHostSet(lbl_1_data_1E6); @@ -234,7 +238,7 @@ void BoardDestroy(void) { } void fn_1_884(void) { - s32 var = BoardModelIDGet(lbl_1_data_1E0); + s16 var = BoardModelIDGet(lbl_1_data_1E0); Hu3DModelLightInfoSet(var, 1); Hu3DFogSet(5000.0f, 30000.0f, 0xE4U, 0xF0U, 0xFFU); } @@ -412,7 +416,7 @@ void fn_1_10E4(omObjData* arg0) { temp_r29 = (w03UnkStruct2*)&arg0->work[0]; if (temp_r29->unk0 != 0 || (BoardIsKill() != 0)) { - for (i = 0; i < 4; i++) { + for (i = 0; i < ARRAY_COUNT(lbl_1_data_21C); i++) { if (lbl_1_data_21C[i] != -1) { HuAudFXFadeOut(lbl_1_data_21C[i], 100); } diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c new file mode 100644 index 00000000..ea675d65 --- /dev/null +++ b/src/REL/w03Dll/statue.c @@ -0,0 +1,649 @@ +#include "dolphin.h" +#include "REL/executor.h" +#include "game/process.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "REL/w03Dll.h" +#include "game/audio.h" +#include "game/board/space.h" +#include "game/board/player.h" +#include "board_unsplit.h" +#include "game/hsfman.h" +#include "game/board/main.h" + +void fn_1_1358(void); +void fn_1_152C(void); +s32 fn_1_15E8(void); +s32 fn_1_1650(s32 arg0); +void fn_1_19DC(s32 arg0, s32 arg1); +s32 fn_1_1D1C(void); +void fn_1_1ED4(s32 arg0); +void fn_1_20E0(s32 arg0); +void fn_1_26E0(s32 arg0); +void fn_1_2AC0(void); +void fn_1_2818(void); +void fn_1_2A40(void); +void fn_1_2B44(void); +s32 BoardVecCalcDAngleMod(f32*, f32, f32); +s32 BoardPlayerMotBlendCheck(s32); +void BoardPlayerMotBlendSet(s32, s32, s32); +f32 BoardPlayerRotYGet(s32); +void BoardConfettiCreate(Point3d*, s32, f32); +double atan2(double y, double x); +void omVibrate(s16, s16, s16, s16); +f32 BoardModelMotionTimeGet(s16); + +//DATA +s16 lbl_1_data_280 = -1; +s16 lbl_1_data_282 = -1; +s16 lbl_1_data_284 = -1; +s16 lbl_1_data_286 = -1; +s32 lbl_1_data_288 = -1; + +char lbl_1_data_28C[] = "%d"; + +s32 lbl_1_data_290[] = { //TODO: make sure this actually uses MAKE_DATA_NUM macro + MAKE_DATA_NUM(0x5F, 0x62), + MAKE_DATA_NUM(0x1A, 0x62), + MAKE_DATA_NUM(0x6D, 0x62), + MAKE_DATA_NUM(0x8A, 0x62), + MAKE_DATA_NUM(0x85, 0x62), + MAKE_DATA_NUM(0x11, 0x62), + MAKE_DATA_NUM(0x0D, 0x62), + MAKE_DATA_NUM(0x81, 0x62), +}; + +s32 lbl_1_data_2B0[] = { //TODO: make sure this actually uses MAKE_DATA_NUM macro + MAKE_DATA_NUM(0x5F, 0x33), + MAKE_DATA_NUM(0x1A, 0x33), + MAKE_DATA_NUM(0x6D, 0x33), + MAKE_DATA_NUM(0x8A, 0x33), + MAKE_DATA_NUM(0x85, 0x33), + MAKE_DATA_NUM(0x11, 0x33), + MAKE_DATA_NUM(0x0D, 0x33), + MAKE_DATA_NUM(0x81, 0x33), +}; + +s32 lbl_1_data_2D0[] = { + 0x00000125, 0x00000165, 0x000001A5, + 0x000001E5, 0x00000225, 0x00000265, + 0x000002A5, 0x000002E5 +}; + +s32 lbl_1_data_2F0[] = { + 0x0000012E, 0x0000016E, 0x000001AE, + 0x000001EE, 0x0000022E, 0x0000026E, + 0x000002AE, 0x000002EE +}; + +//BSS Extern +extern w03State* lbl_1_bss_0; +extern Process *boardMainProc; +extern s16 lbl_1_bss_C[14]; + +//BSS +s8 lbl_1_bss_6F; +s8 lbl_1_bss_6E; +s16 lbl_1_bss_6C; +s16 lbl_1_bss_6A; +s16 lbl_1_bss_68; +GXTexObj lbl_1_bss_48; +char lbl_1_bss_44[4]; +char lbl_1_bss_38[12]; +void* lbl_1_bss_34; +f32 lbl_1_bss_30; +s8 lbl_1_bss_2C; +Process* lbl_1_bss_28; + +s32 fn_1_12C8(void) { + BoardDiceDigit2DShowSet(0); + lbl_1_bss_28 = HuPrcChildCreate(&fn_1_1358, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_28, &fn_1_152C); + + while (lbl_1_bss_28) { + HuPrcVSleep(); + } + return BoardDiceDigit2DShowSet(1); +} + +void fn_1_1358(void) { + s32 cur_player_index; + s32 unkC; + + cur_player_index = GWSystem.player_curr; + unkC = GWPlayer[cur_player_index].space_curr; + lbl_1_bss_2C = 0; + if ((BoardSpaceFlagGet(0, GWPlayer[cur_player_index].space_curr) & 0x2000)) { + lbl_1_bss_6E = 0; + lbl_1_bss_6C = lbl_1_bss_C[3]; + } else { + lbl_1_bss_6E = 1; + lbl_1_bss_6C = lbl_1_bss_C[4]; + } + if (fn_1_1650(cur_player_index) != 0) { + if (fn_1_1D1C() != 0) { + fn_1_1ED4(cur_player_index); + } else { + fn_1_20E0(cur_player_index); + } + if (lbl_1_bss_2C) { + sprintf(lbl_1_bss_44, lbl_1_data_28C, lbl_1_bss_2C); + BoardWinCreate(0, 0x160006, -1); + BoardWinInsertMesSet((s32)lbl_1_bss_44, 0); + BoardWinWait(); + BoardWinKill(); + lbl_1_bss_0->unk2 = 1 << cur_player_index; + lbl_1_bss_0->unk0 = lbl_1_bss_2C; + fn_1_CF4(); + } + fn_1_26E0(cur_player_index); + BoardStatusShowSetAll(1); + } + BoardPlayerPostTurnHookSet(cur_player_index, &fn_1_15E8); + BoardWinKill(); + HuPrcEnd(); +} + +void fn_1_152C(void) { + BoardConfettiStop(); + if (lbl_1_data_282 != -1) { + BoardPlayerMotionKill(GWSystem.player_curr, lbl_1_data_282); + lbl_1_data_282 = -1; + } + if (lbl_1_data_280 != -1) { + BoardPlayerMotionKill(GWSystem.player_curr, lbl_1_data_280); + lbl_1_data_280 = -1; + } + fn_1_2AC0(); + lbl_1_bss_28 = NULL; +} + +s32 fn_1_15E8(void) { + BoardModelVisibilitySet(lbl_1_bss_6C, 1); + if (lbl_1_data_284 != -1) { + BoardModelKill(lbl_1_data_284); + lbl_1_data_284 = -1; + } + return 1; +} + +s32 fn_1_1650(s32 arg0) { + Point3d sp38; + Point3d sp2C; + Point3d sp20; + Point3d sp14; + Point3d sp8; + f32 temp; + s32 temp2; + + BoardRotateDiceNumbers(arg0); + + if (lbl_1_bss_0->unk2) { + BoardWinCreate(0, 0x160000, -1); + BoardWinWait(); + BoardWinKill(); + return 0; + } + + temp2 = BoardSpaceLinkFlagSearch(0, GWPlayer[arg0].space_curr, 0x02000000); + BoardSpacePosGet(0, temp2, &sp38); + BoardPlayerPosGet(arg0, &sp2C); + PSVECSubtract(&sp38, &sp2C, &sp20); + temp = (atan2(-sp20.x, -sp20.z) / 3.141592653589793) * 180.0f; + BoardPlayerRotYSet(arg0, temp); + sp14.x = 0.0f; + sp14.y = 100.0f; + sp14.z = 0.0f; + sp8.x = -20.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_6C, &sp8, &sp14, 1360.0f, -1.0f, 0x15); + BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x28); + + while (GWPlayer[arg0].moving) { + HuPrcVSleep(); + } + + BoardStatusShowSetAll(0); + BoardPlayerMotBlendSet(arg0, 0xB4, 0xF); + + while (BoardPlayerMotBlendCheck(arg0) == 0) { + HuPrcVSleep(); + } + + BoardRotateDiceNumbers(arg0); + BoardWinCreate(2, 0x160001, 2); + BoardWinWait(); + BoardWinCreateChoice(0, 0x160002, -1, 0); + BoardWinAttrSet(0x10); + if (GWPlayer[arg0].com) { + if (BoardRandMod(0x64) > 0x32U) { + BoardComKeySetLeft(); + } else { + BoardComKeySetRight(); + } + } + BoardWinWait(); + lbl_1_bss_6F = BoardWinChoiceGet(); + BoardWinKill(); + fn_1_19DC(arg0, lbl_1_bss_6F); + BoardFilterFadeInit(0x1E, 0xA0); + BoardMusStart(1, 0x19, 0x7F, 0); + HuAudFXPlay(0x435); + sp8.y = BoardModelRotYGet(lbl_1_bss_6C); + + while (BoardVecCalcDAngleMod(&sp8.y, 180.0f, 2.0f) == 0) { + BoardModelRotYSet(lbl_1_bss_6C, sp8.y); + HuPrcVSleep(); + } + + HuAudFXPlay(0x445); + BoardModelRotYSet(lbl_1_bss_6C, 180.0f); + + while (BoardMusStatusGet(1) != 0) { + HuPrcVSleep(); + } + return 1; +} + +void fn_1_19DC(s32 arg0, s32 arg1) { + s32 temp_r30; + s32 temp_r5; + s32 temp_r5_2; + s32 var_r29; + f32 temp; + + temp_r30 = GWPlayer[arg0].character; + if (arg1 != 0) { + lbl_1_data_282 = BoardPlayerMotionCreate(arg0, lbl_1_data_2B0[temp_r30]); + lbl_1_bss_6A = 8; + lbl_1_bss_68 = lbl_1_data_282; + var_r29 = lbl_1_data_2F0[GWPlayer[arg0].character]; + } else { + lbl_1_bss_6A = 7; + lbl_1_bss_68 = 1; + var_r29 = lbl_1_data_2D0[GWPlayer[arg0].character]; + } + lbl_1_data_280 = BoardPlayerMotionCreate(arg0, lbl_1_data_290[temp_r30]); + temp = (180.0f + BoardPlayerRotYGet(arg0)); + BoardPlayerMotBlendSet(arg0, temp, 0xF); + while (BoardPlayerMotBlendCheck(arg0) == 0) { + HuPrcVSleep(); + } + HuAudFXPlay(var_r29); + BoardPlayerVoiceEnableSet(arg0, lbl_1_bss_6A, 0); + BoardPlayerMotionShiftSet(arg0, lbl_1_bss_6A, 0.0f, 8.0f, 0); + HuPrcSleep(9); + + while (BoardPlayerMotionEndCheck(arg0) == 0) { + HuPrcVSleep(); + + } + HuPrcSleep(0x3C); + + if (arg1 != 0) { + BoardPlayerMotionShiftSet(arg0, lbl_1_bss_68, 0.0f, 8.0f, 0); + HuPrcSleep(9); + while (BoardPlayerMotionEndCheck(arg0) == 0) { + HuPrcVSleep(); + } + } + BoardRotateDiceNumbers(arg0); + HuPrcSleep(0x14); + temp = (180.0f + BoardPlayerRotYGet(arg0)); + BoardPlayerMotBlendSet(arg0, temp, 0xF); + while (BoardPlayerMotBlendCheck(arg0) == 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 1, 0x3E8); + BoardPlayerMotionShiftSet(arg0, lbl_1_data_280, 0.0f, 10.0f, 0); + HuPrcSleep(0xB); + while (BoardPlayerMotionEndCheck(arg0) == 0) { + HuPrcVSleep(); + } +} + +s32 fn_1_1D1C(void) { + s32 sp34; + s32 sp30; + s32 sp2C; + s32 sp28; + s32 sp24; + s32 sp20; + s32 modRand2; + s32 var_r31; + s32 temp2; + s32 modRand; + s32 prevTurn; + s32 maxTurn; + + s32 sp8[3] = { 70, 50, 45 }; + s32 sp14[3][3] = { + {3, 5, 22}, + {5, 10, 35}, + {5, 15, 35} + }; + + while (BoardMusStatusGet(1) != 0) { + HuPrcVSleep(); + } + BoardWinCreate(2, 0x160003, 2); + BoardWinWait(); + BoardWinKill(); + prevTurn = GWSystem.turn - 1; + maxTurn = GWSystem.max_turn; + var_r31 = prevTurn / (maxTurn / 3); + if (var_r31 >= 3) { + var_r31 = 2; + } + modRand = BoardRandMod(100); + if (modRand < sp8[var_r31] ) { + return 1; + } + modRand2 = BoardRandMod(100 - sp8[var_r31]); + if (modRand2 < sp14[var_r31][0]) { + lbl_1_bss_2C = 3; + } else if (modRand2 < sp14[var_r31][1]) { + lbl_1_bss_2C = 2; + } else { + lbl_1_bss_2C = 1; + } + return 0; +} + +void fn_1_1ED4(s32 arg0) { + Point3d spC; + f32 sp8; + + lbl_1_data_284 = BoardModelCreate(0x77000C, NULL, 0); + BoardModelVisibilitySet(lbl_1_data_284, 0); + BoardModelVisibilitySet(lbl_1_bss_6C, 0); + BoardModelPosGet(lbl_1_bss_6C, &spC); + BoardModelVisibilitySet(lbl_1_data_284, 1); + BoardModelPosSetV(lbl_1_data_284, &spC); + BoardFilterFadeOut(0x1E); + BoardPlayerPosGet(arg0, &spC); + spC.y += 700.0f; + BoardConfettiCreate(&spC, 0x64, 300.0f); + sp8 = BoardModelRotYGet(lbl_1_bss_6C); + + while (BoardVecCalcDAngleMod(&sp8, 0.0f, 30.0f) == 0) { + BoardModelRotYSet(lbl_1_data_284, sp8); + HuPrcVSleep(); + } + + omVibrate(arg0, 0xC, 4, 2); + BoardMusStart(1, 0x1A, 0x7F, 0); + BoardModelRotYSet(lbl_1_data_284, 0.0f); + BoardModelRotYSet(lbl_1_bss_6C, 0.0f); + + while (BoardFilterFadeDoneCheck() == 0) { + HuPrcVSleep(); + } + BoardRotateDiceNumbers(arg0); + + while (BoardMusStatusGet(1) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + BoardWinCreate(2, 0x160004, 2); + BoardWinWait(); + BoardWinKill(); + BoardConfettiKill(); +} + +void fn_1_20E0(s32 arg0) { + Point3d sp24; + Point3d sp18; + Point3d spC; + f32 sp8; + f32 var_f31; + s32 i; + + lbl_1_data_284 = BoardModelCreate(0x77000D, NULL, 0); + BoardModelVisibilitySet(lbl_1_data_284, 0); + BoardModelVisibilitySet(lbl_1_bss_6C, 0); + BoardModelPosGet(lbl_1_bss_6C, &spC); + BoardModelVisibilitySet(lbl_1_data_284, 1); + BoardModelPosSetV(lbl_1_data_284, &spC); + BoardFilterFadeOut(0x1E); + sp8 = BoardModelRotYGet(lbl_1_bss_6C); + while (BoardVecCalcDAngleMod(&sp8, 0.0f, 30.0f) == 0) { + BoardModelRotYSet(lbl_1_data_284, sp8); + HuPrcVSleep(); + } + omVibrate(arg0, 0xC, 4, 2); + BoardModelRotYSet(lbl_1_data_284, 0.0f); + BoardModelRotYSet(lbl_1_bss_6C, 0.0f); + + while (BoardFilterFadeDoneCheck() == 0) { + HuPrcVSleep(); + } + + BoardMusStart(1, 0x1B, 0x7F, 0); + HuAudFXPlay(0x44A); + fn_1_2A40(); + lbl_1_bss_30 = 0.0f; + + while (lbl_1_bss_30 < 128.0f) { + HuPrcVSleep(); + lbl_1_bss_30 += 12.0f; + } + + if (lbl_1_bss_30 > 128.0f) { + lbl_1_bss_30 = 128.0f; + } + HuPrcSleep(0x28); + lbl_1_bss_30 = 128.0f; + + while (lbl_1_bss_30 > 0.0f) { + HuPrcVSleep(); + lbl_1_bss_30 -= 12.0f; + } + if (lbl_1_bss_30 < 0.0f) { + lbl_1_bss_30 = 0.0f; + } + fn_1_2AC0(); + + for (i = 0; i < 3; i++) { + BoardCameraMotionStartEx(-1, NULL, 0, 680.0f, -1.0f, 0xD); + BoardCameraMotionWait(); + BoardCameraMotionStartEx(-1, NULL, 0, 1360.0f, -1.0f, 0xD); + BoardCameraMotionWait(); + } + + BoardRotateDiceNumbers(arg0); + while (BoardMusStatusGet(1) != 0) { + HuPrcVSleep(); + } + + BoardAudSeqPause(0, 0, 1000); + BoardWinCreate(2, 0x160005, 2); + BoardWinWait(); + BoardCameraQuakeSet(0x8CA0, 100.0f); + omVibrate(arg0, 0xE10, 4, 2); + lbl_1_data_288 = HuAudFXPlay(0x436); + BoardCameraViewSet(1); + HuPrcSleep(0x3C); + BoardCameraMotionWait(); + sp24.x = 0.0f; + sp24.y = 100.0f; + sp24.z = 0.0f; + sp18.x = -20.0f; + sp18.y = 0.0f; + sp18.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_C[1], &sp18, &sp24, 3000.0f, -1.0f, 0x3C); + BoardCameraMotionWait(); + omVibrate(arg0, 0x1E, 6, 6); + HuPrcSleep(0x1E); + + for (var_f31 = 100.0f; var_f31 > 0.0f; var_f31 -= 2.0f) { + BoardCameraQuakeSet(0xA, var_f31); + HuPrcVSleep(); + } + + BoardCameraQuakeReset(); + if (lbl_1_data_288 != 0) { + HuAudFXStop(lbl_1_data_288); + lbl_1_data_288 = -1; + } + + fn_1_2818(); + omVibrate(arg0, 0xC, 0xC, 0); + HuAudFXPlay(0x438); + fn_1_B5C(1); + HuPrcSleep(0x3C); + sp24.x = 0.0f; + sp24.y = 100.0f; + sp24.z = 0.0f; + sp18.x = -20.0f; + sp18.y = 0.0f; + sp18.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_6C, &sp18, &sp24, 1360.0f, -1.0f, 0x3C); + BoardCameraMotionWait(); + HuPrcSleep(0x3C); +} + +void fn_1_26E0(s32 arg0) { + Point3d sp20; + Point3d sp14; + Point3d sp8; + f32 temp; + + BoardSpacePosGet(0, GWPlayer[arg0].space_curr, &sp20); + BoardPlayerPosGet(arg0, &sp14); + PSVECSubtract(&sp20, &sp14, &sp8); + PSVECNormalize(&sp8, &sp8); + temp = (180.0f * (atan2(-sp8.x, -sp8.z) / 3.141592653589793)); + BoardPlayerRotYSet(arg0, temp); + BoardCameraViewSet(1); + BoardCameraTargetPlayerSet(arg0); + BoardPlayerPosLerpStart(arg0, &sp14, &sp20, 0x28); + while (GWPlayer[arg0].moving != 0) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + BoardModelMotionStart(lbl_1_bss_C[1], 0, 0); + BoardRotateDiceNumbers(arg0); +} + +void fn_1_2818(void) { + s16 temp_r29; + s16 temp_r30; + s16 j; + s16 sp8[3] = {0x0002, 0x003E, 0x007A}; + + temp_r29 = (4 - lbl_1_bss_2C) * 0x3C; + BoardModelMotionStart(lbl_1_bss_C[1], 0, 0); + while (1) { + temp_r30 = BoardModelMotionTimeGet(lbl_1_bss_C[1]); + if (temp_r29 > temp_r30) { + for (j = 0; j < ARRAY_COUNT(sp8); j++) { + if (temp_r30 == sp8[j]) { + HuAudFXPlay(0x446); + } + } + HuPrcVSleep(); + } else { + break; + } + } + + BoardModelAttrSet(lbl_1_bss_C[1], 0x40000002); + HuPrcSleep(0x3C); +} + +s32 fn_1_2930(s32 arg0) { + lbl_1_bss_0->unk0--; + if (lbl_1_bss_0->unk0 <= 0) { + lbl_1_bss_0->unk2 = 0; + lbl_1_bss_0->unk0 = 0; + fn_1_B5C(0); + BoardWinCreate(0, 0x160008, -1); + BoardWinWait(); + BoardWinKill(); + fn_1_CF4(); + return 1; + } + sprintf(lbl_1_bss_38, lbl_1_data_28C, lbl_1_bss_0->unk0); + BoardWinCreate(0, 0x160007, -1); + BoardWinInsertMesSet((s32)lbl_1_bss_38, 1); + BoardWinWait(); + BoardWinKill(); + fn_1_CF4(); + return 0; +} + +void fn_1_2A40(void) { + lbl_1_bss_30 = 0.0f; + lbl_1_bss_34 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x96000, 0x10000000U); + lbl_1_data_286 = Hu3DHookFuncCreate((void*)&fn_1_2B44); + Hu3DModelLayerSet(lbl_1_data_286, 3); +} + +void fn_1_2AC0(void) { + if (lbl_1_bss_34) { + HuMemDirectFree(lbl_1_bss_34); + lbl_1_bss_34 = NULL; + } + if (lbl_1_data_286 != -1) { + Hu3DModelKill(lbl_1_data_286); + lbl_1_data_286 = -1; + } +} + +void fn_1_2B44(void) { + Mtx44 sp50; + Mtx sp20; + GXColor sp14; + GXColor sp10; + GXColor spC; + u8 sp8; + GXColor sp1C = {0xFF, 0xFF, 0xFF, 0xFF}; + GXColor sp18 = {0xFF, 0xFF, 0xFF, 0xFF}; + + f32 temp_f28 = 0.0f; + f32 temp_f30 = 640.0f; + f32 temp_f27 = 0.0f; + f32 temp_f29 = 480.0f; + + sp18.a = __OSf32tou8(lbl_1_bss_30); + GXInvalidateTexAll(); + GXLoadTexObj(&lbl_1_bss_48, GX_TEXMAP0); + C_MTXOrtho(sp50, temp_f27, temp_f29, temp_f28, temp_f30, 0.0f, 10.0f); + GXSetProjection(sp50, GX_ORTHOGRAPHIC); + PSMTXIdentity(sp20); + GXLoadPosMtxImm(sp20, 0); + GXSetCurrentMtx(0); + GXSetViewport(0.0f, 0.0f, temp_f30, 1.0f + temp_f29, 0.0f, 1.0f); + GXSetScissor(0, 0, temp_f30, (1.0f + temp_f29)); + GXClearVtxDesc(); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetNumChans(1); + GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetChanCtrl(GX_COLOR0, 1, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_CLAMP, GX_AF_NONE); + GXSetChanCtrl(GX_ALPHA0, 0, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_NONE, GX_AF_NONE); + GXSetChanAmbColor(GX_COLOR0A0, sp18); + GXSetChanMatColor(GX_COLOR0A0, sp18); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetBlendMode(GX_BM_BLEND, GX_BL_INVDSTCLR, GX_BL_SRCALPHA, GX_LO_NOOP); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_S, GX_RGBX8, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0); + GXSetZMode(1, GX_LEQUAL, 0); + GXSetAlphaUpdate(1); + GXSetColorUpdate(1); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition2u16(temp_f28, temp_f27); + GXPosition2f32(0.0f, 0.0f); + GXPosition2u16(temp_f30, temp_f27); + GXPosition2f32(1.0f, 0.0f); + GXPosition2u16(temp_f30, temp_f29); + GXPosition2f32(1.0f, 1.0f); + GXPosition2u16(temp_f28, temp_f29); + GXPosition2f32(0.0f, 1.0f); + GXSetChanMatColor(GX_COLOR0A0, sp1C); +} \ No newline at end of file diff --git a/src/REL/w10Dll/main.c b/src/REL/w10Dll/main.c index 18ef6902..a447042d 100644 --- a/src/REL/w10Dll/main.c +++ b/src/REL/w10Dll/main.c @@ -124,9 +124,9 @@ void BoardCreate(void) { BoardModelVisibilitySet(lbl_1_bss_10[0], 0); lbl_1_bss_0->unk8 = BoardModelCreate(0x7000A, NULL, 0); BoardModelVisibilitySet(lbl_1_bss_0->unk8, 0); - BoardSpaceWalkEventFuncSet(&fn_1_90C); - BoardSpaceWalkMiniEventFuncSet(&fn_1_91C); - BoardSpaceLandEventFuncSet(&fn_1_908); + BoardSpaceWalkEventFuncSet((void*)&fn_1_90C); + BoardSpaceWalkMiniEventFuncSet((void*)&fn_1_91C); + BoardSpaceLandEventFuncSet((void*)&fn_1_908); BoardStarHostSet(lbl_1_data_2C); BoardBooHouseHostSet(lbl_1_data_32); BoardShopHostSet(lbl_1_data_2E); diff --git a/src/game/board/main.c b/src/game/board/main.c index af9e4dd8..26f11679 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -53,7 +53,7 @@ static CameraView camViewTbl[] = { extern void BoardModelPosGet(s16 model, Vec *pos); -extern void BoardSpacePosGet(s32 layer, s32 space, Vec *pos); +extern s32 BoardSpacePosGet(s32 layer, s32 space, Vec *pos); extern void BoardMGSetupPlayClear(void); extern void fn_800A6EE4(void); diff --git a/src/game/board/space.c b/src/game/board/space.c index 174090f4..5d1d899c 100644 --- a/src/game/board/space.c +++ b/src/game/board/space.c @@ -573,8 +573,8 @@ void BoardSpaceLandExec(s32 player, s32 space) if(_CheckFlag(FLAG_ID_MAKE(1, 11))) { HuAudFXPlay(842); BoardCameraViewSet(2); - BoardPlayerAnimBlendSet(player, 0, 15); - while(!BoardPlayerAnimBlendCheck(player)) { + BoardPlayerMotBlendSet(player, 0, 15); + while(!BoardPlayerMotBlendCheck(player)) { HuPrcVSleep(); } BoardCameraMotionWait();