#include "game/board/boo_house.h" #include "game/msm.h" #include "game/hsfdraw.h" #include "game/gamework_data.h" #include "game/board/player.h" #include "game/board/model.h" #include "game/board/com.h" #include "game/board/boo.h" #include "game/board/ui.h" #include "game/board/view.h" #include "game/board/audio.h" #include "game/board/main.h" #include "game/board/star.h" #include "game/board/player.h" #include "game/board/window.h" #include "ext_math.h" // bss 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 }, }; 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 }, }; 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 } }; // sbss static s8 currPlayer; static s8 stealTarget; static s8 comStarStealTarget; static s32 comCoinStealTarget; static s8 stealAmountStr[8]; static Process* houseProc; // sdata static s16 houseShowMot = 0xFFFF; static s16 houseHideMot = 0xFFFF; static s16 ballMdl = 0xFFFF; static s16 booMdl = 0xFFFF; static s16 lbl_801D37F8 = 0xFFFF; static s16 hostMdl = 0xFFFF; static s16 houseMot[3] = { 0xFFFF, 0xFFFF, 0xFFFF }; // determined functions static void ExecBooHouse(void); static void DestroyBooHouse(void); static void PickComStealType(s32); static void OpenBooHouse(void); static void CloseBooHouse(void); static void CreateBooHouseModel(void); static void KillBooHouseModel(void); static void ExecNullSteal(void); static void ExecStarSteal(void); static void ExecCoinSteal(void); static void ApplySteal(void); static void ApplyCoinSteal(s16 arg0, s16 arg1); static void ApplyStarSteal(void); static void ApplyBooLight(void); static void SetBooBallPos(void); // FUNCTIONS // void BoardBooHouseHostSet(s16 arg0) { hostMdl = arg0; } s16 BoardBooHouseHostGet(void) { return hostMdl; } void BoardBooHouseCreate(void) { Vec sp14; Vec sp8; if ((GWBoardGet() == BOARD_ID_EXTRA1) || (GWBoardGet() == BOARD_ID_EXTRA2)) { return; } BoardSpaceLinkTransformGet(0x08000000, &sp14, &sp8, 0); houseMdl[0] = BoardModelCreateParam(&houseMdlTbl[0], &sp14, &sp8); if (hostMdl != -1) { BoardModelVisibilitySet(hostMdl, 0); } HuDataDirClose(0x90000); } void BoardBooHouseKill(void) { if (houseMdl[0] != -1) { BoardModelKill(houseMdl[0]); houseMdl[0] = -1; } } void BoardBooHouseExec(s32 arg0) { currPlayer = arg0; if (BoardPlayerSizeGet(currPlayer) != 2) { BoardRollDispSet(0); houseProc = HuPrcChildCreate(&ExecBooHouse, 0x2003, 0x3800, 0, boardMainProc); HuPrcDestructorSet2(houseProc, &DestroyBooHouse); while (houseProc != 0U) { HuPrcVSleep(); } BoardRollDispSet(1); } } static void ExecBooHouse(void) { Vec sp38; Vec sp2C; Vec sp20; Vec sp14; Vec sp8; float temp_f31; s16 temp_r29; s32 var_r31; s16 var_r30; s32 var_r28; s32 var_r27; s32 var_r26; _SetFlag(0x10018); var_r28 = BoardDataDirReadAsync(0x90000); var_r30 = GWPlayer[currPlayer].space_curr; BoardPlayerIdleSet(currPlayer); if (BoardPlayerCoinsGet(currPlayer) < 5) { BoardWinCreate(0, 0x70001, -1); BoardWinWait(); BoardWinKill(); BoardDataAsyncWait(var_r28); HuPrcEnd(); } BoardWinCreateChoice(0, 0x70000, -1, 0); if (GWPlayer[currPlayer].com != 0) { if (BoardBooComUseCheck(currPlayer) != 0) { BoardComKeySetLeft(); } else { BoardComKeySetRight(); } } BoardWinWait(); if (BoardWinChoiceGet() != 0) { BoardDataAsyncWait(var_r28); HuPrcEnd(); } for (var_r26 = var_r31 = 0; var_r31 < 4; var_r31++) { if (currPlayer != var_r31) { var_r26 += GWStarsGet(var_r31); } } for (var_r27 = var_r31 = 0; var_r31 < 4; var_r31++) { if (currPlayer != var_r31) { var_r27 += BoardPlayerCoinsGet(var_r31); } } BoardWinKill(); BoardRollDispSet(0); BoardAudSeqPause(0, 1, 0x3E8); BoardDataAsyncWait(var_r28); temp_r29 = BoardSpaceLinkFlagSearch(0, var_r30, 0x02000000); BoardSpacePosGet(0, var_r30, &sp38); BoardSpacePosGet(0, temp_r29, &sp2C); PSVECSubtract(&sp2C, &sp38, &sp20); PSVECNormalize(&sp20, &sp20); temp_f31 = atan2d(-sp20.x, -sp20.z); sp14.x = -15.0f; sp14.y = temp_f31; sp14.z = 0.0f; sp8.x = 0.0f; sp8.y = 150.0f; sp8.z = 0.0f; BoardCameraMotionStartEx(houseMdl[0], &sp14, &sp8, 1370.0f, -1.0f, 0x1B); CreateBooHouseModel(); OpenBooHouse(); BoardPlayerRotSet(currPlayer, 0.0f, temp_f31, 0.0f); BoardPlayerMoveBetween(currPlayer, var_r30, temp_r29); BoardPlayerIdleSet(currPlayer); BoardMusStart(1, 1, 0x7F, 0); BoardModelMotionShiftSet(BoardBooHouseHostGet(), houseMot[0], 0.0f, 10.0f, 0x40000001); BoardWinCreate(2, hostMesTbl[GWBoardGet()][0], BoardWinPortraitGet()); BoardWinWait(); repeatWindowView: HuAudFXPlay(0x4C); BoardWinCreateChoice(1, hostMesTbl[GWBoardGet()][1], BoardWinPortraitGet(), 0); if (var_r27 == 0) { BoardWinChoiceDisable(0); } if ((BoardPlayerCoinsGet(currPlayer) < 0x32) || (var_r26 == 0)) { BoardWinChoiceDisable(1); } BoardWinAttrSet(0x10); if (GWPlayer[currPlayer].com != 0) { PickComStealType(currPlayer); } BoardWinWait(); stealTarget = BoardWinChoiceGet(); BoardWinKill(); while (BoardStatusStopCheck(currPlayer) == 0) { HuPrcVSleep(); } switch (stealTarget) { case 0: ExecCoinSteal(); break; case 1: ExecStarSteal(); break; case 2: ExecNullSteal(); break; case 3: BoardViewMapExec(currPlayer); goto repeatWindowView; } if (stealTarget != 2) { ApplySteal(); BoardStatusShowSet(currPlayer, 0); HuPrcVSleep(); } BoardModelMotionShiftSet(BoardBooHouseHostGet(), houseMot[1], 0.0f, 10.0f, 0x40000001); CloseBooHouse(); BoardCameraViewSet(1); BoardCameraRotSet(0.0f, 0.0f); BoardCameraTargetPlayerSet(currPlayer); BoardAudSeqPause(0, 0, 0x3E8); BoardPlayerRotSet(currPlayer, 0.0f, temp_f31, 0.0f); BoardPlayerMoveBetween(currPlayer, temp_r29, var_r30); KillBooHouseModel(); BoardStatusShowSetAll(1); BoardPlayerIdleSet(currPlayer); HuPrcEnd(); } static void DestroyBooHouse(void) { s32 var_r31; for (var_r31 = 0; var_r31 < 3; var_r31++) { if (houseMot[var_r31] != -1) { BoardModelMotionKill(BoardBooHouseHostGet(), houseMot[var_r31]); houseMot[var_r31] = -1; } } if (houseShowMot != -1) { BoardModelMotionKill(houseMdl[0], houseShowMot); houseShowMot = -1; } if (houseHideMot != -1) { BoardModelMotionKill(houseMdl[1], houseHideMot); houseHideMot = -1; } BoardWinKill(); KillBooHouseModel(); HuDataDirClose(0x90000); _ClearFlag(0x10018); houseProc = 0; } static void PickComStealType(s32 arg0) { s32 var_r31; s32 var_r30; s32 var_r28; var_r30 = var_r28 = 0; for (var_r31 = 0; var_r31 < 4; var_r31++) { if (var_r31 != arg0) { var_r30 += BoardPlayerCoinsGet(var_r31); var_r28 += GWStarsGet(var_r31); } } if (BoardPlayerCoinsGet(arg0) >= 0x32) { for (var_r31 = 0; var_r31 < 4; var_r31++) { if ((var_r31 != arg0) && (GWStarsGet(var_r31) != 0) && (((s32) GWSystem.team == 0) || (var_r31 != BoardPlayerSameTeamFind(arg0)))) { if (var_r30 != 0) { BoardComKeySetDown(); } else { BoardComKeySetUp(); } return; } } } BoardComKeySetUp(); } static void OpenBooHouse(void) { s16 temp_r31; s32 temp_r5; s32 var_r30; ballMdl = BoardBooCreate(currPlayer, 0); temp_r31 = BoardBooHouseHostGet(); BoardModelMotionStart(temp_r31, 1, 0x40000001); for (var_r30 = 0; var_r30 < 3; var_r30++) { houseMot[var_r30] = BoardModelMotionCreate(temp_r31, houseMotTbl[GWBoardGet()][var_r30]); } BoardModelMotionStart(temp_r31, houseMot[0], 0x40000001); BoardModelVisibilitySet(temp_r31, 1); HuAudFXPlay(0x337); HuAudFXPlay(0x344); BoardModelMotionStart(houseMdl[0], 0, 0); BoardModelMotionSpeedSet(houseMdl[0], 1.0f); BoardModelHookSet(houseMdl[0], "yoko01", houseMdl[1]); BoardModelHookSet(houseMdl[0], "yoko02", ballMdl); BoardModelHookSet(houseMdl[0], "yoko03", houseMdl[2]); BoardModelHookSet(houseMdl[0], "yoko04", houseMdl[3]); BoardModelHookSet(houseMdl[0], "yoko05", houseMdl[4]); BoardModelHookSet(houseMdl[0], "yoko9", houseMdl[5]); BoardModelHookSet(houseMdl[0], "yoko06", temp_r31); if (GWBoardGet() == BOARD_ID_MAIN6) { BoardModelPosSet(temp_r31, 0.0f, 0.0f, -25.0f); } else { BoardModelPosSet(temp_r31, 0.0f, 0.0f, 0.0f); } BoardModelMotionStart(houseMdl[3], 0, 0x40000001); BoardModelMotionStart(houseMdl[4], 0, 0x40000001); booMdl = BoardModelCreate(0x20012, booMotTbl, 0); BoardModelMotionStart(booMdl, 1, 0x40000001); BoardModelVisibilitySet(booMdl, 1); BoardModelHookSet(houseMdl[0], "yoko8", booMdl); lbl_801D37F8 = BoardModelCreate(0x90008, NULL, 0); BoardModelVisibilitySet(lbl_801D37F8, 0); BoardModelLayerSet(lbl_801D37F8, 2); BoardModelMotionStart(houseMdl[1], 0, 0x40000001); while (BoardModelMotionTimeGet(houseMdl[0]) < 90.0f) { HuPrcVSleep(); } BoardModelMotionShiftSet(houseMdl[0], houseShowMot, 0.0f, 10.0f, 0x40000001); BoardModelMotionShiftSet(houseMdl[1], houseHideMot, 0.0f, 10.0f, 0x40000001); BoardModelHookObjReset(houseMdl[0], "yoko02"); SetBooBallPos(); BoardModelMotionShiftSet(BoardBooHouseHostGet(), houseMot[2], 0.0f, 10.0f, 0); } static void CloseBooHouse(void) { BoardModelPosSet(ballMdl, 0.0f, 0.0f, 0.0f); BoardModelHookSet(houseMdl[0], "yoko02", ballMdl); BoardModelMotionShiftSet(houseMdl[1], 0, 90.0f, 10.0f, 0); BoardModelMotionShiftSet(houseMdl[0], 0, 90.0f, 10.0f, 0); HuPrcSleep(0xA); while (BoardModelMotionShiftIDGet(houseMdl[0]) != -1) { HuPrcVSleep(); } while (BoardModelMotionTimeGet(houseMdl[0]) < 165.0f) { HuPrcVSleep(); } HuAudFXPlay(0x336); BoardAudSeqFadeOut(1, 0x3E8); while (BoardModelMotionEndCheck(houseMdl[0]) == 0) { HuPrcVSleep(); } BoardModelHookReset(houseMdl[0]); BoardBooKill(); ballMdl = -1; } static void CreateBooHouseModel(void) { s32 var_r31; for (var_r31 = 0; var_r31 < 6; var_r31++) { if (var_r31 != 0) { houseMdl[var_r31] = BoardModelCreateParam(&houseMdlTbl[var_r31], 0, 0); } } houseShowMot = BoardModelMotionCreate(houseMdl[0], 0x90009); houseHideMot = BoardModelMotionCreate(houseMdl[1], 0x9000A); } static void KillBooHouseModel(void) { s32 temp_r4; s32 var_r31; for (var_r31 = 1; var_r31 < 6; var_r31++) { if (houseMdl[var_r31] != -1) { BoardModelKill(houseMdl[var_r31]); houseMdl[var_r31] = -1; } } if (booMdl != -1) { BoardModelKill(booMdl); booMdl = -1; } if (lbl_801D37F8 != -1) { BoardModelKill(lbl_801D37F8); lbl_801D37F8 = -1; } BoardModelVisibilitySet(BoardBooHouseHostGet(), 0); } static void ExecNullSteal(void) { HuAudFXPlay(0x4C); BoardWinCreate(2, hostMesTbl[GWBoardGet()][5], BoardWinPortraitGet()); BoardWinWait(); BoardWinKill(); } static void ExecStarSteal(void) { Vec sp14; Vec sp8; s32 temp_r29; s32 var_r30; s32 var_r31; for (var_r30 = 0; var_r30 < 0x32; var_r30++) { BoardPlayerCoinsAdd(currPlayer, -1); HuAudFXPlay(0xE); HuPrcSleep(1); } HuAudFXPlay(0xF); BoardBooStealTypeSet(1); BoardWinCreate(2, hostMesTbl[GWBoardGet()][3], BoardWinPortraitGet()); BoardWinWait(); BoardWinKill(); BoardStatusShowSetAll(0); while (BoardPickerDoneCheck() == 0) { HuPrcVSleep(); } HuAudFXPlay(0x4C); Hu3DModelObjPosGet(BoardModelIDGet(houseMdl[0]), "yoko8", &sp14); sp14.y += 20.0f; BoardModelMotionStart(lbl_801D37F8, 0, 0); BoardModelVisibilitySet(lbl_801D37F8, 1); BoardModelPosSetV(lbl_801D37F8, &sp14); HuPrcSleep(5); for (var_r31 = 0xFF; var_r31 > 0; var_r31 -= 0x33) { if (var_r31 < 0) { var_r31 = 0; } BoardModelAlphaSet(booMdl, var_r31); HuPrcVSleep(); } BoardModelVisibilitySet(booMdl, 0); while (BoardModelMotionEndCheck(lbl_801D37F8) == 0) { HuPrcVSleep(); } BoardModelVisibilitySet(lbl_801D37F8, 0); BoardCameraMotionStartEx(ballMdl, NULL, NULL, 325.0f, -1.0f, 0x15); temp_r29 = BoardBooStealMain(); sp8.x = 0.0f; sp8.y = 150.0f; sp8.z = 0.0f; BoardCameraMotionStartEx(houseMdl[0], NULL, &sp8, 1370.0f, -1.0f, 0x15); BoardCameraMotionWait(); if (temp_r29 == 0) { BoardModelMotionStart(booMdl, 2, 0x40000001); } BoardModelMotionStart(lbl_801D37F8, 0, 0); BoardModelVisibilitySet(lbl_801D37F8, 1); HuPrcSleep(0xB); BoardModelVisibilitySet(booMdl, 1); for (var_r31 = 0; var_r31 < 0xFF; var_r31 += 0x33) { if (var_r31 > 0xFF) { var_r31 = 0xFF; } BoardModelAlphaSet(booMdl, var_r31); HuPrcVSleep(); } BoardModelAlphaSet(booMdl, -1); while (BoardModelMotionEndCheck(lbl_801D37F8) == 0) { HuPrcVSleep(); } BoardModelVisibilitySet(lbl_801D37F8, 0); } static void ExecCoinSteal(void) { Vec sp14; Vec sp8; s32 temp_r29; s32 var_r30; s32 var_r31; for (var_r30 = 0; var_r30 < 5; var_r30++) { BoardPlayerCoinsAdd(currPlayer, -1); HuAudFXPlay(0xE); HuPrcSleep(6); } HuAudFXPlay(0xF); BoardBooStealTypeSet(0); BoardWinCreate(2, hostMesTbl[GWBoardGet()][3], BoardWinPortraitGet()); BoardWinWait(); BoardWinKill(); BoardStatusShowSetAll(0); while (BoardPickerDoneCheck() == 0) { HuPrcVSleep(); } HuAudFXPlay(0x4C); Hu3DModelObjPosGet(BoardModelIDGet(houseMdl[0]), "yoko8", &sp14); sp14.y += 20.0f; BoardModelMotionStart(lbl_801D37F8, 0, 0); BoardModelVisibilitySet(lbl_801D37F8, 1); BoardModelPosSetV(lbl_801D37F8, &sp14); HuPrcSleep(5); for (var_r31 = 0xFF; var_r31 > 0; var_r31 -= 0x33) { if (var_r31 < 0) { var_r31 = 0; } BoardModelAlphaSet(booMdl, var_r31); HuPrcVSleep(); } BoardModelVisibilitySet(booMdl, 0); while (BoardModelMotionEndCheck(lbl_801D37F8) == 0) { HuPrcVSleep(); } BoardModelVisibilitySet(lbl_801D37F8, 0); BoardCameraMotionStartEx(ballMdl, NULL, NULL, 325.0f, -1.0f, 0x15); temp_r29 = BoardBooStealMain(); sp8.x = 0.0f; sp8.y = 150.0f; sp8.z = 0.0f; BoardCameraMotionStartEx(houseMdl[0], NULL, &sp8, 1370.0f, -1.0f, 0x15); BoardCameraMotionWait(); if (temp_r29 == 0) { BoardModelMotionStart(booMdl, 2, 0x40000001); } BoardModelMotionStart(lbl_801D37F8, 0, 0); BoardModelVisibilitySet(lbl_801D37F8, 1); HuPrcSleep(0xB); BoardModelVisibilitySet(booMdl, 1); for (var_r31 = 0; var_r31 < 0xFF; var_r31 += 0x33) { if (var_r31 > 0xFF) { var_r31 = 0xFF; } BoardModelAlphaSet(booMdl, var_r31); HuPrcVSleep(); } BoardModelAlphaSet(booMdl, -1); while (BoardModelMotionEndCheck(lbl_801D37F8) == 0) { HuPrcVSleep(); } BoardModelVisibilitySet(lbl_801D37F8, 0); } void ApplySteal(void) { s16 spA; s16 sp8; s32 temp_r30; s32 temp_r6; s32 var_r31; float var_f31; BoardModelHookSet(houseMdl[0], "yoko8", booMdl); BoardModelVisibilitySet(booMdl, 1); BoardModelPosSet(booMdl, 0.0f, 0.0f, 0.0f); BoardModelRotSet(booMdl, 0.0f, 0.0f, 0.0f); BoardModelScaleSet(booMdl, 1.0f, 1.0f, 1.0f); BoardModelAlphaSet(booMdl, 0xFF); var_f31 = BoardDAngleCalc(180.0f + BoardPlayerRotYGet(currPlayer)); BoardPlayerMotBlendSet(currPlayer, var_f31, 0xF); while (BoardPlayerMotBlendCheck(currPlayer) == 0) { HuPrcVSleep(); } BoardPlayerIdleSet(currPlayer); var_r31 = BoardBooStealValueGet(&spA, &sp8); if (var_r31 == 0) { ApplyBooLight(); } else if (stealTarget == 0) { ApplyCoinSteal(spA, sp8); } else { ApplyStarSteal(); } BoardWinCreate(2, hostMesTbl[GWBoardGet()][4], BoardWinPortraitGet()); BoardWinWait(); BoardWinKill(); } void ApplyCoinSteal(s16 arg0, s16 arg1) { u32 var_r31; s32 var_r30; if ((s16) arg1 == 0) { var_r31 = 0x70009; } else if ((s16) arg1 < 3) { var_r31 = 0x70008; } else if ((s16) arg1 < 6) { var_r31 = 0x70007; } else if ((s16) arg1 < 8) { var_r31 = 0x70006; } else { var_r31 = 0x70005; } sprintf(&stealAmountStr, "%d", arg0); HuAudFXPlay(0x4B); BoardWinCreate(2, var_r31, 3); BoardWinInsertMesSet((s32) &stealAmountStr, 0); BoardWinWait(); BoardWinKill(); BoardStatusShowSetForce(currPlayer); BoardStatusShowSet(currPlayer, 1); BoardPlayerMotionShiftSet(currPlayer, 7, 0.0f, 8.0f, 0); for (var_r30 = 0; var_r30 < arg0; var_r30++) { BoardPlayerCoinsAdd(currPlayer, 1); HuAudFXPlay(0xE); HuPrcSleep(6); } HuAudFXPlay(0xF); BoardPlayerMotionEndWait(currPlayer); } void ApplyStarSteal(void) { s32 temp_r31; HuAudFXPlay(0x4C); BoardWinCreate(2, 0x7000A, 3); BoardWinWait(); BoardWinKill(); BoardStatusShowSetForce(currPlayer); BoardStatusShowSet(currPlayer, 1); BoardAudSeqPause(1, 1, 0x3E8); HuPrcSleep(0x17); BoardPlayerVoiceEnableSet(currPlayer, 7, 0); BoardPlayerMotionShiftSet(currPlayer, 7, 0.0f, 8.0f, 0); HuAudFXPlay(boardStarSndTbl[GWPlayer[currPlayer].character]); BoardPlayerStarsAdd(currPlayer, 1); HuAudFXPlay(8); HuPrcSleep(0xA); temp_r31 = HuAudSStreamPlay(6); BoardPlayerMotionEndWait(currPlayer); while (msmStreamGetStatus(temp_r31) != 0) { HuPrcVSleep(); } BoardAudSeqPause(1, 0, 0x3E8); BoardPlayerMotionEndWait(currPlayer); BoardPlayerVoiceEnableSet(currPlayer, 7, 1); } void ApplyBooLight(void) { BoardWinCreate(2, 0x7000B, 3); BoardWinWait(); BoardWinKill(); BoardPlayerMotionShiftSet(currPlayer, 8, 0.0f, 8.0f, 0); while (BoardPlayerMotionEndCheck(currPlayer) == 0) { HuPrcVSleep(); } } void SetBooBallPos(void) { Mtx sp14; Vec sp8; s16 var_r31; var_r31 = BoardModelIDGet(houseMdl[0]); Hu3DModelObjMtxGet(var_r31, "yoko02", sp14); Hu3DMtxTransGet(sp14, &sp8); BoardModelPosSetV(ballMdl, &sp8); } s32 BoardBooComUseCheck(s32 arg0) { s32 var_r31; u32 var_r30; s32 var_r29; s32 var_r28; s32 var_r27; s32 var_r26; s32 var_r24; var_r24 = BoardPlayerCoinsGet(arg0); comStarStealTarget = comCoinStealTarget = -1; var_r26 = var_r27 = -1; switch (GWPlayer[arg0].diff) { case 0: var_r30 = 0x5F; break; case 1: var_r30 = 0x32; break; case 2: var_r30 = 5; break; case 3: var_r30 = 0; break; } for (var_r31 = 0; var_r31 < 4; var_r31++) { if (var_r31 != arg0) { if ((s32) GWSystem.team == 0 || var_r31 != BoardPlayerSameTeamFind(arg0)) { if (BoardPlayerItemFind(var_r31, 8) == -1 || BoardRandMod(0x64) < var_r30) { var_r29 = BoardPlayerCoinsGet(var_r31); var_r28 = GWStarsGet(var_r31); if (var_r28 != 0 || var_r29 != 0) { if (var_r28 != 0 || var_r29 >= 5 || var_r24 <= 10 || BoardRandMod(0x64) <= 0x32) { if (var_r27 < var_r29) { var_r27 = var_r29; comCoinStealTarget = var_r31; } if (var_r26 < var_r28) { var_r26 = var_r28; comStarStealTarget = (s8) var_r31; } } } } } } } if ((var_r26 <= 0) && (var_r27 <= 0)) { return 0; } return 1; } void BoardBooHouseTutorialExec(void) { Vec sp38; Vec sp2C; Vec sp20; Vec sp14; Vec sp8; float temp_f31; s16 temp_r28; s16 temp_r29; s32 temp_r27; s32 temp_r4; s32 var_r31; s32 var_r30; temp_r27 = BoardDataDirReadAsync(0x90000); temp_r29 = BoardSpaceFlagSearch(0, 0x08000000); BoardDataAsyncWait(temp_r27); temp_r28 = BoardSpaceLinkFlagSearch(0, temp_r29, 0x02000000); BoardSpacePosGet(0, temp_r29, &sp38); BoardSpacePosGet(0, temp_r28, &sp2C); PSVECSubtract(&sp2C, &sp38, &sp20); PSVECNormalize(&sp20, &sp20); temp_f31 = atan2d(-sp20.x, -sp20.z); sp14.x = -15.0f; sp14.y = temp_f31; sp14.z = 0.0f; sp8.x = 0.0f; sp8.y = 150.0f; sp8.z = 0.0f; BoardCameraMotionStartEx(houseMdl[0], &sp14, &sp8, 1370.0f, -1.0f, 0x15); for (var_r31 = 0; var_r31 < 6; var_r31++) { if (var_r31 != 0) { houseMdl[var_r31] = BoardModelCreateParam(&houseMdlTbl[var_r31], NULL, NULL); } } houseShowMot = BoardModelMotionCreate(houseMdl[0], 0x90009); houseHideMot = BoardModelMotionCreate(houseMdl[1], 0x9000A); OpenBooHouse(); while (BoardModelMotionEndCheck(BoardBooHouseHostGet()) == 0) { HuPrcVSleep(); } BoardModelMotionShiftSet(BoardBooHouseHostGet(), houseMot[0], 0.0f, 10.0f, 0x40000001); BoardTutorialHookExec(0x1C, 0); BoardModelMotionShiftSet(BoardBooHouseHostGet(), houseMot[1], 0.0f, 10.0f, 0x40000001); BoardModelPosSet(ballMdl, 0.0f, 0.0f, 0.0f); BoardModelHookSet(houseMdl[0], "yoko02", ballMdl); BoardModelMotionShiftSet(houseMdl[1], 0, 90.0f, 10.0f, 0); BoardModelMotionShiftSet(houseMdl[0], 0, 90.0f, 10.0f, 0); HuPrcSleep(0xA); while (BoardModelMotionShiftIDGet(houseMdl[0]) != -1) { HuPrcVSleep(); } while (BoardModelMotionTimeGet(houseMdl[0]) < 165.0f) { HuPrcVSleep(); } HuAudFXPlay(0x336); BoardAudSeqFadeOut(1, 0x3E8); while (BoardModelMotionEndCheck(houseMdl[0]) == 0) { HuPrcVSleep(); } BoardModelHookReset(houseMdl[0]); BoardBooKill(); ballMdl = -1; for (var_r30 = 1; var_r30 < 6; var_r30++) { if (houseMdl[var_r30] != -1) { BoardModelKill(houseMdl[var_r30]); houseMdl[var_r30] = -1; } } if (booMdl != -1) { BoardModelKill(booMdl); booMdl = -1; } if (lbl_801D37F8 != -1) { BoardModelKill(lbl_801D37F8); lbl_801D37F8 = -1; } BoardModelVisibilitySet(BoardBooHouseHostGet(), 0); }