что такое рандомно в играх
Рандом
« | x: Кто такой Рандом? y: Рандом Намбер Генераторович (Random Number Generator) — про этого великого субъекта знает гугл, его и спрашивай. z: А ещё у него есть бабка Ивентия, которая радует нас уже целую неделю. | » |
— Разговор на форуме «Героев войны и денег» |
Но стоит добавить перетасованные карты или бросаемый кубик, как всё сразу становится разнообразнее: например, персонаж стреляет по врагу, но промахивается. Или корабли управляемого игроком флота не получают попутного ветра. Или наоборот, игрок «прикупил» два туза, или попал прямо в голову супостату.
Всё это называется рандóм, от англ. random — «случайный». Понятие «случайный» означает «непредсказуемый, но укладывающийся в статистику» — другими словами, выпадение кубика случайно, принятое противником решение — нет. Разумеется, только если речь идёт об идеальном или хотя бы достаточно опытном противнике, конечно; новичкам свойственно принимать необдуманные, не обоснованные ничем решения, ставящие порой профи в тупик.
Содержание
Источники случайности в настольных играх [ править ]
Чаще всего используется игральная кость. Роль игральной кости обычно играют правильные многогранники или близкие к ним геометрические тела.
Также используют колоду карт или вертушку (волчок, рулетку). Настольные ролевые системы Deadlands и Savage Worlds, в частности, известны использованием карт; а в первой кастование заклинаний вообще моделируется покерными комбинациями.
Поскольку даже в неслучайных играх приходится выбирать, кто начинает или в какие ворота играть, используют бросание на пальцах, монету, «угадай, в какой руке» или «угадай, с какой стороны секундная стрелка».
В компьютерных играх [ править ]
Цифровые компьютеры устроены так, что один и тот же код с одними и теми же данными даёт один и тот же результат. Поэтому для низкокачественных — пригодных для игр не на деньги — случайных чисел используют труднопредсказуемый алгоритм. Но всё-таки это алгоритм и потому он детерминированный, поэтому его предсказуемость применяется с пользой. Инициализируем на двух машинах генераторы одной и той же затравкой — и они будут выдавать одни и те же числа (на этом основан мультиплеер Doom [6] ). Такая предсказуемость используется и в Elite, позволяя одним числом записать целую галактику, аналогичный принцип применяется и в Spore.
Рандом и даммаку — плохое сочетание (игра: I Wanna Kill the Kamilia 3).
Вызывает бурю негодования рандом и в играх Paradox Interactive: как бы ни сильна была бы ваша армия, она ничто, если на кубике «1 против 6». Очень яркий пример «Святого Рандомия».
В целом можно выделить критерий, отличающий хороший рандом от плохого. Хороший выглядит следующим образом: «Вот рандом подбросил тебе проблему, думай, как её решить». Плохой: «Вот рандом подбросил тебе проблему, ты ничего не можешь с ней поделать, жми рестарт».
Когда нужны высококачественные случайные числа (например, в криптографии или азартных играх), ищут источники настоящей случайности, например, таймеры, счётчики команд, движения мыши. Лучшим источником считается выброс частиц радиоактивными веществами.
Терминология, связанная с рандомом [ править ]
Кубомёт — игра, в которой приходится кидать кубики часто и помногу. Для таких игр существует даже артефакт — кубобашня, чтобы кубики никуда не укатились и не развалили игровую обстановку.
Святой Рандомий — когда победа или поражение слишком зависит от случайности.
2d6+1 — характерная запись формул, непонятная тем, кто совсем с настолками не знаком. Означает «бросить два шестигранных кубика и к сумме прибавить 1».
Рандом
Рандом – происходит от английского слова random, что переводится как произвольный, случайный. Что такое рандом? Это вероятность какого-то результата при совершении определённого действия.
Термин может употребляться в отношении практически любого явления в игре.
Пожалуй, самый явный пример – точка снаряжения, либо заточиться, либо нет. Этот принцип работает и для всего остального.
При регистрации в данж идёт случайный подбор пати, то есть вы не знаете, какие именно персонажи отправятся в поход. Потому обычно говорят, что ушёл с рандомом.
После уничтожения боссов обычно выпадает снаряжение, которое разделяется между членами отряда в соответствии с классом. А вот если 2 человека одного класса или вообще нет представителей, то вещи будут распределены случайным образом, то есть рандомно.
В некоторых проектах существует случайная система походов, где игрок может только выбрать соответствующий его уровню данж, но неизвестно куда именно его забросит. То же самое касается всех шкатулок, сундуков, мешочков и сфер, в которых находятся разные предметы с определенным шансом выпадения.
Хотя на сайтах и форумах нередко находятся таблицы с процентным соотношением выпадения той или иной вещи, многие игроки уже давно не смотрят на проценты и шансы, предпочитая считать всё равновероятным. В целом рандом в игре привносит элемент неожиданности и добавляет интереса.
Примеры
«Рандом на моей стороне, вытащил из шкатулки редкий артефакт»
«Хорошая рандомная пати попалась, вот и доделал рейт арены»
«Случайности не случайны, всё это большой обман.» или как работают элементы рандома в играх.
ПРЕДИСЛОВИЕ
Доброго времени суток StopGame! Сегодня я расскажу вам, как работают элементы рандома (случайных событий) и как на самом деле разработчики создают те или иные ситуации, где эти элементы требуются. Сразу уточню для большего понимания: случайность — рандом. Постараюсь рассказать как можно более сжато и понятно для восприятия. Ну что же, поехали!
О ВИДАХ СЛУЧАЙНЫХ ЭЛЕМЕНТОВ
Немногие знают, но компьютер не может создать полностью случайное число, какие алгоритмы бы не применялись. Всегда созданное число будет от чего-нибудь зависеть и не будет полностью случайным. Компьютер — это машина и она подчиняется математическим алгоритмам и формулам, а случайность в принципе прямая противоположность каким-либо математическим правилам. Разработчики всегда идут на ухищрения, чтобы максимально правдоподобно создать иллюзию случайности, но это всё равно нельзя назвать полным рандомом.
На самом деле существует несколько ситуаций, где требуется применение элементов рандома:
1.Процедурная генерация (создание ландшафта и миров).
2.«Честная» генерация предметов (Выпадение предметов из противников, сундуков и тд.).
3.«Не честная» генерация предметов (Кейсы в играх, покупаемые за реальные деньги).
4.Ситуации, где на элементах рандома завязана вся игра. (Игральные карты, игры с шестигранным кубиком)
5.Различные ситуации, которые должны возникать в рандомное время (Например смена погоды с солнечной на дождливую).
Остановимся на каждом выделенном элементе более подробно. (если что-то забыл добавить в список, милости прошу в комментарии. Если будет действительно интересный и конструктивный коммент, я дополню блог).
Процедурная генерация
Конечно под этим словом подразумевается не только создание ландшафта и окружения, сюда входит местонахождение предметов на локации, персонажей и много чего ещё, но всё же самым популярным методом использования всё равно остаётся генерация случайных миров. Ярким примером может являться создание мира в «Minecraft», где работает именно процедурная генерация, она создаёт абсолютно всё окружение вокруг игрока (все блоки, сундуки, враги, объекты, персонажи и др.) и давайте разберём, как же он создаётся. На самом деле алгоритм не раз менялся, но на сегодняшний день он работает так:
Знаете ли вы, что мир в «Minecraft» не бесконечен? Он составляет 30 на 30 миллионов блоков. При генерации (не только в «Minecraft», во многих играх также) используется так называемый «seed» — начальное значение.
Чтобы создать уникальный мир, это начальное значение создать из случайных цифр и символов. Без него не работает практически никакой метод ГПСЧ (Генератор псевдослучайных чисел). Но так как, компьютер не может создать ничего случайного, игра берёт за случайные цифры дату и время на компьютере. Если вы попытаетесь создать два мира в игре с одной и той же датой и временем (например 20.10.2020, 18:34), то получите два абсолютно одинаковых мира. Но созданием «seed» всё не кончается, далее это начальное значение преобразуется в 32-х битное число путём нескольких формул. После получается число, которое применяется ещё к одному методу — Шуму Перлина.
Шум Перлина на самом деле к звуку никакого отношения не имеет, это по сути картинка (пример на изображении ниже) с множеством оттенков серых, белых и чёрных цветов. Если говорить совсем простым языком, чем темнее пиксель на изображении шума Перлина, тем выше (либо ниже) создаётся ландшафт.
Допустим такой пример (очень упрощённо, на деле всё сложнее, есть куча «фильтров» последующей «полировки» мира). На картинке шума есть пиксели только трёх цветов (без оттенков): белый, серый и чёрный, тогда мир «Minecraft» может сгенерироваться с ландшафтом высотой максимум в 3 блока. Белым будет блок воздуха (по сути отсутствие блока), серым толщина ландшафта в 1 блок, а чёрным толщина в 2 блока. Но такой шум Перлина принято называть двумерным.
В игре используется в основном трёхмерный шум(3D) (но и двумерный тоже работает для «полировки»), так как при использовании только двумерного (2D) невозможно было бы создать например пещеры и различные постройки. Ниже вы можете увидеть 2D шум. На первой картинке вы видите слева сам шум, а справа результат создания (неудачный я нашёл пример, справа создаётся какая-то 2D игра). На второй картинке вы сразу видите результат работы шума Перлина уже в игровом движке. На третей и четвёртой картинке показано всё более понятно.
Вот примерно так и создаются все процедурно-генерируемые миры, шум Перлина совместно с алгоритмами псевдослучаных чисел остаются пожалуй самыми популярными и простыми. Я старался описать как можно более понятно, но допускаю, что всё равно слишком сложно для восприятия. Напишите в комментариях, если не понятно, буду дорабатывать блог. Ну а мы перейдём к следующему элементу случайности. Более подробно и в разы более интересно про процедурную генерацию можно узнать из видео ниже:
«Честная» и «нечестная» генерация предметов.
Что я вообще подразумеваю под словом «честная»? Честной я называю генерацию предметов, которая не зависит от серверных данных и вероятность выпадения таких предметов генерируется движком, а не разработчиками или издателями.
Давайте приведу условный пример: у вас есть игра в которой имеется 4 вида редкости какой-либо вещи: Обычный, редкий, эпический и легендарный. Вы подходите например к сундуку, откуда эти вещи вам выпадут и честной будет та система, где алгоритм случайности не изменяется разработчиками после релиза по желанию. То есть если вам выпал например легендарный предмет, то вам «повезло», так как в алгоритме выпало нужное число, если же нет, то вероятность на выпадение этого предмета не изменится исходя из прошлого полученного предмета.
Упрощённо эта система работает так: пусть вероятность выпадения предметов такая — обычный (70%), редкий (20%), эпический (9%), легендарный (1%). Всё это суммарно даёт 100% вероятность, и тогда алгоритм будет выглядеть так условно так: если случайно введённое число находится в промежутке от 0 до 70, выпадет обычный предмет, если от 71 до 90, выпадет редкий предмет, если от 91 до 99 то выпадет эпический предмет, а если введённое число 100 выпадет легендарный. Элементом рандома здесь и является это самое ввёденное число. Где же взять это рандомное число? Способов на самом деле масса: от ранее упомянутого seeda (просто брать последние два его числа), до прослушивания атмосферного шума и шума микрофона для его последующего преобразования в цифровой вид (так работает популярный сайт: Random.org).
Однако же StopGame — это игровой портал, поэтому давайте узнаем, как генерируются такие числа в двух, самых популярных игровых движках: Unity и Unreal Engine.
-В этих движках одним из методов используется «XorShift», который берёт за seed дату и время на ПК, потом преобразует полученное число в двоичную систему счисления, потом суммирует это число несколько раз со сдвигом вправо и влево, после полученное число обрезается по длине исходного и получается псевдослучайное число. Более понятно и подробно об этом способе рассказано в видео ниже.
Давайте теперь поговорим о «нечестной» генерации предметов.
Самое широкое распространение такой способ имеет в онлайн играх по типу: «Warface», «Overwatch» и «CS:GO». В них тоже используется принцип, основанный на вероятностях, как и в «честном» способе, только в отличие от него нечестный способ изменяет свою вероятность в зависимости от ранее полученных данных. Теперь языком попроще: если вам выпала «легендарная» вещь с шансом в 1%, то следующая «легендарная» вещь уже будет иметь шанс выпадения например 0.5% или менее, а вещи «обычной» с шансом в 70% наоборот поднимут свой шанс выпадения например до 80%, так после нескольких попыток открытия условных «кейсов в CS:GO» шанс будет повышаться, пока опять не достигнет своего максимума в 1%, а вероятность на выпадение «обычной» вещи не опустится до 70%.
Естественно нечестный способ, как правило, нужен для того, чтобы получить прибыль с игроков, ведь азарт и призрачная надежда на то, что «скоро уже выпадет легендарка, я чувствую» и заставляет игроков тратить деньги на подобного рода кейсы, рулетки, ставки и казино. Весь процесс контролируется разработчиками и они могут изменить параметры вероятностей в любой момент, так как все алгоритмы находятся на удалённом сервере. Давайте теперь поговорим о следующем элементе рандома.
Ситуации, где на элементах рандома завязана вся игра:
Я говорю про те игры, где ваша победа напрямую зависит от изначально (или в процессе) полученной случайной комбинации элементов. Самый яркий пример тому в реальной жизни — это игральные карты. Человек перемешивает карты руками, после раздаёт их на всех игроков. Но как карты может перемешать компьютер? На самом деле можно воспользоваться весьма странным, но рабочим методом: отслеживания перемещений стрелки мыши. (Не знаю, используется ли конкретно в конкретно карточных играх такой способ, но во многих проектах он присутствует). Компьютер отслеживает координаты X и Y, на которых сейчас находится мышь и берёт только по последней цифре от каждой координаты. Допустим стрелка мыши находится на координатах X=54 и Y=27. Алгоритм возьмёт для создания случайного числа только 4 (из числа 54) и 7 (из числа 27), далее функций может быть много, числа можно сложить, вычесть, умножить, разделить и получить любое другое новое псевдослучайное число. Далее карты нумеруются допустим от 0 до 36, сложим ранее полученные 4 и 7, получим 11, значит игроку достанется карта под номером 11 из колоды и так, пока игроки не получат нужное количество карт. Естественно отслеживаются все перемещения мыши допустим за минуту времени, так как если каждый раз смотреть на текущую координату мыши, псевдослучайное число всегда будет одним и тем же если мышь не двигается.
Очень надеюсь, что вы поняли то, что я хотел сказать, старался обьяснять понятно, но моя манера речи и повествования конечно «оставляет желать лучшего».
Давайте перейдём к последнему элементу рандома, который я смог сформулировать.
Различные ситуации, которые должны возникать в рандомное время.
В пример можно привести дождь и грозу из того же «Minecraft». На самом деле там нет никакой случайности, периодичность дождей зависит от всё того же «злополучного» seedа, который создан при генерации мира. При определённых seedах период дождей изменяется, благодаря вычислениям по определённым формулам (которые «Mojang» не показывает). Грубо говоря в одном мире, с одним seed дожди происходят раз в игровых 5 дней, в другом же мире, с другим seed периодичность уже будет например раз в игровых 7 дней. Тут вообще нет никаких элементов рандома, всё происходит закономерно и по формулам.
Действительно случайные ситуации в играх используются очень редко, но всё же присутствуют. Давайте разберём и их работу.
Возьмём в пример странствующих торговцев в «Dying Light». Не могу точно уверять, что всё рабоатет именно так, как я говорю, поскольку доступа к исходному коду «движка» у простых пользователей нет, но всё намекает именно на такой метод.Торговцы появляются в случайное время (которое определяется через ГСПЧ) со случайным товаром в случайном месте. Но и тут к сожалению никакого по настоящему случайного элемента нет. Торговцы появляются в специально заготовленных местах, которые выбрали для них разработчики, и продают товар, который тоже не случайно генерируется (товар создают из специально заготовленных наборов предметов, который разработчики тоже успели ранее сделать). Также и цены на товар могут меняться в большую или меньшую сторону всего одной формулой (убавления процентов к изначальной цене товара), тем самым привлекая игрока «временной скидкой и ограниченным предложением», но всё это лишь иллюзия обмана.
Тема: Рандом в играх и ваше отношение к нему.
Опции темы
Поиск по теме
Отображение
В чате шло бурное обсуждение по вопросу рандома. Насколько он приемлем в игре и в каком варианте.
Вопрос очень важный, потому что делаем игру с Петром, в которой случайные события могут сыграют большую роль.
Моё мнение:
Рандом очень ограниченно применим. В случае если он используется до действия игрока.
Например:
— у торговца есть рандом предметов который он продает по большой скидке.
— в пещере есть рандом: наткнуться на врага, не найти ничего, найти сундук.
— рандомное расположение событий при входе на карту.
Понимаете? Мне говорили, что рандом это зло, а теперь вроде как без него игра плохая.
Хочу ваше мнение услышать. Пожалуйста, четко, по существу и без срача. Воздержитесь от обсуждения чужого мнения, высказывайте свое. По результатам надеюсь найти для себя приемлемое решение.
И голосовалку повесил.
То же самое и с рандомом.
То есть, при помощи рандомных механик ты можешь добавить в игру азарта и перчинки, осмысленного риска, веселья, радости от победы, того «что повезло», и так далее.
Плохо рандом себя показывает, когда:
TL;DR: Рандом это инструмент, который надо правильно использовать, опираясь на всю остальную игру. Он может как создать дополнительный фан, так и угробить его к черту.
Мнение таково: Рандом не зло, его можно использовать, но игроки его боятся.
Я как-то начинала писать про рандом в разрезе опроса «ошибки, совершаемые ранее«. Потом этот опрос уже канул в Лету, да и этот пункт там был не основным.
Плюшки, выпадающие случайно
Это казалось замечательной идеей. но таковой не было.
Большая проблема, начинающаяся с малого.
Вначале было просто несколько сообщений, выпадающих случайно, на один предмет. Например, нажимая на вазон с цветами, игрок мог увидеть фразы: «Красивые цветы», «Эти цветы так приятно пахнут», «Мне нравятся эти цветы» и прочее в том же духе. В принципе, ничего плохого на первый взгляд и не заметишь. Игрок подойдёт к вазону, увидит одну из фраз, отметит, что ничего стоящего в них нет, и пойдёт дальше. Возможно, кто-то даже заметит, что фразы бывают разные.
Таким образом, можно просто потратить в несколько раз больше времени и получить всё тот же результат.
Когда подобные действия оправданы:
Примеры:
1) всё взаимодействия с цветами, которые для сюжета не важны, прописаны в одном событии, которое вызывается много раз в игре.
Таким образом можно экономить время, написав на двадцать цветов всего пять сообщений, и у игрока не отложится в голове приевшаяся фраза;
2) если NPC, выдающее задания/ лечащее / объясняющее, всегда говорит приветственную/ прощальную фразу, то можно написать пару вариантов при желании (главное, чтобы варианты были действительно равноценными).
Когда это становится проблемой:
В одной из моих попыток сделать игру была такая ситуация: обычное зеркало в комнате главной героини, при взаимодействии с которым можно было узнать, как она выглядит, надо ли что-то подправить, характеристики самого зеркала и. телепортироваться в комнату подруги. Причём фраза/действие выбирается рандомно.
То есть, игрок в большинстве случаев просто отметит, что это обычное зеркало, но ему может (не)повести и кардинально изменить прохождение игры (оказаться сразу на другом этаже башни и соответственно полностью перемешать последовательность кат-сцен по дороге обратно в свою комнатку).
Сейчас я уже понимаю, что делая возможность телепортации через зеркало, эта функция должна быть доступна и опциональна независимо от вводной фразы, а не валиться на голову игроку в одном из n-надцати случаев.
Тут же хочется подчеркнуть, что важную информацию нельзя подавать подобным образом. Если среди всех сообщений о тех же цветах, есть одно важное (из цветочков можно приготовить зелье / персонаж А обожает эти цветы [после этого их можно собрать и варить / дарить]), то такое сообщение должно всегда (!) показываться игроку, нельзя пускать на волю случая. В эту же категорию попадают ещё и рандомные кат-сцены (очень актуальны, когда в игре есть переменная «отношение персонажа А»).
Особенность таких кат-сцен в том, что разработчик намного больше заинтересован в том, чтобы игрок на них нарвался (по сравнению с простым описанием цветочков), ведь кат-сцена делается намного дольше.
Зачем тогда случайность? Пусть лучше всегда появляется при первом прохождении локации.
Возможен и такой вариант. Но в этом случае игрок проползёт по лесу, читая (уже вероятно задолбавшие) сценки про кустики, цветочки и кроликов, а потом этот же лес будет пустым. Рандом нужен, чтобы разбавить и часть сцен показать позже.
Итого: 10+ локаций, 10+ кат-сцен. Увидит игрок от в самом лучшем случае половину.
Так зачем стараться?
Теперь я бы подобное делала следующим образом:
1) вынесла диалоги в общее событие;
2) на локациях 3-5 бы поставила вызов диалога (и движение ивентов, от него никак не уйдешь) с вероятностью 1/2 [если данная сценка ещё не показывалась].
Таким образом игрок может увидеть, как восхищается спутница вечерними бабочками вокруг цветка не только в одной определённой локации, а везде, где есть такие цветы, если попал туда вечером и немного повезло. Это значительно увеличит шансы того, что диалоги будут показаны, и добавляет разнообразие (игрок не знает, где его настигнет этот момент любования насекомыми. Это может оказаться сюрпризом, ведь прошлый раз проходил, но ничего не было).
<здесь могла бы быть исправленная схема леса, но картинки на другом компе, да изначальная схема относилась к другой моей ошибке.
Суть в том, что лес уменьшился с 10+ карт до 5-6 и некоторые события, привязанные к определённому времени суток или наличию перса в партии, теперь могут появляться не на одной конкретной карте, а на нескольких. Сценки, привязанные к определённому месту легче обнаружить, так как мест меньше>