Files
healer-man/scripts/combat-effects/README.md
T
2026-09-11 18:49:33 -04:00

4.3 KiB

Original WoW spell visuals

The runtime packages every WoW 3.3.5 visual model referenced by the current ability manifest, across all ten WoW classes. There is no class filter in package-wow-original.mjs. Ascension and RuneWaker entries retain their existing source mappings and sound behavior.

Current coverage: 378 directly referenced models plus five particle model dependencies; 4,205 of 4,205 source phase assets; 260 mesh models, 1,367 particle emitters, 193 ribbon emitters, and 428 unique source textures. The generated manifest includes per-class coverage. A spell rank without a source visual phase (for example, a passive or totem-management action) is not counted as a missing model. This does not invent visuals for spells with no source mapping.

Generate and verify

npm run effects:wow
npm run effects:audit
npm run effects:test

effects:generate rebuilds the DBC/audio mappings before packaging all WoW visuals. effects:priest remains a compatibility alias for effects:wow so it cannot accidentally revert the main manifest to Priest-only coverage. The old Priest decoder and fixtures remain for compatibility tests.

Source assets resolve from the extracted sibling LadiksMPQEditor base-client directories, with the sibling wow335a/Data archive stack recovering missing files. Locale archives supply shared interface textures used by spell models. Recovered files go into .tools/wow-effects-source; source installations are read-only. BLPConverter8 converts the original BLPs to PNG. Model and texture paths are checked before resolution. An incomplete run reports failures and does not replace the active manifest.

Graph filenames hash the complete runtime payload, including source model, skin, textures and nested model dependencies. Changes therefore get new URLs instead of reusing an incompatible cached graph. The normal content publisher assigns the entire assets/game/combat-effects tree to core:combat-media. Publishing a new app/content release remains the normal deployment step. Development gameplay uses Vite's local source media directly; release builds retain the verified media-pack download requirement.

Rendering

The wow-m2-model format composes source particles, animated/skinned geometry, material alpha and colors, UV transforms, and bone-driven ribbon trails. The renderer resolves full and upright billboards, texture layers, source-space pivots, global animation sequences, and Stand/Hold/Decay timelines. Original geometry particles use instance pools; secondary particle emitters are bounded to prevent recursive effects multiplying the scene budget.

The live combat path uses the same cast, projectile, impact and aura events as before. In original mode, an instant release also renders any source-side cast-start layers without publishing another gameplay or audio event. Instant terminal events prefer their exact phase, then use the source impact or aura-start counterpart when that is the only mapping. The source phase stays on the render event so attachment and aura lifetime rules remain correct. This covers all 1,106 castable instant rank records that have a packaged source visual, including all 287 latest-rank instant abilities with source visuals. The source catalog also contains three passive instant records with visuals; passives do not publish combat events. Abilities without a source mapping, or with no usable asset load, retain generated fallback. Particle budgets, placement anchors, and travel timing remain the game's presentation rules; this is not a claim of pixel-identical client simulation or exhaustive spell-by-spell gameplay QA.

Decoder reference for compressed bone quaternions, float UV quaternions, and source record layouts: wowlib M2 records.

Local visual inspection

Run npm run dev and open /scripts/combat-effects/preview.html. The development-only preview lists every directly referenced model and uses the same mesh, ribbon and particle renderer as live combat. Drag to orbit, scroll to zoom, replay an effect, or freeze its opening frame. The preview is not included in the production app entry point.

Runtime tests parse all shipped graphs, sample bone transforms, and verify geometry bounds, dependency textures and billboard behavior. Browser evidence and observed limitations are recorded in PLAYTEST_NOTES.md.