Archives.cs 3.2 KB

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