diff --git a/include/JSystem/J3DGraphBase/J3DTransform.h b/include/JSystem/J3DGraphBase/J3DTransform.h index de850d7db26..51a48234ee6 100644 --- a/include/JSystem/J3DGraphBase/J3DTransform.h +++ b/include/JSystem/J3DGraphBase/J3DTransform.h @@ -23,6 +23,7 @@ struct J3DTransformInfo { return *this; } */ +#ifdef __MWERKS__ inline J3DTransformInfo& operator=(const register J3DTransformInfo& b) { register const J3DTransformInfo& var_r31 = b; register J3DTransformInfo& var_r30 = *this; @@ -46,6 +47,7 @@ struct J3DTransformInfo { } return *this; } +#endif }; // Size: 0x20 extern J3DTransformInfo const j3dDefaultTransformInfo; diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h index b5d58ad8f98..072bc65dc68 100644 --- a/include/d/actor/d_a_alink.h +++ b/include/d/actor/d_a_alink.h @@ -676,6 +676,10 @@ public: FTANM_UNK_9 = 9, FTANM_UNK_13 = 0x13, FTANM_UNK_14 = 0x14, + FTANM_UNK_20 = 0x20, + FTANM_UNK_21 = 0x21, + FTANM_UNK_22 = 0x22, + FTANM_UNK_23 = 0x23, FTANM_UNK_27 = 0x27, FTANM_UNK_2D = 0x2D, FTANM_UNK_48 = 0x48, @@ -1677,8 +1681,8 @@ public: /* 800CB480 */ bool checkSwordDraw(); /* 800CB53C */ bool checkShieldDraw(); /* 800CB5F8 */ bool checkItemDraw(); - /* 800CB694 */ void initShadowScaleLight(); - /* 800CBA38 */ void moveShadowScaleLight(); + /* 800CB694 */ int initShadowScaleLight(); + /* 800CBA38 */ int moveShadowScaleLight(); /* 800CBC18 */ void shadowDraw(); /* 800CC25C */ void modelCalc(J3DModel*); /* 800CC298 */ void basicModelDraw(J3DModel*); @@ -1709,7 +1713,7 @@ public: /* 800D014C */ void setMidnaTalkStatus(u8 status) { dComIfGp_setZStatus(status, 0); } - /* 800D0164 */ void set3DStatus(u8, u8); + /* 800D0164 */ void set3DStatus(u8 status, u8 direction) { dComIfGp_set3DStatus(status, direction, 0); } /* 800D2684 */ void checkCutTurnCharge(); /* 800D0E08 */ void checkLightSwordMtrl(); /* 800D0E98 */ BOOL checkSwordEquipAnime() const; @@ -2093,14 +2097,14 @@ public: /* 800ECD90 */ BOOL checkHorseNotDamageReaction() const; /* 800ECDC4 */ BOOL checkHorseWaitLashAnime() const; /* 800ECDEC */ BOOL checkHorseReinLeftOnly() const; - /* 800ECE10 */ void getReinHandType() const; + /* 800ECE10 */ int getReinHandType() const; /* 800ECF04 */ BOOL checkHorseLieAnime() const; /* 800ECF5C */ BOOL checkHorseSubjectivity() const; /* 800ECF9C */ void setHorseSwordUpAnime(); /* 800ECFF4 */ void setHorseTurnUpperAnime(int); /* 800ED074 */ BOOL checkHorseNoUpperAnime() const; /* 800ED0D4 */ void getHorseReinHandPos(cXyz*, cXyz*); - /* 800ED1F0 */ void checkHorseNotGrab() const; + /* 800ED1F0 */ BOOL checkHorseNotGrab() const; /* 800ED310 */ void setHorseStirrup(); /* 800ED4B8 */ void changeBoarRunRide(); /* 800ED4DC */ int setSyncHorsePos(); @@ -2127,7 +2131,7 @@ public: /* 800EF394 */ void horseGetOffEnd(); /* 800EF450 */ int checkNextActionHorse(); /* 800EF598 */ BOOL checkHorseGetOff(); - /* 800EF6B0 */ void checkHorseGetOffAndSetDoStatus(); + /* 800EF6B0 */ int checkHorseGetOffAndSetDoStatus(); /* 800EF884 */ int setHorseGetOff(int); /* 800EF95C */ int procHorseRideInit(); /* 800EFDC4 */ int procHorseRide(); @@ -4115,12 +4119,12 @@ struct daAlink_cutParamTbl { }; // Size: 0x10 struct daAlink_cutHorseParamTbl { - /* 0x0 */ int field_0x0; - /* 0x4 */ u16 field_0x4; - /* 0x6 */ u16 field_0x6; + /* 0x0 */ daAlink_c::daAlink_FTANM m_faceanm; + /* 0x4 */ u16 m_upperAnm; + /* 0x6 */ u16 m_faceBtk; /* 0x8 */ u8 field_0x8; /* 0x9 */ u8 field_0x9; - /* 0xA */ u8 field_0xa; + /* 0xA */ u8 m_cutType; }; // Size: 0xC struct daAlinkHIO_anm_c { @@ -4446,56 +4450,32 @@ public: static daAlinkHIO_cutTurn_c1 const m; }; -class daAlinkHIO_hoCutLA_c1 { +class daAlinkHIO_hoCut_c1 { public: - /* 0x00 */ daAlinkHIO_anm_c field_0x0; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1C; -}; // Size: 0x20 + /* 0x00 */ daAlinkHIO_anm_c mCutAnm; + /* 0x14 */ f32 mAttackStartFrame; + /* 0x18 */ f32 mAttackEndFrame; + /* 0x1C */ f32 mAfterCutMorf; +}; class daAlinkHIO_hoCutLA_c0 { public: - static daAlinkHIO_hoCutLA_c1 const m; + static daAlinkHIO_hoCut_c1 const m; }; -class daAlinkHIO_hoCutLB_c1 { -public: - /* 0x00 */ daAlinkHIO_anm_c field_0x0; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1C; -}; // Size: 0x20 - class daAlinkHIO_hoCutLB_c0 { public: - static daAlinkHIO_hoCutLB_c1 const m; + static daAlinkHIO_hoCut_c1 const m; }; -class daAlinkHIO_hoCutRA_c1 { -public: - /* 0x00 */ daAlinkHIO_anm_c field_0x0; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1C; -}; // Size: 0x20 - class daAlinkHIO_hoCutRA_c0 { public: - static daAlinkHIO_hoCutRA_c1 const m; + static daAlinkHIO_hoCut_c1 const m; }; -class daAlinkHIO_hoCutRB_c1 { -public: - /* 0x00 */ daAlinkHIO_anm_c field_0x0; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1C; -}; // Size: 0x20 - class daAlinkHIO_hoCutRB_c0 { public: - static daAlinkHIO_hoCutRB_c1 const m; + static daAlinkHIO_hoCut_c1 const m; }; class daAlinkHIO_hoCutCharge_c1 { diff --git a/include/d/actor/d_a_e_wb.h b/include/d/actor/d_a_e_wb.h index 447f47afaf2..d4b002a5630 100644 --- a/include/d/actor/d_a_e_wb.h +++ b/include/d/actor/d_a_e_wb.h @@ -35,6 +35,9 @@ public: f32 nowAnimeFrame() const { return field_0x5e0->getFrame(); } s16 getWaitRollAngle() const { return mWaitRollAngle; } bool checkGetOff() const { return speedF < 3.0f; } + f32 rideSpeedRate() const { return speedF / mSpeedRate; } + f32 getAnimeFrameRate() { return field_0x5e0->getFrame() / field_0x5e0->getEndFrame(); } + BOOL checkAnmLoopFrame() { return field_0x5e0->checkFrame(0.0f); } J3DModel* getModel() { if (field_0x5e0 != NULL) { @@ -188,4 +191,4 @@ class daE_WB_HIO_c { }; -#endif /* D_A_E_WB_H */ \ No newline at end of file +#endif /* D_A_E_WB_H */ diff --git a/include/d/actor/d_a_horse.h b/include/d/actor/d_a_horse.h index 8e14f97df22..bd05bf686d1 100644 --- a/include/d/actor/d_a_horse.h +++ b/include/d/actor/d_a_horse.h @@ -7,6 +7,7 @@ #include "d/d_bg_s_lin_chk.h" #include "d/d_cc_d.h" #include "d/d_msg_flow.h" +#include "m_Do/m_Do_audio.h" class daHorseRein_c { public: @@ -47,31 +48,37 @@ class daHorse_c : public fopAc_ac_c { public: enum daHorse_ERFLG0 { /* 0x001 */ ERFLG0_UNK_1 = 0x1, - /* 0x010 */ MOVE_ACCEPT = 0x10, - /* 0x080 */ RIDE_RUN_FLG = 0x80, - /* 0x100 */ CUT_TURN_CANCEL = 0x100, + /* 0x010 */ ERFLG0_MOVE_ACCEPT = 0x10, + /* 0x080 */ ERFLG0_RIDE_RUN_FLG = 0x80, + /* 0x100 */ ERFLG0_CUT_TURN_CANCEL = 0x100, ERFLG0_UNK_18 = 0x18, }; enum daHorse_RFLG0 { - /* 0x02 */ ENEMY_SEARCH = 2, - /* 0x08 */ LASH_DASH_START = 8, - /* 0x10 */ TURN_STAND = 0x10, - /* 0x40 */ TURN_STAND_CAMERA = 0x40, + /* 0x02 */ RFLG0_ENEMY_SEARCH = 2, + /* 0x08 */ RFLG0_LASH_DASH_START = 8, + /* 0x10 */ RFLG0_TURN_STAND = 0x10, + /* 0x40 */ RFLG0_TURN_STAND_CAMERA = 0x40, }; enum daHorse_FLG0 { - /* 0x00000020 */ RODEO_LEFT = 0x20, - /* 0x00000040 */ RIDE_START_FLG = 0x40, - /* 0x00000080 */ NO_DRAW_WAIT = 0x80, - /* 0x00010000 */ PLAYER_BACK_RIDE_LASH = 0x10000, - /* 0x20000000 */ TURN_CANCEL_KEEP = 0x20000000, + /* 0x00000020 */ FLG0_RODEO_LEFT = 0x20, + /* 0x00000040 */ FLG0_RIDE_START_FLG = 0x40, + /* 0x00000080 */ FLG0_NO_DRAW_WAIT = 0x80, + /* 0x00010000 */ FLG0_PLAYER_BACK_RIDE_LASH = 0x10000, + /* 0x00400000 */ FLG0_UNK_400000 = 0x400000, + /* 0x20000000 */ FLG0_TURN_CANCEL_KEEP = 0x20000000, /* 0x80000000 */ FLG0_RODEO_MODE = 0x80000000 }; fopAc_ac_c* getZeldaActor(); - /* 807E27BC */ void cancelOriginalDemo(); + + void cancelOriginalDemo() { + field_0x16b8 = 2; + field_0x1740 = 1; + } + /* 807E27F8 */ void onDemoJumpDistance(f32, f32); /* 807E28B8 */ void changeDemoPos0(cXyz const*); /* 807E28E0 */ void setHorsePosAndAngle(cXyz const*, s16); @@ -166,7 +173,7 @@ public: bool checkNoBombProc() const { return field_0x16b4 == 0 || field_0x16b4 == 1; } bool checkResetStateFlg0(daHorse_RFLG0 flag) const { return mResetStateFlg0 & flag; } bool checkEndResetStateFlg0(daHorse_ERFLG0 flag) const { return mEndResetStateFlg0 & flag; } - bool checkStateFlg0(daHorse_FLG0 flag) const { return mStateFlg0 & flag; } + u32 checkStateFlg0(daHorse_FLG0 flag) const { return mStateFlg0 & flag; } f32 getNormalMaxSpeedF() { return mNormalMaxSpeedF; } f32 getLashMaxSpeedF() { return mLashMaxSpeedF; } void changeDemoMoveAngle(s16 angle) { mDemoMoveAngle = angle; } @@ -179,7 +186,8 @@ public: void onStateFlg0(daHorse_FLG0 flag) { mStateFlg0 |= flag; } void offStateFlg0(daHorse_FLG0 flag) { mStateFlg0 &= ~flag; } void onEndResetStateFlg0(daHorse_ERFLG0 i_flag) { mEndResetStateFlg0 |= i_flag;} - void offNoDrawWait() { offStateFlg0(NO_DRAW_WAIT); } + void offEndResetStateFlg0(daHorse_ERFLG0 i_flag) { mEndResetStateFlg0 &= ~i_flag;} + void offNoDrawWait() { offStateFlg0(FLG0_NO_DRAW_WAIT); } bool checkSpecialWallHit(const cXyz& param_0) { return (this->*mpCheckSpecialWallHitFn)(param_0); } MtxP getSaddleMtx() { return field_0x570->getAnmMtx(21); } MtxP getRootMtx() { return field_0x570->getAnmMtx(0); } @@ -193,21 +201,23 @@ public: daHoZelda_c* i_getZeldaActor() { return (daHoZelda_c*)mZeldaActorKeep.getActor(); } - bool checkTurnStandCamera() const { return checkResetStateFlg0(TURN_STAND_CAMERA); } - bool checkTurnStand() const { return checkResetStateFlg0(TURN_STAND); } - bool checkRodeoMode() const { return checkStateFlg0(FLG0_RODEO_MODE); } - bool checkCutTurnCancel() const { return checkEndResetStateFlg0(CUT_TURN_CANCEL); } - bool checkTurnCancelKeep() const { return checkStateFlg0(TURN_CANCEL_KEEP); } - bool checkTurn() const { return field_0x16b4 == 3 && field_0x1720 == 0; } - bool checkStop() const { return field_0x16b4 == 2; } + bool checkTurnStandCamera() const { return checkResetStateFlg0(RFLG0_TURN_STAND_CAMERA); } + bool checkTurnStand() const { return checkResetStateFlg0(RFLG0_TURN_STAND); } + u32 checkRodeoMode() const { return checkStateFlg0(FLG0_RODEO_MODE); } + bool checkCutTurnCancel() const { return checkEndResetStateFlg0(ERFLG0_CUT_TURN_CANCEL); } + bool checkTurnCancelKeep() const { return checkStateFlg0(FLG0_TURN_CANCEL_KEEP); } + BOOL checkRodeoLeft() const { return checkStateFlg0(FLG0_RODEO_LEFT); } + BOOL checkTurn() const { return field_0x16b4 == 3 && field_0x1720 == 0; } + BOOL checkStop() const { return field_0x16b4 == 2; } bool checkJump() const { return field_0x16b4 == 4; } bool checkWait() const { return field_0x16b4 == 0; } bool checkLand() const { return field_0x16b4 == 5 && field_0x171a == 0; } bool checkGetOff() const { return fabsf(speedF) < 3.0f; } - bool checkEnemySearch() { return checkResetStateFlg0(ENEMY_SEARCH); } + bool checkEnemySearch() { return checkResetStateFlg0(RFLG0_ENEMY_SEARCH); } bool checkOriginalDemo() const { return field_0x16b8 == 3; } s16 checkCowHit() const { return mCowHit; } s16 getCowHitAngle() const { return mCowHitAngle; } + u8 getRodeoPointCnt() const { return mRodeoPointCnt; } void onTagJump(f32 param_0, f32 param_1, f32 param_2) { field_0x1768 = param_0; @@ -216,10 +226,20 @@ public: onEndResetStateFlg0(ERFLG0_UNK_1); } - void onMoveAccept() { onEndResetStateFlg0(MOVE_ACCEPT); } + void onMoveAccept() { onEndResetStateFlg0(ERFLG0_MOVE_ACCEPT); } void onPlayerLash() { onEndResetStateFlg0(ERFLG0_UNK_18); } - void offPlayerBackRideLash() { offStateFlg0(PLAYER_BACK_RIDE_LASH); } + void offPlayerBackRideLash() { offStateFlg0(FLG0_PLAYER_BACK_RIDE_LASH); } void onRodeoMode() { onStateFlg0(FLG0_RODEO_MODE); } + void onRideStartFlg() { onStateFlg0(FLG0_RIDE_START_FLG); } + void onRideRunFlg() { onEndResetStateFlg0(ERFLG0_RIDE_RUN_FLG); } + void onPlayerBackRideLash() { onStateFlg0(FLG0_PLAYER_BACK_RIDE_LASH); } + void onCutTurnCancel() { onEndResetStateFlg0(ERFLG0_CUT_TURN_CANCEL); } + void offCutTurnCancel() { offEndResetStateFlg0(ERFLG0_CUT_TURN_CANCEL); } + void onTurnCancelKeep() { onStateFlg0(FLG0_TURN_CANCEL_KEEP); } + void offTurnCancelKeep() { offStateFlg0(FLG0_TURN_CANCEL_KEEP); } + + BOOL checkTurnCancelFrame() const { return checkTurn() && field_0x177C < field_0x5b0[0].getFrame(); } + BOOL checkStopCancelFrame() const { return checkStop() && field_0x177C < field_0x5b0[0].getFrame(); } void initHorseMtx() { mDoMtx_stack_c::transS(current.pos); @@ -228,9 +248,22 @@ public: field_0x570->calc(); } + void offRodeoMode() { + offStateFlg0(daHorse_FLG0(FLG0_RODEO_MODE | FLG0_UNK_400000)); + field_0x16bc = 0; + mDoAud_subBgmStop(); + } + void setSpeedF(f32 i_speed) { speedF = i_speed; } void setWalkSpeedF() { speedF = field_0x1764; } + MtxP getLeftStirrupMtx() { return field_0x570->getAnmMtx(0x17); } + MtxP getRightStirrupMtx() { return field_0x570->getAnmMtx(0x19); } + void calcWeightEnvMtx() { field_0x570->calcWeightEnvelopeMtx(); } + + void setReinPosNormal() { (this->*mpSetReinPosNormalFn)(); } + void setReinPosHand(int param_0) { (this->*mpSetReinPosHandFn)(param_0); } + static u8 const m_footJointTable[8]; static f32 const m_callLimitDistance2; @@ -266,7 +299,8 @@ public: /* 0x16B8 */ u8 field_0x16b8; /* 0x16B9 */ u8 field_0x16b9[2]; /* 0x16BB */ u8 mRodeoPointCnt; - /* 0x16BC */ u8 field_0x16bc[0x16C4 - 0x16BC]; + /* 0x16BC */ u8 field_0x16bc; + /* 0x16BD */ u8 field_0x16bd[0x16C4 - 0x16BD]; /* 0x16C4 */ u16 mAnmIdx[3]; /* 0x16CA */ u8 field_0x16ca[0x16F2 - 0x16CA]; /* 0x16F2 */ s16 mAimNeckAngleY; @@ -294,7 +328,9 @@ public: /* 0x1768 */ f32 field_0x1768; /* 0x176C */ f32 field_0x176c; /* 0x1770 */ f32 field_0x1770; - /* 0x1774 */ u8 field_0x1774[0x14]; + /* 0x1774 */ u8 field_0x1774[0x177C - 0x1774]; + /* 0x177C */ f32 field_0x177C; + /* 0x1780 */ u8 field_0x1780[0x1788 - 0x1780]; /* 0x1788 */ f32 mDemoStickR; /* 0x178C */ f32 mNormalMaxSpeedF; /* 0x1790 */ f32 mLashMaxSpeedF; diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 577af4bc9a5..110f2245dff 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -291,10 +291,9 @@ public: FLG2_UNK_4000000 = 0x4000000, FLG2_UNK_2080000 = 0x2080000, FLG2_UNK_2000000 = 0x2000000, - FLG2_BOAR_SINGLE_BATTLE = 0x1800000, FLG2_UNK_8000000 = 0x8000000, FLG2_UNK_1000000 = 0x1000000, - FLG2_UNK_800000 = 0x800000, + FLG2_BOAR_SINGLE_BATTLE = 0x800000, FLG2_STATUS_WINDOW_DRAW = 0x400000, FLG2_UNK_280000 = 0x280000, FLG2_UNK_200000 = 0x200000, @@ -307,8 +306,10 @@ public: FLG2_UNK_4000 = 0x4000, FLG2_UNK_2000 = 0x2000, FLG2_UNK_1000 = 0x1000, + FLG2_UNK_800 = 0x800, FLG2_PLAYER_SHADOW = 0x400, FLG2_UNK_200 = 0x200, + FLG2_UNK_100 = 0x100, FLG2_UNK_80 = 0x80, FLG2_WOLF_ENEMY_HANG_BITE = 0x40, FLG2_WOLF_ENEMY_LEFT_THROW = 0x20, @@ -368,6 +369,7 @@ public: ERFLG0_BEE_FOLLOW = 0x400000, ERFLG0_UNK_200000 = 0x200000, ERFLG0_UNK_100000 = 0x100000, + ERFLG0_UNK_80000 = 0x80000, ERFLG0_UNK_40000 = 0x40000, ERFLG0_UNK_20000 = 0x20000, ERFLG0_UNK_10000 = 0x10000, @@ -799,7 +801,7 @@ public: bool getGrabPutStart() const { return checkResetFlg0(RFLG0_GRAB_PUT_START); } bool checkSwimUp() const { return checkNoResetFlg0(FLG0_SWIM_UP); } BOOL checkHorseZelda() const { return checkNoResetFlg2(FLG2_HORSE_ZELDA); } - BOOL checkSpecialHorseRide() { return checkNoResetFlg2(daPy_FLG2(FLG2_HORSE_ZELDA | FLG2_UNK_1000000 | FLG2_UNK_800000)); } + BOOL checkSpecialHorseRide() { return checkNoResetFlg2(daPy_FLG2(FLG2_HORSE_ZELDA | FLG2_UNK_1000000 | FLG2_BOAR_SINGLE_BATTLE)); } BOOL checkBoardNoFootAngle() const { return checkResetFlg1(RFLG1_UNK_40); } bool checkGrabThrow() const { return checkResetFlg0(RFLG0_GRAB_THROW); } @@ -813,6 +815,7 @@ public: void onFogFade() { onNoResetFlg2(FLG2_UNK_4000); } BOOL checkStickArrowReset() const { return checkResetFlg0(RFLG0_UNK_1); } u32 getCutAtFlg() const { return checkNoResetFlg0(FLG0_UNK_40); } + u32 checkBoarSingleBattleFirst() const { return checkNoResetFlg2(FLG2_BOAR_SINGLE_BATTLE); } void offWolfEnemyHangBite() { offNoResetFlg2(FLG2_WOLF_ENEMY_HANG_BITE); } bool onWolfEnemyHangBite(fopAc_ac_c* param_0) { return onWolfEnemyBiteAll(param_0, FLG2_WOLF_ENEMY_HANG_BITE); } @@ -907,7 +910,7 @@ public: void onNsScream() { onEndResetFlg1(ERFLG1_UNK_1); } void onNsScreamAnm() { onEndResetFlg1(daPy_ERFLG1(ERFLG1_UNK_1 | ERFLG1_UNK_2)); } - u32 checkBoarSingleBattle() const { return checkNoResetFlg2(FLG2_BOAR_SINGLE_BATTLE); } + u32 checkBoarSingleBattle() const { return checkNoResetFlg2(daPy_FLG2(FLG2_UNK_1000000 | FLG2_BOAR_SINGLE_BATTLE)); } u32 checkWolfDashAutoJump() const { return checkNoResetFlg2(FLG2_WOLF_DASH_AUTO_JUMP); } void changeOriginalDemo() { diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index 33bf1f74bb6..61e7883e5b0 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -48,6 +48,10 @@ inline void mDoAud_subBgmStart(u32 i_bgmID) { Z2AudioMgr::getInterface()->subBgmStart(i_bgmID); } +inline void mDoAud_subBgmStop() { + Z2AudioMgr::getInterface()->subBgmStop(); +} + inline void mDoAud_bgmNowBattle(f32 param_0) { Z2AudioMgr::getInterface()->bgmNowBattle(param_0); } diff --git a/src/d/actor/d_a_alink.cpp b/src/d/actor/d_a_alink.cpp index 89364b149e3..072aa474708 100644 --- a/src/d/actor/d_a_alink.cpp +++ b/src/d/actor/d_a_alink.cpp @@ -1703,7 +1703,7 @@ COMPILER_STRIP_GATE(0x8039199C, &rightOffset); #pragma force_active on static daAlink_cutHorseParamTbl const cutParamTable_19765[] = { { - 0x20, + daAlink_c::FTANM_UNK_20, 0x91, 0x10C, 0x00, @@ -1711,7 +1711,7 @@ static daAlink_cutHorseParamTbl const cutParamTable_19765[] = { 0x22, }, { - 0x21, + daAlink_c::FTANM_UNK_21, 0x92, 0x10D, 0x00, @@ -1719,7 +1719,7 @@ static daAlink_cutHorseParamTbl const cutParamTable_19765[] = { 0x23, }, { - 0x22, + daAlink_c::FTANM_UNK_22, 0x93, 0x10E, 0x00, @@ -1727,7 +1727,7 @@ static daAlink_cutHorseParamTbl const cutParamTable_19765[] = { 0x2A, }, { - 0x23, + daAlink_c::FTANM_UNK_23, 0x94, 0x10F, 0x00, @@ -4511,7 +4511,7 @@ int daAlink_c::create() { if (checkStageName("F_SP102") && fopAcM_GetRoomNo(this) == 0 && dComIfG_play_c::getLayerNo(0) == 4) { - onNoResetFlg2(FLG2_UNK_800000); + onNoResetFlg2(FLG2_BOAR_SINGLE_BATTLE); } else if (checkStageName("F_SP123") && fopAcM_GetRoomNo(this) == 13 && dComIfG_play_c::getLayerNo(0) == 0) { diff --git a/src/d/actor/d_a_alink_HIO_data.inc b/src/d/actor/d_a_alink_HIO_data.inc index d9b5f1cb169..1396085f96b 100644 --- a/src/d/actor/d_a_alink_HIO_data.inc +++ b/src/d/actor/d_a_alink_HIO_data.inc @@ -571,7 +571,7 @@ const daAlinkHIO_cutTurn_c1 daAlinkHIO_cutTurn_c0::m = { /* 8038DC1C-8038DC3C 01A27C 0020+00 0/1 0/0 0/0 .rodata m__21daAlinkHIO_hoCutLA_c0 */ #pragma push #pragma force_active on -const daAlinkHIO_hoCutLA_c1 daAlinkHIO_hoCutLA_c0::m = { +const daAlinkHIO_hoCut_c1 daAlinkHIO_hoCutLA_c0::m = { { 21, 0.9f, @@ -588,7 +588,7 @@ const daAlinkHIO_hoCutLA_c1 daAlinkHIO_hoCutLA_c0::m = { /* 8038DC3C-8038DC5C 01A29C 0020+00 0/1 0/0 0/0 .rodata m__21daAlinkHIO_hoCutLB_c0 */ #pragma push #pragma force_active on -const daAlinkHIO_hoCutLB_c1 daAlinkHIO_hoCutLB_c0::m = { +const daAlinkHIO_hoCut_c1 daAlinkHIO_hoCutLB_c0::m = { { 24, 0.9f, @@ -605,7 +605,7 @@ const daAlinkHIO_hoCutLB_c1 daAlinkHIO_hoCutLB_c0::m = { /* 8038DC5C-8038DC7C 01A2BC 0020+00 0/1 0/0 0/0 .rodata m__21daAlinkHIO_hoCutRA_c0 */ #pragma push #pragma force_active on -const daAlinkHIO_hoCutRA_c1 daAlinkHIO_hoCutRA_c0::m = { +const daAlinkHIO_hoCut_c1 daAlinkHIO_hoCutRA_c0::m = { { 24, 0.95f, @@ -622,7 +622,7 @@ const daAlinkHIO_hoCutRA_c1 daAlinkHIO_hoCutRA_c0::m = { /* 8038DC7C-8038DC9C 01A2DC 0020+00 0/1 0/0 0/0 .rodata m__21daAlinkHIO_hoCutRB_c0 */ #pragma push #pragma force_active on -const daAlinkHIO_hoCutRB_c1 daAlinkHIO_hoCutRB_c0::m = { +const daAlinkHIO_hoCut_c1 daAlinkHIO_hoCutRB_c0::m = { { 11, 0.9f, diff --git a/src/d/actor/d_a_alink_horse.inc b/src/d/actor/d_a_alink_horse.inc index 6f4b4a45d21..e39caa5b8c0 100644 --- a/src/d/actor/d_a_alink_horse.inc +++ b/src/d/actor/d_a_alink_horse.inc @@ -81,7 +81,6 @@ int daAlink_c::getReinRideDirection() { /* 800EC8F8-800ECA3C 0E7238 0144+00 1/1 0/0 0/0 .text checkReinRideBgCheck__9daAlink_cFv */ -// NONMATCHING - issue with sp38 member setting int daAlink_c::checkReinRideBgCheck() { int direction = getReinRideDirection(); @@ -110,9 +109,7 @@ int daAlink_c::checkReinRideBgCheck() { dBgS_AcchCir* acchcir_p = mAcchCir; for (int i = 0; i < 6; i++) { - sp38.y = acchcir_p->GetWallH(); - sp38.y += current.pos.y; - sp2C.y = sp38.y; + sp38.y = sp2C.y = current.pos.y + acchcir_p->GetWallH(); if (commonLineCheck(&sp2C, &sp38)) { return 0; @@ -236,8 +233,28 @@ BOOL daAlink_c::checkHorseReinLeftOnly() const { } /* 800ECE10-800ECF04 0E7750 00F4+00 2/2 0/0 0/0 .text getReinHandType__9daAlink_cCFv */ -void daAlink_c::getReinHandType() const { - // NONMATCHING +int daAlink_c::getReinHandType() const { + if (mProcID == PROC_TOOL_DEMO) { + if ((field_0x2fab & 8) && (field_0x2fab & 0x10)) { + return 3; + } else if (field_0x2fab & 8) { + return 1; + } else if (field_0x2fab & 0x10) { + return 2; + } else if (checkReinRide()) { + return 0; + } + } else if (checkReinRide()) { + if (checkHorseNotGrab()) { + return 0; + } else if (checkHorseReinLeftOnly()) { + return 1; + } else { + return 2; + } + } + + return -1; } /* 800ECF04-800ECF5C 0E7844 0058+00 5/5 0/0 1/1 .text checkHorseLieAnime__9daAlink_cCFv @@ -277,17 +294,71 @@ BOOL daAlink_c::checkHorseNoUpperAnime() const { /* 800ED0D4-800ED1F0 0E7A14 011C+00 0/0 0/0 2/2 .text getHorseReinHandPos__9daAlink_cFP4cXyzP4cXyz */ void daAlink_c::getHorseReinHandPos(cXyz* param_0, cXyz* param_1) { - // NONMATCHING + int hand_type = getReinHandType(); + if (hand_type == 2) { + mDoMtx_multVec(getRightHandMatrix(), &m_handRightInSidePos, param_0); + mDoMtx_multVec(getRightHandMatrix(), &m_handRightOutSidePos, param_1); + } else if (hand_type == 1) { + mDoMtx_multVec(getLeftHandMatrix(), &m_handLeftOutSidePos, param_0); + mDoMtx_multVec(getLeftHandMatrix(), &m_handLeftInSidePos, param_1); + } else { + mDoMtx_multVec(getLeftHandMatrix(), &m_handLeftOutSidePos, param_0); + mDoMtx_multVec(getRightHandMatrix(), &m_handRightOutSidePos, param_1); + } } /* 800ED1F0-800ED310 0E7B30 0120+00 1/1 0/0 1/1 .text checkHorseNotGrab__9daAlink_cCFv */ -void daAlink_c::checkHorseNotGrab() const { - // NONMATCHING +BOOL daAlink_c::checkHorseNotGrab() const { + return checkBowAnime() || + mProcID == PROC_HORSE_BOTTLE_DRINK || + mProcID == PROC_HORSE_KANDELAAR_POUR || + mProcID == PROC_HORSE_RUN || + mProcID == PROC_HORSE_HANG || + mProcID == PROC_DEAD || + mProcID == PROC_GET_ITEM || + (mProcID == PROC_HORSE_GET_KEY && mProcVar2.field_0x300c != 0) || + checkUpperGuardAnime() || + checkTwoHandItemEquipAnime() || + checkGrabAnimeAndThrow() || + checkBoomerangThrowAnime() || + checkBoomerangCatchAnime() || + checkKandelaarSwingAnime() || + checkHookshotAnime() || + !(field_0x2fab & 0x18) || + (mProcID == PROC_BOAR_RUN && mProcVar2.field_0x300c != 0); } /* 800ED310-800ED4B8 0E7C50 01A8+00 1/1 0/0 0/0 .text setHorseStirrup__9daAlink_cFv */ void daAlink_c::setHorseStirrup() { - // NONMATCHING + daHorse_c* temp_r3 = dComIfGp_getHorseActor(); + if (temp_r3 == NULL || (!checkHorseRide() && (mProcID != PROC_TOOL_DEMO || field_0x2fab == 0))) { + return; + } + + if (field_0x2fab & 1) { + mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(field_0x30bc)); + mDoMtx_stack_c::transM(-2.0f, -11.0f, 1.5f); + mDoMtx_stack_c::ZXYrotM(NULL, -0x8000, 0x4000); + mDoMtx_copy(mDoMtx_stack_c::get(), temp_r3->getLeftStirrupMtx()); + } + + if (field_0x2fab & 2) { + mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(field_0x30be)); + mDoMtx_stack_c::transM(-2.0f, 11.0f, 1.5f); + mDoMtx_stack_c::ZrotM(-0x4000); + mDoMtx_copy(mDoMtx_stack_c::get(), temp_r3->getRightStirrupMtx()); + } + + if (field_0x2fab & 3) { + temp_r3->calcWeightEnvMtx(); + } + + int temp_r3_4 = getReinHandType(); + if (temp_r3_4 == 0) { + temp_r3->setReinPosNormal(); + } else if (temp_r3_4 != -1) { + temp_r3->setReinPosHand(temp_r3_4); + } } /* 800ED4B8-800ED4DC 0E7DF8 0024+00 1/1 0/0 0/0 .text changeBoarRunRide__9daAlink_cFv */ @@ -360,7 +431,6 @@ int daAlink_c::setSyncHorsePos() { return 1; } - /* 800ED78C-800ED90C 0E80CC 0180+00 4/4 0/0 0/0 .text setSyncBoarPos__9daAlink_cFv */ int daAlink_c::setSyncBoarPos() { e_wb_class* e_wb_p = static_cast(mRideAcKeep.getActor()); @@ -452,13 +522,98 @@ BOOL daAlink_c::setSyncRidePos() { /* 800EDA78-800EDB48 0E83B8 00D0+00 6/6 0/0 0/0 .text setHorseTurnAnime__9daAlink_cFv */ void daAlink_c::setHorseTurnAnime() { - // NONMATCHING + daHorse_c* temp_r3 = dComIfGp_getHorseActor(); + u16 temp_r3_2 = temp_r3->getAnmIdx(0); + + daAlink_ANM var_r31; + if (temp_r3_2 == 0xC) { + var_r31 = ANM_HORSE_JUMP_START; + } else if (temp_r3_2 == 0xB) { + var_r31 = ANM_HORSE_JUMP; + } else if (temp_r3_2 == 0xA) { + var_r31 = ANM_HORSE_JUMP_LAND; + } else if (temp_r3_2 == 0x15) { + var_r31 = ANM_HORSE_STOP; + } else if (temp_r3_2 == 0x14) { + var_r31 = ANM_HORSE_STAND; + } else { + var_r31 = ANM_HORSE_STOP_TO_STAND; + } + + setSingleAnimeBaseMorf(var_r31, temp_r3->getMorfFrame()); + + f32 temp_f1 = temp_r3->getAnmFrame(0); + mUnderFrameCtrl[0].setFrame(temp_f1); + getNowAnmPackUnder(UNDER_0)->setFrame(temp_f1); + + if (getNowAnmPackUnder(UNDER_0) != getNowAnmPackUpper(UPPER_0)) { + mUpperFrameCtrl[0].setFrame(temp_f1); + getNowAnmPackUpper(UPPER_0)->setFrame(temp_f1); + } } /* 800EDB48-800EDD6C 0E8488 0224+00 2/2 0/0 0/0 .text * getBaseHorseAnime__9daAlink_cFPQ29daAlink_c11daAlink_ANM */ void daAlink_c::getBaseHorseAnime(daAlink_c::daAlink_ANM* param_0) { - // NONMATCHING + daHorse_c* temp_r27 = dComIfGp_getHorseActor(); + + if (checkHorseNoUpperAnime() || checkUpperHorseLieAnime()) { + if (!dComIfGp_checkPlayerStatus0(0, 0x2000)) { + if (i_checkShieldGet()) { + setRStatus(0xB); + } else { + setRStatus(0x3E); + } + + if (spActionButton()) { + resetUpperAnime(UPPER_2, -1.0f); + param_0[0] = ANM_HORSE_CROUCH; + param_0[1] = ANM_HORSE_CROUCH; + return; + } + } + } + + for (int i = 0; i < 3; i++, param_0++) { + u16 temp_r3_2 = temp_r27->getAnmIdx(i); + if (temp_r3_2 == 7 || temp_r27->speedF < 0.0f) { + if (i == 1) { + param_0[0] = ANM_HORSE_WALK_B; + } else { + param_0[0] = ANM_HORSE_TURN_B; + } + } else if (temp_r3_2 == 0x12) { + param_0[0] = ANM_HORSE_DASH_B; + } else if (temp_r3_2 == 0x22) { + param_0[0] = ANM_HORSE_WALK_B; + } else if (temp_r3_2 == 0x11) { + param_0[0] = ANM_HORSE_DASH_START; + } else if (temp_r3_2 == 0x13) { + if (checkHorseZeldaBowMode() ) { + param_0[0] = ANM_HORSE_DASH_B; + } else { + param_0[0] = ANM_HORSE_DASH_A; + } + } else if (temp_r3_2 == 0x23) { + param_0[0] = ANM_HORSE_WALK_A; + } else if (temp_r3_2 == 0x17 || temp_r3_2 == 0x18) { + if (i == 1) { + param_0[0] = ANM_HORSE_WALK_B; + } else { + param_0[0] = ANM_HORSE_TURN_LEFT; + } + } else if (temp_r3_2 == 0x19 || temp_r3_2 == 0x1A) { + if (i == 1) { + param_0[0] = ANM_HORSE_WALK_B; + } else { + param_0[0] = ANM_HORSE_TURN_RIGHT; + } + } else if (temp_r3_2 == 0xFFFF && i == 1) { + param_0[0] = param_0[-1]; + } else { + param_0[0] = ANM_HORSE_WAIT; + } + } } /* 800EDD6C-800EDE8C 0E86AC 0120+00 9/9 0/0 0/0 .text checkHorseSpecialProc__9daAlink_cFv @@ -670,7 +825,6 @@ int daAlink_c::setSyncHorse(int param_0) { return 1; } - /* 800EE64C-800EE918 0E8F8C 02CC+00 1/1 0/0 0/0 .text setSyncBoar__9daAlink_cFi */ // NONMATCHING - regalloc, equivalent? NONMATCHING int daAlink_c::setSyncBoar(int param_0) { @@ -774,12 +928,61 @@ int daAlink_c::setSyncRide(int param_0) { /* 800EEAE8-800EEC98 0E9428 01B0+00 2/2 0/0 0/0 .text setBaseHorseAnimeFrame__9daAlink_cFv */ void daAlink_c::setBaseHorseAnimeFrame() { - // NONMATCHING + daHorse_c* temp_r29 = dComIfGp_getHorseActor(); + BOOL var_r27 = 0; + + f32 var_f31; + if (mUnderAnmHeap[0].checkNoSetArcNo()) { + u16 temp_r28 = mUnderAnmHeap[0].getIdx(); + if (temp_r28 == getMainBckData(ANM_HORSE_WAIT)->m_underID) { + var_f31 = mUnderFrameCtrl[0].getFrame(); + } else if ((temp_r28 == getMainBckData(ANM_HORSE_TURN_B)->m_underID && temp_r29->getAnmIdx(1) == 6) || ((temp_r28 == getMainBckData(ANM_HORSE_TURN_LEFT)->m_underID || temp_r28 == getMainBckData(ANM_HORSE_TURN_RIGHT)->m_underID) && (temp_r29->getAnmIdx(0) == 0x17 || temp_r29->getAnmIdx(0) == 0x19))) { + var_f31 = mUnderFrameCtrl[0].getEnd(); + mUnderFrameCtrl[0].onEndFlg(); + var_r27 = 1; + } else { + field_0x3460 = 0.0f; + var_f31 = temp_r29->getAnmFrame(0); + } + } else { + var_f31 = temp_r29->getAnmFrame(0); + } + + getNowAnmPackUnder(UNDER_0)->setFrame(var_f31); + mUnderFrameCtrl[0].setFrame(var_f31); + + if (var_r27) { + getNowAnmPackUnder(UNDER_1)->setFrame(field_0x3460); + simpleAnmPlay(getNowAnmPackUnder(UNDER_1)); + field_0x3460 = getNowAnmPackUnder(UNDER_1)->getFrame(); + } else if (temp_r29->getAnmIdx(1) == 0xFFFF) { + getNowAnmPackUnder(UNDER_1)->setFrame(var_f31); + } else { + getNowAnmPackUnder(UNDER_1)->setFrame(temp_r29->getAnmFrame(1)); + } + + getNowAnmPackUpper(UPPER_0)->setFrame(var_f31); + getNowAnmPackUpper(UPPER_1)->setFrame(getNowAnmPackUnder(UNDER_1)->getFrame()); } /* 800EEC98-800EED98 0E95D8 0100+00 2/2 0/0 0/0 .text setBaseBoarAnime__9daAlink_cFv */ void daAlink_c::setBaseBoarAnime() { - // NONMATCHING + e_wb_class* temp_r30 = (e_wb_class*)mRideAcKeep.getActor(); + + f32 var_f31; + if (checkEventRun() && fopAcM_getTalkEventPartner(this) == (fopAc_ac_c*)getMidnaActor()) { + var_f31 = 0.0f; + } else { + var_f31 = temp_r30->rideSpeedRate(); + } + + if (var_f31 < 0.2f) { + setDoubleAnime(var_f31, 1.0f, 1.0f, ANM_HORSE_WAIT, ANM_HORSE_WALK_A, 0xA, -1.0f); + } else if (var_f31 < 0.5f) { + setDoubleAnime(3.333333f * (var_f31 - 0.2f), 1.0f, 1.0f, ANM_HORSE_WALK_A, ANM_HORSE_WALK_B, 0xA, -1.0f); + } else { + setDoubleAnime(2.0f * (var_f31 - 0.5f), 1.0f, 1.0f, ANM_HORSE_WALK_B, ANM_HORSE_DASH_A, 0xA, -1.0f); + } } /* 800EED98-800EEE30 0E96D8 0098+00 18/18 0/0 0/0 .text setBaseRideAnime__9daAlink_cFv */ @@ -796,7 +999,6 @@ void daAlink_c::setBaseRideAnime() { } } - /* 800EEE30-800EEE5C 0E9770 002C+00 1/1 0/0 0/0 .text checkHorseSwordUpSpped__9daAlink_cFv */ bool daAlink_c::checkHorseSwordUpSpped() { daHorse_c* horse_p = dComIfGp_getHorseActor(); @@ -819,9 +1021,37 @@ void daAlink_c::setHorseSwordUp(int param_0) { /* 800EEF30-800EF050 0E9870 0120+00 9/9 0/0 0/0 .text setRideSubjectAngle__9daAlink_cFs */ +// NONMATCHING - cLib_minMaxLimit regalloc int daAlink_c::setRideSubjectAngle(s16 param_0) { - // NONMATCHING - return 0; + shape_angle.y += mBodyAngle.y; + BOOL temp_r27 = setBodyAngleToCamera(); + + s16 var_r30; + if (mTargetedActor != NULL) { + var_r30 = 10000; + } else { + var_r30 = daAlinkHIO_horse_c0::m.field_0x58; + } + + mBodyAngle.x = cLib_minMaxLimit(mBodyAngle.x, daAlinkHIO_horse_c0::m.field_0x5A, var_r30); + + s16 temp_r29 = shape_angle.y - param_0; + if (checkHorseZelda()) { + field_0x3190 = cLib_minMaxLimit(temp_r29, -0x4000, 0x4000); + } else { + field_0x3190 = temp_r29; + } + + mBodyAngle.y = field_0x3190; + shape_angle.y = param_0; + current.angle.y = param_0; + + if (!checkNoResetFlg2(FLG2_UNK_100)) { + field_0x310a = mBodyAngle.x; + field_0x310c = param_0 + field_0x3190; + } + + return temp_r27; } /* 800EF050-800EF0E8 0E9990 0098+00 7/7 0/0 0/0 .text setBodyAngleRideReadyAnime__9daAlink_cFv */ @@ -859,7 +1089,6 @@ BOOL daAlink_c::checkHorseGetOffWallCheck(cXyz* i_lineStartPos, cXyz* i_lineEndP return FALSE; } - /* 800EF198-800EF35C 0E9AD8 01C4+00 2/2 0/0 0/0 .text checkHorseGetOffDirection__9daAlink_cFv */ int daAlink_c::checkHorseGetOffDirection() { fopAc_ac_c* ride_actor_p = mRideAcKeep.getActor(); @@ -909,7 +1138,6 @@ int daAlink_c::checkHorseGetOffDirection() { return 2; } - /* 800EF35C-800EF394 0E9C9C 0038+00 4/4 0/0 0/0 .text boarForceGetOff__9daAlink_cFv */ void daAlink_c::boarForceGetOff() { procCoLargeDamageInit(-4, 1, 0, 0, NULL, 0); @@ -986,8 +1214,37 @@ BOOL daAlink_c::checkHorseGetOff() { /* 800EF6B0-800EF884 0E9FF0 01D4+00 3/3 0/0 0/0 .text checkHorseGetOffAndSetDoStatus__9daAlink_cFv */ -void daAlink_c::checkHorseGetOffAndSetDoStatus() { - // NONMATCHING +int daAlink_c::checkHorseGetOffAndSetDoStatus() { + daHorse_c* temp_r29 = dComIfGp_getHorseActor(); + int var_r30 = 0; + BOOL temp_r28 = checkHorseGetOff(); + + if (!(fabsf(mRideAcKeep.getActor()->speedF) < 30.0f) || !setTalkStatus()) { + if (checkHorseLieAnime()) { + if (!checkSpecialHorseRide()) { + setDoStatus(0x32); + } else { + setDoStatus(0x8C); + } + } else if ((checkHorseNoUpperAnime() || checkEquipAnime()) && mMidnaTalkDelayTimer == 0 && !checkInputOnR() && temp_r28) { + if (mEquipItem == NO_ITEM) { + var_r30 = checkHorseGetOffDirection(); + if ((var_r30 != DIR_LEFT || (checkHorseRide() && temp_r29->checkEnemySearch())) && field_0x2fb4 == 0) { + if (!checkSpecialHorseRide()) { + setDoStatus(0x32); + } else { + setDoStatus(0x8C); + } + } + } else if (checkHorseRide() && !checkSpecialHorseRide() && field_0x2fb4 == 0 && temp_r29->checkEnemySearch()) { + setDoStatus(0x32); + } else { + setDoStatus(4); + } + } + } + + return var_r30; } /* 800EF884-800EF95C 0EA1C4 00D8+00 2/2 0/0 0/0 .text setHorseGetOff__9daAlink_cFi */ @@ -1009,40 +1266,470 @@ int daAlink_c::setHorseGetOff(int param_0) { /* 800EF95C-800EFDC4 0EA29C 0468+00 1/1 0/0 0/0 .text procHorseRideInit__9daAlink_cFv */ int daAlink_c::procHorseRideInit() { - // NONMATCHING - return 0; + BOOL var_r25 = 0; + + if (mEquipItem != NO_ITEM) { + if (mEquipItem == 0x103) { + var_r25 = 1; + } + deleteEquipItem(TRUE, TRUE); + } + + mRideAcKeep.setData(field_0x27f4); + + daAlink_ANM var_r29; + MtxP var_r28; + Vec* var_r27; + u32 var_r24; + if (fopAcM_GetName(field_0x27f4) == PROC_HORSE) { + daHorse_c* temp_r26 = (daHorse_c*)field_0x27f4; + temp_r26->onRideStartFlg(); + var_r28 = temp_r26->getRootMtx(); + mRideStatus = 1; + var_r27 = &l_localHorseRidePos; + field_0x384c = &l_horseBaseAnime; + var_r24 = temp_r26->checkRodeoMode(); + mZ2Link.setRiding(true); + } else { + e_wb_class* temp_r23 = (e_wb_class*)field_0x27f4; + temp_r23->setPlayerRideNow(); + var_r28 = temp_r23->getRideMtx(); + mRideStatus = 2; + var_r27 = &l_localBoarRidePos; + field_0x384c = &l_boarBaseAnime; + var_r24 = 0; + } + + commonProcInit(PROC_HORSE_RIDE); + + field_0x3588 = l_waitBaseAnime; + f32 var_f30 = 1.0f; + f32 var_f31; + s16 var_r22 = -1; + mProcVar2.field_0x300c = 0; + setHeavyBoots(0); + + int temp_r21 = getReinRideDirection(); + if (var_r24 || temp_r21 == 1) { + var_r29 = ANM_HORSE_MOUNT_BACK; + field_0x2fc0 = 2; + mProcVar2.field_0x300c = 1; + } else { + if (checkHorseRide() && ((daHorse_c*)field_0x27f4)->checkEnemySearch()) { + var_f30 *= 1.2f; + mProcVar2.field_0x300c = 1; + var_r22 = 0x30; + } + + if (temp_r21 == 2) { + if (checkHorseRide()) { + var_r29 = ANM_HORSE_MOUNT_LEFT; + } else { + var_r29 = ANM_HORSE_RIDE_LEFT; + } + field_0x2fc0 = 0; + } else { + if (checkHorseRide()) { + var_r29 = ANM_HORSE_MOUNT_RIGHT; + } else { + var_r29 = ANM_HORSE_RIDE_RIGHT; + } + field_0x2fc0 = 1; + } + + if (mDemo.getDemoMode() != 7) { + setOldRootQuaternion(0, (s16)(shape_angle.y - field_0x27f4->shape_angle.y), 0); + } + } + + mNormalSpeed = 0.0f; + + cXyz sp2C; + cXyz sp20; + + mDoMtx_multVec(var_r28, var_r27, &sp2C); + mDoMtx_stack_c::transS(field_0x27f4->current.pos); + mDoMtx_stack_c::YrotM(field_0x27f4->shape_angle.y); + mDoMtx_stack_c::XrotM(-field_0x27f4->shape_angle.x); + mDoMtx_stack_c::YrotM(-field_0x27f4->shape_angle.y); + mDoMtx_stack_c::transM(-field_0x27f4->current.pos.x, -field_0x27f4->current.pos.y, -field_0x27f4->current.pos.z); + mDoMtx_stack_c::concat(var_r28); + mDoMtx_stack_c::multVec(var_r27, &sp20); + + var_f31 = current.pos.y; + current.pos = field_0x27f4->current.pos + (sp2C - sp20); + + mDoMtx_stack_c::ZXYrotS(field_0x27f4->shape_angle.x, field_0x27f4->shape_angle.y, 0); + + if (checkBoarRide()) { + mDoMtx_stack_c::multVec(&boarRideOffset, &sp2C); + current.pos += sp2C; + var_f31 += sp2C.y; + mProcVar3.field_0x300e = 0; + } else { + mProcVar3.field_0x300e = var_r25; + } + + field_0x3478 = var_f31 - current.pos.y; + current.pos.y = var_f31; + shape_angle.y = field_0x27f4->shape_angle.y; + current.angle.y = shape_angle.y; + speed.y = 0.0f; + + setSingleAnime(var_r29, var_f30, 0.0f, var_r22, 4.0f); + + field_0x2f99 = 0x10; + field_0x2fab = 0; + field_0x3004 = 0; + field_0x3002 = 0; + field_0x30a6 = 0; + attention_info.field_0xa = 0x46; + field_0x37c8 = field_0x27f4->current.pos; + return 1; } /* 800EFDC4-800F038C 0EA704 05C8+00 1/0 0/0 0/0 .text procHorseRide__9daAlink_cFv */ int daAlink_c::procHorseRide() { - // NONMATCHING - return 0; + daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0]; + + fopAc_ac_c* temp_r3 = mRideAcKeep.getActor(); + if (temp_r3 == NULL) { + return checkNextAction(0); + } + + e_wb_class* sp8 = (e_wb_class*)temp_r3; + daHorse_c* var_r26 = (daHorse_c*)temp_r3; + + field_0x2f99 = 7; + current.pos += temp_r3->current.pos - field_0x37c8; + field_0x37c8 = temp_r3->current.pos; + + if (field_0x2fc0 == 2) { + if (temp_r29->getFrame() >= 25.0f) { + field_0x2f93 = 5; + field_0x2fab = 0x13; + } else if (temp_r29->getFrame() >= 14.0f) { + field_0x2f92 = 4; + } + + if (var_r26->checkRodeoMode()) { + if (temp_r29->getFrame() > 15.0f) { + return procHorseRunInit(); + } else if (temp_r29->getFrame() >= 4.0f) { + setSyncHorsePos(); + } + } else if (temp_r29->getFrame() >= 4.0f && temp_r29->getFrame() < 8.0f) { + current.pos.y -= field_0x3478 * (0.25f * temp_r29->getRate()); + } else if (temp_r29->getFrame() > 8.0f) { + setSyncHorsePos(); + var_r26->onRideRunFlg(); + var_r26->onMoveAccept(); + } + } else { + if (temp_r29->getFrame() >= 46.0f) { + field_0x2f92 = 4; + + if (!checkBoarRide() || (field_0x2fc0 == 0) || temp_r29->getFrame() >= 53.0f) { + field_0x2f93 = 5; + field_0x2fab = 0x13; + } else { + field_0x2fab = 3; + } + + if (checkBoarRide()) { + csXyz spC; + mDoMtx_MtxToRot(sp8->getRideMtx(), &spC); + cLib_addCalcAngleS(&shape_angle.x, -spC.z, 4, 2000, 400); + } else { + cLib_addCalcAngleS(&shape_angle.x, temp_r3->shape_angle.x, 4, 2000, 400); + } + } else { + if (temp_r29->getFrame() >= 17.0f) { + field_0x2fab |= (u8)(1 << field_0x2fc0); + + if (field_0x2fc0 == 0) { + if (temp_r29->getFrame() >= 41.0f && checkHorseRide()) { + field_0x2f92 = 4; + } + } else if (temp_r29->getFrame() >= 38.0f && checkHorseRide()) { + field_0x2f93 = 5; + field_0x2fab |= 0x10; + } + } + } + + if (temp_r29->getFrame() >= 11.0f && temp_r29->getFrame() < 16.0f) { + current.pos.y -= field_0x3478 * (0.2f * temp_r29->getRate()); + } + + if (temp_r29->getFrame() >= 17.0f && checkHorseRide() && mProcVar2.field_0x300c != 0) { + setSyncHorsePos(); + var_r26->onRideRunFlg(); + var_r26->onMoveAccept(); + } + } + + if (checkAnmEnd(temp_r29)) { + J3DTransformInfo* temp_r28 = field_0x2060->getOldFrameTransInfo(0); + + if (checkHorseRide()) { + var_r26->onRideFlg(); + + if (mProcVar2.field_0x300c == 0) { + temp_r28->mTranslate.x += l_horseBaseAnime.x; + temp_r28->mTranslate.y += l_horseBaseAnime.y; + temp_r28->mTranslate.z += l_horseBaseAnime.z; + } + } else { + sp8->setPlayerRide(); + temp_r28->mTranslate.x += l_boarBaseAnime.x; + temp_r28->mTranslate.y += l_boarBaseAnime.y; + temp_r28->mTranslate.z += l_boarBaseAnime.z; + } + + field_0x2f92 = 4; + field_0x2f93 = 5; + field_0x2fab = 0x13; + + if (field_0x2fc0 == 2) { + field_0x2fc0 = 0; + + if (checkHorseDashAccept()) { + setSingleAnimeParam(ANM_HORSE_LASH, &daAlinkHIO_horse_c0::m.mWhipAnm); + setUnderAnimeParam(getMainBckData(ANM_HORSE_LASH)->m_underID, UNDER_2, &daAlinkHIO_horse_c0::m.mWhipAnm); + onNoResetFlg1(FLG1_UNK_1000); + voiceStart(Z2SE_AL_V_RUSH_HORSE); + + field_0x30a6 = daAlinkHIO_horse_c0::m.mWhipWaitTime; + field_0x3004 = daAlinkHIO_horse_c0::m.mNoWalkTime; + var_r26->onPlayerBackRideLash(); + } + } else if (mProcVar2.field_0x300c == 0 && checkHorseRide()) { + setSingleAnime(ANM_HORSE_WAIT_A, 1.0f, 9.0f, -1, 4.0f); + } + + field_0x2fb4 = 30; + + if (mProcVar3.field_0x300e != 0) { + swordEquip(0); + } + + procHorseWaitInit(); + } + + return 1; } /* 800F038C-800F0620 0EACCC 0294+00 1/1 0/0 0/0 .text procHorseGetOffInit__9daAlink_cFi */ int daAlink_c::procHorseGetOffInit(int param_0) { - // NONMATCHING - return 0; + cXyz spC; + commonProcInit(PROC_HORSE_GETOFF); + resetUnderAnime(UNDER_2, -1.0f); + + if (mEquipItem != NO_ITEM) { + allUnequip(0); + } + + fopAc_ac_c* temp_r30 = mRideAcKeep.getActor(); + if (checkHorseRide()) { + ((daHorse_c*)temp_r30)->offRideFlg(); + } else { + ((e_wb_class*)temp_r30)->setPlayerRideNow(); + } + + field_0x37d4 = temp_r30->current.pos; + mProcVar3.field_0x300e = temp_r30->shape_angle.y; + field_0x2fc0 = param_0; + + mDoMtx_stack_c::transS(temp_r30->current.pos.x, temp_r30->current.pos.y, temp_r30->current.pos.z); + mDoMtx_stack_c::YrotM(temp_r30->shape_angle.y); + + daAlink_ANM var_r29; + if (field_0x2fc0 == 0) { + if (checkHorseRide()) { + var_r29 = ANM_HORSE_GETOFF_LEFT; + } else { + var_r29 = ANM_HORSE_FALL_LEFT; + } + mDoMtx_stack_c::multVec(&leftOffset, &spC); + } else { + if (checkHorseRide()) { + var_r29 = ANM_HORSE_GETOFF_RIGHT; + } else { + var_r29 = ANM_HORSE_FALL_RIGHT; + } + mDoMtx_stack_c::multVec(&rightOffset, &spC); + } + + setSingleAnimeBaseMorf(var_r29, 4.0f); + + mLinkGndChk.SetPos(&spC); + + spC.y = dComIfG_Bgsp().GroundCross(&mLinkGndChk); + field_0x3478 = spC.y - temp_r30->current.pos.y; + if (field_0x3478 < l_autoDownHeight) { + mProcVar4.field_0x3010 = 1; + field_0x3478 = 0.0f; + } else { + mProcVar4.field_0x3010 = 0; + } + + field_0x33b0 = 102.0f; + current.pos.y -= 102.0f; + field_0x2f99 = 0xF; + shape_angle.z = 0; + field_0x2fab = 1 << field_0x2fc0; + + if (field_0x2fc0 == 0) { + field_0x37c8.x = -l_waitBaseAnime.z; + field_0x37c8.z = l_waitBaseAnime.x; + } else { + field_0x37c8.x = l_waitBaseAnime.z; + field_0x37c8.z = -l_waitBaseAnime.x; + } + + field_0x3588 = l_waitBaseAnime; + setFootEffectProcType(2); + return 1; } /* 800F0620-800F0980 0EAF60 0360+00 1/0 0/0 0/0 .text procHorseGetOff__9daAlink_cFv */ int daAlink_c::procHorseGetOff() { - // NONMATCHING - return 0; + daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0]; + + fopAc_ac_c* temp_r3 = mRideAcKeep.getActor(); + if (temp_r3 != NULL) { + current.pos += temp_r3->current.pos - field_0x37d4; + field_0x37d4 = temp_r3->current.pos; + shape_angle.y += (s16)(mProcVar3.field_0x300e - temp_r3->shape_angle.y); + mProcVar3.field_0x300e = temp_r3->shape_angle.y; + } + + cLib_addCalcAngleS(&shape_angle.z, 0, 4, 2000, 400); + + if (temp_r29->getFrame() >= 35.0f) { + field_0x2fab = 0; + } else if (checkHorseRide()) { + if (temp_r29->getFrame() >= 14.0f) { + field_0x2fab &= ~(1 << field_0x2fc0); + } else if (temp_r29->getFrame() >= 4.0f) { + if (field_0x2fc0 == 0) { + field_0x2fab &= ~0x2; + } else { + field_0x2fab &= ~0x1; + } + } + } else if (!(temp_r29->getFrame() >= 24.0f)) { + if (temp_r29->getFrame() >= 21.0f) { + field_0x2fab &= ~(1 << field_0x2fc0); + } else if (temp_r29->getFrame() >= 3.0f) { + if (field_0x2fc0 == 0) { + field_0x2fab &= ~0x2; + } else { + field_0x2fab &= ~0x1; + } + } + } + + if (checkAnmEnd(temp_r29)) { + horseGetOffEnd(); + checkNextAction(0); + } else if (temp_r29->getFrame() >= 32.0f) { + field_0x2f99 = 5; + + if (checkModeFlg(0x400)) { + offModeFlg(0x400); + rideGetOff(); + onModeFlg(1); + + if (fabsf(current.pos.y - mLinkAcch.GetGroundH()) < l_autoUpHeight) { + field_0x2f9d = 4; + dComIfGp_getVibration().StartShock(1, 0xF, cXyz(0.0f, 1.0f, 0.0f)); + } + } + } else { + field_0x2f99 = 7; + + if (mLinkAcch.i_ChkGroundHit()) { + horseGetOffEnd(); + return procLandInit(0.0f); + } + + if (temp_r29->getFrame() < 27.0f) { + f32 temp_f31 = temp_r29->getFrame() / 27.0f; + field_0x3588.x = (l_waitBaseAnime.x * (1.0f - temp_f31)) + (field_0x37c8.x * temp_f31); + field_0x3588.z = (l_waitBaseAnime.z * (1.0f - temp_f31)) + (field_0x37c8.z * temp_f31); + } else if (temp_r29->getFrame() < 32.0f) { + current.pos.y += 0.2f * field_0x3478; + if (mProcVar4.field_0x3010 != 0) { + procFallInit(1, 4.0f); + } + } + } + + return 1; } /* 800F0980-800F0AA4 0EB2C0 0124+00 16/16 0/0 0/0 .text procHorseWaitInit__9daAlink_cFv */ int daAlink_c::procHorseWaitInit() { - // NONMATCHING - return 0; + if (!commonProcInitNotSameProc(PROC_HORSE_WAIT)) { + return 0; + } + + if (!checkHorseRide()) { + setUnderAnime(0x26E, UNDER_2, 1.0f, 0.0f, -1, -1.0f); + } else if (checkHorseUnderItemAnime()) { + resetUnderAnime(UNDER_2, -1.0f); + } + + initServiceWaitTime(); + checkHorseGetOffAndSetDoStatus(); + + setSyncRide((!checkHorseNoUpperAnime() && !checkEquipAnime()) || checkInputOnR() || !checkHorseGetOff() || checkHorseGetOffDirection() == 2); + field_0x33f0 = 0.0f; + return 1; } /* 800F0AA4-800F0C6C 0EB3E4 01C8+00 1/0 0/0 0/0 .text procHorseWait__9daAlink_cFv */ int daAlink_c::procHorseWait() { - // NONMATCHING - return 0; + BOOL temp_r27 = checkHorseGetOffAndSetDoStatus(); + if (!setSyncRide(1)) { + return 1; + } + + daHorse_c* temp_r26 = (daHorse_c*)mRideAcKeep.getActor(); + if (checkHorseRide() && temp_r26->checkRodeoMode() && !checkEventRun()) { + return procHorseRunInit(); + } + + if (orderTalk(1)) { + return 1; + } + + if (!checkNextActionHorse()) { + if (setHorseGetOff(temp_r27)) { + return 1; + } + + if (checkBoarSingleBattleFirst()) { + fopAc_ac_c* temp_r3 = (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)daAlink_searchBoar, NULL); + if (temp_r3 != NULL) { + int temp_r28 = abs((s16)(cLib_targetAngleY(&temp_r3->current.pos, ¤t.pos) - temp_r3->shape_angle.y)); + f32 temp_f31 = temp_r3->current.pos.abs2XZ(current.pos); + + if (temp_r28 > 0x800 && temp_r28 < 0x5000 && temp_f31 < 360000.0f) { + setBStatus(0x2E); + } else if (checkEndResetFlg0(ERFLG0_UNK_80000)) { + set3DStatus(0x2D, 5); + setBStatus(0x2E); + } + } + } + } + + return 1; } /* 800F0C6C-800F0CE4 0EB5AC 0078+00 1/1 0/0 0/0 .text procHorseTurnInit__9daAlink_cFv */ @@ -1061,8 +1748,81 @@ int daAlink_c::procHorseTurnInit() { /* 800F0CE4-800F1060 0EB624 037C+00 1/0 0/0 0/0 .text procHorseTurn__9daAlink_cFv */ int daAlink_c::procHorseTurn() { - // NONMATCHING - return 0; + daHorse_c* temp_r29 = dComIfGp_getHorseActor(); + if (!setSyncRidePos()) { + return 1; + } + + if (mUnderFrameCtrl[0].getFrame() < 13.0f && mEquipItem == 0x103 && !checkBootsOrArmorHeavy() && checkCutTurnInputTrigger()) { + temp_r29->onCutTurnCancel(); + return procHorseCutTurnInit(); + } + + if (!temp_r29->checkStop() && !temp_r29->checkTurn()) { + mUnderFrameCtrl[0].onEndFlg(); + procHorseWaitInit(); + field_0x30ca = 0; + } else if (temp_r29->checkTurnCancelFrame() || temp_r29->checkStopCancelFrame()) { + onModeFlg(4); + temp_r29->onTurnCancelKeep(); + + if (checkHorseNoUpperAnime()) { + if (i_checkShieldGet()) { + setRStatus(0xB); + } else { + setRStatus(0x3E); + } + + if (spActionButton()) { + resetUpperAnime(UPPER_2, -1.0f); + setSingleAnimeBase(ANM_HORSE_CROUCH); + } else { + setHorseTurnAnime(); + } + } else { + setHorseTurnAnime(); + } + + BOOL temp_r28 = checkHorseGetOffAndSetDoStatus(); + if (orderTalk(1)) { + return 1; + } + + if (checkNextActionHorse()) { + return 1; + } + + if (setHorseGetOff(temp_r28)) { + if (mProcID != PROC_HORSE_GETOFF) { + temp_r29->offCutTurnCancel(); + } + return 1; + } + + temp_r29->offTurnCancelKeep(); + } else { + if (checkBootsOrArmorHeavy() && !checkEventRun() && !checkBoarSingleBattle()) { + if (temp_r29->getAnmFrame(0) >= 30.0f) { + return procCoLargeDamageInit(-4, 1, 0, 0, NULL, 0); + } + } else if (spActionButton() && !checkSpecialHorseRide()) { + setDoStatus(0x32); + + if (doTrigger()) { + resetUpperAnime(UPPER_2, -1.0f); + + if (temp_r29->checkTurnStand()) { + return procAutoJumpInit(0); + } else { + return procBackJumpInit(0); + } + } + } + + setHorseTurnAnime(); + } + + return 1; } /* 800F1060-800F10F8 0EB9A0 0098+00 1/1 0/0 0/0 .text procHorseJumpInit__9daAlink_cFv */ @@ -1174,14 +1934,149 @@ int daAlink_c::procHorseSubjectivity() { /* 800F13D8-800F1688 0EBD18 02B0+00 1/1 0/0 0/0 .text procHorseCutInit__9daAlink_cFv */ int daAlink_c::procHorseCutInit() { - // NONMATCHING - return 0; + commonProcInit(PROC_HORSE_CUT); + BOOL var_r26 = 0; + + if (checkHorseUnderItemAnime()) { + resetUnderAnime(UNDER_2, -1.0f); + } + + setSyncRide(1); + + fopAc_ac_c* var_r25; + if (mTargetedActor != NULL) { + var_r25 = mTargetedActor; + } else { + var_r25 = mAttention->LockonTarget(0); + } + + if (var_r25 != NULL) { + s16 sp8 = (s16)(cLib_targetAngleY(¤t.pos, &var_r25->eyePos) - shape_angle.y); + if (sp8 > 0x800) { + var_r26 = 2; + } else if (sp8 < -0x800) { + var_r26 = 3; + } + } + + int var_r28; + if (mComboCutCount == 1) { + if (var_r26 == 3) { + var_r28 = 2; + } else { + var_r28 = 0; + } + } else if (var_r26 == 3) { + if (cM_rnd() < 0.5f) { + var_r28 = 2; + } else { + var_r28 = 3; + } + } else if (var_r26 == 2) { + if (cM_rnd() < 0.5f) { + var_r28 = 0; + } else { + var_r28 = 1; + } + } else { + var_r28 = (int)cM_rndF(4.0f) % 4; + } + + const daAlinkHIO_hoCut_c1* var_r29; + const daAlink_cutHorseParamTbl* temp_r27 = &cutParamTable_19765[var_r28]; + field_0x2f96 = 2; + + if (var_r28 == 0) { + var_r29 = &daAlinkHIO_hoCutLA_c0::m; + } else if (var_r28 == 1) { + var_r29 = &daAlinkHIO_hoCutLB_c0::m; + } else if (var_r28 == 2) { + var_r29 = &daAlinkHIO_hoCutRA_c0::m; + } else { + var_r29 = &daAlinkHIO_hoCutRB_c0::m; + } + + setUpperAnimeParam(temp_r27->m_upperAnm, UPPER_2, &var_r29->mCutAnm); + setFacePriTexture(temp_r27->m_faceanm); + setFacePriBck(temp_r27->m_faceBtk); + setCutType(temp_r27->m_cutType); + + field_0x3478 = var_r29->mAttackStartFrame; + field_0x347c = var_r29->mAttackEndFrame; + field_0x3480 = var_r29->mAfterCutMorf; + field_0x3484 = var_r29->mCutAnm.mCheckFrame; + + if (checkBoarSingleBattle()) { + setSwordAtParam(dCcG_At_Spl_UNK_0, 1, 1, 2, daAlinkHIO_cut_c0::m.mSwordLengthHorsebackFight, daAlinkHIO_cut_c0::m.mSwordRadiusHorsebackFight); + } else { + setSwordAtParam(dCcG_At_Spl_UNK_0, 1, 1, 2, daAlinkHIO_cut_c0::m.mSwordLengthHorseback, daAlinkHIO_cut_c0::m.mSwordRadiusHorseback); + } + + voiceStart(Z2SE_AL_V_ATTACK_S); + + field_0x307e = daAlinkHIO_cut_c0::m.mComboDuration; + mProcVar5.field_0x3012 = 0; + field_0x3004 = 0; + + setCutWaterDropEffect(); + onNoResetFlg1(FLG1_UNK_10000000); + return 1; } /* 800F1688-800F1894 0EBFC8 020C+00 1/0 0/0 0/0 .text procHorseCut__9daAlink_cFv */ int daAlink_c::procHorseCut() { - // NONMATCHING - return 0; + daPy_frameCtrl_c* temp_r30 = &mUpperFrameCtrl[2]; + + if (setSyncRide(1) == 0) { + return 1; + } + + setComboReserb(); + checkCutTurnCharge(); + + if (checkAnmEnd(temp_r30)) { + if (checkNoResetFlg2(FLG2_UNK_2)) { + checkCutAction(); + } else { + resetUpperAnime(UPPER_2, 4.0f); + procHorseWaitInit(); + field_0x2060->initOldFrameMorf(field_0x3480, 0, 0x23); + } + } else if (temp_r30->getFrame() > field_0x3484 && (checkNoResetFlg2(FLG2_UNK_2) || checkResetFlg0(RFLG0_UNK_40) || spActionButton())) { + if (checkResetFlg0(RFLG0_UNK_40)) { + procHorseCutChargeReadyInit(); + } else if (checkNoResetFlg2(FLG2_UNK_2)) { + checkCutAction(); + } else { + if (i_checkShieldGet()) { + setRStatus(0xB); + } else { + setRStatus(0x3E); + } + + resetUpperAnime(UPPER_2, -1.0f); + setSingleAnimeBase(ANM_HORSE_CROUCH); + procHorseWaitInit(); + } + } else { + if (temp_r30->getFrame() > field_0x3484) { + if (i_checkShieldGet()) { + setRStatus(0xB); + } else { + setRStatus(0x3E); + } + resetCombo(1); + } + + if (temp_r30->getFrame() >= field_0x3478 && temp_r30->getFrame() < field_0x347c) { + if (!checkNoResetFlg0(FLG0_UNK_40)) { + seStartSwordCut(Z2SE_AL_SWORD_SWING_S); + } + onResetFlg0(RFLG0_UNK_2); + } + } + + return 1; } /* 800F1894-800F194C 0EC1D4 00B8+00 3/3 0/0 0/0 .text procHorseCutChargeReadyInit__9daAlink_cFv */ @@ -1204,8 +2099,42 @@ int daAlink_c::procHorseCutChargeReadyInit() { /* 800F194C-800F1AAC 0EC28C 0160+00 1/0 0/0 0/0 .text procHorseCutChargeReady__9daAlink_cFv */ int daAlink_c::procHorseCutChargeReady() { - // NONMATCHING - return 0; + daPy_frameCtrl_c* temp_r30 = &mUpperFrameCtrl[2]; + + if (!setSyncRide(1)) { + return 1; + } + + setSwordChargeVoiceSe(); + BOOL var_r30 = 0; + + if (checkAnmEnd(temp_r30)) { + if (!checkWoodSwordEquip()) { + simpleAnmPlay(m_nSwordBtk); + } else { + mProcVar0.field_0x3008++; + + if (mProcVar0.field_0x3008 >= 14.0f) { + mProcVar0.field_0x3008 = 100; + } + } + + if (m_nSwordBtk->getFrame() >= 14.0f || mProcVar0.field_0x3008 >= 14.0f) { + var_r30 = 1; + } + } + + if (!swordButton()) { + if (mProcVar2.field_0x300c != 0) { + checkCutAction(); + } else if (var_r30) { + procHorseCutTurnInit(); + } else { + checkCutAction(); + } + } + + return 1; } /* 800F1AAC-800F1BA4 0EC3EC 00F8+00 3/3 0/0 0/0 .text procHorseCutTurnInit__9daAlink_cFv @@ -1229,24 +2158,106 @@ int daAlink_c::procHorseCutTurnInit() { return 1; } - /* 800F1BA4-800F1D18 0EC4E4 0174+00 1/0 0/0 0/0 .text procHorseCutTurn__9daAlink_cFv */ int daAlink_c::procHorseCutTurn() { - // NONMATCHING - return 0; + daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0]; + + if (!setSyncRide(1)) { + return 1; + } + + if (checkAnmEnd(temp_r30)) { + procHorseWaitInit(); + field_0x2060->initOldFrameMorf(4.0f, 0, 0x23); + } else { + if (temp_r30->getFrame() > daAlinkHIO_hoCutCharge_c0::m.field_0x28.mCheckFrame) { + if (orderTalk(1)) { + return 1; + } + if (checkNextActionHorse()) { + field_0x2060->initOldFrameMorf(4.0f, 0, 0x23); + return 1; + } + if (checkInputOnR()) { + procHorseWaitInit(); + field_0x2060->initOldFrameMorf(4.0f, 0, 0x23); + return 1; + } + } + + if (temp_r30->getFrame() >= daAlinkHIO_hoCutCharge_c0::m.field_0x48 && temp_r30->getFrame() < daAlinkHIO_hoCutCharge_c0::m.field_0x4C) { + if (!checkNoResetFlg0(FLG0_UNK_40)) { + seStartSwordCut(Z2SE_AL_KAITENGIRI); + } + + onResetFlg0(RFLG0_UNK_2); + cLib_chaseF(mAtCyl.GetRP(), field_0x3478, 20.0f); + } + } + + return 1; } /* 800F1D18-800F2028 0EC658 0310+00 2/2 0/0 0/0 .text * procHorseDamageInit__9daAlink_cFP12dCcD_GObjInf */ + // NONMATCHING - cLib_minMaxLimit regalloc int daAlink_c::procHorseDamageInit(dCcD_GObjInf* param_0) { - // NONMATCHING - return 0; + commonProcInit(PROC_HORSE_DAMAGE); + + if (checkHorseRide()) { + resetUnderAnime(UNDER_2, -1.0f); + } + + setSyncRide(0); + + if (checkUnderMove0BckNoArc(ANM_HORSE_STOP) || checkUnderMove0BckNoArc(ANM_HORSE_STOP_TO_STAND) || checkUnderMove0BckNoArc(ANM_HORSE_STAND) || checkUnderMove0BckNoArc(ANM_HORSE_DASH_B) || checkUnderMove0BckNoArc(ANM_HORSE_DASH_A) || checkUnderMove0BckNoArc(ANM_HORSE_DASH_START)) { + mProcVar4.field_0x3010 = 0; + mProcVar5.field_0x3012 = 0; + setUpperAnimeParam(anmIdx[4], UPPER_2, &daAlinkHIO_damHorse_c0::m.field_0x0); + } else { + cXyz* temp_r29 = getDamageVec(param_0); + + f32 temp_f31 = cM_ssin(shape_angle.y); + f32 temp_f1 = cM_scos(shape_angle.y); + cXyz spC((temp_r29->z * -temp_f31) + (temp_r29->x * temp_f1), temp_r29->y, (temp_r29->z * temp_f1) + (temp_r29->x * temp_f31)); + + mProcVar4.field_0x3010 = cLib_minMaxLimit(cM_atan2s(spC.z, spC.y), -daAlinkHIO_damHorse_c0::m.field_0x28, daAlinkHIO_damHorse_c0::m.field_0x28); + mProcVar5.field_0x3012 = cLib_minMaxLimit(cM_atan2s(spC.x, -JMAFastSqrt((spC.y * spC.y) + (spC.z * spC.z))), -daAlinkHIO_damHorse_c0::m.field_0x2A, daAlinkHIO_damHorse_c0::m.field_0x2A); + + int direction = getDirectionFromAngle(cM_atan2s(-spC.x, -spC.z)); + setUpperAnimeParam(anmIdx[direction], UPPER_2, &daAlinkHIO_damHorse_c0::m.field_0x14); + } + + setFacePriBck(0xEA); + setFacePriTexture((daAlink_c::daAlink_FTANM) 0x27); + voiceStart(Z2SE_AL_V_DAMAGE_S); + seStartOnlyReverb(Z2SE_AL_DAMAGE_NORMAL); + + daPy_frameCtrl_c* temp_r28 = &mUpperFrameCtrl[2]; + field_0x347c = M_PI / (temp_r28->getEnd() - temp_r28->getStart()); + setHorseZeldaDamage(); + onNoResetFlg1(FLG1_UNK_10000000); + return 1; } /* 800F2028-800F2150 0EC968 0128+00 1/0 0/0 0/0 .text procHorseDamage__9daAlink_cFv */ int daAlink_c::procHorseDamage() { - // NONMATCHING - return 0; + if (!setSyncRide(0)) { + return 1; + } + + daPy_frameCtrl_c* temp_r30 = &mUpperFrameCtrl[2]; + f32 temp_f1 = cM_fsin(field_0x347c * (temp_r30->getFrame() - temp_r30->getStart())); + + mBodyAngle.x = mProcVar4.field_0x3010 * temp_f1; + mBodyAngle.z = -mProcVar5.field_0x3012 * temp_f1; + mBodyAngle.y = 0; + + if (checkAnmEnd(temp_r30)) { + resetUpperAnime(UPPER_2, 4.0f); + procHorseWaitInit(); + } + return 1; } /* 800F2150-800F21B4 0ECA90 0064+00 1/1 0/0 0/0 .text procHorseBowSubjectInit__9daAlink_cFv */ @@ -1527,8 +2538,39 @@ int daAlink_c::procHorseHookshotMove() { /* 800F2934-800F2AD8 0ED274 01A4+00 1/1 0/0 0/0 .text procHorseBottleDrinkInit__9daAlink_cFUs */ int daAlink_c::procHorseBottleDrinkInit(u16 param_0) { - // NONMATCHING - return 0; + if (!dComIfGp_event_compulsory(this, NULL, 0xFFFF)) { + return 0; + } + + mDemo.setSpecialDemoType(); + commonProcInit(PROC_HORSE_BOTTLE_DRINK); + + if (checkHorseUnderItemAnime()) { + resetUnderAnime(UNDER_2, -1.0f); + } + + setSyncRidePos(); + setBaseRideAnime(); + + if (checkHorseRide()) { + daHorse_c* temp_r3 = dComIfGp_getHorseActor(); + temp_r3->changeOriginalDemo(); + temp_r3->changeDemoMode(0xE, 0); + } else { + mRideAcKeep.getActor()->speedF = 0.0f; + } + + setUpperAnimeParam(getMainBckData(ANM_BOTTLE_DRINK_START)->m_upperID, UPPER_2, &daAlinkHIO_bottle_c0::m.mStartDrinkAnm); + setFacePriAnime(ANM_BOTTLE_DRINK_START); + + keepItemData(); + setBottleModel(param_0); + dComIfGp_setPlayerStatus1(0, 0x2000); + + field_0x319c = 1; + dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", 1, &field_0x319c, 0); + mProcVar2.field_0x300c = 0; + return 1; } /* 800F2AD8-800F2B4C 0ED418 0074+00 1/0 0/0 0/0 .text procHorseBottleDrink__9daAlink_cFv @@ -1550,14 +2592,57 @@ int daAlink_c::procHorseBottleDrink() { /* 800F2B4C-800F2C78 0ED48C 012C+00 1/1 0/0 0/0 .text procHorseKandelaarPourInit__9daAlink_cFv */ int daAlink_c::procHorseKandelaarPourInit() { - // NONMATCHING - return 0; + if (!dComIfGp_event_compulsory(this, NULL, 0xFBFF)) { + return 0; + } + + mDemo.setSpecialDemoType(); + commonProcInit(PROC_HORSE_KANDELAAR_POUR); + + if (checkHorseUnderItemAnime()) { + resetUnderAnime(UNDER_2, -1.0f); + } + + setSyncRidePos(); + setBaseRideAnime(); + + field_0x3478 = mRideAcKeep.getActor()->speedF; + + if (checkHorseRide()) { + daHorse_c* temp_r3 = dComIfGp_getHorseActor(); + temp_r3->changeOriginalDemo(); + temp_r3->changeDemoMode(1, 0); + } else { + mRideAcKeep.getActor()->speedF = 0.0f; + } + + setUpperAnimeParam(getMainBckData(ANM_OIL_BOTTLE_POUR_START)->m_upperID, UPPER_2, &daAlinkHIO_kandelaar_c0::m.mBeginUnkAnm); + commonKandelaarPourInit(); + return 1; } /* 800F2C78-800F2D84 0ED5B8 010C+00 1/0 0/0 0/0 .text procHorseKandelaarPour__9daAlink_cFv */ int daAlink_c::procHorseKandelaarPour() { - // NONMATCHING - return 0; + if (!setSyncRidePos()) { + mRideAcKeep.getActor()->speedF = field_0x3478; + + if (checkHorseRide() && dComIfGp_getHorseActor() != NULL) { + dComIfGp_getHorseActor()->cancelOriginalDemo(); + } + + resetUpperAnime(UPPER_2, 3.0f); + resetOilBottleModel(); + resetSpecialEvent(); + return 1; + } + + setBaseRideAnime(); + + if (commonKandelaarPour(1) && checkHorseRide()) { + mRideAcKeep.getActor()->speedF = field_0x3478; + dComIfGp_getHorseActor()->cancelOriginalDemo(); + } + return 1; } /* 800F2D84-800F2DE4 0ED6C4 0060+00 2/2 0/0 0/0 .text procHorseComebackInit__9daAlink_cFv @@ -1616,24 +2701,176 @@ int daAlink_c::procHorseRunInit() { return 1; } - /* 800F2F98-800F3430 0ED8D8 0498+00 1/0 0/0 0/0 .text procHorseRun__9daAlink_cFv */ int daAlink_c::procHorseRun() { - // NONMATCHING - return 0; + daHorse_c* temp_r29 = dComIfGp_getHorseActor(); + if (!setSyncHorsePos()) { + mDoAud_changeSubBgmStatus(1); + return 1; + } + + if (field_0x32cc != 0) { + onSceneChangeArea(17, 0xFF, NULL); + return 1; + } + + if (temp_r29->speedF > 0.0f) { + if (mProcVar3.field_0x300e != 0) { + mProcVar3.field_0x300e--; + } + + if (temp_r29->checkRodeoLeft()) { + if (mProcVar3.field_0x300e != 0) { + mProcVar5.field_0x3012 -= 150; + } else { + mProcVar5.field_0x3012 -= 600; + } + + if (mProcVar2.field_0x300c == 0) { + set3DStatus(0x7A, 4); + } + } else { + if (mProcVar3.field_0x300e != 0) { + mProcVar5.field_0x3012 += 150; + } else { + mProcVar5.field_0x3012 += 600; + } + + if (mProcVar2.field_0x300c == 0) { + set3DStatus(0x7A, 1); + } + } + + if (checkInputOnR()) { + int temp_r3 = getDirectionFromAngle(mStickAngle); + s16 temp_r26 = mProcVar5.field_0x3012; + + if (temp_r3 == DIR_LEFT && !temp_r29->checkRodeoLeft()) { + mProcVar5.field_0x3012 -= (600.0f + (256.0f * field_0x33a8)); + } else if (temp_r3 == DIR_RIGHT && temp_r29->checkRodeoLeft()) { + mProcVar5.field_0x3012 += (600.0f + (256.0f * field_0x33a8)); + } + + if (temp_r26 * mProcVar5.field_0x3012 <= 0) { + mProcVar5.field_0x3012 = 0; + } + } + + daPy_frameCtrl_c* temp_r28 = &mUnderFrameCtrl[0]; + f32 temp_f31 = temp_r28->getFrame() / temp_r28->getEnd(); + + mProcVar4.field_0x3010 = (field_0x3478 * (1.0f + cM_fsin((M_PI*2) * (temp_f31 - 0.69999999f)))) + (4000.0f * (1.0f - fabsf(0.000099999997f * mProcVar5.field_0x3012))); + field_0x3088 = field_0x3478 * (1.0f + cM_fsin((M_PI*2) * (temp_f31 - 1.0f))); + + if (temp_r28->checkPass(0.0f)) { + field_0x3478 = 1000.0f - cM_rndF(500.0f); + } + + if (abs(mProcVar5.field_0x3012) >= 10000 || mProcVar2.field_0x300c != 0) { + if (mProcVar3.field_0x300e != 0) { + if (mProcVar5.field_0x3012 >= 10000) { + mProcVar5.field_0x3012 = 10000; + } else if (mProcVar5.field_0x3012 <= -10000) { + mProcVar5.field_0x3012 = -10000; + } + } else { + shape_angle.y += mProcVar5.field_0x3012; + boarForceGetOff(); + mDoAud_changeSubBgmStatus(1); + } + } + } else if (temp_r29->getRodeoPointCnt() && temp_r29->checkTurnStand()) { + setDoStatus(0x6F); + + if (doTrigger()) { + field_0x32cc = 1; + onSceneChangeArea(17, 0xFF, 0); + temp_r29->offRodeoMode(); + } else { + mProcVar2.field_0x300c = 1; + } + } + + return 1; } /* 800F3430-800F3580 0EDD70 0150+00 1/1 0/0 0/0 .text * procHorseHangInit__9daAlink_cFP12dCcD_GObjInfi */ int daAlink_c::procHorseHangInit(dCcD_GObjInf* param_0, int param_1) { - // NONMATCHING - return 0; + if (checkBoarRide()) { + return procHorseDamageInit(param_0); + } + + commonProcInit(PROC_HORSE_HANG); + + daAlink_ANM var_r30; + if ((s16)(getDamageVec(param_0)->atan2sX_Z() - shape_angle.y) > 0) { + var_r30 = ANM_HORSE_DMG_LEFT; + field_0x32cc = 0x58; + mProcVar4.field_0x3010 = 1; + mProcVar5.field_0x3012 = 2; + } else { + var_r30 = ANM_HORSE_DMG_RIGHT; + field_0x32cc = 0x59; + mProcVar4.field_0x3010 = 2; + mProcVar5.field_0x3012 = 1; + } + + field_0x2fab &= ~mProcVar5.field_0x3012; + setSingleAnimeBase(var_r30); + mProcVar3.field_0x300e = 0; + field_0x3004 = 0; + field_0x3002 = 0; + resetUnderAnime(UNDER_2, -1.0f); + + setSyncHorsePos(); + setHorseZeldaDamage(); + + if (param_1) { + voiceStart(Z2SE_AL_V_DAMAGE_ON_HORSE); + seStartOnlyReverb(Z2SE_AL_DAMAGE_NORMAL); + } + + return 1; } /* 800F3580-800F36E4 0EDEC0 0164+00 1/0 0/0 0/0 .text procHorseHang__9daAlink_cFv */ int daAlink_c::procHorseHang() { - // NONMATCHING - return 0; + if (!setSyncHorsePos()) { + return 1; + } + + if (checkHorseSpecialProc()) { + if (checkSpecialHorseRide()) { + field_0x2fab |= 3; + } else { + boarForceGetOff(); + } + + return 1; + } + + daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0]; + + if (checkAnmEnd(temp_r30)) { + if (mProcVar3.field_0x300e == 0) { + mProcVar3.field_0x300e = 1; + voiceStart(Z2SE_AL_V_CLING_HORSE); + setSingleAnimeBase((daAlink_c::daAlink_ANM)field_0x32cc); + } else { + checkNextActionHorse(); + } + } else if (mProcVar3.field_0x300e == 0) { + if (temp_r30->checkPass(7.0f)) { + field_0x2fab &= ~mProcVar4.field_0x3010; + } else if (temp_r30->checkPass(36.0f)) { + field_0x2fab |= mProcVar4.field_0x3010; + } + } else if (temp_r30->checkPass(7.0f)) { + field_0x2fab |= mProcVar5.field_0x3012; + } + + return 1; } /* 800F36E4-800F3754 0EE024 0070+00 1/0 0/0 0/0 .text procHorseGetKeyInit__9daAlink_cFv @@ -1715,9 +2952,34 @@ int daAlink_c::procBoarRunInit() { return 1; } - /* 800F3998-800F3BB0 0EE2D8 0218+00 1/0 0/0 0/0 .text procBoarRun__9daAlink_cFv */ int daAlink_c::procBoarRun() { - // NONMATCHING - return 0; + e_wb_class* temp_r30 = (e_wb_class*)mRideAcKeep.getActor(); + fopAc_ac_c* temp_r29 = (fopAc_ac_c*)temp_r30; + + if (mProcVar3.field_0x300e == 0 && checkAnmEnd(&mUnderFrameCtrl[0])) { + setSingleAnimeBaseSpeed(ANM_HORSE_TAME_WAIT_B, 0.0f, -1.0f); + mProcVar3.field_0x300e = 1; + } + + if ((mProcVar3.field_0x300e != 0 && !setSyncBoarRunPos()) || (mProcVar3.field_0x300e == 0 && !setSyncBoarPos())) { + return 1; + } + + if (temp_r29->speedF > 0.0f && mProcVar3.field_0x300e != 0) { + mProcVar4.field_0x3010 = (field_0x3478 * (1.0f + cM_fsin((M_PI*2) * (temp_r30->getAnimeFrameRate() - 0.2f)))) - 2000.0f; + field_0x3088 = field_0x3478 * (1.0f + cM_fsin((M_PI*2) * (temp_r30->getAnimeFrameRate() - 0.4f))); + + if (temp_r30->checkAnmLoopFrame()) { + field_0x3478 = 3000.0f - cM_rndF(1500.0f); + } + } else if (mProcVar2.field_0x300c == 0) { + if (mUnderFrameCtrl[0].getFrame() >= 14.0f) { + field_0x2f92 = 0xFE; + field_0x2f93 = 0xFE; + mProcVar2.field_0x300c = 1; + } + } + + return 1; } diff --git a/src/d/actor/d_a_alink_link.inc b/src/d/actor/d_a_alink_link.inc index 09ae9d599de..8a5fee78923 100644 --- a/src/d/actor/d_a_alink_link.inc +++ b/src/d/actor/d_a_alink_link.inc @@ -6,6 +6,8 @@ #include "JSystem/J3DGraphBase/J3DDrawBuffer.h" #include "d/actor/d_a_alink.h" #include "d/actor/d_a_canoe.h" +#include "d/actor/d_a_tag_mstop.h" +#include "d/actor/d_a_tag_mhint.h" /* 800C2DDC-800C2EAC 0BD71C 00D0+00 17/17 0/0 0/0 .text * procPreActionUnequipInit__9daAlink_cFiP10fopAc_ac_c */ @@ -247,7 +249,6 @@ int daAlink_c::procWait() { return 1; } - /* 800C36CC-800C3730 0BE00C 0064+00 3/3 0/0 0/0 .text procMoveInit__9daAlink_cFv */ int daAlink_c::procMoveInit() { if (!commonProcInitNotSameProc(PROC_MOVE)) { @@ -706,7 +707,6 @@ int daAlink_c::procSlide() { return 1; } - /* 800C47AC-800C4894 0BF0EC 00E8+00 1/1 0/0 0/0 .text procSlideLandInit__9daAlink_cFi */ int daAlink_c::procSlideLandInit(int param_0) { commonProcInit(PROC_SLIDE_LAND); @@ -906,7 +906,6 @@ int daAlink_c::procFrontRoll() { return 1; } - /* 800C4F14-800C4FFC 0BF854 00E8+00 1/1 0/0 0/0 .text procFrontRollCrashInit__9daAlink_cFv */ int daAlink_c::procFrontRollCrashInit() { commonProcInit(PROC_FRONT_ROLL_CRASH); @@ -1116,7 +1115,6 @@ int daAlink_c::procSideRoll() { return 1; } - /* 800C5700-800C57A4 0C0040 00A4+00 2/2 0/0 0/0 .text backJumpSpeedDec__9daAlink_cFv */ void daAlink_c::backJumpSpeedDec() { if (mLinkAcch.ChkGroundHit()) { @@ -1316,7 +1314,6 @@ int daAlink_c::procSlip() { return 1; } - // TODO: Move / setup later class ni_class : public fopAc_ac_c { public: @@ -1431,8 +1428,6 @@ int daAlink_c::procAutoJumpInit(int param_0) { return 1; } - -/* ############################################################################################## */ /* 800C61EC-800C66DC 0C0B2C 04F0+00 1/0 0/0 0/0 .text procAutoJump__9daAlink_cFv */ int daAlink_c::procAutoJump() { int direction = getDirectionFromCurrentAngle(); @@ -1562,7 +1557,6 @@ int daAlink_c::procAutoJump() { return 1; } - /* 800C66DC-800C6798 0C101C 00BC+00 1/1 0/0 0/0 .text procDiveJumpInit__9daAlink_cFv */ int daAlink_c::procDiveJumpInit() { commonProcInit(PROC_DIVE_JUMP); @@ -1743,7 +1737,6 @@ int daAlink_c::procFallInit(int param_0, f32 param_1) { return 1; } - /* 800C6D20-800C6F18 0C1660 01F8+00 1/0 0/0 0/0 .text procFall__9daAlink_cFv */ int daAlink_c::procFall() { if (mProcVar5.field_0x3012 == 0) { @@ -1897,7 +1890,6 @@ int daAlink_c::procSmallJumpInit(int param_0) { return 1; } - /* 800C72D4-800C74D4 0C1C14 0200+00 1/0 0/0 0/0 .text procSmallJump__9daAlink_cFv */ // NONMATCHING - one out of order block with sqrt int daAlink_c::procSmallJump() { @@ -2139,7 +2131,6 @@ int daAlink_c::procCoMetamorphoseInit() { return 1; } - /* 800C7C64-800C82E8 0C25A4 0684+00 1/0 0/0 0/0 .text procCoMetamorphose__9daAlink_cFv */ int daAlink_c::procCoMetamorphose() { if (mProcVar1.field_0x300a != 0) { @@ -2389,8 +2380,35 @@ int daAlink_c::procGoronRideWaitInit(fopAc_ac_c* param_0) { /* 800C85D8-800C8700 0C2F18 0128+00 1/0 0/0 0/0 .text procGoronRideWait__9daAlink_cFv */ int daAlink_c::procGoronRideWait() { - // NONMATCHING - return 0; + if (!checkGoronRide()) { + checkNextAction(0); + } else { + if (checkInputOnR()) { + cLib_addCalcAngleS(&shape_angle.y, field_0x2fe2, 2, 500, 100); + } + + s16 temp_r0 = shape_angle.y - current.angle.y; + daAlink_ANM var_r28; + if (temp_r0 > 0) { + var_r28 = ANM_STEP_TURN; + } else if (temp_r0 < 0) { + var_r28 = ANM_SMALL_GUARD; + } else { + var_r28 = ANM_WAIT; + } + + f32 var_f31 = 0.8f + (0.002f * abs(temp_r0)); + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + + var_f31 = 1.0f - var_f31; + + setDoubleAnime(var_f31, daAlinkHIO_basic_c0::m.mWaitTurnSpeed, daAlinkHIO_move_c0::m.mWaitAnmSpeed, var_r28, ANM_WAIT, 2, -1.0f); + current.angle.y = shape_angle.y; + } + + return 1; } /* 800C8700-800CAFA8 0C3040 28A8+00 1/1 0/0 0/0 .text execute__9daAlink_cFv */ @@ -3391,7 +3409,124 @@ static int daAlink_Execute(daAlink_c* i_this) { /* 800CAFC8-800CB480 0C5908 04B8+00 2/2 0/0 0/0 .text setDrawHand__9daAlink_cFv */ void daAlink_c::setDrawHand() { - // NONMATCHING + field_0x06d0->hide(); + field_0x06d4->hide(); + + u8 var_r30; + u8 var_r29; + if (checkNoResetFlg2(FLG2_STATUS_WINDOW_DRAW)) { + if (i_checkSwordGet()) { + var_r30 = 0; + } else { + var_r30 = 0xFE; + } + + if (i_checkShieldGet()) { + var_r29 = 6; + } else { + var_r29 = 0xFE; + } + } else if (mProcID == PROC_TOOL_DEMO) { + var_r30 = field_0x2f92; + var_r29 = field_0x2f93; + } else { + if (field_0x2f92 == 0x64) { + if (mProcID == PROC_BOSS_BODY_HANG || mProcID == PROC_MASTER_SWORD_PULL || (mProcID == PROC_CUT_DOWN_LAND && mProcVar2.field_0x300c != 0)) { + var_r30 = mProcVar4.field_0x3010; + } else if (checkUnderMove0BckNoArc(ANM_RIDE_CUT_TURN_CHARGE) && mUnderFrameCtrl[0].getFrame() < 6.0f) { + var_r30 = 0; + } else { + var_r30 = 2; + } + } else if (field_0x2f96 != 0xFF && (!checkNoResetFlg1(FLG1_UNK_100000) || field_0x2f94 == 0xFF)) { + var_r30 = field_0x2f96; + } else if (field_0x2f94 != 0xFF) { + if (field_0x2f94 == 0x67) { + if (checkBowGrabLeftHand()) { + var_r30 = 0; + } else { + var_r30 = field_0x2f92; + } + } else if (field_0x2f94 == 0x65) { + if (mUpperAnmHeap[0].getIdx() == 0xC7) { + var_r30 = 0; + } else if (mItemVar0.field_0x3018 == 1) { + var_r30 = 4; + } else { + var_r30 = 2; + } + } else if (field_0x2f94 == 0 && mProcID == PROC_SWORD_UNEQUIP_SP) { + var_r30 = field_0x2f92; + } else if (field_0x2f94 == 0 && mEquipItem == 0x103 && (checkHorseRide() || checkUnderMove0BckNoArc(ANM_SWIM_DIE))) { + var_r30 = 2; + } else { + var_r30 = field_0x2f94; + } + } else { + var_r30 = field_0x2f92; + } + + if ((mCutType == CUT_TYPE_FINISH_STAB || mCutType == CUT_TYPE_DOWN) && mProcID != PROC_BOSS_BODY_HANG) { + var_r29 = 5; + } else if (field_0x2f97 != 0xFF && (!checkNoResetFlg1(FLG1_UNK_100000) || (field_0x2f95 == 0xFF && field_0x2e44.checkPassNum(0xF)))) { + var_r29 = field_0x2f97; + } else if (field_0x2f95 != 0xFF) { + if (field_0x2f95 == 0x65) { + if (mItemVar0.field_0x3018 == 1) { + var_r29 = 5; + } else { + var_r29 = field_0x2f93; + } + } else { + var_r29 = field_0x2f95; + } + } else if (!field_0x2e44.checkPassNum(0xF)) { + var_r29 = 6; + } else { + var_r29 = field_0x2f93; + } + } + + mpLinkHandModel->setBaseTRMtx(mpLinkModel->getBaseTRMtx()); + mpLinkHandModel->calc(); + + if (var_r30 == 0xFE || var_r30 == 0xFB) { + field_0x06d0 = field_0x06d8; + } else { + field_0x06d0 = mpLinkHandModel->getModelData()->getMaterialNodePointer(var_r30)->getShape(); + mpLinkHandModel->setAnmMtx(1, mpLinkModel->getAnmMtx(9)); + } + + if (var_r30 == 0xFB) { + mpDemoHLTmpModel->setBaseTRMtx(mpLinkModel->getAnmMtx(9)); + if (mpDemoHLTmpBck != NULL) { + mpDemoHLTmpBck->entry(mpDemoHLTmpModel->getModelData()); + } + + mpDemoHLTmpModel->calc(); + field_0x06d0->hide(); + } else { + field_0x06d0->show(); + } + + if (var_r29 == 0xFE || var_r29 == 0xFB) { + field_0x06d4 = field_0x06dc; + } else { + field_0x06d4 = mpLinkHandModel->getModelData()->getMaterialNodePointer(var_r29)->getShape(); + mpLinkHandModel->setAnmMtx(2, mpLinkModel->getAnmMtx(0xE)); + } + + if (var_r29 == 0xFB) { + mpDemoHRTmpModel->setBaseTRMtx(mpLinkModel->getAnmMtx(0xE)); + if (mpDemoHRTmpBck != NULL) { + mpDemoHRTmpBck->entry(mpDemoHRTmpModel->getModelData()); + } + + mpDemoHRTmpModel->calc(); + field_0x06d4->hide(); + } else { + field_0x06d4->show(); + } } /* 800CB480-800CB53C 0C5DC0 00BC+00 3/3 0/0 0/0 .text checkSwordDraw__9daAlink_cFv */ @@ -3422,15 +3557,122 @@ bool daAlink_c::checkItemDraw() { /* 800CB694-800CBA38 0C5FD4 03A4+00 0/0 0/0 1/1 .text initShadowScaleLight__9daAlink_cFv */ -void daAlink_c::initShadowScaleLight() { - // NONMATCHING +// NONMATCHING - float stuff +int daAlink_c::initShadowScaleLight() { + dKy_shadow_mode_set(4); + + if (checkWolf()) { + f32 temp_f26 = 0.5f * field_0x850[0].GetH(); + field_0x850[0].GetC(); + } + + cXyz sp20(tevStr.mLightPosWorld.x - field_0x3834.x, tevStr.mLightPosWorld.y - field_0x3454, tevStr.mLightPosWorld.z - field_0x3834.z); + field_0x2ff6 = sp20.atan2sX_Z(); + + fopAc_ac_c* temp_r29 = fopAcM_getTalkEventPartner(this); + + f32 var_f30; + if (dComIfGp_checkPlayerStatus0(0, 0x100000)) { + var_f30 = 0.0f; + } else { + var_f30 = 150.0f; + } + + BOOL var_r28; + f32 var_f31; + if (temp_r29 != NULL && ((fopAcM_GetName(temp_r29) == PROC_Tag_Mhint && !((daTagMhint_c*)temp_r29)->checkNoAttention()) || (fopAcM_GetName(temp_r29) == PROC_Tag_Mstop && !((daTagMstop_c*)temp_r29)->checkNoAttention()))) { + field_0x2ff8 = cLib_targetAngleY(&temp_r29->eyePos, ¤t.pos); + var_r28 = 1; + } else { + field_0x2ff8 = shape_angle.y + 0x8000; + + if (checkWolf()) { + var_f31 = 200.0f; + } else { + var_f31 = 120.0f; + } + + cXyz sp14(current.pos.x, current.pos.y + var_f30, current.pos.z); + cXyz sp8(sp14.x + ((30.0f + var_f31) * cM_ssin(shape_angle.y)), sp14.y, sp14.z + ((30.0f + var_f31) * cM_scos(shape_angle.y))); + + if (fopAcM_lc_c::lineCheck(&sp14, &sp8, this)) { + var_r28 = 1; + } else { + var_r28 = 0; + } + } + + field_0x2ffa = field_0x2ff8 + 0x8000; + field_0x2ff4 = cM_atan2s(sp20.y, sp20.absXZ()); + offNoResetFlg2(FLG2_UNK_800); + field_0x2ffc = 0; + field_0x375c.y = current.pos.y + var_f30; + + f32 temp_f29 = cM_ssin(field_0x2ff8); + f32 temp_f28 = cM_scos(field_0x2ff8); + + if (var_r28 == 0) { + field_0x375c.x = current.pos.x - (var_f31 * temp_f29); + field_0x375c.z = current.pos.z - (var_f31 * temp_f28); + } else { + field_0x375c.x = (current.pos.x - (temp_f29 * -30.0f)) - (temp_f28 * 65.0f); + field_0x375c.z = (current.pos.z - (temp_f28 * -30.0f)) + (temp_f29 * 65.0f); + } + + if (checkReinRide()) { + var_r28 = 1; + } + + return var_r28; } -/* ############################################################################################## */ /* 800CBA38-800CBC18 0C6378 01E0+00 0/0 0/0 1/1 .text moveShadowScaleLight__9daAlink_cFv */ -void daAlink_c::moveShadowScaleLight() { - // NONMATCHING +int daAlink_c::moveShadowScaleLight() { + int var_r29 = 0; + + if (field_0x2ff8 != field_0x2ffa) { + s16 temp_r0 = field_0x2ff6 - field_0x2ff8; + if (abs(temp_r0) < 0x4000) { + if (temp_r0 >= 0) { + field_0x2ff8 -= 0x4000; + } else { + field_0x2ff8 += 0x4000; + } + + if (cLib_distanceAngleS(field_0x2ff8, field_0x2ffa) < 0x100) { + field_0x2ff8 = field_0x2ffa; + } + } + } else if (cLib_distanceAngleS(field_0x2ff8, field_0x2ff6) < 0x1600) { + onNoResetFlg2(FLG2_UNK_800); + } + + if (cLib_addCalcAngleS(&field_0x2ff6, field_0x2ff8, 4, 0x1800, 0x200) == 0) { + if (cLib_chaseS(&field_0x2ff4, 0x4000, 0x650)) { + dKy_shadow_mode_reset(4); + tevStr.field_0x344 = 1.0f; + } else { + tevStr.field_0x344 = 2.0f; + } + + if (field_0x2ff4 > 0x3000) { + var_r29 = 1; + } + } else { + if (!checkNoResetFlg2(FLG2_UNK_800)) { + cLib_chaseS(&field_0x2ff4, 0x2600, 0x800); + } else { + cLib_chaseS(&field_0x2ffc, 0x800, 0x100); + cLib_chaseS(&field_0x2ff4, 0, field_0x2ffc); + } + + cLib_chaseF(&tevStr.field_0x344, 2.0f, 0.1f); + } + + f32 temp_f31 = 50000.0f * cM_scos(field_0x2ff4); + tevStr.mLightPosWorld.set(field_0x3834.x + (temp_f31 * cM_ssin(field_0x2ff6)), field_0x3454 + (50000.0f * cM_ssin(field_0x2ff4)), field_0x3834.z + (temp_f31 * cM_scos(field_0x2ff6))); + return var_r29; } /* 800CBC18-800CC25C 0C6558 0644+00 1/1 0/0 0/0 .text shadowDraw__9daAlink_cFv */ @@ -3869,7 +4111,6 @@ int daAlink_c::draw() { return 1; } - /* 800CD78C-800CD7AC 0C80CC 0020+00 1/0 0/0 0/0 .text daAlink_Draw__FP9daAlink_c */ static int daAlink_Draw(daAlink_c* i_this) { return i_this->draw(); @@ -3912,7 +4153,6 @@ daAlink_c::~daAlink_c() { dComIfGp_setLinkPlayer(NULL); } - /* 800CE208-800CE294 0C8B48 008C+00 1/0 0/0 0/0 .text daAlink_Delete__FP9daAlink_c */ static int daAlink_Delete(daAlink_c* i_this) { if (i_this->getClothesChangeWaitTimer() != 0) { @@ -4243,7 +4483,6 @@ daAlink_c::daAlink_c() : mAnmHeap3(0), mAnmHeap4(0), mFaceBtpHeap(0x800), mFaceBtkHeap(0x400), mFaceBckHeap(0xC00), mAnmHeap9(0x800) {} - /* 800CFC3C-800CFC78 0CA57C 003C+00 2/2 0/0 0/0 .text __dt__Q29daAlink_c14firePointEff_cFv */ daAlink_c::firePointEff_c::~firePointEff_c() {}