Files
tww/src/d/actor/d_a_player_tact.inc
T
2026-05-29 16:34:55 -04:00

855 lines
29 KiB
C++

/**
* 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(), &current.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, &current.pos, fopAcM_GetRoomNo(this));
ship->setTactWarpID(warpID);
}
}
m32E4.makeEmitter(dPa_name::ID_AK_JN_TAKT01, mpEquipItemModel->getBaseTRMtx(), &current.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, &current.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(), &current.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;
}