LINUX.ORG.RU

Визуальные новеллы: универсальный движок с открытым исходным кодом а ля ScummVM

 


0

3

Потихоньку пилю свой HTML-движок для визуальных новелл.

Визуальные новеллы, если кто не знает - это такая художественная форма, что-то среднее между аудиокнигой, театром и игрой: нужно читать/слушать много текста, проникаться сюжетом, смотреть на меняющиеся декорации и появляющихся на экране героев. Иногда есть интерактив и ветвления сюжета - обычно нужно делать какие-то выборы из предложенных 2-3-4 пунктов.

Мысль простая: вот все борятся против DRM, что, мол, DRM портит музыку, видео и книги, привязывая их к какому-нибудь онлайн-сервису который рано или поздно закроется и унесет с собой все. Некоторые борятся за сохранение старых игр: делают эмуляторы, портируют движки на современные платформы и т.д. Но никто не борется за сохранение визуальных новелл, которые по идее ничем не отличаются в этом плане от музыки, видео, книг и игр. Платформы, для которых они выпускались, точно так же устаревают и их точно так же становится невозможно читать, если даже ты их вполне себе легально купил.

Для квестов вот есть ScummVM. Чем мы хуже? Родилась мысль, что надо сделать «как ScummVM», но для визуальных новелл - то есть универсальный свободный движок, который мог бы проигрывать многие подобные произведения. После полугода раздумий и экспериментов, мысль эволюционировала до того, что надо делать не столько универсальный движок, сколько универсальный формат, в который можно будет сконвертировать данные из любого другого движка. Движков же может быть много, и они становятся страшно простыми: им всего лишь надо уметь интерпретировать программу, состоящую буквально из 4-5 типов команд («показать текст», «показать графику», «проиграть звук» + flow control).

Хочу показать то, над чем работаю в данный момент - http://www.pixic.ru/i/50p1J1Y2S1X83811.png

  • по центру - собственно движок, в котором запущена поконверченная новелла Edelweiss Eiden Fantasia; движок написан на HTML5+JS; т.к. у нас есть полный контроль над движком - в отличие от оригинала мы можем показать текст сразу на 2 языках (японском и русском); в отличие от оригинала это можно сразу открыть на мобильном телефоне/планшете и будет работать.
  • справа - описание контейнерного формата файла движка BGI (Buriko General Interpreter) в формате Kaitai Struct - это такой замечательный инструмент для реверс-инжиниринга файловых форматов, активно использую уже второй месяц, страшно упрощает копание во всякой проприетарной бинарщине
  • слева - этот же формат, открытый в визуализаторе - эдакий продвинутый hex-viewer, показывает, какие структуры занимают какие места в hex-дампе, позволяет смотреть их в виде дерева, быстро проверять какие-то идеи, что же там может быть зашифровано

Сейчас готов proof-of-concept движка и конвертеры из форматов BGI (ну, вот, например, Edelweiss Eiden Fantasia, что на скрине), Kirikiri (тысячи новелл на нем), Ren'Py (почти все любительское на нем), Whale (Nora to Oujo to Noraneko Heart, Caramelbox (Otome wa Boku ni Koishiteru), есть наброски по еще 2-3 движкам.

Морально готовлюсь выложить это все в open source. Самое сложное - нужно придумать название :) Есть мысли? Вообще, кому-нибудь все это интересно?

«Давай же, я хочу сделать это прямо сейчас!»

Нуууу....

А вообще идея хорошая.

ozzee ()

нужно придумать название :) Есть мысли?

JaVNe

aplay ★★★★ ()

Самое сложное - нужно придумать название :)

Думаю его нужно назвать Sun Engine, так красивей будет.

Gamebot ()

Уже же есть «Google презентации».

alix ★★★★ ()

Чисто из любопытства: на INSTEAD уже смотрел?

Evgueni ★★★★★ ()

Разве сейчас 90% новелл не используют renpy? А остальные обычно имеют зашифрованные ресурсы, которые даже crass/xp3-unpack не умеют распаковывать.

MLP_Fan ★★ ()

Самое сложное - нужно придумать название

Zapping Anime Localizable Ultimative Personalizationable Engine for Novells

anonymous ()
Ответ на: комментарий от Evgueni

Разумеется, смотрел. И на QSP, и на CYOA, и на urq, и на всякие другие interactive fiction players.

Там все-таки заметно другой уклон и способ моделирования. В визуальной новелле - 98% сценария - просто текст, как в книге. Narration, диалоги, вот это все. 2% - указания вида «загрузить бэкграунд такой-то», «наложить спрайт такой-то», «анимировать слой такой-то со спрайтом, пронося его из точки A в точку B».

В interactive fiction - все, как правило, идет либо «от системы комнат», либо «от парсера». При этом возможности программирования графики - весьма куцые. Зачастую это просто «загрузить и показать картинку», ни о каких слоях, позиционировании и анимациях речь не идет.

mnakamura ()
Ответ на: комментарий от MLP_Fan

Сейчас ~50% используют kirikiri, ren'py используется ну, может, в 8-10% случаев, как правило, всякими совсем уж начинающими студиями из полутора человек, где «программистов» нет совсем.

И, да, посмотрите на скриншот :) Я ровно этим и занимаюсь - эти самые «зашифрованные», которые «не умеют», распаковываю и конвертирую скрипты.

mnakamura ()

Вообще, кому-нибудь все это интересно?

Если оно сможет подцеплять большинство новелл без заморочек - точно кому-нибудь будет интересно. Пилите, Шура, пилите!

Nebuchadnezzar ★★★★ ()
Ответ на: комментарий от mnakamura

Тогда всеми руками за, если ваша программа сможет распаковать ресурсы nekopara.

MLP_Fan ★★ ()

Сейчас готов proof-of-concept движка и конвертеры из форматов BGI (ну, вот, например, Edelweiss Eiden Fantasia, что на скрине), Kirikiri (тысячи новелл на нем), Ren'Py (почти все любительское на нем), Whale (Nora to Oujo to Noraneko Heart, Caramelbox (Otome wa Boku ni Koishiteru), есть наброски по еще 2-3 движкам.
полный контроль над движком - в отличие от оригинала мы можем показать текст сразу на 2 языках (японском и русском); в отличие от оригинала это можно сразу открыть на мобильном телефоне/планшете и будет работать.

Очень круто.

anonymous_sama ★★★★★ ()
Ответ на: комментарий от Nebuchadnezzar

Я кагбе немножко реалист и понимаю, что только на vndb сейчас ~47 тысяч новелл. По ощущениям - в реальности на vndb попадает где-то треть выпускающегося. В одиночку я столько не перелопачу и именно поэтому и хочу делать открытый проект.

mnakamura ()
Ответ на: комментарий от mnakamura

что только на vndb сейчас ~47 тысяч новел

сколько же шлака делают...

anonymous ()

Про ONscripter ты видимо не слышал, верно?

EXL ★★★★★ ()
Ответ на: комментарий от EXL

И про ONScripter/PONScripter/ONSlaught, и про NScript, и даже про VNDS, Tyrano и http://tss.asenheim.org/ я в курсе.

Все потомство NScript, как мне кажется, рассматривать серьезно в 2016 году нельзя - примерно как и Ren'Py, и Kirikiri. Достаточно внутрь один раз посмотреть.

На самом деле ближе всего к тому, что я хочу сделать - именно Asenheim - но там проблема в том, что (1) автор упорно не идет на контакт и, видимо, не особенно хочет открывать исходники своего проекта, (2) там не адаптация скрипта под единый формат, а адаптация JS-движка под каждую конкретную игру. Я туда уже ходил, это очень затратный и тупиковый, на мой взгляд, путь.

mnakamura ()
Ответ на: комментарий от mnakamura

Все потомство NScript, как мне кажется, рассматривать серьезно в 2016 году нельзя - примерно как и Ren'Py, и Kirikiri.

А твоё чудо - можно?
:3

Unununij ★★★★ ()

renpy хватит всем.

Deleted ()
Ответ на: комментарий от MLP_Fan

В общем, посмотрел на nekopara - там в целом обычный krkr2, хотя и с забавными дополнениями типа многоязычности (второй раз такое вижу, на самом деле ;))

По идее должно сработать.

mnakamura ()

А про проект ViLE вы случайно не слышали? По описанию как раз похоже на «ScummVM для VN», вот только, кажется, оно немного заброшено.

И ещё, предполагается ли для этого универсального формата делать нативный движок? Или собираетесь ограничиться только браузером?

anonymous ()
Ответ на: комментарий от anonymous

Про ViLE слышал и смотрел даже - но там как раз та мысль, от которой я отказался в итоге - т.е. по сути сделать «как в ScummVM», единую виртуальную машину с поддержкой всего-всего сразу.

Я могу даже сказать, почему оно заброшено: потому что сделать «виртуальную машину, эмулирующую движок одной новеллы» - легко. Тупо бери и выполняй все, как есть. А вот свести воедино несколько в едином движке - тяжело. Для этого, собственно, и приходится выходить на высокоуровневый формат - т.е. не там, где команды вида «показать букву в такой-то точке экрана», а команды вида «персонаж A сказал реплику B, озвученную файлом C с выражением лица D».

Про нативный движок - если честно - я бы *вообще* никаким движком не занимался, не мое это. Я реверс-инженер, а не программист. Я могу разбираться с форматами и писать конвертеры/парсеры. HTML5+JS выбран тупо потому, что это просто, быстро и переносимо. Я примерно так же могу сейчас легко написать конвертер из моего «универсального» формата в, скажем, Ren'Py или krkr2 - вот и будет «нативный» движок.

Даже если у меня вообще ничего не выйдет, есть маленькая надежда на то, что форматы, которые я разбираю, описываю и выкладываю в формате Kaitai Struct, кому-нибудь еще пригодятся - благо они компилируются в код на практически в любом современном языке.

mnakamura ()

Кстати, движок таки назвали Mikan и выложили на github - https://github.com/mnakamura1337/mikan_engine

Потихоньку выкладываются в паблик и конвертеры - см. остальные репозитарии у меня на https://github.com/mnakamura1337/

К проекту присоединились двое, так что жизнь продолжается :)

Если кому-нибудь интересно будет посмотреть демки - пишите.

mnakamura ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.