From 22a5cadd578840f592b41a6d341e8cf7afb7ebbe Mon Sep 17 00:00:00 2001 From: CovenEsme <84377742+CovenEsme@users.noreply.github.com> Date: Wed, 16 Oct 2024 23:45:25 +0000 Subject: [PATCH] d_t_sw_area OK (#68) * Initial attempt * Fix symbols for renamed story/itemflagMgrs * Improvements xD * OK with pragma * Update variable name --- config/SOUE01/rels/d_t_sw_areaNP/splits.txt | 2 + config/SOUE01/rels/d_t_sw_areaNP/symbols.txt | 14 ++-- config/SOUE01/symbols.txt | 4 +- configure.py | 2 +- include/d/t/d_t_sw_area.h | 38 +++++++++- include/toBeSorted/item_story_flag_manager.h | 8 +- src/REL/d/a/obj/d_a_obj_bamboo_island.cpp | 4 +- src/REL/d/a/obj/d_a_obj_junk_repairing.cpp | 2 +- src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp | 2 +- src/REL/d/t/d_t_dowsing.cpp | 12 +-- src/REL/d/t/d_t_genki_dws_tgt.cpp | 2 +- src/REL/d/t/d_t_sw_area.cpp | 76 +++++++++++++++++++ src/toBeSorted/counters/counter.cpp | 6 +- src/toBeSorted/counters/rupee_counter.cpp | 2 +- src/toBeSorted/dowsing_target.cpp | 36 ++++----- 15 files changed, 161 insertions(+), 49 deletions(-) diff --git a/config/SOUE01/rels/d_t_sw_areaNP/splits.txt b/config/SOUE01/rels/d_t_sw_areaNP/splits.txt index 522c60e0..777fd4a7 100644 --- a/config/SOUE01/rels/d_t_sw_areaNP/splits.txt +++ b/config/SOUE01/rels/d_t_sw_areaNP/splits.txt @@ -11,3 +11,5 @@ REL/executor.c: REL/d/t/d_t_sw_area.cpp: .text start:0x00000070 end:0x000003DC + .rodata start:0x00000000 end:0x0000000C + .data start:0x00000000 end:0x0000008C diff --git a/config/SOUE01/rels/d_t_sw_areaNP/symbols.txt b/config/SOUE01/rels/d_t_sw_areaNP/symbols.txt index 820747f3..95cb2a37 100644 --- a/config/SOUE01/rels/d_t_sw_areaNP/symbols.txt +++ b/config/SOUE01/rels/d_t_sw_areaNP/symbols.txt @@ -2,14 +2,14 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global _epilog = .text:0x00000030; // type:function size:0x2C scope:global _unresolved = .text:0x00000060; // type:function size:0x4 scope:global dTgSwArea_c_classInit__Fv = .text:0x00000070; // type:function size:0x4C -SwArea__init = .text:0x000000C0; // type:function size:0x98 -SwAreaT__isValidStoryFlag = .text:0x00000160; // type:function size:0x20 -SwAreaT__update = .text:0x00000180; // type:function size:0x1F8 +create__11dTgSwArea_cFv = .text:0x000000C0; // type:function size:0x98 +isValidStoryFlag__FUs = .text:0x00000160; // type:function size:0x20 +actorExecute__11dTgSwArea_cFv = .text:0x00000180; // type:function size:0x1F8 __dt__11dTgSwArea_cFv = .text:0x00000380; // type:function size:0x5C _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global -lbl_206_rodata_0 = .rodata:0x00000000; // type:object size:0xC data:float +lbl_206_rodata_0 = .rodata:0x00000000; // type:object size:0xC scope:local data:float g_profile_SW_AREA_TAG = .data:0x00000000; // type:object size:0x10 -lbl_206_data_10 = .data:0x00000010; // type:object size:0x4 data:4byte -lbl_206_data_14 = .data:0x00000014; // type:object size:0x4 data:4byte -lbl_206_data_18 = .data:0x00000018; // type:object size:0x74 +sDefaultRotX__11dTgSwArea_c = .data:0x00000010; // type:object size:0x4 data:4byte +sDefaultRotZ__11dTgSwArea_c = .data:0x00000014; // type:object size:0x4 data:4byte +__vt__11dTgSwArea_c = .data:0x00000018; // type:object size:0x74 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 09fdd4c4..a489a5f7 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -39944,8 +39944,8 @@ sTempFlags__16SceneflagManager = .sbss:0x805753E8; // type:object size:0x8 sInstance__15TBoxFlagManager = .sbss:0x805753F0; // type:object size:0x4 data:4byte sTBoxFlags__15TBoxFlagManager = .sbss:0x805753F4; // type:object size:0x4 sInstance__18EnemyDefeatManager = .sbss:0x805753F8; // type:object size:0x4 data:4byte -sInstance__16StoryFlagManager = .sbss:0x805753FC; // type:object size:0x4 data:4byte -sInstance__15ItemFlagManager = .sbss:0x80575400; // type:object size:0x4 data:4byte +sInstance__16StoryflagManager = .sbss:0x805753FC; // type:object size:0x4 data:4byte +sInstance__15ItemflagManager = .sbss:0x80575400; // type:object size:0x4 data:4byte DUNGEONFLAG_MANAGER = .sbss:0x80575404; // type:object size:0x4 data:4byte sInstance__15SkipflagManager = .sbss:0x80575408; // type:object size:0x4 data:4byte lbl_80575410 = .sbss:0x80575410; // type:object size:0x8 data:4byte diff --git a/configure.py b/configure.py index 54005b5c..01348dc3 100644 --- a/configure.py +++ b/configure.py @@ -1827,7 +1827,7 @@ config.libs = [ Rel(NonMatching, "d_t_spore", "REL/d/t/d_t_spore.cpp"), Rel(NonMatching, "d_t_stream", "REL/d/t/d_t_stream.cpp"), Rel(NonMatching, "d_t_sword_battle_game", "REL/d/t/d_t_sword_battle_game.cpp"), - Rel(NonMatching, "d_t_sw_area", "REL/d/t/d_t_sw_area.cpp"), + Rel(Matching, "d_t_sw_area", "REL/d/t/d_t_sw_area.cpp"), Rel(Matching, "d_t_tackle", "REL/d/t/d_t_tackle.cpp"), Rel(NonMatching, "d_t_telop", "REL/d/t/d_t_telop.cpp"), Rel(Matching, "d_t_timer", "REL/d/t/d_t_timer.cpp"), diff --git a/include/d/t/d_t_sw_area.h b/include/d/t/d_t_sw_area.h index d1c777af..2d4fc401 100644 --- a/include/d/t/d_t_sw_area.h +++ b/include/d/t/d_t_sw_area.h @@ -1,14 +1,48 @@ #ifndef D_T_SW_AREA_H #define D_T_SW_AREA_H -#include "d/a/d_a_base.h" +#include "d/t/d_tg.h" +#include "m/m_mtx.h" -class dTgSwArea_c : public dAcBase_c { +class dTgSwArea_c : public dTg_c { public: dTgSwArea_c() {} virtual ~dTgSwArea_c() {} + virtual int create() override; + virtual int actorExecute() override; + private: + u8 getSetSceneflag() { + return params; + } + + u8 getUnsetSceneflag() { + return params >> 0x8; + } + + u8 getIsPersistent() { + return params >> 0x10 & 1; + } + + mAng getSetStoryflag() { + return rotation.x & 0x7FF; + } + + mAng getUnsetStoryflag() { + return rotation.z & 0x7FF; + } + + mMtx_c area; + u8 setSceneflag; + u8 unsetSceneflag; + bool isTemporary; + f32 scale; + u16 setStoryflag; + u16 unsetStoryflag; + + static u32 sDefaultRotX; + static u32 sDefaultRotZ; }; #endif diff --git a/include/toBeSorted/item_story_flag_manager.h b/include/toBeSorted/item_story_flag_manager.h index 4ed5f275..669b9b4a 100644 --- a/include/toBeSorted/item_story_flag_manager.h +++ b/include/toBeSorted/item_story_flag_manager.h @@ -29,18 +29,18 @@ public: u16 getFlag(u16 flag) const; }; -class StoryFlagManager : public ItemStoryManagerBase { +class StoryflagManager : public ItemStoryManagerBase { FlagSpace storyFlags; public: - static StoryFlagManager *sInstance; + static StoryflagManager *sInstance; }; -class ItemFlagManager : public ItemStoryManagerBase { +class ItemflagManager : public ItemStoryManagerBase { FlagSpace itemFlags; public: - static ItemFlagManager *sInstance; + static ItemflagManager *sInstance; }; #endif diff --git a/src/REL/d/a/obj/d_a_obj_bamboo_island.cpp b/src/REL/d/a/obj/d_a_obj_bamboo_island.cpp index cf4be45c..910ade74 100644 --- a/src/REL/d/a/obj/d_a_obj_bamboo_island.cpp +++ b/src/REL/d/a/obj/d_a_obj_bamboo_island.cpp @@ -15,8 +15,8 @@ static const char *const sBambooIslandNames[] = { SPECIAL_ACTOR_PROFILE(OBJ_BAMBOO_ISLAND, dAcObambooIsland_c, fProfile::OBJ_BAMBOO_ISLAND, 0x01F9, 0, 3); void dAcObambooIsland_c::rideCallback(dBgW *unknown, dAcObjBase_c *actor, dAcObjBase_c *interactor) { - if (interactor->isActorPlayer() && actor != nullptr && StoryFlagManager::sInstance->getCounterOrFlag(284) == 0) { - StoryFlagManager::sInstance->setFlag(284); + if (interactor->isActorPlayer() && actor != nullptr && StoryflagManager::sInstance->getCounterOrFlag(284) == 0) { + StoryflagManager::sInstance->setFlag(284); } } diff --git a/src/REL/d/a/obj/d_a_obj_junk_repairing.cpp b/src/REL/d/a/obj/d_a_obj_junk_repairing.cpp index fb856d7c..5c2d574a 100644 --- a/src/REL/d/a/obj/d_a_obj_junk_repairing.cpp +++ b/src/REL/d/a/obj/d_a_obj_junk_repairing.cpp @@ -15,7 +15,7 @@ bool dAcOJunkRep_c::loadMdl(m3d::smdl_c &mdl, const char *name) { } bool dAcOJunkRep_c::getState() { - return StoryFlagManager::sInstance->getCounterOrFlag(0x143) == 1; + return StoryflagManager::sInstance->getCounterOrFlag(0x143) == 1; } bool dAcOJunkRep_c::createHeap() { diff --git a/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp b/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp index 8d651565..ffe36621 100644 --- a/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp +++ b/src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp @@ -125,7 +125,7 @@ const char *dAcOtoD3StoneFigure_c::getModelName() const { } bool dAcOtoD3StoneFigure_c::isStoneOfTrialsPlaced() const { - return StoryFlagManager::sInstance->getCounterOrFlag(22); + return StoryflagManager::sInstance->getCounterOrFlag(22); } void dAcOtoD3StoneFigure_c::doInteraction(s32 arg) { diff --git a/src/REL/d/t/d_t_dowsing.cpp b/src/REL/d/t/d_t_dowsing.cpp index 53679294..dee083da 100644 --- a/src/REL/d/t/d_t_dowsing.cpp +++ b/src/REL/d/t/d_t_dowsing.cpp @@ -48,21 +48,21 @@ int dTgDowsing_c::draw() { bool dTgDowsing_c::checkDowsing() const { if (!((mUntriggerStoryFlag == 0 || mUntriggerStoryFlag >= 0x7FF || - !StoryFlagManager::sInstance->getCounterOrFlag(mUntriggerStoryFlag)) && + !StoryflagManager::sInstance->getCounterOrFlag(mUntriggerStoryFlag)) && (mTriggerStoryFlag == 0 || mTriggerStoryFlag >= 0x7FF || - StoryFlagManager::sInstance->getCounterOrFlag(mTriggerStoryFlag)))) { + StoryflagManager::sInstance->getCounterOrFlag(mTriggerStoryFlag)))) { return false; } switch (mDowsingOption) { case TRIAL_0: - return ItemFlagManager::sInstance->getFlag(187) && !StoryFlagManager::sInstance->getCounterOrFlag(93); + return ItemflagManager::sInstance->getFlag(187) && !StoryflagManager::sInstance->getCounterOrFlag(93); case TRIAL_1: - return ItemFlagManager::sInstance->getFlag(188) && !StoryFlagManager::sInstance->getCounterOrFlag(97); + return ItemflagManager::sInstance->getFlag(188) && !StoryflagManager::sInstance->getCounterOrFlag(97); case TRIAL_2: - return ItemFlagManager::sInstance->getFlag(189) && !StoryFlagManager::sInstance->getCounterOrFlag(98); + return ItemflagManager::sInstance->getFlag(189) && !StoryflagManager::sInstance->getCounterOrFlag(98); case TRIAL_3: - return ItemFlagManager::sInstance->getFlag(193) && !StoryFlagManager::sInstance->getCounterOrFlag(99); + return ItemflagManager::sInstance->getFlag(193) && !StoryflagManager::sInstance->getCounterOrFlag(99); case PROPELLER: return DowsingTarget::hasPropellerDowsing(); case WATER_BASIN: return DowsingTarget::hasWaterBasinDowsing(); case CRYSTAL_BALL: return DowsingTarget::hasCrystalBallDowsing(); diff --git a/src/REL/d/t/d_t_genki_dws_tgt.cpp b/src/REL/d/t/d_t_genki_dws_tgt.cpp index 0af8f704..a354795b 100644 --- a/src/REL/d/t/d_t_genki_dws_tgt.cpp +++ b/src/REL/d/t/d_t_genki_dws_tgt.cpp @@ -9,7 +9,7 @@ SPECIAL_ACTOR_PROFILE(TAG_GENKI_DOWSING_TARGET, dTgGenkiDwsTgt_c, fProfile::TAG_GENKI_DOWSING_TARGET, 0x02A5, 0, 0); int dTgGenkiDwsTgt_c::create() { - u16 batQuestActivated = StoryFlagManager::sInstance->getCounterOrFlag(304); + u16 batQuestActivated = StoryflagManager::sInstance->getCounterOrFlag(304); if (batQuestActivated == 0 || !ScGame::sInstance->currentSpawnInfo.isNight()) { return FAILED; } diff --git a/src/REL/d/t/d_t_sw_area.cpp b/src/REL/d/t/d_t_sw_area.cpp index 0e40fcb8..ab8b67fb 100644 --- a/src/REL/d/t/d_t_sw_area.cpp +++ b/src/REL/d/t/d_t_sw_area.cpp @@ -1,3 +1,79 @@ #include "d/t/d_t_sw_area.h" +#include "d/a/d_a_player.h" +#include "toBeSorted/area_math.h" +#include "toBeSorted/sceneflag_manager.h" +#include "toBeSorted/item_story_flag_manager.h" SPECIAL_ACTOR_PROFILE(SW_AREA_TAG, dTgSwArea_c, fProfile::SW_AREA_TAG, 0x292, 0, 0); + +// sDefaultRotX got placed in .data despite being zero. +// There is a handy pragma for this but it's probably not +// the correct solution. +#pragma explicit_zero_data on +u32 dTgSwArea_c::sDefaultRotX = 0; +u32 dTgSwArea_c::sDefaultRotZ = 0; +#pragma explicit_zero_data off + +int dTgSwArea_c::create() { + setSceneflag = getSetSceneflag(); + unsetSceneflag = getUnsetSceneflag(); + isTemporary = !getIsPersistent(); + + setStoryflag = getSetStoryflag(); + unsetStoryflag = getUnsetStoryflag(); + rotation.x = sDefaultRotX; + rotation.z = sDefaultRotZ; + + matrixCreateFromPosRotYScale(area, position, rotation.y, mScale, nullptr, 0.0f); + return SUCCEEDED; +} + +bool isValidStoryFlag(u16 storyflag) { + bool valid = false; + + if (storyflag != 0 && storyflag < 0x7FF) { + valid = true; + } + + return valid; +} + +int dTgSwArea_c::actorExecute() { + if (checkIfVec3fInMatrix(area, dAcPy_c::LINK->position)) { + SceneflagManager::sInstance->setFlag(roomid, setSceneflag); + SceneflagManager::sInstance->unsetFlag(roomid, unsetSceneflag); + + if (isValidStoryFlag(setStoryflag)) { + StoryflagManager::sInstance->setFlag(setStoryflag); + } + + if (isValidStoryFlag(unsetStoryflag)) { + StoryflagManager::sInstance->unsetFlag(unsetStoryflag); + } + + if (scale < 1.0f) { + scale = 50.0f; + matrixCreateFromPosRotYScale(area, position, rotation.y, mScale, nullptr, scale); + } + } else { + if (scale > 1.0f) { + scale = 0.0f; + matrixCreateFromPosRotYScale(area, position, rotation.y, mScale, nullptr, scale); + } + + if (isTemporary) { + SceneflagManager::sInstance->unsetFlag(roomid, setSceneflag); + SceneflagManager::sInstance->setFlag(roomid, unsetSceneflag); + + if (isValidStoryFlag(setStoryflag)) { + StoryflagManager::sInstance->unsetFlag(setStoryflag); + } + + if (isValidStoryFlag(unsetStoryflag)) { + StoryflagManager::sInstance->setFlag(unsetStoryflag); + } + } + } + + return SUCCEEDED; +} diff --git a/src/toBeSorted/counters/counter.cpp b/src/toBeSorted/counters/counter.cpp index 3e5cd598..7bda499c 100644 --- a/src/toBeSorted/counters/counter.cpp +++ b/src/toBeSorted/counters/counter.cpp @@ -22,13 +22,13 @@ } /* 8016cd30 */ u16 Counter::getCommittedValue() { - return ItemFlagManager::sInstance->getCounterOrFlag(counterId | 0x4000); + return ItemflagManager::sInstance->getCounterOrFlag(counterId | 0x4000); } /* 8016cd50 */ u16 Counter::getUncommittedValue() { - return ItemFlagManager::sInstance->getUncommittedValue(counterId | 0x4000); + return ItemflagManager::sInstance->getUncommittedValue(counterId | 0x4000); } /* 8016cd70 */ void Counter::setValue(u16 num) { - ItemFlagManager::sInstance->setFlagOrCounterToValue(counterId | 0x4000, num); + ItemflagManager::sInstance->setFlagOrCounterToValue(counterId | 0x4000, num); } diff --git a/src/toBeSorted/counters/rupee_counter.cpp b/src/toBeSorted/counters/rupee_counter.cpp index 4832a4cb..0ccfa6eb 100644 --- a/src/toBeSorted/counters/rupee_counter.cpp +++ b/src/toBeSorted/counters/rupee_counter.cpp @@ -28,7 +28,7 @@ struct WalletStruct { }; const WalletStruct *wallet = &wallet_definitions[3]; for (; i < 4; i++, wallet--) { - if (ItemFlagManager::sInstance->getFlag(wallet->flag)) { + if (ItemflagManager::sInstance->getFlag(wallet->flag)) { return wallet->capacity; } } diff --git a/src/toBeSorted/dowsing_target.cpp b/src/toBeSorted/dowsing_target.cpp index ac5dae13..48ae7952 100644 --- a/src/toBeSorted/dowsing_target.cpp +++ b/src/toBeSorted/dowsing_target.cpp @@ -57,63 +57,63 @@ void DowsingTarget::getPosition(mVec3_c &position) { } bool DowsingTarget::hasZeldaDowsing() { - return StoryFlagManager::sInstance->getCounterOrFlag(100); + return StoryflagManager::sInstance->getCounterOrFlag(100); } bool DowsingTarget::hasKikwiDowsing() { - return StoryFlagManager::sInstance->getCounterOrFlag(56) && !StoryFlagManager::sInstance->getCounterOrFlag(57); + return StoryflagManager::sInstance->getCounterOrFlag(56) && !StoryflagManager::sInstance->getCounterOrFlag(57); } bool DowsingTarget::hasKeyPieceDowsing() { - return StoryFlagManager::sInstance->getCounterOrFlag(106) && !StoryFlagManager::sInstance->getCounterOrFlag(120); + return StoryflagManager::sInstance->getCounterOrFlag(106) && !StoryflagManager::sInstance->getCounterOrFlag(120); } bool DowsingTarget::hasDesertNodeDowsing() { - return StoryFlagManager::sInstance->getCounterOrFlag(107) && !StoryFlagManager::sInstance->getCounterOrFlag(8); + return StoryflagManager::sInstance->getCounterOrFlag(107) && !StoryflagManager::sInstance->getCounterOrFlag(8); } bool DowsingTarget::hasAnyTrialDowsing() { // TODO more complicated code - return ItemFlagManager::sInstance->getFlag(187) && !StoryFlagManager::sInstance->getCounterOrFlag(93) || - ItemFlagManager::sInstance->getFlag(188) && !StoryFlagManager::sInstance->getCounterOrFlag(97) || - ItemFlagManager::sInstance->getFlag(189) && !StoryFlagManager::sInstance->getCounterOrFlag(98) || - ItemFlagManager::sInstance->getFlag(193) && !StoryFlagManager::sInstance->getCounterOrFlag(99); + return ItemflagManager::sInstance->getFlag(187) && !StoryflagManager::sInstance->getCounterOrFlag(93) || + ItemflagManager::sInstance->getFlag(188) && !StoryflagManager::sInstance->getCounterOrFlag(97) || + ItemflagManager::sInstance->getFlag(189) && !StoryflagManager::sInstance->getCounterOrFlag(98) || + ItemflagManager::sInstance->getFlag(193) && !StoryflagManager::sInstance->getCounterOrFlag(99); } bool DowsingTarget::hasSacredWaterDowsing() { - return StoryFlagManager::sInstance->getCounterOrFlag(64) && !StoryFlagManager::sInstance->getCounterOrFlag(65); + return StoryflagManager::sInstance->getCounterOrFlag(64) && !StoryflagManager::sInstance->getCounterOrFlag(65); } bool DowsingTarget::hasSandshipDowsing() { - return StoryFlagManager::sInstance->getCounterOrFlag(271) && !StoryFlagManager::sInstance->getCounterOrFlag(14); + return StoryflagManager::sInstance->getCounterOrFlag(271) && !StoryflagManager::sInstance->getCounterOrFlag(14); } bool DowsingTarget::hasTadtoneDowsing() { - return StoryFlagManager::sInstance->getCounterOrFlag(81) && !StoryFlagManager::sInstance->getCounterOrFlag(18); + return StoryflagManager::sInstance->getCounterOrFlag(81) && !StoryflagManager::sInstance->getCounterOrFlag(18); } bool DowsingTarget::hasPropellerDowsing() { - return StoryFlagManager::sInstance->getCounterOrFlag(668); + return StoryflagManager::sInstance->getCounterOrFlag(668); } bool DowsingTarget::hasWaterBasinDowsing() { - return StoryFlagManager::sInstance->getCounterOrFlag(669); + return StoryflagManager::sInstance->getCounterOrFlag(669); } bool DowsingTarget::hasCrystalBallDowsing() { - return StoryFlagManager::sInstance->getCounterOrFlag(670); + return StoryflagManager::sInstance->getCounterOrFlag(670); } bool DowsingTarget::hasPumpkinDowsing() { - return StoryFlagManager::sInstance->getCounterOrFlag(680); + return StoryflagManager::sInstance->getCounterOrFlag(680); } bool DowsingTarget::hasNewPlantSpeciesDowsing() { - return StoryFlagManager::sInstance->getCounterOrFlag(681); + return StoryflagManager::sInstance->getCounterOrFlag(681); } bool DowsingTarget::hasPartyWheelDowsing() { - return StoryFlagManager::sInstance->getCounterOrFlag(682); + return StoryflagManager::sInstance->getCounterOrFlag(682); } bool DowsingTarget::hasDowsingInSlot(int slot) { @@ -131,7 +131,7 @@ bool DowsingTarget::hasDowsingInSlot(int slot) { } else if (slot == 2) { return hasCrystalBallDowsing() || hasPumpkinDowsing() || hasNewPlantSpeciesDowsing() || hasKikwiDowsing() || hasKeyPieceDowsing() || hasDesertNodeDowsing() || hasPartyWheelDowsing(); - } else if (StoryFlagManager::sInstance->getCounterOrFlag(DOWSING_TARGET_STORY_FLAGS[slot])) { + } else if (StoryflagManager::sInstance->getCounterOrFlag(DOWSING_TARGET_STORY_FLAGS[slot])) { // TODO small instruction shuffle return true; }