/// <summary> /// Saves the file to the specified stream. /// </summary> /// <param name="stream">The stream to save to.</param> public override void Save(Stream stream) { BinaryWriter writer = new BinaryWriter(stream, Encoding.GetEncoding("us-ascii")); writer.Write(BLOCK_COUNT); long[] offsets = new long[BLOCK_COUNT]; for (int i = 0; i < BLOCK_COUNT; i++) { writer.Write(i); writer.Write(0); } offsets[0] = stream.Position; writer.Write((int)Type); writer.Write(Width); writer.Write(Height); writer.Write(GridCount); writer.Write(GridSize); writer.Write(StartPosition.X); writer.Write(StartPosition.Y); for (int x = 0; x < Width; x++) { for (int y = 0; y < Height; y++) { writer.Write(Positions[x, y].IsUsed); writer.Write(Positions[x, y].Position); } } offsets[1] = stream.Position; writer.Write(SpawnPoints.Count); SpawnPoints.ForEach(spawnPoint => { writer.Write(spawnPoint.Position); writer.WriteByteString(spawnPoint.Name); }); offsets[2] = stream.Position; writer.Write(Textures.Count); Textures.ForEach(texture => { writer.WriteByteString(texture); }); offsets[3] = stream.Position; writer.Write(Tiles.Count); Tiles.ForEach(tile => { writer.Write(tile.Layer1); writer.Write(tile.Layer2); writer.Write(tile.Offset1); writer.Write(tile.Offset2); writer.Write(tile.BlendingEnabled ? 1 : 0); writer.Write((int)tile.Rotation); writer.Write(tile.TileType); }); offsets[4] = stream.Position; writer.WriteByteString(Name); writer.Write(IsUnderground ? 1 : 0); writer.WriteByteString(BackgroundMusicFilePath); writer.WriteByteString(SkyFilePath); writer.Write(EconomyCheckRate); writer.Write(PopulationBase); writer.Write(PopulationGrowthRate); writer.Write(MetalConsumption); writer.Write(StoneConsumption); writer.Write(WoodConsumption); writer.Write(LeatherConsumption); writer.Write(ClothConsumption); writer.Write(AlchemyConsumption); writer.Write(ChemicalConsumption); writer.Write(IndustrialConsumption); writer.Write(MedicineConsumption); writer.Write(FoodConsumption); for (int i = 0; i < BLOCK_COUNT; i++) { stream.Seek(sizeof(int) + i * sizeof(int) * 2 + sizeof(int), SeekOrigin.Begin); writer.Write((int)offsets[i]); } }