diff --git a/include/d/actor/d_a_e_ww.h b/include/d/actor/d_a_e_ww.h index 33c9ae1f8b7..b0d7fa79bb0 100644 --- a/include/d/actor/d_a_e_ww.h +++ b/include/d/actor/d_a_e_ww.h @@ -1,6 +1,8 @@ #ifndef D_A_E_WW_H #define D_A_E_WW_H +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" #include "f_op/f_op_actor_mng.h" /** @@ -11,53 +13,221 @@ * @details * */ + +enum Action_ww { + /* 0x0 */ ACTION_EXECUTE_MASTER, + /* 0x1 */ ACTION_EXECUTE_WAIT, + /* 0x2 */ ACTION_EXECUTE_ATTACK, + /* 0x3 */ ACTION_EXECUTE_CHASE, + /* 0x4 */ ACTION_EXECUTE_DAMAGE, + /* 0x5 */ ACTION_EXECUTE_MOVE_OUT, + /* 0x6 */ ACTION_EXECUTE_WALK, +}; + +enum Animation { + /* 0x04 */ ANM_APPEAR = 4, + /* 0x05 */ ANM_BACKSTEP, + /* 0x06 */ ANM_DAMAGE, + /* 0x07 */ ANM_DEAD, + /* 0x08 */ ANM_JUMP_ATTACKA, + /* 0x09 */ ANM_JUMP_ATTACKB, + /* 0x0A */ ANM_JUMP_ATTACKC, + /* 0x0B */ ANM_RUN, + /* 0x0C */ ANM_SIDESTEP_LEFT, + /* 0x0D */ ANM_SIDESTEP_RIGHT, + /* 0x0E */ ANM_TURN, + /* 0x0F */ ANM_WAIT, + /* 0x10 */ ANM_WALK, +}; + class daE_WW_c : public fopEn_enemy_c { - /* 807E7748 */ void ctrlJoint(J3DJoint*, J3DModel*); - /* 807E7800 */ void JointCallBack(J3DJoint*, int); +public: + // daE_WW_c() {} + + /* 807E7748 */ int ctrlJoint(J3DJoint*, J3DModel*); + /* 807E7800 */ int JointCallBack(J3DJoint*, int); /* 807E784C */ void setHeadAngle(); - /* 807E79D4 */ void draw(); + /* 807E79D4 */ int draw(); /* 807E7ADC */ void setBck(int, u8, f32, f32); - /* 807E7B80 */ void checkBck(int); + /* 807E7B80 */ bool checkBck(int); /* 807E7BDC */ void setActionMode(int, int); /* 807E7C20 */ void damage_check(); /* 807E7E74 */ void setRandamNumber(); - /* 807E7FCC */ void getNearPlayerAngle(); + /* 807E7FCC */ s16 getNearPlayerAngle(); /* 807E804C */ void setGroundAngle(); - /* 807E830C */ void checkCreateBg(cXyz); - /* 807E8560 */ void checkAttackWall(); + /* 807E830C */ f32 checkCreateBg(cXyz); + /* 807E8560 */ int checkAttackWall(); /* 807E8624 */ void setBlurEffect(); /* 807E8700 */ void setAppearEffect(); - /* 807E8C54 */ void checkSideStep(); + /* 807E8C54 */ int checkSideStep(); /* 807E8EEC */ void createWolf(cXyz, u8); /* 807E905C */ void executeMaster(); /* 807E972C */ void executeWait(); - /* 807E99B8 */ void calcJumpSpeed(); + /* 807E99B8 */ int calcJumpSpeed(); /* 807E9C1C */ void executeAttack(); - /* 807EA474 */ void checkAttackStart(); + /* 807EA474 */ int checkAttackStart(); /* 807EA870 */ void executeChase(); /* 807EB650 */ void executeDamage(); - /* 807EB964 */ void checkMoveOut(); + /* 807EB964 */ int checkMoveOut(); /* 807EBAE0 */ void executeMoveOut(); - /* 807EC940 */ void checkWalkStart(); + /* 807EC940 */ int checkWalkStart(); /* 807ECE58 */ void executeWalk(); /* 807ED674 */ void eWW_posMoveF(); /* 807ED78C */ void action(); /* 807EDA78 */ void mtx_set(); /* 807EDB00 */ void cc_set(); - /* 807EDCC4 */ void execute(); - /* 807EDE8C */ void calcMoveDir(s16*, s16); - /* 807EE440 */ void _delete(); - /* 807EE4D4 */ void CreateHeap(); - /* 807EE63C */ void create(); + /* 807EDCC4 */ int execute(); + /* 807EDE8C */ int calcMoveDir(s16*, s16); + /* 807EE440 */ int _delete(); + /* 807EE4D4 */ int CreateHeap(); + /* 807EE63C */ int create(); + + u8 isAttack() { return field_0x756; } + void setAttack() { mAttackActionID = 10; } + f32 const getSpeedF() { return speedF; } + private: - /* 0x5ac */ u8 field_0x5ac[0xec8 - 0x5ac]; + /* 0x5AC */ request_of_phase_process_class mPhase; + // /* 0x5AC */ char pad5AC[8]; + /* 0x5B4 */ mDoExt_McaMorfSO* mpMorf; + /* 0x5B8 */ Z2CreatureEnemy mSound; + // /* 0x5B8 */ char pad5B8[0xA4]; + /* 0x65C */ cXyz field_0x65C; // Under ground position ? see jump speed calc + // /* 0x660 */ f32 field_0x660; + // /* 0x664 */ f32 field_0x664; + /* 0x668 */ cXyz field_0x668; + // /* 0x66C */ f32 field_0x66C; + // /* 0x670 */ f32 field_0x670; + /* 0x674 */ csXyz field_0x674; // Probably csXyz + // /* 0x676 */ char pad676[2]; + // /* 0x678 */ s16 field_0x678; + /* 0x67A */ s16 field_0x67A; // Head angle x ? csXyz ??? + /* 0x67C */ s16 field_0x67C; // Head angle y ? + /* 0x67E */ s16 field_0x67E; // Head angle z ? + /* 0x680 */ fpc_ProcID mChildID[10]; + // /* 0x684 */ char pad684[0x24]; + /* 0x6A8 */ f32 field_0x6A8; // Radius draw circle debug ? + /* 0x6AC */ f32 field_0x6AC; // Off set draw circle debug ?? + /* 0x6B0 */ f32 mDistCheckModifier; + /* 0x6B4 */ u8 field_0x6B4; // Arg0 ?? + /* 0x6B5 */ u8 field_0x6B5; + /* 0x6B6 */ u8 field_0x6B6; + /* 0x6B7 */ u8 field_0x6B7; + /* 0x6B8 */ s32 mActionID; + /* 0x6BC */ s32 mAttackActionID; // Which wolf does action ? 1 jump ? 0 init ?, 26 Hide ? check sound action just before, check execute chase for cases in switch + /* 0x6C0 */ int field_0x6C0; // Side step ? 0-> step left, 1 step right + /* 0x6C4 */ s32 field_0x6C4; // Active index for the int arrays later ? Change to int ? + /* 0x6C8 */ s32 field_0x6C8; + /* 0x6CC */ s16 field_0x6CC; // angleY storage ? + /* 0x6CE */ s16 field_0x6CE; + /* 0x6D0 */ int field_0x6D0; + /* 0x6D4 */ int field_0x6D4[10]; // Existing wolf ? + /* 0x6FC */ int field_0x6FC[10]; + /* 0x724 */ u16 field_0x724; // Linked with getting damage to link + // /* 0x726 */ char pad726[2]; + /* 0x728 */ int field_0x728; + /* 0x72C */ int field_0x72C; + /* 0x730 */ int field_0x730; + /* 0x734 */ int field_0x734; // Attack interval ? + /* 0x738 */ int field_0x738; + /* 0x73C */ int field_0x73C; + /* 0x740 */ int field_0x740; + /* 0x744 */ char pad744[4]; + /* 0x748 */ int field_0x748; + /* 0x74C */ int field_0x74C; + /* 0x750 */ char pad750[2]; + /* 0x752 */ s16 field_0x752; + /* 0x754 */ s16 field_0x754; + /* 0x756 */ u8 field_0x756; + /* 0x757 */ u8 field_0x757; + /* 0x758 */ u8 field_0x758; + /* 0x759 */ u8 field_0x759; + /* 0x75A */ u8 field_0x75A; + /* 0x75B */ u8 field_0x75B; // Used in posMoveF + /* 0x75C */ u8 field_0x75C; + /* 0x75D */ s8 field_0x75D; + /* 0x75E */ char pad75E[2]; /* maybe part of field_0x75D[3]? */ + /* 0x760 */ dBgS_AcchCir mAcchCir; + // /* 0x760 */ char pad760[0x40]; + /* 0x7A0 */ dBgS_ObjAcch mAcch; + // /* 0x7A0 */ char pad7A0[0x2C]; + // /* 0x7CC */ s32 field_0x7CC; + // /* 0x7D0 */ char pad7D0[0x68]; /* maybe part of field_0x7CC[0x1B]? */ + // /* 0x838 */ f32 field_0x838; + // /* 0x83C */ char pad83C[0x54]; /* maybe part of field_0x838[0x16]? */ + // /* 0x890 */ cBgS_PolyInfo field_0x890; + // /* 0x890 */ char pad890[0xE8]; + // /* 0x978 */ cXyz field_0x978; + // /* 0x978 */ char pad978[0x18]; + // /* 0x990 */ cXyz* field_0x990; + /* 0x994 */ dCcD_Stts mCcStts; + // /* 0x994 */ char pad994[0x20]; + /* 0x9B4 */ dCcD_Sph mSph1[2]; + // /* 0x9B4 */ char pad9B4[0x44]; + // /* 0x9F8 */ cXyz *field_0x9F8; + // /* 0x9FC */ char pad9FC[0xDC]; /* maybe part of field_0x9F8[0x38]? */ + // /* 0xAD8 */ cM3dGSph field_0xAD8; + // /* 0xAD8 */ char padAD8[0x14]; + // /* 0xAEC */ cCcD_Obj field_0xAEC; + // /* 0xAEC */ char padAEC[0x44]; + // /* 0xB30 */ cXyz *field_0xB30; + // /* 0xB34 */ char padB34[0x14]; /* maybe part of field_0xB30[6]? */ + // /* 0xB48 */ s32 field_0xB48; + // /* 0xB4C */ char padB4C[0xC4]; /* maybe part of field_0xB48[0x32]? */ + // /* 0xC10 */ cM3dGSph field_0xC10; + // /* 0xC10 */ char padC10[0x14]; + /* 0xC24 */ dCcD_Sph mSph2[2]; + // /* 0xC24 */ char padC24[0x18]; + // /* 0xC3C */ s32 field_0xC3C; + // /* 0xC40 */ char padC40[0x28]; /* maybe part of field_0xC3C[0xB]? */ + // /* 0xC68 */ cXyz *field_0xC68; + // /* 0xC6C */ char padC6C[0x54]; /* maybe part of field_0xC68[0x16]? */ + // /* 0xCC0 */ s32 field_0xCC0; + // /* 0xCC4 */ char padCC4[0x84]; /* maybe part of field_0xCC0[0x22]? */ + // /* 0xD48 */ cM3dGSph field_0xD48; + // /* 0xD48 */ char padD48[0x14]; + // /* 0xD5C */ dCcD_GObjInf field_0xD5C; + // /* 0xD5C */ char padD5C[0x18]; + // /* 0xD74 */ s32 field_0xD74; + // /* 0xD78 */ char padD78[0x28]; /* maybe part of field_0xD74[0xB]? */ + // /* 0xDA0 */ cXyz *field_0xDA0; + // /* 0xDA4 */ char padDA4[0x54]; /* maybe part of field_0xDA0[0x16]? */ + // /* 0xDF8 */ s32 field_0xDF8; + // /* 0xDFC */ char padDFC[0x84]; /* maybe part of field_0xDF8[0x22]? */ + // /* 0xE80 */ cM3dGSph field_0xE80; + // /* 0xE80 */ char padE80[0x14]; + /* 0xE94 */ cCcD_Obj* mpHitObj; // Probably mCollider + /* 0xE98 */ char padE98[4]; + /* 0xE9C */ Z2CreatureEnemy* mpSound; + /* 0xEA0 */ char padEA0[2]; + /* 0xEA2 */ s16 field_0xEA2; + /* 0xEA4 */ char padEA4[0xC]; /* maybe part of field_0xEA2[7]? */ + /* 0xEB0 */ u16 field_0xEB0; + /* 0xEB2 */ s8 field_0xEB2; + /* 0xEB3 */ s8 field_0xEB3; + /* 0xEB4 */ char padEB4[0xC]; /* maybe part of field_0xEB3[0xD]? */ + /* 0xEC0 */ u32 mParticleKey; // mParticleKey ?? + /* 0xEC4 */ u8 field_0xEC4; }; STATIC_ASSERT(sizeof(daE_WW_c) == 0xec8); -class daE_WW_HIO_c { +class daE_WW_HIO_c : public JORReflexible { +public: /* 807E76EC */ daE_WW_HIO_c(); - /* 807EEEBC */ ~daE_WW_HIO_c(); + /* 807EEEBC */ virtual ~daE_WW_HIO_c() {}; + + void genMessage(JORMContext*); + + /* 0x04 */ s8 field_0x04; + /* 0x08 */ f32 mModelSize; + /* 0x0C */ f32 mAttackInterval; + /* 0x10 */ f32 mRunAnm; + /* 0x14 */ f32 mWalkAnm; + /* 0x18 */ f32 mRunSpeed; + /* 0x1C */ f32 mWolfEscapeSpeed; + /* 0x20 */ f32 mLinkEscapeSpeed; + /* 0x24 */ u8 mMoveRangeDebugDisp; }; diff --git a/src/d/actor/d_a_e_ww.cpp b/src/d/actor/d_a_e_ww.cpp index 48bc23d4527..29683a75e28 100644 --- a/src/d/actor/d_a_e_ww.cpp +++ b/src/d/actor/d_a_e_ww.cpp @@ -8,617 +8,135 @@ #include "d/actor/d_a_e_ww.h" #include "dol2asm.h" #include "f_op/f_op_actor_enemy.h" +#include "Z2AudioLib/Z2Instances.h" +#include "d/d_debug_viewer.h" +#include "d/d_cc_uty.h" +#include - -// -// Forward References: -// - -extern "C" void __ct__12daE_WW_HIO_cFv(); -extern "C" void ctrlJoint__8daE_WW_cFP8J3DJointP8J3DModel(); -extern "C" void JointCallBack__8daE_WW_cFP8J3DJointi(); -extern "C" void setHeadAngle__8daE_WW_cFv(); -extern "C" void draw__8daE_WW_cFv(); -extern "C" static void daE_WW_Draw__FP8daE_WW_c(); -extern "C" void setBck__8daE_WW_cFiUcff(); -extern "C" void checkBck__8daE_WW_cFi(); -extern "C" void setActionMode__8daE_WW_cFii(); -extern "C" void damage_check__8daE_WW_cFv(); -extern "C" void setRandamNumber__8daE_WW_cFv(); -extern "C" void getNearPlayerAngle__8daE_WW_cFv(); -extern "C" void setGroundAngle__8daE_WW_cFv(); -extern "C" void checkCreateBg__8daE_WW_cF4cXyz(); -extern "C" void __dt__8cM3dGPlaFv(); -extern "C" void checkAttackWall__8daE_WW_cFv(); -extern "C" void setBlurEffect__8daE_WW_cFv(); -extern "C" void setAppearEffect__8daE_WW_cFv(); -extern "C" void __dt__14dBgS_ObjGndChkFv(); -extern "C" static void s_child_ww__FPvPv(); -extern "C" static void s_obj_sub__FPvPv(); -extern "C" void checkSideStep__8daE_WW_cFv(); -extern "C" static void s_attack_ww__FPvPv(); -extern "C" void createWolf__8daE_WW_cF4cXyzUc(); -extern "C" void executeMaster__8daE_WW_cFv(); -extern "C" void executeWait__8daE_WW_cFv(); -extern "C" void calcJumpSpeed__8daE_WW_cFv(); -extern "C" void executeAttack__8daE_WW_cFv(); -extern "C" void checkAttackStart__8daE_WW_cFv(); -extern "C" void executeChase__8daE_WW_cFv(); -extern "C" void executeDamage__8daE_WW_cFv(); -extern "C" void checkMoveOut__8daE_WW_cFv(); -extern "C" void executeMoveOut__8daE_WW_cFv(); -extern "C" void checkWalkStart__8daE_WW_cFv(); -extern "C" void executeWalk__8daE_WW_cFv(); -extern "C" void eWW_posMoveF__8daE_WW_cFv(); -extern "C" void action__8daE_WW_cFv(); -extern "C" void mtx_set__8daE_WW_cFv(); -extern "C" void cc_set__8daE_WW_cFv(); -extern "C" void execute__8daE_WW_cFv(); -extern "C" static void daE_WW_Execute__FP8daE_WW_c(); -extern "C" void calcMoveDir__8daE_WW_cFPss(); -extern "C" static bool daE_WW_IsDelete__FP8daE_WW_c(); -extern "C" void _delete__8daE_WW_cFv(); -extern "C" static void daE_WW_Delete__FP8daE_WW_c(); -extern "C" void CreateHeap__8daE_WW_cFv(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" void create__8daE_WW_cFv(); -extern "C" void __dt__8dCcD_SphFv(); -extern "C" void __ct__8dCcD_SphFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" static void daE_WW_Create__FP8daE_WW_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__12daE_WW_HIO_cFv(); -extern "C" void __sinit_d_a_e_ww_cpp(); -extern "C" static void func_807EF2CC(); -extern "C" static void func_807EF2D4(); -extern "C" static void func_807EF2DC(); -extern "C" static void func_807EF2E4(); -extern "C" static void func_807EF2EC(); -extern "C" void __dt__4cXyzFv(); -extern "C" void checkNowWolf__9daPy_py_cFv(); -extern "C" extern char const* const d_a_e_ww__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoMtx_ZrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void scaleM__14mDoMtx_stack_cFfff(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff(); -extern "C" void play__16mDoExt_McaMorfSOFUlSc(); -extern "C" void entryDL__16mDoExt_McaMorfSOFv(); -extern "C" void modelCalc__16mDoExt_McaMorfSOFv(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAc_IsActor__FPv(); -extern "C" void fopAcM_SearchByID__FUiPP10fopAc_ac_c(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_createChild__FsUiUlPC4cXyziPC5csXyzPC4cXyzScPFPv_i(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff(); -extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz(); -extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_searchActorDistance__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_createDisappear__FPC10fopAc_ac_cPC4cXyzUcUcUc(); -extern "C" void fopAcM_otherBgCheck__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fpcEx_Search__FPFPvPv_PvPv(); -extern "C" void fpcM_IsCreating__FUi(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void -dComIfGd_setShadow__FUlScP8J3DModelP4cXyzffffR13cBgS_PolyInfoP12dKy_tevstr_csfP9_GXTexObj(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void getEmitter__Q213dPa_control_c7level_cFUl(); -extern "C" void setHitMark__13dPa_control_cFUsP10fopAc_ac_cPC4cXyzPC5csXyzPC4cXyzUl(); -extern "C" void -set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void -setPoly__13dPa_control_cFUsR13cBgS_PolyInfoPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyziP18dPa_levelEcallBackScPC4cXyz(); -extern "C" void -set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); -extern "C" void LineCross__4cBgSFP11cBgS_LinChk(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); -extern "C" void GetSpecialCode__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void GetPolyAtt0__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -extern "C" void __dt__18dBgS_ObjGndChk_AllFv(); -extern "C" void __ct__11dBgS_LinChkFv(); -extern "C" void __dt__11dBgS_LinChkFv(); -extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Move__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void GetTgHitObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void cc_at_check__FP10fopAc_ac_cP11dCcU_AtInfo(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void dKy_darkworld_check__Fv(); -extern "C" void GetAc__8cCcD_ObjFv(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __ct__5csXyzFsss(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rnd__Fv(); -extern "C" void cM_rndF__Ff(); -extern "C" void cM_rndFX__Ff(); -extern "C" void SetPos__11cBgS_GndChkFPC3Vec(); -extern "C" void SetPos__11cBgS_GndChkFPC4cXyz(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void SetR__8cM3dGSphFf(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz(); -extern "C" void cLib_offsetPos__FP4cXyzPC4cXyzsPC4cXyz(); -extern "C" void func_80280808(); -extern "C" void __ct__15Z2CreatureEnemyFv(); -extern "C" void init__15Z2CreatureEnemyFP3VecP3VecUcUc(); -extern "C" void setLinkSearch__15Z2CreatureEnemyFb(); -extern "C" void setEnemyName__15Z2CreatureEnemyFPCc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void checkPass__12J3DFrameCtrlFf(); -extern "C" void __construct_array(); -extern "C" void _savegpr_19(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_19(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__18dBgS_ObjGndChk_All[12]; -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" u8 mCurrentMtx__6J3DSys[48]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" u8 m_midnaActor__9daPy_py_c[4]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - /* ############################################################################################## */ -/* 807EF79C-807EF7A0 00002C 0004+00 0/3 0/0 0/0 .rodata @3926 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3926 = 150.0f; -COMPILER_STRIP_GATE(0x807EF79C, &lit_3926); -#pragma pop -/* 807EF7A0-807EF7A4 000030 0004+00 0/1 0/0 0/0 .rodata @3927 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3927 = 6.0f / 5.0f; -COMPILER_STRIP_GATE(0x807EF7A0, &lit_3927); -#pragma pop - -/* 807EF7A4-807EF7A8 000034 0004+00 0/3 0/0 0/0 .rodata @3928 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3928 = 0.5f; -COMPILER_STRIP_GATE(0x807EF7A4, &lit_3928); -#pragma pop - -/* 807EF7A8-807EF7AC 000038 0004+00 0/4 0/0 0/0 .rodata @3929 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3929 = 40.0f; -COMPILER_STRIP_GATE(0x807EF7A8, &lit_3929); -#pragma pop - -/* 807EF7AC-807EF7B0 00003C 0004+00 0/3 0/0 0/0 .rodata @3930 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3930 = 25.0f; -COMPILER_STRIP_GATE(0x807EF7AC, &lit_3930); -#pragma pop - -/* 807EF904-807EF944 000038 0040+00 1/1 0/0 0/0 .data cc_ww_src__22@unnamed@d_a_e_ww_cpp@ - */ -SECTION_DATA static u8 data_807EF904[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, -}; - -/* 807EF944-807EF984 000078 0040+00 1/1 0/0 0/0 .data cc_ww_tg_src__22@unnamed@d_a_e_ww_cpp@ */ -SECTION_DATA static u8 data_807EF944[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, -}; - -/* 807EF984-807EF9F0 -00001 006C+00 1/1 0/0 0/0 .data @5116 */ -SECTION_DATA static void* lit_5116[27] = { - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x58), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x9C), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x1F0), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x2CC), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x348), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x464), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x5C0), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x624), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x7E8), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x6BC), - (void*)(((char*)executeAttack__8daE_WW_cFv) + 0x6BC), -}; - -/* 807EF9F0-807EFA64 -00001 0074+00 1/1 0/0 0/0 .data @6010 */ -SECTION_DATA static void* lit_6010[29] = { - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0x70), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xA0), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0x5C8), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0x604), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0x8F4), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0x96C), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xC64), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xE40), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xD3C), - (void*)(((char*)executeMoveOut__8daE_WW_cFv) + 0xDB8), -}; - -/* 807EFA64-807EFA80 -00001 001C+00 1/1 0/0 0/0 .data @6441 */ -SECTION_DATA static void* lit_6441[7] = { - (void*)(((char*)action__8daE_WW_cFv) + 0x7C), (void*)(((char*)action__8daE_WW_cFv) + 0x88), - (void*)(((char*)action__8daE_WW_cFv) + 0x94), (void*)(((char*)action__8daE_WW_cFv) + 0xA4), - (void*)(((char*)action__8daE_WW_cFv) + 0xB4), (void*)(((char*)action__8daE_WW_cFv) + 0xC4), - (void*)(((char*)action__8daE_WW_cFv) + 0xD0), -}; - -/* 807EFA80-807EFAA0 -00001 0020+00 1/0 0/0 0/0 .data l_daE_WW_Method */ -static actor_method_class l_daE_WW_Method = { - (process_method_func)daE_WW_Create__FP8daE_WW_c, - (process_method_func)daE_WW_Delete__FP8daE_WW_c, - (process_method_func)daE_WW_Execute__FP8daE_WW_c, - (process_method_func)daE_WW_IsDelete__FP8daE_WW_c, - (process_method_func)daE_WW_Draw__FP8daE_WW_c, -}; - -/* 807EFAA0-807EFAD0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_WW */ -extern actor_process_profile_definition g_profile_E_WW = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_E_WW, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daE_WW_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 209, // mPriority - &l_daE_WW_Method, // sub_method - 0x00044100, // mStatus - fopAc_ENEMY_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 807EFAD0-807EFADC 000204 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; - -/* 807EFADC-807EFAE8 000210 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 807EFAE8-807EFAF4 00021C 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 807EFAF4-807EFB00 000228 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 807EFB00-807EFB0C 000234 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 807EFB0C-807EFB30 000240 0024+00 2/2 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_807EF2EC, - (void*)NULL, - (void*)NULL, - (void*)func_807EF2E4, -}; - -/* 807EFB30-807EFB60 000264 0030+00 2/2 0/0 0/0 .data __vt__14dBgS_ObjGndChk */ -SECTION_DATA extern void* __vt__14dBgS_ObjGndChk[12] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14dBgS_ObjGndChkFv, - (void*)NULL, - (void*)NULL, - (void*)func_807EF2CC, - (void*)NULL, - (void*)NULL, - (void*)func_807EF2DC, - (void*)NULL, - (void*)NULL, - (void*)func_807EF2D4, -}; - -/* 807EFB60-807EFB6C 000294 000C+00 5/5 0/0 0/0 .data __vt__8cM3dGPla */ -SECTION_DATA extern void* __vt__8cM3dGPla[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGPlaFv, -}; - -/* 807EFB6C-807EFB78 0002A0 000C+00 2/2 0/0 0/0 .data __vt__12daE_WW_HIO_c */ -SECTION_DATA extern void* __vt__12daE_WW_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12daE_WW_HIO_cFv, -}; - -/* 807E76EC-807E7748 0000EC 005C+00 1/1 0/0 0/0 .text __ct__12daE_WW_HIO_cFv */ -daE_WW_HIO_c::daE_WW_HIO_c() { - // NONMATCHING -} - -/* 807E7748-807E7800 000148 00B8+00 1/1 0/0 0/0 .text ctrlJoint__8daE_WW_cFP8J3DJointP8J3DModel */ -void daE_WW_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { - // NONMATCHING -} - -/* 807E7800-807E784C 000200 004C+00 1/1 0/0 0/0 .text JointCallBack__8daE_WW_cFP8J3DJointi */ -void daE_WW_c::JointCallBack(J3DJoint* param_0, int param_1) { - // NONMATCHING -} - -/* 807E784C-807E79D4 00024C 0188+00 1/1 0/0 0/0 .text setHeadAngle__8daE_WW_cFv */ -void daE_WW_c::setHeadAngle() { - // NONMATCHING -} +namespace { + /* 807EF904-807EF944 000038 0040+00 1/1 0/0 0/0 .data cc_ww_src__22@unnamed@d_a_e_ww_cpp@ + */ + dCcD_SrcSph cc_ww_src = { + { + {0x0, {{0x400, 0x1, 0xC}, {0x0, 0x0}, 0x75}}, // mObj + {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr + }; + + /* 807EF944-807EF984 000078 0040+00 1/1 0/0 0/0 .data cc_ww_tg_src__22@unnamed@d_a_e_ww_cpp@ */ + dCcD_SrcSph cc_ww_tg_src = { + { + {0x0, {{0x0, 0x1, 0x0}, {0xD8FBFDFF, 0x43}, 0x0}}, // mObj + {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr + }; +} // namespace /* ############################################################################################## */ -/* 807EF7B0-807EF7B4 000040 0004+00 0/3 0/0 0/0 .rodata @4038 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4038 = 700.0f; -COMPILER_STRIP_GATE(0x807EF7B0, &lit_4038); -#pragma pop +/* 807EFB80-807EFB84 000008 0001+03 1/1 0/0 0/0 .bss @1109 */ +// static u8 lit_1109[1 + 3 /* padding */]; -/* 807E79D4-807E7ABC 0003D4 00E8+00 1/1 0/0 0/0 .text draw__8daE_WW_cFv */ -void daE_WW_c::draw() { - // NONMATCHING -} +// /* 807EFB84-807EFB88 00000C 0001+03 0/0 0/0 0/0 .bss @1107 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1107[1 + 3 /* padding */]; +// #pragma pop -/* 807E7ABC-807E7ADC 0004BC 0020+00 1/0 0/0 0/0 .text daE_WW_Draw__FP8daE_WW_c */ -static void daE_WW_Draw(daE_WW_c* param_0) { - // NONMATCHING -} +// /* 807EFB88-807EFB8C 000010 0001+03 0/0 0/0 0/0 .bss @1105 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1105[1 + 3 /* padding */]; +// #pragma pop -/* ############################################################################################## */ -/* 807EF7B4-807EF7B8 000044 0004+00 1/1 0/0 0/0 .rodata @4048 */ -SECTION_RODATA static f32 const lit_4048 = -1.0f; -COMPILER_STRIP_GATE(0x807EF7B4, &lit_4048); +// /* 807EFB8C-807EFB90 000014 0001+03 0/0 0/0 0/0 .bss @1104 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1104[1 + 3 /* padding */]; +// #pragma pop -/* 807EF8B8-807EF8B8 000148 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_807EF8B8 = "E_WW"; -#pragma pop +// /* 807EFB90-807EFB94 000018 0001+03 0/0 0/0 0/0 .bss @1099 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1099[1 + 3 /* padding */]; +// #pragma pop -/* 807E7ADC-807E7B80 0004DC 00A4+00 6/6 0/0 0/0 .text setBck__8daE_WW_cFiUcff */ -void daE_WW_c::setBck(int param_0, u8 param_1, f32 param_2, f32 param_3) { - // NONMATCHING -} +// /* 807EFB94-807EFB98 00001C 0001+03 0/0 0/0 0/0 .bss @1097 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1097[1 + 3 /* padding */]; +// #pragma pop -/* 807E7B80-807E7BDC 000580 005C+00 1/1 0/0 0/0 .text checkBck__8daE_WW_cFi */ -void daE_WW_c::checkBck(int param_0) { - // NONMATCHING -} +// /* 807EFB98-807EFB9C 000020 0001+03 0/0 0/0 0/0 .bss @1095 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1095[1 + 3 /* padding */]; +// #pragma pop -/* ############################################################################################## */ -/* 807EF7B8-807EF7BC 000048 0004+00 1/3 0/0 0/0 .rodata @4066 */ -SECTION_RODATA static f32 const lit_4066 = -5.0f; -COMPILER_STRIP_GATE(0x807EF7B8, &lit_4066); +// /* 807EFB9C-807EFBA0 000024 0001+03 0/0 0/0 0/0 .bss @1094 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1094[1 + 3 /* padding */]; +// #pragma pop -/* 807E7BDC-807E7C20 0005DC 0044+00 11/11 0/0 0/0 .text setActionMode__8daE_WW_cFii */ -void daE_WW_c::setActionMode(int param_0, int param_1) { - // NONMATCHING -} +// /* 807EFBA0-807EFBA4 000028 0001+03 0/0 0/0 0/0 .bss @1057 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1057[1 + 3 /* padding */]; +// #pragma pop -/* ############################################################################################## */ -/* 807EF7BC-807EF7C0 00004C 0004+00 0/2 0/0 0/0 .rodata @4138 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4138 = -10.0f; -COMPILER_STRIP_GATE(0x807EF7BC, &lit_4138); -#pragma pop +// /* 807EFBA4-807EFBA8 00002C 0001+03 0/0 0/0 0/0 .bss @1055 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1055[1 + 3 /* padding */]; +// #pragma pop -/* 807EF7C0-807EF7C4 000050 0004+00 0/2 0/0 0/0 .rodata @4139 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4139 = -20.0f; -COMPILER_STRIP_GATE(0x807EF7C0, &lit_4139); -#pragma pop +// /* 807EFBA8-807EFBAC 000030 0001+03 0/0 0/0 0/0 .bss @1053 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1053[1 + 3 /* padding */]; +// #pragma pop -/* 807E7C20-807E7E74 000620 0254+00 1/1 0/0 0/0 .text damage_check__8daE_WW_cFv */ -void daE_WW_c::damage_check() { - // NONMATCHING -} +// /* 807EFBAC-807EFBB0 000034 0001+03 0/0 0/0 0/0 .bss @1052 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1052[1 + 3 /* padding */]; +// #pragma pop -/* ############################################################################################## */ -/* 807EF7C4-807EF7C8 000054 0004+00 0/1 0/0 0/0 .rodata @4166 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4166 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x807EF7C4, &lit_4166); -#pragma pop +// /* 807EFBB0-807EFBB4 000038 0001+03 0/0 0/0 0/0 .bss @1014 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1014[1 + 3 /* padding */]; +// #pragma pop -/* 807EF7C8-807EF7CC 000058 0004+00 0/1 0/0 0/0 .rodata @4167 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4167 = 8.0f; -COMPILER_STRIP_GATE(0x807EF7C8, &lit_4167); -#pragma pop +// /* 807EFBB4-807EFBB8 00003C 0001+03 0/0 0/0 0/0 .bss @1012 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1012[1 + 3 /* padding */]; +// #pragma pop -/* 807EF7CC-807EF7D0 00005C 0004+00 0/8 0/0 0/0 .rodata @4168 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4168 = 3.0f; -COMPILER_STRIP_GATE(0x807EF7CC, &lit_4168); -#pragma pop +// /* 807EFBB8-807EFBBC 000040 0001+03 0/0 0/0 0/0 .bss @1010 */ +// #pragma push +// #pragma force_active on +// static u8 lit_1010[1 + 3 /* padding */]; +// #pragma pop -/* 807EF7D0-807EF7D8 000060 0008+00 1/5 0/0 0/0 .rodata @4170 */ -SECTION_RODATA static u8 const lit_4170[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x807EF7D0, &lit_4170); - -/* 807E7E74-807E7FCC 000874 0158+00 1/1 0/0 0/0 .text setRandamNumber__8daE_WW_cFv */ -void daE_WW_c::setRandamNumber() { - // NONMATCHING -} - -/* 807E7FCC-807E804C 0009CC 0080+00 2/2 0/0 0/0 .text getNearPlayerAngle__8daE_WW_cFv */ -void daE_WW_c::getNearPlayerAngle() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 807EF7D8-807EF7DC 000068 0004+00 1/6 0/0 0/0 .rodata @4248 */ -SECTION_RODATA static f32 const lit_4248 = -1000000000.0f; -COMPILER_STRIP_GATE(0x807EF7D8, &lit_4248); - -/* 807EF7DC-807EF7E0 00006C 0004+00 0/1 0/0 0/0 .rodata @4249 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4249 = 50.0f; -COMPILER_STRIP_GATE(0x807EF7DC, &lit_4249); -#pragma pop - -/* 807E804C-807E830C 000A4C 02C0+00 1/1 0/0 0/0 .text setGroundAngle__8daE_WW_cFv */ -void daE_WW_c::setGroundAngle() { - // NONMATCHING -} - -/* 807E830C-807E8518 000D0C 020C+00 3/3 0/0 0/0 .text checkCreateBg__8daE_WW_cF4cXyz */ -void daE_WW_c::checkCreateBg(cXyz param_0) { - // NONMATCHING -} - -/* 807E8518-807E8560 000F18 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */ -// cM3dGPla::~cM3dGPla() { -extern "C" void __dt__8cM3dGPlaFv() { - // NONMATCHING -} - -/* 807E8560-807E8624 000F60 00C4+00 3/3 0/0 0/0 .text checkAttackWall__8daE_WW_cFv */ -void daE_WW_c::checkAttackWall() { - // NONMATCHING -} - -/* 807E8624-807E8700 001024 00DC+00 1/1 0/0 0/0 .text setBlurEffect__8daE_WW_cFv */ -void daE_WW_c::setBlurEffect() { - // NONMATCHING -} - -/* 807E8700-807E8A08 001100 0308+00 2/2 0/0 0/0 .text setAppearEffect__8daE_WW_cFv */ -void daE_WW_c::setAppearEffect() { - // NONMATCHING -} - -/* 807E8A08-807E8A80 001408 0078+00 4/3 0/0 0/0 .text __dt__14dBgS_ObjGndChkFv */ -// dBgS_ObjGndChk::~dBgS_ObjGndChk() { -extern "C" void __dt__14dBgS_ObjGndChkFv() { - // NONMATCHING -} +// /* 807EFBBC-807EFBC0 -00001 0004+00 2/2 0/0 0/0 .bss None */ +// /* 807EFBBC 0001+00 data_807EFBBC @1009 */ +// /* 807EFBBD 0003+00 data_807EFBBD None */ +// static u8 struct_807EFBBC[4]; /* 807EFBC0-807EFBCC 000048 000C+00 0/1 0/0 0/0 .bss @3921 */ #pragma push @@ -627,351 +145,1180 @@ static u8 lit_3921[12]; #pragma pop /* 807EFBCC-807EFBF4 000054 0028+00 7/8 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[40]; +static daE_WW_HIO_c l_HIO; /* 807EFBF4-807EFBF8 00007C 0004+00 2/2 0/0 0/0 .bss None */ -static u8 data_807EFBF4[4]; +static u8 l_HIOInit; +static u8 lbl_237_bss_30; // What name for this variable ? -/* 807E8A80-807E8B2C 001480 00AC+00 1/1 0/0 0/0 .text s_child_ww__FPvPv */ -static void s_child_ww(void* param_0, void* param_1) { - // NONMATCHING +/* 807E76EC-807E7748 0000EC 005C+00 1/1 0/0 0/0 .text __ct__12daE_WW_HIO_cFv */ +daE_WW_HIO_c::daE_WW_HIO_c() { + field_0x04 = -1; + mModelSize = 1.0f; + mAttackInterval = 150.0f; + mRunAnm = 1.2f; + mWalkAnm = 0.5f; + mRunSpeed = 40.0f; + mWolfEscapeSpeed = 25.0f; + mLinkEscapeSpeed = 40.0f; + mMoveRangeDebugDisp = 0; +} + +#ifdef DEBUG +void daE_WW_HIO_c::genMessage(JORMContext* mctx) { + mctx->genLabel("ホワイトウルフォス", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("モデルサイズ", &mModelSize, 0.0f, 10.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("攻撃間隔", &mAttackInterval, 0.0f, 2000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("走りアニメーション", &mRunAnm, 0.0f, 10.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("歩きアニメーション", &mWalkAnm, 0.0f, 10.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("走る速度", &mRunSpeed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("狼から逃亡速度", &mWolfEscapeSpeed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("リンクから逃亡速度", &mLinkEscapeSpeed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genCheckBox("移動範囲デバック表示", &mMoveRangeDebugDisp, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); +} +#endif + +/* 807E7748-807E7800 000148 00B8+00 1/1 0/0 0/0 .text ctrlJoint__8daE_WW_cFP8J3DJointP8J3DModel */ +int daE_WW_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { + J3DJoint* _joint = i_joint; + + int jnt_no = _joint->getJntNo();; + mDoMtx_stack_c::copy(i_model->getAnmMtx(jnt_no)); + + switch (jnt_no) { + case 3: + case 4: + mDoMtx_stack_c::YrotM(field_0x67C); + mDoMtx_stack_c::ZrotM(field_0x67E); + } + + i_model->setAnmMtx(jnt_no, mDoMtx_stack_c::get()); + cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + + return 1; +} + +/* 807E7800-807E784C 000200 004C+00 1/1 0/0 0/0 .text JointCallBack__8daE_WW_cFP8J3DJointi */ +int daE_WW_c::JointCallBack(J3DJoint* i_joint, int param_1) { + if (param_1 == 0) { + J3DModel* model_p = j3dSys.getModel(); + daE_WW_c* i_this = reinterpret_cast(model_p->getUserArea()); + if (i_this != NULL) { + i_this->ctrlJoint(i_joint, model_p); + } + } + return 1; +} + +/* 807E784C-807E79D4 00024C 0188+00 1/1 0/0 0/0 .text setHeadAngle__8daE_WW_cFv */ +void daE_WW_c::setHeadAngle() { + cXyz player_eye_pos = daPy_getPlayerActorClass()->eyePos; + cXyz temp_r1; // Zero position ? effpos effective pos ? + if (mActionID != ACTION_EXECUTE_MASTER) { + if (field_0x75A != 0) { + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::multVecZero(&temp_r1); + s16 var_r29 = cLib_targetAngleY(&temp_r1, &player_eye_pos) - shape_angle.y; + if (var_r29 > 0x4000) { + var_r29 = 0x4000; + } + if (var_r29 < -0x4000) { + var_r29 = -0x4000; + } + cLib_addCalcAngleS(&field_0x67C, (int)var_r29/2, 4, 0x400, 0x100); + s16 var_r28 = cLib_targetAngleX(&temp_r1, &player_eye_pos) - shape_angle.x; + if (var_r28 > 0x3000) { + var_r28 = 0x3000; + } + if (var_r28 < -0x3000) { + var_r28 = -0x3000; + } + cLib_addCalcAngleS(&field_0x67A, (int)var_r28/2, 4, 0x400, 0x100); + return; + } + cLib_addCalcAngleS(&field_0x67C, 0, 4, 0x400, 0x100); + cLib_addCalcAngleS(&field_0x67A, 0, 4, 0x400, 0x100); + } +} + +/* ############################################################################################## */ + +/* 807E79D4-807E7ABC 0003D4 00E8+00 1/1 0/0 0/0 .text draw__8daE_WW_cFv */ +int daE_WW_c::draw() { + if (mActionID == ACTION_EXECUTE_MASTER) { + if (l_HIO.mMoveRangeDebugDisp != 0) { + cXyz curr_pos = current.pos; + curr_pos.y += 100.0f; + GXColor circle1Color = { 200, 0, 0, 255 }; + dDbVw_drawCircleOpa(curr_pos, field_0x6A8, circle1Color, 1, 0xC); + curr_pos.y = current.pos.y - field_0x6AC; + GXColor circle2Color = { 0, 0, 200, 255 }; + dDbVw_drawCircleOpa(curr_pos, field_0x6A8, circle2Color, 1, 0xC); + curr_pos.y = current.pos.y + field_0x6AC; + GXColor circle3Color = { 0, 0, 200, 255 }; + dDbVw_drawCircleOpa(curr_pos, field_0x6A8, circle3Color, 1, 0xC); + } + return 1; + } + J3DModel* model_p = mpMorf->getModel(); + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(model_p, &tevStr); + mpMorf->entryDL(); + cXyz sp14; + sp14.set(current.pos.x, 100.0f + current.pos.y, current.pos.z); + field_0x6D0 = dComIfGd_setShadow(field_0x6D0, 1, model_p, &sp14, 700.0f + nREG_F(19), 0.0f, current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + return 1; +} + +/* 807E7ABC-807E7ADC 0004BC 0020+00 1/0 0/0 0/0 .text daE_WW_Draw__FP8daE_WW_c */ +static int daE_WW_Draw(daE_WW_c* i_this) { + return static_cast(i_this)->draw(); +} + +/* ############################################################################################## */ + +/* 807E7ADC-807E7B80 0004DC 00A4+00 6/6 0/0 0/0 .text setBck__8daE_WW_cFiUcff */ +void daE_WW_c::setBck(int i_index, u8 i_attr, f32 i_morf, f32 i_rate) { + mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_WW", i_index), i_attr, i_morf, i_rate, 0.0f, -1.0f); +} + +/* 807E7B80-807E7BDC 000580 005C+00 1/1 0/0 0/0 .text checkBck__8daE_WW_cFi */ +bool daE_WW_c::checkBck(int i_index) { + if (mpMorf->getAnm() == (J3DAnmTransform*)dComIfG_getObjectRes("E_WW", i_index)) { + return 1; + } + return 0; +} + +/* ############################################################################################## */ + +/* 807E7BDC-807E7C20 0005DC 0044+00 11/11 0/0 0/0 .text setActionMode__8daE_WW_cFii */ +void daE_WW_c::setActionMode(int i_action_id, int i_attack_action_id) { + gravity = -5.0f; + mActionID = i_action_id; + mAttackActionID = i_attack_action_id; + field_0x756 = 0; + mAcch.ClrGrndNone(); + mAcch.OnLineCheck(); + mAcch.OffLineCheckNone(); +} + +/* ############################################################################################## */ + +/* 807E7C20-807E7E74 000620 0254+00 1/1 0/0 0/0 .text damage_check__8daE_WW_cFv */ +void daE_WW_c::damage_check() { + if (field_0x724 == 0) { + mCcStts.Move(); + if (mSph1[1].ChkAtShieldHit() != 0) { + mSph1[1].OffAtShieldHit(); + if (daPy_getPlayerActorClass()->checkPlayerGuard()) { + setActionMode(ACTION_EXECUTE_DAMAGE, 0); + return; + } + } + cCcD_Obj* var_r29 = NULL; // ObjHit ? Where damage is applied ? + if (mSph2[0].ChkTgHit() != 0) { + var_r29 = mSph2[0].GetTgHitObj(); + } + if (mSph2[1].ChkTgHit() != 0) { + var_r29 = mSph2[1].GetTgHitObj(); + } + if (var_r29 != NULL) { + mpHitObj = var_r29; + if (mpHitObj->ChkAtType(AT_TYPE_IRON_BALL) != 0) { + if (fopAcM_GetName(dCc_GetAc(mpHitObj->GetAc())) == PROC_Obj_Carry) { + health += (s16) 150; + } else if (dComIfGp_checkPlayerStatus0(0, 0x400) != 0) { + health += (s16) 180; + } else { + health = 0; + } + } + cc_at_check(this, (dCcU_AtInfo*) &mpHitObj); + if (mpHitObj->GetAtAtp() >= 1) { + cXyz temp_r1; // Change ! + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::transM(-10.0f, -20.0f, 0.0f); + mDoMtx_stack_c::multVecZero(&temp_r1); + if (field_0xEB3 == 0) { + dComIfGp_setHitMark(1, this, &temp_r1, NULL, NULL, 0); + } else { + dComIfGp_setHitMark(3, this, &temp_r1, NULL, NULL, 0); + } + } + if (mpHitObj->ChkAtType(AT_TYPE_UNK) != 0) { + field_0x724 = 20; + } else { + field_0x724 = 10; + } + if (field_0xEB0 <= 1) { + field_0x724 = (u8)(KREG_S(8) + 10); + } + setActionMode(ACTION_EXECUTE_DAMAGE, 0); + } + } +} + +/* ############################################################################################## */ + +/* 807E7E74-807E7FCC 000874 0158+00 1/1 0/0 0/0 .text setRandamNumber__8daE_WW_cFv */ +void daE_WW_c::setRandamNumber() { + // Probably need further cleanup even if matching + + int var_r27 = 0; + int var_r26 = field_0x6B6; + if (field_0x6B6 < 5) { + var_r26 = 5; + } + for (int i=0; i= 0x1800) { + if (angle_y < 0) { + return player_angle + 0x1800; + } + return player_angle - 0x1800; + } + return shape_angle.y; +} + +/* ############################################################################################## */ + +/* 807E804C-807E830C 000A4C 02C0+00 1/1 0/0 0/0 .text setGroundAngle__8daE_WW_cFv */ +void daE_WW_c::setGroundAngle() { + // Change name for vectors + Vec gnd_pos; + + if (field_0x75B != 0 && !mAcch.ChkGroundHit()) { + cLib_addCalcAngleS(&field_0x674.x, 0, 4, 0x1000, 0x200); + cLib_addCalcAngleS(&field_0x674.z, 0, 4, 0x1000, 0x200); + cLib_addCalcAngleS(&field_0x6CE, 0, 4, 0x1000, 0x200); + return; + } + + cXyz sp14 = current.pos; + sp14.y = mAcch.GetGroundH(); + dBgS_GndChk gnd_chk; + + if (field_0x75C == 0) { + gnd_pos.x = sp14.x + 100.0f * cM_ssin(shape_angle.y); + gnd_pos.y = 150.0f + sp14.y; + gnd_pos.z = sp14.z + 100.0f * cM_scos(shape_angle.y); + gnd_chk.SetPos(&gnd_pos); + gnd_pos.y = dComIfG_Bgsp().GroundCross(&gnd_chk); + if (-1e9f == gnd_pos.y) { + gnd_pos.y = (f32) sp14.y; + } + if (std::abs(gnd_pos.y - sp14.y) > 150.0f) { + if (gnd_pos.y > sp14.y) { + gnd_pos.y = sp14.y + 150.0f; + } else { + gnd_pos.y = sp14.y - 150.0f; + } + } + field_0x6CE = -cLib_targetAngleX(&sp14, (cXyz*)&gnd_pos); + field_0x674.x = 0; + field_0x674.z = 0; + } else { + gnd_pos.x = sp14.x; + gnd_pos.y = 150.0f + sp14.y; + gnd_pos.z = 100.0f + sp14.z; + gnd_chk.SetPos(&gnd_pos); + gnd_pos.y = dComIfG_Bgsp().GroundCross(&gnd_chk); + if (-1e9f != gnd_pos.y) { + field_0x674.x = -cM_atan2s(gnd_pos.y - sp14.y, gnd_pos.z - sp14.z); + } + gnd_pos.x = sp14.x + 50.0f; + gnd_pos.y = sp14.y + 150.0f; + gnd_pos.z = sp14.z; + gnd_chk.SetPos(&gnd_pos); + gnd_pos.y = dComIfG_Bgsp().GroundCross(&gnd_chk); + if (-1e9f != gnd_pos.y) { + field_0x674.z = (s16)cM_atan2s(gnd_pos.y - sp14.y, gnd_pos.x - sp14.x); + } + field_0x6CE = 0; + } +} + +/* 807E830C-807E8518 000D0C 020C+00 3/3 0/0 0/0 .text checkCreateBg__8daE_WW_cF4cXyz */ +f32 daE_WW_c::checkCreateBg(cXyz i_vector) { + cXyz sp14 = i_vector; // gnd_check_pos ? + sp14.y += field_0x6AC; + dBgS_GndChk gnd_chk; + gnd_chk.SetPos(&sp14); + f32 temp_f1 = dComIfG_Bgsp().GroundCross(&gnd_chk); + if (temp_f1 != -1e9f) { + if (std::abs(temp_f1 - current.pos.y) > field_0x6AC) { + return -1e9f; + } + if (dComIfG_Bgsp().GetSpecialCode(gnd_chk) == 5 || dComIfG_Bgsp().GetPolyAtt0(gnd_chk) == 0xD) { + cXyz temp_r1 = daPy_getPlayerActorClass()->current.pos; + temp_r1.y += 100.0f; + sp14 = i_vector; + sp14.y = 100.0f + temp_f1; + dBgS_LinChk lin_chk; + lin_chk.Set(&temp_r1, &sp14, NULL); + if (dComIfG_Bgsp().LineCross(&lin_chk) != 0) { + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(lin_chk, &plane); + return -1e9f; + } + return temp_f1; + } + } + return -1e9f; +} + +/* 807E8560-807E8624 000F60 00C4+00 3/3 0/0 0/0 .text checkAttackWall__8daE_WW_cFv */ +int daE_WW_c::checkAttackWall() { + // Change to BOOL ? + cXyz curr_pos = current.pos; + curr_pos.y += 100.0f; + cXyz player_eye_pos = daPy_getPlayerActorClass()->eyePos; + dBgS_LinChk line_chk; + line_chk.Set(&curr_pos, &player_eye_pos, NULL); + if (dComIfG_Bgsp().LineCross(&line_chk)) { + return 0; + } + return 1; +} + +/* 807E8624-807E8700 001024 00DC+00 1/1 0/0 0/0 .text setBlurEffect__8daE_WW_cFv */ +void daE_WW_c::setBlurEffect() { + mParticleKey = dComIfGp_particle_set(mParticleKey, 0x8602, ¤t.pos, &tevStr); + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleKey); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(mpMorf->getModel()->getAnmMtx(2)); + } +} + +/* 807E8700-807E8A08 001100 0308+00 2/2 0/0 0/0 .text setAppearEffect__8daE_WW_cFv */ +void daE_WW_c::setAppearEffect() { + dBgS_ObjGndChk_All gnd_chk; + cXyz gnd_pos; + gnd_pos.set(100.0f * cM_ssin(shape_angle.y), 100.0f, 100.0f * cM_scos(shape_angle.y)); + gnd_pos += current.pos; + gnd_chk.SetPos(&gnd_pos); + gnd_pos.y = dComIfG_Bgsp().GroundCross(&gnd_chk); + if (gnd_pos.y != -1e9f) { + csXyz sp10(0, 0, 0); + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(gnd_chk, &plane); + cXyz* normal = plane.GetNP(); + sp10.y = (s16) cM_atan2s(normal->x, normal->z); + sp10.x = (s16) cM_atan2s(normal->absXZ(), normal->y); + dComIfGp_particle_setPolyColor(0x8A56, gnd_chk, &gnd_pos, &tevStr, &sp10, NULL, 0, NULL, -1, NULL); + dComIfGp_particle_setPolyColor(0x8A57, gnd_chk, &gnd_pos, &tevStr, &sp10, NULL, 0, NULL, -1, NULL); + } +} + +/* 807E8A80-807E8B2C 001480 00AC+00 1/1 0/0 0/0 .text s_child_ww__FPvPv */ +static void* s_child_ww(void* i_actor, void* i_data) { + if (i_actor != i_data && fopAcM_IsActor(i_actor) + && fopAcM_GetName(i_actor) == PROC_E_WW && !fpcM_IsCreating(fopAcM_GetID(i_actor))) { + if (fopAcM_GetLinkId((fopAc_ac_c*)i_actor) == fopAcM_GetID(i_data)) { + lbl_237_bss_30++; + } + } + return NULL; } /* ############################################################################################## */ -/* 807EF7E0-807EF7E4 000070 0004+00 0/6 0/0 0/0 .rodata @4507 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4507 = 500.0f; -COMPILER_STRIP_GATE(0x807EF7E0, &lit_4507); -#pragma pop /* 807E8B2C-807E8C54 00152C 0128+00 1/1 0/0 0/0 .text s_obj_sub__FPvPv */ -static s32 s_obj_sub(void* param_0, void* param_1) { - // NONMATCHING +static void* s_obj_sub(void* i_proc, void* i_data) { + if (fopAcM_IsActor(i_proc) && !fpcM_IsCreating(fopAcM_GetID(i_proc)) && fopAcM_checkCarryNow((fopAc_ac_c *) i_proc) == 0) { + f32 dist = fopAcM_searchActorDistance((fopAc_ac_c *) i_proc, (fopAc_ac_c *) i_data); + if (dist < 100.0f && fopAcM_GetSpeedF((fopAc_ac_c *) i_proc) == 0.0f && fopAcM_GetSpeed((fopAc_ac_c *) i_proc).y == 0.0f) { + if (fopAcM_GetName(i_proc) == PROC_Obj_Carry) { + return i_proc; + } + if (fopAcM_GetName(i_proc) == PROC_NBOMB) { + return i_proc; + } + } + + if (dist < 500.0f && (fopAcM_GetName(i_proc) == PROC_BOOMERANG || fopAcM_GetName(i_proc) == PROC_NBOMB)) { + return i_proc; + } + if (dist < 700.0f && fopAcM_GetName(i_proc) == PROC_ARROW && fopAcM_GetSpeedF((fopAc_ac_c *) i_proc) != 0.0f) { + return i_proc; + } + } + + return NULL; } /* 807E8C54-807E8E6C 001654 0218+00 4/4 0/0 0/0 .text checkSideStep__8daE_WW_cFv */ -void daE_WW_c::checkSideStep() { - // NONMATCHING +int daE_WW_c::checkSideStep() { + // Change to bool ? or BOOL ? + cXyz* temp_r3; + + if (dComIfGp_checkPlayerStatus0(0, 0x4000) != 0) { + temp_r3 = daPy_getPlayerActorClass()->getHookshotTopPos(); + if (temp_r3 != NULL && temp_r3->absXZ(current.pos) < 500.0f) { + if ((s16)(cLib_targetAngleY(¤t.pos, temp_r3) - shape_angle.y) < 0) { + field_0x6C0 = 0; + } else { + field_0x6C0 = 1; + } + return 1; + } + } + fopAc_ac_c* temp_r3_2 = (fopAc_ac_c*) fpcM_Search(s_obj_sub, this); + if (temp_r3_2 != NULL) { + if ((s16)(fopAcM_searchActorAngleY(this, temp_r3_2) - shape_angle.y) < 0) { + field_0x6C0 = 0; + } else { + field_0x6C0 = 1; + } + return 1; + } + return 0; } /* 807E8E6C-807E8EEC 00186C 0080+00 1/1 0/0 0/0 .text s_attack_ww__FPvPv */ -static void s_attack_ww(void* param_0, void* param_1) { - // NONMATCHING +static void* s_attack_ww(void* param_0, void* param_1) { + // Change names ? + if (param_0 != param_1 && fopAcM_IsActor(param_0) && fopAcM_GetName(param_0) == PROC_E_WW && !fpcM_IsCreating(fopAcM_GetID(param_0)) && ((daE_WW_c*)param_0)->isAttack() != 0) { + return param_0; + } + return NULL; } /* ############################################################################################## */ -/* 807EF7E4-807EF7E8 000074 0004+00 1/1 0/0 0/0 .rodata @4621 */ -SECTION_RODATA static f32 const lit_4621 = 4096.0f; -COMPILER_STRIP_GATE(0x807EF7E4, &lit_4621); /* 807E8EEC-807E905C 0018EC 0170+00 2/2 0/0 0/0 .text createWolf__8daE_WW_cF4cXyzUc */ void daE_WW_c::createWolf(cXyz param_0, u8 param_1) { - // NONMATCHING + fpc_ProcID var_r30; + u8 var_r29; + u8 var_r28; + + // sp10 = param_1; + cXyz sp1C = daPy_getPlayerActorClass()->current.pos; + // f32 temp_f31 = ; + csXyz sp14(0, cLib_targetAngleY(¶m_0, &sp1C) + cM_rndFX(4096.0f), 0); + u8 temp_r27 = field_0x6A8 / 100.0f; + if (param_1 == 0) { + var_r30 = fopAcM_GetLinkId(this); + var_r29 = 0; + var_r28 = 2; + } else { + var_r30 = fopAcM_GetID(this); + var_r29 = field_0x6C0; + var_r28 = 1; + } + mChildID[var_r29] = fopAcM_createChild(PROC_E_WW, var_r30, (var_r28 << 24) | (field_0x6B4 | (0xF0FF0000 | 0xF000) | (temp_r27 * 0x10)), ¶m_0, fopAcM_GetRoomNo(this), &sp14, NULL, -1, NULL); } /* ############################################################################################## */ -/* 807EF7E8-807EF7EC 000078 0004+00 0/1 0/0 0/0 .rodata @4824 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4824 = 2500.0f; -COMPILER_STRIP_GATE(0x807EF7E8, &lit_4824); -#pragma pop - -/* 807EF7EC-807EF7F0 00007C 0004+00 0/2 0/0 0/0 .rodata @4825 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4825 = 3000.0f; -COMPILER_STRIP_GATE(0x807EF7EC, &lit_4825); -#pragma pop - -/* 807EF7F0-807EF7F4 000080 0004+00 0/5 0/0 0/0 .rodata @4826 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4826 = 200.0f; -COMPILER_STRIP_GATE(0x807EF7F0, &lit_4826); -#pragma pop - -/* 807EFBF8-807EFC04 000080 000C+00 0/1 0/0 0/0 .bss @4585 */ -#pragma push -#pragma force_active on -static u8 lit_4585[12]; -#pragma pop - -/* 807EFC04-807EFC10 00008C 000C+00 0/1 0/0 0/0 .bss @4586 */ -#pragma push -#pragma force_active on -static u8 lit_4586[12]; -#pragma pop - -/* 807EFC10-807EFC1C 000098 000C+00 0/1 0/0 0/0 .bss @4587 */ -#pragma push -#pragma force_active on -static u8 lit_4587[12]; -#pragma pop - -/* 807EFC1C-807EFC28 0000A4 000C+00 0/1 0/0 0/0 .bss @4588 */ -#pragma push -#pragma force_active on -static u8 lit_4588[12]; -#pragma pop - -/* 807EFC28-807EFC34 0000B0 000C+00 0/1 0/0 0/0 .bss @4589 */ -#pragma push -#pragma force_active on -static u8 lit_4589[12]; -#pragma pop - -/* 807EFC34-807EFC40 0000BC 000C+00 0/1 0/0 0/0 .bss @4590 */ -#pragma push -#pragma force_active on -static u8 lit_4590[12]; -#pragma pop - -/* 807EFC40-807EFC4C 0000C8 000C+00 0/1 0/0 0/0 .bss @4591 */ -#pragma push -#pragma force_active on -static u8 lit_4591[12]; -#pragma pop - -/* 807EFC4C-807EFC58 0000D4 000C+00 0/1 0/0 0/0 .bss @4592 */ -#pragma push -#pragma force_active on -static u8 lit_4592[12]; -#pragma pop - -/* 807EFC58-807EFC64 0000E0 000C+00 0/1 0/0 0/0 .bss @4593 */ -#pragma push -#pragma force_active on -static u8 lit_4593[12]; -#pragma pop - -/* 807EFC64-807EFC70 0000EC 000C+00 0/1 0/0 0/0 .bss @4594 */ -#pragma push -#pragma force_active on -static u8 lit_4594[12]; -#pragma pop - -/* 807EFC70-807EFC7C 0000F8 000C+00 0/1 0/0 0/0 .bss @4595 */ -#pragma push -#pragma force_active on -static u8 lit_4595[12]; -#pragma pop - -/* 807EFC7C-807EFC88 000104 000C+00 0/1 0/0 0/0 .bss @4596 */ -#pragma push -#pragma force_active on -static u8 lit_4596[12]; -#pragma pop - -/* 807EFC88-807EFC94 000110 000C+00 0/1 0/0 0/0 .bss @4597 */ -#pragma push -#pragma force_active on -static u8 lit_4597[12]; -#pragma pop - -/* 807EFC94-807EFCA0 00011C 000C+00 0/1 0/0 0/0 .bss @4598 */ -#pragma push -#pragma force_active on -static u8 lit_4598[12]; -#pragma pop - -/* 807EFCA0-807EFCAC 000128 000C+00 0/1 0/0 0/0 .bss @4599 */ -#pragma push -#pragma force_active on -static u8 lit_4599[12]; -#pragma pop /* 807EFCAC-807EFD60 000134 00B4+00 1/2 0/0 0/0 .bss create_pos */ -static u8 create_pos[180]; +static cXyz create_pos[15] = { + cXyz(1000.0f, 0.0f, 200.0f), + cXyz(-700.0f, 0.0f, 100.0f), + cXyz(700.0f, 0.0f, 100.0f), + cXyz(-1000.0f, 0.0f, 200.0f), + cXyz(-300.0f, 0.0f, -200.0f), + cXyz(700.0f, 0.0f, -100.0f), + cXyz(200.0f, 0.0f, 300.0f), + cXyz(400.0f, 0.0f, -200.0f), + cXyz(-700.0f, 0.0f, -100.0f), + cXyz(-400.0f, 0.0f, 200.0f), + cXyz(250.0f, 0.0f, 200.0f), + cXyz(250.0f, 0.0f, -250.0f), + cXyz(0.0f, 0.0f, 0.0f), + cXyz(-250.0f, 0.0f, 250.0f), + cXyz(-250.0f, 0.0f, -250.0f), +}; /* 807E905C-807E972C 001A5C 06D0+00 1/1 0/0 0/0 .text executeMaster__8daE_WW_cFv */ void daE_WW_c::executeMaster() { - // NONMATCHING + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + cXyz sp48 = daPy_getPlayerActorClass()->current.pos; + f32 temp_f30 = sp48.absXZ(current.pos); + cXyz sp3C; + cXyz sp30; + fopAcM_OffStatus(this, fopAcM_STATUS_UNK_004000); + field_0x724 = 10; + switch (mAttackActionID) { + case 0: + if ((field_0x6B4 != 0 || !(std::abs(current.pos.y - sp48.y) > 500.0f)) && temp_f30 < field_0x6A8) { + if (field_0x6B4 == 0) { + sp30.set(0.0f, 0.0f, 2500.0f + nREG_F(11)); + } else { + sp30.set(0.0f, 0.0f, 3000.0f); + } + cLib_offsetPos(&sp3C, &sp48, fopCamM_GetAngleY(camera), &sp30); + if (current.pos.abs(sp3C) < field_0x6A8) { + f32 temp_f31 = checkCreateBg(sp3C); + if (-1e9f != temp_f31) { + sp3C.y = temp_f31; + int var_r30 = 0; + lbl_237_bss_30 = 0; + fpcM_Search(s_child_ww, this); + if (lbl_237_bss_30 < field_0x6B6) { + var_r30 = field_0x6B6 - lbl_237_bss_30; + if (field_0x6B5 != 0xFF && var_r30 > (field_0x6B5 - field_0x6C8)) { + var_r30 = field_0x6B5 - field_0x6C8; + } + } + if (var_r30 > 0) { + field_0x65C = sp3C; + mAttackActionID = 1; + field_0x6B7 = var_r30; + field_0x6C0 = 0; + setRandamNumber(); + field_0x728 = 0; + return; + } + } + mAttackActionID = 10; + field_0x728 = 30; + } + } + break; + + case 1: + if (field_0x728 == 0) { + int var_r30_2; + if (field_0x6B4 == 0) { + var_r30_2 = field_0x6FC[field_0x6C0] + 5; + } else { + var_r30_2 = field_0x6FC[field_0x6C0]; + } + sp30 = create_pos[var_r30_2]; + sp30.x += cM_rndFX(200.0f); + cLib_offsetPos(&sp3C, &field_0x65C, (s16)fopCamM_GetAngleY(camera), &sp30); + f32 temp_f31_2 = checkCreateBg(sp3C); + if (-1e9f != temp_f31_2) { + sp3C.y = temp_f31_2; + } else { + sp3C = field_0x65C; + } + createWolf(sp3C, 1); + field_0x6C8++; + field_0x6C0++; + if (field_0x6C0 >= field_0x6B7) { + mAttackActionID = 3; + field_0x6C0 = 0; + field_0x6C4 = 0; + setRandamNumber(); + field_0x728 = 20; + return; + } + field_0x728 = field_0x6D4[field_0x6C0]; + } + break; + + case 2: + if (field_0x728 == 0) { + mAttackActionID = 3; + field_0x6C0 = 0; + field_0x6C4 = 0; + setRandamNumber(); + field_0x728 = 0; + } + break; + + case 3: + if (field_0x728 == 0) { + if (field_0x6FC[field_0x6C4] < field_0x6B7) { + fopAc_ac_c* sp8; + fopAcM_SearchByID(mChildID[field_0x6FC[field_0x6C4]], &sp8); + if (sp8 != NULL) { + ((daE_WW_c*)sp8)->setAttack(); + } + field_0x6C0++; + if (field_0x6C0 >= field_0x6B7) { + field_0x6C4 = 10; + } + } + field_0x6C4++; + if (field_0x6C4 >= 10) { + mAttackActionID = 10; + field_0x728 = 50; + return; + } + if (field_0x6FC[field_0x6C4] < field_0x6B7) { + field_0x728 = field_0x6D4[field_0x6C4] * 2; + } + } + break; + + case 10: + if (field_0x728 == 0) { + mAttackActionID = 0; + } + if (field_0x6B5 != 0xFF && field_0x6C8 >= field_0x6B5) { + fopAcM_delete(this); + } + break; + } } /* ############################################################################################## */ -/* 807EF7F4-807EF7F8 000084 0004+00 0/2 0/0 0/0 .rodata @4884 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4884 = 15.0f; -COMPILER_STRIP_GATE(0x807EF7F4, &lit_4884); -#pragma pop - -/* 807EF7F8-807EF7FC 000088 0004+00 0/6 0/0 0/0 .rodata @4885 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4885 = 20.0f; -COMPILER_STRIP_GATE(0x807EF7F8, &lit_4885); -#pragma pop - -/* 807EF7FC-807EF800 00008C 0004+00 0/1 0/0 0/0 .rodata @4886 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4886 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x807EF7FC, &lit_4886); -#pragma pop - -/* 807EF800-807EF804 000090 0004+00 0/4 0/0 0/0 .rodata @4887 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4887 = 30.0f; -COMPILER_STRIP_GATE(0x807EF800, &lit_4887); -#pragma pop /* 807E972C-807E99B8 00212C 028C+00 1/1 0/0 0/0 .text executeWait__8daE_WW_cFv */ void daE_WW_c::executeWait() { - // NONMATCHING + // s32 temp_r0; + // s32 var_r28; + // std *temp_r3_3; + // void **temp_r3; + // void **temp_r3_2; + // void *temp_r1; + + // temp_r1 = sp - 0x30; + switch (mAttackActionID) { + case 0: + fopAcM_OnStatus(this, fopAcM_STATUS_UNK_004000); + setBck(ANM_APPEAR, 0, 0.0f, 1.0f); + mAttackActionID = 1; + break; + + case 1: + if (mpMorf->checkFrame(3.0f)) { + mSound.startCreatureSound(Z2SE_EN_WW_APPEAR, 0, -1); + setAppearEffect(); + } + if (mpMorf->checkFrame(15.0f) || mpMorf->checkFrame(20.0f)) { + mSound.startCreatureSound(Z2SE_EN_WW_FOOTNOTE, 0, -1); + } + if (mpMorf->isStop()) { + if (field_0x758 != 0) { + mAttackActionID = 10; + return; + } + setBck(ANM_WAIT, 2, 3.0f, 1.0f); + return; + } + break; + + case 10: + bool var_r28 = true; + if (checkAttackWall() == 0) { + var_r28 = false; + } else if (field_0x6B4 == 1) { + if (cM_rnd() < 0.3f) { + var_r28 = false; + } + } else if (field_0x6B4 == 0) { + if (std::abs(current.pos.y - daPy_getPlayerActorClass()->current.pos.y) > 500.0f) { + var_r28 = false; + } + } + fopAcM_OffStatus(this, fopAcM_STATUS_UNK_004000); + if (var_r28) { + setActionMode(2, 0); + field_0x756 = 1; + return; + } + field_0x734 = l_HIO.mAttackInterval + cM_rndFX(30.0f); + setBck(ANM_WAIT, 2, 3.0f, 1.0f); + setActionMode(3, 10); + break; + } } /* ############################################################################################## */ -/* 807EF804-807EF808 000094 0004+00 0/1 0/0 0/0 .rodata @4942 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4942 = 35.0f; -COMPILER_STRIP_GATE(0x807EF804, &lit_4942); -#pragma pop - -/* 807EF808-807EF80C 000098 0004+00 0/1 0/0 0/0 .rodata @4943 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4943 = -35.0f; -COMPILER_STRIP_GATE(0x807EF808, &lit_4943); -#pragma pop - -/* 807EF80C-807EF810 00009C 0004+00 0/1 0/0 0/0 .rodata @4944 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4944 = 17.0f; -COMPILER_STRIP_GATE(0x807EF80C, &lit_4944); -#pragma pop - -/* 807EF810-807EF814 0000A0 0004+00 0/2 0/0 0/0 .rodata @4945 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4945 = -3.0f; -COMPILER_STRIP_GATE(0x807EF810, &lit_4945); -#pragma pop /* 807E99B8-807E9C1C 0023B8 0264+00 1/1 0/0 0/0 .text calcJumpSpeed__8daE_WW_cFv */ -void daE_WW_c::calcJumpSpeed() { - // NONMATCHING +int daE_WW_c::calcJumpSpeed() { + f32 var_f31 = field_0x65C.y - current.pos.y; + int var_r28 = 0; + int var_r29 = 0; + int unused = 0; + if (var_f31 > 0.0f) { + while (var_f31 >= 35.0f) { + var_f31 -= 35.0f + 3.0f * var_r28; + var_r28++; + var_r29++; + } + } else { + while (var_f31 <= -35.0f) { + var_f31 += 35.0f + 3.0f * var_r28; + var_r29++; + } + } + speed.y = 35.0f + 3.0f * var_r28 + nREG_F(7); + field_0x75B = 2; + speedF = current.pos.absXZ(field_0x65C) / (17.0f + var_r29 + nREG_F(8)); + if (speedF < 20.0f + nREG_F(10)) { + speedF = 20.0f + nREG_F(10); + } + gravity = -3.0f + nREG_F(9); + return var_r29; // Jump speed ? } /* ############################################################################################## */ -/* 807EF814-807EF818 0000A4 0004+00 0/2 0/0 0/0 .rodata @5110 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5110 = 800.0f; -COMPILER_STRIP_GATE(0x807EF814, &lit_5110); -#pragma pop - -/* 807EF818-807EF81C 0000A8 0004+00 0/3 0/0 0/0 .rodata @5111 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5111 = 5.0f; -COMPILER_STRIP_GATE(0x807EF818, &lit_5111); -#pragma pop /* 807E9C1C-807EA474 00261C 0858+00 2/1 0/0 0/0 .text executeAttack__8daE_WW_cFv */ void daE_WW_c::executeAttack() { - // NONMATCHING + daPy_py_c* player_p = daPy_getPlayerActorClass(); + + switch (mAttackActionID) { + case 0: + setBck(ANM_RUN, 2, 3.0f, l_HIO.mRunAnm); // Change BCK index to enum ? + mAttackActionID = 1; + field_0x728 = 10; + speedF = l_HIO.mRunSpeed; + field_0x72C = 300; + /* fallthrough */ + + case 1: + field_0x75A = 1; + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 4, 0x800, 0x100); + current.angle.y = shape_angle.y; + if (checkAttackWall() == 0) { + setActionMode(3, 2); + } + if (field_0x728 == 0) { + if (checkMoveOut() == 0) { + if (fopAcM_searchPlayerDistance(this) < (800.0f + nREG_F(18) + mDistCheckModifier)) { + mAttackActionID = 20; + setBck(ANM_JUMP_ATTACKA, 0, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_WW_V_ATTACK, -1); + speed.y = 0.0f; + speedF = 0.0f; + } + break; + } + return; + } + if (mpMorf->getFrame() <= 5.0f && checkSideStep() != 0) { + mAttackActionID = 10; + speed.y = 0.0f; + speedF = 0.0f; + } + if (field_0x72C == 0 && fopAcM_otherBgCheck(this, daPy_getPlayerActorClass()) != 0) { + setActionMode(3, 2); + return; + } + break; + + case 10: + field_0x6CC = fopAcM_searchPlayerAngleY(this); + shape_angle.y = field_0x6CC; + if (field_0x6C0 == 0) { + setBck(ANM_SIDESTEP_LEFT, 0, 3.0f, 1.0f); + current.angle.y = field_0x6CC + 0x1800 + cM_rndFX(2000.0f); + } else { + setBck(ANM_SIDESTEP_RIGHT, 0, 3.0f, 1.0f); + current.angle.y = field_0x6CC - 0x1800 + cM_rndFX(2000.0f); + } + mAttackActionID = 11; // Change to anm run ?? + /* fallthrough */ + + case 11: + field_0x75A = 1; + if (mpMorf->checkFrame(5.0f) != 0) { + field_0x75B = 1; + speed.y = 20.0f + nREG_F(15); + speedF = nREG_F(16) + 40.0f + cM_rndFX(5.0f); + mAttackActionID = 12; + mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); + } + break; + + case 12: + field_0x75A = 1; + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 4, 0x800, 0x100); + if (mAcch.ChkGroundHit() != 0) { + speedF = 0.0f; + if (mpMorf->isStop() != 0) { + if (checkMoveOut() == 0) { + f32 var_f31 = 800.0f + nREG_F(18) + mDistCheckModifier; + if (player_p->getSpeedF() >= 18.0f) { + var_f31 = 1000.0f + nREG_F(18) + mDistCheckModifier; + } + if (fopAcM_searchPlayerDistance(this) < var_f31 && checkAttackWall() != 0) { + mAttackActionID = 20; + setBck(ANM_JUMP_ATTACKA, 0, 3.0f, 1.0f); // Change to ANM_JUMP ? + mSound.startCreatureVoice(Z2SE_EN_WW_V_ATTACK, -1); + } else { + mAttackActionID = 0; + } + break; + } + return; + } + } + break; + + case 20: + cXyz sp2C(0.0f, 0.0f, (17.0f + nREG_F(8)) * player_p->getSpeedF()); + cLib_offsetPos(&field_0x65C, &player_p->current.pos, player_p->shape_angle.y, &sp2C); + cLib_addCalcAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &field_0x65C), 4, 0x1000, 0x100); + current.angle.y = shape_angle.y; + if (mpMorf->checkFrame(2.0f) != 0) { + mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); + } + if (mpMorf->isStop() != 0) { + calcJumpSpeed(); + if (field_0x6B4 == 0) { + mAttackActionID = 21; + field_0x756 = 0; + } else { + mAttackActionID = 25; + field_0x756 = 0; + mAcch.SetGrndNone(); + mAcch.OffLineCheck(); + mAcch.OnLineCheckNone(); + } + setBck(ANM_JUMP_ATTACKB, 2, 3.0f, 1.0f); + shape_angle.x = cM_atan2s(speedF, speed.y) - 0x4000; + } + break; + + case 21: + mSph2[0].SetTgType(0xD8FBFDFF); + mSph2[1].SetTgType(0xD8FBFDFF); + cLib_chaseF(&speedF, 0.0f, 1.0f); + mSph1[1].OnAtSetBit(); + if (mAcch.ChkGroundHit()) { + speedF = 20.0f + ZREG_F(0); + setBck(ANM_JUMP_ATTACKC, 0, 3.0f, 1.0f); + mAttackActionID = 22; + } + break; + + case 22: + cLib_chaseF(&speedF, 0.0f, 1.0f + ZREG_F(1)); + if (mpMorf->checkFrame(2.0f) != 0) { + mSound.startCreatureSound(Z2SE_EN_WW_FOOTNOTE, 0, -1); + } + if (mpMorf->isStop() != 0) { + setActionMode(3, 0); + } + break; + + case 25: + case 26: + mAcch.ClrGroundHit(); + mSph2[0].SetTgType(0xD8FBFDFF); + mSph2[1].SetTgType(0xD8FBFDFF); + cLib_chaseF(&speedF, 0.0f, 1.0f); + mSph1[1].OnAtSetBit(); + cXyz sp20(current.pos.x, 1000.0f + current.pos.y, current.pos.z); + dBgS_GndChk gnd_chk; + gnd_chk.SetPos(&sp20); + if (-1e9f != dComIfG_Bgsp().GroundCross(&gnd_chk)) { + if (mAttackActionID == 25 && current.pos.y < sp20.y) { + setAppearEffect(); + mSound.startCreatureSound(Z2SE_EN_WW_HIDE, 0, -1); + mAttackActionID = 26; + } + if (attention_info.position.y < sp20.y) { + field_0x75D = 0; + } + if (current.pos.y < (sp20.y - 500.0f)) { + fopAcM_delete(this); + } + } + break; + } + if (mAcch.ChkGroundHit()) { + cLib_addCalcAngleS(&shape_angle.x, 0, 4, 0x1000, 0x200); + return; + } + cLib_addCalcAngleS(&shape_angle.x, cM_atan2s(speedF, speed.y) - 0x4000, 4, 0x800, 0x200); + } /* ############################################################################################## */ -/* 807EF81C-807EF820 0000AC 0004+00 0/1 0/0 0/0 .rodata @5112 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5112 = 2000.0f; -COMPILER_STRIP_GATE(0x807EF81C, &lit_5112); -#pragma pop - -/* 807EF820-807EF824 0000B0 0004+00 0/2 0/0 0/0 .rodata @5113 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5113 = 1000.0f; -COMPILER_STRIP_GATE(0x807EF820, &lit_5113); -#pragma pop - -/* 807EF824-807EF828 0000B4 0004+00 0/0 0/0 0/0 .rodata @5114 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5114 = 18.0f; -COMPILER_STRIP_GATE(0x807EF824, &lit_5114); -#pragma pop - -/* 807EF828-807EF82C 0000B8 0004+00 0/2 0/0 0/0 .rodata @5115 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5115 = 2.0f; -COMPILER_STRIP_GATE(0x807EF828, &lit_5115); -#pragma pop - -/* 807EF82C-807EF830 0000BC 0004+00 0/3 0/0 0/0 .rodata @5256 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5256 = 1400.0f; -COMPILER_STRIP_GATE(0x807EF82C, &lit_5256); -#pragma pop /* 807EA474-807EA870 002E74 03FC+00 2/2 0/0 0/0 .text checkAttackStart__8daE_WW_cFv */ -void daE_WW_c::checkAttackStart() { - // NONMATCHING +int daE_WW_c::checkAttackStart() { + // Change to bool ? + if (field_0x734 == 0) { + s16 temp_r25 = fopCamM_GetAngleY(dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0))) + 0x8000; + s16 temp_r28 = temp_r25 - fopAcM_searchPlayerAngleY(this); + cXyz sp14 = daPy_getPlayerActorClass()->current.pos; + if (field_0x6B4 != 1) { + if (fpcM_Search(s_attack_ww, this) != NULL) { + return 0; + } + } + else { + if (abs(temp_r28) > 0x5000) { + if (current.pos.absXZ(sp14) > 1400.0f + nREG_F(18) + mDistCheckModifier) { + fopAcM_delete(this); + return 1; + } + } + } + if (field_0x6B4 == 0 && std::abs(current.pos.y - sp14.y) > 500.0f) { + return 0; + } + if (abs(temp_r28) < nREG_S(9) + 0x1555 && field_0x668.absXZ(sp14) < 800.0f + field_0x6A8) { + BOOL temp = (checkCreateBg(current.pos) == -1e9)^1; + if (temp != 0 && checkAttackWall() != 0) { + setActionMode(2, 0); + field_0x756 = 1; + return 1; + } + } + } + return 0; } /* ############################################################################################## */ -/* 807EF830-807EF834 0000C0 0004+00 0/2 0/0 0/0 .rodata @5522 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5522 = 1500.0f; -COMPILER_STRIP_GATE(0x807EF830, &lit_5522); -#pragma pop - -/* 807EF834-807EF838 0000C4 0004+00 0/1 0/0 0/0 .rodata @5523 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5523 = 1.5f; -COMPILER_STRIP_GATE(0x807EF834, &lit_5523); -#pragma pop - -/* 807EF838-807EF83C 0000C8 0004+00 0/3 0/0 0/0 .rodata @5524 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5524 = 1200.0f; -COMPILER_STRIP_GATE(0x807EF838, &lit_5524); -#pragma pop - -/* 807EF83C-807EF840 0000CC 0004+00 0/2 0/0 0/0 .rodata @5525 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5525 = -40.0f; -COMPILER_STRIP_GATE(0x807EF83C, &lit_5525); -#pragma pop - -/* 807EF840-807EF844 0000D0 0004+00 0/3 0/0 0/0 .rodata @5526 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5526 = 1800.0f; -COMPILER_STRIP_GATE(0x807EF840, &lit_5526); -#pragma pop - -/* 807EF844-807EF848 0000D4 0004+00 0/3 0/0 0/0 .rodata @5527 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5527 = 10.0f; -COMPILER_STRIP_GATE(0x807EF844, &lit_5527); -#pragma pop - -/* 807EF848-807EF84C 0000D8 0004+00 0/2 0/0 0/0 .rodata @5528 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5528 = 1600.0f; -COMPILER_STRIP_GATE(0x807EF848, &lit_5528); -#pragma pop /* 807EA870-807EB650 003270 0DE0+00 1/1 0/0 0/0 .text executeChase__8daE_WW_cFv */ void daE_WW_c::executeChase() { - // NONMATCHING +// cXyz sp28; +// s32 sp24; +// JAISoundID sp20; +// JAISoundID sp1C; +// JAISoundID sp18; +// JAISoundID sp14; +// s32 (*sp10)(daPy_py_c *); +// s32 (*spC)(daPy_py_c *); + s16 sp8; +// f32 temp_f31; +// s32 temp_r0; +// s32 var_r29; +// s32 var_r29_2; +// void **temp_r3; +// void **temp_r3_2; +// void **temp_r3_3; +// void **temp_r3_4; + + cXyz sp28 = daPy_getPlayerActorClass()->current.pos; + f32 temp_f31 = sp28.absXZ(current.pos); + switch (mAttackActionID) { + case 5: + if (temp_f31 > 1500.0f + nREG_F(18) + mDistCheckModifier) { + mAttackActionID = 10; + setBck(ANM_WAIT, 2, 3.0f, 1.0f); + return; + } + + case 0: + setBck(ANM_RUN, 2, 3.0f, l_HIO.mRunAnm); + mAttackActionID = 1; + speedF = l_HIO.mRunSpeed; + field_0x734 = l_HIO.mAttackInterval + cM_rndFX(30.0f); + field_0x728 = 150; + + case 1: + if (calcMoveDir(&sp8, fopAcM_searchPlayerAngleY(this) - 0x8000) != 0) { + cLib_addCalcAngleS(&shape_angle.y, sp8, 4, 0x800, 0x100); + } else { + cLib_addCalcAngleS(&shape_angle.y, sp8, 8, 0x200, 0x80); + } + current.angle.y = shape_angle.y; + bool var_r29 = false; + if (temp_f31 > 1500.0f + nREG_F(18) + mDistCheckModifier - 200.0f) { + var_r29 = true; + } + if ((field_0x6B4 == 0) && (field_0x728 == 0) && (daPy_getPlayerActorClass()->speedF == 0.0f)) { + var_r29 = true; + } + if (var_r29) { + mAttackActionID = 2; + setBck(ANM_TURN, 0, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); + } + break; + + case 2: + field_0x75A = 1; + cLib_addCalcAngleS(&shape_angle.y, getNearPlayerAngle(), 8, 0x800, 0x100); + cLib_chaseF(&speedF, 0.0f, 1.5f); + if (speedF == 0.0f && abs(shape_angle.y - fopAcM_searchPlayerAngleY(this)) < 0x2000) { + mAttackActionID = 10; + setBck(ANM_WAIT, 2, 3.0f, 1.0f); + } + break; + + case 10: + mAttackActionID = 11; + field_0x740 = 30; + /* fallthrough */ + + case 11: + field_0x75A = 1; + cLib_addCalcAngleS(&shape_angle.y, getNearPlayerAngle(), 4, 0x800, 0x100); + current.angle.y = shape_angle.y; + if (daPy_getPlayerActorClass()->speedF != 0.0f) { + if (temp_f31 < 1400.0f + nREG_F(18) + mDistCheckModifier) { + if (field_0x730 != 0 || temp_f31 < 1200.0f + nREG_F(18) + mDistCheckModifier) { + mAttackActionID = 0xC; + setBck(ANM_RUN, 2, 3.0f, l_HIO.mRunAnm); + } else { + setBck(ANM_BACKSTEP, 0, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); + mAttackActionID = 0xF; + speedF = -40.0f; + speed.y = 25.0f; + field_0x75B = 1; + field_0x730 = 0x3C; + } + } else if (temp_f31 > 1800.0f + nREG_F(18) + mDistCheckModifier) { + setBck(ANM_RUN, 2, 3.0f, l_HIO.mRunAnm); + mAttackActionID = 0x14; + speedF = l_HIO.mRunSpeed - 10.0f; + } + } + if (checkSideStep() != 0) { + mAttackActionID = 0x19; + speed.y = 0.0f; + speedF = 0.0f; + } + if (checkWalkStart() == 0 && checkAttackStart() == 0) { + if (checkMoveOut() != 0) { + return; + } + } + break; + + case 12: + field_0x728 = 30; + mAttackActionID = 0xD; + /* fallthrough */ + + case 13: + if (daPy_getPlayerActorClass()->checkNowWolf() != 0) { + speedF = l_HIO.mWolfEscapeSpeed; + } else { + speedF = l_HIO.mLinkEscapeSpeed; + } + if (calcMoveDir(&sp8, fopAcM_searchPlayerAngleY(this) - 0x8000) != 0) { + cLib_addCalcAngleS(&shape_angle.y, sp8, 4, 0x800, 0x200); + } else { + cLib_addCalcAngleS(&shape_angle.y, sp8, 8, 0x200, 0x80); + } + current.angle.y = shape_angle.y; + if (field_0x728 == 0) { + mAttackActionID = 0xE; + field_0x728 = 150; + } + break; + + case 14: + if (daPy_getPlayerActorClass()->checkNowWolf() != 0) { + cLib_chaseF(&speedF, l_HIO.mWolfEscapeSpeed, 1.0f); + } else { + cLib_chaseF(&speedF, l_HIO.mLinkEscapeSpeed, 1.0f); + } + if (calcMoveDir(&sp8, (fopAcM_searchPlayerAngleY(this) - 0x8000)) != 0) { + cLib_addCalcAngleS(&shape_angle.y, sp8, 4, 0x800, 0x200); + } else { + cLib_addCalcAngleS(&shape_angle.y, sp8, 8, 0x200, 0x80); + } + current.angle.y = shape_angle.y; + bool var_r29_2 = false; + if (temp_f31 > 1500.0f + nREG_F(18) + mDistCheckModifier) { + var_r29_2 = true; + } + if (field_0x6B4 == 0 && field_0x728 == 0 && daPy_getPlayerActorClass()->speedF == 0.0f) { + var_r29_2 = true; + } + if (var_r29_2) { + mAttackActionID = 2; + setBck(ANM_TURN, 0, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); + } + break; + + case 15: + field_0x75A = 1; + if (!mAcch.ChkGroundHit()) { + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 4, 0x800, 0x100); + current.angle.y = shape_angle.y; + } else { + speedF = 0.0f; + if (mpMorf->isStop()) { + setBck(ANM_WAIT, 2, 3.0f, 1.0f); + mAttackActionID = 0xA; + } + } + break; + + case 20: + field_0x73C = 0; + /* fallthrough */ + + case 21: + field_0x75A = 1; + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 4, 0x800, 0x100); + current.angle.y = shape_angle.y; + if (temp_f31 < 1600.0f + nREG_F(18) + mDistCheckModifier) { + setBck(ANM_WAIT, 2, 3.0f, 1.0f); + mAttackActionID = 0xA; + speedF = 0.0f; + } + if (mpMorf->getFrame() <= 5.0f) { + if (checkSideStep() != 0) { + mAttackActionID = 0x19; + speed.y = 0.0f; + speedF = 0.0f; + } + if (field_0x73C == 0 && checkMoveOut() != 0) { + return; + } + } + break; + + case 25: + field_0x6CC = fopAcM_searchPlayerAngleY(this); + shape_angle.y = field_0x6CC; + if (field_0x6C0 == 0) { + setBck(ANM_SIDESTEP_LEFT, 0, 3.0f, 1.0f); + current.angle.y = field_0x6CC + 0x3800 + cM_rndFX(2000.0f); + } else { + setBck(ANM_SIDESTEP_RIGHT, 0, 3.0f, 1.0f); + current.angle.y = field_0x6CC - 0x3800 + cM_rndFX(2000.0f); + } + mAttackActionID = 0x1B; + /* fallthrough */ + + case 27: + field_0x75A = 1; + if (mpMorf->checkFrame(5.0f) != 0) { + speed.y = 20.0f + nREG_F(15); + speedF = nREG_F(16) + (40.0f + cM_rndFX(5.0f)); + field_0x75B = 1; + mAttackActionID = 0x1C; + mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); + } + break; + + case 28: + field_0x75A = 1; + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 4, 0x800, 0x100); + if (mAcch.ChkGroundHit() != 0) { + speedF = 0.0f; + if (mpMorf->isStop() != 0) { + setBck(ANM_WAIT, 2, 3.0f, 1.0f); + mAttackActionID = 0xA; + } + } + break; + } + + cLib_addCalcAngleS(&shape_angle.x, 0, 8, 0x400, 0x100); } /* ############################################################################################## */ @@ -991,17 +1338,263 @@ COMPILER_STRIP_GATE(0x807EF850, &lit_5608); /* 807EB650-807EB964 004050 0314+00 1/1 0/0 0/0 .text executeDamage__8daE_WW_cFv */ void daE_WW_c::executeDamage() { - // NONMATCHING + // JAISoundID spC; + // JAISoundID sp8; + // s32 temp_r0; + // void **temp_r3; + // void **temp_r3_2; + + // if (health <= 0) { + // field_0x724 = 5; + // OffTgSetBit(mSph2[0]); + // OffTgSetBit(mSph2[1]); + // field_0x75D = 0; + // attention_info.flags = 0; + // } + // temp_r0 = mAttackActionID; + // switch (temp_r0) { /* irregular */ + // case 0: + // if (health > 0) { + // setBck(ANM_DAMAGE, 0, 3.0f, 1.0f); + // temp_r3 = &mSound; + // temp_r3.startCreatureVoice(0x70389, -1); + // if (mAcch.ChkGroundHit() != 0) { + // speed.y = 20.0f; + // } + // speedF = 40.0f; + // mAttackActionID = 1; + // } else { + // setBck(ANM_DEAD, 0, 3.0f, 1.0f); + // temp_r3_2 = &mSound; + // temp_r3_2.startCreatureVoice(0x7038A, -1); + // if (mAcch.ChkGroundHit() != 0) { + // speed.y = 20.0f; + // } + // speedF = 30.0f; + // mAttackActionID = 5; + // field_0x75C = 1; + // } + // field_0x75B = 1; + // shape_angle = 0; + // current.angle.y = field_0xEA2 + 0x8000; + // shape_angle.y = field_0xEA2; + // return; + // case 1: + // if (mpMorf->checkFrame(@119044.unkCC) != 0) { + // setPlaySpeed((mDoExt_morf_c *) mpMorf, 0.0f); + // } + // if (mAcch.ChkGroundHit() != 0) { + // field_0x75B = 0; + // mAttackActionID = 2; + // setPlaySpeed((mDoExt_morf_c *) mpMorf, 1.0f); + // return; + // } + // return; + // case 2: + // cLib_chaseF(&speedF, 0.0f, 2.0f); + // if (mpMorf->isStop() != 0) { + // setActionMode(3, 0); + // return; + // } + // break; + // case 5: + // if (mpMorf->checkFrame(@119044.unkD0) != 0) { + // setPlaySpeed((mDoExt_morf_c *) mpMorf, 0.0f); + // } + // if (mAcch.ChkGroundHit() != 0) { + // field_0x75B = 0; + // mAttackActionID = 6; + // setPlaySpeed((mDoExt_morf_c *) mpMorf, 1.0f); + // return; + // } + // break; + // case 6: + // if (mAcch.ChkGroundHit() != 0) { + // cLib_chaseF(&speedF, 0.0f, 2.0f); + // } + // if (mpMorf->isStop() != 0) { + // fopAcM_createDisappear((fopAc_ac_c *) ¤t.pos.x, 0xA, 0, 0x1B); + // fopAcM_delete(this); + // } + // break; + // } } /* 807EB964-807EBAE0 004364 017C+00 3/3 0/0 0/0 .text checkMoveOut__8daE_WW_cFv */ -void daE_WW_c::checkMoveOut() { - // NONMATCHING +int daE_WW_c::checkMoveOut() { + // Change to BOOL ? + + if (field_0x668.absXZ(current.pos) > field_0x6A8) { + setActionMode(5, 0); + return 1; + } + return 0; } /* 807EBAE0-807EC940 0044E0 0E60+00 2/1 0/0 0/0 .text executeMoveOut__8daE_WW_cFv */ void daE_WW_c::executeMoveOut() { - // NONMATCHING +// f32 temp_f1; +// f32 temp_f1_2; +// f32 temp_f31; +// s16 temp_r28; +// s32 temp_r0; +// void **temp_r3; +// void **temp_r3_2; +// void **temp_r3_3; +// void *temp_r1; + +// temp_r1 = sp - 0x50; +// (sp14, daPy_getPlayerActorClass()->current.pos); +// temp_r0 = mAttackActionID; +// switch (temp_r0) { +// case 0: +// field_0x728 = 30; +// sp20 = (l_HIO.mAttackInterval + cM_rndFX(30.0f)); +// field_0x734 = sp24; +// /* fallthrough */ +// case 10: +// temp_f31 = absXZ(sp14, (Vec *) ¤t.pos.x); +// field_0x75A = 1; +// cLib_addCalcAngleS(&shape_angle.y, getNearPlayerAngle(), 4, 0x800, 0x100); +// current.angle.y = shape_angle.y; +// if (absXZ(&field_0x668, sp14) > field_0x6A8) { +// if (temp_f31 < (1200.0f + nREG_F(18) + mDistCheckModifier)) { +// if (field_0x728 == 0) { +// mAttackActionID = 0xB; +// } +// goto block_20; +// } +// if (temp_f31 > (3000.0f + nREG_F(18) + mDistCheckModifier)) { +// if (fopAcM_CheckCondition((fopAc_ac_c *) 4) != 0) { +// fopAcM_delete(this); +// return; +// } +// goto block_20; +// } +// if ((absXZ(&field_0x668, (Vec *) ¤t.pos.x) > (200.0f + field_0x6A8)) && (field_0x728 == 0)) { +// mAttackActionID = 0xB; +// } +// goto block_20; +// } +// if (temp_f31 < (1200.0f + nREG_F(18) + mDistCheckModifier)) { +// if (field_0x728 == 0) { +// mAttackActionID = 0xF; +// } +// goto block_20; +// } +// if ((checkAttackStart() == 0) && (checkWalkStart() == 0)) { +// if (temp_f31 > (1800.0f + nREG_F(18) + mDistCheckModifier)) { +// setBck(ANM_RUN, 2, 3.0f, l_HIO.mRunAnm); +// setActionMode(3, 0x15); +// speedF = l_HIO.mRunSpeed - 10.0f; +// field_0x73C = 30; +// return; +// } +// block_20: +// if (checkSideStep() != 0) { +// mAttackActionID = 0x19; +// speed.y = 0.0f; +// speedF = 0.0f; +// } +// if (mAttackActionID == 0) { +// speedF = 0.0f; +// setBck(ANM_WAIT, 2, 3.0f, 1.0f); +// mAttackActionID = 0xA; +// return; +// } +// /* Duplicate return node #45. Try simplifying control flow for better match */ +// return; +// } +// default: +// return; +// case 11: +// setBck(ANM_RUN, 2, 3.0f, l_HIO.mRunAnm); +// speedF = l_HIO.mRunSpeed; +// mAttackActionID = 0xC; +// field_0x728 = 0x3C; +// /* fallthrough */ +// case 12: +// cLib_addCalcAngleS(&shape_angle.y, cLib_targetAngleY((Vec *) ¤t.pos.x, (Vec *) &field_0x668), 4, 0x800, 0x100); +// current.angle.y = shape_angle.y; +// if ((absXZ(&field_0x668, (Vec *) ¤t.pos.x) < (field_0x6A8 - 100.0f)) && ((field_0x728 == 0) || (absXZ(sp14, (Vec *) ¤t.pos.x) > (1500.0f + nREG_F(18) + mDistCheckModifier)))) { +// setActionMode(3, 2); +// setBck(ANM_TURN, 0, 3.0f, 1.0f); +// temp_r3 = &mSound; +// temp_r3.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); +// return; +// } +// /* Duplicate return node #45. Try simplifying control flow for better match */ +// return; +// case 15: +// setBck(ANM_RUN, 2, 3.0f, l_HIO.mRunAnm); +// speedF = l_HIO.mRunSpeed; +// mAttackActionID = 0x10; +// field_0x728 = 0x3C; +// temp_r28 = cLib_targetAngleY((Vec *) ¤t.pos.x, (Vec *) &field_0x668); +// if ((temp_r28 - fopAcM_searchPlayerAngleY(this)) < 0) { +// field_0x6CC = 0x2000; +// } else { +// field_0x6CC = -0x2000; +// } +// /* fallthrough */ +// case 16: +// cLib_addCalcAngleS(&shape_angle.y, (field_0x6CC + cLib_targetAngleY((Vec *) ¤t.pos.x, (Vec *) &field_0x668)), 4, 0x800, 0x100); +// current.angle.y = shape_angle.y; +// if ((absXZ(&field_0x668, (Vec *) ¤t.pos.x) < (field_0x6A8 - 100.0f)) && ((field_0x728 == 0) || (absXZ(sp14, (Vec *) ¤t.pos.x) > (1500.0f + nREG_F(18) + mDistCheckModifier)))) { +// setActionMode(3, 2); +// setBck(ANM_TURN, 0, 3.0f, 1.0f); +// temp_r3_2 = &mSound; +// temp_r3_2.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); +// return; +// } +// /* Duplicate return node #45. Try simplifying control flow for better match */ +// return; +// case 25: +// field_0x6CC = fopAcM_searchPlayerAngleY(this); +// shape_angle.y = field_0x6CC; +// if (field_0x6C0 == 0) { +// setBck(ANM_SIDESTEP_LEFT, 0, 3.0f, 1.0f); +// temp_f1 = cM_rndFX(2000.0f); +// sp24 = ((field_0x6CC + 0x3800) ^ 0x80000000); +// sp20 = 0x43300000; +// sp28 = (((f32) sp20 - (f32) 0.1f) + temp_f1); +// current.angle.y = sp2C; +// } else { +// setBck(ANM_SIDESTEP_RIGHT, 0, 3.0f, 1.0f); +// temp_f1_2 = cM_rndFX(2000.0f); +// sp2C = ((field_0x6CC - 0x3800) ^ 0x80000000); +// sp28 = 0x43300000; +// sp20 = (((f32) sp28 - (f32) 0.1f) + temp_f1_2); +// current.angle.y = sp24; +// } +// mAttackActionID = 0x1B; +// /* fallthrough */ +// case 27: +// field_0x75A = 1; +// if (mpMorf->checkFrame(5.0f) != 0) { +// field_0x75B = 1; +// speed.y = 20.0f + nREG_F(15); +// speedF = nREG_F(16) + (40.0f + cM_rndFX(5.0f)); +// mAttackActionID = 0x1C; +// temp_r3_3 = &mSound; +// temp_r3_3.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); +// return; +// } +// /* Duplicate return node #45. Try simplifying control flow for better match */ +// return; +// case 28: +// field_0x75A = 1; +// cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 4, 0x800, 0x100); +// if (mAcch.ChkGroundHit() != 0) { +// speedF = 0.0f; +// if (mpMorf->isStop() != 0) { +// setBck(ANM_WAIT, 2, 3.0f, 1.0f); +// mAttackActionID = 0xA; +// } +// } +// /* Duplicate return node #45. Try simplifying control flow for better match */ +// return; +// } } /* ############################################################################################## */ @@ -1041,8 +1634,109 @@ COMPILER_STRIP_GATE(0x807EF864, &lit_6194); #pragma pop /* 807EC940-807ECE58 005340 0518+00 2/2 0/0 0/0 .text checkWalkStart__8daE_WW_cFv */ -void daE_WW_c::checkWalkStart() { - // NONMATCHING +int daE_WW_c::checkWalkStart() { + // Change to bool ? +// f32 temp_f1; +// f32 temp_f1_2; +// f32 temp_f30; +// f32 temp_f30_2; +// f32 var_f31; +// s16 temp_r0; +// s16 temp_r26; +// s32 var_r27; +// s8 var_r28; +// void *temp_r1; + +// temp_r1 = sp - 0x130; +// if (field_0x6B4 != 0) { +// return 0; +// } +// temp_r26 = fopCamM_GetAngleY(dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0))); +// cXyz sp60; +// cXyz sp54; +// (sp48, daPy_getPlayerActorClass()->current.pos); +// if (field_0x740 == 0) { +// field_0x740 = 30; +// spA = (fopAcM_searchPlayerAngleY(this) - 0x8000); +// temp_r0 = temp_r26 - spA; +// if (abs(temp_r0) < 0x3000) { +// if (cM_rnd() < (@119044.unkD4 + nREG_F(20))) { +// return 0; +// } +// spE0 = (@119044.unkD8 + cM_rndFX(@119044.unkDC)); +// var_r27 = spE4; +// if (abs(temp_r0) < 0x2000) { +// if (cM_rnd() < 0.5f) { +// var_r27 = -var_r27; +// } +// } else if (temp_r0 > 0) { +// var_r27 = -var_r27; +// } +// var_f31 = absXZ(sp48, (Vec *) ¤t.pos.x); +// if (var_f31 < (100.0f + (1400.0f + nREG_F(18)))) { +// var_f31 = 100.0f + (1400.0f + nREG_F(18)); +// } +// if (var_f31 > ((1800.0f + nREG_F(18)) - 100.0f)) { +// var_f31 = (1800.0f + nREG_F(18)) - 100.0f; +// } +// set(sp54, 0.0f, 100.0f, var_f31); +// cLib_offsetPos(sp60, sp48, (spA + var_r27), sp54); +// cXyz sp3C(current.pos, 100.0f + current.pos.y, current.pos.z); +// (sp70); +// Set(sp70, sp3C, sp60, NULL); +// if (LineCross(dComIfG_Bgsp(), sp70) == 0) { +// &field_0x65C = sp60 +// setActionMode(6, 0); +// sp8 = 1; +// return sp8; +// } +// goto block_32; +// } +// if (cM_rnd() < (@119044.unkE0 + nREG_F(20))) { +// return 0; +// } +// var_r28 = 0; +// set(sp54, 0.0f, 100.0f, 100.0f + (1500.0f + nREG_F(18))); +// temp_f1 = cM_rndFX(@119044.unkDC); +// spE4 = ((temp_r26 + 0x1400) ^ 0x80000000); +// spE0 = 0x43300000; +// spE8 = (((f32) spE0 - (f32) 0.1f) + temp_f1); +// cLib_offsetPos(sp60, sp48, spEC, sp54); +// (sp24, sp60); +// temp_f30 = checkCreateBg((cXyz) (sp24)); +// if (-1e9f != temp_f30) { +// var_r28 = 1; +// sp64 = temp_f30; +// } +// cXyz sp30; +// temp_f1_2 = cM_rndFX(@119044.unkDC); +// spEC = ((temp_r26 - 0x1400) ^ 0x80000000); +// spE8 = 0x43300000; +// spE0 = (((f32) spE8 - (f32) 0.1f) + temp_f1_2); +// cLib_offsetPos(sp30, sp48, spE4, sp54); +// (sp18, sp30); +// temp_f30_2 = checkCreateBg((cXyz) (sp18)); +// if (-1e9f != temp_f30_2) { +// var_r28 |= 2; +// sp34 = temp_f30_2; +// } +// if (var_r28 == 0) { +// return 0; +// } +// if (var_r28 == 3) { +// if (cM_rnd() < 0.5f) { +// sp60 = sp30 +// } +// } else if (var_r28 == 2) { +// sp60 = sp30 +// } +// (spC, sp60); +// createWolf((cXyz) (spC), 0); +// fopAcM_delete(this); +// return 1; +// } +// block_32: + return 0; } /* ############################################################################################## */ @@ -1055,7 +1749,120 @@ COMPILER_STRIP_GATE(0x807EF868, &lit_6359); /* 807ECE58-807ED674 005858 081C+00 1/1 0/0 0/0 .text executeWalk__8daE_WW_cFv */ void daE_WW_c::executeWalk() { - // NONMATCHING +// f32 temp_f31; +// s16 temp_r3_2; +// s16 var_r28; +// s32 temp_r0; +// void **temp_r3; +// void **temp_r3_3; +// void **temp_r3_4; +// void *temp_r1; + +// temp_r1 = sp - 0x50; +// temp_f31 = absXZ(daPy_getPlayerActorClass()->current.pos, (Vec *) ¤t.pos.x); +// temp_r0 = mAttackActionID; +// if (temp_r0 != 0xA) { +// if (temp_r0 < 0xA) { +// if (temp_r0 != 1) { +// if (temp_r0 < 1) { +// if (temp_r0 < 0) { +// return; +// } +// setBck(ANM_WALK, 2, 3.0f, l_HIO.unk14); +// mAttackActionID = 1; +// field_0x728 = 150; +// break; +// } +// /* Duplicate return node #44. Try simplifying control flow for better match */ +// return; +// } +// block_9: +// if ((mpMorf->checkFrame(5.0f) != 0) || (mpMorf->checkFrame(10.0f) != 0) || (mpMorf->checkFrame(15.0f) != 0) || (mpMorf->checkFrame(20.0f) != 0)) { +// temp_r3 = &mSound; +// temp_r3.startCreatureSound(Z2SE_EN_WW_FOOTNOTE, 0, -1); +// } +// field_0x75A = 1; +// var_r28 = cLib_targetAngleY((Vec *) ¤t.pos.x, (Vec *) &field_0x65C); +// cLib_addCalcAngleS(¤t.angle.y, var_r28, 8, 0x400, 0x100); +// temp_r3_2 = fopAcM_searchPlayerAngleY(this); +// if ((var_r28 - temp_r3_2) > 0x4000) { +// var_r28 = temp_r3_2 + 0x4000; +// } +// if ((var_r28 - temp_r3_2) < -0x4000) { +// var_r28 = temp_r3_2 - 0x4000; +// } +// cLib_addCalcAngleS(&shape_angle.y, var_r28, 8, 0x400, 0x100); +// cLib_chaseF(&speedF, 5.0f + nREG_F(1), 1.0f); +// if ((absXZ(&field_0x65C, (Vec *) ¤t.pos.x) < 150.0f) || (field_0x728 == 0)) { +// setActionMode(3, 2); +// } +// if (temp_f31 < (1400.0f + nREG_F(18) + mDistCheckModifier)) { +// if ((field_0x730 != 0) || (temp_f31 < (1200.0f + nREG_F(18) + mDistCheckModifier))) { +// setActionMode(3, 0xC); +// setBck(ANM_RUN, 2, 3.0f, l_HIO.mRunAnm); +// } else { +// setBck(ANM_BACKSTEP, 0, 3.0f, 1.0f); +// temp_r3_3 = &mSound; +// temp_r3_3.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); +// setActionMode(3, 0xF); +// speedF = -40.0f; +// speed.y = 25.0f; +// field_0x730 = 0x3C; +// field_0x75B = 1; +// } +// } else if (temp_f31 > (1800.0f + nREG_F(18) + mDistCheckModifier)) { +// setBck(ANM_RUN, 2, 3.0f, l_HIO.mRunAnm); +// setActionMode(3, 0x14); +// speedF = l_HIO.mRunSpeed - 10.0f; +// } +// if (checkSideStep() != 0) { +// setActionMode(3, 0x19); +// speed.y = 0.0f; +// speedF = 0.0f; +// } +// if (checkMoveOut() != 0) { +// return; +// } +// /* Duplicate return node #44. Try simplifying control flow for better match */ +// return; +// } +// if (temp_r0 < 0xC) { +// goto block_33; +// } +// /* Duplicate return node #44. Try simplifying control flow for better match */ +// return; +// } +// setBck(ANM_RUN, 2, 3.0f, l_HIO.mRunAnm); +// mAttackActionID = 0xB; +// field_0x728 = 150; +// block_33: +// daPy_getPlayerActorClass(); +// spC = checkNowWolf__9daPy_py_cFv; +// if (spC((daPy_py_c *) checkNowWolf__9daPy_py_cFv) != 0) { +// speedF = l_HIO.mWolfEscapeSpeed; +// } else { +// speedF = l_HIO.mLinkEscapeSpeed; +// } +// sp1C = calcMoveDir(temp_r1 + 8, cLib_targetAngleY((Vec *) ¤t.pos.x, (Vec *) &field_0x65C)); +// if (sp1C != 0) { +// cLib_addCalcAngleS(&shape_angle.y, sp8, 4, 0x800, 0x200); +// } else { +// cLib_addCalcAngleS(&shape_angle.y, sp8, 8, 0x200, 0x80); +// } +// current.angle.y = shape_angle.y; +// if ((abs(&field_0x65C, (Vec *) ¤t.pos.x) < @119044.unkE4) || (field_0x728 == 0)) { +// if (temp_f31 > (1400.0f + nREG_F(18) + mDistCheckModifier)) { +// setActionMode(3, 2); +// setBck(ANM_TURN, 0, 3.0f, 1.0f); +// temp_r3_4 = &mSound; +// temp_r3_4.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); +// return; +// } +// setActionMode(3, 0xC); +// setBck(ANM_RUN, 2, 3.0f, l_HIO.mRunAnm); +// /* Duplicate return node #44. Try simplifying control flow for better match */ +// return; +// } } /* ############################################################################################## */ @@ -1068,17 +1875,129 @@ COMPILER_STRIP_GATE(0x807EF86C, &lit_6385); /* 807ED674-807ED78C 006074 0118+00 1/1 0/0 0/0 .text eWW_posMoveF__8daE_WW_cFv */ void daE_WW_c::eWW_posMoveF() { - // NONMATCHING + if (field_0x75B != 0 && speed.y < 0.0f && mAcch.ChkGroundHit()) { + field_0x75B = 0; + } + switch (field_0x75B) { + case 0: + gravity = -30.0f + nREG_F(0); + break; + case 1: + gravity = -5.0f; + break; + case 2: + gravity = -3.0f; + break; + } + f32 temp_f31 = speedF; + if (mAcch.ChkGroundHit()) { + cM3dGPla plane; + dComIfG_Bgsp().GetTriPla(mAcch.m_gnd, &plane); + speedF *= plane.GetNP()->y; + } + fopAcM_posMoveF(this,mCcStts.GetCCMoveP()); + speedF = temp_f31; } /* 807ED78C-807EDA78 00618C 02EC+00 2/1 0/0 0/0 .text action__8daE_WW_cFv */ void daE_WW_c::action() { - // NONMATCHING +// s16 temp_r26; +// void **temp_r3; +// void **temp_r3_2; +// void *temp_r1; + +// temp_r1 = sp - 0xA0; +// field_0x75A = 0; +// setGroundAngle(); +// damage_check(); +// OffAtSetBit(mSph1[1]); +// mSph2[0].SetTgType(, 0xD8000012); +// mSph2[1].SetTgType(0xD8000012); + int var_r29 = 0; +// temp_r26 = shape_angle.y; + switch (mActionID) { + case ACTION_EXECUTE_MASTER: + executeMaster(); + return; + + case ACTION_EXECUTE_WAIT: + executeWait(); + /* Fallthrough */ + default: + break; + + case ACTION_EXECUTE_ATTACK: + executeAttack(); + var_r29 = 1; + break; + + case ACTION_EXECUTE_CHASE: + executeChase(); + var_r29 = 1; + break; + + case ACTION_EXECUTE_DAMAGE: + executeDamage(); + var_r29 = 1; + break; + + case ACTION_EXECUTE_MOVE_OUT: + executeMoveOut(); + break; + + case ACTION_EXECUTE_WALK: + executeWalk(); + var_r29 = 1; + break; + } + + // setBlurEffect(); + // field_0x759 = 0; + // if (shape_angle.y != temp_r26) { + // if ((shape_angle.y - temp_r26) < 0) { + // field_0x759 = 1; + // } else { + // field_0x759 = 2; + // } + // } + // setLinkSearch((Z2CreatureEnemy *) &mSound, (-var_r29 | var_r29) >> 0x1F); + // if (field_0x75D != 0) { + // (sp10); + // Set(sp10, dComIfGp_getCamera(0) + 0xDC, &attention_info.position, this); + // if (LineCross(dComIfG_Bgsp(), sp10) != 0) { + // attention_info.flags &= 0xFFFFFFFB; + // } else { + // attention_info.flags |= 4; + // } + // } + // eWW_posMoveF(); + // CrrPos(&mAcch, dComIfG_Bgsp()); + // play(mpMorf, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + // if (checkBck(0xB) != 0) { + // if ((mpMorf->checkFrame(0.0f) != 0) || (mpMorf->checkFrame(@119044.unkEC) != 0) || (mpMorf->checkFrame(8.0f) != 0) || (mpMorf->checkFrame(@119044.unkF0) != 0)) { + // temp_r3 = &mSound; + // temp_r3.startCreatureSound(Z2SE_EN_WW_FOOTNOTE, 0, -1); + // return; + // } + // } else { + // if ((checkBck(0xF) != 0) && (mpMorf->checkFrame(5.0f) != 0)) { + // temp_r3_2 = &mSound; + // temp_r3_2.startCreatureVoice(0x70388, -1); + // } + // return; + // } } /* 807EDA78-807EDB00 006478 0088+00 1/1 0/0 0/0 .text mtx_set__8daE_WW_cFv */ void daE_WW_c::mtx_set() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(field_0x674); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::XrotM(field_0x6CE); + mDoMtx_stack_c::scaleM(l_HIO.mModelSize, l_HIO.mModelSize, l_HIO.mModelSize); + + mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + mpMorf->modelCalc(); } /* ############################################################################################## */ @@ -1105,447 +2024,597 @@ COMPILER_STRIP_GATE(0x807EF878, &lit_6500); /* 807EDB00-807EDCC4 006500 01C4+00 1/1 0/0 0/0 .text cc_set__8daE_WW_cFv */ void daE_WW_c::cc_set() { - // NONMATCHING + cXyz sp8; + if (mActionID != ACTION_EXECUTE_MASTER) { + J3DModel* model_p = mpMorf->getModel(); + mDoMtx_stack_c::copy(model_p->getAnmMtx(4)); + mDoMtx_stack_c::multVecZero(&eyePos); + attention_info.position = eyePos; + attention_info.position.y += 20.0f; + mDoMtx_stack_c::copy(model_p->getAnmMtx(1)); + mDoMtx_stack_c::transM(0.0f, -20.0f, 0.0f); + mDoMtx_stack_c::multVecZero(&sp8); + mSph1[0].SetC(sp8); + mSph1[0].SetR(40.0f); + dComIfG_Ccsp()->Set(&mSph1[0]); + mSph2[0].SetC(sp8); + mSph2[0].SetR(70.0f + nREG_F(17)); + dComIfG_Ccsp()->Set(&mSph2[0]); + mDoMtx_stack_c::copy(model_p->getAnmMtx(4)), + mDoMtx_stack_c::transM(-10.0f, -20.0f, 0.0f); + mDoMtx_stack_c::multVecZero(&sp8); + mSph1[1].SetC(sp8); + mSph1[1].SetR(40.0f); + dComIfG_Ccsp()->Set(&mSph1[1]); + mSph2[1].SetC(sp8); + mSph2[1].SetR(70.0f + nREG_F(17)); + dComIfG_Ccsp()->Set(&mSph2[1]); + } } /* 807EDCC4-807EDE6C 0066C4 01A8+00 1/1 0/0 0/0 .text execute__8daE_WW_cFv */ -void daE_WW_c::execute() { - // NONMATCHING +int daE_WW_c::execute() { +// mDoMtx_stack_c *temp_ret; +// s32 temp_cr0_eq; +// s32 var_r29; +// void *temp_r1; +// void *temp_r4; + +// temp_r1 = sp - 0x30; +// if (field_0x728 != 0) { +// field_0x728 -= 1; +// } +// if (field_0x72C != 0) { +// field_0x72C -= 1; +// } +// if (field_0x724 != 0) { +// field_0x724 -= 1; +// } +// if (field_0x730 != 0) { +// field_0x730 -= 1; +// } +// if (field_0x734 != 0) { +// field_0x734 -= 1; +// } +// if (field_0x738 != 0) { +// field_0x738 -= 1; +// } +// if (field_0x73C != 0) { +// field_0x73C -= 1; +// } +// if (field_0x740 != 0) { +// field_0x740 -= 1; +// } +// var_r29 = 0; +// loop_20: +// temp_cr0_eq = var_r29 == 0; +// var_r29++; +// if (temp_cr0_eq == 0) { +// if ((this + (var_r29 * 4))->unk77C != 0) { +// temp_r4 = this + (var_r29 * 4); +// temp_r4->unk77C = (temp_r4->unk77C - 1); +// } +// goto loop_20; +// } +// action(); +// mtx_set(); +// cc_set(); +// setHeadAngle(); +// if (l_HIO.mMoveRangeDebugDisp != 0) { +// fopAcM_OffStatus((fopAc_ac_c *) 0x100); +// } else { +// fopAcM_OnStatus((fopAc_ac_c *) 0x100); +// } +// cXyz sp14; +// temp_ret = mpMorf->getModel()->getAnmMtx(2); +// mDoMtx_stack_c::copy(temp_ret, (f32 (*)[4]) (u64) temp_ret); +// mDoMtx_stack_c::multVecZero(sp14, (Vec *) mDoMtx_stack_c::transM((mDoMtx_stack_c *) &g_regHIO, nREG_F(0), nREG_F(1), nREG_F(2))); +// cXyz temp_r1 + 8(1.0f + nREG_F(3), 1.0f + nREG_F(4), 2.0f + nREG_F(5)); +// setMidnaBindEffect((fopEn_enemy_c *) (Z2CreatureEnemy *) &mSound, sp14, temp_r1 + 8); + return 1; } /* 807EDE6C-807EDE8C 00686C 0020+00 2/1 0/0 0/0 .text daE_WW_Execute__FP8daE_WW_c */ -static void daE_WW_Execute(daE_WW_c* param_0) { - // NONMATCHING +static int daE_WW_Execute(daE_WW_c* i_this) { + return i_this->execute(); } /* ############################################################################################## */ /* 807EF87C-807EF884 00010C 0006+02 0/1 0/0 0/0 .rodata @6556 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_6556[6 + 2 /* padding */] = { - 0x00, - 0x00, - 0xE0, - 0x00, - 0x20, - 0x00, - /* padding */ - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x807EF87C, &lit_6556); -#pragma pop +// #pragma push +// #pragma force_active on +// SECTION_RODATA static u8 const lit_6556[6 + 2 /* padding */] = { +// 0x00, +// 0x00, +// 0xE0, +// 0x00, +// 0x20, +// 0x00, +// /* padding */ +// 0x00, +// 0x00, +// }; +// COMPILER_STRIP_GATE(0x807EF87C, &lit_6556); +// #pragma pop -/* 807EF8B8-807EF8B8 000148 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_807EF8BD = "D_MN11"; -#pragma pop +// /* 807EF8B8-807EF8B8 000148 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +// #pragma push +// #pragma force_active on +// SECTION_DEAD static char const* const stringBase_807EF8BD = "D_MN11"; +// #pragma pop /* 807EDE8C-807EE438 00688C 05AC+00 2/2 0/0 0/0 .text calcMoveDir__8daE_WW_cFPss */ -void daE_WW_c::calcMoveDir(s16* param_0, s16 param_1) { - // NONMATCHING +int daE_WW_c::calcMoveDir(s16* param_0, s16 param_1) { +// s16 temp_r3; +// s16 var_r29; +// s32 var_r27; +// void *temp_r1; + +// temp_r1 = sp - 0x100; +// (sp70); +// (sp58); +// sp10 = @119044.eventInfo; +// sp14 = (&@119044 + 0xF8)->unk4; +// cXyz sp40; +// cXyz sp34; +// cXyz sp28(0.0f, 0.0f, 500.0f); +// set(sp34, current.pos, 100.0f + current.pos.y, current.pos.z); +// var_r27 = 0; +// loop_5: +// if (var_r27 < 3) { +// *(sp4C + (var_r27 * 4)) = 1000.0f; +// cLib_offsetPos(sp40, sp34, (shape_angle.y + *(sp10 + (var_r27 * 2))), sp28); +// Set(sp70, sp34, sp40, NULL); +// *(sp20 + (var_r27 * 2)) = 0; +// if (LineCross(dComIfG_Bgsp(), sp70) != 0) { +// *(sp4C + (var_r27 * 4)) = abs(¤t.pos.x, GetCross(sp70)); +// GetTriPla(dComIfG_Bgsp(), sp84, sp58); +// if (sp5C < 0.5f) { +// temp_r3 = cM_atan2s(sp58, sp60); +// *(sp18 + (var_r27 * 2)) = temp_r3; +// (this + (var_r27 * 2))->unk788 = temp_r3; +// *(sp20 + (var_r27 * 2)) = 1; +// (this + (var_r27 * 4))->unk77C = (nREG_S(0) + 30); +// } +// } +// var_r27++; +// goto loop_5; +// } +// if ((strcmp("D_MN11", dComIfGp_getStartStageName()) == 0) && (dComIfGp_getStartStageRoomNo() == 4)) { +// if (sp20 != 0) { +// field_0x74C = 0; +// field_0x748 = 0; +// } else { +// if (field_0x748 != 0) { +// sp1A = field_0x752; +// sp22 = 1; +// } +// if (field_0x74C != 0) { +// sp1C = field_0x754; +// sp24 = 1; +// } +// } +// } +// if ((sp22 != 0) && (sp24 != 0)) { +// if (sp20 != 0) { +// if (field_0x759 == 1) { +// var_r29 = shape_angle.y - 0x2000; +// } else { +// var_r29 = shape_angle.y + 0x2000; +// } +// } else if (field_0x759 == 1) { +// var_r29 = shape_angle.y - 0x2000; +// } else if (field_0x759 == 2) { +// var_r29 = shape_angle.y + 0x2000; +// } else { +// var_r29 = param_1; +// } +// field_0x738 = 30; +// } else if (sp20 != 0) { +// if (sp22 != 0) { +// var_r29 = shape_angle.y + 0x2000; +// } else if (sp24 != 0) { +// var_r29 = shape_angle.y - 0x2000; +// } else if ((sp18 - shape_angle.y) > 0) { +// var_r29 = shape_angle.y + 0x2000; +// } else { +// var_r29 = shape_angle.y - 0x2000; +// } +// if ((field_0x738 == 0) && (abs((fopAcM_searchPlayerAngleY(this) - var_r29)) < 0x4000)) { +// var_r29 = param_1; +// } +// } else if (sp22 != 0) { +// if ((sp1A - shape_angle.y) < 0) { +// var_r29 = sp1A + 0x4000; +// } else { +// var_r29 = sp1A - 0x4000; +// } +// if ((field_0x738 == 0) && (abs((fopAcM_searchPlayerAngleY(this) - var_r29)) < 0x2000)) { +// var_r29 = sp1A; +// } +// if (sp50 < @119044.unkE4) { +// var_r29 = sp1A; +// } +// } else if (sp24 != 0) { +// if ((sp1C - shape_angle.y) < 0) { +// var_r29 = sp1C + 0x4000; +// } else { +// var_r29 = sp1C - 0x4000; +// } +// if ((field_0x738 == 0) && (abs((fopAcM_searchPlayerAngleY(this) - var_r29)) < 0x2000)) { +// var_r29 = sp1C; +// } +// if (sp54 < @119044.unkE4) { +// var_r29 = sp1C; +// } +// } else { +// var_r29 = param_1; +// } +// *param_0 = var_r29; +// spC = 0; +// loop_60: +// if (spC >= 3) { +// sp8 = 0; +// return sp8; +// } +// if (*(sp20 + (spC * 2)) != 0) { +// sp9 = 1; +// return sp9; +// } +// spC = (spC + 1); +// goto loop_60; } /* 807EE438-807EE440 006E38 0008+00 1/0 0/0 0/0 .text daE_WW_IsDelete__FP8daE_WW_c */ -static bool daE_WW_IsDelete(daE_WW_c* param_0) { - return true; +static int daE_WW_IsDelete(daE_WW_c* param_0) { + return 1; } /* 807EE440-807EE4B4 006E40 0074+00 1/1 0/0 0/0 .text _delete__8daE_WW_cFv */ -void daE_WW_c::_delete() { - // NONMATCHING +int daE_WW_c::_delete() { + dComIfG_resDelete(&mPhase, "E_WW"); + if (field_0xEC4 != 0) { + l_HIOInit = false; + mDoHIO_DELETE_CHILD(l_HIO.field_0x04); + } + if (heap != 0) { + mSound.deleteObject(); + } + return 1; } /* 807EE4B4-807EE4D4 006EB4 0020+00 1/0 0/0 0/0 .text daE_WW_Delete__FP8daE_WW_c */ -static void daE_WW_Delete(daE_WW_c* param_0) { - // NONMATCHING +static int daE_WW_Delete(daE_WW_c* i_this) { + fopAcM_RegisterDeleteID(i_this, "E_WW"); + return static_cast(i_this)->_delete(); } /* 807EE4D4-807EE61C 006ED4 0148+00 1/1 0/0 0/0 .text CreateHeap__8daE_WW_cFv */ -void daE_WW_c::CreateHeap() { - // NONMATCHING +int daE_WW_c::CreateHeap() { +// s32 sp10; +// s32 spC; +// void **sp8; +// J3DAnmTransform *temp_r7; +// J3DModel *temp_r3_2; +// JUTAssertion *temp_r3; +// mDoExt_McaMorfSO *var_r26; +// u16 var_r29; + +// temp_r3 = dComIfG_getObjectRes((s8 *) (@LOCAL@setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz@e_prim + 0x138), 0x13); +// if (temp_r3 != NULL) { + +// } else { +// showAssert(getSDevice(temp_r3), (@LOCAL@setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz@e_prim + 0x2D0), (s8 *)0xB07, (@LOCAL@setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz@e_prim + 0x2E0)); +// OSPanic(@LOCAL@setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz@e_prim + 0x2D0, 0xB07, @LOCAL@setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz@e_prim + 0x2F0); +// } +// var_r26 = (0x58); +// if (var_r26 != NULL) { +// temp_r7 = dComIfG_getObjectRes((s8 *) (@LOCAL@setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz@e_prim + 0x138), 4); +// sp8 = &mSound; +// spC = 0x80000; +// sp10 = 0x11000084; +// var_r26 = (var_r26, (J3DModelData *) temp_r3, NULL, NULL, temp_r7, 0, 1.0f, 0, -1, M2C_ERROR(/* Unable to find stack arg 0x24 in block */), M2C_ERROR(/* Unable to find stack arg 0x28 in block */), M2C_ERROR(/* Unable to find stack arg 0x2c in block */)); +// } +// mpMorf = var_r26; +// if (((mDoExt_McaMorfSO *) mpMorf == NULL) || (mpMorf->getModel() == NULL)) { +// return 0; +// } +// temp_r3_2 = mpMorf->getModel(); +// setUserArea(temp_r3_2, this); +// var_r29 = 1; +// loop_13: +// if (var_r29 < getJointNum(temp_r3_2->getModelData())) { +// if ((var_r29 == 3) || (var_r29 == 4)) { +// setCallBack(getJointNodePointer(temp_r3_2->getModelData(), var_r29), (s32 (*)(J3DJoint *, s32)) JointCallBack__8daE_WW_cFP8J3DJointi); +// } +// var_r29++; +// goto loop_13; +// } + return 1; } /* 807EE61C-807EE63C 00701C 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* i_this) { + daE_WW_c* a_this = (daE_WW_c*) i_this; + return a_this->CreateHeap(); } /* ############################################################################################## */ /* 807EF884-807EF888 000114 0004+00 0/2 0/0 0/0 .rodata @6946 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6946 = -200.0f; -COMPILER_STRIP_GATE(0x807EF884, &lit_6946); -#pragma pop +// #pragma push +// #pragma force_active on +// SECTION_RODATA static f32 const lit_6946 = -200.0f; +// COMPILER_STRIP_GATE(0x807EF884, &lit_6946); +// #pragma pop -/* 807EF888-807EF88C 000118 0004+00 0/1 0/0 0/0 .rodata @6947 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6947 = 65.0f; -COMPILER_STRIP_GATE(0x807EF888, &lit_6947); -#pragma pop +// /* 807EF888-807EF88C 000118 0004+00 0/1 0/0 0/0 .rodata @6947 */ +// #pragma push +// #pragma force_active on +// SECTION_RODATA static f32 const lit_6947 = 65.0f; +// COMPILER_STRIP_GATE(0x807EF888, &lit_6947); +// #pragma pop -/* 807EF88C-807EF890 00011C 0004+00 0/1 0/0 0/0 .rodata @6948 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6948 = 130.0f; -COMPILER_STRIP_GATE(0x807EF88C, &lit_6948); -#pragma pop +// /* 807EF88C-807EF890 00011C 0004+00 0/1 0/0 0/0 .rodata @6948 */ +// #pragma push +// #pragma force_active on +// SECTION_RODATA static f32 const lit_6948 = 130.0f; +// COMPILER_STRIP_GATE(0x807EF88C, &lit_6948); +// #pragma pop /* 807EF890-807EF898 000120 0008+00 0/1 0/0 0/0 .rodata @6950 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_6950[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x807EF890, &lit_6950); -#pragma pop +// #pragma push +// #pragma force_active on +// SECTION_RODATA static u8 const lit_6950[8] = { +// 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +// }; +// COMPILER_STRIP_GATE(0x807EF890, &lit_6950); +// #pragma pop -/* 807EF8B8-807EF8B8 000148 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_807EF8C4 = "E_ww"; -#pragma pop +// /* 807EF8B8-807EF8B8 000148 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +// #pragma push +// #pragma force_active on +// SECTION_DEAD static char const* const stringBase_807EF8C4 = "E_ww"; +// #pragma pop + +u8 lbl_237_bss_0; /* 807EE63C-807EEB38 00703C 04FC+00 1/1 0/0 0/0 .text create__8daE_WW_cFv */ -void daE_WW_c::create() { - // NONMATCHING -} +int daE_WW_c::create() { + // s32 sp8; + // cXyz *temp_r22; + // cXyz *temp_r23; + // cXyz *temp_r4; + // daE_WW_c *temp_r3_2; + // int temp_r3 = 0; + // u8 var_r26; + // u8 var_r27; + // void *temp_r1; -/* 807EEB38-807EEC04 007538 00CC+00 1/1 0/0 0/0 .text __dt__8dCcD_SphFv */ -// dCcD_Sph::~dCcD_Sph() { -extern "C" void __dt__8dCcD_SphFv() { - // NONMATCHING -} + // temp_r1 = sp - 0x50; + fopAcM_SetupActor(this, daE_WW_c); -/* 807EEC04-807EEC88 007604 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_SphFv */ -// dCcD_Sph::dCcD_Sph() { -extern "C" void __ct__8dCcD_SphFv() { - // NONMATCHING -} - -/* 807EEC88-807EECD0 007688 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 807EECD0-807EED18 0076D0 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 807EED18-807EED74 007718 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 807EED74-807EEDE4 007774 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 807EEDE4-807EEE54 0077E4 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */ -// dBgS_AcchCir::~dBgS_AcchCir() { -extern "C" void __dt__12dBgS_AcchCirFv() { - // NONMATCHING + int phase_state = dComIfG_resLoad(&mPhase, "E_WW"); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("E_WW PARAM %x\n", fopAcM_GetParam(this)); + field_0x6B4 = fopAcM_GetParam(this) & 0xF; + if (field_0x6B4 == 0xF) { + field_0x6B4 = 0; + } + u8 var_r26 = fopAcM_GetParam(this) >> 4; // Arg1 ? + if (var_r26 == 0xFF || var_r26 == 0) { + var_r26 = 30; + } + field_0x6A8 = 100.0f * var_r26; + field_0x6B5 = fopAcM_GetParam(this) >> 0xC; + if (field_0x6B5 == 0) { + field_0x6B5 = 5; + } + field_0x6B6 = (fopAcM_GetParam(this) >> 0x14) & 0xF; + if (field_0x6B6 == 0xF || field_0x6B6 == 0) { + field_0x6B6 = 3; + } + if (field_0x6B6 > 10) { + field_0x6B6 = 10; + } + field_0x757 = (fopAcM_GetParam(this) >> 0x18) & 0xF; + if (field_0x757 == 0xF || field_0x757 == 0) { + field_0x757 = 1; + } else { + if (field_0x757 == 2) { + field_0x758 = 1; + } + field_0x757 = 0; + } + u8 var_r27 = current.angle.x; + if (var_r27 == 0xFF || var_r27 == 0) { + if (field_0x6B4 == 0) { + var_r27 = 5; + } else { + var_r27 = 10; + } + } + field_0x6AC = 100.0f * var_r27; + shape_angle.x = 0; + current.angle.x = 0; + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x1F00)) { + return cPhs_ERROR_e; + } + if (l_HIOInit == false) { + l_HIOInit = true; + field_0xEC4 = 1; + l_HIO.field_0x04 = mDoHIO_CREATE_CHILD("ホワイトウルフォス", (JORReflexible*)&l_HIO); + } + fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -200.0f, -200.0f, -200.0f); + fopAcM_SetMax(this, 200.0f, 200.0f, 200.0f); + if (field_0x757 != 0) { + setActionMode(0, 0); + } else { + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL); + mAcchCir.SetWall(65.0f, 130.0f); + mAcch.OnLineCheck(); + if (field_0x6B4 == 1) { + health = 1; + field_0x560 = 1; + } else { + health = 100; + field_0x560 = 100; + } + mCcStts.Init(0xFE, 0, this); + field_0x75D = 1; + attention_info.flags = 4; + mSph1[0].Set(cc_ww_src); + mSph1[0].SetStts(&mCcStts); + mSph1[1].Set(cc_ww_src); + mSph1[1].SetStts(&mCcStts); + mSph2[0].Set(cc_ww_tg_src); + mSph2[0].SetStts(&mCcStts); + mSph2[0].OnTgNoHitMark(); + mSph2[1].Set(cc_ww_tg_src); + mSph2[1].SetStts(&mCcStts); + mSph2[1].OnTgNoHitMark(); + mSound.init(¤t.pos, &eyePos, 3, 1); + mSound.setEnemyName("E_ww"); + mpSound = &mSound; + field_0xEB2 = 1; + gravity = -5.0f; + mDistCheckModifier = cM_rndFX(100.0f); + field_0x668 = home.pos; + if (fopAcM_SearchByID(fopAcM_GetLinkId(this)) != 0) { + field_0x668 = current.pos; + } + setActionMode(1, 0); + } + attention_info.distances[fopAc_attn_BATTLE_e] = 0x34; + daE_WW_Execute(this); + } + return phase_state; } /* 807EEE54-807EEE74 007854 0020+00 1/0 0/0 0/0 .text daE_WW_Create__FP8daE_WW_c */ -static void daE_WW_Create(daE_WW_c* param_0) { - // NONMATCHING -} - -/* 807EEE74-807EEEBC 007874 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 807EEEBC-807EEF04 0078BC 0048+00 2/1 0/0 0/0 .text __dt__12daE_WW_HIO_cFv */ -daE_WW_HIO_c::~daE_WW_HIO_c() { - // NONMATCHING +static int daE_WW_Create(daE_WW_c* i_this) { + return static_cast(i_this)->create(); } /* ############################################################################################## */ /* 807EF898-807EF89C 000128 0004+00 0/1 0/0 0/0 .rodata @7175 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7175 = -700.0f; -COMPILER_STRIP_GATE(0x807EF898, &lit_7175); -#pragma pop +// #pragma push +// #pragma force_active on +// SECTION_RODATA static f32 const lit_7175 = -700.0f; +// COMPILER_STRIP_GATE(0x807EF898, &lit_7175); +// #pragma pop -/* 807EF89C-807EF8A0 00012C 0004+00 0/1 0/0 0/0 .rodata @7176 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7176 = -1000.0f; -COMPILER_STRIP_GATE(0x807EF89C, &lit_7176); -#pragma pop +// /* 807EF89C-807EF8A0 00012C 0004+00 0/1 0/0 0/0 .rodata @7176 */ +// #pragma push +// #pragma force_active on +// SECTION_RODATA static f32 const lit_7176 = -1000.0f; +// COMPILER_STRIP_GATE(0x807EF89C, &lit_7176); +// #pragma pop -/* 807EF8A0-807EF8A4 000130 0004+00 0/1 0/0 0/0 .rodata @7177 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7177 = -300.0f; -COMPILER_STRIP_GATE(0x807EF8A0, &lit_7177); -#pragma pop +// /* 807EF8A0-807EF8A4 000130 0004+00 0/1 0/0 0/0 .rodata @7177 */ +// #pragma push +// #pragma force_active on +// SECTION_RODATA static f32 const lit_7177 = -300.0f; +// COMPILER_STRIP_GATE(0x807EF8A0, &lit_7177); +// #pragma pop -/* 807EF8A4-807EF8A8 000134 0004+00 0/1 0/0 0/0 .rodata @7178 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7178 = -100.0f; -COMPILER_STRIP_GATE(0x807EF8A4, &lit_7178); -#pragma pop +// /* 807EF8A4-807EF8A8 000134 0004+00 0/1 0/0 0/0 .rodata @7178 */ +// #pragma push +// #pragma force_active on +// SECTION_RODATA static f32 const lit_7178 = -100.0f; +// COMPILER_STRIP_GATE(0x807EF8A4, &lit_7178); +// #pragma pop -/* 807EF8A8-807EF8AC 000138 0004+00 0/1 0/0 0/0 .rodata @7179 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7179 = 400.0f; -COMPILER_STRIP_GATE(0x807EF8A8, &lit_7179); -#pragma pop +// /* 807EF8A8-807EF8AC 000138 0004+00 0/1 0/0 0/0 .rodata @7179 */ +// #pragma push +// #pragma force_active on +// SECTION_RODATA static f32 const lit_7179 = 400.0f; +// COMPILER_STRIP_GATE(0x807EF8A8, &lit_7179); +// #pragma pop -/* 807EF8AC-807EF8B0 00013C 0004+00 0/1 0/0 0/0 .rodata @7180 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7180 = -400.0f; -COMPILER_STRIP_GATE(0x807EF8AC, &lit_7180); -#pragma pop +// /* 807EF8AC-807EF8B0 00013C 0004+00 0/1 0/0 0/0 .rodata @7180 */ +// #pragma push +// #pragma force_active on +// SECTION_RODATA static f32 const lit_7180 = -400.0f; +// COMPILER_STRIP_GATE(0x807EF8AC, &lit_7180); +// #pragma pop -/* 807EF8B0-807EF8B4 000140 0004+00 0/1 0/0 0/0 .rodata @7181 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7181 = 250.0f; -COMPILER_STRIP_GATE(0x807EF8B0, &lit_7181); -#pragma pop +// /* 807EF8B0-807EF8B4 000140 0004+00 0/1 0/0 0/0 .rodata @7181 */ +// #pragma push +// #pragma force_active on +// SECTION_RODATA static f32 const lit_7181 = 250.0f; +// COMPILER_STRIP_GATE(0x807EF8B0, &lit_7181); +// #pragma pop -/* 807EF8B4-807EF8B8 000144 0004+00 0/1 0/0 0/0 .rodata @7182 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_7182 = -250.0f; -COMPILER_STRIP_GATE(0x807EF8B4, &lit_7182); -#pragma pop +// /* 807EF8B4-807EF8B8 000144 0004+00 0/1 0/0 0/0 .rodata @7182 */ +// #pragma push +// #pragma force_active on +// SECTION_RODATA static f32 const lit_7182 = -250.0f; +// COMPILER_STRIP_GATE(0x807EF8B4, &lit_7182); +// #pragma pop -/* 807EEF04-807EF2CC 007904 03C8+00 0/0 1/0 0/0 .text __sinit_d_a_e_ww_cpp */ -void __sinit_d_a_e_ww_cpp() { - // NONMATCHING -} +// /* 807EEF04-807EF2CC 007904 03C8+00 0/0 1/0 0/0 .text __sinit_d_a_e_ww_cpp */ +// void __sinit_d_a_e_ww_cpp() { +// // NONMATCHING +// } -#pragma push -#pragma force_active on -REGISTER_CTORS(0x807EEF04, __sinit_d_a_e_ww_cpp); -#pragma pop +// #pragma push +// #pragma force_active on +// REGISTER_CTORS(0x807EEF04, __sinit_d_a_e_ww_cpp); +// #pragma pop -/* 807EF2CC-807EF2D4 007CCC 0008+00 1/0 0/0 0/0 .text @20@__dt__14dBgS_ObjGndChkFv */ -static void func_807EF2CC() { - // NONMATCHING -} +// /* 807EF2CC-807EF2D4 007CCC 0008+00 1/0 0/0 0/0 .text @20@__dt__14dBgS_ObjGndChkFv */ +// static void func_807EF2CC() { +// // NONMATCHING +// } -/* 807EF2D4-807EF2DC 007CD4 0008+00 1/0 0/0 0/0 .text @76@__dt__14dBgS_ObjGndChkFv */ -static void func_807EF2D4() { - // NONMATCHING -} +// /* 807EF2D4-807EF2DC 007CD4 0008+00 1/0 0/0 0/0 .text @76@__dt__14dBgS_ObjGndChkFv */ +// static void func_807EF2D4() { +// // NONMATCHING +// } -/* 807EF2DC-807EF2E4 007CDC 0008+00 1/0 0/0 0/0 .text @60@__dt__14dBgS_ObjGndChkFv */ -static void func_807EF2DC() { - // NONMATCHING -} +// /* 807EF2DC-807EF2E4 007CDC 0008+00 1/0 0/0 0/0 .text @60@__dt__14dBgS_ObjGndChkFv */ +// static void func_807EF2DC() { +// // NONMATCHING +// } -/* 807EF2E4-807EF2EC 007CE4 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_807EF2E4() { - // NONMATCHING -} +// /* 807EF2E4-807EF2EC 007CE4 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ +// static void func_807EF2E4() { +// // NONMATCHING +// } -/* 807EF2EC-807EF2F4 007CEC 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_807EF2EC() { - // NONMATCHING -} - -/* 807EF708-807EF744 008108 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING -} - -/* 807EF744-807EF75C 008144 0018+00 2/2 0/0 0/0 .text checkNowWolf__9daPy_py_cFv */ -// void daPy_py_c::checkNowWolf() { -extern "C" void checkNowWolf__9daPy_py_cFv() { - // NONMATCHING -} +// /* 807EF2EC-807EF2F4 007CEC 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ +// static void func_807EF2EC() { +// // NONMATCHING +// } /* ############################################################################################## */ -/* 807EFD60-807EFD64 0001E8 0004+00 0/0 0/0 0/0 .bss - * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ -#pragma push -#pragma force_active on -static u8 data_807EFD60[4]; -#pragma pop -/* 807EFD64-807EFD68 0001EC 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JASAudioThread> */ -#pragma push -#pragma force_active on -static u8 data_807EFD64[4]; -#pragma pop +/* 807EFA80-807EFAA0 -00001 0020+00 1/0 0/0 0/0 .data l_daE_WW_Method */ +static actor_method_class l_daE_WW_Method = { + (process_method_func)daE_WW_Create, + (process_method_func)daE_WW_Delete, + (process_method_func)daE_WW_Execute, + (process_method_func)daE_WW_IsDelete, + (process_method_func)daE_WW_Draw, +}; -/* 807EFD68-807EFD6C 0001F0 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ -#pragma push -#pragma force_active on -static u8 data_807EFD68[4]; -#pragma pop +/* 807EFAA0-807EFAD0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_WW */ +extern actor_process_profile_definition g_profile_E_WW = { + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_E_WW, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daE_WW_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 209, // mPriority + &l_daE_WW_Method, // sub_method + 0x00044100, // mStatus + fopAc_ENEMY_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +}; -/* 807EFD6C-807EFD70 0001F4 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_807EFD6C[4]; -#pragma pop - -/* 807EFD70-807EFD74 0001F8 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> - */ -#pragma push -#pragma force_active on -static u8 data_807EFD70[4]; -#pragma pop - -/* 807EFD74-807EFD78 0001FC 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> - */ -#pragma push -#pragma force_active on -static u8 data_807EFD74[4]; -#pragma pop - -/* 807EFD78-807EFD7C 000200 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> - */ -#pragma push -#pragma force_active on -static u8 data_807EFD78[4]; -#pragma pop - -/* 807EFD7C-807EFD80 000204 0004+00 0/0 0/0 0/0 .bss - * sInstance__36JASGlobalInstance<15JAISoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_807EFD7C[4]; -#pragma pop - -/* 807EFD80-807EFD84 000208 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_807EFD80[4]; -#pragma pop - -/* 807EFD84-807EFD88 00020C 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ -#pragma push -#pragma force_active on -static u8 data_807EFD84[4]; -#pragma pop - -/* 807EFD88-807EFD8C 000210 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ -#pragma push -#pragma force_active on -static u8 data_807EFD88[4]; -#pragma pop - -/* 807EFD8C-807EFD90 000214 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_807EFD8C[4]; -#pragma pop - -/* 807EFD90-807EFD94 000218 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ -#pragma push -#pragma force_active on -static u8 data_807EFD90[4]; -#pragma pop - -/* 807EFD94-807EFD98 00021C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> - */ -#pragma push -#pragma force_active on -static u8 data_807EFD94[4]; -#pragma pop - -/* 807EFD98-807EFD9C 000220 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAISoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_807EFD98[4]; -#pragma pop - -/* 807EFD9C-807EFDA0 000224 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13JAUSoundTable> */ -#pragma push -#pragma force_active on -static u8 data_807EFD9C[4]; -#pragma pop - -/* 807EFDA0-807EFDA4 000228 0004+00 0/0 0/0 0/0 .bss - * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ -#pragma push -#pragma force_active on -static u8 data_807EFDA0[4]; -#pragma pop - -/* 807EFDA4-807EFDA8 00022C 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_807EFDA4[4]; -#pragma pop - -/* 807EFDA8-807EFDAC 000230 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> - */ -#pragma push -#pragma force_active on -static u8 data_807EFDA8[4]; -#pragma pop - -/* 807EFDAC-807EFDB0 000234 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ -#pragma push -#pragma force_active on -static u8 data_807EFDAC[4]; -#pragma pop - -/* 807EFDB0-807EFDB4 000238 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> - */ -#pragma push -#pragma force_active on -static u8 data_807EFDB0[4]; -#pragma pop - -/* 807EFDB4-807EFDB8 00023C 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> - */ -#pragma push -#pragma force_active on -static u8 data_807EFDB4[4]; -#pragma pop - -/* 807EFDB8-807EFDBC 000240 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> - */ -#pragma push -#pragma force_active on -static u8 data_807EFDB8[4]; -#pragma pop - -/* 807EFDBC-807EFDC0 000244 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> - */ -#pragma push -#pragma force_active on -static u8 data_807EFDBC[4]; -#pragma pop - -/* 807EFDC0-807EFDC4 000248 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ -#pragma push -#pragma force_active on -static u8 data_807EFDC0[4]; -#pragma pop - -/* 807EF8B8-807EF8B8 000148 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +AUDIO_INSTANCES; // Needed ??