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

@ -40,7 +40,6 @@ func _process(delta: float) -> bool:
setup.setup_id = "reward_probe"
setup.display_name = "Reward Probe"
setup.surface_profile_id = "rocky"
setup.capture_points = PackedVector2Array([Vector2(10, 10), Vector2(-10, -10)])
setup.research_point_reward = 5
var path: String = "user://test_reward_probe.tres"
if ResourceSaver.save(setup, path) != OK:
@ -55,9 +54,9 @@ func _process(delta: float) -> bool:
# A research_lab planet's own definition pays a flat 1.
var flat_rate: int = int(load("res://planets/ResearchLabPlanetDefinition.tres").conquest_research_points)
game_state.research_points = 0
game_state.register_capture_points("hard_lab", 2, "research_lab", 6)
game_state.mark_point_captured("hard_lab", 0)
game_state.mark_point_captured("hard_lab", 1)
game_state.register_planet_garrison("hard_lab", 2, "research_lab", 6)
game_state.mark_garrison_enemy_destroyed("hard_lab")
game_state.mark_garrison_enemy_destroyed("hard_lab")
if game_state.research_points != 6:
return _fail("a hard lab authored at 6 points awarded %d" % game_state.research_points)
if flat_rate >= 6:
@ -66,8 +65,8 @@ func _process(delta: float) -> bool:
# --- C. silence still means the type's rate ------------------
game_state.research_points = 0
game_state.register_capture_points("plain_lab", 1, "research_lab", 0)
game_state.mark_point_captured("plain_lab", 0)
game_state.register_planet_garrison("plain_lab", 1, "research_lab", 0)
game_state.mark_garrison_enemy_destroyed("plain_lab")
if game_state.research_points != flat_rate:
return _fail("a setup with no authored reward paid %d, expected the type's %d" \
% [game_state.research_points, flat_rate])