Phase C: weapons, combat units (spinner/stacktank/basscannon/roadie), mastering studio, conquest victory
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
103
mods/vinylgod/rules/combat.yaml
Normal 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
|
||||||
@ -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
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
BIN
mods/vinylgod/sequences/assets/basscannon.png
Normal file
|
After Width: | Height: | Size: 132 B |
BIN
mods/vinylgod/sequences/assets/icon_basscannon.png
Normal file
|
After Width: | Height: | Size: 237 B |
BIN
mods/vinylgod/sequences/assets/icon_mastering.png
Normal file
|
After Width: | Height: | Size: 235 B |
BIN
mods/vinylgod/sequences/assets/icon_roadie.png
Normal file
|
After Width: | Height: | Size: 237 B |
BIN
mods/vinylgod/sequences/assets/icon_spinner.png
Normal file
|
After Width: | Height: | Size: 238 B |
BIN
mods/vinylgod/sequences/assets/icon_stacktank.png
Normal file
|
After Width: | Height: | Size: 236 B |
BIN
mods/vinylgod/sequences/assets/mastering.png
Normal file
|
After Width: | Height: | Size: 248 B |
BIN
mods/vinylgod/sequences/assets/roadie.png
Normal file
|
After Width: | Height: | Size: 112 B |
BIN
mods/vinylgod/sequences/assets/spinner.png
Normal file
|
After Width: | Height: | Size: 122 B |
BIN
mods/vinylgod/sequences/assets/stacktank.png
Normal file
|
After Width: | Height: | Size: 139 B |
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
@ -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)
|
||||||
|
|||||||