Skip to content

feat(maps): give displayed crystal balls a blue focal light #96

Description

@zoeyrose

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

Give intentionally displayed crystal balls a small blue focal light without turning every collectible crystal_ball into free passive carried illumination.

Keep the base item non-emitting. Establish display intent map-locally, using no_pick 1, a small radius, and 4060ff only where the object is genuinely scenery.

Evidence

The animated blue crystal_ball archetype is a pickable type-79 object with value 10 and no current radius or color. There are only two authored placements:

  • Asteria world_4_47 at (11, 18), on the fortune teller's table;
  • Marigold world_17_2_4 at (22, 9), beside the displayed power_crystal.

Adding an archetype-level radius would make either cheap collectible ball a passive carried light under Classic inventory semantics. Both current contexts instead look like fixed displays, so map-local ownership is safer—but only after confirming that making them unpickable does not remove intentional loot or interaction.

Scope

  • Verify whether each of the two placements is intended as fixed display scenery or collectible loot.
  • For each confirmed display, add map-local no_pick 1, radius 1, and 4060ff; leave any intentionally collectible placement non-emitting.
  • Keep the shared crystal_ball archetype without a default radius so future collectible balls do not silently become inventory lights.
  • Render the fortune-teller table and Marigold display in smooth and discrete Classic lighting, checking walls, nearby fixtures, and color overlap.
  • Coordinate Marigold with feat(maps): give Wizards' Tower floors distinct ambient palettes #80 and feat(items): make power crystals provide a restrained carried light #95; do not stack adjacent focal sources without a deliberate composition.
  • Preserve animation, value, type, name/plural, placement, scripts, NPC interaction, loot intent, and all unrelated gameplay fields.

Acceptance criteria

  • The intended collectible-versus-display contract for both placements is documented.
  • Confirmed displays use a small 4060ff focal light and cannot be picked up; any collectible placement remains non-emitting.
  • The base archetype remains non-emitting and does not create a passive carried light.
  • Asteria and Marigold displays remain readable without clipping, wall bleed, oversaturation, or accidental stacking with nearby emitters.
  • No value, animation, NPC, script, loot, or gameplay behavior changes beyond the explicitly confirmed display ownership.
  • The chore(maps): audit authored light-source colors #65 inventory, review records, map 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 #66 supplies the matching field/audit contract on main. Both affected maps are currently byte-identical across release lines. Deliver compatible map-local changes through separate linked pull requests, with Classic 1.x owning rendered runtime evidence and main independently validating the authored mirror.

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