WINTERSANDS: Код и сборка
Мирные жители засыпают, просыпается программист! С вами trickster.kaja, рассказ о том, как делать визуальные новеллы точно не надо, и ненавязчивая реклама Ren'Py.
КРОВЬ МАГОВ НЕ ОТСТИРЫВАЕТСЯ
Юрий Гагарин был первым человеком в космосе, а я – первым человеком, который узнал о WINTERSANDS и держал в руках ту самую толстую тетрадь. Мы с j.s. знаем друг друга со средней школы, и немалая часть истории родилась в брожении по парку в Кузьминках или по Старому Арбату, а концепты персонажей – в моих учебниках по английскому (j.s. – в моих кончилось место).
Мы до сих пор шутим, что я жесткий диск для всех придуманных тогда перипетий сюжета. Но с прогулок в парке этот маленький андроид подрос, получил диплом программиста, не один год проработал в крупной IT-компании, и умеет не только запоминать!
REWIND: СТРАДАЮЩЕЕ СРЕДНЕВЕКОВЬЕ
Прошлое. 2013 год. Я юный программист, и мы с моей подругой-художницей arashell сели пилить фан-новеллу к одному известному симулятору свиданий. Про Хэллоуин, но страшно было не по этой причине :’D
Просто я начала пилить новеллу на движке для 2D ретро-адвенчур. Простота Adventure Game Studio оказалось обманчивой: на деле он принес мне дни и ночи однотипной и неинтересной работы.
Я люблю превозмогать. Но попытки собрать на AGS современный интерфейс были ту мач. В итоге игра представляла собой набор статичных картинок (даже UI был прифотошоплен поверх каждого кадра). Картинки переключались в коде по счетчику кликов, а вместо кнопок были хотспоты на экране (о hover'е не приходилось даже мечтать). В первой части игры было 388 картинок. А во второй – 1 850.
На каждый чих нужно было изобретать новый велосипед. Так, из-за сложности с глобальными переменными приходилось создавать из игры внешний текстовый файл на компьютере пользователя, а затем считывать оттуда информацию об открытых концовках.
Добавляем сюда максимальное на тот момент разрешение 800x600 и невозможность нативным способом встроить новый шрифт – thanks but no thanks. При этом AGS не был плохим движком, просто под задачу он очевидно не подходил.
И вот, как водится, уже когда финальный билд собран, Google вдруг знакомит меня с Ren'Py. Окей, Google, у меня вопрос – где ты был раньше?
ALL HAIL REN'PY
Ren'Py – движок для создания визуальных новел. Базовыми функциями движка можно пользоваться даже без навыков программирования, а для всего остального есть Python.
По Ren’Py полно материалов и туториалов, есть активное сообщество на лемме, а автор PyTom продолжает активно развивать свой продукт.
Для написания скриптов Ren'Py при первом запуске предложит скачать текстовый редактор. Создатель продвигает Atom, Editra и jEdit, но можно поменять на другой, ваш любимый.
Файлами со скриптом игры считаются все файлы с расширением .rpy из папки с проектом. Поэтому делите скрипт на сколько угодно файлов – как вам удобнее!
Для отладки есть меню разработчика, можно выполнять скрипты или код на Питоне, перемещаться по меткам игры и смотреть список инициализированных переменных. Функция перезагрузки позволяет подтянуть обновленные в редакторе скрипты, так что лишний раз игру можно не перезапускать.
Ren'Py позволяет создавать игры как на PC так и на мобильные платформы. Притом разные версии на Windows/Linux/Mac собираются из проекта автоматически, никакой дополнительной настройки не требуется. Сборка на Android технически тоже проста (iOS как всегда другой фрукт).
При сборке готовой игры в Ren'Py можно запаковать ассеты в архивы. При этом Ren’Py дает указать, какие файлы включать в билд для ПК, а какие – для мобильного приложения. Так из одного проекта можно собирать обе версии, хотя в каждой используется разный набор спрайтов персонажей и элементов интерфейса.
Для простых новелл базовых возможностей движка хватит с головой. Дальше, с Питоном, вы ограничены только своей фантазией.
В WINTERSANDS не было навороченных мини-игр и ракет, летящих в космос (j.s. - пока? спасибо за идею!), но кое-какие любопытные задачи в практике Ren’Py мне все-таки попадались, например:
- автоматический подбор оптимального разрешения игры для мобильной версии
- мини-игра на поиск предметов
- бродилка по карте с рандомными и заскриптованными событиями
ОНО ЖИВОЕ
Ren'Py не поддерживает анимацию, но варианты оживить статичную картинку есть всегда.
- Можно задать смену изображений с помощью переходов. Если комбинировать эффекты с умом, выйдет симпатичная псевдо-анимация.
- Другой способ – запилить покадровую анимацию через ATL (Animation & Transformation). Тут главное не переборщить с количеством кадров.
JUST WORK, WOULD YOU KINDLY
Но не всегда работа в Ren'Py – путешествие по радуге на единороге. Иногда не работает то, что по всем канонам логики должно работать. А иногда все работает совсем не так, как ожидаешь.
Я так и не узнала, почему imagebutton теряет чувствительность к нажатию delete, а кнопка перехода в оконный режим никогда не в курсе, что ее нажали (¯\_(ツ)_/¯). К счастью, у большинства таких задач есть адекватные обходные решения, без смс, регистраций, костылей и велосипедов.
Пример: всего одна, но упорная проблема всплыла при сборке Android-версии: иконка Агаты решила, что не полезет в билд. Не помогали ни манипуляции с размером и весом картинок, ни 10-я по счету пересборка. А вот когда я склонировала проект и собрала приложение из новой сущности, все заработало. Типичный случай «вкл/выкл пробовали?».
Так что у движка есть плюсы и минусы.
Плюсы:
- простота использования при широких возможностях
- большинство механик, необходимых для новеллы, уже есть в движке
- удобная сборка сразу для нескольких платформ
- много инфы (ответы есть даже на те вопросы, которые еще не придуманы)
Минусы:
- если менять текст в скрипте, сделанные в этой точке сейвы умрут, а перевод отвалится (если изменения вносятся в уже рабочую сборку игры – удачи и терпения)
- чем больше изображений на экране, тем хуже все пашет (будет заметно, если персонажи анимированы и в кадре их много или если у вас мега-сложная мини-игра)
- нет нативного порта на консоли
IN THE MIDDLE OF SOME CALIBRATIONS
Но не все техномагия – в моей работе есть и другие виды творчества. Так, j.s. прописывает «драматургию» сцены, но финальная «режиссура» WINTERSANDS остается за мной.
Сборка 10-15 страниц сценария занимает пару вечеров.
Сначала я собираю скелет из текста, расставляю все метки и логические переходы. Затем идет самая «любимая» моя часть – теги жирного шрифта (и изредка курсива).
Дальше я добавляю спрайты и эмоции персонажей: в одном окне текстовый редактор, в другом – игра. Я проверяю все сразу, смотрю, работает ли эмоция с текстом.
Перевод на русский я вношу, когда весь текст новеллы вычитан несколько раз несколькими людьми. Иначе любая правка «отвяжет» кусок перевода от оригинала, и придется заново генерить новые строки переводов и восстанавливать мэппинг. (Полностью избежать этого не удалось, но потери были минимальными.)
Звуки и музыку я вставляю в самый последний момент. Для демо-версии мы с j.s. сели вместе и в режиме live расставили всю звуковую часть примерно за полтора часа.
Финальная сборка обязательно тестируется на всех языках!
И ЧЕГО? ITCH.IO!
Наше демо живет на itch.io, и эту площадку мы заценили еще до фестиваля. Плюсы ее бесспорны:
- бесплатный репозиторий для хранения файлов игры
- удобный интерфейс для тех, кто будет ее скачивать (намного лучше, чем отправлять людей на Google Drive или Яндекс-диск)
- возможность сверстать яркую, репрезентативную страницу игры
- удобная внутренняя аналитика
А главное: itch.io активно продвигает игру сам и сейчас генерит нам больше всего посещений.
NO REST FOR THE WICKED
Я люблю игры и все, что с ними связано: меня бесконечно вдохновляет то, что делают Supergiant Games, Arkane и человек-оркестр Тоби Фокс. Люблю Borderlands во всех проявлениях, Dishonored, The Last of Us, Bioshock Infinite, Death Stranding и Detroit: Become Human. Люблю Троя Бейкера, и пусть он озвучивает все на свете! И еще Homestuck (да, там тоже про игру).
С WINTERSANDS я вставила ногу в дверной проем разработки игр и уже не хочу ее убирать. Хочу пробовать разные жанры, на разных движках. Было бы здорово, например, сделать двухмерный квест на Visionare Studio. Или разобраться в Unity 3D и выйти за рамки 2D. И если j.s. еще решится сесть за баранку геймдева, то сделать все, что угодно, и на чем угодно вместе с ней.
А пока буду двигать прогресс с WINTERSANDS, челленджи зовут! Хорошо делать то, что любишь, и любить то, что делаешь. Так что пойду проверю itch.io :^)
Ну, вот и все – мы давно хотели написать про свой процесс, и это было классно! Спасибо, что были с нами эти четыре недели. Надеемся, что фестиваль повторится, и не раз, и нам снова будет что показать. А пока – следите за новостями в наших пабликах, играйте в наше демо, и в целом, enjoy.