示例#1
0
        public virtual void Read(BinaryReaderExt r)
        {
            EntryFlags  = r.ReadInt64();
            EntryNumber = r.ReadInt32();

            bool hasString = r.ReadBoolean();

            EntryName = r.ReadString(0x38);

            bool hasLabel = r.ReadBoolean();

            EntryLabel = r.ReadString(0x40);

            bool hasStartPosition = r.ReadBoolean();

            StartPosition    = new LVDVector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());
            UseStartPosition = r.ReadBoolean();

            // Unknown
            r.Skip(1);
            UnknownIndex2 = r.ReadInt32();

            r.Skip(1);
            UnknownVector = new LVDVector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());
            UnknownIndex  = r.ReadInt32();

            r.Skip(1);
            BoneName = r.ReadString(0x40);
        }
示例#2
0
        public static List <Anim> UnpackMOT(string path)
        {
            var anims = new List <Anim>();

            using (BinaryReaderExt r = new BinaryReaderExt(new FileStream(path, FileMode.Open)))
            {
                r.BigEndian = true;

                r.ReadInt32(); // unknown

                int  count      = r.ReadInt32();
                uint headerSize = r.ReadUInt32();
                uint fileLength = r.ReadUInt32();

                if (fileLength != r.Length)
                {
                    throw new Exception("File Length Mismatch");
                }

                for (uint i = 0; i < count; i++)
                {
                    r.Seek(headerSize + i * 4);
                    r.Seek(r.ReadUInt32());

                    Anim anim = new Anim();
                    if (r.Position != 0)
                    {
                        anim.Parse(r);
                    }
                    anims.Add(anim);
                }
            }
            return(anims);
        }
示例#3
0
        private void RoadReader(BinaryReaderExt reader)
        {
            ReadRoad(reader);

            reader.ReadInt32(); // ndNodeIdx
            reader.ReadInt32(); // ndPathIdx
        }
示例#4
0
        private void Load(string fileName)
        {
            var fileBytes = File.ReadAllBytes(fileName);

            using (var ms = new MemoryStream(fileBytes))
            {
                using (var reader = new BinaryReaderExt(ms))
                {
                    reader.ReadBytes(16);
                    var fileCount = reader.ReadInt32();
                    reader.ReadInt32();
                    for (var i = 0; i < fileCount; i++)
                    {
                        var file = new FILE();
                        file.Index = reader.ReadInt32();
                        reader.ReadBytes(21);
                        file.FileName = reader.ReadAscii();
                        file.FileName =
                            file.FileName.Substring(0, file.FileName.IndexOf('\0')); // Otherwise windows will crap out
                        reader.ReadBytes(12);
                        var filePos    = reader.ReadInt32();
                        var fileLength = reader.ReadInt32();

                        var pos = reader.BaseStream.Position;

                        reader.BaseStream.Seek(filePos, SeekOrigin.Begin);
                        file.File = reader.ReadBytes(fileLength);
                        reader.BaseStream.Seek(pos, SeekOrigin.Begin);

                        Files.Add(file);
                    }
                }
            }
        }
示例#5
0
        public void UdpCastTcsSignalAnswerTest()
        {
            var packet = new UdpCastTcsSignalAnswerPacket()
            {
                Signal = Utilities.Rand.Next(),
                State  = Utilities.Rand.Next(),
                Time   = Utilities.Rand.Next()
            };
            var bytes = packet.GetBytes();

            using (var ms = new MemoryStream(bytes))
            {
                using (var bs = new BinaryReaderExt(ms))
                {
                    var time = bs.ReadInt32();
                    Assert.AreEqual(packet.Time, time);

                    var signal = bs.ReadInt32();
                    Assert.AreEqual(packet.Signal, signal);

                    var state = bs.ReadInt32();
                    Assert.AreEqual(packet.State, state);
                }
            }
        }
示例#6
0
        public override void Read(BinaryReaderExt r)
        {
            base.Read(r);

            r.Skip(1);
            Type = (LVDDamageShapeType)r.ReadInt32();
            if (!Enum.IsDefined(typeof(LVDDamageShapeType), Type))
            {
                throw new NotImplementedException($"Unknown damage shape type {Type} at offset {r.BaseStream.Position - 4}");
            }

            X = r.ReadSingle();
            Y = r.ReadSingle();
            Z = r.ReadSingle();
            if (Type == LVDDamageShapeType.Sphere)
            {
                Radius = r.ReadSingle();
                Dx     = r.ReadSingle();
                Dy     = r.ReadSingle();
                Dz     = r.ReadSingle();
            }
            if (Type == LVDDamageShapeType.Capsule)
            {
                Dx     = r.ReadSingle();
                Dy     = r.ReadSingle();
                Dz     = r.ReadSingle();
                Radius = r.ReadSingle();
            }
            Unknown1 = r.ReadByte();
            Unknown2 = r.ReadInt32();
        }
示例#7
0
 public void Read(BinaryReaderExt reader)
 {
     dxgiFormat        = (DXGI_FORMAT)reader.ReadInt32();
     resourceDimension = (D3D10_RESOURCE_DIMENSION)reader.ReadInt32();
     miscFlag          = reader.ReadUInt32();
     arraySize         = reader.ReadUInt32();
     miscFlags2        = reader.ReadUInt32();
 }
示例#8
0
 private void SignalReader(BinaryReaderExt reader)
 {
     reader.ReadInt32();  // AID
     reader.ReadInt32();  // RID
     reader.ReadSingle(); // PosTime
     reader.ReadSingle(); // Dist
     reader.ReadInt32();  // DefaultState
     reader.ReadInt32();  // pathRID
 }
示例#9
0
        private void SignalControlReader(BinaryReaderExt reader)
        {
            var max = reader.ReadInt32(); // max

            for (var i = 0; i < max; i++)
            {
                reader.ReadInt32(); // rID
            }
        }
示例#10
0
        private void Signals4CLCtlReader(BinaryReaderExt reader)
        {
            var count = reader.ReadInt32(); // count

            for (var i = 0; i < count; i++)
            {
                reader.ReadInt32(); // id
                reader.ReadInt32(); // signalID
            }
        }
示例#11
0
        private void CrossRoadReader(BinaryReaderExt reader)
        {
            ReadRoad(reader);

            reader.ReadInt32(); // RID
            reader.ReadInt32(); // nodeIdx2
            reader.ReadInt32(); // arcIdx2
            reader.ReadInt32(); // nodeIdx3
            reader.ReadInt32(); // arcIdx3
        }
示例#12
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="path"></param>
        private void OpenSEMFile(string path)
        {
            using (BinaryReaderExt r = new BinaryReaderExt(new FileStream(path, FileMode.Open)))
            {
                r.BigEndian = true;

                r.Seek(8);
                var entryCount = r.ReadInt32();

                var offsetTableStart = r.Position + (entryCount + 1) * 4;

                for (uint i = 0; i < entryCount; i++)
                {
                    SEMEntry e = new SEMEntry();
                    e.Index = (int)i;
                    Entries.Add(e);

                    r.Seek(0x0C + i * 4);
                    var startIndex = r.ReadInt32();
                    var endIndex   = r.ReadInt32();

                    HashSet <int> UniqueEntries = new HashSet <int>();
                    int           largestEntry  = 0;
                    for (uint j = 0; j < endIndex - startIndex; j++)
                    {
                        SEMSound s = new SEMSound();
                        s.Index = (int)j;
                        r.Seek((uint)(offsetTableStart + startIndex * 4 + j * 4));
                        var dataOffsetStart = r.ReadUInt32();
                        var dataOffsetEnd   = r.ReadUInt32();

                        if (dataOffsetEnd == 0)
                        {
                            dataOffsetEnd = (uint)r.Length;
                        }

                        r.Seek(dataOffsetStart);
                        s.CommandData = r.ReadBytes((int)(dataOffsetEnd - dataOffsetStart));
                        e.Sounds.Add(s);

                        var entryId = ((s.CommandData[1] & 0xFF) << 16)
                                      | ((s.CommandData[2] & 0xFF) << 8)
                                      | ((s.CommandData[3] & 0xFF));

                        if (!UniqueEntries.Contains(entryId))
                        {
                            UniqueEntries.Add(entryId);
                        }
                    }
                    e.UniqueCount = UniqueEntries.Count;
                    //e.UniqueCount = largestEntry;
                }
            }
        }
示例#13
0
 public void Read(BinaryReaderExt reader)
 {
     dwSize        = reader.ReadUInt32();
     dwFlags       = (DDPF)reader.ReadInt32();
     dwFourCC      = reader.ReadInt32();
     dwRGBBitCount = reader.ReadUInt32();
     dwRBitMask    = reader.ReadUInt32();
     dwGBitMask    = reader.ReadUInt32();
     dwBBitMask    = reader.ReadUInt32();
     dwABitMask    = reader.ReadUInt32();
 }
示例#14
0
            /// <summary>
            /// Reads the texture from NTX
            /// </summary>
            /// <param name="reader">The reader.</param>
            public void Read(BinaryReaderExt reader)
            {
                TextureName = reader.ReadAsciiStatic(64);
                var textureSize = reader.ReadInt32();

#if DEBUG
                Unknown = reader.ReadInt32();
#else
                reader.ReadInt32();
#endif
                Texture = reader.ReadBytes(textureSize);
            }
示例#15
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="filePath"></param>
        public void Open(string name, Stream s)
        {
            Name = name;
            using (BinaryReaderExt r = new BinaryReaderExt(s))
            {
                r.BigEndian = true;

                var headerLength = r.ReadInt32() + 0x10;
                var dataOff      = r.ReadInt32();
                var soundCount   = r.ReadInt32();
                StartIndex = r.ReadInt32();

                Sounds = new DSP[soundCount];

                for (int i = 0; i < soundCount; i++)
                {
                    var sound        = new DSP();
                    var ChannelCount = r.ReadInt32();
                    sound.Frequency = r.ReadInt32();

                    sound.Channels.Clear();
                    for (int j = 0; j < ChannelCount; j++)
                    {
                        var channel = new DSPChannel();

                        channel.LoopFlag = r.ReadInt16();
                        channel.Format   = r.ReadInt16();
                        var LoopStartOffset = r.ReadInt32();
                        var LoopEndOffset   = r.ReadInt32();
                        var CurrentAddress  = r.ReadInt32();
                        for (int k = 0; k < 0x10; k++)
                        {
                            channel.COEF[k] = r.ReadInt16();
                        }
                        channel.Gain = r.ReadInt16();
                        channel.InitialPredictorScale = r.ReadInt16();
                        channel.InitialSampleHistory1 = r.ReadInt16();
                        channel.InitialSampleHistory2 = r.ReadInt16();
                        channel.LoopPredictorScale    = r.ReadInt16();
                        channel.LoopSampleHistory1    = r.ReadInt16();
                        channel.LoopSampleHistory2    = r.ReadInt16();
                        r.ReadInt16(); //  padding

                        channel.NibbleCount = LoopEndOffset - CurrentAddress;
                        channel.LoopStart   = LoopStartOffset - CurrentAddress;

                        sound.Channels.Add(channel);

                        var DataOffset = headerLength + (int)Math.Ceiling(CurrentAddress / 2d) - 1;

                        channel.Data = r.GetSection((uint)DataOffset, (int)Math.Ceiling(channel.NibbleCount / 2d) + 1);
                    }

                    Sounds[i] = sound;
                }
            }
        }
示例#16
0
        /// <summary>
        /// Melee's sound format
        /// </summary>
        /// <param name="filePath"></param>
        private void OpenSSM(string filePath)
        {
            using (BinaryReaderExt r = new BinaryReaderExt(new FileStream(filePath, FileMode.Open)))
            {
                r.BigEndian = true;

                var headerLength = r.ReadInt32() + 0x10;
                var dataOff      = r.ReadInt32();
                var soundCount   = r.ReadInt32();
                Unknown = r.ReadInt32();

                for (int i = 0; i < soundCount; i++)
                {
                    var sound = new DSP();
                    sound.Index = i;
                    var ChannelCount = r.ReadInt32();
                    sound.Frequency = r.ReadInt32();

                    sound.Channels.Clear();
                    for (int j = 0; j < ChannelCount; j++)
                    {
                        var channel = new DSPChannel();

                        channel.LoopFlag = r.ReadInt16();
                        channel.Format   = r.ReadInt16();
                        var LoopStartOffset = r.ReadInt32();
                        var LoopEndOffset   = r.ReadInt32();
                        var CurrentAddress  = r.ReadInt32();
                        for (int k = 0; k < 0x10; k++)
                        {
                            channel.COEF[k] = r.ReadInt16();
                        }
                        channel.Gain = r.ReadInt16();
                        channel.InitialPredictorScale = r.ReadInt16();
                        channel.InitialSampleHistory1 = r.ReadInt16();
                        channel.InitialSampleHistory2 = r.ReadInt16();
                        channel.LoopPredictorScale    = r.ReadInt16();
                        channel.LoopSampleHistory1    = r.ReadInt16();
                        channel.LoopSampleHistory2    = r.ReadInt16();
                        r.ReadInt16(); //  padding

                        channel.NibbleCount = LoopEndOffset - CurrentAddress;
                        channel.LoopStart   = LoopStartOffset - CurrentAddress;

                        sound.Channels.Add(channel);

                        var DataOffset = headerLength + (int)Math.Ceiling(CurrentAddress / 2d) - 1;

                        channel.Data = r.GetSection((uint)DataOffset, (int)Math.Ceiling(channel.NibbleCount / 2d) + 1);
                    }

                    Sounds.Add(sound);
                }
            }
        }
示例#17
0
        public override void Read(BinaryReaderExt r)
        {
            base.Read(r);

            r.Skip(1);
            ID = r.ReadInt32();

            r.Skip(1);
            Type = r.ReadInt32();

            X = r.ReadSingle();
            Y = r.ReadSingle();
            Z = r.ReadSingle();
            r.Skip(0x10);
        }
示例#18
0
        private void CrossSignalReader(BinaryReaderExt reader)
        {
            reader.ReadInt32();                // step1 aka AID
            reader.ReadInt32();                // v11 aka RID
            var roadSize = reader.ReadInt32(); // roadSize

            for (var i = 0; i < roadSize; i++)
            {
                var signalSize = reader.ReadInt32();
                for (var j = 0; j < signalSize; j++)
                {
                    reader.ReadInt32(); // RID
                }
            }
        }
示例#19
0
        private void TimeKeyDataReader(BinaryReaderExt reader)
        {
            reader.ReadInt32();               // id
            var keySize = reader.ReadInt32(); // keySize

            for (var i = 0; i < keySize; i++)
            {
                reader.ReadSingle();  // time0
                reader.ReadVector3(); // pos
                reader.ReadVector3(); // right
                reader.ReadVector3(); // dir
                reader.ReadVector3(); // normal
                reader.ReadVector4(); // quat
            }
        }
示例#20
0
        private void Path4SReader(BinaryReaderExt reader)
        {
            reader.ReadInt32();            // AID
            reader.ReadInt32();            // RID
            reader.ReadSingle();           // delta
            var size = reader.ReadInt32(); // size

            for (var i = 0; i < size; i++)
            {
                reader.ReadSingle(); // f
                reader.ReadSingle(); // f
                reader.ReadSingle(); // f
            }
            //LoadPathIndex(&this->m_Input, this->m_pTCS);
        }
示例#21
0
        public override void Read(BinaryReaderExt r)
        {
            base.Read(r);

            r.Skip(0x2); //x01 01
            int spawnCount = r.ReadInt32();

            for (int i = 0; i < spawnCount; i++)
            {
                r.Skip(1);
                var shape = new LVDShape();
                shape.Read(r);
                Spawns.Add(shape);
            }

            r.Skip(0x2); //x01 01
            int zoneCount = r.ReadInt32();

            for (int i = 0; i < zoneCount; i++)
            {
                r.Skip(1);
                var shape = new LVDShape();
                shape.Read(r);
                Zones.Add(shape);
            }

            r.Skip(0x2);              //x01 01
            Unknown1 = r.ReadInt32(); //Only seen as 0

            r.Skip(1);                //x01
            ID = r.ReadInt32();

            r.Skip(1); //x01
            int spawnIdCount = r.ReadInt32();

            for (int i = 0; i < spawnIdCount; i++)
            {
                r.Skip(1);
                SpawnIDs.Add(r.ReadInt32());
            }

            r.Skip(1);                //x01
            Unknown2 = r.ReadInt32(); //Only seen as 0

            r.Skip(1);                //x01
            int zoneIdCount = r.ReadInt32();

            for (int i = 0; i < zoneIdCount; i++)
            {
                r.Skip(1);
                ZoneIDs.Add(r.ReadInt32());
            }
        }
示例#22
0
        public override void Read(BinaryReaderExt r)
        {
            base.Read(r);
            r.ReadByte();
            Vector1 = new LVDVector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());
            r.ReadByte();
            Vector2 = new LVDVector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle());
            r.ReadByte();

            int vec3Count = r.ReadInt32();

            for (int i = 0; i < vec3Count; i++)
            {
                r.ReadByte();
                Vectors.Add(new LVDVector3(r.ReadSingle(), r.ReadSingle(), r.ReadSingle()));
            }

            r.ReadByte();
            Mat4x4_1 = new float[16];
            for (int i = 0; i < 16; i++)
            {
                Mat4x4_1[i] = r.ReadSingle();
            }

            r.ReadByte();
            Mat4x4_2 = new float[16];
            for (int i = 0; i < 16; i++)
            {
                Mat4x4_2[i] = r.ReadSingle();
            }
        }
示例#23
0
        public void CheckInLobbyAnswerTest()
        {
            var packet = new CheckInLobbyAnswerPacket();
            var bytes  = packet.GetBytes();

            using (var ms = new MemoryStream(bytes))
            {
                using (var bs = new BinaryReaderExt(ms))
                {
                    var result = bs.ReadInt32();
                    Assert.AreEqual(packet.Result, result);

                    var permission = bs.ReadInt32();
                    Assert.AreEqual(packet.Permission, permission);
                }
            }
        }
示例#24
0
        public override void Read(BinaryReaderExt r)
        {
            base.Read(r);

            ID = r.ReadInt32();

            r.Skip(1);
            Name = r.ReadString(0x40);

            X = r.ReadSingle();
            Y = r.ReadSingle();
            Z = r.ReadSingle();
            W = r.ReadSingle();

            Unknown1 = r.ReadInt32();
            Unknown2 = r.ReadInt32();
        }
示例#25
0
            public void Read(BinaryReaderExt reader)
            {
                reader.ReadChars(4);
                dwSize              = reader.ReadUInt32();
                dwFlags             = (DDSD)reader.ReadUInt32();
                dwHeight            = reader.ReadInt32();
                dwWidth             = reader.ReadInt32();
                dwPitchOrLinearSize = reader.ReadInt32();
                dwDepth             = reader.ReadInt32();
                dwMipMapCount       = reader.ReadInt32();
                dwReserved1         = new uint[11];
                for (int i = 0; i < 11; i++)
                {
                    dwReserved1[i] = reader.ReadUInt32();
                }
                ddspf.Read(reader);
                dwCaps      = (DDSCAPS)reader.ReadInt32();
                dwCaps2     = (DDSCAPS2)reader.ReadInt32();
                dwCaps3     = reader.ReadUInt32();
                dwCaps4     = reader.ReadUInt32();
                dwReserved2 = reader.ReadUInt32();

                if (ddspf.dwFlags.HasFlag(DDPF.FOURCC) && ddspf.dwFourCC == 0x30315844)
                {
                    DXT10Header.Read(reader);
                }
            }
示例#26
0
        public override void Read(BinaryReaderExt r)
        {
            base.Read(r);

            r.Skip(1);
            ID = r.ReadInt32();

            Shape = new LVDShape();
            Shape.Read(r);
        }
示例#27
0
        public override void Read(BinaryReaderExt r)
        {
            base.Read(r);

            r.Skip(1);
            ID = r.ReadInt32();

            r.Skip(1);
            r.Skip(1);
            int sectionCount = r.ReadInt32();

            for (int i = 0; i < sectionCount; i++)
            {
                r.Skip(1);
                var shape = new LVDShape();
                shape.Read(r);
                Sections.Add(shape);
            }
        }
示例#28
0
        public override void Read(BinaryReaderExt r)
        {
            base.Read(r);

            r.Skip(1);
            Position.X = r.ReadSingle();
            Position.Y = r.ReadSingle();
            Angle      = r.ReadSingle();
            LineIndex  = r.ReadInt32();
        }
示例#29
0
        public void Read(BinaryReaderExt r)
        {
            r.ReadByte();
            Type = (LVDShapeType)r.ReadInt32();
            X    = r.ReadSingle();
            Y    = r.ReadSingle();
            Z    = r.ReadSingle();
            W    = r.ReadSingle();

            r.ReadByte();

            r.ReadByte();
            int pointCount = r.ReadInt32();

            for (int i = 0; i < pointCount; i++)
            {
                r.Skip(1);
                Points.Add(new LVDVector2(r.ReadSingle(), r.ReadSingle()));
            }
        }
示例#30
0
        private void ReadNdNode(BinaryReaderExt reader)
        {
            var id       = reader.ReadInt32();  // Id
            var x        = reader.ReadSingle(); // Pos
            var y        = reader.ReadSingle(); // PosXYZ
            var z        = reader.ReadSingle(); // PosRGB
            var pathSize = reader.ReadInt32();  // PathSize
            var arcSize  = reader.ReadInt32();  // ArcSize

            //if ( v6 >= 20061102 )
            var eType = 0;

            if (FileVersion >= 20061102)
            {
                eType = reader.ReadInt32(); // eType?
            }
            Nodes.Add(new NdNode {
                Position = new Vector3(x, y, z), Type = eType
            });
        }