Kernel_bin.Enemy_Attacks_Data.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. namespace OpenVIII
  5. {
  6. namespace Kernel
  7. {
  8. /// <summary>
  9. /// Enemy Attacks Data
  10. /// </summary>
  11. /// <see cref="https://github.com/alexfilth/doomtrain/wiki/Enemy-attacks"/>
  12. public class Enemy_Attacks_Data
  13. {
  14. public const int id = 3;
  15. public const int count = 384;
  16. public FF8String Name { get; private set; }
  17. public override string ToString() => Name;
  18. //0x00 2 bytes Offset to attack name
  19. public Magic_ID MagicID { get; private set; } //0x02 2 bytes Magic ID
  20. public byte CameraChange { get; private set; } //0x04 1 byte Camera Change
  21. public byte Unknown0 { get; private set; } //0x05 1 byte Unknown
  22. public AttackType Attack_type { get; private set; }//0x06 1 byte Attack type
  23. public byte Attack_power { get; private set; }//0x07 1 byte Attack power
  24. public AttackFlags Attack_flags { get; private set; }//0x08 1 byte Attack flags
  25. public byte Unknown1 { get; private set; }//0x09 1 byte Unknown
  26. public Element Element { get; private set; }//0x0A 1 byte Element
  27. public byte Unknown2 { get; private set; }//0x0B 1 byte Unknown
  28. public byte StatusAttack { get; private set; }//0x0C 1 byte Status attack enabler
  29. public byte Attack_parameter { get; private set; }//0x0D 1 byte Attack Parameter, HIT?
  30. public Persistent_Statuses Statuses0 { get; private set; }//0x0E 2 bytes status_0; //statuses 0-7
  31. public Battle_Only_Statuses Statuses1 { get; private set; }//0x10 4 bytes status_1; //statuses 8-31
  32. public int ID { get; private set; }
  33. public void Read(BinaryReader br, int i)
  34. {
  35. ID = i;
  36. if(i == 2)
  37. {
  38. Name = Memory.Kernel_Bin.BattleCommands[1].Name;
  39. }
  40. else
  41. Name = Memory.Strings.Read(Strings.FileID.KERNEL, id, i);
  42. br.BaseStream.Seek(2, SeekOrigin.Current);
  43. MagicID = (Magic_ID)br.ReadUInt16(); //0x02 2 bytes Magic ID
  44. CameraChange = br.ReadByte(); //0x04 1 byte Camera Change
  45. Unknown0 = br.ReadByte(); //0x05 1 byte Unknown Maybe something similar to Target.
  46. Attack_type = (AttackType) br.ReadByte();//0x06 1 byte Attack type
  47. Attack_power = br.ReadByte();//0x07 1 byte Attack power
  48. Attack_flags = (AttackFlags)(br.ReadByte());//0x08 1 byte Attack flags
  49. Unknown1 = br.ReadByte();//0x09 1 byte Unknown
  50. Element = (Element)br.ReadByte();//0x0A 1 byte Element
  51. Unknown2 = br.ReadByte();//0x0B 1 byte Unknown
  52. StatusAttack = br.ReadByte();//0x0C 1 byte Status attack enabler
  53. Attack_parameter = br.ReadByte();//0x0D 1 byte Attack Parameter
  54. //Statuses = new BitArray(br.ReadBytes(6));
  55. Statuses0 = (Persistent_Statuses)br.ReadUInt16();//0x0E 2 bytes status_0; //statuses 0-7
  56. Statuses1 = (Battle_Only_Statuses)br.ReadUInt32();//0x10 4 bytes status_1; //statuses 8-31
  57. }
  58. public static List<Enemy_Attacks_Data> Read(BinaryReader br)
  59. {
  60. var ret = new List<Enemy_Attacks_Data>(count);
  61. for (int i = 0; i < count; i++)
  62. {
  63. var tmp = new Enemy_Attacks_Data();
  64. tmp.Read(br, i);
  65. ret.Add(tmp);
  66. }
  67. return ret;
  68. }
  69. }
  70. }
  71. }