A combat system for Achaea, running inside Mudlet.

Emunah cures you on every balance at once, keeps your defences up, walks you anywhere on the map, clears whole areas, and fights players with you and your allies. It reads the game as it happens, so what you see on screen is what it is about to do.

Free and open source under the MIT licence. Needs Mudlet 4.10 or later and an Achaea character.

Priest only, for now

Emunah currently supports the Priest class 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. Support for further classes is in development and coming soon. See the roadmap.

Mudlet running Achaea with Emunah's interface: a room panel listing denizens and items on the left, afflictions and defences below it, the game text in the centre, chat tabs and an area map on the right, and a combat HUD of vitals gauges and balances along the bottom.
Emunah in a live session. Pick a part of the interface to see what it does.

One picture of your character, shared by everything.

Curing, defences, the interface, the map, hunting and PvP all read the same live state from the game, and every command they send passes one gate that knows when Achaea would refuse it.

Client-side curing

Every affliction cured on the right balance, the moment that balance is back.

Achaea's server-side curing stays off. Emunah reads your afflictions from GMCP, chooses the cure each balance should spend, and sends it on the prompt it becomes possible. The rankings are the reference system's, refined by rules learnt in real fights, and you can read and change every one.

  • Every balance at once. Herb, salve, sip, purgative, smoke, focus, moss and tree each choose their own cure, so a salve never waits behind a herb.
  • Locks cured around, not into. Anorexia, slickness, asthma, impatience and paralysis shut whole routes. Emunah cures through the one still open, and in the moments before a lock closes it cures the affliction that keeps an escape route open, touching the tree tattoo on the same prompt.
  • Dangers named. The prompt names the lock you are in, and any instant kill you are open to: an Alchemist's reave, dismemberment, a pulp or a golem.
  • Illusions ignored. Text reports wait for the prompt, one illusion discards the whole block, and a gained affliction is dropped unless the server confirms it.
How the curing engine works
Emunah's affliction panel during a lock: anorexia, stupidity, asthma, paralysis and clumsiness, each with its cure and the affliction blocking it. Below, anorexia shuts herb, sip, purgative and moss; paralysis shuts salve, focus and tree; asthma shuts smoke.

Drawn by Emunah's own panel code mid-lock. Three afflictions shut every curing balance between them, and each row shows which one its cure is waiting on.

Live interface

Every balance, affliction and defence on screen, as the game reports it.

The panels draw from the same state the curing engine acts on, after each packet and only where something changed. They never draw before a cure has gone out.

  • The balance strip. Each balance ready, in flight, recovering with the seconds left, or shut by an affliction, by the queue's own rules.
  • Vitals that show the trend. Health, mana, endurance and willpower, each with its change since the last prompt.
  • Panels that size themselves. The room, afflictions and defences share the left column by what each holds, and a divider you drag keeps the height you gave it.
Tour the interface

Every balance is up. Nothing is afflicting you.

The left half of the combat HUD: the hunt and pause buttons, the target bar with its health, the commands awaiting an answer, the health gauge with the damage just taken, the mana gauge, and the first cells of the balance strip.

Above, the balance strip replaying a real sequence. Below, part of the combat HUD as Emunah draws it.

PvP, alone or together

Every free balance sends something, and every choice reads what the target can still cure.

Name a target and pick a mode with F1 to F4. PvP fights as a Priest today. On each prompt the prayer, balance and equilibrium lanes each send the next move the mode calls for, skipping what the game has already confirmed on them.

  • Their curing, followed. Afflictions that land, symptoms anyone can see, the herbs they eat and the defences they raise are all read from the game text, so Emunah knows which of their routes are shut and how close they are to a lock.
  • Built to finish a lock. Once a lock is building, the next chasten carries what it still lacks. On a target with hellsight, the angel's panic gives slickness, and the mental afflictions and anorexia that follow have to be focused.
  • Allies who are never targets. A partner's call can set your target, their comings and goings are said mid-fight, and you are told who is attacking you and as what class.
How PvP works

One PvP prompt, against a player

  1. ReadWhat the target has, what they can no longer cure with, and what their defences are.
  2. PrayerThe next Zeal verse the mode wants, once per prayer, ending in a rebuke when it pays.
  3. Balance or equilibriumOne move beside the verse, never both: a mace blow carrying a chasten, aimed at whatever finishes the lock, or an equilibrium move.
  4. The equilibrium moveAn affliction such as sloth, dazzle or panic, heresy against rebounding, or contemplate, sap and absolve to finish.
  5. Hold when lockedIf you are locked, balance and equilibrium go to your cures until it breaks.

Hunting and the map

Walk anywhere, clear an area, collect the gold. One key starts it.

emset hunt, or F11, walks the area room by room and fights whatever is on your kill list, while curing and keep-up carry on underneath. goto walks you to any room, area or person by name, one confirmed step at a time.

The hunt stops itself at its health floor and when mana, endurance or willpower run low, and will not attack with another player in the room. F12 stops it and walks you to your safe room. With F9 you hunt behind a leader instead, attacking what they attack.

How the hunt runs

One room of a hunt, against denizens

  1. ArriveThe walker steps to the nearest room of the area it has not visited, on Emunah's own router.
  2. Choose a targetThe next denizen on the area's kill list, by its replica number, never by name.
  3. AttackOn the balance your attack needs. As a Priest, penitence and the rite of desolation go first when they pay for themselves.
  4. CollectAfter the last kill in the room, the gold goes into your pack.
  5. Move onThe room is clear, so the walker takes the next one.

And the rest of what a character needs.

Each one is a module you can switch on or off, documented in the client with emhelp.

Defence keep-up
Choose each defence once from a clickable grid: kept up, raised once, or left alone. Raised only when curing does not need the balance.
Map and walking
The crowd-sourced map kept current, walks that wait out stun and paralysis, doors, swimming, ferries and gallops, and locator lines turned into links.
Allies
Partners who can never be targeted, their target calls followed, and the class of everyone attacking you.
People and names
Everyone you have seen, with their city, house and class, from WHO lists, HONOURS and the Achaea API. Allies and enemies coloured in the game text.
Pipes
Refilled with the herb they hold and relit when they go out, so smoking cures are always ready.
The mace
Kept in hand at all times. Dropped in fear, it is picked up and wielded again on the same line, and the prompt says whenever it is not wielded.
Rites
Your rites performed again as they run out, for as long as you stay in the room, and a fight's own rites raised when it starts.
Riding
Your mount kept with you and, if you want, you vaulted back on whenever the balance is idle.
Antitheft
Selfishness kept up, valuables packed, and an alert when something leaves your inventory unexplained.
Shops and gold
WARES listings made clickable, purchases paid from your pack, and a confirmation before anything costly.

Built on evidence, not assumptions.

A combat system is only as good as its model of the game. Emunah's is checked against the game itself: HELP files, GMCP traces, timestamped fights and the accounts of the players who cast the afflictions. Every change has to pass the whole suite before it ships.

3,847

Automated tests

The real modules run against a simulated Mudlet. Every reported bug gets a test that would have caught it.

77 µs

To decide every cure

The whole curing decision on a prompt, measured under an eight-affliction lock. Mudlet shares one thread with everything you run, so Emunah stays out of its way.

743

Game lines understood

The optional trigger package: afflictions gained and cured, states, illusions, and the attack lines that say who is fighting you and as what class.

Installed in three steps.

Emunah runs straight from a git checkout, so updating is one command in the client.

  1. Clone the repository

    Anywhere outside your Mudlet profile directory.

    git clone https://github.com/pharanyx-labs/Emunah.git ~/src/Emunah
  2. Install the package

    In Mudlet, open the Package Manager and install Emunah.xml from the checkout, and EmunahTriggers.xml if you want the game's text read as well.

  3. Point it at the checkout

    Once per profile. Emunah loads, and emhelp shows every module.

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

Nothing acts until you switch it on.

Start with emset curing on, choose your defences, and hunt or fight when you are ready.

Read the getting-started guide