diff --git a/include/d/d_item.h b/include/d/d_item.h index 23787a7340..533908bc6c 100644 --- a/include/d/d_item.h +++ b/include/d/d_item.h @@ -526,6 +526,9 @@ int checkItemGet(u8, int); BOOL isHeart(u8 item_no); int isBomb(u8); int isArrow(u8); +#if TARGET_PC +int isRupee(u8); +#endif int addBombCount(u8, u8); BOOL isBottleItem(u8 item_no); u8 check_itemno(int i_itemNo); diff --git a/src/d/actor/d_a_obj_item.cpp b/src/d/actor/d_a_obj_item.cpp index 73c134e559..ae8d2263ea 100644 --- a/src/d/actor/d_a_obj_item.cpp +++ b/src/d/actor/d_a_obj_item.cpp @@ -613,7 +613,8 @@ void daItem_c::procWaitGetDemoEvent() { procInitSimpleGetDemo(); itemGet(); - if (!haveItem) { + // Don't potentially unset item bits in rando unless they're rupees + if (!haveItem IF_DUSK(&& (!randomizer_IsActive() || isRupee(m_itemNo)))) { dComIfGs_offItemFirstBit(m_itemNo); } } else { diff --git a/src/d/d_item.cpp b/src/d/d_item.cpp index bdc70ddd21..ab0ea890e9 100644 --- a/src/d/d_item.cpp +++ b/src/d/d_item.cpp @@ -3355,6 +3355,25 @@ BOOL isHeart(u8 i_itemNo) { return is_heart; } +#if TARGET_PC +BOOL isRupee(u8 i_itemNo) { + switch (i_itemNo) { + case dItemNo_GREEN_RUPEE_e: + case dItemNo_BLUE_RUPEE_e: + case dItemNo_YELLOW_RUPEE_e: + case dItemNo_RED_RUPEE_e: + case dItemNo_PURPLE_RUPEE_e: + case dItemNo_ORANGE_RUPEE_e: + case dItemNo_SILVER_RUPEE_e: + return true; + default: + break; + } + + return false; +} +#endif + BOOL isInsect(u8 i_itemNo) { BOOL is_insect = false;