#114: the enemy bomber flies, and its bombs arrive
It was a siege piece that crept at 20px/s and lobbed a shell taking five seconds to cross the gap. That read as a thing that was stuck rather than a thing that was dangerous: by the time a shell landed the fleet had wandered off, and the tower was still approaching. It now moves at 150px/s, faces where it is going, and its bombs travel at 460 - fast enough to arrive while the target is roughly where it was aimed, slow enough that the impact cross is a warning rather than a formality. The hull is a bomber rather than a lumpy octagon: swept wings, a short fuselage, a bay under it. The bomb has fins and a hot core down its smoke trail, and the blast throws real debris - a BombBlastVFX built from the same LightBurstVFX as every other explosion, plus a second ring chasing the first outwards and a white flash that is gone almost at once. It also bombs what the player has BUILT, through the shared targeting rather than the fleet alone, and its blast damages structures - it had been asking Fleet directly and hitting only player_ships, which was already out of step with #101. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
1a2a27b6e8
commit
0c48b5e739
4 changed files with 109 additions and 31 deletions
26
vfx/BombBlastVFX.gd
Normal file
26
vfx/BombBlastVFX.gd
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
class_name BombBlastVFX
|
||||
extends LightBurstVFX
|
||||
|
||||
|
||||
func _init() -> void:
|
||||
# #114: the bomber's blast. Between a hull going up and a structure
|
||||
# coming down - it is the biggest thing an enemy can do to the player
|
||||
# without destroying anything outright, and it should land like it.
|
||||
color = Color(1.0, 0.5, 0.2)
|
||||
particle_count = 26
|
||||
lifetime = 0.8
|
||||
min_speed = 140.0
|
||||
max_speed = 520.0
|
||||
shockwave_radius = 150.0
|
||||
shockwave_color = Color(1.0, 0.78, 0.4)
|
||||
|
||||
|
||||
# Takes the colour from the shell that threw it, so a bomber recoloured in
|
||||
# its definition does not explode in the default orange.
|
||||
static func spawn(parent: Node, world_position: Vector2,
|
||||
blast_color: Color = Color(1.0, 0.5, 0.2)) -> void:
|
||||
var vfx: BombBlastVFX = BombBlastVFX.new()
|
||||
vfx.position = world_position
|
||||
vfx.color = blast_color
|
||||
vfx.shockwave_color = blast_color.lerp(Color(1.0, 0.95, 0.8), 0.45)
|
||||
parent.add_child(vfx)
|
||||
Loading…
Reference in a new issue