From 14b7093e00a3b02b84a328c66c15a006b44992fc Mon Sep 17 00:00:00 2001 From: Zenny Date: Mon, 3 Mar 2025 22:03:16 -0800 Subject: [PATCH] Implement Gospel of Escape --- src/items/throwable/ThrowableItem.cs | 16 +++++++++++++++ .../throwable/resources/GospelOfEscape.tres | 20 +++++++++++++++++++ src/items/thrown/ThrownItem.cs | 3 +++ src/map/dungeon/code/IExitRoom.cs | 6 ------ src/map/dungeon/floors/Floor00.tscn | 17 ++++++---------- 5 files changed, 45 insertions(+), 17 deletions(-) create mode 100644 src/items/throwable/resources/GospelOfEscape.tres delete mode 100644 src/map/dungeon/code/IExitRoom.cs diff --git a/src/items/throwable/ThrowableItem.cs b/src/items/throwable/ThrowableItem.cs index 09f9ebfa..0f1094a2 100644 --- a/src/items/throwable/ThrowableItem.cs +++ b/src/items/throwable/ThrowableItem.cs @@ -73,6 +73,9 @@ public partial class ThrowableItem : Node3D, IUsableItem if (_throwableItemStats.ThrowableItemTags.Contains(ThrowableItemTag.CanChangeAffinity)) ChangeAffinity(); + + if (_throwableItemStats.ThrowableItemTags.Contains(ThrowableItemTag.WarpToExitIfFound)) + WarpToExit(Player); } public void TeleportToRandomRoom(IEnemy enemy) @@ -127,4 +130,17 @@ public partial class ThrowableItem : Node3D, IUsableItem $"Inflicts {_throwableItemStats.ElementType} damage when thrown." + $"{System.Environment.NewLine}Use item to change Affinity."; } + + private void WarpToExit(IPlayer player) + { + var exitRoom = Game.CurrentFloor.Rooms.OfType().Single(); + if (exitRoom.PlayerDiscoveredRoom) + player.TeleportPlayer(exitRoom.PlayerSpawn.GlobalPosition); + } + + public void WarpToExit(IEnemy enemy) + { + var exitRoom = Game.CurrentFloor.Rooms.OfType().Single(); + enemy.SetEnemyGlobalPosition(exitRoom.PlayerSpawn.GlobalPosition); + } } diff --git a/src/items/throwable/resources/GospelOfEscape.tres b/src/items/throwable/resources/GospelOfEscape.tres new file mode 100644 index 00000000..7ee06591 --- /dev/null +++ b/src/items/throwable/resources/GospelOfEscape.tres @@ -0,0 +1,20 @@ +[gd_resource type="Resource" script_class="ThrowableItemStats" load_steps=3 format=3 uid="uid://35ag8vp8kvtx"] + +[ext_resource type="Texture2D" uid="uid://cagebvc1lp28y" path="res://src/items/throwable/textures/tablet.PNG" id="1_26kno"] +[ext_resource type="Script" uid="uid://d3wlunkcuv2w2" path="res://src/items/throwable/ThrowableItemStats.cs" id="1_pn8sr"] + +[resource] +script = ExtResource("1_pn8sr") +ThrowableItemTags = Array[int]([3]) +ElementType = 0 +UsableItemTags = Array[int]([]) +Name = "Gospel of Escape" +Description = "Warps target to the exit. No effect on player if exit has not been found." +Texture = ExtResource("1_26kno") +SpawnRate = 0.5 +ThrowSpeed = 12.0 +HealHPAmount = 0 +HealVTAmount = 0 +ThrowDamage = 5 +ItemTags = Array[int]([]) +metadata/_custom_type_script = "uid://d3wlunkcuv2w2" diff --git a/src/items/thrown/ThrownItem.cs b/src/items/thrown/ThrownItem.cs index 730009c1..9611b18e 100644 --- a/src/items/thrown/ThrownItem.cs +++ b/src/items/thrown/ThrownItem.cs @@ -48,6 +48,9 @@ public partial class ThrownItem : RigidBody3D case ThrowableItemTag.TeleportToRandomLocation: throwableItem.TeleportToRandomRoom(enemy); break; + case ThrowableItemTag.WarpToExitIfFound: + throwableItem.WarpToExit(enemy); + break; } if (throwableItem.ThrowableItemTags.Contains(ThrowableItemTag.LowerTargetTo1HP)) enemy.TakeDamage(enemy.CurrentHP - 1, ignoreDefense: true, ignoreElementalResistance: true); diff --git a/src/map/dungeon/code/IExitRoom.cs b/src/map/dungeon/code/IExitRoom.cs deleted file mode 100644 index 71f7d18c..00000000 --- a/src/map/dungeon/code/IExitRoom.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace GameJamDungeon; - -public interface IExitRoom : IDungeonRoom -{ - public void ExitReached(); -} diff --git a/src/map/dungeon/floors/Floor00.tscn b/src/map/dungeon/floors/Floor00.tscn index d1e5b6e1..7bcac7df 100644 --- a/src/map/dungeon/floors/Floor00.tscn +++ b/src/map/dungeon/floors/Floor00.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=63 format=4 uid="uid://dl6h1djc27ddl"] +[gd_scene load_steps=62 format=4 uid="uid://dl6h1djc27ddl"] [ext_resource type="Script" uid="uid://c1nhqlem1ew3m" path="res://src/map/dungeon/code/Floor0.cs" id="1_db2o3"] [ext_resource type="Texture2D" uid="uid://b27ksiyfefb33" path="res://src/map/dungeon/models/Set A/02. Altar/02_ALTAR_FLOOR_ZER0_VER_outside_desert.png" id="2_xh2ej"] @@ -15,9 +15,8 @@ [ext_resource type="Texture2D" uid="uid://dyufabjcwlago" path="res://src/map/dungeon/models/Set A/02. Altar/02_ALTAR_FLOOR_ZER0_VER_HAND_CYCLE_MOTIF.png" id="13_1i307"] [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://b44v3y1okrj1s" path="res://src/items/effect/resources/Perspective.tres" id="17_ntxe5"] -[ext_resource type="Resource" uid="uid://bptg6eybj5dxk" path="res://src/items/effect/resources/DevicRecall.tres" id="18_ntxe5"] +[ext_resource type="PackedScene" uid="uid://1fl6s352e2ej" path="res://src/items/throwable/ThrowableItem.tscn" id="16_db2o3"] +[ext_resource type="Resource" uid="uid://35ag8vp8kvtx" path="res://src/items/throwable/resources/GospelOfEscape.tres" id="17_ntxe5"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_3ubi4"] shading_mode = 0 @@ -889,10 +888,6 @@ collision_mask = 8 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 149.05, -4.02862, -1.76389) 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_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) -_effectItemStats = ExtResource("18_ntxe5") +[node name="ThrowableItem" parent="." instance=ExtResource("16_db2o3")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.51612, -2.51226, -4.10995) +_throwableItemStats = ExtResource("17_ntxe5")