Неофициально, но с душой: история нашей инди-новеллы по Рубакам
Визуальная новелла Slayers Wonderful — игра для фанатов франшизы «Рубак», которая позволяет окунуться в очередные приключения любимых героев.
В конце марта я и Павел Чар наконец выложили в открытый доступ на itch.io эту игру, над которой работали с сентября прошлого года.
В статье расскажу об игре и о том, как мы её делали.
Оглавление
Что за игра?
Наша игра — это перенос старой RPG Slayers Wonderful 1998 года, выпущенной эксклюзивно для PlayStation 1, в формат визуальной новеллы. Эту игру в принципе не переводили ранее с японского на другие языки.
Для переноса мы взяли самое главное — сюжет, а в качестве инструмента использовали движок Ren'Py.
Можно сказать, что наш проект позволяет прикоснуться к тому типу контента, который долгие годы остаётся доступным только для японцев, и то не для всех.
Мы перенесли из оригинальной игры всё, что могли: озвучку, спрайты персонажей, музыку, видео, фоны.
В результате получилась кинетическая новелла примерно на два часа чтения сюжета в духе старых-добрых Рубак. Можно считать эту историю как потерянную арку из аниме. Ещё и с сюжетом, артами и озвучкой от создателей оригинальных Рубак, что не менее ценно! В этой истории есть все ключевые любимые персонажи основной серии, и даже не обошлось без фансервиса!
Но знаете, когда описание всей работы умещается буквально в одном предложении, у читателя наверняка возникает мысль, что делается это всё быстро и несложно, просто копипаст из одних файлов в другие.
Однако практически каждый из этапов таил в себе немало сложностей и подводных камней, а по времени занимал порой десятки человекочасов. Вероятно какие-то процессы можно было бы упростить или облегчить, но мы — любители и не-профи, так что делали как могли, учась на собственных ошибках.
Вот об этом всём мне и хочется тут поделиться.
Разумеется, рассказывать я буду обо всём, основываясь на личном опыте и через призму собственных впечатлений.
Паша же неоднократно писал о работе над игрой со своей стороны у себя блоге.
Как всё началось
В сентябре прошлого года я вызвалась помогать проекту Паше Чару, о котором узнала совершенно случайно от другого пользователя дтф.
Паша писал о том, что начал делать проект, но в одного делать такую большую работу не хватает ни сил, ни мотивации.
Забавно, что случилось это практически в то же время, когда я, будучи на волне ностальгии и любви детства к франшизе, приняла участие в косплейном проекте по Рубакам аж на семь человек! Это явно был знак от вселенной!
По образованию я переводчик-китаист, по профессии — технический писатель, а в душе — большой фанат Рубак. Да ещё и на волне прилива вдохновения после командного выступления. Разумеется, увидев пост Паши, я решила вписаться с предложением посильной помощи. Правда, единственное, что я могла предложить на тот момент — это вычитка текста.
Так было положено начало нашего продуктивного сотрудничества :)
Сперва я почитала файл скрипта, внеся небольшие правки, и ознакомилась с актуальной на тот момент версией игры.
Сюжет оказался забавным, в духе любимых Рубак с карикатурно-весёлыми событиями.
Тогда в игре был готов только пролог с добавленной озвучкой и расставленными спрайтами. Остальные пять глав молчаливо (и это не фигура речи, ведь там не было ни музыки, ни озвучки) ждали своего часа.
Дальнейшая же работа заключалась как минимум в многократном повторении действий, выполненных Пашей в прологе.
Разумеется, на знакомстве с текстом я не остановилась и начала познавать азы ren'py.
Работа с озвучкой
Первое, с чем было решено разобраться — это привязка озвучки.
Около полутора тысячи файлов, каждый из которых вручную переименовывался и затем вписывался в файл скрипта.
При этом по ходу привязки находилось немалое количество косяков в виде каких-то пропущенных или перепутанных фрагментов. Файлы лежат в папке более-менее по порядку, но нюансов там хватает. Поэтому их логичная последовательность проверялась по видео с прохождением игры на ютубе в количестве 21 штуки со средней продолжительностью в полчаса каждое.
Когда на первом этапе с озвучкой было покончено, была ещё пара вещей, которые нам не давали покоя: некоторая часть реплик основных персонажей, а также большинство NPC в игре не озвучены. Хотелось это исправить, уж очень бросалась в глаза (или в уши?) молчаливая пустота посреди диалогов.
И кое-что из этого мы всё таки исправили.
Я начала тестировать разные онлайн-сервисы и генерировать голоса второстепенных персонажей, у которых в принципе не было в оригинале озвучки.
Качество, однако, оставляло желать лучшего. Основная проблема такой нейросетевой озвучки — очевидно, неумение в эмоции и интонации. Ещё ситуацию осложняло то, что генерации должны быть на японском, который в отличие от того же английского куда менее популярен. И многие сервисы банально не предоставляют возможности генерировать голоса на японском.
В какой-то момент Паша предложил попробовать сервис Zonos. Я опробовала, и это оказалось отличным вариантом для добавления озвучки NPC.
Эта нейросеть умеет копировать не только голос, но и интонации, основываясь лишь на коротеньком образце в буквально в несколько секунд! Хотя, если говорить о том, чтобы копировать голос точь в точь, то тут, конечно, всё не очень радужно. Однако в нашей ситуации у меня были развязаны руки: добиваться сходства с оригиналом мне было не нужно, достаточно было лишь передать общий образ: голос сурового молодого мужчины или молодой женщины, старика или старушки, пьяницы, разбойника, ведущего и т.п.
В качестве образцов я использовала разные случайные реплики, в том числе из вот этого тг-бота. Забавно, что для многих голосов я использовала озвучку персонажей из Овервотча, а, например, для ведущего на конкурсе моды брала в основу голос одного из персонажей JoJo. Не уверена в полной легальности происходящего, однако едва ли кто поймет, где какие голоса использовались :)
Нюансов с генерацией этих реплик тоже было немало. Каждая генерировалась по несколько раз, из которых я выбирала лучший вариант. Или вообще слепляла потом в редакторе реплику из нескольких кусков с разных генераций, соединяя самые удачные части.
В итоге получилось 300+ сгенерированных файлов и все озвученные побочные персонажи в игре. Вышло не прям идеально, но вполне достойно. Со стороны я бы даже наверное не догадалась, которые из реплик — оригинальные игровые, а которые — добавлены нейроозвучкой.
К сожалению, полностью решить вопрос недостающих реплик у нас не получилось до сих пор: клонирование голосов основных героев, ещё и таких узнаваемых и эмоциональных, оказалось сложной задачей. Особенно для того, кто в этом ничерта не понимает. Я пробовала разные онлайн-сервисы, пыталась локально натренировать собственную модель, но результаты не очень радовали.
Возможно, в будущем найдётся рабочий способ заполнить эти молчаливые пустоты.
Всё собираюсь погенерить на этом же сервисе реплики хотя бы второстепенных персонажей, но пока находились более приоритетные задачи.
А в целом, с дополненной озвучкой, как мне кажется, игра стала сильно лучше.
Спрайты
Теперь персонажи в игре начали разговаривать, но делали они это с одной дефолтной эмоцией, ещё и появлялись на экране поштучно.
Поэтому следующим большим заданием стала работа со спрайтами.
Поначалу мне было не совсем понятно, как их вообще привязывать, как задавать местоположение, как поворачивать вправо-влево. Потихоньку освоилась сперва с одним, потом с другим.
Однако перемещение спрайтов внутри сцен делал уже Паша, тут я пас :)
Персонажей в игре не так много, но с учётом разных эмоций изображений получается около 110 штук.
И вот среди этого разнообразия нужно было вручную добавлять к каждой реплике подходящую эмоцию. Опять таки, делать это нужно было в соответствии с оригинальной игрой (смотрим видео прохождения в очередной раз), а местами — улучшать и подставлять более удачные эмоции в тех местах, где разрабы схалтурили.
Ну, и в оригинальной игре персонажи появлялись на экране буквально по одному при каждой реплике, отчего было много постоянных сдвигов вправо-влево. Мы же расположили их на экране, группируя в соотвествии с контекстом происходящих диалогов. По-моему так горазд�� лучше.
Однако со спрайтами на этом работа не закончилась, ведь для них мы ещё задумали апскейл и доработку, а именно — улучшить их качество и убрать чёрную пиксельную гребёнку по контуру.
Задача эта оказалась для нас непростой, а причина этому банальна: мы не художники.
Тут мы тоже искали всякие варианты и тестировали разные инструменты. Остановились на простенькой программе Upscayl.
Она работает локально и может неплохо увеличивать и выглаживать картинку, но, разумеется, делает это неидеально. И не убирает чёрные пиксели по контуру. Поэтому каждый спрайт нужно было обработать вручную, при этом зачищая нейросетевые артефакты, возникающие после апскейла.
Картинки выглядят вроде по-простому мультяшными, но для не-художника эта задачка всё равно сложная.
Абсолютно случайно у меня завалялся графический планшет (после игры в osu), с помощью которого худо-бедно получилось обработать пару второстепенных персонажей.
Однако на одну такую картинку у меня уходило по несколько часов. Да и полученное качество оставляет желать лучшего, ведь мой уровень рисования — это буквально «палка-палка, огуречик». И рисовала я это в paint.net (художники в шоке).
К счастью, с публичным релизом игры (забегу тут немного вперёд, да) нашёлся классный человечек, ещё один фанат Рубак, который умеет рисовать! Он присоединился к нашей небольшой команде, и теперь работает как раз над улучшением этих спрайтов :)
Теперь, после расстановки спрайтов нужно было немного доработать кат-сцены.
Неприятности с кат-сценами
В игре есть 20 небольших видео на 13 минут суммарно, часть из них — с озвучкой. Паша прикрутил к этим роликам русские субтитры, однако после записи видео из-за проблем со слабым ПК субтитры в игре на миллисекунды отставали от картинки. Некритично, но заметно. Исправляем!
Сделав через экранную запись полное видео, я нарезала его на 20 отдельных роликов через простенький редактор Movavi, которым привыкла пользоваться для сборки разных небольших видео.
Ещё и совпало удачно, что он умеет сохранять видео в формате .ogv, в котором у нас они были.
Однако в готовых видео после их вставки в игру вылезла подстава: мовави почему-то (то ли из-за кодека, то ли из-за чего ещё) зашакалил отображение субтитров.
В итоге мне пришлось сдаться и поставить тяжеловесный Adobe Premiere, разобраться в непривычном интерфейсе и нарезать видео снова. И теперь уже получилось хорошо.
Забегая вперед, скажу, что к нарезке и записи видео, кстати, скоро придётся вернуться снова, но уже для того, чтобы подготовить англоязычные субтитры.
Музыка
Музыка была последней недостающей деталью. Из образа игры она ни в какую не хотела извлекаться, уж сильно хитро была запакована в отличие от файлов озвучки, картинок и прочего.
Мы искали знающих людей, кто мог бы с этим помочь, но в итоге ларчик открылся просто, и треки нашлись в интернете.
Вставка музыки не заняла много времени: в очередной раз (я уже сбилась со счёту, который) пролистать прохождение, при этом обращая внимание уже на музыку. Вначале, конечно, пришлось поиграть в «угадай мелодию» и соотнести звучание треков, которых было около сорока штук, некоторые из которых ещё и звучат довольно похоже.
Но с этим получилось справиться довольно быстро.
Причём здесь разработчики тоже халтурили: настроение сцены уже изменилось, а музыка по-прежнему играет из начала локации. Так что некоторые моменты всё таки я поправила, расставив треки таким образом, чтобы они лучше соответствовали происходящему на экране.
Подготовка к релизу
И вот, после добавления музыки игра приобрела все основные элементы, а мы всё продолжали ковырять всякие мелочи и улучшать уже имеющиеся элементы.
Поэтому чтобы игра не пылилась у нас на закрытой шаре, мы решили её выложить в свободный доступ.
Однако вариант с архивом где-нибудь на гугл-диске едва ли можно назвать жизнеспособным. Это приемлемо только для друзей, посторонний человек едва ли доверится тому, чтобы скачивать какие-то неизвестные архивы. Да и я бы сама тоже не доверилась, пожалуй.
На помощь нам пришла платформа для инди-игр itch.io, вокруг которой мы долго ходили и всё никак не могли засесть и изучить её.
В какой-то момент я всё таки взяла себя в руки, зарегистрировалась, почитала правила и начала наполнять странички информацией об игре и о команде (пусть нас на тот момент и было всего двое).
В процессе заполнения и изучения платформы выяснилось, что для обычной загрузки (без привлечения администрации сайта) размер файла архива не должен превышать 1 гб, а игра наша весила 1.2 гб.
Пришлось ужимать имеющиеся медиа-файлы и конвертировать их в другие форматы. Таким образом 2000+ файлов озвучки и музыки из .wav стали .mp3 (хотя тут я тупанула, надо было в .ogg перегонять), а примерно 250 фоновых картинок из .png превратились в .jpg.
Благодаря этому размер игры уменьшился в два раза, что стало приемлемым результатом для загрузки на сайт. И вот, странички заполнены основной информацией об игре и о команде (и даже на двух языках!). Вероятно, кто-нибудь из дизайнеров не оценит оформление, но уж сделали, как могли. По крайней мере как заготовку, которую в дальнейшем при желании можно будет улучшить.
Название команды (Slayerites), кстати, тоже сделано по-приколу. Я просто попросила DeepSeek предложить какие-нибудь варианты, и подобрала наиболее подходящее, созвучное с наименованием франшизы и достаточно уникальное.
Осталось добавить некоторые формальные штуки. Но знали бы вы, сколько времени и усилий стоило понимания, какими нашими контактами делиться и каким образом это вообще делать. Потому что мы бы хотели получить не только какую-то обратную связь, но и найти возможных единомышленников, готовых присоединиться к команде.
И если в описании на сайте можно просто указать адрес электронной почты, то внутри игры такое решение кажется странным. Да и возможных контактов у нас может быть несколько. И едва ли есть смысл на данном этапе создавать под это отдельные учётки в соц. сетях для команды.
В итоге решили это дело оформить в виде QR-кода с забавным лого.
Эта забавная картинка мне попалась как-то на сайте civitai, где я искала модели и лоры для генерации персонажей Рубак в Stable Diffusion.
Эта Лина нам так понравилась, что мы поместили её и на аватарку в виде логотипа (ну и других вариантов у нас попросту не было).
Однако куда именно давать ссылку при переходе по коду? Ответ очевиден: дать несколько ссылок!
Так что при переходе по куар-коду мы запилили интерактивную визитку на аналоге сайта Linktree.
Наконец, произошла заветная загрузка на сайт. Это было немного волнительно.
После публикации мы выложили ссылку везде, где могли. Особенно получилось найти отклик в фанатской вк-группе по Рубакам, где админ любезно согласилась написать об игре пост.
Там же мы завербовали нового участника команды, который теперь нам помогает со спрайтами.
Мы думали, игру скачает чуть больше, чем полтора замлекопа, так что почти 40 скачиваний — это успех :)
Жизнь после релиза
После создания страницы на itch и загрузки игры пришло понимание (хотя идеи об этом и были ранее), что нужно сделать мобильную версию игры и таки добавить английский язык.
В ряды зарубежных фанатов
На попытках попасть в иностранное коммьюнити фандома у меня произошла целая эпопея. Чтобы добраться до фанатов, я решила зарегистрироваться на Reddit. Казалось бы, что может пойти не так? Да всё!
В начале года я как-то заходила уже на этот сайт, так что аккаунт у меня там уже был. Правда, я ни в какую не могла настроить профиль: сайт и приложение упорно выдавали странную серверную ошибку. Перечитав кучу информации я поняла, что мой аккаунт в шадоубане. За что? Непонятно. Я написала в тех. поддержку, подав апелляцию, но ответом была тишина.
Погоревала я с неделю, и в голову мне пришла гениальная мысль: надо же просто завести новый аккаунт. Но не тут-то было. Великий реддитский файерволл отправил в бан и этот аккаунт. И я ничего не могу с этим сделать, только периодически заходить и писать жалобные записки админам с объяснением, что я не бот, а простой несчатный фанат Рубак, который захотел пообщаться с другими фанатами. Многие пользователи пишут в интернете о такой проблеме и сидят забаненные ни за что месяцами.
В режиме шадоубана твой профиль, посты и комменты никто не видит. Ты просто сидишь и молча за всем наблюдаешь.
Через комментарии в сабреддите я увидела, что у коммьюнити есть действующий сервер в дискорде. Однако сервер этот непубличный, и попасть в него (могут только избранные) можно только через приглашение. Но как это сделать, если в лс на сайте я писать не могу? Дилемма.
Пришлось просить человека, у которого нашёлся действующий аккаунт на реддите, написать одному из пользователей, кто делился приглашениями, и ждать подарка судьбы.
Так я наконец смогла зайти на сервер (в котором, кстати, едва ли набирается 600 человек, а конспирации-то было!).
Так что после доработки локализации буду делиться игрой уже там :)
Перенос на Android
Ранее Паша уже пробовал переносить игру на Nintendo Switch. Однако эта платформа не настолько популярна, как андроид, так что нужно было сделать порт и на него.
Посидев несколько вечеров, я настроила окружение и разобралась в параметрах, применимых для мобильной версии, чтобы запустить игру на андроиде.
Официально мы её ещё не выложили, хотя тоже вопрос — а чего ждём? :) Надо бы выложить.
Локализация
Паша уже готовил ранее игровой скрипт на английском для сайта GameFAQs. Пару недель назад я переключилась на доработку этого скрипта, который представляет собой вордовый документ почти на сто страниц. В очередной раз пришлось пройтись и по всему русскому тексту, потому что в файле перевода было немало пропущенных нейросетью кусков. И при этом в русском также вносила правки и улучшения. Нет предела совершенству.
Ну, и английскую версию, разумеется, причесала, как смогла: перевела недостающие части, привела в порядок имена, географические названия и всякое такое.
После этого Паша подготовил файлы игры к добавлению локализации и добавил пролог. Теперь дело за малым (нет) — перенести весь оставшийся текст перевода в файл скрипта, попутно перепроверяя себя и выполненную ранее работу на предмет ошибок и неточностей.
Начала делать первую главу, теперь только вопрос времени, когда всё будет готово.
Заключение
Так что мы имеем на данный момент? Наша команда увеличилась вдвое, и сейчас нас четверо!
При этом новые участники сейчас помогают с тем, что у нас получалось хуже всего — с изображениями.
В данный момент мы работаем над улучшением спрайтов и локализацией игры. Пожалуй, это последние крупные работы на этом проекте, остальное — косметика и разные приятные доработки. Например, хотим добавить галерею с внутриигровыми артами, как это обычно бывает в визуальных новеллах.
Хотя, есть тут ещё одно большое дело: нужно добавить события развилок из оригинальной игры. У нас сейчас по сути всё линейно, поскольку ориентировались мы на проходжение с ютуба.
А для того, чтобы достать недостающие развилки, нужно пройти старенькую кривую исходную игру на японском языке. Пока что никто из команды не горит таким желанием, но надеюсь однажды это всё таки случится.
Ну, и на этой игре мы не завершаем свою работу, сейчас у нас уже есть черновой вариант для следующей новеллы, которую мы хотим сделать уже с нуля на основе последнего сборника рассказов Slayers Spirit, вышедшего буквально месяц назад.
Пока что мы полны сил и энтузиазма :)
Если же подводить какие-то итоги, могу сказать, что такое внезапное участие в этом проекте оказалось невероятно интересным и крайне ценным опытом. Сама по себе локализация уникального ретро-контента кажется чем-то необычным.
А помимо приятного общения с единомышленниками (что тоже крайне важно!) я приобрела и немало технических навыков. Тут даже впору перечислить их списком.
Знакомство и освоение Ren'py:
Я играла в игры, собранные на этом движке, но никогда не задумывалась о том, как они вообще работают. Теперь же представление есть более чем чёткое. Оказалось, что это довольно несложный и удобный инструмент, не зря так много новелл собраны именно на нём.
Работа с медиа-контентом:
Работа с разного рода медиа, включая растровые изображения, видео- и аудио-файлы. Массовая конвертация из формата в формат, обрезка, склейка, кривое рисование и всякое такое.
И теперь у меня стоит Adobe Premiere, это уже успех :)
Работа с нейросетями:
В повседневности или на работе я ими не особо пользуюсь, но здесь я познала всю прелесть и мощь этих инструментов. Их мы использовали для работы с текстами, для локализации, изображений, аудио.
Я смотвировалась снова погрузиться в Stable Diffusion, который поставила ещё год назад, но быстро забросила, потому что не было конкретной цели для генераций.
Вот, например, мои тестовые генерации спрайтов Наги:
Пожалуй, можно сказать, что эта история не только о том, как пара единомышленнов собрали небольшой проект по старой игре.
Но о том, что при наличии мотивации и желания, а также должного количества усердия и терпения можно реализовать что-то осязаемое и вполне себе стоящее, даже не имея каких-то специфичных знаний и навыков.
Пусть и настолько андерграундное, но такое важное и интересное для себя самого.
P.S. Если кто-то хочет присоединиться к нашей команде — наш QR-код всё ещё работает!
Или можете просто отметиться в комментариях, мы вас увидим ;)