Ejemplo n.º 1
0
            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();
            }
Ejemplo n.º 2
0
 public override void Read(CGameCtnCollection n, GameBoxReader r, GameBoxWriter unknownW)
 {
     _ = r.ReadString();
     _ = r.ReadInt32();
     _ = r.ReadString();
     _ = r.ReadString();
 }
Ejemplo n.º 3
0
            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();
            }
Ejemplo n.º 5
0
    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();
    }
Ejemplo n.º 6
0
    internal void Read(Stream stream)
    {
        Stream = stream;

        using var r = new GameBoxReader(stream);
        Read(r);
    }
Ejemplo n.º 7
0
 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());
 }
Ejemplo n.º 8
0
        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
        }
Ejemplo n.º 9
0
        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();
        }
Ejemplo n.º 10
0
 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));
     }
 }
Ejemplo n.º 11
0
            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);
            }
Ejemplo n.º 12
0
            public override void Read(CGameCtnMacroBlockInfo n, GameBoxReader r)
            {
                var version = r.ReadInt32();
                var nodrefs = r.ReadArray(r1 => r1.ReadNodeRef());

                r.ReadArray <int>(2);
            }
Ejemplo n.º 13
0
    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);
    }
Ejemplo n.º 14
0
    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);
    }
Ejemplo n.º 15
0
        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);
        }
Ejemplo n.º 16
0
 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()
     });
 }
Ejemplo n.º 17
0
            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
                    });
                }
            }
Ejemplo n.º 18
0
 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);
 }
Ejemplo n.º 19
0
 public override void Read(CGameCtnCollection n, GameBoxReader r)
 {
     _ = r.ReadString();
     _ = r.ReadInt32();
     _ = r.ReadString();
     _ = r.ReadString();
 }
Ejemplo n.º 20
0
 public override void Read(CGameCtnReplayRecord n, GameBoxReader r)
 {
     n.game = r.ReadString();
     U01    = r.ReadInt32();
     U02    = r.ReadInt32();
     U03    = r.ReadInt32();
     U04    = r.ReadString();
 }
Ejemplo n.º 21
0
 public override void Read(CGameCtnCollection n, GameBoxReader r)
 {
     _ = r.ReadByte();
     _ = r.ReadString();
     _ = r.ReadInt32();
     _ = r.ReadString();
     _ = r.ReadArray <int>(3);
 }
Ejemplo n.º 22
0
    /// <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);
    }
Ejemplo n.º 23
0
 public override void Read(CGamePlayerProfile n, GameBoxReader r)
 {
     var skins = r.ReadArray(r1 => new Skin
     {
         PlayerModel = r1.ReadIdent(),
         SkinFile    = r1.ReadString(),
         Checksum    = r1.ReadUInt32()
     });
 }
Ejemplo n.º 24
0
 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();
 }
Ejemplo n.º 25
0
 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();
 }
Ejemplo n.º 26
0
 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);
     });
 }
Ejemplo n.º 27
0
 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();
 }
Ejemplo n.º 28
0
 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();
 }
Ejemplo n.º 29
0
            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));
                });
            }
Ejemplo n.º 30
0
        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();
        }