#102/#103 (#97d/#97e): the outpost, and the garrison you compose for it
Landed together because an outpost you cannot crew is decoration, and a garrison menu with no building to hang it off is nothing at all. #102, the building. Researched at "Forward Bases", two prerequisites deep and cheaper than any mid-game structure - the ticket asks for early, and the answer to waves attacking your buildings should arrive at about the time the waves can hurt them. It is drawn as a watch mast on a tripod with two open berths, deliberately the least machinery of any structure here: it makes nothing and refines nothing, it holds a position. 120hp, more than a crafter, because being shot at is its job. #103, the garrison. Two separate things live on its record, and conflating them was the first thing to get wrong: the ORDER, what the player asked for, and the CREW, who is actually there. This menu edits the order only; #104 fills the crew. Keeping the order as a wish is what lets an outpost ask for a hull nobody has built yet and wait for it, rather than the request evaporating - and it is why the panel shows "here / ordered" instead of one number. "Only ships that attack can be assigned" is expressed as capabilities rather than a list of types, so a new armed vessel is eligible the day it is added and an unarmed one never is by accident. Today that means the interceptor and the laser vessel; a shield, a hauler and an engine block cannot hold a position however much one might want them to. Two berths by default, and Garrison Bays raises it at outposts ALREADY standing - the same shape as freight_yards for hubs, because a bonus that only reached new buildings would mean demolishing and rebuilding to collect it. The panel builds its own rows from the catalog rather than from nodes placed in the scene, so adding an armed vessel later needs no scene surgery. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
3debcd7edd
commit
3c632276af
12 changed files with 909 additions and 1 deletions
|
|
@ -50,6 +50,9 @@ enum Icon {
|
|||
# inserting anywhere earlier renumbers every icon int already stored in a
|
||||
# scene file.
|
||||
PAUSE, RESUME,
|
||||
# #102: appended, like everything above - inserting anywhere earlier
|
||||
# renumbers every icon int already stored in every scene.
|
||||
OUTPOST,
|
||||
}
|
||||
|
||||
# Size the glyphs were originally drawn against. Every glyph dimension is
|
||||
|
|
@ -291,6 +294,8 @@ func _draw() -> void:
|
|||
_draw_laser_shot(center, pulse, s)
|
||||
Icon.DISTORDER_VESSEL:
|
||||
_draw_distorder_vessel(center, pulse, s)
|
||||
Icon.OUTPOST:
|
||||
_draw_outpost_icon(center, pulse, s)
|
||||
|
||||
|
||||
func _draw_close(center: Vector2, pulse: float, s: float) -> void:
|
||||
|
|
@ -659,6 +664,30 @@ func _draw_ship_lab_icon(center: Vector2, pulse: float, s: float) -> void:
|
|||
_active_color(), pulse, 0.35 * s, core_color)
|
||||
|
||||
|
||||
func _draw_outpost_icon(center: Vector2, pulse: float, s: float) -> void:
|
||||
# A watchtower with two vessels holding station off it. The hub's
|
||||
# octagon already means "things are stationed here and go out from
|
||||
# here"; this has to mean "things stay here and watch", so it is a
|
||||
# narrow mast with a sensor head rather than a ring, and the two darts
|
||||
# beside it are the garrison.
|
||||
var mast_top: Vector2 = center + Vector2(0.0, -11.0) * s
|
||||
var mast_foot: Vector2 = center + Vector2(0.0, 9.0) * s
|
||||
NeonDraw.draw_glowing_line(self, mast_foot, mast_top, _active_color(), pulse, 0.5 * s, core_color)
|
||||
NeonDraw.draw_glowing_polygon(self, PackedVector2Array([
|
||||
mast_top + Vector2(0.0, -4.0) * s, mast_top + Vector2(4.0, 0.0) * s,
|
||||
mast_top + Vector2(0.0, 4.0) * s, mast_top + Vector2(-4.0, 0.0) * s,
|
||||
]), _active_color(), pulse, core_color)
|
||||
# Footing, so the mast stands on something rather than floating.
|
||||
NeonDraw.draw_glowing_line(self, mast_foot + Vector2(-6.0, 0.0) * s,
|
||||
mast_foot + Vector2(6.0, 0.0) * s, _active_color(), pulse, 0.4 * s, core_color)
|
||||
for side in [-1.0, 1.0]:
|
||||
var at: Vector2 = center + Vector2(11.0 * side, -1.0) * s
|
||||
NeonDraw.draw_glowing_polygon(self, PackedVector2Array([
|
||||
at + Vector2(0.0, -4.0) * s, at + Vector2(2.6, 3.0) * s,
|
||||
at + Vector2(-2.6, 3.0) * s,
|
||||
]), _active_color(), pulse, core_color)
|
||||
|
||||
|
||||
func _draw_transport_hub_icon(center: Vector2, pulse: float, s: float) -> void:
|
||||
# A ring of docking cradles with a freight box in the middle: reads as
|
||||
# "things are stationed here and go out from here", which is what the hub
|
||||
|
|
|
|||
Loading…
Reference in a new issue