Level editing ############# Edit the ``.lvl`` files ======================= Each level consists of a ``.lvl`` file (look at ``level1.lvl``, ``level2.lvl``... for examples). The structure of ``.lvl`` files is : * a JSON header that contains some settings for the level : * ``origin`` : player starting point * ``next_level`` : name of the level to load when this level is won * ``pointlights`` : list of coordinates for the lights * a line containing ``-LEVEL-`` that begins the level "model" * many "slices" of ASCII chars separated by lines containing ``-Z-`` The "slices" are ASCII representations of each Z level of the level world. For example, this is a floot with a hole in its center: :: ##### ##### ## ## ##### ##### Here are the ASCII chars availables : * Normal cubes with different textures * ``D`` : a "orange" texture with black curves on it * ``#`` : a stone texture * ``=`` : a wood texture * Cubes that cannot receive portals * ``M`` : a metallic rusty texture * Deadly cubes * ``L`` : lava * Friendly cubes * ``X`` : exit Use the ingame editor ===================== If you don't want to edit ``.lvl`` files by hand, I'm working on an inline editor. To launch it, just start the game with the ``-e`` flag before the name of the level: :: ppython main.py -e mylevel When in editor mode, here are the available keys (AZERTY keyboard by default, change this in ``Gate/constants.py`` if needed): * ``A`` : fly up * ``W`` : fly down * ``Z, Q, S, D`` : strafe * ``R`` : reset position * ``P`` : print position * ``B`` : enter pdb * ``L`` : add a light at the current position * ``U`` : undo last edit * ``F11`` : save the level Here is what you can do in editor mode : * Copy an existing cube : clic on a cube and a copy of it will appear on the face you were looking at * Make multiple copies of a cube : look at a cube without clicking it and use the number keys from 1 to 9 to create (1 to 9) copies of the cube. It's the same as clicking on a cube, then on its copy, then on the copy of its copy and so on * Delete an existing cube : right-clic a cube * Make a rectangle : look at a cube and use the ``X`` key to create a rectangle from this cube to where you are (the camera) * Make a room : look at a cube and use the ``Shift-X`` key to create a room (non-filled parallelepiped) from this cube to where you are (the camera) Loading an existing level ------------------------- You can edit an existing level by launching the editor on it: :: ppython main.py -e level1 Notes ----- When saving the level, the camera position in the editor is saved as the ``origin`` position in the ``.lvl`` file so it will be the player's original position.