Documentation / Start
Commands
Everything Emunah does, one module at a time: the same text emhelp shows in the client, generated from the same table.
Using it
emhelp # every module, and whether each is on
emhelp curing # one module: its commands and every setting
emset # status
emset curing on # a command
emset curing.method minerals # a setting
There is one prefix, emset, and every setting can be set by name with emset <setting> <value>. In the client, emhelp <module> lists each setting with its current value, and clicking one changes it. The few words outside emset are listed under the module they belong to.
System
Emunah runs off GMCP: vitals, afflictions, defences, inventory and the room arrive from the game and everything else reacts to them once per prompt. Every command goes through one gate that knows when the game would refuse it (stunned, asleep, unconscious, dead, off balance, prone, paralysed, entangled) and holds it rather than wasting it. Death pauses everything until you are alive again. Settings are saved per profile.
status: curing, defences, safety floors, what is tracked
show or change any setting, e.g. emset curing.method minerals
this help: the modules, or one module's commands and settings
update from GitHub's main (unless system.update is off), then reload Emunah from disk, keeping its state
the same, and still works if the command module failed to load
debug log: every command sent, and every command held with the reason
trace every GMCP message in and out
dump the action queue, the timers or the event handlers
your skillsets and ranks, from GMCP
write every ability's AB text, from GMCP, to emunah-abilities.txt in the profile
what is waiting on each balance, Emunah's and yours
send <command> when that balance is free, ahead of everything automated
drop the commands you queued that have not gone yet
| Setting | Default | Meaning |
|---|---|---|
queue.typedHold | 0.5 s | After you type a command, Emunah's balance and equilibrium sends wait this long, plus your latency, so yours goes first. 0 turns it off. |
queue.chain | true | Send commands together: a herb only in the rift is pulled and eaten in one go, every restock trip goes at once, and once the game has named its CONFIG SEPARATOR the commands of one prompt leave as one line. Off, each command goes on its own. |
logLevel | info | debug, info, warn or error. emset debug toggles between info and debug. |
system.update | true | Pull main (fast-forward only) before every reload. Off, a reload loads what is on disk. |
schema | 12 | Config format version. Managed by the migrations; do not set this by hand. |
Curing
Tracks your afflictions from GMCP (and from EmunahTriggers.xml, with the reference system's anti-illusion) and cures them on the right balance: herbs, salves, elixirs, moss, smoking, FOCUS, the tree tattoo, COMPOSE, CONCENTRATE, CLOT and WRITHE. One cure per balance at a time, never inside a balance, never while something blocks it (anorexia, slickness, asthma, paralysis...). Follows the reference system's rules for what to cure first and when not to. While PvP holds in defence (after t <name>, before F1), spends one equilibrium on METABOLISE IMPATIENCE so a second player cannot reapply it inside about two seconds; never ahead of the attack. Sips health and mana, eats moss, keeps cures pulled from the rift into your inventory, and wakes you from a sleep you did not choose.
on or off, and every affliction being tracked
switch curing on or off
pause or resume curing and defences together; after QUIT, resume everything
the same as emset pause: one toggle for curing and defence keep-up
the herbs kept in hand, and how many of each
keep more, fewer or none of a herb in hand; IR shows every herb with a toggle
cure an affliction sooner or later on one balance; lower is sooner
use your own ranks and situational rules from conf/priorities.conf and conf/situations.conf, or go back to the shipped ones
RELAX INSOMNIA if it is up, then SLEEP, marked as yours: Emunah neither wakes you nor raises insomnia until you are up
| Setting | Default | Meaning |
|---|---|---|
curing.enabled | false | Off by default, deliberately. Curing is opt-in. |
curing.method | herbs | herbs or minerals. Changes which item every cure resolves to. |
curing.confirmWait | 2.0 s | How long a sent cure holds its vector waiting for the game to confirm it, before the vector is re-armed. |
curing.reconcileEvery | 20 ticks | How often the tracked list is reconciled against Char.Afflictions wholesale. |
curing.healthThreshold | 80 % | Sip health below this. |
curing.manaThreshold | 85 % | |
curing.iridThreshold | 68 % | Eat irid moss below this, on health or mana. |
curing.handsThreshold | 50 % | PERFORM HANDS below this. Costs equilibrium, which attacking also spends, so this is set low on purpose. |
curing.irid | true | |
curing.ownprios | false | Use conf/priorities.conf and conf/situations.conf. Set with emset ownprios. |
curing.diag | true | Send DIAG when the affliction list is in doubt. That is what answers loki, the one affliction GMCP does not report honestly. |
curing.tree | true | You have the Tree of Life tattoo, and curing touches it. The game never lists the tattoo as a defence, so this is what says it is there. Off: never touched. |
curing.metabolise | true | While PvP holds in defence (after t <name>, before F1), METABOLISE IMPATIENCE once equilibrium is free, so a second player's reapplication inside about two seconds is resisted. Costs 3 seconds of equilibrium, so it never goes ahead of the attack, only under a lock that holds it. Waits while PERFORM HANDS or DIAG wants it. Off leaves the focus where it is. |
curing.clotThreshold | 30 | Bleeding above this is clotted. |
curing.focusGuilt | false | |
curing.elixirConfirm | 7.0 s | |
curing.mossConfirm | 9.0 s | |
curing.riftConfirm | 1.5 s | |
curing.restock | true | Pull consumables out of the rift as they run low. |
curing.restockEvery | 1 ticks | Every prompt by default. It used to be every tenth, which made each pull ten prompts apart for no benefit: only one pull can be in flight anyway. |
curing.restockSalves | false | |
curing.stockTarget | 1 | How many of each consumable to keep in hand. Ash is kept at 2 at least: crescendo takes two in a row. |
curing.keep | (unset) | Per herb, how many to keep in hand; 0 for none. Set with emset keep or the toggles under IR. |
curing.recovery.<vector> | per vector s | Override the fallback recovery time for one vector, e.g. curing.recovery.herb. |
curing.antiIllusion | true | The reference system's anti-illusion: EmunahTriggers.xml reports wait for the prompt and a block containing an illusion is discarded whole; a refusal is believed only after a command it could answer; a herb balance back within 1.1s of eating is ignored. Ignored lines are marked (i). Off believes every line as it arrives. |
curing.textConfirm | 2.0 s | How long an affliction reported by text waits for the server to confirm it before it is dropped as an illusion. |
curing.idlePoll | 15 s | With no prompt for this long, send a blank line for one, so curing sees health and mana that defences drained while idle. The prompt it brings is hidden when it comes straight after another prompt. 0 turns it off. |
curing.focusMinMana | 35 % of max | FOCUS is held at or below this mana (the reference system's manause). |
priorities | {} | Per-affliction, per-vector rank overrides. Written by emset prio. |
Defences
Raises the defences you choose and keeps them up. Each one is off, defup (raise it once) or keepup (raise it whenever it drops). Knows the command for the herb, salve, elixir and skill defences; tattoos and anything else can be taught. Never raises a defence that is already up, and never spends the balance while curing needs it. Everything that can go on one prompt goes together, and the equilibrium defences go cheapest first unless you set an order.
the defence grid: click to cycle off / defup / keepup, and pipe relight on / off
switch defence keep-up on or off
keep a defence up, with the command that raises it if it is not known
stop keeping a defence up
raise it once, keep it up, or leave it alone
raise these first, in this order; the rest go cheapest first
| Setting | Default | Meaning |
|---|---|---|
mace.keep | true | Pick the mace up and wield it whenever it is not in hand, whether or not defence keep-up is on. CALL and SUMMON stay with keep-up, which never gives up on it. |
mace.warn | true | Name the mace on the prompt whenever it is not wielded: "(mace not wielded)" or "(mace on the ground)". WIELDED is shown at login either way. |
defences.enabled | false | |
defences.keepup | {} | name -> "defup" or "keepup". Written by the defence grid. |
defences.commands | {} | name -> the command that raises it, for defences we ship no command for. |
Pipes
Keeps your pipes filled and lit so smoking cures are always ready: refills an empty pipe with the herb it holds, relights one that has gone out, and reads PIPELIST now and then to stay honest. All of it is hidden, the pipe going out included; a PIPELIST you ask for is shown. Also toggled from the emset defs grid.
each pipe: lit or out, what it holds, puffs left
switch pipe upkeep on or off
send PIPELIST now, and show it
| Setting | Default | Meaning |
|---|---|---|
pipes.enabled | true | |
pipes.assign | (unset) | Which herb goes in which pipe. |
pipes.poll | 0 s | Re-check every pipe this often with PIPELIST. 0 (the default) asks only when the pipes are not known, e.g. after login or a reload. |
Riding
Keeps your mount with you: whenever it is in the room and you are not riding it, it is ordered to follow you (free). With keep-up on, you vault back onto it whenever you are off it, but only when the balance is idle: never while anything needs curing, never while bashing or PvP is running, never while it is not in the room. (Not knowing whether you are already riding is no bar: the game refuses a vault onto a horse you are on for free.) While it is not with you, the end of your prompt says so. Also toggled from the emset defs grid.
the mount: here or not, ridden or following, keep-up on or off
switch riding keep-up (vaulting back on) on or off
| Setting | Default | Meaning |
|---|---|---|
riding.keepup | false | Vault back onto the mount whenever you are off it and the balance is idle. |
riding.mount | pegasus510623 | The mount, as VAULT takes it. Its number is how the room list and ORDER name it. |
riding.follow | true | Order the mount to follow you whenever it is here and not ridden, and warn on the prompt while it is not with you. |
Rites
Keeps up the rites you perform. You put every rite up yourself, in a fight too: nothing is performed that you have not performed. Perform one, or type RITES where yours are up, and it is performed again each time it runs out, for as long as you stay in that room: leaving the room stops it. How long each has left comes from RITES, read (hidden) once equilibrium is back after each perform. Held while PvP is on. Three tries that do not bring a rite up and it stops, and says so.
the rites being kept up, and how long each has left
switch rite keep-up on or off (off forgets the ones kept now)
stop keeping up the rites kept now, leaving keep-up on
| Setting | Default | Meaning |
|---|---|---|
rites.keepup | true | Perform the rites you perform again as they run out, until you leave the room. |
Hunting
Bashing and walking. Bashing attacks the denizens in the room, one at a time by replica number, on the balance and equilibrium your attack uses. The walker explores an area room by room. hunt runs both: clear a room, move on. Support mode follows a leader instead: it attacks what they attack and nothing else. Stops itself when health drops below its floor, when a player arrives, or when damage comes in too fast.
walk and bash together; off stops both. F11 toggles it
stop both, go back three rooms the way you came, and stay there
support mode: attack what <name> attacks, never walking. F9 toggles it
bashing: target, kills, damage, whether it is running
the same as emset hunt / emset hunt off: bash, and walk the area
the attack, sent as <command> <replica>
the walker: area, rooms left, visited
explore the current area, or stop
| Setting | Default | Meaning |
|---|---|---|
walker.avoid | {} | |
walker.auto | true | |
walker.stepDelay | 0.6 s | 0.1 to 30. |
walker.returnToStart | true | Toggled in-session by emset walk return; not persisted. |
walker.stopBelowHealth | 40 % | |
walker.stopOnPlayer | false | |
walker.transitTimeout | 8.0 s | |
bashing.attack | angel sear | |
bashing.balance | both | What the attack REQUIRES: eq, bal or both. |
bashing.consumes | eq | What the attack SPENDS: eq or bal. Not the same question as balance. |
bashing.supportLeader | Who support mode follows; set by emset support <name>. | |
bashing.stopBelowHealth | 50 % | Zero disables the floor. |
bashing.maxAttempts | 40 | |
bashing.walkWhenClear | true | |
bashing.stopOnPlayer | false | |
bashing.soloOnly | true | |
bashing.resumeMargin | 10 points | How far above the health floor to recover before resuming. |
bashing.penitence | true | Priest only. |
bashing.desolation | true | Priest only. |
watch.critical | 30 % | The floor everything stops at. Zero disables it. |
watch.damageSpike | 25 % | |
watch.damageWindow | 10 ticks | |
watch.damageSpikeBelow | 60 % | |
watch.endurance | 15 % | |
watch.willpower | 15 % | |
watch.mana | 10 % | |
watch.resource | 10 % | |
denizens.autoRecord | true |
PvP
Attacks the player you name, and only that player: it never picks a target by itself. Nothing offensive is sent while it is off. Every free balance (prayer, balance, equilibrium) sends what the mode calls for (F1 attack, F2 defence, F3 hinder, F4 finish; offence has no key), choosing by the afflictions the game has confirmed on them. Holds balance and equilibrium while you are locked, and stops below its health floor.
target, their afflictions and mana, attacks sent
start or stop attacking the target. F12 stops it, and so does F1 in attack mode
choose the target, or clear it
enter a PvP mode and turn PvP on; it acts at once, without waiting for a prompt. F1 attack, F2 defence, F3 hinder, F4 finish. Offence has no key. Another key switches mode; F1 again stops attack, and F12 turns any of them off
target them and turn PvP on, holding in defence: F1 starts the attack. Already fighting, it switches target and keeps the mode
| Setting | Default | Meaning |
|---|---|---|
pvp.stopBelowHealth | 25 % | Replaces watch.critical in PvP. Zero disables it. |
pvp.queue | false | While balance or equilibrium is out, put the next exchange in the game's queue (QUEUE ADDCLEAR eqbal) and choose it again on every cure seen, so it goes the moment both are back. Needs the game's command separator. |
pvp.promptLocks | true | Show the target's lock afflictions on the prompt: asthma, slickness, anorexia, paralysis and impatience, a doubtful one with its chance, and any lock they are in. |
pvp.purityBelow | 20 % | Perform purity when the target's health is known to be at or under this. Only when the game has given their health; zero turns it off. |
pvp.mode | offence | attack, defence, hinder, finish or offence: what each balance sends. F1-F4 set the first four. |
Allies
A partner is never a target: adding one marks them an ally. While you fight, their arrivals and departures are said. A partner's message that matches one of allies.calls sets your PvP target to the name it calls. Lines only one class sends name who is attacking you, and as what.
your partners, who is here, the last call, and who is attacking you
add a partner (and mark them an ally), or remove one
| Setting | Default | Meaning |
|---|---|---|
allies.follow | true | Set your PvP target to the name a partner calls. |
allies.calls | Lua patterns a partner's message is read with as a call, each capturing the name called, matched anywhere in the message, e.g. Target:? (%a+). None by default. |
Loot & shop
Picks up gold from the room after a kill and stows it. Shop purchases above a set price ask before buying.
whether gold pickup is on, and how much has been picked up
switch gold pickup on or off
sweep the room now
buy by the number from WARES, e.g. buy 50 476321; gold comes from the pack
| Setting | Default | Meaning |
|---|---|---|
loot.gold | true | |
loot.aloneOnly | true | Only lift gold with nobody else in the room. |
loot.ownKillsOnly | false | |
loot.noDenizens | true | Do not stop to loot while anything on the kill list is still in the room. |
loot.holdTyped | 30 s | Gold you take out of the pack yourself (get ... gold) is left in hand this long before it goes back. 0 puts it straight back. |
pack.id | backpack452292 | The one pack, by replica number: gold is stowed in it, purchases are paid from it, and antitheft keeps it worn and closed. |
pack.capacity | 50 items | How many items the pack holds. A pack inside it counts as one. |
shop.confirmAbove | (unset) gp | Purchases above this price ask for confirmation. |
Antitheft
Keeps selfishness up (it is on the defences grid, emset defs), cures generosity early, puts named valuables in the pack, and raises an alert when an item leaves your inventory or pack with nothing you sent to explain it, or when selfishness is stripped. An enemy entering the room puts everything away at once.
status: selfishness, the pack and what is kept in it
switch it on (selfishness joins keep-up) or off (it leaves)
put loose gold and valuables in the pack now
| Setting | Default | Meaning |
|---|---|---|
antitheft.enabled | true | |
antitheft.alarm | true | Alert when an item leaves inventory or the pack unexplained. |
antitheft.sweep | (none) | Comma-separated words from item names to keep in the pack, e.g. "sigil, key". Never curatives: those must stay loose to be eaten. |
antitheft.goldGrace | 5 s | Loose gold older than this is reported and put away. 0 is off. |
People
A database of everyone you have seen: city, house, class, and whether they are an ally or an enemy, filled from WHO lists, HONOURS and the Achaea web API. Names are highlighted in the game text by what they are to you.
everything known about someone
mark someone as an ally or an enemy, or go back to what their city says
mark a whole organisation hostile (everyone in it is an enemy), or list them
| Setting | Default | Meaning |
|---|---|---|
namedb.capture | true | |
namedb.autoFetch | true | Look names up against the Achaea web API automatically. |
names.enabled | true | |
presences.alert | false | Pop up a warning window when ANGEL PRESENCES senses an enemy nearby. |
presences.alertFor | 15 s | How long the presence warning stays up without a click. 0 keeps it until clicked. |
names.cityTint | true | |
names.enemyLinks | true | An enemy's name in the game text is a link: click it for their record, as emset whois. |
Map
Walks you anywhere on the map one confirmed step at a time, through the same checks as every other command, so it waits out stun, sleep, paralysis or a lost balance instead of walking into them. Re-plans when you end up off the route or the game refuses an exit; double-clicking a room on the map walks there too. Swims, opens and unlocks doors, goes round a door that will not open, waits out rubble and ferries, and gallops straight runs while mounted. Locator lines (farsee, mindsense, the angel, alertness and the rest) get the room numbers they name as links, and who was where is remembered. The map is the crowd-sourced Achaea map, the same one the IRE Mudlet Mapper uses. Emunah checks for a new version when it loads and every hour, shows what changed, and loads it, waiting for a walk to end first. Rooms you lock or weight are kept outside the map and put back after every update. As you walk, rooms whose name, environment, indoors/outdoors or area disagree with GMCP are corrected. While the mmp package is running it keeps updating the map itself, and Emunah leaves it to it.
the map's version, the last check, and what your overlay holds
check for a new crowdmap now
load a downloaded map that did not load (open the map window first)
walk there: a room number, the nearest room with a feature, an area, or the nearest room with that name
the same as emset goto: goto bank, goto 1234, goto fish street
stop walking and remember the route (a goto, else the area walk); with nothing walking it goes to the game
carry on along the remembered route from wherever you are; with nothing paused it goes to the game
find rooms whose name contains the text, by area; click a number to walk there
stop PvP, stop any hunt, and walk to the safe room, map.safeRoom (2096). F12
walk back to where the last walk started
stop the walk, or pause it and pick it up again from wherever you are
everything the map holds about a room (here by default): exits, special exits as Emunah reads them, locks, weights, features, distance
the same as emset room
every area with its room count, or those whose name contains the text
an area's rooms by number; click one to walk there
where people were last located, newest first; goto <person> walks there
the map at 30%, 50% or 70% of the window's height
apply a change to map.locators now, and say which are on
the route between two rooms, without walking it
keep a room, or one of its exits, out of every route
keep a whole area out of every route
make routes avoid a room unless it saves more than n steps; 1 clears it
list the map's features, or mark a room (here by default) as one
| Setting | Default | Meaning |
|---|---|---|
map.autoupdate | true | Check for a new crowdmap on load and every map.checkEvery minutes. |
map.checkEvery | 60 min | At least 5. |
map.changelog | true | Show the crowdmap's changelog entries since the last update. |
map.stepGap | 0.5 s | The least time between two steps. Faster draws the game's "Now now, don't be so hasty!". |
map.retryAfter | 3 s | Send a step again when no arrival has followed it in this long; twice, then the walk stops. |
map.showSteps | true | Show where a walk is going and the steps left at the end of the prompt, then that it arrived. |
map.waterwalk | true | Off makes routes avoid water rooms where land is not much longer. |
map.wormholes | false | Let routes use wormholes. Off keeps them out, as mmp does by default. |
map.gallop | true | While mounted, gallop straight runs of two to eleven rooms (HELP GALLOP). A gallop that gets nowhere is not sent again; the walk carries on on foot. |
map.shackle | true | While the density defence is up, take the shackle off for a walk and wear it again when the walk ends, as mmp does. |
map.sewers | true | Let routes go through sewer grates. Off keeps them out (mmp's locksewers). |
map.safeRoom | 2096 | Where F12 walks you, stopping any hunt first. |
map.bigHit | 33 % | During a goto walk, losing more than this much health in one blow raises a warning and walks you out of the area. |
map.enemyMark | true | During a goto walk, a red * in brackets on the prompt while an enemy is in the room. |
map.drawRoute | true | Light a walk's route on the map, the destination brightest, clearing each room as it is passed. |
map.locators | farsee, view, mindsense, allsight, alertness, angel, shrines, shop, who | Which of mmp's locator lines get room numbers: farsee, view, mindsense, allsight, alertness, angel, shrines, shop, who. emset map locators applies a change. |
map.trackFor | 5 min | How long a located person's room stays lit on the map; 0 never lights it. |
map.gmcpSync | true | Correct a room's name, environment, indoors/outdoors and area from GMCP as you walk. |
Interface
The panels around the game text: vitals, afflictions, defences, chat tabs, the room and its people, your target, and the map. The room's area is shown at the end of the room-name line. Chat keeps every channel under All and in a tab of its own; a tab you are not looking at counts what it missed, tells in the warning colour, and clicking a line's time puts the reply on the command line.
whether the panels and the map are on
rebuild the panels; also fixes one that is missing or stuck
show or hide the map
size a panel you resized by dragging its divider to its content again (both when none is named); double-clicking the divider does the same
the chat tabs: what each has kept and has unread, what is muted and rerouted
show a tab, as clicking it does
clear a tab's window, or every tab's; what was captured is kept
keep a channel out of the chat window; it is still captured
send a channel to another tab, or back to the one it goes to by default
| Setting | Default | Meaning |
|---|---|---|
ui.enabled | true | Whether the panel interface is built at all. |
ui.map | true | |
ui.mapHeight | 42 % of window | Clamped to 10-70. |
ui.mapFloat | false | Detaches the map into its own window. emset ui rebuild after changing it. |
ui.roomArea | true | Show the room's area at the end of the room-name line, from GMCP. |
ui.chatTabs | Tells, City, House, Market, Says, Misc | The chat tabs after All, in order. Misc is added last if left out: it is where a channel with no tab of its own goes. emset ui rebuild after changing it. |
ui.chatRoutes | channel=Tab pairs sending a channel to a tab other than its default. emset chat route writes it. | |
ui.chatMute | Channels kept out of the chat window. Still captured, so unmuting and emset ui rebuild brings them back. emset chat mute writes it. | |
ui.refresh | 0.2 s | How often balance countdowns redraw while one is running. 0 turns the live countdowns off. |
keys.numpad | true |
Generated from src/emunah/help.lua by tools/build-commands-page.lua.