Skip to content

Author named-variant rosters and signature rewards for every repeatable hostile family #22

Description

@zoeyrose

Important

The gameplay/authored-content decisions in this issue are preserved. This revision changes only the technical implementation path for the fresh MIT Go/Rust replacement program. atrinik/content remains separately/mixed licensed data; MIT engine/tooling code does not relicense the corpus.

Replacement implementation contract

Preserve named-variant identities, encounter rules, presentation, rewards, and tuning. Implement with compiled definitions plus Go encounter ledger, spawn/AI/action/reward services and generated semantic scene/protocol data; renderer owns approved effects only.

Common migration gates

  • Stable authored identities and behavior remain the source of truth; localized/rendered text and filesystem order are never identity.
  • Content is parsed, validated, transacted, and compiled by released content-toolkit; production Go/Rust consumers do not add private source parsers.
  • Runtime authority belongs to native Go services and bounded compiled definitions/CEL; Starlark is considered only through the residual go/no-go issue.
  • Verification uses deterministic compiler/conformance fixtures and wrapper-managed Go-server/Rust-client scenarios.
  • Verified original past work by an approved MIT provenance grantor may be copied, migrated, translated, or relicensed under MIT only through the merged complete-history provenance directive; all asset/data notices remain exact.

Content release-line scope

This future feature targets content@main and the canonical replacement stack. It is not automatically backported to content@1.x; any separately approved classic maintenance uses a linked pull request under #45, preserves the same gameplay/content decision and attribution, and validates only compatible classic consumers.

Preserved product/design specification and historical implementation notes

Summary

Build a curated roster of rare named variants and signature rewards on top of the roaming named-encounter system proposed in #23. Every repeatable hostile monster archetype should either:

  1. belong to at least one appropriate named-variant pool;
  2. be covered by a closely related family pool; or
  3. carry a documented exclusion because it is a one-off boss, quest/gate actor, summon, civilian/NPC body, or otherwise unsuitable.

Commonly repeated or tactically varied families should have several possible named variants. The goal is not random adjective soup: each name should communicate a fight identity, each fight should have counterplay, and each reward should reinforce its creature/region theme or help prepare for a harder content path.

Why this should be a separate content project

#23 defines the engine behavior, lifecycle, uniqueness, cooldown, scaling, telegraph, and anti-exploit rules. This issue owns the authored roster and reward economy.

A source scan of nested type-83 spawn templates shows why one profile per visual archetype is not enough:

Source/family Approximate authored spawn points
treant_evil 129
ghoul 100
quickwood 97
drow guard/fighter/captain 219 combined
ant_red 81
skeleton fighters and mages about 200 combined
ogre 55
lost_soul 53
wraith 53
demon_fire 53
giant_stone 50
crocodiles, bears, bats, frogs, jellies, orcs dozens each

At the same time, archetypes such as guard, mage_old, peasant, ranger, and other humanoid bodies are also used for friendly NPCs and named story characters. They must not automatically become roaming enemies merely because a map embeds them as type 83.

Coverage policy

Generate and maintain an audit from authored map/archetype sources. For every repeatable hostile source archetype, the audit should report its spawn-point count, map/region count, level range, variant pools, and any exclusion reason.

Initial density targets:

  • 40+ eligible spawn points: at least three profiles, normally split by role, region, or level band.
  • 10–39 points: at least two profiles where the base family supports meaningfully different fights.
  • 2–9 points: at least one profile or an intentional shared family profile.
  • One-off/static/scripted encounters: remain authored bosses unless explicitly migrated.
  • Cosmetic faces with identical stats and behavior may share a pool; tactically different roles should not.

Examples:

  • rat_a, rat_b, rat_c, and rat_d can share rat profiles.
  • skel_fighter1, skel_fighter2, and skel_fighter3 can share some martial-undead profiles.
  • Orc fighter, berserker, captain, priest, and sorcerer should receive role-specific options.
  • Fire, blue, green, and black dragons should share dragon lifecycle rules but retain element-specific names, mechanics, and rewards.
  • Friendly guards, shopkeepers, trainers, and dialogue NPCs are excluded even if their body archetype also appears in a spawn point.

Do not use mutable display names to decide eligibility. Profiles and exclusions need stable IDs and explicit source/region/level constraints.

Reward policy

Every named kill should matter

Use a two-layer reward model:

  1. Guaranteed family trophy/component or upgraded ordinary treasure. This makes the encounter worthwhile even when the signature item does not drop.
  2. A bounded chance at a signature sidegrade. Initial target: roughly 10–20% per named kill, adjusted alongside the encounter frequency from Add roaming named elites and counterplay-driven rare combat encounters #23.

Duplicates should have a sink: trade several trophies for the signature reward, exchange them for a choice among family rewards, or use them in repeatable crafting. Avoid a second indefinite 1/100-style lottery after an already rare world encounter.

Scope rewards by level band

One profile should not drop the same fixed level-6 item when taking over a level-60 source. Either:

  • constrain the profile to a suitable source-level/region band;
  • define lesser/standard/greater reward tiers; or
  • award a scalable component redeemed for a level-appropriate recipe.

Suggested initial bands are 1–15, 16–40, 41–75, and 76–115. Exact item levels, power budgets, values, and protections must be compared against neighboring authored equipment.

Prefer goals and sidegrades over raw power creep

Good reward themes include:

  • targeted fire/cold/electricity/poison/acid/drain/magic preparation;
  • a weapon-class alternative rather than a universally superior weapon;
  • one-stat build expression with a slot or resistance tradeoff;
  • family materials used in a player-choice recipe;
  • cosmetics, trophies, bestiary credit, or titles;
  • gear that answers the named monster's own mechanic.

Do not make every reward +stats/+damage. Do not put quest keys, quest containers, one_drop progression items, or irreplaceable story objects into roaming loot. Use one_drop only for an intentionally per-character permanent entitlement, not to hide repeatable loot bugs.

The values below are initial balance targets, not final item definitions.

Proposed initial roster

Eligible source pool Proposed named variants and fight identity Signature reward proposal
rat_a/b/c/d Gnashtooth charges after a short squeal; Plaguewhisker leaves avoidable poison patches; Vaultgnaw steals toward nearby cover but leashes normally. Ratcatcher's Buckle: low-tier girdle, Dex +1 and poison protection 5; guaranteed Notched Incisor trophies redeemable for it.
bat_brown and hostile bat variants Nightshriek telegraphs a confusion screech; Redwing performs a visible hit-and-run dive. Echo Pendant: darkvision, Dex +1, modest confusion protection; guaranteed Echo Membrane material.
bee_killer, wasp_giant Vespira the Needle Queen marks a line before a piercing dash; Swarmwing rallies one nearby insect wave. Vespira's Stinger Charm: Dex +1, poison protection 9; stingers can also brew antidotes.
spider, spider_widow Silkmaw places visible slowing webs; Venom-Eight winds up a high-poison bite that can be sidestepped or interrupted. Widow-Silk Gloves: poison protection 12 and pierce protection 6; guaranteed silk bundles feed a repeatable recipe.
snowman_evil Rimegrin throws a warned cold burst then tries to keep distance; Driftwalker raises temporary snow cover/adds. Frostbound Mitts: cold protection 9 with a small fire weakness; packed-rime trophy is guaranteed.
wolf Fenra Packmother howls before rallying wolves; the howl is interruptible. Packleader Mantle: Dex +1 and cold protection 6; wolf-mark trophies provide a deterministic exchange.
bear_grey, tiger Old Greyback telegraphs a heavy maul; Stripeclaw alternates flank-and-pounce patterns. Greyback Mantle: Con +1 and cold protection 9; Stripeclaw Boots: Dex +1 with modest slash protection.
deer Whitehorn signals a straight-line charge and becomes briefly exposed after missing. Whitehorn Gorget: modest impact/pierce protection and +1 WC; antler fragments remain useful crafting loot.
frog, crocodile Bogbelly warns before a pull/tongue strike; Marshjaw performs a line lunge and retreats toward water without becoming unreachable. Marshscale Boots: acid and poison protection 9; hides can be exchanged for the boots.
slug_giant, worm_purple Slurrik the Caustic leaves finite acid trails; Deepcoil warns before an erupting line attack. Preserve the purple worm's fire/cold identity. Slugskin Wraps: acid protection 15 with a small fire weakness; Deepcoil Loop: pierce protection 10 and cold protection 6.
kobold, kobold_fighter, kobold_guard, kobold_shaman Skritch Quickknife disengages and re-enters from a flank; Vekka Emberpot throws a clearly marked fire area; Rikkit Shieldtail guards nearby kobolds until staggered. Quickknife Dirk: +1 weapon-class sidegrade; Emberpot Charm: fire/magic protection 8; common Scrap Tokens allow a chosen reward.
hostile goblin, gnoll Tikk Scrap-King deploys a fragile gadget/add; Rask the Moon-Biter marks and pursues one target but can be peeled. Scrap-King Buckler: low/mid-tier block-focused shield; Moon-Biter Band: slash and drain protection 8.
orc_outlaw/fighter/warrior/berserker/captain Bloodbanner Karg buffs a pack until his banner is destroyed; Murg Chainbreaker enrages after a warned threshold; Rokka Spear-Eye uses a sidestep-able piercing line. Bloodbanner Cloak: Str +1 and modest physical protection; Chainbreaker Bracers: damage +1 with a defensive tradeoff; Orc War Marks provide player-choice redemption.
orc_sorcerer, orc_priest Ash-Eye Vorga telegraphs alternating fire and magic zones; Mother Grusk heals one ally with an interruptible cast. Ash-Eye Charm: fire and magic protection 10; Grusk's Prayer Beads: Pow +1 and drain protection 8.
ogre Grum Stonehand winds up a blockable ground smash; Boulder-Belly Ugg throws marked impact zones rather than unavoidable off-screen rocks. Stonehand Girdle: Str +1 and impact protection 10; Ogre Knucklebones are guaranteed.
ettin Brakk-and-Brukk alternates two independently telegraphed attacks and becomes confused/staggered when both are interrupted. Twinmind Helm: confusion protection 20, Int +1, and a modest AC tradeoff.
giant_hill, giant_stone Hroth Skybreaker creates a long warned slam line; Quakefist pulses rings with safe gaps. Existing Rhun/Relurgh/Chrordir remain fixed authored bosses. Skybreaker Maul: impact-focused damage sidegrade; Quakefist Gauntlets: impact protection 12 and block/absorb-oriented stats.
ant_red, ant_soldier Needlemandible performs a piercing charge; Chitina, Queen of Marches calls a bounded escort group whose deaths weaken her. Do not replace the quest ant queen. Royal Chitin Shield: block 5/absorb 8 class with pierce/slash protection; pheromone glands are guaranteed alchemy/crafting material.
treant_evil, quickwood Preserve Fahrgorm and Kotung in suitable bands; add Blightbark with warned root lanes and Mossmother with interruptible sapling summons. Preserve Bow/Crossbow of Accuracy; add Blightbark Heartwood for a block-focused buckler and Mossmother Seed for poison/cold preparation.
slime, slime_blue, gray_ooze, cube_gel, jelly colors Prism Gel cycles a clearly shown element; The Clear Hunger engulfs a marked tile; Ochre Maw spits avoidable acid. Guaranteed Prismatic Globule exchangeable for one chosen fire/cold/electricity/poison/acid protection ring; Gelatinous Lining crafts acid/poison gear.
pudding colors Black Maw, Cinder Pudding, Rime Pudding, and Viridian Pudding retain their authored damage elements and telegraph a split/pulse. Catalytic Core redeemed for matching fire/cold/poison/acid bracers (about 12 protection) with an optional opposing-element weakness.
mud_hand, icegolem, lavagolem Quakefist-class earth hand, Hailcore, and Cinderheart use slow, readable impact/element zones and become vulnerable after a missed slam. Thermal Core exchange for fire or cold protection 15 bracers with a small opposite-element weakness; earth core crafts impact gear.
skel_fighter1/2/3 The Ossuary Marshal uses a warned shield bash and rallies skeletons; Splintershot marks a ranged lane. Marshal's Boneguard: block-focused bone shield with balanced physical protection; etched bone fragments are guaranteed.
ghoul Grave-Eater Mok gains a visible feast buff from corpses that players can interrupt; Hollowclaw telegraphs a drain rake. Grave-Eater Gorget: drain and poison protection 10; grave salts support restoration consumables.
lost_soul, wraith Preserve Thrakir; add Veilwalker Oris with a warned drain line and The Lanternless with temporary, breakable concealment. Preserve Ring of the Ghost; add Veilglass Amulet with drain protection 12 and magic protection 8.
skel_mage, demilich Cinder-Skull, Rime-Skull, and Storm-Skull expose their next spell element during the windup; Morcant the Archive-Eater changes spell school once at half HP. Runed Phylactery redeemed for a player-chosen element/magic ward; high-tier version adds Int or Pow +1 within an appropriate power budget.
vampire, vampire_lord Lady Sablevein marks a lifesteal target and can be interrupted; The Pale Count summons only a bounded, despawning escort. Crimson Signet: Con +1 and drain protection 15; bloodglass shards provide the deterministic path.
drow_guard/fighter/captain Vaelra Shadow-Captain orders a formation dash; Drazin the Riposte visibly enters a counter stance that players should stop attacking or flank. Shadowstep Boots: Dex +1, stealth 1, modest physical protection; drow insignia are guaranteed.
drow_sorcerer, drow_annihilator Nymir Hexweaver exposes and rotates spell schools; Zaleth the Annihilator marks delayed blast tiles with safe gaps. Hexward Brooch: magic protection 15 with Int or Pow +1; annihilator focus fragments make higher-tier versions.
troll Mossgut the Undying visibly regenerates until a fire hit or interrupt suppresses it; Bridgebreaker uses a warned knockback line. Trollhide Belt: Con +1, cold protection 10, fire protection -5; trollblood also makes a bounded regeneration consumable.
fire/green/black/blue dragons Pyraxis, Verdax, Nhalos, and Cryavyr each telegraph their matching breath shape and expose the opposing elemental weakness. Existing Scursaur remains a fixed lore encounter. Guaranteed colored dragon scales; a fixed number crafts a chosen scale shield/boots with about 15 matching protection. Rare eyes unlock a cosmetic/title or upgraded sidegrade, not an unchecked best-in-slot item.
wyvern, dragon_skeletal Skarath the Gale-Talon alternates piercing dives and breath; Hollowwing drops bone lines and briefly exposes itself after landing. Preserve existing fire-wyvern lord and skeletal-dragon authored drops. Gale-Talon Gloves: WC +1 and pierce protection 8; Perfect Bone remains the skeletal family component and gains a repeatable recipe.
demon_fire/green/red, bone_devil Grath Cinderhorn telegraphs fire cleaves; Uul Bone-Singer raises destroyable bone wards; The Verdant Hunger gains a bounded defensive shell that can be broken by the correct attack type. Cinderhorn Amulet: fire protection 15/cold -5; Bone-Singer Guard: magic/drain protection; demon seals are guaranteed high-tier crafting currency.
lom_lobon, raas The Chain-of-Ice, Void-Scribe Akar, and a repeatable non-story crystal guardian use phase-limited elemental/cleave mechanics. Keep Hierro and Kriabe under their authored story rules. Voidglass Shard exchanged for magic/drain preparation or a weapon-class sidegrade; do not dilute Kriabe's boots or Hierro's unique reward identity.
gazer_dread, oclunus Opharex the Many-Watched announces a gaze direction players must leave; The Closed Eye alternates vulnerability and reflection windows. Existing Nyhelobo remains fixed. Unblinking Lens: darkvision, Int +1, magic and confusion protection 12–15; lens fragments provide deterministic redemption.

Names are proposals and should receive a lore/tone pass before implementation. Existing named story bosses must not silently become roaming variants merely because they share a source archetype.

Region and level variety

A dense family should not roll the same three names everywhere. Profiles can specify:

  • region allow/deny lists;
  • outdoor, cave, ruin, temple, or settlement-exterior tags;
  • source-level range;
  • day/night or seasonal availability;
  • required base ability/attack type;
  • whether the source is passive until provoked.

Examples:

  • Fahrgorm can remain a low-level Strakewood/Eld Woods legend, Kotung a mid-level bow-hunter target, and Blightbark/Mossmother cover later tree bands.
  • Early kobolds get Quickknife/Emberpot; a high-level map should choose a different veteran profile rather than scaling the same joke-sized thief to level 90.
  • Elemental dragon names stay bound to matching dragon colors.
  • Drow variants remain in drow-controlled or ruined-underground regions.
  • Passive wildlife variants should remain passive until provoked unless their profile explicitly tells the player that behavior changed.

Discoverability and collection

Use stable variant and reward IDs to provide:

  • hunter/rumor text naming the family and likely region;
  • bestiary entries showing encountered/defeated variants and known reward hints;
  • silhouette/unknown entries so players know a family has discoveries without revealing exact coordinates;
  • optional achievements through Implement data-driven per-character achievements server#31 for broad family coverage, not hundreds of mandatory rare-RNG kills;
  • duplicate-trophy exchange counts and progress in a player-visible surface.

Do not require external wiki knowledge to understand whether a named monster exists, what broad reward it offers, or whether a duplicate trophy has value.

Tooling and author workflow

Add a focused audit, for example:

python3 tools/world_content_audit.py named-variants

It should fail or report actionable errors for:

  • an eligible repeatable hostile source with neither a profile nor exclusion;
  • a friendly/NPC-only source accidentally opted in;
  • duplicate or unstable variant IDs;
  • invalid archetype, ability, effect, region, reward, or treasure references;
  • overlapping profiles that violate global uniqueness;
  • a profile whose level/region constraints match no authored source;
  • signature items outside their declared level/power budget;
  • quest/key/one_drop objects in repeatable roaming loot;
  • guaranteed and rare probabilities that do not form the intended reward package;
  • variants with no discoverability hint or no counterplay description.

Update tools/farming_analyzer.py to include expected named frequency, trophy value, signature reward value, and danger. Update tools/atrinik_bot so it can discover stable variant IDs/family hints rather than hard-coding only Fahrgorm/Thrakir coordinates and display names.

Rollout order

  1. Early-world pilot: rats, kobolds, insects/spiders, wolves/bears, Fahrgorm/Thrakir, and one slime pool. Validate frequency, readability, duplicate exchange, and new-player lethality.
  2. Midgame families: orcs, giants, ants, tree roster, skeletons/ghouls/wraiths, golems, and elemental puddings.
  3. Late-game families: drow roles, vampires/demiliches, dragons, demons, gazers, lom lobon/raas.
  4. Coverage closure: run the full audit, author or explicitly exclude every remaining repeatable hostile archetype, then add curated regional variants where repeated names feel stale.

Acceptance criteria

  • Every repeatable hostile spawn-point archetype has at least one applicable named profile, a documented family-pool mapping, or a reviewed exclusion.
  • Friendly NPC bodies, summons, quest/gate actors, and fixed story bosses cannot enter roaming pools accidentally.
  • Families with 40+ eligible points have at least three materially distinct profiles unless an explicit design review records why fewer are better.
  • Role-distinct sources receive role-appropriate variants; cosmetic face variants may share profiles.
  • Every profile has a stable ID, lore-appropriate name, level/region eligibility, intended encounter rank, counterplay description, guaranteed reward, and signature reward.
  • Rewards are level-banded, power-budgeted sidegrades or deterministic components and do not duplicate quest/progression objects.
  • Duplicate trophies have a documented sink and signature rewards have a bounded deterministic acquisition path.
  • Existing Fahrgorm, Thrakir, Kotung, Scursaur, Kriabe, Hierro, Rhun, Relurgh, Chrordir, Nyhelobo, and other fixed named encounters are explicitly preserved, migrated, or excluded—never duplicated accidentally.
  • Elemental families retain legible damage/protection identities and offer rewards useful for preparing against related harder content.
  • Named mechanics are telegraphed and counterable rather than only increasing HP and damage.
  • Regional rumors/bestiary hints make the roster discoverable without exposing exact live coordinates.
  • The named-variant audit covers completeness, references, probability packages, exclusions, reward safety, and dead profile definitions.
  • Farming-analyzer and bot consumers understand variant pools and expected rewards.
  • Focused map/resource collection, map checking, server tests, and representative runtime fights validate each rollout batch.

Relevant content areas

  • arch/mobs/: source monster archetypes and family identity
  • arch/items/, nested *.art, and *.trs: signature equipment, components, and treasure
  • maps/: regional eligibility, fixed named encounters, rumors, exchanges, and authored overrides
  • server/src/types/spawn_point.c: Add roaming named elites and counterplay-driven rare combat encounters #23 replacement hook
  • server/src/types/monster.c: reusable ability/counterplay vocabulary
  • tools/world_content_audit.py: coverage and reference validation
  • tools/farming_analyzer.py: expected danger/reward modeling
  • tools/atrinik_bot/: stable-ID discovery and hunting behavior

Legendary-roster coordination

#3 owns curated Mythic/Relic/Legendary classification, balance, and acquisition paths after atrinik/server#6 supplies rarity infrastructure. This issue remains authoritative for roaming-family signature rewards, guaranteed trophies, and duplicate sinks; shared items or currencies must have one owner and one acquisition budget.

Metadata

Metadata

Assignees

No one assigned

    Fields

    Priority

    None yet

    Start date

    None yet

    Target date

    None yet

    Effort

    None yet

    Projects

    Status
    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions