This commit is contained in:
robojumper
2025-08-22 10:51:06 +02:00
parent f374acbae7
commit 1d17513502
5 changed files with 66 additions and 48 deletions
+10 -10
View File
@@ -10273,22 +10273,22 @@ baseID_Demo<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x80190AD0; // type:funct
baseID_DemoThrow<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x80190AE0; // type:function size:0xC scope:local
baseID_Fly<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x80190AF0; // type:function size:0xC scope:local
baseID_After<10sStateID_c>__Fv_RC12sStateIDIf_c = .text:0x80190B00; // type:function size:0xC scope:local
doDemoThrow__14SalbageRelatedFv = .text:0x80190B10; // type:function size:0x1C
doDemoThrow__15dSalvageIfObj_cFv = .text:0x80190B10; // type:function size:0x1C
actorExecute__15dAcSalbageObj_cFv = .text:0x80190B30; // type:function size:0xD0
isInStateWait__15dAcSalbageObj_cCFv = .text:0x80190C00; // type:function size:0x50 scope:weak
isInStateWaitOrDemoThrow__15dAcSalbageObj_cCFv = .text:0x80190C50; // type:function size:0xB4 scope:weak
preExecute__15dAcSalbageObj_cFv = .text:0x80190D10; // type:function size:0x1D4
getSalvageObjId__14SalbageRelatedCFv = .text:0x80190EF0; // type:function size:0x8 scope:weak
getSalvageObjId__15dSalvageIfObj_cCFv = .text:0x80190EF0; // type:function size:0x8 scope:weak
getDowsingUnusedF32__15dAcSalbageObj_cCFv = .text:0x80190F00; // type:function size:0x8 scope:weak
getDowsingTargetYOffset__15dAcSalbageObj_cCFv = .text:0x80190F10; // type:function size:0x8 scope:weak
preDraw__15dAcSalbageObj_cFv = .text:0x80190F20; // type:function size:0x58
isHidden__14SalbageRelatedCFv = .text:0x80190F80; // type:function size:0x8 scope:weak
isHidden__15dSalvageIfObj_cCFv = .text:0x80190F80; // type:function size:0x8 scope:weak
draw__15dAcSalbageObj_cFv = .text:0x80190F90; // type:function size:0x54
executeInternal__15dAcSalbageObj_cFv = .text:0x80190FF0; // type:function size:0xE0
initSalbageObj__15dAcSalbageObj_cFv = .text:0x801910D0; // type:function size:0x2A8
vt_0x80__15dAcSalbageObj_cCFv = .text:0x80191380; // type:function size:0x8 scope:weak
setHidden__14SalbageRelatedFv = .text:0x80191390; // type:function size:0xC scope:weak
setCarried__14SalbageRelatedFv = .text:0x801913A0; // type:function size:0xC scope:weak
setHidden__15dSalvageIfObj_cFv = .text:0x80191390; // type:function size:0xC scope:weak
setCarried__15dSalvageIfObj_cFv = .text:0x801913A0; // type:function size:0xC scope:weak
doInteraction__15dAcSalbageObj_cFl = .text:0x801913B0; // type:function size:0xB0
addAttentionTargetIfNeeded__15dAcSalbageObj_cFv = .text:0x80191460; // type:function size:0x50
addAttentionTarget__15dAcSalbageObj_cFv = .text:0x801914B0; // type:function size:0xFC
@@ -10302,7 +10302,7 @@ getBgAcchCirHeight__15dAcSalbageObj_cCFv = .text:0x80191800; // type:function si
getBgAcchCirRadius__15dAcSalbageObj_cCFv = .text:0x80191810; // type:function size:0x8 scope:weak
calcMtxFromSalbageNpc__15dAcSalbageObj_cFR6mMtx_c = .text:0x80191820; // type:function size:0x17C
calcWorldMtx__15dAcSalbageObj_cFv = .text:0x801919A0; // type:function size:0x88
isCarried__14SalbageRelatedCFv = .text:0x80191A30; // type:function size:0x8 scope:weak
isCarried__15dSalvageIfObj_cCFv = .text:0x80191A30; // type:function size:0x8 scope:weak
updateMdl__15dAcSalbageObj_cFv = .text:0x80191A40; // type:function size:0x1B0
getPoscopy3YOffset__15dAcSalbageObj_cCFv = .text:0x80191BF0; // type:function size:0x8 scope:weak
getPoscopy2YOffset__15dAcSalbageObj_cCFv = .text:0x80191C00; // type:function size:0x8 scope:weak
@@ -10324,7 +10324,7 @@ initializeState_Demo__15dAcSalbageObj_cFv = .text:0x80191E20; // type:function s
executeState_Demo__15dAcSalbageObj_cFv = .text:0x80191E30; // type:function size:0x4
finalizeState_Demo__15dAcSalbageObj_cFv = .text:0x80191E40; // type:function size:0x4
initializeState_DemoThrow__15dAcSalbageObj_cFv = .text:0x80191E50; // type:function size:0x164
setNotCarried__14SalbageRelatedFv = .text:0x80191FC0; // type:function size:0xC scope:weak
setNotCarried__15dSalvageIfObj_cFv = .text:0x80191FC0; // type:function size:0xC scope:weak
executeState_DemoThrow__15dAcSalbageObj_cFv = .text:0x80191FD0; // type:function size:0x4
finalizeState_DemoThrow__15dAcSalbageObj_cFv = .text:0x80191FE0; // type:function size:0x4
initializeState_Kill__15dAcSalbageObj_cFv = .text:0x80191FF0; // type:function size:0x4
@@ -10332,8 +10332,8 @@ executeState_Kill__15dAcSalbageObj_cFv = .text:0x80192000; // type:function size
finalizeState_Kill__15dAcSalbageObj_cFv = .text:0x80192010; // type:function size:0x4
vt_0xD0__15dAcSalbageObj_cFv = .text:0x80192020; // type:function size:0x4 scope:weak
__dt__15dAcSalbageObj_cFv = .text:0x80192030; // type:function size:0x100 scope:weak
__dt__14SalbageRelatedFv = .text:0x80192130; // type:function size:0x40 scope:weak
setNotHidden__14SalbageRelatedFv = .text:0x80192170; // type:function size:0xC scope:weak
__dt__15dSalvageIfObj_cFv = .text:0x80192130; // type:function size:0x40 scope:weak
setNotHidden__15dSalvageIfObj_cFv = .text:0x80192170; // type:function size:0xC scope:weak
finalizeState__30sFStateID_c<15dAcSalbageObj_c>CFR15dAcSalbageObj_c = .text:0x80192180; // type:function size:0x30 scope:weak
executeState__30sFStateID_c<15dAcSalbageObj_c>CFR15dAcSalbageObj_c = .text:0x801921B0; // type:function size:0x30 scope:weak
initializeState__30sFStateID_c<15dAcSalbageObj_c>CFR15dAcSalbageObj_c = .text:0x801921E0; // type:function size:0x30 scope:weak
@@ -35359,7 +35359,7 @@ lbl_8052ACC0 = .data:0x8052ACC0; // type:object size:0x10
sCylSrc = .data:0x8052ACD0; // type:object size:0x30 scope:local
...data.0 = .data:0x8052ACD0; // type:label scope:local
__vt__15dAcSalbageObj_c = .data:0x8052AD00; // type:object size:0x100
__vt__14SalbageRelated = .data:0x8052AE00; // type:object size:0x2C
__vt__15dSalvageIfObj_c = .data:0x8052AE00; // type:object size:0x2C
@22347 = .data:0x8052AE2C; // type:object size:0xC scope:local
@22348 = .data:0x8052AE38; // type:object size:0xC scope:local
@22349 = .data:0x8052AE44; // type:object size:0xC scope:local
+19
View File
@@ -0,0 +1,19 @@
#ifndef D_A_SALBAGE_H
#define D_A_SALBAGE_H
#include "common.h"
class dSalvageIf_c {
public:
/* vt 0x08 */ virtual ~dSalvageIf_c() {}
/* vt 0x0C */ virtual void setCarried() = 0;
/* vt 0x10 */ virtual void setNotCarried() = 0;
/* vt 0x14 */ virtual bool isCarried() const = 0;
/* vt 0x18 */ virtual void setHidden() = 0;
/* vt 0x1C */ virtual void setNotHidden() = 0;
/* vt 0x20 */ virtual bool isHidden() const = 0;
/* vt 0x24 */ virtual s32 getSalvageObjId() const = 0;
/* vt 0x28 */ virtual void doDemoThrow() = 0;
};
#endif
+15 -14
View File
@@ -6,6 +6,7 @@
#include "d/col/bg/d_bg_s_acch.h"
#include "d/col/cc/d_cc_d.h"
#include "d/d_shadow.h"
#include "d/a/d_a_salbage.h"
#include "m/m3d/m_smdl.h"
#include "m/m_mtx.h"
#include "m/m_quat.h"
@@ -23,33 +24,33 @@ enum SalvageObj_e {
SALVAGE_OBJ_POT = 6,
};
class SalbageRelated {
class dSalvageIfObj_c : public dSalvageIf_c {
public:
SalbageRelated(dAcSalbageObj_c *obj, s32 id) : mpObj(obj), mCarried(false), mHidden(false), mSalvageObjId(id) {}
dSalvageIfObj_c(dAcSalbageObj_c *obj, s32 id) : mpObj(obj), mCarried(false), mHidden(false), mSalvageObjId(id) {}
/* vt 0x08 */ virtual ~SalbageRelated() {}
/* vt 0x0C */ virtual void setCarried() {
/* vt 0x08 */ virtual ~dSalvageIfObj_c() {}
/* vt 0x0C */ virtual void setCarried() override {
mCarried = true;
}
/* vt 0x10 */ virtual void setNotCarried() {
/* vt 0x10 */ virtual void setNotCarried() override {
mCarried = false;
}
/* vt 0x14 */ virtual bool isCarried() const {
/* vt 0x14 */ virtual bool isCarried() const override {
return mCarried;
}
/* vt 0x18 */ virtual void setHidden() {
/* vt 0x18 */ virtual void setHidden() override {
mHidden = true;
}
/* vt 0x1C */ virtual void setNotHidden() {
/* vt 0x1C */ virtual void setNotHidden() override {
mHidden = false;
}
/* vt 0x20 */ virtual bool isHidden() const {
/* vt 0x20 */ virtual bool isHidden() const override {
return mHidden;
}
/* vt 0x24 */ virtual s32 getSalvageObjId() const {
/* vt 0x24 */ virtual s32 getSalvageObjId() const override {
return mSalvageObjId;
}
/* vt 0x28 */ virtual void doDemoThrow();
/* vt 0x28 */ virtual void doDemoThrow() override;
private:
/* 0x04 */ dAcSalbageObj_c *mpObj;
@@ -65,7 +66,7 @@ private:
* the Salvage Robot NPC, AKA Scrapper.
*/
class dAcSalbageObj_c : public dAcObjBase_c {
friend class SalbageRelated;
friend class dSalvageIfObj_c;
enum Behavior_e {
/// The object is stationary and disappears when picked up
@@ -81,7 +82,7 @@ public:
: field_0x330(0),
mpMdl(mdl),
mStateMgr(*this),
mSalbageRelated(this, salvageObjId),
mSalvageIf(this, salvageObjId),
mDowsingTarget(this, DowsingTarget::SLOT_NONE),
mIsDemoState(false),
mpNextStateId(nullptr) {}
@@ -169,7 +170,7 @@ protected:
/* 0x8AC */ STATE_MGR_DECLARE(dAcSalbageObj_c);
/* 0x8E8 */ s32 mBehavior;
/* 0x8EC */ bool mIsDemoState;
/* 0x8F0 */ SalbageRelated mSalbageRelated;
/* 0x8F0 */ dSalvageIfObj_c mSalvageIf;
/* 0x900 */ f32 field_0x900;
/* 0x904 */ s16 field_0x904;
/* 0x908 */ mMtx_c mWorldSRMtx;
+2 -4
View File
@@ -4,6 +4,7 @@
#include "c/c_math.h"
#include "common.h"
#include "d/a/d_a_base.h"
#include "d/a/d_a_salbage.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/c/c_m3d_g_aab.h"
#include "d/d_jnt_col.h"
@@ -18,9 +19,6 @@
#include "m/m_vec.h"
#include "m/types_m.h"
class SalbageRelated;
// Ghidra: ActorObjectBase
// size: 0x330
// vtable: 0x805015b8
@@ -54,7 +52,7 @@ public:
/* 0x210 */ dLinkage_c mLinkage;
/* 0x2B8 */ u32 mField_0x2B8;
/* 0x2BC */ ActorLighting mLightingInfo;
/* 0x32C */ SalbageRelated *mpSalbageRelated;
/* 0x32C */ dSalvageIf_c *mpSalvageIf;
public:
mVec3_c &GetOldPosition() {
+20 -20
View File
@@ -44,7 +44,7 @@ static const InteractionTargetDef sInteractionTargetDefs[] = {
{0, 0, 1, EXAMINE_TALK, 0, 250.0f, 60.0f, 0.0f, -50.0f, 150.0f, 50.0f, 1.0f},
};
void SalbageRelated::doDemoThrow() {
void dSalvageIfObj_c::doDemoThrow() {
mpObj->mStateMgr.changeState(dAcSalbageObj_c::StateID_DemoThrow);
}
@@ -66,8 +66,8 @@ int dAcSalbageObj_c::actorExecute() {
int dAcSalbageObj_c::preExecute() {
// TODO - this matches, but so does `bool` conversion...
int result = dAcObjBase_c::preExecute() == NOT_READY ? NOT_READY : SUCCEEDED;
if (dSalvageMgr_c::sInstance->checkDeliveredStoryflag(mSalbageRelated.getSalvageObjId())) {
s32 id = mSalbageRelated.getSalvageObjId();
if (dSalvageMgr_c::sInstance->checkDeliveredStoryflag(mSalvageIf.getSalvageObjId())) {
s32 id = mSalvageIf.getSalvageObjId();
if (id != SALVAGE_OBJ_DIVINER_CRYSTAL && id != SALVAGE_OBJ_POT) {
if (!EventManager::isInEvent()) {
deleteRequest();
@@ -77,7 +77,7 @@ int dAcSalbageObj_c::preExecute() {
}
if (mBehavior == BEHAVIOR_STATIONARY) {
if (dSalvageMgr_c::sInstance->getCurrentSalvageObjId() == mSalbageRelated.getSalvageObjId()) {
if (dSalvageMgr_c::sInstance->getCurrentSalvageObjId() == mSalvageIf.getSalvageObjId()) {
if (!EventManager::isInEvent()) {
deleteRequest();
}
@@ -108,7 +108,7 @@ int dAcSalbageObj_c::preDraw() {
if (dAcObjBase_c::preDraw() == NOT_READY) {
return NOT_READY;
} else {
return mSalbageRelated.isHidden() ? NOT_READY : SUCCEEDED;
return mSalvageIf.isHidden() ? NOT_READY : SUCCEEDED;
}
}
@@ -142,9 +142,9 @@ void dAcSalbageObj_c::initSalbageObj() {
mShadowRot.w = 180.0f;
mScale.set(1.0f, 1.0f, 1.0f);
mBehavior = getFromParams(4, 0xF);
mpSalbageRelated = &mSalbageRelated;
mpSalvageIf = &mSalvageIf;
initCcAndBg();
if (dSalvageMgr_c::sInstance->checkDeliveredStoryflag(mSalbageRelated.getSalvageObjId())) {
if (dSalvageMgr_c::sInstance->checkDeliveredStoryflag(mSalvageIf.getSalvageObjId())) {
if (mBehavior == BEHAVIOR_CARRY && vt_0x80()) {
mStateMgr.changeState(StateID_After);
} else {
@@ -156,12 +156,12 @@ void dAcSalbageObj_c::initSalbageObj() {
forwardSpeed = 0.0f;
velocity.set(0.0f, 0.0f, 0.0f);
forwardAccel = 0.0f;
mSalbageRelated.setHidden();
if (dSalvageMgr_c::sInstance->getCurrentSalvageObjId() != mSalbageRelated.getSalvageObjId()) {
mSalvageIf.setHidden();
if (dSalvageMgr_c::sInstance->getCurrentSalvageObjId() != mSalvageIf.getSalvageObjId()) {
mStateMgr.changeState(StateID_Kill);
return;
} else {
mSalbageRelated.setCarried();
mSalvageIf.setCarried();
mStateMgr.changeState(StateID_Carried);
}
break;
@@ -174,7 +174,7 @@ void dAcSalbageObj_c::initSalbageObj() {
break;
}
default: {
if (dSalvageMgr_c::sInstance->getCurrentSalvageObjId() == mSalbageRelated.getSalvageObjId()) {
if (dSalvageMgr_c::sInstance->getCurrentSalvageObjId() == mSalvageIf.getSalvageObjId()) {
mStateMgr.changeState(StateID_Kill);
return;
} else {
@@ -203,7 +203,7 @@ void dAcSalbageObj_c::doInteraction(s32 arg) {
}
void dAcSalbageObj_c::addAttentionTargetIfNeeded() {
switch (mSalbageRelated.getSalvageObjId()) {
switch (mSalvageIf.getSalvageObjId()) {
case SALVAGE_OBJ_WATER_JAR:
case SALVAGE_OBJ_POT: return;
default: addAttentionTarget(); break;
@@ -212,10 +212,10 @@ void dAcSalbageObj_c::addAttentionTargetIfNeeded() {
void dAcSalbageObj_c::addAttentionTarget() {
AttentionManager::sInstance->addTarget(
*this, sInteractionTargetDefs[mSalbageRelated.getSalvageObjId()], 0, nullptr
*this, sInteractionTargetDefs[mSalvageIf.getSalvageObjId()], 0, nullptr
);
InteractionTargetDef copy = sInteractionTargetDefs[mSalbageRelated.getSalvageObjId()];
InteractionTargetDef copy = sInteractionTargetDefs[mSalvageIf.getSalvageObjId()];
copy.field_0x00 = 1;
AttentionManager::sInstance->addTarget(*this, copy, 0, nullptr);
}
@@ -236,14 +236,14 @@ bool dAcSalbageObj_c::shouldBeActiveDowsingTarget() const {
return false;
}
if (dSalvageMgr_c::sInstance->getCurrentSalvageObjId() == mSalbageRelated.getSalvageObjId()) {
if (dSalvageMgr_c::sInstance->getCurrentSalvageObjId() == mSalvageIf.getSalvageObjId()) {
return false;
}
if (dSalvageMgr_c::sInstance->hasDowsingForSalvageObj(this) == false) {
return false;
} else {
return mSalbageRelated.getSalvageObjId() != SALVAGE_OBJ_POT;
return mSalvageIf.getSalvageObjId() != SALVAGE_OBJ_POT;
}
}
@@ -266,7 +266,7 @@ void dAcSalbageObj_c::calcMtxFromSalbageNpc(mMtx_c &ret) {
ret.ZXYrotM(rotation);
} else {
ret = npc->getCarriedObjMtx();
mMtx_c rotMtx = dSalvageMgr_c::sInstance->getCarryRotMtx2(mSalbageRelated.getSalvageObjId());
mMtx_c rotMtx = dSalvageMgr_c::sInstance->getCarryRotMtx2(mSalvageIf.getSalvageObjId());
MTXConcat(ret, rotMtx, ret);
ret.getTranslation(position);
}
@@ -274,7 +274,7 @@ void dAcSalbageObj_c::calcMtxFromSalbageNpc(mMtx_c &ret) {
mMtx_c dAcSalbageObj_c::calcWorldMtx() {
mMtx_c ret;
if (mSalbageRelated.isCarried()) {
if (mSalvageIf.isCarried()) {
calcMtxFromSalbageNpc(ret);
} else {
ret.transS(position);
@@ -317,7 +317,7 @@ void dAcSalbageObj_c::initializeState_Wait() {
mIsDowsingRegistered = true;
}
void dAcSalbageObj_c::executeState_Wait() {
if (dSalvageMgr_c::sInstance->getCurrentSalvageObjId() != mSalbageRelated.getSalvageObjId()) {
if (dSalvageMgr_c::sInstance->getCurrentSalvageObjId() != mSalvageIf.getSalvageObjId()) {
if (!dSalvageMgr_c::sInstance->mSlbRef.isLinked()) {
mVec3_c pos(position.x, position.y + 100000.0f, position.z);
dAcObjBase_c::create(fProfile::NPC_SLB, roomid, 0xFFFFFD01, &pos, nullptr, nullptr, -1);
@@ -376,7 +376,7 @@ void dAcSalbageObj_c::initializeState_DemoThrow() {
mBgObjAcch.SetRoofNone();
mBgObjAcch.SetGndThinCellingOff();
mBgAcchCir.SetWall(0.0f, 100.0f);
mSalbageRelated.setNotCarried();
mSalvageIf.setNotCarried();
}
void dAcSalbageObj_c::executeState_DemoThrow() {}
void dAcSalbageObj_c::finalizeState_DemoThrow() {}