Mapdev:SMF format: Difference between revisions
From Spring
Jump to navigationJump to search
started wikifying the gif from the older page got to go to the gym now though so will finish later. |
Funkencool (talk | contribs) m to match source code |
||
| (9 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
= SMF(Spring Map File) Reference = | |||
SMF is a binary format | |||
* [https://github.com/spring/spring/blob/2e5bc43dc464ec27d6b880d105f0c618e07c4ff8/rts/Map/SMF/mapfile.h mapfile.h] | |||
{| class="wikitable" | * [https://github.com/spring/spring/blob/2e5bc43dc464ec27d6b880d105f0c618e07c4ff8/rts/Map/SMF/SmfMapFile.cpp SmfMapFile.cpp] | ||
== File location == | |||
maparchive.sd7/maps/mymapname.smf | |||
== Data Map == | |||
* smu = spring map unit, the size you see when in the lobby. roughly between 2 and 64. | |||
{| class="wikitable" width="100%" | |||
|+ align="left" | Header | |+ align="left" | Header | ||
! | ! style="width: 20%" | Bytes | ||
! style="width: 20%" | Type !! Description | |||
|- | |||
| 16 || <code>char[]</code> || Magic number; "spring map file\0" | |||
|- | |- | ||
| | | 4 || <code>int</code> || Version number; "1" | ||
|- | |- | ||
| 4 || <code>unsigned int</code> || ID, should be as unique as possible. | |||
|- | |- | ||
| | | 4 || <code>int</code> || Width; smu * 64 | ||
|- | |- | ||
| 4 || <code>int</code> || Length; smu * 64 | |||
|- | |- | ||
| | | 4 || <code>int</code> || Square size; 8 | ||
|- | |- | ||
| | | 4 || <code>int</code> || Texels per square size; 8 | ||
|- | |||
| 4 || <code>int</code> || Tile size; 32 | |||
|- | |||
| 4 || <code>float</code> || Depth/min height; 512 = 1*smu | |||
|- | |||
| 4 || <code>float</code> || Height/max height; 512 = 1*smu | |||
|- | |||
| 4 || <code>int</code> || Byte offset to start of height map | |||
|- | |||
| 4 || <code>int</code> || Byte offset to start of type map | |||
|- | |||
| 4 || <code>int</code> || Byte offset to start of tile index | |||
|- | |||
| 4 || <code>int</code> || Byte offset to start of mini map | |||
|- | |||
| 4 || <code>int</code> || Byte offset to start of metal map | |||
|- | |||
| 4 || <code>int</code> || Byte offset to start of features map | |||
|- | |||
| 4 || <code>int</code> || No of extra headers | |||
|} | |||
{| class="wikitable" | {| class="wikitable" width="100%" | ||
|+ align="left" | Extra | |+ align="left" | + Extra Headers | ||
! | ! style="width: 20%" | Bytes | ||
! style="width: 20%" | Type !! Description | |||
|- | |||
| 4 || <code>int</code> || Size of the header | |||
|- | |||
| 4 || <code>int</code> || Type of header | |||
|- | |||
| * || * || Data of header | |||
|} | |||
* | |||
* | |||
* | |||
{| class="wikitable" width="100%" | |||
|+ align="left" | + Height Map | |||
! style="width: 20%" | Bytes | |||
! style="width: 20%" | Type !! Description | |||
|- | |- | ||
| ( | | (width+1)*(length+1) || <code>unsigned short[]</code> || Data for height map. | ||
|} | |} | ||
{| class="wikitable" width="100%" | |||
|+ align="left" | + Type Map | |||
! style="width: 20%" | Bytes | |||
! style="width: 20%" | Type !! Description | |||
|- | |||
| (width/2)*(length/2) || <code>char[]</code> || Data for type map. | |||
|} | |} | ||
{| class="wikitable" | {| class="wikitable" width="100%" | ||
|+ align="left" | + | |+ align="left" | + Mini Map | ||
| | ! style="width: 20%" | Bytes | ||
! style="width: 20%" | Type !! Description | |||
|- | |||
| 699048 || <code>char[]</code> || raw DXT1 compressed 1024x1024 image. | |||
|} | |} | ||
{| class="wikitable" | {| class="wikitable" width="100%" | ||
|+ align="left" | + | |+ align="left" | + Tile Index Header | ||
| | ! style="width: 20%" | Bytes | ||
! style="width: 20%" | Type !! Description | |||
|- | |||
| 4 || <code>int</code> || Number of tile files | |||
|- | |||
| 4 || <code>int</code> || Total number of tiles in all files. | |||
|} | |} | ||
{| class="wikitable" | {| class="wikitable" width="100%" | ||
|+ align="left" | + | |+ align="left" | + SMT File Infos | ||
| | ! style="width: 20%" | Bytes | ||
! style="width: 20%" | Type !! Description | |||
|- | |||
| 4 || <code>int</code> || Number of tiles in this file | |||
|- | |||
| size of filename || <code>char[]</code> || The filename of the smt. | |||
|} | |||
* | |||
* | |||
* | |||
{| class="wikitable" width="100%" | |||
|+ align="left" | + Tile Index | |||
! style="width: 20%" | Bytes | |||
! style="width: 20%" | Type !! Description | |||
|- | |||
| (width / 4) * (length / 4) || <code>int[]</code> || Index numbers of tiles in SMT's | |||
|} | |||
{| class="wikitable" width="100%" | |||
|+ align="left" | + Metal Map | |||
! style="width: 20%" | Bytes | |||
! style="width: 20%" | Type !! Description | |||
|- | |||
| (width / 2) * (length / 2) || <code>char[]</code> || Metal Density | |||
|} | |||
{| class="wikitable" width="100%" | |||
|+ align="left" | + Features Header | |||
! style="width: 20%" | Bytes | |||
! style="width: 20%" | Type !! Description | |||
|- | |||
| 4 || <code>int</code> || Number of features | |||
|- | |||
| 4 || <code>int</code> || Number of feature types | |||
|- | |||
| * || <code>char[]</code> || List of feature names delimited by null | |||
|} | |||
{| class="wikitable" width="100%" | |||
|+ align="left" | + Features | |||
! style="width: 20%" | Bytes | |||
! style="width: 20%" | Type !! Description | |||
|- | |||
| 4 || <code>int</code> || Type of feature, corresponds with feature name list. | |||
|- | |||
| 4 || <code>float</code> || X Position (along the width of the map) | |||
|- | |||
| 4 || <code>float</code> || Y Position (Up into the sky) | |||
|- | |||
| 4 || <code>float</code> || Z Position (along the length of the map) | |||
|- | |||
| 4 || <code>float</code> || rotation, not sure of scale | |||
|- | |||
| 4 || <code>float</code> || relative size (not implemented); 1 | |||
|} | |||
* | |||
* | |||
* | |||
== Optional Extra Headers & data == | |||
{| class="wikitable" width="100%" | |||
|+ align="left" | + Grass Extra header | |||
! style="width: 20%" | Bytes | |||
! style="width: 20%" | Type !! Description | |||
|- | |||
| 4 || <code>int</code> || Size of the header; 12 | |||
|- | |||
| 4 || <code>int</code> || Type of header; 1 | |||
|- | |||
| 4 || <code>int</code> || Byte offset to beginning of grass map | |||
|} | |} | ||
{| class="wikitable" width="100%" | |||
|+ align="left" | + Grass Data | |||
| style="width: 20%" | (width / 4) * (length / 4) | |||
| style="width: 20%" | <code>unsigned char</code> | |||
| Map defining the grass on the map. not sure what 256 available values mean. | |||
|} | |} | ||
[[Category: | [[Category:Map Dev]] | ||
Latest revision as of 07:53, 3 October 2014
SMF(Spring Map File) Reference
SMF is a binary format
File location
maparchive.sd7/maps/mymapname.smf
Data Map
- smu = spring map unit, the size you see when in the lobby. roughly between 2 and 64.
| Bytes | Type | Description |
|---|---|---|
| 16 | char[] |
Magic number; "spring map file\0" |
| 4 | int |
Version number; "1" |
| 4 | unsigned int |
ID, should be as unique as possible. |
| 4 | int |
Width; smu * 64 |
| 4 | int |
Length; smu * 64 |
| 4 | int |
Square size; 8 |
| 4 | int |
Texels per square size; 8 |
| 4 | int |
Tile size; 32 |
| 4 | float |
Depth/min height; 512 = 1*smu |
| 4 | float |
Height/max height; 512 = 1*smu |
| 4 | int |
Byte offset to start of height map |
| 4 | int |
Byte offset to start of type map |
| 4 | int |
Byte offset to start of tile index |
| 4 | int |
Byte offset to start of mini map |
| 4 | int |
Byte offset to start of metal map |
| 4 | int |
Byte offset to start of features map |
| 4 | int |
No of extra headers |
| Bytes | Type | Description |
|---|---|---|
| 4 | int |
Size of the header |
| 4 | int |
Type of header |
| * | * | Data of header |
| Bytes | Type | Description |
|---|---|---|
| (width+1)*(length+1) | unsigned short[] |
Data for height map. |
| Bytes | Type | Description |
|---|---|---|
| (width/2)*(length/2) | char[] |
Data for type map. |
| Bytes | Type | Description |
|---|---|---|
| 699048 | char[] |
raw DXT1 compressed 1024x1024 image. |
| Bytes | Type | Description |
|---|---|---|
| 4 | int |
Number of tile files |
| 4 | int |
Total number of tiles in all files. |
| Bytes | Type | Description |
|---|---|---|
| 4 | int |
Number of tiles in this file |
| size of filename | char[] |
The filename of the smt. |
| Bytes | Type | Description |
|---|---|---|
| (width / 4) * (length / 4) | int[] |
Index numbers of tiles in SMT's |
| Bytes | Type | Description |
|---|---|---|
| (width / 2) * (length / 2) | char[] |
Metal Density |
| Bytes | Type | Description |
|---|---|---|
| 4 | int |
Number of features |
| 4 | int |
Number of feature types |
| * | char[] |
List of feature names delimited by null |
| Bytes | Type | Description |
|---|---|---|
| 4 | int |
Type of feature, corresponds with feature name list. |
| 4 | float |
X Position (along the width of the map) |
| 4 | float |
Y Position (Up into the sky) |
| 4 | float |
Z Position (along the length of the map) |
| 4 | float |
rotation, not sure of scale |
| 4 | float |
relative size (not implemented); 1 |
Optional Extra Headers & data
| Bytes | Type | Description |
|---|---|---|
| 4 | int |
Size of the header; 12 |
| 4 | int |
Type of header; 1 |
| 4 | int |
Byte offset to beginning of grass map |
| (width / 4) * (length / 4) | unsigned char
|
Map defining the grass on the map. not sure what 256 available values mean. |