# --| Syntax for level files |--  
  
1) **General rules**  
. each file must be named "room_k" where k is a positive integer  
  if "room_k" exists then all "room_u" where 0 <= u < k exists  
  
. you can add text at the end of each line as comments  
  but *do not use caps*, *this might confuse the parser*  
  
2) **Data structure**  
below is a detailled list for all block types ;  
each block type (Blocks, Teleporters, Entities) must have the corresponding word directly above it  
not all three keywords have to be written  
  
*Data-specific structure :*  
```
blocks:
    [x, y, z, w, h, d, rhz, rvt, r, g, b]

teleporters:
    [x, y, z, w, h, d, rhz, rvt, r, g, b, dest_chx, dest_chy]

entities: 
    [x, y, z, w, h, d, rhz, rvt, r, g, b, hp, damage, entityType ..]


    |> if entityType >= 4, use 1 for HP and 0 for damage <|
    |> *Entity types are :* <|

    -> 0 (coin) -> damage equals the coin's value
    -> 1 (non-moving explosive)
    -> 2 (seeking explosive)
    -> 3 (shooting non-moving explosive)
    -> 4 (moving platform)
        [.. amplitude_x, amplitude_y, amplitude_z, mult, divd, phase] with *<- extra arguments at the end of []*
            amplitude_{x,y,z} = double[>= 0.0]
            {mult,divd} = int
            {phase} = int[0, 360]

    -> 5 (linear moving platform)
        [.. amplitude_x, amplitude_y, amplitude_z, speed_x, speed_y, speed_z] with
            amplitude_{x,y,z} = double[>= 0.0]
            speed_{x,y,z} = double

    -> 6 (text box)
        [.. text, tred, tgreen, tblue] with
            text = {char*}

    -> 7 (warp text box)
        [.. dest_folder, room_count, text, tred, tgreen, tblue] with
            {dest_folder,text} = {char*} (length <= 50)
            {r,g,b} = int[0-256]


    -> 8 (lock box)
        [.. cost, doPay, tred, tgreen, tblue] with
            cost = int[> 0] (0 breaks)
            doPay = {0, 1} (bool)

    -> 9 (beat block)
        [.. ontime, offtime, start] with
            {ontime,offtime} = double[>0.0]
            start = {0,1}

    -> 10 (spinning platform)
        [.. hz_speed, vt_speed] with
            {hz_speed,vt_speed} = double

    -> 11 (button trigger)
        [.. freq, dtime] with
            freq = int[0 - 15]
            dtime = double([>0.0] for time-limited press, or use -1.0 if no deactivation)

    -> 12 (button block)
        [.. freq, defaultState] with
            freq = int[0 - 15]
            defaultState = {0, 1}
```