JunctionAbilities.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using System.Linq;
  4. namespace OpenVIII
  5. {
  6. namespace Kernel
  7. {
  8. /// <summary>
  9. /// Junction Abilities Data
  10. /// </summary>
  11. /// <see cref="https://github.com/alexfilth/doomtrain/wiki/Junction-abilities"/>
  12. public sealed class JunctionAbilities : IAbility
  13. {
  14. #region Fields
  15. /// <summary>
  16. /// Section Count
  17. /// </summary>
  18. public const int Count = 20;
  19. /// <summary>
  20. /// Section ID
  21. /// </summary>
  22. public const int ID = 11;
  23. #endregion Fields
  24. #region Constructors
  25. private JunctionAbilities(BinaryReader br, int i)
  26. {
  27. //0x0000 2 bytes
  28. Name = Memory.Strings.Read(Strings.FileID.Kernel, ID, i * 2);
  29. //0x0002 2 bytes
  30. Description = Memory.Strings.Read(Strings.FileID.Kernel, ID, i * 2 + 1);
  31. br.BaseStream.Seek(4, SeekOrigin.Current);
  32. //0x0004 1 byte
  33. AP = br.ReadByte();
  34. //0x0005 3 byte J_Flag
  35. var tmp = br.ReadBytes(3);
  36. Flags = (JunctionAbilityFlags)(tmp[2] << 16 | tmp[1] << 8 | tmp[0]);
  37. }
  38. #endregion Constructors
  39. #region Properties
  40. public byte AP { get; }
  41. public FF8String Description { get; }
  42. /// <summary>
  43. /// Flags related to what abilities are enabled
  44. /// </summary>
  45. public JunctionAbilityFlags Flags { get; }
  46. public Icons.ID Icon { get; } = Icons.ID.Ability_Junction;
  47. public FF8String Name { get; }
  48. public byte Palette { get; } = Ability.DefaultPalette;
  49. #endregion Properties
  50. #region Methods
  51. public static Dictionary<Abilities, JunctionAbilities> Read(BinaryReader br)
  52. => Enumerable.Range(0, Count)
  53. .ToDictionary(i => (Abilities)i, i => CreateInstance(br, i));
  54. private static JunctionAbilities CreateInstance(BinaryReader br, int i)
  55. => new JunctionAbilities(br, i);
  56. #endregion Methods
  57. }
  58. }
  59. }