From 89a5ded14e3f826bd69494a6296e6111d1948150 Mon Sep 17 00:00:00 2001 From: Conrad Date: Sun, 19 Apr 2020 22:25:08 +0200 Subject: [PATCH 01/21] Update README.md --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7d619e9..5b2aaa1 100644 --- a/README.md +++ b/README.md @@ -1 +1,16 @@ -# ludum_dare_46 \ No newline at end of file +# WORKING TITLE + +## Summary + +Short summary of the game and gameplay. + +## Branching + +- `master` - Current state of the game +- `dev` - Next feature update state of the game - Merged to `master` +- `dev-X` - Specific features for the game - Merged to `dev` +- `hotfix-X` - Bugfixes that need to be pushed to all branches + +## Context + +Ludum Dare whatever From 67f1ca9853089f56688eef5c4a152c517b34bbef Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Sun, 19 Apr 2020 22:37:18 +0200 Subject: [PATCH 02/21] Added move up sprite sheet --- src/Boss/SlimeBoss/Animations/move_up.png | Bin 0 -> 34398 bytes .../SlimeBoss/Animations/move_up.png.import | 34 ++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/Boss/SlimeBoss/Animations/move_up.png create mode 100644 src/Boss/SlimeBoss/Animations/move_up.png.import diff --git a/src/Boss/SlimeBoss/Animations/move_up.png b/src/Boss/SlimeBoss/Animations/move_up.png new file mode 100644 index 0000000000000000000000000000000000000000..0a12424fcb9a1996f19b201406afc33285c76002 GIT binary patch literal 34398 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 M07*qoM6N<$f^I!w-T(jq literal 0 HcmV?d00001 diff --git a/src/Boss/SlimeBoss/Animations/move_up.png.import b/src/Boss/SlimeBoss/Animations/move_up.png.import new file mode 100644 index 0000000..ea4280c --- /dev/null +++ b/src/Boss/SlimeBoss/Animations/move_up.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/move_up.png-2674f54fdbe179d2d3e2767acb2b53b9.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Boss/SlimeBoss/Animations/move_up.png" +dest_files=[ "res://.import/move_up.png-2674f54fdbe179d2d3e2767acb2b53b9.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 From ff0e2273f43e805183c7f3b2b70086a93923254c Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Sun, 19 Apr 2020 22:38:03 +0200 Subject: [PATCH 03/21] Fixed pre-existing animations --- src/Boss/SlimeBoss/SlimeBoss.tscn | 73 +++++++++++++++++++++++++------ 1 file changed, 60 insertions(+), 13 deletions(-) diff --git a/src/Boss/SlimeBoss/SlimeBoss.tscn b/src/Boss/SlimeBoss/SlimeBoss.tscn index 4c38dd5..b64f6b2 100644 --- a/src/Boss/SlimeBoss/SlimeBoss.tscn +++ b/src/Boss/SlimeBoss/SlimeBoss.tscn @@ -25,7 +25,7 @@ height = 15.0 [sub_resource type="Animation" id=4] resource_name = "MoveDown" -length = 2.65556 +length = 2.66666 loop = true step = 0.0111111 tracks/0/type = "value" @@ -35,10 +35,10 @@ tracks/0/loop_wrap = true tracks/0/imported = false tracks/0/enabled = true tracks/0/keys = { -"times": PoolRealArray( 0, 2.64444 ), -"transitions": PoolRealArray( 1, 1 ), -"update": 0, -"values": [ 0, 237 ] +"times": PoolRealArray( 0, 0.0111111, 0.0222222, 0.0333333, 0.0444444, 0.0555555, 0.0666666, 0.0777777, 0.0888888, 0.0999999, 0.111111, 0.122222, 0.133333, 0.144444, 0.155555, 0.166667, 0.177778, 0.188889, 0.2, 0.211111, 0.222222, 0.233333, 0.244444, 0.255555, 0.266666, 0.277777, 0.288889, 0.3, 0.311111, 0.322222, 0.333333, 0.344444, 0.355555, 0.366666, 0.377777, 0.388889, 0.4, 0.411111, 0.422222, 0.433333, 0.444444, 0.455555, 0.466666, 0.477777, 0.488888, 0.5, 0.511111, 0.522222, 0.533333, 0.544444, 0.555555, 0.566666, 0.577777, 0.588888, 0.599999, 0.611111, 0.622222, 0.633333, 0.644444, 0.655555, 0.666666, 0.677777, 0.688888, 0.699999, 0.71111, 0.722221, 0.733333, 0.744444, 0.755555, 0.766666, 0.777777, 0.788888, 0.799999, 0.81111, 0.822221, 0.833333, 0.844444, 0.855555, 0.866666, 0.877777, 0.888888, 0.899999, 0.91111, 0.922221, 0.933332, 0.944444, 0.955555, 0.966666, 0.977777, 0.988888, 0.999999, 1.01111, 1.02222, 1.03333, 1.04444, 1.05555, 1.06667, 1.07778, 1.08889, 1.1, 1.11111, 1.12222, 1.13333, 1.14444, 1.15555, 1.16667, 1.17778, 1.18889, 1.2, 1.21111, 1.22222, 1.23333, 1.24444, 1.25555, 1.26667, 1.27778, 1.28889, 1.3, 1.31111, 1.32222, 1.33333, 1.34444, 1.35555, 1.36667, 1.37778, 1.38889, 1.4, 1.41111, 1.42222, 1.43333, 1.44444, 1.45555, 1.46667, 1.47778, 1.48889, 1.5, 1.51111, 1.52222, 1.53333, 1.54444, 1.55555, 1.56667, 1.57778, 1.58889, 1.6, 1.61111, 1.62222, 1.63333, 1.64444, 1.65555, 1.66667, 1.67778, 1.68889, 1.7, 1.71111, 1.72222, 1.73333, 1.74444, 1.75555, 1.76666, 1.77778, 1.78889, 1.8, 1.81111, 1.82222, 1.83333, 1.84444, 1.85555, 1.86666, 1.87778, 1.88889, 1.9, 1.91111, 1.92222, 1.93333, 1.94444, 1.95555, 1.96666, 1.97778, 1.98889, 2, 2.01111, 2.02222, 2.03333, 2.04444, 2.05555, 2.06666, 2.07778, 2.08889, 2.1, 2.11111, 2.12222, 2.13333, 2.14444, 2.15555, 2.16666, 2.17778, 2.18889, 2.2, 2.21111, 2.22222, 2.23333, 2.24444, 2.25555, 2.26666, 2.27778, 2.28889, 2.3, 2.31111, 2.32222, 2.33333, 2.34444, 2.35555, 2.36666, 2.37778, 2.38889, 2.4, 2.41111, 2.42222, 2.43333, 2.44444, 2.45555, 2.46666, 2.47778, 2.48889, 2.5, 2.51111, 2.52222, 2.53333, 2.54444, 2.55555, 2.56666, 2.57778, 2.58889, 2.6, 2.61111, 2.62222, 2.63333, 2.64444, 2.65555 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239 ] } tracks/1/type = "value" tracks/1/path = NodePath("Sprite:texture") @@ -86,7 +86,7 @@ tracks/4/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), "update": 0, -"values": [ Vector2( 0, -20.142 ) ] +"values": [ Vector2( 0, -20 ) ] } [sub_resource type="Animation" id=5] @@ -101,27 +101,75 @@ tracks/0/loop_wrap = true tracks/0/imported = false tracks/0/enabled = true tracks/0/keys = { -"times": PoolRealArray( 0, 1.26667 ), -"transitions": PoolRealArray( 1, 1 ), +"times": PoolRealArray( 0, 0.0166667, 0.0333334, 0.0500001, 0.0666668, 0.0833335, 0.1, 0.116667, 0.133334, 0.15, 0.166667, 0.183334, 0.2, 0.216667, 0.233334, 0.25, 0.266667, 0.283334, 0.300001, 0.316667, 0.333334, 0.350001, 0.366667, 0.383334, 0.400001, 0.416667, 0.433334, 0.450001, 0.466668, 0.483334, 0.500001, 0.516668, 0.533334, 0.550001, 0.566668, 0.583334, 0.600001, 0.616668, 0.633335, 0.650001, 0.666668, 0.683335, 0.700001, 0.716668, 0.733335, 0.750001, 0.766668, 0.783335, 0.800002, 0.816668, 0.833335, 0.850002, 0.866668, 0.883335, 0.900002, 0.916668, 0.933335, 0.950002, 0.966669, 0.983335, 1, 1.01667, 1.03334, 1.05, 1.06667, 1.08334, 1.1, 1.11667, 1.13334, 1.15, 1.16667, 1.18334, 1.2, 1.21667, 1.23334, 1.25, 1.26667 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:texture") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ ExtResource( 6 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("Sprite:vframes") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 7 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("Sprite:hframes") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 11 ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Sprite:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), "update": 0, -"values": [ 0, 76 ] +"values": [ Vector2( -5, -20 ) ] } [node name="SlimeBoss" type="KinematicBody2D"] -position = Vector2( 168, 128 ) script = ExtResource( 4 ) __meta__ = { "_edit_group_": true } [node name="Sprite" type="Sprite" parent="."] -position = Vector2( -10, -20.142 ) +position = Vector2( -5, -20 ) texture = ExtResource( 6 ) vframes = 7 hframes = 11 -frame = 40 +frame = 53 [node name="Hitbox" parent="." instance=ExtResource( 2 )] +visible = false collision_layer = 0 [node name="CollisionShape2D" parent="Hitbox" index="0"] @@ -169,7 +217,6 @@ script = ExtResource( 8 ) [node name="AnimationPlayer" type="AnimationPlayer" parent="."] autoplay = "MoveRight" -playback_speed = 0.1 anims/MoveDown = SubResource( 4 ) anims/MoveRight = SubResource( 5 ) [connection signal="area_entered" from="Hurtbox" to="." method="_on_Hurtbox_area_entered"] From 331d32e2c051e193251f2bb9b534b693c332f6cd Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Sun, 19 Apr 2020 22:38:16 +0200 Subject: [PATCH 04/21] Updated Word.tscn --- src/World.tscn | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/World.tscn b/src/World.tscn index b63f362..e8eb2d7 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=2] +[gd_scene load_steps=11 format=2] [ext_resource path="res://Player/Player.tscn" type="PackedScene" id=1] [ext_resource path="res://World.gd" type="Script" id=2] @@ -6,8 +6,9 @@ [ext_resource path="res://testSprites/dark.png" type="Texture" id=4] [ext_resource path="res://Menus/DragNDrop/DragNDropUI.tscn" type="PackedScene" id=5] [ext_resource path="res://Menus/DialogueBox/DialogueBox.tscn" type="PackedScene" id=6] +[ext_resource path="res://Maps/Background/Background.tscn" type="PackedScene" id=7] +[ext_resource path="res://Boss/SlimeBoss/SlimeBoss.tscn" type="PackedScene" id=8] [ext_resource path="res://Objects/Bonfire/Bonfire.tscn" type="PackedScene" id=10] -[ext_resource path="res://Boss/Boss_template.tscn" type="PackedScene" id=17] [ext_resource path="res://Maps/Grid.tscn" type="PackedScene" id=18] [node name="World" type="Node2D"] @@ -19,12 +20,16 @@ texture = ExtResource( 4 ) region_enabled = true region_rect = Rect2( 0, 0, 1280, 720 ) +[node name="Background" parent="." instance=ExtResource( 7 )] +frame = 33 + [node name="FloorTileMap" type="TileMap" parent="."] +visible = false position = Vector2( 16, 16 ) tile_set = ExtResource( 3 ) cell_size = Vector2( 32, 32 ) format = 1 -tile_data = PoolIntArray( -131059, 47, 0, -131058, 47, 2, -1, 47, 4, -65536, 47, 196609, -65535, 47, 196609, -65534, 47, 196609, -65533, 47, 196609, -65532, 47, 196609, -65531, 47, 196609, -65530, 47, 8, -65529, 47, 196609, -65528, 47, 8, -65527, 47, 196609, -65526, 47, 196609, -65525, 47, 196609, -65524, 47, 196609, -65523, 47, 196614, -65522, 47, 196618, -65521, 47, 196610, 65535, 47, 65539, 6, 47, 131075, 8, 47, 131075, 14, 47, 65539, 131071, 47, 65539, 65541, 47, 196611, 65550, 47, 65539, 196607, 47, 65539, 131075, 47, 196608, 131076, 47, 196610, 131086, 47, 65539, 262143, 47, 65539, 196614, 47, 196611, 196622, 47, 65539, 327679, 47, 65539, 262147, 47, 196611, 262149, 47, 196611, 262158, 47, 65539, 393215, 47, 65539, 327684, 47, 196611, 327688, 47, 196611, 327694, 47, 65539, 458751, 47, 65539, 393221, 47, 3, 393225, 47, 3, 393230, 47, 65539, 524287, 47, 196612, 458752, 47, 196609, 458753, 47, 196609, 458754, 47, 196609, 458755, 47, 196609, 458756, 47, 196609, 458757, 47, 196616, 458758, 47, 196609, 458759, 47, 196609, 458760, 47, 196609, 458761, 47, 196616, 458762, 47, 196609, 458763, 47, 196609, 458764, 47, 196609, 458765, 47, 196609, 458766, 47, 196615 ) +tile_data = PoolIntArray( -1, -1610612689, 4, -65536, -1610612689, 196609, -65535, 47, 196609, -65534, 47, 196609, -65533, 47, 196609, -65532, 47, 196609, -65531, 47, 196609, -65530, 47, 196609, -65529, 47, 196609, -65528, 47, 196609, -65527, 47, 196609, -65526, 47, 196609, -65525, 47, 196609, -65524, 47, 196609, -65523, 47, 196609, -65522, 47, 7, 65535, -1610612689, 65539, 14, 47, 65539, 131071, 47, 65539, 65550, 47, 65539, 196607, 47, 65539, 131086, -1610612689, 65539, 262143, 47, 65539, 196622, -1610612689, 65539, 327679, 47, 65539, 262158, -1610612689, 65539, 393215, 47, 65539, 327694, 47, 65539, 458751, -1610612689, 131076, 393216, -1610612689, 1, 393217, -1610612689, 1, 393218, -1610612689, 1, 393219, -1610612689, 1, 393220, -1610612689, 1, 393221, -1610612689, 1, 393222, -1610612689, 1, 393223, -1610612689, 1, 393224, -1610612689, 1, 393225, -1610612689, 1, 393226, -1610612689, 1, 393227, -1610612689, 1, 393228, -1610612689, 1, 393229, -1610612689, 1, 393230, 47, 131079, 524287, -1610612689, 131072, 458752, 47, 131073, 458753, 47, 131073, 458754, 47, 131073, 458755, 47, 131073, 458756, 47, 131073, 458757, 47, 131073, 458758, 47, 131073, 458759, 47, 131073, 458760, 47, 131073, 458761, 47, 131073, 458762, 47, 131073, 458763, 47, 131073, 458764, 47, 131073, 458765, 47, 131073, 458766, 47, 131074 ) __meta__ = { "_edit_group_": true, "_edit_lock_": true @@ -37,15 +42,12 @@ position = Vector2( 152, 120 ) position = Vector2( 264, -24 ) [node name="Player" parent="YSort" instance=ExtResource( 1 )] -position = Vector2( 240, 72 ) +position = Vector2( 168, -12.7226 ) scale = Vector2( 2, 2 ) +debug = true ROLL_SPEED = 140 FRICTION = 200 -[node name="Boss_template" parent="YSort" instance=ExtResource( 17 )] -position = Vector2( -67.0889, 2.27742 ) -debug = true - [node name="Grid" parent="." instance=ExtResource( 18 )] [node name="CanvasLayer" type="CanvasLayer" parent="."] @@ -56,4 +58,4 @@ visible = false [node name="DragNDropUI" parent="CanvasLayer" instance=ExtResource( 5 )] ObjectParent = NodePath("../..") -[editable path="YSort/Bonfire"] +[node name="SlimeBoss" parent="." instance=ExtResource( 8 )] From 8f152d420d613c159af55e3fa015f50c9ee95f2e Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Sun, 19 Apr 2020 22:38:53 +0200 Subject: [PATCH 05/21] Made grid more adaptable Just gotta say... to make it possion-dependend is really stupid. --- src/Maps/Grid.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Maps/Grid.gd b/src/Maps/Grid.gd index 396f8c9..e8c2371 100644 --- a/src/Maps/Grid.gd +++ b/src/Maps/Grid.gd @@ -38,7 +38,7 @@ func _reset_grids(): func _ready(): - var walls = get_tree().current_scene.get_child(1) + var walls = get_tree().current_scene.get_node("FloorTileMap") offset = walls.global_position #todo put in grid_lul for x in range(14): From 02b56fb6f550935509b781d9fa8670191309da6e Mon Sep 17 00:00:00 2001 From: Conrad Date: Sun, 19 Apr 2020 22:46:31 +0200 Subject: [PATCH 06/21] Moved titlescreen to correct position --- src/Menus/TitleScreen/TitleScreen.tscn | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Menus/TitleScreen/TitleScreen.tscn b/src/Menus/TitleScreen/TitleScreen.tscn index 9904196..83cd783 100644 --- a/src/Menus/TitleScreen/TitleScreen.tscn +++ b/src/Menus/TitleScreen/TitleScreen.tscn @@ -161,9 +161,9 @@ anchor_top = -0.003002 anchor_right = 0.704 anchor_bottom = 0.667 margin_left = 0.810538 -margin_top = -0.18946 +margin_top = 0.81054 margin_right = 0.0802612 -margin_bottom = -0.0900574 +margin_bottom = 0.909943 script = ExtResource( 3 ) __meta__ = { "_edit_use_anchors_": false @@ -174,7 +174,7 @@ anims/__INIT__ = SubResource( 1 ) anims/show_buttons = SubResource( 2 ) [node name="Startup" parent="." instance=ExtResource( 2 )] -scale = Vector2( 1.50207, 1.49479 ) +scale = Vector2( 1.5, 1.5 ) animation = "start" speed_scale = 1.0 From d5855db7f1515b4902e607fa834374fc5c88318f Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Sun, 19 Apr 2020 22:48:04 +0200 Subject: [PATCH 07/21] Finally added all boss movement animations --- src/Boss/SlimeBoss/SlimeBoss.tscn | 175 +++++++++++++++++++++++++++++- 1 file changed, 173 insertions(+), 2 deletions(-) diff --git a/src/Boss/SlimeBoss/SlimeBoss.tscn b/src/Boss/SlimeBoss/SlimeBoss.tscn index b64f6b2..dff5291 100644 --- a/src/Boss/SlimeBoss/SlimeBoss.tscn +++ b/src/Boss/SlimeBoss/SlimeBoss.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=16 format=2] +[gd_scene load_steps=19 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=2] @@ -10,6 +10,7 @@ [ext_resource path="res://Boss/SlimeBoss/States/Motion/Stagger.gd" type="Script" id=8] [ext_resource path="res://Boss/SlimeBoss/States/Motion/Wander.gd" type="Script" id=9] [ext_resource path="res://Boss/SlimeBoss/States/Motion/SplitUp.gd" type="Script" id=10] +[ext_resource path="res://Boss/SlimeBoss/Animations/move_up.png" type="Texture" id=11] [sub_resource type="CapsuleShape2D" id=1] radius = 18.0 @@ -88,6 +89,96 @@ tracks/4/keys = { "update": 0, "values": [ Vector2( 0, -20 ) ] } +tracks/5/type = "value" +tracks/5/path = NodePath("Sprite:flip_h") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} + +[sub_resource type="Animation" id=6] +resource_name = "MoveLeft" +length = 1.28333 +loop = true +step = 0.0166667 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.0166667, 0.0333334, 0.0500001, 0.0666668, 0.0833335, 0.1, 0.116667, 0.133334, 0.15, 0.166667, 0.183334, 0.2, 0.216667, 0.233334, 0.25, 0.266667, 0.283334, 0.300001, 0.316667, 0.333334, 0.350001, 0.366667, 0.383334, 0.400001, 0.416667, 0.433334, 0.450001, 0.466668, 0.483334, 0.500001, 0.516668, 0.533334, 0.550001, 0.566668, 0.583334, 0.600001, 0.616668, 0.633335, 0.650001, 0.666668, 0.683335, 0.700001, 0.716668, 0.733335, 0.750001, 0.766668, 0.783335, 0.800002, 0.816668, 0.833335, 0.850002, 0.866668, 0.883335, 0.900002, 0.916668, 0.933335, 0.950002, 0.966669, 0.983335, 1, 1.01667, 1.03334, 1.05, 1.06667, 1.08334, 1.1, 1.11667, 1.13334, 1.15, 1.16667, 1.18334, 1.2, 1.21667, 1.23334, 1.25, 1.26667 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:texture") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ ExtResource( 6 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("Sprite:vframes") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 7 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("Sprite:hframes") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 11 ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Sprite:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( -5, -20 ) ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("Sprite:flip_h") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} [sub_resource type="Animation" id=5] resource_name = "MoveRight" @@ -154,6 +245,84 @@ tracks/4/keys = { "update": 0, "values": [ Vector2( -5, -20 ) ] } +tracks/5/type = "value" +tracks/5/path = NodePath("Sprite:flip_h") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} + +[sub_resource type="Animation" id=7] +resource_name = "MoveUp" +length = 1.28333 +loop = true +step = 0.0166667 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:texture") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ ExtResource( 11 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:vframes") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 7 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("Sprite:hframes") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 11 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("Sprite:flip_h") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Sprite:frame") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0, 0.0166667, 0.0333333, 0.05, 0.0666667, 0.0833333, 0.1, 0.116667, 0.133333, 0.15, 0.166667, 0.183333, 0.2, 0.216667, 0.233333, 0.25, 0.266667, 0.283333, 0.3, 0.316667, 0.333333, 0.35, 0.366667, 0.383333, 0.4, 0.416667, 0.433333, 0.45, 0.466667, 0.483333, 0.5, 0.516667, 0.533333, 0.55, 0.566667, 0.583333, 0.6, 0.616667, 0.633333, 0.65, 0.666667, 0.683333, 0.7, 0.716667, 0.733333, 0.75, 0.766667, 0.783333, 0.8, 0.816667, 0.833333, 0.85, 0.866667, 0.883333, 0.9, 0.916667, 0.933333, 0.95, 0.966667, 0.983333, 1, 1.01667, 1.03333, 1.05, 1.06667, 1.08333, 1.1, 1.11667, 1.13333, 1.15, 1.16667, 1.18333, 1.2, 1.21667, 1.23333, 1.25 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75 ] +} [node name="SlimeBoss" type="KinematicBody2D"] script = ExtResource( 4 ) @@ -164,9 +333,9 @@ __meta__ = { [node name="Sprite" type="Sprite" parent="."] position = Vector2( -5, -20 ) texture = ExtResource( 6 ) +flip_h = true vframes = 7 hframes = 11 -frame = 53 [node name="Hitbox" parent="." instance=ExtResource( 2 )] visible = false @@ -218,7 +387,9 @@ script = ExtResource( 8 ) [node name="AnimationPlayer" type="AnimationPlayer" parent="."] autoplay = "MoveRight" anims/MoveDown = SubResource( 4 ) +anims/MoveLeft = SubResource( 6 ) anims/MoveRight = SubResource( 5 ) +anims/MoveUp = SubResource( 7 ) [connection signal="area_entered" from="Hurtbox" to="." method="_on_Hurtbox_area_entered"] [connection signal="area_exited" from="Hurtbox" to="." method="_on_Hurtbox_area_exited"] [connection signal="no_health" from="Stats" to="." method="_on_Stats_no_health"] From 61dcd42dc6c4040d20d2dce5cce0d53f03efbcbd Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Sun, 19 Apr 2020 23:24:20 +0200 Subject: [PATCH 08/21] Removed slimeboss script for now --- src/Boss/SlimeBoss/SlimeBoss.gd | 91 ------------------------------- src/Boss/SlimeBoss/SlimeBoss.tscn | 17 ++---- src/World.tscn | 9 +-- 3 files changed, 11 insertions(+), 106 deletions(-) diff --git a/src/Boss/SlimeBoss/SlimeBoss.gd b/src/Boss/SlimeBoss/SlimeBoss.gd index 59e2550..83bf13e 100644 --- a/src/Boss/SlimeBoss/SlimeBoss.gd +++ b/src/Boss/SlimeBoss/SlimeBoss.gd @@ -1,94 +1,3 @@ extends KinematicBody2D class_name SlimeBoss -""" -This is an example player controller script created by Paul -""" -var velocity := Vector2.ZERO -# This is how you export variables with ranges to the editor window -export(bool) var debug := false -export(int, 0, 500) var ACCELERATION := 450 -# Reference for the current player -onready var player_stats := $Stats -onready var debug_label := $DebugLabel -#onready var animation_player := $AnimationPlayer -#var animation_tree := $AnimationTree -#onready var animation_state = animation_tree.get("parameters/playback") - -enum moveState{ - MOVE, - HIT -} - -var movementState = moveState.MOVE - -var damage_per_second := 0.0 -var totaldamage := 0.0 - -func _debug_update(): - debug_label.text = str(player_stats.health) + "/" + str(player_stats.max_health) + " HP\n" - - -func _physics_process(delta): - totaldamage+=damage_per_second*delta - player_stats.speed+=10*delta - while(totaldamage>1): - totaldamage-=1 - player_stats.health-=1 - while(totaldamage<-1): - totaldamage+=1 - player_stats.health+=1 - _debug_update() - if debug == true: - match movementState: - moveState.MOVE: - movement_move(delta) - moveState.HIT: - movement_hit() - - move() - -# IMPORTANT: If you are using move_and_slide don't multiply by delta -# Godots physics system does that internally -# In move_and_collide(...) you have to multiply by delta. -func move(): - move_and_slide(velocity) - -func movement_move(delta): - var input_vector = Vector2.ZERO - # This is a clever way to handle directional input - # Input.get_action_strength(...) returns a value between 0 and 1 depending - # on how strong the controller direction is pressed - # For keyboards it always returns 1 if pressed and 0 if not - # The actions are custom and defined in the project settings - input_vector.x = Input.get_action_strength("right") - Input.get_action_strength("left") - input_vector.y = Input.get_action_strength("down") - Input.get_action_strength("up") - input_vector = input_vector.normalized() - - if input_vector == Vector2.ZERO: - #animation_state.travel("idle") - velocity = Vector2.ZERO - else: - velocity = velocity.move_toward(player_stats.speed * input_vector, ACCELERATION * delta) - if Input.is_action_just_pressed("roll"): - pass - elif Input.is_action_just_pressed("attack"): - pass - -func movement_hit(): - velocity = Vector2.ZERO - -func hit_finished(): - movementState = moveState.MOVE - -func _on_Stats_no_health(): - queue_free() - - -func _on_Hurtbox_area_entered(area): - player_stats.health-=area.damage - damage_per_second = damage_per_second + area.damage - - -func _on_Hurtbox_area_exited(area): - damage_per_second = damage_per_second - area.damage diff --git a/src/Boss/SlimeBoss/SlimeBoss.tscn b/src/Boss/SlimeBoss/SlimeBoss.tscn index dff5291..9549180 100644 --- a/src/Boss/SlimeBoss/SlimeBoss.tscn +++ b/src/Boss/SlimeBoss/SlimeBoss.tscn @@ -1,9 +1,8 @@ -[gd_scene load_steps=19 format=2] +[gd_scene load_steps=18 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=2] [ext_resource path="res://Overlap/Stats/Stats.tscn" type="PackedScene" id=3] -[ext_resource path="res://Boss/SlimeBoss/SlimeBoss.gd" type="Script" id=4] [ext_resource path="res://Boss/SlimeBoss/Animations/move_down.png" type="Texture" id=5] [ext_resource path="res://Boss/SlimeBoss/Animations/move_right.png" type="Texture" id=6] [ext_resource path="res://Boss/SlimeBoss/States/Motion/Idle.gd" type="Script" id=7] @@ -325,17 +324,16 @@ tracks/4/keys = { } [node name="SlimeBoss" type="KinematicBody2D"] -script = ExtResource( 4 ) __meta__ = { "_edit_group_": true } [node name="Sprite" type="Sprite" parent="."] -position = Vector2( -5, -20 ) -texture = ExtResource( 6 ) -flip_h = true -vframes = 7 -hframes = 11 +position = Vector2( 0, -20 ) +texture = ExtResource( 5 ) +vframes = 10 +hframes = 24 +frame = 227 [node name="Hitbox" parent="." instance=ExtResource( 2 )] visible = false @@ -390,9 +388,6 @@ anims/MoveDown = SubResource( 4 ) anims/MoveLeft = SubResource( 6 ) anims/MoveRight = SubResource( 5 ) anims/MoveUp = SubResource( 7 ) -[connection signal="area_entered" from="Hurtbox" to="." method="_on_Hurtbox_area_entered"] -[connection signal="area_exited" from="Hurtbox" to="." method="_on_Hurtbox_area_exited"] -[connection signal="no_health" from="Stats" to="." method="_on_Stats_no_health"] [editable path="Hitbox"] diff --git a/src/World.tscn b/src/World.tscn index e8eb2d7..5dfef3b 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -21,15 +21,15 @@ region_enabled = true region_rect = Rect2( 0, 0, 1280, 720 ) [node name="Background" parent="." instance=ExtResource( 7 )] -frame = 33 +frame = 29 [node name="FloorTileMap" type="TileMap" parent="."] -visible = false +modulate = Color( 1, 1, 1, 0.454902 ) position = Vector2( 16, 16 ) tile_set = ExtResource( 3 ) cell_size = Vector2( 32, 32 ) format = 1 -tile_data = PoolIntArray( -1, -1610612689, 4, -65536, -1610612689, 196609, -65535, 47, 196609, -65534, 47, 196609, -65533, 47, 196609, -65532, 47, 196609, -65531, 47, 196609, -65530, 47, 196609, -65529, 47, 196609, -65528, 47, 196609, -65527, 47, 196609, -65526, 47, 196609, -65525, 47, 196609, -65524, 47, 196609, -65523, 47, 196609, -65522, 47, 7, 65535, -1610612689, 65539, 14, 47, 65539, 131071, 47, 65539, 65550, 47, 65539, 196607, 47, 65539, 131086, -1610612689, 65539, 262143, 47, 65539, 196622, -1610612689, 65539, 327679, 47, 65539, 262158, -1610612689, 65539, 393215, 47, 65539, 327694, 47, 65539, 458751, -1610612689, 131076, 393216, -1610612689, 1, 393217, -1610612689, 1, 393218, -1610612689, 1, 393219, -1610612689, 1, 393220, -1610612689, 1, 393221, -1610612689, 1, 393222, -1610612689, 1, 393223, -1610612689, 1, 393224, -1610612689, 1, 393225, -1610612689, 1, 393226, -1610612689, 1, 393227, -1610612689, 1, 393228, -1610612689, 1, 393229, -1610612689, 1, 393230, 47, 131079, 524287, -1610612689, 131072, 458752, 47, 131073, 458753, 47, 131073, 458754, 47, 131073, 458755, 47, 131073, 458756, 47, 131073, 458757, 47, 131073, 458758, 47, 131073, 458759, 47, 131073, 458760, 47, 131073, 458761, 47, 131073, 458762, 47, 131073, 458763, 47, 131073, 458764, 47, 131073, 458765, 47, 131073, 458766, 47, 131074 ) +tile_data = PoolIntArray( -1, -1610612689, 4, -65536, -1610612689, 196609, -65535, -1610612689, 196609, -65534, -1610612689, 196609, -65533, -1610612689, 196609, -65532, -1610612689, 196609, -65531, -1610612689, 196609, -65530, -1610612689, 196609, -65529, -1610612689, 196609, -65528, -1610612689, 196609, -65527, -1610612689, 196609, -65526, -1610612689, 196609, -65525, -1610612689, 196609, -65524, -1610612689, 196609, -65523, -1610612689, 196610, -65522, -1610612720, 131073, 65535, -1610612689, 65539, 14, -1610612689, 3, 131071, 47, 65539, 65550, -1610612689, 65539, 196607, 47, 65539, 131086, -1610612689, 65539, 262143, 47, 65539, 196622, -1610612689, 65539, 327679, 47, 65539, 262158, -1610612689, 65539, 393215, 47, 65539, 327694, -1610612689, 65539, 458751, -1610612689, 131076, 393216, -1610612689, 1, 393217, -1610612689, 1, 393218, -1610612689, 1, 393219, -1610612689, 1, 393220, -1610612689, 1, 393221, -1610612689, 1, 393222, -1610612689, 1, 393223, -1610612689, 1, 393224, -1610612689, 1, 393225, -1610612689, 1, 393226, -1610612689, 1, 393227, -1610612689, 1, 393228, -1610612689, 1, 393229, -1610612689, 1, 393230, -1610612689, 131079, 524287, -1610612689, 131072, 458752, 47, 131073, 458753, 47, 131073, 458754, 47, 131073, 458755, 47, 131073, 458756, 47, 131073, 458757, 47, 131073, 458758, 47, 131073, 458759, 47, 131073, 458760, 47, 131073, 458761, 47, 131073, 458762, 47, 131073, 458763, 47, 131073, 458764, 47, 131073, 458765, 47, 131073, 458766, -1610612689, 131074 ) __meta__ = { "_edit_group_": true, "_edit_lock_": true @@ -39,7 +39,7 @@ __meta__ = { position = Vector2( 152, 120 ) [node name="Bonfire" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( 264, -24 ) +position = Vector2( 265.543, -16 ) [node name="Player" parent="YSort" instance=ExtResource( 1 )] position = Vector2( 168, -12.7226 ) @@ -59,3 +59,4 @@ visible = false ObjectParent = NodePath("../..") [node name="SlimeBoss" parent="." instance=ExtResource( 8 )] +position = Vector2( 88, 75.8131 ) From 32ccb24012a822af56c6c8a794ccea1f142479db Mon Sep 17 00:00:00 2001 From: Conrad Date: Mon, 20 Apr 2020 00:19:06 +0200 Subject: [PATCH 09/21] Added Gameplay Animations and Functionality - Added clap animation for bear trap - Added cards in menu bar - Replaced old bear_trap icon with new one --- src/Menus/DragNDrop/DragNDropUI.tscn | 51 +++++++++----- src/Menus/DragNDrop/DragSink.tscn | 7 +- src/Menus/DragNDrop/DragSource.tscn | 8 ++- src/Objects/Card/card.png | Bin 0 -> 326 bytes src/Objects/Card/card.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0000.png | Bin 0 -> 1982 bytes .../Traps/Bear/Animation/0000.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0001.png | Bin 0 -> 1923 bytes .../Traps/Bear/Animation/0001.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0002.png | Bin 0 -> 1924 bytes .../Traps/Bear/Animation/0002.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0003.png | Bin 0 -> 1899 bytes .../Traps/Bear/Animation/0003.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0004.png | Bin 0 -> 1913 bytes .../Traps/Bear/Animation/0004.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0005.png | Bin 0 -> 1879 bytes .../Traps/Bear/Animation/0005.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0006.png | Bin 0 -> 1883 bytes .../Traps/Bear/Animation/0006.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0007.png | Bin 0 -> 1877 bytes .../Traps/Bear/Animation/0007.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0008.png | Bin 0 -> 1895 bytes .../Traps/Bear/Animation/0008.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0009.png | Bin 0 -> 1898 bytes .../Traps/Bear/Animation/0009.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0010.png | Bin 0 -> 1895 bytes .../Traps/Bear/Animation/0010.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0011.png | Bin 0 -> 1896 bytes .../Traps/Bear/Animation/0011.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0012.png | Bin 0 -> 1864 bytes .../Traps/Bear/Animation/0012.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0013.png | Bin 0 -> 1860 bytes .../Traps/Bear/Animation/0013.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0014.png | Bin 0 -> 1870 bytes .../Traps/Bear/Animation/0014.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0015.png | Bin 0 -> 1881 bytes .../Traps/Bear/Animation/0015.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0016.png | Bin 0 -> 1882 bytes .../Traps/Bear/Animation/0016.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0017.png | Bin 0 -> 1948 bytes .../Traps/Bear/Animation/0017.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0018.png | Bin 0 -> 1948 bytes .../Traps/Bear/Animation/0018.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0019.png | Bin 0 -> 1990 bytes .../Traps/Bear/Animation/0019.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0020.png | Bin 0 -> 1921 bytes .../Traps/Bear/Animation/0020.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0021.png | Bin 0 -> 1965 bytes .../Traps/Bear/Animation/0021.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0022.png | Bin 0 -> 1956 bytes .../Traps/Bear/Animation/0022.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0023.png | Bin 0 -> 1956 bytes .../Traps/Bear/Animation/0023.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0024.png | Bin 0 -> 1956 bytes .../Traps/Bear/Animation/0024.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0025.png | Bin 0 -> 1956 bytes .../Traps/Bear/Animation/0025.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0026.png | Bin 0 -> 1956 bytes .../Traps/Bear/Animation/0026.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0027.png | Bin 0 -> 1956 bytes .../Traps/Bear/Animation/0027.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0028.png | Bin 0 -> 1956 bytes .../Traps/Bear/Animation/0028.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0029.png | Bin 0 -> 1956 bytes .../Traps/Bear/Animation/0029.png.import | 34 +++++++++ src/Objects/Traps/Bear/Animation/0030.png | Bin 0 -> 1956 bytes .../Traps/Bear/Animation/0030.png.import | 34 +++++++++ src/Objects/Traps/Bear/bear.jpg | Bin 0 -> 20091 bytes src/Objects/Traps/Bear/bear.jpg.import | 34 +++++++++ src/Objects/Traps/bear.gd | 13 +++- src/Objects/Traps/bear.tscn | 66 +++++++++++++++--- src/Overlap/Mechanics/Mechanics.gd | 1 + src/Overlap/Mechanics/Mechanics.tscn | 6 ++ src/World.tscn | 5 +- 74 files changed, 1251 insertions(+), 28 deletions(-) create mode 100644 src/Objects/Card/card.png create mode 100644 src/Objects/Card/card.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0000.png create mode 100644 src/Objects/Traps/Bear/Animation/0000.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0001.png create mode 100644 src/Objects/Traps/Bear/Animation/0001.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0002.png create mode 100644 src/Objects/Traps/Bear/Animation/0002.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0003.png create mode 100644 src/Objects/Traps/Bear/Animation/0003.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0004.png create mode 100644 src/Objects/Traps/Bear/Animation/0004.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0005.png create mode 100644 src/Objects/Traps/Bear/Animation/0005.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0006.png create mode 100644 src/Objects/Traps/Bear/Animation/0006.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0007.png create mode 100644 src/Objects/Traps/Bear/Animation/0007.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0008.png create mode 100644 src/Objects/Traps/Bear/Animation/0008.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0009.png create mode 100644 src/Objects/Traps/Bear/Animation/0009.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0010.png create mode 100644 src/Objects/Traps/Bear/Animation/0010.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0011.png create mode 100644 src/Objects/Traps/Bear/Animation/0011.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0012.png create mode 100644 src/Objects/Traps/Bear/Animation/0012.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0013.png create mode 100644 src/Objects/Traps/Bear/Animation/0013.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0014.png create mode 100644 src/Objects/Traps/Bear/Animation/0014.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0015.png create mode 100644 src/Objects/Traps/Bear/Animation/0015.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0016.png create mode 100644 src/Objects/Traps/Bear/Animation/0016.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0017.png create mode 100644 src/Objects/Traps/Bear/Animation/0017.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0018.png create mode 100644 src/Objects/Traps/Bear/Animation/0018.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0019.png create mode 100644 src/Objects/Traps/Bear/Animation/0019.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0020.png create mode 100644 src/Objects/Traps/Bear/Animation/0020.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0021.png create mode 100644 src/Objects/Traps/Bear/Animation/0021.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0022.png create mode 100644 src/Objects/Traps/Bear/Animation/0022.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0023.png create mode 100644 src/Objects/Traps/Bear/Animation/0023.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0024.png create mode 100644 src/Objects/Traps/Bear/Animation/0024.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0025.png create mode 100644 src/Objects/Traps/Bear/Animation/0025.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0026.png create mode 100644 src/Objects/Traps/Bear/Animation/0026.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0027.png create mode 100644 src/Objects/Traps/Bear/Animation/0027.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0028.png create mode 100644 src/Objects/Traps/Bear/Animation/0028.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0029.png create mode 100644 src/Objects/Traps/Bear/Animation/0029.png.import create mode 100644 src/Objects/Traps/Bear/Animation/0030.png create mode 100644 src/Objects/Traps/Bear/Animation/0030.png.import create mode 100644 src/Objects/Traps/Bear/bear.jpg create mode 100644 src/Objects/Traps/Bear/bear.jpg.import create mode 100644 src/Overlap/Mechanics/Mechanics.gd create mode 100644 src/Overlap/Mechanics/Mechanics.tscn diff --git a/src/Menus/DragNDrop/DragNDropUI.tscn b/src/Menus/DragNDrop/DragNDropUI.tscn index 3f19aea..238794c 100644 --- a/src/Menus/DragNDrop/DragNDropUI.tscn +++ b/src/Menus/DragNDrop/DragNDropUI.tscn @@ -1,11 +1,12 @@ -[gd_scene load_steps=8 format=2] +[gd_scene load_steps=9 format=2] [ext_resource path="res://Menus/DragNDrop/DragSource.tscn" type="PackedScene" id=1] [ext_resource path="res://Menus/DragNDrop/DragSink.tscn" type="PackedScene" id=2] [ext_resource path="res://Objects/Banana/Banana.tscn" type="PackedScene" id=3] [ext_resource path="res://testSprites/bannane.png" type="Texture" id=4] -[ext_resource path="res://testSprites/falle.png" type="Texture" id=5] +[ext_resource path="res://Objects/Traps/Bear/bear.jpg" type="Texture" id=5] [ext_resource path="res://Objects/Traps/bear.tscn" type="PackedScene" id=6] +[ext_resource path="res://Objects/Traps/Bear/Animation/0012.png" type="Texture" id=7] [sub_resource type="GDScript" id=1] script/source = "extends Control @@ -23,27 +24,45 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="DragSourceBanana" parent="." instance=ExtResource( 1 )] -margin_left = 13.5128 -margin_top = 238.668 -margin_right = 45.5128 -margin_bottom = 270.668 +[node name="GenericCard1" parent="." instance=ExtResource( 1 )] +margin_left = 11.9239 +margin_top = 220.793 +margin_right = 43.9239 +margin_bottom = 252.793 texture = ExtResource( 4 ) Item = ExtResource( 3 ) PreviewIcon = ExtResource( 4 ) -[node name="DragSourceFalle" parent="." instance=ExtResource( 1 )] -margin_left = 45.5128 -margin_top = 238.668 -margin_right = 77.5128 -margin_bottom = 270.668 +[node name="GenericCard2" parent="." instance=ExtResource( 1 )] +margin_left = 69.0145 +margin_top = 221.191 +margin_right = 101.014 +margin_bottom = 253.191 texture = ExtResource( 5 ) Item = ExtResource( 6 ) -PreviewIcon = ExtResource( 5 ) +PreviewIcon = ExtResource( 7 ) + +[node name="GenericCard3" parent="." instance=ExtResource( 1 )] +margin_left = 124.812 +margin_top = 220.859 +margin_right = 156.812 +margin_bottom = 252.859 + +[node name="GenericCard4" parent="." instance=ExtResource( 1 )] +margin_left = 180.718 +margin_top = 220.859 +margin_right = 212.718 +margin_bottom = 252.859 + +[node name="GenericCard5" parent="." instance=ExtResource( 1 )] +margin_left = 237.404 +margin_top = 221.267 +margin_right = 269.404 +margin_bottom = 253.267 [node name="DragSink" parent="." instance=ExtResource( 2 )] anchor_right = 1.002 anchor_bottom = 0.87 -margin_left = 1.0 -margin_right = 0.0399475 -margin_bottom = 0.0999756 +margin_left = 2.0 +margin_right = 0.0400085 +margin_bottom = -30.9 diff --git a/src/Menus/DragNDrop/DragSink.tscn b/src/Menus/DragNDrop/DragSink.tscn index 4711e2a..382436d 100644 --- a/src/Menus/DragNDrop/DragSink.tscn +++ b/src/Menus/DragNDrop/DragSink.tscn @@ -9,10 +9,15 @@ script/source = "extends Container func can_drop_data(_pos, data): return typeof(data) == typeof(PackedScene) + +func get_nearest_grid_pos(position): + return Vector2(floor(position.x / 32.0) * 32, floor(position.y / 32.0) * 32) + + #what is to be done when data is dropped func drop_data(_pos, data:PackedScene): var child = data.instance() - child.position= _pos + child.position = get_nearest_grid_pos(_pos) get_node(get_parent().ObjectParent).add_child(child) " diff --git a/src/Menus/DragNDrop/DragSource.tscn b/src/Menus/DragNDrop/DragSource.tscn index 8ec97c3..9eb12f0 100644 --- a/src/Menus/DragNDrop/DragSource.tscn +++ b/src/Menus/DragNDrop/DragSource.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=4 format=2] [ext_resource path="res://icon.png" type="Texture" id=1] +[ext_resource path="res://Objects/Card/card.png" type="Texture" id=2] [sub_resource type="GDScript" id=1] script/source = "extends TextureRect @@ -53,3 +54,8 @@ __meta__ = { "_edit_use_anchors_": false } PreviewIcon = ExtResource( 1 ) + +[node name="Sprite" type="Sprite" parent="."] +position = Vector2( 16.0791, 16.0117 ) +z_index = -1 +texture = ExtResource( 2 ) diff --git a/src/Objects/Card/card.png b/src/Objects/Card/card.png new file mode 100644 index 0000000000000000000000000000000000000000..d1adef110e58067a64c0892b9e6e45de6c86bcc5 GIT binary patch literal 326 zcmV-M0lEH(P)Px#a!^cEMH3PhJTO6OUw)O0uEfC8|NsB4Bvt8DZ}N$T__3##KQ+~0O7Wm@{@lXV zawy)LHto=B`1P?Of@3DZSXJm?y!ezunWHnvwsYprrTXz3F^eB_#~ZNXV%_pAQYWkrt^^IsJ`r*myZ&WuRb!t($LNetD`k<%2VGIL(6eGm@Cg^ z;sqDnkGc61q24ggdt&o-*`14h?{llHOK`z`!UPx#3v@+TbW>wx zZe;*dV`Xk-tdfr>r zH9aH2?&9KN=Vv!o+8;mtyVpjtlv}#7#LRk=44yegJ$W;x4|&ODzu)%eEQ8-g1fWS)Zbz1*H_QiotsNhurB?``C|?IiAfF`zq|KfHZCNSA4@cJ=oD?W^5~_iwt#>+9!xHqu62Aoue*A2Bxs{^t5c znfu*Cad)j<6)O9~yEo0}CW%?E>p+Bp^M@xtVYZE=QC79I%)ZCJ#3Ae$(=PSy{*NBJ zg^uEth|OU3|JAfFm%F?2Hq*F_8b3b$xiL*zq4(AJ{ckVZd_*dQ{L#EN^8Wtig-vu| zT)2(oHf}WEzSvAju^DyFHubu%F%XVN4z+_6x;i9M#yW7H3Ykd$Y z&_$}~UPrtmV~am zHr2kkn5&FXW1Oabo26KOh{NILwUOxC1bcNIeJ*;_}@$Uv=Kcewnw{f^5$wkP!%omG` z4bPh<*1tVWLM{)_m_k9E7?Q?mmXFPYfta`jx)d86esY#|7>1ih@}*Po<27vV3<2wQ zZ5-KvWWK_P&uhM2#=$zVZlcQ3_|};g(}Rc&A2z@5R~&itXJ6>+D^C)WD74HfuH~Vb zKKEnd;(7uVU%%l-!%oUPCHek9q5`WME)L{feN*Nz#UYP=<+&Rh@Tl~?gO^*@%`AQ~xd*#3b+Hd@ z^pk&XLDqyKN_L^KdU%^~fb|j#%ujg<}hZ-z0Qb z`kXqA(pbmF4}9|5NB8P%yqd<}5BX>!In`4(0UR|@R>{LLXir@PY}v$ef%g@NU%uAq zuvSkWSeZU(f}(+5BBZt@~t)N*d8a2$+@FIo^{Y&TRvis z=72Ub*Vbf+n?Ju>IReI=F7_5r`WiGY`mJ$uP$DbZPSFV?Az-&#sB>(ih^l9V&Z*xaCgrSWrk^HP2;SH7c3;}n!S z8{(5O3Z)O*IC`$Ffyl2kf6h%#V z8Iv$Mk~ib#7*9@l$uX{!qyG^giO!T;BC2j1x_QX{56DcyX)%c{ zlE5vD`58;B`W%vEm*GgjE+2a(`R zEI=adbJ9kV`&@4N6PLO<*6*e@GN`__0SUh}XNv=@b>-XIq&e0?uD|jGX3%2kL&tA{ zl*wTZQh!QxV{*WaKl6;Gzt4sNK)JSv^<|#A#jxcxUuiBfed@|NPaEF<0W=i38}gK- Q#sB~S07*qoM6N<$f|{$+QUCw| literal 0 HcmV?d00001 diff --git a/src/Objects/Traps/Bear/Animation/0000.png.import b/src/Objects/Traps/Bear/Animation/0000.png.import new file mode 100644 index 0000000..7988502 --- /dev/null +++ b/src/Objects/Traps/Bear/Animation/0000.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/0000.png-e5c5f98ec59a6fd31ffa2e1d60f9b1d1.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Traps/Bear/Animation/0000.png" +dest_files=[ "res://.import/0000.png-e5c5f98ec59a6fd31ffa2e1d60f9b1d1.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/Objects/Traps/Bear/Animation/0001.png b/src/Objects/Traps/Bear/Animation/0001.png new file mode 100644 index 0000000000000000000000000000000000000000..38f2340d5e2c3fd6e82ef9f2419c8e9d753dfe12 GIT binary patch literal 1923 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 KMNUMnLSTYtGLtX> literal 0 HcmV?d00001 diff --git a/src/Objects/Traps/Bear/Animation/0002.png.import b/src/Objects/Traps/Bear/Animation/0002.png.import new file mode 100644 index 0000000..9f72235 --- /dev/null +++ b/src/Objects/Traps/Bear/Animation/0002.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/0002.png-cdc077fcfefba2748cca713f9bd2d611.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Traps/Bear/Animation/0002.png" +dest_files=[ "res://.import/0002.png-cdc077fcfefba2748cca713f9bd2d611.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/Objects/Traps/Bear/Animation/0003.png b/src/Objects/Traps/Bear/Animation/0003.png new file mode 100644 index 0000000000000000000000000000000000000000..09aad9dd3ce72fb8d4b19b1246be57fec233389d GIT binary patch literal 1899 zcmV-x2bB1UP)Px#3v@+TbW>wx zZe;*dV`Xk-LR-XCd*i~E3R=zRpd5S0munv=KI18q)M&_rU z+*KzznY;Sr)ix_2L17zRt-LkvTwI&+)rVs}`B-=idpqLfM1Qp=m&y==<7NDmRS(=8 zV_S1|9^v%!DZzxax$2B>`KP$X&9NSFeKGAR>?{F%E{AhPor9+@UkiT=S4UjFb}J__ z{llxHMHD5Op}6r1wi~#ZF|0gsV(Bw~>aYj+4|E9_OkZ-wk|(YebFMuV2WPA}^Q}uR z*clU7rA;Al$Denf>JgmUJ@eEt&nBE>Gj{js->JLiGPj;sHNA>B|LgC6rWnE$B8F7} zpW)oxt+*JLL5?+S+!~#6{3Oh&FBc0)M93!aKm75lQ0>sg#p`N(*Ot`wVRw7`t~xgd zyK0JEUcRY~=u16*bAi2l^O-^$osUH()oav3yWy(6uL5vOT}9Q<#dKPx?BvuVV9RDvJh|8{7SvxPz% zRjj)$HWt$6tG{xY%c&Zy-`yKKVcZ=jhhgLR%kiMC)>7;Sr0eTnYH|1u#NjdU-O-x2 z*7#$`iQ8yCfl3^=)VjQQGq*?mJf1TT5OF>XT|?$?UcCCDV)b~McXRW0pF4nb3!bXChOQOVw_Q7)y=dnD0_C+0B z=8p7c%;@5pB;r+-dmZ``>A)7GPz2oyVgJ9rAYHzWlxt zXgtF8I4PFb{)|?ShYQ0_)F#FT*o2wPt6sAlSC2$1Dy8aI(~#ME5neaM7+Nu7#JyNR zZHr9}ay3hge{hbL-*+)}@w-+;$!S-9fzAJJRRiPElDO4uNKF^63qE>dj0NmIH)``K zy6RGcm~mcrje0cLI~JXzIN6|Iv+yAMXz^XG0v2vFfO2VJt`Ra2#qQ`%|h`d&bSiXF#oUiXh~0j^(KMew~~~ zt(~BF{7&$^+cXPfILD&pPKwDZOG;b2TGk|2A3M)9lLQfE(6~F!+}(z&Pn?G4?`#5X zh}X_Gyhr;Tj3?;k7Pm3-43|bUY<_KrtDq4^E+7{|Q-{R9lg=x5gxtM}wFVv5BIKgL z++FM0%Y(cYn3boPtgs5m@yOI}c??El*>K_G2_m;*#B3IyvDWI*es@7fO=m*-CYq$B zd3kbZ%*AL~*L`~f)uKnm{)RHEKV4_)Gf!W<>GZQqz?~Gt+SH0=yxs&fHjWp0o4V~t z@EVhsnx|rN!1Zh0P6X1@00WM~&I=efbC~*8Vb}dOJH=H~{p=-k5}!?5R1p$Vz@$?` z#8boE4b0n7e;G1&*l2XJNb{$XUWuAq#iQ%vDoNxK_Oe@3!Tsa9`juc2v z;`o`jl_Mu@`f3wfee@o@JqRk03C0WDxSeVa4Rf*jN`PA@x%QBJd^q#>bc*0BprA2% z&c)@gMVwnuo_UF<_R3GJPx#3v@+TbW>wx zZe;*dV`Xk-A+zHcVTNtWQ3% zBTr(ocC@MMZI(cQ#11-YabsNHygK8f4aR=r(clngJHn)+J!*@aWhMgS$M`8NA9-tx zZTa%tf|>450T!grRcCz5K7}=Ijs1vgn^T|4on-=>kD@QBKKZo8tHE#O{O0Cy$JI{H>4J zIk&!ZO`yje%9Z~pE(f9p8F{DZ6xYr=`x3MEEP)A5Td*++s5K_Jv8}i{G&0r@vkn^> z{dtz7+j>IQ)jZ3n?`m(-SB4LxPkhI>T4nA$P zeh2Gvaq-82`X(#r`QzW)26z9LpZCOB#IM!YIYyqPp`>VvEP(9#-RmYV_J-YDznvN} zeEkF4gX~saX6G_q$PU)IHV>Ec$4{D;J~!{)>>jqie&M(f@=9A77zbt`b{BB~?K#-9 zFbMfk9B|3ai)@Y>q!-LU^E$?%$uoHJwv$8uJKwjgdSiy&)z!;yY9!?7vB6wkJUv{! zc)5Rm`K+~=QyM(Eb@7MYgGWyq&V2Xo{TYO&6~%?N0xp# zHuQ+Ox4S)!YnXgbT1ed}7k}2bT@48aVce4)iZHe%C*zkQ{6U$-ok(GZva^loAUoVEpD#WQnmIsl5PdN7zz8~J5>>@q_ zfggNv+UQZlqqn37u9N96wE|q%m)rF}uPZVwJZqW(A{wiG!Fx+_%nAz=ODt{ueAV%u zw-#-W)DGNjrhVbwYT>r9hkAKWC&>h-!(@41GQ3C6v5S)oA0EXzeYL&V9Aeb-v#+<$ zQd1dkt>gs142^?8;Oh9jAqQFr3+ES!w-h+VlR-P6np0?8U5{#5>`Xyjo{%#*{IV?u zY^-KDhiweRRME7498e6qRomN=vhB`YHp%~9`zUp%p`V`mj>tX9k0=mWv7M(Z1T>h(}mW??lxaO z6SeDG!}q$!gsXF4$@HhULr1x^EW0}R##_(#tufz3l(@*8Wu|JC`DN%+gHo}TBMwo2 z3(mXaV28XFrUO}TsjBlK%K;rqUi2yHp-qk?#B<;=Kj!d#jdAz52p%kZoZ`GKZyzx= z$NI%$a0KBiIXE$W?8KQfw$;a)}5^j zM@;$a$q7s?3EDU|qOZ=FHX6x3_|zzwOD=KWK;CNSz#F(8g0^o09`>;)yet z@m`t|y^(EzM700000NkvXXu0mjftNe>9 literal 0 HcmV?d00001 diff --git a/src/Objects/Traps/Bear/Animation/0004.png.import b/src/Objects/Traps/Bear/Animation/0004.png.import new file mode 100644 index 0000000..fd89c53 --- /dev/null +++ b/src/Objects/Traps/Bear/Animation/0004.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/0004.png-6f18a07b50945b6208cec35706e344d2.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Traps/Bear/Animation/0004.png" +dest_files=[ "res://.import/0004.png-6f18a07b50945b6208cec35706e344d2.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/Objects/Traps/Bear/Animation/0005.png b/src/Objects/Traps/Bear/Animation/0005.png new file mode 100644 index 0000000000000000000000000000000000000000..0fa075b020ee36069a4d5ba96f9485a37d37fe3c GIT binary patch literal 1879 zcmV-d2dMaoP)#pM400008 zbVXQnMsi_oWdJZWPY4aB0000DbVXQnLt$-Ya$x{NVQpn{VQByF=>Px#3v@+TbW>wx zZe;*dV`Xk-$v#HI~yRcF0<^vo@0Rc{P^FG(aKF^feGoDI{KBkPk- z?97vxtetJ@YMUhxAhCnaTHGAhH?Pk4Y=g0%cr-Y~*^V&jXwTZ>V(CO+yo{gH@{za3 z*vgmZ4$O8w1z3deF|&b8v7B~Hm5$7JI@3*m!dDJKKZo8tHH1G@|YK|Ue#ny z`|#>$5lJaVBsX5c_Cem9F|;`I#L~w9R&fUKU+@wzn6}`ICC7WGC9)QWn0Z7@*+OOr4&YFyA_uTq;2twaQGUrbXmwa=Lx$KiXxdC98 z$Af}Z(O;iFxA5VWI5#Ip1DiNZ>a5p>7Yud8WvG+R;-wGwG4@xa(%F}e|-4h>}Y5j*%0jxe|X`D_Jey5T?KB4Gi}QpOS?lBOR`A4!wRMd8 zF4duD0sQd{bm7S4g0-t(#~8DQ4dCJA&0=i)p7w#Dh%0XoeiBG}P5`}X(oP*O04Y7G@*bw^rQ(i)1Xn`kpSJ;YFpEvAf) z=L~Z^c@2WWW;5*9^j3_nThJB;(4+Fh_xDGmxdFaJ=B}<@weoEk21PihWyHr^mvemN zYrR$6zHLMI#q&JKJHEy%(5ZO<@VWB6Z4nK;m_sb~_4V<9-a+x`mB2yHS1z;G7tI1( zXFB5+XN)_LO&uPLc=Oh|%VN>mV)U)$Wl%X5);ESHBL(a@(>U%@z3w{F^W?W&5@_2T zA0EY9tFHz_jacmBZzI2N&k{bGR~`2Js;mxK46)~u-8v%g=Zgo=8V3QV)H}O7`S2x| zSU02i8U+ijzR?S8_8b2#M$kl(CxOH)3Qj)U1#2A!ojaYJ95-|Dm#}6`2XFJtn?IxQJ@js;!~UCiNSFyVMs2&-P8(3VO$?b5MGk=$vkbgTk-0`HqJ*p&qwS z(w_KYr=|rgdHXKPy;?Xi-#9sN+O=*PASP1VfOG1g#I}m<6QA7Jt?-SPrjNJ3GbE>X zs`%m=!FLnT)inbQtgIF@UP}3e&Opq**ef|~Rm%!K8l){k z!a1L3cgBnz?Z?l%!0_&9_Q~Ol&st3Db-Y_71Pj7fa&Th$*x*)of-}16V@+~o%sK2I z9LGbifDj>bj#vnqo#Xg9l=&H-e(QNSAtq8oBF6YkoblNfD~CQfC39I%e(95- zC`pW=XZcoK*4bE{IqW%}{>nbjRYHJoi~=qt2@;ce?5tbWh)JEc+{9)ZzVXj300=>K z78tMO;^WkCa9E4hmV&%}66*|!#|ATgPbUes1QHq(r*B^T+(h4o;;hSja?kk8wc6tc z(P1n~@G6#hZ3jtib9d>iOWPXz*U&nd)TZ%Wd2nCDtn$>!i$=iBA|~VG9|0C-(qKUgG@BgCKje9fQ Re^&qi002ovPDHLkV1k-2ibDVZ literal 0 HcmV?d00001 diff --git a/src/Objects/Traps/Bear/Animation/0005.png.import b/src/Objects/Traps/Bear/Animation/0005.png.import new file mode 100644 index 0000000..2e9a7fa --- /dev/null +++ b/src/Objects/Traps/Bear/Animation/0005.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/0005.png-aa9a9d018316b2589b474bd0cf29c5e8.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Traps/Bear/Animation/0005.png" +dest_files=[ "res://.import/0005.png-aa9a9d018316b2589b474bd0cf29c5e8.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/Objects/Traps/Bear/Animation/0006.png b/src/Objects/Traps/Bear/Animation/0006.png new file mode 100644 index 0000000000000000000000000000000000000000..519ff3fd8c8e8a3542437d3ca78ceb6ca23d907a GIT binary patch literal 1883 zcmV-h2c-CkP)Px#3v@+TbW>wx zZe;*dV`Xk-51d|`np|X%=HsPEV1c>+vCYMk6pFJ?D36Z@1=-BB-SCxhO=P$Y9v4P z#I8DtN$%>y>upv*fWkJqT5)UKxp{5IS09Y^#ACrR?Ck)P6aCdnZj~Vf#*gu1Rz31^ zjP1?UxdXGEPXQ9r=BhKk=O4owmt#HR`sTF9a%Y*q=i_j$sB`k^i`RnR%d2BvympV1 zIsKcfqaunzW+-mFgY}2JIb&FH=82`x{A-6jfWM_nz+n1T64~|$KvD}Yo7Vu zN9@Sm+_@&O>kj40zZRDb!C|brTXc)-C(pXXe9FnmnEuG^9}hv;yF}LfvF1{5<(SJlsgoN3 zcK3KdI7Z6&TAUmOEMhZhldrFZhtDT9GEcmlP5=d*3)T`}bIi@#++B0|srB*if998i zdHcw@`t!Gk0WF0g*Z{)JAKd?@IWI1L9hZ4A%B%gUA2PS!58{lOD~OutU0%LA{q*_Y z20i@l+ZM1kJhAwWc{~gN68P7r&)q0F)QHpk#l>?wk+vK@ z*m@V|&)atq#*@EsX{baT0GZqHhj(vHojiK-^U3=^-fSxv(dJfh8^k(jjQPu#zn{*9 zj&wIvWxM%7XpO4G+rmb3G+|@d6f}PR z+q3Jdm#-(T7dMjG$cq=_m<{d6Pkup=ooqDN@0aHL9|0D^0;O>qp#v&XX znQTzs=D~UN`U%&Z4ahv0gWuBx5aPpQx~d&Ewi1aG6F(c^xx#8wT4%g!Ed!+oJoV(8 z!&3JKbHlaXtt(IRqbE;w+s>w{pu<=%uEL6TLAtJ?Pvg83V&LM7X=mW^IUXyL-g@%$!=D zW3gC$G0v0Q_1Kj9JpQTf?A-Fv$2`*z6;V{nHFPWoCUfXGxIOlUwZy{bj@Bx^W7u=NCyFea`E-3C^!^R()r<*<*vdEssYC9Gn`SD}orzSyioOl|zkC12dF zyrdK{hF!Yw@$B_bw$vl4Y_BdkFrmr@!)km*?d*C?q zvluz!;#QmZy+UfNI$*_PGmpQ{!F1D-5Y|_~dFJpL1Y-Hu%#UYox^yOK<+zd&0&Nr*ARlYKqs2#b!)jyW*Uq`#+*L VbgwNxli~mX002ovPDHLkV1iwPubBV< literal 0 HcmV?d00001 diff --git a/src/Objects/Traps/Bear/Animation/0006.png.import b/src/Objects/Traps/Bear/Animation/0006.png.import new file mode 100644 index 0000000..3c4dc0f --- /dev/null +++ b/src/Objects/Traps/Bear/Animation/0006.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/0006.png-4bb618801f5290b92956a677da7ea797.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Traps/Bear/Animation/0006.png" +dest_files=[ "res://.import/0006.png-4bb618801f5290b92956a677da7ea797.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/Objects/Traps/Bear/Animation/0007.png b/src/Objects/Traps/Bear/Animation/0007.png new file mode 100644 index 0000000000000000000000000000000000000000..0a54d49733cd903605e837516e90ca613fe726e3 GIT binary patch literal 1877 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 iTzq22`kCh%-Twg!F=GuEcKvby0000pBf literal 0 HcmV?d00001 diff --git a/src/Objects/Traps/Bear/Animation/0011.png.import b/src/Objects/Traps/Bear/Animation/0011.png.import new file mode 100644 index 0000000..bb13061 --- /dev/null +++ b/src/Objects/Traps/Bear/Animation/0011.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/0011.png-4f301b1d8e7f1cae78ad0014938d0257.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Traps/Bear/Animation/0011.png" +dest_files=[ "res://.import/0011.png-4f301b1d8e7f1cae78ad0014938d0257.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/Objects/Traps/Bear/Animation/0012.png b/src/Objects/Traps/Bear/Animation/0012.png new file mode 100644 index 0000000000000000000000000000000000000000..53b6c395d9ed7e10c7bcdacac9fdd24f2e7c50bf GIT binary patch literal 1864 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.&bR{0dv_{hyQhlBG@gSonTemLh7VO7lH zdj$T6I&pchBam!di#pxTRrB@Dn}KV#=?&b=s~7zd9R4lSGZnC3h3ZL>P|(Lx5PqKi z*I7a@X>4zr*kA8BPi^zr^(SoyKv^gq}V_d^v<3@z&(=l*MB8 z#TaLA&qFEm>ifXfbAcUqnm`gyS@3G0HLQL3@VLC!##(2IO@4i>ciBGe5KSV#c*K(O z4CW;vH5V8~Sof5%a%i(pAIsJ3KfuZt3m*rqF7xAmi;*zN<3^tg<%#v3=Ys7-kc!hH zz-1qCVy*Wt5~pX- zYxr|MC1v%?9&bT)dqU2Zy~_ zeJQ9rC$VZsJU*BfZ4*F!35>Ib&!T2s{5-_if#U4T`o_Aw&-koW@9`Ir;!JFVM8>DA zLX!IwHuKq+z8L4XXoD>3uQnjzeK9KzdYvoZYLjA|g&luS+n7a%We%Ub1JWjk7_9lU z_}1irn|$J|Wxnr*1)6fLh|MKV-(kdZir0$8W=>x_Px#3v@+TbW>wx zZe;*dV`Xk-hf zdR0=Z+mro%zu!3yheNqy%=ME4mfZB=&GO7Qjvck-%<{#sPf|o70^=~rhO=P$YGi)u z$sKi)lewc$UTw1i5)`)4(aIZf=f<^(k3Jmh$;ZND*xLywC;Fo`xm3Ck953-Ls~&N4 z#Ab7KKEqkgrvwwy=Bg8)`CD9ZbF2rhZ%n%tJIeq*m&3WD&WWclUkiU0SI4+~?JOr_ z`o~X4Llh;Mp}2T~?MB>~7*?Kfu=JTfcGv^_2f6@)=}S&5dB(NIoNKpm;*2rQe0It0 zvEw(_0CwD=T=`>p*$_F5QFlQXTtD-y3uf+F5|f<1WHANE6;oVnh8x2&#vCy7@EPO0 z_i}Qq7iPQLC_wrvVQ{hmLKZXkOYxL5Co%mVn;#EJ*w2ZK@vY`kZ_F{4by6oc0Pgg7 zkg%1M_*k461uSASX)|A6OCCN~YGfR|noa@*oJ-c;efsAx#+VzoxzEkb$LfD#G;7^kH{* z|L@`Br~C5N#xj=N?iA8)BoVOT_ix`AY8fs5A5{Zt+}2w)`ug?n`>U(xZMF;=ySe?f z$t?*i9xj7A=v4CyR2nXVjHlmzy|{fGmH~ItLd4#`dsF0WuGcA(g5p=dJU`sN z{%z^D7c-XisN-T-5ly#-=x){iZfLug|rDx2}w+dmek1KEI0!e_X^WwzYKw8m_h zIWgw9x69%<9`$5<&GXBjOj~P^)2`!+_&U(A7>yIXX`*7QN;njLb^Ve9T*qgTTyzU7 z)!mNclTG6@QoFQXy*!-%urw^+my~(Ehz8!j`?ExtdzNoop#nEaRKs|K{&7S<8=5df@qK}Pv3Y!lm-<)cmzF7eOoz>lxvgD~} zeiEpA%13o(8FhF)2GpqV-IH; zD1}vIU*F3V%6K&v3!tHVS>;x#SIRav%EHUh(GCnNEP@`c`%@zuOkJc_?iN&$x3^Qd^0t zkjeEsqZR)C;@R#)`vj7-#@h>(Ulc_~@%m=>V7`2*mAPz6)!<0u(f~5pi_g+2S@8-wDDl`lRVhn2F{tRIw<6 zs5?@NZXMV(vGos2uUNJE1`uDH@0!f>DZz2H1s%_F?gWH7W3{y*+B1E8W3doE-8BNO zN%NS_7H+de&!ZWBt=neZ{C7iSofB}k z@Es{6hRsHpZ}EsZEUXpRj(E;ze*H8x8A}s3LIRf~1(K6-{LGu>$Vr>N+F+xP-ulli z2n;}NCWu#Xa@%SS4Rf*jN)WeBa_u4c_;A+W(Z0c-rW_aeMFW36jw37_#&laHIV>vSoa;>W#ym81$eEmm&i5aw5 zV))<|NShjRu;OX)jj4e)c=C)TUQ07TQjVFhSn~8O##~MLTDjQ7^tB_;IlBJ?!UCM+ T97fwl00000NkvXXu0mjfc=>_M literal 0 HcmV?d00001 diff --git a/src/Objects/Traps/Bear/Animation/0015.png.import b/src/Objects/Traps/Bear/Animation/0015.png.import new file mode 100644 index 0000000..0e9f628 --- /dev/null +++ b/src/Objects/Traps/Bear/Animation/0015.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/0015.png-c08651a5c171112f6caac805eebd363e.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Traps/Bear/Animation/0015.png" +dest_files=[ "res://.import/0015.png-c08651a5c171112f6caac805eebd363e.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/Objects/Traps/Bear/Animation/0016.png b/src/Objects/Traps/Bear/Animation/0016.png new file mode 100644 index 0000000000000000000000000000000000000000..9c02e38f7e950c90086ec0ced956cb1483eba577 GIT binary patch literal 1882 zcmV-g2c`IlP)Px#3v@+TbW>wx zZe;*dV`Xk-5_2F1gJ{BIs-i|mq(O<2}r80!zc!}R;)gx|> z*lw=Q9h`nXC76&lSDpCIzl|$yj`hIxjcIR-on-)@%i&y6=fu;OuZ6#ht7BZgc9)Ye z{llxHA&QdBP+Yvg_Ceg37*?Kfu=JUK>97a*pXdSzrY||M9-&v%dcq>UefXe!h^yZG?O_3}jXr$v)#=5>i<`&a zJ)1l6?(M7gqh-{?v>s?=Vv1C#H#lRBZxb~5=*jnUBi_AvRhf^z>lllW8mK#cS116OCa^^s4wBC9C5ycIk?_CK)}XRKP}tpjXq zQa${{=kaVl@!Dw|-Vk|9cu;bOS8?a&)-h^1eL-!t?H^b@1B1+w$p!19;Sf8_+g)#O zlRW$L_w;xst0;+&pFT5h9*GGIhhlKOfU9{<3Jc)xtUgCZH{{u9=1St2@+#~c#QLya z9S@-K(A?PUyEnhr8Ry9*jyS_ad@=3_J5jOLB(~zM>GUtJf7xnPUg%eH`*{EMb>D;m zSnnQACUKUTdsN_O-1*QsG~V76@Ls-bXFCS_e0kNI6;{tC51|Zhz|=NM36A z4a!36LGChb){pM>&;5s$In`|n!RK5SVI<9XlVs3{SOM(=zN6mHW5V&Um{y+6GB3R* zLDSj1i_Us;?-N91-l`##!c7(RD&X!Dclb`Ffqa0hQEwUq+VB{S$y_{K8?IRUaM4Fi zyIUmS*HNhsds^;76>Hh%C`^;}8=~deG&+3ARMVqk<AHeY<0)osYG*^Je!4+4X0o0v{?gbEs+1?0INi|i306!E+FROW!na^ zRxxz&86KnTr2^x_O~B5kca5fiN%O2XG1ARL+s2NLLhotYC^^|IS`6#fWb@HCYy>19 zH8RfB4$HIaqSRmm=OWPP`%{>2pVZ9W#8)e))i~ZQ0+J;$ci5DebK+pTJHcyjSI3;x zNX$O6*1(RN-VqUEtTC``#yI#oJ{NetvyQx7Ec4}M zZp8@zGRcv|#J`lc=2&B=dsm|w(?459n2SN;a+t(CIT^>#yj_l*wCSr2w)*JJ|87BG z0BSQqyn>sL+nPheT&%tl#I2KDdq_S$ocVh?Mer3+P)we4Px#3v@+TbW>wx zZe;*dV`Xk-*HWEIP9Wl`@>1y7HHdv;oN>#63 zJ*hQ4&B@8h$%?!PziKack^HT;H7by4-Bd2`0F;>;6EpZQIP8o+7xnFu~~yHYNeJ#w0hk6*q@vtTn`} z!)L7Xq2=gUcVzoiD1r1RU~y6aDVtgQy?oMHlQDgAwbM9WCT;2*`{Co~!=ohS$}r+c#1_h zb^o-D;Yto`h;h}sM*`@<93YI4UA=ipwEgXOAKU!h)$1;nw}AGqgjaUIyS#jHViUL+ zh@-k8+XYK$CDq2kKRo&SO1~?-s!`y?jFJ?A$1lTRIqaZS3|ThY>AMHhRr|P;Srm-A?o7t zFRLcq;ZCsceew5BA2hxW`Q`4Nx!WwT2x_G*&l#>><9NJ(`+5@F>_}M4T1!0r^YbTr zkBae0)||u}C-&^w(`NR&`@cPeym07ve(~qjdK*Fs*wK3p>>RQLOTLN#pQG|EWIXx6 zIoD?G#YMjpZ9n%Ml|DMZTIbWlLhl`CSHb467Shm*SP2cF^EH=3$uW0W!~7r^|Iy?h zd|f8zidzDO#dq)g(A>kFkbJc?es=zp!?@dj;h2CJ%O^I3t;fZ<{iq_w+^2_gHqrXy z|8CK(6$ymodjl-zx4u9;*t+7;+I+BSZ@|Dg1AvHKkl z0{hJ~T~CM3RYg2<7~UqyZAi{oeR&Yp#1O;w{pqnla!+YsJr>?^?XkZgY{f(*|m{2Nq&4pPh;Y?*&{O z{`2Skd5X`FQ#^KS@F2+Fg{wEOc2|GDY)jtN7cgt)nKp=k_v77yvq%-Y#nV9nU~HZ~ z9LyR0EFR`F9-^(~i(L5D>s=FD_2Ak+j-EK<^GqXxB#)JM} zDXLbzqMMe{i#v#55b*bZqg&Im3YKY#Hh_TmRVpHOfxjYdKpL?CY7n3ZYPrBx4sR?% zTZ#6;ofBW!SSDtb5~bVK(!0C0a1iY)rePvDH*thD(ImTyXeu}nW6-vQY4)JwVayOcyBCnUGMh$zvA#)MM*JgQc zSAI7U?A9pJCIm}DTwl8tt24ap6k=d|OhKAc`HiFk;T} z!FhZt*Mt(|%eB?Vn&ik>iY~r`)??9IKnfUZj#!E@PkbHU%YjevD?aB9cQ_#?(k7X4 z1v%FeUwyIJN8DB}>&0bl(Uov{}Syallof=knpCMEe>k! zE8o^4#n=lw-={6iq|GvhPuvD+lS2&Fcv^gOa==YIapp2!XTtPx#3v@+TbW>wx zZe;*dV`Xk-qx%y!$%yG!65ry6V=g zAJa3F^YiobGuPeSU8~yIt0x9qVp9jV7iYYFoH3pKw=ABrMT7ZUcWN!s}9C|;*sE3)^>!+jruALZk9;|#!LGtDIb1g zwC(NX`47xEp8^a>nO&!SPd|m#ZjAY`tLsyq@?E3@oy+B3Qup{%7q0}r=a)ync;#M9 z`qU4vjBp8j`-d)T0Dq4cgT~Yar!8^%mHON(PucOaRzLf_ zOYHO=-nlxE>x8oNhvKpzVpuEhunxO=#+etJu@?zUaO#4!NkFVN$+hj-^&we*eExFx z>CeCVEP_WjZXgc)?#a_duRs76At^TW&tLxDl3>eajB@p1_rgbB_V8X^zPRH7L#LUH zwLazU7m)yqLx-pXDnVsBySjRDcXRW4dx%LaAv#N`U5W4V^7&R2_7Csh7H`Fr4^nIv z{_Qtk*LI`|&cj)OkYzwaXTXPdZ_d8|;aU4XzW=QyKQ+5bbbfa8>h<|v@g`)FiSGg` z0sf9Fj;B99JG=e;O-t=G#DL_1qbHpPrrP8+F*_d}&WV&$LW)(VC>!|s=9e*=!fJ<; z7Kv%*i5T4Fs{My|Z=0{7^}}$$ud6L<(Gp?5tqHqcz52DM$sS)%4~FW_g2gIF>(n%o zb4T#?be(d^T-<4EB7Yu5aE%t=RG!Xbz^$=RFgDYHOCoG}R%rzGF1F;F82sKM$9SHq z-M;5z;@&;#I4b&6b=bLPf!{rO-2Nob!m-=1lf#D2!*t<9u+v^qMbludmlziLUBZKMk<88gxYM>C|%cCNJ$?#uaz2wz! zcJ~kO?BUsLvoMZ}G04oR9ozOy)!W3v)8CT@NFjYoAgg}_8f?IxB$o5rZ;6`BXsBwV z0sd7JuFIdEZ*K)`HlM{Gb=8>r%^m$c&FiR(cT_VQwj`eBwuwiwx_DF?;NQhz7!ANh zi*>P#_xn(Ww(|hO#nEU({Sec53?@WpYRE$L7f>Ic(_tQgjftOrT|!z#ZUt4*-9+Ii zJ>LMy<*SlhUD%BC?PD5iDLH|&LjaJF#ASzms0ZecN#U=Wsg%4S19+bgc=Nt!OC)v!{SQ4n2p%L)E^rF)b!mjR}MCfkWTRlLe<HdO_fb8_eYXEvv3P07fb%Er5*Dp{aewe3MFRGhaIB)d!h?u!g&-%OMl~8JNk^j=r}Nzn6#@FkHF7ibtk@#j^*~MH>W}x&-diXHtCn#h*%Q zLUG24SIWKOwa+?^AH-?wjwLogBKN1H1+4L>@Y*vj_4LD8*YPV4fC1?L=YI%hkApb! z=#vMTOHA6fzo)ZM0ZFJ0iJePbnH*x0LqC#BpIq?hQ`eXF&a4Aqu03LHiBretl2g1= iKQe9V$`$7x-hTm&fUgx+XV3Tm0000Px#3v@+TbW>wx zZe;*dV`Xk-|`g-!q*F(3iPYU3Jc> znx4Kr;pF7x7t+EP%@iKmwRgb(J zV|#OTK7(2IrvM3Q^R6?#=ih}jF2{Pr_04JT%AIBcpUdG~QRn2-7q11smsiL9-~W6% z7W;xGdX7^Z3m~Q-F^hmPXWpD#MKiB2AA9rh->xqI=HsUW&2zne{pw&`J?*5m9C;*X zf^&-fb@Q= zL9IM2F|g>q@71iut`FNy9IMWg1(Uk=r`>%ca-%1Qq1BqK3}U?w>#C4oZUG*t4QnlQ ze*SX&0LfikzO7WT>v912v+AHpty#l)Hw|e+{_oItTr3iuyS#ck8WQUhp$LQK=ejH%aUVAgJbv~9T%Q!)0P~sCh1VY$d54{36Xa}U zZn$&NH2Haq)5F976_$eh_~sKsY+7!D6^7Hcieb6&xnX$Vd7-c^9zT7tY{!bjhr_U! zTp;|hryI3?K{`}<$^4?9KL4?A86nSS;0hAQ9}QMr=G}PNc`OYfSyk42HwkcHSD#v#%$94}&-XHKpbY{ch0b1-FgNAq_w3uis2GcN&QF1AJviRNuUo>=Et zeRAUQ`EfI6_zvJ^bI46w{&D}{r|5Dj+^ZiWr^q7p=)v|BAquD8bS!WkmkV|!5L+8# z>&*J_dm93;hVv(SDwwAz%FBXy}qwQ|HJj~n=_X@qP#fRkNjJ7ssozkQ#au_ z`?-!r@4kZF?5g37WgZ@LbIci=zo!WRl6YBft&Y)wBV1P@Io&)MZh+5ef6HzQ&tsK9 z^9!5jIGDLv>)kr?HtJ5QiKUN4C|}7y`sP^ZDntWakgjX!)4Fd}o8$(GWBG`0r@quO z&YV$pyN_o8^L(r{(RWaBnpH?1Z??u%fQA_C({|P`-nd8J((b(9#iJ#5=w={&Nm$}E z-aXLsddK8kJ$%P_5=AgCr}saNtT%+=T!t$~ootwxP4}J_WMU>0zxw4}wOSvZ43BbM zyFOvate09gWg%?u<7F2#taIxk?A0`;1|(u*PctDY(BfF)5_9kA&p#@;=AEY{$B)z} zG4!hzBjNGZ&2I%Du@-=7;SAmy3Aw@ruWA%aCflay*?HyW$$We%Xswt#M9E zG?8{RQ^NdU%xzY(nxQds=$W_Sz8My>E_2q!I{L<|7Fu59M)Lwmj^N~rQ4BlYfa~KF zLt`|QmepO}lq~at^v5@NRnuV|=INWSUboGf&_ZH>%R#(X)-Eb7R=o4UU02v`G2%tI zgnLN8 z?<1{Rw&70Hmwe`_nQ{0GZBOc}{}aGOq6zJuNXC*&!xZStA0v&ge|TBkTCFkj zyLEaHR3Hh)JGt|9S955{#p)|T-a3i3hs5K9>82$C)K|cH=I|Nh%!{9kIJclUd6{2S zm+u*$x#Dhrh$LrW2?{yC%i2h4--XS1^3oS${chSxCiVAjK*6uY>}kNYu6lbnDaKmZ z-X1s-@f{X(t|e}Pw5cHmYdkH!IW^EHo;Y(E@4aEdrnGy)#>Awx7%?@)YiIn|;^cw< YA4qoIE6E6@WdHyG07*qoM6N<$f|@M9cK`qY literal 0 HcmV?d00001 diff --git a/src/Objects/Traps/Bear/Animation/0019.png.import b/src/Objects/Traps/Bear/Animation/0019.png.import new file mode 100644 index 0000000..d4e5e9e --- /dev/null +++ b/src/Objects/Traps/Bear/Animation/0019.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/0019.png-a958411d1d57f3e0fca32b00dc7c434d.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Traps/Bear/Animation/0019.png" +dest_files=[ "res://.import/0019.png-a958411d1d57f3e0fca32b00dc7c434d.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/Objects/Traps/Bear/Animation/0020.png b/src/Objects/Traps/Bear/Animation/0020.png new file mode 100644 index 0000000000000000000000000000000000000000..633c7673e66ff80c5654d49d06f17e5cd66d4b8a GIT binary patch literal 1921 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 V<_o)aRK9H$=pXz3W9U8p@Hb-$Pc8re literal 0 HcmV?d00001 diff --git a/src/Objects/Traps/Bear/bear.jpg.import b/src/Objects/Traps/Bear/bear.jpg.import new file mode 100644 index 0000000..b52f808 --- /dev/null +++ b/src/Objects/Traps/Bear/bear.jpg.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/bear.jpg-b29183748b9b212469789f175925d154.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Traps/Bear/bear.jpg" +dest_files=[ "res://.import/bear.jpg-b29183748b9b212469789f175925d154.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/Objects/Traps/bear.gd b/src/Objects/Traps/bear.gd index bb72cf4..252fe0c 100644 --- a/src/Objects/Traps/bear.gd +++ b/src/Objects/Traps/bear.gd @@ -1,4 +1,15 @@ extends Node2D func _on_Hurtbox_area_entered(area): - queue_free() + $AnimatedSprite.play("clap") + + +func _ready(): + $AnimatedSprite.play("place") + + +func _on_AnimatedSprite_animation_finished(): + if $AnimatedSprite.get_animation() == "place": + $AnimatedSprite.play("still") + elif $AnimatedSprite.get_animation() == "clap": + queue_free() diff --git a/src/Objects/Traps/bear.tscn b/src/Objects/Traps/bear.tscn index 006bbd1..a48454f 100644 --- a/src/Objects/Traps/bear.tscn +++ b/src/Objects/Traps/bear.tscn @@ -1,33 +1,82 @@ -[gd_scene load_steps=8 format=2] +[gd_scene load_steps=39 format=2] [ext_resource path="res://Objects/Traps/Bear.gd" type="Script" id=1] [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=2] [ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=3] -[ext_resource path="res://testSprites/falle.png" type="Texture" id=4] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=5] +[ext_resource path="res://Objects/Traps/Bear/Animation/0018.png" type="Texture" id=6] +[ext_resource path="res://Objects/Traps/Bear/Animation/0001.png" type="Texture" id=7] +[ext_resource path="res://Objects/Traps/Bear/Animation/0025.png" type="Texture" id=8] +[ext_resource path="res://Objects/Traps/Bear/Animation/0005.png" type="Texture" id=9] +[ext_resource path="res://Objects/Traps/Bear/Animation/0014.png" type="Texture" id=10] +[ext_resource path="res://Objects/Traps/Bear/Animation/0003.png" type="Texture" id=11] +[ext_resource path="res://Objects/Traps/Bear/Animation/0000.png" type="Texture" id=12] +[ext_resource path="res://Objects/Traps/Bear/Animation/0010.png" type="Texture" id=13] +[ext_resource path="res://Objects/Traps/Bear/Animation/0004.png" type="Texture" id=14] +[ext_resource path="res://Objects/Traps/Bear/Animation/0008.png" type="Texture" id=15] +[ext_resource path="res://Objects/Traps/Bear/Animation/0023.png" type="Texture" id=16] +[ext_resource path="res://Objects/Traps/Bear/Animation/0026.png" type="Texture" id=17] +[ext_resource path="res://Objects/Traps/Bear/Animation/0027.png" type="Texture" id=18] +[ext_resource path="res://Objects/Traps/Bear/Animation/0020.png" type="Texture" id=19] +[ext_resource path="res://Objects/Traps/Bear/Animation/0028.png" type="Texture" id=20] +[ext_resource path="res://Objects/Traps/Bear/Animation/0024.png" type="Texture" id=21] +[ext_resource path="res://Objects/Traps/Bear/Animation/0011.png" type="Texture" id=22] +[ext_resource path="res://Objects/Traps/Bear/Animation/0015.png" type="Texture" id=23] +[ext_resource path="res://Objects/Traps/Bear/Animation/0007.png" type="Texture" id=24] +[ext_resource path="res://Objects/Traps/Bear/Animation/0019.png" type="Texture" id=25] +[ext_resource path="res://Objects/Traps/Bear/Animation/0021.png" type="Texture" id=26] +[ext_resource path="res://Objects/Traps/Bear/Animation/0016.png" type="Texture" id=27] +[ext_resource path="res://Objects/Traps/Bear/Animation/0002.png" type="Texture" id=28] +[ext_resource path="res://Objects/Traps/Bear/Animation/0006.png" type="Texture" id=29] +[ext_resource path="res://Objects/Traps/Bear/Animation/0013.png" type="Texture" id=30] +[ext_resource path="res://Objects/Traps/Bear/Animation/0017.png" type="Texture" id=31] +[ext_resource path="res://Objects/Traps/Bear/Animation/0022.png" type="Texture" id=32] +[ext_resource path="res://Objects/Traps/Bear/Animation/0029.png" type="Texture" id=33] +[ext_resource path="res://Objects/Traps/Bear/Animation/0030.png" type="Texture" id=34] +[ext_resource path="res://Objects/Traps/Bear/Animation/0009.png" type="Texture" id=35] +[ext_resource path="res://Objects/Traps/Bear/Animation/0012.png" type="Texture" id=36] -[sub_resource type="CapsuleShape2D" id=1] -height = 9.0 +[sub_resource type="SpriteFrames" id=1] +animations = [ { +"frames": [ ExtResource( 12 ), ExtResource( 7 ), ExtResource( 28 ), ExtResource( 11 ), ExtResource( 14 ), ExtResource( 9 ), ExtResource( 29 ), ExtResource( 24 ), ExtResource( 15 ), ExtResource( 35 ), ExtResource( 13 ), ExtResource( 22 ) ], +"loop": false, +"name": "place", +"speed": 60.0 +}, { +"frames": [ ExtResource( 30 ), ExtResource( 10 ), ExtResource( 23 ), ExtResource( 27 ), ExtResource( 31 ), ExtResource( 6 ), ExtResource( 25 ), ExtResource( 19 ), ExtResource( 26 ), ExtResource( 32 ), ExtResource( 16 ), ExtResource( 21 ), ExtResource( 8 ), ExtResource( 17 ), ExtResource( 18 ), ExtResource( 20 ), ExtResource( 33 ), ExtResource( 34 ) ], +"loop": false, +"name": "clap", +"speed": 60.0 +}, { +"frames": [ ExtResource( 36 ) ], +"loop": false, +"name": "still", +"speed": 60.0 +} ] [sub_resource type="CapsuleShape2D" id=2] height = 9.0 +[sub_resource type="CapsuleShape2D" id=3] +height = 9.0 + [node name="Bear_trap" type="Node2D"] script = ExtResource( 1 ) [node name="Kind" parent="." instance=ExtResource( 3 )] kind = 10 -[node name="Sprite" type="Sprite" parent="."] +[node name="AnimatedSprite" type="AnimatedSprite" parent="."] position = Vector2( -7.62939e-06, 0 ) -texture = ExtResource( 4 ) +frames = SubResource( 1 ) +animation = "used" [node name="Hitbox" parent="." instance=ExtResource( 2 )] collision_layer = 16 [node name="CollisionShape2D" parent="Hitbox" index="0"] rotation = 1.5708 -shape = SubResource( 1 ) +shape = SubResource( 2 ) [node name="Hurtbox" parent="." instance=ExtResource( 5 )] collision_layer = 32 @@ -35,7 +84,8 @@ collision_mask = 0 [node name="CollisionShape2D" parent="Hurtbox" index="0"] rotation = 1.5708 -shape = SubResource( 2 ) +shape = SubResource( 3 ) +[connection signal="animation_finished" from="AnimatedSprite" to="." method="_on_AnimatedSprite_animation_finished"] [connection signal="area_entered" from="Hurtbox" to="." method="_on_Hurtbox_area_entered"] [editable path="Hitbox"] diff --git a/src/Overlap/Mechanics/Mechanics.gd b/src/Overlap/Mechanics/Mechanics.gd new file mode 100644 index 0000000..61510e1 --- /dev/null +++ b/src/Overlap/Mechanics/Mechanics.gd @@ -0,0 +1 @@ +extends Node diff --git a/src/Overlap/Mechanics/Mechanics.tscn b/src/Overlap/Mechanics/Mechanics.tscn new file mode 100644 index 0000000..76eead0 --- /dev/null +++ b/src/Overlap/Mechanics/Mechanics.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://Overlap/Mechanics/Mechanics.gd" type="Script" id=1] + +[node name="Core" type="Node"] +script = ExtResource( 1 ) diff --git a/src/World.tscn b/src/World.tscn index b63f362..ca3fed2 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -24,7 +24,7 @@ position = Vector2( 16, 16 ) tile_set = ExtResource( 3 ) cell_size = Vector2( 32, 32 ) format = 1 -tile_data = PoolIntArray( -131059, 47, 0, -131058, 47, 2, -1, 47, 4, -65536, 47, 196609, -65535, 47, 196609, -65534, 47, 196609, -65533, 47, 196609, -65532, 47, 196609, -65531, 47, 196609, -65530, 47, 8, -65529, 47, 196609, -65528, 47, 8, -65527, 47, 196609, -65526, 47, 196609, -65525, 47, 196609, -65524, 47, 196609, -65523, 47, 196614, -65522, 47, 196618, -65521, 47, 196610, 65535, 47, 65539, 6, 47, 131075, 8, 47, 131075, 14, 47, 65539, 131071, 47, 65539, 65541, 47, 196611, 65550, 47, 65539, 196607, 47, 65539, 131075, 47, 196608, 131076, 47, 196610, 131086, 47, 65539, 262143, 47, 65539, 196614, 47, 196611, 196622, 47, 65539, 327679, 47, 65539, 262147, 47, 196611, 262149, 47, 196611, 262158, 47, 65539, 393215, 47, 65539, 327684, 47, 196611, 327688, 47, 196611, 327694, 47, 65539, 458751, 47, 65539, 393221, 47, 3, 393225, 47, 3, 393230, 47, 65539, 524287, 47, 196612, 458752, 47, 196609, 458753, 47, 196609, 458754, 47, 196609, 458755, 47, 196609, 458756, 47, 196609, 458757, 47, 196616, 458758, 47, 196609, 458759, 47, 196609, 458760, 47, 196609, 458761, 47, 196616, 458762, 47, 196609, 458763, 47, 196609, 458764, 47, 196609, 458765, 47, 196609, 458766, 47, 196615 ) +tile_data = PoolIntArray( -1, 47, 4, -65536, 47, 196609, -65535, 47, 196609, -65534, 47, 196609, -65533, 47, 196609, -65532, 47, 196609, -65531, 47, 196609, -65530, 47, 8, -65529, 47, 196609, -65528, 47, 8, -65527, 47, 196609, -65526, 47, 196609, -65525, 47, 196609, -65524, 47, 196609, -65523, 47, 196609, -65522, 47, 7, 65535, 47, 65539, 6, 47, 131075, 8, 47, 131075, 14, 47, 65539, 131071, 47, 65539, 65541, 47, 196611, 65550, 47, 65539, 196607, 47, 65539, 131075, 47, 196608, 131076, 47, 196610, 131086, 47, 65539, 262143, 47, 65539, 196614, 47, 196611, 196622, 47, 65539, 327679, 47, 65539, 262147, 47, 196611, 262149, 47, 196611, 262158, 47, 65539, 393215, 47, 65539, 327684, 47, 196611, 327688, 47, 196611, 327694, 47, 65539, 458751, 47, 65539, 393221, 47, 3, 393225, 47, 3, 393230, 47, 65539, 524287, 47, 196612, 458752, 47, 196609, 458753, 47, 196609, 458754, 47, 196609, 458755, 47, 196609, 458756, 47, 196609, 458757, 47, 196616, 458758, 47, 196609, 458759, 47, 196609, 458760, 47, 196609, 458761, 47, 196616, 458762, 47, 196609, 458763, 47, 196609, 458764, 47, 196609, 458765, 47, 196609, 458766, 47, 196615 ) __meta__ = { "_edit_group_": true, "_edit_lock_": true @@ -39,6 +39,7 @@ position = Vector2( 264, -24 ) [node name="Player" parent="YSort" instance=ExtResource( 1 )] position = Vector2( 240, 72 ) scale = Vector2( 2, 2 ) +debug = true ROLL_SPEED = 140 FRICTION = 200 @@ -54,6 +55,8 @@ debug = true visible = false [node name="DragNDropUI" parent="CanvasLayer" instance=ExtResource( 5 )] +margin_top = -0.735092 +margin_bottom = -0.735107 ObjectParent = NodePath("../..") [editable path="YSort/Bonfire"] From 1544bf6febbe93bfa3c4e9249930f800a888faa8 Mon Sep 17 00:00:00 2001 From: Conrad Date: Mon, 20 Apr 2020 01:06:26 +0200 Subject: [PATCH 10/21] You can now play cards! - Fixed invalid scripts - Added card placement validation Co-Authored-By: deranonymos --- src/Menus/DragNDrop/DragNDropUI.gd | 3 ++ src/Menus/DragNDrop/DragNDropUI.tscn | 9 ++---- src/Menus/DragNDrop/DragSink.gd | 30 +++++++++++++++++++ src/Menus/DragNDrop/DragSink.tscn | 23 ++------------- src/Menus/DragNDrop/DragSource.gd | 36 +++++++++++++++++++++++ src/Menus/DragNDrop/DragSource.tscn | 43 ++-------------------------- src/Objects/Traps/bear.tscn | 9 +++--- src/World.tscn | 9 +++--- 8 files changed, 83 insertions(+), 79 deletions(-) create mode 100644 src/Menus/DragNDrop/DragNDropUI.gd create mode 100644 src/Menus/DragNDrop/DragSink.gd create mode 100644 src/Menus/DragNDrop/DragSource.gd diff --git a/src/Menus/DragNDrop/DragNDropUI.gd b/src/Menus/DragNDrop/DragNDropUI.gd new file mode 100644 index 0000000..197b207 --- /dev/null +++ b/src/Menus/DragNDrop/DragNDropUI.gd @@ -0,0 +1,3 @@ +extends Control + +export var ObjectParent:NodePath diff --git a/src/Menus/DragNDrop/DragNDropUI.tscn b/src/Menus/DragNDrop/DragNDropUI.tscn index 238794c..52f2bde 100644 --- a/src/Menus/DragNDrop/DragNDropUI.tscn +++ b/src/Menus/DragNDrop/DragNDropUI.tscn @@ -7,19 +7,14 @@ [ext_resource path="res://Objects/Traps/Bear/bear.jpg" type="Texture" id=5] [ext_resource path="res://Objects/Traps/bear.tscn" type="PackedScene" id=6] [ext_resource path="res://Objects/Traps/Bear/Animation/0012.png" type="Texture" id=7] - -[sub_resource type="GDScript" id=1] -script/source = "extends Control - -export var ObjectParent:NodePath -" +[ext_resource path="res://Menus/DragNDrop/DragNDropUI.gd" type="Script" id=8] [node name="DragNDropUI" type="Control"] anchor_right = 1.0 anchor_bottom = 1.0 margin_left = -0.37735 margin_right = -0.37735 -script = SubResource( 1 ) +script = ExtResource( 8 ) __meta__ = { "_edit_use_anchors_": false } diff --git a/src/Menus/DragNDrop/DragSink.gd b/src/Menus/DragNDrop/DragSink.gd new file mode 100644 index 0000000..9642816 --- /dev/null +++ b/src/Menus/DragNDrop/DragSink.gd @@ -0,0 +1,30 @@ +extends Container + +const Grid = preload("res://Maps/Grid.gd") +onready var grid = get_tree().current_scene.get_node("Grid") +onready var ysort = get_tree().current_scene.get_node("YSort") + +#DropZone +#stuff can be dropped here +func can_drop_data(_pos, data): + return typeof(data) == typeof(PackedScene) + + +func get_nearest_grid_pos(position): + return Vector2(round(position.x / 32.0), round(position.y / 32.0)) + + +func get_nearest_global_pos(position): + return Vector2(round(position.x / 32.0) * 32, round(position.y / 32.0) * 32) + + +#what is to be done when data is dropped +func drop_data(_pos, data:PackedScene): + var new_pos = get_nearest_grid_pos(_pos) + + if grid.object_grid[new_pos.x - 1][new_pos.y - 1].back() == Grid.Kind.FIELD: + var child = data.instance() + child.position = get_nearest_global_pos(_pos) + + ysort.add_child(child) + grid._update_grid() diff --git a/src/Menus/DragNDrop/DragSink.tscn b/src/Menus/DragNDrop/DragSink.tscn index 382436d..0e0a1df 100644 --- a/src/Menus/DragNDrop/DragSink.tscn +++ b/src/Menus/DragNDrop/DragSink.tscn @@ -1,31 +1,12 @@ [gd_scene load_steps=2 format=2] -[sub_resource type="GDScript" id=1] -script/source = "extends Container -#DropZone - - -#stuff can be dropped here -func can_drop_data(_pos, data): - return typeof(data) == typeof(PackedScene) - - -func get_nearest_grid_pos(position): - return Vector2(floor(position.x / 32.0) * 32, floor(position.y / 32.0) * 32) - - -#what is to be done when data is dropped -func drop_data(_pos, data:PackedScene): - var child = data.instance() - child.position = get_nearest_grid_pos(_pos) - get_node(get_parent().ObjectParent).add_child(child) -" +[ext_resource path="res://Menus/DragNDrop/DragSink.gd" type="Script" id=1] [node name="DragSink" type="Container"] anchor_right = 1.0 anchor_bottom = 0.789 margin_bottom = -0.0200043 -script = SubResource( 1 ) +script = ExtResource( 1 ) __meta__ = { "_edit_use_anchors_": false } diff --git a/src/Menus/DragNDrop/DragSource.gd b/src/Menus/DragNDrop/DragSource.gd new file mode 100644 index 0000000..82615e1 --- /dev/null +++ b/src/Menus/DragNDrop/DragSource.gd @@ -0,0 +1,36 @@ +extends TextureRect +#CardDeck +export var Item:PackedScene +export var PreviewIcon:Texture +export var DeleteOnGrab:bool = false + +#if a drag is initiated here +func get_drag_data(_pos): + var ctrl = Control.new() + var TR = TextureRect.new() + TR.texture = get_resized_texture(PreviewIcon,self.rect_size[0],self.rect_size[1]) + TR.rect_size= self.rect_size + TR.set_position(_pos*-1,false) + ctrl.add_child(TR) + set_drag_preview(ctrl) + + if DeleteOnGrab : + self.queue_free() + return Item + +#stuff can be dropped here +#eg you picked the wrong thing up, let go and it returns to nothingness +func can_drop_data(_pos, data): + return typeof(data) == typeof(PackedScene) + +#do nothing if stuff is dropped here +func drop_data(_pos, _data): + pass + +func get_resized_texture(t: Texture, width: int = 0, height: int = 0): + var image = t.get_data() + if width > 0 && height > 0: + image.resize(width, height) + var itex = ImageTexture.new() + itex.create_from_image(image,0) + return itex diff --git a/src/Menus/DragNDrop/DragSource.tscn b/src/Menus/DragNDrop/DragSource.tscn index 9eb12f0..6070ea3 100644 --- a/src/Menus/DragNDrop/DragSource.tscn +++ b/src/Menus/DragNDrop/DragSource.tscn @@ -2,45 +2,7 @@ [ext_resource path="res://icon.png" type="Texture" id=1] [ext_resource path="res://Objects/Card/card.png" type="Texture" id=2] - -[sub_resource type="GDScript" id=1] -script/source = "extends TextureRect -#CardDeck -export var Item:PackedScene -export var PreviewIcon:Texture -export var DeleteOnGrab:bool = false - -#if a drag is initiated here -func get_drag_data(_pos): - var ctrl = Control.new() - var TR = TextureRect.new() - TR.texture = get_resized_texture(PreviewIcon,self.rect_size[0],self.rect_size[1]) - TR.rect_size= self.rect_size - TR.set_position(_pos*-1,false) - ctrl.add_child(TR) - set_drag_preview(ctrl) - - if DeleteOnGrab : - self.queue_free() - return Item - -#stuff can be dropped here -#eg you picked the wrong thing up, let go and it returns to nothingness -func can_drop_data(_pos, data): - return typeof(data) == typeof(PackedScene) - -#do nothing if stuff is dropped here -func drop_data(_pos, _data): - pass - -func get_resized_texture(t: Texture, width: int = 0, height: int = 0): - var image = t.get_data() - if width > 0 && height > 0: - image.resize(width, height) - var itex = ImageTexture.new() - itex.create_from_image(image,0) - return itex -" +[ext_resource path="res://Menus/DragNDrop/DragSource.gd" type="Script" id=3] [node name="DragSource" type="TextureRect"] margin_left = 10.7364 @@ -49,11 +11,10 @@ margin_right = 42.7364 margin_bottom = 259.792 texture = ExtResource( 1 ) expand = true -script = SubResource( 1 ) +script = ExtResource( 3 ) __meta__ = { "_edit_use_anchors_": false } -PreviewIcon = ExtResource( 1 ) [node name="Sprite" type="Sprite" parent="."] position = Vector2( 16.0791, 16.0117 ) diff --git a/src/Objects/Traps/bear.tscn b/src/Objects/Traps/bear.tscn index a48454f..1191996 100644 --- a/src/Objects/Traps/bear.tscn +++ b/src/Objects/Traps/bear.tscn @@ -36,7 +36,7 @@ [ext_resource path="res://Objects/Traps/Bear/Animation/0009.png" type="Texture" id=35] [ext_resource path="res://Objects/Traps/Bear/Animation/0012.png" type="Texture" id=36] -[sub_resource type="SpriteFrames" id=1] +[sub_resource type="SpriteFrames" id=4] animations = [ { "frames": [ ExtResource( 12 ), ExtResource( 7 ), ExtResource( 28 ), ExtResource( 11 ), ExtResource( 14 ), ExtResource( 9 ), ExtResource( 29 ), ExtResource( 24 ), ExtResource( 15 ), ExtResource( 35 ), ExtResource( 13 ), ExtResource( 22 ) ], "loop": false, @@ -54,7 +54,7 @@ animations = [ { "speed": 60.0 } ] -[sub_resource type="CapsuleShape2D" id=2] +[sub_resource type="CapsuleShape2D" id=5] height = 9.0 [sub_resource type="CapsuleShape2D" id=3] @@ -68,15 +68,14 @@ kind = 10 [node name="AnimatedSprite" type="AnimatedSprite" parent="."] position = Vector2( -7.62939e-06, 0 ) -frames = SubResource( 1 ) -animation = "used" +frames = SubResource( 4 ) [node name="Hitbox" parent="." instance=ExtResource( 2 )] collision_layer = 16 [node name="CollisionShape2D" parent="Hitbox" index="0"] rotation = 1.5708 -shape = SubResource( 2 ) +shape = SubResource( 5 ) [node name="Hurtbox" parent="." instance=ExtResource( 5 )] collision_layer = 32 diff --git a/src/World.tscn b/src/World.tscn index ca3fed2..ab36bb7 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -31,20 +31,19 @@ __meta__ = { } [node name="YSort" type="YSort" parent="."] -position = Vector2( 152, 120 ) [node name="Bonfire" parent="YSort" instance=ExtResource( 10 )] -position = Vector2( 264, -24 ) +position = Vector2( 406.635, 139.865 ) [node name="Player" parent="YSort" instance=ExtResource( 1 )] -position = Vector2( 240, 72 ) +position = Vector2( 342.83, 130.381 ) scale = Vector2( 2, 2 ) debug = true ROLL_SPEED = 140 FRICTION = 200 [node name="Boss_template" parent="YSort" instance=ExtResource( 17 )] -position = Vector2( -67.0889, 2.27742 ) +position = Vector2( 71.566, 94.4929 ) debug = true [node name="Grid" parent="." instance=ExtResource( 18 )] @@ -57,6 +56,6 @@ visible = false [node name="DragNDropUI" parent="CanvasLayer" instance=ExtResource( 5 )] margin_top = -0.735092 margin_bottom = -0.735107 -ObjectParent = NodePath("../..") +ObjectParent = NodePath("../../YSort") [editable path="YSort/Bonfire"] From 0daf9090eb660d18530a988a3e18e833af0e5a1b Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Mon, 20 Apr 2020 01:12:15 +0200 Subject: [PATCH 11/21] Added appropriate groups and checked for hitbox-likeness --- src/Overlap/HurtHit_Box/Hitbox.tscn | 4 +++- src/Overlap/HurtHit_Box/Hurtbox.tscn | 4 +++- src/Player/Player.gd | 22 ++++++++++++---------- src/Player/Player.tscn | 7 +++++-- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/Overlap/HurtHit_Box/Hitbox.tscn b/src/Overlap/HurtHit_Box/Hitbox.tscn index 6ca90b2..3642e2c 100644 --- a/src/Overlap/HurtHit_Box/Hitbox.tscn +++ b/src/Overlap/HurtHit_Box/Hitbox.tscn @@ -2,7 +2,9 @@ [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.gd" type="Script" id=1] -[node name="Hitbox" type="Area2D"] +[node name="Hitbox" type="Area2D" groups=[ +"hitbox", +]] script = ExtResource( 1 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="."] diff --git a/src/Overlap/HurtHit_Box/Hurtbox.tscn b/src/Overlap/HurtHit_Box/Hurtbox.tscn index fde26df..143d196 100644 --- a/src/Overlap/HurtHit_Box/Hurtbox.tscn +++ b/src/Overlap/HurtHit_Box/Hurtbox.tscn @@ -2,7 +2,9 @@ [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.gd" type="Script" id=1] -[node name="Hurtbox" type="Area2D"] +[node name="Hurtbox" type="Area2D" groups=[ +"hurtbox", +]] script = ExtResource( 1 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="."] diff --git a/src/Player/Player.gd b/src/Player/Player.gd index 33c4e3a..176cbd7 100644 --- a/src/Player/Player.gd +++ b/src/Player/Player.gd @@ -174,19 +174,21 @@ func roll_finished(): func _on_Hurtbox_area_entered(area): - player_stats.health -= area.damage - - if area.damage > 0: - damage_per_second += area.damage - else: - heal_per_second += abs(area.damage) + if area.is_in_group("hitbox"): + player_stats.health -= area.damage + + if area.damage > 0: + damage_per_second += area.damage + else: + heal_per_second += abs(area.damage) func _on_Hurtbox_area_exited(area): - if area.damage > 0: - damage_per_second -= area.damage - else: - heal_per_second -= abs(area.damage) + if area.is_in_group("hitbox"): + if area.damage > 0: + damage_per_second -= area.damage + else: + heal_per_second -= abs(area.damage) func _on_Stats_no_health(): diff --git a/src/Player/Player.tscn b/src/Player/Player.tscn index 5247dda..a1415d2 100644 --- a/src/Player/Player.tscn +++ b/src/Player/Player.tscn @@ -623,7 +623,10 @@ height = 6.99104 size = 12 font_data = ExtResource( 6 ) -[node name="Player" type="KinematicBody2D"] +[node name="Player" type="KinematicBody2D" groups=[ +"hero", +]] +collision_mask = 10 script = ExtResource( 1 ) FRICTION = 270 @@ -637,7 +640,7 @@ scale = Vector2( 0.5, 0.5 ) texture = ExtResource( 2 ) offset = Vector2( 0, -18 ) hframes = 60 -frame = 9 +frame = 12 [node name="Body" type="CollisionShape2D" parent="."] position = Vector2( 0.0107212, 0.0456073 ) From ee0d75fb37ed9e626fdab0aaeaa722e2a2e275a1 Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Mon, 20 Apr 2020 01:13:59 +0200 Subject: [PATCH 12/21] Added states to boss state machine --- src/Boss/SlimeBoss/SlimeBoss.gd | 3 -- src/Boss/SlimeBoss/SlimeBoss.tscn | 52 ++++++++++++++----- src/Boss/SlimeBoss/SlimeBossStateMachine.gd | 37 +++++++++++-- src/Boss/SlimeBoss/States/Motion/Dead.gd | 4 ++ src/Boss/SlimeBoss/States/Motion/Idle.gd | 16 ++---- .../SlimeBoss/States/Motion/JumpTeleport.gd | 4 ++ src/Boss/SlimeBoss/States/Motion/Pursue.gd | 4 ++ src/Boss/SlimeBoss/States/Motion/SplitUp.gd | 18 ++----- src/Boss/SlimeBoss/States/Motion/Stagger.gd | 18 ++----- src/Boss/SlimeBoss/States/Motion/Wander.gd | 18 ++----- 10 files changed, 97 insertions(+), 77 deletions(-) delete mode 100644 src/Boss/SlimeBoss/SlimeBoss.gd create mode 100644 src/Boss/SlimeBoss/States/Motion/Dead.gd create mode 100644 src/Boss/SlimeBoss/States/Motion/JumpTeleport.gd create mode 100644 src/Boss/SlimeBoss/States/Motion/Pursue.gd diff --git a/src/Boss/SlimeBoss/SlimeBoss.gd b/src/Boss/SlimeBoss/SlimeBoss.gd deleted file mode 100644 index 83bf13e..0000000 --- a/src/Boss/SlimeBoss/SlimeBoss.gd +++ /dev/null @@ -1,3 +0,0 @@ -extends KinematicBody2D -class_name SlimeBoss - diff --git a/src/Boss/SlimeBoss/SlimeBoss.tscn b/src/Boss/SlimeBoss/SlimeBoss.tscn index 9549180..88eea10 100644 --- a/src/Boss/SlimeBoss/SlimeBoss.tscn +++ b/src/Boss/SlimeBoss/SlimeBoss.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=18 format=2] +[gd_scene load_steps=23 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=2] [ext_resource path="res://Overlap/Stats/Stats.tscn" type="PackedScene" id=3] +[ext_resource path="res://Boss/SlimeBoss/SlimeBossStateMachine.gd" type="Script" id=4] [ext_resource path="res://Boss/SlimeBoss/Animations/move_down.png" type="Texture" id=5] [ext_resource path="res://Boss/SlimeBoss/Animations/move_right.png" type="Texture" id=6] [ext_resource path="res://Boss/SlimeBoss/States/Motion/Idle.gd" type="Script" id=7] @@ -10,6 +11,9 @@ [ext_resource path="res://Boss/SlimeBoss/States/Motion/Wander.gd" type="Script" id=9] [ext_resource path="res://Boss/SlimeBoss/States/Motion/SplitUp.gd" type="Script" id=10] [ext_resource path="res://Boss/SlimeBoss/Animations/move_up.png" type="Texture" id=11] +[ext_resource path="res://Boss/SlimeBoss/States/Motion/JumpTeleport.gd" type="Script" id=12] +[ext_resource path="res://Boss/SlimeBoss/States/Motion/Dead.gd" type="Script" id=13] +[ext_resource path="res://Boss/SlimeBoss/States/Motion/Pursue.gd" type="Script" id=14] [sub_resource type="CapsuleShape2D" id=1] radius = 18.0 @@ -19,12 +23,14 @@ height = 18.0 radius = 18.0 height = 18.0 -[sub_resource type="CapsuleShape2D" id=3] +[sub_resource type="CircleShape2D" id=3] +radius = 150.0 + +[sub_resource type="CapsuleShape2D" id=4] radius = 8.0 height = 15.0 -[sub_resource type="Animation" id=4] -resource_name = "MoveDown" +[sub_resource type="Animation" id=5] length = 2.66666 loop = true step = 0.0111111 @@ -102,7 +108,6 @@ tracks/5/keys = { } [sub_resource type="Animation" id=6] -resource_name = "MoveLeft" length = 1.28333 loop = true step = 0.0166667 @@ -179,8 +184,7 @@ tracks/5/keys = { "values": [ true ] } -[sub_resource type="Animation" id=5] -resource_name = "MoveRight" +[sub_resource type="Animation" id=7] length = 1.28333 loop = true step = 0.0166667 @@ -257,8 +261,7 @@ tracks/5/keys = { "values": [ false ] } -[sub_resource type="Animation" id=7] -resource_name = "MoveUp" +[sub_resource type="Animation" id=8] length = 1.28333 loop = true step = 0.0166667 @@ -324,9 +327,14 @@ tracks/4/keys = { } [node name="SlimeBoss" type="KinematicBody2D"] +collision_layer = 4 +collision_mask = 0 +script = ExtResource( 4 ) __meta__ = { "_edit_group_": true } +STATES_COLLECTION = NodePath("States") +START_STATE = NodePath("States/Idle") [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0, -20 ) @@ -337,7 +345,7 @@ frame = 227 [node name="Hitbox" parent="." instance=ExtResource( 2 )] visible = false -collision_layer = 0 +collision_layer = 4 [node name="CollisionShape2D" parent="Hitbox" index="0"] position = Vector2( 0, -15 ) @@ -351,10 +359,16 @@ collision_mask = 0 position = Vector2( 0, -15 ) shape = SubResource( 2 ) +[node name="HeroCloseZone" type="Area2D" parent="."] +collision_layer = 0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="HeroCloseZone"] +shape = SubResource( 3 ) + [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2( -1.52588e-05, 0 ) rotation = 1.5708 -shape = SubResource( 3 ) +shape = SubResource( 4 ) [node name="DebugLabel" type="Label" parent="."] margin_left = -42.2456 @@ -382,12 +396,22 @@ script = ExtResource( 10 ) [node name="Stagger" type="Node" parent="States"] script = ExtResource( 8 ) +[node name="JumpTeleport" type="Node" parent="States"] +script = ExtResource( 12 ) + +[node name="Dead" type="Node" parent="States"] +script = ExtResource( 13 ) + +[node name="Pursue" type="Node" parent="States"] +script = ExtResource( 14 ) + [node name="AnimationPlayer" type="AnimationPlayer" parent="."] autoplay = "MoveRight" -anims/MoveDown = SubResource( 4 ) +anims/MoveDown = SubResource( 5 ) anims/MoveLeft = SubResource( 6 ) -anims/MoveRight = SubResource( 5 ) -anims/MoveUp = SubResource( 7 ) +anims/MoveRight = SubResource( 7 ) +anims/MoveUp = SubResource( 8 ) +[connection signal="area_entered" from="HeroCloseZone" to="States/Idle" method="hero_close"] [editable path="Hitbox"] diff --git a/src/Boss/SlimeBoss/SlimeBossStateMachine.gd b/src/Boss/SlimeBoss/SlimeBossStateMachine.gd index d480320..c783ada 100644 --- a/src/Boss/SlimeBoss/SlimeBossStateMachine.gd +++ b/src/Boss/SlimeBoss/SlimeBossStateMachine.gd @@ -1,9 +1,38 @@ extends "res://Overlap/StateMachine/StateMachine.gd" +onready var hero_close_zone = $HeroCloseZone +onready var debug_label = $DebugLabel + func _ready(): states_map = { - "idle": $Idle, - "wander": $Wander, - "split_up": $SplitUp, - "stagger": $Stagger + "idle": $States/Idle, + "wander": $States/Wander, + "pursue": $States/Pursue, + "split_up": $States/SplitUp, + "stagger": $States/Stagger, + "jump_teleport": $States/JumpTeleport, + "dead": $States/Dead } + + debug_label.text = "IDLE" + +func change_state(state_name): + current_state.exit() + debug_label.text = state_name.to_upper() + + if state_name == "previous": + states_stack.pop_front() + elif state_name in ["stagger"]: + states_stack.push_front(states_map[state_name]) + elif state_name == "dead": + queue_free() + return + else: + var new_state = states_map[state_name] + states_stack[0] = new_state + + current_state = states_stack[0] + if state_name != "previous": + # We don"t want to reinitialize the state if we"re going back to the previous state + current_state.enter() + emit_signal("state_changed", states_stack) diff --git a/src/Boss/SlimeBoss/States/Motion/Dead.gd b/src/Boss/SlimeBoss/States/Motion/Dead.gd new file mode 100644 index 0000000..576756c --- /dev/null +++ b/src/Boss/SlimeBoss/States/Motion/Dead.gd @@ -0,0 +1,4 @@ +extends "res://Overlap/StateMachine/State.gd" + +func enter(): + print("dead state") diff --git a/src/Boss/SlimeBoss/States/Motion/Idle.gd b/src/Boss/SlimeBoss/States/Motion/Idle.gd index 992b176..b5ee51b 100644 --- a/src/Boss/SlimeBoss/States/Motion/Idle.gd +++ b/src/Boss/SlimeBoss/States/Motion/Idle.gd @@ -1,13 +1,7 @@ -extends "res://Overlap/StateMachine/MotionState.gd" +extends "res://Overlap/StateMachine/State.gd" func enter(): - owner.get_node("AnimationPlayer").play("MoveDown") # TODO: Replace animation - -func handle_input(event): - return .handle_input(event) - -func update(delta): - var input_direction = get_input_direction() - if input_direction: - # emit_signal("finished", "move") - pass + owner.get_node("AnimationPlayer").play("MoveDown") + +func hero_close(area): + emit_signal("finished", "pursue") diff --git a/src/Boss/SlimeBoss/States/Motion/JumpTeleport.gd b/src/Boss/SlimeBoss/States/Motion/JumpTeleport.gd new file mode 100644 index 0000000..5ccf4ea --- /dev/null +++ b/src/Boss/SlimeBoss/States/Motion/JumpTeleport.gd @@ -0,0 +1,4 @@ +extends "res://Overlap/StateMachine/State.gd" + +func enter(): + print("jump teleport state") diff --git a/src/Boss/SlimeBoss/States/Motion/Pursue.gd b/src/Boss/SlimeBoss/States/Motion/Pursue.gd new file mode 100644 index 0000000..9d604c4 --- /dev/null +++ b/src/Boss/SlimeBoss/States/Motion/Pursue.gd @@ -0,0 +1,4 @@ +extends "res://Overlap/StateMachine/State.gd" + +func enter(): + print("pursue state") diff --git a/src/Boss/SlimeBoss/States/Motion/SplitUp.gd b/src/Boss/SlimeBoss/States/Motion/SplitUp.gd index 1eccaec..845fd18 100644 --- a/src/Boss/SlimeBoss/States/Motion/SplitUp.gd +++ b/src/Boss/SlimeBoss/States/Motion/SplitUp.gd @@ -1,16 +1,4 @@ -extends Node +extends "res://Overlap/StateMachine/State.gd" - -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" - - -# Called when the node enters the scene tree for the first time. -func _ready(): - pass # Replace with function body. - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass +func enter(): + print("split up state") diff --git a/src/Boss/SlimeBoss/States/Motion/Stagger.gd b/src/Boss/SlimeBoss/States/Motion/Stagger.gd index 1eccaec..05d8da0 100644 --- a/src/Boss/SlimeBoss/States/Motion/Stagger.gd +++ b/src/Boss/SlimeBoss/States/Motion/Stagger.gd @@ -1,16 +1,4 @@ -extends Node +extends "res://Overlap/StateMachine/State.gd" - -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" - - -# Called when the node enters the scene tree for the first time. -func _ready(): - pass # Replace with function body. - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass +func enter(): + print("stagger state") diff --git a/src/Boss/SlimeBoss/States/Motion/Wander.gd b/src/Boss/SlimeBoss/States/Motion/Wander.gd index 1eccaec..c0c535b 100644 --- a/src/Boss/SlimeBoss/States/Motion/Wander.gd +++ b/src/Boss/SlimeBoss/States/Motion/Wander.gd @@ -1,16 +1,4 @@ -extends Node +extends "res://Overlap/StateMachine/State.gd" - -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" - - -# Called when the node enters the scene tree for the first time. -func _ready(): - pass # Replace with function body. - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass +func enter(): + print("wander state") From 21dfd6c6639a9fc301527d44fe79e6f6d8f7d28c Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Mon, 20 Apr 2020 01:14:40 +0200 Subject: [PATCH 13/21] Superpowered state machine with new ability to select state collection. Yeah! --- src/Overlap/StateMachine/StateMachine.gd | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Overlap/StateMachine/StateMachine.gd b/src/Overlap/StateMachine/StateMachine.gd index bdf4c42..8c5f9a7 100644 --- a/src/Overlap/StateMachine/StateMachine.gd +++ b/src/Overlap/StateMachine/StateMachine.gd @@ -2,6 +2,7 @@ extends Node signal state_changed(current_state) +export(NodePath) var STATES_COLLECTION = "." export(NodePath) var START_STATE var states_map = {} @@ -9,10 +10,11 @@ var states_stack = [] var current_state = null var _active = false setget set_active + func _ready(): - for child in get_children(): + for child in get_node(STATES_COLLECTION).get_children(): child.connect("finished", self, "change_state") - initialize(START_STATE) + initialize(START_STATE) func initialize(start_state): set_active(true) From 28b08132e7fd0e018ad4e603a0ef0aa19eaf664c Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Mon, 20 Apr 2020 01:15:31 +0200 Subject: [PATCH 14/21] Tilemap is not a player! Fucking hell, check your collision layers mates --- src/World.tscn | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/World.tscn b/src/World.tscn index 5dfef3b..fc24bd9 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -21,13 +21,15 @@ region_enabled = true region_rect = Rect2( 0, 0, 1280, 720 ) [node name="Background" parent="." instance=ExtResource( 7 )] -frame = 29 +frame = 48 [node name="FloorTileMap" type="TileMap" parent="."] modulate = Color( 1, 1, 1, 0.454902 ) position = Vector2( 16, 16 ) tile_set = ExtResource( 3 ) cell_size = Vector2( 32, 32 ) +collision_layer = 2 +collision_mask = 0 format = 1 tile_data = PoolIntArray( -1, -1610612689, 4, -65536, -1610612689, 196609, -65535, -1610612689, 196609, -65534, -1610612689, 196609, -65533, -1610612689, 196609, -65532, -1610612689, 196609, -65531, -1610612689, 196609, -65530, -1610612689, 196609, -65529, -1610612689, 196609, -65528, -1610612689, 196609, -65527, -1610612689, 196609, -65526, -1610612689, 196609, -65525, -1610612689, 196609, -65524, -1610612689, 196609, -65523, -1610612689, 196610, -65522, -1610612720, 131073, 65535, -1610612689, 65539, 14, -1610612689, 3, 131071, 47, 65539, 65550, -1610612689, 65539, 196607, 47, 65539, 131086, -1610612689, 65539, 262143, 47, 65539, 196622, -1610612689, 65539, 327679, 47, 65539, 262158, -1610612689, 65539, 393215, 47, 65539, 327694, -1610612689, 65539, 458751, -1610612689, 131076, 393216, -1610612689, 1, 393217, -1610612689, 1, 393218, -1610612689, 1, 393219, -1610612689, 1, 393220, -1610612689, 1, 393221, -1610612689, 1, 393222, -1610612689, 1, 393223, -1610612689, 1, 393224, -1610612689, 1, 393225, -1610612689, 1, 393226, -1610612689, 1, 393227, -1610612689, 1, 393228, -1610612689, 1, 393229, -1610612689, 1, 393230, -1610612689, 131079, 524287, -1610612689, 131072, 458752, 47, 131073, 458753, 47, 131073, 458754, 47, 131073, 458755, 47, 131073, 458756, 47, 131073, 458757, 47, 131073, 458758, 47, 131073, 458759, 47, 131073, 458760, 47, 131073, 458761, 47, 131073, 458762, 47, 131073, 458763, 47, 131073, 458764, 47, 131073, 458765, 47, 131073, 458766, -1610612689, 131074 ) __meta__ = { From ba00ee4bfd7a61d8d580e652ba75da9f742e7378 Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Mon, 20 Apr 2020 01:15:44 +0200 Subject: [PATCH 15/21] Whatever. --- src/project.godot | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/project.godot b/src/project.godot index 2004c48..232909c 100644 --- a/src/project.godot +++ b/src/project.godot @@ -29,11 +29,6 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://Player/Player.gd" }, { -"base": "KinematicBody2D", -"class": "SlimeBoss", -"language": "GDScript", -"path": "res://Boss/SlimeBoss/SlimeBoss.gd" -}, { "base": "Button", "class": "TitleSceenButton", "language": "GDScript", @@ -49,7 +44,6 @@ _global_script_class_icons={ "DialougeBox": "", "Hero": "", "Player": "", -"SlimeBoss": "", "TitleSceenButton": "", "TitleScreen": "" } From 1d164601ba291b5e6a2de724cb4662a6316e4d7a Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Mon, 20 Apr 2020 01:42:36 +0200 Subject: [PATCH 16/21] Added banana animation --- src/Menus/DragNDrop/DragNDropUI.tscn | 7 +- src/Objects/Banana/Banana.gd | 8 +++ src/Objects/Banana/Banana.tscn | 74 ++++++++++++++++++--- src/Objects/Banana/Bannana.gd | 5 -- src/Objects/Banana/animation.png | Bin 0 -> 3937 bytes src/Objects/Banana/animation.png.import | 34 ++++++++++ src/Objects/Banana/icon.png | Bin 0 -> 380 bytes src/Objects/Banana/icon.png.import | 34 ++++++++++ src/Objects/Banana/mouse_follow.png | Bin 0 -> 386 bytes src/Objects/Banana/mouse_follow.png.import | 34 ++++++++++ src/Objects/Traps/Spike.tscn | 3 +- src/Objects/Traps/Sting.tscn | 3 +- 12 files changed, 184 insertions(+), 18 deletions(-) create mode 100644 src/Objects/Banana/Banana.gd delete mode 100644 src/Objects/Banana/Bannana.gd create mode 100644 src/Objects/Banana/animation.png create mode 100644 src/Objects/Banana/animation.png.import create mode 100644 src/Objects/Banana/icon.png create mode 100644 src/Objects/Banana/icon.png.import create mode 100644 src/Objects/Banana/mouse_follow.png create mode 100644 src/Objects/Banana/mouse_follow.png.import diff --git a/src/Menus/DragNDrop/DragNDropUI.tscn b/src/Menus/DragNDrop/DragNDropUI.tscn index 52f2bde..a8e07b1 100644 --- a/src/Menus/DragNDrop/DragNDropUI.tscn +++ b/src/Menus/DragNDrop/DragNDropUI.tscn @@ -1,13 +1,14 @@ -[gd_scene load_steps=9 format=2] +[gd_scene load_steps=10 format=2] [ext_resource path="res://Menus/DragNDrop/DragSource.tscn" type="PackedScene" id=1] [ext_resource path="res://Menus/DragNDrop/DragSink.tscn" type="PackedScene" id=2] [ext_resource path="res://Objects/Banana/Banana.tscn" type="PackedScene" id=3] -[ext_resource path="res://testSprites/bannane.png" type="Texture" id=4] +[ext_resource path="res://Objects/Banana/icon.png" type="Texture" id=4] [ext_resource path="res://Objects/Traps/Bear/bear.jpg" type="Texture" id=5] [ext_resource path="res://Objects/Traps/bear.tscn" type="PackedScene" id=6] [ext_resource path="res://Objects/Traps/Bear/Animation/0012.png" type="Texture" id=7] [ext_resource path="res://Menus/DragNDrop/DragNDropUI.gd" type="Script" id=8] +[ext_resource path="res://Objects/Banana/mouse_follow.png" type="Texture" id=9] [node name="DragNDropUI" type="Control"] anchor_right = 1.0 @@ -26,7 +27,7 @@ margin_right = 43.9239 margin_bottom = 252.793 texture = ExtResource( 4 ) Item = ExtResource( 3 ) -PreviewIcon = ExtResource( 4 ) +PreviewIcon = ExtResource( 9 ) [node name="GenericCard2" parent="." instance=ExtResource( 1 )] margin_left = 69.0145 diff --git a/src/Objects/Banana/Banana.gd b/src/Objects/Banana/Banana.gd new file mode 100644 index 0000000..3bfd32c --- /dev/null +++ b/src/Objects/Banana/Banana.gd @@ -0,0 +1,8 @@ +extends AnimatedSprite + +func _ready(): + play("place") + + +func _on_Hurtbox_area_entered(area): + queue_free() diff --git a/src/Objects/Banana/Banana.tscn b/src/Objects/Banana/Banana.tscn index 4e28045..ea62b8f 100644 --- a/src/Objects/Banana/Banana.tscn +++ b/src/Objects/Banana/Banana.tscn @@ -1,25 +1,83 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=20 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] -[ext_resource path="res://Objects/Banana/Bannana.gd" type="Script" id=2] -[ext_resource path="res://testSprites/bannane.png" type="Texture" id=3] +[ext_resource path="res://Objects/Banana/Banana.gd" type="Script" id=2] +[ext_resource path="res://Objects/Banana/animation.png" type="Texture" id=3] [ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=4] +[sub_resource type="AtlasTexture" id=2] +atlas = ExtResource( 3 ) +region = Rect2( 0, 0, 40, 40 ) + +[sub_resource type="AtlasTexture" id=3] +atlas = ExtResource( 3 ) +region = Rect2( 40, 0, 40, 40 ) + +[sub_resource type="AtlasTexture" id=4] +atlas = ExtResource( 3 ) +region = Rect2( 80, 0, 40, 40 ) + +[sub_resource type="AtlasTexture" id=5] +atlas = ExtResource( 3 ) +region = Rect2( 120, 0, 40, 40 ) + +[sub_resource type="AtlasTexture" id=6] +atlas = ExtResource( 3 ) +region = Rect2( 160, 0, 40, 40 ) + +[sub_resource type="AtlasTexture" id=7] +atlas = ExtResource( 3 ) +region = Rect2( 200, 0, 40, 40 ) + +[sub_resource type="AtlasTexture" id=8] +atlas = ExtResource( 3 ) +region = Rect2( 240, 0, 40, 40 ) + +[sub_resource type="AtlasTexture" id=9] +atlas = ExtResource( 3 ) +region = Rect2( 280, 0, 40, 40 ) + +[sub_resource type="AtlasTexture" id=10] +atlas = ExtResource( 3 ) +region = Rect2( 320, 0, 40, 40 ) + +[sub_resource type="AtlasTexture" id=11] +atlas = ExtResource( 3 ) +region = Rect2( 360, 0, 40, 40 ) + +[sub_resource type="AtlasTexture" id=12] +atlas = ExtResource( 3 ) +region = Rect2( 400, 0, 40, 40 ) + +[sub_resource type="AtlasTexture" id=13] +atlas = ExtResource( 3 ) +region = Rect2( 440, 0, 40, 40 ) + +[sub_resource type="AtlasTexture" id=14] +atlas = ExtResource( 3 ) +region = Rect2( 480, 0, 40, 40 ) + +[sub_resource type="SpriteFrames" id=15] +animations = [ { +"frames": [ SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 6 ), SubResource( 7 ), SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 11 ), SubResource( 12 ), SubResource( 13 ), SubResource( 14 ) ], +"loop": false, +"name": "place", +"speed": 60.0 +} ] + [sub_resource type="CapsuleShape2D" id=1] radius = 7.54726 height = 12.1493 -[node name="Banana" type="Node2D"] +[node name="Banana" type="AnimatedSprite"] +frames = SubResource( 15 ) +animation = "place" script = ExtResource( 2 ) [node name="Kind" parent="." instance=ExtResource( 4 )] general = 2 kind = 10 -[node name="Sprite" type="Sprite" parent="."] -position = Vector2( 1.54256, -4.73786 ) -texture = ExtResource( 3 ) - [node name="Hurtbox" parent="." instance=ExtResource( 1 )] position = Vector2( 1.54256, -4.73786 ) collision_layer = 32 diff --git a/src/Objects/Banana/Bannana.gd b/src/Objects/Banana/Bannana.gd deleted file mode 100644 index 92da9f6..0000000 --- a/src/Objects/Banana/Bannana.gd +++ /dev/null @@ -1,5 +0,0 @@ -extends Node2D - - -func _on_Hurtbox_area_entered(area): - queue_free() diff --git a/src/Objects/Banana/animation.png b/src/Objects/Banana/animation.png new file mode 100644 index 0000000000000000000000000000000000000000..7a652e75591cf9298732955e629343ae4db049d2 GIT binary patch literal 3937 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 literal 0 HcmV?d00001 diff --git a/src/Objects/Banana/animation.png.import b/src/Objects/Banana/animation.png.import new file mode 100644 index 0000000..438ce94 --- /dev/null +++ b/src/Objects/Banana/animation.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/animation.png-1da805c2da35e7e6c661d9596a57f750.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Banana/animation.png" +dest_files=[ "res://.import/animation.png-1da805c2da35e7e6c661d9596a57f750.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/Objects/Banana/icon.png b/src/Objects/Banana/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..84912be987e485356822040a694ab6d580635c8d GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEoCO|{#Xy=7jQv%QTmv#xszM@4 zoQqNuOY(~t7&vAY`<(Rm3N7%__S6k3@b&ig)zf5SaI9iGmsKTt6sZ26r;B4qMC;q> zcli!0aJUuT{Jr03cjWA;D{C57h|gORdD+KS@I(8Hf(Y-4@-r%1kNax+FTJkBKO@KS zpIx32>&}mPO5Oonf1g@;wLLJfT=cPNYe3%YX7Sr+5^|S06}hC#_85B^ONNkLxRE6)z4*}Q$iB}FOZr5 literal 0 HcmV?d00001 diff --git a/src/Objects/Banana/icon.png.import b/src/Objects/Banana/icon.png.import new file mode 100644 index 0000000..7ef22b2 --- /dev/null +++ b/src/Objects/Banana/icon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon.png-9dc4caad05920b6cd30b7c767b233c2a.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Banana/icon.png" +dest_files=[ "res://.import/icon.png-9dc4caad05920b6cd30b7c767b233c2a.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/Objects/Banana/mouse_follow.png b/src/Objects/Banana/mouse_follow.png new file mode 100644 index 0000000000000000000000000000000000000000..740f0054ac5a0b50a965e3a4a2a7a6c273239823 GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEoCO|{#Xy=7jQv%QTmv#xszM@4 zoQqNuOY(~t7&vAY`<(Rm3N7%__S6k3@b&ig)zf5SaI9iGmsKTt6sVWQ)5S3)qV?_c z-GWU40mjW}@&uXoln|EDHV`EhaPza~`h{rcK)#nkxA+ZQjD&pW66F7(&@rMA&%dP;2{ dtK)|9d+mREmpIK=SqBV122WQ%mvv4FO#r8>o2&o; literal 0 HcmV?d00001 diff --git a/src/Objects/Banana/mouse_follow.png.import b/src/Objects/Banana/mouse_follow.png.import new file mode 100644 index 0000000..c784602 --- /dev/null +++ b/src/Objects/Banana/mouse_follow.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/mouse_follow.png-999aae3065fa4a723899678a470caab4.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Banana/mouse_follow.png" +dest_files=[ "res://.import/mouse_follow.png-999aae3065fa4a723899678a470caab4.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/Objects/Traps/Spike.tscn b/src/Objects/Traps/Spike.tscn index 8991297..2ab999c 100644 --- a/src/Objects/Traps/Spike.tscn +++ b/src/Objects/Traps/Spike.tscn @@ -1,10 +1,11 @@ [gd_scene load_steps=6 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=1] -[ext_resource path="res://Objects/Banana/Bannana.gd" type="Script" id=2] +[ext_resource path="res://Objects/Banana/Banana.gd" type="Script" id=2] [ext_resource path="res://testSprites/Spike.png" type="Texture" id=3] [ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=4] + [sub_resource type="CapsuleShape2D" id=1] height = 6.36237 diff --git a/src/Objects/Traps/Sting.tscn b/src/Objects/Traps/Sting.tscn index f640195..a55bc66 100644 --- a/src/Objects/Traps/Sting.tscn +++ b/src/Objects/Traps/Sting.tscn @@ -1,10 +1,11 @@ [gd_scene load_steps=6 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=1] -[ext_resource path="res://Objects/Banana/Bannana.gd" type="Script" id=2] +[ext_resource path="res://Objects/Banana/Banana.gd" type="Script" id=2] [ext_resource path="res://testSprites/Sting.png" type="Texture" id=3] [ext_resource path="res://Overlap/Kind.tscn" type="PackedScene" id=4] + [sub_resource type="CapsuleShape2D" id=1] radius = 6.77597 height = 6.36237 From 1be1aede4f4c41e750927743ac08dc9dd6781821 Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Mon, 20 Apr 2020 01:42:54 +0200 Subject: [PATCH 17/21] Changed up bear trap speed to 90FPS --- src/Objects/Traps/bear.tscn | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Objects/Traps/bear.tscn b/src/Objects/Traps/bear.tscn index 1191996..a6867b3 100644 --- a/src/Objects/Traps/bear.tscn +++ b/src/Objects/Traps/bear.tscn @@ -36,7 +36,7 @@ [ext_resource path="res://Objects/Traps/Bear/Animation/0009.png" type="Texture" id=35] [ext_resource path="res://Objects/Traps/Bear/Animation/0012.png" type="Texture" id=36] -[sub_resource type="SpriteFrames" id=4] +[sub_resource type="SpriteFrames" id=1] animations = [ { "frames": [ ExtResource( 12 ), ExtResource( 7 ), ExtResource( 28 ), ExtResource( 11 ), ExtResource( 14 ), ExtResource( 9 ), ExtResource( 29 ), ExtResource( 24 ), ExtResource( 15 ), ExtResource( 35 ), ExtResource( 13 ), ExtResource( 22 ) ], "loop": false, @@ -46,7 +46,7 @@ animations = [ { "frames": [ ExtResource( 30 ), ExtResource( 10 ), ExtResource( 23 ), ExtResource( 27 ), ExtResource( 31 ), ExtResource( 6 ), ExtResource( 25 ), ExtResource( 19 ), ExtResource( 26 ), ExtResource( 32 ), ExtResource( 16 ), ExtResource( 21 ), ExtResource( 8 ), ExtResource( 17 ), ExtResource( 18 ), ExtResource( 20 ), ExtResource( 33 ), ExtResource( 34 ) ], "loop": false, "name": "clap", -"speed": 60.0 +"speed": 90.0 }, { "frames": [ ExtResource( 36 ) ], "loop": false, @@ -54,7 +54,7 @@ animations = [ { "speed": 60.0 } ] -[sub_resource type="CapsuleShape2D" id=5] +[sub_resource type="CapsuleShape2D" id=2] height = 9.0 [sub_resource type="CapsuleShape2D" id=3] @@ -68,14 +68,14 @@ kind = 10 [node name="AnimatedSprite" type="AnimatedSprite" parent="."] position = Vector2( -7.62939e-06, 0 ) -frames = SubResource( 4 ) +frames = SubResource( 1 ) [node name="Hitbox" parent="." instance=ExtResource( 2 )] collision_layer = 16 [node name="CollisionShape2D" parent="Hitbox" index="0"] rotation = 1.5708 -shape = SubResource( 5 ) +shape = SubResource( 2 ) [node name="Hurtbox" parent="." instance=ExtResource( 5 )] collision_layer = 32 From 53b4dbb92aa77716f6993e3816fa99778f641653 Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Mon, 20 Apr 2020 01:44:20 +0200 Subject: [PATCH 18/21] Changed default of heal particle effect to emitting=false --- src/Player/Player.tscn | 1 + src/World.tscn | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Player/Player.tscn b/src/Player/Player.tscn index a1415d2..beecd07 100644 --- a/src/Player/Player.tscn +++ b/src/Player/Player.tscn @@ -743,6 +743,7 @@ script = ExtResource( 16 ) [node name="Effects" type="Node2D" parent="."] [node name="HealEffect" parent="Effects" instance=ExtResource( 8 )] +emitting = false [connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"] [connection signal="area_entered" from="Hurtbox" to="." method="_on_Hurtbox_area_entered"] [connection signal="area_exited" from="Hurtbox" to="." method="_on_Hurtbox_area_exited"] diff --git a/src/World.tscn b/src/World.tscn index fc24bd9..fbcf33a 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -21,7 +21,7 @@ region_enabled = true region_rect = Rect2( 0, 0, 1280, 720 ) [node name="Background" parent="." instance=ExtResource( 7 )] -frame = 48 +frame = 24 [node name="FloorTileMap" type="TileMap" parent="."] modulate = Color( 1, 1, 1, 0.454902 ) From 0b930fd1c6b5e494ed6cf8c3b0705cb7617c7925 Mon Sep 17 00:00:00 2001 From: Conrad Date: Mon, 20 Apr 2020 12:37:12 +0200 Subject: [PATCH 19/21] Added Level Indicators to Cards --- src/Menus/DragNDrop/DragSource.gd | 15 +++++++----- src/Menus/DragNDrop/DragSource.tscn | 30 ++++++++++++++++++++++-- src/Objects/Card/level0.png | Bin 0 -> 137 bytes src/Objects/Card/level0.png.import | 34 ++++++++++++++++++++++++++++ src/Objects/Card/level1.png | Bin 0 -> 142 bytes src/Objects/Card/level1.png.import | 34 ++++++++++++++++++++++++++++ src/Objects/Card/level2.png | Bin 0 -> 123 bytes src/Objects/Card/level2.png.import | 34 ++++++++++++++++++++++++++++ 8 files changed, 139 insertions(+), 8 deletions(-) create mode 100644 src/Objects/Card/level0.png create mode 100644 src/Objects/Card/level0.png.import create mode 100644 src/Objects/Card/level1.png create mode 100644 src/Objects/Card/level1.png.import create mode 100644 src/Objects/Card/level2.png create mode 100644 src/Objects/Card/level2.png.import diff --git a/src/Menus/DragNDrop/DragSource.gd b/src/Menus/DragNDrop/DragSource.gd index 82615e1..a01508f 100644 --- a/src/Menus/DragNDrop/DragSource.gd +++ b/src/Menus/DragNDrop/DragSource.gd @@ -1,5 +1,5 @@ extends TextureRect -#CardDeck +# CardDeck export var Item:PackedScene export var PreviewIcon:Texture export var DeleteOnGrab:bool = false @@ -8,28 +8,31 @@ export var DeleteOnGrab:bool = false func get_drag_data(_pos): var ctrl = Control.new() var TR = TextureRect.new() - TR.texture = get_resized_texture(PreviewIcon,self.rect_size[0],self.rect_size[1]) - TR.rect_size= self.rect_size - TR.set_position(_pos*-1,false) + TR.texture = get_resized_texture(PreviewIcon, self.rect_size[0], self.rect_size[1]) + TR.rect_size = self.rect_size + TR.set_position(_pos * -1, false) ctrl.add_child(TR) set_drag_preview(ctrl) - if DeleteOnGrab : + if DeleteOnGrab: self.queue_free() return Item + #stuff can be dropped here #eg you picked the wrong thing up, let go and it returns to nothingness func can_drop_data(_pos, data): return typeof(data) == typeof(PackedScene) + #do nothing if stuff is dropped here func drop_data(_pos, _data): pass + func get_resized_texture(t: Texture, width: int = 0, height: int = 0): var image = t.get_data() - if width > 0 && height > 0: + if width > 0 and height > 0: image.resize(width, height) var itex = ImageTexture.new() itex.create_from_image(image,0) diff --git a/src/Menus/DragNDrop/DragSource.tscn b/src/Menus/DragNDrop/DragSource.tscn index 6070ea3..505e0ee 100644 --- a/src/Menus/DragNDrop/DragSource.tscn +++ b/src/Menus/DragNDrop/DragSource.tscn @@ -1,8 +1,29 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://icon.png" type="Texture" id=1] [ext_resource path="res://Objects/Card/card.png" type="Texture" id=2] [ext_resource path="res://Menus/DragNDrop/DragSource.gd" type="Script" id=3] +[ext_resource path="res://Objects/Card/level0.png" type="Texture" id=4] +[ext_resource path="res://Objects/Card/level2.png" type="Texture" id=5] +[ext_resource path="res://Objects/Card/level1.png" type="Texture" id=6] + +[sub_resource type="SpriteFrames" id=1] +animations = [ { +"frames": [ ExtResource( 4 ) ], +"loop": false, +"name": "lvl0", +"speed": 60.0 +}, { +"frames": [ ExtResource( 5 ) ], +"loop": false, +"name": "lvl2", +"speed": 60.0 +}, { +"frames": [ ExtResource( 6 ) ], +"loop": false, +"name": "lvl1", +"speed": 60.0 +} ] [node name="DragSource" type="TextureRect"] margin_left = 10.7364 @@ -17,6 +38,11 @@ __meta__ = { } [node name="Sprite" type="Sprite" parent="."] -position = Vector2( 16.0791, 16.0117 ) +position = Vector2( 15.729, 15.7929 ) z_index = -1 texture = ExtResource( 2 ) + +[node name="AnimatedSprite" type="AnimatedSprite" parent="."] +position = Vector2( 33.1035, 40.3068 ) +frames = SubResource( 1 ) +animation = "lvl0" diff --git a/src/Objects/Card/level0.png b/src/Objects/Card/level0.png new file mode 100644 index 0000000000000000000000000000000000000000..58395a20fd6f46f40eb19785c11bfb2c78bce600 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^96-#>$P6T>u-)MXQjEnx?oNz1PwLbIIh+L^k;M!Q z+`=Ht$S`Y;1W=GIz$e7@|Ns9$X6T{IbwG-#B*-uLKf}}Q23|lOpQnpsNX4AwganV| a1fYQy4C&wZTvY(dFnGH9xvX#0(@aFI#pSNHG=%xjQl5JgHL;vL>4nJ za0`PlBg3pY5+K0g6NM literal 0 HcmV?d00001 diff --git a/src/Objects/Card/level1.png.import b/src/Objects/Card/level1.png.import new file mode 100644 index 0000000..4088ced --- /dev/null +++ b/src/Objects/Card/level1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/level1.png-ab0efb90911fd7134ef5c5c3c34ffe82.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Card/level1.png" +dest_files=[ "res://.import/level1.png-ab0efb90911fd7134ef5c5c3c34ffe82.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/Objects/Card/level2.png b/src/Objects/Card/level2.png new file mode 100644 index 0000000000000000000000000000000000000000..2d42d0691b97031ee06a05cc188409ab52ab87f5 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^96-#>$P6T>u-)MXQjEnx?oNz1PwLbIIh+L^k;M!Q z+`=Ht$S`Y;1W=GIz$e7@|NsB%R6=vkK0gT*;q!EH45^rtoRHv=oB%Y!f+79;o~sH# O83s>RKbLh*2~7Y1mmU`Y literal 0 HcmV?d00001 diff --git a/src/Objects/Card/level2.png.import b/src/Objects/Card/level2.png.import new file mode 100644 index 0000000..c080379 --- /dev/null +++ b/src/Objects/Card/level2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/level2.png-377010b68cc608f506f01e4ccb424729.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Objects/Card/level2.png" +dest_files=[ "res://.import/level2.png-377010b68cc608f506f01e4ccb424729.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 From 9b5ccae8a74cc0ab9e2036ef0504e8980b4b765e Mon Sep 17 00:00:00 2001 From: Conrad Date: Mon, 20 Apr 2020 12:57:48 +0200 Subject: [PATCH 20/21] Added Card Level Animation --- src/Menus/DragNDrop/DragNDropUI.tscn | 2 ++ src/Menus/DragNDrop/DragSource.gd | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/Menus/DragNDrop/DragNDropUI.tscn b/src/Menus/DragNDrop/DragNDropUI.tscn index a8e07b1..1dfdcd1 100644 --- a/src/Menus/DragNDrop/DragNDropUI.tscn +++ b/src/Menus/DragNDrop/DragNDropUI.tscn @@ -62,3 +62,5 @@ anchor_bottom = 0.87 margin_left = 2.0 margin_right = 0.0400085 margin_bottom = -30.9 + +[editable path="GenericCard1"] diff --git a/src/Menus/DragNDrop/DragSource.gd b/src/Menus/DragNDrop/DragSource.gd index a01508f..23e6a4e 100644 --- a/src/Menus/DragNDrop/DragSource.gd +++ b/src/Menus/DragNDrop/DragSource.gd @@ -4,6 +4,8 @@ export var Item:PackedScene export var PreviewIcon:Texture export var DeleteOnGrab:bool = false +var card_level = 0 + #if a drag is initiated here func get_drag_data(_pos): var ctrl = Control.new() @@ -19,13 +21,13 @@ func get_drag_data(_pos): return Item -#stuff can be dropped here -#eg you picked the wrong thing up, let go and it returns to nothingness +# stuff can be dropped here +# eg you picked the wrong thing up, let go and it returns to nothingness func can_drop_data(_pos, data): return typeof(data) == typeof(PackedScene) -#do nothing if stuff is dropped here +# do nothing if stuff is dropped here func drop_data(_pos, _data): pass @@ -37,3 +39,13 @@ func get_resized_texture(t: Texture, width: int = 0, height: int = 0): var itex = ImageTexture.new() itex.create_from_image(image,0) return itex + + +func upgrade_card(): + match card_level: + 0: + $AnimatedSprite.play("lvl1") + card_level += 1 + 1: + $AnimatedSprite.play("lvl2") + card_level += 1 From 2406e08f90559fda559d4865c80a39c62cfe432c Mon Sep 17 00:00:00 2001 From: Paul Norberger Date: Mon, 20 Apr 2020 13:13:54 +0200 Subject: [PATCH 21/21] Added beginnings of boss --- src/Autoloads/Steering.gd | 24 ++ src/Boss/SlimeBoss/SlimeBoss.tscn | 373 ++++++++++++------ src/Boss/SlimeBoss/SlimeBossStateMachine.gd | 205 ++++++++-- src/Boss/SlimeBoss/States/Charge/Prepare.gd | 7 + src/Boss/SlimeBoss/States/FightStart.gd | 13 + src/Boss/SlimeBoss/States/Motion/Dead.gd | 4 - src/Boss/SlimeBoss/States/Motion/Idle.gd | 7 - .../SlimeBoss/States/Motion/JumpTeleport.gd | 4 - src/Boss/SlimeBoss/States/Motion/Pursue.gd | 4 - src/Boss/SlimeBoss/States/Motion/SplitUp.gd | 4 - src/Boss/SlimeBoss/States/Motion/Stagger.gd | 4 - src/Boss/SlimeBoss/States/Motion/Wander.gd | 4 - .../States/Roam/MoveToRandomPosition.gd | 34 ++ .../SlimeBoss/States/Roam/RoamSequence.gd | 15 + src/Boss/SlimeBoss/States/Roam/Wait.gd | 12 + src/Debug/BossStateDisplay.gd | 8 + src/Overlap/StateMachine/SequenceState.gd | 41 ++ src/Player/Player.tscn | 2 +- src/World.tscn | 59 ++- src/project.godot | 1 + 20 files changed, 629 insertions(+), 196 deletions(-) create mode 100644 src/Autoloads/Steering.gd create mode 100644 src/Boss/SlimeBoss/States/Charge/Prepare.gd create mode 100644 src/Boss/SlimeBoss/States/FightStart.gd delete mode 100644 src/Boss/SlimeBoss/States/Motion/Dead.gd delete mode 100644 src/Boss/SlimeBoss/States/Motion/Idle.gd delete mode 100644 src/Boss/SlimeBoss/States/Motion/JumpTeleport.gd delete mode 100644 src/Boss/SlimeBoss/States/Motion/Pursue.gd delete mode 100644 src/Boss/SlimeBoss/States/Motion/SplitUp.gd delete mode 100644 src/Boss/SlimeBoss/States/Motion/Stagger.gd delete mode 100644 src/Boss/SlimeBoss/States/Motion/Wander.gd create mode 100644 src/Boss/SlimeBoss/States/Roam/MoveToRandomPosition.gd create mode 100644 src/Boss/SlimeBoss/States/Roam/RoamSequence.gd create mode 100644 src/Boss/SlimeBoss/States/Roam/Wait.gd create mode 100644 src/Debug/BossStateDisplay.gd create mode 100644 src/Overlap/StateMachine/SequenceState.gd diff --git a/src/Autoloads/Steering.gd b/src/Autoloads/Steering.gd new file mode 100644 index 0000000..46c633b --- /dev/null +++ b/src/Autoloads/Steering.gd @@ -0,0 +1,24 @@ +extends Node + +const DEFAULT_MASS = 2.0 +const DEFAULT_SLOW_RADIUS = 200.0 +const DEFAULT_MAX_SPEED = 300.0 + +func arrive_to(velocity, + position_current, + position_target, + mass=DEFAULT_MASS, + slow_radius=DEFAULT_SLOW_RADIUS, + max_speed=DEFAULT_MAX_SPEED): + """ + Calculates and returns a new velocity with the arrive steering behavior arrived based on + an existing velocity (Vector2), the object's current and target positions (Vector2) + """ + var distance_to_target = position_current.distance_to(position_target) + + var desired_velocity = (position_target - position_current).normalized() * max_speed + if distance_to_target < slow_radius: + desired_velocity *= (distance_to_target / slow_radius) * .75 + .25 + var steering = (desired_velocity - velocity) / mass + + return velocity + steering diff --git a/src/Boss/SlimeBoss/SlimeBoss.tscn b/src/Boss/SlimeBoss/SlimeBoss.tscn index 88eea10..c9159f0 100644 --- a/src/Boss/SlimeBoss/SlimeBoss.tscn +++ b/src/Boss/SlimeBoss/SlimeBoss.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=23 format=2] +[gd_scene load_steps=29 format=2] [ext_resource path="res://Overlap/HurtHit_Box/Hurtbox.tscn" type="PackedScene" id=1] [ext_resource path="res://Overlap/HurtHit_Box/Hitbox.tscn" type="PackedScene" id=2] @@ -6,14 +6,12 @@ [ext_resource path="res://Boss/SlimeBoss/SlimeBossStateMachine.gd" type="Script" id=4] [ext_resource path="res://Boss/SlimeBoss/Animations/move_down.png" type="Texture" id=5] [ext_resource path="res://Boss/SlimeBoss/Animations/move_right.png" type="Texture" id=6] -[ext_resource path="res://Boss/SlimeBoss/States/Motion/Idle.gd" type="Script" id=7] -[ext_resource path="res://Boss/SlimeBoss/States/Motion/Stagger.gd" type="Script" id=8] -[ext_resource path="res://Boss/SlimeBoss/States/Motion/Wander.gd" type="Script" id=9] -[ext_resource path="res://Boss/SlimeBoss/States/Motion/SplitUp.gd" type="Script" id=10] +[ext_resource path="res://Boss/SlimeBoss/States/Roam/RoamSequence.gd" type="Script" id=7] +[ext_resource path="res://Boss/SlimeBoss/States/Roam/Wait.gd" type="Script" id=8] +[ext_resource path="res://Boss/SlimeBoss/States/FightStart.gd" type="Script" id=9] +[ext_resource path="res://Boss/SlimeBoss/Animations/move_down_angry.png" type="Texture" id=10] [ext_resource path="res://Boss/SlimeBoss/Animations/move_up.png" type="Texture" id=11] -[ext_resource path="res://Boss/SlimeBoss/States/Motion/JumpTeleport.gd" type="Script" id=12] -[ext_resource path="res://Boss/SlimeBoss/States/Motion/Dead.gd" type="Script" id=13] -[ext_resource path="res://Boss/SlimeBoss/States/Motion/Pursue.gd" type="Script" id=14] +[ext_resource path="res://Boss/SlimeBoss/States/Roam/MoveToRandomPosition.gd" type="Script" id=12] [sub_resource type="CapsuleShape2D" id=1] radius = 18.0 @@ -28,9 +26,86 @@ radius = 150.0 [sub_resource type="CapsuleShape2D" id=4] radius = 8.0 -height = 15.0 +height = 32.0 [sub_resource type="Animation" id=5] +resource_name = "FightStart" +length = 1.9 +step = 0.025 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:texture") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.175, 0.3, 0.65, 0.775, 1.075, 1.2, 1.35, 1.9 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ ExtResource( 5 ), ExtResource( 10 ), ExtResource( 5 ), ExtResource( 10 ), ExtResource( 5 ), ExtResource( 10 ), ExtResource( 5 ), ExtResource( 10 ), ExtResource( 5 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:vframes") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 10 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("Sprite:hframes") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 24 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("Sprite:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ Vector2( 0, -28 ) ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Sprite:flip_h") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("Sprite:frame") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0, 0.025, 0.05, 0.075, 0.1, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25, 0.275, 0.3, 0.325, 0.35, 0.375, 0.4, 0.425, 0.45, 0.475, 0.5, 0.525, 0.55, 0.575, 0.6, 0.625, 0.65, 0.675, 0.7, 0.725, 0.75, 0.775, 0.8, 0.825, 0.85, 0.875, 0.9, 0.925, 0.95, 0.975, 1, 1.025, 1.05, 1.075, 1.1, 1.125, 1.15, 1.175, 1.2, 1.225, 1.25, 1.275, 1.3, 1.325, 1.35, 1.375, 1.4, 1.425, 1.45, 1.475, 1.5, 1.525, 1.55, 1.575, 1.6, 1.625, 1.65, 1.675, 1.7, 1.725, 1.75, 1.775, 1.8, 1.825, 1.85, 1.875 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ] +} + +[sub_resource type="Animation" id=6] length = 2.66666 loop = true step = 0.0111111 @@ -91,8 +166,8 @@ tracks/4/enabled = true tracks/4/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), -"update": 0, -"values": [ Vector2( 0, -20 ) ] +"update": 1, +"values": [ Vector2( 0, -28 ) ] } tracks/5/type = "value" tracks/5/path = NodePath("Sprite:flip_h") @@ -107,83 +182,6 @@ tracks/5/keys = { "values": [ false ] } -[sub_resource type="Animation" id=6] -length = 1.28333 -loop = true -step = 0.0166667 -tracks/0/type = "value" -tracks/0/path = NodePath("Sprite:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0, 0.0166667, 0.0333334, 0.0500001, 0.0666668, 0.0833335, 0.1, 0.116667, 0.133334, 0.15, 0.166667, 0.183334, 0.2, 0.216667, 0.233334, 0.25, 0.266667, 0.283334, 0.300001, 0.316667, 0.333334, 0.350001, 0.366667, 0.383334, 0.400001, 0.416667, 0.433334, 0.450001, 0.466668, 0.483334, 0.500001, 0.516668, 0.533334, 0.550001, 0.566668, 0.583334, 0.600001, 0.616668, 0.633335, 0.650001, 0.666668, 0.683335, 0.700001, 0.716668, 0.733335, 0.750001, 0.766668, 0.783335, 0.800002, 0.816668, 0.833335, 0.850002, 0.866668, 0.883335, 0.900002, 0.916668, 0.933335, 0.950002, 0.966669, 0.983335, 1, 1.01667, 1.03334, 1.05, 1.06667, 1.08334, 1.1, 1.11667, 1.13334, 1.15, 1.16667, 1.18334, 1.2, 1.21667, 1.23334, 1.25, 1.26667 ), -"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), -"update": 1, -"values": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76 ] -} -tracks/1/type = "value" -tracks/1/path = NodePath("Sprite:texture") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ ExtResource( 6 ) ] -} -tracks/2/type = "value" -tracks/2/path = NodePath("Sprite:vframes") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ 7 ] -} -tracks/3/type = "value" -tracks/3/path = NodePath("Sprite:hframes") -tracks/3/interp = 1 -tracks/3/loop_wrap = true -tracks/3/imported = false -tracks/3/enabled = true -tracks/3/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ 11 ] -} -tracks/4/type = "value" -tracks/4/path = NodePath("Sprite:position") -tracks/4/interp = 1 -tracks/4/loop_wrap = true -tracks/4/imported = false -tracks/4/enabled = true -tracks/4/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 0, -"values": [ Vector2( -5, -20 ) ] -} -tracks/5/type = "value" -tracks/5/path = NodePath("Sprite:flip_h") -tracks/5/interp = 1 -tracks/5/loop_wrap = true -tracks/5/imported = false -tracks/5/enabled = true -tracks/5/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ true ] -} - [sub_resource type="Animation" id=7] length = 1.28333 loop = true @@ -245,8 +243,85 @@ tracks/4/enabled = true tracks/4/keys = { "times": PoolRealArray( 0 ), "transitions": PoolRealArray( 1 ), -"update": 0, -"values": [ Vector2( -5, -20 ) ] +"update": 1, +"values": [ Vector2( 5, -28 ) ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("Sprite:flip_h") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} + +[sub_resource type="Animation" id=8] +length = 1.28333 +loop = true +step = 0.0166667 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.0166667, 0.0333334, 0.0500001, 0.0666668, 0.0833335, 0.1, 0.116667, 0.133334, 0.15, 0.166667, 0.183334, 0.2, 0.216667, 0.233334, 0.25, 0.266667, 0.283334, 0.300001, 0.316667, 0.333334, 0.350001, 0.366667, 0.383334, 0.400001, 0.416667, 0.433334, 0.450001, 0.466668, 0.483334, 0.500001, 0.516668, 0.533334, 0.550001, 0.566668, 0.583334, 0.600001, 0.616668, 0.633335, 0.650001, 0.666668, 0.683335, 0.700001, 0.716668, 0.733335, 0.750001, 0.766668, 0.783335, 0.800002, 0.816668, 0.833335, 0.850002, 0.866668, 0.883335, 0.900002, 0.916668, 0.933335, 0.950002, 0.966669, 0.983335, 1, 1.01667, 1.03334, 1.05, 1.06667, 1.08334, 1.1, 1.11667, 1.13334, 1.15, 1.16667, 1.18334, 1.2, 1.21667, 1.23334, 1.25, 1.26667 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:texture") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ ExtResource( 6 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("Sprite:vframes") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 7 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("Sprite:hframes") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 11 ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Sprite:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ Vector2( -5, -28 ) ] } tracks/5/type = "value" tracks/5/path = NodePath("Sprite:flip_h") @@ -261,7 +336,7 @@ tracks/5/keys = { "values": [ false ] } -[sub_resource type="Animation" id=8] +[sub_resource type="Animation" id=9] length = 1.28333 loop = true step = 0.0166667 @@ -325,23 +400,84 @@ tracks/4/keys = { "update": 1, "values": [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75 ] } +tracks/5/type = "value" +tracks/5/path = NodePath("Sprite:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ Vector2( 0, -28 ) ] +} + +[sub_resource type="AnimationNodeAnimation" id=10] +animation = "MoveRight" + +[sub_resource type="AnimationNodeAnimation" id=11] +animation = "MoveUp" + +[sub_resource type="AnimationNodeAnimation" id=12] +animation = "MoveDown" + +[sub_resource type="AnimationNodeAnimation" id=13] +animation = "MoveLeft" + +[sub_resource type="AnimationNodeBlendSpace2D" id=14] +blend_point_0/node = SubResource( 10 ) +blend_point_0/pos = Vector2( 1, 0 ) +blend_point_1/node = SubResource( 11 ) +blend_point_1/pos = Vector2( 0, -1.1 ) +blend_point_2/node = SubResource( 12 ) +blend_point_2/pos = Vector2( 0, 1.1 ) +blend_point_3/node = SubResource( 13 ) +blend_point_3/pos = Vector2( -1, 0 ) +min_space = Vector2( -1, -1.1 ) +max_space = Vector2( 1, 1.1 ) +blend_mode = 1 + +[sub_resource type="AnimationNodeStateMachine" id=15] +states/move/node = SubResource( 14 ) +states/move/position = Vector2( 143, 70 ) + +[sub_resource type="AnimationNodeStateMachinePlayback" id=16] [node name="SlimeBoss" type="KinematicBody2D"] collision_layer = 4 -collision_mask = 0 +collision_mask = 3 script = ExtResource( 4 ) __meta__ = { "_edit_group_": true } -STATES_COLLECTION = NodePath("States") -START_STATE = NodePath("States/Idle") + +[node name="Stats" parent="." instance=ExtResource( 3 )] +max_health = 3 + +[node name="States" type="Node" parent="."] + +[node name="FightStart" type="Node" parent="States"] +script = ExtResource( 9 ) + +[node name="RoamSequence" type="Node" parent="States"] +script = ExtResource( 7 ) + +[node name="Wait" type="Node" parent="States/RoamSequence"] +script = ExtResource( 8 ) + +[node name="Timer" type="Timer" parent="States/RoamSequence/Wait"] +one_shot = true + +[node name="MoveToRandomPosition" type="Node" parent="States/RoamSequence"] +script = ExtResource( 12 ) [node name="Sprite" type="Sprite" parent="."] -position = Vector2( 0, -20 ) +position = Vector2( 0, -28 ) texture = ExtResource( 5 ) vframes = 10 hframes = 24 -frame = 227 +frame = 2 [node name="Hitbox" parent="." instance=ExtResource( 2 )] visible = false @@ -380,38 +516,23 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="Stats" parent="." instance=ExtResource( 3 )] - -[node name="States" type="Node" parent="."] - -[node name="Idle" type="Node" parent="States"] -script = ExtResource( 7 ) - -[node name="Wander" type="Node" parent="States"] -script = ExtResource( 9 ) - -[node name="SplitUp" type="Node" parent="States"] -script = ExtResource( 10 ) - -[node name="Stagger" type="Node" parent="States"] -script = ExtResource( 8 ) - -[node name="JumpTeleport" type="Node" parent="States"] -script = ExtResource( 12 ) - -[node name="Dead" type="Node" parent="States"] -script = ExtResource( 13 ) - -[node name="Pursue" type="Node" parent="States"] -script = ExtResource( 14 ) - [node name="AnimationPlayer" type="AnimationPlayer" parent="."] autoplay = "MoveRight" -anims/MoveDown = SubResource( 5 ) -anims/MoveLeft = SubResource( 6 ) -anims/MoveRight = SubResource( 7 ) -anims/MoveUp = SubResource( 8 ) -[connection signal="area_entered" from="HeroCloseZone" to="States/Idle" method="hero_close"] +anims/FightStart = SubResource( 5 ) +anims/MoveDown = SubResource( 6 ) +anims/MoveLeft = SubResource( 7 ) +anims/MoveRight = SubResource( 8 ) +anims/MoveUp = SubResource( 9 ) + +[node name="AnimationTree" type="AnimationTree" parent="."] +tree_root = SubResource( 15 ) +anim_player = NodePath("../AnimationPlayer") +active = true +parameters/playback = SubResource( 16 ) +parameters/move/blend_position = Vector2( 0.210872, 0.275 ) +[connection signal="no_health" from="Stats" to="." method="_on_Stats_no_health"] +[connection signal="area_entered" from="Hurtbox" to="." method="_on_Hurtbox_area_entered"] +[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_finished"] [editable path="Hitbox"] diff --git a/src/Boss/SlimeBoss/SlimeBossStateMachine.gd b/src/Boss/SlimeBoss/SlimeBossStateMachine.gd index c783ada..8339fd4 100644 --- a/src/Boss/SlimeBoss/SlimeBossStateMachine.gd +++ b/src/Boss/SlimeBoss/SlimeBossStateMachine.gd @@ -1,38 +1,181 @@ -extends "res://Overlap/StateMachine/StateMachine.gd" +extends KinematicBody2D -onready var hero_close_zone = $HeroCloseZone -onready var debug_label = $DebugLabel +onready var animation_playback = $AnimationTree.get("parameters/playback") +signal target_position_changed +signal state_changed(new_state_name) +signal phase_changed(new_phase_name) + +export(float) var MASS = 8.0 +onready var start_global_position = global_position + +var target_position = Vector2() + +var state_active = null +var sequence_cycles = 0 + +enum PHASES {PHASE_ONE, PHASE_TWO, PHASE_THREE} +export(PHASES) var _phase = PHASES.PHASE_ONE func _ready(): - states_map = { - "idle": $States/Idle, - "wander": $States/Wander, - "pursue": $States/Pursue, - "split_up": $States/SplitUp, - "stagger": $States/Stagger, - "jump_teleport": $States/JumpTeleport, - "dead": $States/Dead - } - - debug_label.text = "IDLE" + print("Hey.") + _change_phase(_phase) + $AnimationPlayer.play("__INIT__") -func change_state(state_name): - current_state.exit() - debug_label.text = state_name.to_upper() + # We check if the Player node is a sibling so that we don't get errors + # playing the WildBoar scene + if get_parent().has_node('Player'): + var player_node = get_parent().get_node('Player') + player_node.connect('position_changed', self, '_on_target_position_changed') + target_position = player_node.global_position - if state_name == "previous": - states_stack.pop_front() - elif state_name in ["stagger"]: - states_stack.push_front(states_map[state_name]) - elif state_name == "dead": - queue_free() - return + for state_node in $States.get_children(): + state_node.connect('finished', self, '_on_active_state_finished') + go_to_next_state() + + +func _physics_process(delta): + state_active.update(delta) + + +func _on_animation_finished(anim_name): + state_active._on_animation_finished(anim_name) + + +func _on_active_state_finished(): + go_to_next_state() + + +# Well.. guess I'll die. +func _on_Stats_no_health(): + print("dead") + set_invincible(true) + go_to_next_state($States/Die) + + +func go_to_next_state(state_override=null): + if state_active: + state_active.exit() + + if state_override != null: + state_active = state_override else: - var new_state = states_map[state_name] - states_stack[0] = new_state + state_active = _decide_on_next_state() + emit_signal("state_changed", state_active.name) + state_active.enter() + + +func _on_Health_health_changed(new_health): + $Tween.interpolate_property($Pivot, 'scale', Vector2(0.92, 1.12), Vector2(1.0, 1.0), 0.3, Tween.TRANS_ELASTIC, Tween.EASE_IN_OUT) + $Tween.interpolate_property($Pivot/Body, 'modulate', Color('#ff48de'), Color('#ffffff'), 0.2, Tween.TRANS_QUINT, Tween.EASE_IN) + $Tween.start() - current_state = states_stack[0] - if state_name != "previous": - # We don"t want to reinitialize the state if we"re going back to the previous state - current_state.enter() - emit_signal("state_changed", states_stack) + if _phase == PHASES.PHASE_ONE and new_health < 100: + _change_phase(PHASES.PHASE_TWO) + if _phase == PHASES.PHASE_TWO and new_health < 50: + _change_phase(PHASES.PHASE_THREE) + + +func _change_phase(new_phase): + var phase_name = "" + match new_phase: + PHASES.PHASE_ONE: + $AnimationPlayer.playback_speed = 1.0 + phase_name = "One" + PHASES.PHASE_TWO: + $AnimationPlayer.playback_speed = 1.4 + phase_name = "Two" + PHASES.PHASE_THREE: + $AnimationPlayer.playback_speed = 1.8 + phase_name = "Three" + + emit_signal("phase_changed", phase_name) + _phase = new_phase + + +# The AI's brain. This function defines the flow of states +# That's a big advantage of the state pattern +# If it grows too big you can swap it with a node +# Or move the flow of states to a data file, like JSON or a text file +func _decide_on_next_state(): + # Battle start + if state_active == null: + set_invincible(true) + return $States/FightStart + if state_active == $States/FightStart: + set_invincible(false) + return $States/RoamSequence + if state_active == $States/RoamSequence: + return $States/FightStart + +# # Death +# if state_active == $States/Die: +# queue_free() +# return $States/Dead +# +# # PHASE ONE +# if _phase == PHASES.PHASE_ONE: +# if state_active == $States/RoamSequence: +# sequence_cycles += 1 +# if sequence_cycles < 2: +# return $States/RoamSequence +# else: +# sequence_cycles = 0 +# return $States/Stomp +# if state_active == $States/Stomp: +# return $States/RoamSequence +# +# # PHASE TWO +# elif _phase == PHASES.PHASE_TWO: +# if state_active == $States/RoamSequence: +# return $States/Stomp +# if state_active == $States/Stomp: +# if sequence_cycles < 2: +# sequence_cycles += 1 +# return $States/Stomp +# else: +# sequence_cycles = 0 +# return $States/ChargeSequence +# if state_active == $States/ChargeSequence: +# return $States/RoamSequence +# +# +# # PHASE THREE +# elif _phase == PHASES.PHASE_THREE: +# if state_active == $States/RoamSequence: +# return $States/Stomp +# if state_active == $States/Stomp: +# if sequence_cycles < 2: +# sequence_cycles += 1 +# return $States/Stomp +# else: +# sequence_cycles = 0 +# return $States/ChargeSequence +# if state_active == $States/ChargeSequence: +# if sequence_cycles < 2: +# sequence_cycles += 1 +# return $States/ChargeSequence +# else: +# sequence_cycles = 0 +# return $States/Stomp + + +# Using a public method makes it so we can change the entire particle setup anytime +func set_particles_active(value): + $DustPuffsLarge.emitting = value + + +# Same thing here, we will likely need more collision shapes in the final version +# So using a function we can group these disabled toggles together +func set_invincible(value): + $CollisionShape2D.disabled = value + $Hitbox/CollisionShape2D.disabled = value + $Hurtbox/CollisionShape2D.disabled = value + + +func _on_target_position_changed(new_position): + target_position = new_position + + +func _on_Hurtbox_area_entered(area): + $Stats.health -= area.damage + diff --git a/src/Boss/SlimeBoss/States/Charge/Prepare.gd b/src/Boss/SlimeBoss/States/Charge/Prepare.gd new file mode 100644 index 0000000..d616208 --- /dev/null +++ b/src/Boss/SlimeBoss/States/Charge/Prepare.gd @@ -0,0 +1,7 @@ +extends "res://Overlap/StateMachine/State.gd" + +func enter(): + owner.get_node('AnimationPlayer').play('prepare') + +func _on_animation_finished(anim_name): + emit_signal('finished') diff --git a/src/Boss/SlimeBoss/States/FightStart.gd b/src/Boss/SlimeBoss/States/FightStart.gd new file mode 100644 index 0000000..b51aa26 --- /dev/null +++ b/src/Boss/SlimeBoss/States/FightStart.gd @@ -0,0 +1,13 @@ +extends "res://Overlap/StateMachine/State.gd" + +onready var animation_player = owner.get_node("AnimationPlayer") +onready var animation_tree = owner.get_node("AnimationTree") + +func enter(): + animation_tree.active = false + animation_player.playback_active = true + animation_player.play('FightStart') + +func _on_animation_finished(anim_name): + assert(anim_name == 'FightStart') + emit_signal('finished') diff --git a/src/Boss/SlimeBoss/States/Motion/Dead.gd b/src/Boss/SlimeBoss/States/Motion/Dead.gd deleted file mode 100644 index 576756c..0000000 --- a/src/Boss/SlimeBoss/States/Motion/Dead.gd +++ /dev/null @@ -1,4 +0,0 @@ -extends "res://Overlap/StateMachine/State.gd" - -func enter(): - print("dead state") diff --git a/src/Boss/SlimeBoss/States/Motion/Idle.gd b/src/Boss/SlimeBoss/States/Motion/Idle.gd deleted file mode 100644 index b5ee51b..0000000 --- a/src/Boss/SlimeBoss/States/Motion/Idle.gd +++ /dev/null @@ -1,7 +0,0 @@ -extends "res://Overlap/StateMachine/State.gd" - -func enter(): - owner.get_node("AnimationPlayer").play("MoveDown") - -func hero_close(area): - emit_signal("finished", "pursue") diff --git a/src/Boss/SlimeBoss/States/Motion/JumpTeleport.gd b/src/Boss/SlimeBoss/States/Motion/JumpTeleport.gd deleted file mode 100644 index 5ccf4ea..0000000 --- a/src/Boss/SlimeBoss/States/Motion/JumpTeleport.gd +++ /dev/null @@ -1,4 +0,0 @@ -extends "res://Overlap/StateMachine/State.gd" - -func enter(): - print("jump teleport state") diff --git a/src/Boss/SlimeBoss/States/Motion/Pursue.gd b/src/Boss/SlimeBoss/States/Motion/Pursue.gd deleted file mode 100644 index 9d604c4..0000000 --- a/src/Boss/SlimeBoss/States/Motion/Pursue.gd +++ /dev/null @@ -1,4 +0,0 @@ -extends "res://Overlap/StateMachine/State.gd" - -func enter(): - print("pursue state") diff --git a/src/Boss/SlimeBoss/States/Motion/SplitUp.gd b/src/Boss/SlimeBoss/States/Motion/SplitUp.gd deleted file mode 100644 index 845fd18..0000000 --- a/src/Boss/SlimeBoss/States/Motion/SplitUp.gd +++ /dev/null @@ -1,4 +0,0 @@ -extends "res://Overlap/StateMachine/State.gd" - -func enter(): - print("split up state") diff --git a/src/Boss/SlimeBoss/States/Motion/Stagger.gd b/src/Boss/SlimeBoss/States/Motion/Stagger.gd deleted file mode 100644 index 05d8da0..0000000 --- a/src/Boss/SlimeBoss/States/Motion/Stagger.gd +++ /dev/null @@ -1,4 +0,0 @@ -extends "res://Overlap/StateMachine/State.gd" - -func enter(): - print("stagger state") diff --git a/src/Boss/SlimeBoss/States/Motion/Wander.gd b/src/Boss/SlimeBoss/States/Motion/Wander.gd deleted file mode 100644 index c0c535b..0000000 --- a/src/Boss/SlimeBoss/States/Motion/Wander.gd +++ /dev/null @@ -1,4 +0,0 @@ -extends "res://Overlap/StateMachine/State.gd" - -func enter(): - print("wander state") diff --git a/src/Boss/SlimeBoss/States/Roam/MoveToRandomPosition.gd b/src/Boss/SlimeBoss/States/Roam/MoveToRandomPosition.gd new file mode 100644 index 0000000..16908d7 --- /dev/null +++ b/src/Boss/SlimeBoss/States/Roam/MoveToRandomPosition.gd @@ -0,0 +1,34 @@ +extends "res://Overlap/StateMachine/State.gd" + +export(float) var ARRIVE_DISTANCE = 6.0 +export(float) var SLOW_RADIUS = 200.0 +export(float) var MASS = 4.0 +export(float) var MAX_SPEED = 300.0 +export(float) var ROAM_RADIUS = 150.0 + + + +var target_position = Vector2() +var start_position = Vector2() +var velocity = Vector2() + +func enter(): + start_position = get_parent().start_position + target_position = calculate_new_target_position() + owner.get_node('AnimationPlayer').play('move') + + +func update(delta): + velocity = Steering.arrive_to(velocity, owner.global_position, target_position, MASS, SLOW_RADIUS, MAX_SPEED) + owner.move_and_slide(velocity) + + if owner.global_position.distance_to(target_position) < ARRIVE_DISTANCE: + emit_signal('finished') + + +func calculate_new_target_position(): + randomize() + var random_angle = randf() * 2 * PI + randomize() + var random_radius = (randf() * ROAM_RADIUS) / 2 + ROAM_RADIUS / 2 + return start_position + Vector2(cos(random_angle) * random_radius, sin(random_angle) * random_radius) diff --git a/src/Boss/SlimeBoss/States/Roam/RoamSequence.gd b/src/Boss/SlimeBoss/States/Roam/RoamSequence.gd new file mode 100644 index 0000000..3b4087f --- /dev/null +++ b/src/Boss/SlimeBoss/States/Roam/RoamSequence.gd @@ -0,0 +1,15 @@ +extends "res://Overlap/StateMachine/SequenceState.gd" + +var start_position = Vector2() + +func enter(): + start_position = owner.global_position + .enter() + + +func exit(): + .exit() + + +func update(delta): + .update(delta) diff --git a/src/Boss/SlimeBoss/States/Roam/Wait.gd b/src/Boss/SlimeBoss/States/Roam/Wait.gd new file mode 100644 index 0000000..dfc5be8 --- /dev/null +++ b/src/Boss/SlimeBoss/States/Roam/Wait.gd @@ -0,0 +1,12 @@ +extends "res://Overlap/StateMachine/State.gd" + +func enter(): + owner.get_node('AnimationPlayer').play('idle') + $Timer.start() + +func update(delta): + if $Timer.time_left <= 0.0: + emit_signal('finished') + +func exit(): + $Timer.stop() diff --git a/src/Debug/BossStateDisplay.gd b/src/Debug/BossStateDisplay.gd new file mode 100644 index 0000000..41d8ed8 --- /dev/null +++ b/src/Debug/BossStateDisplay.gd @@ -0,0 +1,8 @@ +extends Panel + +func _on_SlimeBoss_state_changed(new_state_name): + $VBoxContainer/State.text = new_state_name + + +func _on_SlimeBoss_phase_changed(new_phase_name): + $VBoxContainer/Phase.text = "Phase: " + new_phase_name diff --git a/src/Overlap/StateMachine/SequenceState.gd b/src/Overlap/StateMachine/SequenceState.gd new file mode 100644 index 0000000..e9e68e7 --- /dev/null +++ b/src/Overlap/StateMachine/SequenceState.gd @@ -0,0 +1,41 @@ +extends 'State.gd' + +var state_active = null + + +func _ready(): + for child in get_children(): + child.connect('finished', self, '_on_state_active_finished') + + +func enter(): + state_active = get_child(0) + state_active.enter() + + +func exit(): + state_active = null + + +func update(delta): + state_active.update(delta) + + +func _on_animation_finished(anim_name): + state_active._on_animation_finished(anim_name) + + +func _on_state_active_finished(): + go_to_next_state_in_sequence() + + +func go_to_next_state_in_sequence(): + state_active.exit() + + var new_state_index = (state_active.get_index() + 1) % get_child_count() + if new_state_index == 0: + emit_signal('finished') + return + state_active = get_child(new_state_index) + + state_active.enter() diff --git a/src/Player/Player.tscn b/src/Player/Player.tscn index beecd07..553af83 100644 --- a/src/Player/Player.tscn +++ b/src/Player/Player.tscn @@ -626,7 +626,7 @@ font_data = ExtResource( 6 ) [node name="Player" type="KinematicBody2D" groups=[ "hero", ]] -collision_mask = 10 +collision_mask = 14 script = ExtResource( 1 ) FRICTION = 270 diff --git a/src/World.tscn b/src/World.tscn index fbcf33a..17e6dcd 100644 --- a/src/World.tscn +++ b/src/World.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=11 format=2] +[gd_scene load_steps=13 format=2] [ext_resource path="res://Player/Player.tscn" type="PackedScene" id=1] [ext_resource path="res://World.gd" type="Script" id=2] @@ -8,7 +8,9 @@ [ext_resource path="res://Menus/DialogueBox/DialogueBox.tscn" type="PackedScene" id=6] [ext_resource path="res://Maps/Background/Background.tscn" type="PackedScene" id=7] [ext_resource path="res://Boss/SlimeBoss/SlimeBoss.tscn" type="PackedScene" id=8] +[ext_resource path="res://Debug/BossStateDisplay.gd" type="Script" id=9] [ext_resource path="res://Objects/Bonfire/Bonfire.tscn" type="PackedScene" id=10] +[ext_resource path="res://Fonts/Harmonic/Harmonic12.tres" type="DynamicFont" id=11] [ext_resource path="res://Maps/Grid.tscn" type="PackedScene" id=18] [node name="World" type="Node2D"] @@ -21,10 +23,10 @@ region_enabled = true region_rect = Rect2( 0, 0, 1280, 720 ) [node name="Background" parent="." instance=ExtResource( 7 )] -frame = 24 +frame = 49 [node name="FloorTileMap" type="TileMap" parent="."] -modulate = Color( 1, 1, 1, 0.454902 ) +visible = false position = Vector2( 16, 16 ) tile_set = ExtResource( 3 ) cell_size = Vector2( 32, 32 ) @@ -38,18 +40,20 @@ __meta__ = { } [node name="YSort" type="YSort" parent="."] -position = Vector2( 152, 120 ) [node name="Bonfire" parent="YSort" instance=ExtResource( 10 )] position = Vector2( 265.543, -16 ) [node name="Player" parent="YSort" instance=ExtResource( 1 )] -position = Vector2( 168, -12.7226 ) +position = Vector2( 344, 125.768 ) scale = Vector2( 2, 2 ) debug = true ROLL_SPEED = 140 FRICTION = 200 +[node name="SlimeBoss" parent="YSort" instance=ExtResource( 8 )] +position = Vector2( 104, 80 ) + [node name="Grid" parent="." instance=ExtResource( 18 )] [node name="CanvasLayer" type="CanvasLayer" parent="."] @@ -60,5 +64,46 @@ visible = false [node name="DragNDropUI" parent="CanvasLayer" instance=ExtResource( 5 )] ObjectParent = NodePath("../..") -[node name="SlimeBoss" parent="." instance=ExtResource( 8 )] -position = Vector2( 88, 75.8131 ) +[node name="DebugInterface" type="Control" parent="CanvasLayer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="BossStateDisplay" type="Panel" parent="CanvasLayer/DebugInterface"] +anchor_left = 1.0 +anchor_right = 1.0 +margin_left = -80.0 +margin_bottom = 60.0 +script = ExtResource( 9 ) + +[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/DebugInterface/BossStateDisplay"] +margin_right = 40.0 +margin_bottom = 40.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Title" type="Label" parent="CanvasLayer/DebugInterface/BossStateDisplay/VBoxContainer"] +margin_right = 40.0 +margin_bottom = 12.0 +custom_fonts/font = ExtResource( 11 ) +text = "Boss" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Phase" type="Label" parent="CanvasLayer/DebugInterface/BossStateDisplay/VBoxContainer"] +margin_top = 16.0 +margin_right = 40.0 +margin_bottom = 28.0 +custom_fonts/font = ExtResource( 11 ) + +[node name="State" type="Label" parent="CanvasLayer/DebugInterface/BossStateDisplay/VBoxContainer"] +margin_top = 32.0 +margin_right = 40.0 +margin_bottom = 44.0 +custom_fonts/font = ExtResource( 11 ) +[connection signal="phase_changed" from="YSort/SlimeBoss" to="CanvasLayer/DebugInterface/BossStateDisplay" method="_on_SlimeBoss_phase_changed"] +[connection signal="state_changed" from="YSort/SlimeBoss" to="CanvasLayer/DebugInterface/BossStateDisplay" method="_on_SlimeBoss_state_changed"] diff --git a/src/project.godot b/src/project.godot index 232909c..4492c03 100644 --- a/src/project.godot +++ b/src/project.godot @@ -57,6 +57,7 @@ config/icon="res://icon.png" [autoload] SoundControler="*res://Autoloads/SoundControler.gd" +Steering="*res://Autoloads/Steering.gd" [display]