diff --git a/examples/creaturedump.cpp b/examples/creaturedump.cpp
index 7804e1b14..c049d9635 100644
--- a/examples/creaturedump.cpp
+++ b/examples/creaturedump.cpp
@@ -150,7 +150,7 @@ likeType printLike(DFHack::t_like like, const matGlosses & mat,const vector< vec
void printCreature(DFHack::API & DF, const DFHack::t_creature & creature)
{
- if(string(creaturestypes[creature.type].id) == "DWARF")
+ if(string(creaturestypes[creature.type].id) == "DWARF")
{
cout << "address: " << creature.origin << " creature type: " << creaturestypes[creature.type].id << ", position: " << creature.x << "x " << creature.y << "y "<< creature.z << "z" << endl;
bool addendl = false;
@@ -210,6 +210,9 @@ void printCreature(DFHack::API & DF, const DFHack::t_creature & creature)
{
cout << ", squad_leader_id: " << creature.squad_leader_id;
}
+ if(creature.mood != -1){
+ cout << ", mood: " << creature.mood << " ";
+ }
cout << ", sex: ";
if(creature.sex == 0)
{
@@ -289,8 +292,13 @@ void printCreature(DFHack::API & DF, const DFHack::t_creature & creature)
{
cout << "from the underworld, ";
}
- cout << endl << endl;
+ cout << endl;
+ if(creature.flags1.bits.had_mood && (creature.mood == -1 || creature.mood == 8 ) ){
+ string artifact_name = DF.TranslateName(creature.artifact_name,englishWords,foreignWords,false);
+ cout << "artifact: " << artifact_name << endl;
+ }
}
+ cout << endl;
}
@@ -337,12 +345,13 @@ int main (void)
{
DFHack::t_creature temp;
DF.ReadCreature(i,temp);
+ cout << "index " << i << " ";
printCreature(DF,temp);
}
uint32_t currentIdx;
DFHack::t_creature currentCreature;
DF.getCurrentCursorCreature(currentIdx);
- cout << "current creature" << endl;
+ cout << "current creature at index " << currentIdx << endl;
DF.ReadCreature(currentIdx, currentCreature);
printCreature(DF,currentCreature);
diff --git a/library/DFHackAPI.cpp b/library/DFHackAPI.cpp
index 2ae2e2c43..5eacbfaf2 100644
--- a/library/DFHackAPI.cpp
+++ b/library/DFHackAPI.cpp
@@ -1247,7 +1247,7 @@ bool API::ReadCreature (const int32_t index, t_creature & furball)
g_pProcess->read(temp2,sizeof(t_like),(uint8_t *) &furball.likes[i]);
}
- g_pProcess->readWord (temp + d->creature_mood_offset, furball.mood);
+ furball.mood = (int16_t) g_pProcess->readWord (temp + d->creature_mood_offset);
g_pProcess->readDWord (temp + d->creature_happiness_offset, furball.happiness);
diff --git a/library/DFTypes.h b/library/DFTypes.h
index d478bcb4a..bc369bb3e 100644
--- a/library/DFTypes.h
+++ b/library/DFTypes.h
@@ -545,7 +545,7 @@ struct t_creature
uint8_t numLikes;
t_like likes[32];
t_job current_job;
- uint16_t mood;
+ int16_t mood;
uint32_t happiness;
uint32_t id;
uint32_t agility;
diff --git a/output/Memory.xml b/output/Memory.xml
index 34999b2f0..efc07d3ef 100644
--- a/output/Memory.xml
+++ b/output/Memory.xml
@@ -787,6 +787,12 @@