Information.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. using System.Diagnostics.CodeAnalysis;
  2. using System.IO;
  3. using System.Runtime.InteropServices;
  4. namespace OpenVIII.Battle.Dat
  5. {
  6. /// <summary>
  7. /// Section 7: Information & stats
  8. /// </summary>
  9. /// <see cref="http://forums.qhimm.com/index.php?topic=8741.0"/>
  10. /// <seealso cref="http://wiki.ffrtt.ru/index.php/FF8/FileFormat_DAT#Section_7:_Informations_.26_stats"/>
  11. /// <seealso cref="http://www.gjoerulv.com/"/>
  12. [StructLayout(LayoutKind.Sequential, Pack = 1, Size = ByteSize)]
  13. [SuppressMessage("ReSharper", "UnusedMember.Global")]
  14. public struct Information
  15. {
  16. #region Fields
  17. public const int ByteSize = 380;
  18. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)]
  19. private readonly byte[] _name;
  20. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  21. public readonly byte[] HP;
  22. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  23. public readonly byte[] STR;
  24. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  25. public readonly byte[] VIT;
  26. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  27. public readonly byte[] MAG;
  28. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  29. public readonly byte[] SPR;
  30. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  31. public readonly byte[] SPD;
  32. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  33. public readonly byte[] EVA;
  34. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
  35. public readonly Abilities[] AbilitiesLow;
  36. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
  37. public readonly Abilities[] AbilitiesMed;
  38. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
  39. public readonly Abilities[] AbilitiesHigh;
  40. /// <summary>
  41. /// Level med stats start
  42. /// </summary>
  43. public readonly byte MedLevelStart;
  44. /// <summary>
  45. /// Level high stats start
  46. /// </summary>
  47. public readonly byte HighLevelStart;
  48. public readonly UnkFlag UnkFlag;
  49. public readonly Flag1 BitSwitch;
  50. /// <summary>
  51. /// Cards per ifrit this is more of a drop, mod and rare mod
  52. /// </summary>
  53. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
  54. public readonly Cards.ID[] Card;
  55. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
  56. public readonly byte[] Devour;
  57. public readonly Flag2 BitSwitch2;
  58. public readonly UnkFlag UnkFlag2;
  59. public readonly ushort ExpExtra;
  60. public readonly ushort Exp;
  61. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  62. public readonly Magic[] DrawLow;
  63. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  64. public readonly Magic[] DrawMed;
  65. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  66. public readonly Magic[] DrawHigh;
  67. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  68. public readonly Saves.Item[] MugLow;
  69. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  70. public readonly Saves.Item[] MugMed;
  71. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  72. public readonly Saves.Item[] MugHigh;
  73. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  74. public readonly Saves.Item[] DropLow;
  75. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  76. public readonly Saves.Item[] DropMed;
  77. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
  78. public readonly Saves.Item[] DropHigh;
  79. public readonly byte MugRate;
  80. public readonly byte DropRate;
  81. public readonly byte Padding;
  82. public readonly byte AP;
  83. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
  84. public readonly byte[] Unk3;
  85. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
  86. public readonly byte[] Resistance;
  87. public readonly byte DeathResistanceMental;
  88. public readonly byte PoisonResistanceMental;
  89. public readonly byte PetrifyResistanceMental;
  90. public readonly byte DarknessResistanceMental;
  91. public readonly byte SilenceResistanceMental;
  92. public readonly byte BerserkResistanceMental;
  93. public readonly byte ZombieResistanceMental;
  94. public readonly byte SleepResistanceMental;
  95. public readonly byte HasteResistanceMental;
  96. public readonly byte SlowResistanceMental;
  97. public readonly byte StopResistanceMental;
  98. public readonly byte RegenResistanceMental;
  99. public readonly byte ReflectResistanceMental;
  100. public readonly byte DoomResistanceMental;
  101. public readonly byte SlowPetrifyResistanceMental;
  102. public readonly byte FloatResistanceMental;
  103. public readonly byte ConfuseResistanceMental;
  104. public readonly byte DrainResistanceMental;
  105. public readonly byte ExpulsionResistanceMental;
  106. public readonly byte PercentResistanceMental;
  107. #endregion Fields
  108. #region Properties
  109. public FF8String Name => _name;
  110. #endregion Properties
  111. #region Methods
  112. public Information CreateInstance(BinaryReader br, long byteOffset)
  113. {
  114. br.BaseStream.Seek(byteOffset, SeekOrigin.Begin);
  115. return Extended.ByteArrayToStructure<Information>(br.ReadBytes(ByteSize));
  116. }
  117. public override string ToString() => Name;
  118. #endregion Methods
  119. }
  120. }