diff --git a/.gitignore b/.gitignore index 0af181c..26ac34b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ # Godot 4+ specific ignores .godot/ /android/ +out/ diff --git a/entities/player/player.gd b/entities/player/player.gd index 73f05c4..e7542fc 100644 --- a/entities/player/player.gd +++ b/entities/player/player.gd @@ -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 diff --git a/export_presets.cfg b/export_presets.cfg new file mode 100644 index 0000000..7097567 --- /dev/null +++ b/export_presets.cfg @@ -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}\"" diff --git a/puzzles/button/button.gd b/puzzles/button/button.gd index 4a8ac05..004be2d 100644 --- a/puzzles/button/button.gd +++ b/puzzles/button/button.gd @@ -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 diff --git a/puzzles/button/button.tscn b/puzzles/button/button.tscn index 1228061..cf76772 100644 --- a/puzzles/button/button.tscn +++ b/puzzles/button/button.tscn @@ -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"] diff --git a/puzzles/checkpoint.gd b/puzzles/checkpoint.gd new file mode 100644 index 0000000..3b4075f --- /dev/null +++ b/puzzles/checkpoint.gd @@ -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 diff --git a/puzzles/room_manager/prison_manager.gd b/puzzles/room_manager/prison_manager.gd index b7cf655..3651c5f 100644 --- a/puzzles/room_manager/prison_manager.gd +++ b/puzzles/room_manager/prison_manager.gd @@ -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 diff --git a/scenes/assets/jingles/button.ceol b/scenes/assets/jingles/button.ceol new file mode 100644 index 0000000..5b9b27b --- /dev/null +++ b/scenes/assets/jingles/button.ceol @@ -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, \ No newline at end of file diff --git a/scenes/assets/jingles/button.wav b/scenes/assets/jingles/button.wav new file mode 100644 index 0000000..4371260 Binary files /dev/null and b/scenes/assets/jingles/button.wav differ diff --git a/scenes/assets/jingles/button.wav.import b/scenes/assets/jingles/button.wav.import new file mode 100644 index 0000000..9eedb65 --- /dev/null +++ b/scenes/assets/jingles/button.wav.import @@ -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 diff --git a/scenes/assets/tileset.png b/scenes/assets/tileset.png index ffb3087..aee0db7 100644 Binary files a/scenes/assets/tileset.png and b/scenes/assets/tileset.png differ diff --git a/scenes/main.tscn b/scenes/main.tscn index 08924a3..a7720db 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -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"]