Two cues fire inside the same second. One is the player losing a chunk of health to a turret; the other is the player drinking a potion behind cover. Both are bright, both start fast, both end with a short tail. The player flinches at the potion, keeps running after the turret hit, and asks why the game feels unreadable.
Nothing is technically wrong with either file. They are different sounds. They are just not opposite sounds, and the ear sorts opposition much faster than it sorts difference.
Different Is Not the Same as Opposite
The usual brief is differentiation: make the heal sound unlike the hit so players can tell them apart. Followed literally, that brief produces a 660 Hz sine with a fast decay against a 520 Hz triangle with a slightly faster decay: two files, one perceptual axis, pointing the same way for both.
Telling those apart requires comparison, and comparison costs attention that is not available mid-fight. Opposition removes it: put the two cues at opposite ends of one axis and the ear no longer needs to know what either file sounds like. It only needs to know which way the sound moved.
Rise means restore, fall means loss. Anyone who has played a game with a descending death sting and an ascending pickup already carries that mapping, and it transfers between games because it is a contour rather than a convention.
Once direction is fixed, the other axes reinforce the message instead of carrying it. The heal end of the palette gets more room in health pickup cue design, so this piece stays on the pair.
The Six Axes That Carry the Distinction
Six axes do most of the work. Each can be flipped, and each is cheap to flip. The values below are starting points for a mid-tempo action game, not a specification. A horror game may want the same axes with a much smaller span between the ends.
| Axis | Heal end | Damage end |
|---|---|---|
| Pitch contour | Rising, G4 to D5 (392 to 587 Hz) over 180 ms | Falling, A3 to A2 (220 to 110 Hz) over 120 ms |
| Attack | 15 to 30 ms ramp, no pre-transient | 1 to 3 ms transient, full level in one frame |
| Partials | Harmonic, integer-ratio stack | Inharmonic plus broadband noise |
| Spectral center | 800 Hz to 1.5 kHz, low-passed near 6 kHz | 2 to 4 kHz presence, high-passed at 120 Hz |
| Tail | 400 to 700 ms including reverb | 60 to 120 ms, clipped or gated |
| Width | Stereo, detuned 8 to 12 cents per side | Mono, centered |
Do not apply all six at once. Two or three flipped axes usually carry the pair; the rest are insurance for the mix.
The real failure mode is partial flipping. A heal with rising pitch and a soft attack, paired with a damage cue that also rises but is louder and noisier, leaves two sounds on the same end of the contour axis with a texture difference on top. Under gunfire the texture vanishes first, and raising the hit by 4 dB only makes it feel more dangerous.
Consistency across the whole palette matters more than any single pair. If a shield-break cue rises, the rise no longer means restore; it means something changed.
Categorical Sorting Happens Before the Tail
Listeners do not analyze a short cue feature by feature. They sort it into a category, and that category often settles within roughly the first hundred milliseconds, earlier still when the attack is strong. Everything after that window mostly confirms the decision rather than making it.
The consequence is direct. If the opening 60 ms of a heal resembles the opening 60 ms of a hit, harmonic warmth in the tail will not reclassify it; the player has already filed the sound under threat. Level will not fix that either: turning the heal down by 3 dB makes it a quieter threat, because the boundary is set by contour, attack shape and spectral center, not by loudness.
Why a Hard Transient Reads as a Hit
A transient is not just the start of a sound. A 1 to 3 ms rise to full amplitude with energy spread across 1 kHz to 8 kHz is the signature of physical impact: two objects meeting, a surface breaking, a body taking force. The auditory system carries a strong prior for that pattern, and the prior fires before timbre resolves.
That is why a metal tick at the front of a heal is so destructive. The tick reads as contact, contact reads as damage, and the warm pad that follows reads as the aftermath of damage instead of as restoration. The opening moments get a closer look in the first fifty milliseconds.
The Impact Heal and How to Keep Weight Without It
The most common way this goes wrong starts with a designer deciding the heal feels thin. The fix is weight, and the cheapest weight in the toolkit is an impact layer: a short click, a 70 Hz thump, a burst of noise, all inside the first 20 ms. It sounds solid solo. In context, players report being hit.
The layer did its job too well. It borrowed the damage contour to buy low-end authority, and the contour is what the ear reads first.
Weight From Body, Not From Impact
Weight does not require a transient. A sustained low-mid body carries weight too, and it does so without claiming contact.
- Put the low end in a sine or triangle at 150 to 250 Hz. Ramp it over 20 to 25 ms so the fundamental arrives after the ear has classified the cue as non-impact.
- Shape the pitch as a shallow dip, then a rise. Down 30 to 40 cents over 60 ms, then up a fifth. Slow movement down reads as relief, not as a blow.
- Use filtered noise for texture. Low-pass at 800 Hz to 1.2 kHz. Broadband energy above 2 kHz is the part that reads as impact.
- Build size with reverb, not with a pre-transient. A 0.5 to 0.7 s plate or hall at low level widens the cue without adding attack.
A character that genuinely needs a heavy heal, such as a tank, is better served by a second event than by a louder first one. A low swell arriving around 120 to 150 ms reads as the body settling, and it stacks under an already-classified heal. The same problem scales when one cue covers several targets, where party versus single heals diverge.
Wiring the Pair So the Engine Does Not Undo Your Work
A pair can be correct in the DAW and wrong in the build. Runtime processing tends to compress exactly the distinction the files were designed to carry.
Routing comes first. Heal and damage should not share a
bus with a shared limiter: when both fire in the same
frame, the limiter ducks the second one, which flips the
intended hierarchy. Separate groups under a shared master
hold the balance. In Unity that means two
AudioMixerGroup assets and an
AudioSource.outputAudioMixerGroup assignment
per prefab; in Wwise, separate buses under one parent; in
FMOD, separate buses in the event.
Bus, Ducking and Variation
Pitch randomization is another place where symmetry breaks. A random offset of plus or minus 50 cents on a hit is harmless, because the contour still falls. The heal should stay tighter, around plus or minus 25 cents, so the interval at the top of the rise stays recognizable; wide randomization on a fifth can land the cue on a tritone and leave a warm heal unresolved.
Ducking, if it is used at all, should be directional. Pulling the heal down while a hit plays is reasonable. Pulling the hit down while a heal plays removes the loss cue exactly when the player needs it. When the two cues overlap, a fixed offset is often cleaner than dynamic ducking: schedule the heal 60 to 80 ms after the hit so the contours are heard in sequence rather than summed.
Render settings matter less than expected, but they are not free. A 48 kHz, 24-bit source is a safe default, and Opus at 96 kbps or Vorbis at quality 0.6 hold a 3 ms attack well enough. Heavily compressed Vorbis at low quality can soften that attack toward the heal ramp, which quietly collapses one of the six axes.
Then test the pair rather than the files. Kill the screen, randomize the order, and ask one question per cue: did that help you or hurt you. If the answer takes a beat, the axes are not far enough apart. Run three passes: solo, with combat music, and on a phone speaker at half volume, where the low end the heal relies on is gone.
A pair that survives all three is close to done. The target is not two interesting sounds. It is two sounds that cannot be filed under the same heading.