Level data file

The Level data file contains all the information needed to generate a level.

For examples, please create a level in Manic Miners yourself and locate the saved file. You should be able to read the exact syntax. This is more of a support document if you want to write converters or support programs.

Data fields
The file has several data fields that tell the game what to expect from parsing that part of the file. Please note that ALL fields use lower case letters, they are capitalized below to be more readable.

Info
This contains the metadata for the level, such as name, biome, and many other small aspects that change the game flow. The parameters "rowcount" and "colcount" are incredibly important, as they tell the game what map size to prepare for in the "tiles" section. A mismatch will likely generate a fatal error and cause problems.

Tiles
Tiles simply tells the data how the map looks. To make the game handle easier, all level files have to be a multiple of the size of one Chunk, which is 8. The map also has to be square. Both of these limitations are subject to change, but if this is not followed, the program will generate a fatal error, as this can cause very unwanted level behaviour.

This section is a CSV file of numbers. Each tile is thus represented by a number, or a "Tile ID", in this "matrix". The number directly reflects the texture that will be used for that tile. Please note that some Tile IDs are not to be used manually. For instance, the Tile ID for Dirt is 26, with 27 being the "corner" version of Dirt, 28 being the "edge" version of Dirt, and 29 being the "intersection" version of dirt. If these values are put in manually, they will not work. The game automatically calculates the texture only using the base Tile ID, in this case 26.

What tile IDs correspond to what textures can be found below.

Height
The heightmap determines how the map is to be sloped and how each individual vertex is to be manipulated. Only the height, not the X/Y position, can be altered. This is determined by an integer, showing the height change in Unreal Units. For reference, each tile is 300 Unreal Units wide. The data is, just like tiles, stored as a CSV

The heightmap has to be exactly 1 row and 1 column larger than the Tiles matrix. If this is not followed, the program will generate a fatal error, as this can cause very unwanted level behaviour.

Resources
This part is split into ore and crystal sections. They are each defined by a CSV matrix that defines how many resources to spawn where.

Miners
This section decides where and what miners to spawn. each miner takes exactly 3 lines: Any more than that breaks the loading. The first line takes in the miner's ID, the second one determines their transform, and the third one gives their tools and trainings. A miner is hidden if it is spawned on a hidden tile. Health=MAX is a macro to always spawn them with max health.

Vehicles
Similar to miners, using 3 lines of info, but they have more info. Instead of an ID they have the Vehicle Class, and instead of Tools they have more arguments. The driver of the vehicle will get teleported to the vehicle when the map starts. If the vehicle is hidden and then discovered, the vehicle still teleports miners based on their ID. Therefore, if you are editing the level file manually, make sure that it does not have a Driver ID that a regular miner in your level can get, as that might even teleport that miner out of vehicles. HP=MAX is a macro to always spawn them with max health.

Buildings
Buildings use 6 lines of info: Building class, transform, level, if the building should teleport or not, starting health, and Power Path placements.

Landslidefrequency
Defines landslide frequencies. The first number resembles the cooldown between landslides and the following list determines where the events are placed. Landslides can only originate from walls that have 3 neighbours and will stop when a wall does not have 3 neighbours anymore.

Lavaspread
Defines where erosion can spread. The first number resembles the cooldown between each erosion stage, and the following list determines where the events are placed in a (Row,Column) coordinate grid (or the reverse, I can't remember). Only certain ground tiles can erode. The initial wait before erosion starts is defined in the "info" section.

Script
The script executes events according to what happens while playing the level. For more information, please visit the scripting page.

Comments
Here you can put your creator comments on the level. You can also input comments by putting a # at the start of a line or putting # after a line HOWEVER this does not save to the final file yet. It is very useful if you are editing scripts via a text editor though (when scripting is implemented).

Deprecated fields
The following fields are obsolete. They will not generate errors, but do not change the level file in any way.
 * monsters
 * monsterfrequency

Tile ID list:
Tile IDs are mapped to their respective texture. That is why Dirt walls have ID 26, but the next wall has ID 30 and anything in between is not placable. There are four types of wall textures:
 * Regular, where it has 3 neighbour tiles and 2 diagonal neighbours adjacent to each other
 * Corner, where it has 4 neighbours and 3 diagonal neighbours


 * Edge, where it has 2 neighbour tiles and 1 diagonal neighbours,
 * Intersect, where it has 4 neighbours and 2 diagonal neighbours opposite to each other

Here is a list of all tile IDs. Bold names signify that tile is recognized by the game and not just a cosmetic texture. This means that if you set a wall to have ID 27, it will not be a Dirt wall, it will be undefined.
 * 1) Ground
 * 2) Rubble Level 1
 * 3) Rubble Level 2
 * 4) Rubble Level 3
 * 5) Rubble Level 4
 * 6) Lava
 * 7) Erosion level 4
 * 8) Erosion level 3
 * 9) Erosion level 2
 * 10) Erosion level 1
 * 11) Water
 * 12) Slimy slug hole
 * 13) Power path in progress
 * 14) Power path building
 * 15) Power path building powered
 * 16) Power path 1
 * 17) Power path 1 powered
 * 18) Power path 2 adjacent
 * 19) Power path 2 adjacent powered
 * 20) Power path 2 opposite
 * 21) Power path 2 opposite powered
 * 22) Power path 3
 * 23) Power path 3 powered
 * 24) Power path 4
 * 25) Power path 4 powered
 * 26) Dirt regular
 * 27) Dirt corner
 * 28) Dirt edge
 * 29) Dirt intersect
 * 30) Loose rock regular
 * 31) Loose rock corner
 * 32) Loose rock edge
 * 33) Loose rock intersect
 * 34) Hard rock regular
 * 35) Hard rock corner
 * 36) Hard rock edge
 * 37) Hard rock intersect
 * 38) Solid rock regular
 * 39) Solid rock corner
 * 40) Solid rock edge
 * 41) Solid rock intersect
 * 42) Crystal Seam regular
 * 43) Crystal Seam corner
 * 44) Crystal Seam edge
 * 45) Crystal Seam intersect
 * 46) Ore seam regular
 * 47) Ore seam corner
 * 48) Ore seam edge
 * 49) Ore seam intersect
 * 50) Recharge seam regular
 * 51) Recharge seam corner
 * 52) Recharge seam edge
 * 53) Recharge seam intersect
 * 54) UNUSED
 * 55) UNUSED
 * 56) UNUSED
 * 57) UNUSED
 * 58) Roof
 * 59) UNUSED
 * 60) Fake rubble 1
 * 61) Fake rubble 2
 * 62) Fake rubble 3
 * 63) Fake rubble 4
 * 64) Cliff type 1 (experimental)
 * 65) Cliff type 2 (experimental)

Reinforced walls currently just have 50 added to the base value.

Hidden walls currently just have 100 added to the base value.