Вечером мне всё ещё бывает интересно открыть код. За годы в профессии это желание никуда не делось. Мне нравится разбираться в том, чего пока не умею, пробовать, смотреть, что получится. И уже много лет часть этого интереса связана с командой, в которой мы делаем игру — NeuroBornCats.
Мне нравится сама эта формулировка: «мы делаем игру». В ней есть что-то, от чего даже после долгого рабочего дня становится любопытно. Есть общий мир, который постепенно обрастает правилами, предметами, возможностями. И я участвую в том, чтобы он работал.
У героя сломалось оружие. У разработчика появились вопросы
В NeuroBornCats у игрока есть герой: он развивается, работает, получает награды, сражается, подбирает экипировку. У предметов есть прочность, они могут ломаться, их можно ремонтировать. На экране всё это должно выглядеть естественно. Надел оружие, пошёл в бой, получил результат.
А за экраном начинается то, ради чего мне интересно заниматься разработкой.
Например, двуручное оружие занимает сразу два слота. Значит, его надевание меняет состояние обеих рук. От набора оружия зависит число атак за ход. Прочность связывает экипировку с результатами боя, а ремонт — с игровой валютой. Стоит потянуть за один предмет, и обнаруживается целый клубок правил.
Или игрок закрыл вкладку и вернулся позже. За это время могла закончиться работа, восстановиться часть здоровья, появиться награда. Нужно показать ему актуальное состояние. Для человека это простое ожидание: «Я вернулся, покажите, что у меня происходит». Для разработчика — повод внимательно разобраться с фоновыми задачами, событиями и тем, каким данным доверяет клиент.
Мне нравится, что у таких вопросов есть понятный смысл. Ошибка в состоянии инвентаря — это вполне конкретное оружие, которое герой почему-то не может взять в руки. Сразу представляешь человека по другую сторону экрана.
Знакомый стек, непривычные задачи
Серверная часть проекта написана на PHP и Laravel, использует PostgreSQL, Redis, очереди и события в реальном времени. Сам по себе набор технологий для меня не главный повод проводить здесь вечера. Интерес начинается там, где нужно разобраться, как с их помощью выразить игровые правила.
Как связать несколько механик так, чтобы они не противоречили друг другу? Что произойдёт, если действие придёт повторно? Как сообщить об изменении состояния человеку, у которого на секунду пропало соединение? Знакомые инженерные вопросы приобретают другие подробности, когда речь идёт о бое, награде или сломанном предмете.
Вот такое развитие мне и интересно: появляется задача, в которую хочется вникнуть, а по дороге приходится чему-то учиться. У нового знания сразу есть применение. Можно проверить, насколько хорошо ты действительно понял тему.
Много лет рядом с одним проектом
В долгой работе над игрой есть ещё одна ценность: остаёшься рядом со своими решениями. Проект продолжается, появляются новые связи между механиками, и прежние идеи приходится рассматривать заново. Решение, которое устраивало само по себе, должно ужиться с остальной игрой.
И всё это происходит в команде. У общей игры есть взгляды и замыслы других людей. Свою идею нужно объяснить, чужую — понять, а потом договориться о том, как это будет работать вместе. Для меня участие в таком проекте — ещё и возможность продолжать учиться у людей, с которыми мы его делаем.
Я не думаю, что каждому разработчику обязательно нужен проект на вечер. У меня он есть потому, что мне самому интересно. Даже спустя много лет фраза «мы делаем игру» не стала для меня привычной строчкой в списке занятий.
В ней до сих пор слышится: а что ещё мы сможем придумать?