# Oathlight — original Starshine effect

A small original eight-point gold sigil, blue ring and alternating glimmers.
This is a private proof of concept, **not installed in the live world**.

The archive contains the original ASCII source, compiled Aurora MDL, three
original RGBA textures with TXI settings, a reproducible generator, an additive
table-patch helper and an unhooked preview script. No downloaded model geometry,
third-party example, whole compatibility table or server module is redistributed.

## View

`preview.webm` is a recording of the compiled model in NWN MDL Viewer, a Three.js
renderer. It is useful for geometry, colour and particle inspection, but is not
an NWN client recording. `preview.png` is a frame from the same model viewer.

## Private integration

1. Extract the currently effective `visualeffects.2da` from the highest-priority
   compatibility HAK. Keep the original untouched.
2. Run `python append_table.py visualeffects.2da patched-visualeffects.2da`.
   Record the reported row number; it was 10100 in the private test.
3. Put all seven files in `compiled/` and the patched table, renamed
   `visualeffects.2da`, into a new private HAK. Place that HAK ahead of the
   existing compatibility HAK in a disposable test module.
4. Add an otherwise inert preview anchor tagged `ss_fx_anchor`, with integer
   local `SS_PREVIEW_ROW` set to the reported row number. Compile and execute
   `ss_fx_preview.nss` to apply a twelve-second temporary effect.
5. Inspect the effect with the real NWN client before choosing any live site.
   Keep the existing approved Tyr hand and the Glimmer closure unchanged.

The normal NWScript constructor takes a numeric row, not a model filename.
Do not assume a module-local table overrides an existing HAK. Any eventual live
package must also follow the server's established NWSync publication process.

## Evidence and limits

- Binary/decompile roundtrip: 320 triangles, eight emitters, three lifecycle
  animations and no compiler warnings.
- The private headless NWN fixture passed seven table/effect lifecycle checks.
  It preserved all 10100 existing rows, left production untouched, and stopped
  its own test container.
- The headless check proves row resolution and effect lifetime. It does **not**
  prove the NWN client rendered the mesh, colours or particles correctly.
- The effect has no audio, dynamic-light node, collision mesh or heartbeat.
  It emits about 5.6 particles per second with a 1.6-second lifetime.

See `DESIGN.md` and the evidence JSON files for the exact boundary of each check.
