BATTLE.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using static OpenVIII.Fields.Scripts.Jsm.Expression;
  3. namespace OpenVIII.Fields.Scripts.Instructions
  4. {
  5. /// <summary>
  6. /// trigger Battle encounter
  7. /// </summary>
  8. /// <see cref="http://wiki.ffrtt.ru/index.php?title=FF8/Field/Script/Opcodes/069_BATTLE"/>
  9. public sealed class BATTLE : JsmInstruction
  10. {
  11. #region Fields
  12. private readonly ushort _encounter;
  13. private readonly BFlags _flags;
  14. #endregion Fields
  15. #region Constructors
  16. public BATTLE(IJsmExpression encounter, IJsmExpression flags)
  17. {
  18. if (encounter is PSHI_L || encounter is PSHSM_W)
  19. {
  20. //requires service to evaluate value?
  21. _encounter = ushort.MaxValue;//so I set an invalid value here.
  22. }
  23. else
  24. _encounter = ((IConstExpression)encounter).UInt16();
  25. _flags = (BFlags)((IConstExpression)flags).Int32();
  26. }
  27. public BATTLE(int parameter, IStack<IJsmExpression> stack)
  28. : this(
  29. flags: stack.Pop(),
  30. encounter: stack.Pop())
  31. {
  32. }
  33. #endregion Constructors
  34. #region Enums
  35. [Flags]
  36. public enum BFlags : byte
  37. {
  38. Regular_battle = 0x0,
  39. No_escape = 0x1,
  40. /// <summary>
  41. /// (battle music keeps playing after win/loss)
  42. /// </summary>
  43. Disable_victory_fanfare = 0x2,
  44. Inherit_countdown_timer_from_field = 0x4,
  45. No_Item_XP_Gain = 0x8,
  46. Use_current_music_as_battle_music = 0x10,
  47. Force_preemptive_attacked = 0x20,
  48. Force_back_attack = 0x40,
  49. Unknown = 0x80
  50. }
  51. #endregion Enums
  52. #region Properties
  53. public ushort Encounter => _encounter;
  54. public BFlags Flags => _flags;
  55. #endregion Properties
  56. #region Methods
  57. public override string ToString() => $"{nameof(BATTLE)}({nameof(_encounter)}: {_encounter}, {nameof(_flags)}: {_flags})";
  58. #endregion Methods
  59. }
  60. }