Skip to content

feat(archetypes): complete tiny lighting for transient missiles and sparkles #104

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

Complete the radius-1 lighting treatment for three live transient effects whose art and runtime consumers are clear:

Archetype Color direction
magic_missile deep blue 4060ff
cause_wounds emissive yellow ffe060
level_up cyan-blue 60d0ff

This is separate from #94's five meffect_* glows. These objects have projectile, impact, or player-level lifecycle contracts that need their own runtime checks.

Evidence

All three have zero static map placements and currently lack a radius and color, but each has an exact live Classic consumer:

  • arch/magic/magic_missile/magic_missile.arc is created by spell_magic_missile. It is a turnable directional type-2 projectile with deep-blue lightning art, no_save 1, speed 1, and a 12-tick lifetime field.
  • arch/magic/wounds/cause_light_wounds.arc is created by spell_cause_light_wounds. It is a type-2 animated projectile/effect with a bright yellow core and red-orange tips, no_save 1, speed 1, and the same 12-tick lifetime field.
  • arch/misc/level_up/level_up.arc is the required cached ARCH_LEVEL_UP effect inserted on the player's tile after level gain. It is an animated type-79 sparkle with is_used_up 1, food 9, and speed 1, but no explicit no_save field.

Existing fire, frost, negative-energy, and lightning bolts establish radius 1 as the appropriate transient-source precedent. 4060ff, ffe060, and 60d0ff are already reviewed #65 palette entries. If rendered evidence makes the wounds effect's yellow read too holy, established ff6030 is the bounded alternative.

Scope

  • Add radius 1 and the reviewed art-matched colors above to the three archetypes.
  • Exercise directional casting, impact, expiry, object removal, map unload, death, rapid casts, and clustered simultaneous effects.
  • Verify level_up insertion/removal on level gain plus login, logout, save/reload, death, and map transitions because it lacks explicit no_save.
  • Check smooth and discrete Classic lighting for every effect, including overlap with existing stronger map and carried sources.
  • Preserve targeting, damage, attack type, projectile direction, speed, lifetime, spell costs, XP/level behavior, animation, and every non-light field.
  • Exclude the black-dot bullet, unused fire_trail, unused fog variants, and any unreviewed spell animation from this issue.

Acceptance criteria

  • Each effect emits its reviewed radius-1 color in its live runtime path.
  • Cast, impact, expiry, removal, death, and map unload leave no stale light or color contribution.
  • Rapid or clustered casts and repeated level gains remain readable without excessive flashes, saturation, or material performance regression.
  • level_up cannot survive save/reload, login, logout, death, or map transition beyond its intended lifecycle.
  • Combat targeting/damage/timing and player XP/level behavior remain unchanged.
  • Every color is checked in smooth and discrete Classic lighting against stronger ambient and carried sources.
  • Source-only runtime consumers appear in the refreshed chore(maps): audit authored light-source colors #65 review records and evidence rather than being omitted for having no map placements.
  • 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. Runtime validation belongs on Classic 1.x; validate compatible authored definitions independently on main and document any replacement-stack limitation. Deliver separate linked pull requests while preserving release-line-specific metadata.

Activity

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

Metadata

Metadata

Assignees

Labels

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