Documentation / Features
People and names
Emunah keeps a record of everyone you have seen, and puts what it knows about them where you will actually read it: in the game text, the moment their name goes past.
emset whois sarapis # everything known about someone
emset iff sarapis enemy # mark someone an ally or an enemy
emset iff sarapis auto # back to what their city says
emset hostile city mhaldor # everyone in Mhaldor is an enemy
emset hostile # list the hostile organisations
Allies and enemies
Standing comes from three places, and what you declare always wins.
| Source | How it is set |
|---|---|
| City enemies | Typing CITY ENEMIES. Each listing replaces the last: everyone on it is an enemy, and anyone dropped from it no longer is. A listing whose names do not add up to its total adds without clearing anyone. |
| Declared | emset iff <person> ally|enemy, or emset ally add <person> for a partner. It survives imports, and survives the broader rules changing underneath it. |
| Derived | emset hostile city|house|order <name> makes everyone in that organisation an enemy, without touching a single record. |
An organisation-wide marking is the quick way to express a war; a declaration is the way to express the one person in it you are not fighting. auto hands the decision back to the organisation. An ally can never be made a PvP target.
Names in the text
Colour and weight do two different jobs, and they stack:
- Colour says where someone stands relative to you: dark red for your city's enemies, green for allies, otherwise their city. Any other enemy, declared or derived, keeps that colour and is underlined.
- Weight says there is something about them: a Dragon, a mark, infamy, or importance you set yourself.
An enemy's name is also a link: click it for their record, the same as emset whois. names.enemyLinks turns that off.
Only names already in the database are styled; nothing is invented from a capitalised word at the start of a sentence. Your own name is never highlighted. For an ally whose name is also a common word, lua emunah.ui.names.ignore("<person>", true) stops the highlighting and forgets nothing else.
The highlighter's trigger is built from the database itself, so it fires only on lines that name somebody you know, about one line in eight in practice, rather than every line with a capital letter.
Where records come from
Everyone who walks into the room and everyone who speaks gets a record, from GMCP. Neither says anything about allegiance, so neither sets a relationship. The game's own listings fill in the rest:
| Listing | Gives |
|---|---|
CW | City roster: name, rank and city. |
CLWHO | Clan membership. |
QW | Who is around. |
HONOURS | The richest source: full name, race, city, house, order, level and more. |
CITY ENEMIES | Your city's enemies, replaced each time you type it. |
| Your guardian angel | Where someone is, and their health and mana, as of that moment. |
Lines that locate someone are remembered too, for emset where and goto <person>; see locator lines. namedb.capture switches the listings off.
The Achaea API
emset whois can answer for someone you have never met, by asking Achaea's public character API. Requests go one per second, answers are kept for six hours and not-found answers for a day, and a timeout is never cached, because a network problem is not an answer. namedb.autoFetch turns the automatic lookups off.
Presence alerts
When presences.alert is on, an ANGEL PRESENCES scan that finds an enemy raises a warning window naming them and where they are. It stays for presences.alertFor seconds, fifteen by default, or until clicked if set to 0. An enemy is anyone the database calls one: declared, or a member of a hostile organisation.
Export and import
lua emunah.namedb.exportFile(path, opts) # write the database out
lua emunah.namedb.importFile(path) # merge someone else's in
lua emunah.namedb.prune(days) # drop records that are only a name
Import adds and never overwrites: someone else's file is evidence about people you have not met, not a correction of what you have decided about people you have. Your own declarations and notes survive a merge, and pruning never removes anything you declared or wrote yourself.