Почему не Ren'Py?

  • aoki-hesitates

Чем больше проходит времени с момента выхода нашей новеллы Deliberate Distortion: Synesthesia, тем больше новых игроков задаётся вопросом, вынесенным в заголовок. Почему мы создавали Синестезию на собственном движке, а не использовали Ren’Py или один из множества доступных бесплатных движков? Пожалуй, пришло время собрать разрозненные ответы из темы об игре на форуме ЕнЕ, которые уже никто никогда читать не будет, в один объясняющий пост.

Вернёмся во времена активной разработки Синестезии – 2008-2009 год. Память видеокарт у большинства обычных игроков измерялась десятками Мегабайт, Full HD мониторы были не то чтобы редкостью, но и не были повсеместно распространены, а Windows 7 только вышла и падала от малейшего чиха. Большинство новелл (особенно любительских) тогда выпускалось с разрешением картинки 640 х 480 пикселей (а то и меньше), анимации персонажей и плавные переходы между задниками были большой редкостью, контуры персонажей и других объектов со сложной геометрией обрубались по битовой маске, и множество технических ограничений не давало разгуляться фантазии начинающих художников и аниматоров.

И именно в этих неблагоприятных условиях мы решили делать Синестезию в разрешении 1280 х 960, с плавной анимацией переходов и полноценным альфа-каналом. Уже по первому пункту (разрешению экрана игры) раздавались стоны игроков, что это не тру, что 640 кб хватит на всех 640 х 480 – это самое правильное разрешение для вн, и вообще сюжет важнее. Действительно, анимации отображались более-менее плавно при 640 х 480, а при повышении разрешения до 1024 х 768 уже начинались тормоза и разрывы изображения (tearing), что хорошо заметно в раннем техническом демо Синестезии. При добавлении альфа-канала (для плавных контуров персонажей) итоговое изображение тормозило уже совсем безобразно. Сегодня, конечно, уже сложно в такое поверить, но так всё и было. Выход был только в использовании аппаратного ускорения.

Начались поиски подходящего движка для Синестезии. Из бесплатных вн-движков в то время были доступны и популярны KiriKiri, NScripter, Ren’Py и Visual Novelty.

KiriKiri (точнее, связка KiriKiri2/KAG3) имел неполноценную поддержку русского языка, отсутствовало аппаратное ускорение, отсутствовали вменяемая документация и вообще полноценная информация о работе движка и его скриптов.

NScripter (и его свободный клон ONScripter) не имел поддержки не то что русского, а даже английского языка. Более поздние форки ONScripter-En и PONScripter понимали английский и теоретически русский, но экспериментировать было уже неохота. Добивал непонятный статус развития и поддержки этих самых форков, а также недостаток документации. Хотя большим плюсом была возможность 2D-ускорения посредством SDL.

Ren’Py образца 2008 года иногда некорректно (не вовремя) отрабатывал анимации ATL, особенно параллельные. В результате мог возникнуть рассинхрон изображения и звуков, анимированное изображение персонажа могло появиться не когда надо программисту, а когда движок посчитает нужным и т.п. И ещё Ren’Py не поддерживал аппаратного ускорения. Совсем. Причём автор в то время и не собирался его добавлять, судя по постам на форуме поддержки. Поэтому полноценные переходы из одного задника в другой тормозили при разрешениях больше 640 х 480. К счастью для фанатов Ren’Py, аппаратное ускорение DirectX всё-таки добавили в движок через несколько месяцев после релиза Синестезии.

Visual Novelty использовал аппаратное ускорение DirectX. Кроме того, существовала возможность визуального программирования сцены, что очень помогло бы при разработке. Однако в движке отсутствовали некоторые простейшие функции – анимация/переход заднего фона из одного в другой, глобальное сохранение информации о пройденных ветках и что-то ещё, чего уже и не вспомнить, но без чего Синестезии не получилось бы.

Помимо всего вышеперечисленного, ни в одном движке не была реализована функциональность блокнота, карты или инвентаря, и их пришлось бы кодить в любом случае. Точно так же кучу кода пришлось бы писать самим и при использовании движков общего назначения типа Irrliсht, OGRE или Unity. Так что написать свой простейший слой рисования поверх DirectX и добавить нужную функциональность в конце концов оказалось проще, чем дописывать существующие движки. Сегодня, конечно, ситуация изменилась в лучшую сторону, появилось много новых вн-движков, а существующие расширили свою функциональность. Поэтому сегодняшним игрокам трудно принять, что так хорошо было не всегда.