LG.BALUKATION's Weblog

Ничего, это тоже кое-что… А при желании из него можно сделать что угодно

Обновление «Приключений котёнка в городском парке» для выхода в Steam

Posted by LG.BALUKATION на 2021/09/10

Недавно на сайте студии Локатор появилась запись о процессе переноса одной старой игры на более новую версию движка и связанных с этим проблемах. Мне это напомнило, как в 2017 году я занимался примерно тем же самым для их другой игры.

В конце 2015 года я вбросил в ныттер ссылку на статью о нелинейности сюжетов в играх, кто-то её ретвитил, кто-то лайкал, а АннТеннКа взяла и откомментила мой твит. У меня достаточно камерный ныттер, так что мне было интересно — что же за нового человека туда занесло. Я узнал, что вот есть она, делает игры под именем «студия Локатор», мы познакомились и начали общаться.

АннТеннКа тем временем заканчивала свою тогдашнюю игру и возила её показывать по всяким игровым выставкам и конференциям. У неё уже были планы и на следующий проект, но в моде был Steam Greenlight и мы обсуждали возможность не просто выкладывать на её сайт готовые игры, но и самостоятельно издавать их. Мне понравились игры Локатора, они уникальные, добрые, от которых делается тепло на душе. Вот только найти билд и информацию об игре не так-то просто (особенно на английском). С другой стороны — стим во многом больше социальная сеть для игроков, чем просто магазин. Так что много разных людей со всего света могли бы увидеть там игры Локатора и попробовать их. Постепенно (конец 2016 — начало 2017), АннТеннКа отобрала из своего портфолио и выложила в гринлайт четыре игры, пара из которых даже была одобрена! Это её тогдашняя настольная игра «в поисках интернетов» и детский квест «приключения котёнка в городском парке».

«Интернеты» доделывались параллельно со всей этой историей про гринлайт и там уже была команда разработчиков — так что я лишь помогал в тестировании и поддерживал морально. А вот «котёнок» был простым и коротким квестом для детей, который давно вышел на сайте Локатора и был доступен на некоторых других. Уже на тот момент он был любим юными игроками и люди проголосовали за него — но вот активной команды разработки у него уже не было. Так я взялся помочь АннТеннКе с технической частью.

Написана эта версия игры была на RenPy. С одной стороны я ничего не знал об этом движке, с другой — это движок на питоне, он считается очень простым, да и игра маленькая. Так что даже если всё пойдёт совсем уж плохо — я думал что просто перепишу игру на каком-нить более сговорчивом движке.

Перечень того, что хотели и успели сделать звучит примерно так:
* получить билд на актуальной версии движка
* получить один билд с разными языками (изначально для каждого языка был свой билд игры)
* исправить несколько старых ошибок и недоработок
* попробовать встроить что-нить из возможностей стима в игру

Были ещё мысли о более современной широкоэкранной версии игры, но она отложилась на потом и так и не была сделана. Ну знаете, сейчас много старых игр выходит без переделки графики, а просто с добавлением полей или картинок по бокам — что бы там не скучный чёрный фон был, а какое-нить тематическое оформление. По-идее так можно было сделать и с этой игрой, но руки так и не дошли.

Одобрили игру в марте 2017, а вышла она в сентябре. При этом в истории проекта всего 266 коммитов (165 моих и 101 от АннТеннКи) — это совсем не много, просто лично я занимался проектом в свободное время и даже не каждую неделю. Это был мой первый опыт такой вот инди-разработки и в принципе работы удалённо, так что приходилось многому учиться на ходу — типа обсуждения всяких вещей когда вы живёте в разных городах, расстановки приоритетов, планирования задач и трат времени. Лично я считаю, что плохо организовал свой рабочий процесс и часто отвлекался — проект можно было сделать гораздо быстрее (ну или успеть больше за то же время). После этого я какое-то время занимался поддержкой проекта, расследуя и фикся найденные игроками баги, но в основном после релиза игрой занималась уже сама АннТеннКа (добавляла переводы на новые языки, делала новогоднюю сборку с праздничным фоном в главном меню).

Итак, немного про реализацию задуманного.

Первым делом хотелось получить билд на актуальной версии движка. Выложенные в интернет билды были собраны версией 6.12.1, датированной маем 2011 года. Последняя на тот момент версия 6.99.12.4 вышла в феврале 2017. Между ними была целая куча релизов, больших и маленьких — в которых запросто могли что-то сломать случайно или целенаправленно выкинуть после каких-то переделок и возможно даже нескольких лет переходного периода.

Так что после прочтения официальной обучалки по движку и документации к нему, я удостоверился что игра всё ещё собирается старой версией и начал по-одной качать более новые версии движка. В них я читал список изменений, собирал игру и проверял что всё работает без ошибок.

Потом мы разбирались с локализацией. Изначально у АннТеннКи было два билда игры, они отличались графикой и исходниками. В одном — в исходниках и графике везде был русский текст, в другом — английский. Была ещё какая-то разница, но насколько я помню она была небольшой. Так что помержили исходники, получив английскую версию с русскими сообщениями в виде комментариев. Оказалось, что двигло может читать перевод из отдельных папок и таким образом у нас в игре получалось: английский текст в самих исходниках плюс отдельные файлы перевода для английского языка (что бы можно было давать их переводчикам) плюс отдельные файлы перевода для русского языка (с сообщениями из исходников русской версии игры).

Помню были разногласия как делать выбор языка. Пока не определились, я сделал в исходниках пару батников — один для запуска игры на русском, второй на английском. Мне этого хватало, а вот АннТеннКа оказывается ждала, пока я не сделаю нормальный выбор языка в самой игре и откладывала из-за его отсутствия приватный бета-тест. Я же заметил эту разницу в наших планах далеко не сразу, чем немного задержал сроки.

В итоге сделали, что если игра не знает какой язык выбран в конфиге (т.е. запускается первый раз и ещё нет настроек и сохранений) и ей не сказано в явном виде какой язык использовать (как я делал в своих батниках), то она смотрит на локаль системы. Если в системе локаль совпадает с одним из прохардкоженных языков — игра переключается на соответствующий перевод, если локаль неизвестная — используется английский язык. Выбирать язык из настроек стима не нравилось АннТеннКе (хотя по-моему куча игр так делает и лично меня немного печалит, если какая-то игра не поддерживает выбор языка в стиме), а выбирать язык игры явным диалогом на первом запуске не нравится мне — я считаю это моветоном.

Локаль устроила нам сюрприз — в винде и остальных системах языки называются немного по разному, так что имейте это в виду если будете делать так же! Все нормальные системы используют обозначения двухбуквенными кодами языков и стран, а винда возвращает полные названия.

С переводом был ещё важный момент. Не за долго до всего этого, АннТеннКа выиграла на одной из выставок купон на перевод от некой фирмы, специализирующейся на переводе игр. И вот пообщавшись с ними, она решила делать перевод игры на японский! Так что игра после релиза в стиме получила обновление с поддержкой третьего языка — русский и английский были в игре изначально, а японский был сделан на заказ в бюро переводов. Так же перед выходом был поправлен английский текст и записана английская озвучка (раньше была только русская). Но этим всем АннТеннКа занималась по большей части сама, т. к. я отвечал скорее за техническую часть проекта.

Поскольку для японского языка озвучки у нас нет, в меню переделали выбор языка на две отдельные опции — язык текста и язык озвучка. Игра так понравилась людям, что в дальнейшем они сами переводили котёнка на свои языки, а поляки даже озвучили — АннТеннКа встраивала это всё в обновлениях, так что сейчас в стим-версии гораздо больше языков, чем было изначально!

Ещё из языковых проблем вспоминается проблемка со шрифтами — суть в том, что шрифт для латиницы не отображал букву «ё», а русский шрифт соответственно не отображал латинские символы с закорючками (как будто движок просто не умеет в сложные юникод-символы). Пришлось использовать разные шрифты для разных языков — какие-то из них АннТеннКа делала сама, дорисовывая недостающие символы. Но вроде бы она и раньше с этим сталкивалась в старой версии игры или может быть других своих проектах — я не вдавался в подробности, так-как она уже знала решение и оно работало.

Правка старых ошибок большей частью сводилась к небольшому причёсыванию кода с моей стороны, правками фраз со стороны АннТеннКи и её знающих языки друзей. Так же были переделаны подсказки, когда котёнок ищет какую-то вещь или нашёл её и должен отнести хозяйке. По-моему игра была уже давно готова и мы ничего там существенно не меняли.

Немного пришлось подправить и движок. Например, там была некая «старая система UI», которая давно не развивалась и оставалась только для совместимости — вместо неё была предложена другая «новая система UI» (назовём это так, да). Изначальный план включал просто обновление движка, на котором собрана игра, без существенной переделки самой игры. Так что переход на новую систему я отложил до подготовки широкоформатной версии (которую так и не сделал, да). Тем не менее, нужно было иногда что-то править и так как в «старой системе» игра мало что могла настраивать — всё было прохардкожено в движке — нужно было править в движке. Я не хотел форкать движок (и мне нравилась возможность собирать игру разными версиями если понадобится), так что я состряпал «оверлей». По-сути отдельную папку с файлами, а скрипт сборки копировал сперва нужную версию движка во временную папку, а потом файлы из этого «оверлея» поверх. Получается можно было менять что угодно в коде и ресурсах самого движка, при этом держа эти правки отдельно от движка. Такой вот простой трюк на батниках. Я пробовал отдать обратно в движок хотя бы исправление ошибок, но мой запрос отклонили, сказав что официально поддерживают только новую систему.

Ещё мы встраивали достижения стима. С ними можно работать по-разному и оказалось что автор движка уже сделал модуль с поддержкой этой возможности. Но так-как движок открытый, а Steamworks SDK закрытое, что бы случайно не показать лишнего — модуль поддержки достижений нужно было получать отдельно. Достаточно было просто связаться с автором, сказать что мы делаем игру для стима и хотели бы воспользоваться его наработками — как он любезно поделился приватной ссылкой на нужные файлы. Кроме несовместимости версий движка, поддержка достижений казалось мне ещё одним местом, где возможно будут какие-то проблемы и придётся программировать — но оба опасения по большей части не сбылись и всё заработало почти сразу.

Игра кстати вышла на всех трёх платформах — на венде мы проверяли её вместе, линукс был на моём ноутбуке. Мака под рукой не было, но кто-то из знакомых АннТеннКи проверил и там тоже работало. Из забавного — в настройках стима нужно указать исполняемый файл для каждой платформы и если вы скачиваете все файлы для всех платформ (как настроено у нас) — значит исполняемые файлы у разных платформ будут разные. Если эта настройка указана неправильно, стим скачает игру, но будет ругаться что нечего запускать. Немного сбивает с толку, что он не пишет имя файла, который пытается при этом запустить — так что нужно посмотреть что за файлы в дистибутиве и что указано в настройках.

В игру были добавлены достижения, а вот карточки не получилось — так как игра бесплатная. Зато к игре сделали дополнение. Это не какой-то «вырезанный сюжет» как сейчас модно, а бонусные материалы! У АннТеннКи сохранились рисунки игры, мы отсканировали их в хорошем качестве. Так же в коллекцию были собраны и другие дополнительные материалы, например более поздняя версия этой игры уже на флеше, короткий мультик с песенкой котёнка, музыка из игры, ноты… И, что мне больше всего нравится — видео об игре и том, что вдохновило АннТеннКу на её создание!

Вообще, что касается админки стима — там всё настраивала АннТеннКа и я старался не лезть особо, даже не просил делать себе доступа. Конечно, если были какие-то непонятки — мы сидели и смотрели вместе. Но в целом я больше техническими штуками интересуюсь, а их там не много — да и АннТеннКе этот опыт полезней, всё-таки у неё и другие игры есть. Я возможно поигрался бы там с мастерской и депотами, но такие мелочи мало кто заметит, так как игра и без них прекрасно работает — а это самое главное!

Ещё когда обсуждалось что как и зачем делать, мы решили, что хотим получить с этого проекта прежде всего опыт. Игра была давно готова и тратить кучу сил на переделку старой маленькой игры не хотелось — ведь по плану нужно было начинать разработку новой большой и крутой игры. Зато с маленькой старой игрой и проблем особо быть не должно было — так что она идеально подходила, что бы разобраться как же работает стим внутри. Лично я даже рад был, что одобрили самую простую и маленькую из выложенных АннТеннКой игр — её удалось обновить и выпустить спокойно осваивая стим, а не решая какие-нить сложные технические проблемы.

Я думаю, мы оба многому научились на запуске этой игры. Поначалу я думал, что это будет маленький и быстрый проект, так сказать «вошли и вышли — приключение на двадцать минут», но работа над кодом растянулась на несколько месяцев банально из-за того, что я порой ничего не делал или делал не то, что оказывается от меня ждала АннТеннКа.

Конечно, не все планы и мечты удалось реализовать — но мы смогли дать ещё большему количеству людей возможность поиграть в эту игру и многим она понравилась, а это уже значит что затея удалась! Очень приятно видеть, как люди в других играх делают моды по-мотивам приключений котёнка, записывают прохождения и обзоры (кстати, идея АннТеннКи с японской локализацией себя оправдала — игра нашла поклонников и в далёкой Азии!).

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s