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;