spaceship/enemies/LancerEnemyDefinition.tres
Loïc Wisniewski 890e1c812f #96: the lancer, a rammer that announces itself
A second suicide vessel alongside the chaser, but where the chaser simply
beelines, this one is a rhythm the player can read. It drifts in from beyond
lock_range at half speed, LOCKS a point, rocks 30px back and forth along the
charge axis for 1.2s, draws a thin line down its trajectory for the last
300ms, and only then crosses the gap in one straight 950px/s run before
coasting to a stop and starting over.

The lock is what makes the wind-up worth anything: nothing re-reads the
fleet once it begins, so the charge goes where the target WAS and stepping
off the line works. Same bargain as EnemyBigLaserBeam.

EnemyLungeComponent is a Node2D rather than a plain Node because the
trajectory line has to be drawn somewhere, and top_level keeps that drawing
in world space while the hull it hangs off spins to face the lock.

The roaming spawner gets a 25% lancer share. It is the only place the player
meets an enemy off an authored map, so without that the lancer would exist
only in the setup editor.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 11:52:18 +02:00

19 lines
719 B
Text

[gd_resource type="Resource" script_class="EnemyDefinition" load_steps=3 format=3]
[ext_resource type="Script" path="res://enemies/EnemyDefinition.gd" id="1"]
[ext_resource type="PackedScene" path="res://enemies/EnemyLungeComponent.tscn" id="2"]
[resource]
script = ExtResource("1")
enemy_id = "lancer"
display_name = "Lancer"
max_hp = 2
speed = 220.0
acceleration = 420.0
rotation_speed = 7.0
hull_points = PackedVector2Array(0, -32, 6, -8, 11, 14, 4, 10, 0, 20, -4, 10, -11, 14, -6, -8)
glow_color = Color(1, 0.45, 0.15, 1)
detail_lines = PackedVector2Array(0, -28, 0, 6, -7, -2, 7, -2)
detail_rings = PackedVector2Array(0, 8, 4, 0)
dies_on_contact = true
component_scenes = Array[PackedScene]([ExtResource("2")])