From 4ade12fd6422b1444c0aa73083506d6dadab9ed3 Mon Sep 17 00:00:00 2001 From: Carco_21 <144170194+carter-ktb21@users.noreply.github.com> Date: Tue, 12 Aug 2025 13:54:06 -0400 Subject: [PATCH] d_a_npc_coach work (#2579) * data and class member work * inline work * got to SetCoachBlazing * work on some calc functions * all functions worked on * pr cleanup * more pr cleanup * coach header cleanup --- include/d/actor/d_a_coach_2D.h | 2 + include/d/actor/d_a_e_kr.h | 3 + include/d/actor/d_a_npc_coach.h | 327 ++- include/d/actor/d_a_npc_theB.h | 25 +- include/d/d_bg_s_acch.h | 3 +- include/d/d_bg_w.h | 1 + include/d/d_path.h | 4 +- include/d/d_tresure.h | 4 + include/m_Do/m_Do_ext.h | 8 +- src/d/actor/d_a_npc_coach.cpp | 3281 ++++++++++++++++++++----------- src/d/actor/d_a_npc_theB.cpp | 16 +- src/d/actor/d_a_tag_wljump.cpp | 2 +- src/d/d_bg_s_acch.cpp | 8 +- src/m_Do/m_Do_ext.cpp | 14 +- 14 files changed, 2482 insertions(+), 1216 deletions(-) diff --git a/include/d/actor/d_a_coach_2D.h b/include/d/actor/d_a_coach_2D.h index aa281afaabb..f20a6668d55 100644 --- a/include/d/actor/d_a_coach_2D.h +++ b/include/d/actor/d_a_coach_2D.h @@ -46,6 +46,8 @@ public: void show() { mIsVisible = true; } void hide() { mIsVisible = false; } bool isVisible() { return mIsVisible ? true : false; } + void setHitCount(u8 i_hitCount) { mHitCount = i_hitCount; } + void setMaxHitCount(u8 i_maxHitCount) { mMaxHitCount = i_maxHitCount; } /* 0x574 */ J2DScreen* mpScrn; /* 0x578 */ J2DAnmTevRegKey* mpFireIconBrk; diff --git a/include/d/actor/d_a_e_kr.h b/include/d/actor/d_a_e_kr.h index 4a935096459..9252341cba9 100644 --- a/include/d/actor/d_a_e_kr.h +++ b/include/d/actor/d_a_e_kr.h @@ -18,6 +18,9 @@ class e_kr_class { public: /* 80705004 */ e_kr_class(); + s32 getId() { return field_0xf00; } + s32 checkBombDrop() { return field_0xf04; } + /* 0x000 */ fopEn_enemy_c enemy; /* 0x5AC */ request_of_phase_process_class mPhase; /* 0x5B4 */ mDoExt_McaMorfSO* mpMorf; diff --git a/include/d/actor/d_a_npc_coach.h b/include/d/actor/d_a_npc_coach.h index 77ff6d78013..0fe48ac5e93 100644 --- a/include/d/actor/d_a_npc_coach.h +++ b/include/d/actor/d_a_npc_coach.h @@ -2,6 +2,7 @@ #define D_A_NPC_COACH_H #include "d/actor/d_a_npc.h" +#include "d/d_path.h" /** * @ingroup actors-npcs @@ -10,18 +11,233 @@ * * @details * - */ +*/ + +class daNpcCoach_Attr_c { +public: + /* 0x00 */ f32 gravity; // 重力 - Gravity + /* 0x04 */ f32 max_fall_speed; // 最大落下速度 - Maximum Fall Speed + /* 0x08 */ f32 jump_coeff; // 跳係数 - Jump Coefficient + /* 0x0C */ f32 field_0xc; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 max_speed; // 最大速度 - Maximum Speed + /* 0x20 */ f32 spring_constant; // バネ係数 - Spring Constant + /* 0x24 */ f32 damp_coeff[1]; // 減衰係数 - Damp Coefficient + /* 0x28 */ f32 field_0x28[1]; + /* 0x2C */ f32 field_0x2c; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 vert_swing_width; // 縦揺れ幅 - Vertical Swing Width + /* 0x3C */ f32 shake_dist; // 揺れ距離 - Shake Distance + /* 0x40 */ f32 jump_dist; // 跳ね距離 - Jump Distance + /* 0x44 */ f32 wheel_bounce; // 車輪跳ね - Wheel Bounce + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4c; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5c; + /* 0x60 */ s16 field_0x60; + /* 0x62 */ s16 horse_rot_limit; // 馬Rot限度 - Horse Rot Limit + /* 0x64 */ s16 horiz_sway_range; // 横揺れ幅 - Horizontal Sway Range + /* 0x66 */ s16 field_0x66; + /* 0x68 */ s16 field_0x68; + /* 0x6A */ s8 field_0x6a; + /* 0x6B */ u8 field_0x6b; + /* 0x6C */ u8 field_0x6c; + /* 0x6D */ u8 shake_test; // 揺れ実験 - Shake Test + /* 0x6E */ s16 field_0x6e; + /* 0x70 */ int damage_reduction; // ダメージ減量 - Damage Reduction + /* 0x74 */ int damage_durability; // ダメージ耐久度 - Damage Durability + /* 0x78 */ u8 damage_extinguish_level; // ダメージ消火度 - Damage Extinguish Level + /* 0x79 */ u8 horse_camera; // 馬カメラ - Horse Camera + /* 0x7A */ u8 field_0x7a; + /* 0x7B */ u8 field_0x7b; + /* 0x7C */ f32 camera_dist; // カメラ距離 - Camera Distance + /* 0x80 */ s16 camera_elevation_angle; // カメラ仰角 - Camera Elevation Angle + /* 0x82 */ s16 camera_rotation_angle; // カメラ回転角 - Camera Rotation Angle + /* 0x84 */ s16 field_0x84; + /* 0x86 */ u8 field_0x86; + /* 0x87 */ u8 field_0x87; + /* 0x88 */ u8 field_0x88; + /* 0x89 */ u8 field_0x89; + /* 0x8A */ s16 field_0x8a; + /* 0x8C */ f32 field_0x8c; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 field_0x94; + /* 0x98 */ f32 deceleration_speed; // 減速速度 - Deceleration Speed + /* 0x9C */ s32 deceleration_time; // 減速時間 - Deceleration Time +}; + +class daNpcChReins_c { +public: + /* 0x000 */ mDoExt_3DlineMat1_c field_0x0; + /* 0x03C */ mDoExt_3DlineMat1_c field_0x3c; + /* 0x078 */ cXyz field_0x78[10]; + /* 0x0F0 */ cXyz field_0xf0[10]; + /* 0x168 */ f32 field_0x168; + /* 0x16C */ s8 field_0x16c; + /* 0x170 */ cXyz field_0x170; +}; + +class daNpcChHorse_c { +public: + /* 0x000 */ mDoExt_McaMorf2* mpModelMorf; + /* 0x004 */ mDoExt_btpAnm* mpBtpAnm; + /* 0x008 */ mDoExt_bckAnm* mpBckAnm; + /* 0x00C */ dBgS_ObjAcch mBgc; + /* 0x1F0 */ dCcD_Cyl field_0x1f0[4]; + /* 0x6D4 */ Z2CreatureRide mSound; + /* 0x770 */ cXyz field_0x770; + /* 0x77C */ f32 mAnmRate; + /* 0x780 */ f32 mAimSpeed; + /* 0x784 */ f32 field_0x784; + /* 0x788 */ int field_0x788; + /* 0x78C */ int field_0x78c; + /* 0x790 */ int field_0x790; + /* 0x794 */ u32 mShadowKey; + /* 0x798 */ daNpcChReins_c mChReins; +}; + +class daNpcChWheel_c { +public: + /* 0x00 */ cXyz field_0x0; + /* 0x0C */ u32 field_0xc[2]; + /* 0x14 */ csXyz mWheelRot; + /* 0x1A */ s16 field_0x1a; + /* 0x1C */ s16 field_0x1c; + /* 0x1E */ s16 field_0x1e; + /* 0x20 */ s16 field_0x20; +}; + +class daNpcChHarness_c { +public: + /* 809A3570 */ ~daNpcChHarness_c(); + + /* 0x000 */ J3DModel* mHarnessModel; + /* 0x004 */ dKy_tevstr_c mTevStr; + /* 0x38C */ dBgS_ObjAcch mBgc; + /* 0x564 */ dCcD_Cyl field_0x564; + /* 0x6A0 */ dBgW* field_0x6a0; + /* 0x6A4 */ Mtx mMtx; + /* 0x6D4 */ cXyz field_0x6d4; + /* 0x6E0 */ cXyz field_0x6e0; + /* 0x6EC */ cXyz field_0x6ec; + /* 0x6F8 */ u32 mShadowKey; + /* 0x6FC */ f32 field_0x6fc; + /* 0x700 */ csXyz field_0x700; + /* 0x706 */ csXyz field_0x706; + /* 0x70C */ daNpcChWheel_c field_0x70c; + /* 0x730 */ daNpcChWheel_c field_0x730; +}; + +class daNpcChCoach_c { +public: + /* 809A3674 */ ~daNpcChCoach_c(); + + /* 0x000 */ J3DModel* mCoachModel; + /* 0x004 */ dKy_tevstr_c mTevStr; + /* 0x38C */ dBgS_ObjAcch mBgc; + /* 0x564 */ dBgW* field_0x564; + /* 0x568 */ Mtx field_0x568; + /* 0x598 */ Mtx field_0x598; + /* 0x5C8 */ cXyz field_0x5c8; + /* 0x5D4 */ cXyz field_0x5d4; + /* 0x5E0 */ cXyz field_0x5e0; + /* 0x5EC */ cXyz field_0x5ec; + /* 0x5F8 */ JPABaseEmitter* field_0x5f8[10]; + /* 0x620 */ Z2SoundObjCoach mSound; + /* 0x644 */ dCcD_Sph field_0x644; + /* 0x77C */ int field_0x77c; + /* 0x780 */ u32 mShadowKey; + /* 0x784 */ f32 field_0x784; + /* 0x788 */ f32 field_0x788; + /* 0x78C */ f32 mCoachTrans; + /* 0x790 */ f32 field_0x790; + /* 0x794 */ f32 field_0x794; + /* 0x798 */ s16 mCoachRot; + /* 0x79A */ csXyz field_0x79a; + /* 0x7A0 */ csXyz field_0x7a0; + /* 0x7A8 */ daNpcChWheel_c field_0x7a8; + /* 0x7CC */ daNpcChWheel_c field_0x7cc; +}; + +class daNpcChYelia_c { +public: + /* 0x000 */ mDoExt_McaMorfSO* mpModelMorf; + /* 0x004 */ dKy_tevstr_c mTevStr; + /* 0x38C */ Z2Creature mSound; + /* 0x41C */ dCcD_Cyl field_0x41c[2]; + /* 0x694 */ cXyz field_0x694; +}; + +class daNpcChPath_c { +public: + BOOL setPath(int, int, cXyz*, bool); + BOOL isClose() { return dPath_ChkClose(mpPath); } + bool setNextPoint() { + mPntIndex++; + + if (mPntIndex >= mpPath->m_num) { + if (isClose()) { + mPntIndex = 0; + } else { + mPntIndex--; + return FALSE; + } + } + + return TRUE; + } + BOOL setPrevPoint() { + mPntIndex--; + + if (mPntIndex < 0) { + if (isClose()) { + mPntIndex = mpPath->m_num - 1; + } else { + mPntIndex++; + return FALSE; + } + } + + return TRUE; + } + void getTargetPoint(cXyz& param_1) { + if (mpPath != NULL) { + param_1 = dPath_GetPnt(mpPath, mPntIndex)->m_position; + } + } + bool isPath() { return mpPath != NULL; } + int getCurrentId() { return mCurrentID; } + s8 getArg0() { return mpPath->m_points[mPntIndex].mArg0; } + s8 getArg1() { return mpPath->m_points[mPntIndex].mArg1; } + s8 getArg2() { return mpPath->m_points[mPntIndex].mArg2; } + int getArg3() { return mpPath->m_points[mPntIndex].mArg3; } + inline int checkNearAttackPoint(); + inline bool checkPoint(cXyz*, f32); + inline bool setNextTarget(); + + /* 0x00 */ dPath* mpPath; + /* 0x04 */ cXyz* field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ int mCurrentID; + /* 0x10 */ int mPntIndex; +}; + class daNpcCoach_c : public fopAc_ac_c { public: /* 8099DA60 */ void hitFireArrow(cXyz); /* 8099DBA4 */ void deleteFireArrow(unsigned int); /* 8099DCE8 */ bool deleteFireArrowFromList(unsigned int); /* 8099DD28 */ void setPosAngle(cXyz&, csXyz&); - /* 8099DD7C */ void ctrlJointHorse(J3DJoint*, J3DModel*); + /* 8099DD7C */ int ctrlJointHorse(J3DJoint*, J3DModel*); /* 8099DE18 */ void initCoachPosition(Vec&, SVec&); /* 8099E138 */ void changeAtherPath(s8, cXyz&, csXyz&); - /* 8099E4C0 */ void createHeap(); - /* 8099EB40 */ void execute(); + /* 8099E4C0 */ int createHeap(); + /* 8099EB40 */ int execute(); /* 8099EEA0 */ void checkCoachDamage(); /* 8099F1B8 */ void setCoachBlazing(u8); /* 8099F4BC */ void reinsExecute(); @@ -33,9 +249,9 @@ public: /* 809A1810 */ void calcHorseMotion(); /* 809A1BE0 */ void calcHorseAnm(); /* 809A2740 */ void calcHorsePath(); - /* 809A2EB8 */ void draw(); + /* 809A2EB8 */ int draw(); /* 809A3330 */ ~daNpcCoach_c(); - /* 809A3884 */ void create(); + /* 809A3884 */ cPhs__Step create(); /* 809A3928 */ void create_init(); /* 809A4078 */ void initCollision(); /* 809A43A0 */ void initBaseMtx(); @@ -43,30 +259,97 @@ public: /* 809A46C4 */ void initCoachBlazing(); /* 809A48A8 */ daNpcCoach_c(); - bool checkCoachBlazing() { return field_0x1dc4; } - Mtx* getCoachMtx() { return &field_0x2490; } + inline bool checkCoachBlazing() { return mCoachBlazing; } + inline Mtx* getCoachMtx() { return &mCoachMtx; } + inline csXyz* getFrontWheelRot(int param_1) { + if (param_1 == 2) { + return &mChHarness.field_0x70c.mWheelRot; + } - static u8 const M_attr[160]; + return &mChHarness.field_0x730.mWheelRot; + } + inline csXyz* getRearWheelRot(int param_1) { + if (param_1 == 1) { + return &mChCoach.field_0x7a8.mWheelRot; + } + + return &mChCoach.field_0x7cc.mWheelRot; + } + inline s16 getCoachRotate() { return mChCoach.mCoachRot; } + inline f32 getCoachTrans() { return mChCoach.mCoachTrans; } + inline int getRailID() { return mChPath.getCurrentId(); } + + inline void setDriverMtx(); + inline void calcDriverMotion() { setDriverMtx(); } + inline void calcYeliaMotion(); + inline void setYeliaMtx() { + mDoMtx_stack_c::copy(mChCoach.mCoachModel->getAnmMtx(6)); + mDoMtx_stack_c::multVecZero(&mChYelia.field_0x694); + mChYelia.mpModelMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + } + inline void setCoachCollision(); + inline s16 getGroundSlope(dBgS_ObjAcch*, s16); + inline void calcSpringF(f32*, f32, f32*); + inline void calcSpringS(s16*, s16, f32*); + inline void setCoachMtx(); + inline void setWheelSmoke(daNpcChWheel_c*, dBgS_ObjAcch*, dKy_tevstr_c*, csXyz*); + inline void setHarnessCollision(); + inline f32 calcMaxSpeed(); + inline void setHorseCollision(); + inline void setHorseMtx(); + inline void setHorseAnm(int); + inline void eyeWink(); + inline BOOL checkKargoAttack(); + inline BOOL setExpressionAnm(int, bool); + inline void resetOverAngle(); + inline void reinsDraw(); + inline u8 getPathID() { return fopAcM_GetParam(this) & 0xFF; } + inline int getMessageNo() { return home.angle.x; } + inline void setHarnessMtx(); + + const daNpcCoach_Attr_c& attr() { return M_attr; } + + static daNpcCoach_Attr_c const M_attr; + static u16 const ParticleName[10]; private: - /* 0x568 */ u8 field_0x568[0x1dc4 - 0x568]; - /* 0x1DC4 */ bool field_0x1dc4; - /* 0x1DC5 */ u8 field_0x1dc5[0x247c - 0x1dc5]; - /* 0x247C */ u32 field_0x247c[4]; - /* 0x248C */ u8 field_0x248c[0x2490 - 0x248c]; - /* 0x2490 */ Mtx field_0x2490; - /* 0x24C0 */ u8 field_0x254c[0x2570 - 0x24c0]; + /* 0x0568 */ daNpcChHorse_c mChHorse; + /* 0x0E7C */ daNpcChHarness_c mChHarness; + /* 0x15D0 */ daNpcChCoach_c mChCoach; + /* 0x1DC0 */ int field_0x1dc0; + /* 0x1DC4 */ bool mCoachBlazing; + /* 0x1DC5 */ u8 field_0x1dc5; + /* 0x1DC6 */ u8 field_0x1dc6; + /* 0x1DC7 */ u8 field_0x1dc7; + /* 0x1DC8 */ daNpcChYelia_c mChYelia; + /* 0x2468 */ daNpcChPath_c mChPath; + /* 0x247C */ fpc_ProcID field_0x247c[5]; + /* 0x2490 */ Mtx mCoachMtx; + /* 0x24C0 */ int field_0x24c0; + /* 0x24C4 */ int field_0x24c4; + /* 0x24C8 */ f32 field_0x24c8; + /* 0x24CC */ dBgS_AcchCir mAcchCir; + /* 0x250C */ dCcD_Stts mStts; + /* 0x2548 */ request_of_phase_process_class mPhase; + /* 0x2550 */ int field_0x2550; + /* 0x2554 */ fpc_ProcID field_0x2554; + /* 0x2558 */ u8 field_0x2558; + /* 0x2559 */ u8 field_0x2559; + /* 0x255C */ cXyz field_0x255c; + /* 0x2568 */ int mPathID; + /* 0x256C */ u8 field_0x256c[0x2570 - 0x256c]; }; STATIC_ASSERT(sizeof(daNpcCoach_c) == 0x2570); -class daNpcChHarness_c { +struct daNpcCoach_Hio_c { public: - /* 809A3570 */ ~daNpcChHarness_c(); -}; + void default_set() { + field_0xc = daNpcCoach_c::M_attr; + } -class daNpcChCoach_c { -public: - /* 809A3674 */ ~daNpcChCoach_c(); + /* 0x0 */ u8 field_0x0[0x8 - 0x0]; + /* 0x8 */ int field_0x8; + /* 0xC */ daNpcCoach_Attr_c field_0xc; }; #endif /* D_A_NPC_COACH_H */ diff --git a/include/d/actor/d_a_npc_theB.h b/include/d/actor/d_a_npc_theB.h index 98ecd7722c8..47b31015f66 100644 --- a/include/d/actor/d_a_npc_theB.h +++ b/include/d/actor/d_a_npc_theB.h @@ -11,7 +11,7 @@ * @details * */ -class daNpcTheB_c : public fopAc_ac_c { +class daNpcTheB_c : public daNpcF_c { public: /* 80AFC76C */ daNpcTheB_c(); /* 80AFC980 */ ~daNpcTheB_c(); @@ -23,17 +23,17 @@ public: /* 80AFD2A8 */ void ctrlJoint(J3DJoint*, J3DModel*); /* 80AFD49C */ void createHeapCallBack(fopAc_ac_c*); /* 80AFD4BC */ void ctrlJointCallBack(J3DJoint*, int); - /* 80AFD508 */ void getHandPos1(int); - /* 80AFD5F0 */ void getHandPos2(int); + /* 80AFD508 */ cXyz getHandPos1(int); + /* 80AFD5F0 */ cXyz getHandPos2(int); /* 80AFD6D8 */ void setHintEvent(s32, u16, int); - /* 80AFD6F0 */ void main(); + /* 80AFD6F0 */ BOOL main(); /* 80AFD938 */ void setParam(); - /* 80AFDAA4 */ void ctrlBtk(); + /* 80AFDAA4 */ BOOL ctrlBtk(); /* 80AFDB70 */ void setAttnPos(); - /* 80AFDEC0 */ void setExpressionAnm(int, bool); - /* 80AFE0BC */ void setExpressionBtp(int); - /* 80AFE1BC */ bool setMotionAnm(int, f32); - /* 80AFE398 */ bool drawDbgInfo(); + /* 80AFDEC0 */ bool setExpressionAnm(int, bool); + /* 80AFE0BC */ bool setExpressionBtp(int); + /* 80AFE1BC */ void setMotionAnm(int, f32); + /* 80AFE398 */ BOOL drawDbgInfo(); /* 80AFE3A0 */ void reset(); /* 80AFE574 */ void playExpression(); /* 80AFE704 */ void playMotion(); @@ -51,10 +51,15 @@ public: /* 80AFFFE0 */ void EvCut_TheBHint(int); /* 80B00204 */ void EvCut_CoachGuardGameOver(int); + void setTRMtx(MtxP mtx) { mpMorf->getModel()->setBaseTRMtx(mtx); } + void setGameOver() { mGameOver = 1; } + static u8 mEvtSeqList[72]; private: - /* 0x568 */ u8 field_0x568[0xe14 - 0x568]; + /* 0xB48 */ u8 field_0xb48[0xe0d - 0xb48]; + /* 0xE0D */ u8 mGameOver; + /* 0xE0E */ u8 field_0xe0e[0xe14 - 0xe0e]; }; STATIC_ASSERT(sizeof(daNpcTheB_c) == 0xe14); diff --git a/include/d/d_bg_s_acch.h b/include/d/d_bg_s_acch.h index 1cb9afb1413..6d3c4e7f7d7 100644 --- a/include/d/d_bg_s_acch.h +++ b/include/d/d_bg_s_acch.h @@ -174,6 +174,7 @@ public: void OnLineCheckHit() { m_flags |= LINE_CHECK_HIT; } bool ChkGroundAway() const { return (m_flags & GROUND_AWAY) != 0; } void ClrGroundHit() { m_flags &= ~GROUND_HIT; } + void SetGroundCheckOffset(f32 offset) { m_gnd_chk_offset = offset; } cM3dGCyl* GetWallBmdCylP() { return &m_wall_cyl; } fopAc_ac_c* getMyAc() { return m_my_ac; } @@ -215,7 +216,7 @@ public: /* 0x090 */ f32 field_0x90; /* 0x094 */ f32 field_0x94; /* 0x098 */ f32 m_ground_h; - /* 0x09C */ f32 field_0x9c; + /* 0x09C */ f32 m_gnd_chk_offset; /* 0x0A0 */ cM3dGPla field_0xa0; /* 0x0B4 */ bool field_0xb4; /* 0x0B8 */ f32 field_0xb8; diff --git a/include/d/d_bg_w.h b/include/d/d_bg_w.h index 6f20f133876..63794aa5063 100644 --- a/include/d/d_bg_w.h +++ b/include/d/d_bg_w.h @@ -328,6 +328,7 @@ public: void SetCrrFunc(dBgW_CrrFunc func) { m_crr_func = func; } void SetRideCallback(dBgW_RideCallback func) { m_ride_callback = func; } + void SetArrowStickCallback(dBgW_ArrowStickCallback func) { m_arrow_stick_callback = func; } void OnMoveFlag() { m_flags |= 1; } private: diff --git a/include/d/d_path.h b/include/d/d_path.h index 36e168171b5..534d2b3d899 100644 --- a/include/d/d_path.h +++ b/include/d/d_path.h @@ -9,8 +9,8 @@ struct cXyz; struct dPnt { /* 0x0 */ u8 mArg1; - /* 0x1 */ u8 field_0x1; - /* 0x2 */ u8 field_0x2; + /* 0x1 */ u8 mArg2; + /* 0x2 */ u8 mArg3; /* 0x3 */ u8 mArg0; /* 0x4 */ Vec m_position; }; // Size: 0x10 diff --git a/include/d/d_tresure.h b/include/d/d_tresure.h index a4a5042c287..30c4827465f 100644 --- a/include/d/d_tresure.h +++ b/include/d/d_tresure.h @@ -98,6 +98,10 @@ public: static void setNpcYkmPosition(int param_1, Vec* param_2) { setPosition(param_1, 13, param_2, -1); } + + static void setCoachPosition(int param_1, Vec* param_2, int param_3) { + setPosition(param_1, 10, param_2, param_3); + } }; #endif /* D_D_TRESURE_H */ diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index f38cdaf8803..514134953e4 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -403,11 +403,17 @@ public: /* 800113FC */ virtual ~mDoExt_McaMorf2(); /* 800116F4 */ virtual void calc(); + inline f32 getAnmRate() { return mAnmRate; } + inline void changeAnm(J3DAnmTransform* anm, J3DAnmTransform* anm2) { + mpAnm = anm; + field_0x40 = anm2; + } + inline J3DModel* getModel() { return mpModel; } private: /* 0x38 */ mDoExt_McaMorfCallBack1_c* mpCallback1; /* 0x3C */ mDoExt_McaMorfCallBack2_c* mpCallback2; /* 0x40 */ J3DAnmTransform* field_0x40; - /* 0x44 */ f32 field_0x44; + /* 0x44 */ f32 mAnmRate; /* 0x48 */ Z2Creature* mpSound; /* 0x4C */ void* mpBas; }; diff --git a/src/d/actor/d_a_npc_coach.cpp b/src/d/actor/d_a_npc_coach.cpp index bf96680387f..5935106bd6a 100644 --- a/src/d/actor/d_a_npc_coach.cpp +++ b/src/d/actor/d_a_npc_coach.cpp @@ -4,322 +4,345 @@ */ #include "d/actor/d_a_npc_coach.h" -#include "dol2asm.h" +#include "d/actor/d_a_coach_2D.h" +#include "d/actor/d_a_coach_fire.h" +#include "d/actor/d_a_e_kr.h" +#include "d/actor/d_a_npc_theB.h" +#include "d/d_bg_w.h" +#include "d/d_meter2_info.h" +#include "d/d_tresure.h" -// -// Forward References: -// +enum Coach_RES_File_ID { + /* BCK */ + /* 0x09 */ BCK_HU_JUMP_END = 0x9, + /* 0x0A */ BCK_HU_JUMP_MIDDLE, + /* 0x0B */ BCK_HU_JUMP_START, + /* 0x0C */ BCK_HU_LASH, + /* 0x0D */ BCK_HU_RUN_FAST, + /* 0x0E */ BCK_HU_RUN_SLOW, + /* 0x0F */ BCK_HU_WAIT_01, + /* 0x10 */ BCK_HU_WALK_FAST, + /* 0x11 */ BCK_HU_WALK_SLOW, + /* 0x12 */ BCK_THEB_BEND_TURN, + /* 0x13 */ BCK_THEB_BEND_WAIT, + /* 0x14 */ BCK_THEB_F_BEND_TURN, + /* 0x15 */ BCK_THEB_F_TALK_A, + /* 0x16 */ BCK_THEB_F_TALK_B, + /* 0x17 */ BCK_THEB_F_TALK_C, + /* 0x18 */ BCK_THEB_FH_BEND_WAIT, + /* 0x19 */ BCK_THEB_FH_TALK_B, + /* 0x1A */ BCK_THEB_FH_TALK_C, + /* 0x1B */ BCK_THEB_SIT, + /* 0x1C */ BCK_THEB_SIT_B, + /* 0x1D */ BCK_THEB_WHIP, + /* 0x1E */ BCK_THEB_WHIP_B, + /* 0x1F */ BCK_YELIA_BEND, + /* 0x20 */ BCK_YELIA_WAIT, -extern "C" static void jointHorseCallBack__FP8J3DJointi(); -extern "C" static void jointFrontWheelCallBack__FP8J3DJointi(); -extern "C" static void jointRearWheelCallBack__FP8J3DJointi(); -extern "C" static void jointCoachCallBack__FP8J3DJointi(); -extern "C" static void arrowStickCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_cR4cXyz(); -extern "C" void __dt__4cXyzFv(); -extern "C" void hitFireArrow__12daNpcCoach_cF4cXyz(); -extern "C" void deleteFireArrow__12daNpcCoach_cFUi(); -extern "C" void deleteFireArrowFromList__12daNpcCoach_cFUi(); -extern "C" void setPosAngle__12daNpcCoach_cFR4cXyzR5csXyz(); -extern "C" void ctrlJointHorse__12daNpcCoach_cFP8J3DJointP8J3DModel(); -extern "C" void initCoachPosition__12daNpcCoach_cFR3VecR4SVec(); -extern "C" static void s_sub__FPvPv(); -extern "C" void changeAtherPath__12daNpcCoach_cFScR4cXyzR5csXyz(); -extern "C" static void createSolidHeap__FP10fopAc_ac_c(); -extern "C" void createHeap__12daNpcCoach_cFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" static void daNpcCoach_Execute__FP12daNpcCoach_c(); -extern "C" void execute__12daNpcCoach_cFv(); -extern "C" void checkCoachDamage__12daNpcCoach_cFv(); -extern "C" void setCoachBlazing__12daNpcCoach_cFUc(); -extern "C" void reinsExecute__12daNpcCoach_cFv(); -extern "C" void reinsInit__12daNpcCoach_cFv(); -extern "C" void calcCoachMotion__12daNpcCoach_cFv(); -extern "C" void calcRearWheelRotate__12daNpcCoach_cFv(); -extern "C" void __dt__8cM3dGPlaFv(); -extern "C" void calcHarnessMotion__12daNpcCoach_cFv(); -extern "C" void calcFrontWheelRotate__12daNpcCoach_cFv(); -extern "C" void calcHorseMotion__12daNpcCoach_cFv(); -extern "C" void calcHorseAnm__12daNpcCoach_cFv(); -extern "C" void calcHorsePath__12daNpcCoach_cFv(); -extern "C" static void daNpcCoach_Draw__FP12daNpcCoach_c(); -extern "C" void draw__12daNpcCoach_cFv(); -extern "C" static bool daNpcCoach_IsDelete__FP12daNpcCoach_c(); -extern "C" static void daNpcCoach_Delete__FP12daNpcCoach_c(); -extern "C" void __dt__12daNpcCoach_cFv(); -extern "C" void __dt__16daNpcChHarness_cFv(); -extern "C" void __dt__14daNpcChCoach_cFv(); -extern "C" void __dt__8dCcD_CylFv(); -extern "C" static void daNpcCoach_Create__FP10fopAc_ac_c(); -extern "C" void create__12daNpcCoach_cFv(); -extern "C" void create_init__12daNpcCoach_cFv(); -extern "C" void initCollision__12daNpcCoach_cFv(); -extern "C" void initBaseMtx__12daNpcCoach_cFv(); -extern "C" void setBaseMtx__12daNpcCoach_cFv(); -extern "C" void initCoachBlazing__12daNpcCoach_cFv(); -extern "C" void __ct__12daNpcCoach_cFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __ct__11J3DLightObjFv(); -extern "C" void __ct__4cXyzFv(); -extern "C" void __ct__8dCcD_CylFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" static void func_809A4EB8(); -extern "C" static void func_809A4EC0(); -extern "C" u8 const M_attr__12daNpcCoach_c[160]; -extern "C" extern char const* const d_a_npc_coach__stringBase0; + /* BMDR */ + /* 0x23 */ BMDR_COACH = 0x23, + /* 0x24 */ BMDR_HARNESS, + /* 0x25 */ BMDR_HORSE, + /* 0x26 */ BMDR_THEB, + /* 0x27 */ BMDR_YELIA, -// -// External References: -// + /* BTK */ + /* 0x2A */ BTK_THEB = 0x2A, -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoMtx_ZrotM__FPA4_fs(); -extern "C" void mDoMtx_MtxToRot__FPA4_CfP5csXyz(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void play__14mDoExt_baseAnmFv(); -extern "C" void init__13mDoExt_btpAnmFP16J3DMaterialTableP16J3DAnmTexPatterniifss(); -extern "C" void entry__13mDoExt_btpAnmFP16J3DMaterialTables(); -extern "C" void init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb(); -extern "C" void changeBckOnly__13mDoExt_bckAnmFP15J3DAnmTransform(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff(); -extern "C" void play__16mDoExt_McaMorfSOFUlSc(); -extern "C" void modelCalc__16mDoExt_McaMorfSOFv(); -extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); -extern "C" void -__ct__15mDoExt_McaMorf2FP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void setAnm__15mDoExt_McaMorf2FP15J3DAnmTransformP15J3DAnmTransformfiffff(); -extern "C" void setAnmRate__15mDoExt_McaMorf2Ff(); -extern "C" void play__15mDoExt_McaMorf2FUlSc(); -extern "C" void entryDL__15mDoExt_McaMorf2Fv(); -extern "C" void modelCalc__15mDoExt_McaMorf2Fv(); -extern "C" void stopZelAnime__15mDoExt_McaMorf2Fv(); -extern "C" void init__19mDoExt_3DlineMat1_cFUsUsP7ResTIMGi(); -extern "C" void update__19mDoExt_3DlineMat1_cFiR8_GXColorP12dKy_tevstr_c(); -extern "C" void setMat__26mDoExt_3DlineMatSortPacketFP18mDoExt_3DlineMat_c(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAc_IsActor__FPv(); -extern "C" void fopAcM_setStageLayer__FPv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_delete__FUi(); -extern "C" void fopAcM_createChild__FsUiUlPC4cXyziPC5csXyzPC4cXyzScPFPv_i(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz(); -extern "C" void fopAcM_effSmokeSet1__FPUlPUlPC4cXyzPC5csXyzfPC12dKy_tevstr_ci(); -extern "C" void fopAcM_getPolygonAngle__FPC8cM3dGPlas(); -extern "C" void gndCheck__11fopAcM_gc_cFPC4cXyz(); -extern "C" void fpcEx_Search__FPFPvPv_PvPv(); -extern "C" void fpcEx_SearchByID__FUi(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void -dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj(); -extern "C" void onTbox__12dSv_memBit_cFi(); -extern "C" void offTbox__12dSv_memBit_cFi(); -extern "C" void onSwitch__12dSv_danBit_cFi(); -extern "C" void offSwitch__12dSv_danBit_cFi(); -extern "C" void isSwitch__12dSv_danBit_cCFi(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void getEmitter__Q213dPa_control_c7level_cFUl(); -extern "C" void -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void dPath_GetPnt__FPC5dPathi(); -extern "C" void dPath_GetRoomPath__Fii(); -extern "C" void Release__4cBgSFP9dBgW_Base(); -extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -extern "C" void Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c(); -extern "C" void GetRoomId__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void Set__4cBgWFP6cBgD_tUlPA3_A4_f(); -extern "C" void __ct__4dBgWFv(); -extern "C" void Move__4dBgWFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void setPosition__7dTres_cFiUcPC3Veci(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void dKy_tevstr_init__FP12dKy_tevstr_cScUc(); -extern "C" void dKy_BossSpotLight_set__FP4cXyzfffP8_GXColorfUcUc(); -extern "C" void setFloatingMessage__13dMeter2Info_cFUssb(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void __dv__4cXyzCFf(); -extern "C" void normalizeZP__4cXyzFv(); -extern "C" void cM_rnd__Fv(); -extern "C" void cM_rndF__Ff(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void ChkUsed__9cBgW_BgIdCFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetH__8cM3dGCylFf(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void cLib_chaseS__FPsss(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz(); -extern "C" void cLib_distanceAngleS__Fss(); -extern "C" void func_802807E0(); -extern "C" void __dt__14Z2SoundObjBaseFv(); -extern "C" void __ct__10Z2CreatureFv(); -extern "C" void __dt__10Z2CreatureFv(); -extern "C" void init__10Z2CreatureFP3VecP3VecUcUc(); -extern "C" void __ct__14Z2CreatureRideFv(); -extern "C" void __dt__14Z2CreatureRideFv(); -extern "C" void init__14Z2CreatureRideFP3VecP3VecUcUc(); -extern "C" void __ct__15Z2SoundObjCoachFv(); -extern "C" void startWheelSound__15Z2SoundObjCoachFf(); -extern "C" void startFireSound__15Z2SoundObjCoachFUs(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void __as__12J3DLightInfoFRC12J3DLightInfo(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern(); -extern "C" void __destroy_arr(); -extern "C" void __construct_array(); -extern "C" void _savegpr_17(); -extern "C" void _savegpr_21(); -extern "C" void _savegpr_22(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_17(); -extern "C" void _restgpr_21(); -extern "C" void _restgpr_22(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__19mDoExt_3DlineMat1_c[5]; -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" extern void* __vt__15Z2SoundObjCoach[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" extern u8 g_meter2_info[248]; -extern "C" u8 mCurrentMtx__6J3DSys[48]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" f32 mGroundY__11fopAcM_gc_c; -extern "C" u8 mParticleTracePCB__13dPa_control_c[4 + 4 /* padding */]; -extern "C" void getHandPos1__11daNpcTheB_cFi(); -extern "C" void getHandPos2__11daNpcTheB_cFi(); + /* BTP */ + /* 0x2D */ BTP_HU_EYE = 0x2D, + /* 0x2E */ BTP_THEB, + /* 0x2F */ BTP_THEB_F_TALK_A, -// -// Declarations: -// + /* DZB */ + /* 0x32 */ DZB_COACH = 0x32, + /* 0x33 */ DZB_HARNESS, + + /* EVT */ + /* 0x36 */ EVT_EVENT_LIST = 0x36, + + /* TEX */ + /* 0x39 */ TEX_TAZUNA = 0x39, +}; + +enum Coach_Joint { + /* 0x0 */ JNT_COACH_CENTER, + /* 0x1 */ JNT_COACH_B_L_WHEEL, + /* 0x2 */ JNT_COACH_B_R_WHEEL, + /* 0x3 */ JNT_COACH_COACH_BG_LOC, + /* 0x4 */ JNT_COACH_BODY, + /* 0x5 */ JNT_COACH_TERUMA_LOC, + /* 0x6 */ JNT_COACH_YELIA_LOC, +}; + +enum Harness_Joint { + /* 0x0 */ JNT_HARNESS_CENTER, + /* 0x1 */ JNT_HARNESS_AXLE, + /* 0x2 */ JNT_HARNESS_F_L_WHEEL, + /* 0x3 */ JNT_HARNESS_F_R_WHEEL, + /* 0x4 */ JNT_HARNESS_BS_LOC, + /* 0x5 */ JNT_HARNESS_HU_LOC, +}; + +enum Horse_Joint { + /* 0x00 */ JNT_HORSE_CENTER, + /* 0x01 */ JNT_HORSE_BACKBONE2, + /* 0x02 */ JNT_HORSE_BACKBONE1, + /* 0x03 */ JNT_HORSE_F_L_LEG1, + /* 0x04 */ JNT_HORSE_F_L_LEG2, + /* 0x05 */ JNT_HORSE_F_L_LEG3, + /* 0x06 */ JNT_HORSE_F_L_LEG4, + /* 0x07 */ JNT_HORSE_F_R_LEG1, + /* 0x08 */ JNT_HORSE_F_R_LEG2, + /* 0x09 */ JNT_HORSE_F_R_LEG3, + /* 0x0A */ JNT_HORSE_R_R_LEG4, + /* 0x0B */ JNT_HORSE_BG_LOC, + /* 0x0C */ JNT_HORSE_NECK1, + /* 0x0D */ JNT_HORSE_NECK2, + /* 0x0E */ JNT_HORSE_HEAD, + /* 0x0F */ JNT_HORSE_MOUTH1, + /* 0x10 */ JNT_HORSE_MOUTH2, + /* 0x11 */ JNT_HORSE_WAIST, + /* 0x12 */ JNT_HORSE_B_L_LEG1, + /* 0x13 */ JNT_HORSE_B_L_LEG2, + /* 0x14 */ JNT_HORSE_B_L_LEG3, + /* 0x15 */ JNT_HORSE_B_L_LEG4, + /* 0x16 */ JNT_HORSE_B_R_LEG1, + /* 0x17 */ JNT_HORSE_B_R_LEG2, + /* 0x18 */ JNT_HORSE_B_R_LEG3, + /* 0x19 */ JNT_HORSE_B_R_LEG4, + /* 0x1A */ JNT_HORSE_TAIL1, + /* 0x1B */ JNT_HORSE_TAIL2, + /* 0x1C */ JNT_HORSE_TAIL3, +}; + +enum Telma_Joint { + /* 0x00 */ JNT_TELMA_CENTER, + /* 0x01 */ JNT_TELMA_BACKBONE1, + /* 0x02 */ JNT_TELMA_BACKBONE2, + /* 0x03 */ JNT_TELMA_ARML1, + /* 0x04 */ JNT_TELMA_ARML2, + /* 0x05 */ JNT_TELMA_HANDL, + /* 0x06 */ JNT_TELMA_ARMR1, + /* 0x07 */ JNT_TELMA_ARMR2, + /* 0x08 */ JNT_TELMA_HANDR, + /* 0x09 */ JNT_TELMA_NECK, + /* 0x0A */ JNT_TELMA_HEAD, + /* 0x0B */ JNT_TELMA_CHIN, + /* 0x0C */ JNT_TELMA_HAIR, + /* 0x0D */ JNT_TELMA_MOUTH, + /* 0x0E */ JNT_TELMA_WAIST, + /* 0x0F */ JNT_TELMA_LEGL2, + /* 0x10 */ JNT_TELMA_LEGR2, +}; + +enum Ilia_Joint { + /* 0x0 */ JNT_ILIA_CENTER, + /* 0x1 */ JNT_ILIA_WAIST, + /* 0x2 */ JNT_ILIA_BACKBONE, + /* 0x3 */ JNT_ILIA_NECK, + /* 0x4 */ JNT_ILIA_HEAD, +}; /* 8099D6D8-8099D72C 000078 0054+00 1/1 0/0 0/0 .text jointHorseCallBack__FP8J3DJointi */ -static void jointHorseCallBack(J3DJoint* param_0, int param_1) { - // NONMATCHING +static int jointHorseCallBack(J3DJoint* i_joint, int param_2) { + if (param_2 != 0) { + return 1; + } + + J3DModel* model = j3dSys.getModel(); + daNpcCoach_c* i_this = (daNpcCoach_c*)model->getUserArea(); + if (i_this != NULL) { + i_this->ctrlJointHorse(i_joint, model); + } + return 1; } /* 8099D72C-8099D80C 0000CC 00E0+00 1/1 0/0 0/0 .text jointFrontWheelCallBack__FP8J3DJointi */ -static void jointFrontWheelCallBack(J3DJoint* param_0, int param_1) { +static int jointFrontWheelCallBack(J3DJoint* i_joint, int param_2) { // NONMATCHING + if (param_2 != 0) { + return 1; + } + + int jointNo = i_joint->getJntNo(); + J3DModel* model = j3dSys.getModel(); + daNpcCoach_c* i_this = (daNpcCoach_c*)model->getUserArea(); + csXyz* front_wheel_rot = i_this->getFrontWheelRot(jointNo); + MTXCopy(model->getAnmMtx(jointNo), mDoMtx_stack_c::get()); + mDoMtx_stack_c::YrotM(front_wheel_rot->y); + mDoMtx_stack_c::ZrotM(front_wheel_rot->z); + mDoMtx_stack_c::XrotM(front_wheel_rot->x); + model->setAnmMtx(jointNo, mDoMtx_stack_c::get()); + mDoMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + + return 1; } /* 8099D80C-8099D8EC 0001AC 00E0+00 1/1 0/0 0/0 .text jointRearWheelCallBack__FP8J3DJointi */ -static void jointRearWheelCallBack(J3DJoint* param_0, int param_1) { +static int jointRearWheelCallBack(J3DJoint* i_joint, int param_2) { // NONMATCHING + if (param_2 != 0) { + return 1; + } + + int jointNo = i_joint->getJntNo(); + J3DModel* model = j3dSys.getModel(); + daNpcCoach_c* i_this = (daNpcCoach_c*)model->getUserArea(); + csXyz* rear_wheel_rot = i_this->getRearWheelRot(jointNo); + MTXCopy(model->getAnmMtx(jointNo), mDoMtx_stack_c::get()); + mDoMtx_stack_c::YrotM(rear_wheel_rot->y); + mDoMtx_stack_c::ZrotM(rear_wheel_rot->z); + mDoMtx_stack_c::XrotM(rear_wheel_rot->x); + model->setAnmMtx(jointNo, mDoMtx_stack_c::get()); + mDoMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + + return 1; } -/* ############################################################################################## */ /* 809A4ED0-809A4F70 000000 00A0+00 19/19 0/0 0/0 .rodata M_attr__12daNpcCoach_c */ -SECTION_RODATA u8 const daNpcCoach_c::M_attr[160] = { - 0xC0, 0x40, 0x00, 0x00, 0xC3, 0x48, 0x00, 0x00, 0xBE, 0x80, 0x00, 0x00, 0xC3, 0xC1, 0x80, 0x00, - 0xC3, 0x3E, 0x00, 0x00, 0x42, 0xA4, 0x00, 0x00, 0x42, 0xC0, 0x00, 0x00, 0x42, 0xA0, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x3F, 0x59, 0x99, 0x9A, 0x40, 0xC0, 0x00, 0x00, 0x41, 0xB0, 0x00, 0x00, - 0x41, 0xF0, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x43, 0xC8, 0x00, 0x00, - 0x44, 0xBB, 0x80, 0x00, 0x41, 0x80, 0x00, 0x00, 0x42, 0x78, 0x00, 0x00, 0xC2, 0x6B, 0x5A, 0x02, - 0x42, 0x87, 0x41, 0x06, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x19, 0x99, 0x9A, 0x41, 0xA0, 0x00, 0x00, - 0x00, 0x0D, 0x18, 0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0xDC, 0x07, 0x00, 0x00, 0x00, 0x44, 0x7A, 0x00, 0x00, - 0xE0, 0x00, 0x40, 0x00, 0x00, 0x00, 0xFF, 0x50, 0x00, 0x03, 0x00, 0x00, 0x45, 0xBB, 0x80, 0x00, - 0x41, 0x20, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, +daNpcCoach_Attr_c const daNpcCoach_c::M_attr = { + -3.0f, + -200.0f, + -0.25f, + -387.0f, + -190.0f, + 82.0f, + 96.0f, + 80.0f, + 0.5f, + 0.85f, + 6.0f, + 22.0f, + 30.0f, + 40.0f, + 4.0f, + 400.0f, + 1500.0f, + 16.0f, + 62.0f, + -58.837898f, + 67.627f, + 0.0f, + 0.6f, + 20.0f, + 13, + 0x1800, + 0x100, + 0x400, + 0x400, + 0, + 0, + 0, + 0, + 0, + 1, + 0x5DC, + 7, + 0, + 0, + 0, + 1000.0f, + 0xE000, + 0x4000, + 0, + 0xFF, + 0x50, + 0, + 3, + 0, + 6000.0f, + 10.0f, + 20.0f, + 0.0f, + 0x19, }; -COMPILER_STRIP_GATE(0x809A4ED0, &daNpcCoach_c::M_attr); - -/* 809A4F70-809A4F74 0000A0 0004+00 3/19 0/0 0/0 .rodata @4121 */ -SECTION_RODATA static u8 const lit_4121[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x809A4F70, &lit_4121); /* 8099D8EC-8099D9AC 00028C 00C0+00 1/1 0/0 0/0 .text jointCoachCallBack__FP8J3DJointi */ -static void jointCoachCallBack(J3DJoint* param_0, int param_1) { +static int jointCoachCallBack(J3DJoint* i_joint, int param_2) { + if (param_2 != 0) { + return 1; + } + + int jointNo = i_joint->getJntNo(); + J3DModel* model = j3dSys.getModel(); + daNpcCoach_c* i_this = (daNpcCoach_c*)model->getUserArea(); + MTXCopy(model->getAnmMtx(jointNo), mDoMtx_stack_c::get()); + mDoMtx_stack_c::XrotM(i_this->getCoachRotate()); + mDoMtx_stack_c::transM(0.0f, i_this->getCoachTrans(), 0.0f); + model->setAnmMtx(jointNo, mDoMtx_stack_c::get()); + mDoMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + + return 1; +} + +/* 8099D9AC-8099DA24 00034C 0078+00 1/1 0/0 0/0 .text arrowStickCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_cR4cXyz */ +static void arrowStickCallBack(dBgW* i_bgw, fopAc_ac_c* a_this, fopAc_ac_c* i_actor, cXyz& i_pos) { + if (fopAcM_GetName(i_actor) == PROC_E_ARROW) { + if (!daPy_getPlayerActorClass()->checkBoarSingleBattleSecond()) { + ((daNpcCoach_c*)a_this)->hitFireArrow(i_pos); + fopAcM_delete(i_actor); + } + } +} + +/* 8099DA60-8099DBA4 000400 0144+00 1/1 0/0 0/0 .text hitFireArrow__12daNpcCoach_cF4cXyz */ +void daNpcCoach_c::hitFireArrow(cXyz i_pos) { + if (field_0x24c0 == 0) { + mChYelia.mSound.startCreatureVoice(Z2SE_YELIA_V_KYAAA_TRIG, -1); + } + + if (field_0x24c0 < 5) { + for (int i = 0; i < 5; i++) { + if (field_0x247c[i] == fpcM_ERROR_PROCESS_ID_e) { + cXyz work; + mDoMtx_stack_c::copy(mChCoach.field_0x598); + mDoMtx_stack_c::multVec(&i_pos, &work); + field_0x247c[i] = fopAcM_createChild(PROC_COACH_FIRE, fopAcM_GetID(this), + 0, &work, fopAcM_GetRoomNo(this), + NULL, NULL, -1, NULL); + mChCoach.mSound.startSound(Z2SE_COACH_HIT_ARROW, 0, -1); + field_0x24c0++; + return; + } + } + } +} + +/* 8099DBA4-8099DCE8 000544 0144+00 0/0 0/0 1/1 .text deleteFireArrow__12daNpcCoach_cFUi */ +void daNpcCoach_c::deleteFireArrow(fpc_ProcID param_1) { // NONMATCHING + for (int i = 0; i < 5; i++) { + if (param_1 == field_0x247c[i]) break; + } + + field_0x2559 = 1; + mChCoach.mSound.startSound(Z2SE_COACH_HIT_WIND, 0, -1); + + field_0x24c4 = (field_0x24c4 / attr().damage_durability - attr().damage_extinguish_level) * attr().damage_durability; + + if (field_0x24c4 <= 0) { + field_0x24c4 = 0; + field_0x24c0 = 0; + + for (int i = 0; i < 5; i++) { + if (field_0x247c[i] != fpcM_ERROR_PROCESS_ID_e) { + fopAcM_delete(field_0x247c[i]); + field_0x247c[i] = fpcM_ERROR_PROCESS_ID_e; + } + } + } else { + for (int i = 0; i < 5; i++) { + if (field_0x247c[i] != fpcM_ERROR_PROCESS_ID_e) { + ((daCoachFire_c*)fpcM_SearchByID(field_0x247c[i]))->setNoHitTimer(); + } + } + + mChCoach.field_0x77c = 20; + } } -/* 8099D9AC-8099DA24 00034C 0078+00 1/1 0/0 0/0 .text - * arrowStickCallBack__FP4dBgWP10fopAc_ac_cP10fopAc_ac_cR4cXyz */ -static void arrowStickCallBack(dBgW* param_0, fopAc_ac_c* param_1, fopAc_ac_c* param_2, - cXyz& param_3) { - // NONMATCHING -} - -/* 8099DA24-8099DA60 0003C4 003C+00 2/2 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING -} - -/* 8099DA60-8099DBA4 000400 0144+00 1/1 0/0 0/0 .text hitFireArrow__12daNpcCoach_cF4cXyz - */ -void daNpcCoach_c::hitFireArrow(cXyz param_0) { - // NONMATCHING -} - -/* 8099DBA4-8099DCE8 000544 0144+00 0/0 0/0 1/1 .text deleteFireArrow__12daNpcCoach_cFUi - */ -void daNpcCoach_c::deleteFireArrow(unsigned int param_0) { - // NONMATCHING -} - -/* 8099DCE8-8099DD28 000688 0040+00 0/0 0/0 1/1 .text deleteFireArrowFromList__12daNpcCoach_cFUi - */ +/* 8099DCE8-8099DD28 000688 0040+00 0/0 0/0 1/1 .text deleteFireArrowFromList__12daNpcCoach_cFUi */ bool daNpcCoach_c::deleteFireArrowFromList(unsigned int i_actorID) { for (int i = 0; i < 5; i++) { if (field_0x247c[i] == i_actorID) { @@ -330,153 +353,1845 @@ bool daNpcCoach_c::deleteFireArrowFromList(unsigned int i_actorID) { return false; } -/* 8099DD28-8099DD7C 0006C8 0054+00 0/0 0/0 3/3 .text setPosAngle__12daNpcCoach_cFR4cXyzR5csXyz */ -void daNpcCoach_c::setPosAngle(cXyz& param_0, csXyz& param_1) { - // NONMATCHING +/* 8099DD28-8099DD7C 0006C8 0054+00 0/0 0/0 3/3 .text setPosAngle__12daNpcCoach_cFR4cXyzR5csXyz */ +void daNpcCoach_c::setPosAngle(cXyz& param_1, csXyz& param_2) { + initCoachPosition(param_1, param_2); + changeAtherPath(getRailID(), param_1, param_2); } -/* 8099DD7C-8099DE18 00071C 009C+00 1/1 0/0 0/0 .text - * ctrlJointHorse__12daNpcCoach_cFP8J3DJointP8J3DModel */ -void daNpcCoach_c::ctrlJointHorse(J3DJoint* param_0, J3DModel* param_1) { - // NONMATCHING +/* 8099DD7C-8099DE18 00071C 009C+00 1/1 0/0 0/0 .text ctrlJointHorse__12daNpcCoach_cFP8J3DJointP8J3DModel */ +int daNpcCoach_c::ctrlJointHorse(J3DJoint* i_joint, J3DModel* i_model) { + int jointNo = i_joint->getJntNo(); + + if ((jointNo == JNT_HORSE_BG_LOC || jointNo == JNT_HORSE_MOUTH2) && mChHorse.field_0x78c != 0) { + J3DAnmTransform* morfAnm = mChHorse.mpBckAnm->getBckAnm(); + J3DAnmTransform* bckAnm = mChHorse.mpModelMorf->getAnm(); + mChHorse.mpBckAnm->changeBckOnly(bckAnm); + mChHorse.mpModelMorf->changeAnm(morfAnm, NULL); + f32 anmRate = mChHorse.mpModelMorf->getAnmRate(); + mChHorse.mpModelMorf->setAnmRate(mChHorse.mAnmRate); + mChHorse.mAnmRate = anmRate; + } + + return 1; } -/* ############################################################################################## */ -/* 809A4F74-809A4F78 0000A4 0004+00 0/1 0/0 0/0 .rodata @4358 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4358 = 500.0f; -COMPILER_STRIP_GATE(0x809A4F74, &lit_4358); -#pragma pop +/* 8099DE18-8099E0E0 0007B8 02C8+00 2/2 0/0 0/0 .text initCoachPosition__12daNpcCoach_cFR3VecR4SVec */ +void daNpcCoach_c::initCoachPosition(Vec& i_pos, SVec& i_angle) { + current.pos = i_pos; + shape_angle.set(i_angle.x, i_angle.y, i_angle.z); + old.pos = current.pos; -/* 8099DE18-8099E0E0 0007B8 02C8+00 2/2 0/0 0/0 .text - * initCoachPosition__12daNpcCoach_cFR3VecR4SVec */ -void daNpcCoach_c::initCoachPosition(Vec& param_0, SVec& param_1) { - // NONMATCHING + mDoMtx_stack_c::transS(i_pos); + mDoMtx_stack_c::ZXYrotM(i_angle.x, i_angle.y, i_angle.z); + mDoMtx_stack_c::transM(0.0f, 0.0f, attr().field_0xc); + mDoMtx_stack_c::multVecZero(&mChHarness.field_0x6e0); + mChHarness.field_0x6ec = mChHarness.field_0x6e0; + mChHarness.field_0x700.y = shape_angle.y; + mChHarness.field_0x706 = mChHarness.field_0x700; + mChHarness.field_0x70c.field_0x0.set(attr().field_0x14, 0.0f, 0.0f); + mChHarness.field_0x730.field_0x0.set(-attr().field_0x14, 0.0f, 0.0f); + mDoMtx_stack_c::multVec(&mChHarness.field_0x70c.field_0x0, &mChHarness.field_0x70c.field_0x0); + mDoMtx_stack_c::multVec(&mChHarness.field_0x730.field_0x0, &mChHarness.field_0x730.field_0x0); + + mDoMtx_stack_c::transM(0.0f, 0.0f, attr().field_0x10); + mDoMtx_stack_c::multVecZero(&mChCoach.field_0x5e0); + mChCoach.field_0x5ec = mChCoach.field_0x5e0; + mChCoach.field_0x79a.y = shape_angle.y; + mChCoach.field_0x7a0 = mChCoach.field_0x79a; + mChCoach.field_0x788 = attr().shake_dist + cM_rndF(attr().shake_dist); + mChCoach.field_0x7a8.field_0x0.set(attr().field_0x18, 0.0f, 0.0f); + mChCoach.field_0x7cc.field_0x0.set(-attr().field_0x18, 0.0f, 0.0f); + mDoMtx_stack_c::multVec(&mChCoach.field_0x7a8.field_0x0, &mChCoach.field_0x7a8.field_0x0); + mDoMtx_stack_c::multVec(&mChCoach.field_0x7cc.field_0x0, &mChCoach.field_0x7cc.field_0x0); + + cXyz work(mChHarness.field_0x6e0.x, mChHarness.field_0x6e0.y + 500.0f, mChHarness.field_0x6e0.z); + field_0x255c = work; + + if (fopAcM_gc_c::gndCheck(&work)) { + mChHarness.field_0x6e0.y = fopAcM_gc_c::getGroundY(); + } + + work.set(mChCoach.field_0x5e0.x, mChCoach.field_0x5e0.y + 500.0f, mChCoach.field_0x5e0.z); + + if (fopAcM_gc_c::gndCheck(&work)) { + mChCoach.field_0x5e0.y = fopAcM_gc_c::getGroundY(); + } } /* 8099E0E0-8099E138 000A80 0058+00 1/1 0/0 0/0 .text s_sub__FPvPv */ -static void s_sub(void* param_0, void* param_1) { - // NONMATCHING +static void* s_sub(void* i_actor, void* i_data) { + if (fopAc_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_KR && ((e_kr_class*)i_actor)->getId() >= 0) { + return i_actor; + } + + return NULL; } -/* ############################################################################################## */ -/* 809A4F78-809A4FBC 0000A8 0044+00 1/1 0/0 0/0 .rodata - * ccCylSrc$localstatic3$initCollision__12daNpcCoach_cFv */ -SECTION_RODATA static u8 const data_809A4F78[68] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x20, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x79, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 809A4F78-809A4FBC 0000A8 0044+00 1/1 0/0 0/0 .rodata ccCylSrc$localstatic3$initCollision__12daNpcCoach_cFv */ +static dCcD_SrcCyl const ccCylSrc = { + { + {0, {{0, 0, 0}, {0x2420, 0x11}, 0x79}}, + {dCcD_SE_NONE, 0, 0, 0, 0}, + {dCcD_SE_NONE, 0, 0, 0, 4}, + 0, + }, + { + 0.0f, 0.0f + } }; -COMPILER_STRIP_GATE(0x809A4F78, &data_809A4F78); -/* 809A4FBC-809A4FFC 0000EC 0040+00 1/1 0/0 0/0 .rodata - * ccSphSrc$localstatic4$initCollision__12daNpcCoach_cFv */ -SECTION_RODATA static u8 const data_809A4FBC[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, +/* 809A4FBC-809A4FFC 0000EC 0040+00 1/1 0/0 0/0 .rodata ccSphSrc$localstatic4$initCollision__12daNpcCoach_cFv */ +static dCcD_SrcSph const ccSphSrc = { + { + {0, {{0, 0, 0}, {0x10000, 0x11}, 0}}, + {dCcD_SE_NONE, 0, 0, 0, 0}, + {dCcD_SE_NONE, 0, 0, 0, 4}, + 0, + }, + { + {{0.0f, 0.0f, 0.0f}, 50.0f}, + } }; -COMPILER_STRIP_GATE(0x809A4FBC, &data_809A4FBC); -/* 809A4FFC-809A5000 00012C 0004+00 0/2 0/0 0/0 .rodata @4845 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4845 = 1000000000.0f; -COMPILER_STRIP_GATE(0x809A4FFC, &lit_4845); -#pragma pop -/* 809A5000-809A5008 000130 0008+00 0/7 0/0 0/0 .rodata @4846 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4846[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x809A5000, &lit_4846); -#pragma pop +inline BOOL daNpcChPath_c::setPath(int path_index, int room_no, cXyz* param_3, bool param_4) { + mpPath = dPath_GetRoomPath(path_index, room_no); -/* 809A5008-809A5010 000138 0008+00 0/7 0/0 0/0 .rodata @4847 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4847[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x809A5008, &lit_4847); -#pragma pop + if (mpPath == NULL) { + return FALSE; + } -/* 809A5010-809A5018 000140 0008+00 0/7 0/0 0/0 .rodata @4848 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4848[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x809A5010, &lit_4848); -#pragma pop + mCurrentID = path_index; + mPntIndex = 0; -/* 8099E138-8099E4A0 000AD8 0368+00 2/2 0/0 0/0 .text - * changeAtherPath__12daNpcCoach_cFScR4cXyzR5csXyz */ -void daNpcCoach_c::changeAtherPath(s8 param_0, cXyz& param_1, csXyz& param_2) { + if (param_4 && param_3 != NULL) { + f32 fVar1 = 1000000000.0f; + for (int pnt_index = 0; pnt_index < mpPath->m_num; pnt_index++) { + f32 fVar2 = param_3->abs2(dPath_GetPnt(mpPath, pnt_index)->m_position); + if (fVar2 < fVar1) { + mPntIndex = pnt_index; + fVar1 = fVar2; + } + } + + setNextPoint(); + } + + field_0x8 = 1000000000.0f; + + if (param_3 != NULL) { + field_0x4 = param_3; + cXyz targetPoint; + getTargetPoint(targetPoint); + field_0x8 = field_0x4->abs(targetPoint); + } + + return TRUE; +} + +/* 8099E138-8099E4A0 000AD8 0368+00 2/2 0/0 0/0 .text changeAtherPath__12daNpcCoach_cFScR4cXyzR5csXyz */ +void daNpcCoach_c::changeAtherPath(s8 path_index, cXyz& param_2, csXyz& param_3) { // NONMATCHING + mChPath.setPath(path_index, fopAcM_GetRoomNo(this), ¶m_2, true); + + if (mChPath.isPath()) { + mPathID = path_index; + + cXyz targetPoint; + mChPath.getTargetPoint(targetPoint); + + if (cLib_distanceAngleS(param_3.y, cLib_targetAngleY(¶m_2, &targetPoint)) >= 0x4000) { + mChPath.setNextPoint(); + mChPath.getTargetPoint(targetPoint); + + if (cLib_distanceAngleS(shape_angle.y, cLib_targetAngleY(¶m_2, &targetPoint)) >= 0x4000) { + mChPath.setPrevPoint(); + } + } + } } /* 8099E4A0-8099E4C0 000E40 0020+00 1/1 0/0 0/0 .text createSolidHeap__FP10fopAc_ac_c */ -static void createSolidHeap(fopAc_ac_c* param_0) { - // NONMATCHING +static int createSolidHeap(fopAc_ac_c* a_this) { + daNpcCoach_c* i_this = (daNpcCoach_c*)a_this; + return i_this->createHeap(); } -/* ############################################################################################## */ -/* 809A5018-809A502C 000148 0014+00 1/1 0/0 0/0 .rodata - * ParticleName$localstatic3$setCoachBlazing__12daNpcCoach_cFUc */ -SECTION_RODATA static u8 const data_809A5018[20] = { - 0x85, 0xF0, 0x85, 0xEF, 0x85, 0xE7, 0x85, 0xE8, 0x85, 0xE9, - 0x85, 0xEA, 0x85, 0xEB, 0x85, 0xEC, 0x85, 0xED, 0x85, 0xEE, -}; -COMPILER_STRIP_GATE(0x809A5018, &data_809A5018); - -/* 809A502C-809A5030 00015C 0004+00 2/11 0/0 0/0 .rodata @5111 */ -SECTION_RODATA static f32 const lit_5111 = 1.0f; -COMPILER_STRIP_GATE(0x809A502C, &lit_5111); - -/* 809A5120-809A5120 000250 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_809A5120 = "Coach"; -#pragma pop - /* 809A5130-809A5134 -00001 0004+00 7/7 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_npc_coach__stringBase0; +static char* l_arcName = "Coach"; /* 809A5134-809A51AC 000004 0078+00 2/2 0/0 0/0 .data l_horseAnmParam */ -SECTION_DATA static u8 l_horseAnmParam[120] = { - 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x40, 0xC0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x40, 0xC0, - 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x41, 0xB0, 0x00, 0x00, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x41, 0xB0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0E, 0x41, 0xF0, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0E, 0x41, 0xF0, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x42, 0x20, - 0x00, 0x00, 0x40, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x0D, 0x42, 0x20, 0x00, 0x00, 0x40, - 0x33, 0x33, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0x42, 0x20, 0x00, 0x00, 0x40, 0x33, 0x33, 0x33, +static struct { + int field_0x0; + f32 field_0x4; + f32 field_0x8; + int field_0xc; + f32 field_0x10; + f32 field_0x14; +} l_horseAnmParam[5] = { + {BCK_HU_WAIT_01, 0.0f, 1.0f, BCK_HU_WALK_SLOW, 6.0f, 2.0f}, + {BCK_HU_WALK_SLOW, 6.0f, 2.0f, BCK_HU_WALK_FAST, 22.0f, 2.0f}, + {BCK_HU_WALK_FAST, 22.0f, 2.0f, BCK_HU_RUN_SLOW, 30.0f, 3.0f}, + {BCK_HU_RUN_SLOW, 30.0f, 3.0f, BCK_HU_RUN_FAST, 40.0f, 2.8f}, + {BCK_HU_RUN_FAST, 40.0f, 2.8f, -1, 40.0f, 2.8f}, }; -/* 809A51AC-809A51B0 00007C 0004+00 1/1 0/0 0/0 .data - * l_color$localstatic3$reinsDraw__12daNpcCoach_cFv */ -SECTION_DATA static u8 data_809A51AC[4] = { - 0x14, - 0x0F, - 0x00, - 0xFF, +static u16 const ParticleName[10] = { + 0x85F0, 0x85EF, 0x85E7, 0x85E8, 0x85E9, + 0x85EA, 0x85EB, 0x85EC, 0x85ED, 0x85EE, }; +/* 8099E4C0-8099EAD8 000E60 0618+00 1/1 0/0 0/0 .text createHeap__12daNpcCoach_cFv */ +int daNpcCoach_c::createHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, BMDR_HORSE); + + JUT_ASSERT(2702, modelData != 0); + + mChHorse.mpModelMorf = new mDoExt_McaMorf2(modelData, NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, BCK_HU_WAIT_01), NULL, + 2, 1.0f, 0, -1, &mChHorse.mSound, 0x80000, 0x11020084); + if (mChHorse.mpModelMorf != NULL && mChHorse.mpModelMorf->getModel() == NULL) { + mChHorse.mpModelMorf->stopZelAnime(); + mChHorse.mpModelMorf = NULL; + } + + if (mChHorse.mpModelMorf == NULL) { + return 0; + } + + modelData = mChHorse.mpModelMorf->getModel()->getModelData(); + for (u16 i = 0; i < modelData->getJointNum(); i++) { + modelData->getJointNodePointer(i)->setCallBack(jointHorseCallBack); + } + mChHorse.mpModelMorf->getModel()->setUserArea((u32)this); + + mChHorse.mpBtpAnm = new mDoExt_btpAnm(); + J3DAnmTexPattern* i_btk = (J3DAnmTexPattern*)dComIfG_getObjectRes(l_arcName, BTP_HU_EYE); + if (mChHorse.mpBtpAnm == NULL || mChHorse.mpBtpAnm->init(modelData, i_btk, 1, 0, + 1.0f, 0, -1) == 0) { + return 0; + } + + mChHorse.mpBckAnm = new mDoExt_bckAnm(); + J3DAnmTransform* i_bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, BCK_HU_LASH); + if (mChHorse.mpBckAnm == NULL || mChHorse.mpBckAnm->init(i_bck, 1, 0, 1.0f, 0, -1, false) == 0) { + return 0; + } + + mChHorse.mAnmRate = 0.0f; + mChHorse.field_0x78c = 0; + + if (mChHorse.mChReins.field_0x0.init(2, 7, (ResTIMG*)dComIfG_getObjectRes(l_arcName, TEX_TAZUNA), 1) == 0) { + return 0; + } + + if (mChHorse.mChReins.field_0x3c.init(1, 2, (ResTIMG*)dComIfG_getObjectRes(l_arcName, TEX_TAZUNA), 1) == 0) { + return 0; + } + + modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, BMDR_HARNESS); + + JUT_ASSERT(2762, modelData != 0); + + mChHarness.mHarnessModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mChHarness.mHarnessModel == NULL) { + return 0; + } + + modelData = mChHarness.mHarnessModel->getModelData(); + for (u16 i = 0; i < modelData->getJointNum(); i++) { + if (i == 2 || i == 3) { + modelData->getJointNodePointer(i)->setCallBack(jointFrontWheelCallBack); + } + } + mChHarness.mHarnessModel->setUserArea((u32)this); + + mChHarness.field_0x6a0 = new dBgW(); + if (mChHarness.field_0x6a0 == NULL) { + return 0; + } + + if (mChHarness.field_0x6a0->Set((cBgD_t*)dComIfG_getObjectRes(l_arcName, DZB_HARNESS), 1, &mChHarness.mMtx)) { + mChHarness.field_0x6a0 = NULL; + + JUT_ASSERT(2782, 0); + } + + modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, BMDR_COACH); + + JUT_ASSERT(2787, modelData != 0); + + mChCoach.mCoachModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mChCoach.mCoachModel == NULL) { + return 0; + } + + modelData = mChCoach.mCoachModel->getModelData(); + for (u16 i = 0; i < modelData->getJointNum(); i++) { + if (i == 1 || i == 2) { + modelData->getJointNodePointer(i)->setCallBack(jointRearWheelCallBack); + } else if (i == 4) { + modelData->getJointNodePointer(i)->setCallBack(jointCoachCallBack); + } + } + mChCoach.mCoachModel->setUserArea((u32)this); + + mChCoach.field_0x564 = new dBgW(); + if (mChCoach.field_0x564 == NULL) { + return 0; + } + + if (mChCoach.field_0x564->Set((cBgD_t*)dComIfG_getObjectRes(l_arcName, DZB_COACH), 1, &mChCoach.field_0x568) != 0) { + mChCoach.field_0x564 = NULL; + + JUT_ASSERT(2811, 0); + } + + modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, BMDR_YELIA); + + JUT_ASSERT(2816, modelData != 0); + + mChYelia.mpModelMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, BCK_YELIA_WAIT), + -1, 1.0f, 0, -1, &mChYelia.mSound, 0x80000, 0x11000084); + if (mChYelia.mpModelMorf != NULL && mChYelia.mpModelMorf->getModel() == NULL) { + mChYelia.mpModelMorf->stopZelAnime(); + mChYelia.mpModelMorf = NULL; + } + + if (mChYelia.mpModelMorf == NULL) { + return 0; + } + + return 1; +} + +/* 8099EB20-8099EB40 0014C0 0020+00 1/0 0/0 0/0 .text daNpcCoach_Execute__FP12daNpcCoach_c */ +static int daNpcCoach_Execute(daNpcCoach_c* i_this) { + return i_this->execute(); +} + +inline void daNpcCoach_c::setDriverMtx() { + daNpcTheB_c* telmaB_p = (daNpcTheB_c*)fpcM_SearchByID(parentActorID); + if (telmaB_p != NULL) { + telmaB_p->setTRMtx(mChCoach.mCoachModel->getAnmMtx(JNT_COACH_TERUMA_LOC)); + } +} + +inline void daNpcCoach_c::calcYeliaMotion() { + J3DAnmTransform* i_bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, BCK_YELIA_WAIT); + J3DAnmTransform* i_bck2 = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, BCK_YELIA_BEND); + + if (mChYelia.mpModelMorf->getAnm() == i_bck) { + if (dComIfGs_isSaveDunSwitch(0x37)) { + mChYelia.mpModelMorf->setAnm(i_bck2, J3DFrameCtrl::EMode_LOOP, 15.0f, 1.0f, 0.0f, -1.0f); + } + } else { + if (mChYelia.mpModelMorf->getAnm() == i_bck2 && !dComIfGs_isSaveDunSwitch(0x37)) { + mChYelia.mpModelMorf->setAnm(i_bck, J3DFrameCtrl::EMode_LOOP, 20.0f, 1.0f, 0.0f, -1.0f); + } + } + + setYeliaMtx(); + + mChYelia.mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mChYelia.mpModelMorf->modelCalc(); +} + +/* 8099EB40-8099EEA0 0014E0 0360+00 1/1 0/0 0/0 .text execute__12daNpcCoach_cFv */ +int daNpcCoach_c::execute() { + calcHorseMotion(); + calcHarnessMotion(); + calcCoachMotion(); + calcDriverMotion(); + calcYeliaMotion(); + reinsExecute(); + + dTres_c::setCoachPosition(1, &mChHarness.field_0x6e0, dComIfG_Bgsp().GetRoomId(mChCoach.mBgc.m_gnd)); + checkCoachDamage(); + + cXyz work(0.0f, 0.0f, 0.0f); + int iVar1 = 0; + + for (int i = 0; i < 5; i++) { + if (field_0x247c[i] != fpcM_ERROR_PROCESS_ID_e) { + fopAc_ac_c* actor_p = (fopAc_ac_c*)fpcM_SearchByID(field_0x247c[i]); + if (actor_p != NULL) { + work += fopAcM_GetPosition(actor_p); + iVar1++; + } + } + } + + if (field_0x24c4 > 0) { + if (iVar1 == 0) { + work = eyePos; + } else { + work /= iVar1; + } + + work.y += attr().field_0x8c; + + GXColor color = {attr().field_0x86, attr().field_0x87, attr().field_0x88, 0xFF}; + + f32 fVar1 = attr().field_0x90; + f32 fVar2 = field_0x24c8; + + dKy_BossSpotLight_set(&work, -90.0f, 0.0f, attr().field_0x94, &color, + fVar2 * fVar1, 2, attr().field_0x89); + + if (field_0x24c8 < 1.0f) { + field_0x24c8 += 0.0022222223f; + } else { + field_0x24c8 = 1.0f; + } + } else { + field_0x24c8 = 0.0f; + } + + return 1; +} + +/* 8099EEA0-8099F1B8 001840 0318+00 1/2 0/0 0/0 .text checkCoachDamage__12daNpcCoach_cFv */ +void daNpcCoach_c::checkCoachDamage() { + if (field_0x24c0 > 0) { + if (!dComIfGp_event_runCheck() && getRailID() != 8) { + field_0x24c4 += attr().damage_reduction; + + if (field_0x24c4 > attr().damage_durability) { + field_0x24c4 = attr().damage_durability; + } + } + + mChCoach.mSound.startFireSound(field_0x24c4); + mChYelia.mSound.startCreatureVoiceLevel(Z2SE_YELIA_V_KYAAA_LOOP, -1); + dComIfGs_onSaveDunSwitch(0x37); + } else { + field_0x24c4 = 0; + dComIfGs_offSaveDunSwitch(0x37); + } + + u8 uVar1 = field_0x24c4 * 0xFF / attr().damage_durability; + + if (field_0x1dc0 < field_0x24c4) { + field_0x1dc0 = field_0x24c4; + + if (field_0x1dc0 < attr().damage_durability / 2) { + field_0x1dc5 = 0xFF - ((field_0x1dc0 * 0xFF) / attr().damage_durability << 1); + field_0x1dc6 = 125; + } else { + field_0x1dc5 = 0; + int iVar2 = attr().damage_durability / 2; + int iVar1 = (field_0x1dc0 - attr().damage_durability / 2) * 20; + field_0x1dc6 = (int)((f32)iVar1 / (f32)iVar2 + 125.0f); + } + + field_0x1dc7 = 0xFF - uVar1; + } + + setCoachBlazing(uVar1); + ((daCoach2D_c*)fpcM_SearchByID(field_0x2554))->setHitCount((field_0x24c4 / (attr().damage_durability / 20))); + + if (field_0x24c4 >= attr().damage_durability) { + fopAcM_OnStatus(this, fopAcM_STATUS_UNK_004000); + mChHorse.field_0x784 = 0.0f; + + daNpcTheB_c* telmaB_p = (daNpcTheB_c*)fpcM_SearchByID(parentActorID); + if (telmaB_p != NULL) { + mChCoach.field_0x5f8[0]->setParticleCallBackPtr(NULL); + mChCoach.field_0x5f8[1]->setParticleCallBackPtr(NULL); + telmaB_p->setGameOver(); + } + } + + daCoach2D_c* coach2D_p; + if (field_0x2558 != 0) { + if (dComIfGs_isSaveDunSwitch(0x28)) { + coach2D_p = (daCoach2D_c*)fpcM_SearchByID(field_0x2554); + if (coach2D_p != NULL) { + coach2D_p->hide(); + field_0x2558 = 0; + } + } + } else if (field_0x24c4 > 0 && !dComIfGs_isSaveDunSwitch(0x28)) { + coach2D_p = (daCoach2D_c*)fpcM_SearchByID(field_0x2554); + if (coach2D_p != NULL) { + coach2D_p->setMaxHitCount(20); + coach2D_p->show(); + field_0x2558 = 1; + } + } + + if (field_0x2559 == 0) { + if (field_0x24c4 > attr().damage_durability / 4) { + dMeter2Info_setFloatingMessage(0x13EB, 150, false); + field_0x2559 = 1; + } + } +} + +/* 8099F1B8-8099F4BC 001B58 0304+00 1/1 0/0 0/0 .text setCoachBlazing__12daNpcCoach_cFUc */ +void daNpcCoach_c::setCoachBlazing(u8 param_1) { + // NONMATCHING + f32 fVar1 = 0.0f; + f32 fVar2 = 0.0f; + int uVar1 = param_1 / 63; + u8 uVar2; + + if (param_1 == 0) { + uVar1 = 2; + mCoachBlazing = false; + param_1 = 0; + uVar2 = 0; + attention_info.flags = 0; + } else if (mCoachBlazing) { + switch (uVar1) { + case 0: + uVar1 = 4; + break; + + case 1: + uVar1 = 5; + fVar2 = 1.5f; + break; + + case 2: + uVar1 = 7; + fVar1 = 0.4f; + fVar2 = 1.5f; + break; + + case 3: + case 4: + uVar1 = 10; + fVar1 = 0.6f; + fVar2 = 1.5f; + break; + + default: + JUT_ASSERT(2552, 0); + break; + } + } else if (uVar1 == 1) { + uVar1 = 5; + mCoachBlazing = true; + uVar2 = 0; + attention_info.flags = 0x101; + } else { + uVar1 = 2; + param_1 = 0; + uVar2 = 0; + attention_info.flags = 0; + } + + cXyz work; + + mDoMtx_stack_c::copy(mChCoach.mCoachModel->getAnmMtx(JNT_COACH_BODY)); + mDoMtx_stack_c::multVecZero(&work); + + for (int i = 2; i < uVar1; i++) { + if (mChCoach.field_0x5f8[i] == NULL) { + mChCoach.field_0x5f8[i] = dComIfGp_particle_set(ParticleName[i], &work, + &mChCoach.field_0x79a, NULL); + if (mChCoach.field_0x5f8[i] != NULL) { + mChCoach.field_0x5f8[i]->becomeImmortalEmitter(); + } + } + } + + for (; uVar1 < 10; uVar1++) { + if (mChCoach.field_0x5f8[uVar1] != NULL) { + mChCoach.field_0x5f8[uVar1]->becomeInvalidEmitter(); + mChCoach.field_0x5f8[uVar1] = NULL; + } + } + + for (int i = 0; i < 10; i++) { + if (mChCoach.field_0x5f8[i] != NULL) { + mChCoach.field_0x5f8[i]->setGlobalRTMatrix(mChCoach.mCoachModel->getAnmMtx(JNT_COACH_BODY)); + } + } + + mChCoach.field_0x5d4 = mChCoach.field_0x5c8 * 0.8f; + mChCoach.field_0x5f8[0]->setGlobalAlpha(param_1); + mChCoach.field_0x5f8[0]->setRate(fVar1); + mChCoach.field_0x5f8[0]->setUserWork((u32)&mChCoach.field_0x5d4); + mChCoach.field_0x5f8[1]->setGlobalAlpha(uVar2); + mChCoach.field_0x5f8[1]->setRate(fVar2); + mChCoach.field_0x5f8[1]->setUserWork((u32)&mChCoach.field_0x5d4); +} + +/* 8099F4BC-8099F988 001E5C 04CC+00 1/1 0/0 0/0 .text reinsExecute__12daNpcCoach_cFv */ +void daNpcCoach_c::reinsExecute() { + // NONMATCHING + daNpcChReins_c* reins = &mChHorse.mChReins; + if (mChHorse.mChReins.field_0x16c <= 1) { + s8 sVar1 = mChHorse.mChReins.field_0x16c + 1; + reins->field_0x16c = sVar1; + + if (sVar1 > 1) { + reinsInit(); + } + } else { + daNpcTheB_c* telmaB_p = (daNpcTheB_c*)fpcM_SearchByID(parentActorID); + cXyz sp24, sp30, sp3c; + cXyz sp48(attr().field_0x4c, attr().field_0x50, attr().field_0x54); + s16 sVar2 = attr().field_0x60; + mDoMtx_stack_c::copy(mChHorse.mpModelMorf->getModel()->getAnmMtx(sVar2)); + mDoMtx_stack_c::multVec(&sp48, &sp48); + reins->field_0x170 = sp48; + reins->field_0x168 = attr().field_0x48; + + for (int i = 0; i < 2; i++) { + if (i == 0) { + sp24.set(63.0f, 17.0f, 11.0f); + } else { + sp24.set(63.0f, 17.0f, -11.0f); + } + + mDoMtx_stack_c::copy(mChHorse.mpModelMorf->getModel()->getAnmMtx(JNT_HORSE_HEAD)); + mDoMtx_stack_c::multVec(&sp24, &sp24); + + if (telmaB_p != NULL) { + sp30 = telmaB_p->getHandPos2(i); + } + + cXyz* pcVar1 = reins->field_0x0.getPos(i); + cXyz* pcVar2 = reins->field_0xf0; + cXyz sp54; + *pcVar1 = sp24; + + cXyz* pcVar3; + for (int j = 1; j < 6; j++, pcVar3 = pcVar1++, pcVar2++, pcVar1 = pcVar3) { + sp3c = *pcVar3 - sp48; + sp3c.normalizeZP(); + sp3c *= attr().field_0x5c; + sp3c.y = 0.0f; + sp54 = *pcVar3 - *pcVar1; + sp54.y += gravity; + sp54 += *pcVar2 + sp3c; + sp54.normalizeZP(); + *pcVar3 = *pcVar1 + (sp54 * reins->field_0x168); + } + + *pcVar3 = sp30; + pcVar3 = reins->field_0x0.getPos(i); + pcVar3 += 5; + pcVar2 = &reins->field_0xf0[i * 5]; + + for (int j = 5; j > 0; j--, pcVar3--, pcVar2--) { + sp3c = *pcVar3 - sp48; + sp3c.normalizeZP(); + sp3c *= attr().field_0x5c; + sp3c.y = 0.0f; + sp54 = *pcVar1 - *(pcVar1 + 1); + sp54.y += gravity; + sp54 += *pcVar2 + sp3c; + sp54.normalizeZP(); + *pcVar3 = *(pcVar3 + 1) + (sp54 * reins->field_0x168); + } + + pcVar3 = reins->field_0x0.getPos(i); + cXyz* pcVar4; + pcVar2 = &reins->field_0xf0[i * 5]; + + for (int j = 1; j < 6; j++, pcVar4++, pcVar2++) { + *pcVar2 = (*pcVar3 - *pcVar4) * attr().field_0x58; + pcVar4 = pcVar3; + } + } + + cXyz* pcVar5 = reins->field_0x3c.getPos(0); + + for (int i = 0; i < 2; i++, pcVar5++) { + if (telmaB_p != NULL) { + *pcVar5 = telmaB_p->getHandPos1(i); + } + } + } +} + +/* 8099F988-8099FCF4 002328 036C+00 1/1 0/0 0/0 .text reinsInit__12daNpcCoach_cFv */ +void daNpcCoach_c::reinsInit() { + // NONMATCHING + daNpcChReins_c* reins = &mChHorse.mChReins; + daNpcTheB_c* telmaB_p = (daNpcTheB_c*)fpcM_SearchByID(parentActorID); + cXyz sp1c, sp28; + + for (int i = 0; i < 2; i++) { + f32* pfVar1 = reins->field_0x0.getSize(i); + + for (int j = 0; j < 7; j++, pfVar1++) { + *pfVar1 = 2.0f; + } + + if (i == 0) { + sp1c.set(63.0f, 17.0f, 11.0f); + } else { + sp1c.set(63.0f, 17.0f, -11.0f); + } + + mDoMtx_stack_c::copy(mChHorse.mpModelMorf->getModel()->getAnmMtx(JNT_HORSE_HEAD)); + mDoMtx_stack_c::multVec(&sp1c, &sp1c); + + if (telmaB_p != NULL) { + sp28 = telmaB_p->getHandPos2(i); + } + + cXyz sp34 = (sp28 - sp1c) / 6.0f; + reins->field_0x168 = sp34.abs(); + cXyz* pcVar1 = reins->field_0x0.getPos(i); + cXyz* pcVar2 = &reins->field_0x78[i * 5]; + *pcVar1 = sp1c; + + cXyz* pcVar3; + for (int j = 0; pcVar3 = pcVar1 + 1, j < 6; j++, pcVar2++, pcVar1 = pcVar3) { + *pcVar3 = *pcVar1 + sp34; + pcVar2 = pcVar3; + } + *pcVar3 = sp28; + } + + cXyz* pcVar4 = reins->field_0x3c.getPos(0); + f32* pfVar2 = reins->field_0x3c.getSize(0); + + for (int i = 0; i < 2; i++, pcVar4++, pfVar2++) { + if (telmaB_p != NULL) { + *pcVar4 = telmaB_p->getHandPos1(i); + } + + *pfVar2 = 2.0f; + } +} + +inline void daNpcCoach_c::setCoachCollision() { + mChCoach.mBgc.CrrPos(dComIfG_Bgsp()); + + if (mChCoach.field_0x5e0.y - mChCoach.mBgc.GetGroundH() > 1500.0f) { + mChCoach.field_0x784 = 0.0f; + } else { + mChCoach.field_0x784 = attr().max_fall_speed; + } + + mChCoach.field_0x564->SetRoomId(dComIfG_Bgsp().GetRoomId(mChCoach.mBgc.m_gnd)); + + if (attention_info.flags != 0 && mChCoach.field_0x77c == 0) { + mChCoach.field_0x644.SetC(eyePos); + dComIfG_Ccsp()->Set(&mChCoach.field_0x644); + } else { + mChCoach.field_0x644.ClrTgHit(); + } + + f32 fVar1 = cM_ssin(mChCoach.field_0x79a.y); + f32 fVar2 = cM_scos(mChCoach.field_0x79a.y); + cXyz sp58(35.0f, 0.0f, 15.0f); + mDoMtx_stack_c::transS(mChYelia.field_0x694); + mDoMtx_stack_c::YrotM(mChCoach.field_0x79a.y); + mDoMtx_stack_c::multVec(&sp58, &sp58); + fVar1 *= 65.0f; + fVar2 *= 65.0f; + + for (int i = 0; i < 2; i++) { + mChYelia.field_0x41c[i].SetC(sp58); + dComIfG_Ccsp()->Set(&mChYelia.field_0x41c[i]); + sp58.x -= fVar1; + sp58.z -= fVar2; + } +} + +inline s16 daNpcCoach_c::getGroundSlope(dBgS_ObjAcch* i_bgc, s16 param_2) { + cM3dGPla plane; + + if (dComIfG_Bgsp().GetTriPla(i_bgc->m_gnd, &plane)) { + return fopAcM_getPolygonAngle(&plane, param_2); + } + + return shape_angle.x; +} + +inline void daNpcCoach_c::calcSpringF(f32* param_1, f32 param_2, f32* param_3) { + *param_3 = (*param_3 + (param_2 - *param_1) * attr().spring_constant) * attr().damp_coeff[0]; + *param_1 += *param_3; +} + +inline void daNpcCoach_c::calcSpringS(s16* param_1, s16 param_2, f32* param_3) { + *param_3 = (*param_3 + (param_2 - *param_1) * attr().spring_constant) * attr().damp_coeff[0]; + *param_1 += *param_3; +} + +inline void daNpcCoach_c::setCoachMtx() { + cXyz sp18; + mDoMtx_stack_c::copy(mChHarness.mHarnessModel->getAnmMtx(JNT_HARNESS_BS_LOC)); + mDoMtx_stack_c::multVecZero(&sp18); + mDoMtx_stack_c::transS(sp18); + mDoMtx_stack_c::YrotM(mChCoach.field_0x79a.y); + mDoMtx_stack_c::XrotM(mChCoach.field_0x79a.x); + mDoMtx_stack_c::ZrotM(mChCoach.field_0x79a.z); + + mChCoach.mCoachModel->setBaseTRMtx(mDoMtx_stack_c::get()); + mDoMtx_stack_c::transM(0.0f, mChCoach.mCoachTrans, 0.0f); + mDoMtx_stack_c::ZrotM(mChCoach.mCoachRot); + MTXCopy(mDoMtx_stack_c::get(), mChCoach.field_0x568); + + mChCoach.field_0x564->Move(); + mChCoach.mCoachModel->calc(); + MTXCopy(mDoMtx_stack_c::get(), mCoachMtx); + + eyePos.set(108.0f, 108.0f, 0.0f); + mDoMtx_stack_c::multVec(&eyePos, &eyePos); + + attention_info.position.set(-90.0f, 290.0f, 0.0f); + mDoMtx_stack_c::multVec(&attention_info.position, &attention_info.position); + + mDoMtx_stack_c::inverse(); + MTXCopy(mDoMtx_stack_c::get(), mChCoach.field_0x598); +} + +/* 8099FCF4-809A0728 002694 0A34+00 1/1 0/0 0/0 .text calcCoachMotion__12daNpcCoach_cFv */ +void daNpcCoach_c::calcCoachMotion() { + // NONMATCHING + cXyz sp44 = mChCoach.field_0x5e0 - mChCoach.field_0x5ec; + mChCoach.field_0x5ec = mChCoach.field_0x5e0; + mChCoach.field_0x7a0 = mChCoach.field_0x79a; + mChCoach.field_0x5c8.y += gravity; + + if (mChCoach.field_0x5c8.y < mChCoach.field_0x784) { + mChCoach.field_0x5c8.y = mChCoach.field_0x784; + } + + mChCoach.field_0x5e0.y += mChCoach.field_0x5c8.y; + mChCoach.field_0x5c8.x = sp44.x; + mChCoach.field_0x5c8.z = sp44.z; + + setCoachCollision(); + + if (mChCoach.mBgc.ChkGroundLanding()) { + if (mChCoach.field_0x5c8.y < -20.0f) { + mChCoach.mSound.startSound(Z2SE_COACH_SHAKE, 0, -1); + } + + if (cM_rnd() < 0.5f) { + mChCoach.field_0x794 += attr().horiz_sway_range; + } else { + mChCoach.field_0x794 -= attr().horiz_sway_range; + } + + mChCoach.field_0x790 += attr().vert_swing_width; + mChCoach.field_0x5c8.y *= attr().jump_coeff; + } else if (mChCoach.mBgc.ChkGroundHit()) { + mChCoach.field_0x5c8.y = 0.0f; + } + + cXyz sp50; + mDoMtx_stack_c::copy(mChHarness.mHarnessModel->getAnmMtx(JNT_HARNESS_BS_LOC)); + mDoMtx_stack_c::multVecZero(&sp50); + sp50.y = mChHarness.field_0x6e0.y; + mChCoach.field_0x79a.x = cLib_targetAngleX(&sp50, &mChCoach.field_0x5e0); + mChCoach.field_0x79a.y = cLib_targetAngleY(&mChCoach.field_0x5e0, &sp50); + cLib_addCalcAngleS(&mChCoach.field_0x79a.z, getGroundSlope(&mChCoach.mBgc, mChCoach.field_0x79a.y - 0x4000), + 15, 0x200, 0x40); + + if (speedF > 0.0f) { + mDoMtx_stack_c::transS(sp50); + mDoMtx_stack_c::YrotM(mChCoach.field_0x79a.y); + mDoMtx_stack_c::XrotM(mChCoach.field_0x79a.x); + mDoMtx_stack_c::ZrotM(mChCoach.field_0x79a.z); + + sp50.set(0.0f, 0.0f, attr().field_0x10); + mDoMtx_stack_c::multVec(&sp50, &sp50); + mChCoach.field_0x5e0.x = sp50.x; + mChCoach.field_0x5e0.z = sp50.z; + + sp50.set(attr().field_0x18, 0.0f, attr().field_0x10); + mDoMtx_stack_c::multVec(&sp50, &mChCoach.field_0x7a8.field_0x0); + + sp50.set(-attr().field_0x18, 0.0f, attr().field_0x10); + mDoMtx_stack_c::multVec(&sp50, &mChCoach.field_0x7cc.field_0x0); + } + + mChCoach.field_0x788 -= mChCoach.field_0x5c8.absXZ(); + if (mChCoach.field_0x788 <= 0.0f) { + if (cM_rnd() < 0.5f) { + mChCoach.field_0x794 += attr().horiz_sway_range; + } else { + mChCoach.field_0x794 -= attr().horiz_sway_range; + } + + if (cM_rnd() < 0.5f) { + mChCoach.field_0x790 += attr().vert_swing_width; + } else { + mChCoach.field_0x790 -= attr().vert_swing_width; + } + + mChCoach.field_0x788 = attr().shake_dist + cM_rndF(attr().shake_dist); + } + + calcSpringF(&mChCoach.mCoachTrans, 0.0f, &mChCoach.field_0x790); + calcSpringS(&mChCoach.mCoachRot, 0, &mChCoach.field_0x794); + setCoachMtx(); + mChCoach.mSound.framework(0, 0); + calcRearWheelRotate(); + + if (attention_info.flags != 0) { + if (mChCoach.field_0x77c > 0) { + mChCoach.field_0x77c--; + } + + if (mChCoach.field_0x644.ChkTgHit() && mChCoach.field_0x77c == 0) { + mChCoach.mSound.startSound(Z2SE_COACH_HIT_WIND, 0, -1); + + field_0x24c4 = (field_0x24c4 / (attr().damage_durability / 20) - attr().damage_extinguish_level) * (attr().damage_durability / 20); + if (field_0x24c4 <= 0) { + field_0x24c4 = 0; + field_0x24c0 = 0; + + for (int i = 0; i < 5; i++) { + if (field_0x247c[i] != fpcM_ERROR_PROCESS_ID_e) { + fopAcM_delete(field_0x247c[i]); + field_0x247c[i] = fpcM_ERROR_PROCESS_ID_e; + } + } + } else { + mChCoach.field_0x77c = 20; + + for (int i = 0; i < 5; i++) { + if (field_0x247c[i] != fpcM_ERROR_PROCESS_ID_e) { + ((daCoachFire_c*)fpcM_SearchByID(field_0x247c[i]))->setNoHitTimer(); + } + } + } + } + } +} + +inline void daNpcCoach_c::setWheelSmoke(daNpcChWheel_c* i_wheel, dBgS_ObjAcch* i_bgc, dKy_tevstr_c* i_tevStr, csXyz* i_angle) { + f32 fVar1 = speedF / attr().max_speed; + f32 fVar2 = fVar1 * 2.0f; + s16 sVar1 = fVar1 * 15.0f; + s16 sVar2 = fVar1 * 128.0f; + + if (sVar1 != 0 && (u8)sVar2 != 0 && fVar2 != 0.0f && fVar1 != 0.0f && i_bgc->ChkGroundHit()) { + fopAcM_effSmokeSet2(i_wheel->field_0xc, i_wheel->field_0xc + 1, &i_wheel->field_0x0, + i_angle, 1.0f, i_tevStr); + + for (int i = 0; i < 2; i++) { + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_wheel->field_0xc[i]); + if (emitter != NULL) { + emitter->setRate(fVar1); + emitter->setLifeTime(sVar1); + emitter->setGlobalAlpha(sVar2); + emitter->setGlobalParticleScale(fVar2, fVar2); + } + } + } +} + +/* 809A0728-809A0DB8 0030C8 0690+00 1/1 0/0 0/0 .text calcRearWheelRotate__12daNpcCoach_cFv */ +void daNpcCoach_c::calcRearWheelRotate() { + // NONMATCHING + if (speedF != 0.0f) { + f32 fVar1 = mChCoach.field_0x5ec.absXZ(mChCoach.field_0x5e0); + f32 fVar2; + if (cLib_distanceAngleS(mChCoach.field_0x79a.y, cLib_targetAngleY(&mChCoach.field_0x5ec, &mChCoach.field_0x5e0)) < 0x4000) { + fVar2 = fVar1 / 439.823f; + } else { + fVar2 = -(fVar1 / 439.823f); + } + + int iVar1 = fVar2 * 65535.0f; + s16 sVar1 = (int)((mChHarness.field_0x706.y - mChHarness.field_0x700.y) / 65535.0f * 642.61536f / 439.823f * 65535.0f); + s16 sVar2 = sVar1 + (s16)iVar1; + sVar1 -= iVar1; + + if (sVar2 > 4500) { + sVar2 = 4500; + } else if (sVar2 < -4500) { + sVar2 = -4500; + } + + if (sVar1 > 4500) { + sVar1 = 4500; + } else if (sVar1 < -4500) { + sVar1 = -4500; + } + + mChCoach.field_0x7a8.mWheelRot.x += sVar2; + mChCoach.field_0x7cc.mWheelRot.x += sVar1; + + if (cLib_chaseS(&mChCoach.field_0x7a8.field_0x1c, mChCoach.field_0x7a8.field_0x1a, 16) != 0) { + mChCoach.field_0x7a8.field_0x1a = cM_rndF(attr().field_0x66); + } + + if (cLib_chaseS(&mChCoach.field_0x7cc.field_0x1c, mChCoach.field_0x7cc.field_0x1a, 16) != 0) { + mChCoach.field_0x7cc.field_0x1a = cM_rndF(attr().field_0x66); + } + + if (cLib_chaseS(&mChCoach.field_0x7a8.field_0x20, mChCoach.field_0x7a8.field_0x1e, 16) != 0) { + mChCoach.field_0x7a8.field_0x1e = cM_rndF(attr().field_0x68); + } + + if (cLib_chaseS(&mChCoach.field_0x7cc.field_0x20, mChCoach.field_0x7cc.field_0x1e, 16) != 0) { + mChCoach.field_0x7cc.field_0x1e = cM_rndF(attr().field_0x68); + } + + mChCoach.field_0x7a8.mWheelRot.y = mChCoach.field_0x7a8.field_0x1c * cM_ssin(mChCoach.field_0x7a8.mWheelRot.x); + mChCoach.field_0x7cc.mWheelRot.y = mChCoach.field_0x7cc.field_0x1c * cM_ssin(mChCoach.field_0x7cc.mWheelRot.x); + mChCoach.field_0x7a8.mWheelRot.z = mChCoach.field_0x7a8.field_0x20 * cM_ssin(mChCoach.field_0x7a8.mWheelRot.x); + mChCoach.field_0x7cc.mWheelRot.z = mChCoach.field_0x7cc.field_0x20 * cM_ssin(mChCoach.field_0x7cc.mWheelRot.x); + + setWheelSmoke(&mChCoach.field_0x7a8, &mChCoach.mBgc, &mChCoach.mTevStr, &mChCoach.field_0x79a); + setWheelSmoke(&mChCoach.field_0x7cc, &mChCoach.mBgc, &mChCoach.mTevStr, &mChCoach.field_0x79a); + } +} + +inline void daNpcCoach_c::setHarnessCollision() { + cXyz sp28(0.0f, 0.0f, 160.0f); + mDoMtx_stack_c::transS(mChHarness.field_0x6e0); + mDoMtx_stack_c::YrotM(mChHarness.field_0x700.y); + mDoMtx_stack_c::multVec(&sp28, &sp28); + mChHarness.field_0x564.SetC(sp28); + dComIfG_Ccsp()->Set(&mChHarness.field_0x564); + mChHarness.mBgc.CrrPos(dComIfG_Bgsp()); + + if (mChHarness.field_0x6e0.y - mChHarness.mBgc.GetGroundH() > 1500.0f) { + mChHarness.field_0x6fc = 0.0f; + } else { + mChHarness.field_0x6fc = attr().max_fall_speed; + } + + mChHarness.field_0x6a0->SetRoomId(dComIfG_Bgsp().GetRoomId(mChHarness.mBgc.m_gnd)); +} + +/* 809A0E00-809A1180 0037A0 0380+00 1/1 0/0 0/0 .text calcHarnessMotion__12daNpcCoach_cFv */ +void daNpcCoach_c::calcHarnessMotion() { + cXyz sp1c = mChHarness.field_0x6e0 - mChHarness.field_0x6ec; + mChHarness.field_0x6ec = mChHarness.field_0x6e0; + mChHarness.field_0x706 = mChHarness.field_0x700; + mChHarness.field_0x6d4.y += gravity; + + if (mChHarness.field_0x6d4.y < mChHarness.field_0x6fc) { + mChHarness.field_0x6d4.y = mChHarness.field_0x6fc; + } + + mChHarness.field_0x6e0.y += mChHarness.field_0x6d4.y; + mChHarness.field_0x6d4.x = sp1c.x; + mChHarness.field_0x6d4.z = sp1c.z; + + setHarnessCollision(); + + if (mChHarness.mBgc.ChkGroundLanding()) { + mChHarness.field_0x6d4.y *= attr().jump_coeff; + } else if (mChHarness.mBgc.ChkGroundHit()) { + mChHarness.field_0x6d4.y = 0.0f; + } + + mChHarness.field_0x700.x = cLib_targetAngleX(¤t.pos, &mChHarness.field_0x6e0); + mChHarness.field_0x700.y = cLib_targetAngleY(&mChHarness.field_0x6e0, ¤t.pos); + cLib_addCalcAngleS(&mChHarness.field_0x700.z, getGroundSlope(&mChHarness.mBgc, mChHarness.field_0x700.y - 0x4000), + 15, 0x200, 0x40); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(mChHarness.field_0x700.y); + mDoMtx_stack_c::XrotM(mChHarness.field_0x700.x); + mDoMtx_stack_c::ZrotM(mChHarness.field_0x700.z); + + if (speedF > 0.0f) { + cXyz sp28(0.0f, 0.0f, attr().field_0xc); + mDoMtx_stack_c::multVec(&sp28, &sp28); + mChHarness.field_0x6e0.x = sp28.x; + mChHarness.field_0x6e0.z = sp28.z; + + sp28.set(attr().field_0x14, 0.0f, attr().field_0xc); + mDoMtx_stack_c::multVec(&sp28, &mChHarness.field_0x70c.field_0x0); + + sp28.set(-attr().field_0x14, 0.0f, attr().field_0xc); + mDoMtx_stack_c::multVec(&sp28, &mChHarness.field_0x730.field_0x0); + } + + mChHarness.mHarnessModel->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), mChHarness.mMtx); + mChHarness.field_0x6a0->Move(); + mChHarness.mHarnessModel->calc(); + calcFrontWheelRotate(); +} + +/* 809A1180-809A1810 003B20 0690+00 1/1 0/0 0/0 .text calcFrontWheelRotate__12daNpcCoach_cFv */ +void daNpcCoach_c::calcFrontWheelRotate() { + // NONMATCHING + if (speedF != 0.0f) { + f32 fVar1 = mChHarness.field_0x6ec.absXZ(mChHarness.field_0x6e0); + f32 fVar2; + if (cLib_distanceAngleS(mChHarness.field_0x700.y, cLib_targetAngleY(&mChHarness.field_0x6ec, &mChHarness.field_0x6e0)) < 0x4000) { + fVar2 = fVar1 / 345.5751953125f; + } else { + fVar2 = -(fVar1 / 345.5751953125f); + } + + int iVar1 = fVar2 * 65535.0f; + s16 sVar1 = (int)((mChHarness.field_0x706.y - mChHarness.field_0x700.y) / 65535.0f * 556.8225f / 345.5752f * 65535.0f); + s16 sVar2 = (s16)sVar1 + (s16)iVar1; + sVar1 -= iVar1; + + if (sVar2 > 4500) { + sVar2 = 4500; + } else if (sVar2 < -4500) { + sVar2 = -4500; + } + + if (sVar1 > 4500) { + sVar1 = 4500; + } else if (sVar1 < -4500) { + sVar1 = -4500; + } + + mChHarness.field_0x70c.mWheelRot.x += sVar2; + mChHarness.field_0x730.mWheelRot.x += sVar1; + + if (cLib_chaseS(&mChHarness.field_0x70c.field_0x1c, mChHarness.field_0x70c.field_0x1a, 16) != 0) { + mChHarness.field_0x70c.field_0x1a = cM_rndF(attr().field_0x66); + } + if (cLib_chaseS(&mChHarness.field_0x730.field_0x1c, mChHarness.field_0x730.field_0x1a, 16) != 0) { + mChHarness.field_0x730.field_0x1a = cM_rndF(attr().field_0x66); + } + + if (cLib_chaseS(&mChHarness.field_0x70c.field_0x20, mChHarness.field_0x70c.field_0x1e, 16) != 0) { + mChHarness.field_0x70c.field_0x1e = cM_rndF(attr().field_0x68); + } + if (cLib_chaseS(&mChHarness.field_0x730.field_0x20, mChHarness.field_0x730.field_0x1e, 16) != 0) { + mChHarness.field_0x730.field_0x1e = cM_rndF(attr().field_0x68); + } + + mChHarness.field_0x70c.mWheelRot.y = mChHarness.field_0x70c.field_0x1c * cM_ssin(mChHarness.field_0x70c.mWheelRot.x); + mChHarness.field_0x730.mWheelRot.y = mChHarness.field_0x730.field_0x1c * cM_ssin(mChHarness.field_0x730.mWheelRot.x); + mChHarness.field_0x70c.mWheelRot.z = mChHarness.field_0x70c.field_0x20 * cM_ssin(mChHarness.field_0x70c.mWheelRot.x); + mChHarness.field_0x730.mWheelRot.z = mChHarness.field_0x730.field_0x20 * cM_ssin(mChHarness.field_0x730.mWheelRot.x); + + setWheelSmoke(&mChHarness.field_0x70c, &mChHarness.mBgc, &mChHarness.mTevStr, &mChHarness.field_0x700); + setWheelSmoke(&mChHarness.field_0x730, &mChHarness.mBgc, &mChHarness.mTevStr, &mChHarness.field_0x700); + } +} + +inline f32 daNpcCoach_c::calcMaxSpeed() { + if (!mChPath.isPath()) { + return mChHorse.mAimSpeed; + } + + if (field_0x2550 > 0) { + int iVar1 = field_0x2550 - 1; + field_0x2550 = iVar1; + if (iVar1 >= 0) { + return attr().deceleration_speed; + } + } + + cXyz sp38; + mChPath.getTargetPoint(sp38); + f32 fVar1 = -cLib_distanceAngleS(current.angle.y, cLib_targetAngleY(¤t.pos, &sp38)) / 16384.0f + 1.0f; + if (fVar1 < 0.0f) { + fVar1 = 0.0f; + } + + return fVar1 * mChHorse.mAimSpeed; +} + +inline void daNpcCoach_c::setHorseCollision() { + f32 fVar1 = cM_ssin(shape_angle.y); + f32 fVar2 = cM_scos(shape_angle.y); + cXyz sp58(current.pos.x + (fVar1 * 135.0f), current.pos.y, current.pos.z + (fVar2 * 135.0f)); + fVar1 *= 83.0f; + fVar2 *= 83.0f; + + for (int i = 0; i < 4; i++) { + mChHorse.field_0x1f0[i].SetC(sp58); + dComIfG_Ccsp()->Set(&mChHorse.field_0x1f0[i]); + sp58.x -= fVar1; + sp58.z -= fVar2; + } + + mChHorse.mBgc.CrrPos(dComIfG_Bgsp()); + + if (current.pos.y - mChHorse.mBgc.GetGroundH() > 1500.0f) { + maxFallSpeed = 0.0f; + } else { + maxFallSpeed = attr().max_fall_speed; + } +} + +inline void daNpcCoach_c::setHorseMtx() { + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mChHorse.mpModelMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + mDoMtx_stack_c::copy(mChHorse.mpModelMorf->getModel()->getAnmMtx(JNT_HORSE_MOUTH2)); + mDoMtx_stack_c::multVecZero(&mChHorse.field_0x770); +} + +/* 809A1810-809A1BE0 0041B0 03D0+00 1/1 0/0 0/0 .text calcHorseMotion__12daNpcCoach_cFv */ +void daNpcCoach_c::calcHorseMotion() { + // NONMATCHING + f32 fVar1 = calcMaxSpeed(); + if (mChHorse.field_0x784 < fVar1) { + cLib_addCalc(&mChHorse.field_0x784, fVar1, 0.07f, 0.2f, 0.01f); + } else { + cLib_addCalc(&mChHorse.field_0x784, fVar1, 0.1f, 0.8f, 0.01f); + } + + if (maxFallSpeed == 0.0f) { + mChHorse.field_0x784 = 0.0f; + } else { + mChCoach.mSound.startWheelSound(mChHorse.field_0x784); + } + + shape_angle.y = current.angle.y; + s16 sVar1 = shape_angle.y - mChHarness.field_0x700.y; + if (abs(sVar1) > attr().horse_rot_limit) { + if (sVar1 > 0) { + shape_angle.y = mChHarness.field_0x700.y + attr().horse_rot_limit; + } else { + shape_angle.y = mChHarness.field_0x700.y - attr().horse_rot_limit; + } + } + + cLib_addCalcAngleS(&shape_angle.x, getGroundSlope(&mChHorse.mBgc, shape_angle.y), 15, 0x200, 0x40); + speedF = mChHorse.field_0x784 * cM_scos(shape_angle.x); + calcHorsePath(); + fopAcM_posMoveF(this, NULL); + setHorseCollision(); + setHorseMtx(); + calcHorseAnm(); +} + +inline void daNpcCoach_c::setHorseAnm(int i_index) { + if (mChHorse.field_0x788 != i_index) { + mChHorse.field_0x788 = i_index; + + J3DAnmTransform* anm = l_horseAnmParam[i_index].field_0x0 >= 0 ? + (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, l_horseAnmParam[i_index].field_0x0) : NULL; + J3DAnmTransform* anm_2 = l_horseAnmParam[i_index].field_0xc >= 0 ? + (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, l_horseAnmParam[i_index].field_0xc) : NULL; + + f32 frame = mChHorse.mpModelMorf->getFrame(); + f32 playSpeed = mChHorse.mpModelMorf->getPlaySpeed(); + mChHorse.mpModelMorf->setAnm(anm, anm_2, 0.0f, 2, 8.0f, 1.0f, 0.0f, -1.0f); + mChHorse.mpModelMorf->setFrame(frame + playSpeed); + } +} + +inline void daNpcCoach_c::eyeWink() { + mChHorse.field_0x790--; + + if (mChHorse.field_0x790 < 0) { + mChHorse.mpBtpAnm->init(mChHorse.mpModelMorf->getModel()->getModelData(), (J3DAnmTexPattern*)dComIfG_getObjectRes(l_arcName, BTP_HU_EYE), + 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1); + mChHorse.field_0x790 = cM_rnd() * 90.0f + 15.0f; + } +} + +/* 809A1BE0-809A2740 004580 0B60+00 1/1 0/0 0/0 .text calcHorseAnm__12daNpcCoach_cFv */ +void daNpcCoach_c::calcHorseAnm() { + // NONMATCHING + if (mChPath.isPath()) { + cXyz target_point; + mChPath.getTargetPoint(target_point); + cLib_distanceAngleS(shape_angle.y, mChHarness.field_0x700.y); + cLib_distanceAngleS(current.angle.y, cLib_targetAngleY(¤t.pos, &target_point)); + } + + f32 fVar1 = 0.0f; + f32 fVar2 = attr().max_speed; + + switch (mChHorse.field_0x788) { + case 0: + fVar1 = attr().field_0x28[mChHorse.field_0x788]; + + if (speedF > fVar1) { + setHorseAnm(1); + } + break; + + case 1: + fVar1 = attr().damp_coeff[mChHorse.field_0x788]; + fVar2 = attr().field_0x28[mChHorse.field_0x788]; + + if (speedF <= fVar1) { + setHorseAnm(0); + } else if (speedF > fVar2) { + setHorseAnm(2); + } + break; + + case 2: + fVar1 = attr().damp_coeff[mChHorse.field_0x788]; + fVar2 = attr().field_0x28[mChHorse.field_0x788]; + + if (speedF <= fVar1) { + setHorseAnm(1); + } else if (speedF > fVar2) { + setHorseAnm(3); + } + break; + + case 3: + fVar1 = attr().damp_coeff[mChHorse.field_0x788]; + fVar2 = attr().field_0x28[mChHorse.field_0x788]; + + if (speedF <= fVar1) { + setHorseAnm(2); + } else if (speedF > fVar2) { + setHorseAnm(4); + } + break; + + case 4: + fVar1 = attr().damp_coeff[mChHorse.field_0x788]; + + if (speedF <= fVar1) { + setHorseAnm(3); + } + break; + + default: + JUT_ASSERT(1521, 0); + break; + } + + if (mChHorse.field_0x788 < 4) { + fVar2 = speedF / fVar2; + if (fVar2 > 1.0f) { + fVar2 = 1.0f; + } + + mChHorse.mpModelMorf->setAnmRate(fVar2); + mChHorse.mpModelMorf->setPlaySpeed(fVar2 * (l_horseAnmParam[mChHorse.field_0x788].field_0x14 - l_horseAnmParam[mChHorse.field_0x788].field_0x8) + + l_horseAnmParam[mChHorse.field_0x788].field_0x8); + } else { + mChHorse.mpModelMorf->setAnmRate(0.0f); + mChHorse.mpModelMorf->setPlaySpeed(l_horseAnmParam[mChHorse.field_0x788].field_0x8 * (speedF / fVar1)); + } + + mChHorse.mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mChHorse.mpBtpAnm->play(); + + if (mChHorse.field_0x78c != 0) { + mChHorse.mpBckAnm->play(); + + if (mChHorse.mpBckAnm->isStop()) { + mChHorse.field_0x78c = 0; + } else { + mChHorse.mpBckAnm->getBckAnm()->setFrame(mChHorse.mpBckAnm->getFrame()); + } + } + + mChHorse.mpModelMorf->modelCalc(); + eyeWink(); +} + +inline int daNpcChPath_c::checkNearAttackPoint() { + int iVar1 = 5; + int iVar2 = mPntIndex; + int iVar3 = iVar2 - 2; + + if (iVar3 < 0) { + if (isClose()) { + iVar3 = mpPath->m_num + iVar3; + } else { + iVar1 = iVar2 + 5; + iVar3 = 0; + } + } + + do { + if (mpPath->m_points[iVar3].mArg2 == 1) break; + + iVar3++; + if (iVar3 >= mpPath->m_num) { + if (isClose()) { + iVar3 = 0; + } else { + return -1; + } + } + iVar1--; + } while (iVar1 >= 1); + + return mpPath->m_points[iVar3].mArg1; +} + +inline BOOL daNpcCoach_c::checkKargoAttack() { + e_kr_class* kargo_p = (e_kr_class*)fpcM_Search(s_sub, this); + if (kargo_p != NULL && kargo_p->checkBombDrop() != 0) { + return TRUE; + } + + return FALSE; +} + +inline BOOL daNpcCoach_c::setExpressionAnm(int param_1, bool param_2) { + if (!param_2 && mChHorse.field_0x78c != 0) { + return FALSE; + } + + int bckIdx, i_attr; + if ((param_1 == 2 || param_1 > 1) || param_1 < 1) { + JUT_ASSERT(2635, 0); + } else { + bckIdx = BCK_HU_LASH; + i_attr = J3DFrameCtrl::EMode_NONE; + } + + if (mChHorse.mpBckAnm->init((J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, bckIdx), 1, i_attr, 1.0f, 0, -1, true)) { + mChHorse.field_0x78c = param_1; + return TRUE; + } + + return FALSE; +} + +inline bool daNpcChPath_c::checkPoint(cXyz* param_1, f32 param_2) { + f32 fVar1 = param_1->absXZ(dPath_GetPnt(mpPath, mPntIndex)->m_position); + + if (field_0x4 != NULL) { + field_0x8 -= param_2; + } + + if ((fVar1 < param_2 || fVar1 < 10.0f) || field_0x8 <= 0.0f) { + return TRUE; + } + + return FALSE; +} + +inline bool daNpcChPath_c::setNextTarget() { + bool rv = setNextPoint(); + if (rv && field_0x4 != NULL) { + cXyz target_point; + getTargetPoint(target_point); + field_0x8 = field_0x4->abs(target_point); + } + + return rv; +} + +inline void daNpcCoach_c::resetOverAngle() { + if (shape_angle.y != current.angle.y && mChPath.isPath()) { + cXyz target_point; + mChPath.getTargetPoint(target_point); + s16 sVar1 = cLib_targetAngleY(¤t.pos, &target_point); + s16 sVar2 = current.angle.y - shape_angle.y; + s16 sVar3 = sVar1 - shape_angle.y; + + if (sVar2 > 0 && sVar3 <= 0) { + current.angle.y = shape_angle.y; + } else if (sVar2 < 0 && sVar3 >= 0) { + current.angle.y = shape_angle.y; + } + } +} + +/* 809A2740-809A2E98 0050E0 0758+00 1/1 0/0 0/0 .text calcHorsePath__12daNpcCoach_cFv */ +void daNpcCoach_c::calcHorsePath() { + // NONMATCHING + if (!mChPath.isPath() || field_0x24c4 >= attr().damage_durability) { + return; + } + + s8 arg0 = mChPath.getArg0(); + if (arg0 >= 0) { + mChHorse.mAimSpeed = arg0; + } + + if (mChHorse.mAimSpeed > attr().max_speed) { + mChHorse.mAimSpeed = attr().max_speed; + } + + cXyz target_point; + mChPath.getTargetPoint(target_point); + cLib_addCalcAngleS(¤t.angle.y, cLib_targetAngleY(¤t.pos, &target_point), 15, 0x200, 0x40); + + s8 arg1 = mChPath.getArg1(); + s8 arg2 = mChPath.getArg2(); + switch (arg2) { + case -1: + if (arg1 != -1) { + changeAtherPath(arg1, current.pos, shape_angle); + } + break; + + case 0: + if (!dComIfGs_isSaveDunSwitch(mChPath.getArg3()) || field_0x24c4 >= attr().damage_durability) { + mChHorse.mAimSpeed = 0.0f; + } else { + changeAtherPath(arg1, current.pos, shape_angle); + } + break; + + case 2: + dComIfGs_onSaveDunSwitch(mChPath.getArg3()); + break; + } + + arg1 = mChPath.checkNearAttackPoint(); + if (arg1 != -1 && checkKargoAttack()) { + changeAtherPath(arg1, current.pos, shape_angle); + setExpressionAnm(1, true); + + mChHorse.mSound.startCreatureVoice(Z2SE_HS_V_COACH_CRY, -1); + mChCoach.mSound.startSound(Z2SE_COACH_SHAKE, 0, -1); + + f32 fVar1 = cM_rnd() < 0.5f ? 4096.0f : -4096.0f; + mChCoach.field_0x794 += fVar1; + mChCoach.field_0x790 -= 30.0f; + field_0x2550 = attr().deceleration_time; + } + + if (mChPath.checkPoint(¤t.pos, speedF)) { + mChPath.setNextTarget(); + resetOverAngle(); + } +} + +/* 809A2E98-809A2EB8 005838 0020+00 1/0 0/0 0/0 .text daNpcCoach_Draw__FP12daNpcCoach_c */ +static int daNpcCoach_Draw(daNpcCoach_c* i_this) { + return i_this->draw(); +} + +inline void daNpcCoach_c::reinsDraw() { + daNpcChReins_c* reins = &mChHorse.mChReins; + + static GXColor l_color = { + 0x14, + 0x0F, + 0x00, + 0xFF, + }; + if (reins->field_0x16c > 1) { + reins->field_0x0.update(7, l_color, &tevStr); + dComIfGd_set3DlineMat(&reins->field_0x0); + reins->field_0x3c.update(2, l_color, &tevStr); + dComIfGd_set3DlineMat(&reins->field_0x3c); + } +} + +/* 809A2EB8-809A3300 005858 0448+00 1/1 0/0 0/0 .text draw__12daNpcCoach_cFv */ +int daNpcCoach_c::draw() { + cXyz sp48; + + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mChHorse.mpModelMorf->getModel(), &tevStr); + mChHorse.mpBtpAnm->entry(mChHorse.mpModelMorf->getModel()->getModelData()); + mChHorse.mpModelMorf->entryDL(); + mChHorse.mpBtpAnm->remove(mChHorse.mpModelMorf->getModel()->getModelData()); + sp48.set(current.pos.x, current.pos.y + 150.0f, current.pos.z); + tevStr.mLightPosWorld = current.pos; + tevStr.mLightPosWorld.y += 1000.0f; + mChHorse.mShadowKey = dComIfGd_setShadow(mChHorse.mShadowKey, 0, mChHorse.mpModelMorf->getModel(), &sp48, 1000.0f, 100.0f, + current.pos.y, mChHorse.mBgc.GetGroundH(), mChHorse.mBgc.m_gnd, &tevStr, 0, + 1.0f, dDlst_shadowControl_c::getSimpleTex()); + + g_env_light.settingTevStruct(0, &mChHarness.field_0x6e0, &mChHarness.mTevStr); + g_env_light.setLightTevColorType_MAJI(mChHarness.mHarnessModel, &mChHarness.mTevStr); + mDoExt_modelUpdateDL(mChHarness.mHarnessModel); + sp48.set(mChHarness.field_0x6e0.x, mChHarness.field_0x6e0.y + 100.0f, mChHarness.field_0x6e0.z); + mChHarness.mTevStr.mLightPosWorld = mChHarness.field_0x6e0; + mChHarness.mTevStr.mLightPosWorld.y += 1000.0f; + mChHarness.mShadowKey = dComIfGd_setShadow(mChHarness.mShadowKey, 0, mChHarness.mHarnessModel, &sp48, 1400.0f, 100.0f, + mChHarness.field_0x6e0.y, mChHarness.mBgc.GetGroundH(), mChHarness.mBgc.m_gnd, + &mChHarness.mTevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + + g_env_light.settingTevStruct(0, &mChCoach.field_0x5e0, &mChCoach.mTevStr); + g_env_light.setLightTevColorType_MAJI(mChCoach.mCoachModel, &mChCoach.mTevStr); + + J3DModelData* modelData = mChCoach.mCoachModel->getModelData(); + for (u16 i = 0; i < 2; i++) { + J3DMaterial* matNodeP = modelData->getMaterialNodePointer(i); + + if (i == 0) { + matNodeP->getTevKColor(1)->a = field_0x1dc7; + } else if (i == 1) { + matNodeP->getTevKColor(1)->a = field_0x1dc5; + matNodeP->getTevKColor(2)->a = field_0x1dc6; + } + } + mDoExt_modelUpdateDL(mChCoach.mCoachModel); + + sp48.set(mChCoach.field_0x5e0.x, mChCoach.field_0x5e0.y + 100.0f, mChCoach.field_0x5e0.z); + mChHarness.mTevStr.mLightPosWorld = mChCoach.field_0x5e0; + mChHarness.mTevStr.mLightPosWorld.y += 1000.0f; + mChCoach.mShadowKey = dComIfGd_setShadow(mChCoach.mShadowKey, 0, mChCoach.mCoachModel, &sp48, 1400.0f, 100.0f, + mChCoach.field_0x5e0.y, mChCoach.mBgc.GetGroundH(), mChCoach.mBgc.m_gnd, + &mChHarness.mTevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + + g_env_light.settingTevStruct(0, &mChYelia.field_0x694, &mChYelia.mTevStr); + g_env_light.setLightTevColorType_MAJI(mChYelia.mpModelMorf->getModel(), &mChYelia.mTevStr); + mDoExt_modelUpdateDL(mChYelia.mpModelMorf->getModel()); + + reinsDraw(); + + return 1; +} + +/* 809A3300-809A3308 005CA0 0008+00 1/0 0/0 0/0 .text daNpcCoach_IsDelete__FP12daNpcCoach_c */ +static int daNpcCoach_IsDelete(daNpcCoach_c* i_this) { + return 1; +} + +/* 809A3308-809A3330 005CA8 0028+00 1/0 0/0 0/0 .text daNpcCoach_Delete__FP12daNpcCoach_c */ +static int daNpcCoach_Delete(daNpcCoach_c* i_this) { + i_this->~daNpcCoach_c(); + return 1; +} + +/* 809A3330-809A3570 005CD0 0240+00 1/1 0/0 0/0 .text __dt__12daNpcCoach_cFv */ +daNpcCoach_c::~daNpcCoach_c() { + if (mChHarness.field_0x6a0 != NULL && mChHarness.field_0x6a0->ChkUsed()) { + dComIfG_Bgsp().Release(mChHarness.field_0x6a0); + } + + if (mChCoach.field_0x564 != NULL && mChCoach.field_0x564->ChkUsed()) { + dComIfG_Bgsp().Release(mChCoach.field_0x564); + } + + fopAcM_delete(parentActorID); + fopAcM_delete(field_0x2554); + dComIfG_resDelete(&mPhase, l_arcName); + dComIfGs_offTbox(1); +} + +/* 809A3570-809A3674 005F10 0104+00 1/1 0/0 0/0 .text __dt__16daNpcChHarness_cFv */ +daNpcChHarness_c::~daNpcChHarness_c() {} + +/* 809A3674-809A3798 006014 0124+00 1/1 0/0 0/0 .text __dt__14daNpcChCoach_cFv */ +daNpcChCoach_c::~daNpcChCoach_c() {} + +/* 809A3864-809A3884 006204 0020+00 1/0 0/0 0/0 .text daNpcCoach_Create__FP10fopAc_ac_c */ +static int daNpcCoach_Create(fopAc_ac_c* a_this) { + daNpcCoach_c* i_this = (daNpcCoach_c*)a_this; + return i_this->create(); +} + +/* 809A3884-809A3928 006224 00A4+00 1/1 0/0 0/0 .text create__12daNpcCoach_cFv */ +cPhs__Step daNpcCoach_c::create() { + fopAcM_SetupActor(this, daNpcCoach_c); + + cPhs__Step phase = (cPhs__Step)dComIfG_resLoad(&mPhase, l_arcName); + if (phase == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, createSolidHeap, 0x7D60)) { + return cPhs_ERROR_e; + } + + create_init(); + } + + return phase; +} + +/* 809A3928-809A4078 0062C8 0750+00 1/1 0/0 0/0 .text create_init__12daNpcCoach_cFv */ +void daNpcCoach_c::create_init() { + // NONMATCHING + if (strcmp(dComIfGp_getStartStageName(), "F_SP123") == 0) { + fopAcM_OnStatus(this, fopAcM_STATUS_UNK_004000); + } + + fopAcM_setStageLayer(this); + fopAcM_setCullSizeBox(this, -180.0f, 0.0f, -750.0f, 180.0f, 450.0f, 200.0f); + attention_info.flags = 0; + attention_info.distances[fopAc_attn_LOCK_e] = 72; + attention_info.distances[fopAc_attn_CHECK_e] = 34; + gravity = attr().gravity; + maxFallSpeed = attr().max_fall_speed; + mChHarness.field_0x6fc = attr().max_fall_speed; + mChCoach.field_0x784 = attr().max_fall_speed; + + mChHorse.field_0x788 = -1; + setHorseAnm(0); + mChHorse.mSound.init(¤t.pos, &mChHorse.field_0x770, 6, 1); + mChCoach.mSound.init(&mChCoach.field_0x5e0, 3); + mChYelia.mSound.init(&mChYelia.field_0x694, &mChYelia.field_0x694, 3, 1); + + dKy_tevstr_init(&mChHarness.mTevStr, fopAcM_GetRoomNo(this), 0xFF); + dKy_tevstr_init(&mChCoach.mTevStr, fopAcM_GetRoomNo(this), 0xFF); + dKy_tevstr_init(&mChYelia.mTevStr, fopAcM_GetRoomNo(this), 0xFF); + field_0x1dc5 = 0xFF; + field_0x1dc6 = 0x7D; + + initCoachBlazing(); + initCoachPosition(current.pos, shape_angle); + initBaseMtx(); + initCollision(); + + if (getPathID() != 0xFF) { + mPathID = getPathID(); + mChPath.setPath(getPathID(), fopAcM_GetRoomNo(this), ¤t.pos, true); + + if (!mChPath.isPath()) { + return; + } + + if (mChPath.getArg0() >= 0) { + mChHorse.mAimSpeed = mChPath.getArg0(); + } + + if (mChHorse.mAimSpeed > attr().max_speed) { + mChHorse.mAimSpeed = attr().max_speed; + } + + cXyz target_point; + mChPath.getTargetPoint(target_point); + if (cLib_distanceAngleS(shape_angle.y, cLib_targetAngleY(¤t.pos, &target_point)) >= 0x4000) { + mChPath.setNextPoint(); + mChPath.getTargetPoint(target_point); + + if (cLib_distanceAngleS(shape_angle.y, cLib_targetAngleY(¤t.pos, &target_point)) >= 0x4000) { + mChPath.setPrevPoint(); + } + } + } + + for (int i = 0; i < 5; i++) { + field_0x247c[i] = fpcM_ERROR_PROCESS_ID_e; + } + + cXyz i_pos; + csXyz i_angle; + + mDoMtx_stack_c::copy(mChCoach.mCoachModel->getAnmMtx(JNT_COACH_TERUMA_LOC)); + mDoMtx_stack_c::multVecZero(&i_pos); + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &i_angle); + parentActorID = fopAcM_createChild(PROC_NPC_THEB, fopAcM_GetID(this), getMessageNo(), &i_pos, fopAcM_GetRoomNo(this), &i_angle, NULL, -1, NULL); + field_0x2554 = fopAcM_createChild(PROC_COACH2D, fopAcM_GetID(this), 0, ¤t.pos, fopAcM_GetRoomNo(this), NULL, NULL, -1, NULL); + field_0x2558 = 0; + field_0x2559 = 0; + + if (strcmp(dComIfGp_getStartStageName(), "F_SP123") != 0) { + dComIfGs_onTbox(1); + } +} + +/* 809A4078-809A43A0 006A18 0328+00 1/1 0/0 0/0 .text initCollision__12daNpcCoach_cFv */ +void daNpcCoach_c::initCollision() { + // NONMATCHING + mAcchCir.SetWall(45.0f, 50.0f); + mChHorse.mBgc.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), + fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); + mChHorse.mBgc.SetRoofNone(); + mChHorse.mBgc.SetWaterNone(); + mChHorse.mBgc.SetWallNone(); + mChHorse.mBgc.OnLineCheckNone(); + mChHorse.mBgc.CrrPos(dComIfG_Bgsp()); + mStts.Init(0xFF, 0xFF, this); + + for (int i = 0; i < 4; i++) { + mChHorse.field_0x1f0[i].Set(ccCylSrc); + mChHorse.field_0x1f0[i].SetStts(&mStts); + mChHorse.field_0x1f0[i].SetR(45.0f); + mChHorse.field_0x1f0[i].SetH(250.0f); + } + + mChHarness.mBgc.Set(&mChHarness.field_0x6e0, &mChHarness.field_0x6ec, this, 1, &mAcchCir, &mChHarness.field_0x6d4, &mChHarness.field_0x700, &mChHarness.field_0x700); + mChHarness.mBgc.SetRoofNone(); + mChHarness.mBgc.SetWaterNone(); + mChHarness.mBgc.SetWallNone(); + mChHarness.mBgc.OnLineCheckNone(); + mChHarness.mBgc.OffClrSpeedY(); + mChHarness.mBgc.SetGroundCheckOffset(150.0f); + mChHarness.mBgc.CrrPos(dComIfG_Bgsp()); + mChHarness.field_0x564.Set(ccCylSrc); + mChHarness.field_0x564.SetStts(&mStts); + mChHarness.field_0x564.SetR(85.0f); + mChHarness.field_0x564.SetH(120.0f); + mChHarness.field_0x6a0->SetCrrFunc(dBgS_MoveBGProc_TypicalRotY); + dComIfG_Bgsp().Regist(mChHarness.field_0x6a0, this); + + mChCoach.mBgc.Set(&mChCoach.field_0x5e0, &mChCoach.field_0x5ec, this, 1, &mAcchCir, &mChCoach.field_0x5c8, &mChCoach.field_0x79a, &mChCoach.field_0x79a); + mChCoach.mBgc.SetRoofNone(); + mChCoach.mBgc.SetWaterNone(); + mChCoach.mBgc.SetWallNone(); + mChCoach.mBgc.OnLineCheckNone(); + mChCoach.mBgc.OffClrSpeedY(); + mChCoach.mBgc.SetGroundCheckOffset(150.0f); + mChCoach.mBgc.CrrPos(dComIfG_Bgsp()); + mChCoach.field_0x564->SetCrrFunc(dBgS_MoveBGProc_TypicalRotY); + mChCoach.field_0x564->SetArrowStickCallback(arrowStickCallBack); + dComIfG_Bgsp().Regist(mChCoach.field_0x564, this); + mChCoach.field_0x644.Set(ccSphSrc); + mChCoach.field_0x644.SetStts(&mStts); + mChCoach.field_0x644.SetC(eyePos); + mChCoach.field_0x644.SetR(50.0f); + + for (int i = 0; i < 2; i++) { + mChYelia.field_0x41c[i].Set(ccCylSrc); + mChYelia.field_0x41c[i].SetStts(&mStts); + mChYelia.field_0x41c[i].SetR(45.0f); + + f32 h = i == 0 ? 100.0f : 50.0f; + mChYelia.field_0x41c[i].SetH(h); + } +} + +/* 809A43A0-809A43DC 006D40 003C+00 1/1 0/0 0/0 .text initBaseMtx__12daNpcCoach_cFv */ +void daNpcCoach_c::initBaseMtx() { + setBaseMtx(); + fopAcM_SetMtx(this, mChHorse.mpModelMorf->getModel()->getBaseTRMtx()); +} + +inline void daNpcCoach_c::setHarnessMtx() { + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(mChHarness.field_0x700.y); + mDoMtx_stack_c::XrotM(mChHarness.field_0x700.x); + mDoMtx_stack_c::ZrotM(mChHarness.field_0x700.z); + mChHarness.mHarnessModel->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), mChHarness.mMtx); + mChHarness.field_0x6a0->Move(); + mChHarness.mHarnessModel->calc(); +} + +/* 809A43DC-809A46C4 006D7C 02E8+00 1/1 0/0 0/0 .text setBaseMtx__12daNpcCoach_cFv */ +void daNpcCoach_c::setBaseMtx() { + setHorseMtx(); + setHarnessMtx(); + setCoachMtx(); + setDriverMtx(); + setYeliaMtx(); +} + +/* 809A46C4-809A48A8 007064 01E4+00 1/1 0/0 0/0 .text initCoachBlazing__12daNpcCoach_cFv */ +void daNpcCoach_c::initCoachBlazing() { + cXyz sp28; + + mDoMtx_stack_c::copy(mChCoach.mCoachModel->getAnmMtx(JNT_COACH_BODY)); + mDoMtx_stack_c::multVecZero(&sp28); + + mChCoach.field_0x5f8[0] = dComIfGp_particle_set(0x85F0, &sp28, &mChCoach.field_0x79a, NULL); + if (mChCoach.field_0x5f8[0] != NULL) { + mChCoach.field_0x5f8[0]->setGlobalRTMatrix(mChCoach.mCoachModel->getAnmMtx(JNT_COACH_BODY)); + mChCoach.field_0x5f8[0]->setGlobalAlpha(0); + mChCoach.field_0x5f8[0]->setRate(0.0f); + mChCoach.field_0x5f8[0]->setParticleCallBackPtr(dPa_control_c::getParticleTracePCB()); + } + + mChCoach.field_0x5f8[1] = dComIfGp_particle_set(0x85EF, &sp28, &mChCoach.field_0x79a, NULL); + if (mChCoach.field_0x5f8[1] != NULL) { + mChCoach.field_0x5f8[1]->setGlobalRTMatrix(mChCoach.mCoachModel->getAnmMtx(JNT_COACH_BODY)); + mChCoach.field_0x5f8[1]->setGlobalAlpha(0); + mChCoach.field_0x5f8[1]->setRate(0.0f); + mChCoach.field_0x5f8[1]->setParticleCallBackPtr(dPa_control_c::getParticleTracePCB()); + } + + for (int i = 2; i < 10; i++) { + mChCoach.field_0x5f8[i] = NULL; + } + + mCoachBlazing = false; +} + +/* 809A48A8-809A4B9C 007248 02F4+00 1/1 0/0 0/0 .text __ct__12daNpcCoach_cFv */ +daNpcCoach_c::daNpcCoach_c() {} + /* 809A51B0-809A51D0 -00001 0020+00 1/0 0/0 0/0 .data l_daNpcCoach_Method */ static actor_method_class l_daNpcCoach_Method = { - (process_method_func)daNpcCoach_Create__FP10fopAc_ac_c, - (process_method_func)daNpcCoach_Delete__FP12daNpcCoach_c, - (process_method_func)daNpcCoach_Execute__FP12daNpcCoach_c, - (process_method_func)daNpcCoach_IsDelete__FP12daNpcCoach_c, - (process_method_func)daNpcCoach_Draw__FP12daNpcCoach_c, + (process_method_func)daNpcCoach_Create, + (process_method_func)daNpcCoach_Delete, + (process_method_func)daNpcCoach_Execute, + (process_method_func)daNpcCoach_IsDelete, + (process_method_func)daNpcCoach_Draw, }; /* 809A51D0-809A5200 -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_COACH */ @@ -496,757 +2211,3 @@ extern actor_process_profile_definition g_profile_NPC_COACH = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 809A5200-809A5214 0000D0 0014+00 1/1 0/0 0/0 .data __vt__18mDoExt_3DlineMat_c */ -SECTION_DATA extern void* __vt__18mDoExt_3DlineMat_c[5] = { - (void*)NULL /* RTTI */, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, -}; - -/* 809A5214-809A5220 0000E4 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 809A5220-809A522C 0000F0 000C+00 6/6 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 809A522C-809A5238 0000FC 000C+00 5/5 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 809A5238-809A525C 000108 0024+00 5/5 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_809A4EC0, - (void*)NULL, - (void*)NULL, - (void*)func_809A4EB8, -}; - -/* 809A525C-809A5268 00012C 000C+00 2/2 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; - -/* 809A5268-809A5274 000138 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 809A5274-809A5280 000144 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 809A5280-809A528C 000150 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGPla */ -SECTION_DATA extern void* __vt__8cM3dGPla[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGPlaFv, -}; - -/* 809A528C-809A5298 00015C 000C+00 2/2 0/0 0/0 .data __vt__12J3DFrameCtrl */ -SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12J3DFrameCtrlFv, -}; - -/* 8099E4C0-8099EAD8 000E60 0618+00 1/1 0/0 0/0 .text createHeap__12daNpcCoach_cFv */ -void daNpcCoach_c::createHeap() { - // NONMATCHING -} - -/* 8099EAD8-8099EB20 001478 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ -// J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" void __dt__12J3DFrameCtrlFv() { - // NONMATCHING -} - -/* 8099EB20-8099EB40 0014C0 0020+00 1/0 0/0 0/0 .text daNpcCoach_Execute__FP12daNpcCoach_c */ -static void daNpcCoach_Execute(daNpcCoach_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A5030-809A5034 000160 0004+00 0/1 0/0 0/0 .rodata @5133 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_5133 = 0x000000FF; -COMPILER_STRIP_GATE(0x809A5030, &lit_5133); -#pragma pop - -/* 809A5034-809A5038 000164 0004+00 0/5 0/0 0/0 .rodata @5250 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5250 = 15.0f; -COMPILER_STRIP_GATE(0x809A5034, &lit_5250); -#pragma pop - -/* 809A5038-809A503C 000168 0004+00 0/3 0/0 0/0 .rodata @5251 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5251 = -1.0f; -COMPILER_STRIP_GATE(0x809A5038, &lit_5251); -#pragma pop - -/* 809A503C-809A5040 00016C 0004+00 0/1 0/0 0/0 .rodata @5252 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5252 = 20.0f; -COMPILER_STRIP_GATE(0x809A503C, &lit_5252); -#pragma pop - -/* 809A5040-809A5044 000170 0004+00 0/3 0/0 0/0 .rodata @5253 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5253 = -90.0f; -COMPILER_STRIP_GATE(0x809A5040, &lit_5253); -#pragma pop - -/* 809A5044-809A5048 000174 0004+00 0/1 0/0 0/0 .rodata @5254 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_5254 = 0x3B11A2B4; -COMPILER_STRIP_GATE(0x809A5044, &lit_5254); -#pragma pop - -/* 809A5048-809A5050 000178 0008+00 0/9 0/0 0/0 .rodata @5256 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_5256[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x809A5048, &lit_5256); -#pragma pop - -/* 8099EB40-8099EEA0 0014E0 0360+00 1/1 0/0 0/0 .text execute__12daNpcCoach_cFv */ -void daNpcCoach_c::execute() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A5050-809A5054 000180 0004+00 0/1 0/0 0/0 .rodata @5307 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5307 = 125.0f; -COMPILER_STRIP_GATE(0x809A5050, &lit_5307); -#pragma pop - -/* 8099EEA0-8099F1B8 001840 0318+00 1/2 0/0 0/0 .text checkCoachDamage__12daNpcCoach_cFv - */ -void daNpcCoach_c::checkCoachDamage() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A5054-809A5058 000184 0004+00 0/1 0/0 0/0 .rodata @5397 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5397 = 1.5f; -COMPILER_STRIP_GATE(0x809A5054, &lit_5397); -#pragma pop - -/* 809A5058-809A505C 000188 0004+00 0/1 0/0 0/0 .rodata @5398 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5398 = 2.0f / 5.0f; -COMPILER_STRIP_GATE(0x809A5058, &lit_5398); -#pragma pop - -/* 809A505C-809A5060 00018C 0004+00 0/1 0/0 0/0 .rodata @5399 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5399 = 3.0f / 5.0f; -COMPILER_STRIP_GATE(0x809A505C, &lit_5399); -#pragma pop - -/* 809A5060-809A5064 000190 0004+00 0/2 0/0 0/0 .rodata @5400 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5400 = 4.0f / 5.0f; -COMPILER_STRIP_GATE(0x809A5060, &lit_5400); -#pragma pop - -/* 8099F1B8-8099F4BC 001B58 0304+00 1/1 0/0 0/0 .text setCoachBlazing__12daNpcCoach_cFUc - */ -void daNpcCoach_c::setCoachBlazing(u8 param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A5064-809A5068 000194 0004+00 0/2 0/0 0/0 .rodata @5600 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5600 = 63.0f; -COMPILER_STRIP_GATE(0x809A5064, &lit_5600); -#pragma pop - -/* 809A5068-809A506C 000198 0004+00 0/2 0/0 0/0 .rodata @5601 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5601 = 17.0f; -COMPILER_STRIP_GATE(0x809A5068, &lit_5601); -#pragma pop - -/* 809A506C-809A5070 00019C 0004+00 0/2 0/0 0/0 .rodata @5602 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5602 = 11.0f; -COMPILER_STRIP_GATE(0x809A506C, &lit_5602); -#pragma pop - -/* 809A5070-809A5074 0001A0 0004+00 0/2 0/0 0/0 .rodata @5603 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5603 = -11.0f; -COMPILER_STRIP_GATE(0x809A5070, &lit_5603); -#pragma pop - -/* 8099F4BC-8099F988 001E5C 04CC+00 1/1 0/0 0/0 .text reinsExecute__12daNpcCoach_cFv */ -void daNpcCoach_c::reinsExecute() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A5074-809A5078 0001A4 0004+00 0/3 0/0 0/0 .rodata @5710 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5710 = 2.0f; -COMPILER_STRIP_GATE(0x809A5074, &lit_5710); -#pragma pop - -/* 809A5078-809A507C 0001A8 0004+00 0/1 0/0 0/0 .rodata @5711 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5711 = 6.0f; -COMPILER_STRIP_GATE(0x809A5078, &lit_5711); -#pragma pop - -/* 8099F988-8099FCF4 002328 036C+00 1/1 0/0 0/0 .text reinsInit__12daNpcCoach_cFv */ -void daNpcCoach_c::reinsInit() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A507C-809A5080 0001AC 0004+00 0/3 0/0 0/0 .rodata @5928 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5928 = 1500.0f; -COMPILER_STRIP_GATE(0x809A507C, &lit_5928); -#pragma pop - -/* 809A5080-809A5084 0001B0 0004+00 0/1 0/0 0/0 .rodata @5929 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5929 = 35.0f; -COMPILER_STRIP_GATE(0x809A5080, &lit_5929); -#pragma pop - -/* 809A5084-809A5088 0001B4 0004+00 0/1 0/0 0/0 .rodata @5930 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5930 = 65.0f; -COMPILER_STRIP_GATE(0x809A5084, &lit_5930); -#pragma pop - -/* 809A5088-809A508C 0001B8 0004+00 0/1 0/0 0/0 .rodata @5931 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5931 = -20.0f; -COMPILER_STRIP_GATE(0x809A5088, &lit_5931); -#pragma pop - -/* 809A508C-809A5090 0001BC 0004+00 0/2 0/0 0/0 .rodata @5932 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5932 = 0.5f; -COMPILER_STRIP_GATE(0x809A508C, &lit_5932); -#pragma pop - -/* 809A5090-809A5094 0001C0 0004+00 0/2 0/0 0/0 .rodata @5933 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5933 = 108.0f; -COMPILER_STRIP_GATE(0x809A5090, &lit_5933); -#pragma pop - -/* 809A5094-809A5098 0001C4 0004+00 0/2 0/0 0/0 .rodata @5934 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5934 = 290.0f; -COMPILER_STRIP_GATE(0x809A5094, &lit_5934); -#pragma pop - -/* 8099FCF4-809A0728 002694 0A34+00 1/1 0/0 0/0 .text calcCoachMotion__12daNpcCoach_cFv - */ -void daNpcCoach_c::calcCoachMotion() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A5098-809A509C 0001C8 0004+00 0/2 0/0 0/0 .rodata @6072 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6072 = 65535.0f; -COMPILER_STRIP_GATE(0x809A5098, &lit_6072); -#pragma pop - -/* 809A509C-809A50A0 0001CC 0004+00 0/1 0/0 0/0 .rodata @6073 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_6073 = 0x43DBE958; -COMPILER_STRIP_GATE(0x809A509C, &lit_6073); -#pragma pop - -/* 809A50A0-809A50A4 0001D0 0004+00 0/1 0/0 0/0 .rodata @6074 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_6074 = 0x4420A762; -COMPILER_STRIP_GATE(0x809A50A0, &lit_6074); -#pragma pop - -/* 809A50A4-809A50A8 0001D4 0004+00 0/2 0/0 0/0 .rodata @6075 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6075 = 128.0f; -COMPILER_STRIP_GATE(0x809A50A4, &lit_6075); -#pragma pop - -/* 809A0728-809A0DB8 0030C8 0690+00 1/1 0/0 0/0 .text calcRearWheelRotate__12daNpcCoach_cFv */ -void daNpcCoach_c::calcRearWheelRotate() { - // NONMATCHING -} - -/* 809A0DB8-809A0E00 003758 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -// cM3dGPla::~cM3dGPla() { -extern "C" void __dt__8cM3dGPlaFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A50A8-809A50AC 0001D8 0004+00 0/1 0/0 0/0 .rodata @6173 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6173 = 160.0f; -COMPILER_STRIP_GATE(0x809A50A8, &lit_6173); -#pragma pop - -/* 809A0E00-809A1180 0037A0 0380+00 1/1 0/0 0/0 .text calcHarnessMotion__12daNpcCoach_cFv - */ -void daNpcCoach_c::calcHarnessMotion() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A50AC-809A50B0 0001DC 0004+00 0/1 0/0 0/0 .rodata @6308 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_6308 = 0x43ACC9A0; -COMPILER_STRIP_GATE(0x809A50AC, &lit_6308); -#pragma pop - -/* 809A50B0-809A50B4 0001E0 0004+00 0/1 0/0 0/0 .rodata @6309 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_6309 = 0x440B34A4; -COMPILER_STRIP_GATE(0x809A50B0, &lit_6309); -#pragma pop - -/* 809A1180-809A1810 003B20 0690+00 1/1 0/0 0/0 .text calcFrontWheelRotate__12daNpcCoach_cFv */ -void daNpcCoach_c::calcFrontWheelRotate() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A50B4-809A50B8 0001E4 0004+00 0/1 0/0 0/0 .rodata @6420 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6420 = 16384.0f; -COMPILER_STRIP_GATE(0x809A50B4, &lit_6420); -#pragma pop - -/* 809A50B8-809A50BC 0001E8 0004+00 0/1 0/0 0/0 .rodata @6421 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6421 = 7.0f / 100.0f; -COMPILER_STRIP_GATE(0x809A50B8, &lit_6421); -#pragma pop - -/* 809A50BC-809A50C0 0001EC 0004+00 0/1 0/0 0/0 .rodata @6422 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6422 = 1.0f / 5.0f; -COMPILER_STRIP_GATE(0x809A50BC, &lit_6422); -#pragma pop - -/* 809A50C0-809A50C4 0001F0 0004+00 0/1 0/0 0/0 .rodata @6423 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6423 = 1.0f / 100.0f; -COMPILER_STRIP_GATE(0x809A50C0, &lit_6423); -#pragma pop - -/* 809A50C4-809A50C8 0001F4 0004+00 0/1 0/0 0/0 .rodata @6424 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6424 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x809A50C4, &lit_6424); -#pragma pop - -/* 809A50C8-809A50CC 0001F8 0004+00 0/1 0/0 0/0 .rodata @6425 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6425 = 135.0f; -COMPILER_STRIP_GATE(0x809A50C8, &lit_6425); -#pragma pop - -/* 809A50CC-809A50D0 0001FC 0004+00 0/1 0/0 0/0 .rodata @6426 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6426 = 83.0f; -COMPILER_STRIP_GATE(0x809A50CC, &lit_6426); -#pragma pop - -/* 809A1810-809A1BE0 0041B0 03D0+00 1/1 0/0 0/0 .text calcHorseMotion__12daNpcCoach_cFv - */ -void daNpcCoach_c::calcHorseMotion() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A50D0-809A50D4 000200 0004+00 0/2 0/0 0/0 .rodata @6773 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6773 = 8.0f; -COMPILER_STRIP_GATE(0x809A50D0, &lit_6773); -#pragma pop - -/* 809A50D4-809A50D8 000204 0004+00 0/1 0/0 0/0 .rodata @6774 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6774 = 90.0f; -COMPILER_STRIP_GATE(0x809A50D4, &lit_6774); -#pragma pop - -/* 809A1BE0-809A2740 004580 0B60+00 1/1 0/0 0/0 .text calcHorseAnm__12daNpcCoach_cFv */ -void daNpcCoach_c::calcHorseAnm() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A50D8-809A50DC 000208 0004+00 0/1 0/0 0/0 .rodata @6958 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6958 = 4096.0f; -COMPILER_STRIP_GATE(0x809A50D8, &lit_6958); -#pragma pop - -/* 809A50DC-809A50E0 00020C 0004+00 0/1 0/0 0/0 .rodata @6959 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6959 = -4096.0f; -COMPILER_STRIP_GATE(0x809A50DC, &lit_6959); -#pragma pop - -/* 809A50E0-809A50E4 000210 0004+00 0/1 0/0 0/0 .rodata @6960 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6960 = 30.0f; -COMPILER_STRIP_GATE(0x809A50E0, &lit_6960); -#pragma pop - -/* 809A50E4-809A50E8 000214 0004+00 0/1 0/0 0/0 .rodata @6961 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6961 = 10.0f; -COMPILER_STRIP_GATE(0x809A50E4, &lit_6961); -#pragma pop - -/* 809A2740-809A2E98 0050E0 0758+00 1/1 0/0 0/0 .text calcHorsePath__12daNpcCoach_cFv */ -void daNpcCoach_c::calcHorsePath() { - // NONMATCHING -} - -/* 809A2E98-809A2EB8 005838 0020+00 1/0 0/0 0/0 .text daNpcCoach_Draw__FP12daNpcCoach_c - */ -static void daNpcCoach_Draw(daNpcCoach_c* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A50E8-809A50EC 000218 0004+00 0/2 0/0 0/0 .rodata @7066 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7066 = 150.0f; -COMPILER_STRIP_GATE(0x809A50E8, &lit_7066); -#pragma pop - -/* 809A50EC-809A50F0 00021C 0004+00 0/1 0/0 0/0 .rodata @7067 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7067 = 1000.0f; -COMPILER_STRIP_GATE(0x809A50EC, &lit_7067); -#pragma pop - -/* 809A50F0-809A50F4 000220 0004+00 0/2 0/0 0/0 .rodata @7068 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7068 = 100.0f; -COMPILER_STRIP_GATE(0x809A50F0, &lit_7068); -#pragma pop - -/* 809A50F4-809A50F8 000224 0004+00 0/1 0/0 0/0 .rodata @7069 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7069 = 1400.0f; -COMPILER_STRIP_GATE(0x809A50F4, &lit_7069); -#pragma pop - -/* 809A2EB8-809A3300 005858 0448+00 1/1 0/0 0/0 .text draw__12daNpcCoach_cFv */ -void daNpcCoach_c::draw() { - // NONMATCHING -} - -/* 809A3300-809A3308 005CA0 0008+00 1/0 0/0 0/0 .text daNpcCoach_IsDelete__FP12daNpcCoach_c */ -static bool daNpcCoach_IsDelete(daNpcCoach_c* param_0) { - return true; -} - -/* 809A3308-809A3330 005CA8 0028+00 1/0 0/0 0/0 .text daNpcCoach_Delete__FP12daNpcCoach_c - */ -static void daNpcCoach_Delete(daNpcCoach_c* param_0) { - // NONMATCHING -} - -/* 809A3330-809A3570 005CD0 0240+00 1/1 0/0 0/0 .text __dt__12daNpcCoach_cFv */ -daNpcCoach_c::~daNpcCoach_c() { - // NONMATCHING -} - -/* 809A3570-809A3674 005F10 0104+00 1/1 0/0 0/0 .text __dt__16daNpcChHarness_cFv */ -daNpcChHarness_c::~daNpcChHarness_c() { - // NONMATCHING -} - -/* 809A3674-809A3798 006014 0124+00 1/1 0/0 0/0 .text __dt__14daNpcChCoach_cFv */ -daNpcChCoach_c::~daNpcChCoach_c() { - // NONMATCHING -} - -/* 809A3798-809A3864 006138 00CC+00 2/2 0/0 0/0 .text __dt__8dCcD_CylFv */ -// dCcD_Cyl::~dCcD_Cyl() { -extern "C" void __dt__8dCcD_CylFv() { - // NONMATCHING -} - -/* 809A3864-809A3884 006204 0020+00 1/0 0/0 0/0 .text daNpcCoach_Create__FP10fopAc_ac_c - */ -static void daNpcCoach_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 809A3884-809A3928 006224 00A4+00 1/1 0/0 0/0 .text create__12daNpcCoach_cFv */ -void daNpcCoach_c::create() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A50F8-809A50FC 000228 0004+00 0/1 0/0 0/0 .rodata @7443 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7443 = -180.0f; -COMPILER_STRIP_GATE(0x809A50F8, &lit_7443); -#pragma pop - -/* 809A50FC-809A5100 00022C 0004+00 0/1 0/0 0/0 .rodata @7444 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7444 = -750.0f; -COMPILER_STRIP_GATE(0x809A50FC, &lit_7444); -#pragma pop - -/* 809A5100-809A5104 000230 0004+00 0/1 0/0 0/0 .rodata @7445 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7445 = 180.0f; -COMPILER_STRIP_GATE(0x809A5100, &lit_7445); -#pragma pop - -/* 809A5104-809A5108 000234 0004+00 0/1 0/0 0/0 .rodata @7446 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7446 = 450.0f; -COMPILER_STRIP_GATE(0x809A5104, &lit_7446); -#pragma pop - -/* 809A5108-809A510C 000238 0004+00 0/1 0/0 0/0 .rodata @7447 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7447 = 200.0f; -COMPILER_STRIP_GATE(0x809A5108, &lit_7447); -#pragma pop - -/* 809A5120-809A5120 000250 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_809A5126 = "F_SP123"; -#pragma pop - -/* 809A3928-809A4078 0062C8 0750+00 1/1 0/0 0/0 .text create_init__12daNpcCoach_cFv */ -void daNpcCoach_c::create_init() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 809A510C-809A5110 00023C 0004+00 0/1 0/0 0/0 .rodata @7496 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7496 = 45.0f; -COMPILER_STRIP_GATE(0x809A510C, &lit_7496); -#pragma pop - -/* 809A5110-809A5114 000240 0004+00 0/1 0/0 0/0 .rodata @7497 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7497 = 50.0f; -COMPILER_STRIP_GATE(0x809A5110, &lit_7497); -#pragma pop - -/* 809A5114-809A5118 000244 0004+00 0/1 0/0 0/0 .rodata @7498 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7498 = 250.0f; -COMPILER_STRIP_GATE(0x809A5114, &lit_7498); -#pragma pop - -/* 809A5118-809A511C 000248 0004+00 0/1 0/0 0/0 .rodata @7499 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7499 = 85.0f; -COMPILER_STRIP_GATE(0x809A5118, &lit_7499); -#pragma pop - -/* 809A511C-809A5120 00024C 0004+00 0/1 0/0 0/0 .rodata @7500 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7500 = 120.0f; -COMPILER_STRIP_GATE(0x809A511C, &lit_7500); -#pragma pop - -/* 809A4078-809A43A0 006A18 0328+00 1/1 0/0 0/0 .text initCollision__12daNpcCoach_cFv */ -void daNpcCoach_c::initCollision() { - // NONMATCHING -} - -/* 809A43A0-809A43DC 006D40 003C+00 1/1 0/0 0/0 .text initBaseMtx__12daNpcCoach_cFv */ -void daNpcCoach_c::initBaseMtx() { - // NONMATCHING -} - -/* 809A43DC-809A46C4 006D7C 02E8+00 1/1 0/0 0/0 .text setBaseMtx__12daNpcCoach_cFv */ -void daNpcCoach_c::setBaseMtx() { - // NONMATCHING -} - -/* 809A46C4-809A48A8 007064 01E4+00 1/1 0/0 0/0 .text initCoachBlazing__12daNpcCoach_cFv - */ -void daNpcCoach_c::initCoachBlazing() { - // NONMATCHING -} - -/* 809A48A8-809A4B9C 007248 02F4+00 1/1 0/0 0/0 .text __ct__12daNpcCoach_cFv */ -daNpcCoach_c::daNpcCoach_c() { - // NONMATCHING -} - -/* 809A4B9C-809A4BF8 00753C 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 809A4BF8-809A4C68 007598 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -// dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" void __dt__12dBgS_AcchCirFv() { - // NONMATCHING -} - -/* 809A4C68-809A4CB0 007608 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 809A4CB0-809A4CF8 007650 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 809A4CF8-809A4D40 007698 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 809A4D40-809A4D78 0076E0 0038+00 1/1 0/0 0/0 .text __ct__11J3DLightObjFv */ -// J3DLightObj::J3DLightObj() { -extern "C" void __ct__11J3DLightObjFv() { - // NONMATCHING -} - -/* 809A4D78-809A4D7C 007718 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -// cXyz::cXyz() { -extern "C" void __ct__4cXyzFv() { - /* empty function */ -} - -/* 809A4D7C-809A4E00 00771C 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_CylFv */ -// dCcD_Cyl::dCcD_Cyl() { -extern "C" void __ct__8dCcD_CylFv() { - // NONMATCHING -} - -/* 809A4E00-809A4E70 0077A0 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 809A4E70-809A4EB8 007810 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 809A4EB8-809A4EC0 007858 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_809A4EB8() { - // NONMATCHING -} - -/* 809A4EC0-809A4EC8 007860 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_809A4EC0() { - // NONMATCHING -} - -/* 809A5120-809A5120 000250 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_npc_theB.cpp b/src/d/actor/d_a_npc_theB.cpp index 6950d4707d1..15a5b05a167 100644 --- a/src/d/actor/d_a_npc_theB.cpp +++ b/src/d/actor/d_a_npc_theB.cpp @@ -767,7 +767,7 @@ SECTION_RODATA static u8 const lit_4396[24] = { COMPILER_STRIP_GATE(0x80B00E00, &lit_4396); /* 80AFD508-80AFD5F0 000E88 00E8+00 0/0 0/0 2/2 .text getHandPos1__11daNpcTheB_cFi */ -void daNpcTheB_c::getHandPos1(int param_0) { +cXyz daNpcTheB_c::getHandPos1(int param_1) { // NONMATCHING } @@ -780,7 +780,7 @@ SECTION_RODATA static u8 const lit_4424[24] = { COMPILER_STRIP_GATE(0x80B00E18, &lit_4424); /* 80AFD5F0-80AFD6D8 000F70 00E8+00 0/0 0/0 2/2 .text getHandPos2__11daNpcTheB_cFi */ -void daNpcTheB_c::getHandPos2(int param_0) { +cXyz daNpcTheB_c::getHandPos2(int param_1) { // NONMATCHING } @@ -801,7 +801,7 @@ SECTION_DEAD static char const* const stringBase_80B0100E = "F_SP121"; #pragma pop /* 80AFD6F0-80AFD938 001070 0248+00 2/1 0/0 0/0 .text main__11daNpcTheB_cFv */ -void daNpcTheB_c::main() { +BOOL daNpcTheB_c::main() { // NONMATCHING } @@ -816,7 +816,7 @@ SECTION_RODATA static f32 const lit_4581 = 1.0f / 5.0f; COMPILER_STRIP_GATE(0x80B00E34, &lit_4581); /* 80AFDAA4-80AFDB70 001424 00CC+00 1/0 0/0 0/0 .text ctrlBtk__11daNpcTheB_cFv */ -void daNpcTheB_c::ctrlBtk() { +BOOL daNpcTheB_c::ctrlBtk() { // NONMATCHING } @@ -873,23 +873,23 @@ void daNpcTheB_c::setAttnPos() { /* 80AFDEC0-80AFE0BC 001840 01FC+00 2/0 0/0 0/0 .text setExpressionAnm__11daNpcTheB_cFib */ -void daNpcTheB_c::setExpressionAnm(int param_0, bool param_1) { +bool daNpcTheB_c::setExpressionAnm(int param_0, bool param_1) { // NONMATCHING } /* 80AFE0BC-80AFE1BC 001A3C 0100+00 1/0 0/0 0/0 .text setExpressionBtp__11daNpcTheB_cFi */ -void daNpcTheB_c::setExpressionBtp(int param_0) { +bool daNpcTheB_c::setExpressionBtp(int param_0) { // NONMATCHING } /* 80AFE1BC-80AFE398 001B3C 01DC+00 1/0 0/0 0/0 .text setMotionAnm__11daNpcTheB_cFif */ -bool daNpcTheB_c::setMotionAnm(int param_0, f32 param_1) { +void daNpcTheB_c::setMotionAnm(int param_0, f32 param_1) { // NONMATCHING } /* 80AFE398-80AFE3A0 001D18 0008+00 1/0 0/0 0/0 .text drawDbgInfo__11daNpcTheB_cFv */ -bool daNpcTheB_c::drawDbgInfo() { +BOOL daNpcTheB_c::drawDbgInfo() { return false; } diff --git a/src/d/actor/d_a_tag_wljump.cpp b/src/d/actor/d_a_tag_wljump.cpp index a6f59dc4d3d..41473dc024b 100644 --- a/src/d/actor/d_a_tag_wljump.cpp +++ b/src/d/actor/d_a_tag_wljump.cpp @@ -182,7 +182,7 @@ int daTagWljump_c::execute() { mLandArea = point_p->mArg0 * 10.0f; - if (point_p->field_0x1 == 1) { + if (point_p->mArg2 == 1) { shape_angle.z = 1; } else { shape_angle.z = 0; diff --git a/src/d/d_bg_s_acch.cpp b/src/d/d_bg_s_acch.cpp index 4d57a6bab29..83e93682e44 100644 --- a/src/d/d_bg_s_acch.cpp +++ b/src/d/d_bg_s_acch.cpp @@ -64,7 +64,7 @@ dBgS_Acch::dBgS_Acch() { pm_speed = NULL; m_ground_h = -1000000000.0f; field_0x90 = 0.0f; - field_0x9c = 60.0f; + m_gnd_chk_offset = 60.0f; field_0x94 = 0.0f; field_0xb4 = 0; field_0xb8 = 0.0f; @@ -151,7 +151,7 @@ void dBgS_Acch::GroundCheck(dBgS& i_bgs) { if (!(m_flags & GRND_NONE)) { cXyz grnd_pos; grnd_pos = *pm_pos; - grnd_pos.y += field_0x94 + (field_0x9c - field_0x90); + grnd_pos.y += field_0x94 + (m_gnd_chk_offset - field_0x90); if (!ChkGndThinCellingOff()) { static dBgS_RoofChk tmpRoofChk; @@ -367,12 +367,12 @@ void dBgS_Acch::CrrPos(dBgS& i_bgs) { field_0xb8 = GetPos()->y; field_0xc0 = 0; f32 fvar12 = tmp2 + GetOldPos()->y; - f32 fvar1 = field_0x9c + GetPos()->y; + f32 fvar1 = m_gnd_chk_offset + GetPos()->y; bool bvar2 = false; OffLineCheckHit(); if (!ChkLineCheckNone() && !cM3d_IsZero(tmp) && - (dvar10 > (tmp * tmp) || fvar12 > fvar1 || dvar11 > field_0x9c || ChkLineCheck())) + (dvar10 > (tmp * tmp) || fvar12 > fvar1 || dvar11 > m_gnd_chk_offset || ChkLineCheck())) { bvar2 = true; LineCheck(i_bgs); diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index a1ad4021dd8..b0bd4a9ec19 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -1753,8 +1753,8 @@ void mDoExt_McaMorf2::calc() { } else { field_0x40->getTransform(jnt_no, &spF0[1]); - sp18[0] = 1.0f - field_0x44; - sp18[1] = field_0x44; + sp18[0] = 1.0f - mAnmRate; + sp18[1] = mAnmRate; var_r30->mScale.x = spF0[0].mScale.x * sp18[0] + spF0[1].mScale.x * sp18[1]; @@ -1810,8 +1810,8 @@ void mDoExt_McaMorf2::calc() { mpAnm->getTransform(jnt_no, &spF0[0]); field_0x40->getTransform(jnt_no, &spF0[1]); - sp10[0] = 1.0f - field_0x44; - sp10[1] = field_0x44; + sp10[0] = 1.0f - mAnmRate; + sp10[1] = mAnmRate; sp80.mScale.x = spF0[0].mScale.x * sp10[0] + spF0[1].mScale.x * sp10[1]; @@ -1866,7 +1866,7 @@ void mDoExt_McaMorf2::setAnm(J3DAnmTransform* param_0, J3DAnmTransform* param_1, int i_attr, f32 i_morf, f32 i_speed, f32 i_start, f32 i_end) { mpAnm = param_0; field_0x40 = param_1; - field_0x44 = param_2; + mAnmRate = param_2; setStartFrame(i_start); @@ -1912,9 +1912,9 @@ void mDoExt_McaMorf2::setAnm(J3DAnmTransform* param_0, J3DAnmTransform* param_1, /* 80011FCC-800120A0 00C90C 00D4+00 0/0 0/0 2/2 .text setAnmRate__15mDoExt_McaMorf2Ff */ void mDoExt_McaMorf2::setAnmRate(f32 param_0) { void* pBas = NULL; - field_0x44 = param_0; + mAnmRate = param_0; if (mpSound != NULL) { - if (field_0x44 < 0.5f) { + if (mAnmRate < 0.5f) { if (mpAnm != NULL) { pBas = ((mDoExt_transAnmBas*)mpAnm)->getBas(); }