diff --git a/tools/playground/skillmodify.cpp b/tools/playground/skillmodify.cpp index 1596d1b11..21ded8a57 100644 --- a/tools/playground/skillmodify.cpp +++ b/tools/playground/skillmodify.cpp @@ -23,6 +23,7 @@ * - Hide skills with level 0 and 0 experience points * Done: + * - Show creature type (again) * - Add switch -1 to only display one line for every creature. Good for an overview. * - Display current job (has been there all the time, but not shown in Windows due to missing memory offsets) * - Remove magic numbers @@ -176,13 +177,26 @@ DFHack::Creatures * Creatures = NULL; std::string toCaps(std::string s) { const int length = s.length(); + bool caps=true; if (length == 0) { return s; } - s[0] = std::toupper(s[0]); - for(int i=1; i!=length ; ++i) + for(int i=0; i!=length ; ++i) { - s[i] = std::tolower(s[i]); + if (caps) + { + s[i] = std::toupper(s[i]); + caps = false; + } + else if (s[i] == '_' || s[i] == ' ') + { + s[i] = ' '; + caps = true; + } + else + { + s[i] = std::tolower(s[i]); + } } return s; } @@ -213,6 +227,12 @@ void printCreature(DFHack::Context * DF, const DFHack::t_creature & creature, in DFHack::Translation *Tran = DF->getTranslation(); DFHack::VersionInfo *mem = DF->getMemoryInfo(); + string type="(no type)"; + if (Materials->raceEx[creature.race].rawname[0]) + { + type = toCaps(Materials->raceEx[creature.race].rawname); + } + string name="(no name)"; if(creature.name.nickname[0]) { @@ -255,8 +275,9 @@ void printCreature(DFHack::Context * DF, const DFHack::t_creature & creature, in if (showfirstlineonly) { printf("%3d", index); + printf(" %-17s", type.c_str()); printf(" %-32s", name.c_str()); - printf(" %-15s", toCaps(profession).c_str()); + printf(" %-16s", toCaps(profession).c_str()); printf(" %-30s", job.c_str()); printf(" %d", creature.happiness); @@ -265,6 +286,7 @@ void printCreature(DFHack::Context * DF, const DFHack::t_creature & creature, in else { printf("ID: %d", index); + printf(", %s", type.c_str()); printf(", %s", name.c_str()); printf(", %s", toCaps(profession).c_str()); printf(", Job: %s", job.c_str()); @@ -344,8 +366,8 @@ void printCreature(DFHack::Context * DF, const DFHack::t_creature & creature, in if(creature.flags1.bits.skeleton) { cout << "Flag: Skeletal" << endl; } if(creature.flags1.bits.zombie) { cout << "Flag: Zombie" << endl; } if(creature.flags1.bits.tame) { cout << "Flag: Tame" << endl; } - if(creature.flags1.bits.royal_guard){ cout << "Flag: Royal_guard" << endl; } - if(creature.flags1.bits.fortress_guard){cout<<"Flag: Fortress_guard" << endl; } + if(creature.flags1.bits.royal_guard){ cout << "Flag: Royal guard" << endl; } + if(creature.flags1.bits.fortress_guard){cout<<"Flag: Fortress guard" << endl; } /* FLAGS 2 */ if(creature.flags2.bits.killed) { cout << "Flag: Killed by kill function" << endl; } if(creature.flags2.bits.resident) { cout << "Flag: Resident" << endl; } @@ -604,8 +626,8 @@ int main (int argc, const char* argv[]) { if (showfirstlineonly) { - printf("ID Name/nickname Job title Current job Happiness\n"); - printf("--- -------------------------------- --------------- ------------------------------ ---------\n"); + printf("ID Type Name/nickname Job title Current job Happiness\n"); + printf("--- ----------------- -------------------------------- ---------------- ------------------------------ ---------\n"); } vector addrs;