reaper's pull: tornado collects nearby fruits continuously while active
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017NTjSa2VgCtWZWVm573NB6main
parent
4ce2603d40
commit
a2646d9690
|
|
@ -10,6 +10,7 @@ var spell_modes: Dictionary = {}
|
||||||
var laser_retarget_enabled = false
|
var laser_retarget_enabled = false
|
||||||
var shuriken_tag_enabled = false
|
var shuriken_tag_enabled = false
|
||||||
var tornado_push_on_cast = false
|
var tornado_push_on_cast = false
|
||||||
|
var tornado_fruit_collect = false
|
||||||
var throwing_knife_enabled = false
|
var throwing_knife_enabled = false
|
||||||
var throwing_knife_cooldown: float = 2.0
|
var throwing_knife_cooldown: float = 2.0
|
||||||
var throwing_knife_count: int = 1
|
var throwing_knife_count: int = 1
|
||||||
|
|
@ -26,6 +27,7 @@ var _spellbooks: Array = []
|
||||||
|
|
||||||
var _icon_knife = preload("res://assets/weapons/knvie.png")
|
var _icon_knife = preload("res://assets/weapons/knvie.png")
|
||||||
var _icon_laser: AtlasTexture
|
var _icon_laser: AtlasTexture
|
||||||
|
var _icon_tornado: AtlasTexture
|
||||||
var _icon_book = preload("res://assets/books_set_2/books_pentagram.png")
|
var _icon_book = preload("res://assets/books_set_2/books_pentagram.png")
|
||||||
var _icon_brew = preload("res://assets/books_set_2/books_health_potion.png")
|
var _icon_brew = preload("res://assets/books_set_2/books_health_potion.png")
|
||||||
var _icon_shuriken: AtlasTexture
|
var _icon_shuriken: AtlasTexture
|
||||||
|
|
@ -66,6 +68,10 @@ func _ready() -> void:
|
||||||
_icon_laser.atlas = preload("res://assets/Fire Pixel Bullet 16x16/All_Fire_Bullet_Pixel_16x16_05.png")
|
_icon_laser.atlas = preload("res://assets/Fire Pixel Bullet 16x16/All_Fire_Bullet_Pixel_16x16_05.png")
|
||||||
_icon_laser.region = Rect2(96, 16, 16, 16)
|
_icon_laser.region = Rect2(96, 16, 16, 16)
|
||||||
|
|
||||||
|
_icon_tornado = AtlasTexture.new()
|
||||||
|
_icon_tornado.atlas = preload("res://assets/Free Effect Bullet Impact Explosion 32x32 V1/Purple Effect Bullet Impact Explosion 32x32.png")
|
||||||
|
_icon_tornado.region = Rect2(192, 0, 32, 32)
|
||||||
|
|
||||||
var lrt = Perk.new()
|
var lrt = Perk.new()
|
||||||
lrt.name = "Laser Lock-On"
|
lrt.name = "Laser Lock-On"
|
||||||
lrt.description = "Laser retargets to the next highest health enemy on kill"
|
lrt.description = "Laser retargets to the next highest health enemy on kill"
|
||||||
|
|
@ -199,12 +205,21 @@ func _ready() -> void:
|
||||||
bh.effect = battle_hardened
|
bh.effect = battle_hardened
|
||||||
available_perks.append(bh)
|
available_perks.append(bh)
|
||||||
|
|
||||||
|
var rp = Perk.new()
|
||||||
|
rp.name = "Reaper's Pull"
|
||||||
|
rp.description = "Tornado continuously collects nearby fruits for its entire lifetime"
|
||||||
|
rp.stats = _stat_toggle("Auto-Collect")
|
||||||
|
rp.spell = SpellLibrary.TORNADO
|
||||||
|
rp.icon = _icon_tornado
|
||||||
|
rp.effect = enable_tornado_fruit_collect
|
||||||
|
available_perks.append(rp)
|
||||||
|
|
||||||
var rw = Perk.new()
|
var rw = Perk.new()
|
||||||
rw.name = "Repulsion Wave"
|
rw.name = "Repulsion Wave"
|
||||||
rw.description = "Casting Tornado blasts all enemies away from the witch"
|
rw.description = "Casting Tornado blasts all enemies away from the witch"
|
||||||
rw.stats = _stat_toggle("Push on Cast")
|
rw.stats = _stat_toggle("Push on Cast")
|
||||||
rw.spell = SpellLibrary.TORNADO
|
rw.spell = SpellLibrary.TORNADO
|
||||||
rw.icon = _icon_fireball
|
rw.icon = _icon_tornado
|
||||||
rw.effect = enable_tornado_push
|
rw.effect = enable_tornado_push
|
||||||
available_perks.append(rw)
|
available_perks.append(rw)
|
||||||
|
|
||||||
|
|
@ -247,6 +262,9 @@ func enable_marked_prey() -> void:
|
||||||
func enable_tornado_push() -> void:
|
func enable_tornado_push() -> void:
|
||||||
tornado_push_on_cast = true
|
tornado_push_on_cast = true
|
||||||
|
|
||||||
|
func enable_tornado_fruit_collect() -> void:
|
||||||
|
tornado_fruit_collect = true
|
||||||
|
|
||||||
func double_shuriken():
|
func double_shuriken():
|
||||||
witch.shuriken_count += 2
|
witch.shuriken_count += 2
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ extends Area2D
|
||||||
@onready var explosion_collision: CollisionShape2D = $ExplosionCollision
|
@onready var explosion_collision: CollisionShape2D = $ExplosionCollision
|
||||||
|
|
||||||
var _is_pulling := true
|
var _is_pulling := true
|
||||||
|
@onready var perk_effects = get_node("/root/Game/PerkEffects")
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
tornado_area.disabled = false
|
tornado_area.disabled = false
|
||||||
|
|
@ -19,6 +20,8 @@ func _ready() -> void:
|
||||||
_explode()
|
_explode()
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
|
if perk_effects.tornado_fruit_collect:
|
||||||
|
_collect_nearby_fruits()
|
||||||
if not _is_pulling:
|
if not _is_pulling:
|
||||||
return
|
return
|
||||||
for enemy in get_overlapping_bodies():
|
for enemy in get_overlapping_bodies():
|
||||||
|
|
@ -28,6 +31,15 @@ func _physics_process(delta: float) -> void:
|
||||||
continue
|
continue
|
||||||
enemy.global_position = enemy.global_position.move_toward(global_position, pull_strength * delta)
|
enemy.global_position = enemy.global_position.move_toward(global_position, pull_strength * delta)
|
||||||
|
|
||||||
|
func _collect_nearby_fruits() -> void:
|
||||||
|
var drop_manager = get_node_or_null("/root/Game/DropManager")
|
||||||
|
if drop_manager == null:
|
||||||
|
return
|
||||||
|
for child in drop_manager.get_children():
|
||||||
|
if child is DropsBase and not child.is_spawning and not child.in_orbit:
|
||||||
|
if global_position.distance_to(child.global_position) < 120.0:
|
||||||
|
child.collect()
|
||||||
|
|
||||||
func _explode() -> void:
|
func _explode() -> void:
|
||||||
_is_pulling = false
|
_is_pulling = false
|
||||||
var targets = get_overlapping_bodies().filter(func(b): return b.is_in_group("enemies") and not b.is_dying)
|
var targets = get_overlapping_bodies().filter(func(b): return b.is_in_group("enemies") and not b.is_dying)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue