From 46d776cf46c343aa43e6c559191bfeef0e006d32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Wed, 7 Jul 2010 01:35:38 +0200 Subject: [PATCH 01/34] doxygen index page, OnResume all modules from Context::Resume --- doc/CMakeLists.txt | 1 + doc/Doxyfile.in | 10 +++------- library/DFContext.cpp | 4 ++++ library/include/dfhack/DFModule.h | 15 ++++++++++++--- library/modules/Position.cpp | 5 ++++- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 67c7cd6a5..1ced1fd7b 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -38,6 +38,7 @@ IF(DOXYGEN_FOUND) # the Doxyfile with a REGEX REPLACE (see below) SET( DOXYGEN_SOURCE_DIR # "${CMAKE_SOURCE_DIR}/library" + "${CMAKE_SOURCE_DIR}/doc/index.dxgen" "${CMAKE_SOURCE_DIR}/library/include" "${CMAKE_SOURCE_DIR}/library/include/dfhack" "${CMAKE_SOURCE_DIR}/library/include/dfhack/modules" diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index adb67ed94..7c4302fa2 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -8,7 +8,7 @@ PROJECT_NUMBER = @DFHACK_VERSION@ OUTPUT_DIRECTORY = . CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English -USE_WINDOWS_ENCODING = YES +USE_WINDOWS_ENCODING = NO BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = @@ -31,7 +31,7 @@ SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- -EXTRACT_ALL = YES +EXTRACT_ALL = NO EXTRACT_PRIVATE = NO EXTRACT_STATIC = NO EXTRACT_LOCAL_CLASSES = NO @@ -69,7 +69,7 @@ WARN_LOGFILE = # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = @CMAKE_DOXYGEN_INPUT_LIST@ -FILE_PATTERNS = *.cpp *.h +FILE_PATTERNS = *.cpp *.h *.dxgen RECURSIVE = NO EXCLUDE = EXCLUDE_SYMLINKS = NO @@ -102,10 +102,6 @@ IGNORE_PREFIX = GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html -# this code is needed if you want to build this doxygen docu for a static wep page as http://libnoise.sourceforge.net/ -#HTML_HEADER = htmldata/templateheader.html -#HTML_FOOTER = htmldata/templatefooter.html -#HTML_STYLESHEET = htmldata/doxygen.css HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO diff --git a/library/DFContext.cpp b/library/DFContext.cpp index 41ac6e333..15939dee9 100644 --- a/library/DFContext.cpp +++ b/library/DFContext.cpp @@ -173,6 +173,10 @@ bool Context::AsyncSuspend() bool Context::Resume() { + for(int i = 0 ; i < d->allModules.size(); i++) + { + d->allModules[i]->OnResume(); + } return d->p->resume(); } bool Context::ForceResume() diff --git a/library/include/dfhack/DFModule.h b/library/include/dfhack/DFModule.h index 95f8877a0..d4c840b64 100644 --- a/library/include/dfhack/DFModule.h +++ b/library/include/dfhack/DFModule.h @@ -36,9 +36,18 @@ namespace DFHack ~Module(){}; virtual bool Start(){return true;};// default start... virtual bool Finish() = 0;// everything should have a Finish() - virtual bool doFinishOnResume(){return true;}; // should Context call Finish when Resume is called? - virtual bool doFinishOnMapChange(){return false;}; // Finish when map change is detected? - virtual bool doFinishOnDetach(){return false;}; // Finish in Context::Detach? + // should Context call Finish when Resume is called? + virtual bool OnResume() + { + Finish(); + return true; + }; + // Finish when map change is detected? + // TODO: implement + virtual bool OnMapChange() + { + return false; + }; }; } #endif //MODULE_H_INCLUDED diff --git a/library/modules/Position.cpp b/library/modules/Position.cpp index 0d3ae1819..321460577 100644 --- a/library/modules/Position.cpp +++ b/library/modules/Position.cpp @@ -66,7 +66,10 @@ Position::Position(DFContextShared * d_) d->cursor_xyz_offset = mem->getAddress ("cursor_xyz"); d->window_dims_offset = mem->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"); From 411bb5ed9735470140d67399a193be481ae58f6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Thu, 8 Jul 2010 22:58:01 +0200 Subject: [PATCH 02/34] Added CMake options to build examples and playground tools, disabled by default. --- CMakeLists.txt | 2 ++ tools/examples/CMakeLists.txt | 7 ++++++- tools/playground/CMakeLists.txt | 5 +++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f8458cb97..6b314b94b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,8 @@ SET( LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/output CACHE PATH "Output directory SET( EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/output CACHE PATH "Output directory for the dfhack tools" ) OPTION(BUILD_DFHACK_DOCUMENTATION "Create doxygen documentation for developers" OFF) +OPTION(BUILD_DFHACK_EXAMPLES "Build example tools" OFF) +OPTION(BUILD_DFHACK_PLAYGROUND "Build tools from the playground folder" OFF) include_directories (${CMAKE_SOURCE_DIR}/library/include/) include_directories (${CMAKE_SOURCE_DIR}/library/shm/) diff --git a/tools/examples/CMakeLists.txt b/tools/examples/CMakeLists.txt index 190dff3cc..3bc534ca7 100644 --- a/tools/examples/CMakeLists.txt +++ b/tools/examples/CMakeLists.txt @@ -1,5 +1,8 @@ # don't use this file directly. use the one in the root folder of the project +# only build this stuff when BUILD_DFHACK_EXAMPLES is set to ON +IF (BUILD_DFHACK_EXAMPLES) + # this is required to ensure we use the right configuration for the system. IF(UNIX) add_definitions(-DLINUX_BUILD) @@ -85,4 +88,6 @@ IF(UNIX) ELSE(CURSES_FOUND) MESSAGE(STATUS "Wide-character ncurses library not found - veinlook can't be built") ENDIF(CURSES_FOUND) -ENDIF(UNIX) \ No newline at end of file +ENDIF(UNIX) + +ENDIF (BUILD_DFHACK_EXAMPLES) \ No newline at end of file diff --git a/tools/playground/CMakeLists.txt b/tools/playground/CMakeLists.txt index eff712d97..ff4b97640 100644 --- a/tools/playground/CMakeLists.txt +++ b/tools/playground/CMakeLists.txt @@ -1,5 +1,8 @@ # don't use this file directly. use the one in the root folder of the project +# only build this stuff when BUILD_DFHACK_PLAYGROUND is set to ON +IF (BUILD_DFHACK_PLAYGROUND) + # this is required to ensure we use the right configuration for the system. IF(UNIX) add_definitions(-DLINUX_BUILD) @@ -60,3 +63,5 @@ TARGET_LINK_LIBRARIES(dfcatsplosion dfhack) # Author: belal #ADD_EXECUTABLE(dfrenamer renamer.cpp) #TARGET_LINK_LIBRARIES(dfrenamer dfhack) + +ENDIF (BUILD_DFHACK_PLAYGROUND) \ No newline at end of file From 2018ca7fe7df4d6ae9973f6f40dd50c69217fdc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Thu, 8 Jul 2010 23:15:51 +0200 Subject: [PATCH 03/34] Move veinlook to supported --- tools/examples/CMakeLists.txt | 36 ----------------- tools/supported/CMakeLists.txt | 39 +++++++++++++++++++ .../fake-curses.h.cmake | 0 tools/{examples => supported}/veinlook.cpp | 0 4 files changed, 39 insertions(+), 36 deletions(-) rename tools/{examples => supported}/fake-curses.h.cmake (100%) rename tools/{examples => supported}/veinlook.cpp (100%) diff --git a/tools/examples/CMakeLists.txt b/tools/examples/CMakeLists.txt index 3bc534ca7..f50ebcc0d 100644 --- a/tools/examples/CMakeLists.txt +++ b/tools/examples/CMakeLists.txt @@ -54,40 +54,4 @@ TARGET_LINK_LIBRARIES(dfspatterdump dfhack) ADD_EXECUTABLE(dfprocessenum processenum.cpp) TARGET_LINK_LIBRARIES(dfprocessenum dfhack) -IF(UNIX) - SET(CURSES_NEED_WIDE "YES") - SET(CURSES_NEED_NCURSES "NO") - find_package(Curses QUIET) - - IF(CURSES_FOUND) - if(CURSES_HAVE_NCURSESW_NCURSES_H) - SET(NCURSES_H "ncursesw/ncurses.h") - elseif(CURSES_HAVE_NCURSESW_CURSES_H) - SET(NCURSES_H "ncursesw/curses.h") - elseif(CURSES_HAVE_NCURSESW_H) - SET(NCURSES_H "ncursesw.h") - elseif(CURSES_HAVE_CURSESW_H) - SET(NCURSES_H "cursesw.h") - endif(CURSES_HAVE_NCURSESW_NCURSES_H) - IF(NCURSES_H) - # OPTION( VARIABLE "Description" Initial state) - #OPTION( WITH_FOO "Enable FOO support" ON ) - #OPTION( WITH_BAR "Enable BAR component" OFF ) - #SET( BAZ 18 ) - CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/fake-curses.h.cmake ${CMAKE_CURRENT_SOURCE_DIR}/fake-curses.h ) - - # veinlook - look at the map... sort of - ADD_EXECUTABLE(dfveinlook veinlook.cpp) - INCLUDE_DIRECTORIES(${CURSES_INCLUDE_DIR}) - TARGET_LINK_LIBRARIES(dfveinlook dfhack ${CURSES_LIBRARIES}) - install(TARGETS - dfveinlook - RUNTIME DESTINATION bin - ) - ENDIF(NCURSES_H) - ELSE(CURSES_FOUND) - MESSAGE(STATUS "Wide-character ncurses library not found - veinlook can't be built") - ENDIF(CURSES_FOUND) -ENDIF(UNIX) - ENDIF (BUILD_DFHACK_EXAMPLES) \ No newline at end of file diff --git a/tools/supported/CMakeLists.txt b/tools/supported/CMakeLists.txt index c8b278997..62100b52e 100644 --- a/tools/supported/CMakeLists.txt +++ b/tools/supported/CMakeLists.txt @@ -52,6 +52,40 @@ ADD_EXECUTABLE(dfliquids liquids.cpp) TARGET_LINK_LIBRARIES(dfliquids dfhack) IF(UNIX) + SET(CURSES_NEED_WIDE "YES") + SET(CURSES_NEED_NCURSES "NO") + find_package(Curses QUIET) + IF(CURSES_FOUND) + if(CURSES_HAVE_NCURSESW_NCURSES_H) + SET(NCURSES_H "ncursesw/ncurses.h") + elseif(CURSES_HAVE_NCURSESW_CURSES_H) + SET(NCURSES_H "ncursesw/curses.h") + elseif(CURSES_HAVE_NCURSESW_H) + SET(NCURSES_H "ncursesw.h") + elseif(CURSES_HAVE_CURSESW_H) + SET(NCURSES_H "cursesw.h") + endif(CURSES_HAVE_NCURSESW_NCURSES_H) + IF(NCURSES_H) + # OPTION( VARIABLE "Description" Initial state) + #OPTION( WITH_FOO "Enable FOO support" ON ) + #OPTION( WITH_BAR "Enable BAR component" OFF ) + #SET( BAZ 18 ) + CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/fake-curses.h.cmake ${CMAKE_CURRENT_SOURCE_DIR}/fake-curses.h ) + # veinlook - look at the map... sort of + ADD_EXECUTABLE(dfveinlook veinlook.cpp) + INCLUDE_DIRECTORIES(${CURSES_INCLUDE_DIR}) + TARGET_LINK_LIBRARIES(dfveinlook dfhack ${CURSES_LIBRARIES}) + install(TARGETS + dfveinlook + RUNTIME DESTINATION bin + ) + ENDIF(NCURSES_H) + ELSE(CURSES_FOUND) + MESSAGE(STATUS "Wide-character ncurses library not found - veinlook can't be built") + ENDIF(CURSES_FOUND) +ENDIF(UNIX) + + install(TARGETS dfreveal dfprospector @@ -66,4 +100,9 @@ dfflows dfliquids RUNTIME DESTINATION bin ) +IF(UNIX) + install(TARGETS + dfveinlook + RUNTIME DESTINATION bin + ) ENDIF(UNIX) diff --git a/tools/examples/fake-curses.h.cmake b/tools/supported/fake-curses.h.cmake similarity index 100% rename from tools/examples/fake-curses.h.cmake rename to tools/supported/fake-curses.h.cmake diff --git a/tools/examples/veinlook.cpp b/tools/supported/veinlook.cpp similarity index 100% rename from tools/examples/veinlook.cpp rename to tools/supported/veinlook.cpp From 0256a1976018481c23ce60ff5ef56a097bbf57b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 13 Jul 2010 03:21:18 +0200 Subject: [PATCH 04/34] Fix for veinlook bug related to module reset on resume. Offsets only for supported tools, creature stuff will come later. --- output/Memory.xml | 92 +++++++++++++++++++++++++++++++++++- tools/supported/veinlook.cpp | 4 ++ 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/output/Memory.xml b/output/Memory.xml index cf5a8d886..d9537981c 100755 --- a/output/Memory.xml +++ b/output/Memory.xml @@ -1680,7 +1680,18 @@ map_data_1b60_offset 0x1B9c map size Y: 0x16c4b14 --> - + rebase="0xD030" + + + 1a85839ab03df082974dc5629d3fbc26 + 0x4C3897C0 +
0xaff2d8
0xaf12d0 +
+ + 349d1ad6eda7b6c5e87f8e4726a0999a + 0x4C398089 + + .-"""-. ' \ |,. ,-. | _________________________ @@ -2186,6 +2197,85 @@ map_data_1b60_offset 0x1B9c e37750890350d7b9d8203879aff8fa5c + + + + 4f1f988bc1b425d4193d3d8b7b0579a5 + stealing memory... + looking for vectors... + ------------------- + !!LANGUAGE TABLES!! + ------------------- + translation vector: 0x932bf2c + lang vector: 0x932bf14 + word table offset: 0x1c + ------------- + !!MATERIALS!! + ------------- + inorganics: + 0x932bda8 + organics: + 0x932bdb4 + trees: + 0x932bdd8 + plants: + 0x932bdc0 + color descriptors: + 0x93302b8 + Amber color:0xaf842e0 + all descriptors: + 0x93302d0 + toad-first creature types: + 0x932be54 + all creature types: + 0x932be2c + 0x932be54 + Toad: 0xb076f88 + Toad: rawname = 0x0 + Toad: character (not reliable) = 0x20 + Toad: caste vector = 0x60 + Toad: extract? vector = 0x18f4 + Toad: colors = 0x36 + + + 3e7bea269018a6fb88ef53715685aa64 + stealing memory... + looking for vectors... + ------------------- + !!LANGUAGE TABLES!! + ------------------- + translation vector: 0x932bf2c + lang vector: 0x932bf14 + word table offset: 0x1c + ------------- + !!MATERIALS!! + ------------- + inorganics: + 0x932bda8 + organics: + 0x932bdb4 + trees: + 0x932bdd8 + plants: + 0x932bdc0 + color descriptors: + 0x93302b8 + Amber color:0xcc3a770 + all descriptors: + 0x93302d0 + toad-first creature types: + 0x932be54 + elephant-first creature types: + all creature types: + 0x932be2c + 0x932be54 + Toad: 0xc77d798 + Toad: rawname = 0x0 + Toad: character (not reliable) = 0x20 + Toad: caste vector = 0x60 + Toad: extract? vector = 0x18f4 + Toad: colors = 0x36 + diff --git a/tools/supported/veinlook.cpp b/tools/supported/veinlook.cpp index e0fc79004..1f489b355 100644 --- a/tools/supported/veinlook.cpp +++ b/tools/supported/veinlook.cpp @@ -719,6 +719,10 @@ main(int argc, char *argv[]) // Supend, read/write data DF->Suspend(); + // restart cleared modules + Maps->Start(); + Mats->Start(); + Mats->ReadInorganicMaterials(); uint32_t effectnum; /* if(DF.InitReadEffects(effectnum)) From 1e7a7051290f75c7001faf734a8d184184060c70 Mon Sep 17 00:00:00 2001 From: Simon Jackson Date: Thu, 15 Jul 2010 12:57:45 +0100 Subject: [PATCH 05/34] getType needs lots of work but its ok(ish). Mostly working .10 creature offsets --- library/include/dfhack/modules/Materials.h | 1 + library/modules/Creatures.cpp | 2 +- library/modules/Materials.cpp | 50 ++++++++++++++++++++++ output/Memory.xml | 18 +++++++- 4 files changed, 69 insertions(+), 2 deletions(-) diff --git a/library/include/dfhack/modules/Materials.h b/library/include/dfhack/modules/Materials.h index aac990751..f3ac6425c 100644 --- a/library/include/dfhack/modules/Materials.h +++ b/library/include/dfhack/modules/Materials.h @@ -145,6 +145,7 @@ namespace DFHack void ReadAllMaterials(void); + std::string getType(t_material & mat); std::string getDescription(t_material & mat); private: class Private; diff --git a/library/modules/Creatures.cpp b/library/modules/Creatures.cpp index a467a9e6b..0edb713f3 100644 --- a/library/modules/Creatures.cpp +++ b/library/modules/Creatures.cpp @@ -202,7 +202,7 @@ bool Creatures::ReadCreature (const int32_t index, t_creature & furball) // mood stuff furball.mood = (int16_t) p->readWord (temp + offs.mood_offset); furball.mood_skill = p->readWord (temp + offs.mood_skill_offset); - d->d->readName(furball.artifact_name, temp + offs.artifact_name_offset); + d->d->readName(furball.artifact_name, temp + offs.artifact_name_offset); // custom profession p->readSTLString(temp + offs.custom_profession_offset, furball.custom_profession, sizeof(furball.custom_profession)); diff --git a/library/modules/Materials.cpp b/library/modules/Materials.cpp index 481d23568..58f98c54c 100644 --- a/library/modules/Materials.cpp +++ b/library/modules/Materials.cpp @@ -470,3 +470,53 @@ std::string Materials::getDescription(t_material & mat) return out; } +//type of material only so we know which vector to retrieve +std::string Materials::getType(t_material & mat) +{ + if((mat.subIndex<419) || (mat.subIndex>618)) + { + if((mat.subIndex<19) || (mat.subIndex>218)) + { + if(mat.subIndex) + { + if(mat.subIndex>0x292) + { + return "unknown"; + } + else + { + if(mat.subIndex>=this->other.size()) + { + if(mat.subIndex<0) + return "any"; + + if(mat.subIndex>=this->raceEx.size()) + return "unknown"; + + return "racex"; + } + else + { + if (mat.index==-1) + return "other"; + else + return "other derivate"; + } + } + } + else + return "inorganic"; + } + else + { + if (mat.index>=this->raceEx.size()) + return "unknown"; + + return "racex extract"; + } + } + else + { + return "organic"; + } +} \ No newline at end of file diff --git a/output/Memory.xml b/output/Memory.xml index d9537981c..a936fc4a3 100755 --- a/output/Memory.xml +++ b/output/Memory.xml @@ -1685,7 +1685,23 @@ map_data_1b60_offset 0x1B9c 1a85839ab03df082974dc5629d3fbc26 0x4C3897C0 -
0xaff2d8
0xaf12d0 +
0xaff2d8
+
0x16D33CC
+
0x16D33FC
+ 0x4c + + Creatures + ========= +
0x168E73C
+
0x014b9f1c
+ 0X1F4 + 0x4AC + 0x64c + 0x71c + 0x7Bc + 0x0788 + 0x07A0 + 0x87c 349d1ad6eda7b6c5e87f8e4726a0999a From 52178e779fa5b82e55c76eace181f908ce20b20d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 17 Jul 2010 01:55:18 +0200 Subject: [PATCH 06/34] Fixes to merged C API and windows SHM. --- library/DFTypes_C.cpp | 1 + library/modules/Maps_C.cpp | 4 ++-- library/modules/Position.cpp | 40 +++++++++++++++++++++++++++++++++++- library/shm/shms-windows.cpp | 15 ++++++++++++++ 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/library/DFTypes_C.cpp b/library/DFTypes_C.cpp index b8f0a6a9b..dc7d946aa 100644 --- a/library/DFTypes_C.cpp +++ b/library/DFTypes_C.cpp @@ -23,6 +23,7 @@ distribution. */ #include "dfhack/DFIntegers.h" +#include "dfhack/DFTileTypes.h" #include #include "string.h" #include diff --git a/library/modules/Maps_C.cpp b/library/modules/Maps_C.cpp index 0700e0a9a..09a7dc065 100644 --- a/library/modules/Maps_C.cpp +++ b/library/modules/Maps_C.cpp @@ -308,7 +308,7 @@ t_frozenliquidvein* Maps_ReadFrozenVeins(DFHackObject* maps, uint32_t x, uint32_ { if(maps != NULL) { - if(alloc_frozenliquidvein_callback == NULL) + if(alloc_frozenliquidvein_buffer_callback == NULL) return NULL; vector veins; @@ -339,7 +339,7 @@ t_spattervein* Maps_ReadSpatterVeins(DFHackObject* maps, uint32_t x, uint32_t y, { if(maps != NULL) { - if(alloc_spattervein_callback == NULL) + if(alloc_spattervein_buffer_callback == NULL) return NULL; vector veins; diff --git a/library/modules/Position.cpp b/library/modules/Position.cpp index 321460577..0b76be94e 100644 --- a/library/modules/Position.cpp +++ b/library/modules/Position.cpp @@ -41,12 +41,15 @@ struct Position::Private uint32_t hotkey_mode_offset; uint32_t hotkey_xyz_offset; uint32_t hotkey_size; + + uint32_t screen_tiles_ptr_offset; DFContextShared *d; Process * owner; bool Inited; bool Started; bool StartedHotkeys; + bool StartedScreen; }; Position::Position(DFContextShared * d_) @@ -55,7 +58,7 @@ Position::Position(DFContextShared * d_) d->d = d_; d->owner = d_->p; d->Inited = true; - d->StartedHotkeys = d->Started = false; + d->StartedHotkeys = d->Started = d->StartedScreen = false; memory_info * mem; try { @@ -77,6 +80,12 @@ Position::Position(DFContextShared * d_) d->StartedHotkeys = true; } catch(exception &){}; + try + { + d->screen_tiles_ptr_offset = mem->getAddress ("screen_tiles_pointer"); + d->StartedScreen = true; + } + catch(exception &){}; } Position::~Position() @@ -161,3 +170,32 @@ bool Position::getWindowSize (int32_t &width, int32_t &height) return true; } +/* +bool Position::getScreenTiles (int32_t width, int32_t height, t_screen screen[]) +{ + if(!d->Inited) return false; + uint32_t screen_addr; + d->owner->read (d->screen_tiles_ptr_offset, sizeof(uint32_t), (uint8_t *) screen_addr); + + 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); + + for(int32_t iy=0; iy Date: Sat, 17 Jul 2010 20:13:44 +0200 Subject: [PATCH 07/34] Fix for SHM on windows --- library/shm/shms-windows.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/library/shm/shms-windows.cpp b/library/shm/shms-windows.cpp index 28aa4b15c..1173de74a 100644 --- a/library/shm/shms-windows.cpp +++ b/library/shm/shms-windows.cpp @@ -510,8 +510,9 @@ DFhackCExport void * SDL_DisplayFormat(void *surface) return _SDL_DisplayFormat(surface); } +// SDL_Surface *SDL_DisplayFormatAlpha(SDL_Surface *surface); static void * (*_SDL_DisplayFormatAlpha)( void * surface ) = 0; -DFhackCExport void * SDL_DisplayFormatAplha(void *surface) +DFhackCExport void * SDL_DisplayFormatAlpha(void *surface) { return _SDL_DisplayFormatAlpha(surface); } @@ -904,6 +905,7 @@ bool FirstCall() _SDL_GetVideoSurface = (void*(*)())GetProcAddress(realSDLlib,"SDL_GetVideoSurface"); _SDL_DisplayFormat = (void * (*) (void *))GetProcAddress(realSDLlib,"SDL_DisplayFormat"); _SDL_DisplayFormatAlpha = (void * (*) (void *))GetProcAddress(realSDLlib,"SDL_DisplayFormatAlpha"); + _SDL_GetRGBA = (void (*) (uint32_t, void *, uint8_t *, uint8_t *, uint8_t *, uint8_t *))GetProcAddress(realSDLlib,"SDL_GetRGBA"); _SDL_FreeSurface = (void (*)(void*))GetProcAddress(realSDLlib,"SDL_FreeSurface"); _SDL_GL_GetAttribute = (int (*)(int, int*))GetProcAddress(realSDLlib,"SDL_GL_GetAttribute"); _SDL_GL_SetAttribute = (int (*)(int, int))GetProcAddress(realSDLlib,"SDL_GL_SetAttribute"); From 3afff27f03393c5f4256f18d7f801bca8c91054c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Mon, 19 Jul 2010 21:42:17 +0200 Subject: [PATCH 08/34] A bit of offset work on linux, uprated README and COMPILE, screen reading code (untested). --- COMPILE | 42 +++++----- README | 8 +- library/include/dfhack/modules/Position.h | 15 ++++ library/modules/Position.cpp | 23 +++--- output/Memory.xml | 99 ++++++++++++----------- 5 files changed, 100 insertions(+), 87 deletions(-) diff --git a/COMPILE b/COMPILE index cc3a5670b..b37080dcd 100644 --- a/COMPILE +++ b/COMPILE @@ -99,10 +99,6 @@ There are others, but they aren't really that useful. Have fun. --------------------------------------------------------------------------------- -**Deprecated*Deprecated*Deprecated*Deprecated*Deprecated*Deprecated*Deprecated** --------------------------------------------------------------------------------- - Building the shared memory hook library (SHM) --------------------------------------------- @@ -110,7 +106,7 @@ Unlike the rest of DFHack, The SHM needs special treatment when it comes to compilation. Because it shares the memory space with DF itself, it has to be built with the same tools as DF and use the same C and C++/STL libraries. -For DF 40d15 - 40d19_2 on Windows, use MSVC 2008. You can get the Express +For DF 31.01 - 31.10 on Windows, use MSVC 2008. You can get the Express edition for free from Microsoft. Windows dependencies can be determined by a tool like depends.exe (google it). @@ -124,24 +120,24 @@ $export LD_DEBUG=versions $./df Example of (a part of a) relevant output from a working SHM installation: - 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libpthread.so.0 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GCC_3.0' in file ./libs/libgcc_s.so.1 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.0' in file ./libs/libgcc_s.so.1 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.1' in file /opt/lib32/lib/libm.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libm.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.1.3' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBCXX_3.4.9' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `CXXABI_1.3' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBCXX_3.4' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `CXXABI_1.3' in file ./libs/libstdc++.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBCXX_3.4' in file ./libs/libstdc++.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBC_2.1.3' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBC_2.2' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] + 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libpthread.so.0 [0] required by file ./dwarfort.exe [0] + 24472: checking for version `GCC_3.0' in file ./libs/libgcc_s.so.1 [0] required by file ./dwarfort.exe [0] + 24472: checking for version `GLIBC_2.0' in file ./libs/libgcc_s.so.1 [0] required by file ./dwarfort.exe [0] + 24472: checking for version `GLIBC_2.1' in file /opt/lib32/lib/libm.so.6 [0] required by file ./dwarfort.exe [0] + 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libm.so.6 [0] required by file ./dwarfort.exe [0] + 24472: checking for version `GLIBC_2.1.3' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] + 24472: checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] + 24472: checking for version `GLIBC_2.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] + 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] + 24472: checking for version `GLIBCXX_3.4.9' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0] + 24472: checking for version `CXXABI_1.3' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0] + 24472: checking for version `GLIBCXX_3.4' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0] + 24472: checking for version `CXXABI_1.3' in file ./libs/libstdc++.so.6 [0] required by file ./libs/libdfconnect.so [0] + 24472: checking for version `GLIBCXX_3.4' in file ./libs/libstdc++.so.6 [0] required by file ./libs/libdfconnect.so [0] + 24472: checking for version `GLIBC_2.1.3' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] + 24472: checking for version `GLIBC_2.2' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] + 24472: checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] + 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] libdfconnect is the SHM. Both are compiled against the same C++ library and share the same CXXABI version. diff --git a/README b/README index cc6e7c9ef..5a574482c 100644 --- a/README +++ b/README @@ -33,10 +33,10 @@ OSX is also not supported due to lack of developers with a Mac. Currently supported Dwarf Fortress versions: * Windows 0.31.01 - 0.31.03 legacy - 0.31.04 - 0.31.08 SDL + 0.31.04 - 0.31.10 SDL * Linux - 0.31.04 - 0.31.08 native. + 0.31.04 - 0.31.10 native. There are missing offsets but Map tools should be OK. Linux support is a bit lacking, I'm working on it. All supported Windows versions running in wine can be used with DFHack. @@ -119,7 +119,7 @@ External : linked as dynamic loaded libraries (.dll, .so, etc.) If you want to add dependencies, think twice about it. All internal dependencies for core dfhack should be either public domain or require attribution at most. -Internal dependencies for tools can be either that, or any Free Software +External dependencies for tools can be either that, or any Free Software licenses. ** Current internal dependencies ** @@ -132,7 +132,7 @@ argstream: Allows reading terminal application arguments. GPL! ** Current external dependencies ** wide-character ncurses : used for the veinlook tool on Linux. -python 2.6 : required for building and using the python bindings. +x11 libraries : used for sending key events on linux ** Build-time dependencies ** cmake: you need cmake to generate the build system and some configuration diff --git a/library/include/dfhack/modules/Position.h b/library/include/dfhack/modules/Position.h index 06fc23336..376208df2 100644 --- a/library/include/dfhack/modules/Position.h +++ b/library/include/dfhack/modules/Position.h @@ -17,6 +17,16 @@ namespace DFHack int32_t z; }; + struct t_screen + { + uint8_t symbol; + uint8_t foreground; + uint8_t background; + uint8_t bright; + uint8_t gtile; + uint8_t grayscale; + }; + class DFContextShared; class DFHACK_EXPORT Position : public Module { @@ -44,6 +54,11 @@ namespace DFHack */ bool getWindowSize(int32_t & width, int32_t & height); + /* + * Screen tiles + */ + bool getScreenTiles(int32_t width, int32_t height, t_screen screen[]); + private: struct Private; Private *d; diff --git a/library/modules/Position.cpp b/library/modules/Position.cpp index 0b76be94e..ab3fccba3 100644 --- a/library/modules/Position.cpp +++ b/library/modules/Position.cpp @@ -170,32 +170,33 @@ bool Position::getWindowSize (int32_t &width, int32_t &height) return true; } -/* + 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->read (d->screen_tiles_ptr_offset, sizeof(uint32_t), (uint8_t *) screen_addr); - uint8_t* tiles = new uint8_t[width*height*4 + 80 + width*height*4]; + 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); + d->owner->read (screen_addr, (width*height*4/* + 80 + width*height*4*/), (uint8_t *) tiles); for(int32_t iy=0; iy0x70 - 0x64 - 0x68 0x51C - 0xACC 0x654 + 0xACC - Body Parts - ========== - 0x0 - 0x1C - 0x44 - 0x78 - 0x90 + Color Mods + ========== + 0x70 + 0x64 + 0x68 + + Body Parts + ========== + 0x0 + 0x1C + 0x44 + 0x78 + 0x90 Materials ========= @@ -1777,48 +1780,38 @@ map_data_1b60_offset 0x1B9c Creature offsets ================ - 0x0 - 0x6c - 0x3c * - 0x44 * - 0x90 - 0x8C * - 0x90 * - 0x110 - 0xA6 * - 0x114 - 0XB4 * - 0X1F4 - 0X21C - - 0x18C * - 0x19C * - 0x1A0 * - 0x464 - 0x390 from chmod - 0x394 the skill that will be increased at the end of the mood (or not) - 0x604 - 0x6D4 - 0x774 - 0x0740 - 0x0758 - 0x834 + 0x0 VERIFIED + 0x3c CHMOD + 0x40 CHMOD + 0x44 CHMOD + 0x90 BAD!! + 0x8C CHMOD + 0x90 CHMOD + 0xA4 VERIFY + 0xA6 CHMOD + 0xA8 CHMOD + 0xB4 VERIFY! + 0X144 CHMOD + 0x18C VERIFY! + 0x19C VERIFY! + 0x1A0 VERIFY! + 0x464 BAD! + 0x258 CHMOD + 0x394 VERIFY! + the skill that will be increased at the end of the mood (or not) + 0x604 BAD! + 0x6D4 BAD! + 0x51C CHMOD + 0x0500 CHMOD + 0x0758 BAD! + 0x5AC CHMOD Souls ===== 0x0 - 0x1F4 - 0x224 - 0x88 - - Castes - ====== - 0x70 - 0x64 - 0x68 - 0x51C - 0xACC - 0x654 + 0x1C4 CHMOD + 0x1DC CHMOD + 0x88 BAD! Body Parts ========== @@ -1856,6 +1849,14 @@ map_data_1b60_offset 0x1B9c 0x20 VERIFIED 0x36 LOOKS OK + Castes + ====== + 0x70 + 0x64 + 0x68 + 0x51C + 0xACC + 0x654 rebase="0xD030" - - 1a85839ab03df082974dc5629d3fbc26 0x4C3897C0
0xaff2d8
@@ -1707,9 +1702,17 @@ map_data_1b60_offset 0x1B9c 0x87c
- 349d1ad6eda7b6c5e87f8e4726a0999a + 552cfa417fd131204ebfee66aefc4adb 0x4C398089 + + 552cfa417fd131204ebfee66aefc4adb + 0x4C496D93 +
0xB062D8
+
0xe81114
VERIFIED +
0xeAF1E8
VERIFIED +
0xeAF1C4
VERIFIED +
.-"""-. ' \ @@ -1780,38 +1783,48 @@ map_data_1b60_offset 0x1B9c Creature offsets ================ - 0x0 VERIFIED - 0x3c CHMOD - 0x40 CHMOD - 0x44 CHMOD - 0x90 BAD!! - 0x8C CHMOD - 0x90 CHMOD - 0xA4 VERIFY - 0xA6 CHMOD - 0xA8 CHMOD - 0xB4 VERIFY! - 0X144 CHMOD - 0x18C VERIFY! - 0x19C VERIFY! - 0x1A0 VERIFY! - 0x464 BAD! - 0x258 CHMOD - 0x394 VERIFY! - the skill that will be increased at the end of the mood (or not) - 0x604 BAD! - 0x6D4 BAD! - 0x51C CHMOD - 0x0500 CHMOD - 0x0758 BAD! - 0x5AC CHMOD + 0x0 + 0x6c + 0x3c * + 0x44 * + 0x90 + 0x8C * + 0x90 * + 0x110 + 0xA6 * + 0x114 + 0XB4 * + 0X1F4 + 0X21C + + 0x18C * + 0x19C * + 0x1A0 * + 0x464 + 0x390 from chmod + 0x394 the skill that will be increased at the end of the mood (or not) + 0x604 + 0x6D4 + 0x774 + 0x0740 + 0x0758 + 0x834 Souls ===== 0x0 - 0x1C4 CHMOD - 0x1DC CHMOD - 0x88 BAD! + 0x1F4 + 0x224 + 0x88 + + Castes + ====== + 0x70 + 0x64 + 0x68 + 0x51C + 0xACC + 0x654 Body Parts ========== @@ -1849,14 +1862,6 @@ map_data_1b60_offset 0x1B9c 0x20 VERIFIED 0x36 LOOKS OK - Castes - ====== - 0x70 - 0x64 - 0x68 - 0x51C - 0xACC - 0x654 @@ -2256,8 +2262,6 @@ map_data_1b60_offset 0x1B9c 3e7bea269018a6fb88ef53715685aa64 - stealing memory... - looking for vectors... ------------------- !!LANGUAGE TABLES!! ------------------- @@ -2293,6 +2297,47 @@ map_data_1b60_offset 0x1B9c Toad: extract? vector = 0x18f4 Toad: colors = 0x36 + + + 7b04ad536b8b657588ac209a7f95e1d1 +
0x8cf7a58
VERIFIED +
0x8cf7a5C
VERIFIED +
0x8cf7a60
VERIFIED +
0x8b3b328
VERIFIED + ------------------- + !!LANGUAGE TABLES!! + ------------------- + translation vector: 0x9348f4c + lang vector: 0x9348f34 + word table offset: 0x1c + ------------- + !!MATERIALS!! + ------------- + inorganics: + 0x9348dc8 + organics: + 0x9348dd4 + trees: + 0x9348df8 + plants: + 0x9348de0 + color descriptors: + 0x934d2d8 + Amber color:0xac014c0 + all descriptors: + 0x934d2f0 + toad-first creature types: + 0x9348e74 + all creature types: + 0x9348e4c + 0x9348e74 + Toad: 0xadae390 + Toad: rawname = 0x0 + Toad: character (not reliable) = 0x20 + Toad: caste vector = 0x60 + Toad: extract? vector = 0x18f4 + Toad: colors = 0x36 +
From 0454dc6ab7cdf9370a06a95419a4412b9c212ea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 25 Jul 2010 10:03:47 +0200 Subject: [PATCH 14/34] Removed old README and COMPILE files, added rst->html bash script that uses docutils --- COMPILE | 156 -------------- Compile.html | 506 ++++++++++++++++++++++++++++++++++++++++++++ README | 179 ---------------- README.rst | 4 +- Readme.html | 586 +++++++++++++++++++++++++++++++++++++++++++++++++++ fixTexts.sh | 3 + 6 files changed, 1097 insertions(+), 337 deletions(-) delete mode 100644 COMPILE create mode 100644 Compile.html delete mode 100644 README create mode 100644 Readme.html create mode 100755 fixTexts.sh diff --git a/COMPILE b/COMPILE deleted file mode 100644 index b37080dcd..000000000 --- a/COMPILE +++ /dev/null @@ -1,156 +0,0 @@ -Here's how you build dfhack! ----------------------------- - -Dependencies -============ - -You'll need cmake and 'a' compiler for building the main lib and the various tools. -(Linux only) Veinlook requires the wide-character ncurses library (libncursesw) -(Linux only) You'll need X11 dev libraries. - -Building on Linux: --------------------- - -* To run in the output folder (without installing): - -building the library is simple. Enter the build folder, run the tools. Like this: - -cd build -cmake .. -DCMAKE_BUILD_TYPE:string=Release -make - -This will build the library and its tools and place them in /output. -You can also use a cmake-friendly IDE like KDevelop 4 or the cmake GUI program. - -* To be installed into the system or packaged - -cd build -cmake -DCMAKE_BUILD_TYPE:string=Release -DCMAKE_INSTALL_PREFIX=/usr -DMEMXML_DATA_PATH:path=/usr/share/dfhack .. -make -make install - -With this dfhack installs: -library to $CMAKE_INSTALL_PREFIX/lib -executables to $CMAKE_INSTALL_PREFIX/bin -The Memory.xml file to /usr/share/dfhack - -See the section on the shared memory hook library (SHM). - -Building on Windows: --------------------- - -You need cmake. Get the win32 installer version from the official site: -http://www.cmake.org/cmake/resources/software.html -It has the usual installer wizard thing. - - -* Using mingw: - -You also need a compiler. I build dfhack using mingw. You can get it from the mingw site: -Get the automated installer, it will download newest version of mingw and set things up nicely. -You'll have to add C:\MinGW\ to your PATH variable. - - - Building: - open up cmd and navigate to the dfhack\build folder, run cmake and the mingw version of make: - cd build - cmake .. -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE:string=Release - mingw32-make - - -* Using MSVC - -open up cmd and navigate to the dfhack\build folder, run cmake: -cd build -cmake .. - -This will generate MSVC solution and project files. -Note that: you are working in the /build folder. Files added to projects will - end up there! (and that's wrong). Any changes to the build system should -be done by changing cmake configs and running cmake on them! - -Alo, you'll have to copy the Memory.xml file to the build output folders -MSVC generates. For example from 'output/' to 'output/Release/' - - -* Using some other compiler: - -I'm afraid you are on your own. dfhack wasn't tested with any other compiler. -Try using a different cmake generator that's intended for your tools. - -Build targets -------------- - -dfhack has a few build targets. -If you're only after the library run 'make dfhack'. -'make' will build everything. -'make expbench' will build the expbench testing program and the library. - -Build types ------------ - -cmake allows you to pick a build type by changing this variable: CMAKE_BUILD_TYPE - -cmake .. -DCMAKE_BUILD_TYPE:string=BUILD_TYPE - -Without specifying a build type or 'None', cmake uses the CMAKE_CXX_FLAGS -variable for building. -Valid an useful build types include 'Release', 'Debug' and 'RelWithDebInfo'. -There are others, but they aren't really that useful. - -Have fun. - -Building the shared memory hook library (SHM) ---------------------------------------------- - -Unlike the rest of DFHack, The SHM needs special treatment when it comes to -compilation. Because it shares the memory space with DF itself, it has to be -built with the same tools as DF and use the same C and C++/STL libraries. - -For DF 31.01 - 31.10 on Windows, use MSVC 2008. You can get the Express -edition for free from Microsoft. - -Windows dependencies can be determined by a tool like depends.exe (google it). -Both the fake SDL.dll and DF have to use the same version of the C runtime -(MSVCRT). -The SHM can only be debugged using a RelWithDebInfo build! - -Linux dependencies can be determined by setting the LD_DEBUG variable and -running ./df: -$export LD_DEBUG=versions -$./df - -Example of (a part of a) relevant output from a working SHM installation: - 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libpthread.so.0 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GCC_3.0' in file ./libs/libgcc_s.so.1 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.0' in file ./libs/libgcc_s.so.1 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.1' in file /opt/lib32/lib/libm.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libm.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.1.3' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBCXX_3.4.9' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `CXXABI_1.3' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBCXX_3.4' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `CXXABI_1.3' in file ./libs/libstdc++.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBCXX_3.4' in file ./libs/libstdc++.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBC_2.1.3' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBC_2.2' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] - -libdfconnect is the SHM. Both are compiled against the same C++ library and -share the same CXXABI version. - -Precompiled SHM libraries are provided in binary releases. - -* Checking strings support - -Strings are one of the important C++ types and a great indicator that the SHM -works. Tools like Dwarf Therapist depend on string support. Reading of strings -can be checked by running any of the tools that deal with materials. - -String writing is best tested with a fresh throw-away fort and dfrenamer. -Embark, give one dwarf a very long name using dfrenamer and save/exit. -If DF crashes during the save sequence, your SHM is not compatible with DF and -the throw-away fort is most probably lost. diff --git a/Compile.html b/Compile.html new file mode 100644 index 000000000..1e4180548 --- /dev/null +++ b/Compile.html @@ -0,0 +1,506 @@ + + + + + + +Compiling DFHACK + + + +
+

Compiling DFHACK

+

Here's how you build dfhack!

+ + +
+

Dependencies

+
    +
  • cmake
  • +
  • A compiler for building the main lib and the various tools.
  • +
  • (Linux only) Veinlook requires the wide-character ncurses library (libncursesw)
  • +
  • (Linux only) You'll need X11 dev libraries.
  • +
+
+
+

Building on Linux

+

To run in the output folder (without installing) building the library +is simple. Enter the build folder, run the tools. Like this:

+
+cd build
+cmake .. -DCMAKE_BUILD_TYPE:string=Release
+make
+
+

This will build the library and its tools and place them in /output. +You can also use a cmake-friendly IDE like KDevelop 4 or the cmake GUI +program.

+

To be installed into the system or packaged:

+
+cd build
+cmake -DCMAKE_BUILD_TYPE:string=Release \
+    -DCMAKE_INSTALL_PREFIX=/usr \
+    -DMEMXML_DATA_PATH:path=/usr/share/dfhack ..
+make
+make install
+
+

With this dfhack installs:

+
    +
  • library to $CMAKE_INSTALL_PREFIX/lib
  • +
  • executables to $CMAKE_INSTALL_PREFIX/bin
  • +
  • The Memory.xml file to /usr/share/dfhack
  • +
+

See the section on the shared memory hook library (SHM).

+
+
+

Building on Windows

+

You need cmake. Get the win32 installer version from the official +site: http://www.cmake.org/cmake/resources/software.html

+

It has the usual installer wizard thing.

+
+

Using mingw

+

You also need a compiler. I build dfhack using mingw. You can get it +from the mingw site: http://www.mingw.org/

+

Get the automated installer, it will download newest version of mingw +and set things up nicely.

+

You'll have to add C:\MinGW\ to your PATH variable.

+
+

Building

+

open up cmd and navigate to the dfhack\build folder, run cmake +and the mingw version of make:

+
+cd build
+cmake .. -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE:string=Release
+mingw32-make
+
+
+
+
+

Using MSVC

+

open up cmd and navigate to the dfhack\build folder, run +cmake:

+
+cd build
+cmake ..
+
+

This will generate MSVC solution and project files.

+
+

Note

+

You are working in the /build folder. Files added to +projects will end up there! (and that's wrong). Any changes to the +build system should be done by changing cmake configs and running +cmake on them!

+
+

Also, you'll have to copy the Memory.xml file to the build output +folders MSVC generates. For example from output/ to +output/Release/

+
+
+

Using some other compiler

+

I'm afraid you are on your own. dfhack wasn't tested with any other +compiler.

+

Try using a different cmake generator that's intended for your tools.

+
+
+
+

Build targets

+

dfhack has a few build targets:

+
    +
  • If you're only after the library run make dfhack.
  • +
  • make will build everything.
  • +
  • make expbench will build the expbench testing program and the +library.
  • +
+
+
+

Build types

+

cmake allows you to pick a build type by changing this +variable: CMAKE_BUILD_TYPE

+
+cmake .. -DCMAKE_BUILD_TYPE:string=BUILD_TYPE
+
+

Without specifying a build type or 'None', cmake uses the +CMAKE_CXX_FLAGS variable for building.

+

Valid an useful build types include 'Release', 'Debug' and +'RelWithDebInfo'. There are others, but they aren't really that useful.

+

Have fun.

+
+
+

Building the shared memory hook library (SHM)

+

Unlike the rest of DFHack, The SHM needs special treatment when it +comes to compilation. Because it shares the memory space with DF +itself, it has to be built with the same tools as DF and use the same C +and C++/STL libraries.

+

For DF 31.01 - 31.10 on Windows, use MSVC 2008. You can get the Express +edition for free from Microsoft.

+

Windows dependencies can be determined by a tool like depends.exe +(google it). Both the fake SDL.dll and DF have to use the same +version of the C runtime (MSVCRT). The SHM can only be debugged using a +RelWithDebInfo build!

+

Linux dependencies can be determined by setting the LD_DEBUG variable +and running ./df:

+
+export LD_DEBUG=versions
+./df
+
+

Example of (a part of a) relevant output from a working SHM +installation:

+
+24472:     checking for version `GLIBC_2.0' in file /opt/lib32/lib/libpthread.so.0 [0] required by file ./dwarfort.exe [0]
+24472:     checking for version `GCC_3.0' in file ./libs/libgcc_s.so.1 [0] required by file ./dwarfort.exe [0]
+24472:     checking for version `GLIBC_2.0' in file ./libs/libgcc_s.so.1 [0] required by file ./dwarfort.exe [0]
+24472:     checking for version `GLIBC_2.1' in file /opt/lib32/lib/libm.so.6 [0] required by file ./dwarfort.exe [0]
+24472:     checking for version `GLIBC_2.0' in file /opt/lib32/lib/libm.so.6 [0] required by file ./dwarfort.exe [0]
+24472:     checking for version `GLIBC_2.1.3' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0]
+24472:     checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0]
+24472:     checking for version `GLIBC_2.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0]
+24472:     checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0]
+24472:     checking for version `GLIBCXX_3.4.9' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0]
+24472:     checking for version `CXXABI_1.3' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0]
+24472:     checking for version `GLIBCXX_3.4' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0]
+24472:     checking for version `CXXABI_1.3' in file ./libs/libstdc++.so.6 [0] required by file ./libs/libdfconnect.so [0]
+24472:     checking for version `GLIBCXX_3.4' in file ./libs/libstdc++.so.6 [0] required by file ./libs/libdfconnect.so [0]
+24472:     checking for version `GLIBC_2.1.3' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0]
+24472:     checking for version `GLIBC_2.2' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0]
+24472:     checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0]
+24472:     checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0]
+
+

libdfconnect is the SHM. Both are compiled against the same C++ library +and share the same CXXABI version.

+

Precompiled SHM libraries are provided in binary releases.

+
+
+

Checking strings support

+

Strings are one of the important C++ types and a great indicator that +the SHM works. Tools like Dwarf Therapist depend on string support. +Reading of strings can be checked by running any of the tools that deal +with materials.

+

String writing is best tested with a fresh throw-away fort and +dfrenamer.

+

Embark, give one dwarf a very long name using dfrenamer and save/exit. +If DF crashes during the save sequence, your SHM is not compatible with +DF and the throw-away fort is most probably lost.

+
+
+ + diff --git a/README b/README deleted file mode 100644 index 5a574482c..000000000 --- a/README +++ /dev/null @@ -1,179 +0,0 @@ -Introduction ------------- - -DFHack is a Dwarf Fortress memory access library and a set of basic tools using -this library. The library is a work in progress, so things might change as more -tools are written for it. - -It is an attempt to unite the various ways tools access DF memory and allow for -easier development of new tools. - -Getting DFHack ----------------- -The project is currently hosted on github, for both source and binaries: - http://github.com/peterix/dfhack - -* Packages - -The library and tools are packaged for Archlinux and are available both in AUR -and the arch-games repository. - -The package name is dfhack-git :) - -Compatibility -------------- - -DFHack works on Windows XP, Vista, 7 or any modern Linux distribution. - -Windows 2000 is currently *not supported* due to missing OS functionality. -If you know how to easily suspend processes, you can fix it :) - -OSX is also not supported due to lack of developers with a Mac. - -Currently supported Dwarf Fortress versions: -* Windows - 0.31.01 - 0.31.03 legacy - 0.31.04 - 0.31.10 SDL - -* Linux - 0.31.04 - 0.31.10 native. - There are missing offsets but Map tools should be OK. Linux support is a bit lacking, I'm working on it. - All supported Windows versions running in wine can be used with DFHack. - -Using the library as a developer --------------------------------- - -The library is compilable under Linux with GCC and under Windows with MinGW32 -and MSVC compilers. It is using the cmake build system. See COMPILE for details. - -DFHack is using the zlib/libpng license. This makes it easy to link to it, use -it in-source or add your own extensions. Contributing back to the dfhack -repository is welcome and the right thing to do :) - -At the time of writing there's no API reference or documentation. The code does -have a lot of comments though (and getting better all the time). - -Contributing to DFHack ----------------------- - -Several things should be kept in mind when contributing to DFHack. - -**** Coding style **** - -DFhack uses ANSI formatting and four spaces as indentation. Line endings are -UNIX. The files use UTF-8 encoding. Code not following this won't make me happy, -because I'll have to fix it. There's a good chance I'll make *you* fix it ;) - -**** How to get new code into DFHack **** - -You can send patches or make a clone of the github repo and ask me on the -IRC channel to pull your code in. I'll review it and see if there are any -problems. I'll fix them if they are minor. - -Fixes are higher in priority. If you want to work on something, but don't -know what, check out http://github.com/peterix/dfhack/issues -- this is also -a good place to dump new ideas and/or bugs that need fixing. - -**** Layout for tools **** - -Tools live in the tools/ folder. There, they are split into three categories: - -distributed: these tools get distributed with binary releases and are installed - by doing 'make install' on linux. They are supposed to be stable - and supported. Experimental, useless, buggy or untested stuff - doesn't belong here. -examples : examples are tools that aren't very useful, but show how DF - and DFHack work. They should use only DFHack API functions. - No actual hacking or 'magic offsets' are allowed. -playground : This is a catch-all folder for tools that aren't ready to be - examples or be distributed in binary releases. All new tools - should start here. They can contain actual hacking, magic values - and other nasty business. - -**** Modules - what are they? **** - -DFHack uses modules to partition sets of features into manageable chunks. -A module can have both client and server side. - -Client side is the part that goes into the main library and is generally -written in C++. It is exposed to the users of DFHack. - -Server side is used inside DF and serves to accelerate the client modules. -This is written mostly in C style. - -There's a Core module that shouldn't be changed, because it defines -the basic commands like reading and writing raw data. The client parts -for the Core module are the various implementations of the Process -interface. - -A good example of a module is Maps. Named the same in both client and -server, it allows accelerating the reading of map blocks. - -Communication between modules happens by using shared memory. This is -pretty fast, but needs quite a bit of care to not break. - -**** Dependencies **** - -Internal : either part of the codebase or statically linked. -External : linked as dynamic loaded libraries (.dll, .so, etc.) - -If you want to add dependencies, think twice about it. All internal dependencies -for core dfhack should be either public domain or require attribution at most. -External dependencies for tools can be either that, or any Free Software -licenses. - -** Current internal dependencies ** - -tinyxml : used by core dfhack to read offset definitions from Memory.xml -md5 : an implementation of the MD5 hash algorithm. Used for identifying - DF binaries on Linux. -argstream: Allows reading terminal application arguments. GPL! - -** Current external dependencies ** - -wide-character ncurses : used for the veinlook tool on Linux. -x11 libraries : used for sending key events on linux - -** Build-time dependencies ** -cmake: you need cmake to generate the build system and some configuration - headers - - -Tools ------ -All the DFHack tools are terminal programs. This might seem strange to Windows -users, but these are meant mostly as examples for developers. Still, they can -be useful and are cross-platform just like the library itself. - - - dfcleanmap : Cleans all the splatter that get scattered all over the map. - Only exception is mud. It leaves mud alone. - - dfexpbench : Just a simple benchmark of the data export speed. - - dfliquids : A command prompt for liquid creation and manipulation - (the Moses effect included!) - Also allows painting obsidian walls directly. - Note: - Spawning and deleting liquids can F up pathing data and - temperatures (creating heat traps). You've been warned. - - dfposition : Prints the current DF window properties and cursor position. - - dfprospector: Lists all available minerals on the map and how much - of them there is. - - dfreveal : Reveals the whole map, waits for input and hides it again. - If you close the tool while it waits, the map remains revealed. - - dfsuspend : Test of the process suspend/resume mechanism. - - dfunstuck : Use if you prematurely close any of the tools and DF - appears to be stuck. - - dfvdig : Designates a whole vein for digging. Point the cursor at a vein - and run this thing :) - - - dfflows : A tool for checking how many liquid tiles are actively checked - for flows. - - Your tool here: Write one ;) - - -Memory offset definitions -------------------------- - -The file with memory offset definitions used by dfhack can be found in the -output folder. - -~ EOF ~ diff --git a/README.rst b/README.rst index d94bc3e75..b2a4541e1 100644 --- a/README.rst +++ b/README.rst @@ -45,11 +45,11 @@ Windows fix it :) 0.31.01 - 0.31.03 legacy -0.31.04 - 0.31.10 SDL +0.31.04 - 0.31.11 SDL Linux ===== -0.31.04 - 0.31.10 native. +0.31.04 - 0.31.11 native. There are missing offsets but Map tools should be OK. Linux support is a bit lacking, I'm working on it. All supported Windows versions running in wine can be used with DFHack. diff --git a/Readme.html b/Readme.html new file mode 100644 index 000000000..f13661541 --- /dev/null +++ b/Readme.html @@ -0,0 +1,586 @@ + + + + + + + + + + +
+ + +
+

Introduction

+

DFHack is a Dwarf Fortress memory access library and a set of basic +tools using this library. The library is a work in progress, so things +might change as more tools are written for it.

+

It is an attempt to unite the various ways tools access DF memory and +allow for easier development of new tools.

+ +
+
+

Getting DFHack

+

The project is currently hosted on github, for both source and +binaries at http://github.com/peterix/dfhack

+
+

Packages

+

The library and tools are packaged for Archlinux and are available both +in AUR and the arch-games repository.

+

The package name is dfhack-git :)

+
+
+
+

Compatibility

+

DFHack works on Windows XP, Vista, 7 or any modern Linux distribution.

+

OSX is not supported due to lack of developers with a Mac.

+

Currently supported Dwarf Fortress versions are Windows and Linux.

+
+

Windows

+
+

Note

+

Windows 2000 is currently not supported due to missing OS +functionality. If you know how to easily suspend processes, you can +fix it :)

+
+

0.31.01 - 0.31.03 legacy +0.31.04 - 0.31.11 SDL

+
+
+

Linux

+

0.31.04 - 0.31.11 native. +There are missing offsets but Map tools should be OK. Linux support is +a bit lacking, I'm working on it. All supported Windows versions +running in wine can be used with DFHack.

+
+
+
+

Tools

+

All the DFHack tools are terminal programs. This might seem strange to Windows +users, but these are meant mostly as examples for developers. Still, they can +be useful and are cross-platform just like the library itself.

+
+

dfcleanmap

+

Cleans all the splatter that get scattered all over the map. +Only exception is mud. It leaves mud alone.

+
+
+

dfexpbench

+

Just a simple benchmark of the data export speed.

+
+
+

dfliquids

+

A command prompt for liquid creation and manipulation (the Moses +effect included!) Also allows painting obsidian walls directly.

+
+

Note

+

Spawning and deleting liquids can F up pathing data and +temperatures (creating heat traps). You've been warned.

+
+
+
+

dfposition

+

Prints the current DF window properties and cursor position.

+
+
+

dfprospector

+

Lists all available minerals on the map and how much of them there is.

+
+
+

dfreveal

+

Reveals the whole map, waits for input and hides it again. If you close +the tool while it waits, the map remains revealed.

+
+
+

dfsuspend

+

Test of the process suspend/resume mechanism.

+
+
+

dfunstuck

+

Use if you prematurely close any of the tools and DF appears to be +stuck.

+
+
+

dfvdig

+

Designates a whole vein for digging. Point the cursor at a vein and run +this thing :)

+
+
+

dfflows

+

A tool for checking how many liquid tiles are actively checked for +flows.

+
+
+

Your tool here

+

Write one ;)

+
+
+
+

Using the library as a developer

+

The library is compilable under Linux with GCC and under Windows with +MinGW32 and MSVC compilers. It is using the cmake build system. See +COMPILE for details.

+

DFHack is using the zlib/libpng license. This makes it easy to link to +it, use it in-source or add your own extensions. Contributing back to +the dfhack repository is welcome and the right thing to do :)

+

At the time of writing there's no API reference or documentation. The +code does have a lot of comments though (and getting better all the +time).

+
+

Contributing to DFHack

+

Several things should be kept in mind when contributing to DFHack.

+
+

Coding style

+

DFhack uses ANSI formatting and four spaces as indentation. Line +endings are UNIX. The files use UTF-8 encoding. Code not following this +won't make me happy, because I'll have to fix it. There's a good chance +I'll make you fix it ;)

+
+
+

How to get new code into DFHack

+

You can send patches or make a clone of the github repo and ask me on +the IRC channel to pull your code in. I'll review it and see if there +are any problems. I'll fix them if they are minor.

+

Fixes are higher in priority. If you want to work on something, but +don't know what, check out http://github.com/peterix/dfhack/issues -- +this is also a good place to dump new ideas and/or bugs that need +fixing.

+
+
+

Layout for tools

+

Tools live in the tools/ folder. There, they are split into three +categories.

+
+
distributed
+
these tools get distributed with binary releases and are installed +by doing 'make install' on linux. They are supposed to be stable +and supported. Experimental, useless, buggy or untested stuff +doesn't belong here.
+
examples
+
examples are tools that aren't very useful, but show how DF and +DFHack work. They should use only DFHack API functions. No actual +hacking or 'magic offsets' are allowed.
+
playground
+
This is a catch-all folder for tools that aren't ready to be +examples or be distributed in binary releases. All new tools should +start here. They can contain actual hacking, magic values and other +nasty business.
+
+
+
+

Modules - what are they?

+

DFHack uses modules to partition sets of features into manageable +chunks. A module can have both client and server side.

+

Client side is the part that goes into the main library and is +generally written in C++. It is exposed to the users of DFHack.

+

Server side is used inside DF and serves to accelerate the client +modules. This is written mostly in C style.

+

There's a Core module that shouldn't be changed, because it defines the +basic commands like reading and writing raw data. The client parts for +the Core module are the various implementations of the Process +interface.

+

A good example of a module is Maps. Named the same in both client and +server, it allows accelerating the reading of map blocks.

+

Communication between modules happens by using shared memory. This is +pretty fast, but needs quite a bit of care to not break.

+
+
+

Dependencies

+
+
Internal
+
either part of the codebase or statically linked.
+
External
+
linked as dynamic loaded libraries (.dll, .so, etc.)
+
+

If you want to add dependencies, think twice about it. All internal +dependencies for core dfhack should be either public domain or require +attribution at most. External dependencies for tools can be either +that, or any Free Software licenses.

+
+

Current internal dependencies

+
+
tinyxml
+
used by core dfhack to read offset definitions from Memory.xml
+
md5
+
an implementation of the MD5 hash algorithm. Used for identifying +DF binaries on Linux.
+
argstream
+
Allows reading terminal application arguments. GPL!
+
+
+
+

Current external dependencies

+
+
wide-character ncurses
+
used for the veinlook tool on Linux.
+
x11 libraries
+
used for sending key events on linux
+
+
+
+

Build-time dependencies

+
+
cmake
+
you need cmake to generate the build system and some configuration +headers
+
+
+
+
+
+
+

Memory offset definitions

+

The file with memory offset definitions used by dfhack can be found in the +output folder.

+
+
+ + diff --git a/fixTexts.sh b/fixTexts.sh new file mode 100755 index 000000000..30ee0c52c --- /dev/null +++ b/fixTexts.sh @@ -0,0 +1,3 @@ +#!/bin/bash +rst2html README.rst > Readme.html +rst2html COMPILE.rst > Compile.html From 6a0f71681a597dd379f944141d5ad79f7ab20df8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 25 Jul 2010 23:49:33 +0200 Subject: [PATCH 15/34] 31.12 support --- output/Memory.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/output/Memory.xml b/output/Memory.xml index 04efaa580..1abcf973a 100755 --- a/output/Memory.xml +++ b/output/Memory.xml @@ -1717,6 +1717,10 @@ map_data_1b60_offset 0x1B9c
0xe81114
VERIFIED
0xeAF1E8
VERIFIED
0xeAF1C4
VERIFIED + + + f0459165a426a9f2dd8d957e9fa7f01d + 0x4C4C32E7 .-"""-. ' \ @@ -2338,6 +2342,9 @@ map_data_1b60_offset 0x1B9c Toad: extract? vector = 0x18f4 Toad: colors = 0x36 + + e79cead03187ecb692961b316b7cdcd4 + From f308e2f898886cebd36a0147ce88b51b75b4f10f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 25 Jul 2010 23:52:20 +0200 Subject: [PATCH 16/34] Small omission --- README.rst | 4 ++-- Readme.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index b2a4541e1..bbeb7c3db 100644 --- a/README.rst +++ b/README.rst @@ -45,11 +45,11 @@ Windows fix it :) 0.31.01 - 0.31.03 legacy -0.31.04 - 0.31.11 SDL +0.31.04 - 0.31.12 SDL Linux ===== -0.31.04 - 0.31.11 native. +0.31.04 - 0.31.12 native. There are missing offsets but Map tools should be OK. Linux support is a bit lacking, I'm working on it. All supported Windows versions running in wine can be used with DFHack. diff --git a/Readme.html b/Readme.html index f13661541..f7c3417b4 100644 --- a/Readme.html +++ b/Readme.html @@ -392,11 +392,11 @@ functionality. If you know how to easily suspend processes, you can fix it :)

0.31.01 - 0.31.03 legacy -0.31.04 - 0.31.11 SDL

+0.31.04 - 0.31.12 SDL

Linux

-

0.31.04 - 0.31.11 native. +

0.31.04 - 0.31.12 native. There are missing offsets but Map tools should be OK. Linux support is a bit lacking, I'm working on it. All supported Windows versions running in wine can be used with DFHack.

From 2066b805f6ce237fba06633fa773014c05fec00e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 27 Jul 2010 01:52:48 +0200 Subject: [PATCH 17/34] install targets for playground and example utilities --- tools/examples/CMakeLists.txt | 13 +++++++++++++ tools/playground/CMakeLists.txt | 15 +++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/tools/examples/CMakeLists.txt b/tools/examples/CMakeLists.txt index f50ebcc0d..ed2449c16 100644 --- a/tools/examples/CMakeLists.txt +++ b/tools/examples/CMakeLists.txt @@ -54,4 +54,17 @@ TARGET_LINK_LIBRARIES(dfspatterdump dfhack) ADD_EXECUTABLE(dfprocessenum processenum.cpp) TARGET_LINK_LIBRARIES(dfprocessenum dfhack) +install(TARGETS +dfbuildingsdump +dfconstructiondump +dfcreaturedump +dfmaterialtest +dfposition +dfitemdump +dfhotkeynotedump +dftreedump +dfspatterdump +dfprocessenum +RUNTIME DESTINATION bin +) ENDIF (BUILD_DFHACK_EXAMPLES) \ No newline at end of file diff --git a/tools/playground/CMakeLists.txt b/tools/playground/CMakeLists.txt index ff4b97640..06a586c42 100644 --- a/tools/playground/CMakeLists.txt +++ b/tools/playground/CMakeLists.txt @@ -64,4 +64,19 @@ TARGET_LINK_LIBRARIES(dfcatsplosion dfhack) #ADD_EXECUTABLE(dfrenamer renamer.cpp) #TARGET_LINK_LIBRARIES(dfrenamer dfhack) +install(TARGETS +dfmoodump +dftest +dfdoffsets +dfdigger +dfdigger2 +dfcatsplosion +RUNTIME DESTINATION bin +) +IF(UNIX) + install(TARGETS + dfincremental + RUNTIME DESTINATION bin + ) +ENDIF(UNIX) ENDIF (BUILD_DFHACK_PLAYGROUND) \ No newline at end of file From 794ebcc31ebd9789abe9635d29af08d5e649e18f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 27 Jul 2010 02:22:14 +0200 Subject: [PATCH 18/34] incremental vector length search? --- tools/playground/incrementalsearch.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/playground/incrementalsearch.cpp b/tools/playground/incrementalsearch.cpp index 2671ab6bc..96a9039da 100644 --- a/tools/playground/incrementalsearch.cpp +++ b/tools/playground/incrementalsearch.cpp @@ -397,8 +397,9 @@ void FindVectorByLength(DFHack::ContextManager & DFMgr, vector Attach(); SegmentedFinder sf(ranges,DF); - sf.Incremental(0,4,found,vectorAll); - sf.Filter(length * element_size,found,vectorLength); + //sf.Incremental(0,4,found,vectorAll); + //sf.Filter(length * element_size,found,vectorLength); + sf.Incremental(length * element_size, found, vectorLength); DF->Detach(); } } From 34715e0c58ddb019f0f25ee9c5b3624660695cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 27 Jul 2010 02:24:16 +0200 Subject: [PATCH 19/34] Fixes... --- tools/playground/incrementalsearch.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/playground/incrementalsearch.cpp b/tools/playground/incrementalsearch.cpp index 96a9039da..0e9529cf1 100644 --- a/tools/playground/incrementalsearch.cpp +++ b/tools/playground/incrementalsearch.cpp @@ -399,7 +399,7 @@ void FindVectorByLength(DFHack::ContextManager & DFMgr, vector (0,4,found,vectorAll); //sf.Filter(length * element_size,found,vectorLength); - sf.Incremental(length * element_size, found, vectorLength); + sf.Incremental(length * element_size, 4 , found, vectorLength); DF->Detach(); } } From efe6854e3d784fda189c3b9793f59115a342e3b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 27 Jul 2010 04:32:51 +0200 Subject: [PATCH 20/34] furnaces and smelters ... and stuff :) --- output/Memory.xml | 15 +++++++++++++++ tools/examples/buildingsdump.cpp | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/output/Memory.xml b/output/Memory.xml index 1abcf973a..8d38d449c 100755 --- a/output/Memory.xml +++ b/output/Memory.xml @@ -2300,6 +2300,21 @@ map_data_1b60_offset 0x1B9c Toad: caste vector = 0x60 Toad: extract? vector = 0x18f4 Toad: colors = 0x36 + + Buildings + ========= +
0x92eb068
+ 0x164 WRONG + +
0x93302e8
+ 0x4 + 0x8 + + + + + + diff --git a/tools/examples/buildingsdump.cpp b/tools/examples/buildingsdump.cpp index bfb747685..1bcb0a991 100644 --- a/tools/examples/buildingsdump.cpp +++ b/tools/examples/buildingsdump.cpp @@ -79,8 +79,9 @@ int main (int argc,const char* argv[]) { //cout << buildingtypes[temp.type] << " 0x" << hex << temp.origin << endl; //hexdump(DF, temp.origin, 16); - addresses.push_back(temp.origin); + //addresses.push_back(temp.origin); } + addresses.push_back(temp.origin); } else { From 294855faef6072ccb4bfae6ec572ffba939d1d23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 27 Jul 2010 04:48:47 +0200 Subject: [PATCH 21/34] Working custom workshops on linux --- output/Memory.xml | 2 +- tools/examples/buildingsdump.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/output/Memory.xml b/output/Memory.xml index 8d38d449c..fd0072623 100755 --- a/output/Memory.xml +++ b/output/Memory.xml @@ -2304,7 +2304,7 @@ map_data_1b60_offset 0x1B9c Buildings =========
0x92eb068
- 0x164 WRONG + 0xE0
0x93302e8
0x4 diff --git a/tools/examples/buildingsdump.cpp b/tools/examples/buildingsdump.cpp index 1bcb0a991..bfb747685 100644 --- a/tools/examples/buildingsdump.cpp +++ b/tools/examples/buildingsdump.cpp @@ -79,9 +79,8 @@ int main (int argc,const char* argv[]) { //cout << buildingtypes[temp.type] << " 0x" << hex << temp.origin << endl; //hexdump(DF, temp.origin, 16); - //addresses.push_back(temp.origin); + addresses.push_back(temp.origin); } - addresses.push_back(temp.origin); } else { From 0dba3df485735b4a7ebfd4680f5c42f78368b558 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 31 Jul 2010 23:09:39 +0200 Subject: [PATCH 22/34] Testing C and C++ version of maps module in dftest. --- tools/playground/test.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tools/playground/test.cpp b/tools/playground/test.cpp index e62b35d2a..b67608f9a 100644 --- a/tools/playground/test.cpp +++ b/tools/playground/test.cpp @@ -8,10 +8,32 @@ using namespace std; #include +#include +#include +#include +#include using namespace DFHack; int main (int numargs, const char ** args) { + printf("From C: "); + DFHackObject* cman = ContextManager_Alloc("Memory.xml"); + DFHackObject* context = ContextManager_getSingleContext(cman); + if(context) + { + Context_Attach(context); + DFHackObject * maps = Context_getMaps(context); + if(maps) + { + Maps_Start(maps); + uint32_t x,y,z; + Maps_getSize(maps, &x, &y, &z); + printf("Map size: %d, %d, %d\n", x,y,z); + } + } + ContextManager_Free(cman); + + cout << "From C++:"; DFHack::ContextManager DFMgr("Memory.xml"); DFHack::Context * DF; try @@ -29,6 +51,11 @@ int main (int numargs, const char ** args) } // DO STUFF HERE + Maps * m = DF->getMaps(); + m->Start(); + uint32_t x,y,z; + m->getSize(x,y,z); + cout << "Map size " << x << ", "<< y << ", " << z << endl; #ifndef LINUX_BUILD cout << "Done. Press any key to continue" << endl; From 7d684d12b474c98cb3b73919349474a92f5c8b45 Mon Sep 17 00:00:00 2001 From: sizeak Date: Mon, 9 Aug 2010 19:28:35 +0100 Subject: [PATCH 23/34] Job writing for mood material editing --- library/include/dfhack/modules/Creatures.h | 2 +- library/modules/Creatures.cpp | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/library/include/dfhack/modules/Creatures.h b/library/include/dfhack/modules/Creatures.h index 1ba4d36af..1686be281 100644 --- a/library/include/dfhack/modules/Creatures.h +++ b/library/include/dfhack/modules/Creatures.h @@ -380,7 +380,6 @@ namespace DFHack int32_t GetDwarfCivId ( void ); /* Write Functions */ - // write labors of a creature (for Dwarf Therapist) bool WriteLabors(const uint32_t index, uint8_t labors[NUM_CREATURE_LABORS]); bool WriteHappiness(const uint32_t index, const uint32_t happinessValue); bool WriteFlags(const uint32_t index, const uint32_t flags1, const uint32_t flags2); @@ -390,6 +389,7 @@ namespace DFHack bool WriteTraits(const uint32_t index, const t_soul &soul); bool WriteMood(const uint32_t index, const uint16_t mood); bool WriteMoodSkill(const uint32_t index, const uint16_t moodSkill); + bool WriteJob(const t_creature * furball, std::vector const& mat); bool WritePos(const uint32_t index, const t_creature &creature); bool WriteCiv(const uint32_t index, const int32_t civ); diff --git a/library/modules/Creatures.cpp b/library/modules/Creatures.cpp index 0edb713f3..2e9e319cd 100644 --- a/library/modules/Creatures.cpp +++ b/library/modules/Creatures.cpp @@ -519,6 +519,27 @@ bool Creatures::WriteMoodSkill(const uint32_t index, const uint16_t moodSkill) return true; } +bool Creatures::WriteJob(const t_creature * furball, std::vector const& mat) +{ + unsigned int i; + if(!d->Inited) return false; + if(!furball->current_job.active) return false; + Process * p = d->owner; + memory_info * minfo = d->d->offset_descriptor; + + DfVector cmats(p, furball->current_job.occupationPtr + minfo->getOffset("job_materials_vector")); + + for(i=0;iwriteWord(cmats[i] + minfo->getOffset("job_material_maintype"), mat[i].itemType); + p->writeWord(cmats[i] + minfo->getOffset("job_material_sectype1"), mat[i].subType); + p->writeWord(cmats[i] + minfo->getOffset("job_material_sectype2"), mat[i].subIndex); + p->writeDWord(cmats[i] + minfo->getOffset("job_material_sectype3"), mat[i].index); + p->writeDWord(cmats[i] + minfo->getOffset("job_material_flags"), mat[i].flags); + } + return true; +} + bool Creatures::WritePos(const uint32_t index, const t_creature &creature) { if(!d->Started) From 2a6058a971e5ca18b31235c309584ba70b9ef431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Mon, 9 Aug 2010 23:56:28 +0200 Subject: [PATCH 24/34] Remove batch scripts for ancient MSVC versions --- build/generate-MSVC-2002.bat | 4 ---- build/generate-MSVC-2003.bat | 4 ---- 2 files changed, 8 deletions(-) delete mode 100644 build/generate-MSVC-2002.bat delete mode 100644 build/generate-MSVC-2003.bat diff --git a/build/generate-MSVC-2002.bat b/build/generate-MSVC-2002.bat deleted file mode 100644 index 4f6b68065..000000000 --- a/build/generate-MSVC-2002.bat +++ /dev/null @@ -1,4 +0,0 @@ -mkdir build-real -cd build-real -cmake ..\.. -G"Visual Studio 7" -pause \ No newline at end of file diff --git a/build/generate-MSVC-2003.bat b/build/generate-MSVC-2003.bat deleted file mode 100644 index c45e02e4f..000000000 --- a/build/generate-MSVC-2003.bat +++ /dev/null @@ -1,4 +0,0 @@ -mkdir build-real -cd build-real -cmake ..\.. -G"Visual Studio 7 .NET 2003" -pause \ No newline at end of file From 7aeafa01c9c1b16b96742826f7dbad5b6211e8a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 10 Aug 2010 00:30:52 +0200 Subject: [PATCH 25/34] Move offset dumper and position tool to tools/supported. --- tools/examples/CMakeLists.txt | 5 ----- tools/playground/CMakeLists.txt | 5 ----- tools/supported/CMakeLists.txt | 10 ++++++++++ tools/{playground => supported}/dumpoffsets.cpp | 0 tools/{examples => supported}/position.cpp | 0 5 files changed, 10 insertions(+), 10 deletions(-) rename tools/{playground => supported}/dumpoffsets.cpp (100%) rename tools/{examples => supported}/position.cpp (100%) diff --git a/tools/examples/CMakeLists.txt b/tools/examples/CMakeLists.txt index ed2449c16..05d03e3d8 100644 --- a/tools/examples/CMakeLists.txt +++ b/tools/examples/CMakeLists.txt @@ -24,10 +24,6 @@ TARGET_LINK_LIBRARIES(dfcreaturedump dfhack) ADD_EXECUTABLE(dfmaterialtest materialtest.cpp) TARGET_LINK_LIBRARIES(dfmaterialtest dfhack) -# position - check the DF window and cursor parameters -ADD_EXECUTABLE(dfposition position.cpp) -TARGET_LINK_LIBRARIES(dfposition dfhack) - # itemdump - dump the item under the cursor ADD_EXECUTABLE(dfitemdump dfitemdump.cpp) TARGET_LINK_LIBRARIES(dfitemdump dfhack) @@ -59,7 +55,6 @@ dfbuildingsdump dfconstructiondump dfcreaturedump dfmaterialtest -dfposition dfitemdump dfhotkeynotedump dftreedump diff --git a/tools/playground/CMakeLists.txt b/tools/playground/CMakeLists.txt index 06a586c42..a799c7765 100644 --- a/tools/playground/CMakeLists.txt +++ b/tools/playground/CMakeLists.txt @@ -16,10 +16,6 @@ TARGET_LINK_LIBRARIES(dfmoodump dfhack) ADD_EXECUTABLE(dftest test.cpp) TARGET_LINK_LIBRARIES(dftest dfhack) -# just dump offsets of the current version -ADD_EXECUTABLE(dfdoffsets dumpoffsets.cpp) -TARGET_LINK_LIBRARIES(dfdoffsets dfhack) - # bauxite - turn all mechanisms into bauxite mechanisms # Author: Alex Legg #ADD_EXECUTABLE(dfbauxite dfbauxite.cpp) @@ -67,7 +63,6 @@ TARGET_LINK_LIBRARIES(dfcatsplosion dfhack) install(TARGETS dfmoodump dftest -dfdoffsets dfdigger dfdigger2 dfcatsplosion diff --git a/tools/supported/CMakeLists.txt b/tools/supported/CMakeLists.txt index 62100b52e..0a0d93f68 100644 --- a/tools/supported/CMakeLists.txt +++ b/tools/supported/CMakeLists.txt @@ -51,6 +51,14 @@ TARGET_LINK_LIBRARIES(dfflows dfhack) ADD_EXECUTABLE(dfliquids liquids.cpp) TARGET_LINK_LIBRARIES(dfliquids dfhack) +# position - check the DF window and cursor parameters +ADD_EXECUTABLE(dfposition position.cpp) +TARGET_LINK_LIBRARIES(dfposition dfhack) + +# just dump offsets of the current version +ADD_EXECUTABLE(dfdoffsets dumpoffsets.cpp) +TARGET_LINK_LIBRARIES(dfdoffsets dfhack) + IF(UNIX) SET(CURSES_NEED_WIDE "YES") SET(CURSES_NEED_NCURSES "NO") @@ -89,10 +97,12 @@ ENDIF(UNIX) install(TARGETS dfreveal dfprospector +dfposition dfvdig dfcleanmap dfunstuck dfprobe +dfdoffsets dfattachtest dfexpbench dfsuspend diff --git a/tools/playground/dumpoffsets.cpp b/tools/supported/dumpoffsets.cpp similarity index 100% rename from tools/playground/dumpoffsets.cpp rename to tools/supported/dumpoffsets.cpp diff --git a/tools/examples/position.cpp b/tools/supported/position.cpp similarity index 100% rename from tools/examples/position.cpp rename to tools/supported/position.cpp From dac7e45a4474e7f32872e73c3ab0c5db4f071076 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Tue, 10 Aug 2010 01:21:47 +0200 Subject: [PATCH 26/34] Fix Readme and Compile documents. --- COMPILE.rst | 11 ++++++ Compile.html | 26 ++++++++++--- README.rst | 26 ++++++++----- Readme.html | 108 ++++++++++++++++++++++++++++----------------------- 4 files changed, 108 insertions(+), 63 deletions(-) diff --git a/COMPILE.rst b/COMPILE.rst index 82544b9d4..bb5bc1e3a 100644 --- a/COMPILE.rst +++ b/COMPILE.rst @@ -111,6 +111,17 @@ dfhack has a few build targets: * ``make`` will build everything. * ``make expbench`` will build the expbench testing program and the library. +* Some of the utilities and the doxygen documentation won't be + normally built. You can enable them by specifying some extra + CMake variables:: + + BUILD_DFHACK_DOCUMENTATION - generate the documentation (really bad) + BUILD_DFHACK_EXAMPLES - build tools from tools/examples + BUILD_DFHACK_PLAYGROUND - build tools from tools/playground + + Example:: + + cmake .. -DBUILD_DFHACK_EXAMPLES=ON Build types =========== diff --git a/Compile.html b/Compile.html index 1e4180548..06ab65b9d 100644 --- a/Compile.html +++ b/Compile.html @@ -425,11 +425,27 @@ compiler.

Build targets

dfhack has a few build targets:

-
    -
  • If you're only after the library run make dfhack.
  • -
  • make will build everything.
  • -
  • make expbench will build the expbench testing program and the -library.
  • +
      +
    • If you're only after the library run make dfhack.

      +
    • +
    • make will build everything.

      +
    • +
    • make expbench will build the expbench testing program and the +library.

      +
    • +
    • Some of the utilities and the doxygen documentation won't be +normally built. You can enable them by specifying some extra +CMake variables:

      +
      +BUILD_DFHACK_DOCUMENTATION - generate the documentation (really bad)
      +BUILD_DFHACK_EXAMPLES      - build tools from tools/examples
      +BUILD_DFHACK_PLAYGROUND    - build tools from tools/playground
      +
      +

      Example:

      +
      +cmake .. -DBUILD_DFHACK_EXAMPLES=ON
      +
      +
diff --git a/README.rst b/README.rst index bbeb7c3db..c57396c8c 100644 --- a/README.rst +++ b/README.rst @@ -52,7 +52,7 @@ Linux 0.31.04 - 0.31.12 native. There are missing offsets but Map tools should be OK. Linux support is a bit lacking, I'm working on it. All supported Windows versions -running in wine can be used with DFHack. +running in wine can be used with native DFHack binaries. ===== Tools @@ -66,10 +66,6 @@ dfcleanmap Cleans all the splatter that get scattered all over the map. Only exception is mud. It leaves mud alone. -dfexpbench -========== -Just a simple benchmark of the data export speed. - dfliquids ========= A command prompt for liquid creation and manipulation (the Moses @@ -93,10 +89,6 @@ dfreveal Reveals the whole map, waits for input and hides it again. If you close the tool while it waits, the map remains revealed. -dfsuspend -========= -Test of the process suspend/resume mechanism. - dfunstuck ========= Use if you prematurely close any of the tools and DF appears to be @@ -112,6 +104,22 @@ dfflows A tool for checking how many liquid tiles are actively checked for flows. +dfattachtest +============ +Test of the process attach/detach mechanism. + +dfsuspend +========= +Test of the process suspend/resume mechanism. + +dfexpbench +========== +Just a simple benchmark of the data export speed. + +dfdoffsets +========== +Dumps the offsets for the currently running DF version into the terminal. + Your tool here ============== Write one ;) diff --git a/Readme.html b/Readme.html index f7c3417b4..3b28d8c61 100644 --- a/Readme.html +++ b/Readme.html @@ -335,35 +335,37 @@ allow for easier development of new tools.

  • Tools
  • -
  • Using the library as a developer
  • @@ -399,7 +401,7 @@ fix it :)

    0.31.04 - 0.31.12 native. There are missing offsets but Map tools should be OK. Linux support is a bit lacking, I'm working on it. All supported Windows versions -running in wine can be used with DFHack.

    +running in wine can be used with native DFHack binaries.

    @@ -412,12 +414,8 @@ be useful and are cross-platform just like the library itself.

    Cleans all the splatter that get scattered all over the map. Only exception is mud. It leaves mud alone.

    -
    -

    dfexpbench

    -

    Just a simple benchmark of the data export speed.

    -
    -

    dfliquids

    +

    dfliquids

    A command prompt for liquid creation and manipulation (the Moses effect included!) Also allows painting obsidian walls directly.

    @@ -427,44 +425,56 @@ temperatures (creating heat traps). You've been warned.

    -

    dfposition

    +

    dfposition

    Prints the current DF window properties and cursor position.

    -

    dfprospector

    +

    dfprospector

    Lists all available minerals on the map and how much of them there is.

    -

    dfreveal

    +

    dfreveal

    Reveals the whole map, waits for input and hides it again. If you close the tool while it waits, the map remains revealed.

    -
    -

    dfsuspend

    -

    Test of the process suspend/resume mechanism.

    -
    -

    dfunstuck

    +

    dfunstuck

    Use if you prematurely close any of the tools and DF appears to be stuck.

    -

    dfvdig

    +

    dfvdig

    Designates a whole vein for digging. Point the cursor at a vein and run this thing :)

    -

    dfflows

    +

    dfflows

    A tool for checking how many liquid tiles are actively checked for flows.

    +
    +

    dfattachtest

    +

    Test of the process attach/detach mechanism.

    +
    +
    +

    dfsuspend

    +

    Test of the process suspend/resume mechanism.

    +
    +
    +

    dfexpbench

    +

    Just a simple benchmark of the data export speed.

    +
    +
    +

    dfdoffsets

    +

    Dumps the offsets for the currently running DF version into the terminal.

    +
    -

    Using the library as a developer

    +

    Using the library as a developer

    The library is compilable under Linux with GCC and under Windows with MinGW32 and MSVC compilers. It is using the cmake build system. See COMPILE for details.

    @@ -475,17 +485,17 @@ the dfhack repository is welcome and the right thing to do :)

    code does have a lot of comments though (and getting better all the time).

    -

    Contributing to DFHack

    +

    Contributing to DFHack

    Several things should be kept in mind when contributing to DFHack.

    -

    Coding style

    +

    Coding style

    DFhack uses ANSI formatting and four spaces as indentation. Line endings are UNIX. The files use UTF-8 encoding. Code not following this won't make me happy, because I'll have to fix it. There's a good chance I'll make you fix it ;)

    -

    How to get new code into DFHack

    +

    How to get new code into DFHack

    You can send patches or make a clone of the github repo and ask me on the IRC channel to pull your code in. I'll review it and see if there are any problems. I'll fix them if they are minor.

    @@ -495,7 +505,7 @@ this is also a good place to dump new ideas and/or bugs that need fixing.

    -

    Layout for tools

    +

    Layout for tools

    Tools live in the tools/ folder. There, they are split into three categories.

    @@ -516,7 +526,7 @@ nasty business.
    -

    Modules - what are they?

    +

    Modules - what are they?

    DFHack uses modules to partition sets of features into manageable chunks. A module can have both client and server side.

    Client side is the part that goes into the main library and is @@ -533,7 +543,7 @@ server, it allows accelerating the reading of map blocks.

    pretty fast, but needs quite a bit of care to not break.

    -

    Dependencies

    +

    Dependencies

    Internal
    either part of the codebase or statically linked.
    @@ -545,7 +555,7 @@ dependencies for core dfhack should be either public domain or require attribution at most. External dependencies for tools can be either that, or any Free Software licenses.

    -

    Current internal dependencies

    +

    Current internal dependencies

    tinyxml
    used by core dfhack to read offset definitions from Memory.xml
    @@ -557,7 +567,7 @@ DF binaries on Linux.
    -

    Current external dependencies

    +

    Current external dependencies

    wide-character ncurses
    used for the veinlook tool on Linux.
    @@ -566,7 +576,7 @@ DF binaries on Linux.
    -

    Build-time dependencies

    +

    Build-time dependencies

    cmake
    you need cmake to generate the build system and some configuration @@ -577,7 +587,7 @@ headers
    -

    Memory offset definitions

    +

    Memory offset definitions

    The file with memory offset definitions used by dfhack can be found in the output folder.

    From 1dc4aea04f06fa3c143468bae30216c1cd52a995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Wed, 11 Aug 2010 06:41:39 +0200 Subject: [PATCH 27/34] Offset editor skeleton app (just dead UI, no data yet) --- CMakeLists.txt | 5 +- doc/index.dxgen | 73 ++ offsetedit/CMakeLists.txt | 5 + offsetedit/src/CMakeLists.txt | 26 + offsetedit/src/dfedit.cpp | 81 ++ offsetedit/src/dfedit.h | 24 + offsetedit/src/gui/dIsForDwarf.svg | 1621 ++++++++++++++++++++++++++++ offsetedit/src/gui/main.ui | 190 ++++ offsetedit/src/gui/main_16.png | Bin 0 -> 718 bytes offsetedit/src/gui/main_32.png | Bin 0 -> 1216 bytes offsetedit/src/gui/main_64.png | Bin 0 -> 2287 bytes offsetedit/src/gui/resources.qrc | 7 + offsetedit/src/main.cpp | 11 + 13 files changed, 2040 insertions(+), 3 deletions(-) create mode 100644 doc/index.dxgen create mode 100644 offsetedit/CMakeLists.txt create mode 100644 offsetedit/src/CMakeLists.txt create mode 100644 offsetedit/src/dfedit.cpp create mode 100644 offsetedit/src/dfedit.h create mode 100644 offsetedit/src/gui/dIsForDwarf.svg create mode 100644 offsetedit/src/gui/main.ui create mode 100644 offsetedit/src/gui/main_16.png create mode 100644 offsetedit/src/gui/main_32.png create mode 100644 offsetedit/src/gui/main_64.png create mode 100644 offsetedit/src/gui/resources.qrc create mode 100644 offsetedit/src/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b314b94b..50072ab9b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,8 @@ -INCLUDE(CPack) # main project file. use it from a build sub-folder, see COMPILE for details PROJECT (dfhack) cmake_minimum_required(VERSION 2.6) SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake/Modules) -SET ( DFHACK_VERSION "0.4.0.3-dev" ) +SET ( DFHACK_VERSION "0.4.1.0-dev" ) # disable warning, autosearch if(COMMAND cmake_policy) @@ -32,8 +31,8 @@ include_directories (${CMAKE_SOURCE_DIR}/library/depends/tinyxml/) include_directories (${CMAKE_SOURCE_DIR}/library/depends/argstream/) add_subdirectory (library) +add_subdirectory (offsetedit) add_subdirectory (library/shm) -#add_subdirectory (dfhack/python) add_subdirectory (tools/examples) add_subdirectory (tools/playground) add_subdirectory (tools/supported) diff --git a/doc/index.dxgen b/doc/index.dxgen new file mode 100644 index 000000000..d356131f6 --- /dev/null +++ b/doc/index.dxgen @@ -0,0 +1,73 @@ +/******************************************************************************* +www.sourceforge.net/projects/dfhack +Copyright (c) 2009 Petr Mrázek (peterix) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +/*! \page index +
    +\htmlonly +

    DFHack

    + +\endhtmlonly +
    + +

    Introduction

    +DFHack is a Dwarf Fortress memory access library and a set of basic tools using +this library. The library is a work in progress, so things might change as more +tools are written for it. + +It is an attempt to unite the various ways tools access DF memory and allow for +easier development of new tools. In general, you can use it to move memory +objects in and out of Dwarf Fortress really fast, regardless of DF version or OS. + +First part of the manual deals with the basic of using DFHack as a library: +
      +PLACEHOLDER TERRITORY! + +
    • Section \ref blah discusses some weird stuff + this is a link +
    • Section \ref starting tells you how to cromulate at a distance! +
    + +Second part has some details on DFHack development: + +
      +
    • Section \ref starting tells you how to cromulate at a distance! +
    + +The third part describes how to use the supported DFHack utilities + +
      +
    • Section \ref dfattachtest shows how to use the \c dfattachtest program +
    • Section \ref dfcleanmap shows how to use the \c dfcleanmap program +
    • Section \ref dfexpbench shows how to use the \c dfexpbench program +
    • Section \ref dfflows shows how to use the \c dfflows program +
    • Section \ref dfliquids shows how to use the \c dfliquids program +
    • Section \ref dfprobe shows how to use the \c dfprobe program +
    • Section \ref dfprospector shows how to use the \c dfprospector program +
    • Section \ref dfreveal shows how to use the \c dfreveal program +
    • Section \ref dfsuspend shows how to use the \c dfsuspend program +
    • Section \ref dfunstuck shows how to use the \c dfunstuck program +
    • Section \ref dfvdig shows how to use the \c dfvdig program +
    +*/ + diff --git a/offsetedit/CMakeLists.txt b/offsetedit/CMakeLists.txt new file mode 100644 index 000000000..e4d379f04 --- /dev/null +++ b/offsetedit/CMakeLists.txt @@ -0,0 +1,5 @@ +project(dfoffsetedit) +cmake_minimum_required(VERSION 2.6) +find_package(Qt4 REQUIRED) + +add_subdirectory (src) \ No newline at end of file diff --git a/offsetedit/src/CMakeLists.txt b/offsetedit/src/CMakeLists.txt new file mode 100644 index 000000000..f5981c879 --- /dev/null +++ b/offsetedit/src/CMakeLists.txt @@ -0,0 +1,26 @@ +include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}) + +set ( dfoffsetedit_SRCS + dfedit.cpp + main.cpp +) + +SET ( dfoffsetedit_UI + gui/main.ui +) + +SET( dfoffsetedit_RCS + gui/resources.qrc +) + +# this command will generate rules that will run rcc on all files from dfoffsetedit_RCS +# in result dfoffsetedit_RC_SRCS variable will contain paths to files produced by rcc +QT4_ADD_RESOURCES( dfoffsetedit_RC_SRCS ${dfoffsetedit_RCS} ) + +QT4_WRAP_UI(dfoffsetedit_SRCS ${dfedit_UI}) +qt4_automoc(${dfoffsetedit_SRCS}) + +#ADD_EXECUTABLE( sample ${SAMPLE_SRCS} ${SAMPLE_MOC_SRCS} ${SAMPLE_RC_SRCS} ${SAMPLE_UI_HDRS}) + +add_executable(dfoffsetedit ${dfoffsetedit_SRCS} ${dfoffsetedit_RC_SRCS}) +target_link_libraries(dfoffsetedit ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY}) \ No newline at end of file diff --git a/offsetedit/src/dfedit.cpp b/offsetedit/src/dfedit.cpp new file mode 100644 index 000000000..cb1c1b9ef --- /dev/null +++ b/offsetedit/src/dfedit.cpp @@ -0,0 +1,81 @@ +#include "dfedit.h" +#include +#include + +dfedit::dfedit(QWidget *parent): QMainWindow(parent) +{ + ui.setupUi(this); + connect(ui.actionOpen,SIGNAL(triggered(bool)),this,SLOT(slotOpen(bool))); + connect(ui.actionQuit,SIGNAL(triggered(bool)),this,SLOT(slotQuit(bool))); + connect(ui.actionRun_DF,SIGNAL(triggered(bool)),this,SLOT(slotRunDF(bool))); + connect(ui.actionSave,SIGNAL(triggered(bool)),this,SLOT(slotSave(bool))); + connect(ui.actionSave_As,SIGNAL(triggered(bool)),this,SLOT(slotSaveAs(bool))); + connect(ui.actionSetup_DF_executables,SIGNAL(triggered(bool)),this,SLOT(slotSetupDFs(bool))); + ui.actionOpen->setIcon(QIcon::fromTheme("document-open")); + ui.actionOpen->setIconText("Open"); + ui.actionSave->setIcon(QIcon::fromTheme("document-save")); + ui.actionSave->setIconText("Save"); + ui.actionSave_As->setIcon(QIcon::fromTheme("document-save-as")); + ui.actionSave_As->setIconText("Save As"); + ui.actionRun_DF->setIcon(QIcon::fromTheme("system-run")); + ui.actionRun_DF->setIconText("Run DF"); + ui.actionQuit->setIcon(QIcon::fromTheme("application-exit")); + ui.actionQuit->setIconText("Run DF"); +} + +dfedit::~dfedit() +{} + +void dfedit::slotOpen(bool ) +{ + QFileDialog fd(this,"Locate the Memoxy.xml file"); + fd.setNameFilter("Memory definition (Memory.xml)"); + fd.setFileMode(QFileDialog::ExistingFile); + fd.setAcceptMode(QFileDialog::AcceptOpen); + int result = fd.exec(); + if(result == QDialog::Accepted) + { + QStringList files = fd.selectedFiles(); + QString file = files[0]; + qDebug() << "File:" << file; + } +} + +void dfedit::slotQuit(bool ) +{ + close(); +} + +void dfedit::slotSave(bool ) +{ + // blah +} + +void dfedit::slotRunDF(bool ) +{ + // blah +} + +void dfedit::slotSaveAs(bool ) +{ + QFileDialog fd(this,"Choose file to save as..."); + fd.setNameFilter("Memory definition (*.xml)"); + fd.setFileMode(QFileDialog::AnyFile); + fd.selectFile("Memory.xml"); + fd.setAcceptMode(QFileDialog::AcceptSave); + int result = fd.exec(); + if(result == QDialog::Accepted) + { + QStringList files = fd.selectedFiles(); + QString file = files[0]; + qDebug() << "File:" << file; + } +} + +void dfedit::slotSetupDFs(bool ) +{ + // dialog showing all the versions in Memory.xml that lets the user set up ways to run those versions... + // currently unimplemented +} + +#include "dfedit.moc" diff --git a/offsetedit/src/dfedit.h b/offsetedit/src/dfedit.h new file mode 100644 index 000000000..dfc03421e --- /dev/null +++ b/offsetedit/src/dfedit.h @@ -0,0 +1,24 @@ +#ifndef dfedit_H +#define dfedit_H + +#include +#include "ui_main.h" + +class dfedit : public QMainWindow +{ + Q_OBJECT +public: + dfedit(QWidget *parent = 0); + virtual ~dfedit(); + +private: + Ui::MainWindow ui; +public slots: + void slotOpen(bool); + void slotQuit(bool); + void slotSave(bool); + void slotSaveAs(bool); + void slotRunDF(bool); + void slotSetupDFs(bool); +}; +#endif // dfedit_H diff --git a/offsetedit/src/gui/dIsForDwarf.svg b/offsetedit/src/gui/dIsForDwarf.svg new file mode 100644 index 000000000..51b7acf0f --- /dev/null +++ b/offsetedit/src/gui/dIsForDwarf.svg @@ -0,0 +1,1621 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D + D + + + + + + X + + + + + X + + + + + + + + + + + + + 32 x 32 + 16 x 16 + X + + + + + X + + + + + + diff --git a/offsetedit/src/gui/main.ui b/offsetedit/src/gui/main.ui new file mode 100644 index 000000000..afa830d38 --- /dev/null +++ b/offsetedit/src/gui/main.ui @@ -0,0 +1,190 @@ + + + MainWindow + + + + 0 + 0 + 633 + 622 + + + + MainWindow + + + + :/main_icon/main_64.png:/main_icon/main_64.png + + + + + + + + + + + + toolBar + + + TopToolBarArea + + + false + + + + + + + + + QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable + + + Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea + + + Description + + + 2 + + + + + + + + 1 + 1 + + + + + 0 + 0 + + + + QFrame::NoFrame + + + QFrame::Raised + + + 1 + + + 0 + + + <h1>Title text</h1><p>Some other text. It seriously rocks.</p> + + + Qt::AutoText + + + false + + + Qt::AlignTop + + + true + + + + + + + + + false + + + QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable + + + Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea + + + Entries + + + 1 + + + + + + + + + + + + + 0 + 0 + 633 + 22 + + + + + File + + + + + + + + + Settings + + + + + + + + + Open + + + + + Save + + + + + Save As + + + + + Quit + + + + + Run DF + + + + + Setup DF executables + + + + + + + + diff --git a/offsetedit/src/gui/main_16.png b/offsetedit/src/gui/main_16.png new file mode 100644 index 0000000000000000000000000000000000000000..04367e58d58a77cf700d43958624f94af94da95d GIT binary patch literal 718 zcmV;<0x|uGP)(_t9LKfm8^&T?y`&1#~C6RCNrj3{w3rgjL5 zu7Odvpg|#lrx@}c1`(cwV59O<(Ix5Shz$YasTF~GX^I;;IWr$ zy#rP{lgTfsK)^ebk5P-kiFPR+F=(jl;IQl5yz-gh!T0zYS22v^ZYgb1A>w`j1%ho*%<&FQ={a_8$eH`|M9t)hM))%jH{BFk>nP zEatS!dww}u!_2QL>OJeciY55=V-NGomFT(Bk5K@-rm~F~hQhPqIslpuX1I0VNBgBt zQd7?Ve76Mv_%P`zoZF5q?c|1KtHE2F;rhkz966NcZ&styDmmRcw#-UDLKmjD1Wzo2-lLkk zoen9=rzJ4h=h`5vtK50q#KMY|!KV!XobQ+=aAE;4Fn!Y@A%f#do=oN{+oCPaUiW@i zmZ7AlkgxO9JbN8kY`b+HK3`taw6#z;97qBvrEH8u;{IID8Qq=_X4w`?Ius6fjODFm zYzzdvGb1BkCt=nPE9)?qDe80@{#@(p>nNl1Kco=dM=rG})Bpeg07*qoM6N<$f|q1S ACIA2c literal 0 HcmV?d00001 diff --git a/offsetedit/src/gui/main_32.png b/offsetedit/src/gui/main_32.png new file mode 100644 index 0000000000000000000000000000000000000000..39137fed1012bfcbfc417a153df8754107f772a5 GIT binary patch literal 1216 zcmV;x1V8(UP)TO<;$osph|!qs#_aMnF_|XDcwyp|#%#M-EE;E*ZJCN(FomVnVnmzGfgs->g9h4; zulM!hK{!u@H0S{c z@lZSD*Fl2>2Av^Qpj&}i513o^Af*3R97IfmB>IHf#TeTFkmXU+*2NP+jGDFt;C7Fi zz~|bYIAo-+V$EBMg7CS-m?;3b-J>S2w|AQ}2cx9$&Bt9F**{A3N_f4!?eQQq`y-ah z=Yo7YG)Uz|VO}{hh|#E$Zc+fayC|Wk20l7lO?Xkez1ij!&Yb*}gN+mT{P}C%b%<`e z*Xwh6y*OpLY&iyC?Z9c4eSA8T{$UHBz3U+>LwlHut&5y|&jvv40|8E-_=AIu6Ik;W z0SJbp;UW-q;B(3H%}91gQQ|SnzN$!ExKc&S8%;5@eeJn^ax7vZ6(u2FJTw#$2UrMg zKK${s!`Ru0ZmJCoXVX7y;n;!Uh%eow@b|bGPhSB!mKEBZ{hB^se_xKLuOJRYg#l(t zVg8BE&XIOW+;I8_?!uKyeEvL*@AVgi==gMIOuQti2}X)uiJ(go*Q@?%S5*V=e6mO5 z+gm-yKKm4vC83yjqcIUcG(@OAZNs5&mpaS16G*3E*HXmy_N#uT?!>NuqUen&+LKh30RWtLS7`v&?P5nMAADZ3 z)!~vqM)AzkR}hnu0QXe}w=BLbfM7U{YuAfo{14a6QEa`t^8f&Wh4_!#{>LVF2B2=w zEXP~^BF(5$Q5@!}`icJ+;Lwv}oIP`cTbD2MbNjbc6o>Ko^H^21-JfY5CoO6ICj>~| zX>uk5fP2e>?9Lba+Dsb;>wFc9DRBuMQL>%z}zEhxWo{P%i5VLih+R<3l}@e z@DJo@+TMKW&lJVG6)^WmU~!59GC4%FNs>4Vs%qeitCgCz=DJB9st%+eKI;LCQxfm8 zxiuL?Vbn9bZuPY@09@@ViD_$d-cCVWRLpDjKyrv8Yb-!uJ{^FcdJFmecCM!F__ITi zS|OP@L}h_+*y3)-`m-`VoypO+nlRQnx%T76W%T~14{D@#WiQcnu7mrl7UGE8G#?hD z!{LZ@bU1R9`FYEiV`GE+V7gQk4+a`-GwjY^;?d_1;PdCBs@j+Cw_CYL5?ueKkeh?K z1m;bYSQlw}WQKF@d)CC~ymq_I+16I3S(>;%BT*S|l;tlU9%5uNiyv+j#l$AJjhWl+ zHfKvq+2(zTe-VkmjqNypsp?;eLwxas005$NPM#g9iJM!a%kY!|1cZKy>We4;oa+9L e1<1~Q&;J2p)ZwhNpL%%!0000Lyfe45wMh!8=piK&5cN46PXuQ(i0uasbo<$fD9WFa@9! zKo9^s0EkVrW&)KNV6F1F)mJU#zQt0SGa+pPIIbh#TIHkABB3Kc-Ck4v1vt*jIGt4< zL6~m0Uio+={tiy3y;%@?{2b?#Qt2(F8F2fQ2b42G5T@Im&MFVbd6`stGfjZk>t&qI zn%ks&6j~(Ic)VWoB$y(=>-91&SB*yy0=H55D3l}w+FdU5Bp4>(PEdYR^$^;g>xpYg zp9Dh$+zHAz)eYkCYh8G}=`u1i;_Y2}BoGO>6O=D2;_>F*GqBr4u&jiU7F@yat zoJNi-Jlp2Xo&n%cNJdHM1Q3jp(9H8)exEP-5}A|$j`K1vzNr7@ceeZ+Kizc!3}bu= zern(6@XG!bM7bS zmj;PS0YD&RLs8wA5#(*Ed)1Yr*zmw8Dp!r;i&Z1YpFgG117N$q6*CdN*=^ie(zF3) zoSaLSbI`P_8hd`R2BJu|JMMX5e7pIw=Dod7euU?rI*+ezx|&pZelnAwJdn&;(vnmW zz;PY_N+E(I`-48*M$RzB3{1ezRMO8aLscVt|05^hmqKphR30kp30s(S_mAZ%b z_TP%|eA`N*Tv7fcw$)!#wTA>U0TV&8Obp5ZYPww+Ma~jHE2Mq))e4-wkVlkz`kSAs z+Wccm%dUo&?a+sQD9r+N<9ShJ@a(G(PE0cHEG`_O&KeN|sSC13>O^*N|Mgjmx%h<#lbYaBf zdvZt27;acQN|bkH&!jab88Ka{rp1*w(p5lQ+G^I0VqL`;7UoW&sgCSTy61(7GG<_A zQ8kUJn;GcnEX4NBpXtiAJ$Du?1LV4uQJxw`94#}jlmGxYc(jN}z?u~ks z<)}*exBgm!%5C+A5~my2kKmqCYi9v90wjq+-<5epxr0ZG@y|D8-`EP9OwR2}=qEqD*zAI`w`0G`Z@vwf?H1 zq^TPEb;gR_;Z{FjZ%&nj#rb3cw5mxCcNP+#%W_1p!?ZC}DsOLA7Flc52Q&^lo#shk z7|Bq9gx20(_qq9oYKP4I2I?vij%!q9S~RVXAoTdnl2BH}C*8Ih57-gpZRop_gTp7Z zzxFTpm+STq$cd6iw;0J2XqU)nNoo?naXv{V!EKlXM&sj)B7@i8E<^d|2IPIA2`jcV zpe;#;_`uO(1VZG!|KGpRjaT;c>g*9Jm3QkFQzu=2IL;^We3xMol$Be9ekba_Q;Y9% zRk(h`L9FY!Ih}z&9Vyn8iDK8+`*3RiKTxtrX>-)d^L+9OF@O*Y_nXe+N*BM2A>hodCO z^>%@FAXqBDs21_Ntdlq8>aENS2|s%2evC~REoO>gY{HHeTN=PHQbHP?WhIm>60mw% z0ISLZ$g)Q;d_4<8quB`0Fexh!7|aJ4B_R;9q4VrQoH&!-X%^)kf+#W=7<6G^(4`SU zrmj3-A{;jIJ3O-cAw2fu&l~NM0@70+Fqsb^k#Ow8d_$#fbdbLCKne*FpU)==LYHYj zfiASxdGpExDW4gN`U$s#1iFW&(mpsTm!Hnn`5`UeUhUqR0flpejl*-3Ptc0$(o-Iw zc5>9}q>6P%XQ`bX29zbYR)DVZ0QJ-3(V4(lkjrNJX)6x^{{tufI-Z~?1zi9D002ov JPDHLkV1jsOK7s%M literal 0 HcmV?d00001 diff --git a/offsetedit/src/gui/resources.qrc b/offsetedit/src/gui/resources.qrc new file mode 100644 index 000000000..707294060 --- /dev/null +++ b/offsetedit/src/gui/resources.qrc @@ -0,0 +1,7 @@ + + + main_64.png + main_16.png + main_32.png + + diff --git a/offsetedit/src/main.cpp b/offsetedit/src/main.cpp new file mode 100644 index 000000000..36334656d --- /dev/null +++ b/offsetedit/src/main.cpp @@ -0,0 +1,11 @@ +#include +#include "dfedit.h" + + +int main(int argc, char** argv) +{ + QApplication app(argc, argv); + dfedit appGui; + appGui.show(); + return app.exec(); +} From c8092afddcc42ffccbd3f0fec18ff191c1d932cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Wed, 11 Aug 2010 08:08:08 +0200 Subject: [PATCH 28/34] A fake-ish data model that at least shows something (can load any xml file) --- offsetedit/CMakeLists.txt | 9 +- offsetedit/src/CMakeLists.txt | 3 +- offsetedit/src/dfedit.cpp | 36 ++++-- offsetedit/src/dfedit.h | 2 + offsetedit/src/memxmlModel.cpp | 209 +++++++++++++++++++++++++++++++++ offsetedit/src/memxmlModel.h | 30 +++++ 6 files changed, 274 insertions(+), 15 deletions(-) create mode 100644 offsetedit/src/memxmlModel.cpp create mode 100644 offsetedit/src/memxmlModel.h diff --git a/offsetedit/CMakeLists.txt b/offsetedit/CMakeLists.txt index e4d379f04..246f3ba3d 100644 --- a/offsetedit/CMakeLists.txt +++ b/offsetedit/CMakeLists.txt @@ -1,5 +1,8 @@ project(dfoffsetedit) cmake_minimum_required(VERSION 2.6) -find_package(Qt4 REQUIRED) - -add_subdirectory (src) \ No newline at end of file +find_package(Qt4 QUIET) +if(QT4_FOUND) + add_subdirectory (src) +else(QT4_FOUND) + MESSAGE(STATUS "Qt4 libraries not found - offset editor can't be built.") +endif(QT4_FOUND) diff --git a/offsetedit/src/CMakeLists.txt b/offsetedit/src/CMakeLists.txt index f5981c879..dc2eeea6e 100644 --- a/offsetedit/src/CMakeLists.txt +++ b/offsetedit/src/CMakeLists.txt @@ -2,6 +2,7 @@ include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}) set ( dfoffsetedit_SRCS dfedit.cpp + memxmlModel.cpp main.cpp ) @@ -23,4 +24,4 @@ qt4_automoc(${dfoffsetedit_SRCS}) #ADD_EXECUTABLE( sample ${SAMPLE_SRCS} ${SAMPLE_MOC_SRCS} ${SAMPLE_RC_SRCS} ${SAMPLE_UI_HDRS}) add_executable(dfoffsetedit ${dfoffsetedit_SRCS} ${dfoffsetedit_RC_SRCS}) -target_link_libraries(dfoffsetedit ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY}) \ No newline at end of file +target_link_libraries(dfoffsetedit ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTXML_LIBRARY} ) \ No newline at end of file diff --git a/offsetedit/src/dfedit.cpp b/offsetedit/src/dfedit.cpp index cb1c1b9ef..dc4fc3205 100644 --- a/offsetedit/src/dfedit.cpp +++ b/offsetedit/src/dfedit.cpp @@ -1,6 +1,7 @@ #include "dfedit.h" #include #include +#include "memxmlModel.h" dfedit::dfedit(QWidget *parent): QMainWindow(parent) { @@ -12,15 +13,15 @@ dfedit::dfedit(QWidget *parent): QMainWindow(parent) connect(ui.actionSave_As,SIGNAL(triggered(bool)),this,SLOT(slotSaveAs(bool))); connect(ui.actionSetup_DF_executables,SIGNAL(triggered(bool)),this,SLOT(slotSetupDFs(bool))); ui.actionOpen->setIcon(QIcon::fromTheme("document-open")); - ui.actionOpen->setIconText("Open"); + ui.actionOpen->setIconText(tr("Open")); ui.actionSave->setIcon(QIcon::fromTheme("document-save")); - ui.actionSave->setIconText("Save"); + ui.actionSave->setIconText(tr("Save")); ui.actionSave_As->setIcon(QIcon::fromTheme("document-save-as")); - ui.actionSave_As->setIconText("Save As"); + ui.actionSave_As->setIconText(tr("Save As")); ui.actionRun_DF->setIcon(QIcon::fromTheme("system-run")); - ui.actionRun_DF->setIconText("Run DF"); + ui.actionRun_DF->setIconText(tr("Run DF")); ui.actionQuit->setIcon(QIcon::fromTheme("application-exit")); - ui.actionQuit->setIconText("Run DF"); + ui.actionQuit->setIconText(tr("Run DF")); } dfedit::~dfedit() @@ -28,16 +29,29 @@ dfedit::~dfedit() void dfedit::slotOpen(bool ) { - QFileDialog fd(this,"Locate the Memoxy.xml file"); - fd.setNameFilter("Memory definition (Memory.xml)"); + QFileDialog fd(this,tr("Locate the Memoxy.xml file")); + fd.setNameFilter(tr("Memory definition (Memory.xml)")); fd.setFileMode(QFileDialog::ExistingFile); fd.setAcceptMode(QFileDialog::AcceptOpen); int result = fd.exec(); if(result == QDialog::Accepted) { QStringList files = fd.selectedFiles(); - QString file = files[0]; - qDebug() << "File:" << file; + QString fileName = files[0]; + QDomDocument doc("memxml"); + QFile file(fileName); + if(!file.open(QIODevice::ReadOnly)) + { + return; + } + if(!doc.setContent(&file)) + { + file.close(); + return; + } + mod = new MemXMLModel(doc,this); + ui.entryView->setModel(mod); + file.close(); } } @@ -58,8 +72,8 @@ void dfedit::slotRunDF(bool ) void dfedit::slotSaveAs(bool ) { - QFileDialog fd(this,"Choose file to save as..."); - fd.setNameFilter("Memory definition (*.xml)"); + QFileDialog fd(this,tr("Choose file to save as...")); + fd.setNameFilter(tr("Memory definition (*.xml)")); fd.setFileMode(QFileDialog::AnyFile); fd.selectFile("Memory.xml"); fd.setAcceptMode(QFileDialog::AcceptSave); diff --git a/offsetedit/src/dfedit.h b/offsetedit/src/dfedit.h index dfc03421e..2a30ef7aa 100644 --- a/offsetedit/src/dfedit.h +++ b/offsetedit/src/dfedit.h @@ -3,6 +3,7 @@ #include #include "ui_main.h" +#include "memxmlModel.h" class dfedit : public QMainWindow { @@ -13,6 +14,7 @@ public: private: Ui::MainWindow ui; + MemXMLModel * mod; public slots: void slotOpen(bool); void slotQuit(bool); diff --git a/offsetedit/src/memxmlModel.cpp b/offsetedit/src/memxmlModel.cpp new file mode 100644 index 000000000..ce03f9bce --- /dev/null +++ b/offsetedit/src/memxmlModel.cpp @@ -0,0 +1,209 @@ +/**************************************************************************** +** +** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved. +** +** This file was part of the example classes of the Qt Toolkit. +** Now it's being hacked into some other shape... :) +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of +** this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** http://www.trolltech.com/products/qt/opensource.html +** +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://www.trolltech.com/products/qt/licensing.html or contact the +** sales department at sales@trolltech.com. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#include "memxmlModel.h" +#include +#include +#include +#include + +class DomItem +{ +public: + DomItem(QDomNode &node, int row, DomItem *parent = 0); + ~DomItem(); + DomItem *child(int i); + DomItem *parent(); + QDomNode node() const; + int row(); + +private: + QDomNode domNode; + QHash childItems; + DomItem *parentItem; + int rowNumber; +}; + +DomItem::DomItem(QDomNode &node, int row, DomItem *parent) +{ + domNode = node; + // Record the item's location within its parent. + rowNumber = row; + parentItem = parent; +} + +DomItem::~DomItem() +{ + QHash::iterator it; + for (it = childItems.begin(); it != childItems.end(); ++it) + delete it.value(); +} + +QDomNode DomItem::node() const +{ + return domNode; +} + +DomItem *DomItem::parent() +{ + return parentItem; +} + +DomItem *DomItem::child(int i) +{ + if (childItems.contains(i)) + return childItems[i]; + + if (i >= 0 && i < domNode.childNodes().count()) { + QDomNode childNode = domNode.childNodes().item(i); + DomItem *childItem = new DomItem(childNode, i, this); + childItems[i] = childItem; + return childItem; + } + return 0; +} + +int DomItem::row() +{ + return rowNumber; +} + +MemXMLModel::MemXMLModel(QDomDocument document, QObject *parent) + : QAbstractItemModel(parent), domDocument(document) +{ + rootItem = new DomItem(domDocument, 0); +} + +MemXMLModel::~MemXMLModel() +{ + delete rootItem; +} + +int MemXMLModel::columnCount(const QModelIndex &/*parent*/) const +{ + return 3; +} + +QVariant MemXMLModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (role != Qt::DisplayRole) + return QVariant(); + + DomItem *item = static_cast(index.internalPointer()); + + QDomNode node = item->node(); + QStringList attributes; + QDomNamedNodeMap attributeMap = node.attributes(); + + switch (index.column()) { + case 0: + return node.nodeName(); + case 1: + for (int i = 0; (unsigned int)(i) < attributeMap.count(); ++i) { + QDomNode attribute = attributeMap.item(i); + attributes << attribute.nodeName() + "=\"" + +attribute.nodeValue() + "\""; + } + return attributes.join(" "); + case 2: + return node.nodeValue().split("\n").join(" "); + default: + return QVariant(); + } +} + +Qt::ItemFlags MemXMLModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + return Qt::ItemIsEnabled; + + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; +} + +QVariant MemXMLModel::headerData(int section, Qt::Orientation orientation, + int role) const +{ + if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { + switch (section) { + case 0: + return tr("Name"); + case 1: + return tr("Attributes"); + case 2: + return tr("Value"); + default: + return QVariant(); + } + } + + return QVariant(); +} + +QModelIndex MemXMLModel::index(int row, int column, const QModelIndex &parent) +const +{ + DomItem *parentItem; + + if (!parent.isValid()) + parentItem = rootItem; + else + parentItem = static_cast(parent.internalPointer()); + + DomItem *childItem = parentItem->child(row); + if (childItem) + return createIndex(row, column, childItem); + else + return QModelIndex(); +} + +QModelIndex MemXMLModel::parent(const QModelIndex &child) const +{ + if (!child.isValid()) + return QModelIndex(); + + DomItem *childItem = static_cast(child.internalPointer()); + DomItem *parentItem = childItem->parent(); + + if (!parentItem || parentItem == rootItem) + return QModelIndex(); + + return createIndex(parentItem->row(), 0, parentItem); +} + +int MemXMLModel::rowCount(const QModelIndex &parent) const +{ + DomItem *parentItem; + + if (!parent.isValid()) + parentItem = rootItem; + else + parentItem = static_cast(parent.internalPointer()); + + return parentItem->node().childNodes().count(); +} + +#include "memxmlModel.moc" \ No newline at end of file diff --git a/offsetedit/src/memxmlModel.h b/offsetedit/src/memxmlModel.h new file mode 100644 index 000000000..2879f4b5f --- /dev/null +++ b/offsetedit/src/memxmlModel.h @@ -0,0 +1,30 @@ +#ifndef memxmlModel_H +#define memxmlModel_H + +#include +#include + +class DomItem; + +class MemXMLModel : public QAbstractItemModel +{ + Q_OBJECT +public: + MemXMLModel(QDomDocument document, QObject *parent = 0); + ~MemXMLModel(); + + QVariant data(const QModelIndex &index, int role) const; + Qt::ItemFlags flags(const QModelIndex &index) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + QModelIndex index(int row, int column, + const QModelIndex &parent = QModelIndex()) const; + QModelIndex parent(const QModelIndex &child) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + +private: + QDomDocument domDocument; + DomItem *rootItem; +}; +#endif // memxmlModel From ca7b2219da52d6305e13a7d7e44478cc77ba0428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Wed, 11 Aug 2010 12:56:06 +0200 Subject: [PATCH 29/34] Tedious Memory.xml rewrite, part 1 --- offsetedit/Memory-ng.xml | 2094 ++++++++++++++++++++++++++++++++ offsetedit/src/memxmlModel.cpp | 19 +- 2 files changed, 2104 insertions(+), 9 deletions(-) create mode 100755 offsetedit/Memory-ng.xml diff --git a/offsetedit/Memory-ng.xml b/offsetedit/Memory-ng.xml new file mode 100755 index 000000000..163d6f860 --- /dev/null +++ b/offsetedit/Memory-ng.xml @@ -0,0 +1,2094 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TODO: Parse this and turn it into Job tags + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .,:rsr, + :2;,;r2A@@5 + @2::s5A#@@@ @r. . + sd;:riXA#@@ :@@@Gir;;AS9 + Bs::sS3A#@2 @@#AhXirsS#; + iHrLr5d#@@@ .@#95sr;;rie + i*' `*@3 @@A2sr;:;r#5 + :..:rll: @@A5sr::r3@ + @Hr;iZ#@@@@ `:rr;;;;: + S@r.;i2#@@@ @s. .. + @2::ri2A@@# B@G2ir:...5i + :@r,r3X##@@ @G5sr:..,:A + .@Ar;;rSB@@# H#2sr;,..,is + .' `* ,@ASs;:..,:B + ;rr;:,..,:. + `''' + W I N D O W S + and + W I N E + + + + + + + Basic things + ============ + + + Vector layout in MSVC 9: + DWORD Allocator? + DWORD ? + DWORD ? + DWORD Start + DWORD End + DWORD AllocationEnd + + + +
    + + Position and window dimensions + ============================== +
    +
    +
    +
    + +
    + Found addresses: (next to each other!) + 0x17f5ab8 + 0x17f5ac0 + 0x17f5ac8 + 0x17f5ad0 + + GUI State + ========= +
    + Found addresses: + 0x146e45f + 0x185b677 + + Bogus:
    + +
    + + Bogus:
    + + Map stuff + ========= +
    + + + + + + + + + local features + global features + + Map Features + ============ + WORLD + 0x54374 +
    + + + + WORLD + 0x54440 +
    + + + + + * map size in blocks * +
    +
    +
    + + * map size in tiles * +
    +
    +
    + + * Suspected region coords * + WORLD + 0x525C8 +
    + WORLD + 0x525CC +
    + WORLD + 0x525D0 +
    + + * World size * (WORDs) +
    +
    + +
    +
    + + + + + + + vector + vector + + Name struct + =========== + + + + + Creatures + ========= +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + the skill that will be increased at the end of the mood (or not) + seems to be indexes in the list of possible colors defined in the raws for each group + + + + + + + + Souls + ===== + + + + + + Job structure + ============= + Incrementaly assigned + seems to be just like the old occupations + + + Job materials + ============= + like mood materials, 0=bars, 4=stone, 5=wood, 57=cloth, 54=leather ... + subsubtype ? + subtype ? + index of material (for example, 2 is for silver) + set only for shell / bone mood requirements ? + + + + Materials + ========= + soil, stone, metal + inorganics vector = WORLD + 0x54B7C = 0x16AFD04 +
    + + wood and plant matter, WORLD + 0x54B94 +
    + + plant matter, WORLD + 0x54BAC +
    + + just wood, WORLD + 0x54BDC +
    + + creature types actually used for creatures, + WORLD + 0x54CD0 +
    + + + + + + + + Constructions + ============= + WORLD + 0x108 +
    + + + Translations + ============ + WORLD + 0x54E50 +
    + WORLD + 0x54E80 +
    + + + Vegetation + ========== + WORLD + 0x15184 +
    belal: 0x017f6d98 ... what? + + + Buildings + ========= + WORLD + 0x14818 +
    + + WORLD + 0x5D610 +
    + + + + Effects + ======= + + :( + + Settlements + =========== + + :( + + Hotkeys + ======= +
    + + + + + + + + + + + + + + + + WORLD: 0x0165c1d0 ? + + Position + ======== +
    Was 0x17f5ab8 + 0x17f6b00 + 0x17f6b08 + 0x17f6b10 + + Map + === +
    + + * map size in blocks * +
    +
    +
    + + * map size in tiles * +
    +
    +
    + + * Suspected region coords * +
    +
    +
    + + * World size * (WORDs) +
    +
    + + * geology * +
    +
    + + * features * + WORLD + 0x54374 +
    + WORLD + 0x54440 +
    + + Creatures + ========= +
    +
    + + + + + + + + + + + + + + + + + + + + the skill that will be increased at the end of the mood (or not) + + + + + + + + + + Castes + ====== + + + + + Color Mods + ========== + + + + + Body Parts + ========== + + + + + + + Materials + ========= + soil, stone, metal + inorganics vector = WORLD + 0x54B7C = 0x16B0D4C +
    + + stuff like glass, coke, ... +
    + + wood and plant matter, WORLD + 0x54B94 +
    + + plant matter, WORLD + 0x54BAC +
    + + just wood, WORLD + 0x54BDC +
    + + creature types actually used for creatures, WORLD + 0x54CD0 +
    + + stuff that is used somehow +
    + + Constructions + ============= + WORLD + 0x108 +
    + + Translations + ============ + WORLD + 0x54E50 +
    + WORLD + 0x54E80 +
    + + Vegetation + ========== + WORLD + 0x15184 +
    + + Buildings + ========= + WORLD + 0x14818 +
    + WORLD + 0x5D610 +
    + + + + Descriptor colors + ================= +
    + + +
    this includes RVB + floats ! + + +
    A list of all colors, including eyes and stuff + + Items + ===== +
    + List of offsets in the VTable : + + + + + + + + + + + (in the vtable) + + Time + ==== +
    +
    + + + + + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    0x17f6b00 +
    0xe32798 01 +
    0xe60838 01 +
    0xe60814 01 +
    0xae82cc 01 + + Why do i have to redefine this ??? + + + + + + +
    CHMOD +
    BOGUS! +
    LOOKS O.K. +
    VERIFIED +
    VERIFIED +
    VERIFIED +
    VERIFIED +
    LOOKS O.K. +
    LOOKS O.K. + Why do i have to redefine this ??? + ... what? + + + + + +
    + + + + + +
    0xaf12d0 +
    0x180b10c +
    +
    +
    + map size X: 0x16c4b10 + map size Y: 0x16c4b14 + + + + + + +
    + + + + + + + + + +
    +
    +
    + + + Creatures + ========= +
    +
    + + + + + + + + + + + + + + + + + + +
    +
    VERIFIED +
    VERIFIED +
    VERIFIED + + + + + + + + .-"""-. + ' \ + |,. ,-. | _________________________ + |()L( ()| | \ \ + |,' `".| | /_ Argh !!! \ + |.___.',| ` \________________________\ + .j `--"' ` `. + / ' ' \ + / / ` `. + / / ` . + / / l | + . , L I N U X | | + ,"`. .| | + _.' ``. | `..-'l + | `.`, | `. + | `. __.j ) + |__ |--""___| ,-' + `"--...,+"""" `._,.-' + + + + + + + Basic things + ============ + VERIFIED + VERIFIED + VERIFIED + + MAP BLOCK OFFSETS + ================= + VERIFIED + VERIFIED + VERIFIED + VERIFIED + VERIFIED + VERIFIED + VERIFIED + VERIFIED + VERIFIED + VERIFIED + + MAP FEATURE OFFSETS + =================== + VERIFIED + VERIFIED + VERIFIED + + VERIFIED + VERIFIED + + values for the region structure + =============================== + VERIFIED + VERIFIED + geoblock offsets + ================ + VERIFIED + VERIFIED + + Name struct + =========== + VERIFIED + VERIFIED + VERIFIED + + Creature offsets + ================ + VERIFIED + CHMOD + CHMOD + CHMOD + BAD!! + CHMOD + CHMOD + VERIFY + CHMOD + CHMOD + VERIFY! + CHMOD + VERIFY! + VERIFY! + VERIFY! + BAD! + CHMOD + VERIFY! + the skill that will be increased at the end of the mood (or not) + BAD! + BAD! + CHMOD + CHMOD + BAD! + CHMOD + + Souls + ===== + + CHMOD + CHMOD + BAD! + + Body Parts + ========== + + + + + + + Job structure + ============= + Incrementaly assigned + seems to be just like the old occupations + + + Job materials + ============= + like mood materials, 0=bars, 4=stone, 5=wood, 57=cloth, 54=leather ... + subsubtype ? + subtype ? + index of material (for example, 2 is for silver) + set only for shell / bone mood requirements ? + + Creature type offsets + ===================== + VERIFIED + from 0.31.08 + Toad: 0xaf75b68 + Toad: rawname = 0x0 + Toad: character (not reliable) = 0x20 + Toad: caste vector = 0x60 + Toad: extract? vector = 0x18f4 + Toad: colors = 0x36 + VERIFIED + VERIFIED + LOOKS OK + + Castes + ====== + + + + + + + + + + Color descriptors + ================= + VERIFIED + VERIFIED + VERIFIED + VERIFIED + VERIFIED + + Language tables + =============== + VERIFIED + + Constructions + ============= + + + + + + + +
    + + Position and window dimensions + ============================== +
    +
    +
    +
    +
    + + GUI State + ========= +
    + + Map data + ========= +
    WORLD + 0x52C60 + + Map Features + ============ + WORLD + 0x5487C +
    + WORLD + 0x548F4 +
    + + * map size in blocks * +
    +
    +
    + + * map size in tiles * +
    +
    +
    + + * region coords * + WORLD + 0x525C8 +
    + WORLD + 0x525CC +
    + WORLD + 0x525D0 +
    + + * World size * (WORDs) + WORLD + 0x542E0 +
    + WORLD + 0x542E2 +
    + WORLD + 0x54894 +
    + WORLD + 0x548B8 +
    + + Creatures + ========= +
    +
    +
    + + Materials + ========= + soil, stone, metal + inorganics vector +
    0x16afd04 + + wood and plant matter +
    + + plant matter +
    + + just wood +
    + + creature types actually used for creatures, +
    + + Color descriptors + ================= +
    VERIFIED +
    VERIFIED + + Translations + ============ + WORLD + 0x54E50 +
    + WORLD + 0x54E80 +
    + + Constructions + ============= + WORLD + 0x84 +
    0x165b290 + + Time + ==== +
    +
    + + + + + + + + +
    MOST PROBABLY BOGUS! + + Position and window dimensions + ============================== +
    VERIFIED +
    VERIFIED +
    VERIFIED +
    VERIFIED +
    VERIFIED + GUI State + ========= +
    VERIFIED + + Map data + ======== + WORLD + 0x52C60? +
    VERIFIED + + Map Features + ============ + WORLD + 0x5487C? +
    VERIFIED + WORLD + 0x548F4? +
    VERIFIED + + * map size in blocks * +
    VERIFIED +
    VERIFIED +
    VERIFIED + + * map size in tiles * +
    VERIFIED +
    VERIFIED +
    VERIFIED + + * region coords * + WORLD + 0x525C8 +
    VERIFIED + WORLD + 0x525CC +
    VERIFIED + WORLD + 0x525D0 +
    VERIFIED (old = 0x9322d54) + + * World size * (WORDs) + WORLD + 0x542E0 +
    VERIFIED + WORLD + 0x542E2 +
    VERIFIED + WORLD + 0x54894 +
    VERIFIED + WORLD + 0x548B8 +
    VERIFIED + + Materials + ========= + soil, stone, metal + inorganics vector +
    VERIFIED + + wood and plant matter +
    VERIFIED + + plant matter +
    VERIFIED + + just wood +
    VERIFIED + + creature types actually used for creatures, +
    VERIFIED + + Color descriptors + ================= +
    VERIFIED +
    VERIFIED + + Translations + ============ + WORLD + 0x54E50 +
    + WORLD + 0x54E80 +
    + + Creatures + ========= +
    +
    0x092CB608 +
    0x092CB5FC + + Time + ==== +
    +
    + YEAR 0x92BF6A0, WORLD - 0x6A40 + TICKS 0x92BF6A8, WORLD - 0x6A40 + 0x08 + + + + + +
    VERIFIED + WORLD = 0x92C4000 + Creatures + ========= + WORLD + 0x139E0 + 0x92d79d4 + 0x92d79e0 = real one? seems like it + 0x92d7a10 + + + + + + + + + + + + + + + + + Buildings + ========= +
    + + +
    + + + + + + + + + + + + + + +
    VERIFIED +
    VERIFIED +
    VERIFIED +
    VERIFIED + + + + + + + + diff --git a/offsetedit/src/memxmlModel.cpp b/offsetedit/src/memxmlModel.cpp index ce03f9bce..3df8849bf 100644 --- a/offsetedit/src/memxmlModel.cpp +++ b/offsetedit/src/memxmlModel.cpp @@ -100,8 +100,9 @@ MemXMLModel::~MemXMLModel() delete rootItem; } -int MemXMLModel::columnCount(const QModelIndex &/*parent*/) const +int MemXMLModel::columnCount(const QModelIndex & parent) const { + Q_UNUSED(parent); return 3; } @@ -123,10 +124,10 @@ QVariant MemXMLModel::data(const QModelIndex &index, int role) const case 0: return node.nodeName(); case 1: - for (int i = 0; (unsigned int)(i) < attributeMap.count(); ++i) { + for (int i = 0; (unsigned int)(i) < attributeMap.count(); ++i) + { QDomNode attribute = attributeMap.item(i); - attributes << attribute.nodeName() + "=\"" - +attribute.nodeValue() + "\""; + attributes << attribute.nodeName() + "=\"" +attribute.nodeValue() + "\""; } return attributes.join(" "); case 2: @@ -139,13 +140,14 @@ QVariant MemXMLModel::data(const QModelIndex &index, int role) const Qt::ItemFlags MemXMLModel::flags(const QModelIndex &index) const { if (!index.isValid()) + { return Qt::ItemIsEnabled; + } return Qt::ItemIsEnabled | Qt::ItemIsSelectable; } -QVariant MemXMLModel::headerData(int section, Qt::Orientation orientation, - int role) const +QVariant MemXMLModel::headerData(int section, Qt::Orientation orientation, int role) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { switch (section) { @@ -163,8 +165,7 @@ QVariant MemXMLModel::headerData(int section, Qt::Orientation orientation, return QVariant(); } -QModelIndex MemXMLModel::index(int row, int column, const QModelIndex &parent) -const +QModelIndex MemXMLModel::index(int row, int column, const QModelIndex &parent) const { DomItem *parentItem; @@ -206,4 +207,4 @@ int MemXMLModel::rowCount(const QModelIndex &parent) const return parentItem->node().childNodes().count(); } -#include "memxmlModel.moc" \ No newline at end of file +#include "memxmlModel.moc" From f6aea927c86f98598914865c74a59f5515ca3a57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Thu, 12 Aug 2010 21:38:15 +0200 Subject: [PATCH 30/34] Memory.xml in new format (offsetedit/Memory-ng.xml). The declarations/descriptions are still missing. --- library/DFMemInfo.cpp | 27 +- library/modules/Materials.cpp | 32 +- offsetedit/Memory-ng.xml | 1811 +++++++++++++-------------------- offsetedit/src/CMakeLists.txt | 6 +- offsetedit/src/dfedit.cpp | 2 +- offsetedit/src/gui/main.ui | 7 +- 6 files changed, 734 insertions(+), 1151 deletions(-) diff --git a/library/DFMemInfo.cpp b/library/DFMemInfo.cpp index e8cee4b0c..ca7c58d03 100644 --- a/library/DFMemInfo.cpp +++ b/library/DFMemInfo.cpp @@ -739,31 +739,40 @@ std::string memory_info::getMood(const uint32_t moodID) std::string memory_info::PrintOffsets() { ostringstream ss; - ss << "version: " << getVersion(); + ss << "" << endl; switch (getOS()) { case OS_LINUX: - ss << " LINUX" << endl; - ss << "md5 hash: " << getString("md5") << endl; + ss << "" << endl; break; case OS_WINDOWS: - ss << " WINDOWS" << endl; - ss << "PE timestamp: " << hex << "0x" << getHexValue("pe_timestamp") << endl; - ss << "md5 hash: " << getString("md5") << endl; + ss << "" << endl; + ss << "" << endl; break; default: ss << " UNKNOWN" << endl; } - + ss << "" << endl; map::const_iterator iter; for(iter = d->addresses.begin(); iter != d->addresses.end(); iter++) { - ss << "address " << (*iter).first << " : " << hex << "0x" << (*iter).second << endl; + ss << "
    " << endl; } map::const_iterator iter2; for(iter2 = d->offsets.begin(); iter2 != d->offsets.end(); iter2++) { - ss << "offset " << (*iter2).first << " : " << hex << "0x" << (*iter2).second << endl; + ss << " " << endl; + } + for(iter = d->hexvals.begin(); iter != d->hexvals.end(); iter++) + { + ss << " " << endl; + } + map::const_iterator iter3; + for(iter3 = d->strings.begin(); iter3 != d->strings.end(); iter3++) + { + ss << " " << endl; } + ss << "" << endl; + ss << "" << endl; return ss.str(); } \ No newline at end of file diff --git a/library/modules/Materials.cpp b/library/modules/Materials.cpp index 58f98c54c..fe8e3f339 100644 --- a/library/modules/Materials.cpp +++ b/library/modules/Materials.cpp @@ -258,24 +258,24 @@ bool Materials::ReadCreatureTypes (void) bool Materials::ReadOthers(void) { - Process * p = d->owner; - uint32_t matBase = p->getDescriptor()->getAddress ("mat_other"); - uint32_t i = 0; - uint32_t ptr; + Process * p = d->owner; + uint32_t matBase = p->getDescriptor()->getAddress ("mat_other"); + uint32_t i = 0; + uint32_t ptr; - other.clear(); + other.clear(); - while(1) - { - t_matglossOther mat; - ptr = p->readDWord(matBase + i*4); - if(ptr==0) - break; - p->readSTLString(ptr, mat.rawname, sizeof(mat.rawname)); - other.push_back(mat); - i++; - } - return true; + while(1) + { + t_matglossOther mat; + ptr = p->readDWord(matBase + i*4); + if(ptr==0) + break; + p->readSTLString(ptr, mat.rawname, sizeof(mat.rawname)); + other.push_back(mat); + i++; + } + return true; } bool Materials::ReadDescriptorColors (void) diff --git a/offsetedit/Memory-ng.xml b/offsetedit/Memory-ng.xml index 163d6f860..294886988 100755 --- a/offsetedit/Memory-ng.xml +++ b/offsetedit/Memory-ng.xml @@ -1,6 +1,6 @@ - + @@ -33,7 +33,6 @@ - @@ -42,7 +41,6 @@ - @@ -145,7 +143,6 @@ - TODO: Parse this and turn it into Job tags - @@ -615,7 +611,6 @@ - @@ -639,7 +634,6 @@ - @@ -723,9 +717,8 @@ --> - - - + + @@ -738,7 +731,7 @@ - + @@ -764,7 +757,7 @@ - + @@ -785,7 +778,7 @@ - + @@ -819,9 +812,22 @@ - - + + + + + + + + +
    +
    +
    +
    + +
    + @@ -841,20 +847,27 @@ .@Ar;;rSB@@# H#2sr;,..,is .' `* ,@ASs;:..,:B ;rr;:,..,:. - `''' + `''' W I N D O W S and W I N E - - - - - Basic things - ============ - - + + + + + + + + + + +
    + + + + -
    - - Position and window dimensions - ============================== + --> + + + + + + + + + +
    -
    - Found addresses: (next to each other!) - 0x17f5ab8 - 0x17f5ac0 - 0x17f5ac8 - 0x17f5ad0 - - GUI State - ========= + +
    - Found addresses: - 0x146e45f - 0x185b677 - - Bogus:
    - +
    - - Bogus:
    - - Map stuff - ========= +
    + +
    - - - - - - - - - local features - global features - - Map Features - ============ - WORLD + 0x54374 -
    - - - - WORLD + 0x54440 -
    - - - - - * map size in blocks *
    - - * map size in tiles *
    - - * Suspected region coords * - WORLD + 0x525C8 -
    - WORLD + 0x525CC -
    - WORLD + 0x525D0 -
    - - * World size * (WORDs) +
    +
    +
    - -
    -
    - - - - - - - vector - vector - - Name struct - =========== - - - - - Creatures - ========= + + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    +
    + + + + + vector + vector + + +
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - the skill that will be increased at the end of the mood (or not) - seems to be indexes in the list of possible colors defined in the raws for each group - - - - - - - - Souls - ===== - - - - - - Job structure - ============= - Incrementaly assigned - seems to be just like the old occupations - - - Job materials - ============= - like mood materials, 0=bars, 4=stone, 5=wood, 57=cloth, 54=leather ... - subsubtype ? - subtype ? - index of material (for example, 2 is for silver) - set only for shell / bone mood requirements ? - - - - Materials - ========= - soil, stone, metal - inorganics vector = WORLD + 0x54B7C = 0x16AFD04 -
    - - wood and plant matter, WORLD + 0x54B94 -
    - - plant matter, WORLD + 0x54BAC -
    - - just wood, WORLD + 0x54BDC -
    - - creature types actually used for creatures, - WORLD + 0x54CD0 -
    - - - - - - - - Constructions - ============= - WORLD + 0x108 -
    - - - Translations - ============ - WORLD + 0x54E50 -
    - WORLD + 0x54E80 -
    +
    +
    + + + + + + + + + + + + + + + + + + + + + the skill that will be increased at the end of the mood (or not) + + seems to be indexes in the list of possible colors defined in the raws for each group + + + + + + + + + + + + + + + + + Incrementaly assigned + seems to be just like the old occupations + + + like mood materials, 0=bars, 4=stone, 5=wood, 57=cloth, 54=leather ... + subsubtype ? + subtype ? + index of material (for example, 2 is for silver) + set only for shell / bone mood requirements ? + + + + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    - - Vegetation - ========== - WORLD + 0x15184 -
    belal: 0x017f6d98 ... what? + + +
    - - Buildings - ========= - WORLD + 0x14818 -
    + + +
    - WORLD + 0x5D610 -
    +
    - - Effects - ======= - - :( - - Settlements - =========== - - :( - - Hotkeys - ======= -
    - - - - - - - - - - - - - - - - WORLD: 0x0165c1d0 ? - - Position - ======== + + +
    + + + + + + + + + + + + + + + + WORLD: 0x0165c1d0 ? +
    Was 0x17f5ab8 - 0x17f6b00 - 0x17f6b08 - 0x17f6b10 - - Map - === + +
    - - * map size in blocks *
    - - * map size in tiles *
    - - * Suspected region coords *
    - - * World size * (WORDs)
    - - * geology * -
    -
    - - * features * - WORLD + 0x54374 -
    - WORLD + 0x54440 -
    - - Creatures - ========= + + +
    + + +
    + + + +
    +
    + + +
    -
    - - - - - - - - - - - - - - - - - - - - the skill that will be increased at the end of the mood (or not) - - - - - - - - - - Castes - ====== - - - - - Color Mods - ========== - - - - - Body Parts - ========== - - - - - - - Materials - ========= - soil, stone, metal - inorganics vector = WORLD + 0x54B7C = 0x16B0D4C -
    - - stuff like glass, coke, ... -
    - - wood and plant matter, WORLD + 0x54B94 -
    - - plant matter, WORLD + 0x54BAC -
    - - just wood, WORLD + 0x54BDC -
    - - creature types actually used for creatures, WORLD + 0x54CD0 -
    - - stuff that is used somehow -
    - - Constructions - ============= - WORLD + 0x108 -
    - - Translations - ============ - WORLD + 0x54E50 -
    - WORLD + 0x54E80 -
    - - Vegetation - ========== - WORLD + 0x15184 -
    - - Buildings - ========= - WORLD + 0x14818 -
    - WORLD + 0x5D610 -
    - - - - Descriptor colors - ================= -
    - - -
    this includes RVB - floats ! - - -
    A list of all colors, including eyes and stuff - - Items - ===== + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    + + +
    + + + +
    + + + +
    + + +
    +
    + + +
    + + + +
    +
    + +
    List of offsets in the VTable : @@ -1381,168 +1197,193 @@ - - - - + + + (in the vtable) - - Time - ==== + +
    - - - - - - -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    + + + + + + + + +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    + + +
    + + + +
    +
    + + + +
    + +
    -
    + + +
    + +
    - -
    0x17f6b00 -
    0xe32798 01 -
    0xe60838 01 -
    0xe60814 01 -
    0xae82cc 01 - - Why do i have to redefine this ??? - - - - - - -
    CHMOD -
    BOGUS! -
    LOOKS O.K. -
    VERIFIED -
    VERIFIED -
    VERIFIED -
    VERIFIED -
    LOOKS O.K. -
    LOOKS O.K. - Why do i have to redefine this ??? - ... what? - - - - - + + +
    +
    +
    +
    +
    + + + + + + + + +
    +
    BOGUS! + + +
    +
    +
    +
    +
    + + +
    +
    + + + + + + +
    - - - - - -
    0xaf12d0 -
    0x180b10c -
    -
    -
    - map size X: 0x16c4b10 - map size Y: 0x16c4b14 - - - - - - -
    - - - - - - - - - + + + + + + + + +
    + + + + + + + +
    + +
    - - - Creatures - ========= + +
    -
    - - - - - - - - - - - - - - - - - - +
    + + + + + + + + + + + + + + + + + + + + + + +
    -
    VERIFIED -
    VERIFIED -
    VERIFIED - - - - - - +
    +
    +
    + + + + + + + .-"""-. ' \ @@ -1566,478 +1407,209 @@ - - - Basic things - ============ - VERIFIED - VERIFIED - VERIFIED - - MAP BLOCK OFFSETS - ================= - VERIFIED - VERIFIED - VERIFIED - VERIFIED - VERIFIED - VERIFIED - VERIFIED - VERIFIED - VERIFIED - VERIFIED - - MAP FEATURE OFFSETS - =================== - VERIFIED - VERIFIED - VERIFIED - - VERIFIED - VERIFIED - - values for the region structure - =============================== - VERIFIED - VERIFIED - geoblock offsets - ================ - VERIFIED - VERIFIED - - Name struct - =========== - VERIFIED - VERIFIED - VERIFIED - - Creature offsets - ================ - VERIFIED - CHMOD - CHMOD - CHMOD - BAD!! - CHMOD - CHMOD - VERIFY - CHMOD - CHMOD - VERIFY! - CHMOD - VERIFY! - VERIFY! - VERIFY! - BAD! - CHMOD - VERIFY! - the skill that will be increased at the end of the mood (or not) - BAD! - BAD! - CHMOD - CHMOD - BAD! - CHMOD - - Souls - ===== - - CHMOD - CHMOD - BAD! - - Body Parts - ========== - - - - - - - Job structure - ============= - Incrementaly assigned - seems to be just like the old occupations - - - Job materials - ============= - like mood materials, 0=bars, 4=stone, 5=wood, 57=cloth, 54=leather ... - subsubtype ? - subtype ? - index of material (for example, 2 is for silver) - set only for shell / bone mood requirements ? - - Creature type offsets - ===================== - VERIFIED - from 0.31.08 - Toad: 0xaf75b68 - Toad: rawname = 0x0 - Toad: character (not reliable) = 0x20 - Toad: caste vector = 0x60 - Toad: extract? vector = 0x18f4 - Toad: colors = 0x36 - VERIFIED - VERIFIED - LOOKS OK - - Castes - ====== - - - - - - - - - - Color descriptors - ================= - VERIFIED - VERIFIED - VERIFIED - VERIFIED - VERIFIED - - Language tables - =============== - VERIFIED - - Constructions - ============= - - - - - - - -
    - - Position and window dimensions - ============================== -
    -
    -
    -
    -
    - - GUI State - ========= -
    - - Map data - ========= -
    WORLD + 0x52C60 - - Map Features - ============ - WORLD + 0x5487C -
    - WORLD + 0x548F4 -
    - - * map size in blocks * -
    -
    -
    - - * map size in tiles * -
    -
    -
    - - * region coords * - WORLD + 0x525C8 -
    - WORLD + 0x525CC -
    - WORLD + 0x525D0 -
    - - * World size * (WORDs) - WORLD + 0x542E0 -
    - WORLD + 0x542E2 -
    - WORLD + 0x54894 -
    - WORLD + 0x548B8 -
    - - Creatures - ========= -
    -
    -
    - - Materials - ========= - soil, stone, metal - inorganics vector -
    0x16afd04 - - wood and plant matter -
    - - plant matter -
    - - just wood -
    - - creature types actually used for creatures, -
    - - Color descriptors - ================= -
    VERIFIED -
    VERIFIED - - Translations - ============ - WORLD + 0x54E50 -
    - WORLD + 0x54E80 -
    - - Constructions - ============= - WORLD + 0x84 -
    0x165b290 - - Time - ==== -
    -
    - - - - - + - -
    MOST PROBABLY BOGUS! - - Position and window dimensions - ============================== -
    VERIFIED -
    VERIFIED -
    VERIFIED -
    VERIFIED -
    VERIFIED - GUI State - ========= -
    VERIFIED - - Map data - ======== - WORLD + 0x52C60? -
    VERIFIED - - Map Features - ============ - WORLD + 0x5487C? -
    VERIFIED - WORLD + 0x548F4? -
    VERIFIED - - * map size in blocks * -
    VERIFIED -
    VERIFIED -
    VERIFIED - - * map size in tiles * -
    VERIFIED -
    VERIFIED -
    VERIFIED - - * region coords * - WORLD + 0x525C8 -
    VERIFIED - WORLD + 0x525CC -
    VERIFIED - WORLD + 0x525D0 -
    VERIFIED (old = 0x9322d54) - - * World size * (WORDs) - WORLD + 0x542E0 -
    VERIFIED - WORLD + 0x542E2 -
    VERIFIED - WORLD + 0x54894 -
    VERIFIED - WORLD + 0x548B8 -
    VERIFIED - - Materials - ========= - soil, stone, metal - inorganics vector -
    VERIFIED - - wood and plant matter -
    VERIFIED - - plant matter -
    VERIFIED - - just wood -
    VERIFIED - - creature types actually used for creatures, -
    VERIFIED - - Color descriptors - ================= -
    VERIFIED -
    VERIFIED - - Translations - ============ - WORLD + 0x54E50 -
    - WORLD + 0x54E80 -
    - - Creatures - ========= -
    -
    0x092CB608 -
    0x092CB5FC - - Time - ==== -
    -
    - YEAR 0x92BF6A0, WORLD - 0x6A40 - TICKS 0x92BF6A8, WORLD - 0x6A40 + 0x08 +
    + + + + + + + + + + + + + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    +
    + + + + + vector + vector + + + +
    +
    +
    + + + + + + + + + + + + + + CHMOD + VERIFY! + + + chmod + + + + + + + + + + + + + + + CHMOD + + + + + Incrementaly assigned + seems to be just like the old occupations + + + like mood materials, 0=bars, 4=stone, 5=wood, 57=cloth, 54=leather ... + subsubtype ? + subtype ? + index of material (for example, 2 is for silver) + set only for shell / bone mood requirements ? + + + + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + +
    + + + +
    +
    + + + +
    + + + +
    +
    + -
    VERIFIED - WORLD = 0x92C4000 +
    + +
    VERIFIED + Creatures ========= WORLD + 0x139E0 @@ -2060,14 +1632,13 @@ - Buildings - ========= -
    - - -
    - - + +
    + +
    + + + diff --git a/offsetedit/src/CMakeLists.txt b/offsetedit/src/CMakeLists.txt index dc2eeea6e..0804dd66e 100644 --- a/offsetedit/src/CMakeLists.txt +++ b/offsetedit/src/CMakeLists.txt @@ -18,10 +18,8 @@ SET( dfoffsetedit_RCS # in result dfoffsetedit_RC_SRCS variable will contain paths to files produced by rcc QT4_ADD_RESOURCES( dfoffsetedit_RC_SRCS ${dfoffsetedit_RCS} ) -QT4_WRAP_UI(dfoffsetedit_SRCS ${dfedit_UI}) +QT4_WRAP_UI(dfoffsetedit_UI_h ${dfedit_UI}) qt4_automoc(${dfoffsetedit_SRCS}) -#ADD_EXECUTABLE( sample ${SAMPLE_SRCS} ${SAMPLE_MOC_SRCS} ${SAMPLE_RC_SRCS} ${SAMPLE_UI_HDRS}) - -add_executable(dfoffsetedit ${dfoffsetedit_SRCS} ${dfoffsetedit_RC_SRCS}) +add_executable(dfoffsetedit ${dfoffsetedit_SRCS} ${dfoffsetedit_RC_SRCS} ${dfoffsetedit_UI_h}) target_link_libraries(dfoffsetedit ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTXML_LIBRARY} ) \ No newline at end of file diff --git a/offsetedit/src/dfedit.cpp b/offsetedit/src/dfedit.cpp index dc4fc3205..f7ac3e7a4 100644 --- a/offsetedit/src/dfedit.cpp +++ b/offsetedit/src/dfedit.cpp @@ -30,7 +30,7 @@ dfedit::~dfedit() void dfedit::slotOpen(bool ) { QFileDialog fd(this,tr("Locate the Memoxy.xml file")); - fd.setNameFilter(tr("Memory definition (Memory.xml)")); + fd.setNameFilter(tr("Memory definition (*.xml)")); fd.setFileMode(QFileDialog::ExistingFile); fd.setAcceptMode(QFileDialog::AcceptOpen); int result = fd.exec(); diff --git a/offsetedit/src/gui/main.ui b/offsetedit/src/gui/main.ui index afa830d38..dfff8fa02 100644 --- a/offsetedit/src/gui/main.ui +++ b/offsetedit/src/gui/main.ui @@ -82,7 +82,12 @@ 0 - <h1>Title text</h1><p>Some other text. It seriously rocks.</p> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:18px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:xx-large; font-weight:600;">Title text</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Some other text.</p></body></html> Qt::AutoText From 21f7f8e7038286d550a7a61a3e1ea83f46e01286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 13 Aug 2010 02:23:38 +0200 Subject: [PATCH 31/34] Moved memory defs to /data. Memory.xml is copied into the right folder at build time (works even with MSVC). --- CMakeLists.txt | 2 ++ {output => data}/Memory-40d.xml | 0 {offsetedit => data}/Memory-ng.xml | 0 {output => data}/Memory.xml | 0 library/CMakeLists.txt | 14 ++++++++++++++ library/DFMemInfoManager.cpp | 6 +++--- 6 files changed, 19 insertions(+), 3 deletions(-) rename {output => data}/Memory-40d.xml (100%) rename {offsetedit => data}/Memory-ng.xml (100%) mode change 100755 => 100644 rename {output => data}/Memory.xml (100%) mode change 100755 => 100644 diff --git a/CMakeLists.txt b/CMakeLists.txt index 50072ab9b..160b71a6f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,10 +19,12 @@ ENDIF(NOT DEFINED CMAKE_BUILD_TYPE) SET( LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/output CACHE PATH "Output directory for the dfhack library" ) SET( EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/output CACHE PATH "Output directory for the dfhack tools" ) +SET( DATA_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/output CACHE PATH "Output directory for the dfhack data (offset files)" ) OPTION(BUILD_DFHACK_DOCUMENTATION "Create doxygen documentation for developers" OFF) OPTION(BUILD_DFHACK_EXAMPLES "Build example tools" OFF) OPTION(BUILD_DFHACK_PLAYGROUND "Build tools from the playground folder" OFF) +OPTION(BUILD_DFHACK_C_BINDIGS "Build the C portion of the library" ON) include_directories (${CMAKE_SOURCE_DIR}/library/include/) include_directories (${CMAKE_SOURCE_DIR}/library/shm/) diff --git a/output/Memory-40d.xml b/data/Memory-40d.xml similarity index 100% rename from output/Memory-40d.xml rename to data/Memory-40d.xml diff --git a/offsetedit/Memory-ng.xml b/data/Memory-ng.xml old mode 100755 new mode 100644 similarity index 100% rename from offsetedit/Memory-ng.xml rename to data/Memory-ng.xml diff --git a/output/Memory.xml b/data/Memory.xml old mode 100755 new mode 100644 similarity index 100% rename from output/Memory.xml rename to data/Memory.xml diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index f036a7a44..9442a4cc7 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -164,6 +164,20 @@ SET_TARGET_PROPERTIES(dfhack PROPERTIES DEBUG_POSTFIX "-debug" ) TARGET_LINK_LIBRARIES(dfhack ${PROJECT_LIBS}) +if(MSVC) + # This is a MSVC hack used for copying files into the target directory + # of build target set in MSVC. + # It exploits the fact that MSVC has some variables in .vcproj files, much like cmake does here. + # + # So, $(TargetDir) is ignored by cmake, and replaced with the actual output directory by MSVC + ADD_CUSTOM_COMMAND(TARGET dfhack POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/data/Memory.xml $(TargetDir)/Memory.xml + ) +else(MSVC) + # Just put the file in the output directory on Linux and Mac + configure_file(${CMAKE_SOURCE_DIR}/data/Memory-ng.xml ${DATA_OUTPUT_PATH}/Memory.xml COPYONLY) +endif(MSVC) + IF(UNIX) install(TARGETS dfhack LIBRARY DESTINATION lib) install(FILES ${CMAKE_SOURCE_DIR}/output/Memory.xml DESTINATION share/dfhack) diff --git a/library/DFMemInfoManager.cpp b/library/DFMemInfoManager.cpp index 48ea3f8a2..cc4c5de4a 100644 --- a/library/DFMemInfoManager.cpp +++ b/library/DFMemInfoManager.cpp @@ -154,9 +154,9 @@ void MemInfoManager::ParseEntry (TiXmlElement* entry, memory_info* mem, map Value(); const char *cstr_name = pMemEntry->Attribute("name"); const char *cstr_value = pMemEntry->GetText(); - - if(!cstr_value) - cstr_value = pMemEntry->Attribute("id"); + + if(!cstr_value) + cstr_value = pMemEntry->Attribute("id"); // check for missing parts string type, name, value; From 8fa3d0811c0def86b148038ceae8f754f48797d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 13 Aug 2010 02:35:10 +0200 Subject: [PATCH 32/34] Make building C bindings optional. --- library/CMakeLists.txt | 17 +++++++++++++++-- tools/playground/CMakeLists.txt | 16 +++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index 9442a4cc7..d66f0af51 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -54,6 +54,11 @@ include/dfhack/modules/WindowIO.h include/dfhack/modules/World.h ) +SET(PROJECT_C_HDRS +include/dfhack-c/DFTypes_C.h +include/dfhack-c/DFContext_C.h +) + SET(PROJECT_SRCS DFMemInfo.cpp DFMemInfoManager.cpp @@ -61,8 +66,6 @@ DFContextManager.cpp DFContext.cpp DFProcessEnumerator.cpp ContextShared.cpp -DFContext_C.cpp -DFTypes_C.cpp depends/md5/md5.cpp depends/md5/md5wrapper.cpp @@ -83,6 +86,11 @@ modules/Position.cpp modules/Translation.cpp modules/Vegetation.cpp modules/World.cpp +) + +SET(PROJECT_C_SRCS +DFContext_C.cpp +DFTypes_C.cpp modules/Buildings_C.cpp modules/Constructions_C.cpp @@ -126,6 +134,11 @@ ELSE(UNIX) LIST(APPEND PROJECT_SRCS ${PROJECT_SRCS_WINDOWS}) ENDIF(UNIX) +IF(BUILD_DFHACK_C_BINDIGS) + LIST(APPEND PROJECT_HDRS ${PROJECT_C_HDRS}) + LIST(APPEND PROJECT_SRCS ${PROJECT_C_SRCS}) +ENDIF(BUILD_DFHACK_C_BINDIGS) + SET_SOURCE_FILES_PROPERTIES( ${PROJECT_HDRS} PROPERTIES HEADER_FILE_ONLY TRUE ) LIST(APPEND PROJECT_SRCS ${PROJECT_HDRS}) diff --git a/tools/playground/CMakeLists.txt b/tools/playground/CMakeLists.txt index a799c7765..a28597475 100644 --- a/tools/playground/CMakeLists.txt +++ b/tools/playground/CMakeLists.txt @@ -12,10 +12,6 @@ ENDIF(UNIX) ADD_EXECUTABLE(dfmoodump moodump.cpp) TARGET_LINK_LIBRARIES(dfmoodump dfhack) -# for trying out some 'stuff' -ADD_EXECUTABLE(dftest test.cpp) -TARGET_LINK_LIBRARIES(dftest dfhack) - # bauxite - turn all mechanisms into bauxite mechanisms # Author: Alex Legg #ADD_EXECUTABLE(dfbauxite dfbauxite.cpp) @@ -60,9 +56,19 @@ TARGET_LINK_LIBRARIES(dfcatsplosion dfhack) #ADD_EXECUTABLE(dfrenamer renamer.cpp) #TARGET_LINK_LIBRARIES(dfrenamer dfhack) +# this needs the C bindings +IF(BUILD_DFHACK_C_BINDIGS) + # for trying out some 'stuff' + ADD_EXECUTABLE(dftest test.cpp) + TARGET_LINK_LIBRARIES(dftest dfhack) + install(TARGETS + dftest + RUNTIME DESTINATION bin + ) +ENDIF(BUILD_DFHACK_C_BINDIGS) + install(TARGETS dfmoodump -dftest dfdigger dfdigger2 dfcatsplosion From 7188d87a5b86ebe177149274adee3e92bedc6e4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 13 Aug 2010 02:58:45 +0200 Subject: [PATCH 33/34] Possible fix for MSVC 2010 --- CMake/Modules/CMakeVS10FindMake.cmake | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 CMake/Modules/CMakeVS10FindMake.cmake diff --git a/CMake/Modules/CMakeVS10FindMake.cmake b/CMake/Modules/CMakeVS10FindMake.cmake new file mode 100644 index 000000000..460de25e5 --- /dev/null +++ b/CMake/Modules/CMakeVS10FindMake.cmake @@ -0,0 +1,28 @@ + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distributed this file outside of CMake, substitute the full +# License text for the above reference.) + +# We use MSBuild as the build tool for VS 10 +FIND_PROGRAM(CMAKE_MAKE_PROGRAM + NAMES MSBuild + HINTS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VS;ProductDir] + "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0;CLR Version]/" + "c:/WINDOWS/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0;CLR Version]/" + "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\10.0;CLR Version]/" + ) + +MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM) +SET(MSVC10 1) +SET(MSVC_VERSION 1600) + From 343b14753b3c11f2ee12d516523bb8de41a96be6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 13 Aug 2010 03:31:05 +0200 Subject: [PATCH 34/34] Updated docs. --- COMPILE.rst | 66 ++++------------------------------------------------ Compile.html | 59 ++++------------------------------------------ README.rst | 6 ++--- Readme.html | 6 ++--- 4 files changed, 14 insertions(+), 123 deletions(-) diff --git a/COMPILE.rst b/COMPILE.rst index bb5bc1e3a..dc07456f0 100644 --- a/COMPILE.rst +++ b/COMPILE.rst @@ -87,13 +87,9 @@ This will generate MSVC solution and project files. .. note:: You are working in the ``/build`` folder. Files added to - projects will end up there! (and that's wrong). Any changes to the - build system should be done by changing cmake configs and running - ``cmake`` on them! - -Also, you'll have to copy the ``Memory.xml`` file to the build output -folders MSVC generates. For example from ``output/`` to -``output/Release/`` + projects from within MSVC will end up there! (and that's + wrong). Any changes to the build system should be done + by changing cmake configs and running ``cmake`` on them! ------------------------- Using some other compiler @@ -147,59 +143,5 @@ comes to compilation. Because it shares the memory space with DF itself, it has to be built with the same tools as DF and use the same C and C++/STL libraries. -For DF 31.01 - 31.10 on Windows, use MSVC 2008. You can get the Express +For DF 31.01 - 31.12 on Windows, use MSVC 2008. You can get the Express edition for free from Microsoft. - -Windows dependencies can be determined by a tool like ``depends.exe`` -(`google it`_). Both the fake ``SDL.dll`` and DF have to use the same -version of the C runtime (MSVCRT). The SHM can only be debugged using a -RelWithDebInfo build! - -Linux dependencies can be determined by setting the LD_DEBUG variable -and running ./df:: - - export LD_DEBUG=versions - ./df - -Example of (a part of a) relevant output from a working SHM -installation:: - - 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libpthread.so.0 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GCC_3.0' in file ./libs/libgcc_s.so.1 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.0' in file ./libs/libgcc_s.so.1 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.1' in file /opt/lib32/lib/libm.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libm.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.1.3' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBCXX_3.4.9' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `CXXABI_1.3' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `GLIBCXX_3.4' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0] - 24472: checking for version `CXXABI_1.3' in file ./libs/libstdc++.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBCXX_3.4' in file ./libs/libstdc++.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBC_2.1.3' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBC_2.2' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] - 24472: checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0] - -libdfconnect is the SHM. Both are compiled against the same C++ library -and share the same CXXABI version. - -Precompiled SHM libraries are provided in binary releases. - -.. _google it: http://www.google.com/search?q=depends.exe - -Checking strings support -======================== -Strings are one of the important C++ types and a great indicator that -the SHM works. Tools like Dwarf Therapist depend on string support. -Reading of strings can be checked by running any of the tools that deal -with materials. - -String writing is best tested with a fresh throw-away fort and -``dfrenamer``. - -Embark, give one dwarf a very long name using dfrenamer and save/exit. -If DF crashes during the save sequence, your SHM is not compatible with -DF and the throw-away fort is most probably lost. diff --git a/Compile.html b/Compile.html index 06ab65b9d..d7bb44ce7 100644 --- a/Compile.html +++ b/Compile.html @@ -331,7 +331,6 @@ ul.auto-toc {
  • Build targets
  • Build types
  • Building the shared memory hook library (SHM)
  • -
  • Checking strings support
  • @@ -407,13 +406,10 @@ cmake ..

    Note

    You are working in the /build folder. Files added to -projects will end up there! (and that's wrong). Any changes to the -build system should be done by changing cmake configs and running -cmake on them!

    +projects from within MSVC will end up there! (and that's +wrong). Any changes to the build system should be done +by changing cmake configs and running cmake on them!

    -

    Also, you'll have to copy the Memory.xml file to the build output -folders MSVC generates. For example from output/ to -output/Release/

    Using some other compiler

    @@ -467,55 +463,8 @@ cmake .. -DCMAKE_BUILD_TYPE:string=BUILD_TYPE comes to compilation. Because it shares the memory space with DF itself, it has to be built with the same tools as DF and use the same C and C++/STL libraries.

    -

    For DF 31.01 - 31.10 on Windows, use MSVC 2008. You can get the Express +

    For DF 31.01 - 31.12 on Windows, use MSVC 2008. You can get the Express edition for free from Microsoft.

    -

    Windows dependencies can be determined by a tool like depends.exe -(google it). Both the fake SDL.dll and DF have to use the same -version of the C runtime (MSVCRT). The SHM can only be debugged using a -RelWithDebInfo build!

    -

    Linux dependencies can be determined by setting the LD_DEBUG variable -and running ./df:

    -
    -export LD_DEBUG=versions
    -./df
    -
    -

    Example of (a part of a) relevant output from a working SHM -installation:

    -
    -24472:     checking for version `GLIBC_2.0' in file /opt/lib32/lib/libpthread.so.0 [0] required by file ./dwarfort.exe [0]
    -24472:     checking for version `GCC_3.0' in file ./libs/libgcc_s.so.1 [0] required by file ./dwarfort.exe [0]
    -24472:     checking for version `GLIBC_2.0' in file ./libs/libgcc_s.so.1 [0] required by file ./dwarfort.exe [0]
    -24472:     checking for version `GLIBC_2.1' in file /opt/lib32/lib/libm.so.6 [0] required by file ./dwarfort.exe [0]
    -24472:     checking for version `GLIBC_2.0' in file /opt/lib32/lib/libm.so.6 [0] required by file ./dwarfort.exe [0]
    -24472:     checking for version `GLIBC_2.1.3' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0]
    -24472:     checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0]
    -24472:     checking for version `GLIBC_2.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0]
    -24472:     checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./dwarfort.exe [0]
    -24472:     checking for version `GLIBCXX_3.4.9' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0]
    -24472:     checking for version `CXXABI_1.3' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0]
    -24472:     checking for version `GLIBCXX_3.4' in file ./libs/libstdc++.so.6 [0] required by file ./dwarfort.exe [0]
    -24472:     checking for version `CXXABI_1.3' in file ./libs/libstdc++.so.6 [0] required by file ./libs/libdfconnect.so [0]
    -24472:     checking for version `GLIBCXX_3.4' in file ./libs/libstdc++.so.6 [0] required by file ./libs/libdfconnect.so [0]
    -24472:     checking for version `GLIBC_2.1.3' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0]
    -24472:     checking for version `GLIBC_2.2' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0]
    -24472:     checking for version `GLIBC_2.3.4' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0]
    -24472:     checking for version `GLIBC_2.0' in file /opt/lib32/lib/libc.so.6 [0] required by file ./libs/libdfconnect.so [0]
    -
    -

    libdfconnect is the SHM. Both are compiled against the same C++ library -and share the same CXXABI version.

    -

    Precompiled SHM libraries are provided in binary releases.

    -
    -
    -

    Checking strings support

    -

    Strings are one of the important C++ types and a great indicator that -the SHM works. Tools like Dwarf Therapist depend on string support. -Reading of strings can be checked by running any of the tools that deal -with materials.

    -

    String writing is best tested with a fresh throw-away fort and -dfrenamer.

    -

    Embark, give one dwarf a very long name using dfrenamer and save/exit. -If DF crashes during the save sequence, your SHM is not compatible with -DF and the throw-away fort is most probably lost.

    diff --git a/README.rst b/README.rst index c57396c8c..e7184bd03 100644 --- a/README.rst +++ b/README.rst @@ -49,7 +49,7 @@ Windows Linux ===== -0.31.04 - 0.31.12 native. +0.31.05 - 0.31.12 native. There are missing offsets but Map tools should be OK. Linux support is a bit lacking, I'm working on it. All supported Windows versions running in wine can be used with native DFHack binaries. @@ -247,6 +247,6 @@ cmake ========================= Memory offset definitions ========================= -The file with memory offset definitions used by dfhack can be found in the -output folder. +The files with memory offset definitions used by dfhack can be found in the +data folder. diff --git a/Readme.html b/Readme.html index 3b28d8c61..bebf7241f 100644 --- a/Readme.html +++ b/Readme.html @@ -398,7 +398,7 @@ fix it :)

    Linux

    -

    0.31.04 - 0.31.12 native. +

    0.31.05 - 0.31.12 native. There are missing offsets but Map tools should be OK. Linux support is a bit lacking, I'm working on it. All supported Windows versions running in wine can be used with native DFHack binaries.

    @@ -588,8 +588,8 @@ headers

    Memory offset definitions

    -

    The file with memory offset definitions used by dfhack can be found in the -output folder.

    +

    The files with memory offset definitions used by dfhack can be found in the +data folder.