Nornforged 0.5.0 - native equipment audio verification
Date: 2026-09-30
Game: Valheim 1.0.16, Unity 6000.0.75f1
Isolated run: .local/nornforged-smoke-22d7fb3139d04e699ea55658c581af89
Mode: -VfxOnly -EquipmentAudioCapture -NativeRender; no live player save or profile changes.

Exact tested SHA-256 (copied from this run's BepInEx/config/smoke-build.json):
Nornforged.dll: CF0339638809A3899844E1DA47557CE18579C318D04392742BE9208415B974B3
Nornforged.Core.dll: C0FC6FF69EDF3F432A6E73426B789E70CA0F3354C225A4DEAE56D4C8106A1CF9
Nornforged.UnitySmoke.dll: E72F91476C83D757C2DF563C4D9564816D3D48114B46DEFFCCABB9B5866553A4

PASS: 324 native audio assertions. All twelve visual families resolve bounded
native launch/contact sources; the two-family mix uses the exact visual composition
weights. Tests cover installed Harmony hooks, unknown-family silence, native clip
length/gain limits, first-swing/first-contact deduplication, and cosmetic RPC packet
owner, sequence, timestamp, finite position, distance, size and rate validation.

PASS: 13 actual native runtime assertions. A real patched Attack.DoAreaAttack,
Projectile.Setup and terminal Projectile.OnHit execute on disposable fixtures.
The projectile retains its authenticated launch palette after the source weapon's
fate is cleared and the player switches weapons. Damage and launch velocity remain
unchanged. This is a bounded method-level native test, not a full combat session.

PASS: the non-batch Unity audio thread decoded 19 distinct native clips covering
all 24 family/phase entries, with zero unavailable or silent clips. Diagnostics
record 48000 Hz, stereo engine output, 32 real voices, 512 virtual voices and a
1024-sample DSP buffer. DSP time advanced and the source filter received audio for
every clip. Output files are mono dry audition WAVs. A prior batch-mode capture
produced no signal; that attempt was a harness limitation, not acoustic evidence.

Signal inspection of the 29 local WAVs:
- 24 single-family swing/contact files, four two-family examples, one concatenated
  all-family audition. All contain nonzero PCM; zero samples reach PCM16 clipping.
- Single-family peaks range from -31.02 dBFS (Gale swing) to -9.24 dBFS (Blood impact).
- Pair 0+1 (Ember/Rime): peak -14.64 dBFS; RMS -32.43 dBFS.
- Pair 1+2 (Rime/Storm): peak -17.53 dBFS; RMS -35.77 dBFS.
- Pair 5+8 (Steel/Gale): peak -19.06 dBFS; RMS -38.16 dBFS.
- Pair 4+10 (Soul/Rune): peak -14.96 dBFS; RMS -30.72 dBFS. The shared native
  waveform is intentionally played once, not doubled.
- All-family audition: 56.130 seconds; peak -9.24 dBFS; RMS -29.67 dBFS.
These are PCM peak/RMS measurements, not perceived loudness or quality ratings.
Gale's quieter native release and other family differences need in-game listening.

Local-only evidence, inside the isolated run's BepInEx/config:
- nornforged-equipment-audio-0.5.0.txt: all actual native source paths and mixer groups.
- equipment-audio-dsp-local-only/DSP-DIAGNOSTICS.txt: source state and DSP callback evidence.
- equipment-audio-dsp-local-only/LISTENING-NOTES.txt: each audition file's native clip.
- equipment-audio-dsp-local-only/SIGNAL-METRICS.json: per-WAV sample rate, duration,
  peak/RMS, nonzero sample count and clipping count.
- equipment-audio-dsp-local-only/equipment-all-families.wav: complete dry audition.
The WAVs stay under .local and are not part of any distributable package.

Production behavior and verification boundaries:
- Borrows native clip/mixer references; does not instantiate native VFX/gameplay
  prefabs, replace ordinary weapon sound, add damage, or mutate inventory.
- At most two palette layers, twelve pooled voices, a 28 m listening radius and
  one swing/first-contact accent per cast. Native burst sounds remain unchanged.
- Source weapon provenance is captured before flight; child projectiles inherit
  the parent impact cue before any mutable item lookup. Session shutdown clears
  only owned sources/caches; native assets remain intact.
- Local enable/volume and reduced effects are respected. The cosmetic RPC has no
  relay path or arbitrary clip/prefab/volume fields; legitimate owner validation
  and bounded playback are tested through its real codec/validator.
- The dry auditions exclude the ordinary weapon layer, spatial attenuation,
  native mixer processing, environment/reverb and crowded multiplayer overlap.
- Subjective listening was NOT performed. Full combat mix acceptance and live
  two-client RPC transport remain unverified. Numeric checks do not establish
  premium sound quality, universal compatibility or every in-game situation.
