summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2024-11-09 02:09:36 -0800
committerGitHub <noreply@github.com>2024-11-09 05:09:36 -0500
commit083991a8d08827a1185c8ad12a158bb7b021bee9 (patch)
tree2b419c3b3e5749a41510218d6e52c0af3c932564 /src
parent80f30409f1df6785bf80aeffe2d627ec02aec93a (diff)
all d_a_alink functions attempted (#2239)
* more work on alink * alink wip * little more work * setEyeMove * 14 left * auto ground hit * all d_a_alink functions attempted
Diffstat (limited to 'src')
-rw-r--r--src/SSystem/SComponent/c_m3d.cpp2
-rw-r--r--src/d/actor/d_a_alink.cpp5066
-rw-r--r--src/d/actor/d_a_npc_bou.cpp18
-rw-r--r--src/d/actor/d_a_npc_kolin.cpp22
4 files changed, 4937 insertions, 171 deletions
diff --git a/src/SSystem/SComponent/c_m3d.cpp b/src/SSystem/SComponent/c_m3d.cpp
index 43c90e866e..1e048cc834 100644
--- a/src/SSystem/SComponent/c_m3d.cpp
+++ b/src/SSystem/SComponent/c_m3d.cpp
@@ -2150,7 +2150,7 @@ static int cM3d_2PlaneCrossLine(const cM3dGPla& pPlaneA, const cM3dGPla& pPlaneB
/* 8026E8A0-8026E980 2691E0 00E0+00 0/0 1/1 0/0 .text
* cM3d_3PlaneCrossPos__FRC8cM3dGPlaRC8cM3dGPlaRC8cM3dGPlaP3Vec */
-bool cM3d_3PlaneCrossPos(const cM3dGPla& pPlaneA, const cM3dGPla& pPlaneB, const cM3dGPla& pPlaneC,
+BOOL cM3d_3PlaneCrossPos(const cM3dGPla& pPlaneA, const cM3dGPla& pPlaneB, const cM3dGPla& pPlaneC,
Vec* pVecOut) {
cM3dGLin lin;
if (!cM3d_2PlaneCrossLine(pPlaneA, pPlaneB, &lin)) {
diff --git a/src/d/actor/d_a_alink.cpp b/src/d/actor/d_a_alink.cpp
index 2d4106e69d..4823cd6053 100644
--- a/src/d/actor/d_a_alink.cpp
+++ b/src/d/actor/d_a_alink.cpp
@@ -42,6 +42,13 @@
#include "d/d_bomb.h"
#include "d/d_meter2_info.h"
#include "d/actor/d_a_kytag05.h"
+#include "d/actor/d_a_b_mgn.h"
+#include "d/actor/d_a_npc_bou.h"
+#include "d/actor/d_a_npc_kolin.h"
+#include "f_op/f_op_kankyo_mng.h"
+#include "d/actor/d_a_tag_mstop.h"
+#include "d/actor/d_a_tag_mwait.h"
+#include "d/actor/d_a_canoe.h"
static fopAc_ac_c* daAlink_searchTagKandelaar(fopAc_ac_c* i_actor, void* i_data);
@@ -108,13 +115,10 @@ static u8 struct_80450FC4[4];
/* 80450FC8-80450FCC -00001 0004+00 5/5 0/0 0/0 .sbss None */
/* 80450FC8 0001+00 data_80450FC8 None */
-static bool m_eye_move_flg;
+bool daAlink_matAnm_c::m_eye_move_flg;
/* 80450FC9 0003+00 data_80450FC9 None */
-#pragma push
-#pragma force_active on
u8 daAlink_matAnm_c::m_morf_frame;
-#pragma pop
// temporary for literal matching
bool daAlink_c::checkWindSpeedOnXZ() const {
@@ -244,18 +248,305 @@ void daAlink_c::setMatrixWorldAxisRot(MtxP param_0, s16 param_1, s16 param_2, s1
}
/* 8009DD90-8009E7B8 0986D0 0A28+00 2/2 0/0 0/0 .text jointControll__9daAlink_cFi */
-void daAlink_c::jointControll(int param_0) {
- // NONMATCHING
+// NONMATCHING - stack issues
+int daAlink_c::jointControll(int param_0) {
+ csXyz sp18(0, 0, 0);
+ int var_r27 = 0;
+
+ mDoExt_MtxCalcOldFrame* temp = field_0x2060;
+ J3DTransformInfo* temp_r3 = temp->getOldFrameTransInfo(param_0);
+ J3DTransformInfo sp80 = *temp_r3;
+
+ Quaternion sp50;
+ Quaternion sp40;
+ Quaternion sp30;
+ Quaternion sp20 = *temp->getOldFrameQuaternion(param_0);
+
+ csXyz sp10(0, 1, 2);
+
+ if (checkWolf()) {
+ if (param_0 == 0) {
+ if (mProcID == PROC_TOOL_DEMO) {
+ J3DTransformInfo* temp_r3_3 = field_0x2060->getOldFrameTransInfo(0);
+ temp_r3_3->mTranslate.x = 0.0f;
+ temp_r3_3->mTranslate.z = 0.0f;
+ } else if (checkRootTransClearMode()) {
+ J3DTransformInfo* temp_r28 = field_0x2060->getOldFrameTransInfo(0);
+
+ if (checkRootTransZClearMode()) {
+ temp_r28->mTranslate.z = field_0x3588.z;
+ }
+
+ if (checkRootTransXClearMode()) {
+ temp_r28->mTranslate.x = field_0x3588.x;
+ }
+
+ if (checkRootTransYClearMode()) {
+ temp_r28->mTranslate.y = field_0x33b0;
+ }
+ }
+
+ sp18.set(field_0x3080, 0, field_0x3082);
+ sp10.set(2, 1, 0);
+ sp80 = *field_0x2060->getOldFrameTransInfo(0);
+ var_r27 |= 2;
+ } else if (param_0 == 3) {
+ sp18.set((field_0x30d6 + field_0x30b2), 0, field_0x30b0);
+ sp10.set(2, 0, 1);
+ } else if (param_0 == 0x1A) {
+ sp18.set(0, -field_0x2fec, 0);
+ sp10.set(2, 1, 0);
+ } else if (param_0 >= 0x25 && param_0 <= 0x27) {
+ sp18.set(0, field_0x3040[param_0 + 5], 0);
+ sp10.set(2, 1, 0);
+ } else if (param_0 == 2) {
+ sp18.set(0, -field_0x2fec, 0);
+ sp10.set(2, 1, 0);
+ } else if (param_0 == 4) {
+ sp18.set(field_0x3124, -field_0x3126, field_0x3128);
+ sp10.set(2, 1, 0);
+ }
+ } else if (param_0 == 4) {
+ sp18.set(field_0x3124, -field_0x3126, field_0x3128);
+ sp10.set(2, 1, 0);
+ } else if (param_0 == 0x10) {
+ sp18.set(field_0x3088, 0, -field_0x308a);
+ sp10.set(2, 0, 1);
+ } else if (param_0 == 1) {
+ s16 sp8;
+ if (checkReinRide() && !checkHorseLieAnime() && mProcID != PROC_HORSE_RUN && mProcID != PROC_BOAR_RUN) {
+ sp8 = (s16)(mBodyAngle.x - shape_angle.x);
+ } else {
+ sp8 = mBodyAngle.x;
+ }
+
+ if (sp8 || field_0x30c8 != 0 || mBodyAngle.z != 0) {
+ setMatrixWorldAxisRot(mpLinkModel->getAnmMtx(1), sp8, field_0x30c8, mBodyAngle.z, 1, NULL);
+ }
+ } else if (param_0 == 2) {
+ if (field_0x30c8 != 0) {
+ setMatrixWorldAxisRot(mpLinkModel->getAnmMtx(2), 0, field_0x30c8, 0, 1, NULL);
+ }
+ } else if (param_0 == 0) {
+ if (mProcID == PROC_TOOL_DEMO || mProcID == PROC_GANON_FINISH) {
+ J3DTransformInfo* temp_r3_4 = field_0x2060->getOldFrameTransInfo(0);
+ temp_r3_4->mTranslate.x = 0.0f;
+ temp_r3_4->mTranslate.z = 0.0f;
+ } else if (checkRootTransClearMode()) {
+ J3DTransformInfo* temp_r28_2 = field_0x2060->getOldFrameTransInfo(0);
+ if (checkRootTransZClearMode()) {
+ temp_r28_2->mTranslate.z = field_0x3588.z;
+ }
+ if (checkRootTransXClearMode()) {
+ temp_r28_2->mTranslate.x = field_0x3588.x;
+ }
+ if (checkRootTransYClearMode()) {
+ temp_r28_2->mTranslate.y = field_0x33b0;
+ }
+ }
+
+ sp18.set(field_0x3080, 0, field_0x3082);
+ sp10.set(2, 0, 1);
+
+ sp80 = *field_0x2060->getOldFrameTransInfo(0);
+ var_r27 |= 2;
+ if (field_0x2f99 == 0x60) {
+ sp80.mTranslate.x -= field_0x384c->x;
+ sp80.mTranslate.y -= field_0x384c->y;
+ sp80.mTranslate.z -= field_0x384c->z;
+ }
+ } else if (param_0 == 0x1B) {
+ setMatrixWorldAxisRot(mpLinkModel->getAnmMtx(param_0), mFootData1[0].field_0x6, 0, 0, 1, NULL);
+ } else if (param_0 == 0x1D) {
+ setMatrixWorldAxisRot(mpLinkModel->getAnmMtx(param_0), mFootData1[1].field_0x6, 0, 0, 1, NULL);
+ } else if (param_0 == 5) {
+ if (checkReinRide() && checkBowAnime()) {
+ var_r27 = 1;
+ sp50 = *field_0x2060->getOldFrameQuaternion(param_0);
+ JMAEulerToQuat(0, 0, 5000, &sp40);
+ mDoMtx_QuatConcat(&sp50, &sp40, &sp30);
+ }
+ } else if ((param_0 == 0xD || param_0 == 0xC) && (checkCanoeFishingWaitAnime() || checkUnderMove0BckNoArc(ANM_CANOE_FISH_LEFT) || checkUnderMove0BckNoArc(ANM_CANOE_FISH_RIGHT))) {
+ if (param_0 == 0xD) {
+ sp18 = field_0x3160;
+ } else {
+ sp18 = mFishingArm1Angle;
+ }
+ }
+
+ if (sp18.x != 0 || sp18.y != 0 || sp18.z != 0) {
+ var_r27 |= 1;
+ if (sp18.y != 0) {
+ sp50 = *field_0x2060->getOldFrameQuaternion(param_0);
+
+ if (sp10.y == 0) {
+ JMAEulerToQuat(sp18.y, 0, 0, &sp40);
+ } else if (sp10.y == 1) {
+ JMAEulerToQuat(0, sp18.y, 0, &sp40);
+ } else {
+ JMAEulerToQuat(0, 0, sp18.y, &sp40);
+ }
+
+ mDoMtx_QuatConcat(&sp50, &sp40, &sp30);
+ } else {
+ sp30 = *field_0x2060->getOldFrameQuaternion(param_0);
+ }
+
+ if (sp18.x != 0) {
+ sp50 = sp30;
+
+ if (sp10.x == 0) {
+ JMAEulerToQuat(sp18.x, 0, 0, &sp40);
+ } else if (sp10.x == 1) {
+ JMAEulerToQuat(0, sp18.x, 0, &sp40);
+ } else {
+ JMAEulerToQuat(0, 0, sp18.x, &sp40);
+ }
+
+ mDoMtx_QuatConcat(&sp50, &sp40, &sp30);
+ }
+
+ if (sp18.z != 0) {
+ sp50 = sp30;
+
+ if (sp10.z == 0) {
+ JMAEulerToQuat(sp18.z, 0, 0, &sp40);
+ } else if (sp10.z == 1) {
+ JMAEulerToQuat(0, sp18.z, 0, &sp40);
+ } else {
+ JMAEulerToQuat(0, 0, sp18.z, &sp40);
+ }
+
+ mDoMtx_QuatConcat(&sp50, &sp40, &sp30);
+ }
+ }
+
+ if (var_r27 != 0) {
+ MtxP temp_r26 = mpLinkModel->getAnmMtx(param_0);
+
+ J3DTransformInfo* var_r25;
+ if ((var_r27 & 2)) {
+ var_r25 = &sp80;
+ } else {
+ var_r25 = field_0x2060->getOldFrameTransInfo(param_0);
+ }
+
+ Quaternion* spC;
+ if ((var_r27 & 1)) {
+ spC = &sp30;
+ } else {
+ spC = field_0x2060->getOldFrameQuaternion(param_0);
+ }
+
+ mDoMtx_stack_c::transS(sp80.mTranslate.x, sp80.mTranslate.y, sp80.mTranslate.z);
+ mDoMtx_stack_c::quatM(&sp20);
+ mDoMtx_stack_c::inverse();
+ cMtx_concat(temp_r26, mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
+
+ MTXQuat(temp_r26, (PSQuaternion*)spC);
+
+ temp_r26[0][3] = var_r25->mTranslate.x;
+ temp_r26[1][3] = var_r25->mTranslate.y;
+ temp_r26[2][3] = var_r25->mTranslate.z;
+
+ cMtx_concat(J3DSys::mCurrentMtx, temp_r26, J3DSys::mCurrentMtx);
+ cMtx_copy(J3DSys::mCurrentMtx, temp_r26);
+ }
+
+ return 1;
}
/* 8009E7B8-8009E91C 0990F8 0164+00 1/1 0/0 0/0 .text setUpperFront__9daAlink_cFv */
void daAlink_c::setUpperFront() {
- // NONMATCHING
+ if ((checkReinRide() && checkUpperReadyThrowAnime()) || (checkBoardRide() && !checkNoUpperAnime())) {
+ cMtx_copy(J3DSys::mCurrentMtx, mRootMtx);
+
+ J3DAnmTransform* temp_r3 = getNowAnmPackUpper(UPPER_2);
+ if (temp_r3 != NULL) {
+ MtxP temp_r28 = mDoMtx_stack_c::get();
+
+ J3DTransformInfo sp18;
+ temp_r3->getTransform(0, &sp18);
+
+ Quaternion sp8;
+ JMAEulerToQuat(sp18.mRotation.x, sp18.mRotation.y, sp18.mRotation.z, &sp8);
+ MTXQuat(temp_r28, (PSQuaternion*)&sp8);
+
+ cMtx_concat(mpLinkModel->getBaseTRMtx(), temp_r28, J3DSys::mCurrentMtx);
+ J3DSys::mCurrentMtx[0][3] = mRootMtx[0][3];
+ J3DSys::mCurrentMtx[1][3] = mRootMtx[1][3];
+ J3DSys::mCurrentMtx[2][3] = mRootMtx[2][3];
+ } else {
+ mDoMtx_stack_c::quatS(field_0x2060->getOldFrameQuaternion( 0));
+ mDoMtx_stack_c::inverse();
+ cMtx_concat(J3DSys::mCurrentMtx, mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
+ }
+
+ field_0x2f90 = 1;
+ }
}
/* 8009E91C-8009EB18 09925C 01FC+00 1/1 0/0 0/0 .text changeBlendRate__9daAlink_cFi */
void daAlink_c::changeBlendRate(int param_0) {
- // NONMATCHING
+ if (field_0x2fb6 == 5) {
+ if (param_0 == 0) {
+ mNowAnmPackUpper[2].setRatio(0.0f);
+ } else if (param_0 == 5) {
+ mNowAnmPackUpper[2].setRatio(field_0x3444);
+ } else if (param_0 == 0xA) {
+ mNowAnmPackUpper[2].setRatio(0.0f);
+ } else if (param_0 == 0xF) {
+ mNowAnmPackUpper[2].setRatio(field_0x3444);
+ }
+ } else if (field_0x2fb6 == 1) {
+ if (param_0 == 0) {
+ mNowAnmPackUpper[2].setRatio(0.0f);
+ } else if (param_0 == 5) {
+ mNowAnmPackUpper[2].setRatio(field_0x3444);
+ }
+ } else if (field_0x2fb6 == 2) {
+ if (param_0 == 0xA) {
+ mNowAnmPackUpper[2].setRatio(0.0f);
+ } else if (param_0 == 0xF) {
+ mNowAnmPackUpper[2].setRatio(field_0x3444);
+ }
+ } else if (field_0x2fb6 == 3) {
+ if (param_0 == 4) {
+ mNowAnmPackUpper[2].setRatio(0.0f);
+ } else if (param_0 == 5) {
+ mNowAnmPackUpper[2].setRatio(field_0x3444);
+ }
+ } else if (field_0x2fb6 == 7) {
+ if (param_0 == 0) {
+ mNowAnmPackUpper[2].setRatio(0.0f);
+ } else if (param_0 == 4) {
+ mNowAnmPackUpper[2].setRatio(1.0f);
+ } else if (param_0 == 5) {
+ mNowAnmPackUpper[2].setRatio(0.0f);
+ } else if (param_0 == 0xF) {
+ mNowAnmPackUpper[2].setRatio(1.0f);
+ }
+ } else if (field_0x2fb6 == 6) {
+ if (param_0 == 4) {
+ setDoubleAnimeBlendRatio(1.0f);
+ } else if (param_0 == 5) {
+ setDoubleAnimeBlendRatio(0.0f);
+ }
+ } else if (field_0x2fb6 == 8) {
+ if (param_0 == 4) {
+ mNowAnmPackUpper[2].setRatio(0.0f);
+ mNowAnmPackUpper[1].setRatio(1.0f);
+ } else if (param_0 == 5) {
+ mNowAnmPackUpper[2].setRatio(field_0x3444);
+ mNowAnmPackUpper[1].setRatio(0.0f);
+ }
+ } else if (field_0x2fb6 == 4) {
+ if (param_0 == 0) {
+ mNowAnmPackUpper[2].setRatio(0.0f);
+ } else if (param_0 == 0xD) {
+ mNowAnmPackUpper[2].setRatio(field_0x3444);
+ }
+ }
}
/* 8009EB18-8009EB58 099458 0040+00 1/1 0/0 0/0 .text resetRootMtx__9daAlink_cFv */
@@ -306,8 +597,49 @@ static const u8 lit_6848[8] = {
};
/* 8009ECA0-8009EF38 0995E0 0298+00 1/1 0/0 0/0 .text headModelCallBack__9daAlink_cFi */
-void daAlink_c::headModelCallBack(int param_0) {
- // NONMATCHING
+int daAlink_c::headModelCallBack(int param_0) {
+ if (mpDemoHDTmpBck == NULL || !mpDemoHDTmpBck->getBckAnm() || (checkEndResetFlg1(ERFLG1_UNK_400000) && param_0 < 6)) {
+ if (checkNoResetFlg2(FLG2_STATUS_WINDOW_DRAW)) {
+ mDoMtx_stack_c::copy(J3DSys::mCurrentMtx);
+ mDoMtx_stack_c::ZrotM(-6500);
+ mpLinkHatModel->setAnmMtx(param_0, mDoMtx_stack_c::get());
+ cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
+ } else if (param_0 >= 6) {
+ mDoMtx_stack_c::copy(J3DSys::mCurrentMtx);
+
+ if (param_0 == 6) {
+ mDoMtx_stack_c::XYZrotM(0, (field_0x3040[7] >> 1), (field_0x302c[7] >> 1));
+ } else {
+ int temp_r28 = param_0 - 7;
+ if (temp_r28 == 0) {
+ mDoMtx_stack_c::XYZrotM(0, (field_0x3040[7] >> 1), ((field_0x302c[7] >> 1) + field_0x3066[0]));
+ } else {
+ mDoMtx_stack_c::XYZrotM(0, field_0x3040[param_0], (field_0x302c[param_0] + field_0x3066[temp_r28]));
+ }
+ }
+
+ if (mProcID == PROC_METAMORPHOSE) {
+ mDoMtx_stack_c::scaleM(field_0x347c, 1.0f, 1.0f);
+ }
+
+ mpLinkHatModel->setAnmMtx(param_0, mDoMtx_stack_c::get());
+ cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
+ } else {
+ s16 temp_r27 = shape_angle.y;
+ shape_angle.y = field_0x3062;
+ setMatrixWorldAxisRot(mpLinkHatModel->getAnmMtx(param_0), field_0x302c[param_0], 0, field_0x3040[param_0], 0, NULL);
+ shape_angle.y = temp_r27;
+ }
+ }
+
+ if (checkZoraWearAbility() && param_0 == 6) {
+ mDoMtx_stack_c::copy(J3DSys::mCurrentMtx);
+ mDoMtx_stack_c::scaleM(1.2f, 1.0f, 1.0f);
+ mpLinkHatModel->setAnmMtx(param_0, mDoMtx_stack_c::get());
+ cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
+ }
+
+ return 1;
}
/* 8009EF38-8009EF7C 099878 0044+00 1/1 0/0 0/0 .text daAlink_headModelCallBack__FP8J3DJointi */
@@ -509,7 +841,256 @@ static const GXColorS10 waterColor = {0, 0, 0, 0};
/* 8009F034-8009FFF8 099974 0FC4+00 1/1 0/0 0/0 .text setHatAngle__9daAlink_cFv */
void daAlink_c::setHatAngle() {
- // NONMATCHING
+ if (field_0x2060->getOldFrameFlg()) {
+ if (checkEndResetFlg0(ERFLG0_UNK_800000)) {
+ for (int i = 0; i < 3; i++) {
+ field_0x3054[i] = 0;
+ field_0x305a[i] = 0;
+ }
+ }
+
+ cXyz spB4;
+ cXyz spA8;
+ cXyz sp9C;
+ cXyz sp90;
+
+ int sp38;
+ if (checkNoResetFlg2(daPy_FLG2(FLG2_UNK_100000 | FLG2_UNK_80000))) {
+ sp38 = 0;
+ } else {
+ sp38 = 7;
+ }
+
+ mDoMtx_multVecZero(mpLinkHatModel->getAnmMtx(sp38), &spA8);
+
+ BOOL sp34;
+ if (!checkEndResetFlg1(ERFLG1_UNK_80000) && (field_0x35b8.abs2() > 100.0f || (checkEndResetFlg0(ERFLG0_UNK_8) && (field_0x3400 * field_0x3400) + (field_0x3404 * field_0x3404) > 100.0f))) {
+ sp34 = 1;
+ } else {
+ sp34 = 0;
+ }
+
+ f32 sp40;
+ dKyw_get_AllWind_vec(&spA8, &spB4, &sp40);
+
+ if (checkModeFlg(0x40000) || checkEndResetFlg1(ERFLG1_UNK_80000)) {
+ sp40 = 0.0f;
+ } else if (sp34 != 0) {
+ sp40 = 1.0f;
+ }
+
+ f32 var_f29;
+ f32 var_f28;
+ f32 temp_f26 = 25.0f * (sp40 * sp40);
+
+ s16 sp14 = field_0x3060;
+ s16 sp12 = field_0x3062;
+ cXyz sp84 = eyePos - field_0x34e0;
+
+ if (checkMagneBootsOn()) {
+ mDoMtx_multVecSR(mMagneBootInvMtx, &sp84, &sp84);
+ mDoMtx_multVecZero(mpLinkHatModel->getAnmMtx(0), &sp90);
+ sp90 = field_0x34e0 - sp90;
+ mDoMtx_multVecSR(mMagneBootInvMtx, &sp90, &sp90);
+ }
+
+ field_0x3062 = sp84.atan2sX_Z();
+
+ s16 spE;
+ if (mProcID == PROC_GOAT_CATCH) {
+ mDoMtx_multVecSR(mpLinkModel->getAnmMtx(1), &cXyz::BaseY, &sp90);
+ spE = sp90.atan2sX_Z();
+ } else if (checkUnderMove0BckNoArc(ANM_HORSE_WAIT_B) && mUnderFrameCtrl[0].getFrame() < 77.0f) {
+ mDoMtx_multVecSR(mpLinkModel->getAnmMtx(4), &cXyz::BaseX, &sp90);
+ spE = sp90.atan2sX_Z();
+ } else if (mProcID == PROC_HAND_PAT && mProcVar2.field_0x300c == 0) {
+ spE = shape_angle.y + mBodyAngle.y + 0x8000;
+ } else {
+ spE = (shape_angle.y + mBodyAngle.y);
+ }
+
+ if (cLib_distanceAngleS(field_0x3062, spE) > 0x7000) {
+ field_0x3060 = cM_atan2s(-sp84.y, -sp84.absXZ());
+ } else {
+ field_0x3060 = sp84.atan2sY_XZ();
+ }
+
+ f32 temp_f1 = sp84.absXZ();
+ if (temp_f1 < 0.01f) {
+ var_f29 = cM_ssin(spE);
+ var_f28 = cM_scos(spE);
+ } else {
+ f32 temp_f31 = 1.0f / temp_f1;
+ var_f29 = sp84.x * temp_f31;
+ var_f28 = sp84.z * temp_f31;
+ }
+
+ s16 spC;
+ s16 spA;
+ if (checkEndResetFlg0(ERFLG0_UNK_800000)) {
+ sp9C = cXyz::Zero;
+ spC = 0;
+ spA = 0;
+ } else {
+ spC = ((s16)(field_0x3060 - sp14) >> 1);
+ if (abs(field_0x3060) > 0x3000 && abs(field_0x3060) < 0x5000) {
+ spA = 0;
+ } else {
+ spA = ((s16)(field_0x3062 - sp12) >> 1);
+ }
+
+ sp9C = field_0x34c8 - spA8;
+ }
+
+ if (checkNoResetFlg0(FLG0_SWIM_UP)) {
+ sp9C += spB4 * temp_f26;
+ } else if (field_0x3798.abs2XZ(current.pos) < 1.0f) {
+ sp9C.x = 0.0f;
+ sp9C.z = 0.0f;
+ }
+
+ sp9C += field_0x35b8;
+
+ if (checkEndResetFlg0(ERFLG0_UNK_8)) {
+ sp9C.x += field_0x3400;
+ sp9C.z += field_0x3404;
+ }
+
+ multVecMagneBootInvMtx(&sp9C);
+
+ if (!checkNoResetFlg0(FLG0_SWIM_UP)) {
+ sp9C.y -= 2.0f;
+ } else if (checkMagneBootsOn() && getMoveBGActorName(mMagneLineChk, FALSE) == PROC_Obj_MagneArm) {
+ sp9C.y += 5.0f;
+ } else {
+ sp9C.y -= 5.0f;
+ }
+
+ if (fabsf(sp9C.x) < 0.01f) {
+ sp9C.x = (f32) 0.0f;
+ }
+
+ if (fabsf(sp9C.z) < 0.01f) {
+ sp9C.z = (f32) 0.0f;
+ }
+
+ if (checkMagneBootsOn()) {
+ mDoMtx_stack_c::copy(mMagneBootInvMtx);
+ mDoMtx_stack_c::concat(mpLinkModel->getAnmMtx(2));
+ } else {
+ mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(2));
+ }
+
+ cXyz sp78;
+ cXyz sp6C;
+ mDoMtx_stack_c::multVecSR(&cXyz::BaseY, &sp78);
+ mDoMtx_stack_c::multVec(&cXyz::BaseX, &sp6C);
+
+ s16 sp18;
+ s16 sp16;
+
+ int sp30;
+ if (sp6C.y < mDoMtx_stack_c::get()[1][3] && !checkUnderMove0BckNoArc(ANM_DIE)) {
+ sp30 = cM_atan2s(-sp78.y, -sp78.absXZ());
+ } else {
+ sp30 = sp78.atan2sY_XZ();
+ }
+ sp30 -= 0x3800;
+
+ s16* temp_r29 = &field_0x302c[7];
+ s16* temp_r28 = &field_0x3040[7];
+ s16* sp2C = &field_0x3054[0];
+ s16* sp28 = &field_0x305a[0];
+ *temp_r29 -= spC;
+ *temp_r28 -= spA;
+ sp18 = *temp_r29;
+ sp16 = *temp_r28;
+
+ f32 temp_f27 = (sp9C.z * var_f28) + (sp9C.x * var_f29);
+ s16 sp10 = cM_atan2s(sp9C.y, -temp_f27);
+ int sp24 = cLib_minMaxLimit<int>(sp10 - field_0x3060, -0x3800, 0x3800);
+
+ sp10 = (sp24 + field_0x3060);
+ if (sp10 < sp30) {
+ sp10 = sp30;
+ }
+
+ sp24 = (sp10 - field_0x3060);
+ if (checkEndResetFlg0(ERFLG0_UNK_800000)) {
+ *temp_r29 = sp24;
+ } else {
+ cLib_addCalcAngleS2(temp_r29, sp24, 5, 0x400);
+ }
+
+ *temp_r29 = cLib_minMaxLimit<s16>((*temp_r29 + *sp2C), -0x3800, 0x3800);
+ sp10 = cLib_minMaxLimit<s16>(cM_atan2s(-((sp9C.x * var_f28) - (sp9C.z * var_f29)), JMAFastSqrt((temp_f27 * temp_f27) + (sp9C.y * sp9C.y))), -0x2800, 0x2800);
+
+ if (checkEndResetFlg0(ERFLG0_UNK_800000)) {
+ *temp_r28 = sp10;
+ } else {
+ cLib_addCalcAngleS2(temp_r28, sp10, 5, 0x400);
+ }
+
+ *temp_r28 = cLib_minMaxLimit<s16>((*temp_r28 + *sp28), -0x2800, 0x2800);
+
+ *sp2C = 0.2f * (*temp_r29 - sp18);
+ *sp28 = 0.2f * (*temp_r28 - sp16);
+
+ sp10 = (*temp_r29 + field_0x3060);
+ temp_r29++;
+ temp_r28++;
+ sp2C++;
+ sp28++;
+
+ for (int i = 1; i < 3; i++, temp_r29++, temp_r28++, sp2C++, sp28++) {
+ temp_r29[0] -= ((s16)(temp_r29[-1] - sp18) >> 1);
+ temp_r28[0] -= ((s16)(temp_r28[-1] - sp16) >> 1);
+ sp18 = temp_r29[0];
+ sp16 = temp_r28[0];
+
+ if (checkEndResetFlg0(ERFLG0_UNK_800000)) {
+ temp_r29[0] = 0;
+ temp_r28[0] = 0;
+ } else {
+ cLib_addCalcAngleS2(temp_r29, 0, 5, 0x400);
+ cLib_addCalcAngleS2(temp_r28, 0, 5, 0x400);
+ }
+
+ temp_r29[0] = cLib_minMaxLimit<s16>((temp_r29[0] + *sp2C), -0x1000, 0x1000);
+
+ sp10 += temp_r29[0];
+ if (sp10 < sp30) {
+ temp_r29[0] += (sp30 - sp10);
+ sp10 = sp30;
+ }
+
+ temp_r28[0] = cLib_minMaxLimit<s16>((temp_r28[0] + *sp28), -0x2000, 0x2000);
+
+ *sp2C = 0.2f * (temp_r29[0] - sp18);
+ *sp28 = 0.2f * (temp_r28[0] - sp16);
+ }
+
+ f32 var_f30 = (temp_f26 + (0.65f * field_0x34c8.abs(spA8))) / 30.0f;
+ if (var_f30 > 1.0f) {
+ var_f30 = 1.0f;
+ }
+
+ f32 var_f25 = var_f30;
+ if (sp34 != 0 && !checkNoResetFlg2(daPy_FLG2(FLG2_UNK_100000 | FLG2_UNK_80000))) {
+ var_f30 = 3.5f;
+ var_f25 = 1.0f;
+ }
+
+ s16 sp8 = 1500.0f + (4060.0f * var_f30);
+ field_0x3064 += sp8;
+
+ for (int i = 0; i < 3; i++) {
+ field_0x3066[i] = var_f25 * cM_deg2s(((i + 1) * 4)) * cM_scos((field_0x3064 - ((i + 3) * sp8)));
+ }
+
+ field_0x34c8 = spA8;
+ setHairAngle(&sp9C, var_f29, var_f28);
+ }
}
/* 8009FFF8-800A002C 09A938 0034+00 1/1 0/0 0/0 .text calcHairAngle__9daAlink_cFPs */
@@ -520,7 +1101,76 @@ void daAlink_c::calcHairAngle(s16* o_angle) {
/* 800A002C-800A0744 09A96C 0718+00 1/1 0/0 0/0 .text setHairAngle__9daAlink_cFP4cXyzff
*/
void daAlink_c::setHairAngle(cXyz* param_0, f32 param_1, f32 param_2) {
- // NONMATCHING
+ f32 var_f31 = param_0->abs();
+ f32 temp_f27 = param_0->absXZ();
+
+ if (var_f31 < 1.0f || temp_f27 < 1.0f) {
+ calcHairAngle(&field_0x302c[1]);
+ calcHairAngle(&field_0x3040[1]);
+ calcHairAngle(&field_0x302c[2]);
+ calcHairAngle(&field_0x3040[2]);
+ calcHairAngle(&field_0x302c[3]);
+ calcHairAngle(&field_0x3040[3]);
+ calcHairAngle(&field_0x302c[4]);
+ calcHairAngle(&field_0x3040[4]);
+ calcHairAngle(&field_0x302c[5]);
+ calcHairAngle(&field_0x3040[5]);
+ field_0x3070 = -0x8000;
+ field_0x3072 = -0x8000;
+ field_0x3074 = -0x8000;
+ field_0x3076 = -0x8000;
+ return;
+ }
+
+ var_f31 *= 0.033333335f;
+ if (var_f31 > 1.0f) {
+ var_f31 = 1.0f;
+ }
+
+ var_f31 = 0.15f + (0.85f * var_f31);
+
+ field_0x3070 += (s16)(1000.0f + cM_rndF(500.0f) + (var_f31 * (3000.0f + cM_rndF(1000.0f))));
+ field_0x3072 += (s16)(1000.0f + cM_rndF(500.0f) + (var_f31 * (3000.0f + cM_rndF(1000.0f))));
+ field_0x3074 += (s16)(1000.0f + cM_rndF(500.0f) + (var_f31 * (5000.0f + cM_rndF(1500.0f))));
+ field_0x3076 += (s16)(1000.0f + cM_rndF(500.0f) + (var_f31 * (5000.0f + cM_rndF(1500.0f))));
+
+ temp_f27 = 1.0f / temp_f27;
+ param_0->x *= temp_f27;
+ param_0->z *= temp_f27;
+
+ f32 temp_f30 = (param_0->x * param_2) - (param_0->z * param_1);
+ f32 temp_f29 = (param_0->x * param_1) + (param_0->z * param_2);
+ f32 temp_f28 = var_f31 * (0.5f * (1.0f + cM_scos(field_0x3070)));
+ f32 sp10 = var_f31 * (0.5f * (1.0f + cM_scos(field_0x3072)));
+ f32 spC = var_f31 * (0.5f * (1.0f + cM_scos(field_0x3074)));
+ f32 sp8 = var_f31 * (0.5f * (1.0f + cM_scos(field_0x3076)));
+
+ if (temp_f30 > 0.0f) {
+ field_0x3040[1] = 6000.0f * temp_f28 * temp_f30;
+ field_0x3040[2] = 8000.0f * temp_f28 * temp_f30;
+ field_0x3040[3] = 2000.0f * sp10 * temp_f30;
+ field_0x3040[4] = 7000.0f * spC * temp_f30;
+ field_0x3040[5] = 2500.0f * sp8 * temp_f30;
+ } else {
+ field_0x3040[1] = 10000.0f * temp_f28 * temp_f30;
+ field_0x3040[2] = 2000.0f * temp_f28 * temp_f30;
+ field_0x3040[3] = 8000.0f * sp10 * temp_f30;
+ field_0x3040[4] = 2500.0f * spC * temp_f30;
+ field_0x3040[5] = 7000.0f * sp8 * temp_f30;
+ }
+
+ if (temp_f29 > 0.0f) {
+ field_0x302c[1] = -9000.0f * temp_f28 * temp_f29;
+ field_0x302c[2] = -15000.0f * temp_f28 * temp_f29;
+ field_0x302c[3] = -15000.0f * sp10 * temp_f29;
+ } else {
+ field_0x302c[1] = -1000.0f * temp_f28 * temp_f29;
+ field_0x302c[2] = -5000.0f * temp_f28 * temp_f29;
+ field_0x302c[3] = -5000.0f * sp10 * temp_f29;
+ }
+
+ field_0x302c[4] = -7000.0f * spC * temp_f29;
+ field_0x302c[5] = -7000.0f * sp8 * temp_f29;
}
/* 800A0744-800A07D8 09B084 0094+00 0/0 1/1 0/0 .text setLookPosFromOut__9daAlink_cFP4cXyz */
@@ -562,31 +1212,503 @@ bool daAlink_c::checkAttentionPosAngle(cXyz* param_0) {
/* 800A0868-800A093C 09B1A8 00D4+00 1/1 0/0 0/0 .text
* checkActorPosAngle__9daAlink_cFP10fopAc_ac_cPP4cXyz */
-void daAlink_c::checkActorPosAngle(fopAc_ac_c* param_0, cXyz** param_1) {
- // NONMATCHING
+bool daAlink_c::checkActorPosAngle(fopAc_ac_c* param_0, cXyz** param_1) {
+ if (param_0 != NULL && checkAttentionPosAngle(&param_0->eyePos)) {
+ s16 temp_r3 = fopAcM_GetName(param_0);
+
+ if (checkEnemyGroup(param_0)) {
+ field_0x3504 = param_0->eyePos;
+ field_0x311c = 0x50;
+ }
+
+ if (temp_r3 == PROC_Obj_Wchain || (temp_r3 == PROC_B_MGN && !((daB_MGN_c*)param_0)->isDown())) {
+ onNoResetFlg1(FLG1_MIDNA_HAIR_ATN_POS);
+ mMidnaHairAtnPos = param_0->eyePos;
+ }
+
+ *param_1 = &param_0->eyePos;
+ return 1;
+ }
+
+ return 0;
}
/* 800A093C-800A142C 09B27C 0AF0+00 1/1 0/0 0/0 .text getNeckAimPos__9daAlink_cFP4cXyzPii
*/
-void daAlink_c::getNeckAimPos(cXyz* param_0, int* param_1, int param_2) {
- // NONMATCHING
+cXyz* daAlink_c::getNeckAimPos(cXyz* param_0, int* param_1, int param_2) {
+ fopAc_ac_c* var_r29 = NULL;
+ s16 spA = field_0x311c;
+ field_0x311c = 0;
+
+ if (mProcID == PROC_GOAT_CATCH || mProcID == PROC_GET_ITEM || mProcID == PROC_WOLF_GANON_CATCH || mProcID == PROC_NOT_USE_ITEM || mProcID == PROC_DUNGEON_WARP_READY || mProcID == PROC_GOAT_STROKE) {
+ var_r29 = field_0x280c.getActor();
+ } else if (dComIfGp_checkPlayerStatus0(0, 0x10)) {
+ if (mProcID != PROC_NOD && mProcID != PROC_EYE_AWAY && mProcID != PROC_GLARE) {
+ var_r29 = fopAcM_getTalkEventPartner(this);
+ if (var_r29 != NULL) {
+ daMidna_c* sp18 = (daMidna_c*)getMidnaActor();
+ s16 temp_r3_3 = fopAcM_GetName(var_r29);
+
+ if (temp_r3_3 == PROC_MIDNA || temp_r3_3 == PROC_Tag_Wljump || (temp_r3_3 == PROC_Tag_Mhint && ((daTagMhint_c*)var_r29)->checkNoAttention()) || (temp_r3_3 == PROC_Tag_Mstop && ((daTagMstop_c*)var_r29)->checkNoAttention()) || (temp_r3_3 == PROC_Tag_Mwait && ((daTagMwait_c*)var_r29)->checkEndMessage())) {
+ *param_1 = 1;
+ return &sp18->eyePos;
+ }
+
+ if (temp_r3_3 == PROC_Tag_Mhint || temp_r3_3 == PROC_Tag_Mstop) {
+ sp18->setForceNeckAimPos(var_r29->eyePos);
+ }
+ }
+ }
+ } else if (mProcID == PROC_BOTTLE_OPEN && mEquipItem == FAIRY) {
+ var_r29 = field_0x285c.getActor();
+ } else if (mProcID == PROC_FISHING_CAST || mProcID == PROC_CANOE_FISHING_WAIT || mProcID == PROC_CANOE_FISHING_REEL || mProcID == PROC_CANOE_FISHING_GET) {
+ var_r29 = mItemAcKeep.getActor();
+ } else {
+ var_r29 = mTargetedActor;
+ if (checkEnemyGroup(mTargetedActor)) {
+ fopAc_ac_c* sp14;
+ if (mAttention->GetLockonList(1) != NULL) {
+ sp14 = mAttention->GetLockonList(1)->getActor();
+ } else {
+ sp14 = NULL;
+ }
+
+ if (field_0x28fc != fpcM_ERROR_PROCESS_ID_e) {
+ fopAc_ac_c* sp10 = fopAcM_SearchByID(field_0x28fc);
+ field_0x30f8--;
+
+ if (field_0x30f8 != 0 && sp10 != NULL && sp10 == sp14) {
+ var_r29 = sp10;
+ } else {
+ field_0x30f8 = 0;
+ field_0x28fc = fpcM_ERROR_PROCESS_ID_e;
+ }
+ } else if (checkEnemyGroup(sp14)) {
+ if (field_0x30f8 == -30) {
+ if (cM_rnd() < 0.02f) {
+ field_0x30f8 = 30.0f + cM_rndF(30.0f);
+ var_r29 = sp14;
+ field_0x28fc = fopAcM_GetID(sp14);
+ }
+ } else {
+ field_0x30f8 -= 1;
+ }
+ }
+ } else {
+ field_0x28fc = -1;
+ field_0x30f8 = 0;
+ }
+ }
+
+ fopAc_ac_c* spC = mAttention->LockonTarget(0);
+ if (var_r29 == NULL) {
+ var_r29 = dCam_getBody()->GetForceLockOnActor();
+ }
+
+ cXyz* sp1C;
+ if (checkActorPosAngle(var_r29, &sp1C)) {
+ return sp1C;
+ }
+
+ if (!checkModeFlg(0x08000100) && param_2 != 0) {
+ if (spA > 0) {
+ field_0x311c = spA - 1;
+ }
+ return NULL;
+ }
+
+ if (!checkEventRun()) {
+ if (dComIfGp_checkPlayerStatus1(0, 0x02010000)) {
+ if (mSight.getDrawFlg()) {
+ return mSight.getPosP();
+ } else {
+ return NULL;
+ }
+ }
+
+ if (dComIfGp_att_getLookTarget() != NULL) {
+ if (fopAcM_GetName(dComIfGp_att_getLookTarget()) == PROC_E_NZ) {
+ *param_1 = 0;
+ }
+ return &dComIfGp_att_getLookTarget()->eyePos;
+ }
+
+ if ((checkActorPosAngle(field_0x27f0, &sp1C) && (field_0x27f0 == NULL || fopAcM_GetName(field_0x27f0) != PROC_Tag_WaraHowl)) || checkActorPosAngle(spC, &sp1C) || checkActorPosAngle(field_0x27f8, &sp1C)) {
+ return sp1C;
+ }
+
+ if (checkActorPosAngle(mThrowBoomerangAcKeep.getActor(), &sp1C)) {
+ return sp1C;
+ }
+
+ if (checkActorPosAngle(mCopyRodAcKeep.getActor(), &sp1C)) {
+ return sp1C;
+ }
+
+ if (checkEndResetFlg0(ERFLG0_UNK_4) && checkAttentionPosAngle(&mLookPosFromOut)) {
+ return &mLookPosFromOut;
+ }
+
+ if (checkActorPosAngle(field_0x285c.getActor(), &sp1C)) {
+ return sp1C;
+ }
+
+ if (mProcID == PROC_SPINNER_WAIT && mNormalSpeed > 0.0f) {
+ param_0->set(current.pos.x + (200.0f * cM_ssin(current.angle.y)), 100.0f + current.pos.y, current.pos.z + (200.0f * cM_scos(current.angle.y)));
+ return param_0;
+ }
+
+ if (checkModeFlg(1) && checkCopyRodControllAnime() && checkActorPosAngle(getCopyRodControllActor(), &sp1C)) {
+ return sp1C;
+ }
+
+ if (checkWindSpeedOnAngleAnime(1)) {
+ if (checkWolf()) {
+ s16 sp8 = ((field_0x30cc + 0x8000) - shape_angle.y);
+ if (sp8 >= 0) {
+ sp8 = (shape_angle.y - 0x4000);
+ } else {
+ sp8 = (shape_angle.y + 0x4000);
+ }
+
+ param_0->set(current.pos.x + (100.0f * cM_ssin(sp8)), current.pos.y, current.pos.z + (100.0f * cM_scos(sp8)));
+ } else {
+ param_0->set(current.pos.x - (100.0f * field_0x35b8.x), 150.0f + current.pos.y, current.pos.z - (100.0f * field_0x35b8.z));
+ }
+
+ if (checkAttentionPosAngle(param_0)) {
+ if (checkWolf()) {
+ onEndResetFlg0(ERFLG0_UNK_4000);
+ }
+ *param_1 = 0;
+ return param_0;
+ }
+ } else if (field_0x35c4.abs2XZ() > 1.0f && checkModeFlg(1)) {
+ f32 var_f31;
+ if (checkWolf() != NULL) {
+ var_f31 = 80.0f;
+ } else {
+ var_f31 = 150.0f;
+ }
+
+ param_0->set(current.pos.x + (100.0f * field_0x35c4.x), current.pos.y + var_f31, current.pos.z + (100.0f * field_0x35c4.z));
+ return param_0;
+ } else if (field_0x3594.absXZ() > 1.0f && (checkUnderMove0BckNoArc(ANM_SWIM_WAIT) || checkUnderMove0BckNoArcWolf(WANM_SWIM_WAIT))) {
+ param_0->set(current.pos.x + (100.0f * field_0x3594.x), 30.0f + current.pos.y, current.pos.z + (100.0f * field_0x3594.z));
+ return param_0;
+ } else if (checkWolf()) {
+ if (mProcID == PROC_WOLF_WAIT_SLIP) {
+ if (checkAttentionPosAngle(&field_0x37c8)) {
+ *param_1 = 0;
+ return &field_0x37c8;
+ }
+ } else if (mTargetedActor == NULL && ((checkAttentionState() && mProcID == PROC_WOLF_ATN_AC_MOVE) || mProcID == PROC_WOLF_ROLL_ATTACK_MOVE)) {
+ param_0->set(current.pos.x + (1000.0f * cM_ssin(field_0x2fe4)), eyePos.y, current.pos.z + (1000.0f * cM_scos(field_0x2fe4)));
+
+ if (checkAttentionPosAngle(param_0)) {
+ *param_1 = 0;
+ return param_0;
+ }
+ }
+ }
+ } else {
+ u32 temp_r26 = mDemo.getDemoMode();
+ spA = 0;
+
+ if (checkEndResetFlg2(ERFLG2_PORTAL_WARP_MIDNA_ATN_KEEP) && daMidna_c::checkMidnaRealBody()) {
+ if (checkWolf()) {
+ *param_1 = 1;
+ return &getMidnaActor()->eyePos;
+ }
+ }
+
+ if (mProcID == PROC_LOOK_WAIT || temp_r26 == 0x17 || checkDemoMoveMode(temp_r26) || temp_r26 == 1 || temp_r26 == 4 || temp_r26 == 0x2C || temp_r26 == 0x2F || temp_r26 == 0x30 || temp_r26 == 0x31 || temp_r26 == 0xC) {
+ spC = getDemoLookActor();
+ if (spC != NULL && fopAcM_GetName(spC) == PROC_MIDNA) {
+ return &spC->eyePos;
+ }
+
+ if (checkActorPosAngle(spC, &sp1C)) {
+ return sp1C;
+ }
+ } else if (checkActorPosAngle(field_0x285c.getActor(), &sp1C)) {
+ return sp1C;
+ }
+ }
+
+ if (param_2 == 0) {
+ return NULL;
+ }
+
+ if (spA > 0) {
+ field_0x311c = spA - 1;
+ if (checkAttentionPosAngle(&field_0x3504)) {
+ return &field_0x3504;
+ }
+ }
+
+ return NULL;
}
/* 800A142C-800A1AEC 09BD6C 06C0+00 1/1 0/0 0/0 .text getNeckAimAngle__9daAlink_cFP4cXyzPsPsPsPs
*/
-void daAlink_c::getNeckAimAngle(cXyz* param_0, s16* param_1, s16* param_2, s16* param_3,
+// NONMATCHING - regalloc / one clib_minMaxLimit instance with issues
+s16 daAlink_c::getNeckAimAngle(cXyz* param_0, s16* param_1, s16* param_2, s16* param_3,
s16* param_4) {
- // NONMATCHING
+ s16 sp16 = field_0x2fe6 + mBodyAngle.y;
+ if ((mProcID == PROC_GOAT_CATCH && mProcVar1.field_0x300a == 0) || (mProcID == PROC_HAND_PAT && mProcVar2.field_0x300c == 0)) {
+ sp16 += 0x8000;
+ }
+
+ cXyz sp28 = eyePos - field_0x34e0;
+ multVecMagneBootInvMtx(&sp28);
+
+ s16 sp14 = sp28.atan2sY_XZ();
+ s16 sp12 = sp28.atan2sX_Z();
+ s16 sp1A = sp14 - field_0x3124;
+ s16 sp18 = (sp12 - sp16) - field_0x3126;
+
+ if (checkModeFlg(0x08000100) && param_0 != NULL && !checkWolfHeadDamageAnime() && !checkDashDamageAnime()) {
+ cXyz sp1C = *param_0 - field_0x34e0;
+ multVecMagneBootInvMtx(&sp1C);
+
+ s16 temp_r24 = sp1C.atan2sY_XZ();
+ s16 var_r28 = sp1C.atan2sX_Z() - sp16;
+ if (((var_r28 > 0x7000) && (field_0x3126 < 0)) || ((var_r28 < -0x7000) && (field_0x3126 > 0))) {
+ var_r28 *= -1;
+ }
+
+ s16 sp10 = temp_r24;
+ s16 spE = var_r28;
+ if (sp1C.absXZ() < 30.0f) {
+ var_r28 = field_0x3126;
+ }
+
+ if (checkWolf()) {
+ if (mProcID == PROC_WOLF_TIRED_WAIT) {
+ temp_r24 = cLib_minMaxLimit<s16>((s16)temp_r24, daAlinkHIO_wolf_c0::m.mMaxTiredNeckTurnUp, daAlinkHIO_wolf_c0::m.mMaxTiredNeckTurnDown);
+ var_r28 = cLib_minMaxLimit<s16>((s16)var_r28, -daAlinkHIO_wolf_c0::m.mMaxTiredNeckTurnH, daAlinkHIO_wolf_c0::m.mMaxTiredNeckTurnH);
+ } else {
+ temp_r24 = cLib_minMaxLimit<s16>((s16)temp_r24, daAlinkHIO_wolf_c0::m.mMaxNeckTurnUp, daAlinkHIO_wolf_c0::m.mMaxNeckTurnDown);
+ var_r28 = cLib_minMaxLimit<s16>((s16)var_r28, -daAlinkHIO_wolf_c0::m.mMaxNeckTurnH, daAlinkHIO_wolf_c0::m.mMaxNeckTurnH);
+ }
+ } else {
+ temp_r24 = cLib_minMaxLimit<s16>((s16)temp_r24, daAlinkHIO_basic_c0::m.mNeckMaxUp, daAlinkHIO_basic_c0::m.mNeckMaxDown);
+
+ s16 spC;
+ s16 spA;
+ if (dComIfGp_checkPlayerStatus1(0, 0x02000000)) {
+ if (field_0x3020 == 1) {
+ spC = -0x1000;
+ spA = daAlinkHIO_basic_c0::m.mNeckMaxHorizontal;
+ } else {
+ spC = -daAlinkHIO_basic_c0::m.mNeckMaxHorizontal;
+ spA = 0x1000;
+ }
+ } else {
+ if (checkGrabAnimeCarry()) {
+ spC = 0;
+ } else {
+ spC = -daAlinkHIO_basic_c0::m.mNeckMaxHorizontal;
+ }
+ spA = daAlinkHIO_basic_c0::m.mNeckMaxHorizontal;
+ }
+
+ var_r28 = cLib_minMaxLimit<s16>((s16)var_r28, spC, spA);
+ }
+
+ s16 temp_r23 = temp_r24 - sp1A;
+ s16 sp8 = (var_r28 - sp18);
+
+ if (checkModeFlg(0x100)) {
+ if (checkWolf()) {
+ *param_1 = 0.9f * temp_r23;
+ *param_2 = 0.9f * sp8;
+ *param_3 = temp_r23 - *param_1;
+ *param_4 = sp8 - *param_2;
+ } else if (field_0x2fc8 != 0) {
+ *param_1 = 0.25f * temp_r23;
+ *param_2 = 0.5f * sp8;
+ *param_3 = temp_r23 - *param_1;
+ *param_4 = *param_2;
+ } else {
+ *param_3 = (temp_r23 >> 1);
+ *param_4 = (sp8 >> 1);
+ *param_1 = *param_3;
+ *param_2 = *param_4;
+ }
+ } else {
+ *param_3 = temp_r23;
+ *param_4 = sp8;
+ }
+
+ *param_3 += (s16)(sp10 - temp_r24);
+ *param_4 += (s16)(spE - var_r28);
+
+ if (checkEndResetFlg0(ERFLG0_UNK_4000)) {
+ *param_3 = (sp10 + 0x8000) - sp14;
+ *param_4 = (field_0x30cc + 0x8000) - sp12;
+ }
+ } else if (checkMagneBootsOn()) {
+ *param_1 = 0;
+ *param_2 = 0;
+ field_0x30d4 = 0;
+ } else {
+ *param_1 = field_0x30a0;
+ *param_2 = field_0x30a2;
+
+ if (checkWolf() && *param_2 == 0) {
+ *param_2 = field_0x2fec;
+ }
+
+
+ field_0x30d4 = *param_2;
+ }
+
+ return sp18;
}
/* 800A1AEC-800A1F90 09C42C 04A4+00 1/1 0/0 0/0 .text setEyeMove__9daAlink_cFP4cXyzss */
void daAlink_c::setEyeMove(cXyz* param_0, s16 param_1, s16 param_2) {
- // NONMATCHING
+ u32 temp_r28 = field_0x2fa7;
+ f32 sp18 = field_0x3418;
+ f32 sp14 = field_0x341c;
+
+ field_0x2fa7 = 75.0f + cM_rndF(30.0f);
+ field_0x3418 = 0.0f;
+ field_0x341c = 0.0f;
+ field_0x33f8 = 0.0f;
+
+ f32 var_f31;
+ f32 var_f30;
+ if (param_0 != NULL) {
+ var_f30 = 0.00012207031f * param_1;
+ var_f31 = 0.00012207031f * param_2;
+ } else if (0.0f != field_0x33f0 || 0.0f != field_0x33f4) {
+ var_f30 = field_0x33f4;
+ var_f31 = field_0x33f0;
+ field_0x33f8 = field_0x33f0;
+ } else if ((mProcID == PROC_MOVE || mProcID == PROC_WOLF_MOVE) && !checkNoResetFlg1(FLG1_UNK_1000000) && field_0x2fee != 0) {
+ var_f30 = 0.0f;
+ var_f31 = 0.00024414062f * -field_0x2fee;
+ field_0x33f8 = var_f31;
+ } else if (checkSwimNeckUpDown()) {
+ if (field_0x3124 > 0) {
+ var_f30 = 0.5f;
+ } else if (field_0x3124 < 0) {
+ var_f30 = -0.5f;
+ } else {
+ var_f30 = 0.0f;
+ }
+ var_f31 = 0.0f;
+ } else if (!checkEventRun() && checkModeFlg(1) && checkNoResetFlg1(FLG1_UNK_2000) && (checkNoUpperAnime() || checkGrabAnime()) && (mProcID == PROC_WAIT || mProcID == PROC_GRAB_WAIT || mProcID == PROC_CROUCH || mProcID == PROC_HORSE_WAIT || mProcID == PROC_WOLF_WAIT)) {
+ if (temp_r28 != 0) {
+ field_0x2fa7 = temp_r28 - 1;
+ field_0x3418 = sp18;
+ field_0x341c = sp14;
+ } else if (0.0f != sp18 || 0.0f != sp14) {
+ if (checkGrabAnimeCarry() || cM_rnd() < 0.5f) {
+ field_0x3418 = 0.0f;
+ field_0x341c = 0.0f;
+ } else {
+ s16 temp_r29_2 = cM_atan2s(field_0x3418, field_0x341c);
+ temp_r29_2 += (s16)(((int)cM_rndF(3.0f) << 13) + 0x6000);
+
+ field_0x3418 = cM_ssin(temp_r29_2);
+ field_0x341c = cM_scos(temp_r29_2);
+ }
+ } else if (checkGrabAnimeCarry() && mGrabItemAcKeep.getActor() != NULL) {
+ field_0x3418 = -1.0f;
+ } else {
+ s16 temp_r0 = (int)cM_rndF(8.0f) << 0xD;
+ field_0x3418 = cM_ssin(temp_r0);
+ field_0x341c = cM_scos(temp_r0);
+ }
+ var_f31 = field_0x3418;
+ var_f30 = field_0x341c;
+ } else {
+ field_0x2180[0]->setNowOffsetX(0.0f);
+ field_0x2180[1]->setNowOffsetX(0.0f);
+ field_0x2180[0]->setNowOffsetY(0.0f);
+ field_0x2180[1]->setNowOffsetY(0.0f);
+
+ if (daAlink_matAnm_c::getEyeMoveFlg()) {
+ daAlink_matAnm_c::offEyeMoveFlg();
+ daAlink_matAnm_c::setMorfFrame(3);
+ }
+ return;
+ }
+
+ if (daAlink_matAnm_c::getMorfFrame() == 0) {
+ var_f31 = cLib_minMaxLimit<f32>(var_f31, -1.0f, 1.0f);
+ var_f30 = cLib_minMaxLimit<f32>(var_f30, -1.0f, 1.0f);
+
+ f32 var_f29;
+ f32 var_f28;
+ if (var_f31 > 0.0f) {
+ var_f29 = 0.25f * var_f31;
+ var_f28 = 0.15f * var_f31;
+ } else {
+ var_f29 = 0.15f * var_f31;
+ var_f28 = 0.25f * var_f31;
+ }
+
+ f32 sp10;
+ if (var_f30 > 0.0f) {
+ sp10 = 0.2f * var_f30;
+ } else {
+ sp10 = 0.1f * var_f30;
+ }
+
+ if (checkWolf()) {
+ var_f29 *= -1.0f;
+ var_f28 *= -1.0f;
+ }
+
+ daAlink_matAnm_c::onEyeMoveFlg();
+ cLib_addCalc(field_0x2180[0]->getNowOffsetXP(), var_f29, 0.5f, 0.1f, 0.03f);
+ cLib_addCalc(field_0x2180[1]->getNowOffsetXP(), var_f28, 0.5f, 0.1f, 0.03f);
+ cLib_addCalc(field_0x2180[0]->getNowOffsetYP(), sp10, 0.5f, 0.08f, 0.02f);
+ field_0x2180[1]->setNowOffsetY(*field_0x2180[0]->getNowOffsetYP());
+ }
}
/* 800A1F90-800A2160 09C8D0 01D0+00 1/1 0/0 0/0 .text setNeckAngle__9daAlink_cFv */
void daAlink_c::setNeckAngle() {
- // NONMATCHING
+ cXyz sp18;
+ s16 sp10 = 0;
+ s16 spE = 0;
+ s16 spC = 0;
+ s16 spA = 0;
+ int sp14 = 2;
+
+ offNoResetFlg1(FLG1_MIDNA_HAIR_ATN_POS);
+ cXyz* var_r30 = getNeckAimPos(&sp18, &sp14, 1);
+
+ if (var_r30 != NULL && checkModeFlg(0x08000100)) {
+ onNoResetFlg1(FLG1_UNK_4);
+
+ if (sp14 != 0) {
+ if (sp14 == 1) {
+ mMidnaAtnPos = eyePos;
+ onNoResetFlg1(FLG1_MIDNA_ATN_POS);
+ } else {
+ mMidnaAtnPos = *var_r30;
+ onNoResetFlg1(FLG1_MIDNA_ATN_POS);
+ }
+ }
+ } else {
+ offNoResetFlg1(daPy_FLG1(FLG1_MIDNA_ATN_POS | FLG1_UNK_4));
+ }
+
+ if (checkUnderMove0BckNoArcWolf(WANM_SMELL) || checkUnderMove0BckNoArc(ANM_HORSE_TURN_B) || checkUnderMove0BckNoArc(ANM_WAIT_INSECT) || checkUnderMove0BckNoArc(ANM_HORSE_TURN_LEFT) || checkUnderMove0BckNoArc(ANM_HORSE_TURN_RIGHT)) {
+ var_r30 = NULL;
+ }
+
+ s16 sp8 = getNeckAimAngle(var_r30, &sp10, &spE, &spC, &spA);
+ daPy_addCalcShort(&field_0x3124, sp10, 3, 0x1000, 0x100);
+ daPy_addCalcShort(&field_0x3126, spE, 3, 0x1000, 0x100);
+ setEyeMove(var_r30, spC, spA);
}
/* 800A2160-800A2198 09CAA0 0038+00 1/0 0/0 0/0 .text getStickAngleFromPlayerShape__9daAlink_cCFPs
@@ -638,7 +1760,98 @@ fopAc_ac_c* daAlink_c::checkGoronRide() {
/* 800A22E8-800A2710 09CC28 0428+00 1/1 0/0 0/0 .text setMoveSlantAngle__9daAlink_cFv */
void daAlink_c::setMoveSlantAngle() {
- // NONMATCHING
+ f32 temp_f31 = fabsf(speedF / field_0x594);
+
+ if (checkModeFlg(0x02020400) || mProcID == PROC_WOLF_CARGO_CARRY) {
+ if (!checkBoardRide()) {
+ field_0x2fee = 0;
+ if (!checkCanoeRide()) {
+ mBodyAngle.z = 0;
+ }
+ }
+
+ if (mProcID == PROC_SLIDE && field_0x3198 != 0) {
+ mBodyAngle.z = mProcVar4.field_0x3010 * 0.75f;
+ shape_angle.z += (0.25f * mProcVar4.field_0x3010);
+ }
+
+ field_0x2fec = 0;
+ return;
+ }
+
+ s16 var_r29;
+ s16 var_r28;
+
+ if ((mProcID == PROC_MOVE && temp_f31 > daAlinkHIO_move_c0::m.mRunChangeRate) || (mProcID == PROC_WOLF_MOVE && temp_f31 > daAlinkHIO_wlMove_c0::m.field_0x84)) {
+ var_r28 = cLib_minMaxLimit<s16>((s16)(field_0x2fe6 - shape_angle.y) * 2, -0xC00, 0xC00);
+ if (abs(var_r28) > 0x800) {
+ int var_r27;
+ if (var_r28 > 0) {
+ var_r27 = var_r28 - 0x800;
+ } else {
+ var_r27 = var_r28 + 0x800;
+ }
+
+ var_r29 = -3.9f * var_r27;
+ } else {
+ var_r29 = 0;
+ }
+
+ if ((mProcID == PROC_WOLF_MOVE && checkAttentionState()) || temp_f31 < daAlinkHIO_wlMove_c0::m.field_0x8C) {
+ var_r28 = 0;
+ }
+ } else if ((mProcID == PROC_WOLF_WAIT || mProcID == PROC_WOLF_SWIM_MOVE) && shape_angle.y != field_0x2fe6) {
+ var_r28 = 0;
+ var_r29 = (s16)(shape_angle.y - field_0x2fe6);
+
+ if (mProcID == PROC_WOLF_SWIM_MOVE) {
+ if (var_r29 >= 0) {
+ var_r29 -= 0x100;
+ if (var_r29 < 0) {
+ var_r29 = 0;
+ }
+ } else {
+ var_r29 += 0x100;
+ if (var_r29 > 0) {
+ var_r29 = 0;
+ }
+ }
+ }
+
+ var_r29 = cLib_minMaxLimit<s16>((s16)var_r29, -0x300, 0x300);
+ var_r29 *= 8;
+ } else {
+ var_r28 = 0;
+ var_r29 = 0;
+ }
+
+ cLib_addCalcAngleS(&field_0x2fee, var_r28, 4, 1200, 200);
+
+ if (checkWolf()) {
+ shape_angle.z = field_0x2fee;
+ if (var_r29 == 0) {
+ cLib_addCalcAngleS(&field_0x2fec, 0, 2, 4000, 1000);
+ } else {
+ cLib_addCalcAngleS(&field_0x2fec, var_r29, 4, 1200, 200);
+ }
+ } else if (mProcID != PROC_CAUGHT) {
+ shape_angle.z = (field_0x2fee >> 1);
+ mBodyAngle.z = shape_angle.z;
+
+ if (mProcID == PROC_MOVE || mProcID == PROC_WAIT) {
+ var_r29 = (s16)(shape_angle.y - field_0x2fe6) * 2;
+ if (mProcID == PROC_WAIT) {
+ var_r29 *= 2;
+ }
+
+ var_r29 = cLib_minMaxLimit<s16>((s16)var_r29, -0xC00, 0xC00);
+ if (var_r29 == 0) {
+ cLib_addCalcAngleS(&field_0x30a2, 0, 2, 4000, 1000);
+ } else {
+ cLib_addCalcAngleS(&field_0x30a2, var_r29, 4, 1200, 200);
+ }
+ }
+ }
}
/* 8038FA10-8038FA20 01C070 0010+00 0/0 0/0 0/0 .rodata l_worldChangeEventName */
@@ -2244,8 +3457,66 @@ static const u16 armJointTable[] = {
};
/* 800A2710-800A29DC 09D050 02CC+00 1/1 0/0 0/0 .text setArmMatrix__9daAlink_cFv */
-void daAlink_c::setArmMatrix() {
- // NONMATCHING
+int daAlink_c::setArmMatrix() {
+ daAlink_footData_c* var_r29 = mFootData2;
+
+ int i;
+ for (i = 0; i < 2; i++, var_r29++) {
+ for (int j = 0; j < 3; j++) {
+ cMtx_copy(mpLinkModel->getAnmMtx(j + armJointTable[i]), var_r29->field_0x14[j]);
+ }
+
+ }
+
+ if (!field_0x2060->getOldFrameFlg()) {
+ return 0;
+ }
+
+ var_r29 = mFootData2;
+
+ cXyz sp2C;
+ csXyz* sp18 = field_0x312a;
+ csXyz* sp14 = field_0x3136;
+
+ for (i = 0; i < 2; i++, var_r29++, sp18++, sp14++) {
+ u16 temp_r28 = armJointTable[i];
+ s16 spA;
+ s16 sp8 = 0;
+
+ if ((mProcID == PROC_HOOKSHOT_ROOF_SHOOT || mProcID == PROC_HOOKSHOT_WALL_SHOOT) && field_0x3020 == i) {
+ spA = mProcVar3.field_0x300e;
+ if (mProcID == PROC_HOOKSHOT_WALL_SHOOT) {
+ sp8 = (mProcVar4.field_0x3010 - shape_angle.y);
+ }
+ } else {
+ spA = 0;
+ }
+
+ setMatrixWorldAxisRot(mpLinkModel->getAnmMtx(temp_r28), spA, sp8, var_r29->field_0x6, 0, NULL);
+
+ mDoMtx_stack_c::ZXYrotM(*sp18);
+ mDoMtx_copy(mDoMtx_stack_c::get(), mpLinkModel->getAnmMtx(temp_r28));
+ mDoMtx_stack_c::multVec(&arm1Vec, &sp2C);
+ temp_r28++;
+
+ setMatrixWorldAxisRot(mpLinkModel->getAnmMtx(temp_r28), spA, sp8, var_r29->field_0x4, 0, &sp2C);
+
+ mDoMtx_stack_c::ZXYrotM(*sp14);
+ mDoMtx_copy(mDoMtx_stack_c::get(), mpLinkModel->getAnmMtx(temp_r28));
+ mDoMtx_stack_c::multVec(&arm2Vec, &sp2C);
+ temp_r28++;
+
+ setMatrixWorldAxisRot(mpLinkModel->getAnmMtx(temp_r28), spA, sp8, var_r29->field_0x2, 0, &sp2C);
+ temp_r28++;
+
+ J3DTransformInfo* temp_r3_3 = field_0x2060->getOldFrameTransInfo(temp_r28);
+ cXyz sp20(temp_r3_3->mTranslate.x, temp_r3_3->mTranslate.y, temp_r3_3->mTranslate.z);
+ mDoMtx_stack_c::multVec(&sp20, &sp2C);
+
+ setMatrixWorldAxisRot(mpLinkModel->getAnmMtx(temp_r28), spA, sp8, var_r29->field_0x2, 0, &sp2C);
+ }
+
+ return 1;
}
/* 80391ED8-80391EE4 01E538 000C+00 0/1 0/0 0/0 .rodata leg1Vec$56150 */
@@ -2282,8 +3553,56 @@ static const u16 footJointTable[] = {
};
/* 800A29DC-800A2C24 09D31C 0248+00 1/1 0/0 0/0 .text setFootMatrix__9daAlink_cFv */
-void daAlink_c::setFootMatrix() {
- // NONMATCHING
+int daAlink_c::setFootMatrix() {
+ daAlink_footData_c* var_r30 = mFootData1;
+
+ int i;
+ for (i = 0; i < 2; i++, var_r30++) {
+ for (int j = 0; j < 3; j++) {
+ cMtx_copy(mpLinkModel->getAnmMtx(j + footJointTable[i]), var_r30->field_0x14[j]);
+ }
+
+ }
+
+ if (!field_0x2060->getOldFrameFlg()) {
+ return 0;
+ }
+
+ var_r30 = mFootData1;
+ cXyz sp10;
+
+ if (mProcID == PROC_HORSE_GETOFF) {
+ current.angle.y = shape_angle.y;
+ if (field_0x2fc0 == 0) {
+ shape_angle.y -= 0x4000;
+ } else {
+ shape_angle.y += 0x4000;
+ }
+ }
+
+ for (i = 0; i < 2; i++, var_r30++) {
+ u16 temp_r29 = footJointTable[i];
+
+ setMatrixWorldAxisRot(mpLinkModel->getAnmMtx(temp_r29), var_r30->field_0x6, 0, 0, 0, NULL);
+ mDoMtx_stack_c::multVec(&leg1Vec, &sp10);
+ temp_r29++;
+
+ setMatrixWorldAxisRot(mpLinkModel->getAnmMtx(temp_r29), var_r30->field_0x4, 0, 0, 0, &sp10);
+ mDoMtx_stack_c::multVec(&leg2Vec, &sp10);
+ temp_r29++;
+
+ setMatrixWorldAxisRot(mpLinkModel->getAnmMtx(temp_r29), var_r30->field_0x2, 0, 0, 0, &sp10);
+ temp_r29++;
+ mDoMtx_stack_c::multVec(&footVec, &sp10);
+
+ setMatrixWorldAxisRot(mpLinkModel->getAnmMtx(temp_r29), var_r30->field_0x2, 0, 0, 0, &sp10);
+ }
+
+ if (mProcID == PROC_HORSE_GETOFF) {
+ shape_angle.y = current.angle.y;
+ }
+
+ return 1;
}
/* 800A2C24-800A2CE0 09D564 00BC+00 3/3 0/0 0/0 .text setMatrixOffset__9daAlink_cFPff */
@@ -2306,8 +3625,143 @@ void daAlink_c::setMatrixOffset(f32* param_0, f32 param_1) {
* setLegAngle__9daAlink_cFfP18daAlink_footData_cPsPsi */
int daAlink_c::setLegAngle(f32 param_0, daAlink_footData_c* param_1, s16* param_2,
s16* param_3, int param_4) {
- // NONMATCHING
- return 0;
+ cXyz spA4;
+ cXyz sp98;
+ cXyz sp8C;
+ cXyz sp80;
+ if (fabsf(param_0) < 0.1f) {
+ return 0;
+ }
+
+ if (param_4 != 0) {
+ cMtx_concat(field_0x2be8, param_1->field_0x14[0], mDoMtx_stack_c::get());
+ mDoMtx_stack_c::multVecZero(&spA4);
+
+ cMtx_concat(field_0x2be8, param_1->field_0x14[1], mDoMtx_stack_c::get());
+ mDoMtx_stack_c::multVecZero(&sp98);
+
+ cMtx_concat(field_0x2be8, param_1->field_0x14[2], mDoMtx_stack_c::get());
+ mDoMtx_stack_c::multVecZero(&sp8C);
+
+ if (mProcID == PROC_HORSE_GETOFF) {
+ if (field_0x2fc0 == 0) {
+ spA4.z = -spA4.x;
+ sp98.z = -sp98.x;
+ sp8C.z = -sp8C.x;
+ } else {
+ spA4.z = spA4.x;
+ sp98.z = sp98.x;
+ sp8C.z = sp8C.x;
+ }
+ }
+
+ spA4.x = 0.0f;
+ sp98.x = 0.0f;
+ sp8C.x = 0.0f;
+ } else {
+ cMtx_concat(mInvMtx, param_1->field_0x14[0], mDoMtx_stack_c::get());
+ mDoMtx_stack_c::multVecZero(&spA4);
+
+ cMtx_concat(mInvMtx, param_1->field_0x14[1], mDoMtx_stack_c::get());
+ mDoMtx_stack_c::multVecZero(&sp98);
+
+ cMtx_concat(mInvMtx, param_1->field_0x14[2], mDoMtx_stack_c::get());
+ mDoMtx_stack_c::multVecZero(&sp8C);
+
+ spA4.z = 0.0f;
+ sp98.z = 0.0f;
+ sp8C.z = 0.0f;
+ }
+
+ cXyz sp74 = sp98 - spA4;
+ cXyz sp68 = sp8C - sp98;
+ cXyz sp5C(sp8C);
+ sp5C.y += param_0;
+
+ if (param_4 != 0) {
+ if (sp5C.y >= spA4.y) {
+ return 0;
+ }
+ }
+
+ if (param_4 == 0) {
+ if (sp5C.y <= spA4.y) {
+ sp5C.y = 1.0f + spA4.y;
+ }
+ }
+
+ cXyz sp50 = sp5C - spA4;
+ f32 temp_f1 = sp50.abs2();
+ if (cM3d_IsZero(temp_f1)) {
+ return 0;
+ }
+
+ f32 temp_f28 = sp74.abs2();
+ f32 temp_f26 = sp68.abs2();
+
+ if (JMAFastSqrt(temp_f28) + JMAFastSqrt(temp_f26) <= JMAFastSqrt(temp_f1)) {
+ return 0;
+ }
+
+ f32 temp_f27 = ((temp_f1 + temp_f28) - temp_f26) / (2.0f * temp_f1);
+ cXyz sp44 = spA4 + (sp50 * temp_f27);
+
+ f32 var_f30 = temp_f28 - (temp_f27 * (temp_f1 * temp_f27));
+ if (var_f30 < 0.0f) {
+ var_f30 = 0.0f;
+ }
+ var_f30 = JMAFastSqrt(var_f30);
+
+ if (param_4 != 0) {
+ if (checkWolf()) {
+ sp80.set(0.0f, -sp50.z, sp50.y);
+ } else {
+ sp80.set(0.0f, sp50.z, -sp50.y);
+ }
+ } else if (param_1 == mFootData2) {
+ sp80.set(sp50.y, -sp50.x, 0.0f);
+ } else {
+ sp80.set(-sp50.y, sp50.x, 0.0f);
+ }
+
+ f32 temp_f1_2 = sp80.abs();
+ if (cM3d_IsZero(temp_f1_2)) {
+ return 0;
+ }
+
+ cXyz sp38 = sp44 + (sp80 * (var_f30 / temp_f1_2));
+
+ cXyz sp2C = sp38 - spA4;
+ cXyz sp20 = sp5C - sp38;
+
+ if (param_4 != 0) {
+ s16 temp_r30 = cM_atan2s(sp2C.y, sp2C.z);
+ s16 var_r29 = cM_atan2s(sp20.y, sp20.z);
+ s16 temp_r0 = var_r29 - temp_r30;
+
+ if (checkWolf()) {
+ if (temp_r0 < 0) {
+ var_r29 = temp_r30;
+ } else if (temp_r0 > 0x7000) {
+ var_r29 = temp_r30 + 0x7000;
+ }
+ } else if (temp_r0 > 0) {
+ var_r29 = temp_r30;
+ } else if (temp_r0 < -0x7000) {
+ var_r29 = temp_r30 - 0x7000;
+ }
+
+ *param_2 = cM_atan2s(sp74.y, sp74.z) - temp_r30;
+ *param_3 = cM_atan2s(sp68.y, sp68.z) - var_r29;
+ } else {
+ s16 temp_r30_2 = cM_atan2s(sp2C.x, sp2C.y);
+ s16 temp_r29 = cM_atan2s(sp20.x, sp20.y);
+
+ *param_2 = cM_atan2s(sp74.x, sp74.y) - temp_r30_2;
+ *param_3 = cM_atan2s(sp68.x, sp68.y) - temp_r29;
+ }
+
+ return 1;
}
/* 80391EFC-80391F08 01E55C 000C+00 0/1 0/0 0/0 .rodata localLeftFootOffset$56542 */
@@ -2353,8 +3807,132 @@ SECTION_SDATA static f32 l_autoUpHeight = 30.010000228881836f;
SECTION_SDATA static f32 l_autoDownHeight = -30.010000228881836f;
/* 800A3430-800A39B8 09DD70 0588+00 1/1 0/0 0/0 .text footBgCheck__9daAlink_cFv */
+// NONMATCHING - regalloc
void daAlink_c::footBgCheck() {
- // NONMATCHING
+ if (field_0x2060->getOldFrameFlg()) {
+ f32 var_f31 = 0.0f;
+ cM3dGPla sp98;
+ f32 sp30[2];
+
+ u32 sp28 = checkModeFlg(1);
+ int i;
+ f32* sp24;
+
+ daAlink_footData_c* var_r29 = mFootData1;
+ sp24 = sp30;
+ s16 sp20[2];
+
+ cXyz sp80[2];
+ cXyz sp68[2];
+ mDoMtx_multVec(mpLinkModel->getAnmMtx(0x14), &localLeftFootOffset, &sp68[0]);
+ mDoMtx_multVec(mpLinkModel->getAnmMtx(0x15), &localLeftToeOffset, &sp80[0]);
+ mDoMtx_multVec(mpLinkModel->getAnmMtx(0x19), &localRightFootOffset, &sp68[1]);
+ mDoMtx_multVec(mpLinkModel->getAnmMtx(0x1A), &localRightToeOffset, &sp80[1]);
+
+ BOOL sp1C = (!mLinkAcch.i_ChkGroundHit() || checkMagneBootsOn()) || (mLinkAcch.i_ChkGroundHit() && mSinkShapeOffset < 0.0f) || checkModeFlg(0x78C52);
+
+ for (i = 0; i < 2; i++, var_r29++, sp24++) {
+ cXyz sp5C = (sp80[i] + sp68[i]) * 0.5f;
+
+ if (sp1C) {
+ var_r29->field_0x1 = 5;
+ } else {
+ cXyz sp50 = sp5C - var_r29->field_0x8;
+ if (sp50.abs2XZ() < 100.0f && sp28 != 0) {
+ if (var_r29->field_0x1 != 0) {
+ var_r29->field_0x1--;
+ } else {
+ sp5C = var_r29->field_0x8;
+ }
+ } else {
+ var_r29->field_0x1 = 5;
+ }
+ }
+
+ var_r29->field_0x8 = sp5C;
+ cXyz sp44(sp5C.x, current.pos.y + l_autoUpHeight, sp5C.z);
+ mLinkGndChk.SetPos(&sp44);
+
+ f32 temp_f1 = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
+ if (-1000000000.0f != temp_f1) {
+ dComIfG_Bgsp().GetTriPla(mLinkGndChk, &sp98);
+ }
+
+ if (-1000000000.0f != temp_f1 && cBgW_CheckBGround(sp98.mNormal.y) && sp44.y - temp_f1 < l_autoUpHeight - l_autoDownHeight) {
+ *sp24 = temp_f1;
+ var_r29->field_0x0 = 1;
+ sp20[i] = getGroundAngle(&mLinkGndChk, shape_angle.y);
+ } else {
+ *sp24 = current.pos.y;
+ var_r29->field_0x0 = 0;
+ }
+ }
+
+ int sp2C;
+ if (sp1C != 0) {
+ sp2C = 2;
+ } else {
+ if (sp30[1] > sp30[0]) {
+ sp2C = 0;
+ } else {
+ sp2C = 1;
+ }
+
+ var_f31 = sp30[sp2C];;
+ }
+
+ setSandShapeOffset();
+ setMatrixOffset(&mSinkShapeOffset, mSinkShapeOffset);
+ setSandDownBgCheckWallH();
+
+ if (mProcID == PROC_SERVICE_WAIT) {
+ var_f31 = field_0x2b94;
+ } else if (sp1C != 0 || sp28 == 0 || mProcID == PROC_TOOL_DEMO || mProcID == PROC_GANON_FINISH || fabsf(field_0x2b98) > 1.0f) {
+ var_f31 = 0.0f;
+ } else {
+ var_f31 -= current.pos.y;
+ }
+
+ setMatrixOffset(&field_0x2b94, var_f31);
+ var_r29 = mFootData1;
+
+ for (i = 0; i < 2; i++, var_r29++) {
+ s16 sp10;
+ s16 spE;
+ if (sp1C != 0) {
+ sp10 = 0;
+ spE = 0;
+ } else {
+ f32 var_f30 = sp30[i] - mpLinkModel->getBaseTRMtx()[1][3];
+ if (var_f30 > l_autoUpHeight) {
+ var_f30 = l_autoUpHeight;
+ }
+
+ if ((sp2C != i && !(var_f30 > 0.0f) && sp28 == 0) || !setLegAngle(var_f30, var_r29, &sp10, &spE, 1)) {
+ sp10 = 0;
+ spE = 0;
+ }
+ }
+
+ if ((sp10 * var_r29->field_0x6) < 0 && abs(sp10 - var_r29->field_0x6) >= 0x8000) {
+ if (sp10 >= 0) {
+ sp10 -= 0x4000;
+ } else {
+ sp10 += 0x4000;
+ }
+ }
+
+ cLib_addCalcAngleS(&var_r29->field_0x6, sp10, 2, 0x1800, 0x10);
+ cLib_addCalcAngleS(&var_r29->field_0x4, spE, 2, 0x1800, 0x10);
+
+ s16 spC = 0;
+ if (sp2C != 2 && var_r29->field_0x0 != 0 && sp28 != 0 && field_0x3174 != 8) {
+ spC += sp20[i];
+ }
+
+ cLib_addCalcAngleS(&var_r29->field_0x2, spC, 2, 0x1800, 0x10);
+ }
+ }
}
/* 80391F2C-80391F44 01E58C 0018+00 1/1 0/0 0/0 .rodata localHandPos$56752 */
@@ -2365,8 +3943,80 @@ SECTION_RODATA static Vec const localHandPos[] = {
COMPILER_STRIP_GATE(0x80391F2C, &localHandPos);
/* 800A39B8-800A3C8C 09E2F8 02D4+00 1/1 0/0 0/0 .text handBgCheck__9daAlink_cFv */
+// NONMATCHING - stack / regalloc
void daAlink_c::handBgCheck() {
- // NONMATCHING
+ if (!field_0x2060->getOldFrameFlg() || !checkModeFlg(0x40)) {
+ return;
+ }
+
+ if (mProcID == PROC_HANG_CLIMB) {
+ if (mUnderFrameCtrl[0].getFrame() >= 9.0f) {
+ setMatrixOffset(&field_0x2ba4, 0.0f);
+ return;
+ }
+ }
+
+ cXyz sp38;
+ cXyz sp44;
+ f32 sp20[2];
+ s16 sp18[2];
+
+ cXyz* var_r28 = &sp38;
+ s16* var_r29 = sp18;
+ f32* var_r25 = sp20;
+
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(shape_angle.y);
+
+ for (int i = 0; i < 2; i++, var_r28++, var_r25++, var_r29++) {
+ mDoMtx_stack_c::multVec(&localHandPos[i], var_r28);
+
+ cXyz sp28(var_r28->x, var_r28->y + l_autoUpHeight, var_r28->z);
+ mLinkGndChk.SetPos(&sp28);
+
+ f32 temp_f1 = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
+ if (-1000000000.0f != temp_f1 && (sp28.y - temp_f1 < l_autoUpHeight - l_autoDownHeight)) {
+ *var_r25 = temp_f1;
+
+ if (dComIfG_Bgsp().GetGroundCode(mLinkGndChk) != 8) {
+ *var_r29 = getGroundAngle(&mLinkGndChk, (shape_angle.y - 0x4000));
+ } else {
+ *var_r29 = 0;
+ }
+ } else {
+ *var_r25 = current.pos.y;
+ *var_r29 = 0;
+ }
+ }
+
+ int sp14;
+ if (mProcID == PROC_HANG_FALL_START) {
+ sp14 = 0;
+ sp20[1] += 500.0f;
+ } else if (sp20[1] < sp20[0]) {
+ sp14 = 0;
+ } else {
+ sp14 = 1;
+ }
+
+ setMatrixOffset(&field_0x2ba4, sp20[sp14] - current.pos.y);
+
+ daAlink_footData_c* var_r26 = mFootData2;
+ s16* var_r29_2 = sp18;
+ s16 spA;
+ s16 sp8;
+
+ for (int i = 0; i < 2; i++, var_r29_2++, var_r26++) {
+ f32 temp_f30 = sp20[i] - mpLinkModel->getBaseTRMtx()[1][3];
+ if (!(temp_f30 < -1.0f) || !setLegAngle(temp_f30, var_r26, &spA, &sp8, 0)) {
+ spA = 0;
+ sp8 = 0;
+ }
+
+ cLib_addCalcAngleS(&var_r26->field_0x6, spA, 2, 0x1800, 0x10);
+ cLib_addCalcAngleS(&var_r26->field_0x4, sp8, 2, 0x1800, 0x10);
+ cLib_addCalcAngleS(&var_r26->field_0x2, *var_r29_2, 2, 0x1800, 0x10);
+ }
}
/* 800A3C8C-800A3CE4 09E5CC 0058+00 11/11 0/0 0/0 .text setItemHeap__9daAlink_cFv */
@@ -2492,7 +4142,6 @@ int daAlink_c::initDemoBck(mDoExt_bckAnm** p_bck, char const* resName) {
return 1;
}
-
/* 80392094-80392094 01E6F4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
@@ -3846,13 +5495,6 @@ int daAlink_c::createHeap() {
return 1;
}
-
-/* 800A4820-800A48F0 09F160 00D0+00 0/0 1/0 0/0 .text __dt__14J3DMaterialAnmFv */
-// J3DMaterialAnm::~J3DMaterialAnm() {
-extern "C" void __dt__14J3DMaterialAnmFv() {
- // NONMATCHING
-}
-
/* 800A48F0-800A4910 09F230 0020+00 1/1 0/0 0/0 .text daAlink_createHeap__FP10fopAc_ac_c
*/
static int daAlink_createHeap(fopAc_ac_c* i_this) {
@@ -4585,7 +6227,6 @@ int daAlink_c::create() {
return cPhs_COMPLEATE_e;
}
-
/* 800A660C-800A662C 0A0F4C 0020+00 1/0 0/0 0/0 .text daAlink_Create__FP10fopAc_ac_c */
static int daAlink_Create(fopAc_ac_c* i_this) {
return static_cast<daAlink_c*>(i_this)->create();
@@ -4643,12 +6284,99 @@ s32 daAlink_c::setRoomInfo() {
/* 800A67E0-800A6B0C 0A1120 032C+00 1/1 0/0 0/0 .text setShapeAngleOnGround__9daAlink_cFv
*/
void daAlink_c::setShapeAngleOnGround() {
- // NONMATCHING
+ field_0x33cc = cLib_minMaxLimit<f32>(field_0x33cc, 0.0f, 1.0f);
+
+ if (checkModeFlg(0x01000000)) {
+ cXyz sp20;
+ cXyz sp14;
+ cM3dGPla sp2C;
+
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(shape_angle.y);
+ mDoMtx_stack_c::multVec(&l_crawlFrontUpOffset, &sp20);
+ mDoMtx_stack_c::multVec(&l_crawlBackUpOffset, &sp14);
+
+ mLinkGndChk.SetPos(&sp20);
+
+ sp20.y = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
+ bool var_r29;
+ if (-1000000000.0f != sp20.y) {
+ var_r29 = dComIfG_Bgsp().GetTriPla(mLinkGndChk, &sp2C);
+ } else {
+ var_r29 = 0;
+ }
+
+ f32 var_f31;
+ if (var_r29) {
+ var_f31 = sp2C.mNormal.y;
+ } else {
+ var_f31 = -1.0f;
+ }
+
+ mLinkGndChk.SetPos(&sp14);
+
+ sp14.y = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
+ bool var_r29_2;
+ if (-1000000000.0f != sp14.y) {
+ var_r29_2 = dComIfG_Bgsp().GetTriPla(mLinkGndChk, &sp2C);
+ } else {
+ var_r29_2 = 0;
+ }
+
+ f32 var_f30;
+ if (var_r29_2 != 0) {
+ var_f30 = sp2C.mNormal.y;
+ } else {
+ var_f30 = -1.0f;
+ }
+
+ cXyz sp8 = sp20 - sp14;
+ s16 temp_r3 = sp8.atan2sY_XZ();
+
+ if (cLib_distanceAngleS(temp_r3, shape_angle.x) < 0x1000 && var_f31 > 0.0f && var_f30 > 0.0f && fabsf(var_f31 - var_f30) > 0.05f) {
+ shape_angle.x = temp_r3 * field_0x33cc;
+ } else {
+ shape_angle.x = field_0x2ff0 * field_0x33cc;
+ }
+ } else {
+ shape_angle.x = field_0x2ff0 * field_0x33cc;
+ }
+
+ shape_angle.z = field_0x33cc * getGroundAngle(&mLinkAcch.m_gnd, (shape_angle.y - 0x4000));
+
+ if (mProcID == PROC_SLIDE) {
+ mBodyAngle.x = -shape_angle.x;
+ }
}
/* 800A6B0C-800A6DCC 0A144C 02C0+00 1/1 0/0 0/0 .text setStepsOffset__9daAlink_cFv */
void daAlink_c::setStepsOffset() {
- // NONMATCHING
+ field_0x2b9c = 0.0f;
+ cLib_addCalc(&field_0x2b98, 0.0f, 0.5f, 25.0f, 5.0f);
+
+ if (!(fabsf(speedF) < 1.0f)) {
+ s16 temp_r3 = getGroundAngle(&mLinkAcch.m_gnd, current.angle.y);
+ f32 temp_f30 = cM_ssin(temp_r3) / cM_scos(temp_r3);
+
+ cXyz sp14(current.pos.x + (speedF * cM_ssin(current.angle.y)), current.pos.y + l_autoUpHeight, current.pos.z + (speedF * cM_scos(current.angle.y)));
+ mLinkGndChk.SetPos(&sp14);
+
+ f32 temp_f1 = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
+ f32 temp_f31 = (temp_f1 - current.pos.y) - (-speedF * temp_f30);
+ if (temp_f31 > 1.0f) {
+ field_0x2b9c = temp_f1 - current.pos.y;
+ field_0x2b98 -= 0.7f * temp_f31;
+ } else {
+ sp14 = field_0x3798 - current.pos;
+
+ temp_f31 = sp14.y - (temp_f30 * sp14.absXZ());
+ if (temp_f31 >= 0.0f) {
+ field_0x2b98 += 0.7f * temp_f31;
+ }
+ }
+
+ field_0x2b98 = cLib_minMaxLimit<f32>(field_0x2b98, l_autoDownHeight, l_autoUpHeight);
+ }
}
/* 800A6DCC-800A7050 0A170C 0284+00 1/1 0/0 0/0 .text iceSlipBgCheck__9daAlink_cFv */
@@ -4679,7 +6407,6 @@ void daAlink_c::iceSlipBgCheck() {
}
}
-
/* 800A7050-800A7358 0A1990 0308+00 1/1 0/0 0/0 .text setIceSlipSpeed__9daAlink_cFv */
void daAlink_c::setIceSlipSpeed() {
field_0x35d0 = field_0x35c4;
@@ -4814,7 +6541,6 @@ void daAlink_c::setPolygonSpeed() {
}
}
-
/* 800A7950-800A79EC 0A2290 009C+00 4/4 0/0 0/0 .text checkWindSpeedOnAngle__9daAlink_cCFv */
bool daAlink_c::checkWindSpeedOnAngle() const {
if (!checkWindSpeedOnXZ()) {
@@ -4825,7 +6551,6 @@ bool daAlink_c::checkWindSpeedOnAngle() const {
return tmp >= 0x6000 || (tmp >= 0x4000 && checkWindDashAnime());
}
-
/* 800A79EC-800A7A5C 0A232C 0070+00 2/2 0/0 0/0 .text checkWindSpeedOnAngleAnime__9daAlink_cCFi */
bool daAlink_c::checkWindSpeedOnAngleAnime(int param_0) const {
return checkWindSpeedOnAngle() &&
@@ -4838,13 +6563,98 @@ bool daAlink_c::checkDashAnime() const {
}
/* 800A7ABC-800A7CB0 0A23FC 01F4+00 1/1 0/0 0/0 .text checkWindWallRate__9daAlink_cFRC4cXyz */
-void daAlink_c::checkWindWallRate(cXyz const& param_0) {
- // NONMATCHING
+f32 daAlink_c::checkWindWallRate(cXyz const& param_0) {
+ cXyz sp24(current.pos.x, current.pos.y + (0.5f * field_0x598), current.pos.z);
+ cXyz sp18 = sp24 - (param_0 * daAlinkHIO_basic_c0::m.mMaxWindInfluenceDist);
+
+ f32 var_f31;
+ if (commonLineCheck(&sp24, &sp18) && dComIfG_Bgsp().GetWallCode(mLinkLinChk) != 0xA) {
+ var_f31 = (1.0f / (daAlinkHIO_basic_c0::m.mMaxWindInfluenceDist - daAlinkHIO_basic_c0::m.mNoWindInfluenceDist)) * (sp24.abs(mLinkLinChk.i_GetCross()) - daAlinkHIO_basic_c0::m.mNoWindInfluenceDist);
+ if (var_f31 < 0.0f) {
+ var_f31 = 0.0f;
+ }
+ } else {
+ var_f31 = 1.0f;
+ }
+
+ return var_f31;
}
/* 800A7CB0-800A8310 0A25F0 0660+00 1/1 0/0 0/0 .text setWindSpeed__9daAlink_cFv */
void daAlink_c::setWindSpeed() {
- // NONMATCHING
+ if (!checkModeFlg(0x40000) && !checkNoResetFlg0(FLG0_UNDERWATER)) {
+ cXyz sp3C;
+ f32 var_f31;
+ f32 sp8;
+
+ if (field_0xC04[0].ChkTgHit() || field_0xC04[1].ChkTgHit() || field_0xC04[2].ChkTgHit()) {
+ int i = 0;
+ for (; i < 3; i++) {
+ if (field_0xC04[i].ChkTgHit()) {
+ break;
+ }
+ }
+
+ sp3C = *field_0xC04[i].GetTgRVecP();
+ f32 temp_f1 = sp3C.absXZ();
+
+ if (temp_f1 < 1.0f && !checkGrabGlide()) {
+ if (field_0xC04[i].GetTgHitAc() != NULL) {
+ sp3C = current.pos - field_0xC04[i].GetTgHitAc()->current.pos;
+ } else {
+ sp3C = current.pos - *field_0xC04[i].GetTgHitPosP();
+ }
+
+ sp3C.y = 0.0f;
+ sp3C.normalizeZP();
+ sp3C *= field_0xC04[i].GetTgRVecP()->abs();
+ }
+
+ sp8 = sp3C.abs();
+
+ if (temp_f1 >= 1.0f) {
+ sp3C.normalizeZP();
+ sp8 *= checkWindWallRate(sp3C);
+ sp3C *= sp8;
+ }
+
+ if (mWindSpeed.abs2() > sp8 * sp8) {
+ var_f31 = 4.0f;
+ } else {
+ var_f31 = 2.5f;
+ }
+ } else {
+ dKyw_get_AllWind_vec(&current.pos, &sp3C, &sp8);
+
+ if (dKy_TeachWind_existence_chk() == 0 || sp8 < 0.3f) {
+ sp8 = 0.0f;
+ } else if (sp8 > 0.0f && dKy_TeachWind_existence_chk() != -1) {
+ sp8 *= checkWindWallRate(sp3C);
+ }
+
+ sp8 *= daAlinkHIO_basic_c0::m.mMaxWindSpeed;
+ sp3C *= sp8;
+
+ if (mWindSpeed.abs2() > sp8 * sp8) {
+ var_f31 = 3.0f;
+ } else {
+ var_f31 = 1.0f;
+ }
+ }
+
+ cLib_addCalcPos(&field_0x35b8, sp3C, 0.5f, var_f31, 0.5f);
+ field_0x30cc = field_0x35b8.atan2sX_Z();
+
+ if (!checkHeavyStateOn(1, 1) && !checkNoCollisionCorret() && !checkEventRun() && !checkModeFlg(0x10)) {
+ cLib_addCalcPos(&mWindSpeed, sp3C, 0.5f, var_f31, 0.5f);
+ } else {
+ mWindSpeed = cXyz::Zero;
+ }
+ } else {
+ mWindSpeed = cXyz::Zero;
+ field_0x35b8 = cXyz::Zero;
+ field_0x30cc = 0;
+ }
}
/* 80391F44-80391F50 01E5A4 000C+00 0/1 0/0 0/0 .rodata localHeadCenter$59872 */
@@ -4939,7 +6749,71 @@ COMPILER_STRIP_GATE(0x80391FB0, &canoeLocalEyeFromRoot);
/* 800A8310-800A87D8 0A2C50 04C8+00 2/2 0/0 0/0 .text setBodyPartPos__9daAlink_cFv */
void daAlink_c::setBodyPartPos() {
- // NONMATCHING
+ if (checkWolf()) {
+ cMtx_multVec(mpLinkModel->getAnmMtx(4), &wlLocalEye, &eyePos);
+ field_0x3768 = eyePos;
+ cMtx_multVec(mpLinkModel->getAnmMtx(4), &wlLocalHeadCenter, &field_0x34e0);
+ cMtx_multVec(mpLinkModel->getAnmMtx(4), &wlLocalHeadTop, &mHeadTopPos);
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(0x13), &mLeftHandPos);
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(0x18), &mRightHandPos);
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(0x1F), &mLeftFootPos);
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(0x24), &mRightFootPos);
+ } else {
+ cMtx_multVec(mpLinkModel->getAnmMtx(field_0x30b4), &localEye, &eyePos);
+
+ if (dComIfGp_checkPlayerStatus0(0, 0x2000) && !dComIfGp_checkPlayerStatus1(0, 0x02010000) && (!checkModeFlg(0x40000) || !checkNoResetFlg0(FLG0_SWIM_UP)) && !dComIfGp_checkPlayerStatus0(0, 0x08000000)) {
+ mDoMtx_stack_c::transS(current.pos.x, field_0x3834.y, current.pos.z);
+ concatMagneBootMtx();
+ mDoMtx_stack_c::ZXYrotM(field_0x310a, field_0x310c, 0);
+
+ if (checkCanoeRide()) {
+ mDoMtx_stack_c::multVec(&canoeLocalEyeFromRoot, &field_0x3768);
+ } else if (checkBoardRide()) {
+ mDoMtx_stack_c::multVec(&boardLocalEyeFromRoot, &field_0x3768);
+ } else if (checkReinRide()) {
+ mDoMtx_stack_c::multVec(&horseLocalEyeFromRoot, &field_0x3768);
+ } else {
+ mDoMtx_stack_c::multVec(&localEyeFromRoot, &field_0x3768);
+ }
+ } else {
+ field_0x3768 = eyePos;
+ }
+
+ cMtx_multVec(mpLinkModel->getAnmMtx(field_0x30b4), &localHeadCenter, &field_0x34e0);
+ cMtx_multVec(mpLinkModel->getAnmMtx(field_0x30b4), &localHeadTop, &mHeadTopPos);
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(field_0x30b8), &mLeftHandPos);
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(field_0x30ba), &mRightHandPos);
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(field_0x30bc), &mLeftFootPos);
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(field_0x30be), &mRightFootPos);
+ }
+
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(0), &field_0x3834);
+ mItemPos = mHeadTopPos;
+ field_0x5f8 = current.pos;
+
+ if (checkRootTransClearMode()) {
+ Vec sp8;
+
+ if (checkRootTransZClearMode()) {
+ sp8.z = field_0x34d4.z - field_0x3588.z;
+ } else {
+ sp8.z = 0.0f;
+ }
+
+ if (checkRootTransXClearMode()) {
+ sp8.x = field_0x34d4.x - field_0x3588.x;
+ } else {
+ sp8.x = 0.0f;
+ }
+
+ if (checkRootTransYClearMode()) {
+ sp8.y = field_0x33b0 - field_0x3588.y;
+ } else {
+ sp8.y = 0.0f;
+ }
+
+ field_0x5f8.set((current.pos.x - (sp8.z * cM_ssin(shape_angle.y))) - sp8.x * cM_scos(shape_angle.y), current.pos.y - sp8.y, (current.pos.z - (sp8.z * cM_scos(shape_angle.y))) + sp8.x * cM_ssin(shape_angle.y));
+ }
}
/* 800A87D8-800A87F8 0A3118 0020+00 1/0 0/0 0/0 .text setRollJump__9daAlink_cFffs */
@@ -4998,12 +6872,181 @@ COMPILER_STRIP_GATE(0x80391FEC, &swimOffset);
/* 800A87F8-800A8CE4 0A3138 04EC+00 2/2 0/0 0/0 .text setAttentionPos__9daAlink_cFv */
void daAlink_c::setAttentionPos() {
- // NONMATCHING
+ if (mProcID == PROC_METAMORPHOSE) {
+ attention_info.position = field_0x34e0;
+ } else if (checkModeFlg(0x400)) {
+ fopAc_ac_c* temp_r29 = mRideAcKeep.getActor();
+
+ if (mProcID == PROC_CANOE_RIDE || mProcID == PROC_CANOE_GETOFF || (mProcID == PROC_CANOE_WAIT && mProcVar0.field_0x3008 != 0)) {
+ attention_info.position = field_0x34e0;
+ } else if (checkSpinnerRide() || checkBoardRide()) {
+ attention_info.position.set(current.pos.x, 150.0f + current.pos.y, current.pos.z);
+ } else if (temp_r29 != NULL) {
+ if (checkCanoeRide()) {
+ f32 var_f31 = l_canoeBaseAnime.z;
+ if (((daCanoe_c*)temp_r29)->checkTandem()) {
+ var_f31 += 175.0f;
+ }
+
+ attention_info.position.set(temp_r29->current.pos.x + (var_f31 * cM_ssin(shape_angle.y)), 50.0f + (temp_r29->current.pos.y + l_canoeBaseAnime.y), temp_r29->current.pos.z + (var_f31 * cM_scos(shape_angle.y)));
+ } else {
+ attention_info.position.set(temp_r29->current.pos.x, 275.0f + temp_r29->current.pos.y, temp_r29->current.pos.z);
+ }
+ } else {
+ attention_info.position.set(current.pos.x, 50.0f + current.pos.y, current.pos.z);
+ }
+ } else if (checkWolf()) {
+ if (checkModeFlg(0x10000000)) {
+ attention_info.position = field_0x34e0;
+ } else {
+ Vec sp8;
+ sp8.x = 0.0f;
+ sp8.z = 70.0f;
+
+ if (checkModeFlg(0x40000) || mProcID == PROC_LAVA_RETURN) {
+ sp8.y = 20.0f;
+ } else if (checkModeFlg(0x01000000)) {
+ sp8.y = 50.0f;
+ } else {
+ sp8.y = 80.0f;
+ }
+
+ cMtx_multVec(mpLinkModel->getBaseTRMtx(), &sp8, &attention_info.position);
+
+ if (checkModeFlg(0x40000)) {
+ attention_info.position.y = current.pos.y + sp8.y;
+ }
+ }
+ } else if (mProcID == PROC_HOOKSHOT_FLY) {
+ attention_info.position = eyePos;
+ } else if (dComIfGp_checkPlayerStatus1(0, 0x02000000)) {
+ attention_info.position.set(current.pos.x + (100.0f * cM_ssin(shape_angle.y)), -50.0f + current.pos.y, current.pos.z + (100.0f * cM_scos(shape_angle.y)));
+ } else if (dComIfGp_checkPlayerStatus1(0, 0x10000)) {
+ attention_info.position.set(current.pos.x, -100.0f + current.pos.y, current.pos.z);
+ } else if (checkModeFlg(0x800)) {
+ attention_info.position = current.pos;
+ } else if (checkModeFlg(0x40) || mProcID == PROC_BOSS_BODY_HANG) {
+ mDoMtx_multVecZero(mpLinkHatModel->getBaseTRMtx(), &attention_info.position);
+ } else if (mProcID == PROC_ROLL_JUMP) {
+ mDoMtx_multVecZero(mpLinkModel->getBaseTRMtx(), &attention_info.position);
+ attention_info.position.y += 150.0f;
+ } else {
+ const Vec* var_r28;
+ f32 var_f30;
+ if (checkModeFlg(0x800000)) {
+ var_r28 = &crouchOffset;
+ var_f30 = current.pos.y;
+ } else if (checkModeFlg(0x40000)) {
+ var_r28 = &swimOffset;
+ var_f30 = current.pos.y;
+ } else {
+ if (mProcID == PROC_LAVA_RETURN) {
+ var_r28 = &swimOffset;
+ } else if (checkModeFlg(0x01000000)) {
+ var_r28 = &crawlOffset;
+ } else {
+ var_r28 = &normalOffset;
+ }
+
+ var_f30 = mpLinkModel->getBaseTRMtx()[1][3];
+ }
+
+ cMtx_multVecSR(mpLinkModel->getBaseTRMtx(), var_r28, &attention_info.position);
+ attention_info.position.x += current.pos.x;
+ attention_info.position.y += var_f30;
+ attention_info.position.z += current.pos.z;
+
+ if (mProcID == PROC_CLIMB_MOVE_SIDE) {
+ attention_info.position.y = field_0x347c;
+ } else if (mProcID == PROC_SWIM_DIVE) {
+ attention_info.position.y = (field_0x3478 * attention_info.position.y) + (eyePos.y * (1.0f - field_0x3478));
+ }
+ }
+
+ if (mSinkShapeOffset < field_0x3458) {
+ attention_info.position.y += field_0x3458 - mSinkShapeOffset;
+ }
}
/* 800A8CE4-800A9248 0A3624 0564+00 3/3 0/0 0/0 .text setMatrix__9daAlink_cFv */
void daAlink_c::setMatrix() {
- // NONMATCHING
+ f32 var_f31;
+ if (field_0x3174 == 8 && mLinkAcch.i_ChkGroundHit() && !checkModeFlg(0x70C52)) {
+ var_f31 = 20.0f;
+ } else {
+ var_f31 = 0.0f;
+ }
+
+ cLib_addCalc(&field_0x2ba0, var_f31, 0.5f, 12.0f, 3.0f);
+
+ f32 var_f30;
+ if (checkBoardRide()) {
+ var_f30 = 13.0f;
+ } else {
+ var_f30 = 0.0f;
+ }
+
+ mDoMtx_stack_c::transS(current.pos.x, field_0x2ba0 + (field_0x2b9c + (var_f30 + (current.pos.y + field_0x2b98))), current.pos.z);
+ concatMagneBootMtx();
+ mDoMtx_stack_c::ZXYrotM(shape_angle.x, (shape_angle.y + field_0x308c), shape_angle.z);
+
+ if (mProcID == PROC_BOAR_RUN || mProcID == PROC_ZORA_MOVE) {
+ mDoMtx_stack_c::transM(0.0f, 50.0f, 100.0f);
+ mDoMtx_stack_c::ZXYrotM(mProcVar4.field_0x3010, mProcVar5.field_0x3012, (1.5f * mProcVar5.field_0x3012));
+ mDoMtx_stack_c::transM(0.0f, -50.0f, -100.0f);
+ } else if (mProcID == PROC_HORSE_RUN) {
+ mDoMtx_stack_c::transM(0.0f, 20.0f, 70.0f);
+ mDoMtx_stack_c::ZXYrotM(mProcVar4.field_0x3010, mProcVar5.field_0x3012, (0.5f * mProcVar5.field_0x3012));
+ mDoMtx_stack_c::transM(0.0f, -20.0f, -70.0f);
+ } else if (mProcID == PROC_WOLF_CHAIN_WAIT) {
+ mDoMtx_stack_c::transM(0.0f, 5.0f, -3.0f);
+ }
+
+ if (mProcID == PROC_MAGNE_BOOTS_FLY) {
+ mDoMtx_stack_c::YrotM(mProcVar2.field_0x300c);
+ }
+
+ mpLinkModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ mDoMtx_inverse(mDoMtx_stack_c::get(), mInvMtx);
+ mDoMtx_stack_c::XrotS(shape_angle.x);
+ mDoMtx_stack_c::concat(mInvMtx);
+ mDoMtx_copy(mDoMtx_stack_c::get(), field_0x2be8);
+
+ field_0x2fb6 = 0;
+
+ if (!checkWolf()) {
+ if (checkKandelaarEquipAnime() || checkSwordTwirlAnime() || checkNoResetFlg0(FLG0_UNK_1000000) || (checkModeFlg(0x10000) && checkEquipAnime()) || (checkBoardRide() && checkSwordEquipAnime()) || (checkUpperGuardAnime() && checkEquipAnime())) {
+ field_0x2fb6 = 5;
+ } else if (checkReelAnime()) {
+ field_0x2fb6 = 4;
+ } else if (checkEquipAnime() && !checkModeFlg(1)) {
+ if (checkSwordEquipAnime() && !i_checkShieldGet()) {
+ field_0x2fb6 = 5;
+ } else {
+ field_0x2fb6 = 1;
+ }
+ } else if (checkAnmEnd(&mUnderFrameCtrl[0]) && (checkUnderMove0BckNoArc(ANM_HORSE_TURN_LEFT) || checkUnderMove0BckNoArc(ANM_HORSE_TURN_B) || checkUnderMove0BckNoArc(ANM_HORSE_TURN_RIGHT))) {
+ field_0x2fb6 = 6;
+ } else if (checkCokkoGlide()) {
+ field_0x2fb6 = 8;
+ } else if ((mProcID == PROC_SLIDE && field_0x3198 != 0) || (checkWindDashAnime() && checkUnderMove1BckNoArc(ANM_WALK_HEAVY) && (checkModeFlg(1) || checkZeroSpeedF()))) {
+ field_0x2fb6 = 7;
+ } else if (checkUpperAnime(0x96) || checkCutDashChargeAnime() || (checkReinRide() && (checkUpperReadyThrowAnime() || checkGrabAnime()))) {
+ field_0x2fb6 = 3;
+ } else if (checkSwordEquipAnime() && !i_checkShieldGet()) {
+ field_0x2fb6 = 2;
+ } else if (checkIronBallWaitAnime()) {
+ if (checkUnderMove0BckNoArc(ANM_IRONBALL_WAIT)) {
+ mNowAnmPackUpper[2].setRatio(0.0f);
+ } else {
+ mNowAnmPackUpper[2].setRatio(1.0f);
+ }
+ }
+
+ if (field_0x2fb6 != 0) {
+ field_0x3444 = mNowAnmPackUpper[2].getRatio();
+ }
+ }
}
/* 800A9248-800A92F0 0A3B88 00A8+00 15/15 0/0 5/5 .text simpleAnmPlay__9daAlink_cFP10J3DAnmBase */
@@ -5029,7 +7072,6 @@ int daAlink_c::simpleAnmPlay(J3DAnmBase* i_anm) {
return ret;
}
-
/* 80391FF8-80392004 01E658 000C+00 0/1 0/0 0/0 .rodata swordMoveLocal0$60438 */
#pragma push
#pragma force_active on
@@ -5059,23 +7101,293 @@ COMPILER_STRIP_GATE(0x80392010, &copyRodTop);
/* 800A92F0-800A9450 0A3C30 0160+00 2/2 0/0 0/0 .text setSwordPos__9daAlink_cFv */
void daAlink_c::setSwordPos() {
- // NONMATCHING
+ field_0x34b0 = mSwordTopPos;
+ field_0x34bc = field_0x3498;
+ mDoMtx_multVecZero(mSwordModel->getBaseTRMtx(), &field_0x3498);
+
+ if (mCutType == CUT_TYPE_TWIRL || mCutType == CUT_TYPE_FINISH_RIGHT) {
+ mDoMtx_multVecSR(mSwordModel->getBaseTRMtx(), &swordMoveLocal1, &field_0x34a4);
+ } else {
+ mDoMtx_multVecSR(mSwordModel->getBaseTRMtx(), &swordMoveLocal0, &field_0x34a4);
+ }
+
+ if (checkMasterSwordEquip()) {
+ mDoMtx_multVec(mSwordModel->getBaseTRMtx(), &l_swordTopLocalM, &mSwordTopPos);
+ } else {
+ mDoMtx_multVec(mSwordModel->getBaseTRMtx(), &l_swordTopLocalN, &mSwordTopPos);
+ }
+
+ if (mEquipItem == 0x10B) {
+ mDoMtx_multVec(getCanoePaddleMatrix(), getCanoeLocalPaddleTop(), &field_0x3720);
+ } else if (mEquipItem == COPY_ROD) {
+ mDoMtx_multVec(mHeldItemModel->getBaseTRMtx(), &copyRodTop, &field_0x3720);
+ } else {
+ field_0x3720 = mSwordTopPos;
+ }
}
/* 800A9450-800A9F4C 0A3D90 0AFC+00 4/4 0/0 0/0 .text setItemMatrix__9daAlink_cFi */
void daAlink_c::setItemMatrix(int param_0) {
- // NONMATCHING
-}
+ mSheathModel->setBaseTRMtx(mpLinkModel->getAnmMtx(field_0x30b6));
+ modelCalc(mSheathModel);
+
+ int var_r26;
+ if (!checkNoResetFlg3(FLG3_UNK_4000000)) {
+ if (mEquipItem == 0x103 || param_0 != 0) {
+ mSwordModel->setBaseTRMtx(mpLinkModel->getAnmMtx(field_0x30c0));
+ var_r26 = 1;
+ } else {
+ mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(field_0x30b6));
+ mDoMtx_stack_c::transM(-18.5f, 0.14f, 12.2f);
+ mDoMtx_stack_c::XYZrotM(0, cM_deg2s(33.1f), 0);
+ mSwordModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ var_r26 = 2;
+ }
-/* 8039201C-80392028 01E67C 000C+00 1/1 0/0 0/0 .rodata @61047 */
-SECTION_RODATA static u8 const lit_61047[12] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x8039201C, &lit_61047);
+ modelCalc(mSwordModel);
+ }
+
+ int var_r28;
+ if (!i_checkSwordGet()) {
+ var_r28 = 0;
+ } else if (checkLightMasterSwordEquip()) {
+ var_r28 = 3;
+ } else if (checkMasterSwordEquip()) {
+ var_r28 = 2;
+ } else {
+ var_r28 = 1;
+ }
+
+ mZ2Link.setLinkSwordType(var_r28, var_r26);
+
+ if (mShieldChangeWaitTimer == 0) {
+ if (param_0 != 0 || (checkPlayerGuardAndAttack() && mEquipItem != IRONBALL && !checkModeFlg(0x400)) || checkNoResetFlg0(FLG0_UNK_2) || (mProcID == PROC_TOOL_DEMO && mProcVar4.field_0x3010 != 0) || (mProcID == PROC_CUT_REVERSE && mProcVar2.field_0x300c != 0) || mProcID == PROC_GUARD_BREAK || (mEquipItem == 0x103 && !checkEndResetFlg1(ERFLG1_GANON_FINISH) && !checkModeFlg(0x400))) {
+ mShieldModel->setBaseTRMtx(mpLinkModel->getAnmMtx(field_0x30c2));
+
+ if (i_checkShieldGet()) {
+ field_0x2e44.offPassNum(0xF);
+ mDoAud_setLinkShieldType(1, 1);
+ } else {
+ field_0x2e44.onPassNum(0xF);
+ mDoAud_setLinkShieldType(0, 2);
+ }
+
+ field_0x2e44.onPassNum(0x10);
+
+ for (int i = 0; i < 16; i++) {
+ field_0x2f7c[i] = 0;
+ }
+ } else {
+ mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(field_0x30b6));
+ mDoMtx_stack_c::transM(4.2f, -4.4f, -20.0f);
+ mDoMtx_stack_c::XYZrotM(cM_deg2s(91.0f), cM_deg2s(57.0f), cM_deg2s(180.0f));
+ mShieldModel->setBaseTRMtx(mDoMtx_stack_c::get());
+
+ if (!i_checkShieldGet()) {
+ mDoAud_setLinkShieldType(0, 2);
+ field_0x2e44.onPassNum(0x10);
+ } else {
+ field_0x2e44.offPassNum(0x10);
+ mDoAud_setLinkShieldType(1, 2);
+ }
+
+ field_0x2e44.onPassNum(0xF);
+ stickArrowIncrement(0);
+ clearWoodShieldBurnEffect();
+ }
+
+ modelCalc(mShieldModel);
+ }
+
+ mpLinkFaceModel->setBaseTRMtx(mpLinkModel->getAnmMtx(4));
+ modelCalc(mpLinkFaceModel);
+ mpLinkHatModel->setBaseTRMtx(mpLinkModel->getAnmMtx(4));
+
+ if ((mpDemoHDTmpBck != NULL) && mpLinkHatModel != NULL && mClothesChangeWaitTimer == 0) {
+ if (mpDemoHDTmpBck->getBckAnm() != NULL) {
+ mpDemoHDTmpBck->entry(mpLinkHatModel->getModelData());
+ } else {
+ mpDemoHDTmpBck->remove(mpLinkHatModel->getModelData());
+ }
+ }
+
+ modelCalc(mpLinkHatModel);
+
+ if (checkEquipHeavyBoots()) {
+ for (int i = 0; i < 2; i++) {
+ mpLinkBootModels[i]->setBaseTRMtx(mpLinkModel->getBaseTRMtx());
+ modelCalc(mpLinkBootModels[i]);
+ }
+
+ mpLinkBootModels[0]->setAnmMtx(1, mpLinkModel->getAnmMtx(0x13));
+ mpLinkBootModels[0]->setAnmMtx(2, mpLinkModel->getAnmMtx(0x14));
+ mpLinkBootModels[0]->setAnmMtx(3, mpLinkModel->getAnmMtx(0x15));
+
+ mDoMtx_stack_c::XrotS(-0x8000);
+ mDoMtx_concat(mpLinkModel->getAnmMtx(0x18), mDoMtx_stack_c::get(), mpLinkBootModels[1]->getAnmMtx(1));
+ mDoMtx_concat(mpLinkModel->getAnmMtx(0x19), mDoMtx_stack_c::get(), mpLinkBootModels[1]->getAnmMtx(2));
+ mDoMtx_concat(mpLinkModel->getAnmMtx(0x1A), mDoMtx_stack_c::get(), mpLinkBootModels[1]->getAnmMtx(3));
+ }
+
+ if (!checkNoResetFlg2(FLG2_STATUS_WINDOW_DRAW)) {
+ if (mpDemoFCBlendModel != NULL) {
+ mpDemoFCBlendModel->setBaseTRMtx(mpLinkModel->getAnmMtx(4));
+ mpDemoFCBlendModel->calc();
+ }
+
+ if (mpDemoFCTongueModel != NULL) {
+ mpDemoFCTongueModel->setBaseTRMtx(mpLinkModel->getAnmMtx(4));
+ if (mpDemoFCTmpBck != NULL) {
+ mpDemoFCTmpBck->entry(mpDemoFCTongueModel->getModelData());
+ }
+ mpDemoFCTongueModel->calc();
+ }
+
+ if (mHeldItemModel != NULL) {
+ if (mEquipItem == 0x106) {
+ mHeldItemModel->setBaseTRMtx(mpLinkModel->getAnmMtx(4));
+ } else if (checkOilBottleItemNotGet(mEquipItem)) {
+ mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(field_0x30c2));
+ mDoMtx_stack_c::transM(1.5f, -7.5f, -1.0f);
+ mDoMtx_stack_c::XYZrotM(cM_deg2s(183.0f), cM_deg2s(176.0f), cM_deg2s(167.0f));
+ mHeldItemModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ } else if (checkBottleItem(mEquipItem)) {
+ mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(field_0x30c0));
+ mDoMtx_stack_c::transM(-10.0f,-0.5f, -5.5f);
+ mDoMtx_stack_c::XYZrotM(cM_deg2s(174.0f), cM_deg2s(-47.0f), cM_deg2s(94.0f));
+ mHeldItemModel->setBaseTRMtx(mDoMtx_stack_c::get());
+
+ if (mpHookTipModel != NULL) {
+ simpleAnmPlay(mHookTipBck.getBckAnm());
+ mpHookTipModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ mpHookTipModel->calc();
+ }
+ } else if (checkBowAndSlingItem(mEquipItem)) {
+ if (checkBowGrabLeftHand()) {
+ mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(field_0x30c0));
+ mDoMtx_stack_c::transM(-1.3f, 0.0f, -3.0f);
+ mDoMtx_stack_c::XYZrotM(cM_deg2s(-74.0f), cM_deg2s(43.6), cM_deg2s(1.9f));
+ mHeldItemModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ } else {
+ mHeldItemModel->setBaseTRMtx(mpLinkModel->getAnmMtx(field_0x30c2));
+ }
+ } else if (checkHookshotItem(mEquipItem)) {
+ setHookshotPos();
+ } else if (mEquipItem == IRONBALL) {
+ setIronBallPos();
+ } else {
+ if (mEquipItem == COPY_ROD && mProcID != PROC_COPY_ROD_REVIVE) {
+ if (checkCopyRodTopUse()) {
+ field_0x0724->setFrame(field_0x0724->getFrameMax() - 0.001f);
+ } else {
+ field_0x0724->setFrame(0.0f);
+ }
+ }
+
+ mHeldItemModel->setBaseTRMtx(mpLinkModel->getAnmMtx(field_0x30c0));
+ }
+
+ if (mItemBck.getBckAnm() != NULL) {
+ if (field_0x33dc >= mItemBck.getBckAnm()->getFrameMax()) {
+ field_0x33dc = mItemBck.getBckAnm()->getFrameMax() - 0.001f;
+ }
+
+ mItemBck.entry(mHeldItemModel->getModelData(), field_0x33dc);
+ }
+
+ mHeldItemModel->calc();
+ }
+
+ if (checkNoResetFlg2(FLG2_UNK_1) || checkEndResetFlg1(ERFLG1_UNK_4)) {
+ simpleAnmPlay(mpKanteraGlowBtk);
+
+ if (mProcID != PROC_OPEN_TREASURE && !checkEndResetFlg1(ERFLG1_UNK_4) && (mProcID != PROC_GET_ITEM || mProcVar4.field_0x3010 == 0)) {
+ if (mEquipItem == KANTERA || checkOilBottleItemNotGet(mEquipItem)) {
+ mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(field_0x30c0));
+ mDoMtx_stack_c::transM(-2.0f, -0.1f, -0.7f);
+ mDoMtx_stack_c::XYZrotM(cM_deg2s(100.0f), cM_deg2s(9.3f), cM_deg2s(183.0f));
+ mpKanteraModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ } else {
+ mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(0x10));
+ mDoMtx_stack_c::transM(-1.0f, 4.5f, 9.0f);
+ mDoMtx_stack_c::XYZrotM(cM_deg2s(-75.0f), cM_deg2s(62.0f), cM_deg2s(89.0f));
+ mpKanteraModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ }
+ }
+
+ modelCalc(mpKanteraModel);
+ mDoMtx_stack_c::transS(mKandelaarFlamePos);
+ mpKanteraGlowModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ modelCalc(mpKanteraGlowModel);
+ }
+
+ setSwordPos();
+ simpleAnmPlay(m_mSwordBtk);
+ simpleAnmPlay(m_mSwordBrk);
+ setHorseStirrup();
+ }
+}
/* 800A9F4C-800AA2BC 0A488C 0370+00 4/4 0/0 0/0 .text setWolfItemMatrix__9daAlink_cFv */
void daAlink_c::setWolfItemMatrix() {
- // NONMATCHING
+ mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(2));
+ mDoMtx_stack_c::transM(31.0f, -29.0f, 19.0f);
+ mDoMtx_stack_c::XYZrotM(0, cM_deg2s(32.0f), cM_deg2s(157.0f));
+ mSwordModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ modelCalc(mSwordModel);
+
+ mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(2));
+ mDoMtx_stack_c::transM(13.0f, -21.0f, 7.0f);
+ mDoMtx_stack_c::XYZrotM(0, cM_deg2s(-0.8f), cM_deg2s(157.0f));
+ mSheathModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ modelCalc(mSheathModel);
+
+ mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(2));
+ mDoMtx_stack_c::transM(11.0f, -18.0f, -13.0f);
+ mDoMtx_stack_c::XYZrotM(cM_deg2s(90.0f), cM_deg2s(58.0f), cM_deg2s(-24.0f));
+
+ if (mShieldChangeWaitTimer == 0) {
+ mShieldModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ modelCalc(mShieldModel);
+ }
+
+ if (!checkNoResetFlg2(FLG2_STATUS_WINDOW_DRAW)) {
+ setSwordPos();
+
+ if (mHeldItemModel != NULL) {
+ if (mEquipItem == 0x109) {
+ f32 temp_f31 = 0.01f * mSearchBallScale;
+ Vec sp1C = {temp_f31, temp_f31, temp_f31};
+
+ mDoMtx_trans(mHeldItemModel->getBaseTRMtx(), current.pos.x, current.pos.y, current.pos.z);
+ mHeldItemModel->setBaseScale(sp1C);
+
+ if (field_0x0718 != NULL) {
+ simpleAnmPlay(field_0x0718);
+ }
+ } else {
+ mDoMtx_stack_c::copy(mpLinkModel->getAnmMtx(4));
+ mDoMtx_stack_c::transM(28.0f, 14.0f, 0.0f);
+ mDoMtx_copy(mDoMtx_stack_c::get(), mHeldItemModel->getBaseTRMtx());
+ mIronBallCenterPos = mHookshotTopPos;
+ mHookshotTopPos = mHeldItemRootPos;
+ mDoMtx_stack_c::multVecZero(&mHeldItemRootPos);
+
+ simpleAnmPlay(field_0x0718);
+
+ mpHookSound->startLevelSound(Z2SE_EN_PO_SOUL, 0, -1);
+ mpHookSound->framework(0, mVoiceReverbIntensity);
+
+ if (mProcID != PROC_WOLF_DOWN_AT_LAND) {
+ field_0x32d4 = dComIfGp_particle_set(field_0x32d4, 0x86CD, &mHeldItemRootPos, &tevStr, NULL, NULL, 0xFF, &field_0x2f38, -1, NULL, NULL, NULL);
+ }
+ }
+
+ mHeldItemModel->calc();
+ }
+
+ setWolfChainPos();
+ }
}
/* 800AA2BC-800AA2E0 0A4BFC 0024+00 3/3 0/0 0/0 .text
@@ -5265,18 +7577,260 @@ void daAlink_c::resetAtCollision(int param_0) {
}
}
-/* 80392028-80392034 01E688 000C+00 0/1 0/0 0/0 .rodata bottleTopPos$61387 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static Vec const bottleTopPos = {
- 0.0f, 20.0f, 0.0f
-};
-COMPILER_STRIP_GATE(0x80392028, &bottleTopPos);
-#pragma pop
-
/* 800AAABC-800AB878 0A53FC 0DBC+00 1/1 0/0 0/0 .text setAtCollision__9daAlink_cFv */
void daAlink_c::setAtCollision() {
- // NONMATCHING
+ static const Vec bottleTopPos = {
+ 0.0f, 20.0f, 0.0f
+ };
+
+ static Vec rodTopOffset = {
+ 0.0f, daCrod_c::getFlyInitY(), 0.0f
+ };
+
+ daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0];
+
+ cXyz spC8;
+ cXyz spBC;
+ cXyz spB0;
+ cXyz spA4;
+
+ if (mProcID == PROC_COPY_ROD_SWING) {
+ if (mProcVar3.field_0x300e != 0) {
+ mDoMtx_multVecZero(mHeldItemModel->getBaseTRMtx(), &spBC);
+ mAtCps[0].SetStartEnd(spBC, field_0x3720);
+ spA4.set(5.0f * cM_ssin(shape_angle.y), 0.0f, 5.0f * cM_scos(shape_angle.y));
+ mAtCps[0].SetAtVec(spA4);
+ dComIfG_Ccsp()->Set(&mAtCps[0]);
+ } else {
+ mAtCps[0].ResetAtHit();
+ }
+ } else if (mProcID == PROC_COPY_ROD_SUBJECT && checkCopyRodTopUse()) {
+ mDoMtx_stack_c::transS(field_0x3834);
+ mDoMtx_stack_c::ZXYrotM(mBodyAngle.x, (shape_angle.y + mBodyAngle.y), 0);
+ mDoMtx_stack_c::multVec(&rodTopOffset, &spBC);
+
+ spC8.set(0.0f, 0.0f, getCopyRodBallDisMax() + daCrod_c::getFlyInitZ());
+ mDoMtx_stack_c::multVecSR(&spC8, &spA4);
+ spB0 = spBC + spA4;
+
+ mAtCps[0].SetStartEnd(spBC, spB0);
+ mAtCps[0].SetAtVec(spA4);
+ dComIfG_Ccsp()->Set(&mAtCps[0]);
+ } else if (mProcID == PROC_BOTTLE_OPEN) {
+ if (mEquipItem == WATER_BOTTLE && mProcVar4.field_0x3010 != 0) {
+ mDoMtx_multVec(mHeldItemModel->getBaseTRMtx(), &bottleTopPos, &spC8);
+
+ if (field_0x27c8.getKeepMinY() < spC8.y) {
+ mAtCyl.SetH(spC8.y - field_0x27c8.getKeepMinY());
+ spC8.y = field_0x27c8.getKeepMinY();
+
+ mAtCyl.SetC(spC8);
+ dComIfG_Ccsp()->Set(&mAtCyl);
+ }
+ } else {
+ mAtCyl.ResetAtHit();
+ }
+ } else if (mProcID == PROC_GUARD_ATTACK) {
+ if (mProcVar5.field_0x3012 != 0) {
+ if (checkMagneBootsOn()) {
+ mDoMtx_stack_c::copy(mMagneBootMtx);
+ mDoMtx_stack_c::YrotM(shape_angle.y);
+ } else {
+ mDoMtx_stack_c::YrotS(shape_angle.y);
+ }
+
+ mDoMtx_stack_c::multVecSR(&cXyz::BaseZ, &spA4);
+
+ spBC = current.pos + (spA4 * daAlinkHIO_guard_c0::m.mAttackPosOffset);
+ mDoMtx_stack_c::multVecSR(&cXyz::BaseY, &spC8);
+
+ spB0 = spBC + (spC8 * 130.0f);
+ mGuardAtCps.SetStartEnd(spBC, spB0);
+
+ spA4 *= 5.0f;
+ mGuardAtCps.SetAtVec(spA4);
+
+ dComIfG_Ccsp()->Set(&mGuardAtCps);
+ g_dComIfG_gameInfo.play.mCcs.mMass_Mng.Set(&mGuardAtCps, 1);
+ } else {
+ mGuardAtCps.ResetAtHit();
+ }
+ } else if (mProcID == PROC_FRONT_ROLL) {
+ if (checkEquipHeavyBoots() && temp_r29->getFrame() >= daAlinkHIO_frontRoll_c0::m.mBootsAttackInitF && temp_r29->getFrame() < daAlinkHIO_frontRoll_c0::m.mBootsAttackEndF) {
+ cXyz sp98 = (mLeftFootPos + mRightFootPos) * 0.5f;
+ field_0xFB8.SetC(sp98);
+ sp98.set(mNormalSpeed * cM_ssin(shape_angle.y), 0.0f, mNormalSpeed * cM_scos(shape_angle.y));
+ field_0xFB8.SetAtVec(sp98);
+
+ dComIfG_Ccsp()->Set(&field_0xFB8);
+ } else {
+ field_0xFB8.ResetAtHit();
+ }
+ } else if (checkHookshotItem(mEquipItem)) {
+ if (mItemMode == 3 || mItemMode == 1) {
+ f32 var_f30;
+ f32 var_f29;
+ if (checkLv7BossRoom()) {
+ var_f29 = daAlinkHIO_hookshot_c0::m.mBossShootSpeed;
+ var_f30 = daAlinkHIO_hookshot_c0::m.mBossMaxLength;
+ } else {
+ var_f29 = daAlinkHIO_hookshot_c0::m.mShootSpeed;
+ var_f30 = daAlinkHIO_hookshot_c0::m.mMaxLength;
+ }
+
+ f32 var_f31;
+ if (mItemMode == 3) {
+ spC8 = mHookshotTopPos - mHeldItemRootPos;
+
+ f32 temp_f1 = spC8.abs();
+ var_f31 = 15.0f + var_f29;
+ if (var_f31 + temp_f1 > var_f30) {
+ var_f31 = var_f30 - temp_f1;
+ }
+
+ if (cLib_distanceAngleS(spC8.atan2sX_Z(), field_0x301e) > 0x4000) {
+ var_f31 = -1.0f;
+ }
+ } else {
+ mRopeLinChk.Set(&field_0x3834, &mHeldItemRootPos, this);
+ if (dComIfG_Bgsp().LineCross(&mRopeLinChk)) {
+ var_f31 = -1.0f;
+ } else {
+ var_f31 = var_f30;
+ }
+ }
+
+ if (var_f31 > 0.0f) {
+ spBC = mHookshotTopPos;
+ spB0 = mHookshotTopPos + (mIronBallCenterPos * var_f31);
+
+ mRopeLinChk.Set(&spBC, &spB0, this);
+ if (dComIfG_Bgsp().LineCross(&mRopeLinChk)) {
+ spB0 = mRopeLinChk.i_GetCross();
+ }
+
+ mAtCps[0].SetStartEnd(spBC, spB0);
+ spA4 = spB0 - spBC;
+ mAtCps[0].SetAtVec(spA4);
+ dComIfG_Ccsp()->Set(&mAtCps[0]);
+ } else {
+ mAtCps[0].ResetAtHit();
+ }
+ } else {
+ mAtCps[0].ResetAtHit();
+ }
+ } else if (checkKandelaarSwing(1)) {
+ if (dComIfGs_getOil() != 0 && mUnderFrameCtrl[0].getFrame() >= field_0x347c && mUnderFrameCtrl[0].getFrame() <= field_0x3480) {
+ if (field_0xFB8.ChkAtSet()) {
+ field_0xFB8.MoveCAt(mKandelaarFlamePos);
+ } else {
+ field_0xFB8.OnAtSetBit();
+ field_0xFB8.StartCAt(mKandelaarFlamePos);
+ }
+
+ dComIfG_Ccsp()->Set(&field_0xFB8);
+ g_dComIfG_gameInfo.play.mCcs.mMass_Mng.Set(&field_0xFB8, 1);
+ } else {
+ field_0xFB8.ResetAtHit();
+ }
+ } else if (mEquipItem == IRONBALL) {
+ if (mItemVar0.field_0x3018 == 2 || mItemVar0.field_0x3018 == 3 || mItemVar0.field_0x3018 == 4 || mItemVar0.field_0x3018 == 5 || mItemVar0.field_0x3018 == 7 || mItemVar0.field_0x3018 == 6) {
+
+ if (field_0xFB8.ChkAtSet()) {
+ field_0xFB8.MoveCAt(mIronBallCenterPos);
+ } else {
+ field_0xFB8.StartCAt(mIronBallCenterPos);
+ field_0xFB8.OnAtSetBit();
+ }
+
+ dComIfG_Ccsp()->Set(&field_0xFB8);
+ g_dComIfG_gameInfo.play.mCcs.mMass_Mng.Set(&field_0xFB8, 1);
+
+ if (mItemVar0.field_0x3018 == 5 || mItemVar0.field_0x3018 == 7 || mItemVar0.field_0x3018 == 6) {
+ field_0x1778.SetC(mIronBallCenterPos);
+ dComIfG_Ccsp()->Set(&field_0x1778);
+ }
+ } else {
+ field_0xFB8.ResetAtHit();
+ field_0x1778.ResetAtHit();
+ }
+ }
+
+ if (checkResetFlg0(RFLG0_UNK_2)) {
+ if (!setSwordHitVibration(&mAtCps[0]) && !setSwordHitVibration(&mAtCps[1]) && !setSwordHitVibration(&mAtCps[2]) && !setSwordHitVibration(&mAtCyl)) {
+ setSwordHitVibration(&field_0xFB8);
+ }
+
+ if (checkCutDashAnime()) {
+ m_swordBlur.field_0x20 = daAlinkHIO_cut_c0::m.mDashBlurAlpha;
+ spC8.set(current.pos.x + (50.0f * cM_ssin(shape_angle.y)), 20.0f + current.pos.y, current.pos.z + (50.0f * cM_scos(shape_angle.y)));
+ } else {
+ m_swordBlur.field_0x20 = daAlinkHIO_cut_c0::m.mBlurAlpha;
+ spC8.set(current.pos.x + (50.0f * cM_ssin(shape_angle.y)), field_0x3478, current.pos.z + (50.0f * cM_scos(shape_angle.y)));
+ }
+
+ if (mProcID == PROC_CUT_TURN || (mProcID == PROC_CUT_LARGE_JUMP_LAND && mProcVar2.field_0x300c != 0) || mProcID == PROC_BOARD_CUT_TURN) {
+ if (!checkNoResetFlg0(FLG0_UNK_40)) {
+ onNoResetFlg0(FLG0_UNK_40);
+ }
+
+ spC8 = current.pos + (mMagneBootsTopVec * 50.0f);
+ field_0xFB8.SetC(spC8);
+
+ spC8 = cXyz::Zero;
+ field_0xFB8.SetAtVec(spC8);
+ dComIfG_Ccsp()->Set(&field_0xFB8);
+ g_dComIfG_gameInfo.play.mCcs.mMass_Mng.Set(&field_0xFB8, 1);
+ decSwordBlur();
+
+ if (mProcID == PROC_BOARD_CUT_TURN) {
+ mProcVar5.field_0x3012 = cM_atan2s(mRightFootPos.x - mLeftFootPos.x, mRightFootPos.z - mLeftFootPos.z) - shape_angle.y;
+ }
+ } else if (mProcID == PROC_HORSE_CUT_TURN) {
+ if (!checkNoResetFlg0(FLG0_UNK_40)) {
+ onNoResetFlg0(FLG0_UNK_40);
+ }
+
+ spC8.set(current.pos.x, current.pos.y - 80.0f, current.pos.z);
+ mAtCyl.SetC(spC8);
+ dComIfG_Ccsp()->Set(&mAtCyl);
+ g_dComIfG_gameInfo.play.mCcs.mMass_Mng.Set(&mAtCyl, 1);
+ decSwordBlur();
+ } else if (!checkNoResetFlg0(FLG0_UNK_40)) {
+ setSwordAtCollision(1);
+ onNoResetFlg0(FLG0_UNK_40);
+
+ if (checkCutDashAnime()) {
+ mAtCyl.StartCAt(spC8);
+ dComIfG_Ccsp()->Set(&mAtCyl);
+ }
+
+ if (!checkCutTypeNoBlur()) {
+ m_swordBlur.initBlur(0.0f, 0, &mSwordTopPos, &field_0x3498, &field_0x34a4);
+ return;
+ }
+
+ decSwordBlur();
+ } else {
+ setSwordAtCollision(0);
+
+ if (checkCutDashAnime()) {
+ mAtCyl.MoveCAt(spC8);
+ dComIfG_Ccsp()->Set(&mAtCyl);
+ }
+
+ if (!checkCutTypeNoBlur()) {
+ m_swordBlur.copyBlur(&mSwordTopPos, &field_0x3498, &field_0x34a4);
+ return;
+ }
+
+ decSwordBlur();
+ }
+ } else {
+ decSwordBlur();
+ resetAtCollision(1);
+ mAtCyl.ResetAtHit();
+ }
}
/* 80392034-80392040 01E694 000C+00 1/1 0/0 0/0 .rodata localHead$61779 */
@@ -5288,7 +7842,56 @@ COMPILER_STRIP_GATE(0x80392034, &localHead);
/* 800AB878-800ABAE0 0A61B8 0268+00 1/1 0/0 0/0 .text setWolfCollisionPos__9daAlink_cFv
*/
void daAlink_c::setWolfCollisionPos() {
- // NONMATCHING
+ cXyz sp44;
+ mDoMtx_multVec(mpLinkModel->getAnmMtx(4), &localHead, &sp44);
+ field_0xFB8.MoveCAt(sp44);
+
+ cXyz sp38;
+ cXyz sp2C;
+ f32 sp20[3];
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(0x10), &sp38);
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(0x15), &sp2C);
+
+ sp44.x = 0.5f * (sp38.x + sp2C.x);
+ sp44.z = 0.5f * (sp38.z + sp2C.z);
+
+ sp20[0] = field_0xFB8.GetC().y;
+ sp44.y = mLeftHandPos.y > mRightHandPos.y ? mRightHandPos.y : mLeftHandPos.y;
+
+ if (sp20[0] < sp44.y) {
+ f32 temp_f31 = sp20[0];
+ sp20[0] = sp44.y;
+ sp44.y = temp_f31;
+ }
+
+ field_0x850[0].SetC(sp44);
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(0x1C), &sp38);
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(0x21), &sp2C);
+
+ sp20[2] = 0.5f * (sp38.y + sp2C.y);
+ sp44.x = 0.5f * (sp38.x + sp2C.x);
+ sp44.z = 0.5f * (sp38.z + sp2C.z);
+
+ sp44.y = mLeftFootPos.y > mRightFootPos.y ? mRightFootPos.y : mLeftFootPos.y;
+
+ if (sp20[2] < sp44.y) {
+ f32 temp_f31_2 = sp20[2];
+ sp20[2] = sp44.y;
+ sp44.y = temp_f31_2;
+ }
+
+ field_0x850[2].SetC(sp44);
+ sp44 = (field_0x850[0].GetC() + field_0x850[2].GetC()) * 0.5f;
+
+ sp20[1] = 0.5f * (sp20[0] + sp20[2]);
+
+ field_0x850[1].SetC(sp44);
+
+ for (int i = 0; i < 3; i++) {
+ field_0x850[i].SetH(20.0f + (sp20[i] - field_0x850[i].GetC().y));
+ }
+
+ field_0x3454 = field_0x850[0].GetC().y + (field_0x850[0].GetH() * 0.5f);
}
/* 800ABAE0-800ABB28 0A6420 0048+00 2/2 0/0 0/0 .text initLockAt__9daAlink_cFv */
@@ -5360,7 +7963,7 @@ void daAlink_c::setCollisionPos() {
}
/* 800ABDB8-800AC328 0A66F8 0570+00 1/1 0/0 0/0 .text setCollision__9daAlink_cFv */
-// NONMATCHING
+// NONMATCHING - regalloc / minor issues
void daAlink_c::setCollision() {
field_0x814.Move();
field_0x173c.Move();
@@ -5511,7 +8114,6 @@ f32 daAlink_c::getBaseAnimeFrame() const {
return mUnderFrameCtrl[0].getFrame();
}
-
/* 800AC378-800AC394 0A6CB8 001C+00 1/0 0/0 0/0 .text setAnimeFrame__9daAlink_cFf */
void daAlink_c::setAnimeFrame(f32 frame) {
mUnderFrameCtrl[0].setFrame(frame);
@@ -5646,7 +8248,60 @@ void daAlink_c::setDoubleAnimeBlendRatio(f32 param_0) {
void daAlink_c::commonDoubleAnime(J3DAnmTransform* param_0, J3DAnmTransform* param_1,
J3DAnmTransform* param_2, J3DAnmTransform* param_3,
f32 param_4, f32 param_5, f32 param_6, int param_7) {
- // NONMATCHING
+ daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0];
+ daPy_frameCtrl_c* temp_r24 = &mUnderFrameCtrl[1];
+
+ f32 var_f31;
+ if (field_0x2f8c == 0) {
+ var_f31 = 0.0f;
+ } else {
+ var_f31 = temp_r29->getFrame() / temp_r29->getEnd();
+ }
+
+ setDoubleAnimeBlendRatio(param_4);
+
+ f32 temp_f30;
+ f32 temp_f29 = param_0->getFrameMax();
+ f32 temp_f28 = param_2->getFrameMax();
+ f32 temp_f27 = 1.0f / temp_f29;
+ temp_f30 = param_5 + (param_4 * (((param_6 * temp_f29) / temp_f28) - param_5));
+
+ setFrameCtrl(temp_r29, param_0->getAttribute(), 0, temp_f29, temp_f30, var_f31 * temp_f29);
+ param_0->setFrame(temp_r29->getFrame());
+
+ setFrameCtrl(temp_r24, param_2->getAttribute(), 0, temp_f28, temp_f27 * (temp_f30 * temp_f28), var_f31 * temp_f28);
+ param_2->setFrame(temp_r24->getFrame());
+
+ mNowAnmPackUnder[0].setAnmTransform(param_0);
+ mNowAnmPackUnder[1].setAnmTransform(param_2);
+
+ if (param_1 != NULL) {
+ f32 temp_f26 = param_1->getFrameMax();
+ mNowAnmPackUpper[0].setAnmTransform(param_1);
+
+ setFrameCtrl(&mUpperFrameCtrl[0], param_1->getAttribute(), 0, temp_f26, temp_f27 * (temp_f30 * temp_f26), var_f31 * temp_f26);
+ param_1->setFrame(mUpperFrameCtrl[0].getFrame());
+ } else {
+ mNowAnmPackUpper[0].setAnmTransform(param_0);
+ }
+
+ if (param_3 != NULL) {
+ f32 temp_f25 = param_3->getFrameMax();
+ mNowAnmPackUpper[1].setAnmTransform(param_3);
+
+ setFrameCtrl(&mUpperFrameCtrl[1], param_3->getAttribute(), 0, temp_f25, temp_f27 * (temp_f30 * temp_f25), var_f31 * temp_f25);
+ param_3->setFrame(mUpperFrameCtrl[1].getFrame());
+ } else {
+ mNowAnmPackUpper[1].setAnmTransform(param_2);
+ }
+
+ if (param_7 == 4 || param_7 == 2) {
+ setBasAnime(UNDER_0);
+ } else {
+ setBasAnime(UNDER_1);
+ }
+
+ field_0x2f8c = param_7;
}
/* 800ACA14-800ACD40 0A7354 032C+00 14/14 0/0 0/0 .text
@@ -5731,12 +8386,66 @@ int daAlink_c::setDoubleAnime(f32 i_blendRate, f32 i_anmSpeedA, f32 i_anmSpeedB,
return 1;
}
-
/* 800ACD40-800ACF80 0A7680 0240+00 2/2 0/0 0/0 .text
* commonSingleAnime__9daAlink_cFP15J3DAnmTransformP15J3DAnmTransformffs */
void daAlink_c::commonSingleAnime(J3DAnmTransform* param_0, J3DAnmTransform* param_1,
f32 param_2, f32 param_3, s16 param_4) {
- // NONMATCHING
+ mUnderAnmHeap[1].resetIdx();
+ mUpperAnmHeap[1].resetIdx();
+ setDoubleAnimeBlendRatio(0.0f);
+
+ mNowAnmPackUnder[0].setAnmTransform(param_0);
+ mNowAnmPackUnder[1].setAnmTransform(NULL);
+
+ s16 var_r30;
+ if (param_4 < 0) {
+ var_r30 = param_0->getFrameMax();
+ } else {
+ var_r30 = param_4;
+ }
+
+ f32 var_f31;
+ if (param_2 < 0.0f) {
+ var_f31 = var_r30;
+ } else {
+ var_f31 = param_3;
+ }
+
+ if (checkNoResetFlg0(FLG0_UNDERWATER) && checkModeFlg(0x200)) {
+ if (checkZoraWearAbility() && mProcID != PROC_FRONT_ROLL && mEquipItem == 0x103) {
+ param_2 *= daAlinkHIO_magneBoots_c0::m.mWaterVelRateSword * (1.0f / daAlinkHIO_magneBoots_c0::m.mZoraWaterAnmSpeed);
+ } else if (!checkZoraWearAbility()) {
+ param_2 *= daAlinkHIO_magneBoots_c0::m.mWaterStartWalkAnmRate * (1.0f / daAlinkHIO_magneBoots_c0::m.mWaterWalkAnmRate);
+ }
+ }
+
+ setFrameCtrl(&mUnderFrameCtrl[0], param_0->getAttribute(), param_3, var_r30, param_2, var_f31);
+ param_0->setFrame(var_f31);
+
+ if (param_1 != NULL) {
+ mNowAnmPackUpper[0].setAnmTransform(param_1);
+
+ if (param_4 < 0) {
+ var_r30 = param_1->getFrameMax();
+ } else {
+ var_r30 = param_4;
+ }
+
+ if (param_2 < 0.0f) {
+ var_f31 = var_r30;
+ } else {
+ var_f31 = param_3;
+ }
+
+ setFrameCtrl(&mUpperFrameCtrl[0], param_1->getAttribute(), param_3, var_r30, param_2, var_f31);
+ param_1->setFrame(var_f31);
+ } else {
+ mNowAnmPackUpper[0].setAnmTransform(param_0);
+ }
+
+ mNowAnmPackUpper[1].setAnmTransform(NULL);
+ setBasAnime(UNDER_0);
+ field_0x2f8c = 0;
}
/* 800ACF80-800ACFB0 0A78C0 0030+00 88/88 0/0 0/0 .text
@@ -5887,9 +8596,71 @@ void daAlink_c::setUpperAnimeBaseSpeed(u16 i_anmResID, f32 i_speed, f32 i_morf)
/* 800AD3D8-800AD6F0 0A7D18 0318+00 13/13 0/0 0/0 .text
* setUpperAnime__9daAlink_cFUsQ29daAlink_c13daAlink_UPPERffsf */
-void daAlink_c::setUpperAnime(u16 i_anmResID, daAlink_c::daAlink_UPPER param_1, f32 i_speed,
+int daAlink_c::setUpperAnime(u16 i_anmResID, daAlink_c::daAlink_UPPER param_1, f32 i_speed,
f32 i_startFrame, s16 i_endFrame, f32 i_morf) {
- // NONMATCHING
+ BOOL var_r28 = 0;
+
+ if (param_1 == 2) {
+ resetFacePriAnime();
+ offNoResetFlg1(daPy_FLG1(FLG1_UNK_10000000 | FLG1_UNK_4000000 | FLG1_UNK_100000 | FLG1_UNK_40000 | FLG1_UNK_20000 | FLG1_UNK_10000 | FLG1_UNK_40 | FLG1_UNK_8 | FLG1_UNK_2));
+ cancelItemUseQuake(0);
+
+ if (checkFmChainGrabAnime()) {
+ var_r28 = 1;
+ }
+ }
+
+ if (checkDkCaught2Anime()) {
+ offNoResetFlg0(FLG0_UNK_20000);
+ }
+
+ J3DAnmTransform* var_r30 = getAnimeResource(&mUpperAnmHeap[param_1], i_anmResID, 0x2C00);
+ if (var_r30 == NULL) {
+ var_r30 = getNowAnmPackUpper(param_1);
+ }
+
+ mNowAnmPackUpper[param_1].setAnmTransform(var_r30);
+ mNowAnmPackUpper[param_1].setRatio(1.0f);
+ mUpperAnmHeap[param_1].setIdx(i_anmResID);
+
+ if (i_endFrame < 0) {
+ i_endFrame = var_r30->getFrameMax();
+ }
+
+ f32 var_f31;
+ if (i_speed < 0.0f) {
+ var_f31 = i_endFrame;
+ } else {
+ var_f31 = i_startFrame;
+ }
+
+ if (!checkZoraWearAbility() && (checkEquipAnime() || checkCutDashAnime()) && (checkNoResetFlg0(FLG0_UNDERWATER) || !checkNoResetFlg0(FLG0_SWIM_UP))) {
+ i_speed *= daAlinkHIO_magneBoots_c0::m.mWaterStartWalkAnmRate * (1.0f / daAlinkHIO_magneBoots_c0::m.mWaterWalkAnmRate);
+ }
+
+ setFrameCtrl(&mUpperFrameCtrl[param_1], var_r30->getAttribute(), i_startFrame, i_endFrame, i_speed, var_f31);
+ var_r30->setFrame(var_f31);
+ setUpperAnimeMorf(i_morf);
+
+ if (!checkBowAnime()) {
+ setBowNormalAnime();
+ deleteArrow();
+ }
+
+ if (!checkGrabAnimeAndThrow() && !checkWolfGrabAnime()) {
+ freeGrabItem();
+ }
+
+ if (!checkWolfEnemyThrowAnime() && checkNoResetFlg2(FLG2_UNK_8)) {
+ resetWolfEnemyBiteAll();
+ }
+
+ if (var_r28 != 0 && !checkFmChainGrabAnime()) {
+ cancelFmChainGrabFromOut();
+ }
+
+ offNoResetFlg0(FLG0_UNK_1000000);
+ return 1;
}
/* 800AD6F0-800AD724 0A8030 0034+00 21/21 0/0 0/0 .text
@@ -5902,8 +8673,44 @@ void daAlink_c::setUpperAnimeParam(u16 i_anmResID, daAlink_c::daAlink_UPPER para
/* 800AD724-800AD8F4 0A8064 01D0+00 65/65 0/0 0/0 .text
* resetUpperAnime__9daAlink_cFQ29daAlink_c13daAlink_UPPERf */
-void daAlink_c::resetUpperAnime(daAlink_c::daAlink_UPPER param_0, f32 param_1) {
- // NONMATCHING
+int daAlink_c::resetUpperAnime(daAlink_c::daAlink_UPPER param_0, f32 param_1) {
+ BOOL var_r29 = 0;
+ if (checkFmChainGrabAnime()) {
+ cancelFmChainGrabFromOut();
+ } else if (!checkModeFlg(0x100000) && (checkGrabAnime() || checkWolfGrabAnime())) {
+ var_r29 = 1;
+ }
+
+ if (checkDkCaught2Anime()) {
+ offNoResetFlg0(FLG0_UNK_20000);
+ } else if (checkWolfEnemyThrowAnime()) {
+ resetWolfEnemyBiteAll();
+ }
+
+ mNowAnmPackUpper[param_0].setAnmTransform(NULL);
+ mNowAnmPackUpper[param_0].setRatio(0.0f);
+ mUpperAnmHeap[param_0].resetIdx();
+ mUpperFrameCtrl[param_0].init(0);
+
+ setUpperAnimeMorf(param_1);
+
+ if (param_0 == 2) {
+ resetFacePriAnime();
+ }
+
+ field_0x2f96 = 0xFF;
+ field_0x2f97 = 0xFF;
+ deleteArrow();
+ setBowNormalAnime();
+ offNoResetFlg1(daPy_FLG1(FLG1_UNK_10000000 | FLG1_UNK_4000000 | FLG1_UNK_100000 | FLG1_UNK_40000 | FLG1_UNK_20000 | FLG1_UNK_10000 | FLG1_UNK_40 | FLG1_UNK_8 | FLG1_UNK_2));
+
+ if (var_r29) {
+ freeGrabItem();
+ }
+
+ offNoResetFlg0(FLG0_UNK_1000000);
+ cancelItemUseQuake(0);
+ return 1;
}
/* 800AD8F4-800AD964 0A8234 0070+00 2/2 0/0 0/0 .text setUnderAnimeMorf__9daAlink_cFf */
@@ -5922,10 +8729,32 @@ void daAlink_c::setUnderAnimeMorf(f32 param_0) {
/* 800AD964-800ADAB8 0A82A4 0154+00 5/5 0/0 0/0 .text
* setUnderAnime__9daAlink_cFUsQ29daAlink_c13daAlink_UNDERffsf */
-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;
+int daAlink_c::setUnderAnime(u16 i_resID, daAlink_c::daAlink_UNDER i_packIdx, f32 i_speed,
+ f32 i_startF, s16 i_endF, f32 i_morf) {
+ J3DAnmTransform* var_r30 = getAnimeResource(&mUnderAnmHeap[i_packIdx], i_resID, 0x2C00);
+ if (var_r30 == NULL) {
+ var_r30 = getNowAnmPackUnder(i_packIdx);
+ }
+
+ mNowAnmPackUnder[i_packIdx].setAnmTransform(var_r30);
+ mNowAnmPackUnder[i_packIdx].setRatio(1.0f);
+ mUnderAnmHeap[i_packIdx].setIdx(i_resID);
+
+ if (i_endF < 0) {
+ i_endF = var_r30->getFrameMax();
+ }
+
+ f32 var_f31;
+ if (i_speed < 0.0f) {
+ var_f31 = i_endF;
+ } else {
+ var_f31 = i_startF;
+ }
+
+ setFrameCtrl(&mUnderFrameCtrl[i_packIdx], var_r30->getAttribute(), i_startF, i_endF, i_speed, var_f31);
+ var_r30->setFrame(var_f31);
+ setUnderAnimeMorf(i_morf);
+ return 1;
}
/* 800ADAB8-800ADAEC 0A83F8 0034+00 2/2 0/0 0/0 .text
@@ -6000,50 +8829,693 @@ f32 daAlink_c::getMoveGroundAngleSpeedRate() {
/* 800ADE14-800AEA70 0A8754 0C5C+00 20/20 0/0 0/0 .text setBlendMoveAnime__9daAlink_cFf
*/
void daAlink_c::setBlendMoveAnime(f32 param_0) {
- // NONMATCHING
+ daPy_frameCtrl_c* sp34 = &mUnderFrameCtrl[0];
+ daPy_frameCtrl_c* sp30 = &mUnderFrameCtrl[1];
+ f32 var_f31 = getMoveGroundAngleSpeedRate();
+
+ f32 sp2C;
+ f32 sp28 = daAlinkHIO_move_c0::m.mFootPositionRatio;
+ BOOL sp24 = checkEventRun();
+ BOOL sp20 = checkBootsMoveAnime(1);
+
+ f32 var_f29;
+
+ if (sp20) {
+ var_f29 = 1.0f;
+ sp2C = 1.0f;
+ } else {
+ var_f29 = daAlinkHIO_move_c0::m.mWalkAnmSpeed;
+ sp2C = daAlinkHIO_move_c0::m.mRunAnmSpeed;
+ }
+
+ if (field_0x2fb3 != 0) {
+ field_0x2fb3--;
+ }
+
+ fopAc_ac_c* sp1C = mAttention->LockonTarget(0);
+
+ daAlink_ANM var_r29;
+ if (checkDkCaught2Anime()) {
+ var_r29 = ANM_HORSE_WAIT_D_B;
+ } else if ((!sp24 && ((sp1C != NULL && (checkEnemyGroup(sp1C) || checkGoatCatchActor(sp1C))) || field_0x311c != 0)) || checkEndResetFlg0(ERFLG0_BOSS_ROOM_WAIT) || checkBootsOrArmorHeavy()) {
+ var_r29 = ANM_WAIT_B;
+ field_0x2fb3 = 0x2D;
+ } else if (!sp24 && (field_0x2fb3 != 0 || checkNoResetFlg3(FLG3_UNK_2000) || field_0x35c4.absXZ() > 1.0f || (checkUnderMove0BckNoArc(ANM_WAIT_B) && !sp34->checkPass(0.0f)))) {
+ var_r29 = ANM_WAIT_B;
+ } else {
+ if (checkRestHPAnime() && !checkUpperGuardAnime()) {
+ var_r29 = ANM_WAIT_TIRED;
+ } else {
+ var_r29 = ANM_WAIT;
+ }
+ field_0x2fb3 = 0;
+ }
+
+ daAlink_ANM var_r28 = ANM_WALK;
+ daAlink_ANM sp18;
+ if (mDemo.getDemoMode() == 0x26) {
+ sp18 = ANM_RUN_B;
+ } else {
+ sp18 = ANM_RUN;
+ }
+
+ f32 var_f27 = 15.0f;
+ f32 var_f26 = 3.0f;
+
+ if (sp20) {
+ if (checkBootsMoveAnime(0)) {
+ var_r28 = ANM_WALK_HEAVY;
+ sp28 = daAlinkHIO_magneBoots_c0::m.mFeetPositionRatio;
+ var_f31 *= 1.0f / (mHeavySpeedMultiplier * mHeavySpeedMultiplier);
+
+ f32 sp14;
+ if (checkHeavyStateOn(1, 0) && mSinkShapeOffset < -30.0f) {
+ sp14 = 0.5f * daAlinkHIO_magneBoots_c0::m.mWalkAnmSpeedMax;
+ } else {
+ sp14 = daAlinkHIO_magneBoots_c0::m.mWalkAnmSpeedMax;
+ }
+
+ var_f29 = daAlinkHIO_magneBoots_c0::m.mWalkAnmSpeedMin + (var_f31 * (sp14 - daAlinkHIO_magneBoots_c0::m.mWalkAnmSpeedMin));
+ var_f27 = 0.0f;
+ var_f26 = 23.0f;
+ } else {
+ var_r29 = ANM_IRONBALL_WAIT;
+ var_r28 = ANM_IRONBALL_WALK;
+ sp28 = daAlinkHIO_ironBall_c0::m.mFeetPosRatio;
+ var_f31 = var_f31 * (1.0f / (mHeavySpeedMultiplier * mHeavySpeedMultiplier));
+ var_f29 = daAlinkHIO_ironBall_c0::m.mWalkAnmSpeedMin + (var_f31 * (daAlinkHIO_ironBall_c0::m.mWalkAnmSpeedMax - daAlinkHIO_ironBall_c0::m.mWalkAnmSpeedMin));
+ var_f27 = 18.0f;
+ var_f26 = 3.0f;
+ }
+
+ var_f31 = var_f31 * daAlinkHIO_move_c0::m.mWalkChangeRate;
+ if (var_f31 >= daAlinkHIO_move_c0::m.mWalkChangeRate) {
+ var_f31 = daAlinkHIO_move_c0::m.mWalkChangeRate - 0.001f;
+ }
+ } else if (checkSlope()) {
+ var_r28 = ANM_WALK_SLOPE;
+ sp18 = ANM_WALK_SLOPE;
+ var_f29 = daAlinkHIO_slide_c0::m.mClimbAnmMinSpeed + (var_f31 * (daAlinkHIO_slide_c0::m.mMaxClimbAnmSpeed - daAlinkHIO_slide_c0::m.mClimbAnmMinSpeed));
+ sp2C = var_f29;
+ }
+
+ int sp10;
+ f32 var_f28;
+ f32 var_f30;
+
+ if (var_f31 < daAlinkHIO_move_c0::m.mWalkChangeRate) {
+ var_f28 = var_f31 / daAlinkHIO_move_c0::m.mWalkChangeRate;
+
+ if (checkModeFlg(1) || checkZeroSpeedF()) {
+ mSpeedModifier = 0.0f;
+
+ if (checkUpperGuardAnime() || (mEquipItem == 0x102 && checkAttentionLock()) || checkFmChainGrabAnime() || checkSmallUpperGuardAnime() || checkCopyRodThrowAnime() || checkBoomerangThrowAnime()) {
+ if ((!checkBoomerangThrowAnime() && !checkCopyRodThrowAnime() && (mEquipItem != 0x102 || !checkAttentionLock())) && (field_0x2f98 == 2 || checkAtnLeftAnime())) {
+ var_r29 = ANM_ATN_WAIT_LEFT;
+ if (mTargetedActor != NULL) {
+ var_r28 = ANM_ATN_LOCK_WALK_LEFT;
+ } else {
+ var_r28 = ANM_ATN_WALK_LEFT;
+ }
+ } else {
+ var_r29 = ANM_ATN_WAIT_RIGHT;
+ if (mTargetedActor != NULL) {
+ var_r28 = ANM_ATN_LOCK_WALK_RIGHT;
+ } else {
+ var_r28 = ANM_ATN_WALK_LEFT;
+ }
+ }
+
+ if (mTargetedActor != NULL) {
+ var_f30 = daAlinkHIO_atnMove_c0::m.mWaitAnmSpeed;
+ var_f29 = daAlinkHIO_atnMove_c0::m.mWalkAnmSpeed;
+ } else {
+ var_f30 = daAlinkHIO_noActAtnMove_c0::m.mWaitAnmSpeed;
+ var_f29 = daAlinkHIO_noActAtnMove_c0::m.mWalkAnmSpeed;
+ }
+
+ if (var_r29 == ANM_IRONBALL_WAIT) {
+ var_f30 = daAlinkHIO_ironBall_c0::m.mWaitAnmSpeed;
+ }
+
+ setDoubleAnime(0.0f, var_f30, var_f29, var_r29, var_r28, 2, param_0);
+ return;
+ }
+
+ sp10 = 2;
+ s16 sp8 = (shape_angle.y - field_0x2fe6);
+
+ if (abs(sp8) > 100 && field_0x33a8 < 0.3f && checkInputOnR() && field_0x33a4 > 0.05f && field_0x33a4 < 0.3f && !checkAttentionLock()) {
+ if (var_r29 == ANM_WAIT_TIRED) {
+ if (sp8 > 0) {
+ var_r28 = ANM_STEP_TURN_TIRED;
+ } else {
+ var_r28 = ANM_SMALL_GUARD_TIRED;
+ }
+
+ var_f30 = 1.0f;
+ } else {
+ if (var_r29 == ANM_IRONBALL_WAIT) {
+ var_r29 = ANM_WAIT;
+ }
+
+ if (sp8 > 0) {
+ var_r28 = ANM_STEP_TURN;
+ } else {
+ var_r28 = ANM_SMALL_GUARD;
+ }
+
+ var_f30 = daAlinkHIO_move_c0::m.mWaitAnmSpeed;
+ }
+
+ if (sp8 > 0) {
+ var_f27 = 8.0f;
+ var_f26 = 19.0f;
+ } else {
+ var_f26 = 8.0f;
+ var_f27 = 19.0f;
+ }
+
+ var_f29 = daAlinkHIO_basic_c0::m.mWaitTurnSpeed;
+ var_f28 = 0.85f + (0.001f * abs(sp8));
+ if (var_f28 > 1.0f) {
+ var_f28 = 1.0f;
+ }
+ sp10 = 1;
+ } else if (checkWindSpeedMoveXZ() && !sp24 && (var_r29 == ANM_WAIT || var_r29 == ANM_WAIT_TIRED || var_r29 == ANM_WAIT_B)) {
+ var_r29 = ANM_WAIT_WIND;
+ var_f30 = 1.0f;
+ } else if (!sp24 && (checkEndResetFlg1(ERFLG1_UNK_40000) || (!checkSnowCode() && mSinkShapeOffset < -30.0f))) {
+ var_r29 = ANM_WAIT_INSECT;
+ voiceStartLevel(Z2SE_AL_V_INSECT_LOOP);
+ var_f30 = 1.0f;
+ } else {
+ var_f30 = daAlinkHIO_move_c0::m.mWaitAnmSpeed;
+ if (var_r29 == ANM_WAIT_TIRED) {
+ if (checkUnderMove1BckNoArc(ANM_STEP_TURN)) {
+ var_r28 = ANM_STEP_TURN_TIRED;
+ param_0 = 3.0f;
+ } else if (checkUnderMove1BckNoArc(ANM_SMALL_GUARD)) {
+ var_r28 = ANM_SMALL_GUARD_TIRED;
+ param_0 = 3.0f;
+ }
+ }
+ }
+ } else {
+ f32 spC;
+ if (var_r29 == ANM_WAIT_TIRED) {
+ spC = daAlinkHIO_move_c0::m.mMinTiredWalkRate;
+ } else {
+ spC = daAlinkHIO_move_c0::m.mMinWalkRate;
+ }
+
+ var_f28 = spC + (var_f28 * (1.0f - spC));
+ mSpeedModifier = 1.0f - ((1.0f - sp28) * var_f28);
+ sp10 = 1;
+ var_f30 = daAlinkHIO_move_c0::m.mWaitAnmSpeed;
+ }
+
+ if (var_r29 == ANM_IRONBALL_WAIT) {
+ var_f30 = daAlinkHIO_ironBall_c0::m.mWaitAnmSpeed;
+ } else if (var_r29 == ANM_HORSE_WAIT_D_B || var_r29 == ANM_WAIT_TIRED) {
+ var_f30 = 1.0f;
+ }
+
+ setDoubleAnime(var_f28, var_f30, var_f29,var_r29, var_r28, sp10, param_0);
+
+ if (var_r28 == ANM_WALK_HEAVY && ((field_0x2f8c == 2 && checkWindSpeedOnXZ()) || checkWindSpeedOnAngle())) {
+ onEndResetFlg0(ERFLG0_UNK_2000);
+
+ if (checkNoSetUpperAnime()) {
+ setUpperAnimeBase(0xCE);
+ field_0x2f96 = 1;
+ field_0x2f97 = 6;
+ }
+ }
+ } else if (var_f31 < daAlinkHIO_move_c0::m.mRunChangeRate) {
+ var_f28 = (var_f31 - daAlinkHIO_move_c0::m.mWalkChangeRate) / (daAlinkHIO_move_c0::m.mRunChangeRate - daAlinkHIO_move_c0::m.mWalkChangeRate);
+ setDoubleAnime(var_f28, var_f29, sp2C, var_r28, sp18, 1, param_0);
+
+ mSpeedModifier = sp28 * (1.0f - var_f28);
+ if (checkNoResetFlg0(FLG0_UNDERWATER) && var_f28 > 0.5f) {
+ if (sp30->checkPass(var_f27)) {
+ field_0x2f9d = 0x20;
+ } else if (sp30->checkPass(var_f26)) {
+ field_0x2f9d = 0x40;
+ }
+ }
+ } else {
+ setDoubleAnime(1.0f, sp2C, sp2C, sp18, sp18, 1, param_0);
+ mSpeedModifier = 0.0f;
+
+ if (sp30->checkPass(var_f27)) {
+ field_0x2f9d = 0x20;
+ } else if (sp30->checkPass(var_f26)) {
+ field_0x2f9d = 0x40;
+ }
+
+ if (checkWindSpeedOnAngle()) {
+ onEndResetFlg0(ERFLG0_UNK_2000);
+
+ if (checkNoSetUpperAnime()) {
+ setUpperAnimeBase(0xCE);
+ field_0x2f96 = 1;
+ field_0x2f97 = 6;
+ }
+ }
+ }
+
+ if (field_0x2f8c != 2) {
+ if (sp30->checkPass(var_f27)) {
+ onResetFlg1(RFLG1_UNK_10);
+
+ if (checkBootsOrArmorHeavy()) {
+ dComIfGp_getVibration().StartShock(1, 0xF, cXyz(0.0f, 1.0f, 0.0f));
+ }
+ } else if (sp30->checkPass(var_f26)) {
+ onResetFlg1(RFLG1_UNK_20);
+
+ if (checkBootsOrArmorHeavy()) {
+ dComIfGp_getVibration().StartShock(1, 0xF,cXyz(0.0f, 1.0f, 0.0f));
+ }
+ }
+ }
+
+ if (var_f31 < 0.69999999f) {
+ setHandIndex(var_r29);
+ } else {
+ setHandIndex(sp18);
+ }
}
/* 800AEA70-800AF11C 0A93B0 06AC+00 17/17 0/0 0/0 .text setBlendAtnMoveAnime__9daAlink_cFf */
void daAlink_c::setBlendAtnMoveAnime(f32 param_0) {
- // NONMATCHING
+ s16 spA = (current.angle.y - shape_angle.y);
+ f32 sp44 = cM_ssin(spA);
+ f32 sp40 = cM_scos(spA);
+ u8 sp8 = field_0x2f98;
+ BOOL sp3C = 0;
+
+ if (mDemo.getDemoMode() == 0x17) {
+ if (mDemo.getParam1() & 1) {
+ field_0x2f98 = 2;
+ } else {
+ field_0x2f98 = 3;
+ }
+
+ if (!checkWolf() && !checkEquipAnime() && mEquipItem != 0x103 && (mDemo.getParam1() == 2 || mDemo.getParam1() == 3)) {
+ swordEquip(0);
+ }
+ } else if (checkInputOnR()) {
+ if (mTargetedActor == NULL && !checkGoatStopGame() && (sp40 <= -0.99f || sp40 >= 0.99f)) {
+ if (sp40 <= -0.99f) {
+ field_0x2f98 = 1;
+ } else {
+ field_0x2f98 = 0;
+ sp3C = 1;
+ }
+ } else {
+ if (checkFmChainGrabAnime()) {
+ field_0x594 = 13.0f;
+ } else if (mTargetedActor != 0) {
+ field_0x594 = daAlinkHIO_atnMove_c0::m.mMaxSpeed;
+ } else {
+ field_0x594 = daAlinkHIO_noActAtnMove_c0::m.mMaxSpeed;
+ }
+
+ if (mTargetedActor != NULL && sp40 >= 0.866f) {
+ field_0x2f98 = 0;
+ } else if (sp40 < -0.866f) {
+ field_0x2f98 = 1;
+ } else if (sp44 > 0.0f) {
+ field_0x2f98 = 2;
+ } else if (sp44 < 0.0f) {
+ field_0x2f98 = 3;
+ }
+ }
+ } else if (checkModeFlg(1) && (checkGrabAnimeUp() || checkGrabAnimeSide() || field_0x2f98 == 0 || field_0x2f98 == 1)) {
+ field_0x2f98 = 3;
+ }
+
+ daAlink_ANM var_r28;
+ daAlink_ANM var_r29;
+
+ if (checkSetChainPullAnime(shape_angle.y)) {
+ daAlink_ANM var_r27;
+ if (checkEndResetFlg1(ERFLG1_UNK_2000000)) {
+ var_r27 = ANM_CHAIN_PULL_END;
+ } else {
+ var_r27 = ANM_CHAIN_PULL;
+ }
+
+ if (!checkUnderMove0BckNoArc(var_r27)) {
+ f32 sp38;
+ if (checkChainBlockPushPull()) {
+ sp38 = 0.7f;
+ } else {
+ sp38 = 1.0f;
+ }
+
+ setSingleAnimeBaseSpeed(var_r27, sp38, 3.0f);
+ }
+
+ mSpeedModifier = 0.0f;
+ return;
+ }
+
+ if (field_0x2f98 == 1) {
+ setBlendAtnBackMoveAnime(param_0);
+ return;
+ }
+
+ if (sp3C) {
+ field_0x594 = daAlinkHIO_move_c0::m.mMaxSpeed;
+ setBlendMoveAnime(param_0);
+ return;
+ }
+
+ f32 sp34 = getMoveGroundAngleSpeedRate();
+
+ f32 var_f31;
+ f32 sp30;
+ f32 sp2C;
+ f32 sp28;
+ f32 sp24;
+ f32 sp20;
+ f32 var_f30;
+
+ if (mTargetedActor != NULL) {
+ sp30 = daAlinkHIO_atnMove_c0::m.mMinWalkFrame;
+ sp2C = daAlinkHIO_atnMove_c0::m.mWalkChangeRate;
+ sp28 = daAlinkHIO_atnMove_c0::m.mRunChangeRate;
+ sp24 = daAlinkHIO_atnMove_c0::m.mWaitAnmSpeed;
+ sp20 = daAlinkHIO_atnMove_c0::m.mWalkAnmSpeed;
+ var_f30 = daAlinkHIO_atnMove_c0::m.mRunAnmSpeed;
+ } else {
+ sp30 = daAlinkHIO_noActAtnMove_c0::m.mMinWalkFrame;
+ sp2C = daAlinkHIO_noActAtnMove_c0::m.mWalkChangeRate;
+ sp28 = daAlinkHIO_noActAtnMove_c0::m.mRunChangeRate;
+ sp24 = daAlinkHIO_noActAtnMove_c0::m.mWaitAnmSpeed;
+ sp20 = daAlinkHIO_noActAtnMove_c0::m.mWalkAnmSpeed;
+ var_f30 = daAlinkHIO_noActAtnMove_c0::m.mRunAnmSpeed;
+ }
+
+ if (sp34 < sp2C) {
+ var_f31 = sp34 / sp2C;
+
+ if (field_0x2f98 == 0) {
+ var_r28 = ANM_ATN_WAIT_RIGHT;
+ var_r29 = ANM_ATN_RETURN_FROM_WALK;
+ sp20 = daAlinkHIO_atnMove_c0::m.mWalkForwardAnmSpeed;
+ } else if (field_0x2f98 == 2) {
+ var_r28 = ANM_ATN_WAIT_LEFT;
+ if (mTargetedActor != NULL) {
+ var_r29 = ANM_ATN_LOCK_WALK_LEFT;
+ } else {
+ var_r29 = ANM_ATN_WALK_LEFT;
+ }
+ } else {
+ var_r28 = ANM_ATN_WAIT_RIGHT;
+ if (mTargetedActor != NULL) {
+ var_r29 = ANM_ATN_LOCK_WALK_RIGHT;
+ } else {
+ var_r29 = ANM_ATN_WALK_RIGHT;
+ }
+ }
+
+ int sp1C;
+ if (checkModeFlg(1) || checkZeroSpeedF()) {
+ sp1C = 2;
+ mSpeedModifier = 0.0f;
+ } else {
+ var_f31 = sp30 + (var_f31 * (1.0f - sp30));
+ sp1C = 3;
+ mSpeedModifier = 1.0f;
+ }
+
+ setDoubleAnime(var_f31, sp24, sp20, var_r28, var_r29, sp1C, param_0);
+ } else if (sp34 < sp28) {
+ var_f31 = (sp34 - sp2C) / (sp28 - sp2C);
+
+ if (field_0x2f98 == 0) {
+ var_r28 = ANM_ATN_RETURN_FROM_WALK;
+ var_r29 = ANM_ATN_RETURN_FROM_RUN;
+ sp20 = daAlinkHIO_atnMove_c0::m.mWalkForwardAnmSpeed;
+ var_f30 = daAlinkHIO_atnMove_c0::m.mRunForwardAnmSpeed;
+ } else if (field_0x2f98 == 2) {
+ if (mTargetedActor != NULL) {
+ var_r28 = ANM_ATN_LOCK_WALK_LEFT;
+ var_r29 = ANM_ATN_LOCK_RUN_LEFT;
+ } else {
+ var_r28 = ANM_ATN_WALK_LEFT;
+ var_r29 = ANM_ATN_RUN_LEFT;
+ }
+ } else if (mTargetedActor != NULL) {
+ var_r28 = ANM_ATN_LOCK_WALK_RIGHT;
+ var_r29 = ANM_ATN_LOCK_RUN_RIGHT;
+ } else {
+ var_r28 = ANM_ATN_WALK_RIGHT;
+ var_r29 = ANM_ATN_RUN_RIGHT;
+ }
+
+ setDoubleAnime(var_f31, sp20, var_f30, var_r28, var_r29, 3, param_0);
+ mSpeedModifier = 1.0f - var_f31;
+ } else {
+ if (field_0x2f98 == 0) {
+ var_r29 = ANM_ATN_RETURN_FROM_RUN;
+ var_f30 = daAlinkHIO_atnMove_c0::m.mRunForwardAnmSpeed;
+ } else if (field_0x2f98 == 2) {
+ if (mTargetedActor != NULL) {
+ var_r29 = ANM_ATN_LOCK_RUN_LEFT;
+ } else {
+ var_r29 = ANM_ATN_RUN_LEFT;
+ }
+ } else if (mTargetedActor != NULL) {
+ var_r29 = ANM_ATN_LOCK_RUN_RIGHT;
+ } else {
+ var_r29 = ANM_ATN_RUN_RIGHT;
+ }
+
+ setDoubleAnime(1.0f, var_f30, var_f30, var_r29, var_r29, 3, param_0);
+ mSpeedModifier = 0.0f;
+ }
+
+ if (field_0x2f8c != 2) {
+ daPy_frameCtrl_c* sp18 = &mUnderFrameCtrl[0];
+
+ f32 sp14;
+ f32 sp10;
+ f32 spC;
+ if (field_0x2f98 == 0) {
+ sp10 = 0.0f;
+ sp14 = 11.0f;
+ } else {
+ if (mTargetedActor != NULL) {
+ sp10 = 6.0f;
+ sp14 = 11.0f;
+ } else {
+ sp10 = 9.0f;
+ sp14 = 1.0f;
+ }
+
+ if (field_0x2f98 != 2) {
+ spC = sp14;
+ sp14 = sp10;
+ sp10 = spC;
+ }
+ }
+
+ if (sp18->checkPass(sp14)) {
+ onResetFlg1(RFLG1_UNK_10);
+ } else if (sp18->checkPass(sp10)) {
+ onResetFlg1(RFLG1_UNK_20);
+ }
+
+ if (checkBootsOrArmorHeavy() && sp34 > 0.1f && checkResetFlg1(RFLG1_UNK_30)) {
+ dComIfGp_getVibration().StartShock(1, 0xF, cXyz(0.0f, 1.0f, 0.0f));
+ }
+ }
}
/* 800AF11C-800AF4B0 0A9A5C 0394+00 1/1 0/0 0/0 .text setBlendAtnBackMoveAnime__9daAlink_cFf */
void daAlink_c::setBlendAtnBackMoveAnime(f32 param_0) {
- // NONMATCHING
+ f32 var_f27;
+ f32 var_f31;
+ f32 var_f26;
+ f32 var_f24;
+ f32 var_f25;
+ f32 var_f29;
+ daAlink_ANM var_r26;
+ daAlink_ANM var_r27;
+ daAlink_ANM var_r29;
+
+ if (checkBootsMoveAnime(1)) {
+ field_0x594 = daAlinkHIO_atnMove_c0::m.mMaxBackwardsSpeed;
+ var_f27 = daAlinkHIO_atnMove_c0::m.mMinBackWalkFrame;
+ var_f31 = daAlinkHIO_atnMove_c0::m.mBackWalkChangeRate;
+ var_f26 = daAlinkHIO_atnMove_c0::m.mBackRunChangeRate;
+ var_f24 = daAlinkHIO_atnMove_c0::m.mWaitAnmSpeed;
+ var_f25 = 1.0f;
+ var_f29 = 1.0f;
+ var_r26 = ANM_ATN_WAIT_RIGHT;
+ var_r27 = ANM_ATN_BACK_WALK_HEAVY;
+ var_r29 = ANM_ATN_BACK_WALK_HEAVY;
+ } else if (mTargetedActor != NULL) {
+ field_0x594 = daAlinkHIO_atnMove_c0::m.mMaxBackwardsSpeed;
+ var_f27 = daAlinkHIO_atnMove_c0::m.mMinBackWalkFrame;
+ var_f31 = daAlinkHIO_atnMove_c0::m.mBackWalkChangeRate;
+ var_f26 = daAlinkHIO_atnMove_c0::m.mBackRunChangeRate;
+ var_f24 = daAlinkHIO_atnMove_c0::m.mWaitAnmSpeed;
+ var_f25 = daAlinkHIO_atnMove_c0::m.mBackWalkAnmSpeed;
+ var_f29 = daAlinkHIO_atnMove_c0::m.mBackRunAnmSpeed;
+ var_r26 = ANM_ATN_WAIT_RIGHT;
+ var_r27 = ANM_ATN_LOCK_BACK_WALK;
+ var_r29 = ANM_ATN_LOCK_BACK_RUN;
+ } else {
+ field_0x594 = daAlinkHIO_noActAtnMove_c0::m.mMaxBackwardsSpeed;
+ var_f27 = daAlinkHIO_noActAtnMove_c0::m.mMinBackWalkFrame;
+ var_f31 = daAlinkHIO_noActAtnMove_c0::m.mBackWalkChangeRate;
+ var_f26 = daAlinkHIO_noActAtnMove_c0::m.mBackRunChangeRate;
+ var_f24 = daAlinkHIO_move_c0::m.mWaitAnmSpeed;
+ var_f25 = daAlinkHIO_noActAtnMove_c0::m.mBackWalkAnmSpeed;
+ var_f29 = daAlinkHIO_noActAtnMove_c0::m.mBackRunAnmSpeed;
+ var_r26 = ANM_WAIT;
+ var_r27 = ANM_ATN_BACK_WALK;
+ var_r29 = ANM_ATN_BACK_RUN;
+ }
+
+ f32 var_f30;
+
+ f32 temp_f1 = getMoveGroundAngleSpeedRate();
+ if (temp_f1 < var_f31) {
+ var_f30 = temp_f1 / var_f31;
+
+ int var_r25;
+ if (checkModeFlg(1) || checkZeroSpeedF()) {
+ var_r25 = 2;
+ mSpeedModifier = 0.0f;
+ } else {
+ var_r25 = 3;
+ mSpeedModifier = 1.0f;
+ var_f30 = var_f27 + (var_f30 * (1.0f - var_f27));
+ }
+
+ setDoubleAnime(var_f30, var_f24, var_f25, var_r26, var_r27, var_r25, param_0);
+ } else if (temp_f1 < var_f26) {
+ var_f30 = (temp_f1 - var_f31) / (var_f26 - var_f31);
+ setDoubleAnime(var_f30, var_f25, var_f29, var_r27, var_r29, 3, param_0);
+ mSpeedModifier = 1.0f - var_f30;
+ } else {
+ setDoubleAnime(1.0f, var_f29, var_f29, var_r29, var_r29, 3, param_0);
+ mSpeedModifier = 0.0f;
+ }
+
+ if (field_0x2f8c != 2) {
+ daPy_frameCtrl_c* temp_r28 = &mUnderFrameCtrl[0];
+
+ if (var_r29 == ANM_ATN_LOCK_BACK_RUN) {
+ if (temp_r28->checkPass(11.0f)) {
+ onResetFlg1(RFLG1_UNK_10);
+ } else if (temp_r28->checkPass(8.0f)) {
+ onResetFlg1(RFLG1_UNK_20);
+ }
+ } else if (temp_r28->checkPass(0.0f)) {
+ onResetFlg1(RFLG1_UNK_10);
+ } else if (temp_r28->checkPass(0.5f * temp_r28->getEnd())) {
+ onResetFlg1(RFLG1_UNK_20);
+ }
+ }
+
+ if (checkBootsOrArmorHeavy() && temp_f1 > 0.1f && checkResetFlg1(RFLG1_UNK_30)) {
+ dComIfGp_getVibration().StartShock(1, 0xF, cXyz(0.0f, 1.0f, 0.0f));
+ }
}
/* 800AF4B0-800AF61C 0A9DF0 016C+00 29/29 0/0 0/0 .text setFaceBck__9daAlink_cFUsiUs */
void daAlink_c::setFaceBck(u16 param_0, int param_1, u16 param_2) {
- // NONMATCHING
+ if (!checkNoResetFlg0(FLG0_SWIM_UP) && mProcID != PROC_GET_ITEM) {
+ param_0 = 0x157;
+ } else if (param_0 == 0) {
+ fopAc_ac_c* temp_r28 = mAttention->LockonTarget(0);
+ if (checkAttentionState() || (checkHorseRide() && checkEnemyGroup(temp_r28)) || checkEndResetFlg0(ERFLG0_UNK_400)) {
+ param_0 = 0xE8;
+ } else {
+ param_0 = 0xDF;
+ }
+ } else {
+ setIdxMask(&param_2, &param_0);
+ }
+
+ J3DAnmTransform* var_r29;
+ if (param_2 != 0xFFFF) {
+ var_r29 = (J3DAnmTransform*)mFaceBckHeap.loadDataDemoRID(param_0, param_2);
+ } else if (param_1 != 0) {
+ var_r29 = (J3DAnmTransform*)mFaceBckHeap.loadDataPriIdx(param_0);
+ } else {
+ var_r29 = (J3DAnmTransform*)mFaceBckHeap.loadDataIdx(param_0);
+ }
+
+ if (var_r29 != NULL) {
+ field_0x2164.init(var_r29, 0, var_r29->getAttribute(), 1.0f, 0, -1, 1);
+ var_r29->setFrame(0.0f);
+ }
}
/* 800AF61C-800AF7D0 0A9F5C 01B4+00 7/7 0/0 0/0 .text setFaceBtp__9daAlink_cFUsiUs */
void daAlink_c::setFaceBtp(u16 param_0, int param_1, u16 param_2) {
- // NONMATCHING
+ setIdxMask(&param_2, &param_0);
+
+ J3DAnmTexPattern* var_r30;
+ if (param_2 != 0xFFFF) {
+ var_r30 = (J3DAnmTexPattern*)mFaceBtpHeap.loadDataDemoRID(param_0, param_2);
+ } else if (param_1 != 0) {
+ var_r30 = (J3DAnmTexPattern*)mFaceBtpHeap.loadDataPriIdx(param_0);
+ } else {
+ var_r30 = (J3DAnmTexPattern*)mFaceBtpHeap.loadDataIdx(param_0);
+ }
+
+ if (var_r30 != NULL) {
+ field_0x2154 = var_r30;
+ field_0x2154->searchUpdateMaterialID(field_0x06c0);
+ field_0x06c0->entryTexNoAnimator(field_0x2154);
+
+ if (param_2 == 0xFFFF) {
+ if (param_0 == 0x3E1 || (param_0 == 0x417 && checkUnderMove0BckNoArcWolf(WANM_WAIT_WIND))) {
+ field_0x3440 = 0.02f;
+ onNoResetFlg1(FLG1_UNK_2000);
+ } else if (param_0 == 0x417 || param_0 == 0x418 || param_0 == 0x3E2 || param_0 == 0x3DF || param_0 == 0x3E0) {
+ onNoResetFlg1(FLG1_UNK_2000);
+ field_0x3440 = 0.012f;
+ } else {
+ offNoResetFlg1(FLG1_UNK_2000);
+ }
+ } else {
+ offNoResetFlg1(FLG1_UNK_2000);
+ }
+
+ field_0x2fea = 0;
+ field_0x2154->setFrame(0.0f);
+ } else if (param_2 == 0xFFFF && param_0 == 0x417) {
+ if (checkUnderMove0BckNoArcWolf(WANM_WAIT_WIND)) {
+ field_0x3440 = 0.02f;
+ } else {
+ field_0x3440 = 0.012f;
+ }
+ }
}
/* 800AF7D0-800AF8A0 0AA110 00D0+00 6/6 0/0 0/0 .text setFaceBtk__9daAlink_cFUsiUs */
-// NONMATCHING - swapped instructions
void daAlink_c::setFaceBtk(u16 i_resID, int param_1, u16 i_arcNo) {
- int var_r4;
- u16 arc_no;
- u16 res_id;
-
- res_id = i_resID;
- var_r4 = param_1;
- arc_no = i_arcNo;
-
- setIdxMask(&arc_no, &res_id);
+ setIdxMask(&i_arcNo, &i_resID);
J3DAnmTextureSRTKey* btk;
- if (arc_no != 0xFFFF) {
- btk = (J3DAnmTextureSRTKey*)mFaceBtkHeap.loadDataDemoRID(res_id, arc_no);
+ if (i_arcNo != 0xFFFF) {
+ btk = (J3DAnmTextureSRTKey*)mFaceBtkHeap.loadDataDemoRID(i_resID, i_arcNo);
offNoResetFlg1(FLG1_UNK_2000);
- } else if (var_r4 != 0) {
- btk = (J3DAnmTextureSRTKey*)mFaceBtkHeap.loadDataPriIdx(res_id);
+ } else if (param_1 != 0) {
+ btk = (J3DAnmTextureSRTKey*)mFaceBtkHeap.loadDataPriIdx(i_resID);
} else {
- btk = (J3DAnmTextureSRTKey*)mFaceBtkHeap.loadDataIdx(res_id);
+ btk = (J3DAnmTextureSRTKey*)mFaceBtkHeap.loadDataIdx(i_resID);
}
if (btk != NULL) {
@@ -6057,14 +9529,49 @@ void daAlink_c::setFaceBtk(u16 i_resID, int param_1, u16 i_arcNo) {
/* 800AF8A0-800AF9A8 0AA1E0 0108+00 31/31 0/0 0/0 .text
* setFaceBasicTexture__9daAlink_cFQ29daAlink_c13daAlink_FTANM */
-void daAlink_c::setFaceBasicTexture(daAlink_c::daAlink_FTANM param_0) {
- // NONMATCHING
+daAlink_c::daAlink_FTANM daAlink_c::setFaceBasicTexture(daAlink_c::daAlink_FTANM param_0) {
+ if (checkWindSpeedOnAngleAnime(0)) {
+ if (param_0 == FTANM_UNK_0) {
+ param_0 = FTANM_UNK_39;
+ } else if (param_0 == FTANM_UNK_8B) {
+ param_0 = FTANM_UNK_98;
+ }
+ } else if ((!checkPlayerDemoMode() && dComIfGs_getLife() <= 4) || mDemo.getDemoMode() == 0x12) {
+ if (param_0 == FTANM_UNK_0) {
+ param_0 = FTANM_UNK_1;
+ } else if (param_0 == FTANM_UNK_8B) {
+ param_0 = FTANM_UNK_8C;
+ }
+ }
+
+ if (checkWolf() && param_0 == FTANM_UNK_0) {
+ param_0 = FTANM_UNK_8B;
+ }
+
+ setFaceBasicBtp(getFaceTexData(param_0)->m_btpID);
+ setFaceBasicBtk(getFaceTexData(param_0)->m_btkID);
+ return param_0;
}
/* 800AF9A8-800AFAA8 0AA2E8 0100+00 5/5 0/0 0/0 .text
* setFaceBasicAnime__9daAlink_cFQ29daAlink_c11daAlink_ANM */
void daAlink_c::setFaceBasicAnime(daAlink_c::daAlink_ANM param_0) {
- // NONMATCHING
+ const daAlink_AnmData* temp_r3 = getAnmData(param_0);
+
+ daAlink_FTANM temp_r3_2 = setFaceBasicTexture((daAlink_c::daAlink_FTANM)temp_r3->m_faceTexID);
+ if ((temp_r3_2 != temp_r3->m_faceTexID) && !checkWolf()) {
+ if (temp_r3_2 == FTANM_UNK_39) {
+ setFaceBasicBck(0x126);
+ } else if (temp_r3_2 == FTANM_UNK_1) {
+ setFaceBasicBck(0x120);
+ } else if (temp_r3_2 == FTANM_UNK_5) {
+ setFaceBasicBck(0x137);
+ } else {
+ setFaceBasicBck(temp_r3->m_faceBckID);
+ }
+ } else {
+ setFaceBasicBck(temp_r3->m_faceBckID);
+ }
}
/* 800AFAA8-800AFB14 0AA3E8 006C+00 16/16 0/0 0/0 .text
@@ -6144,7 +9651,100 @@ void daAlink_c::resetFacePriAnime() {
/* 800AFCF0-800B0098 0AA630 03A8+00 2/2 0/0 0/0 .text playFaceTextureAnime__9daAlink_cFv
*/
void daAlink_c::playFaceTextureAnime() {
- // NONMATCHING
+ if (checkNoResetFlg1(FLG1_UNK_200) && !mFaceBtpHeap.checkNoSetPriIdx()) {
+ simpleAnmPlay(field_0x2154);
+ simpleAnmPlay(mpFaceBtk);
+ } else {
+ u16 var_r29;
+ if (!mFaceBtpHeap.checkNoSetPriIdx()) {
+ var_r29 = mUpperFrameCtrl[2].getFrame();
+ } else if (checkUnderMove0BckNoArc(ANM_HAWK_WAIT)) {
+ var_r29 = mpFaceBtk->getFrameMax();
+ } else if (!checkNoResetFlg1(FLG1_UNK_2000)) {
+ if (getNowAnmPackUnder(UNDER_0) != getNowAnmPackUpper(UPPER_0)) {
+ var_r29 = mUpperFrameCtrl[0].getFrame();
+ } else {
+ var_r29 = mUnderFrameCtrl[0].getFrame();
+ }
+ } else {
+ int var_r24 = field_0x2154->getFrameMax() > mpFaceBtk->getFrameMax() ? field_0x2154->getFrameMax() : mpFaceBtk->getFrameMax();
+
+ if (field_0x2fea != 0) {
+ field_0x2fea++;
+ if (field_0x2fea > var_r24) {
+ field_0x2fea = 0;
+ }
+ } else if (cM_rnd() < field_0x3440) {
+ field_0x2fea++;
+ }
+
+ var_r29 = field_0x2fea;
+ }
+
+ u16 var_r26 = var_r29;
+
+ if (var_r29 > field_0x2154->getFrameMax()) {
+ var_r29 = field_0x2154->getFrameMax();
+ }
+
+ if (var_r26 > mpFaceBtk->getFrameMax()) {
+ var_r26 = mpFaceBtk->getFrameMax();
+ }
+
+ field_0x2154->setFrame(var_r29);
+ mpFaceBtk->setFrame(var_r26);
+ }
+
+ if (!checkWolf()) {
+ J3DAnmTransform* temp_r28 = field_0x2164.getBckAnm();
+
+ if (checkNoResetFlg1(FLG1_UNK_200)) {
+ if (!mFaceBckHeap.checkNoSetPriIdx()) {
+ simpleAnmPlay(temp_r28);
+ return;
+ }
+ }
+
+ f32 var_f31;
+ if (checkUnderMove0BckNoArc(ANM_HAWK_WAIT)) {
+ var_f31 = temp_r28->getFrameMax();
+ } else if (mFaceBckHeap.checkNoSetPriIdx()) {
+ u16 temp_r27 = mFaceBckHeap.getIdx();
+
+ if (mFaceBckHeap.checkNoSetArcNo()) {
+ if (temp_r27 == 0xE8) {
+ var_f31 = 1.0f;
+ } else if (temp_r27 == 0x157 || temp_r27 == 0x120 || (checkModeFlg(0x400) && temp_r27 == 0x160)) {
+ var_f31 = 1.0f + temp_r28->getFrame();
+ if (var_f31 >= temp_r28->getFrameMax()) {
+ var_f31 -= temp_r28->getFrameMax();
+ }
+ } else {
+ if (getNowAnmPackUnder(UNDER_0) != getNowAnmPackUpper(UPPER_0)) {
+ var_f31 = mUpperFrameCtrl[0].getFrame();
+ } else {
+ var_f31 = mUnderFrameCtrl[0].getFrame();
+ }
+ }
+ } else {
+ if (getNowAnmPackUnder(UNDER_0) != getNowAnmPackUpper(UPPER_0)) {
+ var_f31 = mUpperFrameCtrl[0].getFrame();
+ } else {
+ var_f31 = mUnderFrameCtrl[0].getFrame();
+ }
+ }
+ } else {
+ var_f31 = mUpperFrameCtrl[2].getFrame();
+ }
+
+ if (var_f31 > temp_r28->getFrameMax()) {
+ var_f31 = temp_r28->getFrameMax();
+ }
+
+ if (mClothesChangeWaitTimer == 0 && !checkZoraWearMaskDraw()) {
+ field_0x2164.entry(mpLinkFaceModel->getModelData(), var_f31);
+ }
+ }
}
/* 800B0098-800B0150 0AA9D8 00B8+00 14/14 0/0 0/0 .text
@@ -6174,18 +9774,433 @@ s16 daAlink_c::getRoofAngle(cBgS_PolyInfo* param_0, s16 param_1) {
return fopAcM_getPolygonAngle(&plane, param_1) + 0x8000;
}
-
/* 800B01FC-800B02BC 0AAB3C 00C0+00 2/2 0/0 0/0 .text
* getWallEdgePos__9daAlink_cFRC4cXyzP8cM3dGPlaP8cM3dGPlaP4cXyzi */
BOOL daAlink_c::getWallEdgePos(cXyz const& param_0, cM3dGPla* param_1, cM3dGPla* param_2,
cXyz* param_3, int param_4) {
- // NONMATCHING
- return 0;
+ cXyz sp20(param_1->mNormal.z, 0.0f, -param_1->mNormal.x);
+ sp20.normalizeZP();
+
+ cM3dGPla sp2C(&sp20, -((sp20.z * param_0.z) + ((sp20.x * param_0.x) + (sp20.y * param_0.y))));
+
+ return cM3d_3PlaneCrossPos(*param_1, *param_2, sp2C, param_3);
}
/* 800B02BC-800B146C 0AABFC 11B0+00 9/9 0/0 0/0 .text setFrontWallType__9daAlink_cFv */
void daAlink_c::setFrontWallType() {
- // NONMATCHING
+ f32 var_f31;
+ if (checkWolf()) {
+ var_f31 = 90.0f;
+ } else if (mProcID == PROC_HOOKSHOT_FLY) {
+ var_f31 = 50.0f;
+ } else if (checkModeFlg(0x200000)) {
+ var_f31 = 50.0f;
+ } else {
+ var_f31 = mAcchCir[0].GetWallR();
+ }
+
+ if (field_0x2f91 == 0) {
+ field_0x2f91 = 1;
+ if (!checkMagneBootsOn()) {
+ cXyz sp98;
+ cXyz sp8C;
+ f32 sp64 = cM_ssin(shape_angle.y);
+ f32 sp60 = cM_scos(shape_angle.y);
+
+ int var_r27;
+ int i;
+ BOOL sp5C = 0;
+ BOOL sp58 = 0;
+
+ f32 sp54;
+ f32 sp50;
+
+ if (mProcID == PROC_HOOKSHOT_FLY) {
+ if (mProcVar2.field_0x300c == 4 && dComIfG_Bgsp().ChkPolySafe(mPolyInfo2)) {
+ cM3dGPla spF4;
+ dComIfG_Bgsp().GetTriPla(mPolyInfo2, &spF4);
+
+ if (cBgW_CheckBWall(spF4.mNormal.y)) {
+ spF4.mNormal.y = 0.0f;
+ spF4.mNormal.normalizeZP();
+
+ sp64 = -spF4.mNormal.x;
+ sp60 = -spF4.mNormal.z;
+ }
+ }
+
+ sp98.x = mHookshotTopPos.x - (sp64 * var_f31);
+ sp98.z = mHookshotTopPos.z - (sp60 * var_f31);
+ sp8C.x = (2.0f * mHookshotTopPos.x) - sp98.x;
+ sp8C.z = (2.0f * mHookshotTopPos.z) - sp98.z;
+ sp50 = mHookshotTopPos.y;
+ sp54 = 10.0f + mHookshotTopPos.y;
+ } else {
+ sp98.x = current.pos.x;
+ sp98.z = current.pos.z;
+ sp8C.x = sp98.x + (sp64 * (25.0f + var_f31));
+ sp8C.z = sp98.z + (sp60 * (25.0f + var_f31));
+ sp50 = current.pos.y;
+ sp54 = 100.0f + current.pos.y;
+ }
+
+ BOOL sp4C = 0;
+
+
+ for (i = 0; i < 3; i++) {
+ sp98.y = sp50 + mAcchCir[i].GetWallH();
+ sp8C.y = sp98.y;
+
+ if (commonLineCheck(&sp98, &sp8C)) {
+ var_r27 = dComIfG_Bgsp().GetWallCode(mLinkLinChk);
+
+ if (i == 0 && var_r27 == 3 && checkStageName("D_MN10") != 0 && fopAcM_GetRoomNo(this) == 6) {
+ sp4C = 1;
+ } else if (!checkWolf() && sp5C == 0 && ((i == 0 && mLinkAcch.i_ChkGroundHit() && !checkModeFlg(0x70C52)) || mProcID == PROC_HOOKSHOT_FLY) && var_r27 == 0) {
+ sp5C = 1;
+ sp98.y = sp54;
+ sp8C.y = sp98.y;
+
+ if (commonLineCheck(&sp98, &sp8C) && checkClimbCode(mLinkLinChk)) {
+ sp58 = 1;
+ break;
+ }
+
+ i = -1;
+ } else if (!checkWolf() || ((i != 0 && i != 1) || var_r27 != 7)) {
+ break;
+ }
+ }
+ }
+
+ if (i == 3) {
+ if (sp4C == 0) {
+ offNoResetFlg3(FLG3_UNK_400000);
+ return;
+ }
+
+ sp98.y = sp50 + mAcchCir[0].GetWallH();
+ sp8C.y = sp98.y;
+
+ if (!commonLineCheck(&sp98, &sp8C)) {
+ return;
+ }
+ } else {
+ sp4C = 0;
+ }
+
+ cM3dGPla spE0;
+ dComIfG_Bgsp().GetTriPla(mLinkLinChk, &spE0);
+
+ if ((fabsf(spE0.mNormal.y) > 0.05f)) {
+ return;
+ }
+
+ field_0x306e = spE0.mNormal.atan2sX_Z();
+ BOOL sp48 = 0;
+
+ s16 spA;
+ if (mProcID == PROC_HOOKSHOT_FLY) {
+ spA = 0x7FFF;
+ } else if (mProcID == PROC_WOLF_JUMP_ATTACK || (checkWolf() && var_r27 == 3)) {
+ if (mProcID != PROC_WOLF_JUMP_ATTACK) {
+ sp48 = 1;
+ }
+ spA = 0x2000;
+ } else {
+ spA = field_0x30ae;
+ }
+
+ int sp44 = cLib_distanceAngleS(field_0x306e, (shape_angle.y + 0x8000));
+ if (sp44 > spA) {
+ return;
+ }
+
+ cM3dGPla spCC;
+ f32 sp40;
+
+ if (checkModeFlg(2)) {
+ field_0x34ec = mLinkLinChk.i_GetCross();
+ } else {
+ sp40 = spE0.getSignedLenPos(&current.pos);
+ field_0x34ec.set(current.pos.x - (sp40 * spE0.mNormal.x), current.pos.y, current.pos.z - (sp40 * spE0.mNormal.z));
+
+ int temp_r3 = dComIfG_Bgsp().GetWallCode(mLinkLinChk);
+ if (temp_r3 != 4 && temp_r3 != 5) {
+ sp98.x = current.pos.x;
+ sp98.z = current.pos.z;
+ sp8C.x = sp98.x - (2.0f * sp40 * spE0.mNormal.x);
+ sp8C.z = sp98.z - (2.0f * sp40 * spE0.mNormal.z);
+
+ //int i;
+ for (i = 0; i < 3; i++) {
+ if (i == 0 && sp58 != 0) {
+ sp98.y = sp54;
+ } else {
+ sp98.y = current.pos.y + mAcchCir[i].GetWallH();
+ }
+
+ sp8C.y = sp98.y;
+
+ if (commonLineCheck(&sp98, &sp8C)) {
+ dComIfG_Bgsp().GetTriPla(mLinkLinChk, &spCC);
+ cXyz sp80 = spE0.mNormal - spCC.mNormal;
+
+ if (sp80.abs() < 0.001f) {
+ break;
+ }
+ }
+ }
+
+ if (i == 3) {
+ offNoResetFlg3(FLG3_UNK_400000);
+ return;
+ }
+ }
+ }
+
+ int var_r29 = dComIfG_Bgsp().GetWallCode(mLinkLinChk);
+ dBgW_Base* sp3C = dComIfG_Bgsp().GetBgWBasePointer(mLinkLinChk);
+
+ if ((var_r29 == 3 || var_r29 == 1) && (sp4C != 0 || (sp3C != NULL && !sp3C->ChkPushPullOk()))) {
+ var_r29 = 0;
+ } else if (var_r29 == 1 && mSpecialMode == 0x2B) {
+ var_r29 = 0;
+ }
+
+ if (sp48 != 0 && var_r29 != 3 && sp44 > field_0x30ae) {
+ return;
+ }
+
+ cXyz sp74;
+ if (var_r29 != 1 && var_r29 != 5 && var_r29 != 4) {
+ offNoResetFlg3(FLG3_UNK_400000);
+ }
+
+ if (!mLinkAcch.ChkWallHit() && !checkWolf() && (var_r29 != 1 || mProcID != PROC_HANG_READY) && (var_r29 != 3 || checkModeFlg(0x40000) || checkModeFlg(2) || !(sp40 <= 51.0f)) && mProcID != PROC_HOOKSHOT_FLY && !checkModeFlg(0x200000)) {
+ offNoResetFlg3(FLG3_UNK_400000);
+ return;
+ }
+
+ if (var_r29 == 2) {
+ return;
+ }
+
+ if (var_r29 == 3 && dComIfG_Bgsp().ChkMoveBG_NoDABg(mLinkLinChk)) {
+ field_0x27fc = dComIfG_Bgsp().GetActorPointer(mLinkLinChk);
+ }
+
+ if (checkNoResetFlg0(daPy_FLG0(FLG0_UNDERWATER | FLG0_SWIM_UP))) {
+ if (var_r29 == 6 && !checkModeFlg(0x40002)) {
+ setDoStatus(7);
+ setLadderPosInit();
+ return;
+ }
+
+ if (var_r29 == 3 && !checkModeFlg(0x40000) && !checkModeFlg(2)) {
+ onResetFlg0(RFLG0_UNK_8);
+ mPolyInfo1.SetPolyInfo(mLinkLinChk);
+
+ if (checkModeFlg(0x200000)) {
+ return;
+ }
+
+ if (!mLinkAcch.ChkWallHit() && !checkWolf()) {
+ return;
+ }
+ } else if (!checkWolf()) {
+ if (var_r29 == 1) {
+ if (checkModeFlg(0x40002)) {
+ if (checkModeFlg(2) && mProcID != PROC_HOOKSHOT_FLY) {
+ setDoStatus(0x8E);
+ }
+
+ f32 sp34;
+ if (checkModeFlg(0x40000)) {
+ sp34 = current.pos.y - 90.0f;
+ } else {
+ sp34 = current.pos.y;
+ }
+
+ sp98.set(field_0x34ec.x - (15.0f * spE0.mNormal.x), 150.0f + sp34, field_0x34ec.z - (15.0f * spE0.mNormal.z));
+ mLinkGndChk.SetPos(&sp98);
+ f32 sp38 = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
+
+ if (sp38 >= current.pos.y && dBgS_CheckBGroundPoly(mLinkGndChk)) {
+ cM3dGPla spB8;
+ dComIfG_Bgsp().GetTriPla(mLinkGndChk, &spB8);
+
+ if (getWallEdgePos(field_0x34ec, &spE0, &spB8, &sp74, 0)) {
+ if (sp74.y - sp34 <= 150.0f) {
+ if (checkModeFlg(0x40000)) {
+ field_0x34ec = sp74;
+ field_0x2f91 = 7;
+ return;
+ } else if (mProcID != PROC_HOOKSHOT_FLY) {
+ field_0x34ec = sp74;
+ field_0x2f91 = 0xA;
+ return;
+ } else {
+ current.pos.y = sp74.y - 150.0f;
+ }
+ }
+ }
+ }
+ }
+ mPolyInfo1.SetPolyInfo(mLinkLinChk);
+ field_0x2f91 = 3;
+ return;
+ }
+
+ if (var_r29 == 4 || (var_r29 == 5 && !checkModeFlg(2))) {
+ if (var_r29 == 4) {
+ field_0x2f91 = 4;
+ if (checkModeFlg(2)) {
+ setDoStatus(0x8E);
+ }
+ } else {
+ field_0x2f91 = 5;
+ }
+ setLadderPosInit();
+ return;
+ }
+ }
+ }
+
+ if (checkRoomOnly() && !checkWolf()) {
+ return;
+ }
+
+ f32 var_f30;
+ f32 sp30;
+ f32 sp2C;
+ f32 sp28;
+
+ if (checkWolf()) {
+ if (checkModeFlg(2)) {
+ var_f30 = daAlinkHIO_wlAutoJump_c0::m.field_0x78;
+ } else {
+ var_f30 = daAlinkHIO_wlWallHang_c0::m.field_0x84;
+ }
+ sp30 = daAlinkHIO_wlWallHang_c0::m.field_0x7C;
+ sp2C = daAlinkHIO_wlWallHang_c0::m.field_0x80;
+ } else {
+ if (checkModeFlg(2)) {
+ var_f30 = daAlinkHIO_autoJump_c0::m.mHangHeightLimit;
+ } else {
+ var_f30 = daAlinkHIO_wallHang_c0::m.field_0x14;
+ }
+ sp30 = daAlinkHIO_wallHang_c0::m.field_0x8;
+ sp2C = daAlinkHIO_wallHang_c0::m.field_0xC;
+ }
+
+ sp28 = current.pos.y + mSinkShapeOffset;
+ sp98.set(current.pos.x, sp28 + (0.01f + var_f30), current.pos.z);
+ sp8C.set(sp98.x + (sp64 * (50.0f + var_f31)), sp98.y, sp98.z + (sp60 * (50.0f + var_f31)));
+
+ BOOL sp24 = commonLineCheck(&sp98, &sp8C);
+ if (sp24) {
+ sp98 = mLinkLinChk.i_GetCross();
+ dComIfG_Bgsp().GetTriPla(mLinkLinChk, &spCC);
+ sp98.x = (sp98.x + (25.0f * spCC.mNormal.x));
+ sp98.z = (sp98.z + (25.0f * spCC.mNormal.z));
+ mLinkGndChk.SetPos(&sp98);
+
+ if (dComIfG_Bgsp().GroundCross(&mLinkGndChk) > current.pos.y + l_autoUpHeight) {
+ dComIfG_Bgsp().GetTriPla(mLinkGndChk, &spCC);
+ if (cBgW_CheckBGround(spCC.mNormal.y)) {
+ sp24 = 0;
+ }
+ }
+ }
+
+ if (sp24 == 0) {
+ mLinkRoofChk.SetPos(current.pos);
+ sp24 = dComIfG_Bgsp().RoofChk(&mLinkRoofChk) - sp28 > 10.0f + var_f30 ? 0 : 1;
+ }
+
+ if (sp24 != 0) {
+ return;
+ }
+
+ cM3dGPla spA4;
+ bool sp8 = 0;
+ int sp20 = 0;
+
+ sp98.set(field_0x34ec.x - (7.5f * spE0.mNormal.x), sp28 + (0.01f + var_f30), field_0x34ec.z - (7.5f * spE0.mNormal.z));
+ mLinkGndChk.SetPos(&sp98);
+ f32 sp1C = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
+
+ sp98.set(field_0x34ec.x - (1.5f * spE0.mNormal.x), sp28 + (0.01f + var_f30), field_0x34ec.z - (1.5f * spE0.mNormal.z));
+ mLinkGndChk.SetPos(&sp98);
+ f32 sp38 = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
+
+ if (-1000000000.0f != sp38 && fabsf(sp1C - sp38) < l_autoUpHeight) {
+ sp8 = dComIfG_Bgsp().GetTriPla(mLinkGndChk, &spA4);
+ }
+ if ((!checkModeFlg(0x40000) && sp38 < sp28) || sp8 == 0) {
+ return;
+ }
+ if (-1000000000.0f == sp38 || !cBgW_CheckBGround(spA4.mNormal.y)) {
+ return;
+ }
+
+ if (!getWallEdgePos(field_0x34ec, &spE0, &spA4, &sp74, sp20)) {
+ return;
+ }
+
+ if (dComIfG_Bgsp().GetGroundCode(mLinkGndChk) != 6) {
+ f32 sp18 = 36.5f;
+ sp98.set(sp74.x + (10.0f * spE0.mNormal.x), sp74.y + l_autoUpHeight, sp74.z + (10.0f * spE0.mNormal.z));
+ sp8C.set(sp74.x - (spE0.mNormal.x * sp18), sp98.y, sp74.z - (spE0.mNormal.z * sp18));
+
+ if (commonLineCheck(&sp98, &sp8C)) {
+ return;
+ }
+ }
+
+ field_0x34ec = sp74;
+ f32 temp_f29 = field_0x34ec.y - sp28;
+
+ if (checkModeFlg(0x40000)) {
+ f32 sp14;
+ f32 sp10;
+ if (checkWolf()) {
+ sp14 = 0.01f + daAlinkHIO_wlSwim_c0::m.field_0x7C;
+ sp10 = daAlinkHIO_wlSwim_c0::m.field_0x94;
+ } else {
+ sp14 = 0.01f + daAlinkHIO_swim_c0::m.mClimbHeight;
+ sp10 = daAlinkHIO_swim_c0::m.mUnderwaterClimbHeight;
+ }
+
+ if (checkNoResetFlg0(FLG0_SWIM_UP)) {
+ if (temp_f29 <= sp14) {
+ if (temp_f29 >= sp10) {
+ field_0x2f91 = 7;
+ }
+ }
+ }
+ } else if (checkModeFlg(2)) {
+ if (sp38 - mLinkAcch.GetGroundH() > field_0x598 && temp_f29 < var_f30) {
+ if (!checkWolf() && mProcID != PROC_HOOKSHOT_FLY && temp_f29 < daAlinkHIO_autoJump_c0::m.mGrabHeightLimit) {
+ field_0x2f91 = 0xB;
+ } else {
+ field_0x2f91 = 0xA;
+ }
+ }
+ } else if (!(temp_f29 >= 0.01f + var_f30) && (!checkGrabAnime() || !(temp_f29 >= 0.01f + sp30))) {
+ if (temp_f29 < 0.01f + sp30) {
+ field_0x2f91 = 6;
+ } else if (temp_f29 < 0.01f + sp2C) {
+ field_0x2f91 = 7;
+ } else if (checkWolf() || (temp_f29 < 0.01f + daAlinkHIO_wallHang_c0::m.field_0x10)) {
+ field_0x2f91 = 8;
+ } else {
+ field_0x2f91 = 9;
+ }
+ }
+ }
+ }
}
/* 800B146C-800B1488 0ABDAC 001C+00 1/1 0/0 0/0 .text SetPos__12dBgS_RoofChkFRC4cXyz */
@@ -6216,7 +10231,57 @@ void daAlink_c::setWaterY() {
/* 800B154C-800B172C 0ABE8C 01E0+00 2/2 0/0 0/0 .text setHangWaterY__9daAlink_cFv */
void daAlink_c::setHangWaterY() {
- // NONMATCHING
+ cXyz sp14;
+ mDoMtx_multVecZero(mpLinkModel->getAnmMtx(0), &sp14);
+
+ u32 var_r29;
+ u32 var_r28;
+ if (checkWolf()) {
+ var_r29 = Z2SE_WL_OUTOF_WATER;
+ var_r28 = Z2SE_WL_INTO_WATER;
+ } else {
+ f32 var_f31;
+ if (mLeftFootPos.y < mRightFootPos.y) {
+ var_f31 = mLeftFootPos.y;
+ } else {
+ var_f31 = mRightFootPos.y;
+ }
+
+ sp14.y = var_f31;
+ var_r29 = Z2SE_AL_OUTOF_WATER;
+ var_r28 = Z2SE_AL_INTO_WATER;
+ }
+
+ if (fopAcM_wt_c::waterCheck(&sp14)) {
+ field_0x33b8 = fopAcM_wt_c::getWaterY();
+ field_0x2fc5 = fopAcM_wt_c::getPolyAtt0();
+ field_0x2fc6 = dKy_pol_argument_get(fopAcM_wt_c::getWaterCheck());
+
+ if (field_0x2fc5 != 6) {
+ if (checkModeFlg(0x40)) {
+ cXyz sp8(sp14.x, field_0x33b8, sp14.z);
+
+ if (field_0x33bc < field_0x33b8 && sp14.y >= field_0x33b8) {
+ seStartMapInfo(var_r29);
+ } else if (field_0x33bc > field_0x33b8 && sp14.y <= field_0x33b8) {
+ seStartMapInfo(var_r28);
+ fopKyM_createWpillar(&sp8, field_0x3420, 0);
+ }
+ if (field_0x33bc < field_0x33b8) {
+ dComIfGp_particle_setWaterRipple(field_0x31a8, *fopAcM_wt_c::getWaterCheck(), &sp8, 0.0f, &tevStr, NULL, fopAcM_GetRoomNo(this));
+ }
+ }
+
+ checkWaterInKandelaar(field_0x33b8);
+ }
+ } else {
+ field_0x33b8 = -1000000000.0f;
+ field_0x2fc5 = 0x10;
+ field_0x2fc6 = 0;
+ }
+
+ field_0x33bc = sp14.y;
+
}
/* 800B172C-800B1770 0AC06C 0044+00 3/3 0/0 0/0 .text setSandDownBgCheckWallH__9daAlink_cFv */
@@ -6340,7 +10405,111 @@ BOOL daAlink_c::checkNotItemSinkLimit() {
/* 800B1BAC-800B1FB8 0AC4EC 040C+00 2/2 0/0 0/0 .text setSandShapeOffset__9daAlink_cFv */
void daAlink_c::setSandShapeOffset() {
- // NONMATCHING
+ f32 var_f30 = 0.0f;
+ f32 var_f31 = 0.0f;
+ f32 temp_f29 = mSinkShapeOffset;
+ BOOL temp_r29 = checkEventRun();
+
+ if (mLinkAcch.i_ChkGroundHit() && (field_0x2fbb == 3 || checkSnowCode()) && !checkModeFlg(0x440)) {
+ if (!temp_r29 && !checkModeFlg(0x02000000)) {
+ if (checkSnowCode()) {
+ if (!checkZeroSpeedF() || mProcID == PROC_TURN_MOVE) {
+ var_f31 = 1.0f;
+ if (mGndPolySpecialCode == dBgW_SPCODE_LIGHT_SNOW) {
+ var_f30 = -15.0f;
+ } else {
+ if (mSinkShapeOffset > -15.0f) {
+ var_f31 = 10.0f;
+ }
+ var_f30 = -35.0f;
+ }
+ }
+ } else if (field_0x2fbd == 4) {
+ var_f30 = -25.0f;
+ if (mSinkShapeOffset > -15.0f) {
+ var_f31 = 10.0f;
+ } else {
+ var_f31 = daAlinkHIO_basic_c0::m.mSandSinkSpeed;
+ }
+ } else if (field_0x2fbd == 2) {
+ var_f30 = field_0x345c;
+ var_f31 = 6.0f;
+ } else if (field_0x2fbd == 3) {
+ var_f30 = field_0x3458;
+ if (mSinkShapeOffset > -15.0f) {
+ var_f31 = 10.0f;
+ } else {
+ var_f31 = daAlinkHIO_basic_c0::m.mSandSinkSpeed;
+ if (checkWolf()) {
+ var_f31 *= 0.2142857f;
+ }
+ }
+ } else if (field_0x2fbd == 1) {
+ if (mNormalSpeed < 2.0f) {
+ var_f30 = field_0x3458;
+ if (mSinkShapeOffset > -15.0f) {
+ var_f31 = 10.0f;
+ } else {
+ var_f31 = daAlinkHIO_basic_c0::m.mSandSinkSpeed;
+ }
+
+ if (checkWolf()) {
+ var_f31 *= 0.2142857f;
+ }
+ } else {
+ var_f30 = -15.0f;
+ var_f31 = daAlinkHIO_basic_c0::m.mSandSurfaceSpeed;
+ }
+ } else if (!(mNormalSpeed < 2.0f) || !(mSinkShapeOffset < -15.0f)) {
+ var_f30 = -15.0f;
+ if (mSinkShapeOffset < -15.0f) {
+ var_f31 = daAlinkHIO_basic_c0::m.mSandSurfaceSpeed;
+ } else {
+ var_f31 = daAlinkHIO_basic_c0::m.mSandSinkSpeed;
+ }
+ }
+ }
+ } else {
+ var_f30 = 0.0f;
+ var_f31 = 10.0f;
+ }
+
+ if (var_f31 > 0.0f) {
+ cLib_chaseF(&mSinkShapeOffset, var_f30, var_f31);
+ }
+
+ if (mSinkShapeOffset < -15.0f) {
+ field_0x2fc9 = field_0x2fbb;
+
+ int var_r28;
+ if (mProcID == PROC_LAVA_RETURN) {
+ var_r28 = 0x7F;
+ } else {
+ var_r28 = cLib_minMaxLimit<int>((128.0f * ((mSinkShapeOffset - -15.0f) / (field_0x3458 - -15.0f))) - 1.0f, -1, 0x7F);
+ }
+
+ mZ2Link.setSinkDepth(var_r28);
+
+ if (fabsf(temp_f29 - mSinkShapeOffset) > 0.01f) {
+ if (field_0x2fbb == 0xD) {
+ seStartOnlyReverbLevel(Z2SE_AL_SINK_SNOW_LEVEL);
+ } else {
+ seStartOnlyReverbLevel(Z2SE_AL_SINK_SAND_LEVEL);
+ }
+ }
+ } else if (field_0x2fc9 != 0x10) {
+ if (field_0x2fc9 == 0xD) {
+ seStartOnlyReverb(Z2SE_AL_SINK_SNOW_OUT);
+ } else {
+ seStartOnlyReverb(Z2SE_AL_SINK_SAND_OUT);
+ }
+
+ field_0x2fc9 = 0x10;
+ }
+
+ if (checkWolf() && !temp_r29 && mSinkShapeOffset < -30.0f) {
+ getMidnaActor()->onForcePanic();
+ }
}
/* 800B1FB8-800B1FD8 0AC8F8 0020+00 2/2 0/0 0/0 .text checkLv2MiddleBossBgRide__9daAlink_cFs */
@@ -6350,7 +10519,23 @@ 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
+ if (!checkMagneBootsOn() && mLinkAcch.i_ChkGroundHit() && !checkModeFlg(0x40000) && (mGndPolySpecialCode != 6) && dComIfG_Bgsp().ChkPolySafe(mLinkAcch.m_gnd)) {
+ if ((checkEquipHeavyBoots() && daTagMagne_c::checkMagnetCode(mLinkAcch.m_gnd)) || mProcID == PROC_GORON_MOVE) {
+ return 0;
+ }
+
+ s16 temp_r28 = getMoveBGActorName(mLinkAcch.m_gnd, 1);
+ if (dComIfG_Bgsp().GetTriPla(mLinkAcch.m_gnd, param_0) &&
+ (!checkBootsOrArmorHeavy() || (temp_r28 != PROC_Obj_RotStair && temp_r28 != PROC_Obj_Lv3R10Saka)) &&
+ ((field_0x3174 != 8 && (mGndPolySpecialCode == 1 || (param_0->mNormal.y < field_0x3470 && mGndPolySpecialCode != 2))) ||
+ (mGndPolySpecialCode == 5 && !checkWolf() && (!checkInputOnR() || mProcID == PROC_SLIDE) && (param_0->mNormal.y < cM_scos(field_0x3122))) ||
+ (!checkEquipHeavyBoots() && !dComIfGp_checkPlayerStatus0(0, 0x100) && checkLv2MiddleBossBgRide(temp_r28) &&
+ (param_0->mNormal.y < cM_scos(cM_deg2s(daAlinkHIO_slide_c0::m.mLV2MinibossFloorSlideAngle))))))
+ {
+ return 1;
+ }
+ }
+
return 0;
}
@@ -6681,7 +10866,6 @@ void daAlink_c::setStickData() {
}
}
-
/* 800B2EA4-800B3220 0AD7E4 037C+00 1/1 0/0 0/0 .text setAtnList__9daAlink_cFv */
void daAlink_c::setAtnList() {
mAttList = NULL;
@@ -6938,7 +11122,6 @@ void daAlink_c::initServiceWaitTime() {
}
}
-
/* 800B3904-800B3924 0AE244 0020+00 50/50 0/0 0/0 .text checkZeroSpeedF__9daAlink_cCFv */
bool daAlink_c::checkZeroSpeedF() const {
return fabsf(mNormalSpeed) < 0.0010000000474974513f;
@@ -7190,11 +11373,116 @@ void daAlink_c::setSpeedAndAngleNormal() {
setNormalSpeedF(var_f31, daAlinkHIO_move_c0::m.mDeceleration);
}
-
/* 800B444C-800B477C 0AED8C 0330+00 1/1 0/0 0/0 .text setSpeedAndAngleAtn__9daAlink_cFv
*/
void daAlink_c::setSpeedAndAngleAtn() {
- // NONMATCHING
+ int var_r29 = field_0x2f98;
+
+ if (checkInputOnR()) {
+ s16 temp_r0 = field_0x2fe2 - shape_angle.y;
+ f32 temp_f27 = cM_ssin(temp_r0);
+ f32 temp_f29 = cM_scos(temp_r0);
+
+ if (mTargetedActor == NULL && !checkGoatStopGame() && (temp_f29 <= -0.99f || temp_f29 >= 0.99f)) {
+ if (temp_f29 <= -0.99f) {
+ var_r29 = 1;
+ } else {
+ var_r29 = 0;
+ }
+ } else if (temp_f29 < -0.866f) {
+ var_r29 = 1;
+ } else if (temp_f27 > 0.0f) {
+ var_r29 = 2;
+ } else if (temp_f27 < 0.0f) {
+ var_r29 = 3;
+ }
+ }
+
+ s16 var_r27;
+ s16 var_r26;
+ s16 var_r25;
+
+ f32 var_f31;
+ f32 var_f30;
+ f32 var_f28;
+
+ if (mTargetedActor != NULL) {
+ var_r27 = daAlinkHIO_atnMove_c0::m.mTurnAngleRate;
+ var_r26 = daAlinkHIO_atnMove_c0::m.mMaxTurnAngle;
+ var_r25 = daAlinkHIO_atnMove_c0::m.mMinTurnAngle;
+
+ if (var_r29 == 1) {
+ var_f31 = daAlinkHIO_atnMove_c0::m.mBackAcceleration;
+ var_f30 = daAlinkHIO_atnMove_c0::m.mBackDeceleration;
+ } else {
+ var_f31 = daAlinkHIO_atnMove_c0::m.mAcceleration;
+ var_f30 = daAlinkHIO_atnMove_c0::m.mDeceleration;
+ }
+ } else {
+ if (var_r29 == 0) {
+ if (checkInputOnR()) {
+ if (getDirectionFromCurrentAngle() == DIR_BACKWARD) {
+ current.angle.y += 0x8000;
+ mNormalSpeed *= -1.0f;
+ }
+ if (checkZeroSpeedF()) {
+ current.angle.y = field_0x2fe2;
+ }
+ }
+
+ setSpeedAndAngleNormal();
+ return;
+ }
+
+ var_r27 = daAlinkHIO_noActAtnMove_c0::m.mTurnAngleRate;
+ var_r26 = daAlinkHIO_noActAtnMove_c0::m.mMaxTurnAngle;
+ var_r25 = daAlinkHIO_noActAtnMove_c0::m.mMinTurnAngle;
+
+ if (var_r29 == 1) {
+ var_f31 = daAlinkHIO_noActAtnMove_c0::m.mBackAcceleration;
+ var_f30 = daAlinkHIO_noActAtnMove_c0::m.mBackDeceleration;
+ } else {
+ var_f31 = daAlinkHIO_noActAtnMove_c0::m.mAcceleration;
+ var_f30 = daAlinkHIO_noActAtnMove_c0::m.mDeceleration;
+ }
+ }
+
+ if (checkInputOnR()) {
+ if (getDirectionFromCurrentAngle() == DIR_BACKWARD) {
+ current.angle.y += 0x8000;
+ mNormalSpeed *= -1.0f;
+ }
+
+ s16 var_r28;
+ if (checkUnderMove0BckNoArc(ANM_CHAIN_PULL_END)) {
+ var_r28 = getChainStickAngleY(shape_angle.y);
+ } else {
+ var_r28 = field_0x2fe2;
+ }
+
+ if (checkZeroSpeedF()) {
+ current.angle.y = var_r28;
+ }
+
+ s16 temp_r23 = current.angle.y;
+ cLib_addCalcAngleS(&current.angle.y, var_r28, var_r27, var_r26, var_r25);
+
+ if (field_0x33a8 > (0.3f * (1.0f - fabsf(mNormalSpeed / field_0x594)))) {
+ var_f28 = var_f31 * field_0x33a8 * cM_scos((current.angle.y - temp_r23));
+ } else {
+ var_f28 = 0.0f;
+ }
+ } else {
+ var_f28 = 0.0f;
+ }
+
+ if (mTargetedActor != NULL) {
+ setShapeAngleToAtnActor(0);
+ } else {
+ shape_angle.y = field_0x2fe4;
+ }
+
+ setNormalSpeedF(var_f28, var_f30);
}
/* 800B477C-800B47B4 0AF0BC 0038+00 2/2 0/0 0/0 .text
@@ -7212,8 +11500,15 @@ int daAlink_c::checkRequestTalkActor(dAttList_c* param_0, fopAc_ac_c* param_1) {
/* 800B47B4-800B48D0 0AF0F4 011C+00 4/4 0/0 0/0 .text checkServiceWaitMode__9daAlink_cFv
*/
bool daAlink_c::checkServiceWaitMode() {
- // NONMATCHING
- return 0;
+ return !checkEventRun() &&
+ !checkEndResetFlg0(ERFLG0_BOSS_ROOM_WAIT) &&
+ checkNoUpperAnime() &&
+ !checkWindSpeedOnXZ() &&
+ field_0x3126 == 0 &&
+ field_0x3128 == 0 &&
+ field_0x3124 == 0 &&
+ !checkFishingRodAndLureItem() &&
+ mSinkShapeOffset >= -30.0f;
}
/* 800B48D0-800B4908 0AF210 0038+00 18/18 0/0 0/0 .text setJumpMode__9daAlink_cFv */
@@ -7593,8 +11888,73 @@ 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;
+ if (checkWolf()) {
+ if (checkModeFlg(0x01000000)) {
+ if (mDemo.getDemoType() == 4) {
+ return 0;
+ }
+ return procWolfWaitInit();
+ }
+
+ if (checkNoUpperAnime() && checkRestHPAnime() && shape_angle.y == field_0x2fe6 && (!checkAttentionState() || shape_angle.y == field_0x2fe4)) {
+ return procWolfTiredWaitInit();
+ }
+
+ return procWolfWaitInit();
+ }
+
+ if (checkModeFlg(0x400) && mRideStatus != 0) {
+ if (checkCanoeRide()) {
+ if (checkGrabAnimeAndThrow()) {
+ return procCanoeGrabMoveInit();
+ }
+ return procCanoeWaitInit(0);
+ }
+
+ if (checkBoardRide()) {
+ return procBoardWaitInit(NULL);
+ }
+
+ if (checkSpinnerRide()) {
+ return procSpinnerWaitInit();
+ }
+
+ if (checkGrabAnimeAndThrow()) {
+ return procHorseGrabMoveInit();
+ }
+
+ return procHorseWaitInit();
+ }
+
+ if (dComIfGp_checkPlayerStatus1(0, 0x10000)) {
+ return procHookshotRoofWaitInit(0, mCargoCarryAcKeep.getActor(), 0);
+ }
+
+ if (dComIfGp_checkPlayerStatus1(0, 0x02000000)) {
+ return procHookshotWallWaitInit(0, 0, 0);
+ }
+
+ if (checkModeFlg(0x40000) && !checkEndResetFlg1(ERFLG1_UNK_100)) {
+ return procSwimWaitInit(0);
+ }
+
+ if (mSpecialMode == 1) {
+ return procSumouReadyInit();
+ }
+
+ if (checkGrabAnime()) {
+ return procGrabWaitInit();
+ }
+
+ if (checkModeFlg(0x01000000) && mDemo.getDemoType() == 4) {
+ return 0;
+ }
+
+ if (checkRestHPAnime() && !checkPlayerGuardAndAttack() && shape_angle.y == field_0x2fe6 && !checkEndResetFlg0(ERFLG0_UNK_8000000) && !checkUnderMove0BckNoArc(ANM_WAIT_B) && !checkUnderMove0BckNoArc(ANM_WAIT_B_TO_A)) {
+ return procTiredWaitInit();
+ }
+
+ return procWaitInit();
}
/* 800B5BC0-800B5C34 0B0500 0074+00 3/3 0/0 0/0 .text setFallVoice__9daAlink_cFv */
@@ -7629,7 +11989,6 @@ void daAlink_c::setStepLandVibration() {
dComIfGp_getVibration().StartShock(shock, 15, cXyz(0.0f, 1.0f, 0.0f));
}
-
/* 800B5CCC-800B5F6C 0B060C 02A0+00 5/5 0/0 0/0 .text checkLandAction__9daAlink_cFi */
BOOL daAlink_c::checkLandAction(int param_0) {
f32 temp_f31 = 0.0099999998f * (mFallHeight - current.pos.y);
@@ -7901,7 +12260,6 @@ BOOL daAlink_c::checkAutoJumpAction() {
return 0;
}
-
/* 800B69CC-800B6A30 0B130C 0064+00 2/2 0/0 0/0 .text checkCutJumpInFly__9daAlink_cFv */
BOOL daAlink_c::checkCutJumpInFly() {
if ((mEquipItem == EQUIP_SWORD && checkResetFlg0(RFLG0_UNK_80)) || checkForceSwordSwing()) {
@@ -8034,7 +12392,6 @@ BOOL daAlink_c::checkFrontWallTypeAction() {
return 0;
}
-
/* 800B6F28-800B7090 0B1868 0168+00 3/3 0/0 0/0 .text checkItemActionInitStart__9daAlink_cFv */
int daAlink_c::checkItemActionInitStart() {
if (checkBowAndSlingItem(mEquipItem)) {
@@ -8135,7 +12492,6 @@ int daAlink_c::cancelUpperItemReadyAnime(int param_0) {
return 0;
}
-
/* 800B72E4-800B7390 0B1C24 00AC+00 8/8 0/0 0/0 .text checkItemActorPointer__9daAlink_cFv
*/
BOOL daAlink_c::checkItemActorPointer() {
@@ -8190,7 +12546,6 @@ bool daAlink_c::checkSwordTwirlAction() {
return true;
}
-
/* 800B74B4-800B7528 0B1DF4 0074+00 3/3 0/0 0/0 .text checkUpperItemActionFly__9daAlink_cFv */
BOOL daAlink_c::checkUpperItemActionFly() {
if (checkBowAndSlingItem(mEquipItem)) {
@@ -8396,13 +12751,21 @@ int daAlink_c::orderTalk(int i_checkZTalk) {
}
/* 800B7D4C-800B7F84 0B268C 0238+00 1/1 0/0 0/0 .text daAlink_searchBouDoor__FP10fopAc_ac_cPv */
-static void daAlink_searchBouDoor(fopAc_ac_c* param_0, void* param_1) {
- // NONMATCHING
+static void* daAlink_searchBouDoor(fopAc_ac_c* i_actor, void* i_data) {
+ if (fopAcM_GetName(i_actor) == PROC_NPC_BOU && ((daNpc_Bou_c*)i_actor)->speakTo()) {
+ return i_actor;
+ }
+
+ return NULL;
}
/* 800B7F84-800B80C4 0B28C4 0140+00 1/1 0/0 0/0 .text daAlink_searchKolin__FP10fopAc_ac_cPv */
-static void daAlink_searchKolin(fopAc_ac_c* param_0, void* param_1) {
- // NONMATCHING
+static void* daAlink_searchKolin(fopAc_ac_c* i_actor, void* i_data) {
+ if (fopAcM_GetName(i_actor) == PROC_NPC_KOLIN && ((daNpc_Kolin_c*)i_actor)->orderNoRideEvt()) {
+ return i_actor;
+ }
+
+ return NULL;
}
/* 800B80C4-800B8374 0B2A04 02B0+00 2/2 0/0 0/0 .text orderZTalk__9daAlink_cFv */
@@ -8852,7 +13215,6 @@ BOOL daAlink_c::checkSideRollAction(int param_0) {
return procTurnMoveInit(param_0);
}
-
/* 800B9254-800B92D0 0B3B94 007C+00 35/35 0/0 0/0 .text checkNoUpperAnime__9daAlink_cCFv
*/
BOOL daAlink_c::checkNoUpperAnime() const {
@@ -8928,7 +13290,6 @@ void daAlink_c::swordEquip(int param_0) {
}
}
-
/* 800B9580-800B9640 0B3EC0 00C0+00 1/1 0/0 0/0 .text swordUnequip__9daAlink_cFv */
void daAlink_c::swordUnequip() {
f32 anm_speed;
@@ -8996,7 +13357,6 @@ void daAlink_c::itemUnequip(u16 i_itemID, f32 i_playSpeed) {
anm_data->mInterpolation);
}
-
/* 800B97EC-800B983C 0B412C 0050+00 2/2 0/0 0/0 .text checkFastUnequip__9daAlink_cFv */
bool daAlink_c::checkFastUnequip() {
return mProcID == PROC_PREACTION_UNEQUIP || mProcID == PROC_HORSE_GETOFF || checkEventRun();
@@ -9387,7 +13747,6 @@ void daAlink_c::commonChangeItem() {
}
}
-
/* 800BA914-800BAF08 0B5254 05F4+00 1/1 0/0 0/0 .text setItemAction__9daAlink_cFv */
void daAlink_c::setItemAction() {
if (mEquipItem == IRONBALL) {
@@ -9524,7 +13883,6 @@ void daAlink_c::setItemAction() {
}
}
-
/* 800BAF08-800BAF80 0B5848 0078+00 2/2 0/0 0/0 .text checkNextActionFromCrouch__9daAlink_cFi */
BOOL daAlink_c::checkNextActionFromCrouch(int param_0) {
if (checkNextAction(param_0)) {
@@ -9565,8 +13923,36 @@ void daAlink_c::getBodyAngleXBasePos(cXyz* o_pos) {
/* 800BB084-800BB2B0 0B59C4 022C+00 3/3 0/0 0/0 .text getBodyAngleXAtnActor__9daAlink_cFi
*/
s16 daAlink_c::getBodyAngleXAtnActor(int param_0) {
- // NONMATCHING
- return 0;
+ s16 var_r30;
+
+ if (mTargetedActor != NULL) {
+ cXyz sp18;
+ getBodyAngleXBasePos(&sp18);
+
+ cXyz spC = mTargetedActor->eyePos - sp18;
+ multVecMagneBootInvMtx(&spC);
+
+ spC.y -= 40.0f;
+
+ if (spC.abs() < 1.0f) {
+ var_r30 = 0;
+ } else {
+ var_r30 = spC.atan2sY_XZ();
+ if (param_0 != 0) {
+ var_r30 = cLib_minMaxLimit<s16>((s16)var_r30, daAlinkHIO_cut_c0::m.mUnkBodyUpwards, daAlinkHIO_cut_c0::m.mUnkBodyDownwards);
+ } else {
+ var_r30 = cLib_minMaxLimit<s16>((s16)var_r30, -0x2000, 0x2000);
+ }
+ }
+ } else {
+ var_r30 = 0;
+ }
+
+ if (checkNotItemSinkLimit() && var_r30 > 0) {
+ var_r30 = 0;
+ }
+
+ return var_r30;
}
/* 800BB2B0-800BB324 0B5BF0 0074+00 13/13 0/0 0/0 .text setBodyAngleXReadyAnime__9daAlink_cFi */
@@ -9687,12 +14073,172 @@ void daAlink_c::setSpecialGravity(f32 i_gravity, f32 i_speed, int i_offFlag) {
/* 800BB7A0-800BBD40 0B60E0 05A0+00 1/1 0/0 0/0 .text transAnimeProc__9daAlink_cFP4cXyzff
*/
void daAlink_c::transAnimeProc(cXyz* param_0, f32 param_1, f32 param_2) {
- // NONMATCHING
+ mDoExt_MtxCalcAnmBlendTbl* temp_r26 = field_0x1f20;
+ *param_0 = field_0x34d4;
+
+ J3DTransformInfo sp60;
+ J3DTransformInfo sp40;
+ temp_r26->getAnm(0)->getTransform(0, &sp60);
+
+ for (int i = 1; i < 3; i++) {
+ J3DAnmTransform* sp8 = temp_r26->getAnm(i);
+ if (sp8 != NULL) {
+ sp8->getTransform(0, &sp40);
+
+ f32 temp_f1 = temp_r26->getRatio(i);
+ f32 temp_f30 = 1.0f - temp_f1;
+ sp60.mTranslate.x = (sp60.mTranslate.x * temp_f30) + (sp40.mTranslate.x * temp_f1);
+ sp60.mTranslate.y = (sp60.mTranslate.y * temp_f30) + (sp40.mTranslate.y * temp_f1);
+ sp60.mTranslate.z = (sp60.mTranslate.z * temp_f30) + (sp40.mTranslate.z * temp_f1);
+ }
+ }
+
+ J3DTransformInfo* temp_r29 = field_0x2060->getOldFrameTransInfo(0);
+ cXyz sp30;
+
+ if (field_0x2f99 == 0x50) {
+ sp30 = current.pos - field_0x3798;
+
+ if (checkModeFlg(0x40) || mProcID == PROC_STEP_MOVE || mProcID == PROC_WOLF_STEP_MOVE) {
+ sp30.y = sp30.y - mSinkShapeOffset;
+ mSinkShapeOffset = 0.0f;
+ old.pos = current.pos;
+ field_0x3798 = current.pos;
+ }
+
+ temp_r29->mTranslate.x -= (-param_1 * sp30.z) + (param_2 * sp30.x);
+ temp_r29->mTranslate.y -= sp30.y;
+ temp_r29->mTranslate.z -= (param_2 * sp30.z) + (param_1 * sp30.x);
+ } else if (field_0x2f99 == 0x40 || field_0x2f99 == 0x90 || field_0x2f99 == 0x80 || field_0x2f99 == 0xA0 || field_0x2f99 == 0x70) {
+ if (field_0x2f99 == 0x80) {
+ sp30.set(0.0f, sp60.mTranslate.y - temp_r29->mTranslate.y, 0.0f);
+ } else if (field_0x2f99 == 0xA0) {
+ sp30.set(field_0x384c->x + (sp60.mTranslate.x - temp_r29->mTranslate.x), field_0x384c->y + (sp60.mTranslate.y - temp_r29->mTranslate.y), field_0x384c->z + (sp60.mTranslate.z - temp_r29->mTranslate.z));
+ } else if (field_0x2f99 == 0x90) {
+ sp30.set(sp60.mTranslate.x - temp_r29->mTranslate.x, 0.0f, sp60.mTranslate.z - temp_r29->mTranslate.z);
+ } else {
+ sp30.set(sp60.mTranslate.x - temp_r29->mTranslate.x, sp60.mTranslate.y - temp_r29->mTranslate.y, sp60.mTranslate.z - temp_r29->mTranslate.z);
+ }
+
+ cXyz sp24;
+ sp24.x = (param_1 * sp30.z) + (param_2 * sp30.x);
+ sp24.y = sp30.y;
+ sp24.z = (param_2 * sp30.z) - (param_1 * sp30.x);
+
+ if (checkMagneBootsOn()) {
+ mDoMtx_stack_c::copy(mMagneBootMtx);
+ mDoMtx_stack_c::YrotM(shape_angle.y);
+ mDoMtx_stack_c::multVec(&sp30, &sp24);
+ }
+
+ current.pos -= sp24;
+ field_0x3798 -= sp24;
+
+ if (field_0x2f99 == 0xA0 && mProcID == PROC_BACK_JUMP) {
+ mLastJumpPos -= sp24;
+ }
+
+ if (field_0x2f99 == 0x70) {
+ cXyz sp18(current.pos.x, current.pos.y + sp24.y, current.pos.z);
+ mLinkGndChk.SetPos(&sp18);
+
+ f32 temp_f1_2 = dComIfG_Bgsp().GroundCross(&mLinkGndChk);
+ if (current.pos.y < temp_f1_2) {
+ sp18.y = temp_f1_2 - current.pos.y;
+ current.pos.y += sp18.y;
+ field_0x3798.y += sp18.y;
+ }
+ }
+
+ temp_r29->mTranslate.y = sp60.mTranslate.y;
+
+ if (field_0x2f99 != 0x80) {
+ temp_r29->mTranslate.x = sp60.mTranslate.x;
+ temp_r29->mTranslate.z = sp60.mTranslate.z;
+ }
+ } else if ((field_0x2f99 == 0x20) || (field_0x2f99 == 0x30)) {
+ temp_r29->mTranslate.z = sp60.mTranslate.z;
+ if (field_0x2f99 != 0x20) {
+ temp_r29->mTranslate.x = sp60.mTranslate.x;
+ }
+ } else if (field_0x2f99 == 0x10) {
+ field_0x34d4.x = 0.0f;
+ field_0x34d4.z = 0.0f;
+
+ param_0->x = 0.0f;
+ param_0->z = 0.0f;
+ param_0->y = sp60.mTranslate.y;
+
+ temp_r29->mTranslate.x = 0.0f;
+ temp_r29->mTranslate.z = 0.0f;
+ temp_r29->mTranslate.y = sp60.mTranslate.y;
+
+ field_0x33b0 = sp60.mTranslate.y;
+
+ if (checkModeFlg(0x10000)) {
+ field_0x2f99 = 6;
+ } else {
+ field_0x2f99 = 7;
+ }
+
+ if (mProcID == PROC_HORSE_RIDE || mProcID == PROC_SWIM_DIVE) {
+ param_0->y = 0.0f;
+ field_0x33b0 = 0.0f;
+ } else if (mProcID == PROC_OCTAIEAL_SPIT) {
+ field_0x33b0 = -45.0f;
+ param_0->y = -45.0f;
+ }
+ } else if (checkRootTransClearContinueMode()) {
+ param_0->x = sp60.mTranslate.x;
+ param_0->y = sp60.mTranslate.y;
+ param_0->z = sp60.mTranslate.z;
+ field_0x2f99 &= ~0x8;
+ }
+
+ field_0x34d4.x = sp60.mTranslate.x;
+ field_0x34d4.y = sp60.mTranslate.y;
+ field_0x34d4.z = sp60.mTranslate.z;
}
/* 800BBD40-800BBF68 0B6680 0228+00 1/1 0/0 0/0 .text setFootSpeed__9daAlink_cFv */
void daAlink_c::setFootSpeed() {
- // NONMATCHING
+ cXyz sp18[2];
+
+ f32 var_f31;
+ if (field_0x2060->getOldFrameFlg()) {
+ mDoMtx_concat(mInvMtx, mpLinkModel->getAnmMtx(field_0x30bc), mDoMtx_stack_c::get());
+ mDoMtx_stack_c::multVecZero(&sp18[0]);
+
+ mDoMtx_concat(mInvMtx, mpLinkModel->getAnmMtx(field_0x30be), mDoMtx_stack_c::get());
+ mDoMtx_stack_c::multVecZero(&sp18[1]);
+
+ int var_r28;
+ if (sp18[0].y < sp18[1].y) {
+ var_r28 = 0;
+ } else {
+ var_r28 = 1;
+ }
+
+ cXyz sp8 = sp18[var_r28] - field_0x37b0[var_r28];
+ s16 temp_r0 = current.angle.y - shape_angle.y;
+ var_f31 = fabsf(sp8.z * cM_scos(temp_r0)) + fabsf(sp8.x * cM_ssin(temp_r0));
+
+ if (fabsf(mSpeedModifier) < 1.0f && checkInputOnR() && fabsf(field_0x33a4 - field_0x33a8) < 0.2f) {
+ var_f31 = (0.3f * var_f31) + (0.7f * field_0x33a0);
+ }
+ } else {
+ var_f31 = 0.0f;
+
+ for (int i = 0; i < 2; i++) {
+ sp18[i] = current.pos;
+ }
+ }
+
+ for (int i = 0; i < 2; i++) {
+ field_0x37b0[i] = sp18[i];
+ }
+
+ field_0x33a0 = var_f31;
}
/* 800BBF68-800BD6FC 0B68A8 1794+00 1/1 0/0 0/0 .text posMove__9daAlink_cFv */
@@ -10083,7 +14629,110 @@ void daAlink_c::posMove() {
/* 800BD6FC-800BDD70 0B803C 0674+00 1/1 0/0 0/0 .text autoGroundHit__9daAlink_cFv */
void daAlink_c::autoGroundHit() {
- // NONMATCHING
+ offNoResetFlg0(FLG0_UNK_2000);
+
+ if (checkMagneBootsOn()) {
+ cXyz sp68;
+ cXyz sp5C;
+ cXyz sp50;
+
+ mDoMtx_stack_c::copy(mMagneBootMtx);
+ mDoMtx_stack_c::multVecSR(&cXyz::BaseY, &sp50);
+ sp68 = current.pos + (sp50 * 30.0f);
+ sp5C = current.pos + (sp50 * 100.0f);
+
+ if (commonMagneLineCheck(&sp68, &sp5C)) {
+ current.pos = mMagneLineChk.i_GetCross();
+ onNoResetFlg0(FLG0_UNK_2000);
+
+ if (checkNoResetFlg1(FLG1_UNK_20000000)) {
+ mDoMtx_stack_c::YrotM(current.angle.y);
+ mDoMtx_stack_c::multVecSR(&cXyz::BaseZ, &sp50);
+ sp50 *= 10.0f;
+ sp68 += sp50;
+ sp5C += sp50;
+
+ if (commonLineCheck(&sp68, &sp5C) && daTagMagne_c::checkMagnetCode(mLinkLinChk)) {
+ offNoResetFlg1(FLG1_UNK_20000000);
+ } else {
+ mNormalSpeed = 0.0f;
+ speedF = 0.0f;
+ }
+ }
+ } else if (!cBgW_CheckBGround(mMagneBootsTopVec.y)) {
+ sp50 = current.pos - field_0x3798;
+ sp68 -= sp50;
+ sp5C -= sp50;
+
+ if (commonMagneLineCheck(&sp68, &sp5C)) {
+ onNoResetFlg0(FLG0_UNK_2000);
+ mNormalSpeed = 0.0f;
+ speedF = 0.0f;
+ onNoResetFlg1(FLG1_UNK_20000000);
+ field_0x3092 = current.angle.y + 0x8000;
+ current.pos = field_0x3798;
+ }
+ }
+ } else if (!checkModeFlg(0x70C52) || (checkBoardRide() && !checkModeFlg(2)) || checkModeFlg(0x40)) {
+ cM3dGPla sp74;
+ f32 temp_f30 = mLinkAcch.GetGroundH() - current.pos.y;
+
+ if (!mLinkAcch.i_ChkGroundHit()) {
+ if (checkBoardRide() && shape_angle.x < 0) {
+ return;
+ }
+
+ cXyz sp44 = current.pos - field_0x3798;
+ s16 var_r29;
+
+ f32 temp_f1 = sp44.absXZ();
+ if (temp_f1 > 1.0f) {
+ var_r29 = getGroundAngle(&mLinkAcch.m_gnd, sp44.atan2sX_Z());
+ } else {
+ var_r29 = field_0x2ff0;
+ }
+
+ f32 var_f31 = temp_f1 * cM_ssin(var_r29);
+ if (var_f31 < 0.0f) {
+ var_f31 = 0.0f;
+ }
+
+ BOOL var_r28;
+ if (-1000000000.0f != mLinkAcch.GetGroundH()) {
+ dComIfG_Bgsp().GetTriPla(mLinkAcch.m_gnd, &sp74);
+ var_r28 = cBgW_CheckBGround(sp74.mNormal.y);
+ } else {
+ var_r28 = 0;
+ }
+
+ if (var_r28 != 0) {
+ if (temp_f30 <= 0.000001f) {
+ if (temp_f30 >= l_autoDownHeight - var_f31) {
+ current.pos.y = mLinkAcch.GetGroundH();
+ mLinkAcch.SetGroundHit();
+ speed.y = 0.0f;
+ }
+ }
+ }
+ }
+ } else if (checkModeFlg(0x40000) && checkNoResetFlg0(FLG0_UNK_80) && current.pos.y > mWaterY && current.pos.y - mWaterY < 1000.0f) {
+ current.pos.y = mWaterY;
+ }
+
+ if (checkReinRide() || checkSpinnerRide()) {
+ if ((current.pos.y - mLinkAcch.GetGroundH() > 1500.0f) || (checkSpinnerRide() && mRideAcKeep.getActor() != NULL && ((daSpinner_c*)mRideAcKeep.getActor())->getJumpFlg())) {
+ if (checkNoResetFlg3(FLG3_UNK_80000) == 0) {
+ onNoResetFlg3(FLG3_UNK_80000);
+ mLastJumpPos = current.pos;
+ mFallHeight = mLastJumpPos.y;
+ field_0x33c8 = mLastJumpPos.y;
+ }
+ } else {
+ offNoResetFlg3(FLG3_UNK_80000);
+ }
+ } else {
+ offNoResetFlg3(FLG3_UNK_80000);
+ }
}
/* 800BDD70-800BDE20 0B86B0 00B0+00 2/2 0/0 0/0 .text startPeepChange__9daAlink_cFv */
@@ -10097,8 +14746,7 @@ bool daAlink_c::startPeepChange() {
} else {
mode = 6;
u32 param = fopAcM_GetParam(this);
- s32 roomNo = fopAcM_GetRoomNo(this);
- dComIfGs_setTurnRestart(current.pos, shape_angle.y, roomNo, param);
+ dComIfGs_setTurnRestart(current.pos, shape_angle.y, fopAcM_GetRoomNo(this), param);
}
dStage_changeScene(mPeepExitID, 0.0f, mode, fopAcM_GetRoomNo(this),
@@ -10247,7 +14895,6 @@ void daAlink_c::checkRoofRestart() {
}
}
-
/* 80392094-80392094 01E6F4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
@@ -10572,12 +15219,79 @@ void daAlink_c::seStartMapInfoLevel(u32 i_seID) {
/* 800BF204-800BF37C 0B9B44 0178+00 3/3 0/0 0/0 .text
* setBasAnime__9daAlink_cFQ29daAlink_c13daAlink_UNDER */
void daAlink_c::setBasAnime(daAlink_c::daAlink_UNDER param_0) {
- // NONMATCHING
+ daPy_anmHeap_c* temp_r29 = &mUnderAnmHeap[param_0];
+ daPy_frameCtrl_c* temp_r28 = &mUnderFrameCtrl[param_0];
+
+ if (!temp_r29->checkNoSetArcNo()) {
+ void* temp_r3 = ((mDoExt_transAnmBas*)getNowAnmPackUnder(UNDER_0))->getBas();
+ if (temp_r3 == NULL) {
+ resetBasAnime();
+ } else {
+ if (field_0x3084 == temp_r29->getIdx() && field_0x3086 == temp_r29->getArcNo()) {
+ if (field_0x33d4 * temp_r28->getRate() >= 0.0f) {
+ field_0x2d7c = temp_r28;
+ return;
+ }
+ }
+
+ field_0x2d80 = temp_r3;
+ field_0x2d7c = temp_r28;
+ field_0x3084 = temp_r29->getIdx();
+ field_0x3086 = temp_r29->getArcNo();
+ field_0x33d4 = temp_r28->getRate();
+ initBasAnime();
+ }
+ } else {
+ u8* temp_r3_2 = temp_r29->getBuffer();
+ if (*(u32*)(temp_r3_2 + 0x1C) == 0xFFFFFFFF) {
+ resetBasAnime();
+ return;
+ }
+
+ if (field_0x3084 == temp_r29->getIdx() && field_0x3086 == temp_r29->getArcNo()) {
+ if (field_0x33d4 * temp_r28->getRate() >= 0.0f) {
+ field_0x2d7c = temp_r28;
+ return;
+ }
+ }
+
+ u32 dataSize = *(u32*)(temp_r3_2 + 0x8) - *(u32*)(temp_r3_2 + 0x1C);
+
+ const u32 l_basAnmBufferSize = 0x800;
+ JUT_ASSERT(20661, dataSize < l_basAnmBufferSize);
+
+ cLib_memCpy(field_0x2d78, temp_r29->getBuffer() + *(u32*)(temp_r3_2 + 0x1C), dataSize);
+ field_0x2d7c = temp_r28;
+ field_0x3084 = temp_r29->getIdx();
+ field_0x3086 = temp_r29->getArcNo();
+ field_0x33d4 = temp_r28->getRate();
+ field_0x2d80 = 0;
+ initBasAnime();
+ }
}
/* 800BF37C-800BF4E0 0B9CBC 0164+00 11/11 0/0 0/0 .text initBasAnime__9daAlink_cFv */
void daAlink_c::initBasAnime() {
- // NONMATCHING
+ if (field_0x2d7c != NULL) {
+ f32 var_f31;
+ if (field_0x2d7c->getAttribute() == J3DFrameCtrl::LOOP_REPEAT_e) {
+ var_f31 = field_0x2d7c->getFrame() - field_0x2d7c->getRate();
+
+ if (var_f31 <= field_0x2d7c->getStart()) {
+ var_f31 = field_0x2d7c->getEnd() - var_f31;
+ } else if (var_f31 >= field_0x2d7c->getEnd()) {
+ var_f31 -= field_0x2d7c->getEnd();
+ }
+ } else {
+ var_f31 = 0.0f;
+ }
+
+ if (field_0x2d80 != NULL) {
+ mZ2Link.initAnime(field_0x2d80, field_0x2d7c->getRate() >= 0.0f, field_0x2d7c->getLoop(), var_f31);
+ } else {
+ mZ2Link.initAnime(field_0x2d78, field_0x2d7c->getRate() >= 0.0f, field_0x2d7c->getLoop(), var_f31);
+ }
+ }
}
/* 800BF4E0-800BF500 0B9E20 0020+00 6/6 0/0 0/0 .text resetBasAnime__9daAlink_cFv */
@@ -10585,14 +15299,67 @@ void daAlink_c::resetBasAnime() {
field_0x3084 = 0xFFFF;
field_0x3086 = 0xFFFF;
field_0x2d7c = NULL;
- field_0x2d80 = 0;
+ field_0x2d80 = NULL;
}
/* 800BF500-800BF79C 0B9E40 029C+00 5/5 0/0 0/0 .text checkSightLine__9daAlink_cFfP4cXyz
*/
BOOL daAlink_c::checkSightLine(f32 param_0, cXyz* param_1) {
- // NONMATCHING
- return 0;
+ camera_class* camera = dComIfGp_getCamera(field_0x317c);
+ cXyz* var_r29 = fopCamM_GetEye_p(camera);
+ cXyz sp3C;
+ cXyz sp30(mHeldItemRootPos);
+
+ if (checkHookshotItem(mEquipItem) || mEquipItem == PACHINKO) {
+ var_r29 = &sp30;
+ } else if (checkBowItem(mEquipItem) && mItemAcKeep.getActor() != NULL) {
+ var_r29 = &mItemAcKeep.getActor()->current.pos;
+ }
+
+ s16 temp_r27 = shape_angle.y + mBodyAngle.y;
+ f32 temp_f31 = cM_scos(mBodyAngle.x);
+ sp3C.set(temp_f31 * cM_ssin(temp_r27), -cM_ssin(mBodyAngle.x), temp_f31 * cM_scos(temp_r27));
+
+ if (checkMagneBootsOn()) {
+ mDoMtx_multVecSR(mMagneBootMtx, &sp3C, &sp3C);
+ }
+
+ *param_1 = (sp3C * param_0) + *var_r29;
+
+ if (checkHookshotItem(mEquipItem)) {
+ mRopeLinChk.Set(&field_0x3834, &mHeldItemRootPos, this);
+
+ if (dComIfG_Bgsp().LineCross(&mRopeLinChk)) {
+ *param_1 = mRopeLinChk.i_GetCross();
+ onResetFlg0(RFLG0_UNK_2000000);
+ return 1;
+ }
+
+ sp30 -= sp3C * 100.0f;
+ } else if (mEquipItem == COPY_ROD) {
+ return 0;
+ }
+
+ dBgS_LinChk* var_r30;
+ if (mEquipItem == BOOMERANG) {
+ var_r30 = &mBoomerangLinChk;
+ } else if (mProcID == PROC_HAWK_SUBJECT) {
+ var_r30 = &mLinkLinChk;
+ } else if (checkBowAndSlingItem(mEquipItem)) {
+ var_r30 = &mArrowLinChk;
+ } else {
+ var_r30 = &mRopeLinChk;
+ }
+
+ var_r30->Set(var_r29, param_1, this);
+
+ BOOL temp_r3 = dComIfG_Bgsp().LineCross(var_r30);
+ if (temp_r3) {
+ *param_1 = var_r30->i_GetCross();
+ onResetFlg0(RFLG0_UNK_2000000);
+ }
+
+ return temp_r3;
}
/* 800BF79C-800BF854 0BA0DC 00B8+00 2/2 0/0 0/0 .text setMetamorphoseModel__9daAlink_cFi
@@ -10864,7 +15631,6 @@ void daAlink_c::changeItemBck(u16 i_resID, f32 param_1) {
}
}
-
/* 800C0114-800C0164 0BAA54 0050+00 2/2 0/0 0/0 .text checkGroupItem__9daAlink_cCFii */
int daAlink_c::checkGroupItem(int i_itemNo, int i_selItem) const {
if (i_itemNo == 0x107) {
diff --git a/src/d/actor/d_a_npc_bou.cpp b/src/d/actor/d_a_npc_bou.cpp
index 8431426c1b..40d64a5929 100644
--- a/src/d/actor/d_a_npc_bou.cpp
+++ b/src/d/actor/d_a_npc_bou.cpp
@@ -1113,7 +1113,7 @@ void daNpc_Bou_c::setParam() {
}
/* 8096DF9C-8096E0EC 0010FC 0150+00 1/0 0/0 0/0 .text checkChangeEvt__11daNpc_Bou_cFv */
-void daNpc_Bou_c::checkChangeEvt() {
+bool daNpc_Bou_c::checkChangeEvt() {
// NONMATCHING
}
@@ -1138,7 +1138,7 @@ void daNpc_Bou_c::srchActors() {
}
/* 8096E27C-8096E31C 0013DC 00A0+00 1/0 0/0 0/0 .text evtTalk__11daNpc_Bou_cFv */
-void daNpc_Bou_c::evtTalk() {
+bool daNpc_Bou_c::evtTalk() {
// NONMATCHING
}
@@ -1148,7 +1148,7 @@ bool daNpc_Bou_c::evtEndProc() {
}
/* 8096E324-8096E3EC 001484 00C8+00 1/0 0/0 0/0 .text evtCutProc__11daNpc_Bou_cFv */
-void daNpc_Bou_c::evtCutProc() {
+bool daNpc_Bou_c::evtCutProc() {
// NONMATCHING
}
@@ -1233,7 +1233,7 @@ void daNpc_Bou_c::setCollision() {
}
/* 8096EC6C-8096EC74 001DCC 0008+00 1/0 0/0 0/0 .text drawDbgInfo__11daNpc_Bou_cFv */
-bool daNpc_Bou_c::drawDbgInfo() {
+int daNpc_Bou_c::drawDbgInfo() {
return false;
}
@@ -1678,13 +1678,13 @@ REGISTER_CTORS(0x809725A8, __sinit_d_a_npc_bou_cpp);
/* 809726D4-809727B4 005834 00E0+00 1/1 0/0 0/0 .text
* __ct__11daNpc_Bou_cFPC26daNpcT_faceMotionAnmData_cPC22daNpcT_motionAnmData_cPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPC16daNpcT_evtData_cPPc
*/
-daNpc_Bou_c::daNpc_Bou_c(daNpcT_faceMotionAnmData_c const* param_0,
+/* daNpc_Bou_c::daNpc_Bou_c(daNpcT_faceMotionAnmData_c const* param_0,
daNpcT_motionAnmData_c const* param_1,
daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_2, int param_3,
daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_4, int param_5,
daNpcT_evtData_c const* param_6, char** param_7) {
// NONMATCHING
-}
+} */
/* 809727B4-809727BC 005914 0008+00 1/0 0/0 0/0 .text getEyeballMaterialNo__11daNpc_Bou_cFv */
s32 daNpc_Bou_c::getEyeballMaterialNo() {
@@ -1703,19 +1703,19 @@ s32 daNpc_Bou_c::getNeckJointNo() {
/* 809727CC-809727D4 00592C 0008+00 1/0 0/0 0/0 .text getBackboneJointNo__11daNpc_Bou_cFv
*/
-bool daNpc_Bou_c::getBackboneJointNo() {
+s32 daNpc_Bou_c::getBackboneJointNo() {
return true;
}
/* 809727D4-809727E4 005934 0010+00 1/0 0/0 0/0 .text checkChangeJoint__11daNpc_Bou_cFi
*/
-void daNpc_Bou_c::checkChangeJoint(int param_0) {
+int daNpc_Bou_c::checkChangeJoint(int param_0) {
// NONMATCHING
}
/* 809727E4-809727F4 005944 0010+00 1/0 0/0 0/0 .text checkRemoveJoint__11daNpc_Bou_cFi
*/
-void daNpc_Bou_c::checkRemoveJoint(int param_0) {
+int daNpc_Bou_c::checkRemoveJoint(int param_0) {
// NONMATCHING
}
diff --git a/src/d/actor/d_a_npc_kolin.cpp b/src/d/actor/d_a_npc_kolin.cpp
index 41edd17798..a3533ecf02 100644
--- a/src/d/actor/d_a_npc_kolin.cpp
+++ b/src/d/actor/d_a_npc_kolin.cpp
@@ -1254,7 +1254,7 @@ void daNpc_Kolin_c::setParam() {
/* 80555118-8055523C 001218 0124+00 1/0 0/0 0/0 .text checkChangeEvt__13daNpc_Kolin_cFv
*/
-void daNpc_Kolin_c::checkChangeEvt() {
+bool daNpc_Kolin_c::checkChangeEvt() {
// NONMATCHING
}
@@ -1274,12 +1274,12 @@ void daNpc_Kolin_c::srchActors() {
}
/* 80555448-805554E8 001548 00A0+00 1/0 0/0 0/0 .text evtTalk__13daNpc_Kolin_cFv */
-void daNpc_Kolin_c::evtTalk() {
+bool daNpc_Kolin_c::evtTalk() {
// NONMATCHING
}
/* 805554E8-805555B0 0015E8 00C8+00 1/0 0/0 0/0 .text evtCutProc__13daNpc_Kolin_cFv */
-void daNpc_Kolin_c::evtCutProc() {
+bool daNpc_Kolin_c::evtCutProc() {
// NONMATCHING
}
@@ -1517,7 +1517,7 @@ void daNpc_Kolin_c::setCollision() {
}
/* 80555CE4-80555CEC 001DE4 0008+00 1/0 0/0 0/0 .text drawDbgInfo__13daNpc_Kolin_cFv */
-bool daNpc_Kolin_c::drawDbgInfo() {
+int daNpc_Kolin_c::drawDbgInfo() {
return false;
}
@@ -2133,14 +2133,14 @@ REGISTER_CTORS(0x8055A25C, __sinit_d_a_npc_kolin_cpp);
/* 8055A3B8-8055A498 0064B8 00E0+00 1/1 0/0 0/0 .text
* __ct__13daNpc_Kolin_cFPC26daNpcT_faceMotionAnmData_cPC22daNpcT_motionAnmData_cPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPC16daNpcT_evtData_cPPc
*/
-daNpc_Kolin_c::daNpc_Kolin_c(daNpcT_faceMotionAnmData_c const* param_0,
+/* daNpc_Kolin_c::daNpc_Kolin_c(daNpcT_faceMotionAnmData_c const* param_0,
daNpcT_motionAnmData_c const* param_1,
daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_2,
int param_3,
daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_4,
int param_5, daNpcT_evtData_c const* param_6, char** param_7) {
// NONMATCHING
-}
+} */
/* 8055A498-8055A4A0 006598 0008+00 1/0 0/0 0/0 .text getEyeballMaterialNo__13daNpc_Kolin_cFv */
s32 daNpc_Kolin_c::getEyeballMaterialNo() {
@@ -2160,19 +2160,19 @@ s32 daNpc_Kolin_c::getNeckJointNo() {
}
/* 8055A4B0-8055A4B8 0065B0 0008+00 1/0 0/0 0/0 .text getBackboneJointNo__13daNpc_Kolin_cFv */
-bool daNpc_Kolin_c::getBackboneJointNo() {
- return true;
+s32 daNpc_Kolin_c::getBackboneJointNo() {
+ return 1;
}
/* 8055A4B8-8055A4C8 0065B8 0010+00 1/0 0/0 0/0 .text checkChangeJoint__13daNpc_Kolin_cFi
*/
-void daNpc_Kolin_c::checkChangeJoint(int param_0) {
+int daNpc_Kolin_c::checkChangeJoint(int param_0) {
// NONMATCHING
}
/* 8055A4C8-8055A4D8 0065C8 0010+00 1/0 0/0 0/0 .text checkRemoveJoint__13daNpc_Kolin_cFi
*/
-void daNpc_Kolin_c::checkRemoveJoint(int param_0) {
+int daNpc_Kolin_c::checkRemoveJoint(int param_0) {
// NONMATCHING
}
@@ -2381,4 +2381,4 @@ static u8 data_8055B498[4];
static u8 data_8055B49C[4];
#pragma pop
-/* 8055A77C-8055A77C 0001C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ \ No newline at end of file
+/* 8055A77C-8055A77C 0001C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */