From 387e1e879493b30a41b2210eb16e70086da88957 Mon Sep 17 00:00:00 2001 From: belal Date: Wed, 17 Feb 2010 21:08:54 -0500 Subject: [PATCH] Finish up code for hotkeys and notes, just need to find offsets for linux versions and windows < d17 Signed-off-by: belal --- library/DFHackAPI.cpp | 40 +++++++++++++++++++++++++++++++++++++++- library/DFHackAPI.h | 3 +++ library/DFTypes.h | 10 ++++++++++ output/Memory.xml | 5 +++++ 4 files changed, 57 insertions(+), 1 deletion(-) diff --git a/library/DFHackAPI.cpp b/library/DFHackAPI.cpp index 8540dc879..602f90e60 100644 --- a/library/DFHackAPI.cpp +++ b/library/DFHackAPI.cpp @@ -87,7 +87,11 @@ public: uint32_t note_background_offset; uint32_t note_name_offset; uint32_t note_xyz_offset; - + uint32_t hotkey_start; + uint32_t hotkey_mode_offset; + uint32_t hotkey_xyz_offset; + uint32_t hotkey_size; + uint32_t dwarf_lang_table_offset; ProcessEnumerator* pm; @@ -104,6 +108,7 @@ public: bool viewSizeInited; bool itemsInited; bool notesInited; + bool hotkeyInited; bool nameTablesInited; @@ -130,6 +135,7 @@ API::API (const string path_to_xml) d->viewSizeInited = false; d->itemsInited = false; d->notesInited = false; + d->hotkeyInited = false; d->pm = NULL; } @@ -902,6 +908,38 @@ bool API::ReadNote (const int32_t &index, t_note & note) g_pProcess->read (temp + d->note_xyz_offset, 3*sizeof (uint16_t), (uint8_t *) ¬e.x); return true; } +bool API::InitReadHotkeys( ) +{ + memory_info * minfo = d->offset_descriptor; + d->hotkey_start = minfo->getAddress("hotkey_start"); + d->hotkey_mode_offset = minfo->getOffset ("hotkey_mode"); + d->hotkey_xyz_offset = minfo->getOffset("hotkey_xyz"); + d->hotkey_size = minfo->getHexValue("hotkey_size"); + + if (d->hotkey_start && d->hotkey_mode_offset && d->hotkey_size) + { + d->hotkeyInited = true; + return true; + } + else + { + d->hotkeyInited = false; + return false; + } +} +bool API::ReadHotkeys(t_hotkey hotkeys[]) +{ + assert (d->hotkeyInited); + uint32_t currHotkey = d->hotkey_start; + for(uint32_t i = 0 ; i < NUM_HOTKEYS ;i++) + { + d->p->readSTLString(currHotkey,hotkeys[i].name,10); + hotkeys[i].mode = g_pProcess->readWord(currHotkey+d->hotkey_mode_offset); + g_pProcess->read (currHotkey + d->hotkey_xyz_offset, 3*sizeof (int32_t), (uint8_t *) &hotkeys[i].x); + currHotkey+=d->hotkey_size; + } + return true; +} // returns index of creature actually read or -1 if no creature can be found int32_t API::ReadCreatureInBox (int32_t index, t_creature & furball, const uint16_t &x1, const uint16_t &y1, const uint16_t &z1, diff --git a/library/DFHackAPI.h b/library/DFHackAPI.h index 5f3dce912..ce7ef8dac 100644 --- a/library/DFHackAPI.h +++ b/library/DFHackAPI.h @@ -175,6 +175,9 @@ namespace DFHack bool InitReadNotes( uint32_t & numnotes ); bool ReadNote(const int32_t &index, t_note & note); void FinishReadNotes(); + + bool InitReadHotkeys( ); + bool ReadHotkeys(t_hotkey hotkeys[]); bool getViewCoords (int32_t &x, int32_t &y, int32_t &z); bool setViewCoords (const int32_t &x, const int32_t &y, const int32_t &z); diff --git a/library/DFTypes.h b/library/DFTypes.h index 61a05720b..717c82180 100644 --- a/library/DFTypes.h +++ b/library/DFTypes.h @@ -764,5 +764,15 @@ struct t_note uint16_t z; }; +#define NUM_HOTKEYS 16 +struct t_hotkey +{ + char name[10]; + int16_t mode; + int32_t x; + int32_t y; + int32_t z; +}; + }// namespace DFHack #endif // TYPES_H_INCLUDED diff --git a/output/Memory.xml b/output/Memory.xml index 188c1501a..5c1d2a8e8 100644 --- a/output/Memory.xml +++ b/output/Memory.xml @@ -1120,6 +1120,11 @@ 0x8 0x24 +
0x14240DC
+ 0x1C + 0x20 + 0x2C +