/** * d_a_player_tact.inc * * Code relating to the Wind Waker item. * * This file is not a standalone translation unit and is instead directly * included into d_a_player_main.cpp. * * The original name of this file is not known, but a best guess was taken * based on the original names of the functions it contains. */ #include "d/dolzel.h" // IWYU pragma: keep #include "d/actor/d_a_player_main.h" #include "d/actor/d_a_player_main_data.h" #include "JSystem/J3DGraphLoader/J3DAnmLoader.h" #include "d/d_camera.h" #include "d/actor/d_a_ship.h" #include "d/actor/d_a_player_HIO.h" #include "JSystem/JKernel/JKRHeap.h" #include "d/d_kankyo_wether.h" extern const Vec l_tact_top; /* 8014D778-8014D7D4 .text getDayNightParamData__9daPy_lk_cFv */ u32 daPy_lk_c::getDayNightParamData() { u32 spawnType = dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) ? 2 : 0; u32 eventIdx = 0xCC; u32 extraParams = dComIfGp_getShipActor() != NULL ? 0x140 : 0x40; return setParamData(fopAcM_GetRoomNo(this), spawnType, eventIdx, extraParams); } /* 8014D7D4-8014D8AC .text setTactModel__9daPy_lk_cFv */ void daPy_lk_c::setTactModel() { if (mEquipItem == dItemNo_WIND_WAKER_e) return; deleteEquipItem(FALSE); mEquipItem = dItemNo_WIND_WAKER_e; JKRHeap* oldHeap = setItemHeap(); J3DModelData* modelData = initModel(&mpEquipItemModel, dRes_INDEX_LINK_BDL_TAKT_e, 0x37221222); u8* buffer = new (0x20) u8[0x400]; dComIfGp_getAnmArchive()->readIdxResource(buffer, 0x400, dRes_INDEX_LKANM_BRK_TTAKT_e); mpEquipItemBrk = (J3DAnmTevRegKey*)J3DAnmLoaderDataBase::load(buffer); mpEquipItemBrk->setFrame(0.0f); mpEquipItemBrk->searchUpdateMaterialID(modelData); modelData->entryTevRegAnimator(mpEquipItemBrk); mDoExt_setCurrentHeap(oldHeap); } /* 8014D8AC-8014D8F4 .text checkNpcStatus__9daPy_lk_cFv */ BOOL daPy_lk_c::checkNpcStatus() { if (dComIfGp_getCb1Player()) { if (!((daPy_py_c*)dComIfGp_getCb1Player())->checkNpcNotChange() && fopAcM_GetRoomNo(dComIfGp_getCb1Player()) == fopAcM_GetRoomNo(this)) { return TRUE; } } return FALSE; } /* 8014D8F4-8014D938 .text getTactPlayRightArmAnm__9daPy_lk_cFl */ u16 daPy_lk_c::getTactPlayRightArmAnm(s32 r4) { if (r4 == 1) return dRes_INDEX_LKANM_BCK_ACTIONTAKTRUP_e; else if (r4 == 3) return dRes_INDEX_LKANM_BCK_ACTIONTAKTRDW_e; else if (r4 == 2) return dRes_INDEX_LKANM_BCK_WAITTAKTRHANDL_e; else if (r4 == 4) return dRes_INDEX_LKANM_BCK_WAITTAKTRHANDR_e; else return dRes_INDEX_LKANM_BCK_WAITTAKT_e; } /* 8014D938-8014D97C .text getTactPlayLeftArmAnm__9daPy_lk_cFl */ u16 daPy_lk_c::getTactPlayLeftArmAnm(s32 r4) { if (r4 == 1) return dRes_INDEX_LKANM_BCK_WAITTAKTLHANDU_e; else if (r4 == 3) return dRes_INDEX_LKANM_BCK_WAITTAKTLHANDD_e; else if (r4 == 2) return dRes_INDEX_LKANM_BCK_WAITTAKTLHANDL_e; else if (r4 == 4) return dRes_INDEX_LKANM_BCK_WAITTAKTLHANDR_e; else return dRes_INDEX_LKANM_BCK_WAITTAKT_e; } /* 8014D97C-8014D9A4 .text checkEndTactMusic__9daPy_lk_cCFv */ BOOL daPy_lk_c::checkEndTactMusic() const { if (mCurProc == daPyProc_TACT_PLAY_e && mProcVar0.m34D0 != 0) { return TRUE; } return FALSE; } /* 8014D9A4-8014D9D0 .text getTactMetronomeRate__9daPy_lk_cFv */ f32 daPy_lk_c::getTactMetronomeRate() { if (mCurProc == daPyProc_TACT_WAIT_e) { return m35A0 / mDoAud_tact_getBeatFrames(); } else { return -1.0f; } } /* 8014D9D0-8014D9F8 .text checkTactLastInput__9daPy_lk_cFv */ BOOL daPy_lk_c::checkTactLastInput() { if (mCurProc == daPyProc_TACT_WAIT_e && mProcVar1.m34D2 != -1) { return TRUE; } return FALSE; } /* 8014D9F8-8014DA78 .text setTactZev__9daPy_lk_cFUiiPc */ void daPy_lk_c::setTactZev(fpc_ProcID tactZevPartnerId, int r30, char* r31) { #if VERSION <= VERSION_JPN if (r31) #else if (tactZevPartnerId != fpcM_ERROR_PROCESS_ID_e) #endif { seStartSystem(JA_SE_PRE_TAKT); } mTactZevPartnerId = tactZevPartnerId; m34CC = r30; m3494 = r31; } /* 8014DA78-8014DACC .text getTactTopPos__9daPy_lk_cFP4cXyz */ BOOL daPy_lk_c::getTactTopPos(cXyz* out) { if (mEquipItem != dItemNo_WIND_WAKER_e || mpEquipItemModel == NULL) { return FALSE; } else { MTXMultVec(mpEquipItemModel->getBaseTRMtx(), &l_tact_top, out); return TRUE; } } /* 8014DACC-8014DB00 .text getTactNormalWait__9daPy_lk_cCFv */ BOOL daPy_lk_c::getTactNormalWait() const { if (mCurProc == daPyProc_TACT_WAIT_e && mProcVar6.m3570 == -1 && mProcVar1.m34D2 == -1) { return TRUE; } return FALSE; } /* 8014DB00-8014DB2C .text getTactMusic__9daPy_lk_cCFv */ s32 daPy_lk_c::getTactMusic() const { if (mCurProc == daPyProc_TACT_PLAY_e) return mProcVar6.m3570; if (mCurProc == daPyProc_TACT_WAIT_e) return mProcVar7.m3574; return -1; } /* 8014DB2C-8014DB74 .text getTactTimerCancel__9daPy_lk_cCFv */ int daPy_lk_c::getTactTimerCancel() const { if (mCurProc == daPyProc_TACT_WAIT_e && m35AC <= 0.0f) { if (m35AC <= -100.0f) { return 2; } else { return 1; } } return 0; } /* 8014DB74-8014DB9C .text checkTactPlayMelody__9daPy_lk_cFv */ BOOL daPy_lk_c::checkTactPlayMelody() { if (mCurProc == daPyProc_TACT_PLAY_e && mProcVar5.m34DA == 0) { return TRUE; } return FALSE; } /* 8014DB9C-8014DBEC .text resetTactCount__9daPy_lk_cFv */ void daPy_lk_c::resetTactCount() { if (mCurProc == daPyProc_TACT_WAIT_e) { mProcVar4.m34D8 = 0; m35A0 = 0.0f; mProcVar5.m34DA = 0; mProcVar0.m34D0 = -1; mDoAud_tact_reset(); } } /* 8014DBEC-8014E100 .text procTactWait_init__9daPy_lk_cFi */ BOOL daPy_lk_c::procTactWait_init(int r30) { if (mCurProc == daPyProc_TACT_WAIT_e) { if (mProcVar6.m3570 != r30) { mProcVar4.m34D8 = 0; mProcVar5.m34DA = 0; mProcVar1.m34D2 = -1; } mProcVar6.m3570 = r30; if (mProcVar6.m3570 != -4) { dComIfGp_setMetronomeOn(); } else { dComIfGp_setMetronomeOff(); } return TRUE; } else if (r30 == -1) { if (!dComIfGp_event_compulsory(this, NULL, -1)) { return FALSE; } mDemo.setSpecialDemoType(); } int r31 = checkShipRideUseItem(1); if (r31 == 0) { if (r30 == -1) { f32 f31 = 200.0f * cM_ssin(shape_angle.y); f32 f30 = 200.0f * cM_scos(shape_angle.y); cXyz startPos(attention_info.position.x, attention_info.position.y - 50.0f, attention_info.position.z); cXyz endPos(startPos.x + f31, startPos.y, startPos.z + f30); mLinkLinChk.Set(&startPos, &endPos, this); if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { endPos.x = startPos.x - f31; endPos.z = startPos.z - f30; mLinkLinChk.Set(&startPos, &endPos, this); if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { shape_angle.y += 0x8000; } else { endPos.x = startPos.x + f30; endPos.z = startPos.z - f31; mLinkLinChk.Set(&startPos, &endPos, this); if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { shape_angle.y += 0x4000; } else { endPos.x = startPos.x - f30; endPos.z = startPos.z + f31; mLinkLinChk.Set(&startPos, &endPos, this); if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { shape_angle.y -= 0x4000; } } } current.angle.y = shape_angle.y; } } else if (r30 == -4 || r30 == -5) { if (fopAcM_getTalkEventPartner(this)) { shape_angle.y = fopAcM_searchActorAngleY(this, fopAcM_getTalkEventPartner(this)); } } } commonProcInit(daPyProc_TACT_WAIT_e); daPy_matAnm_c::offMabaFlg(); setSingleMoveAnime(ANM_WAITTAKT, m_HIO->mItem.mTact.m.mAnmRate, 0.0f, -1, m_HIO->mItem.mTact.m.field_0x4); setActAnimeUpper(dRes_INDEX_LKANM_BCK_WAITTAKT_e, UPPER_MOVE1_e, m_HIO->mItem.mTact.m.mAnmRate, 0.0f, -1, -1.0f); mAnmRatioUpper[UPPER_MOVE1_e].setRatio(0.0f); setActAnimeUpper(dRes_INDEX_LKANM_BCK_WAITTAKT_e, UPPER_MOVE2_e, m_HIO->mItem.mTact.m.mAnmRate, 0.0f, -1, -1.0f); mAnmRatioUpper[UPPER_MOVE2_e].setRatio(0.0f); mNormalSpeed = 0.0f; mProcVar2.m34D4 = 0; mProcVar3.m34D6 = 0; dComIfGp_setPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e); if (r30 == -1) { dCam_getBody()->StartEventCamera(0xC, fopAcM_GetID(this), 0); seStartSystem(JA_SE_TAKT_USE_BEGIN); } mDoAud_tact_reset(); mDoAud_tact_setBeat(0); mDoAud_tact_setVolume(0.0f); mDoAud_tact_ambientPlay(); setTactModel(); initShipRideUseItem(r31, 2); mProcVar1.m34D2 = -1; m32E4.makeEmitter(dPa_name::ID_AK_JN_TAKT00, mpEquipItemModel->getBaseTRMtx(), ¤t.pos, NULL); mProcVar6.m3570 = r30; mProcVar4.m34D8 = 0; mProcVar7.m3574 = -1; m35A0 = 0.0f; mProcVar5.m34DA = 0; m3624 = 0; m35A4 = 0.0f; m35A8 = 0.0f; if (mProcVar6.m3570 == 6 || mProcVar6.m3570 == 7) { m35AC = 600.0f; } else { m35AC = 900.0f; } mProcVar0.m34D0 = -1; setTactZev(-1, -1, NULL); if (mProcVar6.m3570 != -4) { dComIfGp_setMetronomeOn(); } mDoAud_taktModeMute(); return TRUE; } /* 8014E100-8014E9A4 .text procTactWait__9daPy_lk_cFv */ BOOL daPy_lk_c::procTactWait() { setShipRidePosUseItem(); mDoAud_tact_ambientPlay(); if (mProcVar6.m3570 == -4) { dComIfGp_evmng_cutEnd(mStaffIdx); return TRUE; } if (mProcVar1.m34D2 > 0) { mProcVar1.m34D2--; if (mProcVar6.m3570 == -5) { m35A0 += 1.0f; } if (mProcVar1.m34D2 == 0) { if (mProcVar6.m3570 == -5 || mProcVar6.m3570 == 6 || mProcVar6.m3570 == 7) { dComIfGp_evmng_cutEnd(mStaffIdx); dComIfGp_setMetronomeOff(); } else if (mProcVar6.m3570 == -1 || mProcVar6.m3570 == -3 || mProcVar6.m3570 >= 0) { procTactPlay_init(mProcVar7.m3574, mProcVar6.m3570 == -1, mProcVar6.m3570 >= 0); } } return TRUE; } if (mProcVar6.m3570 == 5 || mProcVar6.m3570 == 1 || mProcVar6.m3570 == 6 || mProcVar6.m3570 == 7) { if (m35AC >= 0.0f) { m35AC -= 1.0f; } if (mProcVar6.m3570 == 5) { dComIfGp_setAStatus(dActStts_RETURN_e); } } else if (mProcVar6.m3570 != -5) { dComIfGp_setAStatus(dActStts_RETURN_e); } if (mProcVar1.m34D2 == 0 || (cancelTrigger() && dComIfGp_getAStatus() == dActStts_RETURN_e) || m35AC <= 0.0f) { if (mProcVar1.m34D2 != 0) { resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); resetActAnimeUpper(UPPER_MOVE1_e, -1.0f); seStartSystem(JA_SE_TAKT_USE_CANCEL); } dComIfGp_setMetronomeOff(); if (cancelTrigger() && mProcVar6.m3570 == 5) { m35AC = -1000.0f; } if (mProcVar6.m3570 == -1) { dComIfGp_event_reset(); dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); endDemoMode(); } else { dComIfGp_evmng_cutEnd(mStaffIdx); } mDoAud_tact_reset(); return TRUE; } int rightDir, leftDir; if (mProcVar6.m3570 != -5) { rightDir = mDoAud_getTactDirection(1, mProcVar2.m34D4); leftDir = mDoAud_getTactDirection(0, mProcVar3.m34D6); mDoAud_tact_setVolume(mStickDistance * cM_scos(m34DC)); } else { rightDir = mProcVar2.m34D4; leftDir = mProcVar3.m34D6; } m35A0 += 1.0f; if (rightDir != mProcVar2.m34D4) { if (m35A4 <= 0.0f || rightDir != 0) { setActAnimeUpper( getTactPlayRightArmAnm(rightDir), UPPER_MOVE1_e, m_HIO->mItem.mTact.m.mRightArmAnmRate, 0.0f, -1, m_HIO->mItem.mTact.m.field_0xC ); if (rightDir == 0 || rightDir == 2 || rightDir == 4) { mFrameCtrlUpper[UPPER_MOVE1_e].setRate(m_HIO->mItem.mTact.m.mAnmRate); mFrameCtrlUpper[UPPER_MOVE1_e].setFrame(mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); } if (mProcVar2.m34D4 == 4 || mProcVar2.m34D4 == 2 || rightDir == 4 || rightDir == 2) { mDoAud_tact_reset(); mDoAud_tact_setBeat(rightDir); m35A0 = 0.0f; mProcVar5.m34DA = 0; m_old_fdata->initOldFrameMorf(5.0f, 0, 0x2A); m3624 = 0; mProcVar0.m34D0 = -1; } mProcVar2.m34D4 = rightDir; mAnmRatioUpper[UPPER_MOVE1_e].setRatio(0.0f); if (mProcVar2.m34D4 != 0) { m35A4 = 2.0f; } } else { m35A4 -= 1.0f; } } else if (mProcVar2.m34D4 != 0) { m35A4 = 2.0f; } if (leftDir != mProcVar3.m34D6) { if (m35A8 <= 0.0f || leftDir != 0) { f32 rate; if (mProcVar2.m34D4 == 4) { rate = m_HIO->mItem.mTact.m.field_0x14; } else if (mProcVar2.m34D4 == 2) { rate = m_HIO->mItem.mTact.m.field_0x18; } else { rate = m_HIO->mItem.mTact.m.field_0x10; } setActAnimeUpper( getTactPlayLeftArmAnm(leftDir), UPPER_MOVE2_e, rate, 0.0f, -1, m_HIO->mItem.mTact.m.field_0xC ); mProcVar3.m34D6 = leftDir; mAnmRatioUpper[UPPER_MOVE2_e].setRatio(0.0f); mDoAud_tact_armSoundPlay(leftDir); if (mProcVar3.m34D6 != 0) { m35A8 = 2.0f; } } else { m35A8 -= 1.0f; } } else if (mProcVar3.m34D6 != 0) { m35A8 = 2.0f; } if (m35A0 >= mDoAud_tact_getBeatFrames()) { mDoAud_tact_metronomePlay(mProcVar5.m34DA, mProcVar3.m34D6); mpEquipItemBrk->setFrame(mpEquipItemBrk->getFrameMax() - 0.001f); mProcVar0.m34D0 = 3; m35A0 -= mDoAud_tact_getBeatFrames(); m3624++; if (m3624 == 2) { m3624 = 0; } } else { mpEquipItemBrk->setFrame(0.0f); } if (mProcVar0.m34D0 > 0) { mProcVar0.m34D0--; } if (mProcVar0.m34D0 == 0) { mProcVar7.m3574 = mDoAud_tact_judge(mProcVar5.m34DA, mProcVar3.m34D6); mProcVar5.m34DA++; if (mProcVar5.m34DA >= mDoAud_tact_getBeat()) { mProcVar5.m34DA = 0; } onResetFlg0(daPyRFlg0_TACT_INPUT); mProcVar0.m34D0 = -1; if ((mProcVar6.m3570 >= 0 && mProcVar6.m3570 == mProcVar7.m3574) || ((mProcVar6.m3570 == -1 || mProcVar6.m3570 == -3) && (mProcVar7.m3574 >= 0 && mProcVar7.m3574 != 6 && mProcVar7.m3574 != 7 && dComIfGs_isTact(mProcVar7.m3574)))) { mProcVar1.m34D2 = 30; seStartSystem(JA_SE_WTAKT_MATCH_SIGNAL); m35A0 = 0.0f; } else { mProcVar7.m3574 = -1; if (mProcVar6.m3570 == -5) { mProcVar4.m34D8++; if (mProcVar4.m34D8 == 6) { mProcVar1.m34D2 = 15; } } else if (mProcVar6.m3570 == -2) { mProcVar4.m34D8++; if (mProcVar4.m34D8 == 5) { mProcVar1.m34D2 = 30; m35A0 = 0.0f; } } } } f32 f0; if (mProcVar2.m34D4 == 4) { f0 = m_HIO->mItem.mTact.m.field_0x14; } else if (mProcVar2.m34D4 == 2) { f0 = m_HIO->mItem.mTact.m.field_0x18; } else { f0 = m_HIO->mItem.mTact.m.field_0x10; } mFrameCtrlUpper[UPPER_MOVE2_e].setRate(f0); if (mProcVar1.m34D2 == -1) { f32 f0 = (m35A0 + m3624 * mDoAud_tact_getBeatFrames()) / (2.0f * mDoAud_tact_getBeatFrames()); mFrameCtrlUnder[UPPER_MOVE0_e].setFrame(f0 * mFrameCtrlUnder[UPPER_MOVE0_e].getEnd()); mFrameCtrlUpper[UPPER_MOVE1_e].setFrame(f0 * mFrameCtrlUpper[UPPER_MOVE1_e].getEnd()); getNowAnmPackUnder(UNDER_MOVE0_e)->setFrame(mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); if (getNowAnmPackUpper(UPPER_MOVE1_e)) { getNowAnmPackUpper(UPPER_MOVE1_e)->setFrame(mFrameCtrlUpper[UPPER_MOVE1_e].getFrame()); } } return TRUE; } /* 8014E9A4-8014EBA0 .text procTactPlay_init__9daPy_lk_cFlii */ BOOL daPy_lk_c::procTactPlay_init(s32 r27, int r30, int r31) { int r28 = checkShipRideUseItem(0); commonProcInit(daPyProc_TACT_PLAY_e); dComIfGp_setPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e); mProcVar6.m3570 = r27; if (r31 == 0) { m3628 = fopMsgM_messageSet(0x5AD + r27); } else { m3628 = fpcM_ERROR_PROCESS_ID_e; } mDoAud_tact_setVolume(0.0f); resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); resetActAnimeUpper(UPPER_MOVE1_e, -1.0f); mProcVar5.m34DA = 0xA; daPy_ANM anm; if (r27 == 0) { anm = ANM_TAKTKAZE; } else if (r27 == 1) { anm = ANM_TAKTSIPPU; } else if (r27 == 5) { anm = ANM_TAKTCHUYA; } else if (r27 == 4) { anm = ANM_TAKTFUJIN; } else if (r27 == 2) { anm = ANM_TAKTAYATSURI; } else { anm = ANM_TAKTCHISIN; } setSingleMoveAnime(anm, 1.0f, 0.0f, -1, 3.0f); initShipRideUseItem(r28, 2); if (r28 != 0 && mProcVar6.m3570 == 1) { stage_stag_info_class* stag_info = dComIfGp_getStageStagInfo(); if (dStage_stagInfo_GetSTType(stag_info) == dStageType_SEA_e && m34CC != 1 && r30 != 0) { daShip_c* ship = dComIfGp_getShipActor(); fpc_ProcID warpID = fopAcM_create(fpcNm_TORNADO_e, 1, ¤t.pos, fopAcM_GetRoomNo(this)); ship->setTactWarpID(warpID); } } m32E4.makeEmitter(dPa_name::ID_AK_JN_TAKT01, mpEquipItemModel->getBaseTRMtx(), ¤t.pos, NULL); mProcVar0.m34D0 = 0; mProcVar7.m3574 = r30; m3624 = 0; mProcVar4.m34D8 = r31; return TRUE; } /* 8014EBA0-8014EFD4 .text procTactPlay__9daPy_lk_cFv */ BOOL daPy_lk_c::procTactPlay() { if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { setShipRidePos(1); shape_angle.y -= 0x4000; } mDoAud_tact_ambientPlay(); if (m3624 != 0) { if (checkEndMessage(m3624)) { resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); dComIfGp_event_reset(); dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); endDemoMode(); } return TRUE; } else if (mProcVar5.m34DA > 0) { mProcVar5.m34DA--; if (mProcVar5.m34DA == 0) { mDoAud_tact_melodyPlay(mProcVar6.m3570); } } if (mProcVar0.m34D0 != 0) { if (mProcVar4.m34D8 != 0) { dComIfGp_setMetronomeOff(); dComIfGp_evmng_cutEnd(mStaffIdx); return TRUE; } msg_class* msg_p = fopMsgM_SearchByID(m3628); if (msg_p == NULL || msg_p->mStatus == fopMsgStts_BOX_CLOSED_e) { fopAc_ac_c* tactZevPartner = NULL; dComIfGp_setMetronomeOff(); if (msg_p != NULL) { msg_p->mStatus = fopMsgStts_MSG_DESTROYED_e; m3628 = fpcM_ERROR_PROCESS_ID_e; } if (mTactZevPartnerId != fpcM_ERROR_PROCESS_ID_e && m34CC == mProcVar6.m3570) { tactZevPartner = fopAcM_SearchByID(mTactZevPartnerId); } if (mProcVar7.m3574 == 0) { dComIfGp_evmng_cutEnd(mStaffIdx); return TRUE; } if (tactZevPartner != NULL) { if (m3494 == 0) { resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); dComIfGp_event_reset(); dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); endDemoMode(); return TRUE; } else { return procTactPlayEnd_init(-1); } } if (mProcVar6.m3570 == 0) { if (dKyw_gbwind_use_check()) { return procTactPlayEnd_init(mProcVar6.m3570); } m3624 = 0x14A5; } else if (mProcVar6.m3570 == 1) { daShip_c* ship = dComIfGp_getShipActor(); if (ship != NULL && ship->getTactWarpID() != fpcM_ERROR_PROCESS_ID_e) { return procTactPlayEnd_init(mProcVar6.m3570); } m3624 = 0x14A6; } else if (mProcVar6.m3570 == 2) { if (checkNpcStatus() && !dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { return procTactPlayEnd_init(mProcVar6.m3570); } m3624 = 0x14A8; } else if (mProcVar6.m3570 == 5) { if (dKy_daynighttact_stop_chk()) { m3624 = 0x14A7; } else { dStage_FileList_dt_c* fili_p = dComIfGp_roomControl_getStatusRoomDt(fopAcM_GetRoomNo(this))->getFileListInfo(); if (dStage_FileList_dt_GetSongOk(fili_p)) { m3624 = 0x14AA; } else { return procTactPlayEnd_init(mProcVar6.m3570); } } } else { m3624 = 0x14A9; } } } else if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) { seStartSystem(JA_SE_TAKT_MATCHED); fopMsgM_messageSendOn(); mProcVar0.m34D0 = 1; mDoAud_tact_reset(); setSingleMoveAnime(ANM_WAITTAKT, m_HIO->mItem.mTact.m.mAnmRate, 0.0f, -1, 10.0f); setTextureAnime(6, 0); onModeFlg(ModeFlg_00000100); offModeFlg(ModeFlg_00000400); } return TRUE; } /* 8014EFD4-8014F210 .text procTactPlayEnd_init__9daPy_lk_cFi */ BOOL daPy_lk_c::procTactPlayEnd_init(int r30) { int r28 = checkShipRideUseItem(0); commonProcInit(daPyProc_TACT_PLAY_END_e); dComIfGp_setPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e); initShipRideUseItem(r28, 2); mProcVar6.m3570 = r30; mNormalSpeed = 0.0f; setBlendMoveAnime(m_HIO->mBasic.m.field_0xC); if (r30 == -1) { dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); fopAcM_orderChangeEvent(this, fopAcM_SearchByID(mTactZevPartnerId), m3494, 0, -1); mDemo.setSystemDemoType(); } else if (r30 == 0) { dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); fopAcM_create(fpcNm_WBIRD_e, NULL, ¤t.pos, dComIfGp_roomControl_getStayNo()); } else if (r30 == 2) { dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); dComIfGp_event_setTalkPartner(dComIfGp_getCb1Player()); fopAcM_orderChangeEvent(this, dComIfGp_getCb1Player(), l_tact_event_label, 0, -1); seStartSystem(JA_SE_CTRL_LINK_TO_NPC); } else if (r30 == 5) { dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); fopAcM_orderChangeEvent(this, l_tact_night_event_label, 0, -1); } mProcVar7.m3574 = 0; mProcVar3.m34D6 = shape_angle.y + 0x4000; return TRUE; } /* 8014F210-8014F4DC .text procTactPlayEnd__9daPy_lk_cFv */ BOOL daPy_lk_c::procTactPlayEnd() { if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { setShipRidePos(0); if (mProcVar6.m3570 == 0 && !dComIfGp_evmng_startCheck(l_tact_wind_change_event_label) && !dComIfGp_evmng_startCheck(l_tact_wind_change_event_label2)) { cLib_addCalcAngleS(&shape_angle.y, mProcVar3.m34D6, 5, 0x1000, 0x100); } } if (mProcVar6.m3570 == 0) { dComIfGp_setAStatus(dActStts_RETURN_e); } else if (mProcVar6.m3570 == 5) { if (dComIfGp_evmng_endCheck(l_tact_night_event_label) && !checkNoResetFlg0(daPyFlg0_UNK4000)) { onNoResetFlg0(daPyFlg0_UNK4000); fopAc_ac_c* ship; BOOL hasShip; if (dComIfGp_getShipActor() != NULL) { ship = dComIfGp_getShipActor(); hasShip = TRUE; } else { ship = this; // Use Link's position and angle for the ship if it doesn't exist. hasShip = FALSE; } dComIfGs_setTurnRestart( current.pos, shape_angle.y, fopAcM_GetRoomNo(this), getDayNightParamData(), ship->current.pos, ship->shape_angle.y #if VERSION > VERSION_DEMO , hasShip #endif ); if (dComIfG_getTimerMode() == 3 && dComIfG_getTimerPtr() != NULL) { dComIfG_getTimerPtr()->deleteRequest(); } dStage_turnRestart(); mDoAud_taktModeMuteOff(); } } else if (mProcVar6.m3570 == 2) { if (dComIfGp_evmng_endCheck(l_tact_event_label)) { dComIfGp_event_reset(); changePlayer(dComIfGp_getCb1Player()); endDemoMode(); } } else if (mProcVar6.m3570 == 1) { if (mProcVar7.m3574 == 0) { if (dComIfGp_getMesgStatus() == 0) { dComIfGp_fmapOpenOn(); mProcVar7.m3574 = 1; } } else { dCam_getBody()->EndEventCamera(fopAcM_GetID(this)); daShip_c* ship = (daShip_c*)dComIfGp_getShipActor(); if (ship == NULL || ship->getTactWarpPosNum() < 0) { dComIfGp_event_reset(); endDemoMode(); if (ship != NULL) { fopAcM_delete(ship->getTactWarpID()); ship->setTactWarpID(fpcM_ERROR_PROCESS_ID_e); } } else { if (dComIfG_getTimerMode() == 3 && dComIfG_getTimerPtr() != NULL) { dComIfG_getTimerPtr()->deleteRequest(); } procShipPaddle_init(); ship->setTactWarp(); } } } return TRUE; } /* 8014F4DC-8014F690 .text procTactPlayOriginal_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procTactPlayOriginal_init() { if (mCurProc == daPyProc_TACT_PLAY_ORIGINAL_e) { return TRUE; } commonProcInit(daPyProc_TACT_PLAY_ORIGINAL_e); dComIfGp_setPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e); mProcVar0.m34D0 = 0; daPy_matAnm_c::offMabaFlg(); setSingleMoveAnime(ANM_WAITTAKT, m_HIO->mItem.mTact.m.mAnmRate, 0.0f, -1, m_HIO->mItem.mTact.m.field_0x4); mProcVar6.m3570 = dComIfGp_event_getTactFreeMStick(mProcVar0.m34D0); setActAnimeUpper(getTactPlayRightArmAnm(mProcVar6.m3570), UPPER_MOVE1_e, 0.0f, 0.0f, -1, -1.0f); mAnmRatioUpper[UPPER_MOVE1_e].setRatio(0.0f); mProcVar7.m3574 = dComIfGp_event_getTactFreeCStick(mProcVar0.m34D0); setActAnimeUpper(getTactPlayLeftArmAnm(mProcVar7.m3574), UPPER_MOVE2_e, 0.0f, 0.0f, -1, -1.0f); mAnmRatioUpper[UPPER_MOVE2_e].setRatio(0.0f); setTextureAnime(0, 0); m3530 = 3; mDoAud_tact_setStickPos(mProcVar6.m3570, mProcVar7.m3574); mDoAud_tact_playArmSwing(mProcVar6.m3570, mProcVar7.m3574); setTactModel(); m32E4.makeEmitter(dPa_name::ID_AK_JN_TAKT01, mpEquipItemModel->getBaseTRMtx(), ¤t.pos, NULL); mProcVar3.m34D6 = 0xF; mProcVar5.m34DA = 0; mDoAud_taktModeMute(); return TRUE; } /* 8014F690-8014F8A0 .text procTactPlayOriginal__9daPy_lk_cFv */ BOOL daPy_lk_c::procTactPlayOriginal() { seStartSystem(JA_SE_LK_WTAKT_USING); if (m_old_fdata->getOldFrameRate() < 0.01f) { if (mProcVar3.m34D6 > 0) { mProcVar3.m34D6--; if (mProcVar3.m34D6 == 0) { mProcVar0.m34D0++; } } else if (mProcVar0.m34D0 == 5) { dComIfGp_evmng_cutEnd(mStaffIdx); mDoAud_tact_stopArmSwing(); } else { mProcVar3.m34D6 = 0xF; mProcVar6.m3570 = dComIfGp_event_getTactFreeMStick(mProcVar0.m34D0); setActAnimeUpper( getTactPlayRightArmAnm(mProcVar6.m3570), UPPER_MOVE1_e, m_HIO->mItem.mTact.m.mRightArmAnmRate, 0.0f, -1, 5.0f ); mAnmRatioUpper[UPPER_MOVE1_e].setRatio(0.0f); if (mProcVar6.m3570 == 0 || mProcVar6.m3570 == 2 || mProcVar6.m3570 == 4) { mFrameCtrlUpper[UPPER_MOVE1_e].setRate(m_HIO->mItem.mTact.m.mAnmRate); mFrameCtrlUpper[UPPER_MOVE1_e].setFrame(mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); } mProcVar7.m3574 = dComIfGp_event_getTactFreeCStick(mProcVar0.m34D0); setActAnimeUpper(getTactPlayLeftArmAnm(mProcVar7.m3574), UPPER_MOVE2_e, m_HIO->mItem.mTact.m.mAnmRate, 0.0f, -1, 5.0f); mAnmRatioUpper[UPPER_MOVE2_e].setRatio(0.0f); mFrameCtrlUpper[UPPER_MOVE2_e].setFrame(mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); mDoAud_tact_setStickPos(mProcVar6.m3570, mProcVar7.m3574); mDoAud_tact_playArmSwing(mProcVar6.m3570, mProcVar7.m3574); } } if (mProcVar3.m34D6 != 0 && mProcVar5.m34DA != 0) { mDoAud_tact_play(); } mProcVar5.m34DA = 1; return TRUE; }