v50 Steam/Premium information for editors
  • v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
  • Use this page to report any issues related to the migration.
This notice may be cached—the current version can be found here.

Difference between revisions of "40d:Memory hacking"

From Dwarf Fortress Wiki
Jump to navigation Jump to search
(Added Strength/Agility/Toughness and Skill array offsets)
m (Changed quality rating from "Unrated" to "Superior" using the rating script)
 
(37 intermediate revisions by 16 users not shown)
Line 1: Line 1:
== New string format ==
+
{{Quality|Superior|11:03, 18 May 2015 (UTC)}}
 +
{{av}}
 +
== Versions ==
 +
See the following subpages for version specific information
 +
* '''[[Memory hacking/v0.27.169.33g|v0.27.169.33g]]'''
 +
* [[Memory hacking/v0.27.169.33f|v0.27.169.33f]]
 +
* [[Memory hacking/v0.27.169.33e|v0.27.169.33e]]
 +
* [[Memory hacking/v0.27.169.33d|v0.27.169.33d]]
 +
* [[Memory hacking/v0.27.169.33c|v0.27.169.33c]]
 +
* [[Memory hacking/v0.27.169.33b|v0.27.169.33b]]
 +
* [[Memory hacking/v0.27.169.33a|v0.27.169.33a]]
 +
* [[Memory hacking/v0.28.181.40d16|v0.28.181.40d16]]
 +
* [[Memory hacking/v0.28.181.40d17|v0.28.181.40d17]]
 +
* [[Memory hacking/v0.28.181.40d18|v0.28.181.40d18]]
 +
* [[Memory hacking/v0.28.181.40d19|v0.28.181.40d19]]
 +
 
 +
== Data Types ==
 +
=== String ===
  
 
{|  border="1" cellpadding="2" width="100%"
 
{|  border="1" cellpadding="2" width="100%"
 
| Offset || Size || Type || Description
 
| Offset || Size || Type || Description
 
|-
 
|-
|0x00 || 16 || Character buffer || Holds the string data if capacity < 16
+
| 0x00 || 4 || Junk || Junk data that exists due to a curious artifact in the C++ standard. Technically it's the allocator - in reality, the default allocator has no data associated with it.
 +
|-
 +
| 0x04 || 16 || Character buffer || Holds the string data if capacity < 16
 
|-
 
|-
|0x00 || 4 || Character pointer || Points to the string data if capacity >= 16
+
| 0x04 || 4 || Character pointer || Points to the string data if capacity >= 16
 
|-
 
|-
|0x10 || 4 || Length || Current length of the string
+
| 0x14 || 4 || Length || Current length of the string
 
|-
 
|-
|0x14 || 4 || Capacity || Current capacity of the string buffer (also indicates which mode the string is in)
+
| 0x18 || 4 || Capacity || Current capacity of the string buffer (also indicates which mode the string is in)
 
|}
 
|}
  
Yes, the first two items overlap. This is correct. This is the MSVC Express string format - Toady appears to be using standard C++ structures pretty much everywhere.
+
Yes, the second two items overlap. This is correct. This is the MSVC Express string format - Toady appears to be using standard C++ structures pretty much everywhere.
  
== Vector format ==
+
=== Vector ===
  
 
{|  border="1" cellpadding="2" width="100%"
 
{|  border="1" cellpadding="2" width="100%"
 
| Offset || Size || Type || Description
 
| Offset || Size || Type || Description
 
|-
 
|-
|0x00 || 4 || vtable || (not useful)
+
| 0x00 || 4 || Junk || Junk data that exists due to a curious artifact in the C++ standard. Technically it's the allocator - in reality, the default allocator has no data associated with it.
 +
|-
 +
| 0x04 || 4 || Array start
 
|-
 
|-
|0x04 || 4 || Array start
+
| 0x08 || 4 || Array end || (End - Start)/4 = # of elements (if pointers)
 
|-
 
|-
|0x08 || 4 || Array end || (End - Start)/4 = # of elements
+
| 0x0C || 4 || Array allocated end || (Allocated End - Start)/4 = capacity (if pointers)
 
|}
 
|}
  
== Attention! ==
+
== Type ID list ==
We need to be very clear about what version(s) these addresses apply to.  Please list version numbers along with addresses.
 
  
== Addresses for 27.169.33a ==
+
Most likely incomplete, but this was all that could be found so far.
 
 
{| border="1" cellpadding="2" width="100%"
 
! width="25%" | Name
 
! width="50%" | Notes
 
! width="25%" | Address
 
  
 +
{|  border="1" cellpadding="2" width="100%"
 +
| ID || Meaning
 +
|-
 +
| <code>0x00</code> || Miner
 +
|-
 +
| <code>0x01</code> || Woodworker
 +
|-
 +
| <code>0x02</code> || Carpenter
 +
|-
 +
| <code>0x03</code> || Bowyer
 +
|-
 +
| <code>0x04</code> || Woodcutter
 +
|-
 +
| <code>0x05</code> || Stoneworker
 +
|-
 +
| <code>0x06</code> || Engraver
 +
|-
 +
| <code>0x07</code> || Mason
 +
|-
 +
| <code>0x08</code> || Ranger
 +
|-
 +
| <code>0x09</code> || Animal Caretaker
 +
|-
 +
| <code>0x0A</code> || Animal Trainer
 +
|-
 +
| <code>0x0B</code> || Hunter
 +
|-
 +
| <code>0x0C</code> || Trapper
 +
|-
 +
| <code>0x0D</code> || Animal Dissector
 +
|-
 +
| <code>0x0E</code> || Metalsmith
 +
|-
 +
| <code>0x0F</code> || Furnace Operator
 +
|-
 +
| <code>0x10</code> || Weaponsmith
 +
|-
 +
| <code>0x11</code> || Armorer
 +
|-
 +
| <code>0x12</code> || Blacksmith
 +
|-
 +
| <code>0x13</code> || Metalcrafter
 +
|-
 +
| <code>0x14</code> || Jeweler
 +
|-
 +
| <code>0x15</code> || Gem Cutter
 +
|-
 +
| <code>0x16</code> || Gem Setter
 +
|-
 +
| <code>0x17</code> || Craftsman
 +
|-
 +
| <code>0x18</code> || Woodcrafter
 +
|-
 +
| <code>0x19</code> || Stonecrafter
 +
|-
 +
| <code>0x1A</code> || Leatherworker
 +
|-
 +
| <code>0x1B</code> || Bone Carver
 +
|-
 +
| <code>0x1C</code> || Weaver
 +
|-
 +
| <code>0x1D</code> || Clothier
 +
|-
 +
| <code>0x1E</code> || Glassmaker
 +
|-
 +
| <code>0x1F</code> || Strand Extractor
 +
|-
 +
| <code>0x20</code> || Queen
 +
|-
 +
| <code>0x21</code> || Queen Consort
 +
|-
 +
| <code>0x22</code> || Fishery Worker
 +
|-
 +
| <code>0x23</code> || Fisherman
 +
|-
 +
| <code>0x24</code> || Fish Dissector
 +
|-
 +
| <code>0x25</code> || Fish Cleaner
 +
|-
 +
| <code>0x26</code> || Farmer
 +
|-
 +
| <code>0x27</code> || Cheese Maker
 +
|-
 +
| <code>0x28</code> || Milker
 +
|-
 +
| <code>0x29</code> || Cook
 +
|-
 +
| <code>0x2A</code> || Thresher
 +
|-
 +
| <code>0x2B</code> || Miller
 +
|-
 +
| <code>0x2C</code> || Butcher
 +
|-
 +
| <code>0x2D</code> || Tanner
 +
|-
 +
| <code>0x2E</code> || Dyer
 +
|-
 +
| <code>0x2F</code> || Planter
 +
|-
 +
| <code>0x30</code> || Herbalist
 +
|-
 +
| <code>0x31</code> || Brewer
 +
|-
 +
| <code>0x32</code> || Soap Maker
 +
|-
 +
| <code>0x33</code> || Potash Maker
 +
|-
 +
| <code>0x34</code> || Lye Maker
 +
|-
 +
| <code>0x35</code> || Wood Burner
 +
|-
 +
| <code>0x36</code> || Engineer
 +
|-
 +
| <code>0x37</code> || Mechanic
 +
|-
 +
| <code>0x38</code> || Siege Engineer
 +
|-
 +
| <code>0x39</code> || Siege Operator
 +
|-
 +
| <code>0x3A</code> || Pump Operator
 +
|-
 +
| <code>0x3B</code> || Clerk
 +
|-
 +
| <code>0x3C</code> || Administrator
 +
|-
 +
| <code>0x3D</code> || Trader
 +
|-
 +
| <code>0x3E</code> || Architect
 +
|-
 +
| <code>0x3F</code> || Alchemist
 +
|-
 +
| <code>0x40</code> || Tax Collector
 +
|-
 +
| <code>0x41</code> || Hammerer
 +
|-
 +
| <code>0x42</code> || Baroness
 +
|-
 +
| <code>0x43</code> || Countess
 +
|-
 +
| <code>0x44</code> || Duchess
 +
|-
 +
| <code>0x45</code> || Baroness Consort
 +
|-
 +
| <code>0x46</code> || Countess Consort
 +
|-
 +
| <code>0x47</code> || Duchness Consort
 +
|-
 +
| <code>0x48</code> || Philosopher
 +
|-
 +
| <code>0x49</code> || Advisor
 +
|-
 +
| <code>0x4A</code> || Dungeon Master
 +
|-
 +
| <code>0x4B</code> || Merchant
 +
|-
 +
| <code>0x4C</code> || Diplomat
 +
|-
 +
| <code>0x4D</code> || Guild Representative
 +
|-
 +
| <code>0x4E</code> || Merchant Baroness
 +
|-
 +
| <code>0x4F</code> || Merchant Princess
 +
|-
 +
| <code>0x50</code> || Outpost Liaison
 
|-
 
|-
| colspan="3" | '''Useful Variables'''
+
| <code>0x51</code> || Druid
 
 
 
|-
 
|-
| Art defacement malus
+
| <code>0x52</code> || Champion
| normally -1000 (18 FC FF FF)
 
| 0079DC2F
 
 
 
 
|-
 
|-
| Current Year
+
| <code>0x53</code> || Hammerman
|  
 
| 00C34378
 
 
 
|-
 
|-
| Dwarf Race ID
+
| <code>0x54</code> || Hammer Lord
| As in the race identifier in the [[#Creature Structure]]
 
| 01237AD0 (probably)
 
 
 
|-
 
|-
| Creature Vector
+
| <code>0x55</code> || Spearman
|
 
| 01416A48 (probably)
 
 
 
|}
 
 
 
 
 
== Creature Structure ==
 
 
 
In version {fill this in please}
 
 
 
Structure Offsets:
 
{|  border="1" cellpadding="2" width="100%"
 
| Offset || Size || Type || Description
 
 
|-
 
|-
|0x00 || 4 || Vptr || Virtual function table pointer
+
| <code>0x56</code> || Spearmaster
 
|-
 
|-
|0x04 || 24 || First name || See above string format
+
| <code>0x57</code> || Crossbowman
 
|-
 
|-
|0x32 || 4 || Surname word 1 || No part of speech, like in the old structure
+
| <code>0x58</code> || Elite Crossbowman
 
|-
 
|-
|0x36 || 4 || Surname word 2 ||  
+
| <code>0x59</code> || Wrestler
 
|-
 
|-
|0x70 || 24 || Custom profession name || See above string format
+
| <code>0x5A</code> || Elite Wrestler
 
|-
 
|-
|0x88 || 2 || Type ID #1 || rowspan="2"|These two are wild guesses - I believe they are dwarf types. They appear to be duplicated (I'm told Toady stores the original dwarf type for legends) and I don't know which is the "old" and which is the "new". I've entered the values I've found in the Type ID table below.  #2 is the current type.
+
| <code>0x5B</code> || Axeman
 
|-
 
|-
|0x8a || 2 || Type ID #2
+
| <code>0x5C</code> || Axe Lord
 
|-
 
|-
|0x8C || 4 || Creature Race || A6 is the dwarf default (this may be different if the user has a mod installed)
+
| <code>0x5D</code> || Swordsman
 
|-
 
|-
|0xe4 || 4 || Flags || (1 << 1) if creature is dead (redundant?)
+
| <code>0x5E</code> || Swordmaster
 
|-
 
|-
|0xe8 || 4 || Flags || (1 << 7) if creature is dead (redundant?)
+
| <code>0x5F</code> || Maceman
(1 << 17) if creature is ready for slaughter
 
 
|-
 
|-
|0x1F8 || 2 || Strange mood || 0xFFFF means no mood
+
| <code>0x60</code> || Mace Lord
 
|-
 
|-
|0x41C || 4 || Strength || 0 to 5
+
| <code>0x61</code> || Pikeman
 
|-
 
|-
|0x420 || 4 || Agility || 0 to 5
+
| <code>0x62</code> || Pikemaster
 
|-
 
|-
|0x424 || 4 || Toughness || 0 to 5
+
| <code>0x63</code> || Bowman
 
|-
 
|-
|0x42C || 4 || Skill Start Ptr || Start of skill list
+
| <code>0x64</code> || Elite Bowman
 
|-
 
|-
|0x430 || 4 || Skill End Ptr || End of skill list
+
| <code>0x65</code> || Blowgunner
 
|-
 
|-
|0x458 || 102 || Labor preferences || 102 1 byte values, corresponding to the profession list. Mostly bools, with notable exceptions of shieldtype,armortype, and weaponnum. I have No idea what the last one means.
+
| <code>0x66</code> || Elite Blowgunner
 
|-
 
|-
|0x504 || 4 || Happiness level || 0 = miserable, >149 = ecstatic
+
| <code>0x67</code> || Recruit
 
|-
 
|-
|}
+
| <code>0x68</code> || Hunting creature
 
 
== Type ID list ==
 
 
 
Hideously incomplete and may be completely wrong.
 
 
 
{| border="1" cellpadding="2" width="100%"
 
| ID || Meaning
 
 
|-
 
|-
|0x00 || Miner
+
| <code>0x69</code> || War creature
 
|-
 
|-
|0x04 || Woodcutter
+
| <code>0x6A</code> || Master Thief
 
|-
 
|-
|0x2f || Planter
+
| <code>0x6B</code> || Thief
 
|-
 
|-
|0x29 || Cook
+
| <code>0x6C</code> || Peasant or creature
 
|-
 
|-
|0x31 || Brewer
+
| <code>0x6D</code> || Child
 
|-
 
|-
|0x37 || Mechanic
+
| <code>0x6E</code> || Baby
 
|-
 
|-
|0x3e || Architect
+
| <code>0x6F</code> || Drunk
 
|-
 
|-
|0x6c || Creature
+
| <code>0x70</code> || Lasher
 
|-
 
|-
 +
| <code>0x71</code> || Master Lasher
 
|}
 
|}
 
 
  
 
== Profession list ==
 
== Profession list ==
 
Obviously could do with some formatting.
 
 
 
  PROFESSION_MINE,
 
  PROFESSION_MINE,
 
  PROFESSION_HAUL_STONE,
 
  PROFESSION_HAUL_STONE,
Line 244: Line 388:
 
  PROFESSION_UNUSED_30,
 
  PROFESSION_UNUSED_30,
 
  PROFESSIONNUM,
 
  PROFESSIONNUM,
 +
[[Category:Guides]] [[Category:Hacking]]

Latest revision as of 11:03, 18 May 2015

This article is about an older version of DF.

Versions[edit]

See the following subpages for version specific information

Data Types[edit]

String[edit]

Offset Size Type Description
0x00 4 Junk Junk data that exists due to a curious artifact in the C++ standard. Technically it's the allocator - in reality, the default allocator has no data associated with it.
0x04 16 Character buffer Holds the string data if capacity < 16
0x04 4 Character pointer Points to the string data if capacity >= 16
0x14 4 Length Current length of the string
0x18 4 Capacity Current capacity of the string buffer (also indicates which mode the string is in)

Yes, the second two items overlap. This is correct. This is the MSVC Express string format - Toady appears to be using standard C++ structures pretty much everywhere.

Vector[edit]

Offset Size Type Description
0x00 4 Junk Junk data that exists due to a curious artifact in the C++ standard. Technically it's the allocator - in reality, the default allocator has no data associated with it.
0x04 4 Array start
0x08 4 Array end (End - Start)/4 = # of elements (if pointers)
0x0C 4 Array allocated end (Allocated End - Start)/4 = capacity (if pointers)

Type ID list[edit]

Most likely incomplete, but this was all that could be found so far.

ID Meaning
0x00 Miner
0x01 Woodworker
0x02 Carpenter
0x03 Bowyer
0x04 Woodcutter
0x05 Stoneworker
0x06 Engraver
0x07 Mason
0x08 Ranger
0x09 Animal Caretaker
0x0A Animal Trainer
0x0B Hunter
0x0C Trapper
0x0D Animal Dissector
0x0E Metalsmith
0x0F Furnace Operator
0x10 Weaponsmith
0x11 Armorer
0x12 Blacksmith
0x13 Metalcrafter
0x14 Jeweler
0x15 Gem Cutter
0x16 Gem Setter
0x17 Craftsman
0x18 Woodcrafter
0x19 Stonecrafter
0x1A Leatherworker
0x1B Bone Carver
0x1C Weaver
0x1D Clothier
0x1E Glassmaker
0x1F Strand Extractor
0x20 Queen
0x21 Queen Consort
0x22 Fishery Worker
0x23 Fisherman
0x24 Fish Dissector
0x25 Fish Cleaner
0x26 Farmer
0x27 Cheese Maker
0x28 Milker
0x29 Cook
0x2A Thresher
0x2B Miller
0x2C Butcher
0x2D Tanner
0x2E Dyer
0x2F Planter
0x30 Herbalist
0x31 Brewer
0x32 Soap Maker
0x33 Potash Maker
0x34 Lye Maker
0x35 Wood Burner
0x36 Engineer
0x37 Mechanic
0x38 Siege Engineer
0x39 Siege Operator
0x3A Pump Operator
0x3B Clerk
0x3C Administrator
0x3D Trader
0x3E Architect
0x3F Alchemist
0x40 Tax Collector
0x41 Hammerer
0x42 Baroness
0x43 Countess
0x44 Duchess
0x45 Baroness Consort
0x46 Countess Consort
0x47 Duchness Consort
0x48 Philosopher
0x49 Advisor
0x4A Dungeon Master
0x4B Merchant
0x4C Diplomat
0x4D Guild Representative
0x4E Merchant Baroness
0x4F Merchant Princess
0x50 Outpost Liaison
0x51 Druid
0x52 Champion
0x53 Hammerman
0x54 Hammer Lord
0x55 Spearman
0x56 Spearmaster
0x57 Crossbowman
0x58 Elite Crossbowman
0x59 Wrestler
0x5A Elite Wrestler
0x5B Axeman
0x5C Axe Lord
0x5D Swordsman
0x5E Swordmaster
0x5F Maceman
0x60 Mace Lord
0x61 Pikeman
0x62 Pikemaster
0x63 Bowman
0x64 Elite Bowman
0x65 Blowgunner
0x66 Elite Blowgunner
0x67 Recruit
0x68 Hunting creature
0x69 War creature
0x6A Master Thief
0x6B Thief
0x6C Peasant or creature
0x6D Child
0x6E Baby
0x6F Drunk
0x70 Lasher
0x71 Master Lasher

Profession list[edit]

PROFESSION_MINE,
PROFESSION_HAUL_STONE,
PROFESSION_HAUL_WOOD,
PROFESSION_HAUL_BODY,
PROFESSION_HAUL_FOOD,
PROFESSION_HAUL_REFUSE,
PROFESSION_HAUL_ITEM,
PROFESSION_HAUL_FURNITURE,
PROFESSION_HAUL_ANIMALS,
PROFESSION_CLEAN,
PROFESSION_CUTWOOD,
PROFESSION_CARPENTER,
PROFESSION_DETAIL,
PROFESSION_MASON,
PROFESSION_ARCHITECT,
PROFESSION_ANIMALTRAIN,
PROFESSION_ANIMALCARE,
PROFESSION_HEALTHCARE,
PROFESSION_BUTCHER,
PROFESSION_TRAPPER,
PROFESSION_DISSECT_VERMIN,
PROFESSION_LEATHER,
PROFESSION_TANNER,
PROFESSION_BREWER,
PROFESSION_ALCHEMIST,
PROFESSION_SOAP_MAKER,
PROFESSION_WEAVER,
PROFESSION_CLOTHESMAKER,
PROFESSION_MILLER,
PROFESSION_PROCESS_PLANT,
PROFESSION_MAKE_CHEESE,
PROFESSION_MILK,
PROFESSION_COOK,
PROFESSION_PLANT,
PROFESSION_HERBALIST,
PROFESSION_FISH,
PROFESSION_CLEAN_FISH,
PROFESSION_DISSECT_FISH,
PROFESSION_HUNT,
PROFESSION_SMELT,
PROFESSION_FORGE_WEAPON,
PROFESSION_FORGE_ARMOR,
PROFESSION_FORGE_FURNITURE,
PROFESSION_METAL_CRAFT,
PROFESSION_CUT_GEM,
PROFESSION_ENCRUST_GEM,
PROFESSION_WOOD_CRAFT,
PROFESSION_STONE_CRAFT,
PROFESSION_BONE_CARVE,
PROFESSION_GLASSMAKER,
PROFESSION_EXTRACT_STRAND,
PROFESSION_AXE,
PROFESSION_SWORD,
PROFESSION_MACE,
PROFESSION_HAMMER,
PROFESSION_SPEAR,
PROFESSION_DAGGER,
PROFESSION_CROSSBOW,
PROFESSION_BOW,
PROFESSION_BLOWGUN,
PROFESSION_PIKE,
PROFESSION_WHIP,
PROFESSION_SHIELDLEVEL,
PROFESSION_ARMORLEVEL,
PROFESSION_SIEGECRAFT,
PROFESSION_SIEGEOPERATE,
PROFESSION_BOWYER,
PROFESSION_MECHANIC,
PROFESSION_WEAPONNUMBER,
PROFESSION_POTASH_MAKING,
PROFESSION_LYE_MAKING,
PROFESSION_DYER,
PROFESSION_BURN_WOOD,
PROFESSION_OPERATE_PUMP,
PROFESSION_UNUSED_3,
PROFESSION_UNUSED_4,
PROFESSION_UNUSED_5,
PROFESSION_UNUSED_6,
PROFESSION_UNUSED_7,
PROFESSION_UNUSED_8,
PROFESSION_UNUSED_9,
PROFESSION_UNUSED_10,
PROFESSION_UNUSED_11,
PROFESSION_UNUSED_12,
PROFESSION_UNUSED_13,
PROFESSION_UNUSED_14,
PROFESSION_UNUSED_15,
PROFESSION_UNUSED_16,
PROFESSION_UNUSED_17,
PROFESSION_UNUSED_18,
PROFESSION_UNUSED_19,
PROFESSION_UNUSED_20,
PROFESSION_UNUSED_21,
PROFESSION_UNUSED_22,
PROFESSION_UNUSED_23,
PROFESSION_UNUSED_24,
PROFESSION_UNUSED_25,
PROFESSION_UNUSED_26,
PROFESSION_UNUSED_27,
PROFESSION_UNUSED_28,
PROFESSION_UNUSED_29,
PROFESSION_UNUSED_30,
PROFESSIONNUM,