Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
be18bee
Menu lines no longer show their key twice
binary-knight Sep 23, 2026
632912c
Team rankings count the real members, and empty teams are removed
binary-knight Sep 23, 2026
f5b9760
Team HQ levels are the team's current ones, read when they matter
binary-knight Sep 23, 2026
bef2253
Empty-team cleanup waits while any save is malformed
binary-knight Sep 23, 2026
bdb6a29
The status screen always shows the team's HQ bonuses
binary-knight Sep 23, 2026
c3ef890
An Old God kill pays its reward once
binary-knight Sep 23, 2026
203b91b
The Team HQ Armory reaches every hit a player makes
binary-knight Sep 23, 2026
c247673
The Team HQ Barracks reaches every hit a player takes
binary-knight Sep 23, 2026
c571e02
The Team HQ Infirmary reaches every healing potion
binary-knight Sep 23, 2026
aa2433b
The Team HQ Training reaches every combat XP award, once
binary-knight Sep 23, 2026
cc460c0
Wilderness gold finds pay on the dungeon's scale
binary-knight Sep 23, 2026
8f299e1
Beating a WANTED target counts wherever it happens
binary-knight Sep 23, 2026
5938303
Fixes from the first review of the 1.1.11 branch as a whole
binary-knight Sep 23, 2026
2a244a9
Fixes from the second review of the 1.1.11 branch as a whole
binary-knight Sep 23, 2026
8f108d4
Fixes from the third review of the 1.1.11 branch as a whole
binary-knight Sep 23, 2026
f56ce37
A same-name character no longer inherits a deleted one's quests and d…
binary-knight Sep 23, 2026
e7d86bf
Fixes from the fourth review of the 1.1.11 branch as a whole
binary-knight Sep 23, 2026
e3589f6
Fixes from the fifth review of the 1.1.11 branch as a whole
binary-knight Sep 23, 2026
9edd82c
Fixes from the sixth review of the 1.1.11 branch as a whole
binary-knight Sep 23, 2026
2d89112
A bounty the Crown posts on an NPC is not a player bounty
binary-knight Sep 23, 2026
7e55c59
A royal decree is a bounty on a player only when a player has the name
binary-knight Sep 23, 2026
aa7915d
A royal decree needs a complete NPC roster to count as a player bounty
binary-knight Sep 23, 2026
36f3683
World boss rewards read the team's current Training level before paying
binary-knight Sep 23, 2026
46c1d5c
Team HQ levels older than a minute are read again before use
binary-knight Sep 23, 2026
8a434b6
The Alchemist's Potion Mastery reaches every healing potion
binary-knight Sep 23, 2026
76e8f77
A Crown bounty on a player is paid to whoever beats them in a duel
binary-knight Sep 23, 2026
5ce16cd
Team and guild leadership passes on when the leader leaves
binary-knight Sep 23, 2026
707410d
A spell short of mana says how much it needs
binary-knight Sep 23, 2026
0dc40a9
The death-cap permadeath deletes the dying character, not the account…
binary-knight Sep 23, 2026
ca7912b
Deleting a character also ends its reign, its grudges, mail and auctions
binary-knight Sep 23, 2026
e211bd5
Fixes from the twelfth review of the 1.1.11 branch
binary-knight Sep 23, 2026
b0cd8bb
Fixes from the thirteenth review of the 1.1.11 branch
binary-knight Sep 24, 2026
9e2ca4e
Fixes from the fourteenth review of the 1.1.11 branch
binary-knight Sep 24, 2026
97f65d1
Fixes from the fifteenth review; NPC grudge and marriage clean-up def…
binary-knight Sep 24, 2026
49a2669
Fixes from the sixteenth review of the 1.1.11 branch
binary-knight Sep 24, 2026
044f6bd
Fixes from the seventeenth review of the 1.1.11 branch
binary-knight Sep 24, 2026
98c673c
Version 1.1.11 with release notes
binary-knight Sep 24, 2026
fbc685c
Release notes: the Team HQ bonuses' exclusions
binary-knight Sep 24, 2026
a4a31f1
Fixes from the final whole-branch review of 1.1.11
binary-knight Sep 24, 2026
715cf4f
Release notes: bounties posted before 1.1.11
binary-knight Sep 24, 2026
b092b3b
Release notes: test count
binary-knight Sep 24, 2026
930d4e3
Release notes: removed teams' war records and leaderless guilds
binary-knight Sep 24, 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
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.11](RELEASE_NOTES_1.1.11.md)
- [v1.1.10](RELEASE_NOTES_1.1.10.md)
- [v1.1.9](RELEASE_NOTES_1.1.9.md)
- [v1.1.8](RELEASE_NOTES_1.1.8.md)
Expand Down
83 changes: 83 additions & 0 deletions DOCS/release-notes/RELEASE_NOTES_1.1.11.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Usurper Reborn v1.1.11

## Team HQ

- **Every upgrade reaches everything it names.**
- The Armory adds 5 percent per level to every hit a player makes, PvE
and PvP. Effects that follow a hit (riders, reflect, damage-over-time
ticks) are not boosted again.
- The Barracks divides every hit an enemy lands on a player by 1 plus 5
percent per level (level 2: about 9 percent less). Status ticks
(poison, disease) and self-inflicted drains are not reduced.
- The Infirmary adds 10 percent per level to what every healing potion
restores, in and out of combat.
- Training adds 5 percent per level to every combat XP award, once, on
the player's own share.
- **The levels are the team's current ones.** A player who joins a team
gets its upgrades at once, a teammate's upgrade reaches everyone within
a minute, and a player who leaves loses them straight away.
- **The status screen always shows the team's HQ bonuses.**
- **Team rankings count the real members.** A team that no player, NPC
or online player belongs to is removed, with its upgrades and vault, so
a later team of the same name does not inherit them.
- **Leadership passes on when a leader leaves.** When a team or guild
leader quits, is deleted or dies for good, the highest-level remaining
player member leads. Teams already led by a former member are fixed by
the world save.

## Bounties and quests

- **Beating a WANTED target counts wherever it happens:** duels in the
Dormitory, the Dark Alley and its pit, the Inn and the Arena, sparing an
NPC who surrenders, and the Inn challenge.
- **A Crown bounty on a player is paid to whoever beats that player in a
duel.** It is paid once, never to the target themselves, and at the
amount posted.
- **A bounty is not lost when the database is busy;** it stays open.

## Deleting a character

- **A new character with a deleted one's name starts clean.** It no
longer inherits the old character's quests, bounties or deity.
- **Deleting a character also ends its reign, passes on the team or
guild it led, and removes its mail and auction listings.** Listings and
bounties of another player or NPC with the same name are left alone.
- **The permadeath for too many deaths deletes the character that died,**
not the account's main character.

## Rewards

- **An Old God kill pays its reward once.** The party leader's share is
Level x 6000 XP and Level x 1500 gold, paid in two parts: the fight's
share and the rest after the god's scene.
- **Wilderness gold finds pay on the dungeon's scale,** at the level the
wilderness fights use.
- **The Alchemist's Potion Mastery reaches every healing potion.**
- **World boss rewards use the team's current Training level.**

## Other changes

- **A spell short of mana says how much it needs,** for example "Magic
Missile (need 14 MP, have 6)".
- **Menu lines no longer show their key twice** (the Inn patron list, an
item's Equip and Drop options, the Dark Alley dice, the screen-reader
language line).
- **Winning the throne from an NPC king is not a kill,** so it does not
complete an Assassin contract on them.

## Known and unchanged

- Deleting a character does not yet clear NPC grudges against it or an
NPC's marriage to it; that comes in 1.1.12.
- A removed team's war and siege records stay, and a new team of the
same name inherits them.
- A guild whose remaining members are all banned or emergency accounts
has no leader until an admin promotes one.
- A Crown bounty posted on a player before 1.1.11 is not paid in a duel;
bounties posted from this version are.
- Noctura's betrayal pays both of its rewards, and secret bosses pay
their flat XP on top of the fight, as designed.

## Tests

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

[list]
[*]Team HQ upgrades reach everything they name: your hits (not damage-over-time ticks), the enemy hits you take (not poison or disease ticks), every healing potion and every combat XP award. Joining or leaving a team takes effect at once.
[*]Team rankings count real members, empty teams are cleared, and a team or guild passes to its next highest-level member when the leader leaves.
[*]Beating a WANTED target counts wherever it happens, and a Crown bounty on a player is paid to whoever beats them in a duel.
[*]A new character with a deleted one's name starts clean. Deleting a character also ends its reign and removes its mail and auction listings.
[*]An Old God kill pays its reward once, wilderness gold finds pay on the dungeon's scale, and the Alchemist's Potion Mastery works on every healing potion.
[*]A spell short of mana says how much it needs, and menu lines no longer show their key twice.
[/list]
33 changes: 20 additions & 13 deletions Localization/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -1076,6 +1076,9 @@
"combat.speed_fast": "Fast",
"combat.speed_normal": "Normal",
"combat.menu_unavailable": "(unavailable)",
"combat.qb_need_mana": "{0} (need {1} MP, have {2})",
"combat.qb_need_weapon": "{0} (need {1})",
"combat.qb_silenced": "{0} (silenced)",
"combat.choose_action": "Choose action: ",
"combat.combat_menu": "Combat Menu",
"combat.heal_potions_short": "Heal (Potions: {0}/{1})",
Expand Down Expand Up @@ -13179,15 +13182,15 @@
"team.facility_upgrade_cost": "[Upgrade: {0}g]",
"team.news_war_result": "Team {0} won the war between {1} and {2}! ({3}-{4})",
"team.upgrade_armory": "Armory",
"team.upgrade_armory_desc": "+5% attack per level",
"team.upgrade_armory_desc": "+5% damage dealt per level",
"team.upgrade_barracks": "Barracks",
"team.upgrade_barracks_desc": "+5% defense per level",
"team.upgrade_barracks_desc": "Less damage taken per level (+5% defense)",
"team.upgrade_training": "Training Grounds",
"team.upgrade_training_desc": "+5% XP bonus per level",
"team.upgrade_vault": "Vault",
"team.upgrade_vault_desc": "+50,000 vault capacity/lv",
"team.upgrade_infirmary": "Infirmary",
"team.upgrade_infirmary_desc": "+10% healing per level",
"team.upgrade_infirmary_desc": "+10% potion healing per level",
"combat.status_effects_label": "Status Effects:",
"combat.flee_label": "Flee ",
"combat.disarm_label": "Disarm ",
Expand Down Expand Up @@ -15205,6 +15208,10 @@
"base.effect_raging": " - RAGING! (+Strength, +HP, -AC)",
"base.effect_smite": " - Smite Evil: {0} charges",
"base.stat_active_buffs": "Active Buffs:",
"base.hq_armory": "Team Armory Lv {0}: +{1}% damage dealt",
"base.hq_barracks": "Team Barracks Lv {0}: -{1}% damage taken",
"base.hq_training": "Team Training Grounds Lv {0}: +{1}% XP",
"base.hq_infirmary": "Team Infirmary Lv {0}: +{1}% potion healing",
"base.buff_potion_mastery": " - Potion Mastery: +50% healing (potions, herbs, elixirs)",
"base.buff_arcane_mastery": " - Arcane Mastery: +15% spell damage",
"base.buff_tricksters_luck": " - Trickster's Luck: 20% chance of random bonus",
Expand Down Expand Up @@ -16292,7 +16299,7 @@
"inn.patrons_matching": "Patrons matching \"{0}\":",
"inn.patrons_no_match": "Nobody here answers to \"{0}\".",
"inn.patrons_no_number": "There is no patron {0}; choose 1 to {1}.",
"inn.return_to_menu": "[0] Return to inn menu",
"inn.return_to_menu": "Return to inn menu",
"inn.choose_patron": "Choose someone to approach (0-8): ",
"inn.interacting_with": "Interacting with {0}",
"inn.alignment_kindred": " Alignment: Kindred spirits (excellent rapport)",
Expand Down Expand Up @@ -16345,10 +16352,10 @@
"inventory.manage_item": "MANAGE ITEM",
"inventory.value": "Value",
"inventory.type": "Type",
"inventory.equip_item": " [E] Equip Item",
"inventory.equip_identify_first": " [E] Equip Item (must identify first)",
"inventory.drop_item": " [D] Drop Item",
"inventory.back": " [Q] Back",
"inventory.equip_item": "Equip Item",
"inventory.equip_identify_first": "Equip Item (must identify first)",
"inventory.drop_item": "Drop Item",
"inventory.back": "Back",
"inventory.cant_equip_unidentified": "You can't equip an unidentified item.",
"inventory.visit_magic_shop": "Take it to the Magic Shop to have it identified first.",
"inventory.cursed_cant_drop": "The {0} is CURSED! You cannot drop it.",
Expand Down Expand Up @@ -16765,7 +16772,7 @@
"street_encounter.romance.admirer_dashing": "Dashing rogue",
"street_encounter.romance.admirer_mysterious_m": "Mysterious man",
"street_encounter.romance.admirer_charming_m": "Charming gentleman",
"engine.main_language_sr": " L. Language ({0})",
"engine.main_language_sr": "Language ({0})",
"engine.main_language_visual": "Language ({0})",
"item.dagger": "Dagger",
"item.stiletto": "Stiletto",
Expand Down Expand Up @@ -23839,11 +23846,11 @@
"dark_alley.bm_gear_purchased": "Bought: {0} for {1} gold.",
"dark_alley.spot_intro": "The dealer rolls. The dice clatter loud and false. Watch the pattern. Call when you've seen enough.",
"dark_alley.spot_round_result": "Round {0}: {1} and {2} -- total {3}.",
"dark_alley.spot_call_now": "[1] Call now ({0}x payout, DC {1} to read)",
"dark_alley.spot_wait": "[2] Wait another round",
"dark_alley.spot_call_now": "Call now ({0}x payout, DC {1} to read)",
"dark_alley.spot_wait": "Wait another round",
"dark_alley.spot_which_way": "Which way are the dice loaded?",
"dark_alley.spot_loaded_high": "[1] High (8-12)",
"dark_alley.spot_loaded_low": "[2] Low (2-6)",
"dark_alley.spot_loaded_high": "High (8-12)",
"dark_alley.spot_loaded_low": "Low (2-6)",
"dark_alley.spot_check_line": "Read: d20({0}) + WIS({1}) = {2} vs DC {3}.",
"dark_alley.spot_reveal_high": "The dealer's hand drops a weighted die. The bias was HIGH.",
"dark_alley.spot_reveal_low": "The dealer's hand drops a weighted die. The bias was LOW.",
Expand Down
33 changes: 20 additions & 13 deletions Localization/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -1076,6 +1076,9 @@
"combat.speed_fast": "Rápida",
"combat.speed_normal": "Normal",
"combat.menu_unavailable": "(no disponible)",
"combat.qb_need_mana": "{0} (necesita {1} PM, tienes {2})",
"combat.qb_need_weapon": "{0} (requiere {1})",
"combat.qb_silenced": "{0} (silenciado)",
"combat.choose_action": "Elige acción: ",
"combat.combat_menu": "Menú de Combate",
"combat.heal_potions_short": "Curar (Pociones: {0}/{1})",
Expand Down Expand Up @@ -12994,15 +12997,15 @@
"team.facility_upgrade_cost": "[Mejora: {0}g]",
"team.news_war_result": "¡El equipo {0} ganó la guerra entre {1} y {2}! ({3}-{4})",
"team.upgrade_armory": "Armería",
"team.upgrade_armory_desc": "+5% ataque por nivel",
"team.upgrade_armory_desc": "+5% daño infligido por nivel",
"team.upgrade_barracks": "Barracas",
"team.upgrade_barracks_desc": "+5% defensa por nivel",
"team.upgrade_barracks_desc": "Menos daño recibido por nivel (+5% defensa)",
"team.upgrade_training": "Campo de Entrenamiento",
"team.upgrade_training_desc": "+5% bonif. XP por nivel",
"team.upgrade_vault": "Bóveda",
"team.upgrade_vault_desc": "+50.000 capacidad/nv",
"team.upgrade_infirmary": "Enfermería",
"team.upgrade_infirmary_desc": "+10% curación por nivel",
"team.upgrade_infirmary_desc": "+10% curación con pociones por nivel",
"combat.status_effects_label": "Efectos de Estado:",
"combat.flee_label": "Huir ",
"combat.disarm_label": "Desarmar ",
Expand Down Expand Up @@ -15020,6 +15023,10 @@
"base.effect_raging": " ¡EN FURIA!",
"base.effect_smite": " Castigo Divino: {0} carga(s)",
"base.stat_active_buffs": "Mejoras Activas:",
"base.hq_armory": "Armería del equipo Nv {0}: +{1}% daño infligido",
"base.hq_barracks": "Barracas del equipo Nv {0}: -{1}% daño recibido",
"base.hq_training": "Campo de Entrenamiento del equipo Nv {0}: +{1}% XP",
"base.hq_infirmary": "Enfermería del equipo Nv {0}: +{1}% curación con pociones",
"base.buff_potion_mastery": " - Maestria en Pociones: +50% curación (pociones, hierbas, elixires)",
"base.buff_arcane_mastery": " - Maestria Arcana: +15% daño de hechizos",
"base.buff_tricksters_luck": " - Suerte del Embaucador: 20% probabilidad de bonus aleatorio",
Expand Down Expand Up @@ -16106,7 +16113,7 @@
"inn.patrons_matching": "Parroquianos que coinciden con \"{0}\":",
"inn.patrons_no_match": "Nadie aquí responde al nombre \"{0}\".",
"inn.patrons_no_number": "No hay parroquiano {0}; elige de 1 a {1}.",
"inn.return_to_menu": "[0] Volver al menu de la posada",
"inn.return_to_menu": "Volver al menu de la posada",
"inn.choose_patron": "Elige a quien acercarte (0-8): ",
"inn.interacting_with": "Interactuando con {0}",
"inn.alignment_kindred": " Alineación: Almas afines (excelente afinidad)",
Expand Down Expand Up @@ -16159,10 +16166,10 @@
"inventory.manage_item": "ADMINISTRAR OBJETO",
"inventory.value": "Valor",
"inventory.type": "Tipo",
"inventory.equip_item": " [E] Equipar Objeto",
"inventory.equip_identify_first": " [E] Equipar Objeto (identificar primero)",
"inventory.drop_item": " [D] Soltar Objeto",
"inventory.back": " [Q] Volver",
"inventory.equip_item": "Equipar Objeto",
"inventory.equip_identify_first": "Equipar Objeto (identificar primero)",
"inventory.drop_item": "Soltar Objeto",
"inventory.back": "Volver",
"inventory.cant_equip_unidentified": "No puedes equipar un objeto sin identificar.",
"inventory.visit_magic_shop": "Llevalo a la Tienda Mágica para identificarlo primero.",
"inventory.cursed_cant_drop": "El {0} está MALDITO! No puedes soltarlo.",
Expand Down Expand Up @@ -16579,7 +16586,7 @@
"street_encounter.romance.admirer_dashing": "Picaro audaz",
"street_encounter.romance.admirer_mysterious_m": "Hombre misterioso",
"street_encounter.romance.admirer_charming_m": "Caballero encantador",
"engine.main_language_sr": " L. Idioma ({0})",
"engine.main_language_sr": "Idioma ({0})",
"engine.main_language_visual": "Idioma ({0})",
"item.dagger": "Daga",
"item.stiletto": "Estilete",
Expand Down Expand Up @@ -23407,11 +23414,11 @@
"dark_alley.bm_gear_purchased": "Comprado: {0} por {1} de oro.",
"dark_alley.spot_intro": "El crupier tira. Los dados repiquetean, sonoros y traicioneros. Observa el patrón. Canta cuando hayas visto suficiente.",
"dark_alley.spot_round_result": "Ronda {0}: {1} y {2}, total {3}.",
"dark_alley.spot_call_now": "[1] Cantar ahora (pago x{0}, CD {1} para leerlo)",
"dark_alley.spot_wait": "[2] Esperar otra ronda",
"dark_alley.spot_call_now": "Cantar ahora (pago x{0}, CD {1} para leerlo)",
"dark_alley.spot_wait": "Esperar otra ronda",
"dark_alley.spot_which_way": "¿Hacia qué lado están cargados los dados?",
"dark_alley.spot_loaded_high": "[1] Altos (8-12)",
"dark_alley.spot_loaded_low": "[2] Bajos (2-6)",
"dark_alley.spot_loaded_high": "Altos (8-12)",
"dark_alley.spot_loaded_low": "Bajos (2-6)",
"dark_alley.spot_check_line": "Lectura: d20({0}) + SAB({1}) = {2} contra CD {3}.",
"dark_alley.spot_reveal_high": "La mano del crupier deja caer un dado cargado. La carga era ALTA.",
"dark_alley.spot_reveal_low": "La mano del crupier deja caer un dado cargado. La carga era BAJA.",
Expand Down
Loading
Loading