diff --git a/include/d/d_event_data.h b/include/d/d_event_data.h index f42e16b7a7..ee9b868af4 100644 --- a/include/d/d_event_data.h +++ b/include/d/d_event_data.h @@ -136,6 +136,17 @@ public: } msgs; }; +#if TARGET_PC + struct StaffWorkPtrHolder { + StaffWork* m_ptr = nullptr; + + StaffWork* operator->() const { return m_ptr; } + + void createPtr(); + void deletePtr(); + }; +#endif + struct MessageData { BE(s16) unk; }; diff --git a/src/d/d_event_data.cpp b/src/d/d_event_data.cpp index 3b099e891c..a339c835c7 100644 --- a/src/d/d_event_data.cpp +++ b/src/d/d_event_data.cpp @@ -318,6 +318,17 @@ static int dEvDt_Next_Stage(int i_staffId, int i_wipe) { return 1; } +#if TARGET_PC +void dEvDtStaff_c::StaffWorkPtrHolder::createPtr() { + if (m_ptr == nullptr) + m_ptr = (StaffWork*)JKRAllocFromHeap(mDoExt_getGameHeap(), sizeof(StaffWork), 8); +} +void dEvDtStaff_c::StaffWorkPtrHolder::deletePtr() { + delete m_ptr; + m_ptr = nullptr; +} +#endif + BOOL dEvDtFlag_c::flagCheck(int flag) { if (flagMaxCheck(flag)) { return FALSE; @@ -527,7 +538,12 @@ void dEvDtStaff_c::specialProcLight() { void dEvDtStaff_c::specialProcMessage() { MessageData* data = (MessageData*)&mData; +#if TARGET_PC + StaffWorkPtrHolder& wk = *(StaffWorkPtrHolder*)&mWork; + wk.createPtr(); +#else StaffWork* wk = (StaffWork*)&mWork; +#endif int staffId = dComIfGp_evmng_getMyStaffId("MESSAGE", NULL, 0); if (staffId == -1) { diff --git a/src/d/d_menu_fmap.cpp b/src/d/d_menu_fmap.cpp index 58c839d666..cd370a56d7 100644 --- a/src/d/d_menu_fmap.cpp +++ b/src/d/d_menu_fmap.cpp @@ -1,27 +1,28 @@ #include "d/dolzel.h" // IWYU pragma: keep -#include "d/d_menu_fmap.h" -#include "SSystem/SComponent/c_math.h" +#include +#include #include "JSystem/JKernel/JKRAramArchive.h" #include "JSystem/JKernel/JKRExpHeap.h" #include "JSystem/JKernel/JKRMemArchive.h" -#include -#include -#include "f_op/f_op_msg_mng.h" +#include "SSystem/SComponent/c_math.h" +#include "d/actor/d_a_midna.h" +#include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_lib.h" +#include "d/d_menu_fmap.h" #include "d/d_menu_fmap2D.h" #include "d/d_menu_fmap_map.h" #include "d/d_menu_window.h" -#include "d/d_meter_HIO.h" -#include "d/d_meter_map.h" #include "d/d_meter2_draw.h" #include "d/d_meter2_info.h" +#include "d/d_meter_HIO.h" +#include "d/d_meter_map.h" #include "d/d_msg_object.h" #include "d/d_msg_scrn_explain.h" #include "d/d_stage.h" -#include "d/actor/d_a_player.h" -#include "d/actor/d_a_midna.h" +#include "dusk/memory.h" +#include "f_op/f_op_msg_mng.h" static dMf_HIO_c g_fmHIO; @@ -189,7 +190,7 @@ dMenu_Fmap_c::dMenu_Fmap_c(JKRExpHeap* i_heap, STControl* i_stick, CSTControl* i field_0x148[i] = 0.0f; } - mpTalkHeap = JKRCreateExpHeap(0x32000, mpHeap, false); + mpTalkHeap = JKRCreateExpHeap(HEAP_SIZE(0x32000, 0x40000), mpHeap, false); JUT_ASSERT(359, mpTalkHeap != NULL); field_0x200 = 0; mIsWarpMap = false;