diff --git a/.gitignore b/.gitignore
index 5abcc3138..356bf6399 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@ output/*
# a file generated by cmake
dfhack/include/config.h
+library/private/config.h
# any build folders
build*/
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4105db70d..b794b7143 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,6 +4,11 @@ cmake_minimum_required(VERSION 2.6)
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake/Modules)
SET ( DFHACK_VERSION "0.4.1.0-dev" )
+# Set this to project source dir. When dfhack is used
+# as a submodule, CMAKE_SOURCE_DIR is not pointing to
+# the root where this particular CMakeLists.txt file sits.
+SET(CMAKE_SOURCE_DIR ${PROJECT_SOURCE_DIR})
+
# disable warning, autosearch
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
@@ -59,4 +64,4 @@ ENDIF(BUILD_DFHACK_PLAYGROUND)
IF(BUILD_DFHACK_DOCUMENTATION)
add_subdirectory (doc)
-ENDIF(BUILD_DFHACK_DOCUMENTATION)
\ No newline at end of file
+ENDIF(BUILD_DFHACK_DOCUMENTATION)
diff --git a/data/Memory.xml b/data/Memory.xml
index 87b296382..381e39708 100644
--- a/data/Memory.xml
+++ b/data/Memory.xml
@@ -2361,6 +2361,7 @@ map_data_1b60_offset 0x1B9c
e79cead03187ecb692961b316b7cdcd4
+ 0x09487970
diff --git a/library/modules/Position.cpp b/library/modules/Position.cpp
index 1e5d48232..1395e59e3 100644
--- a/library/modules/Position.cpp
+++ b/library/modules/Position.cpp
@@ -178,10 +178,7 @@ bool Position::getScreenTiles (int32_t width, int32_t height, t_screen screen[])
if(!d->Inited) return false;
if(!d->StartedScreen) return false;
- uint32_t screen_addr;
- d->owner->readDWord(d->screen_tiles_ptr_offset,(uint32_t &) screen_addr);
- //d->owner->read (d->screen_tiles_ptr_offset, sizeof(uint32_t), (uint8_t *) screen_addr);
-
+ uint32_t screen_addr = d->owner->readDWord(d->screen_tiles_ptr_offset);
uint8_t* tiles = new uint8_t[width*height*4/* + 80 + width*height*4*/];
d->owner->read (screen_addr, (width*height*4/* + 80 + width*height*4*/), (uint8_t *) tiles);
@@ -190,12 +187,12 @@ bool Position::getScreenTiles (int32_t width, int32_t height, t_screen screen[])
{
for(int32_t ix=0; ix inventory;
+ std::vector inventory;
- if( Creatures->ReadInventoryPtr(creature.origin, inventory) )
- {
- printf("\tInventory:\n");
- for(unsigned int i = 0; i < inventory.size(); i++)
- {
- printf("\t\t%s\n", Items->getItemDescription(inventory[i], Materials).c_str());
- }
- }
+ if( Creatures->ReadInventoryPtr(creature.origin, inventory) )
+ {
+ DFHack::Items * Items = DF->getItems();
+ printf("\tInventory:\n");
+ for(unsigned int i = 0; i < inventory.size(); i++)
+ {
+ printf("\t\t%s\n", Items->getItemDescription(inventory[i], Materials).c_str());
+ }
+ }
/*
if(creature.pregnancy_timer > 0)
@@ -426,7 +427,6 @@ int main (int numargs, char ** args)
Creatures = DF->getCreatures();
Materials = DF->getMaterials();
- Items = DF->getItems();
World = DF->getWorld();
current_year = World->ReadCurrentYear();
current_tick = World->ReadCurrentTick();
diff --git a/tools/playground/copypaste.cpp b/tools/playground/copypaste.cpp
index 7dc97792a..dd304d5e9 100644
--- a/tools/playground/copypaste.cpp
+++ b/tools/playground/copypaste.cpp
@@ -159,15 +159,18 @@ int main (int numargs, const char ** args)
}
DFHack::Position *Pos = DF->getPosition();
- DFHack::memory_info* mem = DF->getMemoryInfo();
+ DFHack::VersionInfo* mem = DF->getMemoryInfo();
DFHack::Process * p = DF->getProcess();
- uint32_t designations = 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 * OG_Maps = mem->getGroup("Maps");
+ OffsetGroup * OG_MapBlock = OG_Maps->getGroup("block");
+ OffsetGroup * OG_LocalFt = OG_Maps->getGroup("features")->getGroup("local");
+ uint32_t designations = OG_MapBlock->getOffset("designation");
+ uint32_t block_feature1 = OG_MapBlock->getOffset("feature_local");
+ uint32_t block_feature2 = OG_MapBlock->getOffset("feature_global");
+ uint32_t region_x_offset = OG_Maps->getAddress("region_x");
+ uint32_t region_y_offset = OG_Maps->getAddress("region_y");
+ uint32_t region_z_offset = OG_Maps->getAddress("region_z");
+ uint32_t feature1_start_ptr = OG_LocalFt->getAddress("start_ptr");
int32_t regionX, regionY, regionZ;
// read position of the region inside DF world