Elma 2/Technical
Jump to navigation
Jump to search
Elasto Mania 2
Levels
How to parse a level byte by byte. Remember little-endianess.
WIP
Polygon objects are oriented so for y, up is negative and down is positive. Line objects are inverted so for y, up is positive and down is negative.
Offset | Type | Bytes | Description |
---|---|---|---|
0 | char[5] | 5 | "POT35" for Elma 2 levels |
5 | int | 4 | 30 if unlocked level, 0 if locked level. Otherwise, assertion error |
9 | short | 2 | 1 if topology error, 0 if no topology error. |
11 | int | 4 | 1 if start out facing right (autoturn at level start) |
15 | char[51] | 51 | Unused: Level name/description. "Unnamed". Unused but can be hex-edited |
66 | char[16] | 16 | LGR name. Unchangeable except by hex edit. Always "default" |
82 | char[10] | 10 | Unused: Ground texture name. Unused. Value always overwritten to "texturea" on save. If missing on open, defaults as "ground" |
92 | char[10] | 10 | Unused: Sky texture name. Unused. Value always overwritten to "qgrass" on save. If missing on open, defaults as "sky" |
102 | byte[20] | 20 | Unused: ? Appears to be useless. Can be hex-edited |
122 | int | 4 | Shareware check. Shareware editor always saves this value as 115. Shareware game cannot open any number greater than 120. Full game is probably 135 but to confirm with real game version |
126 | double | 8 | Number of polygons + 0.4643643. Maximum 2000. |
134 | polygon | ? | Sequential list of polygons with data. "Raw" data for editor purposes |
? | object1 | ? | Only exists if no topology error, otherwise this object is skipped. "Processed" data for when you actually open a level. |
? | byte | 1 | 0x2B |
x | To be continued... Work in progress | ||
? | double | 8 | Number of objects + 0.4643643. Maximum 500. |
x | To be continued... Work in progress |
Offset | Type | Bytes | Description |
---|---|---|---|
0 | int | 4 | Type: 1=Normal, 2=Inactive, 3=Platform, 4=Path, 5=Autogenerated Border Polygon |
4 | int | 4 | Path Subtype: Door=1, Elevator=2, Falling=3, Continuous Oneway=4, Continuous Twoway=5 |
8 | int | 4 | Platform's Platform ID or Path's Path ID: 0-999 |
12 | int | 4 | Path's Platform ID: 0-999 |
16 | int | 4 | Path's Speed at top |
20 | int | 4 | Path's Speed at bottom |
24 | int | 4 | Path's Open delay |
28 | int | 4 | Path's Close delay |
32 | int | 4 | Path's ReOpen delay |
36 | int | 4 | Path's ReClose delay |
40 | int | 4 | Path's Initially flag: 1=Up, 0=Down |
44 | int | 4 | Path's No of platforms |
48 | int | 4 | Override flag: 1=Polygon interacts with biker |
52 | int | 4 | Style index |
56 | int | 4 | Override flag: 1=Border on |
60 | int | 4 | Override flag: 1=Border off |
64 | int | 4 | Override flag: 1=Whole polygon border colored |
68 | int | 4 | Distance |
72 | int | 4 | Probably always 0. Probably not important as not included in Balazs' debug file (0040F1FB) |
76 | byte[300] | 300 | Probably just padding |
376 | int | 4 | Number of vertices |
380 | vertex (double * 2)[?] | vertices * 16 | X and Y as two doubles. |
Offset | Type | Bytes | Description |
---|---|---|---|
0 | int | 4 | Total number of vertices across all polygons of type 1 + 5 only. |
4 | byte[72]*n | 72*n | LineObject |
x | To be continued... Work in progress |
Offset | Type | Bytes | Description |
---|---|---|---|
0 | double | 8 | a: Vertex's x |
8 | double | 8 | b: (-1)*Vertex's y |
16 | double | 8 | c: Delta x to reach the next vertex |
24 | double | 8 | d: (-1)*Delta y to reach the next vertex |
32 | double | 8 | e: Delta x to move one unit towards the next vertex - c/g - 1=sqrt(e^2+f^2) |
40 | double | 8 | f: Delta y to move one unit towards the next vertex - d/g - 1=sqrt(e^2+f^2) |
48 | double | 8 | g: Line length - sqrt(c^2+d^2) |
56 | int | 4 | Texture ID (draws to right of the line) |
60 | int | 4 | 0 if solid, 1 if cannot touch |
64 | int | 4 | Distance (border polygons copy base polygon distance) |
68 | int | 4 | Do not draw to the right of the line if = 1 (equivalent to texture id of 0), otherwise draw texture. Not sure if actually used by the default editor but that's what editing this value does |
Id | Texture |
---|---|
0 | Do not draw |
10 | Border texture (solid medium-colored beige) |
100 | Default ground (sandy rocks) |
105 | Solid dark green |