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.

Editing User:0x517A5D

Jump to navigation Jump to search

Warning: You are not logged in.
Your IP address will be recorded in this page's edit history.


The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
== Build (very old) ==
+
== Build ==
I obsessively min-max my starting profile, even though it doesn't matter in the long run.
+
Currently running
  
My latest build was intended for a resource-heavy wooded terrifying area in version {{version|0.31.03}}.
+
* a competent mason / proficient building designer / novice organizer / novice record keeper
 +
* a proficient armorsmith / skilled metalsmith / novice furnace operator
 +
* a proficient weaponsmith / skilled metalcrafter / novice furnace operator
 +
* a proficient bowyer / proficient mechanic
 +
* a skilled herbalist / novice bowyer / novice persuader / novice negotiator / novice judge of intent / novice appraiser / novice flatterer
 +
* a proficient brewer / skilled grower / novice armorsmith
 +
* a proficient cook / skilled grower / novice weaponsmith
  
* 4 ambusher / 2 crossbowman / 1 negotiator / 1 judge of intent / 1 appraiser / 1 pacifier
+
And
:Immediately drafted as sole early protection.  Starts with a free crossbow due to ambusher skill.  May mine if area seems safe.  Cross-trained as weaponsmith.
+
* 2 copper picks
* 5 diagnostician / 4 surgeon / 1 wound dresser
+
* 1 steel battle axe
:Woodcutting, mining.  Cross-trained as weaponsmith.
+
* 1 iron anvil
* 5 grower / 5 brewer
+
* 28 plump helmet spawn
:Fortress maintenance, incidental tasks.  Mines until underground farm area is prepared.  Cross-trained as armorsmith.
+
* 15 pig tail spawn
* 5 grower / 5 cook
+
* 1 dimple cup spawn
:Fortress maintenance, wealth creation (prepared meals), incidental tasks.  Mines until underground farm area is prepared.  Cross-trained as armorsmith.
+
* 1 cave wheat seed
* 5 mechanic / 5 herbalist
+
* 1 sweet pod seed
:Fortress maintenance, wealth creation (mechanisms), plant gathering to allow above-ground farming, possibly some mining.
+
* 1 rock nut
* 5 carpenter / 5 glassmaker
+
* 1 plump helmet
:Beds, furniture, floodgates, glass pumps, frees up a few sandbags to be seed bags, mining.
+
* 4 units of assorted alcohol, 1 of each type available
* 5 mason / 5 furnace operator
+
* 11 turtles
:Mining, blocks for buildings and pumps, maybe some furniture.  Also makes coke and charcoal for glassmaking.
+
* 11 units of assorted 2p meats, 1 of each type available
 +
* 11 units of assorted 4p meats, 1 of each type available
 +
* 8 units of assorted 2p fish, 1 of each type available
 +
* 2 units of assorted 4p meats, 1 of each type available
 +
* 6 dogs
  
Note the lack of metalworking skillsI have decided that except possibly furnace operator, the metalworking skills are not important enough to buy at embark.  Instead I attempt to direct strange moods by cross-training unskilled workers by doing a single job in the skill I wantAccordingly I keep most of the seven starters from starting with moodable skills, and do not assign them jobs that would yield moods I consider worthless.  I'm looking at ''you'', tanning/leatherworking.
+
The drinks, plump helmet, meat, and fish are bought for the free barrelsMost seeds are bought for the free bagsTurtles are bought for the shells and bones.
  
I am now mixing the early wealth creation roles with the fortress maintenance roles.  This can be considered exploitative, as meals are worth too much, and mechanisms made out of iron ore are worth too much.
+
I chose a 5x5 map which I had previously verified to have hidden magma, lots of limestone and marble, tons of magnetite, some coal, and lots of trees.
  
I am not convinced that there is much need to buy medical skills during embarkDiagnostician appears to be the most important of the medical skills.
+
I wil play with using reveal this timeI enjoy it more that way.
  
I am growing colder on buying masonry at embark timeIt is redundant to carpentry, glassmaking, and the metalworking skills.
+
Esmullogem, "Fullpaint".  Could be worseStroike the oith!
  
* 4 copper picks
+
<!--
* no axes (use training axe exploit)
+
:Post mortem: abandoned in a fit of pique after striking the aquifer in the middle of my ore storage area and flooding the forging/smelting area below. The bolt thing didn't work out. I got nothingSo that's 90 more points I can spend. Probably I'll buy 4p meats for more barrelsI love me some barrels.
* 1 iron anvil (not really needed)
 
* 25 rock nuts
 
* 15 pig tail seeds
 
* 1 each of other seeds/spawn (for bags)
 
* 11 each of the 4 dwarven alcohols
 
* 16 plump helmets (for wine & seeds)
 
* 1 each of all 2P/4P meat/fish (for barrels)
 
* 1 of each available type of milk (for barrels)
 
* 20 bituminous coal (-> coke -> glass and metalworking)
 
* 2 pieces 5P leather (reserved for moods)
 
* 2 cave spider silk thread (reserved for moods)
 
* 1 10P small cut gem (reserved for moods)
 
* 4 kimberlite (for color-coded levers)
 
* 4 petrified wood (for color-coded levers)
 
* 4 olivine (for color-coded levers)
 
* 40 sand (for bags)
 
* 4 dogs (1 male, 3 female)
 
* as many logs as possible, around 20.
 
<br/>
 
The rules this time:
 
* No moat-the-map or wall-the-map.
 
* No stonefall traps in places that are 'outside' &mdash; i.e. don't have a ceiling.
 
* Non-stonefall traps only in constructed or excavated & smoothed areasTraps in excavated dirt areas must have a stone floor built on that tile.
 
* Metal mechanisms for all non-stonefall traps, all gears, all machinesStone mechanisms are only for trade.
 
* <s>All furniture to be made of wood, metal, or glass.</s>
 
* All structures to be built with blocks or bars.
 
* Furnaces must be made out of fire-safe material; magma furnaces must be made out of magma-safe material.  Non magma-safe pumps are allowed.
 
* GRASSTRAMPLE cut to 1 for civilized and domestic species, 0 for elves and cats.
 
* Flours and sugar modded out.
 
  
 +
:Lessons learned: it's too easy to dig into an aquifer square.  There really should be a warning beyond the initial "dig cancelled".  Outdoor farming seems even more imbalanced than indoor farming.  All crops, all year around.  Maybe that will change when recipes are implemented.  Vertical connectivity is king.  An up/down staircase takes no longer to dig than an empty square, and has much more potential.  You can't put a building on an up/down, but you can put a stockpile or zone on it.  Garbage dumps should preferably be built on the same x/y coords on every z level, or selectively disabled as necessary.  Make magma channels two-wide or more for faster filling. 
  
Depending on the map, the defender/mayor either becomes a soldier or a miner(He starts with a free crossbow and bolts because of the ambusher skill.) Either way, turn off hunting.  If he's a soldier, someone else trains the dogs and then assigns 2 to him and 2 to the herbalist.
+
:Still to do: I had planned to experiment with steel pumps to move magma around, but obviously never got there.  I want my magma moat, darnit!  I'm considering making all hallways out of up/downIt would be ugly thoughI should experiment in seeing how many melted copper picks it takes to forge a copper battle axe.  If it's more than 1, than I'd need to bring enough supplies to start with two wagons.  Or buy some logs for the initial charcoal.  3p each, a fairly good deal.
 +
-->
  
The carpenter/glassmaker makes 6 tables and chairs, and 4 or so beds.  2 tables and chairs are made into offices for the bookkeeper and manager, 4 more are made into a dining room.
+
----
  
Depending on the map, the initially-unskilled miners may dig out large areas of soil to level up. Digging soil is much faster than digging rock and gives the same experience.  This is best done in two or three stages: dig up-stairs, then remove them, then possibly dig down-stairs. This gives experience twice or three times per tile. Note that tiles with down-stairs cannot grow shrubs/trees.
+
== Enable Magma Buildings ==
 +
Helper utility for Rick's reveal.exe<br/>
 +
[http://www.yourfilehost.com/media.php?cat=other&file=3935enable_magma_buildings.zip enable_magma_buildings.zip]
  
I like to get immigrants as soon as possible, and as many as possible. I do this by digging out large swaths of dirt and by making mechanisms out of expensive ore to increase the fortress's created wealth(The 30x multiplier on mechanisms may be seen as a bug exploit; you may wish to make 25x statues instead.)
+
You need this utility in the case that you used the reveal utility, and
 +
there is a magma pool or pipe on your map that does not reach the surface.
 +
(If the hide utility is ever updated, you could also hide a few magma
 +
tiles and then dig them out.  That worked in the old version.)
  
Immediately set reserved barrels to 20 or soYou want those barrels for booze.
+
Because there is no actual flag that controls whether magma has been seen
 +
(the game searches a list, probably a list of notable events), I had to
 +
patch the game's codeThis means you need to run the patch every time
 +
you start dwarfort.exe.
  
Start cooking all that food<s>Forbid the booze barrels that are totally full; cook the rest of the booze.</s><sub>Boozecooking is currently bugged{{version|0.31.03}}.</sub>  Cook the seeds to recover their bags.
+
This utility has been made version-independent.   
 +
It is expected to work with future releases of Dwarf Fortress.
  
Later, you must remember to turn off booze cooking and reclaim the full booze barrels.
+
----
  
Still later, when you buy fish and seeds from the traders, you must remember to turn off cooking on each type.
+
== Map Data Voodoo ==
  
Customize food piles to not accept booze, seeds, or dye plants.  Booze barrels can stay in the still -- they hardly clutter it at all (unlike, say, prepared meals in the kitchen). It's too early for dyeing, so we don't want to waste the space.  And a seedpile is best made near your farm.
+
To find the map_data, map_x_count, map_y_count, and map_z_count in an unknown version of dwarfort.exe,
  
Also set food piles to 0 barrels, except the seedpile should allow 1.  This means you need more space devoted to food piles, but you can see at a glance how much food you have. (Note: supposedly you will lose more food to vermin this way.) (Now I think this should be done only for the prepared-food pile.)
+
<pre>// find certain map data variables.
 +
// this is the simplest type of search -- no meta tokens at all.
 +
d = search(6, 0xC6, 0x44, 0x24, 0x38, 0x3E, 0xBF);
 +
if (!d) { handlefailure; }
  
Dig cisterns to hold pond water in case it evaporates. (Not necessary if the map is cold or has running water.) The cisterns must be in a rock layer to prevent evaporation.
+
// however this math complicates it.
 +
map_data_loc = peekd(d + 0x18);
 +
map_x_count_loc = peekd(d + 0x1E);
 +
map_y_count_loc = peekd(d + 0x24);
 +
map_z_count_loc = peekd(d + 0x2A);
  
The outdoor refuse pile should be customized to not accept rotten plants because the herbalists will be dropping dye plants as soon as they pick them, and we don't want to waste time hauling them when they wither.
+
if (map_x_count_loc + 4 != map_y_count_loc || map_y_count_loc + 4 != map_z_count_loc) { handlefailure; }
  
I make heavy use of the "quantum stockpiles" that the dump designation and garbage zone allows.  It allows much more control over item placement and disposition than stockpiles do.
+
printf("map: %08X %08X %08X %08X", map_data_loc, map_x_count_loc, map_y_count_loc, map_z_count_loc); </pre>
  
Think big, there's lots of room.  But remember to centralize as well. 
+
== Race Voodoo ==
 +
To find the variable holding the index of the dwarven race,
  
Vertical connectivity is king.  An up/down staircase takes no longer to dig than an empty square, and has much more potential.  You can't put a building on an up/down, but you can put a stockpile or zone on it<sub>If you can tolerate the flashing.</sub>
+
<pre>
 +
// find dwarven race variableshows use of some of the simpler meta tokens.
  
Make magma channels two-wide or more for faster filling, or use a pump to get it done even faster.
+
d = search(5+4,
 +
// movsx reg1, word ptr dorf_race_id
 +
0x0F, 0xBF, ANYBYTE, HERE, ADDRESS,
 +
// cmp [reg2+8Ch], reg1
 +
0x39, ANYBYTE, DWORD_, 0x0000008C
 +
);
  
== <b>Siege Checklist</b> ==
+
if (!d) { handlefailure; }
  
* Turn off the [[Skill|Mechanic]] skill on all dwarves.
+
dwarven_race_index_loc = peekd(d);
::This stops reloading of cage traps and stone traps.
 
::This is '''not necessary''' if all traps are forbidden, as discussed below.
 
* Turn off [[Standing_orders|animal gathering]] {{K|o}}{{K|a}}.
 
::This prevents gathering of occupied cages.
 
::This is '''not necessary''' if all traps are forbidden, as discussed below.
 
* Turn off [[Standing_orders|wood gathering]] {{K|o}}{{K|w}}.
 
* Turn off [[Standing_orders#Refuse_orders|collect outside refuse]] {{K|o}}{{K|r}}{{K|o}}.
 
* Turn on all [[Standing_orders|Forbid]] orders {{K|o}}{{K|F}}{{K|pcoit}}.
 
* Consider turning on [[Standing_orders|only soldiers can go outdoors]] {{K|o}}{{K|i}}.
 
* Lock someone in the lever room.  (You do have a lever room, right?)
 
::Draft them, station them, relieve them of duty.
 
::Probably should use two dwarves in case one goes to sleep.
 
* [[Forbid_items/buildings|Forbid]] all traps {{K|d}}{{K|b}}{{K|f}} <u>before</u> enemies trigger them.
 
:This prevents clean trap and reset trap jobs and gathering of occupied cages.
 
  
=== Post-Siege Checklist ===
+
printf("dwarven_race_index at %08X", dwarven_race_index_loc);</pre>
  
* Ensure that enemies have left the map. {{K|u}}nit list, between tame animals and deceased units.
+
Note: the variable is 16-bit: int16_t or uint16_t.
* Bring some or all squads off-duty.
+
 
* Turn on [[Skill|Mechanic]] on [[Mechanic]] units and possibly some [[Legendary|legendary]] units.
+
== Main Creature Vector Voodoo ==
* Turn on animal gathering.
+
 
* Turn on wood gathering.
+
To find the main creature vector,
* Re-set Forbid orders.
+
 
* Allow all dwarves to go outdoors.
+
<pre>
* Unlock the lever room.
+
// find main (complete) creature vector.
* Reclaim all dead bodies through stocks menu.
+
// this one feels a bit fragile.
* Reclaim all trap components through stocks menu.
+
// note use of EOL instead of a true count.
* Wait for bodies to be hauled to refuse piles and graveyards.
+
d = search(1000,
* Mass-mark enemy equipment for melting {{K|d}}{{K|b}}{{K|m}}.
+
0x8B, RANGE_LO,0x80, RANGE_HI,0xBF, DWORD_, 0x000004C8,
::Alternatively mark all equipment for dumping {{K|d}}{{K|b}}{{K|d}}, then re-mark for melting {{K|d}}{{K|b}}{{K|m}}, which removes the dump tag. This results in dumping all non-metal items; the metal ones can then be hauled to weapon/armor piles near the smelters.
+
0x8D, RANGE_LO,0x00, RANGE_HI,0x3F, RANGE_LO,0x80, RANGE_HI,0xBF,
* Unmark trap components for dumping and/or melting through stocks menu.
+
0x8B, RANGE_LO,0x00, RANGE_HI,0x3F, HERE, ADDRESS,
* Reclaim the enemy equipment {{K|d}}{{K|b}}{{K|c}}.
+
0x85, ANYBYTE,
* (Unknown)
+
EOL
* Profit!
+
);
 +
 
 +
if (!d) { handlefailure; }
 +
main_creature_vector_loc = peekd(d) - 4;
 +
 
 +
// another way, also a bit fragile
 +
d = search(1000,
 +
0x8B, RANGE_LO,0x80, RANGE_HI,0xBF, DWORD_, 0x228,
 +
0x3B, RANGE_LO,0xC0, RANGE_HI,0xFF,
 +
JZ,
 +
0xB8, HERE, ADDRESS,
 +
CALL,
 +
0x8B, RANGE_LO,0xC0, RANGE_HI,0xFF,
 +
0x85, RANGE_LO,0xC0, RANGE_HI,0xFF,
 +
EOL
 +
);
 +
if (!d) { handlefailure; }
 +
main_creature_vector_ptr_loc = peekd(d);
 +
 
 +
// a third way, now used in teleport22
 +
d = search(1000,
 +
// mov reg1, [reg2+0C4h]
 +
0x8B, RANGE_LO,0x80, RANGE_HI,0xBF, DWORD_, 0xC4,
 +
// mov ebx, [reg1]
 +
0x8B, RANGE_LO,0x00, RANGE_HI,0x3F,
 +
// mov edi, offset main_creature_vector
 +
0xBF, HERE, ADDRESS,
 +
// call sub_41CCF0
 +
CALL,
 +
EOL
 +
);
 +
if (!d) { handlefailure; }
 +
main_creature_vector_ptr_loc = peekd(d);
 +
</pre>
 +
So if one doesn't work, try the other.
 +
 
 +
== Another Creature Vector Voodoo ==
 +
<pre>// find "another" creature vector
 +
d = search(1000,
 +
0xF7, RANGE_LO,0x80, RANGE_HI,0xBF,
 +
DWORD_, 0xE4, DWORD_, 0x02000000,
 +
JNZ,
 +
RANGE_LO, 0xB8, RANGE_HI, 0xBF, HERE, ADDRESS,
 +
CALL,
 +
EOL
 +
);
 +
 
 +
if (!d) { handlefailure; }
 +
 
 +
another_creature_vector_loc = peekd(d);</pre>
 +
 
 +
== Yet Another Creature Vector Voodoo ==
 +
 
 +
<pre>// find "yet another" creature vector
 +
 
 +
d = search(1000, 0xE8, ANYDWORD,
 +
0x83, 0xC4, 0x10,
 +
0x89, RANGE_LO,0x00, RANGE_HI,0x3F, HERE, ADDRESS,
 +
0x8D, RANGE_LO,0x40, RANGE_HI,0x7F, 0x24, ANYBYTE,
 +
EOL
 +
);
 +
 
 +
if (!d) { handlefailure; }
 +
 
 +
yet_another_creature_vector_loc = peekd(d) - 8;</pre>
 +
 
 +
== What The! &mdash; Another Creature Vector ==
 +
 
 +
To find this vector, first find dwarven_race_index_loc, then
 +
 
 +
<pre>// find "what the! another creature vector"
 +
d = search(1000, 0xB8, HERE, ADDRESS,
 +
CALL,
 +
0x8B, RANGE_LO,0x00, RANGE_HI,0x3F, DWORD_, dwarven_race_index_loc,
 +
0x8B, RANGE_LO,0xC0, RANGE_HI,0xFF,
 +
0x6A, 0x09,
 +
EOL
 +
);
 +
if (!d) { handlefailure; }
 +
whathe_another_creature_vector_loc = peekd(d);</pre>
 +
 
 +
== Initial 7 Dwarves Voodoo ==
 +
 
 +
To find the the number of dwarves you start with, first find dwarven_race_index_loc, then  
 +
 
 +
<pre>// this search does not work in .32a because the 7 was relocated far
 +
// away from this region due to excessive optimization.
 +
d = search(1000,
 +
0x4F, 0, 0, 0,
 +
CALL,
 +
SKIP_UP_TO, 8,
 +
HERE, DWORD_, 7,
 +
SKIP_UP_TO, 8,
 +
CALL,
 +
0x0F, 0xB7, ANYBYTE, DWORD_, dwarven_race_index_loc,
 +
EOL
 +
);
 +
 
 +
if (!d) { handlefailure; }
 +
 
 +
number_of_dwarves_loc = d;
 +
 
 +
printf("initial number of dwarves = %d", peekd(number_of_dwarves_loc));</pre>
 +
 
 +
== Initial Points Voodoo ==
 +
 
 +
To find the number of points you are allocated when starting,
 +
 
 +
<pre>d = search(10, 0x66, 0xC7, 0x83, ANYBYTE, ANYBYTE, 0, 0, HERE, 0xC8, 0);
 +
 
 +
if (!d) { handlefailure; }
 +
 
 +
initial_starting_points_loc = d;
 +
 
 +
printf("intial starting points = %d", peekw(initial_starting_points_loc));
 +
</pre>
 +
 
 +
Note that it is a int16_t variable.
 +
 
 +
== Current Unit Focus Voodoo ==
 +
 
 +
To find the location of the current_unit_focus variable, try both of these patterns.
 +
 
 +
<pre>// find current unit focus variable
 +
 
 +
// method 1, may be fragile
 +
d = search(5+5, 0x66, 0x83, ANYBYTE, ADDRESS, 0x16,
 +
0x89, ANYBYTE, HERE, ADDRESS, JNZ);
 +
 
 +
if (!d) { handlefailure; }
 +
 
 +
current_unit_focus_loc = peekd(d);
 +
current_unit_focus = peekd(current_unit_focus_loc);
 +
 
 +
// method 2, may also be fragile
 +
d = search(4+1+4+4, 0x3B, ANYBYTE, HERE, ADDRESS, JNZ,
 +
0x8B, ANYBYTE, 0x24, 0x18, 0x8B, ANYBYTE, DWORD_, 0x814);
 +
 
 +
if (!d) { handlefailure; }
 +
 
 +
current_unit_focus_loc = peekd(d);
 +
current_unit_focus = peekd(current_unit_focus_loc);
 +
</pre>
 +
I expect that at least one of them will work.

Please note that all contributions to Dwarf Fortress Wiki are considered to be released under the GFDL & MIT (see Dwarf Fortress Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:

Cancel Editing help (opens in new window)