d_a_obj_item done (#2150)

* d_a_obj_item 99% done

* item cleanup

* remove asm

* add actor attention dist type enum

* change dist_entry names slightly
This commit is contained in:
TakaRikka
2024-05-07 21:21:07 -07:00
committed by GitHub
parent aa64f1837f
commit 06ba045f1d
96 changed files with 1043 additions and 3805 deletions
+62 -60
View File
@@ -4,13 +4,52 @@
#include "SSystem/SComponent/c_lib.h"
#include "d/a/d_a_itembase.h"
#include "d/particle/d_particle.h"
#include "d/a/d_a_player.h"
class daItem_c;
typedef void (daItem_c::*procFunc)();
class daItem_c : public daItemBase_c {
public:
daItem_c() : field_0x998(0, 0) {}
enum Type_e {
TYPE_LAUNCH_e,
TYPE_FIXED_PLACE_e,
TYPE_UNK2_e,
TYPE_WAIT_e,
TYPE_SIMPLE_GET_e,
TYPE_BOOM_HIT_e,
TYPE_LAUNCH_NO_RND_e,
TYPE_FORCE_GET_e,
TYPE_LAUNCH_SMALL_e,
TYPE_LAUNCH_FROM_PLAYER_e,
};
enum Flag_e {
FLAG_UNK_2_e = (1 << 1),
FLAG_NO_MOVE_e = (1 << 2),
FLAG_NO_TIMER_e = (1 << 3),
FLAG_INIT_GET_ITEM_e = (1 << 4),
FLAG_DELETE_ITEM_e = (1 << 5),
};
enum Mode_e {
MODE_WAIT_e,
MODE_WATER_e,
};
enum Status_e {
STATUS_NORMAL_e,
STATUS_ENEMY_CARRY_e,
STATUS_SIMPLE_GET_DEMO_e,
STATUS_WAIT_GET_DEMO_EVENT_e,
STATUS_GET_DEMO_EVENT_e,
STATUS_BOOMERANG_CARRY_e,
STATUS_SW_ON_WAIT_e,
STATUS_BOOM_HIT_WAIT_e,
STATUS_FORCE_GET_e,
};
daItem_c() : mSparkleEmtr(0, 0) {}
/* 8015B0C4 */ void initBaseMtx();
/* 8015B108 */ void setBaseMtx();
/* 8015B190 */ void setBaseMtx_0();
@@ -45,13 +84,13 @@ public:
/* 8015CEEC */ void itemGetNextExecute();
/* 8015D0A8 */ void itemGet();
/* 8015D370 */ BOOL checkCountTimer();
/* 8015D3CC */ bool checkPlayerGet();
/* 8015D3CC */ BOOL checkPlayerGet();
/* 8015D410 */ void checkYogan();
/* 8015D480 */ void deleteItem();
/* 8015D4AC */ int itemActionForRupee();
/* 8015D56C */ void itemActionForHeart();
/* 8015D688 */ void itemActionForArrow();
/* 8015D700 */ void itemActionForBoomerang();
/* 8015D56C */ int itemActionForHeart();
/* 8015D688 */ int itemActionForArrow();
/* 8015D700 */ int itemActionForBoomerang();
/* 8015D734 */ void bg_check();
/* 8015D834 */ void set_bound_se();
/* 8015D95C */ int CountTimer();
@@ -65,80 +104,43 @@ public:
u32 endControl();
/* 8015CE94 */ virtual void setTevStr();
virtual void unk0() = 0;
virtual void unk1() = 0;
virtual void unk2() = 0;
virtual void unk3() = 0;
virtual void unk4() = 0;
virtual void unk5() = 0;
virtual void unk6() = 0;
virtual void unk7() = 0;
virtual void unk8() = 0;
virtual void unk9() = 0;
virtual void unk10() = 0;
virtual void unk11() = 0;
virtual void unk12() = 0;
virtual void unk13() = 0;
virtual void unk14() = 0;
virtual void unk15() = 0;
virtual void unk16() = 0;
virtual void unk17() = 0;
virtual void unk18() = 0;
virtual void unk19() = 0;
virtual void unk20() = 0;
virtual void unk21() = 0;
virtual void unk22() = 0;
virtual void unk23() = 0;
virtual void unk24() = 0;
virtual void unk25() = 0;
virtual void unk26() = 0;
virtual void unk27() = 0;
virtual void unk28() = 0;
virtual void unk29() = 0;
virtual void unk30() = 0;
virtual void unk31() = 0;
virtual void unk32() = 0;
virtual void unk33() = 0;
virtual void unk34() = 0;
virtual void unk35() = 0;
void setStatus(u8 status) { mStatus = status; }
int getStatus() { return mStatus; }
void setFlag(u8 pFlag) { cLib_onBit(mFlag, pFlag); }
void setStatus(u8 status) { mStatus = status; }
u8 getStatus() { return mStatus; }
bool checkFlag(u8 flag) { return cLib_checkBit(mFlag, flag); }
void clrFlag(u8 flag) { cLib_offBit(mFlag, flag); }
#ifdef NONMATCHING
static procFunc mFuncPtr[9];
#else
static u8 mFuncPtr[120];
#endif
bool checkBoomWindTgTimer() { return mBoomWindTgTimer == 0; }
static procFunc mFuncPtr[];
static dCcD_SrcCyl m_cyl_src;
static s32 m_timer_max;
/* 0x92C */ s16 field_0x92c;
/* 0x92E */ u16 field_0x92e;
/* 0x930 */ cXyz field_0x930;
/* 0x93C */ int field_0x93c;
/* 0x930 */ cXyz mItemScale;
/* 0x93C */ int mSwitchNo;
/* 0x940 */ u16 field_0x940;
/* 0x942 */ s16 field_0x942;
/* 0x944 */ s16 field_0x944;
/* 0x946 */ s16 field_0x946;
/* 0x942 */ s16 mWaitTimer;
/* 0x944 */ s16 mDisappearTimer;
/* 0x946 */ s16 mSimpleExistTimer;
/* 0x948 */ u8 mFlag;
/* 0x949 */ u8 field_0x949;
/* 0x949 */ u8 mMode;
/* 0x94A */ u8 mStatus;
/* 0x94B */ u8 field_0x94b;
/* 0x94C */ u32 m_item_id;
/* 0x950 */ cXyz field_0x950;
/* 0x95C */ u8 field_0x95c;
/* 0x95C */ u8 mSwOnWaitTimer;
/* 0x95D */ bool field_0x95d;
/* 0x95E */ u8 mBoomWindTgTimer;
/* 0x95F */ u8 field_0x95f;
/* 0x960 */ u8 field_0x960[0xC];
/* 0x96C */ cXyz field_0x96c;
/* 0x978 */ Z2SoundObjSimple field_0x978;
/* 0x998 */ dPa_followEcallBack field_0x998;
/* 0x9AC */ cXyz field_0x9ac;
/* 0x960 */ daPy_boomerangMove_c mBoomerangMove;
/* 0x96C */ cXyz mLastPos;
/* 0x978 */ Z2SoundObjSimple mSound;
/* 0x998 */ dPa_followEcallBack mSparkleEmtr;
/* 0x9AC */ cXyz mSparklePos;
/* 0x9B8 */ u32 field_0x9b8;
/* 0x9BC */ u8 field_0x9bc[4];
/* 0x9C0 */ u8 field_0x9c0;
+22 -22
View File
@@ -7,23 +7,23 @@
struct daItemBase_data {
/* 0x00 */ f32 mGravity;
/* 0x04 */ f32 field_0x4;
/* 0x08 */ f32 field_0x8;
/* 0x0C */ f32 field_0xc;
/* 0x10 */ f32 field_0x10;
/* 0x14 */ s16 field_0x14;
/* 0x16 */ s16 field_0x16;
/* 0x18 */ s16 field_0x18;
/* 0x1A */ s16 field_0x1a;
/* 0x1C */ s16 field_0x1c;
/* 0x20 */ f32 field_0x20;
/* 0x24 */ f32 field_0x24;
/* 0x28 */ s16 field_0x28;
/* 0x2A */ s16 field_0x2a;
/* 0x2C */ f32 field_0x2c;
/* 0x30 */ f32 field_0x30;
/* 0x34 */ s16 field_0x34;
/* 0x36 */ s16 field_0x36;
/* 0x04 */ f32 mGroundReflect;
/* 0x08 */ f32 mLaunchSpeed;
/* 0x0C */ f32 mScalingTime;
/* 0x10 */ f32 mSpeedH;
/* 0x14 */ s16 mFlashCycleTime;
/* 0x16 */ s16 mWaitTime;
/* 0x18 */ s16 mDisappearTime;
/* 0x1A */ s16 mRotateXSpeed;
/* 0x1C */ s16 mRotateYSpeed;
/* 0x20 */ f32 mHeartFallSpeed;
/* 0x24 */ f32 mHeartAmplitude;
/* 0x28 */ s16 mHeartFallCycleTime;
/* 0x2A */ s16 mHeartTilt;
/* 0x2C */ f32 mGetDemoLaunchSpeed;
/* 0x30 */ f32 mGetDemoGravity;
/* 0x34 */ s16 mSimpleExistTime;
/* 0x36 */ s16 mNoGetTime;
};
class daItemBase_c : public fopAc_ac_c {
@@ -68,12 +68,12 @@ public:
/* 0x588 */ mDoExt_btpAnm* mpBtpAnm;
/* 0x58C */ dBgS_ObjAcch mAcch;
/* 0x764 */ dBgS_AcchCir mAcchCir;
/* 0x7A4 */ dCcD_Stts mColStatus;
/* 0x7E0 */ dCcD_Cyl mCollider;
/* 0x7A4 */ dCcD_Stts mCcStts;
/* 0x7E0 */ dCcD_Cyl mCcCyl;
/* 0x91C */ u32 mShadowKey;
/* 0x920 */ u32 field_0x920;
/* 0x924 */ int field_0x924;
/* 0x928 */ s16 field_0x928;
/* 0x920 */ u32 mItemBitNo;
/* 0x924 */ int m_timer;
/* 0x928 */ s16 m_get_timer;
/* 0x92A */ u8 m_itemNo;
/* 0x92B */ u8 field_0x92b;
};
+2 -2
View File
@@ -809,13 +809,13 @@ public:
/* 80155BCC */ virtual void drawOtherMdls();
BOOL chkActorInSpeakArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorArea) {
return chkActorInAttnArea(i_actorCheck, i_actorArea, attention_info.field_0x0[3]);
return chkActorInAttnArea(i_actorCheck, i_actorArea, attention_info.distances[fopAc_attn_SPEAK_e]);
}
BOOL chkPlayerInSpeakArea(fopAc_ac_c* i_actor) {
return chkActorInSpeakArea(daPy_getPlayerActorClass(), i_actor);
}
BOOL chkActorInTalkArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorArea) {
return chkActorInAttnArea(i_actorCheck, i_actorArea, attention_info.field_0x0[1]);
return chkActorInAttnArea(i_actorCheck, i_actorArea, attention_info.distances[fopAc_attn_TALK_e]);
}
BOOL chkPlayerInTalkArea(fopAc_ac_c* i_actor) {
return chkActorInTalkArea(daPy_getPlayerActorClass(), i_actor);
+1 -1
View File
@@ -533,7 +533,7 @@ public:
BOOL checkCopyRodThrowAfter() const { return checkNoResetFlg3(FLG3_COPY_ROD_THROW_AFTER); }
BOOL checkRide() const { return checkHorseRide() || checkBoarRide() || checkSpinnerRide() || checkCanoeRide() || checkBoardRide(); }
const cXyz& getRightHandPos() const { return mRightHandPos; }
const cXyz* getLeftHandPos() const { return &mLeftHandPos; }
const cXyz getLeftHandPos() const { return mLeftHandPos; }
const cXyz getItemPos() const { return mItemPos; }
virtual cXyz* getMidnaAtnPos() const;
+2 -2
View File
@@ -141,8 +141,8 @@ public:
};
struct dist_entry {
/* 0x00 */ f32 mRadius1;
/* 0x04 */ f32 mRadius2;
/* 0x00 */ f32 mDistMax;
/* 0x04 */ f32 mDistMaxRelease;
/* 0x08 */ f32 mDistanceAdjust;
/* 0x0C */ f32 mUpperY;
/* 0x10 */ f32 mLowerY;
+13 -1
View File
@@ -82,6 +82,18 @@ enum fopAc_Cull_e {
fopAc_CULLSPHERE_CUSTOM_e,
};
enum fopAc_attention_type {
fopAc_attn_LOCK_e,
fopAc_attn_TALK_e,
fopAc_attn_BATTLE_e,
fopAc_attn_SPEAK_e,
fopAc_attn_CARRY_e,
fopAc_attn_DOOR_e,
fopAc_attn_JUEL_e,
fopAc_attn_ETC_e,
fopAc_attn_CHECK_e,
};
class JKRSolidHeap;
enum dEvt_Command_e {
@@ -162,7 +174,7 @@ struct actor_place {
};
struct actor_attention_types {
/* 0x00 */ u8 field_0x0[9];
/* 0x00 */ u8 distances[9];
/* 0x0A */ s16 field_0xa;
/* 0x0C */ cXyz position;
/* 0x18 */ u32 flags;
+4
View File
@@ -362,6 +362,10 @@ inline const cXyz* fopAcM_GetSpeed_p(const fopAc_ac_c* p_actor) {
return &p_actor->speed;
}
inline cXyz& fopAcM_GetSpeed(fopAc_ac_c* p_actor) {
return p_actor->speed;
}
inline const cXyz* fopAcM_GetPosition_p(const fopAc_ac_c* p_actor) {
return &p_actor->current.pos;
}
+8
View File
@@ -55,10 +55,18 @@ void fopCamM_SetBank(camera_class* cam, s16 bank) {
cam->mBank = bank;
} */
inline s16 fopCamM_GetAngleX(camera_class* i_camera) {
return i_camera->mAngle.x;
}
inline s16 fopCamM_GetAngleY(camera_class* i_camera) {
return i_camera->mAngle.y;
}
inline s16 fopCamM_GetAngleZ(camera_class* i_camera) {
return i_camera->mAngle.z;
}
inline f32 fopCamM_GetFovy(camera_class* i_camera) {
return i_camera->mFovy;
}