Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/phoenixofforce/level_editor
2d texture map based Level Editor for games
https://github.com/phoenixofforce/level_editor
2d-game game game-development java level level-editor
Last synced: 2 months ago
JSON representation
2d texture map based Level Editor for games
- Host: GitHub
- URL: https://github.com/phoenixofforce/level_editor
- Owner: PhoenixofForce
- License: gpl-3.0
- Created: 2017-12-05T19:37:33.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2023-09-30T22:45:27.000Z (over 1 year ago)
- Last Synced: 2023-09-30T23:28:45.099Z (over 1 year ago)
- Topics: 2d-game, game, game-development, java, level, level-editor
- Language: Java
- Homepage:
- Size: 413 KB
- Stars: 4
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Level Editor
It started as a school project but continued to be value for making levels at game jams, so it continued to get updates. It allows you to import textures and create Maps with different types of layers:
* *TileLayer*, on which you can place along a grid of fixed size. This kind of layer are used to build the fore- and background of the map
* *FreeLayer*, on which textures can be placed freely on every pixel. These layer can be used for decoration or the placing of enemies
* *AreaLayer*, here no textures are used. Instead, you can define certain areas, which we use for the camera zones but could also be used for collision boxesThe Map display in the middle can be zoomed in and out with the mousewheel or `control +/-` and navigated with middle click dragging.
### Importing textures
First you have to import textures under `Resources > Import Textures`. To import and load textures we use a file format which we call text-File(short for texture). Text-files define single textures in a texturemap(or texture atlas). Let's suppose you have a texture map `map.png`, then you need the corresponding text-File `map.text` in the same folder.
The first line in a text-file gives information about how many textures are loaded. And each following line has the format of `name x y width height`. The name cannot contain white spaces and each value has to be separated by a white space.
An example text-files could look like this:
```
4
texture_1 0 0 8 8
texture_2 0 8 8 8
texture_3 8 0 8 8
texture_4 8 8 8 8
```
The current version of the filetype does not support comments, blank lines.### Tools
There are 5 tools that help you to create maps. You can switch between them by using the buttons in the toolbar on top, `Middle Mouse Click` the next tool or `Shift Middle Mouse Click` for the previous Tool.#### The Brush Tool
When used on a tile layer you can brush on textures. Drag your mouse while holding left click to place multiple tiles or click one slot to just place one tile.
Note the Autotiling function discussed later.When used on a free layer you place a single object on the position you clicked. You cannot drag here.
You can move the object by holding right click while dragging it. Right clicking an object also puts it into the tag editor.When used on an area layer an area of size 1x1 gets created. You can expand the area while right click dragging one of its anchors.
The anchors are corners which are a little more colored than the rest of the area. You can move the whole area by right click dragging anywhere else.
The areas are also put in the tag editor when right clicked.#### The Eraser Tool
It works the same way as the brush tool. But instead of placing objects, they get deleted when you left click.#### The Bucket/ Fill Tool
This tool only works on tile layers. When you click the whole area gets filled until it reaches other tiles or a selection.![Example of the fill tool](readmeRes/fill_example1.png)
#### The Selection Tool
This tool only works on tile layers. With the selection tool you can create selection which can be used with the bucket tool or allow you to copy and paste the selected tiles. With left click dragging you can span a selection as large as you want. With `Shift` + left click dragging you can expand your selection with other boxes. With `Control` left click dragging boxes can be cut out. With right click the selection is deleted. Alternatively you can use `Control + A`#### The Move Tool
This tool only works on selections and tile layers. With left click dragging the selection gets moved, and right click dragging also moves tiles in the selection.### Tags
You can add Tags to your map, areas and GameObject. For example, you can give an area a tag named `onEnter` with the content `set visitedHomeTown 1`. In your game when the player touches this area the onEnter tag gets loaded and its content gets executed. In a map the value `visitedHomeTown` could get set to 1. This value can be used in dialogue systems.### Autotiling
There are 2 autotiling modes: 4 and 8 bit. 4Bit used the green tiles from the image, and 8Bit uses the additional cyan tiles. Those tiles trigger autotile mode when they are named `block_name_also_name_ID` (NOTE: currently the spritesheet name cannot have underscores for autotiling to work). The IDs start at 0 with the top left tile, and advance to the right. The first row has the ids `(0, 1, 2)` the second row `(3, 4, 5)` and so on. When an id has no texture the programm defaults to id 0. Also you can multiple blocks called `block_name_also_name_ID_0`, `block_name_also_name_1` and so on. In this case the editor randomly selects one of the block tiles.### Saving Maps
Maps are saved as `umap`-Files(unsaved Map files), on which I won't go into detail here. But when opening an old file, make sure that all the used `png` and `text` files are still in the same position, otherwise the map won't load.### Exporting Maps
When exporting a map it automatically gets trimmed to fit the scene.Because of this and other changes we use `map`-files instead of the just mentioned `umap`-files.
Here the first line `Number;(tags)` represent the tile size followed by a number of tags. For each used texture follows a line `#i - texture_name` which is used to replace a texture with an index `i`(starting with 1 since 0 means no texture).
After that the layers get exported, first the TileLayer, after that FreeLayer and then AreaLayers.
TileLayers use`[layer; (name); z-Coord; width; height; t(0, 0), ..., t(0, x); t(1, 0), ..., t(1,y); ...; t(x,1), ... t(x, y)]`
where the z-Coordinate represents the distance from the camera. And `t(m, n)` stands for the corresponding texture index.
FreeLayer use `[put; (name); z-Coord; texture index; x; y]`.
These layers can also use tags(description pending) which look like `[put; (name); z; texture index; x; y; [tag; tag name; tag value]]`.
Lastly the AreaLayer are saved as `[area; (name); x1, y1; x2; y2; (tags)]`, they can also use tags.
With the latest version, you can also export the layer names as this is optional the names are represented in parentheses.Here is a full example map from one of [my projects](https://github.com/PhoenixofForce/Ludum_Dare_48/blob/master/maps/tut/map2.map):
```
16
#1 - textures_marble_4_10
#2 - textures_marble_2_10
#3 - textures_block_marble_10
#4 - textures_door_closed
#5 - textures_player_normal
#6 - textures_portal_idle_3
#7 - textures_platform_now
[layer; 1.0; 43; 41; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 1, 1, 1, 1, 1, 2, 3, 0, 0, 0, 0, 0, 0, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 1, 0, 0, 1, 1, 2, 3, 0, 1, 1, 1, 1, 0, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 1, 1, 2, 3, 0, 1, 1, 1, 1, 0, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 1, 1, 2, 3, 0, 1, 1, 1, 1, 0, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 1, 1, 2, 3, 0, 1, 1, 1, 1, 0, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 1, 1, 2, 2, 3, 0, 0, 1, 1, 1, 0, 0, 3, 3, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 1, 1, 2, 2, 3, 0, 1, 1, 1, 1, 1, 0, 0, 3, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 1, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 0, 0, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 0, 1, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 1, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 1, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 1, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 1, 1, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 1, 2, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 2, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 2, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 2, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 1, 2, 2, 3, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 2, 2, 3, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 2, 2, 3, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 2, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 2, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 2, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 1, 1, 1, 1, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 1, 1, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 1, 2, 2, 3, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 1, 2, 2, 3, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 1, 1, 2, 2, 3, 0, 0, 0, 1, 1, 0, 3, 3, 3, 3, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 1, 1, 2, 2, 3, 0, 1, 1, 1, 1, 0, 3, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 1, 2, 2, 3, 0, 1, 1, 1, 1, 0, 3, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 1, 1, 1, 2, 2, 3, 0, 1, 1, 1, 1, 0, 3, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 1, 2, 2, 3, 0, 1, 1, 1, 1, 0, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 1, 2, 2, 3, 0, 0, 0, 0, 0, 0, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 1, 1, 2, 2, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; ]
[layer; 0.5; 43; 41; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; ]
[put; 0.0; 4; 33.0; 10.0]
[put; 0.0; 5; 8.0; 9.0]
[put; 0.0; 6; 35.5; 10.0]
[put; 0.0; 7; 21.0; 12.0; [tag; dist; 9]]
[put; 0.0; 7; 12.0; 12.0; [tag; dist; 9]]
[area; 32.0; 7.9375; 38.0625; 12.0625]
[area; 11.0; 7.9375; 32.5; 16.0625]
[area; 6.9375; 7.9375; 12.0; 12.0625]
```### Keyboard Shortcuts
- `ctrl & +/-` for zooming in and out
- `ctrl & c/v` for copy and paste
- `ctrl & z/y` for undo and redo
- `ctrl & a` to select everything or select nothing
- `ctrl & s` to save the current map