public static byte[] Decode(byte[] data, int from, int to, int bitsInterval) { var copiedData = new byte[to - from + 1]; Array.Copy(data, from, copiedData, 0, copiedData.Length); byte[] reverseBytes = Convert.ReverseBitsInBytes(copiedData); using (var s = new MemoryStream(reverseBytes)) using (var reader = new BitReader(s)) { using (var decoded = new MemoryStream()) using (var writer = new BitWriter(decoded)) { int counter = 0; while (reader.CanRead) { byte bit = reader.ReadBits(1); writer.WriteBit(bit); counter = (bit == 1) ? counter + 1 : 0; if (counter == bitsInterval) { reader.ReadBits(1); // skip next 0 bit counter = 0; } } // !! do not flush last bits return Convert.ReverseBitsInBytes(decoded.ToArray()); } } }
public static void Load(string fName) { using (Stream s = File.OpenRead(fName)) { using (BitReader read = new BitReader(s)) { int c = read.ReadInt(); for (int i = 0; i < c; i++) { TDBTactic t = new TDBTactic(); t.ItemId = read.ReadInt(); t.Species = read.ReadInt(); t.uInt1 = read.ReadInt(); t.Data = read.ReadInt(); t.uInt2 = read.ReadInt(); t.uInt3 = read.ReadInt(); t.uInt4 = read.ReadInt(); Tactics.Add(t.ItemId, t); } //More data at the end. Digimon names and descriptions. } } Console.WriteLine("[TacticsDB] Loaded {0} entries.", Tactics.Count); }
public static byte[] Encode(byte[] data, int bitsInterval) { byte[] reverseBytes = Convert.ReverseBitsInBytes(data); using (var s = new MemoryStream(reverseBytes)) using (var reader = new BitReader(s)) { using (var encoded = new MemoryStream()) using (var writer = new BitWriter(encoded)) { int counter = 0; while (reader.CanRead) { byte bit = reader.ReadBits(1); writer.WriteBit(bit); counter = (bit == 1) ? counter + 1 : 0; if (counter == bitsInterval) { writer.WriteBit(0); counter = 0; } } writer.FlushBits(); return Convert.ReverseBitsInBytes(encoded.ToArray()); } } }
public static ClientLoadouts Deserialize(BitReader br) { var clo = new ClientLoadouts(); clo.Loadout1 = ClientLoadout.Deserialize(br); clo.Loadout2 = ClientLoadout.Deserialize(br); return clo; }
public static ClientLoadoutOnlineThing Deserialize(BitReader br) { var clot = new ClientLoadoutOnlineThing(); // ha, "clot" clot.Unknown1 = br.ReadUInt32(); clot.Unknown2 = br.ReadUInt32Max(MAX_UNKNOWN2); return clot; }
public static Reservation Deserialize(UInt32 versionMajor, UInt32 versionMinor, BitReader br) { var r = new Reservation(); r.Unknown1 = br.ReadUInt32FromBits(3); r.PlayerId = UniqueId.Deserialize(br); if (r.PlayerId.Type != UniqueId.UniqueIdType.Unknown) { r.PlayerName = br.ReadString(); } if (versionMajor < 868 || versionMinor < 12) { r.Unknown2 = br.ReadBitsAsBytes(2)[0]; } else { r.Unknown2 = br.ReadByte(); } /* ReservationStatus_None, ReservationStatus_Reserved, ReservationStatus_Joining, ReservationStatus_InGame, ReservationStatus_MAX */ return r; }
public SendResourcesEvent(BitReader bitReader, Replay replay) { this.EventType = GameEventType.Other; var playerId = (int)bitReader.Read(4); Target = replay.GetPlayerById(playerId); var someFlags = (int)bitReader.Read(3); if (someFlags-- > 0) // 4 { MineralsSent = ReadSignedAmount(bitReader.Read(32)); } if (someFlags-- > 0) // 3 { VespeneSent = ReadSignedAmount(bitReader.Read(32)); } if (someFlags-- > 0) // 2 { TerrazineSent = ReadSignedAmount(bitReader.Read(32)); } if (someFlags-- > 0) // 1 { CustomSent = ReadSignedAmount(bitReader.Read(32)); } }
public CameraEvent(BitReader bitReader, Replay replay) { TargetX = CFixedToDouble(bitReader.Read(16)); TargetY = CFixedToDouble(bitReader.Read(16)); HasDistance = bitReader.Read(1) != 0; if (HasDistance) { Distance = CFixedToDouble(bitReader.Read(16)); } HasPitch = bitReader.Read(1) != 0; if (HasPitch) { Pitch = RotationAmountToDegrees(bitReader.Read(16)); } HasYaw = bitReader.Read(1) != 0; if (HasYaw) { Yaw = RotationAmountToDegrees(bitReader.Read(16)); } HasHeightOffset = bitReader.Read(1) != 0; if (HasHeightOffset) { // Debug since we're unsure HeightOffset = CFixedToDouble(bitReader.Read(16)); } this.EventType = GameEventType.Other; }
public override void ReadSetupData( VorbisCodec codec, BitReader reader ) { int residueBegin = reader.ReadBits( 24 ); int residueEnd = reader.ReadBits( 24 ); int partitionSize = reader.ReadBits( 24 ) + 1; int classifications = reader.ReadBits( 6 ) + 1; int classbook = reader.ReadBits( 8 ); byte[] residueCascade = new byte[classifications]; for( int i = 0; i < residueCascade.Length; i++ ) { int highBits = 0; int lowBits = reader.ReadBits( 3 ); if( reader.ReadBit() == 1 ) highBits = reader.ReadBits( 5 ); residueCascade[i] = (byte)( lowBits | ( highBits << 3 ) ); } byte[][] bookNumbers = new byte[classifications][]; for( int i = 0; i < bookNumbers.Length; i++ ) { byte[] nums = new byte[8]; int cascade = residueCascade[i]; for( int j = 0; j < nums.Length; j++ ) { if( ( cascade & ( 1 << j ) ) != 0 ) { nums[j] = (byte)reader.ReadBits( 8 ); } } bookNumbers[i] = nums; } }
public static ActiveActor Deserialize(BitReader br) { var aa = new ActiveActor(); aa.Active = br.ReadBit(); aa.ActorId = br.ReadUInt32(); return aa; }
public PlayerJoinEvent(BitReader bitReader, Replay replay, int playerIndex) { this.EventType = GameEventType.Inactive; // This should probably be a series of {shl; or} on .Read(1) // to make it version-independent if (replay.ReplayBuild < 22612) { this.JoinFlags = (int)bitReader.Read(4); } else { this.JoinFlags = (int)bitReader.Read(12); // unknown } // Initialize player if not exists (true for observers) Player player = replay.GetPlayerById(playerIndex); if (player == null) { var p = new Player { PlayerType = PlayerType.Spectator }; replay.ClientList[playerIndex] = player = p; } // Initialize wireframe player.Wireframe = new List<Unit>(); player.WireframeSubgroup = 0; // Initialize control groups player.Hotkeys = new List<Unit>[10]; }
public override object ApplyToFrame( VorbisCodec codec, BitReader reader, object args ) { step2Flag[0] = true; step2Flag[1] = true; finalY[0] = yList[0]; finalY[1] = yList[1]; SynthesiseAmplitudeValues(); return SynthesiseCurve( (int)args ); }
public static ClientLoadoutOnline Deserialize(BitReader br) { var clo = new ClientLoadoutOnline(); clo.ThingLists = new List<List<ClientLoadoutOnlineThing>>(); var listCount = br.ReadByte(); for (int i = 0; i < listCount; ++i) { var thingList = new List<ClientLoadoutOnlineThing>(); var thingCount = br.ReadByte(); for (int j = 0; j < thingCount; ++j) { thingList.Add(ClientLoadoutOnlineThing.Deserialize(br)); if ( i >= 21 ) { thingList.Add(ClientLoadoutOnlineThing.Deserialize(br)); } } clo.ThingLists.Add(thingList); } return clo; }
public static void Load(string fileName) { if (MapList.Count > 0) return; using (Stream s = File.OpenRead(fileName)) { using (BitReader read = new BitReader(s)) { int count = read.ReadInt(); for (int i = 0; i < count; i++) { read.Seek(4 + i * 672); MapData map = new MapData(); map.MapID = read.ReadInt(); map.MapNumber = read.ReadInt(); read.Skip(4); map.Name = read.ReadZString(Encoding.ASCII); read.Skip(672 - (int)(336 + (read.InnerStream.BaseStream.Position - (672 * i)) - 4)); map.DisplayName = read.ReadZString(Encoding.Unicode); MapList.Add(map.MapID, map); } } } Console.WriteLine("[MapDB] Loaded {0} maps.", MapList.Count); }
internal static short ReadCoefValue(BitReader bReader, uint size) { if (size == 0) return 0; ushort specialBits = bReader.Read(size); return SpecialBitsToValue(specialBits, (short)size); }
public void SetData(ref BitReader Src, int CountBits) { Num = CountBits; Pos = 0; Src.Data = null; Src.Data = new byte[((CountBits + 7) >> 3)]; Src.SerializeBits(Src.Data, CountBits); }
public void Decode(BitReader reader, Stream writer) { if (!writer.CanWrite) throw new InvalidOperationException(); m_reader = reader; Decode(writer); }
internal static ushort ReadRunAmplitude(BitReader bReader, HuffmanTable table) { ushort code = bReader.Peek(table.maxCodeLength); CodeInfo currentCode = table.preIndexTable[code]; bReader.Read(currentCode.length); return currentCode.number; }
public static void Decompress(string inputFile, string outputFile) { var decoder = new Decoder(); using (var reader = new BitReader(inputFile)) using (var writer = new FileStream(outputFile, FileMode.Create)) { decoder.Decode(reader, writer); } }
public static void GetGraphicInfo(BitReader reader, ref Item item) { item.has_graphic = reader.ReadBit(); ; if (item.has_graphic) item.graphic = (byte)reader.Read(3); item.has_colour = reader.ReadBit(); if (item.has_colour) item.colour = (UInt16)reader.Read(11); }
public static WeldedInfo Deserialize(BitReader br) { var wi = new WeldedInfo(); wi.Active = br.ReadBit(); wi.ActorId = br.ReadInt32(); wi.Offset = Vector3D.Deserialize(br); wi.Mass = br.ReadFloat(); wi.Rotation = Rotator.Deserialize(br); return wi; }
const int blkSize = ImgInfo.blockSize; // JPEG decoding block size is 8x8 #endregion Fields #region Methods internal static void DecodeBlock(BitReader bReader, ImgInfo imgInfo, float[,] img, int compIndex, int ofsX, int ofsY, int scaleX, int scaleY) { int quantIndex = imgInfo.components[compIndex].quantTableId; short[] coefZig = GetCoefficients(bReader, imgInfo, compIndex, blkSize * blkSize); FileOps.ZigZagToArray(coefZig, coefDctQnt, FileOps.tablasZigzag[blkSize], blkSize); ImgOps.Dequant(coefDctQnt, coefDct, imgInfo.quantTables[quantIndex].table, blkSize); ImgOps.Fidct(coefDct, blockP, blkSize, blkSize); ImgOps.ResizeAndInsertBlock(imgInfo, blockP, img, blkSize, blkSize, ofsX, ofsY, scaleX, scaleY); }
public static TeamPaint Deserialize(BitReader br) { var tp = new TeamPaint(); tp.TeamNumber = br.ReadByte(); tp.TeamColorId = br.ReadByte(); tp.CustomColorId = br.ReadByte(); tp.TeamFinishId = br.ReadUInt32(); tp.CustomFinishId = br.ReadUInt32(); return tp; }
public static PrivateMatchSettings Deserialize(BitReader br) { var pms = new PrivateMatchSettings(); pms.Mutators = br.ReadString().Split(',').ToList(); pms.Unknown1 = br.ReadUInt32(); // GameNameId? Possibly referencing a string by id pms.Unknown2 = br.ReadUInt32(); // Max players? pms.GameName = br.ReadString(); pms.Password = br.ReadString(); pms.Unknown3 = br.ReadBit(); // Public? return pms; }
public static ReplicatedDemolish Deserialize(BitReader br) { var rd = new ReplicatedDemolish(); rd.Unknown1 = br.ReadBit(); rd.AttackerActorId = br.ReadUInt32(); rd.Unknown2 = br.ReadBit(); rd.VictimActorId = br.ReadUInt32(); rd.AttackerVelocity = Vector3D.Deserialize(br); rd.VictimVelocity = Vector3D.Deserialize(br); return rd; }
public static CameraSettings Deserialize(BitReader br) { var cs = new CameraSettings(); cs.FieldOfView = br.ReadFloat(); cs.Height = br.ReadFloat(); cs.Pitch = br.ReadFloat(); cs.Distance = br.ReadFloat(); cs.Stiffness = br.ReadFloat(); cs.SwivelSpeed = br.ReadFloat(); return cs; }
/// <summary> /// Initializes a new instance of the <see cref="Deflate" /> class. /// </summary> /// <param name="reader">The reader.</param> private Deflate(BitReader reader) { this.input = reader; this.outputStream = new MemoryStream(); this.output = new BinaryWriter(this.outputStream); this.dictionary = new CircularDictionary(32 * 1024); // Process the stream of blocks while (true) { // Block header var isFinal = this.input.ReadNoEof() != -1; // bfinal var type = this.ReadInt(2); // btype // Decompress by type if (type == 0) { this.DecompressUncompressedBlock(); } else if (type == 1 || type == 2) { CodeTree litLenCode, distCode; if (type == 1) { litLenCode = FixedLiteralLengthCode; distCode = FixedDistanceCode; } else { var temp = this.DecodeHuffmanCodes(); litLenCode = temp[0]; distCode = temp[1]; } this.DecompressHuffmanBlock(litLenCode, distCode); } else if (type == 3) { throw new FormatException("Invalid block type"); } else { throw new NotImplementedException(); } if (isFinal) { break; } } }
public static ulong GammaDecode(BitReader reader) { int size = 0; while (reader.ReadBit() == false) size++; ulong result = 1; for (int i = 0; i < size; i++) result = (result << 1) + (reader.ReadBit() ? 1UL : 0UL); return result - 1; }
public static RigidBodyState Deserialize(BitReader br) { var rbs = new RigidBodyState(); rbs.Sleeping = br.ReadBit(); rbs.Position = Vector3D.Deserialize(br); rbs.Rotation = Vector3D.DeserializeFixed(br); if (!rbs.Sleeping) { rbs.LinearVelocity = Vector3D.Deserialize(br); rbs.AngularVelocity = Vector3D.Deserialize(br); } return rbs; }
static void Main(string[] args) { if (args.Length != 2) { Console.WriteLine("Usage GpxExtractor Mode PathToGpx"); Console.WriteLine("Mode can be extract or decompress"); return; } var gpxFs = new GpxFileSystem(); var dir = Path.Combine(Path.GetDirectoryName(args[1]), Path.GetFileNameWithoutExtension(args[1])); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } var mode = args[0]; switch (mode) { case "extract": gpxFs.Load(ByteBuffer.FromBuffer(File.ReadAllBytes(args[1]))); foreach (var file in gpxFs.Files) { Console.WriteLine("Extracting {0}", file.FileName); File.WriteAllBytes(Path.Combine(dir, file.FileName), file.Data); } break; case "decompress": var src = new BitReader(ByteBuffer.FromBuffer(File.ReadAllBytes(args[1]))); var header = gpxFs.ReadHeader(src); Console.WriteLine("Found Header: {0}", header); if (header != GpxFileSystem.HeaderBcFz) { Console.WriteLine("The requested file is no compressed gpx"); return; } var decompressed = gpxFs.Decompress(src); File.WriteAllBytes(Path.Combine(dir, "Decompressed.gpx"), decompressed); break; } }
void OnEntityCreate( BitReader reader ) { Entity.Spawn spawn = new Entity.Spawn(); spawn.Read( reader ); SpawnEntityClient( spawn ); }
public static async Task ExportToWavefrontAsync(this LuzFile @this, AccessDatabase database, string source, string resources, string result) { TerrainFile terrain; await using (var stream = File.OpenRead(Path.Combine(source, @this.TerrainFileName))) { using var reader = new BitReader(stream); terrain = new TerrainFile(); terrain.Deserialize(reader); } var levels = new LvlFile[@this.Scenes.Length]; for (var i = 0; i < @this.Scenes.Length; i++) { var scene = @this.Scenes[i]; await using var stream = File.OpenRead(Path.Combine(source, scene.FileName)); using var reader = new BitReader(stream); var level = new LvlFile(); level.Deserialize(reader); levels[i] = level; } var objects = new List <LevelObjectTemplate>(); foreach (var level in levels) { if (level.LevelObjects?.Templates == default) { continue; } foreach (var template in level.LevelObjects.Templates) { if (!template.LegoInfo.TryGetValue("add_to_navmesh", out var add)) { continue; } if (!(bool)add) { continue; } objects.Add(template); } } foreach (var template in objects) { var instance = database.LoadObject(template.Lot); var renderer = instance.GetComponent <RenderComponentTable>(); if (renderer == default) { continue; } Console.WriteLine(renderer.render_asset); } }
internal abstract void ParseSpecific(BitReader reader, DwgVersionId version);
internal virtual void OnAfterObjectRead(BitReader reader, DwgObjectCache objectCache) { }
public virtual void Deserialize(BitReader reader) { Behavior = (PathBehavior)reader.Read <uint>(); }
protected virtual void DeserializeImpl(BitReader br) { Unknown1 = br.ReadBit(); ActorId = br.ReadUInt32(); Position = Vector3D.Deserialize(br); }
public static ActorStateProperty Deserialize(IClassNetCache classMap, string[] objectIndexToName, UInt32 engineVersion, UInt32 licenseeVersion, UInt32 netVersion, BitReader br) { var asp = new ActorStateProperty(); asp._classNetCache = classMap; var maxPropId = classMap.MaxPropertyId; asp.PropertyId = br.ReadUInt32Max(maxPropId + 1); asp.PropertyName = objectIndexToName[classMap.GetProperty((int)asp.PropertyId).Index]; asp.Data = new List <object>(); switch (asp.PropertyName) { case "TAGame.GameEvent_TA:ReplicatedStateIndex": asp.Data = br.ReadUInt32Max(140); // number is made up, I dont know the max yet // TODO: Revisit this. It might work well enough, but looks fishy break; case "TAGame.RBActor_TA:ReplicatedRBState": asp.Data = RigidBodyState.Deserialize(br, netVersion); break; case "TAGame.Team_TA:LogoData": asp.Data = LogoData.Deserialize(br); break; case "TAGame.CrowdManager_TA:GameEvent": case "TAGame.CrowdActor_TA:GameEvent": case "TAGame.PRI_TA:PersistentCamera": case "TAGame.Team_TA:GameEvent": case "TAGame.Ball_TA:GameEvent": case "Engine.PlayerReplicationInfo:Team": case "Engine.Pawn:PlayerReplicationInfo": case "TAGame.PRI_TA:ReplicatedGameEvent": case "TAGame.CarComponent_TA:Vehicle": case "TAGame.Car_TA:AttachedPickup": case "TAGame.SpecialPickup_Targeted_TA:Targeted": case "TAGame.CameraSettingsActor_TA:PRI": case "TAGame.GameEvent_Soccar_TA:MVP": case "TAGame.GameEvent_Soccar_TA:MatchWinner": case "TAGame.GameEvent_Soccar_TA:GameWinner": case "Engine.ReplicatedActor_ORS:ReplicatedOwner": case "TAGame.Car_TA:RumblePickups": case "TAGame.RumblePickups_TA:AttachedPickup": asp.Data = ActiveActor.Deserialize(br); break; case "TAGame.CrowdManager_TA:ReplicatedGlobalOneShotSound": case "TAGame.CrowdActor_TA:ReplicatedOneShotSound": case "TAGame.GameEvent_TA:MatchTypeClass": case "Engine.GameReplicationInfo:GameClass": case "TAGame.GameEvent_Soccar_TA:SubRulesArchetype": case "TAGame.Ball_TA:ReplicatedPhysMatOverride": var objectTarget = ObjectTarget.Deserialize(br); asp.Data = objectTarget; ValidateObjectIndex(objectTarget.ObjectIndex, objectIndexToName); break; case "Engine.GameReplicationInfo:ServerName": case "Engine.PlayerReplicationInfo:PlayerName": case "TAGame.Team_TA:CustomTeamName": case "Engine.PlayerReplicationInfo:RemoteUserData": case "TAGame.GRI_TA:NewDedicatedServerIP": case "ProjectX.GRI_X:MatchGUID": asp.Data = br.ReadString(); break; case "TAGame.GameEvent_Soccar_TA:SecondsRemaining": case "TAGame.GameEvent_TA:ReplicatedGameStateTimeRemaining": case "TAGame.CrowdActor_TA:ReplicatedCountDownNumber": case "TAGame.GameEvent_Team_TA:MaxTeamSize": case "Engine.PlayerReplicationInfo:PlayerID": case "TAGame.PRI_TA:TotalXP": case "TAGame.PRI_TA:MatchScore": case "TAGame.GameEvent_Soccar_TA:RoundNum": case "TAGame.GameEvent_TA:BotSkill": case "TAGame.PRI_TA:MatchShots": case "TAGame.PRI_TA:MatchSaves": case "ProjectX.GRI_X:ReplicatedGamePlaylist": case "Engine.TeamInfo:Score": case "Engine.PlayerReplicationInfo:Score": case "TAGame.PRI_TA:MatchGoals": case "TAGame.PRI_TA:MatchAssists": case "TAGame.PRI_TA:Title": case "TAGame.GameEvent_TA:ReplicatedStateName": case "TAGame.Team_Soccar_TA:GameScore": case "TAGame.GameEvent_Soccar_TA:GameTime": case "TAGame.CarComponent_Boost_TA:UnlimitedBoostRefCount": case "TAGame.CrowdActor_TA:ReplicatedRoundCountDownNumber": case "TAGame.Ball_Breakout_TA:DamageIndex": case "TAGame.PRI_TA:MatchBreakoutDamage": case "TAGame.PRI_TA:BotProductName": case "TAGame.GameEvent_TA:ReplicatedRoundCountDownNumber": case "TAGame.GameEvent_Soccar_TA:SeriesLength": case "TAGame.PRI_TA:SpectatorShortcut": case "Engine.Pawn:HealthMax": case "TAGame.GameEvent_Soccar_TA:MaxScore": case "TAGame.Team_TA:Difficulty": case "TAGame.RumblePickups_TA:ConcurrentItemCount": asp.Data = br.ReadUInt32(); break; case "ProjectX.GRI_X:ReplicatedGameMutatorIndex": case "TAGame.PRI_TA:TimeTillItem": case "TAGame.PRI_TA:MaxTimeTillItem": asp.Data = br.ReadInt32(); break; case "TAGame.VehiclePickup_TA:ReplicatedPickupData": asp.Data = ReplicatedPickupData.Deserialize(br); break; case "Engine.PlayerReplicationInfo:Ping": case "TAGame.Vehicle_TA:ReplicatedSteer": case "TAGame.Vehicle_TA:ReplicatedThrottle": // 0: full reverse, 128: No throttle. 255 full throttle/boosting case "TAGame.PRI_TA:CameraYaw": case "TAGame.PRI_TA:CameraPitch": case "TAGame.Ball_TA:HitTeamNum": case "TAGame.GameEvent_Soccar_TA:ReplicatedScoredOnTeam": case "TAGame.CarComponent_Boost_TA:ReplicatedBoostAmount": case "TAGame.CameraSettingsActor_TA:CameraPitch": case "TAGame.CameraSettingsActor_TA:CameraYaw": case "TAGame.PRI_TA:PawnType": case "TAGame.Ball_Breakout_TA:LastTeamTouch": case "TAGame.Ball_Haunted_TA:LastTeamTouch": case "TAGame.PRI_TA:ReplicatedWorstNetQualityBeyondLatency": case "TAGame.GameEvent_Soccar_TA:ReplicatedServerPerformanceState": case "TAGame.Ball_Haunted_TA:TotalActiveBeams": case "TAGame.Ball_Haunted_TA:DeactivatedGoalIndex": case "TAGame.Ball_Haunted_TA:ReplicatedBeamBrokenValue": asp.Data = br.ReadByte(); break; case "TAGame.PRI_TA:SkillTier": asp.Data = br.ReadUInt32Max(500); // 9 bits. I picked a value that works, but could just be 1 bit + 1 byte instead of a single value. break; case "Engine.Actor:Location": case "TAGame.CarComponent_Dodge_TA:DodgeTorque": asp.Data = Vector3D.Deserialize(br, netVersion); break; case "Engine.Actor:bCollideWorld": case "Engine.PlayerReplicationInfo:bReadyToPlay": case "TAGame.Vehicle_TA:bReplicatedHandbrake": case "TAGame.Vehicle_TA:bDriving": case "Engine.Actor:bNetOwner": case "Engine.Actor:bBlockActors": case "TAGame.GameEvent_TA:bHasLeaveMatchPenalty": case "TAGame.PRI_TA:bUsingBehindView": case "TAGame.PRI_TA:bUsingSecondaryCamera": // Ball cam on when true case "TAGame.GameEvent_TA:ActivatorCar": case "TAGame.GameEvent_Soccar_TA:bOverTime": case "ProjectX.GRI_X:bGameStarted": case "Engine.Actor:bCollideActors": case "TAGame.PRI_TA:bReady": case "TAGame.RBActor_TA:bFrozen": case "Engine.Actor:bHidden": case "TAGame.CarComponent_FlipCar_TA:bFlipRight": case "Engine.PlayerReplicationInfo:bBot": case "Engine.PlayerReplicationInfo:bWaitingPlayer": case "TAGame.RBActor_TA:bReplayActor": case "TAGame.PRI_TA:bIsInSplitScreen": case "Engine.GameReplicationInfo:bMatchIsOver": case "TAGame.CarComponent_Boost_TA:bUnlimitedBoost": case "Engine.PlayerReplicationInfo:bIsSpectator": case "TAGame.GameEvent_Soccar_TA:bBallHasBeenHit": case "TAGame.CameraSettingsActor_TA:bUsingSecondaryCamera": case "TAGame.CameraSettingsActor_TA:bUsingBehindView": case "TAGame.PRI_TA:bOnlineLoadoutSet": case "TAGame.PRI_TA:bMatchMVP": case "TAGame.PRI_TA:bOnlineLoadoutsSet": case "TAGame.RBActor_TA:bIgnoreSyncing": case "TAGame.SpecialPickup_BallVelcro_TA:bHit": case "TAGame.GameEvent_TA:bCanVoteToForfeit": case "TAGame.SpecialPickup_BallVelcro_TA:bBroken": case "TAGame.GameEvent_Team_TA:bForfeit": case "TAGame.PRI_TA:bUsingItems": case "TAGame.VehiclePickup_TA:bNoPickup": case "TAGame.CarComponent_Boost_TA:bNoBoost": case "TAGame.PRI_TA:PlayerHistoryValid": case "TAGame.GameEvent_Soccar_TA:bUnlimitedTime": case "TAGame.GameEvent_Soccar_TA:bClubMatch": case "TAGame.GameEvent_Soccar_TA:bMatchEnded": case "TAGame.GameEvent_TA:bAllowReadyUp": case "Engine.Actor:bTearOff": case "Engine.PlayerReplicationInfo:bTimedOut": case "TAGame.CameraSettingsActor_TA:bMouseCameraToggleEnabled": case "TAGame.CameraSettingsActor_TA:bUsingSwivel": case "TAGame.Ball_Haunted_TA:bIsBallBeamed": case "TAGame.SpecialPickup_Rugby_TA:bBallWelded": case "TAGame.PRI_TA:bIsDistracted": asp.Data = br.ReadBit(); break; case "TAGame.CarComponent_TA:ReplicatedActive": // The car component is active if (ReplicatedValue%2)!=0 // For now I am only adding that logic to the JSON serializer asp.Data = br.ReadByte(); break; case "Engine.PlayerReplicationInfo:UniqueId": asp.Data = UniqueId.Deserialize(br, licenseeVersion, netVersion); break; case "TAGame.PRI_TA:PartyLeader": asp.Data = PartyLeader.Deserialize(br, licenseeVersion, netVersion); break; case "TAGame.PRI_TA:ClientLoadout": asp.Data = ClientLoadout.Deserialize(br); break; case "TAGame.PRI_TA:CameraSettings": case "TAGame.CameraSettingsActor_TA:ProfileSettings": asp.Data = CameraSettings.Deserialize(br, engineVersion, licenseeVersion); break; case "TAGame.Car_TA:TeamPaint": asp.Data = TeamPaint.Deserialize(br); break; case "ProjectX.GRI_X:GameServerID": asp.Data = br.ReadBytes(8); break; case "ProjectX.GRI_X:Reservations": asp.Data = Reservation.Deserialize(engineVersion, licenseeVersion, netVersion, br); break; case "TAGame.Car_TA:ReplicatedDemolish": asp.Data = ReplicatedDemolish.Deserialize(br, netVersion); break; case "TAGame.GameEvent_Soccar_TA:ReplicatedMusicStinger": asp.Data = ReplicatedMusicStinger.Deserialize(br); break; case "TAGame.CarComponent_FlipCar_TA:FlipCarTime": case "TAGame.Ball_TA:ReplicatedBallScale": case "TAGame.CarComponent_Boost_TA:RechargeDelay": case "TAGame.CarComponent_Boost_TA:RechargeRate": case "TAGame.Ball_TA:ReplicatedAddedCarBounceScale": case "TAGame.Ball_TA:ReplicatedBallMaxLinearSpeedScale": case "TAGame.Ball_TA:ReplicatedWorldBounceScale": case "TAGame.CarComponent_Boost_TA:BoostModifier": case "Engine.Actor:DrawScale": case "TAGame.CrowdActor_TA:ModifiedNoise": case "TAGame.CarComponent_TA:ReplicatedActivityTime": case "TAGame.SpecialPickup_BallFreeze_TA:RepOrigSpeed": case "TAGame.SpecialPickup_BallVelcro_TA:AttachTime": case "TAGame.SpecialPickup_BallVelcro_TA:BreakTime": case "TAGame.Car_TA:AddedCarForceMultiplier": case "TAGame.Car_TA:AddedBallForceMultiplier": case "TAGame.PRI_TA:SteeringSensitivity": case "TAGame.Car_TA:ReplicatedCarScale": case "Engine.WorldInfo:WorldGravityZ": case "Engine.WorldInfo:TimeDilation": case "TAGame.Ball_God_TA:TargetSpeed": asp.Data = br.ReadFloat(); break; case "TAGame.GameEvent_SoccarPrivate_TA:MatchSettings": asp.Data = PrivateMatchSettings.Deserialize(br); break; case "TAGame.PRI_TA:ClientLoadoutOnline": asp.Data = ClientLoadoutOnline.Deserialize(br, engineVersion, licenseeVersion, objectIndexToName); break; case "TAGame.GameEvent_TA:GameMode": if (engineVersion >= 868 && licenseeVersion >= 12) { asp.Data = br.ReadByte(); } else { asp.Data = br.ReadUInt32Max(4); } break; case "TAGame.PRI_TA:ClientLoadoutsOnline": asp.Data = ClientLoadoutsOnline.Deserialize(br, engineVersion, licenseeVersion, objectIndexToName); break; case "TAGame.PRI_TA:ClientLoadouts": asp.Data = ClientLoadouts.Deserialize(br); break; case "TAGame.Team_TA:ClubColors": case "TAGame.Car_TA:ClubColors": asp.Data = ClubColors.Deserialize(br); break; case "TAGame.RBActor_TA:WeldedInfo": asp.Data = WeldedInfo.Deserialize(br, netVersion); break; case "TAGame.BreakOutActor_Platform_TA:DamageState": asp.Data = DamageState.Deserialize(br, netVersion); break; case "TAGame.Ball_Breakout_TA:AppliedDamage": asp.Data = AppliedDamage.Deserialize(br, netVersion); break; case "TAGame.Ball_TA:ReplicatedExplosionData": asp.Data = ReplicatedExplosionData.Deserialize(br, netVersion); break; case "TAGame.Ball_TA:ReplicatedExplosionDataExtended": asp.Data = ReplicatedExplosionDataExtended.Deserialize(br, netVersion); break; case "TAGame.PRI_TA:SecondaryTitle": case "TAGame.PRI_TA:PrimaryTitle": asp.Data = Title.Deserialize(br); break; case "TAGame.PRI_TA:PlayerHistoryKey": // Betting ReadUInt32Max is more likely, since 14 bits is a weird number asp.Data = br.ReadUInt32FromBits(14); break; case "TAGame.GameEvent_Soccar_TA:ReplicatedStatEvent": asp.Data = ReplicatedStatEvent.Deserialize(br); break; case "TAGame.Team_TA:ClubID": case "TAGame.PRI_TA:ClubID": case "TAGame.MaxTimeWarningData_TA:EndGameWarningEpochTime": case "TAGame.MaxTimeWarningData_TA:EndGameEpochTime": asp.Data = br.ReadUInt64(); break; case "TAGame.PRI_TA:RepStatTitles": asp.Data = RepStatTitle.Deserialize(br); break; case "TAGame.VehiclePickup_TA:NewReplicatedPickupData": asp.Data = NewReplicatedPickupData.Deserialize(br); break; case "TAGame.Car_TA:ReplicatedDemolish_CustomFX": asp.Data = ReplicatedDemolishCustomFx.Deserialize(br, netVersion); break; default: throw new NotSupportedException(string.Format("Unknown property {0}. Next bits in the data are {1}. Figure it out!", asp.PropertyName, br.GetBits(br.Position, Math.Min(4096, br.Length - br.Position)).ToBinaryString())); } return(asp); }
public static BlockMode Create(BitReader br) { return(new BlockMode(br.ReadBits <short>(11))); }
public void ReadPackedIntTest() { // This version is bit compatible with FArchive::SerializeIntPacked, see CustomBinaryReader reader = new BitReader(new byte[] { 14 }); Assert.Equal(7u, reader.ReadIntPacked()); }
public void ReadInt32Test() { reader = new BitReader(new byte[] { 10, 58, 0, 0 }); Assert.Equal(14858, reader.ReadInt32()); }
public BitReaderTest() { expectedBits = new bool[] { true, true, false, false, false, true, false, false }; expectedBytes = new byte[] { 35, 47, 215 }; reader = new BitReader(expectedBytes); }
public void ReadSerializedIntTest() { reader = new BitReader(new byte[] { 1 }); Assert.Equal(1u, reader.ReadSerializedInt(3)); }
public byte[] Decode(byte[] data, int codeSize) { using (var br = new BitReader(data)) { return(Decode(br, codeSize)); } }
public VideoFrame NextFrame(GraphicsContext gfx) { using (var read = new BinaryReader(fobj, Encoding.UTF8, true)) { if (palFrames[curFrame]) { for (short i = 0; i < 256; i++) { palette[i] = new Color(read.ReadByte(), read.ReadByte(), read.ReadByte()); } } var bread = new BitReader(read.ReadBytes(bitfieldSize)); for (int y = 0; y < gridHeight; y++) { for (int x = 0; x < gridHeight; x++) { byte opcode = bread.ReadBit(); opcode |= (byte)(bread.ReadBit() << 1); switch ((OpCode)opcode) { case OpCode.AsIs: break; case OpCode.OneColour: byte colour = read.ReadByte(); for (int gy = 0; gy < 4; gy++) { Util.Memset(imgData, y * 4 * gridWidth + x * 4 + gy * width, colour, 4); } break; case OpCode.TwoColour: byte[] colours = read.ReadBytes(2); var cbread = new BitReader(read.ReadBytes(2)); for (int gy = 0; gy < 4; gy++) { for (int gx = 0; gx < 4; gx++) { imgData[y * 4 * gridWidth + x * 4 + gy * width + gx] = colours[cbread.ReadBit()]; } } break; case OpCode.Literal: for (int gy = 0; gy < 4; gy++) { Array.Copy(read.ReadBytes(4), 0, imgData, y * 4 * gridWidth + x * 4 + gy * width, 4); } break; } } } bread = new BitReader(read.ReadBytes(read.ReadUInt16())); var audioData = new byte[read.ReadUInt16()]; int c = 0; if (!init) { prevCode = k = audioData[0] = read.ReadByte(); init = true; c = 1; } while (c < audioData.Length) { int count = 0; for (int i = 0; i < 32; i++) { if (((1 << i) & (soundLzwDict.Count - 1)) != 0) { count = i; } } count++; int currCode = 0; for (int i = 0; i < count; i++) { currCode |= bread.ReadBit() << i; } byte[] pattern; if (currCode == soundLzwDict.Count) { pattern = new byte[soundLzwDict[prevCode].Length + 1]; Array.Copy(soundLzwDict[prevCode], 0, pattern, 0, soundLzwDict[prevCode].Length); pattern[soundLzwDict[prevCode].Length] = k; } else { pattern = soundLzwDict[currCode]; } Array.Copy(pattern, 0, audioData, c, soundLzwDict[prevCode].Length); k = pattern[0]; byte[] ncode = new byte[soundLzwDict[prevCode].Length + 1]; Array.Copy(soundLzwDict[prevCode], 0, pattern, 0, soundLzwDict[prevCode].Length); pattern[soundLzwDict[prevCode].Length] = k; soundLzwDict.Add(ncode); prevCode = currCode; c += pattern.Length; } var data = new Color[imgData.Length]; for (int i = 0; i < imgData.Length; i++) { data[i] = palette[imgData[i]]; } var ret = new VideoFrame(); ret.picture = new Texture2D(gfx.Device, width, height); ret.picture.SetData(data); ret.sound = new RawSourceWaveStream(new MemoryStream(audioData), fmt); return(ret); } }
public void FromBase64(string base64, bool createDummyObject = false) { NetworkConfig config = this; byte[] binary = Convert.FromBase64String(base64); using (BitReader reader = BitReader.Get(binary)) { config.ProtocolVersion = reader.ReadUShort(); config.Transport = (DefaultTransport)reader.ReadBits(5); ushort channelCount = reader.ReadUShort(); config.Channels.Clear(); for (int i = 0; i < channelCount; i++) { Channel channel = new Channel() { Name = reader.ReadString(), Encrypted = reader.ReadBool(), Type = (ChannelType)reader.ReadBits(5) }; config.Channels.Add(channel); } ushort messageTypeCount = reader.ReadUShort(); config.MessageTypes.Clear(); for (int i = 0; i < messageTypeCount; i++) { MessageType messageType = new MessageType() { Name = reader.ReadString(), Passthrough = reader.ReadBool() }; config.MessageTypes.Add(messageType); } ushort sceneCount = reader.ReadUShort(); config.RegisteredScenes.Clear(); for (int i = 0; i < sceneCount; i++) { config.RegisteredScenes.Add(reader.ReadString()); } ushort networkedPrefabsCount = reader.ReadUShort(); config.NetworkedPrefabs.Clear(); GameObject root = createDummyObject ? new GameObject("MLAPI: Dummy prefabs") : null; for (int i = 0; i < networkedPrefabsCount; i++) { bool playerPrefab = reader.ReadBool(); string prefabName = reader.ReadString(); GameObject dummyPrefab = createDummyObject ? new GameObject("REPLACEME: " + prefabName + "(Dummy prefab)", typeof(NetworkedObject)) : null; if (dummyPrefab != null) { dummyPrefab.GetComponent <NetworkedObject>().NetworkedPrefabName = prefabName; dummyPrefab.transform.SetParent(root.transform); //This is just here to not ruin your hierarchy } NetworkedPrefab networkedPrefab = new NetworkedPrefab() { playerPrefab = playerPrefab, prefab = dummyPrefab }; config.NetworkedPrefabs.Add(networkedPrefab); } config.MessageBufferSize = reader.ReadInt(); config.ReceiveTickrate = reader.ReadInt(); config.MaxReceiveEventsPerTickRate = reader.ReadInt(); config.SendTickrate = reader.ReadInt(); config.EventTickrate = reader.ReadInt(); config.MaxConnections = reader.ReadInt(); config.ConnectPort = reader.ReadInt(); config.ConnectAddress = reader.ReadString(); config.ClientConnectionBufferTimeout = reader.ReadInt(); config.ConnectionApproval = reader.ReadBool(); config.SecondsHistory = reader.ReadInt(); config.HandleObjectSpawning = reader.ReadBool(); config.EnableEncryption = reader.ReadBool(); config.SignKeyExchange = reader.ReadBool(); config.AllowPassthroughMessages = reader.ReadBool(); config.EnableSceneSwitching = reader.ReadBool(); config.EnableTimeResync = reader.ReadBool(); config.AttributeMessageMode = (AttributeMessageMode)reader.ReadBits(3); } }
public static void Read(this BitReader @this, IDeserializable serializable) => serializable.Deserialize(@this);
public static T ReadGameObject <T>(this BitReader @this, Zone zone) where T : GameObject { return(@this.ReadGameObject(zone) as T); }
/// <summary> Parses the Replay.Messages.Events file. </summary> /// <param name="buffer"> Buffer containing the contents of the replay.messages.events file. </param> /// <returns> A list of messages parsed from the buffer. </returns> public static void Parse(Replay replay, byte[] buffer) { if (buffer.Length <= 1) { // Chat has been removed from this replay return; } var ticksElapsed = 0; using (var stream = new MemoryStream(buffer)) { var bitReader = new BitReader(stream); while (!bitReader.EndOfStream) { var message = new Message(); ticksElapsed += (int)bitReader.Read(6 + (bitReader.Read(2) << 3)); message.Timestamp = new TimeSpan(0, 0, (int)Math.Round(ticksElapsed / 16.0)); var playerIndex = (int)bitReader.Read(5); if (playerIndex != 16) { message.MessageSender = replay.ClientListByUserID[playerIndex]; message.PlayerIndex = playerIndex; } message.MessageEventType = (MessageEventType)bitReader.Read(4); switch (message.MessageEventType) { case MessageEventType.SChatMessage: { var chatMessage = new ChatMessage { MessageTarget = (MessageTarget)bitReader.Read(3), // m_recipient (the target) Message = Encoding.UTF8.GetString(bitReader.ReadBlobPrecededWithLength(11)) // m_string }; message.ChatMessage = chatMessage; replay.Messages.Add(message); break; } case MessageEventType.SPingMessage: { var pingMessage = new PingMessage { MessageTarget = (MessageTarget)bitReader.Read(3), // m_recipient (the target) XCoordinate = bitReader.ReadInt32() - (-2147483648), // m_point x YCoordinate = bitReader.ReadInt32() - (-2147483648) // m_point y }; message.PingMessage = pingMessage; replay.Messages.Add(message); break; } case MessageEventType.SLoadingProgressMessage: { // can be used to keep track of how fast/slow players are loading // also includes players who are reloading the game var progress = bitReader.ReadInt32() - (-2147483648); // m_progress break; } case MessageEventType.SServerPingMessage: { break; } case MessageEventType.SReconnectNotifyMessage: { bitReader.Read(2); // m_status; is either a 1 or a 2 break; } case MessageEventType.SPlayerAnnounceMessage: { var announceMessage = new PlayerAnnounceMessage { AnnouncementType = (AnnouncementType)bitReader.Read(2) }; switch (announceMessage.AnnouncementType) { case AnnouncementType.None: { break; } case AnnouncementType.Ability: { var ability = new AbilityAnnouncment { AbilityLink = bitReader.ReadInt16(), // m_abilLink AbilityIndex = (int)bitReader.Read(5), // m_abilCmdIndex ButtonLink = bitReader.ReadInt16() // m_buttonLink }; announceMessage.AbilityAnnouncement = ability; break; } case AnnouncementType.Behavior: // no idea what triggers this { bitReader.ReadInt16(); // m_behaviorLink bitReader.ReadInt16(); // m_buttonLink break; } case AnnouncementType.Vitals: { var vital = new VitalAnnouncment { VitalType = (VitalType)(bitReader.ReadInt16() - (-32768)) }; announceMessage.VitalAnnouncement = vital; break; } default: throw new NotImplementedException(); } if (replay.ReplayBuild > 45635) { // m_announceLink bitReader.ReadInt16(); } bitReader.ReadInt32(); // m_otherUnitTag bitReader.ReadInt32(); // m_unitTag message.PlayerAnnounceMessage = announceMessage; replay.Messages.Add(message); break; } default: throw new NotImplementedException(); } bitReader.AlignToByte(); } } }
public void Read ( BitReader reader ) { _indexPlusOne = reader.Packed<UInt32>(); }
public static void Read(BitReader reader, Channel channel) { Array.Clear(channel.ScaleFactors, 0, channel.ScaleFactors.Length); channel.ScaleFactorCodingMode = reader.ReadInt(2); if (channel.ChannelIndex == 0) { switch (channel.ScaleFactorCodingMode) { case 0: ReadVlcDeltaOffset(reader, channel); break; case 1: ReadClcOffset(reader, channel); break; case 2: if (channel.Block.FirstInSuperframe) { throw new InvalidDataException(); } ReadVlcDistanceToBaseline(reader, channel, channel.ScaleFactorsPrev, channel.Block.QuantizationUnitsPrev); break; case 3: if (channel.Block.FirstInSuperframe) { throw new InvalidDataException(); } ReadVlcDeltaOffsetWithBaseline(reader, channel, channel.ScaleFactorsPrev, channel.Block.QuantizationUnitsPrev); break; } } else { switch (channel.ScaleFactorCodingMode) { case 0: ReadVlcDeltaOffset(reader, channel); break; case 1: ReadVlcDistanceToBaseline(reader, channel, channel.Block.Channels[0].ScaleFactors, channel.Block.ExtensionUnit); break; case 2: ReadVlcDeltaOffsetWithBaseline(reader, channel, channel.Block.Channels[0].ScaleFactors, channel.Block.ExtensionUnit); break; case 3: if (channel.Block.FirstInSuperframe) { throw new InvalidDataException(); } ReadVlcDistanceToBaseline(reader, channel, channel.ScaleFactorsPrev, channel.Block.QuantizationUnitsPrev); break; } } for (int i = 0; i < channel.Block.ExtensionUnit; i++) { if (channel.ScaleFactors[i] < 0 || channel.ScaleFactors[i] > 31) { throw new InvalidDataException("Scale factor values are out of range."); } } Array.Copy(channel.ScaleFactors, channel.ScaleFactorsPrev, channel.ScaleFactors.Length); }
internal virtual void ReadCommonDataEnd(BitReader reader) { }
public void Decode(Stream input, Stream output) { var inputStartPosition = input.Position; var buffer = new byte[4]; input.Read(buffer, 0, 4); if (!buffer.SequenceEqual(new byte[] { 0x59, 0x61, 0x79, 0x30 })) { throw new InvalidCompressionException("Yay0" + (_byteOrder == ByteOrder.LittleEndian ? "LE" : "BE")); } input.Read(buffer, 0, 4); var uncompressedLength = _byteOrder == ByteOrder.LittleEndian ? buffer.GetInt32LittleEndian(0) : buffer.GetInt32BigEndian(0); input.Read(buffer, 0, 4); var compressedTableOffset = _byteOrder == ByteOrder.LittleEndian ? buffer.GetInt32LittleEndian(0) : buffer.GetInt32BigEndian(0); input.Read(buffer, 0, 4); var uncompressedTableOffset = _byteOrder == ByteOrder.LittleEndian ? buffer.GetInt32LittleEndian(0) : buffer.GetInt32BigEndian(0); _circularBuffer = new CircularBuffer(0x1000); //var windowBuffer = new byte[0x1000]; //var windowBufferPosition = 0; var compressedTablePosition = 0; var uncompressedTablePosition = 0; var bitLayout = new byte[compressedTableOffset - 0x10]; input.Read(bitLayout, 0, bitLayout.Length); using (var bitReader = new BitReader(new MemoryStream(bitLayout), BitOrder.MsbFirst, 1, ByteOrder.BigEndian)) { while (output.Length < uncompressedLength) { if (bitReader.ReadBit() == 1) { // Flag for uncompressed byte input.Position = inputStartPosition + uncompressedTableOffset + uncompressedTablePosition++; var value = (byte)input.ReadByte(); output.WriteByte(value); _circularBuffer.WriteByte(value); } else { // Flag for compressed data input.Position = inputStartPosition + compressedTableOffset + compressedTablePosition; var firstByte = input.ReadByte(); var secondByte = input.ReadByte(); compressedTablePosition += 2; var length = firstByte >> 4; if (length > 0) { length += 2; } else { // Yes, we do read the length from the uncompressed data stream input.Position = inputStartPosition + uncompressedTableOffset + uncompressedTablePosition++; length = input.ReadByte() + 0x12; } var displacement = (((firstByte & 0xF) << 8) | secondByte) + 1; _circularBuffer.Copy(output, displacement, length); } } } }
private string Sanitize(Variant value) { string final = null; if (value.GetVariantType() == Variant.VariantType.ByteString) { try { final = encoding.GetString((byte[])value); } catch (DecoderFallbackException) { throw new PeachException("Error, " + debugName + " value contains invalid " + stringType + " bytes."); } } if (value.GetVariantType() == Variant.VariantType.BitStream) { try { var rdr = new BitReader((BitwiseStream)value); rdr.BaseStream.Seek(0, System.IO.SeekOrigin.Begin); final = rdr.ReadString(encoding); } catch (DecoderFallbackException) { throw new PeachException("Error, " + debugName + " value contains invalid " + stringType + " bytes."); } } else { try { encoding.GetBytes((string)value); } catch { throw new PeachException("Error, " + debugName + " value contains invalid " + stringType + " characters."); } final = (string)value; } if (_hasLength) { var lenType = lengthType; var len = length; if (lenType == LengthType.Chars) { if (NeedsExpand(final.Length, len, nullTerminated, final)) { if (nullTerminated) { len -= 1; } final += MakePad((int)len - final.Length); } } else { if (lenType == LengthType.Bits) { if ((len % 8) != 0) { throw new PeachException("Error, " + debugName + " has invalid length of " + len + " bits."); } len = len / 8; lenType = LengthType.Bytes; } System.Diagnostics.Debug.Assert(lenType == LengthType.Bytes); int actual = encoding.GetByteCount(final); if (NeedsExpand(actual, len, nullTerminated, final)) { int nullLen = encoding.GetByteCount("\0"); int padLen = encoding.GetByteCount(new char[1] { padCharacter }); int grow = (int)len - actual; if (nullTerminated) { grow -= nullLen; } if (grow < 0 || (grow % padLen) != 0) { throw new PeachException(string.Format("Error, can not satisfy length requirement of {1} {2} when padding {3} {0}.", debugName, lengthType == LengthType.Bits ? len * 8 : len, lengthType.ToString().ToLower(), stringType)); } final += MakePad(grow / padLen); } } } int test; if (int.TryParse(final, out test)) { if (!Hints.ContainsKey("NumericalString")) { Hints.Add("NumericalString", new Hint("NumericalString", "true")); } } else { if (Hints.ContainsKey("NumericalString")) { Hints.Remove("NumericalString"); } } return(final); }
public static ActorStateProperty Deserialize(IClassNetCache classMap, IDictionary <int, string> objectIndexToName, BitReader br) { var asp = new ActorStateProperty(); var maxPropId = classMap.MaxPropertyId; var className = objectIndexToName[classMap.ObjectIndex]; asp.PropertyId = br.ReadInt32Max(maxPropId + 1); asp.MaxPropertyId = maxPropId; asp.PropertyName = objectIndexToName[classMap.GetProperty(asp.PropertyId).Index]; var startPosition = br.Position; asp.Data = new List <object>(); switch (asp.PropertyName) { case "TAGame.GameEvent_TA:ReplicatedStateIndex": asp.Data.Add(br.ReadInt32Max(140)); // number is made up, I dont know the max yet // TODO: Revisit this. It might work well enough, but looks fishy asp.IsComplete = true; break; case "TAGame.RBActor_TA:ReplicatedRBState": asp.Data.Add(RigidBodyState.Deserialize(br)); asp.IsComplete = true; break; case "TAGame.Team_TA:GameEvent": case "TAGame.CrowdActor_TA:ReplicatedOneShotSound": case "TAGame.CrowdManager_TA:ReplicatedGlobalOneShotSound": case "Engine.Actor:Owner": case "Engine.GameReplicationInfo:GameClass": case "Engine.PlayerReplicationInfo:Team": case "TAGame.CrowdManager_TA:GameEvent": case "Engine.Pawn:PlayerReplicationInfo": // Actor Id. Ties cars to players case "TAGame.PRI_TA:ReplicatedGameEvent": case "TAGame.Ball_TA:GameEvent": case "TAGame.CrowdActor_TA:GameEvent": case "TAGame.Team_TA:LogoData": asp.Data.Add(br.ReadBit()); asp.Data.Add(br.ReadInt32()); asp.IsComplete = true; break; case "TAGame.CarComponent_TA:Vehicle": asp.Data.Add(br.ReadBit()); asp.Data.Add(br.ReadInt32()); asp.IsComplete = true; break; case "Engine.GameReplicationInfo:ServerName": case "Engine.PlayerReplicationInfo:PlayerName": case "TAGame.Team_TA:CustomTeamName": asp.Data.Add(br.ReadString()); asp.IsComplete = true; break; case "TAGame.GameEvent_Soccar_TA:SecondsRemaining": case "TAGame.GameEvent_TA:ReplicatedGameStateTimeRemaining": case "TAGame.CrowdActor_TA:ReplicatedCountDownNumber": case "TAGame.GameEvent_Team_TA:MaxTeamSize": case "Engine.PlayerReplicationInfo:PlayerID": case "TAGame.PRI_TA:TotalXP": case "TAGame.PRI_TA:MatchScore": case "TAGame.GameEvent_Soccar_TA:RoundNum": case "TAGame.GameEvent_TA:BotSkill": case "TAGame.PRI_TA:MatchShots": case "TAGame.PRI_TA:MatchSaves": case "ProjectX.GRI_X:ReplicatedGamePlaylist": case "Engine.TeamInfo:Score": case "Engine.PlayerReplicationInfo:Score": case "TAGame.PRI_TA:MatchGoals": case "TAGame.PRI_TA:MatchAssists": case "ProjectX.GRI_X:ReplicatedGameMutatorIndex": case "TAGame.PRI_TA:Title": asp.Data.Add(br.ReadInt32()); asp.IsComplete = true; break; case "TAGame.VehiclePickup_TA:ReplicatedPickupData": // 1011101000000000000000000000000001 // 0111111111111111111111111111111110 // 1111001000000000000000000000000001 // 1000001000000000000000000000000001 // 1111110000000000000000000000000001 // 1101110000000000000000000000000001 // reverify the above data, especially the short stuff asp.Data.Add(br.ReadBit()); asp.Data.Add(br.ReadInt32()); asp.Data.Add(br.ReadBit()); asp.IsComplete = true; break; case "Engine.PlayerReplicationInfo:Ping": case "TAGame.Vehicle_TA:ReplicatedSteer": case "TAGame.Vehicle_TA:ReplicatedThrottle": // 0: full reverse, 128: No throttle. 255 full throttle/boosting case "TAGame.PRI_TA:CameraYaw": case "TAGame.PRI_TA:CameraPitch": case "TAGame.Ball_TA:HitTeamNum": case "TAGame.GameEvent_Soccar_TA:ReplicatedScoredOnTeam": case "TAGame.CarComponent_Boost_TA:ReplicatedBoostAmount": // Always 255? asp.Data.Add(br.ReadByte()); asp.IsComplete = true; break; case "Engine.Actor:Location": case "TAGame.CarComponent_Dodge_TA:DodgeTorque": asp.Data.Add(Vector3D.Deserialize(br)); asp.IsComplete = true; break; case "Engine.Actor:bCollideWorld": case "Engine.PlayerReplicationInfo:bReadyToPlay": case "TAGame.Vehicle_TA:bReplicatedHandbrake": case "TAGame.Vehicle_TA:bDriving": case "Engine.Actor:bNetOwner": case "Engine.Actor:bBlockActors": case "TAGame.GameEvent_TA:bHasLeaveMatchPenalty": case "TAGame.PRI_TA:bUsingBehindView": case "TAGame.PRI_TA:bUsingSecondaryCamera": case "TAGame.GameEvent_TA:ActivatorCar": case "TAGame.GameEvent_Soccar_TA:bOverTime": case "ProjectX.GRI_X:bGameStarted": case "Engine.Actor:bCollideActors": case "TAGame.PRI_TA:bReady": case "TAGame.RBActor_TA:bFrozen": case "Engine.Actor:bHidden": case "TAGame.CarComponent_FlipCar_TA:bFlipRight": case "Engine.PlayerReplicationInfo:bBot": case "Engine.PlayerReplicationInfo:bWaitingPlayer": case "TAGame.RBActor_TA:bReplayActor": case "TAGame.PRI_TA:bIsInSplitScreen": case "Engine.GameReplicationInfo:bMatchIsOver": case "TAGame.CarComponent_Boost_TA:bUnlimitedBoost": case "Engine.PlayerReplicationInfo:bIsSpectator": case "TAGame.GameEvent_Soccar_TA:bBallHasBeenHit": asp.Data.Add(br.ReadBit()); asp.IsComplete = true; break; case "TAGame.CarComponent_TA:ReplicatedActive": // The car component is active if (ReplicatedValue%2)!=0 // For now I am only adding that logic to the JSON serializer asp.Data.Add(br.ReadByte()); asp.IsComplete = true; break; case "Engine.PlayerReplicationInfo:UniqueId": case "TAGame.PRI_TA:PartyLeader": asp.Data.Add(UniqueId.Deserialize(br)); asp.IsComplete = true; break; case "TAGame.PRI_TA:ClientLoadout": asp.Data.Add(ClientLoadout.Deserialize(br)); asp.IsComplete = true; break; case "TAGame.PRI_TA:CameraSettings": asp.Data.Add(CameraSettings.Deserialize(br)); asp.IsComplete = true; break; case "TAGame.Car_TA:TeamPaint": asp.Data.Add(TeamPaint.Deserialize(br)); asp.IsComplete = true; break; case "ProjectX.GRI_X:GameServerID": asp.Data.Add(br.ReadInt32()); asp.Data.Add(br.ReadInt32()); asp.IsComplete = true; break; case "ProjectX.GRI_X:Reservations": asp.Data.Add(Reservation.Deserialize(br)); asp.IsComplete = true; break; case "TAGame.Ball_TA:ReplicatedExplosionData": // 0 01010111000000000000000000000000 0011 01010010000001 01111010001011 00000110000001 // 0 01110111000000000000000000000000 0011 10011110010001 11111010001011 01010110000001 // 0 11010111000000000000000000000000 0011 00001111011110 11000110001011 10111010000001 // 0 11010111000000000000000000000000 0011 10011000100001 00100110001011 10111010000001 // 0 00110111000000000000000000000000 0011 00000001010001 11000110001011 00100110000001 asp.Data.Add(br.ReadBit()); asp.Data.Add(br.ReadInt32()); asp.Data.Add(Vector3D.Deserialize(br)); // Almost definitely position asp.IsComplete = true; break; case "TAGame.Car_TA:ReplicatedDemolish": asp.Data.Add(ReplicatedDemolish.Deserialize(br)); asp.IsComplete = true; break; case "TAGame.GameEvent_Soccar_TA:ReplicatedMusicStinger": asp.Data.Add(br.ReadBit()); asp.Data.Add(br.ReadByte()); asp.Data.Add(br.ReadInt32()); asp.IsComplete = true; break; case "TAGame.CarComponent_FlipCar_TA:FlipCarTime": case "TAGame.Ball_TA:ReplicatedBallScale": case "TAGame.CarComponent_Boost_TA:RechargeDelay": case "TAGame.CarComponent_Boost_TA:RechargeRate": case "TAGame.Ball_TA:ReplicatedAddedCarBounceScale": case "TAGame.Ball_TA:ReplicatedBallMaxLinearSpeedScale": case "TAGame.Ball_TA:ReplicatedWorldBounceScale": case "TAGame.CarComponent_Boost_TA:BoostModifier": case "Engine.Actor:DrawScale": case "TAGame.CrowdActor_TA:ModifiedNoise": asp.Data.Add(br.ReadFloat()); asp.IsComplete = true; break; case "TAGame.GameEvent_SoccarPrivate_TA:MatchSettings": asp.Data.Add(PrivateMatchSettings.Deserialize(br)); asp.IsComplete = true; break; case "TAGame.PRI_TA:ClientLoadoutOnline": asp.Data.Add(br.ReadInt32()); asp.Data.Add(br.ReadInt32()); asp.Data.Add(br.ReadInt32()); asp.IsComplete = true; break; default: throw new NotSupportedException(string.Format("Unknown property {0}. Next bits in the data are {1}. Figure it out!", asp.PropertyName, br.GetBits(br.Position, Math.Min(4096, br.Length - br.Position)).ToBinaryString())); } asp.KnownDataBits = br.GetBits(startPosition, br.Position - startPosition); return(asp); }
public PictureParameterSet(ReadOnlySpan <byte> span) { BitReader reader = new BitReader(span); // 7.3.2.3.1 General picture parameter set RBSP syntax, page 38 pps_pic_parameter_set_id = reader.unsignedGolomb(); pps_seq_parameter_set_id = reader.unsignedGolomb(); dependent_slice_segments_enabled_flag = reader.readBit(); output_flag_present_flag = reader.readBit(); num_extra_slice_header_bits = reader.readByte(3); sign_data_hiding_enabled_flag = reader.readBit(); cabac_init_present_flag = reader.readBit(); num_ref_idx_l0_default_active = reader.unsignedGolomb() + 1; num_ref_idx_l1_default_active = reader.unsignedGolomb() + 1; init_qp = reader.signedGolomb() + 26; constrained_intra_pred_flag = reader.readBit(); transform_skip_enabled_flag = reader.readBit(); cu_qp_delta_enabled_flag = reader.readBit(); if (cu_qp_delta_enabled_flag) { diff_cu_qp_delta_depth = reader.unsignedGolomb(); } else { diff_cu_qp_delta_depth = 0; // When not present, the value of diff_cu_qp_delta_depth is inferred to be equal to 0. } pps_cb_qp_offset = reader.signedGolomb(); pps_cr_qp_offset = reader.signedGolomb(); pps_slice_chroma_qp_offsets_present_flag = reader.readBit(); weighted_pred_flag = reader.readBit(); weighted_bipred_flag = reader.readBit(); transquant_bypass_enabled_flag = reader.readBit(); tiles_enabled_flag = reader.readBit(); entropy_coding_sync_enabled_flag = reader.readBit(); num_tile_columns = num_tile_rows = 0; column_width = row_height = null; loop_filter_across_tiles_enabled_flag = false; if (tiles_enabled_flag) { num_tile_columns = reader.unsignedGolomb() + 1; num_tile_rows = reader.unsignedGolomb() + 1; bool uniform_spacing_flag = reader.readBit(); if (!uniform_spacing_flag) { column_width = new uint[num_tile_columns - 1]; for (uint i = 0; i < num_tile_columns - 1; i++) { column_width[i] = reader.unsignedGolomb(); } row_height = new uint[num_tile_rows - 1]; for (uint i = 0; i < num_tile_rows - 1; i++) { row_height[i] = reader.unsignedGolomb(); } } loop_filter_across_tiles_enabled_flag = reader.readBit(); } pps_loop_filter_across_slices_enabled_flag = reader.readBit(); deblocking_filter_control_present_flag = reader.readBit(); deblocking_filter_override_enabled_flag = false; pps_deblocking_filter_disabled_flag = false; pps_beta_offset_div2 = pps_tc_offset_div2 = 0; if (deblocking_filter_control_present_flag) { deblocking_filter_override_enabled_flag = reader.readBit(); pps_deblocking_filter_disabled_flag = reader.readBit(); if (!pps_deblocking_filter_disabled_flag) { pps_beta_offset_div2 = reader.signedGolomb(); pps_tc_offset_div2 = reader.signedGolomb(); } } pps_scaling_list_data_present_flag = reader.readBit(); if (pps_scaling_list_data_present_flag) { scalingList = new ScalingList(); scalingList.read(ref reader); } else { scalingList = null; } }
internal static object ReadFieldType(BitReader reader, Type type) { return(ReadFieldType(reader, type, null)); }
/// <summary> /// Decode LZW stream in GIF, probably copied from somewhere else but I can't remember. If you believe that I copied your code, contact me and I'll credit you. /// </summary> public byte[] Decode(BitReader br, int codeSize) { using (var ms = new MemoryStream()) using (var bw = new BitWriter(ms)) { var dict = new Tuple <int, int> [LzwMaxCode + 1]; for (var i = 0; i < (1 << codeSize); ++i) { dict[i] = new Tuple <int, int>(LzwMaxCode + 1, i); } var initCodeSize = codeSize; var clearCode = 1 << codeSize; var eofCode = clearCode + 1; var prevCode = 0; var currDictIdx = 0; var currDictMax = 0; ++codeSize; while (true) { var code = br.ReadBits(codeSize); if (code == clearCode) { codeSize = initCodeSize; currDictIdx = clearCode + 2; ++codeSize; currDictMax = (1 << codeSize); prevCode = br.ReadBits(codeSize); if (prevCode >= (1 << initCodeSize)) { throw new GifDecodingException("no literal after clear"); } bw.WriteBits(prevCode, GifByteSize); } else if (code == eofCode) { break; } else { if (code > currDictIdx) { throw new GifDecodingException("code > currDictIdx"); } int newItem; if (code < currDictIdx) { newItem = WriteDictString(bw, GifByteSize, dict, code); } else { newItem = WriteDictString(bw, GifByteSize, dict, prevCode); bw.WriteBits(newItem, GifByteSize); } if (currDictIdx < currDictMax) { dict[currDictIdx++] = new Tuple <int, int>(prevCode, newItem); } prevCode = code; } if (currDictIdx == currDictMax) { if (currDictMax < LzwMaxCode) { ++codeSize; currDictMax = (1 << codeSize); } } } bw.Flush(); return(ms.GetBuffer()); } }
static /*async Task*/ void Main() { var splitted = "10 20 83 45 E1 79 04 0C FE 5C 60 64 D9 88 1A 4F B8 DA 05 9A 0D BF 97 07 40 1C 20 DB CA A6 A2 06 01 90 74 97 1A 01 20 F6 6A B6 76 80 E0 8E 80 40 0D 01 17 18 59 36 A2 C6 13 AE 76 81 5A C3 EF E5 01 30 00 00 00 00 00 00 00 00 A0 D7 10 B2 10 7B 35 5B FB 74 17 00 10 26 01 22 60 3A 6C 02 F0 40 30 02".Split(' '); List <byte> byteList = new List <byte>(); foreach (string hex in splitted) { byte value = Convert.ToByte(hex, 16); byteList.Add(value); } var byteArray = byteList.ToArray(); var reader = new BitReader(byteArray); for (int i = 0; i < byteArray.Length * 8; i++) { var bytesIJustRead = reader.ReadBytesAt(i, 4); Console.WriteLine(BitConverter.ToString(bytesIJustRead) + "int:" + BitConverter.ToUInt32(bytesIJustRead)); } //12 // using( var excelPackage = new ExcelPackage() ) // { // ExcelWorksheet replayWorksheet = excelPackage.Workbook.Worksheets.Add( "replayName" ); // ExcelWorksheet replayData = excelPackage.Workbook.Worksheets.Add( "replayData" ); // ExcelWorksheet checkpoint = excelPackage.Workbook.Worksheets.Add( "checkpoint" ); // DataDumper replayHeaderDumper = new DataDumper( replayWorksheet ); // DataDumper replayDataDumper = new DataDumper( replayData ); // DataDumper checkpointDumper = new DataDumper( checkpoint ); // foreach( var path in new ReplayFetcher().GetAllReplaysPath() ) // { // if(!path.Contains("Unsaved") || !path.Contains( "03.28" ) ) // { // continue; // } // replayHeaderDumper.DumpValue( Path.GetFileNameWithoutExtension( path ) ); // using( var replayStream = File.OpenRead( path ) ) // using( var fortniteDataGrabber = new FortniteDataGrabber( replayStream ) ) // { // bool success =await fortniteDataGrabber.Visit(); // if( fortniteDataGrabber.ReplayInfo == null || fortniteDataGrabber.ReplayInfo.ReplayHeader == null ) // { // replayHeaderDumper.DumpValue( "ReplayInfo is NULL." ); // replayHeaderDumper.ReturnToNewRow(); // continue; // } // ReplayInfo info = fortniteDataGrabber.ReplayInfo; // replayHeaderDumper.DumpValue( info.ReplayHeader.Compressed ); // replayHeaderDumper.DumpValue( info.ReplayHeader.IsLive ); // replayHeaderDumper.DumpValue( info.ReplayHeader.Changelist ); // replayHeaderDumper.DumpValue( info.ReplayHeader.FileVersion ); // replayHeaderDumper.DumpValue( info.ReplayHeader.FriendlyName ); // replayHeaderDumper.DumpValue( info.ReplayHeader.LengthInMs ); // replayHeaderDumper.DumpValue( info.ReplayHeader.NetworkVersion ); // replayHeaderDumper.DumpValue( info.ReplayHeader.Timestamp ); // replayHeaderDumper.DumpValue( info.ReplayHeader.TotalDataSizeInBytes ); // if( fortniteDataGrabber.ReplayInfo.DemoHeader == null ) // { // replayHeaderDumper.DumpValue( "Header chunk is NULL." ); // replayHeaderDumper.ReturnToNewRow(); // continue; // } // DemoHeader headerChunk = fortniteDataGrabber.ReplayInfo.DemoHeader; // replayHeaderDumper.DumpValue( headerChunk.Version ); // replayHeaderDumper.DumpValue( headerChunk.Branch ); // replayHeaderDumper.DumpValue( headerChunk.HeaderFlags ); // replayHeaderDumper.DumpValue( headerChunk.Major + "." + headerChunk.Minor+ "." + headerChunk.Patch ); // replayHeaderDumper.DumpValue( string.Join( "/", headerChunk.GameSpecificData ) ); // replayHeaderDumper.DumpValue( fortniteDataGrabber.Error ); // //string test =""; // //if(headerChunk.GuidLike.Length>0) // //{ // // test = new Guid( headerChunk.GuidLike ).ToString(); // //} // //replayHeaderDumper.DumpValue( test ); // //replayHeaderDumper.DumpValue( headerChunk.HeaderVersion ); // //replayHeaderDumper.DumpValue( headerChunk.NotSeasonNumber ); // //replayHeaderDumper.DumpValue( headerChunk.NotVersion ); // //foreach( byte[] replayDataDump in fortniteDataGrabber.ReplayDataDumps ) // //{ // // replayDataDumper.DumpValue(replayHeaderDumper.Row); // // replayDataDumper.DumpValue(BitConverter.ToString(replayDataDump)); // // replayDataDumper.ReturnToNewRow(); // // replayDataDumper.DumpValue( replayHeaderDumper.Row ); // // replayDataDumper.DumpValue( Encoding.ASCII.GetString( replayDataDump ) ); // // replayDataDumper.ReturnToNewRow(); // //} // int ij = 0; // foreach( byte[] checkpointDump in fortniteDataGrabber.CheckpointsDumps ) // { // checkpointDumper.DumpValue( replayHeaderDumper.Row ); // checkpointDumper.DumpValue( BitConverter.ToString( checkpointDump ) ); // checkpointDumper.ReturnToNewRow(); // checkpointDumper.DumpValue( replayHeaderDumper.Row ); // checkpointDumper.DumpValue( Encoding.ASCII.GetString( checkpointDump ) ); // checkpointDumper.ReturnToNewRow(); // using( var stream = File.OpenWrite( ij++ + ".dump" ) ) // { // stream.Write( checkpointDump, 0, checkpointDump.Length ); // } // } // Console.WriteLine( "Processed: " + Path.GetFileNameWithoutExtension( path ) ); // replayHeaderDumper.ReturnToNewRow(); // } // } // excelPackage.SaveAs( new FileInfo( "ExcelExport.xlsx" ) ); // } // } // } // class DataDumper // { // readonly ExcelWorksheet _excelWorksheet; // int _rowNumber; // int _colNumber; // public int Row { get => _rowNumber; } // public DataDumper( ExcelWorksheet excelWorksheet ) // { // _rowNumber = 1; // _colNumber = 1; // _excelWorksheet = excelWorksheet; // } // public void DumpValue( object dataToDump ) // { // _excelWorksheet.SetValue( _rowNumber, _colNumber, dataToDump ); // _colNumber++; // } // public int ReturnToNewRow() // { // _colNumber = 1; // _rowNumber++; // return _rowNumber; // } //// byte[] toCompress = Encoding.ASCII.GetBytes( "testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest" ); //// foreach(var compression in (IEnumerable<OodleBinding.OodleFormat>) Enum.GetValues( typeof(OodleBinding.OodleFormat ) ) ) //// { //// using(Stream file = File.OpenWrite( "dumpcompress." + compression.ToString() ) ) //// { //// byte[] result = OodleBinding.Compress( toCompress, toCompress.Length, compression, OodleBinding.OodleCompressionLevel.VeryFast ); //// file.Write(result ); //// //file.Write( replayDataDump ); //// } }
public static void skip(ref BitReader reader, bool profilePresentFlag, int maxNumSubLayers) { // 7.3.3 Profile, tier and level syntax, page 42 if (profilePresentFlag) { byte general_profile_space = reader.readByte(2); bool general_tier_flag = reader.readBit(); byte general_profile_idc = reader.readByte(5); uint general_profile_compatibility_flag = unchecked ((uint)reader.readInt(32)); bool general_progressive_source_flag = reader.readBit(); bool general_interlaced_source_flag = reader.readBit(); bool general_non_packed_constraint_flag = reader.readBit(); bool general_frame_only_constraint_flag = reader.readBit(); // Lots of stuff, depends on levels reader.skipBits(43); reader.skipBits(1); // general_reserved_zero_bit or general_inbld_flag } byte general_level_idc = reader.readByte(8); Span <eSubLayerFlags> subFlags = stackalloc eSubLayerFlags[maxNumSubLayers - 1]; for (int i = 0; i < maxNumSubLayers - 1; i++) { eSubLayerFlags flags = eSubLayerFlags.None; if (reader.readBit()) { flags |= eSubLayerFlags.ProfilePresent; } if (reader.readBit()) { flags |= eSubLayerFlags.LevelPresent; } subFlags[i] = flags; } if (maxNumSubLayers > 1) { for (int i = maxNumSubLayers - 1; i < 8; i++) { reader.skipBits(2); // reserved_zero_2bits } } for (int i = 0; i < maxNumSubLayers - 1; i++) { if (subFlags[i].HasFlag(eSubLayerFlags.ProfilePresent)) { reader.skipBits(8); // sub_layer_profile_space, sub_layer_tier_flag[ i ], sub_layer_profile_idc[ i ] reader.skipBits(32); // sub_layer_profile_compatibility_flag[ i ][ j ] reader.skipBits(4); // sub_layer_progressive_source_flag[ i ], sub_layer_interlaced_source_flag[ i ], sub_layer_non_packed_constraint_flag[ i ], sub_layer_frame_only_constraint_flag[ i ] // Lots of stuff reader.skipBits(43); reader.skipBits(1); // sub_layer_inbld_flag[ i ] or sub_layer_reserved_zero_bit[ i ] } if (subFlags[i].HasFlag(eSubLayerFlags.LevelPresent)) { reader.skipBits(8); } } }
public static Frame Deserialize(int maxChannels, ref List <ActorState> existingActorStates, string[] objectIdToName, IEnumerable <ClassNetCache> classNetCache, BitReader br) { var f = new Frame(); f.Position = br.Position; f.Time = br.ReadFloat(); f.Delta = br.ReadFloat(); f.ActorStates = new List <ActorState>(); ActorState lastActorState = null; while (br.ReadBit()) { lastActorState = ActorState.Deserialize(maxChannels, existingActorStates, f.ActorStates, objectIdToName, classNetCache, br); var existingActor = existingActorStates.Where(x => x.Id == lastActorState.Id).SingleOrDefault(); if (lastActorState.State != ActorStateState.Deleted) { if (existingActor == null) { existingActorStates.Add(lastActorState); } } else { existingActorStates = existingActorStates.Where(x => x.Id != lastActorState.Id).ToList(); } f.ActorStates.Add(lastActorState); #if DEBUG if (!lastActorState.Complete) { break; } #endif } #if DEBUG if (lastActorState == null || lastActorState.Complete) { f.Complete = true; } if (lastActorState != null && lastActorState.Failed) { f.Failed = true; } f.RawData = br.GetBits(f.Position, br.Position - f.Position).ToArray(); #endif return(f); }