Custom Levels
January 4, 2024 ยท View on GitHub
This game supports loading custom levels.
Put them into: [SDCARD]/apps_data/game_vexed/extra_levels - you may upload them with qFlipper

Levels should be in Custom VXL format (CSV alike, derived from Vexed *.ini)
Check before uploading
Be warned that app have very simple parser, some bugs in format will be noticed and app will refuse to load level and create file with error info - but other wont, and app will not work properly, crash itself or Flipper - test and check folowing:
- althou it seems like plaintext - treat it as binary! - DO NOT add extra spaces, newlines or comments, stick to the format
- do not use special characters in file name
- start file name from two digits (to order file on list)
- file name is level set name displayed in UI - keep it short!
- keep max. 100 levels per set
- make sure levels are numbered from 0 and there are no "holes" in level numbering
VXL file format
Each file have following structure:
# metadata
# metadata
# metadata
leveldata
leveldata
leveldata
Each line ends with newline character (at least \n, but \r\n will work too).
Remember to add new line after last level!
Metadata
# Id: Value
Supported IDs: Author, URL, Description
For example:
# Author: author name (short!)
# URL: author URL (short!)
# Description: (short!)
- Keep single space between
#,Id:andValue - Keep case the same, do not add spce before
# - Keep values short and check in app if they fit by center-click on levelset button of custom menu:

Levels
Level have fields separated by semicolon ;
number;title;board;solution
numbershould start from0, each level shoud have number, they should be continous in set (eg.: 0, 1, 2, 3...)titleas short as possible, no special charactersboardandsolutionhave special format, inherided from Palm.OS Vexed 2.2
For example:
0;Coffee Truffle;10/10/10/6a~2/7~2/5fb~2/3e~efab1/10;dGgDgG
1;Kahlua;10/10/10/5~d~a1/1h~1~~1~2/2~1~2~2/1h~d~d1a2/10;IdbEGdFe
Boad data
Board have 10 x 8 logical size.
Board data is string defining each line of board, separated by /
Each line contains following characters:
number- if it is wall, value tels how many blocks of wall to draw,1to10character-atohrepresenting each type of block~tilde character - representing empty space
1..10 | ~ | a | b | c | d | e | f | g | h |
|---|---|---|---|---|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
In our example, for first level:
10/10/10/6a~2/7~2/5fb~2/3e~efab1/10
means we have:
- first three lines are walls, `10`` characters each
- fourth line starts by
6walls, followed by block typea, one empty space and remaining2walls - line #5 starts with
7walls, followed by empty space and remaining2walls - line #6 starts with
5walls, then bricks typefandband remaining2walls - line #7 starts with
3walls, brickse, space, brickse,f,a,band single wall - last line is all walls
Solution data
Solution string contains XY logical coordinates of block to move at each step of solution. Solution records only position and direction, as falling, gravity and explosions are deterministic and can be calculated for each step.
Solution string length also determines what is par (reference solution length) - wy dividing this string length by 2 we have moves count in solution == par.
Coordinates are calculated from top-left corner, starting from 0.
String encodes coordinates as two letters:
- first letter for
Xcoordinate, whereaorAis 0,borBis 1 ... andjorJis 9 - first letter for
Ycoordinate, whereaorAis 0,borBis 1 ... andhorHis 7 - if
Xcoordinate letter is UPPERCASEA..J- it means in this step block is moved to the left - if
Ycoordinate letter is UPPERCASEA..H- it means in this step block is moved to the right
(it also means, that each pair have exactly and only one character uppercased)
| a | b | c | d | e | f | g | h | i | j | |
|---|---|---|---|---|---|---|---|---|---|---|
| x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| y | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| case | direction |
|---|---|
| Xy | left |
| xY | right |
In our example, for second level:
IdbEGdFe
means we have:
- step 1:
Id= block at x=8, y=3 moved to left - step 2:
bE= block at x=1, y=4 moved to right - step 3:
Gd= block at x=6, y=3 moved to left - step 4:
Fe= block at x=5, y=4 moved to left









