mirror of
https://github.com/encounter/tp.git
synced 2026-07-11 06:18:46 -07:00
* equivalent * kasi_mng_c work * class work and create function work * kasi_mng_c is matching * little more work * almost matching * enums defined * kasi_hana almost matching * more mich work * mich almost matching * kyu almost matching * potentially fixed issue * Now maybe good? * Should be fixed now * PR Cleanup
207 lines
7.5 KiB
C++
207 lines
7.5 KiB
C++
#ifndef D_A_NPC_KASI_HANA_H
|
|
#define D_A_NPC_KASI_HANA_H
|
|
|
|
#include "d/actor/d_a_npc.h"
|
|
#include "d/actor/d_a_tag_escape.h"
|
|
|
|
/**
|
|
* @ingroup actors-npcs
|
|
* @class daNpcKasiHana_c
|
|
* @brief Hannah
|
|
*
|
|
* @details
|
|
*
|
|
*/
|
|
|
|
struct daNpcKasiHana_HIOParam {
|
|
/* 0x00 */ daNpcF_HIOParam common;
|
|
/* 0x6C */ f32 track_start_dist; // 追跡開始距離 - Track Start Distance
|
|
/* 0x70 */ f32 track_stop_dist; // 追跡停止距離 - Track Stop Distance
|
|
/* 0x74 */ f32 track_spd; // 追跡速度 - Track Speed
|
|
/* 0x78 */ f32 escape_spd; // 逃げる速度 - Escape Speed
|
|
};
|
|
|
|
class daNpcKasiHana_HIO_c
|
|
#ifdef DEBUG
|
|
: public mDoHIO_entry_c
|
|
#endif
|
|
{
|
|
/* 0x8 */ daNpcKasiHana_HIOParam param;
|
|
};
|
|
|
|
class daNpcKasi_Mng_c {
|
|
public:
|
|
daNpcKasi_Mng_c() {
|
|
mIsPathInit = false;
|
|
mCenterPos.set(0.0f, 0.0f, 0.0f);
|
|
mSygnal = 0;
|
|
}
|
|
/* 80A1AFAC */ void calcEscapeForm();
|
|
/* 80A1B0D8 */ BOOL calcCenterPos();
|
|
/* 80A1B1C8 */ f32 getDistFromCenter();
|
|
/* 80A1B35C */ void getOffsetFromLeader(cXyz const&, cXyz&);
|
|
/* 80A1B410 */ void initPath(u8, u16);
|
|
/* 80A1B48C */ int getPlNearPoint();
|
|
/* 80A1B5F0 */ int getSygnalInfo();
|
|
/* 80A1B628 */ void sendInfo();
|
|
/* 80A1B6F8 */ void offTalk();
|
|
/* 80A1B774 */ BOOL chkTalk();
|
|
/* 80A1B810 */ BOOL chkFear();
|
|
/* 80A1B884 */ BOOL chkEscape();
|
|
/* 80A1B920 */ BOOL createHearts();
|
|
/* 80A1BAAC */ void allDemoMove();
|
|
/* 80A1BB24 */ void allDemoNotMove();
|
|
/* 80A1BB9C */ BOOL isMiniGamePlaying();
|
|
/* 80A1BBE0 */ void schMemberActor();
|
|
/* 80A1BC88 */ void schDanchoActor();
|
|
/* 80A1BCF0 */ void deleteAllMember();
|
|
/* 80A1BD6C */ void chgWeightHeavy();
|
|
/* 80A1BDD8 */ void chgWeightLight();
|
|
/* 80A2065C */ cXyz getCenterPos();
|
|
|
|
void setKyuPos(const cXyz& i_pos) { mKyuPos = i_pos; }
|
|
void setMichPos(const cXyz& i_pos) { mMichPos = i_pos; }
|
|
BOOL chkSygnal(int param_1) { return mSygnal & param_1; }
|
|
void SygnalClear() { mSygnal = 0; }
|
|
void onSygnal(int param_1) { mSygnal |= param_1; }
|
|
void setHanaActor(fopAc_ac_c* a_this) { if (a_this != NULL) mHanaActorMngr.entry(a_this); }
|
|
BOOL isPathInit() { return mIsPathInit; }
|
|
fopAc_ac_c* getHanaActor() { return mHanaActorMngr.getActorP(); }
|
|
fopAc_ac_c* getKyuActor() { return mKyuActorMngr.getActorP(); }
|
|
fopAc_ac_c* getMichActor() { return mMichActorMngr.getActorP(); }
|
|
|
|
/* 0x00 */ daNpcF_ActorMngr_c mHanaActorMngr;
|
|
/* 0x08 */ daNpcF_ActorMngr_c mKyuActorMngr;
|
|
/* 0x10 */ daNpcF_ActorMngr_c mMichActorMngr;
|
|
/* 0x18 */ daNpcF_ActorMngr_c mDanchoActorMngr;
|
|
/* 0x20 */ int mSygnal;
|
|
/* 0x24 */ cXyz mKyuPos;
|
|
/* 0x30 */ cXyz mMichPos;
|
|
/* 0x3C */ cXyz mCenterPos;
|
|
/* 0x48 */ int mPlPoint;
|
|
/* 0x4C */ bool mIsPathInit;
|
|
/* 0x50 */ daNpcF_Path_c mPath;
|
|
};
|
|
|
|
class daNpcKasiHana_c : public daNpcF_c {
|
|
public:
|
|
typedef int (daNpcKasiHana_c::*actionFunc)(int);
|
|
typedef BOOL (daNpcKasiHana_c::*cutFunc)(int);
|
|
typedef BOOL (daNpcKasiHana_c::*EventFn)(int);
|
|
|
|
/* 80A1BE44 */ daNpcKasiHana_c();
|
|
/* 80A1C0A4 */ ~daNpcKasiHana_c();
|
|
/* 80A1C334 */ cPhs__Step Create();
|
|
/* 80A1C5B0 */ int CreateHeap();
|
|
/* 80A1C734 */ int Delete();
|
|
/* 80A1C768 */ int Execute();
|
|
/* 80A1C78C */ int Draw();
|
|
/* 80A1C7D8 */ int ctrlJoint(J3DJoint*, J3DModel*);
|
|
/* 80A1C964 */ static int createHeapCallBack(fopAc_ac_c*);
|
|
/* 80A1C984 */ static int ctrlJointCallBack(J3DJoint*, int);
|
|
/* 80A1C9D0 */ void setParam();
|
|
/* 80A1CA60 */ BOOL main();
|
|
/* 80A1CD28 */ void setAttnPos();
|
|
/* 80A1CED0 */ void setMotionAnm(int, f32);
|
|
/* 80A1CFA0 */ void setMotion(int, f32, int);
|
|
/* 80A1CFE8 */ int drawDbgInfo();
|
|
/* 80A1CFF0 */ void reset();
|
|
/* 80A1D238 */ void playMotion();
|
|
/* 80A1D604 */ void playMotionAnmLoop(daNpcF_c::daNpcF_anmPlayData***);
|
|
/* 80A1D77C */ BOOL setAction(actionFunc);
|
|
/* 80A1D824 */ void setLookMode(int);
|
|
/* 80A1D848 */ void lookat();
|
|
/* 80A1DA28 */ BOOL step(s16, int);
|
|
/* 80A1DB1C */ BOOL chkFindPlayer();
|
|
/* 80A1DC00 */ int wait(int);
|
|
/* 80A1E184 */ int chace_st(int);
|
|
/* 80A1E228 */ int chace(int);
|
|
/* 80A1E3AC */ cXyz getChacePos();
|
|
/* 80A1E4AC */ int turn(int);
|
|
/* 80A1E578 */ int fear(int);
|
|
/* 80A1E78C */ daTagEscape_c* srchWolfTag();
|
|
/* 80A1E7F4 */ static void* _srch_escape_tag(void*, void*);
|
|
/* 80A1E8C4 */ int getWolfPathNearIdx();
|
|
/* 80A1E9F8 */ int talk(int);
|
|
/* 80A1EB5C */ int demo(int);
|
|
/* 80A1EE38 */ int escape(int);
|
|
/* 80A1EF90 */ int cheer(int);
|
|
/* 80A1F198 */ BOOL _turn_to_link(s16);
|
|
/* 80A1F1E4 */ BOOL _turn_pos(cXyz const&, s16);
|
|
/* 80A1F240 */ BOOL actor_front_check(fopAc_ac_c*);
|
|
/* 80A1F318 */ void _getOffset(cXyz const&, cXyz&);
|
|
/* 80A1F384 */ BOOL _Evt_Kasi_Appear(int);
|
|
/* 80A1F42C */ BOOL _Evt_Kasi_Appear_CutInit(int const&);
|
|
/* 80A1F50C */ BOOL _Evt_Kasi_Appear_CutMain(int const&);
|
|
/* 80A1F638 */ BOOL _Evt_Kasi_Talk(int);
|
|
/* 80A1F740 */ BOOL _Evt_Kasi_Talk_CutInit(int const&);
|
|
/* 80A1F860 */ BOOL _Evt_Kasi_Talk_CutMain(int const&, int);
|
|
/* 80A1F9F4 */ BOOL _Evt_Kasi(int);
|
|
/* 80A1FA9C */ BOOL _Evt_Kasi_CutInit(int const&);
|
|
/* 80A1FBC4 */ BOOL _Evt_Kasi_CutMain(int const&);
|
|
/* 80A1FD64 */ BOOL _Evt_Kasi_Cheer(int);
|
|
/* 80A1FE6C */ BOOL _Evt_Kasi_Cheer_CutInit(int const&);
|
|
/* 80A1FF78 */ BOOL _Evt_Kasi_Cheer_CutMain(int const&, int);
|
|
/* 80A2016C */ BOOL _Evt_Kasi_Cheer2(int);
|
|
/* 80A20244 */ BOOL _Evt_Kasi_Cheer2_CutInit(int const&);
|
|
/* 80A20350 */ BOOL _Evt_Kasi_Cheer2_CutMain(int const&, int);
|
|
/* 80A20678 */ void adjustShapeAngle();
|
|
|
|
int getMessageNo() { return home.angle.x; }
|
|
s8 getType() {
|
|
s8 rv = fopAcM_GetParam(this) & 0xFF;
|
|
|
|
if (rv == 0xFF) {
|
|
rv = 0;
|
|
}
|
|
|
|
return rv;
|
|
}
|
|
void off_talked() { mTalked = false; }
|
|
BOOL is_talked() { return mTalked; }
|
|
BOOL is_escape() { return mEscape; }
|
|
void chgWeightHeavy() { mCcStts.SetWeight(0xFE); }
|
|
void chgWeightLight() { mCcStts.SetWeight(0xD8); }
|
|
u8 getRailNo() { return fopAcM_GetParam(this) >> 8; }
|
|
bool chkAction(actionFunc action) { return action == mAction; }
|
|
int getSwitchBitNo() { return (fopAcM_GetParam(this) >> 16) & 0xFF; }
|
|
BOOL pl_front_check() { return actor_front_check(daPy_getPlayerActorClass()); }
|
|
void setEscapePathDir() { if (pl_front_check()) mPath.reverse(); }
|
|
|
|
static EventFn mEvtSeqList[6];
|
|
static daTagEscape_c* mTargetTag;
|
|
static f32 mTargetTagDist;
|
|
static s16 mWolfAngle;
|
|
|
|
private:
|
|
/* 0x0B48 */ Z2CreatureCitizen mSound;
|
|
/* 0x0BEC */ u8 field_0xbec[0xbf0 - 0xbec];
|
|
/* 0x0BF0 */ daNpcF_Lookat_c mLookat;
|
|
/* 0x0C8C */ daNpcF_ActorMngr_c mActorMngr[1];
|
|
/* 0x0C94 */ daNpcF_Path_c mPath;
|
|
/* 0x12C4 */ daNpcKasiHana_HIO_c* mHIO;
|
|
/* 0x12C8 */ dCcD_Cyl mCyl;
|
|
/* 0x1404 */ s8 mType;
|
|
/* 0x1405 */ u8 field_0x1405;
|
|
/* 0x1406 */ s16 mMode;
|
|
/* 0x1408 */ actionFunc mAction;
|
|
/* 0x1414 */ request_of_phase_process_class mPhases[3];
|
|
/* 0x142C */ fpc_ProcID field_0x142c;
|
|
/* 0x1430 */ int field_0x1430;
|
|
/* 0x1434 */ int field_0x1434;
|
|
/* 0x1438 */ int mMessageNo;
|
|
/* 0x143C */ s16 mLookMode;
|
|
/* 0x143E */ s16 field_0x143e;
|
|
/* 0x1440 */ u8 field_0x1440;
|
|
/* 0x1441 */ s8 field_0x1441;
|
|
/* 0x1442 */ bool mTalked;
|
|
/* 0x1443 */ bool mEscape;
|
|
/* 0x1444 */ u8 field_0x1444;
|
|
/* 0x1445 */ bool field_0x1445;
|
|
/* 0x1448 */ daNpcKasi_Mng_c mKasiMng;
|
|
};
|
|
|
|
STATIC_ASSERT(sizeof(daNpcKasiHana_c) == 0x1ac8);
|
|
|
|
#endif /* D_A_NPC_KASI_HANA_H */
|