Оценить:
 Рейтинг: 0

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

Год написания книги
2016
<< 1 2 3 4 >>
На страницу:
3 из 4
Настройки чтения
Размер шрифта
Высота строк
Поля

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

Действующий персонаж может и сам оказаться враждебным по отношению ко всем прочим его окружающим персонажам, если будет неправильно себя вести. Раньше это правило старались соблюдать, но теперь оно почти забыто. И напрасно! В серии 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 будет тогда определяться выражением.

и
<< 1 2 3 4 >>
На страницу:
3 из 4