mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-25 09:22:20 -04:00
d_cc_uty OK
This commit is contained in:
+250
-15
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user