From 47c40cce41c4b44dacaaeb5589329bc2b015ee9e Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Sun, 3 Jan 2021 03:35:54 -0500 Subject: [PATCH] dSv_info_c::isItem OK --- include/d/d_save/d_save/d_save.h | 2 ++ src/d/d_save/d_save.cpp | 23 ++++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/include/d/d_save/d_save/d_save.h b/include/d/d_save/d_save/d_save.h index f829b477b4c..8701aa2abab 100644 --- a/include/d/d_save/d_save/d_save.h +++ b/include/d/d_save/d_save/d_save.h @@ -722,6 +722,7 @@ public: dSv_memory_c(void); // the assembly for this is in d_com_inf_game.s void init(void); dSv_memBit_c& getTempFlags() { return temp_flags; } + const dSv_memBit_c& getTempFlagsConst() const { return temp_flags; } private: dSv_memBit_c temp_flags; @@ -803,6 +804,7 @@ public: dSv_zone_c(void); // the assembly for this is in d_com_inf_game.s void init(int); dSv_zoneBit_c& getZoneBit() { return zone_bit; } + const dSv_zoneBit_c& getZoneBitConst() const { return zone_bit; } dSv_zoneActor_c& getZoneActor() { return zone_actor; } const dSv_zoneActor_c& getZoneActorConst() const { return zone_actor; } diff --git a/src/d/d_save/d_save.cpp b/src/d/d_save/d_save.cpp index 26e94b2c826..6a8f7cb8011 100644 --- a/src/d/d_save/d_save.cpp +++ b/src/d/d_save/d_save.cpp @@ -1429,9 +1429,26 @@ void dSv_info_c::onItem(int i_no, int i_roomNo) { } } -asm BOOL dSv_info_c::isItem(int i_no, int i_roomNo) const { - nofralloc -#include "d/d_save/d_save/asm/func_80035590.s" +BOOL dSv_info_c::isItem(int i_no, int i_roomNo) const { + int value; + if ((i_no == -1) || (i_no == 0xFF)) { + return 0; + } + + if (i_no < 0x80) { + value = this->dungeon_bit.isItem(i_no); + } else if (i_no < 0xA0) { + value = this->memory.getTempFlagsConst().isItem(i_no - 0x80); + } else { + int zoneNo = dStage_roomControl_c_NS_getZoneNo(i_roomNo, i_no); + if (i_no < 0xC0) { + value = this->zones[zoneNo].getZoneBitConst().isItem(i_no - 0xA0); + } else { + value = this->zones[zoneNo].getZoneBitConst().isOneItem(i_no - 0xC0); + } + } + + return value; } void dSv_info_c::onActor(int i_id, int i_roomNo) {