Research the Fleet Office, and give it one hull

Fleet Offices sit behind a new Berth Authority doctrine. It costs ore and no
research points, deliberately: points come only from conquering a planet,
conquering needs a fleet, and the fleet caps at its opening hull until an
office exists - so pricing the fleet's own gate in them would lock a player
behind a fight that one vessel has to win first. The research unlocks the
STRUCTURE; capacity is still the built, supplied thing #219 made it.

The tree gains a sixth lane for it, so the branch that fleet size vacated is
occupied again rather than reading as a hole.

Also fixes a shape #216 exposed: a stationed transporter drew a hull written
into its own script while a delivered one drew the definition's, and the
transporter's definition declared none at all - so one in flight was an
empty polygon. Both vessels now draw the definition, and a test pins that
the two paths agree. The repair drone had the same fault, off by two units.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019AJMdB7iuHuLFZM1aBu3GD
This commit is contained in:
Loïc Wisniewski 2026-09-05 21:57:53 +02:00
commit cc71811d89
8 changed files with 161 additions and 64 deletions

View file

@ -508,28 +508,38 @@ var buildings: Array = []
# leaving the ship-lab branch zigzagging between 0.82 and 0.94 with nothing
# beside it.
#
# 0.10 supply logistics -> freight -> freight_yards
# 0.30 industry power_systems -> field_engineering -> drone_bays
# 0.50 spine shipyards -> coordination -> deep_space_scanning
# 0.70 ground forward_bases -> garrison_bays
# 0.90 vessels vessel_science -> logistics_command
#
# Fleet size is deliberately absent: #219 moved it out of research entirely
# and onto the Fleet Office, which is why the widest lane is now empty.
# 0.08 supply logistics -> freight -> freight_yards
# 0.25 industry power_systems -> field_engineering -> drone_bays
# 0.42 spine shipyards -> coordination -> deep_space_scanning
# 0.58 fleet berth_authority
# 0.75 ground forward_bases -> garrison_bays
# 0.92 vessels vessel_science -> logistics_command
const SKILL_TREE: Array = [
{
"id": "shipyards", "name": "Shipyards", "cost": 15, "requires": "",
"x": 0.50, "unlocks": BUILDING_SHIP_CRAFTER,
"x": 0.42, "unlocks": BUILDING_SHIP_CRAFTER,
"desc": "Build ship crafters, and buy extra vessels at them.",
},
{
# Fleet size is a researched thing again, but only the STRUCTURE is:
# the office still has to be built and supplied, which is what #219
# moved it to. Ore only, and no research points: points come solely
# from conquering a planet, and conquering one needs a fleet, so
# pricing this in them would lock the fleet at its opening hull
# behind a fight that hull has to win first.
"id": "berth_authority", "name": "Berth Authority", "cost": 20,
"requires": "shipyards",
"x": 0.58, "unlocks": BUILDING_FLEET_OFFICE,
"desc": "Build Fleet Offices. Each holds one more berth in the fleet, and has to be kept supplied or the vessel in it is lost.",
},
{
"id": "logistics", "name": "Logistics", "cost": 25, "requires": "shipyards",
"x": 0.10, "unlocks": BUILDING_EXTRACTOR,
"x": 0.08, "unlocks": BUILDING_EXTRACTOR,
"desc": "Build extractors on planets. They mine ore whether or not you are nearby.",
},
{
"id": "coordination", "name": "Coordination", "cost": 20, "requires": "shipyards",
"x": 0.50, "unlocks": BUILDING_COMMAND_CENTER, "research_points": 1,
"x": 0.42, "unlocks": BUILDING_COMMAND_CENTER, "research_points": 1,
"desc": "Build command centers, where the fleet formation is arranged.",
},
{
@ -539,7 +549,7 @@ const SKILL_TREE: Array = [
# start being able to hurt them.
"id": "forward_bases", "name": "Forward Bases", "cost": 30, "requires": "coordination",
"costs": {"ore": 30, "gas": 12},
"x": 0.70, "unlocks": BUILDING_OUTPOST, "research_points": 1,
"x": 0.75, "unlocks": BUILDING_OUTPOST, "research_points": 1,
"desc": "Build outposts: forward positions vessels can be stationed at, to hold ground you are not standing on.",
},
{
@ -548,7 +558,7 @@ const SKILL_TREE: Array = [
# researching it never means demolishing and rebuilding.
"id": "garrison_bays", "name": "Garrison Bays", "cost": 110, "requires": "forward_bases",
"costs": {"ore": 110, "gas": 35},
"x": 0.70, "outpost_bonus": 1, "research_points": 2,
"x": 0.75, "outpost_bonus": 1, "research_points": 2,
"icon": 40,
"desc": "Permanent: +1 berth at every outpost, including ones already built.",
},
@ -559,7 +569,7 @@ const SKILL_TREE: Array = [
# manages what shipyards do.
"id": "logistics_command", "name": "Logistics Command", "cost": 140,
"costs": {"ore": 140, "gas": 40},
"requires": "vessel_science", "x": 0.90,
"requires": "vessel_science", "x": 0.92,
"unlocks": BUILDING_PLANNING_CENTER, "research_points": 3,
"desc": "Build a planning center: set how many of each vessel should always exist, and the crafters are kept working until they do.",
},
@ -569,7 +579,7 @@ const SKILL_TREE: Array = [
# arrive after the player has some worth looking after.
"id": "field_engineering", "name": "Field Engineering", "cost": 95,
"costs": {"ore": 95, "gas": 35, "energy": 20},
"requires": "power_systems", "x": 0.30,
"requires": "power_systems", "x": 0.25,
"unlocks": BUILDING_WORKSHOP, "research_points": 2,
"desc": "Build spacial workshops. Their drones fly out and repair damaged structures, spending ore delivered to the workshop.",
},
@ -578,40 +588,40 @@ const SKILL_TREE: Array = [
# that reaches workshops already standing.
"id": "drone_bays", "name": "Drone Bays", "cost": 150,
"costs": {"ore": 150, "gas": 50, "energy": 35},
"requires": "field_engineering", "x": 0.30,
"requires": "field_engineering", "x": 0.25,
"workshop_bonus": 1, "research_points": 2, "icon": 43,
"desc": "Permanent: +1 berth at every spacial workshop, including ones already built. The drone to fill it is still yours to build.",
},
{
"id": "freight", "name": "Freight Handling", "cost": 40, "requires": "logistics",
"costs": {"ore": 40, "gas": 15},
"x": 0.10, "unlocks": BUILDING_TRANSPORT_HUB, "research_points": 1,
"x": 0.08, "unlocks": BUILDING_TRANSPORT_HUB, "research_points": 1,
"desc": "Build transport hubs. Transporters are built at a ship crafter and assigned to a hub, which then runs its routes without you.",
},
{
"id": "vessel_science", "name": "Vessel Science", "cost": 35, "requires": "shipyards",
"costs": {"ore": 35, "gas": 10},
"x": 0.90, "unlocks": BUILDING_SHIP_LAB, "research_points": 1,
"x": 0.92, "unlocks": BUILDING_SHIP_LAB, "research_points": 1,
"desc": "Build ship labs, where each vessel type is upgraded and new ones unlocked.",
},
{
"id": "deep_space_scanning", "name": "Deep-Space Scanning", "cost": 50,
"costs": {"ore": 50, "gas": 15},
"requires": "coordination", "x": 0.50,
"requires": "coordination", "x": 0.42,
"unlocks": BUILDING_PLANET_SCANNER, "research_points": 1,
"desc": "Build a planet scanner and reveal the nearest world of a chosen type.",
},
{
"id": "freight_yards", "name": "Freight Yards", "cost": 80, "requires": "freight",
"costs": {"ore": 80, "gas": 30},
"x": 0.10, "hub_bonus": 1, "research_points": 2,
"x": 0.08, "hub_bonus": 1, "research_points": 2,
"icon": 12,
"desc": "Permanent: +1 berth at every hub, including ones already built. The transporter to fill it is still yours to build.",
},
{
"id": "power_systems", "name": "Power Systems", "cost": 45, "requires": "freight",
"costs": {"ore": 45, "gas": 35},
"x": 0.30, "unlocks": BUILDING_GAS_BURNER, "research_points": 2,
"x": 0.25, "unlocks": BUILDING_GAS_BURNER, "research_points": 2,
"desc": "Build gas burners. Each converts gas into energy at its own site - hub transporters keep it stocked and collect what it makes.",
},
]