Kernel_bin.Command_ability_data.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System.Collections.Generic;
  2. using System.IO;
  3. namespace FF8
  4. {
  5. public partial class Kernel_bin
  6. {
  7. /// <summary>
  8. /// Command Abilities Data
  9. /// </summary>
  10. /// <see cref="https://github.com/alexfilth/doomtrain/wiki/Command-ability-data"/>
  11. public class Command_ability_data
  12. {
  13. public const int count = 12;
  14. public const int id = 10;
  15. public Abilities Ability { get; private set; }
  16. public Magic_ID MagicID { get; private set; }
  17. public byte[] Unknown0 { get; private set; }
  18. public Attack_Type Attack_Type { get; private set; }
  19. public byte Attack_Power { get; private set; }
  20. public Attack_Flags Attack_Flags { get; private set; }
  21. public byte Hit_Count { get; private set; }
  22. public Element Element { get; private set; }
  23. public byte Status_Attack { get; private set; }
  24. public Statuses0 Statuses0 { get; private set; }
  25. public Statuses1 Statuses1 { get; private set; }
  26. /// <summary>
  27. /// order is different so convertion is requried.
  28. /// </summary>
  29. private static Dictionary<int, Abilities> ConvertCommandAbilitytoAbility = new Dictionary<int, Abilities>
  30. {
  31. {0,Abilities.Recover},
  32. {1,Abilities.Revive},
  33. {2,Abilities.Treatment},
  34. {3,Abilities.MadRush},
  35. {4,Abilities.Doom},
  36. {5,Abilities.Absorb},
  37. {6,Abilities.LVDown},
  38. {7,Abilities.LVUp},
  39. {8,Abilities.Kamikaze},
  40. {9,Abilities.Devour},
  41. {10,Abilities.Card},
  42. {11,Abilities.Defend},
  43. };
  44. public static Dictionary<Abilities, Command_ability_data> Read(BinaryReader br)
  45. {
  46. var ret = new Dictionary<Abilities, Command_ability_data>(count);
  47. for (int i = 0; i < count; i++)
  48. {
  49. var tmp = new Command_ability_data();
  50. tmp.Read(br, ConvertCommandAbilitytoAbility[i]);
  51. ret.Add(ConvertCommandAbilitytoAbility[i], tmp);
  52. }
  53. return ret;
  54. }
  55. public void Read(BinaryReader br, Abilities i)
  56. {
  57. Ability = i;
  58. MagicID = (Magic_ID)br.ReadUInt16();
  59. //0x0000 2 bytes Magic ID
  60. Unknown0 = br.ReadBytes(2);
  61. //0x0002 2 bytes Unknown
  62. Attack_Type = (Attack_Type)br.ReadByte();
  63. //0x0004 1 byte Attack type
  64. Attack_Power = br.ReadByte();
  65. //0x0005 1 byte Attack power
  66. Attack_Flags = (Attack_Flags)br.ReadByte();
  67. //0x0006 1 byte Attack flags
  68. Hit_Count = br.ReadByte();
  69. //0x0007 1 byte Hit Count
  70. Element = (Element)br.ReadByte();
  71. //0x0008 1 byte Element
  72. Status_Attack = br.ReadByte();
  73. //0x0009 1 byte Status attack enabler
  74. Statuses0 = (Statuses0)br.ReadUInt16();
  75. Statuses1 = (Statuses1)br.ReadUInt32();
  76. //0x000A 6 bytes Statuses
  77. }
  78. }
  79. }
  80. }