public override void Read(CGameCtnMediaClipGroup n, GameBoxReader r, GameBoxWriter unknownW) { Version = r.ReadInt32(); var clips = r.ReadArray(i => r.ReadNodeRef<CGameCtnMediaClip>()); var triggers = r.ReadArray(i => { var coords = r.ReadArray(j => r.ReadInt3()); var u01 = r.ReadInt32(); var u02 = r.ReadInt32(); var u03 = r.ReadInt32(); var u04 = r.ReadInt32(); return new Trigger() { Coords = coords, U01 = u01, U02 = u02, U03 = u03, U04 = u04 }; }); n.Clips = clips.Select((clip, index) => Tuple.Create(clip, triggers[index]) ).ToList(); }
public override void Read(CGameCtnCollection n, GameBoxReader r, GameBoxWriter unknownW) { _ = r.ReadString(); _ = r.ReadInt32(); _ = r.ReadString(); _ = r.ReadString(); }
public override void Read(CGameCtnMediaBlockCameraPath n, GameBoxReader r, GameBoxWriter unknownW) { n.Keys = r.ReadArray(i => { var time = r.ReadSingle(); var position = r.ReadVec3(); var pitchYawRoll = r.ReadVec3(); // in radians var fov = r.ReadSingle(); var anchorRot = r.ReadBoolean(); var anchor = r.ReadInt32(); var anchorVis = r.ReadBoolean(); var target = r.ReadInt32(); var targetPosition = r.ReadVec3(); var a = r.ReadSingle(); // 1 var b = r.ReadSingle(); // -0.48 var c = r.ReadSingle(); // 0 var d = r.ReadSingle(); // 0 var e = r.ReadSingle(); return(new Key() { Time = time, Position = position, PitchYawRoll = pitchYawRoll, FOV = fov, AnchorRot = anchorRot, Anchor = anchor, AnchorVis = anchorVis, Target = target, TargetPosition = targetPosition, Unknown = new object[] { a, b, c, d, e } }); }); }
public override void Read(CGameCtnMediaBlockCameraCustom n, GameBoxReader r, GameBoxWriter unknownW) { n.Keys = r.ReadArray(i => { var time = r.ReadSingle(); var u01 = r.ReadInt32(); // 1 var u02 = r.ReadInt32(); // 0 var u03 = r.ReadInt32(); // 0 var position = r.ReadVec3(); var pitchYawRoll = r.ReadVec3(); // in radians var fov = r.ReadSingle(); var u04 = r.ReadInt32(); // 0 var u05 = r.ReadInt32(); // -1 var u06 = r.ReadInt32(); // 1 var u07 = r.ReadInt32(); // -1 var u08 = r.ReadSingle(); var u09 = r.ReadSingle(); var u10 = r.ReadSingle(); var u11 = r.ReadSingle(); var u12 = r.ReadSingle(); return(new Key() { Time = time, Position = position, PitchYawRoll = pitchYawRoll, FOV = fov, Unknown = new object[] { u01, u02, u03, u04, u05, u06, u07, u08, u09, u10, u11, u12 } }); }).ToList(); }
private void ReadEncrypted(GameBoxReader r) { var headerMD5 = r.ReadBytes(16); MetadataStart = r.ReadInt32(); // offset to metadata section DataStart = r.ReadInt32(); if (Version >= 2) { var gbxHeadersSize = r.ReadInt32(); var gbxHeadersComprSize = r.ReadInt32(); } if (Version >= 3) { r.ReadBytes(16); // unused } var flags = r.ReadInt32(); var folders = ReadFolders(r); ReadFiles(r, folders); ReadMetadata(); }
internal void Read(Stream stream) { Stream = stream; using var r = new GameBoxReader(stream); Read(r); }
public override void Read(CGameCtnReplayRecord n, GameBoxReader r) { Version = r.ReadInt32(); n.ghosts = r.ReadArray(r1 => r1.ReadNodeRef <CGameCtnGhost>() !); U01 = r.ReadInt32(); n.extras = r.ReadArray(r1 => r1.ReadInt64()); }
public override void Read(CGameCtnReplayRecord n, GameBoxReader r) { var size = r.ReadInt32(); if (size <= 0) { throw new Exception(); } var trackGbx = r.ReadBytes(size); n.challenge = Task.Run(() => { using var ms = new MemoryStream(trackGbx); return(GameBox.ParseNode <CGameCtnChallenge>(ms)); }); #if DEBUG n.challenge.ContinueWith(x => { if (!x.IsFaulted) { return; } var e = x.Exception?.InnerException; Debug.WriteLine(e?.Message); Debug.WriteLine(e?.StackTrace); }); #endif }
public override void Read(CGameCtnMediaClipGroup n, GameBoxReader r) { n.ClipsVersion = r.ReadInt32(); var clips = r.ReadArray(r1 => r1.ReadNodeRef <CGameCtnMediaClip>() !); var triggers = r.ReadArray(r1 => { var u01 = r1.ReadInt32(); var u02 = r1.ReadInt32(); var u03 = r1.ReadInt32(); var u04 = r1.ReadInt32(); var condition = (ECondition)r1.ReadInt32(); var conditionValue = r1.ReadSingle(); var coords = r1.ReadArray(r2 => r2.ReadInt3()); return(new Trigger() { Coords = coords, U01 = u01, U02 = u02, U03 = u03, U04 = u04, Condition = condition, ConditionValue = conditionValue }); }); n.Clips = clips.Select((clip, index) => new ClipTrigger(clip, triggers[index]) ).ToList(); }
internal static IEnumerable <T?> ParseEnumerable <T>(GameBoxReader r, int count) where T : CMwNod { for (var i = 0; i < count; i++) { yield return(Parse <T>(r)); } }
public override void Read(CGameCtnMacroBlockInfo n, GameBoxReader r, GameBoxWriter unknownW) { var version = r.ReadInt32(); var nodrefs = r.ReadArray(i => r.ReadNodeRef()); r.ReadArray <int>(2); }
public override void Read(CGameCtnMacroBlockInfo n, GameBoxReader r) { var version = r.ReadInt32(); var nodrefs = r.ReadArray(r1 => r1.ReadNodeRef()); r.ReadArray <int>(2); }
internal static T?Parse <T>(GameBoxReader r, uint?classID = null, IProgress <GameBoxReadProgress>?progress = null) where T : CMwNod { if (!classID.HasValue) { classID = r.ReadUInt32(); } if (classID == uint.MaxValue) { return(null); } classID = Remap(classID.Value); if (!NodeCacheManager.AvailableClasses.TryGetValue(classID.Value, out Type? type)) { throw new NotImplementedException($"Node ID 0x{classID.Value:X8} is not implemented. ({NodeCacheManager.Names.Where(x => x.Key == Chunk.Remap(classID.Value)).Select(x => x.Value).FirstOrDefault() ?? "unknown class"})"); } NodeCacheManager.AvailableClassConstructors.TryGetValue(classID.Value, out Func <CMwNod>?constructor); if (constructor is null) { throw new ThisShouldNotHappenException(); } var node = (T)constructor(); node.SetIDAndChunks(); Parse(node, r, progress); return(node); }
private NadeoPakFolder[] ReadFolders(GameBoxReader r) { var numFolders = r.ReadInt32(); var folders = new NadeoPakFolder[numFolders]; for (var i = 0; i < numFolders; i++) { var parentFolderIndex = r.ReadInt32(); // index into folders; -1 if this is a root folder var name = r.ReadString(); var folder = new NadeoPakFolder(name, parentFolderIndex == -1 ? null : folders[parentFolderIndex]); if (parentFolderIndex == -1) { Folders.Add(folder); } else { folders[parentFolderIndex].Folders.Add(folder); } folders[i] = folder; } if (folders.Length > 2 && folders[2].Name.Length > 4) { byte[] nameBytes = Encoding.Unicode.GetBytes(folders[2].Name); blowfish.Initialize(nameBytes, 4, 4); } return(folders); }
public static T Parse <T>(GameBoxReader r, uint?classID = null, IProgress <GameBoxReadProgress> progress = null) where T : CMwNod { if (!classID.HasValue) { classID = r.ReadUInt32(); } if (classID == uint.MaxValue) { return(null); } classID = Remap(classID.Value); if (!NodeCacheManager.AvailableClasses.TryGetValue(classID.Value, out Type type)) { throw new NotImplementedException($"Node ID 0x{classID.Value:X8} is not implemented. ({NodeCacheManager.Names.Where(x => x.Key == Chunk.Remap(classID.Value)).Select(x => x.Value).FirstOrDefault() ?? "unknown class"})"); } var node = (T)Activator.CreateInstance(type); Parse(node, r, progress); return(node); }
public override void Read(CGameCtnMediaBlockFxColors n, GameBoxReader r, GameBoxWriter unknownW) { n.Keys = r.ReadArray(i => new Key() { Time = r.ReadSingle(), Intensity = r.ReadSingle(), BlendZ = r.ReadSingle(), Distance = r.ReadSingle(), FarDistance = r.ReadSingle(), Inverse = r.ReadSingle(), Hue = r.ReadSingle(), Saturation = r.ReadSingle(), // from center Brightness = r.ReadSingle(), // from center Contrast = r.ReadSingle(), // from center RGB = r.ReadVec3(), U01 = r.ReadSingle(), U02 = r.ReadSingle(), U03 = r.ReadSingle(), U04 = r.ReadSingle(), FarInverse = r.ReadSingle(), FarHue = r.ReadSingle(), FarSaturation = r.ReadSingle(), // from center FarBrightness = r.ReadSingle(), // from center FarContrast = r.ReadSingle(), // from center FarRGB = r.ReadVec3(), FarU01 = r.ReadSingle(), FarU02 = r.ReadSingle(), FarU03 = r.ReadSingle(), FarU04 = r.ReadSingle() }); }
public override void Read(CGameCtnReplayRecord n, GameBoxReader r, GameBoxWriter unknownW) { var size = r.ReadInt32(); if (size > 0) { var trackGbx = r.ReadBytes(size); n.Challenge = Task.Run(() => { using (var ms = new MemoryStream(trackGbx)) return(GameBox.Parse <CGameCtnChallenge>(ms)); }); n.Challenge.ContinueWith(x => { #if DEBUG if (x.IsFaulted) { var e = x.Exception.InnerException; Debug.WriteLine(e.Message); Debug.WriteLine(e.StackTrace); } #endif }); } }
public override void Write(CPlugEntRecordData n, GameBoxWriter w, GameBoxReader unknownR) { w.Write(Version); w.Write(UncompressedSize); w.Write(CompressedSize); w.Write(Data, 0, Data.Length); }
public override void Read(CGameCtnCollection n, GameBoxReader r) { _ = r.ReadString(); _ = r.ReadInt32(); _ = r.ReadString(); _ = r.ReadString(); }
public override void Read(CGameCtnReplayRecord n, GameBoxReader r) { n.game = r.ReadString(); U01 = r.ReadInt32(); U02 = r.ReadInt32(); U03 = r.ReadInt32(); U04 = r.ReadString(); }
public override void Read(CGameCtnCollection n, GameBoxReader r) { _ = r.ReadByte(); _ = r.ReadString(); _ = r.ReadInt32(); _ = r.ReadString(); _ = r.ReadArray <int>(3); }
/// <exception cref="TextFormatNotSupportedException">Text-formatted GBX files are not supported.</exception> internal bool Read(GameBoxReader reader) { if (!reader.HasMagic(GameBox.Magic)) { Log.Write("GBX magic missing! Corrupted file or not a GBX file.", ConsoleColor.Red); return(false); } Log.Write("GBX recognized!", ConsoleColor.Green); Version = reader.ReadInt16(); Log.Write("- Version: " + Version.ToString()); if (Version >= 3) { ByteFormat = (GameBoxByteFormat)reader.ReadByte(); Log.Write("- Byte format: " + ByteFormat.ToString()); if (ByteFormat == GameBoxByteFormat.Text) { throw new TextFormatNotSupportedException(); } CompressionOfRefTable = (GameBoxCompression)reader.ReadByte(); Log.Write("- Ref. table compression: " + CompressionOfRefTable.ToString()); CompressionOfBody = (GameBoxCompression)reader.ReadByte(); Log.Write("- Body compression: " + CompressionOfBody.ToString()); if (Version >= 4) { UnknownByte = (char)reader.ReadByte(); Log.Write("- Unknown byte: " + UnknownByte.ToString()); } ID = CMwNod.Remap(reader.ReadUInt32()); Log.Write("- Class ID: 0x" + ID.Value.ToString("X8")); if (Version >= 6) { var userDataSize = reader.ReadInt32(); Log.Write($"- User data size: {(userDataSize / 1024f).ToString()} kB"); if (userDataSize > 0) { UserData = reader.ReadBytes(userDataSize); } } NumNodes = reader.ReadInt32(); Log.Write("- Number of nodes: " + NumNodes.ToString()); } Log.Write("Header completed!", ConsoleColor.Green); return(true); }
public override void Read(CGamePlayerProfile n, GameBoxReader r) { var skins = r.ReadArray(r1 => new Skin { PlayerModel = r1.ReadIdent(), SkinFile = r1.ReadString(), Checksum = r1.ReadUInt32() }); }
public override void Read(CGameCtnCollection n, GameBoxReader r) { _ = r.ReadId(); _ = r.ReadInt32(); _ = r.ReadArray(r1 => r1.ReadInt32()); _ = r.ReadInt32(); _ = r.ReadArray <float>(3); n.Vehicle = r.ReadIdent(); }
public override void Read(CGameCtnReplayRecord n, GameBoxReader r, GameBoxWriter unknownW) { Version = r.ReadInt32(); n.AuthorVersion = r.ReadInt32(); n.AuthorLogin = r.ReadString(); n.AuthorNickname = r.ReadString(); n.AuthorZone = r.ReadString(); n.AuthorExtraInfo = r.ReadString(); }
public override void Write(CGameCtnMediaBlockFxBloom n, GameBoxWriter w, GameBoxReader unknownR) { w.Write(n.Keys, x => { w.Write(x.Time); w.Write(x.Intensity); w.Write(x.Sensitivity); }); }
public override void Read(CGameCtnCollection n, GameBoxReader r, GameBoxWriter unknownW) { _ = r.ReadId(); _ = r.ReadInt32(); _ = r.ReadArray(x => r.ReadInt32()); _ = r.ReadInt32(); _ = r.ReadArray <float>(3); n.Vehicle = r.ReadIdent(); }
public override void Read(CGameCtnReplayRecord n, GameBoxReader r) { n.titleID = r.ReadId(); n.authorVersion = r.ReadInt32(); n.authorLogin = r.ReadString(); n.authorNickname = r.ReadString(); n.authorZone = r.ReadString(); n.authorExtraInfo = r.ReadString(); }
public override void Write(CGameCtnMediaClipGroup n, GameBoxWriter w, GameBoxReader unknownR) { w.Write(Version); w.Write(n.Clips, x => w.Write(x.Item1)); w.Write(n.Clips, x => { w.Write(x.Item2.Coords, y => w.Write(y)); }); }
public override void Read(CGameCtnReplayRecord n, GameBoxReader r) { Version = r.ReadInt32(); var u02 = r.ReadInt32(); n.ghosts = r.ReadArray(r1 => r1.ReadNodeRef <CGameCtnGhost>() !); var u03 = r.ReadInt32(); // millisecond length of something (usually record time + 0.5s) var u04 = r.ReadInt32(); }