Macros Ultima IV
Mixing reagents for spells and other tasks can require quite a few key-presses in Ultima IV. Using an external program can save a lot of repetitive actions and the need to look up the required reagents.
- Go to AutoHotKey and download the installer. 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.
Single Mixture[edit]
The below script will mix the appropriate spell (if you have the required reagents) by hitting Ctrl-Alt-<First letter of spell>. For example, Ctrl-Alt-A for Awaken or Ctrl-Alt-T for Tremor. Ctrl-Space will hit space seven times which can ease handling the eight person party.
^!a:: Send m Sleep 200 Send abc{Enter}{Esc} return ^!b:: Send m Sleep 200 Send bed{Enter}{Esc} return ^!c:: Send m Sleep 200 Send cbc{Enter}{Esc} return ^!d:: Send m Sleep 200 Send dfac{Enter}{Esc} return ^!e:: Send m Sleep 200 Send efda{Enter}{Esc} return ^!f:: Send m Sleep 200 Send ffa{Enter}{Esc} return ^!g:: Send m Sleep 200 Send gfha{Enter}{Esc} return ^!h:: Send m Sleep 200 Send hbd{Enter}{Esc} return ^!i:: Send m Sleep 200 Send ifh{Enter}{Esc} return ^!j:: Send m Sleep 200 Send jfhg{Enter}{Esc} return ^!k:: Send m Sleep 200 Send kfg{Enter}{Esc} return ^!l:: Send m Sleep 200 Send la{Enter}{Esc} return ^!m:: Send m Sleep 200 Send mfa{Enter}{Esc} return ^!n:: Send m Sleep 200 Send ncha{Enter}{Esc} return ^!o:: Send m Sleep 200 Send oea{Enter}{Esc} return ^!p:: Send m Sleep 200 Send pcba{Enter}{Esc} return ^!q:: Send m Sleep 200 Send qeba{Enter}{Esc} return ^!r:: Send m Sleep 200 Send recbhda{Enter}{Esc} return ^!s:: Send m Sleep 200 Send sbd{Enter}{Esc} return ^!t:: Send m Sleep 200 Send teha{Enter}{Esc} return ^!u:: Send m Sleep 200 Send uca{Enter}{Esc} return ^!v:: Send m Sleep 200 Send vgh{Enter}{Esc} return ^!w:: Send m Sleep 200 Send wea{Enter}{Esc} return ^!x:: Send m Sleep 200 Send xeda{Enter}{Esc} return ^!y:: Send m Sleep 200 Send yed{Enter}{Esc} return ^!z:: Send m Sleep 200 Send zed{Enter}{Esc} return ^Space:: Send {Space}{Space}{Space}{Space}{Space}{Space}{Space} return
Quantity Selection[edit]
The below script will mix the appropriate spell (if you have the required reagents) by hitting Ctrl-Alt-<First letter of spell>. For example, Ctrl-Alt-A for Awaken or Ctrl-Alt-T for Tremor. It will ask how many you wish to mix and then repeat the mixing that many times.
Ctrl-Space will hit space seven times which can ease handling the eight person party.
^!a::Mix("abc", MyGuiFunction()) return ^!b::Mix("bed", MyGuiFunction()) return ^!c::Mix("cbc", MyGuiFunction()) return ^!d::Mix("dfac", MyGuiFunction()) return ^!e::Mix("efda", MyGuiFunction()) return ^!f::Mix("ffa", MyGuiFunction()) return ^!g::Mix("gfha", MyGuiFunction()) return ^!h::Mix("hbd", MyGuiFunction()) return ^!i::Mix("ifh", MyGuiFunction()) return ^!j::Mix("jfhg", MyGuiFunction()) return ^!k::Mix("kfg", MyGuiFunction()) return ^!l::Mix("la", MyGuiFunction()) return ^!m::Mix("mfa", MyGuiFunction()) return ^!n::Mix("ncha", MyGuiFunction()) return ^!o::Mix("oea", MyGuiFunction()) return ^!p::Mix("pcba", MyGuiFunction()) return ^!q::Mix("qeba", MyGuiFunction()) return ^!r::Mix("recbhda", MyGuiFunction()) return ^!s::Mix("sbd", MyGuiFunction()) return ^!t::Mix("teha", MyGuiFunction()) return ^!u::Mix("uca", MyGuiFunction()) return ^!v::Mix("vgh", MyGuiFunction()) return ^!w::Mix("wea", MyGuiFunction()) return ^!x::Mix("xeda", MyGuiFunction()) return ^!y::Mix("yed", MyGuiFunction()) return ^!z::Mix("zed", MyGuiFunction()) return ^Space:: Send {Space}{Space}{Space}{Space}{Space}{Space}{Space} return MyGuiFunction() { Global Quantity Gui, +LastFound GuiHWND := WinExist() ;--get handle to this gui.. Gui, Add, Text,, Quantity: Gui, Add, Edit, vQuantity ; Gui, Add , Button, Default, OK Gui, Show WinWaitClose, ahk_id %GuiHWND% ;--waiting for gui to close return ReturnCode ;--returning value ;------- ButtonOK: GuiControlGet, ReturnCode, , Quantity Gui, Destroy return ;------- GuiEscape: GuiClose: ReturnCode = -1 Gui, Destroy return } Mix(keys, Quantity) { Sleep 200 SendInput m Sleep 200 Loop, %Quantity% { SendInput %keys%{Enter} Sleep 200 } Send {Esc} return }