Долго думал, помещать ли этот скрипт в одну строчку сюда, но, так как все-таки это скрипт, то тут ему и место.
Для всяких катсцен и загадок иногда хочется менять карту прямо на ходу. Знаю, что у Эльфа в разработке адские скрипты для этого, но зато тут я, кроме мелкого скриптика, хочу показать, из чего же состоит карта в XP.
Доп. информацию можно погуглить, и, может быть кто-то напишет подобное и для ACE.
Итак, приступим.
Как известно, данные карты состоят из трехмерной таблицы
data[x, y, i], где x, y - координаты тайла на карте, а i - слой (0, 1 или 2)
В эту таблицу записываются данные тайлсета карты - некие
tile_id.
Разберем подробнее, какие значения принимают эти самые
tile_id. Создадим карту и посмотрим на данные тайлсета слева. Мы имеем:
1) Первый верхний ряд - это тайл-пустышка (
blank) и семь автотайлов.
2) Далее идут обычные тайлы.
Теперь финт ушами - кликнем дважды на какой-нибудь автотайл, и появится окошко Autotile Expansion с полной разверткой автотайла.
Offtop: если вам для карты мало семи автотайлов, то это неплохой способ добавить еще несколько:
- делаем принтскрин открытого окна с разверткой нужного автотайла
- вырезаем, сохраняем, добавляем развертку вниз к нашему тайлсету (ширина развертки = ширине тайлсета (8 тайлов), высота - 6 тайлов)
- настраиваем приоритеты и проходимости по вкусу
Вернемся к tile_id
Итак, все происходит вот как:
На каждый автотайл, включая
blank, забито 48 значений
tile_id (8*6, как видно из оффтопика), то есть:
blank - 0-47
1й - 48-95
2й - 96-143
3й - 144-191
4й - 192-239
5й - 240-287
6й - 288-335
7й - 336-383
Внутри пачки из 48 значений они идут сверху вниз слева направо по его развертке.
В помощь я заскринил картинку, и теперь, для вычисления нужного tile_id у автотайла смотрим на картинку и считаем:
tile_id = 48*i + номер_на_картинке, где i - номер автотайла (0 - для пустого)
C 384го номера идут по порядку сверху вниз слева направо обычные тайлы тайлсета.
Теперь можно со знанием дела воспользоваться новым методом в
$game_mapclass Game_Map
def set_tile(x, y, i, tile_id)
data[x,y,i] = tile_id
end
end
Дергается код из события (третий таб в конце, вызов скрипта), например,
$game_map.set_tile(6, 7, 0, 64)
Как все это можно применить? Тут все зависит от фантазии разработчика. Например, можно сделать выдвигающийся мост или "расколоть землю" землетрясением.
В помощь я прикладываю демку, в которой герой, нажав на кнопку, получает переход с одного берега лавовой реки на другой. Тут как раз используются автотайлы, потому событие довольно большое.
Скрин до:
Скрин после:
Демопример:
yadi.sk/d/CTsreMJt5mNfA