From 5c86d6d26f15ae2b60f150cecbbf946d17c20595 Mon Sep 17 00:00:00 2001 From: Max Roncace Date: Tue, 15 Jul 2025 20:00:01 +0000 Subject: [PATCH] Minor d_a_alink fixes (#2534) --- config/GZ2E01/symbols.txt | 10 +- include/JSystem/JHostIO/JORMContext.h | 5 + include/d/actor/d_a_alink.h | 4 +- include/m_Do/m_Do_mtx.h | 2 +- src/d/actor/d_a_alink.cpp | 352 ++++++++++++++------------ src/d/actor/d_a_alink_bottle.inc | 6 - src/d/actor/d_a_alink_crawl.inc | 3 +- src/d/actor/d_a_alink_demo.inc | 9 +- src/d/actor/d_a_alink_effect.inc | 22 +- src/d/actor/d_a_alink_horse.inc | 37 +-- src/d/actor/d_a_alink_ironball.inc | 45 ++-- src/d/actor/d_a_alink_link.inc | 2 +- src/d/actor/d_a_alink_wolf.inc | 24 +- 13 files changed, 287 insertions(+), 234 deletions(-) diff --git a/config/GZ2E01/symbols.txt b/config/GZ2E01/symbols.txt index 1dfe59bc329..13c4dee20a8 100644 --- a/config/GZ2E01/symbols.txt +++ b/config/GZ2E01/symbols.txt @@ -21908,11 +21908,17 @@ m_obj__12dEyeHL_mng_c = .sbss:0x80450FA8; // type:object size:0x4 scope:global a struct_80450FB0 = .sbss:0x80450FB0; // type:object size:0x1 scope:global align:8 data:byte lbl_80450FB1 = .sbss:0x80450FB1; // type:object size:0x1 data:byte lbl_80450FB2 = .sbss:0x80450FB2; // type:object size:0x1 data:byte -struct_80450FB8 = .sbss:0x80450FB8; // type:object size:0x4 scope:global align:4 data:byte +init$11203 = .sbss:0x80450FB8; // type:object size:0x1 scope:global align:1 data:byte +init$11207 = .sbss:0x80450FB9; // type:object size:0x1 scope:global align:1 data:byte +init$11211 = .sbss:0x80450FBA; // type:object size:0x1 scope:global align:1 data:byte +init$11215 = .sbss:0x80450FBB; // type:object size:0x1 scope:global align:1 data:byte init$33110 = .sbss:0x80450FBC; // type:object size:0x1 scope:local align:1 data:byte init$33113 = .sbss:0x80450FBD; // type:object size:0x1 scope:local align:1 data:byte it$36766 = .sbss:0x80450FC0; // type:object size:0x4 scope:local align:4 data:4byte -struct_80450FC4 = .sbss:0x80450FC4; // type:object size:0x4 scope:local align:4 data:byte +init$37466 = .sbss:0x80450FC4; // type:object size:0x1 scope:local align:4 data:byte +lbl_80450FC5 = .sbss:0x80450FC5; // type:object size:0x1 data:byte +lbl_80450FC6 = .sbss:0x80450FC6; // type:object size:0x1 data:byte +lbl_80450FC7 = .sbss:0x80450FC7; // type:object size:0x1 data:byte m_eye_move_flg = .sbss:0x80450FC8; // type:object size:0x1 scope:local align:1 data:byte m_morf_frame__16daAlink_matAnm_c = .sbss:0x80450FC9; // type:object size:0x1 scope:global align:1 data:byte bgWaitFlg = .sbss:0x80450FCC; // type:object size:0x4 scope:local align:4 data:4byte diff --git a/include/JSystem/JHostIO/JORMContext.h b/include/JSystem/JHostIO/JORMContext.h index 9c117a5f02b..930e66b2d89 100644 --- a/include/JSystem/JHostIO/JORMContext.h +++ b/include/JSystem/JHostIO/JORMContext.h @@ -151,6 +151,10 @@ public: genNodeSub(label, obj, param_2, param_3); } + void endUpdateNode() { + // empty function + } + void startUpdateNode(JORReflexible* obj) { putNode(obj); } @@ -240,6 +244,7 @@ public: void updateControl(u32 mode, u32 id, u32 param_2); void updateControl(u32 mode, u32 id, const char* param_2); + void updateLabel(u32 mode, u32 id, const char* param_2) { updateControl(mode, id, param_2); } void updateSliderSub(u32 mode, u32 id, s32 value, s32 rangeMin, s32 rangeMax, u32 param_5); void updateCheckBoxSub(u32 mode, u32 id, u16 value, u16 mask, u32 param_4); diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h index 5680558bf4a..07cdc6619a5 100644 --- a/include/d/actor/d_a_alink.h +++ b/include/d/actor/d_a_alink.h @@ -3,8 +3,6 @@ #include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" #include "JSystem/J3DGraphBase/J3DMatBlock.h" -#include "JSystem/J3DGraphBase/J3DMaterial.h" -#include "Z2AudioLib/Z2Creature.h" #include "Z2AudioLib/Z2WolfHowlMgr.h" #include "d/actor/d_a_player.h" #include "d/actor/d_a_tag_mmsg.h" @@ -228,6 +226,8 @@ public: /* 80140B88 */ daAlinkHIO_c(); /* 80140C10 */ virtual ~daAlinkHIO_c(); + void jumpStateUpdate(const cXyz*, const cXyz*, f32); + /* 0x04 */ u8 field_0x4[0xC - 0x4]; /* 0x0C */ daAlinkHIO_cut_c mCut; /* 0x0D */ u8 field_0xD[0x4B - 0xD]; diff --git a/include/m_Do/m_Do_mtx.h b/include/m_Do/m_Do_mtx.h index 7baa5592683..12e730c9a68 100644 --- a/include/m_Do/m_Do_mtx.h +++ b/include/m_Do/m_Do_mtx.h @@ -24,7 +24,7 @@ void mDoMtx_ZrotM(Mtx mtx, s16 z); bool mDoMtx_inverseTranspose(f32 const (*param_0)[4], f32 (*param_1)[4]); void mDoMtx_QuatConcat(Quaternion const* param_0, Quaternion const* param_1, Quaternion* param_2); -inline void mDoMtx_multVecSR(Mtx m, const Vec* src, Vec* dst) { +inline void mDoMtx_multVecSR(const Mtx m, const Vec* src, Vec* dst) { MTXMultVecSR(m, src, dst); } diff --git a/src/d/actor/d_a_alink.cpp b/src/d/actor/d_a_alink.cpp index 70b527ed487..e9ac90b4403 100644 --- a/src/d/actor/d_a_alink.cpp +++ b/src/d/actor/d_a_alink.cpp @@ -84,6 +84,23 @@ static const char l_sWShdArcName[] = "SWShd"; /* 80452C90-80452C98 001290 0006+02 7/7 0/0 0/0 .sdata2 l_arcName */ static const char l_arcName[] = "Alink"; +#if DEBUG +void daAlinkHIO_c::jumpStateUpdate(const cXyz* param_0, const cXyz* param_1, f32 param_2) { + char buf[68]; + + f32 xDiff = param_0->x - param_1->x; + f32 zDiff = param_0->z - param_1->z; + JORMContext* ctx = attachJORMContext(8); + ctx->startUpdateNode(this); + sprintf(buf, "水平距離 %-8.3f", JMAFastSqrt(xDiff * xDiff + zDiff * zDiff)); + ctx->updateLabel(2, 0x4000006, buf); + sprintf(buf, "最頂点 %-8.3f", param_2); + ctx->updateLabel(2, 0x4000007, buf); + ctx->endUpdateNode(); + releaseJORMContext(ctx); +} +#endif + /* 8009D884-8009D88C 0981C4 0008+00 0/0 0/0 13/13 .text getAlinkArcName__9daAlink_cFv */ const char* daAlink_c::getAlinkArcName() { return l_arcName; @@ -620,8 +637,6 @@ daAlink_procFunc daAlink_c::m_demoInitTable[] = { NULL, }; -#include "d/actor/d_a_alink_link.inc" - /* 8038FA48-8038FA54 01C0A8 000C+00 0/0 0/0 0/0 .rodata l_crawlStartFrontOffset */ static f32 const l_crawlStartFrontOffset[3] = {0.0f, 30.0f, 112.0f}; @@ -707,6 +722,10 @@ static s16 const l_insectNameList[12] = { PROC_Obj_Kam, PROC_Obj_Ten, PROC_Obj_Kat, PROC_Obj_Tombo, PROC_Obj_Ari, PROC_Obj_Kag, }; +#if DEBUG +f32 l_jumpTop; +#endif + /* 8038FBD4-8038FC24 01C234 0050+00 0/1 0/0 0/0 .rodata m_mainBckShield__9daAlink_c */ daAlink_BckData const daAlink_c::m_mainBckShield[20] = { {0x0025, 0x0025}, {0x0023, 0x0023}, {0x0012, 0x001B}, {0x0010, 0x001B}, {0x0021, 0x0021}, @@ -1258,6 +1277,10 @@ daAlink_FaceTexData const daAlink_c::m_faceTexDataTable[] = { 0x040D, 0x03A7, }; +static const Vec lit_5908 = { 0.0f, 0.0f, 0.0f }; + +#include "d/actor/d_a_alink_link.inc" + #include "d/actor/d_a_alink_cut.inc" #include "d/actor/d_a_alink_damage.inc" @@ -1908,7 +1931,7 @@ 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 */ -// NONMATCHING - stack issues +// NONMATCHING - 0x20 bytes missing from stack at 0x58 (release)/0x60 (debug) int daAlink_c::jointControll(int param_0) { csXyz sp18(0, 0, 0); int var_r27 = 0; @@ -1924,25 +1947,26 @@ int daAlink_c::jointControll(int param_0) { csXyz sp10(0, 1, 2); + J3DTransformInfo* oldTransInfo; 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; + oldTransInfo = field_0x2060->getOldFrameTransInfo(0); + oldTransInfo->mTranslate.x = 0.0f; + oldTransInfo->mTranslate.z = 0.0f; } else if (checkRootTransClearMode()) { - J3DTransformInfo* temp_r28 = field_0x2060->getOldFrameTransInfo(0); + oldTransInfo = field_0x2060->getOldFrameTransInfo(0); if (checkRootTransZClearMode()) { - temp_r28->mTranslate.z = field_0x3588.z; + oldTransInfo->mTranslate.z = field_0x3588.z; } if (checkRootTransXClearMode()) { - temp_r28->mTranslate.x = field_0x3588.x; + oldTransInfo->mTranslate.x = field_0x3588.x; } if (checkRootTransYClearMode()) { - temp_r28->mTranslate.y = field_0x33b0; + oldTransInfo->mTranslate.y = field_0x33b0; } } @@ -1957,7 +1981,7 @@ int daAlink_c::jointControll(int param_0) { 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); + sp18.set(0, field_0x3094[param_0 - 0x25], 0); sp10.set(2, 1, 0); } else if (param_0 == 2) { sp18.set(0, -field_0x2fec, 0); @@ -1989,19 +2013,19 @@ int daAlink_c::jointControll(int param_0) { } } 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; + oldTransInfo = field_0x2060->getOldFrameTransInfo(0); + oldTransInfo->mTranslate.x = 0.0f; + oldTransInfo->mTranslate.z = 0.0f; } else if (checkRootTransClearMode()) { - J3DTransformInfo* temp_r28_2 = field_0x2060->getOldFrameTransInfo(0); + oldTransInfo = field_0x2060->getOldFrameTransInfo(0); if (checkRootTransZClearMode()) { - temp_r28_2->mTranslate.z = field_0x3588.z; + oldTransInfo->mTranslate.z = field_0x3588.z; } if (checkRootTransXClearMode()) { - temp_r28_2->mTranslate.x = field_0x3588.x; + oldTransInfo->mTranslate.x = field_0x3588.x; } if (checkRootTransYClearMode()) { - temp_r28_2->mTranslate.y = field_0x33b0; + oldTransInfo->mTranslate.y = field_0x33b0; } } @@ -2038,7 +2062,7 @@ int daAlink_c::jointControll(int param_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) { @@ -2388,7 +2412,7 @@ void daAlink_c::setHatAngle() { sp90 = field_0x34e0 - sp90; mDoMtx_multVecSR(mMagneBootInvMtx, &sp90, &sp90); } - + field_0x3062 = sp84.atan2sX_Z(); s16 spE; @@ -2480,7 +2504,7 @@ void daAlink_c::setHatAngle() { cXyz sp6C; mDoMtx_stack_c::multVecSR(&cXyz::BaseY, &sp78); mDoMtx_stack_c::multVec(&cXyz::BaseX, &sp6C); - + s16 sp18; s16 sp16; @@ -2518,8 +2542,8 @@ void daAlink_c::setHatAngle() { } *temp_r29 = cLib_minMaxLimit((*temp_r29 + *sp2C), -0x3800, 0x3800); - sp10 = cLib_minMaxLimit(cM_atan2s(-((sp9C.x * var_f28) - (sp9C.z * var_f29)), JMAFastSqrt((temp_f27 * temp_f27) + (sp9C.y * sp9C.y))), -0x2800, 0x2800); - + sp10 = cLib_minMaxLimit(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 { @@ -2857,7 +2881,7 @@ cXyz* daAlink_c::getNeckAimPos(cXyz* param_0, int* param_1, int param_2) { } 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)); @@ -2877,7 +2901,7 @@ cXyz* daAlink_c::getNeckAimPos(cXyz* param_0, int* param_1, int param_2) { } 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))) { @@ -2922,7 +2946,7 @@ cXyz* daAlink_c::getNeckAimPos(cXyz* param_0, int* param_1, int param_2) { return sp1C; } } - + if (param_2 == 0) { return NULL; } @@ -2942,9 +2966,11 @@ cXyz* daAlink_c::getNeckAimPos(cXyz* param_0, int* param_1, int param_2) { // 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) { + s16 sp1A; + s16 sp18; 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; + sp16 -= (s16)0x8000; } cXyz sp28 = eyePos - field_0x34e0; @@ -2952,8 +2978,8 @@ s16 daAlink_c::getNeckAimAngle(cXyz* param_0, s16* param_1, s16* param_2, s16* p s16 sp14 = sp28.atan2sY_XZ(); s16 sp12 = sp28.atan2sX_Z(); - s16 sp1A = sp14 - field_0x3124; - s16 sp18 = (sp12 - sp16) - field_0x3126; + sp1A = sp14 - field_0x3124; + sp18 = (sp12 - sp16) - field_0x3126; if (checkModeFlg(0x08000100) && param_0 != NULL && !checkWolfHeadDamageAnime() && !checkDashDamageAnime()) { cXyz sp1C = *param_0 - field_0x34e0; @@ -3047,8 +3073,8 @@ s16 daAlink_c::getNeckAimAngle(cXyz* param_0, s16* param_1, s16* param_2, s16* p if (checkWolf() && *param_2 == 0) { *param_2 = field_0x2fec; } - - + + field_0x30d4 = *param_2; } @@ -3100,7 +3126,7 @@ void daAlink_c::setEyeMove(cXyz* param_0, s16 param_1, s16 param_2) { } 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); } @@ -3221,7 +3247,7 @@ bool daAlink_c::commonLineCheck(cXyz* i_startPos, cXyz* i_endPos) { * getMoveBGActorName__9daAlink_cFR13cBgS_PolyInfoi */ /** * Gets the Actor Name of a given polygon's associated actor - * + * * @param i_polyinf The polygon info to check * @param i_forceCheck Forces the check to happen regardless of if the poly is safe or not * @return The actor name of the actor associated with the polygon info. defaults to PROC_ALINK @@ -3354,7 +3380,7 @@ int daAlink_c::setArmMatrix() { for (int j = 0; j < 3; j++) { cMtx_copy(mpLinkModel->getAnmMtx(j + armJointTable[i]), var_r29->field_0x14[j]); } - + } if (!field_0x2060->getOldFrameFlg()) { @@ -3362,7 +3388,7 @@ int daAlink_c::setArmMatrix() { } var_r29 = mFootData2; - + cXyz sp2C; csXyz* sp18 = field_0x312a; csXyz* sp14 = field_0x3136; @@ -3422,7 +3448,7 @@ int daAlink_c::setFootMatrix() { for (int j = 0; j < 3; j++) { cMtx_copy(mpLinkModel->getAnmMtx(j + footJointTable[i]), var_r30->field_0x14[j]); } - + } if (!field_0x2060->getOldFrameFlg()) { @@ -3500,10 +3526,10 @@ int daAlink_c::setLegAngle(f32 param_0, daAlink_footData_c* param_1, s16* param_ 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; @@ -3525,7 +3551,7 @@ int daAlink_c::setLegAngle(f32 param_0, daAlink_footData_c* param_1, s16* param_ 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); @@ -3626,7 +3652,6 @@ int daAlink_c::setLegAngle(f32 param_0, daAlink_footData_c* param_1, s16* param_ } /* 800A3430-800A39B8 09DD70 0588+00 1/1 0/0 0/0 .text footBgCheck__9daAlink_cFv */ -// NONMATCHING - regalloc void daAlink_c::footBgCheck() { static Vec const localLeftFootOffset = {-3.0f, 13.0f, 0.0f}; static Vec const localRightFootOffset = {-3.0f, -13.0f, 0.0f}; @@ -3638,8 +3663,9 @@ void daAlink_c::footBgCheck() { cM3dGPla sp98; f32 sp30[2]; + int sp2C; u32 sp28 = checkModeFlg(1); - int i; + int i; // r28 f32* sp24; daAlink_footData_c* var_r29 = mFootData1; @@ -3653,7 +3679,9 @@ void daAlink_c::footBgCheck() { mDoMtx_multVec(mpLinkModel->getAnmMtx(0x19), &localRightFootOffset, &sp68[1]); mDoMtx_multVec(mpLinkModel->getAnmMtx(0x1A), &localRightToeOffset, &sp80[1]); - BOOL sp1C = (!mLinkAcch.ChkGroundHit() || checkMagneBootsOn()) || (mLinkAcch.ChkGroundHit() && mSinkShapeOffset < 0.0f) || checkModeFlg(0x78C52); + BOOL sp1C = !mLinkAcch.ChkGroundHit() || checkMagneBootsOn() || (mLinkAcch.ChkGroundHit() && mSinkShapeOffset < 0.0f) || checkModeFlg(0x78C52); + + f32 var_f30; for (i = 0; i < 2; i++, var_r29++, sp24++) { cXyz sp5C = (sp80[i] + sp68[i]) * 0.5f; @@ -3692,7 +3720,6 @@ void daAlink_c::footBgCheck() { } } - int sp2C; if (sp1C != 0) { sp2C = 2; } else { @@ -3702,7 +3729,7 @@ void daAlink_c::footBgCheck() { sp2C = 1; } - var_f31 = sp30[sp2C];; + var_f31 = sp30[sp2C]; } setSandShapeOffset(); @@ -3716,7 +3743,7 @@ void daAlink_c::footBgCheck() { } else { var_f31 -= current.pos.y; } - + setMatrixOffset(&field_0x2b94, var_f31); var_r29 = mFootData1; @@ -3727,7 +3754,7 @@ void daAlink_c::footBgCheck() { sp10 = 0; spE = 0; } else { - f32 var_f30 = sp30[i] - mpLinkModel->getBaseTRMtx()[1][3]; + var_f30 = sp30[i] - mpLinkModel->getBaseTRMtx()[1][3]; if (var_f30 > l_autoUpHeight) { var_f30 = l_autoUpHeight; } @@ -3740,15 +3767,15 @@ void daAlink_c::footBgCheck() { if ((sp10 * var_r29->field_0x6) < 0 && abs(sp10 - var_r29->field_0x6) >= 0x8000) { if (sp10 >= 0) { - sp10 -= 0x4000; + sp10 -= (s16)0x4000; } else { - sp10 += 0x4000; + sp10 += (s16)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]; @@ -3760,7 +3787,6 @@ void daAlink_c::footBgCheck() { } /* 800A39B8-800A3C8C 09E2F8 02D4+00 1/1 0/0 0/0 .text handBgCheck__9daAlink_cFv */ -// NONMATCHING - stack / regalloc void daAlink_c::handBgCheck() { static Vec const localHandPos[] = { {22.096375f, 5.4923248f, 0.0f}, @@ -3771,6 +3797,12 @@ void daAlink_c::handBgCheck() { return; } + cXyz* var_r28; + s16* var_r29; + int i; // r27 + daAlink_footData_c* var_r26 = mFootData2; + f32* var_r25; + if (mProcID == PROC_HANG_CLIMB) { if (mUnderFrameCtrl[0].getFrame() >= 9.0f) { setMatrixOffset(&field_0x2ba4, 0.0f); @@ -3778,19 +3810,18 @@ void daAlink_c::handBgCheck() { } } - cXyz sp38; - cXyz sp44; + cXyz sp38[2]; f32 sp20[2]; s16 sp18[2]; - cXyz* var_r28 = &sp38; - s16* var_r29 = sp18; - f32* var_r25 = sp20; + var_r28 = sp38; + var_r29 = sp18; + 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++) { + for (i = 0; i < 2; i++, var_r28++, var_r25++, var_r26++, var_r29++) { mDoMtx_stack_c::multVec(&localHandPos[i], var_r28); cXyz sp28(var_r28->x, var_r28->y + l_autoUpHeight, var_r28->z); @@ -3823,12 +3854,13 @@ void daAlink_c::handBgCheck() { setMatrixOffset(&field_0x2ba4, sp20[sp14] - current.pos.y); - daAlink_footData_c* var_r26 = mFootData2; - s16* var_r29_2 = sp18; + var_r28 = sp38; + var_r26 = mFootData2; + var_r29 = sp18; s16 spA; s16 sp8; - for (int i = 0; i < 2; i++, var_r29_2++, var_r26++) { + for (i = 0; i < 2; i++, var_r28++, var_r29++, 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; @@ -3837,7 +3869,7 @@ void daAlink_c::handBgCheck() { 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); + cLib_addCalcAngleS(&var_r26->field_0x2, *var_r29, 2, 0x1800, 0x10); } } @@ -4088,7 +4120,7 @@ int daAlink_c::createHeap() { if (mFaceBtpHeap.mallocBuffer() == NULL) { return 0; } - + if (mFaceBtkHeap.mallocBuffer() == NULL) { return 0; } @@ -4889,7 +4921,7 @@ void daAlink_c::setShapeAngleOnGround() { 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); @@ -4908,7 +4940,7 @@ void daAlink_c::setShapeAngleOnGround() { } mLinkGndChk.SetPos(&sp14); - + sp14.y = dComIfG_Bgsp().GroundCross(&mLinkGndChk); bool var_r29_2; if (-1000000000.0f != sp14.y) { @@ -4916,14 +4948,14 @@ void daAlink_c::setShapeAngleOnGround() { } 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(); @@ -5058,7 +5090,7 @@ void daAlink_c::setPolygonSpeed() { if (fopAcM_getWaterStream(¤t.pos, mLinkAcch.m_gnd, &sp18, &sp8, 0)) { onNoResetFlg3(FLG3_UNK_2000); } - + f32 var_f31; f32 var_f30; if (checkHeavyStateOn(1, 1)) { @@ -6195,7 +6227,7 @@ void daAlink_c::setAtCollision() { field_0xFB8.StartCAt(mIronBallCenterPos); field_0xFB8.OnAtSetBit(); } - + dComIfG_Ccsp()->Set(&field_0xFB8); g_dComIfG_gameInfo.play.mCcs.mMass_Mng.Set(&field_0xFB8, 1); @@ -6257,7 +6289,7 @@ void daAlink_c::setAtCollision() { mAtCyl.StartCAt(spC8); dComIfG_Ccsp()->Set(&mAtCyl); } - + if (!checkCutTypeNoBlur()) { m_swordBlur.initBlur(0.0f, 0, &mSwordTopPos, &field_0x3498, &field_0x34a4); return; @@ -6271,7 +6303,7 @@ void daAlink_c::setAtCollision() { mAtCyl.MoveCAt(spC8); dComIfG_Ccsp()->Set(&mAtCyl); } - + if (!checkCutTypeNoBlur()) { m_swordBlur.copyBlur(&mSwordTopPos, &field_0x3498, &field_0x34a4); return; @@ -6412,13 +6444,17 @@ void daAlink_c::setCollisionPos() { } /* 800ABDB8-800AC328 0A66F8 0570+00 1/1 0/0 0/0 .text setCollision__9daAlink_cFv */ -// NONMATCHING - regalloc / minor issues void daAlink_c::setCollision() { field_0x814.Move(); field_0x173c.Move(); dCcD_Cyl* var_r26 = field_0x850; - CcG_Tg_HitMark var_r3 = checkMagicArmorNoDamage() ? CcG_Tg_UNK_MARK_8 : CcG_Tg_UNK_MARK_6; + CcG_Tg_HitMark var_r3; + if (checkMagicArmorNoDamage()) { + var_r3 = CcG_Tg_UNK_MARK_8; + } else { + var_r3 = CcG_Tg_UNK_MARK_6; + } if (checkIronBallWaitAnime()) { field_0x2e44.offPassNum(0x11); @@ -6426,12 +6462,12 @@ void daAlink_c::setCollision() { field_0x2e44.onPassNum(0x11); } - for (int i = 0; i < 3; i++) { + int i; + for (i = 0; i < 3; i++, var_r26++) { var_r26->SetTgHitMark(var_r3); - var_r26++; } - dCcD_Cyl* var_r31 = field_0x850; + var_r26 = field_0x850; if (checkIronBallWaitAnime() || (checkPlayerGuardAndAttack() && !checkEndResetFlg1(ERFLG1_UNK_20))) { @@ -6442,35 +6478,31 @@ void daAlink_c::setCollision() { var_r27 = 0; } - for (int i = 0; i < 3; i++) { + for (i = 0; i < 3; i++, var_r26++) { if (var_r27) { - var_r31->OnTgSpShield(); - var_r31->OffTgShield(); + var_r26->OnTgSpShield(); + var_r26->OffTgShield(); } else { - var_r31->OffTgSpShield(); - var_r31->OnTgShield(); + var_r26->OffTgSpShield(); + var_r26->OnTgShield(); } if (checkHorseRide()) { - var_r31->OffTgShieldFrontRange(); + var_r26->OffTgShieldFrontRange(); } else { - var_r31->OnTgShieldFrontRange(); + var_r26->OnTgShieldFrontRange(); } - - var_r31++; } } else { - for (int i = 0; i < 3; i++) { - var_r31->OffTgShield(); - var_r31->OffTgSpShield(); + for (i = 0; i < 3; i++, var_r26++) { + var_r26->OffTgShield(); + var_r26->OffTgSpShield(); if (checkWolf()) { - var_r31->OffTgShieldFrontRange(); + var_r26->OffTgShieldFrontRange(); } else { - var_r31->OnTgShieldFrontRange(); + var_r26->OnTgShieldFrontRange(); } - - var_r31++; } } @@ -6485,7 +6517,7 @@ void daAlink_c::setCollision() { } if (mDamageTimer != 0 || checkModeFlg(8)) { - for (int i = 0; i < 3; i++) { + for (i = 0; i < 3; i++) { field_0x850[i].OffTgSetBit(); field_0x850[i].ResetTgHit(); } @@ -6495,7 +6527,7 @@ void daAlink_c::setCollision() { field_0xFB8.ResetTgHit(); } } else { - for (int i = 0; i < 3; i++) { + for (i = 0; i < 3; i++) { field_0x850[i].OnTgSetBit(); } @@ -6506,19 +6538,20 @@ void daAlink_c::setCollision() { mDoMtx_multVecSR(getShieldMtx(), &cXyz::BaseZ, &field_0x351c); - if (checkIronBallWaitAnime() || field_0x351c.absXZ() > 0.0099999998f) { + if (!checkIronBallWaitAnime() && field_0x351c.absXZ() > 0.0099999998f) { field_0x306c = field_0x351c.atan2sX_Z(); } else { field_0x306c = shape_angle.y + mBodyAngle.y; } + // fakematch, should be dComIfG_Ccsp() (same for rest of function) g_dComIfG_gameInfo.play.mCcs.Set(&field_0x850[0]); g_dComIfG_gameInfo.play.mCcs.SetMass(&field_0x850[0], 1); if (checkWolf()) { setWolfAtCollision(); - for (int i = 0; i < 3; i++) { + for (i = 1; i < 3; i++) { g_dComIfG_gameInfo.play.mCcs.Set(&field_0x850[i]); g_dComIfG_gameInfo.play.mCcs.SetMass(&field_0x850[i], 1); } @@ -6533,7 +6566,7 @@ void daAlink_c::setCollision() { g_dComIfG_gameInfo.play.mCcs.Set(&field_0xFB8); g_dComIfG_gameInfo.play.mCcs.SetMass(&field_0xFB8, 1); } else { - for (int i = 0; i < 3; i++) { + for (i = 1; i < 3; i++) { g_dComIfG_gameInfo.play.mCcs.Set(&field_0x850[i]); g_dComIfG_gameInfo.play.mCcs.SetMass(&field_0x850[i], 1); } @@ -6541,16 +6574,13 @@ void daAlink_c::setCollision() { setAtCollision(); } - dCcD_Cyl* var_r27_2 = field_0x850; + var_r26 = field_0x850; dCcD_Cyl* var_r26_6 = field_0xC04; - for (int i = 0; i < 3; i++) { - var_r26_6->SetC(var_r27_2->GetC()); - var_r26_6->SetR(var_r27_2->GetR()); - var_r26_6->SetH(var_r27_2->GetH()); - g_dComIfG_gameInfo.play.mCcs.Set(var_r26_6); - - var_r27_2++; - var_r26_6++; + for (i = 0; i < 3; i++, var_r26++, var_r26_6++) { + var_r26_6->SetC(var_r26->GetC()); + var_r26_6->SetR(var_r26->GetR()); + var_r26_6->SetH(var_r26->GetH()); + dComIfG_Ccsp()->Set(var_r26_6); } } @@ -6885,7 +6915,7 @@ void daAlink_c::commonSingleAnime(J3DAnmTransform* param_0, J3DAnmTransform* par } 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 { @@ -7288,7 +7318,7 @@ void daAlink_c::setBlendMoveAnime(f32 param_0) { BOOL sp20 = checkBootsMoveAnime(1); f32 var_f29; - + if (sp20) { var_f29 = 1.0f; sp2C = 1.0f; @@ -7491,7 +7521,7 @@ void daAlink_c::setBlendMoveAnime(f32 param_0) { } 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); @@ -7504,7 +7534,7 @@ void daAlink_c::setBlendMoveAnime(f32 param_0) { } 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)) { @@ -7744,7 +7774,7 @@ void daAlink_c::setBlendAtnMoveAnime(f32 param_0) { } else { var_r29 = ANM_ATN_RUN_RIGHT; } - + setDoubleAnime(1.0f, var_f30, var_f30, var_r29, var_r29, 3, param_0); mSpeedModifier = 0.0f; } @@ -7832,7 +7862,7 @@ void daAlink_c::setBlendAtnBackMoveAnime(f32 param_0) { var_r27 = ANM_ATN_BACK_WALK; var_r29 = ANM_ATN_BACK_RUN; } - + f32 var_f30; f32 temp_f1 = getMoveGroundAngleSpeedRate(); @@ -8231,7 +8261,7 @@ BOOL daAlink_c::getWallEdgePos(cXyz const& param_0, cM3dGPla* i_planeA, cM3dGPla normal.normalizeZP(); cM3dGPla planeC(&normal, -((normal.z * param_0.z) + ((normal.x * param_0.x) + (normal.y * param_0.y)))); - + return cM3d_3PlaneCrossPos(*i_planeA, *i_planeB, planeC, o_outVec); } @@ -8294,14 +8324,14 @@ void daAlink_c::setFrontWallType() { } BOOL sp4C = 0; - + for (i = 0; i < 3; i++) { chk_start_pos.y = sp50 + mAcchCir[i].GetWallH(); chk_end_pos.y = chk_start_pos.y; if (commonLineCheck(&chk_start_pos, &chk_end_pos)) { 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.ChkGroundHit() && !checkModeFlg(0x70C52)) || mProcID == PROC_HOOKSHOT_FLY) && var_r27 == 0) { @@ -8313,7 +8343,7 @@ void daAlink_c::setFrontWallType() { sp58 = 1; break; } - + i = -1; } else if (!checkWolf() || ((i != 0 && i != 1) || var_r27 != 7)) { break; @@ -8600,7 +8630,7 @@ void daAlink_c::setFrontWallType() { f32 sp18 = 36.5f; chk_start_pos.set(wall_edge_pos.x + (10.0f * linchk_tri.mNormal.x), wall_edge_pos.y + l_autoUpHeight, wall_edge_pos.z + (10.0f * linchk_tri.mNormal.z)); chk_end_pos.set(wall_edge_pos.x - (linchk_tri.mNormal.x * sp18), chk_start_pos.y, wall_edge_pos.z - (linchk_tri.mNormal.z * sp18)); - + if (commonLineCheck(&chk_start_pos, &chk_end_pos)) { return; } @@ -9748,7 +9778,7 @@ void daAlink_c::setSpeedAndAngleNormal() { return; } } - + if ((speedF / field_0x594) <= daAlinkHIO_move_c0::m.mSlideThresholdSpeed) { cLib_addCalcAngleS(¤t.angle.y, field_0x2fe2, daAlinkHIO_move_c0::m.mTurnAngleRate, daAlinkHIO_move_c0::m.mMaxTurnAngle, daAlinkHIO_move_c0::m.mMinTurnAngle); return; @@ -9805,7 +9835,7 @@ void daAlink_c::setSpeedAndAngleNormal() { if (!checkAttentionLock() && mProcID != PROC_MOVE_TURN && checkInputOnR()) { s16 sp8 = shape_angle.y; cLib_addCalcAngleS(&shape_angle.y, field_0x2fe2, daAlinkHIO_move_c0::m.mTurnAngleRate, daAlinkHIO_move_c0::m.mMaxTurnAngle * 2, daAlinkHIO_move_c0::m.mMinTurnAngle * 2); - + int temp_r23 = (s16)(sp8 - current.angle.y) * (s16)(shape_angle.y - current.angle.y); if (temp_r23 <= 0 && temp_r23 >= -0x1000000) { shape_angle.y = current.angle.y; @@ -9852,7 +9882,7 @@ void daAlink_c::setSpeedAndAngleAtn() { 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; @@ -9901,14 +9931,14 @@ void daAlink_c::setSpeedAndAngleAtn() { } else { var_r28 = field_0x2fe2; } - + if (checkZeroSpeedF()) { current.angle.y = var_r28; } - + s16 temp_r23 = current.angle.y; cLib_addCalcAngleS(¤t.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 { @@ -10051,7 +10081,6 @@ f32 daAlink_c::getFrontRollRate() { /* 800B4B7C-800B5284 0AF4BC 0708+00 2/2 0/0 0/0 .text decideCommonDoStatus__9daAlink_cFv */ -// NONMATCHING - almost, small branch issues void daAlink_c::decideCommonDoStatus() { if (!checkFmChainGrabAnime() && dComIfGp_getDoStatus() == 0) { bool temp_r3 = checkStageName("R_SP127"); @@ -10160,7 +10189,7 @@ void daAlink_c::decideCommonDoStatus() { setDoStatus(0x12); } - if ((((checkMagneBootsOn() || checkIronBallWaitAnime() || checkNotJumpSinkLimit()) || + if ((((checkMagneBootsOn() || checkIronBallWaitAnime() || checkNotJumpSinkLimit()) && (dComIfGp_getDoStatus() == 0x79 || dComIfGp_getDoStatus() == 0x86 || dComIfGp_getDoStatus() == 0x30 || dComIfGp_getDoStatus() == 0x77 || dComIfGp_getDoStatus() == 0x19)) || @@ -10834,7 +10863,7 @@ BOOL daAlink_c::checkFrontWallTypeAction() { /* 800B6F28-800B7090 0B1868 0168+00 3/3 0/0 0/0 .text checkItemActionInitStart__9daAlink_cFv */ int daAlink_c::checkItemActionInitStart() { if (checkBowAndSlingItem(mEquipItem)) { - return checkNextActionBow(); + return checkNextActionBow(); } else if (mEquipItem == fpcNm_ITEM_BOOMERANG) { return checkNextActionBoomerang(); } else if (mEquipItem == fpcNm_ITEM_COPY_ROD) { @@ -11544,7 +11573,7 @@ BOOL daAlink_c::checkItemAction() { return procCutTurnChargeInit(); } - + return checkCutAction(); } } else if (checkFishingRodItem(mEquipItem) && mLinkAcch.ChkGroundHit()) { @@ -12658,7 +12687,7 @@ void daAlink_c::setFootSpeed() { 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; @@ -13123,7 +13152,7 @@ void daAlink_c::autoGroundHit() { } else if (!checkModeFlg(0x70C52) || (checkBoardRide() && !checkModeFlg(2)) || checkModeFlg(0x40)) { cM3dGPla sp74; f32 temp_f30 = mLinkAcch.GetGroundH() - current.pos.y; - + if (!mLinkAcch.ChkGroundHit()) { if (checkBoardRide() && shape_angle.x < 0) { return; @@ -13342,12 +13371,6 @@ void daAlink_c::checkRoofRestart() { } } -/* 80392094-80392094 01E6F4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_803925BA = "F_SP114"; -#pragma pop - /* 800BE3E4-800BE9D4 0B8D24 05F0+00 1/1 0/0 0/0 .text checkRestartRoom__9daAlink_cFv */ BOOL daAlink_c::checkRestartRoom() { if (checkMagneBootsOn()) { @@ -13381,7 +13404,7 @@ BOOL daAlink_c::checkRestartRoom() { if ((field_0x3174 != 10 && ((temp_r28 && checkModeFlg(0x40000)) || (!temp_r28 && (checkModeFlg(2) || checkNoResetFlg3(FLG3_UNK_80000)) && mProcID != PROC_HOOKSHOT_FLY && !checkModeFlg(0x800) && var_f31 > var_f30))) || (field_0x3174 == 10 && var_f31 <= 3000.0f) || (checkSpinnerRide() && mRideAcKeep.getActor() != NULL && ((daSpinner_c*)mRideAcKeep.getActor())->checkGroundHit()) || (mLinkAcch.ChkGroundHit() && mProcID != PROC_HOOKSHOT_FLY)) { int var_r29; s8 var_r27; - + if (field_0x3174 == 4 || field_0x3174 == 10) { if (checkCoachGuardGame()) { var_r29 = 0; @@ -13495,7 +13518,7 @@ int daAlink_c::checkSceneChange(int exitID) { if (checkNoResetFlg0(FLG0_UNK_4000)) { return 1; } - + if (checkHorseRide()) { if (dComIfG_Bgsp().GetHorseNoEntry(mLinkAcch.m_gnd)) { return 0; @@ -14708,7 +14731,7 @@ void daAlink_c::onFrollCrashFlg(u8 param_0, BOOL param_1) { * changeWarpMaterial__9daAlink_cFQ29daAlink_c21daAlink_WARP_MAT_MODE */ void daAlink_c::changeWarpMaterial(daAlink_c::daAlink_WARP_MAT_MODE i_matMode) { void (*mat_func_tbl[])(J3DModelData*) = {dRes_info_c::onWarpMaterial, dRes_info_c::offWarpMaterial}; - + void (*mat_func)(J3DModelData*) = mat_func_tbl[i_matMode]; mat_func(field_0x064C); mat_func(mSwordModel->getModelData()); @@ -14736,7 +14759,6 @@ void daAlink_c::changeWarpMaterial(daAlink_c::daAlink_WARP_MAT_MODE i_matMode) { /* 800C1F6C-800C2DA4 0BC8AC 0E38+00 229/229 0/0 0/0 .text * commonProcInit__9daAlink_cFQ29daAlink_c12daAlink_PROC */ -// almost, some regalloc void daAlink_c::commonProcInit(daAlink_c::daAlink_PROC i_procID) { if (mProcID == PROC_TOOL_DEMO) { speed.y = 0.0f; @@ -14806,7 +14828,7 @@ void daAlink_c::commonProcInit(daAlink_c::daAlink_PROC i_procID) { } else if (mProcID == PROC_WOLF_BACKJUMP) { resetWolfBallGrab(); } else if (mProcID == PROC_CHAIN_STRONG_PULL) { - mNowAnmPackUpper[2].setRatio(0.0f); + mNowAnmPackUpper[2].setRatio(1.0f); } else if (mProcID == PROC_SCREAM_WAIT || mProcID == PROC_WOLF_SCREAM_WAIT || mProcID == PROC_ELEC_DAMAGE) { @@ -14819,16 +14841,29 @@ void daAlink_c::commonProcInit(daAlink_c::daAlink_PROC i_procID) { cancelFmChainGrabFromOut(); } - BOOL prev_proc_fishcast = mProcID == PROC_FISHING_CAST ? TRUE : FALSE; + BOOL prev_proc_fishcast; + if (mProcID == PROC_FISHING_CAST) { + prev_proc_fishcast = TRUE; + } else { + prev_proc_fishcast = FALSE; + } offNoResetFlg0(FLG0_UNK_2); - u32 prev_flg_40000; - u32 prev_flg_400; BOOL prev_flg_2; BOOL prev_flg_20000; + u32 prev_flg_40000; + u32 prev_flg_400; - prev_flg_20000 = checkModeFlg(0x20000) != 0 ? TRUE : FALSE; - prev_flg_2 = !checkModeFlg(0x2) ? TRUE : FALSE; + if (checkModeFlg(0x20000) != 0) { + prev_flg_20000 = TRUE; + } else { + prev_flg_20000 = FALSE; + } + if (!checkModeFlg(0x2)) { + prev_flg_2 = TRUE; + } else { + prev_flg_2 = FALSE; + } prev_flg_40000 = checkModeFlg(0x40000); prev_flg_400 = checkModeFlg(0x400); @@ -14953,6 +14988,8 @@ void daAlink_c::commonProcInit(daAlink_c::daAlink_PROC i_procID) { field_0x2f99 = 0x50; } + int i; + if (checkModeFlg(MODE_NO_COLLISION) || mProcID == PROC_STEP_MOVE || mProcID == PROC_WOLF_TAG_JUMP) { mLinkAcch.OffLineCheck(); mLinkAcch.OnLineCheckNone(); @@ -14962,13 +14999,13 @@ void daAlink_c::commonProcInit(daAlink_c::daAlink_PROC i_procID) { if (!checkWolf()) { daAlink_footData_c* foot_data = mFootData2; - for (int i = 0; i < 2; i++, foot_data++) { + for (i = 0; i < 2; i++, foot_data++) { foot_data->field_0x6 = 0; foot_data->field_0x4 = 0; foot_data->field_0x2 = 0; } - field_0x2ba4 = 0.0f; + field_0x2ba4 = 0.0f; } } @@ -14988,7 +15025,7 @@ void daAlink_c::commonProcInit(daAlink_c::daAlink_PROC i_procID) { mSight.offLockFlg(); if (mWolfLockNum != 0 && mProcID != PROC_WOLF_LOCK_ATTACK_TURN && mProcID != PROC_WOLF_LOCK_ATTACK) { - for (int i = 0; i < mWolfLockNum; i++) { + for (i = 0; i < mWolfLockNum; i++) { mWolfLockAcKeep[i].clearData(); } mWolfLockNum = 0; @@ -15048,6 +15085,12 @@ void daAlink_c::commonProcInit(daAlink_c::daAlink_PROC i_procID) { mFallHeight = mLastJumpPos.y; field_0x33c8 = mLastJumpPos.y; } +#if DEBUG + else if (!prev_flg_2 && !checkModeFlg(MODE_JUMP)) { + mpHIO->jumpStateUpdate(&mLastJumpPos, ¤t.pos, l_jumpTop); + l_jumpTop = 0.0f; + } +#endif if (!checkModeFlg(MODE_RIDING) && prev_flg_400) { rideGetOff(); @@ -16993,7 +17036,6 @@ int daAlink_c::procSmallJumpInit(int param_0) { } /* 800C72D4-800C74D4 0C1C14 0200+00 1/0 0/0 0/0 .text procSmallJump__9daAlink_cFv */ -// NONMATCHING - one out of order block with sqrt int daAlink_c::procSmallJump() { if (checkModeFlg(2)) { if (checkCanoeJumpRide()) { @@ -17012,9 +17054,9 @@ int daAlink_c::procSmallJump() { mNormalSpeed = daAlinkHIO_smallJump_c0::m.mSpeedH; if (checkHeavyStateOn(1, 1) && !checkNoResetFlg0(FLG0_UNDERWATER)) { - speed.y = JMAFastSqrt(2.0f * ((daAlinkHIO_smallJump_c0::m.mTargetHeightOffset + - (field_0x3478 - current.pos.y)) * - -(gravity * 2.25f))); + f32 temp = daAlinkHIO_smallJump_c0::m.mTargetHeightOffset + + (field_0x3478 - current.pos.y); + speed.y = JMAFastSqrt(2.0f * (temp * -(gravity * 2.25f))); } else { speed.y = JMAFastSqrt(2.0f * (-gravity * (daAlinkHIO_smallJump_c0::m.mTargetHeightOffset + @@ -18666,7 +18708,7 @@ int daAlink_c::initShadowScaleLight() { cXyz sp20(tevStr.mLightPosWorld.x - field_0x3834.x, tevStr.mLightPosWorld.y - field_0x3454, tevStr.mLightPosWorld.z - field_0x3834.z); field_0x2ff6 = sp20.atan2sX_Z(); - + fopAc_ac_c* temp_r29 = fopAcM_getTalkEventPartner(this); f32 var_f30; @@ -18689,7 +18731,7 @@ int daAlink_c::initShadowScaleLight() { } else { var_f31 = 120.0f; } - + cXyz sp14(current.pos.x, current.pos.y + var_f30, current.pos.z); cXyz sp8(sp14.x + ((30.0f + var_f31) * cM_ssin(shape_angle.y)), sp14.y, sp14.z + ((30.0f + var_f31) * cM_scos(shape_angle.y))); @@ -18713,8 +18755,8 @@ int daAlink_c::initShadowScaleLight() { field_0x375c.x = current.pos.x - (var_f31 * temp_f29); field_0x375c.z = current.pos.z - (var_f31 * temp_f28); } else { - field_0x375c.x = (current.pos.x - (temp_f29 * -30.0f)) - (temp_f28 * 65.0f); - field_0x375c.z = (current.pos.z - (temp_f28 * -30.0f)) + (temp_f29 * 65.0f); + field_0x375c.x = current.pos.x - (-30.0f * temp_f29) - (65.0f * temp_f28); + field_0x375c.z = current.pos.z - (-30.0f * temp_f28) + (65.0f * temp_f29); } if (checkReinRide()) { @@ -18899,7 +18941,7 @@ void daAlink_c::shadowDraw() { if (checkNoResetFlg2(FLG2_UNK_1)) { dComIfGd_addRealShadow(var_r29, mpKanteraModel); } - + if (checkEquipHeavyBoots()) { for (int i = 0; i < 2; i++) { dComIfGd_addRealShadow(var_r29, mpLinkBootModels[i]); diff --git a/src/d/actor/d_a_alink_bottle.inc b/src/d/actor/d_a_alink_bottle.inc index 5f5abbddb3c..63741311bfa 100644 --- a/src/d/actor/d_a_alink_bottle.inc +++ b/src/d/actor/d_a_alink_bottle.inc @@ -812,9 +812,3 @@ int daAlink_c::procBottleGet() { return 1; } - -/* 80110648-80110654 10AF88 000C+00 0/0 1/0 0/0 .text Insect_Release__9dInsect_cFv */ -// asm void dInsect_c::Insect_Release() { -extern "C" void Insect_Release__9dInsect_cFv() { - // NONMATCHING -} diff --git a/src/d/actor/d_a_alink_crawl.inc b/src/d/actor/d_a_alink_crawl.inc index 5b77fb69211..9f13fb2db3b 100644 --- a/src/d/actor/d_a_alink_crawl.inc +++ b/src/d/actor/d_a_alink_crawl.inc @@ -669,9 +669,8 @@ int daAlink_c::procCrawlMove() { } /* 800F99FC-800F9ABC 0F433C 00C0+00 1/1 0/0 0/0 .text procCrawlAutoMoveInit__9daAlink_cFiP4cXyz */ -// NONMATCHING - extrwi vs rlwinm int daAlink_c::procCrawlAutoMoveInit(int param_0, cXyz* param_1) { - BOOL var_r30 = dComIfGp_checkPlayerStatus0(0, 0x2000); + BOOL var_r30 = dComIfGp_checkPlayerStatus0(0, 0x2000) != 0 ? TRUE : FALSE; commonProcInit(PROC_CRAWL_AUTO_MOVE); field_0x37c8 = *param_1; field_0x33cc = 1.0f; diff --git a/src/d/actor/d_a_alink_demo.inc b/src/d/actor/d_a_alink_demo.inc index 5d8438cf04f..f62a2e24a63 100644 --- a/src/d/actor/d_a_alink_demo.inc +++ b/src/d/actor/d_a_alink_demo.inc @@ -1338,10 +1338,9 @@ void daAlink_c::setHighModelBck(mDoExt_bckAnm* i_bck, u16 i_anmID) { /* 801190A4-80119134 1139E4 0090+00 1/1 0/0 0/0 .text setHighModelFaceBtk__9daAlink_cFUs */ -// NONMATCHING - extra mr void daAlink_c::setHighModelFaceBtk(u16 i_anmID) { - J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectIDRes( - dStage_roomControl_c::getDemoArcName(), i_anmID); + J3DAnmTextureSRTKey* btk = static_cast(dComIfG_getObjectIDRes( + dStage_roomControl_c::getDemoArcName(), i_anmID)); if (btk && field_0x068c != btk) { btk->searchUpdateMaterialID(mpDemoFCTongueModel->getModelData()); @@ -1356,8 +1355,8 @@ void daAlink_c::setHighModelFaceBtk(u16 i_anmID) { * setDemoBrk__9daAlink_cFPP15J3DAnmTevRegKeyP8J3DModelUs */ // NONMATCHING - extra mr void daAlink_c::setDemoBrk(J3DAnmTevRegKey** param_0, J3DModel* param_1, u16 i_anmID) { - J3DAnmTevRegKey* brk = - (J3DAnmTevRegKey*)dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), i_anmID); + J3DAnmTevRegKey* brk = static_cast(dComIfG_getObjectIDRes( + dStage_roomControl_c::getDemoArcName(), i_anmID)); if (brk != NULL && *param_0 != brk) { brk->searchUpdateMaterialID(param_1->getModelData()); diff --git a/src/d/actor/d_a_alink_effect.inc b/src/d/actor/d_a_alink_effect.inc index 413585cfcf3..fbf5a070eca 100644 --- a/src/d/actor/d_a_alink_effect.inc +++ b/src/d/actor/d_a_alink_effect.inc @@ -958,7 +958,6 @@ static const u16 effNameWater[] = { }; /* 80122F78-801233A4 11D8B8 042C+00 1/1 0/0 0/0 .text setCutTurnEffect__9daAlink_cFv */ -// NONMATCHING - should match when data order is fixed void daAlink_c::setCutTurnEffect() { static Vec const waterEffScale = {1.5f, 1.5f, 1.5f}; @@ -1956,14 +1955,15 @@ static void setBezierPos(cXyz const* start, cXyz const* control_1, cXyz const* c /* 8012589C-80125B0C 1201DC 0270+00 1/1 0/0 0/0 .text * copyBlur__14daAlink_blur_cFPC4cXyzPC4cXyzPC4cXyz */ -// NONMATCHING void daAlink_blur_c::copyBlur(cXyz const* param_0, cXyz const* param_1, cXyz const* param_2) { - for (int i = 59 - 10; i >= 0; i--) { - field_0x38[i + 10] = field_0x38[i]; - field_0x308[i + 10] = field_0x308[i]; + s32 temp = 10; + + for (int i = 59 - temp; i >= 0; i--) { + field_0x38[i + temp] = field_0x38[i]; + field_0x308[i + temp] = field_0x308[i]; } - f32 temp_f30 = 1.0f / 10; + f32 temp_f30 = 1.0f / temp; f32 var_f31 = 0.0f; cXyz sp4C; @@ -1971,14 +1971,14 @@ void daAlink_blur_c::copyBlur(cXyz const* param_0, cXyz const* param_1, cXyz con cXyz sp64; cXyz sp70; - sp58 = field_0x308[10] + (field_0x2c * 30.0f); + sp58 = field_0x308[temp] + (field_0x2c * 30.0f); sp4C = *param_1 + (*param_2 * -30.0f); - sp70 = field_0x38[10] + (field_0x2c * 60.0f); + sp70 = field_0x38[temp] + (field_0x2c * 60.0f); sp64 = *param_0 + (*param_2 * -60.0f); - for (int i = 0; i < 10; i++) { - setBezierPos(param_1, &field_0x308[10], &sp4C, &sp58, var_f31, &field_0x308[i]); - setBezierPos(param_0, &field_0x38[10], &sp64, &sp70, var_f31, &field_0x38[i]); + for (int i = 0; i < temp; i++) { + setBezierPos(param_1, &field_0x308[temp], &sp4C, &sp58, var_f31, &field_0x308[i]); + setBezierPos(param_0, &field_0x38[temp], &sp64, &sp70, var_f31, &field_0x38[i]); field_0x38[i] += (field_0x38[i] - field_0x308[i]) * field_0x24; var_f31 += temp_f30; diff --git a/src/d/actor/d_a_alink_horse.inc b/src/d/actor/d_a_alink_horse.inc index 328d28df959..5baccadedb1 100644 --- a/src/d/actor/d_a_alink_horse.inc +++ b/src/d/actor/d_a_alink_horse.inc @@ -685,9 +685,12 @@ BOOL daAlink_c::checkHorseServiceWaitAnime() { } /* 800EDEEC-800EE64C 0E882C 0760+00 1/1 0/0 0/0 .text setSyncHorse__9daAlink_cFi */ +// NONMATCHING - missing stack space at 0x10 int daAlink_c::setSyncHorse(int param_0) { daHorse_c* horse_p = dComIfGp_getHorseActor(); - BOOL mode_1 = checkModeFlg(1); + daPy_frameCtrl_c* sp24 = &mUnderFrameCtrl[0]; + daPy_frameCtrl_c* sp20 = &mUnderFrameCtrl[2]; + BOOL mode_1 = checkModeFlg(1) ? TRUE : FALSE; setSyncHorsePos(); if (checkHorseSpecialProc()) { @@ -702,12 +705,14 @@ int daAlink_c::setSyncHorse(int param_0) { field_0x3004 = 0; } else if (checkInputOnR() && horse_p->checkWait() && mProcID != PROC_HORSE_SUBJECTIVITY && mProcID != PROC_HORSE_CUT_TURN && sp8[0] != ANM_HORSE_TURN_LEFT && - sp8[0] != ANM_HORSE_TURN_RIGHT && field_0x3004 == 0 && - getDirectionFromShapeAngle() == DIR_FORWARD) - { - field_0x3004 = daAlinkHIO_horse_c0::m.mNoWalkTime; - setSingleAnimeParam(ANM_WSTARTH, &daAlinkHIO_horse_c0::m.mWalkAnm); - offNoResetFlg1(FLG1_UNK_1000); + sp8[0] != ANM_HORSE_TURN_RIGHT && field_0x3004 == 0) { + s32 dir = getDirectionFromShapeAngle(); + if (dir == DIR_FORWARD) + { + field_0x3004 = daAlinkHIO_horse_c0::m.mNoWalkTime; + setSingleAnimeParam(ANM_WSTARTH, &daAlinkHIO_horse_c0::m.mWalkAnm); + offNoResetFlg1(FLG1_UNK_1000); + } } } @@ -750,15 +755,17 @@ int daAlink_c::setSyncHorse(int param_0) { if (doTrigger()) { field_0x3004 = daAlinkHIO_horse_c0::m.mNoWalkTime; + daAlink_ANM anm; const daAlinkHIO_anm_c* anmparam_p = &daAlinkHIO_horse_c0::m.mWhipAnm; + anm = ANM_HORSE_LASH; if (mProcID != PROC_HORSE_CUT && mProcID != PROC_HORSE_CUT_TURN && mProcID != PROC_HORSE_CUT_CHARGE_READY) { - setSingleAnimeParam(ANM_HORSE_LASH, anmparam_p); + setSingleAnimeParam(anm, anmparam_p); } - setUnderAnimeParam(getMainBckData(ANM_HORSE_LASH)->m_underID, UNDER_2, + setUnderAnimeParam(getMainBckData(anm)->m_underID, UNDER_2, &daAlinkHIO_horse_c0::m.mWhipAnm); onNoResetFlg1(FLG1_UNK_1000); horse_p->offPlayerBackRideLash(); @@ -774,15 +781,15 @@ int daAlink_c::setSyncHorse(int param_0) { } if ((checkHorseWalkStartAnm() && - mUnderFrameCtrl[0].getFrame() > daAlinkHIO_horse_c0::m.mHorseWalkStartFrame) || - (checkHorseWaitLashAnime() && mUnderFrameCtrl[2].getFrame() > 13.0f)) + sp24->getFrame() > daAlinkHIO_horse_c0::m.mHorseWalkStartFrame) || + (checkHorseWaitLashAnime() && sp20->getFrame() > 13.0f)) { horse_p->onMoveAccept(); } if (checkNoResetFlg1(FLG1_UNK_1000) && - ((checkHorseUnderDashStartAnime() && mUnderFrameCtrl[2].getFrame() > 13.0f) || - (checkHorseUnderLashAnime() && mUnderFrameCtrl[2].getFrame() > 13.0f))) + ((checkHorseUnderDashStartAnime() && sp20->getFrame() > 13.0f) || + (checkHorseUnderLashAnime() && sp20->getFrame() > 13.0f))) { offNoResetFlg1(FLG1_UNK_1000); horse_p->onPlayerLash(); @@ -1649,7 +1656,7 @@ int daAlink_c::procHorseGetOff() { if (field_0x2fc0 == 0) { field_0x2fab &= ~0x2; } else { - field_0x2fab &= ~0x1; + field_0x2fab &= (u8)~0x1; } } } else if (!(temp_r29->getFrame() >= 24.0f)) { @@ -1659,7 +1666,7 @@ int daAlink_c::procHorseGetOff() { if (field_0x2fc0 == 0) { field_0x2fab &= ~0x2; } else { - field_0x2fab &= ~0x1; + field_0x2fab &= (u8)~0x1; } } } diff --git a/src/d/actor/d_a_alink_ironball.inc b/src/d/actor/d_a_alink_ironball.inc index 81d45e5128e..8570933e961 100644 --- a/src/d/actor/d_a_alink_ironball.inc +++ b/src/d/actor/d_a_alink_ironball.inc @@ -214,7 +214,6 @@ int daAlink_c::setIronBallGroundVec(cXyz const* param_0, cXyz* param_1) { /* 80112E7C-80113CA0 10D7BC 0E24+00 1/1 0/0 0/0 .text setIronBallChainPos__9daAlink_cFv */ -// NONMATCHING - alot of regalloc void daAlink_c::setIronBallChainPos() { cXyz sp2A4; cXyz sp298; @@ -225,9 +224,13 @@ void daAlink_c::setIronBallChainPos() { *(&mIronBallChainPos[mItemMode] + 1) = mHeldItemRootPos; *(&mIronBallChainAngle[mItemMode] + 1) = field_0x316c; - cXyz* var_r29; cXyz* var_r27; + cXyz* var_r29; cXyz* var_r26; + int i; + csXyz* sp3C; + int sp38; + int sp34; if (mItemVar0.field_0x3018 == 2) { var_r29 = mIronBallChainPos + 1; @@ -237,7 +240,7 @@ void daAlink_c::setIronBallChainPos() { sp2A4 = mHookshotTopPos - *mIronBallChainPos; sp2A4.normalizeZP(); - for (int i = 0; i < mItemMode; i++, var_r29++, var_r26++) { + for (i = 0; i < mItemMode; i++, var_r29++, var_r26++) { sp28C = *var_r29; *var_r29 = *var_r27 + (sp2A4 * 10.0f); @@ -249,10 +252,10 @@ void daAlink_c::setIronBallChainPos() { var_r26 = &field_0x3848[mItemMode]; var_r27 = var_r29 + 1; - int sp38 = mItemMode * daAlinkHIO_ironBall_c0::m.mReturnChainRate; - int sp34 = sp38; + sp38 = mItemMode * daAlinkHIO_ironBall_c0::m.mReturnChainRate; + sp34 = sp38; - for (int i = mItemMode; i >= 0; i--, var_r29--, var_r26--) { + for (i = mItemMode; i >= 0; i--, var_r29--, var_r26--) { sp2A4 = (*var_r29 - *var_r27) + *var_r26; if (i == 0) { @@ -285,7 +288,7 @@ void daAlink_c::setIronBallChainPos() { var_r27 = var_r29 - 1; var_r26 = field_0x3848 + 1; - for (int i = 0; i < mItemMode; i++, var_r29++, var_r26++) { + for (i = 0; i < mItemMode; i++, var_r29++, var_r26++) { sp28C = *var_r29; sp2A4 = (*var_r29 - *var_r27) + *var_r26; sp2A4.y += daAlinkHIO_ironBall_c0::m.mChainGravity; @@ -308,7 +311,6 @@ void daAlink_c::setIronBallChainPos() { } else if (mItemVar0.field_0x3018 == 1 || mItemVar0.field_0x3018 == 3 || mItemVar0.field_0x3018 == 4) { daPy_frameCtrl_c* sp30 = &mUnderFrameCtrl[0]; - int sp38; if (mItemVar0.field_0x3018 == 1) { f32 temp_f25 = sp30->getEnd() - 13.0f; f32 temp_f29 = (sp30->getFrame() - 13.0f) / temp_f25; @@ -337,7 +339,7 @@ void daAlink_c::setIronBallChainPos() { var_r26 = &field_0x3848[mItemMode]; var_r27 = var_r29 + 1; - for (int i = mItemMode; i >= 0; i--, var_r29--, var_r26--) { + for (i = mItemMode; i >= 0; i--, var_r29--, var_r26--) { sp28C = *var_r29; sp2A4 = (*var_r29 - *var_r27) + *var_r26; @@ -381,12 +383,12 @@ void daAlink_c::setIronBallChainPos() { } else { var_f30 = daAlinkHIO_ironBall_c0::m.mChainGravity; } - + var_r29 = mIronBallChainPos + 1; var_r27 = var_r29 - 1; var_r26 = field_0x3848 + 1; - for (int i = 0; i < mItemMode; i++, var_r29++, var_r26++) { + for (i = 0; i < mItemMode; i++, var_r29++, var_r26++) { sp2A4 = (*var_r29 - *var_r27) + *var_r26; sp2A4.y += var_f30; sp2A4.normalizeZP(); @@ -405,7 +407,7 @@ void daAlink_c::setIronBallChainPos() { f32 temp_f28 = temp_f31 * cM_scos(shape_angle.y); temp_f31 *= cM_ssin(shape_angle.y); - for (int i = mItemMode; i > 0; i--, var_r29--, var_r26--) { + for (i = mItemMode; i > 0; i--, var_r29--, var_r26--) { sp28C = *var_r29; if (i == mItemMode) { @@ -432,16 +434,17 @@ void daAlink_c::setIronBallChainPos() { } } - csXyz* sp3C = mIronBallChainAngle + 1; + sp3C = mIronBallChainAngle + 1; var_r29 = mIronBallChainPos + 1; var_r27 = var_r29 - 1; + s16 sp10; s16 spE = mIronBallChainAngle->z + 0x3000; - for (int i = 0; i < mItemMode; i++, sp3C++, var_r29++, spE += 0x3000) { + for (i = 0; i < mItemMode; i++, sp3C++, var_r29++, spE += 0x3000) { sp2A4 = (*var_r27 - *var_r29); - s16 sp10; - if (sp2A4.absXZ() < 1.0f) { + f32 var_f27 = sp2A4.absXZ(); + if (var_f27 < 1.0f) { sp10 = sp3C[-1].y; } else { sp10 = sp2A4.atan2sX_Z(); @@ -451,12 +454,12 @@ void daAlink_c::setIronBallChainPos() { var_r27 = var_r29; } - cXyz* temp_r29 = &mIronBallChainPos[mItemMode] + 1; - csXyz* sp3C_2 = &mIronBallChainAngle[mItemMode] + 1; + var_r29 = &mIronBallChainPos[mItemMode] + 1; + sp3C = &mIronBallChainAngle[mItemMode] + 1; - for (int i = mItemMode + 2; i < 102; i++) { - mIronBallChainPos[i] = *temp_r29; - mIronBallChainAngle[i] = *sp3C_2; + for (i = mItemMode + 2; i < 102; i++) { + mIronBallChainPos[i] = *var_r29; + mIronBallChainAngle[i] = *sp3C; field_0x3848[i] = cXyz::Zero; } } diff --git a/src/d/actor/d_a_alink_link.inc b/src/d/actor/d_a_alink_link.inc index 5b375b4c31b..c13ff2b7d90 100644 --- a/src/d/actor/d_a_alink_link.inc +++ b/src/d/actor/d_a_alink_link.inc @@ -71,7 +71,7 @@ s16 daAlink_c::checkBodyAngleX(s16 param_0) { return param_0; } - Vec sp2C = {0.0f, 0.0f, 0.0f}; + Vec sp2C = lit_5908; sp2C.y = 0.5f * field_0x598; cXyz sp20; diff --git a/src/d/actor/d_a_alink_wolf.inc b/src/d/actor/d_a_alink_wolf.inc index d5ec9ddd1f8..6e21eb20de2 100644 --- a/src/d/actor/d_a_alink_wolf.inc +++ b/src/d/actor/d_a_alink_wolf.inc @@ -112,20 +112,20 @@ void daAlink_c::changeCommon() { void daAlink_c::changeWolf() { JKRHeap* current_heap = mAnmHeap3.setAnimeHeap(); - mpLinkModel = initModel((J3DModelData*)dComIfG_getObjectRes(l_wArcName, 14), 0x80000, 0x20200); + mpLinkModel = initModel((J3DModelData*)dComIfG_getObjectRes(l_wArcName, 14), 0x20200); J3DModelData* chainModelData = (J3DModelData*)dComIfG_getObjectRes(l_wArcName, 15); for (u16 i = 0; i < 4; i++) { - mpWlChainModels[i] = initModel(chainModelData, 0x80000, 0); + mpWlChainModels[i] = initModel(chainModelData, 0); } - mpWlMidnaModel = initModel((J3DModelData*)dComIfG_getObjectRes(l_wArcName, 10), 0, 0x1020200); + mpWlMidnaModel = initModelEnv((J3DModelData*)dComIfG_getObjectRes(l_wArcName, 10), 0x1020200); mpWlMidnaMaskModel = - initModel((J3DModelData*)dComIfG_getObjectRes(l_wArcName, 7), 0x80000, 0x1000000); + initModel((J3DModelData*)dComIfG_getObjectRes(l_wArcName, 7), 0x1000000); mpWlMidnaHandModel = - initModel((J3DModelData*)dComIfG_getObjectRes(l_wArcName, 6), 0x80000, 0x1000000); + initModel((J3DModelData*)dComIfG_getObjectRes(l_wArcName, 6), 0x1000000); mpWlMidnaHairModel = - initModel((J3DModelData*)dComIfG_getObjectRes(l_wArcName, 11), 0, 0x1000000); + initModelEnv((J3DModelData*)dComIfG_getObjectRes(l_wArcName, 11), 0x1000000); mpDMidnaBrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_wArcName, 18); mpDMidnaBrk->searchUpdateMaterialID(mpWlMidnaModel->getModelData()); @@ -217,12 +217,11 @@ void daAlink_c::changeWolf() { attention_info.field_0xa = 50; dCcD_Cyl* cyl_p = field_0x850; - for (int i = 0; i < 3; i++) { + for (int i = 0; i < 3; i++, cyl_p++) { cyl_p->OffTgShieldFrontRange(); cyl_p->OffTgSmallShield(); cyl_p->OffTgSpShield(); cyl_p->OffTgShield(); - cyl_p++; } field_0xFB8.StartCAt(current.pos); @@ -238,7 +237,7 @@ void daAlink_c::changeWolf() { mMagicArmorBodyBrk = NULL; mMagicArmorHeadBrk = NULL; - field_0x2fc7 = dStage_stagInfo_GetWolfDashType(dComIfGp_getStage()->getStagInfo()); + field_0x2fc7 = (u8)dStage_stagInfo_GetWolfDashType(dComIfGp_getStage()->getStagInfo()); } /* 80126F3C-80127C54 12187C 0D18+00 2/2 0/0 0/0 .text changeLink__9daAlink_cFi */ @@ -7188,12 +7187,11 @@ void daAlink_c::setWolfEnemyThrowUpperAnime(daAlink_c::daAlink_WANM i_anmID, f32 * setWolfEnemyHangBitePos__9daAlink_cFP13fopEn_enemy_c */ BOOL daAlink_c::setWolfEnemyHangBitePos(fopEn_enemy_c* i_enemy) { if (i_enemy != NULL) { - current.pos = i_enemy->getDownPos(); - cXyz old_pos = current.pos; + cXyz old_pos = current.pos = i_enemy->getDownPos(); current.pos.x -= 60.0f * cM_ssin(shape_angle.y); - current.pos.x -= 135.0f; - current.pos.x -= 60.0f * cM_scos(shape_angle.y); + current.pos.y -= 135.0f; + current.pos.z -= 60.0f * cM_scos(shape_angle.y); if (commonLineCheck(&field_0x3540, ¤t.pos)) { current.pos = old_pos;