Example #1
0
        internal CacheFile(CacheArgs args)
        {
            if (!File.Exists(args.FileName))
            {
                throw Exceptions.FileNotFound(args.FileName);
            }

            FileName    = args.FileName;
            ByteOrder   = args.ByteOrder;
            BuildString = args.BuildString;
            CacheType   = args.CacheType;
            Metadata    = args.Metadata;

            HeaderTranslator   = new HeaderAddressTranslator(this);
            MetadataTranslator = new TagAddressTranslator(this);

            using (var reader = CreateReader(HeaderTranslator))
            {
                Header = reader.ReadObject <CacheHeader>();
                reader.Seek(Header.IndexAddress, SeekOrigin.Begin);
                TagIndex    = reader.ReadObject(new TagIndex(this));
                StringIndex = new StringIndex(this);

                TagIndex.ReadItems();
                StringIndex.ReadItems();
            }
        }
Example #2
0
        internal CacheFile(CacheArgs args)
        {
            if (!File.Exists(args.FileName))
            {
                throw Exceptions.FileNotFound(args.FileName);
            }

            FileName    = args.FileName;
            ByteOrder   = args.ByteOrder;
            BuildString = args.BuildString;
            CacheType   = args.CacheType;
            Metadata    = args.Metadata;

            HeaderTranslator   = new SectionAddressTranslator(this, 0);
            MetadataTranslator = new TagAddressTranslator(this);
            PointerExpander    = new PointerExpander(this);

            using (var reader = CreateReader(HeaderTranslator))
                Header = reader.ReadObject <CacheHeader>((int)CacheType);

            //change IndexPointer to use MetadataTranslator instead of HeaderTranslator
            Header.IndexPointer = new Pointer64(Header.IndexPointer.Value, MetadataTranslator);

            using (var reader = CreateReader(MetadataTranslator))
            {
                reader.Seek(Header.IndexPointer.Address, SeekOrigin.Begin);
                TagIndex    = reader.ReadObject(new TagIndex(this));
                StringIndex = new StringIndex(this);

                TagIndex.ReadItems();
                StringIndex.ReadItems();

                switch (CacheType)
                {
                case CacheType.MccHalo3:
                case CacheType.MccHalo3U4:
                    LocaleIndex = new LocaleIndex(this, 464, 80, 12);
                    break;

                case CacheType.MccHalo3ODST:
                    LocaleIndex = new LocaleIndex(this, 520, 80, 12);
                    break;
                }
            }

            Task.Factory.StartNew(() =>
            {
                TagIndex.GetGlobalTag("play")?.ReadMetadata <Halo3.cache_file_resource_layout_table>();
                TagIndex.GetGlobalTag("zone")?.ReadMetadata <Halo3.cache_file_resource_gestalt>();
                TagIndex.GetGlobalTag("scnr")?.ReadMetadata <Halo3.scenario>();
            });
        }
Example #3
0
 public CacheFile(string fileName) : this(CacheArgs.FromFile(fileName))
 {
 }