diff --git a/library/DFHackAPI.cpp b/library/DFHackAPI.cpp
index 038c9198b..2e8056c21 100644
--- a/library/DFHackAPI.cpp
+++ b/library/DFHackAPI.cpp
@@ -627,7 +627,9 @@ uint32_t DFHackAPIImpl::InitReadCreatures()
int creatures = offset_descriptor->getAddress("creatures");
creature_pos_offset = offset_descriptor->getOffset("creature_position");
creature_type_offset = offset_descriptor->getOffset("creature_type");
- assert(creatures && creature_pos_offset && creature_type_offset);
+ creature_flags1_offset = offset_descriptor->getOffset("creature_flags1");
+ creature_flags2_offset = offset_descriptor->getOffset("creature_flags2");
+ assert(creatures && creature_pos_offset && creature_type_offset && creature_flags1_offset && creature_flags2_offset);
p_cre = new DfVector(dm->readVector(creatures, 4));
return p_cre->getSize();
}
@@ -642,6 +644,8 @@ bool DFHackAPIImpl::ReadCreature(const uint32_t &index, t_creature & furball)
//read creature from memory
Mread(temp + creature_pos_offset, 3 * sizeof(uint16_t), (uint8_t *) &(furball.x)); // xyz really
Mread(temp + creature_type_offset, sizeof(uint32_t), (uint8_t *) &furball.type);
+ Mread(temp + creature_flags1_offset, sizeof(uint32_t), (uint8_t *) &furball.flags1);
+ Mread(temp + creature_flags2_offset, sizeof(uint32_t), (uint8_t *) &furball.flags2);
return true;
}
diff --git a/library/DFHackAPI.h b/library/DFHackAPI.h
index 93e9faad5..3d42b5238 100644
--- a/library/DFHackAPI.h
+++ b/library/DFHackAPI.h
@@ -186,6 +186,8 @@ private:
uint32_t creature_pos_offset;
uint32_t creature_type_offset;
+ uint32_t creature_flags1_offset;
+ uint32_t creature_flags2_offset;
ProcessManager* pm;
Process* p;
diff --git a/library/DFTypes.h b/library/DFTypes.h
index 9220cb06b..0002cc584 100644
--- a/library/DFTypes.h
+++ b/library/DFTypes.h
@@ -135,6 +135,8 @@ struct t_creature
uint16_t y;
uint16_t z;
uint32_t type;
+ uint32_t flags1;
+ uint32_t flags2;
};
/*
diff --git a/output/Memory.xml b/output/Memory.xml
index 541930402..d09632a4a 100644
--- a/output/Memory.xml
+++ b/output/Memory.xml
@@ -380,6 +380,8 @@
0x4C
0x44
+ 0x90
+ 0x94
0x40
diff --git a/tools/creaturedump.cpp b/tools/creaturedump.cpp
index a910d71e3..dce12fd25 100644
--- a/tools/creaturedump.cpp
+++ b/tools/creaturedump.cpp
@@ -1,6 +1,7 @@
// Creature dump
#include
+#include
#include
#include
using namespace std;
@@ -8,6 +9,18 @@ using namespace std;
#include
#include
+template
+void print_bits ( T val, std::ostream& out )
+{
+ T n_bits = sizeof ( val ) * CHAR_BIT;
+
+ for ( unsigned i = 0; i < n_bits; ++i ) {
+ out<< !!( val & 1 ) << " ";
+ val >>= 1;
+ }
+}
+
+
int main (void)
{
vector creaturestypes;
@@ -33,6 +46,11 @@ int main (void)
t_creature temp;
DF.ReadCreature(i, temp);
cout << "creature type " << creaturestypes[temp.type].id << ", position:" << temp.x << " " << temp.y << " "<< temp.z << endl;
+ cout << "flags1: ";
+ print_bits(temp.flags1, cout);
+ cout << endl << "flags2: ";
+ print_bits(temp.flags2, cout);
+ cout << endl << endl;
}
DF.FinishReadCreatures();
delete pDF;