summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCole Barker <coleslawscout@gmail.com>2026-02-15 17:30:21 -0500
committerCole Barker <coleslawscout@gmail.com>2026-02-15 17:30:21 -0500
commita6eeeedd34283e283e6d878cf62fca3cafae7adb (patch)
treee6f28c89a80f5689b8c48424c14e920bf0379f60
parent79bc8e9333b173face96617164f21f97983c5286 (diff)
mostly matching d_t_defeat_boss.cpp
-rw-r--r--config/SOUE01/rels/d_t_defeat_bossNP/symbols.txt18
-rw-r--r--include/d/t/d_t_defeat_boss.h14
-rw-r--r--src/REL/d/t/d_t_defeat_boss.cpp125
3 files changed, 148 insertions, 9 deletions
diff --git a/config/SOUE01/rels/d_t_defeat_bossNP/symbols.txt b/config/SOUE01/rels/d_t_defeat_bossNP/symbols.txt
index 7c8d6338..da091c9e 100644
--- a/config/SOUE01/rels/d_t_defeat_bossNP/symbols.txt
+++ b/config/SOUE01/rels/d_t_defeat_bossNP/symbols.txt
@@ -2,16 +2,16 @@ _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
dTgDefeatBoss_c_classInit__Fv = .text:0x00000070; // type:function size:0x4C
-fn_494_C0 = .text:0x000000C0; // type:function size:0xC
-fn_494_D0 = .text:0x000000D0; // type:function size:0x84
-TgDefeatBoss__init = .text:0x00000160; // type:function size:0xCC
-TgDefeatBoss__update = .text:0x00000230; // type:function size:0x120
-TgDefeatBoss__getSceneflag = .text:0x00000350; // type:function size:0xC
-fn_494_360 = .text:0x00000360; // type:function size:0xC
-TgDefeatBoss__getStoryflag = .text:0x00000370; // type:function size:0xC
-fn_494_380 = .text:0x00000380; // type:function size:0xC
+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
+getSceneflag__15dTgDefeatBoss_cFv = .text:0x00000350; // type:function size:0xC
+fn_494_360__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
__dt__15dTgDefeatBoss_cFv = .text:0x00000390; // type:function size:0x5C
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
g_profile_TAG_DEFEAT_BOSS = .data:0x00000000; // type:object size:0x10
-lbl_494_section4_10 = .data:0x00000010; // type:object size:0x74
+__vt__15dTgDefeatBoss_c = .data:0x00000010; // type:object size:0x74
diff --git a/include/d/t/d_t_defeat_boss.h b/include/d/t/d_t_defeat_boss.h
index 35d66f5b..f77af5fd 100644
--- a/include/d/t/d_t_defeat_boss.h
+++ b/include/d/t/d_t_defeat_boss.h
@@ -7,8 +7,22 @@ class dTgDefeatBoss_c : public dTg_c {
public:
dTgDefeatBoss_c() {}
virtual ~dTgDefeatBoss_c() {}
+ virtual int update() override;
+ u16 getSceneflag();
+ u16 fn_494_360();
+ u16 getStoryflag();
+ u16 fn_494_380();
+ void fn_494_C0();
+ bool fn_494_D0();
+ bool init();
+
+ /* 0xFC */ u8 var8_1;//area?
+ /* 0xFD */ u8 var8_2;//scene flag? I assume this is only 2 byte
+
private:
};
+
+
#endif
diff --git a/src/REL/d/t/d_t_defeat_boss.cpp b/src/REL/d/t/d_t_defeat_boss.cpp
index 5e649112..1d7ff4d6 100644
--- a/src/REL/d/t/d_t_defeat_boss.cpp
+++ b/src/REL/d/t/d_t_defeat_boss.cpp
@@ -1,3 +1,128 @@
#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"
SPECIAL_ACTOR_PROFILE(TAG_DEFEAT_BOSS, dTgDefeatBoss_c, fProfile::TAG_DEFEAT_BOSS, 0x29E, 0, 0);
+
+void dTgDefeatBoss_c::fn_494_C0() {
+
+ mID = (fBaseID_e)0x3;
+ return;
+
+}
+
+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::init() {
+
+ u16 uVar1;
+ u16 uVar2;
+ u16 iVar3;
+ u16 bVar4;
+ u32 uVar5;
+ u16 counterIdx;
+
+ bVar4 = fn_494_D0();
+ if (bVar4) {
+ uVar1 = 2;
+ }
+ 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;
+ }
+ }
+ return uVar1;
+
+}
+
+int dTgDefeatBoss_c::update() {
+
+ StoryflagManager* pSVar1;
+ bool bVar4;
+ u16 uVar2;
+ /*StoryFlags*/int SVar3;
+
+ bVar4 = fn_494_D0();
+ if (bVar4) {
+ switch (var8_1) {
+ case 0x0:
+ uVar2 = getSceneflag();
+ SceneflagManager::sInstance->unsetFlag
+ (/*SceneflagManager::sInstance,*/ (u16)/*(param_1->base).members.roomid*/(mRoomID & 0xffff),
+ (u16)(uVar2 & 0xffff));
+ break;
+ case 0x1:
+ uVar2 = getSceneflag();
+ SceneflagManager::sInstance->setFlag
+ (/*SceneflagManager::sInstance,*/ (u16)/*(param_1->base).members.roomid*/mRoomID & 0xffff,
+ (u16)uVar2 & 0xffff);
+ 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;
+ }
+ fBase_c::deleteRequest();
+ }
+
+ return SUCCEEDED;
+}
+
+u16 dTgDefeatBoss_c::getSceneflag() {
+ return mParams & 0xff;
+}
+
+u16 dTgDefeatBoss_c::fn_494_360() {
+
+ return mParams >> 0x8 & 0x1;
+
+}
+
+u16 dTgDefeatBoss_c::getStoryflag() {
+ return mParams >> 9 & 0xffff;
+}
+
+u16 dTgDefeatBoss_c::fn_494_380() {
+
+ return (mParams >> 0x19) & 0x1;
+
+}
+