Take planets by killing what defends them

#211 conquest is the fight now: a planet registers the garrison its setup
authors, each defender's own death counts against it, and the last one takes
the world. The capture points - stand in a ring, wait out a timer, once per
ring - are gone, along with the editor palette that placed them.
#212 conquest opens a dialog on the surface naming the research points
recovered; the award travels with the signal, after it is banked.
#209 the prologue's charted sectors go with the breach, so the map the
survivors keep is of where they now are - and "chart 30 sectors" is no
longer complete before they have flown anywhere.
#218 enemy variety is gated on the FLEET, not on wave strength: a starting
fleet meets chasers only at any wave number, and each vessel past three
opens one more kind.

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 13:31:25 +02:00
commit 6e13b6397c
42 changed files with 540 additions and 749 deletions

View file

@ -1,9 +1,9 @@
extends Label
# Polls GameState directly, same convention as ResourceReadout, so it stays
# correct without anyone having to push updates into it. Hidden
# entirely when the current planet has no capture points (e.g. no setup
# resolved for it) rather than showing "0/0".
# correct without anyone having to push updates into it. Hidden entirely when
# the current planet has no garrison (e.g. no setup resolved for it) rather
# than showing "0/0".
# A direct script preload, not the bare "PlanetDefinitions" global class_name
# - the same load-order hazard PlanetSurfaceController's setup_host comment
@ -20,7 +20,7 @@ func _process(_delta: float) -> void:
visible = false
return
var planet_id: String = GameState.planet_id
var total: int = GameState.total_capture_points(planet_id)
var total: int = GameState.garrison_total(planet_id)
if total <= 0:
visible = false
return
@ -39,7 +39,8 @@ func _process(_delta: float) -> void:
if not _was_conquered:
_flash()
else:
text = "CAPTURED %d/%d" % [GameState.captured_point_count(planet_id), total]
# #211: what is left to fight, counted down, rather than rings held.
text = "GARRISON %d/%d" % [GameState.garrison_remaining(planet_id), total]
_was_conquered = conquered