├── .gitignore ├── LICENSE ├── README.md ├── docs ├── add_light_occluder.png ├── add_light_quad.png ├── add_lightsource.png ├── add_render_file_to_bootstrap.png ├── configure_light_occluder.png ├── configure_lightsource.png └── example.png ├── example ├── asset │ ├── background_brown.png │ ├── ball_blue_small_alt.png │ ├── ball_red_small_alt.png │ ├── block.tilesource │ ├── block_large.png │ ├── block_narrow.png │ ├── block_small.png │ ├── block_square.png │ └── images.atlas ├── ball.collection ├── ball.script ├── block_l.go ├── block_l.tilemap ├── block_large.go ├── block_narrow.go ├── block_small.go ├── example.collection ├── floor.tilemap ├── floor.tilesource └── light.go ├── game.project ├── input └── game.input_binding └── lights ├── lights.lua ├── lightsource.script ├── materials ├── light_occluder_sprite.material └── light_occluder_tile_map.material └── render ├── light_quad.fp ├── light_quad.go ├── light_quad.material ├── light_quad.vp ├── lights.render ├── lights.render_script ├── shadow_map.fp ├── shadow_map.material └── shadow_map.vp /.gitignore: -------------------------------------------------------------------------------- 1 | /.internal 2 | /build 3 | .DS_Store 4 | Thumbs.db -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Defold 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Lights and Shadows 2 | Example of how to achieve pixel perfect shadows in a 2D view. The sample is based on the following sources: 3 | 4 | * 2D Pixel Perfect Shadows LIBGDX example: https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows 5 | * Adapted to Defold with technical discussion by d954mas: https://forum.defold.com/t/problem-with-shader/3808 6 | * Final Defold sample project by Sayuris1: https://github.com/Sayuris1/2d_light_defold 7 | 8 | 9 | ## Installation 10 | You can use this solution in your own project by adding this this project as a Defold library dependency. Open your game.project file and in the dependencies field under project add: 11 | 12 | https://github.com/defold/sample-lights-and-shadows/archive/master.zip 13 | 14 | 15 | ## Usage 16 | The main components of this light and shadow casting example are: 17 | 18 | * `lights/lightsource.script` - Attach this script to any game object that should act as a lightsource. Modify the exposed script properties to control the light properties: 19 | * `radius` [number] - Radius of the lightsource in pixels 20 | * `color` [vector4] - Color of the lightsource (RGBA) 21 | * `arc_angle` [number] - Arc angle of the lightsource. Can be used to generate a cone of light up to an arc angle of 180 degrees. Anything above 180 degrees will result in a full circle. 22 | * `static` [boolean] - Use this for static lights that do not move or rotate to skip updates of light position and rotation each frame. 23 | * `falloff` [number] - This controls the light intensity. With a falloff of 1.0 the light intensity gradually decreases until there is no light right at the edge. With a falloff of 2 the light intensity decreases twice as fast. 24 | * `enabled` [boolean] - Set to false to disable the light. 25 | * `lights/render/light_quad.go` - A game object with a basic model quad, used as a render target when drawing lights and shadows. 26 | * `lights/render/lights.render` and `lights/render/lights.render_script` - The render file and render script used when drawing lights and shadows (and also all of the standard Defold components such as sprites, particles, tilemaps etc) 27 | * `lights/materials/light_occluder_*.material` - Materials to use for sprite, tilemaps and other components that should occlude light and cast shadows. 28 | 29 | 30 | ### Step 1 - Render script 31 | Open **game.project** and scroll down to `Bootstrap` and change Render file to `lights/render/lights.render`. This render script works like the default render script with the addition of also drawing lights and shadows. 32 | 33 | ![](/docs/add_render_file_to_bootstrap.png) 34 | 35 | 36 | ### Step 2 - Add light quad 37 | Add the `lights/render/light_quad.go` to a collection where lights and shadows should be calculated. 38 | 39 | ![](/docs/add_light_quad.png) 40 | 41 | 42 | ### Step 3 - Add lightsources 43 | Attach the `lights/lightsource.script` to any game object that should act as a lightsource. 44 | 45 | ![](/docs/add_lightsource.png) 46 | 47 | Configure the lightsource properties to your liking. 48 | 49 | ![](/docs/configure_lightsource.png) 50 | 51 | 52 | ### Step 4 - Add light occluders 53 | Change the material for any component that should cast shadows when lit by a lightsource. Select a material from `lights/materials/` matching the component type casting shadows. 54 | 55 | ![](/docs/configure_light_occluder.png) 56 | 57 | 58 | ## Example 59 | There is an example included in this repository. It sets up a few lightsources and occluders and lets you move around the scene. 60 | 61 | ![](/docs/example.png) 62 | -------------------------------------------------------------------------------- /docs/add_light_occluder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/docs/add_light_occluder.png -------------------------------------------------------------------------------- /docs/add_light_quad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/docs/add_light_quad.png -------------------------------------------------------------------------------- /docs/add_lightsource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/docs/add_lightsource.png -------------------------------------------------------------------------------- /docs/add_render_file_to_bootstrap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/docs/add_render_file_to_bootstrap.png -------------------------------------------------------------------------------- /docs/configure_light_occluder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/docs/configure_light_occluder.png -------------------------------------------------------------------------------- /docs/configure_lightsource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/docs/configure_lightsource.png -------------------------------------------------------------------------------- /docs/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/docs/example.png -------------------------------------------------------------------------------- /example/asset/background_brown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/example/asset/background_brown.png -------------------------------------------------------------------------------- /example/asset/ball_blue_small_alt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/example/asset/ball_blue_small_alt.png -------------------------------------------------------------------------------- /example/asset/ball_red_small_alt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/example/asset/ball_red_small_alt.png -------------------------------------------------------------------------------- /example/asset/block.tilesource: -------------------------------------------------------------------------------- 1 | image: "/example/asset/block_square.png" 2 | tile_width: 16 3 | tile_height: 16 4 | tile_margin: 0 5 | tile_spacing: 0 6 | collision: "/example/asset/block_square.png" 7 | material_tag: "tile" 8 | convex_hulls { 9 | index: 0 10 | count: 6 11 | collision_group: "block" 12 | } 13 | convex_hulls { 14 | index: 6 15 | count: 4 16 | collision_group: "block" 17 | } 18 | convex_hulls { 19 | index: 10 20 | count: 4 21 | collision_group: "block" 22 | } 23 | convex_hulls { 24 | index: 14 25 | count: 6 26 | collision_group: "block" 27 | } 28 | convex_hulls { 29 | index: 20 30 | count: 4 31 | collision_group: "block" 32 | } 33 | convex_hulls { 34 | index: 24 35 | count: 4 36 | collision_group: "block" 37 | } 38 | convex_hulls { 39 | index: 28 40 | count: 4 41 | collision_group: "block" 42 | } 43 | convex_hulls { 44 | index: 32 45 | count: 4 46 | collision_group: "block" 47 | } 48 | convex_hulls { 49 | index: 36 50 | count: 4 51 | collision_group: "block" 52 | } 53 | convex_hulls { 54 | index: 40 55 | count: 4 56 | collision_group: "block" 57 | } 58 | convex_hulls { 59 | index: 44 60 | count: 4 61 | collision_group: "block" 62 | } 63 | convex_hulls { 64 | index: 48 65 | count: 4 66 | collision_group: "block" 67 | } 68 | convex_hulls { 69 | index: 52 70 | count: 5 71 | collision_group: "block" 72 | } 73 | convex_hulls { 74 | index: 57 75 | count: 4 76 | collision_group: "block" 77 | } 78 | convex_hulls { 79 | index: 61 80 | count: 4 81 | collision_group: "block" 82 | } 83 | convex_hulls { 84 | index: 65 85 | count: 5 86 | collision_group: "block" 87 | } 88 | collision_groups: "block" 89 | extrude_borders: 2 90 | inner_padding: 0 91 | sprite_trim_mode: SPRITE_TRIM_MODE_OFF 92 | -------------------------------------------------------------------------------- /example/asset/block_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/example/asset/block_large.png -------------------------------------------------------------------------------- /example/asset/block_narrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/example/asset/block_narrow.png -------------------------------------------------------------------------------- /example/asset/block_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/example/asset/block_small.png -------------------------------------------------------------------------------- /example/asset/block_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/defold/sample-lights-and-shadows/02be83d964e805c46d3997341668572abfbfb20d/example/asset/block_square.png -------------------------------------------------------------------------------- /example/asset/images.atlas: -------------------------------------------------------------------------------- 1 | images { 2 | image: "/example/asset/ball_blue_small_alt.png" 3 | sprite_trim_mode: SPRITE_TRIM_MODE_OFF 4 | } 5 | images { 6 | image: "/example/asset/ball_red_small_alt.png" 7 | sprite_trim_mode: SPRITE_TRIM_MODE_OFF 8 | } 9 | images { 10 | image: "/example/asset/block_narrow.png" 11 | sprite_trim_mode: SPRITE_TRIM_MODE_OFF 12 | } 13 | images { 14 | image: "/example/asset/block_small.png" 15 | sprite_trim_mode: SPRITE_TRIM_MODE_OFF 16 | } 17 | images { 18 | image: "/example/asset/block_square.png" 19 | sprite_trim_mode: SPRITE_TRIM_MODE_OFF 20 | } 21 | images { 22 | image: "/example/asset/block_large.png" 23 | sprite_trim_mode: SPRITE_TRIM_MODE_OFF 24 | } 25 | images { 26 | image: "/builtins/graphics/particle_blob.png" 27 | sprite_trim_mode: SPRITE_TRIM_MODE_OFF 28 | } 29 | margin: 0 30 | extrude_borders: 2 31 | inner_padding: 0 32 | -------------------------------------------------------------------------------- /example/ball.collection: -------------------------------------------------------------------------------- 1 | name: "default" 2 | scale_along_z: 0 3 | embedded_instances { 4 | id: "go" 5 | children: "camera" 6 | data: "components {\n" 7 | " id: \"ball\"\n" 8 | " component: \"/example/ball.script\"\n" 9 | " position {\n" 10 | " x: 0.0\n" 11 | " y: 0.0\n" 12 | " z: 0.0\n" 13 | " }\n" 14 | " rotation {\n" 15 | " x: 0.0\n" 16 | " y: 0.0\n" 17 | " z: 0.0\n" 18 | " w: 1.0\n" 19 | " }\n" 20 | " property_decls {\n" 21 | " }\n" 22 | "}\n" 23 | "components {\n" 24 | " id: \"lightsource\"\n" 25 | " component: \"/lights/lightsource.script\"\n" 26 | " position {\n" 27 | " x: 0.0\n" 28 | " y: 0.0\n" 29 | " z: 0.0\n" 30 | " }\n" 31 | " rotation {\n" 32 | " x: 0.0\n" 33 | " y: 0.0\n" 34 | " z: 0.0\n" 35 | " w: 1.0\n" 36 | " }\n" 37 | " properties {\n" 38 | " id: \"color\"\n" 39 | " value: \"1.0, 0.8, 0.8, 1.0\"\n" 40 | " type: PROPERTY_TYPE_VECTOR4\n" 41 | " }\n" 42 | " property_decls {\n" 43 | " }\n" 44 | "}\n" 45 | "embedded_components {\n" 46 | " id: \"collisionobject\"\n" 47 | " type: \"collisionobject\"\n" 48 | " data: \"collision_shape: \\\"\\\"\\n" 49 | "type: COLLISION_OBJECT_TYPE_DYNAMIC\\n" 50 | "mass: 50.0\\n" 51 | "friction: 0.4\\n" 52 | "restitution: 0.5\\n" 53 | "group: \\\"ball\\\"\\n" 54 | "mask: \\\"block\\\"\\n" 55 | "mask: \\\"ball\\\"\\n" 56 | "embedded_collision_shape {\\n" 57 | " shapes {\\n" 58 | " shape_type: TYPE_SPHERE\\n" 59 | " position {\\n" 60 | " x: 0.0\\n" 61 | " y: 0.0\\n" 62 | " z: 0.0\\n" 63 | " }\\n" 64 | " rotation {\\n" 65 | " x: 0.0\\n" 66 | " y: 0.0\\n" 67 | " z: 0.0\\n" 68 | " w: 1.0\\n" 69 | " }\\n" 70 | " index: 0\\n" 71 | " count: 1\\n" 72 | " }\\n" 73 | " data: 16.0\\n" 74 | "}\\n" 75 | "linear_damping: 0.3\\n" 76 | "angular_damping: 0.0\\n" 77 | "locked_rotation: true\\n" 78 | "bullet: false\\n" 79 | "\"\n" 80 | " position {\n" 81 | " x: 0.0\n" 82 | " y: 0.0\n" 83 | " z: 0.0\n" 84 | " }\n" 85 | " rotation {\n" 86 | " x: 0.0\n" 87 | " y: 0.0\n" 88 | " z: 0.0\n" 89 | " w: 1.0\n" 90 | " }\n" 91 | "}\n" 92 | "embedded_components {\n" 93 | " id: \"sprite\"\n" 94 | " type: \"sprite\"\n" 95 | " data: \"tile_set: \\\"/example/asset/images.atlas\\\"\\n" 96 | "default_animation: \\\"ball_red_small_alt\\\"\\n" 97 | "material: \\\"/builtins/materials/sprite.material\\\"\\n" 98 | "blend_mode: BLEND_MODE_ALPHA\\n" 99 | "\"\n" 100 | " position {\n" 101 | " x: 0.0\n" 102 | " y: 0.0\n" 103 | " z: 0.0\n" 104 | " }\n" 105 | " rotation {\n" 106 | " x: 0.0\n" 107 | " y: 0.0\n" 108 | " z: 0.0\n" 109 | " w: 1.0\n" 110 | " }\n" 111 | "}\n" 112 | "" 113 | position { 114 | x: 0.0 115 | y: 0.0 116 | z: 0.0 117 | } 118 | rotation { 119 | x: 0.0 120 | y: 0.0 121 | z: 0.0 122 | w: 1.0 123 | } 124 | scale3 { 125 | x: 1.0 126 | y: 1.0 127 | z: 1.0 128 | } 129 | } 130 | embedded_instances { 131 | id: "camera" 132 | data: "embedded_components {\n" 133 | " id: \"camera\"\n" 134 | " type: \"camera\"\n" 135 | " data: \"aspect_ratio: 1.0\\n" 136 | "fov: 0.7854\\n" 137 | "near_z: -5.0\\n" 138 | "far_z: 5.0\\n" 139 | "auto_aspect_ratio: 0\\n" 140 | "orthographic_projection: 0\\n" 141 | "orthographic_zoom: 1.0\\n" 142 | "\"\n" 143 | " position {\n" 144 | " x: 0.0\n" 145 | " y: 0.0\n" 146 | " z: 0.0\n" 147 | " }\n" 148 | " rotation {\n" 149 | " x: 0.0\n" 150 | " y: 0.0\n" 151 | " z: 0.0\n" 152 | " w: 1.0\n" 153 | " }\n" 154 | "}\n" 155 | "" 156 | position { 157 | x: -568.0 158 | y: -320.0 159 | z: 0.0 160 | } 161 | rotation { 162 | x: 0.0 163 | y: 0.0 164 | z: 0.0 165 | w: 1.0 166 | } 167 | scale3 { 168 | x: 1.0 169 | y: 1.0 170 | z: 1.0 171 | } 172 | } 173 | -------------------------------------------------------------------------------- /example/ball.script: -------------------------------------------------------------------------------- 1 | go.property("speed", 300) 2 | 3 | function init(self) 4 | msg.post(".", "acquire_input_focus") 5 | msg.post("@render:", "use_fixed_fit_projection", { near = -10, far = 10}) 6 | msg.post("camera", "acquire_camera_focus") 7 | self.direction = vmath.vector3(0) 8 | 9 | go.animate("/blue_light#lightsource", "radius", go.PLAYBACK_LOOP_PINGPONG, 0, go.EASING_INOUTQUAD, 4.0) 10 | end 11 | 12 | function update(self, dt) 13 | local pos = go.get_position() 14 | local movement_force = self.direction * 1000000 * dt 15 | msg.post("#collisionobject", "apply_force", { position = pos, force = movement_force }) 16 | 17 | local dist = vmath.length(pos) 18 | if dist > 400 then 19 | local dir = vmath.normalize(pos) 20 | local center_force = math.sqrt(dist) * dir * 50000 * dt 21 | msg.post("#collisionobject", "apply_force", { position = pos, force = -center_force }) 22 | end 23 | end 24 | 25 | function on_input(self, action_id, action) 26 | if action_id == hash("left") then 27 | if action.pressed then 28 | self.direction.x = -1 29 | elseif action.released and self.direction.x == -1 then 30 | self.direction.x = 0 31 | end 32 | elseif action_id == hash("right") then 33 | if action.pressed then 34 | self.direction.x = 1 35 | elseif action.released and self.direction.x == 1 then 36 | self.direction.x = 0 37 | end 38 | elseif action_id == hash("up") then 39 | if action.pressed then 40 | self.direction.y = 1 41 | elseif action.released and self.direction.y == 1 then 42 | self.direction.y = 0 43 | end 44 | elseif action_id == hash("down") then 45 | if action.pressed then 46 | self.direction.y = -1 47 | elseif action.released and self.direction.y == -1 then 48 | self.direction.y = 0 49 | end 50 | end 51 | end -------------------------------------------------------------------------------- /example/block_l.go: -------------------------------------------------------------------------------- 1 | components { 2 | id: "block_l" 3 | component: "/example/block_l.tilemap" 4 | position { 5 | x: 0.0 6 | y: 0.0 7 | z: 0.0 8 | } 9 | rotation { 10 | x: 0.0 11 | y: 0.0 12 | z: 0.0 13 | w: 1.0 14 | } 15 | } 16 | embedded_components { 17 | id: "collisionobject" 18 | type: "collisionobject" 19 | data: "collision_shape: \"/example/block_l.tilemap\"\n" 20 | "type: COLLISION_OBJECT_TYPE_DYNAMIC\n" 21 | "mass: 500.0\n" 22 | "friction: 0.9\n" 23 | "restitution: 0.5\n" 24 | "group: \"default\"\n" 25 | "mask: \"block\"\n" 26 | "mask: \"ball\"\n" 27 | "linear_damping: 0.5\n" 28 | "angular_damping: 0.7\n" 29 | "locked_rotation: false\n" 30 | "bullet: false\n" 31 | "" 32 | position { 33 | x: 0.0 34 | y: 0.0 35 | z: 0.0 36 | } 37 | rotation { 38 | x: 0.0 39 | y: 0.0 40 | z: 0.0 41 | w: 1.0 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /example/block_l.tilemap: -------------------------------------------------------------------------------- 1 | tile_set: "/example/asset/block.tilesource" 2 | layers { 3 | id: "layer1" 4 | z: 0.0 5 | is_visible: 1 6 | cell { 7 | x: -3 8 | y: -3 9 | tile: 12 10 | h_flip: 0 11 | v_flip: 0 12 | } 13 | cell { 14 | x: -2 15 | y: -3 16 | tile: 13 17 | h_flip: 0 18 | v_flip: 0 19 | } 20 | cell { 21 | x: -1 22 | y: -3 23 | tile: 15 24 | h_flip: 0 25 | v_flip: 0 26 | } 27 | cell { 28 | x: -3 29 | y: -2 30 | tile: 4 31 | h_flip: 0 32 | v_flip: 0 33 | } 34 | cell { 35 | x: -2 36 | y: -2 37 | tile: 5 38 | h_flip: 0 39 | v_flip: 0 40 | } 41 | cell { 42 | x: -1 43 | y: -2 44 | tile: 11 45 | h_flip: 0 46 | v_flip: 0 47 | } 48 | cell { 49 | x: -3 50 | y: -1 51 | tile: 4 52 | h_flip: 0 53 | v_flip: 0 54 | } 55 | cell { 56 | x: -2 57 | y: -1 58 | tile: 5 59 | h_flip: 0 60 | v_flip: 0 61 | } 62 | cell { 63 | x: -1 64 | y: -1 65 | tile: 11 66 | h_flip: 0 67 | v_flip: 0 68 | } 69 | cell { 70 | x: 0 71 | y: 0 72 | tile: 13 73 | h_flip: 0 74 | v_flip: 0 75 | } 76 | cell { 77 | x: 1 78 | y: 0 79 | tile: 13 80 | h_flip: 0 81 | v_flip: 0 82 | } 83 | cell { 84 | x: 2 85 | y: 0 86 | tile: 15 87 | h_flip: 0 88 | v_flip: 0 89 | } 90 | cell { 91 | x: -3 92 | y: 0 93 | tile: 4 94 | h_flip: 0 95 | v_flip: 0 96 | } 97 | cell { 98 | x: -2 99 | y: 0 100 | tile: 5 101 | h_flip: 0 102 | v_flip: 0 103 | } 104 | cell { 105 | x: -1 106 | y: 0 107 | tile: 5 108 | h_flip: 0 109 | v_flip: 0 110 | } 111 | cell { 112 | x: 0 113 | y: 1 114 | tile: 5 115 | h_flip: 0 116 | v_flip: 0 117 | } 118 | cell { 119 | x: 1 120 | y: 1 121 | tile: 5 122 | h_flip: 0 123 | v_flip: 0 124 | } 125 | cell { 126 | x: 2 127 | y: 1 128 | tile: 7 129 | h_flip: 0 130 | v_flip: 0 131 | } 132 | cell { 133 | x: -3 134 | y: 1 135 | tile: 4 136 | h_flip: 0 137 | v_flip: 0 138 | } 139 | cell { 140 | x: -2 141 | y: 1 142 | tile: 5 143 | h_flip: 0 144 | v_flip: 0 145 | } 146 | cell { 147 | x: -1 148 | y: 1 149 | tile: 5 150 | h_flip: 0 151 | v_flip: 0 152 | } 153 | cell { 154 | x: 0 155 | y: 2 156 | tile: 1 157 | h_flip: 0 158 | v_flip: 0 159 | } 160 | cell { 161 | x: 1 162 | y: 2 163 | tile: 1 164 | h_flip: 0 165 | v_flip: 0 166 | } 167 | cell { 168 | x: 2 169 | y: 2 170 | tile: 3 171 | h_flip: 0 172 | v_flip: 0 173 | } 174 | cell { 175 | x: -3 176 | y: 2 177 | tile: 0 178 | h_flip: 0 179 | v_flip: 0 180 | } 181 | cell { 182 | x: -2 183 | y: 2 184 | tile: 1 185 | h_flip: 0 186 | v_flip: 0 187 | } 188 | cell { 189 | x: -1 190 | y: 2 191 | tile: 1 192 | h_flip: 0 193 | v_flip: 0 194 | } 195 | } 196 | material: "/lights/materials/light_occluder_tile_map.material" 197 | blend_mode: BLEND_MODE_ALPHA 198 | -------------------------------------------------------------------------------- /example/block_large.go: -------------------------------------------------------------------------------- 1 | embedded_components { 2 | id: "sprite" 3 | type: "sprite" 4 | data: "tile_set: \"/example/asset/images.atlas\"\n" 5 | "default_animation: \"block_large\"\n" 6 | "material: \"/lights/materials/light_occluder_sprite.material\"\n" 7 | "blend_mode: BLEND_MODE_ALPHA\n" 8 | "" 9 | position { 10 | x: 0.0 11 | y: 0.0 12 | z: 0.0 13 | } 14 | rotation { 15 | x: 0.0 16 | y: 0.0 17 | z: 0.0 18 | w: 1.0 19 | } 20 | } 21 | embedded_components { 22 | id: "collisionobject" 23 | type: "collisionobject" 24 | data: "collision_shape: \"\"\n" 25 | "type: COLLISION_OBJECT_TYPE_DYNAMIC\n" 26 | "mass: 300.0\n" 27 | "friction: 0.9\n" 28 | "restitution: 0.5\n" 29 | "group: \"block\"\n" 30 | "mask: \"ball\"\n" 31 | "mask: \"block\"\n" 32 | "embedded_collision_shape {\n" 33 | " shapes {\n" 34 | " shape_type: TYPE_BOX\n" 35 | " position {\n" 36 | " x: 0.0\n" 37 | " y: 0.0\n" 38 | " z: 0.0\n" 39 | " }\n" 40 | " rotation {\n" 41 | " x: 0.0\n" 42 | " y: 0.0\n" 43 | " z: 0.0\n" 44 | " w: 1.0\n" 45 | " }\n" 46 | " index: 0\n" 47 | " count: 3\n" 48 | " }\n" 49 | " data: 30.0\n" 50 | " data: 60.0\n" 51 | " data: 10.0\n" 52 | "}\n" 53 | "linear_damping: 0.7\n" 54 | "angular_damping: 0.7\n" 55 | "locked_rotation: false\n" 56 | "bullet: false\n" 57 | "" 58 | position { 59 | x: 0.0 60 | y: 0.0 61 | z: 0.0 62 | } 63 | rotation { 64 | x: 0.0 65 | y: 0.0 66 | z: 0.0 67 | w: 1.0 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /example/block_narrow.go: -------------------------------------------------------------------------------- 1 | embedded_components { 2 | id: "sprite" 3 | type: "sprite" 4 | data: "tile_set: \"/example/asset/images.atlas\"\n" 5 | "default_animation: \"block_narrow\"\n" 6 | "material: \"/lights/materials/light_occluder_sprite.material\"\n" 7 | "blend_mode: BLEND_MODE_ALPHA\n" 8 | "" 9 | position { 10 | x: 0.0 11 | y: 0.0 12 | z: 0.0 13 | } 14 | rotation { 15 | x: 0.0 16 | y: 0.0 17 | z: 0.0 18 | w: 1.0 19 | } 20 | } 21 | embedded_components { 22 | id: "collisionobject" 23 | type: "collisionobject" 24 | data: "collision_shape: \"\"\n" 25 | "type: COLLISION_OBJECT_TYPE_DYNAMIC\n" 26 | "mass: 200.0\n" 27 | "friction: 0.1\n" 28 | "restitution: 0.9\n" 29 | "group: \"block\"\n" 30 | "mask: \"block\"\n" 31 | "mask: \"ball\"\n" 32 | "embedded_collision_shape {\n" 33 | " shapes {\n" 34 | " shape_type: TYPE_BOX\n" 35 | " position {\n" 36 | " x: 0.0\n" 37 | " y: 0.0\n" 38 | " z: 0.0\n" 39 | " }\n" 40 | " rotation {\n" 41 | " x: 0.0\n" 42 | " y: 0.0\n" 43 | " z: 0.0\n" 44 | " w: 1.0\n" 45 | " }\n" 46 | " index: 0\n" 47 | " count: 3\n" 48 | " }\n" 49 | " data: 15.0\n" 50 | " data: 65.0\n" 51 | " data: 10.0\n" 52 | "}\n" 53 | "linear_damping: 0.7\n" 54 | "angular_damping: 0.7\n" 55 | "locked_rotation: false\n" 56 | "bullet: false\n" 57 | "" 58 | position { 59 | x: 0.0 60 | y: 0.0 61 | z: 0.0 62 | } 63 | rotation { 64 | x: 0.0 65 | y: 0.0 66 | z: 0.0 67 | w: 1.0 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /example/block_small.go: -------------------------------------------------------------------------------- 1 | embedded_components { 2 | id: "sprite" 3 | type: "sprite" 4 | data: "tile_set: \"/example/asset/images.atlas\"\n" 5 | "default_animation: \"block_small\"\n" 6 | "material: \"/lights/materials/light_occluder_sprite.material\"\n" 7 | "blend_mode: BLEND_MODE_ALPHA\n" 8 | "" 9 | position { 10 | x: 0.0 11 | y: 0.0 12 | z: 0.0 13 | } 14 | rotation { 15 | x: 0.0 16 | y: 0.0 17 | z: 0.0 18 | w: 1.0 19 | } 20 | } 21 | embedded_components { 22 | id: "collisionobject" 23 | type: "collisionobject" 24 | data: "collision_shape: \"\"\n" 25 | "type: COLLISION_OBJECT_TYPE_DYNAMIC\n" 26 | "mass: 100.0\n" 27 | "friction: 0.9\n" 28 | "restitution: 0.5\n" 29 | "group: \"block\"\n" 30 | "mask: \"ball\"\n" 31 | "mask: \"block\"\n" 32 | "embedded_collision_shape {\n" 33 | " shapes {\n" 34 | " shape_type: TYPE_BOX\n" 35 | " position {\n" 36 | " x: 0.0\n" 37 | " y: 0.0\n" 38 | " z: 0.0\n" 39 | " }\n" 40 | " rotation {\n" 41 | " x: 0.0\n" 42 | " y: 0.0\n" 43 | " z: 0.0\n" 44 | " w: 1.0\n" 45 | " }\n" 46 | " index: 0\n" 47 | " count: 3\n" 48 | " }\n" 49 | " data: 15.0\n" 50 | " data: 15.0\n" 51 | " data: 10.0\n" 52 | "}\n" 53 | "linear_damping: 0.7\n" 54 | "angular_damping: 0.7\n" 55 | "locked_rotation: false\n" 56 | "bullet: false\n" 57 | "" 58 | position { 59 | x: 0.0 60 | y: 0.0 61 | z: 0.0 62 | } 63 | rotation { 64 | x: 0.0 65 | y: 0.0 66 | z: 0.0 67 | w: 1.0 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /example/example.collection: -------------------------------------------------------------------------------- 1 | name: "example" 2 | instances { 3 | id: "light_quad" 4 | prototype: "/lights/render/light_quad.go" 5 | position { 6 | x: 0.0 7 | y: 0.0 8 | z: 0.5 9 | } 10 | rotation { 11 | x: 0.0 12 | y: 0.0 13 | z: 0.0 14 | w: 1.0 15 | } 16 | scale3 { 17 | x: 1.0 18 | y: 1.0 19 | z: 1.0 20 | } 21 | } 22 | instances { 23 | id: "block1" 24 | prototype: "/example/block_small.go" 25 | position { 26 | x: -39.0 27 | y: -94.0 28 | z: 0.0 29 | } 30 | rotation { 31 | x: 0.0 32 | y: 0.0 33 | z: 0.0 34 | w: 1.0 35 | } 36 | scale3 { 37 | x: 1.0 38 | y: 1.0 39 | z: 1.0 40 | } 41 | } 42 | instances { 43 | id: "block2" 44 | prototype: "/example/block_small.go" 45 | position { 46 | x: 172.0 47 | y: 76.0 48 | z: 0.0 49 | } 50 | rotation { 51 | x: 0.0 52 | y: 0.0 53 | z: 0.0 54 | w: 1.0 55 | } 56 | scale3 { 57 | x: 1.0 58 | y: 1.0 59 | z: 1.0 60 | } 61 | } 62 | instances { 63 | id: "block3" 64 | prototype: "/example/block_small.go" 65 | position { 66 | x: -84.0 67 | y: 59.0 68 | z: 0.0 69 | } 70 | rotation { 71 | x: 0.0 72 | y: 0.0 73 | z: 0.0 74 | w: 1.0 75 | } 76 | scale3 { 77 | x: 1.0 78 | y: 1.0 79 | z: 1.0 80 | } 81 | } 82 | instances { 83 | id: "block_large" 84 | prototype: "/example/block_large.go" 85 | position { 86 | x: 126.0 87 | y: -6.0 88 | z: 0.0 89 | } 90 | rotation { 91 | x: 0.0 92 | y: 0.0 93 | z: -0.37060347 94 | w: 0.92879117 95 | } 96 | scale3 { 97 | x: 1.0 98 | y: 1.0 99 | z: 1.0 100 | } 101 | } 102 | instances { 103 | id: "blue_light" 104 | prototype: "/example/light.go" 105 | position { 106 | x: -53.0 107 | y: -31.0 108 | z: 0.0 109 | } 110 | rotation { 111 | x: 0.0 112 | y: 0.0 113 | z: 0.0 114 | w: 1.0 115 | } 116 | scale3 { 117 | x: 1.0 118 | y: 1.0 119 | z: 1.0 120 | } 121 | } 122 | instances { 123 | id: "block_large1" 124 | prototype: "/example/block_large.go" 125 | position { 126 | x: -176.0 127 | y: 13.0 128 | z: 0.0 129 | } 130 | rotation { 131 | x: 0.0 132 | y: 0.0 133 | z: 0.554552 134 | w: 0.832149 135 | } 136 | scale3 { 137 | x: 1.0 138 | y: 1.0 139 | z: 1.0 140 | } 141 | } 142 | instances { 143 | id: "block4" 144 | prototype: "/example/block_small.go" 145 | position { 146 | x: 49.0 147 | y: 121.0 148 | z: 0.0 149 | } 150 | rotation { 151 | x: 0.0 152 | y: 0.0 153 | z: 0.0 154 | w: 1.0 155 | } 156 | scale3 { 157 | x: 1.0 158 | y: 1.0 159 | z: 1.0 160 | } 161 | } 162 | instances { 163 | id: "block_l" 164 | prototype: "/example/block_l.go" 165 | position { 166 | x: -156.0 167 | y: 163.0 168 | z: 0.0 169 | } 170 | rotation { 171 | x: 0.0 172 | y: 0.0 173 | z: -0.29740807 174 | w: 0.9547505 175 | } 176 | scale3 { 177 | x: 1.0 178 | y: 1.0 179 | z: 1.0 180 | } 181 | } 182 | instances { 183 | id: "block_narrow" 184 | prototype: "/example/block_narrow.go" 185 | position { 186 | x: -139.0 187 | y: -131.0 188 | z: 0.0 189 | } 190 | rotation { 191 | x: 0.0 192 | y: 0.0 193 | z: 0.7704998 194 | w: 0.63744026 195 | } 196 | scale3 { 197 | x: 1.0 198 | y: 1.0 199 | z: 1.0 200 | } 201 | } 202 | collection_instances { 203 | id: "ball" 204 | collection: "/example/ball.collection" 205 | position { 206 | x: 48.0 207 | y: 44.0 208 | z: 0.0 209 | } 210 | rotation { 211 | x: 0.0 212 | y: 0.0 213 | z: 0.0 214 | w: 1.0 215 | } 216 | instance_properties { 217 | id: "go" 218 | properties { 219 | id: "lightsource" 220 | properties { 221 | id: "falloff" 222 | value: "2.0" 223 | type: PROPERTY_TYPE_NUMBER 224 | } 225 | } 226 | } 227 | scale3 { 228 | x: 1.0 229 | y: 1.0 230 | z: 1.0 231 | } 232 | } 233 | scale_along_z: 0 234 | embedded_instances { 235 | id: "floor" 236 | data: "components {\n" 237 | " id: \"floor\"\n" 238 | " component: \"/example/floor.tilemap\"\n" 239 | " position {\n" 240 | " x: 0.0\n" 241 | " y: 0.0\n" 242 | " z: 0.0\n" 243 | " }\n" 244 | " rotation {\n" 245 | " x: 0.0\n" 246 | " y: 0.0\n" 247 | " z: 0.0\n" 248 | " w: 1.0\n" 249 | " }\n" 250 | " property_decls {\n" 251 | " }\n" 252 | "}\n" 253 | "" 254 | position { 255 | x: -1200.0 256 | y: -600.0 257 | z: -1.0 258 | } 259 | rotation { 260 | x: 0.0 261 | y: 0.0 262 | z: 0.0 263 | w: 1.0 264 | } 265 | scale3 { 266 | x: 1.0 267 | y: 1.0 268 | z: 1.0 269 | } 270 | } 271 | -------------------------------------------------------------------------------- /example/floor.tilemap: -------------------------------------------------------------------------------- 1 | tile_set: "/example/floor.tilesource" 2 | layers { 3 | id: "layer1" 4 | z: 0.0 5 | is_visible: 1 6 | cell { 7 | x: 0 8 | y: 0 9 | tile: 0 10 | h_flip: 0 11 | v_flip: 0 12 | rotate90: 0 13 | } 14 | cell { 15 | x: 1 16 | y: 0 17 | tile: 0 18 | h_flip: 0 19 | v_flip: 0 20 | rotate90: 0 21 | } 22 | cell { 23 | x: 2 24 | y: 0 25 | tile: 0 26 | h_flip: 0 27 | v_flip: 0 28 | rotate90: 0 29 | } 30 | cell { 31 | x: 3 32 | y: 0 33 | tile: 0 34 | h_flip: 0 35 | v_flip: 0 36 | rotate90: 0 37 | } 38 | cell { 39 | x: 4 40 | y: 0 41 | tile: 0 42 | h_flip: 0 43 | v_flip: 0 44 | rotate90: 0 45 | } 46 | cell { 47 | x: 5 48 | y: 0 49 | tile: 0 50 | h_flip: 0 51 | v_flip: 0 52 | rotate90: 0 53 | } 54 | cell { 55 | x: 6 56 | y: 0 57 | tile: 0 58 | h_flip: 0 59 | v_flip: 0 60 | rotate90: 0 61 | } 62 | cell { 63 | x: 7 64 | y: 0 65 | tile: 0 66 | h_flip: 0 67 | v_flip: 0 68 | rotate90: 0 69 | } 70 | cell { 71 | x: 8 72 | y: 0 73 | tile: 0 74 | h_flip: 0 75 | v_flip: 0 76 | rotate90: 0 77 | } 78 | cell { 79 | x: 9 80 | y: 0 81 | tile: 0 82 | h_flip: 0 83 | v_flip: 0 84 | rotate90: 0 85 | } 86 | cell { 87 | x: 10 88 | y: 0 89 | tile: 0 90 | h_flip: 0 91 | v_flip: 0 92 | rotate90: 0 93 | } 94 | cell { 95 | x: 11 96 | y: 0 97 | tile: 0 98 | h_flip: 0 99 | v_flip: 0 100 | rotate90: 0 101 | } 102 | cell { 103 | x: 12 104 | y: 0 105 | tile: 0 106 | h_flip: 0 107 | v_flip: 0 108 | rotate90: 0 109 | } 110 | cell { 111 | x: 13 112 | y: 0 113 | tile: 0 114 | h_flip: 0 115 | v_flip: 0 116 | rotate90: 0 117 | } 118 | cell { 119 | x: 14 120 | y: 0 121 | tile: 0 122 | h_flip: 0 123 | v_flip: 0 124 | rotate90: 0 125 | } 126 | cell { 127 | x: 15 128 | y: 0 129 | tile: 0 130 | h_flip: 0 131 | v_flip: 0 132 | rotate90: 0 133 | } 134 | cell { 135 | x: 16 136 | y: 0 137 | tile: 0 138 | h_flip: 0 139 | v_flip: 0 140 | rotate90: 0 141 | } 142 | cell { 143 | x: 17 144 | y: 0 145 | tile: 0 146 | h_flip: 0 147 | v_flip: 0 148 | rotate90: 0 149 | } 150 | cell { 151 | x: 18 152 | y: 0 153 | tile: 0 154 | h_flip: 0 155 | v_flip: 0 156 | rotate90: 0 157 | } 158 | cell { 159 | x: 19 160 | y: 0 161 | tile: 0 162 | h_flip: 0 163 | v_flip: 0 164 | rotate90: 0 165 | } 166 | cell { 167 | x: 20 168 | y: 0 169 | tile: 0 170 | h_flip: 0 171 | v_flip: 0 172 | rotate90: 0 173 | } 174 | cell { 175 | x: 21 176 | y: 0 177 | tile: 0 178 | h_flip: 0 179 | v_flip: 0 180 | rotate90: 0 181 | } 182 | cell { 183 | x: 22 184 | y: 0 185 | tile: 0 186 | h_flip: 0 187 | v_flip: 0 188 | rotate90: 0 189 | } 190 | cell { 191 | x: 23 192 | y: 0 193 | tile: 0 194 | h_flip: 0 195 | v_flip: 0 196 | rotate90: 0 197 | } 198 | cell { 199 | x: 24 200 | y: 0 201 | tile: 0 202 | h_flip: 0 203 | v_flip: 0 204 | rotate90: 0 205 | } 206 | cell { 207 | x: 25 208 | y: 0 209 | tile: 0 210 | h_flip: 0 211 | v_flip: 0 212 | rotate90: 0 213 | } 214 | cell { 215 | x: 26 216 | y: 0 217 | tile: 0 218 | h_flip: 0 219 | v_flip: 0 220 | rotate90: 0 221 | } 222 | cell { 223 | x: 27 224 | y: 0 225 | tile: 0 226 | h_flip: 0 227 | v_flip: 0 228 | rotate90: 0 229 | } 230 | cell { 231 | x: 28 232 | y: 0 233 | tile: 0 234 | h_flip: 0 235 | v_flip: 0 236 | rotate90: 0 237 | } 238 | cell { 239 | x: 29 240 | y: 0 241 | tile: 0 242 | h_flip: 0 243 | v_flip: 0 244 | rotate90: 0 245 | } 246 | cell { 247 | x: 30 248 | y: 0 249 | tile: 0 250 | h_flip: 0 251 | v_flip: 0 252 | rotate90: 0 253 | } 254 | cell { 255 | x: 31 256 | y: 0 257 | tile: 0 258 | h_flip: 0 259 | v_flip: 0 260 | rotate90: 0 261 | } 262 | cell { 263 | x: 32 264 | y: 0 265 | tile: 0 266 | h_flip: 0 267 | v_flip: 0 268 | rotate90: 0 269 | } 270 | cell { 271 | x: 33 272 | y: 0 273 | tile: 0 274 | h_flip: 0 275 | v_flip: 0 276 | rotate90: 0 277 | } 278 | cell { 279 | x: 34 280 | y: 0 281 | tile: 0 282 | h_flip: 0 283 | v_flip: 0 284 | rotate90: 0 285 | } 286 | cell { 287 | x: 35 288 | y: 0 289 | tile: 0 290 | h_flip: 0 291 | v_flip: 0 292 | rotate90: 0 293 | } 294 | cell { 295 | x: 36 296 | y: 0 297 | tile: 0 298 | h_flip: 0 299 | v_flip: 0 300 | rotate90: 0 301 | } 302 | cell { 303 | x: 37 304 | y: 0 305 | tile: 0 306 | h_flip: 0 307 | v_flip: 0 308 | rotate90: 0 309 | } 310 | cell { 311 | x: 0 312 | y: 1 313 | tile: 0 314 | h_flip: 0 315 | v_flip: 0 316 | rotate90: 0 317 | } 318 | cell { 319 | x: 1 320 | y: 1 321 | tile: 0 322 | h_flip: 0 323 | v_flip: 0 324 | rotate90: 0 325 | } 326 | cell { 327 | x: 2 328 | y: 1 329 | tile: 0 330 | h_flip: 0 331 | v_flip: 0 332 | rotate90: 0 333 | } 334 | cell { 335 | x: 3 336 | y: 1 337 | tile: 0 338 | h_flip: 0 339 | v_flip: 0 340 | rotate90: 0 341 | } 342 | cell { 343 | x: 4 344 | y: 1 345 | tile: 0 346 | h_flip: 0 347 | v_flip: 0 348 | rotate90: 0 349 | } 350 | cell { 351 | x: 5 352 | y: 1 353 | tile: 0 354 | h_flip: 0 355 | v_flip: 0 356 | rotate90: 0 357 | } 358 | cell { 359 | x: 6 360 | y: 1 361 | tile: 0 362 | h_flip: 0 363 | v_flip: 0 364 | rotate90: 0 365 | } 366 | cell { 367 | x: 7 368 | y: 1 369 | tile: 0 370 | h_flip: 0 371 | v_flip: 0 372 | rotate90: 0 373 | } 374 | cell { 375 | x: 8 376 | y: 1 377 | tile: 0 378 | h_flip: 0 379 | v_flip: 0 380 | rotate90: 0 381 | } 382 | cell { 383 | x: 9 384 | y: 1 385 | tile: 0 386 | h_flip: 0 387 | v_flip: 0 388 | rotate90: 0 389 | } 390 | cell { 391 | x: 10 392 | y: 1 393 | tile: 0 394 | h_flip: 0 395 | v_flip: 0 396 | rotate90: 0 397 | } 398 | cell { 399 | x: 11 400 | y: 1 401 | tile: 0 402 | h_flip: 0 403 | v_flip: 0 404 | rotate90: 0 405 | } 406 | cell { 407 | x: 12 408 | y: 1 409 | tile: 0 410 | h_flip: 0 411 | v_flip: 0 412 | rotate90: 0 413 | } 414 | cell { 415 | x: 13 416 | y: 1 417 | tile: 0 418 | h_flip: 0 419 | v_flip: 0 420 | rotate90: 0 421 | } 422 | cell { 423 | x: 14 424 | y: 1 425 | tile: 0 426 | h_flip: 0 427 | v_flip: 0 428 | rotate90: 0 429 | } 430 | cell { 431 | x: 15 432 | y: 1 433 | tile: 0 434 | h_flip: 0 435 | v_flip: 0 436 | rotate90: 0 437 | } 438 | cell { 439 | x: 16 440 | y: 1 441 | tile: 0 442 | h_flip: 0 443 | v_flip: 0 444 | rotate90: 0 445 | } 446 | cell { 447 | x: 17 448 | y: 1 449 | tile: 0 450 | h_flip: 0 451 | v_flip: 0 452 | rotate90: 0 453 | } 454 | cell { 455 | x: 18 456 | y: 1 457 | tile: 0 458 | h_flip: 0 459 | v_flip: 0 460 | rotate90: 0 461 | } 462 | cell { 463 | x: 19 464 | y: 1 465 | tile: 0 466 | h_flip: 0 467 | v_flip: 0 468 | rotate90: 0 469 | } 470 | cell { 471 | x: 20 472 | y: 1 473 | tile: 0 474 | h_flip: 0 475 | v_flip: 0 476 | rotate90: 0 477 | } 478 | cell { 479 | x: 21 480 | y: 1 481 | tile: 0 482 | h_flip: 0 483 | v_flip: 0 484 | rotate90: 0 485 | } 486 | cell { 487 | x: 22 488 | y: 1 489 | tile: 0 490 | h_flip: 0 491 | v_flip: 0 492 | rotate90: 0 493 | } 494 | cell { 495 | x: 23 496 | y: 1 497 | tile: 0 498 | h_flip: 0 499 | v_flip: 0 500 | rotate90: 0 501 | } 502 | cell { 503 | x: 24 504 | y: 1 505 | tile: 0 506 | h_flip: 0 507 | v_flip: 0 508 | rotate90: 0 509 | } 510 | cell { 511 | x: 25 512 | y: 1 513 | tile: 0 514 | h_flip: 0 515 | v_flip: 0 516 | rotate90: 0 517 | } 518 | cell { 519 | x: 26 520 | y: 1 521 | tile: 0 522 | h_flip: 0 523 | v_flip: 0 524 | rotate90: 0 525 | } 526 | cell { 527 | x: 27 528 | y: 1 529 | tile: 0 530 | h_flip: 0 531 | v_flip: 0 532 | rotate90: 0 533 | } 534 | cell { 535 | x: 28 536 | y: 1 537 | tile: 0 538 | h_flip: 0 539 | v_flip: 0 540 | rotate90: 0 541 | } 542 | cell { 543 | x: 29 544 | y: 1 545 | tile: 0 546 | h_flip: 0 547 | v_flip: 0 548 | rotate90: 0 549 | } 550 | cell { 551 | x: 30 552 | y: 1 553 | tile: 0 554 | h_flip: 0 555 | v_flip: 0 556 | rotate90: 0 557 | } 558 | cell { 559 | x: 31 560 | y: 1 561 | tile: 0 562 | h_flip: 0 563 | v_flip: 0 564 | rotate90: 0 565 | } 566 | cell { 567 | x: 32 568 | y: 1 569 | tile: 0 570 | h_flip: 0 571 | v_flip: 0 572 | rotate90: 0 573 | } 574 | cell { 575 | x: 33 576 | y: 1 577 | tile: 0 578 | h_flip: 0 579 | v_flip: 0 580 | rotate90: 0 581 | } 582 | cell { 583 | x: 34 584 | y: 1 585 | tile: 0 586 | h_flip: 0 587 | v_flip: 0 588 | rotate90: 0 589 | } 590 | cell { 591 | x: 35 592 | y: 1 593 | tile: 0 594 | h_flip: 0 595 | v_flip: 0 596 | rotate90: 0 597 | } 598 | cell { 599 | x: 36 600 | y: 1 601 | tile: 0 602 | h_flip: 0 603 | v_flip: 0 604 | rotate90: 0 605 | } 606 | cell { 607 | x: 37 608 | y: 1 609 | tile: 0 610 | h_flip: 0 611 | v_flip: 0 612 | rotate90: 0 613 | } 614 | cell { 615 | x: 0 616 | y: 2 617 | tile: 0 618 | h_flip: 0 619 | v_flip: 0 620 | rotate90: 0 621 | } 622 | cell { 623 | x: 1 624 | y: 2 625 | tile: 0 626 | h_flip: 0 627 | v_flip: 0 628 | rotate90: 0 629 | } 630 | cell { 631 | x: 2 632 | y: 2 633 | tile: 0 634 | h_flip: 0 635 | v_flip: 0 636 | rotate90: 0 637 | } 638 | cell { 639 | x: 3 640 | y: 2 641 | tile: 0 642 | h_flip: 0 643 | v_flip: 0 644 | rotate90: 0 645 | } 646 | cell { 647 | x: 4 648 | y: 2 649 | tile: 0 650 | h_flip: 0 651 | v_flip: 0 652 | rotate90: 0 653 | } 654 | cell { 655 | x: 5 656 | y: 2 657 | tile: 0 658 | h_flip: 0 659 | v_flip: 0 660 | rotate90: 0 661 | } 662 | cell { 663 | x: 6 664 | y: 2 665 | tile: 0 666 | h_flip: 0 667 | v_flip: 0 668 | rotate90: 0 669 | } 670 | cell { 671 | x: 7 672 | y: 2 673 | tile: 0 674 | h_flip: 0 675 | v_flip: 0 676 | rotate90: 0 677 | } 678 | cell { 679 | x: 8 680 | y: 2 681 | tile: 0 682 | h_flip: 0 683 | v_flip: 0 684 | rotate90: 0 685 | } 686 | cell { 687 | x: 9 688 | y: 2 689 | tile: 0 690 | h_flip: 0 691 | v_flip: 0 692 | rotate90: 0 693 | } 694 | cell { 695 | x: 10 696 | y: 2 697 | tile: 0 698 | h_flip: 0 699 | v_flip: 0 700 | rotate90: 0 701 | } 702 | cell { 703 | x: 11 704 | y: 2 705 | tile: 0 706 | h_flip: 0 707 | v_flip: 0 708 | rotate90: 0 709 | } 710 | cell { 711 | x: 12 712 | y: 2 713 | tile: 0 714 | h_flip: 0 715 | v_flip: 0 716 | rotate90: 0 717 | } 718 | cell { 719 | x: 13 720 | y: 2 721 | tile: 0 722 | h_flip: 0 723 | v_flip: 0 724 | rotate90: 0 725 | } 726 | cell { 727 | x: 14 728 | y: 2 729 | tile: 0 730 | h_flip: 0 731 | v_flip: 0 732 | rotate90: 0 733 | } 734 | cell { 735 | x: 15 736 | y: 2 737 | tile: 0 738 | h_flip: 0 739 | v_flip: 0 740 | rotate90: 0 741 | } 742 | cell { 743 | x: 16 744 | y: 2 745 | tile: 0 746 | h_flip: 0 747 | v_flip: 0 748 | rotate90: 0 749 | } 750 | cell { 751 | x: 17 752 | y: 2 753 | tile: 0 754 | h_flip: 0 755 | v_flip: 0 756 | rotate90: 0 757 | } 758 | cell { 759 | x: 18 760 | y: 2 761 | tile: 0 762 | h_flip: 0 763 | v_flip: 0 764 | rotate90: 0 765 | } 766 | cell { 767 | x: 19 768 | y: 2 769 | tile: 0 770 | h_flip: 0 771 | v_flip: 0 772 | rotate90: 0 773 | } 774 | cell { 775 | x: 20 776 | y: 2 777 | tile: 0 778 | h_flip: 0 779 | v_flip: 0 780 | rotate90: 0 781 | } 782 | cell { 783 | x: 21 784 | y: 2 785 | tile: 0 786 | h_flip: 0 787 | v_flip: 0 788 | rotate90: 0 789 | } 790 | cell { 791 | x: 22 792 | y: 2 793 | tile: 0 794 | h_flip: 0 795 | v_flip: 0 796 | rotate90: 0 797 | } 798 | cell { 799 | x: 23 800 | y: 2 801 | tile: 0 802 | h_flip: 0 803 | v_flip: 0 804 | rotate90: 0 805 | } 806 | cell { 807 | x: 24 808 | y: 2 809 | tile: 0 810 | h_flip: 0 811 | v_flip: 0 812 | rotate90: 0 813 | } 814 | cell { 815 | x: 25 816 | y: 2 817 | tile: 0 818 | h_flip: 0 819 | v_flip: 0 820 | rotate90: 0 821 | } 822 | cell { 823 | x: 26 824 | y: 2 825 | tile: 0 826 | h_flip: 0 827 | v_flip: 0 828 | rotate90: 0 829 | } 830 | cell { 831 | x: 27 832 | y: 2 833 | tile: 0 834 | h_flip: 0 835 | v_flip: 0 836 | rotate90: 0 837 | } 838 | cell { 839 | x: 28 840 | y: 2 841 | tile: 0 842 | h_flip: 0 843 | v_flip: 0 844 | rotate90: 0 845 | } 846 | cell { 847 | x: 29 848 | y: 2 849 | tile: 0 850 | h_flip: 0 851 | v_flip: 0 852 | rotate90: 0 853 | } 854 | cell { 855 | x: 30 856 | y: 2 857 | tile: 0 858 | h_flip: 0 859 | v_flip: 0 860 | rotate90: 0 861 | } 862 | cell { 863 | x: 31 864 | y: 2 865 | tile: 0 866 | h_flip: 0 867 | v_flip: 0 868 | rotate90: 0 869 | } 870 | cell { 871 | x: 32 872 | y: 2 873 | tile: 0 874 | h_flip: 0 875 | v_flip: 0 876 | rotate90: 0 877 | } 878 | cell { 879 | x: 33 880 | y: 2 881 | tile: 0 882 | h_flip: 0 883 | v_flip: 0 884 | rotate90: 0 885 | } 886 | cell { 887 | x: 34 888 | y: 2 889 | tile: 0 890 | h_flip: 0 891 | v_flip: 0 892 | rotate90: 0 893 | } 894 | cell { 895 | x: 35 896 | y: 2 897 | tile: 0 898 | h_flip: 0 899 | v_flip: 0 900 | rotate90: 0 901 | } 902 | cell { 903 | x: 36 904 | y: 2 905 | tile: 0 906 | h_flip: 0 907 | v_flip: 0 908 | rotate90: 0 909 | } 910 | cell { 911 | x: 37 912 | y: 2 913 | tile: 0 914 | h_flip: 0 915 | v_flip: 0 916 | rotate90: 0 917 | } 918 | cell { 919 | x: 0 920 | y: 3 921 | tile: 0 922 | h_flip: 0 923 | v_flip: 0 924 | rotate90: 0 925 | } 926 | cell { 927 | x: 1 928 | y: 3 929 | tile: 0 930 | h_flip: 0 931 | v_flip: 0 932 | rotate90: 0 933 | } 934 | cell { 935 | x: 2 936 | y: 3 937 | tile: 0 938 | h_flip: 0 939 | v_flip: 0 940 | rotate90: 0 941 | } 942 | cell { 943 | x: 3 944 | y: 3 945 | tile: 0 946 | h_flip: 0 947 | v_flip: 0 948 | rotate90: 0 949 | } 950 | cell { 951 | x: 4 952 | y: 3 953 | tile: 0 954 | h_flip: 0 955 | v_flip: 0 956 | rotate90: 0 957 | } 958 | cell { 959 | x: 5 960 | y: 3 961 | tile: 0 962 | h_flip: 0 963 | v_flip: 0 964 | rotate90: 0 965 | } 966 | cell { 967 | x: 6 968 | y: 3 969 | tile: 0 970 | h_flip: 0 971 | v_flip: 0 972 | rotate90: 0 973 | } 974 | cell { 975 | x: 7 976 | y: 3 977 | tile: 0 978 | h_flip: 0 979 | v_flip: 0 980 | rotate90: 0 981 | } 982 | cell { 983 | x: 8 984 | y: 3 985 | tile: 0 986 | h_flip: 0 987 | v_flip: 0 988 | rotate90: 0 989 | } 990 | cell { 991 | x: 9 992 | y: 3 993 | tile: 0 994 | h_flip: 0 995 | v_flip: 0 996 | rotate90: 0 997 | } 998 | cell { 999 | x: 10 1000 | y: 3 1001 | tile: 0 1002 | h_flip: 0 1003 | v_flip: 0 1004 | rotate90: 0 1005 | } 1006 | cell { 1007 | x: 11 1008 | y: 3 1009 | tile: 0 1010 | h_flip: 0 1011 | v_flip: 0 1012 | rotate90: 0 1013 | } 1014 | cell { 1015 | x: 12 1016 | y: 3 1017 | tile: 0 1018 | h_flip: 0 1019 | v_flip: 0 1020 | rotate90: 0 1021 | } 1022 | cell { 1023 | x: 13 1024 | y: 3 1025 | tile: 0 1026 | h_flip: 0 1027 | v_flip: 0 1028 | rotate90: 0 1029 | } 1030 | cell { 1031 | x: 14 1032 | y: 3 1033 | tile: 0 1034 | h_flip: 0 1035 | v_flip: 0 1036 | rotate90: 0 1037 | } 1038 | cell { 1039 | x: 15 1040 | y: 3 1041 | tile: 0 1042 | h_flip: 0 1043 | v_flip: 0 1044 | rotate90: 0 1045 | } 1046 | cell { 1047 | x: 16 1048 | y: 3 1049 | tile: 0 1050 | h_flip: 0 1051 | v_flip: 0 1052 | rotate90: 0 1053 | } 1054 | cell { 1055 | x: 17 1056 | y: 3 1057 | tile: 0 1058 | h_flip: 0 1059 | v_flip: 0 1060 | rotate90: 0 1061 | } 1062 | cell { 1063 | x: 18 1064 | y: 3 1065 | tile: 0 1066 | h_flip: 0 1067 | v_flip: 0 1068 | rotate90: 0 1069 | } 1070 | cell { 1071 | x: 19 1072 | y: 3 1073 | tile: 0 1074 | h_flip: 0 1075 | v_flip: 0 1076 | rotate90: 0 1077 | } 1078 | cell { 1079 | x: 20 1080 | y: 3 1081 | tile: 0 1082 | h_flip: 0 1083 | v_flip: 0 1084 | rotate90: 0 1085 | } 1086 | cell { 1087 | x: 21 1088 | y: 3 1089 | tile: 0 1090 | h_flip: 0 1091 | v_flip: 0 1092 | rotate90: 0 1093 | } 1094 | cell { 1095 | x: 22 1096 | y: 3 1097 | tile: 0 1098 | h_flip: 0 1099 | v_flip: 0 1100 | rotate90: 0 1101 | } 1102 | cell { 1103 | x: 23 1104 | y: 3 1105 | tile: 0 1106 | h_flip: 0 1107 | v_flip: 0 1108 | rotate90: 0 1109 | } 1110 | cell { 1111 | x: 24 1112 | y: 3 1113 | tile: 0 1114 | h_flip: 0 1115 | v_flip: 0 1116 | rotate90: 0 1117 | } 1118 | cell { 1119 | x: 25 1120 | y: 3 1121 | tile: 0 1122 | h_flip: 0 1123 | v_flip: 0 1124 | rotate90: 0 1125 | } 1126 | cell { 1127 | x: 26 1128 | y: 3 1129 | tile: 0 1130 | h_flip: 0 1131 | v_flip: 0 1132 | rotate90: 0 1133 | } 1134 | cell { 1135 | x: 27 1136 | y: 3 1137 | tile: 0 1138 | h_flip: 0 1139 | v_flip: 0 1140 | rotate90: 0 1141 | } 1142 | cell { 1143 | x: 28 1144 | y: 3 1145 | tile: 0 1146 | h_flip: 0 1147 | v_flip: 0 1148 | rotate90: 0 1149 | } 1150 | cell { 1151 | x: 29 1152 | y: 3 1153 | tile: 0 1154 | h_flip: 0 1155 | v_flip: 0 1156 | rotate90: 0 1157 | } 1158 | cell { 1159 | x: 30 1160 | y: 3 1161 | tile: 0 1162 | h_flip: 0 1163 | v_flip: 0 1164 | rotate90: 0 1165 | } 1166 | cell { 1167 | x: 31 1168 | y: 3 1169 | tile: 0 1170 | h_flip: 0 1171 | v_flip: 0 1172 | rotate90: 0 1173 | } 1174 | cell { 1175 | x: 32 1176 | y: 3 1177 | tile: 0 1178 | h_flip: 0 1179 | v_flip: 0 1180 | rotate90: 0 1181 | } 1182 | cell { 1183 | x: 33 1184 | y: 3 1185 | tile: 0 1186 | h_flip: 0 1187 | v_flip: 0 1188 | rotate90: 0 1189 | } 1190 | cell { 1191 | x: 34 1192 | y: 3 1193 | tile: 0 1194 | h_flip: 0 1195 | v_flip: 0 1196 | rotate90: 0 1197 | } 1198 | cell { 1199 | x: 35 1200 | y: 3 1201 | tile: 0 1202 | h_flip: 0 1203 | v_flip: 0 1204 | rotate90: 0 1205 | } 1206 | cell { 1207 | x: 36 1208 | y: 3 1209 | tile: 0 1210 | h_flip: 0 1211 | v_flip: 0 1212 | rotate90: 0 1213 | } 1214 | cell { 1215 | x: 37 1216 | y: 3 1217 | tile: 0 1218 | h_flip: 0 1219 | v_flip: 0 1220 | rotate90: 0 1221 | } 1222 | cell { 1223 | x: 0 1224 | y: 4 1225 | tile: 0 1226 | h_flip: 0 1227 | v_flip: 0 1228 | rotate90: 0 1229 | } 1230 | cell { 1231 | x: 1 1232 | y: 4 1233 | tile: 0 1234 | h_flip: 0 1235 | v_flip: 0 1236 | rotate90: 0 1237 | } 1238 | cell { 1239 | x: 2 1240 | y: 4 1241 | tile: 0 1242 | h_flip: 0 1243 | v_flip: 0 1244 | rotate90: 0 1245 | } 1246 | cell { 1247 | x: 3 1248 | y: 4 1249 | tile: 0 1250 | h_flip: 0 1251 | v_flip: 0 1252 | rotate90: 0 1253 | } 1254 | cell { 1255 | x: 4 1256 | y: 4 1257 | tile: 0 1258 | h_flip: 0 1259 | v_flip: 0 1260 | rotate90: 0 1261 | } 1262 | cell { 1263 | x: 5 1264 | y: 4 1265 | tile: 0 1266 | h_flip: 0 1267 | v_flip: 0 1268 | rotate90: 0 1269 | } 1270 | cell { 1271 | x: 6 1272 | y: 4 1273 | tile: 0 1274 | h_flip: 0 1275 | v_flip: 0 1276 | rotate90: 0 1277 | } 1278 | cell { 1279 | x: 7 1280 | y: 4 1281 | tile: 0 1282 | h_flip: 0 1283 | v_flip: 0 1284 | rotate90: 0 1285 | } 1286 | cell { 1287 | x: 8 1288 | y: 4 1289 | tile: 0 1290 | h_flip: 0 1291 | v_flip: 0 1292 | rotate90: 0 1293 | } 1294 | cell { 1295 | x: 9 1296 | y: 4 1297 | tile: 0 1298 | h_flip: 0 1299 | v_flip: 0 1300 | rotate90: 0 1301 | } 1302 | cell { 1303 | x: 10 1304 | y: 4 1305 | tile: 0 1306 | h_flip: 0 1307 | v_flip: 0 1308 | rotate90: 0 1309 | } 1310 | cell { 1311 | x: 11 1312 | y: 4 1313 | tile: 0 1314 | h_flip: 0 1315 | v_flip: 0 1316 | rotate90: 0 1317 | } 1318 | cell { 1319 | x: 12 1320 | y: 4 1321 | tile: 0 1322 | h_flip: 0 1323 | v_flip: 0 1324 | rotate90: 0 1325 | } 1326 | cell { 1327 | x: 13 1328 | y: 4 1329 | tile: 0 1330 | h_flip: 0 1331 | v_flip: 0 1332 | rotate90: 0 1333 | } 1334 | cell { 1335 | x: 14 1336 | y: 4 1337 | tile: 0 1338 | h_flip: 0 1339 | v_flip: 0 1340 | rotate90: 0 1341 | } 1342 | cell { 1343 | x: 15 1344 | y: 4 1345 | tile: 0 1346 | h_flip: 0 1347 | v_flip: 0 1348 | rotate90: 0 1349 | } 1350 | cell { 1351 | x: 16 1352 | y: 4 1353 | tile: 0 1354 | h_flip: 0 1355 | v_flip: 0 1356 | rotate90: 0 1357 | } 1358 | cell { 1359 | x: 17 1360 | y: 4 1361 | tile: 0 1362 | h_flip: 0 1363 | v_flip: 0 1364 | rotate90: 0 1365 | } 1366 | cell { 1367 | x: 18 1368 | y: 4 1369 | tile: 0 1370 | h_flip: 0 1371 | v_flip: 0 1372 | rotate90: 0 1373 | } 1374 | cell { 1375 | x: 19 1376 | y: 4 1377 | tile: 0 1378 | h_flip: 0 1379 | v_flip: 0 1380 | rotate90: 0 1381 | } 1382 | cell { 1383 | x: 20 1384 | y: 4 1385 | tile: 0 1386 | h_flip: 0 1387 | v_flip: 0 1388 | rotate90: 0 1389 | } 1390 | cell { 1391 | x: 21 1392 | y: 4 1393 | tile: 0 1394 | h_flip: 0 1395 | v_flip: 0 1396 | rotate90: 0 1397 | } 1398 | cell { 1399 | x: 22 1400 | y: 4 1401 | tile: 0 1402 | h_flip: 0 1403 | v_flip: 0 1404 | rotate90: 0 1405 | } 1406 | cell { 1407 | x: 23 1408 | y: 4 1409 | tile: 0 1410 | h_flip: 0 1411 | v_flip: 0 1412 | rotate90: 0 1413 | } 1414 | cell { 1415 | x: 24 1416 | y: 4 1417 | tile: 0 1418 | h_flip: 0 1419 | v_flip: 0 1420 | rotate90: 0 1421 | } 1422 | cell { 1423 | x: 25 1424 | y: 4 1425 | tile: 0 1426 | h_flip: 0 1427 | v_flip: 0 1428 | rotate90: 0 1429 | } 1430 | cell { 1431 | x: 26 1432 | y: 4 1433 | tile: 0 1434 | h_flip: 0 1435 | v_flip: 0 1436 | rotate90: 0 1437 | } 1438 | cell { 1439 | x: 27 1440 | y: 4 1441 | tile: 0 1442 | h_flip: 0 1443 | v_flip: 0 1444 | rotate90: 0 1445 | } 1446 | cell { 1447 | x: 28 1448 | y: 4 1449 | tile: 0 1450 | h_flip: 0 1451 | v_flip: 0 1452 | rotate90: 0 1453 | } 1454 | cell { 1455 | x: 29 1456 | y: 4 1457 | tile: 0 1458 | h_flip: 0 1459 | v_flip: 0 1460 | rotate90: 0 1461 | } 1462 | cell { 1463 | x: 30 1464 | y: 4 1465 | tile: 0 1466 | h_flip: 0 1467 | v_flip: 0 1468 | rotate90: 0 1469 | } 1470 | cell { 1471 | x: 31 1472 | y: 4 1473 | tile: 0 1474 | h_flip: 0 1475 | v_flip: 0 1476 | rotate90: 0 1477 | } 1478 | cell { 1479 | x: 32 1480 | y: 4 1481 | tile: 0 1482 | h_flip: 0 1483 | v_flip: 0 1484 | rotate90: 0 1485 | } 1486 | cell { 1487 | x: 33 1488 | y: 4 1489 | tile: 0 1490 | h_flip: 0 1491 | v_flip: 0 1492 | rotate90: 0 1493 | } 1494 | cell { 1495 | x: 34 1496 | y: 4 1497 | tile: 0 1498 | h_flip: 0 1499 | v_flip: 0 1500 | rotate90: 0 1501 | } 1502 | cell { 1503 | x: 35 1504 | y: 4 1505 | tile: 0 1506 | h_flip: 0 1507 | v_flip: 0 1508 | rotate90: 0 1509 | } 1510 | cell { 1511 | x: 36 1512 | y: 4 1513 | tile: 0 1514 | h_flip: 0 1515 | v_flip: 0 1516 | rotate90: 0 1517 | } 1518 | cell { 1519 | x: 37 1520 | y: 4 1521 | tile: 0 1522 | h_flip: 0 1523 | v_flip: 0 1524 | rotate90: 0 1525 | } 1526 | cell { 1527 | x: 0 1528 | y: 5 1529 | tile: 0 1530 | h_flip: 0 1531 | v_flip: 0 1532 | rotate90: 0 1533 | } 1534 | cell { 1535 | x: 1 1536 | y: 5 1537 | tile: 0 1538 | h_flip: 0 1539 | v_flip: 0 1540 | rotate90: 0 1541 | } 1542 | cell { 1543 | x: 2 1544 | y: 5 1545 | tile: 0 1546 | h_flip: 0 1547 | v_flip: 0 1548 | rotate90: 0 1549 | } 1550 | cell { 1551 | x: 3 1552 | y: 5 1553 | tile: 0 1554 | h_flip: 0 1555 | v_flip: 0 1556 | rotate90: 0 1557 | } 1558 | cell { 1559 | x: 4 1560 | y: 5 1561 | tile: 0 1562 | h_flip: 0 1563 | v_flip: 0 1564 | rotate90: 0 1565 | } 1566 | cell { 1567 | x: 5 1568 | y: 5 1569 | tile: 0 1570 | h_flip: 0 1571 | v_flip: 0 1572 | rotate90: 0 1573 | } 1574 | cell { 1575 | x: 6 1576 | y: 5 1577 | tile: 0 1578 | h_flip: 0 1579 | v_flip: 0 1580 | rotate90: 0 1581 | } 1582 | cell { 1583 | x: 7 1584 | y: 5 1585 | tile: 0 1586 | h_flip: 0 1587 | v_flip: 0 1588 | rotate90: 0 1589 | } 1590 | cell { 1591 | x: 8 1592 | y: 5 1593 | tile: 0 1594 | h_flip: 0 1595 | v_flip: 0 1596 | rotate90: 0 1597 | } 1598 | cell { 1599 | x: 9 1600 | y: 5 1601 | tile: 0 1602 | h_flip: 0 1603 | v_flip: 0 1604 | rotate90: 0 1605 | } 1606 | cell { 1607 | x: 10 1608 | y: 5 1609 | tile: 0 1610 | h_flip: 0 1611 | v_flip: 0 1612 | rotate90: 0 1613 | } 1614 | cell { 1615 | x: 11 1616 | y: 5 1617 | tile: 0 1618 | h_flip: 0 1619 | v_flip: 0 1620 | rotate90: 0 1621 | } 1622 | cell { 1623 | x: 12 1624 | y: 5 1625 | tile: 0 1626 | h_flip: 0 1627 | v_flip: 0 1628 | rotate90: 0 1629 | } 1630 | cell { 1631 | x: 13 1632 | y: 5 1633 | tile: 0 1634 | h_flip: 0 1635 | v_flip: 0 1636 | rotate90: 0 1637 | } 1638 | cell { 1639 | x: 14 1640 | y: 5 1641 | tile: 0 1642 | h_flip: 0 1643 | v_flip: 0 1644 | rotate90: 0 1645 | } 1646 | cell { 1647 | x: 15 1648 | y: 5 1649 | tile: 0 1650 | h_flip: 0 1651 | v_flip: 0 1652 | rotate90: 0 1653 | } 1654 | cell { 1655 | x: 16 1656 | y: 5 1657 | tile: 0 1658 | h_flip: 0 1659 | v_flip: 0 1660 | rotate90: 0 1661 | } 1662 | cell { 1663 | x: 17 1664 | y: 5 1665 | tile: 0 1666 | h_flip: 0 1667 | v_flip: 0 1668 | rotate90: 0 1669 | } 1670 | cell { 1671 | x: 18 1672 | y: 5 1673 | tile: 0 1674 | h_flip: 0 1675 | v_flip: 0 1676 | rotate90: 0 1677 | } 1678 | cell { 1679 | x: 19 1680 | y: 5 1681 | tile: 0 1682 | h_flip: 0 1683 | v_flip: 0 1684 | rotate90: 0 1685 | } 1686 | cell { 1687 | x: 20 1688 | y: 5 1689 | tile: 0 1690 | h_flip: 0 1691 | v_flip: 0 1692 | rotate90: 0 1693 | } 1694 | cell { 1695 | x: 21 1696 | y: 5 1697 | tile: 0 1698 | h_flip: 0 1699 | v_flip: 0 1700 | rotate90: 0 1701 | } 1702 | cell { 1703 | x: 22 1704 | y: 5 1705 | tile: 0 1706 | h_flip: 0 1707 | v_flip: 0 1708 | rotate90: 0 1709 | } 1710 | cell { 1711 | x: 23 1712 | y: 5 1713 | tile: 0 1714 | h_flip: 0 1715 | v_flip: 0 1716 | rotate90: 0 1717 | } 1718 | cell { 1719 | x: 24 1720 | y: 5 1721 | tile: 0 1722 | h_flip: 0 1723 | v_flip: 0 1724 | rotate90: 0 1725 | } 1726 | cell { 1727 | x: 25 1728 | y: 5 1729 | tile: 0 1730 | h_flip: 0 1731 | v_flip: 0 1732 | rotate90: 0 1733 | } 1734 | cell { 1735 | x: 26 1736 | y: 5 1737 | tile: 0 1738 | h_flip: 0 1739 | v_flip: 0 1740 | rotate90: 0 1741 | } 1742 | cell { 1743 | x: 27 1744 | y: 5 1745 | tile: 0 1746 | h_flip: 0 1747 | v_flip: 0 1748 | rotate90: 0 1749 | } 1750 | cell { 1751 | x: 28 1752 | y: 5 1753 | tile: 0 1754 | h_flip: 0 1755 | v_flip: 0 1756 | rotate90: 0 1757 | } 1758 | cell { 1759 | x: 29 1760 | y: 5 1761 | tile: 0 1762 | h_flip: 0 1763 | v_flip: 0 1764 | rotate90: 0 1765 | } 1766 | cell { 1767 | x: 30 1768 | y: 5 1769 | tile: 0 1770 | h_flip: 0 1771 | v_flip: 0 1772 | rotate90: 0 1773 | } 1774 | cell { 1775 | x: 31 1776 | y: 5 1777 | tile: 0 1778 | h_flip: 0 1779 | v_flip: 0 1780 | rotate90: 0 1781 | } 1782 | cell { 1783 | x: 32 1784 | y: 5 1785 | tile: 0 1786 | h_flip: 0 1787 | v_flip: 0 1788 | rotate90: 0 1789 | } 1790 | cell { 1791 | x: 33 1792 | y: 5 1793 | tile: 0 1794 | h_flip: 0 1795 | v_flip: 0 1796 | rotate90: 0 1797 | } 1798 | cell { 1799 | x: 34 1800 | y: 5 1801 | tile: 0 1802 | h_flip: 0 1803 | v_flip: 0 1804 | rotate90: 0 1805 | } 1806 | cell { 1807 | x: 35 1808 | y: 5 1809 | tile: 0 1810 | h_flip: 0 1811 | v_flip: 0 1812 | rotate90: 0 1813 | } 1814 | cell { 1815 | x: 36 1816 | y: 5 1817 | tile: 0 1818 | h_flip: 0 1819 | v_flip: 0 1820 | rotate90: 0 1821 | } 1822 | cell { 1823 | x: 37 1824 | y: 5 1825 | tile: 0 1826 | h_flip: 0 1827 | v_flip: 0 1828 | rotate90: 0 1829 | } 1830 | cell { 1831 | x: 0 1832 | y: 6 1833 | tile: 0 1834 | h_flip: 0 1835 | v_flip: 0 1836 | rotate90: 0 1837 | } 1838 | cell { 1839 | x: 1 1840 | y: 6 1841 | tile: 0 1842 | h_flip: 0 1843 | v_flip: 0 1844 | rotate90: 0 1845 | } 1846 | cell { 1847 | x: 2 1848 | y: 6 1849 | tile: 0 1850 | h_flip: 0 1851 | v_flip: 0 1852 | rotate90: 0 1853 | } 1854 | cell { 1855 | x: 3 1856 | y: 6 1857 | tile: 0 1858 | h_flip: 0 1859 | v_flip: 0 1860 | rotate90: 0 1861 | } 1862 | cell { 1863 | x: 4 1864 | y: 6 1865 | tile: 0 1866 | h_flip: 0 1867 | v_flip: 0 1868 | rotate90: 0 1869 | } 1870 | cell { 1871 | x: 5 1872 | y: 6 1873 | tile: 0 1874 | h_flip: 0 1875 | v_flip: 0 1876 | rotate90: 0 1877 | } 1878 | cell { 1879 | x: 6 1880 | y: 6 1881 | tile: 0 1882 | h_flip: 0 1883 | v_flip: 0 1884 | rotate90: 0 1885 | } 1886 | cell { 1887 | x: 7 1888 | y: 6 1889 | tile: 0 1890 | h_flip: 0 1891 | v_flip: 0 1892 | rotate90: 0 1893 | } 1894 | cell { 1895 | x: 8 1896 | y: 6 1897 | tile: 0 1898 | h_flip: 0 1899 | v_flip: 0 1900 | rotate90: 0 1901 | } 1902 | cell { 1903 | x: 9 1904 | y: 6 1905 | tile: 0 1906 | h_flip: 0 1907 | v_flip: 0 1908 | rotate90: 0 1909 | } 1910 | cell { 1911 | x: 10 1912 | y: 6 1913 | tile: 0 1914 | h_flip: 0 1915 | v_flip: 0 1916 | rotate90: 0 1917 | } 1918 | cell { 1919 | x: 11 1920 | y: 6 1921 | tile: 0 1922 | h_flip: 0 1923 | v_flip: 0 1924 | rotate90: 0 1925 | } 1926 | cell { 1927 | x: 12 1928 | y: 6 1929 | tile: 0 1930 | h_flip: 0 1931 | v_flip: 0 1932 | rotate90: 0 1933 | } 1934 | cell { 1935 | x: 13 1936 | y: 6 1937 | tile: 0 1938 | h_flip: 0 1939 | v_flip: 0 1940 | rotate90: 0 1941 | } 1942 | cell { 1943 | x: 14 1944 | y: 6 1945 | tile: 0 1946 | h_flip: 0 1947 | v_flip: 0 1948 | rotate90: 0 1949 | } 1950 | cell { 1951 | x: 15 1952 | y: 6 1953 | tile: 0 1954 | h_flip: 0 1955 | v_flip: 0 1956 | rotate90: 0 1957 | } 1958 | cell { 1959 | x: 16 1960 | y: 6 1961 | tile: 0 1962 | h_flip: 0 1963 | v_flip: 0 1964 | rotate90: 0 1965 | } 1966 | cell { 1967 | x: 17 1968 | y: 6 1969 | tile: 0 1970 | h_flip: 0 1971 | v_flip: 0 1972 | rotate90: 0 1973 | } 1974 | cell { 1975 | x: 18 1976 | y: 6 1977 | tile: 0 1978 | h_flip: 0 1979 | v_flip: 0 1980 | rotate90: 0 1981 | } 1982 | cell { 1983 | x: 19 1984 | y: 6 1985 | tile: 0 1986 | h_flip: 0 1987 | v_flip: 0 1988 | rotate90: 0 1989 | } 1990 | cell { 1991 | x: 20 1992 | y: 6 1993 | tile: 0 1994 | h_flip: 0 1995 | v_flip: 0 1996 | rotate90: 0 1997 | } 1998 | cell { 1999 | x: 21 2000 | y: 6 2001 | tile: 0 2002 | h_flip: 0 2003 | v_flip: 0 2004 | rotate90: 0 2005 | } 2006 | cell { 2007 | x: 22 2008 | y: 6 2009 | tile: 0 2010 | h_flip: 0 2011 | v_flip: 0 2012 | rotate90: 0 2013 | } 2014 | cell { 2015 | x: 23 2016 | y: 6 2017 | tile: 0 2018 | h_flip: 0 2019 | v_flip: 0 2020 | rotate90: 0 2021 | } 2022 | cell { 2023 | x: 24 2024 | y: 6 2025 | tile: 0 2026 | h_flip: 0 2027 | v_flip: 0 2028 | rotate90: 0 2029 | } 2030 | cell { 2031 | x: 25 2032 | y: 6 2033 | tile: 0 2034 | h_flip: 0 2035 | v_flip: 0 2036 | rotate90: 0 2037 | } 2038 | cell { 2039 | x: 26 2040 | y: 6 2041 | tile: 0 2042 | h_flip: 0 2043 | v_flip: 0 2044 | rotate90: 0 2045 | } 2046 | cell { 2047 | x: 27 2048 | y: 6 2049 | tile: 0 2050 | h_flip: 0 2051 | v_flip: 0 2052 | rotate90: 0 2053 | } 2054 | cell { 2055 | x: 28 2056 | y: 6 2057 | tile: 0 2058 | h_flip: 0 2059 | v_flip: 0 2060 | rotate90: 0 2061 | } 2062 | cell { 2063 | x: 29 2064 | y: 6 2065 | tile: 0 2066 | h_flip: 0 2067 | v_flip: 0 2068 | rotate90: 0 2069 | } 2070 | cell { 2071 | x: 30 2072 | y: 6 2073 | tile: 0 2074 | h_flip: 0 2075 | v_flip: 0 2076 | rotate90: 0 2077 | } 2078 | cell { 2079 | x: 31 2080 | y: 6 2081 | tile: 0 2082 | h_flip: 0 2083 | v_flip: 0 2084 | rotate90: 0 2085 | } 2086 | cell { 2087 | x: 32 2088 | y: 6 2089 | tile: 0 2090 | h_flip: 0 2091 | v_flip: 0 2092 | rotate90: 0 2093 | } 2094 | cell { 2095 | x: 33 2096 | y: 6 2097 | tile: 0 2098 | h_flip: 0 2099 | v_flip: 0 2100 | rotate90: 0 2101 | } 2102 | cell { 2103 | x: 34 2104 | y: 6 2105 | tile: 0 2106 | h_flip: 0 2107 | v_flip: 0 2108 | rotate90: 0 2109 | } 2110 | cell { 2111 | x: 35 2112 | y: 6 2113 | tile: 0 2114 | h_flip: 0 2115 | v_flip: 0 2116 | rotate90: 0 2117 | } 2118 | cell { 2119 | x: 36 2120 | y: 6 2121 | tile: 0 2122 | h_flip: 0 2123 | v_flip: 0 2124 | rotate90: 0 2125 | } 2126 | cell { 2127 | x: 37 2128 | y: 6 2129 | tile: 0 2130 | h_flip: 0 2131 | v_flip: 0 2132 | rotate90: 0 2133 | } 2134 | cell { 2135 | x: 0 2136 | y: 7 2137 | tile: 0 2138 | h_flip: 0 2139 | v_flip: 0 2140 | rotate90: 0 2141 | } 2142 | cell { 2143 | x: 1 2144 | y: 7 2145 | tile: 0 2146 | h_flip: 0 2147 | v_flip: 0 2148 | rotate90: 0 2149 | } 2150 | cell { 2151 | x: 2 2152 | y: 7 2153 | tile: 0 2154 | h_flip: 0 2155 | v_flip: 0 2156 | rotate90: 0 2157 | } 2158 | cell { 2159 | x: 3 2160 | y: 7 2161 | tile: 0 2162 | h_flip: 0 2163 | v_flip: 0 2164 | rotate90: 0 2165 | } 2166 | cell { 2167 | x: 4 2168 | y: 7 2169 | tile: 0 2170 | h_flip: 0 2171 | v_flip: 0 2172 | rotate90: 0 2173 | } 2174 | cell { 2175 | x: 5 2176 | y: 7 2177 | tile: 0 2178 | h_flip: 0 2179 | v_flip: 0 2180 | rotate90: 0 2181 | } 2182 | cell { 2183 | x: 6 2184 | y: 7 2185 | tile: 0 2186 | h_flip: 0 2187 | v_flip: 0 2188 | rotate90: 0 2189 | } 2190 | cell { 2191 | x: 7 2192 | y: 7 2193 | tile: 0 2194 | h_flip: 0 2195 | v_flip: 0 2196 | rotate90: 0 2197 | } 2198 | cell { 2199 | x: 8 2200 | y: 7 2201 | tile: 0 2202 | h_flip: 0 2203 | v_flip: 0 2204 | rotate90: 0 2205 | } 2206 | cell { 2207 | x: 9 2208 | y: 7 2209 | tile: 0 2210 | h_flip: 0 2211 | v_flip: 0 2212 | rotate90: 0 2213 | } 2214 | cell { 2215 | x: 10 2216 | y: 7 2217 | tile: 0 2218 | h_flip: 0 2219 | v_flip: 0 2220 | rotate90: 0 2221 | } 2222 | cell { 2223 | x: 11 2224 | y: 7 2225 | tile: 0 2226 | h_flip: 0 2227 | v_flip: 0 2228 | rotate90: 0 2229 | } 2230 | cell { 2231 | x: 12 2232 | y: 7 2233 | tile: 0 2234 | h_flip: 0 2235 | v_flip: 0 2236 | rotate90: 0 2237 | } 2238 | cell { 2239 | x: 13 2240 | y: 7 2241 | tile: 0 2242 | h_flip: 0 2243 | v_flip: 0 2244 | rotate90: 0 2245 | } 2246 | cell { 2247 | x: 14 2248 | y: 7 2249 | tile: 0 2250 | h_flip: 0 2251 | v_flip: 0 2252 | rotate90: 0 2253 | } 2254 | cell { 2255 | x: 15 2256 | y: 7 2257 | tile: 0 2258 | h_flip: 0 2259 | v_flip: 0 2260 | rotate90: 0 2261 | } 2262 | cell { 2263 | x: 16 2264 | y: 7 2265 | tile: 0 2266 | h_flip: 0 2267 | v_flip: 0 2268 | rotate90: 0 2269 | } 2270 | cell { 2271 | x: 17 2272 | y: 7 2273 | tile: 0 2274 | h_flip: 0 2275 | v_flip: 0 2276 | rotate90: 0 2277 | } 2278 | cell { 2279 | x: 18 2280 | y: 7 2281 | tile: 0 2282 | h_flip: 0 2283 | v_flip: 0 2284 | rotate90: 0 2285 | } 2286 | cell { 2287 | x: 19 2288 | y: 7 2289 | tile: 0 2290 | h_flip: 0 2291 | v_flip: 0 2292 | rotate90: 0 2293 | } 2294 | cell { 2295 | x: 20 2296 | y: 7 2297 | tile: 0 2298 | h_flip: 0 2299 | v_flip: 0 2300 | rotate90: 0 2301 | } 2302 | cell { 2303 | x: 21 2304 | y: 7 2305 | tile: 0 2306 | h_flip: 0 2307 | v_flip: 0 2308 | rotate90: 0 2309 | } 2310 | cell { 2311 | x: 22 2312 | y: 7 2313 | tile: 0 2314 | h_flip: 0 2315 | v_flip: 0 2316 | rotate90: 0 2317 | } 2318 | cell { 2319 | x: 23 2320 | y: 7 2321 | tile: 0 2322 | h_flip: 0 2323 | v_flip: 0 2324 | rotate90: 0 2325 | } 2326 | cell { 2327 | x: 24 2328 | y: 7 2329 | tile: 0 2330 | h_flip: 0 2331 | v_flip: 0 2332 | rotate90: 0 2333 | } 2334 | cell { 2335 | x: 25 2336 | y: 7 2337 | tile: 0 2338 | h_flip: 0 2339 | v_flip: 0 2340 | rotate90: 0 2341 | } 2342 | cell { 2343 | x: 26 2344 | y: 7 2345 | tile: 0 2346 | h_flip: 0 2347 | v_flip: 0 2348 | rotate90: 0 2349 | } 2350 | cell { 2351 | x: 27 2352 | y: 7 2353 | tile: 0 2354 | h_flip: 0 2355 | v_flip: 0 2356 | rotate90: 0 2357 | } 2358 | cell { 2359 | x: 28 2360 | y: 7 2361 | tile: 0 2362 | h_flip: 0 2363 | v_flip: 0 2364 | rotate90: 0 2365 | } 2366 | cell { 2367 | x: 29 2368 | y: 7 2369 | tile: 0 2370 | h_flip: 0 2371 | v_flip: 0 2372 | rotate90: 0 2373 | } 2374 | cell { 2375 | x: 30 2376 | y: 7 2377 | tile: 0 2378 | h_flip: 0 2379 | v_flip: 0 2380 | rotate90: 0 2381 | } 2382 | cell { 2383 | x: 31 2384 | y: 7 2385 | tile: 0 2386 | h_flip: 0 2387 | v_flip: 0 2388 | rotate90: 0 2389 | } 2390 | cell { 2391 | x: 32 2392 | y: 7 2393 | tile: 0 2394 | h_flip: 0 2395 | v_flip: 0 2396 | rotate90: 0 2397 | } 2398 | cell { 2399 | x: 33 2400 | y: 7 2401 | tile: 0 2402 | h_flip: 0 2403 | v_flip: 0 2404 | rotate90: 0 2405 | } 2406 | cell { 2407 | x: 34 2408 | y: 7 2409 | tile: 0 2410 | h_flip: 0 2411 | v_flip: 0 2412 | rotate90: 0 2413 | } 2414 | cell { 2415 | x: 35 2416 | y: 7 2417 | tile: 0 2418 | h_flip: 0 2419 | v_flip: 0 2420 | rotate90: 0 2421 | } 2422 | cell { 2423 | x: 36 2424 | y: 7 2425 | tile: 0 2426 | h_flip: 0 2427 | v_flip: 0 2428 | rotate90: 0 2429 | } 2430 | cell { 2431 | x: 37 2432 | y: 7 2433 | tile: 0 2434 | h_flip: 0 2435 | v_flip: 0 2436 | rotate90: 0 2437 | } 2438 | cell { 2439 | x: 0 2440 | y: 8 2441 | tile: 0 2442 | h_flip: 0 2443 | v_flip: 0 2444 | rotate90: 0 2445 | } 2446 | cell { 2447 | x: 1 2448 | y: 8 2449 | tile: 0 2450 | h_flip: 0 2451 | v_flip: 0 2452 | rotate90: 0 2453 | } 2454 | cell { 2455 | x: 2 2456 | y: 8 2457 | tile: 0 2458 | h_flip: 0 2459 | v_flip: 0 2460 | rotate90: 0 2461 | } 2462 | cell { 2463 | x: 3 2464 | y: 8 2465 | tile: 0 2466 | h_flip: 0 2467 | v_flip: 0 2468 | rotate90: 0 2469 | } 2470 | cell { 2471 | x: 4 2472 | y: 8 2473 | tile: 0 2474 | h_flip: 0 2475 | v_flip: 0 2476 | rotate90: 0 2477 | } 2478 | cell { 2479 | x: 5 2480 | y: 8 2481 | tile: 0 2482 | h_flip: 0 2483 | v_flip: 0 2484 | rotate90: 0 2485 | } 2486 | cell { 2487 | x: 6 2488 | y: 8 2489 | tile: 0 2490 | h_flip: 0 2491 | v_flip: 0 2492 | rotate90: 0 2493 | } 2494 | cell { 2495 | x: 7 2496 | y: 8 2497 | tile: 0 2498 | h_flip: 0 2499 | v_flip: 0 2500 | rotate90: 0 2501 | } 2502 | cell { 2503 | x: 8 2504 | y: 8 2505 | tile: 0 2506 | h_flip: 0 2507 | v_flip: 0 2508 | rotate90: 0 2509 | } 2510 | cell { 2511 | x: 9 2512 | y: 8 2513 | tile: 0 2514 | h_flip: 0 2515 | v_flip: 0 2516 | rotate90: 0 2517 | } 2518 | cell { 2519 | x: 10 2520 | y: 8 2521 | tile: 0 2522 | h_flip: 0 2523 | v_flip: 0 2524 | rotate90: 0 2525 | } 2526 | cell { 2527 | x: 11 2528 | y: 8 2529 | tile: 0 2530 | h_flip: 0 2531 | v_flip: 0 2532 | rotate90: 0 2533 | } 2534 | cell { 2535 | x: 12 2536 | y: 8 2537 | tile: 0 2538 | h_flip: 0 2539 | v_flip: 0 2540 | rotate90: 0 2541 | } 2542 | cell { 2543 | x: 13 2544 | y: 8 2545 | tile: 0 2546 | h_flip: 0 2547 | v_flip: 0 2548 | rotate90: 0 2549 | } 2550 | cell { 2551 | x: 14 2552 | y: 8 2553 | tile: 0 2554 | h_flip: 0 2555 | v_flip: 0 2556 | rotate90: 0 2557 | } 2558 | cell { 2559 | x: 15 2560 | y: 8 2561 | tile: 0 2562 | h_flip: 0 2563 | v_flip: 0 2564 | rotate90: 0 2565 | } 2566 | cell { 2567 | x: 16 2568 | y: 8 2569 | tile: 0 2570 | h_flip: 0 2571 | v_flip: 0 2572 | rotate90: 0 2573 | } 2574 | cell { 2575 | x: 17 2576 | y: 8 2577 | tile: 0 2578 | h_flip: 0 2579 | v_flip: 0 2580 | rotate90: 0 2581 | } 2582 | cell { 2583 | x: 18 2584 | y: 8 2585 | tile: 0 2586 | h_flip: 0 2587 | v_flip: 0 2588 | rotate90: 0 2589 | } 2590 | cell { 2591 | x: 19 2592 | y: 8 2593 | tile: 0 2594 | h_flip: 0 2595 | v_flip: 0 2596 | rotate90: 0 2597 | } 2598 | cell { 2599 | x: 20 2600 | y: 8 2601 | tile: 0 2602 | h_flip: 0 2603 | v_flip: 0 2604 | rotate90: 0 2605 | } 2606 | cell { 2607 | x: 21 2608 | y: 8 2609 | tile: 0 2610 | h_flip: 0 2611 | v_flip: 0 2612 | rotate90: 0 2613 | } 2614 | cell { 2615 | x: 22 2616 | y: 8 2617 | tile: 0 2618 | h_flip: 0 2619 | v_flip: 0 2620 | rotate90: 0 2621 | } 2622 | cell { 2623 | x: 23 2624 | y: 8 2625 | tile: 0 2626 | h_flip: 0 2627 | v_flip: 0 2628 | rotate90: 0 2629 | } 2630 | cell { 2631 | x: 24 2632 | y: 8 2633 | tile: 0 2634 | h_flip: 0 2635 | v_flip: 0 2636 | rotate90: 0 2637 | } 2638 | cell { 2639 | x: 25 2640 | y: 8 2641 | tile: 0 2642 | h_flip: 0 2643 | v_flip: 0 2644 | rotate90: 0 2645 | } 2646 | cell { 2647 | x: 26 2648 | y: 8 2649 | tile: 0 2650 | h_flip: 0 2651 | v_flip: 0 2652 | rotate90: 0 2653 | } 2654 | cell { 2655 | x: 27 2656 | y: 8 2657 | tile: 0 2658 | h_flip: 0 2659 | v_flip: 0 2660 | rotate90: 0 2661 | } 2662 | cell { 2663 | x: 28 2664 | y: 8 2665 | tile: 0 2666 | h_flip: 0 2667 | v_flip: 0 2668 | rotate90: 0 2669 | } 2670 | cell { 2671 | x: 29 2672 | y: 8 2673 | tile: 0 2674 | h_flip: 0 2675 | v_flip: 0 2676 | rotate90: 0 2677 | } 2678 | cell { 2679 | x: 30 2680 | y: 8 2681 | tile: 0 2682 | h_flip: 0 2683 | v_flip: 0 2684 | rotate90: 0 2685 | } 2686 | cell { 2687 | x: 31 2688 | y: 8 2689 | tile: 0 2690 | h_flip: 0 2691 | v_flip: 0 2692 | rotate90: 0 2693 | } 2694 | cell { 2695 | x: 32 2696 | y: 8 2697 | tile: 0 2698 | h_flip: 0 2699 | v_flip: 0 2700 | rotate90: 0 2701 | } 2702 | cell { 2703 | x: 33 2704 | y: 8 2705 | tile: 0 2706 | h_flip: 0 2707 | v_flip: 0 2708 | rotate90: 0 2709 | } 2710 | cell { 2711 | x: 34 2712 | y: 8 2713 | tile: 0 2714 | h_flip: 0 2715 | v_flip: 0 2716 | rotate90: 0 2717 | } 2718 | cell { 2719 | x: 35 2720 | y: 8 2721 | tile: 0 2722 | h_flip: 0 2723 | v_flip: 0 2724 | rotate90: 0 2725 | } 2726 | cell { 2727 | x: 36 2728 | y: 8 2729 | tile: 0 2730 | h_flip: 0 2731 | v_flip: 0 2732 | rotate90: 0 2733 | } 2734 | cell { 2735 | x: 37 2736 | y: 8 2737 | tile: 0 2738 | h_flip: 0 2739 | v_flip: 0 2740 | rotate90: 0 2741 | } 2742 | cell { 2743 | x: 0 2744 | y: 9 2745 | tile: 0 2746 | h_flip: 0 2747 | v_flip: 0 2748 | rotate90: 0 2749 | } 2750 | cell { 2751 | x: 1 2752 | y: 9 2753 | tile: 0 2754 | h_flip: 0 2755 | v_flip: 0 2756 | rotate90: 0 2757 | } 2758 | cell { 2759 | x: 2 2760 | y: 9 2761 | tile: 0 2762 | h_flip: 0 2763 | v_flip: 0 2764 | rotate90: 0 2765 | } 2766 | cell { 2767 | x: 3 2768 | y: 9 2769 | tile: 0 2770 | h_flip: 0 2771 | v_flip: 0 2772 | rotate90: 0 2773 | } 2774 | cell { 2775 | x: 4 2776 | y: 9 2777 | tile: 0 2778 | h_flip: 0 2779 | v_flip: 0 2780 | rotate90: 0 2781 | } 2782 | cell { 2783 | x: 5 2784 | y: 9 2785 | tile: 0 2786 | h_flip: 0 2787 | v_flip: 0 2788 | rotate90: 0 2789 | } 2790 | cell { 2791 | x: 6 2792 | y: 9 2793 | tile: 0 2794 | h_flip: 0 2795 | v_flip: 0 2796 | rotate90: 0 2797 | } 2798 | cell { 2799 | x: 7 2800 | y: 9 2801 | tile: 0 2802 | h_flip: 0 2803 | v_flip: 0 2804 | rotate90: 0 2805 | } 2806 | cell { 2807 | x: 8 2808 | y: 9 2809 | tile: 0 2810 | h_flip: 0 2811 | v_flip: 0 2812 | rotate90: 0 2813 | } 2814 | cell { 2815 | x: 9 2816 | y: 9 2817 | tile: 0 2818 | h_flip: 0 2819 | v_flip: 0 2820 | rotate90: 0 2821 | } 2822 | cell { 2823 | x: 10 2824 | y: 9 2825 | tile: 0 2826 | h_flip: 0 2827 | v_flip: 0 2828 | rotate90: 0 2829 | } 2830 | cell { 2831 | x: 11 2832 | y: 9 2833 | tile: 0 2834 | h_flip: 0 2835 | v_flip: 0 2836 | rotate90: 0 2837 | } 2838 | cell { 2839 | x: 12 2840 | y: 9 2841 | tile: 0 2842 | h_flip: 0 2843 | v_flip: 0 2844 | rotate90: 0 2845 | } 2846 | cell { 2847 | x: 13 2848 | y: 9 2849 | tile: 0 2850 | h_flip: 0 2851 | v_flip: 0 2852 | rotate90: 0 2853 | } 2854 | cell { 2855 | x: 14 2856 | y: 9 2857 | tile: 0 2858 | h_flip: 0 2859 | v_flip: 0 2860 | rotate90: 0 2861 | } 2862 | cell { 2863 | x: 15 2864 | y: 9 2865 | tile: 0 2866 | h_flip: 0 2867 | v_flip: 0 2868 | rotate90: 0 2869 | } 2870 | cell { 2871 | x: 16 2872 | y: 9 2873 | tile: 0 2874 | h_flip: 0 2875 | v_flip: 0 2876 | rotate90: 0 2877 | } 2878 | cell { 2879 | x: 17 2880 | y: 9 2881 | tile: 0 2882 | h_flip: 0 2883 | v_flip: 0 2884 | rotate90: 0 2885 | } 2886 | cell { 2887 | x: 18 2888 | y: 9 2889 | tile: 0 2890 | h_flip: 0 2891 | v_flip: 0 2892 | rotate90: 0 2893 | } 2894 | cell { 2895 | x: 19 2896 | y: 9 2897 | tile: 0 2898 | h_flip: 0 2899 | v_flip: 0 2900 | rotate90: 0 2901 | } 2902 | cell { 2903 | x: 20 2904 | y: 9 2905 | tile: 0 2906 | h_flip: 0 2907 | v_flip: 0 2908 | rotate90: 0 2909 | } 2910 | cell { 2911 | x: 21 2912 | y: 9 2913 | tile: 0 2914 | h_flip: 0 2915 | v_flip: 0 2916 | rotate90: 0 2917 | } 2918 | cell { 2919 | x: 22 2920 | y: 9 2921 | tile: 0 2922 | h_flip: 0 2923 | v_flip: 0 2924 | rotate90: 0 2925 | } 2926 | cell { 2927 | x: 23 2928 | y: 9 2929 | tile: 0 2930 | h_flip: 0 2931 | v_flip: 0 2932 | rotate90: 0 2933 | } 2934 | cell { 2935 | x: 24 2936 | y: 9 2937 | tile: 0 2938 | h_flip: 0 2939 | v_flip: 0 2940 | rotate90: 0 2941 | } 2942 | cell { 2943 | x: 25 2944 | y: 9 2945 | tile: 0 2946 | h_flip: 0 2947 | v_flip: 0 2948 | rotate90: 0 2949 | } 2950 | cell { 2951 | x: 26 2952 | y: 9 2953 | tile: 0 2954 | h_flip: 0 2955 | v_flip: 0 2956 | rotate90: 0 2957 | } 2958 | cell { 2959 | x: 27 2960 | y: 9 2961 | tile: 0 2962 | h_flip: 0 2963 | v_flip: 0 2964 | rotate90: 0 2965 | } 2966 | cell { 2967 | x: 28 2968 | y: 9 2969 | tile: 0 2970 | h_flip: 0 2971 | v_flip: 0 2972 | rotate90: 0 2973 | } 2974 | cell { 2975 | x: 29 2976 | y: 9 2977 | tile: 0 2978 | h_flip: 0 2979 | v_flip: 0 2980 | rotate90: 0 2981 | } 2982 | cell { 2983 | x: 30 2984 | y: 9 2985 | tile: 0 2986 | h_flip: 0 2987 | v_flip: 0 2988 | rotate90: 0 2989 | } 2990 | cell { 2991 | x: 31 2992 | y: 9 2993 | tile: 0 2994 | h_flip: 0 2995 | v_flip: 0 2996 | rotate90: 0 2997 | } 2998 | cell { 2999 | x: 32 3000 | y: 9 3001 | tile: 0 3002 | h_flip: 0 3003 | v_flip: 0 3004 | rotate90: 0 3005 | } 3006 | cell { 3007 | x: 33 3008 | y: 9 3009 | tile: 0 3010 | h_flip: 0 3011 | v_flip: 0 3012 | rotate90: 0 3013 | } 3014 | cell { 3015 | x: 34 3016 | y: 9 3017 | tile: 0 3018 | h_flip: 0 3019 | v_flip: 0 3020 | rotate90: 0 3021 | } 3022 | cell { 3023 | x: 35 3024 | y: 9 3025 | tile: 0 3026 | h_flip: 0 3027 | v_flip: 0 3028 | rotate90: 0 3029 | } 3030 | cell { 3031 | x: 36 3032 | y: 9 3033 | tile: 0 3034 | h_flip: 0 3035 | v_flip: 0 3036 | rotate90: 0 3037 | } 3038 | cell { 3039 | x: 37 3040 | y: 9 3041 | tile: 0 3042 | h_flip: 0 3043 | v_flip: 0 3044 | rotate90: 0 3045 | } 3046 | cell { 3047 | x: 0 3048 | y: 10 3049 | tile: 0 3050 | h_flip: 0 3051 | v_flip: 0 3052 | rotate90: 0 3053 | } 3054 | cell { 3055 | x: 1 3056 | y: 10 3057 | tile: 0 3058 | h_flip: 0 3059 | v_flip: 0 3060 | rotate90: 0 3061 | } 3062 | cell { 3063 | x: 2 3064 | y: 10 3065 | tile: 0 3066 | h_flip: 0 3067 | v_flip: 0 3068 | rotate90: 0 3069 | } 3070 | cell { 3071 | x: 3 3072 | y: 10 3073 | tile: 0 3074 | h_flip: 0 3075 | v_flip: 0 3076 | rotate90: 0 3077 | } 3078 | cell { 3079 | x: 4 3080 | y: 10 3081 | tile: 0 3082 | h_flip: 0 3083 | v_flip: 0 3084 | rotate90: 0 3085 | } 3086 | cell { 3087 | x: 5 3088 | y: 10 3089 | tile: 0 3090 | h_flip: 0 3091 | v_flip: 0 3092 | rotate90: 0 3093 | } 3094 | cell { 3095 | x: 6 3096 | y: 10 3097 | tile: 0 3098 | h_flip: 0 3099 | v_flip: 0 3100 | rotate90: 0 3101 | } 3102 | cell { 3103 | x: 7 3104 | y: 10 3105 | tile: 0 3106 | h_flip: 0 3107 | v_flip: 0 3108 | rotate90: 0 3109 | } 3110 | cell { 3111 | x: 8 3112 | y: 10 3113 | tile: 0 3114 | h_flip: 0 3115 | v_flip: 0 3116 | rotate90: 0 3117 | } 3118 | cell { 3119 | x: 9 3120 | y: 10 3121 | tile: 0 3122 | h_flip: 0 3123 | v_flip: 0 3124 | rotate90: 0 3125 | } 3126 | cell { 3127 | x: 10 3128 | y: 10 3129 | tile: 0 3130 | h_flip: 0 3131 | v_flip: 0 3132 | rotate90: 0 3133 | } 3134 | cell { 3135 | x: 11 3136 | y: 10 3137 | tile: 0 3138 | h_flip: 0 3139 | v_flip: 0 3140 | rotate90: 0 3141 | } 3142 | cell { 3143 | x: 12 3144 | y: 10 3145 | tile: 0 3146 | h_flip: 0 3147 | v_flip: 0 3148 | rotate90: 0 3149 | } 3150 | cell { 3151 | x: 13 3152 | y: 10 3153 | tile: 0 3154 | h_flip: 0 3155 | v_flip: 0 3156 | rotate90: 0 3157 | } 3158 | cell { 3159 | x: 14 3160 | y: 10 3161 | tile: 0 3162 | h_flip: 0 3163 | v_flip: 0 3164 | rotate90: 0 3165 | } 3166 | cell { 3167 | x: 15 3168 | y: 10 3169 | tile: 0 3170 | h_flip: 0 3171 | v_flip: 0 3172 | rotate90: 0 3173 | } 3174 | cell { 3175 | x: 16 3176 | y: 10 3177 | tile: 0 3178 | h_flip: 0 3179 | v_flip: 0 3180 | rotate90: 0 3181 | } 3182 | cell { 3183 | x: 17 3184 | y: 10 3185 | tile: 0 3186 | h_flip: 0 3187 | v_flip: 0 3188 | rotate90: 0 3189 | } 3190 | cell { 3191 | x: 18 3192 | y: 10 3193 | tile: 0 3194 | h_flip: 0 3195 | v_flip: 0 3196 | rotate90: 0 3197 | } 3198 | cell { 3199 | x: 19 3200 | y: 10 3201 | tile: 0 3202 | h_flip: 0 3203 | v_flip: 0 3204 | rotate90: 0 3205 | } 3206 | cell { 3207 | x: 20 3208 | y: 10 3209 | tile: 0 3210 | h_flip: 0 3211 | v_flip: 0 3212 | rotate90: 0 3213 | } 3214 | cell { 3215 | x: 21 3216 | y: 10 3217 | tile: 0 3218 | h_flip: 0 3219 | v_flip: 0 3220 | rotate90: 0 3221 | } 3222 | cell { 3223 | x: 22 3224 | y: 10 3225 | tile: 0 3226 | h_flip: 0 3227 | v_flip: 0 3228 | rotate90: 0 3229 | } 3230 | cell { 3231 | x: 23 3232 | y: 10 3233 | tile: 0 3234 | h_flip: 0 3235 | v_flip: 0 3236 | rotate90: 0 3237 | } 3238 | cell { 3239 | x: 24 3240 | y: 10 3241 | tile: 0 3242 | h_flip: 0 3243 | v_flip: 0 3244 | rotate90: 0 3245 | } 3246 | cell { 3247 | x: 25 3248 | y: 10 3249 | tile: 0 3250 | h_flip: 0 3251 | v_flip: 0 3252 | rotate90: 0 3253 | } 3254 | cell { 3255 | x: 26 3256 | y: 10 3257 | tile: 0 3258 | h_flip: 0 3259 | v_flip: 0 3260 | rotate90: 0 3261 | } 3262 | cell { 3263 | x: 27 3264 | y: 10 3265 | tile: 0 3266 | h_flip: 0 3267 | v_flip: 0 3268 | rotate90: 0 3269 | } 3270 | cell { 3271 | x: 28 3272 | y: 10 3273 | tile: 0 3274 | h_flip: 0 3275 | v_flip: 0 3276 | rotate90: 0 3277 | } 3278 | cell { 3279 | x: 29 3280 | y: 10 3281 | tile: 0 3282 | h_flip: 0 3283 | v_flip: 0 3284 | rotate90: 0 3285 | } 3286 | cell { 3287 | x: 30 3288 | y: 10 3289 | tile: 0 3290 | h_flip: 0 3291 | v_flip: 0 3292 | rotate90: 0 3293 | } 3294 | cell { 3295 | x: 31 3296 | y: 10 3297 | tile: 0 3298 | h_flip: 0 3299 | v_flip: 0 3300 | rotate90: 0 3301 | } 3302 | cell { 3303 | x: 32 3304 | y: 10 3305 | tile: 0 3306 | h_flip: 0 3307 | v_flip: 0 3308 | rotate90: 0 3309 | } 3310 | cell { 3311 | x: 33 3312 | y: 10 3313 | tile: 0 3314 | h_flip: 0 3315 | v_flip: 0 3316 | rotate90: 0 3317 | } 3318 | cell { 3319 | x: 34 3320 | y: 10 3321 | tile: 0 3322 | h_flip: 0 3323 | v_flip: 0 3324 | rotate90: 0 3325 | } 3326 | cell { 3327 | x: 35 3328 | y: 10 3329 | tile: 0 3330 | h_flip: 0 3331 | v_flip: 0 3332 | rotate90: 0 3333 | } 3334 | cell { 3335 | x: 36 3336 | y: 10 3337 | tile: 0 3338 | h_flip: 0 3339 | v_flip: 0 3340 | rotate90: 0 3341 | } 3342 | cell { 3343 | x: 37 3344 | y: 10 3345 | tile: 0 3346 | h_flip: 0 3347 | v_flip: 0 3348 | rotate90: 0 3349 | } 3350 | cell { 3351 | x: 0 3352 | y: 11 3353 | tile: 0 3354 | h_flip: 0 3355 | v_flip: 0 3356 | rotate90: 0 3357 | } 3358 | cell { 3359 | x: 1 3360 | y: 11 3361 | tile: 0 3362 | h_flip: 0 3363 | v_flip: 0 3364 | rotate90: 0 3365 | } 3366 | cell { 3367 | x: 2 3368 | y: 11 3369 | tile: 0 3370 | h_flip: 0 3371 | v_flip: 0 3372 | rotate90: 0 3373 | } 3374 | cell { 3375 | x: 3 3376 | y: 11 3377 | tile: 0 3378 | h_flip: 0 3379 | v_flip: 0 3380 | rotate90: 0 3381 | } 3382 | cell { 3383 | x: 4 3384 | y: 11 3385 | tile: 0 3386 | h_flip: 0 3387 | v_flip: 0 3388 | rotate90: 0 3389 | } 3390 | cell { 3391 | x: 5 3392 | y: 11 3393 | tile: 0 3394 | h_flip: 0 3395 | v_flip: 0 3396 | rotate90: 0 3397 | } 3398 | cell { 3399 | x: 6 3400 | y: 11 3401 | tile: 0 3402 | h_flip: 0 3403 | v_flip: 0 3404 | rotate90: 0 3405 | } 3406 | cell { 3407 | x: 7 3408 | y: 11 3409 | tile: 0 3410 | h_flip: 0 3411 | v_flip: 0 3412 | rotate90: 0 3413 | } 3414 | cell { 3415 | x: 8 3416 | y: 11 3417 | tile: 0 3418 | h_flip: 0 3419 | v_flip: 0 3420 | rotate90: 0 3421 | } 3422 | cell { 3423 | x: 9 3424 | y: 11 3425 | tile: 0 3426 | h_flip: 0 3427 | v_flip: 0 3428 | rotate90: 0 3429 | } 3430 | cell { 3431 | x: 10 3432 | y: 11 3433 | tile: 0 3434 | h_flip: 0 3435 | v_flip: 0 3436 | rotate90: 0 3437 | } 3438 | cell { 3439 | x: 11 3440 | y: 11 3441 | tile: 0 3442 | h_flip: 0 3443 | v_flip: 0 3444 | rotate90: 0 3445 | } 3446 | cell { 3447 | x: 12 3448 | y: 11 3449 | tile: 0 3450 | h_flip: 0 3451 | v_flip: 0 3452 | rotate90: 0 3453 | } 3454 | cell { 3455 | x: 13 3456 | y: 11 3457 | tile: 0 3458 | h_flip: 0 3459 | v_flip: 0 3460 | rotate90: 0 3461 | } 3462 | cell { 3463 | x: 14 3464 | y: 11 3465 | tile: 0 3466 | h_flip: 0 3467 | v_flip: 0 3468 | rotate90: 0 3469 | } 3470 | cell { 3471 | x: 15 3472 | y: 11 3473 | tile: 0 3474 | h_flip: 0 3475 | v_flip: 0 3476 | rotate90: 0 3477 | } 3478 | cell { 3479 | x: 16 3480 | y: 11 3481 | tile: 0 3482 | h_flip: 0 3483 | v_flip: 0 3484 | rotate90: 0 3485 | } 3486 | cell { 3487 | x: 17 3488 | y: 11 3489 | tile: 0 3490 | h_flip: 0 3491 | v_flip: 0 3492 | rotate90: 0 3493 | } 3494 | cell { 3495 | x: 18 3496 | y: 11 3497 | tile: 0 3498 | h_flip: 0 3499 | v_flip: 0 3500 | rotate90: 0 3501 | } 3502 | cell { 3503 | x: 19 3504 | y: 11 3505 | tile: 0 3506 | h_flip: 0 3507 | v_flip: 0 3508 | rotate90: 0 3509 | } 3510 | cell { 3511 | x: 20 3512 | y: 11 3513 | tile: 0 3514 | h_flip: 0 3515 | v_flip: 0 3516 | rotate90: 0 3517 | } 3518 | cell { 3519 | x: 21 3520 | y: 11 3521 | tile: 0 3522 | h_flip: 0 3523 | v_flip: 0 3524 | rotate90: 0 3525 | } 3526 | cell { 3527 | x: 22 3528 | y: 11 3529 | tile: 0 3530 | h_flip: 0 3531 | v_flip: 0 3532 | rotate90: 0 3533 | } 3534 | cell { 3535 | x: 23 3536 | y: 11 3537 | tile: 0 3538 | h_flip: 0 3539 | v_flip: 0 3540 | rotate90: 0 3541 | } 3542 | cell { 3543 | x: 24 3544 | y: 11 3545 | tile: 0 3546 | h_flip: 0 3547 | v_flip: 0 3548 | rotate90: 0 3549 | } 3550 | cell { 3551 | x: 25 3552 | y: 11 3553 | tile: 0 3554 | h_flip: 0 3555 | v_flip: 0 3556 | rotate90: 0 3557 | } 3558 | cell { 3559 | x: 26 3560 | y: 11 3561 | tile: 0 3562 | h_flip: 0 3563 | v_flip: 0 3564 | rotate90: 0 3565 | } 3566 | cell { 3567 | x: 27 3568 | y: 11 3569 | tile: 0 3570 | h_flip: 0 3571 | v_flip: 0 3572 | rotate90: 0 3573 | } 3574 | cell { 3575 | x: 28 3576 | y: 11 3577 | tile: 0 3578 | h_flip: 0 3579 | v_flip: 0 3580 | rotate90: 0 3581 | } 3582 | cell { 3583 | x: 29 3584 | y: 11 3585 | tile: 0 3586 | h_flip: 0 3587 | v_flip: 0 3588 | rotate90: 0 3589 | } 3590 | cell { 3591 | x: 30 3592 | y: 11 3593 | tile: 0 3594 | h_flip: 0 3595 | v_flip: 0 3596 | rotate90: 0 3597 | } 3598 | cell { 3599 | x: 31 3600 | y: 11 3601 | tile: 0 3602 | h_flip: 0 3603 | v_flip: 0 3604 | rotate90: 0 3605 | } 3606 | cell { 3607 | x: 32 3608 | y: 11 3609 | tile: 0 3610 | h_flip: 0 3611 | v_flip: 0 3612 | rotate90: 0 3613 | } 3614 | cell { 3615 | x: 33 3616 | y: 11 3617 | tile: 0 3618 | h_flip: 0 3619 | v_flip: 0 3620 | rotate90: 0 3621 | } 3622 | cell { 3623 | x: 34 3624 | y: 11 3625 | tile: 0 3626 | h_flip: 0 3627 | v_flip: 0 3628 | rotate90: 0 3629 | } 3630 | cell { 3631 | x: 35 3632 | y: 11 3633 | tile: 0 3634 | h_flip: 0 3635 | v_flip: 0 3636 | rotate90: 0 3637 | } 3638 | cell { 3639 | x: 36 3640 | y: 11 3641 | tile: 0 3642 | h_flip: 0 3643 | v_flip: 0 3644 | rotate90: 0 3645 | } 3646 | cell { 3647 | x: 37 3648 | y: 11 3649 | tile: 0 3650 | h_flip: 0 3651 | v_flip: 0 3652 | rotate90: 0 3653 | } 3654 | cell { 3655 | x: 0 3656 | y: 12 3657 | tile: 0 3658 | h_flip: 0 3659 | v_flip: 0 3660 | rotate90: 0 3661 | } 3662 | cell { 3663 | x: 1 3664 | y: 12 3665 | tile: 0 3666 | h_flip: 0 3667 | v_flip: 0 3668 | rotate90: 0 3669 | } 3670 | cell { 3671 | x: 2 3672 | y: 12 3673 | tile: 0 3674 | h_flip: 0 3675 | v_flip: 0 3676 | rotate90: 0 3677 | } 3678 | cell { 3679 | x: 3 3680 | y: 12 3681 | tile: 0 3682 | h_flip: 0 3683 | v_flip: 0 3684 | rotate90: 0 3685 | } 3686 | cell { 3687 | x: 4 3688 | y: 12 3689 | tile: 0 3690 | h_flip: 0 3691 | v_flip: 0 3692 | rotate90: 0 3693 | } 3694 | cell { 3695 | x: 5 3696 | y: 12 3697 | tile: 0 3698 | h_flip: 0 3699 | v_flip: 0 3700 | rotate90: 0 3701 | } 3702 | cell { 3703 | x: 6 3704 | y: 12 3705 | tile: 0 3706 | h_flip: 0 3707 | v_flip: 0 3708 | rotate90: 0 3709 | } 3710 | cell { 3711 | x: 7 3712 | y: 12 3713 | tile: 0 3714 | h_flip: 0 3715 | v_flip: 0 3716 | rotate90: 0 3717 | } 3718 | cell { 3719 | x: 8 3720 | y: 12 3721 | tile: 0 3722 | h_flip: 0 3723 | v_flip: 0 3724 | rotate90: 0 3725 | } 3726 | cell { 3727 | x: 9 3728 | y: 12 3729 | tile: 0 3730 | h_flip: 0 3731 | v_flip: 0 3732 | rotate90: 0 3733 | } 3734 | cell { 3735 | x: 10 3736 | y: 12 3737 | tile: 0 3738 | h_flip: 0 3739 | v_flip: 0 3740 | rotate90: 0 3741 | } 3742 | cell { 3743 | x: 11 3744 | y: 12 3745 | tile: 0 3746 | h_flip: 0 3747 | v_flip: 0 3748 | rotate90: 0 3749 | } 3750 | cell { 3751 | x: 12 3752 | y: 12 3753 | tile: 0 3754 | h_flip: 0 3755 | v_flip: 0 3756 | rotate90: 0 3757 | } 3758 | cell { 3759 | x: 13 3760 | y: 12 3761 | tile: 0 3762 | h_flip: 0 3763 | v_flip: 0 3764 | rotate90: 0 3765 | } 3766 | cell { 3767 | x: 14 3768 | y: 12 3769 | tile: 0 3770 | h_flip: 0 3771 | v_flip: 0 3772 | rotate90: 0 3773 | } 3774 | cell { 3775 | x: 15 3776 | y: 12 3777 | tile: 0 3778 | h_flip: 0 3779 | v_flip: 0 3780 | rotate90: 0 3781 | } 3782 | cell { 3783 | x: 16 3784 | y: 12 3785 | tile: 0 3786 | h_flip: 0 3787 | v_flip: 0 3788 | rotate90: 0 3789 | } 3790 | cell { 3791 | x: 17 3792 | y: 12 3793 | tile: 0 3794 | h_flip: 0 3795 | v_flip: 0 3796 | rotate90: 0 3797 | } 3798 | cell { 3799 | x: 18 3800 | y: 12 3801 | tile: 0 3802 | h_flip: 0 3803 | v_flip: 0 3804 | rotate90: 0 3805 | } 3806 | cell { 3807 | x: 19 3808 | y: 12 3809 | tile: 0 3810 | h_flip: 0 3811 | v_flip: 0 3812 | rotate90: 0 3813 | } 3814 | cell { 3815 | x: 20 3816 | y: 12 3817 | tile: 0 3818 | h_flip: 0 3819 | v_flip: 0 3820 | rotate90: 0 3821 | } 3822 | cell { 3823 | x: 21 3824 | y: 12 3825 | tile: 0 3826 | h_flip: 0 3827 | v_flip: 0 3828 | rotate90: 0 3829 | } 3830 | cell { 3831 | x: 22 3832 | y: 12 3833 | tile: 0 3834 | h_flip: 0 3835 | v_flip: 0 3836 | rotate90: 0 3837 | } 3838 | cell { 3839 | x: 23 3840 | y: 12 3841 | tile: 0 3842 | h_flip: 0 3843 | v_flip: 0 3844 | rotate90: 0 3845 | } 3846 | cell { 3847 | x: 24 3848 | y: 12 3849 | tile: 0 3850 | h_flip: 0 3851 | v_flip: 0 3852 | rotate90: 0 3853 | } 3854 | cell { 3855 | x: 25 3856 | y: 12 3857 | tile: 0 3858 | h_flip: 0 3859 | v_flip: 0 3860 | rotate90: 0 3861 | } 3862 | cell { 3863 | x: 26 3864 | y: 12 3865 | tile: 0 3866 | h_flip: 0 3867 | v_flip: 0 3868 | rotate90: 0 3869 | } 3870 | cell { 3871 | x: 27 3872 | y: 12 3873 | tile: 0 3874 | h_flip: 0 3875 | v_flip: 0 3876 | rotate90: 0 3877 | } 3878 | cell { 3879 | x: 28 3880 | y: 12 3881 | tile: 0 3882 | h_flip: 0 3883 | v_flip: 0 3884 | rotate90: 0 3885 | } 3886 | cell { 3887 | x: 29 3888 | y: 12 3889 | tile: 0 3890 | h_flip: 0 3891 | v_flip: 0 3892 | rotate90: 0 3893 | } 3894 | cell { 3895 | x: 30 3896 | y: 12 3897 | tile: 0 3898 | h_flip: 0 3899 | v_flip: 0 3900 | rotate90: 0 3901 | } 3902 | cell { 3903 | x: 31 3904 | y: 12 3905 | tile: 0 3906 | h_flip: 0 3907 | v_flip: 0 3908 | rotate90: 0 3909 | } 3910 | cell { 3911 | x: 32 3912 | y: 12 3913 | tile: 0 3914 | h_flip: 0 3915 | v_flip: 0 3916 | rotate90: 0 3917 | } 3918 | cell { 3919 | x: 33 3920 | y: 12 3921 | tile: 0 3922 | h_flip: 0 3923 | v_flip: 0 3924 | rotate90: 0 3925 | } 3926 | cell { 3927 | x: 34 3928 | y: 12 3929 | tile: 0 3930 | h_flip: 0 3931 | v_flip: 0 3932 | rotate90: 0 3933 | } 3934 | cell { 3935 | x: 35 3936 | y: 12 3937 | tile: 0 3938 | h_flip: 0 3939 | v_flip: 0 3940 | rotate90: 0 3941 | } 3942 | cell { 3943 | x: 36 3944 | y: 12 3945 | tile: 0 3946 | h_flip: 0 3947 | v_flip: 0 3948 | rotate90: 0 3949 | } 3950 | cell { 3951 | x: 37 3952 | y: 12 3953 | tile: 0 3954 | h_flip: 0 3955 | v_flip: 0 3956 | rotate90: 0 3957 | } 3958 | cell { 3959 | x: 0 3960 | y: 13 3961 | tile: 0 3962 | h_flip: 0 3963 | v_flip: 0 3964 | rotate90: 0 3965 | } 3966 | cell { 3967 | x: 1 3968 | y: 13 3969 | tile: 0 3970 | h_flip: 0 3971 | v_flip: 0 3972 | rotate90: 0 3973 | } 3974 | cell { 3975 | x: 2 3976 | y: 13 3977 | tile: 0 3978 | h_flip: 0 3979 | v_flip: 0 3980 | rotate90: 0 3981 | } 3982 | cell { 3983 | x: 3 3984 | y: 13 3985 | tile: 0 3986 | h_flip: 0 3987 | v_flip: 0 3988 | rotate90: 0 3989 | } 3990 | cell { 3991 | x: 4 3992 | y: 13 3993 | tile: 0 3994 | h_flip: 0 3995 | v_flip: 0 3996 | rotate90: 0 3997 | } 3998 | cell { 3999 | x: 5 4000 | y: 13 4001 | tile: 0 4002 | h_flip: 0 4003 | v_flip: 0 4004 | rotate90: 0 4005 | } 4006 | cell { 4007 | x: 6 4008 | y: 13 4009 | tile: 0 4010 | h_flip: 0 4011 | v_flip: 0 4012 | rotate90: 0 4013 | } 4014 | cell { 4015 | x: 7 4016 | y: 13 4017 | tile: 0 4018 | h_flip: 0 4019 | v_flip: 0 4020 | rotate90: 0 4021 | } 4022 | cell { 4023 | x: 8 4024 | y: 13 4025 | tile: 0 4026 | h_flip: 0 4027 | v_flip: 0 4028 | rotate90: 0 4029 | } 4030 | cell { 4031 | x: 9 4032 | y: 13 4033 | tile: 0 4034 | h_flip: 0 4035 | v_flip: 0 4036 | rotate90: 0 4037 | } 4038 | cell { 4039 | x: 10 4040 | y: 13 4041 | tile: 0 4042 | h_flip: 0 4043 | v_flip: 0 4044 | rotate90: 0 4045 | } 4046 | cell { 4047 | x: 11 4048 | y: 13 4049 | tile: 0 4050 | h_flip: 0 4051 | v_flip: 0 4052 | rotate90: 0 4053 | } 4054 | cell { 4055 | x: 12 4056 | y: 13 4057 | tile: 0 4058 | h_flip: 0 4059 | v_flip: 0 4060 | rotate90: 0 4061 | } 4062 | cell { 4063 | x: 13 4064 | y: 13 4065 | tile: 0 4066 | h_flip: 0 4067 | v_flip: 0 4068 | rotate90: 0 4069 | } 4070 | cell { 4071 | x: 14 4072 | y: 13 4073 | tile: 0 4074 | h_flip: 0 4075 | v_flip: 0 4076 | rotate90: 0 4077 | } 4078 | cell { 4079 | x: 15 4080 | y: 13 4081 | tile: 0 4082 | h_flip: 0 4083 | v_flip: 0 4084 | rotate90: 0 4085 | } 4086 | cell { 4087 | x: 16 4088 | y: 13 4089 | tile: 0 4090 | h_flip: 0 4091 | v_flip: 0 4092 | rotate90: 0 4093 | } 4094 | cell { 4095 | x: 17 4096 | y: 13 4097 | tile: 0 4098 | h_flip: 0 4099 | v_flip: 0 4100 | rotate90: 0 4101 | } 4102 | cell { 4103 | x: 18 4104 | y: 13 4105 | tile: 0 4106 | h_flip: 0 4107 | v_flip: 0 4108 | rotate90: 0 4109 | } 4110 | cell { 4111 | x: 19 4112 | y: 13 4113 | tile: 0 4114 | h_flip: 0 4115 | v_flip: 0 4116 | rotate90: 0 4117 | } 4118 | cell { 4119 | x: 20 4120 | y: 13 4121 | tile: 0 4122 | h_flip: 0 4123 | v_flip: 0 4124 | rotate90: 0 4125 | } 4126 | cell { 4127 | x: 21 4128 | y: 13 4129 | tile: 0 4130 | h_flip: 0 4131 | v_flip: 0 4132 | rotate90: 0 4133 | } 4134 | cell { 4135 | x: 22 4136 | y: 13 4137 | tile: 0 4138 | h_flip: 0 4139 | v_flip: 0 4140 | rotate90: 0 4141 | } 4142 | cell { 4143 | x: 23 4144 | y: 13 4145 | tile: 0 4146 | h_flip: 0 4147 | v_flip: 0 4148 | rotate90: 0 4149 | } 4150 | cell { 4151 | x: 24 4152 | y: 13 4153 | tile: 0 4154 | h_flip: 0 4155 | v_flip: 0 4156 | rotate90: 0 4157 | } 4158 | cell { 4159 | x: 25 4160 | y: 13 4161 | tile: 0 4162 | h_flip: 0 4163 | v_flip: 0 4164 | rotate90: 0 4165 | } 4166 | cell { 4167 | x: 26 4168 | y: 13 4169 | tile: 0 4170 | h_flip: 0 4171 | v_flip: 0 4172 | rotate90: 0 4173 | } 4174 | cell { 4175 | x: 27 4176 | y: 13 4177 | tile: 0 4178 | h_flip: 0 4179 | v_flip: 0 4180 | rotate90: 0 4181 | } 4182 | cell { 4183 | x: 28 4184 | y: 13 4185 | tile: 0 4186 | h_flip: 0 4187 | v_flip: 0 4188 | rotate90: 0 4189 | } 4190 | cell { 4191 | x: 29 4192 | y: 13 4193 | tile: 0 4194 | h_flip: 0 4195 | v_flip: 0 4196 | rotate90: 0 4197 | } 4198 | cell { 4199 | x: 30 4200 | y: 13 4201 | tile: 0 4202 | h_flip: 0 4203 | v_flip: 0 4204 | rotate90: 0 4205 | } 4206 | cell { 4207 | x: 31 4208 | y: 13 4209 | tile: 0 4210 | h_flip: 0 4211 | v_flip: 0 4212 | rotate90: 0 4213 | } 4214 | cell { 4215 | x: 32 4216 | y: 13 4217 | tile: 0 4218 | h_flip: 0 4219 | v_flip: 0 4220 | rotate90: 0 4221 | } 4222 | cell { 4223 | x: 33 4224 | y: 13 4225 | tile: 0 4226 | h_flip: 0 4227 | v_flip: 0 4228 | rotate90: 0 4229 | } 4230 | cell { 4231 | x: 34 4232 | y: 13 4233 | tile: 0 4234 | h_flip: 0 4235 | v_flip: 0 4236 | rotate90: 0 4237 | } 4238 | cell { 4239 | x: 35 4240 | y: 13 4241 | tile: 0 4242 | h_flip: 0 4243 | v_flip: 0 4244 | rotate90: 0 4245 | } 4246 | cell { 4247 | x: 36 4248 | y: 13 4249 | tile: 0 4250 | h_flip: 0 4251 | v_flip: 0 4252 | rotate90: 0 4253 | } 4254 | cell { 4255 | x: 37 4256 | y: 13 4257 | tile: 0 4258 | h_flip: 0 4259 | v_flip: 0 4260 | rotate90: 0 4261 | } 4262 | cell { 4263 | x: 0 4264 | y: 14 4265 | tile: 0 4266 | h_flip: 0 4267 | v_flip: 0 4268 | rotate90: 0 4269 | } 4270 | cell { 4271 | x: 1 4272 | y: 14 4273 | tile: 0 4274 | h_flip: 0 4275 | v_flip: 0 4276 | rotate90: 0 4277 | } 4278 | cell { 4279 | x: 2 4280 | y: 14 4281 | tile: 0 4282 | h_flip: 0 4283 | v_flip: 0 4284 | rotate90: 0 4285 | } 4286 | cell { 4287 | x: 3 4288 | y: 14 4289 | tile: 0 4290 | h_flip: 0 4291 | v_flip: 0 4292 | rotate90: 0 4293 | } 4294 | cell { 4295 | x: 4 4296 | y: 14 4297 | tile: 0 4298 | h_flip: 0 4299 | v_flip: 0 4300 | rotate90: 0 4301 | } 4302 | cell { 4303 | x: 5 4304 | y: 14 4305 | tile: 0 4306 | h_flip: 0 4307 | v_flip: 0 4308 | rotate90: 0 4309 | } 4310 | cell { 4311 | x: 6 4312 | y: 14 4313 | tile: 0 4314 | h_flip: 0 4315 | v_flip: 0 4316 | rotate90: 0 4317 | } 4318 | cell { 4319 | x: 7 4320 | y: 14 4321 | tile: 0 4322 | h_flip: 0 4323 | v_flip: 0 4324 | rotate90: 0 4325 | } 4326 | cell { 4327 | x: 8 4328 | y: 14 4329 | tile: 0 4330 | h_flip: 0 4331 | v_flip: 0 4332 | rotate90: 0 4333 | } 4334 | cell { 4335 | x: 9 4336 | y: 14 4337 | tile: 0 4338 | h_flip: 0 4339 | v_flip: 0 4340 | rotate90: 0 4341 | } 4342 | cell { 4343 | x: 10 4344 | y: 14 4345 | tile: 0 4346 | h_flip: 0 4347 | v_flip: 0 4348 | rotate90: 0 4349 | } 4350 | cell { 4351 | x: 11 4352 | y: 14 4353 | tile: 0 4354 | h_flip: 0 4355 | v_flip: 0 4356 | rotate90: 0 4357 | } 4358 | cell { 4359 | x: 12 4360 | y: 14 4361 | tile: 0 4362 | h_flip: 0 4363 | v_flip: 0 4364 | rotate90: 0 4365 | } 4366 | cell { 4367 | x: 13 4368 | y: 14 4369 | tile: 0 4370 | h_flip: 0 4371 | v_flip: 0 4372 | rotate90: 0 4373 | } 4374 | cell { 4375 | x: 14 4376 | y: 14 4377 | tile: 0 4378 | h_flip: 0 4379 | v_flip: 0 4380 | rotate90: 0 4381 | } 4382 | cell { 4383 | x: 15 4384 | y: 14 4385 | tile: 0 4386 | h_flip: 0 4387 | v_flip: 0 4388 | rotate90: 0 4389 | } 4390 | cell { 4391 | x: 16 4392 | y: 14 4393 | tile: 0 4394 | h_flip: 0 4395 | v_flip: 0 4396 | rotate90: 0 4397 | } 4398 | cell { 4399 | x: 17 4400 | y: 14 4401 | tile: 0 4402 | h_flip: 0 4403 | v_flip: 0 4404 | rotate90: 0 4405 | } 4406 | cell { 4407 | x: 18 4408 | y: 14 4409 | tile: 0 4410 | h_flip: 0 4411 | v_flip: 0 4412 | rotate90: 0 4413 | } 4414 | cell { 4415 | x: 19 4416 | y: 14 4417 | tile: 0 4418 | h_flip: 0 4419 | v_flip: 0 4420 | rotate90: 0 4421 | } 4422 | cell { 4423 | x: 20 4424 | y: 14 4425 | tile: 0 4426 | h_flip: 0 4427 | v_flip: 0 4428 | rotate90: 0 4429 | } 4430 | cell { 4431 | x: 21 4432 | y: 14 4433 | tile: 0 4434 | h_flip: 0 4435 | v_flip: 0 4436 | rotate90: 0 4437 | } 4438 | cell { 4439 | x: 22 4440 | y: 14 4441 | tile: 0 4442 | h_flip: 0 4443 | v_flip: 0 4444 | rotate90: 0 4445 | } 4446 | cell { 4447 | x: 23 4448 | y: 14 4449 | tile: 0 4450 | h_flip: 0 4451 | v_flip: 0 4452 | rotate90: 0 4453 | } 4454 | cell { 4455 | x: 24 4456 | y: 14 4457 | tile: 0 4458 | h_flip: 0 4459 | v_flip: 0 4460 | rotate90: 0 4461 | } 4462 | cell { 4463 | x: 25 4464 | y: 14 4465 | tile: 0 4466 | h_flip: 0 4467 | v_flip: 0 4468 | rotate90: 0 4469 | } 4470 | cell { 4471 | x: 26 4472 | y: 14 4473 | tile: 0 4474 | h_flip: 0 4475 | v_flip: 0 4476 | rotate90: 0 4477 | } 4478 | cell { 4479 | x: 27 4480 | y: 14 4481 | tile: 0 4482 | h_flip: 0 4483 | v_flip: 0 4484 | rotate90: 0 4485 | } 4486 | cell { 4487 | x: 28 4488 | y: 14 4489 | tile: 0 4490 | h_flip: 0 4491 | v_flip: 0 4492 | rotate90: 0 4493 | } 4494 | cell { 4495 | x: 29 4496 | y: 14 4497 | tile: 0 4498 | h_flip: 0 4499 | v_flip: 0 4500 | rotate90: 0 4501 | } 4502 | cell { 4503 | x: 30 4504 | y: 14 4505 | tile: 0 4506 | h_flip: 0 4507 | v_flip: 0 4508 | rotate90: 0 4509 | } 4510 | cell { 4511 | x: 31 4512 | y: 14 4513 | tile: 0 4514 | h_flip: 0 4515 | v_flip: 0 4516 | rotate90: 0 4517 | } 4518 | cell { 4519 | x: 32 4520 | y: 14 4521 | tile: 0 4522 | h_flip: 0 4523 | v_flip: 0 4524 | rotate90: 0 4525 | } 4526 | cell { 4527 | x: 33 4528 | y: 14 4529 | tile: 0 4530 | h_flip: 0 4531 | v_flip: 0 4532 | rotate90: 0 4533 | } 4534 | cell { 4535 | x: 34 4536 | y: 14 4537 | tile: 0 4538 | h_flip: 0 4539 | v_flip: 0 4540 | rotate90: 0 4541 | } 4542 | cell { 4543 | x: 35 4544 | y: 14 4545 | tile: 0 4546 | h_flip: 0 4547 | v_flip: 0 4548 | rotate90: 0 4549 | } 4550 | cell { 4551 | x: 36 4552 | y: 14 4553 | tile: 0 4554 | h_flip: 0 4555 | v_flip: 0 4556 | rotate90: 0 4557 | } 4558 | cell { 4559 | x: 37 4560 | y: 14 4561 | tile: 0 4562 | h_flip: 0 4563 | v_flip: 0 4564 | rotate90: 0 4565 | } 4566 | cell { 4567 | x: 0 4568 | y: 15 4569 | tile: 0 4570 | h_flip: 0 4571 | v_flip: 0 4572 | rotate90: 0 4573 | } 4574 | cell { 4575 | x: 1 4576 | y: 15 4577 | tile: 0 4578 | h_flip: 0 4579 | v_flip: 0 4580 | rotate90: 0 4581 | } 4582 | cell { 4583 | x: 2 4584 | y: 15 4585 | tile: 0 4586 | h_flip: 0 4587 | v_flip: 0 4588 | rotate90: 0 4589 | } 4590 | cell { 4591 | x: 3 4592 | y: 15 4593 | tile: 0 4594 | h_flip: 0 4595 | v_flip: 0 4596 | rotate90: 0 4597 | } 4598 | cell { 4599 | x: 4 4600 | y: 15 4601 | tile: 0 4602 | h_flip: 0 4603 | v_flip: 0 4604 | rotate90: 0 4605 | } 4606 | cell { 4607 | x: 5 4608 | y: 15 4609 | tile: 0 4610 | h_flip: 0 4611 | v_flip: 0 4612 | rotate90: 0 4613 | } 4614 | cell { 4615 | x: 6 4616 | y: 15 4617 | tile: 0 4618 | h_flip: 0 4619 | v_flip: 0 4620 | rotate90: 0 4621 | } 4622 | cell { 4623 | x: 7 4624 | y: 15 4625 | tile: 0 4626 | h_flip: 0 4627 | v_flip: 0 4628 | rotate90: 0 4629 | } 4630 | cell { 4631 | x: 8 4632 | y: 15 4633 | tile: 0 4634 | h_flip: 0 4635 | v_flip: 0 4636 | rotate90: 0 4637 | } 4638 | cell { 4639 | x: 9 4640 | y: 15 4641 | tile: 0 4642 | h_flip: 0 4643 | v_flip: 0 4644 | rotate90: 0 4645 | } 4646 | cell { 4647 | x: 10 4648 | y: 15 4649 | tile: 0 4650 | h_flip: 0 4651 | v_flip: 0 4652 | rotate90: 0 4653 | } 4654 | cell { 4655 | x: 11 4656 | y: 15 4657 | tile: 0 4658 | h_flip: 0 4659 | v_flip: 0 4660 | rotate90: 0 4661 | } 4662 | cell { 4663 | x: 12 4664 | y: 15 4665 | tile: 0 4666 | h_flip: 0 4667 | v_flip: 0 4668 | rotate90: 0 4669 | } 4670 | cell { 4671 | x: 13 4672 | y: 15 4673 | tile: 0 4674 | h_flip: 0 4675 | v_flip: 0 4676 | rotate90: 0 4677 | } 4678 | cell { 4679 | x: 14 4680 | y: 15 4681 | tile: 0 4682 | h_flip: 0 4683 | v_flip: 0 4684 | rotate90: 0 4685 | } 4686 | cell { 4687 | x: 15 4688 | y: 15 4689 | tile: 0 4690 | h_flip: 0 4691 | v_flip: 0 4692 | rotate90: 0 4693 | } 4694 | cell { 4695 | x: 16 4696 | y: 15 4697 | tile: 0 4698 | h_flip: 0 4699 | v_flip: 0 4700 | rotate90: 0 4701 | } 4702 | cell { 4703 | x: 17 4704 | y: 15 4705 | tile: 0 4706 | h_flip: 0 4707 | v_flip: 0 4708 | rotate90: 0 4709 | } 4710 | cell { 4711 | x: 18 4712 | y: 15 4713 | tile: 0 4714 | h_flip: 0 4715 | v_flip: 0 4716 | rotate90: 0 4717 | } 4718 | cell { 4719 | x: 19 4720 | y: 15 4721 | tile: 0 4722 | h_flip: 0 4723 | v_flip: 0 4724 | rotate90: 0 4725 | } 4726 | cell { 4727 | x: 20 4728 | y: 15 4729 | tile: 0 4730 | h_flip: 0 4731 | v_flip: 0 4732 | rotate90: 0 4733 | } 4734 | cell { 4735 | x: 21 4736 | y: 15 4737 | tile: 0 4738 | h_flip: 0 4739 | v_flip: 0 4740 | rotate90: 0 4741 | } 4742 | cell { 4743 | x: 22 4744 | y: 15 4745 | tile: 0 4746 | h_flip: 0 4747 | v_flip: 0 4748 | rotate90: 0 4749 | } 4750 | cell { 4751 | x: 23 4752 | y: 15 4753 | tile: 0 4754 | h_flip: 0 4755 | v_flip: 0 4756 | rotate90: 0 4757 | } 4758 | cell { 4759 | x: 24 4760 | y: 15 4761 | tile: 0 4762 | h_flip: 0 4763 | v_flip: 0 4764 | rotate90: 0 4765 | } 4766 | cell { 4767 | x: 25 4768 | y: 15 4769 | tile: 0 4770 | h_flip: 0 4771 | v_flip: 0 4772 | rotate90: 0 4773 | } 4774 | cell { 4775 | x: 26 4776 | y: 15 4777 | tile: 0 4778 | h_flip: 0 4779 | v_flip: 0 4780 | rotate90: 0 4781 | } 4782 | cell { 4783 | x: 27 4784 | y: 15 4785 | tile: 0 4786 | h_flip: 0 4787 | v_flip: 0 4788 | rotate90: 0 4789 | } 4790 | cell { 4791 | x: 28 4792 | y: 15 4793 | tile: 0 4794 | h_flip: 0 4795 | v_flip: 0 4796 | rotate90: 0 4797 | } 4798 | cell { 4799 | x: 29 4800 | y: 15 4801 | tile: 0 4802 | h_flip: 0 4803 | v_flip: 0 4804 | rotate90: 0 4805 | } 4806 | cell { 4807 | x: 30 4808 | y: 15 4809 | tile: 0 4810 | h_flip: 0 4811 | v_flip: 0 4812 | rotate90: 0 4813 | } 4814 | cell { 4815 | x: 31 4816 | y: 15 4817 | tile: 0 4818 | h_flip: 0 4819 | v_flip: 0 4820 | rotate90: 0 4821 | } 4822 | cell { 4823 | x: 32 4824 | y: 15 4825 | tile: 0 4826 | h_flip: 0 4827 | v_flip: 0 4828 | rotate90: 0 4829 | } 4830 | cell { 4831 | x: 33 4832 | y: 15 4833 | tile: 0 4834 | h_flip: 0 4835 | v_flip: 0 4836 | rotate90: 0 4837 | } 4838 | cell { 4839 | x: 34 4840 | y: 15 4841 | tile: 0 4842 | h_flip: 0 4843 | v_flip: 0 4844 | rotate90: 0 4845 | } 4846 | cell { 4847 | x: 35 4848 | y: 15 4849 | tile: 0 4850 | h_flip: 0 4851 | v_flip: 0 4852 | rotate90: 0 4853 | } 4854 | cell { 4855 | x: 36 4856 | y: 15 4857 | tile: 0 4858 | h_flip: 0 4859 | v_flip: 0 4860 | rotate90: 0 4861 | } 4862 | cell { 4863 | x: 37 4864 | y: 15 4865 | tile: 0 4866 | h_flip: 0 4867 | v_flip: 0 4868 | rotate90: 0 4869 | } 4870 | cell { 4871 | x: 0 4872 | y: 16 4873 | tile: 0 4874 | h_flip: 0 4875 | v_flip: 0 4876 | rotate90: 0 4877 | } 4878 | cell { 4879 | x: 1 4880 | y: 16 4881 | tile: 0 4882 | h_flip: 0 4883 | v_flip: 0 4884 | rotate90: 0 4885 | } 4886 | cell { 4887 | x: 2 4888 | y: 16 4889 | tile: 0 4890 | h_flip: 0 4891 | v_flip: 0 4892 | rotate90: 0 4893 | } 4894 | cell { 4895 | x: 3 4896 | y: 16 4897 | tile: 0 4898 | h_flip: 0 4899 | v_flip: 0 4900 | rotate90: 0 4901 | } 4902 | cell { 4903 | x: 4 4904 | y: 16 4905 | tile: 0 4906 | h_flip: 0 4907 | v_flip: 0 4908 | rotate90: 0 4909 | } 4910 | cell { 4911 | x: 5 4912 | y: 16 4913 | tile: 0 4914 | h_flip: 0 4915 | v_flip: 0 4916 | rotate90: 0 4917 | } 4918 | cell { 4919 | x: 6 4920 | y: 16 4921 | tile: 0 4922 | h_flip: 0 4923 | v_flip: 0 4924 | rotate90: 0 4925 | } 4926 | cell { 4927 | x: 7 4928 | y: 16 4929 | tile: 0 4930 | h_flip: 0 4931 | v_flip: 0 4932 | rotate90: 0 4933 | } 4934 | cell { 4935 | x: 8 4936 | y: 16 4937 | tile: 0 4938 | h_flip: 0 4939 | v_flip: 0 4940 | rotate90: 0 4941 | } 4942 | cell { 4943 | x: 9 4944 | y: 16 4945 | tile: 0 4946 | h_flip: 0 4947 | v_flip: 0 4948 | rotate90: 0 4949 | } 4950 | cell { 4951 | x: 10 4952 | y: 16 4953 | tile: 0 4954 | h_flip: 0 4955 | v_flip: 0 4956 | rotate90: 0 4957 | } 4958 | cell { 4959 | x: 11 4960 | y: 16 4961 | tile: 0 4962 | h_flip: 0 4963 | v_flip: 0 4964 | rotate90: 0 4965 | } 4966 | cell { 4967 | x: 12 4968 | y: 16 4969 | tile: 0 4970 | h_flip: 0 4971 | v_flip: 0 4972 | rotate90: 0 4973 | } 4974 | cell { 4975 | x: 13 4976 | y: 16 4977 | tile: 0 4978 | h_flip: 0 4979 | v_flip: 0 4980 | rotate90: 0 4981 | } 4982 | cell { 4983 | x: 14 4984 | y: 16 4985 | tile: 0 4986 | h_flip: 0 4987 | v_flip: 0 4988 | rotate90: 0 4989 | } 4990 | cell { 4991 | x: 15 4992 | y: 16 4993 | tile: 0 4994 | h_flip: 0 4995 | v_flip: 0 4996 | rotate90: 0 4997 | } 4998 | cell { 4999 | x: 16 5000 | y: 16 5001 | tile: 0 5002 | h_flip: 0 5003 | v_flip: 0 5004 | rotate90: 0 5005 | } 5006 | cell { 5007 | x: 17 5008 | y: 16 5009 | tile: 0 5010 | h_flip: 0 5011 | v_flip: 0 5012 | rotate90: 0 5013 | } 5014 | cell { 5015 | x: 18 5016 | y: 16 5017 | tile: 0 5018 | h_flip: 0 5019 | v_flip: 0 5020 | rotate90: 0 5021 | } 5022 | cell { 5023 | x: 19 5024 | y: 16 5025 | tile: 0 5026 | h_flip: 0 5027 | v_flip: 0 5028 | rotate90: 0 5029 | } 5030 | cell { 5031 | x: 20 5032 | y: 16 5033 | tile: 0 5034 | h_flip: 0 5035 | v_flip: 0 5036 | rotate90: 0 5037 | } 5038 | cell { 5039 | x: 21 5040 | y: 16 5041 | tile: 0 5042 | h_flip: 0 5043 | v_flip: 0 5044 | rotate90: 0 5045 | } 5046 | cell { 5047 | x: 22 5048 | y: 16 5049 | tile: 0 5050 | h_flip: 0 5051 | v_flip: 0 5052 | rotate90: 0 5053 | } 5054 | cell { 5055 | x: 23 5056 | y: 16 5057 | tile: 0 5058 | h_flip: 0 5059 | v_flip: 0 5060 | rotate90: 0 5061 | } 5062 | cell { 5063 | x: 24 5064 | y: 16 5065 | tile: 0 5066 | h_flip: 0 5067 | v_flip: 0 5068 | rotate90: 0 5069 | } 5070 | cell { 5071 | x: 25 5072 | y: 16 5073 | tile: 0 5074 | h_flip: 0 5075 | v_flip: 0 5076 | rotate90: 0 5077 | } 5078 | cell { 5079 | x: 26 5080 | y: 16 5081 | tile: 0 5082 | h_flip: 0 5083 | v_flip: 0 5084 | rotate90: 0 5085 | } 5086 | cell { 5087 | x: 27 5088 | y: 16 5089 | tile: 0 5090 | h_flip: 0 5091 | v_flip: 0 5092 | rotate90: 0 5093 | } 5094 | cell { 5095 | x: 28 5096 | y: 16 5097 | tile: 0 5098 | h_flip: 0 5099 | v_flip: 0 5100 | rotate90: 0 5101 | } 5102 | cell { 5103 | x: 29 5104 | y: 16 5105 | tile: 0 5106 | h_flip: 0 5107 | v_flip: 0 5108 | rotate90: 0 5109 | } 5110 | cell { 5111 | x: 30 5112 | y: 16 5113 | tile: 0 5114 | h_flip: 0 5115 | v_flip: 0 5116 | rotate90: 0 5117 | } 5118 | cell { 5119 | x: 31 5120 | y: 16 5121 | tile: 0 5122 | h_flip: 0 5123 | v_flip: 0 5124 | rotate90: 0 5125 | } 5126 | cell { 5127 | x: 32 5128 | y: 16 5129 | tile: 0 5130 | h_flip: 0 5131 | v_flip: 0 5132 | rotate90: 0 5133 | } 5134 | cell { 5135 | x: 33 5136 | y: 16 5137 | tile: 0 5138 | h_flip: 0 5139 | v_flip: 0 5140 | rotate90: 0 5141 | } 5142 | cell { 5143 | x: 34 5144 | y: 16 5145 | tile: 0 5146 | h_flip: 0 5147 | v_flip: 0 5148 | rotate90: 0 5149 | } 5150 | cell { 5151 | x: 35 5152 | y: 16 5153 | tile: 0 5154 | h_flip: 0 5155 | v_flip: 0 5156 | rotate90: 0 5157 | } 5158 | cell { 5159 | x: 36 5160 | y: 16 5161 | tile: 0 5162 | h_flip: 0 5163 | v_flip: 0 5164 | rotate90: 0 5165 | } 5166 | cell { 5167 | x: 37 5168 | y: 16 5169 | tile: 0 5170 | h_flip: 0 5171 | v_flip: 0 5172 | rotate90: 0 5173 | } 5174 | cell { 5175 | x: 0 5176 | y: 17 5177 | tile: 0 5178 | h_flip: 0 5179 | v_flip: 0 5180 | rotate90: 0 5181 | } 5182 | cell { 5183 | x: 1 5184 | y: 17 5185 | tile: 0 5186 | h_flip: 0 5187 | v_flip: 0 5188 | rotate90: 0 5189 | } 5190 | cell { 5191 | x: 2 5192 | y: 17 5193 | tile: 0 5194 | h_flip: 0 5195 | v_flip: 0 5196 | rotate90: 0 5197 | } 5198 | cell { 5199 | x: 3 5200 | y: 17 5201 | tile: 0 5202 | h_flip: 0 5203 | v_flip: 0 5204 | rotate90: 0 5205 | } 5206 | cell { 5207 | x: 4 5208 | y: 17 5209 | tile: 0 5210 | h_flip: 0 5211 | v_flip: 0 5212 | rotate90: 0 5213 | } 5214 | cell { 5215 | x: 5 5216 | y: 17 5217 | tile: 0 5218 | h_flip: 0 5219 | v_flip: 0 5220 | rotate90: 0 5221 | } 5222 | cell { 5223 | x: 6 5224 | y: 17 5225 | tile: 0 5226 | h_flip: 0 5227 | v_flip: 0 5228 | rotate90: 0 5229 | } 5230 | cell { 5231 | x: 7 5232 | y: 17 5233 | tile: 0 5234 | h_flip: 0 5235 | v_flip: 0 5236 | rotate90: 0 5237 | } 5238 | cell { 5239 | x: 8 5240 | y: 17 5241 | tile: 0 5242 | h_flip: 0 5243 | v_flip: 0 5244 | rotate90: 0 5245 | } 5246 | cell { 5247 | x: 9 5248 | y: 17 5249 | tile: 0 5250 | h_flip: 0 5251 | v_flip: 0 5252 | rotate90: 0 5253 | } 5254 | cell { 5255 | x: 10 5256 | y: 17 5257 | tile: 0 5258 | h_flip: 0 5259 | v_flip: 0 5260 | rotate90: 0 5261 | } 5262 | cell { 5263 | x: 11 5264 | y: 17 5265 | tile: 0 5266 | h_flip: 0 5267 | v_flip: 0 5268 | rotate90: 0 5269 | } 5270 | cell { 5271 | x: 12 5272 | y: 17 5273 | tile: 0 5274 | h_flip: 0 5275 | v_flip: 0 5276 | rotate90: 0 5277 | } 5278 | cell { 5279 | x: 13 5280 | y: 17 5281 | tile: 0 5282 | h_flip: 0 5283 | v_flip: 0 5284 | rotate90: 0 5285 | } 5286 | cell { 5287 | x: 14 5288 | y: 17 5289 | tile: 0 5290 | h_flip: 0 5291 | v_flip: 0 5292 | rotate90: 0 5293 | } 5294 | cell { 5295 | x: 15 5296 | y: 17 5297 | tile: 0 5298 | h_flip: 0 5299 | v_flip: 0 5300 | rotate90: 0 5301 | } 5302 | cell { 5303 | x: 16 5304 | y: 17 5305 | tile: 0 5306 | h_flip: 0 5307 | v_flip: 0 5308 | rotate90: 0 5309 | } 5310 | cell { 5311 | x: 17 5312 | y: 17 5313 | tile: 0 5314 | h_flip: 0 5315 | v_flip: 0 5316 | rotate90: 0 5317 | } 5318 | cell { 5319 | x: 18 5320 | y: 17 5321 | tile: 0 5322 | h_flip: 0 5323 | v_flip: 0 5324 | rotate90: 0 5325 | } 5326 | cell { 5327 | x: 19 5328 | y: 17 5329 | tile: 0 5330 | h_flip: 0 5331 | v_flip: 0 5332 | rotate90: 0 5333 | } 5334 | cell { 5335 | x: 20 5336 | y: 17 5337 | tile: 0 5338 | h_flip: 0 5339 | v_flip: 0 5340 | rotate90: 0 5341 | } 5342 | cell { 5343 | x: 21 5344 | y: 17 5345 | tile: 0 5346 | h_flip: 0 5347 | v_flip: 0 5348 | rotate90: 0 5349 | } 5350 | cell { 5351 | x: 22 5352 | y: 17 5353 | tile: 0 5354 | h_flip: 0 5355 | v_flip: 0 5356 | rotate90: 0 5357 | } 5358 | cell { 5359 | x: 23 5360 | y: 17 5361 | tile: 0 5362 | h_flip: 0 5363 | v_flip: 0 5364 | rotate90: 0 5365 | } 5366 | cell { 5367 | x: 24 5368 | y: 17 5369 | tile: 0 5370 | h_flip: 0 5371 | v_flip: 0 5372 | rotate90: 0 5373 | } 5374 | cell { 5375 | x: 25 5376 | y: 17 5377 | tile: 0 5378 | h_flip: 0 5379 | v_flip: 0 5380 | rotate90: 0 5381 | } 5382 | cell { 5383 | x: 26 5384 | y: 17 5385 | tile: 0 5386 | h_flip: 0 5387 | v_flip: 0 5388 | rotate90: 0 5389 | } 5390 | cell { 5391 | x: 27 5392 | y: 17 5393 | tile: 0 5394 | h_flip: 0 5395 | v_flip: 0 5396 | rotate90: 0 5397 | } 5398 | cell { 5399 | x: 28 5400 | y: 17 5401 | tile: 0 5402 | h_flip: 0 5403 | v_flip: 0 5404 | rotate90: 0 5405 | } 5406 | cell { 5407 | x: 29 5408 | y: 17 5409 | tile: 0 5410 | h_flip: 0 5411 | v_flip: 0 5412 | rotate90: 0 5413 | } 5414 | cell { 5415 | x: 30 5416 | y: 17 5417 | tile: 0 5418 | h_flip: 0 5419 | v_flip: 0 5420 | rotate90: 0 5421 | } 5422 | cell { 5423 | x: 31 5424 | y: 17 5425 | tile: 0 5426 | h_flip: 0 5427 | v_flip: 0 5428 | rotate90: 0 5429 | } 5430 | cell { 5431 | x: 32 5432 | y: 17 5433 | tile: 0 5434 | h_flip: 0 5435 | v_flip: 0 5436 | rotate90: 0 5437 | } 5438 | cell { 5439 | x: 33 5440 | y: 17 5441 | tile: 0 5442 | h_flip: 0 5443 | v_flip: 0 5444 | rotate90: 0 5445 | } 5446 | cell { 5447 | x: 34 5448 | y: 17 5449 | tile: 0 5450 | h_flip: 0 5451 | v_flip: 0 5452 | rotate90: 0 5453 | } 5454 | cell { 5455 | x: 35 5456 | y: 17 5457 | tile: 0 5458 | h_flip: 0 5459 | v_flip: 0 5460 | rotate90: 0 5461 | } 5462 | cell { 5463 | x: 36 5464 | y: 17 5465 | tile: 0 5466 | h_flip: 0 5467 | v_flip: 0 5468 | rotate90: 0 5469 | } 5470 | cell { 5471 | x: 37 5472 | y: 17 5473 | tile: 0 5474 | h_flip: 0 5475 | v_flip: 0 5476 | rotate90: 0 5477 | } 5478 | cell { 5479 | x: 0 5480 | y: 18 5481 | tile: 0 5482 | h_flip: 0 5483 | v_flip: 0 5484 | rotate90: 0 5485 | } 5486 | cell { 5487 | x: 1 5488 | y: 18 5489 | tile: 0 5490 | h_flip: 0 5491 | v_flip: 0 5492 | rotate90: 0 5493 | } 5494 | cell { 5495 | x: 2 5496 | y: 18 5497 | tile: 0 5498 | h_flip: 0 5499 | v_flip: 0 5500 | rotate90: 0 5501 | } 5502 | cell { 5503 | x: 3 5504 | y: 18 5505 | tile: 0 5506 | h_flip: 0 5507 | v_flip: 0 5508 | rotate90: 0 5509 | } 5510 | cell { 5511 | x: 4 5512 | y: 18 5513 | tile: 0 5514 | h_flip: 0 5515 | v_flip: 0 5516 | rotate90: 0 5517 | } 5518 | cell { 5519 | x: 5 5520 | y: 18 5521 | tile: 0 5522 | h_flip: 0 5523 | v_flip: 0 5524 | rotate90: 0 5525 | } 5526 | cell { 5527 | x: 6 5528 | y: 18 5529 | tile: 0 5530 | h_flip: 0 5531 | v_flip: 0 5532 | rotate90: 0 5533 | } 5534 | cell { 5535 | x: 7 5536 | y: 18 5537 | tile: 0 5538 | h_flip: 0 5539 | v_flip: 0 5540 | rotate90: 0 5541 | } 5542 | cell { 5543 | x: 8 5544 | y: 18 5545 | tile: 0 5546 | h_flip: 0 5547 | v_flip: 0 5548 | rotate90: 0 5549 | } 5550 | cell { 5551 | x: 9 5552 | y: 18 5553 | tile: 0 5554 | h_flip: 0 5555 | v_flip: 0 5556 | rotate90: 0 5557 | } 5558 | cell { 5559 | x: 10 5560 | y: 18 5561 | tile: 0 5562 | h_flip: 0 5563 | v_flip: 0 5564 | rotate90: 0 5565 | } 5566 | cell { 5567 | x: 11 5568 | y: 18 5569 | tile: 0 5570 | h_flip: 0 5571 | v_flip: 0 5572 | rotate90: 0 5573 | } 5574 | cell { 5575 | x: 12 5576 | y: 18 5577 | tile: 0 5578 | h_flip: 0 5579 | v_flip: 0 5580 | rotate90: 0 5581 | } 5582 | cell { 5583 | x: 13 5584 | y: 18 5585 | tile: 0 5586 | h_flip: 0 5587 | v_flip: 0 5588 | rotate90: 0 5589 | } 5590 | cell { 5591 | x: 14 5592 | y: 18 5593 | tile: 0 5594 | h_flip: 0 5595 | v_flip: 0 5596 | rotate90: 0 5597 | } 5598 | cell { 5599 | x: 15 5600 | y: 18 5601 | tile: 0 5602 | h_flip: 0 5603 | v_flip: 0 5604 | rotate90: 0 5605 | } 5606 | cell { 5607 | x: 16 5608 | y: 18 5609 | tile: 0 5610 | h_flip: 0 5611 | v_flip: 0 5612 | rotate90: 0 5613 | } 5614 | cell { 5615 | x: 17 5616 | y: 18 5617 | tile: 0 5618 | h_flip: 0 5619 | v_flip: 0 5620 | rotate90: 0 5621 | } 5622 | cell { 5623 | x: 18 5624 | y: 18 5625 | tile: 0 5626 | h_flip: 0 5627 | v_flip: 0 5628 | rotate90: 0 5629 | } 5630 | cell { 5631 | x: 19 5632 | y: 18 5633 | tile: 0 5634 | h_flip: 0 5635 | v_flip: 0 5636 | rotate90: 0 5637 | } 5638 | cell { 5639 | x: 20 5640 | y: 18 5641 | tile: 0 5642 | h_flip: 0 5643 | v_flip: 0 5644 | rotate90: 0 5645 | } 5646 | cell { 5647 | x: 21 5648 | y: 18 5649 | tile: 0 5650 | h_flip: 0 5651 | v_flip: 0 5652 | rotate90: 0 5653 | } 5654 | cell { 5655 | x: 22 5656 | y: 18 5657 | tile: 0 5658 | h_flip: 0 5659 | v_flip: 0 5660 | rotate90: 0 5661 | } 5662 | cell { 5663 | x: 23 5664 | y: 18 5665 | tile: 0 5666 | h_flip: 0 5667 | v_flip: 0 5668 | rotate90: 0 5669 | } 5670 | cell { 5671 | x: 24 5672 | y: 18 5673 | tile: 0 5674 | h_flip: 0 5675 | v_flip: 0 5676 | rotate90: 0 5677 | } 5678 | cell { 5679 | x: 25 5680 | y: 18 5681 | tile: 0 5682 | h_flip: 0 5683 | v_flip: 0 5684 | rotate90: 0 5685 | } 5686 | cell { 5687 | x: 26 5688 | y: 18 5689 | tile: 0 5690 | h_flip: 0 5691 | v_flip: 0 5692 | rotate90: 0 5693 | } 5694 | cell { 5695 | x: 27 5696 | y: 18 5697 | tile: 0 5698 | h_flip: 0 5699 | v_flip: 0 5700 | rotate90: 0 5701 | } 5702 | cell { 5703 | x: 28 5704 | y: 18 5705 | tile: 0 5706 | h_flip: 0 5707 | v_flip: 0 5708 | rotate90: 0 5709 | } 5710 | cell { 5711 | x: 29 5712 | y: 18 5713 | tile: 0 5714 | h_flip: 0 5715 | v_flip: 0 5716 | rotate90: 0 5717 | } 5718 | cell { 5719 | x: 30 5720 | y: 18 5721 | tile: 0 5722 | h_flip: 0 5723 | v_flip: 0 5724 | rotate90: 0 5725 | } 5726 | cell { 5727 | x: 31 5728 | y: 18 5729 | tile: 0 5730 | h_flip: 0 5731 | v_flip: 0 5732 | rotate90: 0 5733 | } 5734 | cell { 5735 | x: 32 5736 | y: 18 5737 | tile: 0 5738 | h_flip: 0 5739 | v_flip: 0 5740 | rotate90: 0 5741 | } 5742 | cell { 5743 | x: 33 5744 | y: 18 5745 | tile: 0 5746 | h_flip: 0 5747 | v_flip: 0 5748 | rotate90: 0 5749 | } 5750 | cell { 5751 | x: 34 5752 | y: 18 5753 | tile: 0 5754 | h_flip: 0 5755 | v_flip: 0 5756 | rotate90: 0 5757 | } 5758 | cell { 5759 | x: 35 5760 | y: 18 5761 | tile: 0 5762 | h_flip: 0 5763 | v_flip: 0 5764 | rotate90: 0 5765 | } 5766 | cell { 5767 | x: 36 5768 | y: 18 5769 | tile: 0 5770 | h_flip: 0 5771 | v_flip: 0 5772 | rotate90: 0 5773 | } 5774 | cell { 5775 | x: 37 5776 | y: 18 5777 | tile: 0 5778 | h_flip: 0 5779 | v_flip: 0 5780 | rotate90: 0 5781 | } 5782 | cell { 5783 | x: 0 5784 | y: 19 5785 | tile: 0 5786 | h_flip: 0 5787 | v_flip: 0 5788 | rotate90: 0 5789 | } 5790 | cell { 5791 | x: 1 5792 | y: 19 5793 | tile: 0 5794 | h_flip: 0 5795 | v_flip: 0 5796 | rotate90: 0 5797 | } 5798 | cell { 5799 | x: 2 5800 | y: 19 5801 | tile: 0 5802 | h_flip: 0 5803 | v_flip: 0 5804 | rotate90: 0 5805 | } 5806 | cell { 5807 | x: 3 5808 | y: 19 5809 | tile: 0 5810 | h_flip: 0 5811 | v_flip: 0 5812 | rotate90: 0 5813 | } 5814 | cell { 5815 | x: 4 5816 | y: 19 5817 | tile: 0 5818 | h_flip: 0 5819 | v_flip: 0 5820 | rotate90: 0 5821 | } 5822 | cell { 5823 | x: 5 5824 | y: 19 5825 | tile: 0 5826 | h_flip: 0 5827 | v_flip: 0 5828 | rotate90: 0 5829 | } 5830 | cell { 5831 | x: 6 5832 | y: 19 5833 | tile: 0 5834 | h_flip: 0 5835 | v_flip: 0 5836 | rotate90: 0 5837 | } 5838 | cell { 5839 | x: 7 5840 | y: 19 5841 | tile: 0 5842 | h_flip: 0 5843 | v_flip: 0 5844 | rotate90: 0 5845 | } 5846 | cell { 5847 | x: 8 5848 | y: 19 5849 | tile: 0 5850 | h_flip: 0 5851 | v_flip: 0 5852 | rotate90: 0 5853 | } 5854 | cell { 5855 | x: 9 5856 | y: 19 5857 | tile: 0 5858 | h_flip: 0 5859 | v_flip: 0 5860 | rotate90: 0 5861 | } 5862 | cell { 5863 | x: 10 5864 | y: 19 5865 | tile: 0 5866 | h_flip: 0 5867 | v_flip: 0 5868 | rotate90: 0 5869 | } 5870 | cell { 5871 | x: 11 5872 | y: 19 5873 | tile: 0 5874 | h_flip: 0 5875 | v_flip: 0 5876 | rotate90: 0 5877 | } 5878 | cell { 5879 | x: 12 5880 | y: 19 5881 | tile: 0 5882 | h_flip: 0 5883 | v_flip: 0 5884 | rotate90: 0 5885 | } 5886 | cell { 5887 | x: 13 5888 | y: 19 5889 | tile: 0 5890 | h_flip: 0 5891 | v_flip: 0 5892 | rotate90: 0 5893 | } 5894 | cell { 5895 | x: 14 5896 | y: 19 5897 | tile: 0 5898 | h_flip: 0 5899 | v_flip: 0 5900 | rotate90: 0 5901 | } 5902 | cell { 5903 | x: 15 5904 | y: 19 5905 | tile: 0 5906 | h_flip: 0 5907 | v_flip: 0 5908 | rotate90: 0 5909 | } 5910 | cell { 5911 | x: 16 5912 | y: 19 5913 | tile: 0 5914 | h_flip: 0 5915 | v_flip: 0 5916 | rotate90: 0 5917 | } 5918 | cell { 5919 | x: 17 5920 | y: 19 5921 | tile: 0 5922 | h_flip: 0 5923 | v_flip: 0 5924 | rotate90: 0 5925 | } 5926 | cell { 5927 | x: 18 5928 | y: 19 5929 | tile: 0 5930 | h_flip: 0 5931 | v_flip: 0 5932 | rotate90: 0 5933 | } 5934 | cell { 5935 | x: 19 5936 | y: 19 5937 | tile: 0 5938 | h_flip: 0 5939 | v_flip: 0 5940 | rotate90: 0 5941 | } 5942 | cell { 5943 | x: 20 5944 | y: 19 5945 | tile: 0 5946 | h_flip: 0 5947 | v_flip: 0 5948 | rotate90: 0 5949 | } 5950 | cell { 5951 | x: 21 5952 | y: 19 5953 | tile: 0 5954 | h_flip: 0 5955 | v_flip: 0 5956 | rotate90: 0 5957 | } 5958 | cell { 5959 | x: 22 5960 | y: 19 5961 | tile: 0 5962 | h_flip: 0 5963 | v_flip: 0 5964 | rotate90: 0 5965 | } 5966 | cell { 5967 | x: 23 5968 | y: 19 5969 | tile: 0 5970 | h_flip: 0 5971 | v_flip: 0 5972 | rotate90: 0 5973 | } 5974 | cell { 5975 | x: 24 5976 | y: 19 5977 | tile: 0 5978 | h_flip: 0 5979 | v_flip: 0 5980 | rotate90: 0 5981 | } 5982 | cell { 5983 | x: 25 5984 | y: 19 5985 | tile: 0 5986 | h_flip: 0 5987 | v_flip: 0 5988 | rotate90: 0 5989 | } 5990 | cell { 5991 | x: 26 5992 | y: 19 5993 | tile: 0 5994 | h_flip: 0 5995 | v_flip: 0 5996 | rotate90: 0 5997 | } 5998 | cell { 5999 | x: 27 6000 | y: 19 6001 | tile: 0 6002 | h_flip: 0 6003 | v_flip: 0 6004 | rotate90: 0 6005 | } 6006 | cell { 6007 | x: 28 6008 | y: 19 6009 | tile: 0 6010 | h_flip: 0 6011 | v_flip: 0 6012 | rotate90: 0 6013 | } 6014 | cell { 6015 | x: 29 6016 | y: 19 6017 | tile: 0 6018 | h_flip: 0 6019 | v_flip: 0 6020 | rotate90: 0 6021 | } 6022 | cell { 6023 | x: 30 6024 | y: 19 6025 | tile: 0 6026 | h_flip: 0 6027 | v_flip: 0 6028 | rotate90: 0 6029 | } 6030 | cell { 6031 | x: 31 6032 | y: 19 6033 | tile: 0 6034 | h_flip: 0 6035 | v_flip: 0 6036 | rotate90: 0 6037 | } 6038 | cell { 6039 | x: 32 6040 | y: 19 6041 | tile: 0 6042 | h_flip: 0 6043 | v_flip: 0 6044 | rotate90: 0 6045 | } 6046 | cell { 6047 | x: 33 6048 | y: 19 6049 | tile: 0 6050 | h_flip: 0 6051 | v_flip: 0 6052 | rotate90: 0 6053 | } 6054 | cell { 6055 | x: 34 6056 | y: 19 6057 | tile: 0 6058 | h_flip: 0 6059 | v_flip: 0 6060 | rotate90: 0 6061 | } 6062 | cell { 6063 | x: 35 6064 | y: 19 6065 | tile: 0 6066 | h_flip: 0 6067 | v_flip: 0 6068 | rotate90: 0 6069 | } 6070 | cell { 6071 | x: 36 6072 | y: 19 6073 | tile: 0 6074 | h_flip: 0 6075 | v_flip: 0 6076 | rotate90: 0 6077 | } 6078 | cell { 6079 | x: 37 6080 | y: 19 6081 | tile: 0 6082 | h_flip: 0 6083 | v_flip: 0 6084 | rotate90: 0 6085 | } 6086 | cell { 6087 | x: 0 6088 | y: 20 6089 | tile: 0 6090 | h_flip: 0 6091 | v_flip: 0 6092 | rotate90: 0 6093 | } 6094 | cell { 6095 | x: 1 6096 | y: 20 6097 | tile: 0 6098 | h_flip: 0 6099 | v_flip: 0 6100 | rotate90: 0 6101 | } 6102 | cell { 6103 | x: 2 6104 | y: 20 6105 | tile: 0 6106 | h_flip: 0 6107 | v_flip: 0 6108 | rotate90: 0 6109 | } 6110 | cell { 6111 | x: 3 6112 | y: 20 6113 | tile: 0 6114 | h_flip: 0 6115 | v_flip: 0 6116 | rotate90: 0 6117 | } 6118 | cell { 6119 | x: 4 6120 | y: 20 6121 | tile: 0 6122 | h_flip: 0 6123 | v_flip: 0 6124 | rotate90: 0 6125 | } 6126 | cell { 6127 | x: 5 6128 | y: 20 6129 | tile: 0 6130 | h_flip: 0 6131 | v_flip: 0 6132 | rotate90: 0 6133 | } 6134 | cell { 6135 | x: 6 6136 | y: 20 6137 | tile: 0 6138 | h_flip: 0 6139 | v_flip: 0 6140 | rotate90: 0 6141 | } 6142 | cell { 6143 | x: 7 6144 | y: 20 6145 | tile: 0 6146 | h_flip: 0 6147 | v_flip: 0 6148 | rotate90: 0 6149 | } 6150 | cell { 6151 | x: 8 6152 | y: 20 6153 | tile: 0 6154 | h_flip: 0 6155 | v_flip: 0 6156 | rotate90: 0 6157 | } 6158 | cell { 6159 | x: 9 6160 | y: 20 6161 | tile: 0 6162 | h_flip: 0 6163 | v_flip: 0 6164 | rotate90: 0 6165 | } 6166 | cell { 6167 | x: 10 6168 | y: 20 6169 | tile: 0 6170 | h_flip: 0 6171 | v_flip: 0 6172 | rotate90: 0 6173 | } 6174 | cell { 6175 | x: 11 6176 | y: 20 6177 | tile: 0 6178 | h_flip: 0 6179 | v_flip: 0 6180 | rotate90: 0 6181 | } 6182 | cell { 6183 | x: 12 6184 | y: 20 6185 | tile: 0 6186 | h_flip: 0 6187 | v_flip: 0 6188 | rotate90: 0 6189 | } 6190 | cell { 6191 | x: 13 6192 | y: 20 6193 | tile: 0 6194 | h_flip: 0 6195 | v_flip: 0 6196 | rotate90: 0 6197 | } 6198 | cell { 6199 | x: 14 6200 | y: 20 6201 | tile: 0 6202 | h_flip: 0 6203 | v_flip: 0 6204 | rotate90: 0 6205 | } 6206 | cell { 6207 | x: 15 6208 | y: 20 6209 | tile: 0 6210 | h_flip: 0 6211 | v_flip: 0 6212 | rotate90: 0 6213 | } 6214 | cell { 6215 | x: 16 6216 | y: 20 6217 | tile: 0 6218 | h_flip: 0 6219 | v_flip: 0 6220 | rotate90: 0 6221 | } 6222 | cell { 6223 | x: 17 6224 | y: 20 6225 | tile: 0 6226 | h_flip: 0 6227 | v_flip: 0 6228 | rotate90: 0 6229 | } 6230 | cell { 6231 | x: 18 6232 | y: 20 6233 | tile: 0 6234 | h_flip: 0 6235 | v_flip: 0 6236 | rotate90: 0 6237 | } 6238 | cell { 6239 | x: 19 6240 | y: 20 6241 | tile: 0 6242 | h_flip: 0 6243 | v_flip: 0 6244 | rotate90: 0 6245 | } 6246 | cell { 6247 | x: 20 6248 | y: 20 6249 | tile: 0 6250 | h_flip: 0 6251 | v_flip: 0 6252 | rotate90: 0 6253 | } 6254 | cell { 6255 | x: 21 6256 | y: 20 6257 | tile: 0 6258 | h_flip: 0 6259 | v_flip: 0 6260 | rotate90: 0 6261 | } 6262 | cell { 6263 | x: 22 6264 | y: 20 6265 | tile: 0 6266 | h_flip: 0 6267 | v_flip: 0 6268 | rotate90: 0 6269 | } 6270 | cell { 6271 | x: 23 6272 | y: 20 6273 | tile: 0 6274 | h_flip: 0 6275 | v_flip: 0 6276 | rotate90: 0 6277 | } 6278 | cell { 6279 | x: 24 6280 | y: 20 6281 | tile: 0 6282 | h_flip: 0 6283 | v_flip: 0 6284 | rotate90: 0 6285 | } 6286 | cell { 6287 | x: 25 6288 | y: 20 6289 | tile: 0 6290 | h_flip: 0 6291 | v_flip: 0 6292 | rotate90: 0 6293 | } 6294 | cell { 6295 | x: 26 6296 | y: 20 6297 | tile: 0 6298 | h_flip: 0 6299 | v_flip: 0 6300 | rotate90: 0 6301 | } 6302 | cell { 6303 | x: 27 6304 | y: 20 6305 | tile: 0 6306 | h_flip: 0 6307 | v_flip: 0 6308 | rotate90: 0 6309 | } 6310 | cell { 6311 | x: 28 6312 | y: 20 6313 | tile: 0 6314 | h_flip: 0 6315 | v_flip: 0 6316 | rotate90: 0 6317 | } 6318 | cell { 6319 | x: 29 6320 | y: 20 6321 | tile: 0 6322 | h_flip: 0 6323 | v_flip: 0 6324 | rotate90: 0 6325 | } 6326 | cell { 6327 | x: 30 6328 | y: 20 6329 | tile: 0 6330 | h_flip: 0 6331 | v_flip: 0 6332 | rotate90: 0 6333 | } 6334 | cell { 6335 | x: 31 6336 | y: 20 6337 | tile: 0 6338 | h_flip: 0 6339 | v_flip: 0 6340 | rotate90: 0 6341 | } 6342 | cell { 6343 | x: 32 6344 | y: 20 6345 | tile: 0 6346 | h_flip: 0 6347 | v_flip: 0 6348 | rotate90: 0 6349 | } 6350 | cell { 6351 | x: 33 6352 | y: 20 6353 | tile: 0 6354 | h_flip: 0 6355 | v_flip: 0 6356 | rotate90: 0 6357 | } 6358 | cell { 6359 | x: 34 6360 | y: 20 6361 | tile: 0 6362 | h_flip: 0 6363 | v_flip: 0 6364 | rotate90: 0 6365 | } 6366 | cell { 6367 | x: 35 6368 | y: 20 6369 | tile: 0 6370 | h_flip: 0 6371 | v_flip: 0 6372 | rotate90: 0 6373 | } 6374 | cell { 6375 | x: 36 6376 | y: 20 6377 | tile: 0 6378 | h_flip: 0 6379 | v_flip: 0 6380 | rotate90: 0 6381 | } 6382 | cell { 6383 | x: 37 6384 | y: 20 6385 | tile: 0 6386 | h_flip: 0 6387 | v_flip: 0 6388 | rotate90: 0 6389 | } 6390 | cell { 6391 | x: 0 6392 | y: 21 6393 | tile: 0 6394 | h_flip: 0 6395 | v_flip: 0 6396 | rotate90: 0 6397 | } 6398 | cell { 6399 | x: 1 6400 | y: 21 6401 | tile: 0 6402 | h_flip: 0 6403 | v_flip: 0 6404 | rotate90: 0 6405 | } 6406 | cell { 6407 | x: 2 6408 | y: 21 6409 | tile: 0 6410 | h_flip: 0 6411 | v_flip: 0 6412 | rotate90: 0 6413 | } 6414 | cell { 6415 | x: 3 6416 | y: 21 6417 | tile: 0 6418 | h_flip: 0 6419 | v_flip: 0 6420 | rotate90: 0 6421 | } 6422 | cell { 6423 | x: 4 6424 | y: 21 6425 | tile: 0 6426 | h_flip: 0 6427 | v_flip: 0 6428 | rotate90: 0 6429 | } 6430 | cell { 6431 | x: 5 6432 | y: 21 6433 | tile: 0 6434 | h_flip: 0 6435 | v_flip: 0 6436 | rotate90: 0 6437 | } 6438 | cell { 6439 | x: 6 6440 | y: 21 6441 | tile: 0 6442 | h_flip: 0 6443 | v_flip: 0 6444 | rotate90: 0 6445 | } 6446 | cell { 6447 | x: 7 6448 | y: 21 6449 | tile: 0 6450 | h_flip: 0 6451 | v_flip: 0 6452 | rotate90: 0 6453 | } 6454 | cell { 6455 | x: 8 6456 | y: 21 6457 | tile: 0 6458 | h_flip: 0 6459 | v_flip: 0 6460 | rotate90: 0 6461 | } 6462 | cell { 6463 | x: 9 6464 | y: 21 6465 | tile: 0 6466 | h_flip: 0 6467 | v_flip: 0 6468 | rotate90: 0 6469 | } 6470 | cell { 6471 | x: 10 6472 | y: 21 6473 | tile: 0 6474 | h_flip: 0 6475 | v_flip: 0 6476 | rotate90: 0 6477 | } 6478 | cell { 6479 | x: 11 6480 | y: 21 6481 | tile: 0 6482 | h_flip: 0 6483 | v_flip: 0 6484 | rotate90: 0 6485 | } 6486 | cell { 6487 | x: 12 6488 | y: 21 6489 | tile: 0 6490 | h_flip: 0 6491 | v_flip: 0 6492 | rotate90: 0 6493 | } 6494 | cell { 6495 | x: 13 6496 | y: 21 6497 | tile: 0 6498 | h_flip: 0 6499 | v_flip: 0 6500 | rotate90: 0 6501 | } 6502 | cell { 6503 | x: 14 6504 | y: 21 6505 | tile: 0 6506 | h_flip: 0 6507 | v_flip: 0 6508 | rotate90: 0 6509 | } 6510 | cell { 6511 | x: 15 6512 | y: 21 6513 | tile: 0 6514 | h_flip: 0 6515 | v_flip: 0 6516 | rotate90: 0 6517 | } 6518 | cell { 6519 | x: 16 6520 | y: 21 6521 | tile: 0 6522 | h_flip: 0 6523 | v_flip: 0 6524 | rotate90: 0 6525 | } 6526 | cell { 6527 | x: 17 6528 | y: 21 6529 | tile: 0 6530 | h_flip: 0 6531 | v_flip: 0 6532 | rotate90: 0 6533 | } 6534 | cell { 6535 | x: 18 6536 | y: 21 6537 | tile: 0 6538 | h_flip: 0 6539 | v_flip: 0 6540 | rotate90: 0 6541 | } 6542 | cell { 6543 | x: 19 6544 | y: 21 6545 | tile: 0 6546 | h_flip: 0 6547 | v_flip: 0 6548 | rotate90: 0 6549 | } 6550 | cell { 6551 | x: 20 6552 | y: 21 6553 | tile: 0 6554 | h_flip: 0 6555 | v_flip: 0 6556 | rotate90: 0 6557 | } 6558 | cell { 6559 | x: 21 6560 | y: 21 6561 | tile: 0 6562 | h_flip: 0 6563 | v_flip: 0 6564 | rotate90: 0 6565 | } 6566 | cell { 6567 | x: 22 6568 | y: 21 6569 | tile: 0 6570 | h_flip: 0 6571 | v_flip: 0 6572 | rotate90: 0 6573 | } 6574 | cell { 6575 | x: 23 6576 | y: 21 6577 | tile: 0 6578 | h_flip: 0 6579 | v_flip: 0 6580 | rotate90: 0 6581 | } 6582 | cell { 6583 | x: 24 6584 | y: 21 6585 | tile: 0 6586 | h_flip: 0 6587 | v_flip: 0 6588 | rotate90: 0 6589 | } 6590 | cell { 6591 | x: 25 6592 | y: 21 6593 | tile: 0 6594 | h_flip: 0 6595 | v_flip: 0 6596 | rotate90: 0 6597 | } 6598 | cell { 6599 | x: 26 6600 | y: 21 6601 | tile: 0 6602 | h_flip: 0 6603 | v_flip: 0 6604 | rotate90: 0 6605 | } 6606 | cell { 6607 | x: 27 6608 | y: 21 6609 | tile: 0 6610 | h_flip: 0 6611 | v_flip: 0 6612 | rotate90: 0 6613 | } 6614 | cell { 6615 | x: 28 6616 | y: 21 6617 | tile: 0 6618 | h_flip: 0 6619 | v_flip: 0 6620 | rotate90: 0 6621 | } 6622 | cell { 6623 | x: 29 6624 | y: 21 6625 | tile: 0 6626 | h_flip: 0 6627 | v_flip: 0 6628 | rotate90: 0 6629 | } 6630 | cell { 6631 | x: 30 6632 | y: 21 6633 | tile: 0 6634 | h_flip: 0 6635 | v_flip: 0 6636 | rotate90: 0 6637 | } 6638 | cell { 6639 | x: 31 6640 | y: 21 6641 | tile: 0 6642 | h_flip: 0 6643 | v_flip: 0 6644 | rotate90: 0 6645 | } 6646 | cell { 6647 | x: 32 6648 | y: 21 6649 | tile: 0 6650 | h_flip: 0 6651 | v_flip: 0 6652 | rotate90: 0 6653 | } 6654 | cell { 6655 | x: 33 6656 | y: 21 6657 | tile: 0 6658 | h_flip: 0 6659 | v_flip: 0 6660 | rotate90: 0 6661 | } 6662 | cell { 6663 | x: 34 6664 | y: 21 6665 | tile: 0 6666 | h_flip: 0 6667 | v_flip: 0 6668 | rotate90: 0 6669 | } 6670 | cell { 6671 | x: 35 6672 | y: 21 6673 | tile: 0 6674 | h_flip: 0 6675 | v_flip: 0 6676 | rotate90: 0 6677 | } 6678 | cell { 6679 | x: 36 6680 | y: 21 6681 | tile: 0 6682 | h_flip: 0 6683 | v_flip: 0 6684 | rotate90: 0 6685 | } 6686 | cell { 6687 | x: 37 6688 | y: 21 6689 | tile: 0 6690 | h_flip: 0 6691 | v_flip: 0 6692 | rotate90: 0 6693 | } 6694 | } 6695 | material: "/builtins/materials/tile_map.material" 6696 | blend_mode: BLEND_MODE_MULT 6697 | -------------------------------------------------------------------------------- /example/floor.tilesource: -------------------------------------------------------------------------------- 1 | image: "/example/asset/background_brown.png" 2 | tile_width: 64 3 | tile_height: 64 4 | tile_margin: 0 5 | tile_spacing: 0 6 | collision: "" 7 | material_tag: "tile" 8 | extrude_borders: 2 9 | inner_padding: 0 10 | sprite_trim_mode: SPRITE_TRIM_MODE_OFF 11 | -------------------------------------------------------------------------------- /example/light.go: -------------------------------------------------------------------------------- 1 | components { 2 | id: "lightsource" 3 | component: "/lights/lightsource.script" 4 | position { 5 | x: 0.0 6 | y: 0.0 7 | z: 0.0 8 | } 9 | rotation { 10 | x: 0.0 11 | y: 0.0 12 | z: 0.0 13 | w: 1.0 14 | } 15 | properties { 16 | id: "color" 17 | value: "0.4, 0.4, 1.0, 1.0" 18 | type: PROPERTY_TYPE_VECTOR4 19 | } 20 | } 21 | embedded_components { 22 | id: "sprite" 23 | type: "sprite" 24 | data: "tile_set: \"/example/asset/images.atlas\"\n" 25 | "default_animation: \"ball_blue_small_alt\"\n" 26 | "material: \"/builtins/materials/sprite.material\"\n" 27 | "blend_mode: BLEND_MODE_ALPHA\n" 28 | "" 29 | position { 30 | x: 0.0 31 | y: 0.0 32 | z: 0.0 33 | } 34 | rotation { 35 | x: 0.0 36 | y: 0.0 37 | z: 0.0 38 | w: 1.0 39 | } 40 | } 41 | embedded_components { 42 | id: "collisionobject" 43 | type: "collisionobject" 44 | data: "collision_shape: \"\"\n" 45 | "type: COLLISION_OBJECT_TYPE_DYNAMIC\n" 46 | "mass: 50.0\n" 47 | "friction: 0.4\n" 48 | "restitution: 0.5\n" 49 | "group: \"ball\"\n" 50 | "mask: \"block\"\n" 51 | "mask: \"ball\"\n" 52 | "embedded_collision_shape {\n" 53 | " shapes {\n" 54 | " shape_type: TYPE_SPHERE\n" 55 | " position {\n" 56 | " x: 0.0\n" 57 | " y: 0.0\n" 58 | " z: 0.0\n" 59 | " }\n" 60 | " rotation {\n" 61 | " x: 0.0\n" 62 | " y: 0.0\n" 63 | " z: 0.0\n" 64 | " w: 1.0\n" 65 | " }\n" 66 | " index: 0\n" 67 | " count: 1\n" 68 | " }\n" 69 | " data: 16.0\n" 70 | "}\n" 71 | "linear_damping: 0.3\n" 72 | "angular_damping: 0.0\n" 73 | "locked_rotation: true\n" 74 | "bullet: false\n" 75 | "" 76 | position { 77 | x: 0.0 78 | y: 0.0 79 | z: 0.0 80 | } 81 | rotation { 82 | x: 0.0 83 | y: 0.0 84 | z: 0.0 85 | w: 1.0 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /game.project: -------------------------------------------------------------------------------- 1 | [bootstrap] 2 | main_collection = /example/example.collectionc 3 | render = /lights/render/lights.renderc 4 | 5 | [script] 6 | shared_state = 1 7 | 8 | [display] 9 | width = 1136 10 | height = 640 11 | high_dpi = 1 12 | 13 | [android] 14 | input_method = HiddenInputField 15 | 16 | [project] 17 | title = Lights 18 | dependencies = 19 | 20 | [library] 21 | include_dirs = lights 22 | 23 | [physics] 24 | gravity_y = 0.0 25 | scale = 0.01 26 | 27 | [render] 28 | clear_color_red = 0.1 29 | clear_color_green = 0.1 30 | clear_color_blue = 0.1 31 | clear_color_alpha = 1.0 32 | 33 | -------------------------------------------------------------------------------- /input/game.input_binding: -------------------------------------------------------------------------------- 1 | key_trigger { 2 | input: KEY_LEFT 3 | action: "left" 4 | } 5 | key_trigger { 6 | input: KEY_RIGHT 7 | action: "right" 8 | } 9 | key_trigger { 10 | input: KEY_UP 11 | action: "up" 12 | } 13 | key_trigger { 14 | input: KEY_DOWN 15 | action: "down" 16 | } 17 | mouse_trigger { 18 | input: MOUSE_BUTTON_1 19 | action: "touch" 20 | } 21 | -------------------------------------------------------------------------------- /lights/lights.lua: -------------------------------------------------------------------------------- 1 | local M = {} 2 | 3 | local lights = {} 4 | 5 | local render_target_size = 0 6 | 7 | local id = 0 8 | 9 | local WHITE = vmath.vector4(1, 1, 1, 1) 10 | local BLACKTRANSPARENT = vmath.vector4(0, 0, 0, 0) 11 | 12 | local quad_pred = nil 13 | local clear_color = nil 14 | 15 | -- draw lights to quad with shadow_map as input texture 16 | local function draw_light(light, view, projection) 17 | local window_width = render.get_window_width() 18 | local window_height = render.get_window_height() 19 | local size = math.max(window_width, window_height) 20 | 21 | render.set_viewport(0, 0, window_width, window_height) 22 | render.set_projection(projection) 23 | render.set_view(view) 24 | 25 | render.set_render_target(render.RENDER_TARGET_DEFAULT) 26 | render.enable_texture(0, light.shadowmap, render.BUFFER_COLOR_BIT) 27 | 28 | local constants = render.constant_buffer() 29 | constants.light_pos = vmath.vector4(light.position.x, light.position.y, light.position.z, 0) 30 | constants.size = vmath.vector4(light.size, 0, 0, 0) 31 | constants.color = light.color 32 | constants.falloff = vmath.vector4(light.falloff, 0, 0, 0) 33 | constants.angle = vmath.vector4(light.angle.x, light.angle.y, light.angle.z, light.angle.w) 34 | 35 | render.draw(quad_pred, { constants = constants }) 36 | 37 | render.disable_texture(0, light.shadowmap) 38 | end 39 | 40 | -- draw 1D shadow map containing distance to occluder 41 | -- draw using the shadow_map.material 42 | -- use the occluder_target as input 43 | local function draw_shadow_map(light) 44 | -- Set viewport 45 | render.set_viewport(0, 0, light.size, 1) 46 | 47 | -- Set projection 48 | render.set_projection(vmath.matrix4_orthographic(0, light.size, 0, 1, -1, 1)) 49 | 50 | -- Set view matrix to middle 51 | render.set_view( 52 | vmath.matrix4_look_at( 53 | vmath.vector3(-light.size_half, -light.size_half, 0), 54 | vmath.vector3(-light.size_half, -light.size_half, -1), 55 | vmath.vector3(0, 1, 0))) 56 | 57 | render.set_render_target_size(light.shadowmap, light.size, 1) 58 | render.set_render_target(light.shadowmap, { transient = { render.BUFFER_DEPTH_BIT } } ) 59 | 60 | -- Clear then draw 61 | render.clear({[render.BUFFER_COLOR_BIT] = BLACKTRANSPARENT}) 62 | 63 | render.enable_material("shadow_map") 64 | render.enable_texture(0, light.occluder, render.BUFFER_COLOR_BIT) 65 | 66 | -- Constants 67 | local constants = render.constant_buffer() 68 | constants.resolution = vmath.vector4(light.size) 69 | constants.size = vmath.vector4(light.size, light.size, 1, 0) 70 | 71 | render.draw(quad_pred, { constants = constants }) 72 | 73 | -- Reset 74 | render.disable_texture(0, light.occluder) 75 | render.disable_material() 76 | render.set_render_target(render.RENDER_TARGET_DEFAULT) 77 | end 78 | 79 | -- draw anything that should occlude light (ie with occluder predicate tag) 80 | -- draw it to a low res render target (occluder_target) 81 | local function draw_occluder(light, view, projection, occluder_predicate) 82 | render.set_render_target_size(light.occluder, light.size, light.size) 83 | 84 | -- Set viewport 85 | render.set_viewport(0, 0, light.size, light.size) 86 | 87 | -- Set projection so occluders fill the render target 88 | render.set_projection(vmath.matrix4_orthographic(0, light.size, 0, light.size, -5, 5)) 89 | 90 | -- Set view matrix to light position 91 | render.set_view( 92 | vmath.matrix4_look_at( 93 | vmath.vector3(-light.size_half, -light.size_half, 0) + light.position, 94 | vmath.vector3(-light.size_half, -light.size_half, -1) + light.position, 95 | vmath.vector3(0, 1, 0))) 96 | 97 | -- Clear then draw 98 | render.set_render_target(light.occluder, { transient = { render.BUFFER_DEPTH_BIT } } ) 99 | render.clear({[render.BUFFER_COLOR_BIT] = BLACKTRANSPARENT}) 100 | 101 | -- Draw occluder 102 | render.set_depth_mask(false) 103 | render.disable_state(render.STATE_DEPTH_TEST) 104 | render.disable_state(render.STATE_STENCIL_TEST) 105 | render.enable_state(render.STATE_BLEND) 106 | render.set_blend_func(render.BLEND_SRC_ALPHA, render.BLEND_ONE_MINUS_SRC_ALPHA) 107 | render.disable_state(render.STATE_CULL_FACE) 108 | 109 | render.draw(occluder_predicate) 110 | 111 | -- Reset render target 112 | render.set_render_target(render.RENDER_TARGET_DEFAULT) 113 | end 114 | 115 | local function create_occluder(light, size) 116 | local params = { 117 | format = render.FORMAT_RGBA, 118 | width = size, 119 | height = size, 120 | min_filter = render.FILTER_LINEAR, 121 | mag_filter = render.FILTER_LINEAR, 122 | u_wrap = render.WRAP_CLAMP_TO_EDGE, 123 | v_wrap = render.WRAP_CLAMP_TO_EDGE 124 | } 125 | local rt = render.render_target({[render.BUFFER_COLOR_BIT] = params}) 126 | if not light then return rt end 127 | light.occluder = rt 128 | end 129 | 130 | local function resize_occluder(light, size) 131 | render.set_render_target_size(light.occluder, size, size) 132 | end 133 | 134 | local function create_shadowmap(light, size) 135 | local params = { 136 | format = render.FORMAT_RGBA, 137 | width = size, 138 | height = 1, 139 | min_filter = render.FILTER_LINEAR, 140 | mag_filter = render.FILTER_LINEAR, 141 | u_wrap = render.WRAP_CLAMP_TO_EDGE, 142 | v_wrap = render.WRAP_CLAMP_TO_EDGE 143 | } 144 | local rt = render.render_target({[render.BUFFER_COLOR_BIT] = params}) 145 | if not light then return rt end 146 | light.shadowmap = rt 147 | end 148 | 149 | local function resize_shadowmap(light, size) 150 | render.set_render_target_size(light.shadowmap, size, 1) 151 | end 152 | 153 | 154 | function M.init(config) 155 | local width = render.get_window_width() 156 | local height = render.get_window_height() 157 | render_target_size = math.max(width, height) 158 | quad_pred = render.predicate({ "light_quad" }) 159 | clear_color = vmath.vector4(0,0,0,1) 160 | end 161 | 162 | function M.set_clear_color(color) 163 | clear_color = color 164 | end 165 | 166 | function M.draw(view, projection, occluder_predicate) 167 | local width = render.get_window_width() 168 | local height = render.get_window_height() 169 | local size = math.max(width, height) 170 | local size_changed = render_target_size ~= size 171 | render_target_size = size 172 | 173 | for _,light in pairs(lights) do 174 | if light.remove then 175 | render.delete_render_target(light.occluder) 176 | render.delete_render_target(light.shadowmap) 177 | lights[light.id] = nil 178 | elseif light.enabled then 179 | if not light.occluder then create_occluder(light, size) end 180 | if not light.shadowmap then create_shadowmap(light, size) end 181 | if size_changed then 182 | resize_occluder(light, size) 183 | resize_shadowmap(light, size) 184 | end 185 | local light_size = math.ceil(light.radius * 2) 186 | light.size = light_size 187 | light.size_half = light_size / 2 188 | if light.size >= 1 then 189 | draw_occluder(light, view, projection, occluder_predicate) 190 | draw_shadow_map(light) 191 | draw_light(light, view, projection) 192 | end 193 | end 194 | end 195 | end 196 | 197 | 198 | function M.add(properties) 199 | assert(properties) 200 | assert(properties.radius, "You must specify a radius") 201 | assert(properties.position, "You must specify a position") 202 | 203 | id = id + 1 204 | 205 | lights[id] = { 206 | id = id, 207 | position = properties.position, 208 | color = properties.color or WHITE, 209 | angle = properties.angle or 360, 210 | radius = properties.radius, 211 | enabled = properties.enabled, 212 | falloff = properties.falloff, 213 | occluder = nil, 214 | shadowmap = nil, 215 | } 216 | 217 | return id 218 | end 219 | 220 | function M.remove(id) 221 | assert(id) 222 | assert(lights[id], "Unable to find light") 223 | local light = lights[id] 224 | light.remove = true 225 | end 226 | 227 | function M.set_light_radius(id, radius) 228 | assert(id) 229 | assert(lights[id], "Unable to find light") 230 | assert(radius, "You must provide a radius") 231 | local light = lights[id] 232 | light.radius = radius 233 | end 234 | 235 | function M.set_position(id, position) 236 | assert(id) 237 | assert(lights[id], "Unable to find light") 238 | assert(position, "You must provide a position") 239 | lights[id].position = position 240 | end 241 | 242 | function M.set_angle(id, angle) 243 | assert(id) 244 | assert(lights[id], "Unable to find light") 245 | assert(angle, "You must provide an angle") 246 | lights[id].angle = angle 247 | end 248 | 249 | function M.set_color(id, color) 250 | assert(id) 251 | assert(lights[id], "Unable to find light") 252 | assert(color, "You must provide a color") 253 | lights[id].color = color 254 | end 255 | 256 | function M.set_enabled(id, enabled) 257 | assert(id) 258 | assert(lights[id], "Unable to find light") 259 | lights[id].enabled = enabled 260 | end 261 | 262 | return M -------------------------------------------------------------------------------- /lights/lightsource.script: -------------------------------------------------------------------------------- 1 | go.property("color", vmath.vector4(1, 1, 1, 1)) 2 | go.property("radius", 256) 3 | go.property("arc_angle", 360) 4 | go.property("falloff", 1) 5 | go.property("static", false) 6 | go.property("enabled", true) 7 | 8 | local lights = require "lights.lights" 9 | 10 | --[[ 11 | x and y = upper semi-cirlce 12 | x = upper start (0 to 180) 13 | y = upper to (x to 180) 14 | 15 | +90 16 | y | x 17 | \ | / 18 | \|/ 19 | +180 ---+--- 0 20 | 21 | 22 | z and w = lower semi-circle 23 | z = lower start (0 to -180) 24 | w = lower to (z to -180) 25 | 26 | -180 ---+--- 0 27 | /|\ 28 | / | \ 29 | w | z 30 | -90 31 | --]] 32 | 33 | local function update_angle(arc_angle) 34 | local x, y, z, w = 0, 0, 0, 0 35 | local rotation = go.get(".", "euler.z") % 360 36 | local from = (rotation - arc_angle / 2) 37 | local to = (rotation + arc_angle / 2) 38 | if from < 0 then 39 | z = 0 40 | w = from 41 | x = 0 42 | y = to 43 | elseif from <= 180 then 44 | x = from 45 | if to > 180 then 46 | y = 180 47 | w = -180 48 | z = (to - 360) 49 | else 50 | y = to 51 | w = 0 52 | z = 0 53 | end 54 | elseif from > 180 then 55 | w = (from - 360) 56 | if to > 360 then 57 | z = 0 58 | x = 0 59 | y = (to - 360) 60 | else 61 | z = (to - 360) 62 | x = 0 63 | y = 0 64 | end 65 | end 66 | return vmath.vector4(math.rad(x), math.rad(y), math.rad(z), math.rad(w)) 67 | end 68 | 69 | function init(self) 70 | self.light = lights.add({ 71 | position = go.get_world_position(), 72 | color = self.color, 73 | angle = update_angle(self.arc_angle), 74 | falloff = self.falloff, 75 | radius = self.radius, 76 | enabled = self.enabled, 77 | }) 78 | end 79 | 80 | function final(self) 81 | lights.remove(self.light) 82 | end 83 | 84 | function update(self, dt) 85 | if not self.static then 86 | lights.set_angle(self.light, update_angle(self.arc_angle)) 87 | lights.set_position(self.light, go.get_world_position()) 88 | lights.set_light_radius(self.light, self.radius) 89 | lights.set_color(self.light, self.color) 90 | lights.set_enabled(self.light, self.enabled) 91 | end 92 | end 93 | -------------------------------------------------------------------------------- /lights/materials/light_occluder_sprite.material: -------------------------------------------------------------------------------- 1 | name: "sprite" 2 | tags: "tile" 3 | tags: "light_occluder" 4 | vertex_program: "/builtins/materials/sprite.vp" 5 | fragment_program: "/builtins/materials/sprite.fp" 6 | vertex_space: VERTEX_SPACE_WORLD 7 | vertex_constants { 8 | name: "view_proj" 9 | type: CONSTANT_TYPE_VIEWPROJ 10 | value { 11 | x: 0.0 12 | y: 0.0 13 | z: 0.0 14 | w: 0.0 15 | } 16 | } 17 | fragment_constants { 18 | name: "tint" 19 | type: CONSTANT_TYPE_USER 20 | value { 21 | x: 1.0 22 | y: 1.0 23 | z: 1.0 24 | w: 1.0 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lights/materials/light_occluder_tile_map.material: -------------------------------------------------------------------------------- 1 | name: "tile_map" 2 | tags: "tile" 3 | tags: "light_occluder" 4 | vertex_program: "/builtins/materials/tile_map.vp" 5 | fragment_program: "/builtins/materials/tile_map.fp" 6 | vertex_space: VERTEX_SPACE_WORLD 7 | vertex_constants { 8 | name: "view_proj" 9 | type: CONSTANT_TYPE_VIEWPROJ 10 | value { 11 | x: 0.0 12 | y: 0.0 13 | z: 0.0 14 | w: 0.0 15 | } 16 | } 17 | vertex_constants { 18 | name: "world" 19 | type: CONSTANT_TYPE_WORLD 20 | value { 21 | x: 0.0 22 | y: 0.0 23 | z: 0.0 24 | w: 0.0 25 | } 26 | } 27 | fragment_constants { 28 | name: "tint" 29 | type: CONSTANT_TYPE_USER 30 | value { 31 | x: 1.0 32 | y: 1.0 33 | z: 1.0 34 | w: 1.0 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lights/render/light_quad.fp: -------------------------------------------------------------------------------- 1 | #define PI 3.14 2 | 3 | // User defined 4 | uniform mediump vec4 falloff; 5 | uniform lowp vec4 color; 6 | uniform mediump vec4 angle; 7 | uniform mediump vec4 size; 8 | 9 | uniform lowp sampler2D texture_sampler; 10 | 11 | varying mediump vec2 var_texcoord0; 12 | 13 | // Sample from the 1D distance map 14 | float sample_from_distance_map(vec2 coord, float r) { 15 | return step(r, texture2D(texture_sampler, coord).r); 16 | } 17 | 18 | void main(void) { 19 | float theta = atan(var_texcoord0.y, var_texcoord0.x); 20 | 21 | // Discard if not inside angle 22 | if (theta > angle.y || theta < angle.w || (theta > 0.0 && theta < angle.x) || (theta < 0.0 && theta > angle.z)) 23 | discard; 24 | 25 | // Rectangular to polar 26 | // r = 0.0 on top of light 27 | // r = 1.0 as far away from the light as possible 28 | float r = length(var_texcoord0); 29 | 30 | // The tex coord to sample our 1D lookup texture 31 | float coord = (theta + PI) / (2.0 * PI); 32 | vec2 tc = vec2(coord, 0.0); 33 | 34 | float lightCurve = sample_from_distance_map(tc, r); 35 | float falloffCurve = smoothstep(1.0, 0.0, r * falloff.x); 36 | 37 | // Multiply the summed amount by our distance, which gives us a radial falloff 38 | // Then multiply by vertex (light) color 39 | gl_FragColor = color * vec4(1, 1, 1, lightCurve * falloffCurve); 40 | } -------------------------------------------------------------------------------- /lights/render/light_quad.go: -------------------------------------------------------------------------------- 1 | embedded_components { 2 | id: "model" 3 | type: "model" 4 | data: "mesh: \"/builtins/assets/meshes/quad.dae\"\n" 5 | "material: \"/lights/render/light_quad.material\"\n" 6 | "skeleton: \"\"\n" 7 | "animations: \"\"\n" 8 | "default_animation: \"\"\n" 9 | "name: \"unnamed\"\n" 10 | "" 11 | position { 12 | x: 0.0 13 | y: 0.0 14 | z: 0.0 15 | } 16 | rotation { 17 | x: 0.0 18 | y: 0.0 19 | z: 0.0 20 | w: 1.0 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lights/render/light_quad.material: -------------------------------------------------------------------------------- 1 | name: "light_map" 2 | tags: "light_quad" 3 | vertex_program: "/lights/render/light_quad.vp" 4 | fragment_program: "/lights/render/light_quad.fp" 5 | vertex_space: VERTEX_SPACE_WORLD 6 | vertex_constants { 7 | name: "view_proj" 8 | type: CONSTANT_TYPE_VIEWPROJ 9 | value { 10 | x: 0.0 11 | y: 0.0 12 | z: 0.0 13 | w: 0.0 14 | } 15 | } 16 | vertex_constants { 17 | name: "light_pos" 18 | type: CONSTANT_TYPE_USER 19 | value { 20 | x: 0.0 21 | y: 0.0 22 | z: 0.0 23 | w: 0.0 24 | } 25 | } 26 | vertex_constants { 27 | name: "size" 28 | type: CONSTANT_TYPE_USER 29 | value { 30 | x: 0.0 31 | y: 0.0 32 | z: 0.0 33 | w: 0.0 34 | } 35 | } 36 | fragment_constants { 37 | name: "falloff" 38 | type: CONSTANT_TYPE_USER 39 | value { 40 | x: 0.0 41 | y: 0.0 42 | z: 0.0 43 | w: 0.0 44 | } 45 | } 46 | fragment_constants { 47 | name: "color" 48 | type: CONSTANT_TYPE_USER 49 | value { 50 | x: 0.0 51 | y: 0.0 52 | z: 0.0 53 | w: 0.0 54 | } 55 | } 56 | fragment_constants { 57 | name: "angle" 58 | type: CONSTANT_TYPE_USER 59 | value { 60 | x: 0.0 61 | y: 0.0 62 | z: 0.0 63 | w: 0.0 64 | } 65 | } 66 | fragment_constants { 67 | name: "size" 68 | type: CONSTANT_TYPE_USER 69 | value { 70 | x: 0.0 71 | y: 0.0 72 | z: 0.0 73 | w: 0.0 74 | } 75 | } 76 | samplers { 77 | name: "tex0" 78 | wrap_u: WRAP_MODE_CLAMP_TO_EDGE 79 | wrap_v: WRAP_MODE_CLAMP_TO_EDGE 80 | filter_min: FILTER_MODE_MIN_LINEAR 81 | filter_mag: FILTER_MODE_MAG_LINEAR 82 | } 83 | -------------------------------------------------------------------------------- /lights/render/light_quad.vp: -------------------------------------------------------------------------------- 1 | uniform highp mat4 view_proj; 2 | uniform mediump vec4 light_pos; 3 | uniform mediump vec4 size; 4 | 5 | // Positions are in world space 6 | attribute highp vec4 position; 7 | attribute mediump vec2 texcoord0; 8 | 9 | varying mediump vec2 var_texcoord0; 10 | 11 | void main() 12 | { 13 | float radius = size.x; 14 | vec4 pos = vec4(position.x * radius, position.y * radius, position.z, 1.0) + light_pos; 15 | gl_Position = view_proj * pos; 16 | 17 | var_texcoord0 = texcoord0 * 2.0 - 1.0; 18 | } 19 | -------------------------------------------------------------------------------- /lights/render/lights.render: -------------------------------------------------------------------------------- 1 | script: "/lights/render/lights.render_script" 2 | materials { 3 | name: "shadow_map" 4 | material: "/lights/render/shadow_map.material" 5 | } 6 | materials { 7 | name: "model" 8 | material: "/builtins/materials/model.material" 9 | } 10 | -------------------------------------------------------------------------------- /lights/render/lights.render_script: -------------------------------------------------------------------------------- 1 | local lights = require "lights.lights" 2 | 3 | -- 4 | -- projection that centers content with maintained aspect ratio and optional zoom 5 | -- 6 | local function fixed_projection(near, far, zoom) 7 | local projected_width = render.get_window_width() / (zoom or 1) 8 | local projected_height = render.get_window_height() / (zoom or 1) 9 | local xoffset = -(projected_width - render.get_width()) / 2 10 | local yoffset = -(projected_height - render.get_height()) / 2 11 | return vmath.matrix4_orthographic(xoffset, xoffset + projected_width, yoffset, yoffset + projected_height, near, far) 12 | end 13 | -- 14 | -- projection that centers and fits content with maintained aspect ratio 15 | -- 16 | local function fixed_fit_projection(near, far) 17 | local width = render.get_width() 18 | local height = render.get_height() 19 | local window_width = render.get_window_width() 20 | local window_height = render.get_window_height() 21 | local zoom = math.min(window_width / width, window_height / height) 22 | return fixed_projection(near, far, zoom) 23 | end 24 | -- 25 | -- projection that stretches content 26 | -- 27 | local function stretch_projection(near, far) 28 | return vmath.matrix4_orthographic(0, render.get_width(), 0, render.get_height(), near, far) 29 | end 30 | 31 | local function get_projection(self) 32 | return self.projection_fn(self.near, self.far, self.zoom) 33 | end 34 | 35 | function init(self) 36 | self.occluder_pred = render.predicate({"light_occluder"}) 37 | self.tile_pred = render.predicate({"tile"}) 38 | self.gui_pred = render.predicate({"gui"}) 39 | self.text_pred = render.predicate({"text"}) 40 | self.particle_pred = render.predicate({"particle"}) 41 | 42 | self.clear_color = vmath.vector4(0, 0, 0, 0) 43 | self.clear_color.x = sys.get_config("render.clear_color_red", 0) 44 | self.clear_color.y = sys.get_config("render.clear_color_green", 0) 45 | self.clear_color.z = sys.get_config("render.clear_color_blue", 0) 46 | self.clear_color.w = sys.get_config("render.clear_color_alpha", 0) 47 | 48 | self.view = vmath.matrix4() 49 | 50 | -- default is stretch projection. copy from builtins and change for different projection 51 | -- or send a message to the render script to change projection: 52 | -- msg.post("@render:", "use_stretch_projection", { near = -1, far = 1 }) 53 | -- msg.post("@render:", "use_fixed_projection", { near = -1, far = 1, zoom = 2 }) 54 | -- msg.post("@render:", "use_fixed_fit_projection", { near = -1, far = 1 }) 55 | self.near = -1 56 | self.far = 1 57 | self.projection_fn = stretch_projection 58 | 59 | lights.init() 60 | lights.set_clear_color(self.clear_color) 61 | end 62 | 63 | function update(self) 64 | local window_width = render.get_window_width() 65 | local window_height = render.get_window_height() 66 | if window_width == 0 or window_height == 0 then 67 | return 68 | end 69 | 70 | -- clear screen buffers 71 | -- 72 | render.set_depth_mask(true) 73 | render.set_stencil_mask(0xff) 74 | render.clear({[render.BUFFER_COLOR_BIT] = self.clear_color, [render.BUFFER_DEPTH_BIT] = 1, [render.BUFFER_STENCIL_BIT] = 0}) 75 | 76 | -- render world (sprites, tilemaps, particles etc) 77 | -- 78 | local proj = get_projection(self) 79 | local frustum = proj * self.view 80 | 81 | render.set_viewport(0, 0, window_width, window_height) 82 | render.set_view(self.view) 83 | render.set_projection(proj) 84 | 85 | render.set_depth_mask(false) 86 | render.disable_state(render.STATE_DEPTH_TEST) 87 | render.disable_state(render.STATE_STENCIL_TEST) 88 | render.enable_state(render.STATE_BLEND) 89 | render.set_blend_func(render.BLEND_SRC_ALPHA, render.BLEND_ONE_MINUS_SRC_ALPHA) 90 | render.disable_state(render.STATE_CULL_FACE) 91 | 92 | lights.draw(self.view, get_projection(self), self.occluder_pred) 93 | render.draw(self.tile_pred, {frustum = frustum}) 94 | render.draw(self.particle_pred, {frustum = frustum}) 95 | render.draw_debug3d() 96 | 97 | -- render GUI 98 | -- 99 | local view_gui = vmath.matrix4() 100 | local proj_gui = vmath.matrix4_orthographic(0, window_width, 0, window_height, -1, 1) 101 | local frustum_gui = proj_gui * view_gui 102 | 103 | render.set_view(view_gui) 104 | render.set_projection(proj_gui) 105 | 106 | render.enable_state(render.STATE_STENCIL_TEST) 107 | render.draw(self.gui_pred, {frustum = frustum_gui}) 108 | render.draw(self.text_pred, {frustum = frustum_gui}) 109 | render.disable_state(render.STATE_STENCIL_TEST) 110 | end 111 | 112 | function on_message(self, message_id, message) 113 | if message_id == hash("clear_color") then 114 | self.clear_color = message.color 115 | lights.set_clear_color(self.clear_color) 116 | elseif message_id == hash("set_view_projection") then 117 | self.view = message.view 118 | self.projection = message.projection 119 | elseif message_id == hash("use_camera_projection") then 120 | self.projection_fn = function() return self.projection or vmath.matrix4() end 121 | elseif message_id == hash("use_stretch_projection") then 122 | self.near = message.near or -1 123 | self.far = message.far or 1 124 | self.projection_fn = stretch_projection 125 | elseif message_id == hash("use_fixed_projection") then 126 | self.near = message.near or -1 127 | self.far = message.far or 1 128 | self.zoom = message.zoom or 1 129 | self.projection_fn = fixed_projection 130 | elseif message_id == hash("use_fixed_fit_projection") then 131 | self.near = message.near or -1 132 | self.far = message.far or 1 133 | self.projection_fn = fixed_fit_projection 134 | end 135 | end 136 | -------------------------------------------------------------------------------- /lights/render/shadow_map.fp: -------------------------------------------------------------------------------- 1 | #define PI 3.14 2 | 3 | varying mediump vec2 var_texcoord0; 4 | varying mediump vec2 var_coord; 5 | 6 | uniform lowp sampler2D texture_sampler; 7 | 8 | // User defined 9 | uniform mediump vec4 resolution; 10 | 11 | // Alpha threshold for occlusion map 12 | const mediump float THRESHOLD = 0.75; 13 | 14 | void main() 15 | { 16 | lowp float distance = 1.0; 17 | 18 | lowp float inverseRes = 1.0 / resolution.y; 19 | // Calculate this in vertex 20 | // float theta = PI * 1.5 + (var_texcoord0.s * 2.0 - 1.0) * PI; 21 | lowp float theta = var_texcoord0.x; 22 | 23 | // Coord which we will sample from occlude map 24 | vec2 coord = vec2(-inverseRes * sin(theta), inverseRes * cos(theta)); 25 | // Multiply coord by 1 + epsilon to fix shadow map rendering at half distance on AMD 26 | vec2 step = coord * 1.00001; 27 | float resy = resolution.y; 28 | for (float y = 1.0; y < 50000.0; y += 1.0) { 29 | // webgl doesn't allow for-loops with non constant end value 30 | // we use this as a workaround 31 | if (y > resolution.y) break; 32 | 33 | //sample the occlusion map 34 | lowp float data = texture2D(texture_sampler, coord / 2.0 + 0.5).a; 35 | 36 | // If we've hit an opaque fragment (occluder), then get new distance 37 | // If the new distance is below the current, then we'll use that for our ray 38 | if (data > THRESHOLD) { 39 | distance = y / resolution.y; 40 | break; 41 | } 42 | coord += step; 43 | } 44 | 45 | gl_FragColor = vec4(vec3(distance), 1.0); 46 | } 47 | -------------------------------------------------------------------------------- /lights/render/shadow_map.material: -------------------------------------------------------------------------------- 1 | name: "shadow_map" 2 | tags: "shadow_map" 3 | vertex_program: "/lights/render/shadow_map.vp" 4 | fragment_program: "/lights/render/shadow_map.fp" 5 | vertex_space: VERTEX_SPACE_WORLD 6 | vertex_constants { 7 | name: "view_proj" 8 | type: CONSTANT_TYPE_VIEWPROJ 9 | value { 10 | x: 0.0 11 | y: 0.0 12 | z: 0.0 13 | w: 0.0 14 | } 15 | } 16 | vertex_constants { 17 | name: "size" 18 | type: CONSTANT_TYPE_USER 19 | value { 20 | x: 0.0 21 | y: 0.0 22 | z: 0.0 23 | w: 0.0 24 | } 25 | } 26 | fragment_constants { 27 | name: "resolution" 28 | type: CONSTANT_TYPE_USER 29 | value { 30 | x: 0.0 31 | y: 0.0 32 | z: 0.0 33 | w: 0.0 34 | } 35 | } 36 | samplers { 37 | name: "tex0" 38 | wrap_u: WRAP_MODE_CLAMP_TO_EDGE 39 | wrap_v: WRAP_MODE_CLAMP_TO_EDGE 40 | filter_min: FILTER_MODE_MIN_LINEAR 41 | filter_mag: FILTER_MODE_MAG_LINEAR 42 | } 43 | -------------------------------------------------------------------------------- /lights/render/shadow_map.vp: -------------------------------------------------------------------------------- 1 | #define PI 3.14 2 | 3 | uniform highp mat4 view_proj; 4 | uniform mediump vec4 size; 5 | 6 | // positions are in world space 7 | attribute highp vec4 position; 8 | attribute mediump vec2 texcoord0; 9 | 10 | varying mediump vec2 var_texcoord0; 11 | 12 | void main() 13 | { 14 | gl_Position = view_proj * vec4(position.x * size.x, position.y * size.y, position.z, 1.0); 15 | 16 | var_texcoord0.x = PI * 1.5 + (texcoord0.x * 2.0 - 1.0) * PI; 17 | } 18 | --------------------------------------------------------------------------------