RinoaLimitBreaksPart1.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. namespace OpenVIII
  6. {
  7. namespace Kernel
  8. {
  9. /// <summary>
  10. /// Rinoa limit breaks (part 1)
  11. /// </summary>
  12. /// <see cref="https://github.com/alexfilth/doomtrain/wiki/Rinoa-limit-breaks-%28part-1%29"/>
  13. public sealed class RinoaLimitBreaksPart1
  14. {
  15. private static RinoaLimitBreaksPart1 CreateInstance(BinaryReader br, int i)
  16. {
  17. return new RinoaLimitBreaksPart1(br, i);
  18. }
  19. public const int Count = 2;
  20. public const int ID = 24;
  21. public const int Size = 8;
  22. public override string ToString() => Name;
  23. public FF8String Name { get; }
  24. public FF8String Description { get; }
  25. public BitArray Unknown0 { get; }
  26. public Target Target { get; }
  27. public byte AbilityID { get; }
  28. public byte Unknown1 { get; }
  29. public int RinoaLimitID { get; }
  30. public Angelo Angelo { get; }
  31. private RinoaLimitBreaksPart1(BinaryReader br, int i)
  32. {
  33. RinoaLimitID = i;
  34. Angelo = i == 1 ? Angelo.Angel_Wing : Angelo.None;
  35. //0x0000 2 bytes Offset to name
  36. Name = Memory.Strings.Read(Strings.FileID.Kernel, ID, i * 2);
  37. //0x0002 2 bytes Offset to description
  38. Description = Memory.Strings.Read(Strings.FileID.Kernel, ID, i * 2 + 1);
  39. br.BaseStream.Seek(4, SeekOrigin.Current);
  40. //0x0004 1 byte Unknown Flags
  41. Unknown0 = new BitArray(br.ReadBytes(1));
  42. //0x0005 1 byte Target
  43. Target = (Target)br.ReadByte();
  44. //0x0006 1 byte Ability data ID
  45. AbilityID = br.ReadByte();
  46. //0x0007 1 byte Unknown / Unused
  47. Unknown1 = br.ReadByte();
  48. }
  49. public static IReadOnlyList<RinoaLimitBreaksPart1> Read(BinaryReader br)
  50. => Enumerable.Range(0, Count).Select(x => CreateInstance(br, x)).ToList().AsReadOnly();
  51. }
  52. }
  53. }