binding-of-isaac/README.md

3.3 KiB

--| Controls |--

  • in-game:
    WASD/ZQSD (depends on keyboard, usually WASD) - movement
    QE/AE (depends on keyboard, usually QE)- horizontal camera rotation
    PM - vertical camera rotation
    R - teleport to level_00
    ESC - exit application

  • while in menus:
    <!> when editing a value : A (add), S (subtract), M (multiply), D (divide), ENTER/SPACE (proceed)

--| 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

  1. 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 (damaging firebar/spinning platform (set damage to 0))
        [.. hz_rps, vt_rps, x_offset, y_offset, z_offset, dps] with
            {hz,vt}_rps = double
            hz0, vt_0 = double
            {x,y,z}_offset = double // if all is 0.0, the solid will rotate according to its center of mass, this shifts that center
            dps = int[>0]

    -> 3 (shooting, maybe moving explosive)
        [.. proj_speed, shoot_speed, shot_freq, shot_ttl] with
            {all} = double[>= 0.0]

    -> 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 UNUSED

    -> 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}

    -> 13 (math block)
        [.. defaultState, timeOff] with
            defaultState = {0, 1}
            dtime = double([>0.0] for time-limited press, or use -1.0 if no deactivation)