player_crawl and player_hammer 100%, misc player cleanup

This commit is contained in:
LagoLunatic
2025-05-07 23:00:35 -04:00
parent 224b83ed8c
commit 534f5d4e72
12 changed files with 549 additions and 647 deletions
+3 -1
View File
@@ -11,7 +11,7 @@ public:
};
void getMiniGameRestArrow() {}
int getMiniGameRestArrow() { return 10 - mB78; }
void isAnm(signed char) {}
void modeProcInit(int) {}
@@ -128,6 +128,8 @@ public:
public:
/* Place member variables here */
/* 0x290 */ u8 m290[0xB78 - 0x290];
/* 0xB78 */ int mB78;
};
class daNpc_So_HIO_c {
+1 -4
View File
@@ -469,6 +469,7 @@ public:
void offConfuse() { offNoResetFlg1(daPyFlg1_CONFUSE); }
bool checkConfuse() const { return checkNoResetFlg1(daPyFlg1_CONFUSE); }
bool checkFreezeState() const { return checkNoResetFlg1(daPyFlg1_FREEZE_STATE); }
bool checkUseArrowEffect() const { return checkNoResetFlg1(daPyFlg1_USE_ARROW_EFFECT); }
void onUseArrowEffect() { onNoResetFlg1(daPyFlg1_USE_ARROW_EFFECT); }
void offUseArrowEffect() { offNoResetFlg1(daPyFlg1_USE_ARROW_EFFECT); }
void onLetterReadEyeMove() { onNoResetFlg1(daPyFlg1_LETTER_READ_EYE_MOVE); }
@@ -516,13 +517,9 @@ public:
void checkBowMiniGame() const {}
void checkSoupPowerUp() const {}
void checkSubjectAccept() const {}
void checkUseArrowEffect() const {}
void getRopeJumpLand() const {}
void checkRopeForceEnd() const {}
// This class's weak virtual functions tend to cause weak function ordering issues in TUs that use them.
// The proper way to match this is still unknown, so some of the definitions have been temporarily commented out
// here so that they can be fakematched instead.
virtual MtxP getLeftHandMatrix() = 0;
virtual MtxP getRightHandMatrix() = 0;
virtual f32 getGroundY() = 0;
+1 -1
View File
@@ -1287,7 +1287,7 @@ void daItem_c::mode_wait() {
break;
}
if (mAcch.ChkWaterHit() && mAcch.m_wtr.GetHeight() > current.pos.y ||
if ((mAcch.ChkWaterHit() && mAcch.m_wtr.GetHeight() > current.pos.y) ||
(daSea_ChkArea(current.pos.x, current.pos.z) && daSea_calcWave(current.pos.x, current.pos.z) > current.pos.y))
{
mode_water_init();
+8 -10
View File
@@ -11,6 +11,7 @@
*/
#include "d/actor/d_a_arrow.h"
#include "d/actor/d_a_npc_so.h"
#include "d/actor/d_a_player_HIO.h"
#include "d/actor/d_a_player_main.h"
#include "d/d_procname.h"
@@ -66,19 +67,16 @@ BOOL daPy_lk_c::checkBowAnime() const {
/* 8014A080-8014A180 .text makeArrow__9daPy_lk_cFv */
void daPy_lk_c::makeArrow() {
/* Nonmatching - missing "cntlzw" instruction, "getItemPartner" */
s32 uVar1 = (0x44 - mDemo.getDemoMode()) >> 5 & 0xff;
if (((uVar1 == 0) && (dComIfGs_getArrowNum() != 0)) ||
((uVar1 != 0 && ((((fopAc_ac_c*)dComIfGp_event_getItemPartner() != 0 &&
(fopAcM_GetName(dComIfGp_event_getPt1()) == PROC_NPC_SO)) &&
(0 < 10 - (dComIfGp_event_getPt1()->actor_type)))))))
/* Nonmatching - weird gameinfo load */
BOOL r4 = mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK44_e;
if ((!r4 && dComIfGs_getArrowNum() != 0) ||
(r4 && dComIfGp_event_getPt1() != NULL && fopAcM_GetName(dComIfGp_event_getPt1()) == PROC_NPC_SO &&
((daNpc_So_c*)dComIfGp_event_getPt1())->getMiniGameRestArrow() > 0))
{
fopAc_ac_c* arrow_p = (fopAc_ac_c*)fopAcM_fastCreate(PROC_ARROW, 0, &current.pos,
current.roomNo, NULL, NULL, -1, NULL);
fopAc_ac_c* arrow_p = (fopAc_ac_c*)fopAcM_fastCreate(PROC_ARROW, 0, &current.pos, current.roomNo);
mActorKeepEquip.setData(arrow_p);
}
m355C = 0;
return;
}
/* 8014A180-8014A1CC .text deleteArrow__9daPy_lk_cFv */
@@ -172,7 +170,7 @@ BOOL daPy_lk_c::checkNextActionBowReady() {
if (mFrameCtrlUpper[UPPER_MOVE2_e].getRate() < 0.01f) {
if (m355E == 0 && bowButton() &&
(mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK44_e || mEquipItem == getReadyItem()) &&
!checkNoResetFlg1(daPyFlg1_USE_ARROW_EFFECT))
!checkUseArrowEffect())
{
setBowReloadAnime();
makeArrow();
+195 -201
View File
@@ -35,8 +35,7 @@ f32 daPy_lk_c::getCrawlMoveSpeed() {
if (fVar1 >= 17.0f) {
fVar1 = fVar1 - 17.0f;
}
return (daPy_HIO_crouch_c0::m.field_0x3C * mFrameCtrlUnder[UNDER_MOVE0_e].getRate()) *
cM_fsin((M_PI / 17) * fVar1);
return (daPy_HIO_crouch_c0::m.field_0x3C * mFrameCtrlUnder[UNDER_MOVE0_e].getRate()) * cM_fsin((M_PI / 17) * fVar1);
}
/* 80138868-801389D0 .text setCrawlMoveDirectionArrow__9daPy_lk_cFv */
@@ -145,9 +144,17 @@ BOOL daPy_lk_c::changeCrawlAutoMoveProc(cXyz* param_1) {
var_r29 |= 8;
}
}
if (cM3d_Len2dSqPntAndSegLine(0.5f * (sp34.x + sp28.x), 0.5f * (sp34.z + sp28.z), sp70.x,
sp70.z, param_1->x - (75.0f * temp_f31),
param_1->z - (75.0f * temp_f30), &sp64.x, &sp64.z, &spC))
if (cM3d_Len2dSqPntAndSegLine(
0.5f * (sp34.x + sp28.x),
0.5f * (sp34.z + sp28.z),
sp70.x,
sp70.z,
param_1->x - (75.0f * temp_f31),
param_1->z - (75.0f * temp_f30),
&sp64.x,
&sp64.z,
&spC
))
{
sp64.y = current.pos.y;
return procCrawlAutoMove_init(var_r29, &sp64);
@@ -163,7 +170,7 @@ int daPy_lk_c::getCrawlMoveVec(cXyz* param_0, cXyz* param_1, cXyz* param_2) {
int iVar4 = dComIfG_Bgsp()->GetSpecialCode(mLinkLinChk);
f32 fVar1 = triPla->GetNP()->y;
bool bVar2;
if (!((fVar1 >= 0.5f) || (fVar1 < -0.8f))) {
if (!(fVar1 >= 0.5f || fVar1 < -0.8f)) {
bVar2 = true;
} else {
bVar2 = false;
@@ -175,7 +182,7 @@ int daPy_lk_c::getCrawlMoveVec(cXyz* param_0, cXyz* param_1, cXyz* param_2) {
param_2->y = local_3c.y;
param_2->z = -dVar7 * triPla->GetNP()->z;
return true;
} else if ((iVar4 == 1) || (fVar1 < 0.643832f && (iVar4 == 2))) {
} else if (iVar4 == 1 || (fVar1 < 0.643832f && iVar4 == 2)) {
*param_2 = (*param_1 - mLinkLinChk.GetCross());
return true;
}
@@ -195,7 +202,7 @@ void daPy_lk_c::crawlBgCheck(cXyz* param_0, cXyz* param_1) {
iVar1 = getCrawlMoveVec(&cStack_50, param_0, &cStack_44);
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_top_up_offset, &cStack_50);
iVar2 = getCrawlMoveVec(&cStack_50, param_1, &cStack_38);
if ((iVar1 != 0) && (iVar2 != 0)) {
if (iVar1 != 0 && iVar2 != 0) {
if (cStack_44.abs2() > cStack_38.abs()) {
current.pos -= cStack_44;
} else {
@@ -209,7 +216,9 @@ void daPy_lk_c::crawlBgCheck(cXyz* param_0, cXyz* param_1) {
}
/* 801390B8-801392BC .text checkCrawlSideWall__9daPy_lk_cFP4cXyzP4cXyzP4cXyzP4cXyzPsPs */
BOOL daPy_lk_c::checkCrawlSideWall(cXyz* param_1, cXyz* param_2, cXyz* param_3, cXyz* param_4, s16* param_5, s16* param_6) {
BOOL daPy_lk_c::checkCrawlSideWall(
cXyz* param_1, cXyz* param_2, cXyz* param_3, cXyz* param_4, s16* param_5, s16* param_6
) {
cXyz local_78;
cXyz local_90;
@@ -225,11 +234,9 @@ BOOL daPy_lk_c::checkCrawlSideWall(cXyz* param_1, cXyz* param_2, cXyz* param_3,
*param_4 = mLinkLinChk.GetCross();
pfVar1 = dComIfG_Bgsp()->GetTriPla(mLinkLinChk);
*param_6 = cM_atan2s(pfVar1->GetNP()->x, pfVar1->GetNP()->z);
cXyz local_9c = (*param_3 - *param_4);
cXyz local_9c = *param_3 - *param_4;
f32 temp_f31 = local_9c.abs2XZ();
if (cLib_distanceAngleS(*param_5, *param_6) > 0x7F00 && temp_f31 < 5625.0f &&
temp_f31 > 3600.0f)
{
if (cLib_distanceAngleS(*param_5, *param_6) > 0x7F00 && temp_f31 < 5625.0f && temp_f31 > 3600.0f) {
return true;
}
}
@@ -242,7 +249,7 @@ void daPy_lk_c::setDoStatusCrawl() {
dComIfGp_setRStatus(dActStts_CROUCH_e);
if (dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x80)) {
dComIfGp_setAStatus(dActStts_RETURN_e);
if (checkSubjectEnd(1) || (m35D0 > current.pos.y)) {
if (checkSubjectEnd(1) || m35D0 > current.pos.y) {
dComIfGp_clearPlayerStatus0(0, daPyStts0_UNK2000_e);
} else {
dComIfGp_setPlayerStatus0(0, daPyStts0_UNK2000_e);
@@ -250,15 +257,13 @@ void daPy_lk_c::setDoStatusCrawl() {
} else if (dCam_getBody()->ChangeModeOK(4)) {
if (m35D0 <= current.pos.y) {
onResetFlg0(daPyRFlg0_UNK4000000);
if (((dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x1000))) &&
(!dComIfGp_event_runCheck()))
{
if (dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x1000) && !dComIfGp_event_runCheck()) {
setSubjectMode();
}
}
}
if ((dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x80)) &&
((mCurProc != daPyProc_CRAWL_MOVE_e || (mProcVar0.m3570 == 0))))
if (dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x80) &&
(mCurProc != daPyProc_CRAWL_MOVE_e || mProcVar0.m3570 == 0))
{
setBodyAngleToCamera();
if (mBodyAngle.x > 0) {
@@ -267,7 +272,6 @@ void daPy_lk_c::setDoStatusCrawl() {
} else {
mBodyAngle.x = 0;
}
return;
}
/* 80139424-801394F0 .text procCrawlStart_init__9daPy_lk_cFv */
@@ -301,9 +305,9 @@ BOOL daPy_lk_c::procCrawlStart() {
local_20.y = 50.0f;
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &local_20, &cStack_38);
crawlBgCheck(&cStack_38, &cStack_38);
if ((!spActionButton()) || (m35D0 > 15.0f + current.pos.y)) {
if (!spActionButton() || m35D0 > 15.0f + current.pos.y) {
procCrawlEnd_init(0, shape_angle.x, shape_angle.z);
} else if ((mStickDistance > 0.05f) &&
} else if (mStickDistance > 0.05f &&
((mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) ||
(mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() > daPy_HIO_crouch_c0::m.field_0x28)))
{
@@ -372,10 +376,8 @@ BOOL daPy_lk_c::procCrawlMove_init(s16 param_0, s16 param_1) {
/* 80139878-8013A004 .text procCrawlMove__9daPy_lk_cFv */
BOOL daPy_lk_c::procCrawlMove() {
/* Nonmatching - cXyz */
J3DFrameCtrl& frameCtrl = mFrameCtrlUnder[UNDER_MOVE0_e];
float fVar1;
short sVar3;
BOOL bVar4;
BOOL bVar5;
int iVar6;
@@ -383,25 +385,32 @@ BOOL daPy_lk_c::procCrawlMove() {
int iVar8;
int iVar9;
f32 dVar11;
cXyz aVStack_3c;
cXyz cStack_48;
cXyz VStack_54;
cXyz cStack_60;
cXyz cStack_6c;
cXyz cStack_d8;
cXyz sp124;
cXyz sp118;
cXyz sp10C;
cXyz sp100;
cXyz spF4;
cXyz spE8;
cXyz spDC;
cXyz spD0;
cXyz spC4;
cXyz spB8;
cXyz spAC;
cXyz spA0;
cXyz sp94;
cXyz sp88;
setDoStatusCrawl();
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_stand_up_offset, &cStack_48);
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_front_up_offset, &aVStack_3c);
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_back_up_offset, &VStack_54);
mDoMtx_multVecSR(mpCLModel->getBaseTRMtx(), &l_crawl_min_side_offset, &cStack_60);
iVar6 = checkNotCrawlStand(&cStack_48);
iVar7 = checkNotCrawlStand(&aVStack_3c);
iVar8 = checkNotCrawlStand(&VStack_54);
if (((((iVar6 != 0) || (iVar7 != 0)) || (iVar8 != 0)) ||
((checkNotCrawlStand(&aVStack_3c, &cStack_60) ||
(checkNotCrawlStand(&VStack_54, &cStack_60))))) ||
(checkNotCrawlStand(&cStack_48, &cStack_60)))
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_stand_up_offset, &sp118);
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_front_up_offset, &sp124);
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_back_up_offset, &sp10C);
mDoMtx_multVecSR(mpCLModel->getBaseTRMtx(), &l_crawl_min_side_offset, &sp100);
iVar6 = checkNotCrawlStand(&sp118);
iVar7 = checkNotCrawlStand(&sp124);
iVar8 = checkNotCrawlStand(&sp10C);
if ((((iVar6 != 0 || iVar7 != 0) || iVar8 != 0) ||
(checkNotCrawlStand(&sp124, &sp100) || checkNotCrawlStand(&sp10C, &sp100))) ||
checkNotCrawlStand(&sp118, &sp100))
{
bVar5 = false;
onModeFlg(ModeFlg_04000000);
@@ -409,9 +418,7 @@ BOOL daPy_lk_c::procCrawlMove() {
bVar5 = true;
offModeFlg(ModeFlg_04000000);
}
if (((bVar5 != false) && (!spActionButton())) ||
((getSlidePolygon() != NULL || (m35D0 > current.pos.y + 15.0f))))
{
if ((bVar5 != false && !spActionButton()) || (getSlidePolygon() != NULL || m35D0 > current.pos.y + 15.0f)) {
procCrawlEnd_init(1, shape_angle.x, shape_angle.z);
} else {
bVar4 = false;
@@ -423,7 +430,7 @@ BOOL daPy_lk_c::procCrawlMove() {
} else {
bVar4 = true;
}
if (((bVar4 == true) || (frameCtrl.checkPass(0.0f))) || (frameCtrl.checkPass(17.0f))) {
if ((bVar4 == true || frameCtrl.checkPass(0.0f)) || frameCtrl.checkPass(17.0f)) {
if (mStickDistance > 0.05f) {
if (getDirectionFromShapeAngle() != 1) {
frameCtrl.setRate(dVar11);
@@ -433,49 +440,42 @@ BOOL daPy_lk_c::procCrawlMove() {
frameCtrl.setLoop(frameCtrl.getEnd());
}
initSeAnime();
} else {
if (!bVar4) {
if (frameCtrl.checkPass(0.0f)) {
fVar1 = 0.0f;
} else {
fVar1 = 17.0f;
}
frameCtrl.setRate(0.0f);
frameCtrl.setFrame(fVar1);
((mAnmRatioUnder[UNDER_MOVE0_e]).getAnmTransform())->setFrame(fVar1);
} else if (!bVar4) {
if (frameCtrl.checkPass(0.0f)) {
fVar1 = 0.0f;
} else {
fVar1 = 17.0f;
}
frameCtrl.setRate(0.0f);
frameCtrl.setFrame(fVar1);
((mAnmRatioUnder[UNDER_MOVE0_e]).getAnmTransform())->setFrame(fVar1);
}
}
iVar9 = mProcVar0.m3570;
mProcVar0.m3570 = 0;
cXyz spC0;
cXyz spB4;
cXyz spA8;
cXyz sp9C;
cXyz sp90;
s16 sp16;
s16 sp14;
s16 sp0A;
s16 sp08;
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_side_offset, &spC0);
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_top_up_offset, &cStack_6c);
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_side_offset, &spE8);
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_top_up_offset, &spF4);
if (frameCtrl.getRate() >= 0.0f) {
sp90 = (aVStack_3c - cStack_6c) * 0.5f;
spB8 = (sp124 - spF4) * 0.5f;
} else if (frameCtrl.getRate() < 0.0f) {
sp90 = (cStack_48 - cStack_6c) * 0.5f;
spB8 = (sp10C - spF4) * 0.5f;
}
spC0 += sp90;
cStack_6c += sp90;
spB4 = (cStack_6c * 2.0f) - spC0;
spE8 += spB8;
spF4 += spB8;
spDC = (spF4 * 2.0f) - spE8;
if (((iVar9 == 0) && checkCrawlSideWall(&cStack_6c, &spC0, &spA8, &sp9C, &sp16, &sp14)) ||
checkCrawlSideWall(&cStack_6c, &spB4, &sp9C, &spA8, &sp14, &sp16))
if (!bVar5 && (checkCrawlSideWall(&spF4, &spE8, &spD0, &spC4, &sp0A, &sp08) ||
checkCrawlSideWall(&spF4, &spDC, &spC4, &spD0, &sp08, &sp0A)))
{
mProcVar0.m3570 = 1;
mResetFlg0 = mResetFlg0 | 0x1000;
m370C = ((spA8 + sp9C) * 0.5f) - sp90;
m34D4 = sp16 + 0x4000;
m370C = ((spD0 + spC4) * 0.5f) - spB8;
m34D4 = sp0A + 0x4000;
}
if (mProcVar0.m3570 != 0) {
@@ -492,42 +492,37 @@ BOOL daPy_lk_c::procCrawlMove() {
cLib_addCalc(&current.pos.z, m370C.z, 0.5f, 10.0f, 1.0f);
}
} else {
if (((iVar9 != 0) && (iVar6 != 0)) &&
((iVar7 != 0 &&
((iVar8 != 0 && (iVar6 = changeCrawlAutoMoveProc(&cStack_6c), iVar6 != 0))))))
{
if (iVar9 != 0 && iVar6 != 0 && iVar7 != 0 && iVar8 != 0 && changeCrawlAutoMoveProc(&spF4)) {
return true;
}
if ((mStickDistance > 0.05f) && (frameCtrl.getRate() > 0.0f)) {
cXyz sp20;
cXyz sp2C;
cXyz sp38;
sVar3 = shape_angle.y;
if (mStickDistance > 0.05f && (frameCtrl.getRate() > 0.0f)) {
s16 r24 = shape_angle.y;
cLib_addCalcAngleS(&shape_angle.y, m34E8, daPy_HIO_crouch_c0::m.field_0x8,
daPy_HIO_crouch_c0::m.field_0xA,
daPy_HIO_crouch_c0::m.field_0xC);
cLib_addCalcAngleS(
&shape_angle.y,
m34E8,
daPy_HIO_crouch_c0::m.field_0x8,
daPy_HIO_crouch_c0::m.field_0xA,
daPy_HIO_crouch_c0::m.field_0xC
);
if (sVar3 != shape_angle.y) {
if ((s16)(sVar3 - shape_angle.y) > 0) {
cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_lside_front_offset, &sp20);
cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_lside_offset, &sp38);
if (shape_angle.y != r24) {
if ((s16)(shape_angle.y - r24) > 0) {
cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_lside_front_offset, &spAC);
cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_lside_offset, &sp94);
} else {
cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_rside_front_offset, &sp20);
cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_rside_offset, &sp38);
cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_rside_front_offset, &spAC);
cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_rside_offset, &sp94);
}
mGndChk.SetPos(&sp20);
sp2C.set(sp20.x - sp38.x, dComIfG_Bgsp()->GroundCross(&mGndChk) - sp38.y,
sp20.z - sp38.z);
mGndChk.SetPos(&spAC);
spA0.set(spAC.x - sp94.x, dComIfG_Bgsp()->GroundCross(&mGndChk) - sp94.y, spAC.z - sp94.z);
if (cLib_distanceAngleS((cM_atan2s(-sp2C.x, sp2C.absXZ())), shape_angle.x) >
0x800)
{
shape_angle.y = sVar3;
if (cLib_distanceAngleS((cM_atan2s(-spA0.y, spA0.absXZ())), shape_angle.x) > 0x800) {
shape_angle.y = r24;
}
current.angle.y = shape_angle.y;
}
current.angle.y = shape_angle.y;
}
}
dVar11 = getCrawlMoveSpeed();
@@ -535,11 +530,11 @@ BOOL daPy_lk_c::procCrawlMove() {
if (mVelocity < 0.0f) {
mVelocity *= -1.0f;
current.angle.y = shape_angle.y + 0x8000;
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_back_offset, &cStack_d8);
crawlBgCheck(&cStack_d8, &VStack_54);
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_back_offset, &sp88);
crawlBgCheck(&sp88, &sp10C);
} else {
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_front_offset, &cStack_d8);
crawlBgCheck(&cStack_d8, &aVStack_3c);
mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_front_offset, &sp88);
crawlBgCheck(&sp88, &sp124);
}
}
return true;
@@ -569,7 +564,6 @@ BOOL daPy_lk_c::procCrawlAutoMove_init(int param_0, cXyz* param_1) {
/* 8013A0F0-8013A630 .text procCrawlAutoMove__9daPy_lk_cFv */
BOOL daPy_lk_c::procCrawlAutoMove() {
/* Nonmatching */
f32 fVar2;
f32 fVar3;
@@ -579,7 +573,7 @@ BOOL daPy_lk_c::procCrawlAutoMove() {
s16 sVar4 = shape_angle.y;
s16 sVar5 = current.angle.y;
if (m34D0 > 0) {
if ((frameCtrl.checkPass(0.0f)) || (frameCtrl.checkPass(17.0f))) {
if (frameCtrl.checkPass(0.0f) || frameCtrl.checkPass(17.0f)) {
fVar3 = 0.0f;
if (frameCtrl.checkPass(0.0f)) {
fVar2 = 0.0f;
@@ -590,105 +584,102 @@ BOOL daPy_lk_c::procCrawlAutoMove() {
frameCtrl.setFrame(fVar2);
mAnmRatioUnder[UNDER_MOVE0_e].getAnmTransform()->setFrame(fVar2);
mVelocity = fVar3;
} else {
if (std::fabsf(frameCtrl.getRate()) < 0.01f) {
mVelocity = 0.0f;
m34D0--;
}
} else if (std::fabsf(frameCtrl.getRate()) < 0.01f) {
mVelocity = 0.0f;
m34D0--;
}
setCrawlMoveDirectionArrow();
setDoStatusCrawl();
shape_angle.y = sVar4;
current.angle.y = sVar5;
} else {
if (m34D0 == 0) {
setCrawlMoveDirectionArrow();
if (mStickDistance > 0.05f) {
int direction = getDirectionFromShapeAngle();
f32 fVar2 = cM_ssin(shape_angle.y);
f32 fVar3 = cM_scos(shape_angle.y);
if ((direction == DIR_LEFT) && ((mProcVar0.m3570 & 4))) {
m370C.x += 75.0f * fVar3;
m370C.z -= 75.0f * fVar2;
m34D4 = current.angle.y + 0x4000;
if (current.angle.y == shape_angle.y) {
m35A0 = 1.0f;
} else {
m35A0 = -1.0f;
}
m34D0 = -1;
} else if ((direction == DIR_RIGHT) && ((mProcVar0.m3570 & 8))) {
m370C.x -= 75.0f * fVar3;
m370C.z += 75.0f * fVar2;
m34D4 = current.angle.y + -0x4000;
if (current.angle.y == shape_angle.y) {
m35A0 = 1.0f;
} else {
m35A0 = -1.0f;
}
m34D0 = -1;
} else if (((mProcVar0.m3570 & 1)) &&
(((shape_angle.y == current.angle.y && (direction == DIR_FORWARD)) ||
((shape_angle.y != current.angle.y && (direction == DIR_BACKWARD))))))
{
m370C.x += 75.0f * cM_ssin(current.angle.y);
m370C.z += 75.0f * cM_scos(current.angle.y);
m34D4 = shape_angle.y;
m35A0 = 0.0f;
m34D0 = -1;
} else if (((shape_angle.y == current.angle.y) && (direction == DIR_BACKWARD)) || ((shape_angle.y != current.angle.y && (direction == DIR_FORWARD)))) {
current.angle.y += 0x8000;
m370C.x -= 75.0f * cM_ssin(current.angle.y);
m370C.z -= 75.0f * cM_scos(current.angle.y);
m34D4 = shape_angle.y;
m35A0 = 0.0f;
m34D0 = -1;
} else if (m34D0 == 0) {
setCrawlMoveDirectionArrow();
if (mStickDistance > 0.05f) {
int direction = getDirectionFromShapeAngle();
f32 fVar2 = cM_ssin(shape_angle.y);
f32 fVar3 = cM_scos(shape_angle.y);
if (direction == DIR_LEFT && (mProcVar0.m3570 & 4)) {
m370C.x += 75.0f * fVar3;
m370C.z -= 75.0f * fVar2;
m34D4 = current.angle.y + 0x4000;
if (current.angle.y == shape_angle.y) {
m35A0 = 1.0f;
} else {
m35A0 = -1.0f;
}
if (m34D0 == -1) {
g_dComIfG_gameInfo.play.mDirection = 0;
if (shape_angle.y == current.angle.y) {
frameCtrl.setRate(2.0f);
frameCtrl.setLoop(0);
} else {
frameCtrl.setRate(-2.0f);
frameCtrl.setLoop(frameCtrl.getEnd());
}
initSeAnime();
m34D0 = -1;
} else if (direction == DIR_RIGHT && (mProcVar0.m3570 & 8)) {
m370C.x -= 75.0f * fVar3;
m370C.z += 75.0f * fVar2;
m34D4 = current.angle.y + -0x4000;
if (current.angle.y == shape_angle.y) {
m35A0 = 1.0f;
} else {
m35A0 = -1.0f;
}
} else {
setDoStatusCrawl();
shape_angle.y = sVar4;
current.angle.y = sVar5;
m34D0 = -1;
} else if ((mProcVar0.m3570 & 1) && ((shape_angle.y == current.angle.y && direction == DIR_FORWARD) ||
(shape_angle.y != current.angle.y && direction == DIR_BACKWARD)))
{
m370C.x += 75.0f * cM_ssin(current.angle.y);
m370C.z += 75.0f * cM_scos(current.angle.y);
m34D4 = shape_angle.y;
m35A0 = 0.0f;
m34D0 = -1;
} else if ((shape_angle.y == current.angle.y && direction == DIR_BACKWARD) ||
(shape_angle.y != current.angle.y && direction == DIR_FORWARD))
{
current.angle.y += 0x8000;
m370C.x -= 75.0f * cM_ssin(current.angle.y);
m370C.z -= 75.0f * cM_scos(current.angle.y);
m34D4 = shape_angle.y;
m35A0 = 0.0f;
m34D0 = -1;
}
if (m34D0 == -1) {
g_dComIfG_gameInfo.play.mDirection = 0;
if (shape_angle.y == current.angle.y) {
frameCtrl.setRate(2.0f);
frameCtrl.setLoop(0);
} else {
frameCtrl.setRate(-2.0f);
frameCtrl.setLoop(frameCtrl.getEnd());
}
initSeAnime();
}
} else {
BOOL bVar1 = true;
if (m34D6 > 0) {
m34D6--;
setDoStatusCrawl();
shape_angle.y = sVar4;
current.angle.y = sVar5;
}
} else {
BOOL bVar1 = true;
if (m34D6 > 0) {
m34D6--;
}
if (std::fabsf(m35A0) > 0.5f) {
if (cLib_addCalcAngleS(&shape_angle.y, m34D4, 5, 0x480, 0x80)) {
bVar1 = 0;
}
if (std::fabsf(m35A0) > 0.5f) {
if (cLib_addCalcAngleS(&shape_angle.y, m34D4, 5, 0x480, 0x80)) {
bVar1 = 0;
}
if (m35A0 < -0.5f) {
current.angle.y = shape_angle.y + 0x8000;
} else {
current.angle.y = shape_angle.y;
}
cLib_addCalc(&current.pos.x, m370C.x, 0.5f, 3.0f, 1.0f);
cLib_addCalc(&current.pos.z, m370C.z, 0.5f, 3.0f, 1.0f);
}
cXyz local_28 = m370C - current.pos;
if (cLib_distanceAngleS(cM_atan2s(local_28.x, local_28.z), current.angle.y) < 0x6000) {
bVar1 = false;
}
mVelocity = getCrawlMoveSpeed();
if (mVelocity < 0.0f) {
mVelocity *=-1.0f;
if (m35A0 < -0.5f) {
current.angle.y = shape_angle.y + 0x8000;
} else {
current.angle.y = shape_angle.y;
}
if ((bVar1 != 0) || (m34D6 == 0)) {
procCrawlMove_init(shape_angle.x, shape_angle.z);
}
cLib_addCalc(&current.pos.x, m370C.x, 0.5f, 3.0f, 1.0f);
cLib_addCalc(&current.pos.z, m370C.z, 0.5f, 3.0f, 1.0f);
}
cXyz local_28 = m370C - current.pos;
if (cLib_distanceAngleS(cM_atan2s(local_28.x, local_28.z), current.angle.y) < 0x6000) {
bVar1 = false;
}
mVelocity = getCrawlMoveSpeed();
if (mVelocity < 0.0f) {
mVelocity *= -1.0f;
current.angle.y = shape_angle.y + 0x8000;
}
if (bVar1 != 0 || m34D6 == 0) {
procCrawlMove_init(shape_angle.x, shape_angle.z);
}
}
return true;
@@ -710,13 +701,18 @@ BOOL daPy_lk_c::procCrawlEnd_init(int param_1, s16 param_2, s16 param_3) {
} else {
fVar1 = -1.0f;
}
setSingleMoveAnime(ANM_LIE, daPy_HIO_crouch_c0::m.field_0x40, daPy_HIO_crouch_c0::m.field_0x44,
daPy_HIO_crouch_c0::m.field_0xE, fVar1);
setSingleMoveAnime(
ANM_LIE,
daPy_HIO_crouch_c0::m.field_0x40,
daPy_HIO_crouch_c0::m.field_0x44,
daPy_HIO_crouch_c0::m.field_0xE,
fVar1
);
if (param_1 == 0) {
if (daPy_HIO_crouch_c0::m.field_0x44 > dVar4) {
dVar4 = daPy_HIO_crouch_c0::m.field_0x44;
} else if (daPy_HIO_crouch_c0::m.field_0xE <= dVar4) {
dVar4 = (daPy_HIO_crouch_c0::m.field_0xE - 0.001f);
dVar4 = daPy_HIO_crouch_c0::m.field_0xE - 0.001f;
}
mFrameCtrlUnder[UNDER_MOVE0_e].setFrame(dVar4);
mAnmRatioUnder[UNDER_MOVE0_e].getAnmTransform()->setFrame(dVar4);
@@ -738,14 +734,12 @@ BOOL daPy_lk_c::procCrawlEnd() {
m35E4 = m35A0 * (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() - daPy_HIO_crouch_c0::m.field_0x48);
if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() > -0.01f) {
checkNextMode(0);
} else {
if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() < daPy_HIO_crouch_c0::m.field_0x48) {
if (!checkNextMode(1)) {
m34C2 = 1;
}
} else {
} else if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() < daPy_HIO_crouch_c0::m.field_0x48) {
if (!checkNextMode(1)) {
m34C2 = 1;
}
} else {
m34C2 = 1;
}
return true;
}
+5 -2
View File
@@ -884,8 +884,11 @@ BOOL daPy_lk_c::dProcDead() {
dGameover_c* this_01;
cLib_chaseF(&m35A0, 0.0f, 0.01f);
f32 dVar3 = 1.0f - m35A0;
if ((m3628 != fpcM_ERROR_PROCESS_ID_e) && (this_01 = (dGameover_c*)fopMsgM_SearchByID(m3628), this_01)) {
this_01->setBackAlpha(dVar3);
if ((m3628 != fpcM_ERROR_PROCESS_ID_e)) {
this_01 = (dGameover_c*)fopMsgM_SearchByID(m3628);
if (this_01) {
this_01->setBackAlpha(dVar3);
}
}
if (((m35A0 < 0.38f) && (m3628 != fpcM_ERROR_PROCESS_ID_e)) &&
(this_01 = (dGameover_c*)fopMsgM_SearchByID(m3628), this_01))
+111 -127
View File
@@ -61,29 +61,27 @@ void daPy_lk_c::setHammerQuake(cBgS_PolyInfo* param_1, const cXyz* param_2, int
}
mDoAud_seStart(JA_SE_LK_HAMMER_HIT, &mSwordTopPos, iVar6, mReverb);
}
if ((param_1 != NULL) && (m355C == 0)) {
if (param_1 != NULL && m355C == 0) {
mDoMtx_stack_c::transS(param_2->x, param_2->y, param_2->z);
mDoMtx_stack_c::ZXYrotM(getGroundAngle(param_1, shape_angle.y), shape_angle.y,
getGroundAngle(param_1, shape_angle.y + -0x4000));
mDoMtx_stack_c::ZXYrotM(
getGroundAngle(param_1, shape_angle.y), shape_angle.y, getGroundAngle(param_1, shape_angle.y + -0x4000)
);
mDoMtx_stack_c::transM(0.0f, 0.0f, -30.0f);
local_38.x = mDoMtx_stack_c::now[0][3];
local_38.y = mDoMtx_stack_c::now[1][3];
local_38.z = mDoMtx_stack_c::now[2][3];
if ((!fopAcM_getWaterY(&local_38, &local_54)) || (local_54 < (5.0f + local_38.y))) {
if (!fopAcM_getWaterY(&local_38, &local_54) || (local_54 < (5.0f + local_38.y))) {
emitter = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0214, &local_38);
if (emitter != NULL) {
JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation,
emitter->mGlobalTranslation);
JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, emitter->mGlobalTranslation);
}
emitter = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0215, &local_38);
if (emitter != NULL) {
JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation,
emitter->mGlobalTranslation);
JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, emitter->mGlobalTranslation);
}
emitter = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0216, &local_38);
if (emitter != NULL) {
JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation,
emitter->mGlobalTranslation);
JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, emitter->mGlobalTranslation);
}
bVar2 = false;
} else {
@@ -95,17 +93,17 @@ void daPy_lk_c::setHammerQuake(cBgS_PolyInfo* param_1, const cXyz* param_2, int
if (bVar2) {
attrib_code = dBgS_Attr_WATER_e;
dComIfGp_particle_setP1(dPa_name::ID_COMMON_027C, &local_38);
dComIfGp_particle_setShipTail(dPa_name::ID_COMMON_003D, &local_38, NULL, NULL, 0xFF,
&dPa_control_c::mSingleRippleEcallBack);
dComIfGp_particle_setShipTail(
dPa_name::ID_COMMON_003D, &local_38, NULL, NULL, 0xFF, &dPa_control_c::mSingleRippleEcallBack
);
} else {
attrib_code = dComIfG_Bgsp()->GetAttributeCode(*param_1);
}
emitter = dComIfGp_particle_setSimpleLand(attrib_code, &local_38, NULL, 1.0f, 1.0f, 1.0f,
&tevStr, &iStack_58, 0x1E);
emitter =
dComIfGp_particle_setSimpleLand(attrib_code, &local_38, NULL, 1.0f, 1.0f, 1.0f, &tevStr, &iStack_58, 0x1E);
if (emitter != NULL) {
JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation,
emitter->mGlobalTranslation);
if ((attrib_code == dBgS_Attr_WATER_e) || (attrib_code == dBgS_Attr_GRASS_e)) {
JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, emitter->mGlobalTranslation);
if (attrib_code == dBgS_Attr_WATER_e || attrib_code == dBgS_Attr_GRASS_e) {
emitter->setRate(60.0f);
emitter->setSpread(1.0f);
if (attrib_code == dBgS_Attr_WATER_e) {
@@ -128,7 +126,6 @@ void daPy_lk_c::setHammerQuake(cBgS_PolyInfo* param_1, const cXyz* param_2, int
}
m355C = 1;
dKy_Sound_set(current.pos, 500, fopAcM_GetID(this), 10);
return;
}
/* 801508FC-80150B60 .text setHammerWaterSplash__9daPy_lk_cFv */
@@ -136,27 +133,26 @@ void daPy_lk_c::setHammerWaterSplash() {
f32 local_50;
cXyz local_28;
if ((mCurProc != daPyProc_HAMMER_FRONT_SWING_e) ||
(m35EC <= mFrameCtrlUnder[UNDER_MOVE0_e].getRate()))
{
if (mCurProc != daPyProc_HAMMER_FRONT_SWING_e || (m35EC <= mFrameCtrlUnder[UNDER_MOVE0_e].getRate())) {
return;
}
if (m355C == 0) {
local_28 = m36C4 - mSwordTopPos;
local_28.normalize();
local_28 = mSwordTopPos + (local_28 * 30.0f);
if ((fopAcM_getWaterY(&local_28, &local_50)) && (local_50 >= local_28.y + 5.0f)) {
if (fopAcM_getWaterY(&local_28, &local_50) && local_50 >= local_28.y + 5.0f) {
local_28.y += 150.0f;
mGndChk.SetPos(&local_28);
if (!(local_50 < dComIfG_Bgsp()->GroundCross(&mGndChk) + 5.0f)) {
local_28.y = local_50;
dComIfGp_particle_setP1(dPa_name::ID_COMMON_027C, &local_28);
dComIfGp_particle_setShipTail(dPa_name::ID_COMMON_003D, &local_28, NULL, NULL, 0xFF,
&dPa_control_c::mSingleRippleEcallBack);
dComIfGp_particle_setShipTail(
dPa_name::ID_COMMON_003D, &local_28, NULL, NULL, 0xFF, &dPa_control_c::mSingleRippleEcallBack
);
GXColor amb, dif;
dKy_get_seacolor(&amb, &dif);
JPABaseEmitter* emitter = dComIfGp_particle_setP1(
dPa_name::ID_COMMON_0023, &local_28, NULL, NULL, 0xFF, NULL, -1, &amb);
JPABaseEmitter* emitter =
dComIfGp_particle_setP1(dPa_name::ID_COMMON_0023, &local_28, NULL, NULL, 0xFF, NULL, -1, &amb);
if (emitter != NULL) {
emitter->setRate(60.0f);
emitter->setSpread(1.0f);
@@ -168,7 +164,6 @@ void daPy_lk_c::setHammerWaterSplash() {
}
}
}
return;
}
/* 80150B60-80150C40 .text procHammerSideSwing_init__9daPy_lk_cFv */
@@ -200,45 +195,43 @@ BOOL daPy_lk_c::procHammerSideSwing() {
mDirection = DIR_RIGHT;
checkNextMode(0);
return true;
} else {
if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() > daPy_HIO_ham_c0::m.field_0x10) {
f32 dVar4 = mVelocity;
u8 orig_direction = mDirection;
mVelocity = 0.0f;
mDirection = DIR_RIGHT;
if (checkNextMode(1)) {
return true;
}
mVelocity = dVar4;
mDirection = orig_direction;
}
if (changeCutReverseProc(ANM_CUTREL)) {
setHammerQuake(NULL, NULL, -1);
}
if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() > daPy_HIO_ham_c0::m.field_0x10) {
f32 dVar4 = mVelocity;
u8 orig_direction = mDirection;
mVelocity = 0.0f;
mDirection = DIR_RIGHT;
if (checkNextMode(1)) {
return true;
} else {
if (mpAttnActorLockOn != NULL) {
setShapeAngleToAtnActor();
m34D4 = shape_angle.y;
} else {
cLib_addCalcAngleS(
&shape_angle.y,
m34D4,
daPy_HIO_turn_c0::m.field_0x4,
daPy_HIO_turn_c0::m.field_0x0,
daPy_HIO_turn_c0::m.field_0x2
);
}
current.angle.y = shape_angle.y;
if ((mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() >= daPy_HIO_ham_c0::m.field_0x18) &&
(mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() < daPy_HIO_ham_c0::m.field_0x1C))
{
if (!checkNoResetFlg0(daPyFlg0_CUT_AT_FLG)) {
onResetFlg0(daPyRFlg0_UNK1);
seStartSwordCut(JA_SE_LK_HAMMER_SWING);
}
onResetFlg0(daPyRFlg0_UNK2);
}
}
mVelocity = dVar4;
mDirection = orig_direction;
}
if (changeCutReverseProc(ANM_CUTREL)) {
setHammerQuake(NULL, NULL, -1);
return true;
}
if (mpAttnActorLockOn != NULL) {
setShapeAngleToAtnActor();
m34D4 = shape_angle.y;
} else {
cLib_addCalcAngleS(
&shape_angle.y,
m34D4,
daPy_HIO_turn_c0::m.field_0x4,
daPy_HIO_turn_c0::m.field_0x0,
daPy_HIO_turn_c0::m.field_0x2
);
}
current.angle.y = shape_angle.y;
if ((mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() >= daPy_HIO_ham_c0::m.field_0x18) &&
(mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() < daPy_HIO_ham_c0::m.field_0x1C))
{
if (!checkNoResetFlg0(daPyFlg0_CUT_AT_FLG)) {
onResetFlg0(daPyRFlg0_UNK1);
seStartSwordCut(JA_SE_LK_HAMMER_SWING);
}
onResetFlg0(daPyRFlg0_UNK2);
}
return true;
}
@@ -255,7 +248,7 @@ BOOL daPy_lk_c::procHammerFrontSwingReady_init() {
);
current.angle.y = shape_angle.y;
mVelocity = 0.0f;
if (mpAttention->Lockon() || (mStickDistance <= 0.05f)) {
if (mpAttention->Lockon() || mStickDistance <= 0.05f) {
m34D4 = shape_angle.y;
} else {
m34D4 = m34E8;
@@ -273,22 +266,21 @@ BOOL daPy_lk_c::procHammerFrontSwingReady() {
m35EC = mFrameCtrlUnder[UNDER_MOVE0_e].getFrame();
if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) {
return procHammerFrontSwing_init();
} else {
if (mpAttnActorLockOn != NULL) {
setShapeAngleToAtnActor();
m34D4 = shape_angle.y;
} else {
cLib_addCalcAngleS(
&shape_angle.y,
m34D4,
daPy_HIO_turn_c0::m.field_0x4,
daPy_HIO_turn_c0::m.field_0x0,
daPy_HIO_turn_c0::m.field_0x2
);
}
current.angle.y = shape_angle.y;
return true;
}
if (mpAttnActorLockOn != NULL) {
setShapeAngleToAtnActor();
m34D4 = shape_angle.y;
} else {
cLib_addCalcAngleS(
&shape_angle.y,
m34D4,
daPy_HIO_turn_c0::m.field_0x4,
daPy_HIO_turn_c0::m.field_0x0,
daPy_HIO_turn_c0::m.field_0x2
);
}
current.angle.y = shape_angle.y;
return true;
}
/* 80150F98-801510DC .text procHammerFrontSwing_init__9daPy_lk_cFv */
@@ -304,7 +296,7 @@ BOOL daPy_lk_c::procHammerFrontSwing_init() {
current.angle.y = shape_angle.y;
mVelocity = 0.0f;
voiceStart(1);
if (mpAttention->Lockon() || (mStickDistance <= 0.05f)) {
if (mpAttention->Lockon() || mStickDistance <= 0.05f) {
m34D4 = shape_angle.y;
} else {
m34D4 = m34E8;
@@ -322,66 +314,53 @@ BOOL daPy_lk_c::procHammerFrontSwing_init() {
/* 801510DC-801513D4 .text procHammerFrontSwing__9daPy_lk_cFv */
BOOL daPy_lk_c::procHammerFrontSwing() {
/* Nonmatching - regalloc */
f32 fVar1;
f32 fVar2;
f32 fVar3;
f32 fVar4;
int iVar5;
int iVar6;
int iVar7;
f32 dVar8;
f32 dVar10;
cXyz local_58;
m35EC = mFrameCtrlUnder[UNDER_MOVE0_e].getFrame();
fVar1 = mFrameCtrlUnder[UNDER_MOVE0_e].getRate();
if (fVar1 < 0.01f) {
f32 f1 = mFrameCtrlUnder[UNDER_MOVE0_e].getRate();
if (f1 < 0.01f) {
if (m34D0 == 0) {
procHammerFrontSwingEnd_init();
return procHammerFrontSwingEnd_init();
} else {
m34D0--;
}
return true;
}
if ((m35EC > fVar1) && (changeCutReverseProc(ANM_CUTREL))) {
if (m35EC > f1 && changeCutReverseProc(ANM_CUTREL)) {
if (mCurProc == daPyProc_HAMMER_FRONT_SWING_e) {
local_58.set(mSwordTopPos.x, current.pos.y + 300.0f, mSwordTopPos.z);
mGndChk.SetPos(&local_58);
dVar8 = dComIfG_Bgsp()->GroundCross(&mGndChk);
local_58.y = dVar8;
if (dVar8 > mSwordTopPos.y) {
iVar5 = -1;
iVar7 = 0;
dVar8 = 300.0f;
dVar10 = C_BG_MIN_HEIGHT;
for (iVar6 = 0; iVar6 < mSwBlur.field_0x014; iVar6++, iVar7++) {
local_58.set(mSwBlur.field_0x034[iVar7].x, dVar8 + mSwBlur.field_0x034[iVar7].y,
mSwBlur.field_0x034[iVar7].z);
mGndChk.SetPos(&local_58);
local_58.y = dComIfG_Bgsp()->GroundCross(&mGndChk);
if ((dVar10 != local_58.y) && (mSwBlur.field_0x034[iVar7].y > local_58.y)) {
iVar5 = dComIfG_Bgsp()->GetMtrlSndId(mGndChk);
cXyz sp08(mSwordTopPos.x, current.pos.y + 300.0f, mSwordTopPos.z);
mGndChk.SetPos(&sp08);
sp08.y = dComIfG_Bgsp()->GroundCross(&mGndChk);
if (sp08.y > mSwordTopPos.y) {
int r27;
int r26;
r26 = -1;
f32 f30 = 300.0f;
f32 f31 = C_BG_MIN_HEIGHT;
for (r27 = 0; r27 < mSwBlur.field_0x014; r27++) {
sp08.set(mSwBlur.field_0x034[r27].x, f30 + mSwBlur.field_0x034[r27].y, mSwBlur.field_0x034[r27].z);
mGndChk.SetPos(&sp08);
sp08.y = dComIfG_Bgsp()->GroundCross(&mGndChk);
if (f31 != sp08.y && mSwBlur.field_0x034[r27].y > sp08.y) {
r26 = dComIfG_Bgsp()->GetMtrlSndId(mGndChk);
break;
}
}
fVar1 = mFrameCtrlUnder[UNDER_MOVE0_e].getRate();
fVar3 = (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() - fVar1) - 0.1f * iVar6 * fVar1;
if ((iVar6 != 0) && (iVar6 < mSwBlur.field_0x014)) {
fVar2 = (&mSwBlur.field_0x034[0])[iVar6].y;
fVar4 = (&mSwBlur.field_0x028)[iVar6].y - fVar2;
if (std::abs(fVar4) > 1.0f) {
fVar3 = fVar3 + 0.1f * (1.0f - (local_58.y - fVar2) / fVar4) * fVar1;
f32 f4 = mFrameCtrlUnder[UNDER_MOVE0_e].getRate();
f32 f5 = (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() - f4) - 0.1f * (r27 * f4);
if (r27 != 0 && r27 < mSwBlur.field_0x014) {
f32 f6 = mSwBlur.field_0x034[r27].y - mSwBlur.field_0x034[r27 - 1].y;
if (std::abs(f6) > 1.0f) {
f32 temp = (1.0f - (sp08.y - (&mSwBlur.field_0x034[0])[r27 - 1].y) / f6);
f5 = f5 + 0.1f * (temp * f4);
}
}
if (fVar3 < 0.0f) {
fVar3 = 0.0f;
if (f5 < 0.0f) {
f5 = 0.0f;
}
mFrameCtrlUnder[UNDER_MOVE0_e].setFrame(fVar3);
mFrameCtrlUnder[UNDER_MOVE0_e].setFrame(f5);
mFrameCtrlUnder[UNDER_MOVE0_e].setRate(0.0f);
m35EC = fVar3;
m35EC = f5;
m34D0 = 10;
setHammerQuake(&mGndChk, &local_58, iVar5);
setHammerQuake(&mGndChk, &sp08, r26);
return true;
}
} else {
@@ -393,8 +372,13 @@ BOOL daPy_lk_c::procHammerFrontSwing() {
setShapeAngleToAtnActor();
m34D4 = shape_angle.y;
} else {
cLib_addCalcAngleS(&shape_angle.y, m34D4, daPy_HIO_turn_c0::m.field_0x4,
daPy_HIO_turn_c0::m.field_0x0, daPy_HIO_turn_c0::m.field_0x2);
cLib_addCalcAngleS(
&shape_angle.y,
m34D4,
daPy_HIO_turn_c0::m.field_0x4,
daPy_HIO_turn_c0::m.field_0x0,
daPy_HIO_turn_c0::m.field_0x2
);
}
current.angle.y = shape_angle.y;
onResetFlg0(daPyRFlg0_UNK2);
+1 -1
View File
@@ -495,7 +495,7 @@ BOOL daPy_lk_c::procHangMove() {
cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk);
s16 sVar6 = cM_atan2s(triPla->GetNP()->x, triPla->GetNP()->z) + 0x8000;
if (sVar6 != shape_angle.y) {
if ((short)(current.angle.y - shape_angle.y) > 0) {
if ((s16)(current.angle.y - shape_angle.y) > 0) {
current.angle.y = sVar6 + 0x4000;
} else {
current.angle.y = sVar6 + -0x4000;
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -2,7 +2,7 @@
#include "d/actor/d_a_player_main.h"
#include "d/actor/d_a_player_main_data.h"
#include "weak_data_1811.h" // IWYU pragma: keep
#include "weak_data_2100_2080.h" // IWYU pragma: keep
char l_arcName[] = "Link";
+7 -9
View File
@@ -15,16 +15,14 @@ int daPy_npc_c::check_initialRoom() {
mAcch.CrrPos(*dComIfG_Bgsp());
if (mAcch.GetGroundH() == C_BG_MIN_HEIGHT || dComIfG_Bgsp()->GetGroundCode(mAcch.m_gnd) == 4) {
return 0;
} else {
int roomNo = dComIfG_Bgsp()->GetRoomId(mAcch.m_gnd);
if (roomNo < 0 || !dComIfGp_roomControl_checkStatusFlag(roomNo, 0x10)) {
return 0;
} else {
fopAcM_SetHomeRoomNo(this, roomNo);
fopAcM_SetRoomNo(this, roomNo);
return -1;
}
}
int roomNo = dComIfG_Bgsp()->GetRoomId(mAcch.m_gnd);
if (roomNo < 0 || !dComIfGp_roomControl_checkStatusFlag(roomNo, 0x10)) {
return 0;
}
fopAcM_SetHomeRoomNo(this, roomNo);
fopAcM_SetRoomNo(this, roomNo);
return -1;
}
return 1;
}
+28 -34
View File
@@ -58,7 +58,7 @@ int daPy_lk_c::changeRopeSwingProc() {
if (mCyl.ChkCoHit() != 0) {
fopAc_ac_c* pfVar2 = mCyl.GetCoHitAc();
if ((pfVar2 != NULL) && (fopAcM_GetName(pfVar2) == PROC_HIMO3)) {
cXyz local_24 = (pfVar2->current.pos - current.pos);
cXyz local_24 = pfVar2->current.pos - current.pos;
if ((local_24.abs() - 95.0f >= 100.0f) && (pfVar2->current.pos.y > current.pos.y)) {
return procRopeSwing_init(pfVar2, 0x1800);
}
@@ -109,16 +109,15 @@ int daPy_lk_c::changeRopeToHangProc() {
mLinkLinChk.Set(&local_1c, &local_28, this);
if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) {
return false;
}
cM3dGPla* pfVar4 = dComIfG_Bgsp()->GetTriPla(mLinkLinChk);
s16 iVar5 = cM_atan2s(pfVar4->GetNP()->x, pfVar4->GetNP()->z);
if (cLib_distanceAngleS(iVar5, shape_angle.y + 0x8000) > 0x2000) {
return false;
} else {
cM3dGPla* pfVar4 = dComIfG_Bgsp()->GetTriPla(mLinkLinChk);
s16 iVar5 = cM_atan2s(pfVar4->GetNP()->x, pfVar4->GetNP()->z);
if (cLib_distanceAngleS(iVar5, shape_angle.y + 0x8000) > 0x2000) {
return false;
} else {
m352C = iVar5;
procRopeUpHang_init();
return true;
}
m352C = iVar5;
procRopeUpHang_init();
return true;
}
}
@@ -274,7 +273,8 @@ BOOL daPy_lk_c::checkNextActionRopeReady() {
u32 uVar2 = fopAcM_GetParam(rope);
if (uVar2 == 2) {
return procRopeReady_init();
} else if (uVar2 == 0) {
}
if (uVar2 == 0) {
if (checkUpperAnime(LKANM_BCK_ROPETHROW)) {
if (mFrameCtrlUpper[UPPER_MOVE2_e].getRate() < 0.01f) {
return procRopeThrowCatch_init();
@@ -465,7 +465,7 @@ BOOL daPy_lk_c::procRopeReady() {
mRopePos = mActorKeepEquip.getActor()->current.pos;
m370C.x = mRopePos.x;
m370C.z = mRopePos.z;
cXyz local_48 = (m370C - current.pos);
cXyz local_48 = m370C - current.pos;
f32 dVar5 = local_48.abs();
cLib_chaseF(&m35A0, 50.0f, 5.0f);
shape_angle.x = (0.025f * (m34D4 * m35A0));
@@ -493,7 +493,7 @@ BOOL daPy_lk_c::procRopeSwing_init(fopAc_ac_c* param_0, s16 param_1) {
fopAcM_SetParam(param_0, 1);
deleteEquipItem(TRUE);
mEquipItem = dItem_GRAPPLING_HOOK_e;
local_84 = (param_0->current.pos - current.pos);
local_84 = param_0->current.pos - current.pos;
dVar8 = (local_84.abs() - 95.0f);
dVar9 = ((himo2_class*)param_0)->field_0x15F8.y;
if (dVar8 > dVar9) {
@@ -505,11 +505,11 @@ BOOL daPy_lk_c::procRopeSwing_init(fopAc_ac_c* param_0, s16 param_1) {
} else {
param_0 = mActorKeepRope.getActor();
}
local_84 = (param_0->current.pos - current.pos);
local_84 = param_0->current.pos - current.pos;
m35A0 = local_84.abs();
f32 dVar11 = std::sqrtf(2.0f / m35A0);
m35A4 = dVar11;
dVar11 = (M_PI / 2 / m35A4);
dVar11 = M_PI / 2 / m35A4;
if (pfVar7 != NULL) {
m34D4 = daPy_HIO_rope_c0::m.field_0x0;
if (checkSpecialRope()) {
@@ -530,7 +530,7 @@ BOOL daPy_lk_c::procRopeSwing_init(fopAc_ac_c* param_0, s16 param_1) {
dVar8 = ((f32)sVar4 / m34D4);
dVar9 = std::sqrtf(1.0f - (dVar8 * dVar8));
dVar8 = cM_atan2f(dVar8, dVar9);
m35A8 = (dVar8 / m35A4);
m35A8 = dVar8 / m35A4;
dVar8 = std::sqrtf(local_78.y * local_78.y + local_78.z * local_78.z);
m34D6 = cM_atan2s(-local_78.x, dVar8);
if (m34D6 > 0) {
@@ -585,8 +585,8 @@ BOOL daPy_lk_c::procRopeSwing() {
fopAc_ac_c* rope = mActorKeepRope.getActor();
mRopePos = rope->current.pos;
dComIfGp_setRStatus(dActStts_STOP_e);
f32 f30 = (m35A8 * m35A4);
f32 dVar13 = (m35AC * m35A4);
f32 f30 = m35A8 * m35A4;
f32 dVar13 = m35AC * m35A4;
mDoMtx_stack_c::ZrotS(-shape_angle.z);
mDoMtx_stack_c::XrotM(-shape_angle.x);
mDoMtx_stack_c::YrotM(-shape_angle.y);
@@ -622,14 +622,14 @@ BOOL daPy_lk_c::procRopeSwing() {
m35A8 = m35A8 + (dVar11 + f30);
m35AC = m35AC + (dVar11 + dVar13);
f32 sp0C = m35A8 * m35A4;
f30 = (m35AC * m35A4);
f30 = m35AC * m35A4;
if (sp0C >= M_PI) {
sp0C = sp0C - M_PI * 2;
m35A8 = sp0C / m35A4;
}
if (f30 >= M_PI) {
f30 = (f30 - M_PI * 2);
m35AC = (f30 / m35A4);
f30 = f30 - M_PI * 2;
m35AC = f30 / m35A4;
}
if ((checkModeFlg(ModeFlg_00000400)) && (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f)) {
offModeFlg(ModeFlg_00000400);
@@ -680,11 +680,7 @@ BOOL daPy_lk_c::procRopeSwing() {
cLib_addCalcAngleS(&shape_angle.x, r28_2, 8, 0xc00, 0x100);
dVar13 = cM_fcos(f30);
cLib_addCalcAngleS(
&shape_angle.z,
m34D6 * cM_fsin(f30 - 1.0995574f),
8,
0x400 + (0x800 * dVar13),
0x80 + (0x80 * dVar13)
&shape_angle.z, m34D6 * cM_fsin(f30 - 1.0995574f), 8, 0x400 + (0x800 * dVar13), 0x80 + (0x80 * dVar13)
);
cXyz sp1C(0.0f, -m35A0, 0.0f);
mDoMtx_stack_c::transS(mRopePos.x, mRopePos.y, mRopePos.z);
@@ -879,11 +875,11 @@ BOOL daPy_lk_c::procRopeUp_init() {
mProcVar0.m3570 = 0;
f32 dVar4;
if (checkBossGomaStage()) {
dVar4 = (mRopePos.y - 200.0f);
dVar4 = mRopePos.y - 200.0f;
} else {
dVar4 = (mRopePos.y - 100.0f);
dVar4 = mRopePos.y - 100.0f;
f32 dVar5 = checkRopeRoofHit(shape_angle.y);
dVar5 = (dVar5 - 60.0f);
dVar5 = dVar5 - 60.0f;
if (dVar5 < dVar4) {
dVar4 = dVar5;
} else if ((fopAcM_GetName(rope)) == PROC_HIMO2 || (checkSpecialRope())) {
@@ -893,12 +889,10 @@ BOOL daPy_lk_c::procRopeUp_init() {
if (dVar4 <= current.pos.y) {
if (specialRopeHangUp()) {
return true;
} else if (changeRopeToHangProc()) {
return true;
} else {
if (changeRopeToHangProc()) {
return true;
} else {
return procRopeHangWait_init(0);
}
return procRopeHangWait_init(0);
}
} else {
commonProcInit(daPyProc_ROPE_UP_e);