@ -208,6 +208,7 @@ void usage(int argc, const char * argv[])
< < " * diplomat: all diplomats " < < endl
< < " * FB: all forgotten beasts " < < endl
< < " * female: all female creatures " < < endl
< < " * ghost: all ghosts " < < endl
< < " * male: all male creatures " < < endl
< < " * merchants: all merchants (including pack animals) " < < endl
< < " * neuter: all neuter creatuers " < < endl
@ -238,7 +239,8 @@ void usage(int argc, const char * argv[])
< < " -rh : Remove hauler labors (stone hauling, etc.) from creature " < < endl
// Disabling mood doesn't work as intented
< < " --setmood <n> : Set mood to n (-1 = no mood, max=4, buggy!) " < < endl
< < " --kill : Kill creature(s) (may need to be called multiple times) " < < endl
< < " --kill : Kill creature(s) (leaves behind corpses) " < < endl
< < " --erase : Remove creature(s) from game without killing " < < endl
< < " --tame : Tames animals, recruits intelligent creatures. " < < endl
< < " --slaugher : Mark a creature for slaughter, even sentients " < < endl
< < " --butcher : Same as --slaugher " < < endl
@ -520,6 +522,7 @@ void printCreature(DFHack::Context * DF, const DFHack::t_creature & creature, in
{
DFHack : : t_creaturflags1 f1 = creature . flags1 ;
DFHack : : t_creaturflags2 f2 = creature . flags2 ;
DFHack : : t_creaturflags3 f3 = creature . flags3 ;
if ( f1 . bits . dead ) { cout < < " Flag: dead " < < endl ; }
if ( f1 . bits . had_mood ) { cout < < toCaps ( " Flag: had_mood " ) < < endl ; }
@ -584,6 +587,10 @@ void printCreature(DFHack::Context * DF, const DFHack::t_creature & creature, in
if ( f2 . bits . breathing_problem ) { cout < < toCaps ( " Flag: breathing_problem " ) < < endl ; }
if ( f2 . bits . roaming_wilderness_population_source ) { cout < < toCaps ( " Flag: roaming_wilderness_population_source " ) < < endl ; }
if ( f2 . bits . roaming_wilderness_population_source_not_a_map_feature ) { cout < < toCaps ( " Flag: roaming_wilderness_population_source_not_a_map_feature " ) < < endl ; }
if ( f3 . bits . announce_titan ) { cout < < toCaps ( " Flag: announce_titan " ) < < endl ; }
if ( f3 . bits . scuttle ) { cout < < toCaps ( " Flag: scuttle " ) < < endl ; }
if ( f3 . bits . ghostly ) { cout < < toCaps ( " Flag: ghostly " ) < < endl ; }
}
else
{
@ -601,6 +608,9 @@ void printCreature(DFHack::Context * DF, const DFHack::t_creature & creature, in
if ( creature . flags2 . bits . slaughter ) { cout < < " Flag: Marked for slaughter " < < endl ; }
if ( creature . flags2 . bits . underworld ) { cout < < " Flag: From the underworld " < < endl ; }
/* FLAGS 3 */
if ( creature . flags3 . bits . ghostly ) { cout < < " Flag: Ghost " < < endl ; }
if ( creature . flags1 . bits . had_mood & & ( creature . mood = = - 1 | | creature . mood = = 8 ) )
{
string artifact_name = Tran - > TranslateName ( creature . artifact_name , false ) ;
@ -628,6 +638,7 @@ public:
bool find_nonicks ;
bool find_nicks ;
bool forgotten_beast ;
bool ghost ;
bool merchant ;
bool pregnant ;
bool tame ;
@ -654,6 +665,7 @@ public:
find_nonicks = false ;
find_nicks = false ;
forgotten_beast = false ;
ghost = false ;
merchant = false ;
pregnant = false ;
sex = SEX_ANY ;
@ -696,6 +708,8 @@ public:
diplomat = true ;
else if ( type = = " Fb " | | type = = " Beast " )
forgotten_beast = true ;
else if ( type = = " Ghost " )
ghost = true ;
else if ( type = = " Merchant " )
merchant = true ;
else if ( type = = " Pregnant " )
@ -735,6 +749,7 @@ public:
const DFHack : : t_creaturflags1 & f1 = creature . flags1 ;
const DFHack : : t_creaturflags2 & f2 = creature . flags2 ;
const DFHack : : t_creaturflags3 & f3 = creature . flags3 ;
if ( f1 . bits . dead & & ! showdead )
return false ;
@ -758,6 +773,8 @@ public:
return false ;
if ( forgotten_beast & & ! f2 . bits . visitor_uninvited )
return false ;
if ( ghost & & ! f3 . bits . ghostly )
return false ;
if ( merchant & & ! f1 . bits . merchant )
return false ;
if ( pregnant & & creature . pregnancy_timer = = 0 )
@ -790,6 +807,7 @@ int main (int argc, const char* argv[])
bool remove_military_skills = false ;
bool remove_labors = false ;
bool kill_creature = false ;
bool erase_creature = false ;
bool revive_creature = false ;
bool make_hauler = false ;
bool remove_hauler = false ;
@ -926,6 +944,12 @@ int main (int argc, const char* argv[])
showallflags = true ;
showdead = true ;
}
else if ( arg_cur = = " --erase " )
{
erase_creature = true ;
showallflags = true ;
showdead = true ;
}
else if ( arg_cur = = " --revive " )
{
revive_creature = true ;
@ -1088,7 +1112,7 @@ int main (int argc, const char* argv[])
remove_skills | | remove_civil_skills | | remove_military_skills
| | remove_labors | | add_labor | | remove_labor
| | make_hauler | | remove_hauler
| | kill_creature
| | kill_creature | | erase_creature
| | revive_creature
| | set_happiness
| | set_mood
@ -1119,6 +1143,27 @@ int main (int argc, const char* argv[])
if ( creature . has_default_soul )
{
if ( kill_creature & & ! creature . flags1 . bits . dead )
{
DFHack : : t_creaturflags1 f1 = creature . flags1 ;
DFHack : : t_creaturflags2 f2 = creature . flags2 ;
DFHack : : t_creaturflags3 f3 = creature . flags3 ;
f3 . bits . scuttle = true ;
cout < < " Writing flags... " < < endl ;
if ( ! Creatures - > WriteFlags ( creature_idx , f1 . whole ,
f2 . whole , f3 . whole ) )
{
cout < < " Error writing creature flags! " < < endl ;
}
// We want the flags to be shown after our
// modification, but they are not read back
creature . flags1 = f1 ;
creature . flags2 = f2 ;
creature . flags3 = f3 ;
}
if ( erase_creature & & ! creature . flags1 . bits . dead )
{
/*
[ quote author = Eldrick Tobin link = topic = 58809. msg2178545 # msg2178545 date = 1302638055 ]
@ -1185,6 +1230,7 @@ int main (int argc, const char* argv[])
creature . flags2 = f2 ;
}
if ( revive_creature & & creature . flags1 . bits . dead )
{
DFHack : : t_creaturflags1 f1 = creature . flags1 ;