Eight canon notes (Game Concept Overview, Mechanics Source Mapping, Combat System & Stat Scaling Design, Skill & Magic System, Medals & Honours System, Lore & World Building, Idle Fantasy Inspirations, Tech Stack & Architecture) as markdown, note title as H1, with source line citing the Joplin note ID. Joplin keeps status notes.
358 lines
18 KiB
Markdown
358 lines
18 KiB
Markdown
# Skara Brae — Medals & Honours System (Torn City-Inspired)
|
|
|
|
Source: Joplin note 4877acc671ed4bfcb0d6bf2c5323c94a, migrated 2026-10-03
|
|
|
|
> **Goal**: A deep, profile-defining achievement system in the spirit of **Torn City's Honours/Awards** — long-term goals, bragging rights, rare prestige, and a *few* meaningful permanent bonuses — layered onto every existing Skara Brae system (combat, adventure, crafting, magic, guild, economy, etc.).
|
|
|
|
Torn City's honours are a major long-term retention driver: hundreds of awards across every activity, displayed on the profile, some granting small permanent stat boosts. Skara Brae adapts this into a fantasy-flavoured, **three-tier** structure: **Medals** (tiered, category-based) → **Honours** (rare, prestigious, single awards) → **Titles** (displayed name prefixes/suffixes).
|
|
|
|
---
|
|
|
|
## 1. System Overview
|
|
|
|
| Layer | What It Is | How Earned | Reward Style |
|
|
|---|---|---|---|
|
|
| **Medals** | Tiered achievement badges, organized by category | Cumulative thresholds across gameplay | Mostly cosmetic; some grant small permanent bonus per tier |
|
|
| **Honours** | Rare, prestigious single awards for exceptional feats | Specific hard/rare accomplishments | Display + a few grant permanent bonus |
|
|
| **Titles** | Name prefixes/suffixes shown with character name | Unlocked by medals/honours | Cosmetic only |
|
|
| **Hall of Fame** | Leaderboards / rankings | Top N per category, season & all-time | Bragging rights + seasonal cosmetic |
|
|
|
|
**Design guardrail**: Permanent gameplay bonuses from honours/medals are **small, %-based, and collectively capped** (max ~+10% total across all sources) so this rewards dedication without creating unbridgeable gaps or pay-to-win pressure. The bulk of the value is **cosmetic prestige + long-term goals**.
|
|
|
|
---
|
|
|
|
## 2. Medals — Tiered Badges by Category
|
|
|
|
Each medal has **5 tiers**. Cross a threshold → earn that tier (and upgrade the badge on your profile). Tiers are cumulative counters tracked per character.
|
|
|
|
### Tier Progression (Fantasy-Flavoured)
|
|
|
|
| Tier | Name | Relative Rarity |
|
|
|---|---|---|
|
|
| T1 | **Copper** | Common — early game |
|
|
| T2 | **Silver** | Uncommon — mid game |
|
|
| T3 | **Gold** | Rare — dedicated players |
|
|
| T4 | **Platinum** | Very rare — long-term veterans |
|
|
| T5 | **Dragon** | Legendary — top-tier devotees |
|
|
|
|
### 2.1 Medal Categories & Examples
|
|
|
|
> Thresholds are illustrative; final values set in tuning. A medal marked ⚡ grants a small permanent bonus at one or more tiers (see §4 for the bonus catalogue).
|
|
|
|
#### ⚔️ Combat (PvP & PvE)
|
|
| Medal | Copper | Silver | Gold | Platinum | Dragon | Bonus? |
|
|
|---|---|---|---|---|---|---|
|
|
| Pit Fighter (arena wins) | 10 | 100 | 1,000 | 10,000 | 50,000 | ⚡ +arena XP |
|
|
| Ambusher (successful ambushes) | 5 | 50 | 500 | 2,500 | 10,000 | — |
|
|
| Survivor (survive lethal attacks <10% HP) | 1 | 10 | 50 | 200 | 1,000 | — |
|
|
| Crit Master ⚡ (critical hits landed) | 100 | 1,000 | 10,000 | 100,000 | 500,000 | +crit chance |
|
|
| Flawless (win combat without taking damage) | 5 | 50 | 250 | 1,000 | 5,000 | — |
|
|
| Duelist (1v1 ranked wins) | 10 | 100 | 500 | 2,000 | 10,000 | ⚡ +duel rewards |
|
|
| Dungeon Clearer (dungeons completed) | 1 | 10 | 50 | 200 | 1,000 | — |
|
|
|
|
#### 🗡️ Adventure (→ Torn's Crimes)
|
|
| Medal | Copper | Silver | Gold | Platinum | Dragon | Bonus? |
|
|
|---|---|---|---|---|---|---|
|
|
| Pickpocket (successful pickpockets) | 10 | 100 | 1,000 | 10,000 | 50,000 | — |
|
|
| Burglar (manors/vaults broken into) | 1 | 25 | 100 | 500 | 2,000 | — |
|
|
| Fencer (stolen goods fenced) | 10 | 100 | 1,000 | 10,000 | 50,000 | ⚡ +fence value |
|
|
| Waylayer (travelers waylaid) | 5 | 50 | 500 | 2,500 | 10,000 | — |
|
|
| Dungeon Raider (guild raids completed) | 1 | 5 | 25 | 100 | 500 | — |
|
|
| Adventurer (total adventures completed) | 100 | 1,000 | 10,000 | 50,000 | 250,000 | ⚡ +adventure gold |
|
|
| Night Owl ⚡ (nighttime adventures) | 50 | 500 | 5,000 | 25,000 | 100,000 | +stealth at night |
|
|
|
|
#### 🔨 Crafting & Gathering
|
|
| Medal | Copper | Silver | Gold | Platinum | Dragon | Bonus? |
|
|
|---|---|---|---|---|---|---|
|
|
| Smith (items crafted) | 10 | 100 | 1,000 | 10,000 | 50,000 | — |
|
|
| Artisan (Superior+ quality crafted) | 5 | 50 | 500 | 2,500 | 10,000 | — |
|
|
| Mastercraft (Masterwork crafted) | 1 | 10 | 50 | 200 | 1,000 | ⚡ +crafting crit |
|
|
| Legendary Forger (Legendary crafted) | 1 | 5 | 25 | 100 | 500 | — |
|
|
| Miner's Grit ⚡ (ore mined) | 1K | 10K | 100K | 1M | 10M | +gathering yield |
|
|
| Herbalist (herbs gathered) | 1K | 10K | 100K | 1M | 10M | — |
|
|
| Polymath (all 12 professions to Journeyman) | — | 1 | — | all to Expert | all to Master | ⚡ +crafting XP |
|
|
|
|
#### ✨ Magic & Skills (feeds the Skill/Magic System)
|
|
| Medal | Copper | Silver | Gold | Platinum | Dragon | Bonus? |
|
|
|---|---|---|---|---|---|---|
|
|
| Apprentice (any skill to rank 10) | 1 | 5 | 12 | 25 | 50 skills | — |
|
|
| Spellweaver (spells learned) | 5 | 25 | 75 | 150 | 250 | — |
|
|
| List Master ⚡ (spell list maxed) | 1 | 3 | 6 | 10 | 20 lists | +PP regen |
|
|
| Archmage (all 4 Essence schools mastered) | — | — | — | 1 | — | ⚡ +casting bonus |
|
|
| Loremaster (all Lore skills rank 20) | — | — | 1 | — | — | — |
|
|
| Jack of All Trades ⚡ (skills at rank 20+) | 5 | 15 | 30 | 50 | 80 | +DP gain |
|
|
|
|
#### 💰 Economy
|
|
| Medal | Copper | Silver | Gold | Platinum | Dragon | Bonus? |
|
|
|---|---|---|---|---|---|---|
|
|
| Coinpurse (total gold earned) | 10K | 1M | 100M | 10B | 1T | — |
|
|
| Tycoon ⚡ (net worth milestone) | 100K | 10M | 1B | 100B | 10T | +bank interest |
|
|
| Merchant (market trades completed) | 10 | 100 | 1,000 | 10,000 | 50,000 | ⚡ -listing fees |
|
|
| Gambler (inn games won) | 10 | 100 | 1,000 | 5,000 | 25,000 | — |
|
|
| Speculator (merchant ventures profited) | 1 | 10 | 50 | 200 | 1,000 | — |
|
|
|
|
#### 🛡️ Guild & Social
|
|
| Medal | Copper | Silver | Gold | Platinum | Dragon | Bonus? |
|
|
|---|---|---|---|---|---|---|
|
|
| Loyalist (guild tenure) | 1mo | 6mo | 1yr | 2yr | 5yr | — |
|
|
| War Hero (guild wars won) | 1 | 5 | 25 | 100 | 500 | ⚡ +guild rep gain |
|
|
| Benefactor (gold donated to guild) | 10K | 1M | 100M | 10B | 1T | — |
|
|
| Reputation (social reputation points) | 100 | 1K | 10K | 100K | 1M | — |
|
|
| Carouser ⚡ (inn carousing sessions) | 10 | 100 | 1,000 | 5,000 | 25,000 | +charisma temp |
|
|
|
|
#### 🏹 Slayer & Hunting
|
|
| Medal | Copper | Silver | Gold | Platinum | Dragon | Bonus? |
|
|
|---|---|---|---|---|---|---|
|
|
| Slayer (tasks completed) | 1 | 10 | 50 | 250 | 1,000 | ⚡ +slayer XP |
|
|
| Bounty Hunter (bounties claimed) | 1 | 10 | 50 | 250 | 1,000 | — |
|
|
| Exterminator (total enemies slain) | 100 | 1K | 10K | 100K | 1M | — |
|
|
| Rare Game (rare/elite enemies killed) | 1 | 10 | 50 | 200 | 1,000 | — |
|
|
|
|
#### 🗺️ Exploration
|
|
| Medal | Copper | Silver | Gold | Platinum | Dragon | Bonus? |
|
|
|---|---|---|---|---|---|---|
|
|
| Pathfinder (districts discovered) | 3 | 6 | all 11 | — | — | — |
|
|
| Voyager (offshore trips) | 1 | 5 | 25 | 100 | 500 | — |
|
|
| Tomb Raider (Lost Tombs cleared) | 1 | 5 | 25 | 100 | 500 | — |
|
|
| World Walker (all travel destinations visited) | — | — | — | — | 1 | — |
|
|
|
|
#### 🎪 Events & Seasonal
|
|
| Medal | Copper | Silver | Gold | Platinum | Dragon | Bonus? |
|
|
|---|---|---|---|---|---|---|
|
|
| Festival Goer (seasonal events joined) | 1 | 3 | 6 | 12 | 24 | — |
|
|
| The Hunt Champion (world boss dealt final blow) | — | — | 1 | 3 | 10 | — |
|
|
| Mangar's Eve survivor | — | 1 | 3 | 5 | 10 | — |
|
|
|
|
### 2.2 Hidden Medals
|
|
|
|
A subset of medals are **hidden** (like Torn's secret honours) — the name/description is `???` until earned. Examples: discover the Adventurers' Guild, find a hidden room in a dungeon, fence goods to Old Grist 100 times. Creates exploration-driven surprise and community wiki culture.
|
|
|
|
---
|
|
|
|
## 3. Honours — Rare Prestige Awards
|
|
|
|
Honours are **single, non-tiered** awards for exceptional, hard, or one-off accomplishments. Far rarer than medals. Displayed in a dedicated "Honours" ribbon on the profile. Each has a unique fantasy name and flavour text.
|
|
|
|
| Honour | Requirement | Bonus? | Notes |
|
|
|---|---|---|---|
|
|
| **First Light** | Be among the first 100 characters to reach level 50 | ⚡ +1% all XP | World-first cohort |
|
|
| **Dragonslayer** | Deal the final blow to a Dragon-tier world boss | ⚡ +2% damage to bosses | Coordination feat |
|
|
| **Archmage of Skara Brae** | Master all four Essence schools (Archmage) | ⚡ +5% spell effectiveness | Magic capstone |
|
|
| **Grandmaster Artisan** | Reach Grandmaster in all 12 professions | ⚡ +crafting crit chance | Ultimate crafter |
|
|
| **Unbroken** | Win 100 arena duels without a single loss streak | ⚡ +arena prestige | Combat excellence |
|
|
| **The Untouchable** | Reach level 50 without ever being ambushed/defeated | ⚡ +1% dodge | Pure PvE run |
|
|
| **Mangar's Bane** | Complete Act V (defeat Mangar) | ⚡ +title "Bane of Mangar" | Storyline capstone |
|
|
| **Citizen of the Year** | Win a seasonal Hall of Fame #1 | Cosmetic title | Seasonal |
|
|
| **Lucky Devil** | Roll an upward open-ended 200+ (any maneuver) | — | RNG flex |
|
|
| **Iron Will** | Resist 100 spells via Resistance Roll | ⚡ +5 RR | Anti-magic |
|
|
| **The Beggar King's Shadow** | Max all underground slayer tasks | ⚡ +stealth | Rogue capstone |
|
|
| **Champion of the Dawn** | Complete all of High Priestess Vaela's divine quests | ⚡ +blessing duration | Cleric capstone |
|
|
| **Patron of the Arts** | Hire 1,000 gold worth of inn workers | — | Gold-sink flex |
|
|
| **Survivor of the Deep** | Clear the Undercity without a party member falling | ⚡ +Undercity rewards | Solo/coordination |
|
|
|
|
Honours are intentionally **curated and limited** (target: ~40 at launch, expandable). They're the "wow" awards that make a profile stand out.
|
|
|
|
---
|
|
|
|
## 4. Permanent Bonuses — Bounded & Capped
|
|
|
|
The ⚡ bonuses are the main gameplay incentive. To prevent power creep:
|
|
|
|
- Each ⚡ bonus is **small**: typically +1% to +5% in its niche.
|
|
- **Collective cap**: total bonus from all honours + medals combined is capped at **+10%** per category of effect (e.g., max +10% combat-related, +10% crafting-related, etc.). Beyond the cap, additional ⚡ awards are cosmetic-only.
|
|
- **Diminishing stacking**: multiple sources of the same effect stack *multiplicatively with diminishing returns* (e.g., two +5% crit bonuses = 1 - (0.95)(0.95) = +9.75%, not +10%).
|
|
- **Cosmetic is king**: most medals/honours are display-only. The bonuses are seasoning, not the meal.
|
|
|
|
This mirrors Torn, where honours give tiny permanent stat bumps — enough to matter to min-maxers, not enough to invalidate progression.
|
|
|
|
---
|
|
|
|
## 5. Titles
|
|
|
|
Earned from medals/honours. One **active title** displayed with the character name (e.g., in chat, combat, profile). Players can switch their active title freely from earned titles.
|
|
|
|
| Title | Source |
|
|
|---|---|
|
|
| the Pit Fighter | Pit Fighter medal (Gold) |
|
|
| Slayer of the Deep | Survivor of the Deep honour |
|
|
| Bane of Mangar | Mangar's Bane honour |
|
|
| Archmage | Archmage honour |
|
|
| the Coin-King / Coin-Queen | Tycoon medal (Platinum) |
|
|
| Dragonslayer | Dragonslayer honour |
|
|
| Grandmaster | Grandmaster Artisan honour |
|
|
| Loremaster | Loremaster medal |
|
|
| Shadow / the Unseen | Beggar King's Shadow honour |
|
|
| of the Dawn | Champion of the Dawn honour |
|
|
|
|
Titles are **purely cosmetic** — no mechanical effect. They're the social currency of prestige.
|
|
|
|
---
|
|
|
|
## 6. Hall of Fame / Leaderboards
|
|
|
|
Redis-backed leaderboards (already in the tech stack) power the Hall of Fame:
|
|
|
|
| Board | Scope | Reset |
|
|
|---|---|---|
|
|
| Combat ranking | PvP rating | Seasonal (monthly) + all-time |
|
|
| Wealth ranking | Net worth | All-time |
|
|
| Adventure ranking | Adventures completed (season) | Seasonal |
|
|
| Crafting ranking | Items crafted (season) | Seasonal |
|
|
| Guild ranking | Guild reputation | Seasonal + all-time |
|
|
| Slayer ranking | Slayer tasks (season) | Seasonal |
|
|
|
|
Top 3 / Top 10 / Top 100 each season earn a **seasonal honour + cosmetic**. All-time leaders are enshrined permanently.
|
|
|
|
---
|
|
|
|
## 7. Profile Display
|
|
|
|
A character's profile (viewable by others, like Torn's profile page) shows:
|
|
|
|
- **Honours ribbon** — row of rare honour icons (the flex zone)
|
|
- **Medal case** — categorized medal badges with earned tiers; unearned show greyed silhouettes (hidden medals show `???`)
|
|
- **Active title** — prefix/suffix on the name
|
|
- **Hall of Fame badges** — seasonal & all-time rankings
|
|
- **Featured medal** — player picks one medal to feature prominently
|
|
|
|
This creates the Torn-style "let me see how impressive this player is at a glance" profile.
|
|
|
|
---
|
|
|
|
## 8. Database Schema (Draft)
|
|
|
|
```sql
|
|
-- Medal definitions (static game data, in skara-brae-common)
|
|
-- (could be JSON/TOML in common repo; shown as SQL for schema context)
|
|
CREATE TABLE medal_definitions (
|
|
id VARCHAR(64) PRIMARY KEY, -- 'pit_fighter'
|
|
category VARCHAR(32) NOT NULL,
|
|
name VARCHAR(64) NOT NULL,
|
|
description TEXT NOT NULL,
|
|
is_hidden BOOLEAN NOT NULL DEFAULT FALSE,
|
|
-- tier thresholds as JSON array: [10,100,1000,10000,50000]
|
|
thresholds JSONB NOT NULL
|
|
);
|
|
|
|
-- Character medal progress (highest tier earned + current count)
|
|
CREATE TABLE character_medals (
|
|
character_id UUID NOT NULL REFERENCES characters(id),
|
|
medal_id VARCHAR(64) NOT NULL REFERENCES medal_definitions(id),
|
|
count BIGINT NOT NULL DEFAULT 0,
|
|
highest_tier SMALLINT NOT NULL DEFAULT 0, -- 0..5
|
|
PRIMARY KEY (character_id, medal_id)
|
|
);
|
|
|
|
-- Honour definitions
|
|
CREATE TABLE honour_definitions (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
name VARCHAR(64) NOT NULL,
|
|
description TEXT NOT NULL,
|
|
bonus_json JSONB, -- null if cosmetic
|
|
title VARCHAR(64) -- granted title, if any
|
|
);
|
|
|
|
-- Character honours earned
|
|
CREATE TABLE character_honours (
|
|
character_id UUID NOT NULL REFERENCES characters(id),
|
|
honour_id VARCHAR(64) NOT NULL REFERENCES honour_definitions(id),
|
|
earned_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (character_id, honour_id)
|
|
);
|
|
|
|
-- Earned titles
|
|
CREATE TABLE character_titles (
|
|
character_id UUID NOT NULL REFERENCES characters(id),
|
|
title VARCHAR(64) NOT NULL,
|
|
source VARCHAR(64) NOT NULL, -- honour_id or medal_id
|
|
earned_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (character_id, title)
|
|
);
|
|
|
|
ALTER TABLE characters ADD COLUMN active_title VARCHAR(64);
|
|
ALTER TABLE characters ADD COLUMN featured_medal VARCHAR(64);
|
|
```
|
|
|
|
Counters that feed medals (arena wins, crits, gold earned, etc.) are best stored as **existing gameplay columns** or a lightweight `character_counters` key-value table to avoid schema bloat:
|
|
|
|
```sql
|
|
CREATE TABLE character_counters (
|
|
character_id UUID NOT NULL REFERENCES characters(id),
|
|
counter_key VARCHAR(48) NOT NULL, -- 'arena_wins', 'crits_landed', ...
|
|
value BIGINT NOT NULL DEFAULT 0,
|
|
PRIMARY KEY (character_id, counter_key)
|
|
);
|
|
```
|
|
|
|
---
|
|
|
|
## 9. API Additions (Draft)
|
|
|
|
```
|
|
# Profile / medals / honours (public-ish)
|
|
GET /api/profile/:character_id # overview incl. medals, honours, title
|
|
GET /api/character/medals # own medals + progress + hidden (revealed only)
|
|
GET /api/character/honours # own honours
|
|
PUT /api/character/active-title # set active title
|
|
PUT /api/character/featured-medal # set featured medal
|
|
|
|
# Hall of Fame
|
|
GET /api/leaderboard/:board # seasonal or all-time rankings
|
|
```
|
|
|
|
A new WebSocket notification type for medal/honour unlocks:
|
|
|
|
```json
|
|
{ "type": "achievement:unlock", "data": { "kind": "medal", "id": "crit_master", "tier": 3, "name": "Crit Master", "bonus": "+1% crit chance" } }
|
|
{ "type": "achievement:unlock", "data": { "kind": "honour", "id": "dragonslayer", "name": "Dragonslayer" } }
|
|
```
|
|
|
|
---
|
|
|
|
## 10. Integration With Existing Systems
|
|
|
|
| Existing System | Integration |
|
|
|---|---|
|
|
| **Cumulative achievements** (existing design) | *Replaced/augmented* by medals. "Mine 10,000 ore" → Miner's Grit medal. |
|
|
| **Skill & Magic System** (new) | Skill ranks, spell lists mastered, Archmage, Jack of All Trades all feed medals/honours. |
|
|
| **Combat crit tables** | Crit Master medal tracks crits landed. |
|
|
| **Crafting quality tiers** | Artisan / Mastercraft / Legendary Forger medals track quality outcomes. |
|
|
| **Adventures / crimes** | Pickpocket, Burglar, Fencer, Adventurer medals mirror Torn crime milestones. |
|
|
| **Guilds / Clans** | War Hero, Benefactor, Loyalist medals; seasonal guild HOF. |
|
|
| **Slayer / Bounty** | Slayer, Bounty Hunter medals. |
|
|
| **Economy** | Coinpurse, Tycoon, Merchant medals; wealth HOF. |
|
|
| **Seasonal events** | Festival Goer, seasonal HOF "Citizen of the Year" honour. |
|
|
| **Redis** (tech stack) | Powers leaderboards + counter aggregation for medal thresholds. |
|
|
|
|
---
|
|
|
|
## 11. MVP / Phasing
|
|
|
|
- **Phase 1 (MVP)**: Medal *counters* + a handful of combat/adventure medals (cosmetic only). Profile shows medal case. Lays the tracking infrastructure.
|
|
- **Phase 2**: Full medal categories, ⚡ bonuses (capped), Honours, Titles, profile ribbon.
|
|
- **Phase 3**: Hall of Fame leaderboards (seasonal + all-time), hidden medals, seasonal honours.
|
|
- **Phase 4**: Community medal wiki integration, medal-of-the-week, special event honours.
|
|
|
|
---
|
|
|
|
## 12. Open Design Questions
|
|
|
|
- [ ] **Bonus cap**: confirm +10% per-effect-category collective cap? Adjust per category?
|
|
- [ ] **Tier count**: 5 tiers (Copper→Dragon) or simplify to 4 (drop Dragon)?
|
|
- [ ] **World-first honours** (First Light): feasible to award fairly at launch? Use a registration-cohort instead?
|
|
- [ ] **Hidden medals**: how many at launch? Risk of players missing them entirely.
|
|
- [ ] **Seasonal HOF reset cadence**: monthly? Quarterly?
|
|
- [ ] **Bonus stacking math**: confirm multiplicative-diminishing vs. additive-capped.
|
|
- [ ] **Counter storage**: dedicated `character_counters` table vs. adding columns — choose before Phase 1.
|
|
|
|
---
|
|
|
|
## Related Notes
|
|
|
|
- [Game Concept Overview](joplin://9cf8a2e701654ffbbd6512cc837c7e2f) — Core loops, cumulative achievements (now medals)
|
|
- [Skill & Magic System](joplin://4c295d18c9b04aea947b534834ffaced) — Skills/magic feed medals & honours
|
|
- [Mechanics Source Mapping](joplin://87a0f70b45c4453caae0fa2b5b8a96f9) — Torn City source mapping (honours expanded here)
|
|
- [Combat System & Stat Scaling Design](joplin://0ef630db4e3e4d6dab18ccaefccaaa5a) — Crit Master medal tracks crits
|
|
- [Tech Stack & Architecture](joplin://cecd2ef2690d4d1fba3450342aa63953) — Redis leaderboards, DB schema
|
|
- [Lore & World Building](joplin://867bdc9845624908a90928887a71c4c9) — NPCs/districts referenced in honours
|
|
- [Project Plan](joplin://d243ae57778343fca997d46b73d0ee3b) — Roadmap, phasing
|