Files
tww/include/d/actor/d_a_npc_os.h
T
2025-03-17 22:26:56 -04:00

292 lines
9.0 KiB
C++

#ifndef D_A_NPC_OS_H
#define D_A_NPC_OS_H
#include "d/d_bg_s_acch.h"
#include "SSystem/SComponent/c_bg_s_poly_info.h"
#include "SSystem/SComponent/c_phase.h"
#include "d/d_npc.h"
#include "d/actor/d_a_player_npc.h"
#include "d/d_particle.h"
#include "m_Do/m_Do_hostIO.h"
class mDoExt_McaMorf;
namespace daPedestal { class daPds_c; }
class daNpc_Os_infiniteEcallBack_c : public dPa_levelEcallBack {
public:
void end();
void makeEmitter(u16, const cXyz*, const csXyz*, const cXyz*);
void execute(JPABaseEmitter*) {}
void setup(JPABaseEmitter* pEmitter, const cXyz*, const csXyz*, s8) {
mpBaseEmitter = pEmitter;
}
JPABaseEmitter* getEmitter() { return mpBaseEmitter; }
private:
/* 0x04 */ JPABaseEmitter* mpBaseEmitter;
}; // Size: 0x08
class daNpc_Os_c : public daPy_npc_c {
public:
typedef int(daNpc_Os_c::*ActionFunc_t)(void*);
daNpc_Os_c() {}
~daNpc_Os_c();
BOOL chkNpcAction(ActionFunc_t action) {
return mNpcAction == action;
}
BOOL chkPlayerAction(ActionFunc_t action) {
return mPlayerAction == action;
}
void clearStatus() { field_0x784 = 0; }
cXyz& getAttentionBasePos() { return field_0x754; }
s16 getBackbone_x() { return mJntCtrl.getBackbone_x(); }
s16 getBackbone_y() { return mJntCtrl.getBackbone_y(); }
s8 getCattleRoomNo() { return m_cattleRoomNo; }
cXyz& getEyePos() { return field_0x748; }
f32 getGroundY() { return mAcch.GetGroundH(); }
s16 getHead_x() { return mJntCtrl.getHead_x(); }
s16 getHead_y() { return mJntCtrl.getHead_y(); }
MtxP getLeftHandMatrix() { return cullMtx; }
MtxP getRightHandMatrix() { return cullMtx; }
f32 getBaseAnimeFrameRate() { return 1.0f; }
f32 getBaseAnimeFrame() { return 0.0f; }
void incAttnSetCount() {
if(field_0x7A3 != 0xFF) {
field_0x7A3 += 1;
}
}
BOOL isFinish() { return cLib_checkBit(field_0x784, 0x1UL); }
void onFinish() { cLib_onBit(field_0x784, 0x1UL); }
BOOL isSetHomePos() { return cLib_checkBit(field_0x784, 0x2UL); }
void onSetHomePos() { cLib_onBit(field_0x784, 0x2UL); }
BOOL isWaterHit() { return cLib_checkBit(field_0x784, 0x4UL); }
void onWaterHit() { cLib_onBit(field_0x784, 0x4UL); }
BOOL isGravity() { return cLib_checkBit(field_0x784, 0x8UL); }
void onGravity() { cLib_onBit(field_0x784, 0x8UL); }
void offGravity() { cLib_offBit(field_0x784, 0x8UL); }
// Note: The 0x10 bit is used in the final release, but not in the demo debug maps, so its official name is unknown.
void offPlayerRoom(int idx) { m_playerRoom[idx] = false; }
void onPlayerRoom(int idx) { m_playerRoom[idx] = true; }
void setCattleRoomNo(s8 roomNo) { m_cattleRoomNo = roomNo; }
static bool isPlayerRoom(int idx) { return m_playerRoom[idx]; }
static bool isPlayerRoom_Goat() { return isPlayerRoom(1); }
cPhs_State create();
BOOL createHeap();
BOOL jointCheck(s8);
BOOL wakeupCheck();
void setWakeup();
BOOL finishCheck();
void setFinish();
s8 getWakeupOrderEventNum();
s8 getFinishOrderEventNum();
int getMyStaffId();
s8 getRestartNumber();
BOOL checkGoalRoom();
void checkPlayerRoom();
void eventOrderCheck();
void makeBeam(int);
void endBeam();
s32 wallHitCheck();
void walkProc(f32, s16);
BOOL setAction(ActionFunc_t*, ActionFunc_t, void*);
void npcAction(void*);
void setNpcAction(ActionFunc_t, void*);
void playerAction(void*);
void setPlayerAction(ActionFunc_t, void*);
s16 getStickAngY();
int calcStickPos(s16, cXyz*);
void returnLinkPlayer();
BOOL returnLinkCheck();
BOOL waitNpcAction(void*);
BOOL finish01NpcAction(void*);
BOOL finish02NpcAction(void*);
BOOL talkNpcAction(void*);
BOOL carryNpcAction(void*);
BOOL throwNpcAction(void*);
BOOL jumpNpcAction(void*);
void routeAngCheck(cXyz&, s16*);
void routeWallCheck(cXyz&, cXyz&, s16*);
f32 checkForwardGroundY(s16);
f32 checkWallJump(s16);
BOOL routeCheck(f32, s16*);
BOOL searchNpcAction(void*);
BOOL waitPlayerAction(void*);
BOOL walkPlayerAction(void*);
BOOL eventProc();
void initialDefault(int);
BOOL actionDefault(int);
void initialWaitEvent(int);
BOOL actionWaitEvent(int);
void initialWakeupEvent(int);
BOOL actionWakeupEvent(int);
void initialMoveEvent(int);
BOOL actionMoveEvent(int);
void initialMoveEndEvent(int);
void initialEndEvent(int);
void initialTurnEvent(int);
BOOL actionTurnEvent(int);
void initialFinishEvent(int);
BOOL actionFinishEvent(int);
void initialMsgSetEvent(int);
BOOL actionMsgSetEvent(int);
BOOL actionMsgEndEvent(int);
void initialSwitchOnEvent(int);
void initialNextEvent(int);
void initialSaveEvent(int);
BOOL talk_init();
BOOL talk();
void setAnm(int);
BOOL dNpc_Os_setAnm(mDoExt_McaMorf*, int, f32, f32, int, const char*);
BOOL initBrkAnm(u8, bool);
void playBrkAnm();
void setAnm_brkAnm(int);
BOOL chkAttention(cXyz, s16);
bool chkArea(cXyz*);
void carryCheck();
void eventOrder();
void checkOrder();
BOOL checkCommandTalk();
u16 next_msgStatus(u32* pMsgNo);
u32 getMsg();
void setCollision();
void setAttention(bool);
void lookBack(int, int, int);
void setBaseMtx();
BOOL init();
BOOL draw();
void animationPlay();
void smokeSet(u16);
BOOL execute();
static bool m_playerRoom[];
static s8 m_cattleRoomNo;
static dPa_smokeEcallBack m_smoke;
static dKy_tevstr_c m_smoke_tevstr;
private:
/* 0x4EC */ request_of_phase_process_class mPhs;
/* 0x4F4 */ mDoExt_McaMorf* mpMorf;
/* 0x4F8 */ daPedestal::daPds_c* mpPedestal;
/* 0x4FC */ mDoExt_brkAnm mBrkAnm;
/* 0x514 */ u32 mShadowId;
/* 0x518 */ dBgS_AcchCir mAcchCir[2];
/* 0x598 */ dCcD_Stts mStts;
/* 0x5D4 */ dCcD_Cyl mCyl;
/* 0x704 */ dNpc_JntCtrl_c mJntCtrl;
/* 0x738 */ daNpc_Os_infiniteEcallBack_c field_0x738;
/* 0x740 */ daNpc_Os_infiniteEcallBack_c field_0x740;
/* 0x748 */ cXyz field_0x748;
/* 0x754 */ cXyz field_0x754;
/* 0x760 */ f32 mPrevMorfFrame;
/* 0x764 */ f32 field_0x764;
/* 0x768 */ ActionFunc_t mPlayerAction;
/* 0x774 */ ActionFunc_t mNpcAction;
/* 0x780 */ u32 field_0x780;
/* 0x784 */ u32 field_0x784;
/* 0x788 */ f32 field_0x788;
/* 0x78C */ s32 field_0x78C;
/* 0x790 */ u8 field_0x790[0x794 - 0x790];
/* 0x794 */ u32 field_0x794;
/* 0x798 */ s16 field_0x798;
/* 0x79A */ u8 field_0x79A[0x79C - 0x79A];
/* 0x79C */ s8 mTuno1JointIdx;
/* 0x79D */ s8 mTuno2JointIdx;
/* 0x79E */ s8 mTuno3JointIdx;
/* 0x79F */ s8 mReachedAnimEnd;
/* 0x7A0 */ s8 field_0x7A0;
/* 0x7A0 */ s8 field_0x7A1;
/* 0x7A2 */ s8 field_0x7A2;
/* 0x7A3 */ u8 field_0x7A3;
/* 0x7A4 */ u8 field_0x7A4;
/* 0x7A5 */ s8 field_0x7A5;
/* 0x7A6 */ s8 field_0x7A6;
/* 0x7A7 */ u8 field_0x7A7;
/* 0x7A8 */ u8 field_0x7A8;
/* 0x7A9 */ s8 field_0x7A9;
/* 0x7AA */ s8 field_0x7AA;
/* 0x7AB */ u8 field_0x7AB;
/* 0x7AC */ s16 field_0x7AC;
/* 0x7AE */ s16 field_0x7AE;
/* 0x7B0 */ s16 field_0x7B0;
/* 0x7B2 */ s16 field_0x7B2;
/* 0x7B4 */ s16 field_0x7B4;
/* 0x7B6 */ s16 field_0x7B6;
/* 0x7B8 */ f32 field_0x7B8;
/* 0x7BC */ s16 field_0x7BC;
/* 0x7BE */ s16 field_0x7BE;
/* 0x7C0 */ s16 field_0x7C0;
/* 0x7C2 */ s16 field_0x7C2;
/* 0x7C4 */ s16 field_0x7C4[0x10];
/* 0x7E4 */ cXyz field_0x7E4;
/* 0x7F0 */ cXyz field_0x7F0;
/* 0x7FC */ cBgS_PolyInfo field_0x7FC;
}; // Size: 0x80C
class daNpc_Os_HIO2_c : public JORReflexible {
public:
daNpc_Os_HIO2_c();
virtual ~daNpc_Os_HIO2_c() {}
void genMessage(JORMContext* ctx);
public:
/* 0x00 - vtable */
/* 0x04 */ f32 field_0x04;
/* 0x08 */ f32 field_0x08;
/* 0x0C */ f32 field_0x0C;
/* 0x10 */ f32 field_0x10;
/* 0x14 */ f32 field_0x14;
/* 0x18 */ f32 field_0x18;
/* 0x1C */ f32 field_0x1C;
/* 0x20 */ f32 field_0x20;
/* 0x24 */ s16 field_0x24;
/* 0x26 */ s16 field_0x26;
/* 0x28 */ s16 field_0x28;
}; // Size: 0x2A
class daNpc_Os_HIO_c : public JORReflexible {
public:
daNpc_Os_HIO_c();
virtual ~daNpc_Os_HIO_c() {}
void genMessage(JORMContext* ctx);
public:
/* 0x00 - vtable*/
/* 0x04 */ s8 mNo;
/* 0x08 */ daNpc_Os_HIO2_c mOs2;
/* 0x34 */ dNpc_HIO_c mNpc;
/* 0x5C */ daNpc_Os_c* field_0x5C;
/* 0x60 */ f32 field_0x60;
/* 0x64 */ f32 field_0x64;
/* 0x68 */ f32 field_0x68;
/* 0x6C */ f32 field_0x6C;
/* 0x70 */ f32 field_0x70;
/* 0x74 */ f32 field_0x74;
/* 0x78 */ f32 field_0x78;
/* 0x7C */ f32 field_0x7C;
/* 0x80 */ f32 field_0x80;
/* 0x84 */ f32 field_0x84;
/* 0x88 */ f32 field_0x88;
/* 0x8C */ f32 field_0x8C;
/* 0x90 */ f32 field_0x90;
/* 0x94 */ f32 field_0x94;
/* 0x98 */ f32 field_0x98;
/* 0x9C */ f32 field_0x9C;
/* 0xA0 */ f32 field_0xA0;
/* 0xA4 */ f32 field_0xA4;
/* 0xA8 */ f32 field_0xA8;
/* 0xAC */ f32 field_0xAC;
/* 0xB0 */ f32 field_0xB0;
}; // Size: 0xB4
#endif /* D_A_NPC_OS_H */