ADDMEMBER.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. namespace OpenVIII.Fields.Scripts.Instructions
  2. {
  3. /// <summary>
  4. /// Adds a PC to the available party (not to the active party).
  5. /// </summary>
  6. /// <see cref="http://wiki.ffrtt.ru/index.php?title=FF8/Field/Script/Opcodes/08C_ADDMEMBER"/>
  7. public sealed class ADDMEMBER : JsmInstruction
  8. {
  9. #region Fields
  10. /// <summary>
  11. /// Character ID
  12. /// </summary>
  13. private readonly Characters _characterId;
  14. #endregion Fields
  15. #region Constructors
  16. public ADDMEMBER(Characters characterId) => _characterId = characterId;
  17. public ADDMEMBER(int parameter, IStack<IJsmExpression> stack)
  18. : this(
  19. characterId: (Characters)((Jsm.Expression.PSHN_L)stack.Pop()).Int32())
  20. {
  21. }
  22. #endregion Constructors
  23. #region Methods
  24. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services) => sw.Format(formatterContext, services)
  25. .StaticType(nameof(IPartyService))
  26. .Method(nameof(IPartyService.AddPlayableCharacter))
  27. .Enum(_characterId)
  28. .Comment(nameof(ADDMEMBER));
  29. public override IAwaitable TestExecute(IServices services)
  30. {
  31. ServiceId.Party[services].AddPlayableCharacter(_characterId);
  32. return DummyAwaitable.Instance;
  33. }
  34. public override string ToString() => $"{nameof(ADDMEMBER)}({nameof(_characterId)}: {_characterId})";
  35. #endregion Methods
  36. }
  37. }