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 @@