Esempio n. 1
0
        public ResourceEntry WriteTextureEntry(ResourceEntry entry, XPathNodeIterator nodes, string sdsFolder, XmlNode descNode)
        {
            //texture data storage.
            MemoryStream    data = new MemoryStream();
            TextureResource resource;

            byte[] texData;

            //read from xml.
            nodes.Current.MoveToNext();
            string file = nodes.Current.Value;

            nodes.Current.MoveToNext();
            byte hasMIP = Convert.ToByte(nodes.Current.Value);

            nodes.Current.MoveToNext();
            entry.Version = Convert.ToUInt16(nodes.Current.Value);

            //do main stuff
            texData  = File.ReadAllBytes(sdsFolder + "/" + file);
            resource = new TextureResource(FNV64.Hash(file), hasMIP, texData);

            //entry.SlotVramRequired = (uint)(texData.Length - 128);
            //if (hasMIP == 1)
            //{
            //    using (BinaryReader reader = new BinaryReader(File.Open(sdsFolder + "/MIP_" + file, FileMode.Open)))
            //        entry.SlotVramRequired += (uint)(reader.BaseStream.Length - 128);
            //}

            resource.Serialize(entry.Version, data, Endian.Little);
            descNode.InnerText = file;
            entry.Version      = Convert.ToUInt16(nodes.Current.Value);
            entry.Data         = data.ToArray();
            return(entry);
        }
Esempio n. 2
0
        public ResourceEntry WriteTextureEntry(ResourceEntry entry, XPathNodeIterator nodes, string sdsFolder, XmlNode descNode)
        {
            // We lack the file hash in M3 and M1: DE. So we have to get it from the file.
            bool bIsMaf3 = false;
            var  game    = GameStorage.Instance.GetSelectedGame();

            if (game.GameType == GamesEnumerator.MafiaI_DE || game.GameType == GamesEnumerator.MafiaIII)
            {
                bIsMaf3 = true;
            }

            //read from xml.
            nodes.Current.MoveToNext();
            string file = nodes.Current.Value;

            nodes.Current.MoveToNext();

            ulong hash = 0;

            if (bIsMaf3)
            {
                string hashString = nodes.Current.ToString();
                hash = Convert.ToUInt64(hashString);
                nodes.Current.MoveToNext();
            }
            byte hasMIP = Convert.ToByte(nodes.Current.Value);

            nodes.Current.MoveToNext();

            // Setup ResourceEntry MetaInfo.
            entry.Version      = Convert.ToUInt16(nodes.Current.Value);
            descNode.InnerText = file;

            // Begin serialising the Texture Resource.
            TextureResource resource = new TextureResource();

            // Create stream.
            using (MemoryStream stream = new MemoryStream())
            {
                // Read the Texture file (.DDS).
                byte[] texData = File.ReadAllBytes(sdsFolder + "/" + file);
                resource = new TextureResource(FNV64.Hash(file), hasMIP, texData);

                // Do Version specific handling;
                if (bIsMaf3)
                {
                    resource.NameHash = hash;
                }

                // Serialise to the TextureResource and pack it into the ResourceEntry.
                resource.Serialize(entry.Version, stream, _Endian);
                entry.Data = stream.ToArray();

                // Configure VRAM information for the SDS.
                if (game.GameType == GamesEnumerator.MafiaII_DE || game.GameType == GamesEnumerator.MafiaII)
                {
                    entry.SlotVramRequired = (uint)(texData.Length - 128);
                    //if (hasMIP == 1)
                    //{
                    //    using (BinaryReader reader = new BinaryReader(File.Open(sdsFolder + "/MIP_" + file, FileMode.Open)))
                    //        entry.SlotVramRequired += (uint)(reader.BaseStream.Length - 128);
                    //}
                }

                if (game.GameType == GamesEnumerator.MafiaI_DE)
                {
                    var size = (resource.bIsDX10 ? 157 : 137);
                    entry.OtherVramRequired = (uint)(stream.Length - size);
                }
            }
            return(entry);
        }