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>
26 lines
888 B
GDScript
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)
|