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.
 
m to match source code
 
(9 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{| class="wikitable"
= SMF(Spring Map File) Reference =
|+ align="left" | SMF File
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
!Magic !! Version !! MapID !! Xsize !! Ysize
! style="width: 20%" | Bytes
! style="width: 20%" | Type !! Description
|-
| 16 || <code>char[]</code> || Magic number; "spring map file\0"
|-
|-
|(c_str)`spring map file' || (int)1 || 32bit uInt  || Int || int
| 4 || <code>int</code> || Version number; "1"
|-
|-
! Square Size !! texel/square !! tile size !! minHeight !! maxheight !! ExtraHdrs
| 4 || <code>unsigned int</code> || ID, should be as unique as possible.
|-
|-
| (int)8 || (int)8 || (int)32 || float || float || (int)1
| 4 || <code>int</code> || Width; smu * 64
|-
|-
! heightPtr !! typePtr !! miniPtr !! tilesPtr !! metalPtr !! featurePtr
| 4 || <code>int</code> || Length; smu * 64
|-
|-
| int || int || int || int || int || int
| 4 || <code>int</code> || Square size; 8
|-
|-
| colspan=7 |
| 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 Header(s)
|+ align="left" | + Extra Headers
! Extra Header Size !! Extra Header Type !! vegitationPtr
! 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
|-
|-
| (int)12 || (~int)MEH_Vegetation || (int)
| (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" | +HeightMap
|+ align="left" | + Mini Map
| Array of [xsize+1]*[ysize+1] unsigned short
! 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" | +TypeMap
|+ align="left" | + Tile Index Header
| Array of [xsize/2]*[ysize/2] char(0-255)
! 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" | +MiniMap
|+ align="left" | + SMT File Infos
| 1024x1024 raw DXT1 image data (NO metadata)
! 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:Mapdev]]
 
[[Category:Development]]
[[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.
Header
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
+ Extra Headers
Bytes Type Description
4 int Size of the header
4 int Type of header
* * Data of header
+ Height Map
Bytes Type Description
(width+1)*(length+1) unsigned short[] Data for height map.
+ Type Map
Bytes Type Description
(width/2)*(length/2) char[] Data for type map.
+ Mini Map
Bytes Type Description
699048 char[] raw DXT1 compressed 1024x1024 image.
+ Tile Index Header
Bytes Type Description
4 int Number of tile files
4 int Total number of tiles in all files.
+ SMT File Infos
Bytes Type Description
4 int Number of tiles in this file
size of filename char[] The filename of the smt.
+ Tile Index
Bytes Type Description
(width / 4) * (length / 4) int[] Index numbers of tiles in SMT's
+ Metal Map
Bytes Type Description
(width / 2) * (length / 2) char[] Metal Density
+ Features Header
Bytes Type Description
4 int Number of features
4 int Number of feature types
* char[] List of feature names delimited by null
+ Features
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

+ Grass Extra header
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
+ Grass Data
(width / 4) * (length / 4) unsigned char Map defining the grass on the map. not sure what 256 available values mean.