Hivemind audio and behavior fixes, boss item drops, duplicate run item handling, out of stock handling

This commit is contained in:
2026-03-12 16:23:07 -04:00
parent d936a01cd3
commit 2d5129da0e
4 changed files with 147 additions and 30 deletions
+23 -5
View File
@@ -389,6 +389,9 @@ func _tick_active(delta: float) -> void:
func _tick_teleport(delta: float) -> void:
match _tp_state:
TeleportState.IDLE:
# Don't start teleport during beam attack
if _beam_telegraphing or _beam_active:
return
_teleport_timer -= delta
if _teleport_timer <= 0.0:
_start_fade_out()
@@ -404,6 +407,7 @@ func _tick_teleport(delta: float) -> void:
func _start_fade_out() -> void:
AudioManager.play("hivemind_teleport")
_tp_state = TeleportState.FADING_OUT
_fade_timer = FADE_OUT_TIME
@@ -987,11 +991,24 @@ func _die() -> void:
queue_free()
func _spawn_item_drop() -> void:
var chosen: String = ALL_ITEM_PATHS[randi() % ALL_ITEM_PATHS.size()]
# Filter out already collected items
var available: Array[String] = []
for path in ALL_ITEM_PATHS:
var already_collected := false
for collected in RunManager.run_items:
if collected.resource_path == path:
already_collected = true
break
if not already_collected:
available.append(path)
if available.is_empty():
return
var chosen: String = available[randi() % available.size()]
var pickup = RUN_ITEM_PICKUP.instantiate()
pickup.item = load(chosen)
pickup.global_position = global_position + Vector2(-30, 0)
get_parent().add_child(pickup)
var spawn_pos := global_position + Vector2(-30, 0)
get_parent().call_deferred("add_child", pickup)
pickup.set_deferred("global_position", spawn_pos)
func _spawn_body_part_drop() -> void:
var unacquired: Array[String] = []
@@ -1003,5 +1020,6 @@ func _spawn_body_part_drop() -> void:
var chosen: String = unacquired[randi() % unacquired.size()]
var pickup = BODY_PART_PICKUP.instantiate()
pickup.part = load(chosen)
pickup.global_position = global_position + Vector2(30, 0)
get_parent().add_child(pickup)
var spawn_pos := global_position + Vector2(30, 0)
get_parent().call_deferred("add_child", pickup)
pickup.set_deferred("global_position", spawn_pos)
+19 -5
View File
@@ -466,11 +466,24 @@ func _die() -> void:
queue_free()
func _spawn_item_drop() -> void:
var chosen: String = ALL_ITEM_PATHS[randi() % ALL_ITEM_PATHS.size()]
# Filter out already collected items
var available: Array[String] = []
for path in ALL_ITEM_PATHS:
var already_collected := false
for collected in RunManager.run_items:
if collected.resource_path == path:
already_collected = true
break
if not already_collected:
available.append(path)
if available.is_empty():
return
var chosen: String = available[randi() % available.size()]
var pickup = RUN_ITEM_PICKUP.instantiate()
pickup.item = load(chosen)
pickup.global_position = global_position + Vector2(-30, 0)
get_parent().add_child(pickup)
var spawn_pos := global_position + Vector2(-30, 0)
get_parent().call_deferred("add_child", pickup)
pickup.set_deferred("global_position", spawn_pos)
func _spawn_body_part_drop() -> void:
var unacquired: Array[String] = []
@@ -482,5 +495,6 @@ func _spawn_body_part_drop() -> void:
var chosen: String = unacquired[randi() % unacquired.size()]
var pickup = BODY_PART_PICKUP.instantiate()
pickup.part = load(chosen)
pickup.global_position = global_position + Vector2(30, 0)
get_parent().add_child(pickup)
var spawn_pos := global_position + Vector2(30, 0)
get_parent().call_deferred("add_child", pickup)
pickup.set_deferred("global_position", spawn_pos)
+19 -5
View File
@@ -420,11 +420,24 @@ func _die() -> void:
queue_free()
func _spawn_item_drop() -> void:
var chosen: String = ALL_ITEM_PATHS[randi() % ALL_ITEM_PATHS.size()]
# Filter out already collected items
var available: Array[String] = []
for path in ALL_ITEM_PATHS:
var dominated := false
for collected in RunManager.run_items:
if collected.resource_path == path:
dominated = true
break
if not dominated:
available.append(path)
if available.is_empty():
return
var chosen: String = available[randi() % available.size()]
var pickup = RUN_ITEM_PICKUP.instantiate()
pickup.item = load(chosen)
pickup.global_position = global_position + Vector2(-30, 0)
get_parent().add_child(pickup)
var spawn_pos := global_position + Vector2(-30, 0)
get_parent().call_deferred("add_child", pickup)
pickup.set_deferred("global_position", spawn_pos)
func _spawn_body_part_drop() -> void:
var unacquired: Array[String] = []
@@ -436,8 +449,9 @@ func _spawn_body_part_drop() -> void:
var chosen: String = unacquired[randi() % unacquired.size()]
var pickup = BODY_PART_PICKUP.instantiate()
pickup.part = load(chosen)
pickup.global_position = global_position + Vector2(30, 0)
get_parent().add_child(pickup)
var spawn_pos := global_position + Vector2(30, 0)
get_parent().call_deferred("add_child", pickup)
pickup.set_deferred("global_position", spawn_pos)
# ---------------------------------------------------------------------------
# Visual — phase-aware tints (overrides EnemyBase._tick_flash)