/// <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")) { } }
/// <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; }
/// <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; }
/// <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")) { } }
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); }
public ArchiveFileManager(Archive archive) { Archive = archive; }