Merge pull request #7 from LagoLunatic/items

Started work on items
This commit is contained in:
Jasper St. Pierre
2023-09-10 21:31:12 -07:00
committed by GitHub
11 changed files with 1130 additions and 294 deletions
+126 -23
View File
@@ -3,12 +3,19 @@
// Translation Unit: d_a_item.cpp
//
#include "d_a_item.h"
#include "d/d_item.h"
#include "d/d_item_data.h"
#include "d/actor/d_a_item.h"
#include "d/actor/d_a_player.h"
#include "d/d_com_inf_game.h"
#include "d/d_procname.h"
#include "dolphin/types.h"
class dCcD_GObjInf;
/* 800F4BC8-800F4BD4 .text getData__12daItemBase_cFv */
void daItemBase_c::getData() {
/* Nonmatching */
daItemBase_c_m_data* daItemBase_c::getData() {
return &daItemBase_c::m_data;
}
/* 800F4BD4-800F4C4C .text setArrowTrans__Fs4cXyz */
@@ -17,8 +24,45 @@ void setArrowTrans(short, cXyz) {
}
/* 800F4C4C-800F4CD8 .text getYOffset__8daItem_cFv */
void daItem_c::getYOffset() {
/* Nonmatching */
float daItem_c::getYOffset() {
switch (m_itemNo) {
case HEART:
return 0.0;
case GREEN_RUPEE:
case BLUE_RUPEE:
case YELLOW_RUPEE:
case RED_RUPEE:
case PURPLE_RUPEE:
case ORANGE_RUPEE:
case SILVER_RUPEE:
return 0.0;
case KAKERA_HEART:
case UTUWA_HEART:
return 0.0;
case SMALL_KEY:
case BOSS_KEY:
return 0.0;
case SWORD:
return 20.0;
case SHIELD:
return 23.0;
case DROPPED_SWORD:
return 10.0;
case SKULL_NECKLACE:
return 0.0;
case BOKOBABA_SEED:
return 0.0;
case GOLDEN_FEATHER:
return 0.0;
case BOKO_BELT:
return 0.0;
case RED_JELLY:
case GREEN_JELLY:
case BLUE_JELLY:
return 0.0;
default:
return 0.0;
}
}
/* 800F4CD8-800F4E6C .text set_mtx__8daItem_cFv */
@@ -42,12 +86,12 @@ void daItem_c::CreateInit() {
}
/* 800F53EC-800F5668 .text _daItem_create__8daItem_cFv */
void daItem_c::_daItem_create() {
s32 daItem_c::_daItem_create() {
/* Nonmatching */
}
/* 800F5668-800F5834 .text _daItem_execute__8daItem_cFv */
void daItem_c::_daItem_execute() {
s32 daItem_c::_daItem_execute() {
/* Nonmatching */
}
@@ -102,7 +146,7 @@ void daItem_c::scaleAnimFromBossItem() {
}
/* 800F60C0-800F6110 .text _daItem_draw__8daItem_cFv */
void daItem_c::_daItem_draw() {
s32 daItem_c::_daItem_draw() {
/* Nonmatching */
}
@@ -112,7 +156,7 @@ void daItem_c::setTevStr() {
}
/* 800F61C8-800F6268 .text _daItem_delete__8daItem_cFv */
void daItem_c::_daItem_delete() {
s32 daItem_c::_daItem_delete() {
/* Nonmatching */
}
@@ -124,16 +168,43 @@ void Reflect(cXyz&, cXyz*, float, float) {
/* 800F6434-800F6D24 .text itemGetExecute__8daItem_cFv */
void daItem_c::itemGetExecute() {
/* Nonmatching */
execItemGet(m_itemNo);
}
/* 800F6D24-800F6D78 .text itemDefaultRotateY__8daItem_cFv */
void daItem_c::itemDefaultRotateY() {
/* Nonmatching */
// Rotates at a fixed speed.
s16 rotationSpeed = 0xFFFF / getData()->mNumFramesPerFullSpin;
fopAcM_addAngleY(this, current.angle.y + rotationSpeed, rotationSpeed);
}
/* 800F6D78-800F6E54 .text checkItemDisappear__8daItem_cFv */
void daItem_c::checkItemDisappear() {
/* Nonmatching */
bool daItem_c::checkItemDisappear() {
bool disappearing = true;
if (mCurAction == 3) {
disappearing = false;
show();
}
if (mStatusFlags & 0x02) {
disappearing = false;
}
if (mStatusFlags & 0x10) {
disappearing = false;
}
if (dItem_data::item_info[m_itemNo].mSpecialBehaviors & 0x01) {
disappearing = false;
}
if (g_dComIfG_gameInfo.play.mEvtCtrl.mMode != 0) {
disappearing = false;
}
if (mCurAction == 4) {
disappearing = false;
}
if ((mStatusFlags & 0x08) || (mStatusFlags & 0x40) || (mStatus & 0x100000)) {
disappearing = false;
show();
}
return disappearing;
}
/* 800F6E54-800F6E74 .text setItemTimer__8daItem_cFi */
@@ -142,7 +213,7 @@ void daItem_c::setItemTimer(int) {
}
/* 800F6E74-800F6EC8 .text checkPlayerGet__8daItem_cFv */
void daItem_c::checkPlayerGet() {
bool daItem_c::checkPlayerGet() {
/* Nonmatching */
}
@@ -187,8 +258,16 @@ void daItem_c::set_bound_se() {
}
/* 800F7DDC-800F7E6C .text checkGetItem__8daItem_cFv */
void daItem_c::checkGetItem() {
s32 daItem_c::checkGetItem() {
/* Nonmatching */
if (checkPlayerGet()) {
itemGetExecute();
return 1;
}
mStatusFlags |= 0x08;
return 0;
}
/* 800F7E6C-800F7F0C .text timeCount__8daItem_cFv */
@@ -227,28 +306,28 @@ void daItem_Draw(daItem_c*) {
}
/* 800F8970-800F8990 .text daItem_Execute__FP8daItem_c */
void daItem_Execute(daItem_c*) {
/* Nonmatching */
s32 daItem_Execute(daItem_c* i_this) {
return i_this->_daItem_execute();
}
/* 800F8990-800F89B0 .text daItem_IsDelete__FP8daItem_c */
void daItem_IsDelete(daItem_c*) {
/* Nonmatching */
s32 daItem_IsDelete(daItem_c* i_this) {
return i_this->_daItem_isdelete();
}
/* 800F89B0-800F89D0 .text daItem_Delete__FP8daItem_c */
void daItem_Delete(daItem_c*) {
/* Nonmatching */
s32 daItem_Delete(daItem_c* i_this) {
return i_this->_daItem_delete();
}
/* 800F89D0-800F89F0 .text daItem_Create__FP10fopAc_ac_c */
void daItem_Create(fopAc_ac_c*) {
s32 daItem_Create(fopAc_ac_c* i_this) {
/* Nonmatching */
}
/* 800F89F0-800F89F8 .text _daItem_isdelete__8daItem_cFv */
void daItem_c::_daItem_isdelete() {
/* Nonmatching */
s32 daItem_c::_daItem_isdelete() {
return 1;
}
/* 800F89F8-800F8A14 .text getHeadTopPos__9daPy_py_cCFv */
@@ -256,3 +335,27 @@ void daPy_py_c::getHeadTopPos() const {
/* Nonmatching */
}
static actor_method_class l_daItem_Method = {
(process_method_func)daItem_Create,
(process_method_func)daItem_Delete,
(process_method_func)daItem_Execute,
(process_method_func)daItem_IsDelete,
(process_method_func)daItem_Draw,
};
extern actor_process_profile_definition g_profile_ITEM = {
-3,
7,
0xFFFD,
PROC_ITEM,
&g_fpcLf_Method.mBase,
sizeof(daItem_c),
0,
0,
&g_fopAc_Method.base,
0x00F5,
&l_daItem_Method,
0x000C0100,
fopAc_ACTOR_e,
fopAc_CULLBOX_0_e,
};
+136 -8
View File
@@ -3,27 +3,135 @@
// Translation Unit: d_a_itembase.cpp
//
#include "d_a_itembase.h"
#include "d/actor/d_a_itembase.h"
#include "d/d_item_data.h"
#include "d/d_resorce.h"
#include "d/d_drawlist.h"
#include "m_Do/m_Do_ext.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "d/d_item_data.h"
#include "d/d_com_inf_game.h"
#include "dolphin/types.h"
/* 800F8A14-800F8A3C .text DeleteBase__12daItemBase_cFPCc */
void daItemBase_c::DeleteBase(const char*) {
/* Nonmatching */
s32 daItemBase_c::DeleteBase(const char* resName) {
dComIfG_resDelete(&mPhs, resName);
return 1;
}
/* 800F8A3C-800F8A44 .text clothCreate__12daItemBase_cFv */
void daItemBase_c::clothCreate() {
/* Nonmatching */
s32 daItemBase_c::clothCreate() {
return 1;
}
/* 800F8A44-800F9074 .text CreateItemHeap__12daItemBase_cFPCcsssssss */
void daItemBase_c::CreateItemHeap(const char*, short, short, short, short, short, short, short) {
s32 daItemBase_c::CreateItemHeap(const char* resName, short resIdx, short btkAnm1, short btkAnm2, short brkAnm1, short brkAnm2, short bckAnm, short) {
/* Nonmatching */
JUT_ASSERT(78, 0 <= m_itemNo && m_itemNo <= 255);
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(resName, resIdx);
JUT_ASSERT(85, modelData != 0);
mModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
if (!mModel) {
return 0;
}
switch (m_itemNo) {
case ARROW_30:
mModelArrow[0] = mDoExt_J3DModel__create(modelData, 8, 0x11000002);
if (!mModelArrow[0]) {
return 0;
}
case ARROW_20:
mModelArrow[1] = mDoExt_J3DModel__create(modelData, 8, 0x11000002);
if (!mModelArrow[1]) {
return 0;
}
break;
default:
mModelArrow[1] = NULL;
mModelArrow[0] = NULL;
}
mBtkAnm1 = NULL;
if (btkAnm1 != -1) {
J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(resName, btkAnm1);
JUT_ASSERT(140, pbtk != 0);
mBtkAnm1 = new mDoExt_btkAnm();
if (!mBtkAnm1 || !mBtkAnm1->init(modelData, pbtk, true, 2, 1.0, 0, -1, false, false)) {
return 0;
}
}
mBtkAnm2 = NULL;
if (btkAnm2 != -1) {
J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(resName, btkAnm2);
JUT_ASSERT(172, pbtk != 0);
mBtkAnm2 = new mDoExt_btkAnm();
if (!mBtkAnm2 || !mBtkAnm2->init(modelData, pbtk, true, 2, 1.0, 0, -1, false, false)) {
return 0;
}
}
mBrkAnm1 = NULL;
if (brkAnm1 != -1) {
J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(resName, brkAnm1);
JUT_ASSERT(172, pbrk != 0);
int shouldAnimate = dItem_data::item_resource[m_itemNo].mTevRegAnimFrameIndex == 0xFF;
mBrkAnm1 = new mDoExt_brkAnm();
if (!mBrkAnm1 || !mBrkAnm1->init(modelData, pbrk, shouldAnimate, 2, 1.0, 0, -1, false, false)) {
return 0;
}
}
mBrkAnm2 = NULL;
if (brkAnm2 != -1) {
J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(resName, brkAnm2);
JUT_ASSERT(197, pbrk != 0);
mBrkAnm2 = new mDoExt_brkAnm();
if (!mBrkAnm2 || !mBrkAnm2->init(modelData, pbrk, true, 2, 1.0, 0, -1, false, false)) {
return 0;
}
}
mBckAnm = NULL;
if (bckAnm != -1) {
J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(resName, bckAnm);
JUT_ASSERT(212, pbck != 0);
mBckAnm = new mDoExt_bckAnm();
if (!mBckAnm || !mBckAnm->init(modelData, pbck, true, 2, 1.0, 0, -1, false)) {
return 0;
}
}
if (!clothCreate()) {
return 0;
}
return 1;
}
/* 800F9074-800F9130 .text DrawBase__12daItemBase_cFv */
void daItemBase_c::DrawBase() {
/* Nonmatching */
s32 daItemBase_c::DrawBase() {
setTevStr();
animEntry();
setListStart();
settingBeforeDraw();
mDoExt_modelUpdateDL(mModel);
if (mModelArrow[0]) {
mDoExt_modelUpdateDL(mModelArrow[0]);
}
if (mModelArrow[1]) {
mDoExt_modelUpdateDL(mModelArrow[1]);
}
setListEnd();
setShadow();
return 1;
}
/* 800F9130-800F9184 .text setListStart__12daItemBase_cFv */
@@ -54,6 +162,26 @@ void daItemBase_c::setShadow() {
/* 800F93A8-800F94C0 .text animEntry__12daItemBase_cFv */
void daItemBase_c::animEntry() {
/* Nonmatching */
if (mBrkAnm1) {
int constantFrame = dItem_data::item_resource[m_itemNo].mTevRegAnimFrameIndex;
if (constantFrame != -1) {
mBrkAnm1->entry(mModel->getModelData(), constantFrame);
} else {
mBrkAnm1->entry(mModel->getModelData());
}
}
if (mBtkAnm1) {
mBtkAnm1->entry(mModel->getModelData());
}
if (mBrkAnm2) {
mBrkAnm2->entry(mModel->getModelData());
}
if (mBtkAnm2) {
mBtkAnm2->entry(mModel->getModelData());
}
if (mBckAnm) {
mBckAnm->entry(mModel->getModelData());
}
}
/* 800F94C0-800F95B8 .text animPlay__12daItemBase_cFfffff */
+1 -1
View File
@@ -3,7 +3,7 @@
// Translation Unit: d_a_itembase_static.cpp
//
#include "d_a_itembase_static.h"
#include "d/actor/d_a_itembase_static.h"
#include "dolphin/types.h"
/* 80068650-80068658 .text getItemNo__12daItemBase_cFv */