diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 5f6ac01f3..4534481e7 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -21,6 +21,10 @@ TARGET_LINK_LIBRARIES(dfvdig dfhack) ADD_EXECUTABLE(dfcleanmap cleanmap.cpp) TARGET_LINK_LIBRARIES(dfcleanmap dfhack) +# unstuck - make DF run if something goes wrong with the 'normal' memory access method +ADD_EXECUTABLE(dfunstuck unstuck.cpp) +TARGET_LINK_LIBRARIES(dfunstuck dfhack) + IF(UNIX) # incrementalsearch - a bit like cheat engine, only DF-specific, very basic # and Linux-only diff --git a/tools/vdig.cpp b/tools/vdig.cpp index 3b5c455b7..93eceefce 100644 --- a/tools/vdig.cpp +++ b/tools/vdig.cpp @@ -105,20 +105,24 @@ class Block { return raw.designation[p.x][p.y]; } - DFHack::t_designation setDesignationAt(Point p, DFHack::t_designation des) + bool setDesignationAt(Point p, DFHack::t_designation des) { + if(!valid) return false; dirty = true; //printf("setting block %d/%d/%d , %d %d\n",x,y,z, p.x, p.y); raw.designation[p.x][p.y] = des; + return true; } bool WriteDesignations () { + if(!valid) return false; if(dirty) { //printf("writing %d/%d/%d\n",x,y,z); m->WriteDesignations(x,y,z, &raw.designation); m->WriteDirtyBit(x,y,z,true); } + return true; } bool valid; bool dirty; @@ -171,6 +175,7 @@ class Layer { Block * nblo = new Block(Maps,blockcoord.x,blockcoord.y,z); blocks[blockcoord] = nblo; + return nblo; } } @@ -234,6 +239,7 @@ class Layer p->second->WriteDesignations(); //cout << stonetypes[p->first].id << " : " << p->second << endl; } + return true; } private: bool valid;