extends Node2D var _age := 0.0 const DURATION := 0.065 func _ready() -> void: z_index = 25 func _process(delta: float) -> void: _age += delta if _age >= DURATION: queue_free() else: queue_redraw() func _draw() -> void: var fade := clampf(1.0 - _age / DURATION, 0.0, 1.0) var length_scale := 0.45 + fade * 0.55 # Compact flame lobes instead of thin crossing lines that flicker at subpixels. draw_set_transform(Vector2.ZERO, 0.0, Vector2(length_scale, 0.65 + fade * 0.35)) for index in range(4, 0, -1): draw_circle(Vector2(4.0, 0.0), float(index) * 2.4, Color(1.0, 0.32, 0.035, 0.025 * fade), true, -1, true) var flame := PackedVector2Array([ Vector2(-1, -2), Vector2(3, -4), Vector2(7, -2.5), Vector2(10, -3.5), Vector2(8.5, -1), Vector2(16, 0), Vector2(9, 1.6), Vector2(10.5, 3), Vector2(6, 2.5), Vector2(3, 4), Vector2(-1, 2), ]) draw_colored_polygon(flame, Color(1.0, 0.35, 0.045, fade * 0.85)) draw_polyline(flame, Color(1.0, 0.5, 0.07, fade * 0.35), 1.0, true) draw_colored_polygon(PackedVector2Array([ Vector2(0, -1.5), Vector2(4, -2), Vector2(11, 0), Vector2(4, 2), Vector2(0, 1.5), ]), Color(1.0, 0.78, 0.22, fade)) draw_line(Vector2.ZERO, Vector2(6, 0), Color(1.0, 0.97, 0.76, fade), 2.2, true) draw_set_transform(Vector2.ZERO)