From 37b96d0518d9efd6fb40af1876fe1aea30336816 Mon Sep 17 00:00:00 2001 From: Elrinth Date: Fri, 26 Dec 2025 05:46:19 +0100 Subject: [PATCH] perfected collision with pots n stuff --- src/default_bus_layout.tres | 2 +- src/main.tscn | 82 ++++++------ src/project.godot | 6 +- src/scripts/entities/player/player.gd | 23 +++- src/scripts/entities/world/pot.gd | 173 +++++++++++++++++++++----- src/scripts/entities/world/pot.tscn | 15 +++ 6 files changed, 224 insertions(+), 77 deletions(-) diff --git a/src/default_bus_layout.tres b/src/default_bus_layout.tres index f611cc5..0d82a6f 100644 --- a/src/default_bus_layout.tres +++ b/src/default_bus_layout.tres @@ -1,4 +1,4 @@ -[gd_resource type="AudioBusLayout" load_steps=2 format=3 uid="uid://bdtqippaaj7i7"] +[gd_resource type="AudioBusLayout" format=3 uid="uid://bdtqippaaj7i7"] [sub_resource type="AudioEffectReverb" id="AudioEffectReverb_j3pel"] resource_name = "Reverb" diff --git a/src/main.tscn b/src/main.tscn index a30a6ef..2d42cbe 100644 --- a/src/main.tscn +++ b/src/main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=14 format=4 uid="uid://c6s2i06bbd6u6"] +[gd_scene format=4 uid="uid://c6s2i06bbd6u6"] [ext_resource type="Script" uid="uid://cp6n5cfxbxm4c" path="res://main.gd" id="1_0xm2m"] [ext_resource type="PackedScene" uid="uid://bb3ku551810en" path="res://scripts/ui/main_menu.tscn" id="1_ig7tw"] @@ -612,85 +612,85 @@ sources/0 = SubResource("TileSetAtlasSource_h2yge") [sub_resource type="RectangleShape2D" id="RectangleShape2D_h2yge"] size = Vector2(22, 29) -[node name="Main" type="Node2D"] +[node name="Main" type="Node2D" unique_id=302515448] y_sort_enabled = true script = ExtResource("1_0xm2m") -[node name="TileMapLayerLower" type="TileMapLayer" parent="."] +[node name="TileMapLayerLower" type="TileMapLayer" parent="." unique_id=1754112931] modulate = Color(0.722656, 0.722656, 0.722656, 1) tile_map_data = PackedByteArray("AAAOAAYAAAAAAAIAAAAOAAcAAAAAAAMAAAAOAAgAAAALAAgAAAAPAAYAAAABAAIAAAAPAAcAAAABAAMAAAAPAAgAAAABAAQAAAAQAAYAAAANAAkAAAAQAAcAAAACAAMAAAAQAAgAAAACAAQAAAARAAYAAAAOAAkAAAARAAcAAAACAAMAAAARAAgAAAACAAQAAAASAAYAAAAOAAkAAAASAAcAAAACAAMAAAASAAgAAAACAAQAAAATAAYAAAAOAAkAAAATAAcAAAACAAMAAAATAAgAAAACAAQAAAAUAAYAAAAPAAkAAAAUAAcAAAACAAMAAAAUAAgAAAACAAQAAAAVAAYAAAADAAIAAAAVAAcAAAADAAIAAAAVAAgAAAADAAIAAAAWAAYAAAAEAAIAAAAWAAcAAAAEAAIAAAAWAAgAAAAEAAIAAAAOAAIAAAALAAcAAAAOAAMAAAAAAAEAAAAOAAQAAAAAAAIAAAAOAAUAAAAAAAIAAAAPAAIAAAABAAAAAAAPAAMAAAABAAEAAAAPAAQAAAABAAIAAAAPAAUAAAABAAIAAAAQAAQAAAANAAcAAAAQAAUAAAANAAgAAAARAAQAAAAOAAcAAAARAAUAAAAOAAgAAAASAAIAAAACAAAAAAASAAMAAAACAAEAAAASAAQAAAAOAAcAAAASAAUAAAAOAAgAAAATAAIAAAACAAAAAAATAAMAAAACAAEAAAATAAQAAAAOAAcAAAATAAUAAAAOAAgAAAAUAAIAAAACAAAAAAAUAAMAAAACAAEAAAAUAAQAAAAPAAcAAAAUAAUAAAAPAAgAAAAVAAIAAAADAAIAAAAVAAMAAAADAAIAAAAVAAQAAAADAAIAAAAVAAUAAAADAAIAAAAWAAIAAAAEAAIAAAAWAAMAAAAEAAIAAAAWAAQAAAAEAAIAAAAWAAUAAAAEAAIAAAAeAAUAAAABAAYAAAAeAAYAAAABAAcAAAAeAAcAAAABAAgAAAAeAAgAAAABAAkAAAAfAAUAAAACAAYAAAAfAAYAAAACAAcAAAAfAAcAAAACAAgAAAAfAAgAAAACAAkAAAAgAAIAAAADAAIAAAAgAAMAAAADAAIAAAAgAAQAAAADAAIAAAAgAAUAAAADAAYAAAAgAAYAAAADAAcAAAAgAAcAAAADAAgAAAAgAAgAAAADAAkAAAAgAAkAAAADAAIAAAAgAAoAAAADAAIAAAAgAAsAAAADAAIAAAAhAAIAAAABAAUAAAAhAAMAAAABAAUAAAAhAAQAAAABAAUAAAAhAAUAAAAEAAYAAAAhAAYAAAAEAAcAAAAhAAcAAAAEAAgAAAAhAAgAAAAEAAkAAAAhAAkAAAAEAAoAAAAhAAoAAAAEAAoAAAAhAAsAAAAEAAoAAAAiAAUAAAAAAAYAAAAiAAYAAAACAAEAAAAiAAcAAAACAAMAAAAiAAgAAAAFAAkAAAAjAAUAAAAAAAYAAAAjAAYAAAACAAEAAAAjAAcAAAACAAMAAAAjAAgAAAAFAAkAAAAkAAUAAAAAAAYAAAAkAAYAAAACAAEAAAAkAAcAAAACAAMAAAAkAAgAAAAFAAkAAAAQAAIAAAACAAsAAAAQAAMAAAACAAwAAAARAAIAAAADAAsAAAARAAMAAAADAAwAAAA=") tile_set = SubResource("TileSet_lquwl") -[node name="TileMapLayerGround" type="TileMapLayer" parent="."] +[node name="TileMapLayerGround" type="TileMapLayer" parent="." unique_id=2005984204] z_index = 1 -tile_map_data = PackedByteArray("AAD8//7/AAACAAEAAAD8////AAAJAAgAAAD8/wAAAAAJAAgAAAD8/wEAAAAJAAgAAAD8/wIAAAAJAAgAAAD8/wMAAAAOAAgAAAD8/wQAAAAOAAgAAAD8/wUAAAAOAAgAAAD8/wYAAAAOAAgAAAD8/wcAAAAJAAgAAAD9//7/AAACAAEAAAD+//7/AAACAAEAAAD///7/AAACAAEAAAAAAP7/AAACAAEAAAABAP7/AAACAAEAAAACAP7/AAACAAEAAAADAP7/AAACAAEAAAAEAP7/AAACAAEAAAAFAP7/AAACAAEAAAAGAP7/AAAHAAEAAAAHAP7/AAAJAAgAAAAIAP7/AAAJAAEAAAAJAP7/AAACAAEAAAAKAP7/AAACAAEAAAALAP7/AAACAAEAAAAMAP7/AAACAAEAAAANAP7/AAACAAEAAAAOAP7/AAACAAEAAAAOAP3/AAACAAAAAAAPAP3/AAACAAAAAAAPAP7/AAACAAEAAAAQAP7/AAACAAEAAAARAP7/AAACAAEAAAD9////AAAFAAoAAAD+////AAAGAAoAAAD/////AAAHAAoAAAAAAP//AAAJAAgAAAABAP//AAAJAAgAAAACAP//AAAJAAgAAAADAP//AAAJAAgAAAAEAP//AAAJAAgAAAAFAP//AAAJAAgAAAAGAP//AAAJAAgAAAAHAP//AAAJAAgAAAAIAP//AAAJAAgAAAAJAP//AAAJAAgAAAAKAP//AAAJAAgAAAALAP//AAAOAAgAAAAMAP//AAAFAAoAAAANAP//AAAGAAoAAAAOAP//AAAHAAoAAAAOAAAAAAAHAAsAAAAPAAAAAAAJAAgAAAAQAAEAAAAOAAgAAAANAAUAAAAJAAgAAAAMAAUAAAAJAAgAAAALAAUAAAAJAAgAAAAKAAUAAAAOAAgAAAAJAAUAAAAOAAgAAAAIAAQAAAAJAAgAAAAHAAQAAAAJAAgAAAAGAAMAAAAOAAgAAAAGAAIAAAAOAAgAAAAHAAIAAAAOAAgAAAAHAAEAAAAOAAgAAAAIAAEAAAAJAAgAAAAJAAEAAAAOAAgAAAAKAAEAAAAOAAgAAAALAAEAAAAOAAgAAAAMAAEAAAAFAAwAAAANAAEAAAAGAAwAAAANAAIAAAAOAAgAAAANAAMAAAAJAAgAAAANAAQAAAAJAAgAAAAMAAQAAAAJAAgAAAAIAAUAAAAOAAgAAAAGAAQAAAAOAAgAAAAMAAIAAAAJAAgAAAAJAAYAAAAJAAgAAAAIAAYAAAAOAAgAAAAHAAYAAAAOAAgAAAAGAAUAAAAOAAgAAAAFAAUAAAAJAAgAAAAEAAUAAAAOAAgAAAADAAUAAAAOAAgAAAACAAUAAAAOAAgAAAABAAQAAAAOAAgAAAAAAAQAAAAJAAgAAAD//wQAAAAOAAgAAAD//wMAAAAJAAgAAAD+/wMAAAAJAAgAAAD+/wIAAAAJAAgAAAD//wIAAAAJAAgAAAD//wEAAAAHAAwAAAAAAAEAAAAOAAgAAAAAAAAAAAAJAAgAAAABAAAAAAAOAAgAAAACAAAAAAAOAAgAAAAKAAAAAAAOAAgAAAALAAAAAAAJAAgAAAAMAAMAAAAOAAgAAAALAAQAAAAOAAgAAAAKAAYAAAAJAAgAAAAGAAYAAAAOAAgAAAAFAAYAAAAOAAgAAAAEAAYAAAAOAAgAAAADAAYAAAAJAAgAAAACAAQAAAAOAAgAAAADAAMAAAAOAAgAAAAEAAMAAAAJAAgAAAAEAAIAAAAOAAgAAAAFAAIAAAAOAAgAAAAGAAEAAAAOAAgAAAANAAYAAAAJAAgAAAAMAAYAAAAJAAgAAAALAAYAAAAOAAgAAAAJAAcAAAAJAAgAAAAIAAcAAAAJAAgAAAAHAAcAAAAJAAgAAAACAAMAAAAOAAgAAAAHAAUAAAAOAAgAAAAEAAQAAAAOAAgAAAADAAQAAAAOAAgAAAAFAAEAAAAJAAgAAAAHAAAAAAAJAAgAAAAIAAAAAAAJAAgAAAAJAAAAAAAJAAgAAAABAAUAAAAOAAgAAAAAAAUAAAAOAAgAAAAAAAMAAAAOAAgAAAABAAIAAAAOAAgAAAACAAIAAAAJAAgAAAADAAIAAAAJAAgAAAAIAAIAAAAOAAgAAAAJAAIAAAAJAAgAAAAJAAMAAAAJAAgAAAAGAAkAAAAOAAgAAAAGAAgAAAAOAAgAAAAFAAgAAAAOAAgAAAAEAAgAAAAOAAgAAAADAAcAAAAOAAgAAAACAAYAAAAOAAgAAAABAAYAAAAJAAgAAAD//wUAAAAOAAgAAAD+/wQAAAAJAAgAAAD9/wQAAAAJAAgAAAD9/wMAAAAJAAgAAAD//wAAAAAHAAsAAAAGAAAAAAAOAAgAAAAHAAMAAAAOAAgAAAAGAAcAAAAJAAgAAAAFAAcAAAAOAAgAAAAEAAcAAAAOAAgAAAACAAcAAAAOAAgAAAABAAcAAAAJAAgAAAAAAAcAAAAJAAgAAAD//wcAAAAJAAgAAAD+/wYAAAAOAAgAAAD9/wYAAAAJAAgAAAD7/wUAAAABAAIAAAD6/wUAAAAAAAIAAAD6/wQAAAAAAAIAAAD6/wMAAAAAAAIAAAD7/wMAAAABAAIAAAD9/wIAAAAJAAgAAAABAAEAAAAOAAgAAAACAAEAAAAOAAgAAAADAAEAAAAJAAgAAAAEAAEAAAAJAAgAAAAKAAMAAAAOAAgAAAALAAMAAAAOAAgAAAARAAkAAAAJAAgAAAARAAoAAAAJAAgAAAARAAsAAAACAAMAAAARAAwAAAACAAQAAAAQAAwAAAACAAQAAAAIAA0AAAAEAAoAAAAHAA0AAAADAAIAAAAGAA0AAAAOAAgAAAAFAAwAAAAOAAgAAAAEAAsAAAAJAAgAAAAEAAoAAAAJAAgAAAAEAAkAAAAJAAgAAAAOAAgAAAALAAgAAAANAAgAAAAHAAoAAAANAAkAAAAHAAsAAAAJAAsAAAACAAMAAAAIAAsAAAAEAAgAAAAHAAsAAAADAAgAAAAGAAsAAAAJAAgAAAAFAAsAAAAJAAgAAAADAAoAAAAJAAgAAAACAAkAAAAOAAgAAAABAAgAAAAJAAgAAAAAAAYAAAAJAAgAAAABAAMAAAAOAAgAAAD6//7/AAAAAAEAAAD6////AAAAAAIAAAD6/wAAAAAAAAIAAAD6/wEAAAAAAAIAAAD6/wIAAAAAAAIAAAD7//7/AAABAAEAAAD7////AAABAAIAAAD7/wAAAAABAAIAAAD7/wEAAAABAAIAAAD7/wIAAAABAAIAAAD6/wYAAAAAAAIAAAD7/wQAAAABAAIAAAD7/wYAAAABAAIAAAD6/wcAAAAAAAIAAAD6/wgAAAAAAAIAAAD6/wkAAAAAAAIAAAD7/wcAAAABAAIAAAD7/wgAAAABAAIAAAD7/wkAAAABAAIAAAD6/woAAAAAAAIAAAD6/wsAAAAAAAIAAAD6/wwAAAAAAAQAAAD7/woAAAABAAIAAAD7/wsAAAABAAMAAAD7/wwAAAABAAQAAAD9/wUAAAAJAAgAAAD8/wgAAAAJAAgAAAD8/wkAAAAOAAgAAAD9/wcAAAAJAAgAAAD9/wgAAAAFAAoAAAD9/wkAAAAFAAsAAAD8/wsAAAACAAMAAAD8/wwAAAACAAQAAAD9/wsAAAACAAMAAAD9/wwAAAACAAQAAAD+/wsAAAACAAMAAAD+/wwAAAACAAQAAAD//wsAAAACAAMAAAD//wwAAAACAAQAAAAAAAsAAAACAAMAAAAAAAwAAAACAAQAAAABAAsAAAACAAMAAAABAAwAAAAFAAkAAAACAAsAAAABAAgAAAACAAwAAAABAAkAAAADAAsAAAACAAgAAAADAAwAAAACAAkAAAAEAAwAAAAJAAgAAAAGAAwAAAAOAAgAAAAHAAwAAAADAAkAAAAIAAwAAAAEAAkAAAAJAAwAAAAAAAkAAAAKAAsAAAACAAMAAAAKAAwAAAACAAQAAAAMAAsAAAACAAMAAAAMAAwAAAACAAQAAAAKAAQAAAAOAAgAAAAJAAQAAAAOAAgAAAAIAAMAAAAJAAgAAAD//wYAAAAOAAgAAAAFAAMAAAAOAAgAAAAFAAQAAAAOAAgAAAAOAAEAAAAHAAwAAAAKAAIAAAAOAAgAAAAAAAIAAAAOAAgAAAADAAAAAAAOAAgAAAAEAAAAAAAOAAgAAAAFAAAAAAAOAAgAAAD+/wEAAAAGAAwAAAD+/wAAAAAGAAsAAAD9/wAAAAAFAAsAAAD9/wEAAAAFAAwAAAD7//3/AAABAAAAAAD8//3/AAACAAAAAAD6//3/AAAAAAAAAAD9//3/AAACAAAAAAD+//3/AAACAAAAAAD///3/AAACAAAAAAAAAP3/AAACAAAAAAABAP3/AAACAAAAAAACAP3/AAACAAAAAAADAP3/AAACAAAAAAAEAP3/AAACAAAAAAAFAP3/AAACAAAAAAAJAP3/AAACAAAAAAAKAP3/AAACAAAAAAALAP3/AAACAAAAAAAMAP3/AAACAAAAAAANAP3/AAACAAAAAAAQAP3/AAACAAAAAAD+/wUAAAAOAAgAAAALAAIAAAAOAAgAAAAMAAAAAAAFAAsAAAANAAAAAAAGAAsAAAAPAP//AAAOAAgAAAAQAP//AAAOAAgAAAARAP//AAAOAAgAAAARAAAAAAAJAAgAAAAQAAAAAAAOAAgAAAAPAAEAAAAOAAgAAAARAAEAAAAJAAgAAAD+/wcAAAAOAAgAAAD+/wgAAAAGAAoAAAD+/wkAAAAGAAsAAAD+/woAAAAGAAwAAAD9/woAAAAFAAwAAAD8/woAAAAOAAgAAAD//woAAAAHAAwAAAD//wkAAAAHAAsAAAD//wgAAAAHAAoAAAAAAAkAAAAOAAgAAAAAAAoAAAAOAAgAAAAAAAgAAAAOAAgAAAABAAkAAAAOAAgAAAABAAoAAAAOAAgAAAACAAoAAAAOAAgAAAACAAgAAAAOAAgAAAADAAgAAAAOAAgAAAADAAkAAAAOAAgAAAAFAAoAAAAOAAgAAAAFAAkAAAAOAAgAAAAGAAoAAAAOAAgAAAAHAAoAAAAOAAgAAAAHAAkAAAAJAAgAAAAHAAgAAAAOAAgAAAAIAAgAAAAOAAgAAAAIAAkAAAAOAAgAAAAJAAkAAAAOAAgAAAAJAAoAAAAOAAgAAAAIAAoAAAAOAAgAAAAJAAgAAAAOAAgAAAAKAAgAAAAJAAgAAAALAAgAAAAFAAoAAAAMAAgAAAAGAAoAAAAMAAcAAAAOAAgAAAALAAcAAAAOAAgAAAAKAAcAAAAJAAgAAAANAAcAAAAOAAgAAAANAAoAAAAHAAwAAAAOAAoAAAAOAAgAAAAPAAoAAAAOAAgAAAAQAAoAAAAOAAgAAAAQAAkAAAAOAAgAAAAPAAkAAAAOAAgAAAAOAAkAAAAOAAgAAAALAAsAAAACAAMAAAALAAwAAAACAAQAAAANAAsAAAACAAMAAAANAAwAAAACAAQAAAAOAAsAAAACAAMAAAAOAAwAAAACAAQAAAAPAAsAAAACAAMAAAAPAAwAAAACAAQAAAALAAoAAAAFAAwAAAAKAAoAAAAJAAgAAAAKAAkAAAAJAAgAAAALAAkAAAAFAAsAAAAMAAkAAAAGAAsAAAAMAAoAAAAGAAwAAAAGAPj/AAAHAAUAAAAHAPj/AAAOAAgAAAAIAPj/AAAJAAUAAAAFAPj/AAACAAMAAAAFAPn/AAACAAQAAAAEAPj/AAACAAMAAAAEAPn/AAACAAQAAAADAPj/AAACAAMAAAADAPn/AAACAAQAAAACAPj/AAACAAMAAAACAPn/AAACAAQAAAABAPj/AAACAAMAAAABAPn/AAACAAQAAAAAAPj/AAACAAMAAAAAAPn/AAACAAQAAAD///j/AAACAAMAAAD///n/AAACAAQAAAD+//j/AAACAAMAAAD+//n/AAACAAQAAAD9//j/AAACAAMAAAD9//n/AAACAAQAAAD8//j/AAACAAMAAAD8//n/AAACAAQAAAD7//j/AAACAAMAAAD7//n/AAACAAQAAAD6//j/AAACAAMAAAD6//n/AAACAAQAAAD5//j/AAACAAMAAAD5//n/AAACAAQAAAAJAPj/AAACAAMAAAAJAPn/AAACAAQAAAAKAPj/AAACAAMAAAAKAPn/AAACAAQAAAALAPj/AAACAAMAAAALAPn/AAACAAQAAAAMAPj/AAACAAMAAAAMAPn/AAACAAQAAAANAPj/AAACAAMAAAANAPn/AAACAAQAAAAOAPj/AAACAAMAAAAOAPn/AAACAAQAAAAPAPj/AAACAAMAAAAPAPn/AAACAAQAAAAQAPj/AAACAAMAAAAQAPn/AAACAAQAAAARAPj/AAACAAMAAAARAPn/AAACAAQAAAASAPj/AAACAAMAAAASAPn/AAACAAQAAAARAP3/AAACAAAAAAASAP3/AAACAAAAAAASAP7/AAACAAEAAAAHAPf/AAACAAAAAAAGAPf/AAACAAAAAAAFAPf/AAACAAAAAAAFAPb/AAAOAAgAAAAEAPb/AAAOAAgAAAADAPb/AAAOAAgAAAAEAPf/AAAOAAgAAAAIAPf/AAACAAAAAAAJAPf/AAACAAAAAAAKAPf/AAAOAAgAAAALAPf/AAAOAAgAAAAMAPf/AAAOAAgAAAAMAPb/AAAOAAgAAAANAPb/AAAOAAgAAAAOAPb/AAAOAAgAAAAPAPb/AAAOAAgAAAAQAPb/AAAOAAgAAAAPAPf/AAAOAAgAAAAOAPf/AAAOAAgAAAANAPf/AAAOAAgAAAAIAPb/AAAOAAgAAAAHAPb/AAAOAAgAAAAGAPb/AAAOAAgAAAAJAPb/AAAOAAgAAAAQAPf/AAAOAAgAAAARAPf/AAAOAAgAAAARAPb/AAAOAAgAAAALAPb/AAAOAAgAAAAKAPb/AAAOAAgAAAACAPb/AAAOAAgAAAABAPb/AAAOAAgAAAABAPf/AAAOAAgAAAAAAPf/AAAOAAgAAAACAPf/AAAOAAgAAAADAPf/AAAOAAgAAAAAAPb/AAAOAAgAAAD///b/AAAOAAgAAAD+//b/AAAOAAgAAAD9//b/AAAOAAgAAAD9//f/AAAOAAgAAAD8//f/AAAOAAgAAAD7//f/AAAOAAgAAAD+//f/AAAOAAgAAAD///f/AAAOAAgAAAD8//b/AAAOAAgAAAD7//b/AAAOAAgAAAD6//b/AAAOAAgAAAD6//f/AAAOAAgAAAD5//f/AAAOAAgAAAD5//b/AAAOAAgAAAAKAPX/AAAOAAgAAAALAPX/AAAOAAgAAAAMAPX/AAAOAAgAAAANAPX/AAAOAAgAAAAOAPX/AAAOAAgAAAAPAPX/AAAOAAgAAAASAPb/AAAOAAgAAAASAPf/AAAOAAgAAAASAPX/AAAOAAgAAAARAPX/AAAOAAgAAAAQAPX/AAAOAAgAAAAJAPX/AAAOAAgAAAAIAPX/AAAOAAgAAAAHAPX/AAAOAAgAAAAGAPX/AAAOAAgAAAAFAPX/AAAOAAgAAAAEAPX/AAAOAAgAAAADAPX/AAAOAAgAAAACAPX/AAAOAAgAAAABAPX/AAAOAAgAAAAAAPX/AAAOAAgAAAD///X/AAAOAAgAAAD+//X/AAAOAAgAAAD9//X/AAAOAAgAAAD8//X/AAAOAAgAAAD7//X/AAAOAAgAAAD6//X/AAAOAAgAAAD5//X/AAAOAAgAAAAGAP3/AAAHAAAAAAAHAP3/AAAIAAAAAAAIAP3/AAAJAAAAAAAGAPn/AAAHAAYAAAAHAPn/AAAIAAYAAAAIAPn/AAAJAAYAAAASAAEAAAAQAAcAAAATAAAAAAAJAAgAAAATAAEAAAAOAAgAAAAUAAEAAAAOAAgAAAAUAAAAAAAOAAgAAAATAP//AAAOAAgAAAASAP//AAAOAAgAAAASAAAAAAAOAAgAAAAUAP//AAAOAAgAAAATAP3/AAACAAAAAAATAP7/AAACAAEAAAAUAP3/AAACAAAAAAAUAP7/AAACAAEAAAAVAP3/AAADAAAAAAAVAP7/AAADAAEAAAAWAP3/AAAEAAAAAAAWAP7/AAAEAAEAAAAVAP//AAADAAIAAAAWAP//AAAEAAIAAAAVAAAAAAADAAIAAAAWAAAAAAAEAAIAAAAVAAEAAAADAAIAAAAWAAEAAAAEAAIAAAAWAAIAAAAEAAIAAAAWAAMAAAAEAAIAAAAVAAQAAAADAAIAAAAWAAQAAAAEAAIAAAAVAAUAAAADAAIAAAAWAAUAAAAEAAIAAAAVAAYAAAADAAIAAAAWAAYAAAAEAAIAAAAVAAcAAAADAAIAAAAWAAcAAAAEAAIAAAAVAAgAAAADAAIAAAAWAAgAAAAEAAIAAAAQAAsAAAACAAMAAAASAAsAAAACAAMAAAASAAwAAAACAAQAAAATAAsAAAACAAMAAAATAAwAAAACAAQAAAAUAAsAAAACAAMAAAAUAAwAAAACAAQAAAAVAAsAAAADAAMAAAAVAAwAAAADAAQAAAAWAAsAAAAEAAMAAAAWAAwAAAAEAAQAAAAVAAoAAAADAAIAAAAWAAoAAAAEAAIAAAAVAAkAAAADAAIAAAAWAAkAAAAEAAIAAAAeAAUAAAABAAYAAAAeAAYAAAABAAcAAAAeAAcAAAABAAgAAAAeAAgAAAABAAkAAAAfAAUAAAACAAYAAAAfAAYAAAACAAcAAAAfAAcAAAACAAgAAAAfAAgAAAACAAkAAAAgAAUAAAADAAYAAAAgAAYAAAADAAcAAAAgAAcAAAADAAgAAAAgAAgAAAADAAkAAAAhAAUAAAAEAAYAAAAhAAYAAAAEAAcAAAAhAAcAAAAEAAgAAAAhAAgAAAAEAAkAAAAiAAUAAAAAAAYAAAAjAAUAAAAAAAYAAAAkAAUAAAAAAAYAAAAhAAQAAAABAAUAAAAhAAMAAAABAAUAAAAhAAIAAAABAAUAAAAgAAQAAAADAAIAAAAgAAMAAAADAAIAAAAgAAIAAAADAAIAAAAiAAYAAAACAAEAAAAjAAYAAAACAAEAAAAkAAYAAAACAAEAAAAiAAcAAAACAAMAAAAjAAcAAAACAAMAAAAkAAcAAAACAAMAAAAgAAkAAAADAAIAAAAgAAoAAAADAAIAAAAgAAsAAAADAAIAAAAhAAkAAAAEAAoAAAAhAAoAAAAEAAoAAAAhAAsAAAAEAAoAAAAiAAgAAAAFAAkAAAAjAAgAAAAFAAkAAAAkAAgAAAAFAAkAAAAEAA0AAAAJAAgAAAAFAA0AAAAOAAgAAAAHAA4AAAADAAIAAAAIAA4AAAAEAAIAAAACAA0AAAABAAoAAAADAA0AAAABAAIAAAACAA4AAAAAAAIAAAADAA4AAAABAAIAAAACAA8AAAAAAAIAAAADAA8AAAABAAIAAAAHAA8AAAADAAIAAAAIAA8AAAAEAAIAAAAHABAAAAADAAIAAAAIABAAAAAEAAIAAAAEABEAAAAHAAUAAAAEABIAAAAHAAYAAAAFABEAAAAIAAUAAAAFABIAAAAIAAYAAAAGABEAAAAJAAUAAAAGABIAAAAJAAYAAAAHABEAAAADAAMAAAAHABIAAAADAAQAAAAIABEAAAAEAAMAAAAIABIAAAAEAAQAAAACABEAAAAAAAMAAAACABIAAAAAAAQAAAADABEAAAABAAMAAAADABIAAAABAAQAAAACABAAAAAAAAIAAAADABAAAAABAAIAAAAGABAAAAAOAAgAAAAGAA8AAAAOAAgAAAAGAA4AAAAOAAgAAAAFAA4AAAAOAAgAAAAFAA8AAAAOAAgAAAAFABAAAAAOAAgAAAAEABAAAAAOAAgAAAAEAA8AAAAOAAgAAAAEAA4AAAAOAAgAAAASAAkAAAAJAAgAAAATAAkAAAAJAAgAAAAUAAkAAAAJAAgAAAAUAAoAAAAJAAgAAAATAAoAAAAJAAgAAAASAAoAAAAJAAgAAAAOAAIAAAALAAcAAAAVAAIAAAADAAIAAAAVAAMAAAADAAIAAAD5/w0AAAACAAIAAAD5/w4AAAACAAIAAAD5/w8AAAACAAIAAAD5/xAAAAACAAIAAAD5/xEAAAACAAIAAAD5/xIAAAACAAIAAAD6/w0AAAACAAIAAAD6/w4AAAACAAIAAAD6/w8AAAACAAIAAAD6/xAAAAACAAIAAAD6/xEAAAACAAIAAAD6/xIAAAACAAIAAAD7/w0AAAACAAIAAAD7/w4AAAACAAIAAAD7/w8AAAACAAIAAAD7/xAAAAACAAIAAAD7/xEAAAACAAIAAAD7/xIAAAACAAIAAAD8/w0AAAACAAIAAAD8/w4AAAACAAIAAAD8/w8AAAACAAIAAAD8/xAAAAACAAIAAAD8/xEAAAACAAIAAAD8/xIAAAACAAIAAAD9/w0AAAACAAIAAAD9/w4AAAACAAIAAAD9/w8AAAACAAIAAAD9/xAAAAACAAIAAAD9/xEAAAACAAIAAAD9/xIAAAACAAIAAAD+/w0AAAACAAIAAAD+/w4AAAACAAIAAAD+/w8AAAACAAIAAAD+/xAAAAACAAIAAAD+/xEAAAACAAIAAAD+/xIAAAACAAIAAAD//w0AAAACAAIAAAD//w4AAAACAAIAAAD//w8AAAACAAIAAAD//xAAAAACAAIAAAD//xEAAAACAAIAAAD//xIAAAACAAIAAAAAAA0AAAACAAIAAAAAAA4AAAACAAIAAAAAAA8AAAACAAIAAAAAABAAAAACAAIAAAAAABEAAAACAAIAAAAAABIAAAACAAIAAAABAA0AAAACAAIAAAABAA4AAAACAAIAAAABAA8AAAACAAIAAAABABAAAAACAAIAAAABABEAAAACAAIAAAABABIAAAACAAIAAAD0/wMAAAACAAIAAAD0/wQAAAACAAIAAAD0/wUAAAACAAIAAAD0/wYAAAACAAIAAAD0/wcAAAACAAIAAAD0/wgAAAACAAIAAAD0/wkAAAACAAIAAAD0/woAAAACAAIAAAD0/wsAAAACAAIAAAD0/wwAAAACAAIAAAD0/w0AAAACAAIAAAD0/w4AAAACAAIAAAD0/w8AAAACAAIAAAD0/xAAAAACAAIAAAD0/xEAAAACAAIAAAD0/xIAAAACAAIAAAD1/wMAAAACAAIAAAD1/wQAAAACAAIAAAD1/wUAAAACAAIAAAD1/wYAAAACAAIAAAD1/wcAAAACAAIAAAD1/wgAAAACAAIAAAD1/wkAAAACAAIAAAD1/woAAAACAAIAAAD1/wsAAAACAAIAAAD1/wwAAAACAAIAAAD1/w0AAAACAAIAAAD1/w4AAAACAAIAAAD1/w8AAAACAAIAAAD1/xAAAAACAAIAAAD1/xEAAAACAAIAAAD1/xIAAAACAAIAAAD2/wMAAAACAAIAAAD2/wQAAAACAAIAAAD2/wUAAAACAAIAAAD2/wYAAAACAAIAAAD2/wcAAAACAAIAAAD2/wgAAAACAAIAAAD2/wkAAAACAAIAAAD2/woAAAACAAIAAAD2/wsAAAACAAIAAAD2/wwAAAACAAIAAAD2/w0AAAACAAIAAAD2/w4AAAACAAIAAAD2/w8AAAACAAIAAAD2/xAAAAACAAIAAAD2/xEAAAACAAIAAAD2/xIAAAACAAIAAAD3/wMAAAACAAIAAAD3/wQAAAACAAIAAAD3/wUAAAACAAIAAAD3/wYAAAACAAIAAAD3/wcAAAACAAIAAAD3/wgAAAACAAIAAAD3/wkAAAACAAIAAAD3/woAAAACAAIAAAD3/wsAAAACAAIAAAD3/wwAAAACAAIAAAD3/w0AAAACAAIAAAD3/w4AAAACAAIAAAD3/w8AAAACAAIAAAD3/xAAAAACAAIAAAD3/xEAAAACAAIAAAD3/xIAAAACAAIAAAD4/wMAAAACAAIAAAD4/wQAAAACAAIAAAD4/wUAAAACAAIAAAD4/wYAAAACAAIAAAD4/wcAAAACAAIAAAD4/wgAAAACAAIAAAD4/wkAAAACAAIAAAD4/woAAAACAAIAAAD4/wsAAAACAAIAAAD4/wwAAAACAAIAAAD4/w0AAAACAAIAAAD4/w4AAAACAAIAAAD4/w8AAAACAAIAAAD4/xAAAAACAAIAAAD4/xEAAAACAAIAAAD4/xIAAAACAAIAAAD5/wMAAAACAAIAAAD5/wQAAAACAAIAAAD5/wUAAAACAAIAAAD5/wYAAAACAAIAAAD5/wcAAAACAAIAAAD5/wgAAAACAAIAAAD5/wkAAAACAAIAAAD5/woAAAACAAIAAAD5/wsAAAACAAIAAAD5/wwAAAACAAIAAAD0//v/AAACAAIAAAD0//z/AAACAAIAAAD0//3/AAACAAIAAAD0//7/AAACAAIAAAD0////AAACAAIAAAD0/wAAAAACAAIAAAD0/wEAAAACAAIAAAD0/wIAAAACAAIAAAD1//v/AAACAAIAAAD1//z/AAACAAIAAAD1//3/AAACAAIAAAD1//7/AAACAAIAAAD1////AAACAAIAAAD1/wAAAAACAAIAAAD1/wEAAAACAAIAAAD1/wIAAAACAAIAAAD2//v/AAACAAIAAAD2//z/AAACAAIAAAD2//3/AAACAAIAAAD2//7/AAACAAIAAAD2////AAACAAIAAAD2/wAAAAACAAIAAAD2/wEAAAACAAIAAAD2/wIAAAACAAIAAAD3//v/AAACAAIAAAD3//z/AAACAAIAAAD3//3/AAACAAIAAAD3//7/AAACAAIAAAD3////AAACAAIAAAD3/wAAAAACAAIAAAD3/wEAAAACAAIAAAD3/wIAAAACAAIAAAD4//v/AAACAAIAAAD4//z/AAACAAIAAAD4//3/AAACAAIAAAD4//7/AAACAAIAAAD4////AAACAAIAAAD4/wAAAAACAAIAAAD4/wEAAAACAAIAAAD4/wIAAAACAAIAAAD5//v/AAACAAIAAAD5//z/AAACAAIAAAD5//3/AAACAAIAAAD5//7/AAACAAIAAAD5////AAACAAIAAAD5/wAAAAACAAIAAAD5/wEAAAACAAIAAAD5/wIAAAACAAIAAAD0//r/AAACAAIAAAD1//r/AAACAAIAAAD2//r/AAACAAIAAAD3//r/AAACAAIAAAD4//r/AAACAAIAAAD5//r/AAACAAIAAAD6//r/AAACAAIAAAD6//v/AAACAAIAAAD6//z/AAACAAIAAAD7//r/AAACAAIAAAD7//v/AAACAAIAAAD7//z/AAACAAIAAAD8//r/AAACAAIAAAD8//v/AAACAAIAAAD8//z/AAACAAIAAAD9//r/AAACAAIAAAD9//v/AAACAAIAAAD9//z/AAACAAIAAAD+//r/AAACAAIAAAD+//v/AAACAAIAAAD+//z/AAACAAIAAAD///r/AAACAAIAAAD///v/AAACAAIAAAD///z/AAACAAIAAAAAAPr/AAACAAIAAAAAAPv/AAACAAIAAAAAAPz/AAACAAIAAAABAPr/AAACAAIAAAABAPv/AAACAAIAAAABAPz/AAACAAIAAAACAPr/AAACAAIAAAACAPv/AAACAAIAAAACAPz/AAACAAIAAAADAPr/AAACAAIAAAADAPv/AAACAAIAAAADAPz/AAACAAIAAAAEAPr/AAACAAIAAAAEAPv/AAACAAIAAAAEAPz/AAACAAIAAAAFAPr/AAACAAAAAAAFAPv/AAACAAAAAAAFAPz/AAACAAAAAAAGAPr/AAACAAIAAAAGAPv/AAACAAIAAAAGAPz/AAACAAIAAAAHAPr/AAACAAIAAAAHAPv/AAACAAIAAAAHAPz/AAACAAIAAAAIAPr/AAACAAIAAAAIAPv/AAACAAIAAAAIAPz/AAACAAIAAAAJAPr/AAACAAAAAAAJAPv/AAACAAAAAAAJAPz/AAACAAAAAAAKAPr/AAACAAIAAAAKAPv/AAACAAIAAAAKAPz/AAACAAIAAAALAPr/AAACAAIAAAALAPv/AAACAAIAAAALAPz/AAACAAIAAAAMAPr/AAACAAIAAAAMAPv/AAACAAIAAAAMAPz/AAACAAIAAAANAPr/AAACAAIAAAANAPv/AAACAAIAAAANAPz/AAACAAIAAAAOAPr/AAACAAIAAAAOAPv/AAACAAIAAAAOAPz/AAACAAIAAAAPAPr/AAACAAIAAAAPAPv/AAACAAIAAAAPAPz/AAACAAIAAAAQAPr/AAACAAIAAAAQAPv/AAACAAIAAAAQAPz/AAACAAIAAAARAPr/AAACAAIAAAARAPv/AAACAAIAAAARAPz/AAACAAIAAAASAPr/AAACAAIAAAASAPv/AAACAAIAAAASAPz/AAACAAIAAAATAPr/AAACAAIAAAATAPv/AAACAAIAAAATAPz/AAACAAIAAAAUAPr/AAACAAIAAAAUAPv/AAACAAIAAAAUAPz/AAACAAIAAAAVAPr/AAACAAIAAAAVAPv/AAACAAIAAAAVAPz/AAACAAIAAAAWAPr/AAACAAIAAAAWAPv/AAACAAIAAAAWAPz/AAACAAIAAAATAPX/AAACAAIAAAATAPb/AAACAAIAAAATAPf/AAACAAIAAAATAPj/AAACAAIAAAATAPn/AAACAAIAAAAUAPX/AAACAAIAAAAUAPb/AAACAAIAAAAUAPf/AAACAAIAAAAUAPj/AAACAAIAAAAUAPn/AAACAAIAAAAVAPX/AAACAAIAAAAVAPb/AAACAAIAAAAVAPf/AAACAAIAAAAVAPj/AAACAAIAAAAVAPn/AAACAAIAAAAWAPX/AAACAAIAAAAWAPb/AAACAAIAAAAWAPf/AAACAAIAAAAWAPj/AAACAAIAAAAWAPn/AAACAAIAAAAXAPX/AAACAAIAAAAXAPb/AAACAAIAAAAXAPf/AAACAAIAAAAXAPj/AAACAAIAAAAXAPn/AAACAAIAAAAXAPr/AAACAAIAAAAXAPv/AAACAAIAAAAXAPz/AAACAAIAAAAXAP3/AAACAAIAAAAXAP7/AAACAAIAAAAXAP//AAACAAIAAAAXAAAAAAACAAIAAAAXAAEAAAACAAIAAAAXAAIAAAACAAIAAAAXAAMAAAACAAIAAAAXAAQAAAACAAIAAAAXAAUAAAACAAIAAAAXAAYAAAACAAIAAAAXAAcAAAACAAIAAAAXAAgAAAACAAIAAAAXAAkAAAACAAIAAAAXAAoAAAACAAIAAAAXAAsAAAACAAIAAAAXAAwAAAACAAIAAAAXAA0AAAACAAIAAAAXAA4AAAACAAIAAAAXAA8AAAACAAIAAAAXABAAAAACAAIAAAAXABEAAAACAAIAAAAXABIAAAACAAIAAAAYAPX/AAACAAIAAAAYAPb/AAACAAIAAAAYAPf/AAACAAIAAAAYAPj/AAACAAIAAAAYAPn/AAACAAIAAAAYAPr/AAACAAIAAAAYAPv/AAACAAIAAAAYAPz/AAACAAIAAAAYAP3/AAACAAIAAAAYAP7/AAACAAIAAAAYAP//AAACAAIAAAAYAAAAAAACAAIAAAAYAAEAAAACAAIAAAAYAAIAAAACAAIAAAAYAAMAAAACAAIAAAAYAAQAAAACAAIAAAAYAAUAAAACAAIAAAAYAAYAAAACAAIAAAAYAAcAAAACAAIAAAAYAAgAAAACAAIAAAAYAAkAAAACAAIAAAAYAAoAAAACAAIAAAAYAAsAAAACAAIAAAAYAAwAAAACAAIAAAAYAA0AAAACAAIAAAAYAA4AAAACAAIAAAAYAA8AAAACAAIAAAAYABAAAAACAAIAAAAYABEAAAACAAIAAAAYABIAAAACAAIAAAAZAPX/AAACAAIAAAAZAPb/AAACAAIAAAAZAPf/AAACAAIAAAAZAPj/AAACAAIAAAAZAPn/AAACAAIAAAAZAPr/AAACAAIAAAAZAPv/AAACAAIAAAAZAPz/AAACAAIAAAAZAP3/AAACAAIAAAAZAP7/AAACAAIAAAAZAP//AAACAAIAAAAZAAAAAAACAAIAAAAZAAEAAAACAAIAAAAZAAIAAAACAAIAAAAZAAMAAAACAAIAAAAZAAQAAAACAAIAAAAZAAUAAAACAAIAAAAZAAYAAAACAAIAAAAZAAcAAAACAAIAAAAZAAgAAAACAAIAAAAZAAkAAAACAAIAAAAZAAoAAAACAAIAAAAZAAsAAAACAAIAAAAZAAwAAAACAAIAAAAZAA0AAAACAAIAAAAZAA4AAAACAAIAAAAZAA8AAAACAAIAAAAZABAAAAACAAIAAAAZABEAAAACAAIAAAAZABIAAAACAAIAAAAaAPX/AAACAAIAAAAaAPb/AAACAAIAAAAaAPf/AAACAAIAAAAaAPj/AAACAAIAAAAaAPn/AAACAAIAAAAaAPr/AAACAAIAAAAaAPv/AAACAAIAAAAaAPz/AAACAAIAAAAaAP3/AAACAAIAAAAaAP7/AAACAAIAAAAaAP//AAACAAIAAAAaAAAAAAACAAIAAAAaAAEAAAACAAIAAAAaAAIAAAACAAIAAAAaAAMAAAACAAIAAAAaAAQAAAACAAIAAAAaAAUAAAACAAIAAAAaAAYAAAACAAIAAAAaAAcAAAACAAIAAAAaAAgAAAACAAIAAAAaAAkAAAACAAIAAAAaAAoAAAACAAIAAAAaAAsAAAACAAIAAAAaAAwAAAACAAIAAAAaAA0AAAACAAIAAAAaAA4AAAACAAIAAAAaAA8AAAACAAIAAAAaABAAAAACAAIAAAAaABEAAAACAAIAAAAaABIAAAACAAIAAAAbAPX/AAACAAIAAAAbAPb/AAACAAIAAAAbAPf/AAACAAIAAAAbAPj/AAACAAIAAAAbAPn/AAACAAIAAAAbAPr/AAACAAIAAAAbAPv/AAACAAIAAAAbAPz/AAACAAIAAAAbAP3/AAACAAIAAAAbAP7/AAACAAIAAAAbAP//AAACAAIAAAAbAAAAAAACAAIAAAAbAAEAAAACAAIAAAAbAAIAAAACAAIAAAAbAAMAAAACAAIAAAAbAAQAAAACAAIAAAAbAAUAAAACAAIAAAAbAAYAAAACAAIAAAAbAAcAAAACAAIAAAAbAAgAAAACAAIAAAAbAAkAAAACAAIAAAAbAAoAAAACAAIAAAAbAAsAAAACAAIAAAAbAAwAAAACAAIAAAAbAA0AAAACAAIAAAAbAA4AAAACAAIAAAAbAA8AAAACAAIAAAAbABAAAAACAAIAAAAbABEAAAACAAIAAAAbABIAAAACAAIAAAAJAA0AAAACAAIAAAAJAA4AAAACAAIAAAAJAA8AAAACAAIAAAAJABAAAAACAAIAAAAJABEAAAACAAIAAAAJABIAAAACAAIAAAAJABMAAAACAAIAAAAKAA0AAAACAAIAAAAKAA4AAAACAAIAAAAKAA8AAAACAAIAAAAKABAAAAACAAIAAAAKABEAAAACAAIAAAAKABIAAAACAAIAAAAKABMAAAACAAIAAAALAA0AAAACAAIAAAALAA4AAAACAAIAAAALAA8AAAACAAIAAAALABAAAAACAAIAAAALABEAAAACAAIAAAALABIAAAACAAIAAAALABMAAAACAAIAAAAMAA0AAAACAAIAAAAMAA4AAAACAAIAAAAMAA8AAAACAAIAAAAMABAAAAACAAIAAAAMABEAAAACAAIAAAAMABIAAAACAAIAAAAMABMAAAACAAIAAAANAA0AAAACAAIAAAANAA4AAAACAAIAAAANAA8AAAACAAIAAAANABAAAAACAAIAAAANABEAAAACAAIAAAANABIAAAACAAIAAAANABMAAAACAAIAAAAOAA0AAAACAAIAAAAOAA4AAAACAAIAAAAOAA8AAAACAAIAAAAOABAAAAACAAIAAAAOABEAAAACAAIAAAAOABIAAAACAAIAAAAOABMAAAACAAIAAAAPAA0AAAACAAIAAAAPAA4AAAACAAIAAAAPAA8AAAACAAIAAAAPABAAAAACAAIAAAAPABEAAAACAAIAAAAPABIAAAACAAIAAAAPABMAAAACAAIAAAAQAA0AAAACAAIAAAAQAA4AAAACAAIAAAAQAA8AAAACAAIAAAAQABAAAAACAAIAAAAQABEAAAACAAIAAAAQABIAAAACAAIAAAAQABMAAAACAAIAAAARAA0AAAACAAIAAAARAA4AAAACAAIAAAARAA8AAAACAAIAAAARABAAAAACAAIAAAARABEAAAACAAIAAAARABIAAAACAAIAAAARABMAAAACAAIAAAASAA0AAAACAAIAAAASAA4AAAACAAIAAAASAA8AAAACAAIAAAASABAAAAACAAIAAAASABEAAAACAAIAAAASABIAAAACAAIAAAASABMAAAACAAIAAAATAA0AAAACAAIAAAATAA4AAAACAAIAAAATAA8AAAACAAIAAAATABAAAAACAAIAAAATABEAAAACAAIAAAATABIAAAACAAIAAAATABMAAAACAAIAAAAUAA0AAAACAAIAAAAUAA4AAAACAAIAAAAUAA8AAAACAAIAAAAUABAAAAACAAIAAAAUABEAAAACAAIAAAAUABIAAAACAAIAAAAUABMAAAACAAIAAAAVAA0AAAACAAIAAAAVAA4AAAACAAIAAAAVAA8AAAACAAIAAAAVABAAAAACAAIAAAAVABEAAAACAAIAAAAVABIAAAACAAIAAAAVABMAAAACAAIAAAAWAA0AAAACAAIAAAAWAA4AAAACAAIAAAAWAA8AAAACAAIAAAAWABAAAAACAAIAAAAWABEAAAACAAIAAAAWABIAAAACAAIAAAAWABMAAAACAAIAAAAXABMAAAACAAIAAAAYABMAAAACAAIAAAD0/xMAAAACAAIAAAD0/xQAAAACAAIAAAD0/xUAAAACAAIAAAD0/xYAAAACAAIAAAD1/xMAAAACAAIAAAD1/xQAAAACAAIAAAD1/xUAAAACAAIAAAD1/xYAAAACAAIAAAD2/xMAAAACAAIAAAD2/xQAAAACAAIAAAD2/xUAAAACAAIAAAD2/xYAAAACAAIAAAD3/xMAAAACAAIAAAD3/xQAAAACAAIAAAD3/xUAAAACAAIAAAD3/xYAAAACAAIAAAD4/xMAAAACAAIAAAD4/xQAAAACAAIAAAD4/xUAAAACAAIAAAD4/xYAAAACAAIAAAD5/xMAAAACAAIAAAD5/xQAAAACAAIAAAD5/xUAAAACAAIAAAD5/xYAAAACAAIAAAD6/xMAAAACAAIAAAD6/xQAAAACAAIAAAD6/xUAAAACAAIAAAD6/xYAAAACAAIAAAD7/xMAAAACAAIAAAD7/xQAAAACAAIAAAD7/xUAAAACAAIAAAD7/xYAAAACAAIAAAD8/xMAAAACAAIAAAD8/xQAAAACAAIAAAD8/xUAAAACAAIAAAD8/xYAAAACAAIAAAD9/xMAAAACAAIAAAD9/xQAAAACAAIAAAD9/xUAAAACAAIAAAD9/xYAAAACAAIAAAD+/xMAAAACAAIAAAD+/xQAAAACAAIAAAD+/xUAAAACAAIAAAD+/xYAAAACAAIAAAD//xMAAAACAAIAAAD//xQAAAACAAIAAAD//xUAAAACAAIAAAD//xYAAAACAAIAAAAAABMAAAACAAIAAAAAABQAAAACAAIAAAAAABUAAAACAAIAAAAAABYAAAACAAIAAAABABMAAAACAAIAAAABABQAAAACAAIAAAABABUAAAACAAIAAAABABYAAAACAAIAAAACABMAAAACAAIAAAACABQAAAACAAIAAAACABUAAAACAAIAAAACABYAAAACAAIAAAADABMAAAACAAAAAAADABQAAAACAAIAAAADABUAAAACAAIAAAADABYAAAACAAIAAAAEABMAAAACAAAAAAAEABQAAAACAAIAAAAEABUAAAACAAIAAAAEABYAAAACAAIAAAAFABMAAAACAAAAAAAFABQAAAACAAIAAAAFABUAAAACAAIAAAAFABYAAAACAAIAAAAGABMAAAACAAAAAAAGABQAAAACAAIAAAAGABUAAAACAAIAAAAGABYAAAACAAIAAAAHABMAAAACAAAAAAAHABQAAAACAAIAAAAHABUAAAACAAIAAAAHABYAAAACAAIAAAAIABMAAAACAAIAAAAIABQAAAACAAIAAAAIABUAAAACAAIAAAAIABYAAAACAAIAAAAJABQAAAACAAIAAAAJABUAAAACAAIAAAAJABYAAAACAAIAAAAKABQAAAACAAIAAAAKABUAAAACAAIAAAAKABYAAAACAAIAAAALABQAAAACAAIAAAALABUAAAACAAIAAAALABYAAAACAAIAAAAMABQAAAACAAIAAAAMABUAAAACAAIAAAAMABYAAAACAAIAAAANABQAAAACAAIAAAANABUAAAACAAIAAAANABYAAAACAAIAAAAOABQAAAACAAIAAAAOABUAAAACAAIAAAAOABYAAAACAAIAAAAPABQAAAACAAIAAAAPABUAAAACAAIAAAAPABYAAAACAAIAAAAQABQAAAACAAIAAAAQABUAAAACAAIAAAAQABYAAAACAAIAAAARABQAAAACAAIAAAARABUAAAACAAIAAAARABYAAAACAAIAAAASABQAAAACAAIAAAASABUAAAACAAIAAAASABYAAAACAAIAAAATABQAAAACAAIAAAATABUAAAACAAIAAAATABYAAAACAAIAAAAUABQAAAACAAIAAAAUABUAAAACAAIAAAAUABYAAAACAAIAAAAVABQAAAACAAIAAAAVABUAAAACAAIAAAAVABYAAAACAAIAAAAWABQAAAACAAIAAAAWABUAAAACAAIAAAAWABYAAAACAAIAAAAXABQAAAACAAIAAAAXABUAAAACAAIAAAAXABYAAAACAAIAAAAYABQAAAACAAIAAAAYABUAAAACAAIAAAAYABYAAAACAAIAAAAZABMAAAACAAIAAAAZABQAAAACAAIAAAAZABUAAAACAAIAAAAZABYAAAACAAIAAAAaABMAAAACAAIAAAAaABQAAAACAAIAAAAaABUAAAACAAIAAAAaABYAAAACAAIAAAAbABMAAAACAAIAAAAbABQAAAACAAIAAAAbABUAAAACAAIAAAAbABYAAAACAAIAAAA=") +tile_map_data = PackedByteArray("AAD8//7/AAACAAEAAAD8////AAAMAAgAAAD8/wAAAAAJAAgAAAD8/wEAAAAJAAgAAAD8/wIAAAAJAAgAAAD8/wMAAAAOAAgAAAD8/wQAAAAOAAgAAAD8/wUAAAAOAAgAAAD8/wYAAAAOAAgAAAD8/wcAAAAJAAgAAAD9//7/AAACAAEAAAD+//7/AAACAAEAAAD///7/AAACAAEAAAAAAP7/AAACAAEAAAABAP7/AAACAAEAAAACAP7/AAACAAEAAAADAP7/AAACAAEAAAAEAP7/AAACAAEAAAAFAP7/AAACAAEAAAAGAP7/AAAHAAEAAAAHAP7/AAAJAAgAAAAIAP7/AAAJAAEAAAAJAP7/AAACAAEAAAAKAP7/AAACAAEAAAALAP7/AAACAAEAAAAMAP7/AAACAAEAAAANAP7/AAACAAEAAAAOAP7/AAACAAEAAAAOAP3/AAACAAAAAAAPAP3/AAACAAAAAAAPAP7/AAACAAEAAAAQAP7/AAACAAEAAAARAP7/AAACAAEAAAD9////AAAKAAwAAAD+////AAAGAAoAAAD/////AAAKAAwAAAAAAP//AAAJAAgAAAABAP//AAAJAAgAAAACAP//AAAJAAgAAAADAP//AAAJAAgAAAAEAP//AAAJAAgAAAAFAP//AAAJAAgAAAAGAP//AAAJAAgAAAAHAP//AAAJAAgAAAAIAP//AAAJAAgAAAAJAP//AAAJAAgAAAAKAP//AAAJAAgAAAALAP//AAAOAAgAAAAMAP//AAAKAAwAAAANAP//AAAGAAoAAAAOAP//AAAKAAwAAAAOAAAAAAAHAAsAAAAPAAAAAAAJAAgAAAAQAAEAAAAOAAgAAAANAAUAAAAJAAgAAAAMAAUAAAAJAAgAAAALAAUAAAAJAAgAAAAKAAUAAAAOAAgAAAAJAAUAAAAOAAgAAAAIAAQAAAAJAAgAAAAHAAQAAAAOAAgAAAAGAAMAAAAOAAgAAAAGAAIAAAAJAAgAAAAHAAIAAAAOAAgAAAAHAAEAAAAOAAgAAAAIAAEAAAAJAAgAAAAJAAEAAAAOAAgAAAAKAAEAAAAOAAgAAAALAAEAAAAOAAgAAAAMAAEAAAAKAAwAAAANAAEAAAAGAAwAAAANAAIAAAAOAAgAAAANAAMAAAAJAAgAAAANAAQAAAAJAAgAAAAMAAQAAAAJAAgAAAAIAAUAAAAOAAgAAAAGAAQAAAAOAAgAAAAMAAIAAAAJAAgAAAAJAAYAAAAJAAgAAAAIAAYAAAAOAAgAAAAHAAYAAAAOAAgAAAAGAAUAAAAOAAgAAAAFAAUAAAAOAAgAAAAEAAUAAAAOAAgAAAADAAUAAAAOAAgAAAACAAUAAAAOAAgAAAABAAQAAAAOAAgAAAAAAAQAAAAJAAgAAAD//wQAAAAOAAgAAAD//wMAAAAJAAgAAAD+/wMAAAAJAAgAAAD+/wIAAAAJAAgAAAD//wIAAAAJAAgAAAD//wEAAAAKAAwAAAAAAAEAAAAOAAgAAAAAAAAAAAAJAAgAAAABAAAAAAAOAAgAAAACAAAAAAAOAAgAAAAKAAAAAAAOAAgAAAALAAAAAAAJAAgAAAAMAAMAAAAOAAgAAAALAAQAAAAOAAgAAAAKAAYAAAAJAAgAAAAGAAYAAAAOAAgAAAAFAAYAAAAOAAgAAAAEAAYAAAAOAAgAAAADAAYAAAAJAAgAAAACAAQAAAAOAAgAAAAEAAMAAAAOAAgAAAAEAAIAAAAOAAgAAAAFAAIAAAAOAAgAAAAGAAEAAAAOAAgAAAANAAYAAAAJAAgAAAAMAAYAAAAJAAgAAAALAAYAAAAOAAgAAAAJAAcAAAAJAAgAAAAIAAcAAAAJAAgAAAAHAAcAAAAJAAgAAAACAAMAAAAOAAgAAAAHAAUAAAAOAAgAAAAEAAQAAAAOAAgAAAADAAQAAAAOAAgAAAAFAAEAAAAJAAgAAAAHAAAAAAAJAAgAAAAIAAAAAAAJAAgAAAAJAAAAAAAJAAgAAAABAAUAAAAOAAgAAAAAAAUAAAAOAAgAAAAAAAMAAAAOAAgAAAABAAIAAAAOAAgAAAACAAIAAAAJAAgAAAADAAIAAAAJAAgAAAAIAAIAAAAOAAgAAAAJAAIAAAAJAAgAAAAJAAMAAAAJAAgAAAAGAAkAAAAOAAgAAAAGAAgAAAAOAAgAAAAFAAgAAAAOAAgAAAAEAAgAAAAOAAgAAAADAAcAAAAOAAgAAAACAAYAAAAOAAgAAAABAAYAAAAJAAgAAAD//wUAAAAOAAgAAAD+/wQAAAAJAAgAAAD9/wQAAAAJAAgAAAD9/wMAAAAJAAgAAAD//wAAAAAHAAsAAAAGAAAAAAAOAAgAAAAHAAMAAAAOAAgAAAAGAAcAAAAJAAgAAAAFAAcAAAAOAAgAAAAEAAcAAAAOAAgAAAACAAcAAAAOAAgAAAABAAcAAAAJAAgAAAAAAAcAAAAJAAgAAAD//wcAAAAJAAgAAAD+/wYAAAAOAAgAAAD9/wYAAAAJAAgAAAD7/wUAAAABAAIAAAD6/wUAAAAAAAIAAAD6/wQAAAAAAAIAAAD6/wMAAAAAAAIAAAD7/wMAAAABAAIAAAD9/wIAAAAJAAgAAAABAAEAAAAOAAgAAAACAAEAAAAOAAgAAAADAAEAAAAJAAgAAAAEAAEAAAAJAAgAAAAKAAMAAAAOAAgAAAALAAMAAAAOAAgAAAARAAkAAAAJAAgAAAARAAoAAAAJAAgAAAARAAsAAAACAAMAAAARAAwAAAACAAQAAAAQAAwAAAACAAQAAAAIAA0AAAAEAAoAAAAHAA0AAAADAAIAAAAGAA0AAAAOAAgAAAAFAAwAAAAOAAgAAAAEAAsAAAAJAAgAAAAEAAoAAAAJAAgAAAAEAAkAAAAJAAgAAAAOAAgAAAALAAgAAAANAAgAAAAKAAwAAAANAAkAAAAHAAsAAAAJAAsAAAACAAMAAAAIAAsAAAAEAAgAAAAHAAsAAAADAAgAAAAGAAsAAAAJAAgAAAAFAAsAAAAJAAgAAAADAAoAAAAJAAgAAAACAAkAAAAOAAgAAAABAAgAAAAJAAgAAAAAAAYAAAAJAAgAAAABAAMAAAAOAAgAAAD6//7/AAAAAAEAAAD6////AAAAAAIAAAD6/wAAAAAAAAIAAAD6/wEAAAAAAAIAAAD6/wIAAAAAAAIAAAD7//7/AAABAAEAAAD7////AAABAAIAAAD7/wAAAAABAAIAAAD7/wEAAAABAAIAAAD7/wIAAAABAAIAAAD6/wYAAAAAAAIAAAD7/wQAAAABAAIAAAD7/wYAAAABAAIAAAD6/wcAAAAAAAIAAAD6/wgAAAAAAAIAAAD6/wkAAAAAAAIAAAD7/wcAAAABAAIAAAD7/wgAAAABAAIAAAD7/wkAAAABAAIAAAD6/woAAAAAAAIAAAD6/wsAAAAAAAIAAAD6/wwAAAAAAAQAAAD7/woAAAABAAIAAAD7/wsAAAABAAMAAAD7/wwAAAABAAQAAAD9/wUAAAAJAAgAAAD8/wgAAAAJAAgAAAD8/wkAAAAOAAgAAAD9/wcAAAAJAAgAAAD9/wgAAAAKAAwAAAD9/wkAAAAFAAsAAAD8/wsAAAACAAMAAAD8/wwAAAACAAQAAAD9/wsAAAACAAMAAAD9/wwAAAACAAQAAAD+/wsAAAACAAMAAAD+/wwAAAACAAQAAAD//wsAAAACAAMAAAD//wwAAAACAAQAAAAAAAsAAAACAAMAAAAAAAwAAAACAAQAAAABAAsAAAACAAMAAAABAAwAAAAFAAkAAAACAAsAAAABAAgAAAACAAwAAAABAAkAAAADAAsAAAACAAgAAAADAAwAAAACAAkAAAAEAAwAAAAJAAgAAAAGAAwAAAAOAAgAAAAHAAwAAAADAAkAAAAIAAwAAAAEAAkAAAAJAAwAAAAAAAkAAAAKAAsAAAACAAMAAAAKAAwAAAACAAQAAAAMAAsAAAACAAMAAAAMAAwAAAACAAQAAAAKAAQAAAAOAAgAAAAJAAQAAAAOAAgAAAAIAAMAAAAJAAgAAAD//wYAAAAOAAgAAAAFAAMAAAAOAAgAAAAFAAQAAAAOAAgAAAAOAAEAAAAKAAwAAAAKAAIAAAAOAAgAAAAAAAIAAAAOAAgAAAADAAAAAAAOAAgAAAAEAAAAAAAOAAgAAAAFAAAAAAAOAAgAAAD+/wEAAAAGAAwAAAD+/wAAAAAGAAsAAAD9/wAAAAAFAAsAAAD9/wEAAAAKAAwAAAD7//3/AAABAAAAAAD8//3/AAACAAAAAAD6//3/AAAAAAAAAAD9//3/AAACAAAAAAD+//3/AAACAAAAAAD///3/AAACAAAAAAAAAP3/AAACAAAAAAABAP3/AAACAAAAAAACAP3/AAACAAAAAAADAP3/AAACAAAAAAAEAP3/AAACAAAAAAAFAP3/AAACAAAAAAAJAP3/AAACAAAAAAAKAP3/AAACAAAAAAALAP3/AAACAAAAAAAMAP3/AAACAAAAAAANAP3/AAACAAAAAAAQAP3/AAACAAAAAAD+/wUAAAAOAAgAAAALAAIAAAAOAAgAAAAMAAAAAAAFAAsAAAANAAAAAAAGAAsAAAAPAP//AAAOAAgAAAAQAP//AAAOAAgAAAARAP//AAAOAAgAAAARAAAAAAAJAAgAAAAQAAAAAAAOAAgAAAAPAAEAAAAOAAgAAAARAAEAAAAJAAgAAAD+/wcAAAAOAAgAAAD+/wgAAAAGAAoAAAD+/wkAAAAGAAsAAAD+/woAAAAGAAwAAAD9/woAAAAKAAwAAAD8/woAAAAOAAgAAAD//woAAAAKAAwAAAD//wkAAAAHAAsAAAD//wgAAAAKAAwAAAAAAAkAAAAOAAgAAAAAAAoAAAAOAAgAAAAAAAgAAAAOAAgAAAABAAkAAAAOAAgAAAABAAoAAAAOAAgAAAACAAoAAAAOAAgAAAACAAgAAAAOAAgAAAADAAgAAAAOAAgAAAADAAkAAAAOAAgAAAAFAAoAAAAOAAgAAAAFAAkAAAAOAAgAAAAGAAoAAAAOAAgAAAAHAAoAAAAOAAgAAAAHAAkAAAAJAAgAAAAHAAgAAAAOAAgAAAAIAAgAAAAOAAgAAAAIAAkAAAAOAAgAAAAJAAkAAAAOAAgAAAAJAAoAAAAOAAgAAAAIAAoAAAAOAAgAAAAJAAgAAAAOAAgAAAAKAAgAAAAJAAgAAAALAAgAAAAKAAwAAAAMAAgAAAAGAAoAAAAMAAcAAAAOAAgAAAALAAcAAAAOAAgAAAAKAAcAAAAJAAgAAAANAAcAAAAOAAgAAAANAAoAAAAKAAwAAAAOAAoAAAAOAAgAAAAPAAoAAAAOAAgAAAAQAAoAAAAOAAgAAAAQAAkAAAAOAAgAAAAPAAkAAAAOAAgAAAAOAAkAAAAOAAgAAAALAAsAAAACAAMAAAALAAwAAAACAAQAAAANAAsAAAACAAMAAAANAAwAAAACAAQAAAAOAAsAAAACAAMAAAAOAAwAAAACAAQAAAAPAAsAAAACAAMAAAAPAAwAAAACAAQAAAALAAoAAAAKAAwAAAAKAAoAAAAJAAgAAAAKAAkAAAAJAAgAAAALAAkAAAAFAAsAAAAMAAkAAAAGAAsAAAAMAAoAAAAGAAwAAAAGAPj/AAAHAAUAAAAHAPj/AAAOAAgAAAAIAPj/AAAJAAUAAAAFAPj/AAACAAMAAAAFAPn/AAACAAQAAAAEAPj/AAACAAMAAAAEAPn/AAACAAQAAAADAPj/AAACAAMAAAADAPn/AAACAAQAAAACAPj/AAACAAMAAAACAPn/AAACAAQAAAABAPj/AAACAAMAAAABAPn/AAACAAQAAAAAAPj/AAACAAMAAAAAAPn/AAACAAQAAAD///j/AAACAAMAAAD///n/AAACAAQAAAD+//j/AAACAAMAAAD+//n/AAACAAQAAAD9//j/AAACAAMAAAD9//n/AAACAAQAAAD8//j/AAACAAMAAAD8//n/AAACAAQAAAD7//j/AAACAAMAAAD7//n/AAACAAQAAAD6//j/AAACAAMAAAD6//n/AAACAAQAAAD5//j/AAACAAMAAAD5//n/AAACAAQAAAAJAPj/AAACAAMAAAAJAPn/AAACAAQAAAAKAPj/AAACAAMAAAAKAPn/AAACAAQAAAALAPj/AAACAAMAAAALAPn/AAACAAQAAAAMAPj/AAACAAMAAAAMAPn/AAACAAQAAAANAPj/AAACAAMAAAANAPn/AAACAAQAAAAOAPj/AAACAAMAAAAOAPn/AAACAAQAAAAPAPj/AAACAAMAAAAPAPn/AAACAAQAAAAQAPj/AAACAAMAAAAQAPn/AAACAAQAAAARAPj/AAACAAMAAAARAPn/AAACAAQAAAASAPj/AAACAAMAAAASAPn/AAACAAQAAAARAP3/AAACAAAAAAASAP3/AAACAAAAAAASAP7/AAACAAEAAAAHAPf/AAACAAAAAAAGAPf/AAACAAAAAAAFAPf/AAACAAAAAAAFAPb/AAAOAAgAAAAEAPb/AAAOAAgAAAADAPb/AAAOAAgAAAAEAPf/AAAOAAgAAAAIAPf/AAACAAAAAAAJAPf/AAACAAAAAAAKAPf/AAAOAAgAAAALAPf/AAAOAAgAAAAMAPf/AAAOAAgAAAAMAPb/AAAOAAgAAAANAPb/AAAOAAgAAAAOAPb/AAAOAAgAAAAPAPb/AAAOAAgAAAAQAPb/AAAOAAgAAAAPAPf/AAAOAAgAAAAOAPf/AAAOAAgAAAANAPf/AAAOAAgAAAAIAPb/AAAOAAgAAAAHAPb/AAAOAAgAAAAGAPb/AAAOAAgAAAAJAPb/AAAOAAgAAAAQAPf/AAAOAAgAAAARAPf/AAAOAAgAAAARAPb/AAAOAAgAAAALAPb/AAAOAAgAAAAKAPb/AAAOAAgAAAACAPb/AAAOAAgAAAABAPb/AAAOAAgAAAABAPf/AAAOAAgAAAAAAPf/AAAOAAgAAAACAPf/AAAOAAgAAAADAPf/AAAOAAgAAAAAAPb/AAAOAAgAAAD///b/AAAOAAgAAAD+//b/AAAOAAgAAAD9//b/AAAOAAgAAAD9//f/AAAOAAgAAAD8//f/AAAOAAgAAAD7//f/AAAOAAgAAAD+//f/AAAOAAgAAAD///f/AAAOAAgAAAD8//b/AAAOAAgAAAD7//b/AAAOAAgAAAD6//b/AAAOAAgAAAD6//f/AAAOAAgAAAD5//f/AAAOAAgAAAD5//b/AAAOAAgAAAAKAPX/AAAOAAgAAAALAPX/AAAOAAgAAAAMAPX/AAAOAAgAAAANAPX/AAAOAAgAAAAOAPX/AAAOAAgAAAAPAPX/AAAOAAgAAAASAPb/AAAOAAgAAAASAPf/AAAOAAgAAAASAPX/AAAOAAgAAAARAPX/AAAOAAgAAAAQAPX/AAAOAAgAAAAJAPX/AAAOAAgAAAAIAPX/AAAOAAgAAAAHAPX/AAAOAAgAAAAGAPX/AAAOAAgAAAAFAPX/AAAOAAgAAAAEAPX/AAAOAAgAAAADAPX/AAAOAAgAAAACAPX/AAAOAAgAAAABAPX/AAAOAAgAAAAAAPX/AAAOAAgAAAD///X/AAAOAAgAAAD+//X/AAAOAAgAAAD9//X/AAAOAAgAAAD8//X/AAAOAAgAAAD7//X/AAAOAAgAAAD6//X/AAAOAAgAAAD5//X/AAAOAAgAAAAGAP3/AAAHAAAAAAAHAP3/AAAIAAAAAAAIAP3/AAAJAAAAAAAGAPn/AAAHAAYAAAAHAPn/AAAIAAYAAAAIAPn/AAAJAAYAAAASAAEAAAAQAAcAAAATAAAAAAAJAAgAAAATAAEAAAAOAAgAAAAUAAEAAAAOAAgAAAAUAAAAAAAOAAgAAAATAP//AAAOAAgAAAASAP//AAAOAAgAAAASAAAAAAAOAAgAAAAUAP//AAAOAAgAAAATAP3/AAACAAAAAAATAP7/AAACAAEAAAAUAP3/AAACAAAAAAAUAP7/AAACAAEAAAAVAP3/AAADAAAAAAAVAP7/AAADAAEAAAAWAP3/AAAEAAAAAAAWAP7/AAAEAAEAAAAVAP//AAADAAIAAAAWAP//AAAEAAIAAAAVAAAAAAADAAIAAAAWAAAAAAAEAAIAAAAVAAEAAAADAAIAAAAWAAEAAAAEAAIAAAAWAAIAAAAEAAIAAAAWAAMAAAAEAAIAAAAVAAQAAAADAAIAAAAWAAQAAAAEAAIAAAAVAAUAAAADAAIAAAAWAAUAAAAEAAIAAAAVAAYAAAADAAIAAAAWAAYAAAAEAAIAAAAVAAcAAAADAAIAAAAWAAcAAAAEAAIAAAAVAAgAAAADAAIAAAAWAAgAAAAEAAIAAAAQAAsAAAACAAMAAAASAAsAAAACAAMAAAASAAwAAAACAAQAAAATAAsAAAACAAMAAAATAAwAAAACAAQAAAAUAAsAAAACAAMAAAAUAAwAAAACAAQAAAAVAAsAAAADAAMAAAAVAAwAAAADAAQAAAAWAAsAAAAEAAMAAAAWAAwAAAAEAAQAAAAVAAoAAAADAAIAAAAWAAoAAAAEAAIAAAAVAAkAAAADAAIAAAAWAAkAAAAEAAIAAAAeAAUAAAABAAYAAAAeAAYAAAABAAcAAAAeAAcAAAABAAgAAAAeAAgAAAABAAkAAAAfAAUAAAACAAYAAAAfAAYAAAACAAcAAAAfAAcAAAACAAgAAAAfAAgAAAACAAkAAAAgAAUAAAADAAYAAAAgAAYAAAADAAcAAAAgAAcAAAADAAgAAAAgAAgAAAADAAkAAAAhAAUAAAAEAAYAAAAhAAYAAAAEAAcAAAAhAAcAAAAEAAgAAAAhAAgAAAAEAAkAAAAiAAUAAAAAAAYAAAAjAAUAAAAAAAYAAAAkAAUAAAAAAAYAAAAhAAQAAAABAAUAAAAhAAMAAAABAAUAAAAhAAIAAAABAAUAAAAgAAQAAAADAAIAAAAgAAMAAAADAAIAAAAgAAIAAAADAAIAAAAiAAYAAAACAAEAAAAjAAYAAAACAAEAAAAkAAYAAAACAAEAAAAiAAcAAAACAAMAAAAjAAcAAAACAAMAAAAkAAcAAAACAAMAAAAgAAkAAAADAAIAAAAgAAoAAAADAAIAAAAgAAsAAAADAAIAAAAhAAkAAAAEAAoAAAAhAAoAAAAEAAoAAAAhAAsAAAAEAAoAAAAiAAgAAAAFAAkAAAAjAAgAAAAFAAkAAAAkAAgAAAAFAAkAAAAEAA0AAAAJAAgAAAAFAA0AAAAOAAgAAAAHAA4AAAADAAIAAAAIAA4AAAAEAAIAAAACAA0AAAABAAoAAAADAA0AAAABAAIAAAACAA4AAAAAAAIAAAADAA4AAAABAAIAAAACAA8AAAAAAAIAAAADAA8AAAABAAIAAAAHAA8AAAADAAIAAAAIAA8AAAAEAAIAAAAHABAAAAADAAIAAAAIABAAAAAEAAIAAAAEABEAAAAHAAUAAAAEABIAAAAHAAYAAAAFABEAAAAIAAUAAAAFABIAAAAIAAYAAAAGABEAAAAJAAUAAAAGABIAAAAJAAYAAAAHABEAAAADAAMAAAAHABIAAAADAAQAAAAIABEAAAAEAAMAAAAIABIAAAAEAAQAAAACABEAAAAAAAMAAAACABIAAAAAAAQAAAADABEAAAABAAMAAAADABIAAAABAAQAAAACABAAAAAAAAIAAAADABAAAAABAAIAAAAGABAAAAAOAAgAAAAGAA8AAAAOAAgAAAAGAA4AAAAOAAgAAAAFAA4AAAAOAAgAAAAFAA8AAAAOAAgAAAAFABAAAAAOAAgAAAAEABAAAAAOAAgAAAAEAA8AAAAOAAgAAAAEAA4AAAAOAAgAAAASAAkAAAAJAAgAAAATAAkAAAAJAAgAAAAUAAkAAAAJAAgAAAAUAAoAAAAJAAgAAAATAAoAAAAJAAgAAAASAAoAAAAJAAgAAAAOAAIAAAALAAcAAAAVAAIAAAADAAIAAAAVAAMAAAADAAIAAAD5/w0AAAACAAIAAAD5/w4AAAACAAIAAAD5/w8AAAACAAIAAAD5/xAAAAACAAIAAAD5/xEAAAACAAIAAAD5/xIAAAACAAIAAAD6/w0AAAACAAIAAAD6/w4AAAACAAIAAAD6/w8AAAACAAIAAAD6/xAAAAACAAIAAAD6/xEAAAACAAIAAAD6/xIAAAACAAIAAAD7/w0AAAACAAIAAAD7/w4AAAACAAIAAAD7/w8AAAACAAIAAAD7/xAAAAACAAIAAAD7/xEAAAACAAIAAAD7/xIAAAACAAIAAAD8/w0AAAACAAIAAAD8/w4AAAACAAIAAAD8/w8AAAACAAIAAAD8/xAAAAACAAIAAAD8/xEAAAACAAIAAAD8/xIAAAACAAIAAAD9/w0AAAACAAIAAAD9/w4AAAACAAIAAAD9/w8AAAACAAIAAAD9/xAAAAACAAIAAAD9/xEAAAACAAIAAAD9/xIAAAACAAIAAAD+/w0AAAACAAIAAAD+/w4AAAACAAIAAAD+/w8AAAACAAIAAAD+/xAAAAACAAIAAAD+/xEAAAACAAIAAAD+/xIAAAACAAIAAAD//w0AAAACAAIAAAD//w4AAAACAAIAAAD//w8AAAACAAIAAAD//xAAAAACAAIAAAD//xEAAAACAAIAAAD//xIAAAACAAIAAAAAAA0AAAACAAIAAAAAAA4AAAACAAIAAAAAAA8AAAACAAIAAAAAABAAAAACAAIAAAAAABEAAAACAAIAAAAAABIAAAACAAIAAAABAA0AAAACAAIAAAABAA4AAAACAAIAAAABAA8AAAACAAIAAAABABAAAAACAAIAAAABABEAAAACAAIAAAABABIAAAACAAIAAAD0/wMAAAACAAIAAAD0/wQAAAACAAIAAAD0/wUAAAACAAIAAAD0/wYAAAACAAIAAAD0/wcAAAACAAIAAAD0/wgAAAACAAIAAAD0/wkAAAACAAIAAAD0/woAAAACAAIAAAD0/wsAAAACAAIAAAD0/wwAAAACAAIAAAD0/w0AAAACAAIAAAD0/w4AAAACAAIAAAD0/w8AAAACAAIAAAD0/xAAAAACAAIAAAD0/xEAAAACAAIAAAD0/xIAAAACAAIAAAD1/wMAAAACAAIAAAD1/wQAAAACAAIAAAD1/wUAAAACAAIAAAD1/wYAAAACAAIAAAD1/wcAAAACAAIAAAD1/wgAAAACAAIAAAD1/wkAAAACAAIAAAD1/woAAAACAAIAAAD1/wsAAAACAAIAAAD1/wwAAAACAAIAAAD1/w0AAAACAAIAAAD1/w4AAAACAAIAAAD1/w8AAAACAAIAAAD1/xAAAAACAAIAAAD1/xEAAAACAAIAAAD1/xIAAAACAAIAAAD2/wMAAAACAAIAAAD2/wQAAAACAAIAAAD2/wUAAAACAAIAAAD2/wYAAAACAAIAAAD2/wcAAAACAAIAAAD2/wgAAAACAAIAAAD2/wkAAAACAAIAAAD2/woAAAACAAIAAAD2/wsAAAACAAIAAAD2/wwAAAACAAIAAAD2/w0AAAACAAIAAAD2/w4AAAACAAIAAAD2/w8AAAACAAIAAAD2/xAAAAACAAIAAAD2/xEAAAACAAIAAAD2/xIAAAACAAIAAAD3/wMAAAACAAIAAAD3/wQAAAACAAIAAAD3/wUAAAACAAIAAAD3/wYAAAACAAIAAAD3/wcAAAACAAIAAAD3/wgAAAACAAIAAAD3/wkAAAACAAIAAAD3/woAAAACAAIAAAD3/wsAAAACAAIAAAD3/wwAAAACAAIAAAD3/w0AAAACAAIAAAD3/w4AAAACAAIAAAD3/w8AAAACAAIAAAD3/xAAAAACAAIAAAD3/xEAAAACAAIAAAD3/xIAAAACAAIAAAD4/wMAAAACAAIAAAD4/wQAAAACAAIAAAD4/wUAAAACAAIAAAD4/wYAAAACAAIAAAD4/wcAAAACAAIAAAD4/wgAAAACAAIAAAD4/wkAAAACAAIAAAD4/woAAAACAAIAAAD4/wsAAAACAAIAAAD4/wwAAAACAAIAAAD4/w0AAAACAAIAAAD4/w4AAAACAAIAAAD4/w8AAAACAAIAAAD4/xAAAAACAAIAAAD4/xEAAAACAAIAAAD4/xIAAAACAAIAAAD5/wMAAAACAAIAAAD5/wQAAAACAAIAAAD5/wUAAAACAAIAAAD5/wYAAAACAAIAAAD5/wcAAAACAAIAAAD5/wgAAAACAAIAAAD5/wkAAAACAAIAAAD5/woAAAACAAIAAAD5/wsAAAACAAIAAAD5/wwAAAACAAIAAAD0//v/AAACAAIAAAD0//z/AAACAAIAAAD0//3/AAACAAIAAAD0//7/AAACAAIAAAD0////AAACAAIAAAD0/wAAAAACAAIAAAD0/wEAAAACAAIAAAD0/wIAAAACAAIAAAD1//v/AAACAAIAAAD1//z/AAACAAIAAAD1//3/AAACAAIAAAD1//7/AAACAAIAAAD1////AAACAAIAAAD1/wAAAAACAAIAAAD1/wEAAAACAAIAAAD1/wIAAAACAAIAAAD2//v/AAACAAIAAAD2//z/AAACAAIAAAD2//3/AAACAAIAAAD2//7/AAACAAIAAAD2////AAACAAIAAAD2/wAAAAACAAIAAAD2/wEAAAACAAIAAAD2/wIAAAACAAIAAAD3//v/AAACAAIAAAD3//z/AAACAAIAAAD3//3/AAACAAIAAAD3//7/AAACAAIAAAD3////AAACAAIAAAD3/wAAAAACAAIAAAD3/wEAAAACAAIAAAD3/wIAAAACAAIAAAD4//v/AAACAAIAAAD4//z/AAACAAIAAAD4//3/AAACAAIAAAD4//7/AAACAAIAAAD4////AAACAAIAAAD4/wAAAAACAAIAAAD4/wEAAAACAAIAAAD4/wIAAAACAAIAAAD5//v/AAACAAIAAAD5//z/AAACAAIAAAD5//3/AAACAAIAAAD5//7/AAACAAIAAAD5////AAACAAIAAAD5/wAAAAACAAIAAAD5/wEAAAACAAIAAAD5/wIAAAACAAIAAAD0//r/AAACAAIAAAD1//r/AAACAAIAAAD2//r/AAACAAIAAAD3//r/AAACAAIAAAD4//r/AAACAAIAAAD5//r/AAACAAIAAAD6//r/AAACAAIAAAD6//v/AAACAAIAAAD6//z/AAACAAIAAAD7//r/AAACAAIAAAD7//v/AAACAAIAAAD7//z/AAACAAIAAAD8//r/AAACAAIAAAD8//v/AAACAAIAAAD8//z/AAACAAIAAAD9//r/AAACAAIAAAD9//v/AAACAAIAAAD9//z/AAACAAIAAAD+//r/AAACAAIAAAD+//v/AAACAAIAAAD+//z/AAACAAIAAAD///r/AAACAAIAAAD///v/AAACAAIAAAD///z/AAACAAIAAAAAAPr/AAACAAIAAAAAAPv/AAACAAIAAAAAAPz/AAACAAIAAAABAPr/AAACAAIAAAABAPv/AAACAAIAAAABAPz/AAACAAIAAAACAPr/AAACAAIAAAACAPv/AAACAAIAAAACAPz/AAACAAIAAAADAPr/AAACAAIAAAADAPv/AAACAAIAAAADAPz/AAACAAIAAAAEAPr/AAACAAIAAAAEAPv/AAACAAIAAAAEAPz/AAACAAIAAAAFAPr/AAACAAAAAAAFAPv/AAACAAAAAAAFAPz/AAACAAAAAAAGAPr/AAACAAIAAAAGAPv/AAACAAIAAAAGAPz/AAACAAIAAAAHAPr/AAACAAIAAAAHAPv/AAACAAIAAAAHAPz/AAACAAIAAAAIAPr/AAACAAIAAAAIAPv/AAACAAIAAAAIAPz/AAACAAIAAAAJAPr/AAACAAAAAAAJAPv/AAACAAAAAAAJAPz/AAACAAAAAAAKAPr/AAACAAIAAAAKAPv/AAACAAIAAAAKAPz/AAACAAIAAAALAPr/AAACAAIAAAALAPv/AAACAAIAAAALAPz/AAACAAIAAAAMAPr/AAACAAIAAAAMAPv/AAACAAIAAAAMAPz/AAACAAIAAAANAPr/AAACAAIAAAANAPv/AAACAAIAAAANAPz/AAACAAIAAAAOAPr/AAACAAIAAAAOAPv/AAACAAIAAAAOAPz/AAACAAIAAAAPAPr/AAACAAIAAAAPAPv/AAACAAIAAAAPAPz/AAACAAIAAAAQAPr/AAACAAIAAAAQAPv/AAACAAIAAAAQAPz/AAACAAIAAAARAPr/AAACAAIAAAARAPv/AAACAAIAAAARAPz/AAACAAIAAAASAPr/AAACAAIAAAASAPv/AAACAAIAAAASAPz/AAACAAIAAAATAPr/AAACAAIAAAATAPv/AAACAAIAAAATAPz/AAACAAIAAAAUAPr/AAACAAIAAAAUAPv/AAACAAIAAAAUAPz/AAACAAIAAAAVAPr/AAACAAIAAAAVAPv/AAACAAIAAAAVAPz/AAACAAIAAAAWAPr/AAACAAIAAAAWAPv/AAACAAIAAAAWAPz/AAACAAIAAAATAPX/AAACAAIAAAATAPb/AAACAAIAAAATAPf/AAACAAIAAAATAPj/AAACAAIAAAATAPn/AAACAAIAAAAUAPX/AAACAAIAAAAUAPb/AAACAAIAAAAUAPf/AAACAAIAAAAUAPj/AAACAAIAAAAUAPn/AAACAAIAAAAVAPX/AAACAAIAAAAVAPb/AAACAAIAAAAVAPf/AAACAAIAAAAVAPj/AAACAAIAAAAVAPn/AAACAAIAAAAWAPX/AAACAAIAAAAWAPb/AAACAAIAAAAWAPf/AAACAAIAAAAWAPj/AAACAAIAAAAWAPn/AAACAAIAAAAXAPX/AAACAAIAAAAXAPb/AAACAAIAAAAXAPf/AAACAAIAAAAXAPj/AAACAAIAAAAXAPn/AAACAAIAAAAXAPr/AAACAAIAAAAXAPv/AAACAAIAAAAXAPz/AAACAAIAAAAXAP3/AAACAAIAAAAXAP7/AAACAAIAAAAXAP//AAACAAIAAAAXAAAAAAACAAIAAAAXAAEAAAACAAIAAAAXAAIAAAACAAIAAAAXAAMAAAACAAIAAAAXAAQAAAACAAIAAAAXAAUAAAACAAIAAAAXAAYAAAACAAIAAAAXAAcAAAACAAIAAAAXAAgAAAACAAIAAAAXAAkAAAACAAIAAAAXAAoAAAACAAIAAAAXAAsAAAACAAIAAAAXAAwAAAACAAIAAAAXAA0AAAACAAIAAAAXAA4AAAACAAIAAAAXAA8AAAACAAIAAAAXABAAAAACAAIAAAAXABEAAAACAAIAAAAXABIAAAACAAIAAAAYAPX/AAACAAIAAAAYAPb/AAACAAIAAAAYAPf/AAACAAIAAAAYAPj/AAACAAIAAAAYAPn/AAACAAIAAAAYAPr/AAACAAIAAAAYAPv/AAACAAIAAAAYAPz/AAACAAIAAAAYAP3/AAACAAIAAAAYAP7/AAACAAIAAAAYAP//AAACAAIAAAAYAAAAAAACAAIAAAAYAAEAAAACAAIAAAAYAAIAAAACAAIAAAAYAAMAAAACAAIAAAAYAAQAAAACAAIAAAAYAAUAAAACAAIAAAAYAAYAAAACAAIAAAAYAAcAAAACAAIAAAAYAAgAAAACAAIAAAAYAAkAAAACAAIAAAAYAAoAAAACAAIAAAAYAAsAAAACAAIAAAAYAAwAAAACAAIAAAAYAA0AAAACAAIAAAAYAA4AAAACAAIAAAAYAA8AAAACAAIAAAAYABAAAAACAAIAAAAYABEAAAACAAIAAAAYABIAAAACAAIAAAAZAPX/AAACAAIAAAAZAPb/AAACAAIAAAAZAPf/AAACAAIAAAAZAPj/AAACAAIAAAAZAPn/AAACAAIAAAAZAPr/AAACAAIAAAAZAPv/AAACAAIAAAAZAPz/AAACAAIAAAAZAP3/AAACAAIAAAAZAP7/AAACAAIAAAAZAP//AAACAAIAAAAZAAAAAAACAAIAAAAZAAEAAAACAAIAAAAZAAIAAAACAAIAAAAZAAMAAAACAAIAAAAZAAQAAAACAAIAAAAZAAUAAAACAAIAAAAZAAYAAAACAAIAAAAZAAcAAAACAAIAAAAZAAgAAAACAAIAAAAZAAkAAAACAAIAAAAZAAoAAAACAAIAAAAZAAsAAAACAAIAAAAZAAwAAAACAAIAAAAZAA0AAAACAAIAAAAZAA4AAAACAAIAAAAZAA8AAAACAAIAAAAZABAAAAACAAIAAAAZABEAAAACAAIAAAAZABIAAAACAAIAAAAaAPX/AAACAAIAAAAaAPb/AAACAAIAAAAaAPf/AAACAAIAAAAaAPj/AAACAAIAAAAaAPn/AAACAAIAAAAaAPr/AAACAAIAAAAaAPv/AAACAAIAAAAaAPz/AAACAAIAAAAaAP3/AAACAAIAAAAaAP7/AAACAAIAAAAaAP//AAACAAIAAAAaAAAAAAACAAIAAAAaAAEAAAACAAIAAAAaAAIAAAACAAIAAAAaAAMAAAACAAIAAAAaAAQAAAACAAIAAAAaAAUAAAACAAIAAAAaAAYAAAACAAIAAAAaAAcAAAACAAIAAAAaAAgAAAACAAIAAAAaAAkAAAACAAIAAAAaAAoAAAACAAIAAAAaAAsAAAACAAIAAAAaAAwAAAACAAIAAAAaAA0AAAACAAIAAAAaAA4AAAACAAIAAAAaAA8AAAACAAIAAAAaABAAAAACAAIAAAAaABEAAAACAAIAAAAaABIAAAACAAIAAAAbAPX/AAACAAIAAAAbAPb/AAACAAIAAAAbAPf/AAACAAIAAAAbAPj/AAACAAIAAAAbAPn/AAACAAIAAAAbAPr/AAACAAIAAAAbAPv/AAACAAIAAAAbAPz/AAACAAIAAAAbAP3/AAACAAIAAAAbAP7/AAACAAIAAAAbAP//AAACAAIAAAAbAAAAAAACAAIAAAAbAAEAAAACAAIAAAAbAAIAAAACAAIAAAAbAAMAAAACAAIAAAAbAAQAAAACAAIAAAAbAAUAAAACAAIAAAAbAAYAAAACAAIAAAAbAAcAAAACAAIAAAAbAAgAAAACAAIAAAAbAAkAAAACAAIAAAAbAAoAAAACAAIAAAAbAAsAAAACAAIAAAAbAAwAAAACAAIAAAAbAA0AAAACAAIAAAAbAA4AAAACAAIAAAAbAA8AAAACAAIAAAAbABAAAAACAAIAAAAbABEAAAACAAIAAAAbABIAAAACAAIAAAAJAA0AAAACAAIAAAAJAA4AAAACAAIAAAAJAA8AAAACAAIAAAAJABAAAAACAAIAAAAJABEAAAACAAIAAAAJABIAAAACAAIAAAAJABMAAAACAAIAAAAKAA0AAAACAAIAAAAKAA4AAAACAAIAAAAKAA8AAAACAAIAAAAKABAAAAACAAIAAAAKABEAAAACAAIAAAAKABIAAAACAAIAAAAKABMAAAACAAIAAAALAA0AAAACAAIAAAALAA4AAAACAAIAAAALAA8AAAACAAIAAAALABAAAAACAAIAAAALABEAAAACAAIAAAALABIAAAACAAIAAAALABMAAAACAAIAAAAMAA0AAAACAAIAAAAMAA4AAAACAAIAAAAMAA8AAAACAAIAAAAMABAAAAACAAIAAAAMABEAAAACAAIAAAAMABIAAAACAAIAAAAMABMAAAACAAIAAAANAA0AAAACAAIAAAANAA4AAAACAAIAAAANAA8AAAACAAIAAAANABAAAAACAAIAAAANABEAAAACAAIAAAANABIAAAACAAIAAAANABMAAAACAAIAAAAOAA0AAAACAAIAAAAOAA4AAAACAAIAAAAOAA8AAAACAAIAAAAOABAAAAACAAIAAAAOABEAAAACAAIAAAAOABIAAAACAAIAAAAOABMAAAACAAIAAAAPAA0AAAACAAIAAAAPAA4AAAACAAIAAAAPAA8AAAACAAIAAAAPABAAAAACAAIAAAAPABEAAAACAAIAAAAPABIAAAACAAIAAAAPABMAAAACAAIAAAAQAA0AAAACAAIAAAAQAA4AAAACAAIAAAAQAA8AAAACAAIAAAAQABAAAAACAAIAAAAQABEAAAACAAIAAAAQABIAAAACAAIAAAAQABMAAAACAAIAAAARAA0AAAACAAIAAAARAA4AAAACAAIAAAARAA8AAAACAAIAAAARABAAAAACAAIAAAARABEAAAACAAIAAAARABIAAAACAAIAAAARABMAAAACAAIAAAASAA0AAAACAAIAAAASAA4AAAACAAIAAAASAA8AAAACAAIAAAASABAAAAACAAIAAAASABEAAAACAAIAAAASABIAAAACAAIAAAASABMAAAACAAIAAAATAA0AAAACAAIAAAATAA4AAAACAAIAAAATAA8AAAACAAIAAAATABAAAAACAAIAAAATABEAAAACAAIAAAATABIAAAACAAIAAAATABMAAAACAAIAAAAUAA0AAAACAAIAAAAUAA4AAAACAAIAAAAUAA8AAAACAAIAAAAUABAAAAACAAIAAAAUABEAAAACAAIAAAAUABIAAAACAAIAAAAUABMAAAACAAIAAAAVAA0AAAACAAIAAAAVAA4AAAACAAIAAAAVAA8AAAACAAIAAAAVABAAAAACAAIAAAAVABEAAAACAAIAAAAVABIAAAACAAIAAAAVABMAAAACAAIAAAAWAA0AAAACAAIAAAAWAA4AAAACAAIAAAAWAA8AAAACAAIAAAAWABAAAAACAAIAAAAWABEAAAACAAIAAAAWABIAAAACAAIAAAAWABMAAAACAAIAAAAXABMAAAACAAIAAAAYABMAAAACAAIAAAD0/xMAAAACAAIAAAD0/xQAAAACAAIAAAD0/xUAAAACAAIAAAD0/xYAAAACAAIAAAD1/xMAAAACAAIAAAD1/xQAAAACAAIAAAD1/xUAAAACAAIAAAD1/xYAAAACAAIAAAD2/xMAAAACAAIAAAD2/xQAAAACAAIAAAD2/xUAAAACAAIAAAD2/xYAAAACAAIAAAD3/xMAAAACAAIAAAD3/xQAAAACAAIAAAD3/xUAAAACAAIAAAD3/xYAAAACAAIAAAD4/xMAAAACAAIAAAD4/xQAAAACAAIAAAD4/xUAAAACAAIAAAD4/xYAAAACAAIAAAD5/xMAAAACAAIAAAD5/xQAAAACAAIAAAD5/xUAAAACAAIAAAD5/xYAAAACAAIAAAD6/xMAAAACAAIAAAD6/xQAAAACAAIAAAD6/xUAAAACAAIAAAD6/xYAAAACAAIAAAD7/xMAAAACAAIAAAD7/xQAAAACAAIAAAD7/xUAAAACAAIAAAD7/xYAAAACAAIAAAD8/xMAAAACAAIAAAD8/xQAAAACAAIAAAD8/xUAAAACAAIAAAD8/xYAAAACAAIAAAD9/xMAAAACAAIAAAD9/xQAAAACAAIAAAD9/xUAAAACAAIAAAD9/xYAAAACAAIAAAD+/xMAAAACAAIAAAD+/xQAAAACAAIAAAD+/xUAAAACAAIAAAD+/xYAAAACAAIAAAD//xMAAAACAAIAAAD//xQAAAACAAIAAAD//xUAAAACAAIAAAD//xYAAAACAAIAAAAAABMAAAACAAIAAAAAABQAAAACAAIAAAAAABUAAAACAAIAAAAAABYAAAACAAIAAAABABMAAAACAAIAAAABABQAAAACAAIAAAABABUAAAACAAIAAAABABYAAAACAAIAAAACABMAAAACAAIAAAACABQAAAACAAIAAAACABUAAAACAAIAAAACABYAAAACAAIAAAADABMAAAACAAAAAAADABQAAAACAAIAAAADABUAAAACAAIAAAADABYAAAACAAIAAAAEABMAAAACAAAAAAAEABQAAAACAAIAAAAEABUAAAACAAIAAAAEABYAAAACAAIAAAAFABMAAAACAAAAAAAFABQAAAACAAIAAAAFABUAAAACAAIAAAAFABYAAAACAAIAAAAGABMAAAACAAAAAAAGABQAAAACAAIAAAAGABUAAAACAAIAAAAGABYAAAACAAIAAAAHABMAAAACAAAAAAAHABQAAAACAAIAAAAHABUAAAACAAIAAAAHABYAAAACAAIAAAAIABMAAAACAAIAAAAIABQAAAACAAIAAAAIABUAAAACAAIAAAAIABYAAAACAAIAAAAJABQAAAACAAIAAAAJABUAAAACAAIAAAAJABYAAAACAAIAAAAKABQAAAACAAIAAAAKABUAAAACAAIAAAAKABYAAAACAAIAAAALABQAAAACAAIAAAALABUAAAACAAIAAAALABYAAAACAAIAAAAMABQAAAACAAIAAAAMABUAAAACAAIAAAAMABYAAAACAAIAAAANABQAAAACAAIAAAANABUAAAACAAIAAAANABYAAAACAAIAAAAOABQAAAACAAIAAAAOABUAAAACAAIAAAAOABYAAAACAAIAAAAPABQAAAACAAIAAAAPABUAAAACAAIAAAAPABYAAAACAAIAAAAQABQAAAACAAIAAAAQABUAAAACAAIAAAAQABYAAAACAAIAAAARABQAAAACAAIAAAARABUAAAACAAIAAAARABYAAAACAAIAAAASABQAAAACAAIAAAASABUAAAACAAIAAAASABYAAAACAAIAAAATABQAAAACAAIAAAATABUAAAACAAIAAAATABYAAAACAAIAAAAUABQAAAACAAIAAAAUABUAAAACAAIAAAAUABYAAAACAAIAAAAVABQAAAACAAIAAAAVABUAAAACAAIAAAAVABYAAAACAAIAAAAWABQAAAACAAIAAAAWABUAAAACAAIAAAAWABYAAAACAAIAAAAXABQAAAACAAIAAAAXABUAAAACAAIAAAAXABYAAAACAAIAAAAYABQAAAACAAIAAAAYABUAAAACAAIAAAAYABYAAAACAAIAAAAZABMAAAACAAIAAAAZABQAAAACAAIAAAAZABUAAAACAAIAAAAZABYAAAACAAIAAAAaABMAAAACAAIAAAAaABQAAAACAAIAAAAaABUAAAACAAIAAAAaABYAAAACAAIAAAAbABMAAAACAAIAAAAbABQAAAACAAIAAAAbABUAAAACAAIAAAAbABYAAAACAAIAAAADAAMAAAAOAAgAAAA=") tile_set = SubResource("TileSet_lquwl") -[node name="SpawnRoot" type="Node2D" parent="."] +[node name="SpawnRoot" type="Node2D" parent="." unique_id=1244957859] z_index = 2 y_sort_enabled = true -[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="."] +[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="." unique_id=685463004] _spawnable_scenes = PackedStringArray("uid://dgtfy455abe1t", "uid://bdlg5orah64m5", "uid://cbobah2ptwqh7") spawn_path = NodePath("../SpawnRoot") -[node name="MainMenu" parent="." instance=ExtResource("1_ig7tw")] +[node name="MainMenu" parent="." unique_id=995125738 instance=ExtResource("1_ig7tw")] -[node name="CanvasModulate" type="CanvasModulate" parent="."] +[node name="CanvasModulate" type="CanvasModulate" parent="." unique_id=1883108446] color = Color(0.503906, 0.503906, 0.503906, 1) -[node name="TileMapLayerAbove" type="TileMapLayer" parent="."] +[node name="TileMapLayerAbove" type="TileMapLayer" parent="." unique_id=1187062871] modulate = Color(1, 1, 1, 0.768627) z_index = 14 tile_map_data = PackedByteArray("AAAIAPr/AAACAAIAAAAHAPv/AAACAAIAAAAHAPz/AAACAAIAAAAIAPz/AAACAAIAAAAIAPv/AAACAAIAAAAHAPr/AAACAAIAAAAGAPr/AAACAAIAAAAGAPv/AAACAAIAAAAGAPz/AAACAAIAAAAGAP3/AAAHAAAAAAAHAP3/AAAIAAAAAAAIAP3/AAAJAAAAAAAGAPn/AAAHAAYAAAAHAPn/AAAIAAYAAAAIAPn/AAAJAAYAAAA=") tile_set = SubResource("TileSet_1bvp3") -[node name="Area2DStairs" type="Area2D" parent="."] +[node name="Area2DStairs" type="Area2D" parent="." unique_id=1375070259] visible = false collision_layer = 2048 collision_mask = 512 -[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2DStairs"] +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2DStairs" unique_id=676343006] position = Vector2(272, 46.5) shape = SubResource("RectangleShape2D_h2yge") -[node name="TorchWall" parent="." instance=ExtResource("5_lquwl")] +[node name="TorchWall" parent="." unique_id=2095581738 instance=ExtResource("5_lquwl")] position = Vector2(84, -33) -[node name="TorchWall3" parent="." instance=ExtResource("5_lquwl")] +[node name="TorchWall3" parent="." unique_id=837639978 instance=ExtResource("5_lquwl")] position = Vector2(312, -33) -[node name="TorchWall2" parent="." instance=ExtResource("5_lquwl")] +[node name="TorchWall2" parent="." unique_id=257438510 instance=ExtResource("5_lquwl")] position = Vector2(154, -33) -[node name="TimerSpawnPots" type="Timer" parent="."] +[node name="TimerSpawnPots" type="Timer" parent="." unique_id=519395746] wait_time = 2.195 one_shot = true autostart = true -[node name="TimerRound" type="Timer" parent="."] +[node name="TimerRound" type="Timer" parent="." unique_id=426181619] wait_time = 120.0 one_shot = true -[node name="HUD" type="CanvasLayer" parent="."] +[node name="HUD" type="CanvasLayer" parent="." unique_id=404805139] -[node name="MarginContainer" type="MarginContainer" parent="HUD"] +[node name="MarginContainer" type="MarginContainer" parent="HUD" unique_id=1395264673] offset_right = 40.0 offset_bottom = 40.0 mouse_filter = 2 theme_override_constants/margin_left = 2 theme_override_constants/margin_top = 2 -[node name="HBoxContainer" type="HBoxContainer" parent="HUD/MarginContainer"] +[node name="HBoxContainer" type="HBoxContainer" parent="HUD/MarginContainer" unique_id=138467442] layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 0 theme_override_constants/separation = 10 -[node name="VBoxContainerHearts" type="VBoxContainer" parent="HUD/MarginContainer/HBoxContainer"] +[node name="VBoxContainerHearts" type="VBoxContainer" parent="HUD/MarginContainer/HBoxContainer" unique_id=1028513938] layout_mode = 2 -[node name="Label" type="Label" parent="HUD/MarginContainer/HBoxContainer/VBoxContainerHearts"] +[node name="Label" type="Label" parent="HUD/MarginContainer/HBoxContainer/VBoxContainerHearts" unique_id=781245752] layout_mode = 2 theme_override_colors/font_outline_color = Color(0, 0, 0, 1) theme_override_constants/outline_size = 6 @@ -698,24 +698,24 @@ theme_override_fonts/font = ExtResource("5_5vw27") theme_override_font_sizes/font_size = 8 text = "- LIFE -" -[node name="TextureProgressBarHearts" type="TextureProgressBar" parent="HUD/MarginContainer/HBoxContainer/VBoxContainerHearts"] +[node name="TextureProgressBarHearts" type="TextureProgressBar" parent="HUD/MarginContainer/HBoxContainer/VBoxContainerHearts" unique_id=216936677] layout_mode = 2 size_flags_horizontal = 4 value = 66.0 texture_under = ExtResource("5_7mycd") texture_progress = ExtResource("6_272bh") -[node name="VBoxContainerKills" type="VBoxContainer" parent="HUD/MarginContainer/HBoxContainer"] +[node name="VBoxContainerKills" type="VBoxContainer" parent="HUD/MarginContainer/HBoxContainer" unique_id=1126652403] layout_mode = 2 -[node name="LabelKills" type="Label" parent="HUD/MarginContainer/HBoxContainer/VBoxContainerKills"] +[node name="LabelKills" type="Label" parent="HUD/MarginContainer/HBoxContainer/VBoxContainerKills" unique_id=1614475362] layout_mode = 2 size_flags_vertical = 0 theme_override_fonts/font = ExtResource("5_5vw27") theme_override_font_sizes/font_size = 8 text = "SCORE" -[node name="LabelKillsValue" type="Label" parent="HUD/MarginContainer/HBoxContainer/VBoxContainerKills"] +[node name="LabelKillsValue" type="Label" parent="HUD/MarginContainer/HBoxContainer/VBoxContainerKills" unique_id=5035969] unique_name_in_owner = true layout_mode = 2 theme_override_fonts/font = ExtResource("5_5vw27") @@ -723,17 +723,17 @@ theme_override_font_sizes/font_size = 8 text = "0" horizontal_alignment = 1 -[node name="VBoxContainerDeaths" type="VBoxContainer" parent="HUD/MarginContainer/HBoxContainer"] +[node name="VBoxContainerDeaths" type="VBoxContainer" parent="HUD/MarginContainer/HBoxContainer" unique_id=1922639359] layout_mode = 2 -[node name="LabelDeaths" type="Label" parent="HUD/MarginContainer/HBoxContainer/VBoxContainerDeaths"] +[node name="LabelDeaths" type="Label" parent="HUD/MarginContainer/HBoxContainer/VBoxContainerDeaths" unique_id=1985228727] layout_mode = 2 size_flags_vertical = 0 theme_override_fonts/font = ExtResource("5_5vw27") theme_override_font_sizes/font_size = 8 text = "DEATHS" -[node name="LabelDeathsValue" type="Label" parent="HUD/MarginContainer/HBoxContainer/VBoxContainerDeaths"] +[node name="LabelDeathsValue" type="Label" parent="HUD/MarginContainer/HBoxContainer/VBoxContainerDeaths" unique_id=244758732] unique_name_in_owner = true layout_mode = 2 theme_override_fonts/font = ExtResource("5_5vw27") @@ -741,7 +741,7 @@ theme_override_font_sizes/font_size = 8 text = "0" horizontal_alignment = 1 -[node name="MarginContainerUpperRight" type="MarginContainer" parent="HUD"] +[node name="MarginContainerUpperRight" type="MarginContainer" parent="HUD" unique_id=2068087204] anchors_preset = 1 anchor_left = 1.0 anchor_right = 1.0 @@ -752,17 +752,17 @@ mouse_filter = 2 theme_override_constants/margin_top = 2 theme_override_constants/margin_right = 2 -[node name="HBoxContainer" type="HBoxContainer" parent="HUD/MarginContainerUpperRight"] +[node name="HBoxContainer" type="HBoxContainer" parent="HUD/MarginContainerUpperRight" unique_id=16472101] layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 0 theme_override_constants/separation = 10 -[node name="VBoxContainer" type="VBoxContainer" parent="HUD/MarginContainerUpperRight/HBoxContainer"] +[node name="VBoxContainer" type="VBoxContainer" parent="HUD/MarginContainerUpperRight/HBoxContainer" unique_id=1861909238] layout_mode = 2 size_flags_horizontal = 4 -[node name="LabelTime" type="Label" parent="HUD/MarginContainerUpperRight/HBoxContainer/VBoxContainer"] +[node name="LabelTime" type="Label" parent="HUD/MarginContainerUpperRight/HBoxContainer/VBoxContainer" unique_id=1683519977] layout_mode = 2 size_flags_vertical = 0 theme_override_fonts/font = ExtResource("5_5vw27") @@ -770,7 +770,7 @@ theme_override_font_sizes/font_size = 8 text = "TIME" horizontal_alignment = 1 -[node name="LabelTimeValue" type="Label" parent="HUD/MarginContainerUpperRight/HBoxContainer/VBoxContainer"] +[node name="LabelTimeValue" type="Label" parent="HUD/MarginContainerUpperRight/HBoxContainer/VBoxContainer" unique_id=6169706] layout_mode = 2 size_flags_horizontal = 4 theme_override_fonts/font = ExtResource("5_5vw27") @@ -778,36 +778,36 @@ theme_override_font_sizes/font_size = 8 text = "00:00" horizontal_alignment = 1 -[node name="Node2DPlayerNames" type="Node2D" parent="HUD"] +[node name="Node2DPlayerNames" type="Node2D" parent="HUD" unique_id=176021972] -[node name="PlayerSpawnPoints" type="Node2D" parent="."] +[node name="PlayerSpawnPoints" type="Node2D" parent="." unique_id=1413557024] position = Vector2(0, 1) -[node name="SpawnPointA" type="Sprite2D" parent="PlayerSpawnPoints"] +[node name="SpawnPointA" type="Sprite2D" parent="PlayerSpawnPoints" unique_id=475389955] visible = false z_index = 6 position = Vector2(-24, 7) texture = ExtResource("7_272bh") -[node name="SpawnPointA2" type="Sprite2D" parent="PlayerSpawnPoints"] +[node name="SpawnPointA2" type="Sprite2D" parent="PlayerSpawnPoints" unique_id=1602800528] visible = false z_index = 6 position = Vector2(-24, 151) texture = ExtResource("7_272bh") -[node name="SpawnPointA3" type="Sprite2D" parent="PlayerSpawnPoints"] +[node name="SpawnPointA3" type="Sprite2D" parent="PlayerSpawnPoints" unique_id=2121277940] visible = false z_index = 6 position = Vector2(200, 151) texture = ExtResource("7_272bh") -[node name="SpawnPointA4" type="Sprite2D" parent="PlayerSpawnPoints"] +[node name="SpawnPointA4" type="Sprite2D" parent="PlayerSpawnPoints" unique_id=718892012] visible = false z_index = 6 position = Vector2(216, 7) texture = ExtResource("7_272bh") -[node name="TimerUntilNextRound" type="Timer" parent="."] +[node name="TimerUntilNextRound" type="Timer" parent="." unique_id=807927406] wait_time = 10.0 one_shot = true diff --git a/src/project.godot b/src/project.godot index e0ce5b8..2d4fcd5 100644 --- a/src/project.godot +++ b/src/project.godot @@ -8,11 +8,15 @@ config_version=5 +[animation] + +compatibility/default_parent_skeleton_in_mesh_instance_3d=true + [application] config/name="ruinborn_new" run/main_scene="uid://c6s2i06bbd6u6" -config/features=PackedStringArray("4.5", "Forward Plus") +config/features=PackedStringArray("4.6", "Forward Plus") run/max_fps=60 boot_splash/show_image=false config/icon="res://icon.svg" diff --git a/src/scripts/entities/player/player.gd b/src/scripts/entities/player/player.gd index fe50f5d..7326118 100644 --- a/src/scripts/entities/player/player.gd +++ b/src/scripts/entities/player/player.gd @@ -23,6 +23,16 @@ const JUMP_VELOCITY = -400.0 var held_entity = null var grabbed_entity = null +var current_height = 0 +var gravity = 800 +var holder = null +var flipFromWall = false + +# Add Z-axis variables similar to loot.gd +@export var positionZ = 0.0 +var velocityZ = 0.0 +var accelerationZ = -330.0 # Gravity + @export var held_entity_path: String = "": set(value): if value != "": @@ -401,8 +411,11 @@ func _apply_movement_from_input(_delta: float) -> void: use_button_up = false if is_releasing: + var is_throwing = false if held_entity != null: if velocity.x != 0 or velocity.y != 0: + # THROWING: We have held_entity, so just throw it - DON'T call release() on grabbed_entity + is_throwing = true if multiplayer.is_server(): held_entity.throw(last_direction) held_entity = null @@ -411,14 +424,20 @@ func _apply_movement_from_input(_delta: float) -> void: else: MultiplayerManager.request_throw_pot.rpc_id(1, held_entity.get_path(), multiplayer.get_unique_id(), last_direction) else: + # PUTTING DOWN: Don't call release(), put_down handles it if multiplayer.is_server(): if held_entity.put_down(): held_entity = null held_entity_path = "" else: MultiplayerManager.request_put_down_pot.rpc_id(1, held_entity.get_path(), multiplayer.get_unique_id()) - if grabbed_entity != null and "release" in grabbed_entity: + + # Only release grabbed_entity if we're NOT throwing AND we have a grabbed_entity (not held_entity) + # When throwing, we have held_entity, so release() should NOT be called + # When releasing (not throwing), we have grabbed_entity, so release() SHOULD be called + if not is_throwing and grabbed_entity != null and "release" in grabbed_entity: grabbed_entity.release() + # Clear grabbed_entity_path first so the setter clears the entity properly grabbed_entity_path = "" grabbed_entity = null @@ -829,7 +848,7 @@ func sync_player_deaths(iDeaths: int): MultiplayerManager.updateScore() pass -@rpc("call_local", "reliable") +@rpc("any_peer", "reliable") func sync_animation(animation_name: String): #print("Client ", multiplayer.get_unique_id(), " received sync_animation: ", animation_name) current_animation = animation_name diff --git a/src/scripts/entities/world/pot.gd b/src/scripts/entities/world/pot.gd index 4e76766..41ed4b2 100644 --- a/src/scripts/entities/world/pot.gd +++ b/src/scripts/entities/world/pot.gd @@ -43,8 +43,8 @@ var lift_speed = 10.0 # Speed of smooth movement var put_down_start_pos = Vector2.ZERO var put_down_target_pos = Vector2.ZERO @export var lift_progress = 0.0 -var re_enable_collision_after_time = 0.0 -var re_enable_time = 0.17 +@export var re_enable_collision_after_time = 0.0 +var re_enable_time = 0.08 var previousFrameVel = Vector2.ZERO var hasShownSmokePuffs = false var grab_follow_speed = 15.0 # Speed at which pot follows holder when grabbed @@ -52,6 +52,7 @@ var previous_holder_position = Vector2.ZERO # Track previous holder position to var previous_client_position = Vector2.ZERO # Track previous position on client for movement detection var push_lead_factor = 1.1 # When pushing, pot moves slightly ahead (110% of player movement) var min_push_distance = 12.0 # Minimum distance pot should maintain from player when pushing to avoid blocking +var _throw_collision_initialized = false # Track if collision state has been initialized for throw on client @export var holder_peer_id: int = 0: set(value): @@ -90,13 +91,14 @@ func _physics_process(delta: float) -> void: holder = player elif holder_peer_id == 0: # No holder - clear everything + # BUT: Don't clear velocity if pot is being thrown (it needs velocity to fly) if holder != null: holder = null - if is_being_grabbed: + if is_being_grabbed and not is_being_thrown: is_being_grabbed = false - if is_being_lifted: + if is_being_lifted and not is_being_thrown: is_being_lifted = false - if velocity != Vector2.ZERO: + if velocity != Vector2.ZERO and not is_being_thrown: velocity = Vector2.ZERO # Handle lifted pot position on ALL clients for smooth following @@ -107,7 +109,8 @@ func _physics_process(delta: float) -> void: lift_progress = min(lift_progress, 1.0) # Smoothly interpolate from current position to above holder during lifting - var target_pos = holder.global_position + Vector2(0, -8) + # Use the same calculation on both server and client to ensure consistent Y position + var target_pos = holder.global_position + Vector2(0, 0) if lift_progress < 1.0: global_position = global_position.lerp(target_pos, lift_progress) positionZ = lift_height * lift_progress @@ -115,6 +118,7 @@ func _physics_process(delta: float) -> void: # When fully lifted, maintain exact position above holder global_position = target_pos positionZ = lift_height + update_sprite_scale() # Ensure sprite scale/offset is updated consistently else: # Debug: Check why pot is not following if is_being_lifted and !holder: @@ -129,7 +133,8 @@ func _physics_process(delta: float) -> void: if multiplayer.is_server(): # CRITICAL: If holder_peer_id is 0, ALWAYS clear grab state immediately # This must happen before ANY logic runs to prevent movement after release - if holder_peer_id == 0: + # BUT: Don't clear velocity if pot is being thrown (it needs velocity to fly) + if holder_peer_id == 0 and not is_being_thrown: is_being_grabbed = false if holder != null: holder = null @@ -141,14 +146,14 @@ func _physics_process(delta: float) -> void: $SfxDrag2.stop() # Skip all grab logic if holder_peer_id is 0 pass - elif is_being_thrown: + if is_being_thrown: re_enable_collision_after_time -= delta if re_enable_collision_after_time <= 0.0: - # enable collisions again + # enable collisions with players again after the delay self.set_collision_layer_value(8, true) - self.set_collision_mask_value(9, true) - self.set_collision_mask_value(10, true) - self.set_collision_mask_value(8, true) + # Collision layer is already enabled, just re-enable collision mask with players + self.set_collision_mask_value(9, true) # Re-enable collision with players + self.set_collision_mask_value(10, true) # Re-enable collision with players (if using both) re_enable_collision_after_time = 0 # Apply gravity to vertical movement @@ -172,10 +177,13 @@ func _physics_process(delta: float) -> void: thrown_by = null # Move horizontally - var collision = move_and_collide(velocity * delta) - if collision: - if positionZ == 0: - is_being_thrown = false + if self.get_collision_layer_value(8) == false: + move_and_slide() + else: + var collision = move_and_collide(velocity * delta) + if collision: + if positionZ == 0: + is_being_thrown = false update_sprite_scale() elif is_being_put_down: lift_progress -= delta * lift_speed @@ -204,7 +212,8 @@ func _physics_process(delta: float) -> void: # Check holder_peer_id FIRST before is_being_grabbed to ensure we never follow when released # ONLY run this on server (pot has authority 1 = server) # DOUBLE CHECK: holder_peer_id must be non-zero AND holder must exist AND match - if holder_peer_id != 0 and is_being_grabbed and holder != null: + # BUT: Don't run grab logic if pot is being thrown (throw logic handles movement) + if holder_peer_id != 0 and is_being_grabbed and holder != null and not is_being_thrown: # Only follow if holder's authority matches holder_peer_id if holder.get_multiplayer_authority() == holder_peer_id: # Calculate how much the player has moved since last frame @@ -276,7 +285,8 @@ func _physics_process(delta: float) -> void: # CRITICAL FINAL CHECK: If holder_peer_id is 0, STOP ALL MOVEMENT immediately # This must run AFTER all grab logic to catch any cases where holder_peer_id was set to 0 # but the pot is still trying to move - if holder_peer_id == 0: + # BUT: Don't clear velocity if pot is being thrown (it needs velocity to fly) + if holder_peer_id == 0 and not is_being_thrown: if is_being_grabbed: is_being_grabbed = false if holder != null: @@ -289,7 +299,8 @@ func _physics_process(delta: float) -> void: $SfxDrag2.stop() # Only handle free-falling if we're not being held (holder_peer_id == 0 is the source of truth) - if holder_peer_id == 0 and !is_being_lifted: # it just spawned or is free-falling: + # BUT: Don't run free-falling logic if pot is being thrown (throw logic handles movement) + if holder_peer_id == 0 and !is_being_lifted and !is_being_thrown: # it just spawned or is free-falling: # Apply gravity to vertical movement velocityZ += accelerationZ * delta positionZ += velocityZ * delta @@ -333,12 +344,66 @@ func _physics_process(delta: float) -> void: if is_being_thrown: if $SfxDrag2.playing: $SfxDrag2.stop() + + # Timer is synced from server via sync_throw_timer RPC + # If not initialized yet, wait for RPC (fallback initialization) + if not _throw_collision_initialized: + # Fallback: initialize if RPC hasn't arrived yet + self.set_collision_layer_value(8, false) + self.set_collision_mask_value(7, true) + self.set_collision_mask_value(9, false) + self.set_collision_mask_value(10, false) + # CRITICAL: Set timer to a positive value to prevent immediate expiration + re_enable_collision_after_time = re_enable_time + _throw_collision_initialized = true + + # Apply the same throw movement logic on client for smooth movement + # Handle collision re-enable timer (same as server) + # CRITICAL: Only decrement and check timer if it's been initialized AND is positive + if _throw_collision_initialized and re_enable_collision_after_time > 0.0: + re_enable_collision_after_time -= delta + if re_enable_collision_after_time <= 0.0: + # enable collisions with players again after the delay + self.set_collision_layer_value(8, true) + # Collision layer is already enabled, just re-enable collision mask with players + self.set_collision_mask_value(9, true) # Re-enable collision with players + self.set_collision_mask_value(10, true) # Re-enable collision with players (if using both) + re_enable_collision_after_time = 0 + + # Apply gravity to vertical movement + velocityZ += accelerationZ * delta + positionZ += velocityZ * delta + if positionZ <= 0: + # Pot has hit the ground + positionZ = 0 if !$SfxLand.playing: $SfxLand.play() $GPUParticles2D.emitting = true $GPUParticles2D/TimerSmokeParticles.start() - elif is_being_put_down: + if abs(velocityZ) > minBounceVelocity: + velocityZ = - velocityZ * bounceRestitution + else: + velocityZ = 0 + is_being_thrown = false + velocity = velocity.lerp(Vector2.ZERO, 0.5) + if velocity.x == 0 and velocity.y == 0: + thrown_by = null + + # Move horizontally using the same logic as server + if self.get_collision_layer_value(8) == false: + move_and_slide() + else: + var collision = move_and_collide(velocity * delta) + if collision: + if positionZ == 0: + is_being_thrown = false + update_sprite_scale() + else: + # Pot is no longer being thrown - reset initialization flag + if _throw_collision_initialized: + _throw_collision_initialized = false + if is_being_put_down: if $SfxDrag2.playing: $SfxDrag2.stop() if !$SfxLand.playing: @@ -351,7 +416,7 @@ func _physics_process(delta: float) -> void: $GPUParticles2D.emitting = false # Update position on client to follow holder if holder: - target_position = holder.global_position + Vector2(0, -8) + target_position = holder.global_position + Vector2(0, 0) if lift_progress < 1.0: lift_progress += delta * lift_speed lift_progress = min(lift_progress, 1.0) @@ -418,6 +483,14 @@ func _physics_process(delta: float) -> void: if is_destroyed and !destroy_initiated: destroy_initiated = true show_destroy_effect() + + # Update debug label + if has_node("LabelPotStateNDirectionNSpeed"): + var collision_layer_8 = self.get_collision_layer_value(8) + var collision_str = "Col 8: %s" % ("TRUE" if collision_layer_8 else "FALSE") + collision_str += "\nthrown? %s" % ("TRUE" if is_being_thrown else "FALSE") + + $LabelPotStateNDirectionNSpeed.text = collision_str pass pass @@ -443,13 +516,20 @@ func update_sprite_scale() -> void: #$Sprite2DShadow.modulate. func throw(direction: Vector2, initial_velocity: float = 200): - self.set_collision_mask_value(7, true) + # When thrown, enable collision layer so pot can use move_and_collide + # But disable collision mask with players temporarily (re-enabled after re_enable_collision_after_time) + # Enable collision with walls so pot can bounce off walls + self.set_collision_layer_value(8, false) # Enable pot's collision layer (needed for move_and_collide to work) + self.set_collision_mask_value(7, true) # Enable collision with walls + self.set_collision_mask_value(9, false) # Disable collision with players initially + self.set_collision_mask_value(10, false) # Disable collision with players initially (if using both) $Area2DCollision.set_deferred("monitoring", true) $SfxThrow.play() is_being_lifted = false is_being_thrown = true is_being_put_down = false + is_being_grabbed = false # Clear grab state thrown_by = holder holder = null holder_peer_id = 0 # Clear the network holder reference @@ -458,6 +538,22 @@ func throw(direction: Vector2, initial_velocity: float = 200): positionZ = lift_height current_height = 0 re_enable_collision_after_time = re_enable_time + # Sync timer to clients so they know when to re-enable collisions + sync_throw_timer.rpc(re_enable_time) + +@rpc("any_peer", "reliable") +func sync_throw_timer(timer_value: float): + # Client receives timer value from server + if not multiplayer.is_server(): + # CRITICAL: Always set collision layer to false FIRST when receiving timer sync + # This ensures it's false even if something else tried to set it to true + self.set_collision_layer_value(8, false) + self.set_collision_mask_value(7, true) # Enable collision with walls + self.set_collision_mask_value(9, false) # Disable collision with players initially + self.set_collision_mask_value(10, false) # Disable collision with players initially + # Set timer value from server (ensures it's positive) + re_enable_collision_after_time = timer_value + _throw_collision_initialized = true @rpc("any_peer", "reliable") func throw_rpc(direction: Vector2, initial_velocity: float = 200): @@ -485,6 +581,19 @@ func grab(new_holder: CharacterBody2D) -> bool: func release(): # Clear all grab-related state + # CRITICAL: Don't re-enable collision layer if pot is being thrown (throw logic handles it) + if is_being_thrown: + # Pot is being thrown - don't change collision layer, throw logic will handle it + holder = null + holder_peer_id = 0 + is_being_grabbed = false + hasShownSmokePuffs = false + #velocity = Vector2.ZERO + indicate(true) + if $SfxDrag2.playing: + $SfxDrag2.stop() + return + # CRITICAL: If we're not the server, we need to notify the server to release # The pot has authority 1 (server), so the server must be the one to clear holder_peer_id if not multiplayer.is_server(): @@ -496,9 +605,9 @@ func release(): holder_peer_id = 0 is_being_grabbed = false hasShownSmokePuffs = false - velocity = Vector2.ZERO + #velocity = Vector2.ZERO # Re-enable pot's collision layer when released - self.set_collision_layer_value(8, true) # Re-enable pot's collision layer + #self.set_collision_layer_value(8, true) # Re-enable pot's collision layer indicate(true) if $SfxDrag2.playing: $SfxDrag2.stop() @@ -508,9 +617,9 @@ func release(): holder_peer_id = 0 is_being_grabbed = false hasShownSmokePuffs = false - velocity = Vector2.ZERO + #velocity = Vector2.ZERO # Re-enable pot's collision layer when released - self.set_collision_layer_value(8, true) # Re-enable pot's collision layer + #self.set_collision_layer_value(8, true) # Re-enable pot's collision layer indicate(true) if $SfxDrag2.playing: $SfxDrag2.stop() @@ -544,12 +653,12 @@ func lift(new_holder: CharacterBody2D): thrown_by = null holder = new_holder holder_peer_id = new_holder.get_multiplayer_authority() - # disable collisions - self.set_collision_layer_value(8, false) - self.set_collision_mask_value(7, false) - self.set_collision_mask_value(8, false) - self.set_collision_mask_value(9, false) - self.set_collision_mask_value(10, false) + # disable collisions with walls and players when lifted + self.set_collision_layer_value(8, false) # Disable pot's collision layer (so players can't collide with it) + self.set_collision_mask_value(7, false) # Disable collision with walls + self.set_collision_mask_value(8, false) # Disable collision with other pots + self.set_collision_mask_value(9, false) # Disable collision with players + self.set_collision_mask_value(10, false) # Disable collision with players (if using both) is_being_lifted = true is_being_grabbed = false is_being_thrown = false diff --git a/src/scripts/entities/world/pot.tscn b/src/scripts/entities/world/pot.tscn index 641c25c..18f945c 100644 --- a/src/scripts/entities/world/pot.tscn +++ b/src/scripts/entities/world/pot.tscn @@ -24,6 +24,7 @@ [ext_resource type="AudioStream" uid="uid://bnuh7ima5cq0n" path="res://assets/audio/sfx/environment/pot/pot_drag2.mp3" id="20_wv4em"] [ext_resource type="AudioStream" uid="uid://co7i1f4t8qtqp" path="res://assets/audio/sfx/environment/pot/pot_place_06.mp3" id="21_0qg0s"] [ext_resource type="AudioStream" uid="uid://ohm0t5c7hw0w" path="res://assets/audio/sfx/player/throw/throw_01.wav.mp3" id="21_hd4fl"] +[ext_resource type="FontFile" uid="uid://bajcvmidrnc33" path="res://assets/fonts/standard_font.png" id="25_p028i"] [sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_hsjxb"] properties/0/path = NodePath(".:position") @@ -327,6 +328,20 @@ position = Vector2(0, -1) shape = SubResource("RectangleShape2D_nb533") debug_color = Color(0.7, 0.132592, 0.232379, 0.42) +[node name="LabelPotStateNDirectionNSpeed" type="Label" parent="." unique_id=1790795234] +z_index = 18 +z_as_relative = false +offset_left = -29.82 +offset_top = -40.0 +offset_right = 30.18 +offset_bottom = -34.0 +size_flags_horizontal = 3 +size_flags_vertical = 6 +theme_override_constants/outline_size = 6 +theme_override_fonts/font = ExtResource("25_p028i") +theme_override_font_sizes/font_size = 6 +horizontal_alignment = 1 + [connection signal="timeout" from="GPUParticles2D/TimerSmokeParticles" to="." method="_on_timer_smoke_particles_timeout"] [connection signal="body_entered" from="Area2DPickup" to="." method="_on_area_2d_pickup_body_entered"] [connection signal="body_exited" from="Area2DPickup" to="." method="_on_area_2d_pickup_body_exited"]