Kernel_bin.Battle_Commands.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. namespace OpenVIII
  5. {
  6. public partial class Kernel_bin
  7. {
  8. /// <summary>
  9. /// Battle Commands
  10. /// </summary>
  11. /// <see cref="https://github.com/alexfilth/doomtrain/wiki/Battle-commands"/>
  12. public class Battle_Commands
  13. {
  14. public const int id = 0;
  15. public const int count = 39;
  16. private const int altlimitid = 18;
  17. public int ID { get; private set; }
  18. public FF8String Name { get; private set; }
  19. public FF8String Description { get; private set; }
  20. public override string ToString() => Name;
  21. //public byte[] OffsetName; //0x0000 2 bytes Offset to ability name
  22. //public byte[] OffsetDesc; //0x0002 2 bytes Offset to ability description
  23. /// <summary>
  24. /// Ability data ID
  25. /// </summary>
  26. public byte Ability { get; private set; } //0x0004 1 byte Ability data ID
  27. /// <summary>
  28. /// Unknown Flags
  29. /// </summary>
  30. public Debug_battleDat.Information.UnkFlag Flags { get; private set; } //0x0005 1 byte Unknown Flags
  31. /// <summary>
  32. /// Target
  33. /// </summary>
  34. public Target Target { get; private set; } //0x0006 1 byte Target
  35. /// <summary>
  36. /// Unknown / Unused
  37. /// </summary>
  38. public byte Unknown { get; private set; } //0x0007 1 byte Unknown / Unused
  39. public void Read(BinaryReader br, int i)
  40. {
  41. ID = i;
  42. if (ID == 17) //No Mercy
  43. {
  44. Name = Memory.Strings.Read(Strings.FileID.KERNEL, altlimitid, 0); //Fire Cross
  45. Description = Memory.Strings.Read(Strings.FileID.KERNEL, altlimitid, 1);
  46. }
  47. else if (ID == 18) //Sorcery
  48. {
  49. Name = Memory.Strings.Read(Strings.FileID.KERNEL, altlimitid, 2); //Ice Strike
  50. Description = Memory.Strings.Read(Strings.FileID.KERNEL, altlimitid, 3);
  51. }
  52. else if (ID == 20) //Limit #1
  53. {
  54. Name = Memory.Strings.Read(Strings.FileID.KERNEL, altlimitid, 4); //Desperado
  55. Description = Memory.Strings.Read(Strings.FileID.KERNEL, altlimitid, 5);
  56. }
  57. else if (ID == 21) //Limit #2
  58. {
  59. Name = Memory.Strings.Read(Strings.FileID.KERNEL, altlimitid, 6); //Blood Pain
  60. Description = Memory.Strings.Read(Strings.FileID.KERNEL, altlimitid, 7);
  61. }
  62. else if (ID == 22) //Limit #3
  63. {
  64. Name = Memory.Strings.Read(Strings.FileID.KERNEL, altlimitid, 8); //Massive Anchor
  65. Description = Memory.Strings.Read(Strings.FileID.KERNEL, altlimitid, 9);
  66. }
  67. else
  68. {
  69. Name = Memory.Strings.Read(Strings.FileID.KERNEL, id, i * 2);
  70. Description = Memory.Strings.Read(Strings.FileID.KERNEL, id, i * 2 + 1);
  71. }
  72. br.BaseStream.Seek(4, SeekOrigin.Current);
  73. Ability = br.ReadByte();
  74. Flags = (Debug_battleDat.Information.UnkFlag)br.ReadByte();
  75. Target = (Target)br.ReadByte();
  76. Unknown = br.ReadByte();
  77. }
  78. public static List<Battle_Commands> Read(BinaryReader br)
  79. {
  80. var ret = new List<Battle_Commands>(count);
  81. for (int i = 0; i < count; i++)
  82. {
  83. var tmp = new Battle_Commands();
  84. tmp.Read(br, i);
  85. ret.Add(tmp);
  86. }
  87. return ret;
  88. }
  89. }
  90. }
  91. }