Overview
Terrain files (*.ter) represent a single terrain to be used by a world.
This file format is generated by ZeroEditor and used during the munge process
to create the tern chunk within *.lvl files.
Structure
Name |
Size (bytes) |
Description |
Terrain Header |
2820/2821 (v21/22) |
Header storing general information about the terrain. |
Height Block |
size * size * 2 |
Height grid data. |
Color Block |
size * size * 4 |
RGBA colors for the terrain grid. |
Color Block |
size * size * 4 |
RGBA colors for the terrain grid. |
Texture Block |
size * size * 16 |
Texture layer opacity for the terrain grid. |
? |
size * size / 2 |
Maybe Water/Foliage. |
? |
size * size / 2 |
Probably Water. |
? |
Variable |
Not sure what this contains but it seems that this block is not required. |
The Terrain Header is always 2821 bytes in length.
Data Type |
Size (bytes) |
Description |
byte [4] |
4 |
Terrain Header Marker (TERR). |
long int |
4 |
.TER file version number (21 for SWBF, 22 for SWBFII). |
short int [4] |
8 |
Terrain extents. Example: -8, -8, 8, 8 for a 16x16 map. |
long int |
4 |
? (ie. 164) |
float [16] |
64 |
Tile-range for each texture layer. _0.031 (1/32): the texture spans 32 meters. This is stored as 1/X of the value in ZeroEditor. |
byte [16] |
16 |
Mapping for each texture-layer. 0 is normal. |
byte [64] |
64 |
Unknown. Possibly 16 floats for texture-layer rotations. |
float |
4 |
Map height multiplier. |
float |
4 |
Grid-scale. Distance between points. |
long int |
4 |
? (1) |
long int |
4 |
Full map size stored in the .TER file. The same or bigger than the map extents. |
long int |
4 |
? (2) |
byte |
1 |
? (0F) Only exists in SWBF II (version 22) terrain. |
TextureLayer [16] |
1024 |
Texture layers (see below). |
WaterLayer [16] |
1086 |
Water layers (see below). |
byte [524] |
524 |
Unknown. |
Terrain Blocks
The Terrain Header is 2820 (SWBF) or 2821 (SWBFII) bytes in length.
Name |
Data Type |
Size |
Height |
signed short |
Full map size * Full map size * 2 |
|
|
Height value for every point on the grid. This value will be multiplied with the map scale multiplier. |
Color |
byte [4] |
Full map size * Full map size * 4 |
|
|
Color values for every point on the grid. 4 bytes (from 0 to 255) corresponding to the RGBA channels. |
Color 2 |
byte [4] |
Full map size * Full map size * 4 |
|
|
Color values for every point on the grid. 4 bytes (from 0 to 255) corresponding to the RGBA channels. |
Texture |
byte [16] |
Full map size * Full map size * 16 |
|
|
One byte (0-255) for each texture layer indicating the transparency of the corresponding texture layer. |
Water |
byte |
Full map size * Full map size / 2 |
|
|
Structure unknown. |
Foliage |
byte |
Full map size * Full map size / 2 |
|
|
Structure unknown. |
Unknwon |
byte |
Variable |
|
|
Structure unknown. |
Terrain Structs
TextureLayer
Data Type |
Size (bytes) |
Description |
char [32] |
32 |
Diffuse texture name. |
char [32] |
32 |
Detail texture name. |
WaterLayer
Data Type |
Size (bytes) |
Description |
float [2] |
8 |
Water height value (twice). |
byte [8] |
8 |
Unknown, always zero. |
float [2] |
8 |
UV animation velocity. |
float [2] |
8 |
UV animation repeat. |
byte [4] |
4 |
RGBA color values. |
char [32] |
32 |
Water texture name. |
End-of-file Block
Can be empty
Data Type |
Size (bytes) |
Description |
int |
4 |
Length of the block. |
int |
4 |
Number of items. Can be zero, in which case there are no further fields and this block ends. |
int |
4 |
Number of (sub-)items? |