diff --git a/src/d/actor/d_a_obj_life_container.cpp b/src/d/actor/d_a_obj_life_container.cpp index 295e5bd7ae..a4430d5792 100644 --- a/src/d/actor/d_a_obj_life_container.cpp +++ b/src/d/actor/d_a_obj_life_container.cpp @@ -499,7 +499,16 @@ int daObjLife_c::initActionOrderGetDemo() { int daObjLife_c::actionOrderGetDemo() { if (eventInfo.checkCommandItem()) { setStatus(STATUS_GET_DEMO_e); - + +#if TARGET_PC + // Set the tracker flag for rando now. The flag doesn't normally + // get set until after execItemGive runs + if (randomizer_IsActive()) { + g_randomizerState.mTrackerTempItemFlag.flag = getSaveBitNo(); + g_randomizerState.mTrackerTempItemFlag.stage = getStageSaveId(getStageID()); + } +#endif + if (mItemId != fpcM_ERROR_PROCESS_ID_e) { dComIfGp_event_setItemPartnerId(mItemId); } diff --git a/src/dusk/randomizer/game/randomizer_context.hpp b/src/dusk/randomizer/game/randomizer_context.hpp index ee806d82a2..ee74d1d8c7 100644 --- a/src/dusk/randomizer/game/randomizer_context.hpp +++ b/src/dusk/randomizer/game/randomizer_context.hpp @@ -191,6 +191,10 @@ public: int stage{-1}; int flag{-1}; } mTrackerTempSwitchFlag; + struct { + int stage{-1}; + int flag{-1}; + } mTrackerTempItemFlag; }; extern RandomizerState g_randomizerState; diff --git a/src/dusk/randomizer/game/tools.cpp b/src/dusk/randomizer/game/tools.cpp index fbe40ede60..7e71dcc7f9 100644 --- a/src/dusk/randomizer/game/tools.cpp +++ b/src/dusk/randomizer/game/tools.cpp @@ -724,6 +724,11 @@ bool tracker_isStageSwitch(int stage, int flag) { } bool tracker_isStageItem(int stage, int flag) { + if (g_randomizerState.mTrackerTempItemFlag.flag == flag && + g_randomizerState.mTrackerTempItemFlag.stage == stage) { + return true; + } + if (dComIfGp_getStageStagInfo() && stage == dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo())) { return dComIfGs_isItem(flag, -1); } else {