SETPLACE.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. namespace OpenVIII.Fields.Scripts.Instructions
  2. {
  3. /// <summary>
  4. /// <para>Set Area Display Name</para>
  5. /// <para>This controls what shows up at the bottom of the menu and in your saved game slots.</para>
  6. /// </summary>
  7. /// <see cref="http://wiki.ffrtt.ru/index.php?title=FF8/Field/Script/Opcodes/133_SETPLACE"/>
  8. public sealed class SETPLACE : JsmInstruction
  9. {
  10. #region Fields
  11. private readonly int _areaId;
  12. #endregion Fields
  13. #region Constructors
  14. public SETPLACE(int areaId) => _areaId = areaId;
  15. public SETPLACE(int parameter, IStack<IJsmExpression> stack)
  16. : this(
  17. areaId: ((Jsm.Expression.PSHN_L)stack.Pop()).Int32())
  18. {
  19. }
  20. #endregion Constructors
  21. #region Properties
  22. public int AreaId => _areaId;
  23. #endregion Properties
  24. #region Methods
  25. public FF8String AreaName()
  26. {
  27. var s = Memory.Strings[Strings.FileID.AreaNames][0, _areaId];
  28. if (s.Length > 0)
  29. return s;
  30. return null;
  31. }
  32. public override void Format(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices services) => sw.Format(formatterContext, services)
  33. .CommentLine(AreaName())
  34. .StaticType(nameof(IFieldService))
  35. .Method(nameof(IFieldService.BindArea))
  36. .Argument("areaId", _areaId)
  37. .Comment(nameof(SETPLACE));
  38. public override IAwaitable TestExecute(IServices services)
  39. {
  40. ServiceId.Field[services].BindArea(_areaId);
  41. return DummyAwaitable.Instance;
  42. }
  43. public override string ToString() => $"{nameof(SETPLACE)}({nameof(_areaId)}: {_areaId}, {nameof(AreaName)}: {AreaName()})";
  44. #endregion Methods
  45. }
  46. }