89 lines
4.7 KiB
Markdown
89 lines
4.7 KiB
Markdown
# 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: 483 packaged models; 5,066 of 5,066 source phase assets; 311
|
|
mesh models, 1,711 particle emitters, 249 ribbon emitters, and 479 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 original visuals for spells with no source
|
|
mapping; the runtime still supplies its generated school fallback.
|
|
|
|
## Generate and verify
|
|
|
|
```sh
|
|
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.
|
|
|
|
The manifest collector also reads effectful boss spell IDs from
|
|
`dungeonCampaignCatalog.json`. Regenerate the dungeon catalog first whenever
|
|
boss spell semantics change. Missing or undecodable source audio falls back to
|
|
the runtime's short spatial school cue; enabled combat audio is never silently
|
|
dropped merely because a source file is absent.
|
|
|
|
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](https://skarndev.github.io/wowlib/python/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`.
|