diff --git a/scripts/fireball.gd b/scripts/fireball.gd index 47e8598..8b70f6d 100644 --- a/scripts/fireball.gd +++ b/scripts/fireball.gd @@ -1,7 +1,7 @@ extends ProjectileBase -var fireball_aoe = false var explosion_scene = preload("res://scenes/explosion.tscn") +var tornado_scene = preload("res://scenes/tornado.tscn") @onready var perk_effects = get_node("/root/Game/PerkEffects") func _ready() -> void: @@ -9,12 +9,23 @@ func _ready() -> void: damage = 10 func _on_body_entered(body: Node2D) -> void: - fireball_aoe = perk_effects.fireball_aoe_enabled - if body.is_in_group("enemies"): - body.take_damage(damage) - if fireball_aoe: - var boom = explosion_scene.instantiate() - boom.global_position = global_position - get_parent().call_deferred("add_child", boom) - queue_free() + if not body.is_in_group("enemies"): + return + body.take_damage(damage) + match perk_effects.get_mode("fireball.impact"): + "explosion": + _spawn_explosion() + "spawn_tornado": + _spawn_tornado() + queue_free() + +func _spawn_explosion() -> void: + var boom = explosion_scene.instantiate() + boom.global_position = global_position + get_parent().call_deferred("add_child", boom) + +func _spawn_tornado() -> void: + var tw = tornado_scene.instantiate() + tw.global_position = global_position + get_parent().call_deferred("add_child", tw) diff --git a/scripts/perk_effects.gd b/scripts/perk_effects.gd index fc0318f..f0041a0 100644 --- a/scripts/perk_effects.gd +++ b/scripts/perk_effects.gd @@ -7,7 +7,6 @@ var throwing_knife = preload("res://scenes/throwing_knive.tscn") var cauldron var available_perks: Array[Perk] = [] var spell_modes: Dictionary = {} -var fireball_aoe_enabled = false var laser_retarget_enabled = false var throwing_knife_enabled = false var throwing_knife_cooldown: float = 2.0 @@ -85,13 +84,24 @@ func _ready() -> void: var faoe = Perk.new() faoe.name = "AOE Fireball" - faoe.description = "Fireballs explode on impact" + faoe.description = "Fireballs explode on impact instead of hitting a single enemy" faoe.stats = _stat_toggle("AOE") faoe.spell = SpellLibrary.FIREBALL faoe.icon = _icon_fireball - faoe.effect = fireball_aoe + faoe.archetype_slot = "fireball.impact" + faoe.effect = fireball_set_impact_explosion available_perks.append(faoe) + var ftor = Perk.new() + ftor.name = "Fireball: Spawn Tornado" + ftor.description = "Fireballs spawn a tornado on impact instead of exploding" + ftor.stats = _stat_toggle("Tornado") + ftor.spell = SpellLibrary.FIREBALL + ftor.icon = _icon_fireball + ftor.archetype_slot = "fireball.impact" + ftor.effect = fireball_set_impact_tornado + available_perks.append(ftor) + var fsp = Perk.new() fsp.name = "Fireball Spread" fsp.description = "Fireballs target more enemies" @@ -173,8 +183,11 @@ func laser_retarget(): func double_shuriken(): witch.shuriken_count += 2 -func fireball_aoe(): - fireball_aoe_enabled = true +func fireball_set_impact_explosion() -> void: + set_mode("fireball.impact", "explosion") + +func fireball_set_impact_tornado() -> void: + set_mode("fireball.impact", "spawn_tornado") func fireball_spread(): witch.fireball_max_targets = witch.fireball_max_targets * 1.5