summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCole Barker <41011709+coleslaw456@users.noreply.github.com>2026-02-23 21:10:36 -0500
committerGitHub <noreply@github.com>2026-02-23 21:10:36 -0500
commit1f8ae19f7856200322780799b6bfac6e85a07b33 (patch)
tree748d2685d21cc163fafc6862982fd2be90872083
parente722e6f9b3c3a4ef48ec11aa4567984061cde388 (diff)
Apply suggestions from code review
Co-authored-by: Elijah Thomas <42302100+elijah-thomas774@users.noreply.github.com>
-rw-r--r--config/SOUE01/rels/d_t_defeat_bossNP/symbols.txt9
-rw-r--r--include/d/t/d_t_defeat_boss.h13
-rw-r--r--src/REL/d/t/d_t_defeat_boss.cpp107
3 files changed, 60 insertions, 69 deletions
diff --git a/config/SOUE01/rels/d_t_defeat_bossNP/symbols.txt b/config/SOUE01/rels/d_t_defeat_bossNP/symbols.txt
index da091c9e..732d3c42 100644
--- a/config/SOUE01/rels/d_t_defeat_bossNP/symbols.txt
+++ b/config/SOUE01/rels/d_t_defeat_bossNP/symbols.txt
@@ -5,11 +5,14 @@ dTgDefeatBoss_c_classInit__Fv = .text:0x00000070; // type:function size:0x4C
fn_494_C0__15dTgDefeatBoss_cFv = .text:0x000000C0; // type:function size:0xC
fn_494_D0__15dTgDefeatBoss_cFv = .text:0x000000D0; // type:function size:0x84
init__15dTgDefeatBoss_cFv = .text:0x00000160; // type:function size:0xCC
-update__15dTgDefeatBoss_cFv = .text:0x00000230; // type:function size:0x120
+getDungeonFlagIndex__15dTgDefeatBoss_cFRUl = .text:0x000000C0; // type:function size:0xC
+checkDungeonFlag__15dTgDefeatBoss_cFv = .text:0x000000D0; // type:function size:0x84
+create__15dTgDefeatBoss_cFv = .text:0x00000160; // type:function size:0xCC
+actorExecute__15dTgDefeatBoss_cFv = .text:0x00000230; // type:function size:0x120
getSceneflag__15dTgDefeatBoss_cFv = .text:0x00000350; // type:function size:0xC
-fn_494_360__15dTgDefeatBoss_cFv = .text:0x00000360; // type:function size:0xC
+getSceneflagPolarity__15dTgDefeatBoss_cFv = .text:0x00000360; // type:function size:0xC
getStoryflag__15dTgDefeatBoss_cFv = .text:0x00000370; // type:function size:0xC
-fn_494_380__15dTgDefeatBoss_cFv = .text:0x00000380; // type:function size:0xC
+getStoryflagPolarity__15dTgDefeatBoss_cFv = .text:0x00000380; // type:function size:0xC
__dt__15dTgDefeatBoss_cFv = .text:0x00000390; // type:function size:0x5C
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
diff --git a/include/d/t/d_t_defeat_boss.h b/include/d/t/d_t_defeat_boss.h
index 6fb783e6..1caa51a6 100644
--- a/include/d/t/d_t_defeat_boss.h
+++ b/include/d/t/d_t_defeat_boss.h
@@ -13,14 +13,19 @@ public:
u16 getStoryflag();
u16 fn_494_380();
static void getDungeonFlagIndex(u32 &outFlagIdx);
- bool fn_494_D0();
- bool init();
+ bool checkDungeonFlag();
+ virtual int create() override;
+ virtual int actorExecute() override;
- /* 0xFC */ u8 var8_1;//area?
- /* 0xFD */ u8 var8_2;//scene flag? I assume this is only 2 byte
+ u16 getSceneflag();
+ s32 getSceneflagPolarity();
+ u32 getStoryflag();
+ s32 getStoryflagPolarity();
private:
+ /* 0xFC */ s8 mSceneflagPolarity;
+ /* 0xFD */ s8 mStoryflagPolarity;
};
diff --git a/src/REL/d/t/d_t_defeat_boss.cpp b/src/REL/d/t/d_t_defeat_boss.cpp
index 1d7ff4d6..b088493f 100644
--- a/src/REL/d/t/d_t_defeat_boss.cpp
+++ b/src/REL/d/t/d_t_defeat_boss.cpp
@@ -1,8 +1,9 @@
#include "d/t/d_t_defeat_boss.h"
-#include "d/flag/storyflag_manager.h"
-#include "d/flag/sceneflag_manager.h"
-#include "d/flag/dungeonflag_manager.h"
+
#include "common.h"
+#include "d/flag/dungeonflag_manager.h"
+#include "d/flag/sceneflag_manager.h"
+#include "d/flag/storyflag_manager.h"
SPECIAL_ACTOR_PROFILE(TAG_DEFEAT_BOSS, dTgDefeatBoss_c, fProfile::TAG_DEFEAT_BOSS, 0x29E, 0, 0);
@@ -10,58 +11,36 @@ void dTgDefeatBoss_c::fn_494_C0() {
mID = (fBaseID_e)0x3;
return;
-
+void dTgDefeatBoss_c::getDungeonFlagIndex(u32 &outFlagIdx) {
+ outFlagIdx = 0x3;
}
-bool dTgDefeatBoss_c::fn_494_D0() {//checks if valid dungeion flag?
-
- DungeonflagManager* pDVar2;
- u16 sVar4;
-
- fn_494_C0();
- pDVar2 = DungeonflagManager::sInstance;
- sVar4 = pDVar2->getCounterOrFlag(mID, (u32)8);
-
- return sVar4 != 0;
-
+bool dTgDefeatBoss_c::checkDungeonFlag() {
+ u32 dungeonFlagIdx;
+ getDungeonFlagIndex(dungeonFlagIdx);
+ return DungeonflagManager::sInstance->getCounterOrFlag(dungeonFlagIdx, 8) != 0;
}
-bool dTgDefeatBoss_c::init() {
+int dTgDefeatBoss_c::create() {
+ if (checkDungeonFlag()) {
+ return FAILED;
+ }
- u16 uVar1;
- u16 uVar2;
- u16 iVar3;
- u16 bVar4;
- u32 uVar5;
- u16 counterIdx;
+ mSceneflagPolarity = getSceneflagPolarity();
+ if (getSceneflag() >= 0xFF) {
+ mSceneflagPolarity = -1;
+ }
- bVar4 = fn_494_D0();
- if (bVar4) {
- uVar1 = 2;
+ mStoryflagPolarity = getStoryflagPolarity();
+ if (!StoryflagManager::sInstance->checkFlagValid(getStoryflag())) {
+ mStoryflagPolarity = -1;
}
- else {
- uVar5 = fn_494_360();
- var8_1 = uVar5;
- uVar2 = getSceneflag();
- if ((uVar2 & 0xffff) > 0xfe) {
- var8_1 = 0xff;
- }
- uVar5 = fn_494_380();
- var8_2 = uVar5;
- counterIdx = getStoryflag();
- iVar3 = StoryflagManager::sInstance->checkFlagValid(counterIdx);
- if (iVar3 == 0) {
- var8_2 = 0xff;
- }
- if (var8_1 == -1 && var8_2 == -1) {
- uVar1 = 2;
- }
- else {
- uVar1 = 1;
- }
+
+ if (mSceneflagPolarity == -1 && mStoryflagPolarity == -1) {
+ return FAILED;
}
- return uVar1;
+ return SUCCEEDED;
}
int dTgDefeatBoss_c::update() {
@@ -85,24 +64,28 @@ int dTgDefeatBoss_c::update() {
SceneflagManager::sInstance->setFlag
(/*SceneflagManager::sInstance,*/ (u16)/*(param_1->base).members.roomid*/mRoomID & 0xffff,
(u16)uVar2 & 0xffff);
- break;
+int dTgDefeatBoss_c::actorExecute() {
+ if (checkDungeonFlag()) {
+ switch (mSceneflagPolarity) {
+ case 0x0: {
+ SceneflagManager::sInstance->unsetFlag(mRoomID, getSceneflag());
+ } break;
+ case 0x1: {
+ SceneflagManager::sInstance->setFlag(mRoomID, getSceneflag());
+ } break;
}
- //pSVar1 = StoryflagManager::sInstance;
- switch (var8_2) {
- case 0x0:
- pSVar1 = StoryflagManager::sInstance;
- SVar3 = getStoryflag();
- pSVar1->unsetFlag(SVar3);
- break;
- case 0x1:
- pSVar1 = StoryflagManager::sInstance;
- SVar3 = getStoryflag();
- pSVar1->setFlag(SVar3);
- break;
+ switch (mStoryflagPolarity) {
+ case 0x0: {
+ StoryflagManager *pStoryflagMgr = StoryflagManager::sInstance;
+ pStoryflagMgr->unsetFlag(getStoryflag());
+ } break;
+ case 0x1: {
+ StoryflagManager *pStoryflagMgr = StoryflagManager::sInstance;
+ pStoryflagMgr->setFlag(getStoryflag());
+ } break;
}
fBase_c::deleteRequest();
}
-
return SUCCEEDED;
}
@@ -111,12 +94,12 @@ u16 dTgDefeatBoss_c::getSceneflag() {
}
u16 dTgDefeatBoss_c::fn_494_360() {
-
+s32 dTgDefeatBoss_c::getSceneflagPolarity() {
return mParams >> 0x8 & 0x1;
}
-u16 dTgDefeatBoss_c::getStoryflag() {
+u32 dTgDefeatBoss_c::getStoryflag() {
return mParams >> 9 & 0xffff;
}