From f0d3931c3717f9f0d7e68631d92c3503d322652f Mon Sep 17 00:00:00 2001 From: doctorbatmanwho-creator Date: Mon, 15 Jun 2026 19:00:32 -0400 Subject: [PATCH] Added demon enemy prototype - Created Demon enemy scene with animations - Implemented demon AI, detection, pursuit, attack, and damage systems - Adjusted enemy collision layers to allow flying enemies to overlap the player - Added and tested combat encounters in Demon Race and Graveyard memory levels --- Assets/Graphics/Enemies/Demon/ATTACK.png | Bin 0 -> 8874 bytes .../Graphics/Enemies/Demon/ATTACK.png.import | 40 +++ Assets/Graphics/Enemies/Demon/DEATH.png | Bin 0 -> 6644 bytes .../Graphics/Enemies/Demon/DEATH.png.import | 40 +++ Assets/Graphics/Enemies/Demon/FLYING.png | Bin 0 -> 5224 bytes .../Graphics/Enemies/Demon/FLYING.png.import | 40 +++ Assets/Graphics/Enemies/Demon/HURT.png | Bin 0 -> 5168 bytes Assets/Graphics/Enemies/Demon/HURT.png.import | 40 +++ Assets/Graphics/Enemies/Demon/IDLE.png | Bin 0 -> 5380 bytes Assets/Graphics/Enemies/Demon/IDLE.png.import | 40 +++ Scenes/Characters/Demon.tscn | 264 ++++++++++++++++++ Scenes/{ => Characters}/Player.tscn | 0 Scenes/{ => Characters}/Skeleton.tscn | 4 +- Scenes/{ => Characters}/slime.tscn | 0 Scenes/{ => Items}/MemoryPiece.tscn | 0 Scenes/{ => Items}/Wardrobe.tscn | 0 Scenes/{ => Items}/coin.tscn | 0 Scenes/{ => Items}/crate.tscn | 0 Scenes/Levels/Level_1_library.tscn | 2 +- Scenes/Levels/Level_2_demons.tscn | 18 +- Scenes/Levels/Level_3_graveyard.tscn | 68 ++++- Scenes/Levels/MainGame.tscn | 6 +- Scripts/demon.gd | 129 +++++++++ Scripts/demon.gd.uid | 1 + 24 files changed, 669 insertions(+), 23 deletions(-) create mode 100644 Assets/Graphics/Enemies/Demon/ATTACK.png create mode 100644 Assets/Graphics/Enemies/Demon/ATTACK.png.import create mode 100644 Assets/Graphics/Enemies/Demon/DEATH.png create mode 100644 Assets/Graphics/Enemies/Demon/DEATH.png.import create mode 100644 Assets/Graphics/Enemies/Demon/FLYING.png create mode 100644 Assets/Graphics/Enemies/Demon/FLYING.png.import create mode 100644 Assets/Graphics/Enemies/Demon/HURT.png create mode 100644 Assets/Graphics/Enemies/Demon/HURT.png.import create mode 100644 Assets/Graphics/Enemies/Demon/IDLE.png create mode 100644 Assets/Graphics/Enemies/Demon/IDLE.png.import create mode 100644 Scenes/Characters/Demon.tscn rename Scenes/{ => Characters}/Player.tscn (100%) rename Scenes/{ => Characters}/Skeleton.tscn (98%) rename Scenes/{ => Characters}/slime.tscn (100%) rename Scenes/{ => Items}/MemoryPiece.tscn (100%) rename Scenes/{ => Items}/Wardrobe.tscn (100%) rename Scenes/{ => Items}/coin.tscn (100%) rename Scenes/{ => Items}/crate.tscn (100%) create mode 100644 Scripts/demon.gd create mode 100644 Scripts/demon.gd.uid diff --git a/Assets/Graphics/Enemies/Demon/ATTACK.png b/Assets/Graphics/Enemies/Demon/ATTACK.png new file mode 100644 index 0000000000000000000000000000000000000000..04c04fb5e675e0e6a696781b9e9e6f0c40f06e67 GIT binary patch literal 8874 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 iI2;a#!{Kl|dHg?f`e?jl?&JRe0000 void: + health = max_health + attack_hitbox.monitoring = false + sprite.play("idle") + + detection_area.body_entered.connect(_on_detection_body_entered) + detection_area.body_exited.connect(_on_detection_body_exited) + sprite.animation_finished.connect(_on_animation_finished) + +func _physics_process(_delta: float) -> void: + if is_dead: + return + + if is_hurt or is_attacking: + velocity = Vector2.ZERO + move_and_slide() + return + + if player: + var x_distance := player.global_position.x - global_position.x + + if abs(x_distance) > attack_range: + velocity.x = sign(x_distance) * speed + velocity.y = 0 + sprite.play("flying") + + if x_distance < 0: + sprite.flip_h = false + else: + sprite.flip_h = true + else: + velocity = Vector2.ZERO + attack() + else: + velocity = Vector2.ZERO + sprite.play("idle") + + move_and_slide() + +func attack() -> void: + if is_attacking or attack_cooldown: + return + + is_attacking = true + attack_cooldown = true + velocity = Vector2.ZERO + sprite.play("attack") + + await get_tree().create_timer(0.2).timeout + do_attack_damage() + +func do_attack_damage() -> void: + print("Demon checking attack hit") + + attack_hitbox.monitoring = true + await get_tree().physics_frame + await get_tree().physics_frame + + var bodies = attack_hitbox.get_overlapping_bodies() + print("Demon bodies found: ", bodies.size()) + + for body in bodies: + if body is Player: + print("DEMON HIT PLAYER") + body.playerTakesDamage(1) + + attack_hitbox.monitoring = false + +func take_damage(amount: int = 1) -> void: + if is_dead: + return + + health -= amount + print("Demon health:", health) + + if health <= 0: + die() + else: + is_hurt = true + velocity = Vector2.ZERO + sprite.play("hurt") + +func die() -> void: + if is_dead: + return + + is_dead = true + velocity = Vector2.ZERO + sprite.play("death") + print("Demon died") + +func _on_detection_body_entered(body: Node) -> void: + if body is Player: + player = body + print("Demon detected player") + +func _on_detection_body_exited(body: Node) -> void: + if body == player: + player = null + print("Demon lost player") + +func _on_animation_finished() -> void: + if sprite.animation == "hurt": + is_hurt = false + + if sprite.animation == "attack": + is_attacking = false + await get_tree().create_timer(1.0).timeout + attack_cooldown = false + + if sprite.animation == "death": + queue_free() diff --git a/Scripts/demon.gd.uid b/Scripts/demon.gd.uid new file mode 100644 index 0000000..c00caaf --- /dev/null +++ b/Scripts/demon.gd.uid @@ -0,0 +1 @@ +uid://cukuvefvrcr3f