summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCovenEsme <84377742+CovenEsme@users.noreply.github.com>2024-10-16 23:45:25 +0000
committerGitHub <noreply@github.com>2024-10-16 19:45:25 -0400
commit22a5cadd578840f592b41a6d341e8cf7afb7ebbe (patch)
tree71c5dfd8b17af536fe51a34a4657f7a7322cd278 /src
parent1eaa124714e6328dc7e96841e2888e2b28093586 (diff)
d_t_sw_area OK (#68)
* Initial attempt * Fix symbols for renamed story/itemflagMgrs * Improvements xD * OK with pragma * Update variable name
Diffstat (limited to 'src')
-rw-r--r--src/REL/d/a/obj/d_a_obj_bamboo_island.cpp4
-rw-r--r--src/REL/d/a/obj/d_a_obj_junk_repairing.cpp2
-rw-r--r--src/REL/d/a/obj/d_a_obj_toD3_stone_figure.cpp2
-rw-r--r--src/REL/d/t/d_t_dowsing.cpp12
-rw-r--r--src/REL/d/t/d_t_genki_dws_tgt.cpp2
-rw-r--r--src/REL/d/t/d_t_sw_area.cpp76
-rw-r--r--src/toBeSorted/counters/counter.cpp6
-rw-r--r--src/toBeSorted/counters/rupee_counter.cpp2
-rw-r--r--src/toBeSorted/dowsing_target.cpp36
9 files changed, 109 insertions, 33 deletions
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;
}