diff options
| author | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2024-01-20 19:27:19 -0500 |
|---|---|---|
| committer | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2024-01-20 19:27:19 -0500 |
| commit | 25e69da75e7c76b3b65ec1ecd6a4cfecfeaf65be (patch) | |
| tree | 117164becb109f873d65ce7f1672b777658dd81c /src | |
| parent | 29890bc07c634824299f6d1f226a7392e32da1e6 (diff) | |
d_cc_uty OK
Diffstat (limited to 'src')
| -rw-r--r-- | src/c/c_damagereaction.cpp | 6 | ||||
| -rw-r--r-- | src/d/actor/d_a_am.cpp | 4 | ||||
| -rw-r--r-- | src/d/actor/d_a_am2.cpp | 4 | ||||
| -rw-r--r-- | src/d/actor/d_a_arrow.cpp | 4 | ||||
| -rw-r--r-- | src/d/actor/d_a_bk.cpp | 2 | ||||
| -rw-r--r-- | src/d/actor/d_a_hookshot.cpp | 2 | ||||
| -rw-r--r-- | src/d/actor/d_a_obj_akabe.cpp | 2 | ||||
| -rw-r--r-- | src/d/actor/d_a_player_main.cpp | 30 | ||||
| -rw-r--r-- | src/d/actor/d_a_player_main_data.inc | 4 | ||||
| -rw-r--r-- | src/d/actor/d_a_rd.cpp | 4 | ||||
| -rw-r--r-- | src/d/d_cc_uty.cpp | 265 | ||||
| -rw-r--r-- | src/d/d_kankyo_rain.cpp | 2 | ||||
| -rw-r--r-- | src/f_op/f_op_actor_mng.cpp | 2 |
13 files changed, 283 insertions, 48 deletions
diff --git a/src/c/c_damagereaction.cpp b/src/c/c_damagereaction.cpp index b0ba4395..094a7b1d 100644 --- a/src/c/c_damagereaction.cpp +++ b/src/c/c_damagereaction.cpp @@ -87,7 +87,7 @@ dCcD_SrcCyl cc_cyl_src = { /* SrcGObjAt Spl */ 0, /* SrcGObjAt Mtrl */ 0, /* SrcGObjAt SPrm */ 0, - /* SrcGObjTg Se */ 0x05, + /* SrcGObjTg Se */ dCcD_SE_UNK5, /* SrcGObjTg HitMark */ G_TG_MARK_PURPLE_HIT, /* SrcGObjTg Spl */ 0, /* SrcGObjTg Mtrl */ 0, @@ -158,7 +158,7 @@ BOOL enemy_ice(enemyice* ei) { if (fopAcM_GetName(ac) != PROC_PZ) { // If the actor is not Princess Zelda, drop an item ball. // TODO: Why the Zelda check? Is she coded to be able to die to Light Arrows? - fopAcM_createIball(&pos, ac->mItemTableIdx, fopAcM_GetRoomNo(ac), &ac->current.angle, ac->mItemStealNum); + fopAcM_createIball(&pos, ac->mItemTableIdx, fopAcM_GetRoomNo(ac), &ac->current.angle, ac->mStealItemBitNo); } if (ei->mDeathSwitch != 0) { dComIfGs_onSwitch(ei->mDeathSwitch, fopAcM_GetRoomNo(ac)); @@ -336,7 +336,7 @@ BOOL enemy_ice(enemyice* ei) { } fopAcM_seStart(ac, JA_SE_CM_ICE_BREAK, 0); - fopAcM_createIball(&pos, ac->mItemTableIdx, fopAcM_GetRoomNo(ac), &ac->current.angle, ac->mItemStealNum); + fopAcM_createIball(&pos, ac->mItemTableIdx, fopAcM_GetRoomNo(ac), &ac->current.angle, ac->mStealItemBitNo); ei->mFreezeTimer = 0; if (ei->mDeathSwitch != 0) { dComIfGs_onSwitch(ei->mDeathSwitch, fopAcM_GetRoomNo(ac)); diff --git a/src/d/actor/d_a_am.cpp b/src/d/actor/d_a_am.cpp index 732cced5..24f0fed7 100644 --- a/src/d/actor/d_a_am.cpp +++ b/src/d/actor/d_a_am.cpp @@ -260,7 +260,7 @@ static BOOL medama_atari_check(am_class* i_this) { switch (hitObj->GetAtType()) { case AT_TYPE_GRAPPLING_HOOK: if (i_this->mCurrBckIdx != AM_BCK_SLEEP && i_this->mCurrBckIdx != AM_BCK_SLEEP_LOOP) { - if (i_this->mItemStealLeft > 0) { + if (i_this->mStealItemLeft > 0) { i_this->mMaxHealth = 10; i_this->mHealth = 10; atInfo.mpObj = i_this->mEyeSph.GetTgHitObj(); @@ -1192,7 +1192,7 @@ static s32 daAM_Create(fopAc_ac_c* i_actor) { return cPhs_ERROR_e; } - i_this->mItemStealLeft = 3; + i_this->mStealItemLeft = 3; i_this->mSmokeCbs[0].setRateOff(0); i_this->mSmokeCbs[1].setRateOff(0); diff --git a/src/d/actor/d_a_am2.cpp b/src/d/actor/d_a_am2.cpp index 13875624..e6831e8c 100644 --- a/src/d/actor/d_a_am2.cpp +++ b/src/d/actor/d_a_am2.cpp @@ -168,7 +168,7 @@ static BOOL medama_atari_check(am2_class* i_this) { if (hitObj->GetAtType() & AT_TYPE_GRAPPLING_HOOK) { if (i_this->mCurrBckIdx != AM2_BCK_SLEEP) { - if (i_this->mItemStealLeft > 0) { + if (i_this->mStealItemLeft > 0) { s8 origHealth = i_this->mHealth; i_this->mHealth = 10; atInfo.mpObj = i_this->mEyeSph.GetTgHitObj(); @@ -1338,7 +1338,7 @@ static s32 daAM2_Create(fopAc_ac_c* i_actor) { i_this->mItemTableIdx = dComIfGp_CharTbl()->GetNameIndex("amos2", 0); i_this->mMaxHealth = 2; i_this->mHealth = 2; - i_this->mItemStealLeft = 3; + i_this->mStealItemLeft = 3; i_this->model = i_this->mpMorf->getModel(); fopAcM_SetMtx(i_this, i_this->mpMorf->mpModel->getBaseTRMtx()); diff --git a/src/d/actor/d_a_arrow.cpp b/src/d/actor/d_a_arrow.cpp index 6dab7328..ea775d5b 100644 --- a/src/d/actor/d_a_arrow.cpp +++ b/src/d/actor/d_a_arrow.cpp @@ -33,7 +33,7 @@ const dCcD_SrcCps daArrow_c::m_at_cps_src = { /* SrcObjTg Type */ 0, /* SrcObjTg SPrm */ 0, /* SrcObjCo SPrm */ 0, - /* SrcGObjAt Se */ 0x07, + /* SrcGObjAt Se */ dCcD_SE_ARROW, /* SrcGObjAt HitMark */ G_AT_MARK_NORMAL_HIT, /* SrcGObjAt Spl */ 0, /* SrcGObjAt Mtrl */ 0, @@ -63,7 +63,7 @@ const dCcD_SrcSph daArrow_c::m_co_sph_src = { /* SrcObjTg Type */ 0, /* SrcObjTg SPrm */ 0, /* SrcObjCo SPrm */ CO_SPRM_SET | CO_SPRM_IS_UNK8 | CO_SPRM_VS_UNK2 | CO_SPRM_NO_CRR, - /* SrcGObjAt Se */ 0x07, + /* SrcGObjAt Se */ dCcD_SE_ARROW, /* SrcGObjAt HitMark */ 0, /* SrcGObjAt Spl */ 0, /* SrcGObjAt Mtrl */ 0, diff --git a/src/d/actor/d_a_bk.cpp b/src/d/actor/d_a_bk.cpp index ab5c2a48..ecddbace 100644 --- a/src/d/actor/d_a_bk.cpp +++ b/src/d/actor/d_a_bk.cpp @@ -863,7 +863,7 @@ static s32 daBk_Create(fopAc_ac_c* i_actor) { i_this->mEnemyFire.mParticleScale[i] = fire_sc[i]; } - i_this->mItemStealLeft = 3; + i_this->mStealItemLeft = 3; daBk_Execute(i_this); } diff --git a/src/d/actor/d_a_hookshot.cpp b/src/d/actor/d_a_hookshot.cpp index b2ef9d27..9378a900 100644 --- a/src/d/actor/d_a_hookshot.cpp +++ b/src/d/actor/d_a_hookshot.cpp @@ -343,7 +343,7 @@ static dCcD_SrcCps l_at_cps_src = { /* SrcObjTg Type */ 0, /* SrcObjTg SPrm */ 0, /* SrcObjCo SPrm */ 0, - /* SrcGObjAt Se */ 0x08, + /* SrcGObjAt Se */ dCcD_SE_HOOKSHOT, /* SrcGObjAt HitMark */ 0, /* SrcGObjAt Spl */ 0, /* SrcGObjAt Mtrl */ 0, diff --git a/src/d/actor/d_a_obj_akabe.cpp b/src/d/actor/d_a_obj_akabe.cpp index 9ef730bb..3d63fa4d 100644 --- a/src/d/actor/d_a_obj_akabe.cpp +++ b/src/d/actor/d_a_obj_akabe.cpp @@ -21,7 +21,7 @@ namespace daObjAkabe { /* 00000078-0000009C .text solidHeapCB__Q210daObjAkabe5Act_cFP10fopAc_ac_c */ BOOL Act_c::solidHeapCB(fopAc_ac_c* i_this) { - return ((Act_c*)i_this)->create_heap() & 0xFF; // Fakematch + return ((Act_c*)i_this)->create_heap() & 0xFF; // Fakematch (see comment in create_heap) } /* 0000009C-000001A4 .text create_heap__Q210daObjAkabe5Act_cFv */ diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 23fb0c86..a9415712 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -1749,7 +1749,7 @@ BOOL daPy_lk_c::changeDamageProc() { } BOOL r30; - int r29; + int damage; s32 r28 = dBgS_Attr_NORMAL_e; if (checkNoResetFlg1(daPyFlg1_UNK4) || ( @@ -1781,12 +1781,12 @@ BOOL daPy_lk_c::changeDamageProc() { if (r28 != dBgS_Attr_NORMAL_e) { r30 = TRUE; - r29 = 1; + damage = 1; } else { r30 = FALSE; - r29 = mStts.GetDmg(); - if (mCyl.ChkTgHit() && mCyl.GetTgHitGObj() && mCyl.GetTgHitGObj()->GetAtType() == 0x20) { - r29 = 1; + damage = mStts.GetDmg(); + if (mCyl.ChkTgHit() && mCyl.GetTgHitGObj() && mCyl.GetTgHitGObj()->GetAtType() == AT_TYPE_BOMB) { + damage = 1; } } @@ -1804,7 +1804,7 @@ BOOL daPy_lk_c::changeDamageProc() { if (checkModeFlg(ModeFlg_04000000)) { if (r30 || mCyl.ChkTgHit() && !checkSuccessGuard(r27)) { - setDamagePoint(-r29); + setDamagePoint(-damage); mDamageWaitTimer = daPy_HIO_dam_c0::m.field_0x2; voiceStart(2); @@ -1828,7 +1828,7 @@ BOOL daPy_lk_c::changeDamageProc() { } } } else { - if (mAtCps[0].GetAtType() != 0x80 && mAtCps[0].GetAtType() != 0x100) { + if (mAtCps[0].GetAtType() != AT_TYPE_BOKO_STICK && mAtCps[0].GetAtType() != AT_TYPE_WATER) { cXyz sp8; if (checkElecReturnDamage(&mAtCps[0], &sp8) || checkElecReturnDamage(&mAtCps[1], &sp8) || @@ -1864,7 +1864,7 @@ BOOL daPy_lk_c::changeDamageProc() { setDamageEmitter(); changePlayer(this); - setDamagePoint(-r29); + setDamagePoint(-damage); fopAc_ac_c* grabActor = mActorKeepGrab.getActor(); if (daPy_dmEcallBack_c::checkElec()) { if (procElecDamage_init(NULL)) { @@ -1891,17 +1891,17 @@ BOOL daPy_lk_c::changeDamageProc() { if (daPy_lk_c::checkPlayerFly() || r27 == 6 || r27 == 1 || r27 == 9) { return procLargeDamage_init(-1, 1, 0, 0); } - if (checkNormalDamage(r29)) { + if (checkNormalDamage(damage)) { return procDamage_init(); } setDashDamage(); } else { u8 hitSe = mCyl.GetTgHitObjSe(); - if (hitSe == 6) { + if (hitSe == dCcD_SE_UNK6) { seStartOnlyReverb(JA_SE_OBJ_COL_N_BDY_MPLT); - } else if (hitSe == 2 || hitSe == 5) { + } else if (hitSe == dCcD_SE_UNK2 || hitSe == dCcD_SE_UNK5) { seStartOnlyReverb(JA_SE_OBJ_COL_SWS_NMTLP); - } else if (hitSe == 4) { + } else if (hitSe == dCcD_SE_UNK4) { seStartOnlyReverb(JA_SE_OBJ_COL_NWHP_NMTL); } else { seStartOnlyReverb(JA_SE_OBJ_COL_SWM_NSWL); @@ -1918,7 +1918,7 @@ BOOL daPy_lk_c::changeDamageProc() { if (mHeldItemType == 0x101) { deleteEquipItem(FALSE); } - setDamagePoint(-r29); + setDamagePoint(-damage); if (r28 == dBgS_Attr_ELECTRICITY_e) { setDamageElecEmitter(); @@ -1927,7 +1927,7 @@ BOOL daPy_lk_c::changeDamageProc() { } } - if (checkNormalDamage(r29)) { + if (checkNormalDamage(damage)) { return procPolyDamage_init(); } @@ -2790,7 +2790,7 @@ void daPy_lk_c::setAtParam(u32 type, int atp, dCcG_At_Spl spl, u8 se, u8 hitMark atp *= 2; } if (type != AT_TYPE_SWORD) { - field_0x291 = 0; + mCutCount = 0; } for (int i = 0; i < ARRAY_SIZE(mAtCps); i++, cps++) { cps->SetAtType(type); diff --git a/src/d/actor/d_a_player_main_data.inc b/src/d/actor/d_a_player_main_data.inc index 3349f89f..adf4fd33 100644 --- a/src/d/actor/d_a_player_main_data.inc +++ b/src/d/actor/d_a_player_main_data.inc @@ -57,7 +57,7 @@ static dCcD_SrcCyl l_cyl_src = { /* SrcGObjAt Spl */ 0, /* SrcGObjAt Mtrl */ 0, /* SrcGObjAt SPrm */ 0, - /* SrcGObjTg Se */ 0x25, + /* SrcGObjTg Se */ dCcD_SE_UNK25, /* SrcGObjTg HitMark */ G_TG_MARK_PURPLE_HIT, /* SrcGObjTg Spl */ 0, /* SrcGObjTg Mtrl */ 0, @@ -142,7 +142,7 @@ static dCcD_SrcCps l_at_cps_src = { /* SrcObjTg Type */ 0, /* SrcObjTg SPrm */ 0, /* SrcObjCo SPrm */ 0, - /* SrcGObjAt Se */ 0x01, + /* SrcGObjAt Se */ dCcD_SE_UNK1, /* SrcGObjAt HitMark */ G_AT_MARK_NORMAL_HIT, /* SrcGObjAt Spl */ 0, /* SrcGObjAt Mtrl */ 0, diff --git a/src/d/actor/d_a_rd.cpp b/src/d/actor/d_a_rd.cpp index 5611faed..0f0661a8 100644 --- a/src/d/actor/d_a_rd.cpp +++ b/src/d/actor/d_a_rd.cpp @@ -45,7 +45,7 @@ const dCcD_SrcCyl daRd_c::m_cyl_src = { /* SrcGObjAt Spl */ 0, /* SrcGObjAt Mtrl */ 0, /* SrcGObjAt SPrm */ 0, - /* SrcGObjTg Se */ 0x23, + /* SrcGObjTg Se */ dCcD_SE_UNK23, /* SrcGObjTg HitMark */ 0, /* SrcGObjTg Spl */ 0, /* SrcGObjTg Mtrl */ 0, @@ -1813,7 +1813,7 @@ void daRd_c::createInit() { mD3C = 1; mD40 = 1; - mItemStealLeft = 5; + mStealItemLeft = 5; mEnemyFire.mpMcaMorf = mpMorf; mEnemyFire.mpActor = this; diff --git a/src/d/d_cc_uty.cpp b/src/d/d_cc_uty.cpp index ff04bff1..21e9bf40 100644 --- a/src/d/d_cc_uty.cpp +++ b/src/d/d_cc_uty.cpp @@ -4,39 +4,274 @@ // #include "d/d_cc_uty.h" -#include "dolphin/types.h" +#include "d/d_com_inf_game.h" +#include "d/actor/d_a_player.h" +#include "d/actor/d_a_bomb.h" +#include "d/actor/d_a_tsubo.h" +#include "d/actor/d_a_mt.h" +#include "d/d_procname.h" +#include "d/d_s_play.h" /* 800AE938-800AE9E8 .text cc_pl_cut_bit_get__Fv */ -void cc_pl_cut_bit_get() { - /* Nonmatching */ +int cc_pl_cut_bit_get() { + daPy_py_c* player = daPy_getPlayerActorClass(); + int r3 = 0; + if (player->getCutType() == 1) { + r3 = 0x01; + } else if (player->getCutType() == 2) { + r3 = 0x02; + } else if (player->getCutType() == 3) { + r3 = 0x04; + } else if (player->getCutType() == 4) { + r3 = 0x08; + } else if (player->getCutType() == 5) { + r3 = 0x10; + } else if (player->getCutType() == 6) { + r3 = 0x20; + } else if (player->getCutType() == 7) { + r3 = 0x40; + } else if (player->getCutType() == 8 || player->getCutType() == 9) { + r3 = 0x80; + } else if (player->getCutType() == 10) { + r3 = 0x100; + } + return r3; } /* 800AE9E8-800AEA60 .text at_se_get__FP8cCcD_Obj */ -void at_se_get(cCcD_Obj*) { - /* Nonmatching */ +u32 at_se_get(cCcD_Obj* obj) { + dCcD_GObjInf* gObjInf = dCcD_GetGObjInf(obj); + if (gObjInf->GetAtType() & (AT_TYPE_SKULL_HAMMER | AT_TYPE_STALFOS_MACE)) { + return JA_SE_LK_HAMMER_HIT; + } else if (gObjInf->GetAtSe() == dCcD_SE_UNK4) { + return JA_SE_LK_W_WEP_HIT; + } else if (gObjInf->GetAtSe() == dCcD_SE_UNK5) { + return JA_SE_LK_MS_WEP_HIT; + } else if (gObjInf->GetAtSe() == dCcD_SE_ARROW) { + return JA_SE_LK_ARROW_HIT; + } else if (gObjInf->GetAtSe() == dCcD_SE_HOOKSHOT) { + return JA_SE_LK_HS_SPIKE; + } else { + return JA_SE_LK_SW_HIT_S; + } } /* 800AEA60-800AEAD8 .text at_se_getC__FP8cCcD_Obj */ -void at_se_getC(cCcD_Obj*) { - /* Nonmatching */ +u32 at_se_getC(cCcD_Obj* obj) { + dCcD_GObjInf* gObjInf = dCcD_GetGObjInf(obj); + if (gObjInf->GetAtType() & (AT_TYPE_SKULL_HAMMER | AT_TYPE_STALFOS_MACE)) { + return JA_SE_LK_HAMMER_HIT; + } else if (gObjInf->GetAtSe() == dCcD_SE_UNK4) { + return JA_SE_LK_W_WEP_CRT_HIT; + } else if (gObjInf->GetAtSe() == dCcD_SE_UNK5) { + return JA_SE_LK_MS_WEP_CRT_HIT; + } else if (gObjInf->GetAtSe() == dCcD_SE_ARROW) { + return JA_SE_LK_ARROW_HIT; + } else if (gObjInf->GetAtSe() == dCcD_SE_HOOKSHOT) { + return JA_SE_LK_HS_SPIKE; + } else { + return JA_SE_LK_SW_CRT_HIT; + } } /* 800AEAD8-800AEB50 .text def_se_set__FP10fopAc_ac_cP8cCcD_ObjUl */ -void def_se_set(fopAc_ac_c*, cCcD_Obj*, unsigned long) { - /* Nonmatching */ +void def_se_set(fopAc_ac_c* actor, cCcD_Obj* obj, unsigned long r5) { + fopAcM_seStart(actor, at_se_get(obj), r5); } /* 800AEB50-800AEBCC .text def_se_set_p__FP10fopAc_ac_cP4cXyzP8cCcD_ObjUl */ -void def_se_set_p(fopAc_ac_c*, cXyz*, cCcD_Obj*, unsigned long) { - /* Nonmatching */ +void def_se_set_p(fopAc_ac_c* actor, cXyz* sePos, cCcD_Obj* obj, unsigned long r6) { + mDoAud_seStart(at_se_get(obj), sePos, r6, dComIfGp_getReverb(fopAcM_GetRoomNo(actor))); } /* 800AEBCC-800AEEF8 .text at_power_check__FP8CcAtInfo */ -void at_power_check(CcAtInfo*) { - /* Nonmatching */ +fopAc_ac_c* at_power_check(CcAtInfo* atInfo) { + daPy_py_c* player = daPy_getPlayerActorClass(); + if (atInfo->mpObj == NULL) { + return NULL; + } + fopAc_ac_c* r0; + if (atInfo->mpObj->GetStts() == NULL) { + r0 = NULL; + } else { + r0 = atInfo->mpObj->GetStts()->GetAc(); + } + atInfo->mpActor = r0; + atInfo->mResultingAttackType = 0xC; + atInfo->mDamage = 0; + + if (atInfo->mpObj->GetAtType() & AT_TYPE_WATER) { + atInfo->mResultingAttackType = 0x4; + return atInfo->mpActor; + } else if (atInfo->mpObj->GetAtType() & AT_TYPE_WIND) { + atInfo->mResultingAttackType = 0x8; + return atInfo->mpActor; + } else if (atInfo->mpObj->GetAtType() & AT_TYPE_UNK20000) { + atInfo->mResultingAttackType = 0x5; + return atInfo->mpActor; + } else if (atInfo->mpObj->GetAtType() & (AT_TYPE_FIRE | AT_TYPE_FIRE_ARROW)) { + atInfo->mResultingAttackType = 0x5; + } + + if (atInfo->mpActor) { + atInfo->mDamage = atInfo->mpObj->GetAtAtp(); + + if (fopAcM_GetName(atInfo->mpActor) == PROC_PLAYER) { + if (atInfo->mpObj->GetAtType() & AT_TYPE_SKULL_HAMMER) { + atInfo->mResultingAttackType = 0x9; + } else { + atInfo->mResultingAttackType = 0x1; + atInfo->mPlCutBit = cc_pl_cut_bit_get(); + + if (player->getCutCount() == 3) { + atInfo->mHitSoundId = 1; + } else if (player->getCutCount() == 4) { + atInfo->mHitSoundId = 4; + } else if (player->getCutType() == 0xA) { + atInfo->mHitSoundId = 2; + } else if (player->getCutType() == 0x5 || player->getCutType() == 0xF || player->getCutType() == 0x10) { + atInfo->mHitSoundId = 3; + } else { + atInfo->mHitSoundId = 0; + } + } + } else if (fopAcM_GetName(atInfo->mpActor) == PROC_BOMB) { + daBomb_c* bomb = (daBomb_c*)atInfo->mpActor; + if (bomb->chk_state(daBomb_c::STATE_8)) { + atInfo->mResultingAttackType = 0xD; + } else { + atInfo->mResultingAttackType = 0x2; + } + atInfo->mPlCutBit = 0x200; + } else if (fopAcM_GetName(atInfo->mpActor) == PROC_Bomb2) { + atInfo->mResultingAttackType = 0x2; + atInfo->mPlCutBit = 0x200; + } else if (fopAcM_GetName(atInfo->mpActor) == PROC_HIMO2) { + atInfo->mResultingAttackType = 0xE; + atInfo->mPlCutBit = 0x400; + } else if (fopAcM_GetName(atInfo->mpActor) == PROC_BOOMERANG) { + atInfo->mResultingAttackType = 0xA; + atInfo->mPlCutBit = 0x800; + } else if (fopAcM_GetName(atInfo->mpActor) == PROC_ARROW) { + atInfo->mPlCutBit = 0x1000; + } else if (fopAcM_GetName(atInfo->mpActor) == PROC_BDK) { + atInfo->mResultingAttackType = 0xB; + } else if (fopAcM_GetName(atInfo->mpActor) == PROC_TSUBO) { + daTsubo::Act_c* tsubo = (daTsubo::Act_c*)atInfo->mpActor; + if (tsubo->prm_get_type() == daTsubo::Act_c::TYPE_WATER_JUG) { + atInfo->mResultingAttackType = 0x4; + } else { + atInfo->mResultingAttackType = 0x3; + } + } else if (fopAcM_GetName(atInfo->mpActor) == PROC_MO2) { + atInfo->mResultingAttackType = 0x7; + if (atInfo->mDamage > 2) { + atInfo->mDamage = 2; + } + } else if (fopAcM_GetName(atInfo->mpActor) == PROC_MT) { + atInfo->mResultingAttackType = 0x6; + atInfo->mDamage = 4; + } + } + + atInfo->mbDead = 0; + if (fopAcM_GetName(atInfo->mpActor) == PROC_PLAYER) { + dCcD_GObjInf* gObjInf = dCcD_GetGObjInf(atInfo->mpObj); + if (gObjInf->GetAtSpl() == 1) { + atInfo->mbDead = 1; + } + } else if (atInfo->mDamage >= 2) { + atInfo->mbDead = 1; + } + + return atInfo->mpActor; } /* 800AEEF8-800AF368 .text cc_at_check__FP10fopAc_ac_cP8CcAtInfo */ -void cc_at_check(fopAc_ac_c*, CcAtInfo*) { - /* Nonmatching */ +fopAc_ac_c* cc_at_check(fopAc_ac_c* r30, CcAtInfo* atInfo) { + atInfo->mHitSoundId = 0; + atInfo->mpActor = at_power_check(atInfo); + + s8 r28; + + if (atInfo->mpActor) { + mDoAud_onEnemyDamage(); + + f32 f2, f0; + if (atInfo->mpActor->speed.abs() > 50.0f) { + f2 = atInfo->mpActor->speed.x; + f0 = atInfo->mpActor->speed.z; + } else { + f2 = r30->current.pos.x - atInfo->mpActor->current.pos.x; + f0 = r30->current.pos.z - atInfo->mpActor->current.pos.z; + } + atInfo->m0E = cM_atan2s(-f2, -f0); + + if (atInfo->mpObj->GetAtType() & AT_TYPE_HOOKSHOT) { + if (fopAcM_checkStatus(r30, fopAcStts_UNK80000_e | fopAcStts_HOOK_CARRY_e | fopAcStts_UNK200000_e)) { + atInfo->mDamage = 0; + } + } + + if (fopAcM_GetName(atInfo->mpActor) == PROC_HIMO2 && r30->mStealItemLeft != 0) { + r30->mStealItemLeft--; + fopAcM_createStealItem(&r30->current.pos, r30->mItemTableIdx, r30->current.roomNo, NULL, r30->mStealItemBitNo); + r30->mStealItemBitNo++; + atInfo->mDamage = 0; + } + + if ((s8)atInfo->mDamage > 0) { + r30->mHealth -= atInfo->mDamage; + } + + if (r30->mHealth <= 0) { + atInfo->mbDead = 1; + + fopAcM_seStart(r30, JA_SE_LK_LAST_HIT, 0); + + r28 = 6 + g_regHIO.mChild->mShortRegs[7]; + + if (atInfo->pParticlePos) { + dComIfGp_particle_set(0x10, atInfo->pParticlePos); + cXyz scale; + scale.x = scale.y = scale.z = 2.0f; + csXyz angle; + angle.x = angle.z = 0; + angle.y = fopAcM_searchPlayerAngleY(r30); + dComIfGp_particle_set(dPa_name::ID_COMMON_NORMAL_HIT, atInfo->pParticlePos, &angle, &scale); + } + } else { + u32 r29 = fopAcM_GetName(r30) == PROC_ST ? 0x33 : 0x20; + if (atInfo->mbDead) { + fopAcM_seStart(r30, at_se_getC(atInfo->mpObj), r29); + if (atInfo->mResultingAttackType == 9) { + r28 = 6; + } else { + r28 = 4 + g_regHIO.mChild->mShortRegs[6]; + } + } else { + if (fopAcM_GetName(r30) == PROC_MT) { + mt_class* mt = (mt_class*)r30; + if (mt->m454 == 2) { + fopAcM_seStart(r30, JA_SE_OBJ_MG_BALL_DMG, 0); + } else { + fopAcM_seStart(r30, at_se_get(atInfo->mpObj), r29); + } + } else { + fopAcM_seStart(r30, at_se_get(atInfo->mpObj), r29); + } + r28 = 1 + g_regHIO.mChild->mShortRegs[5]; + } + } + + if (atInfo->mResultingAttackType == 1) { + dScnPly_ply_c::setPauseTimer(r28); + } + + if (atInfo->mDamage != 0) { + mDoAud_bgmHitSound(atInfo->mHitSoundId); + } + } + + return atInfo->mpActor; } diff --git a/src/d/d_kankyo_rain.cpp b/src/d/d_kankyo_rain.cpp index dac2f37b..02a23171 100644 --- a/src/d/d_kankyo_rain.cpp +++ b/src/d/d_kankyo_rain.cpp @@ -1253,7 +1253,7 @@ BOOL light_at_hit_check(cXyz* pPos) { BOOL ret = FALSE; fopAc_ac_c * pActor; u32 res = dComIfG_Ccsp()->ChkMass(pPos, &pActor, &hitInfo); - if (((res & 1) != 0) && (hitInfo.GetAtHitObj()->GetAtType() & AT_TYPE_LIGHT) != 0) + if (((res & 1) != 0) && (hitInfo.GetAtHitObj()->GetAtType() & AT_TYPE_LIGHT)) ret = TRUE; return ret; } diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index c03c2328..4b949b92 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -865,7 +865,7 @@ s32 fopAcM_createItemFromTable(cXyz* p_pos, int i_itemNo, int i_itemBitNo, int r if (tableIdx == RECOVER_FAIRY) { // Bug: This condition never gets triggered. They meant to check if (itemNo == RECOVER_FAIRY) so - // that the 3x fairies drop table (table 0x14) spawns them in a triangle. But nstead they check if + // that the 3x fairies drop table (table 0x14) spawns them in a triangle. But instead they check if // the table index is equal to 0x16/RECOVER_FAIRY, which will never be true. pos += fairy_offset_tbl[i]; angle.y = cM_rndF((f32)0x7FFE); |
