spaceship/enemies
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Claude cb3650e3a9 #233: open with fewer enemies, of one kind, arriving in sequence
Measured before changing anything. The ticket's two halves needed opposite
fixes, and the first one made the second worse.

TOO COMPLEX. Variety was gated on fleet size alone, so a player who had
grown early met two kinds of trouble in the first wave they ever saw - a
fleet of four opened on two lancers and three chasers. Each roster entry now
carries a min_wave as well, so the openings teach one enemy at a time
whatever the fleet already looks like.

That alone pushed wave 1 against a fleet of six from a mixed six to SEVEN
chasers: budget that used to buy a lancer now bought two more chasers. So an
early wave also has a size ceiling, 2 + wave_number * 2. Wave 1 is four
chasers at any fleet size; the cap stops binding by wave 6 and nothing about
later balance moves.

  before  wave 1 fleet 4 -> 2 lancers, 3 chasers
          wave 1 fleet 6 -> 1 sniper, 2 lancers, 3 chasers
  after   wave 1 fleet 4 -> 4 chasers
          wave 1 fleet 6 -> 4 chasers

ARRIVE AT THE SAME TIME was literal: the whole wave spawned inside one frame
as a closed ring around the fleet, which reads as a wall rather than as an
attack. The first hull still lands immediately so a wave is never felt as
late, and the rest follow every 0.45s. Same enemies, same bearing, same
total - they simply do not all exist at once.

Four existing cases objected, and each was right to: they encode intents
that still hold LATER - a large wave must be varied, fleet growth must open
more kinds, a wave can field a lancer at all, and killing a wave must bring
the quiet back. The first three now ask at a wave number where variety is
permitted rather than being weakened. The fourth runs the arrivals out
before killing anything, and gained an assertion that doing so ADDS enemies
- which fails if the staggering ever collapses back into one frame.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019AJMdB7iuHuLFZM1aBu3GD
2026-09-15 23:44:16 -04:00
..
ArtilleryEnemyDefinition.tres #114: the enemy bomber flies, and its bombs arrive 2026-08-23 21:58:56 +02:00
ArtilleryShell.gd #114: the enemy bomber flies, and its bombs arrive 2026-08-23 21:58:56 +02:00
ArtilleryShell.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
ArtilleryShell.tscn #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
ChaserEnemyDefinition.tres #101 (#97c): waves attack buildings 2026-08-23 13:53:17 +02:00
Enemy.gd Complete lab, quest, garrison, and energy tickets 2026-09-03 00:12:08 +02:00
Enemy.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
Enemy.tscn #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyArtilleryComponent.gd #114: the enemy bomber flies, and its bombs arrive 2026-08-23 21:58:56 +02:00
EnemyArtilleryComponent.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyArtilleryComponent.tscn #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyBigLaserBeam.gd Tune and optimize boss encounter 2026-09-03 11:49:51 +02:00
EnemyBigLaserBeam.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyBigLaserBeam.tscn #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyBigLaserComponent.gd #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyBigLaserComponent.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyBigLaserComponent.tscn #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyDefinition.gd #101 (#97c): waves attack buildings 2026-08-23 13:53:17 +02:00
EnemyDefinition.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyDefinitions.gd #96: the lancer, a rammer that announces itself 2026-08-23 11:52:18 +02:00
EnemyDefinitions.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyLungeComponent.gd #115: the lancer winds up once, and leaves hard 2026-08-23 21:38:08 +02:00
EnemyLungeComponent.gd.uid Add the .uid files Godot generated for the new scripts 2026-08-23 19:23:50 +02:00
EnemyLungeComponent.tscn #96: the lancer, a rammer that announces itself 2026-08-23 11:52:18 +02:00
EnemyMarker.gd #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyMarker.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyProjectile.gd #101 (#97c): waves attack buildings 2026-08-23 13:53:17 +02:00
EnemyProjectile.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyProjectile.tscn #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyPursuitComponent.gd #113: a wave converges on the nearest structure from any distance 2026-08-23 21:38:09 +02:00
EnemyPursuitComponent.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyPursuitComponent.tscn #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyPursuitComponentMothership.tscn #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyRangedWeaponComponent.gd #101 (#97c): waves attack buildings 2026-08-23 13:53:17 +02:00
EnemyRangedWeaponComponent.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyRangedWeaponComponent.tscn #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemySpawner.gd #233: open with fewer enemies, of one kind, arriving in sequence 2026-09-15 23:44:16 -04:00
EnemySpawner.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemySpawnerComponent.gd #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemySpawnerComponent.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemySpawnerComponent.tscn #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemySpawnerComponentArtillery.tscn #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemySpawnerComponentChaser.tscn #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyStandoffComponent.gd #113: a wave converges on the nearest structure from any distance 2026-08-23 21:38:09 +02:00
EnemyStandoffComponent.gd.uid #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyStandoffComponent.tscn #84: move 215 root files into a folder hierarchy 2026-08-21 19:44:14 +02:00
EnemyTargets.gd #113: a wave converges on the nearest structure from any distance 2026-08-23 21:38:09 +02:00
EnemyTargets.gd.uid Add the .uid files Godot generated for the new scripts 2026-08-23 19:23:50 +02:00
LancerEnemyDefinition.tres #101 (#97c): waves attack buildings 2026-08-23 13:53:17 +02:00
MothershipEnemyDefinition.tres #101 (#97c): waves attack buildings 2026-08-23 13:53:17 +02:00
SniperEnemyDefinition.tres #101 (#97c): waves attack buildings 2026-08-23 13:53:17 +02:00
TurretSpawnerEnemyDefinition.tres #101 (#97c): waves attack buildings 2026-08-23 13:53:17 +02:00