Существуют много статей, посвященных движкам используемым в квестах 80–90 годов, таких как AGI и SCI от Sierra, SCUMM от LucasArts; одной из первых виртуальных машин, используемой в потребительских продуктах, Z‑machine от Infocom. При этом движки, их интерпретаторы и виртуальные машины, используемые японскими разработчиками визуальных новелл в аналогичный период времени, остаются малоизвестными. К числу таких движков можно отнести System от Alicesoft, описываемую как «OS/VM hybrid» и используемую с конца 80-х годов на разных платформах (PC-88/98, X68000, в более поздних версиях — Windows), rUGP от age, Rscript от Liar‑soft, и семейство движков от VisualArt's — AVG32, RealLive, Siglus, которые рассмотрим в этой статье. Есть несколько причин, по которой я решил её написать — наступившее в прошлом году 25-летие VisualArt's/Key и выход ремейков Kanon и Air, релиз Summer Pockets RB в Steam, который получил негативные отзывы из‑за интерфейса нового Luca System, и постепенное исчезновение информации из интернета, из‑за чего большая часть ссылок в этой статье доступны только через Web Archive. В целом в настоящее время унификация инструментов используемых для разработки игр (получающая все большее распространение с выходом Unreal Engine 3 в конце нулевых годов, а теперь заметная не только в ААА‑проектах) снижает уникальность и разнообразие производимых с их помощью программных продуктов. В статье об истории SCUMM, высказана идея о том, что «движок вызывает почти столько же чувств, что и игры, сделанные на его основе». Думаю, что в какой‑то степени это применимо ко всем ранним игровым движкам — в твиттере существуют аккаунты, посвященные эстетике Dark Engine, Quake, Unreal. Хотя визуальные новеллы намного проще чем 3D‑шутеры, они также имеют определенную визуальную эстетику, которая определяется не только дизайном фонов и спрайтов, но и тех элементов, которые формирует ВН‑движок, а его смена может влиять на восприятие новеллы в целом, что доказывает ситуация с ремейком Summer Pockets.

AVG32

Представлен в 1996 году. По видимому, одной из первых новелл на нем была for elise (CRAFTWORK). Представляет собой один исполняемый файл вида avg321xx.exe. Имеет две основные версии по году разработки — avg3216, avg3217 и два вида по поддерживаемому формату аудио — CD‑DA (Тип M), или аудиофайлы (Тип D). Все интерпретаторы VA, в том числе и последующие — RealLive, Siglus имеют data‑driven дизайн — все настройки интерфейсов (#WINDOW,#WAKU), путей к файлам (#DIRC,#FOLDNAME), вывода текста (MOJI), структура меню системных команд (#SYSCOM) и текстовые строки используемые в нем, определяются в файле gameexe.ini.

for elise ~エリーゼのために~ (VisualArt's/CRAFTWORK), В старых визуальных новеллах в качестве фонов нередко использовались обработанные фотографии
for elise ~エリーゼのために~ (VisualArt's/CRAFTWORK), В старых визуальных новеллах в качестве фонов нередко использовались обработанные фотографии

Изображения, аудиоданные представлены в проприетарных форматах (обусловлено тем что широко используемые в визуальных новеллах Vorbis, png и т.д. в 1996 году не существовали). Формат графики PDT представляет собой 24-битное изображение (LZ-сжатие) с 8-битной маской (RLE сжатие), разрешением до 640х480. Музыка хранится в WAV, или в виде CD-audio. Озвучка представлена в виде контейнеров вида Zxxx.KOE (где xxx-номер скрипта из seen.txt), каждая запись имеет id вызываемый в скрипте одновременно с выводом соответствующего текста. Сжатие голоса представляет собой DPCM. В некоторых новеллах на AVG32 в NVL-режиме используются растровые шрифты FN.dat, содержащие 4418 глифов 24х24 в несжатом виде, при этом можно выбирать системные шрифты для использования в текстовом окне новеллы и настраивать их толщину. Для отслеживания просмотренных CG используется файл mode.cgm – список (зачем-то зашифрованный XOR) из названий файлов-изображений которые используются в новелле как CG-графика, и соответствующих им флагов выставляемых интерпретатором при первой загрузке этого изображения.

ねがい  (VisualArt's/RAM), NVL-режим
ねがい (VisualArt's/RAM), NVL-режим

Виртуальная машина выполняет 1-байтовые инструкции, содержащиеся в одном из 1000 возможных скриптов SEENxxx.txt хранящихся в контейнере seen.txt. К таким инструкциям относятся ожидание ввода от игрока, вывод текста, графики и управление текстовым окном, воспроизведение звука, чтение параметров из gameexe.ini, обработка введенного игроком текста (например для имени игрока), а также общие для VM инструкции для работы с переменными, строками и математическими операциями. Возможно дизассемблировать данный байткод с помощью инструмента Adieu.

Часть дизассемблированного adieu кода из демо 未来にキスを -Kiss the Future- (VisualArt's/otherwise)
Часть дизассемблированного adieu кода из демо 未来にキスを -Kiss the Future- (VisualArt's/otherwise)

Существует инструмент для распаковки PACL-контейнеров - используемых для LZSS-сжатия и хранения файлов не являющихся графическими или звуковыми, таких как байткод SEEN.TXT, файлы определения области ALLARD.ARD, и в редких случаях, графики ALLPDT.PDL.

Данные интерпретаторы получили известность, в основном потому, что они использовались в оригинальных версиях Kanon и Air от Key. К менее известным проектам, где использовался этот движок, можно отнести Sayonara o Oshiete ~Comment te Dire Adieu~, одну из ранних трех новелл в жанре денпа (определение того, что можно считать денпой столь же многозначно, как и определение иммерсив-симов). Известна одна визуальная новелла, Yuurou: ~Transient sands~ использующая байткод Seen.txt и PDT-графику совместно с RPG-элементами, что вероятно требовало модификации движка (с появлением RealLive, RPG-элементы реализуются dll-плагинами, и используются в большем количестве игр, в основном от catwalk). Кроме того, в условиях отсутствия высокоскоростного интернета, эффективных видеокодеков и видеохостингов, разработчики использовали AVG32 для создания неинтерактивных демо-версий (точнее, анимированных опенингов) в целях рекламы своих визуальных новелл; они были доступны для скачивания с сайтов разработчиков, и благодаря малому размеру были сохранены в Wayback Machine. С выходом RealLive, эта практика стала более распространенной, и существовала до тех пор, пока Adobe Flash и видеохостинги не позволили от нее отказаться.

Часть демо 未来にキスを -Kiss the Future- (VisualArt's/otherwise). Режим отладки включен
Часть демо 未来にキスを -Kiss the Future- (VisualArt's/otherwise). Режим отладки включен

Существуют open-source реализации Waffle (для Mac OS), Kurokoge (Mac OS X) и xkanon (для X Window System).

RealLive

Изначально назывался AVG2000. Разработан в августе-сентябре 2001 года (в 2000 году отдел разработки получил свое название, versammeln). Название движка, по видимому - игра слов, основанная на сходстве произношения "l" и "r" в японском языке. В этом движке сделаны изменения (такие как усложненный режим отладки который может быть включен добавлением строки #MEMORY=001 в gameexe.ini, по сравнению с строкой в заголовке окна AVG32 вида Seen:[001(000)] SP:[ 0] STACK:[0] CG:[] KOE:[] MEM: [], этот режим отладки включает множество новых функций, в том числе пошаговое выполнение кода и просмотр графических данных), позволяющие использовать его для разработки визуальных новелл студиями, не имеющими собственного программиста - это можно наблюдать в подробной документации и инструментах разработки, опубликованных VisualArt's в 2011 году в RealLive Max SDK. Задолго до этого, разработчик Peter "Haeleth" Jolly создал неофициальный SDK, в который входит дизассемблер kprl, компилятор rlc, конвертер графических файлов vaconv, библиотека rlBabel, использующая встроенную в движок систему плагинов для поддержки вывода неяпонских символов и подробная спецификация как самих интерпретаторов RealLive, так и языка Kepago, используемого для декомпилированного кода - хотя исходные названия функций оригинального компилятора TPC2000 от VA известны, они не очень удобны - к примеру функции BOXANTIMASKCOPYMASK_ADD соответствует функция Kepago grpMaskAddInvMask() с более читабельным названием. (сайт Haeleth удален из Wayback Machine, но сохранился в archive.is)

Режим отладки めいどさん★すぴりっつ!~わたしの中にいるあなた~  (VisualArt's/Sirius)
Режим отладки めいどさん★すぴりっつ!~わたしの中にいるあなた~ (VisualArt's/Sirius)

RealLive использует новый формат графики - G00, позволяющий в одном файле разместить несколько изображений, а также метаданные о регионах, которые могут использоваться скриптом для смены изображения - например для создания кнопок, изменяющихся при нажатии. Появилась возможность изменять освещенность спрайта с помощью эффектов, содержащихся в tcdata.tcc, каждый эффект - это LUT, таблица замены исходных значений R G B каждого пикселя на новые. С помощью ChatGPT и исходного кода rlvm, я создал python-скрипт для вывода LUT в png или CUBE, пригодном для импорта в графический редактор.

LUT-файлы, полученные из tcdata.tcc Clannad HD (VisualArt's/Key)
LUT-файлы, полученные из tcdata.tcc Clannad HD (VisualArt's/Key)
... и применение эффектов к спрайту персонажа.
... и применение эффектов к спрайту персонажа.

Виртуальная машина использует статически выделенную память - 8 массивов по 8000 байт, с возможностью адресации одного бита. Память для текстовых строк выделяется динамически. В отличии от AVG32, меню системных команд (вызываемое ПКМ и содержащее функции загрузки, сохранения, настроек звука и т.д.) может быть реализовано не только в виде стандартного Windows-интерфейса, но и как графическое меню, формируемое байткодом и G00-изображениями.

RealLive использовался длительное время, даже после выхода нового движка, Siglus, его применяли некоторые студии (например, Hadashi Shoujo). За время разработки, он получил форк названный Kinetic, предназначенный для серии KineticNovel, распространяемых посредством загрузки, а не на физических носителях, что потребовало использования более защищенной DRM‑системы. С каждой новым релизом, защита RealLive усложнялась — она была основана на XOR‑ключах общих для движка, а позже — конкретных для игр.

Существуют две open-source реализации RealLive - ранний xclannad, и более новый rlvm.

SiglusEngine

Разработан для Rewrite в 2010 году. Перед выходом Rewrite на этом движке создан бенчмарк Chihaya Rolling — новый движок требовал поддержки Shader Model 2.0. В Siglus были разделены скрипты и текст, что позволяло переводить новеллы без дизассемблирования кода. Все медиаформаты теперь используют технологии Xiph.org ‑Vorbis для музыки и озвучки, Theora — для анимации (видео с альфа‑каналом). Поздние версии движка содержат ключи API Twitter в gameexe.dat, для создания твитов с скриншотами из игры.

Анимация Theora в Summer Pockets
Анимация Theora в Summer Pockets

Недавний релиз Holy Undead от VisualArts уже не использует Siglus. Вероятно, после 15 лет с момента выхода этот движок, больше не будет разрабатываться и применяться. Если новые проекты (такие как anemoi) будут разрабатываться с учетом консольного интерфейса Luca System, то они возможно, будут выглядеть лучше чем порты старых новелл, для которых Luca не является оригинальным движком. Однако на этом почти 30-летняя история этого семейства, AVG32-RealLive-Siglus подойдет к концу. В конце-концов и сама VisualArts больше не является самостоятельной компанией, после продажи Tencent.

Комментарии (0)