diff --git a/config/GMPE01_00/rels/w03Dll/symbols.txt b/config/GMPE01_00/rels/w03Dll/symbols.txt index 4efe98c4..460d60e3 100644 --- a/config/GMPE01_00/rels/w03Dll/symbols.txt +++ b/config/GMPE01_00/rels/w03Dll/symbols.txt @@ -252,44 +252,44 @@ lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x8 scope:local data: lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x8 scope:local data:double lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 scope:local data:float lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 scope:local data:float -lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 data:float -lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 data:float -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 data:float -lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 data:float -lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 data:float -lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x8 data:double -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x8 data:double -lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 data:float -lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 data:float -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 data:float -lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 data:float -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 data:float -lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 data:float -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 data:float -lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 data:float -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x4 data:float -lbl_1_rodata_2FC = .rodata:0x000002FC; // type:object size:0x4 data:float -lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 data:float -lbl_1_rodata_304 = .rodata:0x00000304; // type:object size:0x4 data:float -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 data:float -lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x4 data:float -lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x8 data:double -lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 data:float -lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 data:float -lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 data:float -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 data:double -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 data:float -lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 data:float -lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 data:float -lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 data:float -lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 data:float -lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 data:float -lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 data:float -lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x8 data:double -lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 data:float -lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 data:float +lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2FC = .rodata:0x000002FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 scope:local data:float +lbl_1_rodata_304 = .rodata:0x00000304; // type:object size:0x4 scope:local data:float +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x8 scope:local data:double +lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 scope:local data:float +lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 scope:local data:float +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 scope:local data:double +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 scope:local data:float +lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 scope:local data:float +lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 scope:local data:float +lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 scope:local data:float +lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x8 scope:local data:double +lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 scope:local data:float +lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 scope:local data:float lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 scope:local data:float lbl_1_rodata_364 = .rodata:0x00000364; // type:object size:0x4 scope:local data:float lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 scope:local data:float @@ -383,13 +383,13 @@ lbl_1_data_454 = .data:0x00000454; // type:object size:0x2 data:2byte lbl_1_data_456 = .data:0x00000456; // type:object size:0x2 data:2byte lbl_1_data_458 = .data:0x00000458; // type:object size:0x2 data:2byte lbl_1_data_45C = .data:0x0000045C; // type:object size:0xC -lbl_1_data_468 = .data:0x00000468; // type:object size:0x8 +lbl_1_data_468 = .data:0x00000468; // type:object size:0x8 scope:local lbl_1_data_470 = .data:0x00000470; // type:object size:0x20 lbl_1_data_490 = .data:0x00000490; // type:object size:0x20 lbl_1_data_4B0 = .data:0x000004B0; // type:object size:0x1 data:byte lbl_1_data_4B4 = .data:0x000004B4; // type:object size:0x14 lbl_1_data_4C8 = .data:0x000004C8; // type:object size:0x6 -lbl_1_data_4CE = .data:0x000004CE; // type:object size:0xA +lbl_1_data_4CE = .data:0x000004CE; // type:object size:0xA scope:local lbl_1_data_4D8 = .data:0x000004D8; // type:object size:0x2 data:2byte lbl_1_data_4DA = .data:0x000004DA; // type:object size:0x2 data:2byte lbl_1_data_4DC = .data:0x000004DC; // type:object size:0x2 data:2byte diff --git a/configure.py b/configure.py index 4efe8efe..7881fae4 100644 --- a/configure.py +++ b/configure.py @@ -996,7 +996,7 @@ config.libs = [ Object(NonMatching, "REL/w03Dll/condor.c"), Object(Matching, "REL/w03Dll/river.c"), Object(Matching, "REL/w03Dll/smoke.c"), - Object(NonMatching, "REL/w03Dll/mg_coin.c"), + Object(Matching, "REL/w03Dll/mg_coin.c"), Object(Matching, "REL/w03Dll/mg_item.c"), } ), diff --git a/src/REL/w03Dll/mg_coin.c b/src/REL/w03Dll/mg_coin.c new file mode 100644 index 00000000..d6e5d8ce --- /dev/null +++ b/src/REL/w03Dll/mg_coin.c @@ -0,0 +1,733 @@ +#include "dolphin.h" +#include "game/object.h" +#include "REL/w03Dll.h" +#include "board_unsplit.h" +#include "game/board/main.h" +#include "game/board/player.h" + +extern u16 HuPadBtnDown[4]; +extern s16 lbl_1_bss_C[14]; + +typedef struct someBits3 { //make sure this is defined correctly + /* 0x00 */ struct { + u8 unk00_bit0 : 1; + u8 unk00_bit1 : 4; + u8 unk00_bit5 : 2; + u8 unk00_bit7 : 1; + }; + u8 unk1; + u8 unk2; + u8 unk3; + s16 unk_04; + s16 unk_06[3]; + s32 unk_0C; +} someBits3; + +typedef struct unkTemp { + s8 unk0; + u8 unk1; + s16 unk_02; + f32 unk4; + Vec unk8; +} unkTemp; + +typedef struct unkTemp2 { + /* 0x00 */ struct { + u8 unk00_bit0 : 1; + }; + char unk_01[3]; + s8 unk4; + char unk_05[3]; + f32 unk8; + unkTemp* unk_0C; +} unkTemp2; + +//function signatures +void fn_1_7C98(void); +void fn_1_7C38(void); +s32 fn_1_7D18(s32 arg0); +void fn_1_8140(s32 arg0); +void fn_1_81E0(s32 arg0); +void fn_1_8530(omObjData* arg0); +void fn_1_84A8(s32 arg0); +void fn_1_8698(omObjData* arg0, someBits3* arg1); +void fn_1_8C08(omObjData* arg0, someBits3* arg1); +void fn_1_8E44(omObjData* arg0, someBits3* arg1); +void fn_1_9044(omObjData* arg0, someBits3* arg1); +void fn_1_91B8(void); +void fn_1_9230(s32 arg0); +void fn_1_9384(void); +void fn_1_9474(s32 arg0); +void fn_1_97F8(s32 arg0); +void fn_1_9A1C(unkTemp2* arg0); + +double sin(double x); +double cos(double x); +double atan2(double y, double x); +extern s16 MGSeqCreate(s32, ...); +u8 MGSeqGetStat(s16); +float BoardModelMotionTimeGet(s16 model); +float BoardModelMotionMaxTimeGet(s16 model); +s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr); +void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2); + +//DATA +s32 lbl_1_data_450 = -1; +s16 lbl_1_data_454 = -1; +s16 lbl_1_data_456 = -1; +s16 lbl_1_data_458 = -1; +s32 lbl_1_data_45C[] = {0x00770021, 0x00770022, -1}; +char phei_str[] = "phei"; +s32 lbl_1_data_470[] = { + 0x005F0066, + 0x001A0066, + 0x006D0066, + 0x008A0066, + 0x00850066, + 0x00110066, + 0x000D0066, + 0x00810066 +}; + +s32 lbl_1_data_490[] = { + 0x005F0067, + 0x001A0067, + 0x006D0067, + 0x008A0067, + 0x00850067, + 0x00110067, + 0x000D0067, + 0x00810067 +}; + +s8 lbl_1_data_4B0 = -1; + +s32 lbl_1_data_4B4[] = { + 0x00000440, + 0x00000441, + 0x00000442, + 0x00000443, + 0x00000444 +}; + +s8 lbl_1_data_4C8[] = {1, 5, 10, 15, 20, 20}; + +//BSS +char lbl_1_bss_150[0x30]; +s16 lbl_1_bss_14E; +s8 lbl_1_bss_14C; +omObjData* lbl_1_bss_148; +omObjData* lbl_1_bss_144; +Process* lbl_1_bss_140; + + +void fn_1_7ABC(void) { + lbl_1_data_456 = BoardModelCreate(0x770020, lbl_1_data_45C, 0); + BoardModelHookSet(lbl_1_bss_C[7], phei_str, lbl_1_data_456); + BoardModelMotionStart(lbl_1_data_456, 2, 0x40000002); + BoardModelRotYSet(lbl_1_data_456, -45.0f); +} + +void fn_1_7B58(void) { + if (lbl_1_data_456 != -1) { + BoardModelKill(lbl_1_data_456); + lbl_1_data_456 = -1; + } +} + +void fn_1_7BA8(void) { + BoardDiceDigit2DShowSet(0); + lbl_1_bss_140 = HuPrcChildCreate(&fn_1_7C98, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_140, &fn_1_7C38); + while (lbl_1_bss_140) { + HuPrcVSleep(); + } + BoardDiceDigit2DShowSet(1); +} + +void fn_1_7C38(void) { + if (lbl_1_data_454 != -1) { + HuWinKill(lbl_1_data_454); + lbl_1_data_454 = -1; + } + lbl_1_bss_140 = 0; +} + +void fn_1_7C98(void) { + s32 temp_r31; + + temp_r31 = GWSystem.player_curr; + lbl_1_bss_14C = 0; + lbl_1_bss_14E = 0; + if (fn_1_7D18(temp_r31) != 0) { + fn_1_8140(temp_r31); + fn_1_9474(temp_r31); + fn_1_9230(temp_r31); + } + HuPrcEnd(); +} + +s32 fn_1_7D18(s32 arg0) { + Point3d sp38; + Point3d sp2C; + Point3d sp20; + Vec sp14; + Vec sp8; + f32 var_f31; + s16 model; + s16 space; + s16 temp_r28; + f32 arctan; + + BoardWinCreateChoice(2, 0x160015, 2, 0); + if (GWPlayer[arg0].com != 0) { + BoardComKeySetLeft(); + } + BoardWinWait(); + BoardWinKill(); + if (BoardWinChoiceGet() != 0) { + BoardWinCreate(2, 0x160018, 2); + BoardWinWait(); + BoardWinKill(); + return 0; + } + BoardAudSeqPause(0, 1, 1000); + sp14.x = 0.0f; + sp14.y = 200.0f; + sp14.z = 0.0f; + sp8.x = -10.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_C[7], &sp8, &sp14, 1500.0f, -1.0f, 0x15); + space = GWPlayer[arg0].space_curr; + temp_r28 = BoardSpaceLinkFlagSearch(0, space, 0x02000000); + BoardPlayerPosGet(arg0, &sp2C); + BoardSpacePosGet(0, temp_r28, &sp38); + PSVECSubtract(&sp38, &sp2C, &sp20); + PSVECNormalize(&sp20, &sp20); + BoardPlayerRotYSet(arg0, 180.0 * (atan2(-sp20.x, -sp20.z) / 3.141592653589793)); + HuPrcSleep(0x1E); + model = BoardModelIDGet(lbl_1_bss_C[7]); + Hu3DModelObjPosGet(model, phei_str, &sp38); + if (GWPlayer[arg0].character == 5) { + var_f31 = 54.000004f; + } else { + var_f31 = 39.0f; + } + sp38.x = sp38.x + (var_f31 * sin((3.141592653589793 * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0)); + sp38.z = sp38.z + (var_f31 * cos((3.141592653589793 * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0)); + BoardPlayerPosGet(arg0, &sp2C); + BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x14); + while (GWPlayer[arg0].moving != 0) { + BoardModelPosGet(lbl_1_bss_C[10], &sp2C); + BoardPlayerPosGet(arg0, &sp38); + PSVECSubtract(&sp38, &sp2C, &sp20); + arctan = atan2(sp20.x, sp20.z) / 3.141592653589793 * 180.0; + BoardModelRotYSet(lbl_1_bss_C[10], arctan); + HuPrcVSleep(); + } + BoardPlayerMotBlendSet(arg0, -0x2D, 7); + while (BoardPlayerMotBlendCheck(arg0) == 0) { + HuPrcVSleep(); + } + return 1; +} + +void fn_1_8140(s32 arg0) { + s16 temp_r31; + + fn_1_81E0(arg0); + BoardMusStart(1, 0x16, 0x7F, 0); + temp_r31 = MGSeqCreate(3, 0); + while (MGSeqGetStat(temp_r31)) { + HuPrcVSleep(); + } + fn_1_9384(); + fn_1_84A8(0); + while (lbl_1_bss_144) { + HuPrcVSleep(); + } + fn_1_91B8(); +} + +void fn_1_81E0(s32 arg0) { + Point3d sp8; + omObjData* temp_r3; + f32 temp_f31; + s32 temp_r28; + s32 temp_r5; + s32 temp_r5_2; + someBits3* temp_r31; + + temp_r3 = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, fn_1_8530); + lbl_1_bss_144 = temp_r3; + temp_r31 = OM_GET_WORK_PTR(temp_r3, someBits3); + temp_r31->unk00_bit0 = 0; + temp_r31->unk00_bit5 = arg0; + temp_r31->unk00_bit1 = 4; //? + temp_r31->unk1 = 0; + temp_r31->unk2 = 5; + temp_r31->unk3 = 0x3C; + temp_r31->unk_0C = -1; + lbl_1_data_450 = -1; + temp_r3->trans.x = 0.0f; + temp_r3->trans.y = 0.0f; + temp_r28 = GWPlayer[arg0].character; + temp_r31->unk_06[1] = BoardPlayerMotionCreate(arg0, lbl_1_data_470[temp_r28]); + temp_r31->unk_06[2] = BoardPlayerMotionCreate(arg0, lbl_1_data_490[temp_r28]); + temp_f31 = 0.3f; + temp_r31->unk_06[0] = BoardModelCreate(0x770009, NULL, 0); + BoardModelVisibilitySet(temp_r31->unk_06[0], 0); + BoardPlayerPosGet(arg0, &sp8); + BoardModelPosSetV(temp_r31->unk_06[0], &sp8); + BoardModelScaleSet(temp_r31->unk_06[0], temp_f31, temp_f31, temp_f31); + BoardModelMotionStart(temp_r31->unk_06[0], 0, 0x40000001); + BoardModelMotionStart(lbl_1_data_456, 0, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_data_456, temp_r3->trans.x); + BoardPlayerMotionStart(arg0, temp_r31->unk_06[1], 0x40000001); + BoardPlayerMotionSpeedSet(arg0, temp_r3->trans.x); + lbl_1_data_458 = BoardModelMotionCreate(lbl_1_bss_C[10], 0x770025); +} + +void fn_1_8434(someBits3* arg0) { + if (arg0->unk_06[1] != -1) { + BoardPlayerMotionKill(arg0->unk00_bit5, arg0->unk_06[1]); + } + if (arg0->unk_06[2] != -1) { + BoardPlayerMotionKill(arg0->unk00_bit5, arg0->unk_06[2]); + } + if (arg0->unk_06[0] != -1) { + BoardModelKill(arg0->unk_06[0]); + } +} + +void fn_1_84A8(s32 arg0) { + someBits3* temp_r31; + + if (lbl_1_bss_144) { + temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_144, someBits3); + temp_r31->unk00_bit1 = arg0; + if (arg0 == 0) { + temp_r31->unk_04 = MGSeqCreate(1, temp_r31->unk2, 0x120, 0x40); + } + } +} + +void fn_1_8530(omObjData* arg0) { + s32 temp_r0; + someBits3* temp_r31; + + temp_r31 = OM_GET_WORK_PTR(arg0, someBits3); + + if ((temp_r31->unk00_bit0 != 0) || (BoardIsKill() != 0)) { + if (temp_r31->unk_04 != -1) { + MGSeqSetParam(temp_r31->unk_04, 2, -1); + } + if (temp_r31->unk_06[1] != -1) { + BoardPlayerMotionKill(temp_r31->unk00_bit5, temp_r31->unk_06[1]); + } + if (temp_r31->unk_06[2] != -1) { + BoardPlayerMotionKill(temp_r31->unk00_bit5, temp_r31->unk_06[2]); + } + if (temp_r31->unk_06[0] != -1) { + BoardModelKill(temp_r31->unk_06[0]); + } + lbl_1_bss_144 = NULL; + + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r31->unk1 != 0) { + temp_r31->unk1--; + return; + } + switch (temp_r31->unk00_bit1) { + case 0: + fn_1_8698(arg0, temp_r31); + return; + case 1: + fn_1_8C08(arg0, temp_r31); + return; + case 2: + fn_1_8E44(arg0, temp_r31); + return; + case 3: + fn_1_9044(arg0, temp_r31); + /* fallthrough */ + case 4: + break; + } +} + +void fn_1_8698(omObjData* arg0, someBits3* arg1) { + s32 temp_r27; + u32 var_r28; + u32 var_r26; + f32 temp; + Vec sp8; + + if (arg1->unk3 != 0) { + arg1->unk3--; + } else { + if (arg1->unk2 != 0) { + arg1->unk2--; + } else { + MGSeqSetParam(arg1->unk_04, 2, -1); + arg1->unk_04 = -1; + arg1->unk00_bit1 = 1; + temp = BoardModelMotionTimeGet(lbl_1_bss_C[7]); + if (temp == 0.0f) { + temp = 1.0f; + } + if (lbl_1_bss_14E > 30) { + lbl_1_bss_14E = 30; + } + //temp2 = + OSu16tof32((u16*)&lbl_1_bss_14E, &arg0->rot.x); //?? + BoardModelAttrReset(lbl_1_data_456, 0x40000002); + BoardModelAttrReset(lbl_1_bss_C[7], 0x40000002); + BoardModelAttrReset(lbl_1_bss_C[10], 0x40000002); + BoardPlayerModelAttrReset(arg1->unk00_bit5, 0x40000002); + BoardModelMotionStart(lbl_1_data_456, 1, 0x40000001); + BoardModelMotionStart(lbl_1_bss_C[7], 0, 0); + BoardModelMotionStart(lbl_1_bss_C[10], lbl_1_data_458, 0); + BoardPlayerMotionStart(arg1->unk00_bit5, arg1->unk_06[2], 0); + BoardModelVisibilitySet(arg1->unk_06[0], 0); + arg1->unk_0C = HuAudFXPlay(0x43F); + BoardModelPosGet(lbl_1_data_456, &sp8); + arg0->trans.z = sp8.y; + arg0->rot.y = 16.666666f * arg0->rot.x; + arg0->scale.x = BoardModelMotionMaxTimeGet(lbl_1_bss_C[7]); + HuWinDispOff(lbl_1_data_454); + BoardCameraMotionStartEx(-1, 0, 0, 1900.0f, -1.0f, 0x15); + return; + } + MGSeqSetParam(arg1->unk_04, 1, arg1->unk2); + arg1->unk3 = 60; + } + + + var_r26 = GWPlayer[arg1->unk00_bit5].port; + var_r28 = 0; + if ((GWPlayer[arg1->unk00_bit5].com) != 0) { + temp_r27 = BoardRandMod(100); + switch (GWPlayer[arg1->unk00_bit5].diff) { + case 0: + if (temp_r27 < 12) { + var_r28 = 0x100; + } + break; + case 1: + if (temp_r27 < 22) { + var_r28 = 0x100; + } + break; + case 2: + if (temp_r27 < 50) { + var_r28 = 0x100; + } + break; + case 3: + var_r28 = 0x100; + break; + } + } else { + var_r28 = HuPadBtnDown[var_r26] & 0x100; + } + if ((var_r28 & 0x100)) { + arg0->trans.y += 0.5f; + if (arg0->trans.y > 2.0f) { + arg0->trans.y = 2.0f; + } + if (lbl_1_data_450 == -1) { + lbl_1_data_450 = HuAudFXPlay(0x43E); + } + lbl_1_bss_14E += 1; + BoardModelVisibilitySet(arg1->unk_06[0], 1); + BoardModelRotYSet(arg1->unk_06[0], BoardPlayerRotYGet(arg1->unk00_bit5)); + } else { + arg0->trans.x *= 0.98f; + arg0->trans.y = 0.0f; + if (arg0->trans.x <= 1.0f) { + BoardModelVisibilitySet(arg1->unk_06[0], 0); + if (lbl_1_data_450 != -1) { + HuAudFXStop(lbl_1_data_450); + lbl_1_data_450 = -1; + } + } + } + if ((lbl_1_data_450 != -1) && (HuAudFXStatusGet(lbl_1_data_450) == 0)) { + lbl_1_data_450 = -1; + } + arg0->trans.x += arg0->trans.y; + if (arg0->trans.x > 3.0f) { + arg0->trans.x = 3.0f; + } + BoardPlayerMotionSpeedSet(arg1->unk00_bit5, arg0->trans.x); + BoardModelMotionSpeedSet(lbl_1_data_456, arg0->trans.x); +} + +void fn_1_8C08(omObjData* arg0, someBits3* arg1) { + Point3d spC; + f32 temp_f31; + f32 temp_f30; + s8 temp_r27; + + BoardModelPosGet(lbl_1_data_456, &spC); + spC.y += 1.6666666f; + if (spC.y >= (arg0->trans.z + arg0->rot.y)) { + spC.y = arg0->trans.z + arg0->rot.y; + BoardModelMotionSpeedSet(lbl_1_bss_C[10], 0.0f); + BoardPlayerMotionSpeedSet(arg1->unk00_bit5, 0.0f); + BoardModelAttrSet(lbl_1_bss_C[7], 0x40000002); + BoardModelAttrSet(lbl_1_data_456, 0x40000002); + arg1->unk00_bit1 = 2; + arg1->unk1 = 0x3C; + arg1->unk2 = 0; + } + BoardModelPosSetV(lbl_1_data_456, &spC); + temp_f30 = arg0->scale.x * ((spC.y - arg0->trans.z) / 500.0f); + OSf32tos8(&temp_f30, &temp_r27); + temp_r27 = temp_r27 / 30; + if (lbl_1_data_4B0 != temp_r27) { + lbl_1_data_4B0 = temp_r27; + HuAudFXPlay(lbl_1_data_4B4[temp_r27]); + } + BoardModelMotionTimeSet(lbl_1_bss_C[7], temp_f30); + BoardModelMotionTimeSet(lbl_1_bss_C[10], 0.2f * temp_f30); + BoardPlayerMotionTimeSet(arg1->unk00_bit5, 2.0f * temp_f30); +} + +void fn_1_8E44(omObjData* arg0, someBits3* arg1) { + Point3d sp8; + f32 temp_f1; + f32 temp_f31; + + if (arg1->unk00_bit7 == 0) { + HuAudFXPlay(0x448); + arg1->unk00_bit7 = 1; + if (arg1->unk_0C != -1) { + HuAudFXStop(arg1->unk_0C); + arg1->unk_0C = -1; + } + BoardAudSeqFadeOut(1, 0x3E8); + } + OSu8tof32(&arg1->unk2, &temp_f31); + BoardModelPosGet(lbl_1_data_456, &sp8); + sp8.y = (sp8.y + (-0.08166666666666668 * temp_f31 * temp_f31)); + if (sp8.y < arg0->trans.z) { + sp8.y = arg0->trans.z; + arg1->unk00_bit1 = 3; + arg0->trans.x = arg0->rot.y / 20.0f; + arg0->trans.y = 0.0f; + arg0->trans.z = 24.0f; + BoardModelAttrReset(lbl_1_bss_C[10], 0x40000003); + BoardModelMotionSpeedSet(lbl_1_bss_C[10], -2.0f); + BoardPlayerModelAttrReset(arg1->unk00_bit5, 0x40000003); + BoardPlayerMotionSpeedSet(arg1->unk00_bit5, -2.0f); + HuAudFXPlay(0x449); + BoardAudSeqPause(0, 0, 0x3E8); + } + arg1->unk2 += 1; + BoardModelPosSetV(lbl_1_data_456, &sp8); +} + +void fn_1_9044(omObjData* arg0, someBits3* arg1) { + Vec sp8; + + BoardModelRotGet(lbl_1_data_456, &sp8); + arg0->trans.y = BoardDAngleCalc(arg0->trans.y + arg0->trans.z); + if (arg0->trans.y <= 2.0f) { + if (arg0->trans.y >= -2.0) { + arg0->trans.x *= 0.5f; + if (arg0->trans.x <= 1.0f) { + arg0->trans.y = 0.0f; + BoardRotateDiceNumbers(arg1->unk00_bit5); + BoardModelMotionShiftSet(lbl_1_bss_C[10], 1, 0.0f, 10.0f, 0x40000001U); + arg1->unk00_bit0 = 1; + } + } + } + sp8.z = arg0->trans.x * sin((3.141592653589793 * arg0->trans.y) / 180.0); + BoardModelRotSetV(lbl_1_data_456, &sp8); +} + +void fn_1_91B8(void) { + s8 temp_r3; + + if (lbl_1_bss_14E == 0) { + lbl_1_bss_14E = 1; + } + temp_r3 = lbl_1_bss_14E / 6; + lbl_1_bss_14C = lbl_1_data_4C8[temp_r3]; +} + +void fn_1_9230(s32 arg0) { + Point3d sp20; + Point3d sp14; + Point3d sp8; + s16 temp_r30; + f32 rotY; + + temp_r30 = GWPlayer[arg0].space_curr; + BoardPlayerPosGet(arg0, &sp20); + BoardSpacePosGet(0, temp_r30, &sp14); + BoardCameraTargetPlayerSet(arg0); + BoardCameraViewSet(1); + BoardPlayerPosLerpStart(arg0, &sp20, &sp14, 0x14); + while (GWPlayer[arg0].moving != 0) { + BoardModelPosGet(lbl_1_bss_C[10], &sp20); + BoardPlayerPosGet(arg0, &sp14); + PSVECSubtract(&sp14, &sp20, &sp8); + rotY = atan2(sp8.x, sp8.z) / 3.141592653589793 * 180.0; + BoardModelRotYSet(lbl_1_bss_C[10], rotY); + HuPrcVSleep(); + } + BoardModelRotYSet(lbl_1_bss_C[10], 0.0f); + BoardCameraMotionWait(); +} + +void fn_1_9384(void) { + f32 widthHeight[2]; + f32 x, y; + + HuWinMesMaxSizeGet(1, widthHeight, 0x160019); + x = -10000.0f; + y = 288.0f; + lbl_1_data_454 = HuWinCreate(x, y, widthHeight[0], widthHeight[1], 0); + HuWinBGTPLvlSet(lbl_1_data_454, 0.0f); + HuWinMesSpeedSet(lbl_1_data_454, 0); + HuWinMesSet(lbl_1_data_454, 0x160019U); +} + +void fn_1_9474(s32 arg0) { + sprintf(lbl_1_bss_150, "%d", lbl_1_bss_14C); + BoardWinCreate(2, 0x160017U, 2); + BoardWinInsertMesSet((u32)lbl_1_bss_150, 4); + BoardWinWait(); + BoardWinKill(); + BoardPlayerMotBlendSet(arg0, 0, 0xF); + while (BoardPlayerMotBlendCheck(arg0) == 0) { + HuPrcVSleep(); + } + fn_1_97F8(arg0); + while (lbl_1_bss_148) { + HuPrcVSleep(); + } + BoardPlayerMotionShiftSet(arg0, 7, 0.0f, 8.0f, 0U); + HuPrcSleep(8); + while (BoardPlayerMotionEndCheck(arg0) == 0) { + HuPrcVSleep(); + } + BoardWinCreate(2, 0x160018U, 2); + BoardWinWait(); + BoardWinKill(); + BoardModelMotionStart(lbl_1_bss_C[7], 0, 0x40000002); +} + +void fn_1_95B8(omObjData* arg0) { + f32 temp_f31; + s32 var_r25; + s32 var_r26; + s32 var_r27; + s32 var_r28; + unkTemp* var_r30; + unkTemp2* temp_r29; + s32 i; + s32 temp; + + temp_r29 = OM_GET_WORK_PTR(arg0, unkTemp2); + if ((temp_r29->unk00_bit0 != 0) || (BoardIsKill() != 0)) { + fn_1_9A1C(temp_r29); + HuMemDirectFree((void*)temp_r29->unk_0C); + lbl_1_bss_148 = 0; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + var_r30 = temp_r29->unk_0C; + + for (var_r27 = i = 0; i < 20; i++, var_r30++) { + if (var_r30->unk0 == 0) { + var_r27++; + } + } + + if (var_r27 == 20) { + temp_r29->unk00_bit0 = 1; + return; + } + var_r25 = 0; + for (i = 0; i < 20; i++) { + var_r30 = &temp_r29->unk_0C[i]; + if ((var_r30->unk0 == 1) && (var_r25 == 0)) { + var_r30->unk0 = 2U; + var_r25 = 1; + } + if (var_r30->unk0 == 2) { + var_r30->unk1++; + OSu8tof32(&var_r30->unk1, &temp_f31); + var_r30->unk4 += 45.0f; + var_r30->unk8.y += -0.08166667f * temp_f31 * temp_f31 * 0.75f; + if (var_r30->unk8.y < temp_r29->unk8) { + var_r30->unk8.y = temp_r29->unk8; + CharModelCreateCoinParticle(1, &var_r30->unk8); + BoardModelVisibilitySet(var_r30->unk_02, 0); + HuAudFXPlay(7); + BoardPlayerCoinsAdd(temp_r29->unk4, 1); + omVibrate(temp_r29->unk4, 0xC, 6, 6); + var_r30->unk0 = 0; + } + BoardModelPosSetV(var_r30->unk_02, &var_r30->unk8); + BoardModelRotYSet(var_r30->unk_02, var_r30->unk4); + } + } +} + + +void fn_1_97F8(s32 arg0) { + Point3d sp8; + f32 temp_f2; + f32 var_f31; + f64 temp_f1; + omObjData* temp_r3; + s32 i; + unkTemp2* temp_r30; + unkTemp* temp_r31; + + temp_r3 = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, fn_1_95B8); + lbl_1_bss_148 = temp_r3; + temp_r30 = OM_GET_WORK_PTR(temp_r3, unkTemp2); + temp_r30->unk00_bit0 = 0; + temp_r30->unk4 = arg0; + temp_r30->unk_0C = HuMemDirectMallocNum(0, 0x190, 0x10000000); + BoardPlayerPosGet(arg0, &sp8); + temp_r30->unk8 = (80.0f + sp8.y); + memset(temp_r30->unk_0C, 0, 0x190); + for (i = 0; i < lbl_1_bss_14C; i++) { + if (i == 0) { + var_f31 = 0.0f; + } else { + var_f31 = BoardRandFloat(); + } + temp_r31 = &temp_r30->unk_0C[i]; + temp_r31->unk0 = 1; + temp_r31->unk8.x = sp8.x + (50.0f * sin((3.141592653589793 * var_f31) / 180.0)); + temp_r31->unk8.z = sp8.z + (50.0f * cos((3.141592653589793 * var_f31) / 180.0)); + temp_r31->unk8.y = 600.0f + sp8.y + (500.0f * BoardRandFloat()); + temp_r31->unk1 = 0; + temp_r31->unk4 = BoardRandFloat() * 360.0f; + temp_r31->unk_02 = BoardModelCreate(0x7000A, NULL, 1); + } +} + +void fn_1_9A1C(unkTemp2* arg0) { + s32 i; + unkTemp* temp; + + for (i = 0; i < 20; i++) { + temp = &arg0->unk_0C[i]; + BoardModelKill(temp->unk_02); + } +} + +char mg_pad[] = "\0\0\0\0\0\0"; \ No newline at end of file