diff --git a/scripts/enemy_base.gd b/scripts/enemy_base.gd index 61082c2..17e344a 100644 --- a/scripts/enemy_base.gd +++ b/scripts/enemy_base.gd @@ -20,6 +20,8 @@ var death_sound = preload("res://assets/music&sfx/sfx/hit2.wav") var last_direction := Vector2.DOWN signal died var xp = 1 +var explosion_scene = preload("res://scenes/explosion.tscn") +var is_tagged: bool = false func _ready() -> void: add_to_group("enemies") @@ -41,6 +43,8 @@ func _on_base_body_exited(body: Node2D) -> void: func die(): is_dying = true + if is_tagged: + modulate = Color.WHITE collision_layer = 0 var death_anim: String if abs(last_direction.x) >= abs(last_direction.y): @@ -66,6 +70,12 @@ func _play_hit_sound() -> void: func take_damage(amount: int) -> void: if is_dying: return + if is_tagged: + is_tagged = false + modulate = Color.WHITE + var boom = explosion_scene.instantiate() + boom.global_position = global_position + get_parent().call_deferred("add_child", boom) hp -= amount if hp <= 0: die() diff --git a/scripts/perk_effects.gd b/scripts/perk_effects.gd index a42cc5b..0426cf5 100644 --- a/scripts/perk_effects.gd +++ b/scripts/perk_effects.gd @@ -8,6 +8,7 @@ var cauldron var available_perks: Array[Perk] = [] var spell_modes: Dictionary = {} var laser_retarget_enabled = false +var shuriken_tag_enabled = false var throwing_knife_enabled = false var throwing_knife_cooldown: float = 2.0 var throwing_knife_count: int = 1 @@ -197,6 +198,15 @@ func _ready() -> void: bh.effect = battle_hardened available_perks.append(bh) + var mp = Perk.new() + mp.name = "Marked Prey" + mp.description = "Shuriken marks enemies. The next spell that hits them triggers an extra explosion" + mp.stats = _stat_toggle("Mark on Hit") + mp.spell = SpellLibrary.SHURIKEN + mp.icon = _icon_shuriken + mp.effect = enable_marked_prey + available_perks.append(mp) + var ss = Perk.new() ss.name = "Swift Strike" ss.description = "Attack more often" @@ -221,6 +231,9 @@ func _process(delta: float) -> void: func laser_retarget(): laser_retarget_enabled = true +func enable_marked_prey() -> void: + shuriken_tag_enabled = true + func double_shuriken(): witch.shuriken_count += 2 diff --git a/scripts/shuriken.gd b/scripts/shuriken.gd index b8b55a1..3cb3d25 100644 --- a/scripts/shuriken.gd +++ b/scripts/shuriken.gd @@ -1,8 +1,8 @@ extends ProjectileBase var enemies_hit = 0 +@onready var perk_effects = get_node("/root/Game/PerkEffects") - func _ready() -> void: speed = 500 super() @@ -17,6 +17,9 @@ func _on_body_entered(body: Node2D) -> void: if body.is_in_group("enemies") and not body.is_hurt and not body.is_dying: enemies_hit += 1 body.take_damage(damage) + if perk_effects.shuriken_tag_enabled and not body.is_dying: + body.is_tagged = true + body.modulate = Color(1.0, 1.0, 0.45) if enemies_hit == 20: queue_free() else: