int main (int numargs, char ** args) { DFHack::World * World; DFHack::ContextManager DFMgr("Memory.xml"); DFHack::Context* DF; try { DF = DFMgr.getSingleContext(); DF->Attach(); } catch (exception& e) { cerr << e.what() << endl; #ifndef LINUX_BUILD cin.ignore(); #endif return 1; } string check = ""; if(numargs == 2) check = args[1]; Creatures = DF->getCreatures(); Materials = DF->getMaterials(); World = DF->getWorld(); current_year = World->ReadCurrentYear(); current_tick = World->ReadCurrentTick(); 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(); Materials->ReadInorganicMaterials(); Materials->ReadOrganicMaterials(); Materials->ReadWoodMaterials(); Materials->ReadPlantMaterials(); Materials->ReadCreatureTypes(); Materials->ReadCreatureTypesEx(); Materials->ReadDescriptorColors(); if(!Tran->Start()) { cerr << "Can't get name tables" << endl; return 1; } vector<uint32_t> addrs; //DF.InitViewAndCursor(); for(uint32_t i = 0; i < numCreatures; i++) { printf("%d/%d\n", i, numCreatures); DFHack::t_creature temp; Creatures->ReadCreature(i,temp); if(check.empty() || string(Materials->raceEx[temp.race].rawname) == check) { cout << "index " << i << " "; printCreature(DF,temp); addrs.push_back(temp.origin); } printf("!\n"); } if(addrs.size() <= 10) { interleave_hex(DF,addrs,200); } /* uint32_t currentIdx; DFHack::t_creature currentCreature; DF.getCurrentCursorCreature(currentIdx); cout << "current creature at index " << currentIdx << endl; DF.ReadCreature(currentIdx, currentCreature); printCreature(DF,currentCreature); */ Creatures->Finish(); DF->Detach(); #ifndef LINUX_BUILD cout << "Done. Press any key to continue" << endl; cin.ignore(); #endif return 0; }
int main (void) { bool temporary_terminal = TemporaryTerminal(); uint32_t x_max,y_max,z_max; DFHack::designations40d designations; DFHack::ContextManager DFMgr("Memory.xml"); DFHack::Context *DF; try { DF = DFMgr.getSingleContext(); DF->Attach(); } catch (exception& e) { cerr << e.what() << endl; if(temporary_terminal) cin.ignore(); return 1; } DFHack::Maps *Maps =DF->getMaps(); DFHack::World *World =DF->getWorld(); // walk the map, save the hide bits, reveal. cout << "Pausing..." << endl; // horrible hack to make sure the pause is really set // preblem here is that we could be 'arriving' at the wrong time and DF could be in the middle of a frame. // that could mean that revealing, even with suspending DF's thread, would mean unleashing hell *in the same frame* // this here hack sets the pause state, resumes DF, waits a second for it to enter the pause (I know, BS value.) and suspends. World->SetPauseState(true); DF->Resume(); waitmsec(1000); DF->Suspend(); // init the map if(!Maps->Start()) { cerr << "Can't init map." << endl; if(temporary_terminal) cin.ignore(); return 1; } cout << "Revealing, please wait..." << endl; Maps->getSize(x_max,y_max,z_max); vector <hideblock> hidesaved; for(uint32_t x = 0; x< x_max;x++) { for(uint32_t y = 0; y< y_max;y++) { for(uint32_t z = 0; z< z_max;z++) { if(Maps->isValidBlock(x,y,z)) { hideblock hb; hb.x = x; hb.y = y; hb.z = z; // read block designations Maps->ReadDesignations(x,y,z, &designations); // change the hidden flag to 0 for (uint32_t i = 0; i < 16;i++) for (uint32_t j = 0; j < 16;j++) { hb.hiddens[i][j] = designations[i][j].bits.hidden; designations[i][j].bits.hidden = 0; } hidesaved.push_back(hb); // write the designations back Maps->WriteDesignations(x,y,z, &designations); } } } } // FIXME: force game pause here! DF->Detach(); cout << "Map revealed. The game has been paused for you." << endl; cout << "Unpausing can unleash the forces of hell!" << endl << endl; cout << "Press any key to unreveal." << endl; cout << "Close to keep the map revealed !!FOREVER!!" << endl; cin.ignore(); cout << "Unrevealing... please wait." << endl; // FIXME: do some consistency checks here! DF->Attach(); Maps = DF->getMaps(); Maps->Start(); for(size_t i = 0; i < hidesaved.size();i++) { hideblock & hb = hidesaved[i]; Maps->ReadDesignations(hb.x,hb.y,hb.z, &designations); for (uint32_t i = 0; i < 16;i++) for (uint32_t j = 0; j < 16;j++) { designations[i][j].bits.hidden = hb.hiddens[i][j]; } Maps->WriteDesignations(hb.x,hb.y,hb.z, &designations); } if(temporary_terminal) { cout << "Done. Press any key to continue" << endl; cin.ignore(); } return 0; }
int main (int argc, char** argv) { string command = ""; bool quiet = false; bool cmdarg = false; for(int i = 1; i < argc; i++) { string test = argv[i]; if(test == "-q") { quiet = true; } else { command = test; cmdarg = true; } } DFHack::ContextManager DFMgr("Memory.xml"); DFHack::Context *DF = DFMgr.getSingleContext(); try { DF->Attach(); } catch (std::exception& e) { std::cerr << e.what() << std::endl; #ifndef LINUX_BUILD cin.ignore(); #endif return 1; } World *W = DF->getWorld(); W->Start(); bool end = false; while(!end) { WeatherType current = (WeatherType) W->ReadCurrentWeather(); DF->Resume(); printWeather(current); if (command == "") getline(cin, command); // only read from stdin if command hasn't been passed on the console DF->Suspend(); if(command == "c") { W->SetCurrentWeather(CLEAR); } else if(command == "r") { W->SetCurrentWeather(RAINING); } else if(command == "s") { W->SetCurrentWeather(SNOWING); } else if(command == "q") { end = true; } command = ""; if(cmdarg) end = true; // exit the loop when a cmd line arg has been passed. } #ifndef LINUX_BUILD if (!quiet) { std::cout << "Done. Press any key to continue" << std::endl; cin.ignore(); } #endif DF->Resume(); DF->Detach(); return 0; }