mirror of
https://github.com/zeldaret/ss
synced 2026-06-19 15:40:26 -04:00
mostly matching d_t_defeat_boss.cpp
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user