Repository: GlitchedinOrbit/dual-grid-tilemap-system-godot-gdscript Branch: main Commit: 240d552e4fab Files: 10 Total size: 63.3 KB Directory structure: gitextract_8xtfynom/ ├── .github/ │ └── FUNDING.yml ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── assets/ │ ├── SelectionIndicator.png.import │ └── Tilemap.png.import ├── project.godot ├── scenes/ │ └── world.tscn └── scripts/ ├── cursor.gd └── tilemap.gd ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/FUNDING.yml ================================================ ko_fi: glitchedinorbit ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing to Dual Grid Tilemap System for Godot (GDScript) Thank you for considering contributing to the Dual Grid Tilemap System for Godot! Your contributions help improve the project and make it more useful for everyone. Here’s how you can help out. ## Table of Contents - [Getting Started](#getting-started) - [Contributing Guidelines](#contributing-guidelines) - [Code Standards](#code-standards) - [Submitting Changes](#submitting-changes) - [Reporting Issues](#reporting-issues) - [License](#license) ## Getting Started 1. **Fork the repository**: Click the “Fork” button at the top right of the repository page to create your copy of the project. 2. **Clone your fork**: Clone your forked repository to your local machine using: ```bash git clone https://github.com/your-username/dual-grid-tilemap-system-godot-gdscript.git ``` 3. **Install Godot**: Make sure you have Godot Engine installed. You can download it from the [official website](https://godotengine.org/download). 4. **Open the project**: Open the project in Godot to explore its structure and functionality. ## Contributing Guidelines - **Be Respectful**: Treat everyone with respect and kindness. Open and constructive discussions are encouraged. - **Stay on Topic**: Ensure your contributions align with the project's goals. - **Ask Questions**: If you’re unsure about something, feel free to ask questions in the issues or discussions sections. ## Code Standards - Follow the [Godot GDScript style guide](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_styleguide.html). - Ensure your code is well-commented to help others understand your contributions. - Write clear and concise commit messages that explain the purpose of your changes. ## Submitting Changes 1. **Create a branch**: Make a new branch for your changes: ```bash git checkout -b your-feature-branch ``` 2. **Make your changes**: Implement your feature or fix. 3. **Test your changes**: Ensure your changes do not break existing functionality. 4. **Commit your changes**: Commit your changes with a descriptive message: ```bash git commit -m "Add feature: Describe what you did" ``` 5. **Push your changes**: Push your branch to your fork: ```bash git push origin your-feature-branch ``` 6. **Create a pull request**: Go to the original repository, and you’ll see a prompt to create a pull request. Fill in the template, detailing what you’ve done. ## Reporting Issues If you encounter any bugs or have suggestions for improvements, please report them by creating a new issue. Include the following information: - A clear title and description of the issue. - Steps to reproduce the issue, if applicable. - Any error messages or screenshots to help illustrate the problem. ## License By contributing, you agree that your contributions will be licensed under the project's existing license (check the `LICENSE` file for details). Thank you for contributing to the Dual Grid Tilemap System for Godot! Your efforts are greatly appreciated! ================================================ FILE: LICENSE.md ================================================ MIT License Copyright (c) 2024 GlitchedinOrbit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ ## Dual Grid Tilemap System For Godot In GDScript A converted version of [jess::codes' C# dual grid system repo](https://github.com/jess-hammer/dual-grid-tilemap-system-godot) into native GDScript. Draw directly in the Editor with any of the fully filled tilemap tiles to see the changes! ![](docs/dual-tilemap-demo.gif) ### Features - Draw in the Editor - Supports multiple terrains - Grass - Dirt - Water - Sand - Easily add new terrain types - Draw from multiple atlas coords ![](docs/dual-tilemap-terrains.png) Using a dual grid system has the following advantages: - Only 16 (or 6) tiles are required in the tileset - The tiles have perfectly rounded corners - The tiles align to the world grid ![Dual grid image by Oskar Stålberg](https://pbs.twimg.com/media/FBk2PhcXsAETv1x?format=jpg&name=large) ### References - [Dual grid Twitter post by Oskar Stålberg](https://x.com/OskSta/status/1448248658865049605) - ['Programming Terrain Generation' video by ThinMatrix](https://www.youtube.com/watch?v=buKQjkad2I0) - ['Drawing Fewer Tiles' video by jess::codes](https://www.youtube.com/watch?v=jEWFSv3ivTg) ### Contributing If you’d like to contribute, please see the [Contributing Guidelines](https://github.com/GlitchedinOrbit/dual-grid-tilemap-system-godot-gdscript/blob/main/CONTRIBUTING.md). ### Contact If you have any questions, feedback, or suggestions, feel free to reach out: - **Twitter**: [@glitchedinorbit](https://twitter.com/glitchedinorbit) - **Email**: glitchedinorbit[at]gmail.com Support me on Ko-fi ================================================ FILE: assets/SelectionIndicator.png.import ================================================ [remap] importer="texture" type="CompressedTexture2D" uid="uid://yuxn8elmkepi" path="res://.godot/imported/SelectionIndicator.png-77fc6f11842d7d797fee5129cf7d1aff.ctex" metadata={ "vram_texture": false } [deps] source_file="res://assets/SelectionIndicator.png" dest_files=["res://.godot/imported/SelectionIndicator.png-77fc6f11842d7d797fee5129cf7d1aff.ctex"] [params] compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 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/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 ================================================ FILE: assets/Tilemap.png.import ================================================ [remap] importer="texture" type="CompressedTexture2D" uid="uid://bglmjjbb1nivg" path="res://.godot/imported/Tilemap.png-19909328b54cd4cfedc10cbc50054a9a.ctex" metadata={ "vram_texture": false } [deps] source_file="res://assets/Tilemap.png" dest_files=["res://.godot/imported/Tilemap.png-19909328b54cd4cfedc10cbc50054a9a.ctex"] [params] compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 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/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 ================================================ FILE: project.godot ================================================ ; Engine configuration file. ; It's best edited using the editor UI and not directly, ; since the parameters that go here are not all obvious. ; ; Format: ; [section] ; section goes between [] ; param=value ; assign values to parameters config_version=5 [application] config/name="Dual Grid System GDScript" run/main_scene="res://scenes/world.tscn" config/features=PackedStringArray("4.2", "Mobile") [display] window/size/viewport_width=640 window/size/viewport_height=360 window/size/mode=3 window/stretch/mode="canvas_items" [filesystem] import/blender/enabled=false [input] left_click={ "deadzone": 0.5, "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null) ] } right_click={ "deadzone": 0.5, "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"double_click":false,"script":null) ] } [rendering] textures/canvas_textures/default_texture_filter=0 renderer/rendering_method="mobile" ================================================ FILE: scenes/world.tscn ================================================ [gd_scene load_steps=12 format=3 uid="uid://bj2e3y6dtnn83"] [ext_resource type="Texture2D" uid="uid://bglmjjbb1nivg" path="res://assets/Tilemap.png" id="1_ni7nt"] [ext_resource type="Script" path="res://scripts/tilemap.gd" id="2_7qj53"] [ext_resource type="Texture2D" uid="uid://yuxn8elmkepi" path="res://assets/SelectionIndicator.png" id="4_nti6n"] [ext_resource type="Script" path="res://scripts/cursor.gd" id="5_00xh7"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_eivu5"] texture = ExtResource("1_ni7nt") 0:0/0 = 0 1:0/0 = 0 2:0/0 = 0 3:0/0 = 0 0:1/0 = 0 1:1/0 = 0 2:1/0 = 0 3:1/0 = 0 0:2/0 = 0 1:2/0 = 0 2:2/0 = 0 3:2/0 = 0 0:3/0 = 0 1:3/0 = 0 2:3/0 = 0 3:3/0 = 0 4:0/0 = 0 5:0/0 = 0 5:1/0 = 0 6:1/0 = 0 6:2/0 = 0 6:3/0 = 0 7:3/0 = 0 7:2/0 = 0 7:1/0 = 0 7:0/0 = 0 6:0/0 = 0 4:1/0 = 0 4:2/0 = 0 4:3/0 = 0 5:3/0 = 0 5:2/0 = 0 3:4/0 = 0 3:5/0 = 0 3:6/0 = 0 3:7/0 = 0 2:7/0 = 0 1:7/0 = 0 0:7/0 = 0 0:6/0 = 0 0:5/0 = 0 0:4/0 = 0 1:4/0 = 0 2:4/0 = 0 2:5/0 = 0 2:6/0 = 0 1:6/0 = 0 1:5/0 = 0 7:4/0 = 0 6:4/0 = 0 5:4/0 = 0 4:4/0 = 0 4:5/0 = 0 4:6/0 = 0 4:7/0 = 0 5:7/0 = 0 6:7/0 = 0 7:7/0 = 0 7:6/0 = 0 7:5/0 = 0 6:5/0 = 0 5:5/0 = 0 5:6/0 = 0 6:6/0 = 0 0:8/0 = 0 0:9/0 = 0 0:10/0 = 0 0:11/0 = 0 1:8/0 = 0 1:9/0 = 0 1:10/0 = 0 1:11/0 = 0 2:8/0 = 0 2:9/0 = 0 2:10/0 = 0 2:11/0 = 0 3:8/0 = 0 3:9/0 = 0 3:10/0 = 0 3:11/0 = 0 [sub_resource type="TileSet" id="TileSet_hneuh"] sources/0 = SubResource("TileSetAtlasSource_eivu5") [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_s05eq"] texture = ExtResource("1_ni7nt") 0:0/0 = 0 1:0/0 = 0 2:0/0 = 0 3:0/0 = 0 0:1/0 = 0 1:1/0 = 0 2:1/0 = 0 3:1/0 = 0 0:2/0 = 0 1:2/0 = 0 2:2/0 = 0 3:2/0 = 0 0:3/0 = 0 1:3/0 = 0 2:3/0 = 0 3:3/0 = 0 4:0/0 = 0 5:0/0 = 0 6:0/0 = 0 7:0/0 = 0 7:1/0 = 0 7:2/0 = 0 7:3/0 = 0 6:3/0 = 0 5:3/0 = 0 4:3/0 = 0 4:2/0 = 0 4:1/0 = 0 5:1/0 = 0 6:1/0 = 0 6:2/0 = 0 5:2/0 = 0 3:4/0 = 0 3:5/0 = 0 3:6/0 = 0 2:6/0 = 0 2:7/0 = 0 1:7/0 = 0 0:7/0 = 0 0:6/0 = 0 0:5/0 = 0 0:4/0 = 0 1:4/0 = 0 1:5/0 = 0 2:5/0 = 0 2:4/0 = 0 1:6/0 = 0 3:7/0 = 0 4:4/0 = 0 5:4/0 = 0 6:4/0 = 0 7:4/0 = 0 7:5/0 = 0 7:6/0 = 0 7:7/0 = 0 6:7/0 = 0 5:7/0 = 0 4:7/0 = 0 4:6/0 = 0 4:5/0 = 0 5:5/0 = 0 6:5/0 = 0 6:6/0 = 0 5:6/0 = 0 0:8/0 = 0 0:9/0 = 0 0:10/0 = 0 0:11/0 = 0 1:8/0 = 0 1:9/0 = 0 1:10/0 = 0 1:11/0 = 0 2:8/0 = 0 2:9/0 = 0 2:10/0 = 0 2:11/0 = 0 3:8/0 = 0 3:9/0 = 0 3:10/0 = 0 3:11/0 = 0 [sub_resource type="TileSet" id="TileSet_77ea1"] sources/0 = SubResource("TileSetAtlasSource_s05eq") [sub_resource type="AtlasTexture" id="AtlasTexture_bjwxa"] atlas = ExtResource("4_nti6n") region = Rect2(0, 0, 17, 17) [sub_resource type="AtlasTexture" id="AtlasTexture_ayys0"] atlas = ExtResource("4_nti6n") region = Rect2(17, 0, 17, 17) [sub_resource type="SpriteFrames" id="SpriteFrames_v82uo"] animations = [{ "frames": [{ "duration": 1.0, "texture": SubResource("AtlasTexture_bjwxa") }, { "duration": 1.0, "texture": SubResource("AtlasTexture_ayys0") }], "loop": true, "name": &"default", "speed": 5.0 }] [node name="World" type="Node2D"] [node name="WorldTileMap" type="TileMap" parent="." node_paths=PackedStringArray("offset_tilemap")] tile_set = SubResource("TileSet_hneuh") format = 2 layer_0/tile_data = PackedInt32Array(0, 131072, 1, 65536, 131072, 1, 131072, 131072, 1, 196608, 131072, 1, 262144, 131072, 1, 327680, 131072, 1, 393216, 131072, 1, 458752, 131072, 1, 524288, 131072, 1, 589824, 131072, 1, 1, 131072, 1, 65537, 131072, 1, 131073, 131072, 1, 196609, 131072, 1, 262145, 131072, 1, 327681, 131072, 1, 393217, 131072, 1, 458753, 131072, 1, 524289, 0, 3, 589825, 131072, 1, 2, 131072, 1, 65538, 0, 3, 131074, 131072, 1, 196610, 131072, 1, 262146, 131072, 1, 327682, 131072, 1, 393218, 131072, 1, 458754, 131072, 1, 524290, 0, 3, 589826, 131072, 1, 3, 131072, 1, 65539, 131072, 1, 131075, 131072, 1, 196611, 131072, 1, 262147, 0, 3, 327683, 0, 3, 393219, 0, 3, 458755, 0, 3, 524291, 0, 3, 589827, 131072, 1, 4, 131072, 1, 65540, 131072, 1, 131076, 131072, 1, 196612, 0, 3, 262148, 0, 3, 327684, 0, 3, 393220, 131072, 1, 458756, 131072, 1, 524292, 131072, 1, 589828, 131072, 1, 5, 131072, 1, 65541, 131072, 1, 131077, 131072, 1, 196613, 0, 3, 262149, 0, 3, 327685, 0, 3, 393221, 0, 3, 458757, 131072, 1, 524293, 131072, 1, 589829, 131072, 1, 6, 131072, 1, 65542, 131072, 1, 131078, 131072, 1, 196614, 0, 3, 262150, 131072, 1, 327686, 131072, 1, 393222, 0, 3, 458758, 131072, 1, 524294, 131072, 1, 589830, 131072, 1, 7, 131072, 1, 65543, 131072, 1, 131079, 131072, 1, 196615, 0, 3, 262151, 131072, 1, 327687, 131072, 1, 393223, 0, 3, 458759, 131072, 1, 524295, 0, 3, 589831, 131072, 1, 8, 131072, 1, 65544, 0, 3, 131080, 0, 3, 196616, 0, 3, 262152, 131072, 1, 327688, 131072, 1, 393224, 0, 3, 458760, 0, 3, 524296, 0, 3, 589832, 131072, 1, 9, 131072, 1, 65545, 131072, 1, 131081, 131072, 1, 196617, 131072, 1, 262153, 131072, 1, 327689, 131072, 1, 393225, 0, 3, 458761, 131072, 1, 524297, 131072, 1, 589833, 131072, 1, 10, 131072, 1, 65546, 131072, 1, 131082, 131072, 1, 196618, 131072, 1, 262154, 131072, 1, 327690, 131072, 1, 393226, 131072, 1, 458762, 131072, 1, 524298, 0, 3, 589834, 0, 3, 11, 131072, 1, 65547, 0, 3, 131083, 0, 3, 196619, 131072, 1, 262155, 131072, 1, 327691, 131072, 1, 393227, 131072, 1, 458763, 131072, 1, 524299, 131072, 1, 589835, 131072, 1, 12, 131072, 1, 65548, 0, 3, 131084, 0, 3, 196620, 131072, 1, 262156, 0, 3, 327692, 0, 3, 393228, 0, 3, 458764, 0, 3, 524300, 0, 3, 589836, 0, 3, 13, 131072, 1, 65549, 131072, 1, 131085, 131072, 1, 196621, 131072, 1, 262157, 131072, 1, 327693, 131072, 1, 393229, 131072, 1, 458765, 131072, 1, 524301, 131072, 1, 589837, 131072, 1, 655373, 131072, 1, 720909, 0, 3, 786445, 131072, 1, 851981, 393216, 1, 917517, 393216, 1, 983053, 131072, 1, 1048589, 0, 3, 1114125, 131072, 1, 1179661, 131072, 1, 1245197, 131072, 1, 1310733, 131072, 1, 1376269, 131072, 1, 1441805, 131072, 1, 14, 131072, 1, 65550, 131072, 1, 131086, 131072, 1, 196622, 131072, 1, 262158, 131072, 1, 327694, 0, 3, 393230, 0, 3, 458766, 131072, 1, 524302, 131072, 1, 589838, 131072, 1, 655374, 131072, 1, 720910, 131072, 1, 786446, 131072, 1, 851982, 131072, 1, 917518, 131072, 1, 983054, 131072, 1, 1048590, 0, 3, 1114126, 131072, 1, 1179662, 131072, 1, 1245198, 131072, 1, 1310734, 131072, 1, 1376270, 131072, 1, 1441806, 131072, 1, 15, 131072, 1, 65551, 131072, 1, 131087, 0, 3, 196623, 0, 3, 262159, 0, 3, 327695, 131072, 1, 393231, 0, 3, 458767, 131072, 1, 524303, 131072, 1, 589839, 131072, 1, 655375, 131072, 1, 720911, 131072, 1, 786447, 131072, 1, 851983, 131072, 1, 917519, 131072, 1, 983055, 131072, 1, 1048591, 0, 3, 1114127, 131072, 1, 1179663, 131072, 1, 1245199, 131072, 1, 1310735, 131072, 1, 1376271, 131072, 1, 1441807, 131072, 1, 16, 131072, 1, 65552, 131072, 1, 131088, 131072, 1, 196624, 131072, 1, 262160, 131072, 1, 327696, 131072, 1, 393232, 0, 3, 458768, 0, 3, 524304, 0, 3, 589840, 0, 3, 655376, 0, 3, 720912, 0, 3, 786448, 0, 3, 851984, 0, 3, 917520, 0, 3, 983056, 0, 3, 1048592, 0, 3, 1114128, 131072, 1, 1179664, 131072, 1, 1245200, 131072, 1, 1310736, 131072, 1, 1376272, 131072, 1, 1441808, 131072, 1, 17, 131072, 1, 65553, 131072, 1, 131089, 131072, 1, 196625, 393216, 1, 262161, 131072, 1, 327697, 131072, 1, 393233, 0, 3, 458769, 131072, 1, 524305, 131072, 1, 589841, 131072, 1, 655377, 131072, 1, 720913, 131072, 1, 786449, 0, 3, 851985, 131072, 1, 917521, 131072, 1, 983057, 131072, 1, 1048593, 0, 3, 1114129, 131072, 1, 1179665, 131072, 1, 1245201, 131072, 1, 1310737, 131072, 1, 1376273, 131072, 1, 1441809, 131072, 1, 18, 131072, 1, 65554, 131072, 1, 131090, 131072, 1, 196626, 131072, 1, 262162, 131072, 1, 327698, 0, 3, 393234, 131072, 1, 458770, 131072, 1, 524306, 131072, 1, 589842, 131072, 1, 655378, 131072, 1, 720914, 0, 3, 786450, 0, 3, 851986, 131072, 1, 917522, 131072, 1, 983058, 131072, 1, 1048594, 0, 3, 1114130, 131072, 1, 1179666, 131072, 1, 1245202, 131072, 1, 1310738, 0, 3, 1376274, 131072, 1, 1441810, 131072, 1, 19, 131072, 1, 65555, 131072, 1, 131091, 131072, 1, 196627, 131072, 1, 262163, 131072, 1, 327699, 0, 3, 393235, 131072, 1, 458771, 131072, 1, 524307, 131072, 1, 589843, 131072, 1, 655379, 0, 3, 720915, 0, 3, 786451, 131072, 1, 851987, 131072, 1, 917523, 131072, 1, 983059, 131072, 1, 1048595, 0, 3, 1114131, 131072, 1, 1179667, 131072, 1, 1245203, 0, 3, 1310739, 0, 3, 1376275, 131072, 1, 1441811, 131072, 1, 20, 131072, 1, 65556, 131072, 1, 131092, 131072, 1, 196628, 131072, 1, 262164, 131072, 1, 327700, 0, 3, 393236, 131072, 1, 458772, 131072, 1, 524308, 131072, 1, 589844, 131072, 1, 655380, 0, 3, 720916, 131072, 1, 786452, 131072, 1, 851988, 131072, 1, 917524, 131072, 1, 983060, 131072, 1, 1048596, 0, 3, 1114132, 131072, 1, 1179668, 0, 3, 1245204, 0, 3, 1310740, 0, 3, 1376276, 131072, 1, 1441812, 131072, 1, 65557, 131072, 1, 131093, 131072, 1, 196629, 131072, 1, 262165, 131072, 1, 458773, 131072, 1, 524309, 131072, 1, 589845, 131072, 1, 655381, 0, 3, 720917, 131072, 1, 786453, 131072, 1, 851989, 131072, 1, 917525, 131072, 1, 983061, 131072, 1, 1048597, 0, 3, 1114133, 0, 3, 1179669, 0, 3, 1245205, 131072, 1, 1310741, 131072, 1, 1376277, 131072, 1, 1441813, 131072, 1, 22, 131072, 1, 65558, 131072, 1, 131094, 131072, 1, 196630, 131072, 1, 262166, 131072, 1, 458774, 131072, 1, 524310, 131072, 1, 589846, 131072, 1, 655382, 0, 3, 720918, 131072, 1, 786454, 131072, 1, 851990, 131072, 1, 917526, 131072, 1, 983062, 131072, 1, 1048598, 131072, 1, 1114134, 0, 3, 1179670, 131072, 1, 1245206, 393216, 5, 1310742, 393216, 5, 1376278, 393216, 5, 1441814, 393216, 5, 65559, 393216, 1, 131095, 393216, 1, 196631, 393216, 1, 262167, 131072, 1, 458775, 131072, 1, 524311, 131072, 1, 589847, 131072, 1, 655383, 0, 3, 720919, 131072, 1, 786455, 131072, 1, 851991, 131072, 1, 917527, 131072, 1, 983063, 0, 3, 1048599, 0, 3, 1114135, 0, 3, 1179671, 131072, 1, 1245207, 393216, 5, 1310743, 131072, 1, 1376279, 131072, 1, 1441815, 131072, 1, 65560, 393216, 1, 131096, 131072, 1, 196632, 393216, 1, 262168, 131072, 1, 458776, 131072, 1, 524312, 131072, 1, 589848, 131072, 1, 655384, 0, 3, 720920, 131072, 1, 786456, 131072, 1, 851992, 131072, 1, 917528, 131072, 1, 983064, 0, 3, 1048600, 131072, 1, 1114136, 0, 3, 1179672, 131072, 1, 1245208, 393216, 5, 1310744, 131072, 1, 1376280, 131072, 1, 1441816, 131072, 1, 65561, 393216, 1, 131097, 131072, 1, 196633, 393216, 1, 262169, 131072, 1, 458777, 131072, 1, 524313, 131072, 1, 589849, 131072, 1, 655385, 0, 3, 720921, 131072, 1, 786457, 131072, 1, 851993, 131072, 1, 917529, 131072, 1, 983065, 0, 3, 1048601, 0, 3, 1114137, 0, 3, 1179673, 0, 3, 1245209, 393216, 5, 1310745, 131072, 1, 1376281, 131072, 1, 1441817, 131072, 1, 65562, 393216, 1, 131098, 131072, 1, 196634, 393216, 1, 262170, 131072, 1, 327706, 0, 3, 393242, 131072, 1, 458778, 131072, 1, 524314, 131072, 1, 589850, 131072, 1, 655386, 0, 3, 720922, 131072, 1, 786458, 131072, 1, 851994, 131072, 1, 917530, 131072, 1, 983066, 131072, 1, 1048602, 0, 3, 1114138, 131072, 1, 1179674, 0, 3, 1245210, 393216, 5, 1310746, 131072, 1, 1376282, 131072, 1, 1441818, 131072, 1, 65563, 393216, 1, 131099, 393216, 1, 196635, 393216, 1, 262171, 131072, 1, 327707, 0, 3, 393243, 0, 3, 458779, 0, 3, 524315, 0, 3, 589851, 0, 3, 655387, 0, 3, 720923, 131072, 1, 786459, 131072, 1, 851995, 131072, 1, 917531, 131072, 1, 1114139, 131072, 1, 1179675, 0, 3, 1245211, 393216, 5, 1310747, 131072, 1, 1376283, 131072, 1, 1441819, 131072, 1, 262172, 131072, 1, 327708, 0, 3, 393244, 0, 3, 458780, 131072, 1, 524316, 131072, 1, 589852, 0, 3, 655388, 131072, 1, 720924, 131072, 1, 786460, 131072, 1, 851996, 131072, 1, 917532, 131072, 1, 1245212, 393216, 5, 1310748, 131072, 1, 1376284, 131072, 1, 1441820, 131072, 1, 262173, 131072, 1, 327709, 131072, 1, 393245, 131072, 1, 458781, 131072, 1, 524317, 131072, 1, 589853, 0, 3, 655389, 0, 3, 720925, 131072, 1, 786461, 131072, 1, 851997, 131072, 1, 917533, 131072, 1, 1245213, 393216, 5, 1310749, 131072, 1, 1376285, 131072, 1, 1441821, 131072, 1, 262174, 131072, 1, 327710, 131072, 1, 393246, 131072, 1, 458782, 0, 3, 524318, 0, 3, 589854, 0, 3, 655390, 0, 3, 720926, 131072, 1, 786462, 131072, 1, 851998, 131072, 1, 1245214, 393216, 5, 1310750, 131072, 1, 1376286, 131072, 1, 1441822, 131072, 1, 262175, 131072, 1, 327711, 131072, 1, 393247, 0, 3, 458783, 0, 3, 524319, 131072, 1, 589855, 131072, 1, 655391, 0, 3, 720927, 0, 3, 786463, 0, 3, 851999, 0, 3, 1048607, 393216, 1, 1376287, 131072, 1, 1441823, 131072, 1, 262176, 131072, 1, 327712, 131072, 1, 393248, 131072, 1, 458784, 131072, 1, 524320, 131072, 1, 589856, 131072, 1, 655392, 131072, 1, 720928, 131072, 1, 786464, 0, 3, 852000, 0, 3, 983072, 0, 3, 1048608, 0, 3, 1179680, 131072, 1, 1245216, 393216, 5, 1376288, 131072, 1, 1441824, 131072, 1, 262177, 262144, 7, 327713, 262144, 7, 393249, 131072, 1, 458785, 131072, 1, 524321, 131072, 1, 589857, 131072, 1, 655393, 131072, 1, 720929, 131072, 1, 786465, 131072, 1, 852001, 131072, 1, 983073, 131072, 1, 1048609, 0, 3, 1179681, 131072, 1, 1245217, 393216, 5, 1310753, 393216, 5, 1376289, 393216, 5, 1441825, 393216, 5, 262178, 262144, 7, 327714, 131072, 1, 393250, 131072, 1, 458786, 131072, 1, 524322, 131072, 1, 589858, 131072, 1, 655394, 131072, 1, 720930, 262144, 7, 786466, 131072, 1, 852002, 131072, 1, 983074, 131072, 1, 1048610, 131072, 1, 1179682, 131072, 1, 1245218, 393216, 5, 1310754, 131072, 1, 1376290, 131072, 1, 1441826, 131072, 1, 262179, 131072, 1, 327715, 131072, 1, 393251, 131072, 1, 458787, 131072, 1, 524323, 262144, 7, 589859, 131072, 1, 655395, 131072, 1, 720931, 131072, 1, 786467, 131072, 1, 852003, 131072, 1, 983075, 131072, 1, 1048611, 131072, 1, 1179683, 262144, 7, 1245219, 262144, 7, 1310755, 262144, 7, 1376291, 262144, 7, 1441827, 262144, 7, 65572, 262144, 7, 131108, 131072, 1, 196644, 131072, 1, 262180, 131072, 1, 327716, 131072, 1, 393252, 131072, 1, 458788, 262144, 7, 524324, 262144, 7, 589860, 262144, 7, 655396, 131072, 1, 720932, 131072, 1, 1048612, 131072, 1, 1179684, 262144, 7, 1245220, 262144, 7, 1310756, 393216, 1, 1376292, 393216, 1, 1441828, 262144, 7, 65573, 262144, 7, 131109, 262144, 7, 196645, 131072, 1, 262181, 131072, 1, 327717, 131072, 1, 1179685, 393216, 1, 1245221, 393216, 1, 1310757, 393216, 1, 1376293, 393216, 1, 1441829, 262144, 7, 65574, 131072, 1, 131110, 262144, 7, 196646, 262144, 7, 262182, 262144, 7, 327718, 262144, 7, 1179686, 393216, 1, 1245222, 393216, 1, 1310758, 393216, 1, 1376294, 262144, 7, 1441830, 262144, 7, 65575, 131072, 1, 131111, 131072, 1, 196647, 131072, 1, 262183, 131072, 1, 327719, 131072, 1, 1441831, 131072, 1, 655360, 393216, 1, 720896, 393216, 1, 786432, 393216, 1, 851968, 393216, 1, 917504, 393216, 1, 983040, 393216, 1, 1048576, 393216, 1, 1114112, 393216, 1, 1179648, 131072, 1, 1245184, 131072, 1, 1310720, 131072, 1, 1376256, 131072, 1, 1441792, 131072, 1, 655361, 393216, 1, 720897, 131072, 1, 786433, 131072, 1, 851969, 131072, 1, 917505, 131072, 1, 983041, 393216, 1, 1048577, 131072, 1, 1114113, 393216, 1, 1179649, 131072, 1, 1245185, 131072, 1, 1310721, 131072, 1, 1376257, 131072, 1, 1441793, 131072, 1, 655362, 393216, 1, 720898, 131072, 1, 786434, 0, 3, 851970, 131072, 1, 917506, 131072, 1, 983042, 393216, 1, 1048578, 131072, 1, 1310722, 131072, 1, 1376258, 131072, 1, 1441794, 131072, 1, 655363, 393216, 1, 720899, 131072, 1, 786435, 0, 3, 851971, 131072, 1, 917507, 131072, 1, 983043, 393216, 1, 1048579, 131072, 1, 1114115, 131072, 1, 1179651, 131072, 1, 1245187, 131072, 1, 1310723, 131072, 1, 1376259, 131072, 1, 1441795, 131072, 1, 655364, 393216, 1, 720900, 131072, 1, 786436, 0, 3, 851972, 131072, 1, 917508, 131072, 1, 983044, 393216, 1, 1048580, 131072, 1, 1114116, 131072, 1, 1179652, 131072, 1, 1245188, 393216, 1, 1310724, 131072, 1, 1376260, 131072, 1, 1441796, 131072, 1, 655365, 393216, 1, 720901, 131072, 1, 786437, 0, 3, 851973, 131072, 1, 917509, 131072, 1, 983045, 131072, 1, 1048581, 393216, 1, 1114117, 393216, 1, 1179653, 393216, 1, 1245189, 131072, 1, 1310725, 131072, 1, 1376261, 131072, 1, 1441797, 131072, 1, 655366, 131072, 1, 720902, 131072, 1, 786438, 0, 3, 851974, 131072, 1, 917510, 393216, 1, 983046, 393216, 1, 1048582, 393216, 1, 1114118, 131072, 1, 1179654, 131072, 1, 1245190, 131072, 1, 1310726, 131072, 1, 1376262, 131072, 1, 1441798, 131072, 1, 655367, 131072, 1, 720903, 131072, 1, 786439, 0, 3, 851975, 131072, 1, 917511, 131072, 1, 983047, 131072, 1, 1048583, 131072, 1, 1114119, 131072, 1, 1179655, 131072, 1, 1245191, 131072, 1, 1310727, 131072, 1, 1376263, 131072, 1, 1441799, 131072, 1, 655368, 131072, 1, 720904, 131072, 1, 786440, 0, 3, 851976, 0, 3, 917512, 131072, 1, 983048, 131072, 1, 1048584, 131072, 1, 1114120, 131072, 1, 1179656, 131072, 1, 1245192, 131072, 1, 1310728, 131072, 1, 1376264, 131072, 1, 1441800, 131072, 1, 655369, 131072, 1, 720905, 131072, 1, 786441, 0, 3, 851977, 0, 3, 917513, 0, 3, 983049, 0, 3, 1048585, 0, 3, 1114121, 0, 3, 1179657, 0, 3, 1245193, 131072, 1, 1310729, 131072, 1, 1376265, 131072, 1, 1441801, 131072, 1, 655370, 0, 3, 720906, 0, 3, 786442, 0, 3, 851978, 131072, 1, 917514, 131072, 1, 983050, 131072, 1, 1048586, 0, 3, 1114122, 131072, 1, 1179658, 131072, 1, 1245194, 131072, 1, 1310730, 131072, 1, 1376266, 131072, 1, 1441802, 131072, 1, 655371, 131072, 1, 720907, 131072, 1, 786443, 131072, 1, 851979, 131072, 1, 917515, 131072, 1, 983051, 131072, 1, 1048587, 0, 3, 1114123, 131072, 1, 1179659, 131072, 1, 1245195, 131072, 1, 1310731, 131072, 1, 1376267, 131072, 1, 1441803, 131072, 1, 655372, 0, 3, 720908, 131072, 1, 786444, 131072, 1, 851980, 393216, 1, 917516, 393216, 1, 983052, 131072, 1, 1048588, 0, 3, 1114124, 131072, 1, 1179660, 131072, 1, 1245196, 131072, 1, 1310732, 131072, 1, 1376268, 131072, 1, 1441804, 131072, 1, 65576, 131072, 1, 131112, 131072, 1, 196648, 131072, 1, 262184, 131072, 1, 327720, 131072, 1, 393256, 131072, 1, -65516, 131072, 1, -65517, 131072, 1, -65518, 131072, 1, -65519, 131072, 1, -65520, 131072, 1, -65521, 131072, 1, -65522, 131072, 1, -65523, 131072, 1, -65524, 131072, 1, -65525, 131072, 1, -65526, 131072, 1, -65527, 131072, 1, -65528, 131072, 1, -65529, 131072, 1, -65530, 131072, 1, -65531, 131072, 1, -65532, 131072, 1, -65533, 131072, 1, -65534, 131072, 1, -65535, 131072, 1, -65536, 131072, 1, 1048606, 393216, 1, 786468, 131072, 1, 852004, 131072, 1, 983076, 131072, 1, 1507327, 131072, 1, 1441791, 131072, 1, 1376255, 131072, 1, 1310719, 131072, 1, 1245183, 131072, 1, 1179647, 131072, 1, 1114111, 131072, 1, 1048575, 131072, 1, 983039, 131072, 1, 917503, 131072, 1, 851967, 131072, 1, 786431, 131072, 1, 720895, 131072, 1, 655359, 131072, 1, 589823, 131072, 1, 524287, 131072, 1, 458751, 131072, 1, 393215, 131072, 1, 327679, 131072, 1, 262143, 131072, 1, 196607, 131072, 1, 131071, 131072, 1, 65535, 131072, 1, 786472, 131072, 1, 720936, 131072, 1, 655400, 131072, 1, 589864, 131072, 1, 524328, 131072, 1, 458792, 131072, 1, 1310760, 131072, 1, 1245224, 131072, 1, 1179688, 131072, 1, 917544, 131072, 1, 852008, 131072, 1, 1376295, 262144, 7, 1310759, 262144, 7, 1245223, 262144, 7, 1179687, 262144, 7, 1114151, 262144, 7, 917543, 131072, 1, 852007, 131072, 1, 786471, 131072, 1, 720935, 131072, 1, 655399, 131072, 1, 589863, 131072, 1, 524327, 131072, 1, 458791, 131072, 1, 393255, 131072, 1, 393254, 262144, 7, 393253, 262144, 7, 852005, 131072, 1, 917541, 131072, 1, 1048613, 262144, 7, 458789, 262144, 7, 524325, 131072, 1, 589861, 131072, 1, 655397, 131072, 1, 720933, 131072, 1, 786469, 131072, 1, 458790, 262144, 7, 524326, 131072, 1, 589862, 131072, 1, 655398, 131072, 1, 720934, 131072, 1, 786470, 131072, 1, 852006, 131072, 1, 917542, 131072, 1, 1048614, 262144, 7, 23, 131072, 1, 24, 131072, 1, 25, 131072, 1, 26, 131072, 1, 27, 131072, 1, -65508, 131072, 1, -65507, 131072, 1, -65506, 131072, 1, -65505, 131072, 1, -65504, 131072, 1, -65503, 131072, 1, -65502, 131072, 1, -65501, 131072, 1, -65500, 131072, 1, 36, 262144, 7, -65499, 131072, 1, 37, 262144, 7, -65498, 131072, 1, 38, 131072, 1, -65497, 131072, 1, 39, 131072, 1, -65496, 131072, 1, 40, 131072, 1, 1441832, 131072, 1, 1376296, 131072, 1, 1114152, 131072, 1, 983080, 131072, 1, 983079, 131072, 1, 983078, 131072, 1, 983077, 131072, 1, 917540, 131072, 1, 917539, 131072, 1, 917538, 131072, 1, 917537, 131072, 1, 917536, 0, 3, 917535, 131072, 1, 917534, 131072, 1, 983071, 0, 3, 983070, 0, 3, 983069, 0, 3, 983068, 0, 3, 983067, 131072, 1, 1048603, 0, 3, 1048604, 0, 3, 1114141, 0, 3, 1114142, 0, 3, 1179678, 131072, 1, 1048605, 0, 3, 1114140, 131072, 1, 1179676, 0, 3, 1179677, 0, 3, 1048616, 131072, 1, 1048615, 262144, 7, 1114150, 262144, 7, 1114149, 262144, 7, 1114148, 262144, 7, 1114147, 131072, 1, 1114146, 131072, 1, 1114145, 0, 3, 1114144, 0, 3, 1114143, 0, 3, 1179679, 131072, 1, 1245215, 393216, 5, 1310751, 131072, 1, 1310752, 131072, 1, 1572863, 131072, 1, 1507328, 131072, 1, 1507329, 131072, 1, 1507330, 131072, 1, 1507331, 131072, 1, 1507332, 131072, 1, 1507333, 131072, 1, 1507334, 131072, 1, 1507335, 131072, 1, 1507336, 131072, 1, 1507337, 131072, 1, 1507338, 131072, 1, 1507339, 131072, 1, 1507340, 131072, 1, 1507341, 131072, 1, 1507342, 131072, 1, 1507343, 131072, 1, 1507344, 131072, 1, 1507345, 131072, 1, 1507346, 131072, 1, 1507347, 131072, 1, 1507348, 131072, 1, 1507349, 131072, 1, 1507350, 393216, 5, 1507351, 393216, 5, 1507352, 393216, 5, 1507353, 393216, 5, 1507354, 393216, 5, 1507355, 393216, 5, 1507356, 393216, 5, 1507357, 393216, 5, 1507358, 393216, 5, 1507359, 393216, 5, 1507360, 393216, 5, 1507361, 393216, 5, 1507362, 131072, 1, 1507363, 131072, 1, 1507364, 131072, 1, 1507365, 131072, 1, 1507366, 131072, 1, 1507367, 131072, 1, 1507368, 131072, 1, 1114114, 393216, 1, 1179650, 393216, 1, 1245186, 131072, 1, -1, 131072, 1, 393239, 131072, 1, 393238, 131072, 1, 327702, 0, 3, 327701, 0, 3, 393237, 131072, 1, 393240, 131072, 1, 393241, 131072, 1, 327705, 0, 3, 327704, 0, 3, 327703, 0, 3, -65509, 131072, 1, -65510, 131072, 1, -65511, 131072, 1, -65512, 131072, 1, -65513, 131072, 1, -65514, 131072, 1, -65515, 131072, 1, 21, 131072, 1, 28, 131072, 1, 65564, 393216, 1, 131100, 393216, 1, 196636, 131072, 1, 29, 131072, 1, 65565, 131072, 1, 131101, 131072, 1, 196637, 131072, 1, 65570, 262144, 7, 65569, 262144, 7, 65568, 131072, 1, 65567, 131072, 1, 65566, 131072, 1, 131102, 131072, 1, 131103, 131072, 1, 131104, 131072, 1, 131105, 262144, 7, 131106, 262144, 7, 131107, 131072, 1, 196641, 131072, 1, 196642, 262144, 7, 196643, 262144, 7, 33, 131072, 1, 34, 131072, 1, 35, 262144, 7, 65571, 262144, 7, 196640, 131072, 1, 196639, 131072, 1, 196638, 131072, 1, 30, 131072, 1, 31, 131072, 1, 32, 131072, 1) script = ExtResource("2_7qj53") offset_tilemap = NodePath("../OffsetTileMap") [node name="OffsetTileMap" type="TileMap" parent="."] position = Vector2(-8, -8) tile_set = SubResource("TileSet_77ea1") format = 2 layer_0/tile_data = PackedInt32Array(0, 393216, 5, 1, 393216, 5, 65536, 393216, 5, 65537, 393216, 5, 131072, 393216, 5, 131073, 393216, 5, 196608, 393216, 5, 196609, 393216, 5, 262144, 393216, 5, 262145, 393216, 5, 327680, 393216, 5, 327681, 393216, 5, 393216, 393216, 5, 393217, 393216, 5, 458752, 393216, 5, 458753, 393216, 5, 524288, 393216, 5, 524289, 196608, 1, 589824, 393216, 5, 589825, 131072, 0, 655360, 65536, 7, 655361, 196608, 4, 2, 393216, 5, 65538, 196608, 1, 131074, 131072, 0, 196610, 393216, 5, 262146, 393216, 5, 327682, 393216, 5, 393218, 393216, 5, 458754, 393216, 5, 524290, 65536, 2, 589826, 196608, 0, 655362, 196608, 4, 3, 393216, 5, 65539, 131072, 2, 131075, 65536, 1, 196611, 393216, 5, 262147, 196608, 1, 327683, 196608, 2, 393219, 196608, 2, 458755, 196608, 2, 524291, 196608, 3, 589827, 196608, 0, 655363, 196608, 4, 4, 393216, 5, 65540, 393216, 5, 131076, 393216, 5, 196612, 196608, 1, 262148, 196608, 3, 327684, 262144, 3, 393220, 65536, 3, 458756, 65536, 0, 524292, 65536, 0, 589828, 65536, 1, 655364, 196608, 4, 5, 393216, 5, 65541, 393216, 5, 131077, 393216, 5, 196613, 65536, 2, 262149, 262144, 3, 327685, 262144, 3, 393221, 0, 0, 458757, 131072, 0, 524293, 393216, 5, 589829, 393216, 5, 655365, 196608, 4, 6, 393216, 5, 65542, 393216, 5, 131078, 393216, 5, 196614, 65536, 2, 262150, 65536, 3, 327686, 65536, 0, 393222, 0, 2, 458758, 196608, 0, 524294, 393216, 5, 589830, 393216, 5, 655366, 0, 4, 7, 393216, 5, 65543, 393216, 5, 131079, 393216, 5, 196615, 65536, 2, 262151, 196608, 0, 327687, 393216, 5, 393223, 65536, 2, 458759, 196608, 0, 524295, 196608, 1, 589831, 131072, 0, 655367, 393216, 5, 8, 393216, 5, 65544, 196608, 1, 131080, 196608, 2, 196616, 196608, 3, 262152, 196608, 0, 327688, 393216, 5, 393224, 65536, 2, 458760, 0, 0, 524296, 196608, 3, 589832, 196608, 0, 655368, 393216, 5, 9, 393216, 5, 65545, 131072, 2, 131081, 65536, 0, 196617, 65536, 0, 262153, 65536, 1, 327689, 393216, 5, 393225, 65536, 2, 458761, 65536, 3, 524297, 65536, 0, 589833, 65536, 1, 655369, 393216, 5, 10, 393216, 5, 65546, 393216, 5, 131082, 393216, 5, 196618, 393216, 5, 262154, 393216, 5, 327690, 393216, 5, 393226, 131072, 2, 458762, 65536, 1, 524298, 196608, 1, 589834, 196608, 2, 655370, 196608, 2, 11, 393216, 5, 65547, 196608, 1, 131083, 196608, 2, 196619, 131072, 0, 262155, 393216, 5, 327691, 393216, 5, 393227, 393216, 5, 458763, 393216, 5, 524299, 131072, 2, 589835, 65536, 0, 655371, 65536, 0, 12, 393216, 5, 65548, 65536, 2, 131084, 262144, 3, 196620, 196608, 0, 262156, 196608, 1, 327692, 196608, 2, 393228, 196608, 2, 458764, 196608, 2, 524300, 196608, 2, 589836, 196608, 2, 655372, 196608, 2, 13, 393216, 5, 65549, 131072, 2, 131085, 65536, 0, 196621, 65536, 1, 262157, 131072, 2, 327693, 65536, 0, 393229, 65536, 0, 458765, 65536, 0, 524301, 65536, 0, 589837, 65536, 0, 655373, 65536, 0, 14, 393216, 5, 65550, 393216, 5, 131086, 393216, 5, 196622, 393216, 5, 262158, 393216, 5, 327694, 196608, 1, 393230, 196608, 2, 458766, 131072, 0, 524302, 393216, 5, 589838, 393216, 5, 655374, 393216, 5, 720909, 131072, 3, 720910, 131072, 2, 786445, 131072, 0, 786446, 65536, 1, 851981, 196608, 4, 851982, 0, 4, 917517, 131072, 9, 917518, 196608, 6, 1179661, 393216, 5, 1179662, 393216, 5, 1245197, 393216, 5, 1245198, 393216, 5, 1310733, 393216, 5, 1310734, 393216, 5, 1376269, 393216, 5, 1376270, 393216, 5, 1441805, 393216, 5, 1441806, 393216, 5, 1507341, 393216, 5, 1507342, 393216, 5, 15, 393216, 5, 65551, 393216, 5, 131087, 196608, 1, 196623, 196608, 2, 262159, 196608, 2, 327695, 0, 1, 393231, 0, 2, 458767, 196608, 0, 524303, 393216, 5, 589839, 393216, 5, 655375, 393216, 5, 720911, 393216, 5, 786447, 393216, 5, 851983, 393216, 5, 917519, 393216, 5, 983055, 393216, 5, 1179663, 393216, 5, 1245199, 393216, 5, 1310735, 393216, 5, 1376271, 393216, 5, 1441807, 393216, 5, 1507343, 393216, 5, 16, 393216, 5, 65552, 393216, 5, 131088, 131072, 2, 196624, 65536, 0, 262160, 65536, 0, 327696, 65536, 1, 393232, 65536, 2, 458768, 0, 0, 524304, 196608, 2, 589840, 196608, 2, 655376, 196608, 2, 720912, 196608, 2, 786448, 196608, 2, 1179664, 393216, 5, 1245200, 393216, 5, 1310736, 393216, 5, 1376272, 393216, 5, 1441808, 393216, 5, 1507344, 393216, 5, 17, 393216, 5, 65553, 393216, 5, 131089, 393216, 5, 196625, 65536, 7, 262161, 0, 6, 327697, 393216, 5, 393233, 65536, 2, 458769, 65536, 3, 524305, 65536, 0, 589841, 65536, 0, 655377, 65536, 0, 786449, 0, 2, 1179665, 393216, 5, 1245201, 393216, 5, 1310737, 393216, 5, 1376273, 393216, 5, 1441809, 393216, 5, 1507345, 393216, 5, 18, 393216, 5, 65554, 393216, 5, 131090, 393216, 5, 196626, 0, 4, 262162, 196608, 7, 327698, 196608, 1, 393234, 0, 1, 458770, 65536, 1, 524306, 393216, 5, 589842, 393216, 5, 655378, 393216, 5, 786450, 196608, 3, 851986, 196608, 0, 917522, 393216, 5, 983058, 393216, 5, 1179666, 393216, 5, 1245202, 393216, 5, 1441810, 393216, 5, 1507346, 393216, 5, 19, 393216, 5, 65555, 393216, 5, 131091, 393216, 5, 196627, 393216, 5, 262163, 393216, 5, 327699, 65536, 2, 393235, 196608, 0, 458771, 393216, 5, 524307, 393216, 5, 589843, 393216, 5, 786451, 65536, 3, 851987, 65536, 1, 917523, 393216, 5, 983059, 393216, 5, 1179667, 393216, 5, 1245203, 196608, 1, 1441811, 393216, 5, 1507347, 393216, 5, 20, 393216, 5, 65556, 393216, 5, 131092, 393216, 5, 196628, 393216, 5, 262164, 393216, 5, 327700, 65536, 2, 393236, 196608, 0, 458772, 393216, 5, 524308, 393216, 5, 589844, 393216, 5, 786452, 65536, 1, 851988, 393216, 5, 917524, 393216, 5, 983060, 393216, 5, 1310740, 262144, 3, 1441812, 393216, 5, 1507348, 393216, 5, 21, 393216, 5, 65557, 393216, 5, 131093, 393216, 5, 458773, 393216, 5, 524309, 393216, 5, 589845, 393216, 5, 786453, 393216, 5, 851989, 393216, 5, 917525, 393216, 5, 983061, 393216, 5, 1179669, 196608, 3, 1441813, 393216, 5, 1507349, 393216, 5, 22, 393216, 5, 65558, 393216, 5, 131094, 393216, 5, 196630, 393216, 5, 262166, 393216, 5, 458774, 393216, 5, 524310, 393216, 5, 589846, 393216, 5, 786454, 393216, 5, 851990, 393216, 5, 917526, 393216, 5, 983062, 393216, 5, 1310742, 393216, 5, 1376278, 393216, 5, 1441814, 393216, 5, 1507350, 393216, 5, 23, 393216, 5, 65559, 65536, 7, 131095, 65536, 4, 196631, 65536, 4, 262167, 0, 6, 458775, 393216, 5, 524311, 393216, 5, 589847, 393216, 5, 786455, 393216, 5, 851991, 393216, 5, 917527, 393216, 5, 1245207, 393216, 5, 1310743, 393216, 5, 1376279, 393216, 5, 1441815, 393216, 5, 1507351, 393216, 5, 65560, 196608, 4, 131096, 196608, 5, 196632, 131072, 4, 262168, 65536, 6, 458776, 393216, 5, 524312, 393216, 5, 589848, 393216, 5, 786456, 393216, 5, 851992, 393216, 5, 917528, 393216, 5, 1245208, 393216, 5, 1310744, 393216, 5, 1376280, 393216, 5, 1441816, 393216, 5, 1507352, 393216, 5, 65561, 196608, 4, 131097, 65536, 6, 196633, 196608, 4, 262169, 65536, 6, 458777, 393216, 5, 524313, 393216, 5, 589849, 393216, 5, 786457, 393216, 5, 851993, 393216, 5, 917529, 393216, 5, 1310745, 393216, 5, 1376281, 393216, 5, 1441817, 393216, 5, 1507353, 393216, 5, 65562, 196608, 4, 131098, 65536, 6, 196634, 196608, 4, 262170, 65536, 6, 458778, 393216, 5, 524314, 393216, 5, 589850, 393216, 5, 786458, 393216, 5, 851994, 393216, 5, 917530, 393216, 5, 1310746, 393216, 5, 1376282, 393216, 5, 1441818, 393216, 5, 1507354, 393216, 5, 65563, 196608, 4, 131099, 131072, 6, 196635, 65536, 5, 262171, 65536, 6, 524315, 196608, 2, 786459, 393216, 5, 851995, 393216, 5, 917531, 393216, 5, 983067, 393216, 5, 1310747, 393216, 5, 1376283, 393216, 5, 1441819, 393216, 5, 1507355, 393216, 5, 65564, 196608, 4, 131100, 131072, 9, 196636, 196608, 5, 262172, 196608, 7, 327708, 65536, 2, 393244, 262144, 3, 458780, 65536, 3, 524316, 65536, 0, 589852, 0, 2, 655388, 65536, 3, 720924, 65536, 1, 786460, 393216, 5, 851996, 393216, 5, 917532, 393216, 5, 983068, 196608, 1, 1310748, 393216, 5, 1376284, 393216, 5, 1441820, 393216, 5, 1507356, 393216, 5, 65565, 0, 4, 131101, 196608, 6, 196637, 196608, 7, 262173, 393216, 5, 327709, 131072, 2, 393245, 65536, 0, 458781, 65536, 1, 524317, 393216, 5, 589853, 65536, 2, 655389, 0, 0, 720925, 131072, 0, 786461, 393216, 5, 851997, 393216, 5, 917533, 393216, 5, 1310749, 393216, 5, 1376285, 393216, 5, 1441821, 393216, 5, 1507357, 393216, 5, 327710, 393216, 5, 393246, 393216, 5, 458782, 196608, 1, 524318, 196608, 2, 589854, 196608, 3, 655390, 262144, 3, 720926, 196608, 0, 786462, 393216, 5, 851998, 393216, 5, 917534, 393216, 5, 1310750, 393216, 5, 1376286, 393216, 5, 1441822, 393216, 5, 1507358, 393216, 5, 327711, 393216, 5, 393247, 196608, 1, 458783, 196608, 3, 524319, 65536, 3, 589855, 65536, 0, 655391, 0, 2, 720927, 0, 0, 1245215, 393216, 5, 1376287, 393216, 5, 1441823, 393216, 5, 1507359, 393216, 5, 327712, 393216, 5, 524320, 65536, 1, 589856, 393216, 5, 655392, 131072, 2, 852000, 262144, 3, 1376288, 393216, 5, 1441824, 393216, 5, 1507360, 393216, 5, 1114145, 262144, 3, 1245216, 393216, 5, 1245217, 393216, 5, 1310752, 393216, 5, 1310753, 393216, 5, 1376289, 393216, 5, 1507361, 393216, 5, 983074, 393216, 5, 1048610, 131072, 2, 1245218, 393216, 5, 1310754, 393216, 5, 1376290, 393216, 5, 1441826, 393216, 5, 1507362, 393216, 5, 983075, 393216, 5, 1048611, 393216, 5, 1114147, 393216, 5, 1179683, 458752, 5, 1507363, 393216, 4, 983076, 393216, 5, 1048612, 393216, 5, 1245220, 0, 11, 1376293, 131072, 9, 1310758, 131072, 9, 1441832, 327680, 5, 1507368, 393216, 5, 720896, 65536, 4, 720897, 196608, 5, 786432, 65536, 4, 786433, 196608, 6, 851968, 65536, 4, 851969, 196608, 6, 917504, 65536, 4, 917505, 196608, 6, 983040, 65536, 4, 983041, 131072, 4, 1048576, 65536, 4, 1048577, 196608, 5, 1114112, 65536, 4, 1114113, 131072, 4, 1179648, 0, 6, 1179649, 65536, 6, 1245184, 393216, 5, 1245185, 393216, 5, 1310720, 393216, 5, 1310721, 393216, 5, 1376256, 393216, 5, 1376257, 393216, 5, 1441792, 393216, 5, 1441793, 393216, 5, 1507328, 393216, 5, 1507329, 393216, 5, 720898, 65536, 6, 851970, 131072, 0, 917506, 393216, 5, 983042, 196608, 4, 1048578, 65536, 6, 1114114, 196608, 4, 1179650, 131072, 6, 1245186, 0, 6, 1310722, 393216, 5, 1376258, 393216, 5, 1441794, 393216, 5, 1507330, 393216, 5, 720899, 65536, 6, 786435, 65536, 2, 851971, 196608, 0, 917507, 393216, 5, 983043, 196608, 4, 1048579, 65536, 6, 1114115, 0, 4, 1179651, 196608, 6, 1245187, 196608, 7, 1310723, 393216, 5, 1376259, 393216, 5, 1441795, 393216, 5, 1507331, 393216, 5, 720900, 65536, 6, 786436, 65536, 2, 851972, 196608, 0, 917508, 393216, 5, 983044, 196608, 4, 1048580, 65536, 6, 1114116, 393216, 5, 1179652, 393216, 5, 1245188, 65536, 7, 1310724, 0, 6, 1376260, 393216, 5, 1441796, 393216, 5, 1507332, 393216, 5, 720901, 65536, 6, 786437, 65536, 2, 851973, 196608, 0, 917509, 393216, 5, 983045, 0, 4, 1048581, 0, 5, 1114117, 65536, 4, 1179653, 65536, 4, 1245189, 131072, 7, 1310725, 196608, 7, 1376261, 393216, 5, 1441797, 393216, 5, 1507333, 393216, 5, 720902, 196608, 7, 786438, 65536, 2, 851974, 196608, 0, 917510, 65536, 7, 983046, 65536, 4, 1048582, 65536, 5, 1114118, 196608, 5, 1179654, 196608, 6, 1245190, 196608, 7, 1310726, 393216, 5, 1376262, 393216, 5, 1441798, 393216, 5, 1507334, 393216, 5, 720903, 393216, 5, 786439, 65536, 2, 851975, 196608, 0, 917511, 0, 4, 983047, 196608, 6, 1048583, 196608, 6, 1114119, 196608, 7, 1179655, 393216, 5, 1245191, 393216, 5, 1310727, 393216, 5, 1376263, 393216, 5, 1441799, 393216, 5, 1507335, 393216, 5, 720904, 393216, 5, 786440, 65536, 2, 851976, 0, 0, 917512, 131072, 0, 983048, 393216, 5, 1048584, 393216, 5, 1114120, 393216, 5, 1179656, 393216, 5, 1245192, 393216, 5, 1310728, 393216, 5, 1376264, 393216, 5, 1441800, 393216, 5, 1507336, 393216, 5, 720905, 393216, 5, 786441, 65536, 2, 851977, 262144, 3, 917513, 0, 0, 983049, 196608, 2, 1048585, 196608, 2, 1114121, 196608, 2, 1179657, 196608, 2, 1245193, 131072, 0, 1310729, 393216, 5, 1376265, 393216, 5, 1441801, 393216, 5, 1507337, 393216, 5, 720906, 196608, 2, 786442, 196608, 3, 851978, 65536, 3, 917514, 65536, 0, 983050, 65536, 0, 1048586, 0, 2, 1114122, 65536, 3, 1179658, 65536, 0, 1245194, 65536, 1, 1310730, 393216, 5, 1376266, 393216, 5, 1441802, 393216, 5, 1507338, 393216, 5, 720907, 65536, 0, 786443, 65536, 0, 851979, 65536, 1, 917515, 393216, 5, 983051, 393216, 5, 1048587, 65536, 2, 1114123, 196608, 0, 1179659, 393216, 5, 1245195, 393216, 5, 1310731, 393216, 5, 1376267, 393216, 5, 1441803, 393216, 5, 1507339, 393216, 5, 720908, 131072, 0, 786444, 393216, 5, 851980, 65536, 7, 917516, 65536, 4, 983052, 0, 6, 1179660, 393216, 5, 1245196, 393216, 5, 1310732, 393216, 5, 1376268, 393216, 5, 1441804, 393216, 5, 1507340, 393216, 5, -65514, 131072, 1, -65513, 131072, 1, -65515, 131072, 1, -65516, 131072, 1, -65517, 131072, 1, -65518, 131072, 1, -65519, 131072, 1, -65520, 131072, 1, -65521, 131072, 1, -65522, 131072, 1, -65523, 131072, 1, -65524, 131072, 1, -65525, 131072, 1, -65526, 131072, 1, -65527, 131072, 1, -65528, 131072, 1, -65529, 131072, 1, -65530, 131072, 1, -65531, 131072, 1, -65532, 131072, 1, -65533, 131072, 1, -65534, 131072, 1, -65535, 131072, 1, -65536, 131072, 1, 1572864, 131072, 1, 1572865, 131072, 1, 1572866, 131072, 1, 1572867, 131072, 1, 1572868, 131072, 1, 1572869, 131072, 1, 1572870, 131072, 1, 1572871, 131072, 1, 1572872, 131072, 1, 1572873, 131072, 1, 1572874, 131072, 1, 1572875, 131072, 1, 1572876, 131072, 1, 1572884, 131072, 1, 1572885, 131072, 1, 1572886, 131072, 1, 1572887, 131072, 1, 1572888, 131072, 1, 1572883, 131072, 1, 1572882, 131072, 1, 1572881, 131072, 1, 1572880, 131072, 1, 1572879, 131072, 1, 1572878, 131072, 1, 1572877, 131072, 1, 1572889, 131072, 1, 1572890, 131072, 1, 1572891, 131072, 1, 1572892, 131072, 1, 1572893, 131072, 1, 1572894, 131072, 1, 1572895, 131072, 1, 1572896, 131072, 1, 1572897, 131072, 1, 1572898, 131072, 1, 1572899, 131072, 1, 1572900, 131072, 1, 1572901, 131072, 1, 1572902, 131072, 1, 1572903, 131072, 1, 1572904, 131072, 1, 983077, 393216, 5, 1572863, 131072, 1, 1638399, 131072, 1, 1507327, 131072, 1, 1441791, 131072, 1, 1376255, 131072, 1, 1310719, 131072, 1, 1245183, 131072, 1, 1179647, 131072, 1, 1114111, 131072, 1, 1048575, 131072, 1, 983039, 131072, 1, 917503, 131072, 1, 851967, 131072, 1, 786431, 131072, 1, 720895, 131072, 1, 655359, 131072, 1, 589823, 131072, 1, 524287, 131072, 1, 458751, 131072, 1, 393215, 131072, 1, 327679, 131072, 1, 262143, 131072, 1, 196607, 131072, 1, 131071, 131072, 1, 65535, 131072, 1, -1, 131072, 1, 1310761, 131072, 1, 1376297, 131072, 1, 1245225, 131072, 1, 1179689, 131072, 1, 983080, 393216, 5, 983081, 131072, 1, 983079, 393216, 5, 983078, 393216, 5, -65512, 131072, 1, 24, 393216, 5, -65511, 131072, 1, 25, 393216, 5, -65510, 131072, 1, 26, 393216, 5, -65509, 131072, 1, 27, 393216, 5, -65508, 131072, 1, 28, 393216, 5, -65507, 131072, 1, 29, 393216, 5, -65506, 131072, 1, 30, 393216, 5, -65505, 131072, 1, 31, 393216, 5, -65504, 131072, 1, 32, 393216, 5, 1507369, 131072, 1, 1572905, 131072, 1, 1441833, 131072, 1, 1114153, 131072, 1, 1048616, 393216, 6, 1048617, 131072, 1, 1048605, 262144, 3, 1245206, 65536, 1, 655385, 65536, 2, 720921, 196608, 0, 655384, 65536, 2, 720920, 196608, 0, 655382, 65536, 2, 720918, 196608, 0, 720914, 196608, 1, 655379, 196608, 1, 655380, 65536, 2, 983063, 196608, 1, 393248, 131072, 2, 458784, 65536, 0, 196629, 393216, 5, 262165, 393216, 5, 327701, 65536, 2, 393237, 196608, 0, 327702, 65536, 2, 393238, 196608, 0, 327703, 65536, 2, 393239, 196608, 0, 327704, 65536, 2, 327705, 65536, 2, 393240, 196608, 0, 458779, 196608, 2, 393241, 196608, 0, 393242, 196608, 0, 393243, 0, 0, 327706, 65536, 2, 327707, 65536, 2, 262174, 393216, 5, 262175, 393216, 5, 262176, 393216, 5, 65566, 393216, 5, 131102, 393216, 5, 196638, 393216, 5, 65568, 393216, 5, 131104, 393216, 5, 65567, 393216, 5, 131103, 393216, 5, 196639, 393216, 5, 196640, 393216, 5, 786434, 196608, 1, 720928, 65536, 0, 917536, 0, 0, 786463, 196608, 2, 851999, 196608, 2, 786464, 0, 2, 262177, 458752, 5, 327713, 458752, 6, 393249, 393216, 4, 458785, 393216, 5, 524321, 393216, 5, 589857, 393216, 5, 655393, 393216, 5, 720929, 393216, 5, 786465, 131072, 2, 852001, 65536, 0, 917537, 65536, 0, 262178, 458752, 7, 327714, 327680, 7, 393250, 327680, 5, 458786, 393216, 5, 524322, 393216, 5, 589858, 393216, 5, 655394, 393216, 5, 720930, 458752, 5, 786466, 393216, 4, 852002, 393216, 5, 917538, 393216, 5, 262179, 327680, 7, 327715, 327680, 5, 393251, 393216, 5, 458787, 393216, 5, 524323, 458752, 5, 589859, 393216, 4, 655395, 393216, 5, 720931, 393216, 6, 852003, 393216, 5, 917539, 393216, 5, 262180, 327680, 5, 327716, 393216, 5, 393252, 393216, 5, 458788, 458752, 5, 524324, 458752, 7, 589860, 262144, 4, 655396, 393216, 4, 720932, 393216, 5, 786468, 393216, 5, 852004, 393216, 5, 917540, 393216, 5, 65572, 0, 11, 65573, 0, 11, 131108, 458752, 4, 131109, 262144, 4, 196644, 393216, 6, 196645, 393216, 4, 262181, 393216, 5, 327717, 393216, 5, 393253, 458752, 5, 524325, 327680, 7, 589861, 327680, 4, 720933, 393216, 5, 786469, 393216, 5, 65574, 327680, 4, 131110, 262144, 6, 196646, 262144, 4, 262182, 458752, 6, 327718, 458752, 6, 65575, 393216, 5, 131111, 393216, 6, 196647, 327680, 4, 262183, 327680, 4, 327719, 327680, 4, 393255, 327680, 4, 65576, 393216, 5, 131112, 393216, 5, 196648, 393216, 5, 262184, 393216, 5, 327720, 393216, 5, 393256, 393216, 5, 65577, 131072, 1, 131113, 131072, 1, 196649, 131072, 1, 262185, 131072, 1, 327721, 131072, 1, 393257, 131072, 1, 458792, 393216, 5, 458793, 131072, 1, 852005, 393216, 5, 917541, 393216, 5, 786472, 393216, 5, 786473, 131072, 1, 852008, 393216, 5, 852009, 131072, 1, 720936, 393216, 5, 720937, 131072, 1, 655400, 393216, 5, 655401, 131072, 1, 589864, 393216, 5, 589865, 131072, 1, 524328, 393216, 5, 524329, 131072, 1, 917544, 393216, 5, 917545, 131072, 1, 917543, 393216, 5, 852007, 393216, 5, 786471, 393216, 5, 720935, 393216, 5, 655399, 393216, 5, 589863, 393216, 5, 524327, 327680, 5, 458791, 327680, 4, 458790, 0, 11, 852006, 393216, 5, 524326, 458752, 4, 589862, 393216, 5, 655398, 393216, 5, 720934, 393216, 5, 786470, 393216, 5, -65503, 131072, 1, 33, 393216, 5, -65502, 131072, 1, 34, 393216, 5, -65501, 131072, 1, 35, 458752, 5, -65500, 131072, 1, 36, 327680, 6, -65499, 131072, 1, 37, 327680, 6, -65498, 131072, 1, 38, 393216, 6, -65497, 131072, 1, 39, 393216, 5, -65496, 131072, 1, 40, 393216, 5, -65495, 131072, 1, 41, 131072, 1, 65570, 327680, 6, 65571, 458752, 7, 131106, 0, 11, 131107, 327680, 7, 65569, 458752, 5, 131105, 458752, 6, 196641, 393216, 4, 196642, 262144, 4, 196643, 262144, 6, 589851, 196608, 2, 655386, 65536, 2, 720922, 196608, 0, 655387, 196608, 3, 720923, 196608, 0, 786467, 327680, 5, 655397, 327680, 5, 917542, 393216, 5, 983053, 65536, 6, 983054, 196608, 7, 458789, 458752, 7, 393254, 458752, 7, 1245222, 131072, 9, 1114151, 0, 11, 1114150, 0, 11, 1048597, 65536, 2, 1114133, 0, 0, 1048598, 131072, 2, 1245205, 65536, 3, 1310741, 65536, 0, 1245204, 196608, 3, 1310739, 196608, 3, 1376275, 196608, 0, 1114134, 0, 2, 1179670, 65536, 3, 1179681, 196608, 0, 1114146, 65536, 0, 1048608, 262144, 0, 983070, 65536, 2, 983071, 65536, 2, 1179676, 65536, 2, 1179674, 0, 2, 1114138, 65536, 3, 1048602, 0, 2, 983065, 65536, 2, 1048601, 0, 0, 983064, 65536, 2, 1048599, 196608, 2, 1048600, 65536, 3, 1114137, 196608, 3, 1179673, 0, 0, 1114136, 0, 2, 1179672, 196608, 0, 1114135, 196608, 3, 1179671, 196608, 0, 917535, 131072, 0, 1114142, 262144, 2, 1114144, 458752, 3, 1048606, 327680, 3, 1310757, 65536, 9, 1179680, 196608, 0, 1179677, 196608, 3, 1179678, 65536, 3, 1245212, 196608, 0, 1245209, 131072, 0, 1245214, 65536, 1, 983066, 131072, 2, 1245210, 196608, 0, 655381, 65536, 2, 720917, 196608, 0, 655383, 65536, 2, 720919, 196608, 0, 1114140, 196608, 0, 983072, 196608, 3, 983073, 65536, 0, 1048604, 196608, 3, 1114141, 0, 0, 1048607, 458752, 0, 1114143, 327680, 2, 1048609, 0, 2, 1310751, 393216, 5, 1441825, 393216, 5, 1179682, 65536, 1, 1179679, 196608, 0, 1048603, 65536, 2, 1114139, 196608, 0, 1179675, 65536, 2, 1245211, 196608, 0, 983069, 65536, 2, 1245213, 196608, 0, 1310738, 196608, 1, 1376274, 131072, 0, 1376277, 65536, 1, 720913, 65536, 0, 720915, 196608, 3, 720916, 65536, 3, 1179668, 196608, 1, 1376276, 196608, 0, 1048596, 65536, 2, 1114132, 196608, 0, 1048595, 65536, 2, 1114131, 196608, 0, 1048594, 65536, 2, 1114130, 196608, 0, 1114129, 196608, 0, 1114128, 196608, 0, 1048591, 65536, 2, 1114127, 196608, 0, 1048590, 65536, 2, 1114126, 196608, 0, 1048589, 65536, 2, 1114125, 196608, 0, 1048588, 65536, 2, 1114124, 196608, 0, 1048592, 196608, 3, 1048593, 0, 2, 983056, 196608, 2, 983057, 65536, 0, 851984, 196608, 2, 917520, 196608, 2, 851985, 65536, 3, 917521, 65536, 0, 1441828, 0, 10, 1507367, 327680, 5, 1114148, 458752, 5, 1048613, 458752, 5, 1245221, 65536, 8, 1310756, 65536, 11, 1376292, 65536, 8, 1376291, 458752, 6, 1310755, 458752, 6, 1245219, 458752, 6, 1179684, 458752, 7, 1441829, 65536, 10, 1507365, 458752, 4, 1441830, 196608, 11, 1179685, 65536, 11, 1179686, 196608, 8, 1245223, 196608, 10, 1245224, 327680, 4, 1310759, 196608, 10, 1310760, 327680, 4, 1376294, 196608, 9, 1376295, 196608, 11, 1179687, 0, 8, 1507366, 458752, 4, 1441827, 458752, 6, 1507364, 458752, 4, 1441831, 327680, 7, 1376296, 327680, 4, 1048615, 327680, 6, 1114149, 458752, 7, 1048614, 327680, 6, 1179688, 327680, 4, 1114152, 327680, 4) [node name="Cursor" type="AnimatedSprite2D" parent="." node_paths=PackedStringArray("dual_grid_tilemap")] visible = false sprite_frames = SubResource("SpriteFrames_v82uo") frame_progress = 0.0325107 script = ExtResource("5_00xh7") dual_grid_tilemap = NodePath("../WorldTileMap") [node name="Camera2D" type="Camera2D" parent="."] limit_left = 0 limit_top = 0 limit_right = 640 limit_bottom = 360 ================================================ FILE: scripts/cursor.gd ================================================ extends Node2D enum TileType { None, Grass, Dirt, Water, Sand } @export var dual_grid_tilemap: TileMap @onready var cursor = $"." func _ready(): cursor.visible = true func _process(_delta: float) -> void: var coords: Vector2i = dual_grid_tilemap.local_to_map(position) if Input.is_action_pressed("left_click"): dual_grid_tilemap.set_tile(coords, dual_grid_tilemap.terrain_atlas_coords[TileType.Dirt][0]) elif Input.is_action_pressed("right_click"): dual_grid_tilemap.set_tile(coords, dual_grid_tilemap.terrain_atlas_coords[TileType.Grass][0]) func _physics_process(_delta: float) -> void: var world_pos = get_world_pos_tile(get_global_mouse_position()) global_position = world_pos + Vector2i(8, 8) func get_world_pos_tile(world_pos: Vector2) -> Vector2i: var x_int: int = int(floor(world_pos.x / 16) * 16) var y_int: int = int(floor(world_pos.y / 16) * 16) return Vector2i(x_int, y_int) ================================================ FILE: scripts/tilemap.gd ================================================ @tool extends TileMap const NEIGHBOURS = [Vector2i(0, 0), Vector2i(1, 0), Vector2i(0, 1), Vector2i(1, 1)] enum TileType { None, Grass, Dirt, Water, Sand } @export var offset_tilemap: TileMap @export var atlas_source_id: int = 0 @export var terrain_atlas_coords: Dictionary = { TileType.Grass: [Vector2i(2, 1), Vector2i(0, 7), Vector2i(6, 5)], TileType.Dirt: [Vector2i(0, 3), Vector2i(4, 3)], TileType.Water: [Vector2i(6, 1), Vector2i(2, 5), Vector2i(2, 9)], TileType.Sand: [Vector2i(4, 7), Vector2i(0, 11)] } var neighbours_to_atlas_coord := { # First terrain combination: grass and dirt [TileType.Dirt, TileType.Dirt, TileType.Grass, TileType.Dirt]: Vector2i(0, 0), [TileType.Dirt, TileType.Grass, TileType.Dirt, TileType.Grass]: Vector2i(1, 0), [TileType.Grass, TileType.Dirt, TileType.Grass, TileType.Grass]: Vector2i(2, 0), [TileType.Dirt, TileType.Dirt, TileType.Grass, TileType.Grass]: Vector2i(3, 0), [TileType.Grass, TileType.Dirt, TileType.Dirt, TileType.Grass]: Vector2i(0, 1), [TileType.Dirt, TileType.Grass, TileType.Grass, TileType.Grass]: Vector2i(1, 1), [TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass]: Vector2i(2, 1), [TileType.Grass, TileType.Grass, TileType.Grass, TileType.Dirt]: Vector2i(3, 1), [TileType.Dirt, TileType.Grass, TileType.Dirt, TileType.Dirt]: Vector2i(0, 2), [TileType.Grass, TileType.Grass, TileType.Dirt, TileType.Dirt]: Vector2i(1, 2), [TileType.Grass, TileType.Grass, TileType.Dirt, TileType.Grass]: Vector2i(2, 2), [TileType.Grass, TileType.Dirt, TileType.Grass, TileType.Dirt]: Vector2i(3, 2), [TileType.Dirt, TileType.Dirt, TileType.Dirt, TileType.Dirt]: Vector2i(0, 3), [TileType.Dirt, TileType.Dirt, TileType.Dirt, TileType.Grass]: Vector2i(1, 3), [TileType.Dirt, TileType.Grass, TileType.Grass, TileType.Dirt]: Vector2i(2, 3), [TileType.Grass, TileType.Dirt, TileType.Dirt, TileType.Dirt]: Vector2i(3, 3), # Second terrain combination: water and dirt [TileType.Dirt, TileType.Dirt, TileType.Water, TileType.Dirt]: Vector2i(4, 0), [TileType.Dirt, TileType.Water, TileType.Dirt, TileType.Water]: Vector2i(5, 0), [TileType.Water, TileType.Dirt, TileType.Water, TileType.Water]: Vector2i(6, 0), [TileType.Dirt, TileType.Dirt, TileType.Water, TileType.Water]: Vector2i(7, 0), [TileType.Water, TileType.Dirt, TileType.Dirt, TileType.Water]: Vector2i(4, 1), [TileType.Dirt, TileType.Water, TileType.Water, TileType.Water]: Vector2i(5, 1), [TileType.Water, TileType.Water, TileType.Water, TileType.Water]: Vector2i(6, 1), [TileType.Water, TileType.Water, TileType.Water, TileType.Dirt]: Vector2i(7, 1), [TileType.Dirt, TileType.Water, TileType.Dirt, TileType.Dirt]: Vector2i(4, 2), [TileType.Water, TileType.Water, TileType.Dirt, TileType.Dirt]: Vector2i(5, 2), [TileType.Water, TileType.Water, TileType.Dirt, TileType.Water]: Vector2i(6, 2), [TileType.Water, TileType.Dirt, TileType.Water, TileType.Dirt]: Vector2i(7, 2), [TileType.Dirt, TileType.Dirt, TileType.Dirt, TileType.Dirt]: Vector2i(4, 3), [TileType.Dirt, TileType.Dirt, TileType.Dirt, TileType.Water]: Vector2i(5, 3), [TileType.Dirt, TileType.Water, TileType.Water, TileType.Dirt]: Vector2i(6, 3), [TileType.Water, TileType.Dirt, TileType.Dirt, TileType.Dirt]: Vector2i(7, 3), # Third terrain combination: water and grass [TileType.Grass, TileType.Grass, TileType.Water, TileType.Grass]: Vector2i(0, 4), [TileType.Grass, TileType.Water, TileType.Grass, TileType.Water]: Vector2i(1, 4), [TileType.Water, TileType.Grass, TileType.Water, TileType.Water]: Vector2i(2, 4), [TileType.Grass, TileType.Grass, TileType.Water, TileType.Water]: Vector2i(3, 4), [TileType.Water, TileType.Grass, TileType.Grass, TileType.Water]: Vector2i(0, 5), [TileType.Grass, TileType.Water, TileType.Water, TileType.Water]: Vector2i(1, 5), [TileType.Water, TileType.Water, TileType.Water, TileType.Water]: Vector2i(2, 5), [TileType.Water, TileType.Water, TileType.Water, TileType.Grass]: Vector2i(3, 5), [TileType.Grass, TileType.Water, TileType.Grass, TileType.Grass]: Vector2i(0, 6), [TileType.Water, TileType.Water, TileType.Grass, TileType.Grass]: Vector2i(1, 6), [TileType.Water, TileType.Water, TileType.Grass, TileType.Water]: Vector2i(2, 6), [TileType.Water, TileType.Grass, TileType.Water, TileType.Grass]: Vector2i(3, 6), [TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass]: Vector2i(0, 7), [TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water]: Vector2i(1, 7), [TileType.Grass, TileType.Water, TileType.Water, TileType.Grass]: Vector2i(2, 7), [TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass]: Vector2i(3, 7), # Fourth terrain combination: grass and sand [TileType.Sand, TileType.Sand, TileType.Grass, TileType.Sand]: Vector2i(4, 4), [TileType.Sand, TileType.Grass, TileType.Sand, TileType.Grass]: Vector2i(5, 4), [TileType.Grass, TileType.Sand, TileType.Grass, TileType.Grass]: Vector2i(6, 4), [TileType.Sand, TileType.Sand, TileType.Grass, TileType.Grass]: Vector2i(7, 4), [TileType.Grass, TileType.Sand, TileType.Sand, TileType.Grass]: Vector2i(4, 5), [TileType.Sand, TileType.Grass, TileType.Grass, TileType.Grass]: Vector2i(5, 5), [TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass]: Vector2i(6, 5), [TileType.Grass, TileType.Grass, TileType.Grass, TileType.Sand]: Vector2i(7, 5), [TileType.Sand, TileType.Grass, TileType.Sand, TileType.Sand]: Vector2i(4, 6), [TileType.Grass, TileType.Grass, TileType.Sand, TileType.Sand]: Vector2i(5, 6), [TileType.Grass, TileType.Grass, TileType.Sand, TileType.Grass]: Vector2i(6, 6), [TileType.Grass, TileType.Sand, TileType.Grass, TileType.Sand]: Vector2i(7, 6), [TileType.Sand, TileType.Sand, TileType.Sand, TileType.Sand]: Vector2i(4, 7), [TileType.Sand, TileType.Sand, TileType.Sand, TileType.Grass]: Vector2i(5, 7), [TileType.Sand, TileType.Grass, TileType.Grass, TileType.Sand]: Vector2i(6, 7), [TileType.Grass, TileType.Sand, TileType.Sand, TileType.Sand]: Vector2i(7, 7), # Fifth terrain combination: water and sand [TileType.Sand, TileType.Sand, TileType.Water, TileType.Sand]: Vector2i(0, 8), [TileType.Sand, TileType.Water, TileType.Sand, TileType.Water]: Vector2i(1, 8), [TileType.Water, TileType.Sand, TileType.Water, TileType.Water]: Vector2i(2, 8), [TileType.Sand, TileType.Sand, TileType.Water, TileType.Water]: Vector2i(3, 8), [TileType.Water, TileType.Sand, TileType.Sand, TileType.Water]: Vector2i(0, 9), [TileType.Sand, TileType.Water, TileType.Water, TileType.Water]: Vector2i(1, 9), [TileType.Water, TileType.Water, TileType.Water, TileType.Water]: Vector2i(2, 9), [TileType.Water, TileType.Water, TileType.Water, TileType.Sand]: Vector2i(3, 9), [TileType.Sand, TileType.Water, TileType.Sand, TileType.Sand]: Vector2i(0, 10), [TileType.Water, TileType.Water, TileType.Sand, TileType.Sand]: Vector2i(1, 10), [TileType.Water, TileType.Water, TileType.Sand, TileType.Water]: Vector2i(2, 10), [TileType.Water, TileType.Sand, TileType.Water, TileType.Sand]: Vector2i(3, 10), [TileType.Sand, TileType.Sand, TileType.Sand, TileType.Sand]: Vector2i(0, 11), [TileType.Sand, TileType.Sand, TileType.Sand, TileType.Water]: Vector2i(1, 11), [TileType.Sand, TileType.Water, TileType.Water, TileType.Sand]: Vector2i(2, 11), [TileType.Water, TileType.Sand, TileType.Sand, TileType.Sand]: Vector2i(3, 11) } func _ready() -> void: #print("Dictionary keys:") for key in neighbours_to_atlas_coord.keys(): #print(key) pass for coord in get_used_cells(0): #print("Initial tile at ", coord) set_display_tile(Vector2i(coord)) func _process(_delta): # Only update in editor mode if Engine.is_editor_hint(): update_all_tiles() func update_all_tiles() -> void: # Go through all the used cells and set their display tiles for coord in get_used_cells(0): set_display_tile(Vector2i(coord)) func set_tile(coords: Vector2i, atlas_coords: Vector2i) -> void: set_cell(0, coords, atlas_source_id, atlas_coords) set_display_tile(coords) # Update the OffsetTileMap immediately func set_display_tile(pos: Vector2i) -> void: for i in range(NEIGHBOURS.size()): var new_pos = pos + NEIGHBOURS[i] offset_tilemap.set_cell(0, new_pos, atlas_source_id, calculate_display_tile(new_pos)) func calculate_display_tile(coords: Vector2i) -> Vector2i: var bottom_right = get_world_tile(coords - NEIGHBOURS[0]) var bottom_left = get_world_tile(coords - NEIGHBOURS[1]) var top_right = get_world_tile(coords - NEIGHBOURS[2]) var top_left = get_world_tile(coords - NEIGHBOURS[3]) var tile_key = [top_left, top_right, bottom_left, bottom_right] #print("Generated tile key for ", coords, ": ", tile_key) # Track number of terrain types var terrain_tiles = {} for tile in tile_key: if tile != TileType.None: terrain_tiles[tile] = true # Use a dictionary to track unique types # If there are more than 2 unique terrains, return a special value (e.g., -1) if terrain_tiles.size() > 2: return Vector2i(-1, -1) # Special value to indicate skipping tile placement # Existing behavior if 2 or fewer terrains are detected if tile_key in neighbours_to_atlas_coord: return neighbours_to_atlas_coord[tile_key] if bottom_right != TileType.None or bottom_left != TileType.None or top_right != TileType.None or top_left != TileType.None: if bottom_right == TileType.Grass or bottom_left == TileType.Grass or top_right == TileType.Grass or top_left == TileType.Grass: #print("Grass border found at ", coords) return terrain_atlas_coords[TileType.Grass][0] # Return the first coordinate for grass elif bottom_right == TileType.Dirt or bottom_left == TileType.Dirt or top_right == TileType.Dirt or top_left == TileType.Dirt: #print("Dirt border found at ", coords) return terrain_atlas_coords[TileType.Dirt][0] # Return the first coordinate for dirt elif bottom_right == TileType.Water or bottom_left == TileType.Water or top_right == TileType.Water or top_left == TileType.Water: #print("Water border found at ", coords) return terrain_atlas_coords[TileType.Water][0] # Return the first coordinate for water elif bottom_right == TileType.Sand or bottom_left == TileType.Sand or top_right == TileType.Sand or top_left == TileType.Sand: #print("Sand border found at ", coords) return terrain_atlas_coords[TileType.Sand][0] # Return the first coordinate for sand # If no valid neighbours, return a default tile #print("Tile key not found in dictionary, defaulting to (0, 0) at ", coords) return Vector2i(0, 0) func get_world_tile(coords: Vector2i) -> TileType: var atlas_coord = get_cell_atlas_coords(0, coords) # Iterate through the dictionary to find which terrain type the atlas_coord belongs to for terrain in terrain_atlas_coords.keys(): if atlas_coord in terrain_atlas_coords[terrain]: return terrain # Return the terrain type if atlas_coord is found in its list return TileType.None # Return None if no match is found