From fcea3cee0320990e38499ae6bbe33fc41fb863a7 Mon Sep 17 00:00:00 2001 From: VoidTwo Date: Sat, 4 Dec 2021 00:07:33 -0600 Subject: [PATCH] Major collision detection improvements, more file organization, and added key interactable --- Enemies/Glowing Ghost.gd | 12 +++--- Enemies/Glowing Ghost.tscn | 37 ++++++++++++------ GUI/Level Select Menu.tscn | 32 +++++++-------- Levels/Interactables/Silver Key Pickup.gd | 9 +++++ Levels/Interactables/Silver Key Pickup.tscn | 23 +++++++++++ Levels/Level 5.tscn | 8 +++- Player/Player.gd | 9 ++++- Player/Player.tscn | 25 ++++++------ .../Level_5_Enemy_Glowing_Ghost_Occluder.tres | 2 +- Resources/Level_5_Floor_Tileset.tres | 2 +- Resources/Level_5_Walls_Tileset.tres | 2 +- Sprites/Levels/Interactables/Silver_Key.png | Bin 0 -> 160 bytes .../Interactables/Silver_Key.png.import} | 6 +-- .../Tilesets}/Level_5_Floor_Tileset.png | Bin .../Tilesets/Level_5_Floor_Tileset.png.import | 35 +++++++++++++++++ .../Tilesets}/Level_5_Walls_Tileset.png | Bin .../Level_5_Walls_Tileset.png.import | 6 +-- project.godot | 6 +++ 18 files changed, 155 insertions(+), 59 deletions(-) create mode 100644 Levels/Interactables/Silver Key Pickup.gd create mode 100644 Levels/Interactables/Silver Key Pickup.tscn create mode 100644 Sprites/Levels/Interactables/Silver_Key.png rename Sprites/{Assets/Level_5_Floor_Tileset.png.import => Levels/Interactables/Silver_Key.png.import} (67%) rename Sprites/{Assets => Levels/Tilesets}/Level_5_Floor_Tileset.png (100%) create mode 100644 Sprites/Levels/Tilesets/Level_5_Floor_Tileset.png.import rename Sprites/{Assets => Levels/Tilesets}/Level_5_Walls_Tileset.png (100%) rename Sprites/{Assets => Levels/Tilesets}/Level_5_Walls_Tileset.png.import (66%) diff --git a/Enemies/Glowing Ghost.gd b/Enemies/Glowing Ghost.gd index 562659f..f59eed6 100644 --- a/Enemies/Glowing Ghost.gd +++ b/Enemies/Glowing Ghost.gd @@ -9,20 +9,20 @@ var velocity: Vector2 = Vector2.ZERO func _physics_process(_delta: float) -> void: velocity = Vector2.ZERO - if player: + if player and position.distance_to(player.position) > 1: velocity = position.direction_to(player.position).normalized() * SPEED velocity = move_and_slide(velocity) return -func _on_player_detector_area_entered(area: Area2D) -> void: - if area.get_parent().name == 'Player': - player = area.get_parent() +func _on_player_detector_body_entered(body: Node) -> void: + if 'player' in body.get_groups(): + player = body return -func _on_player_detector_area_exited(area: Area2D): - if area.get_parent().name == 'Player': +func _on_player_detector_body_exited(body: Node) -> void: + if 'player' in body.get_groups(): player = null return diff --git a/Enemies/Glowing Ghost.tscn b/Enemies/Glowing Ghost.tscn index 78e26a0..ad6e6ab 100644 --- a/Enemies/Glowing Ghost.tscn +++ b/Enemies/Glowing Ghost.tscn @@ -1,10 +1,14 @@ -[gd_scene load_steps=7 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://Resources/Level_5_Enemy_Glowing_Ghost_Occluder.tres" type="OccluderPolygon2D" id=1] [ext_resource path="res://Sprites/Assets/Light.png" type="Texture" id=2] [ext_resource path="res://Sprites/Enemies/Glowing_Ghost.png" type="Texture" id=3] [ext_resource path="res://Enemies/Glowing Ghost.gd" type="Script" id=4] +[sub_resource type="CapsuleShape2D" id=3] +radius = 1.5 +height = 3.0 + [sub_resource type="CapsuleShape2D" id=1] radius = 3.0 height = 2.0 @@ -12,18 +16,29 @@ height = 2.0 [sub_resource type="CircleShape2D" id=2] radius = 50.0 -[node name="Glowing Ghost" type="KinematicBody2D" groups=["enemies"]] -collision_layer = 2 +[node name="Glowing Ghost" type="KinematicBody2D" groups=["enemy"]] +collision_layer = 4 +collision_mask = 5 script = ExtResource( 4 ) [node name="Sprite" type="Sprite" parent="."] light_mask = 4 position = Vector2( 0, -3 ) texture = ExtResource( 3 ) +offset = Vector2( 0, 0.5 ) -[node name="Hitbox" type="CollisionShape2D" parent="."] +[node name="Collision" type="CollisionShape2D" parent="."] visible = false -position = Vector2( 0, -3 ) +rotation = 1.5708 +shape = SubResource( 3 ) + +[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]] +collision_layer = 4 +collision_mask = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"] +visible = false +position = Vector2( 0, -2.5 ) shape = SubResource( 1 ) [node name="Player Detector" type="Area2D" parent="."] @@ -36,22 +51,22 @@ monitorable = false visible = false shape = SubResource( 2 ) -[node name="Light2D" type="Light2D" parent="."] +[node name="Light" type="Light2D" parent="."] scale = Vector2( 0.5, 0.5 ) texture = ExtResource( 2 ) color = Color( 0.984314, 0.94902, 0.211765, 0.392157 ) energy = 2.0 range_item_cull_mask = 11 -[node name="Light2DEyes" type="Light2D" parent="."] +[node name="Eyes" type="Light2D" parent="."] scale = Vector2( 0.1, 0.1 ) texture = ExtResource( 2 ) -offset = Vector2( 5, -40 ) +offset = Vector2( 5, -35 ) range_item_cull_mask = 4 -[node name="LightOccluder2D" type="LightOccluder2D" parent="."] +[node name="Occluder" type="LightOccluder2D" parent="."] show_behind_parent = true occluder = ExtResource( 1 ) -[connection signal="area_entered" from="Player Detector" to="." method="_on_player_detector_area_entered"] -[connection signal="area_exited" from="Player Detector" to="." method="_on_player_detector_area_exited"] +[connection signal="body_entered" from="Player Detector" to="." method="_on_player_detector_body_entered"] +[connection signal="body_exited" from="Player Detector" to="." method="_on_player_detector_body_exited"] diff --git a/GUI/Level Select Menu.tscn b/GUI/Level Select Menu.tscn index 7a8c8c6..be9933a 100644 --- a/GUI/Level Select Menu.tscn +++ b/GUI/Level Select Menu.tscn @@ -11,7 +11,7 @@ [node name="Level Select Menu" type="Node"] script = ExtResource( 7 ) -[node name="MarginContainer" type="MarginContainer" parent="."] +[node name="Menu" type="CenterContainer" parent="."] margin_left = 10.0 margin_top = 10.0 margin_right = 310.0 @@ -21,54 +21,50 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="CenterContainer" type="CenterContainer" parent="MarginContainer"] -margin_right = 300.0 -margin_bottom = 160.0 - -[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/CenterContainer"] +[node name="Menu Options" type="HBoxContainer" parent="Menu"] margin_left = 20.0 margin_top = 60.0 margin_right = 280.0 margin_bottom = 100.0 -[node name="Hub World" type="TextureButton" parent="MarginContainer/CenterContainer/HBoxContainer"] +[node name="Hub World" type="TextureButton" parent="Menu/Menu Options"] margin_right = 40.0 margin_bottom = 40.0 texture_normal = ExtResource( 6 ) -[node name="Level 1" type="TextureButton" parent="MarginContainer/CenterContainer/HBoxContainer"] +[node name="Level 1" type="TextureButton" parent="Menu/Menu Options"] margin_left = 44.0 margin_right = 84.0 margin_bottom = 40.0 texture_normal = ExtResource( 2 ) -[node name="Level 2" type="TextureButton" parent="MarginContainer/CenterContainer/HBoxContainer"] +[node name="Level 2" type="TextureButton" parent="Menu/Menu Options"] margin_left = 88.0 margin_right = 128.0 margin_bottom = 40.0 texture_normal = ExtResource( 4 ) -[node name="Level 3" type="TextureButton" parent="MarginContainer/CenterContainer/HBoxContainer"] +[node name="Level 3" type="TextureButton" parent="Menu/Menu Options"] margin_left = 132.0 margin_right = 172.0 margin_bottom = 40.0 texture_normal = ExtResource( 1 ) -[node name="Level 4" type="TextureButton" parent="MarginContainer/CenterContainer/HBoxContainer"] +[node name="Level 4" type="TextureButton" parent="Menu/Menu Options"] margin_left = 176.0 margin_right = 216.0 margin_bottom = 40.0 texture_normal = ExtResource( 3 ) -[node name="Level 5" type="TextureButton" parent="MarginContainer/CenterContainer/HBoxContainer"] +[node name="Level 5" type="TextureButton" parent="Menu/Menu Options"] margin_left = 220.0 margin_right = 260.0 margin_bottom = 40.0 texture_normal = ExtResource( 5 ) -[connection signal="pressed" from="MarginContainer/CenterContainer/HBoxContainer/Hub World" to="." method="_on_hub_world_button_pressed"] -[connection signal="pressed" from="MarginContainer/CenterContainer/HBoxContainer/Level 1" to="." method="_on_level_1_button_pressed"] -[connection signal="pressed" from="MarginContainer/CenterContainer/HBoxContainer/Level 2" to="." method="_on_level_2_button_pressed"] -[connection signal="pressed" from="MarginContainer/CenterContainer/HBoxContainer/Level 3" to="." method="_on_level_3_button_pressed"] -[connection signal="pressed" from="MarginContainer/CenterContainer/HBoxContainer/Level 4" to="." method="_on_level_4_button_pressed"] -[connection signal="pressed" from="MarginContainer/CenterContainer/HBoxContainer/Level 5" to="." method="_on_level_5_button_pressed"] +[connection signal="pressed" from="Menu/Menu Options/Hub World" to="." method="_on_hub_world_button_pressed"] +[connection signal="pressed" from="Menu/Menu Options/Level 1" to="." method="_on_level_1_button_pressed"] +[connection signal="pressed" from="Menu/Menu Options/Level 2" to="." method="_on_level_2_button_pressed"] +[connection signal="pressed" from="Menu/Menu Options/Level 3" to="." method="_on_level_3_button_pressed"] +[connection signal="pressed" from="Menu/Menu Options/Level 4" to="." method="_on_level_4_button_pressed"] +[connection signal="pressed" from="Menu/Menu Options/Level 5" to="." method="_on_level_5_button_pressed"] diff --git a/Levels/Interactables/Silver Key Pickup.gd b/Levels/Interactables/Silver Key Pickup.gd new file mode 100644 index 0000000..219a404 --- /dev/null +++ b/Levels/Interactables/Silver Key Pickup.gd @@ -0,0 +1,9 @@ +extends Area2D + + +func _on_silver_key_pickup_body_entered(body: Node): + if 'player' in body.get_groups(): + body.add_item('Silver Key') + + call_deferred('queue_free') + return diff --git a/Levels/Interactables/Silver Key Pickup.tscn b/Levels/Interactables/Silver Key Pickup.tscn new file mode 100644 index 0000000..7f78ef6 --- /dev/null +++ b/Levels/Interactables/Silver Key Pickup.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://Sprites/Levels/Interactables/Silver_Key.png" type="Texture" id=1] +[ext_resource path="res://Levels/Interactables/Silver Key Pickup.gd" type="Script" id=2] + +[sub_resource type="CircleShape2D" id=1] + +[node name="Silver Key Pickup" type="Area2D"] +collision_layer = 0 +collision_mask = 2 +monitorable = false +script = ExtResource( 2 ) + +[node name="Sprite" type="Sprite" parent="."] +texture = ExtResource( 1 ) +centered = false + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +visible = false +position = Vector2( 8, 8 ) +shape = SubResource( 1 ) + +[connection signal="body_entered" from="." to="." method="_on_silver_key_pickup_body_entered"] diff --git a/Levels/Level 5.tscn b/Levels/Level 5.tscn index abe97fe..ab8ae82 100644 --- a/Levels/Level 5.tscn +++ b/Levels/Level 5.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=11 format=2] +[gd_scene load_steps=12 format=2] [ext_resource path="res://Player/Player.tscn" type="PackedScene" id=1] [ext_resource path="res://Levels/Level 5.gd" type="Script" id=2] @@ -10,6 +10,7 @@ [ext_resource path="res://Resources/Level_5_Walls_Tileset.tres" type="TileSet" id=8] [ext_resource path="res://Enemies/Glowing Ghost.tscn" type="PackedScene" id=9] [ext_resource path="res://Levels/Traps/Spawn Trap.tscn" type="PackedScene" id=10] +[ext_resource path="res://Levels/Interactables/Silver Key Pickup.tscn" type="PackedScene" id=11] [node name="Void Level" type="Node2D"] script = ExtResource( 2 ) @@ -52,6 +53,11 @@ position = Vector2( 281, 109 ) [node name="Glowing Ghost 1" parent="YSort/Enemies" instance=ExtResource( 9 )] position = Vector2( 328.5, 20 ) +[node name="Interactables" type="Node2D" parent="."] + +[node name="Silver Key Pickup" parent="Interactables" instance=ExtResource( 11 )] +position = Vector2( 240, 80 ) + [node name="Traps" type="Node2D" parent="."] [node name="Spawn Trap" parent="Traps" instance=ExtResource( 10 )] diff --git a/Player/Player.gd b/Player/Player.gd index 174273f..02ec313 100644 --- a/Player/Player.gd +++ b/Player/Player.gd @@ -45,13 +45,18 @@ func add_currency(amount: int) -> void: return +func add_item(item: String) -> void: + print('%s added to inventory' % [item]) + return + + func _on_Inventory_update_currency(amount: int) -> void: hud.update_currency(amount) return -func _on_Hitbox_body_entered(body: Node) -> void: - if not 'enemies' in body.get_groups(): +func _on_hitbox_area_entered(area: Area2D) -> void: + if not 'enemy_hitbox' in area.get_groups(): return if health_index != 0: diff --git a/Player/Player.tscn b/Player/Player.tscn index ec99e23..8e46ab1 100644 --- a/Player/Player.tscn +++ b/Player/Player.tscn @@ -8,25 +8,25 @@ [sub_resource type="SpriteFrames" id=1] animations = [ { -"frames": [ ExtResource( 2 ) ], -"loop": false, -"name": "look_right", -"speed": 5.0 -}, { "frames": [ ExtResource( 3 ) ], "loop": false, "name": "look_down", "speed": 5.0 }, { -"frames": [ ExtResource( 4 ) ], +"frames": [ ExtResource( 2 ) ], "loop": false, -"name": "look_up", +"name": "look_right", "speed": 5.0 }, { "frames": [ ExtResource( 2 ) ], "loop": false, "name": "look_left", "speed": 5.0 +}, { +"frames": [ ExtResource( 4 ) ], +"loop": false, +"name": "look_up", +"speed": 5.0 } ] [sub_resource type="CapsuleShape2D" id=2] @@ -180,7 +180,7 @@ graph_offset = Vector2( -3591.37, -302.6 ) [sub_resource type="AnimationNodeStateMachinePlayback" id=14] -[node name="Player" type="KinematicBody2D"] +[node name="Player" type="KinematicBody2D" groups=["player"]] collision_layer = 2 script = ExtResource( 1 ) @@ -188,16 +188,17 @@ script = ExtResource( 1 ) light_mask = 2 frames = SubResource( 1 ) animation = "look_right" -offset = Vector2( 0, -5 ) +offset = Vector2( 0, -4 ) [node name="Collision" type="CollisionShape2D" parent="."] visible = false rotation = 1.5708 shape = SubResource( 2 ) -[node name="Hitbox" type="Area2D" parent="."] +[node name="Hitbox" type="Area2D" parent="." groups=["player_hitbox"]] collision_layer = 2 -collision_mask = 2 +collision_mask = 4 +input_pickable = false [node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"] visible = false @@ -220,5 +221,5 @@ parameters/Idle/blend_position = Vector2( 0.0760697, 0 ) [node name="Inventory" parent="." instance=ExtResource( 5 )] -[connection signal="body_entered" from="Hitbox" to="." method="_on_Hitbox_body_entered"] +[connection signal="area_entered" from="Hitbox" to="." method="_on_hitbox_area_entered"] [connection signal="update_currency" from="Inventory" to="." method="_on_Inventory_update_currency"] diff --git a/Resources/Level_5_Enemy_Glowing_Ghost_Occluder.tres b/Resources/Level_5_Enemy_Glowing_Ghost_Occluder.tres index 625c140..2bef589 100644 --- a/Resources/Level_5_Enemy_Glowing_Ghost_Occluder.tres +++ b/Resources/Level_5_Enemy_Glowing_Ghost_Occluder.tres @@ -1,4 +1,4 @@ [gd_resource type="OccluderPolygon2D" format=2] [resource] -polygon = PoolVector2Array( -3, -1, 3, -1, 1.5, 1, -1.5, 1 ) +polygon = PoolVector2Array( -3, -0.5, 3, -0.5, 1.5, 1.5, -1.5, 1.5 ) diff --git a/Resources/Level_5_Floor_Tileset.tres b/Resources/Level_5_Floor_Tileset.tres index 6a44339..7fca9c3 100644 --- a/Resources/Level_5_Floor_Tileset.tres +++ b/Resources/Level_5_Floor_Tileset.tres @@ -1,6 +1,6 @@ [gd_resource type="TileSet" load_steps=2 format=2] -[ext_resource path="res://Sprites/Assets/Level_5_Floor_Tileset.png" type="Texture" id=1] +[ext_resource path="res://Sprites/Levels/Tilesets/Level_5_Floor_Tileset.png" type="Texture" id=1] [resource] 0/name = "void_level_base_tileset.png 0" diff --git a/Resources/Level_5_Walls_Tileset.tres b/Resources/Level_5_Walls_Tileset.tres index 87317ac..825658f 100644 --- a/Resources/Level_5_Walls_Tileset.tres +++ b/Resources/Level_5_Walls_Tileset.tres @@ -1,6 +1,6 @@ [gd_resource type="TileSet" load_steps=96 format=2] -[ext_resource path="res://Sprites/Assets/Level_5_Walls_Tileset.png" type="Texture" id=1] +[ext_resource path="res://Sprites/Levels/Tilesets/Level_5_Walls_Tileset.png" type="Texture" id=1] [sub_resource type="OccluderPolygon2D" id=48] polygon = PoolVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 ) diff --git a/Sprites/Levels/Interactables/Silver_Key.png b/Sprites/Levels/Interactables/Silver_Key.png new file mode 100644 index 0000000000000000000000000000000000000000..b8704e88635e3a3f6dd8d5ca735faf5fd3e1be6a GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJe}GSjE06|)*=x6-zWt}Au6^Go zhgm>AV@Z%-FoVOh8)-m}y{C&~NX4z*(~N8f7(7RAeT9wD8mcPWPk41dJAZoR+*>MT-`}wpFfr_Hw=Q1;G>XB~)z4*}Q$iB} D24yx6 literal 0 HcmV?d00001 diff --git a/Sprites/Assets/Level_5_Floor_Tileset.png.import b/Sprites/Levels/Interactables/Silver_Key.png.import similarity index 67% rename from Sprites/Assets/Level_5_Floor_Tileset.png.import rename to Sprites/Levels/Interactables/Silver_Key.png.import index b7d9784..da710b3 100644 --- a/Sprites/Assets/Level_5_Floor_Tileset.png.import +++ b/Sprites/Levels/Interactables/Silver_Key.png.import @@ -2,15 +2,15 @@ importer="texture" type="StreamTexture" -path="res://.import/Level_5_Floor_Tileset.png-8417e5e7747082b0687716c91f243b2e.stex" +path="res://.import/Silver_Key.png-257bee058565f7389053b11d401f95fc.stex" metadata={ "vram_texture": false } [deps] -source_file="res://Sprites/Assets/Level_5_Floor_Tileset.png" -dest_files=[ "res://.import/Level_5_Floor_Tileset.png-8417e5e7747082b0687716c91f243b2e.stex" ] +source_file="res://Sprites/Levels/Interactables/Silver_Key.png" +dest_files=[ "res://.import/Silver_Key.png-257bee058565f7389053b11d401f95fc.stex" ] [params] diff --git a/Sprites/Assets/Level_5_Floor_Tileset.png b/Sprites/Levels/Tilesets/Level_5_Floor_Tileset.png similarity index 100% rename from Sprites/Assets/Level_5_Floor_Tileset.png rename to Sprites/Levels/Tilesets/Level_5_Floor_Tileset.png diff --git a/Sprites/Levels/Tilesets/Level_5_Floor_Tileset.png.import b/Sprites/Levels/Tilesets/Level_5_Floor_Tileset.png.import new file mode 100644 index 0000000..89efb0b --- /dev/null +++ b/Sprites/Levels/Tilesets/Level_5_Floor_Tileset.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/Level_5_Floor_Tileset.png-6659a9a904b381125cc681dd7104e9c4.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/Levels/Tilesets/Level_5_Floor_Tileset.png" +dest_files=[ "res://.import/Level_5_Floor_Tileset.png-6659a9a904b381125cc681dd7104e9c4.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=2 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=0 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/Sprites/Assets/Level_5_Walls_Tileset.png b/Sprites/Levels/Tilesets/Level_5_Walls_Tileset.png similarity index 100% rename from Sprites/Assets/Level_5_Walls_Tileset.png rename to Sprites/Levels/Tilesets/Level_5_Walls_Tileset.png diff --git a/Sprites/Assets/Level_5_Walls_Tileset.png.import b/Sprites/Levels/Tilesets/Level_5_Walls_Tileset.png.import similarity index 66% rename from Sprites/Assets/Level_5_Walls_Tileset.png.import rename to Sprites/Levels/Tilesets/Level_5_Walls_Tileset.png.import index 25b1ba1..fe92aff 100644 --- a/Sprites/Assets/Level_5_Walls_Tileset.png.import +++ b/Sprites/Levels/Tilesets/Level_5_Walls_Tileset.png.import @@ -2,15 +2,15 @@ importer="texture" type="StreamTexture" -path="res://.import/Level_5_Walls_Tileset.png-d7ec241820f3c5ab4d160dc1b4772cd2.stex" +path="res://.import/Level_5_Walls_Tileset.png-c7ee165ac033cd739afab432c8bab7bd.stex" metadata={ "vram_texture": false } [deps] -source_file="res://Sprites/Assets/Level_5_Walls_Tileset.png" -dest_files=[ "res://.import/Level_5_Walls_Tileset.png-d7ec241820f3c5ab4d160dc1b4772cd2.stex" ] +source_file="res://Sprites/Levels/Tilesets/Level_5_Walls_Tileset.png" +dest_files=[ "res://.import/Level_5_Walls_Tileset.png-c7ee165ac033cd739afab432c8bab7bd.stex" ] [params] diff --git a/project.godot b/project.godot index 3f96c72..0d89ab1 100644 --- a/project.godot +++ b/project.godot @@ -55,6 +55,12 @@ screenshot={ ] } +[layer_names] + +2d_physics/layer_1="Immovable" +2d_physics/layer_2="Player" +2d_physics/layer_3="Enemies" + [physics] common/enable_pause_aware_picking=true