Documentation menu

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.

SourceHow it is set
City enemiesTyping 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.
Declaredemset iff <person> ally|enemy, or emset ally add <person> for a partner. It survives imports, and survives the broader rules changing underneath it.
Derivedemset 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:

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:

ListingGives
CWCity roster: name, rank and city.
CLWHOClan membership.
QWWho is around.
HONOURSThe richest source: full name, race, city, house, order, level and more.
CITY ENEMIESYour city's enemies, replaced each time you type it.
Your guardian angelWhere 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.