From d883b2b05f43b460b69faa13cece41462395cd88 Mon Sep 17 00:00:00 2001 From: Zenny Date: Mon, 3 Mar 2025 21:14:09 -0800 Subject: [PATCH] Implement Heaven's Rebellion --- src/enemy/Enemy.cs | 10 ++++++++++ src/enemy/EnemyStatResource.cs | 2 +- src/enemy/IEnemy.cs | 4 ++++ src/items/effect/EffectItem.cs | 11 +++++++++++ .../effect/resources/HeavensRebellion.tres | 18 ++++++++++++++++++ src/map/dungeon/floors/Floor00.tscn | 4 ++-- src/player/Player.tscn | 2 +- 7 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 src/items/effect/resources/HeavensRebellion.tres diff --git a/src/enemy/Enemy.cs b/src/enemy/Enemy.cs index f3b9abfc..8c677466 100644 --- a/src/enemy/Enemy.cs +++ b/src/enemy/Enemy.cs @@ -158,6 +158,16 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide Game.EnemyDefeated(GlobalPosition, _enemyStatResource); } + public void SetCurrentHP(int targetHP) + { + _currentHP.OnNext(targetHP); + } + + public int GetMaximumHP() + { + return _enemyStatResource.MaximumHP; + } + public void StartAttackTimer() { _attackTimer.Timeout += OnAttackTimeout; diff --git a/src/enemy/EnemyStatResource.cs b/src/enemy/EnemyStatResource.cs index 856be619..ee9b2bfe 100644 --- a/src/enemy/EnemyStatResource.cs +++ b/src/enemy/EnemyStatResource.cs @@ -9,7 +9,7 @@ public partial class EnemyStatResource : Resource public double CurrentHP { get; set; } [Export] - public double MaximumHP { get; set; } + public int MaximumHP { get; set; } [Export] public int CurrentAttack { get; set; } diff --git a/src/enemy/IEnemy.cs b/src/enemy/IEnemy.cs index 534ffedf..da418216 100644 --- a/src/enemy/IEnemy.cs +++ b/src/enemy/IEnemy.cs @@ -14,6 +14,10 @@ public interface IEnemy : IKillable public double CurrentHP { get; } + public void SetCurrentHP(int newHP); + + public int GetMaximumHP(); + public void StartAttackTimer(); public void StopAttackTimer(); diff --git a/src/items/effect/EffectItem.cs b/src/items/effect/EffectItem.cs index 2af4833d..4641641a 100644 --- a/src/items/effect/EffectItem.cs +++ b/src/items/effect/EffectItem.cs @@ -47,6 +47,8 @@ public partial class EffectItem : Node3D, IUsableItem KillHalfEnemiesInRoom(); if (_effectItemStats.UsableItemTags.Contains(UsableItemTag.TurnAllEnemiesIntoHealingItem)) TurnAllEnemiesInRoomIntoHealingItem(); + if (_effectItemStats.UsableItemTags.Contains(UsableItemTag.HealsAllInRoomToMaxHP)) + HealAllEnemiesAndPlayerInRoomToFull(); } public void SetItemStats(InventoryItemStats inventoryItemStats) @@ -131,4 +133,13 @@ public partial class EffectItem : Node3D, IUsableItem Game.AddChild(consumable); consumable.GlobalPosition = vector; } + + private void HealAllEnemiesAndPlayerInRoomToFull() + { + var currentRoom = Player.GetCurrentRoom(); + var currentEnemies = currentRoom.EnemiesInRoom; + foreach (var enemy in currentEnemies) + enemy.SetCurrentHP(enemy.GetMaximumHP()); + Player.Stats.SetCurrentHP(Player.Stats.MaximumHP.Value); + } } diff --git a/src/items/effect/resources/HeavensRebellion.tres b/src/items/effect/resources/HeavensRebellion.tres new file mode 100644 index 00000000..326eb83b --- /dev/null +++ b/src/items/effect/resources/HeavensRebellion.tres @@ -0,0 +1,18 @@ +[gd_resource type="Resource" script_class="EffectItemStats" load_steps=3 format=3 uid="uid://5tbtsch3qagg"] + +[ext_resource type="Script" uid="uid://b5w4iw4iqmxtn" path="res://src/items/effect/EffectItemStats.cs" id="1_drp30"] +[ext_resource type="Texture2D" uid="uid://c7v5pm32sedkg" path="res://src/items/effect/textures/entropic seal.PNG" id="1_g0a3x"] + +[resource] +script = ExtResource("1_drp30") +UsableItemTags = Array[int]([8]) +Name = "Heaven's Rebellion" +Description = "Heals self and all enemies in current room to maximum HP." +Texture = ExtResource("1_g0a3x") +SpawnRate = 0.5 +ThrowSpeed = 12.0 +HealHPAmount = 0 +HealVTAmount = 0 +ThrowDamage = 5 +ItemTags = Array[int]([]) +metadata/_custom_type_script = "uid://b5w4iw4iqmxtn" diff --git a/src/map/dungeon/floors/Floor00.tscn b/src/map/dungeon/floors/Floor00.tscn index 186f2830..60f419bf 100644 --- a/src/map/dungeon/floors/Floor00.tscn +++ b/src/map/dungeon/floors/Floor00.tscn @@ -16,7 +16,7 @@ [ext_resource type="Texture2D" uid="uid://4k6vtn4oip5f" path="res://src/map/dungeon/models/Set A/02. Altar/02_ALTAR_FLOOR_ZER0_VER_TILE4.png" id="14_qqc7i"] [ext_resource type="Texture2D" uid="uid://cururtxtgylxf" path="res://src/map/dungeon/models/Set A/02. Altar/02_ALTAR_FLOOR_ZER0_VER_COLUMN.jpg" id="15_ojbcg"] [ext_resource type="PackedScene" uid="uid://d0pl1n1jf77jm" path="res://src/items/effect/EffectItem.tscn" id="16_aqomv"] -[ext_resource type="Resource" uid="uid://cwh5w1yabwrxf" path="res://src/items/effect/resources/SineMorphization.tres" id="17_db2o3"] +[ext_resource type="Resource" uid="uid://5tbtsch3qagg" path="res://src/items/effect/resources/HeavensRebellion.tres" id="17_ntxe5"] [ext_resource type="Resource" uid="uid://bptg6eybj5dxk" path="res://src/items/effect/resources/DevicRecall.tres" id="18_ntxe5"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_3ubi4"] @@ -891,7 +891,7 @@ shape = SubResource("BoxShape3D_ntxe5") [node name="EffectItem" parent="." instance=ExtResource("16_aqomv")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.65239, -2.58967, -1.14642) -_effectItemStats = ExtResource("17_db2o3") +_effectItemStats = ExtResource("17_ntxe5") [node name="EffectItem2" parent="." instance=ExtResource("16_aqomv")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.65239, -2.58967, -1.14642) diff --git a/src/player/Player.tscn b/src/player/Player.tscn index 4c7978c5..06c597ef 100644 --- a/src/player/Player.tscn +++ b/src/player/Player.tscn @@ -17,7 +17,7 @@ script = ExtResource("2_xq68d") RotationSpeed = 1.5 MoveSpeed = 8.0 Acceleration = 1.0 -CurrentHP = 100 +CurrentHP = 50 MaximumHP = 100 CurrentVT = 90 MaximumVT = 90