daPy_lk_c::changeDamageProc

This commit is contained in:
LagoLunatic
2024-01-10 19:21:12 -05:00
parent 4c7ea01851
commit 48e936269c
8 changed files with 279 additions and 31 deletions
+3
View File
@@ -114,6 +114,7 @@ public:
daPyFlg0_SCOPE_CANCEL = 0x00080000,
daPyFlg0_PHOTO_BOX_CANCEL = 0x00080000, // Same as scope cancel
daPyFlg0_UNK200000 = 0x00200000,
daPyFlg0_UNK1000000 = 0x01000000,
daPyFlg0_EQUIP_HEAVY_BOOTS = 0x02000000,
daPyFlg0_NO_DRAW = 0x08000000,
daPyFlg0_HEAVY_STATE = 0x40000000,
@@ -122,6 +123,7 @@ public:
enum daPy_FLG1 {
daPyFlg1_EQUIP_DRAGON_SHIELD = 0x00000001,
daPyFlg1_NPC_CALL_COMMAND = 0x00000002,
daPyFlg1_UNK4 = 0x00000004,
daPyFlg1_CASUAL_CLOTHES = 0x00000008,
daPyFlg1_FORCE_VOMIT_JUMP = 0x00000010,
daPyFlg1_NPC_NOT_CHANGE = 0x00000040,
@@ -156,6 +158,7 @@ public:
daPyRFlg0_GRAB_UP_START = 0x00008000,
daPyRFlg0_ATTENTION_LOCK = 0x00010000,
daPyRFlg0_HAMMER_QUAKE = 0x00020000,
daPyRFlg0_UNK80000 = 0x00080000,
daPyRFlg0_POISON_CURSE = 0x00100000,
daPyRFlg0_GRAB_PUT_START = 0x00400000,
daPyRFlg0_TACT_USE = 0x01000000,
+15 -7
View File
@@ -169,7 +169,15 @@ public:
static void setType(u16 type) { m_type = type; }
static bool checkCurse() { return m_type == 1; }
static bool checkElec() { return m_type == 2; }
static void checkFlame() {}
static void decTimer() {}
static void getTimer() {}
static void setCurse(s16) {}
static void setElec(s16) {}
static void setFlame(s16) {}
static s16 m_timer;
static u16 m_type;
}; // Size: 0x0C
@@ -1562,7 +1570,7 @@ public:
BOOL checkSingleItemEquipAnime() const;
BOOL checkItemEquipAnime() const;
BOOL checkEquipAnime() const;
void deleteEquipItem(int);
void deleteEquipItem(BOOL);
void setFallVoice();
void keepItemData();
void returnKeepItemData();
@@ -1587,17 +1595,17 @@ public:
void changeSlideProc();
void changeWaitProc();
void changeLandProc(f32);
void setDamagePoint(f32);
BOOL setDamagePoint(f32);
BOOL checkNormalDamage(int);
void setDashDamage();
BOOL checkAtHitEnemy(dCcD_GObjInf*);
BOOL checkElecReturnDamage(dCcD_GObjInf*, cXyz*);
BOOL checkWallAtributeDamage(dBgS_AcchCir*);
void changeDamageProc();
s32 checkWallAtributeDamage(dBgS_AcchCir*);
BOOL changeDamageProc();
void changeAutoJumpProc();
void changeDemoProc();
void changeDeadProc();
void getDamageVec(dCcD_GObjInf*);
cXyz* getDamageVec(dCcD_GObjInf*);
void setOldRootQuaternion(s16, s16, s16);
BOOL checkRestHPAnime();
BOOL checkHeavyStateOn();
@@ -2338,6 +2346,7 @@ public:
mActivePlayerBombs--;
}
}
bool checkGuardSlip() const { return mCurProc == PROC_GUARD_SLIP_e || mCurProc == PROC_CROUCH_DEFENSE_SLIP_e; }
int getStartRoomNo() { return fopAcM_GetParam(this) & 0x3F; }
int getStartMode() { return (fopAcM_GetParam(this) >> 0x0C) & 0xF; }
@@ -2364,7 +2373,6 @@ public:
void checkDashDamageAnime() const {}
void checkDoubleItemEquipAnime() const {}
void checkFaceTypeNot() const {}
void checkGuardSlip() const {}
void checkHookshotReadyAnime() const {}
void checkIsland() const {}
void checkMirrorShieldEquip() const {}
@@ -2692,7 +2700,7 @@ public:
/* 0x3578 */ int m3578;
/* 0x357C */ u8 m357C[0x3580 - 0x357C];
/* 0x3580 */ int m3580;
/* 0x3584 */ int mCurrentGroundAttributeCode;
/* 0x3584 */ int mCurrAttributeCode;
/* 0x3588 */ u8 m3588[0x358C - 0x3588];
/* 0x358C */ int mStaffIdx;
/* 0x3590 */ int mEventIdx;
+5 -1
View File
@@ -18,6 +18,8 @@ public:
bool checkStateFlg(daSHIP_SFLG flag) const { return m0358 & flag; }
bool checkHeadNoDraw() const { return checkStateFlg(daSFLG_HEAD_NO_DRAW_e); }
bool unknown_inline_TODO() const { return m041C || m0424; }
void checkCraneMode() const {}
void checkCraneUpEnd() const {}
void checkForceMove() {}
@@ -236,7 +238,9 @@ public:
/* 0x0414 */ daGrid_c* mpGrid;
/* 0x0418 */ int m0418;
/* 0x041C */ fopAc_ac_c* m041C;
/* 0x0420 */ u8 m0420[0x042C - 0x0420];
/* 0x0420 */ u32 m0420;
/* 0x0424 */ fopAc_ac_c* m0424;
/* 0x0428 */ u8 m0428[0x042C - 0x0428];
/* 0x042C */ u32 m042C;
/* 0x0430 */ u8 m0430[0x0434 - 0x0430];
/* 0x0434 */ cXyz* m0434;
+4 -4
View File
@@ -137,12 +137,12 @@ inline u8 mDoAud_getLinkVoiceVowel(u32 param_1) {
return mDoAud_zelAudio_c::getInterface()->getLinkVoiceVowel(param_1);
}
inline void mDoAud_linkVoiceStart(u32 i_sfxID, Vec* i_sePos, u8 param_3, s8 param_4) {
mDoAud_zelAudio_c::getInterface()->linkVoiceStart(i_sfxID, i_sePos, param_3, param_4);
inline void mDoAud_linkVoiceStart(u32 param_0, Vec* i_sePos, u8 param_3, s8 param_4) {
mDoAud_zelAudio_c::getInterface()->linkVoiceStart(param_0, i_sePos, param_3, param_4);
}
inline void mDoAud_monsSeStart(u32 param_0, Vec* param_1, u32 param_2, u32 param_3, s8 i_reverb) {
mDoAud_zelAudio_c::getInterface()->monsSeStart(param_0, param_1, param_2, param_3, i_reverb);
inline void mDoAud_monsSeStart(u32 sfxID, Vec* param_1, u32 param_2, u32 param_3, s8 i_reverb) {
mDoAud_zelAudio_c::getInterface()->monsSeStart(sfxID, param_1, param_2, param_3, i_reverb);
}
inline void mDoAud_onEnemyDamage() {
+3 -3
View File
@@ -47,7 +47,7 @@ BOOL daPy_lk_c::procFoodThrow_init() {
mDemo.setSpecialDemoType();
}
} else {
deleteEquipItem(0);
deleteEquipItem(FALSE);
}
int temp = checkShipRideUseItem(1);
@@ -162,7 +162,7 @@ BOOL daPy_lk_c::procFoodSet_init() {
}
}
deleteEquipItem(0);
deleteEquipItem(FALSE);
} else {
setHyoiModel();
}
@@ -211,7 +211,7 @@ BOOL daPy_lk_c::procFoodSet() {
dComIfGp_evmng_cutEnd(mStaffIdx);
} else if (m34D0 < 0) {
dComIfGp_event_reset();
deleteEquipItem(0);
deleteEquipItem(FALSE);
u32 playerPID = fopAcM_GetID(this);
dCam_getBody()->EndEventCamera(playerPID);
endDemoMode();
+247 -14
View File
@@ -3890,9 +3890,9 @@ BOOL daPy_lk_c::checkEquipAnime() const {
}
/* 8010C570-8010C71C .text deleteEquipItem__9daPy_lk_cFi */
void daPy_lk_c::deleteEquipItem(int param_1) {
void daPy_lk_c::deleteEquipItem(BOOL param_1) {
fopAc_ac_c* equipActor = mActorKeepEquip.getActor();
if (param_1 != 0 && (mHeldItemType != 0x100 && mHeldItemType != 0x101)) {
if (param_1 && (mHeldItemType != 0x100 && mHeldItemType != 0x101)) {
if (mHeldItemType == 0x103) {
seStartOnlyReverb(JA_SE_LK_SW_PUTIN_S);
} else {
@@ -3949,7 +3949,7 @@ void daPy_lk_c::setFallVoice() {
void daPy_lk_c::keepItemData() {
mKeepItemType = mHeldItemType;
deleteEquipItem(0);
deleteEquipItem(FALSE);
if (mKeepItemType == 0x101) {
mKeepItemType = 0x100;
@@ -3965,7 +3965,7 @@ void daPy_lk_c::returnKeepItemData() {
return;
}
deleteEquipItem(0);
deleteEquipItem(FALSE);
mHeldItemType = mKeepItemType;
mKeepItemType = 0x100;
@@ -4093,8 +4093,20 @@ void daPy_lk_c::changeLandProc(f32) {
}
/* 8011029C-80110338 .text setDamagePoint__9daPy_lk_cFf */
void daPy_lk_c::setDamagePoint(f32) {
/* Nonmatching */
BOOL daPy_lk_c::setDamagePoint(f32 amount) {
if (!checkNoDamageMode()) {
dComIfGp_setItemLifeCount(amount);
if (amount < 0.0f) {
offNoResetFlg1(daPyFlg1_UNK8000);
if (dComIfGs_getSelectEquip(0) != MASTER_SWORD_EX) {
offNoResetFlg1(daPyFlg1_UNK200000);
}
}
return TRUE;
} else {
seStartMapInfo(JA_SE_LK_MGC_SHIELD_DEF);
return FALSE;
}
}
/* 80110338-80110448 .text checkNormalDamage__9daPy_lk_cFi */
@@ -4118,13 +4130,234 @@ BOOL daPy_lk_c::checkElecReturnDamage(dCcD_GObjInf*, cXyz*) {
}
/* 801105D8-80110654 .text checkWallAtributeDamage__9daPy_lk_cFP12dBgS_AcchCir */
BOOL daPy_lk_c::checkWallAtributeDamage(dBgS_AcchCir*) {
s32 daPy_lk_c::checkWallAtributeDamage(dBgS_AcchCir*) {
/* Nonmatching */
}
/* 80110654-80110F3C .text changeDamageProc__9daPy_lk_cFv */
void daPy_lk_c::changeDamageProc() {
/* Nonmatching */
BOOL daPy_lk_c::changeDamageProc() {
if (!checkModeFlg(0x8) && mDamageWaitTimer > 0) {
mDamageWaitTimer--;
if (mDamageWaitTimer == 0) {
if (m_anm_heap_upper[2].mIdx == LKANM_BCK_DAMDASH) {
resetActAnimeUpper(UPPER_UNK2, daPy_HIO_basic_c0::m.field_0xC);
} else if (checkModeFlg(0x40000)) {
resetPriTextureAnime();
}
}
}
if (checkNoResetFlg0(daPyFlg0_UNK1000000)) {
offNoResetFlg0(daPyFlg0_UNK1000000);
changePlayer(this);
return procLargeDamage_init(-5, 1, 0, 0);
}
daShip_c* ship = (daShip_c*)dComIfGp_getShipActor();
if (dComIfGp_event_runCheck() ||
mDemo.getDemoType() != 0 ||
checkNoControll() ||
mCurProc == PROC_SHIP_READY_e ||
(
dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) &&
ship && ship->unknown_inline_TODO()
)
) {
offNoResetFlg0(daPyFlg0_SHIP_DROP);
return FALSE;
}
BOOL r30;
int r29;
s32 r28 = dBgS_Attr_NORMAL_e;
if (checkNoResetFlg1(daPyFlg1_UNK4) || (
mAcch.ChkGroundHit() &&
!checkModeFlg(0x20) &&
mCurrAttributeCode == dBgS_Attr_FREEZE_e
)) {
changePlayer(this);
return dProcFreezeDamage_init();
} else if (
dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) &&
checkNoResetFlg0(daPyFlg0_SHIP_DROP)
) {
offNoResetFlg0(daPyFlg0_SHIP_DROP);
changePlayer(this);
return procLargeDamage_init(-2, 1, 0, 0);
} else if (!checkModeFlg(0x8) && mDamageWaitTimer == 0) {
if (mAcch.ChkGroundHit() && (
mCurrAttributeCode == dBgS_Attr_DAMAGE_e ||
mCurrAttributeCode == dBgS_Attr_ELECTRICITY_e
)) {
r28 = mCurrAttributeCode;
} else {
for (int i = 0; r28 == dBgS_Attr_NORMAL_e && i < (s32)ARRAY_SIZE(mAcchCir); i++) {
r28 = checkWallAtributeDamage(&mAcchCir[i]);
}
}
}
if (r28 != dBgS_Attr_NORMAL_e) {
r30 = TRUE;
r29 = 1;
} else {
r30 = FALSE;
r29 = mStts.GetDmg();
if (mCyl.ChkTgHit() && mCyl.GetTgHitGObj() && mCyl.GetTgHitGObj()->GetAtType() == 0x20) {
r29 = 1;
}
}
dCcG_At_Spl r27;
if (mCyl.ChkTgHit()) {
dCcD_GObjInf* gobj = mCyl.GetTgHitGObj();
if (gobj) {
r27 = gobj->GetAtSpl();
} else {
r27 = mStts.GetAtSpl();
}
} else {
r27 = (dCcG_At_Spl)0;
}
if (checkModeFlg(0x4000000)) {
if (r30 || mCyl.ChkTgHit() && !checkSuccessGuard(r27)) {
setDamagePoint(-r29);
mDamageWaitTimer = daPy_HIO_dam_c0::m.field_0x2;
voiceStart(2);
seStartOnlyReverb(JA_SE_LK_DAMAGE_NORMAL);
changePlayer(this);
if (mCyl.ChkTgHit() && !checkSuccessGuard(r27)) {
setDamageEmitter();
} else if (r28 == dBgS_Attr_ELECTRICITY_e) {
setDamageElecEmitter();
}
if (daPy_dmEcallBack_c::checkElec()) {
if (checkModeFlg(0x800)) {
return procElecDamage_init(NULL);
} else if (checkModeFlg(0x40000)) {
return procElecDamage_init(NULL);
}
}
if (checkModeFlg(0x40000) && !checkNoDamageMode()) {
setPriTextureAnime(0x40, 0);
}
}
} else {
if (mAtCps[0].GetAtType() != 0x80 && mAtCps[0].GetAtType() != 0x100) {
cXyz sp8;
if (checkElecReturnDamage(&mAtCps[0], &sp8) ||
checkElecReturnDamage(&mAtCps[1], &sp8) ||
checkElecReturnDamage(&mAtCps[2], &sp8)
) {
setDamagePoint(-1.0f);
onResetFlg0(daPyRFlg0_UNK80000);
setDamageElecEmitter();
changePlayer(this);
if (procElecDamage_init(&sp8)) {
return TRUE;
}
if (daPy_lk_c::checkPlayerFly()) {
return procLargeDamage_init(-1, 1, 0, 0);
} else {
return procDamage_init();
}
}
}
if (mCyl.ChkTgHit() && !checkGuardSlip() &&
(!dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) || !checkNoDamageMode())
) {
freeRopeItem();
freeHookshotItem();
if (!checkSuccessGuard(r27)) {
if (mHeldItemType == 0x101) {
deleteEquipItem(FALSE);
}
setDamageEmitter();
changePlayer(this);
setDamagePoint(-r29);
fopAc_ac_c* grabActor = mActorKeepGrab.getActor();
if (daPy_dmEcallBack_c::checkElec()) {
if (procElecDamage_init(NULL)) {
return TRUE;
}
}
if (checkModeFlg(0x2000)) {
return procLargeDamage_init(-9, 1, 0, 0);
}
if (checkGrabWear() &&
mCyl.GetTgHitAc() && fopAcM_GetName(mCyl.GetTgHitAc()) == PROC_NZ &&
grabActor)
{
cXyz* r3 = getDamageVec(&mCyl);
grabActor->shape_angle.y = cM_atan2s(r3->x, r3->z);
grabActor->shape_angle.x = 0x2000;
return procLargeDamage_init(-4, 1, 0, 0);
}
if (r27 == 7 || r27 == 2 || r27 == 10) {
return procLargeDamage_init(-6, 0, 0, 0);
}
if (daPy_lk_c::checkPlayerFly() || r27 == 6 || r27 == 1 || r27 == 9) {
return procLargeDamage_init(-1, 1, 0, 0);
}
if (checkNormalDamage(r29)) {
return procDamage_init();
}
setDashDamage();
} else {
u8 hitSe = mCyl.GetTgHitObjSe();
if (hitSe == 6) {
seStartOnlyReverb(JA_SE_OBJ_COL_N_BDY_MPLT);
} else if (hitSe == 2 || hitSe == 5) {
seStartOnlyReverb(JA_SE_OBJ_COL_SWS_NMTLP);
} else if (hitSe == 4) {
seStartOnlyReverb(JA_SE_OBJ_COL_NWHP_NMTL);
} else {
seStartOnlyReverb(JA_SE_OBJ_COL_SWM_NSWL);
}
if (mCurProc == PROC_CROUCH_DEFENSE_e) {
return procCrouchDefenseSlip_init();
} else {
return procGuardSlip_init();
}
}
} else if (r30) {
changePlayer(this);
if (mHeldItemType == 0x101) {
deleteEquipItem(FALSE);
}
setDamagePoint(-r29);
if (r28 == dBgS_Attr_ELECTRICITY_e) {
setDamageElecEmitter();
if (procElecDamage_init(NULL)) {
return TRUE;
}
}
if (checkNormalDamage(r29)) {
return procPolyDamage_init();
}
setDashDamage();
}
}
mStts.ClrTg();
mStts.ClrAt();
return FALSE;
}
/* 80110F3C-80111424 .text changeAutoJumpProc__9daPy_lk_cFv */
@@ -4143,7 +4376,7 @@ void daPy_lk_c::changeDeadProc() {
}
/* 80111B80-80111D64 .text getDamageVec__9daPy_lk_cFP12dCcD_GObjInf */
void daPy_lk_c::getDamageVec(dCcD_GObjInf*) {
cXyz* daPy_lk_c::getDamageVec(dCcD_GObjInf*) {
/* Nonmatching */
}
@@ -4249,7 +4482,7 @@ BOOL daPy_lk_c::commonProcInit(daPy_lk_c::daPy_PROC proc) {
} else if (mCurProc == PROC_FAN_SWING_e) {
setSmallFanModel();
} else if (mCurProc == PROC_FAN_GLIDE_e) {
deleteEquipItem(0);
deleteEquipItem(FALSE);
mMaxFallSpeed = daPy_HIO_autoJump_c0::m.field_0x10;
setSmallFanModel();
mHeldItemType = DEKU_LEAF;
@@ -4273,7 +4506,7 @@ BOOL daPy_lk_c::commonProcInit(daPy_lk_c::daPy_PROC proc) {
item->dead();
}
} else if (mCurProc == DPROC_LETTER_READ_e) {
deleteEquipItem(0);
deleteEquipItem(FALSE);
} else if (mCurProc == PROC_CUT_ROLL_END_e) {
if (m33A8.getEmitter()) {
m33A8.getEmitter()->setGlobalAlpha(0);
@@ -5211,8 +5444,8 @@ BOOL daPy_lk_c::startRestartRoom(u32 param_1, int eventInfoIdx, f32 param_3, int
}
/* 80120BBC-80120BE0 .text checkSuccessGuard__9daPy_lk_cFi */
BOOL daPy_lk_c::checkSuccessGuard(int param_1) {
if (!mCyl.ChkTgShieldHit() || param_1 >= 8) {
BOOL daPy_lk_c::checkSuccessGuard(int atSpl) {
if (!mCyl.ChkTgShieldHit() || atSpl >= 8) {
return FALSE;
}
return TRUE;
+1 -1
View File
@@ -38,7 +38,7 @@ void daPy_lk_c::setShipRideArmAngle(int, J3DTransformInfo*) {
int daPy_lk_c::checkShipRideUseItem(int param_1) {
if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && dComIfGp_getShipActor() != NULL) {
if (param_1 != 0) {
deleteEquipItem(0);
deleteEquipItem(FALSE);
}
if (checkShipNotNormalMode()) {
return 2;
+1 -1
View File
@@ -33,7 +33,7 @@ void daPy_lk_c::setTactModel() {
if (mHeldItemType == WIND_TACT)
return;
deleteEquipItem(0);
deleteEquipItem(FALSE);
mHeldItemType = WIND_TACT;
JKRHeap* oldHeap = setItemHeap();