Merge remote-tracking branch 'upstream/main'

This commit is contained in:
Dylan Ascencio
2023-09-12 20:18:33 -04:00
22 changed files with 408 additions and 123 deletions
+4 -4
View File
@@ -238,22 +238,22 @@ LIBS = [
Object(Matching, "SSystem/SComponent/c_tag_iter.cpp"),
Object(NonMatching, "SSystem/SComponent/c_xyz.cpp"),
Object(Matching, "SSystem/SComponent/c_sxyz.cpp"),
Object(NonMatching, "SSystem/SComponent/c_math.cpp"),
Object(Matching, "SSystem/SComponent/c_math.cpp"),
Object(NonMatching, "SSystem/SComponent/c_bg_s.cpp"),
Object(Matching, "SSystem/SComponent/c_bg_s_chk.cpp"),
Object(NonMatching, "SSystem/SComponent/c_bg_s_gnd_chk.cpp"),
Object(NonMatching, "SSystem/SComponent/c_bg_s_lin_chk.cpp"),
Object(Matching, "SSystem/SComponent/c_bg_s_lin_chk.cpp"),
Object(NonMatching, "SSystem/SComponent/c_bg_w.cpp"),
Object(NonMatching, "SSystem/SComponent/c_m2d.cpp"),
Object(NonMatching, "SSystem/SComponent/c_m2d_g_box.cpp"),
Object(Matching, "SSystem/SComponent/c_m3d_g_aab.cpp"),
Object(NonMatching, "SSystem/SComponent/c_m3d_g_cyl.cpp"),
Object(Matching, "SSystem/SComponent/c_m3d_g_cyl.cpp"),
Object(Matching, "SSystem/SComponent/c_m3d_g_pla.cpp"),
Object(NonMatching, "SSystem/SComponent/c_m3d_g_sph.cpp"),
Object(Matching, "SSystem/SComponent/c_m3d_g_tri.cpp"),
Object(NonMatching, "SSystem/SComponent/c_lib.cpp"),
Object(NonMatching, "SSystem/SComponent/c_angle.cpp"),
Object(NonMatching, "SSystem/SComponent/c_data_tbl.cpp"),
Object(Matching, "SSystem/SComponent/c_data_tbl.cpp"),
],
},
{
@@ -3,16 +3,22 @@
#include "dolphin/types.h"
class cBgW;
class cBgS_PolyInfo {
private:
/* 0x00 */ u16 mPolyIndex;
/* 0x02 */ u16 mBgIndex;
/* 0x04 */ void* unk_0x04;
/* 0x04 */ cBgW* mpBgW;
/* 0x08 */ unsigned int mActorId;
public:
cBgS_PolyInfo();
void ClearPi();
void ClearPi() {
mPolyIndex = -1;
mBgIndex = 0x100;
mpBgW = NULL;
mActorId = -1;
}
void SetPolyInfo(const cBgS_PolyInfo&);
void SetActorInfo(int, void*, unsigned int);
bool ChkSafe(const void*, unsigned int) const;
+9 -1
View File
@@ -22,7 +22,15 @@ class cCcD_AabAttr;
class cCcD_CylAttr;
class cCcD_SphAttr;
enum cCcD_ObjAtType {};
enum cCcD_ObjAtType {
/* 0x00000002 */ AT_TYPE_SWORD = (1 << 1),
/* 0x00000020 */ AT_TYPE_BOMB = (1 << 5),
/* 0x00000040 */ AT_TYPE_BOOMERANG = (1 << 6),
/* 0x00004000 */ AT_TYPE_NORMAL_ARROW = (1 << 14),
/* 0x00040000 */ AT_TYPE_FIRE_ARROW = (1 << 18),
/* 0x00080000 */ AT_TYPE_ICE_ARROW = (1 << 19),
/* 0x00100000 */ AT_TYPE_LIGHT_ARROW = (1 << 20),
};
class cCcD_ShapeAttr {
public:
+3 -3
View File
@@ -4,13 +4,13 @@
#include "dolphin/types.h"
struct cDT_NamePTbl {
u32 mCount;
char ** mpNames;
cDT_NamePTbl();
virtual ~cDT_NamePTbl();
int GetIndex(const char *pName, int start) const;
void Set(u32 count, char** pNames);
u32 mCount;
char ** mpNames;
};
struct cDT_DataSrc {
+27 -4
View File
@@ -2,6 +2,7 @@
#define D_A_ITEM_H
#include "d/actor/d_a_itembase.h"
#include "d/d_particle.h"
class daItem_c : public daItemBase_c {
public:
@@ -28,7 +29,7 @@ public:
void itemDefaultRotateY();
bool checkItemDisappear();
void setItemTimer(int);
bool checkPlayerGet();
BOOL checkPlayerGet();
void itemActionForRupee();
void itemActionForHeart();
void itemActionForKey();
@@ -45,14 +46,36 @@ public:
void mode_water();
void initAction();
s32 _daItem_isdelete();
s32 checkControl();
s32 startControl();
s32 endControl();
s32 checkLock();
s32 setLock();
s32 releaseLock();
s32 checkActionNow();
public:
u8 temp1[0x20];
/* 0x648 */ s32 mSwitchId;
/* 0x64C */ s32 mActivationSwitch;
/* 0x650 */ f32 field3_0x650;
/* 0x654 */ u8 field4_0x654[0x658 - 0x654];
/* 0x658 */ s16 mItemTimer;
/* 0x65A */ s16 field7_0x65a;
/* 0x65C */ s16 field8_0x65c;
/* 0x65E */ u8 field10_0x65e[0x667 - 0x65E];
/* 0x667 */ u8 mUnknownParam;
/* 0x668 */ u8 mItemAction;
/* 0x669 */ u8 mStatusFlags;
/* 0x66A */ u8 mMode;
/* 0x66B */ u8 mCurAction;
u8 temp2[0x54];
/* 0x66B */ u8 mCurState;
/* 0x66C */ u8 field23_0x66c[0x6BC - 0x66C];
// /* 0x674 */ dPa_rippleEcallBack mPtclRippleCb;
// /* 0x688 */ dPa_followEcallBack mPtclFollowCb;
// /* 0x69C */ dPa_smokeEcallBack mPtclSmokeCb;
/* 0x6BC */ JPABaseEmitter* mpParticleEmitter;
};
STATIC_ASSERT(sizeof(daItem_c) == 0x6C0);
#endif /* D_A_ITEM_H */
+16 -14
View File
@@ -3,6 +3,9 @@
#include "f_op/f_op_actor.h"
#include "SSystem/SComponent/c_phase.h"
#include "d/d_bg_s.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
class mDoExt_btkAnm;
class mDoExt_brkAnm;
@@ -15,17 +18,22 @@ struct daItemBase_c_m_data {
/* 0x0C */ float mScaleAnimSpeed;
/* 0x10 */ float field4_0x10;
/* 0x14 */ short field5_0x14;
/* 0x16 */ short field6_0x16;
/* 0x16 */ short mDuration;
/* 0x18 */ short field7_0x18;
/* 0x1A */ u8 field8_0x1a;
/* 0x1B */ u8 field9_0x1b;
/* 0x1C */ short mNumFramesPerFullSpin;
u8 temp1[0x26];
u8 temp1[0x1A];
/* 0x38 */ f32 mPickedUpInitialSpeedY;
/* 0x3C */ f32 mPickedUpGravity;
/* 0x40 */ short field45_0x40;
/* 0x42 */ short field47_0x42;
u8 temp2[0x4];
/* 0x48 */ float mVelocityScale;
};
STATIC_ASSERT(sizeof(daItemBase_c_m_data) == 0x4C);
struct daItemBase_c : public fopAc_ac_c {
public:
s32 DeleteBase(const char*);
@@ -46,12 +54,10 @@ public:
void hide();
void show();
void changeDraw();
void chkDraw();
bool chkDraw();
void dead();
void chkDead();
void setLoadError();
void CheckItemCreateHeap(fopAc_ac_c*);
void CheckFieldItemCreateHeap(fopAc_ac_c*);
daItemBase_c_m_data* getData();
@@ -66,15 +72,11 @@ public:
/* 0x2B0 */ mDoExt_brkAnm* mBrkAnm1;
/* 0x2B4 */ mDoExt_brkAnm* mBrkAnm2;
/* 0x2B8 */ mDoExt_bckAnm* mBckAnm;
// /* 0x2BC */ dBgS_Acch mAcch;
// /* 0x480 */ dBgS_AcchCir mAcchCir;
// /* 0x4C0 */ dCcD_Stts mStts;
// /* 0x4FC */ dCcD_Cyl mCyl;
// /* 0x62C */ undefined field14_0x62c;
// /* 0x62D */ undefined field15_0x62d;
// /* 0x62E */ undefined field16_0x62e;
// /* 0x62F */ undefined field17_0x62f;
u8 temp[0x374];
/* 0x2BC */ dBgS_Acch mAcch;
/* 0x480 */ dBgS_AcchCir mAcchCir;
/* 0x4C0 */ dCcD_Stts mStts;
/* 0x4FC */ dCcD_Cyl mCyl;
/* 0x62C */ u8 field14_0x62c[0x630 - 0x62C];
/* 0x630 */ int mPickupFlag;
/* 0x634 */ int field19_0x634;
/* 0x638 */ short field20_0x638;
+1 -1
View File
@@ -14,6 +14,6 @@ void dead();
void chkDead();
void setLoadError();
void CheckItemCreateHeap(fopAc_ac_c*);
void CheckFieldItemCreateHeap(fopAc_ac_c*);
s32 CheckFieldItemCreateHeap(fopAc_ac_c*);
#endif /* D_A_ITEMBASE_STATIC_H */
+16
View File
@@ -428,6 +428,14 @@ inline BOOL dComIfGs_isSwitch(s32 i_no, s32 i_roomNo) {
return g_dComIfG_gameInfo.save.isSwitch(i_no, i_roomNo);
}
inline void dComIfGs_onItem(int bitNo, int roomNo) {
g_dComIfG_gameInfo.save.onItem(bitNo, roomNo);
}
inline bool dComIfGs_isItem(int bitNo, int roomNo) {
return g_dComIfG_gameInfo.save.isItem(bitNo, roomNo);
}
/**
* === PLAY ===
*/
@@ -507,6 +515,10 @@ inline dBgS* dComIfG_Bgsp() {
return &g_dComIfG_gameInfo.play.mBgS;
}
inline dCcS* dComIfG_Ccsp() {
return &g_dComIfG_gameInfo.play.mCcS;
}
inline daShip_c* dComIfGp_getShipActor() {
return (daShip_c*)g_dComIfG_gameInfo.play.getPlayerPtr(2);
}
@@ -519,6 +531,10 @@ inline dStage_stageDt_c& dComIfGp_getStage() {
return g_dComIfG_gameInfo.play.getStage();
}
inline daPy_py_c* daPy_getPlayerActorClass() {
return (daPy_py_c*)dComIfGp_getPlayer(0);
}
inline daPy_lk_c* daPy_getPlayerLinkActorClass() {
return (daPy_lk_c*)g_dComIfG_gameInfo.play.getPlayerPtr(0);
}
+2
View File
@@ -1,6 +1,8 @@
#ifndef D_ITEM_H
#define D_ITEM_H
#include "dolphin/types.h"
void execItemGet(u8 itemNo);
BOOL checkItemGet(u8 itemNo, BOOL defaultVal);
void item_func_heart();
+31 -2
View File
@@ -282,6 +282,29 @@ struct dItem_data_item_resource {
STATIC_ASSERT(sizeof(dItem_data_item_resource) == 0x24);
struct dItem_data_field_item_res {
/* 0x00 */ char * mModelArcName;
/* 0x04 */ short mModelFileId;
/* 0x06 */ short mBtkAnmResIdx1;
/* 0x08 */ short mBtkAnmResIdx2;
/* 0x0A */ short mBrkAnmResIdx1;
/* 0x0C */ short mBrkAnmResIdx2;
/* 0x0E */ short mBckAnmResIdx;
/* 0x10 */ u8 mTevRegAnimFrameIndex;
/* 0x11 */ u8 field8_0x11;
/* 0x12 */ u8 field9_0x12;
/* 0x13 */ u8 field10_0x13;
/* 0x14 */ u8 field11_0x14;
/* 0x15 */ u8 field12_0x15;
/* 0x16 */ u8 field13_0x16;
/* 0x17 */ u8 field14_0x17;
/* 0x18 */ u16 mHeapSize;
/* 0x1A */ u8 field16_0x1a;
/* 0x1B */ u8 field17_0x1b;
};
STATIC_ASSERT(sizeof(dItem_data_field_item_res) == 0x1C);
struct dItem_data_item_info {
/* 0x00 */ u8 mMaybeShadowRelated;
/* 0x01 */ u8 mCollisionH; // Cylinder Height
@@ -293,8 +316,14 @@ STATIC_ASSERT(sizeof(dItem_data_item_info) == 0x4);
class dItem_data {
public:
static dItem_data_item_resource item_resource[0x100];
static dItem_data_item_info item_info[0x100];
static dItem_data_item_resource item_resource[0x100];
static dItem_data_field_item_res field_item_res[0x100];
static dItem_data_item_info item_info[0x100];
static bool checkAppearEffect(u8 itemNo);
static s16 getAppearEffect(u8 itemNo);
static bool checkSpecialEffect(u8 itemNo);
static u16 getSpecialEffect(u8 itemNo);
};
#endif /* D_ITEM_DATA_H */
+7 -5
View File
@@ -8,10 +8,11 @@
/* 80247418-80247480 .text ct__11cBgS_LinChkFv */
void cBgS_LinChk::ct() {
mLin.mStart = cXyz::Zero;
mLin.mEnd = cXyz::Zero;
field_0x40 = cXyz::Zero ;
setActorPid(0xFFFFFFFF);
cXyz zero = cXyz::Zero;
mLin.mStart = zero;
mLin.mEnd = zero;
field_0x40 = zero;
setActorPid(-1);
field_0x4c = 0;
mFrontFlag = 1;
mBackFlag = 0;
@@ -19,7 +20,8 @@ void cBgS_LinChk::ct() {
/* 80247480-80247500 .text Set2__11cBgS_LinChkFP4cXyzP4cXyzUi */
void cBgS_LinChk::Set2(cXyz* pStart, cXyz* pEnd, unsigned int actorPid) {
mLin.SetStartEnd(*pStart, *pEnd);
mLin.mStart.set(*pStart);
mLin.mEnd.set(*pEnd);
field_0x40 = *pEnd;
setActorPid(actorPid);
field_0x4c &= ~0x10;
+13 -14
View File
@@ -4,10 +4,11 @@
//
#include "SSystem/SComponent/c_lib.h"
#include "SSystem/SComponent/c_math.h"
#include "MSL_C/string.h"
#include "SSystem/SComponent/c_math.h"
#include "dolphin/mtx/mtxvec.h"
/* 802528A4-802528C4 .text cLib_memCpy__FPvPCvUl */
void cLib_memCpy(void* dst, const void* src, unsigned long size) {
memcpy(dst, src, size);
@@ -202,35 +203,33 @@ void cLib_addCalcAngleS2(s16* pValue, s16 target, s16 scale, s16 maxStep) {
}
/* 802532C4-8025335C .text cLib_addCalcAngleL__FPlllll */
s16 cLib_addCalcAngleL(s32* pValue, s32 target, s32 scale, s32 maxStep, s32 minStep) {
s32 cLib_addCalcAngleL(s32* pValue, s32 target, s32 scale, s32 maxStep, s32 minStep) {
s32 diff = target - *pValue;
if (*pValue != target) {
s32 step = (diff) / scale;
if (step > minStep || step < -minStep) {
if (step > maxStep) {
step = maxStep;
scale = (diff) / scale;
if (scale > minStep || scale < -minStep) {
if (scale > maxStep) {
scale = maxStep;
}
if (step < -maxStep) {
step = -maxStep;
if (scale < -maxStep) {
scale = -maxStep;
}
*pValue += step;
*pValue += scale;
} else {
if (0 <= diff) {
*pValue += minStep;
diff = target - *pValue;
if (0 >= diff) {
if (0 >= target - *pValue) {
*pValue = target;
}
} else {
*pValue -= minStep;
diff = target - *pValue;
if (0 <= diff) {
if (0 <= target - *pValue) {
*pValue = target;
}
}
}
}
return target - *pValue;
return diff;
}
/* 8025335C-802533D0 .text cLib_chaseUC__FPUcUcUc */
+3 -3
View File
@@ -8,9 +8,9 @@
#include "JSystem/JUtility/JUTAssert.h"
#include "MSL_C/float.h"
#define CHECK_FLOAT_CLASS(line, x) JUT_ASSERT(__FILE__, line, !(((sizeof(x) == sizeof(float)) ? __fpclassifyf((float)(x)) : __fpclassifyd((double)(x)) ) == 1));
#define CHECK_FLOAT_RANGE(line, x) JUT_ASSERT(__FILE__, line, -1.0e32f < x && x < 1.0e32f);
#define CHECK_VEC3_RANGE(line, v) JUT_ASSERT(__FILE__, line, -1.0e32f < v.x && v.x < 1.0e32f && -1.0e32f < v.y && v.y < 1.0e32f && -1.0e32f < v.z && v.z < 1.0e32f)
#define CHECK_FLOAT_CLASS(line, x) JUT_ASSERT(line, !(((sizeof(x) == sizeof(float)) ? __fpclassifyf((float)(x)) : __fpclassifyd((double)(x)) ) == 1));
#define CHECK_FLOAT_RANGE(line, x) JUT_ASSERT(line, -1.0e32f < x && x < 1.0e32f);
#define CHECK_VEC3_RANGE(line, v) JUT_ASSERT(line, -1.0e32f < v.x && v.x < 1.0e32f && -1.0e32f < v.y && v.y < 1.0e32f && -1.0e32f < v.z && v.z < 1.0e32f)
/* 80251D88-80252020 .text SetC__8cM3dGCylFRC4cXyz */
void cM3dGCyl::SetC(const cXyz& pos) {
+3 -3
View File
@@ -8,9 +8,9 @@
#include "JSystem/JUtility/JUTAssert.h"
#include "MSL_C/float.h"
#define CHECK_FLOAT_CLASS(line, x) JUT_ASSERT(__FILE__, line, !(((sizeof(x) == sizeof(float)) ? __fpclassifyf((float)(x)) : __fpclassifyd((double)(x)) ) == 1));
#define CHECK_FLOAT_RANGE(line, x) JUT_ASSERT(__FILE__, line, -1.0e32f < x && x < 1.0e32f);
#define CHECK_VEC3_RANGE(line, v) JUT_ASSERT(__FILE__, line, -1.0e32f < v.x && v.x < 1.0e32f && -1.0e32f < v.y && v.y < 1.0e32f && -1.0e32f < v.z && v.z < 1.0e32f)
#define CHECK_FLOAT_CLASS(line, x) JUT_ASSERT(line, !(((sizeof(x) == sizeof(float)) ? __fpclassifyf((float)(x)) : __fpclassifyd((double)(x)) ) == 1));
#define CHECK_FLOAT_RANGE(line, x) JUT_ASSERT(line, -1.0e32f < x && x < 1.0e32f);
#define CHECK_VEC3_RANGE(line, v) JUT_ASSERT(line, -1.0e32f < v.x && v.x < 1.0e32f && -1.0e32f < v.y && v.y < 1.0e32f && -1.0e32f < v.z && v.z < 1.0e32f)
/* 8025238C-80252624 .text SetC__8cM3dGSphFRC4cXyz */
void cM3dGSph::SetC(const cXyz& pos) {
+2 -2
View File
@@ -10,8 +10,8 @@
/* 80246044-8024609C .text cM_rad2s__Ff */
s16 cM_rad2s(float f0) {
f32 tmpF = fmod(f0, 6.2831854820251465 /* approx. 2 * PI */);
s32 tmp = (tmpF * 10430.378f /* approx. 32768 / PI */);
f64 tmpF = fmod(f0, 6.2831854820251465 /* approx. 2 * PI */);
s32 tmp = (tmpF * 10430.3779296875 /* approx. 32768 / PI */);
if (tmp < -0x8000) {
tmp += 0x10000;
} else if (tmp > 0x7FFF) {
+4 -5
View File
@@ -4,9 +4,9 @@
//
#include "SSystem/SComponent/c_xyz.h"
#include "SSystem/SComponent/c_math.h"
#include "MSL_C/float.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "MSL_C/float.h"
#include "SSystem/SComponent/c_math.h"
const cXyz cXyz::Zero(0, 0, 0);
const cXyz cXyz::BaseX(1, 0, 0);
@@ -150,7 +150,6 @@ bool cXyz::operator!=(const Vec& vec) const {
/* 80245CE4-80245D48 .text isZero__4cXyzCFv */
bool cXyz::isZero(void) const {
return fabsf(this->x) < 3.814697e-06 &&
fabsf(this->y) < 3.814697e-06 &&
fabsf(this->z) < 3.814697e-06;
return fabsf(this->x) < 3.814697e-06f && fabsf(this->y) < 3.814697e-06f &&
fabsf(this->z) < 3.814697e-06f;
}
+236 -41
View File
@@ -5,14 +5,44 @@
#include "d/d_item.h"
#include "d/d_item_data.h"
#include "d/actor/d_a_itembase_static.h"
#include "d/actor/d_a_item.h"
#include "d/actor/d_a_player.h"
#include "d/d_com_inf_game.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "d/d_procname.h"
#include "dolphin/types.h"
class dCcD_GObjInf;
static dCcD_SrcCyl m_cyl_src = {
0,
0,
0,
0,
0xFFFFFFFF, // Tg damage types
9,
0x59,
0,
0,
0,
0,
0,
0,
0,
0,
0,
4,
0,
// Cylinder
0.0, // X
0.0, // Y
0.0, // Z
10.0, // Radius
50.0, // Height
};
/* 800F4BC8-800F4BD4 .text getData__12daItemBase_cFv */
daItemBase_c_m_data* daItemBase_c::getData() {
return &daItemBase_c::m_data;
@@ -27,7 +57,25 @@ void setArrowTrans(short, cXyz) {
float daItem_c::getYOffset() {
switch (m_itemNo) {
case HEART:
return 0.0;
return 0.0f;
case SKULL_NECKLACE:
return 0.0f;
case BOKOBABA_SEED:
return 0.0f;
case GOLDEN_FEATHER:
return 0.0f;
case BOKO_BELT:
return 0.0f;
case RED_JELLY:
case GREEN_JELLY:
case BLUE_JELLY:
return 0.0f;
case SWORD:
return 20.0f;
case SHIELD:
return 23.0f;
case DROPPED_SWORD:
return 10.0f;
case GREEN_RUPEE:
case BLUE_RUPEE:
case YELLOW_RUPEE:
@@ -35,33 +83,15 @@ float daItem_c::getYOffset() {
case PURPLE_RUPEE:
case ORANGE_RUPEE:
case SILVER_RUPEE:
return 0.0;
return 0.0f;
case KAKERA_HEART:
case UTUWA_HEART:
return 0.0;
return 0.0f;
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;
return 0.0f;
default:
return 0.0;
return 0.0f;
}
}
@@ -83,11 +113,120 @@ void itemGetCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*) {
/* 800F5044-800F53EC .text CreateInit__8daItem_cFv */
void daItem_c::CreateInit() {
/* Nonmatching */
mAcchCir.SetWall(30.0, 30.0);
cXyz* speedPtr = &speed;
mAcch.Set(&current.pos, &next.pos, this, 1, &mAcchCir, speedPtr, NULL, NULL);
mAcch.m_flags &= ~0x400;
mAcch.m_flags &= ~0x8;
mCullMtx = mModel->mBaseTransformMtx;
mStts.Init(0, 0xFF, this);
mCyl.Set(m_cyl_src);
mCyl.SetCoHitCallback(&itemGetCallBack);
dItem_data_item_info* item_info = &dItem_data::item_info[m_itemNo];
f32 height = item_info->mCollisionH;
f32 radius = item_info->mCollisionR;
if (mScale.x > 1.0) {
height *= mScale.x;
radius *= mScale.x;
}
mCyl.SetR(radius);
mCyl.SetH(height);
mItemTimer = getData()->mDuration;
field7_0x65a = getData()->field7_0x18;
mCurState = 0;
field3_0x650 = speedPtr->y;
mStatusFlags |= 2;
mUnknownParam = (fpcM_GetParam(this) & 0x03000000) >> 0x18;
mItemAction = (fpcM_GetParam(this) & 0xFC000000) >> 0x1A;
show();
if (dItem_data::checkSpecialEffect(m_itemNo) && (m_itemNo != SMALL_KEY || (mStatusFlags & 2))) {
dItem_data::getSpecialEffect(m_itemNo);
// TODO: dPa_control_c::set
}
switch (m_itemNo) {
case BOMB_5:
case BOMB_10:
case BOMB_20:
case BOMB_30:
mScaleTarget.x = 0.6;
mScaleTarget.y = 0.6;
mScaleTarget.z = 0.6;
break;
default:
mScaleTarget.x = 1.0;
mScaleTarget.y = 1.0;
mScaleTarget.z = 1.0;
break;
}
mSwitchId = (fpcM_GetParam(this) & 0x00FF0000) >> 0x10;
if (mSwitchId != 0xFF && i_fopAcM_isSwitch(this, mSwitchId)) {
hide();
mStatusFlags |= 2;
}
mActivationSwitch = (orig.angle.z & 0x00FF) >> 0;
initAction();
switch (m_itemNo) {
case SHIELD:
mStatus |= 0x4000;
break;
case DROPPED_SWORD:
current.angle.x = 0x4000;
break;
}
set_mtx();
animPlay(1.0, 1.0, 1.0, 1.0, 1.0);
s16 procname = PROC_BST; // Gohdan
if (fopAcIt_Judge(&fpcSch_JudgeForPName, &procname)) {
// TODO: dPa_control_c::set
mpParticleEmitter = 0;
}
}
/* 800F53EC-800F5668 .text _daItem_create__8daItem_cFv */
s32 daItem_c::_daItem_create() {
/* Nonmatching */
fopAcM_SetupActor(this, daItem_c);
m_itemNo = (fpcM_GetParam(this) & 0x000000FF) >> 0x00;
if (!dItem_data::field_item_res[m_itemNo].mModelArcName) {
setLoadError();
return cPhs_ERROR_e;
}
mPickupFlag = (fpcM_GetParam(this) & 0x0000FF00) >> 0x08;
if (m_itemNo != BLUE_JELLY) { // Blue Chu Jelly uses mPickupFlag as if it was a switch.
mPickupFlag &= 0x7F;
if (dComIfGs_isItem(mPickupFlag, orig.roomNo) && mPickupFlag != 0x7F) {
// Already picked up, don't create the item again.
setLoadError();
return cPhs_ERROR_e;
}
}
s32 phase_state = dComIfG_resLoad(&mPhs, dItem_data::field_item_res[m_itemNo].mModelArcName);
if (phase_state == cPhs_COMPLEATE_e) {
u16 heapSize = dItem_data::field_item_res[m_itemNo].mHeapSize;
s32 result = fopAcM_entrySolidHeap(this, (heapCallbackFunc)&CheckFieldItemCreateHeap, heapSize);
if (!result) {
return cPhs_ERROR_e;
}
CreateInit();
}
return phase_state;
}
/* 800F5668-800F5834 .text _daItem_execute__8daItem_cFv */
@@ -103,6 +242,20 @@ void daItem_c::mode_proc_call() {
/* 800F59CC-800F5AFC .text execInitNormalDirection__8daItem_cFv */
void daItem_c::execInitNormalDirection() {
/* Nonmatching */
daPy_getPlayerActorClass()->getHeadTopPos();
field8_0x65c = getData()->field45_0x40;
f32 speedY = getData()->mPickedUpInitialSpeedY;
speed.x = 0;
speed.y = speedY;
speed.z = 0;
mGravity = getData()->mPickedUpGravity;
show();
// TODO dPa_smokeEcallBack
// TODO mpParticleEmitter
}
/* 800F5AFC-800F5BC8 .text execMainNormalDirection__8daItem_cFv */
@@ -127,7 +280,10 @@ void daItem_c::execMainGetDemoDirection() {
/* 800F5D44-800F5D88 .text execBringNezumi__8daItem_cFv */
void daItem_c::execBringNezumi() {
/* Nonmatching */
if (mUnknownParam != 1) {
fopAcM_posMoveF(this, mStts.GetCCMoveP());
}
mode_proc_call();
}
/* 800F5D88-800F5F40 .text execWaitMain__8daItem_cFv */
@@ -147,17 +303,37 @@ void daItem_c::scaleAnimFromBossItem() {
/* 800F60C0-800F6110 .text _daItem_draw__8daItem_cFv */
s32 daItem_c::_daItem_draw() {
/* Nonmatching */
if (chkDraw()) {
return DrawBase();
}
return 1;
}
/* 800F6110-800F61C8 .text setTevStr__8daItem_cFv */
void daItem_c::setTevStr() {
/* Nonmatching */
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, getPositionP(), &mTevStr);
mTevStr.mColorC0.r = 0x96;
mTevStr.mColorC0.g = 0x96;
mTevStr.mColorC0.b = 0x96;
mTevStr.mColorK0.r = 0xFF;
mTevStr.mColorK0.g = 0xFF;
mTevStr.mColorK0.b = 0xFF;
g_env_light.setLightTevColorType(mModel, &mTevStr);
for (int i = 0; i < 2; i++) {
if (!mModelArrow[i]) {
continue;
}
g_env_light.setLightTevColorType(mModelArrow[i], &mTevStr);
}
}
/* 800F61C8-800F6268 .text _daItem_delete__8daItem_cFv */
s32 daItem_c::_daItem_delete() {
/* Nonmatching */
// TODO: dPa_rippleEcallBack::end()
DeleteBase(dItem_data::field_item_res[m_itemNo].mModelArcName);
}
/* 800F6268-800F6434 .text Reflect__FR4cXyzP4cXyzff */
@@ -181,7 +357,7 @@ void daItem_c::itemDefaultRotateY() {
/* 800F6D78-800F6E54 .text checkItemDisappear__8daItem_cFv */
bool daItem_c::checkItemDisappear() {
bool disappearing = true;
if (mCurAction == 3) {
if (mCurState == 3) {
disappearing = false;
show();
}
@@ -197,7 +373,7 @@ bool daItem_c::checkItemDisappear() {
if (g_dComIfG_gameInfo.play.mEvtCtrl.mMode != 0) {
disappearing = false;
}
if (mCurAction == 4) {
if (mCurState == 4) {
disappearing = false;
}
if ((mStatusFlags & 0x08) || (mStatusFlags & 0x40) || (mStatus & 0x100000)) {
@@ -208,13 +384,23 @@ bool daItem_c::checkItemDisappear() {
}
/* 800F6E54-800F6E74 .text setItemTimer__8daItem_cFi */
void daItem_c::setItemTimer(int) {
/* Nonmatching */
void daItem_c::setItemTimer(int timer) {
if (timer == -1) {
mStatusFlags |= 0x10;
return;
}
mItemTimer = timer;
}
/* 800F6E74-800F6EC8 .text checkPlayerGet__8daItem_cFv */
bool daItem_c::checkPlayerGet() {
/* Nonmatching */
BOOL daItem_c::checkPlayerGet() {
if (field20_0x638 < getData()->field47_0x42) {
return FALSE;
}
if (mCurState == 3) {
return FALSE;
}
return TRUE;
}
/* 800F6EC8-800F7028 .text itemActionForRupee__8daItem_cFv */
@@ -259,14 +445,23 @@ void daItem_c::set_bound_se() {
/* 800F7DDC-800F7E6C .text checkGetItem__8daItem_cFv */
s32 daItem_c::checkGetItem() {
/* Nonmatching */
if (checkPlayerGet()) {
itemGetExecute();
return 1;
if (!checkPlayerGet()) {
return 0;
}
if (mCyl.ChkTgHit()) {
cCcD_Obj* hitObj = mCyl.GetTgHitObj();
if (hitObj) {
u32 atType = hitObj->GetAtType();
if (atType & AT_TYPE_SWORD) {
itemGetExecute();
return 1;
} else if (atType & AT_TYPE_BOOMERANG) {
mStatusFlags |= 0x08;
}
}
}
mStatusFlags |= 0x08;
return 0;
}
@@ -301,8 +496,8 @@ void daItem_c::initAction() {
}
/* 800F8950-800F8970 .text daItem_Draw__FP8daItem_c */
void daItem_Draw(daItem_c*) {
/* Nonmatching */
s32 daItem_Draw(daItem_c* i_this) {
return i_this->_daItem_draw();
}
/* 800F8970-800F8990 .text daItem_Execute__FP8daItem_c */
@@ -322,7 +517,7 @@ s32 daItem_Delete(daItem_c* i_this) {
/* 800F89D0-800F89F0 .text daItem_Create__FP10fopAc_ac_c */
s32 daItem_Create(fopAc_ac_c* i_this) {
/* Nonmatching */
return ((daItem_c*)i_this)->_daItem_create();
}
/* 800F89F0-800F89F8 .text _daItem_isdelete__8daItem_cFv */
+13 -10
View File
@@ -3,41 +3,44 @@
// Translation Unit: d_a_item_static.cpp
//
#include "d_a_item_static.h"
// #include "d/actor/d_a_item_static.h"
#include "d/actor/d_a_item.h"
#include "dolphin/types.h"
/* 80068820-800688A0 .text checkControl__8daItem_cFv */
void daItem_c::checkControl() {
s32 daItem_c::checkControl() {
/* Nonmatching */
}
/* 800688A0-800688E8 .text startControl__8daItem_cFv */
void daItem_c::startControl() {
s32 daItem_c::startControl() {
/* Nonmatching */
}
/* 800688E8-800688F8 .text endControl__8daItem_cFv */
void daItem_c::endControl() {
/* Nonmatching */
s32 daItem_c::endControl() {
mCurState = 0;
return 1;
}
/* 800688F8-80068950 .text checkLock__8daItem_cFv */
void daItem_c::checkLock() {
s32 daItem_c::checkLock() {
/* Nonmatching */
}
/* 80068950-80068998 .text setLock__8daItem_cFv */
void daItem_c::setLock() {
s32 daItem_c::setLock() {
/* Nonmatching */
}
/* 80068998-800689A8 .text releaseLock__8daItem_cFv */
void daItem_c::releaseLock() {
/* Nonmatching */
s32 daItem_c::releaseLock() {
mCurState = 0;
return 1;
}
/* 800689A8-800689F0 .text checkActionNow__8daItem_cFv */
void daItem_c::checkActionNow() {
s32 daItem_c::checkActionNow() {
/* Nonmatching */
}
+3 -2
View File
@@ -4,6 +4,7 @@
//
#include "d/actor/d_a_itembase_static.h"
#include "d/actor/d_a_itembase.h"
#include "dolphin/types.h"
/* 80068650-80068658 .text getItemNo__12daItemBase_cFv */
@@ -37,7 +38,7 @@ void daItemBase_c::changeDraw() {
}
/* 800686F8-80068710 .text chkDraw__12daItemBase_cFv */
void daItemBase_c::chkDraw() {
bool daItemBase_c::chkDraw() {
/* Nonmatching */
}
@@ -62,7 +63,7 @@ void CheckItemCreateHeap(fopAc_ac_c*) {
}
/* 800687B4-80068820 .text CheckFieldItemCreateHeap__FP10fopAc_ac_c */
void CheckFieldItemCreateHeap(fopAc_ac_c*) {
s32 CheckFieldItemCreateHeap(fopAc_ac_c*) {
/* Nonmatching */
}
+1 -1
View File
@@ -93,7 +93,7 @@ namespace daTagRet {
mCyl.SetC(current.pos);
mCyl.SetR(1000.0f*mScale.x);
mCyl.SetH(100.0f*mScale.y);
g_dComIfG_gameInfo.play.mCcS.Set(&mCyl);
dComIfG_Ccsp()->Set(&mCyl);
if (mCyl.ChkCoHit()) {
u32 playerId = daObj::PrmAbstract(this, PRM_PLAYER_ID_W, PRM_PLAYER_ID_S);
+2 -2
View File
@@ -7,12 +7,12 @@
#include "dolphin/types.h"
/* 800C2DFC-800C2E30 .text execItemGet__FUc */
void execItemGet(unsigned char) {
void execItemGet(u8 itemNo) {
/* Nonmatching */
}
/* 800C2E30-800C2E7C .text checkItemGet__FUci */
void checkItemGet(unsigned char, int) {
BOOL checkItemGet(u8, BOOL defaultVal) {
/* Nonmatching */
}
+4 -4
View File
@@ -7,22 +7,22 @@
#include "dolphin/types.h"
/* 800C12F4-800C1334 .text checkAppearEffect__10dItem_dataFUc */
void dItem_data::checkAppearEffect(unsigned char) {
bool dItem_data::checkAppearEffect(u8 itemNo) {
/* Nonmatching */
}
/* 800C1334-800C13B4 .text getAppearEffect__10dItem_dataFUc */
void dItem_data::getAppearEffect(unsigned char) {
s16 dItem_data::getAppearEffect(u8 itemNo) {
/* Nonmatching */
}
/* 800C13B4-800C13F8 .text checkSpecialEffect__10dItem_dataFUc */
void dItem_data::checkSpecialEffect(unsigned char) {
bool dItem_data::checkSpecialEffect(u8 itemNo) {
/* Nonmatching */
}
/* 800C13F8-800C1474 .text getSpecialEffect__10dItem_dataFUc */
void dItem_data::getSpecialEffect(unsigned char) {
u16 dItem_data::getSpecialEffect(u8 itemNo) {
/* Nonmatching */
}