User:AzureLightning/Memory research
From DwarfFortressWiki
Any and all offsets and memory addresses are only valid for v0.27.169.33a.
Contents |
[edit] Links
Main memory hacking research
Rick's memory research
Iluxan's memory research
[edit] Addresses
| Address | Size | Type | Name | Description |
|---|---|---|---|---|
| 008F5288 | 4 | long | Cursor X Coordinate | Number of cells EAST from the west side. Value is -30000 when cursor is not in use. |
| 008F528C | 4 | long | Cursor Y Coordinate | Number of cells SOUTH from the north side. |
| 008F5290 | 4 | long | Cursor Z Coordinate | Number of levels UP from the bottom level |
| 00C2F548 | 4 | long | Creature Focus | Indexes into the full creature list |
| 01237AD0 | 4 | long | Dwarven Race ID | Used to identify dwarves (Or it could just be the "controlling" civilization you are playing as.) |
| 01416A3C | 4:4 | vector | Full Creature list | List of of all creatures. There are other vectors based upon various factors |
| 01458568 | 4 | pointer | Map data | Points to a list of addresses measuring Block Count X long.
Those each reference a list of addresses measuring Block Count Y long. Each of those reference a list of addresses Block Count Z long. And finally, each of those addresses references a map block. |
| 01458580 | 4 | long | Block Count X | Number of 16x16 blocks in the X direction |
| 01458584 | 4 | long | Block Count Y | Number of 16x16 blocks in the Y direction |
| 01458588 | 4 | long | Block Count Z | Number of Z levels |
| 0145858C | 4 | long | Cell Count X | Number of cells in the X direction (Should be Block Count X * 16) |
| 01458590 | 4 | long | Cell Count Y | Number of cells in the X direction (Should be Block Count Y * 16) |
| 01458594 | 4 | long | Cell Count Z | Number of Z levels (Should equal the Block Count Z) |
Note: Bold addresses need to be verified. I may have remembered them wrong
[edit] Map Block
| Offset | Size | Type | Name | Notes | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0000h
| 4 | pointer | Unknown | |||||||||||
000Ch
| 4:4 | vector | Vein vector | |||||||||||
005Eh
| 2 * 16 * 16 | list of shorts | Unknown | |||||||||||
0260h
| 4 * 16 * 16 | list of longs | Designation |
| ||||||||||
0660h
| 4 * 16 * 16 | list of longs | Unknown |
Is probably flags?
| ||||||||||
0A60h
| 1 * 16 * 16 | list of bytes | Unknown | |||||||||||
0B60h
| 4 * 16 * 16 | list of longs | Pathfinding | |||||||||||
1160h
| 2 * 16 * 16 | list of shorts | Unknown | |||||||||||
1360h
| 2 * 16 * 16 | list of shorts | Unknown | |||||||||||
1560h
| 2 * 16 * 16 | list of shorts | Temperature #1 | 10100 or above counts as 'Warm'. | ||||||||||
1760h
| 2 * 16 * 16 | list of shorts | Temperature #2 | |||||||||||
1960h
| 2 * 16 * 16 | list of shorts | Unknown | |||||||||||
1B60h
| 2 * 16 * 16 | list of shorts | Unknown |
[edit] Veins
Veins designate a chunk of some material, be it stone, ore or gems, that can be dug up by miners. Using a bit-mask scheme, a vein can be placed anywhere in a 16x16 map block. All it takes for a vein to exist at a given column on a given row is for the corresponding bit in the bit-mask to be 1 for the given row. I've yet to do full-on editing of these veins other than making existing tiles toggle off as well as changing the vein type. Adding to the vein doesn't seem possible yet. There is likely a stacking priority with the different grouping of rock elements.
View of the bit mask scheme
| Offset | Size | Type | Name | Notes |
|---|---|---|---|---|
0000h
| 4 | pointer | Vtable | |
0004h
| 2 | short | Vein type | Ore, Stone, Gems are all in the same list |
0006h
| 2*16 | list of shorts | 16-bit mask for each row in the block | Bits start from the west side of the row, going east with each bit position. |
[edit] Skills
| Offset | Size | Type | Name | Notes |
|---|---|---|---|---|
0000h
| 2 | short | Type | See table below. |
0002h
| 2 | short | ??? | might be experience |
0004h
| 2 | short | Rating | Range: 0(Dabbling)-15(Legendary) See table below. |
[edit] Skill Types
Colors can do with some work, as they are supposed to indicate groupings of skills.
| Index | Name |
|---|---|
| 0 | Mining |
| 1 | Wood Cutter |
| 2 | Carpentry |
| 3 | Engraver |
| 4 | Masonry |
| 5 | Animal Training |
| 6 | Animal Caretaking |
| 7 | Fish Dissecting |
| 8 | Animal Dissecting |
| 9 | Fish Cleaning |
| 10 | Butchery |
| 11 | Trapping |
| 12 | Tanning |
| 13 | Weaving |
| 14 | Brewing |
| 15 | Alchemist |
| 16 | Clothery |
| 17 | Milling |
| 18 | Threshing |
| 19 | Cheese Making |
| 20 | Milking |
| 21 | Cooking |
| 22 | Growing |
| 23 | Herbalism |
| 24 | Fishing |
| 25 | Furnace Operating |
| 26 | Strand Extraction |
| 27 | Weaponsmithing |
| 28 | Armorsmithing |
| 29 | Metalsmithing |
| 30 | Gem Cutting |
| 31 | Gem Setting |
| 32 | Wood Crafting |
| 33 | Stone Crafting |
| 34 | Metal Crafting |
| 35 | Glass Making |
| 36 | Leatherworking |
| 37 | Bone Carving |
| 38 | Wrestling |
| 39 | Axe User |
| 40 | Sword User |
| 41 | Knife User |
| 42 | Mace User |
| 43 | Hammer User |
| 44 | Spear User |
| 45 | Marks User |
| 46 | Shield User |
| 47 | Armor User |
| 48 | Seige Engineering |
| 49 | Seige Operating |
| 50 | Bowyering |
| 51 | Pike User |
| 52 | Lasher |
| 53 | Bow User |
| 54 | Blowgunner |
| 55 | Thrower |
| 56 | Mechanics |
| 57 | Druid |
| 58 | Ambusher |
| 59 | Architecture |
| 60 | Wood Burning |
| 61 | Lye Making |
| 62 | Soaping |
| 63 | Potash Making |
| 64 | Dying |
| 65 | Pump Operating |
| 66 | Swimming |
| 67 | Persuading |
| 68 | Negociating |
| 69 | Judging of Intent |
| 70 | Appraising |
| 71 | Organizing |
| 72 | Record Keeping |
| 73 | Lying |
| 74 | Intimidating |
| 75 | Conversationalism |
| 76 | Comedy |
| 77 | Flattery |
| 78 | Consoling |
| 79 | Pacifying |
[edit] Skill Ratings
| Rank | Name Prefix |
|---|---|
| 0 | Dabbling |
| 1 | Novice |
| 2 | no-prefix |
| 3 | Competent |
| 4 | Skilled |
| 5 | Proficient |
| 6 | Talented |
| 7 | Adept |
| 8 | Expert |
| 9 | Professional |
| 10 | Accomplished |
| 11 | Great |
| 12 | Master |
| 13 | High Master |
| 14 | Grand Master |
| 15 | Legendary |

