Kernel_bin.cs 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. namespace FF8
  5. {
  6. public partial class Kernel_bin
  7. {
  8. private ArchiveWorker aw;
  9. private readonly string ArchiveString = Memory.Archives.A_MAIN;
  10. public static Magic_Data[] MagicData { get; private set; }//0
  11. public static Dictionary<GFs, Junctionable_GFs_Data> JunctionableGFsData { get; private set; }//1
  12. public static Enemy_Attacks_Data[] EnemyAttacksData { get; private set; }//2
  13. public static Battle_Commands[] BattleCommands { get; private set; }//3
  14. public static Weapons_Data[] WeaponsData { get; private set; }//4
  15. public static Dictionary<Renzokeken_Level, Renzokuken_Finishers_Data> RenzokukenFinishersData; //5
  16. public static Dictionary<Characters, Character_Stats> CharacterStats { get; private set; }//6
  17. public static Battle_Items_Data[] BattleItemsData { get; private set; }//7
  18. public static Non_battle_Items_Data[] NonbattleItemsData { get; private set; } //8 //only strings
  19. public static Non_Junctionable_GFs_Attacks_Data[] NonJunctionableGFsAttacksData { get; private set; } //9
  20. public static Dictionary<Abilities, Command_ability_data> Commandabilitydata { get; private set; }//10
  21. public static Dictionary<Abilities,Junction_abilities> Junctionabilities { get; private set; }//11
  22. public static Dictionary<Abilities, Command_abilities> Commandabilities { get; private set; }//12
  23. public static Dictionary<Abilities, Stat_percent_abilities> Statpercentabilities { get; private set; }//13
  24. public static Dictionary<Abilities, Character_abilities> Characterabilities { get; private set; }//14
  25. public static Dictionary<Abilities, Party_abilities> Partyabilities { get; private set; }//15
  26. public static Dictionary<Abilities, GF_abilities> GFabilities { get; private set; }//16
  27. public static Dictionary<Abilities, Menu_abilities> Menuabilities { get; private set; }//17
  28. public static Temporary_character_limit_breaks[] Temporarycharacterlimitbreaks { get; private set; }//18
  29. public static Blue_magic_Quistis_limit_break[] BluemagicQuistislimitbreak { get; private set; }//19
  30. //public static Quistis_limit_break_parameters[] Quistislimitbreakparameters { get; private set; }//20
  31. public static Shot_Irvine_limit_break[] ShotIrvinelimitbreak { get; private set; }//21
  32. public static Duel_Zell_limit_break[] DuelZelllimitbreak { get; private set; }//22
  33. public static Zell_limit_break_parameters[] Zelllimitbreakparameters { get; private set; }//23
  34. public static Rinoa_limit_breaks_part_1[] Rinoalimitbreakspart1 { get; private set; }//24
  35. public static Rinoa_limit_breaks_part_2[] Rinoalimitbreakspart2 { get; private set; }//25
  36. public static Slot_array[] Slotarray { get; private set; }//26
  37. public static Selphie_limit_break_sets[] Selphielimitbreaksets { get; private set; }//27
  38. public static Devour[] Devour_ { get; private set; }//28
  39. public static Misc_section[] Miscsection { get; private set; }//29 //only_strings
  40. public static Misc_text_pointers[] Misctextpointers { get; private set; }//30
  41. public static Dictionary<Abilities, Equipable_Ability> EquipableAbilities; // contains 4 types;
  42. /// <summary>
  43. /// Read binary data from into structures and arrays
  44. /// </summary>
  45. /// <see cref="http://forums.qhimm.com/index.php?topic=16923.msg240609#msg240609"/>
  46. /// <seealso cref="https://github.com/alexfilth/doomtrain"/>
  47. /// <seealso cref="https://github.com/alexfilth/doomtrain/wiki/Kernel.bin"/>
  48. public Kernel_bin()
  49. {
  50. aw = new ArchiveWorker(ArchiveString);
  51. byte[] buffer = aw.GetBinaryFile(Memory.Strings.Filenames[(int)Strings.FileID.KERNEL]);
  52. List<Loc> subPositions = Memory.Strings.Files[Strings.FileID.KERNEL].subPositions;
  53. using (MemoryStream ms = new MemoryStream(buffer))
  54. using (BinaryReader br = new BinaryReader(ms))
  55. {
  56. BattleCommands = Battle_Commands.Read(br);
  57. ms.Seek(subPositions[Magic_Data.id], SeekOrigin.Begin);
  58. MagicData = Magic_Data.Read(br);
  59. ms.Seek(subPositions[Junctionable_GFs_Data.id], SeekOrigin.Begin);
  60. JunctionableGFsData = Junctionable_GFs_Data.Read(br);
  61. ms.Seek(subPositions[Enemy_Attacks_Data.id], SeekOrigin.Begin);
  62. EnemyAttacksData = Enemy_Attacks_Data.Read(br);
  63. ms.Seek(subPositions[Weapons_Data.id], SeekOrigin.Begin);
  64. WeaponsData = Weapons_Data.Read(br);
  65. ms.Seek(subPositions[Renzokuken_Finishers_Data.id], SeekOrigin.Begin);
  66. RenzokukenFinishersData = Renzokuken_Finishers_Data.Read(br);
  67. ms.Seek(subPositions[Character_Stats.id], SeekOrigin.Begin);
  68. CharacterStats = Character_Stats.Read(br);
  69. ms.Seek(subPositions[Battle_Items_Data.id], SeekOrigin.Begin);
  70. BattleItemsData = Battle_Items_Data.Read(br);
  71. NonbattleItemsData = Non_battle_Items_Data.Read();
  72. ms.Seek(subPositions[Non_Junctionable_GFs_Attacks_Data.id], SeekOrigin.Begin);
  73. NonJunctionableGFsAttacksData = Non_Junctionable_GFs_Attacks_Data.Read(br);
  74. ms.Seek(subPositions[Command_ability_data.id], SeekOrigin.Begin);
  75. Commandabilitydata = Command_ability_data.Read(br);
  76. ms.Seek(subPositions[Junction_abilities.id], SeekOrigin.Begin);
  77. Junctionabilities = Junction_abilities.Read(br);
  78. ms.Seek(subPositions[Command_abilities.id], SeekOrigin.Begin);
  79. Commandabilities = Command_abilities.Read(br);
  80. ms.Seek(subPositions[Stat_percent_abilities.id], SeekOrigin.Begin);
  81. Statpercentabilities = Stat_percent_abilities.Read(br);
  82. ms.Seek(subPositions[Character_abilities.id], SeekOrigin.Begin);
  83. Characterabilities = Character_abilities.Read(br);
  84. ms.Seek(subPositions[Party_abilities.id], SeekOrigin.Begin);
  85. Partyabilities = Party_abilities.Read(br);
  86. ms.Seek(subPositions[GF_abilities.id], SeekOrigin.Begin);
  87. GFabilities = GF_abilities.Read(br);
  88. ms.Seek(subPositions[Menu_abilities.id], SeekOrigin.Begin);
  89. Menuabilities = Menu_abilities.Read(br);
  90. ms.Seek(subPositions[Temporary_character_limit_breaks.id], SeekOrigin.Begin);
  91. Temporarycharacterlimitbreaks = Temporary_character_limit_breaks.Read(br);
  92. ms.Seek(subPositions[Blue_magic_Quistis_limit_break.id], SeekOrigin.Begin);
  93. BluemagicQuistislimitbreak = Blue_magic_Quistis_limit_break.Read(br);
  94. //ms.Seek(subPositions[Quistis_limit_break_parameters.id], SeekOrigin.Begin);
  95. //Quistislimitbreakparameters = Quistis_limit_break_parameters.Read(br);
  96. ms.Seek(subPositions[Shot_Irvine_limit_break.id], SeekOrigin.Begin);
  97. ShotIrvinelimitbreak = Shot_Irvine_limit_break.Read(br);
  98. ms.Seek(subPositions[Duel_Zell_limit_break.id], SeekOrigin.Begin);
  99. DuelZelllimitbreak = Duel_Zell_limit_break.Read(br);
  100. ms.Seek(subPositions[Zell_limit_break_parameters.id], SeekOrigin.Begin);
  101. Zelllimitbreakparameters = Zell_limit_break_parameters.Read(br);
  102. ms.Seek(subPositions[Rinoa_limit_breaks_part_1.id], SeekOrigin.Begin);
  103. Rinoalimitbreakspart1 = Rinoa_limit_breaks_part_1.Read(br);
  104. ms.Seek(subPositions[Rinoa_limit_breaks_part_2.id], SeekOrigin.Begin);
  105. Rinoalimitbreakspart2 = Rinoa_limit_breaks_part_2.Read(br);
  106. ms.Seek(subPositions[Slot_array.id], SeekOrigin.Begin);
  107. Slotarray = Slot_array.Read(br);
  108. ms.Seek(subPositions[Selphie_limit_break_sets.id], SeekOrigin.Begin);
  109. Selphielimitbreaksets = Selphie_limit_break_sets.Read(br);
  110. ms.Seek(subPositions[Devour.id], SeekOrigin.Begin);
  111. Devour_ = Devour.Read(br);
  112. ms.Seek(subPositions[Misc_section.id], SeekOrigin.Begin);
  113. Miscsection = Misc_section.Read(br);
  114. Misctextpointers = Misc_text_pointers.Read();
  115. EquipableAbilities = new Dictionary<Abilities,Equipable_Ability>(
  116. Stat_percent_abilities.count +
  117. Character_abilities.count +
  118. Party_abilities.count +
  119. GF_abilities.count);
  120. foreach (Abilities ability in (Abilities[])Enum.GetValues(typeof(Abilities)))
  121. {
  122. if (Statpercentabilities.ContainsKey(ability))
  123. EquipableAbilities[ability] = Statpercentabilities[ability];
  124. else if (Characterabilities.ContainsKey(ability))
  125. EquipableAbilities[ability] = Characterabilities[ability];
  126. else if (Partyabilities.ContainsKey(ability))
  127. EquipableAbilities[ability] = Partyabilities[ability];
  128. else if (Characterabilities.ContainsKey(ability))
  129. EquipableAbilities[ability] = Characterabilities[ability];
  130. }
  131. }
  132. }
  133. }
  134. }