Ejemplo n.º 1
0
        public static ParamSfoEntry Read(BinaryReader reader, ParamSfo paramSfo, int itemNumber)
        {
            const int indexOffset      = 0x14;
            const int indexEntryLength = 0x10;

            reader.BaseStream.Seek(indexOffset + indexEntryLength * itemNumber, SeekOrigin.Begin);
            var result = new ParamSfoEntry();

            result.KeyOffset      = reader.ReadUInt16();
            result.ValueFormat    = (EntryFormat)reader.ReadUInt16();
            result.ValueLength    = reader.ReadInt32();
            result.ValueMaxLength = reader.ReadInt32();
            result.ValueOffset    = reader.ReadInt32();

            reader.BaseStream.Seek(paramSfo.KeysOffset + result.KeyOffset, SeekOrigin.Begin);
            byte tmp;
            var  sb = new StringBuilder(32);

            while ((tmp = reader.ReadByte()) != 0)
            {
                sb.Append((char)tmp);
            }
            result.Key = sb.ToString();

            reader.BaseStream.Seek(paramSfo.ValuesOffset + result.ValueOffset, SeekOrigin.Begin);
            result.BinaryValue = reader.ReadBytes(result.ValueMaxLength);

            return(result);
        }