From e2c4bb7be7fa731a335bce4bc22283d899133e39 Mon Sep 17 00:00:00 2001 From: robojumper Date: Thu, 12 Sep 2024 22:23:11 +0200 Subject: Dowsing (#17) * Dowsing. * d_t_dowsing * d_t_holy_water OK --- include/d/a/d_a_base.h | 16 +-------- include/d/d_player.h | 6 ++-- include/d/tg/d_t_dowsing.h | 66 ++++++++++++++++++++++++++++++++++++++ include/d/tg/d_t_genki_dws_tgt.h | 23 +++++++++++++ include/d/tg/d_t_holy_water.h | 24 ++++++++++++++ include/d/tg/d_t_light_shaft_eff.h | 5 +++ include/d/tg/d_t_map_inst.h | 3 ++ include/d/tg/d_t_tackle.h | 5 +++ include/d/tg/d_tg.h | 12 ------- 9 files changed, 130 insertions(+), 30 deletions(-) create mode 100644 include/d/tg/d_t_dowsing.h create mode 100644 include/d/tg/d_t_genki_dws_tgt.h create mode 100644 include/d/tg/d_t_holy_water.h (limited to 'include/d') diff --git a/include/d/a/d_a_base.h b/include/d/a/d_a_base.h index 46072cb0..659a3d59 100644 --- a/include/d/a/d_a_base.h +++ b/include/d/a/d_a_base.h @@ -10,6 +10,7 @@ #include "m/m_angle.h" #include "m/m_vec.h" #include "toBeSorted/room_manager.h" +#include "toBeSorted/tlist.h" class dAcBase_c; @@ -60,21 +61,6 @@ public: } }; -template -struct TList { - T *GetOffset() { - return (T *)((u8 *)this - offset); - } - TList() { - sound_info_next = GetOffset(); - sound_info_tail = GetOffset(); - count = 0; - } - T *sound_info_tail; - T *sound_info_next; - s32 count; -}; - // Ghidra: ActorBase // size: 0xFC // non-official name diff --git a/include/d/d_player.h b/include/d/d_player.h index cc99016f..7477b0a9 100644 --- a/include/d/d_player.h +++ b/include/d/d_player.h @@ -7,9 +7,9 @@ class dPlayer: public dAcObjBase_c { public: /* 0x330 */ u8 unk_0x330[0x350 - 0x330]; - /* 0x350 */ u32 someFlags; - - + /* 0x350 */ u32 someFlags_0x350; + u8 UNK_0x354[0x35C - 0x354]; + /* 0x35C */ u32 mForceOrPreventActionFlags; static dPlayer *LINK; }; diff --git a/include/d/tg/d_t_dowsing.h b/include/d/tg/d_t_dowsing.h new file mode 100644 index 00000000..21a583a1 --- /dev/null +++ b/include/d/tg/d_t_dowsing.h @@ -0,0 +1,66 @@ +#ifndef D_T_DOWSING_H +#define D_T_DOWSING_H + +#include +#include + +class dTgDowsing_c : public dTg_c { +public: + dTgDowsing_c(); + virtual ~dTgDowsing_c() {} + + virtual int create() override; + virtual int doDelete() override; + virtual int actorExecute() override; + virtual int draw() override; + + bool checkDowsing() const; + +private: + enum DowsingOption { + TRIAL_0, + TRIAL_1, + TRIAL_2, + TRIAL_3, + PROPELLER, + WATER_BASIN, + CRYSTAL_BALL, + PUMPKIN, + NEW_PLANT_SPECIES, + PARTY_WHEEL, + ZELDA, + DOWSING_MAX + }; + + DowsingTarget mDowsingTarget; // 0x0FC + DowsingOption mDowsingOption; // 0x11C + u16 mUntriggerStoryFlag; // 0x120 + u16 mTriggerStoryFlag; // 0x122 + bool mTargetActive; // 0x124 + + u16 getTriggerSceneFlag() { + return params & 0xFF; + } + + u16 getUntriggerSceneFlag() { + return params >> 0x8 & 0xFF; + } + + DowsingOption getDowsingOption() { + return (DowsingOption)(params >> 0x10 & 0xF); + } + + u32 getDowsingOptionNum() { + return mDowsingOption; + } + + u16 getUntriggerStoryFlag() { + return params >> 0x14 & 0x7FF; + } + + u16 getTriggerStoryFlag() { + return rotation.z.mVal & 0x7FF; + } +}; + +#endif diff --git a/include/d/tg/d_t_genki_dws_tgt.h b/include/d/tg/d_t_genki_dws_tgt.h new file mode 100644 index 00000000..b6d9899f --- /dev/null +++ b/include/d/tg/d_t_genki_dws_tgt.h @@ -0,0 +1,23 @@ +#ifndef D_T_GENKI_DWS_TGT_H +#define D_T_GENKI_DWS_TGT_H + +#include +#include + +class dTgGenkiDwsTgt_c : public dTg_c { +public: + dTgGenkiDwsTgt_c() : mDowsingTarget(this, DowsingTarget::SLOT_NONE) {} + virtual ~dTgGenkiDwsTgt_c() {} + + virtual int create() override; + virtual int doDelete() override; + virtual int actorExecute() override; + + +private: + u16 getSceneFlagFromParams(); + + DowsingTarget mDowsingTarget; // 0xFC +}; + +#endif diff --git a/include/d/tg/d_t_holy_water.h b/include/d/tg/d_t_holy_water.h new file mode 100644 index 00000000..fd6bacfe --- /dev/null +++ b/include/d/tg/d_t_holy_water.h @@ -0,0 +1,24 @@ +#ifndef D_T_HOLY_WATER_H +#define D_T_HOLY_WATER_H + +#include +#include + +class dTgHolyWater_c : public dTg_c { +public: + dTgHolyWater_c() : mDowsingTarget(this, DowsingTarget::SLOT_NONE) {} + virtual ~dTgHolyWater_c() {} + + virtual int create() override; + virtual int doDelete() override; + virtual int actorExecute() override; + virtual int draw() override; + + bool isLinkNearby(); + bool dowsingActive(); + +private: + DowsingTarget mDowsingTarget; // 0x0FC +}; + +#endif diff --git a/include/d/tg/d_t_light_shaft_eff.h b/include/d/tg/d_t_light_shaft_eff.h index 18928aad..d3d8a35f 100644 --- a/include/d/tg/d_t_light_shaft_eff.h +++ b/include/d/tg/d_t_light_shaft_eff.h @@ -7,6 +7,11 @@ class dTgLightShaftEff_c : public dTg_c { public: dTgLightShaftEff_c() {} virtual ~dTgLightShaftEff_c() {} + + virtual int create() override; + virtual int doDelete() override; + virtual int actorExecute() override; + virtual int draw() override; }; #endif diff --git a/include/d/tg/d_t_map_inst.h b/include/d/tg/d_t_map_inst.h index 855cc6c0..f5545962 100644 --- a/include/d/tg/d_t_map_inst.h +++ b/include/d/tg/d_t_map_inst.h @@ -9,6 +9,9 @@ public: virtual ~dTgMapInst_c() {} virtual int create() override; + virtual int doDelete() override; + virtual int actorExecute() override; + virtual int draw() override; u8 field_0xfc; }; diff --git a/include/d/tg/d_t_tackle.h b/include/d/tg/d_t_tackle.h index c325c7bb..aba9f97c 100644 --- a/include/d/tg/d_t_tackle.h +++ b/include/d/tg/d_t_tackle.h @@ -7,6 +7,11 @@ class dTgTackle_c : public dTg_c { public: dTgTackle_c() {} virtual ~dTgTackle_c() {} + + virtual int create() override; + virtual int doDelete() override; + virtual int actorExecute() override; + virtual int draw() override; }; #endif diff --git a/include/d/tg/d_tg.h b/include/d/tg/d_tg.h index ceb14579..6f8f519e 100644 --- a/include/d/tg/d_tg.h +++ b/include/d/tg/d_tg.h @@ -6,18 +6,6 @@ class dTg_c : public dAcBase_c { public: virtual ~dTg_c() {} - virtual int draw() override { - return 1; - } - virtual int actorExecute() override { - return 1; - } - virtual int doDelete() override { - return 1; - } - virtual int create() override { - return 1; - } }; #endif -- cgit v1.2.3