Documentation menu

Documentation / Start

Getting started

Emunah runs straight from a git checkout. Install it once, switch on the parts you want, and every update after that is one command in the client.

Requirements

Priest is the only class supported today

Emunah has so far been built and tested on a Priest alone, and that support is at an early stage: it is in daily use, but not yet dependable in every situation, and PvP in particular is still being refined. Curing and the map do not depend on your class, but defence keep-up, hunting and PvP are built around the Priest's skills. Support for further classes is in development and coming soon; see the roadmap.

Install

1. Clone the repository

Put it anywhere outside your Mudlet profile directory.

git clone https://github.com/pharanyx-labs/Emunah.git ~/src/Emunah
Do not put the checkout in your profile directory as Emunah

Mudlet's package manager deletes a package's own directory when it uninstalls or reinstalls it, and it follows symlinks. A checkout there, or a symlink to one, would be deleted. If you want the checkout inside the profile anyway, name it EmunahSrc: Emunah looks for that name too, and the package manager never touches it.

2. Install the packages

In Mudlet, open Package Manager, choose Install, and select Emunah.xml from the root of the checkout. It is a small loader that runs everything else from the checkout, not the system itself.

Then install EmunahTriggers.xml the same way. It is optional, and recommended: 743 of the reference system's lines, covering afflictions gained and cured, stun, prone, sleep and unconsciousness, a line that costs you a balance, the illusion catchers, and every class's attack lines, which tell Emunah who is attacking you and as what. Emunah checks each of them against the reference system's anti-illusion rules. Without the package, curing still runs from GMCP, which reports nearly every affliction.

3. Point the loader at the checkout

Run this once in Mudlet's input line. It is saved per profile.

lua EMUNAH_ROOT = "/home/you/src/Emunah"; EmunahBootstrap()

A successful load says:

[emunah] v0.1.0 loaded -- 76 modules.

First steps

Everything is one prefix, emset, and one help command, emhelp.

TypeTo see
emhelpEvery module, what it does, and whether it is on.
emhelp curingOne module: its commands, and every setting with its current value. Click a setting to change it.
emsetStatus: curing, defences, safety floors, and what is being tracked.
emset uiWhether the panels and the map are on, and which panels you have sized by hand.

The command reference lists every command and setting, generated from the same table emhelp reads.

Switching things on

Nothing acts until you turn it on. Curing and defence keep-up are off on a fresh install, and so is everything that moves or attacks.

emset curing on      # cure afflictions and heal
emset defs           # the defence grid: click each to cycle off, defup, keepup
emset defs on        # keep the chosen defences up
emset hunt           # walk the area and bash it (F11); emset hunt off to stop
goto bank            # walk to the nearest bank
t sarapis            # target someone and hold, ready; F1 attacks
pp                   # pause or resume curing and defences together

When you want to sleep, type sleep rather than the game's own command: Emunah relaxes insomnia first, and neither wakes you nor raises insomnia again until you are up.

Typing QUIT or QQ tells Emunah the client is closing: it stores your pack in the rift with INR ALL, then sends nothing more. Reconnecting, emreload or emset pause starts it again.

Settings

Settings are saved per Mudlet profile, in emunah-config.lua in your Mudlet home directory, so two characters keep separate defences, priorities and layouts. Read or change any of them by name:

emset curing.method             # show it
emset curing.method minerals    # change it

The ones most worth reviewing first are the healing thresholds. Each source engages at its own level, and the defaults leave the finite and contested ones for last.

SettingDefaultWhat it does
curing.manaThreshold85%Sip mana below this. Shares the sip balance with health, which goes first.
curing.healthThreshold80%Sip health below this.
curing.iridThreshold68%Eat irid moss below this, for health or mana, on its own balance.
curing.handsThreshold50%Perform Hands below this. It costs equilibrium, which attacking also spends.

When a shipped default turns out to be wrong, a migration corrects the stored value the next time Emunah loads. Your own changes are kept.

Settings in files

The conf/ folder in the checkout has one file per area: system, interface, map, healing, curing, defences, hunting, pvp, loot, antitheft, pipes, riding and people. Every line ships commented out, so nothing changes until you edit one. Uncomment a line to pin that setting: a pinned setting wins over emset, which says so rather than appearing to work. The files are read on every load.

Two more, priorities.conf and situations.conf, hold your own cure ranks and changes to the situational rules. They apply only while emset ownprios on; see your own rules.

Updating

emreload brings the checkout up to date with main on GitHub, then reloads every module from disk without losing state. It only fast-forwards: a checkout on another branch, or one with local edits in the way, is left alone, and Emunah says so. emset reload does the same thing, emreload still works when the command module itself failed to load, and Ctrl+F5 reloads too.

emreload                       # update and reload
emset system.update false      # reload what is on disk, without pulling

The map updates itself: Emunah checks for a new crowdmap when it loads and every hour after. See Map and walking.

Developing

Edit any file under src/ and run emreload. There is nothing to reimport and no client to restart, and a module added to the manifest is picked up on the same reload.

The suite of 3847 behavioural tests runs the real modules against a simulated Mudlet, with no client involved. Mudlet runs Lua 5.1, and so does the suite. GitHub Actions runs the same command on every change.

sh tools/ci.sh                  # compile as Lua 5.1, then the suite
lua5.1 test/run.lua             # the test suite
lua5.1 test/bench.lua           # per-prompt cost, in microseconds and bytes
lua5.1 test/profile.lua         # where the time goes
lua5.1 test/ui_preview.lua      # render the panels in a scripted fight, as HTML
lua5.1 tools/fight-report.lua fight.log   # a pasted fight, summarised

Troubleshooting

What you seeWhat it means
Cannot find the Emunah source at ...EMUNAH_ROOT is unset or wrong, or the checkout moved. Run step 3 again with the right path.
No class module loaded -- nothing knows how to attack.Hunting and PvP need a class module, and the class is read when you log in. Log the character in first. Priest is the class supported today.
A panel is missing, stuck, or the wrong sizeemset ui rebuild rebuilds every panel from scratch. emset ui auto hands panels you sized by dragging back to sizing themselves.
Something is not happening and you cannot tell whyemset debug prints every command Emunah sends, and every one it holds back with the reason: stunned, prone, no balance, and so on. emset debug gmcp traces every GMCP message too.
A line is marked (i)Emunah ignored it as an illusion. Hover over the mark to see why.
A setting does not seem to take effectemset <setting> with no value reads back what is in force. A setting pinned in a conf/ file wins over emset, which says so when you try to change it.