mirror of
https://github.com/zeldaret/ss
synced 2026-05-25 07:23:00 -04:00
205 lines
6.6 KiB
C++
205 lines
6.6 KiB
C++
#ifndef D_A_NPC_H
|
|
#define D_A_NPC_H
|
|
|
|
#include "common.h"
|
|
#include "d/a/d_a_itembase.h"
|
|
#include "d/a/obj/d_a_obj_base.h"
|
|
#include "m/m_vec.h"
|
|
#include "s/s_State.hpp"
|
|
#include "s/s_StateInterfaces.hpp"
|
|
|
|
// This is the NPC base. Most npcs actually use dAcOrdinaryNpc, but this just is a simpler one?
|
|
|
|
// Ghidra: ActorNpcBase
|
|
// size: 0x6e4
|
|
// official name
|
|
class dAcNpc_c : public dAcObjBase_c {
|
|
public:
|
|
dAcNpc_c();
|
|
virtual ~dAcNpc_c();
|
|
|
|
/* vt 0x080 */ virtual bool giveItem(void *unknown, ITEM_ID item_id);
|
|
/* vt 0x084 */ virtual void getPosCopy3(mVec3_c &outResult) {
|
|
outResult.copyFrom(poscopy3);
|
|
}
|
|
/* vt 0x088 */ virtual void acNpc_vt_0x88() {}
|
|
/* vt 0x08C */ virtual void acNpc_vt_0x8C() {}
|
|
/* vt 0x090 */ virtual int acNpc_vt_0x90() {
|
|
return 1;
|
|
}
|
|
/* vt 0x094 */ virtual int acNpc_vt_0x94() {
|
|
return 1;
|
|
}
|
|
/* vt 0x098 */ virtual int acNpc_vt_0x98() {
|
|
return 1;
|
|
}
|
|
/* vt 0x09C */ virtual void acNpc_vt_0x9C();
|
|
/* vt 0x0A0 */ virtual void acNpc_vt_0xA0();
|
|
/* vt 0x0A4 */ virtual void acNpc_vt_0xA4();
|
|
/* vt 0x0A8 */ virtual void acNpc_vt_0xA8();
|
|
/* vt 0x0AC */ virtual void acNpc_vt_0xAC();
|
|
/* vt 0x0B0 */ virtual void acNpc_vt_0xB0();
|
|
/* vt 0x0B4 */ virtual void acNpc_vt_0xB4();
|
|
/* vt 0x0B8 */ virtual void acNpc_vt_0xB8();
|
|
/* vt 0x0BC */ virtual void acNpc_vt_0xBC();
|
|
/* vt 0x0C0 */ virtual int eventFlowSwitch2() {
|
|
return 0;
|
|
}
|
|
/* vt 0x0C4 */ virtual int eventFlowSwitch3() {
|
|
return 0;
|
|
}
|
|
/* vt 0x0C8 */ virtual int eventFlowSwitch4() {
|
|
return 0;
|
|
}
|
|
/* vt 0x0CC */ virtual void acNpc_vt_0xCC();
|
|
/* vt 0x0D0 */ virtual int acNpc_vt_0xD0();
|
|
/* vt 0x0D4 */ virtual void acNpc_vt_0xD4();
|
|
/* vt 0x0D8 */ virtual int acNpc_vt_0xD8();
|
|
/* vt 0x0DC */ virtual int acNpc_vt_0xDC() {
|
|
return 0;
|
|
}
|
|
/* vt 0x0E0 */ virtual int acNpc_vt_0xE0() {
|
|
return 0;
|
|
}
|
|
/* vt 0x0E4 */ virtual int acNpc_vt_0xE4() {
|
|
return 1;
|
|
}
|
|
/* vt 0x0E8 */ virtual void acNpc_vt_0xE8();
|
|
|
|
/* vt 0x074 */ virtual void *getObjectListEntry() override {
|
|
return &mActorListEntry;
|
|
}
|
|
|
|
/* vt 0x0EC */ virtual int acNpc_vt_0xEC() {
|
|
return 0;
|
|
}
|
|
|
|
/* vt 0x0F0 */ virtual bool isInState(const sStateIDIf_c &otherState) const {
|
|
return *mStateMgr.getStateID() == otherState;
|
|
}
|
|
|
|
/* vt 0x0F4 */ virtual void setState(const sStateIDIf_c &otherState) {
|
|
// Result is discarded, but I guess in demo builds this is used
|
|
// to prevent actors from leaving the Demo state.
|
|
(void)isInState(StateID_Demo);
|
|
mStateMgr.changeState(otherState);
|
|
}
|
|
|
|
/* vt 0xF8 */ virtual void executeState() {
|
|
mStateMgr.executeState();
|
|
}
|
|
|
|
STATE_VIRTUAL_FUNC_DECLARE(dAcNpc_c, Wait);
|
|
STATE_VIRTUAL_FUNC_DECLARE(dAcNpc_c, Demo);
|
|
|
|
/* vt 0x114 */ virtual int acNpc_vt_0x114() {
|
|
return 0;
|
|
}
|
|
|
|
/* vt 0x118 */ virtual int acNpc_vt_0x118() {
|
|
return 0;
|
|
}
|
|
/* vt 0x11C */ virtual void acNpc_vt_0x11C();
|
|
/* vt 0x120 */ virtual void acNpc_vt_0x120() {}
|
|
/* vt 0x124 */ virtual void acNpc_vt_0x124() {}
|
|
/* vt 0x128 */ virtual int acNpc_vt_0x128() {
|
|
return 0;
|
|
}
|
|
/* vt 0x12C */ virtual int acNpc_vt_0x12C() {
|
|
return 0;
|
|
}
|
|
/* vt 0x130 */ virtual void acNpc_vt_0x130();
|
|
/* vt 0x134 */ virtual void acNpc_vt_0x134();
|
|
/* vt 0x138 */ virtual void acNpc_vt_0x138();
|
|
/* vt 0x13C */ virtual void acNpc_vt_0x13C();
|
|
/* vt 0x140 */ virtual void acNpc_vt_0x140();
|
|
/* vt 0x144 */ virtual void acNpc_vt_0x144();
|
|
/* vt 0x148 */ virtual void acNpc_vt_0x148();
|
|
/* vt 0x14C */ virtual int acNpc_vt_0x14C() {
|
|
return 0;
|
|
}
|
|
/* vt 0x150 */ virtual int acNpc_vt_0x150() {
|
|
return 1;
|
|
}
|
|
/* vt 0x154 */ virtual void acNpc_vt_0x154() {}
|
|
/* vt 0x158 */ virtual void acNpc_vt_0x158() {}
|
|
/* vt 0x15C */ virtual void acNpc_vt_0x15C() {}
|
|
/* vt 0x160 */ virtual void acNpc_vt_0x160() {}
|
|
/* vt 0x164 */ virtual void acNpc_vt_0x164();
|
|
/* vt 0x168 */ virtual int acNpc_vt_0x168() {
|
|
return 0;
|
|
}
|
|
/* vt 0x16C */ virtual void acNpc_vt_0x16C();
|
|
/* vt 0x170 */ virtual void acNpc_vt_0x170();
|
|
/* vt 0x174 */ virtual void acNpc_vt_0x174();
|
|
/* vt 0x178 */ virtual void acNpc_vt_0x178();
|
|
/* vt 0x17C */ virtual void acNpc_vt_0x17C();
|
|
/* vt 0x180 */ virtual void acNpc_vt_0x180();
|
|
/* vt 0x184 */ virtual void acNpc_vt_0x184();
|
|
/* vt 0x188 */ virtual void acNpc_vt_0x188();
|
|
/* vt 0x18C */ virtual void acNpc_vt_0x18C();
|
|
/* vt 0x190 */ virtual void acNpc_vt_0x190();
|
|
/* vt 0x194 */ virtual void acNpc_vt_0x194();
|
|
/* vt 0x198 */ virtual void acNpc_vt_0x198();
|
|
/* vt 0x19C */ virtual void acNpc_vt_0x19C();
|
|
/* vt 0x1A0 */ virtual void acNpc_vt_0x1A0();
|
|
/* vt 0x1A4 */ virtual void acNpc_vt_0x1A4();
|
|
/* vt 0x1A8 */ virtual void acNpc_vt_0x1A8();
|
|
/* vt 0x1AC */ virtual void acNpc_vt_0x1AC();
|
|
/* vt 0x1B0 */ virtual void acNpc_vt_0x1B0();
|
|
/* vt 0x1B4 */ virtual void acNpc_vt_0x1B4();
|
|
/* vt 0x1B8 */ virtual void acNpc_vt_0x1B8();
|
|
/* vt 0x1BC */ virtual void acNpc_vt_0x1BC();
|
|
/* vt 0x1C0 */ virtual void acNpc_vt_0x1C0();
|
|
/* vt 0x1C4 */ virtual void acNpc_vt_0x1C4();
|
|
/* vt 0x1C8 */ virtual void acNpc_vt_0x1C8();
|
|
/* vt 0x1CC */ virtual void acNpc_vt_0x1CC();
|
|
/* vt 0x1D0 */ virtual void acNpc_vt_0x1D0();
|
|
/* vt 0x1D4 */ virtual void acNpc_vt_0x1D4();
|
|
/* vt 0x1D8 */ virtual void acNpc_vt_0x1D8();
|
|
/* vt 0x1DC */ virtual void acNpc_vt_0x1DC();
|
|
/* vt 0x1E0 */ virtual void acNpc_vt_0x1E0();
|
|
/* vt 0x1E4 */ virtual void acNpc_vt_0x1E4();
|
|
/* vt 0x1E8 */ virtual int acNpc_vt_0x1E8() {
|
|
return 1;
|
|
}
|
|
/* vt 0x1EC */ virtual int acNpc_vt_0x1EC() {
|
|
return 1;
|
|
}
|
|
/* vt 0x1F0 */ virtual void *acNpc_vt_0x1F0() {
|
|
return field_0x364;
|
|
}
|
|
/* vt 0x1F4 */ virtual int acNpc_vt_0x1F4() {
|
|
return 1;
|
|
}
|
|
/* vt 0x1F8 */ virtual bool acNpc_vt_0x1F8() {
|
|
return !acNpc_vt_0x1F4();
|
|
}
|
|
/* vt 0x1FC */ virtual bool acNpc_vt_0x1FC() {
|
|
return field_0x684 == 1;
|
|
}
|
|
/* vt 0x200 */ virtual bool acNpc_vt_0x200() {
|
|
return !acNpc_vt_0x1FC();
|
|
}
|
|
/* vt 0x204 */ virtual int acNpc_vt_0x204() {
|
|
return 0;
|
|
}
|
|
|
|
protected:
|
|
void npcExecute();
|
|
static mVec3_c getLinkPos();
|
|
|
|
private:
|
|
/* 0x330 */ u8 field_0x330[0x358 - 0x330];
|
|
/* 0x358 */ fLiNdBa_c mActorListEntry;
|
|
/* 0x364 */ u8 field_0x364[0x4C0 - 0x364];
|
|
/* 0x4C0 */ STATE_MGR_DECLARE(dAcNpc_c);
|
|
/* 0x4FC */ u8 field_0x4FC[0x684 - 0x4FC];
|
|
/* 0x684 */ u8 field_0x684;
|
|
/* 0x685 */ u8 field_0x685[0x6E4 - 0x685];
|
|
|
|
static fLiMgBa_c NPC_ACTOR_LIST;
|
|
};
|
|
|
|
#endif
|