Archives.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // ReSharper disable InconsistentNaming
  2. #pragma warning disable CS0649
  3. namespace OpenVIII
  4. {
  5. public static partial class Memory
  6. {
  7. public static class Archives
  8. {
  9. public static Archive ZZZ_MAIN { get; set; }
  10. public static Archive ZZZ_OTHER { get; set; }
  11. public static Archive A_BATTLE { get; set; }
  12. public static Archive A_FIELD { get; set; }
  13. public static Archive A_MAGIC { get; set; }
  14. public static Archive A_MAIN { get; set; }
  15. public static Archive A_MENU { get; set; }
  16. public static Archive A_WORLD { get; set; }
  17. public static Archive A_MOVIES { get; set; }
  18. public static void Init()
  19. {
  20. Memory.Log.WriteLine($"{nameof(Archive)}::{nameof(Init)}");
  21. var parent = new Archive(FF8Dir);
  22. ZZZ_MAIN = new Archive("main.zzz", true, parent);
  23. ZZZ_OTHER = new Archive("other.zzz", true, parent);
  24. A_BATTLE = new Archive("battle", FF8DirDataLang, ZZZ_MAIN);
  25. A_FIELD = new Archive("field", FF8DirDataLang, ZZZ_MAIN);
  26. A_MAGIC = new Archive("magic", FF8DirDataLang, ZZZ_MAIN);
  27. A_MAIN = new Archive("main", FF8DirDataLang, ZZZ_MAIN);
  28. A_MENU = new Archive("menu", FF8DirDataLang, ZZZ_MAIN);
  29. A_WORLD = new Archive("world", FF8DirDataLang, ZZZ_MAIN);
  30. A_MOVIES = new Archive("movies", FF8DirDataLang, ZZZ_OTHER, FF8DirData);
  31. /*var aw =*/
  32. ArchiveZzz.Load(ZZZ_MAIN); //try to load main.zzz also caches it.
  33. //This actually slows things down. I thought it might be a good idea but at least now we know.
  34. //MergeArchiveToZzz(aw); // try to merge all the file maps into the zzz map. Since all the binary data is in there.
  35. /*aw = */
  36. ArchiveZzz.Load(ZZZ_OTHER); //try to load other.zzz also caches it.
  37. }
  38. // ReSharper disable once UnusedMember.Local
  39. private static void MergeArchiveToZzz(ArchiveBase aw)
  40. {
  41. if (aw == null) return;
  42. void Merge(Archive a)
  43. {
  44. Log.WriteLine($"{nameof(Archive)}::{nameof(Init)}::{nameof(Merge)}\n\t{a} to {ZZZ_MAIN}");
  45. var fs = a.FS;
  46. var child = ArchiveWorker.Load(a);
  47. var fi = aw.ArchiveMap.FindString(ref fs, out var _);
  48. aw.ArchiveMap.MergeMaps(child.ArchiveMap, fi.Offset);
  49. }
  50. Merge(A_BATTLE);
  51. Merge(A_FIELD);
  52. Merge(A_MAGIC);
  53. Merge(A_MAIN);
  54. Merge(A_MENU);
  55. Merge(A_WORLD);
  56. aw.GetListOfFiles(true);
  57. ArchiveBase.PurgeCache();
  58. A_BATTLE = ZZZ_MAIN;
  59. A_FIELD = ZZZ_MAIN;
  60. A_MAGIC = ZZZ_MAIN;
  61. A_MAIN = ZZZ_MAIN;
  62. A_MENU = ZZZ_MAIN;
  63. A_WORLD = ZZZ_MAIN;
  64. }
  65. }
  66. }
  67. }