Wire in real ship art for the 3 chosen races
Crop the uploaded terran/mech/vorg concept sheets into 15 individual transparent PNGs (5 ships per race) using a background-removal pass tuned to preserve translucent detail (e.g. vorg wing membranes) while still cutting out the baked-in checkerboard backdrop. Keep each raw sheet under a source/ subfolder for reference. Give team_select.gd a per-race ship roster (Interceptor/Gunship/ Bomber/Support/Heavy) instead of one shared ship list, using real names/roles from racesclasses.md for Terran and Vorg and new placeholder names for Mechanos (undocumented there). Update race names/colors to match. Point ship.tscn's default sprite at the new Terran art now that example_ships is gone. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,45 +1,107 @@
|
||||
extends CanvasLayer
|
||||
|
||||
const RACES := [
|
||||
{"id": 1, "name": "TERRAN FEDERATION", "sub": "Speed and balanced firepower", "color": Color(0.30, 0.55, 1.00)},
|
||||
{"id": 2, "name": "THE COLLECTIVE", "sub": "Heavy armor, brute force", "color": Color(1.00, 0.45, 0.18)},
|
||||
{"id": 3, "name": "IRON ORDER", "sub": "Precision strike force", "color": Color(0.28, 0.90, 0.42)},
|
||||
]
|
||||
|
||||
const SHIPS := [
|
||||
{
|
||||
"name": "WARBIRD",
|
||||
"role": "All-Round Fighter",
|
||||
"desc": "The most versatile ship in the fleet. Solid speed, reliable firepower, and enough armor to stay in the fight. Forgiving to fly and effective in any situation — the go-to choice when you're not sure what you're up against.",
|
||||
"path": "res://assets/images/ships/example_ships/1.png",
|
||||
"id": 1, "name": "TERRAN REPUBLIC", "sub": "Angular gray-blue military ships, standard balanced fighters",
|
||||
"color": Color(0.40, 0.60, 0.85),
|
||||
"ships": [
|
||||
{
|
||||
"name": "WARFRAME", "role": "Interceptor",
|
||||
"desc": "Very fast, rapid weak laser bursts. Built to close distance instantly and chip away at anything in range. Low individual hit strength but a relentless rate of fire punishes anyone who stands still.",
|
||||
"path": "res://assets/images/ships/terran/warframe.png",
|
||||
},
|
||||
{
|
||||
"name": "STRIKER", "role": "Gunship",
|
||||
"desc": "Super fast fire rate, very low damage lasers. Trades hitting power for volume — the more shots in the air, the more that connect. Best flown aggressively, applying constant pressure rather than picking single shots.",
|
||||
"path": "res://assets/images/ships/terran/striker.png",
|
||||
},
|
||||
{
|
||||
"name": "DEPLOYER", "role": "Bomber",
|
||||
"desc": "Fast lasers plus an EMP mine dropped in your wake. Punishes anyone chasing too closely and disables systems on contact. Strong for area denial and covering a retreat.",
|
||||
"path": "res://assets/images/ships/terran/deployer.png",
|
||||
},
|
||||
{
|
||||
"name": "LINK NODE", "role": "Support",
|
||||
"desc": "Standard lasers plus a small repair pack dropped for allies to pick up. Keeps a team topped off in prolonged fights. Not built to duel alone — stay near the fight, not in the middle of it.",
|
||||
"path": "res://assets/images/ships/terran/link_node.png",
|
||||
},
|
||||
{
|
||||
"name": "BASTION", "role": "Heavy",
|
||||
"desc": "Tankier and slower, but its laser hits harder than anything else in the fleet. Built to anchor a push and absorb damage while dealing it back. Discourages anyone from engaging head-on.",
|
||||
"path": "res://assets/images/ships/terran/bastion.png",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
"name": "JAVELIN",
|
||||
"role": "Fast Interceptor",
|
||||
"desc": "Built for speed above everything else. Light armor means you have to pick your fights carefully, but nothing can outrun you. Best used for hit-and-run strikes, hunting weakened targets, and escaping when things go wrong.",
|
||||
"path": "res://assets/images/ships/example_ships/1B.png",
|
||||
"id": 2, "name": "MECHANOS SOVEREIGNTY", "sub": "Industrial war machines built for brute-force firepower",
|
||||
"color": Color(0.85, 0.28, 0.28),
|
||||
"ships": [
|
||||
{
|
||||
"name": "SENTINEL", "role": "Interceptor",
|
||||
"desc": "A light scout mech with twin rapid cannons. Fast and maneuverable for a Mechanos hull, built to screen the front line and harass before the heavier machines arrive.",
|
||||
"path": "res://assets/images/ships/mech/sentinel.png",
|
||||
},
|
||||
{
|
||||
"name": "VANGUARD", "role": "Gunship",
|
||||
"desc": "Dual autocannons built for sustained fire. Sits between the light scouts and the heavy machines — durable enough to hold a line, fast enough to reposition when it breaks.",
|
||||
"path": "res://assets/images/ships/mech/vanguard.png",
|
||||
},
|
||||
{
|
||||
"name": "RAVAGER", "role": "Bomber",
|
||||
"desc": "Drops heavy ordnance and mines from its cargo pods. Slow to turn but devastating to anything caught in the blast radius. Best used to seal off a chokepoint.",
|
||||
"path": "res://assets/images/ships/mech/ravager.png",
|
||||
},
|
||||
{
|
||||
"name": "AEGIS", "role": "Support",
|
||||
"desc": "Projects a short-range shield and deploys a repair drone for nearby allies. Doesn't hit hard on its own — its job is keeping everyone else alive long enough to win the fight.",
|
||||
"path": "res://assets/images/ships/mech/aegis.png",
|
||||
},
|
||||
{
|
||||
"name": "COLOSSUS", "role": "Heavy",
|
||||
"desc": "A walking fortress bristling with cannons. Slow and telegraphed, but absorbs enormous damage and returns it with interest. Usually the last thing standing in an engagement.",
|
||||
"path": "res://assets/images/ships/mech/colossus.png",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
"name": "SPIDER",
|
||||
"role": "Heavy Support",
|
||||
"desc": "Slow but extremely durable. High-volume fire makes it devastating in sustained engagements. Anchors a team by holding zones and suppressing enemy movements. Stay near allies — alone you're a target, together you're a wall.",
|
||||
"path": "res://assets/images/ships/example_ships/2a.png",
|
||||
},
|
||||
{
|
||||
"name": "LANCASTER",
|
||||
"role": "Stealth Bomber",
|
||||
"desc": "Medium speed with high burst damage potential. Built for patience — get into position, strike hard, and fade before the enemy can respond. Excels at flanking and ambushes. Requires discipline to play but punishes mistakes severely.",
|
||||
"path": "res://assets/images/ships/example_ships/3b.png",
|
||||
"id": 3, "name": "VORG SWARM", "sub": "Organic swarm built for chaotic damage-over-time",
|
||||
"color": Color(0.45, 0.80, 0.35),
|
||||
"ships": [
|
||||
{
|
||||
"name": "STINGER", "role": "Interceptor",
|
||||
"desc": "Fast, acid shots with light damage-over-time. Built to swarm a target from range, applying just enough acid to wear an enemy down before backing off.",
|
||||
"path": "res://assets/images/ships/vorg/stinger.png",
|
||||
},
|
||||
{
|
||||
"name": "SPITTER", "role": "Gunship",
|
||||
"desc": "Faster-firing acid with a stronger damage-over-time effect. Trades some speed for sustained corrosive pressure — anything it tags keeps taking damage long after contact.",
|
||||
"path": "res://assets/images/ships/vorg/spitter.png",
|
||||
},
|
||||
{
|
||||
"name": "BROODLING", "role": "Bomber",
|
||||
"desc": "Normal acid shots that also spawn a small slowing swarm cloud. The cloud lingers, fouling movement for anyone caught inside it — ideal for locking down a retreat or a chokepoint.",
|
||||
"path": "res://assets/images/ships/vorg/broodling.png",
|
||||
},
|
||||
{
|
||||
"name": "NURSE", "role": "Support",
|
||||
"desc": "Acid shots plus a small health/regeneration pack dropped for allies. Keeps the swarm alive in extended fights, at the cost of raw offensive power.",
|
||||
"path": "res://assets/images/ships/vorg/nurse.png",
|
||||
},
|
||||
{
|
||||
"name": "BEHEMOTH", "role": "Heavy",
|
||||
"desc": "Tankier and slower, with heavy acid shots that carry a large damage-over-time effect. The swarm's apex predator — absorbs punishment while its acid keeps eating away at anyone nearby.",
|
||||
"path": "res://assets/images/ships/vorg/behemoth.png",
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
# Row layout constants (screen is 1280×800)
|
||||
const ROW_X1 := 120.0
|
||||
const ROW_X2 := 1160.0
|
||||
const ROW_H := 130.0
|
||||
const ROW_GAP := 10.0
|
||||
const ROW_H := 100.0
|
||||
const ROW_GAP := 8.0
|
||||
const ROW_START := 195.0
|
||||
const IMG_W := 130.0
|
||||
|
||||
var _root: Control
|
||||
var _content: Control
|
||||
@@ -120,11 +182,12 @@ func _show_ship_selection() -> void:
|
||||
_label(c, "Playing as — " + _chosen_race.name, 14, _chosen_race.color,
|
||||
0, 155, 1280, 185, HORIZONTAL_ALIGNMENT_CENTER)
|
||||
|
||||
for i in SHIPS.size():
|
||||
var ships: Array = _chosen_race.ships
|
||||
for i in ships.size():
|
||||
var y := ROW_START + i * (ROW_H + ROW_GAP)
|
||||
var btn := _make_ship_row(SHIPS[i], _chosen_race.color)
|
||||
var btn := _make_ship_row(ships[i], _chosen_race.color)
|
||||
_place(btn, ROW_X1, y, ROW_X2, y + ROW_H)
|
||||
btn.pressed.connect(_on_ship_chosen.bind(SHIPS[i]))
|
||||
btn.pressed.connect(_on_ship_chosen.bind(ships[i]))
|
||||
c.add_child(btn)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user