From 93482f00577a7dfe32d4d71ad8c4e445d8f29fd5 Mon Sep 17 00:00:00 2001 From: Simon Jackson Date: Sat, 24 Jul 2010 19:48:26 +0100 Subject: [PATCH 01/18] .11 --- output/Memory.xml | 111 ++++++++++++++++++++++++---------------------- 1 file changed, 58 insertions(+), 53 deletions(-) diff --git a/output/Memory.xml b/output/Memory.xml index b22377cb7..0b8e8e094 100755 --- a/output/Memory.xml +++ b/output/Memory.xml @@ -1485,23 +1485,20 @@ map_data_1b60_offset 0x1B9c Castes ====== + 0x70 + 0x64 + 0x68 0x51C - 0x654 0xACC + 0x654 - Color Mods - ========== - 0x70 - 0x64 - 0x68 - - Body Parts - ========== - 0x0 - 0x1C - 0x44 - 0x78 - 0x90 + Body Parts + ========== + 0x0 + 0x1C + 0x44 + 0x78 + 0x90 Materials ========= @@ -1684,8 +1681,6 @@ map_data_1b60_offset 0x1B9c --> 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 +\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: + + +Second part has some details on DFHack development: + + + +The third part describes how to use the supported DFHack utilities + + +*/ + 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 07/18] 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 08/18] 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 09/18] 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 10/18] 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 11/18] 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 12/18] 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 13/18] 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.

    From bae7b88be03bf39bf159d82a1ea15284923174d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 13 Aug 2010 21:44:17 +0200 Subject: [PATCH 14/18] Make sure the compatible memory.xml is used. --- library/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index d66f0af51..57f78725f 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -188,7 +188,7 @@ if(MSVC) ) 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) + configure_file(${CMAKE_SOURCE_DIR}/data/Memory.xml ${DATA_OUTPUT_PATH}/Memory.xml COPYONLY) endif(MSVC) IF(UNIX) From 7fbdd6c69af8d2e62dcce602bd08e959d5b8b526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 13 Aug 2010 23:25:14 +0200 Subject: [PATCH 15/18] Cleartask tool, updated docs. --- README.rst | 4 ++ Readme.html | 53 +++++++++++++----------- library/CMakeLists.txt | 8 ++++ tools/supported/CMakeLists.txt | 6 +++ tools/supported/cleartask.cpp | 73 ++++++++++++++++++++++++++++++++++ 5 files changed, 120 insertions(+), 24 deletions(-) create mode 100644 tools/supported/cleartask.cpp diff --git a/README.rst b/README.rst index e7184bd03..ff93b49f3 100644 --- a/README.rst +++ b/README.rst @@ -120,6 +120,10 @@ dfdoffsets ========== Dumps the offsets for the currently running DF version into the terminal. +dfcleartask +=========== +Solves the problem of unusable items after reclaim by clearing the 'in_job' bit of all items. + Your tool here ============== Write one ;) diff --git a/Readme.html b/Readme.html index bebf7241f..98eb64c8a 100644 --- a/Readme.html +++ b/Readme.html @@ -346,26 +346,27 @@ allow for easier development of new tools.

  • dfsuspend
  • dfexpbench
  • dfdoffsets
  • -
  • Your tool here
  • +
  • dfcleartask
  • +
  • Your tool here
  • -
  • Using the library as a developer
      -
    • Contributing to DFHack
        -
      • Coding style
      • -
      • How to get new code into DFHack
      • -
      • Layout for tools
      • -
      • Modules - what are they?
      • -
      • Dependencies @@ -468,13 +469,17 @@ flows.

        dfdoffsets

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

        +
        +

        dfcleartask

        +

        Solves the problem of unusable items after reclaim by clearing the 'in_job' bit of all items.

        +
        -

        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.

        @@ -485,17 +490,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.

        @@ -505,7 +510,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.

        @@ -526,7 +531,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 @@ -543,7 +548,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.
        @@ -555,7 +560,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
        @@ -567,7 +572,7 @@ DF binaries on Linux.
        -

        Current external dependencies

        +

        Current external dependencies

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

        Build-time dependencies

        +

        Build-time dependencies

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

        Memory offset definitions

        +

        Memory offset definitions

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

        diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index 57f78725f..8e09a2203 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -186,9 +186,17 @@ if(MSVC) ADD_CUSTOM_COMMAND(TARGET dfhack POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/data/Memory.xml $(TargetDir)/Memory.xml ) + ADD_CUSTOM_COMMAND(TARGET dfhack POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/Compile.html $(TargetDir)/Compile.html + ) + ADD_CUSTOM_COMMAND(TARGET dfhack POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/Readme.html $(TargetDir)/Readme.html + ) else(MSVC) # Just put the file in the output directory on Linux and Mac configure_file(${CMAKE_SOURCE_DIR}/data/Memory.xml ${DATA_OUTPUT_PATH}/Memory.xml COPYONLY) + configure_file(${CMAKE_SOURCE_DIR}/Compile.html ${DATA_OUTPUT_PATH}/Compile.html COPYONLY) + configure_file(${CMAKE_SOURCE_DIR}/Readme.html ${DATA_OUTPUT_PATH}/Readme.html COPYONLY) endif(MSVC) IF(UNIX) diff --git a/tools/supported/CMakeLists.txt b/tools/supported/CMakeLists.txt index 0a0d93f68..f7006aeb2 100644 --- a/tools/supported/CMakeLists.txt +++ b/tools/supported/CMakeLists.txt @@ -51,6 +51,11 @@ TARGET_LINK_LIBRARIES(dfflows dfhack) ADD_EXECUTABLE(dfliquids liquids.cpp) TARGET_LINK_LIBRARIES(dfliquids dfhack) +# Solves the problem of unusable items after reclaim by clearing the 'in_job' bit of all items. +# Original author: Quietust +ADD_EXECUTABLE(dfcleartask cleartask.cpp) +TARGET_LINK_LIBRARIES(dfcleartask dfhack) + # position - check the DF window and cursor parameters ADD_EXECUTABLE(dfposition position.cpp) TARGET_LINK_LIBRARIES(dfposition dfhack) @@ -104,6 +109,7 @@ dfunstuck dfprobe dfdoffsets dfattachtest +dfcleartask dfexpbench dfsuspend dfflows diff --git a/tools/supported/cleartask.cpp b/tools/supported/cleartask.cpp new file mode 100644 index 000000000..267a686ff --- /dev/null +++ b/tools/supported/cleartask.cpp @@ -0,0 +1,73 @@ +// clears the "tasked" flag on all items +// original code by Quietust (http://www.bay12forums.com/smf/index.php?action=profile;u=18111) +#include +#include +#include +#include +#include +#include +using namespace std; + +#include +#include +#include + +int main () +{ + DFHack::Process * p; + unsigned int i; + DFHack::ContextManager DFMgr("Memory.xml"); + DFHack::Context * DF; + try + { + DF = DFMgr.getSingleContext(); + DF->Attach(); + } + catch (exception& e) + { + cerr << e.what() << endl; +#ifndef LINUX_BUILD + cin.ignore(); +#endif + return 1; + } + + DFHack::memory_info * mem = DF->getMemoryInfo(); + p = DF->getProcess(); + uint32_t item_vec_offset = 0; + try + { + item_vec_offset = p->getDescriptor()->getAddress ("items_vector"); + } + catch(DFHack::Error::MissingMemoryDefinition & e) + { + cerr << "missing offset for the item vector, exiting :(" << endl; + #ifndef LINUX_BUILD + cin.ignore(); + #endif + return 1; + } + + DFHack::DfVector p_items (p, item_vec_offset); + uint32_t size = p_items.size(); + + int numtasked = 0; + for (i=0;ireadDWord(p_items[i] + 0x0C); + if (flags.bits.in_job) + { + flags.bits.in_job = 0; + p->writeDWord(p_items[i] + 0x0C, flags.whole); + numtasked++; + } + } + cout << "Found and untasked " << numtasked << " items." << endl; + +#ifndef LINUX_BUILD + cout << "Done. Press any key to continue" << endl; + cin.ignore(); +#endif + return 0; +} \ No newline at end of file From a159707250a0e34fc651b3d0b1b16250c79848a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 14 Aug 2010 01:25:18 +0200 Subject: [PATCH 16/18] Fix memleak with Context not cleaning up. --- README.rst | 4 ++++ library/DFContext.cpp | 2 ++ library/DFProcess-linux-SHM.cpp | 5 +---- library/DFProcess-linux-wine.cpp | 2 +- library/DFProcess-linux.cpp | 2 +- library/DFProcess-windows-SHM.cpp | 5 +---- library/DFProcess-windows.cpp | 5 +---- library/include/dfhack/DFModule.h | 2 +- library/modules/Maps.cpp | 2 ++ tools/examples/processenum.cpp | 11 +++++++++++ 10 files changed, 25 insertions(+), 15 deletions(-) diff --git a/README.rst b/README.rst index ff93b49f3..1e479d107 100644 --- a/README.rst +++ b/README.rst @@ -84,6 +84,10 @@ dfprospector ============ Lists all available minerals on the map and how much of them there is. +dfprobe +============ +Can be used to determine tile properties. + dfreveal ======== Reveals the whole map, waits for input and hides it again. If you close diff --git a/library/DFContext.cpp b/library/DFContext.cpp index 15939dee9..1499f566d 100644 --- a/library/DFContext.cpp +++ b/library/DFContext.cpp @@ -59,6 +59,7 @@ Context::Context (Process* p) : d (new DFContextShared()) Context::~Context() { + cerr << "called Context destructor" << endl; Detach(); delete d; } @@ -88,6 +89,7 @@ bool Context::Detach() { if (!d->p->detach()) { + cerr << "Context::Detach failed!" << endl; return false; } d->shm_start = 0; diff --git a/library/DFProcess-linux-SHM.cpp b/library/DFProcess-linux-SHM.cpp index 9c8d9aab1..acf519ecf 100644 --- a/library/DFProcess-linux-SHM.cpp +++ b/library/DFProcess-linux-SHM.cpp @@ -569,10 +569,7 @@ bool SHMProcess::attach() bool SHMProcess::detach() { - if(!d->attached) - { - return false; - } + if(!d->attached) return true; if(d->locked) { resume(); diff --git a/library/DFProcess-linux-wine.cpp b/library/DFProcess-linux-wine.cpp index 6f288a078..b71e2266f 100644 --- a/library/DFProcess-linux-wine.cpp +++ b/library/DFProcess-linux-wine.cpp @@ -331,7 +331,7 @@ bool WineProcess::attach() bool WineProcess::detach() { - if(!d->attached) return false; + if(!d->attached) return true; if(!d->suspended) suspend(); int result = 0; // close /proc/PID/mem diff --git a/library/DFProcess-linux.cpp b/library/DFProcess-linux.cpp index 2402609e1..25dfa0d8c 100644 --- a/library/DFProcess-linux.cpp +++ b/library/DFProcess-linux.cpp @@ -318,7 +318,7 @@ bool NormalProcess::attach() bool NormalProcess::detach() { - if(!d->attached) return false; + if(!d->attached) return true; if(!d->suspended) suspend(); int result = 0; // close /proc/PID/mem diff --git a/library/DFProcess-windows-SHM.cpp b/library/DFProcess-windows-SHM.cpp index f9a7cad26..5bb100e34 100644 --- a/library/DFProcess-windows-SHM.cpp +++ b/library/DFProcess-windows-SHM.cpp @@ -632,10 +632,7 @@ bool SHMProcess::attach() bool SHMProcess::detach() { - if(!d->attached) - { - return false; - } + if(!d->attached) return true; //cerr << "detach" << endl;// FIXME: throw if(d->locked) { diff --git a/library/DFProcess-windows.cpp b/library/DFProcess-windows.cpp index da44a0f32..dad67b135 100644 --- a/library/DFProcess-windows.cpp +++ b/library/DFProcess-windows.cpp @@ -249,10 +249,7 @@ bool NormalProcess::attach() bool NormalProcess::detach() { - if(!d->attached) - { - return false; - } + if(!d->attached) return true; resume(); d->attached = false; return true; diff --git a/library/include/dfhack/DFModule.h b/library/include/dfhack/DFModule.h index d4c840b64..7ed3e6738 100644 --- a/library/include/dfhack/DFModule.h +++ b/library/include/dfhack/DFModule.h @@ -33,7 +33,7 @@ namespace DFHack class DFHACK_EXPORT Module { public: - ~Module(){}; + virtual ~Module(){}; virtual bool Start(){return true;};// default start... virtual bool Finish() = 0;// everything should have a Finish() // should Context call Finish when Resume is called? diff --git a/library/modules/Maps.cpp b/library/modules/Maps.cpp index e7d43a2a5..17c6c2034 100644 --- a/library/modules/Maps.cpp +++ b/library/modules/Maps.cpp @@ -123,8 +123,10 @@ Maps::Maps(DFContextShared* _d) Maps::~Maps() { + cerr << "called Maps destructor" << endl; if(d->Started) Finish(); + delete d; } /*-----------------------------------* diff --git a/tools/examples/processenum.cpp b/tools/examples/processenum.cpp index 50b0df0a1..728736b65 100644 --- a/tools/examples/processenum.cpp +++ b/tools/examples/processenum.cpp @@ -102,6 +102,17 @@ int main (void) Cman.Refresh(&inval); int nCont = Cman.size(); int nInval = inval.size(); + DFHack::Context * cont = Cman.getSingleContext(); + if(cont) + { + if(cont->Attach()) + cont->getMaps(); + bool result = cont->Detach(); + if(!result) + { + cerr << "Something went horribly wrong during detach" << endl; + } + } cout << "Contexts:" << endl; for(int i = 0; i < nCont; i++) From 94872b8abd5f50f31d6b5f292ae0a8741a9064d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 14 Aug 2010 18:32:38 +0200 Subject: [PATCH 17/18] A bit of checking in some places. --- library/DFContext.cpp | 1 - library/modules/Maps.cpp | 1 - tools/examples/processenum.cpp | 8 +++++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/library/DFContext.cpp b/library/DFContext.cpp index 1499f566d..d46302426 100644 --- a/library/DFContext.cpp +++ b/library/DFContext.cpp @@ -59,7 +59,6 @@ Context::Context (Process* p) : d (new DFContextShared()) Context::~Context() { - cerr << "called Context destructor" << endl; Detach(); delete d; } diff --git a/library/modules/Maps.cpp b/library/modules/Maps.cpp index 17c6c2034..0cf3588a1 100644 --- a/library/modules/Maps.cpp +++ b/library/modules/Maps.cpp @@ -123,7 +123,6 @@ Maps::Maps(DFContextShared* _d) Maps::~Maps() { - cerr << "called Maps destructor" << endl; if(d->Started) Finish(); delete d; diff --git a/tools/examples/processenum.cpp b/tools/examples/processenum.cpp index 728736b65..745e94371 100644 --- a/tools/examples/processenum.cpp +++ b/tools/examples/processenum.cpp @@ -106,7 +106,13 @@ int main (void) if(cont) { if(cont->Attach()) - cont->getMaps(); + { + DFHack::Maps * mapz = cont->getMaps(); + cont->Suspend(); + mapz->Start(); + cont->Resume(); + } + bool result = cont->Detach(); if(!result) { From 891c4542561113751d2997e63de7abab84e731aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 14 Aug 2010 20:22:59 +0200 Subject: [PATCH 18/18] Fix build of offset editor skeleton, make it optional and disabled by default. --- CMakeLists.txt | 7 ++++++- offsetedit/CMakeLists.txt | 1 + offsetedit/src/CMakeLists.txt | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 160b71a6f..a03f7d6cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,7 @@ OPTION(BUILD_DFHACK_DOCUMENTATION "Create doxygen documentation for developers" 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) +OPTION(BUILD_OFFSET_EDITOR "Build the Offset GUI editor (not ready for use)." OFF) include_directories (${CMAKE_SOURCE_DIR}/library/include/) include_directories (${CMAKE_SOURCE_DIR}/library/shm/) @@ -33,7 +34,11 @@ include_directories (${CMAKE_SOURCE_DIR}/library/depends/tinyxml/) include_directories (${CMAKE_SOURCE_DIR}/library/depends/argstream/) add_subdirectory (library) -add_subdirectory (offsetedit) + +IF(BUILD_OFFSET_EDITOR) + add_subdirectory (offsetedit) +ENDIF(BUILD_OFFSET_EDITOR) + add_subdirectory (library/shm) add_subdirectory (tools/examples) add_subdirectory (tools/playground) diff --git a/offsetedit/CMakeLists.txt b/offsetedit/CMakeLists.txt index 246f3ba3d..f8065bc4c 100644 --- a/offsetedit/CMakeLists.txt +++ b/offsetedit/CMakeLists.txt @@ -1,3 +1,4 @@ + project(dfoffsetedit) cmake_minimum_required(VERSION 2.6) find_package(Qt4 QUIET) diff --git a/offsetedit/src/CMakeLists.txt b/offsetedit/src/CMakeLists.txt index 0804dd66e..9a2218413 100644 --- a/offsetedit/src/CMakeLists.txt +++ b/offsetedit/src/CMakeLists.txt @@ -18,7 +18,7 @@ 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_UI_h ${dfedit_UI}) +QT4_WRAP_UI(dfoffsetedit_UI_h ${dfoffsetedit_UI}) qt4_automoc(${dfoffsetedit_SRCS}) add_executable(dfoffsetedit ${dfoffsetedit_SRCS} ${dfoffsetedit_RC_SRCS} ${dfoffsetedit_UI_h})