Beispiel #1
0
        /// <summary>
        /// Checks if a <see cref="CacheVersion"/> is in Little-Endian or Big-Endian.
        /// </summary>
        /// <param name="version">The <see cref="CacheVersion"/> to check the endianness of.</param>
        /// <returns>True if the <see cref="CacheVersion"/> is Little-Endian, false otherwise.</returns>
        public static bool IsLittleEndian(CacheVersion version)
        {
            switch (version)
            {
            case CacheVersion.Halo3Retail:
            case CacheVersion.Halo3ODST:
            case CacheVersion.HaloReach:
                return(false);

            case CacheVersion.Halo2Xbox:
            case CacheVersion.Halo2Vista:
            case CacheVersion.HaloOnline106708:
            case CacheVersion.HaloOnline235640:
            case CacheVersion.HaloOnline301003:
            case CacheVersion.HaloOnline327043:
            case CacheVersion.HaloOnline372731:
            case CacheVersion.HaloOnline416097:
            case CacheVersion.HaloOnline430475:
            case CacheVersion.HaloOnline454665:
            case CacheVersion.HaloOnline449175:
            case CacheVersion.HaloOnline498295:
            case CacheVersion.HaloOnline530605:
            case CacheVersion.HaloOnline532911:
            case CacheVersion.HaloOnline554482:
            case CacheVersion.HaloOnline571627:
            case CacheVersion.HaloOnline700123:
            case CacheVersion.HaloReachMCCInsiderM35:
                return(true);

            default:
                throw new NotImplementedException(version.ToString());
            }
        }
Beispiel #2
0
        /// <summary>
        /// Convert to specified Cache Version.
        /// </summary>
        /// <param name="targetVersion"></param>
        public void ConvertBlf(CacheVersion targetVersion)
        {
            switch (Version)
            {
            case CacheVersion.Halo3Retail:
            case CacheVersion.Halo3Beta:
                switch (targetVersion)
                {
                case CacheVersion.Halo3ODST:
                case CacheVersion.HaloOnline106708:
                    ConvertHalo3ToODSTScenarioChunk();
                    Version = targetVersion;
                    if (targetVersion == CacheVersion.HaloOnline106708)
                    {
                        Format = EndianFormat.LittleEndian;
                    }
                    break;

                default:
                    throw new NotImplementedException($"Conversion from Halo 3 to {targetVersion.ToString()} not supported");
                }
                break;

            case CacheVersion.Halo3ODST:
            case CacheVersion.HaloOnline106708:
                if (targetVersion == CacheVersion.HaloOnline106708)
                {
                    Format = EndianFormat.LittleEndian;
                }
                return;

            default:
                throw new NotImplementedException($"Conversion from {Version.ToString()} to {targetVersion.ToString()} not supported");
            }
        }
Beispiel #3
0
        /// <summary>
        /// Gets the version string corresponding to an <see cref="CacheVersion"/> value.
        /// </summary>
        /// <param name="version">The version.</param>
        /// <returns>The version string.</returns>
        public static string GetBuildName(CacheVersion version)
        {
            switch (version)
            {
            case CacheVersion.Halo2Xbox:
                return("02.09.27.09809");

            case CacheVersion.Halo2Vista:
                return("11081.07.04.30.0934.main");

            case CacheVersion.Halo3Retail:
                return("11855.07.08.20.2317.halo3_ship");

            case CacheVersion.Halo3ODST:
                return("13895.09.04.27.2201.atlas_relea");

            case CacheVersion.HaloOnline106708:
                return("1.106708 cert_ms23");

            case CacheVersion.HaloOnline235640:
                return("1.235640 cert_ms23");

            case CacheVersion.HaloOnline301003:
                return("0.0.1.301003 cert_MS26_new");

            case CacheVersion.HaloOnline327043:
                return("0.4.1.327043 cert_MS26_new");

            case CacheVersion.HaloOnline372731:
                return("8.1.372731 Live");

            case CacheVersion.HaloOnline416097:
                return("0.0.416097 Live");

            case CacheVersion.HaloOnline430475:
                return("10.1.430475 Live");

            case CacheVersion.HaloOnline454665:
                return("10.1.454665 Live");

            case CacheVersion.HaloOnline449175:
                return("10.1.449175 Live");

            case CacheVersion.HaloOnline498295:
                return("11.1.498295 Live");

            case CacheVersion.HaloOnline530605:
                return("11.1.530605 Live");

            case CacheVersion.HaloOnline532911:
                return("11.1.532911 Live");

            case CacheVersion.HaloOnline554482:
                return("11.1.554482 Live");

            case CacheVersion.HaloOnline571627:
                return("11.1.571627 Live");

            case CacheVersion.HaloOnline700123:
                return("12.1.700123 cert_ms30_oct19");

            case CacheVersion.HaloReach:
                return("11860.10.07.24.0147.omaha_relea");

            case CacheVersion.HaloReachMCCInsiderM35:
                return("Jun 24 2019 00:36:03");

            default:
                return(version.ToString());
            }
        }
Beispiel #4
0
        private string SetLocalesKey()
        {
            switch (Version)
            {
            case CacheVersion.Halo3Retail:
            case CacheVersion.Halo3ODST:
                return("");

            case CacheVersion.HaloReach:
                return("BungieHaloReach!");

            case CacheVersion.HaloReachMCC824:
                return("");

            default:
                throw new ArgumentException(nameof(Version), new NotSupportedException(Version.ToString()));
            }
        }
        private void Analyze(Type mainType, CacheVersion version)
        {
            // Get the attribute for the main structure type
            Structure = TagStructure.GetTagStructureAttribute(mainType, version);
            if (Structure == null)
            {
                throw new InvalidOperationException($"No `{nameof(TagStructureAttribute)}` for `{version.ToString()}` found on `{mainType.Name}`.");
            }

            // Scan through the type's inheritance hierarchy and analyze each TagStructure attribute
            var currentType = mainType;

            Types = new List <Type>();
            while (currentType != null)
            {
                var attrib = (currentType != mainType) ? TagStructure.GetTagStructureAttribute(currentType, version) : Structure;
                if (attrib != null)
                {
                    Types.Add(currentType);
                    TotalSize += attrib.Size;
                    if (attrib.Tag != null)
                    {
                        if (GroupTag.Value == -1)
                        {
                            GroupTag = new Tag(attrib.Tag);
                        }
                        else if (ParentGroupTag.Value == -1)
                        {
                            ParentGroupTag = new Tag(attrib.Tag);
                        }
                        else if (GrandparentGroupTag.Value == -1)
                        {
                            GrandparentGroupTag = new Tag(attrib.Tag);
                        }
                    }
                }
                currentType = currentType.BaseType;
            }
        }