d_a_rd work

This commit is contained in:
LagoLunatic
2023-11-18 04:35:34 -05:00
parent b6a6d898e6
commit 8f516ad018
2 changed files with 184 additions and 8 deletions
+19 -5
View File
@@ -144,6 +144,10 @@ public:
// 0x04000000 set in daPy_lk_c::procShipPaddle
};
enum daPy_FACE {
};
/* 0x290 */ u8 mAttackState;
/* 0x291 */ u8 field_0x291;
/* 0x292 */ u8 field_0x292[0x294 - 0x292];
@@ -170,7 +174,20 @@ public:
s16 getDamageWaitTimer() const { return mDamageWaitTimer; }
s16 getBodyAngleX() { return mBodyAngle.x; }
s16 getBodyAngleY() { return mBodyAngle.y; }
void getLeftHandPos() const {}
void getRightHandPos() const {}
void getSwordTopPos() const {}
cXyz getHeadTopPos() const { return mHeadTopPos; }
cXyz* getHeadTopPosP() { return &mHeadTopPos; }
f32 getSpeedF() const { return speedF; }
void changeDemoMode(u32) {}
void changeDemoMoveAngle(s16 angle) { mDemo.setMoveAngle(angle); }
void changeDemoParam0(int) {}
void changeOriginalDemo() {
mDemo.setOriginalDemoType();
mDemo.setParam0(0);
}
void onNoResetFlg0(daPy_FLG0 flag) { mNoResetFlg0 |= flag; }
void offNoResetFlg0(daPy_FLG0 flag) { mNoResetFlg0 &= ~flag; }
@@ -233,6 +250,7 @@ public:
bool checkArrowShoot() const { return checkResetFlg0(daPyRFlg0_ARROW_SHOOT); }
bool checkGrabWear() const { return field_0x2b0 < 0.0f; }
void checkMasterSwordEquip() const {}
// checkSwordMiniGame__9daPy_py_cCFv
// checkNormalSwordEquip__9daPy_py_cCFv
@@ -279,18 +297,14 @@ public:
virtual void changeTextureAnime(u16, u16, int) {}
virtual void cancelChangeTextureAnime() {}
void getSwordTopPos() const;
void getLeftHandPos() const;
void getRopeJumpLand() const;
void checkRopeForceEnd() const;
cXyz getHeadTopPos() const { return mHeadTopPos; }
cXyz* getHeadTopPosP() { return &mHeadTopPos; }
void changePlayer(fopAc_ac_c*);
void objWindHitCheck(dCcD_Cyl*);
void setDoButtonQuake();
void stopDoButtonQuake(int);
void getRopePos() const;
f32 getSpeedF() const { return speedF; }
void setFace(daPy_py_c::daPy_FACE) {}
};
#endif /* D_A_PLAYER */
+165 -3
View File
@@ -13,9 +13,11 @@
#include "d/d_material.h"
#include "d/d_snap.h"
#include "d/actor/d_a_player.h"
#include "d/actor/d_a_player_main.h"
#include "d/d_cc_uty.h"
#include "d/d_s_play.h"
#include "d/d_item_data.h"
#include "m_Do/m_Do_controller_pad.h"
// Needed for the .data section to match.
static Vec dummy1 = {1.0f, 1.0f, 1.0f};
@@ -964,7 +966,63 @@ void daRd_c::modeCryInit() {
/* 000025A8-000028B8 .text modeCry__6daRd_cFv */
void daRd_c::modeCry() {
/* Nonmatching */
setAnm(6, false);
f32 stickPosX = g_mDoCPd_cpadInfo[0].mMainStickPosX;
f32 stickPosY = g_mDoCPd_cpadInfo[0].mMainStickPosY;
if (mEvtInfo.checkCommandDemoAccrpt() || dComIfGp_evmng_startCheck("DEFAULT_RD_CRY")) {
if (isLinkControl()) {
dComIfGp_event_reset();
modeProcInit(MODE_RETURN);
} else if (checkTgHit()) {
dComIfGp_event_reset();
} else {
s16 targetY = fopAcM_searchPlayerAngleY(this);
f32 dist = fopAcM_searchPlayerDistanceXZ(this);
f32 temp = (dist / 100.0f) + g_regHIO.mChild[12].mFloatRegs[3];
if (temp > 1.0f) {
temp = 1.0f;
}
if (temp < 0.1f) {
temp = 0.1f;
}
f32 temp2 = l_HIO.m68;
if (mEnemyFire.mState != 0) {
temp2 *= 2.0f;
}
cLib_addCalc2(&speedF, temp2*temp, 0.1f, 0.1f + g_regHIO.mChild[12].mFloatRegs[0]);
if (mD3C > 0 && stickPosX < 0.0f) {
mD3C = -1;
m318--;
} else if (mD3C < 0 && stickPosX > 0.0f) {
mD3C = 1;
m318--;
}
if (mD40 > 0 && stickPosY < 0.0f) {
mD40 = -1;
m318--;
} else if (mD40 < 0 && stickPosY > 0.0f) {
mD40 = 1;
m318--;
}
if (CPad_CHECK_TRIG_A(0) || CPad_CHECK_TRIG_B(0) || CPad_CHECK_TRIG_X(0) || CPad_CHECK_TRIG_Y(0)) {
m318--;
}
if (cLib_calcTimer(&m310) == 0 || m318 < 0) {
dComIfGp_event_reset();
modeProcInit(MODE_CRY_WAIT);
} else if (checkPlayerInAttack()) {
dComIfGp_event_reset();
modeProcInit(MODE_ATTACK);
}
}
} else {
modeProcInit(MODE_CRY_WAIT);
}
}
/* 000028B8-000028CC .text modeCryWaitInit__6daRd_cFv */
@@ -975,7 +1033,29 @@ void daRd_c::modeCryWaitInit() {
/* 000028CC-000029E4 .text modeCryWait__6daRd_cFv */
void daRd_c::modeCryWait() {
/* Nonmatching */
if (checkTgHit()) {
return;
}
if (isLinkControl()) {
modeProcInit(MODE_RETURN);
return;
}
if (dComIfGp_evmng_startCheck("DEFAULT_RD_CRY")) {
onIkari();
setBtkAnm(3);
}
// The dComIfGp_event_runCheck inline breaks the codegen here.
// if (dComIfGp_event_runCheck()) {
if (g_dComIfG_gameInfo.play.getEvent().runCheck()) {
m310 = 60;
m314 = 45;
} else if (m6D9 == 6) {
if (cLib_calcTimer(&m310) == 0) {
modeProcInit(MODE_MOVE);
} else if (cLib_calcTimer(&m314) == 0 && checkPlayerInAttack()) {
modeProcInit(MODE_ATTACK);
}
}
}
/* 000029E4-00002A58 .text modeAttackInit__6daRd_cFv */
@@ -990,7 +1070,89 @@ void daRd_c::modeAttackInit() {
/* 00002A58-00002F30 .text modeAttack__6daRd_cFv */
void daRd_c::modeAttack() {
/* Nonmatching */
if (dComIfGp_evmng_startCheck("DEFAULT_RD_CRY")) {
dComIfGp_event_reset();
}
if ((dComIfGp_evmng_startCheck("DEFAULT_RD_CRY") || dComIfGp_evmng_startCheck("DEFAULT_RD_ATTACK")) && isLinkControl()) {
dComIfGp_event_reset();
modeProcInit(MODE_RETURN);
return;
}
f32 stickPosX = g_mDoCPd_cpadInfo[0].mMainStickPosX;
f32 stickPosY = g_mDoCPd_cpadInfo[0].mMainStickPosY;
if (mEvtInfo.checkCommandDemoAccrpt()) {
daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer();
if (m6D9 == 4) {
f32 frame = player->getBaseAnimeFrame();
mpMorf->setFrame(frame);
cLib_addCalcAngleS2(&shape_angle.y, player->shape_angle.y, 0x4, 0x2000);
} else {
s16 targetY = fopAcM_searchPlayerAngleY(this);
cLib_addCalcAngleS2(&shape_angle.y, targetY, 0x4, 0x2000);
}
if (checkTgHit()) {
dComIfGp_event_reset();
return;
}
f32 dist = fopAcM_searchPlayerDistanceXZ(this);
if (dist <= 50.0f + g_regHIO.mChild[12].mFloatRegs[5] && m6D9 != 4) {
offIkari();
setAnm(3, false);
}
if (dist <= 20.0f + g_regHIO.mChild[12].mFloatRegs[2]) {
cLib_addCalcPosXZ2(&current.pos, player->current.pos, 0.3f, 1.0f);
if (cLib_calcTimer(&m314) == 0) {
if (!daPy_getPlayerLinkActorClass()->checkNoDamageMode()) {
daPy_getPlayerLinkActorClass()->setDamagePoint(-1.0f);
}
m314 = 30;
}
} else if (mAcch.ChkWallHit()) {
player->changeOriginalDemo();
cXyz pos = player->current.pos;
cLib_addCalcPosXZ2(&pos, current.pos, 0.3f, 10.0f);
player->setPlayerPosAndAngle(&pos, player->shape_angle.y);
} else {
cLib_addCalcPosXZ2(&current.pos, player->current.pos, 0.3f, 10.0f);
}
if (dComIfGs_getLife() == 0) {
dComIfGp_event_reset();
setAnm(5, false);
modeProcInit(MODE_WAIT);
return;
}
if (mD3C > 0 && stickPosX < 0.0f) {
mD3C = -1;
m318--;
} else if (mD3C < 0 && stickPosX > 0.0f) {
mD3C = 1;
m318--;
}
if (mD40 > 0 && stickPosY < 0.0f) {
mD40 = -1;
m318--;
} else if (mD40 < 0 && stickPosY > 0.0f) {
mD40 = 1;
m318--;
}
if (CPad_CHECK_TRIG_A(0) || CPad_CHECK_TRIG_B(0) || CPad_CHECK_TRIG_X(0) || CPad_CHECK_TRIG_Y(0)) {
m318--;
}
if (cLib_calcTimer(&m310) == 0 || m318 < 0) {
dComIfGp_event_reset();
setAnm(5, false);
modeProcInit(MODE_CRY_WAIT);
}
} else if (!checkTgHit()) {
fopAcM_orderOtherEvent2(this, "DEFAULT_RD_ATTACK", 1, 0x1CF);
}
}
/* 00002F30-00002F34 .text modeReturnInit__6daRd_cFv */