From ae77e60de80f778bab53350697f64c8a2bf80dec Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Tue, 15 Oct 2024 14:03:04 -0700 Subject: [PATCH] d_a_alink canoe almost done (#2210) * d_a_alink canoe almost done * ironball mostly done * alink_iceleaf done --- include/SSystem/SComponent/c_cc_d.h | 1 + include/d/actor/d_a_alink.h | 47 +- include/d/actor/d_a_canoe.h | 21 +- include/d/actor/d_a_mg_rod.h | 5 +- include/d/actor/d_a_obj_iceleaf.h | 2 + include/d/actor/d_a_player.h | 8 + include/d/d_com_inf_game.h | 4 + src/d/actor/d_a_alink.cpp | 28 +- src/d/actor/d_a_alink_canoe.inc | 1418 +++++++++++++++++++++++++-- src/d/actor/d_a_alink_crawl.inc | 7 + src/d/actor/d_a_alink_cut.inc | 3 + src/d/actor/d_a_alink_damage.inc | 10 + src/d/actor/d_a_alink_demo.inc | 3 + src/d/actor/d_a_alink_grab.inc | 46 +- src/d/actor/d_a_alink_guard.inc | 9 + src/d/actor/d_a_alink_hang.inc | 1 + src/d/actor/d_a_alink_hook.inc | 1 + src/d/actor/d_a_alink_horse.inc | 24 + src/d/actor/d_a_alink_iceleaf.inc | 497 +++++++++- src/d/actor/d_a_alink_ironball.inc | 740 +++++++++++++- src/d/actor/d_a_alink_link.inc | 310 ++++-- src/d/actor/d_a_alink_swim.inc | 3 + src/d/actor/d_a_alink_whistle.inc | 3 + src/d/actor/d_a_alink_wolf.inc | 22 + 24 files changed, 2984 insertions(+), 229 deletions(-) diff --git a/include/SSystem/SComponent/c_cc_d.h b/include/SSystem/SComponent/c_cc_d.h index eb5b37dfd8e..ab63e9d724b 100644 --- a/include/SSystem/SComponent/c_cc_d.h +++ b/include/SSystem/SComponent/c_cc_d.h @@ -507,6 +507,7 @@ public: void OnAtVsPlayerBit() { mObjAt.OnSPrmBit(0xC); } void OnCoSPrmBit(u32 flag) { mObjCo.OnSPrmBit(flag); } void SetCoVsGrp(u32 grp) { mObjCo.SetVsGrp(grp); } + void SetCoIGrp(u32 grp) { mObjCo.SetIGrp(grp); } void SetAtSPrm(u32 prm) { mObjAt.SetSPrm(prm); } void SetTgSPrm(u32 prm) { mObjTg.SetSPrm(prm); } void SetCoSPrm(u32 prm) { mObjCo.SetSPrm(prm); } diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h index f8c00df8efd..1d79ca62e8a 100644 --- a/include/d/actor/d_a_alink.h +++ b/include/d/actor/d_a_alink.h @@ -2171,7 +2171,7 @@ public: /* 800F4490 */ void setFishGetFace(); /* 800F4564 */ void setRideCanoeBasePos(fopAc_ac_c*); /* 800F459C */ void setSyncCanoePos(); - /* 800F47D8 */ void canoeCommon(); + /* 800F47D8 */ int canoeCommon(); /* 800F4924 */ int checkNextActionCanoe(); /* 800F4A50 */ int procCanoeRideInit(); /* 800F4B90 */ int procCanoeRide(); @@ -2523,7 +2523,7 @@ public: /* 801126F8 */ void setIronBallReturn(int); /* 80112768 */ void setIronBallBgCheckPos(); /* 801127F0 */ void setIronBallModel(); - /* 80112C84 */ void setIronBallGroundVec(cXyz const*, cXyz*); + /* 80112C84 */ int setIronBallGroundVec(cXyz const*, cXyz*); /* 80112E7C */ void setIronBallChainPos(); /* 80113CA0 */ BOOL checkIronBallReturnChange(); /* 80113D58 */ void setIronBallPos(); @@ -3201,6 +3201,7 @@ public: BOOL checkCanoeFishingWaitAnime() const { return checkUpperAnime(0x5D) || checkUpperAnime(0x260); } BOOL checkCopyRodControllAnime() const { return checkUpperAnime(0x202); } BOOL checkWolfHeadDamageAnime() const { return checkUpperAnime(0x2A7); } + BOOL checkExchangeRodAnime() const { return checkUpperAnime(0x68); } int checkWolfEyeUp() const { return mWolfEyeUp; } void onModeFlg(u32 flag) { mModeFlg |= flag; } @@ -3288,6 +3289,10 @@ public: return var_r4; } + bool checkFisingRodJewl() const { + return (mEquipItem == 0x5C || mEquipItem == 0x5F) || mEquipItem == 0x5E; + } + MtxP getCopyRodMtx() { if (mHeldItemModel != NULL) { return mHeldItemModel->getAnmMtx(0); @@ -3492,10 +3497,10 @@ public: /* 0x00768 */ J3DModelData* mpHookKusariModelData; /* 0x0076C */ Z2SoundObjSimple* mpHookSound; /* 0x00770 */ hsChainShape_c* mpHookChain; - /* 0x00774 */ void* field_0x0774; - /* 0x00778 */ void* field_0x0778; + /* 0x00774 */ dBgS_AcchCir* field_0x0774; + /* 0x00778 */ dBgS_ObjAcch* field_0x0778; /* 0x0077C */ dBgS_ObjLinChk* mpHookshotLinChk; - /* 0x00780 */ void* field_0x780; + /* 0x00780 */ dBgS_ObjLinChk* field_0x780; /* 0x00784 */ J3DModel* mpLinkBootModels[2]; /* 0x0078C */ J3DModel* mpWlChainModels[4]; /* 0x0079C */ J3DModel* mpWlMidnaModel; @@ -3734,7 +3739,7 @@ public: s16 mPuzzleAimAngle; } /* 0x0300C */ mProcVar2; union { - csXyz field_0x300e; + SVec field_0x300e; } /* 0x0300E */ mProcVar3; /* 0x03014 */ s16 mFallVoiceInit; /* 0x03016 */ u8 field_0x3016[2]; @@ -4035,7 +4040,7 @@ public: /* 0x03834 */ cXyz field_0x3834; /* 0x03840 */ cXyz* mIronBallChainPos; /* 0x03844 */ csXyz* mIronBallChainAngle; - /* 0x03848 */ void* field_0x3848; + /* 0x03848 */ cXyz* field_0x3848; /* 0x0384C */ cXyz* field_0x384c; /* 0x03850 */ daAlink_procFunc mpProcFunc; }; // Size: 0x385C @@ -4990,21 +4995,21 @@ public: class daAlinkHIO_canoe_c1 { public: - /* 0x00 */ daAlinkHIO_anm_c field_0x0; - /* 0x14 */ s16 field_0x14; - /* 0x16 */ s16 field_0x16; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1C; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2C; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; + /* 0x00 */ daAlinkHIO_anm_c mLeftRightChangeAnm; + /* 0x14 */ s16 mMaxTurnAngle; + /* 0x16 */ s16 mMaxTurnAngle_RiverRide; + /* 0x18 */ f32 mStickRowAnmSpeed; + /* 0x1C */ f32 mBtnRowAnmSpeed; + /* 0x20 */ f32 mSpeedRate; + /* 0x24 */ f32 mMaxSpeed; + /* 0x28 */ f32 mDeceleration; + /* 0x2C */ f32 mStickRowStartAnmSpeed; + /* 0x30 */ f32 mBtnRowStartAnmSpeed; + /* 0x34 */ f32 mBackSpeedRate; /* 0x38 */ f32 mBackMaxSpeed; - /* 0x3C */ f32 field_0x3C; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ f32 field_0x44; + /* 0x3C */ f32 mMaxSpeed_RiverRide; + /* 0x40 */ f32 mSpeedRate_RiverRide; + /* 0x44 */ f32 mDeceleration_RiverRide; }; // Size: 0x48 class daAlinkHIO_canoe_c0 { diff --git a/include/d/actor/d_a_canoe.h b/include/d/actor/d_a_canoe.h index 9081cce8284..60eaec3a70c 100644 --- a/include/d/actor/d_a_canoe.h +++ b/include/d/actor/d_a_canoe.h @@ -39,6 +39,15 @@ public: void incShapeAngleZ(s16 incZ) { shape_angle.z += incZ; } void onRodID(fpc_ProcID i_rodID) { mRodID = i_rodID; } void setWaterFallDownSe() { field_0x141c.startSound(Z2SE_AL_CANOE_FALL_DW, 0, -1); } + bool checkPaddleChangeWater() { return mPaddleWaterType == 3; } + void startInitPaddleWater() { mPaddleWaterType = 4; } + fpc_ProcID getRodID() { return mRodID; } + + void setAimSpeed(f32 i_speed) { mAimSpeed = i_speed; } + void setAimAngle(s16 i_angle) { + mAimAngle = i_angle; + field_0x1442 = 1; + } void setPosAndAngle(cXyz const* i_pos, s16 i_angle) { field_0x14d0 = *i_pos; @@ -46,6 +55,16 @@ public: field_0x1446 = 1; } + void setPaddleOffsetRight() { + field_0x1454 = 0x40; + field_0x1456 = 0xF; + } + + void setPaddleOffsetLeft() { + field_0x1454 = -0x40; + field_0x1456 = 0xF; + } + private: /* 0x0568 */ request_of_phase_process_class mPhaseReq; /* 0x0570 */ J3DModel* mpModel; @@ -78,7 +97,7 @@ private: /* 0x145C */ s16 field_0x145c; /* 0x145E */ s16 field_0x145e; /* 0x1460 */ s16 field_0x1460; - /* 0x1464 */ u32 mRodID; + /* 0x1464 */ fpc_ProcID mRodID; /* 0x1468 */ f32 mAimSpeed; /* 0x146C */ f32 mShapeOffsetY; /* 0x1470 */ f32 field_0x1470; diff --git a/include/d/actor/d_a_mg_rod.h b/include/d/actor/d_a_mg_rod.h index 500eed5077b..dcfdf68fd79 100644 --- a/include/d/actor/d_a_mg_rod.h +++ b/include/d/actor/d_a_mg_rod.h @@ -41,6 +41,7 @@ public: f32 getRodStickX() { return mRodStickX; } f32 getRodStickY() { return mRodStickY; } bool checkRodEquipPermission() { return field_0x1514 == 0; } + bool checkReelSpin() { return field_0x14f0 != 0; } /* 0x0568 */ u8 field_0x568[0x5A4 - 0x568]; /* 0x05A4 */ mg_rod_s field_0x5a4; @@ -82,7 +83,9 @@ public: /* 0x14C0 */ u8 field_0x14c0[0x14C8 - 0x14C0]; /* 0x14C8 */ f32 mRodStickX; /* 0x14CC */ f32 mRodStickY; - /* 0x14D0 */ u8 field_0x14d0[0x1514 - 0x14D0]; + /* 0x14D0 */ u8 field_0x14d0[0x14F0 - 0x14D0]; + /* 0x14F0 */ int field_0x14f0; + /* 0x14F4 */ u8 field_0x14f4[0x1514 - 0x14F4]; /* 0x1514 */ u8 field_0x1514; /* 0x1515 */ u8 field_0x1515[0x1518 - 0x1515]; /* 0x1518 */ dCcD_Stts field_0x1518; diff --git a/include/d/actor/d_a_obj_iceleaf.h b/include/d/actor/d_a_obj_iceleaf.h index 58faad5580b..84b116017e9 100644 --- a/include/d/actor/d_a_obj_iceleaf.h +++ b/include/d/actor/d_a_obj_iceleaf.h @@ -37,7 +37,9 @@ public: /* 80C25C50 */ void _delete(); void offRide() { mRide = false; } + void onRide() { mRide = true; } void setBreakEffect() { mBreakEffect = true; } + void deleteActor() { field_0x961 = 1; } private: /* 0x568 */ request_of_phase_process_class mPhase; diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 3ed8224f104..120618b9fef 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -351,16 +351,21 @@ public: }; enum daPy_ERFLG0 { + ERFLG0_UNK_80000000 = 0x80000000, ERFLG0_UNK_40000000 = 0x40000000, ERFLG0_UNK_20000000 = 0x20000000, ERFLG0_UNK_10000000 = 0x10000000, ERFLG0_UNK_8000000 = 0x8000000, + ERFLG0_UNK_4000000 = 0x4000000, ERFLG0_BOSS_ROOM_WAIT = 0x2000000, ERFLG0_UNK_1000000 = 0x1000000, ERFLG0_UNK_800000 = 0x800000, ERFLG0_BEE_FOLLOW = 0x400000, ERFLG0_UNK_200000 = 0x200000, ERFLG0_UNK_100000 = 0x100000, + ERFLG0_UNK_40000 = 0x40000, + ERFLG0_UNK_20000 = 0x20000, + ERFLG0_UNK_10000 = 0x10000, ERFLG0_UNK_2000 = 0x2000, ERFLG0_UNK_1000 = 0x1000, ERFLG0_UNK_400 = 0x400, @@ -411,14 +416,17 @@ public: ERFLG2_UNK_20 = 0x20, ERFLG2_UNK_10 = 0x10, ERFLG2_UNK_2 = 2, + ERFLG2_UNK_1 = 1, }; enum daPy_RFLG0 { RFLG0_UNK_40000000 = 0x40000000, RFLG0_UNK_20000000 = 0x20000000, + RFLG0_UNK_10000000 = 0x10000000, RFLG0_UNK_8000000 = 0x8000000, RFLG0_UNK_4000000 = 0x4000000, RFLG0_GRAB_PUT_START = 0x400000, + RFLG0_UNK_80000 = 0x80000, RFLG0_UNK_40000 = 0x40000, RFLG0_UNK_20000 = 0x20000, RFLG0_UNK_10000 = 0x10000, diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 276a4cfbe56..0767401cc4b 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1953,6 +1953,10 @@ inline void dComIfGs_setLightDropNum(u8 i_level, u8 i_num) { g_dComIfG_gameInfo.info.getPlayer().getLightDrop().setLightDropNum(i_level, i_num); } +inline void dComIfGs_setBaitItem(u8 i_item) { + g_dComIfG_gameInfo.info.getPlayer().getItem().setBaitItem(i_item); +} + void dComIfGp_setSelectItem(int index); s32 dComIfGp_offHeapLockFlag(int flag); void dComIfGp_createSubExpHeap2D(); diff --git a/src/d/actor/d_a_alink.cpp b/src/d/actor/d_a_alink.cpp index 2780ddd2336..942dbae6ef5 100644 --- a/src/d/actor/d_a_alink.cpp +++ b/src/d/actor/d_a_alink.cpp @@ -3865,10 +3865,9 @@ COMPILER_STRIP_GATE(0x8038FB38, &l_swordTopLocalM); #pragma pop /* 8038FB44-8038FB50 01C1A4 000C+00 1/2 0/0 0/0 .rodata l_ironBallChainVec */ -SECTION_RODATA static u8 const l_ironBallChainVec[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, +static const Vec l_ironBallChainVec = { + 0.0f, 0.0f, 10.0f }; -COMPILER_STRIP_GATE(0x8038FB44, &l_ironBallChainVec); /* 8038FB50-8038FB5C 01C1B0 000C+00 1/2 0/0 0/0 .rodata l_ironBallCenterVec */ SECTION_RODATA static Vec const l_ironBallCenterVec = { @@ -4835,22 +4834,14 @@ SECTION_RODATA static u8 const lit_33690[12] = { COMPILER_STRIP_GATE(0x80391A2C, &lit_33690); /* 80391A38-80391A44 01E098 000C+00 0/1 0/0 0/0 .rodata ironBallPosVec$34212 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const ironBallPosVec[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x28, 0x00, 0x00, +static Vec const ironBallPosVec = { + 0.0f, 0.0f, -42.0f }; -COMPILER_STRIP_GATE(0x80391A38, &ironBallPosVec); -#pragma pop /* 80391A44-80391A50 01E0A4 000C+00 0/1 0/0 0/0 .rodata handCenterOffsetVec$34213 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const handCenterOffsetVec[12] = { - 0x40, 0x00, 0x00, 0x00, 0xC1, 0xC8, 0x00, 0x00, 0x41, 0x48, 0x00, 0x00, +static Vec const handCenterOffsetVec = { + 2.0f, -25.0f, 12.5f }; -COMPILER_STRIP_GATE(0x80391A44, &handCenterOffsetVec); -#pragma pop /* 80391A50-80391A5C 01E0B0 000C+00 1/1 0/0 0/0 .rodata @34968 */ SECTION_RODATA static u8 const lit_34968[12] = { @@ -9611,6 +9602,7 @@ void daAlink_c::setUnderAnimeMorf(f32 param_0) { int daAlink_c::setUnderAnime(u16 param_0, daAlink_c::daAlink_UNDER param_1, f32 param_2, f32 param_3, s16 param_4, f32 param_5) { // NONMATCHING + return 0; } /* 800ADAB8-800ADAEC 0A83F8 0034+00 2/2 0/0 0/0 .text @@ -9871,6 +9863,7 @@ s16 daAlink_c::getRoofAngle(cBgS_PolyInfo* param_0, s16 param_1) { BOOL daAlink_c::getWallEdgePos(cXyz const& param_0, cM3dGPla* param_1, cM3dGPla* param_2, cXyz* param_3, int param_4) { // NONMATCHING + return 0; } /* 800B02BC-800B146C 0AABFC 11B0+00 9/9 0/0 0/0 .text setFrontWallType__9daAlink_cFv */ @@ -10041,6 +10034,7 @@ bool daAlink_c::checkLv2MiddleBossBgRide(s16 i_procName) { /* 800B1FD8-800B21EC 0AC918 0214+00 11/11 0/0 0/0 .text getSlidePolygon__9daAlink_cFP8cM3dGPla */ bool daAlink_c::getSlidePolygon(cM3dGPla* param_0) { // NONMATCHING + return 0; } /* 800B21EC-800B221C 0ACB2C 0030+00 4/4 0/0 0/0 .text checkSlope__9daAlink_cCFv */ @@ -10903,6 +10897,7 @@ int daAlink_c::checkRequestTalkActor(dAttList_c* param_0, fopAc_ac_c* param_1) { */ bool daAlink_c::checkServiceWaitMode() { // NONMATCHING + return 0; } /* 800B48D0-800B4908 0AF210 0038+00 18/18 0/0 0/0 .text setJumpMode__9daAlink_cFv */ @@ -11289,6 +11284,7 @@ void daAlink_c::decideDoStatus() { /* 800B58EC-800B5BC0 0B022C 02D4+00 25/25 0/0 0/0 .text checkWaitAction__9daAlink_cFv */ BOOL daAlink_c::checkWaitAction() { // NONMATCHING + return 0; } /* 800B5BC0-800B5C34 0B0500 0074+00 3/3 0/0 0/0 .text setFallVoice__9daAlink_cFv */ @@ -13266,6 +13262,7 @@ void daAlink_c::getBodyAngleXBasePos(cXyz* o_pos) { */ s16 daAlink_c::getBodyAngleXAtnActor(int param_0) { // NONMATCHING + return 0; } /* 800BB2B0-800BB324 0B5BF0 0074+00 13/13 0/0 0/0 .text setBodyAngleXReadyAnime__9daAlink_cFi */ @@ -14295,6 +14292,7 @@ void daAlink_c::resetBasAnime() { */ BOOL daAlink_c::checkSightLine(f32 param_0, cXyz* param_1) { // NONMATCHING + return 0; } /* 800BF79C-800BF854 0BA0DC 00B8+00 2/2 0/0 0/0 .text setMetamorphoseModel__9daAlink_cFi diff --git a/src/d/actor/d_a_alink_canoe.inc b/src/d/actor/d_a_alink_canoe.inc index db47fd972eb..5c4ec135db1 100644 --- a/src/d/actor/d_a_alink_canoe.inc +++ b/src/d/actor/d_a_alink_canoe.inc @@ -3,15 +3,18 @@ * Player Canoe riding handling */ +#include "d/actor/d_a_alink.h" #include "d/actor/d_a_canoe.h" +#include "d/actor/d_a_mg_rod.h" +#include "SSystem/SComponent/c_math.h" /* 800F3BB0-800F3BDC 0EE4F0 002C+00 1/1 0/0 2/2 .text getCanoeMaxSpeed__9daAlink_cCFv */ f32 daAlink_c::getCanoeMaxSpeed() const { if (checkCanoeSlider()) { - return daAlinkHIO_canoe_c0::m.field_0x3C; + return daAlinkHIO_canoe_c0::m.mMaxSpeed_RiverRide; + } else { + return daAlinkHIO_canoe_c0::m.mMaxSpeed; } - - return daAlinkHIO_canoe_c0::m.field_0x24; } /* 800F3BDC-800F3BEC 0EE51C 0010+00 0/0 0/0 1/1 .text getCanoeBackMaxSpeed__9daAlink_cCFv @@ -23,25 +26,32 @@ f32 daAlink_c::getCanoeBackMaxSpeed() const { /* 800F3BEC-800F3C18 0EE52C 002C+00 0/0 0/0 1/1 .text getCanoeCres__9daAlink_cCFv */ f32 daAlink_c::getCanoeCres() const { if (checkCanoeSlider()) { - return daAlinkHIO_canoe_c0::m.field_0x44; + return daAlinkHIO_canoe_c0::m.mDeceleration_RiverRide; + } else { + return daAlinkHIO_canoe_c0::m.mDeceleration; } - - return daAlinkHIO_canoe_c0::m.field_0x28; } /* 800F3C18-800F3C44 0EE558 002C+00 2/2 0/0 0/0 .text getCanoeSpeedRate__9daAlink_cCFv */ f32 daAlink_c::getCanoeSpeedRate() const { if (checkCanoeSlider()) { - return daAlinkHIO_canoe_c0::m.field_0x40; + return daAlinkHIO_canoe_c0::m.mSpeedRate_RiverRide; + } else { + return daAlinkHIO_canoe_c0::m.mSpeedRate; } - - return daAlinkHIO_canoe_c0::m.field_0x20; } /* 800F3C44-800F3CCC 0EE584 0088+00 0/0 0/0 1/1 .text getCanoeMaxRotSpeed__9daAlink_cCFv */ s16 daAlink_c::getCanoeMaxRotSpeed() const { - // NONMATCHING + s16 var_r30; + if (checkCanoeSlider()) { + var_r30 = daAlinkHIO_canoe_c0::m.mMaxTurnAngle_RiverRide; + } else { + var_r30 = daAlinkHIO_canoe_c0::m.mMaxTurnAngle; + } + + return var_r30 * (((mUnderFrameCtrl[0].getRate() - daAlinkHIO_canoe_c0::m.mStickRowAnmSpeed) * 0.5f) + 1.0f); } /* 800F3CCC-800F3CD8 0EE60C 000C+00 1/1 0/0 1/1 .text getCanoeLocalPaddleTop__9daAlink_cFv */ @@ -50,10 +60,9 @@ cXyz* daAlink_c::getCanoeLocalPaddleTop() { } /* 800F3CD8-800F3CF8 0EE618 0020+00 3/3 0/0 0/0 .text daAlink_searchCanoe__FP10fopAc_ac_cPv */ -static fopAc_ac_c* daAlink_searchCanoe(fopAc_ac_c* param_0, void* param_1) { - if (fopAcM_GetName(param_0) == PROC_CANOE && - static_cast(param_0)->getModel() != NULL) { - return param_0; +static fopAc_ac_c* daAlink_searchCanoe(fopAc_ac_c* i_actor, void* i_data) { + if (fopAcM_GetName(i_actor) == PROC_CANOE && ((daCanoe_c*)i_actor)->getModel() != NULL) { + return i_actor; } return NULL; @@ -95,21 +104,20 @@ void daAlink_c::initFishingRodHand() { */ MtxP daAlink_c::getCanoePaddleMatrix() { mDoMtx_stack_c::copy(getRightItemMatrix()); - f32 tmp_0 = 0.0f; - mDoMtx_stack_c::transM(tmp_0, tmp_0, 25.0f); + mDoMtx_stack_c::transM(0.0f, 0.0f, 25.0f); return mDoMtx_stack_c::get(); } /* 800F3E4C-800F3EB8 0EE78C 006C+00 0/0 0/0 4/4 .text * checkFishingRodGrab__9daAlink_cCFP10fopAc_ac_c */ -BOOL daAlink_c::checkFishingRodGrab(fopAc_ac_c* param_0) const { - return checkFishingRodAndLureItem() && mItemAcKeep.getID() == fopAcM_GetID(param_0); +BOOL daAlink_c::checkFishingRodGrab(fopAc_ac_c* i_actor) const { + return checkFishingRodAndLureItem() && mItemAcKeep.getID() == fopAcM_GetID(i_actor); } /* 800F3EB8-800F3F38 0EE7F8 0080+00 0/0 0/0 2/2 .text * checkCanoePaddleGrab__9daAlink_cCFP10fopAc_ac_c */ -BOOL daAlink_c::checkCanoePaddleGrab(fopAc_ac_c* param_0) const { - return mEquipItem == noentry79 && checkCanoeRideOwn(param_0); +BOOL daAlink_c::checkCanoePaddleGrab(fopAc_ac_c* i_actor) const { + return mEquipItem == 0x10B && checkCanoeRideOwn(i_actor); } /* 800F3F38-800F3FC4 0EE878 008C+00 0/0 0/0 1/1 .text checkCanoeFishingRodGrabOrPut__9daAlink_cCFv @@ -160,7 +168,59 @@ void daAlink_c::setArmReelAnime() { /* 800F4140-800F4490 0EEA80 0350+00 1/1 0/0 0/0 .text setFishingWaitAction__9daAlink_cFv */ void daAlink_c::setFishingWaitAction() { - // NONMATCHING + daPy_frameCtrl_c* frame_ctrl0 = &mUnderFrameCtrl[0]; + daPy_frameCtrl_c* frame_ctrl1 = &mUnderFrameCtrl[1]; + + f32 sp10 = frame_ctrl0->getFrame(); + f32 spC = frame_ctrl1->getFrame(); + f32 sp8 = mNowAnmPackUnder[0].getRatio(); + + if (checkResetFlg0(RFLG0_UNK_80000)) { + mUpperFrameCtrl[2].setRate(1.0f); + } else { + mUpperFrameCtrl[2].setRate(0.0f); + } + + f32 var_f29, var_f28, var_f27, var_f26, var_f31, var_f30; + dmg_rod_class* mg_rod = (dmg_rod_class*)mItemAcKeep.getActor(); + if (mg_rod != NULL && !checkEventRun()) { + var_f31 = mg_rod->getRodStickX(); + var_f30 = mg_rod->getRodStickY(); + } else { + var_f31 = 0.0f; + var_f30 = 0.0f; + } + + var_f29 = JMAFastSqrt(var_f31 * var_f31 + var_f30 * var_f30); + int var_r27 = abs(cM_atan2s(-var_f31, var_f30)); + + if (var_f29 > 0.05f) { + if (var_f30 > 0.0f) { + var_f28 = ((1.0f - (var_f29 - fabsf(var_f31))) * frame_ctrl0->getEnd()) * 0.2f; + var_f26 = (0x4000 - var_r27) * 0.000061035156f; + } else { + var_f28 = frame_ctrl0->getEnd() - (((1.0f - (var_f29 - fabsf(var_f31))) * frame_ctrl0->getEnd()) * 0.8f); + var_f26 = (var_r27 - 0x4000) * 0.000061035156f; + } + + if (var_f31 < 0.0f) { + var_f27 = ((1.0f - (var_f29 - fabsf(var_f30))) * frame_ctrl1->getEnd()) * 0.5f; + } else { + var_f27 = frame_ctrl1->getEnd() - (((1.0f - (var_f29 - fabsf(var_f30))) * frame_ctrl1->getEnd()) * 0.5f); + } + } else { + var_f28 = frame_ctrl0->getEnd() * 0.2f; + var_f27 = frame_ctrl1->getEnd() * 0.5f; + var_f26 = 0.5f; + } + + cLib_addCalc(&sp10, var_f28, 0.3f, 0.8f, 0.01f); + cLib_addCalc(&spC, var_f27, 0.3f, 0.8f, 0.01f); + frame_ctrl0->setFrame(sp10); + frame_ctrl1->setFrame(spC); + + cLib_chaseF(&sp8, var_f26, 0.1f); + setDoubleAnimeBlendRatio(1.0f - sp8); } /* 800F4490-800F4564 0EEDD0 00D4+00 3/3 0/0 0/0 .text setFishGetFace__9daAlink_cFv */ @@ -188,19 +248,92 @@ void daAlink_c::setRideCanoeBasePos(fopAc_ac_c* param_0) { field_0x37c8.y = 25.0f; field_0x37c8.z = -35.0f; - if (static_cast(param_0)->checkTandem()) { + if (((daCanoe_c*)param_0)->checkTandem()) { field_0x37c8.z += 175.0f; } } /* 800F459C-800F47D8 0EEEDC 023C+00 20/20 0/0 0/0 .text setSyncCanoePos__9daAlink_cFv */ void daAlink_c::setSyncCanoePos() { - // NONMATCHING + daCanoe_c* canoe = (daCanoe_c*)mRideAcKeep.getActor(); + if (canoe->checkTandem()) { + mDoMtx_stack_c::copy(canoe->getModelMtx()); + mDoMtx_stack_c::transM(0.0f, 0.0f, 175.0f); + mDoMtx_stack_c::multVec(field_0x384c, ¤t.pos); + } else { + mDoMtx_multVec(canoe->getModelMtx(), field_0x384c, ¤t.pos); + } + + field_0x2f99 = 0x60; + mNormalSpeed = fabsf(canoe->speedF); + + s16 var_r28; + if (mProcID == PROC_CANOE_SUBJECTIVITY || mProcID == PROC_CANOE_BOW_SUBJECT || mProcID == PROC_CANOE_BOOMERANG_SUBJECT || mProcID == PROC_CANOE_HOOKSHOT_SUBJECT) { + var_r28 = 0; + shape_angle.y = canoe->shape_angle.y; + cLib_addCalcAngleS(&shape_angle.x, 0, 5, 0x1000, 0x200); + cLib_addCalcAngleS(&shape_angle.z, 0, 5, 0x1000, 0x200); + } else { + var_r28 = -FAST_DIV(shape_angle.z, 2); + shape_angle = canoe->shape_angle; + } + + current.angle.y = shape_angle.y; + cLib_addCalcAngleS(&mBodyAngle.z, var_r28, 5, 0x40, 0x10); + + s16 var_r29; + f32 var_f31; + if ((canoe->speedF < 0.0f && mProcID == PROC_CANOE_WAIT) || (mProcID == PROC_CANOE_ROW && mProcVar3.field_0x300e.x == 1)) { + if (mProcVar3.field_0x300e.z == 0) { + var_r29 = 0x5000; + var_f31 = 1.0f; + } else { + var_r29 = -0x5000; + var_f31 = 1.0f; + } + } else { + if (!checkNoUpperAnime()) { + var_r29 = 0; + var_f31 = 0.0f; + } else { + var_r29 = 0; + var_f31 = (s16)(shape_angle.y - field_0x2fe6) * 0.005f; + } + } + + daPy_addCalcShort(&mProcVar3.field_0x300e.y, var_r29, 3, 0x1000, 0x100); + field_0x30a2 = mProcVar3.field_0x300e.y; + cLib_chaseF(&field_0x33f0, var_f31, 0.2f); } /* 800F47D8-800F4924 0EF118 014C+00 19/19 0/0 0/0 .text canoeCommon__9daAlink_cFv */ -void daAlink_c::canoeCommon() { - // NONMATCHING +int daAlink_c::canoeCommon() { + if (mRideAcKeep.getActor() == NULL) { + return checkNextAction(0); + } + + setSyncCanoePos(); + + if (((daCanoe_c*)mRideAcKeep.getActor())->checkPaddleChangeWater()) { + f32 var_f31; + if (getNowAnmPackUnder(UNDER_0) != getNowAnmPackUpper(UPPER_0)) { + var_f31 = mUpperFrameCtrl[0].getRate(); + } else { + var_f31 = mUnderFrameCtrl[0].getRate(); + } + + u32 var_r29; + if ((mUpperAnmHeap[0].getIdx() == getMainBckData(ANM_CANOE_ROW_LEFT_BACK)->m_upperID) || (mUpperAnmHeap[0].getIdx() == getMainBckData(ANM_CANOE_ROW_RIGHT_BACK)->m_upperID)) { + var_r29 = 0x20022; + } else { + var_r29 = 0x20021; + } + + int var_r27 = cLib_minMaxLimit(((fabsf(var_f31) - daAlinkHIO_canoe_c0::m.mStickRowAnmSpeed) / (daAlinkHIO_canoe_c0::m.mBtnRowStartAnmSpeed - daAlinkHIO_canoe_c0::m.mStickRowAnmSpeed)) * 127.0f, 0, 0x7F); + mZ2Link.startLinkSwordSound(var_r29, var_r27, mVoiceReverbIntensity); + } + + return 0; } /* 800F4924-800F4A50 0EF264 012C+00 10/10 0/0 0/0 .text checkNextActionCanoe__9daAlink_cFv */ @@ -240,9 +373,8 @@ int daAlink_c::procCanoeRideInit() { daAlinkHIO_wallCatch_c0::m.mClimbAnm.mInterpolation); setSpecialGravity(0.0f, maxFallSpeed, 0); - f32 tmp_0 = 0.0f; - mNormalSpeed = tmp_0; - speed.y = tmp_0; + mNormalSpeed = 0.0f; + speed.y = 0.0f; setRideCanoeBasePos(canoe); if ((s16)(fopAcM_searchActorAngleY(canoe, this) - canoe->shape_angle.y) > 0) { @@ -312,9 +444,8 @@ int daAlink_c::procCanoeJumpRideInit(fopAc_ac_c* param_0) { mRideAcKeep.setData(canoe); setSpecialGravity(0.0f, maxFallSpeed, 0); - f32 tmp_0 = 0.0f; - mNormalSpeed = tmp_0; - speed.y = tmp_0; + mNormalSpeed = 0.0f; + speed.y = 0.0f; setRideCanoeBasePos(canoe); mDoMtx_multVec(canoe->getModelMtx(), &field_0x37c8, ¤t.pos); current.angle.y = shape_angle.y; @@ -346,242 +477,1377 @@ int daAlink_c::procCanoeJumpRide() { /* 800F4DF8-800F5048 0EF738 0250+00 2/2 0/0 0/0 .text procCanoeGetOffInit__9daAlink_cFv */ int daAlink_c::procCanoeGetOffInit() { - // NONMATCHING + commonProcInit(PROC_CANOE_GETOFF); + daCanoe_c* canoe = (daCanoe_c*)mRideAcKeep.getActor(); + + field_0x2f99 = 0; + mNormalSpeed = 0.0f; + + setSingleAnimeBaseSpeed(ANM_WAIT, daAlinkHIO_move_c0::m.mWaitAnmSpeed, 6.0f); + setSpecialGravity(0.0f, maxFallSpeed, 0); + mNormalSpeed = 0.0f; + speed.y = 0.0f; + + J3DTransformInfo* var_r28 = field_0x2060->getOldFrameTransInfo(0); + + cXyz sp4C(canoe->current.pos.x - cM_scos(shape_angle.y) * 150.0f, canoe->current.pos.y + 100.0f, canoe->current.pos.z + cM_ssin(shape_angle.y) * 150.0f); + cXyz sp58(canoe->current.pos.x, sp4C.y, canoe->current.pos.z); + + BOOL var_r27; + if (commonLineCheck(&sp58, &sp4C)) { + var_r27 = false; + } else { + sp4C.x = sp58.x * 2.0f - sp4C.x; + sp4C.z = sp58.z * 2.0f - sp4C.z; + + if (commonLineCheck(&sp58, &sp4C)) { + var_r27 = true; + } else { + mLinkGndChk.SetPos(&sp4C); + if (dComIfG_Bgsp().GroundCross(&mLinkGndChk) > canoe->current.pos.y) { + var_r27 = false; + } else { + var_r27 = true; + } + } + } + + if (var_r27) { + shape_angle.y -= 0x4000; + setOldRootQuaternion(0, 0x4000, 0); + var_r28->mTranslate.x -= 100.0f; + } else { + shape_angle.y += 0x4000; + setOldRootQuaternion(0, -0x4000, 0); + var_r28->mTranslate.x += 100.0f; + } + + var_r28->mTranslate.z += 70.0f; + current.angle.y = shape_angle.y; + + setRideCanoeBasePos(canoe); + field_0x37c8.z -= -35.0f; + + cMtx_multVec(canoe->getModelMtx(), &field_0x37c8, ¤t.pos); + mProcVar3.field_0x300e.x = 0; + return 1; } /* 800F5048-800F51E4 0EF988 019C+00 1/1 0/0 0/0 .text procCanoeGetOff__9daAlink_cFv */ int daAlink_c::procCanoeGetOff() { - // NONMATCHING + if (checkCanoeRide()) { + daCanoe_c* canoe = (daCanoe_c*)mRideAcKeep.getActor(); + if (canoe == NULL) { + return checkNextAction(0); + } + + cMtx_multVec(canoe->getModelMtx(), &field_0x37c8, ¤t.pos); + } + + if (checkModeFlg(2)) { + if (mLinkAcch.i_ChkGroundHit()) { + checkLandAction(0); + } else if (speed.y < -gravity) { + procFallInit(2, daAlinkHIO_smallJump_c0::m.mFallInterpolation); + } else { + field_0x2f99 = 7; + } + } else { + if (mProcVar3.field_0x300e.x == 0) { + if (field_0x2060->getOldFrameRate() < 0.01f) { + mProcVar3.field_0x300e.x = 1; + setSingleAnimeParam(ANM_VJUMP_START, &daAlinkHIO_smallJump_c0::m.mSmallJumpAnm); + field_0x33b0 = l_waitBaseAnime.y; + field_0x3588 = l_waitBaseAnime; + } + } else if (mUnderFrameCtrl[0].checkPass(6)) { + rideGetOff(); + offModeFlg(0x400); + setJumpMode(); + setSpecialGravity(daAlinkHIO_autoJump_c0::m.mGravity, maxFallSpeed, 0); + mNormalSpeed = 15.0f; + speed.y = 20.0f; + } + } + + return 1; } /* 800F51E4-800F542C 0EFB24 0248+00 15/15 0/0 0/0 .text procCanoeWaitInit__9daAlink_cFi */ int daAlink_c::procCanoeWaitInit(int param_0) { - // NONMATCHING + if (mProcID == PROC_CANOE_FISHING_WAIT) { + mProcVar3.field_0x300e.z = 1; + return procCanoePaddleGrabInit(); + } + + BOOL temp_r26 = mProcID == PROC_CANOE_GRAB_MOVE; + + if (!commonProcInitNotSameProc(PROC_CANOE_WAIT)) { + return 0; + } + + f32 var_f31; + daAlink_ANM var_r27; + + if (param_0) { + cXyz sp8; + daCanoe_c* canoe = (daCanoe_c*)mRideAcKeep.getActor(); + + setOldRootQuaternion(0, (s16)(shape_angle.y - canoe->shape_angle.y), 0); + J3DTransformInfo* temp_r3_2 = field_0x2060->getOldFrameTransInfo(0); + + mDoMtx_stack_c::YrotS(-canoe->shape_angle.y); + mDoMtx_stack_c::transM(-canoe->current.pos.x, -canoe->current.pos.y, -canoe->current.pos.z); + mDoMtx_stack_c::multVec(¤t.pos, &sp8); + + temp_r3_2->mTranslate.x += sp8.x; + temp_r3_2->mTranslate.y += sp8.y; + temp_r3_2->mTranslate.z += sp8.z - 15.0f; + + if (canoe->checkTandem()) { + temp_r3_2->mTranslate.z -= 175.0f; + } + + if (param_0 == 2) { + var_f31 = -1.0f; + mProcVar0.field_0x3008 = 0; + mEquipItem = 0x10B; + var_r27 = ANM_WAIT_CANOE_RIGHT; + canoe->startInitPaddleWater(); + } else { + var_f31 = 10.0f; + mProcVar0.field_0x3008 = 10; + var_r27 = ANM_WAIT_SIT; + } + } else { + var_f31 = 3.0f; + mProcVar0.field_0x3008 = 0; + + if (mEquipItem == NO_ITEM || (mEquipItem != 0x10B && !checkFisingRodLure())) { + var_r27 = ANM_WAIT_SIT; + } else if (mProcVar3.field_0x300e.z == 0) { + var_r27 = ANM_WAIT_CANOE_LEFT; + } else { + var_r27 = ANM_WAIT_CANOE_RIGHT; + } + } + + setSyncCanoePos(); + setSingleAnimeBaseMorf(var_r27, var_f31); + + if (param_0 && mEquipItem != 0x10B && mEquipItem != NO_ITEM && !checkFisingRodLure()) { + allUnequip(0); + } + + mProcVar1.field_0x300a = temp_r26; + mNormalSpeed = 0.0f; + speed.y = 0.0f; + setSpecialGravity(0.0f, maxFallSpeed, 0); + return 1; } /* 800F542C-800F571C 0EFD6C 02F0+00 1/0 0/0 0/0 .text procCanoeWait__9daAlink_cFv */ int daAlink_c::procCanoeWait() { - // NONMATCHING + if (canoeCommon() != 0) { + return 1; + } + + if (mProcVar0.field_0x3008 > 0) { + mProcVar0.field_0x3008--; + } else if (!checkNextActionCanoe()) { + if (checkNoUpperAnime()) { + if (mNormalSpeed < 3.0f && !checkFisingRodLure() && !checkCanoeSlider()) { + if (!setTalkStatus() && !checkStageName("F_SP127")) { + setDoStatusEmphasys(0x16); + } + + if (orderTalk(0) != 0) { + return 1; + } + + if (doTrigger() && dComIfGp_getDoStatus() == 0x16) { + if (mEquipItem == 0x10B) { + return procCanoePaddlePutInit(1); + } + + if (mEquipItem != NO_ITEM) { + allUnequip(0); + } + + return procCanoeGetOffInit(); + } + } + + if (checkFisingRodLure()) { + procCanoeFishingWaitInit(); + } else if (mEquipItem == NO_ITEM && ((mThrowBoomerangAcKeep.getActor() == NULL && mProcVar1.field_0x300a == 0) || checkInputOnR())) { + field_0x2fde = 0xFF; + + if (mThrowBoomerangAcKeep.getActor() != NULL || mProcVar1.field_0x300a != 0) { + if ((s16)(field_0x2fe2 - shape_angle.y) >= 0) { + mProcVar3.field_0x300e.z = 1; + } else { + mProcVar3.field_0x300e.z = 0; + } + } + + procCanoePaddleGrabInit(); + } else if (checkInputOnR() && mEquipItem == 0x10B) { + procCanoeRowInit(-1); + } else if (mEquipItem != NO_ITEM && mEquipItem != 0x10B) { + if (!checkUnderMove0BckNoArc(ANM_WAIT_SIT) && getNowAnmPackUnder(UNDER_0) != getNowAnmPackUpper(UPPER_0)) { + setSingleAnimeBase(ANM_WAIT_SIT); + } else if (checkInputOnR()) { + allUnequip(0); + + if ((s16)(field_0x2fe2 - shape_angle.y) >= 0) { + mProcVar3.field_0x300e.z = 1; + } else { + mProcVar3.field_0x300e.z = 0; + } + } + } + } else if (checkEquipAnime()) { + if (mEquipItem == 0x10B) { + procCanoePaddlePutInit(0); + } else if (field_0x2fde == 0x105 && ((daCanoe_c*)mRideAcKeep.getActor())->getRodID() != fpcM_ERROR_PROCESS_ID_e) { + procCanoeRodGrabInit(); + } + } + } + + return 1; } /* 800F571C-800F5A1C 0F005C 0300+00 3/3 0/0 0/0 .text procCanoeRowInit__9daAlink_cFi */ +// NONMATCHING - incorrect code gen related to daAlink_ANM int daAlink_c::procCanoeRowInit(int param_0) { - // NONMATCHING + fopAc_ac_c* temp_r26 = mRideAcKeep.getActor(); + field_0x3198 = -2; + + daAlink_ANM var_r29; + if (param_0 < 0) { + if (checkInputOnR()) { + s16 sp8 = (s16)(field_0x2fe2 - shape_angle.y); + int temp_r3 = abs(sp8); + + BOOL spC; + if (temp_r3 >= 0x6800) { + spC = 1; + } else { + spC = 0; + } + + int var_r28; + if (temp_r3 < 0x40 || temp_r3 > 0x7F80) { + if (param_0 == -3) { + if (mProcVar3.field_0x300e.z == 0) { + var_r28 = 2; + } else { + var_r28 = 3; + } + } else { + if (param_0 == -2) { + field_0x3198 = -3; + } + + if (mProcVar3.field_0x300e.z == 0) { + var_r28 = 3; + } else { + var_r28 = 2; + } + } + } else if (sp8 > 0) { + var_r28 = 2; + } else { + var_r28 = 3; + } + + if (spC == 1) { + var_r29 = var_r28 == 2 ? ANM_CANOE_ROW_RIGHT_BACK : ANM_CANOE_ROW_LEFT_BACK; + + if ((var_r29 == ANM_CANOE_ROW_RIGHT_BACK && mProcVar3.field_0x300e.z == 0) || (var_r29 == ANM_CANOE_ROW_LEFT_BACK && mProcVar3.field_0x300e.z == 1)) { + return procCanoePaddleShiftInit(var_r29); + } + } else { + var_r29 = var_r28 == 2 ? ANM_CANOE_ROW_RIGHT : ANM_CANOE_ROW_LEFT; + + if ((var_r29 == ANM_CANOE_ROW_RIGHT && mProcVar3.field_0x300e.z == 0) || (var_r29 == ANM_CANOE_ROW_LEFT && mProcVar3.field_0x300e.z == 1)) { + return procCanoePaddleShiftInit(var_r29); + } + } + + } else { + if (param_0 == -3) { + if (mProcVar3.field_0x300e.z == 1) { + return procCanoePaddleShiftInit(ANM_CANOE_ROW_LEFT); + } + return procCanoePaddleShiftInit(ANM_CANOE_ROW_RIGHT); + } else if (param_0 == -2) { + field_0x3198 = -3; + } + + if (mProcVar3.field_0x300e.z == 1) { + var_r29 = ANM_CANOE_ROW_RIGHT; + } else { + var_r29 = ANM_CANOE_ROW_LEFT; + } + } + } else { + var_r29 = (daAlink_ANM)param_0; + } + + commonProcInit(PROC_CANOE_ROW); + f32 var_f31 = daAlinkHIO_canoe_c0::m.mBtnRowAnmSpeed; + BOOL var_r24 = 0; + + if (var_r29 == ANM_CANOE_ROW_LEFT_BACK || var_r29 == ANM_CANOE_ROW_RIGHT_BACK) { + mProcVar3.field_0x300e.x = 1; + if (temp_r26->speedF > 0.5f * (-var_f31 * daAlinkHIO_canoe_c0::m.mBackSpeedRate)) { + var_r24 = 1; + } + + field_0x3478 = 32.0f; + mProcVar0.field_0x3008 = 0; + } else { + mProcVar3.field_0x300e.x = 0; + if (temp_r26->speedF < 0.5f * (var_f31 * getCanoeSpeedRate())) { + var_r24 = 1; + } + + field_0x3478 = 26.0f; + + if (param_0 == -1) { + mProcVar0.field_0x3008 = 1; + } else { + mProcVar0.field_0x3008 = 0; + } + } + + if (var_r24 != 0) { + var_f31 = daAlinkHIO_canoe_c0::m.mBtnRowStartAnmSpeed; + } + + setSingleAnime((daAlink_ANM)var_r29, var_f31, 0.0f, 35, 3.0f); + setSyncCanoePos(); + return 1; } /* 800F5A1C-800F5D04 0F035C 02E8+00 1/0 0/0 0/0 .text procCanoeRow__9daAlink_cFv */ int daAlink_c::procCanoeRow() { - // NONMATCHING + daCanoe_c* temp_r29 = (daCanoe_c*)mRideAcKeep.getActor(); + if (canoeCommon()) { + return 1; + } + + daPy_frameCtrl_c* temp_r27 = &mUpperFrameCtrl[0]; + + if (!checkItemChangeFromButton()) { + if (checkEquipAnime()) { + procCanoePaddlePutInit(0); + } else if (temp_r27->checkPass(0.0f)) { + if (checkInputOnR()) { + procCanoeRowInit(field_0x3198); + } else { + procCanoeWaitInit(0); + } + } else { + f32 var_f30 = daAlinkHIO_canoe_c0::m.mBtnRowAnmSpeed; + if ((mProcVar3.field_0x300e.x == 1 && temp_r29->speedF > 0.5f * (-var_f30 * daAlinkHIO_canoe_c0::m.mBackSpeedRate)) || (mProcVar3.field_0x300e.x == 0 && temp_r29->speedF < 0.5f * (var_f30 * getCanoeSpeedRate()))) { + var_f30 = daAlinkHIO_canoe_c0::m.mBtnRowStartAnmSpeed; + } + + f32 sp8 = temp_r27->getRate(); + cLib_chaseF(&sp8, var_f30, 0.1f); + temp_r27->setRate(sp8); + + if (mProcVar0.field_0x3008 == 0 || temp_r27->getFrame() >= 19.0f) { + s16 var_r28; + if (checkInputOnR()) { + s16 temp_r0 = field_0x2fe2 - shape_angle.y; + s16 var_r25; + if (mProcVar3.field_0x300e.x == 1) { + var_r25 = field_0x2fe2 + 0x8000; + } else { + var_r25 = field_0x2fe2; + } + + if (temp_r0 == -0x8000 || (temp_r0 > 0 && mProcVar3.field_0x300e.z == 1) || (temp_r0 < 0 && mProcVar3.field_0x300e.z == 0)) { + temp_r29->setAimAngle(var_r25); + } + var_r28 = mStickAngle; + } else { + var_r28 = 0x4000; + } + + f32 var_f31 = temp_r27->getRate(); + + if (checkCanoeSlider()) { + int temp_r3 = abs(var_r28); + if (temp_r3 < 0x6000 && temp_r3 > 0x2000) { + var_f31 *= cM_ssin(abs((temp_r3 - 0x4000) * 2)); + } + } else { + var_f31 *= fabsf(cM_scos(var_r28)); + } + + if (mProcVar3.field_0x300e.x == 0) { + temp_r29->setAimSpeed(var_f31 * getCanoeSpeedRate()); + } else { + temp_r29->setAimSpeed(-var_f31 * daAlinkHIO_canoe_c0::m.mBackSpeedRate); + } + } + + if (temp_r27->checkPass(field_0x3478)) { + if (mProcVar3.field_0x300e.z == 1) { + temp_r29->setPaddleOffsetRight(); + } else { + temp_r29->setPaddleOffsetLeft(); + } + } + } + } + + return 1; } /* 800F5D04-800F5DB8 0F0644 00B4+00 1/1 0/0 0/0 .text procCanoePaddleShiftInit__9daAlink_cFi */ int daAlink_c::procCanoePaddleShiftInit(int param_0) { - // NONMATCHING + commonProcInit(PROC_CANOE_PADDLE_SHIFT); + + f32 speed; + if (mProcVar3.field_0x300e.z == 0) { + speed = daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mSpeed; + } else { + speed = -daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mSpeed; + } + + setSingleAnime(ANM_CANOE_CHANGE_HAND, speed, daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mStartFrame, daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mEndFrame, daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mInterpolation); + + if (mProcVar3.field_0x300e.z == 1) { + field_0x2f92 = 0; + field_0x2f93 = 0xFE; + } + + field_0x3198 = param_0; + setSyncCanoePos(); + return 1; } /* 800F5DB8-800F5EA8 0F06F8 00F0+00 1/0 0/0 0/0 .text procCanoePaddleShift__9daAlink_cFv */ int daAlink_c::procCanoePaddleShift() { - // NONMATCHING + if (canoeCommon()) { + return 1; + } + + daPy_frameCtrl_c* frame_ctrl = mUpperFrameCtrl; + + if (!checkItemChangeFromButton()) { + if (checkEquipAnime()) { + procCanoePaddlePutInit(0); + } else if (checkAnmEnd(frame_ctrl)) { + procCanoeRowInit(field_0x3198); + } else if (frame_ctrl->checkPass(11)) { + if (mProcVar3.field_0x300e.z == 0) { + field_0x2f92 = 0; + field_0x2f93 = 0xFE; + mProcVar3.field_0x300e.z = 1; + } else { + field_0x2f92 = 0xFE; + field_0x2f93 = 5; + mProcVar3.field_0x300e.z = 0; + } + } + } + + return 1; } /* 800F5EA8-800F5FEC 0F07E8 0144+00 3/3 0/0 0/0 .text procCanoePaddlePutInit__9daAlink_cFi */ int daAlink_c::procCanoePaddlePutInit(int param_0) { - // NONMATCHING + if (checkCanoeSlider() && mEquipItem == 0x10B) { + if (checkEquipAnime() && checkBowItem(field_0x2fde)) { + mEquipItem = NO_ITEM; + field_0x2f93 = 0xFE; + field_0x2f92 = 0xFE; + return procCanoeWaitInit(0); + } + } + + commonProcInit(PROC_CANOE_PADDLE_PUT); + + f32 var_f31; + if (mProcVar3.field_0x300e.z == 0) { + var_f31 = daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mSpeed; + } else { + var_f31 = -daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mSpeed; + } + + setSingleAnime(ANM_CANOE_CHANGE_HAND, var_f31, daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mStartFrame, daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mEndFrame, daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mInterpolation); + + if (mProcVar3.field_0x300e.z == 1) { + field_0x2f92 = 0; + field_0x2f93 = 0xFE; + } + + mProcVar3.field_0x300e.x = param_0; + + setSyncCanoePos(); + ((daCanoe_c*)mRideAcKeep.getActor())->setAimSpeed(0.0f); + + if (param_0 == 0 && field_0x2fde == 0x105) { + mItemAcKeep.setID(((daCanoe_c*)mRideAcKeep.getActor())->getRodID()); + mItemAcKeep.setActor(); + } + + return 1; } /* 800F5FEC-800F6140 0F092C 0154+00 1/0 0/0 0/0 .text procCanoePaddlePut__9daAlink_cFv */ int daAlink_c::procCanoePaddlePut() { - // NONMATCHING + if (canoeCommon()) { + return 1; + } + + if (mUpperAnmHeap[0].getIdx() == getMainBckData(ANM_CANOE_CHANGE_HAND)->m_upperID) { + if (mUpperFrameCtrl[0].checkPass(11)) { + setSingleAnimeBaseSpeed(ANM_CANOE_PADDLE_TO_ROD, -1.0f, 3.0f); + field_0x2f92 = 0; + field_0x2f93 = 0xFE; + } + } else { + daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0]; + + if (checkAnmEnd(temp_r29)) { + if (mProcVar3.field_0x300e.x != 0) { + return procCanoeGetOffInit(); + } + + if (mItemAcKeep.getActor() != NULL) { + initFishingRodHand(); + procCanoeFishingWaitInit(); + } else { + itemEquip(field_0x2fde); + procCanoeWaitInit(0); + } + } else if (temp_r29->getFrame() < 5.0f) { + if (mItemAcKeep.getActor() != NULL) { + mEquipItem = 0x105; + field_0x2f93 = 5; + } else { + mEquipItem = NO_ITEM; + field_0x2f93 = 0xFE; + } + + field_0x2f92 = 0xFE; + } + } + + return 1; } /* 800F6140-800F6188 0F0A80 0048+00 2/2 0/0 0/0 .text procCanoePaddleGrabInit__9daAlink_cFv */ int daAlink_c::procCanoePaddleGrabInit() { - // NONMATCHING + commonProcInit(PROC_CANOE_PADDLE_GRAB); + setSingleAnimeBase(ANM_CANOE_PADDLE_TO_ROD); + setSyncCanoePos(); + return 1; } /* 800F6188-800F6320 0F0AC8 0198+00 1/0 0/0 0/0 .text procCanoePaddleGrab__9daAlink_cFv */ int daAlink_c::procCanoePaddleGrab() { - // NONMATCHING + if (canoeCommon()) { + return 1; + } + + if (checkUnderMove0BckNoArc(ANM_CANOE_PADDLE_TO_ROD) != 0) { + daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0]; + + if (checkAnmEnd(temp_r29) != 0) { + f32 var_f31; + if (mProcVar3.field_0x300e.z == 0) { + var_f31 = -daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mSpeed; + } else { + var_f31 = daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mSpeed; + } + + setSingleAnime(ANM_CANOE_CHANGE_HAND, var_f31, daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mStartFrame, daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mEndFrame, daAlinkHIO_canoe_c0::m.mLeftRightChangeAnm.mInterpolation); + mUpperFrameCtrl[0].setFrame(11.0f); + getNowAnmPackUpper(UPPER_0)->setFrame(11.0f); + + if (mProcVar3.field_0x300e.z == 1) { + field_0x2f92 = 0; + field_0x2f93 = 0xFE; + } else { + field_0x2f92 = 0xFE; + field_0x2f93 = 5; + } + } else if (temp_r29->getFrame() >= 5.0f) { + if (checkFisingRodLure()) { + ((daCanoe_c*)mRideAcKeep.getActor())->onRodID(mItemAcKeep.getID()); + mItemAcKeep.clearData(); + deleteEquipItem(0, 0); + } + + field_0x2f92 = 0xFE; + + if (field_0x2fde == 0xFF) { + mEquipItem = 0x10B; + } else { + itemEquip(field_0x2fde); + return procCanoeWaitInit(0); + } + } + } else if (checkAnmEnd(mUpperFrameCtrl)) { + procCanoeWaitInit(0); + } + + return 1; } /* 800F6320-800F6394 0F0C60 0074+00 1/1 0/0 0/0 .text procCanoeRodGrabInit__9daAlink_cFv */ int daAlink_c::procCanoeRodGrabInit() { - // NONMATCHING + commonProcInit(PROC_CANOE_ROD_GRAB); + + if (mEquipItem != NO_ITEM) { + allUnequip(0); + mProcVar0.field_0x3008 = 1; + } else { + setSingleAnimeBase(ANM_CANOE_PADDLE_TO_ROD); + mProcVar0.field_0x3008 = 0; + } + + setSyncCanoePos(); + return 1; } /* 800F6394-800F6464 0F0CD4 00D0+00 1/0 0/0 0/0 .text procCanoeRodGrab__9daAlink_cFv */ int daAlink_c::procCanoeRodGrab() { - // NONMATCHING + if (canoeCommon()) { + return 1; + } + + if (mProcVar0.field_0x3008 != 0) { + if (checkNoUpperAnime()) { + mProcVar0.field_0x3008 = 0; + setSingleAnimeBase(ANM_CANOE_PADDLE_TO_ROD); + } + } else if (mUnderFrameCtrl[0].getFrame() >= 5.0f) { + mItemAcKeep.setID(((daCanoe_c*)mRideAcKeep.getActor())->getRodID()); + mItemAcKeep.setActor(); + + if (mItemAcKeep.getActor() != NULL) { + initFishingRodHand(); + mEquipItem = 0x105; + procCanoeFishingWaitInit(); + } else { + procCanoeWaitInit(0); + } + } + + return 1; } /* 800F6464-800F659C 0F0DA4 0138+00 6/6 0/0 0/0 .text procCanoeFishingWaitInit__9daAlink_cFv */ +// NONMATCHING - cLib_minMaxLimit regalloc int daAlink_c::procCanoeFishingWaitInit() { - // NONMATCHING + if (!commonProcInitNotSameProc(PROC_CANOE_FISHING_WAIT)) { + field_0x311a = 0; + return 0; + } + + setSingleAnimeBaseSpeed(ANM_CANOE_REEL, 0.0f, 3.0f); + setUpperAnimeBaseSpeed(0x5D, 0.0f, -1.0f); + + f32 temp_f31 = (1.0f - ((mBodyAngle.y + 0x4000) / 32768.0f)) * mUnderFrameCtrl[0].getEnd(); + mUnderFrameCtrl[0].setFrame(temp_f31); + getNowAnmPackUnder(UNDER_0)->setFrame(temp_f31); + mUpperFrameCtrl[2].setFrame(temp_f31); + getNowAnmPackUpper(UPPER_2)->setFrame(temp_f31); + + mItemVar0.field_0x3018 = 1; + setSyncCanoePos(); + + mProcVar2.field_0x300c = 0; + mProcVar3.field_0x300e.x = 0; + mProcVar0.field_0x3008 = 0; + mProcVar3.field_0x300e.x = cLib_minMaxLimit((s16)(field_0x311a - shape_angle.y), -0x3800, 0x3800); + field_0x311a = 0; + return 1; } /* 800F659C-800F67C0 0F0EDC 0224+00 1/0 0/0 0/0 .text procCanoeFishingWait__9daAlink_cFv */ int daAlink_c::procCanoeFishingWait() { - // NONMATCHING + if (canoeCommon()) { + return 1; + } + + if (checkFisingRodLure() && mItemAcKeep.getActor() == NULL) { + return 1; + } + + daPy_frameCtrl_c* temp_r29 = &mUpperFrameCtrl[2]; + daPy_frameCtrl_c* temp_r28 = &mUnderFrameCtrl[0]; + + if (mProcVar2.field_0x300c != 0) { + if (checkNoResetFlg1(FLG1_UNK_8000)) { + mProcVar2.field_0x300c = 0; + setUpperAnimeBase(0x68); + } + } else if (checkExchangeRodAnime()) { + if (checkAnmEnd(temp_r29)) { + procCanoeFishingReelInit(); + } else if (temp_r29->getFrame() >= 8.0f) { + mItemVar0.field_0x3018 = 0; + } + } else if (!checkNextActionCanoe() && checkCanoeFishingWaitAnime()) { + if (mProcVar0.field_0x3008 == 0) { + if (daPy_addCalcShort(&mBodyAngle.y, mProcVar3.field_0x300e.x, 2, 0x800, 0x200) == 0) { + mProcVar0.field_0x3008 = 1; + } + } else if (checkInputOnR() && ((mStickAngle > 0x2000 && mStickAngle < 0x6000) || (mStickAngle < -0x2000 && mStickAngle > -0x6000))) { + s16 var_r27; + if (mStickAngle > 0x2000 && mStickAngle < 0x6000) { + var_r27 = 0x3800; + } else { + var_r27 = -0x3800; + } + + daPy_addCalcShort(&mBodyAngle.y, var_r27, 5, field_0x33a8 * 1024.0f, 1); + } + + f32 temp_f31 = (1.0f - ((mBodyAngle.y + 0x4000) / 32768.0f)) * temp_r28->getEnd(); + temp_r28->setFrame(temp_f31); + temp_r29->setFrame(temp_f31); + } + return 1; } /* 800F67C0-800F6874 0F1100 00B4+00 1/1 0/0 0/0 .text procCanoeFishingReelInit__9daAlink_cFv */ int daAlink_c::procCanoeFishingReelInit() { - // NONMATCHING + commonProcInit(PROC_CANOE_FISHING_REEL); + setDoubleAnime(0.0f, 0.0f, 0.0f, ANM_REEL, ANM_REEL_LEFT_RIGHT, 2, 5.0f); + mUnderFrameCtrl[1].setFrame(0.5f * mUnderFrameCtrl[1].getEnd()); + setUnderAnime(0x25B, UNDER_2, 1.0f, 0.0f, -1, -1.0f); + setArmReelAnime(); + setSyncCanoePos(); + return 1; } /* 800F6874-800F69D4 0F11B4 0160+00 1/0 0/0 0/0 .text procCanoeFishingReel__9daAlink_cFv */ +// NONMATCHING - cLib_minMaxLimit regalloc int daAlink_c::procCanoeFishingReel() { - // NONMATCHING + if (canoeCommon()) { + mItemVar0.field_0x3018 = 1; + return 1; + } + + setFishGetFace(); + + if (checkEndResetFlg0(ERFLG0_UNK_40000)) { + procCanoeFishingGetInit(); + } else if (checkEndResetFlg0(ERFLG0_UNK_20000)) { + resetUpperAnime(UPPER_2, -1.0f); + procCanoeFishingWaitInit(); + } else if (checkEndResetFlg0(ERFLG0_UNK_10000)) { + setUpperAnimeBase(0x17C); + } else if (checkUpperAnime(0x17C)) { + if (mUpperFrameCtrl[2].checkAnmEnd()) { + setArmReelAnime(); + field_0x2060->initOldFrameMorf(3.0f, field_0x30a8, field_0x30aa); + } + } else { + if (((dmg_rod_class*)mItemAcKeep.getActor())->checkReelSpin()) { + onResetFlg0(RFLG0_UNK_80000); + } + + setFishingWaitAction(); + + fopAc_ac_c* temp_r3 = mItemAcKeep.getActor(); + if (temp_r3 != NULL) { + daPy_addCalcShort(&mBodyAngle.y, cLib_minMaxLimit((cLib_targetAngleY(&field_0x3834, &temp_r3->eyePos) - shape_angle.y), -0x3800, 0x3800), 5, 0x400, 1); + } + } + + return 1; } /* 800F69D4-800F6A70 0F1314 009C+00 1/1 0/0 0/0 .text procCanoeFishingGetInit__9daAlink_cFv */ int daAlink_c::procCanoeFishingGetInit() { - // NONMATCHING + commonProcInit(PROC_CANOE_FISHING_GET); + + daAlink_ANM var_r30; + if (mBodyAngle.y >= 0) { + var_r30 = ANM_CANOE_FISH_LEFT; + field_0x3478 = 14.0f; + field_0x347c = 30.0f; + mProcVar3.field_0x300e.x = 0; + } else { + var_r30 = ANM_CANOE_FISH_RIGHT; + field_0x3478 = 24.0f; + field_0x347c = 45.0f; + mProcVar3.field_0x300e.x = 1; + } + + setSyncCanoePos(); + setSingleAnimeBaseMorf(var_r30, 5.0f); + return 1; } /* 800F6A70-800F6BEC 0F13B0 017C+00 1/0 0/0 0/0 .text procCanoeFishingGet__9daAlink_cFv */ int daAlink_c::procCanoeFishingGet() { - // NONMATCHING + daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0]; + + if (canoeCommon()) { + mItemVar0.field_0x3018 = 1; + return 1; + } + + setFishGetFace(); + + if (checkUnderMove0BckNoArc(ANM_CANOE_RELEASE)) { + if (checkAnmEnd(temp_r30)) { + procCanoeFishingWaitInit(); + } else if (temp_r30->getFrame() >= 65.0f) { + mItemVar0.field_0x3018 = 1; + field_0x2f92 = 4; + field_0x2f93 = 5; + } else if (temp_r30->getFrame() >= 29.0f) { + field_0x2f93 = 0xFE; + } + } else if (checkAnmEnd(temp_r30)) { + if (checkEndResetFlg0(ERFLG0_UNK_4000000)) { + setSingleAnimeBaseMorf(ANM_CANOE_RELEASE, 3.0f); + field_0x2fc8 = 0; + offModeFlg(0x100); + } else if (checkEndResetFlg2(ERFLG2_UNK_1)) { + field_0x2fc8 = 0; + procCanoeFishingWaitInit(); + } + } else if (temp_r30->checkPass(field_0x3478)) { + field_0x2f93 = 5; + } else if (temp_r30->checkPass(field_0x347c)) { + onModeFlg(0x100); + } + + return 1; } /* 800F6BEC-800F6C30 0F152C 0044+00 1/1 0/0 0/0 .text procCanoeSubjectivityInit__9daAlink_cFv */ int daAlink_c::procCanoeSubjectivityInit() { - // NONMATCHING + commonProcInit(PROC_CANOE_SUBJECTIVITY); + setSyncCanoePos(); + setSubjectMode(); + return 1; } /* 800F6C30-800F6D10 0F1570 00E0+00 1/0 0/0 0/0 .text procCanoeSubjectivity__9daAlink_cFv */ int daAlink_c::procCanoeSubjectivity() { - // NONMATCHING + onResetFlg0(RFLG0_UNK_4000000); + + s16 temp_r30 = shape_angle.y; + s16 temp_r29 = current.angle.y; + int temp_r28 = field_0x3190; + + if (canoeCommon()) { + return 1; + } + + shape_angle.y = temp_r30; + + if (checkSubjectEnd(1)) { + procCanoeWaitInit(0); + } else if (checkNextActionFromButton()) { + if (checkUpperReadyThrowAnime()) { + field_0x3190 = temp_r28; + mBodyAngle.y = field_0x3190; + field_0x310a = mBodyAngle.x; + field_0x310c = shape_angle.y + field_0x3190; + } + return 1; + } else { + setRideSubjectAngle(temp_r29); + } + + return 1; } /* 800F6D10-800F6D64 0F1650 0054+00 1/1 0/0 0/0 .text procCanoeBowSubjectInit__9daAlink_cFv */ int daAlink_c::procCanoeBowSubjectInit() { - // NONMATCHING + if (!commonProcInitNotSameProc(PROC_CANOE_BOW_SUBJECT)) { + return 0; + } + + setSyncCanoePos(); + setBowOrSlingStatus(); + return 1; } /* 800F6D64-800F6DF0 0F16A4 008C+00 1/0 0/0 0/0 .text procCanoeBowSubject__9daAlink_cFv */ int daAlink_c::procCanoeBowSubject() { - // NONMATCHING + setDoStatus(0x12); + + s16 temp_r30 = shape_angle.y; + s16 temp_r29 = current.angle.y; + + if (canoeCommon()) { + return 1; + } + + shape_angle.y = temp_r30; + + if (!checkNextActionCanoe() && setRideSubjectAngle(temp_r29)) { + setBowSight(); + } + + return 1; } /* 800F6DF0-800F6E44 0F1730 0054+00 1/1 0/0 0/0 .text procCanoeBowMoveInit__9daAlink_cFv */ int daAlink_c::procCanoeBowMoveInit() { - // NONMATCHING + if (!commonProcInitNotSameProc(PROC_CANOE_BOW_MOVE)) { + return 0; + } + + setSyncCanoePos(); + setBowOrSlingStatus(); + return 1; } /* 800F6E44-800F6EB0 0F1784 006C+00 1/0 0/0 0/0 .text procCanoeBowMove__9daAlink_cFv */ int daAlink_c::procCanoeBowMove() { - // NONMATCHING + setDoStatus(0x12); + + if (canoeCommon()) { + return 1; + } + + cancelBowMove(); + + if (!checkNextActionCanoe()) { + setBodyAngleRideReadyAnime(); + } + + return 1; } /* 800F6EB0-800F6EFC 0F17F0 004C+00 2/2 0/0 0/0 .text procCanoeGrabMoveInit__9daAlink_cFv */ int daAlink_c::procCanoeGrabMoveInit() { - // NONMATCHING + if (!commonProcInitNotSameProc(PROC_CANOE_GRAB_MOVE)) { + return 0; + } + + setSyncCanoePos(); + return 1; } /* 800F6EFC-800F6FA4 0F183C 00A8+00 1/0 0/0 0/0 .text procCanoeGrabMove__9daAlink_cFv */ int daAlink_c::procCanoeGrabMove() { - // NONMATCHING + if (canoeCommon()) { + return 1; + } + + if (mGrabItemAcKeep.getActor() == NULL && checkGrabAnime()) { + resetUpperAnime(UPPER_2, 3.0f); + } + + if (checkGrabThrowAnime()) { + if (checkUpperGrabItemThrow(3.0f)) { + procCanoeWaitInit(0); + } + } else { + checkNextActionCanoe(); + } + + return 1; } /* 800F6FA4-800F7010 0F18E4 006C+00 1/1 0/0 0/0 .text procCanoeBoomerangSubjectInit__9daAlink_cFv */ int daAlink_c::procCanoeBoomerangSubjectInit() { - // NONMATCHING + if (!commonProcInitNotSameProc(PROC_CANOE_BOOMERANG_SUBJECT)) { + return 0; + } + + setSyncCanoePos(); + initBoomerangUpperAnimeSpeed(1); + dComIfGp_setPlayerStatus0(0, 0x80000); + return 1; } /* 800F7010-800F70F0 0F1950 00E0+00 1/0 0/0 0/0 .text procCanoeBoomerangSubject__9daAlink_cFv */ int daAlink_c::procCanoeBoomerangSubject() { - // NONMATCHING + if (!checkItemActorPointer()) { + return 1; + } + + if (checkBoomerangReadyAnime()) { + setDoStatus(0x12); + } + + s16 temp_r30 = shape_angle.y; + s16 temp_r29 = current.angle.y; + + if (canoeCommon()) { + return 1; + } + + shape_angle.y = temp_r30; + + if (!checkNextActionCanoe()) { + if (setRideSubjectAngle(temp_r29)) { + setBoomerangSight(); + } + } else { + mSight.offDrawFlg(); + } + + return 1; } /* 800F70F0-800F715C 0F1A30 006C+00 1/1 0/0 0/0 .text procCanoeBoomerangMoveInit__9daAlink_cFv */ int daAlink_c::procCanoeBoomerangMoveInit() { - // NONMATCHING + if (!commonProcInitNotSameProc(PROC_CANOE_BOOMERANG_MOVE)) { + return 0; + } + + setSyncCanoePos(); + initBoomerangUpperAnimeSpeed(0); + dComIfGp_setPlayerStatus0(0, 0x80000); + return 1; } /* 800F715C-800F7208 0F1A9C 00AC+00 1/0 0/0 0/0 .text procCanoeBoomerangMove__9daAlink_cFv */ int daAlink_c::procCanoeBoomerangMove() { - // NONMATCHING + if (!checkItemActorPointer()) { + return 1; + } + + if (checkBoomerangReadyAnime()) { + setDoStatus(0x12); + } + + if (canoeCommon()) { + return 1; + } + + if (!checkNextActionCanoe()) { + setBodyAngleRideReadyAnime(); + } + + return 1; } /* 800F7208-800F7274 0F1B48 006C+00 1/1 0/0 0/0 .text procCanoeHookshotSubjectInit__9daAlink_cFv */ int daAlink_c::procCanoeHookshotSubjectInit() { - // NONMATCHING + if (!commonProcInitNotSameProc(PROC_CANOE_HOOKSHOT_SUBJECT)) { + return 0; + } + + setSyncCanoePos(); + initHookshotUpperAnimeSpeed(1); + dComIfGp_setPlayerStatus0(0, 0x4000); + return 1; } /* 800F7274-800F731C 0F1BB4 00A8+00 1/0 0/0 0/0 .text procCanoeHookshotSubject__9daAlink_cFv */ int daAlink_c::procCanoeHookshotSubject() { - // NONMATCHING + if (checkHookshotWait()) { + setDoStatus(0x12); + } + + s16 temp_r30 = shape_angle.y; + s16 temp_r29 = current.angle.y; + + if (canoeCommon()) { + return 1; + } + + shape_angle.y = temp_r30; + + if (!checkNextActionCanoe()) { + if (setRideSubjectAngle(temp_r29)) { + setHookshotSight(); + } + } else { + mSight.offDrawFlg(); + } + + return 1; } /* 800F731C-800F7388 0F1C5C 006C+00 1/1 0/0 0/0 .text procCanoeHookshotMoveInit__9daAlink_cFv */ int daAlink_c::procCanoeHookshotMoveInit() { - // NONMATCHING + if (!commonProcInitNotSameProc(PROC_CANOE_HOOKSHOT_MOVE)) { + return 0; + } + + setSyncCanoePos(); + initHookshotUpperAnimeSpeed(0); + dComIfGp_setPlayerStatus0(0, 0x4000); + return 1; } /* 800F7388-800F7404 0F1CC8 007C+00 1/0 0/0 0/0 .text procCanoeHookshotMove__9daAlink_cFv */ int daAlink_c::procCanoeHookshotMove() { - // NONMATCHING + cancelHookshotMove(); + + if (checkHookshotWait()) { + setDoStatus(0x12); + } + + if (canoeCommon()) { + return 1; + } + + if (!checkNextActionCanoe()) { + setBodyAngleRideReadyAnime(); + } + + return 1; } /* 800F7404-800F7550 0F1D44 014C+00 1/1 0/0 0/0 .text procCanoeBottleDrinkInit__9daAlink_cFUs */ int daAlink_c::procCanoeBottleDrinkInit(u16 param_0) { - // NONMATCHING + if (!dComIfGp_event_compulsory(this, NULL, 0xFFFF)) { + return 0; + } + + mDemo.setSpecialDemoType(); + commonProcInit(PROC_CANOE_BOTTLE_DRINK); + setSyncCanoePos(); + + daCanoe_c* temp_r3 = (daCanoe_c*)mRideAcKeep.getActor(); + temp_r3->speedF = 0.0f; + temp_r3->setAimSpeed(0.0f); + temp_r3->setAimAngle(shape_angle.y); + + 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; } /* 800F7550-800F75BC 0F1E90 006C+00 1/0 0/0 0/0 .text procCanoeBottleDrink__9daAlink_cFv */ int daAlink_c::procCanoeBottleDrink() { - // NONMATCHING + if (canoeCommon()) { + resetUpperAnime(UPPER_2, 3.0f); + returnKeepItemData(); + resetSpecialEvent(); + return 1; + } + + commonBottleDrink(1); + return 1; } /* 800F75BC-800F7684 0F1EFC 00C8+00 1/1 0/0 0/0 .text procCanoeKandelaarPourInit__9daAlink_cFv */ int daAlink_c::procCanoeKandelaarPourInit() { - // NONMATCHING + if (!dComIfGp_event_compulsory(this, NULL, 0xFBFF)) { + return 0; + } + + mDemo.setSpecialDemoType(); + commonProcInit(PROC_CANOE_KANDELAAR_POUR); + setSyncCanoePos(); + + daCanoe_c* canoe = (daCanoe_c*)mRideAcKeep.getActor(); + canoe->speedF = 0.0f; + canoe->setAimSpeed(0.0f); + canoe->setAimAngle(shape_angle.y); + + setUpperAnimeParam(getMainBckData(ANM_OIL_BOTTLE_POUR_START)->m_upperID, UPPER_2, &daAlinkHIO_kandelaar_c0::m.mBeginUnkAnm); + commonKandelaarPourInit(); + return 1; } /* 800F7684-800F7708 0F1FC4 0084+00 1/0 0/0 0/0 .text procCanoeKandelaarPour__9daAlink_cFv */ int daAlink_c::procCanoeKandelaarPour() { - // NONMATCHING + if (canoeCommon()) { + resetUpperAnime(UPPER_2, 3.0f); + resetOilBottleModel(); + resetSpecialEvent(); + return 1; + } + + if (commonKandelaarPour(1)) { + setUpperAnimeBaseMorf(0x268, -1.0f); + } + + return 1; } /* 800F7708-800F7760 0F2048 0058+00 2/2 0/0 0/0 .text setGroundFishingRodActor__9daAlink_cFv */ void daAlink_c::setGroundFishingRodActor() { - // NONMATCHING + mItemAcKeep.setID(fopAcM_create(PROC_MG_ROD, 0xFFFF011D, &mLeftHandPos, -1, NULL, NULL, -1)); + initFishingRodHand(); } /* 800F7760-800F7814 0F20A0 00B4+00 1/1 0/0 0/0 .text procFishingCastInit__9daAlink_cFv */ int daAlink_c::procFishingCastInit() { - // NONMATCHING + if (!commonProcInitNotSameProc(PROC_FISHING_CAST)) { + return 1; + } + + setSingleAnimeBaseSpeed(ANM_WAIT, daAlinkHIO_move_c0::m.mWaitAnmSpeed, 3.0f); + setUpperAnimeBase(0x260); + field_0x2f96 = 0xFE; + field_0x2f97 = 8; + mNormalSpeed = 0.0f; + + mProcVar2.field_0x300c = 0; + mProcVar3.field_0x300e.x = 0; + mItemVar0.field_0x3018 = 1; + + if (checkFishingRodItem(mEquipItem)) { + onNoResetFlg2(FLG2_UNK_20000000); + } + + return 1; } /* 800F7814-800F7988 0F2154 0174+00 1/0 0/0 0/0 .text procFishingCast__9daAlink_cFv */ int daAlink_c::procFishingCast() { - // NONMATCHING + setFishGetFace(); + + if (checkEndResetFlg0(ERFLG0_UNK_4000000)) { + setFaceBasicAnime(ANM_WAIT); + field_0x2fc8 = 0; + } + + if (checkEndResetFlg0(ERFLG0_UNK_10000) && mItemMode != 0xFF) { + mItemMode = 0xFF; + dComIfGs_setBaitItem(0xFF); + + if (mEquipItem == JEWEL_WORM_ROD || mEquipItem == JEWEL_BEE_ROD) { + mEquipItem = JEWEL_ROD; + } else { + mEquipItem = FISHING_ROD_1; + } + } + + if (!checkNoResetFlg2(FLG2_UNK_20000000)) { + resetUpperAnime(UPPER_2, -1.0f); + onEndResetFlg0(ERFLG0_UNK_1000); + return checkWaitAction(); + } + + if (checkInputOnR()) { + cLib_addCalcAngleS(&shape_angle.y, field_0x2fe2, daAlinkHIO_move_c0::m.mTurnAngleRate, daAlinkHIO_move_c0::m.mMaxTurnAngle, daAlinkHIO_move_c0::m.mMinTurnAngle); + current.angle.y = shape_angle.y; + } + + if (mProcVar3.field_0x300e.x != 0) { + mUpperFrameCtrl[2].setRate(0.0f); + mUpperFrameCtrl[2].setFrame(0.0f); + getNowAnmPackUpper(UPPER_2)->setFrame(0.0f); + + mUnderFrameCtrl[0].setRate(0.0f); + mUnderFrameCtrl[0].setFrame(0.0f); + getNowAnmPackUnder(UNDER_0)->setFrame(0.0f); + } else if (mUnderFrameCtrl[0].getRate() < 0.01f) { + mUnderFrameCtrl[0].setRate(daAlinkHIO_move_c0::m.mWaitAnmSpeed); + mUpperFrameCtrl[2].setRate(1.0f); + } + + return 1; } /* 800F7988-800F7AA8 0F22C8 0120+00 1/1 0/0 0/0 .text procFishingFoodInit__9daAlink_cFv */ int daAlink_c::procFishingFoodInit() { - // NONMATCHING + if (!dComIfGp_event_compulsory(this, NULL, 0xFFFF)) { + return 0; + } + + mDemo.setSpecialDemoType(); + commonProcInit(PROC_FISHING_FOOD); + setSingleAnime(ANM_BOTTLE_OPEN, 1.0f, 0.0f, 21, 3.0f); + mProcVar3.field_0x300e.x = mSelectItemId; + + if (checkFishingRodItem(mEquipItem)) { + mProcVar3.field_0x300e.y = 0; + mSelectItemId = checkItemSetButton(mEquipItem); + } else { + mProcVar3.field_0x300e.y = 1; + keepItemData(); + deleteEquipItem(0, 0); + mSelectItemId = checkItemSetButton(0x108); + mEquipItem = dComIfGp_getSelectItem(mSelectItemId); + setItemActor(); + } + + mNormalSpeed = 0.0f; + current.angle.y = shape_angle.y; + mProcVar2.field_0x300c = 0; + return 1; } /* 800F7AA8-800F7C50 0F23E8 01A8+00 1/0 0/0 0/0 .text procFishingFood__9daAlink_cFv */ int daAlink_c::procFishingFood() { - // NONMATCHING + if (mUnderFrameCtrl[0].checkAnmEnd()) { + if (mProcVar2.field_0x300c != 0) { + if (mProcVar3.field_0x300e.y != 0) { + returnKeepItemData(); + } + resetSpecialEvent(); + } else { + setSingleAnime(ANM_BOTTLE_OPEN, -1.0f, 0.0f, mUnderFrameCtrl[0].getEnd(), -1.0f); + mProcVar2.field_0x300c = 1; + + u32 temp_r3 = dComIfGp_getSelectItem(mProcVar3.field_0x300e.x); + if (temp_r3 == WORM || dComIfGp_getSelectItemNum(mProcVar3.field_0x300e.x) == 1) { + dComIfGs_setEquipBottleItemEmpty(mProcVar3.field_0x300e.x); + } else { + dComIfGp_addSelectItemNum(mProcVar3.field_0x300e.x, -1); + } + + if (mItemMode != NO_ITEM) { + dComIfGs_setEquipBottleItemIn(mProcVar3.field_0x300e.x, mItemMode); + if (mItemMode == BEE_CHILD) { + dComIfGp_setSelectItemNum(mProcVar3.field_0x300e.x, 1); + } + } + + mItemMode = temp_r3; + + BOOL temp_r28 = checkFisingRodJewl(); + if (temp_r3 == WORM) { + if (temp_r28) { + mEquipItem = JEWEL_WORM_ROD; + } else { + mEquipItem = WORM_ROD; + } + } else if (temp_r28) { + mEquipItem = JEWEL_BEE_ROD; + } else { + mEquipItem = BEE_ROD; + } + + dComIfGs_setBaitItem(temp_r3); + } + } + + return 1; } diff --git a/src/d/actor/d_a_alink_crawl.inc b/src/d/actor/d_a_alink_crawl.inc index 0902c5e019f..90e2b2f87c8 100644 --- a/src/d/actor/d_a_alink_crawl.inc +++ b/src/d/actor/d_a_alink_crawl.inc @@ -88,6 +88,7 @@ void daAlink_c::changeCrawlAutoMoveProc(cXyz* param_0) { int daAlink_c::getCrawlMoveVec(cXyz* param_0, cXyz* param_1, cXyz* param_2, int param_3, int param_4, u8* param_5) { // NONMATCHING + return 0; } /* 800F85C0-800F8700 0F2F00 0140+00 2/2 0/0 0/0 .text crawlBgCheck__9daAlink_cFP4cXyzP4cXyzi */ @@ -245,6 +246,7 @@ void daAlink_c::setCrawlAutoMoveAimPos() { /* 800F9210-800F9384 0F3B50 0174+00 2/2 0/0 0/0 .text procCrawlStartInit__9daAlink_cFv */ int daAlink_c::procCrawlStartInit() { // NONMATCHING + return 0; } /* 800F9384-800F9474 0F3CC4 00F0+00 1/0 0/0 0/0 .text procCrawlStart__9daAlink_cFv */ @@ -275,11 +277,13 @@ int daAlink_c::procCrawlStart() { /* 800F9474-800F95B8 0F3DB4 0144+00 3/3 0/0 0/0 .text procCrawlMoveInit__9daAlink_cFss */ int daAlink_c::procCrawlMoveInit(s16 param_0, s16 param_1) { // NONMATCHING + return 0; } /* 800F95B8-800F99FC 0F3EF8 0444+00 1/0 0/0 0/0 .text procCrawlMove__9daAlink_cFv */ int daAlink_c::procCrawlMove() { // NONMATCHING + return 0; } /* 800F99FC-800F9ABC 0F433C 00C0+00 1/1 0/0 0/0 .text procCrawlAutoMoveInit__9daAlink_cFiP4cXyz */ @@ -308,17 +312,20 @@ int daAlink_c::procCrawlAutoMoveInit(int param_0, cXyz* param_1) { #else int daAlink_c::procCrawlAutoMoveInit(int param_0, cXyz* param_1) { // NONMATCHING + return 0; } #endif /* 800F9ABC-800F9D7C 0F43FC 02C0+00 1/0 0/0 0/0 .text procCrawlAutoMove__9daAlink_cFv */ int daAlink_c::procCrawlAutoMove() { // NONMATCHING + return 0; } /* 800F9D7C-800F9F30 0F46BC 01B4+00 1/1 0/0 0/0 .text procCrawlEndInit__9daAlink_cFiss */ int daAlink_c::procCrawlEndInit(int param_0, s16 param_1, s16 param_2) { // NONMATCHING + return 0; } /* 800F9F30-800F9FDC 0F4870 00AC+00 1/0 0/0 0/0 .text procCrawlEnd__9daAlink_cFv */ diff --git a/src/d/actor/d_a_alink_cut.inc b/src/d/actor/d_a_alink_cut.inc index 5e0e4e7f672..ac305fa2514 100644 --- a/src/d/actor/d_a_alink_cut.inc +++ b/src/d/actor/d_a_alink_cut.inc @@ -367,6 +367,7 @@ bool daAlink_c::checkCutReverseAt(dCcD_GObjInf* param_0) { * changeCutReverseProc__9daAlink_cFQ29daAlink_c11daAlink_ANM */ BOOL daAlink_c::changeCutReverseProc(daAlink_c::daAlink_ANM param_0) { // NONMATCHING + return 0; } /* 800D1E1C-800D20B4 0CC75C 0298+00 4/4 0/0 0/0 .text setCutDash__9daAlink_cFii */ @@ -1565,6 +1566,7 @@ int daAlink_c::procCutTurnInit(int param_0, int param_1) { #else int daAlink_c::procCutTurnInit(int param_0, int param_1) { // NONMATCHING + return 0; } #endif @@ -2067,6 +2069,7 @@ int daAlink_c::procCutHeadInit() { #else int daAlink_c::procCutHeadInit() { // NONMATCHING + return 0; } #endif diff --git a/src/d/actor/d_a_alink_damage.inc b/src/d/actor/d_a_alink_damage.inc index fdf9e1160e8..ff032d15a4f 100644 --- a/src/d/actor/d_a_alink_damage.inc +++ b/src/d/actor/d_a_alink_damage.inc @@ -929,27 +929,32 @@ int daAlink_c::procDamage() { int daAlink_c::procCoLargeDamageInit(int param_0, int param_1, s16 param_2, s16 param_3, dCcD_GObjInf* param_4, int param_5) { // NONMATCHING + return 0; } /* 800D9E88-800DA180 0D47C8 02F8+00 1/0 0/0 0/0 .text procCoLargeDamage__9daAlink_cFv */ int daAlink_c::procCoLargeDamage() { // NONMATCHING + return 0; } /* 800DA180-800DA554 0D4AC0 03D4+00 2/2 0/0 0/0 .text procLargeDamageUpInit__9daAlink_cFiiss */ int daAlink_c::procLargeDamageUpInit(int param_0, int param_1, s16 param_2, s16 param_3) { // NONMATCHING + return 0; } /* 800DA554-800DA82C 0D4E94 02D8+00 1/0 0/0 0/0 .text procLargeDamageUp__9daAlink_cFv */ int daAlink_c::procLargeDamageUp() { // NONMATCHING + return 0; } /* 800DA82C-800DAC28 0D516C 03FC+00 1/1 0/0 0/0 .text procCoLargeDamageWallInit__9daAlink_cFiiss */ int daAlink_c::procCoLargeDamageWallInit(int param_0, int param_1, s16 param_2, s16 param_3) { // NONMATCHING + return 0; } /* 800DAC28-800DAC84 0D5568 005C+00 1/0 0/0 0/0 .text procCoLargeDamageWall__9daAlink_cFv @@ -1008,6 +1013,7 @@ int daAlink_c::procCoPolyDamage() { /* 800DAE10-800DB060 0D5750 0250+00 2/2 0/0 0/0 .text procLandDamageInit__9daAlink_cFi */ int daAlink_c::procLandDamageInit(int param_0) { // NONMATCHING + return 0; } /* 800DB060-800DB140 0D59A0 00E0+00 1/0 0/0 0/0 .text procLandDamage__9daAlink_cFv */ @@ -1039,11 +1045,13 @@ int daAlink_c::procLandDamage() { * procCoElecDamageInit__9daAlink_cFP10fopAc_ac_cP12dCcD_GObjInfi */ int daAlink_c::procCoElecDamageInit(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, int param_2) { // NONMATCHING + return 0; } /* 800DB418-800DB5B0 0D5D58 0198+00 1/0 0/0 0/0 .text procCoElecDamage__9daAlink_cFv */ int daAlink_c::procCoElecDamage() { // NONMATCHING + return 0; } /* 800DB5B0-800DB610 0D5EF0 0060+00 2/2 0/0 0/0 .text procStEscapeInit__9daAlink_cFv */ @@ -1076,11 +1084,13 @@ int daAlink_c::procStEscape() { /* 800DB6A4-800DB860 0D5FE4 01BC+00 1/1 0/0 0/0 .text procDkCaughtInit__9daAlink_cFUi */ int daAlink_c::procDkCaughtInit(unsigned int param_0) { // NONMATCHING + return 0; } /* 800DB860-800DBC98 0D61A0 0438+00 1/0 0/0 0/0 .text procDkCaught__9daAlink_cFv */ int daAlink_c::procDkCaught() { // NONMATCHING + return 0; } /* 800DBC98-800DBD1C 0D65D8 0084+00 2/2 0/0 0/0 .text setScreamWaitAnime__9daAlink_cFv */ diff --git a/src/d/actor/d_a_alink_demo.inc b/src/d/actor/d_a_alink_demo.inc index de1b4eff56f..da3ce9fb9b6 100644 --- a/src/d/actor/d_a_alink_demo.inc +++ b/src/d/actor/d_a_alink_demo.inc @@ -3395,6 +3395,7 @@ int daAlink_c::procZoraMoveInit() { /* 8011DB9C-8011DDD4 1184DC 0238+00 1/0 0/0 0/0 .text procZoraMove__9daAlink_cFv */ int daAlink_c::procZoraMove() { // NONMATCHING + return 0; } /* 8011DDD4-8011DED8 118714 0104+00 1/0 0/0 0/0 .text procLookAroundTurnInit__9daAlink_cFv */ @@ -3878,6 +3879,7 @@ int daAlink_c::procDungeonWarpReadyInit() { */ int daAlink_c::procDungeonWarpReady() { // NONMATCHING + return 0; } /* 8011F084-8011F0F4 1199C4 0070+00 1/0 0/0 0/0 .text procDungeonWarpInit__9daAlink_cFv @@ -4136,6 +4138,7 @@ void daAlink_c::checkWarpStart() { /* 8011FBC0-8011FD4C 11A500 018C+00 3/3 0/0 0/0 .text warpModelTexScroll__9daAlink_cFv */ int daAlink_c::warpModelTexScroll() { // NONMATCHING + return 0; } /* 8011FD4C-80120124 11A68C 03D8+00 2/2 0/0 0/0 .text procCoWarpInit__9daAlink_cFii */ diff --git a/src/d/actor/d_a_alink_grab.inc b/src/d/actor/d_a_alink_grab.inc index 91722ce61eb..ef32b931904 100644 --- a/src/d/actor/d_a_alink_grab.inc +++ b/src/d/actor/d_a_alink_grab.inc @@ -34,6 +34,7 @@ static fopAc_ac_c* daAlink_searchLightBall(fopAc_ac_c* p_actor, void* param_1) { /* 800E38EC-800E3994 0DE22C 00A8+00 1/1 0/0 0/0 .text checkGrabLineCheck__9daAlink_cFv */ BOOL daAlink_c::checkGrabLineCheck() { // NONMATCHING + return 0; } /* 800E3994-800E3A14 0DE2D4 0080+00 1/0 0/0 0/0 .text @@ -122,7 +123,9 @@ BOOL daAlink_c::checkGrabCarryActor() { } /* 800E3D1C-800E3D6C 0DE65C 0050+00 1/1 0/0 0/0 .text checkGrabSlowMoveActor__9daAlink_cFv */ -BOOL daAlink_c::checkGrabSlowMoveActor(){// NONMATCHING +BOOL daAlink_c::checkGrabSlowMoveActor() { + // NONMATCHING + return 0; } /* 800E3D6C-800E3D94 0DE6AC 0028+00 1/1 0/0 0/0 .text checkGrabHeavyActor__9daAlink_cFv @@ -241,6 +244,7 @@ BOOL daAlink_c::checkGrabNotThrow() { */ BOOL daAlink_c::checkNextActionGrab() { // NONMATCHING + return 0; } /* 800E53AC-800E53F8 0DFCEC 004C+00 2/2 0/0 0/0 .text initGrabNextMode__9daAlink_cFv */ @@ -260,6 +264,7 @@ void daAlink_c::setGrabItemThrow() { /* 800E57AC-800E5830 0E00EC 0084+00 2/2 0/0 0/0 .text checkUpperGrabItemThrow__9daAlink_cFf */ BOOL daAlink_c::checkUpperGrabItemThrow(f32 param_0) { // NONMATCHING + return 0; } /* 800E5830-800E5B6C 0E0170 033C+00 2/2 0/0 0/0 .text @@ -283,76 +288,92 @@ void daAlink_c::setGrabItemActor(fopAc_ac_c* param_0) { /* 800E5CBC-800E5EC8 0E05FC 020C+00 2/2 0/0 0/0 .text procGrabReadyInit__9daAlink_cFv */ int daAlink_c::procGrabReadyInit() { // NONMATCHING + return 0; } /* 800E5EC8-800E5FD0 0E0808 0108+00 1/0 0/0 0/0 .text procGrabReady__9daAlink_cFv */ int daAlink_c::procGrabReady() { // NONMATCHING + return 0; } /* 800E5FD0-800E6230 0E0910 0260+00 1/1 0/0 0/0 .text procGrabUpInit__9daAlink_cFv */ int daAlink_c::procGrabUpInit() { // NONMATCHING + return 0; } /* 800E6230-800E637C 0E0B70 014C+00 1/0 0/0 0/0 .text procGrabUp__9daAlink_cFv */ int daAlink_c::procGrabUp() { // NONMATCHING + return 0; } /* 800E637C-800E63F0 0E0CBC 0074+00 1/0 0/0 0/0 .text procGrabMiss__9daAlink_cFv */ int daAlink_c::procGrabMiss() { // NONMATCHING + return 0; } /* 800E63F0-800E65F8 0E0D30 0208+00 1/1 0/0 0/0 .text procGrabThrowInit__9daAlink_cFi */ int daAlink_c::procGrabThrowInit(int param_0) { // NONMATCHING + return 0; } /* 800E65F8-800E672C 0E0F38 0134+00 1/0 0/0 0/0 .text procGrabThrow__9daAlink_cFv */ int daAlink_c::procGrabThrow() { // NONMATCHING + return 0; } /* 800E672C-800E6914 0E106C 01E8+00 2/2 0/0 0/0 .text procGrabPutInit__9daAlink_cFv */ int daAlink_c::procGrabPutInit() { // NONMATCHING + return 0; } /* 800E6914-800E6A9C 0E1254 0188+00 1/0 0/0 0/0 .text procGrabPut__9daAlink_cFv */ int daAlink_c::procGrabPut() { // NONMATCHING + return 0; } /* 800E6A9C-800E6C34 0E13DC 0198+00 2/2 0/0 0/0 .text procGrabWaitInit__9daAlink_cFv */ int daAlink_c::procGrabWaitInit() { // NONMATCHING + return 0; } /* 800E6C34-800E6D6C 0E1574 0138+00 1/0 0/0 0/0 .text procGrabWait__9daAlink_cFv */ int daAlink_c::procGrabWait() { // NONMATCHING + return 0; } /* 800E6D6C-800E6E0C 0E16AC 00A0+00 2/2 0/0 0/0 .text procGrabReboundInit__9daAlink_cFi */ int daAlink_c::procGrabReboundInit(int param_0) { // NONMATCHING + return 0; } /* 800E6E0C-800E6EEC 0E174C 00E0+00 1/0 0/0 0/0 .text procGrabRebound__9daAlink_cFv */ int daAlink_c::procGrabRebound() { // NONMATCHING + return 0; } /* 800E6EEC-800E6FE0 0E182C 00F4+00 2/2 0/0 0/0 .text procGrabStandInit__9daAlink_cFv */ int daAlink_c::procGrabStandInit() { // NONMATCHING + return 0; } /* 800E6FE0-800E70C0 0E1920 00E0+00 1/0 0/0 0/0 .text procGrabStand__9daAlink_cFv */ -int daAlink_c::procGrabStand(){// NONMATCHING +int daAlink_c::procGrabStand() { + // NONMATCHING + return 0; } /* 800E70C0-800E70FC 0E1A00 003C+00 1/1 0/0 0/0 .text @@ -372,6 +393,7 @@ BOOL daAlink_c::checkInsectActorName(fopAc_ac_c* insectActor) { */ int daAlink_c::procInsectCatchInit() { // NONMATCHING + return 0; } /* 800E71D4-800E7254 0E1B14 0080+00 1/0 0/0 0/0 .text procInsectCatch__9daAlink_cFv */ @@ -394,21 +416,25 @@ int daAlink_c::procInsectCatch() { /* 800E7254-800E7460 0E1B94 020C+00 2/2 0/0 0/0 .text procPickUpInit__9daAlink_cFv */ int daAlink_c::procPickUpInit() { // NONMATCHING + return 0; } /* 800E7460-800E75EC 0E1DA0 018C+00 1/0 0/0 0/0 .text procPickUp__9daAlink_cFv */ int daAlink_c::procPickUp() { // NONMATCHING + return 0; } /* 800E75EC-800E76E0 0E1F2C 00F4+00 3/3 0/0 0/0 .text procPickPutInit__9daAlink_cFi */ int daAlink_c::procPickPutInit(int param_0) { // NONMATCHING + return 0; } /* 800E76E0-800E7894 0E2020 01B4+00 1/0 0/0 0/0 .text procPickPut__9daAlink_cFv */ int daAlink_c::procPickPut() { // NONMATCHING + return 0; } /* 800E7894-800E794C 0E21D4 00B8+00 2/2 0/0 0/0 .text checkSetChainPullAnime__9daAlink_cFs */ @@ -432,11 +458,13 @@ s16 daAlink_c::getChainStickAngleY(s16 param_0) const { /* 800E7994-800E79F8 0E22D4 0064+00 1/1 0/0 0/0 .text checkChainEmphasys__9daAlink_cFv */ u8 daAlink_c::checkChainEmphasys() { // NONMATCHING + return 0; } /* 800E79F8-800E7AEC 0E2338 00F4+00 4/4 0/0 0/0 .text searchFmChainPos__9daAlink_cFv */ BOOL daAlink_c::searchFmChainPos() { // NONMATCHING + return 0; } /* 800E7AEC-800E7BD0 0E242C 00E4+00 0/0 1/1 0/0 .text @@ -464,22 +492,26 @@ bool daAlink_c::checkChainBlockPushPull() { /* 800E7C30-800E7CC0 0E2570 0090+00 2/2 0/0 0/0 .text procFmChainUpInit__9daAlink_cFv */ int daAlink_c::procFmChainUpInit() { // NONMATCHING + return 0; } /* 800E7CC0-800E7DD8 0E2600 0118+00 1/0 0/0 0/0 .text procFmChainUp__9daAlink_cFv */ int daAlink_c::procFmChainUp() { // NONMATCHING + return 0; } /* 800E7DD8-800E7E50 0E2718 0078+00 2/1 0/0 0/0 .text procFmChainStrongPullInit__9daAlink_cFv */ int daAlink_c::procFmChainStrongPullInit() { // NONMATCHING + return 0; } /* 800E7E50-800E7ED0 0E2790 0080+00 1/0 0/0 0/0 .text procFmChainStrongPull__9daAlink_cFv */ int daAlink_c::procFmChainStrongPull() { // NONMATCHING + return 0; } /* 800E7ED0-800E7EE4 0E2810 0014+00 9/9 0/0 0/0 .text setWallGrabStatus__9daAlink_cFUcUc @@ -594,32 +626,38 @@ void daAlink_c::getPushPullAnimeSpeed() { /* 800E8428-800E857C 0E2D68 0154+00 4/4 0/0 0/0 .text procCoPushPullWaitInit__9daAlink_cFi */ int daAlink_c::procCoPushPullWaitInit(int param_0) { // NONMATCHING + return 0; } /* 800E857C-800E875C 0E2EBC 01E0+00 1/0 0/0 0/0 .text procCoPushPullWait__9daAlink_cFv */ int daAlink_c::procCoPushPullWait() { // NONMATCHING + return 0; } /* 800E875C-800E89F0 0E309C 0294+00 2/2 0/0 0/0 .text procCoPushMoveInit__9daAlink_cFii */ int daAlink_c::procCoPushMoveInit(int param_0, int param_1) { // NONMATCHING + return 0; } /* 800E89F0-800E8D1C 0E3330 032C+00 1/0 0/0 0/0 .text procCoPushMove__9daAlink_cFv */ int daAlink_c::procCoPushMove() { // NONMATCHING + return 0; } /* 800E8D1C-800E8F44 0E365C 0228+00 2/2 0/0 0/0 .text procPullMoveInit__9daAlink_cFi */ int daAlink_c::procPullMoveInit(int param_0) { // NONMATCHING + return 0; } /* 800E8F44-800E91B0 0E3884 026C+00 1/0 0/0 0/0 .text procPullMove__9daAlink_cFv */ int daAlink_c::procPullMove() { // NONMATCHING + return 0; } /* 800E91B0-800E91C4 0E3AF0 0014+00 1/1 0/0 0/0 .text daAlink_searchGoat__FP10fopAc_ac_cPv */ @@ -678,17 +716,20 @@ int daAlink_c::procGoatMoveInit() { /* 800E9434-800E9894 0E3D74 0460+00 1/0 0/0 0/0 .text procGoatMove__9daAlink_cFv */ int daAlink_c::procGoatMove() { // NONMATCHING + return 0; } /* 800E9894-800E9BD0 0E41D4 033C+00 3/3 0/0 0/0 .text procGoatCatchInit__9daAlink_cFP10fopAc_ac_cf */ int daAlink_c::procGoatCatchInit(fopAc_ac_c* param_0, f32 param_1) { // NONMATCHING + return 0; } /* 800E9BD0-800EA2A8 0E4510 06D8+00 1/0 0/0 0/0 .text procGoatCatch__9daAlink_cFv */ int daAlink_c::procGoatCatch() { // NONMATCHING + return 0; } /* 800EA2A8-800EA3AC 0E4BE8 0104+00 2/2 0/0 0/0 .text procGoatStrokeInit__9daAlink_cFv */ @@ -755,4 +796,5 @@ int daAlink_c::procGoronMoveInit() { /* 800EA4CC-800EA844 0E4E0C 0378+00 1/0 0/0 0/0 .text procGoronMove__9daAlink_cFv */ int daAlink_c::procGoronMove() { // NONMATCHING + return 0; } diff --git a/src/d/actor/d_a_alink_guard.inc b/src/d/actor/d_a_alink_guard.inc index d9ad458a9be..1808575ac3c 100644 --- a/src/d/actor/d_a_alink_guard.inc +++ b/src/d/actor/d_a_alink_guard.inc @@ -53,6 +53,7 @@ BOOL daAlink_c::checkShieldAttackEmphasys() { BOOL daAlink_c::checkGuardActionChange() { // NONMATCHING + return 0; } /* 800DC79C-800DC8C4 0D70DC 0128+00 3/3 0/0 0/0 .text stickArrowIncrement__9daAlink_cFi @@ -273,40 +274,48 @@ void daAlink_c::setSmallGuard(dCcD_GObjInf* param_0) { * procGuardSlipInit__9daAlink_cFiP12dCcD_GObjInf */ int daAlink_c::procGuardSlipInit(int param_0, dCcD_GObjInf* param_1) { // NONMATCHING + return 0; } /* 800DD894-800DDA10 0D81D4 017C+00 1/0 0/0 0/0 .text procGuardSlip__9daAlink_cFv */ int daAlink_c::procGuardSlip() { // NONMATCHING + return 0; } /* 800DDA10-800DDBA8 0D8350 0198+00 2/1 0/0 0/0 .text procGuardAttackInit__9daAlink_cFv */ int daAlink_c::procGuardAttackInit() { // NONMATCHING + return 0; } /* 800DDBA8-800DDE58 0D84E8 02B0+00 1/0 0/0 0/0 .text procGuardAttack__9daAlink_cFv */ int daAlink_c::procGuardAttack() { // NONMATCHING + return 0; } /* 800DDE58-800DDF2C 0D8798 00D4+00 2/2 0/0 0/0 .text procGuardBreakInit__9daAlink_cFv */ int daAlink_c::procGuardBreakInit() { // NONMATCHING + return 0; } /* 800DDF2C-800DE008 0D886C 00DC+00 1/0 0/0 0/0 .text procGuardBreak__9daAlink_cFv */ int daAlink_c::procGuardBreak() { // NONMATCHING + return 0; } /* 800DE008-800DE380 0D8948 0378+00 2/2 0/0 0/0 .text procTurnMoveInit__9daAlink_cFi */ int daAlink_c::procTurnMoveInit(int param_0) { // NONMATCHING + return 0; } /* 800DE380-800DE64C 0D8CC0 02CC+00 1/0 0/0 0/0 .text procTurnMove__9daAlink_cFv */ int daAlink_c::procTurnMove() { // NONMATCHING + return 0; } diff --git a/src/d/actor/d_a_alink_hang.inc b/src/d/actor/d_a_alink_hang.inc index af23cd5ae18..16a17798978 100644 --- a/src/d/actor/d_a_alink_hang.inc +++ b/src/d/actor/d_a_alink_hang.inc @@ -2772,6 +2772,7 @@ int daAlink_c::procRoofHangStart() { */ int daAlink_c::procRoofHangWaitInit(int param_0) { // NONMATCHING + return 0; } /* 80100D38-80100DA4 0FB678 006C+00 1/0 0/0 0/0 .text procRoofHangWait__9daAlink_cFv */ diff --git a/src/d/actor/d_a_alink_hook.inc b/src/d/actor/d_a_alink_hook.inc index b01f029f310..000ec63031d 100644 --- a/src/d/actor/d_a_alink_hook.inc +++ b/src/d/actor/d_a_alink_hook.inc @@ -573,6 +573,7 @@ void daAlink_c::setHookshotReturnEnd() { */ int daAlink_c::setHookshotHangMoveBGCollect() { // NONMATCHING + return 0; } /* 80109AAC-80109BDC 1043EC 0130+00 2/2 0/0 0/0 .text setHookshotTopPosFly__9daAlink_cFv diff --git a/src/d/actor/d_a_alink_horse.inc b/src/d/actor/d_a_alink_horse.inc index accf56d2cfd..03809d60780 100644 --- a/src/d/actor/d_a_alink_horse.inc +++ b/src/d/actor/d_a_alink_horse.inc @@ -132,6 +132,7 @@ int daAlink_c::checkReinRideBgCheck() { #else int daAlink_c::checkReinRideBgCheck() { // NONMATCHING + return 0; } #endif @@ -742,6 +743,7 @@ int daAlink_c::setSyncBoar(int param_0) { #else int daAlink_c::setSyncBoar(int param_0) { // NONMATCHING + return 0; } #endif @@ -832,6 +834,7 @@ void daAlink_c::setHorseSwordUp(int param_0) { */ int daAlink_c::setRideSubjectAngle(s16 param_0) { // NONMATCHING + return 0; } /* 800EF050-800EF0E8 0E9990 0098+00 7/7 0/0 0/0 .text setBodyAngleRideReadyAnime__9daAlink_cFv */ @@ -1003,6 +1006,7 @@ BOOL daAlink_c::checkHorseGetOff() { #else BOOL daAlink_c::checkHorseGetOff() { // NONMATCHING + return 0; } #endif @@ -1032,33 +1036,39 @@ 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; } /* 800EFDC4-800F038C 0EA704 05C8+00 1/0 0/0 0/0 .text procHorseRide__9daAlink_cFv */ int daAlink_c::procHorseRide() { // NONMATCHING + return 0; } /* 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; } /* 800F0620-800F0980 0EAF60 0360+00 1/0 0/0 0/0 .text procHorseGetOff__9daAlink_cFv */ int daAlink_c::procHorseGetOff() { // NONMATCHING + return 0; } /* 800F0980-800F0AA4 0EB2C0 0124+00 16/16 0/0 0/0 .text procHorseWaitInit__9daAlink_cFv */ int daAlink_c::procHorseWaitInit() { // NONMATCHING + return 0; } /* 800F0AA4-800F0C6C 0EB3E4 01C8+00 1/0 0/0 0/0 .text procHorseWait__9daAlink_cFv */ int daAlink_c::procHorseWait() { // NONMATCHING + return 0; } /* 800F0C6C-800F0CE4 0EB5AC 0078+00 1/1 0/0 0/0 .text procHorseTurnInit__9daAlink_cFv */ @@ -1078,6 +1088,7 @@ 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; } /* 800F1060-800F10F8 0EB9A0 0098+00 1/1 0/0 0/0 .text procHorseJumpInit__9daAlink_cFv */ @@ -1190,11 +1201,13 @@ 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; } /* 800F1688-800F1894 0EBFC8 020C+00 1/0 0/0 0/0 .text procHorseCut__9daAlink_cFv */ int daAlink_c::procHorseCut() { // NONMATCHING + return 0; } /* 800F1894-800F194C 0EC1D4 00B8+00 3/3 0/0 0/0 .text procHorseCutChargeReadyInit__9daAlink_cFv */ @@ -1218,6 +1231,7 @@ 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; } /* 800F1AAC-800F1BA4 0EC3EC 00F8+00 3/3 0/0 0/0 .text procHorseCutTurnInit__9daAlink_cFv @@ -1245,17 +1259,20 @@ int daAlink_c::procHorseCutTurnInit() { /* 800F1BA4-800F1D18 0EC4E4 0174+00 1/0 0/0 0/0 .text procHorseCutTurn__9daAlink_cFv */ int daAlink_c::procHorseCutTurn() { // NONMATCHING + return 0; } /* 800F1D18-800F2028 0EC658 0310+00 2/2 0/0 0/0 .text * procHorseDamageInit__9daAlink_cFP12dCcD_GObjInf */ int daAlink_c::procHorseDamageInit(dCcD_GObjInf* param_0) { // NONMATCHING + return 0; } /* 800F2028-800F2150 0EC968 0128+00 1/0 0/0 0/0 .text procHorseDamage__9daAlink_cFv */ int daAlink_c::procHorseDamage() { // NONMATCHING + return 0; } /* 800F2150-800F21B4 0ECA90 0064+00 1/1 0/0 0/0 .text procHorseBowSubjectInit__9daAlink_cFv */ @@ -1537,6 +1554,7 @@ 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; } /* 800F2AD8-800F2B4C 0ED418 0074+00 1/0 0/0 0/0 .text procHorseBottleDrink__9daAlink_cFv @@ -1559,11 +1577,13 @@ 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; } /* 800F2C78-800F2D84 0ED5B8 010C+00 1/0 0/0 0/0 .text procHorseKandelaarPour__9daAlink_cFv */ int daAlink_c::procHorseKandelaarPour() { // NONMATCHING + return 0; } /* 800F2D84-800F2DE4 0ED6C4 0060+00 2/2 0/0 0/0 .text procHorseComebackInit__9daAlink_cFv @@ -1626,17 +1646,20 @@ int daAlink_c::procHorseRunInit() { /* 800F2F98-800F3430 0ED8D8 0498+00 1/0 0/0 0/0 .text procHorseRun__9daAlink_cFv */ int daAlink_c::procHorseRun() { // NONMATCHING + return 0; } /* 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; } /* 800F3580-800F36E4 0EDEC0 0164+00 1/0 0/0 0/0 .text procHorseHang__9daAlink_cFv */ int daAlink_c::procHorseHang() { // NONMATCHING + return 0; } /* 800F36E4-800F3754 0EE024 0070+00 1/0 0/0 0/0 .text procHorseGetKeyInit__9daAlink_cFv @@ -1722,4 +1745,5 @@ int daAlink_c::procBoarRunInit() { /* 800F3998-800F3BB0 0EE2D8 0218+00 1/0 0/0 0/0 .text procBoarRun__9daAlink_cFv */ int daAlink_c::procBoarRun() { // NONMATCHING + return 0; } diff --git a/src/d/actor/d_a_alink_iceleaf.inc b/src/d/actor/d_a_alink_iceleaf.inc index f414b043ec3..96e3f968898 100644 --- a/src/d/actor/d_a_alink_iceleaf.inc +++ b/src/d/actor/d_a_alink_iceleaf.inc @@ -3,6 +3,10 @@ * Player Ice Leaf surfing handling */ +#include "d/actor/d_a_alink.h" +#include "d/actor/d_a_obj_iceleaf.h" +#include "SSystem/SComponent/c_math.h" + /* 80105A84-80105A98 1003C4 0014+00 1/1 0/0 0/0 .text daAlink_searchIceLeaf__FP10fopAc_ac_cPv */ static fopAc_ac_c* daAlink_searchIceLeaf(fopAc_ac_c* i_actor, void* param_1) { if (fopAcM_GetName(i_actor) == PROC_Obj_IceLeaf) { @@ -31,7 +35,202 @@ bool daAlink_c::checkBoardRestart() { /* 80105B58-80106534 100498 09DC+00 7/7 0/0 0/0 .text boardCommon__9daAlink_cFi */ int daAlink_c::boardCommon(int param_0) { - // NONMATCHING + int sp18 = abs(shape_angle.x); + int var_r25 = abs(shape_angle.z); + if (sp18 > var_r25) { + var_r25 = sp18; + } + + f32 sp14 = cM_ssin(var_r25); + + for (int i = 0; i < 3; i++) { + mAcchCir[i].SetWallR((mAcchCir[i].GetWallH() * sp14) + 35.0f); + } + + if (mNormalSpeed > 15.0f && mLinkAcch.ChkWallHit()) { + s16 sp8 = current.angle.y + 0x8000; + + for (int i = 0; i < 3; i++) { + if (mAcchCir[i].ChkWallHit() && cLib_distanceAngleS(sp8, mAcchCir[i].GetWallAngleY()) <= 0x2000 && mNormalSpeed > 30.0f) { + setJumpMode(); + return procCoLargeDamageInit(-4, 1, 0, 0, NULL, 0); + } + } + } + + if (!checkSnowCode() && mLinkAcch.i_ChkGroundHit() && !checkModeFlg(2)) { + setJumpMode(); + procBackJumpInit(0); + + if (mRideAcKeep.getActor() != NULL) { + ((daObjIceLeaf_c*)mRideAcKeep.getActor())->deleteActor(); + mRideAcKeep.clearData(); + } + + return 1; + } + + s16 var_r27; + if (mLinkAcch.i_ChkGroundHit() && dComIfG_Bgsp().ChkPolySafe(mLinkAcch.m_gnd)) { + cM3dGPla sp1C; + dComIfG_Bgsp().GetTriPla(mLinkAcch.m_gnd, &sp1C); + + mProcVar3.field_0x300e.x = cM_atan2s(sp1C.mNormal.absXZ(), sp1C.mNormal.y); + if (mProcVar3.field_0x300e.x == 0) { + var_r27 = shape_angle.y; + } else { + var_r27 = sp1C.mNormal.atan2sX_Z(); + } + } else { + mProcVar3.field_0x300e.x = 0; + var_r27 = shape_angle.y; + } + + if (mProcVar0.field_0x3008 != 0) { + mProcVar0.field_0x3008--; + onResetFlg1(RFLG1_UNK_40); + } + + f32 var_f30 = 0.0f; + int temp_r26 = abs(mStickAngle); + + s16 var_r24; + if (checkInputOnR() && param_0) { + var_r24 = 1024.0f * field_0x33ac * cM_ssin(mStickAngle); + + if (temp_r26 > 0x6000 && field_0x2f8c == 0xB && mProcID == PROC_BOARD_WAIT) { + f32 temp_f29 = field_0x33ac * cM_scos((0x8000 - temp_r26) * 2); + f32 var_f28 = temp_f29; + + if (var_f28 < 0.15f) { + var_f28 = 0.15f; + } + + cLib_addCalc(&mNormalSpeed, 0.0f, 0.5f, var_f28, 0.1f); + + if (mNormalSpeed > 5.0f) { + var_f30 = temp_f29; + } else { + var_f30 = (temp_f29 * mNormalSpeed) / 5.0f; + } + + if (checkZeroSpeedF() && temp_r26 > 0x7000 && mProcID == PROC_BOARD_WAIT && !checkModeFlg(2)) { + if (mProcVar3.field_0x300e.x <= 910.0f && checkUnderMove0BckNoArc(ANM_RIDE_WAIT) && mLinkAcch.i_ChkGroundHit()) { + return procBoardTurnInit(); + } + } + } else if (temp_r26 < 0x2000 && field_0x2f8c == 0xB && mProcID == PROC_BOARD_WAIT && !checkModeFlg(2) && mLinkAcch.i_ChkGroundHit() && (mProcVar3.field_0x300e.x < field_0x3122) && (checkUnderMove0BckNoArc(ANM_RIDE_WAIT) || checkUnderMove0BckNoArc(ANM_RIDE_FRONT))) { + if (mNormalSpeed <= daAlinkHIO_board_c0::m.mMaxPushSpeed) { + return procBoardRowInit(); + } + } + } else { + var_r24 = 0; + } + + u32 sp10 = Z2SE_AL_SNOBO_RIDE; + if (field_0x2f8c == 0xB) { + f32 spC = mNowAnmPackUnder[1].getRatio(); + cLib_addCalc(&spC, var_f30, 0.5f, 0.35f, 0.1f); + setDoubleAnimeBlendRatio(spC); + + if (spC > 0.8f) { + sp10 = Z2SE_AL_SNOBO_BREAK; + } + } + + if (!checkModeFlg(2)) { + seStartOnlyReverbLevel(sp10); + } + + if (mProcID == PROC_BOARD_TURN) { + mProcVar2.field_0x300c = 0; + } else { + cLib_addCalcAngleS(&mProcVar2.field_0x300c, var_r24, 0x1E, 0x800, 0x10); + + if (!checkModeFlg(2)) { + current.angle.y += mProcVar2.field_0x300c; + } + + shape_angle.y = current.angle.y; + } + + cLib_addCalcAngleS(&field_0x2fee, -var_r24 * 6, 0xA, 0x800, 0x40); + shape_angle.z = field_0x2fee >> 1; + mBodyAngle.z = shape_angle.z; + + if (mLinkAcch.i_ChkGroundHit() && dComIfG_Bgsp().ChkPolySafe(mLinkAcch.m_gnd)) { + if (checkModeFlg(2)) { + offModeFlg(2); + speed.y = 0.0f; + } else { + if (mProcVar3.field_0x300e.x > 910.0f && (mProcID != PROC_BOARD_ROW || !(mProcVar3.field_0x300e.x < 2000.0f))) { + f32 var_f25 = (f32)mProcVar3.field_0x300e.x / (f32)field_0x3122; + if (var_f25 > 1.0f) { + var_f25 = 1.0f; + } + + s16 temp_r0 = shape_angle.y - var_r27; + f32 var_f31; + if (abs(temp_r0) <= 0x4000) { + var_f31 = 0.5f + (0.5f * cM_scos(temp_r0)); + } else { + var_f31 = 1.0f - (0.5f * cM_scos(temp_r0)); + } + + var_f31 *= cM_fsin(1.570796f * var_f25); + if (var_f31 > 0.1f) { + f32 temp_f27 = (var_f31 * cM_ssin(var_r27)) + (mNormalSpeed * cM_ssin(shape_angle.y)); + f32 temp_f26 = (var_f31 * cM_scos(var_r27)) + (mNormalSpeed * cM_scos(shape_angle.y)); + + mNormalSpeed = JMAFastSqrt((temp_f27 * temp_f27) + (temp_f26 * temp_f26)); + if (mNormalSpeed > field_0x594) { + mNormalSpeed = field_0x594; + } + + if (mNormalSpeed > 0.1f) { + cLib_addCalcAngleS(&shape_angle.y, cM_atan2s(temp_f27, temp_f26), 2, 0x2000, 0x800); + current.angle.y = shape_angle.y; + } + } else { + cLib_chaseF(&mNormalSpeed, 0.0f, 0.01f); + } + } else { + cLib_chaseF(&mNormalSpeed, 0.0f, 0.01f); + } + } + + if (checkInputOnR() && param_0 && temp_r26 < 0x2800) { + if (checkUnderMove0BckNoArc(ANM_RIDE_WAIT)) { + setCommonBoardAnime(1); + } + } else { + if (checkUnderMove0BckNoArc(ANM_RIDE_FRONT)) { + setCommonBoardAnime(0); + } + + if (mNormalSpeed > (0.7f * field_0x594)) { + cLib_chaseF(&mNormalSpeed, 0.7f * field_0x594, 1.5f); + } + } + + cLib_addCalcAngleS(&shape_angle.x, field_0x2ff0, 4, 0x1000, 0x100); + + if (mNormalSpeed > 5.0f) { + field_0x2f9d = 4; + } + } else if (!checkModeFlg(2)) { + f32 var_f24 = mNormalSpeed * -cM_ssin(shape_angle.x); + if (var_f24 < 0.0f) { + var_f24 = 0.0f; + } + + return procBoardJumpInit(var_f24, 0); + } else { + cLib_addCalcAngleS(&shape_angle.x, 0, 4, 100, 10); + } + + return 0; } /* 80106534-8010658C 100E74 0058+00 6/6 0/0 0/0 .text setCommonBoardAnime__9daAlink_cFi @@ -94,12 +293,39 @@ f32 daAlink_c::getBoardRowAnmSpeed() { /* 801066EC-80106774 10102C 0088+00 3/3 0/0 0/0 .text setBoardLandAnime__9daAlink_cFv */ void daAlink_c::setBoardLandAnime() { - // NONMATCHING + setSingleAnimeParam(ANM_RIDE_JUMP_LAND, &daAlinkHIO_board_c0::m.mLandAnm); + seStartOnlyReverb(Z2SE_AL_SNOBO_LAND); + dComIfGp_getVibration().StartShock(2, 15, cXyz(0.0f, 1.0f, 0.0f)); } /* 80106774-801069D0 1010B4 025C+00 1/1 0/0 0/0 .text procBoardRideInit__9daAlink_cFv */ int daAlink_c::procBoardRideInit() { - // NONMATCHING + commonProcInit(PROC_BOARD_RIDE); + setSingleAnime(ANM_VJUMP_START, daAlinkHIO_smallJump_c0::m.mSmallJumpAnm.mSpeed, 6.0f, daAlinkHIO_smallJump_c0::m.mSmallJumpAnm.mEndFrame, daAlinkHIO_smallJump_c0::m.mSmallJumpAnm.mInterpolation); + setHeavyBoots(0); + + if (mEquipItem != 0x103) { + deleteEquipItem(1, 1); + } else { + offKandelaarModel(); + } + + voiceStart(Z2SE_AL_V_JUMP_S); + field_0x2f99 = 0xF; + + cXyz sp8 = field_0x27f4->current.pos - current.pos; + speed.y = 24.0; + shape_angle.y = sp8.atan2sX_Z(); + + mNormalSpeed = 0.020833334f * (-gravity * sp8.absXZ()); + current.angle.y = shape_angle.y; + + field_0x3588 = l_waitBaseAnime; + field_0x33b0 = field_0x3588.y; + field_0x34d4 = l_waitBaseAnime; + + field_0x280c.setData(field_0x27f4); + return 1; } /* 801069D0-80106A38 101310 0068+00 1/0 0/0 0/0 .text procBoardRide__9daAlink_cFv */ @@ -122,12 +348,129 @@ int daAlink_c::procBoardRide() { /* 80106A38-80106BCC 101378 0194+00 13/13 0/0 0/0 .text * procBoardWaitInit__9daAlink_cFP10fopAc_ac_c */ int daAlink_c::procBoardWaitInit(fopAc_ac_c* param_0) { - // NONMATCHING + if (mEquipItem != 0x103) { + deleteEquipItem(TRUE, TRUE); + } else { + offKandelaarModel(); + } + + freeGrabItem(); + + if (!checkBoardRide()) { + resetUpperAnime(UPPER_2, -1.0f); + } + + if (checkModeFlg(2) && param_0 == NULL) { + return procBoardJumpInit(0.0f, 1); + } + + BOOL temp_r28 = mProcID == PROC_BOARD_RIDE; + if (!commonProcInitNotSameProc(PROC_BOARD_WAIT)) { + return 0; + } + + current.angle.y = shape_angle.y; + + if (param_0 != NULL) { + mRideAcKeep.setData(param_0); + ((daObjIceLeaf_c*)param_0)->onRide(); + + if (temp_r28 != 0) { + f32 var_f31 = mNormalSpeed / daAlinkHIO_move_c0::m.mMaxSpeed; + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + + mNormalSpeed = daAlinkHIO_board_c0::m.mStartMinSpeed + (daAlinkHIO_board_c0::m.mStartAddSpeed * var_f31); + } else { + mNormalSpeed = 0.0f; + } + + field_0x594 = daAlinkHIO_move_c0::m.mMinWalkRate; + mProcVar2.field_0x300c = 0; + mProcVar3.field_0x300e.x = 0; + setCommonBoardAnime(0); + } + + mRideStatus = 4; + mProcVar3.field_0x300e.z = 0; + mProcVar1.field_0x300a = 0; + return 1; } /* 80106BCC-80106E88 10150C 02BC+00 1/0 0/0 0/0 .text procBoardWait__9daAlink_cFv */ int daAlink_c::procBoardWait() { - // NONMATCHING + if (boardCommon(1)) { + return 1; + } + + if (checkAnmEnd(&mUnderFrameCtrl[0]) && !checkUnderMove0BckNoArc(ANM_RIDE_CUT_TURN_CHARGE)) { + setCommonBoardAnime(0); + } + + if (!checkNextActionBoard()) { + if (mEquipItem == 0x103 && swordButton()) { + if (mProcVar1.field_0x300a == 0) { + setSingleAnimeBase(ANM_RIDE_CUT_TURN_CHARGE); + } + + mProcVar1.field_0x300a++; + + if (mProcVar1.field_0x300a == daAlinkHIO_cut_c0::m.mNormalSwingDuration) { + setSwordVoiceSe(Z2SE_AL_V_TAME); + } + + if (!checkAnmEnd(&mUnderFrameCtrl[0])) { + mProcVar1.field_0x300a = 1; + } else { + simpleAnmPlay(m_nSwordBtk); + + if (mProcVar1.field_0x300a >= 14.0f) { + mProcVar1.field_0x300a = 0x18; + } + } + } else if (mProcVar1.field_0x300a != 0) { + if (mProcVar1.field_0x300a >= 14.0f) { + return procBoardCutTurnInit(); + } + return procBoardCutInit(); + } else if (mProcVar3.field_0x300e.z == 0) { + if (!checkModeFlg(2) && mProcID != PROC_BOARD_ROW) { + setDoStatus(0xA); + + if (doButton()) { + f32 var_f31; + if (field_0x2f8c == 0xB) { + var_f31 = mNowAnmPackUnder[1].getRatio(); + } else { + var_f31 = 0.0f; + } + + setDoubleAnime(0.0f, daAlinkHIO_board_c0::m.mSitAnmSpeed, 1.0f, ANM_RIDE_CROUCH, ANM_RIDE_STOP, 0xB, daAlinkHIO_board_c0::m.mSitInterpolation); + setDoubleAnimeBlendRatio(var_f31); + mProcVar3.field_0x300e.z = 1; + } + } + } else if (mProcVar3.field_0x300e.z != 0) { + if (mNormalSpeed > 15.0f) { + setDoStatus(0x19); + } + + if (!doButton()) { + mProcVar3.field_0x300e.z = 0; + + if (mNormalSpeed > 15.0f) { + procBoardJumpInit(mNormalSpeed, 0); + } else { + f32 temp_f30 = mNowAnmPackUnder[1].getRatio(); + setCommonBoardAnime(0); + setDoubleAnimeBlendRatio(temp_f30); + } + } + } + } + + return 1; } /* 80106E88-80106F00 1017C8 0078+00 1/1 0/0 0/0 .text procBoardRowInit__9daAlink_cFv */ @@ -138,13 +481,40 @@ int daAlink_c::procBoardRowInit() { mProcVar0.field_0x3008 = 4; mProcVar3.field_0x300e.y = 1; mProcVar3.field_0x300e.z = 0; - return 1; } /* 80106F00-80107060 101840 0160+00 1/0 0/0 0/0 .text procBoardRow__9daAlink_cFv */ int daAlink_c::procBoardRow() { - // NONMATCHING + if (boardCommon(1)) { + return 1; + } + + if (mProcVar3.field_0x300e.y != 0) { + onResetFlg1(RFLG1_UNK_40); + mProcVar0.field_0x3008 = 4; + } + + if (!checkNextActionBoard()) { + daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0]; + + if (temp_r29->checkPass(0.0f)) { + if (checkInputOnR() && abs(mStickAngle) < 0x2000 && !checkModeFlg(2) && mLinkAcch.i_ChkGroundHit() && mProcVar3.field_0x300e.x < field_0x3122 && mNormalSpeed <= daAlinkHIO_board_c0::m.mMaxPushSpeed) { + mProcVar3.field_0x300e.z = 0; + } else { + setCommonBoardAnime(0); + procBoardWaitInit(NULL); + } + } else if (temp_r29->checkPass(7.0f)) { + mNormalSpeed += daAlinkHIO_board_c0::m.mPushAccel; + + if (mNormalSpeed > daAlinkHIO_board_c0::m.mMaxPushSpeed) { + mNormalSpeed = daAlinkHIO_board_c0::m.mMaxPushSpeed; + } + } + } + + return 1; } /* 80107060-801070DC 1019A0 007C+00 1/1 0/0 0/0 .text procBoardTurnInit__9daAlink_cFv */ @@ -152,20 +522,46 @@ int daAlink_c::procBoardTurnInit() { commonProcInit(PROC_BOARD_TURN); setSingleAnime(ANM_RIDE_JUMP, 0.0f, 1.0f, daAlinkHIO_board_c0::m.mAirborneAnm.mEndFrame, 3.0f); mNormalSpeed = 0.0f; + mProcVar3.field_0x300e.y = shape_angle.y + 0x8000; mProcVar3.field_0x300e.z = 0; mProcVar1.field_0x300a = 0; - return 1; } /* 801070DC-80107218 101A1C 013C+00 1/0 0/0 0/0 .text procBoardTurn__9daAlink_cFv */ int daAlink_c::procBoardTurn() { - // NONMATCHING + if (boardCommon(0)) { + return 1; + } + + if (mProcVar3.field_0x300e.z == 0) { + if (field_0x2060->getOldFrameRate() < 0.01f) { + mProcVar3.field_0x300e.z = 1; + setSingleAnime(ANM_RIDE_JUMP, 1.5f, 1.5f + mUnderFrameCtrl[0].getStart(), daAlinkHIO_board_c0::m.mAirborneAnm.mEndFrame, -1.0f); + } + } else if (mProcVar1.field_0x300a == 0) { + if (mUnderFrameCtrl[0].checkPass(6.0f)) { + speed.y = 20.0f; + setJumpMode(); + mProcVar1.field_0x300a = 1; + } + } else { + cLib_addCalcAngleS(&shape_angle.y, mProcVar3.field_0x300e.y, 5, 0x1B58, 0x7D0); + current.angle.y = shape_angle.y; + + if (!checkModeFlg(2)) { + setBoardLandAnime(); + procBoardWaitInit(NULL); + } else { + current.angle.y = shape_angle.y; + } + } + + return 1; } /* 80107218-80107300 101B58 00E8+00 4/4 0/0 0/0 .text procBoardJumpInit__9daAlink_cFfi */ -#ifdef NONMATCHING int daAlink_c::procBoardJumpInit(f32 param_0, int param_1) { commonProcInit(PROC_BOARD_JUMP); mProcVar0.field_0x3008 = 0; @@ -184,11 +580,6 @@ int daAlink_c::procBoardJumpInit(f32 param_0, int param_1) { seStartOnlyReverb(Z2SE_AL_SNOBO_JUMP); return 1; } -#else -int daAlink_c::procBoardJumpInit(f32 param_0, int param_1) { - // NONMATCHING -} -#endif /* 80107300-801073D0 101C40 00D0+00 1/0 0/0 0/0 .text procBoardJump__9daAlink_cFv */ int daAlink_c::procBoardJump() { @@ -261,7 +652,6 @@ int daAlink_c::procBoardCutInit() { return 1; } - /* 8010755C-801075D4 101E9C 0078+00 1/0 0/0 0/0 .text procBoardCut__9daAlink_cFv */ int daAlink_c::procBoardCut() { if (boardCommon(1)) { @@ -279,10 +669,81 @@ int daAlink_c::procBoardCut() { /* 801075D4-80107744 101F14 0170+00 2/2 0/0 0/0 .text procBoardCutTurnInit__9daAlink_cFv */ int daAlink_c::procBoardCutTurnInit() { - // NONMATCHING + commonProcBoardInit(PROC_BOARD_CUT_TURN); + setSingleAnimeParam(ANM_RIDE_CUT_TURN, &daAlinkHIO_board_c0::m.mSpinAnm); + + if (daAlinkHIO_board_c0::m.mSpinAnm.mStartFrame >= 3.0f) { + speed.y = cLib_minMaxLimit(mNormalSpeed * -cM_ssin(shape_angle.x), daAlinkHIO_board_c0::m.mSpinMinJumpSpeedY, daAlinkHIO_board_c0::m.mSpinMaxJumpSpeedY); + if (!checkModeFlg(2)) { + seStartOnlyReverb(Z2SE_AL_SNOBO_JUMP); + } + + setJumpMode(); + field_0x3198 = 1; + } else { + speed.y = 0.0f; + field_0x3198 = 0; + } + + mProcVar3.field_0x300e.z = 0; + resetCombo(1); + + field_0x3478 = daAlinkHIO_cutTurn_c0::m.mAttackRadius; + field_0x347c = 0.5f * field_0x3478; + initCutTurnAt(field_0x347c, 3); + + mProcVar1.field_0x300a = 4; + mProcVar3.field_0x300e.y = 1; + voiceStart(Z2SE_AL_V_KAITEN); + return 1; } /* 80107744-80107900 102084 01BC+00 1/0 0/0 0/0 .text procBoardCutTurn__9daAlink_cFv */ int daAlink_c::procBoardCutTurn() { - // NONMATCHING + if (boardCommon(1)) { + return 1; + } + + daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0]; + + if (temp_r30->getFrame() >= 4.0f && temp_r30->getFrame() < 14.0f) { + if (!checkNoResetFlg0(FLG0_UNK_40)) { + seStartSwordCut(Z2SE_AL_KAITENGIRI); + } + + onResetFlg0(RFLG0_UNK_2); + cLib_chaseF(&field_0x347c, field_0x3478, 20.0f); + field_0xFB8.SetR(field_0x347c); + onResetFlg1(RFLG1_UNK_40); + } else { + mProcVar3.field_0x300e.z = 0; + } + + if (!checkModeFlg(2)) { + if (field_0x3198 != 0) { + setBoardLandAnime(); + procBoardWaitInit(NULL); + } else { + if (temp_r30->getFrame() >= 3.0f) { + speed.y = mNormalSpeed * -cM_ssin(shape_angle.x); + + if (speed.y < daAlinkHIO_board_c0::m.mSpinMinJumpSpeedY) { + speed.y = daAlinkHIO_board_c0::m.mSpinMinJumpSpeedY; + } else if (speed.y > daAlinkHIO_board_c0::m.mSpinMaxJumpSpeedY) { + speed.y = daAlinkHIO_board_c0::m.mSpinMaxJumpSpeedY; + } + + setJumpMode(); + seStartOnlyReverb(Z2SE_AL_SNOBO_JUMP); + field_0x3198 = 1; + } + } + } else { + field_0x3198 = 1; + if (checkAnmEnd(temp_r30)) { + procBoardJumpInit(0.0f, 1); + } + } + + return 1; } diff --git a/src/d/actor/d_a_alink_ironball.inc b/src/d/actor/d_a_alink_ironball.inc index 49867d841e1..24179f8c419 100644 --- a/src/d/actor/d_a_alink_ironball.inc +++ b/src/d/actor/d_a_alink_ironball.inc @@ -3,6 +3,8 @@ * Player Ball & Chain action handling */ +#include "d/actor/d_a_alink.h" + /* 8011243C-80112458 10CD7C 001C+00 1/0 0/0 0/0 .text getIronBallCenterPos__9daAlink_cFv */ cXyz* daAlink_c::getIronBallCenterPos() { @@ -101,22 +103,362 @@ void daAlink_c::setIronBallBgCheckPos() { /* 801127F0-80112C80 10D130 0490+00 1/1 0/0 0/0 .text setIronBallModel__9daAlink_cFv */ void daAlink_c::setIronBallModel() { - // NONMATCHING -} + JKRHeap* prev_heap = setItemHeap(); -/* 80112C80-80112C84 10D5C0 0004+00 2/2 2/2 0/0 .text __ct__5csXyzFv */ -extern "C" void __ct__5csXyzFv() {} + mHeldItemModel = initModelEnv(loadAramBmd(0x311, 0x2800), 0); + mpHookKusariModelData = loadAramBmd(0x317, 0x1000); + mpHookChain = new hsChainShape_c(); + + mIronBallChainPos = new cXyz[102]; + mIronBallChainAngle = new csXyz[102]; + field_0x3848 = new cXyz[102]; + + field_0x0774 = new dBgS_AcchCir(); + field_0x0778 = new dBgS_ObjAcch(); + mpHookSound = new Z2SoundObjSimple(); + + mpHookshotLinChk = new dBgS_ObjLinChk(); + mpHookshotLinChk->OffFullGrp(); + mpHookshotLinChk->OnWaterGrp(); + + field_0x780 = new dBgS_ObjLinChk(); + field_0x2f1c = new dPaPo_c(); + field_0x2f1c->init(field_0x0778, 32.0f, 64.0f); + + mDoExt_setCurrentHeap(prev_heap); + + mpHookChain->setUserArea((u32)this); + + field_0xFB8.SetAtType(AT_TYPE_IRON_BALL); + field_0xFB8.SetAtHitMark(3); + field_0xFB8.SetAtSe(dCcD_SE_HAMMER); + field_0xFB8.SetAtAtp(2); + field_0xFB8.SetAtMtrl(dCcD_MTRL_NONE); + field_0xFB8.SetR(daAlinkHIO_ironBall_c0::m.mAttackRadius); + + csXyz* var_r28 = mIronBallChainAngle; + for (int i = 0; i < 102; i++, var_r28++) { + if (i < 2) { + var_r28->set(0, shape_angle.y, i * 0x3000); + } else { + var_r28->set(0, shape_angle.y, var_r28[-1].z + 0x3000); + } + + field_0x3848[i] = cXyz::Zero; + mIronBallChainPos[i] = mLeftHandPos; + } + + mItemVar0.field_0x3018 = 0; + mItemMode = 6; + + mIronBallBgChkPos = mLeftHandPos; + field_0x3810 = mLeftHandPos; + + field_0x0774->SetWall(32.0f, 32.0f); + field_0x0778->Set(&mIronBallBgChkPos, &field_0x3810, this, 1, field_0x0774, field_0x3848, mIronBallChainAngle, mIronBallChainAngle); + field_0x0778->ClrRoofNone(); + field_0x0778->SetRoofCrrHeight(64.0f); + field_0x0778->OnLineCheck(); + field_0x0778->ClrObj(); + field_0x0778->SetIronBall(); + + field_0x780->ClrObj(); + field_0x780->SetIronBall(); + + field_0x32d4 = 0; + + mpHookSound->init(&mIronBallCenterPos, 1); + mZ2Link.setUsingIronBall(true); + + field_0x301c = 0; + field_0x3024 = 0; + field_0x3026 = 0; + + field_0x173c.Init(0xDC, 0xFF, this); + field_0x1778.Set(l_sphSrc); + field_0x1778.SetStts(&field_0x173c); + field_0x1778.OffTgSetBit(); + field_0x1778.OffAtSetBit(); + field_0x1778.SetR(40.0f); + field_0x1778.SetCoIGrp(8); + field_0x1778.SetCoVsGrp(0x60); +} /* 80112C84-80112E7C 10D5C4 01F8+00 1/1 0/0 0/0 .text * setIronBallGroundVec__9daAlink_cFPC4cXyzP4cXyz */ -void daAlink_c::setIronBallGroundVec(cXyz const* param_0, cXyz* param_1) { - // NONMATCHING +int daAlink_c::setIronBallGroundVec(cXyz const* param_0, cXyz* param_1) { + cXyz sp3C(param_0->x, param_0->y + 50.0f, param_0->z); + + if (fopAcM_gc_c::gndCheck(&sp3C)) { + f32 var_f30 = (fopAcM_gc_c::getGroundY() + 4.0f) - param_0->y; + if (var_f30 > 0.0f) { + f32 var_f31 = param_1->absXZ(); + + param_1->y += var_f30; + + if (var_f31 < 0.1f) { + param_1->z += var_f30; + } else { + var_f31 = var_f30 / var_f31; + param_1->x += param_1->x * var_f31; + param_1->z += param_1->z * var_f31; + } + + param_1->normalizeZP(); + return 1; + } + } + + return 0; } /* 80112E7C-80113CA0 10D7BC 0E24+00 1/1 0/0 0/0 .text setIronBallChainPos__9daAlink_cFv */ +// NONMATCHING - alot of regalloc void daAlink_c::setIronBallChainPos() { - // NONMATCHING + cXyz sp2A4; + cXyz sp298; + cXyz sp28C; + cXyz sp280; + cXyz sp274; + + *(&mIronBallChainPos[mItemMode] + 1) = mHeldItemRootPos; + *(&mIronBallChainAngle[mItemMode] + 1) = field_0x316c; + + cXyz* var_r29; + cXyz* var_r27; + cXyz* var_r26; + + if (mItemVar0.field_0x3018 == 2) { + var_r29 = mIronBallChainPos + 1; + var_r27 = var_r29 - 1; + var_r26 = field_0x3848 + 1; + + sp2A4 = mHookshotTopPos - *mIronBallChainPos; + sp2A4.normalizeZP(); + + for (int i = 0; i < mItemMode; i++, var_r29++, var_r26++) { + sp28C = *var_r29; + *var_r29 = *var_r27 + (sp2A4 * 10.0f); + + *var_r26 = (*var_r29 - sp28C) * daAlinkHIO_ironBall_c0::m.mChainSpeedRate; + var_r27 = var_r29; + } + } else if (mItemVar0.field_0x3018 == 7) { + var_r29 = &mIronBallChainPos[mItemMode]; + var_r26 = &field_0x3848[mItemMode]; + var_r27 = var_r29 + 1; + + int sp38 = mItemMode * daAlinkHIO_ironBall_c0::m.mReturnChainRate; + int sp34 = sp38; + + for (int i = mItemMode; i >= 0; i--, var_r29--, var_r26--) { + sp2A4 = (*var_r29 - *var_r27) + *var_r26; + + if (i == 0) { + sp2A4.y += daAlinkHIO_ironBall_c0::m.mReturnBallGravity; + } else { + sp2A4.y += daAlinkHIO_ironBall_c0::m.mChainGravity; + } + + if (sp38 >= 0) { + sp2A4.y += daAlinkHIO_ironBall_c0::m.mReturnChainAccelY; + sp38--; + } + + sp2A4.normalizeZP(); + *var_r29 = *var_r27 + (sp2A4 * 10.0f); + var_r27 = var_r29; + } + + setIronBallBgCheckPos(); + sp274 = mIronBallBgChkPos; + field_0x0778->CrrPos(dComIfG_Bgsp()); + + if (field_0x0778->i_ChkGroundHit()) { + *mIronBallChainPos += mIronBallBgChkPos - sp274; + } + + mIronBallChainPos->y += mSearchBallScale; + + var_r29 = mIronBallChainPos + 1; + var_r27 = var_r29 - 1; + var_r26 = field_0x3848 + 1; + + for (int i = 0; i < mItemMode; i++, var_r29++, var_r26++) { + sp28C = *var_r29; + sp2A4 = (*var_r29 - *var_r27) + *var_r26; + sp2A4.y += daAlinkHIO_ironBall_c0::m.mChainGravity; + if (i >= mItemMode - sp34) { + sp2A4.y += daAlinkHIO_ironBall_c0::m.mReturnChainAccelY; + } + + sp280 = sp2A4; + sp2A4.normalizeZP(); + + *var_r29 = *var_r27 + (sp2A4 * 10.0f); + + if (setIronBallGroundVec(var_r29, &sp280)) { + *var_r29 = *var_r27 + (sp280 * 10.0f); + } + + var_r27 = var_r29; + *var_r26 = (*var_r29 - sp28C) * daAlinkHIO_ironBall_c0::m.mChainSpeedRate; + } + } else if (mItemVar0.field_0x3018 == 1 || mItemVar0.field_0x3018 == 3 || mItemVar0.field_0x3018 == 4) { + daPy_frameCtrl_c* sp30 = &mUnderFrameCtrl[0]; + + int sp38; + if (mItemVar0.field_0x3018 == 1) { + f32 temp_f25 = sp30->getEnd() - 13.0f; + f32 temp_f29 = (sp30->getFrame() - 13.0f) / temp_f25; + s16 sp12 = -16384.0f - (14336.0f * temp_f29); + + mDoMtx_stack_c::ZXYrotS(mBodyAngle.x, shape_angle.y, 0); + mDoMtx_stack_c::YrotM(sp12); + mDoMtx_stack_c::multVec(&cXyz::BaseZ, &sp298); + + sp298 *= 15.0f * (1.0f + temp_f29); + sp38 = 1000; + } else if (mItemVar0.field_0x3018 == 4) { + Vec sp268 = {0.0f, 0.0f, 0.0f}; + sp268.y = daAlinkHIO_ironBall_c0::m.mThrowChainAccelY; + sp268.z = daAlinkHIO_ironBall_c0::m.mThrowChainAccelZ; + + mDoMtx_stack_c::ZXYrotS(mBodyAngle.x, shape_angle.y, 0); + mDoMtx_stack_c::multVec(&sp268, &sp298); + + sp38 = 2.0f * (1.0f + sp30->getFrame()); + } else { + sp38 = -1; + } + + var_r29 = &mIronBallChainPos[mItemMode]; + var_r26 = &field_0x3848[mItemMode]; + var_r27 = var_r29 + 1; + + for (int i = mItemMode; i >= 0; i--, var_r29--, var_r26--) { + sp28C = *var_r29; + sp2A4 = (*var_r29 - *var_r27) + *var_r26; + + if (i == 0) { + sp2A4.y += daAlinkHIO_ironBall_c0::m.mBallGravity; + } else { + sp2A4.y += daAlinkHIO_ironBall_c0::m.mChainGravity; + } + + if (sp38 >= 0) { + sp2A4 += sp298; + sp38--; + } + + sp280 = sp2A4; + sp2A4.normalizeZP(); + + *var_r29 = *var_r27 + (sp2A4 * 10.0f); + + if (setIronBallGroundVec(var_r29, &sp280)) { + *var_r29 = *var_r27 + (sp280 * 10.0f); + } + + *var_r26 = (*var_r29 - sp28C) * daAlinkHIO_ironBall_c0::m.mChainSpeedRate; + var_r27 = var_r29; + } + + sp2A4 = mIronBallCenterPos - *mIronBallChainPos; + sp2A4.y += daAlinkHIO_ironBall_c0::m.mBallGravity; + + if (sp38 >= 0) { + sp2A4 += sp298; + } + + s16 temp_r25 = sp2A4.atan2sX_Z(); + mIronBallChainAngle->set(sp2A4.atan2sY_XZ(), temp_r25, 0); + } else { + f32 var_f30; + if (mItemVar0.field_0x3018 == 4 || mItemVar0.field_0x3018 == 5) { + var_f30 = daAlinkHIO_ironBall_c0::m.mThrowChainGravity; + } else { + var_f30 = daAlinkHIO_ironBall_c0::m.mChainGravity; + } + + var_r29 = mIronBallChainPos + 1; + var_r27 = var_r29 - 1; + var_r26 = field_0x3848 + 1; + + for (int i = 0; i < mItemMode; i++, var_r29++, var_r26++) { + sp2A4 = (*var_r29 - *var_r27) + *var_r26; + sp2A4.y += var_f30; + sp2A4.normalizeZP(); + + *var_r29 = *var_r27 + (sp2A4 * 10.0f); + var_r27 = var_r29; + } + + var_r29 = &mIronBallChainPos[mItemMode]; + var_r26 = &field_0x3848[mItemMode]; + var_r27 = var_r29 + 1; + + BOOL sp2C = ((mItemVar0.field_0x3018 == 0 && checkUnderMove1BckNoArc(ANM_IRONBALL_WALK)) && mNowAnmPackUnder[1].getRatio() > 0.8f) && (mUnderFrameCtrl[1].getFrame() >= 24.0f || mUnderFrameCtrl[1].getFrame() <= 3.0f); + + f32 temp_f31 = 5.0f * (5.0f * (mNowAnmPackUnder[1].getRatio() - 0.8f)); + f32 temp_f28 = temp_f31 * cM_scos(shape_angle.y); + temp_f31 *= cM_ssin(shape_angle.y); + + for (int i = mItemMode; i > 0; i--, var_r29--, var_r26--) { + sp28C = *var_r29; + + if (i == mItemMode) { + *var_r29 = mHookshotTopPos; + } else { + sp2A4 = (*var_r29 - *var_r27) + *var_r26; + if (sp2C) { + sp2A4.x += temp_f31; + sp2A4.z += temp_f28; + } + sp2A4.y += var_f30; + + sp280 = sp2A4; + sp2A4.normalizeZP(); + + *var_r29 = *var_r27 + (sp2A4 * 10.0f); + if (setIronBallGroundVec(var_r29, &sp280)) { + *var_r29 = *var_r27 + (sp280 * 10.0f); + } + } + + var_r27 = var_r29; + *var_r26 = (*var_r29 - sp28C) * daAlinkHIO_ironBall_c0::m.mChainSpeedRate; + } + } + + csXyz* sp3C = mIronBallChainAngle + 1; + var_r29 = mIronBallChainPos + 1; + var_r27 = var_r29 - 1; + s16 spE = mIronBallChainAngle->z + 0x3000; + + for (int i = 0; i < mItemMode; i++, sp3C++, var_r29++, spE += 0x3000) { + sp2A4 = (*var_r27 - *var_r29); + + s16 sp10; + if (sp2A4.absXZ() < 1.0f) { + sp10 = sp3C[-1].y; + } else { + sp10 = sp2A4.atan2sX_Z(); + } + + sp3C->set(sp2A4.atan2sY_XZ(), sp10, spE); + var_r27 = var_r29; + } + + cXyz* temp_r29 = &mIronBallChainPos[mItemMode] + 1; + csXyz* sp3C_2 = &mIronBallChainAngle[mItemMode] + 1; + + for (int i = mItemMode + 2; i < 102; i++) { + mIronBallChainPos[i] = *temp_r29; + mIronBallChainAngle[i] = *sp3C_2; + field_0x3848[i] = cXyz::Zero; + } } /* 80113CA0-80113D58 10E5E0 00B8+00 1/1 0/0 0/0 .text checkIronBallReturnChange__9daAlink_cFv */ @@ -135,7 +477,347 @@ BOOL daAlink_c::checkIronBallReturnChange() { /* 80113D58-801150E4 10E698 138C+00 1/1 0/0 0/0 .text setIronBallPos__9daAlink_cFv */ void daAlink_c::setIronBallPos() { - // NONMATCHING + cXyz sp10C; + cXyz sp100; + cXyz spF4; + cXyz spE8; + cXyz spDC; + cXyz spD0(mIronBallCenterPos); + + mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(0xF)); + mDoMtx_stack_c::transM(-1.0f, -6.0f, -3.6f); + mDoMtx_stack_c::XYZrotM(cM_deg2s(150.0f), cM_deg2s(-81.0f), cM_deg2s(111.0f)); + + if (mItemVar0.field_0x3018 == 0) { + mDoMtx_stack_c::transM(0.0f, 0.0f, 10.0f); + mDoMtx_stack_c::XrotM(0x7FFF); + } + + mDoMtx_stack_c::multVec(&l_ironBallChainVec, &mHookshotTopPos); + mDoMtx_stack_c::multVecZero(&mHeldItemRootPos); + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &field_0x316c); + mDoMtx_multVecZero(mpLinkModel->getAnmMtx(9), &sp10C); + mDoMtx_multVecZero(mpLinkModel->getAnmMtx(0xE), &sp100); + + spE8 = (sp10C + sp100) * 0.5f; + + field_0x301c = 0; + + BOOL var_r25 = 0; + BOOL var_r28 = 0; + + if (field_0x3026 != 0) { + field_0x3026--; + } + + cXyz spC4; + cXyz spB8; + + if (field_0xFB8.ChkAtHit()) { + dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f)); + } + + if (mItemVar0.field_0x3018 == 0) { + mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(0xA)); + mDoMtx_stack_c::transM(-35.3f, -9.5f, -16.0f); + mDoMtx_stack_c::XYZrotM(cM_deg2s(61.5f), cM_deg2s(-2.5f), cM_deg2s(50.3f)); + mDoMtx_stack_c::multVecZero(mIronBallChainPos); + + if (mProcID == PROC_IRON_BALL_SUBJECT || mProcID == PROC_IRON_BALL_MOVE) { + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), mIronBallChainAngle); + } else { + mIronBallChainAngle->set(-0x4000, shape_angle.y, 0); + } + + mItemMode = 6; + } else if (mItemVar0.field_0x3018 != 1) { + if (mItemVar0.field_0x3018 == 2) { + daPy_frameCtrl_c* temp_r24 = &mUpperFrameCtrl[2]; + s16 sp10 = 32768.0f - (65536.0f * (temp_r24->getFrame() / temp_r24->getEnd())); + + mItemMode = 3; + + sp10C.set(0.0f, 0.0f, 10.0f * mItemMode); + + mDoMtx_stack_c::transS(mHookshotTopPos); + mDoMtx_stack_c::ZXYrotM(mBodyAngle.x, shape_angle.y, 0); + mDoMtx_stack_c::YrotM(sp10); + mDoMtx_stack_c::multVec(&sp10C, mIronBallChainPos); + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), mIronBallChainAngle); + } else if (mItemVar0.field_0x3018 != 3) { + if (mItemVar0.field_0x3018 == 4) { + mItemMode++; + checkIronBallReturnChange(); + } else if (mItemVar0.field_0x3018 == 5 || mItemVar0.field_0x3018 == 6) { + *mIronBallChainPos += *field_0x173c.GetCCMoveP(); + + if (!checkIronBallReturnChange()) { + f32 var_f29; + f32 var_f28 = daAlinkHIO_ironBall_c0::m.mBallMaxFallSpeed; + + if (mItemVar0.field_0x3018 == 5) { + var_f29 = daAlinkHIO_ironBall_c0::m.mThrowBallGravity; + + f32 sp1C; + if (fopAcM_getWaterY(mIronBallChainPos, &sp1C) && sp1C > mIronBallChainPos->y) { + if (field_0x3022 == 0) { + field_0x3022 = 1; + *field_0x3848 *= 0.5f; + } + var_f29 *= 0.5f; + var_f28 *= 0.5f; + } + } else { + var_f29 = daAlinkHIO_ironBall_c0::m.mBallGravity; + } + + sp10C = mIronBallCenterPos + (*field_0x3848 * 1.25f); + + s16 temp_r27 = daAlinkHIO_ironBall_c0::m.mThrowChainNum + 0.1f * mIronBallChainPos->abs(mHookshotTopPos); + if (temp_r27 > 100) { + mItemMode = 100; + } else if (mItemMode < temp_r27) { + mItemMode = temp_r27; + } + + field_0x3848->y += var_f29; + if (field_0x3848->y < var_f28) { + field_0x3848->y = var_f28; + } + + *mIronBallChainPos += *field_0x3848; + spF4 = *mIronBallChainPos - mHookshotTopPos; + f32 temp_f1 = spF4.abs(); + + BOOL var_r26 = 0; + if (temp_f1 > 1000.0f) { + spF4 *= 1000.0f / temp_f1; + *mIronBallChainPos = mHookshotTopPos + spF4; + + if (field_0x3848->abs2() < 1.0f) { + var_r26 = 1; + } else { + field_0x3848->x = 0.0f; + field_0x3848->z = 0.0f; + } + } + + spF4 = sp10C - *mIronBallChainPos; + spF4.y += var_f29; + + mIronBallChainAngle->set(spF4.atan2sY_XZ(), spF4.atan2sX_Z(), 0); + + int var_r23; + if (mBodyAngle.x >= 0) { + var_r23 = 50; + } else { + var_r23 = 50.0f - (40.0f * cM_ssin(mBodyAngle.x)); + } + + setIronBallBgCheckPos(); + + sp10C = mIronBallBgChkPos; + + f32 temp_f30 = field_0x3848->y; + field_0x0778->CrrPos(dComIfG_Bgsp()); + + f32 var_f31; + int var_r29; + + if (field_0x0778->ChkGroundLanding()) { + var_r29 = dKy_pol_sound_get(&field_0x0778->m_gnd); + var_f31 = fabsf(temp_f30); + field_0x301c = dComIfG_Bgsp().ChkMoveBG(field_0x0778->m_gnd) == 0; + + if (field_0x3024 == 0) { + field_0x3024 = 1; + var_r25 = 1; + } + } else if (field_0x0778->ChkWallHit()) { + var_r29 = dKy_pol_sound_get(field_0x0774); + var_f31 = field_0x3848->absXZ(); + field_0x301c = dComIfG_Bgsp().ChkMoveBG(*field_0x0774) == 0; + + if (field_0x3026 == 0 && var_f31 > 3.0f) { + dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f)); + field_0x3026 = 0xF; + var_r28 = 1; + + spC4 = mIronBallBgChkPos; + spC4.y += 32.0f; + + spB8.set(spC4.x - (cM_ssin(field_0x0774->GetWallAngleY()) * 48.0f), + spC4.y, + spC4.z - (cM_scos(field_0x0774->GetWallAngleY()) * 48.0f)); + } + } else if (field_0x0778->ChkRoofHit()) { + var_r29 = dKy_pol_sound_get(&field_0x0778->m_roof); + var_f31 = fabsf(temp_f30); + field_0x301c = dComIfG_Bgsp().ChkMoveBG(field_0x0778->m_roof) == 0; + + if (field_0x3026 == 0 && var_f31 > 3.0f) { + dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f)); + field_0x3026 = 0xF; + var_r28 = 1; + + spC4 = mIronBallBgChkPos; + spC4.y += 32.0f; + + spB8 = spC4; + spC4.y += 48.0f; + } + } else { + var_r29 = -1; + } + + if (var_r29 != -1) { + var_f31 *= 1.6666666f; + if (var_f31 > 100.0f) { + var_f31 = 100.0f; + } + + mZ2Link.startHitItemSE(Z2SE_HIT_HAMMER, var_r29, mpHookSound, var_f31); + } + + if (field_0x0778->ChkWallHit() || field_0x0778->i_ChkGroundHit() || field_0x0778->ChkRoofHit() || (mItemVar0.field_0x3018 == 5 && (var_r26 != 0 || mItemMode > var_r23))) { + if (field_0x0778->ChkWallHit() || field_0x0778->i_ChkGroundHit() || field_0x0778->ChkRoofHit()) { + *mIronBallChainPos += mIronBallBgChkPos - sp10C; + + if (field_0x0778->ChkWallHit()) { + field_0x3848->x *= -0.2f; + field_0x3848->z *= -0.2f; + + if (temp_f30 > 0.0f) { + field_0x3848->y = 0.8f * temp_f30; + } + } + + if (field_0x0778->i_ChkGroundHit()) { + field_0x3848->x *= 0.5f; + field_0x3848->z *= 0.5f; + + if (checkSnowCodePolygon(field_0x0778->m_gnd)) { + mSearchBallScale = -20.0f; + } else if (temp_f30 < 0.0f) { + field_0x3848->y = -0.5f * temp_f30; + field_0x3494 -= 1.0f; + if (field_0x3848->y > 50.0f) { + field_0x3848->y = 50.0f; + } + } + } else if (field_0x0778->ChkRoofHit()) { + field_0x3848->x *= 0.5f; + field_0x3848->z *= 0.5f; + + if (temp_f30 > 0.0f) { + field_0x3848->y = -0.5f * temp_f30; + } + } + } + + if (mItemVar0.field_0x3018 == 5) { + mItemVar0.field_0x3018 = 6; + } else if (field_0x3494 < 0.0f) { + setIronBallReturn(0); + } else if (field_0x3848->y < daAlinkHIO_ironBall_c0::m.field_0x6C) { + setIronBallReturn(1); + } + } else if (mItemVar0.field_0x3018 == 6 && var_r26 != 0) { + setIronBallReturn(1); + } + + mIronBallChainPos->y += mSearchBallScale; + } + } else if (mItemVar0.field_0x3018 == 7) { + f32 sp18; + int var_r22; + if (fopAcM_getWaterY(mIronBallChainPos, &sp18) && sp18 > mIronBallChainPos->y) { + var_r22 = daAlinkHIO_ironBall_c0::m.mReturnChainRemoveNum - 1; + } else { + var_r22 = daAlinkHIO_ironBall_c0::m.mReturnChainRemoveNum; + } + + if (mItemMode > 6) { + mItemMode -= var_r22; + if (mItemMode <= 6) { + mItemVar0.field_0x3018 = 8; + } + } else if (mItemMode <= 6) { + mItemVar0.field_0x3018 = 8; + } + } else if (mItemVar0.field_0x3018 == 8) { + mSearchBallScale = 0.0f; + + mDoMtx_stack_c::transS(spE8); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::multVec(&handCenterOffsetVec, &sp10C); + + sp10C.y += 42.0f; + + cLib_addCalcPos(&mIronBallCenterPos, sp10C, 0.5f, 70.0f, 10.0f); + cLib_addCalcAngleS(&mIronBallChainAngle->x, -0x4000, 5, 0x1000, 0x400); + cLib_addCalcAngleS(&mIronBallChainAngle->y, shape_angle.y, 5, 0x1000, 0x400); + + mDoMtx_stack_c::transS(mIronBallCenterPos); + mDoMtx_stack_c::ZXYrotM(*mIronBallChainAngle); + mDoMtx_stack_c::multVec(&ironBallPosVec, mIronBallChainPos); + + if (mItemMode > 6) { + mItemMode -= 10; + if (mItemMode < 6) { + mItemMode = 6; + } + } else if (mItemMode < 6) { + mItemMode = 6; + } + } + } + } + + setIronBallChainPos(); + + mDoMtx_stack_c::transS(*mIronBallChainPos); + mDoMtx_stack_c::ZXYrotM(*mIronBallChainAngle); + mHeldItemModel->setBaseTRMtx(mDoMtx_stack_c::get()); + + mDoMtx_stack_c::multVec(&l_ironBallCenterVec, &mIronBallCenterPos); + + field_0x3810 = mIronBallBgChkPos; + mIronBallBgChkPos.set(mIronBallCenterPos.x, mIronBallCenterPos.y - 32.0f, mIronBallCenterPos.z); + + if (mItemVar0.field_0x3018 == 4) { + field_0x0778->CrrPos(dComIfG_Bgsp()); + if (field_0x0778->i_ChkGroundHit() || field_0x0778->ChkRoofHit() || field_0x0778->ChkWallHit()) { + mItemVar0.field_0x3018 = 8; + dComIfGp_getVibration().StartShock(4, 1, cXyz(0.0f, 1.0f, 0.0f)); + } + } + + field_0x173c.ClrCcMove(); + mpHookSound->framework(0, mVoiceReverbIntensity); + + if (mItemVar0.field_0x3018 != 0) { + mpHookshotLinChk->Set(&spD0, &mIronBallCenterPos, this); + + if (dComIfG_Bgsp().LineCross(mpHookshotLinChk) && dComIfG_Bgsp().GetPolyAtt0(*mpHookshotLinChk) != 6) { + fopKyM_createWpillar(mpHookshotLinChk->GetCrossP(), 1.0f, 0); + mDoAud_seStart(Z2SE_CM_BODYFALL_WATER_S, mpHookshotLinChk->GetCrossP(), 0, mVoiceReverbIntensity); + } + } + + if (var_r28 != 0) { + field_0x780->Set(&spC4, &spB8, this); + + if (dComIfG_Bgsp().LineCross(field_0x780)) { + cM3dGPla sp118; + dComIfG_Bgsp().GetTriPla(*field_0x780, &sp118); + + csXyz sp20(cM_atan2s(sp118.mNormal.y, sp118.mNormal.absXZ()), cM_atan2s(-sp118.mNormal.x, -sp118.mNormal.z), 0); + dComIfGp_setHitMark(9, NULL, field_0x780->GetCrossP(), &sp20, NULL, 0); + } + } + + field_0x2f1c->setEffectCenter(&tevStr, &mIronBallBgChkPos, 0x3B, 0x40000, var_r25 ? &mIronBallBgChkPos : NULL, NULL, NULL, fopAcM_GetRoomNo(this), field_0x3420, 0.0f); } /* 801150E4-8011510C 10FA24 0028+00 10/10 0/0 0/0 .text checkIronBallAnime__9daAlink_cCFv @@ -349,7 +1031,44 @@ int daAlink_c::procIronBallThrowInit() { /* 80115860-801159F0 1101A0 0190+00 1/0 0/0 0/0 .text procIronBallThrow__9daAlink_cFv */ int daAlink_c::procIronBallThrow() { - // NONMATCHING + daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0]; + + if (mEquipItem != IRONBALL) { + return checkWaitAction(); + } + + field_0x2f99 = 4; + + if (mItemVar0.field_0x3018 == 8) { + return procIronBallReturnInit(); + } + + if (mItemVar0.field_0x3018 == 4 && temp_r29->checkPass(6.0f)) { + mItemVar0.field_0x3018 = 5; + mDoMtx_stack_c::ZXYrotS(mBodyAngle.x, shape_angle.y, 0); + + Vec sp8 = {0.0f, daAlinkHIO_ironBall_c0::m.mThrowSpeedY, daAlinkHIO_ironBall_c0::m.mThrowSpeedZ}; + mDoMtx_stack_c::multVec(&sp8, field_0x3848); + field_0x3022 = 0; + } + + if (checkAnmEnd(temp_r29)) { + if (mProcVar2.field_0x300c == 0) { + mProcVar2.field_0x300c = 1; + setSingleAnimeBaseSpeed(ANM_IRONBALL_THROW, daAlinkHIO_ironBall_c0::m.mThrowAnmSpeed, daAlinkHIO_ironBall_c0::m.mThrowInterpolation); + field_0x2f99 = 0xC; + mItemVar0.field_0x3018 = 4; + } else if (mItemVar0.field_0x3018 == 7) { + procIronBallReturnInit(); + } + } else if (mProcVar2.field_0x300c != 0) { + if (temp_r29->getFrame() >= 5.0f) { + field_0x2f92 = 0xFE; + field_0x2f93 = 0xFE; + } + } + + return 1; } /* 801159F0-80115AA0 110330 00B0+00 2/2 0/0 0/0 .text procIronBallReturnInit__9daAlink_cFv */ @@ -386,8 +1105,7 @@ int daAlink_c::procIronBallReturn() { field_0x2f99 = 12; seStartOnlyReverb(Z2SE_AL_IB_CATCH); - f32 tmp_0 = 0.0f; - dComIfGp_getVibration().StartShock(3, 1, cXyz(tmp_0, 1.0f, tmp_0)); + dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f)); } else if (frameCtrl->checkAnmEnd()) { if (mItemVar0.field_0x3018 == 8) { mItemVar0.field_0x3018 = 0; diff --git a/src/d/actor/d_a_alink_link.inc b/src/d/actor/d_a_alink_link.inc index c07676402d7..257f50552d9 100644 --- a/src/d/actor/d_a_alink_link.inc +++ b/src/d/actor/d_a_alink_link.inc @@ -753,10 +753,9 @@ int daAlink_c::procSlideLand() { } /* 800C494C-800C4B40 0BF28C 01F4+00 4/3 0/0 0/0 .text procFrontRollInit__9daAlink_cFv */ -// some issue with daAlinkHIO_frontRoll_c0::m not being saved into r31 -#ifdef NONMATCHING int daAlink_c::procFrontRollInit() { BOOL is_guard_anime = checkUpperGuardAnime(); + if (mProcID == PROC_FRONT_ROLL && mDemo.getDemoMode() == 0x28) { return 0; } @@ -764,20 +763,18 @@ int daAlink_c::procFrontRollInit() { BOOL is_dive_jump = mProcID == PROC_DIVE_JUMP; commonProcInit(PROC_FRONT_ROLL); - f32 roll_anm_speed; - if (!is_dive_jump) { - roll_anm_speed = daAlinkHIO_frontRoll_c0::m.mRollAnm.mSpeed; - } else { - roll_anm_speed = 6.0f; - } + f32 roll_anm_speed = is_dive_jump ? 6.0f : daAlinkHIO_frontRoll_c0::m.mRollAnm.mStartFrame; + setSingleAnime(ANM_FRONT_ROLL, daAlinkHIO_frontRoll_c0::m.mRollAnm.mSpeed, roll_anm_speed, daAlinkHIO_frontRoll_c0::m.mRollAnm.mEndFrame, daAlinkHIO_frontRoll_c0::m.mRollAnm.mInterpolation); mNormalSpeed = - speedF * daAlinkHIO_frontRoll_c0::m.mInitSpeed + daAlinkHIO_frontRoll_c0::m.mSpeedRate; - if (mNormalSpeed > daAlinkHIO_frontRoll_c0::m.mCrashHitAnm.mStartFrame) { - mNormalSpeed = daAlinkHIO_frontRoll_c0::m.mCrashHitAnm.mStartFrame; + speedF * daAlinkHIO_frontRoll_c0::m.mSpeedRate + daAlinkHIO_frontRoll_c0::m.mInitSpeed; + + f32 var_f30 = daAlinkHIO_frontRoll_c0::m.mInitSpeed + daAlinkHIO_move_c0::m.mMaxSpeed * daAlinkHIO_frontRoll_c0::m.mSpeedRate; + if (mNormalSpeed > var_f30) { + mNormalSpeed = var_f30; } if (mNormalSpeed < daAlinkHIO_frontRoll_c0::m.mMinSpeed) { @@ -794,8 +791,9 @@ int daAlink_c::procFrontRollInit() { voiceStart(Z2SE_AL_V_BACKTEN); mProcVar2.field_0x300c = 0; setFootEffectProcType(0); + if (is_guard_anime) { - onNoResetFlg0(2); + onNoResetFlg0(FLG0_UNK_2); } if (checkEquipHeavyBoots()) { @@ -808,13 +806,9 @@ int daAlink_c::procFrontRollInit() { field_0xFB8.SetR(daAlinkHIO_frontRoll_c0::m.mBootsAttackRadius); field_0xFB8.OnAtSetBit(); } + return 1; } -#else -int daAlink_c::procFrontRollInit() { - // NONMATCHING -} -#endif /* 800C4B40-800C4F14 0BF480 03D4+00 1/0 0/0 0/0 .text procFrontRoll__9daAlink_cFv */ int daAlink_c::procFrontRoll() { @@ -1905,8 +1899,7 @@ int daAlink_c::procSmallJumpInit(int param_0) { /* 800C72D4-800C74D4 0C1C14 0200+00 1/0 0/0 0/0 .text procSmallJump__9daAlink_cFv */ -// one out of order block with sqrt -#ifdef NONMATCHING +// NONMATCHING - one out of order block with sqrt int daAlink_c::procSmallJump() { if (checkModeFlg(2)) { if (checkCanoeJumpRide()) { @@ -1948,11 +1941,6 @@ int daAlink_c::procSmallJump() { return 1; } -#else -int daAlink_c::procSmallJump() { - // NONMATCHING -} -#endif /* 800C74D4-800C755C 0C1E14 0088+00 1/1 0/0 0/0 .text procStepMoveInit__9daAlink_cFv */ int daAlink_c::procStepMoveInit() { @@ -1968,11 +1956,10 @@ int daAlink_c::procStepMoveInit() { } /* 800C755C-800C7690 0C1E9C 0134+00 1/0 0/0 0/0 .text procStepMove__9daAlink_cFv */ -#ifdef NONMATCHING int daAlink_c::procStepMove() { daPy_frameCtrl_c* frameCtrl = mUnderFrameCtrl; - if (mProcVar2.field_0x300c == 0) { + if (mProcVar2.field_0x300c != 0) { field_0x2f99 = 4; if (frameCtrl->checkAnmEnd()) { @@ -1998,11 +1985,6 @@ int daAlink_c::procStepMove() { return 1; } -#else -int daAlink_c::procStepMove() { - // NONMATCHING -} -#endif /* 800C7690-800C76F8 0C1FD0 0068+00 1/0 0/0 0/0 .text procCrouchInit__9daAlink_cFv */ int daAlink_c::procCrouchInit() { @@ -2035,27 +2017,11 @@ int daAlink_c::procCrouch() { return 1; } -/* ############################################################################################## */ -/* 804255F8-80425604 052318 000C+00 0/1 0/0 0/0 .bss @4419 */ -#pragma push -#pragma force_active on -static u8 lit_4419[12]; -#pragma pop - /* 80425604-80425610 052324 000C+00 0/1 0/0 0/0 .bss l_sumouBaseAnimeSp */ -#pragma push -#pragma force_active on -static Vec l_sumouBaseAnimeSp; // change to cXyz later -#pragma pop - -/* 80425610-8042561C 052330 000C+00 0/1 0/0 0/0 .bss @4420 */ -#pragma push -#pragma force_active on -static u8 lit_4420[12]; -#pragma pop +static cXyz l_sumouBaseAnimeSp; /* 8042561C-80425628 05233C 000C+00 37/39 0/0 0/0 .bss l_wolfBaseAnime */ -static Vec l_wolfBaseAnime; // change to cXyz later +static cXyz l_wolfBaseAnime; BOOL daMidna_c::checkMidnaRealBody() { return dKy_darkworld_check() == 1 || dComIfGs_isTransformLV(3); @@ -2180,19 +2146,161 @@ int daAlink_c::procCoMetamorphoseInit() { } -/* ############################################################################################## */ -/* 80392070-8039207C 01E6D0 000C+00 0/1 0/0 0/0 .rodata @74273 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_74273[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80392070, &lit_74273); -#pragma pop - /* 800C7C64-800C82E8 0C25A4 0684+00 1/0 0/0 0/0 .text procCoMetamorphose__9daAlink_cFv */ int daAlink_c::procCoMetamorphose() { - // NONMATCHING + if (mProcVar1.field_0x300a != 0) { + if (!checkEventRun()) { + checkWaitAction(); + } else { + dComIfGp_evmng_cutEnd(field_0x3184); + } + return 1; + } + + daPy_frameCtrl_c* temp_r29 = mUnderFrameCtrl; + if (!mLinkAcch.i_ChkGroundHit()) { + current.pos.y = field_0x3484; + speed.y = 0.0f; + } else { + field_0x3484 = current.pos.y; + } + + field_0x2f99 = 4; + + if (mProcVar0.field_0x3008 != 0 && mProcVar3.field_0x300e.z == 0) { + if (mClothesChangeWaitTimer == 0) { + mProcVar3.field_0x300e.z = 1; + + if (mDemo.getParam0() == 1 && (mDemo.getDemoMode() == 0x39 || mDemo.getDemoMode() == 0x3A)) { + dComIfGp_evmng_cutEnd(field_0x3184); + + if (checkWolf()) { + setSingleAnimeWolfBaseSpeed(WANM_WAIT, daAlinkHIO_wlMoveNoP_c0::m.field_0x14, -1.0f); + } else { + setSingleAnimeBaseSpeed(ANM_WAIT, daAlinkHIO_move_c0::m.mWaitAnmSpeed, -1.0f); + } + + field_0x2f99 = 0xC; + mProcVar1.field_0x300a = 1; + return 1; + } + + Vec sp8 = {0.0f, 0.0f, 0.0f}; + sp8.z = l_wolfBaseAnime.z - l_waitBaseAnime.z; + + if (!checkWolf()) { + setSingleAnimeBaseMorf(ANM_TRANSFORM_TO_HUMAN, -1.0f); + setMetamorphoseModel(0); + field_0x3588 = l_waitBaseAnime; + } else { + setSingleAnimeWolfBaseMorf(WANM_TRANSFORM_TO_WOLF, -1.0f); + field_0x3588 = l_wolfBaseAnime; + sp8.z *= -1.0f; + offModeFlg(0x8000); + } + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::multVec(&sp8, ¤t.pos); + + field_0x2f99 = 0xC; + if (mDemo.getDemoType() == 3) { + mFallVoiceInit = 1; + } + + } + } else if (checkAnmEnd(temp_r29) || ((mDemo.getParam0() == 1) && (mDemo.getDemoMode() == 0x39 || mDemo.getDemoMode() == 0x3A)) || (mProcVar3.field_0x300e.z != 0 && temp_r29->getFrame() > field_0x3480 && (checkInputOnR() || doTrigger() || grassCancelTrigger()))) { + if (mProcVar3.field_0x300e.z != 0) { + deleteEquipItem(0, 0); + + if (field_0x3198 != 0) { + resetSpecialEvent(); + return checkWaitAction(); + } + + dComIfGp_evmng_cutEnd(field_0x3184); + + if (checkWolf()) { + setSingleAnimeWolfBaseSpeed(WANM_WAIT, daAlinkHIO_wlMoveNoP_c0::m.field_0x14, -1.0f); + } else { + setSingleAnimeBaseSpeed(ANM_WAIT, daAlinkHIO_move_c0::m.mWaitAnmSpeed, -1.0f); + } + + field_0x2f99 = 0xC; + mProcVar1.field_0x300a = 1; + return 1; + } + + mClothesChangeWaitTimer = 4; + mpWlMidnaModel = NULL; + mProcVar0.field_0x3008 = 1; + + if (mProcVar3.field_0x300e.y != 0) { + dComIfGs_onEventBit(0x5E40); + } + } + + field_0x33dc = temp_r29->getFrame(); + + if (mProcVar3.field_0x300e.z != 0) { + if (checkWolf()) { + f32 var_f31 = 1.0f - (0.03846154f * field_0x33dc); + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + } + + mProcVar3.field_0x300e.x = -64.0f * var_f31; + } else if (field_0x33dc < 14.0f) { + mProcVar3.field_0x300e.x = 15.0 + (49.0 * (1.0 - (0.07142857142857142 * field_0x33dc))); + } else { + f32 var_f31_2 = 1.0f - (0.2f * (field_0x33dc - 14.0f)); + if (var_f31_2 < 0.0f) { + var_f31_2 = 0.0f; + } + + mProcVar3.field_0x300e.x = 15.0f * var_f31_2; + } + } else if (checkWolf() != 0) { + mProcVar3.field_0x300e.x = -64.0 * (0.07142857142857142 * field_0x33dc); + } else if (field_0x33dc < 9.0f) { + mProcVar3.field_0x300e.x = -15.0 * (0.1111111111111111 * field_0x33dc); + } else { + f32 var_f31_3 = 0.2f * (field_0x33dc - 9.0f); + if (var_f31_3 > 1.0f) { + var_f31_3 = 1.0f; + } + + mProcVar3.field_0x300e.x = -(15.0f + (49.0f * var_f31_3)); + } + + if (!checkWolf()) { + f32 var_f30; + if (mProcVar3.field_0x300e.z != 0) { + var_f30 = (field_0x33dc - 13.0f) / 4.0f; + } else { + var_f30 = (field_0x33dc - 8.0f) / 5.0f; + } + + var_f30 = cLib_minMaxLimit(var_f30, 0.0f, 1.0f); + + if (mProcVar3.field_0x300e.z != 0) { + field_0x347c = 0.5f + (0.027777778f * field_0x33dc); + var_f30 = 1.0f - var_f30; + } else { + field_0x347c = 1.0f - (0.033333335f * (field_0x33dc - 9.0f)); + if (var_f30 > 0.0f) { + swimBgCheck(150.0f * var_f30); + } + } + + if (field_0x347c > 1.0f) { + field_0x347c = 1.0f; + } + + shape_angle.x = var_f30 * mProcVar2.field_0x300c; + } + + return 1; } /* 800C82E8-800C83A0 0C2C28 00B8+00 2/0 0/0 0/0 .text procCoMetamorphoseOnlyInit__9daAlink_cFv */ @@ -2212,10 +2320,9 @@ int daAlink_c::procCoMetamorphoseOnlyInit() { mProcVar3.field_0x300e.x = 0; } - f32 tmp_0 = 0.0f; - mNormalSpeed = tmp_0; - speed.y = tmp_0; - setSpecialGravity(tmp_0, maxFallSpeed, 0); + mNormalSpeed = 0.0f; + speed.y = 0.0f; + setSpecialGravity(0.0f, maxFallSpeed, 0); return 1; } @@ -2289,6 +2396,7 @@ 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; } /* 800C8700-800CAFA8 0C3040 28A8+00 1/1 0/0 0/0 .text execute__9daAlink_cFv */ @@ -3364,18 +3472,10 @@ void daAlink_c::modelDraw(J3DModel* i_model, int param_1) { daMirror_c::entry(i_model); } -/* ############################################################################################## */ -/* 8045333C-80453344 00193C 0008+00 1/1 0/0 0/0 .sdata2 notColor0$76211 */ -SECTION_SDATA2 static GXColorS10 notColor0 = { - 0x0000, - 0x0000, - 0x0000, - 0x00FF, -}; - /* 800CC364-800CC7DC 0C6CA4 0478+00 2/2 0/0 0/0 .text * setWaterDropColor__9daAlink_cFPC13J3DGXColorS10 */ -void daAlink_c::setWaterDropColor(J3DGXColorS10 const* i_color) { +void daAlink_c::setWaterDropColor(const J3DGXColorS10* i_color) { + static const GXColorS10 notColor0 = {0x00, 0x00, 0x00, 0xFF}; J3DGXColorS10* var_r31; if (&field_0x32a0[0] == i_color) { @@ -3884,6 +3984,7 @@ bool daAlink_c::checkNoSubjectModeCamera() { /* 800CE468-800CE628 0C8DA8 01C0+00 2/2 0/0 0/0 .text acceptSubjectModeChange__9daAlink_cFv */ bool daAlink_c::acceptSubjectModeChange() { // NONMATCHING + return 0; } /* 800CE628-800CE728 0C8F68 0100+00 5/5 0/0 0/0 .text checkSubjectAction__9daAlink_cFv */ @@ -3925,6 +4026,7 @@ void daAlink_c::checkBodyAngleX(s16 param_0) { /* 800CE8A0-800CEAF4 0C91E0 0254+00 15/15 0/0 0/0 .text setBodyAngleToCamera__9daAlink_cFv */ BOOL daAlink_c::setBodyAngleToCamera() { // NONMATCHING + return 0; } /* 800CEAF4-800CEB58 0C9434 0064+00 9/9 0/0 0/0 .text setSubjectMode__9daAlink_cFv */ @@ -3933,7 +4035,6 @@ void daAlink_c::setSubjectMode() { seStartSystem(Z2SE_SUBJ_VIEW_IN); } - /* 800CEB58-800CEBD8 0C9498 0080+00 2/2 0/0 0/0 .text subjectCancelTrigger__9daAlink_cFv */ BOOL daAlink_c::subjectCancelTrigger() { @@ -3947,18 +4048,35 @@ BOOL daAlink_c::subjectCancelTrigger() { } /* 800CEBD8-800CECE4 0C9518 010C+00 9/9 0/0 0/0 .text checkSubjectEnd__9daAlink_cFi */ -int daAlink_c::checkSubjectEnd(int param_0) { - // NONMATCHING +int daAlink_c::checkSubjectEnd(BOOL i_playSound) { + setDoStatus(0x12); + + if (checkEventRun() || checkEquipAnime() || doTrigger() || checkSetItemTrigger(HAWK_EYE) || subjectCancelTrigger() || checkEndResetFlg0(ERFLG0_UNK_80000000) || dComIfGp_checkCameraAttentionStatus(field_0x317c, 0x2000)) { + if (i_playSound) { + seStartSystem(Z2SE_SUBJ_VIEW_OUT); + } + + onResetFlg0(RFLG0_UNK_10000000); + return true; + } + + return false; } /* 800CECE4-800CED48 0C9624 0064+00 1/1 0/0 0/0 .text searchPeepObj__9daAlink_cFP10fopAc_ac_cPv */ -void daAlink_c::searchPeepObj(fopAc_ac_c* param_0, void* param_1) { - // NONMATCHING +void daAlink_c::searchPeepObj(fopAc_ac_c* i_actor, void* i_data) { + if (fopAcM_GetName(i_actor) == PROC_KYTAG05) { + f32 var_f31 = current.pos.abs2(i_actor->current.pos); + if (var_f31 < field_0x3478) { + field_0x3478 = var_f31; + *(fopAc_ac_c**)i_data = i_actor; + } + } } /* 800CED48-800CED84 0C9688 003C+00 1/1 0/0 0/0 .text daAlink_searchPeepObj__FP10fopAc_ac_cPv */ -static int daAlink_searchPeepObj(fopAc_ac_c* param_0, void* param_1) { - daAlink_getAlinkActorClass()->searchPeepObj(param_0, param_1); +static int daAlink_searchPeepObj(fopAc_ac_c* i_actor, void* i_data) { + daAlink_getAlinkActorClass()->searchPeepObj(i_actor, i_data); return 0; } @@ -3981,7 +4099,31 @@ int daAlink_c::procCoSubjectivityInit() { /* 800CEE08-800CEF70 0C9748 0168+00 1/0 0/0 0/0 .text procCoSubjectivity__9daAlink_cFv */ int daAlink_c::procCoSubjectivity() { - // NONMATCHING + onResetFlg0(RFLG0_UNK_4000000); + setTalkStatus(); + + if (orderTalk(1)) { + return 1; + } + + if ((checkWolf() && checkWolfGroundSpecialMode()) || (!checkWolf() && checkGroundSpecialMode())) { + return 1; + } + + if (checkSubjectEnd(FALSE) || (dComIfGp_checkPlayerStatus0(0, 0x200000) && checkSetItemTrigger(HAWK_EYE))) { + seStartSystem(Z2SE_SUBJ_VIEW_OUT); + checkWaitAction(); + } else if (!checkWolf() && (checkItemAction() || checkItemChangeFromButton())) { + if (checkUpperReadyThrowAnime()) { + field_0x310a = mBodyAngle.x; + } + + return 1; + } else { + setBodyAngleToCamera(); + } + + return 1; } /* 800CEF70-800CF018 0C98B0 00A8+00 1/1 0/0 0/0 .text procCoSwimSubjectivityInit__9daAlink_cFv */ @@ -4007,7 +4149,6 @@ int daAlink_c::procCoSwimSubjectivityInit() { /* 800CF018-800CF100 0C9958 00E8+00 1/0 0/0 0/0 .text procCoSwimSubjectivity__9daAlink_cFv */ int daAlink_c::procCoSwimSubjectivity() { - // NONMATCHING onResetFlg0(RFLG0_UNK_4000000); setTalkStatus(); @@ -4019,7 +4160,7 @@ int daAlink_c::procCoSwimSubjectivity() { setSwimUpDownOffset(); } - if (checkSubjectEnd(0)) { + if (checkSubjectEnd(FALSE)) { seStartSystem(Z2SE_SUBJ_VIEW_OUT); if (checkWolf()) { @@ -4191,6 +4332,7 @@ extern "C" BOOL checkRideOn__9daAlink_cCFv(daAlink_c* this_) { /* 800CFEC4-800CFEF4 0CA804 0030+00 1/1 0/0 0/0 .text dComIfGp_att_getCatghTarget__Fv */ extern "C" dAttCatch_c* dComIfGp_att_getCatghTarget__Fv() { // NONMATCHING + return 0; } /* 800CFEF4-800CFF2C 0CA834 0038+00 1/1 0/0 0/0 .text mDoAud_setLinkHp__Fll */ diff --git a/src/d/actor/d_a_alink_swim.inc b/src/d/actor/d_a_alink_swim.inc index 053aca698b6..31dc7ef44ec 100644 --- a/src/d/actor/d_a_alink_swim.inc +++ b/src/d/actor/d_a_alink_swim.inc @@ -255,11 +255,13 @@ int daAlink_c::checkNextActionSwim() { /* 80102B1C-80103058 0FD45C 053C+00 3/3 0/0 0/0 .text checkSwimAction__9daAlink_cFi */ int daAlink_c::checkSwimAction(int param_0) { // NONMATCHING + return 0; } /* 80103058-801032C8 0FD998 0270+00 7/7 0/0 0/0 .text checkSwimUpAction__9daAlink_cFv */ int daAlink_c::checkSwimUpAction() { // NONMATCHING + return 0; } /* 801032C8-80103398 0FDC08 00D0+00 8/8 0/0 0/0 .text swimOutAfter__9daAlink_cFi */ @@ -922,6 +924,7 @@ int daAlink_c::procSwimDamageInit(dCcD_GObjInf* param_0) { #else int daAlink_c::procSwimDamageInit(dCcD_GObjInf* param_0) { // NONMATCHING + return 0; } #endif diff --git a/src/d/actor/d_a_alink_whistle.inc b/src/d/actor/d_a_alink_whistle.inc index 157a3cafaf2..cdd1d8727bb 100644 --- a/src/d/actor/d_a_alink_whistle.inc +++ b/src/d/actor/d_a_alink_whistle.inc @@ -273,6 +273,7 @@ int daAlink_c::procGrassWhistleWait() { #else int daAlink_c::procGrassWhistleWait() { // NONMATCHING + return 0; } #endif @@ -303,6 +304,7 @@ int daAlink_c::procCoHorseCallWaitInit(int param_0) { */ int daAlink_c::procCoHorseCallWait() { // NONMATCHING + return 0; } /* 801121B4-80112220 10CAF4 006C+00 1/0 0/0 0/0 .text procHawkCatchInit__9daAlink_cFv */ @@ -349,4 +351,5 @@ int daAlink_c::procHawkSubjectInit() { /* 80112304-8011243C 10CC44 0138+00 1/0 0/0 0/0 .text procHawkSubject__9daAlink_cFv */ int daAlink_c::procHawkSubject() { // NONMATCHING + return 0; } diff --git a/src/d/actor/d_a_alink_wolf.inc b/src/d/actor/d_a_alink_wolf.inc index a1a3476f9b3..3019e263821 100644 --- a/src/d/actor/d_a_alink_wolf.inc +++ b/src/d/actor/d_a_alink_wolf.inc @@ -1251,6 +1251,7 @@ int daAlink_c::procWolfServiceWaitInit(int param_0) { */ int daAlink_c::procWolfServiceWait() { // NONMATCHING + return 0; } /* 8012CF68-8012CFEC 1278A8 0084+00 1/1 0/0 0/0 .text procWolfTiredWaitInit__9daAlink_cFv @@ -3199,6 +3200,7 @@ int daAlink_c::setWolfRopePosY() { #else int daAlink_c::setWolfRopePosY() { // NONMATCHING + return 0; } #endif @@ -3313,6 +3315,7 @@ int daAlink_c::procWolfRopeMoveInit(int param_0, int param_1) { /* 80131DA0-80132738 12C6E0 0998+00 1/0 0/0 0/0 .text procWolfRopeMove__9daAlink_cFv */ int daAlink_c::procWolfRopeMove() { // NONMATCHING + return 0; } /* 80132738-80132914 12D078 01DC+00 5/5 0/0 0/0 .text procWolfRopeHangInit__9daAlink_cFi @@ -3375,6 +3378,7 @@ int daAlink_c::procWolfRopeHangInit(int param_0) { /* 80132914-80132D68 12D254 0454+00 1/0 0/0 0/0 .text procWolfRopeHang__9daAlink_cFv */ int daAlink_c::procWolfRopeHang() { // NONMATCHING + return 0; } /* 80132D68-80132E88 12D6A8 0120+00 1/1 0/0 0/0 .text procWolfRopeTurnInit__9daAlink_cFv @@ -3402,6 +3406,7 @@ int daAlink_c::procWolfRopeTurnInit() { /* 80132E88-80133054 12D7C8 01CC+00 1/0 0/0 0/0 .text procWolfRopeTurn__9daAlink_cFv */ int daAlink_c::procWolfRopeTurn() { // NONMATCHING + return 0; } /* 80133054-80133164 12D994 0110+00 1/1 0/0 0/0 .text procWolfRopeStaggerInit__9daAlink_cFi */ @@ -3439,6 +3444,7 @@ int daAlink_c::procWolfRopeStaggerInit(int param_0) { */ int daAlink_c::procWolfRopeStagger() { // NONMATCHING + return 0; } /* 8013384C-80133930 12E18C 00E4+00 1/1 0/0 0/0 .text procWolfRopeSubjectivityInit__9daAlink_cFv @@ -3473,6 +3479,7 @@ int daAlink_c::procWolfRopeSubjectivityInit() { /* 80133930-80133D6C 12E270 043C+00 1/0 0/0 0/0 .text procWolfRopeSubjectivity__9daAlink_cFv */ int daAlink_c::procWolfRopeSubjectivity() { // NONMATCHING + return 0; } /* 80133D6C-80133EF0 12E6AC 0184+00 0/0 0/0 1/1 .text getWolfTagJumpTime__9daAlink_cCFv @@ -3532,11 +3539,13 @@ const cXyz* daAlink_c::checkMidnaLockJumpPoint() const { * procWolfTagJumpInit__9daAlink_cFP10fopAc_ac_c */ int daAlink_c::procWolfTagJumpInit(fopAc_ac_c* param_0) { // NONMATCHING + return 0; } /* 80134838-80134DB8 12F178 0580+00 1/0 0/0 0/0 .text procWolfTagJump__9daAlink_cFv */ int daAlink_c::procWolfTagJump() { // NONMATCHING + return 0; } /* 80134DB8-80134EBC 12F6F8 0104+00 1/1 0/0 0/0 .text @@ -3792,6 +3801,7 @@ int daAlink_c::procWolfHangReady() { /* 801356F0-80135AF4 130030 0404+00 3/3 0/0 0/0 .text procWolfHangWallCatchInit__9daAlink_cFi */ int daAlink_c::procWolfHangWallCatchInit(int param_0) { // NONMATCHING + return 0; } /* 80135AF4-80135CD8 130434 01E4+00 1/0 0/0 0/0 .text procWolfHangWallCatch__9daAlink_cFv @@ -3946,6 +3956,7 @@ void daAlink_c::setWolfHeadDamage() { * procWolfDamageInit__9daAlink_cFP12dCcD_GObjInf */ int daAlink_c::procWolfDamageInit(dCcD_GObjInf* param_0) { // NONMATCHING + return 0; } /* 80136508-80136624 130E48 011C+00 1/0 0/0 0/0 .text procWolfDamage__9daAlink_cFv */ @@ -3984,12 +3995,14 @@ int daAlink_c::procWolfDamage() { */ int daAlink_c::procWolfLargeDamageUpInit(int param_0, int param_1, s16 param_2, s16 param_3) { // NONMATCHING + return 0; } /* 801369E4-80136C18 131324 0234+00 1/0 0/0 0/0 .text procWolfLargeDamageUp__9daAlink_cFv */ int daAlink_c::procWolfLargeDamageUp() { // NONMATCHING + return 0; } /* 80136C18-80136DE4 131558 01CC+00 1/1 0/0 0/0 .text procWolfLandDamageInit__9daAlink_cFi */ @@ -4317,12 +4330,14 @@ int daAlink_c::procWolfLieMoveInit(int param_0) { #else int daAlink_c::procWolfLieMoveInit(int param_0) { // NONMATCHING + return 0; } #endif /* 801377F0-80137C90 132130 04A0+00 1/0 0/0 0/0 .text procWolfLieMove__9daAlink_cFv */ int daAlink_c::procWolfLieMove() { // NONMATCHING + return 0; } /* 80137C90-80137D4C 1325D0 00BC+00 1/1 0/0 0/0 .text procWolfLieAutoMoveInit__9daAlink_cFiP4cXyz @@ -4353,6 +4368,7 @@ int daAlink_c::procWolfLieAutoMoveInit(int param_0, cXyz* param_1) { #else int daAlink_c::procWolfLieAutoMoveInit(int param_0, cXyz* param_1) { // NONMATCHING + return 0; } #endif @@ -4360,6 +4376,7 @@ int daAlink_c::procWolfLieAutoMoveInit(int param_0, cXyz* param_1) { */ int daAlink_c::procWolfLieAutoMove() { // NONMATCHING + return 0; } /* 80138000-80138188 132940 0188+00 2/2 0/0 0/0 .text setSpeedAndAngleSwimWolf__9daAlink_cFv */ @@ -5184,6 +5201,7 @@ int daAlink_c::procWolfRollAttackMove() { /* 80139DE0-8013A4F8 134720 0718+00 5/5 0/0 0/0 .text procWolfJumpAttackInit__9daAlink_cFi */ int daAlink_c::procWolfJumpAttackInit(int param_0) { // NONMATCHING + return 0; } /* 8013A4F8-8013A7EC 134E38 02F4+00 1/0 0/0 0/0 .text procWolfJumpAttack__9daAlink_cFv */ @@ -5874,6 +5892,7 @@ int daAlink_c::procWolfLockAttackInit(int param_0) { #else int daAlink_c::procWolfLockAttackInit(int param_0) { // NONMATCHING + return 0; } #endif @@ -6866,16 +6885,19 @@ int daAlink_c::procWolfChainWait() { /* 8013ED44-8013F1F0 139684 04AC+00 1/1 0/0 0/0 .text procWolfDigInit__9daAlink_cFv */ int daAlink_c::procWolfDigInit() { // NONMATCHING + return 0; } /* 8013F1F0-8013F4A8 139B30 02B8+00 1/0 0/0 0/0 .text procWolfDig__9daAlink_cFv */ int daAlink_c::procWolfDig() { // NONMATCHING + return 0; } /* 8013F4A8-8013F7C4 139DE8 031C+00 2/2 0/0 0/0 .text procWolfDigThroughInit__9daAlink_cFi */ int daAlink_c::procWolfDigThroughInit(int param_0) { // NONMATCHING + return 0; } /* 8013F7C4-8013F90C 13A104 0148+00 1/0 0/0 0/0 .text procWolfDigThrough__9daAlink_cFv */