A collection of files.
Inheritance: Glare.Assets.ArchiveAsset
Exemple #1
0
        /// <summary>
        /// Initialise the state.
        /// </summary>
        /// <param name="manager"></param>
        /// <param name="rootPath"></param>
        /// <param name="fileManager"></param>
        /// <param name="archive"></param>
        public State(AlexandriaManager manager, string rootPath, FileManager fileManager, Archive archive = null)
            : base(manager, rootPath, fileManager)
        {
            if (archive != null)
                ArchivesMutable.Add(archive);
            foreach(var path in Directory.EnumerateFiles(RootPath, "*.bhd5")) {

            }
        }
Exemple #2
0
 /// <summary>Get the string archive from the <see cref="ItemArchiveId"/>.</summary>
 /// <param name="baseArchive"></param>
 /// <param name="id"></param>
 /// <param name="language"></param>
 /// <returns></returns>
 public static StringArchive GetStringArchive(Archive baseArchive, ItemArchiveId id, Language language = Language.English)
 {
     Archive itemArchive = GetItemLanguageArchive(baseArchive, language);
     if (itemArchive == null)
         return null;
     ArchiveRecord record = itemArchive.FindRecordById((int)id);
     if (record == null)
         return null;
     Asset contents = record.Contents;
     return contents as StringArchive;
 }
Exemple #3
0
 /// <summary>Get the item language archive, which contains the <see cref="ItemArchiveId"/> <see cref="StringArchive"/>s.</summary>
 /// <param name="baseArchive"></param>
 /// <param name="language"></param>
 /// <returns></returns>
 public static Archive GetItemLanguageArchive(Archive baseArchive, Language language = Language.English)
 {
     string path = string.Format(LanguageItemArchivePath, GetLanguageId(language));
     ArchiveRecord record = baseArchive.FindRecordByPath(path);
     if (record == null)
         return null;
     Asset contents = record.Contents;
     return contents as Archive;
 }
Exemple #4
0
 /// <summary>
 /// Initialise the state.
 /// </summary>
 /// <param name="manager"></param>
 /// <param name="rootPath"></param>
 /// <param name="fileManager"></param>
 /// <param name="archive"></param>
 public State(AlexandriaManager manager, string rootPath, FileManager fileManager, Archive archive = null)
     : base(manager, rootPath, fileManager)
 {
     if (archive != null)
     {
         ArchivesMutable.Add(archive);
     }
     foreach (var path in Directory.EnumerateFiles(RootPath, "*.bhd5"))
     {
     }
 }
Exemple #5
0
        internal ArchiveRecord(Archive archive, int index, BinaryReader reader, int recordHeaderSize)
            : base(archive, "")
        {
            archive.records.Add(this);
            Index = index;

            switch (archive.Variant) {
                case ArchiveVariant.V3:
                    reader.Require(0x40);
                    Size = reader.ReadInt32();
                    Offset = reader.ReadInt32();
                    Id = reader.ReadInt32();
                    Name = reader.ReadStringzAtUInt32(Archive.ShiftJis);
                    int size2 = reader.ReadInt32();
                    if (Size != size2)
                        throw new Exception();
                    fixedUncompressedSize = Size;
                    break;

                case ArchiveVariant.V4:
                    Compression = reader.ReadInt32(); // 2 or 3 - compression?
                    reader.ReadMatch(-1);
                    Size = reader.ReadInt64();
                    if (recordHeaderSize == 0x1C) {
                        Offset = reader.ReadInt64();
                        Name = reader.ReadStringzAtUInt32(Archive.ShiftJis);
                    } else {
                        fixedUncompressedSize = reader.ReadInt64();
                        Offset = reader.ReadUInt32();
                        Unknowns.ReadInt32s(reader, 1);
                        // 'Compression' = 2, Unknown = 0, Encoding = UTF8
                        Name = reader.ReadStringzAtUInt32(Archive.ShiftJis);
                    }
                    Id = DarkSouls.Archive.HashFilename(Name);
                    break;

                case ArchiveVariant.V5:
                    Id = reader.ReadInt32();
                    Size = reader.ReadInt32();
                    Offset = reader.ReadInt32();
                    reader.RequireZeroes(4); // NameOffset, but zero?

                    string foundName;
                    if (!Archive.KnownFiles.TryGetValue(Id, out foundName))
                        Name = string.Format("#{0:X}", Id);
                    else
                        Name = foundName;
                    break;

                default:
                    throw new NotImplementedException();
            }

            MoveIntoPath(Name);
        }
Exemple #6
0
 public ArchiveFileManager(Archive archive)
 {
     Archive = archive;
 }