Читаем Ошибки разработчиков видеоигр. От идеи до провала полностью

Создание игры 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, когда добавлял в игру английский и русский. Я что, зря тогда мучился?

По причине наращивания вовлеченности появление более правильного и изящного решения для интеграции новых языков казалось чем-то, что сводит на нет все мои предыдущие труды. «Если я сейчас исправлю архитектуру, – думал я, – то получается, что я напрасно страдал и работал столько дней!» Можно ли назвать это мышление иррациональным? Конечно, да.

Но в определенные моменты что разработки, что жизни вообще мы все поддаемся наращиванию вовлеченности: кому-то трудно разорвать болезненные отношения, на алтарь которых они уже положили слишком многое; кто-то излишне долго тянет с увольнением с бесперспективной работы, на которой он и без того провел слишком много лет; кто-то усердно, сквозь уныние и грусть, выбивает все достижения в игре, которая ему толком не нравится, но в которую он уже успел наиграть десятки часов перед тем, как это осознать; кто-то досматривает сериалы, на середине которых сценаристы уже потеряли рассудок и повернули повествование в сторону банальностей или полного абсурда…

Перейти на страницу:

Похожие книги

Язык программирования C++. Пятое издание
Язык программирования C++. Пятое издание

Лучшее руководство по программированию и справочник по языку, полностью пересмотренное и обновленное под стандарт С++11!Р'С‹ держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под стандарт С++11. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. Р' соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать РёС… наилучшие СЃРїРѕСЃРѕР±С‹ применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.Стенли Р'. Липпман работал старшим консультантом в Jet Propulsion Laboratory, архитектором РіСЂСѓРїРїС‹ Visual С++ корпорации Microsoft, техническим сотрудником Bell Laboratories и главным инженером- программистом по анимации в кинокомпаниях Disney, DreamWorks, Pixar и PDI.Р–РѕР·и Лажойе, работающий ныне в кинокомпании Pixar, был членом канадской РіСЂСѓРїРїС‹ разработчиков компилятора C/C++ корпорации IBM, а также возглавлял рабочую группу базового языка С++ в составе международной организации по стандартизации ANSI/ISO.Барбара Э. Му имеет почти тридцатилетний опыт программирования. На протяжении пятнадцати лет она работала в компании AT&T, сотрудничая с Бьярне Страуструпом, автором языка С++, и несколько лет руководила РіСЂСѓРїРїРѕР№ разработчиков С++.• Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования• Р

Барбара Э. Му , Жози Лажойе , Стенли Б. Липпман

Программирование, программы, базы данных
Programming with POSIX® Threads
Programming with POSIX® Threads

With this practical book, you will attain a solid understanding of threads and will discover how to put this powerful mode of programming to work in real-world applications. The primary advantage of threaded programming is that it enables your applications to accomplish more than one task at the same time by using the number-crunching power of multiprocessor parallelism and by automatically exploiting I/O concurrency in your code, even on a single processor machine. The result: applications that are faster, more responsive to users, and often easier to maintain. Threaded programming is particularly well suited to network programming where it helps alleviate the bottleneck of slow network I/O. This book offers an in-depth description of the IEEE operating system interface standard, POSIX (Portable Operating System Interface) threads, commonly called Pthreads. Written for experienced C programmers, but assuming no previous knowledge of threads, the book explains basic concepts such as asynchronous programming, the lifecycle of a thread, and synchronization. You then move to more advanced topics such as attributes objects, thread-specific data, and realtime scheduling. An entire chapter is devoted to "real code," with a look at barriers, read/write locks, the work queue manager, and how to utilize existing libraries. In addition, the book tackles one of the thorniest problems faced by thread programmers-debugging-with valuable suggestions on how to avoid code errors and performance problems from the outset. Numerous annotated examples are used to illustrate real-world concepts. A Pthreads mini-reference and a look at future standardization are also included.

David Butenhof

Программирование, программы, базы данных