diff --git a/februarygodotgame/assets/graphics/enemies/slime_green.png b/februarygodotgame/assets/graphics/enemies/slime_green.png new file mode 100644 index 0000000..a21cb6f Binary files /dev/null and b/februarygodotgame/assets/graphics/enemies/slime_green.png differ diff --git a/februarygodotgame/assets/graphics/enemies/slime_green.png.import b/februarygodotgame/assets/graphics/enemies/slime_green.png.import new file mode 100644 index 0000000..3a4a4c5 --- /dev/null +++ b/februarygodotgame/assets/graphics/enemies/slime_green.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dh1ujlbcmhclf" +path="res://.godot/imported/slime_green.png-5261ffd1254c816fe62b35227a9aa11d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/enemies/slime_green.png" +dest_files=["res://.godot/imported/slime_green.png-5261ffd1254c816fe62b35227a9aa11d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/februarygodotgame/assets/graphics/pickups/coin.png b/februarygodotgame/assets/graphics/pickups/coin.png new file mode 100644 index 0000000..01ae33d Binary files /dev/null and b/februarygodotgame/assets/graphics/pickups/coin.png differ diff --git a/februarygodotgame/assets/graphics/pickups/coin.png.import b/februarygodotgame/assets/graphics/pickups/coin.png.import new file mode 100644 index 0000000..f639ca9 --- /dev/null +++ b/februarygodotgame/assets/graphics/pickups/coin.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cajyspdxdqvrt" +path="res://.godot/imported/coin.png-f0b33289d8d72c34d5a0c76da4c0f19c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/pickups/coin.png" +dest_files=["res://.godot/imported/coin.png-f0b33289d8d72c34d5a0c76da4c0f19c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/februarygodotgame/assets/graphics/player/hurt/Player Hurt 48x48.png b/februarygodotgame/assets/graphics/player/hurt/Player Hurt 48x48.png new file mode 100644 index 0000000..57d8783 Binary files /dev/null and b/februarygodotgame/assets/graphics/player/hurt/Player Hurt 48x48.png differ diff --git a/februarygodotgame/assets/graphics/player/hurt/Player Hurt 48x48.png.import b/februarygodotgame/assets/graphics/player/hurt/Player Hurt 48x48.png.import new file mode 100644 index 0000000..efcd72c --- /dev/null +++ b/februarygodotgame/assets/graphics/player/hurt/Player Hurt 48x48.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://k4bjxg6agcc1" +path="res://.godot/imported/Player Hurt 48x48.png-a720e51cb19103e76b22ab6c1b81302d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/player/hurt/Player Hurt 48x48.png" +dest_files=["res://.godot/imported/Player Hurt 48x48.png-a720e51cb19103e76b22ab6c1b81302d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/februarygodotgame/project.godot b/februarygodotgame/project.godot index 146b26d..eacbf1f 100644 --- a/februarygodotgame/project.godot +++ b/februarygodotgame/project.godot @@ -15,6 +15,10 @@ run/main_scene="res://scenes/game.tscn" config/features=PackedStringArray("4.3", "Forward Plus") config/icon="res://icon.svg" +[autoload] + +Gamecontroller="*res://scripts/gamecontroller.gd" + [display] window/size/viewport_width=320 @@ -52,3 +56,7 @@ shoot={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":77,"key_label":0,"unicode":109,"location":0,"echo":false,"script":null) ] } + +[rendering] + +textures/canvas_textures/default_texture_filter=0 diff --git a/februarygodotgame/scenes/coin.tscn b/februarygodotgame/scenes/coin.tscn new file mode 100644 index 0000000..b002562 --- /dev/null +++ b/februarygodotgame/scenes/coin.tscn @@ -0,0 +1,113 @@ +[gd_scene load_steps=17 format=3 uid="uid://bnaxehsgbon7b"] + +[ext_resource type="Script" path="res://scripts/coin.gd" id="1_n82qg"] +[ext_resource type="Texture2D" uid="uid://cajyspdxdqvrt" path="res://assets/graphics/pickups/coin.png" id="1_onkrr"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_dphy6"] +atlas = ExtResource("1_onkrr") +region = Rect2(0, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7b10m"] +atlas = ExtResource("1_onkrr") +region = Rect2(16, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xs4jt"] +atlas = ExtResource("1_onkrr") +region = Rect2(32, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_45bjm"] +atlas = ExtResource("1_onkrr") +region = Rect2(48, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_i4t8m"] +atlas = ExtResource("1_onkrr") +region = Rect2(64, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wblju"] +atlas = ExtResource("1_onkrr") +region = Rect2(80, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fmgro"] +atlas = ExtResource("1_onkrr") +region = Rect2(96, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1irob"] +atlas = ExtResource("1_onkrr") +region = Rect2(112, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1lsfs"] +atlas = ExtResource("1_onkrr") +region = Rect2(128, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_x3nrd"] +atlas = ExtResource("1_onkrr") +region = Rect2(144, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ckwn3"] +atlas = ExtResource("1_onkrr") +region = Rect2(160, 0, 16, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4ulsn"] +atlas = ExtResource("1_onkrr") +region = Rect2(176, 0, 16, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_ybyt4"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_dphy6") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7b10m") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xs4jt") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_45bjm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_i4t8m") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_wblju") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fmgro") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1irob") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1lsfs") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_x3nrd") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ckwn3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4ulsn") +}], +"loop": true, +"name": &"default", +"speed": 12.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_lf8sj"] + +[node name="Area2D" type="Area2D"] +script = ExtResource("1_n82qg") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +sprite_frames = SubResource("SpriteFrames_ybyt4") +autoplay = "default" +frame = 7 +frame_progress = 0.986941 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +scale = Vector2(0.52, 0.48) +shape = SubResource("CircleShape2D_lf8sj") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/februarygodotgame/scenes/game.tscn b/februarygodotgame/scenes/game.tscn index 2338c77..970ea5f 100644 --- a/februarygodotgame/scenes/game.tscn +++ b/februarygodotgame/scenes/game.tscn @@ -1,6 +1,5 @@ -[gd_scene load_steps=22 format=4 uid="uid://dhopuj38ic6dp"] +[gd_scene load_steps=23 format=4 uid="uid://dhopuj38ic6dp"] -[ext_resource type="Script" path="res://scripts/gamecontroller.gd" id="1_dasmg"] [ext_resource type="Texture2D" uid="uid://bw5fn1obrn72j" path="res://assets/graphics/Terrain (32x32).png" id="2_5p4fh"] [ext_resource type="PackedScene" uid="uid://dgos05617rcuq" path="res://scenes/trigger.tscn" id="2_070us"] [ext_resource type="Texture2D" uid="uid://dc4vpnxnt6o81" path="res://assets/graphics/background/block_320x180.png" id="2_cns10"] @@ -14,6 +13,8 @@ [ext_resource type="Texture2D" uid="uid://bayy427kevwri" path="res://assets/graphics/terrains/mushroom_32x32.png" id="4_ycvri"] [ext_resource type="Script" path="res://scripts/scene_manager.gd" id="5_6wvkt"] [ext_resource type="Texture2D" uid="uid://dtahbeuie3ny5" path="res://assets/graphics/background/rocks.png" id="5_nn0tt"] +[ext_resource type="PackedScene" uid="uid://bnaxehsgbon7b" path="res://scenes/coin.tscn" id="14_1kmpe"] +[ext_resource type="PackedScene" uid="uid://be2vjlkq6yqkg" path="res://scenes/slime.tscn" id="15_bauox"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_tg5kv"] texture = ExtResource("2_5p4fh") @@ -390,7 +391,6 @@ size = Vector2(70, 26) size = Vector2(20, 46) [node name="Game" type="Node2D"] -script = ExtResource("1_dasmg") [node name="sky" type="Parallax2D" parent="."] repeat_size = Vector2(320, 180) @@ -489,3 +489,32 @@ effect = "powerup" position = Vector2(0, -13) shape = SubResource("RectangleShape2D_ape5f") debug_color = Color(0.644817, 0.359472, 0.952285, 0.42) + +[node name="coins" type="Node2D" parent="."] + +[node name="Area2D" parent="coins" instance=ExtResource("14_1kmpe")] +position = Vector2(416, 326) + +[node name="Area2D2" parent="coins" instance=ExtResource("14_1kmpe")] +position = Vector2(479, 416) +scale = Vector2(0.741067, 0.54744) + +[node name="Area2D3" parent="coins" instance=ExtResource("14_1kmpe")] +position = Vector2(440, 323) + +[node name="Area2D4" parent="coins" instance=ExtResource("14_1kmpe")] +position = Vector2(385, 324) + +[node name="Area2D5" parent="coins" instance=ExtResource("14_1kmpe")] +position = Vector2(212, 423) + +[node name="badguys" type="Node2D" parent="."] + +[node name="Area2D" parent="badguys" instance=ExtResource("15_bauox")] +position = Vector2(404, 340) + +[node name="Area2D2" parent="badguys" instance=ExtResource("15_bauox")] +position = Vector2(211, 468) + +[node name="Area2D3" parent="badguys" instance=ExtResource("15_bauox")] +position = Vector2(491, 436) diff --git a/februarygodotgame/scenes/level2.tscn b/februarygodotgame/scenes/level2.tscn index 881d6f8..ef3d9b6 100644 --- a/februarygodotgame/scenes/level2.tscn +++ b/februarygodotgame/scenes/level2.tscn @@ -425,7 +425,7 @@ texture = ExtResource("5_5wuxb") [node name="TileMapLayer" type="TileMapLayer" parent="."] texture_filter = 1 -tile_map_data = PackedByteArray("AAAAABEAAQAAAAAAAAABABEAAQABAAAAAAACABEAAQABAAAAAAAEABEAAQABAAAAAAADABEAAQABAAAAAAAFABEAAQABAAAAAAAHABEAAQABAAAAAAAGABEAAQABAAAAAAAMABEAAQABAAAAAAALABEAAQABAAAAAAANABEAAQABAAAAAAAOABEAAQABAAAAAAAPABEAAQABAAAAAAAQABEAAQABAAAAAAARABEAAQABAAAAAAASABEAAQABAAAAAAATABEAAQABAAAAAAAUABEAAQABAAAAAAAVABEAAQABAAAAAAAWABEAAQABAAAAAAAXABEAAQAPAAEAAAAYABEAAQAGAAAAAAAZABEAAQAGAAAAAAAaABEAAQAGAAAAAAAbABEAAQAGAAAAAAAIABEAAQABAAAAAAAJABEAAQABAAAAAAAKABEAAQABAAAAAAAcABEAAQAGAAAAAAAdABEAAQAKAAAAAAAeABEAAQABAAAAAAAfABEAAQABAAAAAAACAA8AAQAAAAQAAAADAA8AAQABAAQAAAAEAA8AAQABAAQAAAAFAA8AAQABAAQAAAAGAA8AAQABAAQAAAAHAA8AAQACAAQAAAAAABIAAQAAAAIAAAABABIAAQABAAIAAAACABIAAQABAAIAAAADABIAAQABAAIAAAAEABIAAQABAAIAAAAFABIAAQABAAIAAAAGABIAAQABAAIAAAAHABIAAQABAAIAAAAIABIAAQABAAIAAAAJABIAAQABAAIAAAAKABIAAQABAAIAAAALABIAAQABAAIAAAAMABIAAQABAAIAAAANABIAAQABAAIAAAAOABIAAQABAAIAAAAPABIAAQABAAIAAAAQABIAAQABAAIAAAARABIAAQABAAIAAAASABIAAQABAAIAAAATABIAAQABAAIAAAAUABIAAQABAAIAAAAVABIAAQABAAIAAAAWABIAAQABAAIAAAAXABIAAQABAAIAAAAYABIAAQABAAIAAAAZABIAAQABAAIAAAAaABIAAQABAAIAAAAbABIAAQABAAIAAAAcABIAAQABAAIAAAAdABIAAQABAAIAAAAeABIAAQABAAIAAAAfABIAAQABAAIAAAAgABIAAQABAAIAAAAgABEAAQABAAAAAAAhABEAAQACAAAAAAAhABIAAQACAAIAAAAAABAAAgAAAAAAAAABABAAAgAAAAAAAAACABAAAgAAAAAAAAADABAAAgAAAAAAAAAEABAAAgAAAAAAAAAFABAAAgAAAAAAAAAGABAAAgAAAAAAAAAHABAAAgAAAAAAAAAIABAAAgAAAAAAAAAJABAAAgAAAAAAAAAKABAAAwAAAAEAAAALABAAAgAAAAAAAAAMABAAAgAAAAAAAAANABAAAgAAAAAAAAAOABAAAgAAAAAAAAAPABAAAgAAAAAAAAAQABAAAgAAAAAAAAARABAAAgAAAAAAAAASABAAAwAAAAEAAAATABAAAgAAAAAAAAAUABAAAgAAAAAAAAAVABAAAgAAAAAAAAACAA4AAgAAAAAAAAADAA4AAgAAAAAAAAAEAA4AAgAAAAAAAAAFAA4AAwAAAAEAAAAGAA4AAgAAAAAAAAAHAA4AAwAAAAEAAAAKAA8AAwAAAAAAAAASAA8AAwAAAAAAAAAXAA8AAwAAAAEAAAAZAA0AAwAAAAAAAAAFAA0AAwAAAAAAAAAHAA0AAwAAAAAAAAA=") +tile_map_data = PackedByteArray("AAAAABEAAQABAAAAAAABABEAAQABAAAAAAACABEAAQABAAAAAAAEABEAAQABAAAAAAADABEAAQABAAAAAAAFABEAAQABAAAAAAAHABEAAQABAAAAAAAGABEAAQABAAAAAAAMABEAAQABAAAAAAALABEAAQABAAAAAAANABEAAQABAAAAAAAOABEAAQABAAAAAAAPABEAAQABAAAAAAAQABEAAQABAAAAAAARABEAAQABAAAAAAASABEAAQABAAAAAAATABEAAQABAAAAAAAUABEAAQABAAAAAAAVABEAAQABAAAAAAAWABEAAQABAAAAAAAXABEAAQABAAAAAAAYABEAAQABAAAAAAAZABEAAQABAAAAAAAaABEAAQABAAAAAAAbABEAAQABAAAAAAAIABEAAQABAAAAAAAJABEAAQABAAAAAAAKABEAAQABAAAAAAAcABEAAQABAAAAAAAdABEAAQABAAAAAAAeABEAAQABAAAAAAAfABEAAQABAAAAAAACAA8AAQAAAAQAAAADAA8AAQABAAQAAAAEAA8AAQABAAQAAAAFAA8AAQABAAQAAAAGAA8AAQABAAQAAAAHAA8AAQACAAQAAAAAABIAAQAAAAIAAAABABIAAQABAAIAAAACABIAAQABAAIAAAADABIAAQABAAIAAAAEABIAAQABAAIAAAAFABIAAQABAAIAAAAGABIAAQABAAIAAAAHABIAAQABAAIAAAAIABIAAQABAAIAAAAJABIAAQABAAIAAAAKABIAAQABAAIAAAALABIAAQABAAIAAAAMABIAAQABAAIAAAANABIAAQABAAIAAAAOABIAAQABAAIAAAAPABIAAQABAAIAAAAQABIAAQABAAIAAAARABIAAQABAAIAAAASABIAAQABAAIAAAATABIAAQABAAIAAAAUABIAAQABAAIAAAAVABIAAQABAAIAAAAWABIAAQABAAIAAAAXABIAAQABAAIAAAAYABIAAQABAAIAAAAZABIAAQABAAIAAAAaABIAAQABAAIAAAAbABIAAQABAAIAAAAcABIAAQABAAIAAAAdABIAAQABAAIAAAAeABIAAQABAAIAAAAfABIAAQABAAIAAAAgABIAAQABAAIAAAAgABEAAQABAAAAAAAhABEAAQACAAAAAAAhABIAAQACAAIAAAAAABAAAgAAAAAAAAABABAAAgAAAAAAAAACABAAAgAAAAAAAAADABAAAgAAAAAAAAAEABAAAgAAAAAAAAAFABAAAgAAAAAAAAAGABAAAgAAAAAAAAAHABAAAgAAAAAAAAAIABAAAgAAAAAAAAAJABAAAgAAAAAAAAAKABAAAwAAAAEAAAALABAAAgAAAAAAAAAMABAAAgAAAAAAAAANABAAAgAAAAAAAAAOABAAAgAAAAAAAAAPABAAAgAAAAAAAAAQABAAAgAAAAAAAAARABAAAgAAAAAAAAASABAAAwAAAAEAAAATABAAAgAAAAAAAAAUABAAAgAAAAAAAAAVABAAAgAAAAAAAAACAA4AAgAAAAAAAAADAA4AAgAAAAAAAAAEAA4AAgAAAAAAAAAFAA4AAwAAAAEAAAAGAA4AAgAAAAAAAAAHAA4AAwAAAAEAAAAKAA8AAwAAAAAAAAASAA8AAwAAAAAAAAAXAA8AAwAAAAEAAAAZAA0AAwAAAAAAAAAFAA0AAwAAAAAAAAAHAA0AAwAAAAAAAAD//xEAAQABAAAAAAD+/xEAAQABAAAAAAD9/xEAAQABAAAAAAD8/xEAAQABAAAAAAD7/xEAAQABAAAAAAD6/xEAAQABAAAAAAD5/xEAAQABAAAAAAD4/xEAAQABAAAAAAA=") tile_set = SubResource("TileSet_72044") [node name="Level" type="Node2D" parent="."] diff --git a/februarygodotgame/scenes/level3.tscn b/februarygodotgame/scenes/level3.tscn new file mode 100644 index 0000000..10929a5 --- /dev/null +++ b/februarygodotgame/scenes/level3.tscn @@ -0,0 +1,491 @@ +[gd_scene load_steps=22 format=4 uid="uid://beitx0mk6eyc4"] + +[ext_resource type="Script" path="res://scripts/gamecontroller.gd" id="1_78qsb"] +[ext_resource type="Texture2D" uid="uid://dc4vpnxnt6o81" path="res://assets/graphics/background/block_320x180.png" id="2_87wyn"] +[ext_resource type="Texture2D" uid="uid://de0k6ggqmyarc" path="res://assets/graphics/background/forestbackground(1).png" id="3_y415o"] +[ext_resource type="Texture2D" uid="uid://cusdfqf5qg3v7" path="res://assets/graphics/background/shrubs.png" id="4_vb15a"] +[ext_resource type="Texture2D" uid="uid://dtahbeuie3ny5" path="res://assets/graphics/background/rocks.png" id="5_wvvx0"] +[ext_resource type="Texture2D" uid="uid://bw5fn1obrn72j" path="res://assets/graphics/Terrain (32x32).png" id="6_peugl"] +[ext_resource type="Texture2D" uid="uid://dxxd2m86g1paf" path="res://assets/graphics/terrains/veg_32x32.png" id="7_054vd"] +[ext_resource type="Texture2D" uid="uid://bayy427kevwri" path="res://assets/graphics/terrains/mushroom_32x32.png" id="8_xlsvf"] +[ext_resource type="PackedScene" uid="uid://blcbdwowx2gr0" path="res://scenes/crate.tscn" id="9_ob62x"] +[ext_resource type="Script" path="res://scripts/crate.gd" id="10_hr8k8"] +[ext_resource type="PackedScene" uid="uid://du8aftivw4k25" path="res://scenes/player.tscn" id="11_pkdri"] +[ext_resource type="PackedScene" uid="uid://dwy0c50ndnu8k" path="res://scenes/bullet.tscn" id="12_yp2ju"] +[ext_resource type="Script" path="res://scripts/scene_manager.gd" id="13_5bsmw"] +[ext_resource type="PackedScene" uid="uid://dgos05617rcuq" path="res://scenes/trigger.tscn" id="14_c2c71"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_tg5kv"] +texture = ExtResource("6_peugl") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/terrain = 0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:0/0/terrains_peering_bit/right_side = 0 +0:0/0/terrains_peering_bit/bottom_right_corner = 0 +0:0/0/terrains_peering_bit/bottom_side = 0 +1:0/0 = 0 +1:0/0/terrain_set = 0 +1:0/0/terrain = 0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:0/0/terrains_peering_bit/right_side = 0 +1:0/0/terrains_peering_bit/bottom_right_corner = 0 +1:0/0/terrains_peering_bit/bottom_side = 0 +1:0/0/terrains_peering_bit/bottom_left_corner = 0 +1:0/0/terrains_peering_bit/left_side = 0 +2:0/0 = 0 +2:0/0/terrain_set = 0 +2:0/0/terrain = 0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:0/0/terrains_peering_bit/bottom_side = 0 +2:0/0/terrains_peering_bit/bottom_left_corner = 0 +2:0/0/terrains_peering_bit/left_side = 0 +4:0/0 = 0 +4:0/0/terrain_set = 0 +4:0/0/terrain = 0 +4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:0/0/terrains_peering_bit/bottom_side = 0 +6:0/0 = 0 +6:0/0/terrain_set = 0 +6:0/0/terrain = 0 +6:0/0/terrains_peering_bit/right_side = 0 +6:0/0/terrains_peering_bit/bottom_side = 0 +6:0/0/terrains_peering_bit/bottom_left_corner = 0 +6:0/0/terrains_peering_bit/left_side = 0 +6:0/0/terrains_peering_bit/top_left_corner = 0 +6:0/0/terrains_peering_bit/top_side = 0 +6:0/0/terrains_peering_bit/top_right_corner = 0 +7:0/0 = 0 +7:0/0/terrain_set = 0 +7:0/0/terrain = 0 +7:0/0/terrains_peering_bit/right_side = 0 +7:0/0/terrains_peering_bit/bottom_right_corner = 0 +7:0/0/terrains_peering_bit/bottom_side = 0 +7:0/0/terrains_peering_bit/left_side = 0 +7:0/0/terrains_peering_bit/top_left_corner = 0 +7:0/0/terrains_peering_bit/top_side = 0 +7:0/0/terrains_peering_bit/top_right_corner = 0 +9:0/0 = 0 +9:0/0/terrain_set = 0 +9:0/0/terrain = 0 +9:0/0/terrains_peering_bit/right_side = 0 +9:0/0/terrains_peering_bit/bottom_right_corner = 0 +9:0/0/terrains_peering_bit/bottom_side = 0 +9:0/0/terrains_peering_bit/bottom_left_corner = 0 +9:0/0/terrains_peering_bit/left_side = 0 +9:0/0/terrains_peering_bit/top_side = 0 +10:0/0 = 0 +10:0/0/terrain_set = 0 +10:0/0/terrain = 0 +10:0/0/terrains_peering_bit/right_side = 0 +10:0/0/terrains_peering_bit/bottom_side = 0 +10:0/0/terrains_peering_bit/bottom_left_corner = 0 +10:0/0/terrains_peering_bit/left_side = 0 +10:0/0/terrains_peering_bit/top_left_corner = 0 +10:0/0/terrains_peering_bit/top_side = 0 +12:0/0 = 0 +12:0/0/terrain_set = 0 +12:0/0/terrain = 0 +12:0/0/terrains_peering_bit/right_side = 0 +12:0/0/terrains_peering_bit/bottom_right_corner = 0 +12:0/0/terrains_peering_bit/bottom_side = 0 +12:0/0/terrains_peering_bit/left_side = 0 +12:0/0/terrains_peering_bit/top_side = 0 +13:0/0 = 0 +13:0/0/terrain_set = 0 +13:0/0/terrain = 0 +13:0/0/terrains_peering_bit/right_side = 0 +13:0/0/terrains_peering_bit/bottom_side = 0 +13:0/0/terrains_peering_bit/bottom_left_corner = 0 +13:0/0/terrains_peering_bit/left_side = 0 +13:0/0/terrains_peering_bit/top_side = 0 +15:0/0 = 0 +15:0/0/terrain_set = 0 +15:0/0/terrain = 0 +15:0/0/terrains_peering_bit/right_side = 0 +15:0/0/terrains_peering_bit/bottom_side = 0 +15:0/0/terrains_peering_bit/left_side = 0 +15:0/0/terrains_peering_bit/top_side = 0 +0:1/0 = 0 +0:1/0/terrain_set = 0 +0:1/0/terrain = 0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:1/0/terrains_peering_bit/right_side = 0 +0:1/0/terrains_peering_bit/bottom_right_corner = 0 +0:1/0/terrains_peering_bit/bottom_side = 0 +0:1/0/terrains_peering_bit/top_side = 0 +0:1/0/terrains_peering_bit/top_right_corner = 0 +1:1/0 = 0 +2:1/0 = 0 +2:1/0/terrain_set = 0 +2:1/0/terrain = 0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:1/0/terrains_peering_bit/bottom_side = 0 +2:1/0/terrains_peering_bit/bottom_left_corner = 0 +2:1/0/terrains_peering_bit/left_side = 0 +2:1/0/terrains_peering_bit/top_left_corner = 0 +2:1/0/terrains_peering_bit/top_side = 0 +4:1/0 = 0 +4:1/0/terrain_set = 0 +4:1/0/terrain = 0 +4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +4:1/0/terrains_peering_bit/bottom_side = 0 +4:1/0/terrains_peering_bit/top_side = 0 +6:1/0 = 0 +6:1/0/terrain_set = 0 +6:1/0/terrain = 0 +6:1/0/terrains_peering_bit/bottom_right_corner = 0 +6:1/0/terrains_peering_bit/bottom_side = 0 +6:1/0/terrains_peering_bit/bottom_left_corner = 0 +6:1/0/terrains_peering_bit/left_side = 0 +6:1/0/terrains_peering_bit/top_left_corner = 0 +6:1/0/terrains_peering_bit/top_side = 0 +7:1/0 = 0 +7:1/0/terrain_set = 0 +7:1/0/terrain = 0 +7:1/0/terrains_peering_bit/right_side = 0 +7:1/0/terrains_peering_bit/bottom_right_corner = 0 +7:1/0/terrains_peering_bit/bottom_side = 0 +7:1/0/terrains_peering_bit/bottom_left_corner = 0 +7:1/0/terrains_peering_bit/top_side = 0 +7:1/0/terrains_peering_bit/top_right_corner = 0 +9:1/0 = 0 +9:1/0/terrain_set = 0 +9:1/0/terrain = 0 +9:1/0/terrains_peering_bit/right_side = 0 +9:1/0/terrains_peering_bit/bottom_right_corner = 0 +9:1/0/terrains_peering_bit/bottom_side = 0 +9:1/0/terrains_peering_bit/left_side = 0 +9:1/0/terrains_peering_bit/top_side = 0 +9:1/0/terrains_peering_bit/top_right_corner = 0 +10:1/0 = 0 +10:1/0/terrain_set = 0 +10:1/0/terrain = 0 +10:1/0/terrains_peering_bit/right_side = 0 +10:1/0/terrains_peering_bit/bottom_side = 0 +10:1/0/terrains_peering_bit/left_side = 0 +10:1/0/terrains_peering_bit/top_left_corner = 0 +10:1/0/terrains_peering_bit/top_side = 0 +10:1/0/terrains_peering_bit/top_right_corner = 0 +12:1/0 = 0 +12:1/0/terrain_set = 0 +12:1/0/terrain = 0 +12:1/0/terrains_peering_bit/right_side = 0 +12:1/0/terrains_peering_bit/bottom_side = 0 +12:1/0/terrains_peering_bit/left_side = 0 +12:1/0/terrains_peering_bit/top_side = 0 +12:1/0/terrains_peering_bit/top_right_corner = 0 +13:1/0 = 0 +13:1/0/terrain_set = 0 +13:1/0/terrain = 0 +13:1/0/terrains_peering_bit/right_side = 0 +13:1/0/terrains_peering_bit/bottom_side = 0 +13:1/0/terrains_peering_bit/left_side = 0 +13:1/0/terrains_peering_bit/top_left_corner = 0 +13:1/0/terrains_peering_bit/top_side = 0 +15:1/0 = 0 +15:1/0/terrain_set = 0 +15:1/0/terrain = 0 +15:1/0/terrains_peering_bit/right_side = 0 +15:1/0/terrains_peering_bit/bottom_side = 0 +15:1/0/terrains_peering_bit/bottom_left_corner = 0 +15:1/0/terrains_peering_bit/left_side = 0 +15:1/0/terrains_peering_bit/top_side = 0 +15:1/0/terrains_peering_bit/top_right_corner = 0 +16:1/0 = 0 +16:1/0/terrain_set = 0 +16:1/0/terrain = 0 +16:1/0/terrains_peering_bit/right_side = 0 +16:1/0/terrains_peering_bit/bottom_right_corner = 0 +16:1/0/terrains_peering_bit/bottom_side = 0 +16:1/0/terrains_peering_bit/left_side = 0 +16:1/0/terrains_peering_bit/top_left_corner = 0 +16:1/0/terrains_peering_bit/top_side = 0 +0:2/0 = 0 +0:2/0/terrain_set = 0 +0:2/0/terrain = 0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:2/0/terrains_peering_bit/right_side = 0 +0:2/0/terrains_peering_bit/top_side = 0 +0:2/0/terrains_peering_bit/top_right_corner = 0 +1:2/0 = 0 +1:2/0/terrain_set = 0 +1:2/0/terrain = 0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:2/0/terrains_peering_bit/right_side = 0 +1:2/0/terrains_peering_bit/left_side = 0 +1:2/0/terrains_peering_bit/top_left_corner = 0 +1:2/0/terrains_peering_bit/top_side = 0 +1:2/0/terrains_peering_bit/top_right_corner = 0 +2:2/0 = 0 +2:2/0/terrain_set = 0 +2:2/0/terrain = 0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:2/0/terrains_peering_bit/left_side = 0 +2:2/0/terrains_peering_bit/top_left_corner = 0 +2:2/0/terrains_peering_bit/top_side = 0 +4:2/0 = 0 +4:2/0/terrain_set = 0 +4:2/0/terrain = 0 +4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 5.5, 13.5, 13.25, 1.75, 16, -13, 13, -16, 5.25) +4:2/0/terrains_peering_bit/top_side = 0 +6:3/0 = 0 +6:3/0/terrain_set = 0 +6:3/0/terrain = 0 +6:3/0/terrains_peering_bit/right_side = 0 +6:3/0/terrains_peering_bit/bottom_side = 0 +6:3/0/terrains_peering_bit/top_side = 0 +6:3/0/terrains_peering_bit/top_right_corner = 0 +7:3/0 = 0 +7:3/0/terrain_set = 0 +7:3/0/terrain = 0 +7:3/0/terrains_peering_bit/bottom_side = 0 +7:3/0/terrains_peering_bit/left_side = 0 +7:3/0/terrains_peering_bit/top_left_corner = 0 +7:3/0/terrains_peering_bit/top_side = 0 +9:3/0 = 0 +9:3/0/terrain_set = 0 +9:3/0/terrain = 0 +9:3/0/terrains_peering_bit/right_side = 0 +9:3/0/terrains_peering_bit/bottom_side = 0 +9:3/0/terrains_peering_bit/bottom_left_corner = 0 +9:3/0/terrains_peering_bit/left_side = 0 +10:3/0 = 0 +10:3/0/terrain_set = 0 +10:3/0/terrain = 0 +10:3/0/terrains_peering_bit/right_side = 0 +10:3/0/terrains_peering_bit/bottom_right_corner = 0 +10:3/0/terrains_peering_bit/bottom_side = 0 +10:3/0/terrains_peering_bit/left_side = 0 +12:3/0 = 0 +12:3/0/terrain_set = 0 +12:3/0/terrain = 0 +12:3/0/terrains_peering_bit/right_side = 0 +12:3/0/terrains_peering_bit/bottom_side = 0 +12:3/0/terrains_peering_bit/top_side = 0 +13:3/0 = 0 +13:3/0/terrain_set = 0 +13:3/0/terrain = 0 +13:3/0/terrains_peering_bit/right_side = 0 +13:3/0/terrains_peering_bit/bottom_side = 0 +13:3/0/terrains_peering_bit/left_side = 0 +15:3/0 = 0 +15:3/0/terrain_set = 0 +15:3/0/terrain = 0 +15:3/0/terrains_peering_bit/right_side = 0 +15:3/0/terrains_peering_bit/bottom_side = 0 +16:3/0 = 0 +16:3/0/terrain_set = 0 +16:3/0/terrain = 0 +16:3/0/terrains_peering_bit/bottom_side = 0 +16:3/0/terrains_peering_bit/left_side = 0 +0:4/0 = 0 +0:4/0/terrain_set = 0 +0:4/0/terrain = 0 +0:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +0:4/0/terrains_peering_bit/right_side = 0 +1:4/0 = 0 +1:4/0/terrain_set = 0 +1:4/0/terrain = 0 +1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +1:4/0/terrains_peering_bit/right_side = 0 +1:4/0/terrains_peering_bit/left_side = 0 +2:4/0 = 0 +2:4/0/terrain_set = 0 +2:4/0/terrain = 0 +2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +2:4/0/terrains_peering_bit/left_side = 0 +4:4/0 = 0 +4:4/0/terrain_set = 0 +4:4/0/terrain = 0 +4:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16) +6:4/0 = 0 +6:4/0/terrain_set = 0 +6:4/0/terrain = 0 +6:4/0/terrains_peering_bit/bottom_right_corner = 0 +6:4/0/terrains_peering_bit/bottom_side = 0 +6:4/0/terrains_peering_bit/top_side = 0 +7:4/0 = 0 +7:4/0/terrain_set = 0 +7:4/0/terrain = 0 +7:4/0/terrains_peering_bit/bottom_side = 0 +7:4/0/terrains_peering_bit/bottom_left_corner = 0 +7:4/0/terrains_peering_bit/top_side = 0 +9:4/0 = 0 +9:4/0/terrain_set = 0 +9:4/0/terrain = 0 +9:4/0/terrains_peering_bit/right_side = 0 +9:4/0/terrains_peering_bit/left_side = 0 +9:4/0/terrains_peering_bit/top_left_corner = 0 +9:4/0/terrains_peering_bit/top_side = 0 +10:4/0 = 0 +10:4/0/terrain_set = 0 +10:4/0/terrain = 0 +10:4/0/terrains_peering_bit/right_side = 0 +10:4/0/terrains_peering_bit/left_side = 0 +10:4/0/terrains_peering_bit/top_side = 0 +10:4/0/terrains_peering_bit/top_right_corner = 0 +12:4/0 = 0 +12:4/0/terrain_set = 0 +12:4/0/terrain = 0 +12:4/0/terrains_peering_bit/right_side = 0 +12:4/0/terrains_peering_bit/left_side = 0 +12:4/0/terrains_peering_bit/top_side = 0 +13:4/0 = 0 +13:4/0/terrain_set = 0 +13:4/0/terrain = 0 +13:4/0/terrains_peering_bit/bottom_side = 0 +13:4/0/terrains_peering_bit/left_side = 0 +13:4/0/terrains_peering_bit/top_side = 0 +15:4/0 = 0 +15:4/0/terrain_set = 0 +15:4/0/terrain = 0 +15:4/0/terrains_peering_bit/right_side = 0 +15:4/0/terrains_peering_bit/top_side = 0 +16:4/0 = 0 +16:4/0/terrain_set = 0 +16:4/0/terrain = 0 +16:4/0/terrains_peering_bit/left_side = 0 +16:4/0/terrains_peering_bit/top_side = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_t1dyn"] +texture = ExtResource("7_054vd") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/terrain = 1 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_tr6ig"] +texture = ExtResource("8_xlsvf") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/terrain = 1 +0:0/0/terrains_peering_bit/bottom_side = 1 +0:1/0 = 0 +0:1/0/terrain_set = 0 +0:1/0/terrain = 1 +0:1/0/terrains_peering_bit/top_side = 1 + +[sub_resource type="TileSet" id="TileSet_72044"] +tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 1 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "ground" +terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +terrain_set_0/terrain_1/name = "vegetation 1" +terrain_set_0/terrain_1/color = Color(0.5, 0.4375, 0.25, 1) +terrain_set_1/mode = 0 +sources/1 = SubResource("TileSetAtlasSource_tg5kv") +sources/2 = SubResource("TileSetAtlasSource_t1dyn") +sources/3 = SubResource("TileSetAtlasSource_tr6ig") + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_uopew"] +size = Vector2(70, 26) + +[sub_resource type="CircleShape2D" id="CircleShape2D_8p7pp"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ape5f"] +size = Vector2(20, 46) + +[node name="Game" type="Node2D"] +script = ExtResource("1_78qsb") + +[node name="sky" type="Parallax2D" parent="."] +repeat_size = Vector2(320, 180) +metadata/_edit_group_ = true + +[node name="Sprite2D" type="Sprite2D" parent="sky"] +position = Vector2(160, 90) +texture = ExtResource("2_87wyn") + +[node name="farbg" type="Parallax2D" parent="."] +scroll_scale = Vector2(0.5, 1) +repeat_size = Vector2(320, 0) +metadata/_edit_group_ = true + +[node name="Sprite2D" type="Sprite2D" parent="farbg"] +position = Vector2(160, 460) +texture = ExtResource("3_y415o") + +[node name="midground" type="Parallax2D" parent="."] +repeat_size = Vector2(320, 0) + +[node name="Sprite2D" type="Sprite2D" parent="midground"] +position = Vector2(160, 460) +texture = ExtResource("4_vb15a") + +[node name="foreground" type="Parallax2D" parent="."] +repeat_size = Vector2(320, 0) + +[node name="Sprite2D" type="Sprite2D" parent="foreground"] +position = Vector2(160, 460) +texture = ExtResource("5_wvvx0") + +[node name="TileMapLayer" type="TileMapLayer" parent="."] +texture_filter = 1 +tile_map_data = PackedByteArray("AAAAABEAAQAAAAAAAAABABEAAQABAAAAAAACABEAAQABAAAAAAAEABEAAQABAAAAAAADABEAAQABAAAAAAAFABEAAQABAAAAAAAHABEAAQABAAAAAAAGABEAAQABAAAAAAAMABEAAQABAAAAAAALABEAAQABAAAAAAANABEAAQABAAAAAAAOABEAAQABAAAAAAAPABEAAQABAAAAAAAQABEAAQABAAAAAAARABEAAQABAAAAAAASABEAAQABAAAAAAATABEAAQABAAAAAAAUABEAAQABAAAAAAAVABEAAQABAAAAAAAWABEAAQABAAAAAAAXABEAAQAPAAEAAAAYABEAAQAGAAAAAAAZABEAAQAGAAAAAAAaABEAAQAGAAAAAAAbABEAAQAGAAAAAAAIABEAAQABAAAAAAAJABEAAQABAAAAAAAKABEAAQABAAAAAAAcABEAAQAGAAAAAAAdABEAAQAKAAAAAAAeABEAAQABAAAAAAAfABEAAQABAAAAAAACAA8AAQAAAAQAAAADAA8AAQABAAQAAAAEAA8AAQABAAQAAAAFAA8AAQABAAQAAAAGAA8AAQABAAQAAAAHAA8AAQACAAQAAAAAABIAAQAAAAIAAAABABIAAQABAAIAAAACABIAAQABAAIAAAADABIAAQABAAIAAAAEABIAAQABAAIAAAAFABIAAQABAAIAAAAGABIAAQABAAIAAAAHABIAAQABAAIAAAAIABIAAQABAAIAAAAJABIAAQABAAIAAAAKABIAAQABAAIAAAALABIAAQABAAIAAAAMABIAAQABAAIAAAANABIAAQABAAIAAAAOABIAAQABAAIAAAAPABIAAQABAAIAAAAQABIAAQABAAIAAAARABIAAQABAAIAAAASABIAAQABAAIAAAATABIAAQABAAIAAAAUABIAAQABAAIAAAAVABIAAQABAAIAAAAWABIAAQABAAIAAAAXABIAAQABAAIAAAAYABIAAQABAAIAAAAZABIAAQABAAIAAAAaABIAAQABAAIAAAAbABIAAQABAAIAAAAcABIAAQABAAIAAAAdABIAAQABAAIAAAAeABIAAQABAAIAAAAfABIAAQABAAIAAAAgABIAAQABAAIAAAAgABEAAQABAAAAAAAhABEAAQACAAAAAAAhABIAAQACAAIAAAAAABAAAgAAAAAAAAABABAAAgAAAAAAAAACABAAAgAAAAAAAAADABAAAgAAAAAAAAAEABAAAgAAAAAAAAAFABAAAgAAAAAAAAAGABAAAgAAAAAAAAAHABAAAgAAAAAAAAAIABAAAgAAAAAAAAAJABAAAgAAAAAAAAAKABAAAwAAAAEAAAALABAAAgAAAAAAAAAMABAAAgAAAAAAAAANABAAAgAAAAAAAAAOABAAAgAAAAAAAAAPABAAAgAAAAAAAAAQABAAAgAAAAAAAAARABAAAgAAAAAAAAASABAAAwAAAAEAAAATABAAAgAAAAAAAAAUABAAAgAAAAAAAAAVABAAAgAAAAAAAAACAA4AAgAAAAAAAAADAA4AAgAAAAAAAAAEAA4AAgAAAAAAAAAFAA4AAwAAAAEAAAAGAA4AAgAAAAAAAAAHAA4AAwAAAAEAAAAKAA8AAwAAAAAAAAASAA8AAwAAAAAAAAAXAA8AAwAAAAEAAAAZAA0AAwAAAAAAAAAFAA0AAwAAAAAAAAAHAA0AAwAAAAAAAAA=") +tile_set = SubResource("TileSet_72044") + +[node name="Level" type="Node2D" parent="."] +position = Vector2(-12, -3) + +[node name="StaticBody2D" type="StaticBody2D" parent="Level"] +position = Vector2(496, 447) +scale = Vector2(1.76, 0.589087) +metadata/_edit_group_ = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Level/StaticBody2D"] +position = Vector2(275.568, -460.034) +shape = SubResource("RectangleShape2D_uopew") + +[node name="crates" type="Node2D" parent="."] +position = Vector2(13, 53) + +[node name="crate1" parent="crates" instance=ExtResource("9_ob62x")] +position = Vector2(141, 371) +script = ExtResource("10_hr8k8") + +[node name="crate2" parent="crates" instance=ExtResource("9_ob62x")] +position = Vector2(699, 397) +script = ExtResource("10_hr8k8") + +[node name="crate3" parent="crates" instance=ExtResource("9_ob62x")] +position = Vector2(575, 177) +script = ExtResource("10_hr8k8") + +[node name="crate4" parent="crates" instance=ExtResource("9_ob62x")] +position = Vector2(217, 230) +script = ExtResource("10_hr8k8") + +[node name="CharacterBody2D" parent="." instance=ExtResource("11_pkdri")] +position = Vector2(338, 226) + +[node name="Area2D" parent="." instance=ExtResource("12_yp2ju")] +position = Vector2(330, 271) + +[node name="SceneManager" type="Node" parent="."] +unique_name_in_owner = true +script = ExtResource("13_5bsmw") + +[node name="triggers" type="Node2D" parent="."] +rotation = -0.0128695 + +[node name="Trigger" parent="triggers" instance=ExtResource("14_c2c71")] +position = Vector2(509.188, 532.597) +rotation = -1.90254 +effect = "destroy" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="triggers/Trigger"] +shape = SubResource("CircleShape2D_8p7pp") +debug_color = Color(0.622849, 0.37564, 0.95389, 0.42) + +[node name="powerup" parent="triggers" instance=ExtResource("14_c2c71")] +position = Vector2(597.12, 460.723) +effect = "powerup" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="triggers/powerup"] +position = Vector2(0, -13) +shape = SubResource("RectangleShape2D_ape5f") +debug_color = Color(0.644817, 0.359472, 0.952285, 0.42) diff --git a/februarygodotgame/scenes/player.tscn b/februarygodotgame/scenes/player.tscn index 0ae8e65..247c23c 100644 --- a/februarygodotgame/scenes/player.tscn +++ b/februarygodotgame/scenes/player.tscn @@ -1,12 +1,29 @@ -[gd_scene load_steps=28 format=3 uid="uid://du8aftivw4k25"] +[gd_scene load_steps=33 format=3 uid="uid://du8aftivw4k25"] [ext_resource type="Script" path="res://scripts/player.gd" id="1_p8gev"] [ext_resource type="Texture2D" uid="uid://70imyp6vsgvv" path="res://assets/graphics/player/idle/Player Idle 48x48.png" id="2_vqtu4"] +[ext_resource type="Texture2D" uid="uid://k4bjxg6agcc1" path="res://assets/graphics/player/hurt/Player Hurt 48x48.png" id="2_xllah"] [ext_resource type="Texture2D" uid="uid://5ger8sg6iqqm" path="res://assets/graphics/player/jump/player jump 48x48(1).png" id="3_k55ht"] [ext_resource type="Texture2D" uid="uid://crd320y5xhgwf" path="res://assets/graphics/player/run/player run 48x48(1).png" id="3_olacu"] [sub_resource type="CircleShape2D" id="CircleShape2D_a75m4"] +[sub_resource type="AtlasTexture" id="AtlasTexture_8md6c"] +atlas = ExtResource("2_xllah") +region = Rect2(0, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_kx2fk"] +atlas = ExtResource("2_xllah") +region = Rect2(48, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1qngi"] +atlas = ExtResource("2_xllah") +region = Rect2(96, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_lspvn"] +atlas = ExtResource("2_xllah") +region = Rect2(144, 0, 48, 48) + [sub_resource type="AtlasTexture" id="AtlasTexture_lxsaf"] atlas = ExtResource("2_vqtu4") region = Rect2(0, 0, 48, 48) @@ -95,6 +112,23 @@ region = Rect2(336, 0, 48, 48) animations = [{ "frames": [{ "duration": 1.0, +"texture": SubResource("AtlasTexture_8md6c") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_kx2fk") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1qngi") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_lspvn") +}], +"loop": false, +"name": &"hurt", +"speed": 12.0 +}, { +"frames": [{ +"duration": 1.0, "texture": SubResource("AtlasTexture_lxsaf") }, { "duration": 1.0, @@ -196,9 +230,8 @@ position = Vector2(-15, -10) texture_filter = 1 position = Vector2(0, -7) sprite_frames = SubResource("SpriteFrames_upnp5") -animation = &"jump" -autoplay = "jump" -frame = 2 -frame_progress = 1.0 +animation = &"hurt" [node name="Camera2D" type="Camera2D" parent="."] + +[connection signal="animation_finished" from="AnimatedSprite2D" to="." method="_on_animation_finished"] diff --git a/februarygodotgame/scenes/slime.tscn b/februarygodotgame/scenes/slime.tscn new file mode 100644 index 0000000..30772a4 --- /dev/null +++ b/februarygodotgame/scenes/slime.tscn @@ -0,0 +1,61 @@ +[gd_scene load_steps=9 format=3 uid="uid://be2vjlkq6yqkg"] + +[ext_resource type="Script" path="res://scripts/slime.gd" id="1_ni35c"] +[ext_resource type="Texture2D" uid="uid://dh1ujlbcmhclf" path="res://assets/graphics/enemies/slime_green.png" id="2_1uit2"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_25knt"] +atlas = ExtResource("2_1uit2") +region = Rect2(0, 24, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8g1ih"] +atlas = ExtResource("2_1uit2") +region = Rect2(24, 24, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_n5asy"] +atlas = ExtResource("2_1uit2") +region = Rect2(48, 24, 24, 24) + +[sub_resource type="AtlasTexture" id="AtlasTexture_moile"] +atlas = ExtResource("2_1uit2") +region = Rect2(72, 24, 24, 24) + +[sub_resource type="SpriteFrames" id="SpriteFrames_yl17c"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_25knt") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8g1ih") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_n5asy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_moile") +}], +"loop": true, +"name": &"idle", +"speed": 4.0 +}] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_7xwt3"] +size = Vector2(12, 12.3888) + +[node name="Area2D" type="Area2D"] +script = ExtResource("1_ni35c") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +texture_filter = 1 +sprite_frames = SubResource("SpriteFrames_yl17c") +animation = &"idle" +autoplay = "idle" +frame = 3 +frame_progress = 0.0536824 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0, 4.5) +scale = Vector2(1.25525, 1.21078) +shape = SubResource("RectangleShape2D_7xwt3") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/februarygodotgame/scripts/coin.gd b/februarygodotgame/scripts/coin.gd new file mode 100644 index 0000000..4dcaabe --- /dev/null +++ b/februarygodotgame/scripts/coin.gd @@ -0,0 +1,7 @@ +class_name Coin extends Area2D + +signal coinCollectedSignal(body, coin) + +func _on_body_entered(body: Node2D) -> void: + print("Coin collision") + coinCollectedSignal.emit(body, self) diff --git a/februarygodotgame/scripts/gamecontroller.gd b/februarygodotgame/scripts/gamecontroller.gd index 3c35e8c..569723f 100644 --- a/februarygodotgame/scripts/gamecontroller.gd +++ b/februarygodotgame/scripts/gamecontroller.gd @@ -3,12 +3,44 @@ class_name GameController extends Node2D #Game Data var totalCrates = 2 var cratesDestroyed = 0 +var coinsCollected = 0 +var totalCoinsAvailable = 0 + +var enemies = 0 +signal destroytSignal(body) +signal levelCompleteSignal(level) +signal playerHurtSignal(healthRemaining) +#level info +var timer:= Timer.new() +var levels = ["res://scenes/game.tscn","res://scenes/level2.tscn","res://scenes/level3.tscn"] +var timers = [20,15,25] +var currentLevel = 0 +var countdown = 0 + + +var player:Resource +var slime:Resource # Called when the node enters the scene tree for the first time. func _ready() -> void: - pass # Replace with function body. - - + player = load("res://scripts/res/playerStats.tres") + slime = load("res://scripts/res/slimeStats.tres") + + countdown = timers[currentLevel] + add_child(timer) + timer.wait_time = 1 + timer.one_shot = false + timer.connect("timeout", secondCounter) + timer.start() +func reset(): + countdown = timers[currentLevel] + +func secondCounter(): + + countdown -=1 + if countdown <=0: + print("YOU LOSE") + levelCompleteSignal.emit(levels[currentLevel]) # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass @@ -20,7 +52,7 @@ func _on_trigger_area_trigger(effect, body) -> void: "destroy": #write code to destroy if body is Crate: - %SceneManager.destroy(body) + destroytSignal.emit(body) cratesDestroyed +=1 "powerup": if body is Player: @@ -31,10 +63,37 @@ func bulletHit(body): print("Game controller knows bullet hit") if body is Crate: print("You hit a Crate") - cratesDestroyed +=1 - %SceneManager.destroy(body) + totalCrates -=1 + destroytSignal.emit(body) print("Crates Remaining :: "+str(totalCrates - cratesDestroyed)) + if totalCrates <= 0: + print("You won!!!") + currentLevel +=1 + if currentLevel >= levels.size(): + currentLevel = 0 + levelCompleteSignal.emit(levels[currentLevel]) func numberOfCrates(value): totalCrates = value print("Game Controller knows crates "+str(totalCrates)) +func numberOfCoins(value): + totalCoinsAvailable = value +func coinCollected(body, coin): + print("GC knows coin collected") + if body is Player: + #increase coins collected count + coinsCollected +=1 + destroytSignal.emit(coin) +func playerDamage(body, badguy): + if body is Player: + print("GC knows player taking damage") + print("Player health"+str(player.health)+"takes damage"+str(slime.meleeDamage)) + player.health -= slime.meleeDamage + if player.health > 0: + playerHurtSignal.emit(player.health) + else: + print("kill em") + +func numberOfBadguys(value): + enemies = value + diff --git a/februarygodotgame/scripts/player.gd b/februarygodotgame/scripts/player.gd index ed3446a..13b5d71 100644 --- a/februarygodotgame/scripts/player.gd +++ b/februarygodotgame/scripts/player.gd @@ -17,74 +17,88 @@ var isJumping = false @onready var right_target: Node2D = $rightTarget @onready var left_target: Node2D = $leftTarget -func _physics_process(delta: float) -> void: - # Add the gravity. - if not is_on_floor(): - velocity += get_gravity() * delta - else: - isJumping = false +var animPlaying = "idle" +var living = true - # Handle jump. - if Input.is_action_just_pressed("ui_accept") and is_on_floor(): - velocity.y = JUMP_VELOCITY - isJumping = true - playerGraphic.play("jump") +func _physics_process(delta: float) -> void: + if living and not animPlaying =="hurt": + # Add the gravity. + if not is_on_floor(): + velocity += get_gravity() * delta + else: + isJumping = false + + # Handle jump. + if Input.is_action_just_pressed("ui_accept") and is_on_floor(): + velocity.y = JUMP_VELOCITY + isJumping = true + playerGraphic.play("jump") + + # Get the input direction and handle the movement/deceleration. + # As good practice, you should replace UI actions with custom gameplay actions. + var direction := Input.get_axis("left", "right") + if Input.is_action_just_pressed("shove") && pushRightEnabled && faceLeft == false: + pushTarget.apply_central_impulse(Vector2(1,0) * PUSH_FORCE) + pushRightEnabled = false + if Input.is_action_just_pressed("shove") && pushLeftEnabled && faceLeft == true: + pushTarget.apply_central_impulse(Vector2(-1,0) * PUSH_FORCE) + pushLeftEnabled = false + # Shoot attack + if Input.is_action_just_pressed("shoot"): + if faceLeft == false: + %SceneManager.makeBullet(right_target.global_transform, 700) + if faceLeft == true: + %SceneManager.makeBullet(left_target.global_transform, -700) - # Get the input direction and handle the movement/deceleration. - # As good practice, you should replace UI actions with custom gameplay actions. - var direction := Input.get_axis("left", "right") - if Input.is_action_just_pressed("shove") && pushRightEnabled && faceLeft == false: - pushTarget.apply_central_impulse(Vector2(1,0) * PUSH_FORCE) - pushRightEnabled = false - if Input.is_action_just_pressed("shove") && pushLeftEnabled && faceLeft == true: - pushTarget.apply_central_impulse(Vector2(-1,0) * PUSH_FORCE) - pushLeftEnabled = false - # Shoot attack - if Input.is_action_just_pressed("shoot"): - if faceLeft == false: - %SceneManager.makeBullet(right_target.global_transform, 700) - if faceLeft == true: - %SceneManager.makeBullet(left_target.global_transform, -700) - - - if direction: - velocity.x = direction * SPEED - else: - velocity.x = move_toward(velocity.x, 0, SPEED) - if direction: - if not isJumping: - playerGraphic.play("run") - if direction == 0: - if not isJumping: - playerGraphic.play("idle") - if direction <0: - faceLeft = true - playerGraphic.flip_h = true - if direction >0: - faceLeft = false - playerGraphic.flip_h = false - - move_and_slide() - if rightcast.is_colliding(): - print("something on my right") - var collider = rightcast.get_collider() - if collider is Node: - if collider is RigidBody2D: - print ("shove this crave") - #record that we can shove right - pushRightEnabled = true - #record what objet to shove - pushTarget = collider + if direction: + velocity.x = direction * SPEED + else: + velocity.x = move_toward(velocity.x, 0, SPEED) + if direction: + if not isJumping: + playerGraphic.play("run") + if direction == 0: + if not isJumping: + playerGraphic.play("idle") + + if direction <0: + faceLeft = true + playerGraphic.flip_h = true + if direction >0: + faceLeft = false + playerGraphic.flip_h = false + + move_and_slide() + if rightcast.is_colliding(): + print("something on my right") + var collider = rightcast.get_collider() + if collider is Node: + if collider is RigidBody2D: + print ("shove this crave") + #record that we can shove right + pushRightEnabled = true + #record what objet to shove + pushTarget = collider + + if leftcast.is_colliding(): + var collider = leftcast.get_collider() + if collider is Node: + if collider is RigidBody2D: + pushLeftEnabled = true + pushTarget = collider + + for i in get_slide_collision_count(): + var c = get_slide_collision(i) + if c.get_collider() is RigidBody2D: + c.get_collider().apply_central_impulse(-c.get_normal() *50) - if leftcast.is_colliding(): - var collider = leftcast.get_collider() - if collider is Node: - if collider is RigidBody2D: - pushLeftEnabled = true - pushTarget = collider - - for i in get_slide_collision_count(): - var c = get_slide_collision(i) - if c.get_collider() is RigidBody2D: - c.get_collider().apply_central_impulse(-c.get_normal() *50) +func hurtPlayer(health): + print("Player takes damage, health remaining:: "+str(health)) + animPlaying = "hurt" + playerGraphic.play(animPlaying) + + +func _on_animation_finished() -> void: + if animPlaying=="hurt": + animPlaying=="idle" diff --git a/februarygodotgame/scripts/res/characterStats.gd b/februarygodotgame/scripts/res/characterStats.gd new file mode 100644 index 0000000..acfaff9 --- /dev/null +++ b/februarygodotgame/scripts/res/characterStats.gd @@ -0,0 +1,8 @@ +class_name CharacterStats extends Resource + +@export var max_health:int = 100 +@export var starting_health:int = 100 +@export var health:int = 100 + +@export var meleeDamage:int = 10 +@export var rangeDamage:int = 8 diff --git a/februarygodotgame/scripts/res/playerStats.tres b/februarygodotgame/scripts/res/playerStats.tres new file mode 100644 index 0000000..02d2464 --- /dev/null +++ b/februarygodotgame/scripts/res/playerStats.tres @@ -0,0 +1,11 @@ +[gd_resource type="Resource" script_class="CharacterStats" load_steps=2 format=3 uid="uid://uiy3jm3rn86r"] + +[ext_resource type="Script" path="res://scripts/res/characterStats.gd" id="1_xg86d"] + +[resource] +script = ExtResource("1_xg86d") +max_health = 110 +starting_health = 110 +health = 110 +meleeDamage = 15 +rangeDamage = 20 diff --git a/februarygodotgame/scripts/res/slimeStats.tres b/februarygodotgame/scripts/res/slimeStats.tres new file mode 100644 index 0000000..eee2aba --- /dev/null +++ b/februarygodotgame/scripts/res/slimeStats.tres @@ -0,0 +1,11 @@ +[gd_resource type="Resource" script_class="CharacterStats" load_steps=2 format=3 uid="uid://pj5dr8ee8h7i"] + +[ext_resource type="Script" path="res://scripts/res/characterStats.gd" id="1_k2ehn"] + +[resource] +script = ExtResource("1_k2ehn") +max_health = 50 +starting_health = 50 +health = 110 +meleeDamage = 30 +rangeDamage = 0 diff --git a/februarygodotgame/scripts/scene_manager.gd b/februarygodotgame/scripts/scene_manager.gd index a1f31e0..d1736e0 100644 --- a/februarygodotgame/scripts/scene_manager.gd +++ b/februarygodotgame/scripts/scene_manager.gd @@ -1,7 +1,11 @@ extends Node -@onready var gameController: Node2D = $".." + @onready var crates: Node2D = $"../crates" @onready var triggers: Node2D = $"../triggers" +@onready var coins: Node2D = $"../coins" +@onready var badguys: Node2D = $"../badguys" +@onready var player: Player = $"../CharacterBody2D" + var bulletsFiredTotal = 0 @@ -33,7 +37,7 @@ func makeBullet(position,speed): func bulletHit(bullet, body): print("Tell the game controller a bullet hit something") - gameController.bulletHit(body) + Gamecontroller.bulletHit(body) bullet.setSpeed(0) bullet.position = Vector2(-100,-100) @@ -46,13 +50,41 @@ func buildLevel(): for obj in crates.get_children(): if obj is Crate: totalCrates +=1 - gameController.numberOfCrates(totalCrates) + Gamecontroller.numberOfCrates(totalCrates) + #how many coins? + var totalCoins = 0 + if coins: + for obj in coins.get_children(): + if obj is Coin: + totalCoins +=1 + obj.coinCollectedSignal.connect(Gamecontroller.coinCollected) + Gamecontroller.numberOfCoins(totalCoins) + #how many badguys? + var totalBadguys = 0 + if badguys: + for obj in badguys.get_children(): + if obj is Slime: + totalBadguys += 1 + obj.playerDamageSignal.connect(Gamecontroller.playerDamage) + Gamecontroller.numberOfBadguys(totalBadguys) + #wire up the triggers for obj in triggers.get_children(): if obj is Trigger: #wire up to GC - obj.areaTrigger.connect(gameController._on_trigger_area_trigger) - + obj.areaTrigger.connect(Gamecontroller._on_trigger_area_trigger) + + #Listen to Gamecontroller + Gamecontroller.destroytSignal.connect(destroy) + Gamecontroller.levelCompleteSignal.connect(loadLevel) + Gamecontroller.playerHurtSignal.connect(playerHurt) + +func loadLevel(level): + get_tree().change_scene_to_file(level) + func _ready() -> void: buildLevel() + Gamecontroller.reset() +func playerHurt(health): + player.hurtPlayer(health) diff --git a/februarygodotgame/scripts/slime.gd b/februarygodotgame/scripts/slime.gd new file mode 100644 index 0000000..a2ef821 --- /dev/null +++ b/februarygodotgame/scripts/slime.gd @@ -0,0 +1,10 @@ +class_name Slime extends Area2D + +signal playerDamageSignal + + + + +func _on_body_entered(body: Node2D) -> void: + print("Bad guy contact") + playerDamageSignal.emit(body, self)