package level import ( "bytes" "math/bits" "github.com/inkyblackness/hacked/ss1/content/archive/level/lvlids" "github.com/inkyblackness/hacked/ss1/content/object" "github.com/inkyblackness/hacked/ss1/serial" ) // EmptyLevelParameters contain the values to create an empty level. type EmptyLevelParameters struct { // XSize specifies the expected width, in tiles. 0 (or less) will default. XSize int32 // YSize specifies the expected height, in tiles. 0 (or less) will default. YSize int32 // Cyberspace indicates whether the level should be marked as cyberspace. Cyberspace bool // MapModifier is called to make initial changes to the map before serializing. // This can be used to empty out starter tile on starter level. MapModifier func(x, y int, entry *TileMapEntry) } // EmptyLevelData returns an array of serialized data for an empty level. func EmptyLevelData(param EmptyLevelParameters) [lvlids.PerLevel][]byte { var levelData [lvlids.PerLevel][]byte baseInfo := DefaultBaseInfo(param.Cyberspace) if param.XSize > 0 { baseInfo.XSize = param.XSize baseInfo.XShift = int32(bits.Len32(uint32(param.XSize))) if (1 << (baseInfo.XShift - 1)) == baseInfo.XSize { baseInfo.XShift-- } } if param.YSize > 0 { baseInfo.YSize = param.YSize baseInfo.YShift = int32(bits.Len32(uint32(param.YSize))) if (1 << (baseInfo.YShift - 1)) == baseInfo.YSize { baseInfo.YShift-- } } levelData[lvlids.MapVersionNumber] = encode(mapVersionValue) levelData[lvlids.ObjectVersionNumber] = encode(objectVersionValue) levelData[lvlids.Information] = encode(&baseInfo) tileMap := NewTileMap(1<