Sharing the folder layout that finally stopped me from hunting filenames mid-fight when an earth mage kit grew past a handful of one-shots.

Problem: boulder, spear, pebble, wall, bury and quake each wanted their own loudness curve. A flat “rock_hit_01” pile made the 30th boulder of a fight sound copy-pasted, and bury ticks fought the quake bed for headroom.

What I kept:

  1. One lifecycle spine in folders — cast charge → release → fly-by → sized impacts → quake/rockfall tiers → bury & crush DoT → rock wall & earth aura → crumble & fizzle → combo ladder → UI cues → loops — so the game picks a family, not a random rock.
  2. Size the impact and quake files themselves (small / medium / large and five quake tiers) instead of riding a bus at runtime. The helper only chooses a file.
  3. Ship 15 seamless loops (debris field, aura, wall, cracked ground, held charge, …) for sustained spells; fade in/out beats retriggering one-shots every frame.
  4. Keep the free Lite on the same relative paths and names as the full set, so a prototype can swap the folder later without renaming calls.

Counts from the shipping packs: full set 198 sounds (most one-shots in 5 variations; 15 seamless loops); Lite 28 sounds (one take each) covering charge, three releases, fly-by/dissipate, three impact sizes, two quake tiers, bury/crush/crumble, wall & aura cues, combo 1–3, two UI cues and two loops. WAV 48 kHz/24-bit + OGG, plus Godot 4 EarthSfx autoload and Unity helper with the same call shape as Emberbrand / Frostbite (play, impact, combo, loop).

Free Lite to try the layout (same names as full):

https://yetiancai.itch.io/terrastone-earth-rock-sfx-free-lite

I’m the creator. Sounds are generated by code written with AI assistance. AI tool: Grok Bot coding assistant (used only to write the generation code; current version as of Oct 2026).

If you ship earth magic, which part of the cast is hardest to make read — the charge, the impact weight, or the sustained rumble?