|
||
---|---|---|
.vscode | ||
bin | ||
include | ||
levels | ||
obj | ||
res | ||
sound | ||
src | ||
templates | ||
Makefile | ||
README.md |
README.md
--| 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 |--
- 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)
- 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]