36 lines
1.2 KiB
GDScript
36 lines
1.2 KiB
GDScript
extends BasicEnemy
|
|||
|
|
class_name BossLobster
|
||
|
|
## The Snippest itself: a lobster five times the size with five times the stats.
|
||
|
|
## Spawned by the EnemySpawner on boss milestone waves.
|
||
|
|
|
||
|
|
const BOSS_MULTIPLIER := 5.0
|
||
|
|
|
||
|
|
func _ready():
|
||
|
|
# 5x combat stats - applied BEFORE super._ready() so the hitbox
|
||
|
|
# picks them up via set_stats(attack_damage, attack_knockback)
|
||
|
|
max_health *= BOSS_MULTIPLIER
|
||
|
|
attack_damage *= BOSS_MULTIPLIER
|
||
|
|
attack_knockback *= BOSS_MULTIPLIER
|
||
|
|
attack_range *= BOSS_MULTIPLIER # A 5x lobster has 5x reach
|
||
|
|
|
||
|
|
# Deliberately NOT 5x: movement (17.5 speed would be inescapable).
|
||
|
|
# Big things lumber. Tune here if the boss should be faster.
|
||
|
|
move_speed *= 1.2
|
||
|
|
|
||
|
|
# Boss rewards: jackpot gold, guaranteed health orb
|
||
|
|
gold_reward = 250
|
||
|
|
health_orb_drop_chance = 1.0
|
||
|
|
|
||
|
|
super._ready()
|
||
|
|
|
||
|
|
_apply_boss_scale()
|
||
|
|
|
||
|
|
## Uniformly scale the visual and collision children 5x around the root.
|
||
|
|
## Child-node scaling (not root CharacterBody3D scale, not shared shape
|
||
|
|
## resources) keeps physics sane and other lobsters unaffected.
|
||
|
|
func _apply_boss_scale():
|
||
|
|
for child_name in ["Mesh", "CollisionShape3D", "HurtBox", "HitBox"]:
|
||
|
|
var child = get_node_or_null(child_name)
|
||
|
|
if child:
|
||
|
|
child.transform = child.transform.scaled(Vector3.ONE * BOSS_MULTIPLIER)
|