152 lines
5.5 KiB
Markdown
152 lines
5.5 KiB
Markdown
# --| 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
|
|
**ESC** - exit application
|
|
|
|
- creative tools:
|
|
**Y** select level destination
|
|
**R** warp to targetted level (resets player's position)
|
|
**T** warp to targetted level (no update top player's position)
|
|
|
|
- while in menus:
|
|
<!> when editing a value : **A** (add), **S** (subtract), **M** (multiply), **D** (divide), **ENTER/SPACE** (proceed)
|
|
|
|
# --| Mods (in case you find it easy) |--
|
|
|
|
*Hidden* (HD) : makes the terrain blink to be totally invisible sometimes
|
|
*HardRock* (HR) : multiplies damage taken, enables fall damage and kills you upon falling into the void
|
|
*DoubleTime* (DT) : makes everything faster
|
|
*SuddenDeath* (SD) : sets your HP at 1 and disables healing
|
|
*Flashlight* (FL) : drastically lowers your view distance
|
|
*Speedy* (SP) : makes you lose HP over time
|
|
*Flip* (FP) : flips the screen over the Y axis, inverting some directions
|
|
|
|
# --| 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*
|
|
|
|
. at the end of each file, the weight of the room is required (can be any positive integer)
|
|
if **there is only one file (==> its name is room_0) AND weight is 0**, the room will only generate at the central chunk (any other will be NULL)
|
|
use this if you want to create parkour levels, puzzles...
|
|
else, **make sure the total weight (the sum of all) is not equal to 0** *(you may end up with a floating point exception)*
|
|
|
|
. no matter what, room_0 will **always** generate at chunk (0, 0)
|
|
|
|
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
|
|
|
|
[] is mandatory data
|
|
{} is optionnal data
|
|
|
|
*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) -> HP 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 (towards player), 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, {initialState, triggerButton}] with
|
|
amplitude_{x,y,z} = double[>= 0.0]
|
|
{mult,divd} = int
|
|
{phase} = int[0, 360]
|
|
{..} = int(>=0)
|
|
|
|
-> 5 (linear moving platform)
|
|
[.. amplitude_x, amplitude_y, amplitude_z, speed_x, speed_y, speed_z, {initialState, triggerButton}] with
|
|
amplitude_{x,y,z} = double[>= 0.0]
|
|
speed_{x,y,z} = double
|
|
{..} = int(>=0)
|
|
|
|
-> 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 (movable block)
|
|
[.. friction, mass] with
|
|
friction = double[>0.0]
|
|
mass = double[>0.0] (in kg)
|
|
|
|
-> 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)
|
|
|
|
-> 14 (movable object-related button)
|
|
[.. freq] with
|
|
freq = int[0 - 15]
|
|
|
|
-> 15 (gun)
|
|
[.. vx, vy, vz, ax, ay, az, cooldown, phase, ttl, dmg, psize_x, psize_y, psize_z] with
|
|
all\{dmg} = double (cooldown > 0.0 and ttl > 0.0 and psize_{x,y,z} > 0.0)
|
|
dmg = int (>0)
|
|
|
|
-> 16 (type 1 entity)
|
|
[.. speed, jump_height, dmg, kbPlayer, {buttonActivation}] with
|
|
all\{dmg} = double[>=0.0]
|
|
dmg = int (>=0)
|
|
buttonActivation = int[0-16]
|
|
|
|
-> 17 (type 2 entity)
|
|
[.. speed, jump_height, dmg, kbPlayer, kbEntity, {buttonActivation}] with
|
|
all\{dmg} = double[>=0.0]
|
|
dmg = int (>=0)
|
|
buttonActivation = int[0-16]
|
|
|
|
``` |