diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2024-10-24 20:47:02 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-25 06:47:02 +0300 |
| commit | 8a0802554e0d4520ccc79d90f59c78f7626e6033 (patch) | |
| tree | 3674d76b33eed1fef4e1ca774d2a6b5622b8f044 /include | |
| parent | 5650c7fe0861609b4b2c6db09312622a1fcd7fc1 (diff) | |
d_a_alink work / lv4digsand done / e_s1 matched (#2224)
* d_a_alink work / d_a_obj_lv4digsand done
* d_a_e_s1 matched, not linked
* d_a_e_s1 documentation
Diffstat (limited to 'include')
| -rw-r--r-- | include/d/actor/d_a_alink.h | 22 | ||||
| -rw-r--r-- | include/d/actor/d_a_e_s1.h | 93 | ||||
| -rw-r--r-- | include/d/actor/d_a_midna.h | 6 | ||||
| -rw-r--r-- | include/d/actor/d_a_npc_moi.h | 6 | ||||
| -rw-r--r-- | include/d/actor/d_a_npc_tk.h | 1 | ||||
| -rw-r--r-- | include/d/actor/d_a_obj_digholl.h | 3 | ||||
| -rw-r--r-- | include/d/actor/d_a_obj_digplace.h | 2 | ||||
| -rw-r--r-- | include/d/actor/d_a_obj_digsnow.h | 4 | ||||
| -rw-r--r-- | include/d/actor/d_a_obj_lv4digsand.h | 34 | ||||
| -rw-r--r-- | include/d/actor/d_a_obj_sekizoa.h | 20 | ||||
| -rw-r--r-- | include/d/actor/d_a_player.h | 9 | ||||
| -rw-r--r-- | include/d/actor/d_a_tag_wljump.h | 12 | ||||
| -rw-r--r-- | include/d/d_camera.h | 4 | ||||
| -rw-r--r-- | include/f_op/f_op_actor.h | 3 | ||||
| -rw-r--r-- | include/f_op/f_op_actor_enemy.h | 86 | ||||
| -rw-r--r-- | include/f_op/f_op_actor_mng.h | 75 | ||||
| -rw-r--r-- | include/global.h | 15 | ||||
| -rw-r--r-- | include/m_Do/m_Do_ext.h | 1 |
18 files changed, 289 insertions, 107 deletions
diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h index 07d580fa2d..92ab3d82bc 100644 --- a/include/d/actor/d_a_alink.h +++ b/include/d/actor/d_a_alink.h @@ -674,6 +674,7 @@ public: FTANM_UNK_7B = 0x7B, FTANM_UNK_7C = 0x7C, FTANM_UNK_8A = 0x8A, + FTANM_UNK_8B = 0x8B, FTANM_UNK_8D = 0x8D, FTANM_UNK_8E = 0x8E, FTANM_UNK_8F = 0x8F, @@ -682,6 +683,7 @@ public: FTANM_UNK_95 = 0x95, FTANM_UNK_96 = 0x96, FTANM_UNK_97 = 0x97, + FTANM_UNK_99 = 0x99, FTANM_UNK_9A = 0x9A, FTANM_UNK_9B = 0x9B, FTANM_UNK_9C = 0x9C, @@ -1309,7 +1311,7 @@ public: /* 800A39B8 */ void handBgCheck(); /* 800A3C8C */ JKRHeap* setItemHeap(); /* 800A3CE4 */ void setIdxMask(u16*, u16*); - /* 800A3D0C */ void* getAnimeResource(daPy_anmHeap_c*, u16, u32); + /* 800A3D0C */ J3DAnmTransform* getAnimeResource(daPy_anmHeap_c*, u16, u32); /* 800A3D7C */ J3DModel* initModel(J3DModelData*, u32, u32); /* 800A3E30 */ J3DModel* initModel(u16, u32); /* 800A3E98 */ J3DModel* initModelEnv(u16, u32); @@ -2001,7 +2003,7 @@ public: /* 800E7460 */ int procPickUp(); /* 800E75EC */ int procPickPutInit(int); /* 800E76E0 */ int procPickPut(); - /* 800E7894 */ void checkSetChainPullAnime(s16); + /* 800E7894 */ BOOL checkSetChainPullAnime(s16); /* 800E794C */ s16 getChainStickAngleY(s16) const; /* 800E7994 */ u8 checkChainEmphasys(); /* 800E79F8 */ BOOL searchFmChainPos(); @@ -2361,8 +2363,8 @@ public: /* 80102B1C */ int checkSwimAction(int); /* 80103058 */ int checkSwimUpAction(); /* 801032C8 */ void swimOutAfter(int); - /* 80103398 */ bool checkSwimFall(); - /* 801033CC */ void checkSwimOutAction(); + /* 80103398 */ BOOL checkSwimFall(); + /* 801033CC */ int checkSwimOutAction(); /* 80103698 */ void setSwimMoveAnime(); /* 80103EE0 */ bool checkSwimButtonAccept(); /* 80103F08 */ bool checkUpSwimButtonAccept(); @@ -2743,12 +2745,12 @@ public: /* 80128F5C */ void setWolfAtnMoveDirection(); /* 80129114 */ void setBlendWolfAtnMoveAnime(f32); /* 8012933C */ void setBlendWolfAtnBackMoveAnime(f32); - /* 8012948C */ void setDoubleAnimeWolf(f32, f32, f32, daAlink_c::daAlink_WANM, + /* 8012948C */ int setDoubleAnimeWolf(f32, f32, f32, daAlink_c::daAlink_WANM, daAlink_c::daAlink_WANM, int, f32); /* 80129678 */ void setSingleAnimeWolfBase(daAlink_c::daAlink_WANM); /* 801296A8 */ void setSingleAnimeWolfBaseMorf(daAlink_c::daAlink_WANM, f32); /* 801296D8 */ void setSingleAnimeWolfBaseSpeed(daAlink_c::daAlink_WANM, f32, f32); - /* 80129704 */ void setSingleAnimeWolf(daAlink_c::daAlink_WANM, f32, f32, s16, f32); + /* 80129704 */ int setSingleAnimeWolf(daAlink_c::daAlink_WANM, f32, f32, s16, f32); /* 80129848 */ void setSingleAnimeWolfParam(daAlink_c::daAlink_WANM, daAlinkHIO_anm_c const*); /* 8012987C */ int checkWolfLandAction(int); /* 80129958 */ BOOL checkMidnaUseAbility() const; @@ -2758,7 +2760,7 @@ public: /* 8012A02C */ BOOL wolfSideBgCheck(s16); /* 8012A228 */ BOOL checkWolfAttackReverse(int); /* 8012A330 */ int checkWolfBarrierHitReverse(); - /* 8012A41C */ bool checkWolfBarrierWallHit(cBgS_PolyInfo&); + /* 8012A41C */ BOOL checkWolfBarrierWallHit(cBgS_PolyInfo&); /* 8012A498 */ void wolfBgCheck(); /* 8012ACCC */ void changeWolfBlendRate(int); /* 8012AD1C */ void setWolfFootMatrix(); @@ -3572,7 +3574,7 @@ public: /* 0x02154 */ J3DAnmTexPattern* field_0x2154; /* 0x02158 */ J3DAnmTextureSRTKey* mpFaceBtk; /* 0x0215C */ daPy_frameCtrl_c* field_0x215c; - /* 0x02160 */ s8* field_0x2160; + /* 0x02160 */ u16* field_0x2160; /* 0x02164 */ mDoExt_bckAnm field_0x2164; /* 0x02180 */ daAlink_matAnm_c* field_0x2180[2]; /* 0x02188 */ dEyeHL_c mEyeHL1; @@ -3750,16 +3752,20 @@ public: union { s16 field_0x300a; s16 mBoardSwordChargeTime; + s16 mDigActorName; } /* 0x0300A */ mProcVar1; union { s16 field_0x300c; s16 mPuzzleAimAngle; + s16 mDigType; } /* 0x0300C */ mProcVar2; union { s16 field_0x300e; + s16 mDigChangeArea; } /* 0x0300E */ mProcVar3; union { s16 field_0x3010; + s16 mDigExitID; } /* 0x03010 */ mProcVar4; union { s16 field_0x3012; diff --git a/include/d/actor/d_a_e_s1.h b/include/d/actor/d_a_e_s1.h index 9ba691e664..f20e9ed4fb 100644 --- a/include/d/actor/d_a_e_s1.h +++ b/include/d/actor/d_a_e_s1.h @@ -1,6 +1,20 @@ #ifndef D_A_E_S1_H #define D_A_E_S1_H + #include "f_op/f_op_actor_mng.h" +#include "Z2AudioLib/Z2Creature.h" +#include "d/d_jnt_col.h" +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" +#include "d/d_cc_uty.h" + +struct dPath; + +struct s1_ke_s { + /* 0x000 */ cXyz field_0x0[16]; + /* 0x0C0 */ cXyz field_0xc0[16]; + /* 0x180 */ cXyz field_0x180; +}; /** * @ingroup actors-enemies @@ -11,22 +25,83 @@ * */ class e_s1_class : public fopEn_enemy_c { -private: - /* 0x5ac */ u8 field_0x5ac[0x3084 - 0x5ac]; +public: + /* 0x05AC */ request_of_phase_process_class mPhase; + /* 0x05B4 */ u8 mRoofSpawn; + /* 0x05B5 */ u8 mPrm1; + /* 0x05B6 */ u8 mGroupID; + /* 0x05B7 */ u8 mSwBit; + /* 0x05B8 */ u8 field_0x5B8[0x05BC - 0x05B8]; + /* 0x05BC */ dPath* mpPath; + /* 0x05C0 */ s8 mCurrentPathPointNo; + /* 0x05C1 */ s8 mPathDirection; + /* 0x05C4 */ cXyz mPathTargetPos; + /* 0x05D0 */ s16 mTargetAngle; + /* 0x05D4 */ mDoExt_McaMorfSO* mpMorf; + /* 0x05D8 */ int mAnm; + /* 0x05DC */ u8 field_0x5DC[0x05E0 - 0x05DC]; + /* 0x05E0 */ Z2CreatureEnemy mSound; + /* 0x0684 */ dJntCol_c mJntCol; + /* 0x0694 */ s16 mCounter; + /* 0x0696 */ s16 mAction; + /* 0x0698 */ s16 mMode; + /* 0x069A */ s8 mDrawShadow; + /* 0x069C */ u32 mShadowKey; + /* 0x06A0 */ s16 mTimers[4]; + /* 0x06A8 */ s16 mHitInvincibilityTimer; + /* 0x06AA */ s16 field_0x6aa; + /* 0x06AC */ f32 field_0x6ac; + /* 0x06B0 */ s16 field_0x6b0; + /* 0x06B2 */ s16 field_0x6b2; + /* 0x06B4 */ u8 field_0x6B4[0x06B6 - 0x06B4]; + /* 0x06B6 */ s16 field_0x6b6; + /* 0x06B8 */ s8 mIsSlowAttack; + /* 0x06B9 */ s8 field_0x6b9; + /* 0x06BA */ s8 field_0x6ba; + /* 0x06BB */ s8 field_0x6bb; + /* 0x06BC */ dBgS_AcchCir mAcchCir; + /* 0x06FC */ dBgS_ObjAcch mAcch; + /* 0x08D4 */ dCcD_Stts mCcStts; + /* 0x0910 */ dCcD_Sph mCcSph[3]; + /* 0x0CB8 */ dCcD_Sph mCcAtSph; + /* 0x0DF0 */ dCcU_AtInfo mAtInfo; + /* 0x0E14 */ s1_ke_s mKe[22]; + /* 0x301C */ mDoExt_3DlineMat0_c mLineMat; + /* 0x3038 */ s16 mDemoMode; + /* 0x303A */ s16 mDemoTimer; + /* 0x303C */ cXyz mDemoCamEye; + /* 0x3048 */ cXyz mDemoCamCenter; + /* 0x3054 */ f32 field_0x3054; + /* 0x3058 */ f32 field_0x3058; + /* 0x305C */ f32 mDemoCamBank; + /* 0x3060 */ f32 field_0x3060; + /* 0x3064 */ f32 mSearchRange; + /* 0x3068 */ f32 field_0x3068; + /* 0x306C */ s8 field_0x306c; + /* 0x306D */ u8 field_0x306D[0x307C - 0x306D]; + /* 0x307C */ u32 mBodyEffEmtrID; + /* 0x3080 */ u8 mInitHIO; }; STATIC_ASSERT(sizeof(e_s1_class) == 0x3084); class daE_S1_HIO_c { +public: /* 8077AB8C */ daE_S1_HIO_c(); - /* 80780840 */ ~daE_S1_HIO_c(); -}; + /* 80780840 */ virtual ~daE_S1_HIO_c() {} -struct s1_ke_s { - /* 807803F4 */ ~s1_ke_s(); - /* 80780470 */ s1_ke_s(); + /* 0x04 */ s8 field_0x4; + /* 0x08 */ f32 mBaseSize; + /* 0x0C */ f32 mMoveSpeed; + /* 0x10 */ u8 field_0x10[0x14 - 0x10]; + /* 0x14 */ f32 mDashSpeed; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ s16 mFallSEWaitTime; + /* 0x1E */ s16 mAllDeadWaitTime; + /* 0x20 */ f32 mReactionDist; + /* 0x24 */ f32 mReactionAngle; + /* 0x28 */ s16 mReactionTime; + /* 0x2A */ u8 mInvincible; }; - - #endif /* D_A_E_S1_H */ diff --git a/include/d/actor/d_a_midna.h b/include/d/actor/d_a_midna.h index 8919fc302a..d79b08645b 100644 --- a/include/d/actor/d_a_midna.h +++ b/include/d/actor/d_a_midna.h @@ -32,6 +32,7 @@ public: FLG0_UNK_8000000 = 0x8000000, FLG0_NPC_NEAR = 0x100000, FLG0_NPC_FAR = 0x40000, + FLG0_UNK_20000 = 0x20000, FLG0_NO_INPUT = 0x4000, FLG0_NO_DRAW = 0x2000, FLG0_UNK_400 = 0x400, @@ -118,6 +119,11 @@ public: BOOL checkWolfNoPos() const { return checkStateFlg0(FLG0_UNK_800); } int checkMetamorphoseEnable() { return (this->*mpFunc)(); } int checkShadowModelDrawDemoForce() const { return checkStateFlg1(FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE); } + + void setForceNeckAimPos(const cXyz& i_pos) { + onStateFlg0(FLG0_UNK_20000); + field_0x9c4 = i_pos; + } void onTagWaitPosWarp(const cXyz* param_0) { field_0x9ac = *param_0; diff --git a/include/d/actor/d_a_npc_moi.h b/include/d/actor/d_a_npc_moi.h index 79e84884ee..e0ed85d64a 100644 --- a/include/d/actor/d_a_npc_moi.h +++ b/include/d/actor/d_a_npc_moi.h @@ -83,8 +83,12 @@ public: static void* mCutNameList[5]; static u8 mCutList[60]; + bool chkSFight() { return field_0x166b == 1; } + private: - /* 0x568 */ u8 field_0x568[0x1674 - 0x568]; + /* 0x0568 */ u8 field_0x568[0x166B - 0x568]; + /* 0x166B */ u8 field_0x166b; + /* 0x166C */ u8 field_0x166c[0x1674 - 0x166C]; }; STATIC_ASSERT(sizeof(daNpc_Moi_c) == 0x1674); diff --git a/include/d/actor/d_a_npc_tk.h b/include/d/actor/d_a_npc_tk.h index 303f1ef80c..1453c37b82 100644 --- a/include/d/actor/d_a_npc_tk.h +++ b/include/d/actor/d_a_npc_tk.h @@ -73,6 +73,7 @@ public: void setEventWolf() { mFlags |= 0x80; } void setEvent() { mFlags |= 0x8; } void setAway() { mFlags |= 2; } + void setAttack() { mFlags |= 1; } void setHawkPath(u8 i_pathNo) { if (i_pathNo != 0xFF) { diff --git a/include/d/actor/d_a_obj_digholl.h b/include/d/actor/d_a_obj_digholl.h index 03ba8a9a95..a11fb269bf 100644 --- a/include/d/actor/d_a_obj_digholl.h +++ b/include/d/actor/d_a_obj_digholl.h @@ -18,6 +18,9 @@ public: /* 80BDC7D8 */ int execute(); /* 80BDCB0C */ int draw(); + void onDigStart() { field_0x568 = 1; } + s16 getSceneNum() const { return field_0x56c; } + private: /* 0x568 */ u8 field_0x568; /* 0x569 */ u8 field_0x569; diff --git a/include/d/actor/d_a_obj_digplace.h b/include/d/actor/d_a_obj_digplace.h index 2635ad9d5c..5144ebcbc5 100644 --- a/include/d/actor/d_a_obj_digplace.h +++ b/include/d/actor/d_a_obj_digplace.h @@ -32,6 +32,8 @@ public: u8 getSceneNum() { return (fopAcM_GetParam(this) >> 0xC) & 0xFF; } int getItemNum() { return getSceneNum(); } + u8 getType() const { return mType; } + void onDigFlg() { mDigFlg = true; } }; STATIC_ASSERT(sizeof(daObjDigpl_c) == 0x5C0); diff --git a/include/d/actor/d_a_obj_digsnow.h b/include/d/actor/d_a_obj_digsnow.h index c8dcd59afe..a2b24eca21 100644 --- a/include/d/actor/d_a_obj_digsnow.h +++ b/include/d/actor/d_a_obj_digsnow.h @@ -47,8 +47,8 @@ public: /* 80BDD2B8 */ virtual int Delete(); u8 getSwNo() { return fopAcM_GetParamBit(this, 0, 8); } - void startDig() { mAction = ACTION_DIG_e; } - void endDig() { mAction = ACTION_END_e; } + void startDig() { mMode = ACTION_DIG_e; } + void endDig() { mMode = ACTION_END_e; } private: /* 0x5A0 */ request_of_phase_process_class mPhaseReq; diff --git a/include/d/actor/d_a_obj_lv4digsand.h b/include/d/actor/d_a_obj_lv4digsand.h index 138e1ae829..3d3c274a40 100644 --- a/include/d/actor/d_a_obj_lv4digsand.h +++ b/include/d/actor/d_a_obj_lv4digsand.h @@ -2,6 +2,9 @@ #define D_A_OBJ_LV4DIGSAND_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" /** * @ingroup actors-objects @@ -11,14 +14,11 @@ * @details * */ -class daObjL4DigSand_c : public fopAc_ac_c { +class daObjL4DigSand_c : public dBgS_MoveBgActor { public: /* 80C66B18 */ void initBaseMtx(); /* 80C66B54 */ void setBaseMtx(); - /* 80C66BC8 */ void Create(); - /* 80C66C24 */ void CreateHeap(); - /* 80C66C94 */ void create1st(); - /* 80C66D40 */ void Execute(f32 (**)[3][4]); + /* 80C66C94 */ int create1st(); /* 80C66DD0 */ void action(); /* 80C66E74 */ void mode_init_wait(); /* 80C66E80 */ void mode_wait(); @@ -26,11 +26,27 @@ public: /* 80C66FFC */ void mode_dig(); /* 80C670AC */ void mode_init_end(); /* 80C67100 */ void mode_end(); - /* 80C67104 */ void Draw(); - /* 80C671A8 */ void Delete(); -private: - /* 0x568 */ u8 field_0x568[0x944 - 0x568]; + /* 80C66C24 */ virtual int CreateHeap(); + /* 80C66BC8 */ virtual int Create(); + /* 80C66D40 */ virtual int Execute(f32 (**)[3][4]); + /* 80C67104 */ virtual int Draw(); + /* 80C671A8 */ virtual int Delete(); + + u8 getSwNo() { return fopAcM_GetParamBit(this, 0, 8); } + void startDig() { field_0x941 = 1; } + void endDig() { field_0x941 = 2; } + + /* 0x5A0 */ request_of_phase_process_class mPhase; + /* 0x5A8 */ J3DModel* mpModel; + /* 0x5AC */ dBgS_ObjAcch mAcch; + /* 0x784 */ dBgS_AcchCir mAcchCir; + /* 0x7C4 */ dCcD_Stts mCcStts; + /* 0x800 */ dCcD_Cyl mCcCyl; + /* 0x93C */ f32 mGroundY; + /* 0x940 */ u8 mMode; + /* 0x941 */ u8 field_0x941; + /* 0x942 */ u8 mTimer; }; STATIC_ASSERT(sizeof(daObjL4DigSand_c) == 0x944); diff --git a/include/d/actor/d_a_obj_sekizoa.h b/include/d/actor/d_a_obj_sekizoa.h index eedeb47177..c7f2b02d8a 100644 --- a/include/d/actor/d_a_obj_sekizoa.h +++ b/include/d/actor/d_a_obj_sekizoa.h @@ -53,7 +53,6 @@ public: daNpcT_MotionSeqMngr_c::sequenceStepData_c const*, int, daNpcT_evtData_c const*, char**); /* 80CD5B84 */ void chkGoal(); - /* 801312C8 */ void setWolfHowling(); /* 80CD5B7C */ s32 getBackboneJointNo(); /* 80CD5B74 */ s32 getHeadJointNo(); @@ -72,6 +71,17 @@ public: /* 80CD05D0 */ void drawGhost(); /* 80CD06BC */ bool afterSetMotionAnm(int, int, f32, int); + void setWolfHowling() { + if (field_0x10c8 != 0) { + fopAc_ac_c* actor_p = field_0x10e4.getActorP(); + JUT_ASSERT(0x1A3, 0 != actor_p); + + ((daObj_Sekizoa_c*)actor_p)->setWolfHowling(); + } else { + field_0x1173 = 1; + } + } + u8 getType() { int prm = fopAcM_GetParam(this) >> 0x1C; @@ -116,6 +126,14 @@ public: static void* mCutNameList[9]; static u8 mCutList[108]; + + /* 0x0E40 */ u8 field_0xe40[0x10C8 - 0xE40]; + /* 0x10C8 */ u8 field_0x10c8; + /* 0x10C9 */ u8 field_0x10c9[0x10E4 - 0x10C9]; + /* 0x10E4 */ daNpcT_ActorMngr_c field_0x10e4; + /* 0x10EC */ u8 field_0x10ec[0x1173 - 0x10ec]; + /* 0x1173 */ u8 field_0x1173; + /* 0x1174 */ u8 field_0x1174[0x1180 - 0x1174]; }; #endif /* D_A_OBJ_SEKIZOA_H */ diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index cd2f7642c8..ded02632ca 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -387,6 +387,7 @@ public: ERFLG1_UNK_20000000 = 0x20000000, ERFLG1_UNK_10000000 = 0x10000000, ERFLG1_UNK_4000000 = 0x4000000, + ERFLG1_UNK_2000000 = 0x2000000, ERFLG1_UNK_1000000 = 0x1000000, ERFLG1_UNK_200000 = 0x200000, ERFLG1_UNK_100000 = 0x100000, @@ -420,12 +421,14 @@ public: }; enum daPy_RFLG0 { + RFLG0_WOLF_BARK = 0x80000000, RFLG0_UNK_40000000 = 0x40000000, RFLG0_UNK_20000000 = 0x20000000, RFLG0_UNK_10000000 = 0x10000000, RFLG0_UNK_8000000 = 0x8000000, RFLG0_UNK_4000000 = 0x4000000, RFLG0_GRAB_PUT_START = 0x400000, + RFLG0_WOLF_GROWL = 0x200000, RFLG0_UNK_80000 = 0x80000, RFLG0_UNK_40000 = 0x40000, RFLG0_UNK_20000 = 0x20000, @@ -869,6 +872,10 @@ public: u32 checkMagneBootsOn() const { return checkNoResetFlg0(FLG0_MAGNE_BOOTS_ON); } BOOL checkFastSwordCut() const { return checkNoResetFlg0(FLG0_UNK_80000); } u32 checkMidnaRide() const { return checkNoResetFlg0(FLG0_MIDNA_RIDE); } + BOOL checkWolfGrowl() const { return checkResetFlg0(RFLG0_WOLF_GROWL); } + BOOL checkWolfThreat() const { return checkWolfGrowl(); } + BOOL checkWolfBark() const { return checkResetFlg0(RFLG0_WOLF_BARK); } + void onPlayerNoDraw() { onNoResetFlg0(FLG0_PLAYER_NO_DRAW); } void offPlayerNoDraw() { offNoResetFlg0(FLG0_PLAYER_NO_DRAW); } void onPushPullKeep() { onNoResetFlg0(FLG0_PUSH_PULL_KEEP); } @@ -879,6 +886,8 @@ public: void onForceGameOver() { onNoResetFlg2(FLG2_FORCE_GAMEOVER); } void onForceWolfChange() { onEndResetFlg0(ERFLG0_UNK_2); } void onDoPutEmphasys() { onEndResetFlg1(ERFLG1_UNK_10000000); } + void onNsScream() { onEndResetFlg1(ERFLG1_UNK_1); } + void onNsScreamAnm() { onEndResetFlg1(daPy_ERFLG1(ERFLG1_UNK_1 | ERFLG1_UNK_2)); } u32 checkBoarSingleBattle() const { return checkNoResetFlg2(FLG2_BOAR_SINGLE_BATTLE); } u32 checkWolfDashAutoJump() const { return checkNoResetFlg2(FLG2_WOLF_DASH_AUTO_JUMP); } diff --git a/include/d/actor/d_a_tag_wljump.h b/include/d/actor/d_a_tag_wljump.h index 87fe27b6b2..bcdd00520d 100644 --- a/include/d/actor/d_a_tag_wljump.h +++ b/include/d/actor/d_a_tag_wljump.h @@ -21,10 +21,14 @@ public: } } + f32 getLandArea() const { return mLandArea; } + void onNextCheckFlg() { mNextCheckFlg = true; } + s16 getNotSlideFlg() const { return shape_angle.z; } + /* 0x568 */ s8 field_0x568; - /* 0x568 */ s8 field_0x569; - /* 0x568 */ u8 field_0x56a; - /* 0x568 */ u8 field_0x56b; + /* 0x569 */ s8 field_0x569; + /* 0x56A */ u8 field_0x56a; + /* 0x56B */ u8 mNextCheckFlg; /* 0x56C */ u8 field_0x56c[4]; /* 0x570 */ u8 field_0x570; /* 0x571 */ u8 field_0x571; @@ -34,7 +38,7 @@ public: /* 0x574 */ u16 field_0x576; /* 0x578 */ dMsgFlow_c mMsgFlow; /* 0x5C4 */ dPath* field_0x5c4; - /* 0x5C8 */ f32 field_0x5c8; + /* 0x5C8 */ f32 mLandArea; }; #endif /* D_A_TAG_WLJUMP_H */ diff --git a/include/d/d_camera.h b/include/d/d_camera.h index b8dd28ac64..0248f65099 100644 --- a/include/d/d_camera.h +++ b/include/d/d_camera.h @@ -391,6 +391,10 @@ public: i_info->field_0x1e = param_1; } + void EventFlag(int i_flag) { + mEventData.field_0x24 = i_flag; + } + static engine_fn engine_tbl[]; /* 0x000 */ camera_class* field_0x0; diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 07feb9b429..eff858ece6 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -271,12 +271,14 @@ public: void onWolfDownPullEndFlg() { mFlags |= 0x20; } void onWolfNoLock() { mFlags |= 0x200; } void onDownFlg() { mFlags |= 1; } + void onHeadLockFlg() { mFlags |= 0x80; } void offWolfBiteDamage() { mFlags &= ~0x40; } void offCutDownHitFlg() { mFlags &= ~0x2; } void offWolfDownPullFlg() { mFlags &= ~0x10; } void offDownFlg() { mFlags &= ~0x17; } void offWolfNoLock() { mFlags &= ~0x200; } + void offHeadLockFlg() { mFlags &= ~0x80; } void setMidnaBindMode(u8 i_bindMode) { mMidnaBindMode = i_bindMode; } void setMidnaBindID(u8 i_idx, u32 i_bindID) { mMidnaBindID[i_idx] = i_bindID; } @@ -285,6 +287,7 @@ public: void setThrowModeThrowRight() { mThrowMode |= 0x10; } void setThrowModeThrowLeft() { mThrowMode |= 8; } void setDownPos(const cXyz* i_pos) { mDownPos = *i_pos; } + void setHeadLockPos(const cXyz* i_pos) { mHeadLockPos = *i_pos; } /* 0x568 */ cXyz mDownPos; /* 0x574 */ cXyz mHeadLockPos; diff --git a/include/f_op/f_op_actor_enemy.h b/include/f_op/f_op_actor_enemy.h new file mode 100644 index 0000000000..d8cf625ff6 --- /dev/null +++ b/include/f_op/f_op_actor_enemy.h @@ -0,0 +1,86 @@ +#ifndef F_OP_ACTOR_ENEMY_H_ +#define F_OP_ACTOR_ENEMY_H_ + +#include "SSystem/SComponent/c_math.h" +#include "Z2AudioLib/Z2Creature.h" +#include "d/actor/d_a_midna.h" +#include "d/actor/d_a_player.h" +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" + +// NONMATCHING ? +static int setMidnaBindEffect(fopEn_enemy_c* i_actorP, Z2CreatureEnemy* i_creatureP, cXyz* i_effPos, + cXyz* i_effSize) { + static GXColor e_prim[] = { + {0xFF, 0x78, 0x00, 0x00}, + {0xFF, 0x64, 0x78, 0x00}, + }; + static GXColor e_env[] = { + {0x5A, 0x2D, 0x2D, 0x00}, + {0x3C, 0x1E, 0x1E, 0x00}, + }; + + daPy_py_c* player = daPy_getPlayerActorClass(); + fopAc_ac_c* a_this = (fopAc_ac_c*)i_actorP; + + if (player->getMidnaActor() && player->checkWolfLock(a_this)) { + cXyz sp48; + + BOOL darkworld_check; + if (dKy_darkworld_check()) { + darkworld_check = 1; + } else { + darkworld_check = 0; + } + + if (i_actorP->getMidnaBindMode() == 0) { + i_actorP->setMidnaBindMode(1); + + csXyz sp68; + MTXCopy(player->getMidnaActor()->getMtxHairTop(), mDoMtx_stack_c::get()); + + cXyz sp54(nREG_F(8) + 100.0f, nREG_F(9), nREG_F(10)); + mDoMtx_stack_c::multVec(&sp54, &sp48); + + cXyz sp60 = sp48 - *i_effPos; + + sp68.y = cM_atan2s(sp60.x, sp60.z); + sp68.x = -cM_atan2s(sp60.y, JMAFastSqrt(sp60.x * sp60.x + sp60.z * sp60.z)); + sp68.z = 0; + + s32 room_no = fopAcM_GetRoomNo(a_this); + JPABaseEmitter* emitter = dComIfGp_particle_set( + 0x29B, i_effPos, &a_this->tevStr, &sp68, i_effSize, 0xFF, NULL, room_no, + &e_prim[darkworld_check], &e_env[darkworld_check], NULL); + + if (emitter != NULL) { + emitter->setGlobalParticleHeightScale((JREG_F(7) + 0.01f) * sp60.abs()); + } + + room_no = fopAcM_GetRoomNo(a_this); + dComIfGp_particle_set(0x29C, i_effPos, &a_this->tevStr, &a_this->shape_angle, i_effSize, + 0xFF, NULL, room_no, &e_prim[darkworld_check], + &e_env[darkworld_check], NULL); + + i_creatureP->startCreatureSound(Z2SE_MIDNA_BIND_LOCK_ON, 0, -1); + } + + for (int i = 0; i < 3; i++) { + static u16 eff_id[] = {0x29D, 0x29E, 0x29F}; + + u32* bind_id = i_actorP->getMidnaBindID(i); + *bind_id = dComIfGp_particle_set(*bind_id, eff_id[i], i_effPos, &a_this->tevStr, + &a_this->shape_angle, i_effSize, 0xFF, NULL, + fopAcM_GetRoomNo(a_this), &e_prim[darkworld_check], + &e_env[darkworld_check], NULL); + } + + i_creatureP->startCreatureSound(Z2SE_MIDNA_BIND_LOCK_SUS, 0, -1); + return 1; + } + + i_actorP->setMidnaBindMode(0); + return 0; +} + +#endif diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index fcf43fa269..b3c9bc286e 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -116,6 +116,7 @@ public: static bool getTriPla(cM3dGPla* i_plane) { return dComIfG_Bgsp().GetTriPla(mGndCheck, i_plane); } static int getRoomId() { return dComIfG_Bgsp().GetRoomId(mGndCheck); } static int getPolyColor() { return dComIfG_Bgsp().GetPolyColor(mGndCheck); } + static int getPolyAtt0() { return dComIfG_Bgsp().GetPolyAtt0(mGndCheck); } static dBgS_ObjGndChk* getGroundCheck() { return &mGndCheck; } static f32 getGroundY() { return mGroundY; } }; @@ -607,7 +608,7 @@ s32 fopAcM_createWarpHole(const cXyz*, const csXyz*, int, u8, u8, u8); fopAc_ac_c* fopAcM_myRoomSearchEnemy(s8 roomNo); -s32 fopAcM_createDisappear(const fopAc_ac_c*, const cXyz*, u8, u8, u8); +s32 fopAcM_createDisappear(const fopAc_ac_c* i_actor, const cXyz* i_pos, u8 i_size, u8 i_type, u8 i_enemyID); void fopAcM_setCarryNow(fopAc_ac_c*, int); void fopAcM_cancelCarryNow(fopAc_ac_c*); s32 fopAcM_otoCheck(const fopAc_ac_c*, f32); @@ -728,76 +729,4 @@ inline bool fopAcM_CheckFoodStatus(const fopAc_ac_c* actor, fopAcM_FOOD status) return actor->field_0x567 == status; } -/* static inline int setMidnaBindEffect(fopEn_enemy_c* i_actorP, Z2CreatureEnemy* i_creatureP, cXyz* param_2, - cXyz* param_3) { - static GXColor e_prim[] = { - {0xFF, 0x78, 0x00, 0x00}, - {0xFF, 0x64, 0x78, 0x00}, - }; - static GXColor e_env[] = { - {0x5A, 0x2D, 0x2D, 0x00}, - {0x3C, 0x1E, 0x1E, 0x00}, - }; - - daPy_py_c* player = daPy_getPlayerActorClass(); - fopAc_ac_c* a_this = (fopAc_ac_c*)i_actorP; - - if (player->getMidnaActor() && player->checkWolfLock(a_this)) { - cXyz sp48; - - BOOL darkworld_check; - if (dKy_darkworld_check()) { - darkworld_check = 1; - } else { - darkworld_check = 0; - } - - if (i_actorP->getMidnaBindMode() == 0) { - i_actorP->setMidnaBindMode(1); - - csXyz sp68; - MTXCopy(player->getMidnaActor()->getMtxHairTop(), mDoMtx_stack_c::get()); - - cXyz sp54(nREG_F(8) + 100.0f, nREG_F(9), nREG_F(10)); - mDoMtx_stack_c::multVec(&sp54, &sp48); - - cXyz sp60 = sp48 - *param_2; - - sp68.y = cM_atan2s(sp60.x, sp60.z); - sp68.x = -cM_atan2s(sp60.y, JMAFastSqrt(sp60.x * sp60.x + sp60.z * sp60.z)); - sp68.z = 0; - - JPABaseEmitter* emitter = dComIfGp_particle_set( - 0x29B, param_2, &a_this->tevStr, &sp68, param_3, 0xFF, NULL, fopAcM_GetRoomNo(a_this), - &e_prim[darkworld_check], &e_env[darkworld_check], NULL); - - if (emitter != NULL) { - emitter->setGlobalParticleHeightScale((JREG_F(7) + 0.01f) * sp60.abs()); - } - - dComIfGp_particle_set(0x29C, param_2, &a_this->tevStr, &a_this->shape_angle, - param_3, 0xFF, NULL, fopAcM_GetRoomNo(a_this), &e_prim[darkworld_check], - &e_env[darkworld_check], NULL); - - i_creatureP->startCreatureSound(Z2SE_MIDNA_BIND_LOCK_ON, 0, -1); - } - - for (int i = 0; i < 3; i++) { - static u16 eff_id[] = {0x29D, 0x29E, 0x29F}; - - u32* bind_id = i_actorP->getMidnaBindID(i); - *bind_id = dComIfGp_particle_set(*bind_id, eff_id[i], param_2, &a_this->tevStr, - &a_this->shape_angle, param_3, 0xFF, NULL, fopAcM_GetRoomNo(a_this), - &e_prim[darkworld_check], &e_env[darkworld_check], NULL); - - } - - i_creatureP->startCreatureSound(Z2SE_MIDNA_BIND_LOCK_SUS, 0, -1); - return 1; - } - - i_actorP->setMidnaBindMode(0); - return 0; -} */ - #endif diff --git a/include/global.h b/include/global.h index cc16a8a504..a2617285db 100644 --- a/include/global.h +++ b/include/global.h @@ -43,4 +43,19 @@ inline BOOL checkEqual(s32 a, s32 b) { // hack to make strings with no references compile properly #define DEAD_STRING(s) OSReport(s) +#define UNK_BSS(name) \ + static u8 lit_##name[1 + 3 /* padding */]; + +#define UNK_REL_DATA \ + static u8 cNullVec__6Z2Calc[12] = { \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + }; \ + static u32 lit_1787[1 + 4 /* padding */] = { \ + 0x02000201, \ + 0x40080000, \ + 0x00000000, \ + 0x3FE00000, \ + 0x00000000, \ + }; + #endif diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 1f4fb6e50c..23a5b2b613 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -420,6 +420,7 @@ public: u16 getOldFrameStartJoint() { return mOldFrameStartJoint; } u16 getOldFrameEndJoint() { return mOldFrameEndJoint; } Quaternion* getOldFrameQuaternion(int i_no) { return &mOldFrameQuaternion[i_no]; } + f32 getOldFrameMorfCounter() { return mOldFrameMorfCounter; } private: /* 0x00 */ bool mOldFrameFlg; |
