SR2020 - подробности про мои куски. Часть 1: Исправления во время игры.

Очень типовой вопрос про ролевую разработку это “а как сделать так, чтоб не было багов и ничего не пришлось фиксить по ходу игры”. Ответы на него разнятся (при этом ответ “никак блядь” довольно типичен). Мой ответ “нужно много и усердно тестировать систему до игры, в том числе на реальных игроках”. Но с этим в программировании для РИ всегда большие проблемы (увы).

Мои цели на время игры были

  • Точно не реализовывать никаких новых фич
  • Чинить только критичные баги, причем не беря на себя обязательств чинить их прямо очень быстро (во время игры я вполне себе работал работу).

И то, и другое у меня получилось … относительно. Фичи добавлялись исключительно в вспомогательный функционал (админка, логирование) в незначительном количестве. А вот баги, исправленные во время игры может быть интересно разобрать подробнее.

Критичные баги

  • Возможно, самый большой мой факап: за день до игры я пытался пофиксить падение приложения при сканировании персонажей в дроне/духе. И заодно решил удалить немножко неиспользованного кода. Крайне зря! Разумеется, порядковые номера элементов enum’а поехали, что привело к многочисленным бедам (наиболее типовая - ценники распознавались как мясные тела). В итоге версия приложения 337 оказалась тотально сломанной. С чем повезло: большая часть игроков закупалась еще до старта игры, поэтому проблему обнаружили рано, пофиксили быстро, в гуглплей обновление пришло быстро и большинству игроков пришлось обновиться чтоб закупиться. Тем не менее, еще минимум 2 дня обнаруживались игроки с неактуальной версией приложения (вплоть до 330, правда). Как надо делать в будущем: отсылать версию приложения при логине и не пускать всех, у кого старая.
  • Проблема с вычислением лимитов кармы - стартовая карма тоже считалась в этот лимит вопреки ТЗ. В итоге игроки с большим количеством стартовой кармы уперлись в лимит сразу после старта игры. Как вышло: комбинация того, что концепция стартовой генережки поменялась (исходно предполагалось, что вместо стартовой кармы будут стартовые абилки) и того, что я попытался немного “срезать” при реализации вычисления лимитов кармы. Делал бы по ТЗ (в данном случае оно было очень хорошо прописано) - проблемы бы не возникло. С чем повезло: игрок немедленно зарепортил проблему и она мало кого успела затронуть. Как исправили: переделали в соответствие с ТЗ (1, 2). По факту это сбросило лимит. Но к счастью дело было всего через пару часов после начала игры.
  • Дроны, навсегда лишавшиеся абилок при поломке. При поломке дрона у игрока отбирались все активные абилки дрона, чтоб предотвратить читерство. А после выхода из дрона все активные абилки дрона перебрасывались с персонажа на QR дрона. Комбинация этих фактов привела к тому, что поломавшийся дрон навсегда лишался всех абилок. Как вышло: два куска логики, описанные выше делались разными людьми. Поэтому прозевали это сочетание. Ну и недостаток юнит-тестов, конечно. С чем повезло: игрок немедленно зарепортил проблему и других игроков она не успела затронуть. Фикс: коммит. Ну и выдали пострадавшему игроку нового дрона.
  • Что делать, я застрял. По плану, при нахождении в дроне/духе/виаре нельзя было получить ранение (или вылечиться). Все повреждающие эффекты откладывались до момента возврата в физическое тело, а лечащие, по идее не были нужны. Но у игроков получилось оказаться в духе и тяжело раненым. Как? Игрок упал в тяжран от голода и сразу после этого, пока приложение еще не успело заблокироваться, зашел в духа. В итоге выйти нельзя, т.к. приложение заблокировано, а медицина не работает, потому что она не лечит тела духов. Как вышло/фикс: продолбали серверную проверку “раненым нельзя входить в духов”. Игрока вытащили из духа вручную.

Среднеприоритетные баги

  • Абилки гешефтмахера не работают на Тотемы для духов. Как вышло: сущность “Тотем” была добавлена очень незадолго до игры. Добавить добавили, отметить что эти сущности являются товарами забыли. Фикс тривиальный, но в целом пережили б и без него.
  • Духи умеют воскрешать, но это не точно. У некоторых духов была абилка Undiena, позволяющая поднимать персонажей из Клинической Смерти. Точнее, не позволяющая, т.к. абилку Undiena сделали копией абилки Ground Heal и использовали тот же обработчик. А потом Ground Heal понерфили, убрав возможность поднимать из КС. Упс! Фикс тривиальный - сделали для отдельной абилки отдельную реализацию.
  • Если вы вкачаете эти абилки, то сможете чинить более сложных дронов. Но нет. Тут снова вылезла неочевидность разницы между базовой и рабочей моделью персонажа (т.е. без учтенных модификаторов и с учтенными модификаторами, подробности см. в дизайн-доке). Ну и опять же - забыли написать юнит-тесты. Фикс снова тривиальный.

Не баги вовсе

Был вагон и маленькая тележка багрепортов от игроков про “я упал в тяжран/КС вот просто так”. Даже вот в гдесрач один попал :) На поверку все они оказывались правомерными падениями в КС по таймеру - либо голода, либо зависимости от химоты. Мне до сих пор неизвестно о каких-то реальных багах такого плана. Если вдруг кто-то считает что они были/хочет разобраться в том, что с ним произошло на игре - обращайтесь, по логам все легко восстанавливается.

Короче, без багов, в том числе критичных, не обошлось. Но что радует:

  • Багов было относительно немного.
  • От получения багрепорта до понимания проблемы у меня уходило < 10 минут практически во всех случаях. Даже несмотря на нахождение в 2000км от полигона. Спасибо удобному доступу к логам и админке, по которой можно было легко понять состояние персонажа.
  • Не потребовалось ни одного сколь-нибудь нетривиального фикса.
  • Итого от багрепорта до выхода исправленной версии на прод проходило меньше часа (в большинстве случаев меньше получаса).