├── public ├── robots.txt ├── favicon.ico ├── logo192.png ├── logo512.png ├── assets │ ├── img │ │ ├── sprites │ │ │ └── ants.png │ │ └── tileset │ │ │ └── MainLev2.0.png │ └── maps │ │ └── AntMap.json ├── manifest.json └── index.html ├── src ├── setupTests.js ├── App.test.js ├── App.js ├── index.css ├── reportWebVitals.js ├── index.js ├── App.css ├── components │ ├── AntStates.js │ ├── MapRenderer.js │ ├── AntRenderer.js │ ├── AntSimulation.js │ └── Ant.js └── logo.svg ├── .gitignore ├── package.json ├── LICENSE.md └── README.md /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cfrBernard/ant-colony-optimization/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cfrBernard/ant-colony-optimization/HEAD/public/logo192.png -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cfrBernard/ant-colony-optimization/HEAD/public/logo512.png -------------------------------------------------------------------------------- /public/assets/img/sprites/ants.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cfrBernard/ant-colony-optimization/HEAD/public/assets/img/sprites/ants.png -------------------------------------------------------------------------------- /public/assets/img/tileset/MainLev2.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cfrBernard/ant-colony-optimization/HEAD/public/assets/img/tileset/MainLev2.0.png -------------------------------------------------------------------------------- /src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /src/App.test.js: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@testing-library/react'; 2 | import App from './App'; 3 | 4 | test('renders learn react link', () => { 5 | render(); 6 | const linkElement = screen.getByText(/learn react/i); 7 | expect(linkElement).toBeInTheDocument(); 8 | }); 9 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | // src/App.js 2 | import React from 'react'; 3 | import AntSimulation from './components/AntSimulation'; 4 | 5 | const App = () => { 6 | return ( 7 |
8 | 9 |
10 | ); 11 | }; 12 | 13 | export default App; 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | const root = ReactDOM.createRoot(document.getElementById('root')); 8 | root.render( 9 | 10 | 11 | 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | text-align: center; 3 | } 4 | 5 | .App-logo { 6 | height: 40vmin; 7 | pointer-events: none; 8 | } 9 | 10 | @media (prefers-reduced-motion: no-preference) { 11 | .App-logo { 12 | animation: App-logo-spin infinite 20s linear; 13 | } 14 | } 15 | 16 | .App-header { 17 | background-color: #282c34; 18 | min-height: 100vh; 19 | display: flex; 20 | flex-direction: column; 21 | align-items: center; 22 | justify-content: center; 23 | font-size: calc(10px + 2vmin); 24 | color: white; 25 | } 26 | 27 | .App-link { 28 | color: #61dafb; 29 | } 30 | 31 | @keyframes App-logo-spin { 32 | from { 33 | transform: rotate(0deg); 34 | } 35 | to { 36 | transform: rotate(360deg); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/components/AntStates.js: -------------------------------------------------------------------------------- 1 | const AntStates = { 2 | DEATH: 'death', 3 | IDLE: 'idle', 4 | IDLE_FOOD: 'idle_food', 5 | WALK: 'walk', 6 | WALK_FOOD: 'walk_food' 7 | }; 8 | 9 | const AntAnimations = { 10 | [AntStates.DEATH]: { 11 | frameCount: 8, 12 | frameDelay: 3, 13 | }, 14 | [AntStates.IDLE]: { 15 | frameCount: 8, 16 | frameDelay: 10, 17 | }, 18 | [AntStates.IDLE_FOOD]: { 19 | frameCount: 8, 20 | frameDelay: 10, 21 | }, 22 | [AntStates.WALK]: { 23 | frameCount: 8, 24 | frameDelay: 5, 25 | }, 26 | [AntStates.WALK_FOOD]: { 27 | frameCount: 8, 28 | frameDelay: 5, 29 | } 30 | }; 31 | 32 | export { AntStates, AntAnimations }; 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ant-colony-optimization", 3 | "version": "0.2.0", 4 | "private": true, 5 | "dependencies": { 6 | "@testing-library/jest-dom": "^5.17.0", 7 | "@testing-library/react": "^13.4.0", 8 | "@testing-library/user-event": "^13.5.0", 9 | "react": "^18.3.1", 10 | "react-dom": "^18.3.1", 11 | "react-scripts": "5.0.1", 12 | "web-vitals": "^2.1.4" 13 | }, 14 | "scripts": { 15 | "start": "react-scripts start", 16 | "build": "react-scripts build", 17 | "test": "react-scripts test", 18 | "eject": "react-scripts eject" 19 | }, 20 | "eslintConfig": { 21 | "extends": [ 22 | "react-app", 23 | "react-app/jest" 24 | ] 25 | }, 26 | "browserslist": { 27 | "production": [ 28 | ">0.2%", 29 | "not dead", 30 | "not op_mini all" 31 | ], 32 | "development": [ 33 | "last 1 chrome version", 34 | "last 1 firefox version", 35 | "last 1 safari version" 36 | ] 37 | }, 38 | "devDependencies": { 39 | "@babel/plugin-proposal-private-property-in-object": "^7.21.11" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | ### Copyright (c) 2024 C. Bernard 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 | -------------------------------------------------------------------------------- /src/components/MapRenderer.js: -------------------------------------------------------------------------------- 1 | class MapRenderer { 2 | constructor(ctx, mapTileset, tileWidth, tileHeight) { 3 | this.ctx = ctx; 4 | this.mapTileset = mapTileset; 5 | this.tileWidth = tileWidth; 6 | this.tileHeight = tileHeight; 7 | this.offscreenCanvas = document.createElement('canvas'); 8 | this.offscreenCtx = this.offscreenCanvas.getContext('2d'); 9 | } 10 | 11 | drawTile(x, y, tileId) { 12 | const tilesetX = (tileId % (this.mapTileset.width / this.tileWidth)) * this.tileWidth; 13 | const tilesetY = Math.floor(tileId / (this.mapTileset.width / this.tileWidth)) * this.tileHeight; 14 | 15 | this.offscreenCtx.drawImage( 16 | this.mapTileset, 17 | tilesetX, tilesetY, this.tileWidth, this.tileHeight, 18 | x, y, this.tileWidth, this.tileHeight 19 | ); 20 | } 21 | 22 | drawMap(mapData) { 23 | mapData.layers.forEach(layer => { 24 | if (layer.type === "tilelayer") { 25 | layer.data.forEach((tileId, index) => { 26 | if (tileId !== 0) { 27 | const x = (index % mapData.width) * this.tileWidth; 28 | const y = Math.floor(index / mapData.width) * this.tileHeight; 29 | this.drawTile(x, y, tileId - 1); 30 | } 31 | }); 32 | } 33 | }); 34 | } 35 | 36 | renderMapToCache(mapData) { 37 | this.offscreenCanvas.width = mapData.width * this.tileWidth; 38 | this.offscreenCanvas.height = mapData.height * this.tileHeight; 39 | this.drawMap(mapData); 40 | } 41 | } 42 | 43 | export default MapRenderer; 44 | -------------------------------------------------------------------------------- /src/components/AntRenderer.js: -------------------------------------------------------------------------------- 1 | import { AntStates } from './AntStates'; 2 | 3 | class AntRenderer { 4 | constructor(ctx, spriteSheet, frameWidth, frameHeight, scaleFactor = 0.25) { 5 | this.ctx = ctx; 6 | this.spriteSheet = spriteSheet; 7 | this.frameWidth = frameWidth; 8 | this.frameHeight = frameHeight; 9 | this.scaleFactor = scaleFactor; 10 | } 11 | 12 | drawAnt(x, y, hasFood, state, frameIndex) { 13 | let row; 14 | 15 | switch (state) { 16 | case AntStates.DEATH: 17 | row = 0; 18 | break; 19 | case AntStates.IDLE: 20 | row = 1; 21 | break; 22 | case AntStates.IDLE_FOOD: 23 | row = 2; 24 | break; 25 | case AntStates.WALK: 26 | row = 3; 27 | break; 28 | case AntStates.WALK_FOOD: 29 | row = 4; 30 | break; 31 | default: 32 | row = 1; 33 | break; 34 | } 35 | 36 | const sx = frameIndex * this.frameWidth; 37 | const sy = row * this.frameHeight; 38 | 39 | const scaledWidth = this.frameWidth * this.scaleFactor; 40 | const scaledHeight = this.frameHeight * this.scaleFactor; 41 | 42 | this.ctx.save(); 43 | this.ctx.translate(x, y); 44 | this.ctx.drawImage( 45 | this.spriteSheet, 46 | sx, sy, 47 | this.frameWidth, this.frameHeight, 48 | -scaledWidth / 2, -scaledHeight / 2, 49 | scaledWidth, scaledHeight 50 | ); 51 | this.ctx.restore(); 52 | } 53 | } 54 | 55 | export default AntRenderer; 56 | 57 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | React App 28 | 29 | 30 | 31 |
32 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ant Simulation 2 | 3 | A simple graphical simulation of ants using React and an HTML5 canvas. This project was designed as a learning exercise to explore concepts like simulation, sprite animation, and canvas interaction. 4 | 5 | ## Features 6 | 7 | - **Basic Ant Simulation:** 8 | - Ants move on a map based on their state (`IDLE`, `WALK`, etc.). 9 | - Interaction with the map: home, food, walls. 10 | - Sprite animations based on ant states. 11 | 12 | - **Graphical Rendering:** 13 | - Map generated from a tileset and a JSON structure (Tiled Map Editor). 14 | - Ants rendered using a sprite sheet and a canvas. 15 | 16 | ## Project Goals 17 | 18 | This project aimed to: 19 | - Learn how to manipulate a canvas within a React environment. 20 | - Work with tilesets and sprite sheets to manage animations. 21 | - Explore basic simulation concepts like pathfinding and state-driven behavior. 22 | 23 | ### Current Limitations 24 | - Pathfinding logic (e.g., A*) is not yet implemented. 25 | - The project is in an early stage and offers only basic functionality. 26 | - No advanced AI or complex behavior is implemented. 27 | 28 | ## Installation and Running 29 | 30 | ### Prerequisites 31 | - Node.js and npm installed on your machine. 32 | 33 | ### Steps 34 | 35 | 1. Clone the repository: 36 | ```bash 37 | git clone https://github.com//ant-simulation.git 38 | cd ant-simulation 39 | 40 | 2. Istall and start dependencies: 41 | ```bash 42 | npm install 43 | npm start 44 | 45 | 3. Open the application in your browser at http://localhost:3000. 46 | 47 | ## Code Structure 48 | - Ant.js: Handles ant logic (states, movement, etc.). 49 | - AntRenderer.js: Renders ants on the canvas based on their state. 50 | - MapRenderer.js: Renders the map using a tileset and map data in JSON format. 51 | - AntSimulation.js: Main React component orchestrating the simulation. 52 | 53 | ## Resources 54 | ### Tileset and sprites: 55 | - assets/maps/AntMap.json: Map structure generated with Tiled Map Editor. 56 | - assets/img/sprites/ants.png: Sprite sheet for ant animations. 57 | - assets/img/tileset/MainLev2.0.png: Tileset used for the map. 58 | 59 | Future Development 60 | While this project is not a priority at the moment, here are some ideas for improvement: 61 | 62 | - Implement a pathfinding algorithm like A*. 63 | - Add more states and behaviors for the ants (e.g., exploration, returning home with food, etc.). 64 | - Refactor the code to make it more modular and easier to extend. 65 | 66 | ## License 67 | This project is available under the MIT License. Feel free to use, modify, and distribute it. 68 | -------------------------------------------------------------------------------- /src/components/AntSimulation.js: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect, useRef } from 'react'; 2 | import MapRenderer from './MapRenderer'; 3 | import AntRenderer from './AntRenderer'; 4 | import Ant from './Ant'; 5 | 6 | const MAX_ANTS = 1; 7 | 8 | const AntSimulation = () => { 9 | const canvasRef = useRef(null); 10 | const [mapData, setMapData] = useState(null); 11 | const [spriteSheet, setSpriteSheet] = useState(null); 12 | const [ants, setAnts] = useState([]); 13 | const mapRendererRef = useRef(null); 14 | const antRendererRef = useRef(null); 15 | 16 | const createGridFromMapData = (mapData) => { 17 | const grid = Array.from({ length: mapData.height }, () => 18 | Array.from({ length: mapData.width }, () => ({ 19 | isWall: false, 20 | isFood: false, 21 | isHome: false, 22 | })) 23 | ); 24 | 25 | const layers = { Home: 'isHome', Food: 'isFood', Walls: 'isWall' }; 26 | 27 | for (const [layerName, property] of Object.entries(layers)) { 28 | const layer = mapData.layers.find(layer => layer.name === layerName); 29 | if (layer) { 30 | for (let y = 0; y < layer.height; y++) { 31 | for (let x = 0; x < layer.width; x++) { 32 | const tileId = layer.data[y * layer.width + x]; 33 | if (tileId !== 0) { 34 | grid[y][x][property] = true; 35 | } 36 | } 37 | } 38 | } 39 | } 40 | 41 | return grid; 42 | }; 43 | 44 | useEffect(() => { 45 | const img = new Image(); 46 | img.src = 'assets/img/sprites/ants.png'; 47 | img.onload = () => setSpriteSheet(img); 48 | }, []); 49 | 50 | useEffect(() => { 51 | const loadMapData = async () => { 52 | const response = await fetch('assets/maps/AntMap.json'); 53 | const data = await response.json(); 54 | setMapData(data); 55 | }; 56 | loadMapData(); 57 | }, []); 58 | 59 | useEffect(() => { 60 | if (!spriteSheet || !mapData) return; 61 | 62 | const ctx = canvasRef.current.getContext('2d'); 63 | const mapTileset = new Image(); 64 | mapTileset.src = 'assets/img/tileset/MainLev2.0.png'; 65 | 66 | mapTileset.onload = () => { 67 | mapRendererRef.current = new MapRenderer(ctx, mapTileset, 32, 32); 68 | antRendererRef.current = new AntRenderer(ctx, spriteSheet, 124, 137); 69 | 70 | mapRendererRef.current.renderMapToCache(mapData); 71 | 72 | const grid = createGridFromMapData(mapData); 73 | const initialAnts = []; 74 | for (let i = 0; i < MAX_ANTS; i++) { 75 | initialAnts.push(new Ant(mapData, grid)); 76 | } 77 | setAnts(initialAnts); 78 | }; 79 | }, [spriteSheet, mapData]); 80 | 81 | useEffect(() => { 82 | if (!ants.length || !spriteSheet || !mapData) return; 83 | 84 | const animate = () => { 85 | const ctx = canvasRef.current.getContext('2d'); 86 | 87 | ctx.drawImage(mapRendererRef.current.offscreenCanvas, 0, 0); 88 | 89 | ants.forEach(ant => { 90 | ant.update(); 91 | const { x, y, hasFood, state, frameIndex,} = ant.getPosition(); 92 | antRendererRef.current.drawAnt(x, y, hasFood, state, frameIndex,); 93 | }); 94 | 95 | requestAnimationFrame(animate); 96 | }; 97 | 98 | animate(); 99 | }, [ants, spriteSheet, mapData]); 100 | 101 | return ; 102 | }; 103 | 104 | export default AntSimulation; 105 | -------------------------------------------------------------------------------- /src/components/Ant.js: -------------------------------------------------------------------------------- 1 | import { AntStates, AntAnimations } from './AntStates'; 2 | 3 | class Ant { 4 | constructor(mapData, grid) { 5 | this.mapData = mapData; 6 | this.grid = grid; 7 | this.hasFood = false; 8 | this.state = AntStates.IDLE; 9 | this.frameIndex = 0; 10 | this.frameTimer = 0; 11 | this.animation = AntAnimations[this.state]; 12 | 13 | this.homeTiles = this.extractTiles("isHome"); 14 | this.foodTiles = this.extractTiles("isFood"); 15 | this.spawnAtHome(); 16 | } 17 | 18 | extractTiles(type) { 19 | const tiles = []; 20 | for (let y = 0; y < this.grid.length; y++) { 21 | for (let x = 0; x < this.grid[y].length; x++) { 22 | if (this.grid[y][x][type]) { 23 | tiles.push({ x, y }); 24 | } 25 | } 26 | } 27 | return tiles; 28 | } 29 | 30 | spawnAtHome() { 31 | if (this.homeTiles.length > 0) { 32 | 33 | const { x, y } = this.homeTiles[0]; 34 | 35 | const centerX = (x * this.mapData.tilewidth) + (this.mapData.tilewidth / 2); 36 | const centerY = (y * this.mapData.tileheight) + (this.mapData.tileheight / 2); 37 | 38 | this.x = centerX 39 | this.y = centerY 40 | } else { 41 | console.log("Aucune position 'Home' trouvée sur la carte !"); 42 | } 43 | } 44 | 45 | isWallTile(x, y) { 46 | return this.grid[y] && this.grid[y][x] && this.grid[y][x].isWall; 47 | } 48 | 49 | isFoodTile(x, y) { 50 | return this.grid[y] && this.grid[y][x] && this.grid[y][x].isFood; 51 | } 52 | 53 | isHomeTile(x, y) { 54 | return this.grid[y] && this.grid[y][x] && this.grid[y][x].isHome; 55 | } 56 | 57 | attemptMove(newX, newY) { 58 | const tileX = Math.floor(newX / this.mapData.tilewidth); 59 | const tileY = Math.floor(newY / this.mapData.tileheight); 60 | 61 | if (!this.isWallTile(tileX, tileY)) { 62 | this.x = newX; 63 | this.y = newY; 64 | } else { 65 | console.log("Collision détectée avec un mur !"); 66 | } 67 | } 68 | 69 | setState(state) { 70 | if (this.state !== state) { 71 | this.state = state; 72 | this.frameIndex = 0; 73 | this.animation = AntAnimations[this.state]; 74 | this.frameTimer = 0; 75 | } 76 | } 77 | 78 | update() { 79 | if (this.state === AntStates.DEATH) { 80 | const { frameCount } = this.animation; 81 | if (this.frameIndex < frameCount - 1) { 82 | this.frameTimer++; 83 | if (this.frameTimer >= this.animation.frameDelay) { 84 | this.frameIndex++; 85 | this.frameTimer = 0; 86 | } 87 | } else { 88 | this.frameIndex = frameCount - 1; 89 | return; 90 | } 91 | } else { 92 | this.frameTimer++; 93 | if (this.frameTimer >= this.animation.frameDelay) { 94 | this.frameIndex = (this.frameIndex + 1) % this.animation.frameCount; 95 | this.frameTimer = 0; 96 | } 97 | } 98 | } 99 | 100 | getPosition() { 101 | return { 102 | x: this.x, 103 | y: this.y, 104 | hasFood: this.hasFood, 105 | state: this.state, 106 | frameIndex: this.frameIndex 107 | }; 108 | } 109 | 110 | setDestination(destination) { 111 | // D'abord vérifier si la destination est valide (Food ou Home) 112 | const tileX = Math.floor(destination.x / this.mapData.tilewidth); 113 | const tileY = Math.floor(destination.y / this.mapData.tileheight); 114 | 115 | if (this.isFoodTile(tileX, tileY)) { 116 | console.log("Destination définie sur la nourriture"); 117 | // Gérer les déplacements vers la nourriture ici 118 | } else if (this.isHomeTile(tileX, tileY)) { 119 | console.log("Destination définie sur la maison"); 120 | // Gérer les déplacements vers la maison ici 121 | } else { 122 | console.log("Destination invalide"); 123 | } 124 | } 125 | 126 | // Gérer le déplacement vers une destination avec la logique A* ou autre 127 | // À faire plus tard avec la grille 128 | } 129 | 130 | export default Ant; 131 | -------------------------------------------------------------------------------- /public/assets/maps/AntMap.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":29, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[1776, 1777, 1778, 1879, 1880, 1827, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1777, 1778, 1778, 1778, 1778, 1778, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1778, 1778, 1778, 1778, 1776, 1776, 1776, 1384, 1385, 1386, 1776, 1776, 1827, 1827, 1776, 1777, 7 | 1776, 1776, 1776, 1776, 1776, 1776, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1776, 1777, 1778, 1778, 1778, 1778, 1778, 1778, 1829, 1829, 1829, 1829, 1829, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1776, 1776, 1776, 1776, 1776, 1777, 1778, 1776, 1776, 1776, 1384, 1385, 1776, 1384, 1385, 1386, 1384, 1385, 1386, 8 | 1827, 1827, 1827, 1827, 1827, 1827, 1878, 1878, 1878, 1878, 1878, 1878, 1776, 1777, 1778, 1778, 1778, 1778, 1778, 1778, 1829, 1829, 1829, 1829, 1829, 1829, 1880, 1880, 1880, 1880, 1880, 1878, 1878, 1776, 1776, 1776, 1776, 1776, 1776, 1827, 1827, 1827, 1880, 1880, 1880, 1880, 1880, 1829, 1776, 1776, 1776, 1776, 1827, 1736, 1736, 1737, 1738, 1437, 9 | 1878, 1878, 1878, 1878, 1878, 1878, 1776, 1777, 1778, 1778, 1778, 1778, 1778, 1778, 1829, 1829, 1829, 1829, 1829, 1829, 1880, 1880, 1880, 1880, 1880, 1880, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1827, 1776, 1827, 1827, 1776, 1777, 1778, 1778, 1778, 1880, 1880, 1880, 1880, 1880, 1829, 1776, 1776, 1776, 1776, 1827, 1776, 1776, 1776, 1827, 1488, 10 | 1776, 1777, 1778, 1878, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1777, 1778, 1778, 1778, 1778, 1776, 1827, 1878, 1776, 1777, 1778, 1778, 1776, 1776, 1878, 1878, 1880, 1880, 1880, 1829, 1776, 1776, 1776, 1776, 1827, 1776, 1776, 1827, 1827, 1386, 11 | 1776, 1777, 1778, 1829, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1776, 1777, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1829, 1829, 1776, 1776, 1827, 1878, 1878, 1776, 1776, 1776, 1776, 1827, 1827, 1879, 1879, 1880, 1878, 1879, 1880, 1827, 1827, 1827, 1827, 1878, 1827, 1827, 1827, 1878, 1437, 12 | 1827, 1776, 1777, 1778, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1776, 1777, 1778, 1829, 1829, 1829, 1829, 1829, 1829, 1778, 1829, 1829, 1829, 1829, 1829, 1880, 1776, 1827, 1827, 1878, 1879, 1880, 1827, 1827, 1827, 1827, 1878, 1878, 1880, 1880, 1878, 1879, 1880, 1880, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1488, 13 | 1878, 1776, 1777, 1778, 1878, 1879, 1776, 1878, 1879, 1776, 1777, 1778, 1778, 1778, 1776, 1777, 1778, 1880, 1880, 1880, 1880, 1880, 1880, 1829, 1778, 1778, 1778, 1778, 1778, 1776, 1827, 1878, 1878, 1879, 1880, 1778, 1878, 1878, 1878, 1878, 1878, 1879, 1776, 1776, 1879, 1880, 1878, 1879, 1880, 1878, 1776, 1777, 1776, 1878, 1878, 1878, 1776, 1386, 14 | 1777, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1777, 1778, 1776, 1777, 1776, 1777, 1878, 1879, 1880, 1829, 1776, 1777, 1778, 1778, 1827, 1878, 1878, 1879, 1880, 1829, 1776, 1776, 1776, 1827, 1827, 1776, 1777, 1827, 1827, 1880, 1776, 1878, 1879, 1880, 1776, 1777, 1778, 1776, 1776, 1776, 1776, 1776, 1437, 15 | 1777, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1776, 1777, 1778, 1778, 1829, 1776, 1777, 1778, 1776, 1776, 1777, 1778, 1778, 1778, 1778, 1829, 1829, 1878, 1878, 1879, 1880, 1776, 1776, 1776, 1827, 1827, 1878, 1776, 1777, 1778, 1778, 1778, 1776, 1827, 1878, 1879, 1880, 1776, 1777, 1778, 1776, 1776, 1776, 1776, 1776, 1488, 16 | 1777, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1776, 1777, 1778, 1829, 1880, 1776, 1777, 1778, 1776, 1777, 1778, 1778, 1829, 1829, 1829, 1880, 1880, 1878, 1879, 1880, 1829, 1827, 1827, 1827, 1878, 1878, 1776, 1777, 1778, 1829, 1776, 1776, 1827, 1878, 1879, 1880, 1776, 1777, 1778, 1829, 1827, 1776, 1776, 1776, 1827, 1879, 17 | 1777, 1778, 1776, 1776, 1777, 1778, 1776, 1777, 1878, 1879, 1880, 1879, 1776, 1777, 1778, 1880, 1776, 1777, 1778, 1776, 1777, 1778, 1829, 1829, 1880, 1880, 1776, 1777, 1778, 1878, 1879, 1880, 1880, 1878, 1878, 1878, 1878, 1776, 1777, 1778, 1776, 1776, 1827, 1827, 1778, 1879, 1880, 1878, 1776, 1777, 1778, 1880, 1878, 1827, 1827, 1827, 1878, 1879, 18 | 1777, 1778, 1827, 1776, 1777, 1778, 1776, 1777, 1878, 1879, 1880, 1879, 1776, 1777, 1778, 1776, 1777, 1778, 1776, 1777, 1778, 1829, 1880, 1880, 1776, 1777, 1778, 1778, 1776, 1777, 1878, 1879, 1880, 1880, 1880, 1829, 1776, 1776, 1776, 1776, 1827, 1827, 1827, 1827, 1776, 1776, 1776, 1776, 1776, 1777, 1778, 1776, 1827, 1878, 1878, 1878, 1827, 1879, 19 | 1777, 1778, 1878, 1776, 1777, 1778, 1776, 1777, 1878, 1879, 1880, 1776, 1776, 1777, 1776, 1777, 1776, 1776, 1777, 1778, 1829, 1880, 1829, 1776, 1776, 1777, 1778, 1829, 1776, 1777, 1778, 1880, 1880, 1878, 1879, 1880, 1827, 1827, 1827, 1827, 1878, 1878, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1776, 1777, 1778, 1878, 1827, 1827, 1827, 1878, 1879, 20 | 1777, 1778, 1879, 1776, 1777, 1778, 1776, 1777, 1878, 1879, 1880, 1776, 1776, 1776, 1777, 1776, 1776, 1777, 1778, 1829, 1880, 1880, 1776, 1776, 1777, 1778, 1778, 1776, 1777, 1778, 1829, 1778, 1878, 1879, 1880, 1880, 1878, 1878, 1878, 1878, 1878, 1879, 1880, 1829, 1827, 1827, 1827, 1827, 1827, 1776, 1777, 1778, 1878, 1878, 1878, 1878, 1880, 1879, 21 | 1777, 1778, 1879, 1827, 1776, 1777, 1776, 1776, 1878, 1776, 1777, 1778, 1776, 1776, 1777, 1776, 1777, 1778, 1829, 1880, 1776, 1777, 1778, 1776, 1777, 1778, 1829, 1776, 1777, 1778, 1880, 1829, 1879, 1880, 1878, 1879, 1880, 1878, 1776, 1777, 1776, 1878, 1879, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1879, 1776, 1777, 1778, 1880, 1879, 1880, 1879, 22 | 1777, 1778, 1880, 1878, 1776, 1777, 1776, 1827, 1776, 1777, 1778, 1829, 1776, 1776, 1777, 1776, 1777, 1778, 1880, 1777, 1778, 1778, 1776, 1777, 1778, 1829, 1880, 1776, 1777, 1778, 1880, 1880, 1880, 1776, 1878, 1879, 1880, 1776, 1777, 1778, 1776, 1827, 1878, 1878, 1879, 1880, 1878, 1879, 1880, 1879, 1776, 1776, 1777, 1776, 1776, 1777, 1778, 1879, 23 | 1777, 1778, 1880, 1776, 1776, 1777, 1776, 1878, 1776, 1777, 1776, 1777, 1778, 1778, 1778, 1776, 1777, 1778, 1776, 1777, 1778, 1829, 1776, 1777, 1778, 1880, 1776, 1776, 1777, 1778, 1879, 1880, 1776, 1827, 1878, 1879, 1880, 1776, 1777, 1778, 1776, 1878, 1878, 1879, 1880, 1880, 1827, 1827, 1776, 1776, 1827, 1776, 1776, 1776, 1777, 1778, 1778, 1879, 24 | 1777, 1778, 1880, 1827, 1776, 1777, 1776, 1776, 1776, 1777, 1778, 1778, 1778, 1829, 1829, 1776, 1777, 1778, 1777, 1778, 1829, 1880, 1776, 1777, 1778, 1827, 1776, 1827, 1776, 1777, 1778, 1776, 1827, 1878, 1879, 1880, 1776, 1777, 1778, 1829, 1827, 1776, 1776, 1776, 1777, 1778, 1776, 1776, 1827, 1776, 1776, 1827, 1776, 1777, 1778, 1778, 1829, 1879, 25 | 1777, 1778, 1777, 1878, 1776, 1777, 1776, 1776, 1777, 1778, 1829, 1829, 1829, 1880, 1880, 1776, 1777, 1778, 1777, 1778, 1880, 1879, 1776, 1777, 1778, 1776, 1827, 1878, 1827, 1776, 1776, 1777, 1778, 1879, 1880, 1878, 1776, 1777, 1778, 1880, 1878, 1827, 1827, 1827, 1776, 1776, 1776, 1776, 1776, 1827, 1827, 1878, 1776, 1777, 1778, 1829, 1880, 1880, 26 | 1777, 1778, 1777, 1878, 1776, 1776, 1827, 1776, 1777, 1778, 1880, 1880, 1880, 1776, 1776, 1776, 1776, 1777, 1778, 1776, 1777, 1778, 1776, 1777, 1778, 1776, 1776, 1776, 1878, 1827, 1827, 1776, 1776, 1776, 1776, 1776, 1776, 1777, 1778, 1776, 1827, 1878, 1878, 1878, 1776, 1776, 1827, 1827, 1827, 1878, 1776, 1777, 1778, 1778, 1829, 1880, 1880, 1880, 27 | 1777, 1778, 1776, 1878, 1827, 1776, 1776, 1777, 1778, 1829, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1776, 1776, 1776, 1776, 1776, 1776, 1777, 1778, 1827, 1827, 1827, 1878, 1878, 1878, 1827, 1827, 1827, 1827, 1827, 1827, 1776, 1777, 1778, 1878, 1878, 1776, 1776, 1827, 1827, 1878, 1878, 1878, 1776, 1777, 1778, 1829, 1829, 1880, 1879, 1880, 1880, 28 | 1777, 1778, 1827, 1878, 1878, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1878, 1878, 1827, 1827, 1827, 1827, 1827, 1827, 1776, 1776, 1777, 1778, 1878, 1879, 1880, 1880, 1878, 1878, 1878, 1878, 1878, 1878, 1827, 1776, 1776, 1776, 1776, 1827, 1827, 1878, 1878, 1879, 1880, 1776, 1777, 1778, 1829, 1880, 1880, 1878, 1879, 1880, 1880, 29 | 1777, 1778, 1878, 1879, 1880, 1776, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1878, 1878, 1878, 1878, 1878, 1878, 1827, 1827, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1827, 1776, 1776, 1776, 1776, 1776, 1776, 1827, 1827, 1827, 1878, 1878, 1879, 1776, 1777, 1778, 1778, 1778, 1829, 1880, 1776, 1777, 1778, 1879, 1880, 1880, 30 | 1777, 1778, 1878, 1879, 1880, 1776, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1879, 1880, 1878, 1878, 1878, 1878, 1878, 1878, 1827, 1827, 1827, 1827, 1827, 1776, 1776, 1776, 1827, 1827, 1827, 1827, 1827, 1827, 1878, 1878, 1878, 1879, 1880, 1776, 1777, 1778, 1778, 1829, 1829, 1880, 1827, 1776, 1777, 1778, 1880, 1829, 1880, 31 | 1777, 1776, 1878, 1879, 1880, 1827, 1878, 1879, 1880, 1778, 1778, 1778, 1829, 1829, 1829, 1829, 1827, 1878, 1879, 1880, 1778, 1776, 1776, 1776, 1776, 1878, 1878, 1878, 1878, 1878, 1827, 1827, 1827, 1878, 1878, 1878, 1878, 1878, 1878, 1879, 1880, 1778, 1778, 1776, 1777, 1778, 1829, 1829, 1880, 1880, 1778, 1878, 1776, 1776, 1777, 1778, 1880, 1880, 32 | 1777, 1827, 1878, 1879, 1880, 1878, 1878, 1879, 1880, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1878, 1879, 1880, 1829, 1829, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1878, 1878, 1878, 1879, 1880, 1880, 1880, 1880, 1829, 1829, 1776, 1777, 1778, 1778, 1778, 1829, 1880, 1880, 1829, 1829, 1829, 1829, 1827, 1776, 1776, 1777, 1778, 1880, 33 | 1776, 1878, 1878, 1879, 1880, 1880, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1878, 1879, 1880, 1880, 1880, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1878, 1879, 1776, 1777, 1778, 1778, 1829, 1829, 1829, 1880, 1778, 1778, 1778, 1880, 1880, 1880, 1878, 1827, 1776, 1776, 1777, 1778, 34 | 1827, 1878, 1879, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1878, 1879, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1776, 1777, 1778, 1778, 1778, 1778, 1829, 1829, 1880, 1880, 1880, 1829, 1829, 1829, 1829, 1778, 1778, 1880, 1878, 1878, 1827, 1776, 1777, 1778], 35 | "height":29, 36 | "id":1, 37 | "name":"Ground", 38 | "opacity":1, 39 | "type":"tilelayer", 40 | "visible":true, 41 | "width":58, 42 | "x":0, 43 | "y":0 44 | }, 45 | { 46 | "data":[105, 106, 260, 259, 261, 262, 259, 260, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 54, 55, 56, 57, 58, 59, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 262, 259, 260, 261, 262, 259, 260, 47 | 259, 260, 261, 262, 311, 312, 313, 312, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 105, 106, 107, 108, 109, 110, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 311, 312, 313, 312, 313, 1, 259, 260, 48 | 207, 208, 60, 61, 362, 363, 364, 363, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 156, 157, 158, 159, 160, 161, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 362, 363, 364, 363, 364, 52, 53, 58, 49 | 258, 259, 111, 112, 413, 414, 415, 414, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 156, 157, 158, 159, 160, 161, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 413, 414, 415, 414, 415, 103, 104, 109, 50 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 55, 56, 57, 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 155, 160, 51 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 106, 107, 108, 109, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 211, 52 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 157, 158, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 257, 262, 53 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 208, 209, 210, 211, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 308, 58, 54 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 467, 468, 469, 262, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 109, 55 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 518, 519, 520, 313, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 160, 56 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 569, 570, 571, 364, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 211, 57 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 412, 413, 414, 415, 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 262, 58 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 211, 59 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 211, 60 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 211, 61 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 211, 62 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 211, 63 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 211, 64 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 211, 65 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 211, 66 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 211, 67 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 211, 68 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 257, 262, 69 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 308, 58, 70 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 109, 71 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 160, 72 | 106, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 211, 73 | 106, 162, 19, 20, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 20, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 54, 262, 74 | 106, 162, 70, 71, 72, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 22, 22, 22, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 105, 211], 75 | "height":29, 76 | "id":3, 77 | "name":"Walls", 78 | "opacity":1, 79 | "type":"tilelayer", 80 | "visible":true, 81 | "width":58, 82 | "x":0, 83 | "y":0 84 | }, 85 | { 86 | "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1746, 1747, 1748, 0, 0, 0, 0, 92 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1797, 1798, 1799, 0, 0, 0, 0, 93 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1848, 1849, 1850, 0, 0, 0, 0, 94 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 115 | "height":29, 116 | "id":4, 117 | "name":"Food", 118 | "opacity":1, 119 | "type":"tilelayer", 120 | "visible":true, 121 | "width":58, 122 | "x":0, 123 | "y":0 124 | }, 125 | { 126 | "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 155 | "height":29, 156 | "id":5, 157 | "name":"Home", 158 | "opacity":1, 159 | "type":"tilelayer", 160 | "visible":true, 161 | "width":58, 162 | "x":0, 163 | "y":0 164 | }], 165 | "nextlayerid":6, 166 | "nextobjectid":1, 167 | "orientation":"orthogonal", 168 | "renderorder":"right-down", 169 | "tiledversion":"1.11.0", 170 | "tileheight":32, 171 | "tilesets":[ 172 | { 173 | "firstgid":1, 174 | "source":"..\/..\/Sprites\/Tile set\/RPGW_Caves_v2.1\/MainLev2.0.tsx" 175 | }], 176 | "tilewidth":32, 177 | "type":"map", 178 | "version":"1.10", 179 | "width":58 180 | } --------------------------------------------------------------------------------