Creative direction: sound as territory, VISION.md, keyart, needle-drop launch

Signature mechanic — auras make sound physical:
 * In The Mix (MRP): allied units within 5 cells of an Amp Stack get +25%
   firepower, pink note decoration. Amp placement is now forward strategy.
 * Low Latency (Stream): allied units within 5 cells of an Edge Node move 30%
   faster, blue chevron decoration. The datacentre build-radius creep now has a
   combat identity to match the lore.
Pure YAML: ProximityExternalCondition -> ExternalCondition + multipliers.

Also: VISION.md (five pillars, one page), THE DROP/SHUFFLE launches now play a
procedural vinyl needle-drop crackle (33rpm rumble + dust pops), and generated
cinematic keyart wired into the loadscreen stripe.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
type-two 2026-07-26 19:41:32 +10:00
parent 3f2f94148f
commit 8945a6a06b
10 changed files with 204 additions and 0 deletions

40
VISION.md Normal file
View File

@ -0,0 +1,40 @@
# VINYLGOD — creative direction
One page. If a change fights these pillars, the change is wrong.
## The fantasy
You are fighting a war over whether music gets to be a *thing you hold*.
Every match is a loudness war made literal.
## Pillars
**1. Loud is strong.**
Sound is territory. MRP units fight harder *In The Mix* (within earshot of an
Amp Stack, +25% firepower). Stream units run *Low Latency* near an Edge Node
(+30% speed). Forward speaker placement is forward strategy. Any new mechanic
should ask: does this make sound more physical?
**2. The ground remembers.**
Wax seeps regrow the fields. Explosions scar the asphalt. Groove-etched ground
marks where the Black Wax surfaced. Battles should leave the map looking
*played*, like a record collects crackle.
**3. Everything is a record.**
Weapons are thrown 45s, rotors are LPs, the superweapon is a tonearm. If an
asset could belong in a generic sci-fi RTS, redesign it until it couldn't.
**4. The Party is loud; the Stream is polite.**
MRP: rust, hot pink, gaffer tape, warm voices, drums. Stream: seamless white,
ring lights, customer-service menace, no corners. MRP text shouts. Stream text
apologises while it deletes you. Never swap these voices.
**5. Real stakes, cartoon delivery.**
Music is being erased forever — and the robots are having the time of their
lives defending it. No grimdark. Loss lines hurt ("THE NEEDLE HAS LIFTED"),
win lines are needle-drops.
## Hard rules (inherited, non-negotiable)
- 100% original content, generated locally, provenance logged in
assets_src/PROMPTS.md. No EA anything. GPL v3 everything.
- Balance claims require a 5-match arena series (MEGAPLAN §5b), not vibes.
- Verify with tools/smoketest.sh — a live process is not a passing game.

BIN
assets_src/keyart_raw.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 225 KiB

View File

@ -8,6 +8,16 @@
AttackMove:
spinner:
ExternalCondition@INTHEMIX:
Condition: inthemix
FirepowerMultiplier@INTHEMIX:
RequiresCondition: inthemix
Modifier: 125
WithDecoration@INTHEMIX:
Image: auras
Sequence: mix
RequiresCondition: inthemix
Position: TopRight
Inherits: ^ArmedUnit
Voiced:
VoiceSet: MrpVoice
@ -32,6 +42,16 @@ spinner:
Weapon: tonearm_blade
stacktank:
ExternalCondition@INTHEMIX:
Condition: inthemix
FirepowerMultiplier@INTHEMIX:
RequiresCondition: inthemix
Modifier: 125
WithDecoration@INTHEMIX:
Image: auras
Sequence: mix
RequiresCondition: inthemix
Position: TopRight
Inherits: ^ArmedUnit
Voiced:
VoiceSet: MrpVoice
@ -56,6 +76,16 @@ stacktank:
Weapon: feedback_burst
basscannon:
ExternalCondition@INTHEMIX:
Condition: inthemix
FirepowerMultiplier@INTHEMIX:
RequiresCondition: inthemix
Modifier: 125
WithDecoration@INTHEMIX:
Image: auras
Sequence: mix
RequiresCondition: inthemix
Position: TopRight
Inherits: ^ArmedUnit
Voiced:
VoiceSet: MrpVoice
@ -80,6 +110,16 @@ basscannon:
Weapon: bass_ring
roadie:
ExternalCondition@INTHEMIX:
Condition: inthemix
FirepowerMultiplier@INTHEMIX:
RequiresCondition: inthemix
Modifier: 125
WithDecoration@INTHEMIX:
Image: auras
Sequence: mix
RequiresCondition: inthemix
Position: TopRight
Inherits: ^Unit
Voiced:
VoiceSet: MrpVoice
@ -104,6 +144,7 @@ mastering:
Inherits: ^EconBuilding
Inherits@shape: ^Buildable2x2
NukePower:
LaunchSound: audio/sfx_needledrop.wav
Icon: thedrop
Name: power-thedrop.name
Description: power-thedrop.description
@ -135,6 +176,16 @@ mastering:
Amount: -40
hornpit:
ExternalCondition@INTHEMIX:
Condition: inthemix
FirepowerMultiplier@INTHEMIX:
RequiresCondition: inthemix
Modifier: 125
WithDecoration@INTHEMIX:
Image: auras
Sequence: mix
RequiresCondition: inthemix
Position: TopRight
Inherits: ^EconBuilding
Inherits@shape: ^Buildable1x1
Buildable:
@ -198,6 +249,7 @@ algorithm:
Power:
Amount: -40
NukePower:
LaunchSound: audio/sfx_needledrop.wav
Icon: theshuffle
Name: power-theshuffle.name
Description: power-theshuffle.description
@ -219,6 +271,16 @@ algorithm:
# --- round 5: MRP hero + scout ---
selector:
ExternalCondition@INTHEMIX:
Condition: inthemix
FirepowerMultiplier@INTHEMIX:
RequiresCondition: inthemix
Modifier: 125
WithDecoration@INTHEMIX:
Image: auras
Sequence: mix
RequiresCondition: inthemix
Position: TopRight
Inherits: ^ArmedUnit
Voiced:
VoiceSet: MrpVoice
@ -245,6 +307,16 @@ selector:
SelectionDecorations:
boombike:
ExternalCondition@INTHEMIX:
Condition: inthemix
FirepowerMultiplier@INTHEMIX:
RequiresCondition: inthemix
Modifier: 125
WithDecoration@INTHEMIX:
Image: auras
Sequence: mix
RequiresCondition: inthemix
Position: TopRight
Inherits: ^ArmedUnit
Voiced:
VoiceSet: MrpVoice
@ -316,6 +388,16 @@ boombike:
Categories: Aircraft
flyer45:
ExternalCondition@INTHEMIX:
Condition: inthemix
FirepowerMultiplier@INTHEMIX:
RequiresCondition: inthemix
Modifier: 125
WithDecoration@INTHEMIX:
Image: auras
Sequence: mix
RequiresCondition: inthemix
Position: TopRight
Inherits: ^AirUnit
Voiced:
VoiceSet: MrpVoice

View File

@ -83,6 +83,16 @@ popupvan:
Facing: 384
djgrunt:
ExternalCondition@INTHEMIX:
Condition: inthemix
FirepowerMultiplier@INTHEMIX:
RequiresCondition: inthemix
Modifier: 125
WithDecoration@INTHEMIX:
Image: auras
Sequence: mix
RequiresCondition: inthemix
Position: TopRight
Inherits: ^ArmedUnit
Voiced:
VoiceSet: MrpVoice
@ -198,6 +208,9 @@ pressplant:
ampstack:
Inherits: ^EconBuilding
ProximityExternalCondition@MIX:
Condition: inthemix
Range: 5c0
Inherits@shape: ^Buildable1x1
Buildable:
Queue: Building

View File

@ -45,6 +45,9 @@ streamhub:
datacentre:
Inherits: ^EconBuilding
ProximityExternalCondition@LATENCY:
Condition: lowlatency
Range: 5c0
Inherits@shape: ^Buildable1x1
Buildable:
Queue: Building
@ -127,6 +130,16 @@ printfarm:
Amount: -20
scraper:
ExternalCondition@LOWLATENCY:
Condition: lowlatency
SpeedMultiplier@LOWLATENCY:
RequiresCondition: lowlatency
Modifier: 130
WithDecoration@LOWLATENCY:
Image: auras
Sequence: latency
RequiresCondition: lowlatency
Position: TopRight
Inherits: ^Unit
Voiced:
VoiceSet: StreamVoice
@ -158,6 +171,16 @@ scraper:
DockClientManager:
bufferbot:
ExternalCondition@LOWLATENCY:
Condition: lowlatency
SpeedMultiplier@LOWLATENCY:
RequiresCondition: lowlatency
Modifier: 130
WithDecoration@LOWLATENCY:
Image: auras
Sequence: latency
RequiresCondition: lowlatency
Position: TopRight
Inherits: ^ArmedUnit
Voiced:
VoiceSet: StreamVoice
@ -180,6 +203,16 @@ bufferbot:
Weapon: ping
drmwalker:
ExternalCondition@LOWLATENCY:
Condition: lowlatency
SpeedMultiplier@LOWLATENCY:
RequiresCondition: lowlatency
Modifier: 130
WithDecoration@LOWLATENCY:
Image: auras
Sequence: latency
RequiresCondition: lowlatency
Position: TopRight
Inherits: ^ArmedUnit
Voiced:
VoiceSet: StreamVoice
@ -206,6 +239,16 @@ drmwalker:
# --- round 5: Stream hero + scout ---
curator:
ExternalCondition@LOWLATENCY:
Condition: lowlatency
SpeedMultiplier@LOWLATENCY:
RequiresCondition: lowlatency
Modifier: 130
WithDecoration@LOWLATENCY:
Image: auras
Sequence: latency
RequiresCondition: lowlatency
Position: TopRight
Inherits: ^ArmedUnit
Voiced:
VoiceSet: StreamVoice
@ -232,6 +275,16 @@ curator:
SelectionDecorations:
crawler:
ExternalCondition@LOWLATENCY:
Condition: lowlatency
SpeedMultiplier@LOWLATENCY:
RequiresCondition: lowlatency
Modifier: 130
WithDecoration@LOWLATENCY:
Image: auras
Sequence: latency
RequiresCondition: lowlatency
Position: TopRight
Inherits: ^Unit
Voiced:
VoiceSet: StreamVoice
@ -258,6 +311,16 @@ crawler:
# --- round 5: air ---
compressor:
ExternalCondition@LOWLATENCY:
Condition: lowlatency
SpeedMultiplier@LOWLATENCY:
RequiresCondition: lowlatency
Modifier: 130
WithDecoration@LOWLATENCY:
Image: auras
Sequence: latency
RequiresCondition: lowlatency
Position: TopRight
Inherits: ^AirUnit
Voiced:
VoiceSet: StreamVoice

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

View File

@ -321,3 +321,9 @@ scorches:
Filename: sequences/assets/scorch3.png
sc4:
Filename: sequences/assets/scorch4.png
auras:
mix:
Filename: sequences/assets/aura_mix.png
latency:
Filename: sequences/assets/aura_latency.png