Phase E: The Stream faction (9 actors), Wax AI bot for both factions, bot-vs-bot shellmap battle

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
type-two 2026-07-20 04:40:06 +10:00
parent 19fcb7c525
commit 7bb6e649f7
29 changed files with 400 additions and 9 deletions

View File

@ -120,6 +120,7 @@ flags:
Inherits: ^Glyphs
Regions:
vinylgod: 226, 241, 30, 15
stream: 226, 241, 30, 15
Random: 226, 241, 30, 15
spectator: 226, 241, 30, 15

View File

@ -45,3 +45,29 @@ actor-roadie =
.name = Roadie
actor-mastering =
.name = Mastering Studio
## stream.yaml + ai.yaml
faction-stream =
.name = The Stream
.description = The Stream
The Algorithm's physical fleet: cheap, fast, numerous.
actor-streamvan =
.name = Deployment Van
actor-streamhub =
.name = Stream Hub
actor-datacentre =
.name = Edge Node
actor-transcoder =
.name = Transcoder
actor-podfarm =
.name = Pod Farm
actor-printfarm =
.name = Print Farm
actor-scraper =
.name = Scraper
actor-bufferbot =
.name = Buffer-Bot
actor-drmwalker =
.name = DRM Enforcer
bot-wax-ai =
.name = Wax AI

View File

@ -26,14 +26,27 @@ Players:
Name: Creeps
NonCombatant: True
Faction: Random
PlayerReference@BotA:
Name: BotA
Faction: vinylgod
Bot: wax
Enemies: BotB
PlayerReference@BotB:
Name: BotB
Faction: stream
Bot: wax
Enemies: BotA
Actors:
Actor1: pressplant
Owner: Creeps
Location: 12,12
Actor1: popupvan
Owner: BotA
Location: 7,7
Actor2: digger
Owner: Creeps
Location: 15,14
Actor3: ampstack
Owner: Creeps
Location: 10,14
Owner: BotA
Location: 9,8
Actor3: streamvan
Owner: BotB
Location: 26,26
Actor4: scraper
Owner: BotB
Location: 24,25

View File

@ -14,6 +14,8 @@ Rules:
vinylgod|rules/vinylgod.yaml
vinylgod|rules/economy.yaml
vinylgod|rules/combat.yaml
vinylgod|rules/stream.yaml
vinylgod|rules/ai.yaml
vinylgod|rules/mpspawn.yaml
vinylgod|rules/palettes.yaml
vinylgod|rules/player.yaml

View File

@ -0,0 +1,67 @@
player:
ModularBot@WaxAI:
Name: bot-wax-ai.name
Type: wax
GrantConditionOnBotOwner@wax:
Condition: enable-wax-ai
Bots: wax
HarvesterBotModule:
RequiresCondition: enable-wax-ai
HarvesterTypes: digger, scraper
RefineryTypes: pressplant, transcoder
McvManagerBotModule:
RequiresCondition: enable-wax-ai
McvTypes: popupvan, streamvan
ConstructionYardTypes: popupshop, streamhub
McvFactoryTypes: garage, printfarm
BaseBuilderBotModule:
RequiresCondition: enable-wax-ai
MinimumExcessPower: 40
MaximumExcessPower: 160
ExcessPowerIncrement: 40
ExcessPowerIncreaseThreshold: 4
ConstructionYardTypes: popupshop, streamhub
RefineryTypes: pressplant, transcoder
PowerTypes: ampstack, datacentre
BarracksTypes: merchtable, podfarm
VehiclesFactoryTypes: garage, printfarm
ProductionTypes: merchtable, podfarm, garage, printfarm
SiloTypes: vault
BuildingLimits:
pressplant: 3
transcoder: 3
merchtable: 1
podfarm: 1
garage: 1
printfarm: 1
mastering: 1
BuildingFractions:
pressplant: 30
transcoder: 30
merchtable: 1
podfarm: 1
garage: 1
printfarm: 1
mastering: 1
UnitBuilderBotModule:
RequiresCondition: enable-wax-ai
UnitsToBuild:
djgrunt: 60
roadie: 5
spinner: 30
stacktank: 45
basscannon: 15
digger: 10
bufferbot: 60
drmwalker: 45
scraper: 10
UnitLimits:
digger: 4
scraper: 4
roadie: 2
SquadManagerBotModule:
RequiresCondition: enable-wax-ai
SquadSize: 8
ExcludeFromSquadsTypes: digger, scraper, popupvan, streamvan, roadie
ConstructionYardTypes: popupshop, streamhub
ProtectionTypes: digger, scraper, popupvan, streamvan, pressplant, transcoder, popupshop, streamhub, ampstack, datacentre, vault, merchtable, podfarm, garage, printfarm, mastering

View File

@ -178,6 +178,7 @@ ampstack:
Buildable:
Queue: Building
BuildPaletteOrder: 10
Prerequisites: popupshop
Valued:
Cost: 300
Tooltip:

View File

@ -0,0 +1,187 @@
# The Stream — the Algorithm's physical fleet. Cheap, fast, numerous, fragile.
streamvan:
Inherits: ^Unit
Buildable:
Queue: Vehicle
BuildPaletteOrder: 31
Prerequisites: printfarm
Valued:
Cost: 2500
Tooltip:
Name: actor-streamvan.name
Health:
HP: 55000
Armor:
Type: Light
Mobile:
Locomotor: wheeled
Speed: 75
Transforms:
IntoActor: streamhub
Offset: 0,0
Facing: 384
streamhub:
Inherits: ^EconBuilding
Inherits@shape: ^Buildable2x2
Tooltip:
Name: actor-streamhub.name
Health:
HP: 140000
BaseBuilding:
Production:
Produces: Building
Power:
Amount: 0
-RequiresBuildableArea:
datacentre:
Inherits: ^EconBuilding
Inherits@shape: ^Buildable1x1
Buildable:
Queue: Building
BuildPaletteOrder: 11
Prerequisites: streamhub
Valued:
Cost: 300
Tooltip:
Name: actor-datacentre.name
Health:
HP: 35000
Power:
Amount: 100
GivesBuildableArea:
AreaTypes: building
transcoder:
Inherits: ^EconBuilding
Inherits@shape: ^Buildable2x2
Buildable:
Queue: Building
BuildPaletteOrder: 21
Prerequisites: datacentre
Valued:
Cost: 2000
Tooltip:
Name: actor-transcoder.name
Building:
Footprint: xx ==
Refinery:
DockHost:
Type: Unload
DockOffset: 0, 512, 0
StoresPlayerResources:
Capacity: 4000
Power:
Amount: -30
FreeActor:
Actor: scraper
SpawnOffset: 0, 2
podfarm:
Inherits: ^EconBuilding
Inherits@shape: ^Buildable2x2
Buildable:
Queue: Building
BuildPaletteOrder: 31
Prerequisites: transcoder
Valued:
Cost: 300
Tooltip:
Name: actor-podfarm.name
Health:
HP: 70000
Production:
Produces: Infantry
Exit@1:
ExitCell: 0, 2
Power:
Amount: -10
printfarm:
Inherits: ^EconBuilding
Inherits@shape: ^Buildable2x2
Buildable:
Queue: Building
BuildPaletteOrder: 51
Prerequisites: transcoder
Valued:
Cost: 2000
Tooltip:
Name: actor-printfarm.name
Health:
HP: 100000
Production:
Produces: Vehicle
Exit@1:
ExitCell: 0, 2
Power:
Amount: -20
scraper:
Inherits: ^Unit
Buildable:
Queue: Vehicle
BuildPaletteOrder: 21
Prerequisites: transcoder
Valued:
Cost: 1200
Tooltip:
Name: actor-scraper.name
Health:
HP: 45000
Armor:
Type: Light
Mobile:
Locomotor: wheeled
Speed: 90
Harvester:
Resources: Wax
BaleUnloadDelay: 1
SearchFromProcRadius: 15
SearchFromHarvesterRadius: 8
StoresResources:
Capacity: 14
Resources: Wax
DockClientManager:
bufferbot:
Inherits: ^ArmedUnit
Buildable:
Queue: Infantry
BuildPaletteOrder: 11
Prerequisites: podfarm
Valued:
Cost: 60
Tooltip:
Name: actor-bufferbot.name
Health:
HP: 3500
Armor:
Type: None
Mobile:
Locomotor: foot
Speed: 70
Armament:
Weapon: ping
drmwalker:
Inherits: ^ArmedUnit
Buildable:
Queue: Vehicle
BuildPaletteOrder: 51
Prerequisites: printfarm
Valued:
Cost: 900
Tooltip:
Name: actor-drmwalker.name
Health:
HP: 100000
Armor:
Type: Heavy
Mobile:
Locomotor: wheeled
Speed: 42
Armament:
Weapon: feedback_burst

View File

@ -6,12 +6,16 @@
Faction@Random:
InternalName: Random
Name: faction-random.name
RandomFactionMembers: vinylgod
RandomFactionMembers: vinylgod, stream
Description: faction-random.description
Faction@vinylgod:
InternalName: vinylgod
Name: faction-vinylgod.name
Description: faction-vinylgod.description
Faction@stream:
InternalName: stream
Name: faction-stream.name
Description: faction-stream.description
LoadWidgetAtGameStart:
MusicPlaylist:
ScreenMap:
@ -33,6 +37,11 @@ world:
SupportActors: digger
Factions: vinylgod
ClassName: options-starting-units.unlabeled
StartingUnits@Stream:
BaseActor: streamvan
SupportActors: scraper
Factions: stream
ClassName: options-starting-units.unlabeled
BuildingInfluence:
PathFinder:
MapOptions:

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

View File

@ -89,3 +89,57 @@ mastering:
Filename: sequences/assets/mastering.png
icon:
Filename: sequences/assets/icon_mastering.png
streamvan:
idle:
Filename: sequences/assets/streamvan.png
icon:
Filename: sequences/assets/icon_streamvan.png
streamhub:
idle:
Filename: sequences/assets/streamhub.png
icon:
Filename: sequences/assets/icon_streamhub.png
datacentre:
idle:
Filename: sequences/assets/datacentre.png
icon:
Filename: sequences/assets/icon_datacentre.png
transcoder:
idle:
Filename: sequences/assets/transcoder.png
icon:
Filename: sequences/assets/icon_transcoder.png
podfarm:
idle:
Filename: sequences/assets/podfarm.png
icon:
Filename: sequences/assets/icon_podfarm.png
printfarm:
idle:
Filename: sequences/assets/printfarm.png
icon:
Filename: sequences/assets/icon_printfarm.png
scraper:
idle:
Filename: sequences/assets/scraper.png
icon:
Filename: sequences/assets/icon_scraper.png
bufferbot:
idle:
Filename: sequences/assets/bufferbot.png
icon:
Filename: sequences/assets/icon_bufferbot.png
drmwalker:
idle:
Filename: sequences/assets/drmwalker.png
icon:
Filename: sequences/assets/icon_drmwalker.png

View File

@ -68,3 +68,17 @@ bass_ring:
Wood: 100
Light: 75
Heavy: 40
ping:
Inherits: ^GroundWeapon
ReloadDelay: 15
Range: 3c512
Warhead@1Dam: SpreadDamage
Spread: 64
Damage: 1200
ValidTargets: GroundActor
Versus:
None: 100
Wood: 35
Light: 45
Heavy: 15

View File

@ -94,6 +94,19 @@ box_sprite(os.path.join(OUT, 'basscannon.png'), 26, GREY, RED)
box_sprite(os.path.join(OUT, 'roadie.png'), 16, GOLD, DARK)
box_sprite(os.path.join(OUT, 'mastering.png'), 64, (150, 150, 160, 255), PINK)
# Phase E: The Stream (white/blue)
WHITE = (235, 238, 245, 255)
SBLUE = (60, 130, 255, 255)
box_sprite(os.path.join(OUT, 'streamvan.png'), 24, WHITE, SBLUE)
box_sprite(os.path.join(OUT, 'streamhub.png'), 64, WHITE, SBLUE)
box_sprite(os.path.join(OUT, 'datacentre.png'), 32, WHITE, SBLUE)
box_sprite(os.path.join(OUT, 'transcoder.png'), 64, (200, 210, 225, 255), SBLUE)
box_sprite(os.path.join(OUT, 'podfarm.png'), 32, WHITE, (120, 170, 255, 255))
box_sprite(os.path.join(OUT, 'printfarm.png'), 64, (210, 218, 230, 255), SBLUE)
box_sprite(os.path.join(OUT, 'scraper.png'), 22, WHITE, SBLUE)
box_sprite(os.path.join(OUT, 'bufferbot.png'), 14, WHITE, SBLUE)
box_sprite(os.path.join(OUT, 'drmwalker.png'), 28, WHITE, (30, 60, 160, 255))
def icon(path, body):
w, h = 64, 48
@ -134,3 +147,7 @@ for r, shape in enumerate(('rect', 'dot', 'disc')):
disc(px, w, ox + 8, oy + 8, 2, DARK)
CHROME = os.path.join(os.path.dirname(__file__), '..', 'mods', 'vinylgod', 'chrome', 'assets')
write_png(os.path.join(CHROME, 'production-icons.png'), w, h, px)
for name in ('streamvan', 'streamhub', 'datacentre', 'transcoder', 'podfarm',
'printfarm', 'scraper', 'bufferbot', 'drmwalker'):
icon(os.path.join(OUT, f'icon_{name}.png'), SBLUE if name in ('scraper', 'drmwalker', 'bufferbot') else WHITE)