Beispiel #1
0
 public override object Deserialize(System.IO.BinaryReader binaryReader)
 {
     bool hasValue = binaryReader.ReadBoolean ();
     if (!hasValue)
         return null;
     int typeID = binaryReader.ReadByte ();
     switch (typeID) {
     case 1:
         return binaryReader.ReadBoolean ();
     case 2:
         return binaryReader.ReadByte ();
     case 128:
         return binaryReader.ReadSByte ();
     case 3:
         return binaryReader.ReadInt16 ();
     case 129:
         return binaryReader.ReadUInt16 ();
     case 4:
         return binaryReader.ReadInt32 ();
     case 130:
         return binaryReader.ReadUInt32 ();
     case 5:
         return binaryReader.ReadInt64 ();
     case 131:
         return binaryReader.ReadUInt64 ();
     case 9:
         return binaryReader.ReadDouble ();
     case 16:
         return binaryReader.ReadString ();
     case 144:
         return binaryReader.ReadChar ();
     case 24:
         return new DateTime (binaryReader.ReadInt64 ());
     case 32:
         return new Guid (binaryReader.ReadBytes (16));
     case 36:
         return binaryReader.ReadBytes (binaryReader.ReadInt32 ());
     case 37:
         {
             int count = binaryReader.ReadInt32 ();
             string[] r = new string[count];
             for (int n = 0; n != count; n++)
                 r [n] = binaryReader.ReadString ();
             return r;
         }
     case 38:
         {
             int count = binaryReader.ReadInt32 ();
             long[] r = new long[count];
             for (int n = 0; n != count; n++)
                 r [n] = binaryReader.ReadInt64 ();
             return r;
         }
     default:
         throw new Exception (string.Format ("Serialization for type <{0}> is not supported", typeID));
     }
 }
		public void LoadStateBinary(System.IO.BinaryReader reader)
		{
			int length = reader.ReadInt32();
			if (length != savebuff.Length)
				throw new InvalidOperationException("Savestate buffer size mismatch!");

			reader.Read(savebuff, 0, savebuff.Length);

			if (!LibGambatte.gambatte_newstateload(GambatteState, savebuff, savebuff.Length))
				throw new Exception("gambatte_newstateload() returned false");

			// other variables
			IsLagFrame = reader.ReadBoolean();
			LagCount = reader.ReadInt32();
			Frame = reader.ReadInt32();
			frameOverflow = reader.ReadUInt32();
			_cycleCount = reader.ReadUInt64();
		}
Beispiel #3
0
 public override void Deserialize(System.IO.BinaryReader br)
 {
     MaskValue = br.ReadUInt64();
 }
 public override void Deserialize(System.IO.BinaryReader br)
 {
     arraySize = br.ReadInt32();
     array = new ulong[arraySize];
     for (int i = 0; i < arraySize; i++)
     {
         array[i] = br.ReadUInt64();
     }
 }
Beispiel #5
0
        public static UOPFileIndexDef FromBinary(System.IO.BinaryReader bStream)
        {
            UOPFileIndexDef toReturn = new UOPFileIndexDef();

            toReturn.m_OffsetOfDataBlock = bStream.ReadUInt64();
            toReturn.m_SizeofDataHeaders = bStream.ReadUInt32();
            toReturn.m_LenghtCompressed = bStream.ReadUInt32();
            toReturn.m_LenghtUncompressed = bStream.ReadUInt32();
            toReturn.m_Unknown1 = bStream.ReadUInt32();
            toReturn.m_Unknown2 = bStream.ReadUInt32();
            toReturn.m_Unknown3 = bStream.ReadUInt32();
            toReturn.m_CompressedFlag = bStream.ReadUInt16();

            return toReturn;
        }
Beispiel #6
0
        public static UOPFileData FromBinary(System.IO.BinaryReader bStream, uint length)
        {
            UOPFileData toReturn = new UOPFileData();

            toReturn.m_DataFlag = bStream.ReadUInt16();
            toReturn.m_LocalOffsetToData = bStream.ReadUInt16();
            toReturn.m_Unknown = bStream.ReadUInt64();
            toReturn.m_CompressedData = new byte[length];
            toReturn.m_CompressedData = bStream.ReadBytes(toReturn.m_CompressedData.Length);

            return toReturn;
        }
 public void Read(System.IO.BinaryReader reader)
 {
     id0 = reader.ReadUInt64();
     id1 = reader.ReadUInt64();
     type = (DockType)reader.ReadByte();
 }
Beispiel #8
0
        public static UOPIndexBlockHeader FromBinary(System.IO.BinaryReader bStream)
        {
            UOPIndexBlockHeader toReturn = new UOPIndexBlockHeader();

            toReturn.m_Files = bStream.ReadUInt32();
            toReturn.m_OffsetNextIndex = bStream.ReadUInt64();

            for (uint iData = 0; iData < toReturn.m_Files; iData++)
            {
                UOPFileIndexDef uopIndextemp = UOPFileIndexDef.FromBinary(bStream);

                long oldPos = bStream.BaseStream.Position;
                bStream.BaseStream.Seek((long)(uopIndextemp.m_OffsetOfDataBlock), System.IO.SeekOrigin.Begin);

                UOPFileData uopDatatemp = UOPFileData.FromBinary(bStream, uopIndextemp.m_LenghtCompressed);

                toReturn.m_ListData.Add(new UOPPairData(uopIndextemp, uopDatatemp));
                bStream.BaseStream.Seek(oldPos, System.IO.SeekOrigin.Begin);
            }

            return toReturn;
        }
        public static string ReadToNulltermAndDecode( System.IO.Stream s )
        {
            StringBuilder sb = new StringBuilder();
            byte[] buffer = new byte[2];

            int b = s.ReadByte();
            while ( b != 0 && b != -1 ) {
                if ( ( b >= 0 && b <= 0x80 ) || ( b >= 0xA0 && b <= 0xDF ) ) {
                    // is a single byte
                        buffer[0] = (byte)b;
                        sb.Append( Util.ShiftJISEncoding.GetString( buffer, 0, 1 ) );
                } else {
                    if ( b != 0xFF ) {
                        // is two bytes
                        buffer[0] = (byte)b;
                        buffer[1] = (byte)s.ReadByte();
                        sb.Append( Util.ShiftJISEncoding.GetString( buffer ) );
                    } else {
                        // is a FFCC command
                        b = s.ReadByte();
                        switch ( b ) {
                            case 0xA0: // newline
                                sb.AppendLine();
                                break;
                            case 0xA1: // end of textbox
                                sb.AppendLine();
                                sb.AppendLine();
                                break;
                            case 0xA2:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xA3: // wait before printing more
                                sb.Append( "<Wait: " + s.ReadUInt16().ToString( "X4" ) + ">" );
                                break;
                            case 0xA4:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xA5:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xA6:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xA7: // multiple choice
                                sb.Append( "<Choice: " + s.ReadUInt32().ToString( "X8" ) + ">" );
                                break;
                            case 0xA8:
                                sb.Append( "<Player Name: " + s.ReadUInt32().ToString( "X8" ) + ">" );
                                break;
                            case 0xA9:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt32().ToString( "X8" ) + ">" );
                                break;
                            case 0xAA:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt48().ToString( "X12" ) + ">" );
                                break;
                            case 0xAB:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt16().ToString( "X4" ) + ">" );
                                break;
                            case 0xAC:
                                sb.Append( "<Color: Black>" );
                                break;
                            case 0xAD:
                                sb.Append( "<Color: Blue>" );
                                break;
                            case 0xAE:
                                sb.Append( "<Color: Red>" );
                                break;
                            case 0xAF:
                                sb.Append( "<Color: Pink>" );
                                break;
                            case 0xB0:
                                sb.Append( "<Color: Green>" );
                                break;
                            case 0xB1:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" ); // color?
                                break;
                            case 0xB2:
                                sb.Append( "<Color: Yellow>" );
                                break;
                            case 0xB3:
                                sb.Append( "<Color: Default>" );
                                break;
                            case 0xB4:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt16().ToString( "X4" ) + ">" );
                                break;
                            case 0xB5:
                                sb.Append( "<Color: Orange>" );
                                break;
                            case 0xB6:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" ); // color?
                                break;
                            case 0xBA:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt32().ToString( "X8" ) + ">" );
                                break;
                            case 0xBD:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt32().ToString( "X8" ) + ">" );
                                break;
                            case 0xC2:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt64().ToString( "X16" ) + ">" );
                                break;
                            case 0xC4:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xC5:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt16().ToString( "X4" ) + ">" );
                                break;
                            case 0xC6:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt16().ToString( "X4" ) + ">" );
                                break;
                            case 0xC7:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt16().ToString( "X4" ) + ">" );
                                break;
                            case 0xC8:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xC9:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xCA:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt32().ToString( "X8" ) + ">" );
                                break;
                            case 0xCB:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt32().ToString( "X8" ) + ">" );
                                break;
                            case 0xCC:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt32().ToString( "X8" ) + ">" );
                                break;
                            case 0xCD:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt48().ToString( "X12" ) + ">" );
                                break;
                            case 0xCE:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt16().ToString( "X4" ) + ">" );
                                break;
                            case 0xCF:
                                sb.Append( "<Hometown>" );
                                break;
                            case 0xD0: // print numeric variable
                                sb.Append( "<Numeric Variable " + s.ReadUInt24().ToString( "X6" ) + ">" );
                                break;
                            case 0xD1:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt64().ToString( "X16" ) + ">" );
                                break;
                            case 0xD2:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xD3:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt16().ToString( "X4" ) + ">" );
                                break;
                            case 0xD4:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt16().ToString( "X4" ) + ">" );
                                break;
                            case 0xD5:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt32().ToString( "X8" ) + ">" );
                                break;
                            case 0xD6:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt24().ToString( "X6" ) + ">" );
                                break;
                            case 0xD7:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt32().ToString( "X8" ) + ">" );
                                break;
                            case 0xD8:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt32().ToString( "X8" ) + ">" );
                                break;
                            case 0xD9:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt32().ToString( "X8" ) + ">" );
                                break;
                            case 0xDA:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt40().ToString( "X10" ) + ">" );
                                break;
                            case 0xDB:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt32().ToString( "X8" ) + ">" );
                                break;
                            case 0xDC:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt40().ToString( "X10" ) + ">" );
                                break;
                            case 0xDD:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt48().ToString( "X12" ) + ">" );
                                break;
                            case 0xDE:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt56().ToString( "X14" ) + ">" );
                                break;
                            case 0xDF:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt64().ToString( "X16" ) + ">" );
                                break;
                            case 0xE0:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt56().ToString( "X14" ) + ">" );
                                break;
                            case 0xE1:
                                sb.Append( "<" + b.ToString( "X2" ) + ": " + s.ReadUInt16().ToString( "X4" ) + ">" );
                                break;
                            case 0xE2: // start of a singular/plural either/or checking a variable; singular follows
                                sb.Append( "<If Variable " + s.ReadUInt16().ToString( "X4" ) + " == 1 Then: " );
                                break;
                            case 0xE3: // start of a singular/plural either/or checking the single/multiplayer status; singular follows
                                sb.Append( "<If Player Count == 1 Then: " );
                                break;
                            case 0xE4: // start of a male/female either/or checking the current player character; male follows
                                sb.Append( "<If Player is Male Then: " );
                                break;
                            case 0xE5: // start of a male/female either/or checking a different player character; male follows
                                sb.Append( "<If Character is Male Then: " );
                                break;
                            case 0xE6: // middle of an either/or; else case follows
                                sb.Append( " / Else: " );
                                break;
                            case 0xE8:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xE9:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xEB:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xED:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xEE:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xEF:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xF0:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xF2:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xF3:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xF4:
                                sb.Append( "<" + b.ToString( "X2" ) + ">" );
                                break;
                            case 0xE7: // end of an either/or
                                sb.Append( ">" );
                                break;
                            default:
                                string unknownCommandString = "Unknown FFCC text command 0x" + b.ToString( "X2" );
                                sb.Append( "<" + unknownCommandString + ">" );
                                break;
                        }
                    }
                }
                b = s.ReadByte();
            }
            return sb.ToString();
        }
        private bool Load( System.IO.FileStream stream )
        {
            CreationTime = stream.ReadUInt64();
            FileHashArrayOffset = stream.ReadUInt32();

            // This should always be 0x20, so we can use it to detect endianness
            if ( FileHashArrayOffset <= 0xFFFF ) {
                Endian = Util.Endianness.LittleEndian;
            } else {
                Endian = Util.Endianness.BigEndian;
                CreationTime = CreationTime.SwapEndian();
                FileHashArrayOffset = FileHashArrayOffset.SwapEndian();
            }

            // We adjust the offsets to be from file start rather than from position, makes them easier to seek to.
            FileHashArrayOffset += (uint)stream.Position - 4;
            FileHashArraySize = stream.ReadUInt32().FromEndian( Endian );
            VirtualHashArrayOffset = (uint)stream.Position;
            VirtualHashArrayOffset += stream.ReadUInt32().FromEndian( Endian );
            VirtualHashArraySize = stream.ReadUInt32().FromEndian( Endian );
            FileArrayOffset = (uint)stream.Position;
            FileArrayOffset += stream.ReadUInt32().FromEndian( Endian );
            FileArraySize = stream.ReadUInt32().FromEndian( Endian );
            VirtualPackArrayOffset = (uint)stream.Position;
            VirtualPackArrayOffset += stream.ReadUInt32().FromEndian( Endian );
            VirtualPackArraySize = stream.ReadUInt32().FromEndian( Endian );

            // Hashes
            stream.Position = FileHashArrayOffset;
            FileHashArray = new List<TOFHDBhash>( (int)FileHashArraySize );
            for ( UInt32 i = 0; i < FileHashArraySize; i++ ) {
                FileHashArray.Add( new TOFHDBhash() {
                    Key = stream.ReadUInt32().FromEndian( Endian ),
                    Value = stream.ReadUInt32().FromEndian( Endian ),
                } );
            }

            // Files
            stream.Position = FileArrayOffset;
            FileArray = new List<TOFHDBfile>( (int)FileArraySize );
            for ( UInt32 i = 0; i < FileArraySize; i++ ) {
                FileArray.Add( new TOFHDBfile() {
                    Filesize = stream.ReadUInt64().FromEndian( Endian ),
                    CompressedSize = stream.ReadUInt64().FromEndian( Endian ),
                    Offset = stream.ReadUInt64().FromEndian( Endian ),
                    Hash = stream.ReadUInt32().FromEndian( Endian ),
                    Extension = stream.ReadAscii( 0x0A ).TrimNull(),
                    Unknown = stream.ReadUInt16().FromEndian( Endian ),
                } );
            }

            return true;
        }
Beispiel #11
0
 private SectionHeader ReadElf64SectionHeader(System.IO.BinaryReader r)
 {
     SectionHeader sh = new SectionHeader();
     sh.sh_name = r.ReadInt32();
     sh.sh_type = r.ReadUInt32();
     sh.sh_flags = r.ReadUInt64();
     sh.sh_addr = r.ReadUInt64();
     sh.sh_offset = r.ReadInt64();
     sh.sh_size = r.ReadInt64();
     sh.sh_link = r.ReadInt32();
     sh.sh_info = r.ReadInt32();
     sh.sh_addralign = r.ReadInt64();
     sh.sh_entsize = r.ReadInt64();
     return sh;
 }
Beispiel #12
0
 private void ReadElf64FileHeader(System.IO.BinaryReader r)
 {
     e_type = r.ReadUInt16();
     e_machine = r.ReadUInt16();
     r.ReadUInt32();     // e_version
     e_entry = r.ReadUInt64();
     e_phoff = r.ReadInt64();
     e_shoff = r.ReadInt64();
     e_flags = r.ReadUInt32();
     e_ehsize = r.ReadInt16();
     e_phentsize = r.ReadInt16();
     e_phnum = r.ReadInt16();
     e_shentsize = r.ReadInt16();
     e_shnum = r.ReadInt16();
     e_shstrndx = r.ReadInt16();
 }
Beispiel #13
0
 public static byte[] GetBits(int width, int length, int height, System.IO.BinaryReader rdr)
 {
     int xoffset = 0;
     int yoffset = 0;
     int rowLength = width * 4;
     byte[] b = new byte[length];
     ulong alpha;
     ushort c0, c1;
     uint[] colors = new uint[4];
     uint lu;
     for (int y = 0; y < height / 4; y++) {
         yoffset = y * 4;
         for (int x = 0; x < width / 4; x++) {
             xoffset = x * 4;
             alpha = rdr.ReadUInt64 ();
             c0 = rdr.ReadUInt16 ();
             c1 = rdr.ReadUInt16 ();
             ColorsFromPacked (colors, c0, c1, true);
             lu = rdr.ReadUInt32 ();
             for (int i = 0; i < 16; i++) {
                 int idx = GetBits (lu, 30 - i * 2, 2, 0);
                 uint ci = colors[idx];
                 int ii = 15 - i;
                 byte a = (byte)(GetBits64 (alpha, ii * 4, 4, 0));
                 a += (byte)(a << 4);
                 int yy = yoffset + (ii / 4);
                 int xx = xoffset + (ii % 4);
                 int offset = yy * rowLength + xx * 4;
                 SetColorFromPacked (b, offset, a, ci);
             }
         }
     }
     return b;
 }
 /// <summary>
 /// Reads a 64-bit unsigned integer
 /// </summary>
 public static void Read( System.IO.BinaryReader reader, out ulong val )
 {
     val = reader.ReadUInt64( );
 }
Beispiel #15
0
		public void LoadStateBinary(System.IO.BinaryReader reader)
		{
			int length = reader.ReadInt32();
			byte[] data = reader.ReadBytes(length);

			//LoadCoreBinary(data);
			NewLoadCoreBinary(data);

			// other variables
			IsLagFrame = reader.ReadBoolean();
			LagCount = reader.ReadInt32();
			Frame = reader.ReadInt32();
			frameOverflow = reader.ReadUInt32();
			_cycleCount = reader.ReadUInt64();
		}