Skip to content

Heliograph — Audio Production Guide

Everything you need to generate the game's audio in ElevenLabs (voices + sound effects) and drop it straight into the project. Filenames here are the exact paths the game will load from, so naming them correctly means zero rework when we wire them up.

Voice rule (per design): the machines only speak when hostile. Dormant Watchers and the funny "talk to me" lines stay text-only. ACE and THE ORACLE are story narration (optional voice). The Watchers' hostile barks + their chatter are the priority.


0. Conventions

ThingChoice
Short SFX / one-shots.wav, 44.1 kHz, mono
Voice lines.ogg (Vorbis), 44.1 kHz, mono
Ambience / music loops.ogg, 44.1 kHz, stereo, seamless loop
Loudnessnormalize voice/SFX to ~ -16 LUFS, ambience ~ -23 LUFS
Folder rootassets/game/audio/

ElevenLabs exports MP3. Convert with ffmpeg:

bash
# voice / ambience -> ogg
ffmpeg -i in.mp3 -ac 1 -ar 44100 -q:a 5 out.ogg
# short sfx -> wav
ffmpeg -i in.mp3 -ac 1 -ar 44100 out.wav

Folder layout to create as you fill it:

assets/game/audio/
  voice/
    watcher/      # hostile barks + chatter (PRIORITY)
    oracle/       # optional narration voice
    ace/          # optional narration voice
  sfx/            # one-shots
  ambience/       # loops

1. Voices

1.1 THE WATCHER — hostile sentries (PRIORITY)

ElevenLabs → Voice Design (Text to Voice). Prompt:

A cold, emotionless autonomous war-machine. Genderless, metallic, ring-modulated robotic voice with a harsh electronic timbre, transmitted through a slightly damaged speaker. Flat, clipped, staccato military cadence. Menacing, mechanical, no warmth. Mid-low pitch.

Preview text to lock the voice: "Intruder detected. Exterminate. Exterminate."

Recommended TTS settings: Stability 75–90% (keeps the robotic monotone consistent), Similarity 80%, Style 0–15%, Speaker Boost on, model eleven_multilingual_v2. Generate 2 takes per line for variety where noted. Optional post: light bit-crush / ring-mod / short slap-delay for extra "machine".

A. Detection barks — played when a Watcher acquires you (warning → fire)

LineFileDelivery
"EXTERMINATE…"voice/watcher/bark_exterminate_warn_01.oggdrawn-out, rising, charging up
"EXTERMINATE!!"voice/watcher/bark_exterminate_fire_01.oggsharp, final, on the shot
"EXTERMINATE!! EXTERMINATE!!"voice/watcher/bark_exterminate_fire_02.oggdouble, frenzied
"Intruder detected."voice/watcher/bark_intruder_01.oggflat, certain
"Target exposed."voice/watcher/bark_target_exposed_01.oggclipped
"Courier located."voice/watcher/bark_located_01.oggflat
"You are in the light. You are seen."voice/watcher/bark_seen_01.oggslow, ominous
"Signal severed."voice/watcher/bark_severed_01.oggcold, on a kill

B. Search / lost-target lines — played when you escape into shadow

LineFileDelivery
"Target lost. Initiate search."voice/watcher/search_initiate_01.oggbrisk, procedural
"Find them. Find the light."voice/watcher/search_find_01.ogginsistent
"It fled to shadow. Shadow is temporary."voice/watcher/search_shadow_01.oggpatient menace
"Where is the courier? Where is the light?"voice/watcher/search_where_01.oggscanning
"It cannot hide in the dark forever."voice/watcher/search_forever_01.ogglow, certain

C. Watcher-to-Watcher chatter — ambient, hostile

Render each exchange as one file containing both units (put a line break / a beat between them; if you can, nudge pitch or pan slightly so they read as two machines). These play occasionally between active Watchers.

ExchangeFile
— "Unit Six, report." / — "Sweeping. The light has moved again."voice/watcher/chatter_report_01.ogg
— "Do you see it?" / — "I see only shadow. Shadow hides the crime."voice/watcher/chatter_shadow_01.ogg
— "The Oracle is awake." / — "Then we do not sleep."voice/watcher/chatter_oracle_01.ogg
— "It carries our light away." / — "It must not reach the crown."voice/watcher/chatter_crown_01.ogg
— "Why does it run?" / — "They always run. They never arrive."voice/watcher/chatter_run_01.ogg
— "Exterminate on contact." / — "Confirmed. Exterminate on contact."voice/watcher/chatter_confirm_01.ogg

D. Idle hostile mutters — single Watcher, ambient

LineFile
"The light must not move."voice/watcher/idle_light_01.ogg
"All apertures: hold the line."voice/watcher/idle_hold_01.ogg
"Forty years. We do not tire."voice/watcher/idle_tire_01.ogg

1.2 THE ORACLE — station mind (optional narration voice)

Voice Design prompt:

An ancient, vast machine intelligence speaking as if from everywhere at once. Deep, calm, resonant synthetic voice with long reverb tails and a faint detuned chorus, as though many voices speak as one. Genderless, melancholic, patient, sorrowful. Very slow.

Settings: Stability 85%, Similarity 80%, Style 0%, slow. Record the Oracle lines from scripts/core/story_script.gd (the THE ORACLE lines in each reveal). Suggested files: voice/oracle/reveal1_*.oggreveal4_*.ogg, plus voice/oracle/turn_exterminate.ogg for "EXTERMINATE. EXTERMINATE!"

1.3 ACE — handheld companion (optional narration voice)

Voice Design prompt:

A small handheld computer companion. Warm but synthetic, mid-range, clear diction with a dry, understated wit and faint digital artifacts on the consonants. Calm, reassuring, a little weary.

Settings: Stability 50–65%, Style 20% (for personality), Speaker Boost on. Record ACE's lines from story_script.gd (intro + the four reveals) as voice/ace/intro_01.ogg … and voice/ace/reveal1.ogg


2. Sound effects (ElevenLabs → Sound Effects)

Prompt + duration + whether it loops. Keep Prompt Influence high for the mechanical ones.

EventFilePromptDurLoop
Relay activatesfx/relay_activate.wav"heavy brass switch thunk followed by a bright electrical surge and a beam of light igniting, sci-fi"1.5sno
Sun beam ignitessfx/beam_ignite.wav"a shaft of sunlight powering on, warm glassy hum swelling up, magical but mechanical"1.2sno
Terminal powers onsfx/terminal_online.wav"old computer terminal booting, rising power hum and a soft confirmation chime"1.5sno
Glyph discoveredsfx/glyph_found.wav"single tuned telegraph key click with a short bright resonant ping"0.5sno
Cipher solvedsfx/cipher_solved.wav"four-note ascending telegraph signal phrase, hopeful, resolving"2sno
Charge fill (in light)sfx/charge_fill.wav"quiet rising electrical harmonic, energy refilling, gentle"1.5sno
Low charge ticksfx/low_charge_tick.wav"single hollow mechanical tick, warning, sparse"0.3sno
Dashsfx/dash.wav"fast camera-shutter snap with a short whoosh of cut air"0.4sno
Jumpsfx/jump.wav"soft mechanical servo hop, light"0.3sno
Landsfx/land.wav"soft metallic footstep landing on stone"0.3sno
Checkpointsfx/checkpoint.wav"calm two-note confirmation chime, mirror resonance, safe"1sno
Watcher acquiresfx/watcher_acquire.wav"two-stage relay click then a rising 0.3 second alarm tone, threatening"1sno
Watcher firesfx/watcher_fire.wav"sharp electric beam discharge zap, sci-fi laser, aggressive"0.5sno
The turn (Watchers go hostile)sfx/watchers_hostile_stinger.wav"ominous mechanical klaxon snap, power surging through a whole facility, dread stinger"2.5sno
Death (cell collapse)sfx/death.wav"light collapsing inward to a point with a descending power-down whine"1.2sno
Win beam firessfx/win_beam.wav"an enormous beam of light launching skyward, triumphant whoosh and resonant boom"3sno
Dialogue letter blipsfx/text_blip.wav"very short soft digital typewriter blip, neutral"0.08sno
Dialogue advancesfx/text_advance.wav"soft UI click confirm, digital"0.2sno
Menu selectsfx/ui_select.wav"subtle UI tick, brass"0.15sno
Menu confirmsfx/ui_confirm.wav"warm UI confirm chime"0.3sno

3. Ambience / music loops

ElevenLabs Sound Effects can make ~10–20s loopable beds (set a longer duration and ask for "seamless loop").

BedFilePrompt
Sunlight ambienceambience/amb_sunlight.ogg"seamless loop, warm electrical hum, distant glass resonance, sparse wind, peaceful but charged"
Shadow ambienceambience/amb_shadow.ogg"seamless loop, low dark room tone, distant relay clicks, muffled, tense, reduced highs"
Hostile tension bedambience/amb_hostile.ogg"seamless loop, low pulsing menace, mechanical heartbeat, hunting, after the alarm"
Title / win theme (optional)ambience/music_theme.ogg"slow melancholic solar-noir synth theme, brass-like pads, hopeful end, loopable"

4. How it plugs into the game (counts & behaviour)

When you have the files, here's how they get used (so you know what's essential):

  • Watcher barks (A): played on the Watcher's WARNING (warn line) and fired (fire line) states, and on the turn (watchers_turned_hostile). Picked at random from the pool for variety. → minimum: 1 warn + 1 fire file.
  • Search lines (B): played when a Watcher drops its target (player reaches shadow) and returns to sweeping.
  • Chatter (C) + mutters (D): an ambient timer on hostile levels plays one every ~12–20s from an on-screen Watcher.
  • SFX (2): hooked to the existing signals — relay activate, beam ignite, glyph discovered, cipher solved, dash, death, checkpoint, the turn stinger, win beam. These map 1:1 onto code that already emits those events.
  • Ambience (3): sunlight bed crossfades up with exposure; shadow bed under it; hostile bed replaces shadow bed after the turn.

I'll add a small AudioDirector autoload + an audio bus layout that loads these paths and no-ops gracefully for any file not yet present, so you can add audio incrementally.


5. Minimum viable set (if you're short on time before the deadline)

Generate these 12 first — they cover 90% of the impact:

  1. bark_exterminate_warn_01.ogg
  2. bark_exterminate_fire_01.ogg
  3. bark_intruder_01.ogg
  4. search_find_01.ogg
  5. chatter_run_01.ogg
  6. sfx/relay_activate.wav
  7. sfx/watchers_hostile_stinger.wav
  8. sfx/watcher_fire.wav
  9. sfx/cipher_solved.wav
  10. sfx/death.wav
  11. ambience/amb_shadow.ogg
  12. ambience/amb_hostile.ogg