This commit is contained in:
robojumper
2024-11-21 21:22:50 +01:00
parent 9f75ed2cb1
commit 15d932d1ea
5 changed files with 438 additions and 46 deletions
+16 -16
View File
@@ -13486,7 +13486,7 @@ AcItem__isSemiRareTreasure = .text:0x80250AE0; // type:function size:0x10
AcItem__isRareTreasure = .text:0x80250AF0; // type:function size:0x10
fn_80250B00 = .text:0x80250B00; // type:function size:0x10
fn_80250B10 = .text:0x80250B10; // type:function size:0x10
AcItem__isRupee = .text:0x80250B20; // type:function size:0x88
isRupee__9dAcItem_cF7ITEM_ID = .text:0x80250B20; // type:function size:0x88
AcItem__isBombDrop = .text:0x80250BB0; // type:function size:0x58
AcItem__isTear2 = .text:0x80250C10; // type:function size:0x78
AcItem__is_Larvae_Ore_JellyBlob_Claw_Horn_EvilCryst_OrnSkull_GoldSkull = .text:0x80250C90; // type:function size:0xB8
@@ -14243,7 +14243,7 @@ fn_80268650 = .text:0x80268650; // type:function size:0x8
fn_80268660__9dAcTbox_cFi = .text:0x80268660; // type:function size:0x20
hasCollectedAllTears__9dAcTbox_cFv = .text:0x80268680; // type:function size:0x1C
fn_802686A0 = .text:0x802686A0; // type:function size:0x50
fn_802686F0 = .text:0x802686F0; // type:function size:0x5C
fn_802686F0__9dAcTbox_cFRC7mVec3_cf = .text:0x802686F0; // type:function size:0x5C
__ct__9dAcTbox_cFv = .text:0x80268750; // type:function size:0x2EC
__dt__10dAcTboxCcDFv = .text:0x80268A40; // type:function size:0x98
__dt__21sFState_c<9dAcTbox_c>Fv = .text:0x80268AE0; // type:function size:0x58
@@ -14310,13 +14310,13 @@ finalizeState_Wait__9dAcTbox_cFv = .text:0x8026D000; // type:function size:0x4
initializeState_GoddessWait__9dAcTbox_cFv = .text:0x8026D010; // type:function size:0x70
executeState_GoddessWait__9dAcTbox_cFv = .text:0x8026D080; // type:function size:0x74
finalizeState_GoddessWait__9dAcTbox_cFv = .text:0x8026D100; // type:function size:0x4
fn_8026D110 = .text:0x8026D110; // type:function size:0x8
getDowsingTargetOffset__9dAcTbox_cCFP7mVec3_c = .text:0x8026D110; // type:function size:0x8
fn_8026D120 = .text:0x8026D120; // type:function size:0x8
fn_8026D130 = .text:0x8026D130; // type:function size:0x10
fn_8026D140 = .text:0x8026D140; // type:function size:0x10
fn_8026D140__9dAcTbox_cFv = .text:0x8026D140; // type:function size:0x10
AcTbox__doInteraction = .text:0x8026D150; // type:function size:0x98
fn_8026D1F0 = .text:0x8026D1F0; // type:function size:0xDC
fn_8026D2D0 = .text:0x8026D2D0; // type:function size:0x68
registerInEvent__9dAcTbox_cFv = .text:0x8026D1F0; // type:function size:0xDC
unkVirtFunc_0x6C__9dAcTbox_cFv = .text:0x8026D2D0; // type:function size:0x68
AcTbox__checkShouldClose = .text:0x8026D340; // type:function size:0xC
AcTbox__setShouldCloseFlag = .text:0x8026D350; // type:function size:0xC
AcTbox__unsetShouldCloseFlag = .text:0x8026D360; // type:function size:0xC
@@ -14332,17 +14332,17 @@ getSomeCounter__9dAcTbox_cCFPUl = .text:0x8026D600; // type:function size:0x68
fn_8026D670__9dAcTbox_cCFv = .text:0x8026D670; // type:function size:0x8
syncScaleToMdl__9dAcTbox_cFPQ23m3d9scnLeaf_c = .text:0x8026D680; // type:function size:0x10
initBgW__9dAcTbox_cFR4dBgWPCcPCc = .text:0x8026D690; // type:function size:0xB8
AcTbox__initializeDowsingTarget = .text:0x8026D750; // type:function size:0x14
initDowsingTarget__9dAcTbox_cFP13DowsingTargetQ213DowsingTarget11DowsingSlotP7mVec3_c = .text:0x8026D750; // type:function size:0x14
isItemRupee__9dAcTbox_cCFv = .text:0x8026D770; // type:function size:0x8
initDowsingTarget__9dAcTbox_cFQ213DowsingTarget11DowsingSlot = .text:0x8026D780; // type:function size:0x50
initDowsingTargetCube__9dAcTbox_cFv = .text:0x8026D7D0; // type:function size:0x44
noRegisterDowsing = .text:0x8026D820; // type:function size:0x4
registersKeyPieceDowsing = .text:0x8026D830; // type:function size:0x68
registerRupeeOrTreasureDowsing = .text:0x8026D8A0; // type:function size:0x48
noUnregisterDowsing = .text:0x8026D8F0; // type:function size:0x4
unregisterDowsing = .text:0x8026D900; // type:function size:0x48
noRegisterDowsing__9dAcTbox_cFv = .text:0x8026D820; // type:function size:0x4
registerKeyPieceDowsing__9dAcTbox_cFv = .text:0x8026D830; // type:function size:0x68
registerRupeeOrTreasureDowsing__9dAcTbox_cFv = .text:0x8026D8A0; // type:function size:0x48
noUnregisterDowsing__9dAcTbox_cFv = .text:0x8026D8F0; // type:function size:0x4
unregisterDowsing__9dAcTbox_cFv = .text:0x8026D900; // type:function size:0x48
fn_8026D950 = .text:0x8026D950; // type:function size:0x28
checkIsClear = .text:0x8026D980; // type:function size:0x140
checkIsClear__9dAcTbox_cCFv = .text:0x8026D980; // type:function size:0x140
fn_8026DAC0__9dAcTbox_cFR4mAng = .text:0x8026DAC0; // type:function size:0x10
fn_8026DAD0__9dAcTbox_cCFP7mVec3_cP7mVec3_c = .text:0x8026DAD0; // type:function size:0x8
getCylParams__9dAcTbox_cFP7mVec3_cPfPf = .text:0x8026DAE0; // type:function size:0x28C
@@ -28645,7 +28645,7 @@ lbl_804ED998 = .rodata:0x804ED998; // type:object size:0xC
lbl_804ED9A4 = .rodata:0x804ED9A4; // type:object size:0x14
ITEM_MODELS = .rodata:0x804ED9B8; // type:object size:0xA00
lbl_804EE3B8 = .rodata:0x804EE3B8; // type:object size:0xC0 data:4byte
lbl_804EE478 = .rodata:0x804EE478; // type:object size:0xD0 data:4byte
@LOCAL@checkIsClear__9dAcTbox_cCFv@fsIdxes@0 = .rodata:0x804EE478; // type:object size:0xD0 data:4byte
lbl_804EE548 = .rodata:0x804EE548; // type:object size:0x30
lbl_804EE578 = .rodata:0x804EE578; // type:object size:0x30 data:float
TgMassObj__GRASS_A_TYPES = .rodata:0x804EE5A8; // type:object size:0xF8 data:4byte
@@ -40245,7 +40245,7 @@ sCurrentObtainingItemOarcName = .sbss:0x80575918; // type:object size:0x4 data:4
@GUARD@create__9dAcTbox_cFv@bbLo@9 = .sbss:0x80575924; // type:object size:0x1 data:byte
@GUARD@create__9dAcTbox_cFv@bbUp@10 = .sbss:0x80575925; // type:object size:0x1 data:byte
@GUARD@draw__9dAcTbox_cFv@shadowDirs = .sbss:0x80575926; // type:object size:0x1 data:byte
lbl_80575927 = .sbss:0x80575927; // type:object size:0x1 data:byte
@GUARD@checkIsClear__9dAcTbox_cCFv@offsets = .sbss:0x80575927; // type:object size:0x1 data:byte
lbl_80575928 = .sbss:0x80575928; // type:object size:0x8 data:byte
TgMassObj__MASS_OBJ_TAG_PTR = .sbss:0x80575930; // type:object size:0x4 data:4byte
lbl_80575934 = .sbss:0x80575934; // type:object size:0x4 data:4byte
@@ -49025,7 +49025,7 @@ StateID_Wait__9dAcTbox_c = .bss:0x805B52D8; // type:object size:0x30 data:4byte
StateID_GoddessWait__9dAcTbox_c = .bss:0x805B5318; // type:object size:0x30 data:4byte
lbl_805B5348 = .bss:0x805B5348; // type:object size:0xA0
lbl_805B53E8 = .bss:0x805B53E8; // type:object size:0x40 data:4byte
lbl_805B5428 = .bss:0x805B5428; // type:object size:0x30 data:float
@LOCAL@checkIsClear__9dAcTbox_cCFv@offsets = .bss:0x805B5428; // type:object size:0x30 data:float
lbl_805B5458 = .bss:0x805B5458; // type:object size:0x10
AcTimeArea__STATE_WAIT = .bss:0x805B5468; // type:object size:0x40 data:4byte
AcTimeArea__STATE_SLOPE = .bss:0x805B54A8; // type:object size:0x40 data:4byte
+1
View File
@@ -55,6 +55,7 @@ public:
static int getTotalArrowCount();
static int getTotalSeedCount();
static bool isRupee(ITEM_ID item);
static bool isKeyPiece(ITEM_ID item);
static bool isTreasure(ITEM_ID item);
+20 -5
View File
@@ -66,6 +66,9 @@ public:
virtual int actorExecuteInEvent() override;
virtual int draw() override;
virtual void registerInEvent() override;
virtual void unkVirtFunc_0x6C() override;
virtual void *getObjectListEntry() override;
STATE_FUNC_DECLARE(dAcTbox_c, DugOut);
@@ -83,7 +86,8 @@ public:
STATE_FUNC_DECLARE(dAcTbox_c, GoddessWait);
private:
bool initBgW(dBgW &bg, const char *arcName, const char *ccName);
static f32 getSomeRate();
bool initBgW(dBgW &bg, const char *arcName, const char *fileName);
bool isNotSmall() const;
void setItemId(u16 item);
void setChestFlag();
@@ -99,6 +103,9 @@ private:
bool checkTboxFlag() const;
bool fn_8026D560() const;
bool isItemRupee() const;
void getDowsingTargetOffset(mVec3_c *offset) const;
void initDowsingTarget(DowsingTarget *target, DowsingTarget::DowsingSlot slot, mVec3_c *offset);
void initDowsingTarget(DowsingTarget::DowsingSlot slot);
void initDowsingTargetCube();
@@ -126,8 +133,13 @@ private:
void setFlags(u32 flags);
bool fn_8026D120() const;
void fn_8026D130();
void fn_8026D140();
void fn_8026D950();
bool checkIsClear() const;
static bool fn_802686F0(const mVec3_c &vec, f32 y);
const InteractionTargetDef &getInteractionTargetDef() const;
/* 0x0330 */ m3d::mdlAnmChr mMdl1;
@@ -158,12 +170,15 @@ private:
/* 0x10E8 */ fLiNdBa_c mTboxListNode;
/* 0x10F4 */ ActorEventRelated mEvent;
/* 0x1144 */ dAcRef_c<dAcItem_c> mItemRef;
/* 0x1150 */ DowsingTarget mDowsingTarget1;
/* 0x1170 */ DowsingTarget mDowsingTarget2;
/* 0x1150 */ DowsingTarget mDowsingTarget;
/* 0x1170 */ DowsingTarget mGoddessDowsingTarget;
/* 0x1190 */ void (dAcTbox_c::*mRegisterDowsingTarget)();
/* 0x119C */ void (dAcTbox_c::*mUnregisterDowsingTarget)();
/* 0x11A8 */ u8 field_0x11A8[0x11D8 - 0x11A8];
/* 0x11A8 */ u8 field_0x11A8[0x11C0 - 0x11A8];
/* 0x11C0 */ mVec3_c field_0x11C0;
/* 0x11CC */ mVec3_c field_0x11CC;
/* 0x11D8 */ mVec3_c field_0x11D8;
@@ -174,7 +189,7 @@ private:
/* 0x11F0 */ UNKWORD field_0x11F0;
/* 0x11F4 */ UNKWORD field_0x11F4;
/* 0x11F8 */ u8 field_0x11F8[0x11FC - 0x11F8];
/* 0x11F8 */ UNKWORD field_0x11F8;
/* 0x11FC */ UNKWORD field_0x11FC;
-3
View File
@@ -889,9 +889,6 @@ public:
void OnTgSet() {
mTg.OnSPrm(1);
}
void OffTgSet() {
mTg.OffSPrm(1);
}
u32 GetTgGrp() const {
return mTg.MskSPrm(0x3E);
}
+401 -22
View File
@@ -5,11 +5,13 @@
#include "d/a/d_a_item.h"
#include "d/a/d_a_itembase.h"
#include "d/a/d_a_player.h"
#include "d/col/bg/d_bg_s.h"
#include "d/col/cc/d_cc_d.h"
#include "d/col/cc/d_cc_s.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "m/m3d/m_fanm.h"
#include "m/m3d/m_scnleaf.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "nw4r/g3d/g3d_resanmchr.h"
@@ -21,6 +23,7 @@
#include "toBeSorted/arc_managers/oarc_manager.h"
#include "toBeSorted/attention.h"
#include "toBeSorted/dowsing_target.h"
#include "toBeSorted/event_manager.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(TBOX, dAcTbox_c, fProfile::TBOX, 0x018D, 0, 6);
@@ -751,9 +754,13 @@ static char *const sOpenCcNames[] = {
"GoddessTBoxOpen",
};
f32 dAcTbox_c::getSomeRate() {
return 1.0f / 8.333333f;
}
dAcTbox_c::dAcTbox_c()
: mStateMgr(*this, sStateID::null), mScnCallback(this), mEvent(*this, nullptr), mTboxListNode(this),
mDowsingTarget1(this, DowsingTarget::SLOT_NONE), mDowsingTarget2(this, DowsingTarget::SLOT_NONE) {
mDowsingTarget(this, DowsingTarget::SLOT_NONE), mGoddessDowsingTarget(this, DowsingTarget::SLOT_NONE) {
field_0x120B = 0;
field_0x120E = 0;
mDoObstructedCheck = false;
@@ -889,7 +896,7 @@ bool dAcTbox_c::createHeap() {
return true;
}
static u32 sSomeCounters[16] = {};
static u32 sSomeCounters[16] = {0};
int dAcTbox_c::create() {
if (!isActualVisibleBox()) {
@@ -958,7 +965,7 @@ int dAcTbox_c::create() {
if (b) {
other->deleteRequest();
field_0x120D = true;
other->field_0x120D = true;
} else {
field_0x120D = true;
return FAILED;
@@ -1005,7 +1012,7 @@ int dAcTbox_c::create() {
{0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f},
};
mCcD3.Set(s1);
mCcD4.SetStts(mStts);
mCcD3.SetStts(mStts);
static const dCcD_SrcCyl s2 = {
sColSrc,
{1.0f, 1.0f},
@@ -1245,7 +1252,7 @@ int dAcTbox_c::actorExecute() {
mCcD2.Set(v1, v2);
mCcD2.Set(field_0x11D8, rotation.y);
} else {
mCcD2.OffTgSet();
mCcD2.ClrTgSet();
}
field_0x0D48.registerColliders();
}
@@ -1431,7 +1438,7 @@ int dAcTbox_c::actorExecuteInEvent() {
mCcD2.Set(v1, v2);
mCcD2.Set(field_0x11D8, rotation.y);
} else {
mCcD2.OffTgSet();
mCcD2.ClrTgSet();
}
field_0x0D48.registerColliders();
}
@@ -1553,9 +1560,102 @@ const mVec3_c &dAcTbox_c::fn_8026B3C0() const {
return v2;
}
void dAcTbox_c::initializeState_DugOut() {}
void dAcTbox_c::executeState_DugOut() {}
void dAcTbox_c::initializeState_DugOut() {
mScale.set(0.0f, 0.0f, 1.0f);
field_0x11E8 = 0.0f;
field_0x11F4 &= ~2;
if (mHasBeenOpened == 1) {
field_0x120C = 1;
} else {
field_0x120C = 0;
}
setActorProperty(0x100);
if (mVariant == NORMAL) {
mMdl1.setAnm(sMdlNames[0], m3d::PLAY_MODE_4);
}
if (mVariant == NORMAL) {
if (checkTboxFlag()) {
mMdl1.setFrame(mMdl1.getAnm().getEndFrame());
} else {
mMdl1.setFrame(mMdl1.getAnm().getStartFrame());
}
}
if (mVariant == NORMAL) {
mAnmMatClr1.setFrame(mAnmMatClr1.getFrameMax(0), 0);
}
fn_8026D140();
}
void dAcTbox_c::executeState_DugOut() {
field_0x11F4 |= 2;
if (field_0x11E8 < 1.0f) {
bool result = sLib::chase(&field_0x11E8, 1.0f, 0.2f);
switch ((u32)mVariant) {
case NORMAL:
if (mHasBeenOpened == 1) {
field_0x11C0.set(-61.0f, 0.0f, -90.0f);
field_0x11CC.set(61.0f, 142.0f, 42.0f);
} else {
field_0x11C0.set(-61.0f, 0.0f, -42.0f);
field_0x11CC.set(61.0f, 100.0f, 42.0f);
}
break;
case SMALL:
if (mHasBeenOpened == 1) {
field_0x11C0.set(-38.0f, 0.0f, -68.0f);
field_0x11CC.set(38.0f, 101.0f, 31.0f);
} else {
field_0x11C0.set(-38.0f, 0.0f, -35.0f);
field_0x11CC.set(38.0f, 68.0f, 35.0f);
}
break;
case BOSS:
if (mHasBeenOpened == 1) {
field_0x11C0.set(-90.0f, 0.0f, -135.0f);
field_0x11CC.set(90.0f, 163.0f, 56.0f);
} else {
field_0x11C0.set(-90.0f, 0.0f, -53.0f);
field_0x11CC.set(90.0f, 133.0f, 56.0f);
}
break;
case GODDESS:
if (mHasBeenOpened == 1) {
field_0x11C0.set(-62.0f, 0.0f, -95.0f);
field_0x11CC.set(62.0f, 140.0f, 47.0f);
} else {
field_0x11C0.set(-62.0f, 0.0f, -47.0f);
field_0x11CC.set(62.0f, 100.0f, 47.0f);
}
break;
}
field_0x11C0 *= field_0x11E8;
field_0x11CC *= field_0x11E8;
if (!result) {
return;
}
}
bool bX = sLib::chase(&mScale.x, 1.0f, 0.2f);
bool bY = sLib::chase(&mScale.y, 1.0f, 0.2f);
if (bX && bY) {
if (mVariant == GODDESS) {
if (mHasBeenOpened == true) {
mStateMgr.changeState(StateID_GoddessWait);
} else {
if (StoryflagManager::sInstance->getCounterOrFlag(getParams2Lower())) {
mStateMgr.changeState(StateID_GoddessWaitOn);
} else {
mStateMgr.changeState(StateID_GoddessWaitOff);
}
}
} else if (mHasBeenOpened == true) {
mStateMgr.changeState(StateID_Wait);
} else {
mStateMgr.changeState(StateID_WaitOpen);
}
}
}
void dAcTbox_c::finalizeState_DugOut() {}
void dAcTbox_c::initializeState_WaitAppear() {
mScale.set(0.0f, 0.0f, 0.0f);
setActorProperty(0x100);
@@ -1563,7 +1663,8 @@ void dAcTbox_c::initializeState_WaitAppear() {
field_0x11E8 = 0.0f;
field_0x11F4 &= ~0x2;
field_0x120C = 0;
// field_0x11C0
field_0x11C0.set(0.0f, 0.0f, 0.0f);
field_0x11CC.set(0.0f, 0.0f, 0.0f);
}
void dAcTbox_c::executeState_WaitAppear() {
// @bug doIt is uninitialized here, so WaitAppear is UB unless field_0x120A == 0 or field_0x120A == 3
@@ -1579,22 +1680,155 @@ void dAcTbox_c::executeState_WaitAppear() {
}
}
void dAcTbox_c::finalizeState_WaitAppear() {}
void dAcTbox_c::initializeState_DemoAppear() {
// TODO, just referencing this bit of data
field_0x11F8 = 0;
mScale.set(0.0f, 0.0f, 0.0f);
field_0x11E8 = 0.0f;
setActorProperty(0x100);
mMdl1.setAnm(sAppearAnmName, m3d::PLAY_MODE_4);
mMdl1.setFrame(mMdl1.getAnm().getStartFrame());
mAnmMatClr1.setFrame(0.0f, 0);
fn_8026D140();
field_0x11E8 = 0.0f;
field_0x11F4 &= ~0x2;
field_0x120C = 0;
field_0x11C0.set(0.0f, 0.0f, 0.0f);
field_0x11CC.set(0.0f, 0.0f, 0.0f);
}
extern "C" void SmallSoundManager__playSound(void *, u32);
extern "C" void *SOUND_EFFECT_SOUND_MGR;
void dAcTbox_c::executeState_DemoAppear() {
int val = field_0x11F8++;
if (field_0x11F8 < 11) {
field_0x11C0.set(-61.0f, 0.0f, -42.0f);
field_0x11CC.set(61.0f, 100.0f, 42.0f);
f32 f = field_0x11F8 * 0.1f;
field_0x11C0 *= f;
field_0x11CC *= f;
}
if (field_0x11F8 >= 20) {
bool b = val < 20;
if (b) {
fn_8026D950();
}
if (b) {
mScale.set(1.0f, 1.0f, 1.0f);
}
bool wasStop = mMdl1.getAnm().isStop();
if (!wasStop) {
mMdl1.play();
}
bool isStop = mMdl1.getAnm().isStop();
if (!wasStop) {
field_0x11E8 = mMdl1.getAnm().getFrame() / (mMdl1.getAnm().getEndFrame() - mMdl1.getAnm().getStartFrame());
}
if (0.0f < field_0x11E8) {
field_0x11F4 |= 2;
}
mAnmMatClr1.play();
if (isStop && mAnmMatClr1.isStop(0) && field_0x11F8 > 0x5A) {
mEvent.advanceNext();
mStateMgr.changeState(StateID_WaitOpen);
SmallSoundManager__playSound(SOUND_EFFECT_SOUND_MGR, 0x13AD);
}
}
}
void dAcTbox_c::executeState_DemoAppear() {}
void dAcTbox_c::finalizeState_DemoAppear() {}
void dAcTbox_c::initializeState_WaitOpen() {}
void dAcTbox_c::executeState_WaitOpen() {}
void dAcTbox_c::finalizeState_WaitOpen() {}
void dAcTbox_c::initializeState_GoddessWaitOff() {}
void dAcTbox_c::initializeState_WaitOpen() {
mScale.set(1.0f, 1.0f, 1.0f);
field_0x11E8 = 1.0f;
field_0x11F4 |= 2;
switch ((u32)mVariant) {
case NORMAL:
field_0x11C0.set(-61.0f, 0.0f, -42.0f);
field_0x11CC.set(61.0f, 100.0f, 42.0f);
break;
case SMALL:
field_0x11C0.set(-38.0f, 0.0f, -35.0f);
field_0x11CC.set(38.0f, 68.0f, 35.0f);
break;
case BOSS:
field_0x11C0.set(-90.0f, 0.0f, -53.0f);
field_0x11CC.set(90.0f, 133.0f, 56.0f);
break;
// WaitOpen not used for Goddess Chests
}
field_0x120C = 0;
clearActorProperty(0x100);
if (mVariant == NORMAL) {
mMdl1.setAnm(sMdlNames[0], m3d::PLAY_MODE_4);
}
if (mVariant == NORMAL) {
mMdl1.setFrame(mMdl1.getAnm().getStartFrame());
}
if (mVariant == NORMAL) {
mAnmMatClr1.setFrame(mAnmMatClr1.getFrameMax(0), 0);
}
fn_8026D130();
}
void dAcTbox_c::executeState_WaitOpen() {
if ((!mDoObstructedCheck || checkIsClear()) && fn_8026D120()) {
AttentionManager *mgr = AttentionManager::sInstance;
mgr->addTarget(*this, getInteractionTargetDef(), 0, nullptr);
}
}
void dAcTbox_c::finalizeState_WaitOpen() {
(this->*mUnregisterDowsingTarget)();
}
void dAcTbox_c::initializeState_GoddessWaitOff() {
clearActorProperty(0x100);
fn_8026D130();
field_0x11C0.set(-62.0f, 0.0f, -47.0f);
field_0x11CC.set(62.0f, 100.0f, 47.0f);
field_0x11E8 = 1.0f;
field_0x11F4 |= 2;
field_0x120C = 0;
}
void dAcTbox_c::executeState_GoddessWaitOff() {}
void dAcTbox_c::finalizeState_GoddessWaitOff() {}
void dAcTbox_c::initializeState_GoddessWaitOn() {}
void dAcTbox_c::executeState_GoddessWaitOn() {}
void dAcTbox_c::finalizeState_GoddessWaitOn() {}
void dAcTbox_c::initializeState_DeleteArchive() {}
void dAcTbox_c::initializeState_GoddessWaitOn() {
clearActorProperty(0x100);
fn_8026D130();
field_0x11C0.set(-62.0f, 0.0f, -47.0f);
field_0x11CC.set(62.0f, 100.0f, 47.0f);
field_0x11E8 = 1.0f;
field_0x11F4 |= 2;
mGoddessDowsingTarget.doRegister();
}
void dAcTbox_c::executeState_GoddessWaitOn() {
if (fn_8026D120()) {
AttentionManager *mgr = AttentionManager::sInstance;
mgr->addTarget(*this, getInteractionTargetDef(), 0, nullptr);
}
}
void dAcTbox_c::finalizeState_GoddessWaitOn() {
(this->*mUnregisterDowsingTarget)();
mGoddessDowsingTarget.doUnregister();
}
void dAcTbox_c::initializeState_DeleteArchive() {
mScale.set(1.0f, 1.0f, 1.0f);
clearActorProperty(0x100);
if (mVariant == NORMAL) {
mMdl1.setAnm(sMdlNames[0], m3d::PLAY_MODE_4);
}
if (mVariant == NORMAL) {
mMdl1.setFrame(mMdl1.getAnm().getStartFrame());
}
if (mVariant == NORMAL) {
mAnmMatClr1.setFrame(mAnmMatClr1.getFrameMax(0), 0);
}
fn_8026D140();
field_0x11C0.set(-61.0f, 0.0f, -42.0f);
field_0x11CC.set(61.0f, 100.0f, 42.0f);
field_0x11E8 = 1.0f;
field_0x11F4 |= 2;
field_0x120C = 0;
}
void dAcTbox_c::executeState_DeleteArchive() {
if (sCurrentObtainingItemOarcName != nullptr) {
OarcManager *mng = OarcManager::sInstance;
@@ -1613,30 +1847,175 @@ void dAcTbox_c::executeState_DeleteArchive() {
}
}
void dAcTbox_c::finalizeState_DeleteArchive() {}
void dAcTbox_c::initializeState_LoadArchive() {}
void dAcTbox_c::executeState_LoadArchive() {}
void dAcTbox_c::initializeState_LoadArchive() {
mScale.set(1.0f, 1.0f, 1.0f);
clearActorProperty(0x100);
if (mVariant == NORMAL) {
mMdl1.setAnm(sMdlNames[0], m3d::PLAY_MODE_4);
}
if (mVariant == NORMAL) {
mMdl1.setFrame(mMdl1.getAnm().getStartFrame());
}
if (mVariant == NORMAL) {
mAnmMatClr1.setFrame(mAnmMatClr1.getFrameMax(0), 0);
}
fn_8026D140();
sCurrentObtainingItemOarcName = sItemToArchiveName[mItemModelIdx];
OarcManager::sInstance->loadObjectArcFromDisk(sCurrentObtainingItemOarcName, nullptr);
field_0x11C0.set(-61.0f, 0.0f, -42.0f);
field_0x11CC.set(61.0f, 100.0f, 42.0f);
field_0x11E8 = 1.0f;
field_0x11F4 |= 2;
field_0x120C = 0;
}
void dAcTbox_c::executeState_LoadArchive() {
if (!OarcManager::sInstance->ensureLoaded1(sCurrentObtainingItemOarcName)) {
mStateMgr.changeState(StateID_Open);
}
}
void dAcTbox_c::finalizeState_LoadArchive() {}
void dAcTbox_c::initializeState_Open() {}
void dAcTbox_c::executeState_Open() {}
void dAcTbox_c::finalizeState_Open() {}
void dAcTbox_c::initializeState_PresentItem() {}
void dAcTbox_c::executeState_PresentItem() {}
void dAcTbox_c::finalizeState_PresentItem() {}
void dAcTbox_c::initializeState_Close() {}
void dAcTbox_c::executeState_Close() {}
void dAcTbox_c::finalizeState_Close() {}
void dAcTbox_c::initializeState_Wait() {}
void dAcTbox_c::executeState_Wait() {}
void dAcTbox_c::finalizeState_Wait() {}
void dAcTbox_c::initializeState_GoddessWait() {}
void dAcTbox_c::executeState_GoddessWait() {}
void dAcTbox_c::finalizeState_GoddessWait() {}
extern "C" dAcBase_c *getCurrentEventActor();
void dAcTbox_c::registerInEvent() {
if (getCurrentEventActor() == mItemRef.get()) {
if (EventManager::isCurrentEvent("ItemGetDefaultTBox") || EventManager::isCurrentEvent("ItemGetGorgeousTBox")) {
field_0x11F4 |= 0x8;
}
}
}
void dAcTbox_c::unkVirtFunc_0x6C() {
if ((field_0x11F4 & 8) != 0) {
if (mVariant == GODDESS && mHasBeenOpened == true) {
mAnmGoddessPat.setFrame(0.0f, 0);
}
field_0x11F4 &= ~8;
}
}
bool dAcTbox_c::isNotSmall() const {
return mVariant != SMALL;
}
extern "C" const u32 DAT_804ee478[] = {0, 0, 1, 1};
void dAcTbox_c::syncScaleToMdl(m3d::scnLeaf_c *lf) {
lf->setScale(mScale);
}
bool dAcTbox_c::initBgW(dBgW &bg, const char *arcName, const char *fileName) {
void *dzb = getOarcDZB(arcName, fileName);
if (dzb == nullptr) {
return false;
}
void *plc = getOarcPLC(arcName, fileName);
if (plc == nullptr) {
return false;
}
// TODO return types
bool ok = !(BOOL)bg.Set((cBgD_t *)dzb, (PLC *)plc, 0x81, &mWorldMtx, &mScale);
if (!ok) {
return false;
}
bg.SetCrrFunc(dBgS_MoveBGProc_TypicalRotY);
return true;
}
void dAcTbox_c::initDowsingTarget(DowsingTarget *target, DowsingTarget::DowsingSlot slot, mVec3_c *offset) {
target->initialize(slot, 0, offset, 0.0f);
}
bool dAcTbox_c::isItemRupee() const {
return dAcItem_c::isRupee((ITEM_ID)mItemId);
}
void dAcTbox_c::initDowsingTarget(DowsingTarget::DowsingSlot slot) {
mVec3_c offset;
getDowsingTargetOffset(&offset);
initDowsingTarget(&mDowsingTarget, slot, &offset);
}
void dAcTbox_c::initDowsingTargetCube() {
mVec3_c offset;
getDowsingTargetOffset(&offset);
initDowsingTarget(&mGoddessDowsingTarget, DowsingTarget::SLOT_GODDESS_CUBE, &offset);
}
void dAcTbox_c::noRegisterDowsing() {}
void dAcTbox_c::registerKeyPieceDowsing() {
if ((field_0x11F4 & 4) == 0 && StoryflagManager::sInstance->getCounterOrFlag(0x6A)) {
mDowsingTarget.doRegister();
field_0x11F4 |= 4;
}
}
void dAcTbox_c::registerRupeeOrTreasureDowsing() {
if ((field_0x11F4 & 4) == 0) {
mDowsingTarget.doRegister();
field_0x11F4 |= 4;
}
}
void dAcTbox_c::noUnregisterDowsing() {}
void dAcTbox_c::unregisterDowsing() {
if ((field_0x11F4 & 4) != 0) {
mDowsingTarget.doUnregister();
field_0x11F4 &= ~4;
}
}
bool dAcTbox_c::checkIsClear() const {
f32 fs[] = {
position.y,
position.y,
};
fs[0] += 20.0f;
fs[1] += 60.0f;
static mVec3_c offsets[] = {
mVec3_c(50.0f, 500.0f, 50.0f),
mVec3_c(50.0f, 500.0f, -50.0f),
mVec3_c(-50.0f, 500.0f, 50.0f),
mVec3_c(-50.0f, 500.0f, -50.0f),
};
mVec3_c points[4];
for (u32 i = 0; i <= 3; i++) {
fn_8026DAD0(&offsets[i], &points[i]);
}
static const int fsIdxes[] = {0, 0, 1, 1};
bool isClear = true;
for (u32 i = 0; isClear && i <= 3;) {
// @bug should this be points[i] instead?
if (fn_802686F0(points[0], fs[fsIdxes[i]])) {
isClear = false;
} else {
i++;
}
}
return isClear;
}
const InteractionTargetDef &dAcTbox_c::getInteractionTargetDef() const {
switch ((u32)mVariant) {