mirror of https://github.com/zeldaret/tp.git
alink crawl / damage done (#2236)
This commit is contained in:
parent
63abf9f6d2
commit
467b7bffca
|
|
@ -2263,7 +2263,7 @@ public:
|
|||
/* 800F7E48 */ BOOL changeCrawlAutoMoveProc(cXyz*);
|
||||
/* 800F81C0 */ int getCrawlMoveVec(cXyz*, cXyz*, cXyz*, int, int, u8*);
|
||||
/* 800F85C0 */ void crawlBgCheck(cXyz*, cXyz*, int);
|
||||
/* 800F8700 */ void checkCrawlSideWall(cXyz*, cXyz*, cXyz*, cXyz*, s16*, s16*);
|
||||
/* 800F8700 */ BOOL checkCrawlSideWall(cXyz*, cXyz*, cXyz*, cXyz*, s16*, s16*);
|
||||
/* 800F88F8 */ void decideCrawlDoStatus();
|
||||
/* 800F89E0 */ BOOL checkNotCrawlStand(cXyz*);
|
||||
/* 800F8A50 */ BOOL checkNotCrawlStand(cXyz*, cXyz*);
|
||||
|
|
@ -3426,6 +3426,8 @@ public:
|
|||
return i_frameCtrl->checkAnmEnd();
|
||||
}
|
||||
|
||||
BOOL checkCrawlWaterIn() { return mWaterY > current.pos.y + 15.5f; }
|
||||
|
||||
const cXyz& getHsChainTopPos() const { return mHookshotTopPos; }
|
||||
const cXyz& getHsChainRootPos() const { return mHeldItemRootPos; }
|
||||
|
||||
|
|
@ -3644,7 +3646,7 @@ public:
|
|||
/* 0x028B0 */ fpc_ProcID mShieldArrowIDs[16];
|
||||
/* 0x028F0 */ fpc_ProcID mMsgClassID;
|
||||
/* 0x028F4 */ int mAtnActorID;
|
||||
/* 0x028F8 */ int field_0x28f8;
|
||||
/* 0x028F8 */ fpc_ProcID field_0x28f8;
|
||||
/* 0x028FC */ int field_0x28fc;
|
||||
/* 0x02900 */ u32 field_0x2900;
|
||||
/* 0x02904 */ daAlink_footData_c mFootData1[2];
|
||||
|
|
@ -5124,7 +5126,7 @@ public:
|
|||
static daAlinkHIO_damNormal_c1 const m;
|
||||
};
|
||||
|
||||
class daAlinkHIO_damLarge_c1 {
|
||||
class daAlinkHIO_damLaHu_c1 {
|
||||
public:
|
||||
/* 0x00 */ daAlinkHIO_anm_c field_0x0;
|
||||
/* 0x14 */ daAlinkHIO_anm_c field_0x14;
|
||||
|
|
@ -5141,35 +5143,16 @@ public:
|
|||
/* 0xB0 */ f32 field_0xB0;
|
||||
/* 0xB4 */ f32 field_0xB4;
|
||||
/* 0xB8 */ f32 field_0xB8;
|
||||
}; // Size: 0xBC
|
||||
};
|
||||
|
||||
class daAlinkHIO_damLarge_c0 {
|
||||
public:
|
||||
static daAlinkHIO_damLarge_c1 const m;
|
||||
static daAlinkHIO_damLaHu_c1 const m;
|
||||
};
|
||||
|
||||
class daAlinkHIO_damHuge_c1 {
|
||||
public:
|
||||
/* 0x00 */ daAlinkHIO_anm_c field_0x0;
|
||||
/* 0x14 */ daAlinkHIO_anm_c field_0x14;
|
||||
/* 0x28 */ daAlinkHIO_anm_c field_0x28;
|
||||
/* 0x3C */ daAlinkHIO_anm_c field_0x3C;
|
||||
/* 0x50 */ daAlinkHIO_anm_c field_0x50;
|
||||
/* 0x64 */ daAlinkHIO_anm_c field_0x64;
|
||||
/* 0x78 */ daAlinkHIO_anm_c field_0x78;
|
||||
/* 0x8C */ daAlinkHIO_anm_c field_0x8C;
|
||||
/* 0xA0 */ s16 field_0xA0;
|
||||
/* 0xA4 */ f32 field_0xA4;
|
||||
/* 0xA8 */ f32 field_0xA8;
|
||||
/* 0xAC */ f32 field_0xAC;
|
||||
/* 0xB0 */ f32 field_0xB0;
|
||||
/* 0xB4 */ f32 field_0xB4;
|
||||
/* 0xB8 */ f32 field_0xB8;
|
||||
}; // Size: 0xBC
|
||||
|
||||
class daAlinkHIO_damHuge_c0 {
|
||||
public:
|
||||
static daAlinkHIO_damHuge_c1 const m;
|
||||
static daAlinkHIO_damLaHu_c1 const m;
|
||||
};
|
||||
|
||||
class daAlinkHIO_damHorse_c1 {
|
||||
|
|
|
|||
|
|
@ -1238,7 +1238,7 @@ const daAlinkHIO_damNormal_c1 daAlinkHIO_damNormal_c0::m = {
|
|||
};
|
||||
|
||||
/* 8038E2B0-8038E36C 01A910 00BC+00 2/4 0/0 0/0 .rodata m__22daAlinkHIO_damLarge_c0 */
|
||||
const daAlinkHIO_damLarge_c1 daAlinkHIO_damLarge_c0::m = {
|
||||
const daAlinkHIO_damLaHu_c1 daAlinkHIO_damLarge_c0::m = {
|
||||
{
|
||||
49,
|
||||
0.8f,
|
||||
|
|
@ -1305,7 +1305,7 @@ const daAlinkHIO_damLarge_c1 daAlinkHIO_damLarge_c0::m = {
|
|||
};
|
||||
|
||||
/* 8038E36C-8038E428 01A9CC 00BC+00 1/3 0/0 0/0 .rodata m__21daAlinkHIO_damHuge_c0 */
|
||||
const daAlinkHIO_damHuge_c1 daAlinkHIO_damHuge_c0::m = {
|
||||
const daAlinkHIO_damLaHu_c1 daAlinkHIO_damHuge_c0::m = {
|
||||
{
|
||||
49,
|
||||
0.8f,
|
||||
|
|
|
|||
|
|
@ -80,7 +80,80 @@ void daAlink_c::setCrawlMoveDirectionArrow() {
|
|||
/* 800F7E48-800F81C0 0F2788 0378+00 2/2 0/0 0/0 .text changeCrawlAutoMoveProc__9daAlink_cFP4cXyz
|
||||
*/
|
||||
BOOL daAlink_c::changeCrawlAutoMoveProc(cXyz* param_0) {
|
||||
// NONMATCHING
|
||||
cXyz sp70;
|
||||
cXyz sp64;
|
||||
cXyz sp58;
|
||||
cXyz sp4C;
|
||||
cXyz sp40;
|
||||
cXyz sp34;
|
||||
cXyz sp28;
|
||||
f32 spC;
|
||||
s16 spA;
|
||||
s16 sp8;
|
||||
|
||||
f32 temp_f31 = cM_ssin(current.angle.y);
|
||||
f32 temp_f30 = cM_scos(current.angle.y);
|
||||
f32 temp_f29 = cM_ssin(shape_angle.y);
|
||||
f32 temp_f28 = cM_scos(shape_angle.y);
|
||||
|
||||
int var_r29 = 0;
|
||||
|
||||
sp70.x = param_0->x + (95.0f * temp_f31);
|
||||
sp70.y = param_0->y;
|
||||
sp70.z = param_0->z + (95.0f * temp_f30);
|
||||
|
||||
if (!commonLineCheck(param_0, &sp70) || (!checkWolf() && dComIfG_Bgsp().GetWallCode(mLinkLinChk) == 6)) {
|
||||
sp4C.x = sp70.x + (55.0f * temp_f30);
|
||||
sp4C.y = sp70.y;
|
||||
sp4C.z = sp70.z - (55.0f * temp_f31);
|
||||
|
||||
if (checkCrawlSideWall(&sp70, &sp4C, &sp34, &sp28, &spA, &sp8)) {
|
||||
var_r29 |= 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
sp4C.x = param_0->x + (55.0f * temp_f28);
|
||||
sp4C.y = param_0->y;
|
||||
sp4C.z = param_0->z - (55.0f * temp_f29);
|
||||
|
||||
sp40 = (*param_0 * 2.0f) - sp4C;
|
||||
|
||||
if (commonLineCheck(param_0, &sp4C)) {
|
||||
var_r29 |= 8;
|
||||
|
||||
sp58.x = sp40.x + (95.0f * temp_f29);
|
||||
sp58.y = sp40.y;
|
||||
sp58.z = sp40.z + (95.0f * temp_f28);
|
||||
if (!checkCrawlSideWall(&sp40, &sp58, &sp34, &sp28, &spA, &sp8)) {
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
var_r29 |= 4;
|
||||
|
||||
sp58.x = sp4C.x - (95.0f * temp_f29);
|
||||
sp58.y = sp4C.y;
|
||||
sp58.z = sp4C.z - (95.0f * temp_f28);
|
||||
if (!checkCrawlSideWall(&sp4C, &sp58, &sp34, &sp28, &spA, &sp8)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!commonLineCheck(param_0, &sp40)) {
|
||||
var_r29 |= 8;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (cM3d_Len2dSqPntAndSegLine(0.5f * (sp34.x + sp28.x), 0.5f * (sp34.z + sp28.z), sp70.x, sp70.z, param_0->x - (95.0f * temp_f31), param_0->z - (95.0f * temp_f30), &sp64.x, &sp64.z, &spC)) {
|
||||
sp64.y = current.pos.y;
|
||||
if (checkWolf()) {
|
||||
return procWolfLieAutoMoveInit(var_r29, &sp64);
|
||||
} else {
|
||||
return procCrawlAutoMoveInit(var_r29, &sp64);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -88,7 +161,55 @@ BOOL daAlink_c::changeCrawlAutoMoveProc(cXyz* param_0) {
|
|||
* getCrawlMoveVec__9daAlink_cFP4cXyzP4cXyzP4cXyziiPUc */
|
||||
int daAlink_c::getCrawlMoveVec(cXyz* param_0, cXyz* param_1, cXyz* param_2, int param_3,
|
||||
int param_4, u8* param_5) {
|
||||
// NONMATCHING
|
||||
if (commonLineCheck(param_0, param_1) && ((param_4 == 0 && (!checkWolf() || !dComIfGp_checkPlayerStatus0(0, 0x08000000))) || dComIfG_Bgsp().GetWallCode(mLinkLinChk) != 6) && (!checkWolf() || dComIfG_Bgsp().GetWallCode(mLinkLinChk) != 7)) {
|
||||
cM3dGPla sp3C;
|
||||
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &sp3C);
|
||||
|
||||
int temp_r27 = dComIfG_Bgsp().GetSpecialCode(mLinkLinChk);
|
||||
if (cBgW_CheckBWall(sp3C.mNormal.y) || (param_3 == 2 && cBgW_CheckBGround(sp3C.mNormal.y))) {
|
||||
cXyz sp1C = *param_1 - mLinkLinChk.i_GetCross();
|
||||
s16 temp_r26 = sp3C.mNormal.atan2sX_Z();
|
||||
s16 temp_r3 = sp1C.atan2sX_Z();
|
||||
|
||||
if (abs((s16)((temp_r3 + 0x8000) - temp_r26)) > 0x3000) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
f32 temp_f31 = -sp1C.absXZ() * cM_scos(((temp_r3 - temp_r26) - 0x8000));
|
||||
|
||||
param_2->x = temp_f31 * sp3C.mNormal.x;
|
||||
if (param_3 != 1) {
|
||||
param_2->y = 0.0f;
|
||||
} else {
|
||||
param_2->y = sp1C.y;
|
||||
}
|
||||
param_2->z = temp_f31 * sp3C.mNormal.z;
|
||||
|
||||
if (param_5 != NULL && (dKy_pol_argument_get(&mLinkLinChk) & 0x60)) {
|
||||
*param_5 = 3;
|
||||
|
||||
cM3dGPla sp28;
|
||||
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &sp28);
|
||||
|
||||
field_0x311e = sp28.mNormal.atan2sX_Z();
|
||||
|
||||
if (checkIcePolygonDamage(&mLinkLinChk)) {
|
||||
*param_5 |= 0x80;
|
||||
}
|
||||
|
||||
if (dKy_pol_argument_get(&mLinkLinChk) & 0x20) {
|
||||
*param_5 |= 0x40;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (param_3 == 1 && (temp_r27 == 1 || (sp3C.mNormal.y < field_0x3470 && temp_r27 == 2))) {
|
||||
*param_2 = *param_1 - mLinkLinChk.i_GetCross();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -119,9 +240,35 @@ void daAlink_c::crawlBgCheck(cXyz* param_0, cXyz* param_1, int param_2) {
|
|||
|
||||
/* 800F8700-800F88F8 0F3040 01F8+00 2/2 0/0 0/0 .text
|
||||
* checkCrawlSideWall__9daAlink_cFP4cXyzP4cXyzP4cXyzP4cXyzPsPs */
|
||||
void daAlink_c::checkCrawlSideWall(cXyz* param_0, cXyz* param_1, cXyz* param_2, cXyz* param_3,
|
||||
BOOL daAlink_c::checkCrawlSideWall(cXyz* param_0, cXyz* param_1, cXyz* param_2, cXyz* param_3,
|
||||
s16* param_4, s16* param_5) {
|
||||
// NONMATCHING
|
||||
cXyz sp58;
|
||||
cXyz sp4C;
|
||||
|
||||
if (commonLineCheck(param_0, param_1)) {
|
||||
cM3dGPla sp64;
|
||||
*param_2 = mLinkLinChk.i_GetCross();
|
||||
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &sp64);
|
||||
|
||||
*param_4 = sp64.mNormal.atan2sX_Z();
|
||||
|
||||
sp4C = *param_2 + (sp64.mNormal * 95.0f);
|
||||
sp58 = (sp4C + *param_2) * 0.5f;
|
||||
if (commonLineCheck(&sp58, &sp4C)) {
|
||||
*param_3 = mLinkLinChk.i_GetCross();
|
||||
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &sp64);
|
||||
|
||||
*param_5 = sp64.mNormal.atan2sX_Z();
|
||||
|
||||
cXyz sp40 = *param_2 - *param_3;
|
||||
f32 temp_f31 = sp40.abs2XZ();
|
||||
if (cLib_distanceAngleS(*param_4, *param_5) > 0x7F00 && temp_f31 < 9025.0f && temp_f31 > 4900.0f) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 800F88F8-800F89E0 0F3238 00E8+00 6/6 0/0 0/0 .text decideCrawlDoStatus__9daAlink_cFv
|
||||
|
|
@ -171,7 +318,35 @@ 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 */
|
||||
BOOL daAlink_c::checkCrawlInHoll(cXyz* param_0, cXyz* param_1, cXyz* param_2, int param_3) {
|
||||
// NONMATCHING
|
||||
cXyz spC0;
|
||||
cXyz spB4;
|
||||
cXyz spA8;
|
||||
cXyz sp9C;
|
||||
cXyz sp90;
|
||||
cXyz sp84;
|
||||
s16 sp16;
|
||||
s16 sp14;
|
||||
|
||||
cMtx_multVec(mpLinkModel->getBaseTRMtx(), field_0x2f50, &spC0);
|
||||
cMtx_multVec(mpLinkModel->getBaseTRMtx(), field_0x2f54, param_2);
|
||||
|
||||
if (mUnderFrameCtrl[0].getRate() >= 0.0f) {
|
||||
sp90 = (*param_0 - *param_2) * 0.5f;
|
||||
} else if (mUnderFrameCtrl[0].getRate() < 0.0f) {
|
||||
sp90 = (*param_1 - *param_2) * 0.5f;
|
||||
}
|
||||
|
||||
spC0 += sp90;
|
||||
*param_2 += sp90;
|
||||
spB4 = (*param_2 * 2.0f) - spC0;
|
||||
|
||||
if (checkCrawlSideWall(param_2, &spC0, &spA8, &sp9C, &sp16, &sp14) || checkCrawlSideWall(param_2, &spB4, &sp9C, &spA8, &sp14, &sp16)) {
|
||||
field_0x3198 = 1;
|
||||
field_0x37c8 = ((spA8 + sp9C) * 0.5f) - sp90;
|
||||
mProcVar2.field_0x300c = sp16 + 0x4000;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -242,13 +417,82 @@ void daAlink_c::stopHalfMoveAnime(f32 param_0) {
|
|||
|
||||
/* 800F8F84-800F9210 0F38C4 028C+00 2/2 0/0 0/0 .text setCrawlAutoMoveAimPos__9daAlink_cFv */
|
||||
void daAlink_c::setCrawlAutoMoveAimPos() {
|
||||
// NONMATCHING
|
||||
int temp_r30 = getDirectionFromShapeAngle();
|
||||
f32 temp_f31 = cM_ssin(shape_angle.y);
|
||||
f32 temp_f30 = cM_scos(shape_angle.y);
|
||||
|
||||
if (temp_r30 == 2 && (field_0x3198 & 4)) {
|
||||
field_0x37c8.x += 1.5f * (95.0f * temp_f30);
|
||||
field_0x37c8.z -= 1.5f * (95.0f * temp_f31);
|
||||
|
||||
mProcVar2.field_0x300c = current.angle.y + 0x4000;
|
||||
|
||||
if (current.angle.y == shape_angle.y) {
|
||||
mProcVar3.field_0x300e = 1;
|
||||
} else {
|
||||
mProcVar3.field_0x300e = -1;
|
||||
}
|
||||
|
||||
mProcVar0.field_0x3008 = -1;
|
||||
} else if (temp_r30 == 3 && (field_0x3198 & 8)) {
|
||||
field_0x37c8.x -= 1.5f * (95.0f * temp_f30);
|
||||
field_0x37c8.z += 1.5f * (95.0f * temp_f31);
|
||||
|
||||
mProcVar2.field_0x300c = current.angle.y - 0x4000;
|
||||
|
||||
if (current.angle.y == shape_angle.y) {
|
||||
mProcVar3.field_0x300e = 1;
|
||||
} else {
|
||||
mProcVar3.field_0x300e = -1;
|
||||
}
|
||||
|
||||
mProcVar0.field_0x3008 = -1;
|
||||
} else if ((field_0x3198 & 1) && ((shape_angle.y == current.angle.y && temp_r30 == 0) || (shape_angle.y != current.angle.y && temp_r30 == 1))) {
|
||||
field_0x37c8.x += 1.5f * (95.0f * cM_ssin(current.angle.y));
|
||||
field_0x37c8.z += 1.5f * (95.0f * cM_scos(current.angle.y));
|
||||
|
||||
mProcVar2.field_0x300c = shape_angle.y;
|
||||
mProcVar3.field_0x300e = 0;
|
||||
mProcVar0.field_0x3008 = -1;
|
||||
} else if ((shape_angle.y == current.angle.y && temp_r30 == 1) || (shape_angle.y != current.angle.y && temp_r30 == 0)) {
|
||||
current.angle.y += 0x8000;
|
||||
field_0x37c8.x -= 1.5f * (95.0f * cM_ssin(current.angle.y));
|
||||
field_0x37c8.z -= 1.5f * (95.0f * cM_scos(current.angle.y));
|
||||
|
||||
mProcVar2.field_0x300c = shape_angle.y;
|
||||
mProcVar3.field_0x300e = 0;
|
||||
mProcVar0.field_0x3008 = -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* 800F9210-800F9384 0F3B50 0174+00 2/2 0/0 0/0 .text procCrawlStartInit__9daAlink_cFv */
|
||||
int daAlink_c::procCrawlStartInit() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
if (mEquipItem != NO_ITEM) {
|
||||
return procPreActionUnequipInit(PROC_CRAWL_START, NULL);
|
||||
}
|
||||
|
||||
commonProcInit(PROC_CRAWL_START);
|
||||
|
||||
field_0x3588 = l_waitBaseAnime;
|
||||
setSingleAnimeParam(ANM_CRAWL_START, &daAlinkHIO_crouch_c0::m.mCrawlStartAnm);
|
||||
|
||||
mNormalSpeed = 0.0f;
|
||||
shape_angle.y = field_0x306e + 0x8000;
|
||||
current.angle.y = shape_angle.y;
|
||||
current.pos.x = field_0x34ec.x + (35.0f * cM_ssin(field_0x306e));
|
||||
current.pos.z = field_0x34ec.z + (35.0f * cM_scos(field_0x306e));
|
||||
|
||||
if (daAlinkHIO_crouch_c0::m.mCrawlStartAnm.mCheckFrame > daAlinkHIO_crouch_c0::m.mCrawlStartAnm.mEndFrame) {
|
||||
field_0x347c = daAlinkHIO_crouch_c0::m.mCrawlStartAnm.mEndFrame;
|
||||
} else {
|
||||
field_0x347c = daAlinkHIO_crouch_c0::m.mCrawlStartAnm.mCheckFrame;
|
||||
}
|
||||
|
||||
field_0x3478 = 1.0f / (field_0x347c - daAlinkHIO_crouch_c0::m.mCrawlStartAnm.mStartFrame);
|
||||
field_0x33cc = 0.0f;
|
||||
|
||||
dComIfGp_setPlayerStatus0(0, 0x08000000);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800F9384-800F9474 0F3CC4 00F0+00 1/0 0/0 0/0 .text procCrawlStart__9daAlink_cFv */
|
||||
|
|
@ -278,18 +522,152 @@ int daAlink_c::procCrawlStart() {
|
|||
|
||||
/* 800F9474-800F95B8 0F3DB4 0144+00 3/3 0/0 0/0 .text procCrawlMoveInit__9daAlink_cFss */
|
||||
int daAlink_c::procCrawlMoveInit(s16 param_0, s16 param_1) {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
BOOL var_r29;
|
||||
BOOL var_r28 = 0;
|
||||
|
||||
if (mProcID == PROC_CRAWL_AUTO_MOVE) {
|
||||
var_r29 = 0;
|
||||
} else {
|
||||
var_r29 = 1;
|
||||
if (mProcID == PROC_CRAWL_START) {
|
||||
var_r28 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL var_r27;
|
||||
if (dComIfGp_checkPlayerStatus0(0, 0x2000)) {
|
||||
var_r27 = 1;
|
||||
} else {
|
||||
var_r27 = 0;
|
||||
}
|
||||
|
||||
commonProcInit(PROC_CRAWL_MOVE);
|
||||
mProcVar3.field_0x300e = 0;
|
||||
|
||||
if (var_r29 != 0) {
|
||||
f32 var_f31 = getCrawlMoveAnmSpeed();
|
||||
if (var_r28 != 0) {
|
||||
mProcVar3.field_0x300e = 1;
|
||||
} else if (getDirectionFromShapeAngle() == 1) {
|
||||
var_f31 *= -1.0f;
|
||||
}
|
||||
|
||||
current.angle.y = shape_angle.y;
|
||||
setSingleAnimeBaseSpeed(ANM_CRAWL, var_f31, daAlinkHIO_crouch_c0::m.mCrawlInterpolation);
|
||||
}
|
||||
|
||||
field_0x3198 = var_r29 ^ 1;
|
||||
shape_angle.x = param_0;
|
||||
shape_angle.z = param_1;
|
||||
field_0x33cc = 1.0f;
|
||||
field_0x2f99 = 0xC;
|
||||
|
||||
dComIfGp_setPlayerStatus0(0, 0x08000000);
|
||||
|
||||
if (var_r27 != 0) {
|
||||
dComIfGp_setPlayerStatus0(0, 0x2000);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800F95B8-800F99FC 0F3EF8 0444+00 1/0 0/0 0/0 .text procCrawlMove__9daAlink_cFv */
|
||||
int daAlink_c::procCrawlMove() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0];
|
||||
cXyz sp54;
|
||||
cXyz sp48;
|
||||
cXyz sp3C;
|
||||
|
||||
field_0x2f99 = 0xC;
|
||||
decideCrawlDoStatus();
|
||||
|
||||
cMtx_multVec(mpLinkModel->getBaseTRMtx(), &l_crawlStandUpOffset, &sp48);
|
||||
cMtx_multVec(mpLinkModel->getBaseTRMtx(), &l_crawlFrontUpOffset, &sp54);
|
||||
cMtx_multVec(mpLinkModel->getBaseTRMtx(), &l_crawlBackUpOffset, &sp3C);
|
||||
|
||||
cXyz sp30;
|
||||
cXyz sp24;
|
||||
cMtx_multVecSR(mpLinkModel->getBaseTRMtx(), &l_crawlMinSideOffset, &sp24);
|
||||
|
||||
BOOL temp_r25 = checkNotCrawlStand(&sp48);
|
||||
BOOL temp_r24 = checkNotCrawlStand(&sp54);
|
||||
BOOL temp_r23 = checkNotCrawlStand(&sp3C);
|
||||
BOOL var_r27;
|
||||
if (temp_r25 || temp_r24 || temp_r23 || checkNotCrawlStand(&sp54, &sp24) || checkNotCrawlStand(&sp3C, &sp24) || checkNotCrawlStand(&sp48, &sp24)) {
|
||||
var_r27 = 0;
|
||||
onModeFlg(0x04000000);
|
||||
} else {
|
||||
var_r27 = 1;
|
||||
offModeFlg(0x04000000);
|
||||
}
|
||||
|
||||
cM3dGPla sp60;
|
||||
|
||||
if ((var_r27 != 0 && mProcVar3.field_0x300e == 0) || getSlidePolygon(&sp60) || checkCrawlWaterIn()) {
|
||||
procCrawlEndInit(1, shape_angle.x, shape_angle.z);
|
||||
} else {
|
||||
BOOL var_r26 = 0;
|
||||
f32 temp_f31 = getCrawlMoveAnmSpeed();
|
||||
|
||||
if (temp_r29->getRate() > 0.0f) {
|
||||
setWaterInAnmRate(temp_r29, temp_f31);
|
||||
} else if (temp_r29->getRate() < 0.0f) {
|
||||
setWaterInAnmRate(temp_r29, -temp_f31);
|
||||
} else {
|
||||
var_r26 = 1;
|
||||
}
|
||||
|
||||
if (var_r26 == 1 || temp_r29->checkPass(0.0f) || temp_r29->checkPass(17.0f)) {
|
||||
if (mProcVar3.field_0x300e != 0) {
|
||||
mProcVar3.field_0x300e--;
|
||||
setWaterInAnmRate(temp_r29, temp_f31);
|
||||
temp_r29->setLoop(0);
|
||||
} else if (checkInputOnR()) {
|
||||
if (getDirectionFromShapeAngle() != 1) {
|
||||
setWaterInAnmRate(temp_r29, temp_f31);
|
||||
temp_r29->setLoop(0);
|
||||
} else {
|
||||
setWaterInAnmRate(temp_r29, -temp_f31);
|
||||
temp_r29->setLoop(temp_r29->getEnd());
|
||||
}
|
||||
|
||||
initBasAnime();
|
||||
} else if (var_r26 == 0) {
|
||||
stopHalfMoveAnime(17.0f);
|
||||
}
|
||||
}
|
||||
|
||||
int sp8 = field_0x3198;
|
||||
cXyz sp18;
|
||||
field_0x3198 = 0;
|
||||
|
||||
if (checkCrawlInHoll(&sp54, &sp3C, &sp18, var_r27)) {
|
||||
setCrawlMoveHoll();
|
||||
} else if (sp8 != 0 && temp_r25 && temp_r24 && temp_r23 && var_r27 == 0 && changeCrawlAutoMoveProc(&sp18) ) {
|
||||
return 1;
|
||||
} else if (mProcVar3.field_0x300e == 0 && checkInputOnR() && temp_r29->getRate() > 0.0f) {
|
||||
setCrawlMoveAngle();
|
||||
}
|
||||
|
||||
mNormalSpeed = getCrawlMoveSpeed();
|
||||
|
||||
cXyz spC;
|
||||
if (mNormalSpeed < 0.0f) {
|
||||
mNormalSpeed *= -1.0f;
|
||||
current.angle.y = shape_angle.y + 0x8000;
|
||||
cMtx_multVec(mpLinkModel->getBaseTRMtx(), &l_crawlBackOffset, &spC);
|
||||
crawlBgCheck(&spC, &sp3C, 1);
|
||||
} else {
|
||||
cMtx_multVec(mpLinkModel->getBaseTRMtx(), &l_crawlFrontOffset, &spC);
|
||||
crawlBgCheck(&spC, &sp54, 1);
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800F99FC-800F9ABC 0F433C 00C0+00 1/1 0/0 0/0 .text procCrawlAutoMoveInit__9daAlink_cFiP4cXyz */
|
||||
// NONMATCHING - r30 / r31 swap
|
||||
// NONMATCHING - extrwi vs rlwinm
|
||||
int daAlink_c::procCrawlAutoMoveInit(int param_0, cXyz* param_1) {
|
||||
BOOL var_r30 = dComIfGp_checkPlayerStatus0(0, 0x2000);
|
||||
commonProcInit(PROC_CRAWL_AUTO_MOVE);
|
||||
|
|
@ -313,14 +691,143 @@ int daAlink_c::procCrawlAutoMoveInit(int param_0, cXyz* param_1) {
|
|||
|
||||
/* 800F9ABC-800F9D7C 0F43FC 02C0+00 1/0 0/0 0/0 .text procCrawlAutoMove__9daAlink_cFv */
|
||||
int daAlink_c::procCrawlAutoMove() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
field_0x2f99 = 0xC;
|
||||
|
||||
daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0];
|
||||
s16 temp_r27 = shape_angle.y;
|
||||
s16 temp_r26 = current.angle.y;
|
||||
|
||||
if (mProcVar0.field_0x3008 > 0) {
|
||||
if (temp_r29->checkPass(0.0f) || temp_r29->checkPass(17.0f)) {
|
||||
stopHalfMoveAnime(17.0f);
|
||||
mNormalSpeed = 0.0f;
|
||||
} else if (checkAnmEnd(temp_r29)) {
|
||||
mNormalSpeed = 0.0f;
|
||||
mProcVar0.field_0x3008 -= 1;
|
||||
}
|
||||
|
||||
setCrawlMoveDirectionArrow();
|
||||
decideCrawlDoStatus();
|
||||
|
||||
shape_angle.y = temp_r27;
|
||||
current.angle.y = temp_r26;
|
||||
} else if (mProcVar0.field_0x3008 == 0) {
|
||||
setCrawlMoveDirectionArrow();
|
||||
if (checkInputOnR()) {
|
||||
setCrawlAutoMoveAimPos();
|
||||
|
||||
if (mProcVar0.field_0x3008 == -1) {
|
||||
dComIfGp_setAdvanceDirection(0);
|
||||
|
||||
if (shape_angle.y == current.angle.y) {
|
||||
setWaterInAnmRate(temp_r29, 2.0f);
|
||||
temp_r29->setLoop(0);
|
||||
} else {
|
||||
setWaterInAnmRate(temp_r29, -2.0f);
|
||||
temp_r29->setLoop(temp_r29->getEnd());
|
||||
}
|
||||
|
||||
initBasAnime();
|
||||
}
|
||||
} else {
|
||||
decideCrawlDoStatus();
|
||||
shape_angle.y = temp_r27;
|
||||
current.angle.y = temp_r26;
|
||||
}
|
||||
} else {
|
||||
int var_r28 = 1;
|
||||
if (mProcVar1.field_0x300a > 0) {
|
||||
mProcVar1.field_0x300a--;
|
||||
}
|
||||
|
||||
if (mProcVar3.field_0x300e != 0) {
|
||||
if (cLib_addCalcAngleS(&shape_angle.y, mProcVar2.field_0x300c, 5, 0x480, 0x80)) {
|
||||
var_r28 = 0;
|
||||
}
|
||||
|
||||
if (mProcVar3.field_0x300e < 0) {
|
||||
current.angle.y = shape_angle.y + 0x8000;
|
||||
} else {
|
||||
current.angle.y = shape_angle.y;
|
||||
}
|
||||
|
||||
cLib_addCalc(¤t.pos.x, field_0x37c8.x, 0.5f, 3.0f, 1.0f);
|
||||
cLib_addCalc(¤t.pos.z, field_0x37c8.z, 0.5f, 3.0f, 1.0f);
|
||||
}
|
||||
|
||||
cXyz sp8 = field_0x37c8 - current.pos;
|
||||
if (cLib_distanceAngleS(sp8.atan2sX_Z(), current.angle.y) < 0x6000) {
|
||||
var_r28 = 0;
|
||||
}
|
||||
|
||||
mNormalSpeed = getCrawlMoveSpeed();
|
||||
|
||||
if (mNormalSpeed < 0.0f) {
|
||||
mNormalSpeed *= -1.0f;
|
||||
current.angle.y = shape_angle.y + 0x8000;
|
||||
}
|
||||
|
||||
if (var_r28 != 0 || mProcVar1.field_0x300a == 0) {
|
||||
procCrawlMoveInit(shape_angle.x, shape_angle.z);
|
||||
}
|
||||
}
|
||||
|
||||
field_0x310c = shape_angle.y;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800F9D7C-800F9F30 0F46BC 01B4+00 1/1 0/0 0/0 .text procCrawlEndInit__9daAlink_cFiss */
|
||||
int daAlink_c::procCrawlEndInit(int param_0, s16 param_1, s16 param_2) {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
daPy_frameCtrl_c* temp_r29 = &mUnderFrameCtrl[0];
|
||||
f32 var_f31 = temp_r29->getFrame();
|
||||
|
||||
commonProcInit(PROC_CRAWL_END);
|
||||
|
||||
current.angle.y = shape_angle.y;
|
||||
field_0x2f99 = 0xC;
|
||||
|
||||
const daAlinkHIO_anm_c* temp_r30 = &daAlinkHIO_crouch_c0::m.mCrawlEndAnm;
|
||||
|
||||
f32 var_f30;
|
||||
if (param_0 != 0) {
|
||||
var_f30 = temp_r30->mInterpolation;
|
||||
} else {
|
||||
var_f30 = -1.0f;
|
||||
}
|
||||
|
||||
setSingleAnime(ANM_CRAWL_START, temp_r30->mSpeed, temp_r30->mStartFrame, temp_r30->mEndFrame, var_f30);
|
||||
|
||||
if (param_0 == 0) {
|
||||
if (temp_r30->mStartFrame > var_f31) {
|
||||
var_f31 = temp_r30->mStartFrame;
|
||||
} else if (temp_r30->mEndFrame <= var_f31) {
|
||||
var_f31 = temp_r30->mEndFrame;
|
||||
}
|
||||
|
||||
temp_r29->setFrame(var_f31);
|
||||
getNowAnmPackUnder(UNDER_0)->setFrame(var_f31);
|
||||
}
|
||||
|
||||
J3DTransformInfo sp10;
|
||||
getNowAnmPackUnder(UNDER_0)->getTransform(0, &sp10);
|
||||
|
||||
field_0x34d4.x = sp10.mTranslate.x;
|
||||
field_0x34d4.y = sp10.mTranslate.y;
|
||||
field_0x34d4.z = sp10.mTranslate.z;
|
||||
|
||||
mNormalSpeed = 0.0f;
|
||||
shape_angle.x = param_1;
|
||||
shape_angle.z = param_2;
|
||||
|
||||
if (temp_r30->mCheckFrame > temp_r30->mStartFrame) {
|
||||
field_0x347c = temp_r30->mCheckFrame;
|
||||
} else {
|
||||
field_0x347c = temp_r30->mStartFrame;
|
||||
}
|
||||
|
||||
field_0x3478 = 1.0f / (temp_r30->mEndFrame - field_0x347c);
|
||||
field_0x3588 = l_waitBaseAnime;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800F9F30-800F9FDC 0F4870 00AC+00 1/0 0/0 0/0 .text procCrawlEnd__9daAlink_cFv */
|
||||
|
|
|
|||
|
|
@ -4,7 +4,10 @@
|
|||
*/
|
||||
|
||||
#include "d/actor/d_a_alink.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/actor/d_a_horse.h"
|
||||
#include "d/actor/d_a_crod.h"
|
||||
#include "d/d_msg_object.h"
|
||||
|
||||
/* 800D6D94-800D6DA4 0D16D4 0010+00 0/0 0/0 2/2 .text getFreezeR__9daAlink_cCFv */
|
||||
s16 daAlink_c::getFreezeR() const {
|
||||
|
|
@ -928,33 +931,592 @@ int daAlink_c::procDamage() {
|
|||
* procCoLargeDamageInit__9daAlink_cFiissP12dCcD_GObjInfi */
|
||||
int daAlink_c::procCoLargeDamageInit(int param_0, int param_1, s16 param_2, s16 param_3,
|
||||
dCcD_GObjInf* param_4, int param_5) {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
u32 sp10 = checkReinRide();
|
||||
|
||||
if (!commonProcInitNotSameProc(PROC_LARGE_DAMAGE)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (mCopyRodAcKeep.getActor() != NULL) {
|
||||
((daCrod_c*)mCopyRodAcKeep.getActor())->offControll();
|
||||
}
|
||||
|
||||
field_0x3480 = -1.0f;
|
||||
mFallVoiceInit = 0;
|
||||
|
||||
int var_r30;
|
||||
if (param_0 == -3) {
|
||||
current.angle.y = field_0x2ffe;
|
||||
var_r30 = getDirectionFromAngle((current.angle.y - shape_angle.y));
|
||||
|
||||
dComIfGp_getVibration().StartShock(6, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
|
||||
setDamagePointNormal(field_0x318c);
|
||||
onNoResetFlg1(FLG1_THROW_DAMAGE);
|
||||
} else if (param_0 == -4) {
|
||||
var_r30 = 1;
|
||||
current.angle.y = shape_angle.y + 0x8000;
|
||||
} else if (param_0 == -2) {
|
||||
var_r30 = mDemo.getParam0();
|
||||
|
||||
if (var_r30 == 0) {
|
||||
current.angle.y = shape_angle.y;
|
||||
} else if (var_r30 == 2) {
|
||||
current.angle.y = shape_angle.y + 0x4000;
|
||||
} else if (var_r30 == 3) {
|
||||
current.angle.y = shape_angle.y - 0x4000;
|
||||
} else {
|
||||
current.angle.y = shape_angle.y + 0x8000;
|
||||
}
|
||||
} else if (param_0 == -5) {
|
||||
if (param_5 == 1) {
|
||||
onNoResetFlg1(FLG1_ICE_FREEZE);
|
||||
}
|
||||
|
||||
current.angle.y = field_0x311e;
|
||||
var_r30 = getDirectionFromAngle((current.angle.y - shape_angle.y));
|
||||
} else if (param_0 == -1) {
|
||||
if (param_4 != NULL) {
|
||||
cXyz* temp_r3 = getDamageVec(param_4);
|
||||
current.angle.y = temp_r3->atan2sX_Z();
|
||||
|
||||
if (param_4->GetTgHitGObj() != NULL) {
|
||||
if (param_4->GetTgHitGObj()->GetAtMtrl() == dCcD_MTRL_ICE) {
|
||||
onNoResetFlg1(FLG1_ICE_FREEZE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var_r30 = getDirectionFromAngle((current.angle.y - shape_angle.y));
|
||||
} else if (param_0 == -6) {
|
||||
current.angle.y = field_0x3102 + 0x8000;
|
||||
var_r30 = getDirectionFromAngle((current.angle.y - shape_angle.y));
|
||||
offModeFlg(8);
|
||||
field_0x3480 = 1.0f;
|
||||
} else {
|
||||
if (checkWolf()) {
|
||||
if (param_0 == 0x2D) {
|
||||
var_r30 = 1;
|
||||
} else if (param_0 == 0x2E) {
|
||||
var_r30 = 2;
|
||||
} else if (param_0 == 0x2F) {
|
||||
var_r30 = 3;
|
||||
} else {
|
||||
var_r30 = 0;
|
||||
}
|
||||
} else if (param_0 == 0x88) {
|
||||
var_r30 = 1;
|
||||
} else if (param_0 == 0x89) {
|
||||
var_r30 = 2;
|
||||
} else if (param_0 == 0x8A) {
|
||||
var_r30 = 3;
|
||||
} else {
|
||||
var_r30 = 0;
|
||||
}
|
||||
setOldRootQuaternion(param_2, 0, param_3);
|
||||
mFallVoiceInit = 1;
|
||||
}
|
||||
|
||||
if (var_r30 == 0) {
|
||||
if (checkWolf()) {
|
||||
field_0x3198 = 0x29;
|
||||
mProcVar2.field_0x300c = 0;
|
||||
} else {
|
||||
field_0x3198 = 0x84;
|
||||
mProcVar2.field_0x300c = 0x3FFF;
|
||||
}
|
||||
|
||||
mProcVar3.field_0x300e = 1;
|
||||
shape_angle.y = current.angle.y;
|
||||
} else if (var_r30 == 3) {
|
||||
if (checkWolf()) {
|
||||
field_0x3198 = 0x2A;
|
||||
mProcVar2.field_0x300c = 0x2000;
|
||||
} else {
|
||||
field_0x3198 = 0x85;
|
||||
mProcVar2.field_0x300c = 0x3FFF;
|
||||
}
|
||||
|
||||
mProcVar3.field_0x300e = 0;
|
||||
shape_angle.y = current.angle.y + 0x4000;
|
||||
} else if (var_r30 == 2) {
|
||||
if (checkWolf()) {
|
||||
field_0x3198 = 0x2B;
|
||||
mProcVar2.field_0x300c = -0x2000;
|
||||
} else {
|
||||
field_0x3198 = 0x86;
|
||||
mProcVar2.field_0x300c = -0x3FFF;
|
||||
}
|
||||
|
||||
mProcVar3.field_0x300e = 0;
|
||||
shape_angle.y = current.angle.y - 0x4000;
|
||||
} else {
|
||||
if (checkWolf()) {
|
||||
field_0x3198 = 0x28;
|
||||
mProcVar2.field_0x300c = -0x3FFF;
|
||||
} else {
|
||||
field_0x3198 = 0x83;
|
||||
mProcVar2.field_0x300c = -0x3FFF;
|
||||
}
|
||||
|
||||
mProcVar3.field_0x300e = 1;
|
||||
shape_angle.y = current.angle.y + 0x8000;
|
||||
}
|
||||
|
||||
const daAlinkHIO_wlDamLaHu_c1* var_r29;
|
||||
const daAlinkHIO_damLaHu_c1* var_r28;
|
||||
if (checkWolf()) {
|
||||
if (param_1 != 0) {
|
||||
var_r29 = &daAlinkHIO_wlDamLarge_c0::m;
|
||||
} else {
|
||||
var_r29 = &daAlinkHIO_wlDamHuge_c0::m;
|
||||
}
|
||||
|
||||
setSpecialGravity(var_r29->field_0x54, maxFallSpeed, 0);
|
||||
mProcVar4.field_0x3010 = var_r29->field_0x50;
|
||||
field_0x3478 = var_r29->field_0x64;
|
||||
field_0x347c = var_r29->field_0x68;
|
||||
setSingleAnimeWolfBaseMorf((daAlink_c::daAlink_WANM)field_0x3198, var_r29->field_0x58);
|
||||
setFaceBasicTexture(FTANM_UNK_91);
|
||||
} else {
|
||||
if (param_1 != 0) {
|
||||
var_r28 = &daAlinkHIO_damLarge_c0::m;
|
||||
} else {
|
||||
var_r28 = &daAlinkHIO_damHuge_c0::m;
|
||||
}
|
||||
|
||||
setSpecialGravity(var_r28->field_0xA4, maxFallSpeed, 0);
|
||||
mProcVar4.field_0x3010 = var_r28->field_0xA0;
|
||||
field_0x3478 = var_r28->field_0xB4;
|
||||
field_0x347c = var_r28->field_0xB8;
|
||||
setSingleAnimeBaseMorf((daAlink_c::daAlink_ANM)field_0x3198, var_r28->field_0xA8);
|
||||
}
|
||||
|
||||
if (param_0 < 0) {
|
||||
if (checkBoarSingleBattle() && dComIfGp_getHorseActor() != NULL && dComIfGp_getHorseActor()->checkCowHit()) {
|
||||
mNormalSpeed = 80.0f;
|
||||
speed.y = 80.0f;
|
||||
onModeFlg(0x2000);
|
||||
} else if (param_1 == 0 && checkMiddleBossGoronRoom()) {
|
||||
mNormalSpeed = 60.0f;
|
||||
speed.y = 30.0f;
|
||||
} else if (param_0 == -3) {
|
||||
mNormalSpeed = field_0x3408;
|
||||
speed.y = field_0x340c;
|
||||
} else {
|
||||
if (checkWolf()) {
|
||||
mNormalSpeed = var_r29->field_0x5C;
|
||||
speed.y = var_r29->field_0x60;
|
||||
} else {
|
||||
mNormalSpeed = var_r28->field_0xAC;
|
||||
speed.y = var_r28->field_0xB0;
|
||||
}
|
||||
|
||||
if (param_0 == -6) {
|
||||
field_0x3478 = 1000.0f;
|
||||
}
|
||||
}
|
||||
|
||||
if (param_5 != 2) {
|
||||
if (param_0 != -6) {
|
||||
if (checkWolf()) {
|
||||
voiceStart(Z2SE_WL_V_DAMAGE);
|
||||
} else if (checkFreezeDamage()) {
|
||||
voiceStart(Z2SE_AL_V_DAMAGE_FREEZE);
|
||||
} else {
|
||||
voiceStart(Z2SE_AL_V_DAMAGE_L);
|
||||
}
|
||||
}
|
||||
|
||||
if (checkFreezeDamage()) {
|
||||
seStartOnlyReverb(Z2SE_AL_FREEZE);
|
||||
} else {
|
||||
seStartOnlyReverb(Z2SE_AL_DAMAGE_LARGE);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (checkWolf()) {
|
||||
mNormalSpeed = var_r29->field_0x64;
|
||||
} else {
|
||||
mNormalSpeed = var_r28->field_0xB4;
|
||||
}
|
||||
|
||||
current.pos.x += 35.0f * cM_ssin(current.angle.y);
|
||||
current.pos.z += 35.0f * cM_scos(current.angle.y);
|
||||
speed.y = 0.0f;
|
||||
}
|
||||
|
||||
mBodyAngle.set(0, 0, 0);
|
||||
|
||||
mProcVar0.field_0x3008 = 0;
|
||||
mProcVar1.field_0x300a = param_1;
|
||||
mProcVar5.field_0x3012 = 0x14;
|
||||
|
||||
if (checkBoarSingleBattle()) {
|
||||
mLinkAcch.SetWallNone();
|
||||
mLinkAcch.OffLineCheck();
|
||||
onModeFlg(0x4000);
|
||||
}
|
||||
|
||||
if (sp10) {
|
||||
onModeFlg(0x2000);
|
||||
field_0x32cc = 5;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800D9E88-800DA180 0D47C8 02F8+00 1/0 0/0 0/0 .text procCoLargeDamage__9daAlink_cFv */
|
||||
int daAlink_c::procCoLargeDamage() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
if (field_0x32cc != 0) {
|
||||
field_0x32cc--;
|
||||
} else {
|
||||
offModeFlg(0x2000);
|
||||
}
|
||||
|
||||
if (checkWolf() || !checkUnderMove0BckNoArc(ANM_FALL)) {
|
||||
s16* var_r27;
|
||||
if (mProcVar3.field_0x300e != 0) {
|
||||
var_r27 = &field_0x3080;
|
||||
} else {
|
||||
var_r27 = &field_0x3082;
|
||||
}
|
||||
|
||||
cLib_chaseAngleS(var_r27, mProcVar2.field_0x300c, mProcVar4.field_0x3010);
|
||||
}
|
||||
|
||||
cLib_chaseF(&mNormalSpeed, 0.0f, field_0x347c);
|
||||
|
||||
if (mProcVar0.field_0x3008 == 0) {
|
||||
mProcVar0.field_0x3008 = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
offModeFlg(0x2000);
|
||||
|
||||
if (!checkWolf()) {
|
||||
setFallVoice();
|
||||
}
|
||||
|
||||
if ((mLinkAcch.i_ChkGroundHit() || checkEndResetFlg2(ERFLG2_UNK_100)) && !checkBoarSingleBattle()) {
|
||||
if (checkWolf()) {
|
||||
procWolfLargeDamageUpInit(field_0x3198, mProcVar1.field_0x300a, field_0x3080, field_0x3082);
|
||||
} else {
|
||||
BOOL temp_r26 = field_0x3480 > 0.0f;
|
||||
procLargeDamageUpInit(field_0x3198, mProcVar1.field_0x300a, field_0x3080, field_0x3082);
|
||||
|
||||
if (temp_r26) {
|
||||
offModeFlg(8);
|
||||
checkCutLandDamage();
|
||||
}
|
||||
}
|
||||
} else if (checkBoarSingleBattle()) {
|
||||
if (!checkUnderMove0BckNoArc(ANM_FALL) && field_0x2060->getOldFrameRate() < 0.1f) {
|
||||
if (mProcVar5.field_0x3012 != 0) {
|
||||
mProcVar5.field_0x3012--;
|
||||
} else {
|
||||
voiceStart(Z2SE_AL_V_FALL);
|
||||
setSingleAnimeBaseMorf(ANM_FALL, daAlinkHIO_damage_c0::m.mInvertedFallInterpolation);
|
||||
setOldRootQuaternion(field_0x3080, 0, field_0x3082);
|
||||
field_0x3080 = 0;
|
||||
field_0x3082 = 0;
|
||||
}
|
||||
}
|
||||
} else if (mLinkAcch.ChkWallHit() && mNormalSpeed > field_0x3478) {
|
||||
cXyz sp14;
|
||||
cXyz sp8;
|
||||
dBgS_AcchCir* var_r29 = mAcchCir;
|
||||
|
||||
for (int i = 0; i < 3; i++, var_r29++) {
|
||||
if (var_r29->ChkWallHit()) {
|
||||
sp14.set(current.pos.x, current.pos.y + var_r29->GetWallH(), current.pos.z);
|
||||
sp8.set(sp14.x + (cM_ssin(current.angle.y) * (var_r29->GetWallR() + 25.0f)), sp14.y, sp14.z + (cM_scos(current.angle.y) * (var_r29->GetWallR() + 25.0f)));
|
||||
|
||||
if (commonLineCheck(&sp14, &sp8)) {
|
||||
return procCoLargeDamageWallInit(field_0x3198, mProcVar1.field_0x300a, field_0x3080, field_0x3082);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DA180-800DA554 0D4AC0 03D4+00 2/2 0/0 0/0 .text procLargeDamageUpInit__9daAlink_cFiiss */
|
||||
int daAlink_c::procLargeDamageUpInit(int param_0, int param_1, s16 param_2, s16 param_3) {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
if (!commonProcInitNotSameProc(PROC_LARGE_DAMAGE_UP)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const daAlinkHIO_damLaHu_c1* var_r30;
|
||||
if (param_1 != 0) {
|
||||
var_r30 = &daAlinkHIO_damLarge_c0::m;
|
||||
} else {
|
||||
var_r30 = &daAlinkHIO_damHuge_c0::m;
|
||||
}
|
||||
|
||||
mProcVar1.field_0x300a = 0;
|
||||
mProcVar2.field_0x300c = 0;
|
||||
field_0x3198 = param_0;
|
||||
offGoatStopGame();
|
||||
mProcVar4.field_0x3010 = 0;
|
||||
|
||||
if (param_0 == -4) {
|
||||
onNoResetFlg2(FLG2_UNK_1000);
|
||||
mProcVar0.field_0x3008 = 0;
|
||||
mProcVar1.field_0x300a = 1;
|
||||
mProcVar2.field_0x300c = 1;
|
||||
|
||||
voiceStart(Z2SE_AL_V_DAMAGE_COMIC);
|
||||
seStartOnlyReverb(Z2SE_AL_DAMAGE_LARGE);
|
||||
setSingleAnimeBase(ANM_DMG_FBW);
|
||||
|
||||
field_0x32cc = 0x88;
|
||||
field_0x3478 = var_r30->field_0x14.mCheckFrame;
|
||||
field_0x3480 = 39.0f;
|
||||
field_0x3484 = 1000.0f;
|
||||
} else if (param_0 < 0) {
|
||||
daAlink_ANM var_r28;
|
||||
s16 var_r27;
|
||||
f32 var_f29;
|
||||
f32 var_f30;
|
||||
f32 var_f31;
|
||||
|
||||
if (param_0 == -3) {
|
||||
var_r28 = ANM_DMG_AIR_LAND;
|
||||
var_f29 = 0.0f;
|
||||
var_r27 = -1;
|
||||
var_f30 = 5.0f;
|
||||
var_f31 = 1.0f;
|
||||
|
||||
mProcVar0.field_0x3008 = -1;
|
||||
field_0x3478 = var_r30->field_0x0.mCheckFrame;
|
||||
field_0x3480 = 39.0f;
|
||||
field_0x2f9d = 4;
|
||||
field_0x3484 = 18.0f;
|
||||
} else {
|
||||
if (param_0 == -2) {
|
||||
var_f30 = 0.0f;
|
||||
} else {
|
||||
var_f30 = daAlinkHIO_damLarge_c0::m.field_0x14.mInterpolation;
|
||||
}
|
||||
|
||||
field_0x3484 = 9.0f;
|
||||
var_r28 = ANM_DMG_LARGE_LAND;
|
||||
var_f29 = 9.0f;
|
||||
var_r27 = -1;
|
||||
field_0x3478 = var_r30->field_0x14.mCheckFrame;
|
||||
|
||||
if (param_0 == -5 && mDemo.getParam1() > 0) {
|
||||
mProcVar0.field_0x3008 = mDemo.getParam1();
|
||||
var_f31 = 0.0f;
|
||||
} else if (param_0 == -2 && mDemo.getDemoType() == 1) {
|
||||
mProcVar0.field_0x3008 = 0x1E;
|
||||
var_f31 = 0.0f;
|
||||
} else {
|
||||
mProcVar0.field_0x3008 = -1;
|
||||
var_f31 = daAlinkHIO_damage_c0::m.mRecoverStandAnmSpeed;
|
||||
}
|
||||
|
||||
mProcVar1.field_0x300a = 1;
|
||||
mProcVar2.field_0x300c = 1;
|
||||
field_0x3480 = 39.0f;
|
||||
}
|
||||
|
||||
setSingleAnime(var_r28, var_f31, var_f29, var_r27, var_f30);
|
||||
field_0x32cc = var_r28;
|
||||
} else {
|
||||
mProcVar0.field_0x3008 = 0;
|
||||
|
||||
dComIfGp_getVibration().StartShock(6, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
|
||||
seStartMapInfo(Z2SE_BODY_FALL_DOWN);
|
||||
field_0x2f9d = 4;
|
||||
|
||||
if (param_0 == 0x84) {
|
||||
setSingleAnimeParam(ANM_DMG_LARGE_LAND, &var_r30->field_0x14);
|
||||
field_0x3478 = var_r30->field_0x14.mCheckFrame;
|
||||
mProcVar1.field_0x300a = 1;
|
||||
field_0x3480 = 39.0f;
|
||||
field_0x32cc = 0x88;
|
||||
field_0x3484 = 9.0f;
|
||||
} else if (param_0 == 0x85) {
|
||||
setSingleAnimeParam(ANM_DMG_AIR_LEFT_LAND, &var_r30->field_0x28);
|
||||
field_0x3478 = var_r30->field_0x28.mCheckFrame;
|
||||
field_0x3480 = 29.0f;
|
||||
field_0x32cc = 0x89;
|
||||
field_0x3484 = 6.0f;
|
||||
} else if (param_0 == 0x86) {
|
||||
setSingleAnimeParam(ANM_DMG_AIR_RIGHT_LAND, &var_r30->field_0x3C);
|
||||
field_0x3478 = var_r30->field_0x3C.mCheckFrame;
|
||||
field_0x3480 = 29.0f;
|
||||
field_0x32cc = 0x8A;
|
||||
field_0x3484 = 6.0f;
|
||||
} else {
|
||||
setSingleAnimeParam(ANM_DMG_AIR_LAND, &var_r30->field_0x0);
|
||||
field_0x3478 = var_r30->field_0x0.mCheckFrame;
|
||||
field_0x3480 = 39.0f;
|
||||
field_0x32cc = 0x87;
|
||||
field_0x3484 = 18.0f;
|
||||
}
|
||||
|
||||
if (param_1 != 0) {
|
||||
mProcVar4.field_0x3010 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
field_0x33cc = 1.0f;
|
||||
field_0x347c = 2.0f / (field_0x3478 - mUnderFrameCtrl[0].getStart());
|
||||
setOldRootQuaternion(param_2, 0, param_3);
|
||||
mNormalSpeed = 0.0f;
|
||||
current.angle.y = shape_angle.y;
|
||||
setFootEffectProcType(4);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DA554-800DA82C 0D4E94 02D8+00 1/0 0/0 0/0 .text procLargeDamageUp__9daAlink_cFv */
|
||||
int daAlink_c::procLargeDamageUp() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
daPy_frameCtrl_c* temp_r30 = &mUnderFrameCtrl[0];
|
||||
mProcVar4.field_0x3010 = 0;
|
||||
field_0x33cc = field_0x347c * (field_0x3478 - temp_r30->getFrame());
|
||||
onEndResetFlg0(ERFLG0_UNK_8000000);
|
||||
|
||||
if (field_0x3198 == -4) {
|
||||
if (checkNoResetFlg2(FLG2_UNK_1000)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
setSingleAnime(ANM_DMG_LARGE_LAND, daAlinkHIO_damLarge_c0::m.field_0x14.mSpeed, 9.0f, -1, daAlinkHIO_damLarge_c0::m.field_0x14.mInterpolation);
|
||||
field_0x3198 = -3;
|
||||
field_0x347c = 2.0f / (field_0x3478 - 9.0f);
|
||||
}
|
||||
|
||||
if (mProcVar0.field_0x3008 > 0) {
|
||||
mProcVar0.field_0x3008--;
|
||||
|
||||
if (mProcVar0.field_0x3008 == 0) {
|
||||
mProcVar0.field_0x3008 = -1;
|
||||
setWaterInAnmRate(temp_r30, daAlinkHIO_damage_c0::m.mRecoverStandAnmSpeed);
|
||||
temp_r30->offEndFlg();
|
||||
}
|
||||
} else {
|
||||
if (temp_r30->getFrame() > field_0x3480) {
|
||||
field_0x2f92 = 1;
|
||||
field_0x2f93 = 6;
|
||||
}
|
||||
|
||||
if (checkAnmEnd(temp_r30)) {
|
||||
offModeFlg(0x04000000);
|
||||
|
||||
if ((checkEventRun() && mProcVar0.field_0x3008 < 0) || mDemo.getDemoMode() == 0x1B || mDemo.getDemoMode() == 9) {
|
||||
dComIfGp_evmng_cutEnd(field_0x3184);
|
||||
} else {
|
||||
checkNextAction(0);
|
||||
}
|
||||
} else if (temp_r30->getFrame() > field_0x3478) {
|
||||
if (!checkEventRun()) {
|
||||
onModeFlg(4);
|
||||
}
|
||||
|
||||
checkNextAction(1);
|
||||
} else if (mProcVar2.field_0x300c != 0 && temp_r30->checkPass(18.0f)) {
|
||||
voiceStart(Z2SE_AL_V_LANDING_FAIL_2);
|
||||
mProcVar2.field_0x300c = 0;
|
||||
} else if (checkNoResetFlg0(FLG0_UNK_200000)) {
|
||||
onModeFlg(0x04000000);
|
||||
|
||||
if (!dMsgObject_isTalkNowCheck() && temp_r30->getFrame() > 19.0f) {
|
||||
temp_r30->setFrame(19.0f);
|
||||
getNowAnmPackUnder(UNDER_0)->setFrame(19.0f);
|
||||
} else if (dMsgObject_isTalkNowCheck()) {
|
||||
offNoResetFlg0(FLG0_UNK_200000);
|
||||
}
|
||||
} else if (checkEndResetFlg1(ERFLG1_UNK_8000000) && temp_r30->getFrame() > field_0x3484) {
|
||||
temp_r30->setFrame(field_0x3484);
|
||||
getNowAnmPackUnder(UNDER_0)->setFrame(field_0x3484);
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DA82C-800DAC28 0D516C 03FC+00 1/1 0/0 0/0 .text procCoLargeDamageWallInit__9daAlink_cFiiss
|
||||
*/
|
||||
int daAlink_c::procCoLargeDamageWallInit(int param_0, int param_1, s16 param_2, s16 param_3) {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
if (mProcID == PROC_LARGE_DAMAGE_WALL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
cM3dGPla sp18;
|
||||
dComIfG_Bgsp().GetTriPla(mLinkLinChk, &sp18);
|
||||
s16 temp_r26 = sp18.mNormal.atan2sX_Z();
|
||||
|
||||
if (param_0 < 0 || !cBgW_CheckBWall(sp18.mNormal.y) || cLib_distanceAngleS(temp_r26, (current.angle.y - 0x8000)) > cM_deg2s(30.0f)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
commonProcInit(PROC_LARGE_DAMAGE_WALL);
|
||||
|
||||
s16 temp_r29 = cM_atan2s(sp18.mNormal.y, sp18.mNormal.absXZ());
|
||||
|
||||
current.angle.y = temp_r26;
|
||||
current.pos.x = mLinkLinChk.i_GetCross().x;
|
||||
current.pos.z = mLinkLinChk.i_GetCross().z;
|
||||
|
||||
setOldRootQuaternion(param_2, 0, param_3);
|
||||
|
||||
if (checkWolf()) {
|
||||
if (param_0 == 0x29) {
|
||||
field_0x3198 = 0x2D;
|
||||
setSingleAnimeWolfBase(WANM_DMG_AIR_FRONT);
|
||||
field_0x3080 = temp_r29;
|
||||
} else if (param_0 == 0x2A) {
|
||||
field_0x3198 = 0x2E;
|
||||
setSingleAnimeWolf(WANM_DMG_AIR_LEFT_GETUP, 1.0f, 2.0f, 3, 3.0f);
|
||||
field_0x3082 = temp_r29 - 0x4000;
|
||||
} else if (param_0 == 0x2B) {
|
||||
field_0x3198 = 0x2F;
|
||||
setSingleAnimeWolf(WANM_DMG_AIR_RIGHT_GETUP, 1.0f, 2.0f, 3, 3.0f);
|
||||
field_0x3082 = 0x4000 - temp_r29;
|
||||
} else {
|
||||
field_0x3198 = 0x2C;
|
||||
setSingleAnimeWolfBase(WANM_DMG_AIR_BACK);
|
||||
field_0x3080 = -temp_r29;
|
||||
}
|
||||
|
||||
setFaceBasicTexture(FTANM_UNK_91);
|
||||
} else {
|
||||
const daAlinkHIO_damLaHu_c1* var_r28;
|
||||
if (param_1 != 0) {
|
||||
var_r28 = &daAlinkHIO_damLarge_c0::m;
|
||||
} else {
|
||||
var_r28 = &daAlinkHIO_damHuge_c0::m;
|
||||
}
|
||||
|
||||
if (param_0 == 0x84) {
|
||||
field_0x3198 = 0x88;
|
||||
setSingleAnimeParam(ANM_DMG_LARGE_LAND, &var_r28->field_0x64);
|
||||
field_0x3080 = temp_r29 - 0x4000;
|
||||
} else if (param_0 == 0x85) {
|
||||
field_0x3198 = 0x89;
|
||||
setSingleAnimeParam(ANM_DMG_AIR_LEFT_LAND, &var_r28->field_0x78);
|
||||
field_0x3082 = temp_r29 - 0x4000;
|
||||
} else if (param_0 == 0x86) {
|
||||
field_0x3198 = 0x8A;
|
||||
setSingleAnimeParam(ANM_DMG_AIR_RIGHT_LAND, &var_r28->field_0x8C);
|
||||
field_0x3082 = 0x4000 - temp_r29;
|
||||
} else {
|
||||
field_0x3198 = 0x87;
|
||||
setSingleAnimeParam(ANM_DMG_AIR_LAND, &var_r28->field_0x50);
|
||||
field_0x3080 = 0x4000 - temp_r29;
|
||||
}
|
||||
}
|
||||
|
||||
mNormalSpeed = 0.0f;
|
||||
speed.y = 0.0f;
|
||||
setSpecialGravity(0.0f, maxFallSpeed, 0);
|
||||
|
||||
dComIfGp_getVibration().StartShock(6, 0xF, cXyz(0.0f, 1.0f, 0.0f));
|
||||
mProcVar0.field_0x3008 = param_1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DAC28-800DAC84 0D5568 005C+00 1/0 0/0 0/0 .text procCoLargeDamageWall__9daAlink_cFv
|
||||
|
|
@ -1012,8 +1574,50 @@ int daAlink_c::procCoPolyDamage() {
|
|||
|
||||
/* 800DAE10-800DB060 0D5750 0250+00 2/2 0/0 0/0 .text procLandDamageInit__9daAlink_cFi */
|
||||
int daAlink_c::procLandDamageInit(int param_0) {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
f32 var_f31;
|
||||
if (param_0 == 0) {
|
||||
var_f31 = daAlinkHIO_damFall_c0::m.mSmallDmgLandStartFrame;
|
||||
mProcVar0.field_0x3008 = daAlinkHIO_autoJump_c0::m.mSpinJumpLandStopTime;
|
||||
|
||||
if (mProcID == PROC_MAGNE_BOOTS_FLY) {
|
||||
dComIfGp_getVibration().StartShock(6, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
|
||||
} else {
|
||||
dComIfGp_getVibration().StartShock(2, 0xF, cXyz(0.0f, 1.0f, 0.0f));
|
||||
}
|
||||
} else if (param_0 == 1) {
|
||||
if (!checkEventRun()) {
|
||||
setLandDamagePoint(4);
|
||||
}
|
||||
|
||||
var_f31 = daAlinkHIO_damFall_c0::m.mSmallDmgLandStartFrame;
|
||||
mProcVar0.field_0x3008 = daAlinkHIO_damFall_c0::m.mSmallStopTime;
|
||||
dComIfGp_getVibration().StartShock(4, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
|
||||
} else {
|
||||
if (!checkEventRun()) {
|
||||
setLandDamagePoint(8);
|
||||
}
|
||||
|
||||
var_f31 = daAlinkHIO_damFall_c0::m.mLandAnm.mStartFrame;
|
||||
mProcVar0.field_0x3008 = daAlinkHIO_damFall_c0::m.mBigStopTime;
|
||||
dComIfGp_getVibration().StartShock(5, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
|
||||
}
|
||||
|
||||
commonProcInit(PROC_LAND_DAMAGE);
|
||||
mNormalSpeed = 0.0f;
|
||||
|
||||
if (param_0 == 0) {
|
||||
offModeFlg(8);
|
||||
} else {
|
||||
seStartOnlyReverb(JA_SE_LK_FALL_DAMAGE);
|
||||
voiceStart(Z2SE_AL_V_LANDING_FAIL);
|
||||
}
|
||||
|
||||
setSingleAnime(ANM_DMG_FALL, daAlinkHIO_damFall_c0::m.mLandAnm.mSpeed, var_f31, daAlinkHIO_damFall_c0::m.mLandAnm.mEndFrame, daAlinkHIO_damFall_c0::m.mLandAnm.mInterpolation);
|
||||
field_0x3198 = 0;
|
||||
field_0x2f9d = 4;
|
||||
setFootEffectProcType(4);
|
||||
onResetFlg1(RFLG1_UNK_30);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DB060-800DB140 0D59A0 00E0+00 1/0 0/0 0/0 .text procLandDamage__9daAlink_cFv */
|
||||
|
|
@ -1044,14 +1648,123 @@ int daAlink_c::procLandDamage() {
|
|||
/* 800DB140-800DB418 0D5A80 02D8+00 1/1 0/0 0/0 .text
|
||||
* procCoElecDamageInit__9daAlink_cFP10fopAc_ac_cP12dCcD_GObjInfi */
|
||||
int daAlink_c::procCoElecDamageInit(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, int param_2) {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
if (!dComIfGp_event_compulsory(this, NULL, 0xFFEF)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
mDemo.setSpecialDemoType();
|
||||
u32 temp_r27 = checkModeFlg(0x70C52);
|
||||
|
||||
if (mCopyRodAcKeep.getActor() != NULL) {
|
||||
((daCrod_c*)mCopyRodAcKeep.getActor())->offControll();
|
||||
}
|
||||
|
||||
if (param_0 != NULL) {
|
||||
param_0->actor_status |= 0x800;
|
||||
}
|
||||
|
||||
commonProcInit(PROC_ELEC_DAMAGE);
|
||||
mNormalSpeed = 0.0f;
|
||||
mProcVar2.field_0x300c = 0;
|
||||
|
||||
daAlink_ANM var_r29;
|
||||
daAlink_WANM var_r28;
|
||||
if ((mLinkAcch.i_ChkGroundHit() && !temp_r27) || checkMagneBootsOn()) {
|
||||
if (mEquipItem == IRONBALL) {
|
||||
setIronBallWaitUpperAnime(1);
|
||||
}
|
||||
var_r29 = ANM_ELEC_STUN_GND;
|
||||
var_r28 = WANM_DMG_ELEC_GROUND;
|
||||
} else {
|
||||
var_r29 = ANM_ELEC_STUN_AIR;
|
||||
var_r28 = WANM_DMG_ELEC_AIR;
|
||||
|
||||
setSpecialGravity(0.0f, maxFallSpeed, 0);
|
||||
speed.y = 0.0f;
|
||||
|
||||
if (!checkModeFlg(0x40000)) {
|
||||
setJumpMode();
|
||||
} else {
|
||||
dComIfGp_setPlayerStatus0(0, 0x100000);
|
||||
field_0x2f99 = 0xF;
|
||||
field_0x3588 = l_waitBaseAnime;
|
||||
field_0x33b0 = -50.0f;
|
||||
|
||||
if (getZoraSwim()) {
|
||||
current.pos.y += 50.0f;
|
||||
field_0x3080 += 0x4000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!dComIfGp_checkCameraAttentionStatus(field_0x317c, 2) && !dComIfGp_checkCameraAttentionStatus(field_0x317c, 0x20)) {
|
||||
dCam_getBody()->Stop();
|
||||
mProcVar2.field_0x300c = 1;
|
||||
}
|
||||
|
||||
if (checkWolf()) {
|
||||
voiceStart(Z2SE_WL_V_DAMAGE_ELEC);
|
||||
setSingleAnimeWolfBase(var_r28);
|
||||
setFaceBasicTexture(FTANM_UNK_91);
|
||||
} else {
|
||||
voiceStart(Z2SE_AL_V_DAMAGE_ELEC);
|
||||
setSingleAnimeBase(var_r29);
|
||||
}
|
||||
|
||||
mProcVar0.field_0x3008 = 0x2D;
|
||||
mProcVar3.field_0x300e = 3;
|
||||
|
||||
field_0x3198 = checkLargeAttack(param_2) | checkHugeAttack(param_2);
|
||||
|
||||
if (param_1 != NULL) {
|
||||
mProcVar4.field_0x3010 = getDamageVec(param_1)->atan2sX_Z();
|
||||
} else {
|
||||
mProcVar4.field_0x3010 = shape_angle.y + 0x8000;
|
||||
}
|
||||
|
||||
dComIfGp_clearPlayerStatus0(0, 0x4000);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DB418-800DB5B0 0D5D58 0198+00 1/0 0/0 0/0 .text procCoElecDamage__9daAlink_cFv */
|
||||
int daAlink_c::procCoElecDamage() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
seStartOnlyReverbLevel(Z2SE_AL_ELEC_DAMAGE);
|
||||
|
||||
if (checkModeFlg(0x40000) && field_0x2f99 != 0xF) {
|
||||
field_0x2f99 = 7;
|
||||
daPy_addCalcShort(&field_0x3080, 0, 4, 0xC00, 0x180);
|
||||
}
|
||||
|
||||
if (mProcVar3.field_0x300e != 0) {
|
||||
dComIfGp_getVibration().StartQuake(5, 1, cXyz(0.0f, 1.0f, 0.0f));
|
||||
mProcVar3.field_0x300e--;
|
||||
}
|
||||
|
||||
if (mProcVar0.field_0x3008 != 0) {
|
||||
mProcVar0.field_0x3008--;
|
||||
} else {
|
||||
if (mProcVar2.field_0x300c != 0) {
|
||||
dCam_getBody()->Start();
|
||||
}
|
||||
|
||||
resetSpecialEvent();
|
||||
dComIfGp_getVibration().StopQuake(0x1F);
|
||||
|
||||
if (checkModeFlg(2) || field_0x3198 != 0) {
|
||||
current.angle.y = mProcVar4.field_0x3010;
|
||||
procCoLargeDamageInit(-1, 1, 0, 0, NULL, 2);
|
||||
} else if (checkModeFlg(0x40000)) {
|
||||
if (checkWolf()) {
|
||||
procWolfSwimWaitInit(0);
|
||||
} else {
|
||||
procSwimWaitInit(0);
|
||||
}
|
||||
} else if (mProcID == PROC_ELEC_DAMAGE) {
|
||||
checkWaitAction();
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DB5B0-800DB610 0D5EF0 0060+00 2/2 0/0 0/0 .text procStEscapeInit__9daAlink_cFv */
|
||||
|
|
@ -1082,15 +1795,97 @@ int daAlink_c::procStEscape() {
|
|||
}
|
||||
|
||||
/* 800DB6A4-800DB860 0D5FE4 01BC+00 1/1 0/0 0/0 .text procDkCaughtInit__9daAlink_cFUi */
|
||||
int daAlink_c::procDkCaughtInit(unsigned int param_0) {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
int daAlink_c::procDkCaughtInit(fpc_ProcID param_0) {
|
||||
if (!commonProcInitNotSameProc(PROC_DK_CAUGHT)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (checkZeroSpeedF()) {
|
||||
onModeFlg(1);
|
||||
}
|
||||
|
||||
setSingleAnimeBase(ANM_WAIT_D_B);
|
||||
onNoResetFlg1(FLG1_UNK_1);
|
||||
|
||||
field_0x28f8 = param_0;
|
||||
mNormalSpeed = 0.0f;
|
||||
mProcVar0.field_0x3008 = daAlinkHIO_damCaught_c0::m.field_0x14;
|
||||
|
||||
fopAc_ac_c* temp_r3 = fopAcM_SearchByID(field_0x28f8);
|
||||
if (temp_r3 != NULL) {
|
||||
field_0x3478 = temp_r3->home.pos.abs(current.pos);
|
||||
}
|
||||
|
||||
field_0x594 = 13.0f;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DB860-800DBC98 0D61A0 0438+00 1/0 0/0 0/0 .text procDkCaught__9daAlink_cFv */
|
||||
int daAlink_c::procDkCaught() {
|
||||
// NONMATCHING
|
||||
return 0;
|
||||
fopAc_ac_c* temp_r3 = fopAcM_SearchByID(field_0x28f8);
|
||||
if (temp_r3 == NULL || !checkNoResetFlg1(FLG1_UNK_1)) {
|
||||
voiceStart(Z2SE_AL_V_ZENTEN_FAIL_2);
|
||||
return procFrontRollSuccessInit();
|
||||
}
|
||||
|
||||
if (checkCaughtEscapeCutTurn()) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
cXyz sp38 = temp_r3->home.pos - current.pos;
|
||||
multVecMagneBootInvMtx(&sp38);
|
||||
cLib_addCalcAngleS(&shape_angle.y, sp38.atan2sX_Z(), 2, 0x2000, 0x800);
|
||||
|
||||
cXyz sp2C = current.pos - temp_r3->home.pos;
|
||||
f32 temp_f1 = sp2C.abs();
|
||||
if (temp_f1 > field_0x3478) {
|
||||
current.pos = temp_r3->home.pos + ((sp2C * field_0x3478) / temp_f1);
|
||||
}
|
||||
|
||||
f32 var_f30;
|
||||
if (checkInputOnR()) {
|
||||
if (getDirectionFromCurrentAngle() == 1) {
|
||||
current.angle.y += 0x8000;
|
||||
mNormalSpeed *= -1.0f;
|
||||
}
|
||||
|
||||
if (checkZeroSpeedF()) {
|
||||
current.angle.y = field_0x2fe2;
|
||||
}
|
||||
|
||||
s16 temp_r28 = current.angle.y;
|
||||
cLib_addCalcAngleS(¤t.angle.y, field_0x2fe2, daAlinkHIO_atnMove_c0::m.mTurnAngleRate, daAlinkHIO_atnMove_c0::m.mMaxTurnAngle, daAlinkHIO_atnMove_c0::m.mMinTurnAngle);
|
||||
var_f30 = daAlinkHIO_atnMove_c0::m.mAcceleration * field_0x33a8 * cM_scos((current.angle.y - temp_r28));
|
||||
} else {
|
||||
var_f30 = 0.0f;
|
||||
}
|
||||
|
||||
setNormalSpeedF(var_f30, daAlinkHIO_atnMove_c0::m.mDeceleration);
|
||||
|
||||
if (checkZeroSpeedF()) {
|
||||
onModeFlg(1);
|
||||
} else {
|
||||
offModeFlg(1);
|
||||
}
|
||||
|
||||
mProcVar0.field_0x3008--;
|
||||
|
||||
if (escapeTrigger()) {
|
||||
mProcVar0.field_0x3008 -= daAlinkHIO_damCaught_c0::m.field_0x16;
|
||||
}
|
||||
|
||||
if (checkInputOnR() && abs((s16)(mStickAngle - mPrevStickAngle)) > 0x1000) {
|
||||
mProcVar0.field_0x3008 -= daAlinkHIO_damCaught_c0::m.field_0x16;
|
||||
}
|
||||
|
||||
if (mProcVar0.field_0x3008 < 0) {
|
||||
voiceStart(Z2SE_AL_V_ZENTEN_FAIL_2);
|
||||
procFrontRollSuccessInit();
|
||||
} else {
|
||||
voiceStartLevel(Z2SE_AL_V_BITTEN_LOOP);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800DBC98-800DBD1C 0D65D8 0084+00 2/2 0/0 0/0 .text setScreamWaitAnime__9daAlink_cFv */
|
||||
|
|
|
|||
Loading…
Reference in New Issue