Phase C: weapons, combat units (spinner/stacktank/basscannon/roadie), mastering studio, conquest victory

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
type-two 2026-07-20 04:32:26 +10:00
parent 71879139c2
commit 19fcb7c525
21 changed files with 259 additions and 2 deletions

View File

@ -16,3 +16,19 @@ Cursors:
Start: 0 Start: 0
deploy-blocked: deploy-blocked:
Start: 0 Start: 0
goldwrench:
Start: 0
goldwrench-blocked:
Start: 0
attack:
Start: 0
attackoutsiderange:
Start: 0
attackmove:
Start: 0
attackmove-blocked:
Start: 0
assaultmove:
Start: 0
assaultmove-blocked:
Start: 0

View File

@ -33,3 +33,15 @@ actor-garage =
.name = Garage .name = Garage
actor-djgrunt = actor-djgrunt =
.name = DJ .name = DJ
## combat.yaml
actor-spinner =
.name = Spinner
actor-stacktank =
.name = Stack Walker
actor-basscannon =
.name = Bass Cannon
actor-roadie =
.name = Roadie
actor-mastering =
.name = Mastering Studio

View File

@ -13,6 +13,7 @@ Notifications:
Rules: Rules:
vinylgod|rules/vinylgod.yaml vinylgod|rules/vinylgod.yaml
vinylgod|rules/economy.yaml vinylgod|rules/economy.yaml
vinylgod|rules/combat.yaml
vinylgod|rules/mpspawn.yaml vinylgod|rules/mpspawn.yaml
vinylgod|rules/palettes.yaml vinylgod|rules/palettes.yaml
vinylgod|rules/player.yaml vinylgod|rules/player.yaml

View File

@ -0,0 +1,103 @@
^ArmedUnit:
Inherits: ^Unit
AttackFrontal:
FacingTolerance: 80
AutoTarget:
AutoTargetPriority@DEFAULT:
ValidTargets: GroundActor, Structure
AttackMove:
spinner:
Inherits: ^ArmedUnit
Buildable:
Queue: Vehicle
BuildPaletteOrder: 40
Prerequisites: garage
Valued:
Cost: 500
Tooltip:
Name: actor-spinner.name
Health:
HP: 25000
Armor:
Type: Light
Mobile:
Locomotor: wheeled
Speed: 110
Armament:
Weapon: tonearm_blade
stacktank:
Inherits: ^ArmedUnit
Buildable:
Queue: Vehicle
BuildPaletteOrder: 50
Prerequisites: garage, pressplant
Valued:
Cost: 800
Tooltip:
Name: actor-stacktank.name
Health:
HP: 90000
Armor:
Type: Heavy
Mobile:
Locomotor: wheeled
Speed: 50
Armament:
Weapon: feedback_burst
basscannon:
Inherits: ^ArmedUnit
Buildable:
Queue: Vehicle
BuildPaletteOrder: 60
Prerequisites: garage, mastering
Valued:
Cost: 900
Tooltip:
Name: actor-basscannon.name
Health:
HP: 20000
Armor:
Type: Light
Mobile:
Locomotor: wheeled
Speed: 45
Armament:
Weapon: bass_ring
roadie:
Inherits: ^Unit
Buildable:
Queue: Infantry
BuildPaletteOrder: 20
Prerequisites: merchtable
Valued:
Cost: 500
Tooltip:
Name: actor-roadie.name
Health:
HP: 8000
Armor:
Type: None
Mobile:
Locomotor: foot
Speed: 50
InstantlyRepairs:
mastering:
Inherits: ^EconBuilding
Inherits@shape: ^Buildable2x2
Buildable:
Queue: Building
BuildPaletteOrder: 60
Prerequisites: garage
Valued:
Cost: 1500
Tooltip:
Name: actor-mastering.name
Health:
HP: 60000
Power:
Amount: -40

View File

@ -10,6 +10,9 @@
^Unit: ^Unit:
Inherits: ^EconSprite Inherits: ^EconSprite
Targetable:
TargetTypes: GroundActor
MustBeDestroyed:
Selectable: Selectable:
Bounds: 1024, 1024 Bounds: 1024, 1024
RevealsShroud: RevealsShroud:
@ -67,7 +70,7 @@ popupvan:
Facing: 384 Facing: 384
djgrunt: djgrunt:
Inherits: ^Unit Inherits: ^ArmedUnit
Buildable: Buildable:
Queue: Infantry Queue: Infantry
BuildPaletteOrder: 10 BuildPaletteOrder: 10
@ -83,9 +86,16 @@ djgrunt:
Mobile: Mobile:
Locomotor: foot Locomotor: foot
Speed: 56 Speed: 56
Armament:
Weapon: seven_inch
^EconBuilding: ^EconBuilding:
Inherits: ^EconSprite Inherits: ^EconSprite
Targetable:
TargetTypes: GroundActor, Structure
MustBeDestroyed:
RequiredForShortGame: true
InstantlyRepairable:
Tooltip: Tooltip:
Health: Health:
HP: 90000 HP: 90000

View File

@ -5,6 +5,8 @@
Name: terrain Name: terrain
PaletteFromGrayscale@chrome: PaletteFromGrayscale@chrome:
Name: chrome Name: chrome
PaletteFromGrayscale@effect:
Name: effect
PlayerColorPalette@player: PlayerColorPalette@player:
BasePalette: greyscale BasePalette: greyscale
PlayerColorShift: PlayerColorShift:

View File

@ -21,6 +21,8 @@ player:
ClassicProductionQueue@Infantry: ClassicProductionQueue@Infantry:
Type: Infantry Type: Infantry
Group: Infantry Group: Infantry
ConquestVictoryConditions:
MissionObjectives:
editorplayer: editorplayer:
Inherits: ^baseplayer Inherits: ^baseplayer

View File

@ -35,6 +35,7 @@ world:
ClassName: options-starting-units.unlabeled ClassName: options-starting-units.unlabeled
BuildingInfluence: BuildingInfluence:
PathFinder: PathFinder:
MapOptions:
Locomotor@WHEELED: Locomotor@WHEELED:
Name: wheeled Name: wheeled
TerrainSpeeds: TerrainSpeeds:

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 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: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 B

View File

@ -59,3 +59,33 @@ garage:
Filename: sequences/assets/garage.png Filename: sequences/assets/garage.png
icon: icon:
Filename: sequences/assets/icon_garage.png Filename: sequences/assets/icon_garage.png
spinner:
idle:
Filename: sequences/assets/spinner.png
icon:
Filename: sequences/assets/icon_spinner.png
stacktank:
idle:
Filename: sequences/assets/stacktank.png
icon:
Filename: sequences/assets/icon_stacktank.png
basscannon:
idle:
Filename: sequences/assets/basscannon.png
icon:
Filename: sequences/assets/icon_basscannon.png
roadie:
idle:
Filename: sequences/assets/roadie.png
icon:
Filename: sequences/assets/icon_roadie.png
mastering:
idle:
Filename: sequences/assets/mastering.png
icon:
Filename: sequences/assets/icon_mastering.png

View File

@ -0,0 +1,70 @@
# Placeholder projectiles: invisible bullets, no impact effects until Phase D art lands.
^GroundWeapon:
ValidTargets: GroundActor
Projectile: Bullet
Speed: 682
tonearm_blade:
Inherits: ^GroundWeapon
ReloadDelay: 12
Range: 1c512
Warhead@1Dam: SpreadDamage
Spread: 64
Damage: 900
ValidTargets: GroundActor
Versus:
None: 100
Wood: 45
Light: 60
Heavy: 25
seven_inch:
Inherits: ^GroundWeapon
ReloadDelay: 30
Range: 4c0
Projectile: Bullet
Speed: 512
LaunchAngle: 30
Warhead@1Dam: SpreadDamage
Spread: 96
Damage: 3000
ValidTargets: GroundActor
Versus:
None: 90
Wood: 40
Light: 50
Heavy: 20
feedback_burst:
Inherits: ^GroundWeapon
ReloadDelay: 50
Range: 5c0
Warhead@1Dam: SpreadDamage
Spread: 128
Damage: 5000
ValidTargets: GroundActor
Versus:
None: 40
Wood: 70
Light: 80
Heavy: 100
bass_ring:
Inherits: ^GroundWeapon
ReloadDelay: 120
Range: 9c0
MinRange: 2c0
Projectile: Bullet
Speed: 300
LaunchAngle: 62
Blockable: false
Warhead@1Dam: SpreadDamage
Spread: 341
Damage: 8000
ValidTargets: GroundActor
Versus:
None: 100
Wood: 100
Light: 75
Heavy: 40

View File

@ -86,6 +86,14 @@ box_sprite(os.path.join(OUT, 'merchtable.png'), 32, GREEN, DARK)
box_sprite(os.path.join(OUT, 'garage.png'), 64, BLUE, DARK) box_sprite(os.path.join(OUT, 'garage.png'), 64, BLUE, DARK)
box_sprite(os.path.join(OUT, 'djgrunt.png'), 16, PINK, DARK) box_sprite(os.path.join(OUT, 'djgrunt.png'), 16, PINK, DARK)
# Phase C: combat roster
RED = (220, 70, 60, 255)
box_sprite(os.path.join(OUT, 'spinner.png'), 20, RED, DARK)
box_sprite(os.path.join(OUT, 'stacktank.png'), 28, DARK, RED)
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)
def icon(path, body): def icon(path, body):
w, h = 64, 48 w, h = 64, 48
@ -99,7 +107,9 @@ def icon(path, body):
for name, col in [('popupshop', GOLD), ('ampstack', GREY), ('pressplant', (255, 45, 150, 255)), for name, col in [('popupshop', GOLD), ('ampstack', GREY), ('pressplant', (255, 45, 150, 255)),
('vault', (70, 65, 75, 255)), ('merchtable', GREEN), ('garage', BLUE), ('vault', (70, 65, 75, 255)), ('merchtable', GREEN), ('garage', BLUE),
('digger', PINK), ('popupvan', GOLD), ('djgrunt', (255, 120, 180, 255))]: ('digger', PINK), ('popupvan', GOLD), ('djgrunt', (255, 120, 180, 255)),
('spinner', RED), ('stacktank', (120, 40, 35, 255)), ('basscannon', (160, 90, 85, 255)),
('roadie', GOLD), ('mastering', (150, 150, 160, 255))]:
icon(os.path.join(OUT, f'icon_{name}.png'), col) icon(os.path.join(OUT, f'icon_{name}.png'), col)
# clock overlay for production progress (single frame, semi-transparent) # clock overlay for production progress (single frame, semi-transparent)