Improve dAcBase_c (#133)

* Improve dAcBase_c

* Fix missed polyAttr0/1 renaming

* Add getters for EventManager funcs used in dAcBase

* Fix include

* Replace actor_properties with helper calls

* Fix SoundInfo TList function (thanks robo)

* Make roundAngleToNearest90 static

* Fix removeSoundInfo symbol

* Revert d_a_item spawnItem and spawnDrop param change

* Fix d_t_reaction and improve spawnHearts a bit

* Also update special_item_drop_mgr

* Fix special_item_drop_mgr

* Small fixes

---------

Co-authored-by: robojumper <robojumper@gmail.com>
Co-authored-by: elijah-thomas774 <elijahthomas774@gmail.com>
This commit is contained in:
CovenEsme
2025-03-16 15:40:04 +00:00
committed by GitHub
parent 9c3c480b24
commit 7400f6c66a
20 changed files with 246 additions and 144 deletions
+1
View File
@@ -7,6 +7,7 @@
namespace cLib {
s32 targetAngleY(const mVec3_c &target, const mVec3_c &source);
s32 targetAngleX(const mVec3_c &target, const mVec3_c &source);
f32 addCalcPosXZ(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep, f32 minStep);
} // namespace cLib
+15 -14
View File
@@ -6,13 +6,14 @@
#include "m/m_allocator.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
#include "toBeSorted/raii_ptr.h"
#include "toBeSorted/tlist.h"
class dAcBase_c;
struct cBgS_PolyInfo;
struct SoundSource {
// TODO
virtual ~SoundSource() {}
};
struct SoundInfo {
@@ -71,7 +72,7 @@ public:
/* 0x68 */ mHeapAllocator_c heap_allocator;
/* 0x84 */ ObjInfo *obj_info;
/* 0x88 */ TList<SoundInfo, 12> sound_list;
/* 0x94 */ SoundSource *sound_source;
/* 0x94 */ RaiiPtr<SoundSource> sound_source;
/* 0x98 */ mVec3_c *obj_pos;
/* 0x9C */ mVec3_c pos_copy;
/* 0xA8 */ u32 params2;
@@ -88,8 +89,8 @@ public:
/* 0xE8 */ u32 field_0xe8;
/* 0xEC */ s8 roomid;
/* 0xED */ u8 actor_subtype;
/* 0xEE */ u8 field_0xEE;
/* 0xEF */ u8 field_0xEF;
/* 0xEE */ u8 polyAttr0;
/* 0xEF */ u8 polyAttr1;
/* 0xF0 */ u32 JStudio_actor;
/* 0xF4 */ char someStr[4];
/* 0xF8 */ char field_0xf8[0xfc - 0xf8];
@@ -176,8 +177,8 @@ public:
public:
// funcs found in TU
/* 8002c650 */ static void setTempCreateParams(
mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, s32 roomId, u32 params2, dAcBase_c *parent, u8 subtype, s16 unkFlag,
u8 viewClipIdx, ObjInfo *objInfo
mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, s32 roomId, u32 params2, dAcBase_c *parent, u8 subtype, u16 unkFlag,
s8 viewClipIdx, ObjInfo *objInfo
);
/* 8002c690 */ SoundSource *FUN_8002c690();
@@ -232,7 +233,7 @@ public:
/* 8002d880 */ SoundSource *getSoundSource();
// End of SoundSource stuff
/* 8002d890 */ void FUN_8002d890();
/* 8002d890 */ void removeSoundInfo(SoundInfo *);
/* 8002d920 */ void setActorRef(dAcBase_c *);
// next three funcs are related
/* 8002d930 */ void setEnemyDefeatFlag();
@@ -249,14 +250,14 @@ public:
dBase_c *ref
);
/* 8002dc20 */ void FUN_8002dc20(s16 *, s16 *);
/* 8002dc20 */ static void roundAngleToNearest90(s16 *, s16 *);
/* 8002dc50 */ void incrementKillCounter();
/* 8002dcd0 */ void FUN_8002dcd0();
/* 8002dd10 */ void FUN_8002dd10();
/* 8002dd50 */ void FUN_8002dd50();
/* 8002dd90 */ void FUN_8002dd90();
/* 8002ddd0 */ void FUN_8002ddd0();
/* 8002de30 */ void FUN_8002de30(cBgS_PolyInfo &p);
/* 8002dcd0 */ void killNoItemDrop();
/* 8002dd10 */ void killWithFlag();
/* 8002dd50 */ void killWithFlagNoItemDrop();
/* 8002dd90 */ void deleteWithFlagNoItemDrop();
/* 8002ddd0 */ void setPolyAttrs(cBgS_PolyInfo &p);
/* 8002de30 */ void setPolyAttrsDupe(cBgS_PolyInfo &p);
public:
/* 80571920 */ static u32 s_Create_RoomId;
+1 -1
View File
@@ -14,7 +14,7 @@ public:
STATE_FUNC_DECLARE(dAcOVortex_c, Appear);
void triggerActivation() {
actor_properties |= 0x4;
setActorProperty(0x4);
field_0x870 = 1;
}
+1 -1
View File
@@ -3,8 +3,8 @@
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/cc/d_cc_d.h"
#include "m/m_angle.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
#include "toBeSorted/dowsing_target.h"
class dTgReaction_c : public dAcObjBase_c {
+3 -1
View File
@@ -82,7 +82,9 @@ public:
);
dAcObjBase_c *getActor(s32 i) {
return i < mNumUsedRefs && mInfos[i].mActorIdx != 0xFF ? mRefs[mInfos[i].mActorIdx].get() : nullptr;
// This only matches if the comparision is always true
// Logic is hard sometimes I guess xD
return i < mNumUsedRefs && mInfos[i].mActorIdx != -1 ? mRefs[mInfos[i].mActorIdx].get() : nullptr;
}
void clear() {
+11 -2
View File
@@ -23,8 +23,12 @@ public:
return sInstance != nullptr && sInstance->mState != 0;
}
static bool isInEventOtherThan7() {
return isInEvent() && sInstance != nullptr && sInstance->mState != 7;
static bool isInEvent0Or7() {
return sInstance != nullptr && (sInstance->mState == 0 || sInstance->mState == 7);
}
static bool isInEventOtherThan0Or7() {
return isInEvent() && !isInEvent0Or7();
}
static const char *getCurrentEventName() {
@@ -35,7 +39,12 @@ public:
return strequals(getCurrentEventName(), name);
}
// Something like isActorInEvent maybe?
static bool FUN_800a0570(dAcBase_c *actor);
static bool FUN_800a0ba0();
private:
/* 0x000 */ u8 _000[0x084 - 0x000];
/* 0x084 */ Event mCurrentEvent;
/* 0x0C4 */ u8 _0C4[0x184 - 0x0C4];
+8
View File
@@ -25,6 +25,14 @@ public:
return mPtr != nullptr;
}
const T *get() const {
return mPtr;
}
T *get() {
return mPtr;
}
const T *operator->() const {
return mPtr;
}