#include #include #include #include using namespace std; #include #include #include #include #include #include #include #include #include struct matGlosses { vector plantMat; vector woodMat; vector stoneMat; vector metalMat; vector creatureMat; }; vector creaturestypes; matGlosses mat; vector< vector > itemTypes; DFHack::memory_info *mem; vector< vector > englishWords; vector< vector > foreignWords; int main (int numargs, char ** args) { DFHack::API DF("Memory.xml"); DFHack::Process * p; try { DF.Attach(); } catch (exception& e) { cerr << e.what() << endl; #ifndef LINUX_BUILD cin.ignore(); #endif return 1; } p = DF.getProcess(); string check = ""; if(numargs == 2) check = args[1]; DFHack::Creatures * Creatures = DF.getCreatures(); DFHack::Materials * Materials = DF.getMaterials(); DFHack::Translation * Tran = DF.getTranslation(); uint32_t numCreatures; if(!Creatures->Start(numCreatures)) { cerr << "Can't get creatures" << endl; #ifndef LINUX_BUILD cin.ignore(); #endif return 1; } if(!numCreatures) { cerr << "No creatures to print" << endl; #ifndef LINUX_BUILD cin.ignore(); #endif return 1; } mem = DF.getMemoryInfo(); // get stone matgloss mapping if(!Materials->ReadCreatureTypesEx(creaturestypes)) { cerr << "Can't get the creature types." << endl; return 1; } if(!Tran->Start()) { cerr << "Can't get name tables" << endl; return 1; } vector addrs; //DF.InitViewAndCursor(); for(uint32_t i = 0; i < numCreatures; i++) { DFHack::t_creature temp; unsigned int current_job; unsigned int mat_start; unsigned int mat_end; unsigned int j; Creatures->ReadCreature(i,temp); if(temp.mood) { cout << "address: " << hex << temp.origin << dec << " creature type: " << creaturestypes[temp.race].rawname << endl; current_job = p->readDWord(temp.origin + 0x390); mat_start = p->readDWord(current_job + 0xa4 + 4*3); mat_end = p->readDWord(current_job + 0xa4 + 4*4); } } Creatures->Finish(); DF.Detach(); #ifndef LINUX_BUILD cout << "Done. Press any key to continue" << endl; cin.ignore(); #endif return 0; }