RPG Maker MZ: урок №6. Чарсеты
Во вчерашнем уроке мы, в качестве подопытной, использовали девку из стандартного пакета ресурсов (RTP). В этом не было ничего сложного, просто выбираешь из списка, который открывается при нажатии на окно «Изображение» в редакторе события.
Однако добавление своих, либо скачанных персонажей в игру часто вызывает сложности и проблемы у новичков. Поэтому сегодня мы подробно разберем то, как устроены чарсеты.
Для тех, кому удобнее смотреть, чем читать, имеется видео версия:
Чарсет – набор графики с анимацией для использования в ивентах, либо в качестве графики героев игры. У немукеристов часто называются спрайтсетами, спрайтшитами или просто спрайтами.
Чар – персонаж, элемент графики, кадр из набора анимаций.
Давайте для начала разберем, какие бывают чарсеты вообще. Для этого снова обратимся к господину ПЖ ФШ и откроем в нем сразу четыре файла – !$Gate1, !Door1, $BigMonster1 и Actor1.
Фотошоп будет спрашивать насчет профилей – он всегда это спрашивает, просто жмем ОК.
Если вдруг, кто-то не знает, то выделение сразу нескольких файлов, расположенных не подряд, делается с удержанием клавиши Ctrl. Навык базовый в обращении с Виндой, но мало ли…
Чем эти файлы отличаются, кроме размеров? А отличаются они символами в начале названия. Эти символы называются префиксами и используются для определения режима разбиения файла на кадры.
Actor1 – все файлы без префикса разбиваются движком на 8 участков – 4 в верхнем ряду и 4 в нижнем. Каждый участок используется для хранения анимации одного персонажа
Анимации состоят из четырех рядов, для отображения четырех направлений – вниз, влево, вправо и вверх, соответственно. Центральные из трех кадров отвечают за изображение стоящего на месте ивента.
Теперь посмотрим на файл !Door1 – несмотря на то, что файл в каждой из 8 участков содержит в себе анимации разных дверей, мейкер все равно делит его точно так же.
И если вдруг, нам придет в голову сделать ходящую по карте дверь, то, проставив маршрут, будто это персонаж, мы увидим в игре следующую картину:
Мейкеру, как и в случае с тайлсетами, безразлично, что именно изображено на листе, он лишь использует отдельные части этого листа с определенной целью.
Забегая вперед, скажу, что корректная анимация открытия и закрытия двери задается командами «поворот на:», которая будет переключать кадры анимации в нужной последовательности.
Т.е. мы даем ивенту команду повернуться, да, но он же не знает, что такое «повернуться». Он просто кусочек программы, поэтому команду «поворот», он понимает как «сменить кадр на такой-то».
Таким образом, можно запихивать в 12 кадров, отведенных на персонажа что угодно и воспроизводить анимацию этого чего угодно вручную, просто управляя его действиями.
Хорошо, а префикс восклицательного знака что же делает? Ведь что-то он должен делать, хотя на первый взгляд, разбиение листа чарсета такое же. Дело в том, что при отображении графики чара, в чьем листе нет префикса, мукер думает, что это обязательно персонаж. Т.е. человек, животное, монстр и т.д. А все персонажи в игре отображаются со смещением на 4 пикселя вверх. Так макушка нашего героя будет находиться зрительно выше границы его квадрата, что выгодно улучшает картинку на экране и маскирует пресловутую мукерскую сетку. Префикс восклицательный знак (!) перед названием листа чарсета отключает эту функцию и изображение выводится точно так, как расположено на квадратах самого листа.
Кроме того, восклицательный знак отключает действия режима «травы», в котором нижняя треть ивента или героя становится полупрозрачной.
Обратите внимание на верхнюю границу героя и двери (нижнюю у героя плохо видно, но она тоже смещена на 4 пикселя вверх), а так же на отсутствие у двери эффекта травы.
Едем дальше – у нас на очереди $BigMonster1.
Да, это плохой пример, но какой есть. Префикс знака доллара ($) в названии файла указывает движку на то, что это файл одиночного чара из 12 кадров. Т.е. лист просто разбивается на 12 равных кадров – 4 ряда, 3 столбца и используется, как обычный чарсет для одного персонажа.
Зачем это нужно, если можно запихать 8 таких же на один лист? Ну, во-первых это иногда гораздо удобнее – персонажи в отдельных файлах, их проще редачить, проще понимать, какой файл в папке для чего и т.д.
А во-вторых… Заметили, что БигМонстры больше, чем обычный, стандартный человечек? Так вот, в отличие от тайлсетов, размер листа чарсета, как и размер самого чара ничем не ограничен. Ваши персонажи и графика ивентов могут быть хоть с весь экран размером.
Но при этом, исходя из размера листа, выстраивается сетка его разбиения на кадры. В данном случае, размер листа 288х384. Ширина 288 делится на 3 (три столбца, они же три кадра в ряду) – 96. 384 делим на 4 (4 ряда) – 96. Таким образом, размер одного кадра будет 96х96 пикселей.
Прошу заметить, что кадр не обязан быть квадратным, не обязан быть кратным мукерской сетке и т.д. Размер кадра определяется точно в пикселях в зависимости от размера листа.
Как этим пользоваться.
Если у нас размер чара 48х48, то размер листа должен быть – 144х192.
А если у нас чар, к примеру 48 по ширине, и 72 по высоте, т.н. «полуторные» чары, больше похожие на реальных людей своими пропорциями, то размер листа будет 144х288.
Персонаж в данном случае лыс, т.к. это темплейт и в нем сделан запас на прическу/шлем и т.д. сверху, но принцип, полагаю, ясен?
Темплейт – шаблон-болванка для рисования персонажей
То же самое правило с разбиением листа в зависимости от его размера относится и к листам без префикса, но! Мы помним, что они включают в себя не один набор, а восемь.
То есть нам придется размер одного кадра умножить не на 3 по ширине и 4 по высоте, а на 12 по ширине и 8 по высоте.
И сетка разбиения будет применяться ко всему листу. А если персонажи в игре имеют разный рост, то это как минимум неудобно, проще ставить префикс $ и работать с их листами индивидуально.
Остается последний файл !$Gate1 и тут, мы не видим ничего принципиально нового. Точно такой же одиночный лист чарсета, разбитый на 12 кадров. В ширину больше, чем в высоту, но это нас не смущает – мы теперь знаем, что сетка разбиения выставляется какая угодно, в зависимости от нашего желания, а точнее от того, какого размера лист мы запихаем в мукер.
Префиксы ! и $ тут работают вместе. ! отключает смещение на 4 пикселя вверх и полупрозрачность в траве, а $ показывает, что этот лист – отдельный чарсет с 12 кадрами.
Итого для тех, кто в ладах с математикой: если файл без префикса, то кадр будет равен 1/12 ширины листа и 1/8 высоты. Если с префиксом $, то кадр равен 1/3 ширины и 1/4 высоты листа. Префикс ! выключает действие высокой травы и смещение на 4 пикселя вверх.
Теперь нужно упомянуть еще одну важную вещь. Перейдем в мукер, создадим два ивента, один с графикой из $BigMonster1, а второй с !$Gate1 и запустим тест проекта:
Ивент остается ивентом, т.е. одиночным квадратиком на карте, а то, что его графика больше – это просто картинка на экране. Картинка располагается выше игрока при любом приоритете, кроме «ПОД игроком» и не является физически осязаемым объектом. Помните, я говорил во второй статье про то, что мукер не умеет в коллизии? Для движка ивент – это квадрат 48х48, в котором он находится и взаимодействие будет возможно только с самим ивентом, а не со всей картинкой, которую он выводит на экран.
Так же, обратите внимание, что если размер кадра чара больше базовой клетки 48х48, то все лишнее отрисовывается равно по обе от него стороны, т.е. кадр центруется относительно ивента.
Вот так будет отрисована графика в игре, сам ивент всегда будет расположен в нижней части и посередине кадра. А если быть точным, то так будет расположен сам кадр, относительно ивента.
Закрепим?
Давайте добавим какого-нибудь перса нестандартного размера в игру!
А ну-ка, дядя гугл, выдай нам чего-нибудь этакого по запросу «rpg maker mv big characters». О! Что-то совсем не мукерское с девиан арта!
Попробуем этого чувака использовать. ПКМ -> Открыть изображение в новой вкладке -> сохранить изображение как, а дальше открываем его в фотошопе.
Как мы видим, персонаж раскидан по листу с большими пустыми областями и если мы его оставим как есть, будет не очень хорошо, да и не очень аккуратно – много лишнего прозрачного пространства отрисуется. Игроку, конечно будет пофиг, но порядок быть должон!
Уже лучше, да?
Лишнее уберем инструментом «Рамка», он четвертый сверху в панели инструментов фотошопа, пользоваться им очень просто, сами разберетесь.
Заметьте, у нас ширина кадра выбиралась по бегущему, так как он шире остальных, а высота будет определяться по стоящему, так как он выше.
Поскольку мне, как и любому игроделу важно мое время, то я не заморачиваюсь с вычислением прям точных размеров кадра. По ширине неплохо вписалось в 96 – два мукерских квадрата. Вписалось и ладно, значит так и оставим, не следует забивать голову сверх необходимого.
Для отпределения высоты применим тот же метод – на глаз он по высоте где-то два с половиной квадрата, т.е. 96+24=120. 120х4=480 – это будет примерная высота холста. Только, прежде, чем обрезать холст, давайте сместим ряды поближе друг к другу, что бы лишнего не отчекрыжить.
Теперь заходим в меню Изображение -> Размер Холста и выставляем ширину на 480, с отсеканием нижней части(для этого в появившемся окне нажмите на стрелочку вверх).
Теперь нам нужна новая сетка, так как высота кадра нестандартная. К сожалению ФШ не умеет в сетку из прямоугольников, но нам ширину уже проверять и не надо, достаточно высоту центронуть. Задаем (Ctrl+K) сетку 120 пикселей.
Вертикальные линии нас нафиг не интересуют, а вот по горизонтальным выровняем. Я предлагаю упереть чувака ногами в нижнюю границу и дело с концом.
При выделении и перемещении кадров, будьте внимательны, а то отрежете башку нижним или ноги верхним. Вроде ерундовый совет, но это ох как часто делаешь, когда чарсеты формируешь))
Готово, епта! Сохраняем как PNG со стандартными настройками в папку с чарсетами, а название даем $Boy1. Переходим в мукер, создаем ивент, выбираем нашего парнишу и заставляем его бегать по карте.
Любуемся:
Хороший парень, но, конечно, не орел. С тремя-то кадрами анимации при таких размерах. Вырвиглазно и деревянно. Существуют плагины на увеличение количества кадров анимации до скольки угодно, мы коснемся их позже.
Я очень надеюсь, что это все понятно потому, что с добавлением не РТПшных персов у людей прямо поголовная беда.
Завтра начнем разбираться с переменными и переключателями, почувствуем себя программистами, говна-пирога))
















Лига Разработчиков Видеоигр
9K постов23.1K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"