-
Notifications
You must be signed in to change notification settings - Fork 8
/
level decompression.txt
59 lines (45 loc) · 1.95 KB
/
level decompression.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Levels are composed of a series of commands, in this form:
TT - Command Type
XY - Y and X bytes. Y is absolute, X is relative from the previous block's X.
[SS]- additional optional settings bytes
The command list is composed of a command format (from the list below) and a byte for configuration.
Usually the configuration byte is a block type to use, as in BLOCK_SINGLE and BLOCK_RECTANGLE.
Command formats:
CUSTOM_BLOCK_SINGLE - TT XY mm
One block with any metatile type.
CUSTOM_BLOCK_RECTANGLE - TT XY mm WH
Rectangle with any metatile type.
BLOCK_SINGLE - TT XY
A single block of a hardcoded type.
BLOCK_RECTANGLE - TT XY WH
A rectangle of a hardcoded type.
BLOCK_WIDE_FROM_LIST - TT XY Wm
A rectangle (1 block tall) of a type from a list.
BLOCK_TALL_FROM_LIST - TT XY Hm
A rectangle (1 block wide) of a type from a list.
BLOCK_RECT_FROM_LIST - TT XY Hm WW
A rectangle of a type from a list.
BLOCK_RECTANGLE_SERIES - TT XY [WH] ... FF
A series of rectangles. One width (minus 1) and height are specified after the other.
Example (with a pit):
222
111222 4 6666
11122233333334 6666
\_5_/
1: $22 - width 3, height 2
2: $23 - width 3, height 3
3: $61 - width 7, height 1
4: $02 - width 1, height 2
5: $40 - width 5, height 0
6: $32 - width 4, height 2
$FF - ending mark
---------------------------------
Command types from $f0 to $ff are special commands that don't encode any blocks.
These commands are defined:
Finished - Stop decompressing the level
SetX - Set the X position for the next block to an arbitrary byte
Write1Column - Sets the data for the current column to an arbitrary byte (for question block contents, etc)
Write2Column - Same, but has 2 bytes for 2 consecutive columns
Write3Column - Same, but has 3 bytes for 3 consecutive columns
XMinus16 - Sets the X position for the next block back 16 columns
XPlus16 - Sets the X position for the next block ahead 16 columns