Ошибки разработчиков видеоигр. От идеи до провала
Шрифт:
Понятие case определяет, в каком состоянии находится игра: меню ли перед игроком, игровая сцена или финальные титры. Обычно их группируют вместе, но разработчик VVVVV, очевидно, не догадывался о том, сколько разных событий у него будет в игре, и под каждое состояние создавал свой case. В итоге «кейсов» у него вышло 4099. Тем не менее VVVVV – замечательная игра, заслужившая свой успех, и я ни в коем случае не пытаюсь обесценить талант Терри Кавано и высмеять его решения. Идеального кода не существует, каждый из нас лепит в свои проекты бессмысленный мусор. Я просто призываю к тому, чтобы заранее подумать хотя бы о том, сколько состояний будет у вашей игры, иначе вам придется страдать за свой продукт так же, как страдал
Рис. 3. Часть исходного кода к игре VVVVV. Terry Cavanagh, 2010
Какое-то время у разработчиков получается решать проблемы, возникающие на кривом фундаменте, но рано или поздно недоработок становится настолько много, что рациональнее становится переписать всё с нуля или же попросту начать отказываться от новых идей, чтобы не развалились старые. Ужас плохой архитектуры заключается в том, что работать-то проект на ней всё еще способен, а вот быть пластичным – нет.
Создание игры Yandere Simulator – симулятора школьницы-убийцы – ведется с 2012 года. Разработчик регулярно добавляет огромное количество абсолютно сумасшедших мелочей. Например, игрок может убить кого-нибудь ножом и тут же прижечь свежую рану жертвы горелкой – таким образом, когда он будет тащить труп по полу, тот не оставит кровавого следа. У каждого школьника есть свое расписание и даже своя обувь, которую он меняет при входе в здание образовательного учреждения.
Вся игра состоит из таких любопытных деталей, но вот уже больше десяти лет она никак не может перерасти в нечто большее. Разработчик-одиночка, стоящий за Yandere Simulator, уже прибегал к помощи издательства, но, когда к нему присоединился сторонний специалист, оказалось, что довести игру до ума почти невозможно: автор абсолютно все события, определяющие поведение сотни школьников в густонаселенном мире Yandere Simulator, выразил через простейшую и грубую связку операторов …if …else. В итоге имплементация каких-то глобальных новых механик оказалась невозможной, а сама игра, демоверсия которой тормозит так, словно запущенный на компьютере двадцатилетней давности Red Dead Redemption 2, всё еще не вышла в свет.
В Reflection of Mine по причине своей некомпетентности я абсолютно сумасшедшим образом реализовал меню паузы: в состоянии паузы скорость движения каждого игрового объекта умножалась на ноль шестьдесят раз в секунду. Объекты останавливались? Да. Но добавление любого движущегося элемента вынуждало меня возвращаться в «кейс» паузы и вписывать туда дополнительные условия. В итоге я подсознательно отговаривал себя от добавления новых подвижных игровых объектов во избежание необходимости тормошить этот собранный из костылей ворох, где малейшая опечатка ломала игру.
Ситуация, в которой изначально неправильные и неуклюжие решения дают-таки положительный результат, наращивают ту самую вовлеченность. Это когнитивное искажение заключается в том, что, даже столкнувшись с негативными последствиями наших действий и решений, мы всё равно продолжаем двигаться в том же направлении и из раза в раз делать одно и то же. Это только усугубляет ситуацию, и «макароны» в какой-то момент начинают уже лезть из кода в виде ужасных багов и зависаний.
Принимая иррациональное решение продолжать работать на фундаменте кривого кода, мы учитываем количество усилий, уже затраченных на его реализацию, тестирование и вылавливание глюков и
Сокрушительная ошибка, допущенная мной при разработке Catmaze, заключалась в том, что весь текст (а его у меня, к слову, набралось двадцать тысяч строк) я вставлял прямо в код. Когда игру перевели на пять дополнительных языков и прислали мне огромную таблицу с переводом, мне пришлось сто тысяч раз нажать crtl+c и сто тысяч раз нажать ctrl+v. Чудовищная архитектура моего проекта не позволяла мне даже автоматизировать этот процесс, потому что некоторые строки приходилось вставлять «по-особому».
В самом начале этой утомительной работы я догадывался, что потрачу куда меньше времени и сил, если внедрю в игру адекватную диалоговую систему и автоматизирую появление текста на разных языках. Но, во-первых, мой синдром самозванца нашептал мне на ушко, что я не справлюсь с этой работой, ибо я же не программист (и плевать, что ровно месяц назад я сделал хорошую и удобную диалоговую систему для Fearmonium – мне же якобы просто повезло, что она работает, второй раз я такого сделать не смогу), а во-вторых, уровень моей вовлеченности в ужасную архитектуру Catmaze был уже слишком высок: я же уже нажал сорок тысяч раз на ctrl+c и столько же раз на ctrl+v, когда добавлял в игру английский и русский. Я что, зря тогда мучился?
По причине наращивания вовлеченности появление более правильного и изящного решения для интеграции новых языков казалось чем-то, что сводит на нет все мои предыдущие труды. «Если я сейчас исправлю архитектуру, – думал я, – то получается, что я напрасно страдал и работал столько дней!» Можно ли назвать это мышление иррациональным? Конечно, да.
Но в определенные моменты что разработки, что жизни вообще мы все поддаемся наращиванию вовлеченности: кому-то трудно разорвать болезненные отношения, на алтарь которых они уже положили слишком многое; кто-то излишне долго тянет с увольнением с бесперспективной работы, на которой он и без того провел слишком много лет; кто-то усердно, сквозь уныние и грусть, выбивает все достижения в игре, которая ему толком не нравится, но в которую он уже успел наиграть десятки часов перед тем, как это осознать; кто-то досматривает сериалы, на середине которых сценаристы уже потеряли рассудок и повернули повествование в сторону банальностей или полного абсурда…
Лучше всего об этом когнитивном искажении известно маркетологам, предлагающим накопительные карты со скидками или бесконечные кредиты, а также мошенникам, которые затягивают вас в долгую беседу с расчетом на то, что, потратив немало времени на разговор с ними, вы с большей охотой уделите им еще несколько своих драгоценных минут.
Поэтому маленькие команды годами тянут разработку своей «RPG в открытом мире», попусту растрачивая силы и ресурсы, а в итоге сворачивают проект и берутся за создание небольшого уютного квеста. Поэтому Терри Кавано, превозмогая хаос в коде своего проекта, продолжал громоздить условие на условии и чудом довел игру до выхода в свет. Потому и я нажал сто тысяч раз ctrl+v.
Позитивный исход
И мне очень хотелось бы остановить на этом перечисление искажений, которые провоцируют начинающих разработчиков браться за непосильную ношу, проваливаться и выгорать, но я перечислил еще не все подводные камни, способные столкнуть нас в омут громоздких проектов. Исследования давно доказали существование «эффекта Ирвина», который заключается в том, что мы склонны переоценивать вероятность позитивного исхода вне зависимости от степени нашей оптимистичности. Возможность ошибиться и провалиться в том или ином начинании воспринимается нами как очень маловероятная.