diff --git a/CHANGELOG.md b/CHANGELOG.md index 3427da0ad..0d573c38a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ +## [4.0.0-alpha.123](https://github.com/godot-escoria/escoria-demo-game/compare/v0.0.0...v4.0.0-alpha.123) (2022-03-08) + + +### Features + +* New graphics for room 8 ([7a64c77](https://github.com/godot-escoria/escoria-demo-game/commit/7a64c7707fe8e5011d559fe2f71f458cde1a7d2e)) + + + +## [4.0.0-alpha.122](https://github.com/godot-escoria/escoria-demo-game/compare/v0.0.0...v4.0.0-alpha.122) (2022-03-08) + + +### Features + +* introduce escoria-ui-keyboard-9verbs to verify register_custom_input_handler() API ([5a77bd6](https://github.com/godot-escoria/escoria-demo-game/commit/5a77bd6fdc100461dc1eeb351299c0fc89d32b14)) +* register_custom_input_handler() API ([14cf132](https://github.com/godot-escoria/escoria-demo-game/commit/14cf1327fe0b6e3c16c0df6628293b6197f66708)) + + + ## [4.0.0-alpha.121](https://github.com/godot-escoria/escoria-demo-game/compare/v0.0.0...v4.0.0-alpha.121) (2022-03-07) diff --git a/game/rooms/room08/door.png b/game/rooms/room08/door.png new file mode 100644 index 000000000..bba2126d1 Binary files /dev/null and b/game/rooms/room08/door.png differ diff --git a/game/rooms/room08/esc/button_puzzle.esc b/game/rooms/room08/esc/button_puzzle.esc index df79b37be..bd50aae7b 100755 --- a/game/rooms/room08/esc/button_puzzle.esc +++ b/game/rooms/room08/esc/button_puzzle.esc @@ -1,10 +1,14 @@ :look -say player "That must be the command to open the door." +say player "That's the button to open the door." :use > [!r8_m_door_open] - #superpose_scene "res://game/rooms/room08/puzzle/10_buttons_puzzle.tscn" + # Load the puzzle spawn puzzle "res://game/rooms/room08/puzzle/10_buttons_puzzle.tscn" - -> [r8_m_door_open] - say player "The door is already open." + +# Currently the button gets disabled when you beat the puzzle, so there's +# no button you can interract with. If you set it up so the button was +# still enabled, this code would provide feedback to the user if they +# attempted to "use" the already unlocked puzzle. +#> [r8_m_door_open] +# say player "The door is already open." diff --git a/game/rooms/room08/esc/button_reset_puzzle.esc b/game/rooms/room08/esc/button_reset_puzzle.esc index f73f0b93d..cfbb8f0f5 100755 --- a/game/rooms/room08/esc/button_reset_puzzle.esc +++ b/game/rooms/room08/esc/button_reset_puzzle.esc @@ -1,6 +1,18 @@ :look -say player "That must be the command to open the door." +say player "That's the button to relock the door." :use -set_global r8_m_door_open false -set_state r8_m_door door_close +> [r8_m_door_open] + # If the door is unlocked, reset the puzzle. + # Set the door open to false so the room gets set up + # correctly if you exit and reenter + set_global r8_m_door_open false + # Play the door closing animation to "relock" the door + set_state r8_m_door door_close + # Reactivate the puzzle button so the player can redo + # the puzzle and unlock the door again + set_active r8_mini_puzzle_button true + stop +> [!r8_m_door_open] + # Don't reset the puzzle if the door is currently locked + say player "The puzzle doesn't need to be reset" \ No newline at end of file diff --git a/game/rooms/room08/esc/middle_exit.esc b/game/rooms/room08/esc/middle_exit.esc index 0ada7862f..40931b542 100755 --- a/game/rooms/room08/esc/middle_exit.esc +++ b/game/rooms/room08/esc/middle_exit.esc @@ -1,2 +1,14 @@ +:look +say player "That's the door to room 9" + :exit_scene -change_scene "res://game/rooms/room09/room09.tscn" +> [r8_m_door_open] + # Only let the player into the next room if they've passed the puzzle + change_scene "res://game/rooms/room09/room09.tscn" + +> [!r8_m_door_open] + # The door is always an exit, but trying to go through it won't change + # scenes if you haven't unlocked the puzzle. + say player "The door is locked" + + diff --git a/game/rooms/room08/esc/room08.esc b/game/rooms/room08/esc/room08.esc index bbf6d6229..4988782b9 100644 --- a/game/rooms/room08/esc/room08.esc +++ b/game/rooms/room08/esc/room08.esc @@ -1,7 +1,22 @@ :setup +# This code will run only the first time you enter the room. +> [!room8_visited] + set_global room8_visited true + set_global r8_m_door_open false + # Activate locked puzzle button the first time you enter the room only. + # It will keep it's locked/unlocked state on future room entrances. + # It should already be active, this is a safety precaution. + set_active r8_mini_puzzle_button true + > [r8_m_door_open] + # If the door was previously opened, quickly play the open animation + # so you don't see a closed door when the room appears. set_state r8_m_door door_open true + # Hide locked puzzle icon and make the button non-interactive as + # the puzzle was previously unlocked + set_active r8_mini_puzzle_button false + > [eq ESC_LAST_SCENE room7] teleport player r8_l_exit diff --git a/game/rooms/room08/locked_button.png b/game/rooms/room08/locked_button.png new file mode 100644 index 000000000..fa3d5b8cc Binary files /dev/null and b/game/rooms/room08/locked_button.png differ diff --git a/game/rooms/room08/puzzle/10_buttons_puzzle.gd b/game/rooms/room08/puzzle/10_buttons_puzzle.gd index 7c0795267..a61c815aa 100644 --- a/game/rooms/room08/puzzle/10_buttons_puzzle.gd +++ b/game/rooms/room08/puzzle/10_buttons_puzzle.gd @@ -52,6 +52,7 @@ func win(): escoria.main.current_scene.show() escoria.globals_manager.set_global("r8_m_door_open", true) escoria.object_manager.get_object("r8_m_door").set_state("door_open") + escoria.object_manager.get_object("r8_mini_puzzle_button").active = false func _on_quit_pressed(): diff --git a/game/rooms/room08/room08.tscn b/game/rooms/room08/room08.tscn index de35968d0..4b3aeadb0 100644 --- a/game/rooms/room08/room08.tscn +++ b/game/rooms/room08/room08.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=2] +[gd_scene load_steps=18 format=2] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=2] @@ -7,68 +7,200 @@ [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=5] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_room.gd" type="Script" id=6] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=7] +[ext_resource path="res://game/rooms/room08/room8background.png" type="Texture" id=8] +[ext_resource path="res://game/rooms/room08/locked_button.png" type="Texture" id=9] +[ext_resource path="res://game/rooms/room08/door.png" type="Texture" id=10] +[ext_resource path="res://game/rooms/room08/unlocked_button.png" type="Texture" id=11] [sub_resource type="NavigationPolygon" id=1] -vertices = PoolVector2Array( 1143.08, 613.35, 1267.68, 669.029, 1275.03, 799.721, -9.16094, 803.802, -6.44019, 711.297, 84.5821, 654.06, 742.298, 623.672, 581.028, 613.592, 583.548, 574.535, 707.02, 574.535, 714.58, 611.072, 3.15687, 646.051, 59.2201, 628.698, 129.634, 615.792, 530.631, 612.332, 550.79, 623.672, 783.875, 609.812 ) -polygons = [ PoolIntArray( 0, 1, 2, 3, 4, 5, 6 ), PoolIntArray( 7, 8, 9, 10 ), PoolIntArray( 4, 11, 12, 5 ), PoolIntArray( 5, 13, 14, 15 ), PoolIntArray( 7, 10, 6, 15 ), PoolIntArray( 6, 16, 0 ), PoolIntArray( 6, 5, 15 ) ] -outlines = [ PoolVector2Array( -6.44019, 711.297, 3.15687, 646.051, 59.2201, 628.698, 84.5821, 654.06, 129.634, 615.792, 530.631, 612.332, 550.79, 623.672, 581.028, 613.592, 583.548, 574.535, 707.02, 574.535, 714.58, 611.072, 742.298, 623.672, 783.875, 609.812, 1143.08, 613.35, 1267.68, 669.029, 1275.03, 799.721, -9.16094, 803.802 ) ] +vertices = PoolVector2Array( 4.26837, 653.779, 86.2684, 608.779, 87.2684, 635.779, 1260.27, 808.779, 3.26837, 810.779, 112.268, 621.779, 642.268, 624.779, 1259.27, 687.779, 642.268, 586.779, 790.268, 585.779, 791.268, 624.779, 1154.27, 622.779 ) +polygons = [ PoolIntArray( 0, 1, 2 ), PoolIntArray( 3, 4, 0, 2 ), PoolIntArray( 3, 2, 5, 6, 7 ), PoolIntArray( 6, 8, 9, 10 ), PoolIntArray( 7, 6, 10 ), PoolIntArray( 7, 10, 11 ) ] +outlines = [ PoolVector2Array( 4.26837, 653.779, 86.2684, 608.779, 87.2684, 635.779, 112.268, 621.779, 642.268, 624.779, 642.268, 586.779, 790.268, 585.779, 791.268, 624.779, 1154.27, 622.779, 1259.27, 687.779, 1260.27, 808.779, 3.26837, 810.779 ) ] + +[sub_resource type="Animation" id=5] +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath("door1:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 723, 203 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("door2:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 723, 203 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("door3:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 723, 203 ) ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("door4:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 723, 203 ) ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("door3:texture") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ ExtResource( 10 ) ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("door4:texture") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ ExtResource( 10 ) ] +} [sub_resource type="Animation" id=2] resource_name = "door_close" +length = 1.5 tracks/0/type = "value" -tracks/0/path = NodePath("door:polygon") +tracks/0/path = NodePath("door1:position") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/imported = false tracks/0/enabled = true tracks/0/keys = { -"times": PoolRealArray( 0, 0.5 ), -"transitions": PoolRealArray( 1, 1 ), +"times": PoolRealArray( 0, 0.2, 1.5 ), +"transitions": PoolRealArray( 1, 1, 1 ), "update": 0, -"values": [ PoolVector2Array( 557.104, 45.8, 743.623, 45.8, 744.482, 48.9414, 555.602, 48.274 ), PoolVector2Array( 557.104, 45.8, 743.623, 45.8, 746.798, 345.025, 557.898, 347.406 ) ] +"values": [ Vector2( 547, 203 ), Vector2( 547, 203 ), Vector2( 723, 203 ) ] } tracks/1/type = "value" -tracks/1/path = NodePath(".:is_exit") +tracks/1/path = NodePath("door2:position") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/imported = false tracks/1/enabled = true tracks/1/keys = { -"times": PoolRealArray( 0.6 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ false ] +"times": PoolRealArray( 0, 0.2, 1.5 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 899, 203 ), Vector2( 899, 203 ), Vector2( 723, 203 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("door3:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 1.3 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Vector2( 547, 203 ), Vector2( 723, 203 ) ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("door4:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0, 1.3 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Vector2( 899, 203 ), Vector2( 723, 203 ) ] } [sub_resource type="Animation" id=3] resource_name = "door_open" +length = 1.5 tracks/0/type = "value" -tracks/0/path = NodePath("door:polygon") +tracks/0/path = NodePath("door1:position") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/imported = false tracks/0/enabled = true tracks/0/keys = { -"times": PoolRealArray( 0, 0.5 ), -"transitions": PoolRealArray( 1, 1 ), +"times": PoolRealArray( 0, 0.2, 1.5 ), +"transitions": PoolRealArray( 1, 1, 1 ), "update": 0, -"values": [ PoolVector2Array( 557.104, 45.8, 743.623, 45.8, 746.798, 345.025, 557.898, 347.406 ), PoolVector2Array( 557.104, 45.8, 743.623, 45.8, 744.482, 48.9414, 555.602, 48.274 ) ] +"values": [ Vector2( 723, 203 ), Vector2( 723, 203 ), Vector2( 547, 203 ) ] } tracks/1/type = "value" -tracks/1/path = NodePath(".:is_exit") +tracks/1/path = NodePath("door2:position") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/imported = false tracks/1/enabled = true tracks/1/keys = { -"times": PoolRealArray( 0, 0.6 ), +"times": PoolRealArray( 0, 0.2, 1.5 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 723, 203 ), Vector2( 723, 203 ), Vector2( 899, 203 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("door3:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 1.3 ), "transitions": PoolRealArray( 1, 1 ), -"update": 1, -"values": [ false, true ] +"update": 0, +"values": [ Vector2( 723, 203 ), Vector2( 547, 203 ) ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("door4:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0, 1.3 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Vector2( 723, 203 ), Vector2( 899, 203 ) ] } [sub_resource type="RectangleShape2D" id=4] -extents = Vector2( 20.3273, 18.0047 ) +extents = Vector2( 31, 30.5 ) + +[sub_resource type="RectangleShape2D" id=6] +extents = Vector2( 31.5, 31 ) [node name="room8" type="Node2D"] script = ExtResource( 6 ) @@ -80,49 +212,55 @@ esc_script = "res://game/rooms/room08/esc/room08.esc" player_scene = ExtResource( 4 ) camera_limits = [ Rect2( 0, 0, 1289, 555 ) ] +[node name="walkable_area" type="Navigation2D" parent="."] +script = ExtResource( 1 ) + +[node name="platform" type="NavigationPolygonInstance" parent="walkable_area"] +position = Vector2( 6.73163, -264.779 ) +navpoly = SubResource( 1 ) +__meta__ = { +"_editor_description_": "" +} + +[node name="player_start" type="Position2D" parent="."] +position = Vector2( 76.7617, 437.649 ) +script = ExtResource( 7 ) +global_id = "r8_player_start" +is_start_location = true + [node name="background" type="TextureRect" parent="."] margin_right = 1289.0 margin_bottom = 555.0 mouse_filter = 2 +texture = ExtResource( 8 ) script = ExtResource( 2 ) __meta__ = { "_edit_lock_": true, "_edit_use_anchors_": false } -[node name="l_platform" type="Line2D" parent="background"] -position = Vector2( 2, -266 ) -points = PoolVector2Array( -2.96298, 712.01, 129.973, 614.429, 1167.5, 612.894, 1274.59, 669.705, 1273.25, 812.694, 2.36697, 811.043, 2.36697, 713.389 ) - -[node name="l_door" type="Line2D" parent="background"] -position = Vector2( 0, -266 ) -points = PoolVector2Array( 6.61201, 704.409, 6.61203, 389.558, 87.755, 339.775, 87.5463, 649.784 ) -__meta__ = { -"_editor_description_": "" -} - -[node name="m_door" type="Line2D" parent="background"] -position = Vector2( 0, -267.828 ) -points = PoolVector2Array( 555.952, 615.32, 554.538, 311.267, 744.043, 312.679, 746.871, 615.32, 557.367, 616.734 ) - [node name="Label" type="Label" parent="background"] margin_right = 48.0 margin_bottom = 16.0 custom_fonts/font = ExtResource( 3 ) text = "Room 8" -__meta__ = { -"_edit_use_anchors_": false -} -[node name="walkable_area" type="Navigation2D" parent="."] -script = ExtResource( 1 ) +[node name="Label2" type="Label" parent="background"] +margin_left = 835.0 +margin_top = 12.0 +margin_right = 1133.0 +margin_bottom = 201.0 +custom_fonts/font = ExtResource( 3 ) +text = "This room demonstrates mixing Escoria +with an external GDScript puzzle. +Global variables are set by the puzzle +when completed that are referenced +by future Escoria script code to animate +the door opening etc. -[node name="platform" type="NavigationPolygonInstance" parent="walkable_area"] -position = Vector2( 6.73163, -264.779 ) -navpoly = SubResource( 1 ) -__meta__ = { -"_editor_description_": "" -} +Unlocking the puzzle disables (and +hides) the locked button, showing the +unlocked graphic underneath." [node name="Hotspots" type="Node" parent="."] @@ -140,7 +278,7 @@ dialog_color = Color( 1, 1, 1, 1 ) animations = null [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/l_door"] -polygon = PoolVector2Array( 2.93237, 447.051, 2.93237, 127.051, 88.9324, 71.0505, 90.9324, 379.051 ) +polygon = PoolVector2Array( 1, 420, 1, 107, 105, 63, 108, 352 ) [node name="Position2D" type="Position2D" parent="Hotspots/l_door"] position = Vector2( 45.47, 383.99 ) @@ -148,65 +286,101 @@ script = ExtResource( 7 ) [node name="m_door" type="Area2D" parent="Hotspots"] pause_mode = 1 +position = Vector2( 0, -1 ) script = ExtResource( 5 ) __meta__ = { "_editor_description_": "" } global_id = "r8_m_door" esc_script = "res://game/rooms/room08/esc/middle_exit.esc" +is_exit = true tooltip_name = "Exit" +inventory_texture = ExtResource( 10 ) dialog_color = Color( 1, 1, 1, 1 ) animations = null [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/m_door"] -visible = false -polygon = PoolVector2Array( 557.522, 348.813, 551.222, 42.6524, 743.99, 43.9123, 750.289, 345.033 ) +polygon = PoolVector2Array( 630, 349, 628, 51, 815, 51, 815, 349 ) [node name="Position2D" type="Position2D" parent="Hotspots/m_door"] -position = Vector2( 653.466, 366.589 ) +position = Vector2( 724, 354 ) script = ExtResource( 7 ) -[node name="door" type="Polygon2D" parent="Hotspots/m_door"] -color = Color( 0.4, 0.501961, 1, 1 ) -polygon = PoolVector2Array( 557.104, 45.8, 743.623, 45.8, 746.798, 345.025, 557.898, 347.406 ) - [node name="AnimationPlayer" type="AnimationPlayer" parent="Hotspots/m_door"] +anims/RESET = SubResource( 5 ) anims/door_close = SubResource( 2 ) anims/door_open = SubResource( 3 ) +[node name="door1" type="Sprite" parent="Hotspots/m_door"] +position = Vector2( 723, 203 ) +z_index = -1 +texture = ExtResource( 10 ) + +[node name="door2" type="Sprite" parent="Hotspots/m_door"] +position = Vector2( 723, 203 ) +scale = Vector2( -1, -1 ) +z_index = -1 +texture = ExtResource( 10 ) + +[node name="door3" type="Sprite" parent="Hotspots/m_door"] +position = Vector2( 723, 203 ) +scale = Vector2( 1, -1 ) +z_index = -1 +texture = ExtResource( 10 ) + +[node name="door4" type="Sprite" parent="Hotspots/m_door"] +position = Vector2( 723, 203 ) +scale = Vector2( -1, 1 ) +z_index = -1 +texture = ExtResource( 10 ) + +[node name="door_background" type="Polygon2D" parent="Hotspots/m_door"] +z_index = -2 +color = Color( 0, 0, 0, 1 ) +polygon = PoolVector2Array( 635, 55, 810, 56, 810, 350, 634, 350 ) + +[node name="r8_mini_puzzle_unlocked" type="Area2D" parent="Hotspots"] +pause_mode = 1 +script = ExtResource( 5 ) +global_id = "r8_mini_puzzle_unlocked" +inventory_texture = ExtResource( 11 ) +dialog_color = Color( 1, 1, 1, 1 ) +animations = null + +[node name="unlocked_button" type="Sprite" parent="Hotspots/r8_mini_puzzle_unlocked"] +position = Vector2( 527, 190 ) +texture = ExtResource( 11 ) + [node name="r8_mini_puzzle_button" type="Area2D" parent="Hotspots"] pause_mode = 1 script = ExtResource( 5 ) -global_id = "r8_button_puzzle" +global_id = "r8_mini_puzzle_button" esc_script = "res://game/rooms/room08/esc/button_puzzle.esc" tooltip_name = "Button" default_action = "use" +inventory_texture = ExtResource( 9 ) dialog_color = Color( 1, 1, 1, 1 ) animations = null -[node name="button" type="Line2D" parent="Hotspots/r8_mini_puzzle_button"] -position = Vector2( -588.313, 5.65686 ) -points = PoolVector2Array( 1048.39, 178.619, 1048.39, 208.814, 1076.99, 208.814, 1078.05, 183.387, 1052.09, 183.916 ) -default_color = Color( 0.4, 0.501961, 1, 1 ) +[node name="locked_button" type="Sprite" parent="Hotspots/r8_mini_puzzle_button"] +position = Vector2( 527, 190 ) +texture = ExtResource( 9 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/r8_mini_puzzle_button"] -position = Vector2( 474.343, 201.414 ) +position = Vector2( 526, 191.5 ) shape = SubResource( 4 ) [node name="Position2D" type="Position2D" parent="Hotspots/r8_mini_puzzle_button"] -position = Vector2( 474.801, 369.29 ) +position = Vector2( 532, 370 ) script = ExtResource( 7 ) [node name="button_puzzle" type="Label" parent="Hotspots/r8_mini_puzzle_button"] -margin_left = 445.617 -margin_top = 166.124 -margin_right = 508.617 -margin_bottom = 182.124 +margin_left = 488.0 +margin_top = 128.0 +margin_right = 572.0 +margin_bottom = 149.0 custom_fonts/font = ExtResource( 3 ) text = "Run puzzle" -__meta__ = { -"_edit_use_anchors_": false -} [node name="r8_reset_puzzle_button" type="Area2D" parent="Hotspots"] pause_mode = 1 @@ -219,32 +393,23 @@ default_action = "use" dialog_color = Color( 1, 1, 1, 1 ) animations = null -[node name="button" type="Line2D" parent="Hotspots/r8_reset_puzzle_button"] -position = Vector2( -588.313, 5.65686 ) -points = PoolVector2Array( 1048.39, 178.619, 1048.39, 208.814, 1076.99, 208.814, 1078.05, 183.387, 1052.09, 183.916 ) -default_color = Color( 0.4, 0.501961, 1, 1 ) - -[node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/r8_reset_puzzle_button"] -position = Vector2( 474.343, 201.414 ) -shape = SubResource( 4 ) - [node name="Position2D" type="Position2D" parent="Hotspots/r8_reset_puzzle_button"] -position = Vector2( 474.801, 369.29 ) +position = Vector2( 511.185, 370 ) script = ExtResource( 7 ) [node name="reset_puzzle" type="Label" parent="Hotspots/r8_reset_puzzle_button"] -margin_left = 441.128 -margin_top = 166.124 -margin_right = 512.128 -margin_bottom = 182.124 +margin_left = 466.185 +margin_top = 126.0 +margin_right = 560.185 +margin_bottom = 147.0 custom_fonts/font = ExtResource( 3 ) text = "Reset puzzle" -__meta__ = { -"_edit_use_anchors_": false -} -[node name="player_start" type="Position2D" parent="."] -position = Vector2( 76.7617, 437.649 ) -script = ExtResource( 7 ) -global_id = "r8_player_start" -is_start_location = true +[node name="Sprite3" type="Sprite" parent="Hotspots/r8_reset_puzzle_button"] +position = Vector2( 139.185, 0 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/r8_reset_puzzle_button"] +position = Vector2( 510.685, 190 ) +shape = SubResource( 6 ) + +[node name="Node" type="Node" parent="Hotspots"] diff --git a/game/rooms/room08/room8background.png b/game/rooms/room08/room8background.png new file mode 100644 index 000000000..09b34e957 Binary files /dev/null and b/game/rooms/room08/room8background.png differ diff --git a/game/rooms/room08/unlocked_button.png b/game/rooms/room08/unlocked_button.png new file mode 100644 index 000000000..b7c2f06f8 Binary files /dev/null and b/game/rooms/room08/unlocked_button.png differ