Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
11feeff
New NPC names never get a Roman numeral
binary-knight Sep 24, 2026
4934490
Merge: new NPC names never get a Roman numeral
binary-knight Sep 24, 2026
59491a7
Fixes deferred from the 1.1.12 review
binary-knight Sep 24, 2026
c004c8f
Merge: fixes deferred from the 1.1.12 review
binary-knight Sep 24, 2026
f1d0fbc
Deleting a character clears NPC grudges and marriages and saves them …
binary-knight Sep 24, 2026
c4ce450
The royal court save no longer overwrites a court it did not load
binary-knight Sep 24, 2026
30deee2
The web admin delete runs the world purge through the game server
binary-knight Sep 24, 2026
da6130a
Playtest fixes: XP lines, typeahead, heal threshold, floors, status, …
binary-knight Sep 24, 2026
37ad236
Merge: owner-process Tier 1 (grudges and marriages on delete, version…
binary-knight Sep 24, 2026
2ad3a0f
NPC memories keep the time they were recorded
binary-knight Sep 24, 2026
849c7e7
The game server claims an admin command before running it
binary-knight Sep 24, 2026
3cc0233
Add the world_edits table and its backend methods
binary-knight Sep 24, 2026
ba7eb2d
Test: the fight-start control check ignores commented-out code
binary-knight Sep 24, 2026
0d9078d
The owner process re-applies the world edits and marks them applied
binary-knight Sep 24, 2026
c67b635
A door's roster save is written under the version it loaded
binary-knight Sep 24, 2026
91baaab
The owner re-applies the throne edit of a deleted king
binary-knight Sep 24, 2026
2ab510c
A child whose name is taken gets another first name, not a middle sur…
binary-knight Sep 24, 2026
326ca1f
Merge: owner-process Tier 2 (world edits, versioned door saves, memor…
binary-knight Sep 24, 2026
0e254d4
Fixes from the first review of 1.1.13: shared-record conflicts
binary-knight Sep 24, 2026
e9d0d84
Every treasury and court change is one versioned write
binary-knight Sep 24, 2026
1a5a5cc
A queued purge leaves a character recreated since the delete alone
binary-knight Sep 24, 2026
da16587
A door save remembers NPCs removed elsewhere, across repeated conflicts
binary-knight Sep 24, 2026
e57ab95
The guard bonus refuses amounts that would overflow
binary-knight Sep 25, 2026
76dd937
A coronation is stored at once, so court politics cannot undo it
binary-knight Sep 25, 2026
48de299
Cast Protection saves its loyalty gain with its cost
binary-knight Sep 25, 2026
e70af5e
Sales tax is credited to the treasury once
binary-knight Sep 25, 2026
9ad1f4d
Test: a landed coronation is the in-memory court at once
binary-knight Sep 25, 2026
79318be
Orphan graduations and arrivals are court changes
binary-knight Sep 25, 2026
46159fb
A failed throne challenge keeps the defenders it beat
binary-knight Sep 25, 2026
570570f
Abdication, NPC crowning, an empty-throne claim and rebellion are sto…
binary-knight Sep 25, 2026
728402e
Comments without dashes
binary-knight Sep 25, 2026
2596d29
A sales tax set to zero stays zero
binary-knight Sep 25, 2026
7480f99
Dismissing or promoting a courtier acts on the one chosen
binary-knight Sep 25, 2026
2754361
Bail granted by an NPC can be paid at once
binary-knight Sep 25, 2026
a029648
An arrest with no prison record can be pardoned
binary-knight Sep 25, 2026
6e87197
Street-encounter court outcomes are court changes
binary-knight Sep 25, 2026
119777b
No court member is changed outside a guarded court change
binary-knight Sep 25, 2026
4c50c11
The ascension abdication and the castle's fallback court are stored a…
binary-knight Sep 25, 2026
fe1c5a8
Main Street announces the places a new level opens
binary-knight Sep 25, 2026
45bf5b5
The tutorial says an Old God floor can be left but not passed
binary-knight Sep 25, 2026
d6c9d65
Equip Best weighs the stats a companion's role uses
binary-knight Sep 25, 2026
f2cc545
Main Street is laid out in districts and hubs
binary-knight Sep 25, 2026
cb74e3c
Hints, journal lines and help name the district path
binary-knight Sep 25, 2026
f8a23fd
Tests for the Main Street districts
binary-knight Sep 25, 2026
62670f9
README: screenshots of Main Street, combat, a dungeon room and the st…
binary-knight Sep 25, 2026
92ab183
Version 1.1.13 with release notes
binary-knight Sep 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion Console/Bootstrap/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -696,12 +696,19 @@ private static async Task RunWorldSimMode()
}
};

// v1.1.13: the standalone world sim takes the lock, so door sessions start no second world sim and
// the world edits have one owner. If another process holds it, this one takes it at its first beat.
string ownerId = $"worldsim_{Environment.ProcessId}_{DateTime.UtcNow.Ticks}";
if (!sqlBackend.TryAcquireWorldSimLock(ownerId))
DebugLogger.Instance.LogWarning("WORLDSIM", "The world sim lock is held by another process; this world sim takes it over.");

// Create and run the world sim service
var service = new WorldSimService(
sqlBackend,
simIntervalSeconds: DoorMode.SimIntervalSeconds,
npcXpMultiplier: DoorMode.NpcXpMultiplier,
saveIntervalMinutes: DoorMode.SaveIntervalMinutes
saveIntervalMinutes: DoorMode.SaveIntervalMinutes,
heartbeatOwnerId: ownerId
);

await service.RunAsync(cts.Token);
Expand Down
Binary file added DOCS/images/screenshot-combat.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added DOCS/images/screenshot-dungeon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added DOCS/images/screenshot-main-street.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added DOCS/images/screenshot-status.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions DOCS/release-notes/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
One file per version, newest first. Steam-formatted copies (BBCode) are in
`steam/`. The GitHub release for each tag carries the same text.

- [v1.1.13](RELEASE_NOTES_1.1.13.md)
- [v1.1.12](RELEASE_NOTES_1.1.12.md)
- [v1.1.11](RELEASE_NOTES_1.1.11.md)
- [v1.1.10](RELEASE_NOTES_1.1.10.md)
Expand Down
119 changes: 119 additions & 0 deletions DOCS/release-notes/RELEASE_NOTES_1.1.13.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# Usurper Reborn v1.1.13

## Main Street

- **Main Street is laid out in districts.** It shows its places (Dungeons,
Inn, Explore, Team Corner, Dark Alley), then Merchant Row, Guild Row,
Home & Hearth, Castle Grounds, Status, the Notice Board and, online,
the Online hub. Each opens a short screen of its places:
- Merchant Row: Weapon, Armor, Magic and Music shops, the Auction House
- Guild Row: Healer, Temple, Old Church, Bank, Level Master, Quest Hall
- Home & Hearth: Home, Lodging, Love Street
- Castle Grounds: Castle, Challenges, Sanctum, and the Settlement once
it is founded
- Status: Status, Progress, Stats Record, Fame, Good Deeds
- Notice Board: News and World Events
- Online: Who's Online, Chat, Arena, World Boss, Guilds
- Every screen shows only the keys it uses, and every key does what it
shows. [R] returns to Main Street. The old hidden keys are gone.
- Places still open at the same levels. A district appears once anything
in it opens, and the first visit after a new level names what opened
and where ("New in Guild Row: Temple, Old Church, Bank.").
- [?] on Main Street shows a map of every open place and its keys.
- Characters from earlier versions are told once that the street was
reorganised.

## Combat and the dungeon

- **The XP lines add up.** The world event lines say they are included in
the XP gained, one line names the other XP modifiers, and the party
share line matches the gain.
- **Auto-combat drinks a potion at the HP share you choose** (20 to 70
percent, default 50), set in the preferences.
- **Floors 4 to 6 are softened** on the way to full strength at floor 7.
- **A monster's stun or web follows the same hold rules as PvP:** nothing
new lands while one holds, and a hold is followed by a short immunity,
so they cannot chain.
- **The combat status line** shows each effect's turns left, damage per
turn for bleeding and poison, the turns a hold costs, and whether Last
Stand and Death's Door are ready.
- **The chest's Search for Traps works.** A trap it finds is disarmed and
the chest keeps its treasure.
- **An invalid choice asks again** in menus and room events instead of
sending you back to the room, and a room event is spent only once you
choose. Room actions that cannot be used say why.
- **Keys typed during an online pause are kept** and run next; the online
pause says "Press Enter".
- **The tutorial states the Old God rule:** you may retreat from a god's
floor, but you cannot go deeper until the god is defeated or won over.
- **Equip Best picks for a companion's role:** defence and health for a
tank, wisdom, intelligence and mana for a caster, wisdom and mana for a
healer.

## Levels

- `/train` takes you to the Level Master from Main Street, or says how to
get there. Level 10 is announced.

## NPCs

- **New NPCs no longer get Roman numerals** in their names. A name that
is taken gets a surname, and a child whose name is taken gets another
first name with the family surname. Existing NPCs keep their names.
- **NPC memories keep the time they happened** and fade after seven days
as intended. Memories older than that when this version first starts
are kept and start their seven days then.
- **Deleting a character clears NPC grudges against it and NPC marriages
to it** again.

## The royal court

- **Every treasury and court change is saved in one step,** and a
purchase's cost and effect are saved together; your gold changes only
once the court's change is saved.
- **A new king is saved at once,** whether by challenge, siege, an empty
throne, abdication, rebellion or ascension.
- A failed throne challenge keeps the guards and monsters it beat.
- Guard bonuses that would overflow are refused.
- Sales tax is credited to the treasury once, not twice.
- A sales tax set to zero stays zero.
- Dismissing or promoting a courtier acts on the one chosen, not a
namesake.
- Bail granted by an NPC can be paid at once, and an arrest with no
prison record can be pardoned.
- An orphan who comes of age becomes one new NPC, not a new one every
day.
- Throne challenges face the real king, not a stand-in.

## Other fixes

- Equip Best and every equipment menu take the item you chose, not the
first of that name, and gear moved to or from a companion is saved in
an order that cannot copy it.
- Deleting a character keeps mail sent by a living character of the same
name.
- Deleting a player from the web admin page runs the full clean-up.

## Self-hosted servers

- Setups that run one game process per player keep a log of world edits
that the world-sim process re-applies, and save NPCs and the court only
over the version they loaded. Such setups must run player processes
with `--no-worldsim` beside one `--worldsim` process.

## Known and unchanged

- Royal petitions can spend more treasury gold than the treasury holds.
- A monarch who dies leaves a throne that a restart can restore.
- An NPC imprisoned in a street encounter is not released online.
- A very large donation can overflow Crown standing.
- A retried court change can repeat its news line.
- A sales-tax write that gives up is logged, not refunded.
- An admin delete whose game server stops mid-way stays pending, and the
web page reports a time-out.
- On self-hosted setups with one process per player, an NPC created with
no ID under a name removed earlier in the same session is not saved.

## Tests

1,995 passing, up from 1,731.
10 changes: 10 additions & 0 deletions DOCS/release-notes/steam/STEAM_RELEASE_NOTES_1.1.13.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[h1]Usurper Reborn 1.1.13[/h1]

[list]
[*]Main Street is laid out in districts: Merchant Row, Guild Row, Home & Hearth, Castle Grounds, Status, the Notice Board and, online, the Online hub. Every screen shows only the keys it uses, and the street names what a new level opens.
[*]Combat: the XP lines add up, auto-combat heals at the HP share you choose, floors 4 to 6 are gentler, monster stuns cannot chain, and the status line shows effects, damage per turn and Last Stand.
[*]The chest's Search for Traps works, invalid choices ask again, typed keys are kept during online pauses, and /train takes you to the Level Master.
[*]Equip Best picks gear for a companion's role.
[*]New NPCs no longer get Roman numerals in their names, and NPC memories fade as intended.
[*]The royal court: treasury and court changes are saved in one step, a new king is saved at once, and several treasury bugs are fixed, including one that could create gold.
[/list]
Loading
Loading