summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPheenoh <pheenoh@gmail.com>2021-01-03 03:35:54 -0500
committerPheenoh <pheenoh@gmail.com>2021-01-03 03:35:54 -0500
commit47c40cce41c4b44dacaaeb5589329bc2b015ee9e (patch)
treeb4e7664966e354faa9a9684e59619aff339f46bf
parent5abaebc40df02b65f791a16389a0c82590dbbda6 (diff)
dSv_info_c::isItem OK
-rw-r--r--include/d/d_save/d_save/d_save.h2
-rw-r--r--src/d/d_save/d_save.cpp23
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 f829b477b4..8701aa2aba 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 26e94b2c82..6a8f7cb801 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) {