12+
Математическое руководство по созданию компьютерных игр

Бесплатный фрагмент - Математическое руководство по созданию компьютерных игр

Справочник

Объем: 316 бумажных стр.

Формат: epub, fb2, pdfRead, mobi

Подробнее

3-я редакция, переработанная и дополненная


Разработчик:


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


Рецензент:


Кирилл Викторович Орлов, дипломированный кандидат технических наук.


С использованием материалов:


«Искусство программирования» ― 3-е издание, Дональд Кнут. Вильямс, 2007.


«Алгоритмы: построение и анализ» ― 2-е издание. Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн. Вильямс, 2005.


«Как стать создателем компьютерных игр. Краткое руководство» ― В. В. Касихин. Вильямс, 2006.


«Компьютерные игры. Мимо вечности в забвение.» ― А. С. Патрашов. 2009.


«О, рандом! Или мракобесию от программирования посвящается.» ― А. С. Патрашов. 2010.


«USB-flash или маленький конец большого пиратства» ― А. С. Патрашов. 2010.


«Последний день пирата, или интернета, интернета…» ― А. С. Патрашов. 2010.


«Создание концепт-документа игры» ― С. Валиуллин. 2009.


«The art of game design. A book of lenses» ― Jesse Shell. Carnegie Mellon University, 2008.

Если хочешь что-то сделать ― лучше сделать это самому.

Народная мудрость

Не доверяй павиану.

Африканская народная мудрость

Лучший способ в чём-то разобраться до конца ― это попробовать научить этому компьютер.

Дональд Кнут

Математику уже за то любить следует, что она ум в порядок приводит.

М. В. Ломоносов

Математические формулы не могут «принадлежать» кому-либо! Математика принадлежит Богу.

Дональд Кнут

Компьютерная игра это ожившая математика.

Примечание автора

Предисловие

На сочинение данного руководства меня подвигла унылая тоска в области компьютерных игр, царящая последнее время, похоже, во всех жанрах. Старые игры, безусловно, радуют, но ни толкового продолжения, ни хотя бы работы над ошибками я пока что не увидел и при нынешнем положении в игростроении не увижу ещё долго. Делается всё, что угодно, кроме того, что в каждом конкретном случае нужно. Вместо грамотных ремейков делаются безграмотные продолжения и новоделки, вместо разнообразия производится клонирование, вместо продолжений изготавливают независимые вариации, вместо оригинальных инноваций создают убогие компиляции, а после успешных релизов пытаются продать совершенно провальные продолжения или сиквелы.

Если вы решили изготовить хотя бы приличную, не говоря уже про культовую, компьютерную игру, то данное руководство должно вам помочь. Среди многочисленных провалов разработчиков игр подавляющее большинство произошли ещё на этапе разработки. Разработчик только предполагает, что будет происходить в игре, а игроки располагают и бесполезно потом говорить, что планировалось нечто совершенно иное, что игровой процесс должен был идти совсем не так, как пошел на самом деле и объяснять почему он зашел совершенно не туда.

По дизайну компьютерных игр написаны целые шкафы книг, так что сам дизайн я затронул только косвенно. Основные гибельные явления происходят не в определённой области работы, а на стыке разных областей. Дизайнер не обязан разбираться и не всегда разбирается в программировании, а художник не обязан разбираться в звуке или скриптах. Проблема заключается в том, что задачи из одной области любят переползать в другую во-первых и не всегда нужный специалист присутствует в нужном месте в нужное время во-вторых. В итоге начинается решение дифференциальных уравнений гуманитарным способом или сочинение диалогов на языке программирования высокого уровня, а в тяжёлых случаях всё сразу и одновременно.

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

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

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

Хоть данное руководство и не претендует на полноту, но в конце приведены примеры его использования для создания компьютерных игр и решения некоторых связанных с этим задач. После разработки по этому руководству можно спокойно продолжить разрабатывать игру по любым другим или наоборот. Также ничего не мешает использовать несколько руководств или учебников одновременно. На этом переходим к изучению изготовления компьютерных игр.

Вступление

Приступая к изготовлению компьютерной игры надо в первую очередь помнить, что вы производите её не для себя, а для потребителя, так что в первую очередь надо учитывать мнения покупателей, то есть игроков, а не своё собственное. Это не значит, что надо отказаться от своего мнения вообще или слушать рассуждения каждого неграмотного пользователя, не отличающего мышь от клавиатуры, но каждое своё действие надо уметь обосновывать так, чтобы у игроков не оставалось сомнений в правильности выбора изготовителя.

Естественно, не может не возникнуть вопрос о качестве игры и что под этим понимать. Какую игру можно считать качественной, а какую нет? Можно ли определить качество игры ещё до начала её продаж? Что больше влияет на качество игры и какую игру можно назвать хорошей и качественной? Нравится или не нравится, но единственной оценкой после выхода игры будет общий доход с её продаж, учитывая украденное пиратами. В игре будет оценивается качество исполнения, графика, художественная составляющая, драматургия, интерфейс и его удобство, механика, баланс, звук, литературная ценность текста и можно найти ещё много чего. И на каждый из этих аргументов у потребителей будет своя реакция, а на основе множества реакций надо получить одну.

И снова приходится признать, что только деньги позволяют произвести оценку на основании функции потребления с множеством аргументов потому, что являются значением функции спроса, аргументом которой является функция оценки от вышеназванного множества аргументов. Деньги объединяют множество субъективных и объективных оценок в единую цифру статистики дохода от продаж игры и позволяют понять, что игра получилась успешной или провальной.

Можно считать верным утверждение, что какова бы ни была игра, всегда найдутся те, кому она очень понравится, и те, кому она очень не понравится. Разница будет только в количестве. Это очень старинное и близкое к абсолютно верному наблюдение. Сразу же вспоминается другое высказывание, что всё есть яд и всё есть лекарство, а разница только в количестве. Так вот, на рынке именно количество проданных копий вместе с ценой определяет доход от продаж и если это количество можно пересчитать по пальцам, то провал обеспечен. Так что делать абы что в надежде, что хоть кто-нибудь да купит, экономически невыгодно.

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

Можно, конечно, идти по пути реставрации и модернизации и обновлять уже имеющуюся игру в соответствии с техническими достижениями времени. Этот путь приносит не ошеломительный, хотя бывают и нередкие исключения, но достаточно прочный успех и заслуженно пользуется популярностью и спросом у игроков, но не у производителей, точнее не у всех производителей. Опасения, что второй раз перечитывать книгу только потому, что у неё обложка покрасивее и бумага побелее, никто не будет, перевешивают у производителей ожидания спроса. Правда в другой отрасли издатели то и дело книги хоть столетней давности переиздают и пока на отсутствие доходов не жалуются ― есть чему поучиться.

Вообще, понятия устаревших игр не существует. Если игра сделана правильно и не на один день, то устаревает она только для тех, кто в неё уже играл и наигрался. Через пять, в крайнем случае десять, лет вырастет новое поколение игроков, которые будут воспринимать её как новую. То, что новое это хорошо забытое старое, подходит и к компьютерным играм. Heroes of Might and Magic II не уходят с мониторов уже пятнадцать лет и не уйдут ещё не одно десятилетие.

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

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

Если отвлечься от вариационного исчисления и принципа Лагранжа, то игровой процесс всегда идёт по пути наименьшего сопротивления. Начиная играть каждый игрок ставит перед собой определённую задачу и всё остальное он делает уже для выполнения этой задачи, а очень часто способ её выполнения сильно отличается от предполагаемого. А что мы часто получаем в итоге?

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

Работа над сделанными предшественниками ошибками при создании аналогичных игр неизбежна и необходима, а теперь от перечисления того, как не надо делать, переходим к тому, как надо делать. Обычно от просчётов разработчиков страдают RPG, но элементы RPG присутствуют и в тактических и в стратегических играх, принося в них те же беды. Так что за образец для работы мы возьмём RPG. Это не значит, что всё изложенное применимо только к RPG, но просто с RPG легче работать потому, что в них ярче выражены всевозможные просчёты и ошибки.

Порядок разработки новой игры или ни шагу без бумаги

Кто бы и что бы ни говорил, но компьютерная игра это в первую очередь программа и разработка программы это проект, а на разработку проектов уже давно придумали почти всё, что только можно. Если бы мы разрабатывали конструкторскую документацию, то нам бы понадобился ГОСТ 2.103—68 на стадии разработки проекта, но этот же ГОСТ подойдёт нам и для разработки проекта программы. Правда есть ещё ГОСТ 19.102—77, который предназначен уже непосредственно для разработки программ, но он только для программ и предназначен, а у нас будет ещё предостаточно задач кроме программирования. Итак, что нам предписывают в помощь.

Этап первый: замысел игры. Или техническое предложение по ГОСТу. На этом этапе описывается замысел игры, её основные черты, время и место действия, действующие лица и прочие ключевые положения, которые лягут в основу следующего этапа. Правильно изложенный замысел игры занимает не больше одной страницы или 4000 знаков. Если замысел не укладывается в этот объём, то либо он неправильно изложен, либо это уже не замысел, либо удалось придумать что-то выдающееся, что бывает крайне редко и обычно не встречается.

На этапе замысла игры над проектом работают приблизительно от одного до десяти человек в течении примерно до десяти дней. В работающей над замыслом игры группе могут или должны присутствовать сценарист, дизайнер, художник, программист, писатель, специалист по звуку, моделист, аниматор, маркетолог, руководитель проекта и экономист. Этот состав может меняться в зависимости от размеров и сложности запланированной игры или при необходимости возможно совмещение нескольких обязанностей или специальностей. Обычно трудозатраты на замысел игры укладываются в промежуток от 1 до 100 человекодней. Завершенный замысел игры представляет собой примерно страницу печатного текста без рисунков с достаточно полным для общего представления об игре описанием. По виду замысел игры напоминает её краткое описание на упаковке. Если подобный результат не получен, то этап надо повторять до тех пор пока не получится.

Этап второй: содержание игры. Или эскизный проект. На этом этапе описывается игровая и художественная части проекта. Определяется кто и чем будет заниматься из игровых персонажей, будет ли меняться игровой мир и так далее. Разрабатывается графический интерфейс игры. Определяются списки характеристик персонажей и мобов. Задаются размеры игрового пространства и способ передвижения. Устанавливается тип и класс будущей игры.

Независимо от количества участников предыдущего этапа на этапе содержания игры над проектом работают всё так же от одного до десяти человек, но уже в течение от 10 до 100 дней. Состав рабочей группы может быть и тот же, что и во время работы над этапом замысла игры. Трудозатраты на содержание игры находятся уже в пределах от 10 до 1000 человекодней. После того, как определены все свойства игроков, род их занятий и выбрано взаимодействие пользователя с окружением, а также состав окружения, можно переходить к следующему этапу.

Этап третий: дизайн игры. Или технический проект. На этом этапе составляется подробный перечень всего, что будет находиться в игре и рассчитывается вся механика взаимодействия. Рисуются планы, схемы, пишутся диалоги, рассчитывается баланс, распределяются роли действующих героев и просчитывается весь игровой сценарий. Предварительно прорисовываются эскизы, текстуры, ландшафты, модели, оружие, броня, одежда, растения и животные, мобы, окружающие предметы мебели, строения, транспортные средства и прочее, а также пишутся диалоги.

Технически это самый сложный этап в разработке игры. Количество участников возрастает и становится приблизительно от 10 до 100, но работа над дизайном ведётся столько же, сколько и над содержанием. Состав работников проекта расширяется и некоторые специальности требуют несколько исполнителей. Участники предыдущих этапов могут войти в этот этап уже руководителями направлений разработки. назначение их руководителями целесообразно с точки зрения лучшего понимания поставленной задачи, а также их более длительного участия. Трудозатраты на дизайн игры составляют уже от 100 до 10000 человекодней. После того, как дизайн игры будет готов, можно переходить уже к непосредственно изготовлению игры.

Этап четвёртый: изготовление игры. Или рабочий проект. На этом этапе начинается изготовление рабочих моделей и программирование. Каждое действие выполняется в соответствии с дизайном игры. Это один из самых трудных и самых длительных этапов разработки, он включает уже не столько творческую, сколько механическую работу. В конце этапа изготовления должна получиться готовая для тестирования игра.

Практически специалисты из предыдущих этапов не задействованы в последнем этапе, но на этапе изготовления количество исполнителей возрастает и становится от 100 до 1000. Для мелких проектов это количество может быть значительно меньше и доходить до нескольких или вообще одного человека. Также возрастает и продолжительность этапа и становится уже от 100 до 1000 дней. И опять же следует заметить, что для мелких проектов это время может сокращаться до нескольких дней или часов. Таким образом трудоёмкость изготовления игры становится от 10000 до 1000000 человекодней и является самой дорогой частью производства игры.

Переход к следующему этапу должен осуществляется только после окончательного завершения рабочего этапа. Если нарушить это правило, то работа над игрой превратится в непрерывное переделывание недоделанного проекта. Трудоёмкость по мере перехода между этапами стремительно возрастает и прошедшая в следующий этап ошибка будет обходиться по мере продвижения разработки всё дороже. Дополнительной сложностью может стать необходимость непрерывного исправления содержащихся в самом задании ошибок.

Переход к следующему этапу раньше времени возможен также в порядке выполнения НИР (научно-исследовательской) или ОКР (опытно-конструкторской) работ. В этом случае следующие этапы выполняются только частично, а не полностью, с целью выявить возможность выполнения или поиска ошибок предыдущих этапов разработки.

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

Этап 1. Концепция ― текстовое и графическое описание ключевого замысла проекта. Может быть практически чем угодно от одной фразы или набора особенностей, до полноценных коммерческих предложений, с предполагаемыми прибылями, альбомами художественного представления и тому подобных демонстрационных материалов. Сильно зависит от необходимости привлечения капитала и трудовых ресурсов. Лично заинтересованные участники могут вступить в проект и за возможность добавить в игру собственную фразу или целый набор игровых особенностей.

Объем документации на данном этапе составляет от 1 строки, до сотен страниц и содержит в себе в основном описание проекта игры и почему вообще стоит им заниматься. Для получения сотен миллионов долларов или евро надо будет писать огромные пакеты документов, со статистикой почему этот проект окупится, анализом спроса, положения на рынке и так далее. Этап выработки концепции может повторяться несколько раз при отказе от текущей концепции с выработкой новой или сразу переходить на следующий этап.

Этап 2. Прототип ― проверка концепции, чаще всего заканчивается провалом вне зависимости от объема первоначальных инвестиций. Друзьям или знакомым ведущего разработчика надоедает или им кажется что идея непригодна для разработки, инвесторы уходят в более доходные другие отрасли и происходят прочие тому подобные разрушения команды. Прототип оказывается совершенно скучным или не удается достичь никакого интересного графического представления. Для создания прототипа используется все, что можно из доступных средств, так как прототип не продают, а исключительно оценивают с его помощью идею игры. Иногда используется разработка прототипа с нуля некомпетентными в разработке или при наличии избыточного финансирования.

Объем документации на данном этапе составляет от нескольких до сотен страниц и содержит в себе описание ключевых игровых моментов, предназначен чтобы убедиться, что проект стоит продолжать. Повторение этапа разработки прототипа обычно происходит несколько раз и показывает участникам проекта что его можно продолжать или прекратить.

Этап 3. Разработка ― создание игры, по отработанному отображаемому материалу. Разработчик после изготовления прототипа понимает, какая у него выйдет игра. Далее или пишется план разработки, или, чаще всего, делается все путем угадывания направления. Разработка игры проходит в несколько подэтапов, когда инвестор или сами разработчики оценивают, получается у них что-то приемлемое или нет, и что с делать с результатами разработки.

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

Этап 4. Полировка ― доводка отдельного функционала и художественного наполнения до состояния готовности к коммерческой реализации. Для не сетевых проектов обычно полировка всеми возможными способами откладывается на предшествующие реализации сроки. Для сетевых проектов реализуется игровой функционал в минимально пригодном для продажи виде. В зависимости от того, как игроки по статистике использовали каждый из всех заложенных в игру замыслов, соответствующий фрагмент замысла дорабатывают и ставят в параллельную полировку со следующей итерацией разработки. Если какая-то часть заложенных в игру замыслов не используется игроками, то её после обновления удаляют из игры.

Объем документации составляет от нескольких до сотен страниц. Этап полировки повторяется после каждого нового функционала для сетевых игр до двух раз. Для не сетевых проектов полировка обычно смешивается с доработкой проекта вообще и поэтому, особенно при отсутствии четких планов, может продолжаться очень долго и хаотично.

Этап 5. Коммерческая реализация ― заработок на проекте. Для не сетевого проекта ― продажи, для сетевого ― выход в открытое бета тестирование. Приложение выглядит цельно, обычно отдаленно похоже на раннюю концепцию или полностью отрабатывает фокус потребительской аудитории. Но от соответствия проекта концепции его успех практически не зависит. Вообще от разработки коммерческий успех проекта зависит приблизительно на 40 или 50 процентов, при условии, что в разработке не было допущено откровенных ошибок. Объем документации складывается от описания реализации, руководства пользователя и, обычно, сайта игры. Для не сетевых игр данный этап не повторяется, но часто выпускаются скачиваемые платные или бесплатные дополнения к проекту и пакеты исправления ошибок. Для сетевых проектов, в зависимости от сложности разработки, выходы новых версий бывают в диапазоне от двух недель, до полугода и реже.

Этап 6. Поддержка ― помощь игрокам остаться в игре. Для не сетевых игр это этап после завершения продаж, когда делается все чтобы игрок и дальше продвигал игру, среди друзей или в многопользовательской среде. Для сетевых игр это параллельный разработке, полировке и коммерческой реализации этап. Объем документации состоит из инструкции, сайта поддержки и прочих подобных средств. Повторение этапа происходит после каждой реализации.

Мир игры или сюжет и вселенная

Создавая замысел игры авторы создают иногда целый мир, который начинает иногда жить уже по своим, а не по придуманными авторами законам. Здесь хорошо подходит известная восточная мудрость, что привести лошадь к водопою может и один человек, но даже сорок не смогут заставить её пить. И первое, с чем придётся бороться в созданном новом мире это борьба с заложенными в него противоречиями вида: задан треугольник с пятью углами, найдите длину стороны равного данной фигуре квадрата. Вообще, противоречий быть не должно изначально, только в больших мирах они всё равно появляются потому, что за всем и сразу не уследишь.

Очевидно, что следующей важной задачей становится поиск внутренних противоречий игрового мира. Каждый, кто хоть час играл в RPG, знает, что утверждение: тяжело в учении ― легко в бою, есть непреложная истина. Так что если в игре у игрового персонажа есть возможность пройти обучение, то игроки ей непременно воспользуются и на последующие задания для новичка с рогаткой выходит ветеран с пулемётом. Это особенно касается, как правило, тех игр, где засчитывается применение умений. Способы, как можно поднять все характеристики до предела, находятся обычно чрезвычайно быстро. Не менее странно будет выглядеть рост умений при повторении одного и того же умения по одной и той же цели несчётное количество раз. Очень часто разработчики сами оставляют дырки в заборах, а потом сами же удивляются, что их за это ругают.

Рисунок 1. Наёмник компании «Коготь». Они бывают и такими обаятельными.

Прежде чем что-либо придумывать, надо определиться с основами устройства будущего игрового мира и ответить на несколько важных вопросов. Какие ресурсы будут в игре? Каким будет соотношение между возобновляемыми и невозобновляемыми ресурсами? Будут ли места с ограниченным числом посещений? Какое будет развитие персонажа? Будет ли развитие на основе получаемого опыта или на основе используемых умений? Как их применение будет перерастать в его уровень и почему будет или не будет и каким образом засчитываться или нет. Какая будет балансировка игрового процесса? Будут ли неубиваемые персонажи или невыбрасываемые вещи? И это ещё не все вопросы, а только некоторые. Дальше будет ещё хуже и сложнее.

На выбор устройства игрового мира влияет очень многое: время внутри игрового процесса, происхождение каждого предмета или ресурса, размер игрового мира, сценарий игры и многое другое. Если действие происходит в замкнутом пространстве короткое время, то появление новых предметов будет смотреться странно, так же как и отсутствие в огромном игровом мире на протяжении длительного времени возобновления возобновляемых ресурсов. Особенно сильно заметны такие погрешности при недостатке опыта или нехватке объектов для применения умений. Тогда в ход идёт уже истребление всего, что только можно, что портит впечатление от восприятия игрового мира, или применение в бою самого худшего из оружия и умений чтобы увеличить число ударов или использования умений, что проделывает дыру в сценарии.

Борьба с читерством и манчкинством заслуживает особого внимания. Многие игры позволяют полностью сохраняться и загружаться, что делает некоторые возможности просто находкой для прорывов. Это не относится к серверным играм и только частично к играм, сохранённые файлы состояния которых находятся на компьютере, но сохраняется игра только при выходе. Но ничего не мешает выйти из игры и сделать копию файла, чтобы потом начать заново после провала. При наличии в игре азартных игр или возможности выиграть что-то особенное эта возможность будет использована. Одна из причин всех бед том, что к игре предъявляются сразу два взаимоисключающих требования: с одной стороны игра должна длиться долго, а с другой ― каждое задание должно проходиться как можно быстрее. Приходится искать необходимое решение где-то посередине и всегда есть риск от неё отклониться, чему есть много примеров.

В своё время Morrowind прославился своей всепобеждающей алхимией, а также и Oblivion вместе с предшественником отметился возможностью достигать невероятных уровней путём попадания в тюрьму на самых ранних уровнях и понижения основных характеристик с последующим их повышением. Приём хоть и длительный, но действующий. Справиться с этим явлением было бы предельно просто: достаточно зафиксировать максимальное значение характеристики с реагированием повышения уровня только на него, но этого вовремя не сделали.

Рисунок 2. Наёмник компании «Коготь». Они бывают и такими красивыми.

Мелочи в сценарии могут доводить до изнеможения, но нет ничего важнее мелочей. Промах сценариста может испортить игру больше, чем всех остальных вместе взятых. В Dungeon Lords один король угрожал другому королю всей своей армией, стоял перед шатрами рядом с городом, только армия его куда-то делась из шатров и оставила своего короля одного. В Fallout 3 в убежище 87 появился полковник Отем и его солдаты. Как ему удалось пройти через область смертельной для человека радиации осталось без объяснений, тем более, что выход из убежища был только через пещеры и можно было спокойно встретить Одинокого Странника там. Учитывая беспринципность Анклава непонятно, как уцелели дети в этих пещерах. И если особо выдающиеся игроки сумели дойти до входа убежища 87, то не могли в него войти потому, что дверь не действовала. Да ещё и в месте проникновения полковника осталась дверь с дырой в бездну.

Не менее странно и скомкано выглядела и концовка, когда пришлось лезть к пульту управления очистителем. Причина провала сцены была единственная: на сцене оказалось слишком много действующих лиц и возникла неопределённость. Если бы в зале управления оказалось только двое, то сцена выглядела бы естественно, а создатели игры не добавили бы себе работы в продолжении. А ведь решить вопрос могли два слова: «Оставим твоих друзей снаружи, чтобы они прикрыли нас с тыла и пошли в зал управления.» и тогда концовка была бы вполне уместная.

Уделяя внимание деталям надо помнить о том, что детали должны быть существенные. RPG игру не надо превращать в подобие тамагочи, где надо всё время помнить о сне, еде, воде и всём остальном. Однообразные действия очень быстро надоедают, если не привязаны к игровому сюжету. Если в игре будет затруднительно добывать воду и еду, то есть смысл превратить их добычу в одну из сопутствующих задач, например, как добывание запчастей и боеприпасов. Если выполнить задачу очень просто, то не надо тратить на неё время.

Игровой мир должен быть не только непротиворечив, но и не пуст. Если игра посвящена только истреблению противников, то о прочем наполнении можно забыть, но есть и другие эффективные приёмы заполнения игрового времени. В серии Fallout были многочисленные компьютеры с историей и повествованиями о событиях, а в Morrowind и Oblivion целые шкафы книг всевозможного содержания. Более того: в TES 3 и TES 4 были целые религии, которые способствовали проникновению в дух игры и поглощению её процессом. Создавая основу игры нужно помнить, что кроме необходимых занятий игроку можно добавить ещё и развлечения.

Рисунок 3. Среди солдат Анклава встречаются иногда очень симпатичные.

Занимаясь разработкой компьютерной игры полезно использовать для разработки и компьютер, который предназначен не только для игр. Для построения рядов характеристик бывают удобны рекуррентные соотношения. Для стабилизации игры и борьбы с положительными обратными связями удобно использовать асимптотические зависимости. Есть такое наблюдение при создания компьютерных программ, в частности игр: если всё сложное сделать в начале, то будет легко в конце, а если всё лёгкое сделать начале, то в конце будет сложно.

Враждебные персонажи или птичку жалко

Изысканная графика имеет и оборотную сторону, когда в игре приходится убивать всё подряд и это всё иногда убивать становится просто жалко. В итоге пережитой драмы настроение может испортиться надолго. Похожая история случается, когда приходится исправлять недобор опыта истреблением всего и вся, но это уже крайний случай. Да, подобные переживания бывают не у многих, но бывают достаточно часто, чтобы их игнорировать. Не так давно Besethda в своём Fallout 3 допустила тот самый досадный промах, когда разнообразие для истребления имеется, а хоть немного настроить его нельзя. И это при том, что все типы лиц для всех безымянных обитателей не меняются и возможность выбора была бы кстати, но этого не сделали, а в итоге могут возникнуть игровые драмы. На рисунках 1—3 показаны примеры. В данном случае речь идёт о впечатлениях только одного игрока, но у каждого игрока свои вкусы и надо уметь их учитывать.

Юридический взгляд тоже приходится часто учитывать. Всё тот же самый Fallout 3 пострадал от мнений критиков, что в нём полно неубиваемых персонажей, а все дети просто бессмертны. А на все эти нововведения пришлось пойти по одной единственной причине: если можно стрелять по детям из пулемёта, то разработчикам и распространителям игры могут предъявить судебный иск о подготовке теракта или ещё чего-нибудь похуже. И хотя законы нельзя нарушать, но под их действие лучше не попадать. Те же самые дети из пещер могли спокойно стать жертвами Анклава, запустившего в пещеры несколько когтей смерти. Более того, особо опасные с юридической точки зрения сцены можно оставлять за кадром и показывать только их последствия.

Но перейдём от юридических вопросов к художественным. Возможность выбирать внешность врагов позволяет игре выйти на более высокий качественный уровень. Если раньше игрок убивал множество совершенно незнакомых ему противников, то введение редактора внешности для разнообразных врагов позволит каждому расправляться с врагом с внешностью любовника жены, офисного менеджера или ненавистного системного администратора, перекрывшего на работе доступ в интернет, например, такого, как на рисунке 4. Резко выросшее количество получаемого от игры удовольствия благоприятно сказывается на её продажах, оценках, отзывах и популярности. В большинстве случаев можно применять хорошо себя зарекомендовавший генератор внешности параметрического типа FaceGen или его аналоги, но это уже вопрос реализации.

Рисунок 4. Усатый гад из бывших охранников достаточно беспристрастно выглядит.

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

Кстати, о взаимоисключающих вступлениях. А кто сказал, что в игре нельзя вступить сразу во все объединения? Да, Анклав, компания «Коготь», Братство Стали, рейдеры или Рейнджеры Рейли не всегда ладят, но тем интереснее скрывать своё членство во враждующей организации. Каждое действие через какое-то время становится известно и придётся хорошо постараться, чтобы игрока не раскрыли, а можно и нарочно себя раскрыть, чтобы каждый думал, что на него работает шпион из враждебной организации. Тогда придётся уже вести себя гораздо осторожнее.

Действующий персонаж может и сам оказаться враждебным по отношению ко всем прочим его окружающим персонажам, если будет неправильно себя вести. Раньше это правило старались соблюдать, но теперь оно почти забыто. И напрасно! В серии Gothic стоило только вытащить оружие или приготовить магию, как все готовились к нападению. В Fallout 2 нельзя было даже близко подойти к водителю каравана с оружием в руках, чтобы не возмутилась охрана, да и в некоторых городах ещё с Fallout 1 хождение с оружием не допускалось, а в Fallout 2 не пускали с некоторыми вещами во внутреннюю часть Города. Зато в Fallout 3 можно было ходить по Цитадели с гранатомётом наперевес и никого это не беспокоило. В Morrowind и Oblivion ещё можно было позволять такие вольности, но в Fallout 3 это было уже недопустимой небрежностью. И после этого короткого обзора мы плавно подходим к следующему вопросу поведения.

Внешний вид персонажа или по одёжке встречают

Никому не показалось странным, что к Цитадели в Fallout 3 можно спокойно подойти в силовой броне Анклава? А что будет если войти в город в броне рейдеров? Вот именно, что ничего не будет, а надо чтобы было. Форму и знаки различия придумали не просто так, а чтобы можно было отличать своих от чужих на расстоянии. А часто создаётся впечатление, что героя все знают в лицо ещё до его появления в игре. Кстати, узнавание в лицо можно добавить после появления, причём на какое-то время. Есть хороший пример в игре Morrowind, где без униформы с представителями некоторых из своих организаций даже не поговоришь или даже их разозлишь, а в более старой игре Fallout 2 итог встречи или разговора мог зависеть от одежды. В Gothic 2 с дополнением Ночь Ворона одежда вообще местами определяла характер встречи местным населением.

Но вернёмся от одежды разных объединений к её обладателям. Очень часто единственный способ выполнить поставленную задачу это уничтожить где-то какую-то организацию или её руководство. Безусловно, что если помощник руководителя компании наёмников требует, чтобы герой отпилил при нём кому-то голову, то другого выхода просто нет, а вот если посылает далеко и ещё дальше найти неизвестно кого да ещё и того, кого никто в глаза не видел, то появляется широкий простор для выбора действий. Можно просто и не задумываясь выполнить всё как сказали, а можно и выкрутиться, причём выкрутиться может оказаться гораздо выгоднее, чем сделать всё как приказали. Это самый распространённый вариант предоставления выбора.

Само собой понятно, что внедриться куда-либо можно и выдав себя за своего. Раз уж мы берём за один из образцов для подражания серию Fallout, то в третьей части мы можем получить маску гуля, в которой на нас перестают нападать дикие гули. Точно так же можно было поступить и с рейдерами, чтобы на достаточном расстоянии рейдеры не узнавали Одинокого Странника в броне рейдеров и принимали за своего, а на близком расстоянии узнавали и нападали. И с Анклавом и компанией «Коготь» можно было проделать то же самое. Добавляя в игру такие повороты надо следить за тем, чтобы сама одежда не заменяла всё остальное. В том же самом Fallout 3 дикие гули не нападали на Одинокого Странника в маске гуля, но как будто не замечали с ним его помощников, которые не были гулями и масок не носили.

Теперь задачу можно и усложнить. Если мы вместо головы шерифа принесли рейдерам хорошо отмытую голову безымянного рейдера, а шерифа отправили в самый дальний от тех, кто заказал его убийство, город, то наш обман может раскрыться либо сразу, либо через какое-то время и реакция на этот обман может быть самая разнообразная. Если мы очень ценные люди для рейдеров, то и пропади она эта голова вместе с её владельцем и шерифом, а что наврали при вступлении, так на то мы и рейдеры, чтобы правду не говорить. А если у нас отношения с рейдерами не складываются, то нам припомнят каждый наш проступок и оплошность. И таких ветвлений и вариантов должно быть много потому, что они придают реалистичности, что очень важно.

Единицы измерения расстояний или необъятные просторы

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

С учётом постоянства эталонной скорости перемещения можно было бы взять за единицу измерения расстояния такое расстояние, которое проходится в игре предметом с эталонной скоростью за единицу времени. Но мы можем для упрощения исключить постоянную скорости и принять за единицу расстояния в игре единицу времени, подразумевая при этом, что под расстоянием между любыми двумя точками в игре мы будем понимать время перемещения в игре между этими точками объекта, движущегося по прямой с эталонной скоростью.

Каким бы ни был игровой мир, но по нему можно перемещаться. И сразу же возникает вопрос: а как долго? Размер игрового мира имеет далеко не самое последнее значение и скрывает в себе серьёзное противоречие. Если игровой мир слишком большой, то игра может проходится медленно, а если наоборот, то слишком быстро. Правильный выбор где-то посередине потому, что играть хочется достаточно долго, а игру пройти хочется достаточно быстро.

Что понимать под размером игрового мира? В чём измеряется площадь игрового мира? И если измеряется, то как? Ответим на эти вопросы. Ранее мы приняли, что расстояния в игре измеряются секундами, минутами или часами. Точно так же площадь игрового мира измеряется в часах или квадратных часах или минутах и квадратных минутах. Если игровое пространство больше похоже на поле, то его размер измеряется в квадратных часах, а если больше напоминает лабиринт, то в часах. В случае трёхмерного игрового пространства его размер будет измеряться в кубических часах. За длину ширину и высоту игрового пространства принимается время преодоления каждого размера его протяженности с эталонной скоростью.

По игровому пространству можно не только перемещаться, но его можно ещё и полностью исследовать. Иногда это можно делать в целях поиска, иногда это нужно для выполнения задания, а иногда это делается просто из любопытства и для созерцания местных красот. Зададимся условием, что полностью исследовать игровое пространство или игровой мир это переместиться по нему столько раз, что в нём не останется ни разу не осмотренных точек. Тогда на исследование у нас уйдёт какое-то минимальное время в зависимости от эффективности алгоритма обхода.

Кроме размера игрового мира введём ещё и так называемое экскурсионное время, то есть время за которое можно увидеть всю его протяженность, площадь или объём. В одномерных мирах за экскурсионное время можно принимать их размер. Хорошим примером одномерного мира являются коридор или последовательность комнат. В экскурсионное время не включаются время обратного пути из тупика или время повторного прохода, если при этом не происходит открытия нового пространства. Экскурсионное время удобно использовать для оценки размеров игрового мира, если мир имеет сложную структуру и много недоступных областей.

В двухмерных и трёхмерных мирах для расчёта экскурсионного времени введём понятие радиуса обзора, то есть радиуса в котором игрок увидит все подробности устройства мира независимо от расстояния, если оно меньше радиуса обзора. Таким образом игровое пространство будет открываться либо полосой определённой ширины, либо сферой определённого радиуса и определённой площадью проекции. В таком случае экскурсионное время в зависимости от размерности игрового мира будет определяться по формулам.

для двухмерного и


для трёхмерного мира.

В трёхмерном мире приходится вводить сложные коэффициенты заполнения для того, чтобы охватить каждую точку пространства потому, что ближайшей по форме к окружности, которой является проекция сферы на плоскость, фигурой с полным заполнением плоскости является правильный шестиугольник. Краевые неточности заполнения при вычислении экскурсионного времени не учитываются и считаются допустимой погрешностью.

Влияние числа игроков или мало нас

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

Рассмотрим несколько способов применения многопользовательского режима. Первый режим предусматривает единое игровое пространство для всех игроков, что позволяет им непосредственно взаимодействовать друг с другом. Второй режим позволяет использовать по желанию общее или отдельное игровое пространство для одиночной игры. Третий режим позволяет играть только в отдельном игровом пространстве, но сохраняет возможность передачи предметов между игроками. В игре могут сочетаться несколько игровых режимов одновременно как для всей игры, так и для некоторых её мест. Порядок их сочетания может быть обязательным или необязательным.

В многопользовательском режиме игроки могут свободно перемещаться по игровому миру, что может приводить к их скоплениям в одних местах и отсутствию в других. Скапливаться игроки могут по уровням, заданиям, поиску ресурсов, местам наличия мобов и прочим признакам. Но если задаться некоторыми принципами распределения, а именно, чтобы игроки находились друг от друга на определённом расстоянии, то при заданных размерах игрового мира в нём при соблюдении заданного условия может поместиться ограниченное количество игроков при максимальном наполнении игры, то есть существует максимальная плотность игроков. Для удобства и определённости мы примем за минимальное расстояние радиус обзора.

К счастью для нас задачу с плотностью объектов и взаимным их расположением уже давно решили в другой области. Для кристаллических решеток давно придуманы понятия точечных групп, решеток Браве, пространственных групп и сингоний. Чтобы не запутаться в кристаллографии мы просто представим себе, что у нас игроки расположены в вершинах правильных треугольников для плоского случая задачи и в вершинах правильных тетраэдров для объёмного случая. Таким образом в плоском случае у нас получаются равные шаги трансляций под углом 120° и ромбовидная элементарная ячейка, а во втором случае мы не будем использовать углы, а просто сразу по характеристикам правильного тетраэдра вычислим объём элементарной ячейки. На рисунках 5а и 5б показаны примеры для обоих случаев размерностей задачи.

После того, как в многопользовательском режиме определены максимальные протяженность, площадь или объём на одного игрока, которые определяется отсутствием других игроков в радиусе обзора R мы можем получить формулы плотности игроков на единицу размерности игрового пространства. Для миров с разными размерностями формулы существенно различаются. Самая простая формула связывает радиус обзора и плотность в одномерном мире. В двухмерном мире мы применили построение игроков по треугольной решетке с ячейкой в виде ромба из двух равносторонних треугольников. Самый сложный случай представляет объёмная плотность с решеткой расстановки по вершинам тетраэдра. Её элементарная ячейка определяется равным шагом трансляций по трём направлениям и равными углами между направлениями. Ниже приведены формулы соответственно для линейной, распределённой и объёмной плотностей игроков.

линейная,


распределённая и


объёмная

Во всех случаях мы использовали наиболее плотные решетки размещения игроков по игровому пространству. Если бы мы применили прямоугольное размещение, то получили бы отличающиеся в какое-то число раз формулы соответственно для каждого случая, кроме первого.

линейная,


распределённая и


объёмная

Сам многопользовательский режим может влиять или не влиять на сложность игры. Решить этот вопрос достаточно сложно и решение получается неоднозначным. Также возможны и разные способы решения с разным объяснением каждого подхода. Простейший способ это просто никак не влиять на уровень сложности, а также на получаемый опыт, если таковой в игре имеется. Недостатки этого режима очевидны: или слишком легко всем, или слишком тяжело одному. Деление опыта и усиление противников по числу игроков в игре помогает, но порождает следующую проблему: десять игроков играют в игре и девять из них в одном месте, а один где-то далеко и получает он меньше опыта в десять раз, а играть ему тяжелее в десять раз.

Рисунок 5а. Элементарные ячейки для плоского случая.


Рисунок 5б. Элементарные ячейки для объёмного случая.

Если опыт можно привязать к нанесённому урону и в соответствии с ним поделить, то уровень сложности игры делить гораздо сложнее. Первое, что напрашивается, это вычислить плотность игроков и привязать уровень сложности к ней или вычислить количество игроков в определённом радиусе от каждого противника и привязаться к нему или к функции от их количества и уровня. Но при таком подходе мы не можем заметить разницу между одновременным боем всеми с одним противником или каждого с индивидуальным.

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

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

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

Перезагрузки и переигрывания или прохождение перезагрузками

Игра тем и отличается от суровой действительности, что в ней всё можно переиграть столько раз, сколько захочется. Только способы переигрывания существенно различаются в разных играх в зависимости от способа сохранения игры. Если игра сохраняется на компьютере у игрока да ещё и в любой момент, то переигрывать можно хоть каждую минуту. Если игра может сохраняться только в определённых местах, то переигрывать становится сложнее, а если игра сохраняется только при выходе, то переигрывание с начала невозможно только формально потому, что файл сохранения можно скопировать и при необходимости восстановить. Это всё относится к локальному сохранению потому, что сохранение на сервере уже для копирования недоступно.

Если что-то не получилось в игре с первого раза, то часто можно попробовать со второго и так далее до бесконечности. Расположенные на сервере игры такого счастья не предоставляют, но почти все локальные игры даже с ограничением сохранения хранят файлы настолько доступно, что их ничего не стоит скопировать и повторять любое действие со случайным исходом до получения успешного результата. Естественно, что возникает вопрос об эффективности такой стратегии прохождения, а также об эффективной встречной стратегии противостояния ей.

Некоторые приёмы использования случайности могут оцениваться двояко. Так хорошо известные вероятности вскрытия замков и успешных уговоров бывают полезны, когда надо придать неопределённость игровому процессу, но чаще всего при наличии возможности сохранения и загрузки игры в любой момент они становятся бесполезными потому, что рано или поздно желаемое событие наступает. С одной стороны это расширяет возможности прохождения, а с другой наоборот делает препятствия бессмысленными в виду лёгкости их преодоления. Если событие с вероятностью p проверяется n раз, то вероятность того, что оно произойдёт хоть раз, определяется простой формулой с экспоненциальной зависимостью.

Если последовательности действий для вскрытия замков иногда меняются, если разработчики удосужились это сделать, то каждый разговор можно повторять до бесконечности, загружаясь каждый раз после провала. Последовательности действий для вскрытия замков с одной стороны могут быть постоянными, что логично, учитывая повторяемость игрового мира или меняться с каждой попыткой, что выглядит странно, учитывая, что замок остался прежним. В любом случае толку от закладывания в игру элемента случайности в таком виде будет мало.

В играх Fallout 1 и 2 существовало такое явление, как случайная встреча в пустыне. Всё было прекрасно за исключением хорошо построенного на основе этих встреч мошенничества через перезагрузки: после нехорошей встречи можно было загрузиться и попробовать пройти ещё немного, а потом сохраниться и так до точки назначения. Точно так же легко можно было невероятно быстро обогатиться при посещении мест столкновения караванов с кем угодно или нейтральных группировок с враждебными: прошел, встретил, подобрал и сохранился, а потом снова прошел и если не повезло никого встретить, то загрузился и прошел по новому кругу. Таким образом затрачивая очень мало времени внутри игры можно было очень хорошо разжиться всем, чем только богата пустыня и весь игровой баланс немедленно разрушается.

Борьба с повторами может вестись разными способами. Если сохранение игры сделать возможным только в определённых местах, то это значительно усложнит процесс повторения. У этого способа есть существенный недостаток, когда при сбое в игре или случайной гибели приходится проходить большой кусок заново да и выглядит такой подход часто противоестественно за редким исключением. И это мы ещё не учли необходимость вдруг внезапно сохранить и прервать игру, которая возникает иногда достаточно часто. Существует ещё и оценка затрат времени на поднятие нужного навыка для достижения приемлемой вероятности успеха и простого использования этого же времени для нужного числа перезагрузок для нужного числа повторов.

Простейшим способом борьбы с многократными перезагрузками является увеличение времени загрузки сохранённой игры, но это весьма порочный приём. Бывают необходимости частой перезагрузки, а также работает долгая загрузка только при большом количестве попыток. Гораздо более эффективным приёмом будет приравнять затраты времени на выполнение задачи через повторы к затратам времени на развитие нужного навыка. Таким образом ускорить прохождение игры путём перезагрузок уже не получится и возникает необходимость повышения навыков потому, что потратить время и получить повышение навыка и выполнение задачи выгоднее, чем просто потратить время на одну единственную задачу.

От возможности продавливать продвижение через повторы пострадали такие известные игры как Gothic 1 и 2, Fallout 1—3 и Oblivion. Для примера мы рассмотрим два способа борьбы с повторами перезагрузок для диалогов. Обычно пишется вероятность успешного уговаривания, но действие выполняется всего одно и сразу же видно успех уговора. Уже при тестировании можно определить, сколько времени уходит на развитие каждого навыка до каждого уровня. Можно было бы применить ограничения по уровню умения, но это выглядело бы не так естественно, как попытка выполнения задачи без ограничений. Если мы введём перебор множества вариантов диалога через простой выбор хотя бы одного из двух вариантов ответа достаточное количество раз, то вероятность угадывания правильного ответа при низком уровне навыка уговора будет крайне мала и процесс перебора наугад станет неэффективным.

Этот приём может использоваться как подбор синонимов одного или нескольких слов одного предложения или просто выбор из нескольких предложений. Лучше всего суть этого приёма отражает подбор меняющегося кода на замке. Можно потратить очень много времени на перебор всех вариантов или за то же время найти код, выполняя другие задачи. Таким образом, если в игре требуется произвести десять успешных убеждений с уровнем убеждения для достижения которого потребуется десять часов, то каждое убеждение должно занимать не меньше часа при полном отсутствии навыков убеждения.

С повторением из второго примера бороться уже сложнее: у нас не происходит какое-то событие сколько-то раз, а просто проходит какое-то непрерывное время в игре. Для решения задачи попробуем представить её следующим образом. Пусть у нас некоторое событие происходит со средней частотой λ и за время t происходят в среднем λ⋅t событий. Тогда у нас за период T произойдут в среднем λ⋅T событий, а вероятность попадания в интервал t, вложенный в интервал T, при равномерном распределении событий по длине интервала T будет t/T. Вероятность принадлежности k событий интервалу t будет тогда определяться выражением.

и

Мы получили распределение Пуассона, чего и следовало ожидать. Теперь нас интересует вероятность того, что за время t событие не произойдёт ни разу, то есть произойдёт ноль раз. Вычитая эту вероятность из единицы мы получим вероятность того, что событие произойдёт за указанное время хотя бы один раз и более. Получаем следующее выражение.

Полученная вероятность имеет асимптотическую зависимость с отрицательной экспоненциальной степенью, на основании которой теперь можно сделать соответствующие выводы. Первый вывод заключается в том. что вероятность хотя бы одной встречи на протяжении заданного периода времени очень быстро стремится к единице. Второй вывод следует непосредственно из первого и заключается в том, что вероятность встречи в игре должна быть привязана ко времени, прошедшему с момента предыдущей встречи в соответствии с полученным выражением. Это не единственно возможный способ решения, но зато самый простой и быстрый. После того, как событие один раз произошло, отсчёт времени начинается заново с нуля. Такой подход вполне обоснован потому, что в данном случае используется схема испытаний Бернулли при которой вероятность успеха каждого следующего испытания не зависит от исхода предыдущего испытания.

Теперь если вероятность встречи задаётся полученным нами способом, то спустя некоторое время игры избежать нежелательной встречи или несколько раз повторить полезную встречу будет уже невозможно потому, что вероятность встречи уже будет зависеть от времени в игре. Если игрок попытается повторять загрузки чтобы пройти по карте дальше в несколько приёмов, то через некоторое время нежелательная встреча будет происходить практически мгновенно и продвижение прекратится. Точно так же нельзя будет непрерывно повторять одну за другой и полезные встречи, когда вероятность повтора будет иметь приемлемое значение только по прошествии определённого времени. Осталось только привязать время к местности, а также к реальному времени.

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

Есть и не очень эффективные средства борьбы с повторами, например превращение игры на локальной машине в игру как бы на сервере через манипуляции с файлами. Такое решение возможно, но имеет множество недостатков и первый из них это как раз полная невозможность повторить игру с нужного момента. Самый лучший способ борьбы с повторами это вообще исключить из игры возможность их использования для выигрыша во времени, как это было показано выше через перебор множества вариантов или таймеры вероятностей событий.

Классификация игр

Хоть мы и будем заниматься направлением RPG, но оценить и сравнить все остальные жанры тоже следует. Систематизация приводит в порядок множество разнообразных вещей и позволяет отследить связь или родственные связи между ними. Без упорядочивания и систематизаци обычно сложно выявить скрытые свойства, которые находятся в тени более отчётливых свойств. Так хорошо известная игра Heroes of Might and Magic заслуженно считается стратегией, но при более детальном рассмотрении в ней легко обнаруживаются элементы RPG, а именно развитие игровых героев, поэтому переходим к систематизации.

Существует множество жанров игр, причём достаточно чётких и определённых правил деления по жанрам не существует. Если перебрать все игры, то можно выделить их основные характеристики по которым можно составить таблицу принадлежности игры какому-либо жанру. Если обозначить знаками «+» обязательный атрибут, «0» ― возможный, а «-» ― недопустимый, то получится примерно таблица 1. Данная таблица не претендует на окончательность, но предназначена для внесения хоть какой-то ясности.

Рассмотрим число потенциально возможных жанров. Таблица 1 предусматривает девять характеристик с разными значениями, но не все значения всех атрибутов являются возможными сочетаниями. Так в числе взаимоисключающих атрибутов не может быть больше одного обязательного атрибута и при этом не может быть только один необязательный атрибут, если все остальные атрибуты отрицательные, поэтому число вариантов каждой характеристики для двух атрибутов приходится считать как 2+1=3, а для трёх атрибутов ещё сложнее 3+3+1=7. Тех же самых результатов можно было бы добиться и простым вычитанием невозможных вариантов из их общего числа. При этом должен присутствовать хотя бы один необязательный атрибут.

Предыдущие рассуждения верны только для взаимоисключающих атрибутов характеристик, таких как: количество игроков, местоположение игры, режим, количество игровых объектов, управление игровыми объектами, развитие игровых объектов и управление развитием игровых объектов. Для атрибутов характеристик: взаимодействие с игровым миром и обмен информацией с игровым миром такого ограничения нет и число их вариантов равно 32=9 для каждого. Для трёх не взаимоисключающих атрибутов число вариантов было бы 33=27 и так далее.

С учётом теоретического количества число всех возможных жанров для сортировки по данной таблице, равно 75⋅32⋅92=12252303, то есть число выходит за пределы разумного понимания. Таким образом число потенциальных жанров на порядки превышает всё число придуманных, а тем более, изготовленных игр с момента создания самой первой. Очевидно, что два жанра не должны иметь две повторяющиеся строки в классификационной таблице. Проверить строки на повторяемость удобнее всего машинной сортировкой или обработкой списков на разность. Таким образом можно применить машинную генерацию жанров игр.

Таблица 1. Жанры игр.
Таблица 1. Жанры игр (продолжение).

После того, как удалось определиться с атрибутами игры, можно уже определить её принадлежность к имеющемуся жанру или выделить в собственный жанр. После выбора жанра можно попробовать определиться с вопросом: нужно ли будущей игре управление сложностью и в какой форме оно будет осуществляться.

Управление сложностью игры или чем труднее ― тем лучше

В игру будут играть разные люди: с разными уровнями восприятия, реакции, сообразительности, выносливости, координации, интеллекта и много чего ещё. В связи с этим игра будет восприниматься от очень лёгкой до очень сложной в зависимости от способностей каждого. Для настройки процесса игры под индивидуальные особенности каждого игрока существуют уровни сложности с разными способами управления.

Понятно, что уровни сложности в игре необходимы, во всяком случае желательны. Но весь вопрос заключается только в том, на что влияет уровень сложности? Сюда же попадает и вопрос о возможности или необходимости автоматического изменения или поддержания заданного уровня сложности. В некоторых случаях уровень сложности влияет на характеристики героя, в некоторых случаях он влияет только на скорость игры, в некоторых случаях влияет только на сложность боя или количество добычи, иногда влияет на тип окружающих игрока противников, их количество и частоту появления или плотность размещения, а иногда просто на сложность боя.

На сложности боя мы остановимся немного подробнее. Здесь есть несколько направлений: или меняется живучесть игрока, или живучесть противников, или и то и другое. Последний случай имеет два направления: одновременное изменение живучести в одну сторону и одновременное изменение живучести в противоположные стороны. Второе направление второго случая больше похоже на два предыдущих направления, а вот одновременное изменение живучести игрока и его противников в одну сторону надо рассмотреть подробнее.

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

Сам собой напрашивается вывод о двух регуляторах сложности: один для живучести героя, а другой для живучести противника. Таким образом игрок получает возможность одновременно изменяя уровни сложности влиять на её качественный уровень, а изменяя встречно влиять на количественный уровень. Есть и другой вариант с двумя регуляторами: один регулятор управляет качественным уровнем сложности, а другой количественным. Например, если в игре присутствует один единственный регулятор уровня сложности то скорость развития героя нужно задавать монотонно возрастающей в зависимости от уровня сложности да ещё и с учётом влияния уровня сложности на скорость развития. Если регуляторов сложности два, то зависимость нужно брать от их разности или отношения с тем условием, что время развития героя до определённого уровня должно быть постоянным для всех разностей или отношений уровней сложности.

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

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

Переключение уровня сложности может присутствовать, а может и отсутствовать. В первом случае в любое время можно переключить уровень сложности на более низкий или высокий и продолжить игру, а во втором придётся проходить игру с самого начала. У каждого подхода есть свои достоинства и свои недостатки. Если изменение сложности возможно без переигрывания, то игра может быть пройдена при разных уровнях сложности, что усложняет её балансировку и открывает множество обходных путей для прохождения. С другой стороны обходные пути это тоже пути и они вносят разнообразие в способы прохождения игры. Но следует помнить о необходимости отслеживания выполнения задания и установленном в это время уровнем сложности. Этот вопрос мы рассмотрим несколько подробнее.

Допустим в игре надо убить особо сильного противника и получить за это особо хорошую награду. Перед боем уровень сложности устанавливается низкий, а в конце самый высокий и в итоге выполнить задание оказывается очень просто, а награда за него будет как за очень сложное. Бороться с этим можно разными средствами, но подходящего на все случаи не существует. Хорошо работают необходимость выхода из игры для переключения уровня сложности, отмена всех полученных заданий при его изменении, удаление несовместимых с уровнем сложности предметов, отключение не предусмотренных уровнем умений или исчезновение не допущенных заданным уровнем противников, а также ограничение мест в игре, где можно изменить её сложность.

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

Репутация в игре или во имя славы и чести

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

Задача усложняется, если в игре присутствует несколько сторон и репутация у каждой из них вычисляется отдельно. Сразу же возникают вопросы взаимосвязи между объединениями. Как быстро каждое из объединений забывает предыдущие заслуги? Важен ли порядок получения заслуг или всё равно как их получать? Насколько каждое из объединений ревностно относится к работе на другие объединения? Чаще всего эти вопросы решаются просто ограничением возможности вступить в каждое объединение и число объединений, в которых состоит герой, сокращается до оного или работа на каждое объединение не влияет на отношение всех остальных.

Первый из вопросов вычисления репутации состоит в забывании прежних заслуг или запоминании первых поступков. Этот вопрос решает общую оценку в игре влияния порядка двух одинаковых по величине, но противоположных по влиянию на репутацию поступков. Если упор сделан на прежние заслуги, то оценка важности должна убывать, а если помнят только последние заслуги, то оценка важности должна повышаться.

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

Как видно из рассмотренного, задача сводится к способу получения среднего значения из последовательности чисел, а также учёту порядка значений в заданной последовательности. Таким образом задача разделяется на две: определить среднее значение без учёта порядка и ввести способ учёта порядка в получение среднего значения.

Вообще, вычисление любого вида неупорядоченного среднего возможно по Колмогорову. В зависимости от выбора функций можно получить практически любые приемлемые для использования результаты. Чаще всего используется среднее арифметическое. Среднее геометрическое в силу своего требования к положительности знака и среднее гармоническое в силу своего требования неравенства нулю всех членов ряда обычно не используются. Ниже приведена формула неупорядоченного среднего по Колмогорову, где u ― монотонная функция, имеющая областью допустимых значений все возможные значения исследуемых данных, а v ― функция, обратная u.

Среднее по Колмогорову не учитывает порядок членов заданной последовательности, но введение весовой функции от порядкового номера позволяет это сделать. Если весовая функция является константой, то упорядоченное среднее превращается в неупорядоченное. Таким образом неупорядоченное среднее по Колмогорову является частным случаем упорядоченного среднего. Ниже приведена формула упорядоченного среднего по Колмогорову.

где w ― весовая функция.

Использование некоторых функций ограничено их монотонностью. Так при использовании степенных функций приходится ограничиваться, например, нечётными степенями потому, что чётные не обладают монотонностью, а дробные степени могут не иметь действительных значений для отрицательных чисел. На самом деле существует простое и эффективное решение для обхода этого ограничения по монотонности и области определения.

В качестве примера рассмотрим функцию квадрата величины, которая уничтожает знак действительного числа. В ряде случаев это явление бывает полезным для статистического анализа, но для наших целей это вносит ограничение на её применение. Логично было бы заменить чётность функции на нечётность через умножение на нечётную функцию, а обратное преобразование выполнять при помощи двойной смены знака. Ниже показано использование функций абсолютного значения и знака числа для получения монотонной функции положительной действительной степени аргумента функции rps с любым знаком аргумента.

и обратная функция

В таблице 2 приведён пример упорядоченного среднего для ряда значений из интервала [-2, 2] в прямом и инвертированном виде: (0, 1, 2, 1, 2, 1, -2, 2, 0, -2, 0, 1). Легко заметить для последних двух функций, что изменение весовой функции может быть равносильно инвертированию порядка данных и об этом надо помнить при выборе функций. Степенные функции определены как rps.

Таблица 2. Упорядоченное среднее.

Если в игре существует несколько объединений, то репутация или слава могут быть не только общими, но и у каждого объединения. Выполнение заданий одного из объединений может изменить репутацию в глазах других объединений. Вообще же взаимоотношения между всеми объединениями хорошо описываются матрицей оценки действий игрока, которая может быть разнообразной. Все матрицы оценок действий делятся на симметричные и несимметричные. Подбор симметричной матрицы представляет собой задачу из области дискретной математики, но хорошо поддаётся автоматизации, а также достаточно лёгок при ручном выполнении.

aij=aji или A=AT для симметричных и aij≠aji или A≠AT для несимметричных. Симметричные матрицы оценки действий выглядят естественнее с точки зрения здравого смысла, ведь нет смысла одному объединению ценить другое, которое не ценит его, но это правило не является догмой и может легко нарушаться. Вместо симметрии в матрицах оценок действий можно применять простое суммирование по строкам и столбцам с условием равенства между собой всех сумм, но это не является строгой необходимостью.

Статистика или поиск правды в мире лжи

В области статистики и математической статистике уже проведено множество исследований и в будущем скорее всего будет произведено не меньше. Останавливаться на описанном мы не будем, а рассмотрим только тему выбросов и поиска их в общем потоке данных и для общей пользы упомянем возможность использования для этого ранее введённой функции rps. Рассмотрим аналогичные моментам набора данных, но вместо степенной функции возьмём сохраняющую знак функцию rps и получим всегда вещественные относительно p знаковые моменты.

начальный вещественный знаковый момент
центральный вещественный знаковый момент

Далее рассмотрим влияние степени момента на отслеживание выброса в потоке данных. Сначала рассмотрим влияние выброса в большую по модулю сторону. Пусть одно значение стремится к бесконечности, а все прочие, будут равны между собой. Это допущение приемлемо потому, что отношение их суммы к растущему значению независимо от собственной величины будет стремиться к нулю. Получаем следующий предел среднего по Колмогорову через момент n данных.

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

начальный и
центральный моменты
абсолютный и
центральный абсолютные моменты

Представляет интерес среднее rps степеней от 1 до n и от 1 до 1/n. Для любого набора данных можно получить графики от k. Возьмём для примера три набора данных: {1:4; 2:4; 3:8; 5:4}, {1:4; 2:4; 3:4; 4:4; 5:4} и {1:4; 3:8; 4:4; 5:4} и построим для них графики зависимости среднего значения через νp и обратную функцию. Результаты показаны на рисунке 6.

Материальные ценности в игре или это моя добыча

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

Выпадение из убитых врагов предметов, золота, сырья, зелий и прочих средств к существованию всегда было камнем преткновения. С одной стороны выпадение всего, что только можно, немало упрощало жизнь в игре, а с другой сильно противоречило здравому смыслу. У какого-нибудь гоблина оружие или золото вполне могли оказаться, ну хотя бы краденные, но выпадение золота из жуков, топоров из пауков, железной брони из волков, копий из демонов с топорами, мечей из каменных горгулий и прочие чудеса кажутся странными даже по меркам сказочного мира.

Реалистичность и упрощение обычно противоположны друг другу. Если в игре отсутствует почти всё, что только может отсутствовать, то из убитых противников может выпадать всё, что только захочется. Так можно добиться простой игры и сэкономить на неигровых персонажах и вводе многочисленных умений для создания предметов. Определённый круг потребителей такая простота в духе японского минимализма даже устраивает больше, но требования растут и правдоподобность игры и вместе с ней выпадения предметов должна расти вместе с ней. Гораздо занимательнее выглядит возможность ограничить перечень выпадающих вещей и ввести возможность изготовления из них множества полезных предметов. Изготовленные предметы могут иметь разброс некоторых или всех свойств, что придаёт игре дополнительное разнообразие. Но при упоре на изготовление нужно следить, чтобы не происходило нездоровых изменений с вероятностями выпадения ресурсов из убитых противников.

Вопросы иногда вызывает не только список выпадающих предметов, но и вероятность их выпадения: в начале игры всё идёт правильно, а немногим позже уничтожение всевозможной мелочи может превращаться в самое доходное дело и весь денежный баланс в игре слетает. Это явление грозит играм с возобновлением игрового мира. Тогда для спасения баланса часто в ход идёт понижение вероятности выпадения всех предметов, что противоречит здравому смыслу и приводит к удивлению и разочарованию в игре.

Не менее важным является вопрос добывания возобновляемых ресурсов. Особенно бедственно этот вопрос возникает в MMORPG играх, где иногда авторы или распространители игры пытаются заработать на продаже ресурсов. Заработать обычно не удаётся, а вот испортить свою репутацию, а заодно и репутацию игры ― запросто. На самом деле вопрос легко решается размещением ресурсов на клиентской стороне игры, что исключает борьбу за них. Данный подход, разумеется, не относится к играм, где одной из основных задач является борьба за ресурсы.

Рисунок 6. Графики функций rps от k в зависимости от исходных данных: {1:4; 2:4; 3:8; 5:4}
Рисунок 6. Графики функций rps от k в зависимости от исходных данных: {1:4; 2:4; 3:4; 4:4; 5:4}
Рисунок 6. Графики функций rps от k в зависимости от исходных данных: {1:4; 3:8; 4:4; 5:4}

Кроме качества добыча имеет ещё и количество, которое часто задаётся вероятностью выпадения какого-либо предмета с какого-либо противника. Таким образом с определённого количества убитых противников можно добыть определённое количество вещей. И вот на этом месте начинается поток чудес и самодеятельности каждого изготовителя игр. Понятно, что с каждого противника не может падать сразу всё, но что делать, если надо сделать так, чтобы то не выпадало ничего, то выпадало сразу много и при этом в разном количестве? Получившаяся задача находится в области теории вероятностей и математической статистики, причём хорошо изучена, но не всеми, кому не помешало бы этот вопрос изучить.

Некоторые разработчики считают, что если при подсчёте вероятности выпадения предмета из списка повторить это действие несколько раз, то результат будет один, а если в то же самое число раз увеличить вероятность выпадения всех предметов, то другой. Это частично верно, но верно только частично. Если бы событие происходило только один или два или малое число раз, то такой подход имел бы смысл, но только не когда событие происходит сотни, а то и тысячи раз, хорошо, если не миллионы, как, например, в MMORPG.

А если событие происходит миллионы раз, то в ход идёт уже математическая статистика и математическое ожидание. Чем разбирать многочисленные ошибки, лучше мы решим задачу один раз, но правильно. В первую очередь мы определим, что у нас будет выпадать из убитых противников. Пусть мы имеем дело с игрой типа в котором из всех выпадает всё. Тогда мы берём одного противника, для которого делаем расчёт, и составляем список количества предметов, которые должны выпасть из большого числа данных противников, например тысячи.

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

Положение легко исправить обработав за один раз несколько списков или один и тот же список несколько раз, а вероятности разделив на число списков, обрабатываемых в каждом случае. Таким образом у нас будет решена задача получения вероятностей выпадения для всех предметов, кроме многочисленных, таких, как деньги. Многочисленные предметы в данном случае удобно группировать по какому-то количеству в кучки, что уменьшает вероятность выпадения таких предметов в число количества предметов в группе. Для того, чтобы каждый раз не выпадала кучка из одного и то же числа предметов введём выпадение кучки из случайного количества предметов, математическое ожидание которого равно заданному количеству. Проверим сумму вероятностей и убедившись, что она меньше единицы, добавим вероятность выпадения ничего, то есть отсутствия выпадения каких-либо предметов или денег, которая дополнит сумму до единицы.

Наш алгоритм выпадения предметов почти готов. Для его завершения мы разбиваем отрезок от 0 до 1 пропорционально вероятностям в списке, которые суммируем и задаём интервалы значений для определения соответствия выдаваемого генератором случайного числа от 0 до 1 каждому предмету. Теперь мы получаем готовый к работе алгоритм, в котором может выпасть от нуля до какого-то количества денег, предметов и всего, что мы запланировали.

Теперь мы можем перейти уже к выбору способа формирования списков предметов для выпадения из тел или обнаруживаемых на телах. В играх с низким уровнем правдоподобия характерные для каждого вида противников предметы отсутствуют вообще, а все остальные выпадают только в зависимости от уровня убитого противника. В играх со средним уровнем правдоподобия появляются характерные для каждого вида противников предметы, но выпадение всего остального остаётся. В играх с высоким уровнем правдоподобия в списке остаются только характерные для соответствующего вида предметы, а все прочие не появляются вообще. Вместо этого многие предметы могут быть сделаны самостоятельно или с помощью других персонажей в игре.

Сочетания характеристик или числа комбинаций

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

При наличии множества характеристик у героя целесообразно иметь представление о количестве возможных вариантов героев при помощи этих характеристик созданных. Кроме работы над продвижением по уровням и связанными с ними зависимостями, расчёт количества возможных вариантов создания персонажа по типу хорошо известной системы S.P.E.C.I.A.L представляет собой достаточно сложную задачу. На самом деле задача не ограничивается вышеупомянутой системой и встречается в разных представлениях. Система неполного заполнения характеристик с произвольным распределением баллов при их заданном количестве заслуженно получила распространение благодаря своей простоте и лёгкости применения.

Можно предположить, что количество возможных вариантов сочетания из k чисел от 0 до m включительно при общей их сумме равной n выражается как n!/ (k!⋅m!), n⋅mk или чем-то подобным, но эти суждения далеки от истины. На самом деле зависимость совершенно не похожа на приведенные примеры и аналитического выражения в общем виде не имеет для всех m больших единицы. Так для всего двух чисел от 0 до 3 число возможных вариантов для их суммы от 0 до 6 равно соответственно 1, 2, 3, 4, 3, 2, 1 и ни о какой аналитической функции от k, m, n речи не идёт потому, что функция имеет излом. Пример вычисления числа возможных вариантов для k=5 и m=3 приведен в таблице 3, а диаграмма показана на рисунке 7.

Таблица 3. Пример вычисления числа возможных вариантов для k=5 и m=3.
Таблица 3. Пример вычисления числа возможных вариантов для k=5 и m=3 (продолжение).

Способ получения следующего ряда зависимости числа вариантов от n очень похож на способ вычисления чисел Фибоначчи. Единственное, что поддаётся выражению через аналитические функции, так это сумма числа всех вариантов, которая равна (m+1) k потому, что как раз представлена произведением равных чисел. К счастью для достаточно больших k, m и n зависимость достаточно точно выражается функцией a⋅exp ((n−k⋅m) 2/b) коэффициенты a и b которой зависят от k и m и вычисляются числовым методом, так что при наличии электронных таблиц подсчитать необходимый случай нетрудно. Формула похожа на функцию нормального распределения не просто так: Вероятность выпадения заданной суммы характеристик действительно выражается нормальным распределением, а сама сумма является её математическим ожиданием.

Рисунок 7. Числа возможных вариантов для k=5 и m=3.

Для лучшего понимания приведём ещё один пример вычисления числа возможных вариантов для k=5 и m=5 в таблице 4, диаграмма которого показана на рисунке 8. Возникает закономерный вопрос: а почему же нельзя получить аналитическую формулу для числа вариантов? Ведь есть же приближенное значение, а что мешает получить точное? Всё дело в так называемом насыщении регистра или перегибе функции при достижении числом n определённых значений. Как только число n увеличиваясь от 1 до текущего значения превысит m, то число вариантов из произведения превратится в сумму, а после достижения 2m превратится ещё в одну сумму и так до тех пор, пока не все k чисел не станут равны m. Именно потому, что полученные суммы нельзя превратить в произведение нам приходится прибегать к рекуррентным зависимостям.

Таблица 4. Пример вычисления числа возможных вариантов для k=5 и m=5.

Возникает и второй не менее закономерный вопрос: почему же тогда можно так легко подсчитать сумму всех вариантов? Ответ очень простой: каждое из k чисел может принимать значения от 0 до m и с учётом независимости решение получается в виде произведения. Это тот самый случай, когда получить сумму множества чисел проще, чем каждое из чисел.

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

В завершение приведём ещё один пример для хорошо всем известной серии игр Falluot с применением системы S.P.E.C.I.A.L. Если не брать во внимание некоторые особые случаи ограничения минимального значения характеристик, то для всех возможных сумм значений всех характеристик от 1 до 10 числа вариантов приведены в таблице 5.

Рисунок 8. Числа возможных вариантов для k=5 и m=5.

Как можно увидеть из таблицы, число возможных вариантов намного меньше, чем показали бы факториальная или экспоненциальная зависимости. Более того, легко заметить, что форма диаграммы числа вариантов системы S.P.E.C.I.A.L очень похожа на диаграмму нормального распределения, что раньше и было сказано. Диаграмма показана на рисунке 9.

Таблица 5. Числа вариантов системы S.P.E.C.I.A.L.

Но не надо спешить подсчитывать число возможных вариантов сочетания начальных характеристик героя и представлять его числом возможных вариантов прохождения. Игроки скорее всего захотят посмотреть или сразу всё по чуть-чуть или хоть что-то полностью, так что число прохождений будет k-1 или немногим больше. Играя в ролевые игры чаще всего игроки применяют не перебор возможных вариантов, а метод вариации между несколькими характеристиками, который имеет настолько высокую эффективность, что нужное решение получается очень быстро.

Рисунок 9. Числа возможных вариантов системы S.P.E.C.I.A.L.

Следующая и столь же важная задача ― построить дерево развития персонажа или игрового процесса. Именно это дерево определит, как и сколько раз может быть пройдена игра и будет ли она вообще пройдена. Развитие может идти одновременно по нескольким деревьям, что создаёт дополнительную свободу для действий. Переход внутри игрового дерева может быть как управляемым, так и неуправляемым. Выбор направления перехода может меняться в широких пределах: от единственного до полного перебора всех вариантов. Итак, переходим к дереву развития.

Дерево игры или дебри топологии

Часто в игре герой получает уровни, а вместе с ними возможность развивать свои характеристики или умения. Но это не единственный случай ветвления игрового процесса: игрок может вступать в разные объединения и таким образом направлять своё развитие и развитие сюжета игры. Как правило в таких случаях последствия выбора необратимы. Чтобы разобраться в разных вариантах прохождения игры нужно построить дерево прохождения игры со всеми вариантами принятия решений в точках ветвления.

В первую очередь надо вспомнить теорию графов и построить дерево развития игрового персонажа. Именно это дерево определяет развитие игрового процесса. Как правило полное дерево построить невозможно, но можно определить тип дерева. Обычно деревья развития персонажа RPG бывают разнообразных видов. Вообще, учитывая возможность наличия циклов, правильнее было бы называть дерево развития графом, частными случаями которого являются дерево и лес.

Далее мы будем обозначать первой цифрой узла уровень, а второй ― номер узла в нумерации всех узлов уровня. Для простоты изображения количество ветвлений ограничено двумя и количество уровней сокращено до минимума. Все возможные графы рассмотреть невозможно, поэтому рассмотрим только самые типичные.

Рисунок 10. Простейшие графы развития: а) простое линейное дерево развития; б) лес простых линейных деревьев развития; в) прямоугольный граф развития с полной реализацией возможностей перехода при повышении уровня.

На рисунке 10а изображен простейший граф развития не имеющий ветвлений. Этим графом хорошо описывается развитие персонажа в играх, не имеющих разделения игрового процесса по уровням и не имеющих более одного класса персонажа. Если изначальных классов несколько, то получается граф, изображенный на рисунке 10б, в котором отсутствует как ветвление по уровням, так и переход из одного класса в другой.

Рисунок 11. Дерево развития с минимальным ветвлением равным двум.

На самом деле каждый уровень не обязательно должен быть единственным, а может представлять собой обобщённое состояние персонажа на данном уровне. Так повышение одной или другой характеристики не приводит к появлению ветвления в игровом процессе, хотя и приводит к другому состоянию персонажа. Если бы каждое состояние было бы записано отдельно, то граф развития персонажа выглядел бы как на рисунке 10в. Точно так же выглядит граф развития персонажа при полном отсутствии в игре ограничений в переходе внутри одного класса из одного состояния в другое, если этот класс единственный или переход между классами невозможен.

Часто для внесения в игру разнообразия в неё вводится ветвление процесса развития по взаимоисключающим направлениям. В этом случае с каждым ветвлением количество возможных вариантов развития каждого ветвления увеличивается в число, равное количеству ветвлений. При ветвлении каждой ветви на каждом уровне в минимальное число раз дерево развития выглядит как на рисунке 11. В этом случае число вариантов развития растёт в геометрической прогрессии. Также важно отметить, что достигнуть нужного конечного состояния при таком построении можно только одним путём и выбор одного из направлений на каждом следующем этапе уменьшает число дальнейших вариантов выбора в число, равное количеству ветвлений. Деревья с ветвлением в каждом узле в n раз называют бинарными, если n=2 или n-арными в прочих случаях. Мы будем рассматривать только бинарные деревья развития потому, что в данном случае они обладают всеми интересующими нас свойствами n-арных деревьев.

Рисунок 12. Обратное дерево развития с минимальным ветвлением равным двум.

Совершенно противоположный случай с развитием при наличии в игре насыщения, то есть когда уровни всех развиваемых способностей ограничены. Если в начале игры имеется выбор из некоторого наличия начальных способностей, а в конце все способности достигают максимального значения, то граф развития персонажа приобретает вид как на рисунке 12. Граф имеет вид обратного дерева с корнем вверху. Верхний уровень часто, но не обязательно, бывает последним. Игры с насыщением представляют интерес с точки зрения прохождения полностью развитым персонажем, если такая возможность в значительной степени предусмотрена.

Рисунок 13. Х-образный граф развития из двух деревьев одинаковой высоты с одинаковым минимальным ветвлением равным двум.

Если взять бинарное и обратное ему дерево развития, то через их объединение можно получить Х-образный и ромбовидный графы. С точки зрения построения игрового процесса оба графа представляют интерес. Игру с развитием по Х-образному графу, представленному на рисунке 13, удобно представлять как состоящую из двух этапов: предварительного и заключительного. Обычно такие игры проходятся столько же раз, сколько составляет сумма количества начальных и конечных узлов, а совсем не произведение, как считают некоторые разработчики. Игры с таким построением заслуженно любимы за отсутствие необходимости начинать всё заново после достижения определённого уровня, если возможны несколько сохранений. В Х-образный граф можно легко объединять деревья с разным количеством уровней и ветвлений.

При другом способе объединения игра приобретает вместо множества начальных и конечных вариантов множество вариантов прохождения. На рисунке 14 представлено ромбовидный граф, построенный по бинарной схеме. В отличие от графов на рисунках 11, 12 и 13 ромбовидный граф является цикличным и позволяет достигнуть одной точки из другой более, чем единственным способом. Промежуточные сохранения в играх с таким построением, как правило, отсутствуют из-за своей бесполезности, а новое прохождение, как правило, начинается с самого начала. Определить возможное число вариантов прохождения можно по количеству узлов на уровне, после которого прекращается ветвление и начинается схождение.

Важно, что несмотря на множество вариантов прохождения граф содержит разделяющий ряд узлов, каждого из которых можно достигнуть только одним способом и так же единственным способом достигнуть из него конечного узла. Обычно при правильном подходе к проектированию игрового процесса к ромбовидному графу присоединяют граф с единственным корневым узлом для продолжения игры.

Рисунок 14. Ромбовидный граф из двух деревьев одинаковой высоты с минимальным ветвлением обоих деревьев равным двум.

На этом рассмотрение n-арных графов можно закончить и перейти к изучению графов сетчатой топологии, которые обладают уже совершенно другими свойствами. В первую очередь очередной выбор уменьшает количество оставшихся вариантов не в какое-то количество раз а на какое-то количество. Второе свойство сетчатых графов это очень быстрое возрастание числа путей из одного узла графа в другой. Сетчатые графы содержат больше связей, чем n-арные.

Рисунок 15. Сетчатые графы развития с минимальным количеством связей и четырёхугольной ячейкой сети: а) расходящийся; б) сходящийся.

В общем случае сетчатые графы могут располагаться тремя способами: в виде прямоугольной таблицы, пирамидой с основанием вверху или пирамидой с основанием внизу. Пример сетчатого графа в виде прямоугольной таблицы показан на рисунке 10в. Если игровой процесс развивается по сетчатому графу расходящимся образом, то его граф выглядит как на рисунке 15а и имеет вид перевёрнутой пирамиды. Если игровой процесс носит сходящийся характер, то его граф выглядит как на рисунке 15б, то есть имеет вид пирамиды.

Рисунок 16. Сетчатые графы развития с минимальным количеством связей и четырёхугольной ячейкой сети: а) Х-образный; б) ромбовидный.

Сетчатый граф четырёхугольной формы может выглядеть не только как ромб или прямоугольник, но и как параллелограмм, но этот случай не представляет особого интереса для рассмотрения. Если объединить расходящийся и сходящийся сетчатый графы, то получим Х-образный сетчатый граф или при совпадении числа узлов ромбовидный сетчатый граф. В общем виде для четырёхугольной ячейки сети Х-образный сетчатый граф показан на рисунке 16а. Ромбовидный граф с четырёхугольной ячейкой показан на рисунке 16б.

Рисунок 17. Четырёхмерный пространственный граф с двумя уровнями.

В завершение рассмотрим многомерные пространственные графы. Если такой граф представить в виде многомерного пространства со связями только в направлении осей, то для двухмерного пространства мы получим сетчатый граф, а для общего случая граф с продвижением по пути из корневого узла к узлу соответствующего уровня описывается вектором перемещения с целочисленными значениями в котором n равно размерности пространства и сумма всех координат равна номеру уровня, если за нулевой уровень принят корневой узел.

Многомерный пространственный тип графов очень сложен и мы ограничимся только одним примером дерева с тремя уровнями, считая за первый уровень корневой узел. В основе сетчатого многомерного графа лежит всё тот же четырёхугольник. Пример пространственного четырёхмерного графа с тремя уровнями показан на рисунке 17. Если у вектора развития есть ограничения по каждой из координат, то пятимерный ромбовидный граф для ограничения всех координат не больше единицы показан на рисунке 18.

Рисунок 18. Пятимерный пространственный ромбовидный граф с ограничением значения по каждой размерности пространства равным единице.

На этом мы закончим рассмотрение графов и ещё раз обратим внимание на то, что мы затронули только небольшую и самую несложную часть теории графов и её применения касательно создания игр. В большинстве случаев граф можно построить только в обобщённом виде. Полное построение графа игры часто физически невозможно. Вместо этого можно использовать обобщённое построение графа, когда несколько ветвей рассматриваются как одна. В таком случае вместо одной точки можно рассматривать группу точек.

После того, как удалось определиться с формой и размерами графа игрового процесса, можно приступать уже к проектированию переходов между узлами графа, то есть к определению способов получения уровней или уровней умений. Предстоит ответить на вопросы о том, будет ли повышение происходить само по себе в процессе игры или выдаваться в награду за выполненное задание? Будет ли опыт начисляться в основном за уничтожение врагов или в основном будет получаться за выполнение поставленных перед героем задач и будет ли в игре опыт вообще? А также что может приравниваться к опыту, если он не используется в явном виде?

Зависимости в характеристиках или куда прямая выведет

Для ролевых игр характерно наличие у героя множества характеристик. Обычно уже начиная играть в игру мы видим какие-то цифры в характеристиках игрового персонажа. Как правило эти цифры различаются для разных классов и задают направление развития. Но всегда возникает вопрос: а где же находится минимальное значение? Ведь если предположить, что минимальное значение характеристики равно нулю, то получаются странные вещи. Для начала рассмотрим и сравним линейную и прямо пропорциональную зависимости.

Выбор между линейной или прямо пропорциональной зависимостями от задающих чисел характеристик представляются отдельным вопросом. Дело в том, что характеристика по мере развития героя меняется не только на сколько-то, но и во сколько-то раз и часто пониманию процесс развития поддаётся с большим трудом. Если, например, сила увеличивается с 10 до 100, то что это значит? Поднимаемый вес и развиваемая сила увеличиваются в десять раз? А если сила увеличивается с 10 до 250? Поднимаемые одной рукой 10 килограммов превращаются в 250? Это странно даже по меркам придуманного мира. Прямую пропорциональность можно успешно использовать, если изначально задано соотношение между начальным и конечным значением, что задаёт достаточно высокое начальное значение характеристики.

Всё меняется в лучшую сторону и становится более благообразно, если зависимость не прямо пропорциональная, а линейная. Тогда изменения уже не происходят в разы, а изменяются в каких-то пределах. Если сила 0 теоретически соответствует поднимаемому одной рукой весу 10 килограммов, то сила 80 соответствует поднимаемым 50 килограммам и каждая единица силы увеличивает её на 0,5% от начального значения. Линейную зависимость легко получить прибавлением к видимому значению скрытого базового значения, которое не отображается.

К неприятным последствиям может привести и применение прямой пропорциональности вместо линейной зависимости. Печальным примером подобного ляпа прославились игры Fallout 1 и 2, где интеллект ниже определённого уровня не позволяет даже общаться. В своё время авторы переделали под свою первую игру систему GURPS и прихватили с ней и её экспоненциальную зависимость характеристики от её числового отображения. Так что на самом деле всё было бы ещё хуже, если бы они смогли воплотить этот подход GURPS до конца, но дело обошлось прямой пропорциональностью. В чём была ошибка и чем это было чревато?

Сама по себе идея отправлять на особо важное задание по спасению жизни всех жителей убежища не умеющего разговаривать человека уже безумна и противоречит здравому смыслу. Дополнительные вопросы вызывает его пригодность к выполнению задачи, связанной с поиском высокотехнологичного оборудования, которое человек с таким интеллектом может даже не опознать или случайно уничтожить. И это всего лишь влияние интеллекта. Если посмотреть на прочие характеристики, то среди них есть и те, которые оказавшись ниже всякой критики способны были бы сделать поставленную перед героем задачу невыполнимой. Хорошим примером будет спуск и подъём по верёвке при очень плохой силе персонажа при том, что не каждый достаточно сильный человек способен выполнить такой подъём, да ещё и с дополнительным грузом от вещей.

Причина была не в том, что система оказалась плохая ― система была правильная, а в том, что применили её неправильно. Огромный разброс по характеристикам возможен в играх, где не требуется умелец на все руки по всем направлениям. В игре типа Diablo герой не умеющий разговаривать смог бы справиться с поставленной задачей без больших затруднений потому, что была бы возможность заменить магию мечом. Если игра потребует по замыслу всего, то и система характеристик должна обеспечивать всё в заданном диапазоне. В Fallout 3 применили как раз линейную систему зависимостей и увеличили этим число вариантов прохождения. Хорошим подходом к выбору минимального значения каждой из характеристик можно считать ввод условия возможности прохождения игры с этим значением при отсутствии противоречия здравому смыслу.

От минимальных значений характеристик перейдём к максимальным. Верхнее ограничение характеристик тоже имеет важное значение, особенно когда используется нелинейная зависимость чего-либо от их величин потому, что сумма зависящих от характеристик величин перестаёт быть равна этой же зависимости от их суммы. Это ограничение может быть задано непосредственно ограничивающим характеристику числом или уменьшением скорости роста, для чего обычно используется геометрическая прогрессия со знаменателем меньше единицы или просто ручное повышение расхода баллов после какого-то значения. С точки зрения правдоподобности правильнее использовать уменьшение скорости роста.

Связываясь с нелинейными зависимостями надо помнить, что скорее всего при отсутствии прочих условий наибольшее возможное количество характеристик будет поднято до максимума, если зависимость растёт быстрее линейной и наоборот все характеристики будут иметь среднее значение, если зависимость растёт медленнее линейной. Оба выбора резко снизят число вариантов прохождения с разными наборами характеристик, причём второй вариант будет хуже. Внести разнообразие поможет ввод минимально необходимых значений для получения особых способностей или выполнения определённых задач. Теперь от изучения качественного значения характеристик перейдём к способам расчёта их числовых значений.

Расчёт характеристик или распределение должно быть экономным

Часто для использования какого-либо предмета необходимо обладать каким либо набором характеристик, причём некоторые из них будут преобладающими. Хорошим примером является современная игра Perfect World. Как правило для использования каждого типа предмета соотношение необходимых характеристик сохраняется и меняется только их сумма по мере роста уровня предмета. Возникает необходимость построения роста требуемых уровней характеристик в зависимости от повышения уровня предмета.

За образец для рассмотрения возьмём всё тот же Perfect World. Обычно в игре суммарное количество баллов характеристик увеличивается от b до c по мере повышения уровня. Зададимся условием, что все видимые характеристики в начале игры имеют очень маленькое значение и, возможно, постоянное для всех характеристик. Таким образом у нас происходит формирование класса по мере его развития в зависимости от игровых требований к снаряжению.

Чтобы добиться прямой пропорциональности влияния на зависимые от неё параметры вместе с приемлемой кратностью возрастания каждой характеристике зададим скрытое базовое значение a, которое прибавляется к каждой из z характеристик. У каждой из характеристик существует предельное значение, заданное произведением базового значения a на множитель k. Если у каждой характеристики есть начальное значение и задано предельное значение, в которое эта характеристика может вырасти, то общее количество баллов на максимальном уровне и базовое количество баллов можно рассчитать через систему линейных уравнений и неравенств. Пусть у нас имеется базовое количество баллов a и предельное отношение максимальной характеристики к базовой равно k. Тогда если предельные конечные значения для самой низкой и самой высокой характеристик обозначить pmin и pmax, то мы получаем систему линейных неравенств.

откуда

Бесплатный фрагмент закончился.

Купите книгу, чтобы продолжить чтение.