protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID _Serial = reader.ReadUInt32(); _MaxStamina = reader.ReadInt16(); _Stamina = reader.ReadInt16(); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); // Size reader.ReadInt16(); // Command _MapID = (MapNames) reader.ReadByte(); }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID _Serial = reader.ReadUInt32(); _MaxHitpoints = reader.ReadInt16(); _Hitpoints = reader.ReadInt16(); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); // Size reader.ReadInt16(); // Command _WTF = reader.ReadByte(); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID _Serial = reader.ReadUInt32(); _AnimationType = (AnimationType) reader.ReadInt16(); _Action = reader.ReadInt16(); _Delay = reader.ReadByte(); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); // Size reader.ReadInt16(); // Command _GumpID = reader.ReadUInt32(); _ButtonID = reader.ReadUInt32(); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); reader.ReadInt16(); _Serial = reader.ReadUInt32(); reader.ReadInt16(); _Status = reader.ReadInt16(); _Flag = reader.ReadByte(); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID _Flags = reader.ReadByte(); _SoundID = reader.ReadInt16(); _Volume = reader.ReadInt16(); _X = reader.ReadInt16(); _Y = reader.ReadInt16(); _Z = reader.ReadInt16(); }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID reader.ReadInt16(); // Size reader.ReadInt16(); // Command _Serial = reader.ReadUInt32(); _FacingDirection = (Direction)reader.ReadByte(); _MovingDirection = (Direction)reader.ReadByte(); _BoatCommand = (BoatCommand)reader.ReadByte(); }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID _Serial = reader.ReadUInt32(); _ObjectID = reader.ReadInt16(); reader.ReadByte(); //0x00 _Layer = (ItemLayer)reader.ReadByte(); _ParentSerial = reader.ReadUInt32(); _Hue = reader.ReadInt16(); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID _Serial = reader.ReadUInt32(); _Action = reader.ReadInt16(); _FrameCount = reader.ReadInt16(); _RepeatTimes = reader.ReadInt16(); _Forward = reader.ReadByte(); _Repeat = reader.ReadByte(); _Delay = reader.ReadByte(); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID _Serial = reader.ReadUInt32(); _GumpID = reader.ReadInt16(); int type = reader.ReadInt16(); if ( type == 0 ) _ContainerType = ContainerType.Vendor; else _ContainerType = ContainerType.ContainerOrSpellbook; }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); _Serial = reader.ReadUInt32(); _Graphics = reader.ReadInt16(); _Type = (MessageType) reader.ReadByte(); _Hue = reader.ReadInt16(); _Font = reader.ReadInt16(); _Language = reader.ReadAsciiString( 4 ); _EntityName = reader.ReadAsciiString( 30 ); _Message = reader.ReadUnicodeString( ( Data.Length - 44 ) / 2 ); }
public ContainerItem( UltimaPacket parent, BigEndianReader reader ) { _Parent = parent; _Serial = reader.ReadUInt32(); _ItemID = reader.ReadInt16(); _ItemIDOffset = reader.ReadByte(); _Amount = reader.ReadInt16(); _X = reader.ReadInt16(); _Y = reader.ReadInt16(); _GridLocation = reader.ReadByte(); _ParentSerial = reader.ReadUInt32(); _Hue = reader.ReadInt16(); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID int length = reader.ReadInt16() - 44; _Serial = reader.ReadUInt32(); _Graphics = reader.ReadInt16(); _Type = (MessageType) reader.ReadByte(); _Hue = reader.ReadInt16(); _Font = reader.ReadInt16(); _EntityName = reader.ReadAsciiString( 30 ); _Message = reader.ReadAsciiString( length ); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); // Size int count = reader.ReadInt16(); _Items = new List<ContainerItem>(); for ( int i = 0; i < count; i++ ) { _Items.Add( new ContainerItem( this, reader ) ); _Serial = _Items[ 0 ].ParentSerial; } }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID _Serial = reader.ReadUInt32(); _Damage = reader.ReadInt16(); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); // Size _Serial = reader.ReadUInt32(); _MobileName = reader.ReadAsciiString( 30 ); }
/// <summary> /// Creates <see cref="TtfFileInfo"/> from <see cref="System.IO.Stream"/>. /// </summary> /// <param name="stream">Stream to create the structure. Stream will be disposed after use.</param> /// <returns><see cref="TtfFileInfo"/> if successful, otherwise null.</returns> public static TtfFileInfo FromStream(Stream stream) { try { using (var reader = new BigEndianReader(stream)) { var ttfFile = new TtfFileInfo() { Version = reader.ReadInt32() }; if (ttfFile.Version != 0x74727565 && ttfFile.Version != 0x00010000) return null; ttfFile.TableCount = reader.ReadInt16(); reader.BaseStream.Seek(6, SeekOrigin.Current); for (var tableIndex = 0; tableIndex < ttfFile.TableCount; tableIndex++) { var tag = reader.ReadInt32(); reader.BaseStream.Seek(4, SeekOrigin.Current); var offset = reader.ReadInt32(); var length = reader.ReadInt32(); if (tag != 0x6E616D65) continue; reader.BaseStream.Seek(offset, SeekOrigin.Begin); var table = reader.ReadBytes(length); var count = GetInt16(table, 2); var stringOffset = GetInt16(table, 4); for (var record = 0; record < count; record++) { var nameidOffset = record*12 + 6; var platformId = GetInt16(table, nameidOffset); var nameidValue = GetInt16(table, nameidOffset + 6); if (nameidValue != 4 || platformId != 1) continue; var nameLength = GetInt16(table, nameidOffset + 8); var nameOffset = stringOffset + GetInt16(table, nameidOffset + 10); if (nameOffset < 0 || nameOffset + nameLength >= table.Length) continue; ttfFile.FontName = Encoding.UTF8.GetString(table, nameOffset, nameLength); return ttfFile; } } } } catch { return null; } return null; }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); // Size _Serial = reader.ReadUInt32(); int itemCount = reader.ReadByte(); _Items = new List<ShopListItem>(); for ( int i = 0; i < itemCount; i++ ) _Items.Add( new ShopListItem( reader ) ); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); // Size _Items = new List<QueryPropertiesItem>(); uint serial = 0; int maxCount = ( Data.Length - 3 ) / 4; int count = 0; while ( count++ < maxCount && ( serial = reader.ReadUInt32() ) != 0 ) _Items.Add( new QueryPropertiesItem( this, serial ) ); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); // Size _Serial = reader.ReadUInt32(); _GumpID = reader.ReadInt32(); _X = reader.ReadInt32(); _Y = reader.ReadInt32(); string layout = reader.ReadAsciiString(); int textLength = reader.ReadInt16(); _Text = new List<string>( textLength ); for ( int i = 0; i < textLength; i++ ) { _Text.Add( reader.ReadAsciiString() ); } Parse( layout ); }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID reader.ReadInt16(); // Size _Items = new List <QueryPropertiesItem>(); uint serial = 0; int maxCount = (Data.Length - 3) / 4; int count = 0; while (count++ < maxCount && (serial = reader.ReadUInt32()) != 0) { _Items.Add(new QueryPropertiesItem(this, serial)); } }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); // Size _Serial = reader.ReadUInt32(); _GumpID = reader.ReadInt32(); _X = reader.ReadInt32(); _Y = reader.ReadInt32(); int compressedEntriesLength = reader.ReadInt32() - 4; int decompressedEntriesLength = reader.ReadInt32(); byte[] compressedEntries = reader.ReadBytes( compressedEntriesLength ); byte[] decompressedEntries = new byte[ decompressedEntriesLength ]; Ultima.Package.Zlib.Decompress( decompressedEntries, ref decompressedEntriesLength, compressedEntries, compressedEntriesLength ); string entries = Encoding.ASCII.GetString( decompressedEntries ); int lineCount = reader.ReadInt32(); int compressedStringsLength = reader.ReadInt32() - 4; int decompressedStringsLength = reader.ReadInt32(); byte[] compressedStrings = reader.ReadBytes( compressedStringsLength ); byte[] decompressedStrings = new byte[ decompressedStringsLength ]; Ultima.Package.Zlib.Decompress( decompressedStrings, ref decompressedStringsLength, compressedStrings, compressedStringsLength ); string strings = Encoding.ASCII.GetString( decompressedStrings ); _Text = new List<string>(); int start = 0; for ( int i = 0; i < strings.Length; i++ ) { if ( strings[ i ] == 0 ) { if ( i - start > 0 ) _Text.Add( strings.Substring( start, i - start ) ); else _Text.Add( String.Empty ); start = i + 1; } } Parse( entries ); }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID reader.ReadInt16(); // Size _Serial = reader.ReadUInt32(); int itemCount = reader.ReadByte(); _Items = new List <ShopListItem>(); for (int i = 0; i < itemCount; i++) { _Items.Add(new ShopListItem(reader)); } }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID reader.ReadInt16(); // Size place holder _DataType = (WorldObjectType)reader.ReadByte(); _Serial = reader.ReadUInt32(); _ObjectID = reader.ReadInt16(); _ObjectIDOffset = reader.ReadByte(); _Amount = reader.ReadInt16(); reader.ReadInt16(); // Amount again? _X = reader.ReadInt16(); _Y = reader.ReadInt16(); _Z = reader.ReadSByte(); _LightLevel = reader.ReadByte(); _Hue = reader.ReadInt16(); byte flags = reader.ReadByte(); if ((flags & 0x20) > 0) { _HasProperties = true; } else { _HasProperties = false; } if ((flags & 0x80) > 0) { _IsVisible = true; } else { _IsVisible = false; } _Access = (WorldObjectAccess)reader.ReadInt16(); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); // Size _Serial = reader.ReadUInt32(); _GumpID = reader.ReadInt32(); _ButtonID = reader.ReadInt32(); int switchCount = reader.ReadInt32(); _Switches = new List<int>( switchCount ); for ( int i = 0; i < switchCount; i++ ) _Switches.Add( reader.ReadInt32() ); int entryCount = reader.ReadInt32(); _TextEntries = new List<GumpResponseTextEntry>( entryCount ); for ( int i = 0; i < entryCount; i++ ) _TextEntries.Add( new GumpResponseTextEntry( reader ) ); }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID _Unk1 = reader.ReadUInt32(); _Unk2 = reader.ReadUInt32(); _Unk3 = reader.ReadByte(); _CharName = reader.ReadAsciiString(30); _Unk4 = reader.ReadInt16(); _Flags = reader.ReadUInt32(); _Unk5 = reader.ReadUInt32(); _LoginCount = reader.ReadUInt32(); _Profession = reader.ReadByte(); reader.ReadBytes(15); _GenderAndRace = reader.ReadByte(); _Strength = reader.ReadByte(); _Dexterity = reader.ReadByte(); _Intelligence = reader.ReadByte(); _Skill1 = reader.ReadByte(); _Skill1Amount = reader.ReadByte(); _Skill2 = reader.ReadByte(); _Skill2Amount = reader.ReadByte(); _Skill3 = reader.ReadByte(); _Skill3Amount = reader.ReadByte(); _Skill4 = reader.ReadByte(); _Skill4Amount = reader.ReadByte(); _SkinHue = reader.ReadInt16(); _HairStyle = reader.ReadInt16(); _HairHue = reader.ReadInt16(); _BeardStyle = reader.ReadInt16(); _BeardHue = reader.ReadInt16(); _ShardIndex = reader.ReadByte(); _StartingCity = reader.ReadByte(); _CharSlot = reader.ReadUInt32(); _ClientIP = reader.ReadUInt32(); _ShirtHue = reader.ReadInt16(); _PantsHue = reader.ReadInt16(); }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID Type = (GraphicalEffectType)reader.ReadByte(); Source = reader.ReadUInt32(); Serial = reader.ReadUInt32(); ObjectID = reader.ReadInt16(); SourceX = reader.ReadInt16(); SourceY = reader.ReadInt16(); SourceZ = reader.ReadSByte(); TargetX = reader.ReadInt16(); TargetY = reader.ReadInt16(); TargetZ = reader.ReadSByte(); Speed = reader.ReadByte(); Duration = reader.ReadByte(); reader.ReadInt16(); reader.ReadInt16(); FixedDirection = reader.ReadBoolean(); Explode = reader.ReadBoolean(); }
private TrueTypeFontTable ReadFontHeader(uint length, TrueTypeTableEntryList list, BigEndianReader reader) { FontHeader fh = new FontHeader(reader.Position); fh.TableVersion = reader.ReadFixedVersion(); fh.FontRevision = reader.ReadFixedVersion(); fh.ChecksumAdjustment = reader.ReadUInt32(); fh.MagicNumber = reader.ReadUInt32(); fh.FontFlags = (FontHeaderFlags)reader.ReadUInt16(); fh.UnitsPerEm = reader.ReadUInt16(); fh.Created = reader.ReadDateTime(); fh.Modified = reader.ReadDateTime(); fh.XMin = reader.ReadInt16(); fh.YMin = reader.ReadInt16(); fh.XMax = reader.ReadInt16(); fh.YMax = reader.ReadInt16(); fh.MacStyle = (FontStyleFlags)reader.ReadUInt16(); fh.SmallestScreenFont = reader.ReadUInt16(); fh.DirectionHints = (FontDirectionFlags)reader.ReadInt16(); fh.IndexToLocationFormat = (FontIndexLocationFormat)reader.ReadInt16(); fh.GlyphDataFormat = (GlyphDataFormat)reader.ReadInt16(); return(fh); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); // Size _Serial = reader.ReadUInt32(); _MobileName = reader.ReadAsciiString( 30 ); _HitPoints = reader.ReadInt16(); _MaxHitPoints = reader.ReadInt16(); _AllowNameChange = reader.ReadByte() == 1 ? true : false; byte features = reader.ReadByte(); _IsFemale = reader.ReadByte() == 1 ? true : false; _Strength = reader.ReadInt16(); _Dexterity = reader.ReadInt16(); _Intelligence = reader.ReadInt16(); _Stamina = reader.ReadInt16(); _MaxStamina = reader.ReadInt16(); _Mana = reader.ReadInt16(); _MaxMana = reader.ReadInt16(); _Gold = reader.ReadInt32(); _ArmorRating = reader.ReadInt16(); _Weight = reader.ReadInt16(); if ( ( features & 0x5 ) == 0x5 ) { _MaxWeight = reader.ReadInt16(); _Race = (MobileRace) reader.ReadByte(); } if ( ( features & 0x2 ) == 0x2 ) { _StatCap = reader.ReadInt16(); } if ( ( features & 0x3 ) == 0x3 ) { _Followers = reader.ReadByte(); _MaxFollowers = reader.ReadByte(); } if ( ( features & 0x4 ) == 0x4 ) { _FireResistance = reader.ReadInt16(); _ColdResistance = reader.ReadInt16(); _PoisonResistance = reader.ReadInt16(); _EnergyResistance = reader.ReadInt16(); _Luck = reader.ReadInt16(); _MinWeaponDamage = reader.ReadInt16(); _MaxWeaponDamage = reader.ReadInt16(); _TithingPoints = reader.ReadInt32(); } if ( ( features & 0x6 ) == 0x6 ) { _HitChanceIncrease = reader.ReadInt16(); _SwingSpeedIncrease = reader.ReadInt16(); _DamageChanceIncrease = reader.ReadInt16(); _LowerReagentCost = reader.ReadInt16(); _HitPointRegeneration = reader.ReadInt16(); _StaminaRegeneration = reader.ReadInt16(); _ManaRegeneration = reader.ReadInt16(); _ReflectPhysicalDamage = reader.ReadInt16(); _EnhancePotions = reader.ReadInt16(); _DefenseChanceIncrease = reader.ReadInt16(); _SpellDamageIncrease = reader.ReadInt16(); _FasterCastRecovery = reader.ReadInt16(); _FasterCasting = reader.ReadInt16(); _LowerManaCost = reader.ReadInt16(); _StrengthIncrease = reader.ReadInt16(); _DexterityIncrease = reader.ReadInt16(); _IntelligenceIncrease = reader.ReadInt16(); _HitPointsIncrease = reader.ReadInt16(); _StaminaIncrease = reader.ReadInt16(); _ManaIncrease = reader.ReadInt16(); _MaximumHitPointsIncrease = reader.ReadInt16(); _MaximumStaminaIncrease = reader.ReadInt16(); _MaximumManaIncrease = reader.ReadInt16(); } }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID Type = (HuedEffectType)reader.ReadByte(); Source = reader.ReadUInt32(); Serial = reader.ReadUInt32(); ObjectID = reader.ReadInt16(); SourceX = reader.ReadInt16(); SourceY = reader.ReadInt16(); SourceZ = reader.ReadSByte(); TargetX = reader.ReadInt16(); TargetY = reader.ReadInt16(); TargetZ = reader.ReadSByte(); Speed = reader.ReadByte(); Duration = reader.ReadByte(); reader.ReadInt16(); reader.ReadInt16(); FixedDirection = reader.ReadBoolean(); Explode = reader.ReadBoolean(); Hue = reader.ReadInt16(); RenderMode = reader.ReadInt16(); Effect = reader.ReadInt16(); ExplodeEffect = reader.ReadInt16(); ExplodeSound = reader.ReadInt16(); reader.ReadUInt32(); Layer = (EffectLayer)reader.ReadByte(); }
public void Transform(BigEndianReader reader) { //the glyf table is split into several substreams, to group like data together. //The transformed table consists of a number of fields specifying the size of each of the substreams, //followed by the substreams in sequence. //During the decoding process the reverse transformation takes place, //where data from various separate substreams are recombined to create a complete glyph record //for each entry of the original glyf table. //Transformed glyf Table //Data-Type Semantic Description and value type(if applicable) //Fixed version = 0x00000000 //UInt16 numGlyphs Number of glyphs //UInt16 indexFormatOffset format for loca table, // should be consistent with indexToLocFormat of // the original head table(see[OFF] specification) //UInt32 nContourStreamSize Size of nContour stream in bytes //UInt32 nPointsStreamSize Size of nPoints stream in bytes //UInt32 flagStreamSize Size of flag stream in bytes //UInt32 glyphStreamSize Size of glyph stream in bytes(a stream of variable-length encoded values, see description below) //UInt32 compositeStreamSize Size of composite stream in bytes(a stream of variable-length encoded values, see description below) //UInt32 bboxStreamSize Size of bbox data in bytes representing combined length of bboxBitmap(a packed bit array) and bboxStream(a stream of Int16 values) //UInt32 instructionStreamSize Size of instruction stream(a stream of UInt8 values) //Int16 nContourStream[] Stream of Int16 values representing number of contours for each glyph record //255UInt16 nPointsStream[] Stream of values representing number of outline points for each contour in glyph records //UInt8 flagStream[] Stream of UInt8 values representing flag values for each outline point. //Vary glyphStream[] Stream of bytes representing point coordinate values using variable length encoding format(defined in subclause 5.2) //Vary compositeStream[] Stream of bytes representing component flag values and associated composite glyph data //UInt8 bboxBitmap[] Bitmap(a numGlyphs-long bit array) indicating explicit bounding boxes //Int16 bboxStream[] Stream of Int16 values representing glyph bounding box data //UInt8 instructionStream[] Stream of UInt8 values representing a set of instructions for each corresponding glyph uint version = reader.ReadUInt32(); ushort numGlyphs = reader.ReadUInt16(); ushort indexFormatOffset = reader.ReadUInt16(); uint nContourStreamSize = reader.ReadUInt32(); //in bytes uint nPointsStreamSize = reader.ReadUInt32(); //in bytes uint flagStreamSize = reader.ReadUInt32(); //in bytes uint glyphStreamSize = reader.ReadUInt32(); //in bytes uint compositeStreamSize = reader.ReadUInt32(); //in bytes uint bboxStreamSize = reader.ReadUInt32(); //in bytes uint instructionStreamSize = reader.ReadUInt32(); //in bytes long expected_nCountStartAt = reader.BaseStream.Position; long expected_nPointStartAt = expected_nCountStartAt + nContourStreamSize; long expected_FlagStreamStartAt = expected_nPointStartAt + nPointsStreamSize; long expected_GlyphStreamStartAt = expected_FlagStreamStartAt + flagStreamSize; long expected_CompositeStreamStartAt = expected_GlyphStreamStartAt + glyphStreamSize; long expected_BboxStreamStartAt = expected_CompositeStreamStartAt + compositeStreamSize; long expected_InstructionStreamStartAt = expected_BboxStreamStartAt + bboxStreamSize; long expected_EndAt = expected_InstructionStreamStartAt + instructionStreamSize; Glyph[] glyphs = new Glyph[numGlyphs]; TempGlyph[] allGlyphs = new TempGlyph[numGlyphs]; List <ushort> compositeGlyphs = new List <ushort>(); int contourCount = 0; for (ushort i = 0; i < numGlyphs; ++i) { short numContour = reader.ReadInt16(); allGlyphs[i] = new TempGlyph(i, numContour); if (numContour > 0) { contourCount += numContour; //>0 => simple glyph //-1 = compound //0 = empty glyph } else if (numContour < 0) { //composite glyph, resolve later compositeGlyphs.Add(i); } else { } } ushort[] pntPerContours = new ushort[contourCount]; for (int i = 0; i < contourCount; ++i) { // Each of these is the number of points of that contour. pntPerContours[i] = reader.Read255UInt16(); } byte[] flagStream = reader.Read((int)flagStreamSize); //TODO: Read more from line 296 in OpenFoint.Woff2Reader using (var composites = new MemoryStream()) { reader.Position = expected_CompositeStreamStartAt; var compositeData = reader.Read((int)compositeStreamSize); composites.Write(compositeData, 0, (int)compositeStreamSize); int compositeGlyphCount = compositeGlyphs.Count; using (var compositeReader = new BigEndianReader(composites)) { for (int i = 0; i < compositeGlyphCount; i++) { ushort compositeGlyphIndex = compositeGlyphs[i]; bool hasInstructions = CompositeHasInstructions(compositeReader, compositeGlyphIndex); if (hasInstructions) { break; } allGlyphs[compositeGlyphIndex].compositeHasInstructions = hasInstructions; } } } }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); // Size reader.ReadInt16(); _Serial = reader.ReadUInt32(); reader.ReadInt16(); _Hash = reader.ReadUInt32(); _Properties = new List<QueryPropertiesProperty>(); int cliloc; while ( ( cliloc = reader.ReadInt32() ) != 0 ) _Properties.Add( new QueryPropertiesProperty( cliloc, reader ) ); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID _Serial = reader.ReadUInt32(); _Body = reader.ReadInt16(); reader.ReadByte(); _Hue = reader.ReadInt16(); byte flags = reader.ReadByte(); if ( ( flags & 0x1 ) > 0 ) _IsFrozen = true; if ( ( flags & 0x2 ) > 0 ) _IsFemale = true; if ( ( flags & 0x4 ) > 0 ) _IsFlying = true; if ( ( flags & 0x8 ) > 0 ) _HasYellowHealthBar = true; if ( ( flags & 0x10 ) > 0 ) _IsIgnoringMobiles = true; if ( ( flags & 0x40 ) > 0 ) _IsInWarMode = true; if ( ( flags & 0x80 ) > 0 ) _IsHidden = true; _X = reader.ReadInt16(); _Y = reader.ReadInt16(); reader.ReadInt16(); _Direction = (Direction) reader.ReadByte(); _Z = reader.ReadSByte(); }
public MobileItem( uint serial, BigEndianReader reader ) { _Serial = serial; _ItemID = reader.ReadInt16(); _Layer = (ItemLayer) reader.ReadByte(); if ( ( _ItemID & 0x8000 ) != 0 ) _Hue = reader.ReadInt16(); else _Hue = 0; }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID _MusicID = reader.ReadInt16(); }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID reader.ReadInt16(); // Size _Serial = reader.ReadUInt32(); _Body = reader.ReadInt16(); _X = reader.ReadInt16(); _Y = reader.ReadInt16(); _Z = reader.ReadSByte(); _Direction = (Direction)reader.ReadByte(); _Hue = reader.ReadUInt16(); byte flags = reader.ReadByte(); if ((flags & 0x1) > 0) { _IsFrozen = true; } if ((flags & 0x2) > 0) { _IsFemale = true; } if ((flags & 0x4) > 0) { _IsFlying = true; } if ((flags & 0x8) > 0) { _HasYellowHealthBar = true; } if ((flags & 0x10) > 0) { _IsIgnoringMobiles = true; } if ((flags & 0x40) > 0) { _IsInWarMode = true; } if ((flags & 0x80) > 0) { _IsHidden = true; } _Notoriety = (Notoriety)reader.ReadByte(); // Items _Items = new List <MobileItem>(); uint serial = 0; while ((serial = reader.ReadUInt32()) != 0) { _Items.Add(new MobileItem(serial, reader)); } }
/// <summary> /// read float, 2.14 format /// </summary> /// <param name="reader"></param> /// <returns></returns> public static float ReadF2Dot14(this BigEndianReader reader) { return(((float)reader.ReadInt16()) / (1 << 14)); /* Format 2.14 */ }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID reader.ReadInt16(); // Size Serial = reader.ReadUInt32(); GumpID = reader.ReadInt32(); X = reader.ReadInt32(); Y = reader.ReadInt32(); compressedEntriesLength = reader.ReadInt32() - 4; decompressedEntriesLength = reader.ReadInt32(); compressedEntries = reader.ReadBytes(compressedEntriesLength); decompressedEntries = new byte[decompressedEntriesLength]; if (SystemInfo.IsX64) { Ultima.Package.Zlib64.Decompress(decompressedEntries, ref decompressedEntriesLength, compressedEntries, compressedEntriesLength); } else { Ultima.Package.Zlib32.Decompress(decompressedEntries, ref decompressedEntriesLength, compressedEntries, compressedEntriesLength); } entries = Encoding.ASCII.GetString(decompressedEntries); lineCount = reader.ReadInt32(); compressedStringsLength = reader.ReadInt32() - 4; decompressedStringsLength = reader.ReadInt32(); if (compressedStringsLength >= 0) { compressedStrings = reader.ReadBytes(compressedStringsLength); decompressedStrings = new byte[decompressedStringsLength]; if (SystemInfo.IsX64) { Ultima.Package.Zlib64.Decompress(decompressedStrings, ref decompressedStringsLength, compressedStrings, compressedStringsLength); } else { Ultima.Package.Zlib32.Decompress(decompressedStrings, ref decompressedStringsLength, compressedStrings, compressedStringsLength); } strings = Encoding.ASCII.GetString(decompressedStrings); Text = new List <string>(); start = 0; for (int i = 0; i < strings.Length; i++) { if (strings[i] == 0) { if (i - start > 0) { Text.Add(strings.Substring(start, i - start)); } else { Text.Add(String.Empty); } start = i + 1; } } } Parse(entries); }
private TrueTypeFontTable ReadOS2Table(uint length, TrueTypeTableEntryList list, BigEndianReader reader) { OS2Table os2 = new OS2Table(reader.Position); os2.Version = (OS2TableVersion)reader.ReadUInt16(); os2.XAverageCharWidth = reader.ReadInt16(); os2.WeightClass = (WeightClass)reader.ReadUInt16(); os2.WidthClass = (WidthClass)reader.ReadUInt16(); os2.FSType = (FontRestrictions)reader.ReadUInt16(); os2.SubscriptXSize = reader.ReadInt16(); os2.SubscriptYSize = reader.ReadInt16(); os2.SubscriptXOffset = reader.ReadInt16(); os2.SubscriptYOffset = reader.ReadInt16(); os2.SuperScriptXSize = reader.ReadInt16(); os2.SuperScriptYSize = reader.ReadInt16(); os2.SuperscriptXOffset = reader.ReadInt16(); os2.SuperscriptYOffset = reader.ReadInt16(); os2.StrikeoutSize = reader.ReadInt16(); os2.StrikeoutPosition = reader.ReadInt16(); byte hi = reader.ReadByte(); byte lo = reader.ReadByte(); os2.FamilyClass = new IBMFontClass(hi, lo); byte[] data = reader.Read(10); os2.Panose = new PanoseArray(data); uint zero = reader.ReadUInt32(); uint one = reader.ReadUInt32(); uint two = reader.ReadUInt32(); uint three = reader.ReadUInt32(); os2.UnicodeRanges = new UnicodeRanges(zero, one, two, three); os2.VendorID = reader.ReadString(4); os2.Selection = (FontSelection)reader.ReadUInt16(); os2.FirstCharIndex = reader.ReadUInt16(); os2.LastCharIndex = reader.ReadUInt16(); os2.TypoAscender = reader.ReadInt16(); os2.TypoDescender = reader.ReadInt16(); os2.TypoLineGap = reader.ReadInt16(); os2.WinAscent = reader.ReadUInt16(); os2.WinDescent = reader.ReadUInt16(); if (os2.Version >= OS2TableVersion.TrueType166) { zero = reader.ReadUInt32(); one = reader.ReadUInt32(); os2.CodePageRanges = new CodePageRange(zero, one); if (os2.Version >= OS2TableVersion.OpenType12) { os2.Height = reader.ReadInt16(); os2.CapHeight = reader.ReadInt16(); os2.DefaultChar = reader.ReadUInt16(); os2.BreakChar = reader.ReadUInt16(); os2.MaxContext = reader.ReadUInt16(); } } return(os2); }
/// <summary> /// Creates <see cref="TtfFileInfo"/> from <see cref="System.IO.Stream"/>. /// </summary> /// <param name="stream">Stream to create the structure. Stream will be disposed after use.</param> /// <returns><see cref="TtfFileInfo"/> if successful, otherwise null.</returns> public static TtfFileInfo FromStream(Stream stream) { try { using (var reader = new BigEndianReader(stream)) { var ttfFile = new TtfFileInfo() { Version = reader.ReadInt32() }; if (ttfFile.Version != 0x74727565 && ttfFile.Version != 0x00010000) { return(null); } ttfFile.TableCount = reader.ReadInt16(); reader.BaseStream.Seek(6, SeekOrigin.Current); for (var tableIndex = 0; tableIndex < ttfFile.TableCount; tableIndex++) { var tag = reader.ReadInt32(); reader.BaseStream.Seek(4, SeekOrigin.Current); var offset = reader.ReadInt32(); var length = reader.ReadInt32(); if (tag != 0x6E616D65) { continue; } reader.BaseStream.Seek(offset, SeekOrigin.Begin); var table = reader.ReadBytes(length); var count = GetInt16(table, 2); var stringOffset = GetInt16(table, 4); for (var record = 0; record < count; record++) { var nameidOffset = record * 12 + 6; var platformId = GetInt16(table, nameidOffset); var nameidValue = GetInt16(table, nameidOffset + 6); if (nameidValue != 4 || platformId != 1) { continue; } var nameLength = GetInt16(table, nameidOffset + 8); var nameOffset = stringOffset + GetInt16(table, nameidOffset + 10); if (nameOffset < 0 || nameOffset + nameLength >= table.Length) { continue; } ttfFile.FontName = Encoding.UTF8.GetString(table, nameOffset, nameLength); return(ttfFile); } } } } catch { return(null); } return(null); }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID _Serial = reader.ReadUInt32(); _Damage = reader.ReadInt16(); }
public GumpResponseTextEntry(BigEndianReader reader) { EntryID = reader.ReadInt16(); Text = reader.ReadUnicodeString(); }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID reader.ReadInt16(); // Size _Serial = reader.ReadUInt32(); _MobileName = reader.ReadAsciiString(30); _HitPoints = reader.ReadInt16(); _MaxHitPoints = reader.ReadInt16(); _AllowNameChange = reader.ReadByte() == 1 ? true : false; byte features = reader.ReadByte(); _IsFemale = reader.ReadByte() == 1 ? true : false; _Strength = reader.ReadInt16(); _Dexterity = reader.ReadInt16(); _Intelligence = reader.ReadInt16(); _Stamina = reader.ReadInt16(); _MaxStamina = reader.ReadInt16(); _Mana = reader.ReadInt16(); _MaxMana = reader.ReadInt16(); _Gold = reader.ReadInt32(); _ArmorRating = reader.ReadInt16(); _Weight = reader.ReadInt16(); if ((features & 0x5) == 0x5) { _MaxWeight = reader.ReadInt16(); _Race = (MobileRace)reader.ReadByte(); } if ((features & 0x2) == 0x2) { _StatCap = reader.ReadInt16(); } if ((features & 0x3) == 0x3) { _Followers = reader.ReadByte(); _MaxFollowers = reader.ReadByte(); } if ((features & 0x4) == 0x4) { _FireResistance = reader.ReadInt16(); _ColdResistance = reader.ReadInt16(); _PoisonResistance = reader.ReadInt16(); _EnergyResistance = reader.ReadInt16(); _Luck = reader.ReadInt16(); _MinWeaponDamage = reader.ReadInt16(); _MaxWeaponDamage = reader.ReadInt16(); _TithingPoints = reader.ReadInt32(); } if ((features & 0x6) == 0x6) { _HitChanceIncrease = reader.ReadInt16(); _SwingSpeedIncrease = reader.ReadInt16(); _DamageChanceIncrease = reader.ReadInt16(); _LowerReagentCost = reader.ReadInt16(); _HitPointRegeneration = reader.ReadInt16(); _StaminaRegeneration = reader.ReadInt16(); _ManaRegeneration = reader.ReadInt16(); _ReflectPhysicalDamage = reader.ReadInt16(); _EnhancePotions = reader.ReadInt16(); _DefenseChanceIncrease = reader.ReadInt16(); _SpellDamageIncrease = reader.ReadInt16(); _FasterCastRecovery = reader.ReadInt16(); _FasterCasting = reader.ReadInt16(); _LowerManaCost = reader.ReadInt16(); _StrengthIncrease = reader.ReadInt16(); _DexterityIncrease = reader.ReadInt16(); _IntelligenceIncrease = reader.ReadInt16(); _HitPointsIncrease = reader.ReadInt16(); _StaminaIncrease = reader.ReadInt16(); _ManaIncrease = reader.ReadInt16(); _MaximumHitPointsIncrease = reader.ReadInt16(); _MaximumStaminaIncrease = reader.ReadInt16(); _MaximumManaIncrease = reader.ReadInt16(); } }
public void Int16ReadWrite() { Int16 value; Int16 result; value = 20; ResetPosition(); _writer.WriteInt16(value); ResetPosition(); result = _reader.ReadInt16(); Assert.AreEqual(value, result); //Multiple bytes value = 30000; ResetPosition(); _writer.WriteInt16(value); ResetPosition(); result = _reader.ReadInt16(); Assert.AreEqual(value, result); //Negative Values value = -30; ResetPosition(); _writer.WriteInt16(value); ResetPosition(); result = _reader.ReadInt16(); Assert.AreEqual(value, result); //Max Value value = 32767; ResetPosition(); _writer.WriteInt16(value); ResetPosition(); result = _reader.ReadInt16(); Assert.AreEqual(value, result); //Min Value value = -32768; ResetPosition(); _writer.WriteInt16(value); ResetPosition(); result = _reader.ReadInt16(); Assert.AreEqual(value, result); }
static bool CompositeHasInstructions(BigEndianReader reader, ushort compositeGlyphIndex) { //To find if a composite has instruction or not. //This method is similar to ReadCompositeGlyph() (below) //but this dose not create actual composite glyph. CompositeGlyphFlags flags; do { flags = (CompositeGlyphFlags)reader.ReadUInt16(); ushort glyphIndex = reader.ReadUInt16(); short arg1 = 0; short arg2 = 0; ushort arg1and2 = 0; if (HasCompositeFlag(flags, CompositeGlyphFlags.ARG_1_AND_2_ARE_WORDS)) { arg1 = reader.ReadInt16(); arg2 = reader.ReadInt16(); } else { arg1and2 = reader.ReadUInt16(); } //----------------------------------------- float xscale = 1; float scale01 = 0; float scale10 = 0; float yscale = 1; bool useMatrix = false; bool hasScale = false; //----------------------------------------- if (HasCompositeFlag(flags, CompositeGlyphFlags.WE_HAVE_A_SCALE)) { //If the bit WE_HAVE_A_SCALE is set, //the scale value is read in 2.14 format-the value can be between -2 to almost +2. //The glyph will be scaled by this value before grid-fitting. xscale = yscale = reader.ReadF2Dot14(); /* Format 2.14 */ hasScale = true; } else if (HasCompositeFlag(flags, CompositeGlyphFlags.WE_HAVE_AN_X_AND_Y_SCALE)) { xscale = reader.ReadF2Dot14(); /* Format 2.14 */ yscale = reader.ReadF2Dot14(); /* Format 2.14 */ hasScale = true; } else if (HasCompositeFlag(flags, CompositeGlyphFlags.WE_HAVE_A_TWO_BY_TWO)) { //The bit WE_HAVE_A_TWO_BY_TWO allows for linear transformation of the X and Y coordinates by specifying a 2 × 2 matrix. //This could be used for scaling and 90-degree*** rotations of the glyph components, for example. //2x2 matrix //The purpose of USE_MY_METRICS is to force the lsb and rsb to take on a desired value. //For example, an i-circumflex (U+00EF) is often composed of the circumflex and a dotless-i. //In order to force the composite to have the same metrics as the dotless-i, //set USE_MY_METRICS for the dotless-i component of the composite. //Without this bit, the rsb and lsb would be calculated from the hmtx entry for the composite //(or would need to be explicitly set with TrueType instructions). //Note that the behavior of the USE_MY_METRICS operation is undefined for rotated composite components. useMatrix = true; hasScale = true; xscale = reader.ReadF2Dot14(); /* Format 2.14 */ scale01 = reader.ReadF2Dot14(); /* Format 2.14 */ scale10 = reader.ReadF2Dot14(); /* Format 2.14 */ yscale = reader.ReadF2Dot14(); /* Format 2.14 */ } if (useMatrix || hasScale) { //This is to be implemented in WOFF2 } } while (HasCompositeFlag(flags, CompositeGlyphFlags.MORE_COMPONENTS)); // return(HasCompositeFlag(flags, CompositeGlyphFlags.WE_HAVE_INSTRUCTIONS)); }
private TrueTypeFontTable ReadHorizontalHeader(uint length, TrueTypeTableEntryList list, BigEndianReader reader) { HorizontalHeader hhead = new HorizontalHeader(reader.Position); hhead.TableVersion = reader.ReadFixedVersion(); hhead.Ascender = reader.ReadInt16(); hhead.Descender = reader.ReadInt16(); hhead.LineGap = reader.ReadInt16(); hhead.AdvanceWidthMax = reader.ReadUInt16(); hhead.MinimumLeftSideBearing = reader.ReadInt16(); hhead.MinimumRightSideBearing = reader.ReadInt16(); hhead.XMaxExtent = reader.ReadInt16(); hhead.CaretSlopeRise = reader.ReadInt16(); hhead.CaretSlopeRun = reader.ReadInt16(); hhead.CaretOffset = reader.ReadInt16(); hhead.Reserved1 = reader.ReadInt16(); hhead.Reserved2 = reader.ReadInt16(); hhead.Reserved3 = reader.ReadInt16(); hhead.Reserved4 = reader.ReadInt16(); hhead.MetricDataFormat = reader.ReadInt16(); hhead.NumberOfHMetrics = reader.ReadUInt16(); return(hhead); }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID reader.ReadInt16(); // Size _Serial = reader.ReadUInt32(); _Body = reader.ReadInt16(); _X = reader.ReadInt16(); _Y = reader.ReadInt16(); _Z = reader.ReadSByte(); _Direction = (Direction) reader.ReadByte(); _Hue = reader.ReadUInt16(); byte flags = reader.ReadByte(); if ( ( flags & 0x1 ) > 0 ) _IsFrozen = true; if ( ( flags & 0x2 ) > 0 ) _IsFemale = true; if ( ( flags & 0x4 ) > 0 ) _IsFlying = true; if ( ( flags & 0x8 ) > 0 ) _HasYellowHealthBar = true; if ( ( flags & 0x10 ) > 0 ) _IsIgnoringMobiles = true; if ( ( flags & 0x40 ) > 0 ) _IsInWarMode = true; if ( ( flags & 0x80 ) > 0 ) _IsHidden = true; _Notoriety = (Notoriety) reader.ReadByte(); // Items _Items = new List<MobileItem>(); uint serial = 0; while ( ( serial = reader.ReadUInt32() ) != 0 ) _Items.Add( new MobileItem( serial, reader ) ); }
// Methods internal void Init(BigEndianReader Reader, int MapVersion) { this.Floor = (Reader.ReadByte() * 10); if (this.Floor == -1280) { return; } if (MapVersion >= 9) { tmpbytesv9 = Reader.ReadInt16(); Mov = (tmpbytesv9 & 1) == 0; NonWalkableDuringFight = (tmpbytesv9 & 2) != 0; NonWalkableDuringRP = (tmpbytesv9 & 4) != 0; Los = (tmpbytesv9 & 8) == 0; Blue = (tmpbytesv9 & 16) != 0; Red = (tmpbytesv9 & 32) != 0; Visible = (tmpbytesv9 & 64) != 0; FarmCell = (tmpbytesv9 & 128) != 0; if (MapVersion >= 10) { HavenbagCell = (tmpbytesv9 & 256) != 0; TopArrow = (tmpbytesv9 & 512) != 0; BottomArrow = (tmpbytesv9 & 1024) != 0; RightArrow = (tmpbytesv9 & 2048) != 0; LeftArrow = (tmpbytesv9 & 4096) != 0; } else { TopArrow = (tmpbytesv9 & 256) != 0; BottomArrow = (tmpbytesv9 & 512) != 0; RightArrow = (tmpbytesv9 & 1024) != 0; LeftArrow = (tmpbytesv9 & 2048) != 0; } } else { LosMov = Reader.ReadSByte(); this.Los = (LosMov & 2) >> 1 == 1; this.Mov = (LosMov & 1) == 1; this.Visible = (LosMov & 64) >> 6 == 1; this.FarmCell = ((LosMov & 32) >> 5) == 1; this.Blue = (LosMov & 16) >> 4 == 1; this.Red = (LosMov & 8) >> 3 == 1; this.NonWalkableDuringRP = (LosMov & 128) >> 7 == 1; this.NonWalkableDuringFight = (LosMov & 4) >> 2 == 1; } this.Speed = Reader.ReadByte(); this.MapChangeData = Reader.ReadByte(); if (MapVersion > 5) { this.MoveZone = Reader.ReadByte(); } if (MapVersion == 8) { tmp = Reader.ReadByte(); Arrow = 15 & tmp; } IsTopChange = (MapChangeData & 64) > 0 ? true : false; IsBotChange = (MapChangeData & 4) > 0 ? true : false; IsLeftChange = (MapChangeData & 16) > 0 ? true : false;; IsRightChange = (MapChangeData & 1) > 0 ? true : false; }
protected override void Parse( BigEndianReader reader ) { reader.ReadByte(); // ID _Serial = reader.ReadUInt32(); _ItemID = reader.ReadInt16(); _ItemIDOffset = reader.ReadByte(); _Amount = reader.ReadInt16(); _X = reader.ReadInt16(); _Y = reader.ReadInt16(); _GridLocation = reader.ReadByte(); _ParentSerial = reader.ReadUInt32(); _Hue = reader.ReadInt16(); }
protected override void Parse(BigEndianReader reader) { reader.ReadByte(); // ID _serverIndex = reader.ReadInt16(); }