diff --git a/game/items/inventory/bottle.png b/game/items/inventory/bottle.png new file mode 100644 index 00000000..87babddc Binary files /dev/null and b/game/items/inventory/bottle.png differ diff --git a/game/items/inventory/r9_bottle.tscn b/game/items/inventory/r9_bottle.tscn index 29fcafdc..db917826 100644 --- a/game/items/inventory/r9_bottle.tscn +++ b/game/items/inventory/r9_bottle.tscn @@ -1,10 +1,10 @@ [gd_scene load_steps=4 format=2] -[ext_resource path="res://game/items/textures/genericItem_color_127.png" type="Texture" id=1] +[ext_resource path="res://game/items/inventory/bottle.png" type="Texture" id=2] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=3] [sub_resource type="RectangleShape2D" id=1] -extents = Vector2( 28.3873, 74.7806 ) +extents = Vector2( 12.5, 34 ) [node name="bottle" type="Area2D"] pause_mode = 1 @@ -17,12 +17,13 @@ default_action = "pickup" default_action_inventory = "look" combine_when_selected_action_is_in = PoolStringArray( "use" ) use_from_inventory_only = true -inventory_texture = ExtResource( 1 ) +inventory_texture = ExtResource( 2 ) dialog_color = Color( 1, 1, 1, 1 ) animations = null [node name="sprite" type="Sprite" parent="."] -texture = ExtResource( 1 ) +texture = ExtResource( 2 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2( -0.5, 1 ) shape = SubResource( 1 ) diff --git a/game/rooms/room09/button.png b/game/rooms/room09/button.png new file mode 100644 index 00000000..5be5fc7e Binary files /dev/null and b/game/rooms/room09/button.png differ diff --git a/game/rooms/room09/closet/magical_closet.tscn b/game/rooms/room09/closet/magical_closet.tscn deleted file mode 100644 index ddf833e8..00000000 --- a/game/rooms/room09/closet/magical_closet.tscn +++ /dev/null @@ -1,138 +0,0 @@ -[gd_scene load_steps=5 format=2] - -[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_item.gd" type="Script" id=1] - -[sub_resource type="RectangleShape2D" id=1] -extents = Vector2( 66.4415, 154.457 ) - -[sub_resource type="Animation" id=2] -length = 0.5 -tracks/0/type = "value" -tracks/0/path = NodePath("base/closed:visible") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ true ] -} -tracks/1/type = "value" -tracks/1/path = NodePath("base/open:visible") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ false ] -} -tracks/2/type = "value" -tracks/2/path = NodePath(".:default_action") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ "use" ] -} - -[sub_resource type="Animation" id=3] -resource_name = "open" -length = 0.5 -tracks/0/type = "value" -tracks/0/path = NodePath("base/closed:visible") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ false ] -} -tracks/1/type = "value" -tracks/1/path = NodePath("base/open:visible") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ true ] -} -tracks/2/type = "value" -tracks/2/path = NodePath(".:default_action") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ "walk" ] -} - -[node name="closet" type="Area2D"] -pause_mode = 1 -script = ExtResource( 1 ) -default_action = "use" -dialog_color = Color( 1, 1, 1, 1 ) -animations = null - -[node name="base" type="Line2D" parent="."] -position = Vector2( 1.12247, 0 ) -points = PoolVector2Array( 1.96387, 306.585, 1.76169, 4.1832, 126.121, 4.93235, 124.623, 302.346, -0.485764, 300.848 ) - -[node name="closed" type="Node2D" parent="base"] - -[node name="door" type="Polygon2D" parent="base/closed"] -color = Color( 0.4, 0.501961, 1, 1 ) -polygon = PoolVector2Array( 5.79657, 8.23298, 5.79657, 297.059, 121.893, 299.89, 123.781, 6.34522 ) - -[node name="grid" type="Line2D" parent="base/closed"] -points = PoolVector2Array( 26.5586, 38.8841, 26.4838, 74.6036, 106.914, 74.7399, 106.643, 43.8883, 27.9821, 43.8883 ) -default_color = Color( 0.415686, 0.415686, 0.415686, 1 ) - -[node name="Polygon2D" type="Polygon2D" parent="base/closed/grid"] -show_behind_parent = true -color = Color( 0.47451, 0.47451, 0.47451, 1 ) -polygon = PoolVector2Array( 29.051, 47.3419, 29.9949, 71.8826, 105.033, 71.8826, 104.561, 45.9261 ) - -[node name="handle" type="Line2D" parent="base/closed"] -points = PoolVector2Array( 106.643, 175.739, 105.894, 144.275 ) -default_color = Color( 0.478431, 0.478431, 0.478431, 1 ) - -[node name="open" type="Node2D" parent="base"] -visible = false - -[node name="black" type="Polygon2D" parent="base/open"] -color = Color( 0.141176, 0.141176, 0.141176, 1 ) -polygon = PoolVector2Array( 5.79657, 8.23298, 5.79657, 297.059, 121.893, 299.89, 123.781, 6.34522 ) - -[node name="shelf" type="Line2D" parent="base/open"] -points = PoolVector2Array( 10.112, 86.2807, 118.234, 86.2807 ) -default_color = Color( 0.4, 0.501961, 1, 1 ) - -[node name="door" type="Polygon2D" parent="base/open"] -color = Color( 0.4, 0.501961, 1, 1 ) -polygon = PoolVector2Array( 1.07718, 7.2891, -37.6216, 23.335, -37.6216, 328.206, 2.02106, 302.722 ) - -[node name="CollisionPolygon2D" type="CollisionShape2D" parent="."] -position = Vector2( 64.2172, 153.408 ) -shape = SubResource( 1 ) - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -anims/closed = SubResource( 2 ) -anims/open = SubResource( 3 ) diff --git a/game/rooms/room09/esc/button_reset.esc b/game/rooms/room09/esc/button_reset.esc index ba20f472..01313851 100755 --- a/game/rooms/room09/esc/button_reset.esc +++ b/game/rooms/room09/esc/button_reset.esc @@ -1,8 +1,25 @@ -# :SETUP is called EVERY TIME the room is loaded -# :READY is called only the FIRST TIME the room is loaded +# :SETUP is called EVERY TIME the room is loaded BEFORE ready +# :READY is called EVERY TIME the room is loaded AFTER setup :use +# Set the counter of open closets to 0. Used for the magic bottle appearance. set_global open_closets 0 -set_state r9_closet_left closed -set_state r9_closet_middle closed -set_state r9_closet_right closed +# Clear the variable holding which closet contains the bottle +# (Used for if the player exits then reenters the room) +set_global r9_bottle_closet 0 + +# If the bottle is active in any cupboard, disable it +set_active r9_bottle_left false +set_active r9_bottle_middle false +set_active r9_bottle_right false + +# Animate all the doors closing +set_state r9_closet_left close_door +set_state r9_closet_middle close_door +set_state r9_closet_right close_door + +# Mark all the doors closed. Used to work out if we ignore the close command +# on a closed closet, or the open command on an opened closet. +set_global left_closet_open false +set_global middle_closet_open false +set_global right_closet_open false diff --git a/game/rooms/room09/esc/closet_left.esc b/game/rooms/room09/esc/closet_left.esc index 90576d9c..63b68920 100755 --- a/game/rooms/room09/esc/closet_left.esc +++ b/game/rooms/room09/esc/closet_left.esc @@ -1,34 +1,79 @@ # Magical closet: the object is always in the LAST opened closet +# We want "use" and "open" to give the same end result +# so we duplicate everything for use and open :use > [left_closet_open] + # The closet is already open, so exit the command stop set_global left_closet_open true +# Increment the counter of the number of open closets inc_global open_closets 1 -> [lt open_closets 3] - set_state r9_closet_left open - stop +# Animate the door opening +set_state r9_closet_left open_door > [eq open_closets 3] - set_state r9_closet_left open + # After opening this one, we have 3 closets open + # Activate the magic bottle in this particular closet + > [i/r9_bottle] + # If they've already picked up the bottle, don't make it appear + stop + > [r9_puzzle_complete] + # If they've already completed the puzzle, don't make it appear + stop set_active r9_bottle_left true + # Note which cupboard the bottle is in in case the player + # exits then reenters the room + set_global r9_bottle_closet 1 stop - + :open > [left_closet_open] + # The closet is already open, so exit the command stop set_global left_closet_open true +# Increment the counter of the number of open closets inc_global open_closets 1 -> [lt open_closets 3] - set_state r9_closet_left open - stop +# Animate the door opening +set_state r9_closet_left open_door > [eq open_closets 3] - set_state r9_closet_left open + # After opening this one, we have 3 closets open + # Activate the magic bottle in this particular closet + > [i/r9_bottle] + # If they've already picked up the bottle, don't make it appear + stop + > [r9_puzzle_complete] + # If they've already completed the puzzle, don't make it appear + stop set_active r9_bottle_left true + # Note which cupboard the bottle is in in case the player + # exits then reenters the room + set_global r9_bottle_closet 1 stop + +:close +> [!left_closet_open] + # If the closet isn't open, ignore the close command + stop + +> [eq open_closets 3] + # If there's 3 closets open, the bottle was made active + # We don't know which closet it was activated in so lets + # deactivate all of them + set_active r9_bottle_left false + set_active r9_bottle_middle false + set_active r9_bottle_right false + +# Animate the door closing +set_state r9_closet_left close_door + +set_global left_closet_open false +# Decrement the counter of closets open (used to determine when to show +# the magic bottle) +dec_global open_closets 1 \ No newline at end of file diff --git a/game/rooms/room09/esc/closet_middle.esc b/game/rooms/room09/esc/closet_middle.esc index c580df83..b00314e1 100755 --- a/game/rooms/room09/esc/closet_middle.esc +++ b/game/rooms/room09/esc/closet_middle.esc @@ -1,34 +1,79 @@ # Magical closet: the object is always in the LAST opened closet +# We want "use" and "open" to give the same end result +# so we duplicate everything for use and open :use > [middle_closet_open] + # The closet is already open, so exit the command stop set_global middle_closet_open true +# Increment the counter of the number of open closets inc_global open_closets 1 -> [lt open_closets 3] - set_state r9_closet_middle open - stop +# Animate the door opening +set_state r9_closet_middle open_door > [eq open_closets 3] - set_state r9_closet_middle open + # After opening this one, we have 3 closets open + # Activate the magic bottle in this particular closet + > [i/r9_bottle] + # If they've already picked up the bottle, don't make it appear + stop + > [r9_puzzle_complete] + # If they've already completed the puzzle, don't make it appear + stop set_active r9_bottle_middle true + # Note which cupboard the bottle is in in case the player + # exits then reenters the room + set_global r9_bottle_closet 2 stop :open > [middle_closet_open] + # The closet is already open, so exit the command stop set_global middle_closet_open true +# Increment the counter of the number of open closets inc_global open_closets 1 -> [lt open_closets 3] - set_state r9_closet_middle open - stop +# Animate the door opening +set_state r9_closet_middle open_door > [eq open_closets 3] - set_state r9_closet_middle open + # After opening this one, we have 3 closets open + # Activate the magic bottle in this particular closet + > [i/r9_bottle] + # If they've already picked up the bottle, don't make it appear + stop + > [r9_puzzle_complete] + # If they've already completed the puzzle, don't make it appear + stop set_active r9_bottle_middle true + # Note which cupboard the bottle is in in case the player + # exits then reenters the room + set_global r9_bottle_closet 2 stop + +:close +> [!middle_closet_open] + # If the closet isn't open, ignore the close command + stop + +> [eq open_closets 3] + # If there's 3 closets open, the bottle was made active + # We don't know which closet it was activated in so lets + # deactivate all of them + set_active r9_bottle_left false + set_active r9_bottle_middle false + set_active r9_bottle_right false + +# Animate the door closing +set_state r9_closet_middle close_door + +set_global middle_closet_open false +# Decrement the counter of closets open (used to determine when to show +# the magic bottle) +dec_global open_closets 1 \ No newline at end of file diff --git a/game/rooms/room09/esc/closet_right.esc b/game/rooms/room09/esc/closet_right.esc index d7f9933c..fc243e70 100755 --- a/game/rooms/room09/esc/closet_right.esc +++ b/game/rooms/room09/esc/closet_right.esc @@ -1,34 +1,79 @@ # Magical closet: the object is always in the LAST opened closet +# We want "use" and "open" to give the same end result +# so we duplicate everything for use and open :use > [right_closet_open] + # The closet is already open, so exit the command stop set_global right_closet_open true +# Increment the counter of the number of open closets inc_global open_closets 1 - -> [lt open_closets 3] - set_state r9_closet_right open - stop + +# Animate the door opening +set_state r9_closet_right open_door > [eq open_closets 3] - set_state r9_closet_right open + # After opening this one, we have 3 closets open + # Activate the magic bottle in this particular closet + > [i/r9_bottle] + # If they've already picked up the bottle, don't make it appear + stop + > [r9_puzzle_complete] + # If they've already completed the puzzle, don't make it appear + stop set_active r9_bottle_right true + # Note which cupboard the bottle is in in case the player + # exits then reenters the room + set_global r9_bottle_closet 3 stop :open > [right_closet_open] + # The closet is already open, so exit the command stop set_global right_closet_open true +# Increment the counter of the number of open closets inc_global open_closets 1 - -> [lt open_closets 3] - set_state r9_closet_right open - stop + +# Animate the door opening +set_state r9_closet_right open_door > [eq open_closets 3] - set_state r9_closet_right open + # After opening this one, we have 3 closets open + # Activate the magic bottle in this particular closet + > [i/r9_bottle] + # If they've already picked up the bottle, don't make it appear + stop + > [r9_puzzle_complete] + # If they've already completed the puzzle, don't make it appear + stop set_active r9_bottle_right true + # Note which cupboard the bottle is in in case the player + # exits then reenters the room + set_global r9_bottle_closet 3 stop + +:close +> [!right_closet_open] + # If the closet isn't open, ignore the close command + stop + +> [eq open_closets 3] + # If there's 3 closets open, the bottle was made active + # We don't know which closet it was activated in so lets + # deactivate all of them + set_active r9_bottle_left false + set_active r9_bottle_middle false + set_active r9_bottle_right false + +# Animate the door closing +set_state r9_closet_right close_door + +set_global right_closet_open false +# Decrement the counter of closets open (used to determine when to show +# the magic bottle) +dec_global open_closets 1 \ No newline at end of file diff --git a/game/rooms/room09/esc/right_exit.esc b/game/rooms/room09/esc/right_exit.esc index 82b6a2f6..4487e8cb 100755 --- a/game/rooms/room09/esc/right_exit.esc +++ b/game/rooms/room09/esc/right_exit.esc @@ -1,2 +1,7 @@ :exit_scene -change_scene "res://game/rooms/room10/room10.tscn" +> [r9_puzzle_complete] + change_scene "res://game/rooms/room10/room10.tscn" + +> [!r9_puzzle_complete] + say player "The door is locked" + diff --git a/game/rooms/room09/esc/room09.esc b/game/rooms/room09/esc/room09.esc index 6e801996..95742b19 100644 --- a/game/rooms/room09/esc/room09.esc +++ b/game/rooms/room09/esc/room09.esc @@ -1,12 +1,63 @@ :setup +# In case the bottle is set to visible in the godot editor, either in a +# cupboard or on the stand, hide it regardless. +set_active r9_bottle_left false +set_active r9_bottle_middle false +set_active r9_bottle_right false +set_state r9_stand remove_bottle + +# Run all the animations to make sure the closet doors are closed +set_state r9_closet_left close_door +set_state r9_closet_middle close_door +set_state r9_closet_right close_door + +> [room09_visited] + > [r9_puzzle_complete] + # If the player has been here before and completed the puzzle + set_state r9_stand set_bottle + # Open the right doorway by using the open_door animation + set_state r9_r_exit open_door true + + # Open the closets as they were if the player exits then reenters + > [left_closet_open] + set_state r9_closet_left open_door + > [middle_closet_open] + set_state r9_closet_middle open_door + > [right_closet_open] + set_state r9_closet_right open_door + + # If the player has left everything open but the bottle hasn't been + # retrieved, show it where it used to be. + > [!i/r9_bottle] + # If the player isn't holding the bottle already, draw it if necessary + > [eq r9_bottle_closet 1] + set_active r9_bottle_left true + > [eq r9_bottle_closet 2] + set_active r9_bottle_middle true + > [eq r9_bottle_closet 3] + set_active r9_bottle_right true + + + > [!room09_visited] + # Run initial set up steps. This will only happen once per game. set_global room09_visited true + + # Set the count of open closets to 0. Used with the magic bottle. set_global open_closets 0 - #set_state r9_closet_left closed - #set_state r9_closet_middle closed - #set_state r9_closet_right closed + + # Run all the animations to make sure the closet doors are closed + set_state r9_closet_left close_door + set_state r9_closet_middle close_door + set_state r9_closet_right close_door + + # Mark the puzzle uncomplete + set_global r9_puzzle_complete false + # Set up a variable to hold which cupboard contains the bottle + # It will be used if the player exits then reenters the room + set_global r9_bottle_closet 0 > [eq ESC_LAST_SCENE room8] teleport player r9_l_exit diff --git a/game/rooms/room09/esc/stand.esc b/game/rooms/room09/esc/stand.esc index 1547cb32..d4f9147a 100755 --- a/game/rooms/room09/esc/stand.esc +++ b/game/rooms/room09/esc/stand.esc @@ -1,6 +1,27 @@ :use r9_bottle +# Make sure the full sequence completes. Let players speed through the text though. +accept_input SKIP +say player "This appears to be a magical bottle that unlocks doors." inventory_remove r9_bottle -set_state r9_stand set_bottle -set_state r9_r_exit r_door_open +# Place the bottle on the stand (i.e. unhide the placed bottle graphic) +set_state r9_stand set_bottle + +# Animate the door unlocking +set_state r9_r_exit open_door + +# Mark this room's puzzle as complete. This will stop it resetting and the +# bottle from being displayed in a cupboard. +set_global r9_puzzle_complete true +set_global r9_bottle_closet 0 +accept_input ALL + +:look +> [r9_puzzle_complete] + say player "Unlocking a door with a bottle, how strange." + stop + +> [!r9_puzzle_complete] + say player "That stand looks like the perfect place" + say player "to put a bottle." \ No newline at end of file diff --git a/game/rooms/room09/locker_door_closed.png b/game/rooms/room09/locker_door_closed.png new file mode 100644 index 00000000..eb676d7c Binary files /dev/null and b/game/rooms/room09/locker_door_closed.png differ diff --git a/game/rooms/room09/locker_door_opened.png b/game/rooms/room09/locker_door_opened.png new file mode 100644 index 00000000..43b72143 Binary files /dev/null and b/game/rooms/room09/locker_door_opened.png differ diff --git a/game/rooms/room09/locker_inside.png b/game/rooms/room09/locker_inside.png new file mode 100644 index 00000000..48100856 Binary files /dev/null and b/game/rooms/room09/locker_inside.png differ diff --git a/game/rooms/room09/right_door.png b/game/rooms/room09/right_door.png new file mode 100644 index 00000000..30ca7fee Binary files /dev/null and b/game/rooms/room09/right_door.png differ diff --git a/game/rooms/room09/room09.tscn b/game/rooms/room09/room09.tscn index 5cc7149d..355042d1 100644 --- a/game/rooms/room09/room09.tscn +++ b/game/rooms/room09/room09.tscn @@ -1,22 +1,56 @@ -[gd_scene load_steps=15 format=2] +[gd_scene load_steps=32 format=2] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_terrain.gd" type="Script" id=1] -[ext_resource path="res://game/rooms/room09/background.tscn" type="PackedScene" id=2] +[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_background.gd" type="Script" id=2] [ext_resource path="res://game/fonts/caslonantique.tres" type="DynamicFont" id=3] [ext_resource path="res://game/characters/mark/mark.tscn" type="PackedScene" id=4] -[ext_resource path="res://game/rooms/room09/closet/magical_closet.tscn" type="PackedScene" id=5] +[ext_resource path="res://game/rooms/room09/button.png" type="Texture" 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_item.gd" type="Script" id=7] -[ext_resource path="res://game/rooms/room09/button/button.tscn" type="PackedScene" id=8] -[ext_resource path="res://game/rooms/room09/r_door.tscn" type="PackedScene" id=9] +[ext_resource path="res://game/rooms/room09/locker_door_opened.png" type="Texture" id=8] +[ext_resource path="res://game/rooms/room09/room9background.png" type="Texture" id=9] [ext_resource path="res://game/items/textures/genericItem_color_127.png" type="Texture" id=10] [ext_resource path="res://game/items/inventory/r9_bottle.tscn" type="PackedScene" id=11] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_location.gd" type="Script" id=12] +[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_exit.gd" type="Script" id=13] +[ext_resource path="res://game/rooms/room09/locker_door_closed.png" type="Texture" id=14] +[ext_resource path="res://game/items/inventory/bottle.png" type="Texture" id=15] +[ext_resource path="res://game/rooms/room09/right_door.png" type="Texture" id=16] [sub_resource type="NavigationPolygon" id=1] -vertices = PoolVector2Array( 1168.92, 640.557, 1182.53, 588.863, 1269.59, 622.872, 1275.03, 799.721, 1143.08, 613.35, -9.16094, 803.802, -6.44019, 711.297, 846.646, 637.49, 3.15687, 646.051, 59.2201, 628.698, 84.5821, 654.06, 864.626, 613.518, 428.618, 640.487, 386.666, 618.012, 129.634, 615.792 ) -polygons = [ PoolIntArray( 0, 1, 2, 3 ), PoolIntArray( 4, 0, 3, 5, 6, 7 ), PoolIntArray( 6, 8, 9, 10 ), PoolIntArray( 7, 11, 4 ), PoolIntArray( 12, 7, 6, 10 ), PoolIntArray( 13, 12, 10, 14 ) ] -outlines = [ PoolVector2Array( -6.44019, 711.297, 3.15687, 646.051, 59.2201, 628.698, 84.5821, 654.06, 129.634, 615.792, 386.666, 618.012, 428.618, 640.487, 846.646, 637.49, 864.626, 613.518, 1143.08, 613.35, 1168.92, 640.557, 1182.53, 588.863, 1269.59, 622.872, 1275.03, 799.721, -9.16094, 803.802 ) ] +vertices = PoolVector2Array( 1168.92, 640.557, 1182.53, 588.863, 1269.59, 622.872, 1275.03, 799.721, 820.268, 705.779, -9.16094, 803.802, -6.44019, 711.297, 491.268, 705.779, 129.634, 615.792, 455.268, 618.779, 84.5821, 654.06, 3.15687, 646.051, 59.2201, 628.698, 864.626, 613.518, 1143.08, 613.35 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ), PoolIntArray( 4, 3, 5, 6, 7 ), PoolIntArray( 8, 9, 7, 10 ), PoolIntArray( 6, 11, 12, 10 ), PoolIntArray( 4, 13, 14, 0, 3 ), PoolIntArray( 7, 6, 10 ) ] +outlines = [ PoolVector2Array( -6.44019, 711.297, 3.15687, 646.051, 59.2201, 628.698, 84.5821, 654.06, 129.634, 615.792, 455.268, 618.779, 491.268, 705.779, 820.268, 705.779, 864.626, 613.518, 1143.08, 613.35, 1168.92, 640.557, 1182.53, 588.863, 1269.59, 622.872, 1275.03, 799.721, -9.16094, 803.802 ) ] + +[sub_resource type="Animation" id=11] +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath("bottle:visible") +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": [ false ] +} + +[sub_resource type="Animation" id=12] +resource_name = "remove_bottle" +tracks/0/type = "value" +tracks/0/path = NodePath("bottle:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} [sub_resource type="Animation" id=2] resource_name = "set_bottle" @@ -33,6 +67,343 @@ tracks/0/keys = { "values": [ true ] } +[sub_resource type="Animation" id=13] +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite: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( 1227, 244 ) ] +} +tracks/1/type = "bezier" +tracks/1/path = NodePath("Sprite:position:x") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"points": PoolRealArray( 1227, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0 ) +} +tracks/2/type = "bezier" +tracks/2/path = NodePath("Sprite:position:y") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"points": PoolRealArray( 244, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0 ) +} +tracks/3/type = "bezier" +tracks/3/path = NodePath("Sprite:scale:x") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"points": PoolRealArray( 1, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0 ) +} +tracks/4/type = "bezier" +tracks/4/path = NodePath("Sprite:scale:y") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"points": PoolRealArray( 1, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0 ) +} +tracks/5/type = "value" +tracks/5/path = NodePath("Sprite:visible") +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": [ true ] +} + +[sub_resource type="Animation" id=14] +resource_name = "close_door" +length = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite: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( 1227, 244 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Sprite:scale") +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( 1, 1 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("Sprite:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} + +[sub_resource type="Animation" id=15] +resource_name = "open_door" +length = 1.1 +tracks/0/type = "bezier" +tracks/0/path = NodePath("Sprite:position:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"points": PoolRealArray( 1227, -0.25, 0, 0.25, 0, 1276.43, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 1 ) +} +tracks/1/type = "bezier" +tracks/1/path = NodePath("Sprite:position:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"points": PoolRealArray( 244, -0.25, 0, 0.25, 0, 265.47, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 1 ) +} +tracks/2/type = "bezier" +tracks/2/path = NodePath("Sprite:scale:x") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"points": PoolRealArray( 1, -0.25, 0, 0.25, 0, 0.01, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 1 ) +} +tracks/3/type = "bezier" +tracks/3/path = NodePath("Sprite:scale:y") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"points": PoolRealArray( 1, -0.25, 0, 0.25, 0, 0.88, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0, 1 ) +} +tracks/4/type = "value" +tracks/4/path = NodePath("Sprite:visible") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0, 1.1 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ true, false ] +} + +[sub_resource type="RectangleShape2D" id=3] +extents = Vector2( 40, 40 ) + +[sub_resource type="RectangleShape2D" id=4] +extents = Vector2( 49, 147.5 ) + +[sub_resource type="Animation" id=5] +resource_name = "close_door" +length = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath("closed_door:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("opened_door:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} + +[sub_resource type="Animation" id=6] +resource_name = "open_door" +length = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath("opened_door:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("closed_door:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} + +[sub_resource type="Animation" id=7] +resource_name = "close_door" +length = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath("closed_door:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("opened_door:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} + +[sub_resource type="Animation" id=8] +resource_name = "open_door" +length = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath("opened_door:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("closed_door:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} + +[sub_resource type="Animation" id=9] +resource_name = "close_door" +length = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath("closed_door:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("opened_door:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} + +[sub_resource type="Animation" id=10] +resource_name = "open_door" +length = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath("opened_door:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("closed_door:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} + [node name="room9" type="Node2D"] script = ExtResource( 6 ) __meta__ = { @@ -43,17 +414,6 @@ esc_script = "res://game/rooms/room09/esc/room09.esc" player_scene = ExtResource( 4 ) camera_limits = [ Rect2( 0, 0, 1289, 555 ) ] -[node name="background" parent="." instance=ExtResource( 2 )] - -[node name="room_label" type="Label" parent="background"] -margin_right = 62.0 -margin_bottom = 16.0 -custom_fonts/font = ExtResource( 3 ) -text = "ROOM 9" -__meta__ = { -"_edit_use_anchors_": false -} - [node name="walkable_area" type="Navigation2D" parent="."] script = ExtResource( 1 ) @@ -64,120 +424,46 @@ __meta__ = { "_editor_description_": "" } -[node name="Hotspots" type="Node" parent="."] +[node name="ESCBackground" type="TextureRect" parent="."] +margin_right = 1280.0 +margin_bottom = 550.0 +mouse_filter = 2 +texture = ExtResource( 9 ) +script = ExtResource( 2 ) -[node name="l_door" type="Area2D" parent="Hotspots"] -pause_mode = 1 -script = ExtResource( 7 ) -global_id = "r9_l_exit" -esc_script = "res://game/rooms/room09/esc/left_exit.esc" -is_exit = true -tooltip_name = "Left exit" -default_action = "walk" -dialog_color = Color( 1, 1, 1, 1 ) -animations = null - -[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/l_door"] -polygon = PoolVector2Array( 0.328762, 440.897, 1.85199, 119.926, 85.9517, 74.6212, 87.1409, 377.869 ) - -[node name="Position2D" type="Position2D" parent="Hotspots/l_door"] -position = Vector2( 37.4521, 392.045 ) -script = ExtResource( 12 ) - -[node name="r_door" parent="Hotspots" instance=ExtResource( 9 )] -pause_mode = 1 -global_id = "r9_r_exit" -esc_script = "res://game/rooms/room09/esc/right_exit.esc" -animations = null - -[node name="Position2D" type="Position2D" parent="Hotspots/r_door"] -position = Vector2( 1198.65, 391.058 ) -script = ExtResource( 12 ) - -[node name="r9_closet_left" parent="Hotspots" instance=ExtResource( 5 )] -position = Vector2( 435.233, 64.1518 ) -global_id = "r9_closet_left" -esc_script = "res://game/rooms/room09/esc/closet_left.esc" -tooltip_name = "Left closet" - -[node name="Position2D" type="Position2D" parent="Hotspots/r9_closet_left"] -position = Vector2( 69.9246, 318.898 ) -script = ExtResource( 12 ) - -[node name="bottle_left" parent="Hotspots/r9_closet_left" instance=ExtResource( 11 )] -visible = false -position = Vector2( 46.4878, 47.8335 ) -scale = Vector2( 0.5, 0.5 ) -global_id = "r9_bottle_left" -dont_apply_terrain_scaling = true - -[node name="Position2D" type="Position2D" parent="Hotspots/r9_closet_left/bottle_left"] -position = Vector2( -26.727, 543.448 ) -script = ExtResource( 12 ) - -[node name="r9_closet_middle" parent="Hotspots" instance=ExtResource( 5 )] -position = Vector2( 572.963, 65.2113 ) -global_id = "r9_closet_middle" -esc_script = "res://game/rooms/room09/esc/closet_middle.esc" -tooltip_name = "Middle closet" - -[node name="Position2D" type="Position2D" parent="Hotspots/r9_closet_middle"] -position = Vector2( 65.6867, 317.839 ) -script = ExtResource( 12 ) - -[node name="bottle_middle" parent="Hotspots/r9_closet_middle" instance=ExtResource( 11 )] -visible = false -position = Vector2( 45.9562, 46.774 ) -scale = Vector2( 0.5, 0.5 ) -global_id = "r9_bottle_middle" -dont_apply_terrain_scaling = true - -[node name="Position2D" type="Position2D" parent="Hotspots/r9_closet_middle/bottle_middle"] -position = Vector2( -26.727, 543.448 ) -script = ExtResource( 12 ) - -[node name="r9_closet_right" parent="Hotspots" instance=ExtResource( 5 )] -position = Vector2( 710.693, 66.2707 ) -global_id = "r9_closet_right" -esc_script = "res://game/rooms/room09/esc/closet_right.esc" -tooltip_name = "Right closet" - -[node name="Position2D" type="Position2D" parent="Hotspots/r9_closet_right"] -position = Vector2( 64.6273, 316.779 ) -script = ExtResource( 12 ) - -[node name="bottle_right" parent="Hotspots/r9_closet_right" instance=ExtResource( 11 )] -visible = false -position = Vector2( 47.2065, 45.7146 ) -scale = Vector2( 0.5, 0.5 ) -global_id = "r9_bottle_right" -dont_apply_terrain_scaling = true - -[node name="Position2D" type="Position2D" parent="Hotspots/r9_closet_right/bottle_right"] -position = Vector2( -26.727, 543.448 ) -script = ExtResource( 12 ) - -[node name="button" parent="Hotspots" instance=ExtResource( 8 )] -pause_mode = 1 -position = Vector2( 240.688, 160.459 ) -global_id = "r9_button_reset" -esc_script = "res://game/rooms/room09/esc/button_reset.esc" -animations = null - -[node name="Position2D" type="Position2D" parent="Hotspots/button"] -position = Vector2( 30.204, 209.54 ) -script = ExtResource( 12 ) - -[node name="Label" type="Label" parent="Hotspots/button"] -margin_left = -15.5154 -margin_top = -23.3368 -margin_right = 59.4846 -margin_bottom = -7.33676 +[node name="room_label" type="Label" parent="ESCBackground"] +margin_right = 82.0 +margin_bottom = 21.0 custom_fonts/font = ExtResource( 3 ) -text = "Reset closets" -__meta__ = { -"_edit_use_anchors_": false -} +text = "ROOM 9" + +[node name="Label" type="Label" parent="ESCBackground"] +margin_left = 841.0 +margin_top = 7.0 +margin_right = 909.0 +margin_bottom = 21.0 +custom_colors/font_color = Color( 0, 0, 0, 1 ) +text = "This room demonstrates a puzzle that changes +depending on what the player does. The bottle +will appear in whichever closet is opened last. + +The reset has also been set up to only reset if +the puzzle hasn't been completed. This differs to +the previous room that always resets the puzzle. + +The state of the puzzle is preserved if you leave +the room. + +Open all closets, take the bottle, and put it on +the stand to complete the room." + +[node name="open_doorway_graphic" type="Polygon2D" parent="."] +position = Vector2( -2, 4 ) +z_index = -2 +color = Color( 0, 0, 0, 1 ) +polygon = PoolVector2Array( 1172, 54, 1280, 96, 1278, 422, 1173, 355 ) + +[node name="Hotspots" type="Node" parent="."] [node name="stand" type="Area2D" parent="Hotspots"] pause_mode = 1 @@ -193,24 +479,216 @@ dialog_color = Color( 1, 1, 1, 1 ) animations = null [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/stand"] -polygon = PoolVector2Array( 1086.57, 357.819, 1087.46, 226.857, 1134.68, 228.639, 1133.79, 358.71 ) - -[node name="Line2D" type="Line2D" parent="Hotspots/stand"] -points = PoolVector2Array( 1103.65, 354.291, 1103.65, 240.701, 1092.07, 236.692, 1090.74, 349.391, 1104.99, 354.736, 1125.48, 354.736, 1125.93, 239.365, 1099.2, 238.474, 1089.85, 234.465, 1115.68, 234.02, 1127.71, 238.919 ) +position = Vector2( -11.383, 25.1091 ) +polygon = PoolVector2Array( 1090, 348, 1087.46, 226.857, 1155, 226, 1155, 346 ) [node name="bottle" type="Sprite" parent="Hotspots/stand"] visible = false -position = Vector2( 1110, 193.494 ) -scale = Vector2( 0.6, 0.6 ) -texture = ExtResource( 10 ) +position = Vector2( 1108.62, 235.109 ) +texture = ExtResource( 15 ) [node name="AnimationPlayer" type="AnimationPlayer" parent="Hotspots/stand"] +anims/RESET = SubResource( 11 ) +anims/remove_bottle = SubResource( 12 ) anims/set_bottle = SubResource( 2 ) [node name="Position2D" type="Position2D" parent="Hotspots/stand"] position = Vector2( 1043.27, 359.243 ) script = ExtResource( 12 ) +[node name="door_l" type="Area2D" parent="Hotspots"] +script = ExtResource( 13 ) +global_id = "r9_l_exit" +esc_script = "res://game/rooms/room09/esc/left_exit.esc" +is_exit = true + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/door_l"] +polygon = PoolVector2Array( 0, 108, 105, 62, 108, 355, 1, 422 ) + +[node name="ESCLocation" type="Position2D" parent="Hotspots/door_l"] +position = Vector2( 56, 385 ) +script = ExtResource( 12 ) + +[node name="door_r" type="Area2D" parent="Hotspots"] +script = ExtResource( 13 ) +global_id = "r9_r_exit" +esc_script = "res://game/rooms/room09/esc/right_exit.esc" +is_exit = true + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hotspots/door_r"] +polygon = PoolVector2Array( 1174, 61, 1280, 107, 1280, 423, 1172, 353 ) + +[node name="ESCLocation" type="Position2D" parent="Hotspots/door_r"] +position = Vector2( 1228, 386 ) +script = ExtResource( 12 ) + +[node name="Sprite" type="Sprite" parent="Hotspots/door_r"] +position = Vector2( 1227, 244 ) +z_index = -1 +texture = ExtResource( 16 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Hotspots/door_r"] +anims/RESET = SubResource( 13 ) +anims/close_door = SubResource( 14 ) +anims/open_door = SubResource( 15 ) + +[node name="reset_button" type="Area2D" parent="Hotspots"] +pause_mode = 1 +position = Vector2( 125, 8 ) +script = ExtResource( 7 ) +global_id = "r9_reset_button" +esc_script = "res://game/rooms/room09/esc/button_reset.esc" +tooltip_name = "reset button" +default_action = "use" +inventory_texture = ExtResource( 5 ) +dialog_color = Color( 1, 1, 1, 1 ) +animations = null + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/reset_button"] +position = Vector2( 291, 194 ) +shape = SubResource( 3 ) + +[node name="Label" type="Label" parent="Hotspots/reset_button"] +margin_left = 242.0 +margin_top = 233.0 +margin_right = 339.0 +margin_bottom = 254.0 +custom_fonts/font = ExtResource( 3 ) +text = "Reset closets" + +[node name="ESCLocation" type="Position2D" parent="Hotspots/reset_button"] +position = Vector2( 283, 371 ) +script = ExtResource( 12 ) + +[node name="Sprite" type="Sprite" parent="Hotspots/reset_button"] +position = Vector2( 290, 193 ) +texture = ExtResource( 5 ) + +[node name="r9_closet_left" type="Area2D" parent="Hotspots"] +pause_mode = 1 +position = Vector2( -1, 0 ) +script = ExtResource( 7 ) +global_id = "r9_closet_left" +esc_script = "res://game/rooms/room09/esc/closet_left.esc" +tooltip_name = "closet" +default_action = "open" +inventory_texture = ExtResource( 14 ) +dialog_color = Color( 1, 1, 1, 1 ) +animations = null + +[node name="closed_door" type="Sprite" parent="Hotspots/r9_closet_left"] +visible = false +position = Vector2( 570, 248 ) +texture = ExtResource( 14 ) + +[node name="opened_door" type="Sprite" parent="Hotspots/r9_closet_left"] +position = Vector2( 525, 273 ) +texture = ExtResource( 8 ) + +[node name="ESCLocation" type="Position2D" parent="Hotspots/r9_closet_left"] +position = Vector2( 571, 447 ) +script = ExtResource( 12 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/r9_closet_left"] +position = Vector2( 570, 248.5 ) +shape = SubResource( 4 ) + +[node name="bottle_left" parent="Hotspots/r9_closet_left" instance=ExtResource( 11 )] +position = Vector2( 598, 162 ) +global_id = "r9_bottle_left" +dont_apply_terrain_scaling = true + +[node name="Position2D" type="Position2D" parent="Hotspots/r9_closet_left/bottle_left"] +position = Vector2( -27, 285 ) +script = ExtResource( 12 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Hotspots/r9_closet_left"] +anims/close_door = SubResource( 5 ) +anims/open_door = SubResource( 6 ) + +[node name="r9_closet_middle" type="Area2D" parent="Hotspots"] +pause_mode = 1 +script = ExtResource( 7 ) +global_id = "r9_closet_middle" +esc_script = "res://game/rooms/room09/esc/closet_middle.esc" +tooltip_name = "closet" +default_action = "open" +inventory_texture = ExtResource( 14 ) +dialog_color = Color( 1, 1, 1, 1 ) +animations = null + +[node name="closed_door" type="Sprite" parent="Hotspots/r9_closet_middle"] +visible = false +position = Vector2( 670, 248 ) +texture = ExtResource( 14 ) + +[node name="opened_door" type="Sprite" parent="Hotspots/r9_closet_middle"] +position = Vector2( 625, 269 ) +texture = ExtResource( 8 ) + +[node name="ESCLocation" type="Position2D" parent="Hotspots/r9_closet_middle"] +position = Vector2( 671, 446.5 ) +script = ExtResource( 12 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/r9_closet_middle"] +position = Vector2( 670, 248 ) +shape = SubResource( 4 ) + +[node name="bottle_middle" parent="Hotspots/r9_closet_middle" instance=ExtResource( 11 )] +position = Vector2( 692, 163 ) +global_id = "r9_bottle_middle" +dont_apply_terrain_scaling = true + +[node name="Position2D" type="Position2D" parent="Hotspots/r9_closet_middle/bottle_middle"] +position = Vector2( -21, 284 ) +script = ExtResource( 12 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Hotspots/r9_closet_middle"] +anims/close_door = SubResource( 7 ) +anims/open_door = SubResource( 8 ) + +[node name="r9_closet_right" type="Area2D" parent="Hotspots"] +pause_mode = 1 +position = Vector2( 100, 0 ) +script = ExtResource( 7 ) +global_id = "r9_closet_right" +esc_script = "res://game/rooms/room09/esc/closet_right.esc" +tooltip_name = "closet" +default_action = "open" +inventory_texture = ExtResource( 14 ) +dialog_color = Color( 1, 1, 1, 1 ) +animations = null + +[node name="closed_door" type="Sprite" parent="Hotspots/r9_closet_right"] +visible = false +position = Vector2( 669.5, 248 ) +texture = ExtResource( 14 ) + +[node name="opened_door" type="Sprite" parent="Hotspots/r9_closet_right"] +position = Vector2( 625, 268 ) +texture = ExtResource( 8 ) + +[node name="ESCLocation" type="Position2D" parent="Hotspots/r9_closet_right"] +position = Vector2( 671, 446.5 ) +script = ExtResource( 12 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hotspots/r9_closet_right"] +position = Vector2( 670, 248 ) +shape = SubResource( 4 ) + +[node name="bottle_right" parent="Hotspots/r9_closet_right" instance=ExtResource( 11 )] +position = Vector2( 682, 163 ) +global_id = "r9_bottle_right" +dont_apply_terrain_scaling = true + +[node name="Position2D" type="Position2D" parent="Hotspots/r9_closet_right/bottle_right"] +position = Vector2( -11, 284 ) +script = ExtResource( 12 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Hotspots/r9_closet_right"] +anims/close_door = SubResource( 9 ) +anims/open_door = SubResource( 10 ) + [node name="player_start" type="Position2D" parent="."] position = Vector2( 76.7617, 437.649 ) script = ExtResource( 12 ) diff --git a/game/rooms/room09/room9background.png b/game/rooms/room09/room9background.png new file mode 100644 index 00000000..05bf35e4 Binary files /dev/null and b/game/rooms/room09/room9background.png differ diff --git a/game/rooms/room09/button/button.tscn b/game/rooms/room10/button/button.tscn similarity index 100% rename from game/rooms/room09/button/button.tscn rename to game/rooms/room10/button/button.tscn