From 5b6788804a0d401aba6b2cfb6dc90e137e6dc02a Mon Sep 17 00:00:00 2001 From: elijah-thomas774 Date: Thu, 7 May 2026 10:02:46 -0400 Subject: [PATCH] dAcEKs_c + vt_1C0 name for dAcPy_c --- config/SOUE01/rels/d_a_e_ksNP/symbols.txt | 4 +- config/SOUE01/symbols.txt | 2 +- include/d/a/d_a_player.h | 4 -- include/d/a/e/d_a_e_ks.h | 18 +++++++-- include/d/d_player_act.h | 8 ++-- src/REL/d/a/e/d_a_e_ks.cpp | 37 +++++++++++++++++++ src/REL/d/a/e/d_a_e_remly.cpp | 3 +- src/d/d_pad.cpp | 2 +- src/d/lyt/meter/d_lyt_meter.cpp | 13 ++++--- src/d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp | 4 +- src/d/snd/d_snd_sound_equipment_callbacks.cpp | 2 +- 11 files changed, 72 insertions(+), 25 deletions(-) diff --git a/config/SOUE01/rels/d_a_e_ksNP/symbols.txt b/config/SOUE01/rels/d_a_e_ksNP/symbols.txt index 7fd527e4..33d4f584 100644 --- a/config/SOUE01/rels/d_a_e_ksNP/symbols.txt +++ b/config/SOUE01/rels/d_a_e_ksNP/symbols.txt @@ -32,8 +32,8 @@ fn_155_1C80 = .text:0x00001C80; // type:function size:0x5E4 fn_155_2270 = .text:0x00002270; // type:function size:0x754 fn_155_29D0 = .text:0x000029D0; // type:function size:0x1A8 fn_155_2B80 = .text:0x00002B80; // type:function size:0x1E0 -fn_155_2D60 = .text:0x00002D60; // type:function size:0x138 -fn_155_2EA0 = .text:0x00002EA0; // type:function size:0x118 +fn_155_2D60__8dAcEKs_cFv = .text:0x00002D60; // type:function size:0x138 +fn_155_2EA0__8dAcEKs_cFv = .text:0x00002EA0; // type:function size:0x118 isOutsideRange__8dAcEKs_cFv = .text:0x00002FC0; // type:function size:0x84 isNotWaitingNorDamage__8dAcEKs_cFv = .text:0x00003050; // type:function size:0xAC isTargeted__8dAcEKs_cFv = .text:0x00003100; // type:function size:0xF4 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 4891a582..bad4ce91 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -978,7 +978,7 @@ polyAttrsToGroundEffectIdx__14dJEffManager_cFll = .text:0x8002A380; // type:func spawnGroundEffect__14dJEffManager_cFRC7mVec3_cUcUcRC7mVec3_clff = .text:0x8002A450; // type:function size:0x1C0 spawnHitMarkEffect__14dJEffManager_cFiR8cCcD_ObjPC7mVec3_cb = .text:0x8002A610; // type:function size:0x678 fn_8002AC90 = .text:0x8002AC90; // type:function size:0x460 -vt_0x1C0__17daPlayerActBase_cCFv = .text:0x8002B0F0; // type:function size:0x8 +getBeetleInFlight__17daPlayerActBase_cCFv = .text:0x8002B0F0; // type:function size:0x8 init__14dWaterEffect_cFP12dAcObjBase_cfff = .text:0x8002B100; // type:function size:0x14 execute__14dWaterEffect_cFff = .text:0x8002B120; // type:function size:0x1F4 drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter = .text:0x8002B320; // type:function size:0x4 diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h index c1d45efd..e5e6669c 100644 --- a/include/d/a/d_a_player.h +++ b/include/d/a/d_a_player.h @@ -91,10 +91,6 @@ public: return mHeldResFile; } - inline bool hasvt_0x1C0() const { - return vt_0x1C0() != nullptr; - } - inline bool isAffectedByStaminaPotion() const { return FileManager::GetInstance()->hasStaminaPotionNormal() && getRidingActorType() != RIDING_BOAT; } diff --git a/include/d/a/e/d_a_e_ks.h b/include/d/a/e/d_a_e_ks.h index a16652f1..21f29941 100644 --- a/include/d/a/e/d_a_e_ks.h +++ b/include/d/a/e/d_a_e_ks.h @@ -53,6 +53,9 @@ public: /* 0 -> blink_1, 1 -> blink_2, 2 -> blink_3*/ void setBlink(u8 blink); void setBlinkChecked(u8 blink); + bool fn_155_29D0(s32 p1); + bool fn_155_2D60(bool b, s32 p1); + bool fn_155_2EA0(); bool isOutsideRange(); bool isNotWaitingNorDamage(); bool isTargeted(); @@ -101,10 +104,17 @@ private: /* 0xB8C */ u8 _0xB8C[0xBB0 - 0xB8C]; /* 0xBB0 */ mVec3_c field_0xBB0; /* 0xBBC */ mVec3_c field_0xBBC; - /* 0xBC8 */ u8 _0xBC8[0xC34 - 0xBC8]; - /* 0xD32 */ mAng mPitch_0xC34; - /* 0xD32 */ mAng mYaw_0xC36; - /* 0xC38 */ u8 _0xC38[0xD20 - 0xC38]; + /* 0xBC8 */ u8 _0xBC8[0xBF8 - 0xBC8]; + /* 0xBF8 */ mVec3_c field_0xBF8; + /* 0xC04 */ u8 _0xC04[0xC28 - 0xC04]; + /* 0xC28 */ mVec3_c field_0xC28; + /* 0xC34 */ mAng mPitch_0xC34; + /* 0xC36 */ mAng mYaw_0xC36; + /* 0xC38 */ u8 _0xC38[0xC3C - 0xC38]; + /* 0xC3C */ f32 field_0xC3C; + /* 0xC40 */ f32 field_0xC40; + /* 0xC44 */ u8 _0xC44[0xD1C - 0xC44]; + /* 0xD1C */ f32 field_0xD1C; /* 0xD20 */ f32 field_0xD20; /* 0xD24 */ u8 _0xD24[0xD32 - 0xD24]; /* 0xD32 */ s16 mTimer; diff --git a/include/d/d_player_act.h b/include/d/d_player_act.h index 1d4a0096..a9a9a2b3 100644 --- a/include/d/d_player_act.h +++ b/include/d/d_player_act.h @@ -250,7 +250,9 @@ public: /* vt 0x1BC */ virtual UNKWORD vt_0x1BC() { return 0; } - /* vt 0x1C0 */ virtual void *vt_0x1C0() const { + + // I believe this can only return the Beetle Actor in-flight (not on hand) + /* vt 0x1C0 */ virtual dAcObjBase_c *getBeetleInFlight() const { return nullptr; } /* vt 0x1C4 */ virtual UNKWORD getActorInActorRef1() { @@ -648,8 +650,8 @@ public: return mSpecificAttackDirection; } - inline bool hasvt_0x1C0() const { - return vt_0x1C0() != nullptr; + inline bool isBeetleInFlight() const { + return getBeetleInFlight() != nullptr; } static s32 getCurrentSwordTypeInline() { diff --git a/src/REL/d/a/e/d_a_e_ks.cpp b/src/REL/d/a/e/d_a_e_ks.cpp index c6667fcd..fd0ae575 100644 --- a/src/REL/d/a/e/d_a_e_ks.cpp +++ b/src/REL/d/a/e/d_a_e_ks.cpp @@ -146,6 +146,43 @@ f32 dAcEKs_c::getLineCrossYRange(const mVec3_c &pos, f32 range) { // idk. +bool dAcEKs_c::fn_155_2D60(bool b, s32 p1) { + f32 f0 = field_0xC40 + 1500.f; + f32 f1 = field_0xC3C + 700.f; + dAcObjBase_c *pObj = attackPlayerOrScrapper(0.f); + field_0xBF8.set(pObj->mPosition); + if (field_0xBF8.squareDistanceToXZ(mPosition) < f1 * f1) { + f32 f2 = field_0xBF8.y - mPosition.y; + if (f2 <= 0.f && f2 > -f0) { + if (b) { + if (!fn_155_29D0(p1)) { + return true; + } + } else { + return true; + } + } + } + return false; +} + +bool dAcEKs_c::fn_155_2EA0() { + f32 f0 = field_0xC40 + 1500.f; + f32 f1 = field_0xC3C + 700.f; + dAcObjBase_c *pObj = dAcPy_c::GetLink()->getBeetleInFlight(); + if (pObj) { + field_0xC28.set(pObj->mPosition); + field_0xD1C = field_0xC28.squareDistanceToXZ(mPosition); + if (field_0xD1C < f1 * f1) { + f32 f2 = field_0xC28.y - mPosition.y; + if (f2 <= 0.f && f2 > -f0) { + return true; + } + } + } + return false; +} + bool dAcEKs_c::isOutsideRange() { return attackPlayerOrScrapper(0.f)->mPosition.squareDistanceToXZ(mPosition) > 360000.f; } diff --git a/src/REL/d/a/e/d_a_e_remly.cpp b/src/REL/d/a/e/d_a_e_remly.cpp index 5b363fa1..90ad9b28 100644 --- a/src/REL/d/a/e/d_a_e_remly.cpp +++ b/src/REL/d/a/e/d_a_e_remly.cpp @@ -1999,8 +1999,7 @@ bool dAcEremly_c::calcHeadRotation(bool lookAtTarget, const mAng &range) { mVec3_c outpos; if (!dLightEnv_c::GetPInstance()->check_BPM8(&mPosition, &outpos)) { - // TODO - Return type pPlayer->vt_0x1C0() - dAcBase_c *pActor = static_cast(pPlayer->vt_0x1C0()); + dAcObjBase_c *pActor = pPlayer->getBeetleInFlight(); if (pActor) { field_0xA50.set(pActor->mPosition); field_0xB56 = 30; diff --git a/src/d/d_pad.cpp b/src/d/d_pad.cpp index d20ec8f5..c49a6f0d 100644 --- a/src/d/d_pad.cpp +++ b/src/d/d_pad.cpp @@ -225,7 +225,7 @@ void beginPad_BR() { if ((dCsGame_c::GetInstance() != nullptr && dCsGame_c::GetInstance()->shouldDraw() && !ex.field_0x22D0) || (dAcPy_c::GetLink() != nullptr && dAcPy_c::GetLink()->checkActionFlagsCont(0x400 | 0x100 | 0x80 | 0x40 | 0x10 | 0x4 | 0x2 | 0x1) && - !dAcPy_c::GetLink()->vt_0x1C0() && !dLytMeter_c::GetMain()->getField_0x1377F()) || + !dAcPy_c::GetLink()->getBeetleInFlight() && !dLytMeter_c::GetMain()->getField_0x1377F()) || ex.field_0x22CF) { if (dLytControlGame_c::getInstance() && dLytControlGame_c::getInstance()->isStateNormal()) { if (!(dPadManager_c::GetInstance() && dPadManager_c::GetInstance()->getField_0x25())) { diff --git a/src/d/lyt/meter/d_lyt_meter.cpp b/src/d/lyt/meter/d_lyt_meter.cpp index 4de66635..25798d54 100644 --- a/src/d/lyt/meter/d_lyt_meter.cpp +++ b/src/d/lyt/meter/d_lyt_meter.cpp @@ -1179,8 +1179,9 @@ void dLytMeterMain_c::checkPaneVisibility() { || (MinigameManager::isInMinigameState(MinigameManager::TRIAL_TIME_ATTACK) && LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_B) == LytDoButtonRelated::ACT_IE_NONE) || - (dLytMeter_c::getField_0x13B66() || (shouldBeHiddenGeneral() && !mItemSelect.fn_800F02F0() && !isDoingSkyKeepPuzzle()) || - isInModeMap() || isInModePause())) { + (dLytMeter_c::getField_0x13B66() || + (shouldBeHiddenGeneral() && !mItemSelect.fn_800F02F0() && !isDoingSkyKeepPuzzle()) || isInModeMap() || + isInModePause())) { mPanesVisible[METER_ANIM_ITEM_SELECT] = false; } @@ -1278,7 +1279,8 @@ void dLytMeterMain_c::checkPaneVisibility() { MinigameManager::isInMinigameState(MinigameManager::TRIAL_TIME_ATTACK) || MinigameManager::isInMinigameState(MinigameManager::PUMPKIN_ARCHERY) || MinigameManager::isInMinigameState(MinigameManager::SPIRAL_CHARGE_TUTORIAL) || - MinigameManager::isInMinigameState(MinigameManager::ROLLERCOASTER) || shouldBeHiddenGeneral() || mIsInSwordDrawEvent) + MinigameManager::isInMinigameState(MinigameManager::ROLLERCOASTER) || shouldBeHiddenGeneral() || + mIsInSwordDrawEvent) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || (dLytSimpleWindow_c::getInstance() != nullptr && dLytSimpleWindow_c::getInstance()->isOutputText()) || @@ -1352,7 +1354,7 @@ void dLytMeterMain_c::checkPaneVisibility() { } } - if ((dAcPy_c::GetLink()->hasvt_0x1C0() || dAcPy_c::GetLink()->checkActionFlagsCont(0x10) || + if ((dAcPy_c::GetLink()->isBeetleInFlight() || dAcPy_c::GetLink()->checkActionFlagsCont(0x10) || (shouldBeHiddenGeneral() && !mHelpOpen) || mGanbariGauge.fn_80104760() || MinigameManager::isInMinigameState(MinigameManager::FUN_FUN_ISLAND) || @@ -1490,7 +1492,8 @@ void dLytMeterMain_c::checkPaneVisibility() { if (!field_0x137B2 || dLytAreaCaption_c::getVisible() || fn_800D5380(false) || MinigameManager::isInAnyMinigame() || mIsInSwordDrawEvent - || shouldBeHiddenGeneral() || dLytMeter_c::getField_0x13B66() || fn_800D5420() || isInModeMap() || isInModePause()) { + || shouldBeHiddenGeneral() || dLytMeter_c::getField_0x13B66() || fn_800D5420() || isInModeMap() || + isInModePause()) { mDrinkVisible = false; } diff --git a/src/d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp b/src/d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp index da100999..6a7d7618 100644 --- a/src/d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp +++ b/src/d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp @@ -600,7 +600,7 @@ bool dLytMeterGanbariGauge_c::execute() { mAnm[GANBARI_ANIM_DRINK].setFrame(drinkFrame); mAnm[GANBARI_ANIM_DRINK].setAnimEnable(true); - if (!EventManager::isInEvent() && !dAcPy_c::GetLink()->hasvt_0x1C0() && + if (!EventManager::isInEvent() && !dAcPy_c::GetLink()->isBeetleInFlight() && !dAcPy_c::GetLink()->checkActionFlagsCont(0x10) && (d3d::isOnScreen(dAcPy_c::GetLink()->mPositionCopy3) || fn_80104710(false) || isCrawling()) && *mStateMgrWheel.getStateID() != StateID_Full && *mStateMgrMain.getStateID() == StateID_InvisibleWait && @@ -609,7 +609,7 @@ bool dLytMeterGanbariGauge_c::execute() { } else if (!EventManager::isInEvent() && *mStateMgrWheel.getStateID() == StateID_Full && *mStateMgrWheel.getOldStateID() != StateID_Full && *mStateMgrMain.getStateID() == StateID_Wait) { mStateMgrMain.changeState(StateID_OutWait); - } else if ((EventManager::isInEvent() || dAcPy_c::GetLink()->hasvt_0x1C0() || + } else if ((EventManager::isInEvent() || dAcPy_c::GetLink()->isBeetleInFlight() || dAcPy_c::GetLink()->checkActionFlagsCont(0x10) || (!d3d::isOnScreen(dAcPy_c::GetLink()->mPositionCopy3) && !fn_80104710(false) && !isCrawling())) && *mStateMgrMain.getStateID() == StateID_Wait) { diff --git a/src/d/snd/d_snd_sound_equipment_callbacks.cpp b/src/d/snd/d_snd_sound_equipment_callbacks.cpp index d5260734..75d9e10f 100644 --- a/src/d/snd/d_snd_sound_equipment_callbacks.cpp +++ b/src/d/snd/d_snd_sound_equipment_callbacks.cpp @@ -27,7 +27,7 @@ void dSndSourceEquipment_c::cbBeFlyLv(dSndSeSound_c *sound, dSoundSource_c *sour } void dSndSourceEquipment_c::cbBeThrowRc(dSndSeSound_c *sound, dSoundSource_c *source, nw4r::snd::SoundHandle &handle) { - if (dAcPy_c::GetLink() != nullptr && !dAcPy_c::GetLink()->hasvt_0x1C0()) { + if (dAcPy_c::GetLink() != nullptr && !dAcPy_c::GetLink()->isBeetleInFlight()) { handle.Stop(10); return; }