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:Macros and keymaps"

From Dwarf Fortress Wiki
Jump to navigation Jump to search
m (Rule G)
 
(57 intermediate revisions by 35 users not shown)
Line 1: Line 1:
Playing Dwarf Fortress means lots of typing.  Although the game (as of version v0.27.176.38c) has no internal macro/keymap system, using an external program can save you a great deal of time when dumping, rewalling, designating, and so forth.
+
{{Quality|Superior|11:05, 18 May 2015 (UTC)}}
 +
{{av}}
 +
Playing Dwarf Fortress means lots of typing.  Although the game has no internal macro/keymap system (except in alpha version 40d12), using an external program can save you a great deal of time when dumping, rewalling, designating, and so forth.
  
 
#  Go to [[Utilities#AutoHotKey]] and download AutoHotKey.  Installation is simple and the program uses few system resources.
 
#  Go to [[Utilities#AutoHotKey]] and download AutoHotKey.  Installation is simple and the program uses few system resources.
 
#  Write macro scripts (file type .ahk), which may contain any number of commands.  You activate scripts by double-clicking .ahk files and deactivate them by right-clicking the AutoHotKey icon on the task bar.  Both of these can be done at any time - even right in the middle of a game.  AutoHotKey also allows for automated activation of scripts.
 
#  Write macro scripts (file type .ahk), which may contain any number of commands.  You activate scripts by double-clicking .ahk files and deactivate them by right-clicking the AutoHotKey icon on the task bar.  Both of these can be done at any time - even right in the middle of a game.  AutoHotKey also allows for automated activation of scripts.
  
 +
 +
==Troubleshooting Scripts==
 +
Users may experience some issues in getting scripts to work, particularly when using looping scripts when experiencing low frame-rates.
 +
* If experiencing low frame-rates, try adding delays ("Sleep 100" to pause for 100 milliseconds for example) within loops to allow the interface to keep up. If there are nested loops, sometimes adding a pause at the end of an inner loop is all that is needed to flush the keyboard buffer
 +
* Another way to add delay during and after each simulated key press is to put <B>SetKeyDelay, 40, 40</B> at the start of the macro.
 +
* Make sure that Dwarf Fortress maintains focus. IM windows are the enemy! Who needs friends anyhow? You've got Dwarf Fortress.
 +
* This may go without saying, but most macros assume standard key-mappings. If you're using non-standard ones, you may have to edit the macro to get it to work.
 +
* Visiting liaisons can bring up screens that eat keystrokes, throwing a long-looping script out-of-phase with where it expects the game to be.  Wait for the farewell screen before running a long script.
 +
* The <B>SendPlay</B> function supports keys that the <B>Send</B> function does not, for example {{key|Shift-Enter}}.  According to the AutoHotKey documentation, <B>SendPlay</B> may also be better at preventing dropped keystrokes.
 +
 +
== [http://sun2design.com/quickfort/ Quickfort] ==
 +
 +
Quickfort is an AutoHotkey-based utility for Dwarf Fortress that helps you build fortresses from "blueprint" .CSV files (comma separated values). These files are easily created and edited in an app like Excel. Most building-oriented DF commands are supported through the use of multiple .CSV files to describe the different phases of DF construction (designation, building, stockpiles, and making adjustments). Many of the examples below can be reproduced in Quickfort.
 +
 +
 +
== Built-in Macros ==
 +
 +
With the release of df_28_181_40d13, Dwarf Fortress supports macros without any outside program. They can be created by hitting escape to access the options menu and choosing the Key Bindings section. Once in the Key Bindings menu hit Shift+Tab to open the macro screen. The macros you create here are saved in the file "\data\init\interface.txt". Adding the following to the end of that file will create a macro that selects every item on the trade screen when you hit the tilde key (`).
 +
 +
<pre>
 +
[BIND:MACRO0]
 +
[SYM:`]
 +
[MACRO:SELECT:1]
 +
[MACRO:STANDARDSCROLL_DOWN:1]
 +
[MACRO:SELECT:1]
 +
[MACRO:STANDARDSCROLL_DOWN:1]
 +
[MACRO:SELECT:1]
 +
[MACRO:STANDARDSCROLL_DOWN:1]
 +
[MACRO:SELECT:1]
 +
[MACRO:STANDARDSCROLL_DOWN:1]
 +
[MACRO:SELECT:1]
 +
[MACRO:STANDARDSCROLL_DOWN:1]
 +
[MACRO:SELECT:1]
 +
[MACRO:STANDARDSCROLL_DOWN:1]
 +
[MACRO:SELECT:1]
 +
[MACRO:STANDARDSCROLL_DOWN:1]
 +
[MACRO:SELECT:1]
 +
[MACRO:STANDARDSCROLL_DOWN:1]
 +
[MACRO:SELECT:1]
 +
[MACRO:STANDARDSCROLL_DOWN:1]
 +
[MACRO:SELECT:1]
 +
[MACRO:STANDARDSCROLL_DOWN:1]
 +
[MACRO:SELECT:1]
 +
[MACRO:STANDARDSCROLL_DOWN:1]
 +
[MACRO:SELECT:1]
 +
[MACRO:STANDARDSCROLL_DOWN:1]
 +
[MACRO:SELECT:1]
 +
[MACRO:STANDARDSCROLL_DOWN:1]
 +
</pre>
 +
 +
Performance can be increased by changing the macro pause, MACRO_MS, from the default 150ms per command to zero.  Most dig macros can be created using combinations of the following:
 +
<pre>
 +
[MACRO:CURSOR_UP:1]
 +
[MACRO:CURSOR_DOWN:1]
 +
[MACRO:CURSOR_LEFT:1]
 +
[MACRO:CURSOR_RIGHT:1]
 +
[MACRO:SELECT:1]
 +
[MACRO:DESIGNATE_DIG:1]
 +
[MACRO:DESIGNATE_UNDO:1]
 +
[MACRO:CURSOR_UP_FAST:1]
 +
[MACRO:CURSOR_DOWN_FAST:1]
 +
[MACRO:CURSOR_LEFT_FAST:1]
 +
[MACRO:CURSOR_RIGHT_FAST:1]
 +
[MACRO:MACRO123:1]
 +
</pre>
 +
Most of these should be self-explanatory. Each command is followed with a quantity.  To call other macros, use <pre>[MACRO:MACRO###:1]</pre> Each new macro begins with a bind command, consisting of BIND, the macro number, and a description:
 +
<pre>[BIND:MACRO11:dig_round_room]</pre>  Spaces are not allowed in the description{{verify}}.  To bind this macro to a key, SYM is used.<pre>[SYM:Ctrl+Right]</pre> Ctrl, Alt, and Shift combinations are allowed, but not chords with more than one{{verify}}, like Ctrl+Shift+Right.  Also, the windows, or meta key, does not appear to be supported{{verify}}. Macros appear to only be terminated by the start of a new macro (BIND command) or the end of the interface.txt file.
 +
 +
Visit this [http://www.bay12games.com/forum/index.php?topic=40751.0 forum post] for additional macros, and discussion on macro creation.
  
 
== AutoHotKey Examples ==
 
== AutoHotKey Examples ==
  
 
===Dumping===
 
===Dumping===
 +
 +
====[[GuiDumper.ahk]]====
 +
This script allows the user to specify a range of squares to dump.
 +
 
====Stock Screen Dump====
 
====Stock Screen Dump====
 
Taken from an old version of [[User:Jackard|Jackard's user page]].
 
Taken from an old version of [[User:Jackard|Jackard's user page]].
  
To use, first have your bookeeper do enough desk work so you can view individual items in the stocks listing.  Then bring it up and press del to quickly mark stuff.  To adjust the key repeat rate, edit the KEY_HOLD_MS value in \data\init\init.txt.
+
To use, first have your bookkeeper do enough desk work so you can view individual items in the stocks listing.  Then bring it up and press del to quickly mark stuff.  To adjust the key repeat rate, edit the KEY_HOLD_MS value in \data\init\init.txt.
  
 
<pre>
 
<pre>
Line 32: Line 107:
 
This script uses a system similar the commands in the designations menu to mark most of the contents of a large area for dumping. [[User:Dukederek|My talk page]] has more detailed instruction.
 
This script uses a system similar the commands in the designations menu to mark most of the contents of a large area for dumping. [[User:Dukederek|My talk page]] has more detailed instruction.
  
Essentially you need to create two text files with the following titles and content. When playing DF it is safe to have blockdumpinit running constantly as long as you dont plan on using the ctrl-d combination for something else.
+
Essentially you need to create two text files with the following titles and content. When playing DF it is safe to have blockdumpinit running constantly as long as you don't plan on using the ctrl-d combination for something else.
  
 
'''blockdumpinit.ahk'''
 
'''blockdumpinit.ahk'''
Line 209: Line 284:
 
</pre>
 
</pre>
  
===Food-buying macro===
+
===Embark Settings macros===
This macro buys all the 2 cost meat items available at the start screen. Simply go to the item screen, erase the random food items the game starts you with, and press F2. By [[User:Napsterbater|Napsterbater]].
+
These macros are used to ease the setup of skills and supplies before you embark.
  
<pre>
 
F2::
 
  send {n}{Right}{Down}{Enter}
 
  send {n}{Right}{Down}{Enter}
 
  send {n}{Right}{Down}{Enter}
 
  send {n}{Right}{Down}{Enter}
 
  send {n}{Right}{Down}{Enter}
 
  send {n}{Right}{Down}{Down}{Down}{Enter}
 
  send {n}{Right}{Down}{Down}{Down}{Enter}
 
  send {n}{Right}{Down}{Down}{Down}{Down}{Enter}
 
  send {n}{Right}{Pgdn}{Enter}
 
  send {n}{Right}{Pgdn}{Enter}
 
  send {n}{Right}{Pgdn}{Down}{Down}{Down}{Enter}
 
  send {n}{Right}{Pgdn}{Down}{Down}{Down}{Enter}
 
  send {n}{Right}{Pgdn}{Down}{Down}{Down}{Enter}
 
  send {n}{Right}{Pgdn}{Down}{Down}{Down}{Down}{Enter}
 
  send {n}{Right}{Pgdn}{Down}{Down}{Down}{Down}{Enter}
 
  send {n}{Right}{Up}{Up}{Up}{Up}{Up}{Enter}
 
  send {n}{Right}{Up}{Up}{Up}{Up}{Up}{Enter}
 
  send {n}{Right}{Up}{Up}{Up}{Up}{Up}{Enter}
 
return
 
</pre>
 
  
Useless, becuse the types of meat you can take with you varies with each world/civ. It will work with the civ you wrote it for, but not for the overwhelming majority of others--[[User:Dorten|Dorten]] 05:08, 2 April 2008 (EDT)
+
====Improved Food/Alcohol buying macro====
 
+
This macro buys all the cost-2 food (that I have seen), as well as the four types of alcohol.  Just press ctrl+f on the Items screen.
Just realized this. Whoops - Napsterbater
+
It can deal with meat or drink that you already have, or is not currently featured.   By [[User:Redfenix|Redfenix]].
 
 
I'll go ahead and delete this soon.
 
 
 
===Improved Food/Alcohol buying macro===
 
This macro buys all the cost-2 food (that I have seen), as well as the four types of alcohol.
 
It can deal with meat or drink that you already have, or is not currently featured. Also note that this should be used on the Items screen.  By [[User:Redfenix|Redfenix]].
 
  
 
<pre>
 
<pre>
WinWait, Dwarf Fortress,
+
^f::
IfWinNotActive, Dwarf Fortress, , WinActivate, Dwarf Fortress,
 
WinWaitActive, Dwarf Fortress,
 
  
 
send ndwarven{SPACE}ale{RIGHT}{ENTER}{F9}
 
send ndwarven{SPACE}ale{RIGHT}{ENTER}{F9}
Line 272: Line 317:
 
send nbilou{SPACE}meat{RIGHT}{ENTER}{F9}
 
send nbilou{SPACE}meat{RIGHT}{ENTER}{F9}
 
send npileated{SPACE}gibbon{SPACE}meat{RIGHT}{ENTER}{F9}
 
send npileated{SPACE}gibbon{SPACE}meat{RIGHT}{ENTER}{F9}
send nwhite-browed{SPACE}gibbon{SPACE}meat{RIGHT}{ENTER}{F9}
 
send nwhite-handed{SPACE}gibbon{SPACE}meat{RIGHT}{ENTER}{F9}
 
 
send nmandrill{SPACE}meat{RIGHT}{ENTER}{F9}
 
send nmandrill{SPACE}meat{RIGHT}{ENTER}{F9}
 
send nturtle{RIGHT}{ENTER}{F9}
 
send nturtle{RIGHT}{ENTER}{F9}
 +
</pre>
 +
 +
===='First Fortress' setup====
 +
This macro works with the default setup of DF, and starts you with (almost) the setup suggested in the "Your first fortress" tutorial.  The amounts are adjustable with the variables at the top of the macro.
 +
<pre>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +
; materialplanner.ahk   ;
 +
; this is a ahk script to set up the embark settings roughly as ;
 +
;suggested in the "your first fortress" tutorial.  Inventory ;
 +
;can be customized slightly. ;
 +
; use ctrl+shift+e to run   ;
 +
;   ;
 +
; NOTEs:   ;
 +
; change variables to suit your desires ;
 +
; the fourth guy is a Stonecrafter instead of Herbalist ;
 +
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +
 +
;;;;;;;;;;;;;
 +
;;VARIABLES;;
 +
;;;;;;;;;;;;;
 +
 +
PICKS = 2 ;number of picks to pack
 +
AXES = 1 ;number of axes to pack
 +
ANVILS = 0 ;number of anvils to pack
 +
MEATS = 7 ;how much meat to take, each buys one of each cheap type (total number depends on locale)
 +
DRINKS = 26 ;how many drinks to take, each one buys 4 drinks, one of each type
 +
SEEDS = 5 ;each increment buys 5 plump helmet spawn, 2 pig tail, and 2 rock nuts
 +
 +
 +
 +
SetKeyDelay, 12 ;Key delay, to keep Dwarf Fortress from being overwhelmed.
 +
;Set higher if you get weird results, or lower to get the
 +
;script to run faster
 +
SLEEPTIME = 12 ;same thing, only used in the repeated key press loops though
 +
 +
;;;;;;;;;;;;
 +
;;The code;;
 +
;;;;;;;;;;;;
 +
 +
^+e::
 +
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +
 +
 +
;remove all of the items
 +
Send {Tab}
 +
 +
 +
loop 105{
 +
Send {NumpadSub}
 +
Sleep %SLEEPTIME%
 +
}
 +
 +
Send {Tab}
 +
 +
;place the skills
 +
;first guy
 +
;Proficient Miner
 +
Send {right}
 +
loop 5{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
;novice appraiser
 +
Send {PgUp}
 +
loop 7{
 +
Send {Up}
 +
Sleep %SLEEPTIME%
 +
}
 +
Send {NumpadAdd}
 +
;novice Judge of Intent
 +
Send {Up}
 +
Send {NumpadAdd}
 +
;competent gem setter
 +
Send {PgUp}
 +
Send {PgUp}
 +
loop 7{
 +
Send {Up}
 +
Sleep %SLEEPTIME%
 +
}
 +
loop 3{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
;second guy
 +
Send {Left}
 +
Send {Down}
 +
Send {Right}
 +
Send {PgUp}
 +
;Proficient Miner
 +
loop 5{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
;Proficient Mason
 +
loop 3{
 +
Send {Down}
 +
Sleep %SLEEPTIME%
 +
}
 +
loop 5{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
;third guy
 +
Send {Left}
 +
Send {Down}
 +
Send {Right}
 +
;Proficient Carpenter
 +
Send {UP}
 +
loop 5{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
;Proficient Wood Cutter
 +
Send {UP}
 +
loop 5{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
;fourth guy
 +
Send {Left}
 +
Send {Down}
 +
Send {Right}
 +
;Proficient Grower
 +
Send {PgDn}
 +
Send {Down}
 +
Send {Down}
 +
loop 5{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
;Proficient Stone Crafter
 +
loop 9{
 +
Send {Up}
 +
Sleep %SLEEPTIME%
 +
}
 +
loop 5{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
;fifth guy
 +
Send {Left}
 +
Send {Down}
 +
Send {Right}
 +
;Proficient Mechanic
 +
loop 5{
 +
Send {Down}
 +
Sleep %SLEEPTIME%
 +
}
 +
loop 5{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
;Proficient Building Designer
 +
Send {PgUp}
 +
loop 5{
 +
Send {Down}
 +
Sleep %SLEEPTIME%
 +
}
 +
loop 5{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
;sixth guy
 +
Send {Left}
 +
Send {Down}
 +
Send {Right}
 +
;Proficient Weaponsmith
 +
loop 1{
 +
Send {Down}
 +
Sleep %SLEEPTIME%
 +
}
 +
loop 5{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
;Proficient Armorsmith
 +
loop 2{
 +
Send {Down}
 +
Sleep %SLEEPTIME%
 +
}
 +
loop 5{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
;seventh guy
 +
Send {Left}
 +
Send {Down}
 +
Send {Right}
 +
;Proficient Cook
 +
Send {PgDn}
 +
loop 2{
 +
Send {Up}
 +
Sleep %SLEEPTIME%
 +
}
 +
loop 5{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
;Proficient Brewer
 +
loop 1{
 +
Send {Up}
 +
Sleep %SLEEPTIME%
 +
}
 +
loop 5{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
 +
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +
 +
;do the inventory
 +
Send {Tab}
 +
 +
 +
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +
;Meat
 +
 +
if MEATS > 0
 +
{
 +
tmp := MEATS - 1
 +
send ndonkey{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send nchimpanzee{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send ngazelle{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send nbonobo{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send nmule{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send ndeer{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send nraccoon{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send nfox{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send nrhesus{SPACE}macaque{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send nhorse{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send ngroundhog{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send nmountain{SPACE}goat{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send nhoary{SPACE}marmot{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send ngorilla{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send norangutan{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send nsiamang{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send nbilou{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send npileated{SPACE}gibbon{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send nmandrill{SPACE}meat{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
send nturtle{RIGHT}{ENTER}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {F9}
 +
 +
 +
}
 +
 +
 +
;copper picks
 +
if PICKS > 0
 +
{
 +
Send {n}copper picks{Right}{Enter}
 +
tmp := PICKS - 1
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
}
 +
;Axes
 +
if AXES > 0
 +
{
 +
Send {n}steel axes{Right}{Enter}
 +
tmp := AXES - 1
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
}
 +
;Seeds
 +
if SEEDS > 0
 +
{
 +
send {n}Rock nuts{Right}{Enter}
 +
Send {NumpadAdd}
 +
send {n}plump helmet spawn{Right}{Enter}
 +
Send {NumpadAdd}
 +
Send {NumpadAdd}
 +
Send {NumpadAdd}
 +
Send {NumpadAdd}
 +
send {n}Pig tail Seeds{Right}{Enter}
 +
Send {NumpadAdd}
 +
 +
tmp := SEEDS - 1
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
Send {NumpadAdd}
 +
}
 +
Send {up}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
Send {NumpadAdd}
 +
Send {NumpadAdd}
 +
Send {NumpadAdd}
 +
Send {NumpadAdd}
 +
}
 +
Send {up}
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
Send {NumpadAdd}
 +
}
 +
}
 +
 +
;Anvils
 +
if ANVILS > 0
 +
{
 +
Send {n}iron anvils{Right}{Enter}
 +
tmp := ANVILS - 1
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
Sleep %SLEEPTIME%
 +
}
 +
}
 +
;Drinks
 +
if DRINKS > 0{
 +
send {n}Dwarven ale{Right}{Enter}
 +
send {n}Dwarven beer{Right}{Enter}
 +
send {n}Dwarven wine{Right}{Enter}
 +
send {n}Dwarven rum{Right}{Enter}
 +
 +
tmp := DRINKS - 1
 +
loop 4{
 +
loop %tmp%{
 +
Send {NumpadAdd}
 +
}
 +
Send {up}
 +
}
 +
 +
 +
return
 +
</pre>
 +
 +
===A more modular approach===
 +
Hit WIN+G to go once you are on the empty item screen
 +
 +
<pre>
 +
#g::
 +
;add an anvil
 +
Additem("iron anvils",1)
 +
;add 31 of the boozes (kind of iffy might end up with dwarven cheese or something if the civilization does not have 4 boozes)
 +
Additem("dw",31)
 +
Additem("dw",31)
 +
Additem("dw",31)
 +
Additem("dw",31)
 +
;adds copper nuggets
 +
Additem("copper n",5)
 +
;adds cassiterite
 +
Additem("cass",5)
 +
;bitumous coal
 +
Additem("coal",5)
 +
;tower cap logs
 +
Additem("logs",11)
 +
return
 +
 +
IsCurrentItemThere()
 +
{
 +
;color of text in the new item screen 0xFFFF00(selected) or 0x808000 (unselected)
 +
;location of text in the new item screen 305, 150
 +
PixelSearch, , , 305, 150, 315, 160, 0x808000, 3,
 +
return !ErrorLevel
 +
}
 +
 +
 +
AddItem(name,amount)
 +
{
 +
Sleep 100
 +
amount -= 1
 +
SetKeyDelay 150
 +
SendInput n
 +
SendInput %name%
 +
;MsgBox Name Check
 +
Sleep 200
 +
if IsCurrentItemThere()
 +
{
 +
Sleep 200
 +
SendInput {Right}
 +
SendInput {Enter}
 +
Sleep 200
 +
Loop
 +
{
 +
if amount <= 0
 +
{
 +
break
 +
}
 +
SendInput {NumpadAdd}
 +
Sleep 10
 +
amount --
 +
}
 +
;MsgBox Done
 +
}
 +
else
 +
{
 +
SendInput {F9}
 +
}
 +
}
 
</pre>
 
</pre>
  
 
===Bed Assigning macro===
 
===Bed Assigning macro===
This will assign bedrooms to your dwarfs. Press F3 followed by a single digit indicating how many beds to assign. Can repeat the action, as the number of beds assigned is stored in a counter. Room size is default, but easily edited into the script. By [[User:Napsterbater|Napsterbater]].
+
This will assign bedrooms to your dwarves. Press F3 followed by a single digit indicating how many beds to assign. Can repeat the action, as the number of beds assigned is stored in a counter. Room size is default, but easily edited into the script. By [[User:Napsterbater|Napsterbater]].
  
 
<pre>
 
<pre>
Line 306: Line 819:
  
 
====Valdemar's Designator Macro====
 
====Valdemar's Designator Macro====
This macro can read a spreadsheet and designate rooms according to it. [http://www.bay12games.com/cgi-local/ultimatebb.cgi?ubb=get_topic&f=2&t=001507 Forum Thread/Download]
+
This macro can read a spreadsheet and designate rooms according to it. [http://www.bay12games.com/forum/index.php?topic=1428.0 Version 1]
 +
 
 +
Version 2 of this macro apparently only works in versions up to and including 38c {{verify}}, and can be found here: [http://www.bay12games.com/forum/index.php?topic=1890.0 Version 2]
  
 
====Fedor's chambered circle====
 
====Fedor's chambered circle====
Line 408: Line 923:
 
return
 
return
 
</pre>
 
</pre>
===The MOUSE control===
+
 
For unrivaled mouse control in DF try [http://www.dwarffortresswiki.net/index.php/User:Digger this DF Mouse script]
+
====LordGrunt's room macro====
 +
Based on 1 of the fractal [[Bedroom_design|bedroom designs.]]
 +
 
 +
[http://mkv25.net/dfma/movie-1226-fractalbedrooms Demo Movie]
 +
 
 +
<pre>
 +
;
 +
; Fractal Apts
 +
; Start script while in 'dig' mode with cursor on desired position of left up staircase
 +
;
 +
; ALT+G to generate,
 +
; CTRL+ALT+G to erase in case of failure
 +
;
 +
   
 +
!g::
 +
base_cross()
 +
sleep 100
 +
mid_sqr()
 +
sleep 100
 +
corridors()
 +
sleep 100
 +
all_rooms()
 +
return
 +
 
 +
base_cross()
 +
{
 +
Send i{ENTER}3{ENTER}
 +
Send d1{ENTER}6{SHIFT}+2{SHIFT}+2{SHIFT}+2{SHIFT}+28{ENTER}
 +
Send d{SHIFT}+8{SHIFT}+8{SHIFT}+8{SHIFT}+888{ENTER}4{SHIFT}+8{SHIFT}+8{SHIFT}+8{SHIFT}+82{ENTER}
 +
Send d{SHIFT}+2{SHIFT}+2{SHIFT}+2{SHIFT}+24{ENTER}2{SHIFT}+4{SHIFT}+4{SHIFT}+4{SHIFT}+46{ENTER}
 +
Send d{SHIFT}+6{SHIFT}+6{SHIFT}+6{SHIFT}+666{ENTER}8{SHIFT}+6{SHIFT}+6{SHIFT}+6{SHIFT}+64{ENTER}
 +
Send d{SHIFT}+4{SHIFT}+4{SHIFT}+4{SHIFT}+4474{SHIFT}+8{SHIFT}+888888{ENTER}66666{SHIFT}+2{SHIFT}+2{SHIFT}+2{SHIFT}+2{SHIFT}+2222{ENTER}8
 +
Send d{SHIFT}+8{SHIFT}+88884488888{SHIFT}+6{SHIFT}+6666666{ENTER}22222{SHIFT}+4{SHIFT}+4{SHIFT}+4{SHIFT}+4{SHIFT}+4444{ENTER}6
 +
}
 +
mid_sqr()
 +
{
 +
Send d{SHIFT}+3666
 +
send d{ENTER}{SHIFT}+9{SHIFT}+999999{ENTER}1{ENTER}9999{ENTER}9{ENTER}111{ENTER}
 +
send d{SHIFT}+1{SHIFT}+1{SHIFT}+1{ENTER}999{ENTER}99{ENTER}1111{ENTER}99
 +
send d{SHIFT}+8{SHIFT}+8{SHIFT}+8444{ENTER}333{ENTER}33{ENTER}7777{ENTER}
 +
send d{SHIFT}+3{SHIFT}+3{SHIFT}+37{ENTER}333{ENTER}7{ENTER}7777{ENTER}
 +
}
 +
corridors()
 +
{
 +
send d{SHIFT}+7{SHIFT}+7{SHIFT}+7999{ENTER}{SHIFT}+6{SHIFT}+6{SHIFT}+66{ENTER}
 +
send d333333{ENTER}{SHIFT}+2{SHIFT}+2{SHIFT}+22{ENTER}
 +
send d111111{ENTER}{SHIFT}+4{SHIFT}+4{SHIFT}+44{ENTER}
 +
send d777777{ENTER}{SHIFT}+8{SHIFT}+8{SHIFT}+88{ENTER}
 +
sleep 100
 +
send d3333222{ENTER}{SHIFT}+466{ENTER}
 +
send d{SHIFT}+2{SHIFT}+2888{ENTER}{SHIFT}+644{ENTER}
 +
send d{SHIFT}+9{SHIFT}+9{SHIFT}+6{SHIFT}+6333
 +
send d{ENTER}{SHIFT}+466{ENTER}
 +
send d{SHIFT}+2{SHIFT}+2888{ENTER}{SHIFT}+644{ENTER}
 +
sleep 100
 +
send d{SHIFT}+4{SHIFT}+1966
 +
send d{ENTER}{SHIFT}+288{ENTER}
 +
send d{SHIFT}+4{SHIFT}+4666{ENTER}{SHIFT}+822{ENTER}
 +
sleep 100
 +
send d{SHIFT}+9{SHIFT}+9{SHIFT}+8{SHIFT}+8777
 +
send d{ENTER}{SHIFT}+288{ENTER}
 +
send d{SHIFT}+4{SHIFT}+4666{ENTER}{SHIFT}+822{ENTER}
 +
sleep 100
 +
send d999988{ENTER}{SHIFT}+64{ENTER}
 +
send d{SHIFT}+3{SHIFT}+3{SHIFT}+3777{ENTER}{SHIFT}+28{ENTER}
 +
send d{SHIFT}+1{SHIFT}+1{SHIFT}+1999{ENTER}{SHIFT}+46{ENTER}
 +
send d{SHIFT}+7{SHIFT}+7{SHIFT}+7333{ENTER}{SHIFT}+82{ENTER}
 +
}
 +
 
 +
rooms_up()
 +
{
 +
send d78{ENTER}96{ENTER}
 +
send d223{ENTER}32{ENTER}
 +
send d44444{ENTER}87{ENTER}
 +
send d63{ENTER}{ENTER}98{ENTER}{ENTER}23{ENTER}{ENTER}7
 +
}
 +
rooms_down()
 +
{
 +
send d32{ENTER}14{ENTER}
 +
send d887{ENTER}78{ENTER}
 +
send d66666{ENTER}32{ENTER}
 +
send d74{ENTER}{ENTER}21{ENTER}{ENTER}78{ENTER}{ENTER}3
 +
}
 +
rooms_left()
 +
{
 +
send d14{ENTER}87{ENTER}
 +
send d996{ENTER}63{ENTER}
 +
send d2222{ENTER}41{ENTER}
 +
send d98{ENTER}{ENTER}47{ENTER}{ENTER}96{ENTER}{ENTER}1
 +
}
 +
rooms_right()
 +
{
 +
send d96{ENTER}32{ENTER}
 +
send d114{ENTER}47{ENTER}
 +
send d8888{ENTER}96{ENTER}
 +
send d21{ENTER}{ENTER}63{ENTER}{ENTER}14{ENTER}{ENTER}9
 +
}
 +
;======= WIDE
 +
rooms_upw()
 +
{
 +
send d78{ENTER}966{ENTER}
 +
send d223{ENTER}32{ENTER}
 +
send d444444{ENTER}87{ENTER}
 +
send d63{ENTER}{ENTER}98{ENTER}6{ENTER}23{ENTER}{ENTER}74
 +
}
 +
rooms_downw()
 +
{
 +
send d32{ENTER}144{ENTER}
 +
send d887{ENTER}78{ENTER}
 +
send d666666{ENTER}32{ENTER}
 +
send d74{ENTER}{ENTER}21{ENTER}4{ENTER}78{ENTER}{ENTER}36
 +
}
 +
rooms_leftw()
 +
{
 +
send d14{ENTER}887{ENTER}
 +
send d996{ENTER}63{ENTER}
 +
send d22222{ENTER}41{ENTER}
 +
send d98{ENTER}{ENTER}47{ENTER}8{ENTER}96{ENTER}{ENTER}12
 +
}
 +
rooms_rightw()
 +
{
 +
send d96{ENTER}322{ENTER}
 +
send d114{ENTER}47{ENTER}
 +
send d88888{ENTER}96{ENTER}
 +
send d21{ENTER}{ENTER}63{ENTER}2{ENTER}14{ENTER}{ENTER}98
 +
}
 +
;============
 +
rooms3up()
 +
{
 +
send d8888888
 +
rooms_up()
 +
send d1111222
 +
rooms_left()
 +
send d66666666
 +
rooms_right()
 +
send d4444
 +
}
 +
rooms3down()
 +
{
 +
send d2222222
 +
rooms_down()
 +
send d7777888
 +
rooms_left()
 +
send d66666666
 +
rooms_right()
 +
send d4444
 +
}
 +
rooms3left()
 +
{
 +
send d4444444
 +
rooms_left()
 +
send d9999666
 +
rooms_up()
 +
send d22222222
 +
rooms_down()
 +
send d8888
 +
}
 +
rooms3right()
 +
{
 +
send d6666666
 +
rooms_right()
 +
send d7777444
 +
rooms_up()
 +
send d22222222
 +
rooms_down()
 +
send d8888
 +
}
 +
 
 +
;==========
 +
all_rooms()
 +
{
 +
;left wide:
 +
rooms_up()
 +
send d222222222
 +
rooms_down()
 +
send d7777444
 +
rooms_leftw()
 +
;bottom wide:
 +
send d{SHIFT}+3{SHIFT}+3{SHIFT}+3{SHIFT}+378
 +
rooms_downw()
 +
send d9999888
 +
rooms_right()
 +
send d444444444
 +
rooms_left()
 +
;right wide:
 +
send d{SHIFT}+9{SHIFT}+9{SHIFT}+999{SHIFT}+66
 +
rooms_rightw()
 +
send d7777444
 +
rooms_up()
 +
send d222222222
 +
rooms_down()
 +
;top wide
 +
send d{SHIFT}+7{SHIFT}+7{SHIFT}+777{SHIFT}+88
 +
rooms_upw()
 +
send d1111222
 +
rooms_left()
 +
send d666666666
 +
rooms_right()
 +
;remainin 9-room chambers
 +
send d{SHIFT}+26666
 +
rooms3right()
 +
send d{SHIFT}+4{SHIFT}+4666
 +
rooms3left()
 +
send d{SHIFT}+1111
 +
rooms3up()
 +
send d{SHIFT}+2{SHIFT}+2888
 +
rooms3down()
 +
send d{SHIFT}+3333
 +
rooms3left()
 +
send d{SHIFT}+6{SHIFT}+6444
 +
rooms3right()
 +
send d{SHIFT}+9999
 +
rooms3down()
 +
send d{SHIFT}+8{SHIFT}+8222
 +
rooms3up()
 +
;send d{SHIFT}+7777
 +
;rooms3right()
 +
;send d{SHIFT}+2{SHIFT}+4666
 +
;rooms3left()
 +
send d1111144499{ENTER}{SHIFT}+1{SHIFT}+4{SHIFT}+41{ENTER}
 +
send d77444444444{ENTER}8888888{SHIFT}+6{SHIFT}+6{SHIFT}+6{SHIFT}+6{SHIFT}+6666{ENTER}
 +
send d{SHIFT}+7{SHIFT}+487{ENTER}{SHIFT}+1{SHIFT}+2{SHIFT}+21{ENTER}
 +
send d33222222222{ENTER}6666666{SHIFT}+8{SHIFT}+8{SHIFT}+8{SHIFT}+8{SHIFT}+8888{ENTER}
 +
send d{SHIFT}+2{SHIFT}+2221111
 +
send i{ENTER}3{ENTER}7
 +
deco()
 +
}
 +
 
 +
deco()
 +
{
 +
send x77774{ENTER}{ENTER}9{ENTER}{ENTER}6669{ENTER}6{ENTER}3666{ENTER}{ENTER}3{ENTER}{ENTER}
 +
send x2223{ENTER}2{ENTER}1222{ENTER}{ENTER}1{ENTER}{ENTER}1444{ENTER}4{ENTER}4447
 +
send x{ENTER}{ENTER}7{ENTER}{ENTER}7888{ENTER}8{ENTER}666666
 +
}
 +
 
 +
; CTRL+ALT+G to erase all
 +
!^g::
 +
send x{SHIFT}+1{SHIFT}+1{SHIFT}+1{SHIFT}+1{SHIFT}+1{ENTER}{SHIFT}+9{SHIFT}+9{SHIFT}+9{SHIFT}+9{SHIFT}+9{SHIFT}+9{SHIFT}+9{SHIFT}+9{SHIFT}+9{SHIFT}+9{ENTER}{SHIFT}+1{SHIFT}+1{SHIFT}+1{SHIFT}+1{SHIFT}+1
 +
return
 +
</pre>
 +
 
 +
====Pyrofyr's room macro====
 +
Based on Palin88's Apartment design based on Raynard's Fractal Design.
 +
 
 +
[[File:Pyrofor_room_macro.png]]
 +
 
 +
<pre>
 +
/*
 +
* Macro by Pyrofyr for Room Design -- Cleaned up by 0x517A5D
 +
* Enter (d)esignate mode, position the cursor where you want the
 +
* middle of the design to be, then press Ctrl+Alt+D to start the Macro.
 +
*/
 +
 
 +
;Attn Pyrofor: for slash-star style comments, the ending star-slash must
 +
;be the first thing on its line.  Otherwise the comment isn't terminated.
 +
 
 +
#SingleInstance Force
 +
#IfWinActive, Dwarf Fortress
 +
SetKeyDelay 0,, Play
 +
 
 +
; Ctrl+Alt+D
 +
^!d::
 +
send d{NumPadUp 18}{NumPadLeft 18}
 +
;Attn Pyrofor: note how repeated keystrokes are done in AHK.
 +
;no need for tehLoop().
 +
directions()
 +
send {NumPadRight 18}
 +
directions()
 +
send {NumPadLeft 18}
 +
send {NumPadDown 18}
 +
directions()
 +
send {NumPadRight 18}
 +
directions()
 +
middle()
 +
stairs()
 +
return
 +
 
 +
directions()
 +
{
 +
    ;hallway box
 +
    send {Enter}{NumPadRight 18}{Enter}
 +
    send {Enter}{NumPadDown 18}{Enter}
 +
    send {Enter}{NumPadLeft 18}{Enter}
 +
    send {Enter}{NumPadUp 18}{Enter}
 +
    ;indentations on box
 +
    send {Enter}{NumPadRight 1}{NumPadDown 2}{Enter}
 +
    send {NumPadDown 6}{Enter}{NumPadDown 2}{NumPadRight 1}{Enter}
 +
    send {NumPadLeft 1}{NumPadDown 6}{Enter}{NumPadDown 1}{Enter}
 +
    send {NumPadRight 6}{Enter}{NumPadRight 4}{Enter}
 +
    send {NumPadRight 6}{Enter}{NumPadUp 1}{Enter}
 +
    send {NumPadUp 6}{Enter}{NumPadUp 2}{NumPadLeft 1}{Enter}
 +
    send {NumPadRight 1}{NumPadUp 6}{Enter}{NumPadUp 1}{Enter}
 +
    send {NumPadLeft 6}{Enter}{NumPadLeft 4}{Enter}
 +
    ; middle hallways
 +
    send {NumPadRight 2}{Enter}{NumPadDown 6}{Enter}
 +
    send {NumPadRight 1}{Enter}{NumPadDown 4}{NumPadLeft 2}{Enter}
 +
    send {NumPadRight 1}{Enter}{NumPadDown 6}{Enter}
 +
    send {NumPadUp 8}{NumPadLeft 6}{Enter}{NumPadRight 14}{Enter}
 +
    ; cross apartments, horizontal segments
 +
    send {NumPadDown 4}{Enter}{NumPadLeft 2}{Enter}
 +
    send {NumPadDown 1}{NumPadLeft 3}{Enter}{NumPadLeft 6}{Enter}
 +
    send {NumPadUp 1}{NumPadLeft 3}{Enter}{NumPadLeft 2}{Enter}
 +
    send {NumPadDown 3}{NumPadRight 2}{Enter}{NumPadRight 2}{Enter}
 +
    send {NumPadRight 8}{Enter}{NumPadRight 2}{Enter}
 +
    send {NumPadUp 5}{NumPadLeft 1}{Enter}{NumPadLeft 2}{Enter}
 +
    send {NumPadLeft 6}{Enter}{NumPadLeft 2}{Enter}
 +
    send {NumPadUp 4}{Enter}{NumPadRight 2}{Enter}
 +
    send {NumPadRight 6}{Enter}{NumPadRight 2}{Enter}
 +
    send {NumPadRight 3}{NumPadUp 2}{Enter}{NumPadLeft 2}{Enter}
 +
    send {NumPadUp 1}{NumPadLeft 3}{Enter}{NumPadLeft 6}{Enter}
 +
    send {NumPadDown 1}{NumPadLeft 3}{Enter}{NumPadLeft 2}{Enter}
 +
    send {NumPadUp 3}{NumPadRight 2}{Enter}{NumPadRight 2}{Enter}
 +
    send {NumPadRight 8}{Enter}{NumPadRight 2}{Enter}
 +
    ; cross apartments, vertical segments
 +
    send {NumPadRight 1}{NumPadDown 2}{Enter}{NumPadDown 2}{Enter}
 +
    send {NumPadDown 6}{Enter}{NumPadDown 2}{Enter}
 +
    send {NumPadDown 3}{NumPadLeft 2}{Enter}{NumPadUp 2}{Enter}
 +
    send {NumPadLeft 1}{NumPadUp 3}{Enter}{NumPadUp 6}{Enter}
 +
    send {NumPadRight 1}{NumPadUp 3}{Enter}{NumPadUp 2}{Enter}
 +
    send {NumPadLeft 3}{NumPadDown 2}{Enter}{NumPadDown 2}{Enter}
 +
    send {NumPadDown 8}{Enter}{NumPadDown 2}{Enter}
 +
    send {NumPadLeft 4}{Enter}{NumPadUp 2}{Enter}
 +
    send {NumPadUp 8}{Enter}{NumPadUp 2}{Enter}
 +
    send {NumPadUp 2}{NumPadLeft 3}{Enter}{NumPadDown 2}{Enter}
 +
    send {NumPadRight 1}{NumPadDown 3}{Enter}{NumPadDown 6}{Enter}
 +
    send {NumPadLeft 1}{NumPadDown 3}{Enter}{NumPadDown 2}{Enter}
 +
    send {NumPadLeft 2}{NumPadUp 3}{Enter}{NumPadUp 2}{Enter}
 +
    send {NumPadUp 6}{Enter}{NumPadUp 2}{Enter}
 +
    send {NumPadUp 4}{NumPadLeft 2}
 +
}
 +
 
 +
middle()
 +
{
 +
    send {NumPadUp 10}{NumPadLeft 2}{Enter}{NumPadRight 4}{NumPadDown 20}{Enter}
 +
    send {NumPadUp 5}{NumPadRight 1}{Enter}{NumPadUp 10}{NumPadLeft 6}{Enter}
 +
    send {NumPadLeft 1}{NumPadDown 1}{Enter}{NumPadDown 8}{NumPadRight 8}{Enter}
 +
    send {NumPadUp 2}{NumPadRight 1}{Enter}{NumPadUp 4}{NumPadLeft 10}{Enter}
 +
    send {NumPadDown 1}{NumPadLeft 6}{Enter}{NumPadDown 2}{NumPadRight 22}{Enter}
 +
    send {NumPadUp 1}{NumPadLeft 11}
 +
}
 +
 
 +
stairs()
 +
{
 +
    send i{NumPadUp 18}{NumPadLeft 9}{Enter 2}
 +
    send {NumPadRight 18}{Enter 2}
 +
    send {NumPadRight 9}{NumPadDown 9}{Enter 2}
 +
    send {NumPadLeft 18}{Enter 2}
 +
    send {NumPadLeft 18}{Enter 2}
 +
    send {NumPadRight 9}{NumPadDown 9}{Enter 2}
 +
    send {NumPadRight 18}{Enter 2}
 +
    send {NumPadRight 9}{NumPadDown 9}{Enter 2}
 +
    send {NumPadLeft 18}{Enter 2}
 +
    send {NumPadLeft 18}{Enter 2}
 +
    send {NumPadDown 9}{NumPadRight 9}{Enter 2}
 +
    send {NumPadRight 18}{Enter 2}
 +
    send {NumPadLeft 9}{NumPadUp 18}
 +
}
 +
</pre>
 +
 
 +
===Easy Exploration Mining in 2 steps===
 +
This macro will make a 5 row, 11 column UP/DOWN stairway grid (2 empty spaces between each row/column).<br>
 +
Starting point as indicated (row 3, column 11)<br>
 +
'''MUST BE IN DESIGNATION MODE WITH CURSOR AT THE ''<-- START HERE'' LOCATION'''<br>
 +
Link is <ctrl> <windowskey> `<br>
 +
Dive is <ctrl> <alt> `<br>
 +
<pre>
 +
Link
 +
X--X--X--X--X--X--X--X--X--X--X
 +
|              |              |
 +
|              |              |
 +
X--X--X--X--X--X--X--X--X--X--X
 +
|              |              |
 +
|              |              |
 +
X--X--X--X--X--X--X--X--X--X--X <-- start here
 +
|              |              |
 +
|              |              |
 +
X--X--X--X--X--X--X--X--X--X--X
 +
|              |              |
 +
|              |              |
 +
X--X--X--X--X--X--X--X--X--X--X
 +
</pre>
 +
Filename is ExploreMine-Link.ahk
 +
<pre>
 +
;Link
 +
^#`::
 +
 
 +
send d
 +
send {Enter}
 +
tehLoop(30,"{NumPadLeft}")
 +
send {Enter}
 +
send {Enter}
 +
tehLoop(6,"{NumPadUp}")
 +
send {Enter}
 +
send {Enter}
 +
tehLoop(30,"{NumPadRight}")
 +
send {Enter}
 +
send {Enter}
 +
tehLoop(12,"{NumPadDown}")
 +
send {Enter}
 +
send {Enter}
 +
tehLoop(30,"{NumPadLeft}")
 +
send {Enter}
 +
send {Enter}
 +
tehLoop(9,"{NumPadUp}")
 +
send {Enter}
 +
send {Enter}
 +
tehLoop(30,"{NumPadRight}")
 +
send {Enter}
 +
tehLoop(6,"{NumPadDown}")
 +
send {Enter}
 +
tehLoop(30,"{NumPadLeft}")
 +
send {Enter}
 +
tehLoop(3,"{NumPadDown}")
 +
tehLoop(15,"{NumPadRight}")
 +
send {Enter}
 +
tehLoop(12,"{NumPadUp}")
 +
send {Enter}
 +
tehLoop(15,"{NumPadLeft}")
 +
 
 +
send i
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadDown}")
 +
tehLoop(3,"{NumPadRight}")
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadUp}")
 +
tehLoop(3,"{NumPadRight}")
 +
 
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadDown}")
 +
tehLoop(3,"{NumPadRight}")
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadUp}")
 +
tehLoop(3,"{NumPadRight}")
 +
 
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadDown}")
 +
tehLoop(3,"{NumPadRight}")
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadUp}")
 +
tehLoop(3,"{NumPadRight}")
 +
 
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadDown}")
 +
tehLoop(3,"{NumPadRight}")
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadUp}")
 +
tehLoop(3,"{NumPadRight}")
 +
 
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadDown}")
 +
tehLoop(3,"{NumPadRight}")
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadUp}")
 +
tehLoop(3,"{NumPadRight}")
 +
 
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadDown}")
 +
tehLoop(6,"{NumPadUp}")
 +
 
 +
 
 +
tehLoop(tehTimes,tehDir)
 +
{
 +
loop
 +
{
 +
if tehTimes <= 0
 +
{
 +
break
 +
}
 +
send %tehDir%
 +
tehTimes--
 +
}
 +
}
 +
 
 +
tehOtherLoop(tehOtherDir)
 +
{
 +
loop 4
 +
{
 +
tehLoop(3,tehOtherDir)
 +
send {Enter}{Enter}
 +
}
 +
}
 +
</pre>
 +
 
 +
<pre>
 +
Dive
 +
X  X  X  X  X  X  X  X  X  X  X
 +
 
 +
 
 +
X  X  X  X  X  X  X  X  X  X  X
 +
 
 +
 
 +
X  X  X  X  X  X  X  X  X  X  X <-- start here
 +
 
 +
 
 +
X  X  X  X  X  X  X  X  X  X  X
 +
 
 +
 
 +
X  X  X  X  X  X  X  X  X  X  X
 +
</pre>
 +
 
 +
Filename is ExploreMine-Dive.ahk
 +
<pre>
 +
;Dive
 +
^!`::
 +
tehLoop(30,"{NumPadLeft}")
 +
tehLoop(6,"{NumPadUp}")
 +
 
 +
send i
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadDown}")
 +
tehLoop(3,"{NumPadRight}")
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadUp}")
 +
tehLoop(3,"{NumPadRight}")
 +
 
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadDown}")
 +
tehLoop(3,"{NumPadRight}")
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadUp}")
 +
tehLoop(3,"{NumPadRight}")
 +
 
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadDown}")
 +
tehLoop(3,"{NumPadRight}")
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadUp}")
 +
tehLoop(3,"{NumPadRight}")
 +
 
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadDown}")
 +
tehLoop(3,"{NumPadRight}")
 +
send {Enter}{Enter}
 +
tehOtherLoop("{NumPadUp}")
 +
tehLoop(3,"{NumPadRight}")
 +
 
 +
send {Enter}{Enter}
 +