From 0f7889adfb2fd669a99d7c872dc4ff4b5edade76 Mon Sep 17 00:00:00 2001 From: doctorbatmanwho-creator Date: Mon, 15 Jun 2026 14:05:40 -0400 Subject: [PATCH] Implement skeleton combat and memory piece progression - Created Skeleton enemy scene with idle, walk, attack, hurt, and death animations - Added player detection and enemy pursuit AI - Implemented skeleton attack system and player damage - Added player punch attack for adult character - Implemented enemy damage and health system - Added skeleton death handling - Connected MemoryPiece spawning to defeated skeletons - Added configurable memory piece textures and wardrobe assignments - Implemented memory piece collection and return-to-graveyard workflow - Added interact action to Input Map - Continued development of Wardrobe 1 combat encounter - Fixed multiple collision, hitbox, and animation issues --- .../Skeleton/Skeleton_01_White_Attack1.png | Bin 0 -> 4454 bytes .../Skeleton_01_White_Attack1.png.import | 40 ++ .../Skeleton/Skeleton_01_White_Attack2.png | Bin 0 -> 3562 bytes .../Skeleton_01_White_Attack2.png.import | 40 ++ .../Skeleton/Skeleton_01_White_Die.png | Bin 0 -> 5276 bytes .../Skeleton/Skeleton_01_White_Die.png.import | 40 ++ .../Skeleton/Skeleton_01_White_Hurt.png | Bin 0 -> 2418 bytes .../Skeleton_01_White_Hurt.png.import | 40 ++ .../Skeleton/Skeleton_01_White_Idle.png | Bin 0 -> 2603 bytes .../Skeleton_01_White_Idle.png.import | 40 ++ .../Skeleton/Skeleton_01_White_Walk.png | Bin 0 -> 3835 bytes .../Skeleton_01_White_Walk.png.import | 40 ++ Scenes/Levels/Level_3_graveyard.tscn | 17 +- Scenes/Player.tscn | 18 +- Scenes/Skeleton.tscn | 397 ++++++++++++++++++ Scripts/MemoryPiece.gd | 42 +- Scripts/player.gd | 34 +- Scripts/skeleton.gd | 149 +++++++ Scripts/skeleton.gd.uid | 1 + Scripts/wardrobe.gd | 2 +- project.godot | 37 +- 21 files changed, 908 insertions(+), 29 deletions(-) create mode 100644 Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack1.png create mode 100644 Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack1.png.import create mode 100644 Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack2.png create mode 100644 Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack2.png.import create mode 100644 Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Die.png create mode 100644 Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Die.png.import create mode 100644 Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Hurt.png create mode 100644 Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Hurt.png.import create mode 100644 Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Idle.png create mode 100644 Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Idle.png.import create mode 100644 Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Walk.png create mode 100644 Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Walk.png.import create mode 100644 Scenes/Skeleton.tscn create mode 100644 Scripts/skeleton.gd create mode 100644 Scripts/skeleton.gd.uid diff --git a/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack1.png b/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack1.png new file mode 100644 index 0000000000000000000000000000000000000000..44cd9f94b4b1b7690a5bc6320bbc39e17b675505 GIT binary patch literal 4454 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 a2v#*r1!aNjiXZ(yg1NDkQO!-)r~d~A$LtOO literal 0 HcmV?d00001 diff --git a/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack1.png.import b/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack1.png.import new file mode 100644 index 0000000..97c1c4d --- /dev/null +++ b/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cy3t1xgbpcx1t" +path="res://.godot/imported/Skeleton_01_White_Attack1.png-69378dcabce39dcaa0f3c7adec88ef69.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack1.png" +dest_files=["res://.godot/imported/Skeleton_01_White_Attack1.png-69378dcabce39dcaa0f3c7adec88ef69.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack2.png b/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack2.png new file mode 100644 index 0000000000000000000000000000000000000000..a084251200846ce59580e51382b72e7f0c8962c0 GIT binary patch literal 3562 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 Ch#W5f literal 0 HcmV?d00001 diff --git a/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack2.png.import b/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack2.png.import new file mode 100644 index 0000000..9b034b2 --- /dev/null +++ b/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bi7xiuuca5qms" +path="res://.godot/imported/Skeleton_01_White_Attack2.png-b6b876eb7aed528f668aa8ff4f27719c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack2.png" +dest_files=["res://.godot/imported/Skeleton_01_White_Attack2.png-b6b876eb7aed528f668aa8ff4f27719c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Die.png b/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Die.png new file mode 100644 index 0000000000000000000000000000000000000000..70d0d45e06933f265b7255ab2ed72a6321bbc1eb GIT binary patch literal 5276 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 IyM$f)53Szu00000 literal 0 HcmV?d00001 diff --git a/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Hurt.png.import b/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Hurt.png.import new file mode 100644 index 0000000..c37e4a6 --- /dev/null +++ b/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Hurt.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cxmvtyalmav26" +path="res://.godot/imported/Skeleton_01_White_Hurt.png-c21d58fbbe431a671e09d771ea6a11f1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Hurt.png" +dest_files=["res://.godot/imported/Skeleton_01_White_Hurt.png-c21d58fbbe431a671e09d771ea6a11f1.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Idle.png b/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Idle.png new file mode 100644 index 0000000000000000000000000000000000000000..4c1a0bbf006434d85b2e6ebc0c156ba5212262f7 GIT binary patch literal 2603 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 literal 0 HcmV?d00001 diff --git a/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Walk.png.import b/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Walk.png.import new file mode 100644 index 0000000..3c5ab2e --- /dev/null +++ b/Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Walk.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dilf6h30fxxw4" +path="res://.godot/imported/Skeleton_01_White_Walk.png-08707ef5a160913e911337e0bf1282d5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Walk.png" +dest_files=["res://.godot/imported/Skeleton_01_White_Walk.png-08707ef5a160913e911337e0bf1282d5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Scenes/Levels/Level_3_graveyard.tscn b/Scenes/Levels/Level_3_graveyard.tscn index 8fc4b9f..bee481f 100644 --- a/Scenes/Levels/Level_3_graveyard.tscn +++ b/Scenes/Levels/Level_3_graveyard.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=45 format=4 uid="uid://8n6472fqqmcc"] +[gd_scene load_steps=46 format=4 uid="uid://8n6472fqqmcc"] [ext_resource type="Texture2D" uid="uid://bu6brcro3ydwf" path="res://Assets/Graphics/Terrains/Background/Graveyard/parallax-grave-bg.png" id="2_3f4w8"] [ext_resource type="Texture2D" uid="uid://cpie2yxwj2phl" path="res://Assets/Graphics/Terrains/Background/Graveyard/parallax-grave-midder-trees.png" id="3_vi1do"] @@ -26,6 +26,7 @@ [ext_resource type="Texture2D" uid="uid://b0g2yq4wolooy" path="res://Assets/Graphics/Terrains/Background/Memories/Memory2.png" id="23_8qp07"] [ext_resource type="Texture2D" uid="uid://d3u7nur0ua1vb" path="res://Assets/Graphics/Terrains/Background/Memories/Memory5.png" id="25_6kan1"] [ext_resource type="Texture2D" uid="uid://cwlxblkouwtxr" path="res://Assets/Graphics/Terrains/Background/Memories/Memory4.png" id="25_8elfy"] +[ext_resource type="PackedScene" uid="uid://0lyd0y14s0w4" path="res://Scenes/Skeleton.tscn" id="26_pyeu7"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_3jtcq"] texture = ExtResource("7_tpoa3") @@ -829,13 +830,6 @@ position = Vector2(3033, 212) [node name="MemoryPieces" type="Node2D" parent="."] position = Vector2(3784, 1095) -[node name="MemoryPiece1" parent="MemoryPieces" node_paths=PackedStringArray("return_spawn", "wardrobe") instance=ExtResource("10_3jtcq")] -z_index = 10 -position = Vector2(-3232, -134) -memory_texture = ExtResource("16_3jtcq") -return_spawn = NodePath("../../ReturnSpawns/ReturnSpawn1") -wardrobe = NodePath("../../Wardrobes/Wardrobe1") - [node name="MemoryPiece2" parent="MemoryPieces" node_paths=PackedStringArray("return_spawn", "wardrobe") instance=ExtResource("10_3jtcq")] z_index = 10 position = Vector2(87, -275) @@ -933,6 +927,13 @@ position = Vector2(2194, 239.00002) scale = Vector2(0.15, 0.15) texture = ExtResource("16_dvm4i") +[node name="Skeleton" parent="Decor" node_paths=PackedStringArray("memory_return_spawn", "memory_wardrobe") instance=ExtResource("26_pyeu7")] +position = Vector2(396, 1111) +memory_piece_scene = ExtResource("10_3jtcq") +memory_texture = ExtResource("16_3jtcq") +memory_return_spawn = NodePath("../../ReturnSpawns/ReturnSpawn1") +memory_wardrobe = NodePath("../../Wardrobes/Wardrobe1") + [node name="Boundaries" type="Node2D" parent="."] position = Vector2(574, 596) diff --git a/Scenes/Player.tscn b/Scenes/Player.tscn index 6c3ef8f..f49cc2c 100644 --- a/Scenes/Player.tscn +++ b/Scenes/Player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=102 format=3 uid="uid://bu8e4iyw8pc03"] +[gd_scene load_steps=103 format=3 uid="uid://bu8e4iyw8pc03"] [ext_resource type="Script" uid="uid://dsryf6gxqcm1k" path="res://Scripts/player.gd" id="1_0y7nr"] [ext_resource type="Texture2D" uid="uid://rltv4cun6tyw" path="res://Assets/Graphics/Player/Death/adult death.png" id="2_nn08x"] @@ -14,6 +14,9 @@ [ext_resource type="Texture2D" uid="uid://lvcdluia0nr3" path="res://Assets/Graphics/Player/Child/Run/Child_run.png" id="11_1e7my"] [ext_resource type="Texture2D" uid="uid://g7bg5bcbegtv" path="res://Assets/Graphics/Player/Child/Punch/Child_punch.png" id="12_o3h8g"] +[sub_resource type="RectangleShape2D" id="RectangleShape2D_miouo"] +size = Vector2(71, 30) + [sub_resource type="AtlasTexture" id="AtlasTexture_teras"] atlas = ExtResource("2_nn08x") region = Rect2(0, 0, 123, 122) @@ -319,7 +322,7 @@ animations = [{ "duration": 1.0, "texture": SubResource("AtlasTexture_6626w") }], -"loop": true, +"loop": false, "name": &"punch", "speed": 12.0 }, { @@ -693,6 +696,14 @@ position = Vector2(2, -1) script = ExtResource("1_0y7nr") metadata/_edit_group_ = true +[node name="PunchHitbox" type="Area2D" parent="."] +monitoring = false + +[node name="CollisionShape2D" type="CollisionShape2D" parent="PunchHitbox"] +position = Vector2(50.5, -5) +shape = SubResource("RectangleShape2D_miouo") +debug_color = Color(0.97765833, 0.1351085, 0.16903454, 0.41960785) + [node name="Camera2D" type="Camera2D" parent="."] position = Vector2(-7, -43) @@ -701,9 +712,8 @@ z_index = 10 texture_filter = 1 position = Vector2(0, -6) sprite_frames = SubResource("SpriteFrames_nn08x") -animation = &"punch" +animation = &"idle" autoplay = "idle" -frame_progress = 0.25973 [node name="ChildGraphic" type="AnimatedSprite2D" parent="."] visible = false diff --git a/Scenes/Skeleton.tscn b/Scenes/Skeleton.tscn new file mode 100644 index 0000000..98ed9d0 --- /dev/null +++ b/Scenes/Skeleton.tscn @@ -0,0 +1,397 @@ +[gd_scene load_steps=57 format=3 uid="uid://0lyd0y14s0w4"] + +[ext_resource type="Script" uid="uid://f88hycnuf3m5" path="res://Scripts/skeleton.gd" id="1_abfcy"] +[ext_resource type="Texture2D" uid="uid://dcukplq3ykd13" path="res://Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Idle.png" id="1_vif15"] +[ext_resource type="Texture2D" uid="uid://cy3t1xgbpcx1t" path="res://Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Attack1.png" id="2_yek4v"] +[ext_resource type="Texture2D" uid="uid://den6xknhkm8d" path="res://Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Die.png" id="3_2bjux"] +[ext_resource type="Texture2D" uid="uid://cxmvtyalmav26" path="res://Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Hurt.png" id="4_rtppx"] +[ext_resource type="Texture2D" uid="uid://dilf6h30fxxw4" path="res://Assets/Graphics/Enemies/Skeleton/Skeleton_01_White_Walk.png" id="6_k2wj7"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_87cwn"] +atlas = ExtResource("2_yek4v") +region = Rect2(0, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_lxoki"] +atlas = ExtResource("2_yek4v") +region = Rect2(96, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xneb1"] +atlas = ExtResource("2_yek4v") +region = Rect2(192, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ci2ge"] +atlas = ExtResource("2_yek4v") +region = Rect2(288, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ma653"] +atlas = ExtResource("2_yek4v") +region = Rect2(384, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ecs23"] +atlas = ExtResource("2_yek4v") +region = Rect2(480, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0ftre"] +atlas = ExtResource("2_yek4v") +region = Rect2(576, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_lii7c"] +atlas = ExtResource("2_yek4v") +region = Rect2(672, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_10q1y"] +atlas = ExtResource("2_yek4v") +region = Rect2(768, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_tfme2"] +atlas = ExtResource("2_yek4v") +region = Rect2(864, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_b70gm"] +atlas = ExtResource("3_2bjux") +region = Rect2(0, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_t5rxt"] +atlas = ExtResource("3_2bjux") +region = Rect2(96, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y8jxr"] +atlas = ExtResource("3_2bjux") +region = Rect2(192, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7p4ha"] +atlas = ExtResource("3_2bjux") +region = Rect2(288, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jlfek"] +atlas = ExtResource("3_2bjux") +region = Rect2(384, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rsssq"] +atlas = ExtResource("3_2bjux") +region = Rect2(480, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y1shx"] +atlas = ExtResource("3_2bjux") +region = Rect2(576, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_omjhr"] +atlas = ExtResource("3_2bjux") +region = Rect2(672, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8lo8o"] +atlas = ExtResource("3_2bjux") +region = Rect2(768, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ijbhh"] +atlas = ExtResource("3_2bjux") +region = Rect2(864, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ddipo"] +atlas = ExtResource("3_2bjux") +region = Rect2(960, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_353gq"] +atlas = ExtResource("3_2bjux") +region = Rect2(1056, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ix6k6"] +atlas = ExtResource("3_2bjux") +region = Rect2(1152, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_hdu5v"] +atlas = ExtResource("4_rtppx") +region = Rect2(0, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vips4"] +atlas = ExtResource("4_rtppx") +region = Rect2(96, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jdpkg"] +atlas = ExtResource("4_rtppx") +region = Rect2(192, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_5xlrn"] +atlas = ExtResource("4_rtppx") +region = Rect2(288, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0i2gx"] +atlas = ExtResource("4_rtppx") +region = Rect2(384, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_abfcy"] +atlas = ExtResource("1_vif15") +region = Rect2(0, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4ie6e"] +atlas = ExtResource("1_vif15") +region = Rect2(96, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_iuen5"] +atlas = ExtResource("1_vif15") +region = Rect2(192, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rxd7e"] +atlas = ExtResource("1_vif15") +region = Rect2(288, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_yek4v"] +atlas = ExtResource("1_vif15") +region = Rect2(384, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2bjux"] +atlas = ExtResource("1_vif15") +region = Rect2(480, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rtppx"] +atlas = ExtResource("1_vif15") +region = Rect2(576, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_k2wj7"] +atlas = ExtResource("1_vif15") +region = Rect2(672, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wx38x"] +atlas = ExtResource("6_k2wj7") +region = Rect2(0, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_mvwdc"] +atlas = ExtResource("6_k2wj7") +region = Rect2(96, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_whxj0"] +atlas = ExtResource("6_k2wj7") +region = Rect2(192, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2hcwm"] +atlas = ExtResource("6_k2wj7") +region = Rect2(288, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_u2tho"] +atlas = ExtResource("6_k2wj7") +region = Rect2(384, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_14y5s"] +atlas = ExtResource("6_k2wj7") +region = Rect2(480, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xuc1f"] +atlas = ExtResource("6_k2wj7") +region = Rect2(576, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pdd2a"] +atlas = ExtResource("6_k2wj7") +region = Rect2(672, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1xayb"] +atlas = ExtResource("6_k2wj7") +region = Rect2(768, 0, 96, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0ba4d"] +atlas = ExtResource("6_k2wj7") +region = Rect2(864, 0, 96, 64) + +[sub_resource type="SpriteFrames" id="SpriteFrames_87cwn"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_87cwn") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_lxoki") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xneb1") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ci2ge") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ma653") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ecs23") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0ftre") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_lii7c") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_10q1y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_tfme2") +}], +"loop": false, +"name": &"attack", +"speed": 12.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_b70gm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_t5rxt") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y8jxr") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7p4ha") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jlfek") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rsssq") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y1shx") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_omjhr") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8lo8o") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ijbhh") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ddipo") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_353gq") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ix6k6") +}], +"loop": false, +"name": &"death", +"speed": 12.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_hdu5v") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vips4") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jdpkg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_5xlrn") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0i2gx") +}], +"loop": false, +"name": &"hurt", +"speed": 12.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_abfcy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4ie6e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_iuen5") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rxd7e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_yek4v") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2bjux") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rtppx") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_k2wj7") +}], +"loop": true, +"name": &"idle", +"speed": 12.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_wx38x") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_mvwdc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_whxj0") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2hcwm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_u2tho") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_14y5s") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xuc1f") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_pdd2a") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1xayb") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0ba4d") +}], +"loop": true, +"name": &"walk", +"speed": 12.0 +}] + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_yek4v"] +height = 72.0 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_yek4v"] +size = Vector2(371, 71) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_2bjux"] +size = Vector2(452, 33) + +[node name="Skeleton" type="CharacterBody2D"] +z_index = 10 +script = ExtResource("1_abfcy") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +texture_filter = 1 +scale = Vector2(1.5, 1.5) +sprite_frames = SubResource("SpriteFrames_87cwn") +animation = &"idle" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +texture_filter = 1 +position = Vector2(-5, 12) +shape = SubResource("CapsuleShape2D_yek4v") +debug_color = Color(0.61885023, 0.36088452, 0.99050516, 0.41960785) + +[node name="Area2D" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +position = Vector2(12.5, 13.5) +shape = SubResource("RectangleShape2D_yek4v") +debug_color = Color(0.51556015, 0.56157154, 0.37343058, 0.41960785) + +[node name="AttackHitbox" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="AttackHitbox"] +position = Vector2(37, 0.5) +shape = SubResource("RectangleShape2D_2bjux") +debug_color = Color(0.9785972, 0.11901257, 0.22291586, 0.41960785) diff --git a/Scripts/MemoryPiece.gd b/Scripts/MemoryPiece.gd index fd944cc..0a0620f 100644 --- a/Scripts/MemoryPiece.gd +++ b/Scripts/MemoryPiece.gd @@ -4,7 +4,7 @@ extends Area2D @export var memory_texture: Texture2D: set(value): memory_texture = value - if $Sprite2D: + if has_node("Sprite2D"): $Sprite2D.texture = memory_texture @export var return_spawn: Marker2D @@ -12,23 +12,47 @@ extends Area2D @onready var sprite: Sprite2D = $Sprite2D +var player_inside := false +var player: Player = null + func _ready() -> void: if memory_texture: sprite.texture = memory_texture if not Engine.is_editor_hint(): body_entered.connect(_on_body_entered) + body_exited.connect(_on_body_exited) + +func _process(_delta: float) -> void: + if Engine.is_editor_hint(): + return + + if player_inside and Input.is_action_just_pressed("interact"): + collect_memory() func _on_body_entered(body: Node) -> void: if body is Player: - print("Memory piece collected") + player_inside = true + player = body + print("Press ENTER to collect memory piece") - if wardrobe and wardrobe.has_method("complete_wardrobe"): - wardrobe.complete_wardrobe() +func _on_body_exited(body: Node) -> void: + if body is Player: + player_inside = false + player = null - if return_spawn: - body.global_position = return_spawn.global_position - else: - print("No return_spawn assigned to memory piece") +func collect_memory() -> void: + if player == null: + return - queue_free() + print("Memory piece collected") + + if wardrobe and wardrobe.has_method("complete_wardrobe"): + wardrobe.complete_wardrobe() + + if return_spawn: + player.global_position = return_spawn.global_position + else: + print("No return_spawn assigned to memory piece") + + queue_free() diff --git a/Scripts/player.gd b/Scripts/player.gd index 51cfd7f..f952c8f 100644 --- a/Scripts/player.gd +++ b/Scripts/player.gd @@ -11,6 +11,7 @@ const JUMP_VELOCITY = -400.0 @onready var player_graphic: AnimatedSprite2D = $PlayerGraphic @onready var camera: Camera2D = $Camera2D @onready var child_graphic: AnimatedSprite2D = $ChildGraphic +@onready var punch_hitbox: Area2D = $PunchHitbox var using_child_form := false @@ -107,7 +108,7 @@ func update_animation(): State.DEATH: graphic.play("death") State.PUNCH: - graphic.play("Punch") + graphic.play("punch") func handle_movement(_delta): if direction: @@ -120,18 +121,21 @@ func handle_movement(_delta): get_active_graphic().flip_h = false else: velocity.x = move_toward(velocity.x, 0, SPEED) + + if current_state == State.PUNCH: + velocity.x = 0 + return func handle_input(): - if Input.is_action_just_pressed("ui_accept") and is_on_floor(): + if Input.is_action_just_pressed("jump") and is_on_floor(): velocity.y = JUMP_VELOCITY current_state = State.JUMP upJump = true - # Child punch attack if Input.is_action_just_pressed("attack"): print("ATTACK PRESSED") - print("using_child_form =", using_child_form) current_state = State.PUNCH + _do_punch_damage() if Input.is_action_just_pressed("shove") && pushEnabled: print("shove pressed") @@ -182,8 +186,8 @@ const STAIRS_LAYER := 3 # correct layer number for "stairs" func _ready() -> void: _set_stair_collision(false) - # Allow climbing up steeper slopes (default is ~45°) - floor_max_angle = deg_to_rad(60) # you can increase or decrease as needed + floor_max_angle = deg_to_rad(60) + punch_hitbox.monitoring = false func set_camera_limits(left: int, top: int, right: int, bottom: int) -> void: camera.limit_left = left @@ -242,6 +246,24 @@ func on_stairs_top_reached(stairs: Node) -> void: if stairs_node == stairs and is_on_stairs: _end_stairs_mode() +func _do_punch_damage() -> void: + print("Punch damage started") + + punch_hitbox.monitoring = true + await get_tree().physics_frame + + var bodies = punch_hitbox.get_overlapping_bodies() + print("Punch overlaps: ", bodies.size()) + + for body in bodies: + print("Punch hit: ", body.name) + + if body.has_method("take_damage"): + body.take_damage(1) + + await get_tree().create_timer(0.1).timeout + punch_hitbox.monitoring = false + func _on_animation_finished() -> void: match current_state: State.JUMP: diff --git a/Scripts/skeleton.gd b/Scripts/skeleton.gd new file mode 100644 index 0000000..8214e9e --- /dev/null +++ b/Scripts/skeleton.gd @@ -0,0 +1,149 @@ +extends CharacterBody2D + +@export var speed := 75.0 +@export var gravity := 980.0 +@export var max_health := 3 +@export var attack_range := 40.0 +@export var memory_piece_scene: PackedScene +@export var memory_texture: Texture2D +@export var memory_return_spawn: Marker2D +@export var memory_wardrobe: Node2D + +@onready var sprite: AnimatedSprite2D = $AnimatedSprite2D +@onready var detection_area: Area2D = $Area2D +@onready var attack_hitbox = $AttackHitbox + + +var health := 3 +var player: Player = null +var is_dead := false +var is_hurt := false +var is_attacking := false +var attack_cooldown := false + +func _ready() -> 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 not is_on_floor(): + velocity.y += gravity * delta + + if is_hurt or is_attacking: + velocity.x = 0 + move_and_slide() + return + + if player: + var direction := player.global_position.x - global_position.x + + if abs(direction) > attack_range: + velocity.x = sign(direction) * speed + sprite.play("walk") + + if velocity.x < 0: + sprite.flip_h = true + elif velocity.x > 0: + sprite.flip_h = false + else: + velocity.x = 0 + attack() + else: + velocity.x = move_toward(velocity.x, 0, speed) + sprite.play("idle") + + move_and_slide() + +func attack() -> void: + if is_attacking: + return + if attack_cooldown: + return + is_attacking = true + attack_cooldown = true + velocity.x = 0 + sprite.play("attack") + + await get_tree().create_timer(0.2).timeout + + do_attack_damage() + +func do_attack_damage() -> void: + print("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("Bodies found: ", bodies.size()) + + for body in bodies: + if body is Player: + print("PLAYER HIT") + body.playerTakesDamage(1) + + attack_hitbox.monitoring = false + +func take_damage(amount: int = 1) -> void: + if is_dead: + return + + health -= amount + print("Skeleton health:", health) + + if health <= 0: + die() + else: + is_hurt = true + velocity.x = 0 + sprite.play("hurt") + +func die() -> void: + if is_dead: + return + + is_dead = true + velocity.x = 0 + sprite.play("death") + print("Skeleton died") + +func _on_detection_body_entered(body: Node) -> void: + if body is Player: + player = body + print("Skeleton detected player") + +func _on_detection_body_exited(body: Node) -> void: + if body == player: + player = null + print("Skeleton 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": + if memory_piece_scene: + var piece = memory_piece_scene.instantiate() + get_parent().add_child(piece) + piece.global_position = global_position + + piece.memory_texture = memory_texture + piece.return_spawn = memory_return_spawn + piece.wardrobe = memory_wardrobe + + queue_free() diff --git a/Scripts/skeleton.gd.uid b/Scripts/skeleton.gd.uid new file mode 100644 index 0000000..7406477 --- /dev/null +++ b/Scripts/skeleton.gd.uid @@ -0,0 +1 @@ +uid://f88hycnuf3m5 diff --git a/Scripts/wardrobe.gd b/Scripts/wardrobe.gd index b21b7ba..c0339cd 100644 --- a/Scripts/wardrobe.gd +++ b/Scripts/wardrobe.gd @@ -19,7 +19,7 @@ func _ready() -> void: area.body_exited.connect(_on_body_exited) func _process(_delta: float) -> void: - if player_inside and not completed and Input.is_action_just_pressed("ui_up"): + if player_inside and not completed and Input.is_action_just_pressed("interact"): enter_wardrobe() func _on_body_entered(body: Node) -> void: diff --git a/project.godot b/project.godot index 17da46a..dfffdd5 100644 --- a/project.godot +++ b/project.godot @@ -49,7 +49,42 @@ shoot={ } attack={ "deadzone": 0.2, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":102,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +] +} +interact={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) +] +} +move_left={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +move_right={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +] +} +move_up={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +] +} +move_down={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +] +} +jump={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) ] }