diff options
| author | robojumper <robojumper@gmail.com> | 2025-11-23 21:00:33 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-23 21:00:33 +0100 |
| commit | fc4700efd66bc1cea1dbe15e8b3ddd8fe5332e39 (patch) | |
| tree | 2d5ce963d4d14e863caaeaf1aaeca1e373547ff0 /include | |
| parent | 57557d11285aeff9ffd86c6e57fdc09b62b391d1 (diff) | |
| parent | 88075f00a9a1e021f3eb0e9b88e86a8396ceac17 (diff) | |
Merge pull request #273 from robojumper/d_lyt_control_game
d_lyt_control_game OK
Diffstat (limited to 'include')
| -rw-r--r-- | include/d/a/d_a_item.h | 9 | ||||
| -rw-r--r-- | include/d/a/d_a_itembase.h | 4 | ||||
| -rw-r--r-- | include/d/d_cs_game.h | 5 | ||||
| -rw-r--r-- | include/d/d_message.h | 16 | ||||
| -rw-r--r-- | include/d/flag/storyflag_map.h | 14 | ||||
| -rw-r--r-- | include/d/lyt/d_lyt_control_game.h | 73 | ||||
| -rw-r--r-- | include/d/lyt/d_lyt_draw_mark.h | 48 | ||||
| -rw-r--r-- | include/d/lyt/d_lyt_help.h | 20 | ||||
| -rw-r--r-- | include/d/lyt/d_lyt_map.h | 54 | ||||
| -rw-r--r-- | include/d/lyt/d_lyt_map_global.h | 10 | ||||
| -rw-r--r-- | include/d/lyt/d_lyt_pause.h | 6 | ||||
| -rw-r--r-- | include/d/lyt/meter/d_lyt_meter.h | 25 | ||||
| -rw-r--r-- | include/d/snd/d_snd_source_mgr.h | 2 | ||||
| -rw-r--r-- | include/toBeSorted/d_beacon.h | 2 | ||||
| -rw-r--r-- | include/toBeSorted/event_manager.h | 1 | ||||
| -rw-r--r-- | include/toBeSorted/raii_ptr.h | 7 |
16 files changed, 254 insertions, 42 deletions
diff --git a/include/d/a/d_a_item.h b/include/d/a/d_a_item.h index 0997fb68..ed78c6c4 100644 --- a/include/d/a/d_a_item.h +++ b/include/d/a/d_a_item.h @@ -105,8 +105,17 @@ public: return sIsPerformingInitialCollection; } + static s32 getCollectionCurrentCount() { + return sCollectionCurrentCount; + } + + s32 getQuantity() const { + return mItemQuantity; + } + private: static bool sIsPerformingInitialCollection; + static s32 sCollectionCurrentCount; /* 0x334 */ UNKTYPE *mpMdl; // Model has its own handling system /* 0x338 */ dShadowCircle_c mShdw; diff --git a/include/d/a/d_a_itembase.h b/include/d/a/d_a_itembase.h index a08c33a2..9f91e60d 100644 --- a/include/d/a/d_a_itembase.h +++ b/include/d/a/d_a_itembase.h @@ -250,6 +250,10 @@ public: static u16 getTearBit(int tearNum); static bool setDungeonFlagForTear(int tearNum); + u16 getItemId_i() const { + return mId; + } + private: u16 mId; diff --git a/include/d/d_cs_game.h b/include/d/d_cs_game.h index b064844f..52940b71 100644 --- a/include/d/d_cs_game.h +++ b/include/d/d_cs_game.h @@ -436,8 +436,9 @@ public: bool isCursorActive() const { return mCursorActive; } - void setField0x9A0(u8 val) { - mCursorActive = val; + + void setField_0x9A2(bool value) { + field_0x9A2 = value; } void offNextCursor() { diff --git a/include/d/d_message.h b/include/d/d_message.h index a0729e2c..2c17253a 100644 --- a/include/d/d_message.h +++ b/include/d/d_message.h @@ -247,12 +247,12 @@ public: mInMapEvent = val; } - s32 getField_0x32C() const { - return field_0x32C; + s32 getMapEvent() const { + return mMapEvent; } - void setField_0x32C(s32 val) { - field_0x32C = val; + void setMapEvent(s32 val) { + mMapEvent = val; } void setField_0x329(bool v) { @@ -267,6 +267,10 @@ public: return field_0x32A; } + bool getField_0x330() const { + return field_0x330; + } + void setField_0x330(bool v) { field_0x330 = v; } @@ -367,8 +371,8 @@ private: /* 0x32A */ bool field_0x32A; /* 0x32B */ u8 field_0x32B; - /* 0x32C */ s32 field_0x32C; - /* 0x330 */ u8 field_0x330; + /* 0x32C */ s32 mMapEvent; + /* 0x330 */ bool field_0x330; /* 0x334 */ u32 mMinigameResultPoints; /* 0x338 */ u32 mMinigameTime; diff --git a/include/d/flag/storyflag_map.h b/include/d/flag/storyflag_map.h index 5ebbc965..64ca1504 100644 --- a/include/d/flag/storyflag_map.h +++ b/include/d/flag/storyflag_map.h @@ -60,7 +60,7 @@ enum StoryFlags_e { /** [Harp Cutscene (Lanayru Desert layer 2 / Lanayru Mines layer 2 / Temple of Time layer 2 / Behind The Temple * layer 3)] Story Flag #9 (0x0009) - JP 805ACD58 0x04 / US 805A9AD8 0x04 */ - STORYFLAG_9, + STORYFLAG_HARP_CUTSCENE, /** [Entering Ancient Cistern Cutscene] * Story Flag #10 (0x000A) - JP 805ACD58 0x08 / US 805A9AD8 0x08 @@ -111,7 +111,7 @@ enum StoryFlags_e { /** [Fire Dragon Text after SotH part Cutscene (Eldin Volcano, Digging Mitts Cave, Volcano Summit Waterfall layer * 4)] Story Flag #19 (0x0013) - JP 805ACD5B 0x08 / US 805A9ADB 0x08 */ - STORYFLAG_19, + STORYFLAG_BOKO_BASE_BEATEN, /** [Set when learning 3rd SotH part (Groosenator to Lanayru ready)] * Story Flag #20 (0x0014) - JP 805ACD5B 0x10 / US 805A9ADB 0x10 @@ -718,7 +718,7 @@ enum StoryFlags_e { /** [Groose lands in Faron after Harp (Sealed Temple layer 2)] * Story Flag #140 (0x008C) - JP 805ACD67 0x04 / US 805A9AE7 0x04 */ - STORYFLAG_140, + STORYFLAG_GROOSE_LANDS_IN_FARON, /** [Ballad of the Goddess played with Impa (Sealed Grounds layer 2)] * Story Flag #141 (0x008D) - JP 805ACD6C 0x01 / US 805A9AEC 0x01 @@ -863,7 +863,7 @@ enum StoryFlags_e { /** [Eldin Eruption Cutscene ready to play (set when Levias explains SotH quest, set and unset by Faron and Lanayru * SotH)] Story Flag #169 (0x00A9) - JP 805ACD62 0x01 / US 805A9AE2 0x01 */ - STORYFLAG_169, + STORYFLAG_ELDIN_VOLCANO_CAN_ERUPT, /** [Fire Dragon teaches SotH part Cutscene (Fire Dragon's Lair layer 2)] * Story Flag #170 (0x00AA) - JP 805ACD62 0x02 / US 805A9AE2 0x02 @@ -948,12 +948,12 @@ enum StoryFlags_e { /** [Water Basin collected (unsets when scrapper picks up anything else)] * Story Flag #186 (0x00BA) - JP 805ACD69 0x02 / US 805A9AE9 0x02 */ - STORYFLAG_186, + STORYFLAG_SCRAPPER_HAS_WATER_BASIN, /** [Big Frog Watered] * Story Flag #187 (0x00BB) - JP 805ACD69 0x04 / US 805A9AE9 0x04 */ - STORYFLAG_187, + STORYFLAG_SUMMIT_BIG_FROG_WATERED, /** [Asking Fi about the Water Basin after finding the Big Flames in fromt of FS] * Story Flag #188 (0x00BC) - JP 805ACD69 0x08 / US 805A9AE9 0x08 @@ -3738,7 +3738,7 @@ enum StoryFlags_e { /** [set after scrappers text at start of Water Basin Escord] * Story Flag #743 (0x02E7) - JP 805ACDA6 0x80 / US 805A9B26 0x80 */ - STORYFLAG_743, + STORYFLAG_WATER_BASIN_ESCORT_STARTED, /** [Scrapper text at start of scrapper escort] * Story Flag #744 (0x02E8) - JP 805ACDA9 0x01 / US 805A9B29 0x01 diff --git a/include/d/lyt/d_lyt_control_game.h b/include/d/lyt/d_lyt_control_game.h index c36b2ee0..a14bc610 100644 --- a/include/d/lyt/d_lyt_control_game.h +++ b/include/d/lyt/d_lyt_control_game.h @@ -1,29 +1,58 @@ #ifndef D_LYT_CONTROL_GAME_H #define D_LYT_CONTROL_GAME_H +// clang-format off +// vtable order +#include "common.h" #include "d/d_base.h" -#include "d/lyt/d_lyt_map.h" -#include "d/lyt/d_lyt_wipe.h" #include "d/lyt/meter/d_lyt_meter.h" #include "d/lyt/msg_window/d_lyt_msg_window.h" #include "d/lyt/msg_window/d_lyt_simple_window.h" +#include "d/lyt/d_lyt_wipe.h" +#include "d/lyt/d_lyt_help.h" +#include "d/lyt/d_lyt_map.h" #include "s/s_State.hpp" #include "toBeSorted/arc_managers/layout_arc_manager.h" #include "toBeSorted/raii_ptr.h" +// clang-format on + +class dLytDrawMark_c; class dLytControlGame_c : public dBase_c { public: dLytControlGame_c(); virtual ~dLytControlGame_c(); + enum Cmd_e { + CMD_NONE = 0, + CMD_MAP = 1, + CMD_PAUSE = 2, + CMD_HELP = 3, + }; + + virtual int create() override; + virtual int doDelete() override; + virtual int execute() override; + virtual int draw() override; + bool isInSomeMapState() const; bool isNotInStateMap() const; - void openCollectionScreenDemo(); - bool isStateNormalOrNotInEvent() const; - void somehowRelatedToEnteringLightPillars(s32, s32, s32); - - void fn_802CCD40(bool); + bool isStateNotNormalOrInEvent() const; + bool fn_802CFF60() const; + + void setMapEventDone(bool); void fn_802D04F0(); + void checkForBeaconNextToMark(); + + void hideHelp(); + void changeHelpText(s32 textIndex); + void openPause(); + void openPauseDemo(); + void openHelp(s32 textIndex); + void openMap(); + void openMapEvent(s32 mapEvent, s32 arg1, s32 arg2); + + void resetFootsteps(); const dMapFootPrintsQueue_c *getFootprintsQueue() const { return mFootprintsMgr.getQueue(); @@ -80,31 +109,43 @@ public: } private: + bool checkStoryflag(s32 flag) const; + void fn_802CFA90(); + bool canOpenPause(); + bool releaseRes(); + bool decrementRes(); + /* 0x00068 */ UI_STATE_MGR_DECLARE(dLytControlGame_c); - /* 0x000A4 */ RaiiPtr<void*> field_0x000A4; + /* 0x000A4 */ RaiiPtr<dLytMap_c> mpMap; /* 0x000A8 */ dLytMeter_c mMeter; /* 0x13C10 */ dLytMsgWindow_c mMsgWindow; /* 0x14E34 */ dLytSimpleWindow_c mSimpleWindow; /* 0x152A0 */ dLytWipe_c mWipe; - /* 0x15848 */ u8 _0x15848[0x15850 - 0x15848]; + /* 0x15848 */ dLytHelp_c *mpHelp; + /* 0x1584C */ dLytDrawMark_c *mpDrawMark; /* 0x15850 */ dMapFootPrintsMgr_c mFootprintsMgr; - /* 0x15C24 */ UNKWORD field_0x15C24; - /* 0x15C28 */ UNKWORD field_0x15C28; - + /* 0x15C24 */ s32 mCommand; + /* 0x15C28 */ s32 mHelpTextIndex; /* 0x15C2C */ s32 mCurrentPauseDisp; /* 0x15C30 */ s32 mPauseDisp00Tab; + /* 0x15C34 */ u8 mIsEvent; + /* 0x15C38 */ s32 mMapEvent; - /* 0x15C34 */ u8 _0x15C34[0x15C40 - 0x15C34]; + /* 0x15C3C */ u8 _0x15C3C[0x15C40 - 0x15C3C]; /* 0x15C40 */ LayoutArcControl mLytArcControl; - /* 0x15C4C */ u8 _0x15C4C[0x15C60 - 0x15C4C]; + /* 0x15C4C */ s32 mMapEventArg1; + /* 0x15C50 */ s32 mMapEventArg2; - /* 0x15C60 */ u16 mItemForPauseDemo; + /* 0x15C54 */ UNKWORD field_0x15C54; + /* 0x15C58 */ UNKWORD field_0x15C58; - /* 0x15C62 */ u8 _0x15C62[0x15C64 - 0x15C62]; + /* 0x15C5C */ u8 _0x15C5C[0x15C60 - 0x15C5C]; + /* 0x15C60 */ u16 mItemForPauseDemo; + /* 0x15C62 */ u16 mPickupItemCount; /* 0x15C64 */ u16 mItemCountForPauseDemo; /* 0x15C66 */ u8 field_0x15C66; /* 0x15C67 */ bool mIsPauseDemo; diff --git a/include/d/lyt/d_lyt_draw_mark.h b/include/d/lyt/d_lyt_draw_mark.h new file mode 100644 index 00000000..8ec65799 --- /dev/null +++ b/include/d/lyt/d_lyt_draw_mark.h @@ -0,0 +1,48 @@ +#ifndef D_LYT_DRAW_MARK_H +#define D_LYT_DRAW_MARK_H + +#include "d/lyt/d2d.h" +#include "m/m_vec.h" +#include "s/s_State.hpp" + +class dLytDrawMark_c { +public: + dLytDrawMark_c() : mStateMgr(*this) {} + ~dLytDrawMark_c() {} + + bool build(UNKWORD); + bool remove(); + bool execute(); + bool draw(); + + u8 getField_0x940() const { + return field_0x940; + } + + void setField_0x941(u8 v) { + field_0x941 = v; + } + +private: + /* 0x000 */ UI_STATE_MGR_DECLARE(dLytDrawMark_c); + /* 0x018 */ d2d::LytBase_c mLyt; + /* 0x0CC */ d2d::AnmGroup_c mAnm[16]; + + /* 0x4CC */ u8 _0x4CC[0x504 - 0x4CC]; + + /* 0x504 */ d2d::ResAccIf_c mResAcc; + + /* 0x874 */ u8 _0x874[0x88C - 0x874]; + + /* 0x88C */ mVec2_c field_0x88C[6]; + /* 0x8BC */ mVec2_c field_0x8BC[6]; + + /* 0x8EC */ u8 _0x8EC[0x940 - 0x8EC]; + + /* 0x940 */ u8 field_0x940; + /* 0x941 */ u8 field_0x941; + + /* 0x942 */ u8 _0x942[0x958 - 0x942]; +}; + +#endif diff --git a/include/d/lyt/d_lyt_help.h b/include/d/lyt/d_lyt_help.h index e3bd2401..10f9f377 100644 --- a/include/d/lyt/d_lyt_help.h +++ b/include/d/lyt/d_lyt_help.h @@ -65,6 +65,22 @@ public: bool setText(s32 textIndex); void changeText(s32 textIndex); + static dLytHelp_c *GetInstance() { + return sInstance; + } + + bool isStateEnd() const { + return *mStateMgr.getStateID() == StateID_End; + } + + void requestOut() { + mOutRequest = true; + } + + bool isWaiting() const { + return mIsWaiting; + } + private: static dLytHelp_c *sInstance; @@ -80,8 +96,8 @@ private: /* 0x04C */ d2d::ResAccIf_c mResAcc; /* 0x3BC */ dLytHelpMain_c *mpMain; /* 0x3C0 */ bool field_0x3C0; - /* 0x3C1 */ bool field_0x3C1; - /* 0x3C2 */ bool field_0x3C2; + /* 0x3C1 */ bool mOutRequest; + /* 0x3C2 */ bool mIsWaiting; /* 0x3C4 */ s32 mTextIndex; /* 0x3C8 */ s32 field_0x3C8; }; diff --git a/include/d/lyt/d_lyt_map.h b/include/d/lyt/d_lyt_map.h index 54df7cf9..539c0721 100644 --- a/include/d/lyt/d_lyt_map.h +++ b/include/d/lyt/d_lyt_map.h @@ -4,6 +4,7 @@ #include "common.h" #include "d/d_cursor_hit_check.h" #include "d/d_message.h" +#include "d/d_sc_game.h" #include "d/lyt/d2d.h" #include "d/lyt/d_lyt_map_capture.h" #include "d/lyt/d_lyt_map_global.h" @@ -13,6 +14,7 @@ #include "egg/core/eggColorFader.h" #include "egg/core/eggFader.h" #include "m/m2d.h" +#include "m/m_allocator.h" #include "m/m_angle.h" #include "m/m_vec.h" #include "nw4r/lyt/lyt_bounding.h" @@ -87,10 +89,18 @@ public: void execute(); + void reset() { + mQueue.init(); + } + const dMapFootPrintsQueue_c *getQueue() const { return &mQueue; } + void setFootstepMinDistSq(f32 value) { + mMinStepDistanceSq = value; + } + private: /* 0x004 */ dMapFootPrintsQueue_c mQueue; /* 0x3D0 */ f32 mMinStepDistanceSq; @@ -636,10 +646,9 @@ public: /** arg1 = surface province */ MAP_EVENT_SAVE_OBJ = 10, MAP_EVENT_11 = 11, - }; -private: - // TODO - need to come up with better names for all of these enums and concepts + MAP_EVENT_MAX = 12, + }; enum SurfaceProvince_e { SURFACE_PROVINCE_FARON = 0, @@ -647,6 +656,9 @@ private: SURFACE_PROVINCE_LANAYRU = 2, }; +private: + // TODO - need to come up with better names for all of these enums and concepts + enum AreaGroup_e { AREAGROUP_SKY = 1, AREAGROUP_FARON = 2, @@ -716,7 +728,7 @@ private: void loadTextboxes(); void saveMapState(); - void initMapState(); + static void initMapState(); void loadMapState(); void checkCursorPointedAtMap(); @@ -747,6 +759,10 @@ private: mMapEvent == MAP_EVENT_11; } + void setMapEventDone(bool done) { + mEventDone = done; + } + /* 0x0010 */ UI_STATE_MGR_DECLARE(dLytMapMain_c); /* 0x004C */ dFlowMgrBase_c mFlowMgr; /* 0x00A4 */ dFlow_c mFlow; @@ -896,9 +912,13 @@ private: class dLytMap_c { public: dLytMap_c() { + mMapFader.setVisible(false); sInstance = this; } virtual ~dLytMap_c() { + if (dScGame_c::GetInstance() != nullptr) { + dScGame_c::GetInstance()->setTargetingScreenPrio(0x85); + } sInstance = nullptr; } @@ -918,6 +938,22 @@ public: return mMapMain.isOpen(); } + bool checkClose() const { + return mMapMain.checkClose(); + } + + bool isMapIntroDone() const { + return mMapMain.isMapIntroDone(); + } + + void close() { + mMapMain.close(); + } + + static void initMapState() { + dLytMapMain_c::initMapState(); + } + bool isVisibleNoIntro() const { return mMapMain.isVisibleNoIntro(); } @@ -938,6 +974,14 @@ public: return mMapMain.mMapEvent == dLytMapMain_c::MAP_EVENT_SAVE_OBJ; } + void startMapEvent(s32 mapEvent, s32 arg1, s32 arg2) { + mMapMain.startMapEvent(mapEvent, arg1, arg2); + } + + void setMapEventDone(bool done) { + mMapMain.setMapEventDone(done); + } + void queueMapEvent(s32 mapEvent, s32 arg1, s32 arg2) { mMapMain.queueMapEvent(mapEvent, arg1, arg2); } @@ -951,7 +995,7 @@ public: private: /* 0x0004 */ d2d::ResAccIf_c mResAcc; /* 0x0374 */ dLytMapMain_c mMapMain; - /* 0x91A4 */ u8 _0x91A4[0x91C0 - 0x91A4]; + /* 0x91A4 */ mHeapAllocator_c field_0x91A4; /* 0x91C0 */ dLytMapFader_c mMapFader; static dLytMap_c *sInstance; diff --git a/include/d/lyt/d_lyt_map_global.h b/include/d/lyt/d_lyt_map_global.h index fb0b25bf..ef5d74fa 100644 --- a/include/d/lyt/d_lyt_map_global.h +++ b/include/d/lyt/d_lyt_map_global.h @@ -176,8 +176,12 @@ public: mMapEvent = v; } - u8 getField_0x54() const { - return field_0x54; + bool isInMapEvent() const { + return mInMapEvent; + } + + void setInMapEvent(bool v) { + mInMapEvent = v; } void projectOntoMap(mVec2_c &result, const mVec3_c &position) const; @@ -213,7 +217,7 @@ private: /* 0x4E */ u8 mAlpha; /* 0x4F */ u8 field_0x4F; /* 0x50 */ s32 mMapEvent; - /* 0x54 */ u8 field_0x54; + /* 0x54 */ bool mInMapEvent; /* 0x55 */ u8 field_0x55; /* 0x56 */ mAng field_0x56; /* 0x58 */ f32 field_0x58; diff --git a/include/d/lyt/d_lyt_pause.h b/include/d/lyt/d_lyt_pause.h index 033ee400..f38dcc3a 100644 --- a/include/d/lyt/d_lyt_pause.h +++ b/include/d/lyt/d_lyt_pause.h @@ -215,6 +215,10 @@ public: void inRequest(); + bool isActive() const { + return mIsActive; + } + static f32 sDisp00ArrowRotation; static f32 sDisp00ArrowLength; @@ -256,7 +260,7 @@ private: /* 0x0833 */ u8 mCurrentSelectionTab; /* 0x0834 */ u8 mTimer; /* 0x0835 */ u8 field_0x0835; - /* 0x0836 */ bool field_0x0836; + /* 0x0836 */ bool mIsActive; /* 0x0837 */ bool field_0x0837; /* 0x0838 */ bool field_0x0838; /* 0x0839 */ bool field_0x0839; diff --git a/include/d/lyt/meter/d_lyt_meter.h b/include/d/lyt/meter/d_lyt_meter.h index 26f36e5a..a0ae18cc 100644 --- a/include/d/lyt/meter/d_lyt_meter.h +++ b/include/d/lyt/meter/d_lyt_meter.h @@ -74,6 +74,13 @@ public: POSITION_MAP = 1, }; + enum Mode_e { + MODE_MAP_INIT = 0, + MODE_MAP = 1, + MODE_PAUSE = 2, + MODE_NONE = 4, + }; + dLytMeterMain_c(); virtual ~dLytMeterMain_c() {} @@ -250,6 +257,18 @@ public: return mMain.mItemSelect.fn_800F0220(arg); } + bool itemSelectFn800EFDF0(bool b) const { + return mMain.mItemSelect.fn_800EFDF0(b); + } + + bool minusBtnFn800F7600() const { + return mMain.mMinusBtn.fn_800F7600(); + } + + bool dowsingFn800FE4B0() const { + return mMain.mDowsing.fn_800FE4B0(); + } + bool dowsingDemoRelated(s32 arg) { return mMain.mDowsing.fn_800FE3C0(arg); } @@ -484,6 +503,12 @@ public: } } + static void setPlusBtnCall(bool call) { + if (sInstance != nullptr) { + sInstance->mMain.mPlusBtn.setCall(call); + } + } + static void setSelectBtn(f32 angle, f32 length) { if (sInstance != nullptr) { dLytMeterMain_c *main = &sInstance->mMain; diff --git a/include/d/snd/d_snd_source_mgr.h b/include/d/snd/d_snd_source_mgr.h index f3f56952..c94b3404 100644 --- a/include/d/snd/d_snd_source_mgr.h +++ b/include/d/snd/d_snd_source_mgr.h @@ -66,6 +66,8 @@ public: void setMutedFromFader(bool muteFlag); void onEventStart(); void onEventEnd(); + void fn_803852B0(); + void fn_803852F0(); private: void calcEnemyObjVolume(); diff --git a/include/toBeSorted/d_beacon.h b/include/toBeSorted/d_beacon.h index b963d98a..a0e0d588 100644 --- a/include/toBeSorted/d_beacon.h +++ b/include/toBeSorted/d_beacon.h @@ -19,4 +19,6 @@ void setBeaconPositionChecked(const mVec3_c *position, u32 beaconIndex); /** Checks whether the current stage is ineligible for beacon placement */ bool doesStageForbidBeaconPlacement(); +const mVec3_c *getBeaconPosition(u32 beaconIndex); + #endif diff --git a/include/toBeSorted/event_manager.h b/include/toBeSorted/event_manager.h index d1c8bae8..1b89074f 100644 --- a/include/toBeSorted/event_manager.h +++ b/include/toBeSorted/event_manager.h @@ -52,6 +52,7 @@ public: // Something like isActorInEvent maybe? static bool FUN_800a0570(const dAcBase_c *actor); static bool FUN_800a0ba0(); + static bool fn_8009F990(); private: /* 0x000 */ u8 _000[0x084 - 0x000]; diff --git a/include/toBeSorted/raii_ptr.h b/include/toBeSorted/raii_ptr.h index 31d8ac21..22bab4d4 100644 --- a/include/toBeSorted/raii_ptr.h +++ b/include/toBeSorted/raii_ptr.h @@ -17,6 +17,13 @@ public: } } + void destruct() { + if (mPtr != nullptr) { + delete mPtr; + mPtr = nullptr; + } + } + void operator=(T *ptr) { mPtr = ptr; } |
