diff --git a/configure.py b/configure.py index 048eb63c610..5ef31c8e2a6 100755 --- a/configure.py +++ b/configure.py @@ -1759,7 +1759,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2J01"), "d_a_e_warpappear"), ActorRel(NonMatching, "d_a_e_wb"), ActorRel(NonMatching, "d_a_e_ws"), - ActorRel(NonMatching, "d_a_e_ww"), + ActorRel(Equivalent, "d_a_e_ww"), # weak func order ActorRel(MatchingFor("GZ2E01", "GZ2J01"), "d_a_e_yc"), ActorRel(NonMatching, "d_a_e_yd"), ActorRel(MatchingFor("GZ2E01", "GZ2J01"), "d_a_e_yd_leaf"), diff --git a/include/d/actor/d_a_e_wb.h b/include/d/actor/d_a_e_wb.h index b903127a77e..596bf696565 100644 --- a/include/d/actor/d_a_e_wb.h +++ b/include/d/actor/d_a_e_wb.h @@ -71,7 +71,8 @@ struct himo_s { * * @details * - */ +*/ + class e_wb_class : public fopEn_enemy_c { public: BOOL checkWait(); @@ -241,21 +242,22 @@ public: /* 807E20DC */ virtual ~daE_WB_HIO_c() {}; void genMessage(JORMContext*); + /* イノシシ - Wild Boar */ /* 0x00 */ // vtable /* 0x04 */ s8 field_0x04; - /* 0x08 */ f32 mBaseSize; - /* 0x0C */ f32 mLeaderSizeRatio; - /* 0x10 */ f32 mMovementSpeed; - /* 0x14 */ f32 mMaxSpeed; - /* 0x18 */ f32 mCalvaryBattleMaxSpeed; - /* 0x1C */ f32 mNormalSpeedVi; - /* 0x20 */ f32 mMediumSpeedVi; + /* 0x08 */ f32 base_size; // 基本サイズ - Base Size + /* 0x0C */ f32 leader_size_ratio; // リーダーサイズ比 - Leader Size Ratio + /* 0x10 */ f32 movement_speed; // 移動速度 - Movement Speed + /* 0x14 */ f32 max_speed; // 最速度 - Max Speed + /* 0x18 */ f32 cavalry_battle_max_speed; // 騎馬戦最速 - Cavalry Battle Max Speed + /* 0x1C */ f32 normal_speed_vi; + /* 0x20 */ f32 medium_speed_vi; /* 0x24 */ f32 mMaxSpeedVi; - /* 0x28 */ f32 mLeaderWalkingSpeed; - /* 0x2C */ f32 mLeaderMaxSpeed; - /* 0x30 */ f32 mLeaderCalvaryBattleMaxSpeed; + /* 0x28 */ f32 leader_walking_speed; // 歩き速(リ)- Leader Walking Speed + /* 0x2C */ f32 leader_max_speed; // 最速度(リ)- Leader Max Speed + /* 0x30 */ f32 leader_cavalry_battle_max_speed; // 騎馬戦最(リ)- Leader Cavalry Battle Max Speed /* 0x34 */ f32 mSingleRiderSpeed; - /* 0x38 */ f32 mPlayerRecognitionDistance; + /* 0x38 */ f32 player_recognition_dist; // PL認識距離 - Player Recognition Distance /* 0x3C */ f32 mPlayerMountedMaxSpeed; /* 0x40 */ f32 mPlayerMountedMotionPlaybackSpeed; /* 0x44 */ s16 mPlayerMountedDashTime; diff --git a/include/d/actor/d_a_e_ww.h b/include/d/actor/d_a_e_ww.h index b0d7fa79bb0..ba57ef7c568 100644 --- a/include/d/actor/d_a_e_ww.h +++ b/include/d/actor/d_a_e_ww.h @@ -3,6 +3,7 @@ #include "d/d_bg_s_acch.h" #include "d/d_cc_d.h" +#include "d/d_cc_uty.h" #include "f_op/f_op_actor_mng.h" /** @@ -12,40 +13,12 @@ * * @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 { public: - // daE_WW_c() {} - /* 807E7748 */ int ctrlJoint(J3DJoint*, J3DModel*); - /* 807E7800 */ int JointCallBack(J3DJoint*, int); + /* 807E7800 */ static int JointCallBack(J3DJoint*, int); /* 807E784C */ void setHeadAngle(); /* 807E79D4 */ int draw(); /* 807E7ADC */ void setBck(int, u8, f32, f32); @@ -56,158 +29,92 @@ public: /* 807E7FCC */ s16 getNearPlayerAngle(); /* 807E804C */ void setGroundAngle(); /* 807E830C */ f32 checkCreateBg(cXyz); - /* 807E8560 */ int checkAttackWall(); + /* 807E8560 */ bool checkAttackWall(); /* 807E8624 */ void setBlurEffect(); /* 807E8700 */ void setAppearEffect(); - /* 807E8C54 */ int checkSideStep(); + /* 807E8C54 */ bool checkSideStep(); /* 807E8EEC */ void createWolf(cXyz, u8); /* 807E905C */ void executeMaster(); /* 807E972C */ void executeWait(); /* 807E99B8 */ int calcJumpSpeed(); /* 807E9C1C */ void executeAttack(); - /* 807EA474 */ int checkAttackStart(); + /* 807EA474 */ bool checkAttackStart(); /* 807EA870 */ void executeChase(); /* 807EB650 */ void executeDamage(); - /* 807EB964 */ int checkMoveOut(); + /* 807EB964 */ bool checkMoveOut(); /* 807EBAE0 */ void executeMoveOut(); - /* 807EC940 */ int checkWalkStart(); + /* 807EC940 */ bool checkWalkStart(); /* 807ECE58 */ void executeWalk(); /* 807ED674 */ void eWW_posMoveF(); /* 807ED78C */ void action(); /* 807EDA78 */ void mtx_set(); /* 807EDB00 */ void cc_set(); /* 807EDCC4 */ int execute(); - /* 807EDE8C */ int calcMoveDir(s16*, s16); + /* 807EDE8C */ bool calcMoveDir(s16*, s16); /* 807EE440 */ int _delete(); /* 807EE4D4 */ int CreateHeap(); /* 807EE63C */ int create(); u8 isAttack() { return field_0x756; } - void setAttack() { mAttackActionID = 10; } + void setAttack() { mActionMode = 10; } f32 const getSpeedF() { return speedF; } private: /* 0x5AC */ request_of_phase_process_class mPhase; - // /* 0x5AC */ char pad5AC[8]; - /* 0x5B4 */ mDoExt_McaMorfSO* mpMorf; + /* 0x5B4 */ mDoExt_McaMorfSO* mpModelMorf; /* 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; + /* 0x65C */ cXyz field_0x65c; // Under ground position ? see jump speed calc /* 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 ? + /* 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 ?? + /* 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]; + /* 0x6B4 */ u8 field_0x6b4; // Arg0 ?? + /* 0x6B5 */ u8 field_0x6b5; + /* 0x6B6 */ u8 field_0x6b6; + /* 0x6B7 */ u8 field_0x6b7; + /* 0x6B8 */ s32 mAction; + /* 0x6BC */ s32 mActionMode; // 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; + /* 0x72C */ int field_0x72c; /* 0x730 */ int field_0x730; /* 0x734 */ int field_0x734; // Attack interval ? /* 0x738 */ int field_0x738; - /* 0x73C */ int field_0x73C; + /* 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; + /* 0x744 */ int field_0x744[2]; + /* 0x74C */ int field_0x74c; + /* 0x750 */ s16 field_0x750[3]; /* 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]? */ + /* 0x75A */ u8 field_0x75a; + /* 0x75B */ u8 field_0x75b; + /* 0x75C */ u8 field_0x75c; + /* 0x75D */ bool field_0x75d; /* 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; + /* 0x7A0 */ dBgS_ObjAcch mObjAcch; /* 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; + /* 0xE94 */ dCcU_AtInfo mAtInfo; + /* 0xEB8 */ u8 field_0xeb8[0xec0 - 0xeb8]; + /* 0xEC0 */ u32 mParticleKey; + /* 0xEC4 */ u8 field_0xec4; }; STATIC_ASSERT(sizeof(daE_WW_c) == 0xec8); @@ -215,19 +122,20 @@ STATIC_ASSERT(sizeof(daE_WW_c) == 0xec8); class daE_WW_HIO_c : public JORReflexible { public: /* 807E76EC */ daE_WW_HIO_c(); - /* 807EEEBC */ virtual ~daE_WW_HIO_c() {}; + /* 807EEEBC */ virtual ~daE_WW_HIO_c() {} void genMessage(JORMContext*); + /* ホワイトウルフォス - White Werewolf */ /* 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; + /* 0x08 */ f32 model_size; // モデルサイズ - Model Size + /* 0x0C */ f32 attack_interval; // 攻撃間隔 - Attack Interval + /* 0x10 */ f32 run_anm; // 走りアニメーション - Run Animation + /* 0x14 */ f32 walk_anm; // 歩きアニメーション - Walk Animation + /* 0x18 */ f32 run_speed; // 走る速度 - Run Speed + /* 0x1C */ f32 wolf_escape_speed; // 狼から逃亡速度 - Wolf Escape Speed + /* 0x20 */ f32 link_escape_speed; // リンクから逃亡速度 - Link Escape Speed + /* 0x24 */ u8 move_range_debug_display; // 移動範囲デバック表示 - Move Range Debug Display }; diff --git a/src/d/actor/d_a_e_wb.cpp b/src/d/actor/d_a_e_wb.cpp index a31ec5f08d4..798ea8a6b22 100644 --- a/src/d/actor/d_a_e_wb.cpp +++ b/src/d/actor/d_a_e_wb.cpp @@ -126,17 +126,17 @@ static dCcD_SrcSph at_sph_src = { /* 807D248C-807D2548 0000EC 00BC+00 1/1 0/0 0/0 .text __ct__12daE_WB_HIO_cFv */ daE_WB_HIO_c::daE_WB_HIO_c() { field_0x04 = -1; - mBaseSize = 1.2f; - mLeaderSizeRatio = 1.2f; - mMovementSpeed = 3.5f; - mPlayerRecognitionDistance = 600.0f; - mMaxSpeed = 37.0f; - mCalvaryBattleMaxSpeed = 50.0f; - mLeaderWalkingSpeed = 10.0f; - mLeaderMaxSpeed = 40.0f; - mLeaderCalvaryBattleMaxSpeed = 54.0f; - mNormalSpeedVi = 25.0f; - mMediumSpeedVi = 45.0f; + base_size = 1.2f; + leader_size_ratio = 1.2f; + movement_speed = 3.5f; + player_recognition_dist = 600.0f; + max_speed = 37.0f; + cavalry_battle_max_speed = 50.0f; + leader_walking_speed = 10.0f; + leader_max_speed = 40.0f; + leader_cavalry_battle_max_speed = 54.0f; + normal_speed_vi = 25.0f; + medium_speed_vi = 45.0f; mMaxSpeedVi = 55.0f; mSingleRiderSpeed = 50.0f; mPlayerMountedMaxSpeed = 30.0f; @@ -153,23 +153,23 @@ daE_WB_HIO_c::daE_WB_HIO_c() { #ifdef DEBUG void daE_WB_HIO_c::genMessage(JORMContext* ctx) { ctx->genLabel(" イノシシ", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); - ctx->genSlider("基本サイズ", &mBaseSize, 0.0f, 5.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); - ctx->genSlider("リーダーサイズ比", &mLeaderSizeRatio, 0.0f, 5.0, 0, NULL, 0xFFFF, 0xFFFF, 512, + ctx->genSlider("基本サイズ", &base_size, 0.0f, 5.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); + ctx->genSlider("リーダーサイズ比", &leader_size_ratio, 0.0f, 5.0, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); - ctx->genSlider("移動速度", &mMovementSpeed, 0.0f, 20.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); - ctx->genSlider("PL認識距離", &mPlayerRecognitionDistance, 0.0f, 2000.0f, 0, NULL, 0xFFFF, + ctx->genSlider("移動速度", &movement_speed, 0.0f, 20.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); + ctx->genSlider("PL認識距離", &player_recognition_dist, 0.0f, 2000.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); - ctx->genSlider("最速度", &mMaxSpeed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); - ctx->genSlider("騎馬戦最速", &mCalvaryBattleMaxSpeed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, + ctx->genSlider("最速度", &max_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); + ctx->genSlider("騎馬戦最速", &cavalry_battle_max_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); - ctx->genSlider("歩き速(リ)", &mLeaderWalkingSpeed, 0.0f, 30.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, + ctx->genSlider("歩き速(リ)", &leader_walking_speed, 0.0f, 30.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); - ctx->genSlider("最速度(リ)", &mLeaderMaxSpeed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, + ctx->genSlider("最速度(リ)", &leader_max_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); - ctx->genSlider("騎馬戦最(リ)", &mLeaderCalvaryBattleMaxSpeed, 0.0f, 100.0f, 0, NULL, 0xFFFF, + ctx->genSlider("騎馬戦最(リ)", &leader_cavalry_battle_max_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); - ctx->genSlider("通常速(車)", &mNormalSpeedVi, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); - ctx->genSlider("中速度(車)", &mMediumSpeedVi, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); + ctx->genSlider("通常速(車)", &normal_speed_vi, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); + ctx->genSlider("中速度(車)", &medium_speed_vi, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); ctx->genSlider("最速度(車)", &mMaxSpeedVi, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); ctx->genSlider("一騎速", &mSingleRiderSpeed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); ctx->genCheckBox("手綱ナシ", &mNoReins, 1, 0, NULL, 0xFFFF, 0xFFFF, 512, 24); @@ -319,10 +319,10 @@ static void himo_control1(e_wb_class* i_this, cXyz* i_pos, int i_idx, s8 param_3 } if (i_this->field_0x79d != 0) { - sp60.z *= l_HIO.mLeaderSizeRatio; - sp48 *= l_HIO.mLeaderSizeRatio; - sp30 *= l_HIO.mLeaderSizeRatio; - sp24 *= l_HIO.mLeaderSizeRatio; + sp60.z *= l_HIO.leader_size_ratio; + sp48 *= l_HIO.leader_size_ratio; + sp30 *= l_HIO.leader_size_ratio; + sp24 *= l_HIO.leader_size_ratio; } i = 1; @@ -846,7 +846,7 @@ static void e_wb_pl_ride_now(e_wb_class* i_this) { /* 807D4154-807D48C0 001DB4 076C+00 1/1 0/0 0/0 .text e_wb_pl_ride__FP10e_wb_class */ static void e_wb_pl_ride(e_wb_class* i_this) { - f32 fVar11 = l_HIO.mCalvaryBattleMaxSpeed; + f32 fVar11 = l_HIO.cavalry_battle_max_speed; f32 fVar2; if (i_this->field_0x1432 != 0) { @@ -952,8 +952,8 @@ static void e_wb_pl_ride(e_wb_class* i_this) { i_this->mActionID = ACT_PL_RIDE; i_this->field_0x1432 = 0; - if (l_HIO.mNormalSpeedVi < i_this->speedF) { - i_this->speedF = l_HIO.mNormalSpeedVi; + if (l_HIO.normal_speed_vi < i_this->speedF) { + i_this->speedF = l_HIO.normal_speed_vi; } } } else if (i_this->field_0x142f && iVar4 == 1) { @@ -993,7 +993,7 @@ static void e_wb_pl_ride(e_wb_class* i_this) { i_this->mWaitRollAngle = i_this->current.angle.y - curr_angle_y; f32 fVar10 = - i_this->mWaitRollAngle * TREG_S(7) - 8 * i_this->speedF / l_HIO.mBaseSize + 1.0f; + i_this->mWaitRollAngle * TREG_S(7) - 8 * i_this->speedF / l_HIO.base_size + 1.0f; if (fVar10 <= NREG_F(0x11) + 4500.0f) { if (fVar10 < -NREG_F(0x11) + 4500.0f) @@ -1281,7 +1281,7 @@ static void e_wb_b_run2(e_wb_class* i_this) { cLib_addCalcAngleS2(&i_this->mTargetAngleStep, 0x400, 1, 0x10); fVar1 = 3.0f; - fVar10 = l_HIO.mLeaderMaxSpeed; + fVar10 = l_HIO.leader_max_speed; i_this->field_0x142c = 1; if (i_this->field_0x698 == 0 && dist < 5000.0f) { @@ -1348,7 +1348,7 @@ static void e_wb_b_run(e_wb_class* i_this) { i_this->mActionMode = 0; } else { s8 bVar11 = false; - f32 fVar14 = l_HIO.mLeaderCalvaryBattleMaxSpeed; + f32 fVar14 = l_HIO.leader_cavalry_battle_max_speed; if (daPy_getPlayerActorClass()->checkHorseRide() && dComIfGp_getHorseActor()->speedF >= 30.0f) { @@ -1447,20 +1447,20 @@ static void e_wb_b_run(e_wb_class* i_this) { if (bVar11) { // float regalloc horse_speed = dComIfGp_getHorseActor()->speedF; - speed_target = l_HIO.mLeaderCalvaryBattleMaxSpeed; + speed_target = l_HIO.leader_cavalry_battle_max_speed; if (speed_target > horse_speed) { speed_target = horse_speed; } else { - if (speed_target < l_HIO.mLeaderMaxSpeed) { - speed_target = l_HIO.mLeaderMaxSpeed; + if (speed_target < l_HIO.leader_max_speed) { + speed_target = l_HIO.leader_max_speed; } } if (fopAcM_searchPlayerDistanceXZ(i_this) < 2000.0f) { speed_target *= 1.2f; - if (i_this->speedF < l_HIO.mMaxSpeed) { + if (i_this->speedF < l_HIO.max_speed) { speed_step = 0.5f; } else { speed_step = 1.5f; @@ -1476,7 +1476,7 @@ static void e_wb_b_run(e_wb_class* i_this) { horse_speed = 1.2f; } else { speed_step = 3.0; - speed_target = l_HIO.mLeaderMaxSpeed; + speed_target = l_HIO.leader_max_speed; } if (dist > 6000.0f) { @@ -1488,7 +1488,7 @@ static void e_wb_b_run(e_wb_class* i_this) { break; case 3: i_this->field_0x6bd = 1; - speed_target = l_HIO.mMaxSpeed; + speed_target = l_HIO.max_speed; speed_step = 3.0f; if (i_this->field_0x698 == 10) { @@ -1514,7 +1514,7 @@ static void e_wb_b_run(e_wb_class* i_this) { break; case 10: // jumping a fence / hit wall - speed_target = l_HIO.mMaxSpeed; + speed_target = l_HIO.max_speed; speed_step = 3.0f; int anm_id = i_this->mAnmID; @@ -1683,7 +1683,7 @@ static void e_wb_a_run(e_wb_class* i_this) { } default: cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mAngleTarget, 8, 0x800); - cLib_addCalc2(&i_this->speedF, l_HIO.mMaxSpeed * 1.2f, 1.0f, 2.0f); + cLib_addCalc2(&i_this->speedF, l_HIO.max_speed * 1.2f, 1.0f, 2.0f); cLib_addCalcAngleS2(&i_this->field_0x79a, (i_this->current.angle.y - curr_angle_y) * -8, 8, 0x200); } @@ -1957,14 +1957,14 @@ static s8 e_wb_c_run(e_wb_class* i_this) { local_10c = diff; dist = JMAFastSqrt(local_10c.x * local_10c.x + local_10c.z * local_10c.z); - target_speed = l_HIO.mMaxSpeed; + target_speed = l_HIO.max_speed; if (dist >= 500.0f) { - target_speed = l_HIO.mMaxSpeed; + target_speed = l_HIO.max_speed; } if (dist > 3000.0f) { - target_speed = l_HIO.mMaxSpeed; + target_speed = l_HIO.max_speed; } return_value = (i_this->field_0x6be & 2) == 0; diff --git a/src/d/actor/d_a_e_ww.cpp b/src/d/actor/d_a_e_ww.cpp index 5fafc0c0c0c..ce7e937fd05 100644 --- a/src/d/actor/d_a_e_ww.cpp +++ b/src/d/actor/d_a_e_ww.cpp @@ -7,19 +7,99 @@ #include "d/actor/d_a_e_ww.h" #include "f_op/f_op_camera_mng.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 +#include "f_op/f_op_actor_enemy.h" +#include "Z2AudioLib/Z2Instances.h" +enum E_ww_RES_File_ID { + /* BCK */ + /* 0x04 */ BCK_WW_APPEAR = 0x4, + /* 0x05 */ BCK_WW_BACKSTEP, + /* 0x06 */ BCK_WW_DAMAGE, + /* 0x07 */ BCK_WW_DEAD, + /* 0x08 */ BCK_WW_JUMPATTACKA, + /* 0x09 */ BCK_WW_JUMPATTACKB, + /* 0x0A */ BCK_WW_JUMPATTACKC, + /* 0x0B */ BCK_WW_RUN, + /* 0x0C */ BCK_WW_SIDESTEPL, + /* 0x0D */ BCK_WW_SIDESTEPR, + /* 0x0E */ BCK_WW_TURN, + /* 0x0F */ BCK_WW_WAIT, + /* 0x10 */ BCK_WW_WALK, -/* ############################################################################################## */ + /* BMDR */ + /* 0x13 */ BMDR_WW = 0x13, +}; + +enum Joint { + /* 0x00 */ JNT_WORLD_ROOT, + /* 0x01 */ JNT_BODY01, + /* 0x02 */ JNT_BODY02, + /* 0x03 */ JNT_NECK, + /* 0x04 */ JNT_HEAD, + /* 0x05 */ JNT_AGO, + /* 0x06 */ JNT_EARL, + /* 0x07 */ JNT_EARR, + /* 0x08 */ JNT_SHOULDERL, + /* 0x09 */ JNT_ARML01, + /* 0x0A */ JNT_ARML02, + /* 0x0B */ JNT_HANDL01, + /* 0x0C */ JNT_HANDL02, + /* 0x0D */ JNT_SHOULDERR, + /* 0x0E */ JNT_ARMR01, + /* 0x0F */ JNT_ARMR02, + /* 0x10 */ JNT_HANDR01, + /* 0x11 */ JNT_HANDR02, + /* 0x12 */ JNT_WAIST, + /* 0x13 */ JNT_LEGL01, + /* 0x14 */ JNT_LEGL02, + /* 0x15 */ JNT_LEGL03, + /* 0x16 */ JNT_FOOTL, + /* 0x17 */ JNT_LEGR01, + /* 0x18 */ JNT_LEGR02, + /* 0x19 */ JNT_LEGR03, + /* 0x1A */ JNT_FOOTR, + /* 0x1B */ JNT_TAIL01, + /* 0x1C */ JNT_TAIL02, +}; + +enum Action { + /* 0x0 */ ACTION_MASTER, + /* 0x1 */ ACTION_WAIT, + /* 0x2 */ ACTION_ATTACK, + /* 0x3 */ ACTION_CHASE, + /* 0x4 */ ACTION_DAMAGE, + /* 0x5 */ ACTION_MOVE_OUT, + /* 0x6 */ ACTION_WALK, +}; + +enum Action_Mode { + /* 0x00 */ ACTION_MODE_0, + /* 0x01 */ ACTION_MODE_1, + /* 0x02 */ ACTION_MODE_2, + /* 0x03 */ ACTION_MODE_3, + /* 0x05 */ ACTION_MODE_5 = 0x5, + /* 0x06 */ ACTION_MODE_6, + /* 0x0A */ ACTION_MODE_10 = 0xA, + /* 0x0B */ ACTION_MODE_11, + /* 0x0C */ ACTION_MODE_12, + /* 0x0D */ ACTION_MODE_13, + /* 0x0E */ ACTION_MODE_14, + /* 0x0F */ ACTION_MODE_15, + /* 0x10 */ ACTION_MODE_16, + /* 0x14 */ ACTION_MODE_20 = 0x14, + /* 0x15 */ ACTION_MODE_21, + /* 0x16 */ ACTION_MODE_22, + /* 0x19 */ ACTION_MODE_25 = 0x19, + /* 0x1A */ ACTION_MODE_26, + /* 0x1B */ ACTION_MODE_27, + /* 0x1C */ ACTION_MODE_28, + /* 0xC8 */ ACTION_MODE_200 = 0xC8, +}; namespace { - /* 807EF904-807EF944 000038 0040+00 1/1 0/0 0/0 .data cc_ww_src__22@unnamed@d_a_e_ww_cpp@ - */ + /* 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 @@ -46,136 +126,38 @@ namespace { }; } // namespace -/* ############################################################################################## */ -/* 807EFB80-807EFB84 000008 0001+03 1/1 0/0 0/0 .bss @1109 */ -// static u8 lit_1109[1 + 3 /* padding */]; - -// /* 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 - -// /* 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 - -// /* 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 - -// /* 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 - -// /* 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 - -// /* 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 - -// /* 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 - -// /* 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 - -// /* 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 - -// /* 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 - -// /* 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 - -// /* 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 - -// /* 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 - -// /* 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 - -// /* 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 -#pragma force_active on -static u8 lit_3921[12]; -#pragma pop +/* 807EFBF4-807EFBF8 00007C 0004+00 2/2 0/0 0/0 .bss None */ +static u8 l_HIOInit; /* 807EFBCC-807EFBF4 000054 0028+00 7/8 0/0 0/0 .bss l_HIO */ static daE_WW_HIO_c l_HIO; -/* 807EFBF4-807EFBF8 00007C 0004+00 2/2 0/0 0/0 .bss None */ -static u8 l_HIOInit; static u8 lbl_237_bss_30; // What name for this variable ? /* 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; + model_size = 1.0f; + attack_interval = 150.0f; + run_anm = 1.2f; + walk_anm = 0.5f; + run_speed = 40.0f; + wolf_escape_speed = 25.0f; + link_escape_speed = 40.0f; + move_range_debug_display = 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); + mctx->genSlider("モデルサイズ", &model_size, 0.0f, 10.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("攻撃間隔", &attack_interval, 0.0f, 2000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("走りアニメーション", &run_anm, 0.0f, 10.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("歩きアニメーション", &walk_anm, 0.0f, 10.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("走る速度", &run_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("狼から逃亡速度", &wolf_escape_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genSlider("リンクから逃亡速度", &link_escape_speed, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + mctx->genCheckBox("移動範囲デバック表示", &move_range_debug_display, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); } #endif @@ -187,10 +169,10 @@ int daE_WW_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { 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); + case JNT_NECK: + case JNT_HEAD: + mDoMtx_stack_c::YrotM(field_0x67c); + mDoMtx_stack_c::ZrotM(field_0x67e); } i_model->setAnmMtx(jnt_no, mDoMtx_stack_c::get()); @@ -200,14 +182,15 @@ int daE_WW_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { } /* 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) { +int daE_WW_c::JointCallBack(J3DJoint* i_joint, int param_2) { + if (param_2 == 0) { J3DModel* model_p = j3dSys.getModel(); - daE_WW_c* i_this = reinterpret_cast(model_p->getUserArea()); + daE_WW_c* i_this = (daE_WW_c*)model_p->getUserArea(); if (i_this != NULL) { i_this->ctrlJoint(i_joint, model_p); } } + return 1; } @@ -215,59 +198,65 @@ int daE_WW_c::JointCallBack(J3DJoint* i_joint, int param_1) { 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)); + if (mAction != ACTION_MASTER) { + if (field_0x75a != 0) { + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(JNT_HEAD)); 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); + + 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); + + 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); + + 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) { + if (mAction == ACTION_MASTER) { + #ifdef DEBUG + if (l_HIO.move_range_debug_display != 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; + 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; + 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); + dDbVw_drawCircleOpa(curr_pos, field_0x6a8, circle3Color, 1, 0xC); } + #endif return 1; } - J3DModel* model_p = mpMorf->getModel(); + + J3DModel* model_p = mpModelMorf->getModel(); g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); g_env_light.setLightTevColorType_MAJI(model_p, &tevStr); - mpMorf->entryDL(); + mpModelMorf->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()); + field_0x6d0 = dComIfGd_setShadow(field_0x6d0, 1, model_p, &sp14, 700.0f + nREG_F(19), 0.0f, current.pos.y, mObjAcch.GetGroundH(), mObjAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); return 1; } @@ -276,36 +265,31 @@ 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); + mpModelMorf->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)) { + if (mpModelMorf->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; + mAction = i_action_id; + mActionMode = i_attack_action_id; field_0x756 = 0; - mAcch.ClrGrndNone(); - mAcch.OnLineCheck(); - mAcch.OffLineCheckNone(); + mObjAcch.ClrGrndNone(); + mObjAcch.OnLineCheck(); + mObjAcch.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) { @@ -313,21 +297,24 @@ void daE_WW_c::damage_check() { if (mSph1[1].ChkAtShieldHit() != 0) { mSph1[1].OffAtShieldHit(); if (daPy_getPlayerActorClass()->checkPlayerGuard()) { - setActionMode(ACTION_EXECUTE_DAMAGE, 0); + setActionMode(ACTION_DAMAGE, ACTION_MODE_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) { + mAtInfo.mpCollider = var_r29; + if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_IRON_BALL) != 0) { + if (fopAcM_GetName(dCc_GetAc(mAtInfo.mpCollider->GetAc())) == PROC_Obj_Carry) { health += (s16) 150; } else if (dComIfGp_checkPlayerStatus0(0, 0x400) != 0) { health += (s16) 180; @@ -335,42 +322,44 @@ void daE_WW_c::damage_check() { 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)); + + cc_at_check(this, &mAtInfo); + if (mAtInfo.mpCollider->GetAtAtp() >= 1) { + cXyz temp_r1; + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(JNT_HEAD)); mDoMtx_stack_c::transM(-10.0f, -20.0f, 0.0f); mDoMtx_stack_c::multVecZero(&temp_r1); - if (field_0xEB3 == 0) { + + if (mAtInfo.mHitStatus == 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) { + + if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_UNK) != 0) { field_0x724 = 20; } else { field_0x724 = 10; } - if (field_0xEB0 <= 1) { + + if (mAtInfo.mAttackPower <= 1) { field_0x724 = (u8)(KREG_S(8) + 10); } - setActionMode(ACTION_EXECUTE_DAMAGE, 0); + + setActionMode(ACTION_DAMAGE, ACTION_MODE_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) { + int var_r26 = field_0x6b6; + if (field_0x6b6 < 5) { var_r26 = 5; } + for (int i=0; i 150.0f) { if (gnd_pos.y > sp14.y) { gnd_pos.y = sp14.y + 150.0f; @@ -437,7 +425,8 @@ void daE_WW_c::setGroundAngle() { gnd_pos.y = sp14.y - 150.0f; } } - field_0x6CE = -cLib_targetAngleX(&sp14, (cXyz*)&gnd_pos); + + field_0x6ce = -cLib_targetAngleX(&sp14, (cXyz*)&gnd_pos); field_0x674.x = 0; field_0x674.z = 0; } else { @@ -449,6 +438,7 @@ void daE_WW_c::setGroundAngle() { 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; @@ -457,21 +447,23 @@ void daE_WW_c::setGroundAngle() { if (-1e9f != gnd_pos.y) { field_0x674.z = (s16)cM_atan2s(gnd_pos.y - sp14.y, gnd_pos.x - sp14.x); } - field_0x6CE = 0; + + 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; + 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) { + 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; @@ -484,24 +476,26 @@ f32 daE_WW_c::checkCreateBg(cXyz i_vector) { 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 ? +bool daE_WW_c::checkAttackWall() { 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 false; } - return 1; + + return true; } /* 807E8624-807E8700 001024 00DC+00 1/1 0/0 0/0 .text setBlurEffect__8daE_WW_cFv */ @@ -509,7 +503,7 @@ 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)); + emitter->setGlobalSRTMatrix(mpModelMorf->getModel()->getAnmMtx(JNT_BODY02)); } } @@ -544,26 +538,37 @@ static void* s_child_ww(void* i_actor, void* i_data) { return NULL; } -/* ############################################################################################## */ - /* 807E8B2C-807E8C54 00152C 0128+00 1/1 0/0 0/0 .text s_obj_sub__FPvPv */ 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 < 100.0f) { + f32 fVar2 = fopAcM_GetSpeedF((fopAc_ac_c *) i_proc); + f32 fVar3 = 0.0f; + if (fVar2 == fVar3) { + f32 fVar4 = fopAcM_GetSpeed((fopAc_ac_c *) i_proc).y; + if (fVar4 == fVar3) { + 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; + + if (dist < 700.0f && fopAcM_GetName(i_proc) == PROC_ARROW) { + f32 fVar5 = fopAcM_GetSpeedF((fopAc_ac_c *) i_proc); + f32 fVar6 = 0.0f; + if (fVar5 != fVar6) { + return i_proc; + } } } @@ -571,68 +576,66 @@ static void* s_obj_sub(void* i_proc, void* i_data) { } /* 807E8C54-807E8E6C 001654 0218+00 4/4 0/0 0/0 .text checkSideStep__8daE_WW_cFv */ -int daE_WW_c::checkSideStep() { - // Change to bool ? or BOOL ? +bool daE_WW_c::checkSideStep() { 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; + field_0x6c0 = 0; } else { - field_0x6C0 = 1; + field_0x6c0 = 1; } - return 1; + + return true; } } + 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; + field_0x6c0 = 0; } else { - field_0x6C0 = 1; + field_0x6c0 = 1; } - return 1; + + return true; } - return 0; + + return false; } /* 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) { - // 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; +static void* s_attack_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)) && ((daE_WW_c*)i_actor)->isAttack() != 0) { + return i_actor; } + return NULL; } -/* ############################################################################################## */ - /* 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) { 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; + 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_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); -} -/* ############################################################################################## */ + 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); +} /* 807EFCAC-807EFD60 000134 00B4+00 1/2 0/0 0/0 .bss create_pos */ static cXyz create_pos[15] = { @@ -662,81 +665,87 @@ void daE_WW_c::executeMaster() { 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) { + switch (mActionMode) { + case ACTION_MODE_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) { + 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 (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; + field_0x65c = sp3C; + mActionMode = ACTION_MODE_1; + field_0x6b7 = var_r30; + field_0x6c0 = 0; setRandamNumber(); field_0x728 = 0; return; } } - mAttackActionID = 10; + + mActionMode = ACTION_MODE_10; field_0x728 = 30; } } break; - case 1: + case ACTION_MODE_1: if (field_0x728 == 0) { int var_r30_2; - if (field_0x6B4 == 0) { - var_r30_2 = field_0x6FC[field_0x6C0] + 5; + if (field_0x6b4 == 0) { + var_r30_2 = field_0x6fc[field_0x6c0] + 5; } else { - var_r30_2 = field_0x6FC[field_0x6C0]; + 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); + 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; + sp3C = field_0x65c; } + createWolf(sp3C, 1); - field_0x6C8++; - field_0x6C0++; - if (field_0x6C0 >= field_0x6B7) { - mAttackActionID = 3; - field_0x6C0 = 0; - field_0x6C4 = 0; + field_0x6c8++; + field_0x6c0++; + if (field_0x6c0 >= field_0x6b7) { + mActionMode = ACTION_MODE_3; + field_0x6c0 = 0; + field_0x6c4 = 0; setRandamNumber(); field_0x728 = 20; return; } - field_0x728 = field_0x6D4[field_0x6C0]; + + field_0x728 = field_0x6d4[field_0x6c0]; } break; case 2: if (field_0x728 == 0) { - mAttackActionID = 3; - field_0x6C0 = 0; - field_0x6C4 = 0; + mActionMode = ACTION_MODE_3; + field_0x6c0 = 0; + field_0x6c4 = 0; setRandamNumber(); field_0x728 = 0; } @@ -744,108 +753,105 @@ void daE_WW_c::executeMaster() { case 3: if (field_0x728 == 0) { - if (field_0x6FC[field_0x6C4] < field_0x6B7) { + if (field_0x6fc[field_0x6c4] < field_0x6b7) { fopAc_ac_c* sp8; - fopAcM_SearchByID(mChildID[field_0x6FC[field_0x6C4]], &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_0x6c0++; + if (field_0x6c0 >= field_0x6b7) { + field_0x6c4 = 10; } } - field_0x6C4++; - if (field_0x6C4 >= 10) { - mAttackActionID = 10; + + field_0x6c4++; + if (field_0x6c4 >= 10) { + mActionMode = ACTION_MODE_10; field_0x728 = 50; return; } - if (field_0x6FC[field_0x6C4] < field_0x6B7) { - field_0x728 = field_0x6D4[field_0x6C4] * 2; + + if (field_0x6fc[field_0x6c4] < field_0x6b7) { + field_0x728 = field_0x6d4[field_0x6c4] * 2; } } break; case 10: if (field_0x728 == 0) { - mAttackActionID = 0; + mActionMode = ACTION_MODE_0; } - if (field_0x6B5 != 0xFF && field_0x6C8 >= field_0x6B5) { + + if (field_0x6b5 != 0xFF && field_0x6c8 >= field_0x6b5) { fopAcM_delete(this); } break; } } -/* ############################################################################################## */ - /* 807E972C-807E99B8 00212C 028C+00 1/1 0/0 0/0 .text executeWait__8daE_WW_cFv */ void daE_WW_c::executeWait() { - // 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: + switch (mActionMode) { + case ACTION_MODE_0: fopAcM_OnStatus(this, fopAcM_STATUS_UNK_004000); - setBck(ANM_APPEAR, 0, 0.0f, 1.0f); - mAttackActionID = 1; + setBck(BCK_WW_APPEAR, J3DFrameCtrl::EMode_NONE, 0.0f, 1.0f); + mActionMode = ACTION_MODE_1; break; - case 1: - if (mpMorf->checkFrame(3.0f)) { + case ACTION_MODE_1: + if (mpModelMorf->checkFrame(3.0f)) { mSound.startCreatureSound(Z2SE_EN_WW_APPEAR, 0, -1); setAppearEffect(); } - if (mpMorf->checkFrame(15.0f) || mpMorf->checkFrame(20.0f)) { + + if (mpModelMorf->checkFrame(15.0f) || mpModelMorf->checkFrame(20.0f)) { mSound.startCreatureSound(Z2SE_EN_WW_FOOTNOTE, 0, -1); } - if (mpMorf->isStop()) { + + if (mpModelMorf->isStop()) { if (field_0x758 != 0) { - mAttackActionID = 10; + mActionMode = ACTION_MODE_10; return; } - setBck(ANM_WAIT, 2, 3.0f, 1.0f); + + setBck(BCK_WW_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); return; } break; - case 10: - bool var_r28 = true; + case ACTION_MODE_10: + BOOL var_r28 = TRUE; if (checkAttackWall() == 0) { - var_r28 = false; - } else if (field_0x6B4 == 1) { + var_r28 = FALSE; + } else if (field_0x6b4 == 1) { if (cM_rnd() < 0.3f) { - var_r28 = false; + var_r28 = FALSE; } - } else if (field_0x6B4 == 0) { + } else if (field_0x6b4 == 0) { if (std::abs(current.pos.y - daPy_getPlayerActorClass()->current.pos.y) > 500.0f) { - var_r28 = false; + var_r28 = FALSE; } } + fopAcM_OffStatus(this, fopAcM_STATUS_UNK_004000); if (var_r28) { - setActionMode(2, 0); + setActionMode(ACTION_ATTACK, ACTION_MODE_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); + + field_0x734 = l_HIO.attack_interval + cM_rndFX(30.0f); + setBck(BCK_WW_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); + setActionMode(ACTION_CHASE, ACTION_MODE_10); break; } } -/* ############################################################################################## */ - /* 807E99B8-807E9C1C 0023B8 0264+00 1/1 0/0 0/0 .text calcJumpSpeed__8daE_WW_cFv */ int daE_WW_c::calcJumpSpeed() { - f32 var_f31 = field_0x65C.y - current.pos.y; + f32 var_f31 = field_0x65c.y - current.pos.y; int var_r28 = 0; int var_r29 = 0; int unused = 0; @@ -861,161 +867,169 @@ int daE_WW_c::calcJumpSpeed() { 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)); + 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 ? } -/* ############################################################################################## */ - /* 807E9C1C-807EA474 00261C 0858+00 2/1 0/0 0/0 .text executeAttack__8daE_WW_cFv */ void daE_WW_c::executeAttack() { 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; + switch (mActionMode) { + case ACTION_MODE_0: + setBck(BCK_WW_RUN, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.run_anm); // Change BCK index to enum ? + mActionMode = ACTION_MODE_1; field_0x728 = 10; - speedF = l_HIO.mRunSpeed; - field_0x72C = 300; + speedF = l_HIO.run_speed; + field_0x72c = 300; /* fallthrough */ - - case 1: - field_0x75A = 1; + case ACTION_MODE_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); + setActionMode(ACTION_CHASE, ACTION_MODE_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; + if (checkMoveOut() != 0) { + return; + } + + if (fopAcM_searchPlayerDistance(this) < (800.0f + nREG_F(18) + mDistCheckModifier)) { + mActionMode = ACTION_MODE_20; + setBck(BCK_WW_JUMPATTACKA, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_WW_V_ATTACK, -1); + speed.y = 0.0f; + speedF = 0.0f; } - return; } - if (mpMorf->getFrame() <= 5.0f && checkSideStep() != 0) { - mAttackActionID = 10; + + if (mpModelMorf->getFrame() <= 5.0f && checkSideStep() != 0) { + mActionMode = ACTION_MODE_10; speed.y = 0.0f; speedF = 0.0f; } - if (field_0x72C == 0 && fopAcM_otherBgCheck(this, daPy_getPlayerActorClass()) != 0) { - setActionMode(3, 2); + + if (field_0x72c == 0 && fopAcM_otherBgCheck(this, daPy_getPlayerActorClass()) != 0) { + setActionMode(ACTION_CHASE, ACTION_MODE_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); + case ACTION_MODE_10: + field_0x6cc = fopAcM_searchPlayerAngleY(this); + shape_angle.y = field_0x6cc; + if (field_0x6c0 == 0) { + setBck(BCK_WW_SIDESTEPL, J3DFrameCtrl::EMode_NONE, 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); + setBck(BCK_WW_SIDESTEPR, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); + current.angle.y = field_0x6cc - 0x1800 + cM_rndFX(2000.0f); } - mAttackActionID = 11; // Change to anm run ?? + mActionMode = ACTION_MODE_11; /* fallthrough */ - - case 11: - field_0x75A = 1; - if (mpMorf->checkFrame(5.0f) != 0) { - field_0x75B = 1; + case ACTION_MODE_11: + field_0x75a = 1; + if (mpModelMorf->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; + mActionMode = ACTION_MODE_12; mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); } break; - case 12: - field_0x75A = 1; + case ACTION_MODE_12: + field_0x75a = 1; cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 4, 0x800, 0x100); - if (mAcch.ChkGroundHit() != 0) { + if (mObjAcch.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; + if (mpModelMorf->isStop() != 0) { + if (checkMoveOut() != 0) { + return; } - return; + + 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) { + mActionMode = ACTION_MODE_20; + setBck(BCK_WW_JUMPATTACKA, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); // Change to ANM_JUMP ? + mSound.startCreatureVoice(Z2SE_EN_WW_V_ATTACK, -1); + } else { + mActionMode = ACTION_MODE_0; + } + break; } } break; - case 20: + case ACTION_MODE_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); + 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) { + if (mpModelMorf->checkFrame(2.0f) != 0) { mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); } - if (mpMorf->isStop() != 0) { + + if (mpModelMorf->isStop() != 0) { calcJumpSpeed(); - if (field_0x6B4 == 0) { - mAttackActionID = 21; + if (field_0x6b4 == 0) { + mActionMode = ACTION_MODE_21; field_0x756 = 0; } else { - mAttackActionID = 25; + mActionMode = ACTION_MODE_25; field_0x756 = 0; - mAcch.SetGrndNone(); - mAcch.OffLineCheck(); - mAcch.OnLineCheckNone(); + mObjAcch.SetGrndNone(); + mObjAcch.OffLineCheck(); + mObjAcch.OnLineCheckNone(); } - setBck(ANM_JUMP_ATTACKB, 2, 3.0f, 1.0f); + + setBck(BCK_WW_JUMPATTACKB, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); shape_angle.x = cM_atan2s(speedF, speed.y) - 0x4000; } break; + } - case 21: + case ACTION_MODE_21: mSph2[0].SetTgType(0xD8FBFDFF); mSph2[1].SetTgType(0xD8FBFDFF); cLib_chaseF(&speedF, 0.0f, 1.0f); mSph1[1].OnAtSetBit(); - if (mAcch.ChkGroundHit()) { + + if (mObjAcch.ChkGroundHit()) { speedF = 20.0f + ZREG_F(0); - setBck(ANM_JUMP_ATTACKC, 0, 3.0f, 1.0f); - mAttackActionID = 22; + setBck(BCK_WW_JUMPATTACKC, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); + mActionMode = ACTION_MODE_22; } break; - case 22: + case ACTION_MODE_22: cLib_chaseF(&speedF, 0.0f, 1.0f + ZREG_F(1)); - if (mpMorf->checkFrame(2.0f) != 0) { + if (mpModelMorf->checkFrame(2.0f) != 0) { mSound.startCreatureSound(Z2SE_EN_WW_FOOTNOTE, 0, -1); } - if (mpMorf->isStop() != 0) { - setActionMode(3, 0); + + if (mpModelMorf->isStop() != 0) { + setActionMode(ACTION_CHASE, ACTION_MODE_0); } break; - case 25: - case 26: - mAcch.ClrGroundHit(); + case ACTION_MODE_25: + case ACTION_MODE_26: + mObjAcch.ClrGroundHit(); mSph2[0].SetTgType(0xD8FBFDFF); mSph2[1].SetTgType(0xD8FBFDFF); cLib_chaseF(&speedF, 0.0f, 1.0f); @@ -1023,297 +1037,336 @@ void daE_WW_c::executeAttack() { 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) { + sp20.y = dComIfG_Bgsp().GroundCross(&gnd_chk); + if (-1e9f != sp20.y) { + if (mActionMode == ACTION_MODE_25 && current.pos.y < sp20.y) { setAppearEffect(); mSound.startCreatureSound(Z2SE_EN_WW_HIDE, 0, -1); - mAttackActionID = 26; + mActionMode = ACTION_MODE_26; } + if (attention_info.position.y < sp20.y) { - field_0x75D = 0; + field_0x75d = 0; } + if (current.pos.y < (sp20.y - 500.0f)) { fopAcM_delete(this); } } break; } - if (mAcch.ChkGroundHit()) { + + if (mObjAcch.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); + cLib_addCalcAngleS(&shape_angle.x, cM_atan2s(speedF, speed.y) - 0x4000, 4, 0x800, 0x200); } -/* ############################################################################################## */ - /* 807EA474-807EA870 002E74 03FC+00 2/2 0/0 0/0 .text checkAttackStart__8daE_WW_cFv */ -int daE_WW_c::checkAttackStart() { - // Change to bool ? +bool daE_WW_c::checkAttackStart() { if (field_0x734 == 0) { - s16 temp_r25 = fopCamM_GetAngleY(dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0))) + 0x8000; - s16 temp_r28 = temp_r25 - fopAcM_searchPlayerAngleY(this); + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + s16 temp_r28 = (fopCamM_GetAngleY(camera) + 0x8000) - fopAcM_searchPlayerAngleY(this); cXyz sp14 = daPy_getPlayerActorClass()->current.pos; - if (field_0x6B4 != 1) { + + 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; - } + } 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) { + + 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); + + if (abs(temp_r28) < nREG_S(9) + 0x1555 && field_0x668.absXZ(sp14) < 800.0f + field_0x6a8) { + if (checkCreateBg(current.pos) != -1e9f && checkAttackWall() != 0) { + setActionMode(ACTION_ATTACK, ACTION_MODE_0); field_0x756 = 1; return 1; } } } + return 0; } -/* ############################################################################################## */ - /* 807EA870-807EB650 003270 0DE0+00 1/1 0/0 0/0 .text executeChase__8daE_WW_cFv */ void daE_WW_c::executeChase() { -// 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: + + switch (mActionMode) { + case ACTION_MODE_5: if (temp_f31 > 1500.0f + nREG_F(18) + mDistCheckModifier) { - mAttackActionID = 10; - setBck(ANM_WAIT, 2, 3.0f, 1.0f); + mActionMode = ACTION_MODE_10; + setBck(BCK_WW_WAIT, J3DFrameCtrl::EMode_LOOP, 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); + case ACTION_MODE_0: + setBck(BCK_WW_RUN, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.run_anm); + mActionMode = ACTION_MODE_1; + speedF = l_HIO.run_speed; + field_0x734 = l_HIO.attack_interval + cM_rndFX(30.0f); field_0x728 = 150; - - case 1: + // fallthrough + case ACTION_MODE_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; + BOOL var_r29 = FALSE; if (temp_f31 > 1500.0f + nREG_F(18) + mDistCheckModifier - 200.0f) { - var_r29 = true; + var_r29 = TRUE; } - if ((field_0x6B4 == 0) && (field_0x728 == 0) && (daPy_getPlayerActorClass()->speedF == 0.0f)) { - var_r29 = true; + + if (field_0x6b4 == 0 && field_0x728 == 0) { + f32 fVar7 = daPy_getPlayerActorClass()->speedF; + f32 fVar8 = 0.0f; + if (fVar7 == fVar8) { + var_r29 = TRUE; + } } + if (var_r29) { - mAttackActionID = 2; - setBck(ANM_TURN, 0, 3.0f, 1.0f); + mActionMode = ACTION_MODE_2; + setBck(BCK_WW_TURN, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); } break; + } - case 2: - field_0x75A = 1; + case ACTION_MODE_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); + f32 fVar1 = 0.0f; + if (speedF == fVar1 && abs((s16)(shape_angle.y - fopAcM_searchPlayerAngleY(this))) < 0x2000) { + mActionMode = ACTION_MODE_10; + setBck(BCK_WW_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); } break; + } - case 10: - mAttackActionID = 11; + case ACTION_MODE_200: { + field_0x75a = 1; + cLib_addCalcAngleS(&shape_angle.y, getNearPlayerAngle(), 8, 0x800, 0x100); + cLib_chaseF(&speedF, 0.0f, 1.5f); + + f32 fVar2 = 0.0f; + if (speedF == fVar2) { + if (abs((s16)(shape_angle.y - fopAcM_searchPlayerAngleY(this))) < 0x2000) { + speedF = 0.0f; + setActionMode(ACTION_MOVE_OUT, ACTION_MODE_10); + setBck(BCK_WW_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); + } + } + break; + } + + case ACTION_MODE_10: + mActionMode = ACTION_MODE_11; field_0x740 = 30; - /* fallthrough */ - - case 11: - field_0x75A = 1; + /// fallthrough + case ACTION_MODE_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) { + + f32 fVar5 = daPy_getPlayerActorClass()->speedF; + f32 fVar6 = 0.0f; + if (fVar5 != fVar6) { 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); + mActionMode = ACTION_MODE_12; + setBck(BCK_WW_RUN, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.run_anm); } else { - setBck(ANM_BACKSTEP, 0, 3.0f, 1.0f); + setBck(BCK_WW_BACKSTEP, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); - mAttackActionID = 0xF; + mActionMode = ACTION_MODE_15; speedF = -40.0f; speed.y = 25.0f; - field_0x75B = 1; + 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; + setBck(BCK_WW_RUN, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.run_anm); + mActionMode = ACTION_MODE_20; + speedF = l_HIO.run_speed - 10.0f; } } + if (checkSideStep() != 0) { - mAttackActionID = 0x19; + mActionMode = ACTION_MODE_25; speed.y = 0.0f; speedF = 0.0f; } - if (checkWalkStart() == 0 && checkAttackStart() == 0) { - if (checkMoveOut() != 0) { - return; - } + + if (checkWalkStart()) { + return; + } + + if (checkAttackStart()) { + return; + } + + if (checkMoveOut()) { + return; } break; + } case 12: field_0x728 = 30; - mAttackActionID = 0xD; - /* fallthrough */ - + mActionMode = ACTION_MODE_13; + // fallthrough case 13: if (daPy_getPlayerActorClass()->checkNowWolf() != 0) { - speedF = l_HIO.mWolfEscapeSpeed; + speedF = l_HIO.wolf_escape_speed; } else { - speedF = l_HIO.mLinkEscapeSpeed; + speedF = l_HIO.link_escape_speed; } + 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; + mActionMode = ACTION_MODE_14; field_0x728 = 150; } break; - case 14: + case ACTION_MODE_14: { if (daPy_getPlayerActorClass()->checkNowWolf() != 0) { - cLib_chaseF(&speedF, l_HIO.mWolfEscapeSpeed, 1.0f); + cLib_chaseF(&speedF, l_HIO.wolf_escape_speed, 1.0f); } else { - cLib_chaseF(&speedF, l_HIO.mLinkEscapeSpeed, 1.0f); + cLib_chaseF(&speedF, l_HIO.link_escape_speed, 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 (field_0x668.absXZ(current.pos) > field_0x6a8) { + mActionMode = ACTION_MODE_200; + setBck(BCK_WW_TURN, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); + return; + } + + BOOL var_r29_2 = FALSE; if (temp_f31 > 1500.0f + nREG_F(18) + mDistCheckModifier) { - var_r29_2 = true; + var_r29_2 = TRUE; } - if (field_0x6B4 == 0 && field_0x728 == 0 && daPy_getPlayerActorClass()->speedF == 0.0f) { - var_r29_2 = true; + + if (field_0x6b4 == 0 && field_0x728 == 0) { + f32 fVar3 = daPy_getPlayerActorClass()->speedF; + f32 fVar4 = 0.0f; + if (fVar3 == fVar4) { + var_r29_2 = TRUE; + } } + if (var_r29_2) { - mAttackActionID = 2; - setBck(ANM_TURN, 0, 3.0f, 1.0f); + mActionMode = ACTION_MODE_2; + setBck(BCK_WW_TURN, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); } break; + } - case 15: - field_0x75A = 1; - if (!mAcch.ChkGroundHit()) { + case ACTION_MODE_15: + field_0x75a = 1; + if (!mObjAcch.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; + if (mpModelMorf->isStop()) { + setBck(BCK_WW_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); + mActionMode = ACTION_MODE_10; } } break; - case 20: - field_0x73C = 0; - /* fallthrough */ - - case 21: - field_0x75A = 1; + case ACTION_MODE_20: + field_0x73c = 0; + // fallthrough + case ACTION_MODE_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; + setBck(BCK_WW_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); + mActionMode = ACTION_MODE_10; speedF = 0.0f; } - if (mpMorf->getFrame() <= 5.0f) { + + if (mpModelMorf->getFrame() <= 5.0f) { if (checkSideStep() != 0) { - mAttackActionID = 0x19; + mActionMode = ACTION_MODE_25; speed.y = 0.0f; speedF = 0.0f; } - if (field_0x73C == 0 && checkMoveOut() != 0) { + + 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); + case ACTION_MODE_25: + field_0x6cc = fopAcM_searchPlayerAngleY(this); + shape_angle.y = field_0x6cc; + if (field_0x6c0 == 0) { + setBck(BCK_WW_SIDESTEPL, J3DFrameCtrl::EMode_NONE, 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); + setBck(BCK_WW_SIDESTEPR, J3DFrameCtrl::EMode_NONE, 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) { + mActionMode = ACTION_MODE_27; + // fallthrough + case ACTION_MODE_27: + field_0x75a = 1; + if (mpModelMorf->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; + field_0x75b = 1; + mActionMode = ACTION_MODE_28; mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); } break; - case 28: - field_0x75A = 1; + case ACTION_MODE_28: + field_0x75a = 1; cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 4, 0x800, 0x100); - if (mAcch.ChkGroundHit() != 0) { + if (mObjAcch.ChkGroundHit() != 0) { speedF = 0.0f; - if (mpMorf->isStop() != 0) { - setBck(ANM_WAIT, 2, 3.0f, 1.0f); - mAttackActionID = 0xA; + if (mpModelMorf->isStop() != 0) { + setBck(BCK_WW_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); + mActionMode = ACTION_MODE_10; } } break; @@ -1322,671 +1375,551 @@ void daE_WW_c::executeChase() { cLib_addCalcAngleS(&shape_angle.x, 0, 8, 0x400, 0x100); } -/* ############################################################################################## */ -/* 807EF84C-807EF850 0000DC 0004+00 0/1 0/0 0/0 .rodata @5607 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5607 = 14.0f; -COMPILER_STRIP_GATE(0x807EF84C, &lit_5607); -#pragma pop - -/* 807EF850-807EF854 0000E0 0004+00 0/1 0/0 0/0 .rodata @5608 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5608 = 21.0f; -COMPILER_STRIP_GATE(0x807EF850, &lit_5608); -#pragma pop - /* 807EB650-807EB964 004050 0314+00 1/1 0/0 0/0 .text executeDamage__8daE_WW_cFv */ void daE_WW_c::executeDamage() { - // JAISoundID spC; - // JAISoundID sp8; - // s32 temp_r0; - // void **temp_r3; - // void **temp_r3_2; + if (health <= 0) { + field_0x724 = 5; + mSph2[0].OffTgSetBit(); + mSph2[1].OffTgSetBit(); + field_0x75d = 0; + attention_info.flags = 0; + } - // 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; - // } + switch (mActionMode) { + case ACTION_MODE_0: + if (health > 0) { + setBck(BCK_WW_DAMAGE, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_WW_V_DAMAGE, -1); + + if (mObjAcch.ChkGroundHit()) { + speed.y = 20.0f; + } + + speedF = 40.0f; + mActionMode = ACTION_MODE_1; + } else { + setBck(BCK_WW_DEAD, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_WW_V_DEAD, -1); + + if (mObjAcch.ChkGroundHit()) { + speed.y = 20.0f; + } + + speedF = 30.0f; + mActionMode = ACTION_MODE_5; + field_0x75c = 1; + } + + field_0x75b = 1; + shape_angle.x = 0; + current.angle.y = mAtInfo.mHitDirection.y + 0x8000; + shape_angle.y = mAtInfo.mHitDirection.y; + break; + + case ACTION_MODE_1: + if (mpModelMorf->checkFrame(14.0f)) { + mpModelMorf->setPlaySpeed(0.0f); + } + + if (mObjAcch.ChkGroundHit()) { + field_0x75b = 0; + mActionMode = ACTION_MODE_2; + mpModelMorf->setPlaySpeed(1.0f); + } + break; + + case ACTION_MODE_2: + cLib_chaseF(&speedF, 0.0f, 2.0f); + + if (mpModelMorf->isStop()) { + setActionMode(ACTION_CHASE, ACTION_MODE_0); + } + break; + + case ACTION_MODE_5: + if (mpModelMorf->checkFrame(21.0f)) { + mpModelMorf->setPlaySpeed(0.0f); + } + + if (mObjAcch.ChkGroundHit()) { + field_0x75b = 0; + mActionMode = ACTION_MODE_6; + mpModelMorf->setPlaySpeed(1.0f); + } + break; + + case ACTION_MODE_6: + if (mObjAcch.ChkGroundHit()) { + cLib_chaseF(&speedF, 0.0f, 2.0f); + } + + if (mpModelMorf->isStop()) { + fopAcM_createDisappear(this, ¤t.pos, 10, 0, 0x1B); + fopAcM_delete(this); + } + break; + } } /* 807EB964-807EBAE0 004364 017C+00 3/3 0/0 0/0 .text checkMoveOut__8daE_WW_cFv */ -int daE_WW_c::checkMoveOut() { - // Change to BOOL ? - - if (field_0x668.absXZ(current.pos) > field_0x6A8) { - setActionMode(5, 0); - return 1; +bool daE_WW_c::checkMoveOut() { + if (field_0x668.absXZ(current.pos) > field_0x6a8) { + setActionMode(ACTION_MOVE_OUT, ACTION_MODE_0); + return true; } - return 0; + + return false; } /* 807EBAE0-807EC940 0044E0 0E60+00 2/1 0/0 0/0 .text executeMoveOut__8daE_WW_cFv */ void daE_WW_c::executeMoveOut() { -// 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; + cXyz sp3c = daPy_getPlayerActorClass()->current.pos; -// 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; -// } + switch (mActionMode) { + case ACTION_MODE_0: + field_0x728 = 30; + field_0x734 = l_HIO.attack_interval + cM_rndFX(30.0f); + // fallthrough + case ACTION_MODE_10: { + f32 fVar1 = sp3c.absXZ(current.pos); + field_0x75a = 1; + cLib_addCalcAngleS(&shape_angle.y, getNearPlayerAngle(), 4, 0x800, 0x100); + current.angle.y = shape_angle.y; + + if (field_0x668.absXZ((sp3c)) > field_0x6a8) { + if (fVar1 < nREG_F(18) + 1200.0f + mDistCheckModifier) { + if (field_0x728 == 0) { + mActionMode = ACTION_MODE_11; + } + } else if (fVar1 > nREG_F(18) + 3000.0f + mDistCheckModifier) { + if (fopAcM_CheckCondition(this, fopAcM_STATUS_UNK_000004)) { + fopAcM_delete(this); + break; + } + } else if (field_0x668.absXZ(current.pos) > field_0x6a8 + 200.0f && field_0x728 == 0) { + mActionMode = ACTION_MODE_11; + } + } else if (fVar1 < nREG_F(18) + 1200.0f + mDistCheckModifier) { + if (field_0x728 == 0) { + mActionMode = ACTION_MODE_15; + } + } else { + if (checkAttackStart() || checkWalkStart()) { + break; + } + + if (fVar1 > nREG_F(18) + 1800.0f + mDistCheckModifier) { + setBck(BCK_WW_RUN, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.run_anm); + setActionMode(ACTION_CHASE, ACTION_MODE_21); + speedF = l_HIO.run_speed - 10.0f; + field_0x73c = 30; + break; + } + } + + if (checkSideStep()) { + mActionMode = ACTION_MODE_25; + speed.y = 0.0f; + speedF = 0.0f; + } + + if (mActionMode == ACTION_MODE_0) { + speedF = 0.0f; + setBck(BCK_WW_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); + mActionMode = ACTION_MODE_10; + } + break; + } + + case ACTION_MODE_11: + setBck(BCK_WW_RUN, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.run_anm); + speedF = l_HIO.run_speed; + mActionMode = ACTION_MODE_12; + field_0x728 = 60; + // fallthrough + case ACTION_MODE_12: + cLib_addCalcAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, &field_0x668), 4, 0x800, 0x100); + current.angle.y = shape_angle.y; + + if (field_0x668.absXZ(current.pos) < field_0x6a8 - 100.0f && (field_0x728 == 0 || + sp3c.absXZ(current.pos) > nREG_F(18) + 1500.0f + mDistCheckModifier)) { + setActionMode(ACTION_CHASE, ACTION_MODE_2); + setBck(BCK_WW_TURN, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); + } + break; + + case ACTION_MODE_15: + setBck(BCK_WW_RUN, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.run_anm); + speedF = l_HIO.run_speed; + mActionMode = ACTION_MODE_16; + field_0x728 = 60; + + if ((s16)(cLib_targetAngleY(¤t.pos, &field_0x668) - fopAcM_searchPlayerAngleY(this)) < 0) { + field_0x6cc = 0x2000; + } else { + field_0x6cc = -0x2000; + } + // fallthrough + case ACTION_MODE_16: + cLib_addCalcAngleS(&shape_angle.y, field_0x6cc + cLib_targetAngleY(¤t.pos, &field_0x668), 4, 0x800, 0x100); + current.angle.y = shape_angle.y; + + if (field_0x668.absXZ(current.pos) < field_0x6a8 - 100.0f && (field_0x728 == 0 || + sp3c.absXZ(current.pos) > nREG_F(18) + 1500.0f + mDistCheckModifier)) { + setActionMode(ACTION_CHASE, ACTION_MODE_2); + setBck(BCK_WW_TURN, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); + } + break; + + case ACTION_MODE_25: + field_0x6cc = fopAcM_searchPlayerAngleY(this); + shape_angle.y = field_0x6cc; + + if (field_0x6c0 == 0) { + setBck(BCK_WW_SIDESTEPL, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); + current.angle.y = field_0x6cc + 0x3800 + cM_rndFX(2000.0f); + } else { + setBck(BCK_WW_SIDESTEPR, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); + current.angle.y = field_0x6cc - 0x3800 + cM_rndFX(2000.0f); + } + + mActionMode = ACTION_MODE_27; + // fallthrough + case ACTION_MODE_27: + field_0x75a = 1; + + if (mpModelMorf->checkFrame(5.0f)) { + field_0x75b = 1; + speed.y = nREG_F(15) + 20.0f; + speedF = nREG_F(16) + cM_rndFX(5.0f) + 40.0f; + mActionMode = ACTION_MODE_28; + mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); + } + break; + + case ACTION_MODE_28: + field_0x75a = 1; + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 4, 0x800, 0x100); + + if (mObjAcch.ChkGroundHit()) { + speedF = 0.0f; + + if (mpModelMorf->isStop()) { + setBck(BCK_WW_WAIT, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f); + mActionMode = ACTION_MODE_10; + } + } + break; + + } } -/* ############################################################################################## */ -/* 807EF854-807EF858 0000E4 0004+00 0/1 0/0 0/0 .rodata @6190 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6190 = 3.0f / 5.0f; -COMPILER_STRIP_GATE(0x807EF854, &lit_6190); -#pragma pop - -/* 807EF858-807EF85C 0000E8 0004+00 0/1 0/0 0/0 .rodata @6191 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6191 = 3072.0f; -COMPILER_STRIP_GATE(0x807EF858, &lit_6191); -#pragma pop - -/* 807EF85C-807EF860 0000EC 0004+00 0/1 0/0 0/0 .rodata @6192 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6192 = 1024.0f; -COMPILER_STRIP_GATE(0x807EF85C, &lit_6192); -#pragma pop - -/* 807EF860-807EF864 0000F0 0004+00 0/1 0/0 0/0 .rodata @6193 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6193 = 1700.0f; -COMPILER_STRIP_GATE(0x807EF860, &lit_6193); -#pragma pop - -/* 807EF864-807EF868 0000F4 0004+00 0/1 0/0 0/0 .rodata @6194 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6194 = 7.0f / 10.0f; -COMPILER_STRIP_GATE(0x807EF864, &lit_6194); -#pragma pop - /* 807EC940-807ECE58 005340 0518+00 2/2 0/0 0/0 .text checkWalkStart__8daE_WW_cFv */ -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; +bool daE_WW_c::checkWalkStart() { + if (field_0x6b4 != 0) { + return false; + } -// 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; + s16 angleY = fopCamM_GetAngleY(dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0))); + cXyz spd0, spdc; + cXyz spe8 = daPy_getPlayerActorClass()->current.pos; + + if (field_0x740 == 0) { + field_0x740 = 30; + s16 sVar3 = fopAcM_searchPlayerAngleY(this) - 0x8000; + s16 sVar2 = angleY - sVar3; + if (abs(sVar2) < 0x3000) { + if (cM_rnd() < nREG_F(20) + 0.6f) { + return false; + } + + angleY = cM_rndFX(1024.0f) + 3072.0f; + if (abs(sVar2) < 0x2000) { + if (cM_rnd() < 0.5f) { + angleY = -angleY; + } + } else if (sVar2 > 0) { + angleY = -angleY; + } + + f32 fVar2 = spe8.absXZ(current.pos); + if (fVar2 < nREG_F(18) + 1400.0f + 100.0f) { + fVar2 = nREG_F(18) + 1400.0f + 100.0f; + } + + if (fVar2 > nREG_F(18) + 1800.0f - 100.0f) { + fVar2 = nREG_F(18) + 1800.0f - 100.0f; + } + + spdc.set(0.0f, 100.0f, fVar2); + cLib_offsetPos(&spd0, &spe8, sVar3 + angleY, &spdc); + cXyz spf4(current.pos.x, current.pos.y + 100.0f, current.pos.z); + dBgS_LinChk lin_chk; + lin_chk.Set(&spf4, &spd0, NULL); + + if (!dComIfG_Bgsp().LineCross(&lin_chk)) { + field_0x65c = spd0; + setActionMode(ACTION_WALK, ACTION_MODE_0); + + return true; + } + } else { + if (cM_rnd() < nREG_F(20) + 0.7f) { + return false; + } + + u8 uVar1 = 0; + spdc.set(0.0f, 100.0f, nREG_F(18) + 1500.0f + 100.0f); + cLib_offsetPos(&spd0, &spe8, (s16)(angleY + 0x1400 + cM_rndFX(1024.0f)), &spdc); + + f32 fVar1 = checkCreateBg(spd0); + if (fVar1 != -1e9f) { + uVar1 = 1; + spd0.y = fVar1; + } + + cXyz sp100; + cLib_offsetPos(&sp100, &spe8, (s16)(angleY - 0x1400 + cM_rndFX(1024.0f)), &spdc); + + fVar1 = checkCreateBg(sp100); + if (fVar1 != -1e9f) { + uVar1 |= 2; + sp100.y = fVar1; + } + + if (uVar1 == 0) { + return false; + } + + if (uVar1 == 3) { + if (cM_rnd() < 0.5f) { + spd0 = sp100; + } + } else if (uVar1 == 2) { + spd0 = sp100; + } + + createWolf(spd0, 0); + fopAcM_delete(this); + + return true; + } + } + + return false; } -/* ############################################################################################## */ -/* 807EF868-807EF86C 0000F8 0004+00 0/3 0/0 0/0 .rodata @6359 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6359 = 300.0f; -COMPILER_STRIP_GATE(0x807EF868, &lit_6359); -#pragma pop - /* 807ECE58-807ED674 005858 081C+00 1/1 0/0 0/0 .text executeWalk__8daE_WW_cFv */ void daE_WW_c::executeWalk() { -// 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; + f32 fVar1 = daPy_getPlayerActorClass()->current.pos.absXZ(current.pos); -// 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; -// } + switch (mActionMode) { + case ACTION_MODE_0: + setBck(BCK_WW_WALK, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.walk_anm); + mActionMode = ACTION_MODE_1; + field_0x728 = 150; + // fallthrough + case ACTION_MODE_1: { + if (mpModelMorf->checkFrame(5.0f) || mpModelMorf->checkFrame(10.0f) || mpModelMorf->checkFrame(15.0f) || mpModelMorf->checkFrame(20.0f)) { + mSound.startCreatureSound(Z2SE_EN_WW_FOOTNOTE, 0, -1); + } + + field_0x75a = 1; + s16 sVar1 = cLib_targetAngleY(¤t.pos, &field_0x65c); + cLib_addCalcAngleS(¤t.angle.y, sVar1, 8, 0x400, 0x100); + s16 sVar2 = fopAcM_searchPlayerAngleY(this); + + if ((s16)(sVar1 - sVar2) > 0x4000) { + sVar1 = sVar2 + 0x4000; + } + + if ((s16)(sVar1 - sVar2) < -0x4000) { + sVar1 = sVar2 - 0x4000; + } + + cLib_addCalcAngleS(&shape_angle.y, sVar1, 8, 0x400, 0x100); + cLib_chaseF(&speedF, nREG_F(1) + 5.0f, 1.0f); + + if (field_0x65c.absXZ(current.pos) < 150.0f || field_0x728 == 0) { + setActionMode(ACTION_CHASE, ACTION_MODE_2); + } + + if (fVar1 < nREG_F(18) + 1400.0f + mDistCheckModifier) { + if (field_0x730 != 0 || fVar1 < nREG_F(18) + 1200.0f + mDistCheckModifier) { + setActionMode(ACTION_CHASE, ACTION_MODE_12); + setBck(BCK_WW_RUN, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.run_anm); + } else { + setBck(BCK_WW_BACKSTEP, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); + setActionMode(ACTION_CHASE, ACTION_MODE_15); + speedF = -40.0f; + speed.y = 25.0f; + field_0x730 = 60; + field_0x75b = 1; + } + } else if (fVar1 > nREG_F(18) + 1800.0f + mDistCheckModifier) { + setBck(BCK_WW_RUN, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.run_anm); + setActionMode(ACTION_CHASE, ACTION_MODE_20); + speedF = l_HIO.run_speed - 10.0f; + } + + if (checkSideStep()) { + setActionMode(ACTION_CHASE, ACTION_MODE_25); + speed.y = 0.0f; + speedF = 0.0f; + } + + if (checkMoveOut()) return; + break; + } + + case ACTION_MODE_10: + setBck(BCK_WW_RUN, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.run_anm); + mActionMode = ACTION_MODE_11; + field_0x728 = 150; + // fallthrough + case ACTION_MODE_11: + if (daPy_getPlayerActorClass()->checkNowWolf()) { + speedF = l_HIO.wolf_escape_speed; + } else { + speedF = l_HIO.link_escape_speed; + } + + s16 sVar1; + if (calcMoveDir(&sVar1, cLib_targetAngleY(¤t.pos, &field_0x65c))) { + cLib_addCalcAngleS(&shape_angle.y, sVar1, 4, 0x800, 0x200); + } else { + cLib_addCalcAngleS(&shape_angle.y, sVar1, 8, 0x200, 0x80); + } + + current.angle.y = shape_angle.y; + + if (field_0x65c.abs(current.pos) < 300.0f || field_0x728 == 0) { + if (fVar1 > nREG_F(18) + 1400.0f + mDistCheckModifier) { + setActionMode(ACTION_CHASE, ACTION_MODE_2); + setBck(BCK_WW_TURN, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_WW_JUMP, 0, -1); + } else { + setActionMode(ACTION_CHASE, ACTION_MODE_12); + setBck(BCK_WW_RUN, J3DFrameCtrl::EMode_LOOP, 3.0f, l_HIO.run_anm); + } + } + break; + } } -/* ############################################################################################## */ -/* 807EF86C-807EF870 0000FC 0004+00 0/1 0/0 0/0 .rodata @6385 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6385 = -30.0f; -COMPILER_STRIP_GATE(0x807EF86C, &lit_6385); -#pragma pop - /* 807ED674-807ED78C 006074 0118+00 1/1 0/0 0/0 .text eWW_posMoveF__8daE_WW_cFv */ void daE_WW_c::eWW_posMoveF() { - if (field_0x75B != 0 && speed.y < 0.0f && mAcch.ChkGroundHit()) { - field_0x75B = 0; + if (field_0x75b != 0 && speed.y < 0.0f && mObjAcch.ChkGroundHit()) { + field_0x75b = 0; } - switch (field_0x75B) { + + 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()) { + if (mObjAcch.ChkGroundHit()) { cM3dGPla plane; - dComIfG_Bgsp().GetTriPla(mAcch.m_gnd, &plane); + dComIfG_Bgsp().GetTriPla(mObjAcch.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() { -// s16 temp_r26; -// void **temp_r3; -// void **temp_r3_2; -// void *temp_r1; + field_0x75a = 0; + setGroundAngle(); + damage_check(); + mSph1[1].OffAtSetBit(); + mSph2[0].SetTgType(0xD8000012); + mSph2[1].SetTgType(0xD8000012); + BOOL bVar1 = FALSE; + s16 sVar1 = shape_angle.y; -// 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; + switch (mAction) { + case ACTION_MASTER: + executeMaster(); + return; - case ACTION_EXECUTE_WAIT: - executeWait(); - /* Fallthrough */ - default: - break; + case ACTION_WAIT: + executeWait(); + break; - case ACTION_EXECUTE_ATTACK: - executeAttack(); - var_r29 = 1; - break; + case ACTION_ATTACK: + executeAttack(); + bVar1 = TRUE; + break; - case ACTION_EXECUTE_CHASE: - executeChase(); - var_r29 = 1; - break; + case ACTION_CHASE: + executeChase(); + bVar1 = TRUE; + break; - case ACTION_EXECUTE_DAMAGE: - executeDamage(); - var_r29 = 1; - break; + case ACTION_DAMAGE: + executeDamage(); + bVar1 = TRUE; + break; - case ACTION_EXECUTE_MOVE_OUT: - executeMoveOut(); - break; + case ACTION_MOVE_OUT: + executeMoveOut(); + break; - case ACTION_EXECUTE_WALK: - executeWalk(); - var_r29 = 1; - break; + case ACTION_WALK: + executeWalk(); + bVar1 = TRUE; + 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; - // } + setBlurEffect(); + field_0x759 = 0; + if (shape_angle.y != sVar1) { + if ((s16)(shape_angle.y - sVar1) < 0) { + field_0x759 = 1; + } else { + field_0x759 = 2; + } + } + + mSound.setLinkSearch(bVar1); + + if (field_0x75d) { + dBgS_LinChk lin_chk; + lin_chk.Set(&dComIfGp_getCamera(0)->lookat.eye, &attention_info.position, this); + + if (dComIfG_Bgsp().LineCross(&lin_chk)) { + attention_info.flags &= 0xFFFFFFFB; + } else { + attention_info.flags |= 4; + } + } + + eWW_posMoveF(); + mObjAcch.CrrPos(dComIfG_Bgsp()); + mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + + if (checkBck(0xB)) { + if (mpModelMorf->checkFrame(0.0f) || mpModelMorf->checkFrame(6.0f) || mpModelMorf->checkFrame(8.0f) || mpModelMorf->checkFrame(13.0f)) { + mSound.startCreatureSound(Z2SE_EN_WW_FOOTNOTE, 0, -1); + } + } else if (checkBck(0xF) && mpModelMorf->checkFrame(5.0f)) { + mSound.startCreatureVoice(Z2SE_EN_WW_V_WAIT, -1); + } } /* 807EDA78-807EDB00 006478 0088+00 1/1 0/0 0/0 .text mtx_set__8daE_WW_cFv */ @@ -1994,45 +1927,23 @@ void daE_WW_c::mtx_set() { 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); + mDoMtx_stack_c::XrotM(field_0x6ce); + mDoMtx_stack_c::scaleM(l_HIO.model_size, l_HIO.model_size, l_HIO.model_size); - mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); - mpMorf->modelCalc(); + mpModelMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + mpModelMorf->modelCalc(); } -/* ############################################################################################## */ -/* 807EF870-807EF874 000100 0004+00 0/0 0/0 0/0 .rodata @6439 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6439 = 6.0f; -COMPILER_STRIP_GATE(0x807EF870, &lit_6439); -#pragma pop - -/* 807EF874-807EF878 000104 0004+00 0/0 0/0 0/0 .rodata @6440 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6440 = 13.0f; -COMPILER_STRIP_GATE(0x807EF874, &lit_6440); -#pragma pop - -/* 807EF878-807EF87C 000108 0004+00 0/1 0/0 0/0 .rodata @6500 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_6500 = 70.0f; -COMPILER_STRIP_GATE(0x807EF878, &lit_6500); -#pragma pop - /* 807EDB00-807EDCC4 006500 01C4+00 1/1 0/0 0/0 .text cc_set__8daE_WW_cFv */ void daE_WW_c::cc_set() { cXyz sp8; - if (mActionID != ACTION_EXECUTE_MASTER) { - J3DModel* model_p = mpMorf->getModel(); - mDoMtx_stack_c::copy(model_p->getAnmMtx(4)); + if (mAction != ACTION_MASTER) { + J3DModel* model_p = mpModelMorf->getModel(); + mDoMtx_stack_c::copy(model_p->getAnmMtx(JNT_HEAD)); 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::copy(model_p->getAnmMtx(JNT_BODY01)); mDoMtx_stack_c::transM(0.0f, -20.0f, 0.0f); mDoMtx_stack_c::multVecZero(&sp8); mSph1[0].SetC(sp8); @@ -2041,7 +1952,7 @@ void daE_WW_c::cc_set() { 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::copy(model_p->getAnmMtx(JNT_HEAD)), mDoMtx_stack_c::transM(-10.0f, -20.0f, 0.0f); mDoMtx_stack_c::multVecZero(&sp8); mSph1[1].SetC(sp8); @@ -2055,63 +1966,56 @@ void daE_WW_c::cc_set() { /* 807EDCC4-807EDE6C 0066C4 01A8+00 1/1 0/0 0/0 .text execute__8daE_WW_cFv */ int daE_WW_c::execute() { -// mDoMtx_stack_c *temp_ret; -// s32 temp_cr0_eq; -// s32 var_r29; -// void *temp_r1; -// void *temp_r4; + if (field_0x728 != 0) { + field_0x728--; + } + + if (field_0x72c != 0) { + field_0x72c--; + } + + if (field_0x724 != 0) { + field_0x724--; + } + + if (field_0x730 != 0) { + field_0x730--; + } + + if (field_0x734 != 0) { + field_0x734--; + } + + if (field_0x738 != 0) { + field_0x738--; + } + + if (field_0x73c != 0) { + field_0x73c--; + } + + if (field_0x740 != 0) { + field_0x740--; + } + + for (int i = 0; i++ != 0;) { + if (field_0x744[i] != 0) { + field_0x744[i]--; + } + } + + action(); + mtx_set(); + cc_set(); + setHeadAngle(); + + cXyz i_effPos; + mDoMtx_stack_c::copy(mpModelMorf->getModel()->getAnmMtx(JNT_BODY02)); + mDoMtx_stack_c::transM(nREG_F(0), nREG_F(1), nREG_F(2)); + mDoMtx_stack_c::multVecZero(&i_effPos); + cXyz i_effSize(nREG_F(3) + 1.0f, nREG_F(4) + 1.0f, nREG_F(5) + 2.0f); + setMidnaBindEffect(this, &mSound, &i_effPos, &i_effSize); -// 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; } @@ -2120,167 +2024,148 @@ 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 - -// /* 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 */ -int daE_WW_c::calcMoveDir(s16* param_0, s16 param_1) { -// s16 temp_r3; -// s16 var_r29; -// s32 var_r27; -// void *temp_r1; +bool daE_WW_c::calcMoveDir(s16* param_1, s16 param_2) { + dBgS_LinChk lin_chk; + cM3dGPla plane; + s16 sVar4, sVar2[3], sVar3[3]; + s16 sVar1[3] = {0, -0x2000, 0x2000}; + f32 fVar1[3]; + cXyz spc0, spcc; + cXyz spd8(0.0f, 0.0f, 500.0f); + spcc.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); -// 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; + for (int i = 0; i < 3; i++) { + fVar1[i] = 1000.0f; + cLib_offsetPos(&spc0, &spcc, shape_angle.y + sVar1[i], &spd8); + lin_chk.Set(&spcc, &spc0, NULL); + sVar2[i] = 0; + + if (dComIfG_Bgsp().LineCross(&lin_chk)) { + fVar1[i] = current.pos.abs(lin_chk.GetCross()); + dComIfG_Bgsp().GetTriPla(lin_chk, &plane); + + if (plane.mNormal.y < 0.5f) { + field_0x750[i] = sVar3[i] = cM_atan2s(plane.mNormal.x, plane.mNormal.z); + sVar2[i] = 1; + field_0x744[i] = nREG_S(0) + 30; + } + } + } + + if (strcmp("D_MN11", dComIfGp_getStartStageName()) == 0 && dComIfGp_getStartStageRoomNo() == 4) { + if (sVar2[0] != 0) { + field_0x74c = 0; + field_0x744[1] = 0; + } else { + if (field_0x744[1] != 0) { + sVar3[1] = field_0x750[1]; + sVar2[1] = 1; + } + + if (field_0x74c != 0) { + sVar3[2] = field_0x750[2]; + sVar2[2] = 1; + } + } + } + + if (sVar2[1] != 0 && sVar2[2] != 0) { + if (sVar2[0] != 0) { + if (field_0x759 == 1) { + sVar4 = shape_angle.y - 0x2000; + } else { + sVar4 = shape_angle.y + 0x2000; + } + } else if (field_0x759 == 1) { + sVar4 = shape_angle.y - 0x2000; + } else if (field_0x759 == 2) { + sVar4 = shape_angle.y + 0x2000; + } else { + sVar4 = param_2; + } + + field_0x738 = 30; + } else if (sVar2[0] != 0) { + if (sVar2[1] != 0) { + sVar4 = shape_angle.y + 0x2000; + } else if (sVar2[2] != 0) { + sVar4 = shape_angle.y - 0x2000; + } else if ((s16)(sVar3[0] - shape_angle.y) > 0) { + sVar4 = shape_angle.y + 0x2000; + } else { + sVar4 = shape_angle.y - 0x2000; + } + + if (field_0x738 == 0) { + if (abs((s16)(fopAcM_searchPlayerAngleY(this) - sVar4)) < 0x4000) { + sVar4 = param_2; + } + } + } else if (sVar2[1] != 0) { + if ((s16)(sVar3[1] - shape_angle.y) < 0) { + sVar4 = sVar3[1] + 0x4000; + } else { + sVar4 = sVar3[1] - 0x4000; + } + + if (field_0x738 == 0) { + if (abs((s16)(fopAcM_searchPlayerAngleY(this) - sVar4)) < 0x2000) { + sVar4 = sVar3[1]; + } + } + + if (fVar1[1] < 300.0f) { + sVar4 = sVar3[1]; + } + } else if (sVar2[2] != 0) { + if ((s16)(sVar3[2] - shape_angle.y) < 0) { + sVar4 = sVar3[2] + 0x4000; + } else { + sVar4 = sVar3[2] - 0x4000; + } + + if (field_0x738 == 0) { + if (abs((s16)(fopAcM_searchPlayerAngleY(this) - sVar4)) < 0x2000) { + sVar4 = sVar3[2]; + } + } + + if (fVar1[2] < 300.0f) { + sVar4 = sVar3[2]; + } + } else { + sVar4 = param_2; + } + + *param_1 = sVar4; + + for (int i = 0; i < 3; i++) { + if (sVar2[i] != 0) { + return true; + } + } + + return false; } /* 807EE438-807EE440 006E38 0008+00 1/0 0/0 0/0 .text daE_WW_IsDelete__FP8daE_WW_c */ -static int daE_WW_IsDelete(daE_WW_c* param_0) { +static int daE_WW_IsDelete(daE_WW_c* i_this) { return 1; } /* 807EE440-807EE4B4 006E40 0074+00 1/1 0/0 0/0 .text _delete__8daE_WW_cFv */ int daE_WW_c::_delete() { dComIfG_resDelete(&mPhase, "E_WW"); - if (field_0xEC4 != 0) { + if (field_0xec4 != 0) { l_HIOInit = false; mDoHIO_DELETE_CHILD(l_HIO.field_0x04); } + if (heap != 0) { mSound.deleteObject(); } + return 1; } @@ -2292,45 +2177,23 @@ static int daE_WW_Delete(daE_WW_c* i_this) { /* 807EE4D4-807EE61C 006ED4 0148+00 1/1 0/0 0/0 .text CreateHeap__8daE_WW_cFv */ 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; + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("E_WW", BMDR_WW); -// temp_r3 = dComIfG_getObjectRes((s8 *) (@LOCAL@setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz@e_prim + 0x138), 0x13); -// if (temp_r3 != NULL) { + JUT_ASSERT(2823, modelData != 0); + + mpModelMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("E_WW", BCK_WW_APPEAR), 0, 1.0f, 0, -1, &mSound, 0x80000, 0x11000084); + if (mpModelMorf == NULL || mpModelMorf->getModel() == NULL) { + return 0; + } + + J3DModel* model = mpModelMorf->getModel(); + model->setUserArea((u32)this); + for (u16 i = JNT_BODY01; i < model->getModelData()->getJointNum(); i++) { + if (i == JNT_NECK || i == JNT_HEAD) { + model->getModelData()->getJointNodePointer(i)->setCallBack(JointCallBack); + } + } -// } 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; } @@ -2340,83 +2203,39 @@ static int useHeapInit(fopAc_ac_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 - -// /* 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 - -/* 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 - -// /* 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 */ 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; - - // temp_r1 = sp - 0x50; fopAcM_SetupActor(this, daE_WW_c); 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; + + 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_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; + + field_0x6b6 = (fopAcM_GetParam(this) >> 0x14) & 0xF; + if (field_0x6b6 == 0xF || field_0x6b6 == 0) { + field_0x6b6 = 3; } - if (field_0x6B6 > 10) { - field_0x6B6 = 10; + + if (field_0x6b6 > 10) { + field_0x6b6 = 10; } + field_0x757 = (fopAcM_GetParam(this) >> 0x18) & 0xF; if (field_0x757 == 0xF || field_0x757 == 0) { field_0x757 = 1; @@ -2424,45 +2243,53 @@ int daE_WW_c::create() { 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) { + if (field_0x6b4 == 0) { var_r27 = 5; } else { var_r27 = 10; } } - field_0x6AC = 100.0f * var_r27; + + 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; + field_0xec4 = 1; l_HIO.field_0x04 = mDoHIO_CREATE_CHILD("ホワイトウルフォス", (JORReflexible*)&l_HIO); } - fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); + + fopAcM_SetMtx(this, mpModelMorf->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); + setActionMode(ACTION_MASTER, ACTION_MODE_0); } else { - mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL); + mObjAcch.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) { + mObjAcch.OnLineCheck(); + + if (field_0x6b4 == 1) { health = 1; field_0x560 = 1; } else { health = 100; field_0x560 = 100; } + mCcStts.Init(0xFE, 0, this); - field_0x75D = 1; + field_0x75d = 1; attention_info.flags = 4; mSph1[0].Set(cc_ww_src); mSph1[0].SetStts(&mCcStts); @@ -2476,19 +2303,24 @@ int daE_WW_c::create() { mSph2[1].OnTgNoHitMark(); mSound.init(¤t.pos, &eyePos, 3, 1); mSound.setEnemyName("E_ww"); - mpSound = &mSound; - field_0xEB2 = 1; + mAtInfo.mpSound = &mSound; + mAtInfo.mPowerType = 1; gravity = -5.0f; mDistCheckModifier = cM_rndFX(100.0f); field_0x668 = home.pos; - if (fopAcM_SearchByID(fopAcM_GetLinkId(this)) != 0) { - field_0x668 = current.pos; + + fopAc_ac_c* actor_p; + if (fopAcM_SearchByID(fopAcM_GetLinkId(this), (fopAc_ac_c**)&actor_p) != 0) { + field_0x668 = actor_p->current.pos; } - setActionMode(1, 0); + + setActionMode(ACTION_WAIT, ACTION_MODE_0); } + attention_info.distances[fopAc_attn_BATTLE_e] = 0x34; daE_WW_Execute(this); } + return phase_state; } @@ -2497,100 +2329,6 @@ 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 - -// /* 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 - -// /* 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 - -// /* 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 - -// /* 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 -// } - -// #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 -// } - -// /* 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 -// } - -// /* 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 -// } - -/* ############################################################################################## */ - /* 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, @@ -2618,4 +2356,4 @@ extern actor_process_profile_definition g_profile_E_WW = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -AUDIO_INSTANCES; // Needed ?? +AUDIO_INSTANCES;