From e6edfa7b6f24defab28b4aaed05872ff14b40093 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Thu, 28 Dec 2023 18:58:56 -0500 Subject: [PATCH] start d_a_player_tact, add player status enums --- include/JAZelAudio/JAIZelInst.h | 4 + include/d/actor/d_a_player.h | 2 +- include/d/actor/d_a_player_main.h | 19 +++-- include/d/d_com_inf_game.h | 31 +++++-- include/m_Do/m_Do_audio.h | 19 +++++ src/d/actor/d_a_agb.cpp | 11 ++- src/d/actor/d_a_agbsw0.cpp | 16 +++- src/d/actor/d_a_obj_mknjd.cpp | 6 +- src/d/actor/d_a_obj_wood.cpp | 1 + src/d/actor/d_a_player_main.cpp | 27 ++++-- src/d/actor/d_a_player_ship.inc | 4 +- src/d/actor/d_a_player_tact.inc | 132 ++++++++++++++++++++++++------ src/d/actor/d_a_swtact.cpp | 4 +- src/d/d_com_inf_game.cpp | 1 + src/d/d_kankyo_rain.cpp | 2 +- 15 files changed, 217 insertions(+), 62 deletions(-) diff --git a/include/JAZelAudio/JAIZelInst.h b/include/JAZelAudio/JAIZelInst.h index dc553c54a..bff8c433c 100644 --- a/include/JAZelAudio/JAIZelInst.h +++ b/include/JAZelAudio/JAIZelInst.h @@ -24,6 +24,10 @@ public: void melodyPlay(s32); void melodyStop(); + // one of these inlines returns field_0x30, not sure which + void getBeat() {} + void getBeatFrames() {} + public: /* 0x00 */ int field_0x0; /* 0x04 */ u8 field_0x4[5]; diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 98f814204..7b3a79167 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -266,7 +266,7 @@ public: virtual MtxP getLeftHandMatrix() = 0; virtual MtxP getRightHandMatrix() = 0; virtual f32 getGroundY() = 0; - virtual int getTactMusic() const { return -1; } + virtual s32 getTactMusic() const { return -1; } virtual int getTactTimerCancel() const { return 0; } virtual BOOL checkPlayerGuard() const { return FALSE; } virtual fopAc_ac_c* getGrabMissActor() { return NULL; } diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 79bc816ad..4c134a64a 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -154,6 +154,8 @@ public: daPy_waterDropEcallBack_c() {} ~daPy_waterDropEcallBack_c() {} + static daPy_waterDropPcallBack_c m_pcallback; + /* 0x1C */ u8 field_0x1C[0x4]; }; // Size: 0x20 @@ -1932,13 +1934,13 @@ public: u32 getDayNightParamData(); void setTactModel(); BOOL checkNpcStatus(); - void getTactPlayRightArmAnm(s32); - void getTactPlayLeftArmAnm(s32); + int getTactPlayRightArmAnm(s32); + int getTactPlayLeftArmAnm(s32); BOOL checkEndTactMusic() const; f32 getTactMetronomeRate(); BOOL checkTactLastInput(); BOOL getTactTopPos(cXyz*); - void getTactNormalWait() const; + BOOL getTactNormalWait() const; BOOL checkTactPlayMelody(); void resetTactCount(); BOOL procTactWait_init(int); @@ -2167,7 +2169,7 @@ public: virtual MtxP getLeftHandMatrix() { return mpCLModel->getAnmMtx(0x08); } // cl_LhandA joint virtual MtxP getRightHandMatrix() { return mpCLModel->getAnmMtx(0x0C); } // cl_RhandA joint virtual f32 getGroundY() { return mAcch.GetGroundH(); } - virtual int getTactMusic() const; + virtual s32 getTactMusic() const; virtual int getTactTimerCancel() const; virtual BOOL checkPlayerGuard() const; virtual fopAc_ac_c* getGrabMissActor(); @@ -2454,8 +2456,8 @@ public: /* 0x3568 */ s16 m3568; /* 0x356A */ u8 m356A[0x356C - 0x356A]; /* 0x356C */ int mCameraInfoIdx; - /* 0x3570 */ int m3570; - /* 0x3574 */ int m3574; + /* 0x3570 */ s32 m3570; + /* 0x3574 */ s32 m3574; /* 0x3578 */ int m3578; /* 0x357C */ u8 m357C[0x3580 - 0x357C]; /* 0x3580 */ int m3580; @@ -2468,7 +2470,8 @@ public: /* 0x359C */ u8 m359C[0x35A0 - 0x359C]; /* 0x35A0 */ f32 m35A0; /* 0x35A4 */ f32 m35A4; - /* 0x35A8 */ u8 m35A8[0x35B0 - 0x35A8]; + /* 0x35A8 */ u8 m35A8[0x35AC - 0x35A8]; + /* 0x35AC */ f32 m35AC; /* 0x35B0 */ f32 m35B0; /* 0x35B4 */ u8 m35B4[0x35BC - 0x35B4]; /* 0x35BC */ f32 mVelocity; @@ -2498,7 +2501,7 @@ public: /* 0x3620 */ u32 m3620; /* 0x3624 */ int m3624; /* 0x3628 */ int m3628; - /* 0x362C */ int m362C; + /* 0x362C */ unsigned int mTactZevPartnerPID; /* 0x3630 */ u32 m3630; /* 0x3634 */ int m3634; /* 0x3638 */ int mMsgId; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index f5c894674..c701775c9 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -15,7 +15,6 @@ #include "d/d_save.h" #include "d/d_stage.h" #include "d/d_vibration.h" -#include "d/d_wood.h" #include "d/d_demo.h" #include "d/d_timer.h" #include "SSystem/SComponent/c_data_tbl.h" @@ -23,22 +22,40 @@ class JKRArchive; class JKRAramBlock; class JKRExpHeap; -class dPa_control_c; -class dDemo_manager_c; class dMagma_packet_c; class dGrass_packet_c; class dTree_packet_c; class dFlower_packet_c; -class Packet_c; +namespace dWood { class Packet_c; }; class daPy_py_c; class daPy_lk_c; -class daPy_npc_c; class daShip_c; class daAgb_c; -class dTimer_c; class camera_class; class J2DOrthoGraph; -class dDemo_actor_c; + +enum daPy__PlayerStatus0 { + daPyStts0_UNK10_e = 0x00000010, + daPyStts0_BOW_AIM_e = 0x00001000, + daPyStts0_SWORD_SWING_e = 0x00008000, + daPyStts0_SHIP_RIDE_e = 0x00010000, + daPyStts0_BOOMERANG_AIM_e = 0x00080000, + daPyStts0_SWIM_e = 0x00100000, + daPyStts0_TELESCOPE_LOOK_e = 0x00200000, + daPyStts0_BOOMERANG_WAIT_e = 0x00400000, + daPyStts0_CRAWL_e = 0x08000000, + daPyStts0_SPIN_ATTACK_e = 0x40000000, +}; + +enum daPy__PlayerStatus1 { + daPyStts1_WIND_WAKER_CONDUCT_e = 0x00000001, + daPyStts1_PICTO_BOX_AIM_e = 0x00000008, + daPyStts1_DEKU_LEAF_FLY_e = 0x00000020, + daPyStts1_DEKU_LEAF_FAN_e = 0x00000040, + daPyStts1_SAIL_e = 0x00000400, + daPyStts1_UNK8000_e = 0x00008000, + daPyStts1_UNK40000_e = 0x00040000, +}; enum ALWAYS_RES_FILE_ID { // IDs and indexes are synced /* BCK */ diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index 9fba62eef..1597dd0af 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -18,14 +18,21 @@ public: static void offResetFlag() { mResetFlag = false; } static bool isInitFlag() { return mInitFlag; } + static void onInitFlag() { mInitFlag = true; } static void offInitFlag() { mInitFlag = false; } static bool isBgmSet() { return mBgmSet; } + static void onBgmSet() { mBgmSet = true; } static void offBgmSet() { mBgmSet = false; } static void setLoadTimer(u8 i_timer) { mLoadTimer = i_timer; } static u8 getLoadTimer() { return mLoadTimer; } + static JAIZelInst& getTact() { return mTact; } + + static void getMode() {} + static void setMode(u8) {} + static bool mInitFlag; static bool mResetFlag; static bool mBgmSet; @@ -158,6 +165,18 @@ inline f32 mDoAud_tact_getMelodyPattern(s32 melody_no, s32 note_no, s32 * patter return mDoAud_zelAudio_c::mTact.getMelodyPattern(melody_no, note_no, pattern); } +inline void mDoAud_tact_reset() { + mDoAud_zelAudio_c::getTact().reset(); +} + +inline void mDoAud_tact_getBeat() { + return mDoAud_zelAudio_c::getTact().getBeat(); +} + +inline void mDoAud_tact_getBeatFrames() { + return mDoAud_zelAudio_c::getTact().getBeatFrames(); +} + inline BOOL mDoAud_checkCbPracticePlay() { return mDoAud_zelAudio_c::getInterface()->checkCbPracticePlay(); } diff --git a/src/d/actor/d_a_agb.cpp b/src/d/actor/d_a_agb.cpp index be3e6c272..1fc37224f 100644 --- a/src/d/actor/d_a_agb.cpp +++ b/src/d/actor/d_a_agb.cpp @@ -679,10 +679,13 @@ void daAgb_c::GbaItemUse() { switch (temp_r29) { case 16: if (daPy_getPlayerLinkActorClass()->checkNoControll() || - dComIfGp_checkPlayerStatus0(0, 0x8000000) || - (daPy_getPlayerActorClass()->checkPlayerFly() && - !dComIfGp_checkPlayerStatus0(0, 0x100000) && !dComIfGp_checkPlayerStatus0(0, 0x10000))) - { + dComIfGp_checkPlayerStatus0(0, daPyStts0_CRAWL_e) || + ( + daPy_getPlayerActorClass()->checkPlayerFly() && + !dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e) && + !dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) + ) + ) { mEffect = BigLittleChange(0x1F0300); return; } else if (field_0x67d != 0) { diff --git a/src/d/actor/d_a_agbsw0.cpp b/src/d/actor/d_a_agbsw0.cpp index d628e3b1b..472606b16 100644 --- a/src/d/actor/d_a_agbsw0.cpp +++ b/src/d/actor/d_a_agbsw0.cpp @@ -1825,25 +1825,33 @@ BOOL daAgbsw0_c::MoveCheck(s16 param_1) { break; case 0x23: - if(dComIfGp_checkPlayerStatus0(0, 0x100000)) { + if(dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e)) { return 0; } break; case 0x24: - if(dComIfGp_checkPlayerStatus0(0, 0x10000)) { + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { return 0; } break; case 0x25: - if(dComIfGp_checkPlayerStatus0(0, 0x10000) && dComIfGp_getSelectItem(0) != BOMB_BAG && dComIfGp_getSelectItem(1) != BOMB_BAG && dComIfGp_getSelectItem(2) != BOMB_BAG) { + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && + dComIfGp_getSelectItem(0) != BOMB_BAG && + dComIfGp_getSelectItem(1) != BOMB_BAG && + dComIfGp_getSelectItem(2) != BOMB_BAG) + { return 0; } break; case 0x26: - if(dComIfGp_checkPlayerStatus0(0, 0x10000) && dComIfGp_getSelectItem(0) != ROPE && dComIfGp_getSelectItem(1) != ROPE && dComIfGp_getSelectItem(2) != ROPE) { + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && + dComIfGp_getSelectItem(0) != ROPE && + dComIfGp_getSelectItem(1) != ROPE && + dComIfGp_getSelectItem(2) != ROPE) + { return 0; } diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index f4f3aa594..d12624aa2 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -733,7 +733,7 @@ int daObjMknjD::Act_c::Execute(Mtx** i_mtx) { f32 absXZ = partnerDiff.absXZ(); if (absXZ < 800.0f && (rotDiff < -0x4000 || rotDiff > 0x4000)) { - if (dComIfGp_checkPlayerStatus1(0, 1) != 0) { + if (dComIfGp_checkPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e)) { m043F = 1; manage_friend_draw(0); } @@ -787,7 +787,7 @@ int daObjMknjD::Act_c::Execute(Mtx** i_mtx) { } } else { - if (dComIfGp_checkPlayerStatus1(0, 1) == 0) { + if (!dComIfGp_checkPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e)) { m043F = 0; manage_friend_draw(1); } @@ -808,7 +808,7 @@ int daObjMknjD::Act_c::Execute(Mtx** i_mtx) { break; case 5: - if (dComIfGp_checkPlayerStatus1(0, 1) == 0) { + if (!dComIfGp_checkPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e)) { m043F = 0; } diff --git a/src/d/actor/d_a_obj_wood.cpp b/src/d/actor/d_a_obj_wood.cpp index 2e256e8ca..14531eb21 100644 --- a/src/d/actor/d_a_obj_wood.cpp +++ b/src/d/actor/d_a_obj_wood.cpp @@ -4,6 +4,7 @@ // #include "d/actor/d_a_obj_wood.h" +#include "d/d_wood.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" #include "f_op/f_op_actor_mng.h" diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 68f6a8860..685011151 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -22,6 +22,8 @@ #include "m_Do/m_Do_mtx.h" #include "d/d_material.h" +const Vec l_tact_top = {38.0f, 7.5f, 12.5f}; + const daPy_lk_c::TexAnmTableEntry daPy_lk_c::mTexAnmIndexTable[] = { {LKANM_BTP_TMABAA, LKANM_BTK_TMABA}, {LKANM_BTP_TMABAA, LKANM_BTK_TEUP}, @@ -1842,8 +1844,8 @@ const daPy_lk_c::AnmDataTableEntry daPy_lk_c::mAnmDataTable[] = { #include "d/actor/d_a_player_HIO.inc" // Needed for the .data section to match. -static f32 dummy1[3] = {1.0f, 1.0f, 1.0f}; -static f32 dummy2[3] = {1.0f, 1.0f, 1.0f}; +static Vec dummy_2100 = {1.0f, 1.0f, 1.0f}; +static Vec dummy_2080 = {1.0f, 1.0f, 1.0f}; char l_arcName[] = "Link"; @@ -2031,6 +2033,9 @@ static dCcD_SrcSph l_fan_wind_sph_src = { }, }; +Vec dummy_3569; +JGeometry::TVec3 l_hammer_splash_particle_scale(0.00002f, 0.00002f, 0.00002f); + daPy_lk_c::ProcInitTableEntry daPy_lk_c::mProcInitTable[] = { /* 0x00 */ {&daPy_lk_c::procScope, 0x00000001}, /* 0x01 */ {&daPy_lk_c::procSubjectivity, 0x20001005}, @@ -2333,6 +2338,7 @@ daPy_lk_c::ProcFunc daPy_lk_c::mDemoProcInitFuncTable[] = { GXColor l_freeze_fade_color = {0xFF, 0xFF, 0xFF, 0xFF}; +cXyz l_debug_keep_pos; csXyz l_debug_current_angle; csXyz l_debug_shape_angle; @@ -2344,6 +2350,13 @@ u8 daPy_matAnm_c::m_morf_frame; s16 daPy_dmEcallBack_c::m_timer = 0; u16 daPy_dmEcallBack_c::m_type = 3; +daPy_waterDropPcallBack_c daPy_waterDropEcallBack_c::m_pcallback; + +static mDoExt_offCupOnAupPacket l_offCupOnAupPacket1; +static mDoExt_offCupOnAupPacket l_offCupOnAupPacket2; +static mDoExt_onCupOffAupPacket l_onCupOffAupPacket1; +static mDoExt_onCupOffAupPacket l_onCupOffAupPacket2; + /* 80102E8C-80102EAC .text daPy_createHeap__FP10fopAc_ac_c */ static BOOL daPy_createHeap(fopAc_ac_c* i_this) { return static_cast(i_this)->createHeap(); @@ -3403,8 +3416,8 @@ BOOL daPy_lk_c::commonProcInit(daPy_lk_c::daPy_PROC proc) { mAcch.OnLineCheck(); } - dComIfGp_clearPlayerStatus0(0, ~0x00400010); - dComIfGp_clearPlayerStatus1(0, ~0xFFF48400); + dComIfGp_clearPlayerStatus0(0, ~(daPyStts0_BOOMERANG_WAIT_e | daPyStts0_UNK10_e)); + dComIfGp_clearPlayerStatus1(0, ~(daPyStts1_SAIL_e | daPyStts1_UNK8000_e | daPyStts1_UNK40000_e) & 0x000FFFFF); mGravity = daPy_HIO_autoJump_c0::m.field_0xC; m34F2 = 0; @@ -4405,8 +4418,8 @@ BOOL daPy_lk_c::playerDelete() { *mpCurrLinktex = mOtherLinktex; } - dComIfGp_clearPlayerStatus0(0, 0x00400000); // Waiting for the boomerang to come back - dComIfGp_clearPlayerStatus1(0, 0x00040000); + dComIfGp_clearPlayerStatus0(0, daPyStts0_BOOMERANG_WAIT_e); + dComIfGp_clearPlayerStatus1(0, daPyStts1_UNK40000_e); g_dComIfG_gameInfo.play.field_0x4947 = 0; cancelNoDamageMode(); @@ -4755,7 +4768,7 @@ void daPy_lk_c::playerInit() { mActorKeepRope.clearData(); m3628 = -1; m3634 = -1; - m362C = -1; + mTactZevPartnerPID = fpcM_ERROR_PROCESS_ID_e; m3630 = -1; ResTIMG* blur_img = (ResTIMG*)dComIfG_getObjectRes(l_arcName, LINK_BTI_BLUR); diff --git a/src/d/actor/d_a_player_ship.inc b/src/d/actor/d_a_player_ship.inc index 3a29b9466..b83b006f1 100644 --- a/src/d/actor/d_a_player_ship.inc +++ b/src/d/actor/d_a_player_ship.inc @@ -36,7 +36,7 @@ void daPy_lk_c::setShipRideArmAngle(int, J3DTransformInfo*) { /* 8013FE78-8013FEF4 .text checkShipRideUseItem__9daPy_lk_cFi */ int daPy_lk_c::checkShipRideUseItem(int param_1) { - if (dComIfGp_checkPlayerStatus0(0, 0x10000) && dComIfGp_getShipActor() != NULL) { + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && dComIfGp_getShipActor() != NULL) { if (param_1 != 0) { deleteEquipItem(0); } @@ -60,7 +60,7 @@ void daPy_lk_c::initShipRideUseItem(int param_1, int param_2) { if (param_1 == 1) { setOldRootQuaternion(0, 0x4000, 0); } - dComIfGp_setPlayerStatus0(0, 0x10000); + dComIfGp_setPlayerStatus0(0, daPyStts0_SHIP_RIDE_e); if (param_2 == 2) { setShipRidePosUseItem(); } else if (param_2 == 1) { diff --git a/src/d/actor/d_a_player_tact.inc b/src/d/actor/d_a_player_tact.inc index a6f83fbdf..3fc46eb69 100644 --- a/src/d/actor/d_a_player_tact.inc +++ b/src/d/actor/d_a_player_tact.inc @@ -11,80 +11,166 @@ */ #include "d/actor/d_a_player_main.h" +#include "JSystem/J3DGraphLoader/J3DAnmLoader.h" /* 8014D778-8014D7D4 .text getDayNightParamData__9daPy_lk_cFv */ u32 daPy_lk_c::getDayNightParamData() { - /* Nonmatching */ + u32 spawnType = dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) ? 2 : 0; + u32 eventIdx = 0xCC; + u32 extraParams = dComIfGp_getShipActor() != NULL ? 0x140 : 0x40; + return setParamData(current.roomNo, spawnType, eventIdx, extraParams); } /* 8014D7D4-8014D8AC .text setTactModel__9daPy_lk_cFv */ void daPy_lk_c::setTactModel() { - /* Nonmatching */ + if (mHeldItemType == WIND_TACT) + return; + + deleteEquipItem(0); + mHeldItemType = WIND_TACT; + JKRHeap* oldHeap = setItemHeap(); + + J3DModelData* modelData = initModel(&mpHeldItemModel, LINK_BDL_TAKT, 0x37221222); + u8* buffer = new(0x20) u8[0x400]; + dComIfGp_getAnmArchive()->readIdxResource(buffer, 0x400, LKANM_BRK_TTAKT); + mpHeldItemAnimBRK = (J3DAnmTevRegKey*)J3DAnmLoaderDataBase::load(buffer); + mpHeldItemAnimBRK->setFrame(0.0f); + mpHeldItemAnimBRK->searchUpdateMaterialID(modelData); + modelData->entryTevRegAnimator(mpHeldItemAnimBRK); + + mDoExt_setCurrentHeap(oldHeap); } /* 8014D8AC-8014D8F4 .text checkNpcStatus__9daPy_lk_cFv */ BOOL daPy_lk_c::checkNpcStatus() { - /* Nonmatching */ + daPy_py_c* partner = (daPy_py_c*)dComIfGp_getCb1Player(); + if (partner) { + if (!partner->checkNpcNotChange() && partner->current.roomNo == current.roomNo) { + return TRUE; + } + } + return FALSE; } /* 8014D8F4-8014D938 .text getTactPlayRightArmAnm__9daPy_lk_cFl */ -void daPy_lk_c::getTactPlayRightArmAnm(s32) { - /* Nonmatching */ +int daPy_lk_c::getTactPlayRightArmAnm(s32 r4) { + if (r4 == 1) + return LKANM_BCK_ACTIONTAKTRUP; + else if (r4 == 3) + return LKANM_BCK_ACTIONTAKTRDW; + else if (r4 == 2) + return LKANM_BCK_WAITTAKTRHANDL; + else if (r4 == 4) + return LKANM_BCK_WAITTAKTRHANDR; + else + return LKANM_BCK_WAITTAKT; } /* 8014D938-8014D97C .text getTactPlayLeftArmAnm__9daPy_lk_cFl */ -void daPy_lk_c::getTactPlayLeftArmAnm(s32) { - /* Nonmatching */ +int daPy_lk_c::getTactPlayLeftArmAnm(s32 r4) { + if (r4 == 1) + return LKANM_BCK_WAITTAKTLHANDU; + else if (r4 == 3) + return LKANM_BCK_WAITTAKTLHANDD; + else if (r4 == 2) + return LKANM_BCK_WAITTAKTLHANDL; + else if (r4 == 4) + return LKANM_BCK_WAITTAKTLHANDR; + else + return LKANM_BCK_WAITTAKT; } /* 8014D97C-8014D9A4 .text checkEndTactMusic__9daPy_lk_cCFv */ BOOL daPy_lk_c::checkEndTactMusic() const { - /* Nonmatching */ + if (mCurProc == PROC_TACT_PLAY_e && m34D0 != 0) { + return TRUE; + } + return FALSE; } /* 8014D9A4-8014D9D0 .text getTactMetronomeRate__9daPy_lk_cFv */ f32 daPy_lk_c::getTactMetronomeRate() { - /* Nonmatching */ + if (mCurProc == PROC_TACT_WAIT_e) { + return m35A0 / mDoAud_zelAudio_c::getTact().field_0x30; + } else { + return -1.0f; + } } /* 8014D9D0-8014D9F8 .text checkTactLastInput__9daPy_lk_cFv */ -int daPy_lk_c::checkTactLastInput() { - /* Nonmatching */ +BOOL daPy_lk_c::checkTactLastInput() { + if (mCurProc == PROC_TACT_WAIT_e && m34D2 != -1) { + return TRUE; + } + return FALSE; } /* 8014D9F8-8014DA78 .text setTactZev__9daPy_lk_cFUiiPc */ -void daPy_lk_c::setTactZev(unsigned int, int, char*) { - /* Nonmatching */ +void daPy_lk_c::setTactZev(unsigned int tactZevPartnerPID, int r30, char* r31) { + if (tactZevPartnerPID != fpcM_ERROR_PROCESS_ID_e) { + mDoAud_seStart(JA_SE_PRE_TAKT); + } + mTactZevPartnerPID = tactZevPartnerPID; + m34CC = r30; + m3494 = r31; } /* 8014DA78-8014DACC .text getTactTopPos__9daPy_lk_cFP4cXyz */ -int daPy_lk_c::getTactTopPos(cXyz*) { - /* Nonmatching */ +BOOL daPy_lk_c::getTactTopPos(cXyz* out) { + if (mHeldItemType != WIND_TACT || mpHeldItemModel == NULL) { + return FALSE; + } else { + MTXMultVec(mpHeldItemModel->getBaseTRMtx(), &l_tact_top, out); + return TRUE; + } } /* 8014DACC-8014DB00 .text getTactNormalWait__9daPy_lk_cCFv */ -void daPy_lk_c::getTactNormalWait() const { - /* Nonmatching */ +BOOL daPy_lk_c::getTactNormalWait() const { + if (mCurProc == PROC_TACT_WAIT_e && m3570 == -1 && m34D2 == -1) { + return TRUE; + } + return FALSE; } /* 8014DB00-8014DB2C .text getTactMusic__9daPy_lk_cCFv */ -int daPy_lk_c::getTactMusic() const { - /* Nonmatching */ +s32 daPy_lk_c::getTactMusic() const { + if (mCurProc == PROC_TACT_PLAY_e) + return m3570; + if (mCurProc == PROC_TACT_WAIT_e) + return m3574; + return -1; } /* 8014DB2C-8014DB74 .text getTactTimerCancel__9daPy_lk_cCFv */ int daPy_lk_c::getTactTimerCancel() const { - /* Nonmatching */ + if (mCurProc == PROC_TACT_WAIT_e && m35AC <= 0.0f) { + if (m35AC <= -100.0f) { + return 2; + } else { + return 1; + } + } + return 0; } /* 8014DB74-8014DB9C .text checkTactPlayMelody__9daPy_lk_cFv */ -int daPy_lk_c::checkTactPlayMelody() { - /* Nonmatching */ +BOOL daPy_lk_c::checkTactPlayMelody() { + if (mCurProc == PROC_TACT_PLAY_e && m34DA == 0) { + return TRUE; + } + return FALSE; } /* 8014DB9C-8014DBEC .text resetTactCount__9daPy_lk_cFv */ void daPy_lk_c::resetTactCount() { - /* Nonmatching */ + if (mCurProc == PROC_TACT_WAIT_e) { + m34D8 = 0; + m35A0 = 0.0f; + m34DA = 0; + m34D0 = -1; + mDoAud_tact_reset(); + } } /* 8014DBEC-8014E100 .text procTactWait_init__9daPy_lk_cFi */ diff --git a/src/d/actor/d_a_swtact.cpp b/src/d/actor/d_a_swtact.cpp index 5d16f20d0..7b337fbc1 100644 --- a/src/d/actor/d_a_swtact.cpp +++ b/src/d/actor/d_a_swtact.cpp @@ -113,9 +113,9 @@ s32 daSwTact_c::getAnswer() { /* 00000410-000006AC .text _execute__10daSwTact_cFv */ bool daSwTact_c::_execute() { daPy_py_c * player = daPy_getPlayerActorClass(); - u32 stts1 = dComIfGp_checkPlayerStatus1(0, 0x01); + u32 stts1 = dComIfGp_checkPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e); - if (player == NULL || dComIfGp_checkPlayerStatus0(0, 0x10000)) + if (player == NULL || dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) return true; if ((player->current.pos - current.pos).absXZ() <= getR()) { diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 8206aef87..eb355f175 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -16,6 +16,7 @@ #include "d/d_magma.h" #include "d/d_particle.h" #include "d/d_tree.h" +#include "d/d_wood.h" #include "f_op/f_op_scene_mng.h" #include "m_Do/m_Do_Reset.h" #include "m_Do/m_Do_audio.h" diff --git a/src/d/d_kankyo_rain.cpp b/src/d/d_kankyo_rain.cpp index c8269131d..d85cb80dc 100644 --- a/src/d/d_kankyo_rain.cpp +++ b/src/d/d_kankyo_rain.cpp @@ -837,7 +837,7 @@ void snap_sunmoon_proc(cXyz* pPos, int type) { dSnap_Obj snapObj; camera_class * pCamera = dComIfGp_getCamera(0); - if (dComIfGp_checkPlayerStatus1(0, 0x08) != 0) { + if (dComIfGp_checkPlayerStatus1(0, daPyStts1_PICTO_BOX_AIM_e)) { cXyz pos; pos.x = (pPos->x - pCamera->mLookat.mEye.x); pos.y = (pPos->y - pCamera->mLookat.mEye.y);