«На слюнях и молитве»: как исходный код VVVVVV показал обратную сторону разработки игр

Представители геймдева осудили разработчика за плохой код, но нашлась и поддержка.

«На слюнях и молитве»: как исходный код VVVVVV показал обратную сторону разработки игр

11 января инди-разработчик Терри Кэвена выложил исходный код своей первой игры — платформера VVVVVV, которому исполнилось 10 лет. По словам автора, на код интересно посмотреть в ретроспективе, изучить ошибки.

В частности, Кэвена считает своей худшей привычкой объявление временных переменных вроде «j», «i» и «k» членами каждого класса, чтобы не приходилось объявлять их внутри функций. Это привело к тому, например, что отлавливать баги стало невероятно сложно.

Когда я делал игру, я не понимал, как работают статические классы или когда их стоит использовать. Думаю, я где-то прочитал, что статические классы и глобальные переменные плохо работают во Flash, поэтому и пытался не использовать их вовсе. Результат? Каждая функция в игре обходит следующие аргументы: «Graphics& dwgfx, Game& game, mapclass& map, entityclass& obj, UtilityClass& help».

Терри Кэвена, инди-разработчик

Кэвена признаёт, что код VVVVVV — это «кошмар, даже по стандартам разработчиков-самоучек». Однако несмотря на предупреждения автора, в соцсетях стали обсуждать, насколько плохо он написан.

Исходный код видеоигры VVVVVV стал открытым сегодня, а кто-то обнаружил в нём оператор switch с несколькими сотнями кейсов. Прекрасно. Отвратительно.
Это не худшая имплементация конечных автоматов. Я немного поражён её элегантной простотой. Честно признаться, мне бы хотелось быть таким же умным, чтобы вот так вот всё сокращать. И я рад, что не занимаюсь дебаггингом этого кода.
Когда всё, что у тебя есть — это молоток...

Действительно, в коде платформера 4099 кейсов. Они определяют, в каком состоянии находится игра. Как правило их группируют отдельно: в одном месте кат-сцены, в другом — меню, в третьем — геймплейные механики и так далее. Однако в коде VVVVVV все состояния «свалены в кучу».

Polygon обратился к автору мобильных Pocket-Run Pool и Really Bad Chess Заку Кейджу с тем, чтобы он попытался объяснить, чем руководствовался Кэвена, когда писал этот код.

Он позволяет увидеть то, что Терри, возможно, не знал, когда начинал писать игру: сколько в ней будет кат-сцен, как будет работать главное меню и сколько может быть непонятных потенциальных конечных состояний у странных режимов [...] Вместо того, чтобы оглянуться назад и заняться организацией, Терри решил что-то вроде этого: «Эй, я просто буду добавлять состояния в этот оператор на случай, если они мне пригодятся». Это на 100% нормально и необходимо для того, чтобы выпустить игру.

Зак Кейдж, разработчик

Сам Терри Кэвена признаёт, что ближе к концу разработки монолитный конечный автомат «вышел из под контроля». В то же время, по его словам, благодаря этой системе в VVVVVV есть баг, позволяющий пройти игру всего за 50,2 секунды.

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

Есть слово, которым называют игры, код которых едва держится вместе: с глупой структурой, немасштабируемыми фиксами и костылями над костылями. «Выпущенная».
Почти каждая игра, над которой я работал, выходила в тот самый момент, когда её части, которые держались на слюнях и молитве, готовы были развалиться.
Любой, кто говорит, что его код чист, превосходно написан и без странностей — откровенный лжец. В потаённых уголках даже лучшего кода вы найдёте то, что станет вашим ночным кошмаром.
Я обсуждал это много раз на неделе. Пока код работает и не ломается, узнает ли об этом игрок и будет ли ему вообще дело?

Что же до самого кода и разработчика, то VVVVVV за первый день на GitHub получила 20 патчей, над которыми работали 10 человек. Терри Кэвена, в свою очередь, воспринял обсуждение своего кода с юмором.

С каждым скриншотом ужасных вещей в коде VVVVVV я становлюсь лишь сильнее.
175175
138 комментариев

Кот очень мудрые вещи говорит, вот без шуток.

19

Комментарий недоступен

103

Большинство кода в любом проекте, существующем в реальных условиях, так и написано и ничего, работает.

13

Вспоминаю скриншот кода Андертейла, на котором был виден свитч на около 600 кейсов. Вообще всякие паттерны программирования и бест практики - это скорее для крупных разработчиков. Для индюков, как ни странно, парадигма YOLO-кодинга будет как раз, ведь важно хотя бы довести проект до рабочего вида хоть в каком-то виде.

44

А потом выкинуть его нахуй, потому как вносить изменения будет стоить второй жизни.

49

Все бест практики крупных разработчиков разбиваются, когда к тебе прибегает менджемент с криками "Хуле так долго/требования поменялись/И т.д." и ты с горящей жопой настраиваешь костыли.


Идеального кода в проде действительно не существует, потому что сейчас важна скорость разработки, а не то, насколько у тебя охуенный код. А быстрая разработка в большинстве своем это говнокод

21