private static void ReadTextureCoords(ref Scape scape, FileStream fileStream)
        {
            // Load unknown coords
            scape.TextureCoordsHeader1 = fileStream.ReadInt32();
            scape.TextureCoordsHeader2 = fileStream.ReadInt32();
            scape.TextureCoordsCount   = fileStream.ReadInt32();
            scape.TextureCoordsHeader4 = fileStream.ReadInt32();

            scape.TextureCoordsRange.Start = fileStream.Position;

            scape.TextureCoords = new TextureCoord[scape.TextureCoordsCount];

            for (var i = 0; i < scape.TextureCoordsCount; i++)
            {
                scape.TextureCoords[i] = new TextureCoord
                {
                    ModelIndex = fileStream.ReadInt32(),
                    Height     = (byte)fileStream.ReadByte(),
                    ImageCoord = (byte)fileStream.ReadByte(),
                    UShort     = fileStream.ReadInt16(),
                };
            }

            scape.TextureCoordsRange.End = fileStream.Position;
        }
        private static Scape LoadScape(FileStream fileStream)
        {
            var u1 = fileStream.ReadInt32();
            var u2 = fileStream.ReadInt32();
            var h  = fileStream.ReadInt32();
            var w  = fileStream.ReadInt32();

            var scape = new Scape(u1, u2, w, h);

            ReadHeightMap(ref scape, fileStream);

            ReadTextureCoords(ref scape, fileStream);

            ReadHeightProperties(ref scape, fileStream);

            ReadTextureProperties(ref scape, fileStream);

            fileStream.Seek(4 * 2, SeekOrigin.Current); // Skip Texture properties termination bits(?)

            ReadModelProperties(ref scape, fileStream);

            ReadMeshPosition(ref scape, fileStream);

            return(scape);
        }
        private static void ReadHeightProperties(ref Scape scape, FileStream fileStream)
        {
            // Unknown data set 2
            scape.HeightPropertyHeader1 = fileStream.ReadInt32();
            scape.HeightPropertiesCount = fileStream.ReadInt32();

            scape.HeightPropertiesRange.Start = fileStream.Position;
            scape.HeightProperties            = new HeightProperty[scape.HeightPropertiesCount];

            for (var i = 0; i < scape.HeightPropertiesCount; i++)
            {
                scape.HeightProperties[i] = new HeightProperty
                {
                    Unknown1 = fileStream.ReadInt16(),
                    Unknown2 = fileStream.ReadInt16(),
                    Unknown3 = fileStream.ReadInt16(),
                    Unknown4 = fileStream.ReadInt16(),
                    Unknown5 = fileStream.ReadInt16(),
                    Unknown6 = fileStream.ReadInt16(),
                    Unknown7 = fileStream.ReadInt16(),
                    Unknown8 = fileStream.ReadInt16()
                };
            }

            scape.HeightPropertiesRange.End = fileStream.Position;
        }
        public static Scape Load(string filepath)
        {
            Scape result = null;

            if (!File.Exists(filepath))
            {
                throw new FileNotFoundException();
            }

            using (var fileStream = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                try
                {
                    fileStream.Seek(0x0, SeekOrigin.Begin);

                    result = LoadScape(fileStream);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception at {0:X8}:\n{1}\n", fileStream.Position, e);
                }
            }

            return(result);
        }
Esempio n. 5
0
        public static void Export(Scape scapeData, string imagePath)
        {
            var outImg = new Bitmap(scapeData.Width, scapeData.Height);

            for (var x = 0; x < scapeData.Width; x++)
            {
                for (var y = 0; y < scapeData.Height; y++)
                {
                    var height  = Math.Clamp(scapeData.HeightMap[x, y], 0, 255);
                    var texture = Math.Clamp(scapeData.TextureMap[x, y] / 2, 0, 255);
                    var u1      = Math.Clamp(scapeData.UnknownMap[x, y], 0, 255);
                    outImg.SetPixel(x, y, Color.FromArgb(texture, u1, height));
                }
            }

            outImg.Save(imagePath);
        }
        private static void ReadHeightMap(ref Scape scape, FileStream fileStream)
        {
            scape.HeightMapRange.Start = fileStream.Position;

            // Load maps
            for (var x = 0; x < scape.Width; x++)
            {
                for (var y = 0; y < scape.Height; y++)
                {
                    scape.TextureMap[x, y] = fileStream.ReadInt16();
                    scape.HeightMap[x, y]  = fileStream.ReadByte();
                    scape.UnknownMap[x, y] = fileStream.ReadByte();
                }
            }

            scape.HeightMapRange.End = fileStream.Position;
        }
        private static void ReadTextureProperties(ref Scape scape, FileStream fileStream)
        {
            // Read headers
            scape.TexturePropertyHeader1 = fileStream.ReadInt32();
            scape.TexturePropertyHeader2 = fileStream.ReadInt32();
            scape.TexturePropertiesCount = fileStream.ReadInt32();

            scape.TexturePropertiesRange.Start = fileStream.Position;

            // Read data set
            var dataSet = new List <TextureProperty>();

            for (var i = 0; i < scape.TexturePropertiesCount; i++)
            {
                ReadSingleTextureProperties(fileStream, out var result);
                dataSet.Add(result);
            }

            scape.TextureProperties = dataSet.ToArray();

            scape.TexturePropertiesRange.End = fileStream.Position;
        }
        private static void ReadMeshPosition(ref Scape scape, FileStream fileStream)
        {
            // Read unknown ending values
            scape.MeshPosition            = new MeshPosition[scape.UnknownEndingCount];
            scape.MeshPositionRange.Start = fileStream.Position;

            for (var i = 0; i < scape.UnknownEndingCount; i++)
            {
                scape.MeshPosition[i] = new MeshPosition
                {
                    Empty1        = fileStream.ReadInt32(),
                    Empty2        = fileStream.ReadInt32(),
                    MeshIndex     = fileStream.ReadInt16(),
                    Unknown2      = (byte)fileStream.ReadByte(),
                    Rotation      = (byte)fileStream.ReadByte(),
                    Empty3        = fileStream.ReadInt16(),
                    UnknownFlags2 = (byte)fileStream.ReadByte(),
                    UnknownFlags3 = (byte)fileStream.ReadByte(),
                };
            }

            scape.MeshPositionRange.End = fileStream.Position;
        }
        private static void ReadModelProperties(ref Scape scape, FileStream fileStream)
        {
            scape.MeshNameCount      = fileStream.ReadInt32();
            scape.UnknownEndingCount = fileStream.ReadInt32();

            // Read mesh info fields
            const int nameStringLength = 0x10;

            scape.MeshNamesRange.Start = fileStream.Position;

            var meshInfoCount = scape.MeshNameCount;

            scape.MeshNames = new Tuple <string, int> [meshInfoCount];

            for (var i = 0; i < meshInfoCount; i++)
            {
                scape.MeshNames[i] = new Tuple <string, int>(
                    fileStream.ReadString(nameStringLength),
                    fileStream.ReadInt16()
                    );
            }

            scape.MeshNamesRange.End = fileStream.Position;
        }
Esempio n. 10
0
    //informacion necesaria para la interfaz de usuario



    // Start is called before the first frame update
    void Start()
    {
        MiScape = new Scape();
        //inicio los valores de la interfaz
    }