Files
tww/include/d/actor/d_a_npc_tc.h
T
2026-03-04 13:47:40 -05:00

291 lines
8.5 KiB
C++

#ifndef D_A_NPC_TC_H
#define D_A_NPC_TC_H
#include "f_op/f_op_actor.h"
#include "d/d_npc.h"
#include "d/d_particle.h"
namespace daObjSmplbg { class Act_c; };
class daNpc_Tc_c : public fopNpc_npc_c {
public:
enum Status {
STATUS_WAIT = 1,
STATUS_SIT = 2,
STATUS_TALK = 3,
STATUS_JUMP = 4,
STATUS_WALK_TO_JAIL = 5,
STATUS_TALK_NEAR_JAIL = 6,
STATUS_WAIT_NEAR_JAIL = 7,
STATUS_WALK_TO_STOOL = 8,
STATUS_SIT_TO_STOOL = 9,
STATUS_DEMO_JUMP = 10,
STATUS_DEMO_RESCUE = 11,
STATUS_DEMO_TALK = 12,
STATUS_PAY_RUPEE = 13,
STATUS_DEMO_PAY_RUPEE = 14,
STATUS_GET_RUPEE = 15,
STATUS_DEMO_GET_RUPEE = 16,
STATUS_MONUMENT_COMPLETE = 17,
STATUS_DEMO_MONUMENT_COMPLETE = 18,
};
enum ActionStatus {
ACTION_STARTING = 0,
ACTION_ONGOING = 1,
ACTION_ENDING = -1,
};
enum Type {
TYPE_NORMAL2 = 0,
TYPE_RED = 1,
TYPE_WHITE = 2,
TYPE_BLUE = 3,
TYPE_NORMAL = 4,
};
enum BckIdx {
BCK_IDX_WAIT01 = 0,
BCK_IDX_WAIT03 = 1,
BCK_IDX_WAIT02 = 2,
BCK_IDX_TALK01 = 3,
BCK_IDX_WALK01 = 4,
BCK_IDX_JAMP_A = 5,
BCK_IDX_JAMP_B = 6,
BCK_IDX_JAMP_C = 7,
BCK_IDX_GUARD = 8,
BCK_IDX_JTBT = 9,
BCK_IDX_HAPPY = 10,
BCK_IDX_DANCE01 = 11,
BCK_IDX_DANCE02 = 12,
BCK_IDX_GET = 13,
BCK_IDX_MAWASU = 14,
BCK_IDX_WAIT04 = 15,
BCK_IDX_TALK02 = 16,
};
enum AnmPrmIdx {
ANM_PRM_IDX_NONE = 0,
ANM_PRM_IDX_WAIT01 = 1,
ANM_PRM_IDX_WAIT03 = 2,
ANM_PRM_IDX_WAIT02 = 3,
ANM_PRM_IDX_TALK01 = 4,
ANM_PRM_IDX_WALK01 = 5,
ANM_PRM_IDX_JAMP_A = 6,
ANM_PRM_IDX_JAMP_B = 7,
ANM_PRM_IDX_JAMP_C1 = 8,
ANM_PRM_IDX_JAMP_C2 = 9,
ANM_PRM_IDX_GUARD = 10,
ANM_PRM_IDX_JTBT = 11,
ANM_PRM_IDX_HAPPY = 12,
ANM_PRM_IDX_DANCE01 = 13,
ANM_PRM_IDX_DANCE02 = 14,
ANM_PRM_IDX_GET = 15,
ANM_PRM_IDX_HAPPY2 = 16, // ANM_PRM_IDX_HAPPY gets set to this
ANM_PRM_IDX_DANCE01_TO_TALK01 = 17,
ANM_PRM_IDX_DANCE02_TO_WAIT03 = 18,
ANM_PRM_IDX_MAWASU = 19,
ANM_PRM_IDX_WAIT04 = 20,
ANM_PRM_IDX_TALK02 = 21,
ANM_PRM_IDX_TALK01_WAIT01 = 22, // loops 3x then -> WAIT01
ANM_PRM_IDX_TALK01_TALK02 = 23, // loops 5x then -> TALK02
};
typedef int (daNpc_Tc_c::*ActionFunc)(void*);
daNpc_Tc_c();
cXyz& getAttentionBasePos() { return mAttPos; }
cXyz& getEyePos() { return mEyePos; }
void incAttnSetCount() {
if (mAttnSetCount != 0xff) {
mAttnSetCount++;
}
}
BOOL setAction(ActionFunc actionFunc, void* arg) {
if (mCurrActionFunc != actionFunc) {
if (mCurrActionFunc != NULL) {
mActionStatus = ACTION_ENDING;
(this->*mCurrActionFunc)(arg);
}
mCurrActionFunc = actionFunc;
mActionStatus = ACTION_STARTING;
(this->*mCurrActionFunc)(arg);
}
return TRUE;
}
fopAc_ac_c* _searchTower(fopAc_ac_c*);
BOOL initTexPatternAnm(bool);
void playTexPatternAnm();
void smoke_set(f32, f32, f32, f32, f32);
void setAnm();
void setTexAnm();
bool chkAttention(cXyz, s16);
void eventOrder();
void checkOrder();
bool existTcMonument();
void anmAtr(u16);
void stopTower();
void startTower();
u16 next_msgStatusBlue(u32*);
u16 next_msgStatusNormal(u32*);
u16 next_msgStatus(u32*);
u32 setFirstMsg(bool*, u32, u32);
u32 getMsgNormal();
u32 getMsgBlue();
u32 getMsg();
void getArg();
void createInit();
static void* searchStoolPos(void*, void*);
void setAttention();
void calcMove();
void lookBack();
void statusWait();
void statusSit();
void statusJump();
void statusWalkToJail();
void statusTalkNearJail();
void statusWaitNearJail();
void statusWalkToStool();
void statusSitToStool();
void statusTalk();
void statusPayRupee();
void statusDemoPayRupee();
void statusGetRupee();
void statusDemoGetRupee();
void statusMonumentComplete();
void statusDemoMonumentComplete();
void statusDemoJump();
void statusDemoRescue();
void statusDemoTalk();
BOOL help_action(void*);
BOOL wait_action(void*);
void calc_sitpos();
void set_mtx();
BOOL _draw();
void setTower();
BOOL _execute();
BOOL _delete();
bool isCreate();
cPhs_State _create();
BOOL _createHeap();
u16 next_msgStatusNormal2(u32*);
u32 getMsgNormal2();
#if VERSION != VERSION_DEMO
u32 setRupeeSizeMsg();
#endif
bool existUnknownCollectMap();
int analysisCollectMap();
bool existKnownCollectMap();
u16 next_msgStatusWhite(u32*);
u32 getMsgWhite();
u16 next_msgStatusRed(u32*);
u32 setFinishMsg();
u32 getMsgRed();
bool checkMonumentFee(u16, u16);
bool checkAllMonumentFee();
#if VERSION == VERSION_DEMO
bool checkOneMonumentGet();
#endif
int checkAllMonumentPay();
bool checkMonumentPay(u16, u16);
void cutProc();
void cutSitToJumpStart(int);
void cutSitToJumpProc(int);
void cutPresentStart(int);
void cutPresentProc(int);
void cutSetAnmStart(int);
void cutSetAnmProc(int);
void cutBackJumpStart(int);
void cutBackJumpProc(int);
void cutEffectStart(int);
void cutEffectProc(int);
void cutDoorOpenStart(int);
void cutDoorOpenProc(int);
void cutDoorCloseStart(int);
void cutDoorCloseProc(int);
void cutDoorClose2Start(int);
void cutDoorClose2Proc(int);
void cutPayStart(int);
void cutPayProc(int);
public:
/* 0x6C4 */ u8 field_0x6C4[0x6C8 - 0x6C4];
/* 0x6C8 */ BOOL field_0x6C8;
/* 0x6CC */ u8 mJtbtTimer;
/* 0x6CD */ u8 mTalk01Wait01Timer;
/* 0x6CE */ u8 mTalk01Talk02Timer;
/* 0x6CF */ s8 mStatus;
/* 0x6D0 */ ActionFunc mCurrActionFunc;
/* 0x6DC */ s8 mActionStatus;
/* 0x6DD */ u8 field_0x6DD[0x6E0 - 0x6DD];
/* 0x6E0 */ cXyz mSmokePos;
/* 0x6EC */ csXyz mSmokeAngle;
/* 0x6F2 */ u8 field_0x6F2[0x6F4 - 0x6F2];
/* 0x6F4 */ dPa_smokeEcallBack mSmokeCallBack;
/* 0x714 */ dPa_followEcallBack field_0x714;
/* 0x728 */ dPa_followEcallBack field_0x728;
/* 0x73C */ request_of_phase_process_class mPhs;
/* 0x744 */ u32 mShadowId;
#if VERSION == VERSION_DEMO
/* 0x748 */ J3DModel* mpModel;
#endif
/* 0x748 */ J3DAnmTexPattern* m_head_tex_pattern;
/* 0x74C */ mDoExt_btpAnm mBtpAnm;
/* 0x760 */ u8 mBlinkFrame;
/* 0x761 */ u8 field_0x761[0x762 - 0x761];
/* 0x762 */ s16 mBlinkTimer;
/* 0x764 */ cXyz mEyePos;
/* 0x770 */ cXyz mAttPos;
/* 0x77C */ u8 mAttnSetCount;
/* 0x77D */ u8 field_0x77D[0x780 - 0x77D];
/* 0x780 */ cXyz mStoolLookPos;
/* 0x78C */ s16 mMaxHeadTurnVelocity;
/* 0x78E */ u8 field_0x78E[0x790 - 0x78E];
/* 0x790 */ csXyz field_0x790;
/* 0x796 */ u8 field_0x796[0x798 - 0x796];
/* 0x798 */ s8 field_0x798;
/* 0x799 */ u8 field_0x799[0x79C - 0x799];
/* 0x79C */ f32 mTargetSpeed;
/* 0x7A0 */ cXyz mStoolPos;
/* 0x7AC */ cXyz mSitPos;
/* 0x7B8 */ cXyz mWalkToStoolPos;
/* 0x7C4 */ cXyz mDeltaPos;
/* 0x7D0 */ u8 field_0x7D0[0x7DC - 0x7D0];
/* 0x7DC */ cXyz mParticlePos;
/* 0x7E8 */ bool mHasAttention;
/* 0x7E9 */ bool mTalkingNearJail;
/* 0x7EA */ u8 field_0x7EA[0x7F1 - 0x7EA];
/* 0x7F1 */ bool mHasTalkedNearJail;
/* 0x7F2 */ bool mHasEnteredSitRadius;
/* 0x7F3 */ s8 mJumpLandingTimer;
/* 0x7F4 */ u8 field_0x7F4[0x7F6 - 0x7F4];
/* 0x7F6 */ s8 mTexPatternNum;
/* 0x7F7 */ s8 mTexPatternNumIdx;
/* 0x7F8 */ s8 mBckIdx;
/* 0x7F9 */ s8 mAnmPrmIdx;
/* 0x7FA */ s8 mOldAnmPrmIdx;
/* 0x7FB */ s8 mEventIdx;
/* 0x7FC */ u8 mType;
/* 0x7FD */ u8 field_0x7FD[0x804 - 0x7FD];
/* 0x804 */ daObjSmplbg::Act_c* m_tower_actor;
/* 0x808 */ bool field_0x808;
/* 0x809 */ bool field_0x809;
/* 0x80A */ u8 field_0x80A[0x80B - 0x80A];
/* 0x80B */ bool field_0x80B;
/* 0x80C */ u8 field_0x80C;
/* 0x80D */ bool field_0x80D;
/* 0x80E */ bool field_0x80E;
/* 0x80F */ bool field_0x80F;
/* 0x810 */ bool field_0x810;
/* 0x811 */ bool field_0x811;
/* 0x812 */ bool field_0x812;
/* 0x813 */ bool field_0x813;
/* 0x814 */ bool field_0x814;
/* 0x815 */ u8 field_0x815[0x81C - 0x815];
}; // Size: 0x81C
#endif /* D_A_NPC_TC_H */