Added button sfx and, export presets and checkpoints

master
Wynd 2024-09-21 23:38:05 +03:00
parent 167d48cbcf
commit c5b441196b
12 changed files with 302 additions and 26 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
# Godot 4+ specific ignores
.godot/
/android/
out/

View File

@ -6,12 +6,14 @@ extends CharacterBody2D
@onready var map: MainLevel = get_tree().root.get_child(0).get_node("TileMap")
@onready var tile_map: TileMapLayer = get_tree().root.get_child(0).get_node("TileMap/TileMapLayer")
@onready var camera: Camera2D = $Sprite2D/Camera2D
@export var speed: float = 40
@export var respawn_point: Marker2D
@onready var start_point: Node2D = get_tree().root.get_child(0).get_node("Start")
const TILE_SIZE = 8
@export var speed: float = 40
@export var checkpoints: Array[Node2D]
@export var current_checkpoint := 0
var is_moving = false
var should_move = false
var is_dead = false
@ -41,7 +43,10 @@ func _physics_process(delta):
_try_move(delta)
func _respawn():
position = respawn_point.position
if checkpoints.size() > 0 and checkpoints[current_checkpoint]:
position = checkpoints[current_checkpoint].position
else:
position = start_point.position
sprite.global_position = position
is_dead = false
is_moving = false

146
export_presets.cfg 100644
View File

@ -0,0 +1,146 @@
[preset.0]
name="Web"
platform="Web"
runnable=true
advanced_options=false
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="out/web/GBJAM12.html"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.0.options]
custom_template/debug=""
custom_template/release=""
variant/extensions_support=false
variant/thread_support=false
vram_texture_compression/for_desktop=true
vram_texture_compression/for_mobile=false
html/export_icon=true
html/custom_html_shell=""
html/head_include=""
html/canvas_resize_policy=2
html/focus_canvas_on_start=true
html/experimental_virtual_keyboard=false
progressive_web_app/enabled=false
progressive_web_app/ensure_cross_origin_isolation_headers=true
progressive_web_app/offline_page=""
progressive_web_app/display=1
progressive_web_app/orientation=0
progressive_web_app/icon_144x144=""
progressive_web_app/icon_180x180=""
progressive_web_app/icon_512x512=""
progressive_web_app/background_color=Color(0, 0, 0, 1)
[preset.1]
name="Windows Desktop"
platform="Windows Desktop"
runnable=true
advanced_options=false
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="out/win/GBJAM12.exe"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.1.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
binary_format/architecture="x86_64"
codesign/enable=false
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=true
application/icon=""
application/console_wrapper_icon=""
application/icon_interpolation=4
application/file_version=""
application/product_version=""
application/company_name=""
application/product_name=""
application/file_description=""
application/copyright=""
application/trademarks=""
application/export_angle=0
application/export_d3d12=0
application/d3d12_agility_sdk_multiarch=true
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
$settings = New-ScheduledTaskSettingsSet
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
Start-ScheduledTask -TaskName godot_remote_debug
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"
[preset.2]
name="Linux"
platform="Linux"
runnable=true
advanced_options=false
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="out/linux/GBJAM12.x86_64"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.2.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
binary_format/architecture="x86_64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""

View File

@ -1,7 +1,8 @@
class_name GroundButton
extends Area2D
@onready var sprite = $Sprite2D
@onready var sprite: Sprite2D = $Sprite2D
@onready var audio_player: AudioStreamPlayer2D = $AudioStreamPlayer2D
@export var nodes: Array[Node2D]
@export var is_active = false
@ -15,6 +16,7 @@ func _on_body_entered(body):
if body is Player:
is_active = not is_active
_flip()
audio_player.play()
func _flip():
$Sprite2D.frame = 1 if is_active else 0

View File

@ -1,7 +1,8 @@
[gd_scene load_steps=4 format=3 uid="uid://bdlyuun4o4val"]
[gd_scene load_steps=5 format=3 uid="uid://bdlyuun4o4val"]
[ext_resource type="Texture2D" uid="uid://d02y0dsfaynbl" path="res://puzzles/assets/button.png" id="1_atyp4"]
[ext_resource type="Script" path="res://puzzles/button/button.gd" id="1_gpasp"]
[ext_resource type="AudioStream" uid="uid://scqlma1158w3" path="res://scenes/assets/jingles/button.wav" id="3_b8x25"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_xj0k4"]
size = Vector2(6, 6)
@ -16,4 +17,8 @@ hframes = 2
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("RectangleShape2D_xj0k4")
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("3_b8x25")
volume_db = -6.0
[connection signal="body_entered" from="." to="." method="_on_body_entered"]

View File

@ -0,0 +1,9 @@
extends Node
@onready var player: Player = get_tree().root.get_child(0).get_node("Player")
@export var checkpoint_id := 0
func _on_body_entered(body):
if body is Player:
(body as Player).current_checkpoint = checkpoint_id

View File

@ -1,6 +1,14 @@
extends PuzzleManager
@export var next_room_wall: Node2D
@export var box_puzzle_light: Sprite2D
@export var switch_puzzle_light: Sprite2D
func _on_finish_room():
next_room_wall.queue_free()
func _on_simple_box_puzzle_complete_puzzle():
box_puzzle_light.frame = 17
func _on_simple_switch_puzzle_complete_puzzle():
switch_puzzle_light.frame = 17

View File

@ -0,0 +1 @@
3,0,0,0,120,4,4,1,94,0,4,128,0,256,1,0,0,0,0,1,36,2,0,0,0,1,0,1,0,-1,-1,-1,-1,-1,-1,-1,

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://scqlma1158w3"
path="res://.godot/imported/button.wav-2051c3133f81351a8e18d5705f2e0936.sample"
[deps]
source_file="res://scenes/assets/jingles/button.wav"
dest_files=["res://.godot/imported/button.wav-2051c3133f81351a8e18d5705f2e0936.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1018 B

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=32 format=4 uid="uid://cbg46c4q2ian4"]
[gd_scene load_steps=37 format=4 uid="uid://cbg46c4q2ian4"]
[ext_resource type="TileSet" uid="uid://beqyyhtlgk8tg" path="res://scenes/assets/main_tileset.tres" id="1_maeo5"]
[ext_resource type="PackedScene" uid="uid://chmxabjea27ay" path="res://puzzles/grave/grave.tscn" id="2_fe1sr"]
@ -7,6 +7,7 @@
[ext_resource type="PackedScene" uid="uid://cjus07bbbn4wd" path="res://puzzles/box/box.tscn" id="3_jiwuy"]
[ext_resource type="AudioStream" uid="uid://dptmnectas0m2" path="res://scenes/assets/jingles/grave_jingle1.wav" id="3_v8h4p"]
[ext_resource type="PackedScene" uid="uid://c2qq84wh76mkx" path="res://puzzles/box/box_switch.tscn" id="4_7yk3l"]
[ext_resource type="Script" path="res://puzzles/checkpoint.gd" id="4_8rbbs"]
[ext_resource type="Script" path="res://puzzles/room_manager/prison_manager.gd" id="4_fpjs2"]
[ext_resource type="AudioStream" uid="uid://b6gukjjv4o82b" path="res://scenes/assets/jingles/grave_jingle4.wav" id="4_xmwgp"]
[ext_resource type="Script" path="res://puzzles/grave_puzzle.gd" id="8_sr3y5"]
@ -26,6 +27,18 @@
[ext_resource type="Script" path="res://puzzles/room_manager/ball_course_manager.gd" id="22_oli26"]
[ext_resource type="Script" path="res://puzzles/button/ball_button.gd" id="23_sf041"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_xcgii"]
size = Vector2(26, 48)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_j3x8b"]
size = Vector2(16, 56)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_265wp"]
size = Vector2(32, 56)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_t0k1c"]
size = Vector2(16, 32)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_x2olj"]
size = Vector2(17, 8)
@ -56,17 +69,58 @@ tile_map_data = PackedByteArray("AAAUAAAAAAAAAAAAAAAUAAEAAAAAAAAAAAAUAAIAAAAAAAA
tile_set = ExtResource("1_maeo5")
metadata/_edit_lock_ = true
[node name="PlayerRespawn" type="Marker2D" parent="."]
[node name="Start" type="Marker2D" parent="."]
position = Vector2(-180, 284)
[node name="Player" parent="." node_paths=PackedStringArray("respawn_point") instance=ExtResource("2_w5xov")]
[node name="Player" parent="." node_paths=PackedStringArray("checkpoints") instance=ExtResource("2_w5xov")]
position = Vector2(220, 60)
respawn_point = NodePath("../PlayerRespawn")
checkpoints = [NodePath("../Start"), NodePath("../Checkpoints/Hallway"), NodePath("../Checkpoints/Garden"), NodePath("../Checkpoints/BallCourse"), NodePath("../Checkpoints/PostBallCourse")]
current_checkpoint = 1
[node name="PrisonRoomManager" type="Node2D" parent="." node_paths=PackedStringArray("next_room_wall", "mandatory_puzzles")]
[node name="Checkpoints" type="Node2D" parent="."]
[node name="Hallway" type="Area2D" parent="Checkpoints"]
position = Vector2(156, 372)
script = ExtResource("4_8rbbs")
checkpoint_id = 1
[node name="CollisionShape2D" type="CollisionShape2D" parent="Checkpoints/Hallway"]
position = Vector2(3, 0)
shape = SubResource("RectangleShape2D_xcgii")
[node name="Garden" type="Area2D" parent="Checkpoints"]
position = Vector2(548, 524)
script = ExtResource("4_8rbbs")
checkpoint_id = 2
[node name="CollisionShape2D" type="CollisionShape2D" parent="Checkpoints/Garden"]
position = Vector2(16, -4)
shape = SubResource("RectangleShape2D_j3x8b")
[node name="BallCourse" type="Area2D" parent="Checkpoints"]
position = Vector2(940, 492)
script = ExtResource("4_8rbbs")
checkpoint_id = 3
[node name="CollisionShape2D" type="CollisionShape2D" parent="Checkpoints/BallCourse"]
position = Vector2(8, -4)
shape = SubResource("RectangleShape2D_265wp")
[node name="PostBallCourse" type="Area2D" parent="Checkpoints"]
position = Vector2(1212, 436)
script = ExtResource("4_8rbbs")
checkpoint_id = 4
[node name="CollisionShape2D" type="CollisionShape2D" parent="Checkpoints/PostBallCourse"]
position = Vector2(-8, 0)
shape = SubResource("RectangleShape2D_t0k1c")
[node name="PrisonRoomManager" type="Node2D" parent="." node_paths=PackedStringArray("next_room_wall", "box_puzzle_light", "switch_puzzle_light", "mandatory_puzzles")]
position = Vector2(-60, 372)
script = ExtResource("4_fpjs2")
next_room_wall = NodePath("FakeWall3")
next_room_wall = NodePath("FakeWall")
box_puzzle_light = NodePath("SimpleBoxPuzzleLight")
switch_puzzle_light = NodePath("SimpleSwitchPuzzleLight")
mandatory_puzzles = [NodePath("SimpleBoxPuzzle"), NodePath("SimpleSwitchPuzzle")]
[node name="HallwayEntryArrows" type="Node2D" parent="PrisonRoomManager"]
@ -178,89 +232,103 @@ frame = 15
position = Vector2(8.5, 0)
shape = SubResource("RectangleShape2D_8unxy")
[node name="FakeWall3" type="StaticBody2D" parent="PrisonRoomManager"]
[node name="FakeWall" type="StaticBody2D" parent="PrisonRoomManager"]
position = Vector2(104, 0)
[node name="FakeWall" type="Sprite2D" parent="PrisonRoomManager/FakeWall3"]
[node name="FakeWall" type="Sprite2D" parent="PrisonRoomManager/FakeWall"]
texture = ExtResource("11_hi5wu")
hframes = 8
vframes = 8
frame = 6
[node name="FakeWall2" type="Sprite2D" parent="PrisonRoomManager/FakeWall3"]
[node name="FakeWall2" type="Sprite2D" parent="PrisonRoomManager/FakeWall"]
position = Vector2(0, -16)
texture = ExtResource("11_hi5wu")
hframes = 8
vframes = 8
frame = 6
[node name="FakeWall3" type="Sprite2D" parent="PrisonRoomManager/FakeWall3"]
[node name="FakeWall3" type="Sprite2D" parent="PrisonRoomManager/FakeWall"]
position = Vector2(0, -8)
texture = ExtResource("11_hi5wu")
hframes = 8
vframes = 8
frame = 6
[node name="FakeWall4" type="Sprite2D" parent="PrisonRoomManager/FakeWall3"]
[node name="FakeWall4" type="Sprite2D" parent="PrisonRoomManager/FakeWall"]
position = Vector2(0, 8)
texture = ExtResource("11_hi5wu")
hframes = 8
vframes = 8
frame = 6
[node name="FakeWall5" type="Sprite2D" parent="PrisonRoomManager/FakeWall3"]
[node name="FakeWall5" type="Sprite2D" parent="PrisonRoomManager/FakeWall"]
position = Vector2(0, 16)
texture = ExtResource("11_hi5wu")
hframes = 8
vframes = 8
frame = 6
[node name="FakeWall6" type="Sprite2D" parent="PrisonRoomManager/FakeWall3"]
[node name="FakeWall6" type="Sprite2D" parent="PrisonRoomManager/FakeWall"]
position = Vector2(8, 8)
texture = ExtResource("11_hi5wu")
hframes = 8
vframes = 8
frame = 6
[node name="FakeWall7" type="Sprite2D" parent="PrisonRoomManager/FakeWall3"]
[node name="FakeWall7" type="Sprite2D" parent="PrisonRoomManager/FakeWall"]
position = Vector2(8, 0)
texture = ExtResource("11_hi5wu")
hframes = 8
vframes = 8
frame = 6
[node name="FakeWall8" type="Sprite2D" parent="PrisonRoomManager/FakeWall3"]
[node name="FakeWall8" type="Sprite2D" parent="PrisonRoomManager/FakeWall"]
position = Vector2(8, -8)
texture = ExtResource("11_hi5wu")
hframes = 8
vframes = 8
frame = 6
[node name="FakeWall9" type="Sprite2D" parent="PrisonRoomManager/FakeWall3"]
[node name="FakeWall9" type="Sprite2D" parent="PrisonRoomManager/FakeWall"]
position = Vector2(16, -8)
texture = ExtResource("11_hi5wu")
hframes = 8
vframes = 8
frame = 6
[node name="FakeWall10" type="Sprite2D" parent="PrisonRoomManager/FakeWall3"]
[node name="FakeWall10" type="Sprite2D" parent="PrisonRoomManager/FakeWall"]
position = Vector2(16, 0)
texture = ExtResource("11_hi5wu")
hframes = 8
vframes = 8
frame = 6
[node name="FakeWall11" type="Sprite2D" parent="PrisonRoomManager/FakeWall3"]
[node name="FakeWall11" type="Sprite2D" parent="PrisonRoomManager/FakeWall"]
position = Vector2(16, 8)
texture = ExtResource("11_hi5wu")
hframes = 8
vframes = 8
frame = 6
[node name="CollisionShape2D" type="CollisionShape2D" parent="PrisonRoomManager/FakeWall3"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="PrisonRoomManager/FakeWall"]
position = Vector2(8, -0.5)
shape = SubResource("RectangleShape2D_nrvhp")
[node name="SimpleSwitchPuzzleLight" type="Sprite2D" parent="PrisonRoomManager"]
position = Vector2(104, -24)
texture = ExtResource("11_hi5wu")
hframes = 8
vframes = 8
frame = 18
[node name="SimpleBoxPuzzleLight" type="Sprite2D" parent="PrisonRoomManager"]
position = Vector2(104, 24)
texture = ExtResource("11_hi5wu")
hframes = 8
vframes = 8
frame = 18
[node name="HallwayManager" type="Node2D" parent="."]
position = Vector2(-60, 372)
@ -765,6 +833,7 @@ position = Vector2(0, -16)
shape = SubResource("RectangleShape2D_c5an3")
[node name="VoidLayer" type="TileMapLayer" parent="BallCourseManager/BallPuzzle"]
visible = false
z_index = 10
position = Vector2(4, 4)
tile_map_data = PackedByteArray("AAAOAPb/AAAAAAAAAAAOAPf/AAAAAAAAAAAOAPj/AAAAAAAAAAAOAPn/AAAAAAAAAAAOAPr/AAAAAAAAAAAOAPv/AAAAAAAAAAAOAPz/AAAAAAAAAAAOAP3/AAAAAAAAAAAOAP7/AAAAAAAAAAAOAP//AAAAAAAAAAAOAAAAAAAAAAAAAAAOAAEAAAAAAAAAAAAOAAIAAAAAAAAAAAAOAAMAAAAAAAAAAAAOAAQAAAAAAAAAAAAOAAUAAAAAAAAAAAAOAAYAAAAAAAAAAAAOAAcAAAAAAAAAAAAOAAgAAAAAAAAAAAAPAPb/AAAAAAAAAAAPAPf/AAAAAAAAAAAPAPj/AAAAAAAAAAAPAPn/AAAAAAAAAAAPAPr/AAAAAAAAAAAPAPv/AAAAAAAAAAAPAPz/AAAAAAAAAAAPAP3/AAAAAAAAAAAPAP7/AAAAAAAAAAAPAP//AAAAAAAAAAAPAAAAAAAAAAAAAAAPAAEAAAAAAAAAAAAPAAIAAAAAAAAAAAAPAAMAAAAAAAAAAAAPAAQAAAAAAAAAAAAPAAUAAAAAAAAAAAAPAAYAAAAAAAAAAAAPAAcAAAAAAAAAAAAPAAgAAAAAAAAAAAAQAPb/AAAAAAAAAAAQAPf/AAAAAAAAAAAQAPj/AAAAAAAAAAAQAPn/AAAAAAAAAAAQAPr/AAAAAAAAAAAQAPv/AAAAAAAAAAAQAPz/AAAAAAAAAAAQAP3/AAAAAAAAAAAQAP7/AAAAAAAAAAAQAP//AAAAAAAAAAAQAAAAAAAAAAAAAAAQAAEAAAAAAAAAAAAQAAIAAAAAAAAAAAAQAAMAAAAAAAAAAAAQAAQAAAAAAAAAAAAQAAUAAAAAAAAAAAAQAAYAAAAAAAAAAAAQAAcAAAAAAAAAAAAQAAgAAAAAAAAAAAARAPb/AAAAAAAAAAARAPf/AAAAAAAAAAARAPj/AAAAAAAAAAARAPn/AAAAAAAAAAARAPr/AAAAAAAAAAARAPv/AAAAAAAAAAARAPz/AAAAAAAAAAARAP3/AAAAAAAAAAARAP7/AAAAAAAAAAARAP//AAAAAAAAAAARAAAAAAAAAAAAAAARAAEAAAAAAAAAAAARAAIAAAAAAAAAAAARAAMAAAAAAAAAAAARAAQAAAAAAAAAAAARAAUAAAAAAAAAAAARAAYAAAAAAAAAAAARAAcAAAAAAAAAAAARAAgAAAAAAAAAAAASAPb/AAAAAAAAAAASAPf/AAAAAAAAAAASAPj/AAAAAAAAAAASAPn/AAAAAAAAAAASAPr/AAAAAAAAAAASAPv/AAAAAAAAAAASAPz/AAAAAAAAAAASAP3/AAAAAAAAAAASAP7/AAAAAAAAAAASAP//AAAAAAAAAAASAAAAAAAAAAAAAAASAAEAAAAAAAAAAAASAAIAAAAAAAAAAAASAAMAAAAAAAAAAAASAAQAAAAAAAAAAAASAAUAAAAAAAAAAAASAAYAAAAAAAAAAAASAAcAAAAAAAAAAAASAAgAAAAAAAAAAAATAPb/AAAAAAAAAAATAPf/AAAAAAAAAAATAPj/AAAAAAAAAAATAPn/AAAAAAAAAAATAPr/AAAAAAAAAAATAPv/AAAAAAAAAAATAPz/AAAAAAAAAAATAP3/AAAAAAAAAAATAP7/AAAAAAAAAAATAP//AAAAAAAAAAATAAAAAAAAAAAAAAATAAEAAAAAAAAAAAATAAIAAAAAAAAAAAATAAMAAAAAAAAAAAATAAQAAAAAAAAAAAATAAUAAAAAAAAAAAATAAYAAAAAAAAAAAATAAcAAAAAAAAAAAATAAgAAAAAAAAAAAAUAPb/AAAAAAAAAAAUAPf/AAAAAAAAAAAUAPj/AAAAAAAAAAAUAPn/AAAAAAAAAAAUAPr/AAAAAAAAAAAUAPv/AAAAAAAAAAAUAPz/AAAAAAAAAAAUAP3/AAAAAAAAAAAUAP7/AAAAAAAAAAAUAP//AAAAAAAAAAAUAAAAAAAAAAAAAAAUAAEAAAAAAAAAAAAUAAIAAAAAAAAAAAAUAAMAAAAAAAAAAAAUAAQAAAAAAAAAAAAUAAUAAAAAAAAAAAAUAAYAAAAAAAAAAAAUAAcAAAAAAAAAAAAUAAgAAAAAAAAAAAAOAO7/AAAAAAAAAAAOAO//AAAAAAAAAAAOAPD/AAAAAAAAAAAOAPH/AAAAAAAAAAAOAPL/AAAAAAAAAAAOAPP/AAAAAAAAAAAOAPT/AAAAAAAAAAAOAPX/AAAAAAAAAAAPAO7/AAAAAAAAAAAPAO//AAAAAAAAAAAPAPD/AAAAAAAAAAAPAPH/AAAAAAAAAAAPAPL/AAAAAAAAAAAPAPP/AAAAAAAAAAAPAPT/AAAAAAAAAAAPAPX/AAAAAAAAAAAQAO7/AAAAAAAAAAAQAO//AAAAAAAAAAAQAPD/AAAAAAAAAAAQAPH/AAAAAAAAAAAQAPL/AAAAAAAAAAAQAPP/AAAAAAAAAAAQAPT/AAAAAAAAAAAQAPX/AAAAAAAAAAARAO7/AAAAAAAAAAARAO//AAAAAAAAAAARAPD/AAAAAAAAAAARAPH/AAAAAAAAAAARAPL/AAAAAAAAAAARAPP/AAAAAAAAAAARAPT/AAAAAAAAAAARAPX/AAAAAAAAAAASAO7/AAAAAAAAAAASAO//AAAAAAAAAAASAPD/AAAAAAAAAAASAPH/AAAAAAAAAAASAPL/AAAAAAAAAAASAPP/AAAAAAAAAAASAPT/AAAAAAAAAAASAPX/AAAAAAAAAAATAO7/AAAAAAAAAAATAO//AAAAAAAAAAATAPD/AAAAAAAAAAATAPH/AAAAAAAAAAATAPL/AAAAAAAAAAATAPP/AAAAAAAAAAATAPT/AAAAAAAAAAATAPX/AAAAAAAAAAAUAO7/AAAAAAAAAAAUAO//AAAAAAAAAAAUAPD/AAAAAAAAAAAUAPH/AAAAAAAAAAAUAPL/AAAAAAAAAAAUAPP/AAAAAAAAAAAUAPT/AAAAAAAAAAAUAPX/AAAAAAAAAAANAPv/AAAGAAAAAAAMAO7/AAAAAAAAAAAMAO//AAAAAAAAAAAMAPD/AAAAAAAAAAAMAPH/AAAAAAAAAAAMAPL/AAAAAAAAAAAMAPP/AAAAAAAAAAAMAPT/AAAAAAAAAAAMAPX/AAAAAAAAAAAMAPb/AAAAAAAAAAAMAPf/AAAAAAAAAAAMAPj/AAAAAAAAAAAMAPn/AAAAAAAAAAAMAPr/AAAAAAAAAAANAO7/AAAAAAAAAAANAO//AAAAAAAAAAANAPD/AAAAAAAAAAANAPH/AAAAAAAAAAANAPL/AAAAAAAAAAANAPP/AAAAAAAAAAANAPT/AAAAAAAAAAANAPX/AAAAAAAAAAANAPb/AAAAAAAAAAANAPf/AAAAAAAAAAANAPj/AAAAAAAAAAANAPn/AAAAAAAAAAANAPr/AAAAAAAAAAA=")
@ -798,7 +867,7 @@ position = Vector2(136, -104)
box = NodePath("../Box")
[node name="BarsButton" parent="BallCourseManager/BoxPuzzle" node_paths=PackedStringArray("nodes") instance=ExtResource("13_nrbrh")]
position = Vector2(136, -8)
position = Vector2(144, -16)
nodes = [NodePath("../FakeWall")]
[node name="ArrowsButton" parent="BallCourseManager/BoxPuzzle" node_paths=PackedStringArray("nodes") instance=ExtResource("13_nrbrh")]
@ -838,7 +907,13 @@ teleport_marker = NodePath("TeleportLocation")
[node name="TeleportLocation" parent="BallCourseManager/Stairs" instance=ExtResource("14_4nm2v")]
position = Vector2(-296, -24)
[connection signal="body_entered" from="Checkpoints/Hallway" to="Checkpoints/Hallway" method="_on_body_entered"]
[connection signal="body_entered" from="Checkpoints/Garden" to="Checkpoints/Garden" method="_on_body_entered"]
[connection signal="body_entered" from="Checkpoints/BallCourse" to="Checkpoints/BallCourse" method="_on_body_entered"]
[connection signal="body_entered" from="Checkpoints/PostBallCourse" to="Checkpoints/PostBallCourse" method="_on_body_entered"]
[connection signal="finish_room" from="PrisonRoomManager" to="PrisonRoomManager" method="_on_finish_room"]
[connection signal="complete_puzzle" from="PrisonRoomManager/SimpleBoxPuzzle" to="PrisonRoomManager" method="_on_simple_box_puzzle_complete_puzzle"]
[connection signal="complete_puzzle" from="PrisonRoomManager/SimpleSwitchPuzzle" to="PrisonRoomManager" method="_on_simple_switch_puzzle_complete_puzzle"]
[connection signal="finish_room" from="GardenManager" to="GardenManager" method="_on_finish_room"]
[connection signal="finish_room" from="BallCourseManager" to="BallCourseManager" method="_on_finish_room"]
[connection signal="complete_puzzle" from="BallCourseManager/BallPuzzle" to="BallCourseManager" method="_on_ball_puzzle_complete_puzzle"]