# Asset credits — UNCRoyale

Every third-party asset shipped in `assets/` is **CC0 1.0 (public domain)** (the UI font in `../fonts/` is SIL OFL 1.1, see below) — free for commercial use and
redistribution, attribution not required (given here anyway, with thanks). Nothing from Supercell / Clash Royale is used.
Models were modified (weapons removed/attached, recoloured, re-rigged into composites, new procedural animations,
team-colour material split) and optimised by `tools/build-assets.mjs`.

## 3D models

| Used for | Source asset | Author | License | URL |
|---|---|---|---|---|
| knight, king (tower) base rig | KayKit Character Pack: Adventurers 1.0 — Knight, Barbarian, Mage, Rogue, Rogue_Hooded (+ their animation sets, arrow) | Kay Lousberg (KayKit) | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Character-Pack-Adventures-1.0 · https://kaylousberg.com |
| archers, princess-tower archer | KayKit Adventurers — Rogue_Hooded + 1H crossbow | Kay Lousberg | CC0 1.0 | (same) |
| musketeer | KayKit Adventurers — Rogue | Kay Lousberg | CC0 1.0 | (same) |
| giant, boar rider's rider, king figure | KayKit Adventurers — Barbarian | Kay Lousberg | CC0 1.0 | (same) |
| wizard | KayKit Adventurers — Mage | Kay Lousberg | CC0 1.0 | (same) |
| arrow projectile | KayKit Adventurers — arrow.gltf | Kay Lousberg | CC0 1.0 | (same) |
| skeleton_army | KayKit Character Pack: Skeletons 1.0 — Skeleton_Minion + Skeleton_Blade | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Character-Pack-Skeletons-1.0 |
| princess_tower, king_tower bodies, flags, tower_ruins, arena border walls, decor (trees, rocks, hills, mountains, tents, crates, barrels, weapon rack, target, lumber, water lily) | KayKit Medieval Hexagon Pack 1.0 | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Medieval-Hexagon-Pack-1.0 |
| border banners | KayKit Dungeon Remastered 1.0 — banner_patternA_yellow | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Dungeon-Remastered-1.0 |
| goblins | "Orc" (Ultimate Monsters) | Quaternius | CC0 1.0 | https://poly.pizza/m/5vO2YJsPEf · https://quaternius.com |
| dragon_whelp | "Dragon" (Ultimate Monsters) | Quaternius | CC0 1.0 | https://poly.pizza/m/3rUm1cN3yp |
| boar_rider's boar (recoloured, tusks/mane/saddle + procedural gallop/attack/death added) | "Pig" (Farm Animal Pack) | Quaternius | CC0 1.0 | https://poly.pizza/m/TNvG3QUFlp |
| cannon, king-tower cannon | "Cannon" (Pirate Kit) | Quaternius | CC0 1.0 | https://poly.pizza/m/J15vlPVvKK |
| musketeer's musket | "Rifle" (Pirate Kit) | Quaternius | CC0 1.0 | https://poly.pizza/m/neEjwx9bBJ |
| king's crown | "Crown" (Ultimate RPG Items) | Quaternius | CC0 1.0 | https://poly.pizza/m/i0PZVuVlYv |
| bridges | nature-kit `bridge_woodRound` | Kenney (kenney.nl) | CC0 1.0 | https://kenney.nl/assets/nature-kit |
| cannonball, fireball, dragon_fire, musket_shot, magic_bolt, cannon plinth/pennant, boar tusks/mane/saddle | generated procedurally by `tools/lib/projectiles.mjs` / `anim.mjs` | UNCRoyale | CC0 1.0 | — |
| **ASSETS-2:** shieldmaiden, longbow_duchess (+ helmet/tiara/outfit recolours) | KayKit Adventurers — Rogue (+ axe_1handed, shield_round_color) | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Character-Pack-Adventures-1.0 |
| raider, tunneler (miner helmet/lamp added) | KayKit Adventurers — Barbarian | Kay Lousberg | CC0 1.0 | (same) |
| iron_colossus (re-proportioned rig, dark-iron recolour, horns/pauldrons/eyes added), lancer_prince rider | KayKit Adventurers — Knight (+ sword_2handed) | Kay Lousberg | CC0 1.0 | (same) |
| rattlebones | KayKit Skeletons — Skeleton_Warrior + Skeleton_Axe + Skeleton_Shield_Small_A | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Character-Pack-Skeletons-1.0 |
| chests (all 10 types, recoloured; lid `Open` clip added), flame_pillar stone column, arena-banner torches/banners/coins | KayKit Dungeon Remastered 1.0 — chest, pillar, torch_lit, banner_*, coin_stack_* | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Dungeon-Remastered-1.0 |
| raider_hut house + flags + props; arena-banner buildings/trees/rocks/mountains | KayKit Medieval Hexagon Pack — building_home_A, flag, barrel, crate, … | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Medieval-Hexagon-Pack-1.0 |
| arena banners (Rattlebone Ravine, Obsidian Keep): graves, crypt, bones, dead trees, lanterns | KayKit Halloween Bits 1.0 | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Halloween-Bits-1.0 |
| slingers (recoloured, club replaced by a sling, team cape) | "Blue Demon" (Ultimate Monsters) | Quaternius | CC0 1.0 | https://poly.pizza/m/S7jYW6Amye |
| cave_bats | "Bat" | Quaternius | CC0 1.0 | https://poly.pizza/m/hNO9XvjlKa |
| ember_wyrm (recoloured, emissive) | "Dragon Evolved" (Ultimate Monsters) | Quaternius | CC0 1.0 | https://poly.pizza/m/LlwD0QNUPj |
| lancer_prince mount (legs/neck re-proportioned, caparison added) | "White Horse" (Animated Animals) | Quaternius | CC0 1.0 | https://poly.pizza/m/bEdE4rmZy9 |
| mini_golem (rework: re-textured stone golem, boulders/moss/crystal added, Deploy clip) | "Giant" (Ultimate Monsters) | Quaternius | CC0 1.0 | https://poly.pizza/m/BldaiPtyJa |
| longbow_duchess bow | "Wooden Bow" | Quaternius | CC0 1.0 | https://poly.pizza/m/QnpqjLSKFU |
| tunneler pickaxe | "Stone Pickaxe" | Quaternius | CC0 1.0 | https://poly.pizza/m/pvOeJ5EcpW |
| sky_balloon bombs, `bomb` projectile | "Bomb" | Quaternius | CC0 1.0 | https://poly.pizza/m/qGUAks6IHQ |
| raider_hut skull | "Skull" | Quaternius | CC0 1.0 | https://poly.pizza/m/DJT7N0HuVB |
| arena banners only (rendered, not shipped as models) | Quaternius "Tree Lava", "Big Crystal", "Crystal", "Sail Boat", "Boat", "Dock Long", "Cart", "Ice Block", "Large Bone", "Pine Tree with Snow", "Cactus", "Palm Tree"; Kenney nature-kit + castle-kit pieces | Quaternius / Kenney | CC0 1.0 | https://poly.pizza (ids in `tools/fetch-assets.mjs`) · https://kenney.nl/assets/castle-kit |
| sky_balloon, flame_pillar brazier/flames, lance, helmets, pebble, long_arrow, fire_beam, shock_bolt, chest trims | generated procedurally (`tools/lib/structures2.mjs`, `lancer.mjs`, `units2.mjs`, `projectiles.mjs`, `chests.mjs`) | UNCRoyale | CC0 1.0 | — |
| **TOWER-TROOPS:** princess_tower_base (tower body without figure) | KayKit Medieval Hexagon Pack 1.0 — building_tower_base | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Medieval-Hexagon-Pack-1.0 |
| tt_tower_archer (the princess-tower archer, extracted) | KayKit Adventurers — Rogue_Hooded + 1H crossbow | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Character-Pack-Adventures-1.0 |
| tt_tower_gunner gunner (helmet replaced by a procedural shako, linstock) | KayKit Adventurers — Knight | Kay Lousberg | CC0 1.0 | (same) |
| tt_blade_baroness (violet/silver recolour, short cape, procedural cavalier hat, knives kept) | KayKit Adventurers — Rogue | Kay Lousberg | CC0 1.0 | (same) |
| tt_battle_cook (procedural toque, apron, ladle, frying pan + pancake, hearth + pot) | KayKit Adventurers — Barbarian | Kay Lousberg | CC0 1.0 | (same) |
| swivel cannon, pennant, cannonballs, hats, apron, cookware, `dagger` / `cleaver` / `pancake` projectiles | generated procedurally (`tools/lib/towertroops.mjs`) | UNCRoyale | CC0 1.0 | — |
| **ASSETS-3 (live tower set v2):** `princess_tower_base_v2`, `princess_tower_v2`, `king_tower_v2`, `tower_ruins_v2` bodies (bevelled stone blocks, crenellations, banners, ladders, doors, crown plaque, rubble) | generated procedurally (`tools/lib/towers2.mjs`), original design | UNCRoyale | CC0 1.0 | — |
| king / archer / cannon on the v2 towers | KayKit Adventurers (Barbarian, Rogue_Hooded), Quaternius Crown + Pirate Kit Cannon — same parts as the v1 towers | Kay Lousberg · Quaternius | CC0 1.0 | (see above) |
| **ASSETS-4 (Phase 2):** gilded_paladin (gold-plated, crest, sun pauldrons), quake_knight (bulked rig, domed visor helm, twin maces), iron trims | KayKit Adventurers — Knight (+ sword_2handed_color) | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Character-Pack-Adventures-1.0 |
| culverin_giant (hand culverin, crown, tabard), battering_ram carriers | KayKit Adventurers — Barbarian | Kay Lousberg | CC0 1.0 | (same) |
| veil_queen (violet recolour, silver crown, 2H crossbow) | KayKit Adventurers — Rogue_Hooded | Kay Lousberg | CC0 1.0 | (same) |
| bone_monarch (crown, bone pauldrons, skull mace); `skeleton` = the skeleton_army glb | KayKit Skeletons — Skeleton_Warrior / Skeleton_Minion | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Character-Pack-Skeletons-1.0 |
| wing_imps, brute_imp (recoloured, procedural wings, iron armour) | "Blue Demon" (Ultimate Monsters) | Quaternius | CC0 1.0 | https://poly.pizza/m/S7jYW6Amye |
| rime_golem (ice re-skin, ice blocks, icicles) | "Yeti" (Ultimate Monsters) | Quaternius | CC0 1.0 | https://poly.pizza/m/ceRHrn8HHE |
| stone_behemoth + stoneling (re-proportioned, granite + crystals) | "Giant" (Ultimate Monsters) | Quaternius | CC0 1.0 | https://poly.pizza/m/BldaiPtyJa |
| magma_hound (basalt / lava re-skin, collar, plates, drips) | "Dragon" (bat-dragon) | Quaternius | CC0 1.0 | https://poly.pizza/m/VBvzjFIYws |
| cinder_pup (ember re-skin) | "Bat" | Quaternius | CC0 1.0 | https://poly.pizza/m/hNO9XvjlKa |
| elixir_well crystal | "Gem Pink" | Quaternius | CC0 1.0 | https://poly.pizza/m/PJnKvWluqs |
| bone_monarch mace head, plague_cloud portrait | "Skull" | Quaternius | CC0 1.0 | https://poly.pizza/m/DJT7N0HuVB |
| boulder_mortar catapult, siege_ballista, rolling_trunk `trunk` log | Kenney Castle Kit — siege-catapult, siege-ballista, tree-log (recoloured) | Kenney | CC0 1.0 | https://kenney.nl/assets/castle-kit |
| crypt_stone (gravestone, candles, bones, skull), `grave_fx` tombstone | KayKit Halloween Bits 1.0 | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Halloween-Bits-1.0 |
| elixir_well | KayKit Medieval Hexagon Pack — building_well_blue | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Medieval-Hexagon-Pack-1.0 |
| `keg` projectile | KayKit Dungeon Remastered — barrel_small | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Dungeon-Remastered-1.0 |
| frost_wisp, storm_coil, battering_ram log + ram head, all Phase-2 props (crowns, maces, wings, culverin, helms), projectiles imp_spit / boulder / rocket / snowball / bolt / crossbow_bolt / magma_glob / ember_spit, spell visual frost_nova_fx; portrait props (war drum, snowflake) | generated procedurally (`tools/lib/units3.mjs`, `structures3.mjs`, `projectiles3.mjs`, `portraitProps.mjs`) | UNCRoyale | CC0 1.0 | — |
| **ASSETS-4b (Phase 2b):** rocketeer (goggles, pigtails, striped launcher, firework quiver), rogue (bandit mask, loot sack, daggers) | KayKit Adventurers — Rogue | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Character-Pack-Adventures-1.0 |
| storm_mage (storm-blue robe, spiky glowing hair, collar, lightning-rod pauldrons, hand orbs), dusk_witch (witch hat, bat wings, crescent staff) | KayKit Adventurers — Mage | Kay Lousberg | CC0 1.0 | (same) |
| lotus_monk (saffron cowl, prayer beads, lotus halo, bo staff) | KayKit Adventurers — Rogue_Hooded | Kay Lousberg | CC0 1.0 | (same) |
| deep_delver (mining helmet + lamp, fuel tank, drill), axe_reaper (executioner hood, apron, double axe) | KayKit Adventurers — Knight | Kay Lousberg | CC0 1.0 | (same) |
| scattergunner (coonskin cap, bandolier, bear trap, blunderbuss) | KayKit Adventurers — Barbarian | Kay Lousberg | CC0 1.0 | (same) |
| blowdart_goblin (blowpipe, feather headband, leaf skirt), goblin_hulk (bulked, rider platform, pauldron) | "Orc" | Quaternius | CC0 1.0 | https://poly.pizza/m/5vO2YJsPEf |
| stone_roller (mountain brute re-skin, boulders, harness) | "Yeti" (Ultimate Monsters) | Quaternius | CC0 1.0 | https://poly.pizza/m/ceRHrn8HHE |
| war_boars (armoured boar: chanfron, tusks, spiked collar, caparison) | "Pig" (Farm Animal Pack) | Quaternius | CC0 1.0 | https://poly.pizza/m/TNvG3QUFlp |
| `barrel` projectile (raider_barrel) | KayKit Dungeon Remastered — barrel_large | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Dungeon-Remastered-1.0 |
| spark_sprite, goblin_borer, all Phase-2b props, projectiles firework / dart / axe / rolling_boulder / delver_bomb, spell visual tremor_fx | generated procedurally (`tools/lib/units4.mjs`, `structures4.mjs`, `projectiles4.mjs`) | UNCRoyale | CC0 1.0 | — |
| **ASSETS-4c (Phase 2c):** hex_matron (plum hood, hooked nose, crone hair, potion belt, crooked staff with hex lantern) | KayKit Adventurers — Rogue_Hooded | Kay Lousberg | CC0 1.0 | https://github.com/KayKit-Game-Assets/KayKit-Character-Pack-Adventures-1.0 |
| angler (oilskin, sou'wester, pipe, rope coil, life buoy, anchor) | KayKit Adventurers — Barbarian | Kay Lousberg | CC0 1.0 | (same) |
| hex_boar (cursed boar: violet hide, glowing eyes + rune, bone spikes, ghost-flame mane, team shroud) | "Pig" (Farm Animal Pack) | Quaternius | CC0 1.0 | https://poly.pizza/m/TNvG3QUFlp |
| volt_wagon, bulwark_cart, bulwark_cannon, firebird, firebird_egg, ember_kiln, kiln_spirit, all Phase-2c props, projectiles volt_blast / hex_orb | generated procedurally (`tools/lib/units5.mjs`, `structures5.mjs`, `projectiles5.mjs`) | UNCRoyale | CC0 1.0 | — |

## Card portraits, chest renders, arena banners, UI icons
- `cards/*.webp` — rendered from the models above by `tools/render-cards.mjs` (headless Chrome + three.js); legendary frame, the champion frame (ASSETS-4) and the tower-troop castle-wall frame drawn procedurally. CC0.
- `chests/*.webp` and `arenas/*.webp` — rendered by `tools/render-meta.mjs` from the models listed above. CC0.
- `ui/*.svg|png` (gold, gem, trophy, crown, star, xp, elixir, card_back) — hand-authored SVG in `tools/build-ui.mjs`, UNCRoyale, CC0.

## Font (`packages/client/public/fonts/`)
| File | Font | Author | License | URL |
|---|---|---|---|---|
| LilitaOne-Regular.woff2 (converted from TTF with wawoff2) | Lilita One | Juan Montoreano | SIL Open Font License 1.1 (full text: `fonts/LilitaOne-OFL.txt`) | https://github.com/google/fonts/tree/main/ofl/lilitaone |

## Particle / VFX textures
`vfx/*.png` — Kenney **Particle Pack** (CC0 1.0), resized. https://kenney.nl/assets/particle-pack
`vfx/lightning.png`, `vfx/beam.png`, `vfx/shock_ring.png` — generated from SVG in `tools/build-vfx.mjs` (UNCRoyale, CC0).

## Sound effects (`sfx/*.mp3`, converted/trimmed/normalised with ffmpeg)
| Source | Author | License | URL |
|---|---|---|---|
| Impact Sounds, RPG Audio, UI Audio, Interface Sounds, Music Jingles, Sci-fi Sounds, Voiceover Pack | Kenney | CC0 1.0 | https://kenney.nl/assets/impact-sounds · /rpg-audio · /ui-audio · /interface-sounds · /music-jingles · /sci-fi-sounds · /voiceover-pack |
| 80 CC0 RPG SFX (blade, spell, spell_fire, creature_die, stones, item_gem) | rubberduck | CC0 1.0 | https://opengameart.org/content/80-cc0-rpg-sfx |

Per-key source files are listed in `tools/build-audio.mjs` (`SFX_MAP`).

### AUDIO workstream additions (`sfx/<category>/*.mp3`, `music/battle_fast.mp3`)
Built by `tools/build-audio.mjs` from `tools/lib/audio-sfx.mjs`: sources are cut, layered, pitch-shifted, filtered,
normalised and partly **synthesised** (bow twangs, whooshes, stomps, horns, chimes, drum rolls, crackle, the
legendary card "choir"). All sources below are **CC0 1.0** (checked on each page, fetched by `tools/fetch-audio.mjs`).

| Source (OpenGameArt unless noted) | Author | Used for | URL |
|---|---|---|---|
| Male Grunt/Yelling sounds | HaelDB | knight/wizard/raider/boar/lancer lines, crowd cheer & chants, king | https://opengameart.org/content/male-gruntyelling-sounds |
| grunts of male death and pain | thebardofblasphemy | `death_human`, `death_boar` | https://opengameart.org/content/grunts-male-death-and-pain |
| RPG Voice Starter Pack (female) | cicifyre | archers, musketeer, shieldmaiden, duchess, female deaths, emotes | https://opengameart.org/content/female-rpg-voice-starter-pack |
| Goblins Sound Pack | artisticdude | goblin squeaks / deaths | https://opengameart.org/content/goblins-sound-pack |
| RPG Sound Pack (NPC giant/ogre/beetle, sword unsheathe, armour) | artisticdude | giant, golem, bats bite, emotes | https://opengameart.org/content/rpg-sound-pack |
| 80 CC0 creature SFX / 80 CC0 creature SFX 2 | rubberduck | dragon roars, imps, beasts' deaths, snore, emotes | https://opengameart.org/content/80-cc0-creature-sfx · https://opengameart.org/content/80-cc0-creture-sfx-2 |
| Tiny creatures sounds (laugh) | fvcalderan | goblin giggle, rattlebones, emotes | https://opengameart.org/content/tiny-creatures-sounds |
| Boar | fvcalderan | boar rider, river jump snort | https://opengameart.org/content/boar-0 |
| Evil laughter | qubodup | king laugh / hehe emotes | https://opengameart.org/content/evil-laughter |
| Group giggling | Nocturnal_Vanguard | goblin cackle emote | https://opengameart.org/content/group-giggling |
| Oooooooooooooo | Nocturnal_Vanguard | crowd "ooh", cry/yawn/thinking emotes | https://opengameart.org/content/oooooooooooooo |
| Evil cackle laugh 1 | Nocturnal_Vanguard | Dusk Witch cackle / death (AUDIO-2b) | https://opengameart.org/content/evil-cackle-laugh-1 |
| Large wings flap | AntumDeluge | dragon / wyrm wings | https://opengameart.org/content/large-wings-flap |
| Dragon flap | VishwaJai | magma hound wings (AUDIO-2) | https://opengameart.org/content/dragon-flap-0 |
| Bat screeches | AntumDeluge | cave bats | https://opengameart.org/content/bat-screeches |
| Gorilla sounds | AntumDeluge | angry king emote | https://opengameart.org/content/gorilla-sounds |
| Balloon sounds | AntumDeluge | sky balloon inflate / pop, emote pops | https://opengameart.org/content/balloon-sounds |
| Fire crackling | AntumDeluge | beam loop | https://opengameart.org/content/fire-crackling |
| Bones rattle | congusbongus | skeletons, rattlebones, bone deaths & steps | https://opengameart.org/content/bones-rattle |
| Skeleton SFX short pack | Colodical | skeleton horde line | https://opengameart.org/content/skeletonsfxshortpack |
| Horse trotting | EZduzziteh | hoof steps, gallop loop, lancer, river jump push-off | https://opengameart.org/content/horse-trotting |
| Electricity game sound pack | faxcorp | shock bolt, stun | https://opengameart.org/content/electricity-game-sound-pack |
| CC0 deep monster roar | trazzz123 | iron colossus | https://opengameart.org/content/cc0-deep-monster-roar |
| Big scary troll sounds | Darsycho | stone behemoth roar / death (AUDIO-2) | https://opengameart.org/content/big-scary-troll-sounds |
| Magic spell SFX | JaggedStone | wizard shimmer, spell deploy, wizard poof | https://opengameart.org/content/magic-spell-sfx |
| 20 sword sound effects (clashes) | StarNinjas | `hit_blade`, challenge | https://opengameart.org/content/20-sword-sound-effects-attacks-and-clashes |
| Crowd shouting/speaking ambience | StarNinjas | crowd bed (cheer, chants, roar) | https://opengameart.org/content/crowd-shoutingspeaking-ambience |
| Applause in a large hall | eXpl0it3r | crowd cheer / chants | https://opengameart.org/content/applause-in-a-large-hall-or-church |
| Swishes sound pack, Air whoosh | artisticdude, pyranostudios | Lotus Monk palm strikes, Axe Reaper throw (AUDIO-2b); other whooshes are synthesised | https://opengameart.org/content/swishes-sound-pack · https://opengameart.org/content/air-whoosh |
| 80 CC0 RPG SFX | rubberduck | blades, fire spells, stones, coins, gems, wood | https://opengameart.org/content/80-cc0-rpg-sfx |
| Impact Sounds, RPG Audio, Interface Sounds, Sci-fi Sounds, Digital Audio, Music Jingles, Voiceover Pack (numbers for the crowd countdown, "hurry up", "final round", "power up" in the triple-elixir stinger), **Casino Audio** (card slides/flips, chips) | Kenney | CC0 1.0 | https://kenney.nl/assets/casino-audio (+ the packs above) |

`music/battle_fast.mp3` is "Battle Theme A" (cynicmusic, CC0), a semitone up and about 6 % faster.

### AUDIO-2 additions (Phase 2 cards, SIM-3 mechanics, champion cues, arena ambience — `sfx/{units,attack,hit,death,move,loops,mech,spell,champ,ui,amb}/*.mp3`)
Built by `tools/build-audio.mjs` from `tools/lib/audio-sfx-p2.mjs` (cut, layered, pitch-shifted, filtered, looped and
normalised; partly **synthesised**: ratchets, whistles, war drums, bloops, drips, crystal hums, the Veil Queen's
vocoded whisper, the Bone Monarch choir, shimmer / sparkle chimes). The AUDIO sources above are reused (voices, bones,
wings, creatures, impacts). New sources, all **CC0 1.0** (checked on each page, fetched by `tools/fetch-audio.mjs`):

| Source (OpenGameArt) | Author | Used for | URL |
|---|---|---|---|
| Ambient bird sounds | isaiah658 | bird accents (meadow, forest, citadel) | https://opengameart.org/content/ambient-bird-sounds |
| Park ambiences (birds, river, wind) | Thimras | meadow / forest / royal / harbour / springs / moon beds | https://opengameart.org/content/park-ambiences |
| Amb. morning sounds | Kresiek The Furry | (downloaded, reserve) | https://opengameart.org/content/amb-morning-sounds-perfect-loop |
| Beach ocean waves | jasinski | harbour bed + wave accents | https://opengameart.org/content/beach-ocean-waves |
| Solo seagull sound effects | Rango Mango | gull accents | https://opengameart.org/content/solo-seagull-sound-effects |
| Amb. rain loop 1 | Kresiek The Furry | storm bed | https://opengameart.org/content/amb-rain-loop-1 |
| Rain (long) with thunder | WuxiaScrub | storm bed, distant thunder accents | https://opengameart.org/content/rain-long-thunder |
| Crickets ambient noise (loopable) | Wolfgang_ | jungle / crypt / moon beds | https://opengameart.org/content/crickets-ambient-noise-loopable |
| Bird, cricket, frog and mosquito sounds | Aj_ | jungle birds, owl accents | https://opengameart.org/content/birdcricketfrog-and-mosquito-sounds |
| Frog croaks | EZduzziteh | frog accents | https://opengameart.org/content/frog-croaks |
| Dripping water loop | Independent.nu | cave bed | https://opengameart.org/content/dripping-water-loop |
| Wind whoosh loop | SketchMan3 | snow / sky beds, whirlwind | https://opengameart.org/content/wind-whoosh-loop |
| wind1 (wind 1–3) | Luke.RUSTLTD | wind layers of most beds, gust accents | https://opengameart.org/content/wind1 |
| Tree creaking | AntumDeluge | creak accents (forest, harbour, sky) | https://opengameart.org/content/tree-creaking |
| Swamp environment audio | LokiF | marsh bed | https://opengameart.org/content/swamp-environment-audio |
| Bubble sound effects | BMacZero | elixir well, plague ticks, lava / bubble accents, thaw | https://opengameart.org/content/bubble-sound-effects |
| Cicada sounds | syncopika | ravine / jungle beds | https://opengameart.org/content/cicada-sounds |
| Fireplace sound loop | PagDev | volcano / anvil beds | https://opengameart.org/content/fireplace-sound-loop |
| Steam release sounds | bart | storm coil, plague, foundry steam accents | https://opengameart.org/content/steam-release-sounds |
| Electric buzz | themightyglider | storm coil deploy | https://opengameart.org/content/electric-buzz |
| Generator loop | YCbCr | foundry bed | https://opengameart.org/content/generator-loop |
| Hammer on anvil | themightyglider | anvil accents (Titan's Anvil) | https://opengameart.org/content/hammer-on-anvil |
| Ice breaking / shattering | IgnasD | frost wisp, rime golem, frost nova, freeze, ice hits | https://opengameart.org/content/ice-breakingshattering |
| Freeze spell | artisticdude | freeze, wisp burst | https://opengameart.org/content/freeze-spell-0 |
| Ice spells | bart | frost nova | https://opengameart.org/content/ice-spells |
| 4 dry snow steps | qubodup | rime golem, snow boulder, slow | https://opengameart.org/content/4-dry-snow-steps |
| Horde war drums loop | William Hector | siege bed (distant drums) | https://opengameart.org/content/horde-war-drums-loop |
| Creepy incoherent chanting | OwlishMedia | Bone Monarch ability, celestial choir accent | https://opengameart.org/content/creepy-incoherent-chanting |
| Ghostly humming | Nocturnal_Vanguard | restless graves loop | https://opengameart.org/content/ghostly-humming |
| Earthquake and open sesame | mieki256 | quake landing | https://opengameart.org/content/earthquake-and-open-sesame |
| Rumble FX | cinameng | stone behemoth, volcano / ash / rumble ambience | https://opengameart.org/content/rumble-fx |
| Cave-in | StarNinjas | stone behemoth, magma hound death | https://opengameart.org/content/cave-in |
| Moving boulder | themightyglider | Stone Roller deploy / throw / rolling boulder loop (AUDIO-2b) | https://opengameart.org/content/moving-boulder |
| Breaking rock | themightyglider | boulder hits, magma hound death | https://opengameart.org/content/breaking-rock |
| Stone door | bonebrah | crypt stone grinding | https://opengameart.org/content/stone-door |
| 35 wooden cracks / hits / destructions | Independent.nu | battering ram crack, goblin keg, rolling trunk end | https://opengameart.org/content/35-wooden-crackshitsdestructions |
| Rocket launch | qubodup | siege rocket launch | https://opengameart.org/content/rocket-launch |
| Steam whistle | bart | (downloaded, reserve) | https://opengameart.org/content/steam-whistle |
| Ghost breath | qubodup | soul collect, restless graves cast | https://opengameart.org/content/ghost-breath |
| Ghostly cackle laugh 1 | Nocturnal_Vanguard | Bone Monarch laugh / death | https://opengameart.org/content/ghostly-cackle-laugh-1 |
| Witch cackle, Maniacal laughter pack 1 | AntumDeluge, Nocturnal_Vanguard | Dusk Witch cackle; Rogue sly laugh, Axe Reaper menacing chuckle (AUDIO-2b) | https://opengameart.org/content/witch-cackle · https://opengameart.org/content/maniacal-laughter-pack-1 |
| 16 monster growls | StarNinjas | brute imp | https://opengameart.org/content/16-monster-growls |
| Bear growls | AntumDeluge | magma hound | https://opengameart.org/content/bear-growls |
| Monster snarls | Darsycho | (downloaded, reserve) | https://opengameart.org/content/monster-snarls |
| 25 CC0 mud SFX | rubberduck | skeleton dirt rises (crypt, graves, soul summon) | https://opengameart.org/content/25-cc0-mud-sfx |
| 40 CC0 water / splash / slime SFX | rubberduck | imp spit / goo hits, lava hits, plague bubbles, well death | https://opengameart.org/content/40-cc0-water-splash-slime-sfx |
| 30 CC0 SFX loops | rubberduck | well pump, rolling trunk, lava / springs bubbling, foundry | https://opengameart.org/content/30-cc0-sfx-loops |
| 100 CC0 SFX, 100 CC0 SFX 2 | rubberduck | gongs (monarch, temple), glass (well), springs water | https://opengameart.org/content/100-cc0-sfx · https://opengameart.org/content/100-cc0-sfx-2 |
| Dialog vocal samples, Female hurt grunts, Monster SFX pack, Bell dings | MirceaKitsune, Nocturnal_Vanguard, Ogrebane, PWL | Storm Mage incantation (dialog vocal samples, AUDIO-2b); the rest downloaded, reserve | https://opengameart.org/content/dialog-vocal-samples · https://opengameart.org/content/female-hurt-grunts-groans · https://opengameart.org/content/monster-sound-effects-pack · https://opengameart.org/content/bell-dingschimes |
| Classic fanfare lick | fvcalderan | distant fanfare accent (citadel, colosseum) | https://opengameart.org/content/classic-fanfare-lick |
| 4 atmospheric ghostly loops | Independent.nu | void / crypt / celestial beds, graves loop | https://opengameart.org/content/4-atmospheric-ghostly-loops |

### AUDIO-2b additions (Phase 2b cards — `sfx/{units,attack,hit,death,mech,loops,spell,champ}/*.mp3`)
Built by `tools/build-audio.mjs --only-new --p2b` from `tools/lib/audio-sfx-p2b.mjs`: 88 files (≈ 0.95 MB). No new downloads:
the AUDIO / AUDIO-2 sources above are reused (voices, goblins, boar, bats, creatures, impacts, rocks, wood cracks, mud,
rumble, ice, gongs, the "ooo" and ghostly humming for the Lotus Monk's "Ommm"), and the former reserve packs noted above
are now used. Synthesised here (UNCRoyale, CC0): electric arcs (chain lightning, storm-mage bolts / thunderclap),
drills (Deep Delver beam, tunnelling, Goblin Borer), fuses and firework fizz / whistles, singing bowls, the spinning-axe
and rolling-barrel / boulder loops, ring-modulated incantation grit.

### AUDIO-2c additions (SIM-3c cards — `sfx/{units,attack,hit,death,move,mech,loops}/*.mp3`)
Built by `tools/build-audio.mjs --only-new --p2c` from `tools/lib/audio-sfx-p2c.mjs`: 49 files (≈ 0.55 MB). No new downloads:
the AUDIO / AUDIO-2 sources above are reused — the female RPG voice pack's "hex" / "curse" words (Hex Matron line, vocoded
curse whisper), ghostly cackle + witch cackle, RPG-80 chains and fire spells, the electricity pack's crackle loop + electric
buzz (Volt Wagon), the fireplace loop and fire crackling (Ember Kiln), boar (cursed boar), bat screech + large wings
(Firebird), dialog vocal samples, seagull and water splashes (Angler), Kenney impacts / RPG / sci-fi / digital sounds.
Synthesised here (UNCRoyale, CC0): the charge-up whine, electric arcs, shield-plate rings, the bird screech, egg
heartbeat, winch ratchet, flame whooshes.

## Music (`music/*.mp3`)
| File | Title | Author | License | URL |
|---|---|---|---|---|
| battle.mp3 | Battle Theme A | cynicmusic | CC0 1.0 | https://opengameart.org/content/battle-theme-a |
| menu.mp3 | Town Theme RPG | cynicmusic | CC0 1.0 | https://opengameart.org/content/town-theme-rpg |

## Emotes (`emotes/*.webp`)
Animated emote sprite sheets rendered by `tools/render-emotes.mjs` from this project's own models (KayKit Adventurers /
Skeletons by Kay Lousberg and Quaternius Orc / Dragon — all CC0) using the packs' CC0 animation clips, with procedurally
drawn faces and effects. Original work, released with the game (no third-party art beyond the CC0 models).

## COSMETICS (original art, CC0)
- Tower skins `models/skins/*.glb` + previews `cosmetics/towers/*.webp`: procedural themed variants of the v2 towers
  (`tools/lib/towerskins.mjs`); the king figure / crown / cannon are the same CC0 KayKit + Quaternius parts as `king_tower`.
- Battle banner layers `cosmetics/banners/**.svg`: original vector art generated by `tools/build-banners.mjs`.
