summaryrefslogtreecommitdiff
path: root/include/d
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-08-21 23:10:18 +0200
committerrobojumper <robojumper@gmail.com>2025-09-15 22:11:23 +0200
commitcbe298e99a8da9ff2ddd66a651c852d5eeca914e (patch)
tree9343f8c8290e38ae55fd000ea598f94fb548090d /include/d
parenta416cab97e7999f8d4fc590ac69b7f4d3efc1389 (diff)
d_a_salbage_obj OK
Diffstat (limited to 'include/d')
-rw-r--r--include/d/a/d_a_salbage_obj.h167
-rw-r--r--include/d/a/npc/d_a_npc_salbage_robot.h17
-rw-r--r--include/d/a/npc/d_a_npc_talk_kensei.h16
-rw-r--r--include/d/a/obj/d_a_obj_base.h4
-rw-r--r--include/d/a/obj/d_a_obj_pot_sal.h11
5 files changed, 204 insertions, 11 deletions
diff --git a/include/d/a/d_a_salbage_obj.h b/include/d/a/d_a_salbage_obj.h
new file mode 100644
index 00000000..e00732e3
--- /dev/null
+++ b/include/d/a/d_a_salbage_obj.h
@@ -0,0 +1,167 @@
+#ifndef D_A_SALBAGE_OBJ_H
+#define D_A_SALBAGE_OBJ_H
+
+#include "d/a/obj/d_a_obj_base.h"
+#include "d/col/bg/d_bg_s_acch.h"
+#include "d/col/cc/d_cc_d.h"
+#include "d/d_shadow.h"
+#include "m/m3d/m_smdl.h"
+#include "m/m_mtx.h"
+#include "m/m_quat.h"
+#include "m/m_vec.h"
+#include "s/s_State.hpp"
+#include "toBeSorted/dowsing_target.h"
+
+class dAcSalbageObj_c;
+
+class SalbageRelated {
+public:
+ SalbageRelated(dAcSalbageObj_c *obj) : mpObj(obj), mSalvageObjId(6) {}
+
+ /* vt 0x08 */ virtual ~SalbageRelated() {}
+ /* vt 0x0C */ virtual void setCarried() {
+ mCarried = true;
+ }
+ /* vt 0x10 */ virtual void setNotCarried() {
+ mCarried = false;
+ }
+ /* vt 0x14 */ virtual bool isCarried() const {
+ return mCarried;
+ }
+ /* vt 0x18 */ virtual void setHidden() {
+ mHidden = true;
+ }
+ /* vt 0x1C */ virtual void setNotHidden() {
+ mHidden = false;
+ }
+ /* vt 0x20 */ virtual bool isHidden() const {
+ return mHidden;
+ }
+ /* vt 0x24 */ virtual s32 getSalvageObjId() const {
+ return mSalvageObjId;
+ }
+ /* vt 0x28 */ virtual void doDemoThrow();
+
+private:
+ /* 0x04 */ dAcSalbageObj_c *mpObj;
+ /* 0x08 */ bool mCarried;
+ /* 0x09 */ bool mHidden;
+ /* 0x0C */ s32 mSalvageObjId;
+};
+
+/**
+ * Actor - Object - Salvage
+ *
+ * Base class for objects that can be carried by
+ * the Salvage Robot NPC, AKA Scrapper.
+ */
+class dAcSalbageObj_c : public dAcObjBase_c {
+ friend class SalbageRelated;
+
+ enum Behavior_e {
+ /// The object is stationary and disappears when picked up
+ BEHAVIOR_STATIONARY,
+ /// The object is being carried and disappears when dropped
+ BEHAVIOR_CARRY,
+ /// The object is being carried in the Sky by the salvage robot
+ BEHAVIOR_FLY,
+ };
+
+public:
+ dAcSalbageObj_c() : mStateMgr(*this), mSalbageRelated(this), mDowsingTarget(this, DowsingTarget::SLOT_NONE) {}
+ virtual ~dAcSalbageObj_c() {}
+
+ virtual int preExecute() override;
+ virtual int draw() override;
+ virtual int preDraw() override;
+
+ virtual int actorExecute() override;
+ virtual void doInteraction(s32) override;
+
+ /* vt 0x80 */ virtual bool vt_0x80() const {
+ return false;
+ }
+
+protected:
+ bool shouldBeActiveDowsingTarget() const;
+ void initSalbageObj();
+ void loadBehaviorFromParams();
+ void calcMtxFromSalbageNpc(mMtx_c &ret);
+ void addAttentionTargetIfNeeded();
+ void addAttentionTarget();
+
+ void initCcAndBg();
+
+ void executeInternal();
+ void updateCc();
+ void updateBgAcchCir();
+ void updateMdl();
+
+ /* vt 0x84-0x8C */ STATE_VIRTUAL_FUNC_DECLARE(dAcSalbageObj_c, Wait);
+ /* vt 0x90-0x98 */ STATE_VIRTUAL_FUNC_DECLARE(dAcSalbageObj_c, Carried);
+ /* vt 0x9C-0xA4 */ STATE_VIRTUAL_FUNC_DECLARE(dAcSalbageObj_c, Demo);
+ /* vt 0xA8-0xB0 */ STATE_VIRTUAL_FUNC_DECLARE(dAcSalbageObj_c, DemoThrow);
+ /* vt 0xB4-0xBC */ STATE_VIRTUAL_FUNC_DECLARE(dAcSalbageObj_c, Fly);
+ /* vt 0xC0-0xC8 */ STATE_VIRTUAL_FUNC_DECLARE(dAcSalbageObj_c, After);
+ STATE_FUNC_DECLARE(dAcSalbageObj_c, Kill);
+
+ /* vt 0xCC */ virtual mMtx_c calcWorldMtx();
+ /* vt 0xD0 */ virtual void vt_0xD0() {}
+
+ /* vt 0xD4 */ virtual bool isInStateWait() const {
+ return mStateMgr.isState(StateID_Wait);
+ }
+ /* vt 0xD8 */ virtual bool isInStateWaitOrDemoThrow() const {
+ return mStateMgr.isState(StateID_Wait) || mStateMgr.isState(StateID_DemoThrow);
+ }
+ /* vt 0xDC */ virtual DowsingTarget::DowsingSlot getDowsingSlot() const {
+ return DowsingTarget::SLOT_QUEST;
+ }
+ /* vt 0xE0 */ virtual f32 getCcRadius() const {
+ return 0.0f;
+ }
+ /* vt 0xE4 */ virtual f32 getCcHeight() const {
+ return 0.0f;
+ }
+ /* vt 0xE8 */ virtual f32 getBgAcchCirRadius() const {
+ return 0.0f;
+ }
+ /* vt 0xEC */ virtual f32 getBgAcchCirHeight() const {
+ return 0.0f;
+ }
+ /* vt 0xF0 */ virtual f32 getPoscopy2YOffset() const {
+ return 0.0f;
+ }
+ /* vt 0xF4 */ virtual f32 getPoscopy3YOffset() const {
+ return 0.0f;
+ }
+ /* vt 0xF8 */ virtual f32 getDowsingUnusedF32() const {
+ return 1500.0f;
+ }
+ /* vt 0xFC */ virtual f32 getDowsingTargetYOffset() const {
+ return 50.0f;
+ }
+
+ /* 0x330 */ u8 _0x330[0x334 - 0x330];
+
+ /* 0x334 */ m3d::smdl_c *mpMdl;
+ /* 0x338 */ dShadowCircle_c mShadow;
+ /* 0x340 */ mQuat_c mShadowRot;
+ /* 0x350 */ dBgS_AcchCir mBgAcchCir;
+ /* 0x3AC */ dBgS_ObjAcch mBgObjAcch;
+ /* 0x75C */ dCcD_Cyl mCcCyl;
+ /* 0x8AC */ STATE_MGR_DECLARE(dAcSalbageObj_c);
+ /* 0x8E8 */ s32 mBehavior;
+ /* 0x8EC */ bool mIsDemoState;
+ /* 0x8F0 */ SalbageRelated mSalbageRelated;
+ /* 0x900 */ f32 field_0x900;
+ /* 0x904 */ s16 field_0x904;
+ /* 0x908 */ mMtx_c mWorldSRMtx;
+ /* 0x938 */ f32 field_0x938;
+ /* 0x93C */ DowsingTarget mDowsingTarget;
+ /* 0x95C */ mVec3_c field_0x95C;
+ /* 0x968 */ bool mIsDowsingRegistered;
+ /* 0x96C */ const sStateID_c *mpNextStateId;
+};
+
+#endif
diff --git a/include/d/a/npc/d_a_npc_salbage_robot.h b/include/d/a/npc/d_a_npc_salbage_robot.h
index b1267b30..f23d7dfb 100644
--- a/include/d/a/npc/d_a_npc_salbage_robot.h
+++ b/include/d/a/npc/d_a_npc_salbage_robot.h
@@ -1,13 +1,13 @@
#ifndef D_A_NPC_SALBAGE_ROBOT_H
#define D_A_NPC_SALBAGE_ROBOT_H
-#include "d/a/npc/d_a_npc.h"
+#include "d/a/npc/d_a_ordinary_npc.h"
+#include "m/m_mtx.h"
#include "s/s_State.hpp"
-#include "s/s_StateMgr.hpp"
-class dAcNpcSlb_c : public dAcNpc_c {
+class dAcNpcSlb_c : public dAcOrdinaryNpc_c {
public:
- dAcNpcSlb_c() : mStateMgr(*this, sStateID::null) {}
+ dAcNpcSlb_c() {}
virtual ~dAcNpcSlb_c() {}
STATE_FUNC_DECLARE(dAcNpcSlb_c, Hide);
@@ -16,8 +16,15 @@ public:
STATE_FUNC_DECLARE(dAcNpcSlb_c, Kill);
STATE_FUNC_DECLARE(dAcNpcSlb_c, Kill2);
+ // ouch
+ mMtx_c getCarriedObjMtx() const {
+ return mCarryObjMtx;
+ }
+
private:
- /* 0x??? */ STATE_MGR_DECLARE(dAcNpcSlb_c);
+ u8 _pad[0xD50 - sizeof(dAcOrdinaryNpc_c)];
+
+ /* 0xD50 */ mMtx_c mCarryObjMtx;
};
#endif
diff --git a/include/d/a/npc/d_a_npc_talk_kensei.h b/include/d/a/npc/d_a_npc_talk_kensei.h
new file mode 100644
index 00000000..614bb4a6
--- /dev/null
+++ b/include/d/a/npc/d_a_npc_talk_kensei.h
@@ -0,0 +1,16 @@
+#ifndef D_A_NPC_TALK_KENSEI_H
+#define D_A_NPC_TALK_KENSEI_H
+
+#include "d/a/npc/d_a_ordinary_npc.h"
+
+class dAcSalbageObj_c;
+
+class dAcNpcTalkKensei_c : public dAcOrdinaryNpc_c {
+public:
+ static dAcNpcTalkKensei_c *GetInstance();
+ void triggerSalvageQuestion(dAcSalbageObj_c *);
+
+private:
+};
+
+#endif
diff --git a/include/d/a/obj/d_a_obj_base.h b/include/d/a/obj/d_a_obj_base.h
index 2b0c75d8..1f950092 100644
--- a/include/d/a/obj/d_a_obj_base.h
+++ b/include/d/a/obj/d_a_obj_base.h
@@ -18,6 +18,8 @@
#include "m/m_vec.h"
#include "m/types_m.h"
+class SalbageRelated;
+
// Ghidra: ActorObjectBase
// size: 0x330
@@ -52,7 +54,7 @@ public:
/* 0x210 */ dLinkage_c mLinkage;
/* 0x2B8 */ u32 mField_0x2B8;
/* 0x2BC */ ActorLighting mLightingInfo;
- /* 0x32C */ u32 mField_0x32C;
+ /* 0x32C */ SalbageRelated *mpSalbageRelated;
public:
mVec3_c &GetOldPosition() {
diff --git a/include/d/a/obj/d_a_obj_pot_sal.h b/include/d/a/obj/d_a_obj_pot_sal.h
index f9d6e50c..5a4a6e49 100644
--- a/include/d/a/obj/d_a_obj_pot_sal.h
+++ b/include/d/a/obj/d_a_obj_pot_sal.h
@@ -1,17 +1,18 @@
#ifndef D_A_OBJ_POT_SAL_H
#define D_A_OBJ_POT_SAL_H
-#include "d/a/obj/d_a_obj_base.h"
+#include "d/a/d_a_salbage_obj.h"
#include "s/s_State.hpp"
-#include "s/s_StateMgr.hpp"
-class dAcOpotSal_c : public dAcObjBase_c {
+class dAcOpotSal_c : public dAcSalbageObj_c {
public:
- dAcOpotSal_c() : mStateMgr(*this, sStateID::null) {}
+ dAcOpotSal_c() {}
virtual ~dAcOpotSal_c() {}
+ STATE_VIRTUAL_OVERRIDE_FUNC_DECLARE(dAcOpotSal_c, dAcSalbageObj_c, DemoThrow);
+ STATE_VIRTUAL_OVERRIDE_FUNC_DECLARE(dAcOpotSal_c, dAcSalbageObj_c, After);
+
private:
- /* 0x??? */ STATE_MGR_DECLARE(dAcOpotSal_c);
};
#endif