spaceship/vfx/BombBlastVFX.gd
Loïc Wisniewski 0c48b5e739 #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>
2026-08-23 21:58:56 +02:00

26 lines
888 B
GDScript

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)