mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-05-26 07:18:47 -04:00
dfa8efa97b
* 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
263 lines
6.6 KiB
C++
263 lines
6.6 KiB
C++
/**
|
|
* d_a_itembase.cpp
|
|
* Item Actor base
|
|
*/
|
|
|
|
#include "d/dolzel.h" // IWYU pragma: keep
|
|
|
|
#include "d/actor/d_a_itembase.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_item_data.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
|
|
int daItemBase_c::DeleteBase(const char* i_resName) {
|
|
dComIfG_resDelete(&mPhase, i_resName);
|
|
return 1;
|
|
}
|
|
|
|
int daItemBase_c::clothCreate() {
|
|
return 1;
|
|
}
|
|
|
|
int daItemBase_c::__CreateHeap() {
|
|
return 1;
|
|
}
|
|
|
|
int daItemBase_c::CreateItemHeap(char const* i_arcName, s16 i_bmdName, s16 i_btkName, s16 i_bpkName,
|
|
s16 i_bckName, s16 i_bxaName, s16 i_brkName, s16 i_btpName) {
|
|
JUT_ASSERT(0, 0 <= m_itemNo && m_itemNo <= 255);
|
|
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(i_arcName, i_bmdName);
|
|
JUT_ASSERT(0, modelData != NULL);
|
|
|
|
u32 flags = 0x11000084;
|
|
u32 modelflags = 0x80000;
|
|
|
|
if (i_btkName > 0) {
|
|
flags |= 0x200;
|
|
}
|
|
|
|
if (i_bpkName > 0) {
|
|
flags |= 0x1;
|
|
}
|
|
|
|
if (i_btpName > 0) {
|
|
flags |= 0x20000;
|
|
}
|
|
|
|
if (chkFlag(4)) {
|
|
modelflags = 0;
|
|
}
|
|
|
|
mpModel = mDoExt_J3DModel__create(modelData, modelflags, flags);
|
|
if (mpModel == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
mpBtkAnm = NULL;
|
|
if (i_btkName > 0) {
|
|
J3DAnmTextureSRTKey* pbtk =
|
|
(J3DAnmTextureSRTKey*)dComIfG_getObjectRes(i_arcName, i_btkName);
|
|
JUT_ASSERT(0, pbtk != NULL);
|
|
|
|
mpBtkAnm = new mDoExt_btkAnm();
|
|
if (mpBtkAnm == NULL || !mpBtkAnm->init(modelData, pbtk, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1)) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
mpBpkAnm = NULL;
|
|
if (i_bpkName > 0) {
|
|
J3DAnmColor* pbpk = (J3DAnmColor*)dComIfG_getObjectRes(i_arcName, i_bpkName);
|
|
JUT_ASSERT(0, pbpk != NULL);
|
|
|
|
mpBpkAnm = new mDoExt_bpkAnm();
|
|
if (mpBpkAnm == NULL || !mpBpkAnm->init(modelData, pbpk, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1)) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
mpBckAnm = NULL;
|
|
if (i_bckName > 0) {
|
|
J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(i_arcName, i_bckName);
|
|
JUT_ASSERT(0, pbck != NULL);
|
|
|
|
mpBckAnm = new mDoExt_bckAnm();
|
|
if (mpBckAnm == NULL || !mpBckAnm->init(pbck, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false)) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
mpBrkAnm = NULL;
|
|
if (i_brkName > 0) {
|
|
J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(i_arcName, i_brkName);
|
|
JUT_ASSERT(0, pbrk != NULL);
|
|
|
|
s8 tevFrm = getTevFrm();
|
|
int anmPlay = TRUE;
|
|
if (tevFrm != -1) {
|
|
anmPlay = FALSE;
|
|
}
|
|
|
|
mpBrkAnm = new mDoExt_brkAnm();
|
|
if (mpBrkAnm == NULL || !mpBrkAnm->init(modelData, pbrk, anmPlay, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1)) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
mpBtpAnm = NULL;
|
|
if (i_btpName > 0) {
|
|
J3DAnmTexPattern* pbtp = (J3DAnmTexPattern*)dComIfG_getObjectRes(i_arcName, i_btpName);
|
|
JUT_ASSERT(0, pbtp != NULL);
|
|
|
|
mpBtpAnm = new mDoExt_btpAnm();
|
|
if (mpBtpAnm == NULL || !mpBtpAnm->init(modelData, pbtp, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1)) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if (!clothCreate()) {
|
|
return 0;
|
|
}
|
|
|
|
return __CreateHeap() ? TRUE : FALSE;
|
|
}
|
|
|
|
int daItemBase_c::DrawBase() {
|
|
setTevStr();
|
|
animEntry();
|
|
setListStart();
|
|
settingBeforeDraw();
|
|
mDoExt_modelUpdateDL(mpModel);
|
|
setListEnd();
|
|
setShadow();
|
|
return 1;
|
|
}
|
|
|
|
void daItemBase_c::RotateYBase() {
|
|
shape_angle.y += (s16)(0xFFFF / getData().mRotateYSpeed);
|
|
}
|
|
|
|
void daItemBase_c::setListStart() {
|
|
dComIfGd_setListDark();
|
|
}
|
|
|
|
void daItemBase_c::setListEnd() {
|
|
dComIfGd_setList();
|
|
}
|
|
|
|
void daItemBase_c::settingBeforeDraw() {
|
|
if (chkFlag(4)) {
|
|
fopAcM_setEffectMtx(this, mpModel->getModelData());
|
|
}
|
|
}
|
|
|
|
void daItemBase_c::setTevStr() {
|
|
g_env_light.settingTevStruct(0, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr);
|
|
}
|
|
|
|
void daItemBase_c::setShadow() {
|
|
f32 size = scale.x * getShadowSize();
|
|
|
|
if (!chkFlag(0x10)) {
|
|
if (getShadowSize() != 0.0f) {
|
|
dComIfGd_setSimpleShadow(¤t.pos, mAcch.GetGroundH(), size, mAcch.m_gnd, 0, 1.0f,
|
|
dDlst_shadowControl_c::getSimpleTex());
|
|
}
|
|
} else {
|
|
f32 shadowSize = getShadowSize();
|
|
if (shadowSize == 0.0f) {
|
|
shadowSize = 150.0f;
|
|
}
|
|
|
|
mShadowKey = dComIfGd_setShadow(mShadowKey, 3, mpModel, ¤t.pos, shadowSize, 0.0f,
|
|
current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr, 0,
|
|
1.0f, dDlst_shadowControl_c::getSimpleTex());
|
|
}
|
|
}
|
|
|
|
void daItemBase_c::animEntry() {
|
|
if (mpBrkAnm != NULL) {
|
|
s8 tevFrm = getTevFrm();
|
|
if (tevFrm != -1) {
|
|
mpBrkAnm->entry(mpModel->getModelData(), tevFrm);
|
|
} else {
|
|
mpBrkAnm->entry(mpModel->getModelData());
|
|
}
|
|
}
|
|
|
|
if (mpBtpAnm != NULL) {
|
|
s8 btpFrm = getBtpFrm();
|
|
if (btpFrm != -1) {
|
|
mpBtpAnm->entry(mpModel->getModelData(), btpFrm);
|
|
} else {
|
|
mpBtpAnm->entry(mpModel->getModelData());
|
|
}
|
|
}
|
|
|
|
if (mpBtkAnm != NULL) {
|
|
mpBtkAnm->entry(mpModel->getModelData());
|
|
}
|
|
|
|
if (mpBckAnm != NULL) {
|
|
mpBckAnm->entry(mpModel->getModelData());
|
|
}
|
|
|
|
if (mpBpkAnm != NULL) {
|
|
mpBpkAnm->entry(mpModel->getModelData());
|
|
}
|
|
}
|
|
|
|
void daItemBase_c::animPlay(f32 i_btkSpeed, f32 i_bpkSpeed, f32 i_bckSpeed, f32 param_3, f32 i_brkSpeed,
|
|
f32 i_btpSpeed) {
|
|
if (mpBrkAnm != NULL && getTevFrm() == -1) {
|
|
mpBrkAnm->setPlaySpeed(i_brkSpeed);
|
|
mpBrkAnm->play();
|
|
}
|
|
|
|
if (mpBtpAnm != NULL && getBtpFrm() == -1) {
|
|
mpBtpAnm->setPlaySpeed(i_btpSpeed);
|
|
mpBtpAnm->play();
|
|
}
|
|
|
|
if (mpBtkAnm != NULL) {
|
|
mpBtkAnm->setPlaySpeed(i_btkSpeed);
|
|
mpBtkAnm->play();
|
|
}
|
|
|
|
if (mpBpkAnm != NULL) {
|
|
mpBpkAnm->setPlaySpeed(i_bpkSpeed);
|
|
mpBpkAnm->play();
|
|
}
|
|
|
|
if (mpBckAnm != NULL) {
|
|
mpBckAnm->setPlaySpeed(i_bckSpeed);
|
|
mpBckAnm->play();
|
|
}
|
|
}
|
|
|
|
BOOL daItemBase_c::chkFlag(int i_flag) {
|
|
return dItem_data::chkFlag(m_itemNo, i_flag);
|
|
}
|
|
|
|
s8 daItemBase_c::getTevFrm() {
|
|
return dItem_data::getTevFrm(m_itemNo);
|
|
}
|
|
|
|
s8 daItemBase_c::getBtpFrm() {
|
|
return dItem_data::getBtpFrm(m_itemNo);
|
|
}
|
|
|
|
u8 daItemBase_c::getShadowSize() {
|
|
return dItem_data::getShadowSize(m_itemNo);
|
|
}
|
|
|
|
u8 daItemBase_c::getCollisionH() {
|
|
return dItem_data::getH(m_itemNo);
|
|
}
|
|
|
|
u8 daItemBase_c::getCollisionR() {
|
|
return dItem_data::getR(m_itemNo);
|
|
}
|