diff --git a/Memory.xml b/Memory.xml index c3191ddd0..19c9e1d9a 100644 --- a/Memory.xml +++ b/Memory.xml @@ -2378,7 +2378,7 @@ CHMOD - VERIFY! + It's good chmod diff --git a/library/modules/Creatures.cpp b/library/modules/Creatures.cpp index 7ef0f6a08..4aa12063d 100644 --- a/library/modules/Creatures.cpp +++ b/library/modules/Creatures.cpp @@ -257,56 +257,56 @@ bool Creatures::ReadCreature (const int32_t index, t_creature & furball) Process * p = d->owner; // read pointer from vector at position - uint32_t temp = d->p_cre->at (index); - furball.origin = temp; + uint32_t addr_cr = d->p_cre->at (index); + furball.origin = addr_cr; Private::t_offsets &offs = d->creatures; //read creature from memory if(d->Ft_basic) { // name - d->d->readName(furball.name,temp + offs.name_offset); + d->d->readName(furball.name,addr_cr + offs.name_offset); // basic stuff - p->readDWord (temp + offs.id_offset, furball.id); - p->read (temp + offs.pos_offset, 3 * sizeof (uint16_t), (uint8_t *) & (furball.x)); // xyz really - p->readDWord (temp + offs.race_offset, furball.race); - furball.civ = p->readDWord (temp + offs.civ_offset); - p->readByte (temp + offs.sex_offset, furball.sex); - p->readWord (temp + offs.caste_offset, furball.caste); - p->readDWord (temp + offs.flags1_offset, furball.flags1.whole); - p->readDWord (temp + offs.flags2_offset, furball.flags2.whole); + p->readDWord (addr_cr + offs.id_offset, furball.id); + p->read (addr_cr + offs.pos_offset, 3 * sizeof (uint16_t), (uint8_t *) & (furball.x)); // xyz really + p->readDWord (addr_cr + offs.race_offset, furball.race); + furball.civ = p->readDWord (addr_cr + offs.civ_offset); + p->readByte (addr_cr + offs.sex_offset, furball.sex); + p->readWord (addr_cr + offs.caste_offset, furball.caste); + p->readDWord (addr_cr + offs.flags1_offset, furball.flags1.whole); + p->readDWord (addr_cr + offs.flags2_offset, furball.flags2.whole); // custom profession - p->readSTLString(temp + offs.custom_profession_offset, furball.custom_profession, sizeof(furball.custom_profession)); + p->readSTLString(addr_cr + offs.custom_profession_offset, furball.custom_profession, sizeof(furball.custom_profession)); // profession - furball.profession = p->readByte (temp + offs.profession_offset); + furball.profession = p->readByte (addr_cr + offs.profession_offset); } if(d->Ft_advanced) { // happiness - p->readDWord (temp + offs.happiness_offset, furball.happiness); + p->readDWord (addr_cr + offs.happiness_offset, furball.happiness); // physical attributes - p->read(temp + offs.physical_offset, + p->read(addr_cr + offs.physical_offset, sizeof(t_attrib) * NUM_CREATURE_PHYSICAL_ATTRIBUTES, (uint8_t *)&furball.strength); // mood stuff - furball.mood = (int16_t) p->readWord (temp + offs.mood_offset); - furball.mood_skill = p->readWord (temp + offs.mood_skill_offset); - d->d->readName(furball.artifact_name, temp + offs.artifact_name_offset); + furball.mood = (int16_t) p->readWord (addr_cr + offs.mood_offset); + furball.mood_skill = p->readWord (addr_cr + offs.mood_skill_offset); + d->d->readName(furball.artifact_name, addr_cr + offs.artifact_name_offset); // labors - p->read (temp + offs.labors_offset, NUM_CREATURE_LABORS, furball.labors); + p->read (addr_cr + offs.labors_offset, NUM_CREATURE_LABORS, furball.labors); - furball.birth_year = p->readDWord (temp + offs.birth_year_offset ); - furball.birth_time = p->readDWord (temp + offs.birth_time_offset ); + furball.birth_year = p->readDWord (addr_cr + offs.birth_year_offset ); + furball.birth_time = p->readDWord (addr_cr + offs.birth_time_offset ); /* * p->readDWord(temp + offs.creature_pregnancy_offset, furball.pregnancy_timer); */ // appearance - DfVector app(p, temp + offs.appearance_vector_offset); + DfVector app(p, addr_cr + offs.appearance_vector_offset); furball.nbcolors = app.size(); if(furball.nbcolors>MAX_COLORS) furball.nbcolors = MAX_COLORS; @@ -331,7 +331,7 @@ bool Creatures::ReadCreature (const int32_t index, t_creature & furball) // enum soul pointer vector DfVector souls(p,temp + offs.creature_soul_vector_offset); */ - uint32_t soul = p->readDWord(temp + offs.default_soul_offset); + uint32_t soul = p->readDWord(addr_cr + offs.default_soul_offset); furball.has_default_soul = false; if(soul) @@ -365,7 +365,7 @@ bool Creatures::ReadCreature (const int32_t index, t_creature & furball) } if(d->Ft_jobs) { - furball.current_job.occupationPtr = p->readDWord (temp + offs.current_job_offset); + furball.current_job.occupationPtr = p->readDWord (addr_cr + offs.current_job_offset); if(furball.current_job.occupationPtr) { furball.current_job.active = true; @@ -377,6 +377,10 @@ bool Creatures::ReadCreature (const int32_t index, t_creature & furball) furball.current_job.active = false; } } + else + { + furball.current_job.active = false; + } return true; } diff --git a/tools/examples/creaturedump.cpp b/tools/examples/creaturedump.cpp index 24ebc667a..ad8ac7c8a 100644 --- a/tools/examples/creaturedump.cpp +++ b/tools/examples/creaturedump.cpp @@ -200,7 +200,13 @@ void printCreature(DFHack::Context * DF, const DFHack::t_creature & creature) if(creature.current_job.active) { - cout << ", current job: " << mem->getJob(creature.current_job.jobId); + try{ + cout << ", current job: " << mem->getJob(creature.current_job.jobId); + } + catch(exception & e) + { + cout << e.what() << endl; + } } cout << endl; diff --git a/tools/supported/prospector.cpp b/tools/supported/prospector.cpp index db53d5eba..0370dec7c 100644 --- a/tools/supported/prospector.cpp +++ b/tools/supported/prospector.cpp @@ -64,6 +64,7 @@ bool parseOptions(int argc, char **argv, bool &showHidden, bool &showPlants, return false; } } + return true; } template