Команды RPG Maker MV/Заменить тайлсет

Материал из Русская версия РПГ.укр
Окно настройки команды «Заменить тайлсет» в RPG Maker MV.

Заменить тайлсеткоманда событий RPG Maker MV, позволяющая временно изменить тайлсет для текущей карты. Тайлсет сохранится до перехода на следующую карту.

Действие команды[править]

Карты в RPG Maker состоят из клеток (по умолчанию в RPG Maker MV одна клетка имеет размер 48*48 пикселей). Статичная графика задаётся с помощью тайлов: маленьких изображений для клетки. (На одной клетке может быть сразу несколько тайлов из разных слоёв.) Доступные тайлы определяются тайлсетом, то есть набором тайлов. Тайлсеты задаются в базе данных на вкладке «Тайлсеты».

Команда «Заменить тайлсет» меняет графику тайлов и свойства проходимости, при этом сохраняя их расположение. Вот пример её действия:

Большинство стандартных тайлсетов из RPG Maker MV не взаимозаменяемы: в них в разных местах тайлов расположены разные предметы, поэтому карты после изменения тайлсета выглядят нелогично. Таким образом, команда «Заменить тайлсет» больше всего подходит для нестандартных тайлсетов.

Технические подробности[править]

Внутренний формат[править]

Внутренний код команды — 282. Она кодируется в формате JSON таким образом:

{
 "code": 282,
 "indent": степень_вложенности,
 "parameters": [
    номер_тайлсета
  ]
}

Где нужно заменить:

  • степень_вложенности на число команд, в которые вложена данная команда,
  • номер_тайлсета на новый номер тайлсета.

Использование в JavaScript[править]

Для изменения тайлсета в коде на JavaScript можно использовать такой код:

//код создан на основе Game_Interpreter.prototype.command282
//из стандартного кода RPG Maker MV и распространяется по лицензии
//MIT, причём указывать авторство изменений не нужно, только
//авторство оригинального кода

var tilesetId = 3; //замените 3 на номер тайлсета

(function () {
    var imageReservationId;
    
    function recursiveCheck() {
      var tileset = $dataTilesets[tilesetId];
      if(!imageReservationId){
          imageReservationId = Utils.generateRuntimeId();
      }
  
      var allReady = tileset.tilesetNames.map(function(tilesetName) {
          return ImageManager.reserveTileset(tilesetName, 0, imageReservationId);
      }).every(function(bitmap) {return bitmap.isReady();});
  
      if (allReady) {
          $gameMap.changeTileset(tilesetId);
          ImageManager.releaseReservation(imageReservationId);
          imageReservationId = null;
      } else {
          window.setTimeout(recursiveCheck, 100);
      }
    }
    recursiveCheck();
})();