Finish up code for hotkeys and notes, just need to find offsets for linux versions and windows < d17

Signed-off-by: belal <jimbelal@gmail.com>
develop
belal 2010-02-17 21:08:54 -05:00
parent e71f41fd42
commit 387e1e8794
4 changed files with 57 additions and 1 deletions

@ -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 *) &note.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,

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

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

@ -1120,6 +1120,11 @@
<Offset name="note_name">0x8</Offset>
<Offset name="note_xyz">0x24</Offset>
<Address name="hotkey_start">0x14240DC</Address><!-- 0x018F40DC -->
<Offset name="hotkey_mode">0x1C</Offset>
<Offset name="hotkey_xyz">0x20</Offset>
<HexValue name="hotkey_size">0x2C</HexValue>
<VTable name="viewscreen_vtable">
<class vtable="0x0092014C" name="viewscreen_conversation" />
<class vtable="0x0092752C" name="viewscreen_option" />