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/d/d_cc_uty.cpp | |
| parent | 29890bc07c634824299f6d1f226a7392e32da1e6 (diff) | |
d_cc_uty OK
Diffstat (limited to 'src/d/d_cc_uty.cpp')
| -rw-r--r-- | src/d/d_cc_uty.cpp | 265 |
1 files changed, 250 insertions, 15 deletions
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; } |
