From 5b6f2f6e9160bffbcfff9e0ecb0ebac03f59c10c Mon Sep 17 00:00:00 2001 From: gymnast86 Date: Sat, 6 Jun 2026 23:39:18 -0700 Subject: [PATCH] fix some first item bits accidentally getting unset --- include/d/d_item.h | 3 +++ src/d/actor/d_a_obj_item.cpp | 3 ++- src/d/d_item.cpp | 19 +++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) 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;