← All proposalsWork blog
Oil painting of a trophy hall: a mounted dragon head, a troll head, antlers and banners above a hearth

The Book of Deeds

A deep dive into achievements for Shroud of the Avatar: the complete system the game shipped in 2016 and never showed anyone, what Ultima Online and eighteen years of games since can teach it, and twenty-four concrete proposals.

Shroud of the Avatar already has an achievement system. A real one: a stat pipeline with server validation, a Mongo store, an unlock evaluator, a background job that pushes to Steam, and tiered kill-count achievements authored at 10 / 100 / 1,000 / 5,000. It has been running quietly since the Steam launch, and the game has never shown a player any of it. This document tours that dormant machine, surveys what the genre learned about achievements since Ultima Online, and proposes twenty-four improvements: a journal, a toast, per-creature counters, party-shared credit, a World Events channel, shard-wide celebrations, a trophy quartermaster, and a Steam catalog worth showing off. At the end sits the full first catalog: 115 achievements, 231 unlockables counting every chain tier.

0 · Executive summary 1 · The machine nobody can see 2 · Lessons: Ultima Online to modern 3 · The twenty-four proposals    Tier 1 · Quick wins (S1–S5)    Tier 2 · Core build-out (S6–S15, S23–S24)    Tier 3 · Server-backed (S16–S22)    Considered and rejected 4 · The composed surface 5 · Sequencing 6 · Appendix: the 115
Section 0

Executive summary

Ultima Online invented the ingredients of the MMO achievement system in 1997: numbers you grind in silence that become titles everyone can read, deed tracks, point vendors, communal collection monuments. World of Warcraft built the roof over those ingredients in 2008: one journal, points, categories, a toast, and a retroactive grant that turned every veteran's stored history into a day-one cascade of recognition. Shroud of the Avatar, an Ultima-lineage game, then did something stranger than either: it shipped a complete, server-validated, Steam-connected achievement pipeline and never built the shelf. The one achievement the game ever authored end to end is the Frost Giant chain: kill the giant, a conversation flag fires, Wymond the explorer hands over a one-time title, and the quartermaster Hisa runs a repeatable trophy turn-in. It works today. It shipped once. It was never generalized.

This proposal finishes the building. It extends the dormant pipeline (never forks it), gives it a journal and a toast, generalizes the Wymond chain to the whole bestiary, and adds the social layer the owner asked for: party-shared boss credit, a World Events channel, and shard-wide celebration buffs when the great bosses fall. The gaps cluster in three places:

  1. The tracking ceiling. Every stat must be a value in one flat 28-entry enum, six of which are test stubs. NpcKills is a single undifferentiated integer: the game cannot say what you killed. Kill credit is the killing blow only, sent by the client and trusted by the server. Cards S7, S8, S10, S16, and S21 raise this ceiling.
  2. No player surface. No journal, no toast, no unlock timestamp, no history. The only consumer of the unlock evaluator is the Steam reporter, so the only place a SotA achievement has ever been visible is a Steam profile page. A player at 999 of 1,000 kills has no way to know it. Cards S2, S6, S14, S21, and S22 build the surface.
  3. No social-reward loop. Unlocks grant nothing: no title, no trophy, no currency. Kill messages travel 40 meters of proximity chat and stop. Of the 219 titles in the game, exactly two are earned by defeating something. Cards S3, S11, S12, S17, S18, S19, S20, and S23 close the loop.
Policy, decided up front. Counters the game already tracks convert to unlocks in one server-side pass at launch; new counters start at zero for everyone on the same day. Tier goals are frozen at earn time and never revoked. Per-character progress is kept and viewable forever; unlocks and titles are account wide. Both records are stored.
#ProposalTierSizeServerOne-line pitch
S1Wake the dormant catalog Built1Snonethe stats the game has counted for years become real achievements
S2Unlock toast Built1Snonebanner, chat line, and fanfare the moment you earn one
S3Boss last-words deed flags1Mnone60 bosses remember you were there when they fell
S4Town discovery achievements1Menum onlyexplore a town's landmarks, earn its achievement
S5Steam curation pass1Snonea clean flagship set on Steam with icons and progress bars
S6Achievements journal Built2Lnonea character sheet tab for everything earned and everything left
S7Data-driven definitions Built2XLcatalog + opachievements become designer data, not enum edits
S8Creature-family kill counters Built2Lbake + emit66 creature families, each with its own kill record
S9Tiered chains to 10,000 Built2Snone10 / 100 / 1,000 / 10,000 ladders on every counter that deserves them
S10Curated boss registry Built2Mbakeone authoritative list of every boss in Novia
S11Trophy quartermaster2Lnone newdeeds buy trophies, points buy certificates, one NPC
S12Milestone titles Built2Mminimaltitles earned by doing, not just by pledging
S13Breadth stats Built2M-Lmixedfishing, taming, farming, and exploring all start counting
S14Per-character stats, account unlocks2Lnew collectionthe account keeps the unlock; each character keeps its story
S15Steam full sync, server-granted2Mreporterthe full catalog on Steam, granted only by the server
S23Achievement points, frozen thresholds2Mfielda lifetime score whose milestones stay earned forever
S24Legacy category2Mone-shot passtwelve years of events and pledges honored, at zero points
S16Party-shared kill credit3M-LXP-loop emitthe whole party gets the kill, not just the last hit
S17World Events channel Built3Mpublisha chat channel that carries the news of the realm
S18Boss-kill announcements Built3Mtriggerwhen a great boss falls, all of Novia hears
S19Celebration events Built3Lnew collectionone hunter's triumph becomes everyone's good hour
S20Reward-on-unlock hooks Built3Lgrant paththe title or trophy arrives the moment you earn it
S21Timestamps, history, atomic counters Built3Mwrite paththe date you earned it, and counters that never lose a kill
S22Offline catch-up3S-Mannounce rowearn it while away, get the toast at next login
Section 1

The machine nobody can see

Everything below the dotted line in this diagram exists and runs today. Everything above it is missing. The pipeline validates on the server (per-stat clamps, a change cap per message, a server-only edit flag), stores per account in Mongo, evaluates unlocks, and pushes them to Steam on a background job. What it lacks is any surface a player can see and any reward the game can hand over.

flowchart LR
  A["1 stat emitted\nkill, craft, discover,\nconversation verb"] --> B["2 client queue\nAchievements.cs, batch 20"]
  B --> C["3 UpdateStats op\nexisting request"]
  C --> D["4 server validation\nclamps, change cap,\nserver-only flag"]
  D --> E["5 Mongo store\naccount counter dictionary"]
  E --> F["6 unlock evaluator\nstat X reached N"]
  F --> G["7 Steam profile\ntoday's only surface"]
  E -.-> H["8 journal: missing"]
  D -.-> I["9 toast: missing"]
  F -.-> J["10 rewards: missing"]
  style H stroke:#a33d2e,stroke-width:2px
  style I stroke:#a33d2e,stroke-width:2px
  style J stroke:#a33d2e,stroke-width:2px
#Stage, as it exists todayExtended by
1Five stat-emission call sites in the whole game: kills, crafting, friending, party join, location discovery, plus a conversation-script verbS1 authors over all 28 stats; S16 moves kills server-side; S8, S13 add emitters
2Client enqueue and batch, cap 20 per flushunchanged; S7 widens what an entry can name
3The existing request; no new opcodesunchanged by design; every card rides existing rails where one exists
4Per-stat rules: min, max, max change per message, server-only flagS16 marks new counters server-only; S21 makes writes atomic
5One record per account, whole-dictionary writesS14 adds the per-character layer; S21 adds timestamps and history
6An achievement is literally "stat X reached N"; recomputed, never recordedS20 gives the evaluator a second consumer: rewards
7Live per-account Steam pushS5 curates; S15 expands and locks grants server-side
8–10NothingS6 journal, S2 toast, S22 catch-up, S20 rewards

The prototype the game already shipped

The full loop the owner is asking for exists for exactly one boss. Walk the Frost Giant chain:

Built already; this document does not re-propose it. Tiered kill and crafting achievements authored to four rungs; the server-side unlock evaluator with its anti-cheat knobs; a live background Steam reporter; an editor authoring window with build-time validation; a conversation-script achievement verb used in sixteen authored places; location-discovery achievement wiring live in two towns; the Wymond and Hisa reward chain; bot-client integration tests for achievements, titles, and parties.
The hard constraints every card works inside. The flat enum is the ceiling: per-creature counting arrives only through S7's data-driven definitions. Kill credit today is the killing blow, client-sent; the one clean insertion point for server-authoritative party credit is the existing per-party-member experience loop, and new counters it feeds are server-only. Stats are account-scoped with whole-record writes until S14 and S21 land. No boss flag exists in data; S10's registry is the only allowed source of boss identity. And zero new network operations anywhere a rail already exists: announcements ride the chat-channel plumbing, the celebration buff rides the scene-bonus room-property pattern, offline catch-up rides the durable announcement records.
Section 2

Lessons: Ultima Online to modern

UO never had an achievements panel, but it invented most of the parts: fame and karma ground silently into displayed titles, virtue meters filled by deeds, bulk order deeds turned accumulated work into banked points spent at NPCs, and community collections let a whole shard fill a museum together. What UO never built was the unifying surface. An Ultima-lineage game adding achievements is finishing what UO started, not importing a foreign idea.

1997
UO fame and karma
Silent numbers become public titles. The ur-pattern.
2001
UO bulk order deeds
Accumulated credit turned in at an NPC for escalating rewards.
2008
WoW patch 3.0.2
The canon: journal, points, toast, retro-grant, legacy category.
2013
FFXIV ships Jonathas
A reward-vendor NPC on day one; certificates follow in 2017.
2015
OSRS diaries
Regional deed sets claimed from taskmaster NPCs.
2022
ESO account-wide
Deleting per-character records = the backlash. Keep both.
2023
OSRS points rework
Points per deed, thresholds any task mix reaches. Freeze at earn.

What each game contributes

Ultima Online (1997). Fame and karma, virtues, bulk order deeds, community collections: the ancestral mechanics. The takeaway is that titles, deed tracks, and point vendors are native to this lineage; the shelf is the only new invention required.

World of Warcraft (2008). Patch 3.0.2 defined the canon: a journal with categories and points, a separate statistics tab recording everything whether or not it awarded anything, meta-achievements, a hidden zero-point category for legacy deeds, and a retroactive grant players accepted because the policy was legible. Statistics-first architecture meant later achievements could be authored against data already recorded, which is precisely SotA's situation. Its failures: point inflation and broadcast spam. Takeaway: record everything, award later; honor unrepeatable history at zero points; retro-grant in one server-side pass.

Guild Wars 2 (2012). Achievements as the endgame of a horizontal game: account-wide lifetime points with reward chests at fixed milestones carrying small permanent perks, and collections that turn hoarding into visible progress. Its daily treadmill was the failure, cleanly redesigned in 2023 without deleting the legacy record. Takeaway: in a game without a gear ladder, a lifetime score with milestone rewards is progression; collections serve the decorator audience SotA already has.

Final Fantasy XIV (2013). Jonathas, an old storyteller in Old Gridania, recounts your deeds and hands over what they earned; since 2017 he also converts lifetime achievement points into certificates spent on a catalog that grows every patch. Two loops at one NPC: a specific deed buys a specific trophy, and generic accumulation buys from a catalog. Takeaway: the quartermaster should run both loops from launch, with the NPC as the flavor and the menu as the mechanism.

Elder Scrolls Online (2022). Update 33 moved achievements account-wide and triggered the most contentious achievement change in genre history. The anger was not about account-wide recognition, which players wanted; it was about deleting the per-character record to get it, with a login-lazy migration that could lose data outright. Takeaway: SotA's chosen scope model, per-character stats retained forever with an account-wide unlock layer, is the exact lesson ESO paid to learn. Migrate in one server-side pass, never lazily at login.

Old School RuneScape (2015, 2021, 2023). Achievement Diaries organize deeds by region and claim from a local taskmaster who hands over a region-themed upgrading item plus permanent local perks; they push traffic through quiet content. Combat Achievements curate boss deeds by difficulty, and the 2023 rework made every task award points with tiers unlocking at thresholds any task mix can reach. Its standing failure: thresholds rise as tasks are added and earned rewards switch off until you requalify. Takeaway: points per deed, thresholds frozen at earn time; regional taskmasters are a natural later extension of the quartermaster.

EverQuest II (2009). The closest population analog: a small, elder, housing-obsessed, collection-driven community. Its achievements and shiny collections endured because the rewards are house items: things to place, display, and trade. Server-race prestige dies when population thins; display and trade do not. Its failure was bloat. Takeaway: house-placeable trophies are the default reward class for a decorating game, and curation matters more than count.

Steam, the platform (2007). An achievement bound to a progress stat shows a progress bar on the profile page; rarity percentages are queryable; hidden flags conceal spoilers; the rarest-achievement showcase turns a veteran's profile into acquisition marketing. Two hard rules: 100 achievements until the game crosses Steam's profile-features threshold, and every achievement needs achieved and unachieved icons. Most important: grants through the game-server stats interface cannot be written by any client. Takeaway: curate the flagship 100 first, expand later, and grant everything server-side.

Capability matrix

CapabilityUOWoWGW2FFXIVESOOSRSEQ2SteamSotA todaySotA proposed
Per-player stat tracking◔ [a]● S1 S7
Tiered count chains◔ [b]● S9
Per-creature or family counters● S8
Character and account scope, both kept◔ [c]● S14
In-game journal● S6
Unlock toast and chat line● S2
Unlock timestamps and history○ [d]● S21
Party-shared kill credit○ [e]● S16
Public announcement channel◔ [f]● [g]● S17 S18
World-benefit celebration effects◔ [h]● S19
Title rewards from deeds◔ [i]● S12
Physical trophy vendor◔ [j]● S11
Achievement points and milestones● S23
Platform sync and rarity display◔ [k]● S5 S15
Offline catch-up delivery● S22

● shipped and first-class · ◔ partial, adjacent, or limited · ○ absent. [a] The full pipeline runs today, but only 28 stats exist, six of them test stubs, all account-scoped. [b] Four kill tiers and four crafting tiers are authored and live; visible only on Steam. [c] ESO shipped account-wide by deleting the per-character record, the failure SotA's model avoids. [d] Unlock state is recomputed on demand; no unlock has ever been recorded with a date. [e] The party experience loop exists and fans out per member; achievement credit was simply never inserted into it. [f] WoW broadcasts reach nearby players and the guild, never the server. [g] OSRS clan broadcasts are the genre's best-configured matrix; RS3 adds true global scope. [h] WoW's dragon-head ceremony buffed one city by proximity; the true everyone-online precedent is Guild Wars 1's Favor of the Gods. [i] 219 titles exist; two are earned by defeating something. [j] The Wymond and Hisa pair shipped the full vendor pattern for exactly one boss. [k] The Steam reporter is live, but the catalog is 14 rules and rarity is not mirrored in-game.

Section 3

The twenty-four proposals

Tier 1 · Quick wins: wake the machine

S1 · Wake the dormant catalog

BuiltTier 1Size SServer: none

Built 5 August 2026. The audit found the catalog more awake than anyone knew: all 29 achievement rules were already authored, and every quest achievement already has a working trigger. The six that looked missing live in conversation branches the old exports do not show. Editor tests now pin the catalog and the trigger coverage so neither can quietly break. The visible half ships with S2.

The game has been counting your NPC kills, crafted items, discoveries, and quest milestones for years. This card turns those silent counters into a first wave of real achievements. Because the numbers already exist, veterans unlock most of the wave the moment it ships.

Seen in: WoW patch 3.0.2's statistics-first retro-grant (2008); the dormant SotA pipeline is the same situation.

Implementation notes

Zero new code: author AchievementRules entries (SteamApiName, ProgressStat, ProgressStatGoal) over the 22 real stats in UserStatId via the existing UserStatRulesEditorWindow, validate with the existing Catnip Games/Validate/UserStatRules menu, and re-bake AchievementRulesDb.xml + UserStatRulesDb.xml, which the server loads at startup. The unlock evaluator (DetermineWhetherAchievementIsUnlocked) and the Steam push (SteamStatsReporter) already run. Ach_NpcKills_Level1..4 and the crafting tiers are already authored; this fills in the rest: the PlayerKills chain, JoinedParty, JoinedGuild, the eleven quest one-shots, and the two friendship achievements. Retroactivity is the locked policy: already-tracked counters grant instantly at launch.

client S (authoring)server none (bake)perf nonetests rules sweep: no dup names, goals ascend

S2 · Unlock toast

BuiltTier 1Size SServer: none

Built 5 August 2026. Crossing a goal now shows the center-screen banner, writes the chat line with the achievement name and its deed, plays a new unlock sound, and fires the level-up lights. Several at once take turns instead of replacing each other. At login the game picks up progress the server counted while the window was closed, and a veteran's backlog folds into one quiet chat line instead of a wall of banners. Names match the 2016 Steam catalog. Not on the test shard yet.

When you cross an achievement goal you get a center-screen banner, a chat line you can scroll back to, a sound, and the same lighting fanfare as a level-up. No new windows to learn; it uses the surfaces the game already celebrates with.

Seen in: WoW's toast plus chat line (2008); OSRS Combat Achievements task popup.

ACHIEVEMENT UNLOCKED
Kobold Slayer III
Defeat 1,000 kobolds.
System: Achievement unlocked: Kobold Slayer III.
Implementation notes

Detection is client-local: on each stat enqueue, compare pre and post values against the cached rules whose ProgressStat matches; on login, diff stored values against goals to catch server-written stats (crafting counters, later party credit). The banner-plus-chat combo is the battleground-victory pattern verbatim (QueuedMessageUI.ShowMessage + AddSystemMessageToChatLog); audio is a new named one-shot beside SkillLearned; lighting reuses the level-up mode. Strings live in a new AchievementStrings LocString class. Risk handled: a veteran's first login after S1 could queue a toast wall; past N unlocks the login diff collapses to one summary line.

client Sserver noneperf O(rules) per enqueue, cachedtests crossing detector: below-to-above, at-goal, load-diff

S3 · Boss last-words deed flags

Tier 1Size MServer: none (data)

Around sixty bosses already have a dying-words script with empty hands. This fills each one in, so the game permanently remembers you were there when the boss fell. Those memories become the tickets you hand the trophy quartermaster later.

Seen in: FFXIV's Jonathas, whose whole loop rests on deeds recorded when they happen; SotA's own Frost Giant chain is the local proof.

Implementation notes

Pure ConvoBuilder data. The dying-words machinery is universal and idle: roughly sixty boss conversations carry an ONDEATH block with flavor responses and no actions. Add one flag action per boss (g_slain_<bossid>, ids from the S10 registry) following the live Frost Giant example, which also opens a journal entry and awards virtue. The hard caveat this card respects: ONDEATH fires by proximity on every client near the corpse, so its meaning is "was present at the kill". Killer-attributed counting is S16's job, not this card's. Batch the ConvoBuilder edits and verify the exports diff clean.

client none (data)server noneperf nonetests export sweep: every registry boss has a unique flag

S4 · Town discovery achievements

BuiltTier 1Size MServer: none

Built 13 August 2026. Twenty-four towns now have an Explorer achievement: find every landmark in town, earn the town's deed. It arrives the moment you find the last one rather than at your next login. Owl's Head and Braemar keep the achievements they already had. Thirteen smaller towns quietly count your landmarks but have no deed yet, because once you set aside the town gates and the quest markers they have one or two things worth finding, and that is a landmark problem to fix before it is an achievement to award. Not on the test shard yet.

Owl's Head and Braemar already have this: find every landmark in town, earn the town's achievement. This extends the same machinery to the famous towns of Novia, one achievement per town.

Seen in: OSRS Achievement Diaries' region mastery; WoW exploration achievements.

Implementation notes

The machinery is fully wired: DiscoverableLocationManager carries an achievement name, finds its rules, and reports discovery counts, with editor validation that the goal equals the number of placed landmarks. Per town: one new UserStatId value (next free is 29), one stat rule, one achievement rule, and landmark trigger placement in the scene. Enum edits propagate through the shared-code mirror sync. The first batch stays modest, eight to twelve towns, because the flat enum is still the ceiling; full 445-scene breadth waits for S7's string keys. The real cost is the designer pass per town, not code.

client M (scene placement)server enum rebuildperf existing trigger costtests goal-equals-landmark-count sweep

S5 · Steam curation pass

Tier 1Size SServer: none

A tidy flagship set of SotA achievements on Steam, with proper icons, hidden flags on story spoilers, and progress bars on the counters. Your Steam profile finally shows what you have done in Novia.

Seen in: the Steamworks achievement feature set; the 100-achievement default cap before the profile-features threshold.

Implementation notes

The app sits under Steam's default 100-achievement cap until it crosses the profile-features threshold, so this pass curates the flagship subset: the S1 wave plus the best of the S9 chains. Each achievement needs an achieved icon and a grayed unachieved icon (uploaded at 256, shown at 64); template-generate the pairs per category with a tier band, or this card stops being small. Counters bind as Steam progress stats so profile pages show progress bars from the pushes the reporter already makes. Hidden flags go on the eleven quest one-shots. Names already published, like Ach_NpcKills_Level1..4, are frozen forever.

client noneserver noneperf nonetests published-name-exists-in-bake sweep

Tier 2 · Core build-out

S6 · The Achievements journal

BuiltTier 2Size LServer: none

Built 13 August 2026. The achievements the game has been counting now have a room to be read in: a tab on the character sheet, and a full window of their own from the chat command. Everything is grouped by category with a bar showing how far along you are, and the tiered chains fold into one line each, naming the highest rung you have earned and running the bar to the next one. Earned dates start from now; ones you finished earlier show the mark without a date until the server keeps the record itself. Not on the test shard yet.

A new Achievements tab on the character sheet: every achievement grouped by category, a progress bar for each, the ones you have earned with their dates, and the ones still waiting. This is the room where every other card becomes visible.

Seen in: WoW's achievement pane; GW2's achievement panel.

Character Sheet
CharacterStatsProgressionPetTitlesAchievements
Achievement points: 640 · Next milestone at 1,000
Combat
Bosses
Crafting
Exploration
Fishing
Taming
Quests
Social
Housing
Legacy
Kobold Slayer III
Defeat 1,000 kobolds.
613 / 1,000
Wolf Stalker
Defeat 100 wolves.
100 / 100Unlocked 3 Aug 2026
Dragon Slayer I
Defeat 10 dragons.
7 / 10
Skeleton Slayer IV
Defeat 10,000 skeletons.
1,204 / 10,000
Recent: Wolf Stalker · Braemar Explorer · Trophy Catch(•) This character  ( ) All characters
Implementation notes

A new tab id in the character sheet tab registry, built on the Titles window, model, and bridge triple. Data is already client-resident: the stats dictionary loaded at login, joined against the cached achievement rules; no new server operation. The model is pure logic and test-friendly: category grouping, chain rollup (show the highest earned rung plus the next goal), progress fractions, earned sort. The category rail seeds from rule metadata until S7 makes it authored data. The footer scope toggle is the S14 stance made visible: counters are per-character and switchable, the unlock badge and date are account-wide either way. The points header row arrives with S23; the Legacy rail renders only once S24 grants something. Known UI trap: long achievement names must not clip; test at maximum lengths.

client Lserver noneperf virtualize past 100 rowstests model: grouping, rollup, progress math

S7 · Data-driven achievement definitions

BuiltTier 2Size XLcatalog + one op group

Built 12 August 2026. Achievements no longer have to fit inside a fixed list of twenty-eight counters. The game now keeps a second set of counters named by text, authored as data beside the old ones, so adding an achievement is an entry in a file rather than a code change. The counters the game already had are untouched and nothing had to be converted. Not on the test shard yet.

Today every new counter needs a programmer to edit an enum on both client and server. This card moves the whole catalog to designer-authored data, so a new achievement is a data entry, not a code change. It is the single piece of infrastructure most later cards stand on.

Seen in: WoW's statistics-first architecture; GW2's achievement-native content pipeline.

Implementation notes

The flat UserStatId enum is the ceiling; this card escapes it with string-keyed stats plus a catalog asset. Storage: a second dictionary (Stats2, string keys) beside the enum-keyed one on the account record; the keyed-map precedent already exists in the tracked-stats record's per-recipe usage counts. Rules: generalize the stat-rule and achievement-rule contracts to string keys; a new catalog ScriptableObject adds categories, display strings, points (S23), and reward references (S20), baked into the server reports like the existing rules. Validation keeps the same anti-cheat knobs, and every new counting stat defaults to server-only. One new paged request pair loads the string-keyed stats; the map-exploration feature from July is the copy-exactly template for the op group, including the dispatch-chain wiring the gates enforce and dual registration in both server project files. Enum stats stay forever (published Steam names reference them); new content authors against string keys only.

client Lserver XL: contracts, cache, op, bakeperf catalog is a startup cachetests catalog validation + rule enforcement + pagerDB one field, ledger entry

S8 · Creature-family kill counters

BuiltTier 2Size Lmapping bake + loop emit

Built 12 August 2026. Kills are now counted per creature family and per named boss, and the count goes to everyone in the party rather than whoever struck last. The server does the counting from its own record of the fight. 1,422 creatures are mapped across 58 families. Not on the test shard yet.

Not just "kills" but kills of dragons, of kobolds, of skeletons. Sixty-six creature families each get their own lifetime counter, and the tiered ladders hang off every one of them.

Seen in: GW2 slayer achievements per family; FFXIV's hunting log tiers.

Implementation notes

The family source of truth is the creature-audit bake (1,546 creatures, 66 families, refreshed with the audit's own procedure), not the unreliable filename convention. A new baked mapping from creature prefab to family id loads server-side beside the NPC reports, leaving the generated NPC contract untouched. Counting is server-authoritative only: inside the party-credit loop (S16), resolve the slain creature's prefab to its family and increment Kills.Family.<id> on the string-keyed store, marked server-only so no client can ever emit one. Named bosses get per-boss keys from the S10 registry the same way. The journal renders family rows from the catalog with the audit's display names.

client S (rows)server M: bake + emitperf one lookup per party member per killtests mapping completeness + family resolutionDB rides S7, ledger note

S9 · Tiered chains: 10 / 100 / 1,000 / 10,000

BuiltTier 2Size SServer: none

Built 12 August 2026. Every creature family large enough to carry one now has a four-rung ladder at 10, 100, 1,000 and 10,000, and smaller families carry a shorter ladder so no line has a rung nobody could reach. 248 achievements in all, including one for each of the 84 bosses. Ones you earn while fighting are announced at your next login, the same way the crafting counters already work. Not on the test shard yet.

Four rungs for every counter that deserves them. The first rung falls in an evening; the last one is a years-long flag planted on your account.

Seen in: WoW's honorable-kill chain (100 to 250,000); OSRS kill-count tasks; the genre's canonical 5x-to-10x curve.

Implementation notes

Pure data over S1 today and S8 as it lands: one achievement rule per rung per counter. The shipped Steam goals stay frozen exactly as published (10/100/1,000/5,000); a fifth rung at 10,000 completes the owner's canonical curve, and all new chains author at 10/100/1,000/10,000 from the start. The freeze-at-earn rule is structural: a rung once earned is never revoked or re-goaled, and curve changes only ever add rungs. Sample chain names, rung by rung: Wolf Hunter, Wolf Stalker, Wolf Slayer, Scourge of Wolves.

client S (data)server noneperf nonetests ascending-goal + canonical-curve sweep

S10 · Curated boss registry

BuiltTier 2Size Mregistry bake

Built 12 August 2026. There is now one hand-checked list of every named boss in the game, 84 of them. Spotting a boss used to go by a naming convention in the files, which missed the Frost Giant along with all eight Cabalists. A boss that turns up in more than one place counts as one boss. Not on the test shard yet.

One authoritative, hand-checked list of every boss in the game: the 76 flagged ones, plus the famous ones the data forgot, like the Frost Giant, the eight Cabalists, Ribbit the Frog King, and Fnyr. Every boss feature in this proposal reads from this one list.

Seen in: the boss list behind OSRS Combat Achievements; WoW's encounter journal as the single boss key space.

Implementation notes

The filename convention is provably unreliable: it misses the game's most famous boss. The registry seeds from the creature-audit bake's 76 boss-flagged creatures plus the roughly 25 named exceptions the content research cataloged, as a client asset plus a server report bake. Each row: boss id, its prefab variants, display name, family, tier, a hand-curated super-boss flag, and an announcement string for the super-boss set (Ancient dragons, the Elemental Lords, the Spawn of Pele, the player-dungeon trio, the Frost Giant, the Cabalists). Consumers: S3 flag ids, S8 per-boss counters, S11 trophy descriptors, S18 announcements, S19 celebrations. Editor validation: no duplicate prefabs across bosses, every super-boss has its announcement string, every conversation boss has its S3 flag. The real cost is curation, about a hundred rows hand-verified.

client S (asset)server S (bake)perf dictionary lookup per killtests registry validation suite

S11 · The trophy quartermaster

Tier 2Size LServer: none new

A quartermaster who deals in proof. Bring the memory of a boss kill and receive a mounted trophy for your wall, once per boss, never tradeable. Bring your achievement points and spend the certificates they earn on a growing catalog. One NPC, two reasons to visit for the rest of the game's life.

Seen in: FFXIV's Jonathas certificates (patch 4.1); UO bulk order deed turn-ins; OSRS diary taskmasters.

Quartermaster Aldous
You were there
"You were there when the great troll fell. That is worth remembering. Take this."
Mounted Troll (trophy, cannot be traded)
Certificates: 121 per 50 points
Wyvern Banner2 certificates
Hall Pedestal4 certificates
Implementation notes

Loop one, deed to trophy, generalizes the shipped Wymond and Hisa chain: an S3 presence flag gates a one-time reward bundle on the conversation, once ever, server-validated through the existing exchange transaction with the standing anti-farm key. Trophy items carry the no-trade flag with no packaged-for-trade escape; the community asked for exactly this. The art largely exists: sixty trophy decorations map straight onto the boss roster, and Sobek's trophy proves the named-boss case; bosses without bespoke art reuse the family trophy with an engraved description line. Loop two, points to certificates, depends on S23: a certificate currency claimable at a fixed rate per point milestone, spent through required-item descriptors on a catalog restocked each release. Idempotency and pending-grant patterns come from the title-redeem and titles-inbox precedents. Placement: a named quartermaster in a capital, with Wymond and Hisa kept as the Jotungrund outpost. Content volume (about a hundred descriptors) is generated from the registry, not hand-built.

client M (authoring)server none newperf per-interactiontests descriptor sweep: once-ever + no-trade on every deed bundle

S12 · Milestone titles

BuiltTier 2Size MServer: minimal

Of the 219 titles in the game, only two are earned by killing anything. This card puts titles at the top rungs of achievement chains, so what you wear over your head says what you have done, not just what you pledged.

Built 13 August 2026. Thirty-three new titles, granted by the server. Thirty-two come from the creature ladders at ten thousand kills, so ten thousand dragons makes you Dragon Nemesis and ten thousand wolves makes you Wolf Nemesis; the thirty-third is Legendary Crafter, at five thousand crafting actions created and enhanced combined. Titles your account already qualified for arrive at your next login rather than at your next kill, quietly, without a wall of banners. Which title a chain grants is not authored anywhere: it is read from the achievement's own name, so the title and the achievement can never drift apart. The total-kill and player-kill ladders are deliberately not in this wave, because those two counters are still sent by the client and taken on trust, and a forgeable badge worn over your head is worse than a forgeable one on a profile page. Not on the test shard yet.

Seen in: UO's fame and karma title matrix (1997), the ur-pattern; OSRS diary and combat rewards.

Implementation notes

Both grant paths exist: a conversation-granted title item (twelve quest-title assets are the pattern, Giant Killer the worked example) or a direct server grant once S20 lands, both idempotent through the existing title store. New titles extend the title enum past 219 with the mirror-sync step batched. The first wave rides the S1 and S9 chains: top rungs of the kill, crafting, and PvP ladders, then per-family top rungs as S8 lands. The grandmaster-a-tree title set already covers skill mastery and is deliberately not duplicated. Sample titles: Scourge of Wolves, Slayer of the Ancient Red Dragon, Master Provisioner.

client S (items)server S (enum + grants)perf nonetests title-item sweep: enum value exists, unisex set

S13 · Breadth stats: professions and collections

BuiltTier 2Size M-LServer: mixed

Built 13 August 2026. The journal now covers the evenings, not just the fighting. Six new categories: Agriculture, Gathering, Taming, Fishing, Crafting and Games, plus how much of the world you have seen and how many emotes you have learned. Two of them are collections you can finish. Thirty kinds of fish, twenty four from water and six from lava, each with a deed for your first one and a chain that ends at the whole roster. One hundred and seventy seven tameable creatures across fourteen families, counted the same way. Every craft has its own chain too, from cooking to blacksmithing to obsidian forging, and winning a game of chess, checkers or backgammon against another player counts. Beating the computer does not, and neither does a game the other player resigned or walked away from. Places and emotes update while you play; the rest are counted by the server and announced at your next login. Not on the test shard yet.

Fishing, taming, farming, mining, cooking, exploring, emote collecting: everything you spend your evenings on starts leaving a record. This is the card that makes the journal feel like it covers the whole game instead of just combat.

Seen in: EQ2's collections and house-trophy rewards; GW2's collections-as-achievements; WoW's statistics tab.

Implementation notes

An emit-point inventory across the game's systems: fish caught (with species keys for the 25 trophy species and 6 lava species), creatures tamed (177 tameable), crops planted and harvested, nodes gathered, recipes learned (per-recipe craft counts already exist server-side in the tracked-stats record; surface them, do not re-count), scenes visited, emotes learned (321 exist), tavern games played. Server-side activities emit at their server transactions, as crafting already does; client-side-only activities emit through the rules-capped client queue, accepting client authority for non-competitive counters. Three or four headliners can ship early on free enum slots; the full per-species breadth is S7 string keys. Collection completions (all trophy fish species) evaluate as composite rules, which the pipeline already supports. Land it one profession at a time so each change stays small and reviewable.

client M (emit points)server M (emit points)perf one enqueue per event, batchedtests species-key resolution + composite mathDB rides S7

S14 · Per-character stats, account-wide unlocks

Tier 2Size Lnew collection + ledger

Your account earns the achievement once, and it stays earned. Each character still keeps its own numbers, so your fisherman's ledger and your dragon hunter's ledger stay distinct and both are browsable. Nothing is deleted to make the account view work.

Seen in: ESO Update 33 (2022), whose backlash was about deleting per-character records; WoW 5.0.4 (2012), the smoother path. The scope decision is locked: both records kept.

Implementation notes

A new per-character record mirrors the account record's shape, following the standing record-class recipe (descriptor, character ownership so it wipes with character deletion, bot cleanup TTL, registration in both server project files). The server write path dual-writes: the character row is the ledger, the account row feeds the unlock evaluator, with per-rule merge semantics implemented once (delta stats increment both; highest-value stats take the max). Unlock records live on the account only; the journal offers an account view and a this-character view. Sequenced after S21 so the dual writes are atomic increments rather than two racy dictionary replaces.

client S (scope toggle)server L: record, dual-write, mergeperf two targeted writes per flush, batchedtests merge semantics per update methodDB new collection, ledger entry

S15 · Steam full sync, server-granted

Tier 2Size Mreporter extension

The full catalog lands on Steam, and every grant comes from the server, so an achievement on a SotA profile means it actually happened.

Seen in: Steamworks server-side game-server stats, the client-tamper-proof grant path; deliberate rare-achievement authoring for the rarest-achievement showcase.

Implementation notes

Flip published stat configurations to server-set on the partner site so no client can write them; verify Steam preserves already-earned achievements before flipping, which is this card's one real risk. The existing background reporter extends to the string-keyed rules and larger batches. Expansion past the 100-achievement default waits on the profile-features threshold; icon volume rides the S5 template pipeline. Author two or three deliberately rare but fair achievements (top rungs, super-boss firsts) so SotA appears in veterans' rarest-achievement showcases, which is free acquisition marketing.

client noneserver M: reporter + config auditperf background job, batch-size knobtests dry-run diff of computed grants vs Steam state

S23 · Achievement points with frozen thresholds

Tier 2Size Mcached total + ledger

Every achievement carries a point value sized to its difficulty, and your lifetime total unlocks milestones on its own: certificates to spend at the quartermaster, and a number that says how much of Novia you have seen and done. Milestones, once reached, stay reached, no matter how the catalog grows.

Seen in: OSRS's 2023 points rework (any task mix reaches a threshold), with its threshold-revocation flaw deliberately avoided; GW2's milestone chests; FFXIV's certificates at one per fifty points.

Implementation notes

Promoted from the rejected list for one structural reason: the quartermaster's certificate loop has nothing to convert without a total. Points live in the S7 catalog, one to six per achievement by difficulty, held to that band by the catalog validator so inflation cannot creep. The lifetime total derives from S21 unlock records using the points recorded at earn time, cached on the account record and recomputable at any moment. Milestone thresholds live in the catalog; crossing one is itself an unlock, with a toast and a record, and mints certificate claims. Thresholds reached are never revoked when the catalog grows, which is the exact failure OSRS shipped and still carries. Legacy entries are worth zero points by definition and cannot distort the economy.

client S (header, milestones)server M: total upkeep + milestone pathperf O(1) per unlocktests total math, threshold crossing, frozen-at-earnDB cached field, ledger entry

S24 · The Legacy category

Tier 2Size Mone-shot server pass

Twelve years of telethons, seasonal events, pledge history, and one-time deeds already live on accounts as titles and flags. This card gives them a home: a journal category worth zero points, invisible until you have one, where the game's history is worn by the people who were there.

Seen in: WoW's Feats of Strength, the zero-point hidden category granted retroactively from records.

Implementation notes

The data exists: the 219-entry title enum is mostly pledge tiers, subscription rewards, contest wins, and the login-reward chain, and knowledge flags hold event participation. Legacy achievements are catalog entries flagged legacy, zero points, hidden until earned; the journal renders the category only when at least one is owned, and the Steam mirror uses hidden flags. The retro grant is one server-side batch pass, never login-lazy (the ESO trap): map owned titles and selected flags to unlock records, dated at the pass date because original dates are unrecoverable, and the page says so honestly. The pass runs through the standing database-tool recipe and is idempotent because unlock writes are transition-guarded. No gameplay rewards attach to legacy entries; recognition only. Sample entry: "Was present for the Fall 2019 telethon."

client S (hidden rendering)server M: mapping + one-shot passperf one offline batchtests mapping fixture + pass idempotencyDB unlock records only, ledger entry

Tier 3 · Server-backed: truth, the world stage, and payouts

S16 · Party-shared kill credit

Tier 3Size M-LXP-loop emit + ledger

When your party brings down a troll, everyone in the fight gets the kill on their record, not just whoever swung last. It is the same rule the game already uses for experience, applied to achievements.

Seen in: WoW's party and raid boss credit, the genre norm since 2008; GW2's participation-threshold credit.

Implementation notes

Exactly one insertion point, by design: the per-party-member experience award loop, where the server already holds the slain creature's identity, every credited player, and the scene. One stat write beside the existing per-member experience write credits family counters, per-boss counters, and a new server-authoritative shared-kill counter, all marked server-only so no client can ever emit them. Everything upstream already gates it: the proximity range on party credit, the party-size cap and duplicate-actor checks, the anti-exploit joinability test, and damage-share target selection with its five-minute decay. The legacy client-sent kill counter stays untouched so the shipped Steam chains keep their exact meaning; the key spaces stay disjoint so double credit is impossible. Solo players flow through the same loop, so this is also the server-authoritative solo path. Trust note, stated plainly: the party list is client-sent actor ids resolved server-side, the same trust that already pays out experience; achievements inherit that threat model and make it no worse.

client noneserver M (L with S8 in the same change)perf O(party) per kill, batched writestests bot-client fan-out integration + credit unit testDB write behavior, ledger entry
Oil painting of a medieval town square at night: fireworks over rooftops, a crowd raising tankards around a bonfire
The night a great boss fell. Everyone online shares in the celebration: the announcement carries the news, and the buff carries the mood.

S17 · The World Events channel

BuiltTier 3Size Mpublish helper

Built 13 August 2026. The World Events channel is in: a global channel that is always on while you play, carrying the announcements the world makes. Unticking its box in chat settings hides the lines rather than leaving the channel. Not on the test shard yet.

A new chat channel that carries the news of the realm: boss falls, celebrations, and in time sieges and seasonal events. It is a channel like any other, with its own color and its own tab checkbox, except only the world itself gets to speak on it.

Seen in: RS3's server-wide announcements with player-toggleable scopes; OSRS clan broadcast settings, the genre's best-configured matrix.

Chat
MainCombatUniverseWorld Events
World Events: The Spider Queen has fallen in Spindelskog to Aldric, Mirella, and Tomas.
World Events: The Frost Giant of Jotungrund has been slain by Selene and her party. All of New Britannia gains Hunter's Fortune for 60 minutes.
World Events: Aldric completed Scourge of Kobolds: 10,000 kobolds defeated.
World Events: Mirella landed a record Dunkleosteus while lava fishing.
World Events: A cabalist siege has begun at Aerie.
Receive-only channelFilterable per tab
Implementation notes

Decided up front: this is a general world-event bus, not an achievements feed. Achievements and boss falls are the first tenant; the siege line in the mockup is the second, the roadmap's live-events idea publishing into the same channel with no new plumbing. Zero new network operations: the client subscribes to a new global transport channel through a small always-subscribed manager (the noble-chat pattern, so unticking the display box never stops delivery), and the server publishes synthesized channel messages exactly the way the moderation system already synthesizes them, cross-shard on the same carrier as universe chat. The display side is one new chat type on the only clean free bit, with the full checklist the chat system demands: a prefix label, a color entry (a missing color case spams errors), the unblockable list, a filter-grid row so the checkbox works and the bit survives saving, and strings through the localization pattern. The server rejects client sends to the channel by name, making it receive-only like the server and admin lines. One budget note: each always-on channel spends one of a peer's 32 channel slots, and the fan-out encodes each line once per payload, not once per recipient.

client M (channel + chat surface)server S (publish + send rejection)perf one encode per line, existing dispatchtests filter-row round-trip + line formatter

S18 · Boss-kill world announcements

BuiltTier 3Size Mtrigger + cooldowns

Built 13 August 2026. The fall of any of twenty-one landmark bosses, the Frost Giant, the eight Cabalists, the eight Ancient dragons and the four Elemental Lords, is announced to everyone online the moment it happens. Not on the test shard yet.

When an Ancient dragon or an Elemental Lord falls, a line goes out to every player online, on every shard: who, what, and where. On a shard our size that line is readable news, not spam.

Seen in: RS3 server-wide announcements; WoW realm-first feats; the small-population readability argument runs the other way for SotA, in its favor.

Implementation notes

Detection is server-side and free: the experience award path already resolves the slain creature's identity, so a registry lookup on the super-boss flag is the entire trigger; there is no client "boss died" message to trust or invent. The announcement publishes structured arguments (boss, killer, party size, scene) on the World Events channel and the client formats the line, so it localizes later. Attribution names the crediting character plus companion count; naming every member would walk into the message-size ceiling that once broke the friends roster, so it does not. Spam control is layered: only the hand-curated super-boss tier announces, and a per-boss cooldown (hours, tuned conservative first) keeps farmed bosses from repeating; the tab checkbox is each player's own volume knob. The killing party also gets the scene-local banner through the battleground-victory pattern. Sample line: "The Ancient Red Dragon has fallen to Aldous and four companions in The Rise."

client S (formatter + banner)server M (trigger, cooldown, publish)perf one lookup per kill; publish only on super-bosstests cooldown unit + formatter grammar at long namesDB cooldown timestamps, ledger entry

S19 · Celebration events: the shard-wide buff

BuiltTier 3Size Lnew collection + ledger

Built 13 August 2026. When one of those bosses falls, everyone online gains ten percent more adventurer experience for an hour. A second fall while the hour runs refreshes the clock rather than stacking it. The buff bar chip is not in yet. Not on the test shard yet.

When a landmark boss falls, the whole realm celebrates: every player online, in every scene, gets a timed bonus, and anyone logging in during the window joins it. One hunter's triumph becomes everyone's good hour, which makes the boss hunter a public benefactor.

Seen in: Guild Wars 1's Favor of the Gods, game-wide benefit earned by individual deeds, the strongest precedent in the genre; WoW Classic's dragon-head ceremony for the gathering instinct.

Implementation notes

The delivery rail is the scene-bonus room-property pattern, which already pushes server-driven, database-backed, time-limited state to every client in every scene, survives scene transitions, and reaches late joiners free of charge; never the legacy buff-everyone RPC, whose cost is quadratic in players. A small celebrations collection holds the active window (source boss, slayer, stat, magnitude, expiry); the super-boss trigger writes it and invokes the property push immediately so the celebration starts in seconds rather than at the next ten-minute poll. Each client applies the buff locally through the standard buff call, which is the correct authority model because combat effects are target-authoritative by design; it reapplies on scene load while unexpired and drops at expiry. The buff itself stays modest and non-combat (experience or gathering rate) to keep PvP undistorted, authored per boss in the registry. Policy under contention: two super-bosses in one window refresh the timer rather than stack. The channel announces the start and, quietly, the end. Sample line: "The realm celebrates the fall of the Ancient Red Dragon. Adventurer experience is raised for the next hour."

client M (manager + buff chip)server M (collection, trigger, push)perf rides an existing all-rooms pass + one immediate pushtests buff lifecycle across scene load + trigger TTL unitDB new collection + TTL index, ledger entry

S20 · Reward-on-unlock hooks

BuiltTier 3Size Lgrant path + ledger

Some achievements should hand you something the moment you earn them: the title at the top of a chain, a trophy, a bundle. This card gives the catalog a rewards column, so designers attach rewards as data and the server delivers them exactly once.

Built 27 August 2026. The game can now hand you something for an achievement, and only ever once. That turned out to be a harder promise than it sounds. A title is safe to grant twice because owning one is permanent, so the game can simply ask whether you have it. A trophy is not: you can place it on a wall, put it in the bank, or destroy it, so the fact that you are not carrying one proves nothing, and a rule that handed out a replacement whenever it could not find yours would refill the bank of everyone who ever redecorated. So the record of the handover lives with the delivery itself. A token is written into the storage the items land in, which means a server that stops halfway through can tell the difference between a lost receipt and a lost trophy, and finish the job without doing it twice. Nothing is authored yet, so no achievement pays out anything today. Not on the test shard yet.

Seen in: GW2's milestone chests; OSRS reward tiers; FFXIV achievement items.

Implementation notes

The catalog gains optional reward references per achievement: a title, a loot bundle, or certificate points. Unlock evaluation, which today runs only inside the Steam reporter, moves to the write path: after each server-side stat store, evaluate just the rules watching the changed stats, indexed at cache build so this is a lookup rather than a scan. Exactly-once delivery hangs on the S21 unlock record: the grant fires only on the recorded transition, inside the same store operation, which is why this card must not ship before S21. Title grants use the existing idempotent title store; item grants deposit to the reward bank through the pledge-redemption precedent, no-trade flags applied, every grant written to the item transaction log. Offline earners get their reward server-side regardless; S22 delivers the notification.

client S (reward column)server L (evaluation-at-write + grants)perf indexed rule lookup per changed stattests transition-only granting: no regrant, no non-crossing grantDB write-path behavior, ledger entry

S21 · Unlock timestamps, history, atomic counters

BuiltTier 3Size Mwrite-path rework + ledger

Your journal shows the day you earned each achievement and the goal as it stood that day. Underneath, the counters move to arithmetic that never loses a kill when you play on two characters in one evening.

Built 27 August 2026. Achievements start keeping a record. Until now the game worked out what you had earned every time you asked, which is why the journal could not show a date, and why retuning a ladder quietly moved what you had already done. Each record now freezes the goal as it stood the day you earned it. The same pass fixed something nobody had reported: the counters were saved by rewriting the whole set from the snapshot loaded at login, so two of your characters playing at the same time each saved a total that had never seen the other one, and whichever saved last won. Counters now add up. Not on the test shard yet.

Seen in: WoW's earned dates; the OSRS threshold-revocation backlash, the reason goals are frozen at earn time.

Implementation notes

Two changes to the account record. First, unlock records: each unlock stores its name, timestamp, the goal as it stood, and the points as they stood, which turns freeze-at-earn from a promise into a data structure and gives S20 and S23 their idempotency backbone; the write is transition-guarded so exactly one writer ever records it. Second, atomic counters: the whole-dictionary replace, where the last writer wins across two characters on one account, becomes per-stat increments for delta stats and per-stat maximums for highest-value stats, composed into one update per flush. The Steam reporter's wake-up versioning stays intact, pinned by a server test. This card deliberately precedes the dual-write scope card and the party fan-out card: both multiply concurrent writers and must land on safe arithmetic.

client S (dates in journal)server M (write-path rework)perf increments beat whole-dictionary replacestests concurrent-writer conservation + transition-guard uniquenessDB new field + write behavior, ledger entry

S22 · Offline catch-up

Tier 3Size S-Mannouncement rows

If your account earns an achievement while you are offline, or on another character, the toast is waiting for you at next login instead of silently missing.

Seen in: WoW's login-time grants after the 2008 retro pass; Steam's own offline achievement queue.

Implementation notes

The rail is the durable per-user announcement record the game already polls every 75 seconds: the unlock path writes a row with a new announcement kind, and the client listener resolves it against the catalog and fires the same toast path as a live unlock, de-duplicating against anything already shown this session. Both sides of the new kind land together, because the client logs errors on unknown kinds. This supersedes the login-diff heuristic from S2 as the authoritative catch-up; the diff stays as a belt-and-suspenders check.

client S (listener case)server S (producer + kind)perf rides the existing poll; rows expiretests handler resolution + producer conditionsDB rows in the existing collection, ledger note

Considered and rejected

Two candidates were promoted out of this list on the strength of the genre research: achievement points became S23 once it was clear the quartermaster's certificate loop has nothing to convert without a total, and the legacy category became S24. The rest stay rejected.

Section 4

The composed surface

Oil painting of five adventurers standing over an enormous slain spider in a torchlit cavern, pale egg sacs glowing behind them
A party brings down the Spider Queen. Today, only the killing blow counts for anything, and nobody outside 40 meters hears about it.

The danger with twenty-four proposals is twenty-four widgets. The composition rule: one journal (a character sheet tab, S6), one toast surface (the queued-message banner the game already owns, S2), one channel (World Events, S17), and one buff chip on the bar the player already reads (S19). Here is the whole system on screen at once, the moment a party's kobold hunt crosses a rung while the realm celebrates a boss fall:

New Britannia 
EHunter's Fortune 54:12+2 more
ACHIEVEMENT UNLOCKED  A
Kobold Slayer III
Defeat 1,000 kobolds.
C · Achievements
Combat
Bosses
Crafting
Legacy
B · journal body
Kobold Slayer III
1,000 / 1,000Unlocked today
Wolf Slayer
377 / 1,000
G · Recent: Kobold Slayer III · Wolf Stalker     F · (•) This character ( ) All
MainCombatWorld EventsD
World Events: The Frost Giant of Jotungrund has been slain by Selene and her party. All of New Britannia gains Hunter's Fortune for 60 minutes.
System: Achievement unlocked: Kobold Slayer III.
Zones lettered for the anatomy table below
ZoneSurfaceCards
AUnlock and announcement toast banner: queued-message surface, fanfare, lighting cueS2, S18 Built
BAchievements journal body: category rail, chain rows, progress barsS6, S9, S13
CCharacter sheet tab strip with the new Achievements tab, points headerS6, S23
DWorld Events chat tab: boss lines, milestones, second-tenant eventsS17, S18 Built
EBuff bar carrying the celebration buff with its shard-wide timerS19 Built
FJournal footer scope toggle: per-character counters, account-wide unlocksS14
GRecent-unlocks strip, fed by recorded history and next-login catch-upS21, S22
Section 5

Sequencing

Five phases. Each ships player-visible value on its own and unblocks the next. The infrastructure ordering inside phase three is deliberate: definitions first, then atomic writes, then the dual-write scope model, so the write path is reworked once, on its final shape, before anything multiplies concurrent writers.

PhaseShipsThemeWhy this order
1S1, S2, S5, S3, S4, S9 first waveWake the machine: author over the 28 stats, toast, Steam curation, deed flags, town discoveryAll data and client-only work on existing rails; proves the pipeline end to end under real load before deeper investment, and ships a visible launch in weeks.
2S6, S10, S12 first titles, S24 rendering prepBuild the shelf: the journal, the boss registry, first milestone titlesEverything later needs a surface to appear on and a key space to hang from; S7's catalog design should be finalized against a real UI consuming it.
3S7, S21, S14, S23, S20, S11, S13, S12 completion, S24 passDepth and rewards: string-keyed definitions, atomic history, scope model, points, reward delivery, the quartermaster, breadth, the legacy passParty fan-out multiplies concurrent writers per kill and must land on atomic arithmetic; per-family counters need string keys; rewards need unlock records for exactly-once.
4S16, S8, S17, S22Server truth and the stage: party credit at the one sanctioned point, family counters riding it, the channel, durable catch-upAnnouncements and celebrations trigger from the server-side kill context and speak on the channel; neither exists before this phase.
5S18, S19, S15The world layer: super-boss announcements, shard-wide celebrations, full server-granted SteamHighest blast radius, lowest reversibility, deliberately last; everything beneath it is already independently valuable if this phase slips a release.
flowchart TD
  S7["S7 data-driven definitions"] --> S8["S8 family counters"]
  S7 --> S13["S13 breadth stats"]
  S7 --> S23["S23 points"]
  S21["S21 atomic history"] --> S14["S14 scope model"]
  S21 --> S20["S20 reward hooks"]
  S21 --> S16["S16 party credit"]
  S21 --> S22["S22 offline catch-up"]
  S16 --> S8
  S16 --> S18["S18 announcements"]
  S10["S10 boss registry"] --> S18
  S10 --> S11["S11 quartermaster"]
  S17["S17 World Events channel"] --> S18
  S18 --> S19["S19 celebrations"]
  S20 --> S11
  S20 --> S12["S12 milestone titles"]
  S23 --> S11
  S3["S3 deed flags"] --> S11
Section 6

Appendix

A1 · The first catalog: 115 achievements, 231 unlockables

The complete proposed first wave. Chains count as one row; the Tiers column carries the ladder, so the 115 rows unfold into 231 unlockables. Names and deeds are final-copy candidates and follow the plain-voice rules. The Trigger column shows the proposed stat key; rows marked exists ride a counter the game already tracks and grant retroactively at launch (13 rows). Steam marks the curated Steam subset (110, counting each chain's top tier). WE marks the deeds that post a World Events line when earned (35: every boss deed, every chain's 10,000 rung, and three marquee rarities).

Slayer chains · Boss deeds · Combat and PvP · Crafting and professions · Exploration · Fishing · Taming · Quests, story, and virtue · Social and community · Housing and decoration · Economy and collection

Slayer chains (18)

NameDeedTriggerTiersRewardSteamWE
Kobold Slayer I-IVDefeat 10,000 kobolds.Kills_Kobold10/100/1,000/10,000title
Skeleton Slayer I-IVDefeat 10,000 skeletons.Kills_Skeleton10/100/1,000/10,000title
Zombie Slayer I-IVDefeat 10,000 zombies.Kills_Zombie10/100/1,000/10,000title
Elf Slayer I-IVDefeat 10,000 elves.Kills_Elf10/100/1,000/10,000title
Satyr Slayer I-IVDefeat 10,000 satyrs.Kills_Satyr10/100/1,000/10,000title
Spider Slayer I-IVDefeat 10,000 spiders.Kills_Spider10/100/1,000/10,000title
Bear Hunter I-IVDefeat 10,000 bears.Kills_Bear10/100/1,000/10,000title
Wolf Hunter I-IVDefeat 10,000 wolves.Kills_Wolf10/100/1,000/10,000title
Bandit Hunter I-IVDefeat 10,000 bandits, thugs, and outlaws.Kills_Bandit10/100/1,000/10,000title
Dragon Slayer I-IVDefeat 10,000 dragons.Kills_Dragon10/100/1,000/10,000title
Troll Slayer I-IVDefeat 10,000 trolls.Kills_Troll10/100/1,000/10,000title
Lich Slayer I-IVDefeat 10,000 liches.Kills_Lich10/100/1,000/10,000title
Elemental Slayer I-IVDefeat 10,000 elementals.Kills_Elemental10/100/1,000/10,000title
Corpion Slayer I-IVDefeat 10,000 corpions.Kills_Corpion10/100/1,000/10,000title
Wyvern Slayer I-IVDefeat 10,000 wyverns.Kills_Wyvern10/100/1,000/10,000title
Ghost Slayer I-IVDefeat 10,000 ghosts.Kills_Ghost10/100/1,000/10,000title
Slime Slayer I-IVDefeat 10,000 slimes.Kills_Slime10/100/1,000/10,000title
Big Cat Hunter I-IVDefeat 10,000 big cats.Kills_BigCat10/100/1,000/10,000title

Boss deeds (14)

NameDeedTriggerTiersRewardSteamWE
Giant KillerDefeat the Frost Giant of Jotungrund.Slain_FrostGiant-title
Pele's BaneDefeat the Spawn of Pele.Slain_SpawnOfPele-token
QueenslayerDefeat the Spider Queen.Slain_SpiderQueen-token
Slayer of AncientsDefeat an Ancient dragon of any of the eight colors.Slain_AncientDragon-trophy
AetherslayerDefeat the Aether Dragon.Slain_AetherDragon-trophy
Machine BreakerDefeat a Gold, Bronze, or Blackened Clockwork Dragon.Slain_ClockworkDragon-trophy
Master of the ElementsDefeat Gael, Pyre, Wrauk, and Brign, the four Elemental Lords.Slain_ElementalLords` (composite)-title
Cabal BreakerDefeat all eight Cabalists: Avara, Corpus, Dolus, Fastus, Indigno, Nefario, Nefas, and Temna.Slain_Cabalists` (composite)-title
Deep ChampionDefeat Smalt Hraunkvika in a player dungeon.Slain_SmaltHraunkvika-title
TrollsbaneDefeat Mek the Unkillable.Slain_MekTheUnkillable-trophy
Nightmare's EndDefeat Your Worst Nightmare.Slain_WorstNightmare-trophy
Phoenix SlayerDefeat Riei Firefeather the Phoenix.Slain_RieiFirefeather-trophy
Sabertooth SlayerDefeat Smilodon Fatalis.Slain_SmilodonFatalis-trophy
Sobek SlayerDefeat the Spawn of Sobek.Slain_SpawnOfSobek-trophy

Combat and PvP (8)

NameDeedTriggerTiersRewardSteamWE
Monster Hunter I-IVDefeat 100,000 creatures.NpcKills exists100/1,000/10,000/100,000title
Avatar Slayer I-IVDefeat 10,000 other Avatars in PvP.PlayerKills exists10/100/1,000/10,000title
King KillerDefeat Lord British.Slain_LordBritish-title
PugilistDefeat the Courage Club challenger in a random encounter.Won_CourageClub-title
War TrophyWin a guild war.Won_GuildWar-trophy
King of the MountainWin a King of the Mountain event.Won_KingOfTheMountain-title
Master of the MazeWin a Master of the Maze event.Won_MasterOfTheMaze-title
Master of MayhemWin a Master of Mayhem event.Won_MasterOfMayhem-title

Crafting and professions (14)

NameDeedTriggerTiersRewardSteamWE
Maker I-IVCraft 10,000 items at crafting stations.CraftingCreatedItemCount exists10/100/1,000/10,000title
Enhancer I-IVMasterwork or enchant 10,000 items.CraftingModifiedItemCount exists10/100/1,000/10,000title
Artisan I-IVReach 25,000 total crafting actions, created and modified combined.CraftingTotal exists25/250/2,500/25,000title
Master BlacksmithReach Grandmaster in the Blacksmithing school.GM_Blacksmithing-title
Master CarpenterReach Grandmaster in the Carpentry school.GM_Carpentry-title
Master TailorReach Grandmaster in the Tailoring school.GM_Tailoring-title
Master AlchemistReach Grandmaster in the Alchemy school.GM_Alchemy-title
Master ChefReach Grandmaster in the Cooking school.GM_Cooking-title
Master SmelterReach Grandmaster in the Smelting school.GM_Smelting-title
Master TannerReach Grandmaster in the Tanning school.GM_Tanning-title
Master MillerReach Grandmaster in the Milling school.GM_Milling-title
Master GathererReach Grandmaster in Mining, Forestry, Foraging, and Field Dressing.GM_Gathering` (composite)-title
Grandmaster ArtificerReach Grandmaster in every crafting school.GM_AllProducer` (composite)-title
Recipe Collector I-IIILearn 1,000 crafting recipes.RecipesLearned10/100/1,000token

Exploration (12)

NameDeedTriggerTiersRewardSteamWE
Owl's Head ExplorerDiscover every landmark in Owl's Head.ExploreOwlsHead exists--
Braemar ExplorerDiscover every landmark in Braemar.ExploreBraemar exists--
Ardoris ExplorerDiscover every landmark in Ardoris.ExploreArdoris-token
Brittany ExplorerDiscover every landmark across Brittany and its districts.ExploreBrittany-token
Novia Wayfarer I-IVEnter 300 different scenes.ScenesVisited10/50/150/300title
Dungeon Delver I-IIIEnter all 59 dungeons of Novia.DungeonsEntered5/25/59title
Cartographer I-IIIFully clear the fog of war on 100 scene maps.MapsRevealed10/50/100token
Town Tourist I-IIIVisit 100 player-owned towns.TownsVisited10/50/100token
PilgrimVisit the shrine of every virtue across Novia.Visited_AllShrines` (composite)-token
Island HopperVisit Etceter, Xenos, Graff Island, and Elad's Lighthouse.Visited_Islands` (composite)-token
Northern LandfallSet foot in Mistrendur, Jotungrund, and Ulfheim.Visited_North` (composite)-token
Rise DelverReach the lowest level of The Rise.Visited_TheRiseDepths-token

Fishing (8)

NameDeedTriggerTiersRewardSteamWE
Angler I-IVCatch 10,000 fish.FishCaught10/100/1,000/10,000title
Master AnglerReach Grandmaster in the Fishing school.GM_Fishing-title
Freshwater CollectorCatch every freshwater trophy fish species.Species_Freshwater` (composite)-trophy
Saltwater CollectorCatch every saltwater trophy fish species.Species_Saltwater` (composite)-trophy
Fetid AnglerCatch every fetid-water trophy fish species.Species_Fetid` (composite)-trophy
Lava FisherCatch all six lava fish species: Ammonite, Coelacanth, Dunkleosteus, Ichthyosaurus, Mosasaurus, and Plesiosaurus.Species_Lava` (composite)-trophy
Grand AnglerCatch all 25 trophy fish species.Species_AllFish` (composite)-title+trophy
Trophy CatchLand a trophy-sized fish.Caught_TrophySize--

Taming (7)

NameDeedTriggerTiersRewardSteamWE
Tamer I-IVTame 1,000 creatures.TamesTotal10/50/250/1,000title
Master TamerReach Grandmaster in the Taming school.GM_Taming-title
Menagerie I-IIITame 100 different creature varieties.SpeciesTamed10/50/100token
Mount UpRide a mount.Rode_Mount--
Pack Leader I-IVYour pets land 10,000 killing blows.PetKills10/100/1,000/10,000token
Dragon TamerTame a juvenile dragon.Tamed_Dragon-title
Unicorn TamerTame a Light Unicorn, Dark Unicorn, or Nightmare.Tamed_Unicorn-token

Quests, story, and virtue (10)

NameDeedTriggerTiersRewardSteamWE
Soltown SaviorComplete the Soltown storyline.Quest_Soltown_* exists--
Peace in ArdorisComplete the Ardoris and Necropolis storyline.Quest_Ardo_Necro_* exists--
Path of CourageComplete the Path of Courage.Quest_PathCourage-title
Path of LoveComplete the Path of Love.Quest_PathLove-title
Path of TruthComplete the Path of Truth.Quest_PathTruth-title
Oracle's Confidant I-IVConfer with the Oracle on 365 different days.OracleVisits1/10/100/365title
CaregiverHelp Kinsey tend the refugees of Solace Bridge Outskirts.Earned_Caregiver-title
SageComplete the scholars' work in Blood River Outskirts.Earned_Sage-title
Virtue's ChampionRaise Courage, Love, and Truth to their highest ranks.Virtue_AllMax` (composite)-title
Refugee's FriendComplete the storylines of Solace Bridge Outskirts and Blood River Outskirts.Quest_Outskirts` (composite)-token

Social and community (9)

NameDeedTriggerTiersRewardSteamWE
Friend of the KingAdd Lord British to your friends list.FriendedLordBritish exists--
Friend of the ShadowAdd Darkstarr to your friends list.FriendedDarkstarr exists--
Well MetJoin a party with another Avatar.JoinedParty exists--
GuildmateJoin a guild.JoinedGuild exists--
Emote Collector I-IIILearn 150 emotes.EmotesLearned10/50/150token
Dance PartnerComplete a paired dance with another Avatar.Danced_Paired-token
Performer I-IIIPerform 1,000 songs on an instrument.SongsPerformed10/100/1,000title
AuthorWrite and publish a book on a printing press.Published_Book-token
Game NightPlay a tavern game with another Avatar.Played_TavernGame-token

Housing and decoration (8)

NameDeedTriggerTiersRewardSteamWE
HomeownerClaim a lot with a deed and place a home on it.Claimed_Lot-token
Decorator I-IVPlace 10,000 decorations.DecoPlaced10/100/1,000/10,000title
Trophy RoomDisplay 10 creature trophies in one home.TrophiesDisplayed-title
Dungeon BuilderBuild a player dungeon and open it to visitors.Built_Dungeon-token
AquaristStock a home fish tank with a fish you caught.Stocked_FishTank-token
Green Thumb I-IVHarvest 10,000 crops from your planting beds.CropsHarvested10/100/1,000/10,000title
Town FounderFound a player-owned town.Founded_Town-title
Prize HomePlace in an official decoration contest.Won_DecoContest-trophy

Economy and collection (7)

NameDeedTriggerTiersRewardSteamWE
Fortune I-IVHold 1,000,000 gold at one time.GoldHeld1,000/10,000/100,000/1,000,000title
Merchant I-IVSell 10,000 items through your player vendors.VendorSales10/100/1,000/10,000title
Treasure Hunter I-IVDig up 500 treasure caches.TreasuresDug1/10/100/500token
Salvager I-IVSalvage 10,000 items.ItemsSalvaged10/100/1,000/10,000token
Bone CollectorTurn in 100 bone chip collections in Jotungrund.BoneChips_TurnedIn-title
StablemasterCollect all five mounts.MountsOwned-token
Wyvern WallDisplay all eight colors of wyvern trophy in your home.TrophySet_Wyvern` (composite)-token

Grounding notes. All 18 slayer families exist in the creature-audit bake; sibling folders are counted together (the corpion and scorpion folders hold one creature line, so they are one chain), and the bandit chain counts only outlaw-type humans. Trophy rewards map to decoration assets that already exist: the dragon trophies in nine colors plus the clockwork set, the mounted troll, the eight wyverns, Phoenix, Nightmare, the sabertooth head, and Sobek; the Spider Queen and the Spawn of Pele have no trophy asset today, which is why those two deeds pay tokens and are first in line if the art budget opens. Composite deeds (Master of the Elements, Cabal Breaker, the fishing collectors, Pilgrim) use the composite-stat support the rules system already has. Dropped for a second wave: the twelve named Ancient Undead as a defeat-all composite, Ribbit the Frog King, the seasonal Krampus, and the conversation-scene Titans, which have no clean kill signal yet.

A2 · What already exists: the zero-invention ledger

This proposal needsAlready in the game
Stat tracking with server validationThe full UserStat pipeline: client queue, batched op, per-stat clamps and server-only flag, Mongo store, live since the Steam launch
Achievement definitions and unlock evaluationAchievementRules (stat plus goal), the unlock evaluator, the editor authoring window, build-time validation
Tiered kill achievementsAuthored at 10 / 100 / 1,000 / 5,000 and live on Steam today
Steam integrationA background reporter pushing stats and unlocks per account; per-stat Steam names throughout the rules schema
Boss-kill deed recordingThe conversation dying-words machinery, live on the Frost Giant, idle on roughly sixty other bosses
A trophy-vendor NPC loopWymond and Hisa in Jotungrund: flag-gated one-time bundle, repeatable token turn-in, server-side anti-farm
Trophy itemsSixty creature trophy decorations, eight mounted heads, 204 fish trophies, contest trophies
TitlesA 219-entry title enum, title items, idempotent grant and equip flows
Party kill context on the serverThe per-party-member experience loop, with creature identity, credited peers, and scene in scope
A global broadcast railThe chat-channel pub-sub with cross-shard dispatch; server-synthesized messages already exist for moderation
A shard-wide timed effect railThe scene-bonus room-property system: database-backed, timed, pushed to every scene, replayed to late joiners
Durable offline notificationThe per-user announcement records, polled at login and on a 75-second cycle
Creature families and boss dataThe creature-audit bake: 1,546 creatures, 66 families, 76 boss-flagged, refreshed by an existing procedure

A3 · Constraints every card honors

A4 · Test surface

The pure-logic pieces are all EditMode-testable without scene objects: the rules sweeps (unique names, ascending goals, canonical curves), the toast crossing detector, the journal model (grouping, rollup, progress math), the boss registry validation, the family-mapping completeness check, the points totals and threshold math, and the line formatters. Server-side, the existing rules-helper unit suite extends to string keys and merge semantics, the bot client already drives the experience-award op end to end for fan-out tests, and the write-path rework gets a concurrent-writer conservation test. The catalog validators run at export so bad data cannot reach a bake.

A5 · Sources

Genre: Ultima Online (fame and karma, bulk order deeds, community collections, Clean Up Britannia), WoW patch 3.0.2 and 5.0.4 documentation, GW2 achievement point rewards and the Wizard's Vault, FFXIV's Jonathas and achievement certificates, the ESO Update 33 account-wide migration and its feedback thread, OSRS Combat Achievements and Achievement Diaries and clan broadcast settings, RS3 server-wide announcements, EverQuest II achievements and collections, Guild Wars 1 Favor of the Gods, and the Steamworks stats and achievements documentation. Community: the wishlist threads on achievement titles and no-trade event trophies. Internal: the creature-audit bake, the dormant UserStat pipeline, the Frost Giant conversation chain, and the trophy decoration catalog; file-level anchors for every claim live in the companion planning document in the repository.

Prepared 2026-08-05 against the unity-6.5 migration branch. Companion markdown: docs/plans/2026-08-05-achievements-improvements-proposal.md. Twenty-four proposals: five quick wins, twelve core, seven server-backed, plus a first catalog of 115 achievements. Comments and votes below are read by the team.

Feedback

General comments

No account needed. Every proposal above also has its own Discussion box for talking about that one alone; this thread is for the plan as a whole. Comments are plain text, held to basic decency, and may be trimmed.

← All proposalsWork blog