Skip to content

feat(lighting): consolidate magic-lantern illumination onto visible fixtures #89

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.

Important

Evidence policy update (2026-08-11): #66 is complete through #124; any wording
below treating it as a future prerequisite is superseded. #126/#127 retire the
committed renderer-review capture surface. The removed files were generated
review artifacts, not authored gameplay art. Any requirement below to commit
rendered screenshots, contact sheets, manifests, proof maps, or capture tooling
is superseded. Keep authored semantic review in
maps/light-source-review.json (rationales, current digests, complete coverage,
and zero unreviewed emitters). Optional smooth/discrete diagnostics belong only
under ignored build/ or deployment output; summarize conclusions in the PR,
but never commit or gate merge on those files.

Follow-up to #65 and its implementation in #67, with the compatible main integration tracked by #66.

Outcome

Move intended illumination from invisible, co-located fillers onto the two visible magic-lantern fixtures:

  • lantern_magic.131;
  • lantern2_magic.131.

Then review placements with no current source explicitly. Do not let a single archetype default silently change gameplay visibility across the world.

Evidence

The exact post-#65 tree contains 402 magic lanterns across 66 maps:

Archetype Placements Direct only Filler only Direct plus filler No current source
lantern_magic.131 285 50 142 0 93
lantern2_magic.131 117 12 92 5 8

In total, 67 placements have a map-local radius on the lantern, 239 have a neutral light* filler at the same coordinate, five are doubled through both, and 101 across 23 maps have neither source.

The 239 filler radii are intentionally heterogeneous: 160 × radius 7, 32 × radius 6, 18 × radius 5, 17 × radius 9, 10 × radius 4, and 2 × radius 3. The direct radii are also varied: 49 × radius 5 and one × radius 7 for lantern_magic.131; 15 × radius 7 and two × radius 9 for lantern2_magic.131.

A single mechanical radius cannot replace the authored composition safely. #67 already assigns both archetypes ffd080, matching their golden-amber lamp art, but filler-only lanterns remain neutral because the color belongs to the separate source. All 66 affected maps are currently byte-identical on main, 1.x, and the exact #67 branch.

Review anchors

  • /tpto /shattered_islands/world_13_4 9 10 and /tpto /shattered_islands/world_13_5 11 22 — mixed lit/unlit Morliana lanterns;
  • /tpto /shattered_islands/world_13_64 12 15 — six unlit wall lanterns in Portu Baserrian;
  • /tpto /shattered_islands/world_4_59 10 17 — six unlit standing lanterns in Aris;
  • /tpto /shattered_islands/strakewood_island/greyton/house/luxury_house_0_0 32 29 — seven unlit standing lanterns and three radius-7 wall lanterns;
  • /tpto /shattered_islands/world_5_45 12 10 — one of five doubled sources.

Scope

  • Inventory every placement's direct radius, filler, effective radius/color, map darkness/time behavior, and final disposition.
  • Transfer the 239 filler sources to the visible fixture while preserving each intended radius-3/4/5/6/7/9 footprint.
  • Remove or reconcile the five direct-plus-filler sources atomically.
  • Derive any default from rendered evidence and the observed distributions; do not assume one radius fits every placement.
  • Review all 101 placements with no current source. Illuminate them only where appropriate; otherwise retain an explicit documented zero-radius exception.
  • Use ffd080 as the baseline, with map-local color overrides only where a separately reviewed palette requires them.
  • Preserve directions, animations, coordinates, obstruction, exits/tile links, darkness/time behavior, names/plural names, and every non-light field.

Issue #83 owns Everlink's localized palette. Its eight maps contain 46 magic lanterns: 21 are currently filler-lit and 25 have no current source. Land this fixture-ownership work before #83 so Everlink can consume the inherited sources and choose only deliberate local exceptions. Issue #87 also overlaps everlink_0301; serialize or rebase the generated #65 audit artifacts.

Acceptance criteria

  • Every one of the 402 placements has a reproducible final radius/color/disposition.
  • All 239 co-located fillers are transferred, removed, or explicitly justified without accidentally changing established scalar footprints.
  • The five doubled placements no longer have unresolved duplicate sources.
  • Every one of the 101 placements with no current source is deliberately illuminated or retained dark after contextual and gameplay review.
  • Existing radius-3/4/5/6/7/9 compositions are preserved unless rendered evidence documents an intentional change.
  • Everlink retains the localized choices established by feat(maps): add localized lantern and garden colors across Everlink #83.
  • Dense clusters, outdoor night behavior, linked-map boundaries, interiors, and wall-mounted variants avoid clipping, wall bleed, muddy overlap, and navigation regressions.
  • Representative cases are checked in smooth and discrete Classic lighting.
  • name_pl and every non-light field remain intact.
  • The chore(maps): audit authored light-source colors #65 inventory, review records, semantic digests, evidence manifest, and affected rendered evidence are refreshed.
  • python3 tools/world_content_audit.py lights --check, python3 tools/validate.py, and git diff --check pass.

Release lines

Land only after #65/#67 are integrated on 1.x and after #66 supplies the matching field/audit contract on main. Sequence this before #83. Deliver compatible authored changes through separate linked pull requests. The canonical main pull request closes this issue; the 1.x companion links it without a closing keyword. Validate runtime rendering on Classic 1.x and the authored mirror independently on main.

Activity

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

Metadata

Metadata

Assignees

Fields

Priority

None yet

Start date

None yet

Target date

None yet

Effort

None yet

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions