diff --git a/include/d/actor/d_a_am.h b/include/d/actor/d_a_am.h index 484350a6f..54078ab84 100644 --- a/include/d/actor/d_a_am.h +++ b/include/d/actor/d_a_am.h @@ -39,6 +39,9 @@ public: /* 0x0324 */ cXyz mSpawnPos; /* 0x0330 */ csXyz mEyeRot; /* 0x0336 */ csXyz mTargetEyeRot; +#if VERSION == VERSION_DEMO + /* 0x033C */ JPABaseEmitter* m033C_demo; +#endif /* 0x033C */ JPABaseEmitter* m033C; /* 0x0340 */ JPABaseEmitter* m0340; /* 0x0344 */ dPa_smokeEcallBack mSmokeCbs[4]; diff --git a/include/d/actor/d_a_npc_kk1.h b/include/d/actor/d_a_npc_kk1.h index a823adfaa..509710ebe 100644 --- a/include/d/actor/d_a_npc_kk1.h +++ b/include/d/actor/d_a_npc_kk1.h @@ -1,28 +1,71 @@ #ifndef D_A_NPC_KK1_H #define D_A_NPC_KK1_H + +#include "JSystem/JParticle/JPAEmitter.h" +#include "d/d_npc.h" #include "f_op/f_op_actor.h" +#include "m_Do/m_Do_hostIO.h" + class J3DNode; -class daNpc_Kk1_c : public fopAc_ac_c { + + +static void* searchActor_SWC00(void*, void*); + +class daNpc_Kk1_c : public fopNpc_npc_c { + public: + + typedef int (daNpc_Kk1_c::*ActionFunc)(void*); + typedef void* (pFunc)(void*, void*); + struct anm_prm_c { - + s8 field0; + s8 field1; + u16 field2; + f32 field4; + f32 field8; + u32 fieldC; + }; + struct prm_tbl { + u32 field_0x00; + u32 field_0x04; + u32 field_0x08; + u32 field_0x0C; + u32 field_0x10; + f32 field_0x14; + u32 field_0x18; + u32 field_0x1C; + u32 field_0x20; + u32 field_0x24; + f32 field_0x28; + f32 field_0x2C; + u32 field_0x30; + f32 field_0x34; + f32 field_0x38; + f32 field_0x3C; + u32 field_0x40; + f32 field_0x44; + f32 field_0x48; + u32 field_0x4C; + f32 field_0x50; }; - void getSWbit() {} + + int getSWbit(); void _nodeCB_Head(J3DNode*, J3DModel*); void _nodeCB_BackBone(J3DNode*, J3DModel*); - void init_KK1_0(); - void createInit(); + bool init_KK1_0(); + bool createInit(); void play_animation(); void setMtx(bool); - void bckResID(int); - void btpResID(int); - void setBtp(signed char, bool); - void init_texPttrnAnm(signed char, bool); + int bckResID(int); + int btpResID(int); + bool setBtp(signed char, bool); + bool init_texPttrnAnm(signed char, bool); void play_btp_anm(); void play_eff_anm(); void setAnm_anm(anm_prm_c*); @@ -34,112 +77,233 @@ public: void ctrlAnmAtr(); void setAnm_ATR(); void anmAtr(unsigned short); - void next_msgStatus(unsigned long*); - void getMsg_KK1_0(); - void getMsg(); + u16 next_msgStatus(unsigned long*); + u32 getMsg_KK1_0(); + u32 getMsg(); void eventOrder(); void checkOrder(); - void chk_talk(); - void chk_parts_notMov(); - void searchByID(fpc_ProcID, int*); - void partner_search_sub(void* (*)(void*, void*)); + bool chk_talk(); + bool chk_parts_notMov(); + fopAc_ac_c* searchByID(fpc_ProcID, int*); + bool partner_search_sub(pFunc*); void partner_search(); void lookBack(); - void chkAttention(); + bool chkAttention(); void setAttention(bool); - void decideType(int); + bool decideType(int); void cut_init_RUN_START(int); - void cut_move_RUN_START(); + bool cut_move_RUN_START(); void cut_init_RUN(int); - void cut_move_RUN(); + bool cut_move_RUN(); void cut_init_CATCH_START(int); - void cut_move_CATCH_START(); + bool cut_move_CATCH_START(); void cut_init_CATCH_END(int); - void cut_move_CATCH_END(); + bool cut_move_CATCH_END(); void cut_init_TRN(int); - void cut_move_TRN(); + bool cut_move_TRN(); void cut_init_BYE_START(int); - void cut_move_BYE_START(); + bool cut_move_BYE_START(); void cut_init_BYE(int); - void cut_move_BYE(); + bool cut_move_BYE(); void cut_init_BYE_CONTINUE(int); - void cut_move_BYE_CONTINUE(); + bool cut_move_BYE_CONTINUE(); void cut_init_BYE_END(int); - void cut_move_BYE_END(); + bool cut_move_BYE_END(); void cut_init_PLYER_TRN(int); - void cut_move_PLYER_TRN(); + bool cut_move_PLYER_TRN(); void cut_init_OTOBOKE(int); - void cut_move_OTOBOKE(); + bool cut_move_OTOBOKE(); void cut_init_PLYER_MOV(int); - void cut_move_PLYER_MOV(); + bool cut_move_PLYER_MOV(); void cut_init_RUNAWAY_START(int); - void cut_move_RUNAWAY_START(); + bool cut_move_RUNAWAY_START(); void cut_init_RUNAWAY_END(int); - void cut_move_RUNAWAY_END(); + bool cut_move_RUNAWAY_END(); void privateCut(int); void endEvent(); - void isEventEntry(); + int isEventEntry(); void event_proc(int); - void checkCommandTalk(); - void set_action(int (daNpc_Kk1_c::*)(void*), void*); + bool checkCommandTalk(); + bool set_action(ActionFunc, void*); void setStt(signed char); void createTama(float); - void chk_areaIN(float, cXyz); - void startEvent_check(); - void chkHitPlayer(); + bool chk_areaIN(float, cXyz); + bool startEvent_check(); + bool chkHitPlayer(); void set_pthPoint(unsigned char); - void event_move(bool); - void kyoroPos(int); - void kyorokyoro(); - void chk_attn(); + bool event_move(bool); + cXyz kyoroPos(int); + bool kyorokyoro(); + bool chk_attn(); void setBikon(cXyz); void delBikon(); void setAse(); void flwAse(); void delAse(); - void wait_1(); - void walk_1(); - void wait_2(); + BOOL wait_1(); + BOOL walk_1(); + BOOL wait_2(); void init_CMT_WAI(); void move_CMT_WAI(); void init_CMT_TRN(); void move_CMT_TRN(); void init_CMT_PCK(); void move_CMT_PCK(); - void cmmt_1(); - void wait_3(); - void wait_4(); - void talk_1(); - void wait_action1(void*); - void demo(); + BOOL cmmt_1(); + BOOL wait_3(); + BOOL wait_4(); + BOOL talk_1(); + int wait_action1(void*); + u8 demo(); void shadowDraw(); - bool _draw(); + BOOL _draw(); bool _execute(); bool _delete(); cPhs_State _create(); - void bodyCreateHeap(); - void effcCreateHeap(); - void CreateHeap(); + BOOL bodyCreateHeap(); + BOOL effcCreateHeap(); + BOOL CreateHeap(); public: - /* 0x6C4 */ u8 m6C4[0x72C - 0x6C4]; - /* 0x72C */ cXyz m72C; - /* 0x738 */ cXyz m738; - /* 0x744 */ u8 m744[0x750 - 0x744]; - /* 0x750 */ cXyz m750; - /* 0x75C */ u8 m75C[0x7C4 - 0x75C]; - /* 0x7C4 */ u8 m7C4; - /* 0x7C5 */ u8 m7C5[0x81E - 0x7C5]; - /* 0x81E */ u8 m81E; - /* 0x81F */ u8 m81F[0x824 - 0x81F]; -}; -class daNpc_Kk1_HIO_c { + /* 0x6C4 */ request_of_phase_process_class field_0x6C4; + /* 0x6CC */ s8 m_hed_jnt_num; + /* 0x6CD */ s8 m_bbone_jnt_num; + /* 0x6CE */ char mArcName; + /* 0x6CF */ u8 field_0x6CF; + /* 0x6D0 */ u32 field_0x6D0; + /* 0x6D4 */ u32 mShadowID; + /* 0x6D8 */ mDoExt_btpAnm mBtpAnm; + /* 0x6EC*/ u8 mBtpFrame; + /* 0x6ED*/ s8 field_0x6ED; + /* 0x6EE*/ s16 field_0x6EE; + /* 0x6F0*/ ActionFunc field_0x6F0; + /* 0x6FC*/ fpc_ProcID mPartnerProcID; + /* 0x700*/ u32 field_0x700; + /* 0x704*/ dNpc_PathRun_c mRunPath; + /* 0x70C*/ cXyz field_0x70C; + /* 0x718*/ csXyz field_0x718; + /* 0x71E */ csXyz mAngle; + /* 0x724 */ u8 field_0x724[0x72C - 0x724]; + /* 0x72C */ cXyz field_0x72C; + /* 0x738 */ cXyz field_0x738; + /* 0x744 */ u8 field_0x744[0x750 - 0x744]; + /* 0x750 */ cXyz field_0x750; + /* 0x75C */ cXyz field_0x75C; + /* 0x768 */ f32 mAnimeFrame; + /* 0x76A */ u8 field_0x76A[4]; + /* 0x770 */ s16 mLookBackAngleY; + /* 0x772 */ s16 mLookBackHeadY; + /* 0x774 */ s16 mLookBackBackboneY; + /* 0x776 */ s16 field_0x776; + /* 0x778 */ s32 field_0x778; + /* 0x77C */ s16 mEvtIDTbl[8]; + /* 0x78C */ s16 mEvtIDIdx; + /* 0x78E */ s8 field_0x78E[0x792 - 0x78E]; + /* 0x792 */ s16 field_0x792; + /* 0x794 */ s16 field_0x794; + /* 0x796 */ s16 mKyoroRNG; + /* 0x798 */ s16 mTimer; + /* 0x79A */ s16 field_0x79A; + /* 0x79C */ s16 field_0x79C; + /* 0x79E */ s16 field_0x79E; + /* 0x7A0 */ s16 field_0x7A0; + /* 0x7A2 */ s16 field_0x7A2; + /* 0x7A4 */ s16 field_0x7A4; + /* 0x7A6 */ s16 field_0x7A6; + /* 0x7A8 */ s16 field_0x7A8; + /* 0x7AA */ s16 field_0x7AA; + /* 0x7AC */ s16 field_0x7AC; + /* 0x7AE */ s16 mMuuruBadResponse; + /* 0x7B0 */ s16 mPrm0; + /* 0x7B2 */ s8 field_0x7B2; + /* 0x7B3 */ u8 field_0x7B3; + /* 0x7B4 */ u8 field_0x7B4; + /* 0x7B5 */ u8 mSWbit; + /* 0x7B6 */ u8 field_0x7B6; + /* 0x7B7 */ u8 field_0x7B7; + /* 0x7B8 */ u8 field_0x7B8; + /* 0x7B9 */ u8 field_0x7B9; + /* 0x7BA */ u8 field_0x7BA; + /* 0x7BB */ u8 field_0x7BB; + /* 0x7BC */ s8 field_0x7BC; + /* 0x7BD */ u8 field_0x7BD; + /* 0x7BE */ u8 field_0x7BE; + /* 0x7BF */ u8 field_0x7BF; + /* 0x7C0 */ u8 field_0x7C0; + /* 0x7C1 */ u8 field_0x7C1; + /* 0x7C2 */ u8 field_0x7C2; + /* 0x7C3 */ u8 field_0x7C3; + /* 0x7C4 */ bool mLockBodyRotation; + /* 0x7C5 */ bool field_0x7C5; + /* 0x7C6 */ u8 field_0x7C6; + /* 0x7C7 */ u8 field_0x7C7; + /* 0x7C8 */ mDoExt_bpkAnm field_0x7C8; + /* 0x7DC */ mDoExt_btkAnm field_0x7DC; + /* 0x7F0 */ mDoExt_bckAnm field_0x7F0; + /* 0x800 */ s16 field_0x800; + /* 0x802 */ s16 field_0x802; + /* 0x804 */ s16 field_0x804; + /* 0x806 */ u16 field_0x806; + /* 0x808*/ J3DModel* field_0x808; + /* 0x80C*/ u8 field_0x80C[0x810-0x80C]; + /* 0x810 */ JPABaseEmitter* field_0x810; + /* 0x814 */ s8 mCutsceneIndex; + /* 0x815 */ s8 field_0x815; + /* 0x816 */ s8 field_0x816; + /* 0x817 */ u8 mAnimationNum; + /* 0x818 */ u8 field_0x818; + /* 0x819 */ s8 field_0x819; + /* 0x81A */ s8 field_0x81A; + /* 0x81B */ s8 field_0x81B; + /* 0x81C */ s8 field_0x81C; + /* 0x81D */ s8 field_0x81D; + /* 0x81E */ u8 mWhereToLook; + /* 0x81F */ s8 field_0x81F; + /* 0x820 */ s8 field_0x820; + /* 0x821 */ s8 field_0x821; + /* 0x822 */ s8 field_0x822; + /* 0x823 */ s8 field_0x823; +}; // Size: 0x824 + +class daNpc_Kk1_HIO_c : mDoHIO_entry_c{ public: daNpc_Kk1_HIO_c(); - + virtual ~daNpc_Kk1_HIO_c(){}; public: - /* Place member variables here */ + /* 0x04 */ s8 mNo; + /* 0x08 */ s16 mHorizontalDistance; + /* 0x08 */ s32 field_0xA; + /* 0x0C */ s16 field_0xC; + /* 0x0E */ s16 field_0xE; + /* 0x10 */ s16 field_0x10; + /* 0x12 */ s16 field_0x12; + /* 0x14 */ s16 field_0x14; + /* 0x16 */ s16 field_0x16; + /* 0x18 */ s16 field_0x18; + /* 0x1A */ s16 field_0x1A; + /* 0x1C */ s16 field_0x1C; + /* 0x1E */ s16 field_0x1E; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ u8 field_0x24; + /* 0x25 */ u8 field_0x25; + /* 0x26 */ s16 field_0x26; + /* 0x28 */ s16 field_0x28; + /* 0x28 */ s16 field_0x2A; + /* 0x2C */ s16 field_0x2C; + /* 0x2C */ s16 field_0x2E; + /* 0x30 */ s16 mScale; + /* 0x32 */ s16 mMaxStep; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; }; - #endif /* D_A_NPC_KK1_H */ diff --git a/include/d/actor/d_a_npc_km1.h b/include/d/actor/d_a_npc_km1.h index 2e369bb1f..59a086b35 100644 --- a/include/d/actor/d_a_npc_km1.h +++ b/include/d/actor/d_a_npc_km1.h @@ -1,53 +1,32 @@ #ifndef D_A_NPC_KM1_H #define D_A_NPC_KM1_H -#include "d/d_npc.h" #include "f_op/f_op_actor.h" -#include "m_Do/m_Do_hostIO.h" - - -class daNpc_Km1_c : public fopNpc_npc_c { +class daNpc_Km1_c : public fopAc_ac_c { public: - - typedef int (daNpc_Km1_c::*ActionFunc)(void*); - struct anm_prm_c { - s8 field_0x0; - s8 field_0x1; - u16 field_0x2; - float field_0x4; - float field_0x8; - int field_0xC; - }; - struct prm_tbl { - u32 field_0x00; - u32 field_0x04; - u32 field_0x08; - u32 field_0x0C; - u32 field_0x10; - f32 field_0x14; - u32 field_0x18; + }; - Vec* getAttPos() {return &field_0x780;} - s8 getBackboneJntNum() {return m_backbone_jnt_num;} + void getAttPos() {} + void getBackboneJntNum() {} void getBackbone_x() {} void getBackbone_y() {} - Vec* getEyePos() {return &field_0x78C;} - s8 getHeadJntNum() {return m_head_jnt_num;} + void getEyePos() {} + void getHeadJntNum() {} void getHead_x() {} void getHead_y() {} - bool createInit(); + void createInit(); void setMtx(); - bool anmResID(int, int*, int*); + void anmResID(int, int*, int*); void BtpNum2ResID(int, int*); void setAnm_tex(signed char); - u8 init_btp(bool, int); - bool initTexPatternAnm(bool); + void init_btp(bool, int); + void initTexPatternAnm(bool); void playTexPatternAnm(); - s32 setAnm_anm(anm_prm_c*); + void setAnm_anm(anm_prm_c*); void setAnm(); void chngAnmTag(); void ctrlAnmTag(); @@ -56,112 +35,58 @@ public: void setAnm_ATR(int); void anmAtr(unsigned short); void setStt(signed char); - u16 next_msgStatus(unsigned long*); - u32 getMsg(); + void next_msgStatus(unsigned long*); + void getMsg(); void eventOrder(); void checkOrder(); void lookBack(); - bool chkAttention(); + void chkAttention(); void setAttention(); - bool decideType(int); + void decideType(int); void event_actionInit(int); - bool event_action(); + void event_action(); void privateCut(); void endEvent(); void event_proc(); - bool set_action(ActionFunc, void*); - BOOL wait01(); - BOOL talk01(); - int wait_action1(void*); - u8 demo(); + void set_action(int (daNpc_Km1_c::*)(void*), void*); + void wait01(); + void talk01(); + void wait_action1(void*); + void demo(); bool _draw(); bool _execute(); bool _delete(); cPhs_State _create(); - BOOL CreateHeap(); + void CreateHeap(); public: - /* 0x6C4 */ request_of_phase_process_class field_0x6C4; - /* 0x6CC */ s8 m_head_jnt_num; - /* 0x6CD */ s8 m_backbone_jnt_num; - /* 0x6CE */ u8 field_0x6CE[0x6D0 - 0x6CE]; - /* 0x6D0 */ u32 mShadowId; - /* 0x6D4 */ J3DModel* field_0x6D4; - /* 0x6D8 */ J3DAnmTexPattern* m_head_tex_pattern; - /* 0x6DC */ mDoExt_btpAnm mBtpAnm; - /* 0x6F0 */ u8 mBtpFrame; - /* 0x6F1 */ u8 field_0x6F1; - /* 0x6F2 */ s16 field_0x6F2; - /* 0x6F4 */ ActionFunc field_0x6F4; - /* 0x700 */ dNpc_EventCut_c mEventCut; - /* 0x76C */ csXyz field_0x76C; - /* 0x772 */ u8 field_0x772[0x774 - 0x772]; - /* 0x774 */ cXyz field_0x774; - /* 0x780 */ cXyz field_0x780; - /* 0x78C */ cXyz field_0x78C; - /* 0x798 */ cXyz field_0x798; - /* 0x7A4 */ f32 field_0x7A4; - /* 0x7A8 */ u8 field_0x7A8[0x7AC - 0x7A8]; - /* 0x7AC */ f32 field_0x7AC; - /* 0x7B0 */ s16 field_0x7B0; - /* 0x7B2 */ s16 field_0x7B2; - /* 0x7B4 */ s8 field_0x7B4; - /* 0x7B5 */ s8 field_0x7B5; - /* 0x7B6 */ u8 field_0x7B6; - /* 0x7B7 */ u8 field_0x7B7; - /* 0x7B8 */ u8 field_0x7B8; - /* 0x7B9 */ u8 field_0x7B9[0x7BC - 0x7B9]; - /* 0x7BC */ s32 field_0x7BC; - /* 0x7C0 */ s32 field_0x7C0; - /* 0x7C4 */ u8 field_0x7C4; - /* 0x7C5 */ u8 field_0x7C5; - /* 0x7C6 */ bool mHeadOnlyFollow; - /* 0x7C7 */ u8 field_0x7C7; - /* 0x7C8 */ u8 field_0x7C8; - /* 0x7C8 */ s8 field_0x7C9; - /* 0x7CA */ s8 field_0x7CA; - /* 0x7CB */ u8 field_0x7CB; - /* 0x7CC */ u8 field_0x7CC; - /* 0x7CD */ s8 field_0x7CD; - /* 0x7CE */ s8 field_0x7CE; - /* 0x7CF */ s8 field_0x7CF; - /* 0x7D0 */ s8 field_0x7D0; - /* 0x7D1 */ s8 field_0x7D1; - /* 0x7D2 */ s8 field_0x7D2; - /* 0x7D3 */ s8 field_0x7D3; - /* 0x7D4 */ s8 field_0x7D4; - /* 0x7D5 */ s8 field_0x7D5; - /* 0x7D6 */ s8 field_0x7D6; - /* 0x7D7 */ s8 field_0x7D7; -}; // Size: 0x7D8 + /* 0x6C4 */ u8 m6C4[0x6CC - 0x6C4]; + /* 0x6CC */ u8 mHeadJntIdx; + /* 0x6CD */ u8 mBackBoneJntIdx; + /* 0x6CE */ u8 m6CE[0x6F4 - 0x6CE]; + /* 0x6F4 */ int (daNpc_Km1_c::*m6F4)(); + /* 0x700 */ u8 m700[0x76C - 0x700]; + /* 0x76C */ csXyz m76C; + /* 0x772 */ u8 m772[0x774 - 0x772]; + /* 0x774 */ cXyz m774; + /* 0x780 */ cXyz m780; + /* 0x78C */ cXyz m78C; + /* 0x798 */ cXyz m798; + /* 0x7A4 */ u8 m7A4[0x7B0 - 0x7A4]; + /* 0x7B0 */ s16 m7B0; + /* 0x7B2 */ u8 m7B2[0x7B8 - 0x7B2]; + /* 0x7B8 */ u8 m7B8; + /* 0x7B9 */ u8 m7B9[0x7C7 - 0x7B9]; + /* 0x7C7 */ u8 m7C7; + /* 0x7C8 */ u8 m7C8[0x7D8 - 0x7C8]; +}; -class daNpc_Km1_HIO_c : public JORReflexible{ - struct daNpc_Km1_HIO__PrmTbl{ - s16 field_0; - s16 field_2; - s16 field_4; - s16 field_6; - s16 field_8; - s16 field_A; - s16 field_C; - s16 field_E; - s16 field_10; - s16 field_12; - f32 mAttentionArrowYOffset; - f32 field_18; - }; // Size: 0x1C +class daNpc_Km1_HIO_c { public: daNpc_Km1_HIO_c(); - virtual ~daNpc_Km1_HIO_c(){}; + public: /* Place member variables here */ - /* 0x4 */ s8 mNo; - /* 0x5 */ s8 field_0x5; - /* 0x6 */ s8 field_0x6; - /* 0x7 */ s8 field_0x7; - /* 0x8 */ int field_0x8; - /* 0xC */ daNpc_Km1_HIO__PrmTbl mPrmTbl; - }; #endif /* D_A_NPC_KM1_H */ diff --git a/include/d/actor/d_a_npc_photo.h b/include/d/actor/d_a_npc_photo.h index 56d71ec02..50de06ede 100644 --- a/include/d/actor/d_a_npc_photo.h +++ b/include/d/actor/d_a_npc_photo.h @@ -3,14 +3,25 @@ #include "f_op/f_op_actor.h" #include "d/d_cc_d.h" +#include "d/d_npc.h" struct sPhotoAnmDat { - + /* 0x00 */ u8 field_0x00; + /* 0x01 */ u8 field_0x01; + /* 0x02 */ u8 field_0x02; }; -class daNpcPhoto_c : public fopAc_ac_c { +class daNpcPhoto_c : public fopNpc_npc_c { public: - void getPhaseP() {} + enum Prm_e { + PRM_RAIL_ID_W = 0x8, + PRM_RAIL_ID_S = 0x10, + + PRM_ARG0_W = 0x8, + PRM_ARG0_S = 0x0, + }; + + request_of_phase_process_class* getPhaseP() { return &mPhs1; } void incMsgTbl() {} void isDate() {} void nullMsgTbl() {} @@ -20,12 +31,12 @@ public: daNpcPhoto_c(); cPhs_State _create(); - void createHeap(); - void createInit(); + BOOL createHeap(); + cPhs_State createInit(); bool _delete(); bool _draw(); bool _execute(); - void executeCommon(); + bool executeCommon(); void executeSetMode(unsigned char); void executeWait(); void executeTalk(); @@ -36,46 +47,109 @@ public: void eventMove(); void privateCut(); void eventMesSetInit(int); - void eventMesSet(); + bool eventMesSet(); void eventSeSetInit(int); void eventPosSetInit(); void eventGetItemInit(); - void eventGetItem(); + bool eventGetItem(); void eventSetAngleInit(); void eventSetEyeInit(); - void eventSetEye(); + bool eventSetEye(); void eventTurnToPlayerInit(); - void eventTurnToPlayer(); + bool eventTurnToPlayer(); void eventClrHanmeInit(); void eventGetPhotoInit(); - void eventGetPhoto(); + bool eventGetPhoto(); void eventMesSetUbInit(int); - void eventMesSetUb(); - void eventLookUb(); - void talk2(int); + bool eventMesSetUb(); + bool eventLookUb(); + u16 talk2(int); void setMsgCamera(); - void next_msgStatus(unsigned long*); - void getMsg(); - void setMessage(unsigned long); + u16 next_msgStatus(u32*); + u32 getMsg(); + void setMessage(u32); void setAnmFromMsgTag(); - void getPrmRailID(); - void getPrmArg0(); + u8 getPrmRailID(); + u8 getPrmArg0(); void setMtx(); void chkAttention(); void lookBack(); - void initTexPatternAnm(bool, int); + BOOL initTexPatternAnm(bool, int); void playTexPatternAnm(); void playAnm(); - void setAnm(unsigned char, int, float); - void setAnmTbl(sPhotoAnmDat*); - void XyCheckCB(int); - void XyEventCB(int); - void isPhotoOk(); - void isPhotoDxOk(); + void setAnm(u8, int, f32); + bool setAnmTbl(sPhotoAnmDat*); + s16 XyCheckCB(int); + s16 XyEventCB(int); + BOOL isPhotoOk(); + BOOL isPhotoDxOk(); void setCollision(dCcD_Cyl*, cXyz, float, float); + static const char m_arcname[4]; + public: - /* Place member variables here */ -}; + typedef void(daNpcPhoto_c::*MoveFunc_t)(); + + /* 0x6C4 */ request_of_phase_process_class mPhs1; + /* 0x6CC */ request_of_phase_process_class mPhs2; + /* 0x6D4 */ J3DAnmTexPattern* m_head_tex_pattern; + /* 0x6D8 */ mDoExt_btpAnm mBtpAnm; + /* 0x6EC */ u32 mShadowId; + /* 0x6F0 */ dNpc_PathRun_c mPathRun; + /* 0x6F8 */ dCcD_Cyl field_0x6F8[2]; + /* 0x958 */ cXyz field_0x958; + /* 0x964 */ cXyz mLookAtPos; + /* 0x970 */ cXyz mEyePos; + /* 0x97C */ sPhotoAnmDat* mpAnmDat; + /* 0x980 */ u32* field_0x980; + /* 0x984 */ f32 field_0x984; + /* 0x988 */ f32 field_0x988; + /* 0x98C */ f32 field_0x98C; + /* 0x990 */ int mMsgNno; + /* 0x994 */ bool field_0x994; + /* 0x996 */ s16 mPhotoLinkBackEventIdx; + /* 0x998 */ s16 mPhotoGetItemEventIdx; + /* 0x99A */ s16 mPhotoGetItem2EventIdx; + /* 0x99C */ s16 mPhotoGetPhotoEventIdx; + /* 0x99E */ s16 mPhotoGalleryEventIdx; + /* 0x9A0 */ s16 mPhotoCounterTalk0EventIdx; + /* 0x9A2 */ s16 mPhotoCounterTalk1EventIdx; + /* 0x9A4 */ s16 mPhotoDateUB4EventIdx; + /* 0x9A6 */ s16 field_0x9A6; + /* 0x9A8 */ s16 field_0x9A8; + /* 0x9AA */ u8 field_0x9AA[0x9AC - 0x9AA]; + /* 0x9AC */ s16 field_0x9AC; + /* 0x9AE */ s16 field_0x9AE; + /* 0x9B0 */ s16 field_0x9B0; + /* 0x9B2 */ s16 field_0x9B2; + /* 0x9B4 */ s16 mTimer; + /* 0x9B6 */ s16 field_0x9B6; + /* 0x9B8 */ s16 field_0x9B8; + /* 0x9BA */ s16 field_0x9BA; + /* 0x9BC */ bool field_0x9BC; + /* 0x9BD */ bool field_0x9BD; + /* 0x9BE */ u8 field_0x9BE; + /* 0x9BF */ u8 mFrame; + /* 0x9C0 */ u8 field_0x9C0; + /* 0x9C1 */ u8 field_0x9C1; + /* 0x9C2 */ bool field_0x9C2; + /* 0x9C3 */ u8 field_0x9C3; + /* 0x9C4 */ u8 field_0x9C4[0x9C5 - 0x9C4]; + /* 0x9C5 */ u8 mItemNo; + /* 0x9C6 */ u8 field_0x9C6; + /* 0x9C7 */ bool field_0x9C7; + /* 0x9C8 */ u8 field_0x9C8; + /* 0x9C9 */ u8 field_0x9C9; + /* 0x9CA */ s8 field_0x9CA; + /* 0x9CB */ s8 mActIdx; + /* 0x9CC */ bool field_0x9CC; + /* 0x9CD */ bool field_0x9CD; + /* 0x9D0 */ u8* field_0x9D0; + /* 0x9D4 */ bool field_0x9D4; + /* 0x9D5 */ u8 field_0x9D5; + /* 0x9D6 */ s8 field_0x9D6; + /* 0x9D7 */ bool field_0x9D7; + /* 0x9D8 */ bool field_0x9D8; +}; // Size: 0x9DC #endif /* D_A_NPC_PHOTO_H */ diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 59a10809c..757d2700c 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -209,7 +209,7 @@ public: ~daPy_dmEcallBack_c() {} daPy_dmEcallBack_c() {} - static int getTimer() { return m_timer; } + static s16 getTimer() { return m_timer; } static void setTimer(s16 timer) { m_timer = timer; } static void decTimer() { m_timer--; } @@ -1237,7 +1237,9 @@ public: BOOL dProcOpenTreasure_init(); BOOL dProcOpenTreasure(); void setGetItemSound(u16, int); +#if VERSION > VERSION_DEMO BOOL setGetDemo(); +#endif BOOL dProcGetItem_init(); BOOL dProcGetItem(); BOOL dProcUnequip_init(); @@ -1677,8 +1679,12 @@ public: BOOL procFoodSet(); void setSwordModel(BOOL); void setLightSaver(); +#if VERSION == VERSION_DEMO + BOOL checkLastDemoSwordNoDraw(int); +#else BOOL checkDemoShieldNoDraw(); BOOL checkDemoSwordNoDraw(BOOL); +#endif BOOL checkChanceMode(); BOOL checkCutRollChange() const; int getSwordBlurColor(); @@ -1731,32 +1737,32 @@ public: J3DAnmTextureSRTKey* getIceArrowBtk() { return mpIceArrowBtk; } J3DAnmTextureSRTKey* getLightArrowBtk() { return mpLightArrowBtk; } - bool checkUpperAnime(u16 i_idx) const { return m_anm_heap_upper[UPPER_MOVE2_e].mIdx == i_idx; } - bool checkNoUpperAnime() const { return m_anm_heap_upper[UPPER_MOVE2_e].mIdx == 0xFFFF; } + BOOL checkUpperAnime(u16 i_idx) const { return m_anm_heap_upper[UPPER_MOVE2_e].mIdx == i_idx; } + BOOL checkNoUpperAnime() const { return m_anm_heap_upper[UPPER_MOVE2_e].mIdx == 0xFFFF; } - bool checkGrabAnime() const { return checkGrabAnimeLight() || checkGrabAnimeHeavy(); }; - bool checkGrabAnimeLight() const { return checkUpperAnime(LKANM_BCK_GRABWAIT); }; - bool checkGrabAnimeHeavy() const { return checkUpperAnime(LKANM_BCK_GRABWAITB); }; - bool checkBoomerangCatchAnime() const { return checkUpperAnime(LKANM_BCK_BOOMCATCH); }; - bool checkBoomerangThrowAnime() const { return checkUpperAnime(LKANM_BCK_BOOMTHROW); }; - bool checkBoomerangReadyAnime() const { return checkUpperAnime(LKANM_BCK_BOOMWAIT); }; - bool checkHookshotReadyAnime() const { return checkUpperAnime(LKANM_BCK_HOOKSHOTWAIT); } - bool checkDashDamageAnime() const { return checkUpperAnime(LKANM_BCK_DAMDASH); } - bool checkBowReloadAnime() const { return checkUpperAnime(LKANM_BCK_ARROWRELORD); } - bool checkBowShootAnime() const { return checkUpperAnime(LKANM_BCK_ARROWSHOOT); } - bool checkBowWaitAnime() const { return checkUpperAnime(LKANM_BCK_BOWWAIT); } - bool checkGuardSlip() const { + BOOL checkGrabAnime() const { return checkGrabAnimeLight() || checkGrabAnimeHeavy(); }; + BOOL checkGrabAnimeLight() const { return checkUpperAnime(LKANM_BCK_GRABWAIT); }; + BOOL checkGrabAnimeHeavy() const { return checkUpperAnime(LKANM_BCK_GRABWAITB); }; + BOOL checkBoomerangCatchAnime() const { return checkUpperAnime(LKANM_BCK_BOOMCATCH); }; + BOOL checkBoomerangThrowAnime() const { return checkUpperAnime(LKANM_BCK_BOOMTHROW); }; + BOOL checkBoomerangReadyAnime() const { return checkUpperAnime(LKANM_BCK_BOOMWAIT); }; + BOOL checkHookshotReadyAnime() const { return checkUpperAnime(LKANM_BCK_HOOKSHOTWAIT); } + BOOL checkDashDamageAnime() const { return checkUpperAnime(LKANM_BCK_DAMDASH); } + BOOL checkBowReloadAnime() const { return checkUpperAnime(LKANM_BCK_ARROWRELORD); } + BOOL checkBowShootAnime() const { return checkUpperAnime(LKANM_BCK_ARROWSHOOT); } + BOOL checkBowWaitAnime() const { return checkUpperAnime(LKANM_BCK_BOWWAIT); } + BOOL checkGuardSlip() const { return mCurProc == daPyProc_GUARD_SLIP_e || mCurProc == daPyProc_CROUCH_DEFENSE_SLIP_e; } - bool checkUpperGuardAnime() const { + BOOL checkUpperGuardAnime() const { return checkUpperAnime(LKANM_BCK_ATNG) || checkUpperAnime(LKANM_BCK_ATNGHAM); } s16 checkTinkleShield() const { return mTinkleShieldTimer; } void setTinkleShield(s16 time) { mTinkleShieldTimer = time; } - bool checkNoDamageMode() const { return checkEquipDragonShield() || checkTinkleShield() != 0; } + BOOL checkNoDamageMode() const { return checkEquipDragonShield() || checkTinkleShield() != 0; } s16 checkTinkleHover() const { return mTinkleHoverTimer; } void setHoverBoots(s16 time) { onNoResetFlg0(daPyFlg0_HOVER_BOOTS); @@ -1764,12 +1770,12 @@ public: } void onShipTact() { onNoResetFlg1(daPyFlg1_SHIP_TACT); } void offShipTact() { offNoResetFlg1(daPyFlg1_SHIP_TACT); } - bool checkShipGetOff() { return mCurProc == daPyProc_SHIP_GET_OFF_e; } + BOOL checkShipGetOff() { return mCurProc == daPyProc_SHIP_GET_OFF_e; } void onShipDrop(s16 param_1) { onNoResetFlg0(daPyFlg0_SHIP_DROP); m3550 = param_1; } - bool checkCarryActionNow() const { + BOOL checkCarryActionNow() const { return mCurProc == daPyProc_GRAB_PUT_e || mCurProc == daPyProc_GRAB_UP_e || mCurProc == daPyProc_GRAB_THROW_e; @@ -1792,7 +1798,7 @@ public: mActivePlayerBombs--; } } - bool checkSwordEquip() const { + BOOL checkSwordEquip() const { return dComIfGs_getSelectEquip(0) != dItem_NONE_e || checkSwordMiniGame(); } @@ -2204,7 +2210,9 @@ public: /* 0x362C */ fpc_ProcID mTactZevPartnerId; /* 0x3630 */ fpc_ProcID m3630; /* 0x3634 */ fpc_ProcID mWhirlId; +#if VERSION > VERSION_DEMO /* 0x3638 */ fpc_ProcID mMsgId; +#endif /* 0x363C */ J3DFrameCtrl* mpSeAnmFrameCtrl; /* 0x3640 */ s16 m3640; /* 0x3644 */ f32 m3644; diff --git a/include/d/actor/d_a_tag_photo.h b/include/d/actor/d_a_tag_photo.h index 972265be0..1818d152a 100644 --- a/include/d/actor/d_a_tag_photo.h +++ b/include/d/actor/d_a_tag_photo.h @@ -7,7 +7,7 @@ class daTagPhoto_c : public fopAc_ac_c { public: daTagPhoto_c(); - void getTagNo() {} + int getTagNo() { return mTagNo; } cPhs_State _create(); void createHeap(); @@ -32,6 +32,9 @@ public: public: /* Place member variables here */ -}; + /* 0x290 */ u8 field_0x290[0x318 - 0x290]; + /* 0x318 */ u8 mTagNo; + /* 0x31C */ u8 field_0x31C[0x320 - 0x31C]; +}; // Size: 0x320 #endif /* D_A_TAG_PHOTO_H */ diff --git a/include/d/d_bg_s_acch.h b/include/d/d_bg_s_acch.h index 42fbfe438..2310e6922 100644 --- a/include/d/d_bg_s_acch.h +++ b/include/d/d_bg_s_acch.h @@ -91,7 +91,7 @@ public: cXyz* speed = NULL, csXyz* angle = NULL, csXyz* shape_angle = NULL); void GroundCheckInit(dBgS&); void GroundCheck(dBgS&); - f32 GroundRoofProc(dBgS&); + void GroundRoofProc(dBgS&); void LineCheck(dBgS&); void CrrPos(dBgS&); f32 GetWallAllR(); diff --git a/include/d/d_cc_uty.h b/include/d/d_cc_uty.h index dd96413e3..7cd2c6b80 100644 --- a/include/d/d_cc_uty.h +++ b/include/d/d_cc_uty.h @@ -29,6 +29,8 @@ void def_se_set_p(fopAc_ac_c*, cXyz*, cCcD_Obj*, unsigned long); fopAc_ac_c* at_power_check(CcAtInfo*); fopAc_ac_c* cc_at_check(fopAc_ac_c*, CcAtInfo*); -inline void dCc_GetAc(void*) {} +inline fopAc_ac_c* dCc_GetAc(void* i_obj) { + return ((cCcD_Obj*)i_obj)->GetAc(); +} #endif /* D_CC_UTY_H */ diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index d8fba0876..d2a403cb8 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -522,6 +522,10 @@ public: u8 getPictureStatus() { return mPictureStatus; } void setPictureStatusOn() { mPictureStatus = 2; } + void setPictureStatusGetOn(u8 to_set) { + mPictureStatus = 3; + field_0x495f = to_set; + } u8 getScopeMesgStatus() { return mScopeMesgStatus; } void setScopeMesgStatus(u8 status) { mScopeMesgStatus = status; } @@ -2768,6 +2772,10 @@ inline void dComIfGp_setPictureStatusOn() { g_dComIfG_gameInfo.play.setPictureStatusOn(); } +inline void dComIfGp_setPictureStatusGetOn(u8 to_set){ + g_dComIfG_gameInfo.play.setPictureStatusGetOn(to_set); +} + inline s16 dComIfGp_getMiniGameRupee() { return g_dComIfG_gameInfo.play.getMiniGameRupee(); } diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 267ee99cb..967253aec 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -413,7 +413,11 @@ public: class dDlst_mirrorPacket : public J3DPacket { public: void init(ResTIMG*); +#if VERSION == VERSION_DEMO + void update(Mtx, u8); +#else void update(Mtx, u8, f32); +#endif virtual void draw(); /* 0x0010 */ u8 field_0x0010[0x0040 - 0x0010]; diff --git a/include/d/d_picture_box.h b/include/d/d_picture_box.h index 5d8ac4490..60a60431e 100644 --- a/include/d/d_picture_box.h +++ b/include/d/d_picture_box.h @@ -67,5 +67,5 @@ class dJle_Pb_c { void draw(); void _delete(JKRExpHeap*); }; - +void dPb_erasePicture(); #endif /* D_PICTURE_BOX_H */ diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index a5ea8ecab..770c91447 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -430,15 +430,14 @@ inline f32 fopAcM_searchActorDistanceY(fopAc_ac_c* actorA, fopAc_ac_c* actorB) { return actorB->current.pos.y - actorA->current.pos.y; } -inline u16 fopAcM_GetSetId(fopAc_ac_c* p_actor) { +inline int fopAcM_GetSetId(fopAc_ac_c* p_actor) { return p_actor->setID; } inline void dComIfGs_onActor(int bitNo, int roomNo); inline void fopAcM_onActor(fopAc_ac_c* p_actor) { - int setId = fopAcM_GetSetId(p_actor); - dComIfGs_onActor(setId, fopAcM_GetHomeRoomNo(p_actor)); + dComIfGs_onActor(fopAcM_GetSetId(p_actor), fopAcM_GetHomeRoomNo(p_actor)); } inline bool fopAcM_IsFirstCreating(void* i_actor) { diff --git a/src/d/actor/d_a_am.cpp b/src/d/actor/d_a_am.cpp index a69abe01e..92270d597 100644 --- a/src/d/actor/d_a_am.cpp +++ b/src/d/actor/d_a_am.cpp @@ -57,7 +57,7 @@ static BOOL nodeCallBack(J3DNode* node, int calcTiming) { am_class* i_this = (am_class*)model->getUserArea(); if (i_this) { if (jntNo >= 1 && jntNo <= 4) { - cMtx_copy(model->getAnmMtx(jntNo), *calc_mtx); + MTXCopy(model->getAnmMtx(jntNo), *calc_mtx); } cXyz offset; @@ -369,6 +369,7 @@ static void bomb_move_set(am_class* i_this, u8 alwaysMoveY) { /* 00000F04-00001138 .text bomb_nomi_check__FP8am_class */ static BOOL bomb_nomi_check(am_class* i_this) { fopAc_ac_c* actor = i_this; + fopAc_ac_c* player = (fopAc_ac_c*)dComIfGp_getPlayer(0); i_this->mStts.Move(); if (i_this->mCurrBckIdx != AM_BCK_OPEN && i_this->mCurrBckIdx != AM_BCK_OPEN_LOOP && @@ -391,8 +392,7 @@ static BOOL bomb_nomi_check(am_class* i_this) { if (fpcM_GetName(hitActor) == PROC_BOMB) { daBomb_c* bomb = (daBomb_c*)hitActor; if (!bomb->getBombCheck_Flag() && bomb->getBombRestTime() > 1) { - f32 offsetY = 20.0f + REG8_F(1); - if (i_this->mMouthPos.y - offsetY < bomb->current.pos.y) { + if (i_this->mMouthPos.y - (20.0f + REG8_F(1)) < bomb->current.pos.y) { // Swallow the bomb. bomb->setBombCheck_Flag(); bomb->change_state((daBomb_c::State_e)2); @@ -407,8 +407,7 @@ static BOOL bomb_nomi_check(am_class* i_this) { } else if (fpcM_GetName(hitActor) == PROC_Bomb2) { daBomb2::Act_c* bomb2 = (daBomb2::Act_c*)hitActor; if (!bomb2->chk_eat() && bomb2->get_time() > 1) { - f32 offsetY = 20.0f + REG8_F(1); - if (i_this->mMouthPos.y - offsetY < bomb2->current.pos.y) { + if (i_this->mMouthPos.y - (20.0f + REG8_F(1)) < bomb2->current.pos.y) { // Swallow the bomb. bomb2->set_eat(); i_this->mSwallowedActorPID = fopAcM_GetID(bomb2); @@ -429,9 +428,7 @@ static BOOL bomb_nomi_check(am_class* i_this) { /* 00001138-000011E4 .text BG_check__FP8am_class */ static void BG_check(am_class* i_this) { - f32 halfHeight = 30.0f + REG12_F(3); - f32 radius = 150.0f + REG12_F(4); - i_this->mAcchCir.SetWall(halfHeight, radius); + i_this->mAcchCir.SetWall(30.0f + REG12_F(3), 150.0f + REG12_F(4)); i_this->current.pos.y -= i_this->mCorrectionOffsetY; i_this->old.pos.y -= i_this->mCorrectionOffsetY; @@ -495,17 +492,20 @@ static void action_dousa(am_class* i_this) { anm_init(i_this, AM_BCK_SLEEP_LOOP, 1.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); i_this->mMode += 1; // Fall-through - case 1: + case 1: { if (i_this->mStartsInactive == 1 && i_this->mSwitch != 0xFF && !dComIfGs_isSwitch(i_this->mSwitch, dComIfGp_roomControl_getStayNo())) { break; } fopAcM_OnStatus(i_this, fopAcStts_SHOWMAP_e); - if (fopAcM_searchPlayerDistance(i_this) < 1000.0f) { + f32 f31 = 1000.0f; + if (fopAcM_searchPlayerDistance(i_this) < f31) { +#if VERSION > VERSION_DEMO f32 yDist = player->current.pos.y - i_this->current.pos.y; yDist = std::sqrtf(yDist*yDist); // ??? if (yDist > 300.0f) { break; } +#endif if (Line_check(i_this, player->current.pos)) { anm_init(i_this, AM_BCK_OKIRU, 1.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); fopAcM_monsSeStart(i_this, JA_SE_CV_AM_AWAKE, 0); @@ -516,6 +516,7 @@ static void action_dousa(am_class* i_this) { } } break; + } case MODE_DOUSA_OKIRU: if (!i_this->mpMorf->isStop()) { break; @@ -554,16 +555,19 @@ static void action_dousa(am_class* i_this) { return; } } else { - if (fopAcM_searchPlayerDistance(i_this) > 2000.0f) { + f32 f31 = 2000.0f; + if (fopAcM_searchPlayerDistance(i_this) > f31) { i_this->mMode = MODE_DOUSA_SLEEP_INIT; break; } +#if VERSION > VERSION_DEMO f32 yDist = player->current.pos.y - i_this->current.pos.y; yDist = std::sqrtf(yDist*yDist); // ??? if (yDist > 300.0f) { i_this->mMode = MODE_DOUSA_SLEEP_INIT; break; } +#endif } s16 yRotDiff = cLib_distanceAngleS(i_this->shape_angle.y, i_this->mTargetAngleY); if (yRotDiff < 0x100) { @@ -621,7 +625,16 @@ static void action_dousa(am_class* i_this) { fopAcM_monsSeStart(i_this, JA_SE_CV_AM_OPEN_MOUTH, 0); i_this->mNeedleCyl.OffAtSetBit(); i_this->mNeedleCyl.OffAtSetBit(); - if (i_this->mSmokeCbs[2].getEmitter() == NULL) { +#if VERSION == VERSION_DEMO + if (i_this->m033C_demo == NULL) +#else + if (i_this->mSmokeCbs[2].getEmitter() == NULL) +#endif + { +#if VERSION == VERSION_DEMO + i_this->mSmokeCbs[2].remove(); + i_this->m033C_demo = +#endif dComIfGp_particle_setToon( dPa_name::ID_SCENE_A154, &i_this->mWaistPos, &i_this->shape_angle, NULL, 0xB9, &i_this->mSmokeCbs[2], fopAcM_GetRoomNo(i_this) @@ -640,7 +653,15 @@ static void action_dousa(am_class* i_this) { i_this->mTargetAngleY = fopAcM_searchPlayerAngleY(i_this); } if (i_this->mCountDownTimers[0] == 0) { +#if VERSION == VERSION_DEMO + if (i_this->m033C_demo) { + i_this->m033C_demo->becomeInvalidEmitter(); + i_this->m033C_demo = NULL; + i_this->mSmokeCbs[2].remove(); + } +#else i_this->mSmokeCbs[2].remove(); +#endif i_this->mMode = 3; } break; @@ -662,9 +683,25 @@ static void action_dousa(am_class* i_this) { medama_move(i_this); if (i_this->mMode != 2 && medama_atari_check(i_this)) { +#if VERSION == VERSION_DEMO + if (i_this->m033C_demo) { + i_this->m033C_demo->becomeInvalidEmitter(); + i_this->m033C_demo = NULL; + i_this->mSmokeCbs[2].remove(); + } +#else i_this->mSmokeCbs[2].remove(); +#endif } else if (bomb_nomi_check(i_this)) { +#if VERSION == VERSION_DEMO + if (i_this->m033C_demo) { + i_this->m033C_demo->becomeInvalidEmitter(); + i_this->m033C_demo = NULL; + i_this->mSmokeCbs[2].remove(); + } +#else i_this->mSmokeCbs[2].remove(); +#endif } } @@ -946,7 +983,8 @@ static BOOL daAM_Execute(am_class* i_this) { fopAcM_setGbaName(i_this, dItem_BOW_e, 0xC, 0x2A); if (enemy_ice(&i_this->mEnemyIce)) { - i_this->mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + J3DModel* model = i_this->mpMorf->getModel(); + model->setBaseTRMtx(mDoMtx_stack_c::get()); i_this->mpMorf->calc(); return TRUE; } @@ -1067,8 +1105,14 @@ static BOOL daAM_Delete(am_class* i_this) { for (int i = 0; i < 4; i++) { i_this->mSmokeCbs[i].remove(); } +#if VERSION == VERSION_DEMO + if (i_this->m033C_demo) { + i_this->m033C_demo->becomeInvalidEmitter(); + i_this->m033C_demo = NULL; + } +#else i_this->mSmokeCbs[2].remove(); - +#endif if (i_this->m033C) { i_this->m033C->becomeInvalidEmitter(); i_this->m033C = NULL; diff --git a/src/d/actor/d_a_am2.cpp b/src/d/actor/d_a_am2.cpp index 17bee58cc..f56d80536 100644 --- a/src/d/actor/d_a_am2.cpp +++ b/src/d/actor/d_a_am2.cpp @@ -365,8 +365,7 @@ static BOOL body_atari_check(am2_class* i_this) { /* 00000F54-00000FF4 .text BG_check__FP9am2_class */ static void BG_check(am2_class* i_this) { - f32 halfHeight = 40.0f + REG8_F(12); - i_this->mAcchCir.SetWall(halfHeight, i_this->mAcchRadius); + i_this->mAcchCir.SetWall(40.0f + REG8_F(12), i_this->mAcchRadius); i_this->current.pos.y -= i_this->mCorrectionOffsetY; i_this->old.pos.y -= i_this->mCorrectionOffsetY; diff --git a/src/d/actor/d_a_npc_kk1.cpp b/src/d/actor/d_a_npc_kk1.cpp index 9aa6392b2..d64d23ba4 100644 --- a/src/d/actor/d_a_npc_kk1.cpp +++ b/src/d/actor/d_a_npc_kk1.cpp @@ -4,594 +4,2994 @@ // #include "d/actor/d_a_npc_kk1.h" +#include "SSystem/SComponent/c_counter.h" +#include "c/c_dylink.h" +#include "d/actor/d_a_obj_roten.h" +#include "d/actor/d_a_player.h" +#include "d/actor/d_a_swc00.h" +#include "d/actor/d_a_tama.h" +#include "d/d_cc_uty.h" +#include "d/d_com_inf_game.h" #include "d/d_procname.h" #include "d/d_priority.h" +#include "d/d_s_play.h" +#include "d/d_snap.h" +#include "f_op/f_op_actor_mng.h" +#include "weak_bss_936_to_1036.h" //Needed to align bss + +#define SHORT2DEG_ANGLE(deg) ((deg) / (65536.0f / 360.0f)) +#define LINKPOS (dComIfGp_getLinkPlayer()->current.pos) + + + + + + + +static daNpc_Kk1_HIO_c l_HIO; + +#define L_CHECK_SZ 20 +fopAc_ac_c* l_check_inf[L_CHECK_SZ]; +s32 l_check_wrk; + + +inline int daNpc_Kk1_c::getSWbit() { + return this->mSWbit; +} + + /* 000000EC-00000150 .text __ct__15daNpc_Kk1_HIO_cFv */ daNpc_Kk1_HIO_c::daNpc_Kk1_HIO_c() { - /* Nonmatching */ + + static daNpc_Kk1_c::prm_tbl a_prm_tbl[] = {0x2000251C, 0xE002DAE4, 0x00002AF8, 0x0000D508, 0x064004B0, 150.0, 0x000000D2, 0x0028005A, +0x001E0014, 0x00041000, 40.0, 3.0, 0x3E4CCCCD, 0.5, 13.0, 1.0, +0x3DCCCCCD, 10.0, 1.0, 0x3E4CCCCD, 1000.0}; + memcpy(&field_0xC,a_prm_tbl,0x54); + mNo = -1; + field_0xA = -1; + return; } +char* l_evn_tbl[] = { + "run_start", "run_start_2", "catch", "get_empty_btl", + "bye", "otoboke", "runaway", "bye_2", +}; + +//TODO: Declare somewhere else? +enum EVENT_NAME { + RUN_START, + RUN_START_2, + CATCH, + GET_EMPTY_BTL, + BYE, + OTOBOKE, + RUNAWAY, + BYE_2, +}; + + /* 00000198-000001E4 .text nodeCB_Head__FP7J3DNodei */ -static BOOL nodeCB_Head(J3DNode*, int) { - /* Nonmatching */ +static BOOL nodeCB_Head(J3DNode* i_node, int i_arg1) { + daNpc_Kk1_c* temp_r3; + + if (i_arg1 == 0) { + temp_r3 = (daNpc_Kk1_c*)j3dSys.mModel->getUserArea(); + if (temp_r3 != NULL) { + temp_r3->_nodeCB_Head(i_node, j3dSys.mModel); + } + } + return 1; } /* 000001E4-00000304 .text _nodeCB_Head__11daNpc_Kk1_cFP7J3DNodeP8J3DModel */ -void daNpc_Kk1_c::_nodeCB_Head(J3DNode*, J3DModel*) { - /* Nonmatching */ +void daNpc_Kk1_c::_nodeCB_Head(J3DNode* i_node, J3DModel* i_model) { + + static cXyz a_eye_pos_off(14.0f,18.0f,0.0f); + u16 joint_number = ((J3DJoint*)(i_node))->getJntNo(); + mDoMtx_stack_c::copy(i_model->getAnmMtx(joint_number)); + mDoMtx_stack_c::multVecZero(&field_0x750); + mDoMtx_stack_c::multVec(&a_eye_pos_off,&field_0x72C); + mDoMtx_stack_c::XrotM(m_jnt.getHead_y()); + mDoMtx_stack_c::ZrotM(-m_jnt.getHead_x()); + cMtx_copy(mDoMtx_stack_c::get(),j3dSys.mCurrentMtx); + i_model->setAnmMtx(joint_number, mDoMtx_stack_c::now); + } + /* 00000340-0000038C .text nodeCB_BackBone__FP7J3DNodei */ -static BOOL nodeCB_BackBone(J3DNode*, int) { - /* Nonmatching */ +static BOOL nodeCB_BackBone(J3DNode *i_node, int param_2) { + + if (param_2 == 0) { + J3DModel* model = (J3DModel*)j3dSys.mModel; + if ((J3DModel *)(j3dSys.mModel)->getUserArea() != (J3DModel *)0x0) { + ((daNpc_Kk1_c*)(model->getUserArea()))->_nodeCB_BackBone(i_node,model); + + } + } + return 1; } /* 0000038C-0000042C .text _nodeCB_BackBone__11daNpc_Kk1_cFP7J3DNodeP8J3DModel */ -void daNpc_Kk1_c::_nodeCB_BackBone(J3DNode*, J3DModel*) { - /* Nonmatching */ +void daNpc_Kk1_c::_nodeCB_BackBone(J3DNode* i_node, J3DModel* i_model) { + u16 joint_number = static_cast(i_node)->getJntNo(); + MTXCopy(i_model->getAnmMtx(joint_number), mDoMtx_stack_c::now); + mDoMtx_stack_c::XrotM(this->m_jnt.getBackbone_y()); + mDoMtx_stack_c::ZrotM(-this->m_jnt.getBackbone_x()); + + MTXCopy(mDoMtx_stack_c::now, j3dSys.mCurrentMtx); + i_model->setAnmMtx(joint_number, mDoMtx_stack_c::now); } /* 0000042C-0000044C .text CheckCreateHeap__FP10fopAc_ac_c */ -static BOOL CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static int CheckCreateHeap(fopAc_ac_c* i_npc) { + + return ((daNpc_Kk1_c*)i_npc)->CreateHeap(); + } + + /* 0000044C-000004EC .text searchActor_SWC00__FPvPv */ -void searchActor_SWC00(void*, void*) { - /* Nonmatching */ +void* searchActor_SWC00(void* i_swc, void* i_kk1) { + //swc00_class* swc_act = static_cast(i_swc); + swc00_class* swc_act = (swc00_class*)(i_swc); + daNpc_Kk1_c* kk1_act = (daNpc_Kk1_c*)(i_kk1); + if ( + l_check_wrk < L_CHECK_SZ && fopAc_IsActor(swc_act) && + fopAcM_GetName(swc_act) == PROC_SWC00 && daSwc00_getType(swc_act) == 0 && + daSwc00_getSw1No(swc_act) == kk1_act->getSWbit() + ){ + l_check_inf[l_check_wrk] = swc_act; + l_check_wrk++; + } + return NULL; } + /* 000004EC-00000598 .text init_KK1_0__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::init_KK1_0() { - /* Nonmatching */ +bool daNpc_Kk1_c::init_KK1_0() { + + + + //Some event Daytime Sidequest not finished + if ((dComIfGs_isEventBit(0x2D01)) && ((dKy_daynight_check() == 0) || (dComIfGs_isEventBit(0xe08) == 0))) { + + set_action(&daNpc_Kk1_c::wait_action1,NULL); + + return true; + } + else { + return false; + } + } + + + + +extern dCcD_SrcCyl dNpc_cyl_src; + /* 00000598-000007B0 .text createInit__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::createInit() { - /* Nonmatching */ +bool daNpc_Kk1_c::createInit() { + + for (int i = 0; i < 8; ++i) { + mEvtIDTbl[i] = dComIfGp_evmng_getEventIdx(l_evn_tbl[i], 0xFF); + } + mEventCut.setActorInfo2("Kk1", this); + mSWbit = base.mParameters >> 8; + + u8 params = base.mParameters >> 0x10; + if (params != 0xff) { + mRunPath.setInf(params, current.roomNo, true); + if (mRunPath.mPath != NULL) { + fopAcM_OffStatus(this, fopAcStts_NOCULLEXEC_e); + set_pthPoint(0); + } + else { + return FALSE; + } + } + if (mRunPath.mPath == NULL) { + return FALSE; + } + + attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e; + + switch(field_0x820){ + case 0: + break; + } + + attention_info.distances[1] = 0xA9; + attention_info.distances[3] = 0xA9; + + gravity = -4.5f; + field_0x81A = 0xC; + + + bool control=0; + switch(field_0x820){ + case 0: + control = init_KK1_0(); + break; + default: + control = 0; + break; + } + if(control == 0){ + return false; + } + + + mAngle = current.angle; + shape_angle = mAngle; + mStts.Init(0xFF, 0xff, this); + mCyl.SetStts(&mStts); + mCyl.Set(dNpc_cyl_src); + mObjAcch.CrrPos(*dComIfG_Bgsp()); + play_animation(); + tevStr.mRoomNo = dComIfG_Bgsp()->GetRoomId(mObjAcch.m_gnd); + tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mObjAcch.m_gnd); + mpMorf->setMorf(0.0f); + setMtx(true); + return true; + + } /* 000007B0-00000918 .text play_animation__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::play_animation() { - /* Nonmatching */ + + cXyz floatload; + u32 mtl_snd_id = 0; + play_btp_anm(); + + + if (mObjAcch.ChkGroundHit() != 0) { + mtl_snd_id = dComIfG_Bgsp()->GetMtrlSndId(mObjAcch.m_gnd); + } + + field_0x7B2 = mpMorf->play(&eyePos,mtl_snd_id,dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + if(mpMorf->getFrame() < mAnimeFrame){ + field_0x7B2 = 1; + } + + mAnimeFrame = mpMorf->getFrame(); + + switch(field_0x81A){ + case 8: + if (mpMorf->checkFrame(4.0) != 0) { + + floatload.set(0.0,-50.0,-15.0); + setBikon(floatload); + } + break; + case 9: + if (mpMorf->checkFrame(4.0) != 0) { + + floatload.set(0.0,-50.0,0.0); + setBikon(floatload); + } + break; + } + play_eff_anm(); + return; } /* 00000918-00000A98 .text setMtx__11daNpc_Kk1_cFb */ -void daNpc_Kk1_c::setMtx(bool) { - /* Nonmatching */ +void daNpc_Kk1_c::setMtx(bool param_1) { + + mpMorf->mpModel->setBaseScale(scale); + PSMTXTrans(mDoMtx_stack_c::get(),current.pos.x,current.pos.y,current.pos.z); + mDoMtx_stack_c::ZXYrotM(mAngle); + mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + mpMorf->calc(); + cXyz someFloat1(0.0,120.0,30.0); + field_0x7F0.entry(field_0x808->getModelData(),field_0x804); + PSMTXTrans(mDoMtx_stack_c::get(),current.pos.x,current.pos.y,current.pos.z); + mDoMtx_stack_c::YrotM(current.angle.y); + mDoMtx_stack_c::transM(someFloat1.x,someFloat1.y,someFloat1.z); + + field_0x808->setBaseTRMtx(mDoMtx_stack_c::get()); + + (field_0x808->calc)(); + mDoExt_bckAnmRemove(field_0x808->getModelData()); + flwAse(); + setAttention(param_1); + return; } /* 00000A98-00000AAC .text bckResID__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::bckResID(int) { - /* Nonmatching */ +int daNpc_Kk1_c::bckResID(int param_1) { + static const u32 a_resID_tbl[] = {9,10,11,12,4,5,6,7,1,2,3,8}; + return a_resID_tbl[param_1]; + } /* 00000AAC-00000AC0 .text btpResID__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::btpResID(int) { - /* Nonmatching */ +int daNpc_Kk1_c::btpResID(int param_1) { + + static const u32 a_resID_tbl_2[] = {0x00000011}; + return a_resID_tbl_2[param_1]; } /* 00000AC0-00000BC4 .text setBtp__11daNpc_Kk1_cFScb */ -void daNpc_Kk1_c::setBtp(signed char, bool) { - /* Nonmatching */ +bool daNpc_Kk1_c::setBtp(signed char param_1, bool param_2) { + + J3DAnmTexPattern *a_btp; + J3DModel* pJVar5 = mpMorf->getModel(); + if (param_1 < 0) { + return false; + } + else { + a_btp = (J3DAnmTexPattern*)dComIfG_getObjectIDRes(&mArcName,btpResID(param_1)); + JUT_ASSERT(0x234,a_btp != 0); //Line 564 + + field_0x819 = param_1; + mBtpFrame = 0; + field_0x6EE = 0; + return mBtpAnm.init(pJVar5->getModelData(),a_btp,1,0,1.0,0,-1,param_2,0) != 0; + } + } /* 00000BC4-00000BE4 .text init_texPttrnAnm__11daNpc_Kk1_cFScb */ -void daNpc_Kk1_c::init_texPttrnAnm(signed char, bool) { - /* Nonmatching */ +bool daNpc_Kk1_c::init_texPttrnAnm(signed char param_1, bool param_2) { + return setBtp(param_1, param_2); } /* 00000BE4-00000C80 .text play_btp_anm__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::play_btp_anm() { - /* Nonmatching */ + + + u8 frame_max = mBtpAnm.getBtpAnm()->getFrameMax(); + if ((field_0x819 != 0) || + (cLib_calcTimer(&field_0x6EE) == 0)) { + mBtpFrame += 1; + if (mBtpFrame >= frame_max) { + if (field_0x819 != 0) { + mBtpFrame = frame_max; + return; + + } + else { + field_0x6EE = cLib_getRndValue(0x3c,0x5a); + mBtpFrame = 0; + } + } + } + return; } /* 00000C80-00000CFC .text play_eff_anm__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::play_eff_anm() { - /* Nonmatching */ + + s16 temp_r5; + field_0x800 += 1; + if(field_0x800 >= 0x1E){ + field_0x800 = 0x1D; + } + temp_r5 = (short)field_0x7DC.getBtkAnm()->getFrameMax(); //TODO: It seems like the short cast is required here. + field_0x802 += 1; + + + if(field_0x802 >= temp_r5){ + field_0x802 = temp_r5 - 1; + } + temp_r5 = (short)field_0x7F0.getBckAnm()->getFrameMax(); + field_0x804 += 1; + if(field_0x804 >= temp_r5){ + field_0x804 = 0x3B; + } + return; + + + } /* 00000CFC-00000DDC .text setAnm_anm__11daNpc_Kk1_cFPQ211daNpc_Kk1_c9anm_prm_c */ -void daNpc_Kk1_c::setAnm_anm(daNpc_Kk1_c::anm_prm_c*) { - /* Nonmatching */ +void daNpc_Kk1_c::setAnm_anm(daNpc_Kk1_c::anm_prm_c* i_anm_ptr) { + + if (i_anm_ptr->field0 < 0 || field_0x81A == i_anm_ptr->field0) { + return; + } + + dNpc_setAnmIDRes(mpMorf,i_anm_ptr->fieldC,i_anm_ptr->field4,i_anm_ptr->field8,bckResID(i_anm_ptr->field0),0xFFFFFFFF,&mArcName); + field_0x81A = i_anm_ptr->field0; + delBikon(); + delAse(); + field_0x7BE = 1; + switch(field_0x81A){ + case 1: + setAse(); + field_0x804 = 0; + field_0x802 = 0; + field_0x800 = 0; + field_0x7BE = 0; + break; + } + this->field_0x7B2 = 0; + this->field_0x7B3 = 0; + this->mAnimeFrame = 0.0; + + + + + + + } + + + static daNpc_Kk1_c::anm_prm_c a_anm_prm_tblNUM[14] = { + {0,0,0,8.0,1.0,2}, + {1,0,0,8.0,1.0,2}, + {2,0,0,8.0,1.0,2}, + {3,0,0,8.0,1.0,2}, + {4,0,0,8.0,1.0,2}, + {5,0,0,8.0,1.0,2}, + {6,0,0,8.0,1.0,2}, + {7,0,0,8.0,1.0,2}, + {8,0,0,8.0,1.0,0}, + {9,0,0,8.0,1.0,0}, + {10,0,0,8.0,1.0,0}, + {11,0,0,8.0,1.0,0}, + {0,0,0,0.0,0.0,0}, + {0,0,0,0.0,0.0,0}, + + }; + static daNpc_Kk1_c::anm_prm_c a_anm_prm_tbl2[8] = { +0xFF,0xFF,0000, 0.0, 0.0, 0xFFFFFFFF, +0x00,00,0000, 8.0, 1.0, 0x00000002, +0xFF,0xFF,0000, 0.0, 0.0, 0xFFFFFFFF, +0x03,00,0000, 8.0, 1.0, 0x00000002, +0x00,00,0000, 8.0, 1.0, 0x00000002, +0xFF,0xFF,0000, 0.0, 0.0, 0xFFFFFFFF, +0x00,00,0000, 8.0, 1.0, 0x00000002, +0x00,00,0000, 8.0, 1.0, 0x00000002, + + }; + static daNpc_Kk1_c::anm_prm_c a_anm_prm_tbl3[13] = { + {0,0,0,8.0,1.0,2}, + {1,0,0,8.0,1.0,2}, + {2,0,0,8.0,1.0,2}, + {3,0,0,8.0,1.0,2}, + {4,0,0,8.0,1.0,2}, + {5,0,0,8.0,1.0,2}, + {6,0,0,8.0,1.0,2}, + {7,0,0,8.0,1.0,2}, +8,00,0000, 8.0, 1.0, 0, +9,00,0000, 8.0, 1.0, 0, +10,00,0000, 8.0, 1.0, 0, +10,00,0000, 8.0, 1.0, 0, +11,00,0000, 8.0, 1.0, 0, + + + }; + + /* 00000DDC-00000E4C .text setAnm_NUM__11daNpc_Kk1_cFii */ -void daNpc_Kk1_c::setAnm_NUM(int, int) { - /* Nonmatching */ +void daNpc_Kk1_c::setAnm_NUM(int i_tblIdx, int param_2) { + + if (param_2 != 0) { + init_texPttrnAnm(a_anm_prm_tblNUM[i_tblIdx].field1,true); + } + setAnm_anm(&a_anm_prm_tblNUM[i_tblIdx]); + return; + + } /* 00000E4C-00000EB8 .text setAnm__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::setAnm() { - /* Nonmatching */ + + init_texPttrnAnm(a_anm_prm_tbl2[field_0x81C].field1,true); + setAnm_anm(&a_anm_prm_tbl2[field_0x81C]); + return; + } /* 00000EB8-00000EBC .text chngAnmTag__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::chngAnmTag() { - /* Nonmatching */ + return; } /* 00000EBC-00000EC0 .text ctrlAnmTag__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::ctrlAnmTag() { - /* Nonmatching */ + return; } /* 00000EC0-00000FA0 .text chngAnmAtr__11daNpc_Kk1_cFUc */ -void daNpc_Kk1_c::chngAnmAtr(unsigned char) { - /* Nonmatching */ +void daNpc_Kk1_c::chngAnmAtr(unsigned char i_anmNum) { + fopAc_ac_c* found_actor; + int search_failed; + switch(mCurrMsgNo){ + case 0x1CAC: //Take off! Go away! + found_actor = searchByID(mPartnerProcID,&search_failed); + if(found_actor != NULL && search_failed == 0){ + field_0x738 = found_actor->current.pos; + field_0x738.y += l_HIO.field_0x20 + 200.0f; + mWhereToLook = 2; + mLockBodyRotation = 1; + field_0x7A2 = l_HIO.field_0x2E; + } + break; + } + if((i_anmNum == mAnimationNum) || (i_anmNum > 0xD)){ + return; + } + + mAnimationNum = i_anmNum; + setAnm_ATR(); + + return; + } /* 00000FA0-00001080 .text ctrlAnmAtr__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::ctrlAnmAtr() { - /* Nonmatching */ + + switch(mAnimationNum){ + case 8: + if ((field_0x7B2 != '\0')) { + current.angle.y += 0x8000; + setAnm_NUM(0,1); + mpMorf->setMorf(0.0); + mAnimationNum = 0; + } + case 9: + case 12: + return; + case 11: + if (this->field_0x7B2 != '\0') { + setAnm_NUM(6,1); + this->mAnimationNum = 6; + return; + } + break; + case 10: + if(field_0x7B2 != 0){ + setAnm_NUM(0,1); + mAnimationNum = 0; + } + + break; + } } /* 00001080-000010E4 .text setAnm_ATR__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::setAnm_ATR() { - /* Nonmatching */ + + init_texPttrnAnm(a_anm_prm_tbl3[mAnimationNum].field1,true); + setAnm_anm(((daNpc_Kk1_c::anm_prm_c *)(&a_anm_prm_tbl3[mAnimationNum]))); + return; } /* 000010E4-000011A0 .text anmAtr__11daNpc_Kk1_cFUs */ -void daNpc_Kk1_c::anmAtr(unsigned short) { - /* Nonmatching */ +void daNpc_Kk1_c::anmAtr(unsigned short param_1) { + + u8 uVar1; + switch(param_1){ + case 6: + + if (field_0x822 == 0) { + chngAnmAtr(dComIfGp_getMesgAnimeAttrInfo()); + field_0x822 += 1; + } + uVar1 = dComIfGp_getMesgAnimeTagInfo(); + if (( uVar1 != 0xFF) && + (uVar1 != field_0x818)) { + dComIfGp_clearMesgAnimeTagInfo(); + field_0x818 = uVar1; + chngAnmTag(); + } + break; + case 14: + field_0x822 = 0; + break; + } + ctrlAnmAtr(); + ctrlAnmTag(); //Does nothing + } /* 000011A0-0000149C .text next_msgStatus__11daNpc_Kk1_cFPUl */ -void daNpc_Kk1_c::next_msgStatus(unsigned long*) { - /* Nonmatching */ +u16 daNpc_Kk1_c::next_msgStatus(unsigned long* param_1) { + + s32 msg_selection; + + u16 message_outcome = 0xF; //0xF = Continue. 0x10 = Run Away. + switch (*param_1) { //TODO: Make Enum. + case 0x1C85: //Oh! Hi! We meet again! ...What?! Of course! Honestly! I'm working! How dare you suggest that! I'm done with all that sneaking around in the dark. In fact, I head off to a faraway island to work in the evenings now, so I won't be seeing you at night anymore! + *param_1 = 0x1C86; + break; + case 0x1C86: //All right? Well, all right. Now, you're keeping me from doing my job, so could you please step aside? + *param_1 = 0x1CA7; + break; + case 0x1CA7: //This way to the only stall with extra-fun, happy things for sale! + *param_1 = 0x1CA8; + break; + case 0x1C88: //Hey, you! Come on! Use your head! You can't just stand there like that! You're in my way! Can't you move? + *param_1 = 0x1C89; + break; + case 0x1C89: //Oops! That won't do! That won't do at all! Already I'm back to my old habits... I'm terribly sorry! Really, I am! + *param_1 = 0x1C8A; + break; + case 0x1C8A: //Umm... + *param_1 = 0x1CA9; + break; + case 0x1C8B: //Shh! Shhh! + *param_1 = 0x1CAC; //Take off! Go away! + field_0x7B8 = 1; + break; + case 0x1C8D: //Y-Y-You startled me...! Wh-Wh-What do you want? M-M-My heart is racing! You scared me! + *param_1 = 0x1C8E; + break; + case 0x1C8E: //Wait... Are you...? ...the kind of creep who goes around at night scaring people?! That's just plain mean! + *param_1 = 0x1C8F; + break; + case 0x1C8F: //Just who do you think you are, anyway?! + switch (mpCurrMsg->mSelectNum) { + case 0: //An ally of justice! + *param_1 = 0x1C90; + break; + case 1: //A night-creeping rascal! + *param_1 = 0x1CA5; + mMuuruBadResponse += 1; + break; + } + break; + case 0x1CA5: //...Hmph! That's not funny, you know. I can't believe you'd try to make a joke out of this! You're an awful boy! + *param_1 = 0x1C8F; + break; + case 0x1C90: //A...what!?! An... An ally of justice?! I-I'm not a thief! I swear! I haven't stolen anything! Well, yet. Please let me go! It was just an impulse! That's all! Just a bad idea! + *param_1 = 0x1C91; + break; + case 0x1C91: //...Why won't you say anything? Does this mean you're mad at me? Could you at least listen to the circumstances in my life that led up to this moment? Please, you owe me that much! + switch (mpCurrMsg->mSelectNum) { + case 0: //Sure + *param_1 = 0x1C93; + break; + case 1: //Quiet, you! + *param_1 = 0x1C92; + mMuuruBadResponse += 1; + break; + } + break; + case 0x1C92: //...What?! Why, that's just cruel! You awful boy! Sometimes there are odd circumstances that make people do what they do! How could you be so close-minded? + *param_1 = 0x1C91; + break; + case 0x1C93: //I...was once the richest little debutante in this town. Did you know that? But one day, a monstrous bird came and took me away to a terrible place called the Forsaken Fortress, where I was locked up and held captive. Oh, it was awful! My father spent every last Rupee in his coffers in an attempt to get me rescued. + *param_1 = 0x1C94; + break; + case 0x1C94: //That's right! Every last bit of our family fortune, gone... That was when my life of poverty began. Now, every day, from morning until night, I'm busy working for the open-air shop. So, as you can see, at least I'm trying to settle into my poor lifestyle. Doesn't that just tug at your heart strings? What do you say about the tragic events in my pitiable life? + switch (mpCurrMsg->mSelectNum) { + case 0: //That's terrible + *param_1 = 0x1C96; + break; + case 1: //That's kind of funny + *param_1 = 0x1C95; + mMuuruBadResponse += 1; + break; + } + break; + case 0x1C95: //...... + *param_1 = 0x1C96; + break; + case 0x1C96: //And to make matters worse, for some reason I still can't figure out, that slob Maggie, who was the poorest girl in town, suddenly got filthy rich! Maggie, of all people! It makes me so mad that I want to do something terrible! Grrrr! + *param_1 = 0x1C97; + break; + case 0x1C97: //Do you understand my plight? + switch (mpCurrMsg->mSelectNum) { + case 0: //Very well + *param_1 = 0x1C98; + break; + case 1: //Not at all + *param_1 = ((mMuuruBadResponse > 1) ? 1 : 2)+0x1C99; + } + break; + case 0x1C98: //...Then you'll let me go?! + msg_selection = mpCurrMsg->mSelectNum; + switch ((s32) msg_selection) { + case 0: //Unfortunately, no + *param_1 = 0x1C99; + break; + case 1: //I'll let you go + message_outcome = 0x10; + break; + } + break; + case 0x1C99: //But...why not?!? + switch (mpCurrMsg->mSelectNum) { + case 0: //Because I'm honest + *param_1 = ((mMuuruBadResponse > 1) ? 1 : 2)+0x1C9B; + break; + case 1: //Because I like you + *param_1 = 0x1C9A; + } + break; + //0x1C9A ...Hah! You awful boy! I was honest with you, too! And now I'm just angry! Good-bye! + case 0x1C9B: //...Ah hee hee hee hee! I'm sorry! I guess it was a little too complicated for a KID to understand! + *param_1 = 0x1C9D; + break; + //0x1C9C ...Oh. That's...really annoying! You know? I just remembered! I have something very important that I'm supposed to be doing. I'll be RIGHT back, so can you just wait here for me? It'll only take a second! + case 0x1C9D: //It's true... I know I'm quibbling over nothing... But being so poor weakens a person's very soul... But...it's time I quit making silly excuses for myself! + *param_1 = 0x1C9E; + break; + case 0x1C9E: //Thank you so much... + *param_1 = 0x1CAA; + break; + case 0x1CAA: //Thanks to you, I didn't have to sink down to the level of a common thief. I will never do anything like that again! Ahhhh... What an amazing feeling! I've let all of my worries out of my heart. Wow! I actually feel refreshed! + *param_1 = 0x1C9F; + break; + case 0x1C9F: //Let me at least thank you. Please take this! + message_outcome = 0x10; + break; + case 0x1CA1: //Don't look at me like that! I didn't steal it! It washed up on the shore, so I picked it up. Don't tease me like that! It's a tiny bottle made of crystal-clear glass... It's so beautiful. I wish my soul could be that beautiful... + *param_1 = 0x1CA2; + break; + case 0x1CA2: //Oh! What am I saying? When you live in poverty, you can say the cheesiest things without blinking an eye. ...Hmph! + *param_1 = 0x1CA3; + break; + case 0x1CA3: //So, umm...I guess I should go soon. My father will start worrying. + *param_1 = 0x1CA4; + break; + case 0x1CA4: //Good-bye, little ally of justice! ...and good luck to you. + *param_1 = 0x1CAB; //'Bye! Thanks for tonight! + break; + default: + message_outcome = 0x10; + break; + } + return message_outcome; } /* 0000149C-00001534 .text getMsg_KK1_0__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::getMsg_KK1_0() { - /* Nonmatching */ +u32 daNpc_Kk1_c::getMsg_KK1_0() { + + if (dKy_daynight_check() == 1) { //If Night + if (field_0x7BA) { + + field_0x7BA = 0; + return 0x1CA1; //Don't look at me like that! I didn't steal it! It washed up on the shore, so I picked it up. Don't tease me like that! It's a tiny bottle made of crystal-clear glass... It's so beautiful. I wish my soul could be that beautiful... + } + else { + return 0x1C8B; //Shh! Shhh! + } + } + else { //If Day + if (!dComIfGs_isEventBit(0xE08)) { //If Sidequest is available + if(dComIfGs_isEventBit(0xE10)){ //If working at shop + return 0x1C87; //This way to the only stall with extra-fun happy things for sale! Your happiness is guaranteed! Fun awaits you! Step right up! Stop by! + }else{ //If walking + return 0x1C88; //Hey, you! Come on! Use your head! You can't just stand there like that! You're in my way! Can't you move? + } + } + else { + return 0x1C85; //Oh! Hi! We meet again! ...What?! Of course! Honestly! I'm working! How dare you suggest that! I'm done with all that sneaking around in the dark. In fact, I head off to a faraway island to work in the evenings now, so I won't be seeing you at night anymore! + } + } } /* 00001534-00001570 .text getMsg__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::getMsg() { - /* Nonmatching */ +u32 daNpc_Kk1_c::getMsg() { + u32 result = 0; + switch((int)field_0x820){ + case 0: + result = getMsg_KK1_0(); + break; + } + return result; } /* 00001570-000015FC .text eventOrder__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::eventOrder() { - /* Nonmatching */ -} + char event_state = field_0x81B; //Event state? + if ((event_state == 1) || (event_state == 2)) { + eventInfo.onCondition(dEvtCnd_CANTALK_e); + if(field_0x81B == 1){ + fopAcM_orderSpeakEvent(this); + } + }else if (event_state >= 0x03){ + mEvtIDIdx = (event_state - 3); + fopAcM_orderOtherEventId(this,mEvtIDTbl[mEvtIDIdx],0x00ff,0xffff,0,1); + } +} /* 000015FC-000016DC .text checkOrder__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::checkOrder() { - /* Nonmatching */ + + if(eventInfo.checkCommandDemoAccrpt()){ + if(dComIfGp_evmng_startCheck(mEvtIDTbl[mEvtIDIdx]) && field_0x81B >= 0x03){ + switch(mEvtIDIdx){ + case BYE: + setAnm_NUM(0,1); + break; + case GET_EMPTY_BTL: //TODO: Improve default case + case OTOBOKE: + default: + break; + } + + field_0x81B = 0; + mAnimationNum = -1; + field_0x818 = -1; + }; + + } + else{ + if((checkCommandTalk())&&((field_0x81B == 1) ||(field_0x81B == 2))){ + field_0x81B = 0; + field_0x7C3 = 1; + } + } + } /* 000016DC-00001774 .text chk_talk__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::chk_talk() { - /* Nonmatching */ +bool daNpc_Kk1_c::chk_talk() { + bool o_return; + if(dComIfGp_event_chkTalkXY()){ + o_return = true; + if(dComIfGp_evmng_ChkPresentEnd() != 0){ + field_0x7B4 = dComIfGp_event_getPreItemNo(); + o_return = true; + }else{ + o_return = false; + } + }else{ + field_0x7B4 = -1; + o_return = true; + } + return o_return; } /* 00001774-000017B4 .text chk_parts_notMov__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::chk_parts_notMov() { - /* Nonmatching */ +bool daNpc_Kk1_c::chk_parts_notMov() { + bool o_return = false; + if((mLookBackHeadY != m_jnt.getHead_y())|| + (mLookBackBackboneY != m_jnt.getBackbone_y())|| + (mLookBackAngleY != current.angle.y)){ + o_return = true; + } + return o_return; + } /* 000017B4-00001808 .text searchByID__11daNpc_Kk1_cFUiPi */ -void daNpc_Kk1_c::searchByID(fpc_ProcID, int*) { - /* Nonmatching */ +fopAc_ac_c* daNpc_Kk1_c::searchByID(fpc_ProcID i_actor, int* i_searchFailed) { + fopAc_ac_c *search_actor; + search_actor = NULL; + *i_searchFailed = 0; + if(!fopAcM_SearchByID(i_actor,&search_actor)){ + *i_searchFailed = 1; + } + return search_actor; } + + + /* 00001808-000018B8 .text partner_search_sub__11daNpc_Kk1_cFPFPvPv_Pv */ -void daNpc_Kk1_c::partner_search_sub(void* (*)(void*, void*)) { - /* Nonmatching */ +bool daNpc_Kk1_c::partner_search_sub(void* (*param_1)(void*,void*)) { + + bool o_return = false; + mPartnerProcID = -1; + l_check_wrk = 0; + + for(int i = 0; i != 0x14; i++){ + l_check_inf[i] = 0x0000; + } + fpcEx_Search(*param_1, this); + if(l_check_wrk != 0){ + mPartnerProcID = fopAcM_GetID(l_check_inf[0]); + o_return = true; + + } + + return o_return; } /* 000018B8-00001924 .text partner_search__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::partner_search() { - /* Nonmatching */ + + bool found_partner; + if(field_0x821 == 1){ + + switch(field_0x820){ + + + case 0: + found_partner = partner_search_sub(searchActor_SWC00); + break; + default: + found_partner = 1; + } + if(found_partner){ + field_0x821 += 1; + } + } + return; } + /* 00001924-00001B10 .text lookBack__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::lookBack() { - /* Nonmatching */ + + mLookBackHeadY = m_jnt.getHead_y(); + mLookBackBackboneY = m_jnt.getBackbone_y(); + mLookBackAngleY = current.angle.y; + cXyz vec1; + cXyz vec2 = current.pos; + vec2.y = eyePos.y; + + vec1.setall(0.0); + + int Int1; + fopAc_ac_c *pActor; + cXyz* vecPtr1 = NULL; + s16 targetY = current.angle.y; + s8 state = mWhereToLook; + bool someBool = mLockBodyRotation; + switch(state){ + case 1: //Look ahead + field_0x738 = dNpc_playerEyePos(-20.0); + vec1 = field_0x738; + vecPtr1 = &vec1; + break; + case 2: //Look in same direction? + vec1 = field_0x738; + vecPtr1 = &vec1; + break; + case 3: //?? + targetY = field_0x7AC; + break; + case 4: //?? + pActor = searchByID(field_0x700,&Int1); + if (pActor != NULL && Int1 == 0){ + field_0x738 = pActor->current.pos; + field_0x738.y = pActor->eyePos.y; + vec1 = field_0x738; + vecPtr1 = &vec1; + } + break; + case 5: //Kyoroyoro + kyorokyoro(); + vec1 = field_0x738; + vecPtr1 = &vec1; + break; + } + m_jnt.lookAtTarget_2(¤t.angle.y,vecPtr1,vec2,targetY,l_HIO.field_0x1E,someBool); + return; + } /* 00001B10-00001B90 .text chkAttention__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::chkAttention() { - /* Nonmatching */ +bool daNpc_Kk1_c::chkAttention() { + fopAc_ac_c* npcPtr; + if((dComIfGp_getAttention().LockonTruth()) != 0){ + npcPtr = dComIfGp_getAttention().LockonTarget(0); + return this == npcPtr; + + }else{ + npcPtr = dComIfGp_getAttention().ActionTarget(0); + return this==npcPtr; + } + + } /* 00001B90-00001BE8 .text setAttention__11daNpc_Kk1_cFb */ -void daNpc_Kk1_c::setAttention(bool) { - /* Nonmatching */ +void daNpc_Kk1_c::setAttention(bool i_attn_flag) { + + f32 f1 = current.pos.z; + f32 f2 = current.pos.y + l_HIO.field_0x20; + f32 f3 = current.pos.x; + + attention_info.position.set(f3,f2,f1); + + + if(!field_0x778 && !i_attn_flag){return;} + + f2 = field_0x72C.z; + f1 = field_0x72C.y; + + eyePos.set(field_0x72C.x,f1,f2); + } /* 00001BE8-00001C70 .text decideType__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::decideType(int) { - /* Nonmatching */ +bool daNpc_Kk1_c::decideType(int) { + bool ret; + if(field_0x81F > 0){ + ret = true; + } + else{ + field_0x81F = 1; + field_0x820 = 0; + strcpy(&mArcName,"Kk"); + ret = false; + if((field_0x81F != -1) && (field_0x820 != -1)){ + ret = true; + } + } + return ret; } /* 00001C70-00001D10 .text cut_init_RUN_START__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_RUN_START(int) { - /* Nonmatching */ +void daNpc_Kk1_c::cut_init_RUN_START(int param_1) { + fopAc_ac_c* a_actor; + + int idArray[2]; + a_actor = searchByID(mPartnerProcID,idArray); + JUT_ASSERT(0x54F,a_actor != 0); //Line 1359 + + dComIfGp_event_setItemPartner(a_actor); + mRunPath.nextIdxAuto(); + return; + } /* 00001D10-00001DD0 .text cut_move_RUN_START__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_RUN_START() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_RUN_START() { + daPy_py_c* pdVar2; + cXyz runPoint = mRunPath.getPoint(mRunPath.mCurrPointIndex); + short target = cLib_targetAngleY(¤t.pos,&runPoint); + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.mScale,l_HIO.mMaxStep,0x80); + if(current.angle.y == target){ + pdVar2 = g_dComIfG_gameInfo.play.mpPlayer[2]; + pdVar2->mDemo.setDemoType(2); + pdVar2->mDemo.setDemoMode(1); + return true; + } + return false; + + } /* 00001DD0-00001E58 .text cut_init_RUN__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_RUN(int) { - /* Nonmatching */ +void daNpc_Kk1_c::cut_init_RUN(int param_1) { + + s32* somePtr = (s32*)dComIfGp_evmng_getMyIntegerP(param_1,"Timer"); + mTimer = -1; + if(somePtr != NULL){ + mTimer = *somePtr; + } + setAnm_NUM(4,1); + field_0x7B6 = 1; + field_0x815 = 2; + field_0x816 = 0; + return; } /* 00001E58-00001EAC .text cut_move_RUN__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_RUN() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_RUN() { + bool r3 = this->event_move(0); + + if (this->mTimer < 0) { + return r3; + } + return cLib_calcTimer(&this->mTimer) == 0; } /* 00001EAC-00001F08 .text cut_init_CATCH_START__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_CATCH_START(int) { - /* Nonmatching */ + + daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); + player->onPlayerNoDraw(); + setAnm_NUM(8,1); + mpMorf->setMorf(0.0); + } /* 00001F08-00001F2C .text cut_move_CATCH_START__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_CATCH_START() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_CATCH_START() { + if(field_0x7B2){ + field_0x778 = 0; + return true; + } + return false; } /* 00001F2C-00001FAC .text cut_init_CATCH_END__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_CATCH_END(int) { - /* Nonmatching */ +void daNpc_Kk1_c::cut_init_CATCH_END(int param_1) { + + + ((daPy_py_c*)dComIfGp_getLinkPlayer())->offPlayerNoDraw(); + current.angle.y += 0x8000; + setAnm_NUM(0,1); + mpMorf->setMorf(0.0); + mWhereToLook = 1; + mLockBodyRotation = 0; + m_jnt.mbTrn = true; + return; + + } /* 00001FAC-00001FB4 .text cut_move_CATCH_END__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_CATCH_END() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_CATCH_END() { + return true; } + /* 00001FB4-000022BC .text cut_init_TRN__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_TRN(int) { - /* Nonmatching */ + if(field_0x816 != 5){ + u8 currentPoint = mRunPath.mCurrPointIndex; + if((currentPoint >= 0x19)&&(currentPoint <= 0x28)){ + u8 sp58[] = { + 0x28, 0x27, 0x26, 0x25, + 0x24, 0x23, 0x22, 0x21, + 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, + }; + + mRunPath.mCurrPointIndex = sp58[currentPoint-0x19]; + mWhereToLook = 0; + mLockBodyRotation = 1; + return; + } + mRunPath.setNearPathIndx(&LINKPOS,100); + u8 linkPathIndex = mRunPath.mCurrPointIndex; + + mRunPath.setNearPathIndx(¤t.pos,100); + u8 muuruPathIndex = mRunPath.mCurrPointIndex; + s16 maxPoint = mRunPath.maxPoint(); + s16 midpointIndexFloat = maxPoint / 2.0f + 0.5f; + + if(muuruPathIndex > linkPathIndex){ + linkPathIndex += mRunPath.maxPoint(); + } + + s16 r26 = linkPathIndex - muuruPathIndex; + if(r26 > midpointIndexFloat){ + r26 -= maxPoint; + } + mRunPath.mCurrPointIndex = currentPoint; + bool bVar10 = false; + if (r26 == 0){ + cXyz muuruPoint = mRunPath.getPoint(mRunPath.mCurrPointIndex); + f32 muuruDistance = (current.pos - muuruPoint).absXZ(); + f32 linkDistance = (LINKPOS - muuruPoint).absXZ(); + + bVar10 = (linkDistance < muuruDistance); + } + if(r26 > 0 || bVar10){ + mRunPath.decIdxAuto(); + mRunPath.decIdxAuto(); + mRunPath.mbGoingForwards = (mRunPath.mbGoingForwards ^ 1); + } + } + mWhereToLook = 0; + mLockBodyRotation = 1; } /* 000022BC-00002364 .text cut_move_TRN__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_TRN() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_TRN() { + cXyz run_point = mRunPath.getPoint(mRunPath.mCurrPointIndex); + s16 target = cLib_targetAngleY(¤t.pos,&run_point); + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.mScale,l_HIO.mMaxStep,0x80); + if(current.angle.y == target){ + shape_angle.y = current.angle.y; + return true; + } + return false; + } /* 00002364-00002388 .text cut_init_BYE_START__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_BYE_START(int) { - /* Nonmatching */ +void daNpc_Kk1_c::cut_init_BYE_START(int i_unused_param) { + + ((daPy_py_c*)dComIfGp_getLinkPlayer())->onPlayerNoDraw(); + field_0x7BB = 1; + return; } /* 00002388-00002390 .text cut_move_BYE_START__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_BYE_START() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_BYE_START() { + return true; } /* 00002390-00002490 .text cut_init_BYE__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_BYE(int) { - /* Nonmatching */ +void daNpc_Kk1_c::cut_init_BYE(int param_1) { + + s32* timer_ptr = (s32*)dComIfGp_evmng_getMyIntegerP(param_1,"Timer"); + s32* delay_ptr = (s32*)dComIfGp_evmng_getMyIntegerP(param_1,"Delay"); + s32* prm_0_ptr = (s32*)dComIfGp_evmng_getMyIntegerP(param_1,"prm_0"); + + mTimer = 0x1E; + + if(timer_ptr != NULL){ + mTimer = *timer_ptr; + } + field_0x79A = -1; + if(delay_ptr != NULL){ + field_0x79A = *delay_ptr; + } + mPrm0 = 0; + if(prm_0_ptr != NULL){ + mPrm0 = *prm_0_ptr; + } + setAnm_NUM(4,1); + field_0x815 = 2; + field_0x7B6 = 1; + return; } /* 00002490-00002568 .text cut_move_BYE__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_BYE() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_BYE() { + //TODO: This can likely be written much better. + event_move(false); + if (field_0x79A > 0) { + if (cLib_calcTimer(&field_0x79A) == 0) { + ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS,-0x3217); //TODO: Doesn't explicitly appear in Debug Map. + daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); + player->mDemo.setDemoType(3); + player->mDemo.setParam0(0); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->mDemo.setDemoMode(daPy_demo_c::DEMO_UNK09_e); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->mDemo.setParam0(0x3217); + } + } + if (cLib_calcTimer(&mTimer) == 0) { + if (mPrm0 == 0) { + speedF = 0.0; + } + return true; + } + else { + return false; + } + } /* 00002568-000025C8 .text cut_init_BYE_CONTINUE__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_BYE_CONTINUE(int) { - /* Nonmatching */ + +void daNpc_Kk1_c::cut_init_BYE_CONTINUE(int i_staffIdx) { + s32* timer_ptr = (s32*)dComIfGp_evmng_getMyIntegerP(i_staffIdx,"Timer"); + mTimer = 0x1E; + if(timer_ptr != NULL){ + mTimer = *timer_ptr; + } + + return; + } /* 000025C8-00002620 .text cut_move_BYE_CONTINUE__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_BYE_CONTINUE() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_BYE_CONTINUE() { + + this->event_move(0); + if (cLib_calcTimer(&this->mTimer) == 0) { + speedF = 0.0; + return true; + } + return false; } /* 00002620-000026BC .text cut_init_BYE_END__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_BYE_END(int) { - /* Nonmatching */ +void daNpc_Kk1_c::cut_init_BYE_END(int i_unusedParam) { + + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeOriginalDemo(); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(daPy_demo_c::DEMO_UNK04_e); + s16 angle_y = cLib_targetAngleY(&LINKPOS,¤t.pos); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS, angle_y); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->offPlayerNoDraw(); + field_0x7C0 = 1; } /* 000026BC-000026C4 .text cut_move_BYE_END__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_BYE_END() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_BYE_END() { + return 1; + } /* 000026C4-000026C8 .text cut_init_PLYER_TRN__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_PLYER_TRN(int) { - /* Nonmatching */ + return; } /* 000026C8-000026D0 .text cut_move_PLYER_TRN__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_PLYER_TRN() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_PLYER_TRN() { + return true; } /* 000026D0-00002744 .text cut_init_OTOBOKE__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_OTOBOKE(int) { - /* Nonmatching */ + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(1); + player->changeOriginalDemo(); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(daPy_demo_c::DEMO_UNK04_e); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS, current.angle.y); + mTimer = 2; + return; } /* 00002744-00002798 .text cut_move_OTOBOKE__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_OTOBOKE() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_OTOBOKE() { + if ( cLib_calcTimer(&this->mTimer) == 0) { + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(1); + player->mDemo.setDemoType(2); + player->mDemo.setDemoMode(1); + return true; + } + return false; + } /* 00002798-000028A4 .text cut_init_PLYER_MOV__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_PLYER_MOV(int) { - /* Nonmatching */ +void daNpc_Kk1_c::cut_init_PLYER_MOV(int param_1) { + + cXyz cStack_1c; + s16 sVar3 = cLib_targetAngleY(¤t.pos,&LINKPOS); + sVar3 = sVar3 - current.angle.y; + + if(abs(sVar3)>0x2000){ + dComIfGp_evmng_setGoal(&LINKPOS); + }else{ + cXyz local_28; + local_28.setall(0.0); + s32 sVar1 = (s16)((sVar3>0)?0x2800:-0x2800); + int added = current.angle.y+sVar1; //TODO: Necessary unused instruction? + mDoMtx_stack_c::transS(current.pos.x,current.pos.y,current.pos.z); + mDoMtx_stack_c::YrotM(current.angle.y+sVar1); + local_28.z = 150.0; + mDoMtx_stack_c::multVec(&local_28,&cStack_1c); + dComIfGp_evmng_setGoal(&cStack_1c); + } + return; } /* 000028A4-000028AC .text cut_move_PLYER_MOV__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_PLYER_MOV() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_PLYER_MOV() { + return true; + } /* 000028AC-00002A40 .text cut_init_RUNAWAY_START__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_RUNAWAY_START(int) { - /* Nonmatching */ +void daNpc_Kk1_c::cut_init_RUNAWAY_START(int param_1) { + + + + s32* puVar2 = (s32*)dComIfGp_evmng_getMyIntegerP(param_1,"Timer"); + + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeOriginalDemo(); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(daPy_demo_c::DEMO_UNK04_e); + + short sVar4 = cLib_targetAngleY(&LINKPOS,¤t.pos); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS,sVar4); + s16 r29=cLib_targetAngleY(¤t.pos,&LINKPOS); + shape_angle.y = r29 + 0x8000; + + + + field_0x7BF = 1; + speedF = 0.0; + m_jnt.setHead_y(0); + m_jnt.setHead_x(0); + m_jnt.setBackBone_y(0); + m_jnt.setBackBone_x(0); + + mWhereToLook = 0; + if (abs((s16)(r29 - current.angle.y)) > 0x3800) { + current.angle.y = r29 + 0x8000; + + setAnm_NUM(8,1); + + } + else { + + cXyz local_28; + local_28.set(0.0,-50.0,0.0); + + mTimer = 0x26; + if (puVar2 != NULL) { + mTimer = *puVar2; + } + current.angle.y = r29; + setAnm_NUM(0,1); + + setBikon(local_28); + } + return; } /* 00002A40-00002AD0 .text cut_move_RUNAWAY_START__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_RUNAWAY_START() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_RUNAWAY_START() { + if(field_0x81A == 8){ + if(field_0x7B2 != 0){ + current.angle.y = cLib_targetAngleY(¤t.pos,&LINKPOS); + setAnm_NUM(0,1); + mpMorf->setMorf(0.0); + return true; + }else{ + return false; + } + }else{ + return true; + } } /* 00002AD0-00002B08 .text cut_init_RUNAWAY_END__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_RUNAWAY_END(int) { - /* Nonmatching */ + ((daPy_py_c*)dComIfGp_getLinkPlayer())->offPlayerNoDraw(); + field_0x7B6 = 0; + speedF = 0.0; + field_0x7C0 = 1; + return; } /* 00002B08-00002B10 .text cut_move_RUNAWAY_END__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_RUNAWAY_END() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_RUNAWAY_END() { + return true; } /* 00002B10-00002D98 .text privateCut__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::privateCut(int) { - /* Nonmatching */ +void daNpc_Kk1_c::privateCut(int param_1) { + enum { //TODO: Declare somewhere else? + RUN_START, + RUN, + CATCH_START, + CATCH_END, + TRN, + BYE_START, + BYE, + BYE_END, + PLYER_TRN, + OTOBOKE, + PLYER_MOV, + RUNAWAY_START, + RUNAWAY_END, + BYE_CONTINUE, + CUT_END = -1, + }; + static char* a_cut_tbl[14] = { + "RUN_START", + "RUN", + "CATCH_START", + "CATCH_END", + "TRN", + "BYE_START", + "BYE", + "BYE_END", + "PLYER_TRN", + "OTOBOKE", + "PLYER_MOV", + "RUNAWAY_START", + "RUNAWAY_END", + "BYE_CONTINUE", + + }; + int uVar2; + + bool uVar1; + + if (param_1 != -1) { + uVar2 = dComIfGp_evmng_getMyActIdx(param_1,a_cut_tbl,0xe,1,0); + mCutsceneIndex = uVar2; + if (mCutsceneIndex == CUT_END) { + dComIfGp_evmng_cutEnd(param_1); + } + else { + if (dComIfGp_evmng_getIsAddvance(param_1)) { + switch(mCutsceneIndex) { + case RUN_START: + cut_init_RUN_START(param_1); + break; + case RUN: + cut_init_RUN(param_1); + break; + case CATCH_START: + cut_init_CATCH_START(param_1); + break; + case CATCH_END: + cut_init_CATCH_END(param_1); + break; + case TRN: + cut_init_TRN(param_1); + break; + case BYE_START: + cut_init_BYE_START(param_1); + break; + case BYE: + cut_init_BYE(param_1); + break; + case BYE_END: + cut_init_BYE_END(param_1); + break; + case PLYER_TRN: + cut_init_PLYER_TRN(param_1); + break; + case OTOBOKE: + cut_init_OTOBOKE(param_1); + break; + case PLYER_MOV: + cut_init_PLYER_MOV(param_1); + break; + case RUNAWAY_START: + cut_init_RUNAWAY_START(param_1); + break; + case RUNAWAY_END: + cut_init_RUNAWAY_END(param_1); + break; + case BYE_CONTINUE: + cut_init_BYE_CONTINUE(param_1); + } + } + switch(this->mCutsceneIndex) { + case RUN_START: + uVar1 = cut_move_RUN_START(); + break; + case RUN: + uVar1 = cut_move_RUN(); + break; + case CATCH_START: + uVar1 = cut_move_CATCH_START(); + break; + case CATCH_END: + uVar1 = cut_move_CATCH_END(); + break; + case TRN: + uVar1 = cut_move_TRN(); + break; + case BYE_START: + uVar1 = cut_move_BYE_START(); + break; + case BYE: + uVar1 = cut_move_BYE(); + break; + case BYE_END: + uVar1 = cut_move_BYE_END(); + break; + case PLYER_TRN: + uVar1 = cut_move_PLYER_TRN(); + break; + case OTOBOKE: + uVar1 = cut_move_OTOBOKE(); + break; + case PLYER_MOV: + uVar1 = cut_move_PLYER_MOV(); + break; + case RUNAWAY_START: + uVar1 = cut_move_RUNAWAY_START(); + break; + case RUNAWAY_END: + uVar1 = cut_move_RUNAWAY_END(); + break; + case BYE_CONTINUE: + uVar1 = cut_move_BYE_CONTINUE(); + break; + default: + uVar1 = 1; + } + if ((uVar1 & 0xff) != 0) { + dComIfGp_evmng_cutEnd(param_1); + } + } + } + return; } /* 00002D98-00002DBC .text endEvent__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::endEvent() { - /* Nonmatching */ + dComIfGp_event_reset(); + mAnimationNum = 0xff; + field_0x818 = 0xff; + return; } /* 00002DBC-00002DF4 .text isEventEntry__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::isEventEntry() { - /* Nonmatching */ +int daNpc_Kk1_c::isEventEntry() { + return dComIfGp_evmng_getMyStaffId(mEventCut.getActorName(),NULL,0); + } /* 00002DF4-00002F80 .text event_proc__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::event_proc(int) { - /* Nonmatching */ +void daNpc_Kk1_c::event_proc(int param_1) { + + if (dComIfGp_evmng_endCheck(mEvtIDTbl[mEvtIDIdx])) { + s16 idx = mEvtIDIdx; + + + switch(idx){ + case 0: + case 1: + setStt(5); + break; + case 2: + + eventInfo.mEventId = -1; + switch(mCurrMsgNo) { + case 0x1c99: + case 0x1c9b: + case 0x1c9d: + case 0x1c9e: + break; + case 0x1c9a: + this->field_0x81B = 10; + this->mWhereToLook = 0; + this->mLockBodyRotation = 1; + break; + case 0x1c98: + case 0x1c9c: + this->field_0x81B = 7; + this->mWhereToLook = 1; + this->mLockBodyRotation = 1; + break; + case 0x1c9f: + setStt(6); + this->field_0x81B = 6; + this->mWhereToLook = 0; + this->mLockBodyRotation = 1; + break; + } + break; + + case 3: + + + field_0x81B = 1; + dComIfGs_onEventBit(0xE08); //Make sidequest available + field_0x7BA = 1; + break; + + case 4: + case 6: + case 7: + fopAcM_delete(this); + break; + case 5: + break; + + + } + endEvent(); + return; + } + if(mEventCut.cutProc() == 0){ + privateCut(param_1); + } } /* 00002F80-00002FB8 .text checkCommandTalk__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::checkCommandTalk() { - /* Nonmatching */ +bool daNpc_Kk1_c::checkCommandTalk() { + + bool retval = false; + + + if (eventInfo.checkCommandTalk()){ + retval = true; + if((field_0x816 == 5)&&(field_0x7A4 != 0)){ + retval = false; + } + } + return retval; + } /* 00002FB8-00003064 .text set_action__11daNpc_Kk1_cFM11daNpc_Kk1_cFPCvPvPv_iPv */ -void daNpc_Kk1_c::set_action(int (daNpc_Kk1_c::*)(void*), void*) { - /* Nonmatching */ +bool daNpc_Kk1_c::set_action(ActionFunc param_1, void* param_2) { + if(field_0x6F0 != param_1){ + if(field_0x6F0 != 0){ + field_0x821 = 9; + (this->*field_0x6F0)(param_2); + } + field_0x6F0 = param_1; + field_0x821 = 0; + (this->*field_0x6F0)(param_2); + } + return 1; } + + /* 00003064-0000311C .text setStt__11daNpc_Kk1_cFSc */ -void daNpc_Kk1_c::setStt(signed char) { - /* Nonmatching */ +void daNpc_Kk1_c::setStt(signed char param_1) { + + + s8 uVar1 = field_0x81C; + field_0x81C = param_1; + switch((s8)field_0x81C) { + + case 1: + case 4: + case 6: + case 7: + field_0x81B = 0; + field_0x7A4 = 0; + speedF = 0.0; + break; + case 2: + field_0x81B = 0; + mAnimationNum = 0xff; + field_0x818 = 0xff; + field_0x822 = 0; + field_0x7A2 = 0; + field_0x81D = uVar1; + break; + case 3: + field_0x81B = 0; + break; + + case 5: + field_0x81B = 0; + field_0x815 = 2; + field_0x816 = 0; + field_0x7B6 = 1; + break; + + case 0: + break; + + + } + setAnm(); + return; } /* 0000311C-000032D8 .text createTama__11daNpc_Kk1_cFf */ -void daNpc_Kk1_c::createTama(float) { - /* Nonmatching */ +void daNpc_Kk1_c::createTama(float param_1) { + + cXyz plrEyePos; + csXyz local_5c(0.0f,0.0f,0.0f); + + cXyz local_30 = eyePos; + local_30.y=15+eyePos.y; + plrEyePos = dNpc_playerEyePos(-20); + + + + f32 a = (plrEyePos-eyePos).absXZ(); //TODO: Unused abs call? + local_5c.y = cLib_targetAngleY(&local_30,&plrEyePos); + local_5c.x = cLib_targetAngleX(&local_30,&plrEyePos); + daTama_c* tama = (daTama_c *)fopAcM_fastCreate(0x1D6,0,&eyePos,fopAcM_GetRoomNo(this),&local_5c,NULL,0xFF,NULL,NULL); + fpc_ProcID procID; + if (tama != NULL) { + if (this != NULL) { + procID = base.mBsPcId; + + } + else { + procID = -1; + } + tama->setPartnerID(procID); + tama->setDis(param_1); + tama->setSpd(50); + } + return; } /* 000032D8-0000345C .text chk_areaIN__11daNpc_Kk1_cFf4cXyz */ -void daNpc_Kk1_c::chk_areaIN(float, cXyz) { - /* Nonmatching */ +bool daNpc_Kk1_c::chk_areaIN(float i_distanceThreshold, cXyz i_position) { + + float distanceXZ = (LINKPOS - i_position).absXZ(); + + s16 angle_diff = cLib_targetAngleY(¤t.pos,&LINKPOS) - current.angle.y; + float distance_threshold = i_distanceThreshold; + if (abs(angle_diff) > 0x4E38) { + distance_threshold *= 0.5f; + } + bool o_result = (distanceXZ < i_distanceThreshold); + if (o_result && ((g_Counter.mCounter0 % 3) == 0)) { + createTama(distance_threshold); + + } + return o_result; } /* 0000345C-00003578 .text startEvent_check__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::startEvent_check() { - /* Nonmatching */ +bool daNpc_Kk1_c::startEvent_check() { + + + + + + u32 is_area_in = chk_areaIN(l_HIO.field_0x5C,current.pos); + if (is_area_in) { + float dist_to_link = current.pos.abs(LINKPOS); + if ((dist_to_link < REG9_F(0) + 210.0f) || + (field_0x6ba != 0)) { + return true; + } + } + return false; } + /* 00003578-00003600 .text chkHitPlayer__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::chkHitPlayer() { - /* Nonmatching */ +bool daNpc_Kk1_c::chkHitPlayer() { + + bool o_result = false; + if (mCyl.ChkCoHit()){ + cCcD_Obj* hit_obj = mCyl.GetCoHitObj(); + if(hit_obj != NULL) { + + fopAc_ac_c* hit_actor = dCc_GetAc(hit_obj); + + if(hit_actor != NULL){ + o_result = fopAcM_GetName(hit_actor) == PROC_PLAYER; + } + } + } + return o_result; } /* 00003600-000036A8 .text set_pthPoint__11daNpc_Kk1_cFUc */ -void daNpc_Kk1_c::set_pthPoint(unsigned char) { - /* Nonmatching */ +void daNpc_Kk1_c::set_pthPoint(unsigned char i_pointIndex) { + + if(mRunPath.mPath != NULL){ + mRunPath.mCurrPointIndex = i_pointIndex; + current.pos = mRunPath.getPoint(mRunPath.mCurrPointIndex); + if(mRunPath.nextIdx()){ + cXyz runpoint = mRunPath.getPoint(mRunPath.mCurrPointIndex); + current.angle.y = cLib_targetAngleY(¤t.pos,&runpoint); + } + } } + /* 000036A8-00003940 .text event_move__11daNpc_Kk1_cFb */ -void daNpc_Kk1_c::event_move(bool) { - /* Nonmatching */ +bool daNpc_Kk1_c::event_move(bool i_param_1) { + + f32 speed; + dPath* path = mRunPath.mPath; + if(!path){ + return true; + } + + if (!dPath_ChkClose(path)){ + return true; + } + if(field_0x7B6){ + if(mRunPath.chkPointPass(current.pos,mRunPath.mbGoingForwards)){ + mRunPath.nextIdxAuto(); + if(i_param_1){ + s8 point_arg = mRunPath.pointArg(mRunPath.mCurrPointIndex); + if( point_arg >= 0){ + point_arg += 1; + } + if((point_arg != 2) && (point_arg != 3)){ + field_0x7B6 = 0; + + } + else{ + field_0x815 = point_arg; + field_0x816 = 0; + field_0x7B6 = 1; + } + } + + } + } + + cXyz runpoint = mRunPath.getPoint(mRunPath.mCurrPointIndex); + s16 target = cLib_targetAngleY(¤t.pos,&runpoint); + s16 store_angle = current.angle.y; + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.mScale,l_HIO.mMaxStep,0x80); + f32 target_float; + float play_speed; + if(field_0x815 == 2){ + if(field_0x7B6 == 0){ + target_float = 0.0; + }else{ + target_float = l_HIO.field_0x44; + } + play_speed = speedF * l_HIO.field_0x4C; + speed = l_HIO.field_0x48; + }else{ + + if(field_0x7B6 == 0){ + target_float = 0.0; + }else{ + target_float = l_HIO.field_0x50; + } + play_speed = speedF * l_HIO.field_0x58; + speed = l_HIO.field_0x54; + } + cLib_chaseF(&speedF,target_float,speed); + mpMorf->setPlaySpeed(cLib_minLimit(play_speed,0.5f)); + if((int)target_float == 0){ + current.angle.y = store_angle; + if((int)speedF == 0){ + speedF = 0.0; + s8 point_arg = mRunPath.pointArg(mRunPath.mCurrPointIndex); + if((s32)point_arg >= 0){ + point_arg += 1; + } + field_0x816 = point_arg; + return true; + + } + } + + return false; + } /* 00003940-000039F0 .text kyoroPos__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::kyoroPos(int) { - /* Nonmatching */ +cXyz daNpc_Kk1_c::kyoroPos(int i_offset_index) { + + static f32 a_tgt_offst[12][3] = { + 0.0, 0.0, 0.0, + -100.0, 0.0, 0.0, + 100.0, 0.0, 0.0, + -100.0, 0.0, 100.0, + 100.0, 0.0, 100.0, + 0.0, 0.0, 100.0, + -100.0, 40.0, 0.0, + 100.0, 40.0, 0.0, + -100.0, 40.0, 100.0, + 100.0, 40.0, 100.0, + 0.0, 40.0, 100.0, + -40.0, 10.0, 40.0 + }; + Vec offset_vec, o_output_vec; + offset_vec.x = a_tgt_offst[i_offset_index][0]; + offset_vec.y = a_tgt_offst[i_offset_index][1]; + offset_vec.z = a_tgt_offst[i_offset_index][2]; + mDoMtx_stack_c::transS(eyePos); + mDoMtx_stack_c::YrotM(this->current.angle.y); + mDoMtx_stack_c::multVec(&offset_vec,&o_output_vec); + return (cXyz)o_output_vec; + } /* 000039F0-00003A84 .text kyorokyoro__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::kyorokyoro() { - /* Nonmatching */ +bool daNpc_Kk1_c::kyorokyoro() { + + + + if(cLib_calcTimer(&field_0x794)){ + field_0x738 = kyoroPos(mKyoroRNG); + return true; + } + int rng = cLib_getRndValue(1,10); + mKyoroRNG = rng; + field_0x794 = l_HIO.field_0x28; + field_0x792 = l_HIO.field_0x2A; + return false; //Return value not used } /* 00003A84-00003C9C .text chk_attn__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::chk_attn() { - /* Nonmatching */ -} +bool daNpc_Kk1_c::chk_attn() { + f32 distToLinkXZ = (current.pos-LINKPOS).absXZ(); + f32 heightDiff = current.pos.y - LINKPOS.y; + s16 iVar3 = cLib_targetAngleY(¤t.pos, &LINKPOS) - current.angle.y; + if ((s32)mWhereToLook == 1) { + return distToLinkXZ < 200.0f && + SHORT2DEG_ANGLE(abs(iVar3)) < 90.0f && //TODO: Possible inline (cAngle::s2d()) + std::fabsf(heightDiff) < 300.0f; + }else{ + return distToLinkXZ < 200.0f && + SHORT2DEG_ANGLE(abs(iVar3)) < 60.0f && + std::fabsf(heightDiff) < 300.0f; + } + + +} /* 00003C9C-00003D9C .text setBikon__11daNpc_Kk1_cF4cXyz */ -void daNpc_Kk1_c::setBikon(cXyz) { - /* Nonmatching */ +void daNpc_Kk1_c::setBikon(cXyz param_1) { + + JPABaseEmitter *pJVar1; + cXyz cStack_18; + + delBikon(); + PSMTXTrans(mDoMtx_stack_c::get(),current.pos.x,current.pos.y,current.pos.z); + mDoMtx_stack_c::YrotM(current.angle.y); + PSMTXMultVec(mDoMtx_stack_c::get(),¶m_1,&cStack_18); + + dPa_control_c* particle = g_dComIfG_gameInfo.play.getParticle(); + pJVar1 = particle->set(0,0x8152,&cStack_18,NULL,NULL,0xFF,NULL,-1,NULL,NULL,NULL); + + if(pJVar1 != NULL){ + mDoAud_seStart(0x58BD,¤t.pos); + } + return; } /* 00003D9C-00003DA0 .text delBikon__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::delBikon() { - /* Nonmatching */ + return; } /* 00003DA0-00003E18 .text setAse__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::setAse() { - /* Nonmatching */ + + JPABaseEmitter* pJVar1; + delAse(); + dPa_control_c* particle = g_dComIfG_gameInfo.play.getParticle(); + pJVar1 = particle->set(0,0x819E,¤t.pos,¤t.angle,NULL,0xFF,NULL,-1,NULL,NULL,NULL); + field_0x810 = pJVar1; + return; } /* 00003E18-00003EA4 .text flwAse__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::flwAse() { - /* Nonmatching */ + + JGeometry::TVec3 out; + if (field_0x810 != NULL) { + mDoMtx_stack_c::copy(mpMorf->mpModel->getAnmMtx(m_hed_jnt_num)); + mDoMtx_stack_c::multVecZero(out); + field_0x810->setGlobalTranslation(out); + + } + return; } /* 00003EA4-00003ED0 .text delAse__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::delAse() { - /* Nonmatching */ + JPABaseEmitter* Ase = field_0x810; + if(field_0x810 == NULL){ + return; + } + Ase->mMaxFrame = -1; + Ase->mFlags |= 1; + + field_0x810 = NULL; + return; } /* 00003ED0-0000415C .text wait_1__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::wait_1() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::wait_1() { + if(field_0x7C3 != 0){ + if(chk_talk() != 0){ + setStt(2); + setAnm_NUM(0,1); + mWhereToLook = 1; + mLockBodyRotation = 0; + m_jnt.setTrn(); + } + return 1; + } + field_0x81B = 2; + mWhereToLook = 0; + mLockBodyRotation = 1; + + cXyz sp20; + if(field_0x7B6 != 0){ + sp20 = mRunPath.getPoint(mRunPath.mCurrPointIndex); + s16 temp_r3 = cLib_targetAngleY(¤t.pos,&sp20); + cLib_addCalcAngleS(¤t.angle.y,temp_r3,l_HIO.mScale,l_HIO.mMaxStep, 0x80); + temp_r3 = temp_r3 - current.angle.y; + if(abs(temp_r3) < 0x1800){ + setStt('\x03'); + field_0x7B7 = 0; + } + return 1; + } + + if(field_0x81A == 0xB){ + if(field_0x7B2 != 0){ + setAnm_NUM(0,1); + field_0x7A4 = cLib_getRndValue(0x3C, 0x1E); + field_0x7B7 = 1; + } + return 1; + } + + cXyz sp14(-100.0f,0.0f,0.0f); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_YrotM(mDoMtx_stack_c::get(),field_0x718.y); + + mDoMtx_stack_c::multVec(&sp14,&sp20); + s16 temp_r3_r2 = cLib_targetAngleY(¤t.pos,&sp20); + + cLib_addCalcAngleS(¤t.angle.y,temp_r3_r2,l_HIO.mScale,l_HIO.mMaxStep, 0x80); + temp_r3_r2 = temp_r3_r2 - current.angle.y; + if(field_0x7B7 == 0){ + + if(temp_r3_r2 == 0){ + setAnm_NUM(0xB,1); + } + return 1; + } + if(cLib_calcTimer(&field_0x7A4) == 0){ + if(mRunPath.mPath != NULL){ + u32 temp_r3_3 = mRunPath.maxPoint(); + if((temp_r3_3 > 2) && (((daObj_Roten_c*)temp_r3_3)->getCreateCount() > 1)){ + field_0x7B6 = 1; + return 1; + } + } + field_0x7B7 = 0; + + } + return 1; } /* 0000415C-0000449C .text walk_1__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::walk_1() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::walk_1() { + + short sVar2; + float fVar3; + short target; + float fVar7; + cXyz local_40; + + local_40 = mRunPath.getPoint(mRunPath.mCurrPointIndex); + if (dPath_ChkClose(mRunPath.mPath)) { + return 1; + } + u8 idx; + fVar7 = (current.pos-local_40).absXZ(); + if ((field_0x7B6) && (fVar7 < l_HIO.field_0x34) ) { + bool r29 = (mRunPath.nextIdxAuto() == 0); + if (!r29 && mRunPath.mbGoingForwards){ + idx = mRunPath.mCurrPointIndex; + if( idx >= ((daObj_Roten_c*)r29)->getCreateCount() ){ + mRunPath.decIdx(); + mRunPath.decIdx(); + r29 = true; + } + } + if (r29 != 0) { + field_0x7B6 = 0; + mRunPath.mbGoingForwards ^= 1; + } + } + + target = cLib_targetAngleY(¤t.pos,&local_40); + + sVar2 = current.angle.y; + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.mScale,l_HIO.mMaxStep,0x80); + fVar7 = l_HIO.field_0x38; + if (!field_0x7B6 || field_0x7C3 || chk_attn()) { + fVar7 = 0.0; + } + cLib_chaseF(&speedF,fVar7,l_HIO.field_0x3C); + fVar3 = speedF*l_HIO.field_0x40; + fVar3 = cLib_minLimit(fVar3,0.5f); + mpMorf->mFrameCtrl.setRate(fVar3); + if ((int)fVar7 == 0) { + current.angle.y = sVar2; + if ((s32)speedF == 0) { + if (field_0x7C3) { + if(chk_talk()){ + setStt(1); + setAnm_NUM(0,1); + mWhereToLook = 1; + mLockBodyRotation = 0; + m_jnt.setTrn(); + } + return 1; + } + if (!field_0x7B6) { + setStt('\x01'); + field_0x7B7 = 0; + field_0x7B6 = 0; + return 1; + } + setStt('\a'); + field_0x7B7 = 0; + field_0x7B6 = 0; + return 1; + } + } + field_0x81B = 2; + mWhereToLook = 0; + mLockBodyRotation = 1; + return 1; } + /* 0000449C-00004614 .text wait_2__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::wait_2() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::wait_2() { + + int sp8; + cLib_addCalcAngleS(¤t.angle.y,field_0x718.y,4,0x800,0x80); + if(field_0x7C3 != 0){ + if(chk_talk() != 0){ + setStt(2); + mWhereToLook = 1; + mLockBodyRotation = 0; + field_0x7C5 = 0; + m_jnt.setTrn(); + } + return 1; + } + mWhereToLook = 0; + mLockBodyRotation = 1; + s8 temp_r0 = field_0x81B; + if(temp_r0 == 3 || temp_r0 == 4){ + return 1; + } + if(field_0x7B8 != 0){ + u8 temp_r4 = mSWbit; + if((temp_r4 != 0xFF) && (dComIfGs_isSwitch(temp_r4,current.roomNo) != 0)){ + fopAc_ac_c* temp_r3 = searchByID(mPartnerProcID,&sp8); + if((temp_r3 != NULL) && (sp8 == 0)){ + s16 difference = cLib_targetAngleY(&temp_r3->current.pos,&LINKPOS)-temp_r3->current.angle.y; + if(abs(difference) < 0x4000){ + field_0x81B = 4; + }else{ + field_0x81B = 3; + } + mStts.SetWeight(0xD9); + return 1; + } + } + } + field_0x81B = 2; + return 1; + } /* 00004614-0000466C .text init_CMT_WAI__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::init_CMT_WAI() { - /* Nonmatching */ + + field_0x7A4 = cLib_getRndValue(0x5a,0xb4); + this->mWhereToLook = 5; + this->mLockBodyRotation = 1; + setAnm_NUM(0,1); + return; } /* 0000466C-00004754 .text move_CMT_WAI__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::move_CMT_WAI() { - /* Nonmatching */ + + short sVar2; + uint uVar1; + + + sVar2 = cLib_calcTimer(&field_0x7A4); + if (sVar2 == 0) { + if ((field_0x81B != 1) && (field_0x81B < 3)) { + uVar1 = chk_areaIN(l_HIO.field_0x5C,current.pos); + if ((uVar1 & 0xff) != 0) { + this->field_0x81B = 8; + return; + } + } + field_0x816 = 0; + setAnm_NUM(3,1); + field_0x7B6 = 1; + } + else if (((field_0x81B != 1) && (field_0x81B < 3)) && + (startEvent_check() != 0)) { + field_0x81B = 9; + } + return; } /* 00004754-000047D4 .text init_CMT_TRN__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::init_CMT_TRN() { - /* Nonmatching */ + + field_0x7AA = current.angle.y; + s16 uVar1 = cLib_getRndValue(0x5A,0xB4); + field_0x7A4 = uVar1; + mTimer = l_HIO.field_0x2C; + field_0x794 = l_HIO.field_0x28; + field_0x792 = l_HIO.field_0x2A; + mWhereToLook = 0; + mLockBodyRotation = 1; + setAnm_NUM(0,1); + return; } /* 000047D4-00004A14 .text move_CMT_TRN__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::move_CMT_TRN() { - /* Nonmatching */ + + short sVar1; + uint uVar2; + short sVar3; + short sVar4; + cXyz local_20; + + sVar1 = field_0x7AA + 0x8000; + sVar3 = current.angle.y; + uVar2 = cLib_calcTimer(&mTimer); + if ((short)uVar2 != 0) { + s8 temp_r0 = field_0x81B; + if((temp_r0 != 1) && (temp_r0 < 3) && startEvent_check() != 0){ + field_0x81B = 9; + } + }else if (field_0x7A4 == 0) { + local_20 = mRunPath.getPoint(mRunPath.mCurrPointIndex); + sVar3 = cLib_targetAngleY(¤t.pos,&local_20); + sVar1 = cLib_addCalcAngleS(¤t.angle.y,sVar3,l_HIO.mScale,l_HIO.mMaxStep,0x80); + uVar2 = (uint)sVar1; + if ((field_0x81B != 1) && ((char)field_0x81B < 3)) { + + if (startEvent_check() != 0) { + field_0x81B = 9; + return; + } + if (current.angle.y == (int)sVar3) { + field_0x816 = 0; + setAnm_NUM(3,1); + field_0x7B6 = 1; + } + } + }else { + uVar2 = cLib_addCalcAngleS(¤t.angle.y,sVar1,l_HIO.mScale,l_HIO.mMaxStep,0x80); + //uVar2 = (uint)sVar4; + //sVar4 = current.angle.y; + if (current.angle.y == sVar1) { + if (current.angle.y != sVar3) { + mWhereToLook = 5; + mLockBodyRotation = true; + } + if (cLib_calcTimer(&field_0x7A4) == 0) { + if ((field_0x81B != '\x01') && ((char)field_0x81B < '\x03')) { + if (chk_areaIN(l_HIO.field_0x5C,current.pos)) { + field_0x81B = 8; + } + } + mWhereToLook = 0; + mLockBodyRotation = true; + } + } + if (((field_0x81B != '\x01') && ((char)field_0x81B < '\x03')) && + (uVar2 = startEvent_check(), (uVar2 & 0xff) != 0)) { + field_0x81B = 9; + } + } } /* 00004A14-00004A84 .text init_CMT_PCK__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::init_CMT_PCK() { - /* Nonmatching */ + + setAnm_NUM(1,1); + field_0x7A4 = l_HIO.field_0x26; + mWhereToLook = 0; + mLockBodyRotation = 1; + mEvtIDIdx = 2; + eventInfo.mEventId = mEvtIDTbl[mEvtIDIdx]; } /* 00004A84-00004C34 .text move_CMT_PCK__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::move_CMT_PCK() { - /* Nonmatching */ + + cXyz sp8; + s16 temp_r3; + u8 temp_r0; + u8 temp_r0_2; + + if (field_0x7A4 == 0) { + sp8 = mRunPath.getPoint(mRunPath.mCurrPointIndex); + + temp_r3 = cLib_targetAngleY(¤t.pos,&sp8); + cLib_addCalcAngleS(¤t.angle.y, temp_r3, l_HIO.mScale, l_HIO.mMaxStep, 0x80); + temp_r0 = field_0x81B; + if (((s8) temp_r0 != 1) && ((s8) temp_r0 < 3)) { + if (startEvent_check() != 0) { + field_0x81B = 9; + return; + } + if (current.angle.y == temp_r3) { + field_0x816 = 0; + setAnm_NUM(3, 1); + field_0x7B6 = 1; + } + } + } else if ((u8) field_0x7C3 == 0) { + temp_r0_2 = field_0x81B; + if (((s8) temp_r0_2 != 1) && ((s8) temp_r0_2 < 3) && (chkHitPlayer() != 0)) { + field_0x81B = 1; + return; + } + if (!cLib_calcTimer(&field_0x7A4)) { + setAnm_NUM(0, 1); + eventInfo.mEventId = -1; + field_0x81B = 0; + return; + } + mDoAud_seStart(0x509BU, ¤t.pos); + field_0x81B = 2; + } } /* 00004C34-00004DD0 .text cmmt_1__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cmmt_1() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::cmmt_1() { + + + u8 temp_r0_4; + + switch (field_0x816) { + case 1: + move_CMT_WAI(); + return 1; + case 4: + move_CMT_TRN(); + return 1; + case 5: + move_CMT_PCK(); + return 1; + case 0: + default: + if ((field_0x81B != 1) && (field_0x81B < 3) && (field_0x81A != 1) && (startEvent_check() != 0)) { + field_0x81B = 9; + } + mWhereToLook = 0; + mLockBodyRotation = 1; + if (event_move( 1) != 0) { + if ((field_0x81B == 1) || (field_0x81B >= 3)) { + return 1; + } + temp_r0_4 = field_0x816; + switch ((s8) temp_r0_4) { + case 1: + init_CMT_WAI(); + break; + case 4: + init_CMT_TRN(); + break; + case 5: + init_CMT_PCK(); + break; + case 0: + default: + field_0x816 = 0; + setAnm_NUM(3, 1); + field_0x7B6 = 1; + break; + } + + } + if ((field_0x81B == 1) || (field_0x81B >= 3)) { + return 1; + } + field_0x81B = 0; + return 1; + } } /* 00004DD0-00004F74 .text wait_3__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::wait_3() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::wait_3() { + + + + + float distToLinkXZ = (current.pos-LINKPOS).absXZ(); + + field_0x7C5 = distToLinkXZ > 300.0f; + if (field_0x7C5) { + cLib_addCalcAngleS(¤t.angle.y,field_0x718.y,4,0x800,0x80); + } + if (field_0x7C3 != 0) { + if (chk_talk()) { + setStt(2); + this->mWhereToLook = 1; + this->mLockBodyRotation = 0; + this->field_0x7C5 = 0; + m_jnt.mbTrn = true; + + } + return 1; + } + else { + mWhereToLook = 0; + mLockBodyRotation = 1; + if (chk_attn()) { + this->mWhereToLook = 1; + } + if ((this->field_0x81B != 1) && (field_0x81B < 3)) { + this->field_0x81B = 2; + } + } + return 1; } /* 00004F74-00005170 .text wait_4__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::wait_4() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::wait_4() { + + short target; + int iVar2; + float fVar4; + cXyz local_20 [2]; + fVar4 = (current.pos-LINKPOS).absXZ(); + + + + if (this->field_0x7C3) { + if (chk_talk()) { + setStt('\x02'); + setAnm_NUM(0,1); + this->mWhereToLook = 1; + this->mLockBodyRotation = 0; + m_jnt.mbTrn = true; + } + return 1; + } + else { + this->field_0x81B = 2; + this->mWhereToLook = 1; + this->mLockBodyRotation = 0; + this->field_0x7B6 = fVar4 > 300.0f; + if (this->field_0x7B6) { + local_20[0] = mRunPath.getPoint(mRunPath.mCurrPointIndex); + + target = cLib_targetAngleY(¤t.pos,local_20); + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.mScale,l_HIO.mMaxStep,0x80); + s16 diff = target - current.angle.y; + iVar2 = abs(diff); + if (iVar2 < 0x1800) { + setStt('\x03'); + field_0x7B7 = 0; + } + this->mWhereToLook = 0; + this->mLockBodyRotation = 1; + } + } + return 1; } /* 00005170-000052B4 .text talk_1__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::talk_1() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::talk_1() { + + msg_class *pmVar3; + int uVar4; + short sVar5; + + int uVar6 = chk_parts_notMov(); + talk(1); + pmVar3 = mpCurrMsg; + if (pmVar3 == NULL) { + return 1; + } + switch(pmVar3->mStatus){ + case 6: + case 2: + break; + case 19: + field_0x7B4 = 0xff; + field_0x7C3 = 0; + + setStt(field_0x81D); + uVar4 = cLib_getRndValue(0xF,0x1E); + field_0x79E = uVar4; + + switch(mCurrMsgNo){ + case 0x1CA9: //Welcome to you, sir! This way to Windfall's outdoor shop, chock-full of fun and happy products! + dComIfGs_onEventBit(0xE10); //Intro text seen + break; + case 0x1CAB: //'Bye! Thanks for tonight! + field_0x81B = 7; + break; + case 0x1CAC: //Take off! Go away! + mWhereToLook = 1; + mLockBodyRotation = 0; + field_0x7A2 = 0; + break; + default: + break; + } + endEvent(); + break; + } + sVar5 = cLib_calcTimer(&field_0x7A2); + if ((sVar5 != 0) && (field_0x7A2 == 1)) { + this->mWhereToLook = 1; + this->mLockBodyRotation = 0; + } + return uVar6; } + /* 000052B4-000053F4 .text wait_action1__11daNpc_Kk1_cFPv */ -void daNpc_Kk1_c::wait_action1(void*) { - /* Nonmatching */ +int daNpc_Kk1_c::wait_action1(void* arg0) { + + u8 temp_r0 = this->field_0x821; + switch ((s8) temp_r0) { + + case 0: + if (dKy_daynight_check() == 0) { + this->field_0x7B7 = 0; + setStt(1); + this->field_0x821 += 1; + } else { + setStt(4); + this->field_0x821 += 1; + } + break; + + case 9: + default: + break; + case 1: + case 2: + case 3: + field_0x7C2 = chkAttention(); + + switch (field_0x81C) { + case 1: + field_0x778 = wait_1(); + break; + case 2: + field_0x778 = talk_1(); + break; + case 3: + field_0x778 = walk_1(); + break; + case 4: + field_0x778 = wait_2(); + break; + case 5: + field_0x778 = cmmt_1(); + break; + case 6: + field_0x778 = wait_3(); + break; + case 7: + field_0x778 = wait_4(); + break; + } + break; + } + return 1; } /* 000053F4-00005534 .text demo__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::demo() { - /* Nonmatching */ +u8 daNpc_Kk1_c::demo() { + + J3DAnmTexPattern *pJVar2; + + if (demoActorID == 0) { + if (field_0x7C6 != 0) { + field_0x7C6 = 0; + } + } + else { + if (field_0x7C6 == NULL) { + field_0x7C6 = 1; + field_0x7BF = 0; + + m_jnt.setHead_y(0); + m_jnt.setHead_x(0); + m_jnt.setBackBone_y(0); + m_jnt.setBackBone_x(0); + + } + dDemo_actor_c* this_00 = dComIfGp_demo_getActor(demoActorID); + + pJVar2 = mBtpAnm.getBtpAnm(); + + if (pJVar2 != NULL) { + + u8 cmp = pJVar2 ->getFrameMax(); + mBtpFrame += 1; + if (mBtpFrame >= cmp) { + mBtpFrame = cmp; + } + } + + pJVar2 = (J3DAnmTexPattern*)(this_00)->getP_BtpData(&mArcName); + if (pJVar2 != NULL) { + mBtpAnm.init(mpMorf->getModel()->getModelData(),pJVar2,1,0,1.0,0,-1,true,0); + + field_0x819 = 1; + mBtpFrame = 0; + } + dDemo_setDemoData(this,0x6A,mpMorf,&mArcName,0,0,0,0); + + } + return field_0x7C6; + } /* 00005534-000055C4 .text shadowDraw__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::shadowDraw() { - /* Nonmatching */ + + cXyz local_18(current.pos.x,current.pos.y + 150.0f, current.pos.z); + GXTexObj* tex = dDlst_shadowControl_c::getSimpleTex(); + mShadowID = dComIfGd_setShadow(mShadowID,1,mpMorf->getModel(),&local_18,800.0f,40.0f,current.pos.y,mObjAcch.GetGroundH(), + mObjAcch.m_gnd,&tevStr,0,1.0,tex); + } /* 000055C4-00005798 .text _draw__11daNpc_Kk1_cFv */ -bool daNpc_Kk1_c::_draw() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::_draw() { + + J3DModelData *model_data; + J3DModel *model; + + //dbgs; + + model = mpMorf->getModel(); + + model_data = model->getModelData(); + dBgS* dbgs = dComIfG_Bgsp(); + if ((field_0x7BD) || (field_0x7C0)) { + return 1; + } + g_env_light.settingTevStruct(TEV_TYPE_ACTOR,¤t.pos,&tevStr); + g_env_light.setLightTevColorType(model,&tevStr); + + mBtpAnm.entry(model_data,mBtpFrame); + mpMorf->entryDL(); + mBtpAnm.remove(model_data); + if (!field_0x7BE) { + field_0x7C8.entry(field_0x808->getModelData(),field_0x800); + + field_0x7DC.entry(field_0x808->getModelData(),field_0x802); + mDoExt_modelEntryDL(field_0x808); + field_0x7DC.remove(field_0x808->getModelData()); + field_0x7C8.remove(field_0x808->getModelData()); + + } + shadowDraw(); + dSnap_RegistFig(0x58,(fopAc_ac_c *)this,1.0,1.0,1.0); + + if (l_HIO.field_0x24) { + cXyz somevec = current.pos; + somevec.y = eyePos.y; + somevec = mRunPath.getPoint(mRunPath.mCurrPointIndex); + } + return 1; } +//Needed to fill .rodata +const u16 fillerbytes[12] ={0x00FF,0x0080,0xFFFF,0x0080, + 0xFF00,0x0080,0x0000,0xFF80, + 0xFFFF,0x0080,0x00FF,0x0080}; /* 00005798-000059EC .text _execute__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::_execute() { - /* Nonmatching */ + + float radius; + int cVar1; + int iVar3; + + if (!field_0x7C1) { + field_0x70C = current.pos; + field_0x718 = current.angle; + field_0x7C1 = 1; + } + m_jnt.setParam( + l_HIO.field_0x14,l_HIO.field_0x16, + l_HIO.field_0x18,l_HIO.field_0x1A, + l_HIO.field_0xC,l_HIO.field_0xE, + l_HIO.field_0x10,l_HIO.field_0x12, + l_HIO.field_0x1C + ); + + if ((field_0x7BD ) && (!demoActorID)) { + return true; + } + partner_search(); + checkOrder(); + cVar1 = demo(); + if (!cVar1) { + iVar3 = -1; + if ((dComIfGp_event_runCheck())){ + cVar1 = checkCommandTalk(); + if (cVar1 == 0) { + iVar3 = isEventEntry(); + } + } + if (iVar3 >= 0) { + event_proc(iVar3); + } + else { + (this->*field_0x6F0)(NULL); + } + field_0x6ba = 0; + lookBack(); + fopAcM_posMoveF(this,mStts.GetCCMoveP()); + mObjAcch.CrrPos(*dComIfG_Bgsp()); + play_animation(); + } + else { + field_0x7BD = 0; + } + eventOrder(); + mAngle = current.angle; + + if (!field_0x7BF) { + shape_angle = current.angle; + } + + cVar1 = dComIfG_Bgsp()->GetRoomId(mObjAcch.m_gnd); + tevStr.mRoomNo = cVar1; + u8 bVar2 = dComIfG_Bgsp()->GetPolyColor(mObjAcch.m_gnd); + tevStr.mEnvrIdxOverride = bVar2; + setMtx(false); + if (!(field_0x7C6 ) && !(field_0x7BB)) { + if (field_0x81A == 1) { + radius = 60.0; + } + else { + radius = 40.0; + } + setCollision(radius,140.0); + } + + return 1; } + /* 000059EC-00005A58 .text _delete__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::_delete() { - /* Nonmatching */ + cDyl_Unlink(0x1D6); + dComIfG_resDelete(&field_0x6C4,&mArcName); + delBikon(); + delAse(); + if(heap != NULL && mpMorf != NULL){ + mpMorf->stopZelAnime(); + } + return 1; } - +static u32 a_siz_tbl[2] = {0x0,0x0}; /* 00005A58-00005B98 .text _create__11daNpc_Kk1_cFv */ cPhs_State daNpc_Kk1_c::_create() { - /* Nonmatching */ + + + fopAcM_SetupActor(this,daNpc_Kk1_c); + + + if (!decideType(base.mParameters & 0xff)) { + return cPhs_ERROR_e; + } + + s32 resLoadResult = dComIfG_resLoad(&field_0x6C4,&mArcName); + field_0x7BC = resLoadResult == cPhs_COMPLEATE_e; + + if((u8)field_0x7BC == 0){ + return resLoadResult; + } + + s32 linkresult = cDyl_LinkASync(0x1D6); + if(linkresult != cPhs_COMPLEATE_e){ + return linkresult; + } + + if (!fopAcM_entrySolidHeap(this,CheckCreateHeap,a_siz_tbl[field_0x81F])) { + return cPhs_ERROR_e; + } + cullMtx = (MtxP)mpMorf->mpModel->getBaseTRMtx(); + fopAcM_SetMtx(this,cullMtx); + fopAcM_setCullSizeBox(this,-50.0,-20.0,-50.0,50.0,140.0,50.0); + if (!createInit()) { + return cPhs_ERROR_e; + } + + return resLoadResult; } /* 00006118-0000638C .text bodyCreateHeap__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::bodyCreateHeap() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::bodyCreateHeap() { + + J3DModelData *a_mdl_dat; + mDoExt_McaMorf *pmVar2; + + + + a_mdl_dat = (J3DModelData*)dComIfG_getObjectIDRes(&mArcName,0xD); + a_mdl_dat->getJointName(); + JUT_ASSERT(0xDD6,a_mdl_dat != 0); //Line 3542 + + + pmVar2 = new mDoExt_McaMorf(a_mdl_dat,NULL,NULL,NULL, + -0x1,1.0,0,-1,1,NULL,0x80000,0x11020022); + + + mpMorf = pmVar2; + pmVar2 = mpMorf; + if (pmVar2 == NULL) { + return 0; + } + else if (pmVar2->mpModel == NULL) { + mpMorf = NULL; + return 0; + } + + + if (!init_texPttrnAnm(0,false)) { + mpMorf = NULL; + return 0; + } + + m_hed_jnt_num = a_mdl_dat->getJointName()->getIndex("head"); + JUT_ASSERT(0xDEA,m_hed_jnt_num >= 0); //Line 3562 + m_bbone_jnt_num = a_mdl_dat->getJointName()->getIndex("backbone"); + JUT_ASSERT(0xDEC,m_bbone_jnt_num >= 0); //Line 3564 + mpMorf->mpModel->getModelData()->getJointNodePointer(m_hed_jnt_num)->setCallBack(nodeCB_Head); + mpMorf->mpModel->getModelData()->getJointNodePointer(m_bbone_jnt_num)->setCallBack(nodeCB_BackBone); + mpMorf->mpModel->setUserArea((u32)this); + return 1; + } /* 0000638C-000065E0 .text effcCreateHeap__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::effcCreateHeap() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::effcCreateHeap() { + + J3DModelData *pModel; + J3DModel *pJVar1; + J3DAnmColor *a_bpk; + + int iVar4; + J3DAnmTextureSRTKey *a_btk; + J3DAnmTransform *a_bck; + + pModel = (J3DModelData*)dComIfG_getObjectIDRes(&mArcName,0xE); + + pJVar1 = mDoExt_J3DModel__create(pModel,0x0,0x11020203); + field_0x808 = pJVar1; + if(field_0x808 != NULL){ + + a_bpk = (J3DAnmColor*)dComIfG_getObjectIDRes(&mArcName,0xF); + JUT_ASSERT(0xE01,0 != a_bpk); //Line 3585 + iVar4 = field_0x7C8.init(field_0x808->getModelData(),a_bpk,true,0,0.0,0,-1,false,0); + if(iVar4 == 0){ + return 0; + } + a_btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectIDRes(&mArcName,0x10); + JUT_ASSERT(0xE09,0 != a_btk); //Line 3593 + + iVar4 = field_0x7DC.init(field_0x808->getModelData(),a_btk,true,0,0.0,0,-1,false,0); + if(iVar4 == 0){ + return 0; + } + a_bck = (J3DAnmTransform*)dComIfG_getObjectIDRes(&mArcName,0x0); + JUT_ASSERT(0xE11,0 != a_bck); //Line 3601 + + iVar4 = field_0x7F0.init(field_0x808->getModelData(),a_bck,true,0,0.0,0,-1,false); + if(iVar4 == 0){ + return 0; + } + field_0x800 = 0; + field_0x802 = 0; + field_0x804 = 0; + } + return 1; } /* 000065E0-00006684 .text CreateHeap__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::CreateHeap() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::CreateHeap() { + + + + if (!bodyCreateHeap()) { + return 0; + + } + else { + if (!effcCreateHeap()) { + mpMorf = NULL; + return 0; + + } + else { + mAcchCir.SetWall(30.0,40.0); + mObjAcch.Set(¤t.pos,&old.pos,this,1,&mAcchCir,&speed,NULL,NULL); + return 1; + + } + } } /* 00006684-000066A4 .text daNpc_Kk1_Create__FP10fopAc_ac_c */ -static cPhs_State daNpc_Kk1_Create(fopAc_ac_c*) { - /* Nonmatching */ +static cPhs_State daNpc_Kk1_Create(fopAc_ac_c* obj) { + (static_cast(obj))->_create(); + } /* 000066A4-000066C4 .text daNpc_Kk1_Delete__FP11daNpc_Kk1_c */ -static BOOL daNpc_Kk1_Delete(daNpc_Kk1_c*) { - /* Nonmatching */ +static BOOL daNpc_Kk1_Delete(daNpc_Kk1_c* obj) { + (static_cast(obj))->_delete(); } /* 000066C4-000066E4 .text daNpc_Kk1_Execute__FP11daNpc_Kk1_c */ -static BOOL daNpc_Kk1_Execute(daNpc_Kk1_c*) { - /* Nonmatching */ +static BOOL daNpc_Kk1_Execute(daNpc_Kk1_c* obj) { + (static_cast(obj))->_execute(); } /* 000066E4-00006704 .text daNpc_Kk1_Draw__FP11daNpc_Kk1_c */ -static BOOL daNpc_Kk1_Draw(daNpc_Kk1_c*) { - /* Nonmatching */ +static BOOL daNpc_Kk1_Draw(daNpc_Kk1_c* obj) { + (static_cast(obj))->_draw(); } /* 00006704-0000670C .text daNpc_Kk1_IsDelete__FP11daNpc_Kk1_c */ static BOOL daNpc_Kk1_IsDelete(daNpc_Kk1_c*) { - /* Nonmatching */ + return true; } + + static actor_method_class l_daNpc_Kk1_Method = { (process_method_func)daNpc_Kk1_Create, (process_method_func)daNpc_Kk1_Delete, diff --git a/src/d/actor/d_a_npc_km1.cpp b/src/d/actor/d_a_npc_km1.cpp index 2b338311e..81fa54bd4 100644 --- a/src/d/actor/d_a_npc_km1.cpp +++ b/src/d/actor/d_a_npc_km1.cpp @@ -4,816 +4,248 @@ // #include "d/actor/d_a_npc_km1.h" -#include "d/d_com_inf_game.h" -#include "d/d_s_play.h" -#include "d/d_snap.h" #include "m_Do/m_Do_ext.h" #include "d/d_procname.h" #include "d/d_priority.h" -#include "weak_bss_936_to_1036.h" -static daNpc_Km1_HIO_c l_HIO; /* 000000EC-00000144 .text __ct__15daNpc_Km1_HIO_cFv */ daNpc_Km1_HIO_c::daNpc_Km1_HIO_c() { - - static daNpc_Km1_c::prm_tbl a_prm_tbl[] = {0x1FFE38E0, 0xE002C720, 0x00000000, 0x00000000, - 0x08000800, 150.0, 0x00000000}; - memcpy(&mPrmTbl,a_prm_tbl,0x1C); - mNo = -1; - field_0x8 = -1; - return; + /* Nonmatching */ } /* 00000144-000002F0 .text nodeCallBack_Km__FP7J3DNodei */ -static BOOL nodeCallBack_Km(J3DNode* i_node, int i_calcTiming) { +static BOOL nodeCallBack_Km(J3DNode*, int) { + /* Nonmatching */ +} - - if (i_calcTiming == 0) { - J3DModel* model = j3dSys.getModel(); - daNpc_Km1_c* km1Actor = (daNpc_Km1_c *)(model->getUserArea()); - u16 jointIdx; - if (km1Actor) { - static cXyz a_att_pos_offst(0.0,0.0,0.0); - static cXyz a_eye_pos_offst(20.0,20.0,0.0); - jointIdx = ((J3DJoint*)(i_node))->getJntNo(); - mDoMtx_stack_c::copy(model->getAnmMtx(jointIdx)); - if(jointIdx == km1Actor->getHeadJntNum()){ - MTXMultVec(mDoMtx_stack_c::get(),&a_att_pos_offst,km1Actor->getAttPos()); - mDoMtx_stack_c::XrotM(km1Actor->m_jnt.getHead_y()); - mDoMtx_stack_c::ZrotM(km1Actor->m_jnt.getHead_x()); - MTXMultVec(mDoMtx_stack_c::get(),&a_eye_pos_offst,km1Actor->getEyePos()); - }else if(jointIdx == km1Actor->getBackboneJntNum()){ - mDoMtx_stack_c::XrotM(km1Actor->m_jnt.getBackbone_y()); - mDoMtx_stack_c::ZrotM(km1Actor->m_jnt.getBackbone_x()); - } - MtxP stack = mDoMtx_stack_c::get(); - cMtx_copy(stack,J3DSys::mCurrentMtx); - MTXCopy(stack,model->getAnmMtx(jointIdx)); - - } - } - return 1; - } - - -extern dCcD_SrcCyl dNpc_cyl_src; /* 0000032C-0000043C .text createInit__11daNpc_Km1_cFv */ -bool daNpc_Km1_c::createInit() { - - mEventCut.setActorInfo2("Km1", this); - attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e; - attention_info.distances[1] = 0xAB; - attention_info.distances[3] = 0xA9; - gravity = -4.0; - field_0x798 = current.pos; - set_action(&daNpc_Km1_c::wait_action1,NULL); - shape_angle = current.angle; - mStts.Init(0xFF,0xFF,this); - mCyl.SetStts(&mStts); - mCyl.Set(dNpc_cyl_src); - mpMorf->setMorf(0.0); - field_0x7BC = 1; - setMtx(); - return 1; - +void daNpc_Km1_c::createInit() { + /* Nonmatching */ } /* 0000043C-0000054C .text setMtx__11daNpc_Km1_cFv */ void daNpc_Km1_c::setMtx() { - - u32 uVar1; - char cVar2; - u8 bVar3; - - if (field_0x7C7 == 0) { - playTexPatternAnm(); - uVar1 = mpMorf->play(&eyePos,0,0); - field_0x7B4 = uVar1; - if (mpMorf->getFrame() < field_0x7A4) { - field_0x7B4 = 1; - } - field_0x7A4 = mpMorf->getFrame(); - mObjAcch.CrrPos(*dComIfG_Bgsp()); - ; - } - cVar2 = dComIfG_Bgsp()->GetRoomId(mObjAcch.m_gnd); - tevStr.mRoomNo = cVar2; - bVar3 = dComIfG_Bgsp()->GetPolyColor(mObjAcch.m_gnd); - tevStr.mEnvrIdxOverride = bVar3; - mDoMtx_stack_c::transS(current.pos); - mDoMtx_stack_c::YrotM(current.angle.y); - mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); - mpMorf->calc(); - setAttention(); + /* Nonmatching */ } - /* 0000054C-00000654 .text anmResID__11daNpc_Km1_cFiPiPi */ -bool daNpc_Km1_c::anmResID(int i_num, int* o_bck_num, int* o_bas_num) { - const int ANM_END = 1; - static const int a_anm_idx_tbl[1][2] = {1,0}; - - JUT_ASSERT(0x11A,0 <= i_num && i_num < ANM_END); - JUT_ASSERT(0x11B,o_bck_num && o_bas_num); - *o_bck_num = a_anm_idx_tbl[i_num][0]; - *o_bas_num = a_anm_idx_tbl[i_num][1]; - return 1; +void daNpc_Km1_c::anmResID(int, int*, int*) { + /* Nonmatching */ } - /* 00000654-000006F0 .text BtpNum2ResID__11daNpc_Km1_cFiPi */ -void daNpc_Km1_c::BtpNum2ResID(int i_num, int* o_btp_num) -{ - const int TEXPATTERN_END = 1; - static const int a_btp_arc_ix_tbl[1] = {3}; - JUT_ASSERT(0x130,0 <= i_num && i_num < TEXPATTERN_END); - *o_btp_num = a_btp_arc_ix_tbl[i_num]; - return; +void daNpc_Km1_c::BtpNum2ResID(int, int*) { + /* Nonmatching */ } /* 000006F0-00000734 .text setAnm_tex__11daNpc_Km1_cFSc */ -void daNpc_Km1_c::setAnm_tex(signed char i_param_1) { - if(i_param_1 >= 0 && i_param_1 != field_0x7CD){ - field_0x7CD = i_param_1; - initTexPatternAnm(true); - } - return; +void daNpc_Km1_c::setAnm_tex(signed char) { + /* Nonmatching */ } /* 00000734-00000850 .text init_btp__11daNpc_Km1_cFbi */ -u8 daNpc_Km1_c::init_btp(bool param_1, int param_2) { - - int btp_num; - int iVar3; - J3DModelData *pJVar4; - - pJVar4 = mpMorf->getModel()->getModelData(); - if (param_2 >= 0) { - BtpNum2ResID(param_2,&btp_num); - J3DAnmTexPattern* pVVar1 = (J3DAnmTexPattern*)dComIfG_getObjectIDRes("Km",btp_num); - m_head_tex_pattern = pVVar1; - JUT_ASSERT(0x151,m_head_tex_pattern != 0); - iVar3 = mBtpAnm.init(pJVar4,m_head_tex_pattern,1,2,1.0,0,-1,param_1,0); - - if (iVar3 == 0) { - return 0; - } - mBtpFrame = 0; - field_0x6F2 = 0; - } - return 1; +void daNpc_Km1_c::init_btp(bool, int) { + /* Nonmatching */ } /* 00000850-00000894 .text initTexPatternAnm__11daNpc_Km1_cFb */ -bool daNpc_Km1_c::initTexPatternAnm(bool param_1) { - - bool var_31 = 0; - if(init_btp(param_1,field_0x7CD)){ - - var_31 = 1; - } - return var_31; - +void daNpc_Km1_c::initTexPatternAnm(bool) { + /* Nonmatching */ } /* 00000894-00000958 .text playTexPatternAnm__11daNpc_Km1_cFv */ void daNpc_Km1_c::playTexPatternAnm() { - - - //TODO: Rewrite this conditional logic - bool var_r4 = 1; - if(field_0x7CD == 0){ - var_r4 = !cLib_calcTimer(&field_0x6F2); - } - if(!var_r4){ - return; - } - - if((mBtpFrame += 1) < m_head_tex_pattern->getFrameMax()){ - return; - } - - if(field_0x7CD){ - mBtpFrame = m_head_tex_pattern->getFrameMax(); - return; - - }else{ - mBtpFrame = 0; - field_0x6F2 = cM_rndF(60.0) + 30.0f; - } - return; + /* Nonmatching */ } /* 00000958-00000A24 .text setAnm_anm__11daNpc_Km1_cFPQ211daNpc_Km1_c9anm_prm_c */ -s32 daNpc_Km1_c::setAnm_anm(daNpc_Km1_c::anm_prm_c* i_anm_ptr) { - - u32 uVar2 = 0; - int local_18; - int local_14; - - - if (i_anm_ptr->field_0x0 >= 0 && field_0x7CE != i_anm_ptr->field_0x0) { - - field_0x7CE = i_anm_ptr->field_0x0; - if (mpMorf != NULL) { - anmResID(field_0x7CE,&local_18,&local_14); - if (local_18 >= 0) { - dNpc_setAnmIDRes(mpMorf,i_anm_ptr->field_0xC,i_anm_ptr->field_0x4,i_anm_ptr->field_0x8,local_18,local_14,"Km"); - } - uVar2 = 1; - } - field_0x7A4 = 0; - field_0x7B5 = 0; - field_0x7B4 = 0; - } - return uVar2; +void daNpc_Km1_c::setAnm_anm(daNpc_Km1_c::anm_prm_c*) { + /* Nonmatching */ } /* 00000A24-00000A8C .text setAnm__11daNpc_Km1_cFv */ void daNpc_Km1_c::setAnm() { - - static daNpc_Km1_c::anm_prm_c a_anm_prm_tbl2[3] = { - {-1,-1,0,0,0,-1}, - {0,0,0x00,8,1,2}, - {-1,-1,0,0,0,-1} - }; - setAnm_tex(a_anm_prm_tbl2[field_0x7D0].field_0x1); - setAnm_anm(&a_anm_prm_tbl2[field_0x7D0]); + /* Nonmatching */ } /* 00000A8C-00000A98 .text chngAnmTag__11daNpc_Km1_cFv */ void daNpc_Km1_c::chngAnmTag() { - - switch(field_0x7CC){ - case 0: - break; - } - return; + /* Nonmatching */ } /* 00000A98-00000AA4 .text ctrlAnmTag__11daNpc_Km1_cFv */ void daNpc_Km1_c::ctrlAnmTag() { - - switch(field_0x7CB){ - case 0: - break; - } + /* Nonmatching */ } /* 00000AA4-00000AE4 .text chngAnmAtr__11daNpc_Km1_cFUc */ -void daNpc_Km1_c::chngAnmAtr(unsigned char param_1) { - if(param_1 < 1 && param_1 != field_0x7CB){ - field_0x7CB = param_1; - setAnm_ATR(1); - } - return; +void daNpc_Km1_c::chngAnmAtr(unsigned char) { + /* Nonmatching */ } /* 00000AE4-00000AE8 .text ctrlAnmAtr__11daNpc_Km1_cFv */ void daNpc_Km1_c::ctrlAnmAtr() { - + /* Nonmatching */ } -/* 00000AE8-00000B50 .text setAnm_ATR__11daNpc_Km1_cFi */ -void daNpc_Km1_c::setAnm_ATR(int param_1) { - static daNpc_Km1_c::anm_prm_c a_anm_prm_tbl3[1] = { - {0x00,0x00,0x00,8,1,2} - }; - if(param_1 != 0){ - setAnm_tex(a_anm_prm_tbl3[field_0x7CB].field_0x1); - } - setAnm_anm((&a_anm_prm_tbl3[field_0x7CB])); - return; +/* 00000AE8-00000B50 .text setAnm_ATR__11daNpc_Km1_cFi */ +void daNpc_Km1_c::setAnm_ATR(int) { + /* Nonmatching */ } /* 00000B50-00000C0C .text anmAtr__11daNpc_Km1_cFUs */ -void daNpc_Km1_c::anmAtr(unsigned short param_1) { - - if(param_1 == 6){ - if(field_0x7D6 == 0){ - field_0x7CC = 0xFF; - chngAnmAtr(dComIfGp_getMesgAnimeAttrInfo()); - field_0x7D6 += 1; - } - u8 uVar1 = dComIfGp_getMesgAnimeTagInfo(); - if(uVar1 != 0xFF && uVar1 != field_0x7CC){ - dComIfGp_clearMesgAnimeTagInfo(); - field_0x7CC = uVar1; - chngAnmTag(); - } - }else if(param_1 == 0xE){ - field_0x7D6 = 0; - } - ctrlAnmAtr(); - ctrlAnmTag(); - return; +void daNpc_Km1_c::anmAtr(unsigned short) { + /* Nonmatching */ } /* 00000C0C-00000C64 .text setStt__11daNpc_Km1_cFSc */ -void daNpc_Km1_c::setStt(signed char param_1) { - - s8 uVar1 = field_0x7D0; - field_0x7D0 = param_1; - switch((s8)field_0x7D0) { - case 2: - field_0x7D2 = 1; - field_0x7CB = 0xFF; - field_0x7D1 = uVar1; - break; - default: - case 1: - setAnm(); - break; - } - return; +void daNpc_Km1_c::setStt(signed char) { + /* Nonmatching */ } -/* 00000C64-00000C6C .text next_msgStatus__11daNpc_Km1_cFPUl */ -u16 daNpc_Km1_c::next_msgStatus(unsigned long*) { - return 0x10; +/* 00000C64-00000C6C .text next_msgStatus__11daNpc_Km1_cFPUl */ +void daNpc_Km1_c::next_msgStatus(unsigned long*) { + /* Nonmatching */ } /* 00000C6C-00000C74 .text getMsg__11daNpc_Km1_cFv */ -u32 daNpc_Km1_c::getMsg() { - - return 0; +void daNpc_Km1_c::getMsg() { + /* Nonmatching */ } /* 00000C74-00000CC4 .text eventOrder__11daNpc_Km1_cFv */ void daNpc_Km1_c::eventOrder() { - if (((field_0x7CF == 1) || (field_0x7CF == 2))){ - eventInfo.onCondition(dEvtCnd_CANTALK_e); - if(field_0x7CF == 1){ - fopAcM_orderSpeakEvent(this); - } - } - return; + /* Nonmatching */ } - /* 00000CC4-00000D04 .text checkOrder__11daNpc_Km1_cFv */ void daNpc_Km1_c::checkOrder() { - - if(eventInfo.checkCommandDemoAccrpt()){ - return; - } - if(!eventInfo.checkCommandTalk()){ - return; - } - if(field_0x7CF != 1 && field_0x7CF != 2){ - return; - } - field_0x7CF = 0; - field_0x7C5 = 1; - return; + /* Nonmatching */ } /* 00000D04-00000E94 .text lookBack__11daNpc_Km1_cFv */ void daNpc_Km1_c::lookBack() { - - cXyz vec1; - cXyz vec2 = current.pos; - vec2.y = eyePos.y; - - vec1.setall(0.0); - - cXyz* dstPos = NULL; - s16 targetY = current.angle.y; - bool headOnlyFollow = mHeadOnlyFollow; - s8 state = field_0x7D2; - - switch(state){ - case 0: - break; - case 1: - vec1 = dNpc_playerEyePos(-20.0); - dstPos = &vec1; - vec2 = current.pos; - vec2.y = eyePos.y; - break; - case 2: - vec1 = field_0x798; - dstPos = &vec1; - vec2 = current.pos; - vec2.y = eyePos.y; - break; - case 3: - targetY = field_0x7B2; - break; - } - if(m_jnt.trnChk() != 0){ - cLib_addCalcAngleS2(&field_0x7B0,l_HIO.mPrmTbl.field_12,4,0x800); - }else{ - field_0x7B0 = 0; - } - m_jnt.lookAtTarget(¤t.angle.y,dstPos,vec2,targetY,field_0x7B0,headOnlyFollow); - return; + /* Nonmatching */ } /* 00000E94-00000F14 .text chkAttention__11daNpc_Km1_cFv */ -bool daNpc_Km1_c::chkAttention() { - - if(dComIfGp_getAttention().LockonTruth() != 0){ - return this == dComIfGp_getAttention().LockonTarget(0); - }else{ - return this == dComIfGp_getAttention().ActionTarget(0); - } +void daNpc_Km1_c::chkAttention() { + /* Nonmatching */ } -const u32 fillerbytes[] = {0xFF000080,0x0000FF80}; /* 00000F14-00000F78 .text setAttention__11daNpc_Km1_cFv */ void daNpc_Km1_c::setAttention() { - - f32 f1 = current.pos.z; - f32 f2 = current.pos.y + l_HIO.mPrmTbl.mAttentionArrowYOffset; - - attention_info.position.set(current.pos.x,f2,f1); - if(!field_0x7BC && !field_0x7C0){return;} - f2 = field_0x78C.z; - f1 = field_0x78C.y; - eyePos.set(field_0x78C.x,f1,f2); - field_0x7BC = 0; + /* Nonmatching */ } /* 00000F78-00000FA4 .text decideType__11daNpc_Km1_cFi */ -bool daNpc_Km1_c::decideType(int param_1) { - - field_0x7D3 = 0xFF; - switch(base.mProcName){ - case PROC_NPC_KM1: - field_0x7D3 = 0; - field_0x7D4 = 0; - break; - } - - return true; +void daNpc_Km1_c::decideType(int) { + /* Nonmatching */ } /* 00000FA4-0000102C .text event_actionInit__11daNpc_Km1_cFi */ -void daNpc_Km1_c::event_actionInit(int param_1) { - int* puVar1 = dComIfGp_evmng_getMyIntegerP(param_1,"ActNo"); - dComIfGp_evmng_getMyIntegerP(param_1,"Timer"); - if(puVar1 != NULL){ - field_0x7CA = *puVar1; - } +void daNpc_Km1_c::event_actionInit(int) { + /* Nonmatching */ } /* 0000102C-0000103C .text event_action__11daNpc_Km1_cFv */ -bool daNpc_Km1_c::event_action() { - switch(field_0x7CA){ - case 0: - break; - } - return 1; +void daNpc_Km1_c::event_action() { + /* Nonmatching */ } -static char* cut_name_tbl[] = {"ACTION"}; + /* 0000103C-00001144 .text privateCut__11daNpc_Km1_cFv */ void daNpc_Km1_c::privateCut() { - - int staffIdx = dComIfGp_evmng_getMyStaffId("Km1",NULL,0); - if(staffIdx != -1){ - int uVar1 = dComIfGp_evmng_getMyActIdx(staffIdx,cut_name_tbl,1,1,0); - field_0x7C9 = uVar1; - if(field_0x7C9 == -1){ - dComIfGp_evmng_cutEnd(staffIdx); - return; - } - if(dComIfGp_evmng_getIsAddvance(staffIdx)){ - switch(field_0x7C9){ - case 0: - event_actionInit(staffIdx); - } - } - bool bVar1; - switch(field_0x7C9){ - case 0: - bVar1 = event_action(); - break; - default: - bVar1 = 1; - break; - } - - if(bVar1){ - dComIfGp_evmng_cutEnd(staffIdx); - } - - } + /* Nonmatching */ } /* 00001144-00001164 .text endEvent__11daNpc_Km1_cFv */ void daNpc_Km1_c::endEvent() { - - dComIfGp_event_onEventFlag(8); - field_0x7CB = 0xFF; - return; + /* Nonmatching */ } /* 00001164-000011C4 .text event_proc__11daNpc_Km1_cFv */ void daNpc_Km1_c::event_proc() { - - if(!mEventCut.cutProc()){ - privateCut(); - } - lookBack(); - shape_angle = current.angle; + /* Nonmatching */ } /* 000011C4-00001270 .text set_action__11daNpc_Km1_cFM11daNpc_Km1_cFPCvPvPv_iPv */ -bool daNpc_Km1_c::set_action(ActionFunc i_action, void* param_2) { - - if(field_0x6F4 != i_action){ - if(field_0x6F4 != 0){ - field_0x7D5 = 0xFF; - (this->*field_0x6F4)(param_2); - } - field_0x6F4 = i_action; - field_0x7D5 = 0; - (this->*field_0x6F4)(param_2); - } - return 1; +void daNpc_Km1_c::set_action(int (daNpc_Km1_c::*)(void*), void*) { + /* Nonmatching */ } /* 00001270-00001368 .text wait01__11daNpc_Km1_cFv */ -BOOL daNpc_Km1_c::wait01() { - - if(field_0x7C5 != 0){ - bool set_stt = true; - field_0x7B7 = 0xFF; - if(dComIfGp_event_chkTalkXY()){ - if(dComIfGp_evmng_ChkPresentEnd() != 0){ - field_0x7B7 = dComIfGp_event_getPreItemNo(); - }else{ - set_stt = false; - } - } - if(set_stt){ - setStt(2); - } - }else{ - field_0x7CF = 2; - if(field_0x7C4){ - field_0x7D2 = 1; - }else{ - field_0x7D2 = 3; - field_0x7B2 = field_0x76C.y; - m_jnt.setTrn(); - } - } - return 1; +void daNpc_Km1_c::wait01() { + /* Nonmatching */ } /* 00001368-000013F8 .text talk01__11daNpc_Km1_cFv */ -BOOL daNpc_Km1_c::talk01() { - talk(1); - if(mpCurrMsg != NULL){ - switch(mpCurrMsg->mStatus){ - case 6: - case 2: - break; - case 19: - field_0x7B7 = 0xFF; - setStt((field_0x7D1)); - field_0x7C8 = 0; - field_0x7C5 = 0; - endEvent(); - break; - } - } - return 1; +void daNpc_Km1_c::talk01() { + /* Nonmatching */ } /* 000013F8-000014AC .text wait_action1__11daNpc_Km1_cFPv */ -int daNpc_Km1_c::wait_action1(void*) { - - if(field_0x7D5 == 0){ - setStt(1); - field_0x7D5 += 1; - }else if( field_0x7D5 != -1){ - - field_0x7C4 = chkAttention(); - switch(field_0x7D0){ - case 2: - field_0x7C0 = talk01(); - break; - case 1: - field_0x7C0 = wait01(); - break; - default: - field_0x7C0 = 0; - break; - } - lookBack(); - } - return 1; +void daNpc_Km1_c::wait_action1(void*) { + /* Nonmatching */ } /* 000014AC-00001548 .text demo__11daNpc_Km1_cFv */ -u8 daNpc_Km1_c::demo() { - - if(demoActorID == 0){ - if(field_0x7C7 != 0){ - field_0x7C7 = 0; - } - }else{ - field_0x7C7 = 1; - dComIfGp_demo_getActor(demoActorID); - dDemo_setDemoData(this,0x6A,mpMorf,"Km",0,0,0,0); - } - return field_0x7C7; +void daNpc_Km1_c::demo() { + /* Nonmatching */ } /* 00001548-000016AC .text _draw__11daNpc_Km1_cFv */ bool daNpc_Km1_c::_draw() { - - J3DModelData *model_data; - J3DModel *model; - model = mpMorf->getModel(); - model_data = model->getModelData(); - g_env_light.settingTevStruct(TEV_TYPE_ACTOR,¤t.pos,&tevStr); - g_env_light.setLightTevColorType(model,&tevStr); - mBtpAnm.entry(model_data,mBtpFrame); - mpMorf->entryDL(); - mBtpAnm.remove(model_data); - dNpc_setShadowModel(field_0x6D4,model_data,model); - - cXyz pos(current.pos.x,current.pos.y+150.0f,current.pos.z); - mShadowId = dComIfGd_setRealShadow(mShadowId,1,field_0x6D4,&pos,800.0,current.pos.y-mObjAcch.GetGroundH(),NULL); - if(mShadowId == 0){ - cXyz* pFloorNrm = (cXyz*)dComIfG_Bgsp()->GetTriPla(mObjAcch.m_gnd.GetBgIndex(),mObjAcch.m_gnd.GetPolyIndex()); - dComIfGd_setSimpleShadow(¤t.pos,mObjAcch.GetGroundH(),40.0,pFloorNrm); - } - dSnap_RegistFig(0x58,this,1.0,1.0,1.0); - return 1; + /* Nonmatching */ } /* 000016AC-00001808 .text _execute__11daNpc_Km1_cFv */ bool daNpc_Km1_c::_execute() { - - if(field_0x7B8 == 0){ - field_0x774 = current.pos; - field_0x76C = current.angle; - field_0x7B8 = 1; - } - m_jnt.setParam(l_HIO.mPrmTbl.field_8, - l_HIO.mPrmTbl.field_A,l_HIO.mPrmTbl.field_C, - l_HIO.mPrmTbl.field_E,l_HIO.mPrmTbl.field_0, - l_HIO.mPrmTbl.field_2,l_HIO.mPrmTbl.field_4, - l_HIO.mPrmTbl.field_6,l_HIO.mPrmTbl.field_10); - checkOrder(); - if(demo() == 0){ - if (dComIfGp_event_runCheck() && !eventInfo.checkCommandTalk()){ - event_proc(); - }else{ - (this->*field_0x6F4)(NULL); - shape_angle = current.angle; - } - } - eventOrder(); - if(field_0x7C7 == 0){ - fopAcM_posMoveF(this,(cXyz*)&mStts); - } - setMtx(); - setCollision(60.0,150.0); - return 1; + /* Nonmatching */ } /* 00001808-0000188C .text _delete__11daNpc_Km1_cFv */ bool daNpc_Km1_c::_delete() { - - fopAcM_GetID(this); - dComIfG_resDelete(&field_0x6C4,"Km"); - - if(mpMorf != NULL){ - mpMorf->stopZelAnime(); - } - if(l_HIO.field_0x8 >= 0){ - l_HIO.field_0x8 += -1; - if(l_HIO.field_0x8 < 0){ - mDoHIO_deleteChild(l_HIO.mNo); - } - } - return 1; - + /* Nonmatching */ } /* 0000188C-000018AC .text CheckCreateHeap__FP10fopAc_ac_c */ -static BOOL CheckCreateHeap(fopAc_ac_c* actor) { - - return ((daNpc_Km1_c*)actor)->CreateHeap(); +static BOOL CheckCreateHeap(fopAc_ac_c*) { + /* Nonmatching */ } /* 000018AC-00001A1C .text _create__11daNpc_Km1_cFv */ cPhs_State daNpc_Km1_c::_create() { - - static int a_heap_size_tbl[1] = {0x000272E0}; - fopAcM_SetupActor(this,daNpc_Km1_c); - - - if (!decideType(base.mParameters & 0xff)) { - return cPhs_ERROR_e; - } - - s32 resLoadResult = dComIfG_resLoad(&field_0x6C4,"Km"); - - - if(resLoadResult != cPhs_COMPLEATE_e){ - return resLoadResult; - } - if(l_HIO.field_0x8 < 0){ - l_HIO.mNo = mDoHIO_createChild("金持ちム−ル",&l_HIO); - } - l_HIO.field_0x8 += 1; - if(fopAcM_entrySolidHeap(this,CheckCreateHeap,a_heap_size_tbl[field_0x7D3])){ - - cullMtx = (MtxP)mpMorf->mpModel->getBaseTRMtx(); - fopAcM_SetMtx(this,cullMtx); - fopAcM_setCullSizeBox(this,-60.0,-20.0,-80.0,60.0,160.0,60.0); - - }else{ - return cPhs_ERROR_e; - } - if (createInit() == 0) { - resLoadResult = cPhs_ERROR_e; - - - } - return resLoadResult; - + /* Nonmatching */ } /* 00001E4C-00002158 .text CreateHeap__11daNpc_Km1_cFv */ -BOOL daNpc_Km1_c::CreateHeap() { - - static u8 a_tex_pattern_num_tbl[1] = {0}; - J3DModelData *a_mdl_data; - - - a_mdl_data = (J3DModelData*)dComIfG_getObjectIDRes("Km",0x2); - JUT_ASSERT(0x52D,a_mdl_data != 0); - mpMorf = new mDoExt_McaMorf( - a_mdl_data, - NULL, NULL, - (J3DAnmTransform*)dComIfG_getObjectIDRes("Km", 0x1), - J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1, NULL, - 0x80000, 0x11020002 - ); - if (mpMorf){ - if(mpMorf->getModel()) { - - m_head_jnt_num = a_mdl_data->getJointName()->getIndex("head"); - JUT_ASSERT(0x540,m_head_jnt_num >= 0); - m_backbone_jnt_num = a_mdl_data->getJointName()->getIndex("backbone"); - JUT_ASSERT(0x542,m_backbone_jnt_num >= 0); - field_0x7CD = a_tex_pattern_num_tbl[field_0x7D3]; - if (initTexPatternAnm(false) != 0) { - field_0x6D4 = mDoExt_J3DModel__create(a_mdl_data,0x20000,0x11020203); - if (field_0x6D4 != 0) { - for (u16 i = 0; i < a_mdl_data->getJointNum(); i += 1) { - if ((i == m_head_jnt_num) || (i == m_backbone_jnt_num)) { - mpMorf->mpModel->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack_Km); - } - } - mpMorf->getModel()->setUserArea((u32)this); - mAcchCir.SetWall(30.0,60.0); - mObjAcch.Set(¤t.pos,&old.pos,(fopAc_ac_c *)this,1, - &mAcchCir,&speed,NULL,NULL); - return 1; - } - } - } - mpMorf = NULL; - } - return 0; +void daNpc_Km1_c::CreateHeap() { + /* Nonmatching */ } -/* 00002158-00002178 .text daNpc_Km1_Create__FP10fopAc_ac_c */ -static cPhs_State daNpc_Km1_Create(fopAc_ac_c* obj) { - (static_cast(obj))->_create(); +/* 00002158-00002178 .text daNpc_Km1_Create__FP10fopAc_ac_c */ +static cPhs_State daNpc_Km1_Create(fopAc_ac_c*) { + /* Nonmatching */ } /* 00002178-00002198 .text daNpc_Km1_Delete__FP11daNpc_Km1_c */ -static BOOL daNpc_Km1_Delete(daNpc_Km1_c* obj) { - - (static_cast(obj))->_delete(); +static BOOL daNpc_Km1_Delete(daNpc_Km1_c*) { + /* Nonmatching */ } /* 00002198-000021B8 .text daNpc_Km1_Execute__FP11daNpc_Km1_c */ -static BOOL daNpc_Km1_Execute(daNpc_Km1_c* obj) { - - (static_cast(obj))->_execute(); +static BOOL daNpc_Km1_Execute(daNpc_Km1_c*) { + /* Nonmatching */ } /* 000021B8-000021D8 .text daNpc_Km1_Draw__FP11daNpc_Km1_c */ -static BOOL daNpc_Km1_Draw(daNpc_Km1_c* obj) { - - (static_cast(obj))->_draw(); +static BOOL daNpc_Km1_Draw(daNpc_Km1_c*) { + /* Nonmatching */ } /* 000021D8-000021E0 .text daNpc_Km1_IsDelete__FP11daNpc_Km1_c */ static BOOL daNpc_Km1_IsDelete(daNpc_Km1_c*) { - return TRUE; - + /* Nonmatching */ } static actor_method_class l_daNpc_Km1_Method = { diff --git a/src/d/actor/d_a_npc_md.cpp b/src/d/actor/d_a_npc_md.cpp index d7af68d2d..b8adc0ddc 100644 --- a/src/d/actor/d_a_npc_md.cpp +++ b/src/d/actor/d_a_npc_md.cpp @@ -3211,7 +3211,11 @@ BOOL daNpc_Md_c::draw() { f32 temp = mCps.GetAtVecP()->abs(); mDoMtx_stack_c::scaleM(0.1f, 0.1f, temp * (1.0f/9600.0f)); mDoMtx_stack_c::revConcat(mtx); +#if VERSION == VERSION_DEMO + m0B70.update(mDoMtx_stack_c::get(), 0xFF); +#else m0B70.update(mDoMtx_stack_c::get(), 0xFF, 90.0f); +#endif dComIfGd_getXluList()->entryImm(&m0B70, 0x1F); } diff --git a/src/d/actor/d_a_npc_photo.cpp b/src/d/actor/d_a_npc_photo.cpp index 914bfce01..a65a4838a 100644 --- a/src/d/actor/d_a_npc_photo.cpp +++ b/src/d/actor/d_a_npc_photo.cpp @@ -4,338 +4,2276 @@ // #include "d/actor/d_a_npc_photo.h" -#include "m_Do/m_Do_ext.h" #include "d/d_procname.h" #include "d/d_priority.h" +#include "d/d_com_lib_game.h" +#include "d/d_com_inf_game.h" +#include "d/d_a_obj.h" +#include "d/d_path.h" +#include "d/actor/d_a_player_main.h" +#include "d/d_camera.h" +#include "d/res/res_po.h" +#include "d/d_snap.h" +#include "d/d_kankyo_rain.h" +#include "d/d_picture_box.h" +#include "d/actor/d_a_tag_photo.h" + +#include "weak_bss_936_to_1036.h" // IWYU pragma: keep +#include "weak_data_1811.h" // IWYU pragma: keep + +extern dCcD_SrcCyl dNpc_cyl_src; + +const char daNpcPhoto_c::m_arcname[] = "Auc"; + + +static const char* l_arcname_tbl[] = { + "Po" +}; + +static sPhotoAnmDat l_npc_anm_wait[] = { + { + 0x00, + 0x08, + 0xFF, + }, +}; + +static sPhotoAnmDat l_npc_anm_talk[] = { + { + 0x01, + 0x08, + 0xFF, + }, +}; + +static sPhotoAnmDat l_npc_anm_walk[] = { + { + 0x03, + 0x08, + 0xFF, + }, +}; + +static sPhotoAnmDat l_npc_anm_spit[] = { + { + 0x04, + 0x08, + 0x01 + }, + { + 0x00, + 0x08, + 0xFF, + }, +}; + +static sPhotoAnmDat l_npc_anm_talk2[] = { + { + 0x02, + 0x08, + 0x03, + }, + { + 0x00, + 0x08, + 0xFF, + }, +}; + +static sPhotoAnmDat l_npc_anm_talk4[] = { + { + 0x02, + 0x08, + 0x01, + }, + { + 0x01, + 0x08, + 0xFF, + }, +}; + +struct NpcDatStruct { + /* 0x00 */ f32 field_0x00; + /* 0x04 */ s16 field_0x04; + /* 0x06 */ s16 field_0x06; + /* 0x08 */ s16 field_0x08; + /* 0x0A */ s16 field_0x0A; + /* 0x0C */ s16 field_0x0C; + /* 0x0E */ s16 field_0x0E; + /* 0x10 */ s16 field_0x10; + /* 0x12 */ s16 field_0x12; + /* 0x14 */ s16 field_0x14; + /* 0x16 */ s16 field_0x16; + /* 0x18 */ s16 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ s16 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ s16 field_0x44; + /* 0x46 */ s16 field_0x46; + /* 0x48 */ s16 field_0x48; + /* 0x4A */ s16 field_0x4A; + /* 0x4C */ s16 field_0x4C; + /* 0x4E */ s16 field_0x4E; + /* 0x50 */ s16 field_0x50; + /* 0x52 */ bool field_0x52; + /* 0x53 */ bool field_0x53; +}; // Size: 0x54 + +static NpcDatStruct l_npc_dat = { + 0.0f, + 0x09C4, + 0x07D0, + 0x1388, + 0x1F40, + 0xFF6A, + 0xFE00, + 0xFC18, + 0xE0C0, + 0x01f4, + 0x0320, + 0x0708, + 0.0f, + 215.0f, + 30.0f, + 0x7FFF, + 200.0f, + 300.0f, + -50.0f, + 0.3f, + 5.0f, + 1.3f, + 0x03E8, + 0x0006, + 0x0400, + 0x001E, + 0x001E, + 0x270F, + 0x270F, + true, + true, +}; + +static u32 l_msg_1st_talk[] = { + 0x2A31, + 0x2A32, + 0x2A33, + 0x0000 +}; + +static u32 l_msg_2nd_talk[] = { + 0x2A34, + 0x0000 +}; + +static u32 l_msg_1st_photo[] = { + 0x2A35, + 0x2A36, + 0x0000 +}; + +static u32 l_msg_2nd_photo[] = { + 0x2A37, + 0x2A38, + 0x0000 +}; + +static u32 l_msg_1st_order[] = { + 0x2A39, + 0x2A3A, + 0x2A3C, + 0x2A3D, + 0x2A3E, + 0x2A3F, + 0x2A40, + 0x2A41, + 0x2A42, + 0x2A43, + 0x0001, +}; + +static s16 l_msg_1st_order_c[] = { + 0xFFFF, + 0xFF00, + 0xFF01, + 0xFFFF, + 0x0002 +}; + +static u32 l_msg_1st_order_not_end[] = { + 0x2A44, + 0x2A45, + 0x0000 +}; + +static u16 l_msg_1st_order_not_end_c[] = { + 0xFF02 +}; + +static u32 l_msg_2nd_order[] = { + 0x2A46, + 0x2A47, + 0x2A48, + 0x0003 +}; + +static u8 l_msg_2nd_order_c[] = { + 0xFF, + 0x00, + 0xFF +}; + +static u32 l_msg_2nd_order_not_end[] = { + 0x2A49, + 0x2A4A, + 0x0000 +}; + +static u16 l_msg_2nd_order_not_end_c[] = { + 0xFF02 +}; + +static u32 l_msg_3rd_order[] = { + 0x2A4B, + 0x2A4C, + 0x2A4D, + 0x2A4E, + 0x0005, +}; + +static u32 l_msg_3rd_order_c[] = { + 0xFF00FF02 +}; + +static u32 l_msg_3rd_order_not_end[] = { + 0x2A4F, + 0x2A50, + 0x0000, +}; + +static u16 l_msg_3rd_order_not_end_c[] = { + 0xFFFF +}; + +static u32 l_msg_3rd_order_end[] = { + 0x2A51, + 0x0000, +}; + +static u32 l_msg_not_color[] = { + 0x2A52, + 0x2A53, + 0x0000 +}; + +static u16 l_msg_not_color_c[] = { + 0xFF00 +}; + +static u32 l_msg_color[] = { + 0x2A54, + 0x2A55, + 0x0000 +}; + +static u16 l_msg_color_c[] = { + 0xFF01 +}; + +static u32 l_msg_week_1st[] = { + 0x3781, + 0x3782, + 0x3783, + 0x3784, + 0x3785, + 0x0000 +}; + +static u32 l_msg_week0[] = { + 0x3779, + 0x377A, + 0x3785, + 0x0000 +}; + +static u32 l_msg_week1[] = { + 0x3779, + 0x377B, + 0x3785, + 0x0000 +}; + +static u32 l_msg_week2[] = { + 0x3779, + 0x377C, + 0x3785, + 0x0000 +}; + +static u32 l_msg_week3[] = { + 0x3779, + 0x377D, + 0x3785, + 0x0000 +}; + +static u32 l_msg_week4[] = { + 0x3779, + 0x377E, + 0x3785, + 0x0000 +}; + +static u32 l_msg_week5[] = { + 0x3779, + 0x377F, + 0x3785, + 0x0000 +}; + +static u32 l_msg_week6[] = { + 0x3779, + 0x3780, + 0x3785, + 0x0000 +}; + +static u32* l_msg_week[] = { + l_msg_week0, l_msg_week1, l_msg_week2, l_msg_week3, + l_msg_week4, l_msg_week5, l_msg_week6, +}; + + +static u32 l_msg_1st_talk_photo[] = { + 0x2A69, + 0x2A6A, + 0x2A6B, + 0x2A6C, + 0x0000 +}; + + +static u32 l_msg_talk_photo_0[] = { + 0x2A6E, + 0x2A6F, + 0x0000, +}; + +static u32 l_msg_talk_photo_1[] = { + 0x2A71, + 0x2A72, + 0x0000, +}; + +static u32 l_msg_talk_photo_2[] = { + 0x2A74, + 0x2A75, + 0x0000, +}; + +static u32 l_msg_talk_photo_3[] = { + 0x2A77, + 0x2A78, + 0x0000, +}; + +static u32 l_msg_talk_photo_4[] = { + 0x2A7A, + 0x2A7B, + 0x0000, +}; + +static u32 l_msg_talk_photo_5[] = { + 0x2A7D, + 0x2A7E, + 0x0000, +}; + +static u32 l_msg_talk_photo_6[] = { + 0x2A80, + 0x2A81, + 0x0000, +}; + +static u32* l_msg_talk_photo[] = { + l_msg_talk_photo_0, l_msg_talk_photo_1, l_msg_talk_photo_2, l_msg_talk_photo_3, + l_msg_talk_photo_4, l_msg_talk_photo_5, l_msg_talk_photo_6, +}; + +static u32 l_msg_buy_photo[] = { + 0x3786, + 0x0000 +}; + +static u32 l_msg_get_photo[] = { + 0x3785, + 0x0000 +}; + +static u32 l_msg_2F[] = { + 0x2A82, + 0x2A83, + 0x2A84 +}; + +static u32 l_msg_down[] = { + 0x2A86, + 0x0000 +}; + +static u32 l_msg_ub4[] = { + 0x2D62, + 0x0000, +}; + +static u32 l_msg_1st_order_xy[] = { + 0x2A5E, + 0x2A5F, + 0x2A60, + 0x0002 +}; + +static u32 l_msg_2nd_order_xy[] = { + 0x2A61, + 0x2A62, + 0x2A60, + 0x0004 +}; + +static u32 l_msg_3rd_order_xy[] = { + 0x2A64, + 0x2A60, + 0x0006 +}; + +static u32 l_msg_color_xy[] = { + 0x2A58, + 0x2A59, + 0x2A5A, + 0x0007, + 0x2A85, + 0x0008, + 0x2A5B, + 0x0000 +}; + +static u32 l_msg_xy_buy_photo[] = { + 0x3788, + 0x3789, + 0x0009, + 0x378C, + 0x000A, + 0x378D, + 0x000B, + 0x3786, + 0x0000 +}; + +static dCcD_SrcCyl l_cyl_src2 = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ 0, + /* SrcObjTg SPrm */ 0, + /* SrcObjCo SPrm */ cCcD_CoSPrm_NoCoHitInfSet_e | cCcD_CoSPrm_VsGrpAll_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_Set_e, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGCylS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 40.0f, + /* Height */ 160.0f, + }, +}; + +static char* l_npc_staff_id = { + "Po" +}; + +static const int l_bck_ix_tbl[] = { + PO_BCK_WAIT01, + PO_BCK_TALK01, + PO_BCK_TALK02, + PO_BCK_WALK01, + PO_BCK_SPIT, +}; + +static const int l_btp_ix_tbl[] = { + PO_BTP_MABA01, + PO_BTP_MABA02 +}; + +struct SaveDatStruct { + /* 0x00 */ u16 field_0x00; + /* 0x02 */ u16 field_0x02; + /* 0x04 */ u16 field_0x04; + /* 0x06 */ u16 field_0x06; +}; // Size: 0x08 + +static const SaveDatStruct l_save_dat = { + 0x1208, + 0x1701, + 0x1601, + 0xC407, +}; + + +struct PsoData { + /* 0x00 */ f32 field_0x00; + /* 0x04 */ f32 field_0x04; + /* 0x08 */ f32 field_0x08; + /* 0x0C */ f32 field_0x0C; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ s16 field_0x14; + /* 0x16 */ u8 field_0x16; + /* 0x17 */ u8 field_0x17; +}; // Size: 0x18 + +static PsoData l_pso_photo = { + 0.0f, + 100.0f, + -30.0f, + 40.0f, + 90.0f, + 0x0000, + 0xFF, + 0x04 +}; + +static cXyz l_counter_pos[] = { + cXyz(-490.0f, 0.0f, -10.0f), + cXyz(-260.0f, 0.0f, -250.0f) +}; + +static cXyz l_gallery_pos(-260.0f, 500.0f, 400.0f); /* 000000EC-000002D0 .text __ct__12daNpcPhoto_cFv */ daNpcPhoto_c::daNpcPhoto_c() { - /* Nonmatching */ + field_0x9C3 = 0; + field_0x9C2 = false; + field_0x9C0 = 0; + field_0x9C1 = 0; + field_0x984 = 0.0f; + field_0x9A8 = 0; + field_0x988 = 60.0f; + field_0x958.x = 0.0f; + field_0x958.y = 0.0f; + field_0x958.z = 0.0f; + field_0x9CD = false; + field_0x9D6 = 0; + field_0x994 = true; + field_0x9AE = home.angle.y; + field_0x9C8 = false; + field_0x9C7 = true; + field_0x98C = -1.0f; } /* 00000740-00000858 .text daNpc_Photo_nodeCallBack__FP7J3DNodei */ -static BOOL daNpc_Photo_nodeCallBack(J3DNode*, int) { - /* Nonmatching */ +static BOOL daNpc_Photo_nodeCallBack(J3DNode* node, int calcTiming) { + if (calcTiming == J3DNodeCBCalcTiming_In) { + J3DModel* model = j3dSys.getModel(); + J3DJoint* joint = (J3DJoint*)node; + daNpcPhoto_c* i_this = (daNpcPhoto_c*)model->getUserArea(); + s32 jntNo = joint->getJntNo(); + cMtx_copy(model->getAnmMtx(jntNo), *calc_mtx); + + if(jntNo == i_this->m_jnt.getHeadJntNum()) { + mDoMtx_XrotM(*calc_mtx, i_this->m_jnt.getHead_y()); + mDoMtx_ZrotM(*calc_mtx, -i_this->m_jnt.getHead_x()); + } + + if(jntNo == i_this->m_jnt.getBackboneJntNum()) { + mDoMtx_XrotM(*calc_mtx, i_this->m_jnt.getBackbone_y()); + mDoMtx_ZrotM(*calc_mtx, -i_this->m_jnt.getBackbone_x()); + } + + model->setAnmMtx(jntNo, *calc_mtx); + cMtx_copy(*calc_mtx, J3DSys::mCurrentMtx); + } + return TRUE; } /* 00000858-00000878 .text CheckCreateHeap__FP10fopAc_ac_c */ -static BOOL CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL CheckCreateHeap(fopAc_ac_c* i_this) { + return static_cast(i_this)->createHeap(); } /* 00000878-0000095C .text phase_1__FP12daNpcPhoto_c */ -void phase_1(daNpcPhoto_c*) { - /* Nonmatching */ +static cPhs_State phase_1(daNpcPhoto_c* i_this) { + fopAcM_SetupActor(i_this, daNpcPhoto_c); + s16 arg0 = i_this->getPrmArg0(); + if(arg0 != 255){ + if(arg0 == 0){ + if(!dComIfGs_checkGetItem(dItem_COLLECT_MAP_20_e) && arg0 != dComIfGp_getStartStagePoint()){ + return cPhs_STOP_e; + } + } else{ + if(dComIfGs_checkGetItem(dItem_COLLECT_MAP_20_e) || arg0 != dComIfGp_getStartStagePoint()) { + return cPhs_STOP_e; + } + i_this->field_0x9C1 = 4; + } + } + i_this->field_0x9C2 = true; + return cPhs_NEXT_e; } /* 0000095C-000009D4 .text phase_2__FP12daNpcPhoto_c */ -void phase_2(daNpcPhoto_c*) { - /* Nonmatching */ +static cPhs_State phase_2(daNpcPhoto_c* i_this) { + cPhs_State phase_state = dComIfG_resLoad(i_this->getPhaseP(), l_arcname_tbl[0]); + if (phase_state == cPhs_COMPLEATE_e) { + if (fopAcM_entrySolidHeap(i_this, CheckCreateHeap, 0)) { + return i_this->createInit(); + } else { + i_this->mpMorf = NULL; + return cPhs_ERROR_e; + } + } + return phase_state; } /* 000009D4-00000A04 .text _create__12daNpcPhoto_cFv */ cPhs_State daNpcPhoto_c::_create() { - /* Nonmatching */ + static cPhs__Handler l_method[] = { + (cPhs__Handler)phase_1, + (cPhs__Handler)phase_2, + NULL, + }; + return dComLbG_PhaseHandler(&mPhs2, l_method, this); } /* 00000A04-00000CA0 .text createHeap__12daNpcPhoto_cFv */ -void daNpcPhoto_c::createHeap() { - /* Nonmatching */ +BOOL daNpcPhoto_c::createHeap() { + J3DModelData* modelData = (J3DModelData *)dComIfG_getObjectIDRes(l_arcname_tbl[0], PO_BDL_PO); + mpMorf = new mDoExt_McaMorf( + modelData, + NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectIDRes(l_arcname_tbl[0], l_bck_ix_tbl[field_0x9C8]), + J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1, NULL, + 0x80000,0x11020022 + ); + + if (mpMorf == NULL || mpMorf->getModel() == NULL) { + return FALSE; + } + + m_jnt.setHeadJntNum(modelData->getJointName()->getIndex("head")); + JUT_ASSERT(0x4A7, m_jnt.getHeadJntNum() >= 0); + m_jnt.setBackboneJntNum(modelData->getJointName()->getIndex("backbone")); + JUT_ASSERT(0x4AC, m_jnt.getBackboneJntNum() >= 0); + + if (!initTexPatternAnm(false, -1)) { + return FALSE; + } + + for(u16 i = 0; i < modelData->getJointNum(); i++) { + if(i == m_jnt.getHeadJntNum() || i == m_jnt.getBackboneJntNum()) { + modelData->getJointNodePointer(i)->setCallBack(daNpc_Photo_nodeCallBack); + } + } + mpMorf->getModel()->setUserArea((u32)this); + mAcchCir.SetWall(30.0f, 30.0f); + mObjAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); + return TRUE; + + + return FALSE; } /* 00000CA0-00000CC0 .text daNpcPhoto_XyCheckCB__FPvi */ -static s16 daNpcPhoto_XyCheckCB(void*, int) { - /* Nonmatching */ +static s16 daNpcPhoto_XyCheckCB(void* i_this, int i_itemBtn) { + return ((daNpcPhoto_c*)i_this)->XyCheckCB(i_itemBtn); } /* 00000CC0-00000CE0 .text daNpcPhoto_XyEventCB__FPvi */ -static s16 daNpcPhoto_XyEventCB(void*, int) { - /* Nonmatching */ +static s16 daNpcPhoto_XyEventCB(void* i_this, int i_itemBtn) { + return ((daNpcPhoto_c*)i_this)->XyEventCB(i_itemBtn); } /* 00000CE0-00001048 .text createInit__12daNpcPhoto_cFv */ -void daNpcPhoto_c::createInit() { - /* Nonmatching */ +cPhs_State daNpcPhoto_c::createInit() { + int temp = 0xFF; + + u8 pathIndex = getPrmRailID(); + if(pathIndex != 0xFF) { + mPathRun.setInf(pathIndex, fopAcM_GetRoomNo(this), true); + if(mPathRun.mPath == NULL) { + return cPhs_ERROR_e; + } + + dPath_GetNextRoomPath(mPathRun.mPath, -1); + + if(dComIfGs_isEventBit(l_save_dat.field_0x02)) { + cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex); + old.pos = point; + current.pos = old.pos; + mPathRun.incIdxLoop(); + field_0x9A8 = 1; + field_0x9C1 = 2; + } + temp = 0xFE; + } + gravity = -9.0f; + + mPhotoLinkBackEventIdx = dComIfGp_evmng_getEventIdx("PHOTO_LINK_BACK",0xff); + mPhotoGetItemEventIdx = dComIfGp_evmng_getEventIdx("PHOTO_GET_ITEM",0xff); + mPhotoGetItem2EventIdx = dComIfGp_evmng_getEventIdx("PHOTO_GET_ITEM2",0xff); + mPhotoGetPhotoEventIdx = dComIfGp_evmng_getEventIdx("PHOTO_GET_PHOTO",0xff); + mPhotoGalleryEventIdx = dComIfGp_evmng_getEventIdx("PHOTO_GALLERY",0xff); + mPhotoCounterTalk0EventIdx = dComIfGp_evmng_getEventIdx("PHOTO_COUNTER_TALK0",0xff); + mPhotoCounterTalk1EventIdx = dComIfGp_evmng_getEventIdx("PHOTO_COUNTER_TALK1",0xff); + mPhotoDateUB4EventIdx = dComIfGp_evmng_getEventIdx("PHOTO_DATE_UB4",0xff); + field_0x9A6 = mPhotoCounterTalk0EventIdx; + + mEventCut.setActorInfo2(l_npc_staff_id, this); + + field_0x9B6 = 0; + field_0x9BC = false; + field_0x9BD = false; + + fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); + attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 173; + attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 173; + attention_info.flags = fopAc_Attn_UNK1000000_e | fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e; + + eventInfo.setXyCheckCB(&daNpcPhoto_XyCheckCB); + eventInfo.setXyEventCB(&daNpcPhoto_XyEventCB); + + if (field_0x9C1 == 4) { + field_0x9D7 = false; + field_0x9D8 = false; + } else { + field_0x9D7 = l_npc_dat.field_0x52; + field_0x9D8 = l_npc_dat.field_0x53; + } + + field_0x9B2 = l_npc_dat.field_0x28; + mObjAcch.CrrPos(*dComIfG_Bgsp()); + + if(mObjAcch.GetGroundH() != -G_CM3D_F_INF) { + current.pos.y = home.pos.y = mObjAcch.GetGroundH(); + } + + setMtx(); + mpMorf->getModel()->calc(); + mStts.Init(temp, 0xFF, this); + mCyl.Set(dNpc_cyl_src); + mCyl.SetStts(&mStts); + setCollision(&mCyl, current.pos + field_0x958, field_0x988, 150.0f); + field_0x6F8[0].Set(l_cyl_src2); + field_0x6F8[0].SetStts(&mStts); + field_0x6F8[1].Set(l_cyl_src2); + field_0x6F8[1].SetStts(&mStts); + return 4; } /* 00001048-000010A4 .text _delete__12daNpcPhoto_cFv */ bool daNpcPhoto_c::_delete() { - /* Nonmatching */ + dComIfG_resDelete(getPhaseP(), l_arcname_tbl[0]); + if(heap && mpMorf) { + mpMorf->stopZelAnime(); + } + return true; } /* 000010A4-0000125C .text _draw__12daNpcPhoto_cFv */ bool daNpcPhoto_c::_draw() { - /* Nonmatching */ + + J3DModel* model = mpMorf->getModel(); + J3DModelData *model_data = model->getModelData(); + g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType(model, &tevStr); + mBtpAnm.entry(model_data, mFrame); + mpMorf->updateDL(); + mBtpAnm.remove(model_data); + + cXyz shadowPos( + current.pos.x, + current.pos.y + 150.0f, + current.pos.z + ); + + mShadowId = dComIfGd_setShadow( + mShadowId, 1, mpMorf->getModel(), &shadowPos, 800.0f, 20.0f, + current.pos.y, mObjAcch.GetGroundH(), mObjAcch.m_gnd, &tevStr + ); + + if (field_0x9C1 == 4) { + dSnap_Obj obj; + + cXyz temp( + l_pso_photo.field_0x00, + l_pso_photo.field_0x04, + l_pso_photo.field_0x08 + ); + temp += current.pos; + obj.SetInf(5, this, l_pso_photo.field_0x16, l_pso_photo.field_0x17, 0x7FFF); + obj.SetGeo(temp, l_pso_photo.field_0x0C, l_pso_photo.field_0x10, l_pso_photo.field_0x14 + current.angle.y); + dSnap_RegistSnapObj(obj); + } else { + dSnap_RegistFig(DSNAP_TYPE_UNK5E, this, 1.0f, 1.0f, 1.0f); + } + return true; } +static daNpcPhoto_c::MoveFunc_t moveProc[] = { + &daNpcPhoto_c::executeWait, + &daNpcPhoto_c::executeTalk, + &daNpcPhoto_c::executeWalk, + &daNpcPhoto_c::executeTurn, +}; + /* 0000125C-0000151C .text _execute__12daNpcPhoto_cFv */ bool daNpcPhoto_c::_execute() { - /* Nonmatching */ + m_jnt.setParam( + l_npc_dat.field_0x08, l_npc_dat.field_0x0A, l_npc_dat.field_0x10, + l_npc_dat.field_0x12, l_npc_dat.field_0x04, l_npc_dat.field_0x06, + l_npc_dat.field_0x0C, l_npc_dat.field_0x0E, l_npc_dat.field_0x14 + ); + + chkAttention(); + mEyePos.set( + current.pos.x, + current.pos.y + l_npc_dat.field_0x30, + current.pos.z + ); + + checkOrder(); + + if (!dComIfGp_event_runCheck() || (eventInfo.checkCommandTalk() && field_0x9C7)) { + (this->*moveProc[field_0x9C0])(); + } else { + eventMove(); + } + + eventOrder(); + playTexPatternAnm(); + playAnm(); + + if(field_0x9C8 == 3){ + cLib_chaseF(&speedF, field_0x984, 0.1f); + float temp = speedF * l_npc_dat.field_0x38; + + if(temp < 0.5f) { + temp = 0.5f; + } + mpMorf->setPlaySpeed(temp); + } else { + cLib_chaseF(&speedF, field_0x984, 0.5f); + } + + fopAcM_posMoveF(this, mStts.GetCCMoveP()); + mObjAcch.CrrPos(*dComIfG_Bgsp()); + setCollision(&mCyl, current.pos + field_0x958, field_0x988, 150.0f); + + if (field_0x9C1 == 2) { + for(int i = 0; i < 2; i++) { + setCollision(&field_0x6F8[i], + cXyz( + l_counter_pos[i].x, + l_counter_pos[i].y, + l_counter_pos[i].z + ), + 110.0f, 150.0f + ); + } + } + + cXyz temp( + l_npc_dat.field_0x1C, + l_npc_dat.field_0x20, + l_npc_dat.field_0x24 + ); + + mDoMtx_stack_c::YrotS(current.angle.y); + mDoMtx_stack_c::multVec(&temp, &temp); + temp += current.pos; + attention_info.position = temp; + eyePos = mEyePos; + lookBack(); + setMtx(); + return false; } + /* 0000151C-00001580 .text executeCommon__12daNpcPhoto_cFv */ -void daNpcPhoto_c::executeCommon() { - /* Nonmatching */ +bool daNpcPhoto_c::executeCommon() { + if (field_0x9BD) { + field_0x9BE = 1; + } else { + field_0x9BE = 0; + } + + if (field_0x9BC == 1) { + executeSetMode(1); + } + return field_0x9BC; } /* 00001580-000017D0 .text executeSetMode__12daNpcPhoto_cFUc */ -void daNpcPhoto_c::executeSetMode(unsigned char) { - /* Nonmatching */ +void daNpcPhoto_c::executeSetMode(u8 param_1) { + s16 angle; + field_0x984 = 0.0f; + + switch (param_1) { + case 0: + setAnmTbl(l_npc_anm_wait); + field_0x9A8 = l_npc_dat.field_0x4A + cM_rndF(l_npc_dat.field_0x4C - l_npc_dat.field_0x4A); + break; + case 2: + setAnmTbl(l_npc_anm_walk); + field_0x9A8 = l_npc_dat.field_0x4E + cM_rndF(l_npc_dat.field_0x50 - l_npc_dat.field_0x4E); + break; + case 3: + cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex); + dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle); + + if (angle == current.angle.y) { + param_1 = 2; + setAnmTbl(l_npc_anm_walk); + field_0x9A8 = l_npc_dat.field_0x4E + cM_rndF(l_npc_dat.field_0x50 - l_npc_dat.field_0x4E); + } + break; + } + field_0x9C0 = param_1; } /* 000017D0-00001A80 .text executeWait__12daNpcPhoto_cFv */ void daNpcPhoto_c::executeWait() { - /* Nonmatching */ + if(!executeCommon()) { + field_0x988 = 60.0f; + field_0x958.x = 0.0f; + field_0x958.y = 0.0f; + field_0x958.z = 0.0f; + field_0x9CD = false; + + if(!dComIfGs_isEventBit(l_save_dat.field_0x02)){ + field_0x988 = 150.0f; + f32 zPos = l_npc_dat.field_0x34; + field_0x958.x = 0.0f; + field_0x958.y = 0.0f; + field_0x958.z = zPos; + + if(mCyl.ChkCoHit()) { + daNpcPhoto_c* pActor = (daNpcPhoto_c*)mCyl.GetCoHitAc(); + if(pActor && fopAcM_GetProfName(pActor) == PROC_PLAYER) { + field_0x9BE = 2; + } + + } + } else if(field_0x9C1 == 4 && ((field_0x9C6 & 0x10) == 0)){ + daPy_py_c* link = (daPy_py_c*)dComIfGp_getLinkPlayer(); + + if (link->current.pos.y < 10.0f && link->current.pos.x > -300.0f && link->current.pos.z > -500.0f) { + field_0x9BE = 10; + } + } else { + if( + dComIfGp_getStartStagePoint() == 0 && + (!dComIfGs_isEventBit(l_save_dat.field_0x04) && field_0x9BE != 7) && + dComIfGp_getLinkPlayer()->current.pos.y > 400.0f && + dComIfGp_getLinkPlayer()->current.pos.x > -600.0f){ + field_0x9BE = 7; + } + + if(field_0x9C1 == 2){ + eventInfo.setEventId(-1); + field_0x9C7 = true; + + dCcD_GObjInf* pGObjInf; + for (int i = 0; i < 2; i++) { + pGObjInf = &field_0x6F8[i]; + if (pGObjInf->ChkCoHit()) { + daNpcPhoto_c* pActor = (daNpcPhoto_c*)pGObjInf->GetCoHitAc(); + if(pActor != NULL && fopAcM_GetProfName(pActor) == PROC_PLAYER) { + field_0x9CD = true; + break; + } + } + } + } + + if(field_0x9C1 == 1 && !field_0x9BD && dComIfGp_getLinkPlayer()->current.pos.y < current.pos.y + -50.0f) { + executeSetMode(3); + field_0x9C1 = 3; + } + + if(field_0x9C1 == 3 && !field_0x9BD) { + if(field_0x9A8 == 0) { + executeSetMode(3); + } else { + field_0x9A8--; + } + } + } + } } /* 00001A80-00001BB4 .text executeTalk__12daNpcPhoto_cFv */ void daNpcPhoto_c::executeTalk() { - /* Nonmatching */ + executeCommon(); + if(!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) { + if(talk2(1) == fopMsgStts_BOX_CLOSED_e){ + field_0x9BC = false; + executeSetMode(0); + u8 temp = field_0x9C6; + if((temp & 1) != 0){ + field_0x9C6 = temp & 254; + mItemNo = 31; + field_0x9BE = 4; + + } else { + if((temp & 2) != 0){ + field_0x9C6 = temp & ~0x02; + mItemNo = 38; + field_0x9BE = 5; + + } else { + if((temp & 4) != 0){ + field_0x9C6 = temp & ~0x04; + field_0x9BE = 3; + setAnmTbl(l_npc_anm_spit); + field_0x9C9 |= 4; + } else { + field_0x9C6 = temp | 64; + } + } + } + } else { + setAnmFromMsgTag(); + } + } } /* 00001BB4-00001D98 .text executeWalk__12daNpcPhoto_cFv */ void daNpcPhoto_c::executeWalk() { - /* Nonmatching */ + if(!executeCommon()) { + bool temp = false; + if(mPathRun.chkPointPass(current.pos, mPathRun.mbGoingForwards) && !mPathRun.nextIdxAuto()) { + temp = true; + } + + if (field_0x9BD != 0) { + executeSetMode(0); + } else if (!temp) { + cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex); + s16 angle; + dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle); + field_0x9BA = angle; + field_0x994 = false; + field_0x9B6 = l_npc_dat.field_0x18; + field_0x9D6 = 2; + m_jnt.setTrn(); + field_0x984 = l_npc_dat.field_0x3C; + + u8 pointIndex = mPathRun.mCurrPointIndex; + + if (mPathRun.mbGoingForwards) { + pointIndex--; + } else { + pointIndex++; + } + + cXyz point2 = mPathRun.getPoint(pointIndex); + if (point2.y - point.y > 400.0f) { + field_0x984 = l_npc_dat.field_0x3C * l_npc_dat.field_0x40; + } + + } else{ + executeSetMode(0); + field_0x9C1 = 2; + field_0x9AE = home.angle.y; + } + } } /* 00001D98-00001E5C .text executeTurn__12daNpcPhoto_cFv */ void daNpcPhoto_c::executeTurn() { - /* Nonmatching */ + if (!executeCommon()) { + s16 angle; + cXyz point = mPathRun.getPoint(mPathRun.mCurrPointIndex); + dNpc_calc_DisXZ_AngY(current.pos, point, NULL, &angle); // maybe not oldpos + field_0x9BA = angle; + field_0x994 = false; + field_0x9D6 = 2; + if (!m_jnt.trnChk()) { + executeSetMode(2); + } + } } /* 00001E5C-00001FDC .text checkOrder__12daNpcPhoto_cFv */ void daNpcPhoto_c::checkOrder() { - /* Nonmatching */ + if(eventInfo.mCommand == dEvtCmd_INDEMO_e){ + if(dComIfGp_evmng_startCheck(mPhotoLinkBackEventIdx) && field_0x9BE == 3){ + field_0x9BE = 0; + } else if(dComIfGp_evmng_startCheck(mPhotoGetItemEventIdx) && field_0x9BE == 4){ + field_0x9BE = 0; + } else if(dComIfGp_evmng_startCheck(mPhotoGetItem2EventIdx) && field_0x9BE == 5){ + field_0x9BE = 0; + } else if(dComIfGp_evmng_startCheck(mPhotoGetPhotoEventIdx) && field_0x9BE == 6){ + field_0x9BE = 0; + } else if(dComIfGp_evmng_startCheck(mPhotoGalleryEventIdx) && field_0x9BE == 7){ + field_0x9BE = 0; + } else if(dComIfGp_evmng_startCheck(mPhotoDateUB4EventIdx) && field_0x9BE == 10){ + field_0x9BE = 0; + } + } else if(eventInfo.mCommand == dEvtCmd_INTALK_e && (field_0x9BE == 2 || field_0x9BE == 1)){ + field_0x9BC = true; + executeSetMode(1); + } } /* 00001FDC-000021B8 .text eventOrder__12daNpcPhoto_cFv */ void daNpcPhoto_c::eventOrder() { - /* Nonmatching */ + if (field_0x9C6 & 0x40) { + field_0x9C6 &= ~0x40; + dComIfGp_event_reset(); + initTexPatternAnm(true, -1); + field_0x9C9 &= 0x7F; + field_0x9C7 = true; + field_0x9BC = false; + executeSetMode(0); + } + u8 temp = field_0x9BE; + if(temp == 2 || temp == 1){ + eventInfo.onCondition(dEvtCnd_CANTALK_e); + eventInfo.onCondition(dEvtCnd_CANTALKITEM_e); + if (field_0x9BE == 2) { + fopAcM_orderSpeakEvent(this); + } + } else if(temp == 3){ + fopAcM_orderChangeEventId(dComIfGp_getLinkPlayer(), this, mPhotoLinkBackEventIdx, 0, 0xFFFF); + } else if(temp == 4){ + fopAcM_orderChangeEventId(dComIfGp_getLinkPlayer(), this, mPhotoGetItemEventIdx, 0, 0xFFFF); + } else if(temp == 5){ + fopAcM_orderChangeEventId(dComIfGp_getLinkPlayer(), this, mPhotoGetItem2EventIdx, 0, 0xFFFF); + } else if(temp == 6){ + fopAcM_orderChangeEventId(dComIfGp_getLinkPlayer(), this, mPhotoGetPhotoEventIdx, 0, 0xFFFF); + } else if(temp == 7){ + fopAcM_orderOtherEventId(this, mPhotoGalleryEventIdx); + } else if(temp == 10){ + fopAcM_orderOtherEventId(this, mPhotoDateUB4EventIdx); + } } /* 000021B8-00002368 .text eventMove__12daNpcPhoto_cFv */ void daNpcPhoto_c::eventMove() { - /* Nonmatching */ + if(dComIfGp_evmng_endCheck(mPhotoLinkBackEventIdx)){ + field_0x9C6 |= 0x40; + } else if(dComIfGp_evmng_endCheck(field_0x9A6)){ + field_0x9C6 |= 0x40; + eventInfo.mEventId = -1; + field_0x9C7 = true; + field_0x9BE = 0; + field_0x9BC = false; + executeSetMode(0); + } else if(dComIfGp_evmng_endCheck(mPhotoGetItemEventIdx)){ + field_0x9C6 |= 0x40; + } else if(dComIfGp_evmng_endCheck(mPhotoGetItem2EventIdx)){ + field_0x9C6 |= 0x40; + } else if(dComIfGp_evmng_endCheck(mPhotoGetPhotoEventIdx)){ + field_0x9C6 |= 0x40; + } else if(dComIfGp_evmng_endCheck(mPhotoGalleryEventIdx)){ + field_0x9C6 |= 0x40; + } else if(dComIfGp_evmng_endCheck(mPhotoDateUB4EventIdx)){ + field_0x9C6 |= 0x40; + field_0x9C6 |= 0x10; + field_0x9D7 = true; + field_0x9D8 = true; + } else{ + bool temp = mEventCut.getAttnFlag(); + + if(mEventCut.cutProc()) { + if(!mEventCut.getAttnFlag()) { + mEventCut.setAttnFlag(temp); + } + } else { + privateCut(); + setAnmFromMsgTag(); + } + } } /* 00002368-00002560 .text privateCut__12daNpcPhoto_cFv */ void daNpcPhoto_c::privateCut() { - /* Nonmatching */ + static char* cut_name_tbl[] = { + "MES_SET", + "SE_SET", + "POS_SET", + "GET_ITEM", + "SET_ANGLE", + "SET_EYE", + "TURN_TO_PLAYER", + "CLR_HANME", + "GET_PHOTO", + "MES_SET_UB", + "LOOK_UB" + }; + enum { + ACT_MES_SET, + ACT_SE_SET, + ACT_POS_SET, + ACT_GET_ITEM, + ACT_SET_ANGLE, + ACT_SET_EYE, + ACT_TURN_TO_PLAYER, + ACT_CLR_HANME, + ACT_GET_PHOTO, + ACT_MES_SET_UB, + ACT_LOOK_UB, + }; + + int staffIdx = dComIfGp_evmng_getMyStaffId(l_npc_staff_id); + if (staffIdx == -1) { + return; + } + + mActIdx = dComIfGp_evmng_getMyActIdx(staffIdx, cut_name_tbl, ARRAY_SIZE(cut_name_tbl), TRUE, 0); + if (mActIdx == -1) { + dComIfGp_evmng_cutEnd(staffIdx); + return; + } + + if (dComIfGp_evmng_getIsAddvance(staffIdx)) { + switch (mActIdx) { + case ACT_MES_SET: + eventMesSetInit(staffIdx); + break; + case ACT_SE_SET: + eventSeSetInit(staffIdx); + break; + case ACT_POS_SET: + eventPosSetInit(); + break; + case ACT_GET_ITEM: + eventGetItemInit(); + break; + case ACT_SET_ANGLE: + eventSetAngleInit(); + break; + case ACT_SET_EYE: + eventSetEyeInit(); + break; + case ACT_TURN_TO_PLAYER: + eventTurnToPlayerInit(); + break; + case ACT_CLR_HANME: + eventClrHanmeInit(); + break; + case ACT_GET_PHOTO: + eventGetPhotoInit(); + break; + case ACT_MES_SET_UB: + eventMesSetUbInit(staffIdx); + break; + } + } + + bool evtRes; + switch (mActIdx) { + case ACT_MES_SET: + evtRes = eventMesSet(); + break; + case ACT_GET_ITEM: + evtRes = eventGetItem(); + break; + case ACT_SET_EYE: + evtRes = eventSetEye(); + break; + case ACT_TURN_TO_PLAYER: + evtRes = eventTurnToPlayer(); + break; + case ACT_GET_PHOTO: + evtRes = eventGetPhoto(); + break; + case ACT_MES_SET_UB: + evtRes = eventMesSetUb(); + break; + case ACT_LOOK_UB: + evtRes = eventLookUb(); + break; + default: + evtRes = true; + break; + } + if (evtRes) { + dComIfGp_evmng_cutEnd(staffIdx); + } } /* 00002560-00002758 .text eventMesSetInit__12daNpcPhoto_cFi */ -void daNpcPhoto_c::eventMesSetInit(int) { - /* Nonmatching */ +void daNpcPhoto_c::eventMesSetInit(int i_staffId) { + int* pData = dComIfGp_evmng_getMyIntegerP(i_staffId, "MsgNo"); + + if(pData) { + field_0x980 = NULL; + field_0x9D0 = NULL; + u32 msgNo = *pData; + + switch (msgNo) { + case 0: + if (!dComIfGs_isEventBit(l_save_dat.field_0x04)) { + field_0x980 = l_msg_1st_talk_photo; + field_0x9D0 = NULL; + dComIfGs_onEventBit(l_save_dat.field_0x04); + + } else { + int temp = 0; + daTagPhoto_c* ac = (daTagPhoto_c*)dComIfGp_event_getPt2(); + if(ac != NULL){ + temp = ac->getTagNo(); + } + field_0x980 = l_msg_talk_photo[(temp & 0xFF)]; + field_0x9D0 = NULL; + } + setMessage(*field_0x980); + break; + case 1: + setMessage(getMsg()); + break; + case 99: + mDoAud_seStart(JA_SE_UTSUSHIE_TO_DX); + field_0x980 ++; + + if (field_0x9D0 != NULL) { + field_0x9D0++; + } + setMessage(*field_0x980); + break; + default: + setMessage(msgNo); + break; + } + } else { + field_0x980 ++; + + if (field_0x9D0 != 0) { + field_0x9D0++; + } + setMessage(*field_0x980); + } } /* 00002758-0000278C .text eventMesSet__12daNpcPhoto_cFv */ -void daNpcPhoto_c::eventMesSet() { - /* Nonmatching */ +bool daNpcPhoto_c::eventMesSet() { + return talk2(0) == fopMsgStts_BOX_CLOSED_e; } /* 0000278C-0000289C .text eventSeSetInit__12daNpcPhoto_cFi */ -void daNpcPhoto_c::eventSeSetInit(int) { - /* Nonmatching */ +void daNpcPhoto_c::eventSeSetInit(int i_staffId) { + int* seNo = dComIfGp_evmng_getMyIntegerP(i_staffId, "SeNo"); + + if(seNo != NULL) { + switch (*seNo) { + case 0: + mDoAud_seStart(JA_SE_UTSUSHIE_TO_DX); + break; + default: + mDoAud_seStart(JA_SE_UTSUSHIE_TO_DX); + break; + } + } else { + mDoAud_seStart(JA_SE_UTSUSHIE_TO_DX); + } } + /* 0000289C-00002C60 .text eventPosSetInit__12daNpcPhoto_cFv */ void daNpcPhoto_c::eventPosSetInit() { - /* Nonmatching */ + s16 angle; + daTagPhoto_c* ac = (daTagPhoto_c*)dComIfGp_event_getPt2(); + + if(ac){ + cXyz temp = ac->current.pos; + dPath* path = dPath_GetNextRoomPath(mPathRun.mPath, fopAcM_GetRoomNo(this)); + + if(path != NULL){ + dPnt* pnt = dPath_GetPnt(path, ac->getTagNo()); + if(pnt != NULL){ + old.pos = pnt->m_position; + current.pos = old.pos; + dBgS_GndChk gndChk; + + Vec temp; + temp.y = current.pos.y; + temp.z = current.pos.z; + temp.y += 50.0f; + temp.x = current.pos.x; + + gndChk.SetPos(&temp); + + f32 floor_y = dComIfG_Bgsp()->GroundCross(&gndChk); + if(floor_y != -G_CM3D_F_INF){ + old.pos.y = floor_y; + current.pos.y = floor_y; + } + } + } + dNpc_calc_DisXZ_AngY(current.pos, temp, NULL, &angle); + shape_angle.y = current.angle.y = field_0x9AE = angle; + } else { + daPy_lk_c* link = daPy_getPlayerLinkActorClass(); + old.pos = l_gallery_pos; + current.pos = old.pos; + dNpc_calc_DisXZ_AngY(current.pos, link->current.pos, NULL, &angle); + shape_angle.y = current.angle.y = field_0x9AE = angle; + } + dComIfGp_event_setTalkPartner(this); + mPathRun.mCurrPointIndex = mPathRun.mPath->m_num - 2; + mPathRun.mbGoingForwards = false; + + executeSetMode(0); + field_0x9C1 = 1; + int temp = cM_rndF(3.0f); + if (temp == 3) { + temp = 0; + } + mMsgNno = l_msg_2F[temp]; } /* 00002FE0-0000303C .text eventGetItemInit__12daNpcPhoto_cFv */ void daNpcPhoto_c::eventGetItemInit() { - /* Nonmatching */ + fpc_ProcID itemID = fopAcM_createItemForPresentDemo(¤t.pos, mItemNo, 0, -1, fopAcM_GetRoomNo(this)); + if (itemID != fpcM_ERROR_PROCESS_ID_e) { + dComIfGp_event_setItemPartnerId(itemID); + } } /* 0000303C-00003044 .text eventGetItem__12daNpcPhoto_cFv */ -void daNpcPhoto_c::eventGetItem() { - /* Nonmatching */ +bool daNpcPhoto_c::eventGetItem() { + return true; } /* 00003044-000030A8 .text eventSetAngleInit__12daNpcPhoto_cFv */ void daNpcPhoto_c::eventSetAngleInit() { - /* Nonmatching */ + daPy_lk_c* link = daPy_getPlayerLinkActorClass(); + cXyz pos = current.pos - link->current.pos; + link->changeDemoMoveAngle(cM_atan2s(pos.x, pos.z)); } /* 000030A8-000030F0 .text eventSetEyeInit__12daNpcPhoto_cFv */ void daNpcPhoto_c::eventSetEyeInit() { - /* Nonmatching */ + field_0x9B0 = 0; + dComIfGp_event_setTalkPartner(this); } /* 000030F0-000031F0 .text eventSetEye__12daNpcPhoto_cFv */ -void daNpcPhoto_c::eventSetEye() { - /* Nonmatching */ +bool daNpcPhoto_c::eventSetEye() { + daPy_lk_c* link = daPy_getPlayerLinkActorClass(); + s16 temp = link->shape_angle.y + cM_ssin(field_0x9B0) * 12288.0f; + field_0x9B0 += 0x400; + mEyePos.x = 0.0f; + mEyePos.y = 0.0f; + mEyePos.z = 100.0f; + mDoMtx_stack_c::YrotS(temp); + mDoMtx_stack_c::XrotM(-0x1000); + mDoMtx_stack_c::multVec(&mEyePos, &mEyePos); + mEyePos += link->eyePos; + return TRUE; } /* 000031F0-00003260 .text eventTurnToPlayerInit__12daNpcPhoto_cFv */ void daNpcPhoto_c::eventTurnToPlayerInit() { - /* Nonmatching */ + fopAc_ac_c* link = dComIfGp_getLinkPlayer(); + dNpc_calc_DisXZ_AngY(current.pos, link->current.pos, 0, &field_0x9AE); } /* 00003260-00003278 .text eventTurnToPlayer__12daNpcPhoto_cFv */ -void daNpcPhoto_c::eventTurnToPlayer() { - /* Nonmatching */ +bool daNpcPhoto_c::eventTurnToPlayer() { + return current.angle.y == field_0x9AE ? TRUE : FALSE; } /* 00003278-000032B8 .text eventClrHanmeInit__12daNpcPhoto_cFv */ void daNpcPhoto_c::eventClrHanmeInit() { - /* Nonmatching */ + initTexPatternAnm(true, -1); + field_0x9C9 &= 0x7F; } /* 000032B8-00003300 .text eventGetPhotoInit__12daNpcPhoto_cFv */ void daNpcPhoto_c::eventGetPhotoInit() { - /* Nonmatching */ + dComIfGp_setPictureStatusGetOn(dKy_get_dayofweek()); + field_0x9B0 = 10; } /* 00003300-0000331C .text eventGetPhoto__12daNpcPhoto_cFv */ -void daNpcPhoto_c::eventGetPhoto() { - /* Nonmatching */ +bool daNpcPhoto_c::eventGetPhoto() { + field_0x9B0--; + return field_0x9B0 == 0; } /* 0000331C-0000333C .text eventMesSetUbInit__12daNpcPhoto_cFi */ -void daNpcPhoto_c::eventMesSetUbInit(int) { - /* Nonmatching */ +void daNpcPhoto_c::eventMesSetUbInit(int i_staffId) { + eventMesSetInit(i_staffId); } /* 0000333C-00003370 .text eventMesSetUb__12daNpcPhoto_cFv */ -void daNpcPhoto_c::eventMesSetUb() { - /* Nonmatching */ +bool daNpcPhoto_c::eventMesSetUb() { + eventLookUb(); + return eventMesSet(); } /* 00003370-000033E4 .text eventLookUb__12daNpcPhoto_cFv */ -void daNpcPhoto_c::eventLookUb() { - /* Nonmatching */ +bool daNpcPhoto_c::eventLookUb() { + fopAc_ac_c* pActor = fopAcM_searchFromName("Ub4", 0, 0); + if (pActor != NULL) { + mLookAtPos = pActor->eyePos; + field_0x9D6 = 1; + field_0x994 = false; + } + return true; } /* 000033E4-0000357C .text talk2__12daNpcPhoto_cFi */ -void daNpcPhoto_c::talk2(int) { - /* Nonmatching */ +u16 daNpcPhoto_c::talk2(int i_param) { + u16 status = 0xFF; + if(mCurrMsgBsPcId == fpcM_ERROR_PROCESS_ID_e) { + + if(i_param == 1) { + mCurrMsgNo = getMsg(); + } + + mCurrMsgBsPcId = fopMsgM_messageSet(mCurrMsgNo, this); + mpCurrMsg = NULL; + field_0x9D5 = 1; + setMsgCamera(); + } else if(mpCurrMsg){ + status = mpCurrMsg->mStatus; + switch(status) { + case fopMsgStts_MSG_DISPLAYED_e: + mpCurrMsg->mStatus = next_msgStatus(&mCurrMsgNo); + + if(mpCurrMsg->mStatus == fopMsgStts_MSG_CONTINUES_e) { + fopMsgM_messageSet(mCurrMsgNo); + } + break; + + case fopMsgStts_MSG_TYPING_e: + if (field_0x9D5 != 0) { + field_0x9D5 = 0; + setMsgCamera(); + } + break; + + case fopMsgStts_BOX_CLOSED_e: + if (field_0x9D4) { + dCamera_c* pCam = dCam_getBody(); + pCam->Start(); + } + + if ((field_0x9C6 & 0x20) != 0) { + field_0x9C6 &= ~0x20; + field_0x9C6 |= 0x40; + } + mpCurrMsg->mStatus = fopMsgStts_MSG_DESTROYED_e; + mCurrMsgBsPcId = fpcM_ERROR_PROCESS_ID_e; + break; + } + if(status != fopMsgStts_MSG_TYPING_e) { + field_0x9D5 = 1; + } + anmAtr(status); + } else { + mpCurrMsg = fopMsgM_SearchByID(mCurrMsgBsPcId); + } + return status; } +static cXyz l_msg_camera[][2] = { + {cXyz(-1336.0f, -497.0f, 928.0f), cXyz(185.0f, -26.0f, 0.0f)}, + {cXyz(-1213.0f, -902.0f, -244.0f), cXyz(284.0f, 36.0f, 280.0f)}, + {cXyz(-29.0f, 252.0f, -1634.0f), cXyz(5.0f, -91.0f, 178.0f)}, +}; + /* 0000357C-000036DC .text setMsgCamera__12daNpcPhoto_cFv */ void daNpcPhoto_c::setMsgCamera() { - /* Nonmatching */ + if (field_0x9D0 != NULL) { + dCamera_c* pCam = dCam_getBody(); + if (*(s8*)field_0x9D0 >= 0) { + pCam->Stop(); + cXyz temp = l_msg_camera[*(s8*)field_0x9D0][0]; + cXyz temp2 = l_msg_camera[*(s8*)field_0x9D0][1]; + mDoMtx_stack_c::YrotS(current.angle.y); + mDoMtx_stack_c::multVec(&temp, &temp); + mDoMtx_stack_c::multVec(&temp2, &temp2); + temp += attention_info.position; + temp2 += attention_info.position; + pCam->Set(temp, temp2, 60.0f, 0); + field_0x9D4 = true; + } else { + pCam->Start(); + field_0x9D4 = false; + } + } } /* 000036DC-000038E8 .text next_msgStatus__12daNpcPhoto_cFPUl */ -void daNpcPhoto_c::next_msgStatus(unsigned long*) { - /* Nonmatching */ +u16 daNpcPhoto_c::next_msgStatus(u32* pMsgNo) { + u16 status = fopMsgStts_MSG_CONTINUES_e; + + switch(*pMsgNo) { + case 0x378A: + case 0x378B: + field_0x9C6 |= 0x20; + status = fopMsgStts_MSG_ENDS_e; + break; + + case 0x2A3A: + case 0x2A3D: + + if(mpCurrMsg->mSelectNum != 0) { + *pMsgNo = 0x2A3B; + field_0x980 = NULL; + field_0x9D0 = NULL; + break; + } + + default: + if(field_0x980 != NULL) { + field_0x980++; + if (field_0x9D0 != NULL) { + field_0x9D0++; + } + switch(*field_0x980) { + + case 7: + case 8: + case 11: + status = fopMsgStts_MSG_ENDS_e; + break; + case 9: + if(mpCurrMsg->mSelectNum == 0) { + if(dComIfGs_getRupee() < dComIfGp_getMessageRupee()){ + *pMsgNo = 0x378B; + } else { + field_0x980++; + if (field_0x9D0 != NULL) { + field_0x9D0++; + } + *pMsgNo = *field_0x980; + dComIfGp_setItemRupeeCount(-dComIfGp_getMessageRupee()); + dComIfGs_onTmpBit(0x301); + } + } else { + field_0x980 = NULL; + *pMsgNo = 0x378A; + } + break; + case 10: + status = fopMsgStts_MSG_ENDS_e; + break; + case 6: + field_0x9C6 |= 1; + field_0x9CC = true; + + case 2: + case 4: + dPb_erasePicture(); + case 1: + case 3: + case 5: { + u8 reg = dComIfGs_getEventReg(l_save_dat.field_0x06); + reg++; + dComIfGs_setEventReg(l_save_dat.field_0x06, reg); + } + case 0: + field_0x980 = NULL; + field_0x9D0 = NULL; + status = fopMsgStts_MSG_ENDS_e; + break; + default: + *pMsgNo = *field_0x980; + break; + } + } else { + status = fopMsgStts_MSG_ENDS_e; + } + } + return status; } /* 000038E8-00003E68 .text getMsg__12daNpcPhoto_cFv */ -void daNpcPhoto_c::getMsg() { - /* Nonmatching */ +u32 daNpcPhoto_c::getMsg() { + u32 msgNo = 0; + u8 eventReg = dComIfGs_getEventReg(l_save_dat.field_0x06); + field_0x980 = 0; + field_0x9D0 = 0; + + if(g_dComIfG_gameInfo.play.getEvent().chkPhoto()) { + if (eventReg < 1) { + msgNo = 0x2A5C; + } else if (eventReg < 3) { + if (eventReg == 2) { + msgNo = 0x2A57; + } else { + if (isPhotoOk()) { + field_0x980 = l_msg_1st_order_xy; + field_0x9D0 = 0; + } else { + msgNo = 0x2A5D; + } + } + } else if (eventReg < 5) { + if (eventReg == 4) { + msgNo = 0x2A57; + } else { + if (isPhotoOk()) { + field_0x980 = l_msg_2nd_order_xy; + field_0x9D0 = 0; + } else { + msgNo = 0x2A5D; + } + } + } else if (eventReg < 6) { + if (isPhotoOk()) { + field_0x980 = l_msg_3rd_order_xy; + field_0x9D0 = 0; + } else { + msgNo = 0x2A5D; + } + } else { + msgNo = 0x2A63; + } + } else if(dComIfGp_event_chkTalkXY()) { + u32 itemNo = dComIfGp_event_getPreItemNo(); + + if(itemNo == CAMERA2 && dComIfGs_isTmpBit(0x302)) { + if (dComIfGs_getPictureNum() < 3) { + field_0x980 = l_msg_xy_buy_photo; + mItemNo = SALVAGE_ITEM1; + } else { + msgNo = 0x3787; + } + } else if(itemNo == dItem_FIREFLY_BOTTLE_e) { + if(eventReg >= 6 && !dComIfGs_checkGetItem(CAMERA2)) { + field_0x980 = l_msg_color_xy; + field_0x9D0 = 0; + dComIfGs_setEquipBottleItemEmpty(); + mItemNo = CAMERA2; + } else{ + msgNo = 0x2A57; + } + } else { + msgNo = 0x2A56; + } + } else if (field_0x9C1 == 3) { + field_0x980 = l_msg_down; + field_0x9D0 = 0; + } else if (field_0x9C1 == 4) { + field_0x980 = l_msg_ub4; + field_0x9D0 = 0; + } else if (dComIfGs_isEventBit(l_save_dat.field_0x04)) { + if(field_0x9C1 == 1) { + msgNo = mMsgNno; + } else { + if(dComIfGs_checkGetItem(CAMERA2)) { + if(dComIfGs_isTmpBit(0x301)) { + field_0x980 = (u32*)l_msg_buy_photo; + field_0x9D0 = 0; + } else { + if(dComIfGs_isTmpBit(0x302)) { + field_0x980 = l_msg_get_photo; + field_0x9D0 = 0; + + } else { + if(isPhotoDxOk()) { + dComIfGs_onTmpBit(0x302); + if(dComIfGs_isEventBit(0x3808) == 0) { + dComIfGs_onEventBit(0x3808); + field_0x980 = (u32*)l_msg_week_1st; + field_0x9D0 = 0; + } else { + field_0x980 = l_msg_week[dKy_get_dayofweek()]; + field_0x9D0 = 0; + } + } else { + field_0x980 = l_msg_color; + field_0x9D0 = (u8*)l_msg_color_c; + } + } + + } + } else { + eventReg = dComIfGs_getEventReg(l_save_dat.field_0x06); + if (eventReg < 1) { + field_0x980 = l_msg_1st_order; + field_0x9D0 = (u8*)l_msg_1st_order_c; + } else if (eventReg < 2) { + field_0x980 = l_msg_1st_order_not_end; + field_0x9D0 = (u8*)l_msg_1st_order_not_end_c; + } else if (eventReg < 3) { + field_0x980 = l_msg_2nd_order; + field_0x9D0 = (u8*)l_msg_2nd_order_c; + } else if (eventReg < 4) { + field_0x980 = l_msg_2nd_order_not_end; + field_0x9D0 = (u8*)l_msg_2nd_order_not_end_c; + } else if (eventReg < 5) { + field_0x980 = l_msg_3rd_order; + field_0x9D0 = (u8*)l_msg_3rd_order_c; + } else if (eventReg < 6) { + field_0x980 = l_msg_3rd_order_not_end; + field_0x9D0 = (u8*)l_msg_3rd_order_not_end_c; + } else if (field_0x9CC == 1) { + field_0x980 = l_msg_3rd_order_end; + field_0x9D0 = 0; + } else { + field_0x980 = l_msg_not_color; + field_0x9D0 = (u8*)l_msg_not_color_c; + } + } + } + } else if(dComIfGs_checkGetItem(CAMERA) || dComIfGs_checkGetItem(CAMERA2)) { + if(!dComIfGs_isEventBit(l_save_dat.field_0x02)) { + field_0x980 = l_msg_1st_photo; + field_0x9D0 = 0; + dComIfGs_onEventBit(l_save_dat.field_0x02); + initTexPatternAnm(true, 1); + } else { + field_0x980 = l_msg_2nd_photo; + field_0x9D0 = 0; + } + } else { + if(dComIfGs_isEventBit(l_save_dat.field_0x00) == 0) { + field_0x980 = l_msg_1st_talk; + field_0x9D0 = 0; + dComIfGs_onEventBit(l_save_dat.field_0x00); + field_0x9C6 |= 4; + } else { + field_0x980 = l_msg_2nd_talk; + field_0x9D0 = 0; + field_0x9C6 |= 4; + } + } + if (field_0x980 != NULL) { + msgNo = *field_0x980; + } + return msgNo; } /* 00003E68-00003E78 .text setMessage__12daNpcPhoto_cFUl */ -void daNpcPhoto_c::setMessage(unsigned long) { - /* Nonmatching */ +void daNpcPhoto_c::setMessage(u32 msg) { + mCurrMsgBsPcId = fpcM_ERROR_PROCESS_ID_e; + mCurrMsgNo = msg; } /* 00003E78-00003FD8 .text setAnmFromMsgTag__12daNpcPhoto_cFv */ void daNpcPhoto_c::setAnmFromMsgTag() { - /* Nonmatching */ + switch(dComIfGp_getMesgAnimeAttrInfo()){ + case 0: + setAnmTbl(l_npc_anm_wait); + field_0x9C9 &= 0x7f; + break; + case 1: + setAnmTbl(l_npc_anm_talk); + field_0x9C9 &= 0x7f; + + break; + case 2: + setAnmTbl(l_npc_anm_talk2); + field_0x9C9 &= 0x7f; + break; + case 3: + setAnmTbl(l_npc_anm_wait); + initTexPatternAnm(true, 0); + field_0x9C9 &= 0x7f; + break; + case 4: + setAnmTbl(l_npc_anm_talk2); + field_0x9C9 &= 0x7f; + break; + case 5: + setAnmTbl(l_npc_anm_wait); + initTexPatternAnm(true, 1); + field_0x9C9 |= 0x80; + mFrame = 1; + break; + case 6: + setAnmTbl(l_npc_anm_talk); + initTexPatternAnm(true, 0); + field_0x9C9 &= 0x7f; + break; + case 9: + setAnmTbl(l_npc_anm_spit); + field_0x9C9 &= 0x7f; + } + dComIfGp_setMesgAnimeAttrInfo(0xFF); } /* 00003FD8-00004004 .text getPrmRailID__12daNpcPhoto_cFv */ -void daNpcPhoto_c::getPrmRailID() { - /* Nonmatching */ +u8 daNpcPhoto_c::getPrmRailID() { + return daObj::PrmAbstract(this, PRM_RAIL_ID_W, PRM_RAIL_ID_S); } /* 00004004-00004030 .text getPrmArg0__12daNpcPhoto_cFv */ -void daNpcPhoto_c::getPrmArg0() { - /* Nonmatching */ +u8 daNpcPhoto_c::getPrmArg0() { + return daObj::PrmAbstract(this, PRM_ARG0_W, PRM_ARG0_S); } /* 00004030-000040B8 .text setMtx__12daNpcPhoto_cFv */ void daNpcPhoto_c::setMtx() { - /* Nonmatching */ + mpMorf->getModel()->setBaseScale(scale); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(current.angle.y); + mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 000040B8-0000432C .text chkAttention__12daNpcPhoto_cFv */ void daNpcPhoto_c::chkAttention() { - /* Nonmatching */ + + if(mEventCut.getAttnFlag()) { + mLookAtPos = mEventCut.getAttnPos(); + field_0x9D6 = 1; + if (field_0x9D7) { + field_0x994 = false; + m_jnt.setTrn(); + } else { + field_0x994 = true; + } + if (!field_0x9BD) { + field_0x9BD = true; + } + + } else { + fopAc_ac_c* link = dComIfGp_getLinkPlayer(); + f32 temp = l_npc_dat.field_0x2C; + s16 angle; + f32 temp3; + int temp2 = field_0x9B2; + dNpc_calc_DisXZ_AngY(current.pos, link->current.pos, &temp3, &angle); + if (field_0x9BD != NULL) { + temp += 40.0f; + temp2 += 1820; + } + + angle -= shape_angle.y; + + if((temp > temp3 && temp2 > abs(angle)) || field_0x9CD != NULL) { + mLookAtPos = dNpc_playerEyePos(l_npc_dat.field_0x00); + field_0x9D6 = 1; + if (field_0x9D7) { + field_0x994 = false; + } else { + field_0x994 = true; + } + if (!field_0x9D8) { + field_0x9BA = field_0x9AE; + field_0x994 = false; + field_0x9D6 = 2; + m_jnt.setTrn(); + } + if (!field_0x9BD) { + field_0x9BD = true; + } + } else { + if (field_0x9BD == true) { + field_0x9BD = false; + field_0x9AC = 30; + } + field_0x9D6 = 0; + if ((field_0x9C0 == 0) && (field_0x9C1 != 3)) { + if (field_0x9AC != 0) { + field_0x9AC--; + } else { + field_0x9BA = field_0x9AE; + field_0x994 = false; + field_0x9D6 = 2; + m_jnt.setTrn(); + } + } + } + } + field_0x9B6 = l_npc_dat.field_0x16; } /* 0000432C-00004478 .text lookBack__12daNpcPhoto_cFv */ void daNpcPhoto_c::lookBack() { - /* Nonmatching */ + short target = field_0x9B6; + short desiredYRot = current.angle.y; + cXyz* dstTemp = NULL; + cXyz temp2; + cXyz dstPos = eyePos; + bool temp3 = field_0x994; + + switch(field_0x9D6) { + case 1: + temp2 = mLookAtPos; + dstTemp = &temp2; + break; + case 2: + desiredYRot = field_0x9BA; + break; + case 0: + default: + break; + } + + if (field_0x9BC && field_0x9D7) { + temp3 = false; + m_jnt.setTrn(); + } + + if (m_jnt.trnChk()) { + if(mEventCut.getTurnSpeed() != 0) { + target = mEventCut.getTurnSpeed(); + } + cLib_addCalcAngleS2(&field_0x9B8, target, 4, 0x800); + } else { + field_0x9B8 = 0; + } + + m_jnt.lookAtTarget(¤t.angle.y, dstTemp, dstPos, desiredYRot, field_0x9B8, temp3); + shape_angle = current.angle; } /* 00004478-000045C0 .text initTexPatternAnm__12daNpcPhoto_cFbi */ -void daNpcPhoto_c::initTexPatternAnm(bool, int) { - /* Nonmatching */ +BOOL daNpcPhoto_c::initTexPatternAnm(bool i_modify, int i_param2) { + J3DModelData *modelData = mpMorf->getModel()->getModelData(); + if(i_param2 == -1) { + if(dComIfGs_isEventBit(l_save_dat.field_0x02)) { + i_param2 = 1; + } else { + i_param2 = 0; + } + } + m_head_tex_pattern = (J3DAnmTexPattern*)dComIfG_getObjectIDRes(l_arcname_tbl[0], l_btp_ix_tbl[i_param2]); + JUT_ASSERT(0xBAA, m_head_tex_pattern != NULL); + + if(!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, i_modify, 0)) { + return FALSE; + } + mFrame = 0; + mTimer = 0; + return TRUE; } /* 000045C0-00004638 .text playTexPatternAnm__12daNpcPhoto_cFv */ void daNpcPhoto_c::playTexPatternAnm() { - /* Nonmatching */ + if (((field_0x9C9 & 0x80) == 0) && cLib_calcTimer(&mTimer)== 0) { + if (mFrame >= m_head_tex_pattern->getFrameMax()) { + mFrame -= m_head_tex_pattern->getFrameMax(); + mTimer = 0x78; + } else { + mFrame++; + } + } } /* 00004638-0000474C .text playAnm__12daNpcPhoto_cFv */ void daNpcPhoto_c::playAnm() { - /* Nonmatching */ + field_0x9C9 &= 0xFE; + u32 mtrlSndId; + s8 roomNo = fopAcM_GetRoomNo(this); + + if (mObjAcch.ChkGroundHit()) { + mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(mObjAcch.m_gnd); + } + else { + mtrlSndId = 0; + } + + if(mpMorf->play(&eyePos, mtrlSndId, dComIfGp_getReverb(roomNo))){ + field_0x9C9 &= ~0x4; + if (mpAnmDat != 0) { + if (field_0x9CA > 0) { + field_0x9CA--; + if (field_0x9CA == 0) { + mpAnmDat++; + if (setAnmTbl(mpAnmDat) != 0) { + field_0x9C9 |= 1; + } + } else { + setAnm(mpAnmDat->field_0x00, 0, 0.0f); + } + } + } + } } /* 0000474C-0000481C .text setAnm__12daNpcPhoto_cFUcif */ -void daNpcPhoto_c::setAnm(unsigned char, int, float) { - /* Nonmatching */ +void daNpcPhoto_c::setAnm(u8 param_1, int param_2, f32 param_3) { + if(field_0x98C >= 0.0f) { + param_3 = field_0x98C; + field_0x98C = -1.0f; + } + + J3DAnmTransform* pAnmRes = static_cast(dComIfG_getObjectIDRes(l_arcname_tbl[0], l_bck_ix_tbl[param_1])); + mpMorf->setAnm(pAnmRes, param_2, param_3, 1.0f, 0.0f, -1.0f, NULL); + field_0x9C8 = param_1; } /* 0000481C-000048D0 .text setAnmTbl__12daNpcPhoto_cFP12sPhotoAnmDat */ -void daNpcPhoto_c::setAnmTbl(sPhotoAnmDat*) { - /* Nonmatching */ +bool daNpcPhoto_c::setAnmTbl(sPhotoAnmDat* i_anmDat) { + if((field_0x9C9 & 4) != 0){ + return false; + } + if(i_anmDat->field_0x00 == 0xFF) { + mpAnmDat = 0; + return true; + } + mpAnmDat = i_anmDat; + field_0x9CA = mpAnmDat->field_0x02; + + int temp = 2; + if(field_0x9CA > 0) { + temp = 0; + } + if(field_0x9C8 != mpAnmDat->field_0x00 || temp == 0) { + setAnm(mpAnmDat->field_0x00, temp, mpAnmDat->field_0x01); + } + + return false; } /* 000048D0-00004950 .text XyCheckCB__12daNpcPhoto_cFi */ -void daNpcPhoto_c::XyCheckCB(int) { - /* Nonmatching */ +s16 daNpcPhoto_c::XyCheckCB(int i_itemBtn) { + if(dComIfGs_isTmpBit(0x302) && !dComIfGs_isTmpBit(0x301)){ + attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e; + } else { + attention_info.flags = fopAc_Attn_UNK1000000_e | fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e; + } + return 1; } /* 00004950-00004A5C .text XyEventCB__12daNpcPhoto_cFi */ -void daNpcPhoto_c::XyEventCB(int) { - /* Nonmatching */ +s16 daNpcPhoto_c::XyEventCB(int i_itemBtn) { + s16 eventIdx; + u8 itemNo = dComIfGp_getSelectItem(i_itemBtn); + if(itemNo == CAMERA2 && dComIfGs_isTmpBit(0x302)){ + if(dComIfGs_getPictureNum() < 3){ + eventIdx = mPhotoGetPhotoEventIdx; + field_0x9C7 = false; + } else { + return dComIfGp_evmng_getEventIdx("DEFAULT_TALK_XY",0xff); + } + } else { + if(itemNo == dItem_FIREFLY_BOTTLE_e && dComIfGs_getEventReg(l_save_dat.field_0x06) >= 6 && !dComIfGs_checkGetItem(CAMERA2)){ + eventIdx = mPhotoGetItem2EventIdx; + field_0x9C7 = false; + } else { + eventIdx = dComIfGp_evmng_getEventIdx("DEFAULT_TALK_XY",0xff); + } + } + return eventIdx; } /* 00004A5C-00004B08 .text isPhotoOk__12daNpcPhoto_cFv */ -void daNpcPhoto_c::isPhotoOk() { - /* Nonmatching */ +BOOL daNpcPhoto_c::isPhotoOk() { + u8 reg = dComIfGs_getEventReg(l_save_dat.field_0x06); + + reg = reg & 0xff; + if (reg == 1) { + if (dComIfGp_getPictureResult() == 1) { + return TRUE; + } + } else if (reg == 3) { + if (dComIfGp_getPictureResult() == 2) { + return TRUE; + } + } else if ((reg == 5) && (dComIfGp_getPictureResult() == 3)) { + return TRUE; + } + return FALSE; } /* 00004B08-00004CCC .text isPhotoDxOk__12daNpcPhoto_cFv */ -void daNpcPhoto_c::isPhotoDxOk() { - /* Nonmatching */ +BOOL daNpcPhoto_c::isPhotoDxOk() { + switch(dKy_get_dayofweek()){ + case 0: + if(dComIfGs_isEventBit(0x2D02)) { + return TRUE; + } + break; + case 1: + if(dComIfGs_isEventBit(0x3910)) { + return TRUE; + } + break; + case 2: + if (dComIfGs_isEventBit(0x3002) || + dComIfGs_isEventBit(0x3001) || + dComIfGs_isEventBit(0x3008) || + dComIfGs_isEventBit(0x3004) || + dComIfGs_isEventBit(0x3020) || + dComIfGs_isEventBit(0x3010) || + dComIfGs_isEventBit(0x3180)) { + return TRUE; + } + break; + case 3: + if(dComIfGs_isEventBit(0x3920)) { + return TRUE; + } + break; + case 4: + if(dComIfGs_isEventBit(0x1001)) { + return TRUE; + } + break; + case 5: + if(dComIfGs_isEventBit(0x2D20)) { + return TRUE; + } + break; + case 6: + if(dComIfGs_isEventBit(0x2D40)) { + return TRUE; + } + break; + } + return FALSE; } /* 00004CCC-00004D44 .text setCollision__12daNpcPhoto_cFP8dCcD_Cyl4cXyzff */ -void daNpcPhoto_c::setCollision(dCcD_Cyl*, cXyz, float, float) { - /* Nonmatching */ +void daNpcPhoto_c::setCollision(dCcD_Cyl* cyl, cXyz center, f32 radius, f32 height) { + cyl->SetC(center); + cyl->SetR(radius); + cyl->SetH(height); + dComIfG_Ccsp()->Set(cyl); } /* 00004D44-00004D64 .text daNpc_PhotoCreate__FPv */ -static s32 daNpc_PhotoCreate(void*) { - /* Nonmatching */ +static s32 daNpc_PhotoCreate(void* i_this) { + return static_cast(i_this)->_create(); } /* 00004D64-00004D88 .text daNpc_PhotoDelete__FPv */ -static BOOL daNpc_PhotoDelete(void*) { - /* Nonmatching */ +static BOOL daNpc_PhotoDelete(void* i_this) { + return static_cast(i_this)->_delete(); } /* 00004D88-00004DAC .text daNpc_PhotoExecute__FPv */ -static BOOL daNpc_PhotoExecute(void*) { - /* Nonmatching */ +static BOOL daNpc_PhotoExecute(void* i_this) { + return static_cast(i_this)->_execute(); } /* 00004DAC-00004DD0 .text daNpc_PhotoDraw__FPv */ -static BOOL daNpc_PhotoDraw(void*) { - /* Nonmatching */ +static BOOL daNpc_PhotoDraw(void* i_this) { + return static_cast(i_this)->_draw(); } /* 00004DD0-00004DD8 .text daNpc_PhotoIsDelete__FPv */ static BOOL daNpc_PhotoIsDelete(void*) { - /* Nonmatching */ + return TRUE; } static actor_method_class daNpc_PhotoMethodTable = { diff --git a/src/d/actor/d_a_obj_figure.cpp b/src/d/actor/d_a_obj_figure.cpp index 99a95cf2a..58cd244f7 100644 --- a/src/d/actor/d_a_obj_figure.cpp +++ b/src/d/actor/d_a_obj_figure.cpp @@ -90,680 +90,158 @@ static dCcD_SrcCyl l_cyl_src = { struct FigureData { /* 0x00 */ int mBmdId; /* 0x04 */ int mModelAttr; +#if VERSION > VERSION_DEMO /* 0x08 */ int mRoomId; +#endif }; // Size: 0x0C +#if VERSION == VERSION_DEMO +#define FIGUREDAT(bmdIdx, dlistFlags, roomId) \ + { \ + bmdIdx, dlistFlags \ + } +#else +#define FIGUREDAT(bmdIdx, dlistFlags, roomId) \ + { \ + bmdIdx, dlistFlags, roomId \ + } +#endif + static const FigureData l_figure_dat_tbl[TOTAL_FIGURE_COUNT] = { - { - 0, - 0x37441422, - -1 - }, - { - 1, - 0x37441422, - -1 - }, - { - 2, - 0x37441422, - -1 - }, - { - 3, - 0x37441422, - -1 - }, - { - 0xA, - 0x37441422, - -1 - }, - { - 4, - 0x37441422, - -1 - }, - { - 5, - 0x37441422, - -1 - }, - { - 6, - 0x37441422, - -1 - }, - { - 7, - 0x37441422, - -1 - }, - { - 8, - 0x37441422, - -1 - }, - { - 9, - 0x11001222, - -1 - }, - { - 0xB, - 0x37441422, - -1 - }, - { - 0xC, - 0x37441422, - -1 - }, - { - 0xD, - 0x37441422, - -1 - }, - { - 0, - 0x37441422, - -1 - }, - { - 1, - 0x37441422, - -1 - }, - { - 2, - 0x37441422, - -1 - }, - { - 4, - 0x37441422, - -1 - }, - { - 5, - 0x37441422, - -1 - }, - { - 7, - 0x37441422, - -1 - }, - { - 8, - 0x37441422, - -1 - }, - { - 9, - 0x37441422, - -1 - }, - { - 0xA, - 0x37441422, - -1 - }, - { - 0xB, - 0x37441422, - -1 - }, - { - 0xC, - 0x37441422, - -1 - }, - { - 0xD, - 0x37441422, - -1 - }, - { - 0xE, - 0x37441422, - -1 - }, - { - 0xF, - 0x37441422, - -1 - }, - { - 0x10, - 0x37441422, - -1 - }, - { - 0x11, - 0x37441422, - -1 - }, - { - 0x12, - 0x37441422, - -1 - }, - { - 0x13, - 0x37441422, - -1 - }, - { - 0x14, - 0x37441422, - -1 - }, - { - 0x15, - 0x37441422, - -1 - }, - { - 0x16, - 0x37441422, - -1 - }, - { - 0x17, - 0x37441422, - -1 - }, - { - 0x18, - 0x37441422, - -1 - }, - { - 0x19, - 0x37441422, - -1 - }, - { - 0x1A, - 0x37441422, - -1 - }, - { - 0x1B, - 0x37441422, - -1 - }, - { - 0x1C, - 0x37441422, - -1 - }, - { - 0, - 0x37441422, - 8 - }, - { - 1, - 0x37441422, - 8 - }, - { - 2, - 0x37441422, - 8 - }, - { - 3, - 0x37441422, - 8 - }, - { - 4, - 0x37441422, - 8 - }, - { - 5, - 0x37441422, - 8 - }, - { - 6, - 0x37441422, - 8 - }, - { - 7, - 0x37441422, - 8 - }, - { - 8, - 0x37441422, - 8 - }, - { - 9, - 0x37441422, - 8 - }, - { - 0xA, - 0x37441422, - 8 - }, - { - 0xB, - 0x37441422, - 8 - }, - { - 0xC, - 0x37441422, - 8 - }, - { - 0xD, - 0x37441422, - 8 - }, - { - 0xE, - 0x37441422, - 8 - }, - { - 0xF, - 0x37441422, - 8 - }, - { - 0x10, - 0x37441422, - 8 - }, - { - 0x11, - 0x37441422, - 8 - }, - { - 0x12, - 0x37441422, - 8 - }, - { - 0x13, - 0x37441422, - 8 - }, - { - 6, - 0x37441422, - 9 - }, - { - 1, - 0x37441422, - 9 - }, - { - 2, - 0x37441422, - 9 - }, - { - 5, - 0x37441422, - 9 - }, - { - 0, - 0x11001222, - -1 - }, - { - 1, - 0x37441422, - -1 - }, - { - 2, - 0x37441422, - -1 - }, - { - 3, - 0x37441422, - -1 - }, - { - 4, - 0x37441422, - -1 - }, - { - 5, - 0x37441422, - -1 - }, - { - 6, - 0x37441422, - -1 - }, - { - 7, - 0x37441422, - -1 - }, - { - 8, - 0x37441422, - -1 - }, - { - 9, - 0x37441422, - -1 - }, - { - 0xA, - 0x37441422, - -1 - }, - { - 0xB, - 0x37441422, - -1 - }, - { - 0xC, - 0x37441422, - -1 - }, - { - 0xD, - 0x37441422, - -1 - }, - { - 0xE, - 0x37441422, - -1 - }, - { - 0xF, - 0x37441422, - -1 - }, - { - 0x10, - 0x37441422, - -1 - }, - { - 0x11, - 0x11001222, - -1 - }, - { - 0, - 0x37441422, - -1 - }, - { - 5, - 0x37441422, - -1 - }, - { - 6, - 0x37441422, - -1 - }, - { - 7, - 0x37441422, - -1 - }, - { - 8, - 0x37441422, - -1 - }, - { - 9, - 0x37441422, - -1 - }, - { - 0xA, - 0x37441422, - -1 - }, - { - 0xB, - 0x37441422, - -1 - }, - { - 0xC, - 0x37441422, - -1 - }, - { - 0xD, - 0x37441422, - -1 - }, - { - 1, - 0x37441422, - -1 - }, - { - 2, - 0x37441422, - -1 - }, - { - 3, - 0x37441422, - -1 - }, - { - 4, - 0x37441422, - -1 - }, - { - 0, - 0x37441422, - -1 - }, - { - 1, - 0x37441422, - -1 - }, - { - 2, - 0x37441422, - -1 - }, - { - 3, - 0x37441422, - -1 - }, - { - 4, - 0x37441422, - -1 - }, - { - 5, - 0x37441422, - -1 - }, - { - 6, - 0x37441422, - -1 - }, - { - 7, - 0x37441422, - -1 - }, - { - 8, - 0x37441422, - -1 - }, - { - 9, - 0x37441422, - -1 - }, - { - 0x12, - 0x37441422, - -1 - }, - { - 0xA, - 0x11001222, - -1 - }, - { - 0xB, - 0x11001222, - -1 - }, - { - 0xC, - 0x11001222, - -1 - }, - { - 0xD, - 0x37441422, - -1 - }, - { - 0xE, - 0x37441422, - -1 - }, - { - 0xF, - 0x37441422, - -1 - }, - { - 0x10, - 0x37441422, - -1 - }, - { - 0x11, - 0x37441422, - -1 - }, - { - 0, - 0x37441422, - 0xA - }, - { - 1, - 0x37441422, - 0xA - }, - { - 2, - 0x11001222, - 0xA - }, - { - 3, - 0x11001222, - 0xA - }, - { - 4, - 0x11001222, - 0xA - }, - { - 5, - 0x37441422, - 0xA - }, - { - 6, - 0x37441422, - 0xA - }, - { - 7, - 0x37441422, - 0xA - }, - { - 0, - 0x37441422, - 0xB - }, - { - 1, - 0x11001222, - 0xB - }, - { - 2, - 0x11001222, - 0xB - }, - { - 3, - 0x37441422, - 0xB - }, - { - 4, - 0x37441422, - 0xB - }, - { - 0, - 0x11001222, - 0xC - }, - { - 1, - 0x37441422, - 0xC - }, - { - 2, - 0x11001222, - 0xC - }, - { - 3, - 0x11001222, - 0xC - }, - { - 4, - 0x37441422, - 0xC - }, + FIGUREDAT(0x00, 0x37441422, -1), + FIGUREDAT(0x01, 0x37441422, -1), + FIGUREDAT(0x02, 0x37441422, -1), + FIGUREDAT(0x03, 0x37441422, -1), + FIGUREDAT(0x0A, 0x37441422, -1), + FIGUREDAT(0x04, 0x37441422, -1), + FIGUREDAT(0x05, 0x37441422, -1), + FIGUREDAT(0x06, 0x37441422, -1), + FIGUREDAT(0x07, 0x37441422, -1), + FIGUREDAT(0x08, 0x37441422, -1), + FIGUREDAT(0x09, 0x11001222, -1), + FIGUREDAT(0x0B, 0x37441422, -1), + FIGUREDAT(0x0C, 0x37441422, -1), + FIGUREDAT(0x0D, 0x37441422, -1), + FIGUREDAT(0x00, 0x37441422, -1), + FIGUREDAT(0x01, 0x37441422, -1), + FIGUREDAT(0x02, 0x37441422, -1), + FIGUREDAT(0x04, 0x37441422, -1), + FIGUREDAT(0x05, 0x37441422, -1), + FIGUREDAT(0x07, 0x37441422, -1), + FIGUREDAT(0x08, 0x37441422, -1), + FIGUREDAT(0x09, 0x37441422, -1), + FIGUREDAT(0x0A, 0x37441422, -1), + FIGUREDAT(0x0B, 0x37441422, -1), + FIGUREDAT(0x0C, 0x37441422, -1), + FIGUREDAT(0x0D, 0x37441422, -1), + FIGUREDAT(0x0E, 0x37441422, -1), + FIGUREDAT(0x0F, 0x37441422, -1), + FIGUREDAT(0x10, 0x37441422, -1), + FIGUREDAT(0x11, 0x37441422, -1), + FIGUREDAT(0x12, 0x37441422, -1), + FIGUREDAT(0x13, 0x37441422, -1), + FIGUREDAT(0x14, 0x37441422, -1), + FIGUREDAT(0x15, 0x37441422, -1), + FIGUREDAT(0x16, 0x37441422, -1), + FIGUREDAT(0x17, 0x37441422, -1), + FIGUREDAT(0x18, 0x37441422, -1), + FIGUREDAT(0x19, 0x37441422, -1), + FIGUREDAT(0x1A, 0x37441422, -1), + FIGUREDAT(0x1B, 0x37441422, -1), + FIGUREDAT(0x1C, 0x37441422, -1), + FIGUREDAT(0x00, 0x37441422, 8), + FIGUREDAT(0x01, 0x37441422, 8), + FIGUREDAT(0x02, 0x37441422, 8), + FIGUREDAT(0x03, 0x37441422, 8), + FIGUREDAT(0x04, 0x37441422, 8), + FIGUREDAT(0x05, 0x37441422, 8), + FIGUREDAT(0x06, 0x37441422, 8), + FIGUREDAT(0x07, 0x37441422, 8), + FIGUREDAT(0x08, 0x37441422, 8), + FIGUREDAT(0x09, 0x37441422, 8), + FIGUREDAT(0x0A, 0x37441422, 8), + FIGUREDAT(0x0B, 0x37441422, 8), + FIGUREDAT(0x0C, 0x37441422, 8), + FIGUREDAT(0x0D, 0x37441422, 8), + FIGUREDAT(0x0E, 0x37441422, 8), + FIGUREDAT(0x0F, 0x37441422, 8), + FIGUREDAT(0x10, 0x37441422, 8), + FIGUREDAT(0x11, 0x37441422, 8), + FIGUREDAT(0x12, 0x37441422, 8), + FIGUREDAT(0x13, 0x37441422, 8), + FIGUREDAT(0x06, 0x37441422, 9), + FIGUREDAT(0x01, 0x37441422, 9), + FIGUREDAT(0x02, 0x37441422, 9), + FIGUREDAT(0x05, 0x37441422, 9), + FIGUREDAT(0x00, 0x11001222, -1), + FIGUREDAT(0x01, 0x37441422, -1), + FIGUREDAT(0x02, 0x37441422, -1), + FIGUREDAT(0x03, 0x37441422, -1), + FIGUREDAT(0x04, 0x37441422, -1), + FIGUREDAT(0x05, 0x37441422, -1), + FIGUREDAT(0x06, 0x37441422, -1), + FIGUREDAT(0x07, 0x37441422, -1), + FIGUREDAT(0x08, 0x37441422, -1), + FIGUREDAT(0x09, 0x37441422, -1), + FIGUREDAT(0x0A, 0x37441422, -1), + FIGUREDAT(0x0B, 0x37441422, -1), + FIGUREDAT(0x0C, 0x37441422, -1), + FIGUREDAT(0x0D, 0x37441422, -1), + FIGUREDAT(0x0E, 0x37441422, -1), + FIGUREDAT(0x0F, 0x37441422, -1), + FIGUREDAT(0x10, 0x37441422, -1), + FIGUREDAT(0x11, 0x11001222, -1), + FIGUREDAT(0x00, 0x37441422, -1), + FIGUREDAT(0x05, 0x37441422, -1), + FIGUREDAT(0x06, 0x37441422, -1), + FIGUREDAT(0x07, 0x37441422, -1), + FIGUREDAT(0x08, 0x37441422, -1), + FIGUREDAT(0x09, 0x37441422, -1), + FIGUREDAT(0x0A, 0x37441422, -1), + FIGUREDAT(0x0B, 0x37441422, -1), + FIGUREDAT(0x0C, 0x37441422, -1), + FIGUREDAT(0x0D, 0x37441422, -1), + FIGUREDAT(0x01, 0x37441422, -1), + FIGUREDAT(0x02, 0x37441422, -1), + FIGUREDAT(0x03, 0x37441422, -1), + FIGUREDAT(0x04, 0x37441422, -1), + FIGUREDAT(0x00, 0x37441422, -1), + FIGUREDAT(0x01, 0x37441422, -1), + FIGUREDAT(0x02, 0x37441422, -1), + FIGUREDAT(0x03, 0x37441422, -1), + FIGUREDAT(0x04, 0x37441422, -1), + FIGUREDAT(0x05, 0x37441422, -1), + FIGUREDAT(0x06, 0x37441422, -1), + FIGUREDAT(0x07, 0x37441422, -1), + FIGUREDAT(0x08, 0x37441422, -1), + FIGUREDAT(0x09, 0x37441422, -1), + FIGUREDAT(0x12, 0x37441422, -1), + FIGUREDAT(0x0A, 0x11001222, -1), + FIGUREDAT(0x0B, 0x11001222, -1), + FIGUREDAT(0x0C, 0x11001222, -1), + FIGUREDAT(0x0D, 0x37441422, -1), + FIGUREDAT(0x0E, 0x37441422, -1), + FIGUREDAT(0x0F, 0x37441422, -1), + FIGUREDAT(0x10, 0x37441422, -1), + FIGUREDAT(0x11, 0x37441422, -1), + FIGUREDAT(0x00, 0x37441422, 0xA), + FIGUREDAT(0x01, 0x37441422, 0xA), + FIGUREDAT(0x02, 0x11001222, 0xA), + FIGUREDAT(0x03, 0x11001222, 0xA), + FIGUREDAT(0x04, 0x11001222, 0xA), + FIGUREDAT(0x05, 0x37441422, 0xA), + FIGUREDAT(0x06, 0x37441422, 0xA), + FIGUREDAT(0x07, 0x37441422, 0xA), + FIGUREDAT(0x00, 0x37441422, 0xB), + FIGUREDAT(0x01, 0x11001222, 0xB), + FIGUREDAT(0x02, 0x11001222, 0xB), + FIGUREDAT(0x03, 0x37441422, 0xB), + FIGUREDAT(0x04, 0x37441422, 0xB), + FIGUREDAT(0x00, 0x11001222, 0xC), + FIGUREDAT(0x01, 0x37441422, 0xC), + FIGUREDAT(0x02, 0x11001222, 0xC), + FIGUREDAT(0x03, 0x11001222, 0xC), + FIGUREDAT(0x04, 0x37441422, 0xC), }; struct FigureCheckTbl { @@ -901,9 +379,11 @@ static cPhs_State phase_2(daObjFigure_c* i_this) { i_this->setResFlag(0x2); u8 figureNo = i_this->getFigureNo(); int id = dSnap_GetFigRoomId(figureNo); +#if VERSION > VERSION_DEMO if(l_figure_dat_tbl[figureNo].mRoomId >= 0) { id = l_figure_dat_tbl[figureNo].mRoomId; } +#endif cPhs_State status = dComIfG_resLoad(i_this->getPhase2P(), l_arcname_tbl[id]); @@ -933,9 +413,11 @@ cPhs_State daObjFigure_c::_create() { /* 00000720-00000A90 .text createHeap__13daObjFigure_cFv */ BOOL daObjFigure_c::createHeap() { int id = dSnap_GetFigRoomId(getFigureNo()); +#if VERSION > VERSION_DEMO if(l_figure_dat_tbl[getFigureNo()].mRoomId >= 0) { id = l_figure_dat_tbl[getFigureNo()].mRoomId; } +#endif J3DModelData* pModelData; const char* arcname = l_arcname_tbl[id]; @@ -1040,14 +522,16 @@ cPhs_State daObjFigure_c::createInit() { /* 00000BF4-00000C78 .text _delete__13daObjFigure_cFv */ BOOL daObjFigure_c::_delete() { - dComIfG_resDelete(getPhase1P(), "Figure"); + dComIfG_resDeleteDemo(getPhase1P(), "Figure"); int id = dSnap_GetFigRoomId(getFigureNo()); +#if VERSION > VERSION_DEMO if(l_figure_dat_tbl[getFigureNo()].mRoomId >= 0) { id = l_figure_dat_tbl[getFigureNo()].mRoomId; } +#endif - dComIfG_resDelete(getPhase2P(), l_arcname_tbl[id]); + dComIfG_resDeleteDemo(getPhase2P(), l_arcname_tbl[id]); return true; } @@ -1497,11 +981,13 @@ void linkDraw(mDoExt_McaMorf* pMorf) { /* Nonmatching - regalloc (maybe the same issue as daPy_lk_c::draw?) */ pMorf->calc(); +#if VERSION > VERSION_DEMO J3DModel* model = pMorf->getModel(); J3DModelData* modelData = model->getModelData(); j3dSys.setModel(model); j3dSys.setTexture(modelData->getTexture()); model->unlock(); +#endif static mDoExt_offCupOnAupPacket l_offCupOnAupPacket1; static mDoExt_offCupOnAupPacket l_offCupOnAupPacket2; @@ -1512,6 +998,11 @@ void linkDraw(mDoExt_McaMorf* pMorf) { J3DShape* ZOffNoneShape[4]; J3DShape* ZOnShape[4]; +#if VERSION == VERSION_DEMO + J3DModel* model = pMorf->getModel(); + J3DModelData* modelData = model->getModelData(); +#endif + J3DJoint* link_root_joint = modelData->getJointNodePointer(0x00); // link_root joint J3DJoint* cl_eye_joint = modelData->getJointNodePointer(0x13); // cl_eye joint J3DJoint* cl_mayu_joint = modelData->getJointNodePointer(0x15); // cl_mayu joint @@ -1528,14 +1019,14 @@ void linkDraw(mDoExt_McaMorf* pMorf) { if (mtl->getZMode()->getCompareEnable() == 0) { if ((u8)mtl->getBlend()->getType() == GX_BM_BLEND) { ZOffBlendShape[zoff_blend_cnt++] = mtl->getShape(); - JUT_ASSERT(1767, zoff_blend_cnt <= 4); + JUT_ASSERT(VERSION_SELECT(1713, 1767, 1767, 1767), zoff_blend_cnt <= 4); } else { ZOffNoneShape[zoff_none_cnt++] = mtl->getShape(); - JUT_ASSERT(1770, zoff_none_cnt <= 4); + JUT_ASSERT(VERSION_SELECT(1717, 1770, 1770, 1770), zoff_none_cnt <= 4); } } else { ZOnShape[zon_cnt++] = mtl->getShape(); - JUT_ASSERT(1774, zon_cnt <= 4); + JUT_ASSERT(VERSION_SELECT(1722, 1774, 1774, 1774), zon_cnt <= 4); } mtl = mtl->getNext(); } @@ -1572,6 +1063,7 @@ void linkDraw(mDoExt_McaMorf* pMorf) { link_root_joint->entryIn(); +#if VERSION > VERSION_DEMO for (i = 0, mtl = link_root_joint->getMesh(); mtl != NULL; i++, mtl = mtl->getNext()) { if (i != 2 && i != 5) { mtl->getShape()->show(); @@ -1579,6 +1071,7 @@ void linkDraw(mDoExt_McaMorf* pMorf) { mtl->getShape()->hide(); } } +#endif l_onCupOffAupPacket1.entryOpa(); @@ -1597,8 +1090,12 @@ void linkDraw(mDoExt_McaMorf* pMorf) { ZOnShape[i]->hide(); } +#if VERSION == VERSION_DEMO + pMorf->entryDL(); +#else dComIfGd_setList(); mDoExt_modelEntryDL(pMorf->getModel()); +#endif for (mtl = link_root_joint->getMesh(); mtl != NULL; mtl = mtl->getNext()) { mtl->getShape()->show(); @@ -1606,6 +1103,10 @@ void linkDraw(mDoExt_McaMorf* pMorf) { modelData->getJointNodePointer(0x14)->getMesh()->getShape()->show(); // cl_hana joint modelData->getJointNodePointer(0x29)->getMesh()->getShape()->show(); // cl_back joint + +#if VERSION == VERSION_DEMO + dComIfGd_setList(); +#endif } static actor_method_class daSampleMethodTable = { diff --git a/src/d/actor/d_a_player_dproc.inc b/src/d/actor/d_a_player_dproc.inc index f5578b6c8..5de3e829c 100644 --- a/src/d/actor/d_a_player_dproc.inc +++ b/src/d/actor/d_a_player_dproc.inc @@ -418,6 +418,7 @@ void daPy_lk_c::setGetItemSound(u16 param_1, int param_2) { } } +#if VERSION > VERSION_DEMO /* 8012E418-8012E6B4 .text setGetDemo__9daPy_lk_cFv */ BOOL daPy_lk_c::setGetDemo() { int staffIdx = dComIfGp_evmng_getMyStaffId("Link", this); @@ -488,6 +489,7 @@ BOOL daPy_lk_c::setGetDemo() { m34CE = 0; return FALSE; } +#endif /* 8012E6B4-8012E8B0 .text dProcGetItem_init__9daPy_lk_cFv */ BOOL daPy_lk_c::dProcGetItem_init() { diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index b23aeaa01..c69193bf6 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -50,9 +50,11 @@ JGeometry::TVec3 l_hammer_splash_particle_scale(0.67f, 0.67f, 0.67f); #include "d/actor/d_a_player_HIO_data.inc" +#if VERSION > VERSION_DEMO cXyz l_debug_keep_pos; csXyz l_debug_current_angle; csXyz l_debug_shape_angle; +#endif GXColor l_freeze_fade_color = {0xFF, 0xFF, 0xFF, 0xFF}; @@ -1024,12 +1026,7 @@ void daPy_lk_c::playTextureAnime() { /* 8010552C-8010558C .text checkPlayerGuard__9daPy_lk_cCFv */ BOOL daPy_lk_c::checkPlayerGuard() const { - /* Nonmatching */ - bool guard = false; - if (mCurProc == daPyProc_CROUCH_DEFENSE_e || checkUpperGuardAnime() || checkGuardSlip()) { - guard = true; - } - return guard; + return mCurProc == daPyProc_CROUCH_DEFENSE_e || checkUpperGuardAnime() || checkGuardSlip(); } /* 8010558C-801056E4 .text setOutPower__9daPy_lk_cFfsi */ @@ -1330,9 +1327,10 @@ s32 daPy_lk_c::setItemModel() { ((m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_DASHS || (m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_DASH)))))) { - dVar16 = mDoMtx_stack_c::now[0][3]; - dVar15 = mDoMtx_stack_c::now[1][3]; - dVar17 = mDoMtx_stack_c::now[2][3]; + MtxP mtx = mDoMtx_stack_c::get(); + dVar16 = mtx[0][3]; + dVar15 = mtx[1][3]; + dVar17 = mtx[2][3]; u16 uVar10 = cM_rad2s(((6.2831855f * (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() - 22.0f)) / mFrameCtrlUnder[UNDER_MOVE0_e].getEnd())); @@ -1537,7 +1535,11 @@ void daPy_lk_c::drawMirrorLightModel() { mDoMtx_stack_c::transS(l_ms_light_local_start); mDoMtx_stack_c::YrotM(-0x8000); mDoMtx_stack_c::revConcat(mpEquippedShieldModel->getBaseTRMtx()); +#if VERSION == VERSION_DEMO + mMirrorPacket.update(mDoMtx_stack_c::get(), 0xFF); +#else mMirrorPacket.update(mDoMtx_stack_c::get(), 0xFF, 60.0f); +#endif dComIfGd_getXluList()->entryImm(&mMirrorPacket, 0xFF); updateDLSetLight(mpYmsls00Model, 0); } @@ -1568,37 +1570,55 @@ void daPy_lk_c::drawShadow() { } mtl->getShape()->hide(); } - f32 fVar1; + f32 f31; if (checkModeFlg(ModeFlg_HANG)) { - fVar1 = m35DC; + f31 = m35DC; } else { - fVar1 = mAcch.GetGroundH(); + f31 = mAcch.GetGroundH(); } - f32 dVar9 = fVar1; - if ((!strcmp(dComIfGp_getStartStageName(), "M_DaiB")) || - (!strcmp(dComIfGp_getStartStageName(), "Xboss2"))) + f32 f1; + if (!strcmp(dComIfGp_getStartStageName(), "M_DaiB") || + !strcmp(dComIfGp_getStartStageName(), "Xboss2")) { - fVar1 = 1400.0f; + f1 = 1400.0f; } else { - fVar1 = daPy_HIO_basic_c0::m.field_0x10; + f1 = daPy_HIO_basic_c0::m.field_0x10; } - int iVar4 = dComIfGd_setShadow(m3614, 0, mpCLModel, &local_30, fVar1, 30.0f, current.pos.y, - dVar9, mAcch.m_gnd, &tevStr, 0, 1.0f, + int iVar4 = dComIfGd_setShadow(m3614, 0, mpCLModel, &local_30, f1, 30.0f, current.pos.y, + f31, mAcch.m_gnd, &tevStr, 0, 1.0f, &dDlst_shadowControl_c::mSimpleTexObj); m3614 = iVar4; if ((u32)m3614 != 0) { if ((checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES)) && (!checkCaughtShapeHide())) { dComIfGd_addRealShadow(m3614, mpKatsuraModel); } - if ((checkSwordEquip()) && (!checkDemoSwordNoDraw(1))) { + if (checkSwordEquip() +#if VERSION == VERSION_DEMO + && !checkLastDemoSwordNoDraw(1) +#else + && !checkDemoSwordNoDraw(1) +#endif + ) { dComIfGd_addRealShadow(m3614, mpEquippedSwordModel); } - if (((mpEquipItemModel != NULL) && (!checkDemoSwordNoDraw(0))) && + if ((mpEquipItemModel != NULL +#if VERSION == VERSION_DEMO + && !checkLastDemoSwordNoDraw(0) +#else + && !checkDemoSwordNoDraw(0) +#endif + ) && ((!checkBowItem(mEquipItem) || (!checkPlayerGuard())))) { dComIfGd_addRealShadow(m3614, mpEquipItemModel); } - if ((dComIfGs_getSelectEquip(1) != dItem_NONE_e) && (!checkDemoShieldNoDraw())) { + if (dComIfGs_getSelectEquip(1) != dItem_NONE_e +#if VERSION == VERSION_DEMO + && !checkLastDemoSwordNoDraw(1) +#else + && !checkDemoShieldNoDraw() +#endif + ) { dComIfGd_addRealShadow(m3614, mpEquippedShieldModel); } fopAc_ac_c* pfVar10; @@ -1818,9 +1838,13 @@ BOOL daPy_lk_c::draw() { } else { hideHatAndBackle(link_root_joint->getMesh()); } - if ((!checkNormalSwordEquip() && dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) != dStageType_FF1_e) || - checkCaughtShapeHide() || checkDemoShieldNoDraw()) - { + if ( + (!checkNormalSwordEquip() && dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) != dStageType_FF1_e) + || checkCaughtShapeHide() +#if VERSION > VERSION_DEMO + || checkDemoShieldNoDraw() +#endif + ) { mpCLModelData->getJointNodePointer(0x0D)->getMesh()->getShape()->hide(); // cl_podA joint } else { mpCLModelData->getJointNodePointer(0x0D)->getMesh()->getShape()->show(); // cl_podA joint @@ -1843,7 +1867,11 @@ BOOL daPy_lk_c::draw() { mpCLModelData->getJointNodePointer(0x29)->getMesh()->getShape()->show(); // cl_back joint if (!r24) { entryDLSetLight(mpHandsModel, checkNoResetFlg1(daPyFlg1_FREEZE_STATE)); - if (checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES) && !checkCaughtShapeHide() && !dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x20)) { + if (checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES) && !checkCaughtShapeHide() +#if VERSION > VERSION_DEMO + && !dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x20) +#endif + ) { entryDLSetLight(mpKatsuraModel, checkNoResetFlg1(daPyFlg1_FREEZE_STATE)); } if (checkFreezeState() && checkMaskDraw()) { @@ -1852,7 +1880,11 @@ BOOL daPy_lk_c::draw() { if (dComIfGs_getSelectEquip(2) == dItem_POWER_BRACELETS_e) { entryDLSetLight(mpPringModel, checkNoResetFlg1(daPyFlg1_FREEZE_STATE)); } - if (checkMasterSwordEquip() && !checkCaughtShapeHide() && !checkDemoShieldNoDraw()) { + if (checkMasterSwordEquip() && !checkCaughtShapeHide() +#if VERSION > VERSION_DEMO + && !checkDemoShieldNoDraw() +#endif + ) { updateDLSetLight(mpPodmsModel, checkNoResetFlg1(daPyFlg1_FREEZE_STATE)); } } @@ -1885,11 +1917,23 @@ BOOL daPy_lk_c::draw() { mDoExt_modelUpdateDL(mpSuimenMunyaModel); } if (!r24 && !dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x20)) { - if (checkSwordEquip() && !checkDemoSwordNoDraw(TRUE)) { + if (checkSwordEquip() +#if VERSION == VERSION_DEMO + && !checkLastDemoSwordNoDraw(1) +#else + && !checkDemoSwordNoDraw(1) +#endif + ) { entryDLSetLight(mpEquippedSwordModel, checkNoResetFlg1(daPyFlg1_FREEZE_STATE)); } } - if (dComIfGs_getSelectEquip(1) != dItem_NONE_e && !checkCaughtShapeHide() && !checkDemoShieldNoDraw()) { + if (dComIfGs_getSelectEquip(1) != dItem_NONE_e && !checkCaughtShapeHide() +#if VERSION == VERSION_DEMO + && !checkLastDemoSwordNoDraw(1) +#else + && !checkDemoShieldNoDraw() +#endif + ) { entryDLSetLight(mpEquippedShieldModel, checkNoResetFlg1(daPyFlg1_FREEZE_STATE)); } dComIfGd_setList(); @@ -1899,7 +1943,13 @@ BOOL daPy_lk_c::draw() { if (mpBottleContentsModel != NULL) { updateDLSetLight(mpBottleContentsModel, 0); } - if (mpEquipItemModel && !checkCaughtShapeHide() && !checkDemoSwordNoDraw(FALSE)) { + if (mpEquipItemModel && !checkCaughtShapeHide() +#if VERSION == VERSION_DEMO + && !checkLastDemoSwordNoDraw(0) +#else + && !checkDemoSwordNoDraw(0) +#endif + ) { if (!checkBowItem(mEquipItem) || !checkPlayerGuard()) { if (mEquipItem == dItem_HOOKSHOT_e) { if (mActorKeepEquip.getActor()) { @@ -8978,8 +9028,8 @@ void daPy_lk_c::setNeckAngle() { r28 = true; } else if (checkModeFlg(ModeFlg_00000080 | ModeFlg_08000000)) { if ((!dComIfGp_event_runCheck()) || (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK39_e)) { - if (dComIfGp_getAttention().getLookTarget() != NULL) { - sp18 = &dComIfGp_getAttention().getLookTarget()->eyePos; + if (dComIfGp_att_getLookTarget() != NULL) { + sp18 = &dComIfGp_att_getLookTarget()->eyePos; r28 = true; } else { if ((((checkAttentionPosAngle(r23_2, &sp18)) || @@ -11162,9 +11212,11 @@ void daPy_lk_c::checkRoofRestart() { /* 80121870-80122D30 .text execute__9daPy_lk_cFv */ BOOL daPy_lk_c::execute() { /* Nonmatching - regalloc */ +#if VERSION > VERSION_DEMO if (setGetDemo()) { return TRUE; } +#endif if (checkNoResetFlg1(daPyFlg1_UNK200)) { fopMsgM_demoMsgFlagOn(); @@ -11184,9 +11236,11 @@ BOOL daPy_lk_c::execute() { dComIfGs_setBottleItemIn(dItem_FOREST_WATER_e, dItem_WATER_BOTTLE_e); mDemo.setDemoType(5); m3628 = fpcM_ERROR_PROCESS_ID_e; +#if VERSION > VERSION_DEMO if (mCurProc == daPyProc_SCOPE_e) { procWait_init(); } +#endif } } } @@ -11234,9 +11288,11 @@ BOOL daPy_lk_c::execute() { } } +#if VERSION > VERSION_DEMO current.pos = l_debug_keep_pos; shape_angle = l_debug_shape_angle; current.angle = l_debug_current_angle; +#endif mCameraInfoIdx = dComIfGp_getPlayerCameraID(0); m3748 = current.pos; @@ -11508,7 +11564,7 @@ BOOL daPy_lk_c::execute() { m357C = m3580; m3580 = -1; mCurrAttributeCode = dBgS_Attr_UNK1B_e; - roomNo = current.roomNo; + roomNo = fopAcM_GetRoomNo(this); checkFallCode(); } @@ -11546,7 +11602,9 @@ BOOL daPy_lk_c::execute() { mpCLModelData->getJointNodePointer(0x02)->setMtxCalc(m_pbCalc[PART_UPPER_e]); // body_chn joint mpCLModelData->getJointNodePointer(0x1D)->setMtxCalc(m_pbCalc[PART_UNDER_e]); // wash_chn joint +#if VERSION > VERSION_DEMO checkOriginalHatAnimation(); +#endif static const Vec nsword_top = {45.0f, -31.0f, 0.0f}; static const Vec msword_top = {57.0f, 48.0f, 0.0f}; @@ -11583,7 +11641,11 @@ BOOL daPy_lk_c::execute() { m36D0 = mSwordTopPos; m36DC = m36C4; - if (mEquipItem == daPyItem_BOKO_e && mActorKeepEquip.getActor()) { + if (mEquipItem == daPyItem_BOKO_e +#if VERSION > VERSION_DEMO + && mActorKeepEquip.getActor() +#endif + ) { daBoko_c* boko = static_cast(mActorKeepEquip.getActor()); boko->getTopPos(&mSwordTopPos); boko->getBlurRootPos(&m36C4); @@ -11623,7 +11685,9 @@ BOOL daPy_lk_c::execute() { eventInfo.onCondition(dEvtCnd_CANTALK_e); } } +#if VERSION > VERSION_DEMO eventInfo.onCondition(dEvtCnd_CANGETITEM_e); +#endif JPABaseEmitter* emitter = mSmokeEcallBack.getEmitter(); if (emitter) { @@ -11655,9 +11719,11 @@ BOOL daPy_lk_c::execute() { if (dComIfGp_getDoStatus() == dActStts_UNK43) { dComIfGp_setDoStatus(dActStts_JUMP_e); } +#if VERSION > VERSION_DEMO if (checkResetFlg0(daPyRFlg0_UNK10000000)) { dComIfGp_setAStatus(dActStts_BLANK_e); } +#endif } offNoResetFlg1((daPy_FLG1)(daPyFlg1_UNK4 | daPyFlg1_FORCE_VOMIT_JUMP | daPyFlg1_FORCE_VOMIT_JUMP_SHORT | daPyFlg1_UNK10000000)); @@ -11686,9 +11752,11 @@ BOOL daPy_lk_c::execute() { mWhirlId = fpcM_ERROR_PROCESS_ID_e; +#if VERSION > VERSION_DEMO l_debug_keep_pos = current.pos; l_debug_shape_angle = shape_angle; l_debug_current_angle = current.angle; +#endif return TRUE; } @@ -12588,9 +12656,11 @@ cPhs_State daPy_lk_c::makeBgWait() { if ((dComIfGs_getLastSceneMode() & 0x4000) != 0) { onNoResetFlg1(daPyFlg1_UNK8000); } +#if VERSION > VERSION_DEMO l_debug_keep_pos = current.pos; l_debug_shape_angle = shape_angle; l_debug_current_angle = current.angle; +#endif return cPhs_NEXT_e; } @@ -12961,9 +13031,11 @@ void daPy_lk_c::setPlayerPosAndAngle(cXyz* param_1, s16 param_2) { shape_angle.y = param_2; current.angle.y = param_2; m34DE = shape_angle.y; +#if VERSION > VERSION_DEMO l_debug_keep_pos = current.pos; l_debug_shape_angle = shape_angle; l_debug_current_angle = current.angle; +#endif } /* 80128C10-80128CE4 .text setPlayerPosAndAngle__9daPy_lk_cFP4cXyzP5csXyz */ @@ -12980,9 +13052,11 @@ void daPy_lk_c::setPlayerPosAndAngle(cXyz* param_1, csXyz* param_2) { current.angle.y = shape_angle.y; m34DE = shape_angle.y; } +#if VERSION > VERSION_DEMO l_debug_keep_pos = current.pos; l_debug_shape_angle = shape_angle; l_debug_current_angle = current.angle; +#endif } /* 80128CE4-80128DC0 .text setPlayerPosAndAngle__9daPy_lk_cFPA4_f */ @@ -12995,9 +13069,11 @@ void daPy_lk_c::setPlayerPosAndAngle(MtxP param_1) { mDoMtx_MtxToRot(param_1, &shape_angle); current.angle.y = shape_angle.y; m34DE = shape_angle.y; +#if VERSION > VERSION_DEMO l_debug_keep_pos = current.pos; l_debug_shape_angle = shape_angle; l_debug_current_angle = current.angle; +#endif } } diff --git a/src/d/actor/d_a_player_sword.inc b/src/d/actor/d_a_player_sword.inc index 8d3b24809..b069689d9 100644 --- a/src/d/actor/d_a_player_sword.inc +++ b/src/d/actor/d_a_player_sword.inc @@ -154,7 +154,12 @@ void daPy_lk_c::setLightSaver() { mpEquipItemBrk->setFrame(2.0f); } mpSwordModel1->setBaseTRMtx(mpEquipItemModel->getBaseTRMtx()); - if (!checkDemoSwordNoDraw(0) && + if ( +#if VERSION == VERSION_DEMO + !checkLastDemoSwordNoDraw(0) && +#else + !checkDemoSwordNoDraw(0) && +#endif ((checkChanceMode() || checkNoResetFlg1(daPyFlg1_UNK8000)) || checkFinalMasterSwordEquip())) { simpleAnmPlay(mpSwordBtk); @@ -221,6 +226,17 @@ void daPy_lk_c::setLightSaver() { } } +#if VERSION == VERSION_DEMO +BOOL daPy_lk_c::checkLastDemoSwordNoDraw(BOOL param_0) { + if ((mEquipItem == daPyItem_SWORD_e || param_0) && + dComIfGs_isEventBit(0x3f40)) + { + return TRUE; + } else { + return FALSE; + } +} +#else /* 80155490-801554C8 .text checkDemoShieldNoDraw__9daPy_lk_cFv */ BOOL daPy_lk_c::checkDemoShieldNoDraw() { if (dComIfGs_isEventBit(0x3f40)) { @@ -240,6 +256,7 @@ BOOL daPy_lk_c::checkDemoSwordNoDraw(BOOL param_0) { return false; } } +#endif /* 80155544-80155574 .text checkChanceMode__9daPy_lk_cFv */ BOOL daPy_lk_c::checkChanceMode() { diff --git a/src/d/d_bg_s_acch.cpp b/src/d/d_bg_s_acch.cpp index c28f50a04..c8cc4ee10 100644 --- a/src/d/d_bg_s_acch.cpp +++ b/src/d/d_bg_s_acch.cpp @@ -154,28 +154,22 @@ void dBgS_Acch::GroundCheck(dBgS& i_bgs) { } /* 800A305C-800A313C .text GroundRoofProc__9dBgS_AcchFR4dBgS */ -f32 dBgS_Acch::GroundRoofProc(dBgS& i_bgs) { - f32 y = -G_CM3D_F_INF; +void dBgS_Acch::GroundRoofProc(dBgS& i_bgs) { if (m_ground_h != -G_CM3D_F_INF) { - // y = m_roof_height; - // fakematch to fix load order - if (field_0xb8 < (y = m_roof_height) && y < pm_pos->y) { - pm_pos->y = y; + if (field_0xb8 < m_roof_height && m_roof_height < pm_pos->y) { + pm_pos->y = m_roof_height; } if (!(m_flags & ROOF_NONE)) { - y = m_ground_h; - if (y >= m_roof_y) { + if (m_ground_h >= m_roof_y) { m_roof.SetExtChk(*this); ClrRoofHit(); cXyz pos = *pm_pos; m_roof.SetPos(pos); - y = i_bgs.RoofChk(&m_roof); - m_roof_y = y; + m_roof_y = i_bgs.RoofChk(&m_roof); } } } - return y; } /* 800A313C-800A3460 .text LineCheck__9dBgS_AcchFR4dBgS */ @@ -199,7 +193,7 @@ void dBgS_Acch::LineCheck(dBgS& i_bgs) { cM3dGPla* pla = i_bgs.GetTriPla(linChk); if (!cBgW_CheckBGround(pla->GetNP()->y)) { - VECAdd(pm_pos, pla->GetNP(), pm_pos); + VECAdd(GetPos(), pla->GetNP(), GetPos()); if (!cM3d_IsZero(std::sqrtf(pla->GetNP()->x*pla->GetNP()->x + pla->GetNP()->z*pla->GetNP()->z))) pm_acch_cir[i].SetWallHDirect(pm_pos->y); @@ -232,15 +226,12 @@ void dBgS_Acch::CrrPos(dBgS& i_bgs) { Init(); f32 lowH_R = GetWallAllLowH_R(); - cXyz* temp9 = pm_old_pos; - cXyz* temp10 = pm_pos; - f32 distXZ2 = temp9->abs2XZ(*temp10); - f32 distY = pm_old_pos->y - pm_pos->y; + f32 distXZ2 = GetOldPos()->abs2XZ(*GetPos()); + f32 distY = GetOldPos()->y - GetPos()->y; f32 lowH = GetWallAllLowH(); - field_0xb4 = pm_pos->y; - f32 oldY = pm_old_pos->y; - f32 temp7 = lowH + oldY; - f32 temp8 = m_ground_check_offset + pm_pos->y; + field_0xb4 = GetPos()->y; + f32 temp7 = lowH + GetOldPos()->y; + f32 temp8 = m_ground_check_offset + GetPos()->y; bool ranLineCheck = false; OffLineCheckHit(); @@ -330,10 +321,12 @@ void dBgS_Acch::CrrPos(dBgS& i_bgs) { } } +#if VERSION > VERSION_DEMO CHECK_FLOAT_CLASS(780, pm_pos->x); CHECK_FLOAT_CLASS(781, pm_pos->y); CHECK_FLOAT_CLASS(782, pm_pos->z); CHECK_PVEC3_RANGE(786, pm_pos); +#endif } /* 800A3F50-800A3F8C .text GetWallAllR__9dBgS_AcchFv */ @@ -368,11 +361,10 @@ void dBgS_Acch::CalcWallBmdCyl() { f32 max_h = min_h; if (m_tbl_size >= 1) { for (s32 i = 0; i < m_tbl_size; i++) { - f32 h = pm_acch_cir[i].GetWallH(); - if (min_h > h) - min_h = h; - if (max_h < h) - max_h = h; + if (min_h > pm_acch_cir[i].GetWallH()) + min_h = pm_acch_cir[i].GetWallH(); + if (max_h < pm_acch_cir[i].GetWallH()) + max_h = pm_acch_cir[i].GetWallH(); } } diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp index 275f473c8..c680ca1f4 100644 --- a/src/d/d_drawlist.cpp +++ b/src/d/d_drawlist.cpp @@ -1953,8 +1953,13 @@ void mirrorPolygonCheck(cXyz* min_p, cXyz* max_p, f32 rad, dDlst_shadowPoly_c* p dComIfG_Bgsp()->ShdwDraw(&shdwDraw); } +#if VERSION == VERSION_DEMO +void dDlst_mirrorPacket::update(Mtx mtx, u8 alpha) +#else /* 80085808-800859DC .text update__18dDlst_mirrorPacketFPA4_fUcf */ -void dDlst_mirrorPacket::update(Mtx mtx, u8 alpha, f32 rad) { +void dDlst_mirrorPacket::update(Mtx mtx, u8 alpha, f32 rad) +#endif +{ mShadowPoly.mCount = 0; static cXyz l_p1Offset(0.0f, 0.0f, 0.0f); static cXyz l_p2Offset(0.0f, 0.0f, 10000.0f); @@ -1962,7 +1967,11 @@ void dDlst_mirrorPacket::update(Mtx mtx, u8 alpha, f32 rad) { cXyz offs, offs2; mDoMtx_multVec(mtx, &l_p1Offset, &offs); mDoMtx_multVec(mtx, &l_p2Offset, &offs2); +#if VERSION == VERSION_DEMO + mirrorPolygonCheck(&offs, &offs2, 60.0f, &mShadowPoly); +#else mirrorPolygonCheck(&offs, &offs2, rad, &mShadowPoly); +#endif Mtx viewMtx; mDoMtx_lookAt(viewMtx, &offs, &offs2, 0);