diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_animated_water_rock.png b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_animated_water_rock.png new file mode 100644 index 000000000..7ee2945b6 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_animated_water_rock.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:437f7b6204b145efa9221579e5c020694707c24f7d723d404aee06db13fdc118 +size 1950 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_animated_water_rock.png.import b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_animated_water_rock.png.import new file mode 100644 index 000000000..c36ded839 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_animated_water_rock.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d3qxea7lmaxhp" +path="res://.godot/imported/champ_animated_water_rock.png-0256f0c8cf3162c5d5be8529a50a469d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_animated_water_rock.png" +dest_files=["res://.godot/imported/champ_animated_water_rock.png-0256f0c8cf3162c5d5be8529a50a469d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_dry_rock.png b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_dry_rock.png new file mode 100644 index 000000000..10d63f0c5 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_dry_rock.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:435ea08ec63acc2f6298eba19ce7bed4f917528c610bd0d4b0177b15ab1a1da2 +size 1819 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_dry_rock.png.import b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_dry_rock.png.import new file mode 100644 index 000000000..131071637 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_dry_rock.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://chc11kiie54o6" +path="res://.godot/imported/champ_dry_rock.png-170728dfbfe34f94752d34fd5ad921c1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_dry_rock.png" +dest_files=["res://.godot/imported/champ_dry_rock.png-170728dfbfe34f94752d34fd5ad921c1.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.gd b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.gd new file mode 100644 index 000000000..7b51e6b47 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.gd @@ -0,0 +1,37 @@ +# SPDX-FileCopyrightText: The Threadbare Authors +# SPDX-License-Identifier: MPL-2.0 +extends Node2D +@onready var rock: AnimatedSprite2D = $AnimatedSprite2D +@onready var area_2d: Area2D = $AnimatedSprite2D/Area2D + +## Boolean value representing if the rock is under water +@export var submerged: bool = true: + set = set_submerged + +## Signal indicating the player is standing on a submerged rock (indicating an incorrect response) +signal water_entered + +func set_submerged(is_submerged: bool) -> void: + submerged = is_submerged + if not is_node_ready(): + return + area_2d.monitoring = submerged + if submerged: + rock.play("waves") + else: + rock.play("default") + + +func _ready() -> void: + set_submerged(submerged) + + +## Function to tell champ sequence puzzle script the player guessed wrong and must be moved back +func _on_area_2d_body_entered(_body: Node2D) -> void: + await get_tree().create_timer(1.5).timeout + water_entered.emit() + + +## Toggles the water level of the rock, updating the animation and knocking the player back if necessary. +func toggle_water_level() -> void: + submerged = not submerged diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.gd.uid b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.gd.uid new file mode 100644 index 000000000..6e39bb949 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.gd.uid @@ -0,0 +1 @@ +uid://b24js5tweor6b diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.png b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.png new file mode 100644 index 000000000..541443dbf --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccbc10dcacdd71c1d1b98cac130c7449dddd5cd45530b082914d37fd60d3bab8 +size 1982 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.png.import b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.png.import new file mode 100644 index 000000000..235a1a4ec --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://db2kpntsbft16" +path="res://.godot/imported/champ_long_rock.png-4e7efd73018a0b158028559ac812d009.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.png" +dest_files=["res://.godot/imported/champ_long_rock.png-4e7efd73018a0b158028559ac812d009.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.tscn b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.tscn new file mode 100644 index 000000000..b22459c1d --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.tscn @@ -0,0 +1,88 @@ +[gd_scene load_steps=11 format=3 uid="uid://dtqm8i2abjnu7"] + +[ext_resource type="Script" uid="uid://b24js5tweor6b" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.gd" id="1_f6rm8"] +[ext_resource type="Texture2D" uid="uid://sl3l0pem5gkf" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_water_rock.png" id="2_rwx2y"] +[ext_resource type="Texture2D" uid="uid://db2kpntsbft16" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.png" id="3_rwx2y"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_jmn26"] +atlas = ExtResource("3_rwx2y") +region = Rect2(0, 0, 288, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_f6rm8"] +atlas = ExtResource("2_rwx2y") +region = Rect2(0, 0, 288, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rwx2y"] +atlas = ExtResource("2_rwx2y") +region = Rect2(0, 96, 288, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_oln2r"] +atlas = ExtResource("2_rwx2y") +region = Rect2(0, 192, 288, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_kqnxv"] +atlas = ExtResource("2_rwx2y") +region = Rect2(0, 288, 288, 96) + +[sub_resource type="SpriteFrames" id="SpriteFrames_jmn26"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_jmn26") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jmn26") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jmn26") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jmn26") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_f6rm8") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rwx2y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_oln2r") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_kqnxv") +}], +"loop": true, +"name": &"waves", +"speed": 8.0 +}] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_oln2r"] +size = Vector2(286, 110.000015) + +[node name="ChampLongRock" type="Node2D"] +script = ExtResource("1_f6rm8") + +[node name="Sprite2D" type="Sprite2D" parent="."] +visible = false +rotation = 1.5707964 +texture = ExtResource("2_rwx2y") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +rotation = 1.5707964 +sprite_frames = SubResource("SpriteFrames_jmn26") +autoplay = "waves" + +[node name="Area2D" type="Area2D" parent="AnimatedSprite2D"] +rotation = 1.5707964 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="AnimatedSprite2D/Area2D"] +position = Vector2(1.9999999, -1.9999986) +rotation = 1.5707964 +shape = SubResource("RectangleShape2D_oln2r") + +[connection signal="body_entered" from="AnimatedSprite2D/Area2D" to="." method="_on_area_2d_body_entered"] diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_water_rock.png b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_water_rock.png new file mode 100644 index 000000000..189853bd5 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_water_rock.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e46fe37a186fbeb42bd66370d6f84da0a6f5e9345adb8dbff28d4f570d86a575 +size 8622 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_water_rock.png.import b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_water_rock.png.import new file mode 100644 index 000000000..fe68d5432 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_water_rock.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://sl3l0pem5gkf" +path="res://.godot/imported/champ_long_water_rock.png-ebf8fbeac5a428d55883aa3c3d9e898c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_water_rock.png" +dest_files=["res://.godot/imported/champ_long_water_rock.png-ebf8fbeac5a428d55883aa3c3d9e898c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_object.png b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_object.png index 22d093c66..640c427d9 100644 --- a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_object.png +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_object.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ced136dd9cf22cbffac8c23f2af730571fa534f4cd34b2d501044b1673c330c3 -size 1635 +oid sha256:41b2495de9d4246bfc9dafe8777157717fc2dbd51f19af69e33a2744d003f9cb +size 1071 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_object.tres b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_object.tres index 714e1b4c1..f3c6e2e40 100644 --- a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_object.tres +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_object.tres @@ -1,6 +1,16 @@ -[gd_resource type="SpriteFrames" load_steps=5 format=3 uid="uid://c2m3tplriqe2s"] +[gd_resource type="SpriteFrames" load_steps=9 format=3 uid="uid://c2m3tplriqe2s"] [ext_resource type="Texture2D" uid="uid://c0hyny3m5fap4" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_object.png" id="1_5vycx"] +[ext_resource type="Texture2D" uid="uid://bmqyby71cbp61" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_wet_rock.png" id="1_62qai"] +[ext_resource type="Texture2D" uid="uid://chc11kiie54o6" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_dry_rock.png" id="2_upwns"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_upwns"] +atlas = ExtResource("1_62qai") +region = Rect2(0, 0, 96, 96) + +[sub_resource type="AtlasTexture" id="AtlasTexture_tmov7"] +atlas = ExtResource("2_upwns") +region = Rect2(0, 0, 96, 96) [sub_resource type="AtlasTexture" id="AtlasTexture_riqxt"] atlas = ExtResource("1_5vycx") @@ -18,7 +28,7 @@ region = Rect2(192, 0, 96, 96) animations = [{ "frames": [{ "duration": 1.0, -"texture": SubResource("AtlasTexture_riqxt") +"texture": SubResource("AtlasTexture_upwns") }], "loop": true, "name": &"default", @@ -26,6 +36,14 @@ animations = [{ }, { "frames": [{ "duration": 1.0, +"texture": SubResource("AtlasTexture_tmov7") +}], +"loop": true, +"name": &"dry", +"speed": 10.0 +}, { +"frames": [{ +"duration": 1.0, "texture": SubResource("AtlasTexture_riqxt") }, { "duration": 1.0, diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.dialogue b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.dialogue index 8088d7284..e6e9de9f5 100644 --- a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.dialogue +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.dialogue @@ -1,12 +1,12 @@ # SPDX-FileCopyrightText: The Threadbare Authors # SPDX-License-Identifier: MPL-2.0 ~ start -This scene includes objects that the player must tap in a particular sequence, and signs with clues on them. -Select a "SequencePuzzleStep" node and change the array in the "Sequence" field. -The first melody is set to yellow, green, blue. This means that you should tap those objects in that order. -Can you guess the second sequence without looking at the Inspector? +With no success throwing bait towards the air bubbles, Evan decides he must venture further northeast along the shore of Lake Champlain. +He comes across a bay, where the only way to stay on track is to cross the water directly. +There are some stepping stones submerged beneath the lake's surface. Evan must be careful to choose the right ones and avoid falling in! => END ~ well_done -Well done! You can add more steps to the puzzle. Just remember to add them to the "SequencePuzzle" node, and add a new hint sign for each one. -Using what you've learned so far, what kind of challenge can you create here? Have fun! +At last! Evan has made it to the far side of the shore. +He takes the second token of thread as a good sign that Champ is getting closer! +Determined now, he heads towards the Causeway. => END diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.gd b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.gd new file mode 100644 index 000000000..59e8683bd --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.gd @@ -0,0 +1,171 @@ +# SPDX-FileCopyrightText: The Threadbare Authors +# SPDX-License-Identifier: MPL-2.0 +class_name ChampSequencePuzzle +extends SequencePuzzle + +const CAMERA_MAX_OFFSET_Y: int = 475 +const CAMERA_OFFSET_Y: int = 25 +const CAMERA_TIMEOUT_INTERVAL: float = 0.03 +const CAMERA_ZOOM_SCALAR: float = 0.005 +const CHECKPOINT_POS: Vector2 = Vector2(1400,180) +const RESPAWN_DELAY: float = 1.5 +const ROCK_WIDTH: int = 3 +const SECOND_SEQ_BOUND: float = 1170 +const STARTING_POS: Vector2 = Vector2(350,350) + +var first_seq_solve_index: int = 0 +var kicked_object: SequencePuzzleObject +var objs: Array +var offset: int = 0 +var prev_pos: int = 0 +var platforms: Array +var sequences: Array +var solve_progress: int = 0 + +@onready var camera: Camera2D = $"../Player/Camera2D" +@onready var long_rocks: Node2D = $"../../LongRocks" +@onready var objects: Node2D = $Objects +@onready var player: Player = $"../Player" +@onready var puzzle_steps: Node2D = $Steps + +func _ready() -> void: + sequences = puzzle_steps.get_children() + platforms = Array(long_rocks.get_children()) + objs = Array(objects.get_children()) + if sequences.size() > 0: + first_seq_solve_index = sequences[0].sequence.size() - 1 + super._ready() + +func _physics_process(delta: float) -> void: + if player.position.x > SECOND_SEQ_BOUND: + for i in range(ROCK_WIDTH * first_seq_solve_index, ROCK_WIDTH * (first_seq_solve_index + 1)): + objs[i].collision.disabled = false + +## Function that handles kicking object edge cases, including the last object in the sequence or bad guesses resulting in flooding the rocks +func _on_kicked(object: SequencePuzzleObject) -> void: + var second_seq_solve_index: int = 0 + # TODO: Make this dynamic for n number of sequences? + if sequences.size() > 1: + second_seq_solve_index = first_seq_solve_index + sequences[1].sequence.size() + prev_pos = _position + super._on_kicked(object) + if _position == 0: + var found_last: bool = false + for seq in sequences: + var seq_len: int = seq.sequence.size() - 1 + if seq.sequence[seq_len] == object: + found_last = true + prev_pos = 0 # TODO: Might not be necessary? + # TODO: These are hard coded now until I understand order of step solve and kick + if solve_progress == first_seq_solve_index and found_last: + solve_progress = solve_progress + 1 + for i in range(ROCK_WIDTH * first_seq_solve_index, ROCK_WIDTH * (first_seq_solve_index + 1)): + if objs[i] is ChampSequencePuzzleObject and objs[i] != object: + objs[i].submerge() + object.dry_off() + elif solve_progress == second_seq_solve_index and found_last: + for i in range(ROCK_WIDTH * second_seq_solve_index, ROCK_WIDTH * (second_seq_solve_index + 1)): + if objs[i] is ChampSequencePuzzleObject and objs[i] != object: + objs[i].submerge() + object.dry_off() + else: + # Not the right object to kick + for platform in platforms: + if not platform.submerged: + platform.toggle_water_level() + if solve_progress > first_seq_solve_index: + solve_progress = first_seq_solve_index + else: + solve_progress = 0 + elif _position > prev_pos: + # Making progress towards solving sequence + solve_progress = solve_progress + 1 + if platforms[solve_progress].submerged: + platforms[solve_progress].toggle_water_level() + # Only want sets of ROCK_WIDTH (3) centered around the position + for i in range((ROCK_WIDTH * (_position - 1)) + offset, (ROCK_WIDTH * _position) + offset): + if objs[i] is ChampSequencePuzzleObject and objs[i] != object: + objs[i].submerge() + object.dry_off() + # Position > 0, but not correct spot + else: + # Reset everything + reset_all() + solve_progress = 0 + _position = 0 + +## Prohibits player from going back through first sequence +func _on_step_solved(step_index: int) -> void: + if _current_step == 0: + for i in range(ROCK_WIDTH * first_seq_solve_index, ROCK_WIDTH * (first_seq_solve_index + 1)): + objs[i].interact_area.disabled = true + offset = ROCK_WIDTH * (first_seq_solve_index + 1) + +## Function to change player position to previous checkpoint based on puzzle solve progress (this version saves progress when moving player) +func _on_champ_long_rock_water_entered() -> void: + if (_current_step == 1): + var solve_length : int = first_seq_solve_index + 1 + if platforms[solve_length].submerged: + platforms[solve_length].toggle_water_level() + player.position = CHECKPOINT_POS + # Restore all submerged platforms + for i in range(solve_length + 1, platforms.size()): + if not platforms[i].submerged: + platforms[i].toggle_water_level() + # Reset collisions so steps can't be skipped + for i in range(offset, objs.size()): + objs[i].collision.disabled = false + solve_progress = solve_length + + # Player is on first sequence + else: + player.position = STARTING_POS + if platforms[0].submerged: + platforms[0].toggle_water_level() + # Restore all submerged platforms + for i in range(1, platforms.size()): + if not platforms[i].submerged and i != first_seq_solve_index + 1: + platforms[i].toggle_water_level() + if platforms[first_seq_solve_index + 1].submerged: + platforms[first_seq_solve_index + 1].toggle_water_level() + # Reset collisions so steps can't be skipped + for i in range(0, objs.size()): + objs[i].collision.disabled = false + solve_progress = 0 # redundant? + +## Signal from hint sign to reset camera view and sequence +func _on_hint_sign_hint_sequence_finished() -> void: + await get_tree().create_timer(RESPAWN_DELAY).timeout + if _current_step == 1: + var goal: float = camera.offset.y + CAMERA_MAX_OFFSET_Y + while camera.offset.y < goal: + await get_tree().create_timer(CAMERA_TIMEOUT_INTERVAL).timeout + camera.offset.y = camera.offset.y + CAMERA_OFFSET_Y + camera.zoom.y = camera.zoom.y + CAMERA_ZOOM_SCALAR + camera.zoom.x = camera.zoom.x + CAMERA_ZOOM_SCALAR + reset_all() + +## Function to rest all sequence objets after displaying via hint sequence +func reset_all() -> void: + for platform in platforms: + if not platform.submerged: + platform.toggle_water_level() + if platforms[0].submerged: + platforms[0].toggle_water_level() + if platforms[first_seq_solve_index + 1].submerged: + platforms[first_seq_solve_index + 1].toggle_water_level() + + # TODO: Maybe a better way to do this, because of the way I manually change + # sprite frames, I can't just wipe everything + for obj in objs: + if sequences[0].sequence.has(obj) or sequences[1].sequence.has(obj): + obj.rock.play(obj._idle_animation) + +## Function to move camera position so entire sequence is shown (for second sequence) +func _on_hint_sign_2_demonstrate_sequence() -> void: + var goal: float = camera.offset.y - CAMERA_MAX_OFFSET_Y + while camera.offset.y > goal: + await get_tree().create_timer(CAMERA_TIMEOUT_INTERVAL).timeout + camera.offset.y = camera.offset.y - CAMERA_OFFSET_Y + camera.zoom.y = camera.zoom.y - CAMERA_ZOOM_SCALAR + camera.zoom.x = camera.zoom.x - CAMERA_ZOOM_SCALAR diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.gd.uid b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.gd.uid new file mode 100644 index 000000000..feae64dbc --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.gd.uid @@ -0,0 +1 @@ +uid://i6ataaochhqm diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.tscn b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.tscn index 33c29b0bc..6c2cfc96d 100644 --- a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.tscn +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.tscn @@ -1,17 +1,12 @@ -[gd_scene load_steps=24 format=4 uid="uid://gr7ykelwh6u1"] +[gd_scene load_steps=19 format=4 uid="uid://gr7ykelwh6u1"] -[ext_resource type="TileSet" uid="uid://cbbshdkxebjh6" path="res://scenes/quests/story_quests/champ/tiles/champ_exterior_floors.tres" id="1_27hsp"] +[ext_resource type="TileSet" uid="uid://bo4jyvl3lcww1" path="res://scenes/quests/story_quests/champ/champ_tileset.tres" id="2_6wj4q"] [ext_resource type="PackedScene" uid="uid://iu2q66clupc6" path="res://scenes/game_elements/characters/player/player.tscn" id="2_ey61o"] [ext_resource type="SpriteFrames" uid="uid://ctjbkxw0r2f2i" path="res://scenes/quests/story_quests/champ/player_components/champ_player.tres" id="3_6wj4q"] -[ext_resource type="Script" uid="uid://c68oh8dtr21ti" path="res://scenes/game_logic/sequence_puzzle.gd" id="4_bvcb0"] -[ext_resource type="PackedScene" uid="uid://b8sok264erfoc" path="res://scenes/game_elements/props/sequence_puzzle_object/sequence_puzzle_object.tscn" id="5_tf43i"] -[ext_resource type="SpriteFrames" uid="uid://c2m3tplriqe2s" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_object.tres" id="6_cr8uo"] -[ext_resource type="AudioStream" uid="uid://cg57q82pb243w" path="res://assets/third_party/nepalese_hand_bells/handBells-c4.ogg" id="7_wr0r8"] -[ext_resource type="AudioStream" uid="uid://b83x8h0ob5mpq" path="res://assets/third_party/nepalese_hand_bells/handBells-d4.ogg" id="8_jso58"] -[ext_resource type="AudioStream" uid="uid://cmtiwg2cylmts" path="res://assets/third_party/nepalese_hand_bells/handBells-e4.ogg" id="9_qox45"] -[ext_resource type="AudioStream" uid="uid://8k1hyi4gjae4" path="res://assets/third_party/nepalese_hand_bells/handBells-f4.ogg" id="10_ywee8"] -[ext_resource type="AudioStream" uid="uid://6oahn2ucxxjv" path="res://assets/third_party/nepalese_hand_bells/handBells-g4.ogg" id="11_kia5q"] -[ext_resource type="AudioStream" uid="uid://bdboi4ndapqec" path="res://assets/third_party/nepalese_hand_bells/handBells-a4.ogg" id="12_450gk"] +[ext_resource type="PackedScene" uid="uid://dtqm8i2abjnu7" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_long_rock.tscn" id="3_bvcb0"] +[ext_resource type="PackedScene" uid="uid://rt2t10osn0e" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_object.tscn" id="5_tf43i"] +[ext_resource type="Script" uid="uid://i6ataaochhqm" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle.gd" id="6_6wj4q"] +[ext_resource type="Script" uid="uid://covda4h0rtikf" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_hint_sign.gd" id="13_27hsp"] [ext_resource type="PackedScene" uid="uid://be4o3ythda4cu" path="res://scenes/game_elements/props/sequence_puzzle_hint_sign/sequence_puzzle_hint_sign.tscn" id="13_jn76l"] [ext_resource type="SpriteFrames" uid="uid://cbu01r36cmdrh" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign.tres" id="14_wt3t3"] [ext_resource type="SpriteFrames" uid="uid://c40qep1qluqlm" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign_2.tres" id="15_daq40"] @@ -31,92 +26,206 @@ metadata/_custom_type_script = "uid://bgmwplmj3bfls" [node name="SequencePuzzleTemplate" type="Node2D"] [node name="TileMapLayers" type="Node2D" parent="."] +position = Vector2(0, 100) -[node name="Grass" type="TileMapLayer" parent="TileMapLayers"] -tile_map_data = PackedByteArray("AAANAAcAAQABAAEAAAANAAYAAQABAAEAAAANAAUAAQABAAEAAAANAAQAAQABAAEAAAANAAMAAQABAAEAAAANAAIAAQABAAEAAAANAAEAAQABAAEAAAAMAAcAAQABAAEAAAAMAAYAAQABAAEAAAAMAAUAAQABAAEAAAAMAAQAAQABAAEAAAAMAAMAAQABAAEAAAAMAAIAAQABAAEAAAAMAAEAAQABAAEAAAALAAcAAQABAAEAAAALAAYAAQABAAEAAAALAAUAAQABAAEAAAALAAQAAQABAAEAAAALAAMAAQABAAEAAAALAAIAAQABAAEAAAALAAEAAQABAAEAAAAKAAcAAQABAAEAAAAKAAYAAQABAAEAAAAKAAUAAQABAAEAAAAKAAQAAQABAAEAAAAKAAMAAQABAAEAAAAKAAIAAQABAAEAAAAJAAcAAQABAAEAAAAJAAYAAQABAAEAAAAJAAUAAQABAAEAAAAJAAQAAQABAAEAAAAJAAMAAQABAAEAAAAJAAIAAQABAAEAAAAIAAcAAQABAAEAAAAIAAYAAQABAAEAAAAIAAUAAQABAAEAAAAIAAQAAQABAAEAAAAIAAMAAQABAAEAAAAIAAIAAQABAAEAAAAHAAcAAQABAAEAAAAHAAYAAQABAAEAAAAHAAUAAQABAAEAAAAHAAQAAQABAAEAAAAHAAMAAQABAAEAAAAHAAIAAQABAAEAAAAGAAcAAQABAAEAAAAGAAYAAQABAAEAAAAGAAUAAQABAAEAAAAGAAQAAQABAAEAAAAGAAMAAQABAAEAAAAGAAIAAQABAAEAAAAFAAcAAQABAAEAAAAFAAYAAQABAAEAAAAFAAUAAQABAAEAAAAFAAQAAQABAAEAAAAFAAMAAQABAAEAAAAFAAIAAQABAAEAAAAFAAEAAQABAAEAAAAEAAcAAQABAAEAAAAEAAYAAQABAAEAAAAEAAQAAQABAAEAAAAEAAMAAQABAAEAAAAEAAIAAQABAAEAAAAEAAEAAQABAAEAAAADAAQAAQABAAEAAAADAAMAAQABAAEAAAADAAIAAQABAAEAAAADAAEAAQABAAEAAAACAAMAAQABAAEAAAACAAIAAQABAAEAAAACAAEAAQABAAEAAAABAAMAAQABAAEAAAABAAIAAQABAAEAAAABAAEAAQABAAEAAAACAAQAAQABAAEAAAABAAQAAQABAAEAAAAAAAQAAQABAAEAAAAGAAAAAQABAAEAAAAHAAAAAQABAAEAAAAFAAAAAQABAAEAAAAIAAAAAQABAAEAAAAJAAAAAQABAAEAAAALAAAAAQABAAEAAAAMAAAAAQABAAEAAAAKAAAAAQABAAEAAAANAAAAAQABAAEAAAAEAAAAAQABAAEAAAADAAAAAQABAAEAAAACAAAAAQABAAEAAAABAAAAAQABAAEAAAAAAAAAAQABAAEAAAAAAAEAAQABAAEAAAAAAAIAAQABAAEAAAAAAAMAAQABAAEAAAAAAAgAAQABAAEAAAABAAgAAQABAAEAAAACAAgAAQABAAEAAAADAAgAAQABAAEAAAAEAAgAAQABAAEAAAAFAAgAAQABAAEAAAAGAAgAAQABAAEAAAAHAAgAAQABAAEAAAAIAAgAAQABAAEAAAAJAAgAAQABAAEAAAAKAAgAAQABAAEAAAAMAAgAAQABAAEAAAALAAgAAQABAAEAAAANAAgAAQABAAEAAAAOAAgAAQABAAEAAAAOAAcAAQABAAEAAAAOAAYAAQABAAEAAAAOAAUAAQABAAEAAAAOAAQAAQABAAEAAAAOAAMAAQABAAEAAAAOAAIAAQABAAEAAAAOAAEAAQABAAEAAAAOAAAAAQABAAEAAAAAAAUAAQABAAEAAAABAAUAAQABAAEAAAACAAUAAQABAAEAAAADAAUAAQABAAEAAAAEAAUAAQABAAEAAAADAAYAAQABAAEAAAACAAYAAQABAAEAAAABAAYAAQABAAEAAAAAAAYAAQABAAEAAAAAAAcAAQABAAEAAAABAAcAAQABAAEAAAACAAcAAQABAAEAAAADAAcAAQABAAEAAAAGAAEAAQABAAEAAAAHAAEAAQABAAEAAAAIAAEAAQABAAEAAAAJAAEAAQABAAEAAAAKAAEAAQABAAEAAAAPAAkAAQACAAIAAAAPAAgAAQACAAEAAAAPAAcAAQACAAEAAAAPAAYAAQACAAEAAAAPAAUAAQACAAEAAAAPAAQAAQACAAEAAAAPAAMAAQACAAEAAAAPAAIAAQACAAEAAAAPAAEAAQACAAEAAAAPAAAAAQACAAEAAAAPAP//AQACAAAAAAAOAAkAAQABAAIAAAAOAP//AQABAAAAAAANAAkAAQABAAIAAAANAP//AQABAAAAAAAMAAkAAQABAAIAAAAMAP//AQABAAAAAAALAAkAAQABAAIAAAALAP//AQABAAAAAAAKAAkAAQABAAIAAAAKAP//AQABAAAAAAAJAAkAAQABAAIAAAAJAP//AQABAAAAAAAIAAkAAQABAAIAAAAIAP//AQABAAAAAAAHAAkAAQABAAIAAAAHAP//AQABAAAAAAAGAAkAAQABAAIAAAAGAP//AQABAAAAAAAFAAkAAQABAAIAAAAFAP//AQABAAAAAAAEAAkAAQABAAIAAAAEAP//AQABAAAAAAADAAkAAQABAAIAAAADAP//AQABAAAAAAACAAkAAQABAAIAAAACAP//AQABAAAAAAABAAkAAQABAAIAAAABAP//AQABAAAAAAAAAAkAAQABAAIAAAAAAP//AQABAAAAAAD//wkAAQAAAAIAAAD//wgAAQAAAAEAAAD//wcAAQAAAAEAAAD//wYAAQAAAAEAAAD//wUAAQAAAAEAAAD//wQAAQAAAAEAAAD//wMAAQAAAAEAAAD//wIAAQAAAAEAAAD//wEAAQAAAAEAAAD//wAAAQAAAAEAAAD/////AQAAAAAAAAA=") -tile_set = ExtResource("1_27hsp") +[node name="Boundaries" type="TileMapLayer" parent="TileMapLayers"] +visible = false +tile_map_data = PackedByteArray("AAAEAAgABAABAAMAAAAEAP7/BAABAAMAAAAFAAcABAABAAMAAAADAAcABAABAAMAAAAFAP//BAABAAMAAAADAP//BAABAAMAAAALAAEABAABAAMAAAAMAAEABAABAAMAAAANAAEABAABAAMAAAAOAAEABAABAAMAAAAHAAUABAABAAMAAAAIAAUABAABAAMAAAAJAAUABAABAAMAAAAKAAUABAABAAMAAAALAAUABAABAAMAAAAMAAUABAABAAMAAAANAAUABAABAAMAAAAOAAUABAABAAMAAAAHAAEABAABAAMAAAAIAAEABAABAAMAAAAJAAEABAABAAMAAAAKAAEABAABAAMAAAAPAAEABAABAAMAAAAQAAEABAABAAMAAAARAAEABAABAAMAAAAPAAUABAABAAMAAAAQAAUABAABAAMAAAARAAUABAABAAMAAAAUAP3/BAABAAMAAAAUAPz/BAABAAMAAAAUAPv/BAABAAMAAAAUAPr/BAABAAMAAAAYAP7/BAABAAMAAAAYAP3/BAABAAMAAAAYAPz/BAABAAMAAAAYAPv/BAABAAMAAAAYAPr/BAABAAMAAAAYAPn/BAABAAMAAAAYAPj/BAABAAMAAAAYAPf/BAABAAMAAAAYAPb/BAABAAMAAAAUAPn/BAABAAMAAAAUAPj/BAABAAMAAAAUAPf/BAABAAMAAAAUAPb/BAABAAMAAAAUAPX/BAABAAMAAAAUAPT/BAABAAMAAAAUAPP/BAABAAMAAAAYAPX/BAABAAMAAAAYAPT/BAABAAMAAAAYAPP/BAABAAMAAAACAAYABAABAAMAAAACAAUABAABAAMAAAACAAQABAABAAMAAAACAAMABAABAAMAAAACAAIABAABAAMAAAACAAEABAABAAMAAAACAAAABAABAAMAAAAeAPH/BAABAAMAAAAeAPD/BAABAAMAAAAeAO//BAABAAMAAAAeAO7/BAABAAMAAAAdAPL/BAABAAMAAAAcAPL/BAABAAMAAAAbAPL/BAABAAMAAAAbAAcABAABAAMAAAAbAAYABAABAAMAAAAbAAUABAABAAMAAAAbAAQABAABAAMAAAAbAAMABAABAAMAAAAbAAIABAABAAMAAAAbAAEABAABAAMAAAAbAAAABAABAAMAAAAbAP//BAABAAMAAAAWAAkABAABAAMAAAAXAAkABAABAAMAAAAYAAkABAABAAMAAAAZAAgABAABAAMAAAAaAAcABAABAAMAAAAVAAoABAABAAMAAAAUAAsABAABAAMAAAATAAsABAABAAMAAAASAAsABAABAAMAAAARAAoABAABAAMAAAAQAAkABAABAAMAAAAQAAgABAABAAMAAAARAAcABAABAAMAAAARAAYABAABAAMAAAA=") +tile_set = ExtResource("2_6wj4q") -[node name="Sand" type="TileMapLayer" parent="TileMapLayers"] -tile_map_data = PackedByteArray("AAD//wcAAQAFAAMAAAAAAAcAAQAGAAMAAAABAAcAAQAGAAMAAAACAAcAAQAGAAMAAAADAAcAAQAHAAIAAAADAAYAAQAIAAEAAAADAAUAAQAFAAAAAAAEAAUAAQAGAAMAAAAFAAUAAQAGAAMAAAAGAAUAAQAGAAMAAAAHAAUAAQAGAAMAAAAIAAUAAQAGAAMAAAAJAAUAAQAGAAMAAAAKAAUAAQAGAAMAAAALAAUAAQAHAAIAAAALAAQAAQAFAAAAAAAMAAQAAQAGAAMAAAANAAQAAQAGAAMAAAAOAAQAAQAGAAMAAAAPAAQAAQAHAAMAAAA=") -tile_set = ExtResource("1_27hsp") +[node name="TileMapLayer" type="TileMapLayer" parent="TileMapLayers"] +tile_map_data = PackedByteArray("AAAEAAAAEQABAAEAAAAEAAEAEQABAAEAAAAEAAIAEQABAAEAAAAEAAMAEQABAAEAAAAEAAQAEQABAAEAAAAEAAUAEQABAAEAAAAEAAYAEQABAAEAAAAEAAcAEQACAAEAAAAFAAcAEwAAAAIAAAAGAAcAEwABAAIAAAAHAAcAEwABAAIAAAAIAAcAEwABAAIAAAAJAAcAEwABAAIAAAAKAAcAEwABAAEAAAALAAcAEwABAAEAAAAMAAcAEwABAAEAAAANAAcAEwABAAEAAAAOAAcAEwABAAEAAAAPAAcAEwABAAEAAAAQAAcAEwABAAEAAAAFAP//EwAAAAIAAAAGAP//EwABAAEAAAAHAP//EwABAAEAAAAIAP//EwABAAEAAAAJAP//EwABAAEAAAAKAP//EwABAAEAAAALAP//EwABAAEAAAAMAP//EwABAAEAAAANAP//EwABAAEAAAAOAP//EwABAAEAAAAPAP//EwABAAEAAAAEAP//EQACAAAAAAARAP//EwACAAEAAAARAAcAEwACAAIAAAARAAYAEwACAAEAAAARAAUAEwACAAEAAAARAAQAEwABAAEAAAARAAMAEwABAAEAAAARAAIAEwABAAEAAAARAAEAEwACAAEAAAARAAAAEwACAAEAAAAQAP//EwABAAEAAAAMAAQAEwABAAEAAAAMAAMAEwABAAEAAAAMAAIAEwABAAEAAAAMAAEAEwABAAEAAAAMAAAAEwABAAEAAAALAAAAEwABAAEAAAAKAAAAEwABAAEAAAAJAAAAEwABAAEAAAAIAAAAEwABAAEAAAAHAAAAEwABAAEAAAAGAAAAEwAAAAIAAAAFAAAAEQACAAAAAAAFAAEAEQABAAEAAAAFAAIAEQABAAEAAAAFAAMAEQABAAEAAAAFAAQAEQABAAEAAAAFAAUAEQABAAEAAAAFAAYAEQACAAIAAAAGAAYAEwABAAEAAAAGAAUAEQACAAIAAAAGAAQAEQABAAEAAAAGAAMAEQABAAEAAAAGAAIAEQABAAEAAAAGAAEAEQACAAAAAAAHAAEAEwABAAEAAAAHAAIAEwABAAEAAAAHAAMAEwABAAEAAAAHAAQAEwABAAEAAAAHAAUAEwABAAEAAAAHAAYAEwABAAEAAAAIAAYAEwABAAEAAAAIAAUAEwABAAEAAAAIAAQAEwABAAEAAAAIAAMAEwABAAEAAAAIAAIAEwABAAEAAAAIAAEAEwABAAEAAAAJAAEAEwABAAEAAAAJAAIAEwABAAEAAAAJAAMAEwABAAEAAAAJAAQAEwABAAEAAAAJAAUAEwABAAEAAAAJAAYAEwABAAEAAAAKAAYAEwABAAEAAAAKAAUAEwABAAEAAAAKAAQAEwABAAEAAAAKAAMAEwABAAEAAAAKAAIAEwABAAEAAAAKAAEAEwABAAEAAAALAAEAEwABAAEAAAALAAIAEwABAAEAAAALAAMAEwABAAEAAAALAAQAEwABAAEAAAALAAUAEwABAAEAAAALAAYAEwABAAEAAAAMAAYAEwABAAEAAAAMAAUAEwABAAEAAAANAAUAEwABAAEAAAANAAQAEwABAAEAAAANAAMAEwABAAEAAAANAAIAEwABAAEAAAANAAEAEwABAAEAAAANAAAAEwABAAEAAAAOAAAAEwABAAEAAAAOAAEAEwABAAEAAAAOAAIAEwABAAEAAAAOAAMAEwABAAEAAAAOAAQAEwABAAEAAAAOAAUAEwABAAEAAAAOAAYAEwABAAEAAAANAAYAEwABAAEAAAAPAAYAEwABAAEAAAAPAAUAEwABAAEAAAAPAAQAEwABAAEAAAAPAAMAEwABAAEAAAAPAAIAEwABAAEAAAAPAAEAEwABAAEAAAAPAAAAEwABAAEAAAAQAAAAEwABAAEAAAAQAAEAEwABAAEAAAAQAAIAEwABAAEAAAAQAAMAEwABAAEAAAAQAAQAEwABAAEAAAAQAAUAEwABAAEAAAAQAAYAEwABAAEAAAASAAcAEQAAAAEAAAASAAYAEQAAAAEAAAASAAUAEQAAAAEAAAASAAQAEQABAAEAAAASAAMAEQABAAEAAAASAAIAEQABAAEAAAASAAEAEQAAAAEAAAASAAAAEQAAAAEAAAASAP//EQAAAAAAAAATAAcAEQABAAEAAAAUAAcAEQABAAEAAAAVAAcAEQABAAEAAAAWAAcAEQABAAEAAAAXAAcAEQABAAEAAAAXAAYAEQABAAEAAAAXAAUAEQABAAEAAAAXAAQAEQABAAEAAAAXAAMAEQABAAEAAAAXAAIAEQABAAEAAAAXAAEAEQABAAEAAAAXAAAAEQABAAEAAAAXAP//EQABAAEAAAATAP//EQABAAAAAAAUAP//EQABAAEAAAAVAP//EQABAAEAAAAWAP//EQABAAEAAAAVAAIAEQABAAEAAAAVAAEAEQABAAEAAAAVAAAAEQABAAEAAAAUAAAAEQABAAEAAAATAAAAEQABAAEAAAATAAEAEQABAAEAAAATAAIAEQABAAEAAAATAAMAEQABAAEAAAATAAQAEQABAAEAAAATAAUAEQABAAEAAAATAAYAEQABAAEAAAAUAAYAEQABAAEAAAAUAAUAEQABAAEAAAAUAAQAEQABAAEAAAAUAAMAEQABAAEAAAAUAAIAEQABAAEAAAAUAAEAEQABAAEAAAAVAAMAEQABAAEAAAAVAAQAEQABAAEAAAAVAAUAEQABAAEAAAAVAAYAEQABAAEAAAAWAAYAEQABAAEAAAAWAAUAEQABAAEAAAAWAAQAEQABAAEAAAAWAAMAEQABAAEAAAAWAAIAEQABAAEAAAAWAAEAEQABAAEAAAAWAAAAEQABAAEAAAASAP7/EwABAAIAAAAXAP7/EwABAAEAAAATAP7/EwACAAIAAAAUAP7/EQADAAAAAAAVAP7/EwABAAEAAAAWAP7/EwABAAEAAAAZAAcAEQACAAIAAAAYAAcAEQABAAEAAAAZAAYAEQABAAEAAAAZAAUAEQABAAEAAAAZAAQAEQABAAEAAAAZAAMAEQABAAEAAAAZAAIAEQABAAEAAAAZAAEAEQABAAEAAAAZAAAAEQABAAEAAAAZAP//EQABAAAAAAAYAP//EQABAAAAAAAYAAAAEQABAAEAAAAYAAEAEQABAAEAAAAYAAIAEQABAAEAAAAYAAMAEQABAAEAAAAYAAQAEQABAAEAAAAYAAUAEQABAAEAAAAYAAYAEQABAAEAAAAYAP7/EwABAAIAAAAZAP7/EwABAAIAAAAaAP7/EwABAAIAAAAaAP//EQACAAAAAAAaAAAAEQACAAEAAAAaAAEAEQACAAEAAAAaAAIAEQACAAEAAAAaAAMAEQACAAEAAAAaAAQAEQACAAEAAAAaAAUAEQACAAEAAAAaAAYAEQACAAIAAAAaAAcAEwAAAAAAAAASAP3/EwABAAEAAAASAPz/EwABAAEAAAASAPv/EwABAAEAAAASAPr/EwABAAEAAAASAPn/EwABAAEAAAASAPj/EwABAAEAAAASAPf/EwABAAEAAAASAPb/EwABAAEAAAASAPX/EwABAAEAAAASAPT/EwABAAEAAAAaAP3/EwABAAEAAAAaAPz/EwABAAEAAAAaAPv/EwABAAEAAAAaAPr/EwABAAEAAAAaAPn/EwABAAEAAAAaAPj/EwABAAEAAAAaAPf/EwABAAEAAAAaAPb/EwABAAEAAAAaAPX/EwABAAEAAAAaAPT/EwABAAEAAAASAPP/EwABAAAAAAAaAPP/EwACAAAAAAATAPP/EwABAAAAAAAUAPP/EwABAAAAAAAYAPP/EwABAAAAAAAZAPP/EwABAAAAAAAVAPP/EwABAAEAAAAWAPP/EwABAAEAAAAXAPP/EwABAAEAAAAWAPn/EwABAAEAAAAWAPj/EwABAAEAAAAWAPf/EwABAAEAAAAWAPb/EwABAAEAAAAWAPX/EwABAAEAAAAWAPT/EwABAAEAAAAVAPT/EwABAAEAAAAUAPT/EwABAAEAAAATAPT/EwABAAEAAAATAPX/EwABAAEAAAATAPb/EwABAAEAAAATAPf/EwABAAEAAAATAPj/EwABAAEAAAATAPn/EwABAAEAAAATAPr/EwABAAEAAAATAPv/EwABAAEAAAATAPz/EwABAAEAAAATAP3/EwABAAEAAAAUAP3/EwABAAIAAAAUAPz/EwABAAEAAAAUAPv/EwABAAEAAAAUAPr/EwABAAEAAAAUAPn/EwABAAEAAAAUAPj/EwABAAEAAAAUAPf/EwABAAEAAAAUAPb/EwABAAEAAAAUAPX/EwABAAEAAAAVAPX/EwABAAEAAAAVAPb/EwABAAEAAAAVAPf/EwABAAEAAAAVAPj/EwABAAEAAAAVAPn/EwABAAEAAAAVAPr/EwABAAEAAAAVAPv/EwABAAEAAAAVAPz/EwABAAEAAAAVAP3/EwABAAEAAAAWAP3/EwABAAEAAAAWAPz/EwABAAEAAAAWAPv/EwABAAEAAAAWAPr/EwABAAEAAAAXAPr/EwABAAEAAAAXAPn/EwABAAEAAAAXAPj/EwABAAEAAAAXAPf/EwABAAEAAAAXAPb/EwABAAEAAAAXAPX/EwABAAEAAAAXAPT/EwABAAEAAAAYAPT/EwABAAEAAAAYAPX/EwABAAEAAAAYAPb/EwABAAEAAAAYAPf/EwABAAEAAAAYAPj/EwABAAEAAAAYAPn/EwABAAEAAAAYAPr/EwABAAEAAAAYAPv/EwABAAEAAAAXAPv/EwABAAEAAAAXAPz/EwABAAEAAAAXAP3/EwABAAEAAAAYAP3/EwABAAEAAAAYAPz/EwABAAEAAAAZAPz/EwABAAEAAAAZAPv/EwABAAEAAAAZAPr/EwABAAEAAAAZAPn/EwABAAEAAAAZAPj/EwABAAEAAAAZAPf/EwABAAEAAAAZAPb/EwABAAEAAAAZAPX/EwABAAEAAAAZAPT/EwABAAEAAAAZAP3/EwABAAEAAAAVAPL/EQABAAEAAAAWAPL/EQABAAEAAAAXAPL/EQABAAEAAAASAPL/EQAAAAIAAAAUAPL/EQABAAIAAAATAPL/EQABAAIAAAAYAPL/EQABAAIAAAAZAPL/EQABAAIAAAASAPH/EQAAAAEAAAASAPD/EQAAAAEAAAASAO//EQAAAAEAAAASAO7/EQAAAAAAAAATAO7/EQABAAAAAAAUAO7/EQABAAAAAAAVAO7/EQABAAAAAAAWAO7/EQABAAAAAAAXAO7/EQABAAAAAAAYAO7/EQABAAAAAAAZAO7/EQABAAAAAAAaAO7/EQABAAAAAAAaAPL/EQABAAIAAAAbAPH/EQABAAEAAAAcAPH/EQABAAEAAAAdAPH/EQABAAEAAAAdAO7/EQABAAAAAAAbAO7/EQABAAAAAAAcAO7/EQABAAAAAAAdAO//EQABAAEAAAAdAPD/EQABAAEAAAAXAO//EQABAAEAAAAWAO//EQABAAEAAAAVAO//EQABAAEAAAAUAO//EQABAAEAAAATAO//EQABAAEAAAATAPD/EQABAAEAAAATAPH/EQABAAEAAAAUAPH/EQABAAEAAAAUAPD/EQABAAEAAAAVAPD/EQABAAEAAAAVAPH/EQABAAEAAAAWAPH/EQABAAEAAAAWAPD/EQABAAEAAAAXAPD/EQABAAEAAAAXAPH/EQABAAEAAAAYAPH/EQABAAEAAAAYAPD/EQABAAEAAAAYAO//EQABAAEAAAAZAO//EQABAAEAAAAZAPD/EQABAAEAAAAZAPH/EQABAAEAAAAaAPH/EQABAAEAAAAaAPD/EQABAAEAAAAaAO//EQABAAEAAAAbAO//EQABAAEAAAAbAPD/EQABAAEAAAAcAPD/EQABAAEAAAAcAO//EQABAAEAAAAEAP7/EwAAAAIAAAAEAP3/EwAAAAEAAAAEAPz/EwAAAAEAAAAEAPv/EwAAAAEAAAAEAPr/EwAAAAEAAAAEAPn/EwAAAAEAAAAEAPj/EwAAAAEAAAAEAPf/EwAAAAEAAAAEAPb/EwAAAAEAAAAEAPX/EwAAAAEAAAAEAPT/EwAAAAEAAAAEAPP/EwAAAAEAAAAFAPP/EwABAAEAAAAGAPP/EwABAAEAAAAHAPP/EwABAAEAAAAIAPP/EwABAAEAAAAJAPP/EwABAAEAAAAKAPP/EwABAAEAAAALAPP/EwABAAEAAAAMAPP/EwABAAEAAAANAPP/EwABAAEAAAAOAPP/EwABAAEAAAAPAPP/EwABAAEAAAAQAPP/EwABAAEAAAARAPP/EwABAAEAAAAMAPn/EwABAAEAAAAMAPj/EwABAAEAAAAMAPf/EwABAAEAAAAMAPb/EwABAAEAAAAMAPX/EwABAAEAAAAMAPT/EwABAAEAAAALAPT/EwABAAEAAAAKAPT/EwABAAEAAAAJAPT/EwABAAEAAAAIAPT/EwABAAEAAAAHAPT/EwABAAEAAAAGAPT/EwABAAEAAAAFAPT/EwABAAEAAAAFAPX/EwABAAEAAAAFAPb/EwABAAEAAAAFAPf/EwABAAEAAAAFAPj/EwABAAEAAAAFAPn/EwABAAEAAAAFAPr/EwABAAEAAAAFAPv/EwABAAEAAAAFAPz/EwABAAEAAAAFAP3/EwABAAEAAAAFAP7/EwABAAEAAAAGAP7/EwABAAEAAAAGAP3/EwABAAEAAAAGAPz/EwABAAEAAAAGAPv/EwABAAEAAAAGAPr/EwABAAEAAAAGAPn/EwABAAEAAAAGAPj/EwABAAEAAAAGAPf/EwABAAEAAAAGAPb/EwABAAEAAAAGAPX/EwABAAEAAAAHAPX/EwABAAEAAAAHAPb/EwABAAEAAAAHAPf/EwABAAEAAAAHAPj/EwABAAEAAAAHAPn/EwABAAEAAAAHAPr/EwABAAEAAAAHAPv/EwABAAEAAAAHAPz/EwABAAEAAAAHAP3/EwABAAEAAAAHAP7/EwABAAEAAAAIAP7/EwABAAEAAAAIAP3/EwABAAEAAAAIAPz/EwABAAEAAAAIAPv/EwABAAEAAAAIAPr/EwABAAEAAAAIAPn/EwABAAEAAAAIAPj/EwABAAEAAAAIAPf/EwABAAEAAAAIAPb/EwABAAEAAAAIAPX/EwABAAEAAAAJAPX/EwABAAEAAAAJAPb/EwABAAEAAAAJAPf/EwABAAEAAAAJAPj/EwABAAEAAAAJAPn/EwABAAEAAAAJAPr/EwABAAEAAAAJAPv/EwABAAEAAAAJAPz/EwABAAEAAAAJAP3/EwABAAEAAAAJAP7/EwABAAEAAAAKAP7/EwABAAEAAAAKAP3/EwABAAEAAAAKAPz/EwABAAEAAAAKAPv/EwABAAEAAAAKAPr/EwABAAEAAAAKAPn/EwABAAEAAAAKAPj/EwABAAEAAAAKAPf/EwABAAEAAAAKAPb/EwABAAEAAAAKAPX/EwABAAEAAAALAPX/EwABAAEAAAALAPb/EwABAAEAAAALAPf/EwABAAEAAAALAPj/EwABAAEAAAALAPn/EwABAAEAAAALAPr/EwABAAEAAAALAPv/EwABAAEAAAALAPz/EwABAAEAAAALAP3/EwABAAEAAAALAP7/EwABAAEAAAAMAP7/EwABAAEAAAAMAP3/EwABAAEAAAAMAPz/EwABAAEAAAAMAPv/EwABAAEAAAAMAPr/EwABAAEAAAANAPr/EwABAAEAAAANAPn/EwABAAEAAAANAPj/EwABAAEAAAANAPf/EwABAAEAAAANAPb/EwABAAEAAAANAPX/EwABAAEAAAANAPT/EwABAAEAAAAOAPT/EwABAAEAAAAOAPX/EwABAAEAAAAOAPb/EwABAAEAAAAOAPf/EwABAAEAAAAOAPj/EwABAAEAAAAOAPn/EwABAAEAAAAOAPr/EwABAAEAAAAOAPv/EwABAAEAAAANAPv/EwABAAEAAAANAPz/EwABAAEAAAANAP3/EwABAAEAAAANAP7/EwABAAEAAAAOAP7/EwABAAEAAAAOAP3/EwABAAEAAAAOAPz/EwABAAEAAAAPAPz/EwABAAEAAAAPAPv/EwABAAEAAAAPAPr/EwABAAEAAAAPAPn/EwABAAEAAAAPAPj/EwABAAEAAAAPAPf/EwABAAEAAAAPAPb/EwABAAEAAAAPAPX/EwABAAEAAAAPAPT/EwABAAEAAAAQAPT/EwABAAEAAAAQAPX/EwABAAEAAAAQAPb/EwABAAEAAAAQAPf/EwABAAEAAAAQAPj/EwABAAEAAAAQAPn/EwABAAEAAAAQAPr/EwABAAEAAAAQAPv/EwABAAEAAAAQAPz/EwABAAEAAAAQAP3/EwABAAEAAAAPAP3/EwABAAEAAAAPAP7/EwABAAEAAAAQAP7/EwABAAEAAAARAP7/EwABAAEAAAARAP3/EwABAAEAAAARAPz/EwABAAEAAAARAPv/EwABAAEAAAARAPr/EwABAAEAAAARAPn/EwABAAEAAAARAPj/EwABAAEAAAARAPf/EwABAAEAAAARAPb/EwABAAEAAAARAPX/EwABAAEAAAARAPT/EwABAAEAAAADAAIAEQABAAEAAAADAAMAEQABAAEAAAADAAQAEQABAAEAAAADAAUAEQABAAEAAAADAAYAEQABAAEAAAADAAcAEQABAAEAAAACAAYAEQABAAEAAAABAAUAEQABAAEAAAABAAQAEQABAAEAAAABAAMAEQABAAEAAAABAAIAEQABAAEAAAABAAYAEQABAAEAAAAAAAYAEQABAAEAAAACAAcAEQABAAEAAAABAAcAEQABAAEAAAAAAAcAEQABAAEAAAD//wcAEQABAAEAAAD//wYAEQABAAEAAAD//wUAEQABAAEAAAD//wQAEQABAAEAAAAFAAgAEQABAAAAAAAEAAgAEQABAAEAAAAEAAkAEQABAAEAAAAEAAoAEQABAAEAAAAEAAsAEQABAAEAAAADAAsAEQABAAEAAAACAAsAEQABAAEAAAABAAsAEQABAAEAAAAAAAsAEQABAAEAAAD//wsAEQABAAEAAAD+/wsAEQABAAEAAAD9/wsAEQABAAEAAAD8/wsAEQABAAEAAAD8/woAEQABAAEAAAD8/wkAEQABAAEAAAD8/wgAEQABAAEAAAD8/wcAEQABAAEAAAD8/wYAEQABAAEAAAD8/wUAEQABAAEAAAD8/wQAEQABAAEAAAD8/wMAEQABAAEAAAD8/wIAEQABAAEAAAD8/wEAEQABAAEAAAD8/wAAEQABAAEAAAD8////EQABAAEAAAD8//7/EQABAAEAAAD8//3/EQABAAEAAAD8//z/EQABAAEAAAD9//z/EQABAAEAAAD+//z/EQABAAEAAAD///z/EQABAAEAAAAAAPz/EQABAAEAAAABAPz/EQABAAEAAAACAPz/EQABAAEAAAACAP3/EQABAAEAAAACAP7/EQABAAEAAAACAP//EQABAAEAAAACAAAAEQABAAEAAAACAAEAEQABAAEAAAACAAIAEQABAAEAAAACAAMAEQABAAEAAAACAAQAEQABAAEAAAACAAUAEQABAAEAAAD+/wYAEQABAAEAAAD+/wUAEQABAAEAAAD+/wQAEQABAAEAAAD+/wMAEQABAAEAAAD+/wIAEQABAAEAAAD+/wEAEQABAAEAAAD+/wAAEQABAAEAAAD+////EQABAAEAAAD+//7/EQABAAEAAAD+//3/EQABAAEAAAD9//3/EQABAAEAAAD9//7/EQABAAEAAAD9////EQABAAEAAAD9/wAAEQABAAEAAAD9/wEAEQABAAEAAAD9/wIAEQABAAEAAAD9/wMAEQABAAEAAAD9/wQAEQABAAEAAAD9/wUAEQABAAEAAAD9/wYAEQABAAEAAAD9/wcAEQABAAEAAAD9/wgAEQABAAEAAAD9/wkAEQABAAEAAAD9/woAEQABAAEAAAD+/woAEQABAAEAAAD+/wkAEQABAAEAAAD+/wgAEQABAAEAAAD+/wcAEQABAAEAAAD//wgAEQABAAEAAAD//wkAEQABAAEAAAD//woAEQABAAEAAAAAAAoAEQABAAEAAAAAAAkAEQABAAEAAAAAAAgAEQABAAEAAAABAAgAEQABAAEAAAABAAkAEQABAAEAAAABAAoAEQABAAEAAAACAAoAEQABAAEAAAACAAkAEQABAAEAAAACAAgAEQABAAEAAAADAAgAEQABAAEAAAADAAkAEQABAAEAAAADAAoAEQABAAEAAAD///3/EQABAAEAAAD///7/EQABAAEAAAD/////EQABAAEAAAD//wAAEQABAAEAAAD//wEAEQABAAEAAAD//wIAEQABAAEAAAD//wMAEQABAAEAAAAAAAMAEQABAAEAAAAAAAIAEQABAAEAAAAAAAEAEQABAAEAAAAAAAAAEQABAAEAAAAAAP//EQABAAEAAAAAAP7/EQABAAEAAAAAAP3/EQABAAEAAAABAP3/EQABAAEAAAABAP7/EQABAAEAAAABAP//EQABAAEAAAABAAAAEQABAAEAAAABAAEAEQABAAEAAAAAAAQAEQABAAEAAAAAAAUAEQABAAEAAAADAAEAEQABAAEAAAADAAAAEQABAAEAAAADAP//EQABAAEAAAADAP7/EQACAAEAAAADAP3/EQACAAEAAAADAPz/EQACAAEAAAAEAAwAEQABAAEAAAAEAA0AEQABAAEAAAAEAA4AEQABAAEAAAAEAA8AEQABAAEAAAADAA8AEQABAAEAAAACAA8AEQABAAEAAAABAA8AEQABAAEAAAAAAA8AEQABAAEAAAD//w8AEQABAAEAAAD+/w8AEQABAAEAAAD9/w8AEQABAAEAAAD8/w8AEQABAAEAAAD7/w8AEQABAAEAAAD7/w4AEQABAAEAAAD7/w0AEQABAAEAAAD7/wwAEQABAAEAAAD7/wsAEQABAAEAAAD8/wwAEQABAAEAAAD9/wwAEQABAAEAAAD+/w0AEQABAAEAAAD//w0AEQABAAEAAAAAAA0AEQABAAEAAAAAAA4AEQABAAEAAAABAA4AEQABAAEAAAACAA4AEQABAAEAAAADAA4AEQABAAEAAAD//w4AEQABAAEAAAD+/w4AEQABAAEAAAD9/w4AEQABAAEAAAD8/w4AEQABAAEAAAD8/w0AEQABAAEAAAD9/w0AEQABAAEAAAABAA0AEQABAAEAAAACAA0AEQABAAEAAAADAA0AEQABAAEAAAACAAwAEQABAAEAAAABAAwAEQABAAEAAAAAAAwAEQABAAEAAAD//wwAEQABAAEAAAD+/wwAEQABAAEAAAADAAwAEQABAAEAAAD7/woAEQABAAEAAAD7/wYAEQABAAEAAAD7/wcAEQABAAEAAAD7/wgAEQABAAEAAAD7/wkAEQABAAEAAAD7/wQAEQABAAEAAAD7/wMAEQABAAEAAAD7/wIAEQABAAEAAAD7/wUAEQABAAEAAAD7/wEAEQABAAEAAAD7/wAAEQABAAEAAAD7////EQABAAEAAAD7//7/EQABAAEAAAD7//3/EQABAAEAAAD7//z/EQABAAEAAAD7//v/EQABAAEAAAD7//r/EQABAAEAAAD7//n/EQABAAEAAAD8//n/EQABAAEAAAD9//n/EQABAAEAAAD+//n/EQABAAEAAAD///n/EQABAAEAAAAAAPn/EQABAAEAAAABAPn/EQABAAEAAAACAPn/EQABAAEAAAACAPr/EQABAAEAAAACAPv/EQABAAEAAAABAPv/EQABAAEAAAAAAPv/EQABAAEAAAD///v/EQABAAEAAAD+//v/EQABAAEAAAD+//r/EQABAAEAAAD9//r/EQABAAEAAAD8//r/EQABAAEAAAD8//v/EQABAAEAAAD9//v/EQABAAEAAAD///r/EQABAAEAAAAAAPr/EQABAAEAAAABAPr/EQABAAEAAAADAPv/EQACAAEAAAADAPr/EQACAAEAAAADAPn/EQACAAEAAAAGAAgAEQABAAAAAAAHAAgAEQABAAAAAAAIAAgAEQABAAAAAAAJAAgAEQACAAAAAAAKAAgAEwAAAAIAAAALAAkAEwAAAAIAAAAMAAkAEwABAAIAAAANAAkAEwABAAIAAAAOAAkAEwABAAIAAAAPAAkAEwABAAEAAAAQAAgAEwACAAEAAAAPAAgAEwABAAEAAAAOAAgAEwABAAEAAAANAAgAEwABAAEAAAAMAAgAEwABAAEAAAALAAgAEwABAAEAAAAKAAkAEQACAAAAAAALAAoAEQABAAAAAAAMAAoAEQABAAAAAAANAAoAEQABAAAAAAAOAAoAEQABAAAAAAAPAAoAEwAAAAIAAAAQAAkAEwACAAEAAAARAAgAEQAAAAAAAAASAAgAEQABAAEAAAATAAgAEQABAAEAAAAVAAgAEQABAAEAAAAUAAgAEQABAAEAAAAWAAgAEQABAAIAAAAXAAgAEQABAAIAAAAYAAgAEQACAAIAAAAZAAgAEwAAAAAAAAAaAAgAEwABAAEAAAAaAAkAEwABAAEAAAAaAAoAEwABAAEAAAAaAAsAEwABAAEAAAAFAA0AEQABAAEAAAAGAA0AEQABAAEAAAAHAA0AEQABAAEAAAAIAA0AEQABAAEAAAAJAA0AEQABAAEAAAAKAA0AEQABAAEAAAALAA0AEQABAAEAAAAMAA0AEQABAAEAAAANAA0AEQABAAEAAAAOAA0AEQABAAEAAAAPAA0AEQABAAEAAAAQAA0AEQACAAEAAAARAA0AEwAAAAEAAAASAA0AEwABAAEAAAATAA0AEwABAAEAAAAUAA0AEwABAAEAAAAVAA0AEwABAAEAAAAWAA0AEwABAAEAAAAXAA0AEwABAAEAAAAYAA0AEwABAAEAAAAZAA0AEwABAAEAAAAaAA0AEwABAAEAAAAaAAwAEwABAAEAAAAFAA4AEQABAAEAAAAFAA8AEQABAAEAAAAGAA8AEQABAAEAAAAGAA4AEQABAAEAAAAHAA4AEQABAAEAAAAIAA4AEQABAAEAAAAJAA4AEQABAAEAAAAKAA4AEQABAAEAAAAKAA8AEQABAAEAAAAJAA8AEQABAAEAAAAIAA8AEQABAAEAAAAHAA8AEQABAAEAAAALAA8AEQABAAEAAAAMAA8AEQABAAEAAAANAA8AEQABAAEAAAAOAA8AEQABAAEAAAAPAA8AEQABAAEAAAAQAA8AEQACAAEAAAARAA8AEwAAAAEAAAASAA8AEwABAAEAAAATAA8AEwABAAEAAAAUAA8AEwABAAEAAAAVAA8AEwABAAEAAAAWAA8AEwABAAEAAAAXAA8AEwABAAEAAAAYAA8AEwABAAEAAAAZAA8AEwABAAEAAAAZAA4AEwABAAEAAAAYAA4AEwABAAEAAAAXAA4AEwABAAEAAAAWAA4AEwABAAEAAAAVAA4AEwABAAEAAAAUAA4AEwABAAEAAAATAA4AEwABAAEAAAASAA4AEwABAAEAAAARAA4AEwAAAAEAAAAQAA4AEQACAAEAAAAPAA4AEQABAAEAAAAOAA4AEQABAAEAAAANAA4AEQABAAEAAAAMAA4AEQABAAEAAAALAA4AEQABAAEAAAAaAA8AEwABAAEAAAAaAA4AEwABAAEAAAAUAAwAEwABAAEAAAAUAAsAEwABAAAAAAAUAAoAEQACAAIAAAAUAAkAEQABAAEAAAATAAkAEQABAAEAAAASAAkAEQABAAEAAAARAAkAEQAAAAIAAAARAAoAEwACAAAAAAAQAAoAEwABAAEAAAAQAAsAEwAAAAIAAAAPAAsAEQACAAAAAAAOAAsAEQABAAEAAAANAAsAEQABAAEAAAAMAAsAEQABAAEAAAALAAsAEQABAAEAAAAKAAsAEQABAAEAAAAKAAoAEQABAAEAAAAJAAoAEQABAAEAAAAJAAkAEQABAAEAAAAIAAkAEQABAAEAAAAHAAkAEQABAAEAAAAGAAkAEQABAAEAAAAFAAkAEQABAAEAAAAFAAoAEQABAAEAAAAFAAsAEQABAAEAAAAFAAwAEQABAAEAAAAGAAwAEQABAAEAAAAGAAsAEQABAAEAAAAGAAoAEQABAAEAAAAHAAoAEQABAAEAAAAHAAsAEQABAAEAAAAHAAwAEQABAAEAAAAIAAwAEQABAAEAAAAIAAsAEQABAAEAAAAIAAoAEQABAAEAAAAJAAsAEQABAAEAAAAJAAwAEQABAAEAAAAKAAwAEQABAAEAAAALAAwAEQABAAEAAAAMAAwAEQABAAEAAAANAAwAEQABAAEAAAAOAAwAEQABAAEAAAAPAAwAEQABAAEAAAAQAAwAEQACAAAAAAARAAwAEwAAAAEAAAARAAsAEwABAAEAAAASAAsAEwABAAAAAAASAAoAEQAAAAIAAAATAAoAEQABAAIAAAATAAsAEwABAAAAAAATAAwAEwABAAEAAAASAAwAEwABAAEAAAAVAAkAEQACAAIAAAAVAAoAEwAAAAAAAAAVAAsAEwABAAEAAAAVAAwAEwABAAEAAAAWAAwAEwABAAEAAAAWAAsAEwABAAEAAAAWAAoAEwABAAEAAAAWAAkAEwAAAAAAAAAXAAkAEwABAAAAAAAXAAoAEwABAAEAAAAXAAsAEwABAAEAAAAXAAwAEwABAAEAAAAYAAwAEwABAAEAAAAYAAsAEwABAAEAAAAYAAoAEwABAAEAAAAYAAkAEwABAAAAAAAZAAkAEwABAAEAAAAZAAoAEwABAAEAAAAZAAsAEwABAAEAAAAZAAwAEwABAAEAAAAbAA8AEwABAAEAAAAcAA8AEwABAAEAAAAdAA8AEwABAAEAAAAeAA8AEwABAAEAAAAfAA8AEwABAAEAAAAgAA8AEwABAAEAAAAhAA8AEwABAAEAAAAiAA8AEwABAAEAAAAiAA4AEwABAAEAAAAiAA0AEwABAAEAAAAiAAwAEwABAAEAAAAiAAsAEwABAAEAAAAiAAoAEwABAAEAAAAiAAkAEwABAAEAAAAiAAgAEwABAAEAAAAiAAcAEwABAAEAAAAiAAYAEwABAAEAAAAiAAUAEwABAAEAAAAiAAQAEwABAAEAAAAiAAMAEwABAAEAAAAiAAIAEwABAAEAAAAiAAEAEwABAAEAAAAiAAAAEwABAAEAAAAiAP//EwABAAEAAAAiAP7/EwABAAEAAAAiAP3/EwABAAEAAAAiAPz/EwABAAEAAAAiAPv/EwABAAEAAAAiAPr/EwABAAEAAAAiAPn/EwABAAEAAAAiAPj/EwABAAEAAAAiAPf/EwABAAEAAAAhAPf/EwABAAEAAAAgAPf/EwABAAEAAAAfAPf/EwABAAEAAAAeAPf/EwABAAEAAAAdAPf/EwABAAEAAAAcAPf/EwABAAEAAAAcAPj/EwABAAEAAAAcAPn/EwABAAEAAAAcAPr/EwABAAEAAAAcAPv/EwABAAEAAAAcAPz/EwABAAEAAAAcAP3/EwABAAEAAAAcAP7/EwABAAEAAAAcAP//EwABAAEAAAAcAAAAEwABAAEAAAAbAAAAEwAAAAEAAAAbAP//EwAAAAEAAAAbAP7/EwABAAEAAAAbAP3/EwABAAEAAAAbAPz/EwABAAEAAAAbAPv/EwABAAEAAAAbAPr/EwABAAEAAAAbAPn/EwABAAEAAAAbAPj/EwABAAEAAAAbAPf/EwABAAEAAAAbAPb/EwABAAEAAAAbAPX/EwABAAEAAAAbAPT/EwACAAAAAAAbAPP/EQAAAAIAAAARAPL/EwACAAEAAAARAPH/EwACAAEAAAARAPD/EwACAAEAAAARAO//EwACAAEAAAARAO7/EwACAAEAAAASAO3/EwABAAIAAAATAO3/EwABAAIAAAAUAO3/EwABAAIAAAAVAO3/EwABAAIAAAAWAO3/EwABAAIAAAAXAO3/EwABAAIAAAAYAO3/EwABAAIAAAAZAO3/EwABAAIAAAAaAO3/EwABAAIAAAAbAO3/EwABAAIAAAAcAO3/EwABAAIAAAAdAO3/EwABAAIAAAAeAO3/EwACAAIAAAAfAOz/EwACAAIAAAAgAOv/EwACAAIAAAAhAOr/EwACAAIAAAAiAOn/EwACAAIAAAAiAOj/EwACAAEAAAAhAOj/EwABAAEAAAAgAOj/EwABAAEAAAAfAOj/EwABAAEAAAAeAOj/EwABAAEAAAAdAOj/EwABAAEAAAAcAOj/EwABAAEAAAAbAOj/EwABAAEAAAAaAOj/EwABAAEAAAAZAOj/EwABAAEAAAAYAOj/EwABAAEAAAAXAOj/EwABAAEAAAAWAOj/EwABAAEAAAAVAOj/EwABAAEAAAAUAOj/EwABAAEAAAATAOj/EwABAAEAAAASAOj/EwABAAEAAAARAOj/EwABAAEAAAAQAOj/EwABAAEAAAAPAOj/EwABAAEAAAAOAOj/EwABAAEAAAANAOj/EwABAAEAAAAMAOj/EwABAAEAAAALAOj/EwABAAEAAAAKAOj/EwABAAEAAAAJAOj/EwABAAEAAAAIAOj/EwABAAEAAAAHAOj/EwABAAEAAAAGAOj/EwABAAEAAAAGAOn/EwABAAEAAAAGAOr/EwABAAEAAAAGAOv/EwABAAEAAAAGAOz/EwABAAEAAAAGAO3/EwABAAEAAAAGAO7/EwABAAEAAAAGAO//EwABAAEAAAAGAPD/EwABAAEAAAAGAPH/EwABAAEAAAAEAPL/EwAAAAEAAAAEAPH/EwAAAAEAAAAEAPD/EwAAAAEAAAAEAO//EwAAAAEAAAAEAO7/EwAAAAEAAAAEAO3/EwAAAAEAAAAEAOz/EwAAAAEAAAAEAOv/EwAAAAEAAAAEAOr/EwAAAAEAAAAEAOn/EwAAAAEAAAAEAOj/EwAAAAEAAAAFAOj/EwABAAEAAAAJAO3/EwABAAEAAAAJAOz/EwABAAEAAAAJAOv/EwABAAEAAAAJAOr/EwABAAEAAAAJAOn/EwABAAEAAAAIAOn/EwABAAEAAAAHAOn/EwABAAEAAAAHAOr/EwABAAEAAAAHAOv/EwABAAEAAAAHAOz/EwABAAEAAAAHAO3/EwABAAEAAAAHAO7/EwABAAEAAAAHAO//EwABAAEAAAAHAPD/EwABAAEAAAAHAPH/EwABAAEAAAAHAPL/EwABAAEAAAAGAPL/EwABAAEAAAAFAPL/EwABAAEAAAAFAPH/EwABAAEAAAAFAPD/EwABAAEAAAAFAO//EwABAAEAAAAFAO7/EwABAAEAAAAFAO3/EwABAAEAAAAFAOz/EwABAAEAAAAFAOv/EwABAAEAAAAFAOr/EwABAAEAAAAFAOn/EwABAAEAAAAIAPL/EwABAAEAAAAIAPH/EwABAAEAAAAIAPD/EwABAAEAAAAIAO//EwABAAEAAAAIAO7/EwABAAEAAAAIAO3/EwABAAEAAAAIAOz/EwABAAEAAAAIAOv/EwABAAEAAAAIAOr/EwABAAEAAAAJAO7/EwABAAEAAAAJAO//EwABAAEAAAAJAPD/EwABAAEAAAAJAPH/EwABAAEAAAAJAPL/EwABAAEAAAAKAPL/EwABAAEAAAAKAPH/EwABAAEAAAAKAPD/EwABAAEAAAAKAO//EwABAAEAAAAKAO7/EwABAAEAAAAKAO3/EwABAAEAAAAKAOz/EwABAAEAAAAKAOv/EwABAAEAAAAKAOr/EwABAAEAAAAKAOn/EwABAAEAAAALAOn/EwABAAEAAAALAOr/EwABAAEAAAALAOv/EwABAAEAAAALAOz/EwABAAEAAAALAO3/EwABAAEAAAALAO7/EwABAAEAAAALAO//EwABAAEAAAALAPD/EwABAAEAAAALAPH/EwABAAEAAAALAPL/EwABAAEAAAAMAPL/EwABAAEAAAAMAPH/EwABAAEAAAAMAPD/EwABAAEAAAAMAO//EwABAAEAAAAMAO7/EwABAAEAAAAMAO3/EwABAAEAAAAMAOz/EwABAAEAAAAMAOv/EwABAAEAAAAMAOr/EwABAAEAAAAMAOn/EwABAAEAAAANAOn/EwABAAEAAAANAOr/EwABAAEAAAANAOv/EwABAAEAAAANAOz/EwABAAEAAAANAO3/EwABAAEAAAANAO7/EwABAAEAAAANAO//EwABAAEAAAANAPD/EwABAAEAAAANAPH/EwABAAEAAAANAPL/EwABAAEAAAAOAPL/EwABAAEAAAAOAPH/EwABAAEAAAAOAPD/EwABAAEAAAAOAO//EwABAAEAAAAOAO7/EwABAAEAAAAOAO3/EwABAAEAAAAOAOz/EwABAAEAAAAOAOv/EwABAAEAAAAOAOr/EwABAAEAAAAOAOn/EwABAAEAAAAPAOn/EwABAAEAAAAPAOr/EwABAAEAAAAPAOv/EwABAAEAAAAPAOz/EwABAAEAAAAPAO3/EwABAAEAAAAPAO7/EwABAAEAAAAPAO//EwABAAEAAAAPAPD/EwABAAEAAAAPAPH/EwABAAEAAAAPAPL/EwABAAEAAAAQAPL/EwABAAEAAAAQAPH/EwABAAEAAAAQAPD/EwABAAEAAAAQAO//EwABAAEAAAAQAO7/EwABAAEAAAAQAO3/EwABAAEAAAAQAOz/EwABAAEAAAAQAOv/EwABAAEAAAAQAOr/EwABAAEAAAAQAOn/EwABAAEAAAARAOn/EwABAAEAAAARAOr/EwABAAEAAAARAOv/EwABAAEAAAARAOz/EwABAAEAAAARAO3/EwABAAEAAAASAOz/EwABAAEAAAASAOv/EwABAAEAAAASAOr/EwABAAEAAAASAOn/EwABAAEAAAATAOn/EwABAAEAAAATAOr/EwABAAEAAAATAOv/EwABAAEAAAATAOz/EwABAAEAAAAUAOz/EwABAAEAAAAUAOv/EwABAAEAAAAUAOr/EwABAAEAAAAUAOn/EwABAAEAAAAVAOn/EwABAAEAAAAVAOr/EwABAAEAAAAVAOv/EwABAAEAAAAVAOz/EwABAAEAAAAWAOz/EwABAAEAAAAWAOv/EwABAAEAAAAWAOr/EwABAAEAAAAWAOn/EwABAAEAAAAXAOn/EwABAAEAAAAXAOr/EwABAAEAAAAXAOv/EwABAAEAAAAXAOz/EwABAAEAAAAYAOz/EwABAAEAAAAYAOv/EwABAAEAAAAYAOr/EwABAAEAAAAYAOn/EwABAAEAAAAZAOn/EwABAAEAAAAZAOr/EwABAAEAAAAZAOv/EwABAAEAAAAZAOz/EwABAAEAAAAaAOz/EwABAAEAAAAaAOv/EwABAAEAAAAaAOr/EwABAAEAAAAaAOn/EwABAAEAAAAbAOn/EwABAAEAAAAbAOr/EwABAAEAAAAbAOv/EwABAAEAAAAbAOz/EwABAAEAAAAcAOz/EwABAAEAAAAcAOv/EwABAAEAAAAcAOr/EwABAAEAAAAcAOn/EwABAAEAAAAdAOn/EwABAAEAAAAdAOr/EwABAAEAAAAdAOv/EwABAAEAAAAdAOz/EwABAAEAAAAeAOz/EwABAAEAAAAeAOv/EwABAAEAAAAeAOr/EwABAAEAAAAeAOn/EwABAAEAAAAfAOn/EwABAAEAAAAfAOr/EwABAAEAAAAfAOv/EwABAAEAAAAgAOr/EwABAAEAAAAgAOn/EwABAAEAAAAhAOn/EwABAAEAAAAfAAcAEwABAAEAAAAfAAYAEwABAAEAAAAfAAUAEwABAAEAAAAfAAQAEwABAAEAAAAfAAMAEwABAAEAAAAfAAIAEwABAAEAAAAfAAEAEwABAAEAAAAfAAAAEwABAAEAAAAfAP//EwABAAEAAAAfAP7/EwABAAEAAAAfAP3/EwABAAEAAAAfAPz/EwABAAEAAAAfAPv/EwABAAEAAAAfAPr/EwABAAEAAAAfAPn/EwABAAEAAAAfAPj/EwABAAEAAAAeAPj/EwABAAEAAAAdAPj/EwABAAEAAAAdAPn/EwABAAEAAAAdAPr/EwABAAEAAAAdAPv/EwABAAEAAAAdAPz/EwABAAEAAAAdAP3/EwABAAEAAAAdAP7/EwABAAEAAAAdAP//EwABAAEAAAAdAAAAEwABAAEAAAAdAAEAEwABAAEAAAAcAAEAEwABAAEAAAAbAAEAEwAAAAEAAAAbAAIAEwAAAAEAAAAbAAMAEwAAAAEAAAAbAAQAEwAAAAEAAAAbAAUAEwAAAAEAAAAbAAYAEwAAAAEAAAAbAAcAEwABAAEAAAAbAAgAEwABAAEAAAAbAAkAEwABAAEAAAAbAAoAEwABAAEAAAAbAAsAEwABAAEAAAAbAAwAEwABAAEAAAAbAA0AEwABAAEAAAAbAA4AEwABAAEAAAAcAA4AEwABAAEAAAAcAA0AEwABAAEAAAAcAAwAEwABAAEAAAAcAAsAEwABAAEAAAAcAAoAEwABAAEAAAAcAAkAEwABAAEAAAAcAAgAEwABAAEAAAAcAAcAEwABAAEAAAAcAAYAEwABAAEAAAAcAAUAEwABAAEAAAAcAAQAEwABAAEAAAAcAAMAEwABAAEAAAAcAAIAEwABAAEAAAAdAAIAEwABAAEAAAAdAAMAEwABAAEAAAAdAAQAEwABAAEAAAAdAAUAEwABAAEAAAAdAAYAEwABAAEAAAAdAAcAEwABAAEAAAAdAAgAEwABAAEAAAAdAAkAEwABAAEAAAAdAAoAEwABAAEAAAAdAAsAEwABAAEAAAAdAAwAEwABAAEAAAAdAA0AEwABAAEAAAAdAA4AEwABAAEAAAAeAA4AEwABAAEAAAAeAA0AEwABAAEAAAAeAAwAEwABAAEAAAAeAAsAEwABAAEAAAAeAAoAEwABAAEAAAAeAAkAEwABAAEAAAAeAAgAEwABAAEAAAAeAAcAEwABAAEAAAAeAAYAEwABAAEAAAAeAAUAEwABAAEAAAAeAAQAEwABAAEAAAAeAAMAEwABAAEAAAAeAAIAEwABAAEAAAAeAAEAEwABAAEAAAAeAAAAEwABAAEAAAAeAP//EwABAAEAAAAeAP7/EwABAAEAAAAeAP3/EwABAAEAAAAeAPz/EwABAAEAAAAeAPv/EwABAAEAAAAeAPr/EwABAAEAAAAeAPn/EwABAAEAAAAfAAgAEwABAAEAAAAfAAkAEwABAAEAAAAfAAoAEwABAAEAAAAfAAsAEwABAAEAAAAfAAwAEwABAAEAAAAfAA0AEwABAAEAAAAfAA4AEwABAAEAAAAgAA4AEwABAAEAAAAgAA0AEwABAAEAAAAgAAwAEwABAAEAAAAgAAsAEwABAAEAAAAgAAoAEwABAAEAAAAgAAkAEwABAAEAAAAgAAgAEwABAAEAAAAgAAcAEwABAAEAAAAgAAYAEwABAAEAAAAgAAUAEwABAAEAAAAgAAQAEwABAAEAAAAgAAMAEwABAAEAAAAgAAIAEwABAAEAAAAgAAEAEwABAAEAAAAgAAAAEwABAAEAAAAgAP//EwABAAEAAAAgAP7/EwABAAEAAAAgAP3/EwABAAEAAAAgAPz/EwABAAEAAAAgAPv/EwABAAEAAAAgAPr/EwABAAEAAAAgAPn/EwABAAEAAAAgAPj/EwABAAEAAAAhAPj/EwABAAEAAAAhAPn/EwABAAEAAAAhAPr/EwABAAEAAAAhAPv/EwABAAEAAAAhAPz/EwABAAEAAAAhAP3/EwABAAEAAAAhAP7/EwABAAEAAAAhAP//EwABAAEAAAAhAAAAEwABAAEAAAAhAAEAEwABAAEAAAAhAAIAEwABAAEAAAAhAAMAEwABAAEAAAAhAAQAEwABAAEAAAAhAAUAEwABAAEAAAAhAAYAEwABAAEAAAAhAAcAEwABAAEAAAAhAAgAEwABAAEAAAAhAAkAEwABAAEAAAAhAAoAEwABAAEAAAAhAAsAEwABAAEAAAAhAAwAEwABAAEAAAAhAA0AEwABAAEAAAAhAA4AEwABAAEAAAAiAPb/EwABAAAAAAAiAPX/EQABAAIAAAAiAPT/EQABAAEAAAAiAPP/EQABAAEAAAAjAPP/EQABAAEAAAAjAPb/EwABAAAAAAAkAPb/EwABAAAAAAAlAPb/EwABAAAAAAAlAPX/EQABAAIAAAAlAPT/EQABAAEAAAAlAPP/EQABAAEAAAAlAPL/EQABAAEAAAAlAPH/EQABAAEAAAAlAPD/EQABAAEAAAAlAO//EQABAAEAAAAlAO7/EQABAAEAAAAlAO3/EQABAAEAAAAlAOz/EQABAAEAAAAlAOv/EQABAAEAAAAkAOv/EQABAAEAAAAjAOv/EQABAAEAAAAiAOv/EQABAAEAAAAhAOv/EQAAAAAAAAAgAOz/EQAAAAAAAAAfAO3/EQAAAAAAAAAeAO7/EQABAAAAAAAhAO7/EQABAAEAAAAhAO3/EQABAAEAAAAhAOz/EQABAAEAAAAiAOz/EQABAAEAAAAiAO3/EQABAAEAAAAiAO7/EQABAAEAAAAiAO//EQABAAEAAAAhAO//EQABAAEAAAAgAO//EQABAAEAAAAgAO7/EQABAAEAAAAgAO3/EQABAAEAAAAfAO7/EQABAAEAAAAfAO//EQABAAEAAAAeAO//EQABAAEAAAAeAPD/EQABAAEAAAAeAPH/EQABAAEAAAAeAPL/EQABAAEAAAAdAPL/EQABAAEAAAAcAPL/EQABAAEAAAAbAPL/EQABAAEAAAAcAPP/EQABAAEAAAAcAPT/EQAAAAIAAAAcAPX/EwACAAAAAAAcAPb/EwABAAEAAAAdAPb/EwABAAAAAAAdAPX/EQAAAAIAAAAdAPT/EQABAAEAAAAdAPP/EQABAAEAAAAeAPP/EQABAAEAAAAeAPT/EQABAAEAAAAeAPX/EQABAAIAAAAeAPb/EwABAAAAAAAfAPb/EwABAAAAAAAfAPX/EQABAAIAAAAfAPT/EQABAAEAAAAfAPP/EQABAAEAAAAfAPL/EQABAAEAAAAfAPH/EQABAAEAAAAfAPD/EQABAAEAAAAgAPD/EQABAAEAAAAgAPH/EQABAAEAAAAgAPL/EQABAAEAAAAgAPP/EQABAAEAAAAgAPT/EQABAAEAAAAgAPX/EQABAAIAAAAgAPb/EwABAAAAAAAhAPb/EwABAAAAAAAhAPX/EQABAAIAAAAhAPT/EQABAAEAAAAhAPP/EQABAAEAAAAhAPL/EQABAAEAAAAhAPH/EQABAAEAAAAhAPD/EQABAAEAAAAiAPD/EQABAAEAAAAiAPH/EQABAAEAAAAiAPL/EQABAAEAAAAjAPL/EQABAAEAAAAjAPH/EQABAAEAAAAjAPD/EQABAAEAAAAjAO//EQABAAEAAAAjAO7/EQABAAEAAAAjAO3/EQABAAEAAAAjAOz/EQABAAEAAAAkAOz/EQABAAEAAAAkAO3/EQABAAEAAAAkAO7/EQABAAEAAAAkAO//EQABAAEAAAAkAPD/EQABAAEAAAAkAPH/EQABAAEAAAAkAPL/EQABAAEAAAAkAPP/EQABAAEAAAAkAPT/EQABAAEAAAAjAPT/EQABAAEAAAAjAPX/EQABAAIAAAAkAPX/EQABAAIAAAAmAPb/EwABAAAAAAAnAPb/EwABAAAAAAAoAPb/EwABAAAAAAAmAPX/EQABAAIAAAAnAPX/EQABAAIAAAAoAPX/EQABAAIAAAAmAPT/EQABAAEAAAAnAPT/EQABAAEAAAAoAPT/EQABAAEAAAAoAPP/EQABAAEAAAAoAPL/EQABAAEAAAAoAPH/EQABAAEAAAAoAPD/EQABAAEAAAAoAO//EQABAAEAAAAoAO7/EQABAAEAAAAnAO7/EQABAAEAAAAmAO7/EQABAAEAAAAmAO//EQABAAEAAAAmAPD/EQABAAEAAAAmAPH/EQABAAEAAAAmAPL/EQABAAEAAAAmAPP/EQABAAEAAAAnAPP/EQABAAEAAAAnAPL/EQABAAEAAAAnAPH/EQABAAEAAAAnAPD/EQABAAEAAAAnAO//EQABAAEAAAAmAO3/EQABAAEAAAAnAO3/EQABAAEAAAAnAOz/EQABAAEAAAAnAOv/EQABAAEAAAAmAOv/EQABAAEAAAAmAOz/EQABAAEAAAAoAOv/EQABAAEAAAAoAOz/EQABAAEAAAAoAO3/EQABAAEAAAAoAPf/EwABAAEAAAAoAPj/EwABAAEAAAAoAPn/EwABAAEAAAAoAPr/EwABAAEAAAAoAPv/EwABAAEAAAAoAPz/EwABAAEAAAAoAP3/EwABAAEAAAAoAP7/EwABAAEAAAAoAP//EwABAAEAAAAoAAAAEwABAAEAAAAoAAEAEwABAAEAAAAjAAMAEwABAAEAAAAkAAMAEwABAAEAAAAlAAMAEwABAAEAAAAmAAMAEwABAAEAAAAnAAMAEwABAAEAAAAoAAMAEwABAAEAAAAkAPv/EwABAAEAAAAkAPr/EwABAAEAAAAkAPn/EwABAAEAAAAkAPj/EwABAAEAAAAkAPf/EwABAAEAAAAjAPf/EwABAAEAAAAjAPj/EwABAAEAAAAjAPn/EwABAAEAAAAjAPr/EwABAAEAAAAjAPv/EwABAAEAAAAjAPz/EwABAAEAAAAjAP3/EwABAAEAAAAjAP7/EwABAAEAAAAjAP//EwABAAEAAAAjAAAAEwABAAEAAAAjAAEAEwABAAEAAAAjAAIAEwABAAEAAAAkAAIAEwABAAEAAAAkAAEAEwABAAEAAAAkAAAAEwABAAEAAAAkAP//EwABAAEAAAAkAP7/EwABAAEAAAAkAP3/EwABAAEAAAAkAPz/EwABAAEAAAAlAPz/EwABAAEAAAAlAPv/EwABAAEAAAAlAPr/EwABAAEAAAAlAPn/EwABAAEAAAAlAPj/EwABAAEAAAAlAPf/EwABAAEAAAAmAPf/EwABAAEAAAAmAPj/EwABAAEAAAAmAPn/EwABAAEAAAAmAPr/EwABAAEAAAAmAPv/EwABAAEAAAAmAPz/EwABAAEAAAAmAP3/EwABAAEAAAAlAP3/EwABAAEAAAAlAP7/EwABAAEAAAAlAP//EwABAAEAAAAlAAAAEwABAAEAAAAlAAEAEwABAAEAAAAlAAIAEwABAAEAAAAmAAIAEwABAAEAAAAmAAEAEwABAAEAAAAmAAAAEwABAAEAAAAmAP//EwABAAEAAAAmAP7/EwABAAEAAAAnAP7/EwABAAEAAAAnAP3/EwABAAEAAAAnAPz/EwABAAEAAAAnAPv/EwABAAEAAAAnAPr/EwABAAEAAAAnAPn/EwABAAEAAAAnAPj/EwABAAEAAAAnAPf/EwABAAEAAAAnAP//EwABAAEAAAAnAAAAEwABAAEAAAAnAAEAEwABAAEAAAAnAAIAEwABAAEAAAAoAAIAEwABAAEAAAAoAAQAEwABAAEAAAAoAAUAEwABAAEAAAAoAAYAEwABAAEAAAAoAAcAEwABAAEAAAAoAAgAEwABAAEAAAAoAAkAEwABAAEAAAAoAAoAEwABAAEAAAAoAAsAEwABAAEAAAAoAAwAEwABAAEAAAAoAA0AEwABAAEAAAAoAA4AEwABAAEAAAAoAA8AEwABAAEAAAAnAA8AEwABAAEAAAAmAA8AEwABAAEAAAAlAA8AEwABAAEAAAAkAA8AEwABAAEAAAAjAA8AEwABAAEAAAAlAAwAEwABAAEAAAAlAAsAEwABAAEAAAAlAAoAEwABAAEAAAAlAAkAEwABAAEAAAAlAAgAEwABAAEAAAAlAAcAEwABAAEAAAAlAAYAEwABAAEAAAAlAAUAEwABAAEAAAAlAAQAEwABAAEAAAAkAAQAEwABAAEAAAAjAAQAEwABAAEAAAAjAAUAEwABAAEAAAAjAAYAEwABAAEAAAAjAAcAEwABAAEAAAAjAAgAEwABAAEAAAAjAAkAEwABAAEAAAAjAAoAEwABAAEAAAAjAAsAEwABAAEAAAAjAAwAEwABAAEAAAAjAA0AEwABAAEAAAAjAA4AEwABAAEAAAAkAA4AEwABAAEAAAAkAA0AEwABAAEAAAAkAAwAEwABAAEAAAAkAAsAEwABAAEAAAAkAAoAEwABAAEAAAAkAAkAEwABAAEAAAAkAAgAEwABAAEAAAAkAAcAEwABAAEAAAAkAAYAEwABAAEAAAAkAAUAEwABAAEAAAAlAA0AEwABAAEAAAAlAA4AEwABAAEAAAAmAA4AEwABAAEAAAAmAA0AEwABAAEAAAAmAAwAEwABAAEAAAAmAAsAEwABAAEAAAAmAAoAEwABAAEAAAAmAAkAEwABAAEAAAAmAAgAEwABAAEAAAAmAAcAEwABAAEAAAAmAAYAEwABAAEAAAAmAAUAEwABAAEAAAAmAAQAEwABAAEAAAAnAAQAEwABAAEAAAAnAAUAEwABAAEAAAAnAAYAEwABAAEAAAAnAAcAEwABAAEAAAAnAAgAEwABAAEAAAAnAAkAEwABAAEAAAAnAAoAEwABAAEAAAAnAAsAEwABAAEAAAAnAAwAEwABAAEAAAAnAA0AEwABAAEAAAAnAA4AEwABAAEAAAAQABAAEQACAAEAAAAQABEAEQACAAEAAAAPABEAEQABAAEAAAAOABEAEQABAAEAAAANABEAEQABAAEAAAAMABEAEQABAAEAAAALABEAEQABAAEAAAAKABEAEQABAAEAAAAJABEAEQABAAEAAAAIABEAEQABAAEAAAAHABEAEQABAAEAAAAGABEAEQABAAEAAAAFABEAEQABAAEAAAAEABEAEQABAAEAAAADABEAEQABAAEAAAACABEAEQABAAEAAAABABEAEQABAAEAAAAAABEAEQABAAEAAAD//xEAEQABAAEAAAD+/xEAEQABAAEAAAD9/xEAEQABAAEAAAD8/xEAEQABAAEAAAD7/xEAEQABAAEAAAD7/xAAEQABAAEAAAD//xAAEQABAAEAAAD+/xAAEQABAAEAAAD9/xAAEQABAAEAAAD8/xAAEQABAAEAAAAAABAAEQABAAEAAAABABAAEQABAAEAAAACABAAEQABAAEAAAADABAAEQABAAEAAAAEABAAEQABAAEAAAAFABAAEQABAAEAAAAGABAAEQABAAEAAAAHABAAEQABAAEAAAAIABAAEQABAAEAAAAJABAAEQABAAEAAAAKABAAEQABAAEAAAALABAAEQABAAEAAAAMABAAEQABAAEAAAANABAAEQABAAEAAAAOABAAEQABAAEAAAAPABAAEQABAAEAAAARABAAEwAAAAEAAAARABEAEwAAAAEAAAASABAAEwABAAEAAAASABEAEwABAAEAAAATABEAEwABAAEAAAAUABEAEwABAAEAAAAVABEAEwABAAEAAAAWABEAEwABAAEAAAAXABEAEwABAAEAAAAYABEAEwABAAEAAAAZABEAEwABAAEAAAAaABEAEwABAAEAAAAbABEAEwABAAEAAAAcABEAEwABAAEAAAAdABEAEwABAAEAAAAeABEAEwABAAEAAAAfABEAEwABAAEAAAAgABEAEwABAAEAAAAhABEAEwABAAEAAAAiABEAEwABAAEAAAAjABEAEwABAAEAAAAkABEAEwABAAEAAAAlABEAEwABAAEAAAAmABEAEwABAAEAAAAnABEAEwABAAEAAAAoABEAEwABAAEAAAAoABAAEwABAAEAAAAgABAAEwABAAEAAAAfABAAEwABAAEAAAAeABAAEwABAAEAAAAdABAAEwABAAEAAAAcABAAEwABAAEAAAAbABAAEwABAAEAAAAaABAAEwABAAEAAAAZABAAEwABAAEAAAAYABAAEwABAAEAAAAXABAAEwABAAEAAAAWABAAEwABAAEAAAAVABAAEwABAAEAAAAUABAAEwABAAEAAAATABAAEwABAAEAAAAhABAAEwABAAEAAAAiABAAEwABAAEAAAAjABAAEwABAAEAAAAkABAAEwABAAEAAAAlABAAEwABAAEAAAAmABAAEwABAAEAAAAnABAAEwABAAEAAAAiAOr/EQAAAAAAAAAjAOn/EQAAAAEAAAAjAOj/EQAAAAEAAAAjAOr/EQABAAEAAAAkAOr/EQABAAEAAAAkAOn/EQABAAEAAAAkAOj/EQABAAEAAAAlAOj/EQABAAEAAAAlAOn/EQABAAEAAAAlAOr/EQABAAEAAAAmAOr/EQABAAEAAAAmAOn/EQABAAEAAAAmAOj/EQABAAEAAAAnAOj/EQABAAEAAAAoAOj/EQABAAEAAAApAOj/EQABAAEAAAAqAOj/EQABAAEAAAAqAOn/EQABAAEAAAAqAOr/EQABAAEAAAApAOr/EQABAAEAAAAoAOr/EQABAAEAAAAoAOn/EQABAAEAAAApAOn/EQABAAEAAAAnAOn/EQABAAEAAAAnAOr/EQABAAEAAAAqAOv/EQABAAEAAAAqAOz/EQABAAEAAAAqAO3/EQABAAEAAAAqAO7/EQABAAEAAAAqAO//EQABAAEAAAAqAPD/EQABAAEAAAAqAPH/EQABAAEAAAAqAPL/EQABAAEAAAAqAPP/EQABAAEAAAAqAPT/EQABAAEAAAAqAPX/EQABAAEAAAAqAPb/EQAAAAIAAAApAPb/EwACAAAAAAApAPX/EQABAAIAAAApAPT/EQABAAEAAAApAPP/EQABAAEAAAApAPL/EQABAAEAAAApAPH/EQABAAEAAAApAPD/EQABAAEAAAApAO//EQABAAEAAAApAO7/EQABAAEAAAApAO3/EQABAAEAAAApAOz/EQABAAEAAAApAOv/EQABAAEAAAAqAPf/EwACAAAAAAApAPf/EwABAAEAAAApAPj/EwABAAEAAAApAPn/EwABAAEAAAAqAPj/EwABAAEAAAAqAPn/EwABAAEAAAA=") +tile_set = ExtResource("2_6wj4q") + +[node name="LongRocks" type="Node2D" parent="."] + +[node name="ChampLongRock" parent="LongRocks" instance=ExtResource("3_bvcb0")] +position = Vector2(483, 322) +scale = Vector2(0.7, 0.7) +submerged = false + +[node name="ChampLongRock2" parent="LongRocks" instance=ExtResource("3_bvcb0")] +position = Vector2(616, 322) +scale = Vector2(0.7, 0.7) + +[node name="ChampLongRock3" parent="LongRocks" instance=ExtResource("3_bvcb0")] +position = Vector2(750, 322) +scale = Vector2(0.7, 0.7) + +[node name="ChampLongRock4" parent="LongRocks" instance=ExtResource("3_bvcb0")] +position = Vector2(886, 322) +scale = Vector2(0.7, 0.7) + +[node name="ChampLongRock5" parent="LongRocks" instance=ExtResource("3_bvcb0")] +position = Vector2(1031, 322) +scale = Vector2(0.7, 0.7) + +[node name="ChampLongRock6" parent="LongRocks" instance=ExtResource("3_bvcb0")] +position = Vector2(1436, -1.1920929e-07) +rotation = -1.5707964 +scale = Vector2(0.7, 0.7) +submerged = false + +[node name="ChampLongRock7" parent="LongRocks" instance=ExtResource("3_bvcb0")] +position = Vector2(1436, -154) +rotation = -1.5707964 +scale = Vector2(0.7, 0.7) + +[node name="ChampLongRock8" parent="LongRocks" instance=ExtResource("3_bvcb0")] +position = Vector2(1435.9999, -311) +rotation = -1.5707964 +scale = Vector2(0.7, 0.7) + +[node name="ChampLongRock9" parent="LongRocks" instance=ExtResource("3_bvcb0")] +position = Vector2(1436, -468) +rotation = -1.5707964 +scale = Vector2(0.7, 0.7) + +[node name="ChampLongRock10" parent="LongRocks" instance=ExtResource("3_bvcb0")] +position = Vector2(1436, -621) +rotation = -1.5707964 +scale = Vector2(0.7, 0.7) [node name="OnTheGround" type="Node2D" parent="."] y_sort_enabled = true [node name="Player" parent="OnTheGround" instance=ExtResource("2_ey61o")] -position = Vector2(383, 371) +z_index = 1 +position = Vector2(350, 350) sprite_frames = ExtResource("3_6wj4q") +[node name="Camera2D" type="Camera2D" parent="OnTheGround/Player"] +position = Vector2(-526, -360) +anchor_mode = 0 +position_smoothing_enabled = true + [node name="SequencePuzzle" type="Node2D" parent="OnTheGround"] y_sort_enabled = true position = Vector2(-1, 0) -script = ExtResource("4_bvcb0") +script = ExtResource("6_6wj4q") metadata/_custom_type_script = "uid://c68oh8dtr21ti" [node name="Objects" type="Node2D" parent="OnTheGround/SequencePuzzle"] y_sort_enabled = true position = Vector2(356, 453) -[node name="Blue" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] -modulate = Color(0, 0.4, 0.6, 1) -sprite_frames = ExtResource("6_cr8uo") -audio_stream = ExtResource("7_wr0r8") - -[node name="Pink" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] -modulate = Color(0.89, 0.2937, 0.804817, 1) -position = Vector2(80, -8) -sprite_frames = ExtResource("6_cr8uo") -audio_stream = ExtResource("8_jso58") - -[node name="Yellow" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] -modulate = Color(0.89, 0.804817, 0.2937, 1) -position = Vector2(160, -16) -sprite_frames = ExtResource("6_cr8uo") -audio_stream = ExtResource("9_qox45") - -[node name="Green" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] -modulate = Color(0.188235, 0.717647, 0, 1) -position = Vector2(240, -24) -sprite_frames = ExtResource("6_cr8uo") -audio_stream = ExtResource("10_ywee8") - -[node name="Purple" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] -modulate = Color(0.464066, 0.2937, 0.89, 1) -position = Vector2(320, -32) -sprite_frames = ExtResource("6_cr8uo") -audio_stream = ExtResource("11_kia5q") - -[node name="Red" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] -modulate = Color(0.89, 0.2937, 0.2937, 1) -position = Vector2(400, -40) -sprite_frames = ExtResource("6_cr8uo") -audio_stream = ExtResource("12_450gk") +[node name="Top" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(190, -194) + +[node name="Middle" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(190, -140) + +[node name="Bottom" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(191, -71) + +[node name="Top2" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(324, -193) + +[node name="Middle2" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(324, -139) + +[node name="Bottom2" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(325, -70) + +[node name="Top3" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(457, -192) + +[node name="Middle3" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(457, -138) + +[node name="Bottom3" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(458, -69) + +[node name="Top4" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(597, -192) + +[node name="Middle4" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(597, -138) + +[node name="Bottom4" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(598, -69) + +[node name="Top5" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(752, -187) + +[node name="Middle5" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(752, -133) + +[node name="Bottom5" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(753, -64) + +[node name="Top6" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1015, -530) + +[node name="Middle6" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1086, -530) + +[node name="Bottom6" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1152, -530) + +[node name="Top7" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1016, -682) + +[node name="Middle7" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1087, -682) + +[node name="Bottom7" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1153, -682) + +[node name="Top8" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1012, -839) + +[node name="Middle8" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1083, -839) + +[node name="Bottom8" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1149, -839) + +[node name="Top9" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1011, -996) + +[node name="Middle9" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1082, -996) + +[node name="Bottom9" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1148, -996) + +[node name="Top10" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1014, -1151) + +[node name="Middle10" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1085, -1151) + +[node name="Bottom10" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")] +position = Vector2(1151, -1151) [node name="Signs" type="Node2D" parent="OnTheGround/SequencePuzzle"] y_sort_enabled = true [node name="HintSign1" parent="OnTheGround/SequencePuzzle/Signs" instance=ExtResource("13_jn76l")] -position = Vector2(506, 210) +position = Vector2(414, 186) +script = ExtResource("13_27hsp") sprite_frames = ExtResource("14_wt3t3") [node name="HintSign2" parent="OnTheGround/SequencePuzzle/Signs" instance=ExtResource("13_jn76l")] -position = Vector2(593, 200) +position = Vector2(1314, 7) +script = ExtResource("13_27hsp") sprite_frames = ExtResource("15_daq40") [node name="Steps" type="Node2D" parent="OnTheGround/SequencePuzzle"] [node name="SequencePuzzleStep1" type="Node2D" parent="OnTheGround/SequencePuzzle/Steps" node_paths=PackedStringArray("sequence", "hint_sign")] script = ExtResource("16_sgian") -sequence = [NodePath("../../Objects/Yellow"), NodePath("../../Objects/Green"), NodePath("../../Objects/Blue")] +sequence = [NodePath("../../Objects/Top"), NodePath("../../Objects/Middle2"), NodePath("../../Objects/Bottom3"), NodePath("../../Objects/Top4"), NodePath("../../Objects/Middle5")] hint_sign = NodePath("../../Signs/HintSign1") [node name="SequencePuzzleStep2" type="Node2D" parent="OnTheGround/SequencePuzzle/Steps" node_paths=PackedStringArray("sequence", "hint_sign")] script = ExtResource("16_sgian") -sequence = [NodePath("../../Objects/Blue"), NodePath("../../Objects/Green"), NodePath("../../Objects/Yellow"), NodePath("../../Objects/Green")] +sequence = [NodePath("../../Objects/Middle6"), NodePath("../../Objects/Top7"), NodePath("../../Objects/Top8"), NodePath("../../Objects/Bottom9"), NodePath("../../Objects/Middle10")] hint_sign = NodePath("../../Signs/HintSign2") [node name="CollectibleItem" parent="OnTheGround" instance=ExtResource("17_hjeem")] -position = Vector2(861, 282) +position = Vector2(1807, -927) revealed = false next_scene = "uid://bbjh0yoqbchuo" item = SubResource("Resource_qrg6i") @@ -124,22 +233,31 @@ collected_dialogue = ExtResource("19_00tvj") dialogue_title = &"well_done" [node name="Sign" parent="OnTheGround" instance=ExtResource("20_3s2kx")] -position = Vector2(184, 434) +position = Vector2(149, 239) direction = 1 -text = "First melody: yellow, green, blue." +text = "Jump from rock to rock and make your way to the other shore!" [node name="ScreenOverlay" type="CanvasLayer" parent="."] [node name="HUD" parent="." instance=ExtResource("21_wpffp")] -[node name="Camera2D" type="Camera2D" parent="."] -anchor_mode = 0 -zoom = Vector2(1.333, 1.333) -position_smoothing_enabled = true - [node name="Cinematic" type="Node2D" parent="."] script = ExtResource("22_hebqh") dialogue = ExtResource("19_00tvj") metadata/_custom_type_script = "uid://x1mxt6bmei2o" +[connection signal="water_entered" from="LongRocks/ChampLongRock" to="OnTheGround/SequencePuzzle" method="_on_champ_long_rock_water_entered"] +[connection signal="water_entered" from="LongRocks/ChampLongRock2" to="OnTheGround/SequencePuzzle" method="_on_champ_long_rock_water_entered"] +[connection signal="water_entered" from="LongRocks/ChampLongRock3" to="OnTheGround/SequencePuzzle" method="_on_champ_long_rock_water_entered"] +[connection signal="water_entered" from="LongRocks/ChampLongRock4" to="OnTheGround/SequencePuzzle" method="_on_champ_long_rock_water_entered"] +[connection signal="water_entered" from="LongRocks/ChampLongRock5" to="OnTheGround/SequencePuzzle" method="_on_champ_long_rock_water_entered"] +[connection signal="water_entered" from="LongRocks/ChampLongRock6" to="OnTheGround/SequencePuzzle" method="_on_champ_long_rock_water_entered"] +[connection signal="water_entered" from="LongRocks/ChampLongRock7" to="OnTheGround/SequencePuzzle" method="_on_champ_long_rock_water_entered"] +[connection signal="water_entered" from="LongRocks/ChampLongRock8" to="OnTheGround/SequencePuzzle" method="_on_champ_long_rock_water_entered"] +[connection signal="water_entered" from="LongRocks/ChampLongRock9" to="OnTheGround/SequencePuzzle" method="_on_champ_long_rock_water_entered"] +[connection signal="water_entered" from="LongRocks/ChampLongRock10" to="OnTheGround/SequencePuzzle" method="_on_champ_long_rock_water_entered"] [connection signal="solved" from="OnTheGround/SequencePuzzle" to="OnTheGround/CollectibleItem" method="reveal"] +[connection signal="step_solved" from="OnTheGround/SequencePuzzle" to="OnTheGround/SequencePuzzle" method="_on_step_solved"] +[connection signal="hint_sequence_finished" from="OnTheGround/SequencePuzzle/Signs/HintSign1" to="OnTheGround/SequencePuzzle" method="_on_hint_sign_hint_sequence_finished"] +[connection signal="demonstrate_sequence" from="OnTheGround/SequencePuzzle/Signs/HintSign2" to="OnTheGround/SequencePuzzle" method="_on_hint_sign_2_demonstrate_sequence"] +[connection signal="hint_sequence_finished" from="OnTheGround/SequencePuzzle/Signs/HintSign2" to="OnTheGround/SequencePuzzle" method="_on_hint_sign_hint_sequence_finished"] diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_hint_sign.gd b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_hint_sign.gd new file mode 100644 index 000000000..1b7b87064 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_hint_sign.gd @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: The Threadbare Authors +# SPDX-License-Identifier: MPL-2.0 +@tool +extends SequencePuzzleHintSign + +signal hint_sequence_finished + +@onready var collision_shape: CollisionShape2D = $InteractArea/CollisionShape2D + +const COLLISION_OFFSET : int = 50 +const COLLISION_SCALE : Vector2 = Vector2(0.5, 0.5) + +func _ready() -> void: + # Ensure the second hint sign camera movement does not cut off a step + collision_shape.scale = COLLISION_SCALE + collision_shape.position.y = collision_shape.position.y - COLLISION_OFFSET + super._ready() + +## Function to emit a signal to champ specific sequence puzzle script so path can be reset +func demonstration_finished() -> void: + hint_sequence_finished.emit() + super.demonstration_finished() diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_hint_sign.gd.uid b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_hint_sign.gd.uid new file mode 100644 index 000000000..c5e692cd6 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_hint_sign.gd.uid @@ -0,0 +1 @@ +uid://covda4h0rtikf diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_object.gd b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_object.gd new file mode 100644 index 000000000..63d21d0e9 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_object.gd @@ -0,0 +1,26 @@ +# SPDX-FileCopyrightText: The Threadbare Authors +# SPDX-License-Identifier: MPL-2.0 +@tool +class_name ChampSequencePuzzleObject +extends SequencePuzzleObject + +@onready var collision: CollisionShape2D = $CollisionShape2D +@onready var rock: AnimatedSprite2D = %AnimatedSprite2D + +var _idle_animation := &"default" + +## Makes the rock passable, and displays a dry idle state. +func dry_off() -> void: + _idle_animation = &"dry" + collision.disabled = true + +# Overrides superclass to make idle animation dynamic +func _stop() -> void: + if animated_sprite.is_playing() and animated_sprite.animation == "struck": + await animated_sprite.animation_looped + animated_sprite.play(_idle_animation) + +## Submerges the rock and prevents further interactions with it. +func submerge() -> void: + rock.play(&"default") + interact_area.disabled = true diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_object.gd.uid b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_object.gd.uid new file mode 100644 index 000000000..7f6b6084a --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_object.gd.uid @@ -0,0 +1 @@ +uid://br3of3tj8lb8p diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_object.tscn b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_object.tscn new file mode 100644 index 000000000..205873e96 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_object.tscn @@ -0,0 +1,47 @@ +[gd_scene load_steps=7 format=3 uid="uid://rt2t10osn0e"] + +[ext_resource type="Script" uid="uid://br3of3tj8lb8p" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sequence_puzzle_object.gd" id="1_flhem"] +[ext_resource type="SpriteFrames" uid="uid://c2m3tplriqe2s" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_object.tres" id="2_as5uj"] +[ext_resource type="AudioStream" uid="uid://cg57q82pb243w" path="res://assets/third_party/nepalese_hand_bells/handBells-c4.ogg" id="3_2vrsm"] +[ext_resource type="Script" uid="uid://du8wfijr35r35" path="res://scenes/game_elements/props/interact_area/components/interact_area.gd" id="4_g5jna"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_flhem"] +size = Vector2(60, 50) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_kw7av"] +size = Vector2(45, 45) + +[node name="ChampSequencePuzzleObject" type="StaticBody2D" groups=["sequence_object"]] +script = ExtResource("1_flhem") +sprite_frames = ExtResource("2_as5uj") +audio_stream = ExtResource("3_2vrsm") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +unique_name_in_owner = true +scale = Vector2(0.7, 0.7) +sprite_frames = ExtResource("2_as5uj") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(3, 7) +rotation = 1.5708 +shape = SubResource("RectangleShape2D_flhem") + +[node name="InteractArea" type="Area2D" parent="."] +unique_name_in_owner = true +collision_layer = 32 +collision_mask = 0 +script = ExtResource("4_g5jna") +interact_label_position = Vector2(0, 30) +action = "Tap" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="InteractArea"] +position = Vector2(3, -11) +shape = SubResource("RectangleShape2D_kw7av") +debug_color = Color(0.600391, 0.54335, 0, 0.42) + +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."] +unique_name_in_owner = true +stream = ExtResource("3_2vrsm") +bus = &"SFX" + +[connection signal="interaction_started" from="InteractArea" to="." method="_on_interaction_started"] diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign.png b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign.png index af3508def..a0ac6f47e 100644 --- a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign.png +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:965e0b889866da6208997a3b9200a6dad6d4f6b5237acfe096fa44886e3f0d61 -size 2354 +oid sha256:dbe746a33469f271ab35e5f16e77b1492bf113576a84f29a66ac8a773502caad +size 2172 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign.tres b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign.tres index 156225cd4..5c24d5334 100644 --- a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign.tres +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign.tres @@ -46,6 +46,18 @@ animations = [{ }, { "duration": 1.0, "texture": SubResource("AtlasTexture_gye5d") +}, { +"duration": 3.0, +"texture": SubResource("AtlasTexture_kbib7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gye5d") +}, { +"duration": 3.0, +"texture": SubResource("AtlasTexture_p0tgm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gye5d") }], "loop": false, "name": &"hint", diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign_2.tres b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign_2.tres index af751a1d6..1c229fee4 100644 --- a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign_2.tres +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign_2.tres @@ -2,22 +2,22 @@ [ext_resource type="Texture2D" uid="uid://dykbuo5slauvg" path="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_sign.png" id="1_44rst"] -[sub_resource type="AtlasTexture" id="AtlasTexture_j7cdm"] +[sub_resource type="AtlasTexture" id="AtlasTexture_p0tgm"] atlas = ExtResource("1_44rst") -region = Rect2(384, 0, 128, 192) +region = Rect2(256, 0, 128, 192) [sub_resource type="AtlasTexture" id="AtlasTexture_gye5d"] atlas = ExtResource("1_44rst") region = Rect2(0, 0, 128, 192) -[sub_resource type="AtlasTexture" id="AtlasTexture_p0tgm"] -atlas = ExtResource("1_44rst") -region = Rect2(256, 0, 128, 192) - [sub_resource type="AtlasTexture" id="AtlasTexture_kbib7"] atlas = ExtResource("1_44rst") region = Rect2(128, 0, 128, 192) +[sub_resource type="AtlasTexture" id="AtlasTexture_j7cdm"] +atlas = ExtResource("1_44rst") +region = Rect2(384, 0, 128, 192) + [sub_resource type="AtlasTexture" id="AtlasTexture_6ksfh"] atlas = ExtResource("1_44rst") region = Rect2(512, 0, 128, 192) @@ -30,13 +30,13 @@ region = Rect2(640, 0, 128, 192) animations = [{ "frames": [{ "duration": 3.0, -"texture": SubResource("AtlasTexture_j7cdm") +"texture": SubResource("AtlasTexture_p0tgm") }, { "duration": 1.0, "texture": SubResource("AtlasTexture_gye5d") }, { "duration": 3.0, -"texture": SubResource("AtlasTexture_p0tgm") +"texture": SubResource("AtlasTexture_kbib7") }, { "duration": 1.0, "texture": SubResource("AtlasTexture_gye5d") @@ -48,6 +48,12 @@ animations = [{ "texture": SubResource("AtlasTexture_gye5d") }, { "duration": 3.0, +"texture": SubResource("AtlasTexture_j7cdm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gye5d") +}, { +"duration": 3.0, "texture": SubResource("AtlasTexture_p0tgm") }, { "duration": 1.0, diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_wet_rock.png b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_wet_rock.png new file mode 100644 index 000000000..d80b72eb4 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_wet_rock.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b7239fdaab3d76bd08dd62ea5684b67f6f8dc087179f661cf6d35948a0012aa +size 2501 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_wet_rock.png.import b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_wet_rock.png.import new file mode 100644 index 000000000..0cfb95a2c --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/champ_wet_rock.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bmqyby71cbp61" +path="res://.godot/imported/champ_wet_rock.png-933bd4af9d259c923e5345842abe622f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/quests/story_quests/champ/3_sequence_puzzle/champ_wet_rock.png" +dest_files=["res://.godot/imported/champ_wet_rock.png-933bd4af9d259c923e5345842abe622f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/rocks_sequence.png b/scenes/quests/story_quests/champ/3_sequence_puzzle/rocks_sequence.png new file mode 100644 index 000000000..705602b2e --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/rocks_sequence.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:953c575d39b699ae11d6f6296ca070f77191f60fb0eadc32be7052d54c1b377b +size 2841 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/rocks_sequence.png.import b/scenes/quests/story_quests/champ/3_sequence_puzzle/rocks_sequence.png.import new file mode 100644 index 000000000..abfba4556 --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/rocks_sequence.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c7vvs2rloydu6" +path="res://.godot/imported/rocks_sequence.png-13294c20c8029ad64c6cddf5ef031942.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/quests/story_quests/champ/3_sequence_puzzle/rocks_sequence.png" +dest_files=["res://.godot/imported/rocks_sequence.png-13294c20c8029ad64c6cddf5ef031942.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/water_rocks_sequence.png b/scenes/quests/story_quests/champ/3_sequence_puzzle/water_rocks_sequence.png new file mode 100644 index 000000000..a0b28463d --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/water_rocks_sequence.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75d76a96af4d280fdc01f965cc18dae21e1b105b86b6ed23f5f29eff3aa39167 +size 3870 diff --git a/scenes/quests/story_quests/champ/3_sequence_puzzle/water_rocks_sequence.png.import b/scenes/quests/story_quests/champ/3_sequence_puzzle/water_rocks_sequence.png.import new file mode 100644 index 000000000..346f76ebd --- /dev/null +++ b/scenes/quests/story_quests/champ/3_sequence_puzzle/water_rocks_sequence.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://68gwjmmdho8t" +path="res://.godot/imported/water_rocks_sequence.png-648f69ec435e5be42ff4b1b71803cf16.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/quests/story_quests/champ/3_sequence_puzzle/water_rocks_sequence.png" +dest_files=["res://.godot/imported/water_rocks_sequence.png-648f69ec435e5be42ff4b1b71803cf16.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1