[T.E.R.M.I.N.A.L.] Как я ослеп в собственной игре, новые языки и параноидальная аналитика

После релиза португальской локализации я приготовился с удовольствием наблюдать за графиками: очень хотелось узнать, как игроки из Бразилии страдают в моих мрачных бункерах. Но геймдев не прощает расслабленности.

Слепой полёт.

Примерно сразу после выкатки патча у меня... легла аналитика. Дата-центр Яндекса (а у меня стояла классическая AppMetrica) ушел в офлайн, и я ослеп.

Я как будто сам оказался в терминале: игроки где-то там скачивают игру, умирают от монстра, решают головоломки, а я сижу в полной, беспросветной тьме и не вижу ни одного ивента. Что там с бразильцами? Где они застревают? Неизвестно.

Пока сервера лежали, я вошел во вкус локализаций и вслепую пилил новый масштабный апдейт. В нем T.E.R.M.I.N.A.L. заговорил сразу на трех новых языках: испанском, турецком и (внезапно) индонезийском. Но выпускать такое масштабное обновление без рабочих метрик не хотелось.

Паранойя как двигатель прогресса.

Поняв, что доверять одной системе сбора метрик - это как хранить все сохранения игры на дискете, я решил продублировать аналитику. Выбор пал на MyTracker от VK. Гулять так гулять, теперь за каждым шагом игрока будут следить сразу две мегакорпорации!

Трудности перевода (теперь уже в коде).

Натягивать одни и те же ивенты на две разные системы - отдельный вид искусства. Если AppMetrica радостно жрет любые JSON-словари (с числами, булевыми значениями и прочей радостью), то MyTracker оказался куда более привередливым гурманом. Ему подавай только словари формата . Пришлось писать эдакого Франкенштейна: метод-конвертер, который аккуратно собирает JSON для Яндекса, а для VK судорожно переводит каждую цифру в строковый вид.

Архитектурный дзен.

Заодно под этот блэкаут пришлось окончательно переписать логику определения языка. Раньше аналитика пыталась угадать язык по системе девайса, из-за чего новые турецкие и индонезийские игроки в старых логах помечались бы как англичане. Теперь же скрипт просто культурно стучится в новенькую базу LanguageDatabase и забирает нужный код напрямую из профиля. Добавление любого нового языка теперь занимает ровно ноль строк кода в самой аналитике.

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

Заценить, как это выглядит в альтернативном сторе, можно здесь: https://appgallery.huawei.com/app/C119051223

Следить за моими "шедеврами" можно тут: https://vk.ru/bezdna13_ru

Скачать последнюю актуальную версию можно и с Рустора: https://www.rustore.ru/catalog/app/com.bezdna13.terminal