Properly implement the Hammer item (#599)

* Properly implement the Hammer item

* Update Boo.gd

* Update LongFirebar.tscn
This commit is contained in:
John Cooper McDonald
2025-10-15 12:14:19 -05:00
committed by GitHub
parent 651988bf5e
commit 8474bc3c19
48 changed files with 143 additions and 21 deletions

View File

@@ -14,6 +14,10 @@ func die() -> void:
func die_from_object(_node: Node2D) -> void:
destroy()
func die_from_hammer(_node: Node2D) -> void:
AudioManager.play_sfx("hammer_hit", global_position)
destroy()
func summon_particle() -> void:
var node = BARREL_DESTRUCTION_PARTICLE.instantiate()

View File

@@ -33,7 +33,7 @@ func handle_movement(delta: float) -> void:
func on_area_entered(area: Area2D) -> void:
if area.owner is Player:
if area.owner.is_invincible:
if area.owner.is_invincible or area.name == "HammerHitbox":
die()
else:
area.owner.damage()

View File

@@ -11,7 +11,7 @@ func _physics_process(delta: float) -> void:
i.get_node("Sprite").scale.x = sign(get_tree().get_first_node_in_group("Players").global_position.x + 1 - i.global_position.x)
func on_area_entered(area: Area2D) -> void:
if area.owner is Player:
if area.owner is Player and area.name != "HammerHitbox":
area.owner.damage()
func flag_die() -> void:

View File

@@ -22,7 +22,7 @@ func flag_die() -> void:
queue_free()
func on_area_entered(area: Area2D) -> void:
if area.owner is Player:
if area.owner is Player and area.name != "HammerHitbox":
area.owner.damage()
func play_sfx() -> void:

View File

@@ -53,3 +53,8 @@ func flag_die() -> void:
func die() -> void:
killed.emit()
queue_free()
func die_from_hammer() -> void:
AudioManager.play_sfx("hammer_hit", global_position)
killed.emit()
queue_free()

View File

@@ -37,3 +37,12 @@ func flag_die() -> void:
Global.score += 500
if score_note_adder != null:
score_note_adder.spawn_note(500)
func die_from_hammer(obj: Node2D) -> void:
var dir = sign(global_position.x - obj.global_position.x)
if dir == 0:
dir = [-1, 1].pick_random()
DiscoLevel.combo_amount += 1
AudioManager.play_sfx("hammer_hit", global_position)
killed.emit(dir)
queue_free()

View File

@@ -21,5 +21,5 @@ func flag_die() -> void:
queue_free()
func on_area_entered(area: Area2D) -> void:
if area.owner is Player:
if area.owner is Player and area.name != "HammerHitbox":
area.owner.damage()

View File

@@ -14,5 +14,5 @@ func on_body_entered(body: Node2D) -> void:
func on_area_entered(area: Area2D) -> void:
if area.owner is Player:
if area.owner is Player and area.name != "HammerHitbox":
area.owner.damage()

View File

@@ -43,7 +43,7 @@ func on_area_entered(area: Area2D) -> void:
if area.owner.has_node("ShellDetection"):
area.owner.die_from_object(self)
elif area.owner is Player:
if area.owner.is_invincible:
if area.owner.is_invincible or area.name == "HammerHitbox":
destroy()
else:
area.owner.damage()

View File

@@ -330,6 +330,7 @@ func _process(delta: float) -> void:
if is_invincible:
DiscoLevel.combo_meter = 100
%Hammer.visible = has_hammer
%HammerHitbox.collision_layer = has_hammer
func apply_gravity(delta: float) -> void:
if in_water or flight_meter > 0:
@@ -893,9 +894,6 @@ func hammer_get() -> void:
$HammerTimer.start()
AudioManager.set_music_override(AudioManager.MUSIC_OVERRIDES.HAMMER, 0, false)
func on_hammer_area_entered(area: Area2D) -> void:
pass
func wing_get() -> void:
AudioManager.set_music_override(AudioManager.MUSIC_OVERRIDES.WING, 0, false, false)
flight_meter = 10