github binary-knight/usurper-reborn v1.3.0
v1.3.0 - Reckoning

3 hours ago

Usurper Reborn v1.3.0 "Reckoning"

The first step of a difficulty rework

1.3.0 is the first step of a longer rework of dungeon difficulty. In this
step monsters use their abilities and spells more, encounters on dungeon
floors 4 to 10 mix monster types and sizes, elite monsters carry traits, the
player's attacks roll to hit, and healing potions scale with the character.
Its targets were set for dungeon floors 1 to 10, measured with a combat
simulator. Elites, monster tactics, the hit roll and scaled potions are also
active on deeper floors, which have not been tuned yet.

Next steps: 1.3.1 brings tuning and fixes from play on 1.3.0; 1.3.2 covers
dungeon floors 11 to 25, 1.3.3 floors 26 to 50 and 1.3.4 floors 51 to 100.

A character whose level equals the dungeon floor will find floors 6 to 10
harder than before, most of all with a companion. The first time you enter
the dungeon the game starts you on the floor equal to your level; you can
pick a lower floor at the entrance.

Dungeon difficulty

  • Your physical attacks on monsters now roll to hit. Each swing and each
    physical single-target ability rolls a twenty-sided die and shows the roll
    and the number needed, for example "[You roll 14; you need 2 or more]".
    Against a monster at your level or up to 5 levels above you always need 2
    or more: only a natural 1 misses (a 95% chance to hit). Against a monster
    more than 5 levels above you need up to 8 or more (65%), and there your
    Dexterity and the monster's armour count. A natural 1 always misses and a
    natural 20 always hits; on a basic swing the natural 20 is the critical
    hit. A miss deals no damage and triggers no on-hit effect. Teammates and
    companions roll too. Spells, area abilities, Soul Strike, Precise Shot and
    player against player fights do not roll. The monster's evasion check
    comes first, as before.
  • Precise Strike now needs 4 less on the hit roll in place of ignoring 25%
    of the monster's Defence. The roll never needs less than 2, so this
    changes the roll only against a monster more than 5 levels above you.
  • Monsters use their abilities with more sense: they no longer repeat a
    status the target already has, heal or guard at full strength, or reuse an
    ability that is spent. In a party some monster families prefer a badly
    wounded target, and some prefer casters and healers; a taunt still comes
    first. From monster level 3, five early monsters have a signature ability:
    Goblin (Rally), Zombie (Enfeeble), Kobold (Poison), Spark (Burn), Animated
    Armor (Stoneskin). Old God fights are unchanged.
  • Dungeon floors 4 to 10: regular rooms can hold up to three monsters (about
    one room in five), and groups mix monster families more often. Each
    monster in a group of three is weaker (80% HP, 90% damage). A mixed group
    can include one spellcaster, shown as a "Shaman" (for example "Kobold
    Shaman"). Boss rooms and floors 1 to 3 and 11 and deeper are unchanged.
  • Elite monsters: from dungeon floor 3, a regular room can hold one elite
    (about 1 room in 14 on floors 3 to 10, 1 in 11 on floors 11 to 30, 1 in 9
    deeper). An elite has 60% more HP, 15% more damage and 10% more defence
    than the monster it was, gives 60% more experience and 50% more gold, and
    carries a named trait (Frenzied, Venomous, Commanding, Mending or Swift;
    two different traits from floor 51), announced when the fight starts.
    Frenzied: below half health it hits harder. Venomous: its blows can
    poison. Commanding: its allies deal 10% more damage while it lives.
    Mending: every third round it can heal a badly wounded ally in place of
    its own attack. Swift: it acts before the first round. A group of three or
    more has one monster fewer when an elite leads it. Boss rooms and champion
    encounters never have an elite.
  • Healing potions heal at least 20% of the drinker's maximum HP (the old
    flat amount still applies when it is larger), so potions stay useful at
    high levels; a potion given to an ally is based on the ally's maximum HP.
  • The Orc is a little weaker (90% of its former strength), easing the step
    at dungeon floor 5; floor bosses keep their strength.
  • Dual-wielding: each swing uses the weapon in its own hand (the off-hand
    swing at half strength), and abilities use the main-hand weapon plus half
    the off-hand one; before, every swing used both weapons' power added
    together. This applies to players, teammates and PvP and arena opponents.
    Dual-wield now deals about 1.5 times the weapon damage of a weapon and
    shield (about 1.1 times for a Warrior from level 30); a two-handed weapon
    gives 1.45 times. The character sheet shows each hand's swing power.
  • Fixed: the Gnoll bite poisoned on spell, magical ability and ranged hits;
    it now fires on melee hits only.

Betrayal

  • Betrayal is now part of play and saved with the character: the Stranger
    turns on you before her fight (no gold is taken), Lyris says her farewell
    when you choose to sacrifice her, and taking a new lover without telling
    an exclusive partner brings a heartbreak scene in town (Wisdom +3; the
    marriage and lover records are not changed).
  • Characters from before 1.3.0 start with no betrayal points; story flags
    already earned are kept.
  • Companions remember: murders they witness and being left to die build
    resentment, which gifts and other loyalty gains of 5 or more reduce. A
    warning comes first; if it goes on, the least loyal companion leaves in
    town (never in a dungeon or a fight), handing back their gear and keeping
    their level and your bond.
  • The Temple's Faith room has a new B option to settle a betrayal: forgive a
    companion who left once you have shown kindness (loyalty gains with your
    other companions, or an atonement at the Temple costing 100 gold per
    level, at least 100, once a day), after which they rejoin at the Inn with
    loyalty 50; or forgive the Stranger, or take revenge once if she escaped.

Teams and hired NPCs

  • Hiring NPCs for your team costs less below level 25. The per-level part of
    the price now grows with the NPC's level (a level 10 NPC about 9,700 gold
    where it was about 21,700; level 13 about 16,000 from 28,500; level 19
    about 31,800 from 40,900); level 25 and higher are unchanged. An NPC above
    your own level now costs 5% more per level above you, up to 50% more at 10
    levels above; before, any NPC above you cost 50% more. The daily wage
    follows the same curve (level 10: 400 gold a day from 1,000; level 19:
    1,444 from 1,900; level 25 and higher unchanged), and NPCs already on your
    team pay the new wage from the next day.
  • Team Corner: the town now keeps a pool of up to 18 low-level NPCs to hire,
    six each at levels 1 to 5, 6 to 10 and 11 to 15. New arrivals aged 18 to
    22 fill it while the town holds fewer than 190 NPCs, and NPC teams recruit
    a level 15 or lower NPC only when more than six of its level band are
    free. The hire list shows the NPCs nearest your level first. NPCs waiting
    in the pool gain levels more slowly. An NPC on your team does not age
    while it serves you; an NPC past its lifespan dies seven days after
    leaving your team.
  • Hired NPCs and friends in your dungeon party now carry the oath-mark of
    your banner. New story text tells you so when you hire, in your team view
    and when someone joins your party. When one of them falls in your fight
    and will recover, the game now says the oath-mark held, in place of
    telling you they made the ultimate sacrifice. When one is lost for good, a
    short scene plays: the mark breaks and they speak a last line. The chance
    of losing a teammate for good in your own fights is unchanged, and NPCs on
    your team still cannot die while you are away.
  • When your spouse, lover or affair partner fell in your fight and was going
    to recover, the game ended the marriage or romance anyway. It now ends
    only if they are lost for good.
  • Throne: an NPC on your team could leave it by itself to challenge an NPC
    king, or be crowned on an empty throne as a named heir or as the last
    claimant. NPCs on a player's team are no longer picked for any of the
    three.
  • Online and BBS door play: the world simulation now learns every player's
    team from the saved characters before each of its steps. Before, a team
    created in another door process, an NPC-founded team a player had joined
    (after a server restart, until that player logged in), or any team after a
    failed load was treated as an NPC team: its hired NPCs could act alone,
    die, walk out or see the team dissolved. Nothing is written to the
    database for this.

Town, duels and quests

  • Seth Able fights at the level his challenge screen shows. A win pays the
    Inn's flat reward only.
  • A Seth win no longer adds the small combat reward it paid before (about 17
    XP and some gold) or a loot roll.
  • Town honor duels and Inn duels share one daily cap of 3 wins.
  • An NPC you beat in an honor duel, whether you challenged it in town or it
    challenged you in the street, keeps its HP and stays where it is: no
    respawn, no lost gold, no "returned from the realm of the dead" news, and
    a kill contract on it is not paid.
  • The Pit's reckless side bet label says 2.5x, the amount it pays.
  • In a duel, [S] Stats shows the status and asks again; it no longer spends
    the turn.
  • A held fighter's line in a duel reads "You are stunned and cannot act!",
    and the cannot-act lines in duels and at the dungeon prompt name the
    status in the player's language.
  • The loot comparison for a shield warns when the shield would move out the
    weapon your spells or class abilities need, shows the shield's Shield
    Bonus, and compares a new shield's own Shield Bonus and Block Chance.
  • The Cure Critical and Judgment descriptions state that a cast removes
    Darkness first and adds Chivalry only with no Darkness.
  • One kill or one defeat now advances each quest objective once; a boss, a
    champion or a named NPC could advance an objective twice.
  • The Quest Hall quest to slay a monster type's champion is now completed by
    killing that champion in the dungeon.
  • The Quest Hall's champion quest now shows the champion's own name (for
    example "Slay the Zombie Revenant"), the name it has in the fight, in
    every language.
  • Spanish, French and Italian: the champion quest's title and objective no
    longer put a fixed masculine article before the champion's name.

Dungeon and display

  • Rooms you cleared on a dungeon floor stay cleared after a disconnect, a
    reconnect or a save taken on the floor, including the room of the last
    fight and a won boss.
  • Dungeon encounter lines that name several different monsters ("You face 1
    A, 1 B and 1 C!" and "You encounter ...") now wrap at 79 columns; with
    four or five long names they ran past the edge of the screen.
  • Online, door and console play: the wandering encounter lines ("You
    encounter ...") showed their colour codes as text, for example "[red]1
    Wolf[/]". They now show each monster group in its colour.
  • BBS door sessions over a socket now show inline colours instead of the
    colour tags as text; an ASCII session shows the text alone.
  • A row with an inline colour no longer counts three extra columns per
    colour when the rest of the row is laid out.

Online play

  • Online Play no longer stores your password. "Remember me" now saves a
    login token from the server, kept in your own user folder, used only for
    the server it came from; it expires after 90 days and ends when the
    password is changed or reset, or the account is banned or deleted. A
    password saved by an older version is used once for its own server and
    then erased from disk. A server older than 1.3.0 cannot remember logins;
    the game asks for the password there.
  • Online Play over SSH checks the server's identity: the official server's
    host key fingerprints ship with the game and any other key is refused
    there; for other servers the key is remembered on the first connection and
    a later change is refused, with the file and line to remove if the change
    is expected.
  • Logging in by hand over SSH or the website terminal no longer shows the
    raw "ERR:..." or "OK" protocol lines; the game's Online Play client still
    receives them.
  • An online permadeath waits up to 10 seconds for the fight's telemetry row
    to be written before the character is erased.
  • The balance records and opt-in telemetry now include fights that end in
    permadeath, an arrest or exhibition loss, or a rescue (Last Stand, Death's
    Door, Mortis's Miracle, Divine Favor).

Website, dashboard and wiki

  • The website's Content-Security-Policy is enforced (it was report-only
    since 1.2.6), with the same policy. Before the switch, every page and the
    web terminal, signed in and out, were checked with a violation observer: 0
    violations. The 1.2.6 check had read the browser console, which does not
    show these notices. The enforcing header reaches the live site when the
    server's nginx snippet is updated at release.
  • Admin page: the SSL card checks the certificate and shows "Certificate
    failed validation" with the reason when it does not pass.
  • A player password reset from the web admin page now saves the password in
    the game's own format; before, a player reset there could not log in.
  • The dashboard password is stored only with bcrypt; an older stored hash is
    converted at the next dashboard login.
  • Balance dashboard: the class charts show how many players each bar comes
    from and open on a level band (levels 1-9), with a selector for other
    bands.
  • The wiki spells table shows the level at which a spell can be learned and
    cast and the mana a cast costs before Wisdom; the world boss, duel and Inn
    companion spell lists show the mana the cast charges.

For BBS sysops and server operators

  • Sysops: back up the database before upgrading. The clean roll-back is
    restoring that backup. Running 1.2.7 on a 1.3.0 database loads but loses
    betrayal state, the hired-NPC ageing grace and the remembered login. Two
    versions on one database at once is not supported.
  • Sysops: the combat log table (combat_events) gains three columns when the
    server first starts on 1.3.0: player_swings, player_misses and
    elite_count. They are added automatically; rows written by earlier
    versions keep them empty. The opt-in telemetry sent from other installs is
    unchanged.
  • The server log records a SAVE_SLOW warning when an autosave takes over 2
    seconds to build or write, with both durations and the calling site.
  • Sysops: if the world simulation cannot read the player teams when it
    starts, it holds its steps and logs the reason until a read succeeds;
    players can keep playing meanwhile.
  • The door help for --npc-xp states the accepted range 0.01 to 10.0, the
    default 5.0, and that recruit pool NPCs earn at x1.0.

For developers

  • The build pipeline's GitHub token is read-only for every job except the
    one that attaches release files.
  • Code cleanup: unused stat helpers with outdated formulas were removed from
    StatEffectsSystem (no gameplay change).

Known issues

  • An NPC that has declared a challenge on a player king can still be hired
    for about a minute, and leaves the team when the challenge runs.
  • A party member or companion whose name holds a word in square brackets
    (for example "[DK] Bob") shows empty lines for its hit, miss and death
    lines in a fight.
  • In group combat, a combat row long enough to wrap onto a second row
    reaches a follower in the leader's language.
  • Some combat rows that carry a long monster name can pass 79 columns.
  • The world boss line for a turn lost to a status shows the status name in
    English in every language.
  • The duel spell list prints a spell's slot number as its level.
  • French and Italian: some champion names join a feminine noun to a
    masculine form (for example "Étincelle Primordial" and "Scintilla Primo").
  • Losing an honor duel is an ordinary death with its penalties: online it
    uses a Resurrection and is permanent with none left, and on Nightmare the
    save is deleted.
  • A win in a duel that an NPC challenged you to is not counted toward the
    shared cap of 3 duels a day.
  • The Defiant ending text says Manwe is gone, and the ascension offer that
    follows has Manwe speak.
  • NPC prisoners: a jailed NPC keeps acting in the world and can be met
    outside the prison while serving. An NPC's sentence counts down at each
    player's daily reset, so it ends sooner with more players, and it is not
    saved, so a server restart frees NPC prisoners.
  • MUD clients: the GMCP Char.Skills.List message sends each spell's listed
    mana cost and level, not the mana a cast charges or the level at which the
    spell can be cast.
  • Projected by the combat simulator and accepted for this release: deaths on
    dungeon floors 6 to 10 may run above the design ceiling of 1% of fights
    (shop gear alone about 3.5%, shop gear with one teammate about 1.3%, well
    geared alone about 1.1%); a party of three on floor 50 loses more boss
    fights than intended; elite rooms on floors 3 to 10 deal less damage than
    the design aims for; a solo Warrior in shop gear on floor 30 wins about
    2.4 points fewer regular fights.
  • Hired NPCs neither die nor age in the world, so they hold their places in
    the town.
  • Sysops: DOCS/DOCKER.md, DOCS/BBS_DOOR_SETUP.md and
    scripts-server/usurper-world.service give the --npc-xp default as 0.25. It
    is 5.0, as the door help says.
  • Sysops and modders: a manaCost override in spells.json changes nothing a
    cast charges.
  • Sysops: with several door processes on one shared database, a door process
    that does not host the world simulation still runs one of its own every 30
    seconds, and its saves put its own state of the NPCs it changed over the
    stored one. Players' hired NPCs are not affected. No switch stops it in a
    door process; --no-worldsim does not. What a sysop can do: serve every
    player from one game process, the single-process server (--mud-server,
    with sessions through --mud-relay; see DOCS/SERVER_DEPLOYMENT.md), which
    runs one world simulation.

Don't miss a new usurper-reborn release

NewReleases is sending notifications on new releases.