«На слюнях и молитве»: как исходный код VVVVVV показал обратную сторону разработки игр
Представители геймдева осудили разработчика за плохой код, но нашлась и поддержка.
В частности, Кэвена считает своей худшей привычкой объявление временных переменных вроде «j», «i» и «k» членами каждого класса, чтобы не приходилось объявлять их внутри функций. Это привело к тому, например, что отлавливать баги стало невероятно сложно.
Когда я делал игру, я не понимал, как работают статические классы или когда их стоит использовать. Думаю, я где-то прочитал, что статические классы и глобальные переменные плохо работают во Flash, поэтому и пытался не использовать их вовсе. Результат? Каждая функция в игре обходит следующие аргументы: «Graphics& dwgfx, Game& game, mapclass& map, entityclass& obj, UtilityClass& help».
Кэвена признаёт, что код VVVVVV — это «кошмар, даже по стандартам разработчиков-самоучек». Однако несмотря на предупреждения автора, в соцсетях стали обсуждать, насколько плохо он написан.
Действительно, в коде платформера 4099 кейсов. Они определяют, в каком состоянии находится игра. Как правило их группируют отдельно: в одном месте кат-сцены, в другом — меню, в третьем — геймплейные механики и так далее. Однако в коде VVVVVV все состояния «свалены в кучу».
Polygon обратился к автору мобильных Pocket-Run Pool и Really Bad Chess Заку Кейджу с тем, чтобы он попытался объяснить, чем руководствовался Кэвена, когда писал этот код.
Он позволяет увидеть то, что Терри, возможно, не знал, когда начинал писать игру: сколько в ней будет кат-сцен, как будет работать главное меню и сколько может быть непонятных потенциальных конечных состояний у странных режимов [...] Вместо того, чтобы оглянуться назад и заняться организацией, Терри решил что-то вроде этого: «Эй, я просто буду добавлять состояния в этот оператор на случай, если они мне пригодятся». Это на 100% нормально и необходимо для того, чтобы выпустить игру.
Сам Терри Кэвена признаёт, что ближе к концу разработки монолитный конечный автомат «вышел из под контроля». В то же время, по его словам, благодаря этой системе в VVVVVV есть баг, позволяющий пройти игру всего за 50,2 секунды.
Впрочем, некоторые разработчики посчитали, что такое состояние кода — это обычное дело для индустрии, а идеального кода попросту не существует.
Что же до самого кода и разработчика, то VVVVVV за первый день на GitHub получила 20 патчей, над которыми работали 10 человек. Терри Кэвена, в свою очередь, воспринял обсуждение своего кода с юмором.
Cпустя год глюканул макбук, принёс его в Эппл стор, там мне говорят что готовы заменить на новый, но к огромному сожалению такой же модели на 8 гигов оперативы уже нет, могут дать только 16 Гб.
Собрали множество отличных материалов, написанных пользователями сайта.
Кот очень мудрые вещи говорит, вот без шуток.
Комментарий недоступен
Большинство кода в любом проекте, существующем в реальных условиях, так и написано и ничего, работает.
Вспоминаю скриншот кода Андертейла, на котором был виден свитч на около 600 кейсов. Вообще всякие паттерны программирования и бест практики - это скорее для крупных разработчиков. Для индюков, как ни странно, парадигма YOLO-кодинга будет как раз, ведь важно хотя бы довести проект до рабочего вида хоть в каком-то виде.
А потом выкинуть его нахуй, потому как вносить изменения будет стоить второй жизни.
Все бест практики крупных разработчиков разбиваются, когда к тебе прибегает менджемент с криками "Хуле так долго/требования поменялись/И т.д." и ты с горящей жопой настраиваешь костыли.
Идеального кода в проде действительно не существует, потому что сейчас важна скорость разработки, а не то, насколько у тебя охуенный код. А быстрая разработка в большинстве своем это говнокод