alink_grab done (#2234)

* work on alink grab

* some grab work

* grab almost done

* finish alink grab

* alink_wolf mostly done

* fix cLib_minMaxLimit

* alink guard mostly done

* extract some embedded assets

* extract grass data. wip, alignment wrong
This commit is contained in:
TakaRikka
2024-11-03 03:47:23 -08:00
committed by GitHub
parent 426e64d26b
commit 52f299456c
36 changed files with 5015 additions and 8034 deletions
+5 -6
View File
@@ -483,11 +483,9 @@ static const u16 effName_42340[] = {
};
/* 8045314C-80453150 00174C 0004+00 1/1 0/0 0/0 .sdata2 fFootJoint$44785 */
static const u8 fFootJoint[4] = {
0x00,
0x10,
0x00,
0x15,
static const u16 fFootJoint[] = {
0x0010,
0x0015,
};
/* 80453150-80453154 001750 0004+00 1/1 0/0 0/0 .sdata2 bFootJoint$44786 */
@@ -2306,9 +2304,10 @@ void daAlink_c::setMatrixOffset(f32* param_0, f32 param_1) {
/* 800A2CE0-800A3430 09D620 0750+00 3/3 0/0 0/0 .text
* setLegAngle__9daAlink_cFfP18daAlink_footData_cPsPsi */
void daAlink_c::setLegAngle(f32 param_0, daAlink_footData_c* param_1, s16* param_2,
int daAlink_c::setLegAngle(f32 param_0, daAlink_footData_c* param_1, s16* param_2,
s16* param_3, int param_4) {
// NONMATCHING
return 0;
}
/* 80391EFC-80391F08 01E55C 000C+00 0/1 0/0 0/0 .rodata localLeftFootOffset$56542 */
+2 -2
View File
@@ -2708,7 +2708,7 @@ const daAlinkHIO_wlDamNormal_c1 daAlinkHIO_wlDamNormal_c0::m = {
};
/* 8038F29C-8038F308 01B8FC 006C+00 2/4 0/0 0/0 .rodata m__24daAlinkHIO_wlDamLarge_c0 */
const daAlinkHIO_wlDamLarge_c1 daAlinkHIO_wlDamLarge_c0::m = {
const daAlinkHIO_wlDamLaHu_c1 daAlinkHIO_wlDamLarge_c0::m = {
{
49,
1.0f,
@@ -2749,7 +2749,7 @@ const daAlinkHIO_wlDamLarge_c1 daAlinkHIO_wlDamLarge_c0::m = {
/* 8038F308-8038F374 01B968 006C+00 0/2 0/0 0/0 .rodata m__23daAlinkHIO_wlDamHuge_c0 */
#pragma push
#pragma force_active on
const daAlinkHIO_wlDamHuge_c1 daAlinkHIO_wlDamHuge_c0::m = {
const daAlinkHIO_wlDamLaHu_c1 daAlinkHIO_wlDamHuge_c0::m = {
{
49,
1.1f,
-2
View File
@@ -1153,7 +1153,6 @@ int daAlink_c::procCanoeRodGrab() {
}
/* 800F6464-800F659C 0F0DA4 0138+00 6/6 0/0 0/0 .text procCanoeFishingWaitInit__9daAlink_cFv */
// NONMATCHING - cLib_minMaxLimit regalloc
int daAlink_c::procCanoeFishingWaitInit() {
if (!commonProcInitNotSameProc(PROC_CANOE_FISHING_WAIT)) {
field_0x311a = 0;
@@ -1241,7 +1240,6 @@ int daAlink_c::procCanoeFishingReelInit() {
/* 800F6874-800F69D4 0F11B4 0160+00 1/0 0/0 0/0 .text procCanoeFishingReel__9daAlink_cFv
*/
// NONMATCHING - cLib_minMaxLimit regalloc
int daAlink_c::procCanoeFishingReel() {
if (canoeCommon()) {
mItemVar0.field_0x3018 = 1;
+4 -2
View File
@@ -79,8 +79,9 @@ void daAlink_c::setCrawlMoveDirectionArrow() {
/* 800F7E48-800F81C0 0F2788 0378+00 2/2 0/0 0/0 .text changeCrawlAutoMoveProc__9daAlink_cFP4cXyz
*/
void daAlink_c::changeCrawlAutoMoveProc(cXyz* param_0) {
BOOL daAlink_c::changeCrawlAutoMoveProc(cXyz* param_0) {
// NONMATCHING
return 0;
}
/* 800F81C0-800F85C0 0F2B00 0400+00 2/2 0/0 0/0 .text
@@ -169,8 +170,9 @@ BOOL daAlink_c::checkNotCrawlStand(cXyz* param_0, cXyz* param_1) {
/* 800F8B00-800F8D04 0F3440 0204+00 2/2 0/0 0/0 .text
* checkCrawlInHoll__9daAlink_cFP4cXyzP4cXyzP4cXyzi */
void daAlink_c::checkCrawlInHoll(cXyz* param_0, cXyz* param_1, cXyz* param_2, int param_3) {
BOOL daAlink_c::checkCrawlInHoll(cXyz* param_0, cXyz* param_1, cXyz* param_2, int param_3) {
// NONMATCHING
return 0;
}
/* 800F8D04-800F8DBC 0F3644 00B8+00 2/2 0/0 0/0 .text setCrawlMoveHoll__9daAlink_cFv */
-1
View File
@@ -785,7 +785,6 @@ BOOL daAlink_c::checkDamageAction() {
/* 800D8F3C-800D9514 0D387C 05D8+00 2/2 0/0 0/0 .text procDamageInit__9daAlink_cFP12dCcD_GObjInfi
*/
// NONMATCHING - cLib_minMaxLimit appears to have issues when using s16
int daAlink_c::procDamageInit(dCcD_GObjInf* param_0, int param_1) {
BOOL freeze_player;
+23 -2
View File
@@ -4233,8 +4233,29 @@ void daAlink_c::checkWarpStart() {
/* 8011FBC0-8011FD4C 11A500 018C+00 3/3 0/0 0/0 .text warpModelTexScroll__9daAlink_cFv */
int daAlink_c::warpModelTexScroll() {
// NONMATCHING
return 0;
field_0x3478 += 0.15f;
if (field_0x3478 >= 1.0f) {
field_0x3478 -= 1.0f;
}
int temp_r30 = cLib_chaseF(&field_0x347c, field_0x3480, 0.06f);
field_0x3484 = cLib_minMaxLimit<f32>(0.5f * field_0x347c, 0.0f, 1.0f);
dRes_info_c::setWarpSRT(field_0x064C, current.pos, field_0x3478, field_0x347c);
dRes_info_c::setWarpSRT(mSwordModel->getModelData(), current.pos, field_0x3478, field_0x347c);
dRes_info_c::setWarpSRT(mShieldModel->getModelData(), current.pos, field_0x3478, field_0x347c);
dRes_info_c::setWarpSRT(mSheathModel->getModelData(), current.pos, field_0x3478, field_0x347c);
if (checkWolf()) {
dRes_info_c::setWarpSRT(mpWlChainModels[0]->getModelData(), current.pos, field_0x3478, field_0x347c);
} else {
dRes_info_c::setWarpSRT(mpLinkFaceModel->getModelData(), current.pos, field_0x3478, field_0x347c);
dRes_info_c::setWarpSRT(mpLinkHatModel->getModelData(), current.pos, field_0x3478, field_0x347c);
dRes_info_c::setWarpSRT(mpLinkHandModel->getModelData(), current.pos, field_0x3478, field_0x347c);
dRes_info_c::setWarpSRT(mpLinkBootModels[0]->getModelData(), current.pos, field_0x3478, field_0x347c);
}
return temp_r30;
}
/* 8011FD4C-80120124 11A68C 03D8+00 2/2 0/0 0/0 .text procCoWarpInit__9daAlink_cFii */
File diff suppressed because it is too large Load Diff
+402 -37
View File
@@ -5,6 +5,7 @@
#include "d/actor/d_a_alink.h"
#include "d/d_com_inf_game.h"
#include "d/actor/d_a_obj_gra2.h"
/* 800DC548-800DC5A4 0D6E88 005C+00 13/13 0/0 0/0 .text checkEnemyGroup__9daAlink_cFP10fopAc_ac_c
*/
@@ -19,14 +20,6 @@ public:
bool checkBattleMode() { return true; }
};
class daObj_GrA_c : public fopAc_ac_c {
public:
bool checkNpcObjGra() { return field_0xa7e == 1; }
u8 temp[0xA7E - 0x568];
u8 field_0xa7e;
};
/* 800DC5A4-800DC5DC 0D6EE4 0038+00 4/4 0/0 0/0 .text checkSpecialNpc__9daAlink_cFP10fopAc_ac_c */
BOOL daAlink_c::checkSpecialNpc(fopAc_ac_c* i_actor) {
s16 name = fopAcM_GetName(i_actor);
@@ -45,15 +38,10 @@ BOOL daAlink_c::checkShieldAttackEmphasys() {
}
/* 800DC678-800DC79C 0D6FB8 0124+00 5/5 0/0 0/0 .text checkGuardActionChange__9daAlink_cFv */
/* BOOL daAlink_c::checkGuardActionChange() {
return checkAttentionLock() && !checkIronBallWaitAnime() && !checkGrabAnime() &&
!checkCopyRodControllAnime() && mTargetedActor != NULL && !checkSpecialNpc(mTargetedActor) &&
(fopAcM_GetGroup(mTargetedActor) != 3 && fopAcM_GetGroup(mTargetedActor) != fopAc_NPC_e);
} */
BOOL daAlink_c::checkGuardActionChange() {
// NONMATCHING
return 0;
return checkAttentionLock() && !checkIronBallWaitAnime() && !checkGrabAnime() &&
!checkCopyRodControllAnime() && !((mTargetedActor != NULL && !checkSpecialNpc(mTargetedActor)) &&
(fopAcM_GetGroup(mTargetedActor) == 3 || fopAcM_GetGroup(mTargetedActor) == fopAc_NPC_e));
}
/* 800DC79C-800DC8C4 0D70DC 0128+00 3/3 0/0 0/0 .text stickArrowIncrement__9daAlink_cFi
@@ -246,10 +234,9 @@ void daAlink_c::setGuardSe(dCcD_GObjInf* i_objinf) {
}
/* 800DD1D4-800DD3E4 0D7B14 0210+00 1/1 0/0 0/0 .text setSmallGuard__9daAlink_cFP12dCcD_GObjInf */
// NONMATCHING
void daAlink_c::setSmallGuard(dCcD_GObjInf* i_objinf) {
setUpperAnimeBase(0x16);
cXyz* dmg_vec = (cXyz*)getDamageVec(i_objinf);
cXyz* dmg_vec = getDamageVec(i_objinf);
mBodyAngle.y = (dmg_vec->atan2sX_Z() + 0x8000) - shape_angle.y;
if (abs(mBodyAngle.y) > 0x7000) {
@@ -260,57 +247,435 @@ void daAlink_c::setSmallGuard(dCcD_GObjInf* i_objinf) {
daAlinkHIO_guard_c0::m.mSmallGuardLRAngleMax);
}
s16 max = daAlinkHIO_guard_c0::m.mSmallGuardFBAngleMax;
s16 min = -max;
mBodyAngle.x = cLib_minMaxLimit<s16>(cM_atan2s(dmg_vec->y, dmg_vec->absXZ()), min, max);
mBodyAngle.x = cLib_minMaxLimit<s16>(cM_atan2s(dmg_vec->y, dmg_vec->absXZ()), -daAlinkHIO_guard_c0::m.mSmallGuardFBAngleMax, daAlinkHIO_guard_c0::m.mSmallGuardFBAngleMax);
}
/* 800DD3E4-800DD894 0D7D24 04B0+00 1/1 0/0 0/0 .text
* procGuardSlipInit__9daAlink_cFiP12dCcD_GObjInf */
// NONMATCHING - extra useless mr
int daAlink_c::procGuardSlipInit(int param_0, dCcD_GObjInf* param_1) {
// NONMATCHING
return 0;
if (mProcID == PROC_GUARD_SLIP) {
return 0;
}
field_0x2fd5++;
if (field_0x2fd5 == 4) {
field_0x2fd5 = 0;
return procGuardBreakInit();
}
commonProcInit(PROC_GUARD_SLIP);
field_0x2fd4 = 3;
cXyz* temp_r3 = getDamageVec(param_1);
current.angle.y = temp_r3->atan2sX_Z();
if (mEquipItem == IRONBALL) {
setSingleAnimeBase(ANM_IRONBALL_DEF);
setIronBallWaitUpperAnime(1);
mNowAnmPackUpper[2].setRatio(0.0f);
mProcVar1.field_0x300a = 0;
mProcVar2.field_0x300c = 0;
mProcVar3.field_0x300e = 0;
} else {
const daAlinkHIO_guard_c1* var_r27 = &daAlinkHIO_guard_c0::m;
daAlink_ANM var_r28;
if (field_0x2f98 == 2) {
var_r28 = ANM_GUARD_LEFT;
} else {
var_r28 = ANM_GUARD_RIGHT;
}
setSingleAnimeParam(var_r28, &var_r27->mGuardHitAnm);
setUpperGuardAnime(-1.0f);
mProcVar2.field_0x300c = (current.angle.y + 0x8000) - shape_angle.y;
if (abs(mProcVar2.field_0x300c) > 0x7000) {
mProcVar2.field_0x300c = 0;
} else {
mProcVar2.field_0x300c = cLib_minMaxLimit<s16>((s16)mProcVar2.field_0x300c, -daAlinkHIO_guard_c0::m.mGuardLRAngleMax, daAlinkHIO_guard_c0::m.mGuardLRAngleMax);
}
mProcVar3.field_0x300e = cLib_minMaxLimit<s16>(cM_atan2s(temp_r3->y, temp_r3->absXZ()), -daAlinkHIO_guard_c0::m.mGuardFBAngleMax, daAlinkHIO_guard_c0::m.mGuardFBAngleMax);
mProcVar1.field_0x300a = daAlinkHIO_guard_c0::m.mGuardBodyInterpolation + 1;
mProcVar2.field_0x300c = (mProcVar2.field_0x300c - mBodyAngle.y) / mProcVar1.field_0x300a;
mProcVar3.field_0x300e = (mProcVar3.field_0x300e - mBodyAngle.x) / mProcVar1.field_0x300a;
mProcVar1.field_0x300a--;
mBodyAngle.y += mProcVar2.field_0x300c;
mBodyAngle.x += mProcVar3.field_0x300e;
}
mProcVar4.field_0x3010 = 0;
mProcVar5.field_0x3012 = 0;
if (param_1 != NULL && param_1->GetTgHitAc() != NULL && fopAcM_GetName(param_1->GetTgHitAc()) == PROC_E_MM_MT && param_1->GetTgHitAc()->subtype == 1) {
if (checkBootsOrArmorHeavy()) {
mNormalSpeed = daAlinkHIO_guard_c0::m.mMagneHvyGuardSpeed;
mProcVar5.field_0x3012 = 1;
} else {
mNormalSpeed = daAlinkHIO_guard_c0::m.mMagneGuardSpeed;
mProcVar5.field_0x3012 = 0;
}
mProcVar4.field_0x3010 = 1;
} else if (checkHugeAttack(param_0)) {
if ((!checkBootsOrArmorHeavy() && checkMiddleBossGoronRoom()) || checkStageName("D_MN07B")) {
mNormalSpeed = 40.0f;
} else {
mNormalSpeed = daAlinkHIO_guard_c0::m.mGuardSpeedHuge;
}
} else if (checkLargeAttack(param_0)) {
mNormalSpeed = daAlinkHIO_guard_c0::m.mGuardSpeedLarge;
} else {
mNormalSpeed = daAlinkHIO_guard_c0::m.mGuardSpeedNormal;
}
field_0x2f9d = 0x60;
setFootEffectProcType(1);
return 1;
}
/* 800DD894-800DDA10 0D81D4 017C+00 1/0 0/0 0/0 .text procGuardSlip__9daAlink_cFv */
int daAlink_c::procGuardSlip() {
// NONMATCHING
return 0;
if (mEquipItem != IRONBALL) {
setUpperGuardAnime(-1.0f);
}
setShapeAngleToAtnActor(0);
if (mProcVar1.field_0x300a != 0) {
mProcVar1.field_0x300a -= 1;
mBodyAngle.y += mProcVar2.field_0x300c;
mBodyAngle.x += mProcVar3.field_0x300e;
}
if (mNormalSpeed > 2.5f) {
field_0x2f9d = 0x60;
}
f32 var_f31;
if (checkBootsOrArmorHeavy() && mProcVar4.field_0x3010 == 0) {
var_f31 = 2.5f;
} else {
var_f31 = 1.25f;
}
if (mProcVar4.field_0x3010 != 0 && mProcVar5.field_0x3012 != checkBootsOrArmorHeavy()) {
mNormalSpeed = 0.0f;
}
if (cLib_chaseF(&mNormalSpeed, 0.0f, var_f31) != 0 && checkAnmEnd(&mUnderFrameCtrl[0])) {
field_0x814.SetTgApid(0);
if (!checkGuardActionChange()) {
onEndResetFlg1(ERFLG1_UNK_20);
}
if (mEquipItem == IRONBALL) {
mNowAnmPackUpper[2].setRatio(1.0f);
}
checkNextAction(0);
}
return 1;
}
/* 800DDA10-800DDBA8 0D8350 0198+00 2/1 0/0 0/0 .text procGuardAttackInit__9daAlink_cFv
*/
int daAlink_c::procGuardAttackInit() {
// NONMATCHING
return 0;
if (mDemo.getDemoMode() == 0x4B && mProcID == PROC_GUARD_ATTACK) {
return 1;
}
commonProcInit(PROC_GUARD_ATTACK);
const daAlinkHIO_guardAttack_c1* temp_r30 = &daAlinkHIO_gAtPush_c0::m;
field_0x2f98 = 3;
field_0x34d4 = l_rWaitBaseAnime;
field_0x3588 = l_rWaitBaseAnime;
setCutType(0x29);
setSingleAnimeParam(ANM_SHIELD_ATTACK, &temp_r30->mAttackAnm);
field_0x3478 = temp_r30->mAttackStartFrame;
field_0x347c = temp_r30->mAttackEndFrame;
field_0x3480 = temp_r30->mSpeed;
if (checkHeavyStateOn(1, 1) != 0) {
field_0x3480 *= mHeavySpeedMultiplier;
}
if (mDemo.getDemoMode() == 0x4B) {
field_0x3484 = 1000.0f;
field_0x3488 = 1000.0f;
} else {
field_0x3484 = temp_r30->mAttackAnm.mCheckFrame;
field_0x3488 = temp_r30->mSlashCheckFrame;
}
mNormalSpeed = 0.0f;
setSwordVoiceSe(Z2SE_AL_V_TATE_OSHI);
mGuardAtCps.ResetAtHit();
mGuardAtCps.SetAtSe(2);
mGuardAtCps.SetR(daAlinkHIO_guard_c0::m.mAttackRadius);
current.angle.y = shape_angle.y;
setUpperGuardAnime(-1.0f);
mProcVar2.field_0x300c = 0;
mProcVar3.field_0x300e = 0;
mProcVar5.field_0x3012 = 0;
mProcVar0.field_0x3008 = 0;
return 1;
}
/* 800DDBA8-800DDE58 0D84E8 02B0+00 1/0 0/0 0/0 .text procGuardAttack__9daAlink_cFv */
int daAlink_c::procGuardAttack() {
// NONMATCHING
return 0;
daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0];
setUpperGuardAnime(-1.0f);
field_0x2f99 = 4;
cLib_chaseF(&mNormalSpeed, 0.0f, daAlinkHIO_move_c0::m.mDeceleration);
setShapeAngleToAtnActor(1);
current.angle.y = shape_angle.y;
if (checkForceSwordSwing()) {
mProcVar2.field_0x300c = 1;
}
BOOL var_r29;
if (mEquipItem == 0x103 && !checkMagneBootsOn()) {
var_r29 = 1;
if (doTrigger()) {
mProcVar3.field_0x300e = 1;
}
} else {
var_r29 = 0;
}
if (mProcVar0.field_0x3008 == 0 && mGuardAtCps.ChkAtHit()) {
mProcVar0.field_0x3008 = 1;
dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f));
}
if (mProcVar5.field_0x3012 != 0 && commonLineCheck(&field_0x3834, &mRightHandPos) && dComIfG_Bgsp().GetWallCode(mLinkLinChk) != 7) {
mZ2Link.startHitItemSE(Z2SE_HIT_SHIELD_ATTACK, dKy_pol_sound_get(&mLinkLinChk), NULL, -1.0f);
return procCutReverseInit(ANM_SHIELD_ATTACK_RECOIL);
}
if (var_r29) {
if (checkCutHeadState()) {
setDoStatusEmphasys(0x77);
} else {
setDoStatus(0x86);
}
}
if (checkAnmEnd(temp_r30)) {
if (mDemo.getDemoMode() == 0x4B) {
dComIfGp_evmng_cutEnd(field_0x3184);
} else {
checkNextAction(0);
}
} else {
if (temp_r30->getFrame() > field_0x3488) {
if (mProcVar3.field_0x300e != 0) {
return checkDoCutAction();
}
if (mProcVar2.field_0x300c != 0) {
return checkCutAction();
}
}
if (temp_r30->getFrame() > field_0x3484) {
onModeFlg(4);
checkNextAction(1);
} else if (temp_r30->getFrame() >= field_0x3478 && temp_r30->getFrame() < field_0x347c) {
if (mProcVar5.field_0x3012 == 0) {
mNormalSpeed = field_0x3480;
}
mProcVar5.field_0x3012 = 1;
} else {
mProcVar5.field_0x3012 = 0;
}
}
return 1;
}
/* 800DDE58-800DDF2C 0D8798 00D4+00 2/2 0/0 0/0 .text procGuardBreakInit__9daAlink_cFv */
int daAlink_c::procGuardBreakInit() {
// NONMATCHING
return 0;
commonProcInit(PROC_GUARD_BREAK);
setSingleAnimeParam(ANM_GUARD_BREAK, &daAlinkHIO_guard_c0::m.mGuardBreakAnm);
if (mEquipItem == IRONBALL) {
deleteEquipItem(0, 0);
}
mNormalSpeed = 0.0f;
field_0x3588 = l_halfAtnWaitBaseAnime;
dComIfGp_getVibration().StartShock(5, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
voiceStart(Z2SE_AL_V_GUARD_BROKEN);
return 1;
}
/* 800DDF2C-800DE008 0D886C 00DC+00 1/0 0/0 0/0 .text procGuardBreak__9daAlink_cFv */
int daAlink_c::procGuardBreak() {
// NONMATCHING
return 0;
daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0];
setUpperGuardAnime(-1.0f);
onEndResetFlg0(ERFLG0_UNK_8000000);
field_0x2f99 = 4;
if (checkAnmEnd(temp_r30)) {
if (checkGuardActionChange() == 0) {
onEndResetFlg1(ERFLG1_UNK_20);
}
checkNextAction(0);
} else if (temp_r30->getFrame() > daAlinkHIO_guard_c0::m.mGuardBreakAnm.mCheckFrame) {
if (!checkGuardActionChange()) {
onEndResetFlg1(ERFLG1_UNK_20);
}
onModeFlg(4);
checkNextAction(1);
}
return 1;
}
/* 800DE008-800DE380 0D8948 0378+00 2/2 0/0 0/0 .text procTurnMoveInit__9daAlink_cFi */
int daAlink_c::procTurnMoveInit(int param_0) {
// NONMATCHING
return 0;
BOOL temp_r27 = checkUpperGuardAnime();
fopAc_ac_c* temp_r28 = mTargetedActor;
commonProcInit(PROC_TURN_MOVE);
mNormalSpeed = 0.0f;
daAlink_ANM var_r29;
if (param_0 == 2) {
var_r29 = ANM_SIDE_ROLL_LEFT;
} else if (param_0 == 3) {
var_r29 = ANM_SIDE_ROLL_RIGHT;
} else if (checkInputOnR()) {
if ((s16)(field_0x2fe2 - shape_angle.y) >= 0) {
var_r29 = ANM_SIDE_ROLL_LEFT;
} else {
var_r29 = ANM_SIDE_ROLL_RIGHT;
}
} else {
var_r29 = ANM_SIDE_ROLL_LEFT;
}
f32 temp_f31 = daAlinkHIO_turnMove_c0::m.mTurnAnm.mSpeed;
mProcVar1.field_0x300a = daAlinkHIO_turnMove_c0::m.mMaxTurnSpeed;
if (checkNoResetFlg0(FLG0_UNDERWATER)) {
mProcVar1.field_0x300a = mProcVar1.field_0x300a * daAlinkHIO_magneBoots_c0::m.mWaterVelocityX;
}
setSingleAnime(var_r29, temp_f31, daAlinkHIO_turnMove_c0::m.mTurnAnm.mStartFrame, daAlinkHIO_turnMove_c0::m.mTurnAnm.mEndFrame, daAlinkHIO_turnMove_c0::m.mTurnAnm.mInterpolation);
if (var_r29 == ANM_SIDE_ROLL_LEFT) {
mProcVar2.field_0x300c = -0x7FF0;
field_0x2f98 = 2;
} else {
mProcVar2.field_0x300c = 0x7FF0;
field_0x2f98 = 3;
}
if (temp_r28 != NULL) {
cXyz sp8 = current.pos - temp_r28->current.pos;
shape_angle.y = fopAcM_searchActorAngleY(this, temp_r28);
field_0x3478 = sp8.absXZ();
mProcVar3.field_0x300e = sp8.atan2sX_Z();
} else {
field_0x3478 = 200.0f;
mProcVar3.field_0x300e = shape_angle.y + 0x8000;
}
field_0x347c = (field_0x3478 - 150.0f) / mProcVar2.field_0x300c;
voiceStart(Z2SE_AL_V_SOTOMO_ROLL);
if (mDemo.getDemoMode() == 0x52) {
mProcVar0.field_0x3008 = 1;
} else {
mProcVar0.field_0x3008 = 0;
}
setFootEffectProcType(0);
field_0x2f9d = 4;
dComIfGp_setPlayerStatus0(0, 4);
if (temp_r27 != 0) {
onNoResetFlg0(FLG0_UNK_2);
}
return 1;
}
/* 800DE380-800DE64C 0D8CC0 02CC+00 1/0 0/0 0/0 .text procTurnMove__9daAlink_cFv */
int daAlink_c::procTurnMove() {
// NONMATCHING
return 0;
onEndResetFlg0(ERFLG0_UNK_8000000);
s16 temp_r28 = mProcVar2.field_0x300c;
cLib_addCalcAngleS(&mProcVar2.field_0x300c, 0, daAlinkHIO_turnMove_c0::m.mTurnSpeedRate, mProcVar1.field_0x300a, daAlinkHIO_turnMove_c0::m.mMinTurnSpeed);
s16 temp_r29 = temp_r28 - mProcVar2.field_0x300c;
if (temp_r28 > 0) {
current.angle.y = mProcVar3.field_0x300e + 0x4000;
} else {
current.angle.y = mProcVar3.field_0x300e - 0x4000;
}
f32 temp_f31 = current.pos.x - (field_0x3478 * cM_ssin(mProcVar3.field_0x300e));
f32 temp_f30 = current.pos.z - (field_0x3478 * cM_scos(mProcVar3.field_0x300e));
mProcVar3.field_0x300e += temp_r29;
field_0x3478 -= field_0x347c * temp_r29;
current.pos.x = temp_f31 + (field_0x3478 * cM_ssin(mProcVar3.field_0x300e));
current.pos.z = temp_f30 + (field_0x3478 * cM_scos(mProcVar3.field_0x300e));
shape_angle.y = mProcVar3.field_0x300e + 0x8000;
mProcVar0.field_0x3008 |= checkCutFinishJumpUp();
daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0];
if (checkNoResetFlg0(FLG0_UNK_2)) {
setUpperGuardAnime(-1.0f);
}
if (checkAnmEnd(temp_r30)) {
if (!checkAttentionLock()) {
offNoResetFlg2(FLG2_UNK_8000000);
}
checkNextAction(0);
} else if (mProcVar0.field_0x3008 != 0 && !checkNotJumpSinkLimit() && temp_r30->getFrame() > daAlinkHIO_turnMove_c0::m.mTwirlCutDelayF) {
procCutFinishJumpUpInit();
dComIfGp_setPlayerStatus0(0, 4);
} else {
if (temp_r30->getFrame() > daAlinkHIO_turnMove_c0::m.mTurnAnm.mCheckFrame) {
onModeFlg(4);
if (checkNextAction(1)) {
return 1;
}
}
if (temp_r30->checkPass(19.0f)) {
dComIfGp_getVibration().StartShock(1, 1, cXyz(0.0f, 1.0f, 0.0f));
}
if (abs(temp_r29) > 0x100) {
field_0x2f9d = 4;
}
}
return 1;
}
+5 -9
View File
@@ -826,7 +826,6 @@ int daAlink_c::setSyncHorse(int param_0) {
}
/* 800EE64C-800EE918 0E8F8C 02CC+00 1/1 0/0 0/0 .text setSyncBoar__9daAlink_cFi */
// NONMATCHING - regalloc, equivalent? NONMATCHING
int daAlink_c::setSyncBoar(int param_0) {
e_wb_class* e_wb_p = static_cast<e_wb_class*>(mRideAcKeep.getActor());
BOOL mode_1 = checkModeFlg(1);
@@ -1021,7 +1020,6 @@ void daAlink_c::setHorseSwordUp(int param_0) {
/* 800EEF30-800EF050 0E9870 0120+00 9/9 0/0 0/0 .text setRideSubjectAngle__9daAlink_cFs
*/
// NONMATCHING - cLib_minMaxLimit regalloc
int daAlink_c::setRideSubjectAngle(s16 param_0) {
shape_angle.y += mBodyAngle.y;
BOOL temp_r27 = setBodyAngleToCamera();
@@ -1033,11 +1031,11 @@ int daAlink_c::setRideSubjectAngle(s16 param_0) {
var_r30 = daAlinkHIO_horse_c0::m.field_0x58;
}
mBodyAngle.x = cLib_minMaxLimit<s16>(mBodyAngle.x, daAlinkHIO_horse_c0::m.field_0x5A, var_r30);
mBodyAngle.x = cLib_minMaxLimit<s16>((s16)mBodyAngle.x, daAlinkHIO_horse_c0::m.field_0x5A, var_r30);
s16 temp_r29 = shape_angle.y - param_0;
if (checkHorseZelda()) {
field_0x3190 = cLib_minMaxLimit<s16>(temp_r29, -0x4000, 0x4000);
field_0x3190 = cLib_minMaxLimit<s16>((s16)temp_r29, -0x4000, 0x4000);
} else {
field_0x3190 = temp_r29;
}
@@ -1055,15 +1053,14 @@ int daAlink_c::setRideSubjectAngle(s16 param_0) {
}
/* 800EF050-800EF0E8 0E9990 0098+00 7/7 0/0 0/0 .text setBodyAngleRideReadyAnime__9daAlink_cFv */
// NONMATCHING - missing mr, probably issue with cLib_minMaxLimit implementation
void daAlink_c::setBodyAngleRideReadyAnime() {
setBodyAngleXReadyAnime(0);
s16 angle;
if (mTargetedActor != NULL) {
angle = cLib_minMaxLimit(
(s16)(cLib_targetAngleY(&current.pos, &mTargetedActor->eyePos) - shape_angle.y),
(s16)-0x3800, (s16)0x3800);
angle = cLib_minMaxLimit<s16>(
cLib_targetAngleY(&current.pos, &mTargetedActor->eyePos) - shape_angle.y,
-0x3800, 0x3800);
} else {
angle = 0;
}
@@ -2200,7 +2197,6 @@ int daAlink_c::procHorseCutTurn() {
/* 800F1D18-800F2028 0EC658 0310+00 2/2 0/0 0/0 .text
* procHorseDamageInit__9daAlink_cFP12dCcD_GObjInf */
// NONMATCHING - cLib_minMaxLimit regalloc
int daAlink_c::procHorseDamageInit(dCcD_GObjInf* param_0) {
commonProcInit(PROC_HORSE_DAMAGE);
-1
View File
@@ -108,7 +108,6 @@ bool daAlink_c::checkKandelaarSwing(int param_0) const {
}
/* 801108EC-80110BEC 10B22C 0300+00 1/1 0/0 0/0 .text kandelaarModelCallBack__9daAlink_cFv */
// NONMATCHING - regalloc from cLib_minMaxLimit
int daAlink_c::kandelaarModelCallBack() {
cXyz sp44;
mDoMtx_multVecZero(J3DSys::mCurrentMtx, &sp44);
+232 -6
View File
@@ -273,7 +273,7 @@ int daAlink_c::procMove() {
setBlendMoveAnime(-1.0f);
if (field_0x3174 != 8) {
field_0x30a0 =
cLib_minMaxLimit2((s16)(field_0x2ff0 >> 1), daAlinkHIO_basic_c0::m.mNeckMaxUp,
cLib_minMaxLimit<s16>((s16)(field_0x2ff0 >> 1), daAlinkHIO_basic_c0::m.mNeckMaxUp,
daAlinkHIO_basic_c0::m.mNeckMaxDown);
}
}
@@ -656,7 +656,7 @@ int daAlink_c::procSlide() {
if (checkInputOnR()) {
mProcVar2.field_0x300c =
cLib_minMaxLimit2<s16>((s16)(mProcVar2.field_0x300c + sin * 256.0f), -0x1000, 0x1000);
cLib_minMaxLimit<s16>((s16)(mProcVar2.field_0x300c + sin * 256.0f), -0x1000, 0x1000);
} else {
cLib_chaseS(&mProcVar2.field_0x300c, 0, 64);
}
@@ -3677,7 +3677,160 @@ int daAlink_c::moveShadowScaleLight() {
/* 800CBC18-800CC25C 0C6558 0644+00 1/1 0/0 0/0 .text shadowDraw__9daAlink_cFv */
void daAlink_c::shadowDraw() {
// NONMATCHING
daMidna_c* temp_r3 = getMidnaActor();
if (temp_r3 != NULL && ((temp_r3->checkShadowModelDraw() && (field_0x2ff4 >= 0x3FF0 || !checkMidnaRide())) || temp_r3->checkShadowModelDrawDemoForce())) {
return;
}
if (!checkBoarRide()) {
if (mProcID == PROC_WARP) {
tevStr.field_0x344 = field_0x3484;
}
u32 var_r29;
if (checkHorseRide()) {
var_r29 = ((daHorse_c*)dComIfGp_getHorseActor())->getShadowID();
if (var_r29 != 0) {
dComIfGd_addRealShadow(var_r29, mpLinkModel);
}
} else {
f32 var_f31;
if (checkModeFlg(0x40)) {
var_f31 = field_0x33d8;
} else {
var_f31 = mLinkAcch.GetGroundH();
}
cXyz spC(field_0x3834.x, field_0x3454, field_0x3834.z);
f32 var_f30;
if (!checkWolf()) {
if (field_0x850[0].GetC().y > field_0x850[2].GetC().y) {
var_f30 = field_0x850[2].GetC().y;
} else {
var_f30 = field_0x850[0].GetC().y;
}
} else {
var_f30 = field_0x850[0].GetC().y;
}
s8 sp8;
if (mWaterY > var_f31) {
sp8 = 1;
} else {
sp8 = 0;
}
field_0x31a4 = dComIfGd_setShadow(field_0x31a4, sp8, mpLinkModel, &spC, 800.0f, 0.0f, var_f30, var_f31, mLinkAcch.m_gnd, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
var_r29 = field_0x31a4;
}
if (var_r29 != 0) {
if (checkSwordDraw()) {
if (!checkNoResetFlg3(FLG3_UNK_80000000)) {
dComIfGd_addRealShadow(var_r29, mSwordModel);
}
if (!checkWoodSwordEquip()) {
dComIfGd_addRealShadow(var_r29, mSheathModel);
}
}
if (checkShieldDraw()) {
dComIfGd_addRealShadow(var_r29, mShieldModel);
}
if (checkWolf()) {
if (checkMidnaRide() && !checkCloudSea() && !temp_r3->checkShadowNoDraw() && !temp_r3->checkShadowModelDraw()) {
dComIfGd_addRealShadow(var_r29, mpWlMidnaModel);
if (!temp_r3->checkNoMaskDraw() ) {
dComIfGd_addRealShadow(var_r29, mpWlMidnaMaskModel);
}
dComIfGd_addRealShadow(var_r29, mpWlMidnaHairModel);
}
} else {
dComIfGd_addRealShadow(var_r29, mpLinkFaceModel);
dComIfGd_addRealShadow(var_r29, mpLinkHatModel);
dComIfGd_addRealShadow(var_r29, mpLinkHandModel);
if (field_0x2f92 == 0xFB) {
dComIfGd_addRealShadow(var_r29, mpDemoHLTmpModel);
}
if (field_0x2f93 == 0xFB) {
dComIfGd_addRealShadow(var_r29, mpDemoHRTmpModel);
}
if (mEquipItem == BOOMERANG) {
if (mItemAcKeep.getActor() != NULL) {
dComIfGd_addRealShadow(var_r29, mItemAcKeep.getActor()->model);
}
} else if (checkItemDraw()) {
if (mEquipItem == IRONBALL) {
if (mItemVar0.field_0x3018 == 0 || mItemVar0.field_0x3018 == 8) {
dComIfGd_addRealShadow(var_r29, mHeldItemModel);
} else {
if (fopAcM_gc_c::gndCheck(&mIronBallBgChkPos)) {
field_0x32d4 = dComIfGd_setShadow(field_0x32d4, 0, mHeldItemModel, &mIronBallCenterPos, 150.0f, 32.0f, mIronBallBgChkPos.y, fopAcM_gc_c::getGroundY(), *fopAcM_gc_c::getGroundCheck(), &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
}
}
} else {
changeHookshotDrawModel();
dComIfGd_addRealShadow(var_r29, mHeldItemModel);
if (checkHookshotItem(mEquipItem)) {
if (checkHookshotWait() && !dComIfGp_checkPlayerStatus1(0, 0x10000)) {
dComIfGd_addRealShadow(var_r29, mpHookTipModel);
}
if (mEquipItem == W_HOOKSHOT && !checkPlayerGuardAndAttack() && !checkNoResetFlg0(FLG0_UNK_2)) {
dComIfGd_addRealShadow(var_r29, field_0x0710);
if (!dComIfGp_checkPlayerStatus1(0, 0x10000)) {
dComIfGd_addRealShadow(var_r29, field_0x0714);
}
}
}
changeHookshotDrawModel();
}
}
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]);
}
}
if (checkSpinnerRide()) {
fopAc_ac_c* temp_r3_6 = fopAcM_SearchByID(mRideAcKeep.getID());
if (temp_r3_6 != NULL) {
dComIfGd_addRealShadow(var_r29, temp_r3_6->model);
}
}
}
if (mGrabItemAcKeep.getID() != fpcM_ERROR_PROCESS_ID_e) {
fopAc_ac_c* temp_r3_7 = fopAcM_SearchByID(mGrabItemAcKeep.getID());
if (temp_r3_7 != NULL && temp_r3_7->model != NULL) {
dComIfGd_addRealShadow(var_r29, temp_r3_7->model);
}
}
if (dComIfGp_checkPlayerStatus1(0, 0x10000) && mCargoCarryAcKeep.getID() != fpcM_ERROR_PROCESS_ID_e) {
fopAc_ac_c* temp_r3_8 = fopAcM_SearchByID(mCargoCarryAcKeep.getID());
if (temp_r3_8 != NULL && temp_r3_8->model != NULL) {
dComIfGd_addRealShadow(var_r29, temp_r3_8->model);
}
}
}
}
}
/* 800CC25C-800CC298 0C6B9C 003C+00 3/3 0/0 0/0 .text modelCalc__9daAlink_cFP8J3DModel */
@@ -4224,13 +4377,86 @@ int daAlink_c::checkSubjectAction() {
}
/* 800CE728-800CE8A0 0C9068 0178+00 1/1 0/0 0/0 .text checkBodyAngleX__9daAlink_cFs */
void daAlink_c::checkBodyAngleX(s16 param_0) {
// NONMATCHING
s16 daAlink_c::checkBodyAngleX(s16 param_0) {
if (checkWolf() || mProcID == PROC_PEEP_SUBJECTIVITY || mProcID == PROC_HOOKSHOT_WALL_SHOOT) {
return param_0;
}
Vec sp2C = {0.0f, 0.0f, 0.0f};
sp2C.y = 0.5f * field_0x598;
cXyz sp20;
mDoMtx_multVecZero(mpLinkModel->getAnmMtx(1), &sp20);
cXyz sp14;
if (param_0 >= 0) {
sp2C.z = 25.0f;
} else {
sp2C.z = -25.0f;
}
mDoMtx_stack_c::transS(sp20);
concatMagneBootMtx();
mDoMtx_stack_c::ZXYrotM(param_0, shape_angle.y, 0);
mDoMtx_stack_c::multVec(&sp2C, &sp14);
if (commonLineCheck(&sp20, &sp14)) {
cXyz sp8 = sp14 - mLinkLinChk.i_GetCross();
multVecMagneBootInvMtx(&sp8);
current.pos.x -= sp8.x;
current.pos.z -= sp8.z;
}
return param_0;
}
/* 800CE8A0-800CEAF4 0C91E0 0254+00 15/15 0/0 0/0 .text setBodyAngleToCamera__9daAlink_cFv */
BOOL daAlink_c::setBodyAngleToCamera() {
// NONMATCHING
if (dComIfGp_checkCameraAttentionStatus(field_0x317c, 0x10)) {
field_0x310e = field_0x310a;
field_0x3110 = field_0x310c;
onEndResetFlg2(ERFLG2_UNK_20);
s16 sp8;
if (checkInputOnR()) {
f32 var_f31 = 512.0f * field_0x33ac * field_0x33ac;
if (checkWolfEyeUp()) {
var_f31 *= 0.6f;
}
if (dComIfGp_checkPlayerStatus0(0, 0x200000)) {
var_f31 /= dComIfGp_getCameraZoomScale(field_0x317c);
}
shape_angle.y = shape_angle.y + (var_f31 * cM_ssin(mStickAngle));
sp8 = mBodyAngle.x + (var_f31 * cM_scos(mStickAngle));
if (checkNotItemSinkLimit() && sp8 > 0 && sp8 > mBodyAngle.x) {
sp8 = mBodyAngle.x;
}
} else {
sp8 = mBodyAngle.x;
}
if (checkNotItemSinkLimit() && sp8 > 0) {
cLib_addCalcAngleS(&sp8, 0, 5, 0x1000, 0x400);
}
s16 var_r29;
if (!dComIfGp_checkPlayerStatus0(0, 0x202000) && mEquipItem == IRONBALL) {
var_r29 = -10000;
} else {
var_r29 = daAlinkHIO_item_c0::m.mItemFPUpMaxUnk;
}
mBodyAngle.x = cLib_minMaxLimit<s16>((s16)sp8, var_r29, daAlinkHIO_item_c0::m.mItemFPMaxUnk);
checkBodyAngleX(mBodyAngle.x);
field_0x310a = mBodyAngle.x;
field_0x310c = shape_angle.y;
return 1;
}
return 0;
}
-1
View File
@@ -1414,7 +1414,6 @@ int daAlink_c::procSwimHookshotMove() {
/* 8010519C-80105728 0FFADC 058C+00 1/1 0/0 0/0 .text
* procSwimDamageInit__9daAlink_cFP12dCcD_GObjInf */
// NONMATCHING - cLib_minMaxLimit regalloc issue
int daAlink_c::procSwimDamageInit(dCcD_GObjInf* param_0) {
seStartOnlyReverb(Z2SE_AL_DAMAGE_NORMAL);
dComIfGp_getVibration().StartShock(2, 31, cXyz(0.0f, 1.0f, 0.0f));
File diff suppressed because it is too large Load Diff
+37 -926
View File
File diff suppressed because it is too large Load Diff
+5 -2129
View File
File diff suppressed because it is too large Load Diff
+4 -4699
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -52,7 +52,7 @@ void dEyeHL_mng_c::update() {
for (; obj != NULL; obj = obj->m_next) {
ResTIMG* timg = obj->m_timg;
timg->LODBias = obj->m_lodBias + tmp;
timg->LODBias = cLib_minMaxLimit<s16>(timg->LODBias, -400, 399);
timg->LODBias = cLib_minMaxLimit<s16>((s16)timg->LODBias, -400, 399);
}
}
}
@@ -113,4 +113,4 @@ u8 struct_80450FB8[4];
extern u8 struct_80450FBC[4];
u8 struct_80450FBC[4];
/* 8037B100-8037B100 007760 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
/* 8037B100-8037B100 007760 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */