From 85240c78b5c98d5319b51d099de8eab1462a0e99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 28 Aug 2010 22:07:31 +0200 Subject: [PATCH] Fix probe utility, Position module --- library/modules/Position.cpp | 46 +++++++++++++++++++----------------- tools/supported/probe.cpp | 35 +++++++++++++++------------ 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/library/modules/Position.cpp b/library/modules/Position.cpp index f8c136079..1e5d48232 100644 --- a/library/modules/Position.cpp +++ b/library/modules/Position.cpp @@ -59,31 +59,33 @@ Position::Position(DFContextShared * d_) d->owner = d_->p; d->Inited = true; d->StartedHotkeys = d->Started = d->StartedScreen = false; - VersionInfo * mem; + OffsetGroup * OG_Position; + VersionInfo * mem = d->d->offset_descriptor; try { - mem = d->d->offset_descriptor; - d->window_x_offset = mem->getAddress ("window_x"); - d->window_y_offset = mem->getAddress ("window_y"); - d->window_z_offset = mem->getAddress ("window_z"); - d->cursor_xyz_offset = mem->getAddress ("cursor_xyz"); - d->window_dims_offset = mem->getAddress ("window_dims"); + OG_Position = mem->getGroup("Position"); + d->window_x_offset = OG_Position->getAddress ("window_x"); + d->window_y_offset = OG_Position->getAddress ("window_y"); + d->window_z_offset = OG_Position->getAddress ("window_z"); + d->cursor_xyz_offset = OG_Position->getAddress ("cursor_xyz"); + d->window_dims_offset = OG_Position->getAddress ("window_dims"); d->Started = true; - } - catch(exception &){}; - try - { - d->hotkey_start = mem->getAddress("hotkey_start"); - d->hotkey_mode_offset = mem->getOffset ("hotkey_mode"); - d->hotkey_xyz_offset = mem->getOffset("hotkey_xyz"); - d->hotkey_size = mem->getHexValue("hotkey_size"); - d->StartedHotkeys = true; - } - catch(exception &){}; - try - { - d->screen_tiles_ptr_offset = mem->getAddress ("screen_tiles_pointer"); - d->StartedScreen = true; + try + { + OffsetGroup * OG_Hotkeys = mem->getGroup("Hotkeys"); + d->hotkey_start = OG_Hotkeys->getAddress("start"); + d->hotkey_mode_offset = OG_Hotkeys->getOffset ("mode"); + d->hotkey_xyz_offset = OG_Hotkeys->getOffset("coords"); + d->hotkey_size = OG_Hotkeys->getHexValue("size"); + d->StartedHotkeys = true; + } + catch(exception &){}; + try + { + d->screen_tiles_ptr_offset = OG_Position->getAddress ("screen_tiles_pointer"); + d->StartedScreen = true; + } + catch(exception &){}; } catch(exception &){}; } diff --git a/tools/supported/probe.cpp b/tools/supported/probe.cpp index e4057e780..57992f470 100644 --- a/tools/supported/probe.cpp +++ b/tools/supported/probe.cpp @@ -30,27 +30,33 @@ int main (int numargs, const char ** args) #endif return 1; } - + DFHack::Position *Pos = DF->getPosition(); DFHack::VersionInfo* mem = DF->getMemoryInfo(); DFHack::Maps *Maps = DF->getMaps(); DFHack::Process * p = DF->getProcess(); - uint32_t designatus = mem->getOffset("map_data_designation"); - uint32_t block_feature1 = mem->getOffset("map_data_feature_local"); - uint32_t block_feature2 = mem->getOffset("map_data_feature_global"); - uint32_t region_x_offset = mem->getAddress("region_x"); - uint32_t region_y_offset = mem->getAddress("region_y"); - uint32_t region_z_offset = mem->getAddress("region_z"); - uint32_t feature1_start_ptr = mem->getAddress("local_feature_start_ptr"); + OffsetGroup *mapsg = mem->getGroup("Maps"); + OffsetGroup *mapblockg = mapsg->getGroup("block"); + OffsetGroup *localfeatg = mapsg->getGroup("features")->getGroup("local"); + + uint32_t region_x_offset = mapsg->getAddress("region_x"); + uint32_t region_y_offset = mapsg->getAddress("region_y"); + uint32_t region_z_offset = mapsg->getAddress("region_z"); + + uint32_t designatus = mapblockg->getOffset("designation"); + uint32_t block_feature1 = mapblockg->getOffset("feature_local"); + uint32_t block_feature2 = mapblockg->getOffset("feature_global"); + + uint32_t feature1_start_ptr = localfeatg->getAddress("start_ptr"); int32_t regionX, regionY, regionZ; - + // read position of the region inside DF world p->readDWord (region_x_offset, (uint32_t &)regionX); p->readDWord (region_y_offset, (uint32_t &)regionY); p->readDWord (region_z_offset, (uint32_t &)regionZ); - + Maps->Start(); - + int32_t cursorX, cursorY, cursorZ; Pos->getCursorCoords(cursorX,cursorY,cursorZ); if(cursorX != -30000) @@ -72,20 +78,19 @@ int main (int numargs, const char ** args) std::cout << endl; print_bits(block.occupancy[tileX][tileY].whole,std::cout); std::cout << endl; - + // tiletype std::cout <<"tiletype: " << tiletype; if(tileTypeTable[tiletype].name) std::cout << " = " << tileTypeTable[tiletype].name; std::cout << std::endl; - - std::cout <<"temperature1: " << tmpb1[tileX][tileY] << " U" << std::endl; std::cout <<"temperature2: " << tmpb2[tileX][tileY] << " U" << std::endl; - + // biome, geolayer std::cout << "biome: " << des.biome << std::endl; std::cout << "geolayer: " << des.geolayer_index << std::endl; + // liquids if(des.flow_size) {