Skip to content

feat(encounters): preserve camp-spot identity during dynamic spawn migration #241

Description

@zoeyrose

Outcome

Preserve the recognizable named-monster camp spots that give existing
areas their identity while migrating ordinary and rare/elite spawning to the
bounded encounter-zone model. The physical camp, local monster theme,
level/region context, and expectation that an unusual named threat may appear
there should survive the migration even though the named monster is no longer
copied into every map spawn definition.

This issue owns the authored-content and migration contract. Runtime caps,
reservations, placement, and persistence remain owned by the cross-stack
encounter/runtime issues linked below.

Important

atrinik/content@main is the sole mutable authored content source. Any
Classic-compatible projection is derived and validated separately; this
issue does not authorize a live 1.x authoring path.

Product rules

Preserve existing camp identity

  • Inventory existing named camp locations, beginning with the Fahrgorm and
    Thrakir locations, and assign each a stable authored site identity. Preserve
    the original map area/landmarks, family, level band, environment, schedule,
    approach, leash/return expectations, and local ordinary population as
    authored context.
  • Represent the camp as a bounded encounter site or hotspot in the generic
    zone contract, not as a coordinate-local named monster. Ordinary members and
    rare/elite members may be placed safely within the preserved footprint; the
    exact old spawn tile is not itself the identity contract.
  • Give an existing camp site a deliberately higher, centrally bounded weight
    or eligibility bias for appropriate named rare/elite profiles from its local
    family, region, and level band. This should make the old camp feel like a
    reliable place to hunt for something unusual without guaranteeing a specific
    name, bypassing the global active cap, or creating a reroll on map reload.
  • Allow additional sites to be authored through stable IDs, regional/family
    constraints, and the same cap/cooldown/placement rules. New sites must add
    meaningful geography or route variety, not duplicate a name at another
    arbitrary coordinate.

Remove duplicate map implementation

  • Migrate Fahrgorm, Thrakir, and later named variants from repeated inline
    map templates into validated variant/profile and site data. Maps select the
    site, family, roster, and bounded local tuning; they do not embed a complete
    named monster definition at every eligible point.
  • Keep named-variant selection, elite/rare rank, global active limits,
    reservations, cooldowns, and restart/unload behavior in the authoritative
    encounter controller. A hotspot bias is only an input to a bounded selection
    decision; it is never an independent local cap or an unbounded retry loop.
  • If a named reservation is unavailable, the site continues with valid
    ordinary population or a bounded deferral according to the runtime contract;
    it must not create duplicate named instances or silently turn every camp into
    a guaranteed rare spawn.

Preserve authored named exceptions

Story-tied named actors remain explicit authored actors, not candidates for
random replacement or generic elite selection. This includes named NPCs such
as King Rhun, bespoke bosses, and named monsters whose identity or reward
is part of the location's story or progression—for example, a monster that
drops a special key for the dungeon or gate where it appears.

Use stable semantic classifications such as story_actor, quest_gate,
key_holder, static_named, or an equivalent validated identity; never infer
an exception from a display-name substring. These actors retain their exact
location/availability, quest or gate credit, key/container behavior, and
authored rewards. The migration must fail closed when an actor's classification
or reward ownership is uncertain. Roaming named-variant reward tables must not
silently acquire keys, one-drop progression items, or irreplaceable story
objects.

Migration classification

Every legacy named or named-looking spawn is classified before conversion:

  1. Preserved camp site — retain the physical camp and convert its named
    possibility into a hotspot/profile bias.
  2. Static story or progression actor — retain the explicit authored actor
    and its exact behavior/rewards.
  3. Ordinary eligible population — migrate to a family/role/zone roster
    after the pilot proves equivalent local pressure and pacing.
  4. Scripted, connected, schedule-special, summon, boss, or ambiguous
    remain explicit until a focused contract owns them; ambiguous records fail
    closed.

The audit must record the source map/style, stable actor or site identity,
family/region/level context, relevant quest/key/reward links, old and new
selection behavior, and the reason for each classification. No migration may
delete a recognizable camp solely because its current implementation is
duplicated in map data.

Acceptance criteria

  • A reviewed inventory identifies the existing named camp sites, including
    the Fahrgorm and Thrakir sites, their physical footprints, local themes,
    source schedules, level bands, and relevant reward context.
  • The migrated sites retain their recognizable geography and local camp
    behavior while ordinary and named members are selected from centralized,
    validated data rather than duplicate map-local named templates.
  • Existing camp sites have a tested, higher bounded opportunity for an
    appropriate regional/family/level-matched named rare or elite, while the
    authoritative global cap, reservation, cooldown, and restart/unload
    protections remain effective.
  • The same contract supports adding a new camp site without adding a
    repeated named monster definition to every map spawn point.
  • King Rhun and every audited story, quest, gate, key-holder, boss, and
    other static named exception remain explicit and retain exact location,
    availability, progression credit, special-key behavior, and authored
    rewards.
  • Uncertain named/reward classifications fail closed and cannot enter a
    roaming pool by display-name or broad-archetype inference.
  • Named roaming rewards cannot duplicate or replace special keys, quest
    containers, one-drop progression items, or other irreplaceable story
    objects.
  • Deterministic and playtest reports compare preserved camps and new sites
    on local population, family/role composition, named sighting frequency,
    time-to-refill, cap contention, placement failures, and reward outcomes.
  • Map unload/reload, restart, concurrent players, a full global cap, and a
    blocked camp produce bounded outcomes with no reroll exploit, duplicate
    named instance, partial pack, or busy loop.

Dependencies and coordination

Non-goals

  • Guaranteeing that a particular named variant appears on every visit or at a
    particular tile.
  • Keeping duplicate named templates in every map for visual or historical
    reasons.
  • Turning story NPCs, quest actors, gate/key holders, or bespoke bosses into
    random roaming variants.
  • Replacing the global elite/rare cap with one cap per camp site.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Fields

    Priority

    None yet

    Start date

    None yet

    Target date

    None yet

    Effort

    None yet

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions