Exemplo n.º 1
0
        public ushort SaveMap(string filename)
        {
            Log($"Map: Saving {filename} - Random seed: {_terrainMasterWord}");

            using (Bytemap bitmap = Resources["SP299"].Bitmap)
            {
                // Save terrainlayer
                for (int x = 0; x < WIDTH; x++)
                {
                    for (int y = 0; y < HEIGHT; y++)
                    {
                        byte b;
                        switch (_tiles[x, y].Type)
                        {
                        case Terrain.Forest: b = 2; break;

                        case Terrain.Swamp: b = 3; break;

                        case Terrain.Plains: b = 6; break;

                        case Terrain.Tundra: b = 7; break;

                        case Terrain.River: b = 9; break;

                        case Terrain.Grassland1:
                        case Terrain.Grassland2: b = 10; break;

                        case Terrain.Jungle: b = 11; break;

                        case Terrain.Hills: b = 12; break;

                        case Terrain.Mountains: b = 13; break;

                        case Terrain.Desert: b = 14; break;

                        case Terrain.Arctic: b = 15; break;

                        default: b = 1; break;                         // Ocean
                        }
                        bitmap[x, y] = b;
                    }
                }

                // Save improvement layer
                for (int x = 0; x < WIDTH; x++)
                {
                    for (int y = 0; y < HEIGHT; y++)
                    {
                        byte b = 0;
                        if (_tiles[x, y].City != null)
                        {
                            b |= 0x01;
                        }
                        if (_tiles[x, y].Irrigation)
                        {
                            b |= 0x02;
                        }
                        if (_tiles[x, y].Mine)
                        {
                            b |= 0x04;
                        }
                        if (_tiles[x, y].Road)
                        {
                            b |= 0x08;
                        }

                        bitmap[x, y + (HEIGHT * 2)] = b;
                        bitmap[x + (WIDTH * 1), y + (HEIGHT * 2)] = b;                 // Visibility layer
                    }
                }

                // Save improvement layer 2
                for (int x = 0; x < WIDTH; x++)
                {
                    for (int y = 0; y < HEIGHT; y++)
                    {
                        byte b = 0;
                        if (_tiles[x, y].RailRoad)
                        {
                            b |= 0x01;
                        }

                        bitmap[x, y + (HEIGHT * 3)] = b;
                        bitmap[x + (WIDTH * 1), y + (HEIGHT * 3)] = b;                 // Visibility layer
                    }
                }

                // Save explored layer
                for (int x = 0; x < WIDTH; x++)
                {
                    for (int y = 0; y < HEIGHT; y++)
                    {
                        bitmap[x + (WIDTH * 2), y] = _tiles[x, y].Visited;
                    }
                }

                using (Picture picture = new Picture(bitmap, Resources["SP299"].Palette))
                {
                    PicFile picFile = new PicFile(picture)
                    {
                        HasPalette256 = false
                    };
                    using (BinaryWriter bw = new BinaryWriter(File.Open(filename, FileMode.Create)))
                    {
                        bw.Write(picFile.GetBytes());
                    }
                    return((ushort)_terrainMasterWord);
                }
            }
        }
Exemplo n.º 2
0
        public ushort SaveMap(string filename)
        {
            Console.WriteLine($"Map: Saving {filename} - Random seed: {_terrainMasterWord}");

            byte[,] bitmap = Resources.Instance.LoadPIC("SP299").GetBitmap;

            // Save terrainlayer
            for (int x = 0; x < WIDTH; x++)
            {
                for (int y = 0; y < HEIGHT; y++)
                {
                    byte b;
                    switch (_tiles[x, y].Type)
                    {
                    case Terrain.Forest: b = 2; break;

                    case Terrain.Swamp: b = 3; break;

                    case Terrain.Plains: b = 6; break;

                    case Terrain.Tundra: b = 7; break;

                    case Terrain.River: b = 9; break;

                    case Terrain.Grassland1:
                    case Terrain.Grassland2: b = 10; break;

                    case Terrain.Jungle: b = 11; break;

                    case Terrain.Hills: b = 12; break;

                    case Terrain.Mountains: b = 13; break;

                    case Terrain.Desert: b = 14; break;

                    case Terrain.Arctic: b = 15; break;

                    default: b = 1; break;                     // Ocean
                    }
                    bitmap[x, y] = b;
                }
            }

            // Save improvement layer
            for (int x = 0; x < WIDTH; x++)
            {
                for (int y = 0; y < HEIGHT; y++)
                {
                    byte b = 0;
                    // 0x01 = CITY ?
                    if (_tiles[x, y].Irrigation)
                    {
                        b |= 0x02;
                    }
                    if (_tiles[x, y].Mine)
                    {
                        b |= 0x04;
                    }
                    if (_tiles[x, y].Road)
                    {
                        b |= 0x08;
                    }

                    bitmap[x, y + (HEIGHT * 2)] = b;
                }
            }

            // Save explored layer (unfinished)
            for (int x = 0; x < WIDTH; x++)
            {
                for (int y = 0; y < HEIGHT; y++)
                {
                    // Right now, we don't record where units have moved so this step is not saved correctly
                    // At the moment, only save active unit location
                    IUnit unit = Game.Instance.GetUnits(x, y).FirstOrDefault();
                    if (unit == null)
                    {
                        continue;
                    }
                    bitmap[x + (WIDTH * 2), y] = (byte)(unit.Owner + 8);
                }
            }

            PicFile picFile = new PicFile(new Picture(bitmap, Resources.Instance.LoadPIC("SP299").Palette))
            {
                HasPalette256 = false
            };

            using (BinaryWriter bw = new BinaryWriter(File.Open(filename, FileMode.Create)))
            {
                bw.Write(picFile.GetBytes());
            }
            return((ushort)_terrainMasterWord);
        }