mirror of
https://github.com/zeldaret/tp
synced 2026-05-23 15:01:53 -04:00
a6e76c0841
* some wii OS fixes * remove old dol2asm comments * remove dol2asm.h * remove function address comments * normalize ATTRIBUTE_ALIGN usage * DECL_WEAK macro * fix gcc attribute weak macro * wrap more mwcc specific things in ifdefs * fixes * fix revo sdk version flags * fixes
401 lines
8.2 KiB
C++
401 lines
8.2 KiB
C++
#include "d/dolzel.h" // IWYU pragma: keep
|
|
|
|
#include "d/d_cc_d.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "f_pc/f_pc_searcher.h"
|
|
|
|
void dCcD_GAtTgCoCommonBase::ClrActorInfo() {
|
|
mApid = -1;
|
|
mAc = NULL;
|
|
}
|
|
|
|
void dCcD_GAtTgCoCommonBase::ct() {
|
|
mGFlag = 0;
|
|
mRPrm = 0;
|
|
mHitCallback = NULL;
|
|
mEffCounter = 0;
|
|
}
|
|
|
|
void dCcD_GAtTgCoCommonBase::SetHitApid(fpc_ProcID hitApid) {
|
|
mApid = hitApid;
|
|
mAc = NULL;
|
|
}
|
|
|
|
fopAc_ac_c* dCcD_GAtTgCoCommonBase::GetAc() {
|
|
if (mApid == -1) {
|
|
return NULL;
|
|
}
|
|
if (mAc == NULL) {
|
|
mAc = fopAcM_SearchByID(mApid);
|
|
if (mAc == NULL) {
|
|
mApid = -1;
|
|
}
|
|
}
|
|
return mAc;
|
|
}
|
|
|
|
void dCcD_GAtTgCoCommonBase::Set(dCcD_SrcGAtTgCoCommonBase const& src) {
|
|
mGFlag = src.mGFlag;
|
|
mEffCounter = 0;
|
|
}
|
|
|
|
void dCcD_GAtTgCoCommonBase::SetEffCounterTimer() {
|
|
mEffCounter = 5;
|
|
}
|
|
|
|
void dCcD_GAtTgCoCommonBase::SubtractEffCounter() {
|
|
mEffCounter--;
|
|
if (mEffCounter < 0) {
|
|
mEffCounter = 0;
|
|
}
|
|
}
|
|
|
|
bool dCcD_GAtTgCoCommonBase::ChkEffCounter() {
|
|
return mEffCounter > 0;
|
|
}
|
|
|
|
dCcD_GStts::dCcD_GStts() {
|
|
mAt = 0;
|
|
mTg = 0;
|
|
mRoomId = 0;
|
|
field_0x08 = -1;
|
|
mAtApid = -1;
|
|
mAtOldApid = -1;
|
|
mTgApid = -1;
|
|
mTgOldApid = -1;
|
|
field_0x1C = 0;
|
|
}
|
|
|
|
void dCcD_GStts::Ct() {
|
|
mAt = 0;
|
|
mTg = 0;
|
|
mRoomId = 0;
|
|
field_0x08 = -1;
|
|
mAtApid = -1;
|
|
mAtOldApid = -1;
|
|
mTgApid = -1;
|
|
mTgOldApid = -1;
|
|
field_0x1C = 0;
|
|
}
|
|
|
|
void dCcD_GStts::Move() {
|
|
mAtOldApid = mAtApid;
|
|
mAtApid = 0;
|
|
mTgOldApid = mTgApid;
|
|
mTgApid = 0;
|
|
}
|
|
|
|
cCcD_GStts* dCcD_Stts::GetGStts() {
|
|
return this;
|
|
}
|
|
|
|
void dCcD_Stts::Init(int param_0, int param_1, fopAc_ac_c* pActor) {
|
|
u32 actorPid;
|
|
if (pActor != NULL) {
|
|
actorPid = fopAcM_GetID(pActor);
|
|
} else {
|
|
actorPid = -1;
|
|
}
|
|
|
|
cCcD_Stts::Init(param_0, param_1, pActor, actorPid);
|
|
|
|
s32 roomNo;
|
|
if (pActor != NULL) {
|
|
roomNo = fopAcM_GetRoomNo(pActor);
|
|
} else {
|
|
roomNo = 0;
|
|
OnNoActor();
|
|
}
|
|
|
|
if (roomNo != -1) {
|
|
SetRoomId(roomNo);
|
|
} else {
|
|
SetRoomId(0);
|
|
}
|
|
}
|
|
|
|
void dCcD_Stts::Ct() {
|
|
cCcD_Stts::Ct();
|
|
dCcD_GStts::Ct();
|
|
}
|
|
|
|
void dCcD_Stts::ClrAt() {
|
|
cCcD_Stts::ClrAt();
|
|
dCcD_GStts::ClrAt();
|
|
}
|
|
|
|
void dCcD_Stts::ClrTg() {
|
|
cCcD_Stts::ClrTg();
|
|
dCcD_GStts::ClrTg();
|
|
}
|
|
|
|
void dCcD_GObjAt::Set(dCcD_SrcGObjAt const& src) {
|
|
dCcD_GAtTgCoCommonBase::Set(src.mBase);
|
|
mSe = src.mSe;
|
|
mMtrl = src.mMtrl;
|
|
mHitMark = src.mHitMark;
|
|
mSpl = src.mSpl;
|
|
}
|
|
|
|
void dCcD_GObjTg::Set(dCcD_SrcGObjTg const& src) {
|
|
dCcD_GAtTgCoCommonBase::Set(src.mBase);
|
|
mSe = src.mSe;
|
|
mMtrl = src.mMtrl;
|
|
mHitMark = src.mHitMark;
|
|
mSpl = src.mSpl;
|
|
mHitPos = cXyz::Zero;
|
|
mShieldFrontRangeYAngle = NULL;
|
|
mShieldRange = 0x4000;
|
|
}
|
|
|
|
dCcD_GObjInf::dCcD_GObjInf() {}
|
|
|
|
dCcD_GObjInf::~dCcD_GObjInf() {}
|
|
|
|
cCcD_GObjInf* dCcD_GObjInf::GetGObjInf() {
|
|
return this;
|
|
}
|
|
|
|
void dCcD_GObjInf::ClrAtHit() {
|
|
cCcD_ObjHitInf::ClrAtHit();
|
|
mGObjAt.ClrHit();
|
|
OffAtShieldHit();
|
|
OffAtHitNoActor();
|
|
SubtractAtEffCounter();
|
|
}
|
|
|
|
u32 dCcD_GObjInf::ChkAtHit() {
|
|
if (cCcD_ObjHitInf::ChkAtHit() == 0) {
|
|
return 0;
|
|
} else if (ChkAtHitNoActor() == 0 && GetAtHitAc() == NULL) {
|
|
return 0;
|
|
} else {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
void dCcD_GObjInf::ResetAtHit() {
|
|
ClrAtHit();
|
|
ClrAtEffCounter();
|
|
}
|
|
|
|
cCcD_Obj* dCcD_GObjInf::GetAtHitObj() {
|
|
if (ChkAtHitNoActor() == 0 && GetAtHitAc() == NULL) {
|
|
return NULL;
|
|
} else {
|
|
return cCcD_ObjHitInf::GetAtHitObj();
|
|
}
|
|
}
|
|
|
|
cCcD_GObjInf* dCcD_GObjInf::GetAtHitGObj() {
|
|
cCcD_Obj* obj = GetAtHitObj();
|
|
if (obj == NULL) {
|
|
return NULL;
|
|
} else {
|
|
return dCcD_GetGObjInf(obj);
|
|
}
|
|
}
|
|
|
|
u8 dCcD_GObjInf::ChkAtNoGuard() {
|
|
return GetAtSpl() >= 12;
|
|
}
|
|
|
|
void dCcD_GObjInf::ClrTgHit() {
|
|
cCcD_ObjHitInf::ClrTgHit();
|
|
mGObjTg.ClrHit();
|
|
OffTgHitNoActor();
|
|
OffTgShieldHit();
|
|
OffTgMagneHit();
|
|
SubtractTgEffCounter();
|
|
}
|
|
|
|
u32 dCcD_GObjInf::ChkTgHit() {
|
|
if (cCcD_ObjHitInf::ChkTgHit() == 0) {
|
|
return false;
|
|
} else if (ChkTgHitNoActor() == 0 && GetTgHitAc() == NULL) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
void dCcD_GObjInf::ResetTgHit() {
|
|
ClrTgHit();
|
|
ClrTgEffCounter();
|
|
}
|
|
|
|
cCcD_Obj* dCcD_GObjInf::GetTgHitObj() {
|
|
if (ChkTgHitNoActor() == 0 && GetTgHitAc() == NULL) {
|
|
return NULL;
|
|
} else {
|
|
return cCcD_ObjHitInf::GetTgHitObj();
|
|
}
|
|
}
|
|
|
|
dCcD_GObjInf* dCcD_GObjInf::GetTgHitGObj() {
|
|
cCcD_Obj* obj = GetTgHitObj();
|
|
if (obj == NULL) {
|
|
return NULL;
|
|
} else {
|
|
return dCcD_GetGObjInf(obj);
|
|
}
|
|
}
|
|
|
|
u8 dCcD_GObjInf::GetTgHitObjSe() {
|
|
dCcD_GObjInf* objInf = GetTgHitGObj();
|
|
if (objInf == NULL) {
|
|
return NULL;
|
|
} else {
|
|
return objInf->GetAtSe();
|
|
}
|
|
}
|
|
|
|
Z2SoundID const dCcD_GObjInf::m_hitSeID[24] = {
|
|
Z2SE_HIT_DUMMY_CANCEL, Z2SE_HIT_SWORD, Z2SE_HIT_SHIELD_ATTACK,
|
|
Z2SE_HIT_WOLFKICK, Z2SE_HIT_WOLFBITE, Z2SE_HIT_WOOD_WEAPON,
|
|
Z2SE_HIT_HAMMER, Z2SE_HIT_ARROW_STICK, Z2SE_HIT_HOOKSHOT_STICK,
|
|
Z2SE_HIT_METAL_WEAPON, Z2SE_HIT_STONE_WEAPON, Z2SE_HIT_HARD_BODY,
|
|
Z2SE_HIT_SOFT_BODY, Z2SE_HIT_DUMMY_CANCEL, Z2SE_HIT_SWORD_STAB,
|
|
Z2SE_HIT_WOLFKICK, Z2SE_HIT_SWORD_RUN, Z2SE_HIT_EN_WOOD_WEAPON,
|
|
Z2SE_HIT_THOROW_OBJ, Z2SE_HIT_SPINNER, Z2SE_HIT_COPYROD,
|
|
Z2SE_HIT_STATUE_HAMMER, Z2SE_HIT_PACHINKO, Z2SE_HIT_AL_ARROW_STICK,
|
|
};
|
|
|
|
Z2SoundID dCcD_GObjInf::getHitSeID(u8 seIdx, int useRebound) {
|
|
if (useRebound) {
|
|
if (seIdx == 23) {
|
|
return Z2SE_HIT_AL_ARROW_REBOUND;
|
|
}
|
|
if (seIdx == 7) {
|
|
return Z2SE_HIT_ARROW_REBOUND;
|
|
}
|
|
if (seIdx == 8) {
|
|
return Z2SE_HIT_HOOKSHOT_REBOUND;
|
|
}
|
|
}
|
|
return m_hitSeID[seIdx];
|
|
}
|
|
|
|
void dCcD_GObjInf::ClrCoHit() {
|
|
cCcD_ObjHitInf::ClrCoHit();
|
|
mGObjCo.ClrHit();
|
|
OffCoHitNoActor();
|
|
SubtractCoEffCounter();
|
|
}
|
|
|
|
u32 dCcD_GObjInf::ChkCoHit() {
|
|
if (cCcD_ObjHitInf::ChkCoHit() == 0) {
|
|
return false;
|
|
} else if (ChkCoHitNoActor() == 0 && GetCoHitAc() == NULL) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
void dCcD_GObjInf::ResetCoHit() {
|
|
ClrCoHit();
|
|
ClrCoEffCounter();
|
|
}
|
|
|
|
cCcD_Obj* dCcD_GObjInf::GetCoHitObj() {
|
|
if (ChkCoHitNoActor() == 0 && GetCoHitAc() == NULL) {
|
|
return NULL;
|
|
} else {
|
|
return cCcD_ObjHitInf::GetCoHitObj();
|
|
}
|
|
}
|
|
|
|
void dCcD_GObjInf::Set(dCcD_SrcGObjInf const& src) {
|
|
cCcD_Obj::Set(src.mObj);
|
|
mGObjAt.Set(src.mGObjAt);
|
|
mGObjTg.Set(src.mGObjTg);
|
|
mGObjCo.Set(src.mGObjCo);
|
|
}
|
|
|
|
dCcD_GObjInf* dCcD_GetGObjInf(cCcD_Obj* p_obj) {
|
|
return (dCcD_GObjInf*)p_obj->GetGObjInf();
|
|
}
|
|
|
|
cCcD_ShapeAttr* dCcD_Pnt::GetShapeAttr() {
|
|
return this;
|
|
}
|
|
|
|
void dCcD_Cps::Set(dCcD_SrcCps const& src) {
|
|
dCcD_GObjInf::Set(src.mObjInf);
|
|
cCcD_CpsAttr::Set(src.mCpsAttr);
|
|
}
|
|
|
|
cCcD_ShapeAttr* dCcD_Cps::GetShapeAttr() {
|
|
return this;
|
|
}
|
|
|
|
void dCcD_Cps::CalcAtVec() {
|
|
cXyz* dest = GetAtVecP();
|
|
CalcVec(dest);
|
|
}
|
|
|
|
void dCcD_Cps::CalcTgVec() {
|
|
cXyz* dest = GetTgVecP();
|
|
CalcVec(dest);
|
|
}
|
|
|
|
void dCcD_Tri::Set(dCcD_SrcTri const& src) {
|
|
dCcD_GObjInf::Set(src.mObjInf);
|
|
}
|
|
|
|
cCcD_ShapeAttr* dCcD_Tri::GetShapeAttr() {
|
|
return this;
|
|
}
|
|
|
|
void dCcD_Cyl::Set(dCcD_SrcCyl const& src) {
|
|
dCcD_GObjInf::Set(src.mObjInf);
|
|
cCcD_CylAttr::Set(src.mCyl);
|
|
}
|
|
|
|
cCcD_ShapeAttr* dCcD_Cyl::GetShapeAttr() {
|
|
return this;
|
|
}
|
|
|
|
void dCcD_Cyl::StartCAt(cXyz& pos) {
|
|
cXyz zero(cXyz::Zero);
|
|
SetAtVec(zero);
|
|
SetC(pos);
|
|
}
|
|
|
|
void dCcD_Cyl::MoveCAt(cXyz& pos) {
|
|
const cXyz* center = GetCP();
|
|
cXyz diff = pos - *center;
|
|
SetAtVec(diff);
|
|
SetC(pos);
|
|
}
|
|
|
|
void dCcD_Cyl::MoveCTg(cXyz& pos) {
|
|
const cXyz* center = GetCP();
|
|
cXyz diff = pos - *center;
|
|
SetTgVec(diff);
|
|
SetC(pos);
|
|
}
|
|
|
|
void dCcD_Sph::Set(dCcD_SrcSph const& src) {
|
|
dCcD_GObjInf::Set(src.mObjInf);
|
|
cCcD_SphAttr::Set(src.mSphAttr);
|
|
}
|
|
|
|
void dCcD_Sph::StartCAt(cXyz& pos) {
|
|
cXyz zero(cXyz::Zero);
|
|
SetAtVec(zero);
|
|
cM3dGSph::SetC(pos);
|
|
}
|
|
|
|
void dCcD_Sph::MoveCAt(cXyz& pos) {
|
|
const cXyz* center = GetCP();
|
|
cXyz diff = pos - *center;
|
|
SetAtVec(diff);
|
|
SetC(pos);
|
|
}
|
|
|
|
cCcD_ShapeAttr* dCcD_Sph::GetShapeAttr() {
|
|
return this;
|
|
}
|