From 33cbfeebb9e9e83a2e5453ac0276d012cb171754 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Wed, 7 Jan 2026 17:33:42 +0300 Subject: [PATCH] Added pickups and doors --- game/characters/player.gd | 25 +++++++ game/characters/player.tscn | 3 + game/doors/book_door.gd | 6 ++ game/doors/book_door.gd.uid | 1 + game/doors/book_door.tscn | 65 ++++++++++++++++++ game/doors/circle_door.gd | 6 ++ game/doors/circle_door.gd.uid | 1 + game/doors/circle_door.tscn | 64 +++++++++++++++++ game/doors/closed_door.gd | 18 +++++ game/doors/closed_door.gd.uid | 1 + game/doors/closed_door.tscn | 65 ++++++++++++++++++ game/doors/door.gd | 39 +++++++++++ game/doors/door.gd.uid | 1 + game/doors/door.tscn | 91 +++++++++++++++++++++++++ game/doors/square_door.gd | 6 ++ game/doors/square_door.gd.uid | 1 + game/doors/square_door.tscn | 64 +++++++++++++++++ game/doors/triangle_door.gd | 6 ++ game/doors/triangle_door.gd.uid | 1 + game/doors/triangle_door.tscn | 64 +++++++++++++++++ game/levels/abstract_level.tscn | 5 ++ game/levels/level_1.tscn | 46 ++++++++++++- game/pickups/abstract_pickup.gd | 8 +++ game/pickups/abstract_pickup.gd.uid | 1 + game/pickups/abstract_pickup.tscn | 30 ++++++++ game/pickups/book_pickup.gd | 2 + game/pickups/book_pickup.gd.uid | 1 + game/pickups/book_pickup.tscn | 15 ++++ game/pickups/circle_key_pickup.gd | 2 + game/pickups/circle_key_pickup.gd.uid | 1 + game/pickups/circle_key_pickup.tscn | 15 ++++ game/pickups/square_key_pickup.gd | 2 + game/pickups/square_key_pickup.gd.uid | 1 + game/pickups/square_key_pickup.tscn | 15 ++++ game/pickups/triangle_key_pickup.gd | 2 + game/pickups/triangle_key_pickup.gd.uid | 1 + game/pickups/triangle_key_pickup.tscn | 15 ++++ images/level/doors.png | 3 + images/level/doors.png.import | 40 +++++++++++ images/level/pickups.png | 4 +- 40 files changed, 732 insertions(+), 5 deletions(-) create mode 100644 game/doors/book_door.gd create mode 100644 game/doors/book_door.gd.uid create mode 100644 game/doors/book_door.tscn create mode 100644 game/doors/circle_door.gd create mode 100644 game/doors/circle_door.gd.uid create mode 100644 game/doors/circle_door.tscn create mode 100644 game/doors/closed_door.gd create mode 100644 game/doors/closed_door.gd.uid create mode 100644 game/doors/closed_door.tscn create mode 100644 game/doors/door.gd create mode 100644 game/doors/door.gd.uid create mode 100644 game/doors/door.tscn create mode 100644 game/doors/square_door.gd create mode 100644 game/doors/square_door.gd.uid create mode 100644 game/doors/square_door.tscn create mode 100644 game/doors/triangle_door.gd create mode 100644 game/doors/triangle_door.gd.uid create mode 100644 game/doors/triangle_door.tscn create mode 100644 game/pickups/abstract_pickup.gd create mode 100644 game/pickups/abstract_pickup.gd.uid create mode 100644 game/pickups/abstract_pickup.tscn create mode 100644 game/pickups/book_pickup.gd create mode 100644 game/pickups/book_pickup.gd.uid create mode 100644 game/pickups/book_pickup.tscn create mode 100644 game/pickups/circle_key_pickup.gd create mode 100644 game/pickups/circle_key_pickup.gd.uid create mode 100644 game/pickups/circle_key_pickup.tscn create mode 100644 game/pickups/square_key_pickup.gd create mode 100644 game/pickups/square_key_pickup.gd.uid create mode 100644 game/pickups/square_key_pickup.tscn create mode 100644 game/pickups/triangle_key_pickup.gd create mode 100644 game/pickups/triangle_key_pickup.gd.uid create mode 100644 game/pickups/triangle_key_pickup.tscn create mode 100644 images/level/doors.png create mode 100644 images/level/doors.png.import diff --git a/game/characters/player.gd b/game/characters/player.gd index 2d0f23e..85a9be2 100644 --- a/game/characters/player.gd +++ b/game/characters/player.gd @@ -15,6 +15,7 @@ const ANIMATION_FALL_UP_LEFT = "fall_up_left" const ANIMATION_FALL_UP_RIGHT = "fall_up_right" const LOOK_AROUND_CHANCE = 25 +const PICKUP_OFFSET = 16.0 @export_range(0.0, 1000.0) var max_speed := 160 @@ -25,6 +26,7 @@ const LOOK_AROUND_CHANCE = 25 @onready var sprite : AnimatedSprite2D = $AnimatedSprite2D @onready var collision_switcher : CollisionSwitcher = $CollisionSwitcher +@onready var pickups : Node2D = $Pickups func _ready() -> void: @@ -53,6 +55,18 @@ func _input(event: InputEvent) -> void: collision_switcher.switch_color(switch_time) +func add_pickup(pickup: AbstractPickup) -> void: + pickup.reparent.call_deferred(pickups) + _rearrange_pickups.call_deferred() + + +func remove_pickup(pickup: AbstractPickup) -> void: + if pickup in pickups.get_children(): + pickups.remove_child(pickup) + pickup.queue_free() + _rearrange_pickups() + + func _update_animation() -> void: var animation := _get_animation() if sprite.animation != animation: @@ -88,6 +102,17 @@ func _get_animation() -> String: return ANIMATION_IDLE +func _rearrange_pickups() -> void: + var children := pickups.get_children() + var pickup_shift := (children.size() - 1) * PICKUP_OFFSET / 2.0 + + for i in range(children.size()): + if not children[i] is Node2D: continue + var node := children[i] as Node2D + node.position.x = i * PICKUP_OFFSET - pickup_shift + node.position.y = 0 + + func _on_animation_finished() -> void: match sprite.animation: ANIMATION_LOOK_AROUND_1, ANIMATION_LOOK_AROUND_2: diff --git a/game/characters/player.tscn b/game/characters/player.tscn index 799d555..0f09db0 100644 --- a/game/characters/player.tscn +++ b/game/characters/player.tscn @@ -319,5 +319,8 @@ object = NodePath("..") [node name="Camera2D" type="Camera2D" parent="."] position_smoothing_enabled = true +[node name="Pickups" type="Node2D" parent="."] +position = Vector2(0, -24) + [connection signal="animation_finished" from="AnimatedSprite2D" to="." method="_on_animation_finished"] [connection signal="animation_looped" from="AnimatedSprite2D" to="." method="_on_animation_looped"] diff --git a/game/doors/book_door.gd b/game/doors/book_door.gd new file mode 100644 index 0000000..802be37 --- /dev/null +++ b/game/doors/book_door.gd @@ -0,0 +1,6 @@ +class_name BookDoor +extends ClosedDoor + + +func _is_key(node: Node) -> bool: + return node is BookPickup diff --git a/game/doors/book_door.gd.uid b/game/doors/book_door.gd.uid new file mode 100644 index 0000000..58c751f --- /dev/null +++ b/game/doors/book_door.gd.uid @@ -0,0 +1 @@ +uid://befuova1g4tth diff --git a/game/doors/book_door.tscn b/game/doors/book_door.tscn new file mode 100644 index 0000000..4294b07 --- /dev/null +++ b/game/doors/book_door.tscn @@ -0,0 +1,65 @@ +[gd_scene load_steps=10 format=3 uid="uid://dioc4r03dfleq"] + +[ext_resource type="PackedScene" uid="uid://cojxqx5al7kyv" path="res://game/doors/closed_door.tscn" id="1_p87ci"] +[ext_resource type="Script" uid="uid://befuova1g4tth" path="res://game/doors/book_door.gd" id="2_atb6l"] +[ext_resource type="Texture2D" uid="uid://sfjjweantpja" path="res://images/level/doors.png" id="3_gbgmk"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_e14gj"] +atlas = ExtResource("3_gbgmk") +region = Rect2(0, 240, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_g21nq"] +atlas = ExtResource("3_gbgmk") +region = Rect2(64, 240, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_op86a"] +atlas = ExtResource("3_gbgmk") +region = Rect2(0, 240, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fw6sy"] +atlas = ExtResource("3_gbgmk") +region = Rect2(32, 240, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_m0nqq"] +atlas = ExtResource("3_gbgmk") +region = Rect2(64, 240, 32, 48) + +[sub_resource type="SpriteFrames" id="SpriteFrames_3d7ts"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_e14gj") +}], +"loop": true, +"name": &"closed", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_g21nq") +}], +"loop": true, +"name": &"open", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_op86a") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fw6sy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_m0nqq") +}], +"loop": false, +"name": &"opening", +"speed": 10.0 +}] + +[node name="BookDoor" instance=ExtResource("1_p87ci")] +script = ExtResource("2_atb6l") + +[node name="AnimatedSprite2D" parent="." index="2"] +sprite_frames = SubResource("SpriteFrames_3d7ts") +animation = &"opening" diff --git a/game/doors/circle_door.gd b/game/doors/circle_door.gd new file mode 100644 index 0000000..bee78db --- /dev/null +++ b/game/doors/circle_door.gd @@ -0,0 +1,6 @@ +class_name CircleDoor +extends ClosedDoor + + +func _is_key(node: Node) -> bool: + return node is CircleKeyPickup diff --git a/game/doors/circle_door.gd.uid b/game/doors/circle_door.gd.uid new file mode 100644 index 0000000..498ff22 --- /dev/null +++ b/game/doors/circle_door.gd.uid @@ -0,0 +1 @@ +uid://50eqrh24tgx7 diff --git a/game/doors/circle_door.tscn b/game/doors/circle_door.tscn new file mode 100644 index 0000000..088c39c --- /dev/null +++ b/game/doors/circle_door.tscn @@ -0,0 +1,64 @@ +[gd_scene load_steps=10 format=3 uid="uid://g0n5npbt3hb2"] + +[ext_resource type="PackedScene" uid="uid://cojxqx5al7kyv" path="res://game/doors/closed_door.tscn" id="1_amonf"] +[ext_resource type="Texture2D" uid="uid://sfjjweantpja" path="res://images/level/doors.png" id="2_5d3q0"] +[ext_resource type="Script" uid="uid://50eqrh24tgx7" path="res://game/doors/circle_door.gd" id="2_t4nfh"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_t4nfh"] +atlas = ExtResource("2_5d3q0") +region = Rect2(0, 96, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_bcn3i"] +atlas = ExtResource("2_5d3q0") +region = Rect2(64, 96, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wv48j"] +atlas = ExtResource("2_5d3q0") +region = Rect2(0, 96, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3ybwy"] +atlas = ExtResource("2_5d3q0") +region = Rect2(32, 96, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7go8b"] +atlas = ExtResource("2_5d3q0") +region = Rect2(64, 96, 32, 48) + +[sub_resource type="SpriteFrames" id="SpriteFrames_18a0u"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_t4nfh") +}], +"loop": true, +"name": &"closed", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_bcn3i") +}], +"loop": true, +"name": &"open", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_wv48j") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3ybwy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7go8b") +}], +"loop": false, +"name": &"opening", +"speed": 10.0 +}] + +[node name="CircleDoor" instance=ExtResource("1_amonf")] +script = ExtResource("2_t4nfh") + +[node name="AnimatedSprite2D" parent="." index="2"] +sprite_frames = SubResource("SpriteFrames_18a0u") diff --git a/game/doors/closed_door.gd b/game/doors/closed_door.gd new file mode 100644 index 0000000..a538297 --- /dev/null +++ b/game/doors/closed_door.gd @@ -0,0 +1,18 @@ +class_name ClosedDoor +extends Door + + +func _is_key(_node: Node) -> bool: + return false + + +func _can_open(body: Node2D) -> bool: + if not body.has_node("Pickups"): return false + if not body.has_method("remove_pickup"): return false + + for pickup in body.get_node("Pickups").get_children(): + if _is_key(pickup): + body.remove_pickup(pickup) + return true + + return false diff --git a/game/doors/closed_door.gd.uid b/game/doors/closed_door.gd.uid new file mode 100644 index 0000000..70b9fd5 --- /dev/null +++ b/game/doors/closed_door.gd.uid @@ -0,0 +1 @@ +uid://qd7aihqwgddj diff --git a/game/doors/closed_door.tscn b/game/doors/closed_door.tscn new file mode 100644 index 0000000..ab8a660 --- /dev/null +++ b/game/doors/closed_door.tscn @@ -0,0 +1,65 @@ +[gd_scene load_steps=10 format=3 uid="uid://cojxqx5al7kyv"] + +[ext_resource type="PackedScene" uid="uid://b7mhdrj3b6loq" path="res://game/doors/door.tscn" id="1_rxn60"] +[ext_resource type="Script" uid="uid://qd7aihqwgddj" path="res://game/doors/closed_door.gd" id="2_dntl7"] +[ext_resource type="Texture2D" uid="uid://sfjjweantpja" path="res://images/level/doors.png" id="3_dntl7"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_3gkgk"] +atlas = ExtResource("3_dntl7") +region = Rect2(0, 48, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gu75k"] +atlas = ExtResource("3_dntl7") +region = Rect2(64, 48, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l618y"] +atlas = ExtResource("3_dntl7") +region = Rect2(0, 48, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_s3oqg"] +atlas = ExtResource("3_dntl7") +region = Rect2(32, 48, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ir1gv"] +atlas = ExtResource("3_dntl7") +region = Rect2(64, 48, 32, 48) + +[sub_resource type="SpriteFrames" id="SpriteFrames_fgn1o"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_3gkgk") +}], +"loop": true, +"name": &"closed", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_gu75k") +}], +"loop": true, +"name": &"open", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_l618y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_s3oqg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ir1gv") +}], +"loop": false, +"name": &"opening", +"speed": 10.0 +}] + +[node name="ClosedDoor" instance=ExtResource("1_rxn60")] +script = ExtResource("2_dntl7") + +[node name="AnimatedSprite2D" parent="." index="2"] +sprite_frames = SubResource("SpriteFrames_fgn1o") +animation = &"closed" diff --git a/game/doors/door.gd b/game/doors/door.gd new file mode 100644 index 0000000..0c3993f --- /dev/null +++ b/game/doors/door.gd @@ -0,0 +1,39 @@ +class_name Door +extends Node2D + + +const ANIMATION_CLOSED = "closed" +const ANIMATION_OPEN = "open" +const ANIMATION_OPENING = "opening" + + +@onready var sprite : AnimatedSprite2D = $AnimatedSprite2D +@onready var static_body : StaticBody2D = $StaticBody2D +@onready var static_body_collision : CollisionShape2D = $%StaticBodyCollision +@onready var area_collision : CollisionShape2D = $%AreaCollision + + +func _ready() -> void: + sprite.play(ANIMATION_CLOSED) + + +func _is_closed() -> bool: + return sprite.animation == ANIMATION_CLOSED + + +func _can_open(_body: Node2D) -> bool: + return true + + +func _open() -> void: + sprite.play(ANIMATION_OPENING) + static_body.process_mode = Node.PROCESS_MODE_DISABLED + + +func _on_animation_finished() -> void: + sprite.play(ANIMATION_OPEN) + + +func _on_area_entered(body: Node2D) -> void: + if _is_closed() and _can_open(body): + _open() diff --git a/game/doors/door.gd.uid b/game/doors/door.gd.uid new file mode 100644 index 0000000..c2ad983 --- /dev/null +++ b/game/doors/door.gd.uid @@ -0,0 +1 @@ +uid://5uqub2a6701b diff --git a/game/doors/door.tscn b/game/doors/door.tscn new file mode 100644 index 0000000..05f3e3c --- /dev/null +++ b/game/doors/door.tscn @@ -0,0 +1,91 @@ +[gd_scene load_steps=12 format=3 uid="uid://b7mhdrj3b6loq"] + +[ext_resource type="Script" uid="uid://5uqub2a6701b" path="res://game/doors/door.gd" id="1_vx1od"] +[ext_resource type="Material" uid="uid://dojhoc6ljpt1a" path="res://game/materials/gray_walls.tres" id="1_xelsh"] +[ext_resource type="Texture2D" uid="uid://sfjjweantpja" path="res://images/level/doors.png" id="3_ymlcn"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_cs8ri"] +size = Vector2(9, 48) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_u7b5a"] +size = Vector2(48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_5nqrw"] +atlas = ExtResource("3_ymlcn") +region = Rect2(0, 0, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ymlcn"] +atlas = ExtResource("3_ymlcn") +region = Rect2(64, 0, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_r8rhb"] +atlas = ExtResource("3_ymlcn") +region = Rect2(0, 0, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xb6pu"] +atlas = ExtResource("3_ymlcn") +region = Rect2(32, 0, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_j83fq"] +atlas = ExtResource("3_ymlcn") +region = Rect2(64, 0, 32, 48) + +[sub_resource type="SpriteFrames" id="SpriteFrames_r8rhb"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_5nqrw") +}], +"loop": true, +"name": &"closed", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_ymlcn") +}], +"loop": true, +"name": &"open", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_r8rhb") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xb6pu") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_j83fq") +}], +"loop": false, +"name": &"opening", +"speed": 10.0 +}] + +[node name="Door" type="Node2D"] +script = ExtResource("1_vx1od") + +[node name="StaticBody2D" type="StaticBody2D" parent="."] +position = Vector2(-8.5, 0) + +[node name="StaticBodyCollision" type="CollisionShape2D" parent="StaticBody2D"] +unique_name_in_owner = true +shape = SubResource("RectangleShape2D_cs8ri") + +[node name="Area2D" type="Area2D" parent="."] +position = Vector2(-8.5, 0) +collision_layer = 0 +collision_mask = 136 + +[node name="AreaCollision" type="CollisionShape2D" parent="Area2D"] +unique_name_in_owner = true +shape = SubResource("RectangleShape2D_u7b5a") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +material = ExtResource("1_xelsh") +sprite_frames = SubResource("SpriteFrames_r8rhb") +animation = &"opening" + +[connection signal="body_entered" from="Area2D" to="." method="_on_area_entered"] +[connection signal="animation_finished" from="AnimatedSprite2D" to="." method="_on_animation_finished"] diff --git a/game/doors/square_door.gd b/game/doors/square_door.gd new file mode 100644 index 0000000..0108fee --- /dev/null +++ b/game/doors/square_door.gd @@ -0,0 +1,6 @@ +class_name SquareDoor +extends ClosedDoor + + +func _is_key(node: Node) -> bool: + return node is SquareKeyPickup diff --git a/game/doors/square_door.gd.uid b/game/doors/square_door.gd.uid new file mode 100644 index 0000000..56dfb26 --- /dev/null +++ b/game/doors/square_door.gd.uid @@ -0,0 +1 @@ +uid://mp2dfsd1uk5p diff --git a/game/doors/square_door.tscn b/game/doors/square_door.tscn new file mode 100644 index 0000000..a5e93cb --- /dev/null +++ b/game/doors/square_door.tscn @@ -0,0 +1,64 @@ +[gd_scene load_steps=10 format=3 uid="uid://b7imlh4sl036i"] + +[ext_resource type="PackedScene" uid="uid://cojxqx5al7kyv" path="res://game/doors/closed_door.tscn" id="1_jg0qv"] +[ext_resource type="Script" uid="uid://mp2dfsd1uk5p" path="res://game/doors/square_door.gd" id="2_wyn1t"] +[ext_resource type="Texture2D" uid="uid://sfjjweantpja" path="res://images/level/doors.png" id="3_txk00"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_qhb0j"] +atlas = ExtResource("3_txk00") +region = Rect2(0, 144, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rwkr8"] +atlas = ExtResource("3_txk00") +region = Rect2(64, 144, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pw0e3"] +atlas = ExtResource("3_txk00") +region = Rect2(0, 144, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_tlxsa"] +atlas = ExtResource("3_txk00") +region = Rect2(32, 144, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_05hqc"] +atlas = ExtResource("3_txk00") +region = Rect2(64, 144, 32, 48) + +[sub_resource type="SpriteFrames" id="SpriteFrames_wk632"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_qhb0j") +}], +"loop": true, +"name": &"closed", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_rwkr8") +}], +"loop": true, +"name": &"open", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_pw0e3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_tlxsa") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_05hqc") +}], +"loop": false, +"name": &"opening", +"speed": 10.0 +}] + +[node name="SquareDoor" instance=ExtResource("1_jg0qv")] +script = ExtResource("2_wyn1t") + +[node name="AnimatedSprite2D" parent="." index="2"] +sprite_frames = SubResource("SpriteFrames_wk632") diff --git a/game/doors/triangle_door.gd b/game/doors/triangle_door.gd new file mode 100644 index 0000000..a8eb9fd --- /dev/null +++ b/game/doors/triangle_door.gd @@ -0,0 +1,6 @@ +class_name TriagleDoor +extends ClosedDoor + + +func _is_key(node: Node) -> bool: + return node is TriangleKeyPickup diff --git a/game/doors/triangle_door.gd.uid b/game/doors/triangle_door.gd.uid new file mode 100644 index 0000000..729045f --- /dev/null +++ b/game/doors/triangle_door.gd.uid @@ -0,0 +1 @@ +uid://d4lrt6yw0knf7 diff --git a/game/doors/triangle_door.tscn b/game/doors/triangle_door.tscn new file mode 100644 index 0000000..4568254 --- /dev/null +++ b/game/doors/triangle_door.tscn @@ -0,0 +1,64 @@ +[gd_scene load_steps=10 format=3 uid="uid://dwvv5dj8lqif2"] + +[ext_resource type="PackedScene" uid="uid://cojxqx5al7kyv" path="res://game/doors/closed_door.tscn" id="1_l21ff"] +[ext_resource type="Script" uid="uid://d4lrt6yw0knf7" path="res://game/doors/triangle_door.gd" id="2_ifpbb"] +[ext_resource type="Texture2D" uid="uid://sfjjweantpja" path="res://images/level/doors.png" id="3_eqipl"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_rb7ia"] +atlas = ExtResource("3_eqipl") +region = Rect2(0, 192, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1a8ca"] +atlas = ExtResource("3_eqipl") +region = Rect2(64, 192, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_nkv11"] +atlas = ExtResource("3_eqipl") +region = Rect2(0, 192, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qx6bn"] +atlas = ExtResource("3_eqipl") +region = Rect2(32, 192, 32, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vlkqk"] +atlas = ExtResource("3_eqipl") +region = Rect2(64, 192, 32, 48) + +[sub_resource type="SpriteFrames" id="SpriteFrames_o203p"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_rb7ia") +}], +"loop": true, +"name": &"closed", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_1a8ca") +}], +"loop": true, +"name": &"open", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_nkv11") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qx6bn") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vlkqk") +}], +"loop": false, +"name": &"opening", +"speed": 10.0 +}] + +[node name="TriangleDoor" instance=ExtResource("1_l21ff")] +script = ExtResource("2_ifpbb") + +[node name="AnimatedSprite2D" parent="." index="2"] +sprite_frames = SubResource("SpriteFrames_o203p") diff --git a/game/levels/abstract_level.tscn b/game/levels/abstract_level.tscn index fdcfd7f..dbb507b 100644 --- a/game/levels/abstract_level.tscn +++ b/game/levels/abstract_level.tscn @@ -365,8 +365,12 @@ sources/0 = SubResource("TileSetAtlasSource_x8k35") [node name="AbstractLevel" type="Node2D"] script = ExtResource("1_o2mui") +[node name="Doors" type="Node2D" parent="."] + [node name="Objects" type="Node2D" parent="."] +[node name="Pickups" type="Node2D" parent="."] + [node name="Player" parent="." instance=ExtResource("2_r0ht6")] [node name="Tiles" type="Node2D" parent="."] @@ -387,3 +391,4 @@ tile_set = SubResource("TileSet_l0xih") [node name="PauseMenu" parent="CanvasLayer" instance=ExtResource("7_l0xih")] unique_name_in_owner = true +visible = false diff --git a/game/levels/level_1.tscn b/game/levels/level_1.tscn index 965b192..eee0d6f 100644 --- a/game/levels/level_1.tscn +++ b/game/levels/level_1.tscn @@ -1,15 +1,43 @@ -[gd_scene load_steps=7 format=4 uid="uid://bmn74wc2vophn"] +[gd_scene load_steps=17 format=4 uid="uid://bmn74wc2vophn"] [ext_resource type="PackedScene" uid="uid://mpsu4g2b5h3a" path="res://game/levels/abstract_level.tscn" id="1_15okj"] [ext_resource type="Script" uid="uid://b04km0lbc108u" path="res://game/levels/level_1.gd" id="2_hj65a"] [ext_resource type="PackedScene" uid="uid://b3kyqvuxmfn8f" path="res://game/objects/fireplace.tscn" id="3_tuvkr"] [ext_resource type="PackedScene" uid="uid://pw8xqtpauy57" path="res://game/objects/tutorial/jump_kbd.tscn" id="4_crrvt"] +[ext_resource type="PackedScene" uid="uid://g0n5npbt3hb2" path="res://game/doors/circle_door.tscn" id="4_yrqjd"] +[ext_resource type="PackedScene" uid="uid://cojxqx5al7kyv" path="res://game/doors/closed_door.tscn" id="5_1skah"] [ext_resource type="PackedScene" uid="uid://cemhsfdru4pv6" path="res://game/objects/tutorial/movement_kbd.tscn" id="5_rifvl"] +[ext_resource type="PackedScene" uid="uid://dwvv5dj8lqif2" path="res://game/doors/triangle_door.tscn" id="6_75eok"] [ext_resource type="PackedScene" uid="uid://deo60sij43ibm" path="res://game/objects/tutorial/switch_kbd.tscn" id="6_l6jt4"] +[ext_resource type="PackedScene" uid="uid://b7imlh4sl036i" path="res://game/doors/square_door.tscn" id="7_1skah"] +[ext_resource type="PackedScene" uid="uid://cudbspmpx6sik" path="res://game/pickups/book_pickup.tscn" id="7_fq0h3"] +[ext_resource type="PackedScene" uid="uid://dioc4r03dfleq" path="res://game/doors/book_door.tscn" id="8_75eok"] +[ext_resource type="PackedScene" uid="uid://c4gqqhlew67ay" path="res://game/pickups/circle_key_pickup.tscn" id="8_g1txn"] +[ext_resource type="PackedScene" uid="uid://ciubf1ttwc133" path="res://game/pickups/square_key_pickup.tscn" id="9_yrqjd"] +[ext_resource type="PackedScene" uid="uid://dqgmfpv2mhdpn" path="res://game/pickups/triangle_key_pickup.tscn" id="10_dea75"] +[ext_resource type="PackedScene" uid="uid://b7mhdrj3b6loq" path="res://game/doors/door.tscn" id="11_g1txn"] [node name="Level1" instance=ExtResource("1_15okj")] script = ExtResource("2_hj65a") +[node name="Door" parent="Doors" index="0" instance=ExtResource("11_g1txn")] +position = Vector2(416, -56) + +[node name="CircleDoor" parent="Doors" index="1" instance=ExtResource("4_yrqjd")] +position = Vector2(1152, 88) + +[node name="ClosedDoor" parent="Doors" index="2" instance=ExtResource("5_1skah")] +position = Vector2(1233, 88) + +[node name="TriangleDoor" parent="Doors" index="3" instance=ExtResource("6_75eok")] +position = Vector2(900, -56) + +[node name="SquareDoor" parent="Doors" index="4" instance=ExtResource("7_1skah")] +position = Vector2(626, -56) + +[node name="BookDoor" parent="Doors" index="5" instance=ExtResource("8_75eok")] +position = Vector2(958, 88) + [node name="Fireplace" parent="Objects" index="0" instance=ExtResource("3_tuvkr")] position = Vector2(452, -48) @@ -22,11 +50,23 @@ position = Vector2(65, 1) [node name="SwitchKbd" parent="Objects" index="3" instance=ExtResource("6_l6jt4")] position = Vector2(692, -72) +[node name="BookPickup" parent="Pickups" index="0" instance=ExtResource("7_fq0h3")] +position = Vector2(145, 0) + +[node name="CircleKeyPickup" parent="Pickups" index="1" instance=ExtResource("8_g1txn")] +position = Vector2(172, 0) + +[node name="SquareKeyPickup" parent="Pickups" index="2" instance=ExtResource("9_yrqjd")] +position = Vector2(196, 0) + +[node name="TriangleKeyPickup" parent="Pickups" index="3" instance=ExtResource("10_dea75")] +position = Vector2(218, 0) + [node name="GrayWalls" parent="Tiles" index="0"] -tile_map_data = PackedByteArray("AAD9/wEAAAABAAAAAAD+/wEAAAABAAAAAAD//wEAAAABAAAAAAAAAAEAAAABAAAAAAABAAEAAAABAAAAAAACAAEAAAABAAAAAAD8/wEAAAADAAEAAAD8/wAAAAACAAEAAAD8////AAACAAEAAAD8//7/AAACAAEAAAD8//3/AAACAAEAAAADAAEAAAABAAAAAAAEAAEAAAABAAAAAAAFAAEAAAABAAAAAAAGAAEAAAABAAAAAAAHAAEAAAABAAAAAAAIAAEAAAABAAAAAAAJAAEAAAABAAAAAAAKAAEAAAABAAAAAAALAAEAAAABAAAAAAAMAAEAAAABAAAAAAANAAEAAAABAAAAAAAOAAEAAAABAAAAAAAPAAEAAAABAAAAAAAQAAEAAAABAAAAAAARAAEAAAABAAAAAAASAAEAAAABAAAAAAATAAEAAAAEAAEAAAATAAAAAAAAAAEAAAATAP//AAAAAAEAAAATAP7/AAAAAAAAAAAUAP7/AAABAAAAAAAVAP7/AAABAAAAAAAWAP7/AAABAAAAAAAXAP7/AAABAAAAAAAYAP7/AAABAAAAAAAZAP7/AAABAAAAAAAaAP7/AAABAAAAAAAbAP7/AAABAAAAAAAcAP7/AAABAAAAAAAdAP7/AAABAAAAAAAeAP7/AAABAAAAAAAfAP7/AAABAAAAAAAgAP7/AAABAAAAAAAhAP7/AAABAAAAAAAiAP7/AAABAAAAAAAjAP7/AAABAAAAAAAkAP7/AAABAAAAAAAlAP7/AAABAAAAAAAmAP7/AAABAAAAAAAnAP7/AAABAAAAAAAoAP7/AAABAAAAAAApAP7/AAABAAAAAAAqAP7/AAABAAAAAAArAP7/AAABAAAAAAAsAP7/AAABAAAAAAAtAP7/AAABAAAAAAAuAP7/AAABAAAAAAAvAP7/AAABAAAAAAAwAP7/AAABAAAAAAAxAP7/AAABAAAAAAAyAP7/AAABAAAAAAAzAP7/AAABAAAAAAA0AP7/AAABAAAAAAA1AP7/AAABAAAAAAA2AP7/AAABAAAAAAA3AP7/AAABAAAAAAA4AP7/AAABAAAAAABEAP7/AAAEAAEAAABEAP3/AAAAAAEAAABEAPz/AAAAAAEAAABEAPv/AAAAAAEAAABEAPr/AAAAAAEAAAA5AP7/AAABAAAAAAA6AP7/AAABAAAAAAA7AP7/AAABAAAAAAA8AP7/AAABAAAAAAA9AP7/AAABAAAAAAA+AP7/AAABAAAAAABCAP7/AAABAAAAAABDAP7/AAABAAAAAABHAAMAAAAAAAEAAABHAAQAAAAAAAEAAABHAAUAAAAAAAEAAABHAAYAAAAAAAEAAAA5AAMAAAACAAEAAAA5AAQAAAACAAEAAAA5AAUAAAACAAEAAAA5AAYAAAACAAEAAAA5AAcAAAADAAEAAABHAAcAAAAEAAEAAABGAAcAAAABAAAAAABFAAcAAAABAAAAAABEAAcAAAABAAAAAABDAAcAAAABAAAAAABCAAcAAAABAAAAAABBAAcAAAABAAAAAABAAAcAAAABAAAAAAA/AAcAAAABAAAAAAA+AAcAAAABAAAAAAA9AAcAAAABAAAAAAA8AAcAAAABAAAAAAA7AAcAAAABAAAAAAA6AAcAAAABAAAAAAA/AP7/AAAIAAAAAABBAP7/AAAHAAAAAAA=") +tile_map_data = PackedByteArray("AAD9/wEAAAABAAAAAAD+/wEAAAABAAAAAAD//wEAAAABAAAAAAAAAAEAAAABAAAAAAABAAEAAAABAAAAAAACAAEAAAABAAAAAAD8/wEAAAADAAEAAAD8/wAAAAACAAEAAAD8////AAACAAEAAAD8//7/AAACAAEAAAD8//3/AAACAAEAAAADAAEAAAABAAAAAAAEAAEAAAABAAAAAAAFAAEAAAABAAAAAAAGAAEAAAABAAAAAAAHAAEAAAABAAAAAAAIAAEAAAABAAAAAAAJAAEAAAABAAAAAAAKAAEAAAABAAAAAAALAAEAAAABAAAAAAAMAAEAAAABAAAAAAANAAEAAAABAAAAAAAOAAEAAAABAAAAAAAPAAEAAAABAAAAAAAQAAEAAAABAAAAAAARAAEAAAABAAAAAAASAAEAAAABAAAAAAATAAEAAAAEAAEAAAATAAAAAAAAAAEAAAATAP//AAAAAAEAAAATAP7/AAAAAAAAAAAUAP7/AAABAAAAAAAVAP7/AAABAAAAAAAWAP7/AAABAAAAAAAXAP7/AAABAAAAAAAYAP7/AAABAAAAAAAZAP7/AAABAAAAAAAaAP7/AAABAAAAAAAbAP7/AAABAAAAAAAcAP7/AAABAAAAAAAdAP7/AAABAAAAAAAeAP7/AAABAAAAAAAfAP7/AAABAAAAAAAgAP7/AAABAAAAAAAhAP7/AAABAAAAAAAiAP7/AAABAAAAAAAjAP7/AAABAAAAAAAkAP7/AAABAAAAAAAlAP7/AAABAAAAAAAmAP7/AAABAAAAAAAnAP7/AAABAAAAAAAoAP7/AAABAAAAAAApAP7/AAABAAAAAAAqAP7/AAABAAAAAAArAP7/AAABAAAAAAAsAP7/AAABAAAAAAAtAP7/AAABAAAAAAAuAP7/AAABAAAAAAAvAP7/AAABAAAAAAAwAP7/AAABAAAAAAAxAP7/AAABAAAAAAAyAP7/AAABAAAAAAAzAP7/AAABAAAAAAA0AP7/AAABAAAAAAA1AP7/AAABAAAAAAA2AP7/AAABAAAAAAA3AP7/AAABAAAAAAA4AP7/AAABAAAAAABEAP7/AAAEAAEAAABEAP3/AAAAAAEAAABEAPz/AAAAAAEAAABEAPv/AAAAAAEAAABEAPr/AAAAAAEAAAA5AP7/AAABAAAAAAA6AP7/AAABAAAAAAA7AP7/AAABAAAAAAA8AP7/AAABAAAAAAA9AP7/AAABAAAAAAA+AP7/AAABAAAAAABCAP7/AAABAAAAAABDAP7/AAABAAAAAAA5AAMAAAACAAEAAAA5AAQAAAACAAEAAAA5AAUAAAACAAEAAAA5AAYAAAACAAEAAAA5AAcAAAADAAEAAABHAAcAAAABAAAAAABGAAcAAAABAAAAAABFAAcAAAABAAAAAABEAAcAAAABAAAAAABDAAcAAAABAAAAAABCAAcAAAABAAAAAABBAAcAAAABAAAAAABAAAcAAAABAAAAAAA/AAcAAAABAAAAAAA+AAcAAAABAAAAAAA9AAcAAAABAAAAAAA8AAcAAAABAAAAAAA7AAcAAAABAAAAAAA6AAcAAAABAAAAAAA/AP7/AAAIAAAAAABBAP7/AAAHAAAAAABHAAMAAAAGAAIAAABIAAcAAAABAAAAAABJAAcAAAABAAAAAABKAAcAAAABAAAAAABLAAcAAAABAAAAAABMAAcAAAABAAAAAABNAAcAAAABAAAAAABOAAcAAAABAAAAAABPAAcAAAAEAAEAAABPAAYAAAAAAAEAAABPAAUAAAAAAAEAAABPAAQAAAAAAAEAAABPAAMAAAAAAAEAAABPAAIAAAAEAAAAAABHAAIAAAADAAAAAAAZAPr/AAAGAAIAAAA=") [node name="BlackWalls" parent="Tiles" index="1"] tile_map_data = PackedByteArray("AABAAP7/AAAEAAIAAAA=") [node name="WhiteWalls" parent="Tiles" index="2"] -tile_map_data = PackedByteArray("AAAwAP3/AAAAAAEAAAAwAPz/AAAAAAEAAAAwAPv/AAAAAAEAAAAwAPr/AAAAAAEAAAAwAPn/AAAAAAEAAAAwAPj/AAAAAAEAAAAwAPf/AAAAAAEAAAD8//z/AAACAAEAAAD8//v/AAACAAEAAAD8//r/AAACAAEAAAD8//n/AAACAAEAAAD8//j/AAACAAEAAAD8//f/AAACAAEAAAD8//b/AAADAAAAAAD9//b/AAABAAIAAAD+//b/AAABAAIAAAD///b/AAABAAIAAAAAAPb/AAABAAIAAAABAPb/AAABAAIAAAACAPb/AAABAAIAAAADAPb/AAABAAIAAAAEAPb/AAABAAIAAAAFAPb/AAABAAIAAAAGAPb/AAABAAIAAAAHAPb/AAABAAIAAAAIAPb/AAABAAIAAAAJAPb/AAABAAIAAAAKAPb/AAABAAIAAAALAPb/AAABAAIAAAAMAPb/AAABAAIAAAANAPb/AAABAAIAAAAOAPb/AAABAAIAAAAPAPb/AAABAAIAAAAQAPb/AAABAAIAAAARAPb/AAABAAIAAAASAPb/AAABAAIAAAATAPb/AAABAAIAAAAUAPb/AAABAAIAAAAVAPb/AAABAAIAAAAWAPb/AAABAAIAAAAXAPb/AAABAAIAAAAYAPb/AAABAAIAAAAZAPb/AAABAAIAAAAaAPb/AAABAAIAAAAbAPb/AAABAAIAAAAcAPb/AAABAAIAAAAdAPb/AAABAAIAAAAeAPb/AAABAAIAAAAfAPb/AAABAAIAAAAgAPb/AAABAAIAAAAhAPb/AAABAAIAAAAiAPb/AAABAAIAAAAjAPb/AAABAAIAAAAkAPb/AAABAAIAAAAlAPb/AAABAAIAAAAmAPb/AAABAAIAAAAnAPb/AAABAAIAAAAoAPb/AAABAAIAAAApAPb/AAABAAIAAAAqAPb/AAABAAIAAAArAPb/AAABAAIAAAAsAPb/AAABAAIAAAAtAPb/AAABAAIAAAAuAPb/AAABAAIAAAAvAPb/AAABAAIAAAAwAPb/AAABAAYAAAAxAPb/AAABAAIAAAAyAPb/AAABAAIAAAAzAPb/AAABAAIAAAA0APb/AAABAAIAAAA1APb/AAABAAIAAAA2APb/AAABAAIAAAA3APb/AAABAAIAAAA4APb/AAABAAIAAAA5APb/AAABAAIAAAA6APb/AAABAAIAAAA7APb/AAABAAIAAAA8APb/AAABAAIAAAA9APb/AAABAAIAAAA+APb/AAABAAIAAAA/APb/AAABAAIAAABAAPb/AAABAAIAAABEAPn/AAAAAAEAAABEAPj/AAAAAAEAAABEAPf/AAAAAAEAAABEAPb/AAAEAAAAAABBAPb/AAABAAIAAABCAPb/AAABAAIAAABDAPb/AAABAAIAAAA+AP7/AAADAAAAAABCAP7/AAAEAAAAAAA+AP//AAACAAIAAABCAP//AAAAAAIAAAA9AP//AAABAAIAAAA8AP//AAABAAIAAAA7AP//AAABAAIAAAA6AP//AAABAAIAAABDAP//AAABAAIAAABEAP//AAABAAIAAABFAP//AAABAAIAAABGAP//AAABAAIAAAA5AP//AAADAAAAAABHAP//AAAEAAAAAAA5AAAAAAACAAEAAAA5AAEAAAACAAEAAAA5AAIAAAACAAEAAABHAAAAAAAAAAEAAABHAAEAAAAAAAEAAABHAAIAAAAAAAEAAAA=") +tile_map_data = PackedByteArray("AAAwAP3/AAAAAAEAAAAwAPz/AAAAAAEAAAAwAPv/AAAAAAEAAAAwAPr/AAAAAAEAAAAwAPn/AAAAAAEAAAAwAPj/AAAAAAEAAAAwAPf/AAAAAAEAAAD8//z/AAACAAEAAAD8//v/AAACAAEAAAD8//r/AAACAAEAAAD8//n/AAACAAEAAAD8//j/AAACAAEAAAD8//f/AAACAAEAAAD8//b/AAADAAAAAAD9//b/AAABAAIAAAD+//b/AAABAAIAAAD///b/AAABAAIAAAAAAPb/AAABAAIAAAABAPb/AAABAAIAAAACAPb/AAABAAIAAAADAPb/AAABAAIAAAAEAPb/AAABAAIAAAAFAPb/AAABAAIAAAAGAPb/AAABAAIAAAAHAPb/AAABAAIAAAAIAPb/AAABAAIAAAAJAPb/AAABAAIAAAAKAPb/AAABAAIAAAALAPb/AAABAAIAAAAMAPb/AAABAAIAAAANAPb/AAABAAIAAAAOAPb/AAABAAIAAAAPAPb/AAABAAIAAAAQAPb/AAABAAIAAAARAPb/AAABAAIAAAASAPb/AAABAAIAAAATAPb/AAABAAIAAAAUAPb/AAABAAIAAAAVAPb/AAABAAIAAAAWAPb/AAABAAIAAAAXAPb/AAABAAIAAAAYAPb/AAABAAIAAAAZAPb/AAABAAIAAAAaAPb/AAABAAIAAAAbAPb/AAABAAIAAAAcAPb/AAABAAIAAAAdAPb/AAABAAIAAAAeAPb/AAABAAIAAAAfAPb/AAABAAIAAAAgAPb/AAABAAIAAAAhAPb/AAABAAIAAAAiAPb/AAABAAIAAAAjAPb/AAABAAIAAAAkAPb/AAABAAIAAAAlAPb/AAABAAIAAAAmAPb/AAABAAIAAAAnAPb/AAABAAIAAAAoAPb/AAABAAIAAAApAPb/AAABAAIAAAAqAPb/AAABAAIAAAArAPb/AAABAAIAAAAsAPb/AAABAAIAAAAtAPb/AAABAAIAAAAuAPb/AAABAAIAAAAvAPb/AAABAAIAAAAwAPb/AAABAAYAAAAxAPb/AAABAAIAAAAyAPb/AAABAAIAAAAzAPb/AAABAAIAAAA0APb/AAABAAIAAAA1APb/AAABAAIAAAA2APb/AAABAAIAAAA3APb/AAABAAIAAAA4APb/AAABAAIAAAA5APb/AAABAAIAAAA6APb/AAABAAIAAAA7APb/AAABAAIAAAA8APb/AAABAAIAAAA9APb/AAABAAIAAAA+APb/AAABAAIAAAA/APb/AAABAAIAAABAAPb/AAABAAIAAABEAPn/AAAAAAEAAABEAPj/AAAAAAEAAABEAPf/AAAAAAEAAABEAPb/AAAEAAAAAABBAPb/AAABAAIAAABCAPb/AAABAAIAAABDAPb/AAABAAIAAAA+AP7/AAADAAAAAABCAP7/AAAEAAAAAAA+AP//AAACAAIAAABCAP//AAAAAAIAAAA9AP//AAABAAIAAAA8AP//AAABAAIAAAA7AP//AAABAAIAAAA6AP//AAABAAIAAABDAP//AAABAAIAAABEAP//AAABAAIAAABFAP//AAABAAIAAABGAP//AAABAAIAAAA5AP//AAADAAAAAABHAP//AAAEAAAAAAA5AAAAAAACAAEAAAA5AAEAAAACAAEAAAA5AAIAAAACAAEAAABHAAAAAAAAAAEAAABHAAEAAAAAAAEAAABHAAIAAAAAAAEAAABOAAIAAAABAAIAAABNAAIAAAABAAIAAABMAAIAAAABAAIAAABLAAIAAAABAAIAAABKAAIAAAABAAIAAABJAAIAAAABAAIAAABIAAIAAAABAAIAAAAZAPf/AAAGAAEAAAAZAPj/AAAGAAEAAAAZAPn/AAAGAAEAAAA=") diff --git a/game/pickups/abstract_pickup.gd b/game/pickups/abstract_pickup.gd new file mode 100644 index 0000000..b011ca2 --- /dev/null +++ b/game/pickups/abstract_pickup.gd @@ -0,0 +1,8 @@ +class_name AbstractPickup +extends Area2D + + +func _on_body_entered(body: Node2D) -> void: + if body.has_method("add_pickup"): + collision_mask = 0 + body.add_pickup(self) diff --git a/game/pickups/abstract_pickup.gd.uid b/game/pickups/abstract_pickup.gd.uid new file mode 100644 index 0000000..cb5cac4 --- /dev/null +++ b/game/pickups/abstract_pickup.gd.uid @@ -0,0 +1 @@ +uid://c54xcaigi43rn diff --git a/game/pickups/abstract_pickup.tscn b/game/pickups/abstract_pickup.tscn new file mode 100644 index 0000000..ee7cb86 --- /dev/null +++ b/game/pickups/abstract_pickup.tscn @@ -0,0 +1,30 @@ +[gd_scene load_steps=5 format=3 uid="uid://cmnfpr2h2hbeu"] + +[ext_resource type="Script" uid="uid://c54xcaigi43rn" path="res://game/pickups/abstract_pickup.gd" id="1_ek4cl"] +[ext_resource type="Shader" uid="uid://lqq1mg6l1qqe" path="res://game/shaders/black_n_white.gdshader" id="2_33jno"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_4r7i4"] +shader = ExtResource("2_33jno") +shader_parameter/black_color = Color(0, 0, 0, 1) +shader_parameter/white_color = Color(1, 1, 1, 1) +shader_parameter/switch_colors = false +shader_parameter/threshold = 0.5 +shader_parameter/speed = 5.0000002375 +shader_parameter/intensity = 0.800000038 +shader_parameter/scale = 25.0000011875 + +[sub_resource type="CircleShape2D" id="CircleShape2D_ek4cl"] +radius = 7.0 + +[node name="AbstractPickup" type="Area2D"] +collision_layer = 0 +collision_mask = 136 +script = ExtResource("1_ek4cl") + +[node name="Sprite2D" type="Sprite2D" parent="."] +material = SubResource("ShaderMaterial_4r7i4") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_ek4cl") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/game/pickups/book_pickup.gd b/game/pickups/book_pickup.gd new file mode 100644 index 0000000..83890db --- /dev/null +++ b/game/pickups/book_pickup.gd @@ -0,0 +1,2 @@ +class_name BookPickup +extends AbstractPickup diff --git a/game/pickups/book_pickup.gd.uid b/game/pickups/book_pickup.gd.uid new file mode 100644 index 0000000..11d42b9 --- /dev/null +++ b/game/pickups/book_pickup.gd.uid @@ -0,0 +1 @@ +uid://sheh3mtq6k8o diff --git a/game/pickups/book_pickup.tscn b/game/pickups/book_pickup.tscn new file mode 100644 index 0000000..2f9d822 --- /dev/null +++ b/game/pickups/book_pickup.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=5 format=3 uid="uid://cudbspmpx6sik"] + +[ext_resource type="PackedScene" uid="uid://cmnfpr2h2hbeu" path="res://game/pickups/abstract_pickup.tscn" id="1_e7pu1"] +[ext_resource type="Script" uid="uid://sheh3mtq6k8o" path="res://game/pickups/book_pickup.gd" id="2_jsqc0"] +[ext_resource type="Texture2D" uid="uid://ybf6pbve48lv" path="res://images/level/pickups.png" id="3_yg5bj"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_cpnvb"] +atlas = ExtResource("3_yg5bj") +region = Rect2(16, 16, 16, 16) + +[node name="BookPickup" instance=ExtResource("1_e7pu1")] +script = ExtResource("2_jsqc0") + +[node name="Sprite2D" parent="." index="0"] +texture = SubResource("AtlasTexture_cpnvb") diff --git a/game/pickups/circle_key_pickup.gd b/game/pickups/circle_key_pickup.gd new file mode 100644 index 0000000..84f6695 --- /dev/null +++ b/game/pickups/circle_key_pickup.gd @@ -0,0 +1,2 @@ +class_name CircleKeyPickup +extends AbstractPickup diff --git a/game/pickups/circle_key_pickup.gd.uid b/game/pickups/circle_key_pickup.gd.uid new file mode 100644 index 0000000..868e36d --- /dev/null +++ b/game/pickups/circle_key_pickup.gd.uid @@ -0,0 +1 @@ +uid://dbssfh6ecgstl diff --git a/game/pickups/circle_key_pickup.tscn b/game/pickups/circle_key_pickup.tscn new file mode 100644 index 0000000..95d49e1 --- /dev/null +++ b/game/pickups/circle_key_pickup.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=5 format=3 uid="uid://c4gqqhlew67ay"] + +[ext_resource type="PackedScene" uid="uid://cmnfpr2h2hbeu" path="res://game/pickups/abstract_pickup.tscn" id="1_u687g"] +[ext_resource type="Script" uid="uid://dbssfh6ecgstl" path="res://game/pickups/circle_key_pickup.gd" id="2_sjfny"] +[ext_resource type="Texture2D" uid="uid://ybf6pbve48lv" path="res://images/level/pickups.png" id="3_pwkbp"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_mprb4"] +atlas = ExtResource("3_pwkbp") +region = Rect2(0, 0, 16, 16) + +[node name="CircleKeyPickup" instance=ExtResource("1_u687g")] +script = ExtResource("2_sjfny") + +[node name="Sprite2D" parent="." index="0"] +texture = SubResource("AtlasTexture_mprb4") diff --git a/game/pickups/square_key_pickup.gd b/game/pickups/square_key_pickup.gd new file mode 100644 index 0000000..ccac876 --- /dev/null +++ b/game/pickups/square_key_pickup.gd @@ -0,0 +1,2 @@ +class_name SquareKeyPickup +extends AbstractPickup diff --git a/game/pickups/square_key_pickup.gd.uid b/game/pickups/square_key_pickup.gd.uid new file mode 100644 index 0000000..f4411ba --- /dev/null +++ b/game/pickups/square_key_pickup.gd.uid @@ -0,0 +1 @@ +uid://ck5tvlprgwlet diff --git a/game/pickups/square_key_pickup.tscn b/game/pickups/square_key_pickup.tscn new file mode 100644 index 0000000..7964707 --- /dev/null +++ b/game/pickups/square_key_pickup.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=5 format=3 uid="uid://ciubf1ttwc133"] + +[ext_resource type="PackedScene" uid="uid://cmnfpr2h2hbeu" path="res://game/pickups/abstract_pickup.tscn" id="1_20fsk"] +[ext_resource type="Script" uid="uid://ck5tvlprgwlet" path="res://game/pickups/square_key_pickup.gd" id="2_5ybdl"] +[ext_resource type="Texture2D" uid="uid://ybf6pbve48lv" path="res://images/level/pickups.png" id="3_5ybdl"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_fx152"] +atlas = ExtResource("3_5ybdl") +region = Rect2(0, 16, 16, 16) + +[node name="SquareKeyPickup" instance=ExtResource("1_20fsk")] +script = ExtResource("2_5ybdl") + +[node name="Sprite2D" parent="." index="0"] +texture = SubResource("AtlasTexture_fx152") diff --git a/game/pickups/triangle_key_pickup.gd b/game/pickups/triangle_key_pickup.gd new file mode 100644 index 0000000..dd51ebf --- /dev/null +++ b/game/pickups/triangle_key_pickup.gd @@ -0,0 +1,2 @@ +class_name TriangleKeyPickup +extends AbstractPickup diff --git a/game/pickups/triangle_key_pickup.gd.uid b/game/pickups/triangle_key_pickup.gd.uid new file mode 100644 index 0000000..783c19f --- /dev/null +++ b/game/pickups/triangle_key_pickup.gd.uid @@ -0,0 +1 @@ +uid://c73gihkak2xns diff --git a/game/pickups/triangle_key_pickup.tscn b/game/pickups/triangle_key_pickup.tscn new file mode 100644 index 0000000..92dd984 --- /dev/null +++ b/game/pickups/triangle_key_pickup.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=5 format=3 uid="uid://dqgmfpv2mhdpn"] + +[ext_resource type="PackedScene" uid="uid://cmnfpr2h2hbeu" path="res://game/pickups/abstract_pickup.tscn" id="1_qr3v1"] +[ext_resource type="Script" uid="uid://c73gihkak2xns" path="res://game/pickups/triangle_key_pickup.gd" id="2_pn8rn"] +[ext_resource type="Texture2D" uid="uid://ybf6pbve48lv" path="res://images/level/pickups.png" id="3_5k6x8"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_8ko2n"] +atlas = ExtResource("3_5k6x8") +region = Rect2(16, 0, 16, 16) + +[node name="TriangleKeyPickup" instance=ExtResource("1_qr3v1")] +script = ExtResource("2_pn8rn") + +[node name="Sprite2D" parent="." index="0"] +texture = SubResource("AtlasTexture_8ko2n") diff --git a/images/level/doors.png b/images/level/doors.png new file mode 100644 index 0000000..f5adac4 --- /dev/null +++ b/images/level/doors.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ae4988cbdf324c250a875d80ba57be1ea1e769447afbfe9f1564667268d4e03 +size 860 diff --git a/images/level/doors.png.import b/images/level/doors.png.import new file mode 100644 index 0000000..d2a4aa1 --- /dev/null +++ b/images/level/doors.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://sfjjweantpja" +path="res://.godot/imported/doors.png-8e73775091cbd26b741396078949d5a2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://images/level/doors.png" +dest_files=["res://.godot/imported/doors.png-8e73775091cbd26b741396078949d5a2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/images/level/pickups.png b/images/level/pickups.png index 954c39b..621b40d 100644 --- a/images/level/pickups.png +++ b/images/level/pickups.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:88a93d46a1115b6c2f06987da713ef2df7c2dcf48e00ca73b0434bf8fd6aa564 -size 218 +oid sha256:bcba5b5c9689b556792f456530c96ced529d170da5c17316d104c865f95b39ba +size 222