Skip to content

fix(puzzles): harden existing puzzle feedback, recovery, and shared state #143

Description

@zoeyrose

Architecture amendment — one authored content source (2026-08-13)

Initiative atrinik/atrinik#357 supersedes every future live-branch instruction below. atrinik/content@main is the sole mutable authored source for replacement and Classic targets. Future authored changes land only on main; supported Classic artifacts are deterministically derived from the same immutable main revision. Do not create, restore, author, backport, validate, or publish through a live 1.x branch.

Exact historical 1.x commits, tags, releases, assets, preserved local snapshots, provenance, parity records, and comparisons remain valid immutable evidence. This amendment changes no other feature, balance, lore, compatibility, licensing, validation, or ownership acceptance criterion.

Parent audit: #141.

Outcome

Make the existing authored puzzle set legible, recoverable, accessible, and safe under reset/re-entry and multiplayer use without flattening its good regional identity.

This issue is the remediation umbrella for the legacy puzzles identified by #141. Deliver changes in small regional batches with their own validation notes; do not rewrite every dungeon at once. Glacial Hollow's absent fire-crystal puzzle is tracked separately because it is restoration rather than hardening.

Priority matrix

Puzzle Required correction
Promethia/Scursaur maze Mark the visual rule for success/failure tiles, add at least one progress landmark, and warn/gate the transition from difficulty 1 into difficulty 65–75 content. Coordinate route danger with #20.
Abandoned Mine gate Replace the Tolkien-derived “mellon” answer with an Atrinik-native clue/response, reconcile the inscription text, normalize input safely, and retain a nearby progressive hint that does not print the answer.
Berri Lur statues and Loki temple Preserve trickster flavor while distinguishing readable misdirection from arbitrary lethal choice; define shared-object ownership/reset and prevent one player from punishing an unrelated bystander.
Loki ladder Keep the wall-herding insight, but make movement/reset feedback deterministic enough to learn and recover; handle missing/shared ladder state across tiled maps.
Brynknot Sewer rocks Add progressive pad/gate feedback, define party/shared ownership, and recover missing rocks or a lost/consumed key without resetting another active solve.
Underground City II torches Add a deterministic local clue and visible gate-state feedback; make cross-map timer/monster/waypoint failure recoverable.
Underground City III expedition/security Preserve the journal/fake-torch/northwest deduction; provide a capability-neutral alternative to one exact spell; add checkpoint/reset/escape behavior and clear safe-bridge confirmation.
Incuna Water Well Verify the full connection graph, especially apparently orphaned connection 144; expose pressure/flow state to the player; test retrigger, drowning escape, reset, and concurrent use.

Scope and design rules

  • Preserve successful lore-mechanic matches: Loki should remain playful, Incuna industrial, Berri genealogical, and Underground City archaeological/drow-engineered.
  • Prefer localized readables, plaques, visible apparatus, animation, sound, and magic-mouth feedback over global/random-only clue delivery.
  • Wrong actions may cost time or create a bounded encounter, but must teach something and leave a deterministic recovery.
  • A puzzle may remain shared-world state only if active ownership, timeout, reset, spectator behavior, and a second party's interaction are explicit. Otherwise use character/party-local progression or a lock with readable feedback.
  • Do not convert every puzzle into a quest marker trail or reveal complete solutions in readiness hints; follow Add explicit elemental-readiness paths for Dark Cave and Old Outpost #21's distinction between preparation and spoilers.
  • Treat the Abandoned Mine wording as a provenance/lore correction as well as a usability fix. New text must be Atrinik-native.
  • Keep combat difficulty and puzzle tier separate in UI/dialogue and map metadata.

Acceptance criteria

  • Each priority puzzle has a before/after row recording tier, clue path, state owner, failure state, reset/recovery, reward, route danger, and runtime scenario.
  • Promethia cannot silently present a difficulty-1 route as safe and then strand an unprepared player in level-65+ content.
  • The Abandoned Mine no longer depends on copied recognizability of “mellon,” has internally consistent text, and accepts intentional variants without accepting arbitrary input.
  • Shared rocks, statues, ladder, torches, altars, and flood state cannot be permanently lost or trivially griefed; another active party is not silently reset.
  • Underground City III remains a real deduction and is solvable without belonging to one class or owning one irreplaceable spell/item.
  • Every puzzle provides initial, intermediate or wrong-state, success, and already-complete feedback through at least two suitable channels where accessibility requires it.
  • Death, escape, abandon, map reset/reload, disconnect/re-entry, missing object/beacon, duplicate activation, and two-party interference have deterministic results.
  • Puzzle rewards are duplicate-safe and lost progression items are recoverable without farming permanent rewards.
  • Focused catalog/world audits, map/package validation, python3 tools/validate.py, and git diff --check pass on each release line.
  • Classic runtime playtests cover the exact changed routes and record map, character/party setup, reset interval, results, and cleanup.

Coordination and non-goals

Release lines

The target maps and scripts are currently identical on main and 1.x. Author canonical changes on main, backport separately to 1.x, validate both, and close this issue only from the canonical pull request.

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

    Labels

    bugSomething isn't workingmaps

    Type

    Fields

    Priority

    None yet

    Effort

    None yet

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions