И о том, чем плох стандарт и рандом, как часть механики стандарта, и как же от этого всего уйти
Сначала рассмотрим, то, что мы имеем:
Крит
Баш
Уворот
Все это можно отнести к одному виду, к виду рандомных пассивочек, которые все так любят брать, а уж о пассивке панды, которая сочетает в себе сразу крит и уворот, я вообще молчу.
В идеале 20% это каждый 5 удар, но в реалиях варкрафта это или 4 Баша подряд или 10 простых ударов без Баша, чтобы не было такой несправедливости, в Доте 2 ввели понятие псевдорандом

Псевдорандом

Псевдослучайное распределение (сокращенно ПСР) – статистический показатель, отвечающий за вероятность срабатывания определенных эффектов у способностей и предметов. В истинно случайном распределении, каждый "ролл" работает независимо, но в ПСР шанс срабатывания эффекта увеличивается каждый раз, когда он не сработал. В результате, срабатывание происходит более последовательно. В целом ПСР применяется к следующим типам способностей: Критический удар, Оглушающий удар, Блокировка урона, Chain Lightning, Maim, Greater Bash.
Источник
И это уже лучше чем стандартный Варкрафт, но всё ещё не идеально, зато нет нытья по поводу "пермобаша" или "Да где же эти криты!" Но псевдорандом тоже плохая механика, и от нее постепенно уходят, ниже покажу, как это реализовывают в Доте 2:
Примеры:
Баш Сладара
Примечания:
Каждая успешная атака по вражескому герою или крипу добавляет один заряд к счётчику баффа.
Бафф всегда активен, но его иконка скрывается, если у счётчика нет зарядов.
Не учитывает атаки по союзникам, вардам и строениям и не оглушает.
У зарядов нет установленной длительности действия.
Когда счётчик достигает 4, то применяется оглушающий удар и счётчик обнуляется.
Не сочетается с другими источниками оглушающего удара. Оглушение от Skull Basher icon.png Skull Basher и Abyssal Blade icon.png Abyssal Blade отключено для Slardar.
Сработавшая атака сначала применяет дебафф, затем наносит урон.
Дополнительный урон наносится вместе с основной атакой и считается за урон от атаки.
От этого урона идет лечение вампиризмом, но он не может быть критическим или прорубающим.
На урон также не действуют бонусы или уменьшения атаки, основанные на процентах, но он может быть снижен уменьшениями, использующими фиксированное значение.
Крит Хаос Найта
В общем, перезарядка этой пассивки всегда 4 секунды, и удар можно выверять, добивая таким ударом крипа или же наносить больше урона вражеским героям.

Математика

Мое мнение, если я не могу просчитать математически, убью я этого врага или нет, для меня это уже не игра
Плохо - рандом варкрафта
Нейтрально - псевдорандом Доты 2
Хорошо - пассивные способности с перезарядкой или срабатывающие при конкретных условиях (каждый удар героя, каждый удар по герою)

Примеры плохих способностей из Доты 2

Баш баратрума
Пассивка Акса
Баш войда
Крит морты
Все эти способности пришли в дота 2 прямиком из стандарта Варкрафта 3, и встречаются именно в этом виде во всех остальных картах, в наших любимых кастомках, как в популярных и профессиональных, так и в картах новичков

Примеры хороших способностей

Баш хроноса (аналог Войда) из игры HoN
Описание слегка старое, почему то не смог найти более расширенного, как действует баш, но расскажу сам:
На пассивке отображается счетчик зарядов, как только заряд будет равен 7/6/5/4, то следующий удар нанесёт 100% баш, удары восполняет заряды, а так же заряды восстанавливаются сами по себе (каждые 7 секунд, даже если не бить)
По мне это самый идеальный баш из всех что встречал, не нужно надеяться на его прок, и не нужно выверять удары, ведь заряды накапливаются сами
Крутилка Легионера (аналог Акса) из HoN
Если ничего не понятно то поясню, на пассивке отображается число зарядов, каждый заряд даёт 8% шанс, что способность сработает прямо сейчас, удары по герою увеличивают заряды. Это некое сочетание Псевдорандома и выверенной механики, чем больше у вас зарядов, тем выше шанс прокрутиться.
Крит нового предмет дота 2 (Imp Claw)
Таже самое что и пассивка Хаос Найта доты 2, только на предмете для всех героев, как по мне такой предмет выглядит гораздо лучше, чем Кристалис и Дидалус

Хейт

А если вам нравится рандом, и любите нечто случайное, может стоит сыграть в казино? Или может просто не хватает ума делать нормальные способности? Не хватает фантазии? Хочется сделать что-то понятное и поэтому пилите на стандарте?
Лично для меня игра интересна лишь тогда, когда она математически может быть просчитана.
Допустим мы играем в Товердефенс, застроили базу и вот она волна с троллями, у которых 90% шанс уклониться от атаки, троллей не много, допустим 3, каковы шансы пройти волну?
Да нулевые! Из 100 выстрелов пройдет 10 и никто не умрет, а может и меньше, в теперь представьте иной вид, той же механики, а вид такой:
враг не уворачивается от каждого 10 удара, и мы это видим, например в виде счётчика над врагом, и нужно каждый 10 удар бить чем то мощным, мощной башней или героем к примеру, а может способностью, победу в такой партии одержит не случай, а сноровка и внимательность, даже если это сложно осуществить.
Или ещё пример, но покороче:
Босс наносит 10 кратный урон, каждый 5 удар или с шансом 20%, какого босса будет игрокам одолеть проще?
Любители сыграть в казино отлетят поочерёдно, а математики будут отдавать на удар суммон юнитов
И ещё пример, представьте, что в шахматах конь бьёт с 10% шансом по площади с двойным уроном (прям как в Аниме), тогда те же шахматы были просто рулеткой, и а не игрой великих умов.

Пример способностей из моих карт

Жаль, в них никто не играл, чтобы оценить эти механики, возможно дело в плохой рекламе, или чересчур сложной реализации, или в моих специфических игровых вкусах, которые я считаю "нормальным", а 90% игроков скажут, что я делаю нудятину и им проще отдохнуть и надеяться на стандартный 10% крит, чем выверять этот 10 удар.
Примеры:
  1. Для 131.1 случайно открыта система перезарядки предметов на ходу, она не идеальная, но позволит выполнить в нормальной реализации современный Баш на каждый N удар или же Крит с пассивной перезарядкой Система
  1. Моя карта про Танчики, выполненная на 126 патче без использования мемхака
Пример 1: (Двойной выстрел)
Сочетает в себе механику псевдорандома и выверенной игры. Заряды пассивной способности = Шанс срабатывания, в случае провала шансы увеличиваются, в случае успеха срабатывает двойной выстрел и заряды начинают накапливаться заново
Пример 2: (Блок урона с перезарядкой)
Из описания всё понятно, сделано на основе эксгумации , пример тоже не идеальный, но это в разы лучше чем блок урона с непонятным % шансем
Пример 3: (Управляемый сплеш + крит)
Я точно всегда смогу управлять критом, как только накоплю 100 и более зарядов, способность сработает при следующем ударе
  1. Моя карта про Сларков
90% предметов всё также математически выверены, срабатывают на какой либо удар или имеют просто перезарядку, пример
Но сларки неудачный пример, так как сделаны полностью на мемхаке, но к примеру управляемый крит от любого источника урона лучше чем физический крит работающий с шансем?

Большие числа в играх

Все не однократно играли в рпг или арены с большими числами, когда у вас 400 брони, а разница между 100 брони и 400 примерно (90 и 96%), точно не помню, но она крайне мала, когда вылетают криты по 999999 урона, когда не возможно просчитать убьёте ли вы друг друга, убьёт ли вас босс, достаточно ли вампиризма для отжора?
Мне как-то говорили, что это делается специально, чтобы прибить математику в игре, чтобы игрок не думал о числах, а думал о классе своих шмоток и классе босса.
Читаем закадровым голосом мастера Шифу
Легендарная броня способна станковать босса легендарного уровня, и только легендарный меч способен пробить его броню
Неужели это может быть интересно? Понятие математики просто вычеркнуто из таких игр
В целом я ненавижу Доту 2, да и играю в неё достаточно плохо, но всё таки игра хороша именно своей математикой, я, зная свою броню, понимаю, сколько ударов смогу стерпеть от вражеского героя, сколько способностей смогу пережить, подробная статистика смерти покажет, какая способность и сколько мне нанесла урона, какой тип урона был... А моя задача решить, как этому противостоять в следующей игре( в следующей стычке). Это и просто и интересно, и есть много хороших карт на Xgm и вообще игр, где с математикой всё в порядке.

Заключение

В общем не страдайте ерундой, фантазируйте, берите клёвые идеи из других игр, играйте в хорошие игры, делайте хорошие карты, уходите от стандарта и не давайте случаю, повелевать вашей и чужой жизнью (даже в игре) и тем более не играйте в казино!

Опрос

Опрос: Как вы относитесь к случайным событиям в играм?
1. 
Люблю случайности, ведь мне всегда везёт на криты, баши и увороты в любой игре
2. 
Не люблю случайности, у меня крит не выпадает даже при шансе 90%
3. 
Стратегическая игра должна быть математически выверена, иначе это просто рулетка
4. 
Автор статьи полный идиот, пиарит свои нудные карты 5 летней давности и кроме доты 2 больше ни во что не играет
5. 
Мой уровень модмейкинга низок, я бы хотел сделать "нормально", но не знаю как, и поэтому пихаю стандартные механики =(
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
22
4 года назад
Отредактирован PROSHELDOTU
0
но в варе прокают подряд 4 крита на 25% шансе и это факт
Какая разница? Кому в Варике сдались стандартные абилки, в том числе стандартные криты и баши?
Если делаешь обычное мили или что-то типа того, или кампанию, то сгодятся и они. А если делать что-то крутое и интересное, то придётся всё пилить своим кодом
1
29
4 года назад
1
function random(a: number) {
    return function() {
        a ^= a << 25; a ^= a >>> 7; a ^= a << 2;
        return (a >>> 0) / 4294967296;
    }
}

const rnd = random(1337);
const sequence: number[] = [];

for (let i = 0; i < 1000000; i++) {
    sequence.push(rnd());
}

console.log("Sequence", sequence.reduce((a, b) => a + b, 0) / sequence.length);

for (let i = 0; i < 100; i++) {
    const subsequence: number[] = [];

    for (let j = 0; j < 100; j++) {
        subsequence.push(sequence[Math.floor(rnd() * sequence.length)]);
    }

    console.log("Subsequence", i, subsequence.reduce((a, b) => a + b, 0) / subsequence.length);
}
Все результаты этого кода стремятся к 0.5. Random uniformly distributed subsequence of a random uniformly distributed sequence is uniformly distributed.
1
28
4 года назад
Отредактирован PT153
1
Doc, тут нет вызова GetRandomReal, а речь идёт про вариковский рандом, а не луа.
0
29
4 года назад
Отредактирован Doc
0
function random(a: number) {
    return function() {
        a ^= a << 25; a ^= a >>> 7; a ^= a << 2;
        return (a >>> 0) / 4294967296;
    }
}

type Unit = {
    random_chances: number[]
}

const rnd_for_units = random(3637);
const rnd = random(1337);
const units: Unit[] = [];

for (let i = 0; i < 100; i++) {
    units.push({ random_chances: [] });
}


for (let i = 0; i < 10000000; i++) {
    const unit = units[Math.floor(rnd_for_units() * units.length)]

    unit.random_chances.push(rnd());
}

for (const unit of units) {
    console.log("Unit avg chance", unit.random_chances.reduce((a, b) => a + b, 0) / unit.random_chances.length);
}
Вот такой код может быть понятнее. 100 "юнитов" и 10000000 попыток на крит у рандомного из них. У всех них средний шанс - 0.5 +- epsilon.
PT153:
Doc, тут нет вызова GetRandomReal, а речь идёт про вариковский рандом, а не луа.
Я сказал человеку - учи математику, речь о том как раз, что
Random uniformly distributed subsequence of a random uniformly distributed sequence is uniformly distributed.
От генератора это не зависит, если он выдает правильную последовательность.
1
22
4 года назад
Отредактирован PROSHELDOTU
1
Вот такой код может быть понятнее. 100 "юнитов" и 10000000 попыток на крит у рандомного из них. У всех них средний шанс - 0.5 +- epsilon.
Ясно
Ты по ходу вообще не осмыслил, то что я писал выше
Вместо того, чтобы сделать, что я тебе говорил выше, ты сейчас маешься ерундой, пытаясь доказать, что ты дофига математик или хз что
2
29
4 года назад
2
Proshel_Doty:
Вот такой код может быть понятнее. 100 "юнитов" и 10000000 попыток на крит у рандомного из них. У всех них средний шанс - 0.5 +- epsilon.
Ясно
Ты по ходу вообще не осмыслил, то что я писал выше
Вместо того, чтобы сделать, что я тебе говорил выше, ты сейчас маешься ерундой, пытаясь доказать, что ты дофига математик или хз что
Может быть это ты не понял моего ответа? :)
Но его действие распыляется, когда он работает сразу на нескольких абилках и юнитах. Поэтому я и говорю, что для каждого случая хорошо бы свою последовательность такого рандома
Я доказал, что "распыление" одной случайной последовательности на несколько никак не влияет на распределение результатов.
0
22
4 года назад
Отредактирован PROSHELDOTU
0
Может быть это ты не понял моего ответа? :)
Может быть. Но то что ты не понял о чём говорил я это уж точно
Я доказал, что "распыление" одной случайной последовательности на несколько никак не влияет на распределение результатов.
Доказал средним значением?)
2
32
4 года назад
2
2 курс института, на любой специальности всем показывали, что, чем больше выборка, тем вероятность стремится к 0,5 для орла/решки монетки
не знаю, чё вы тут спорите, я просто хотел сказать, что люблю когда у меня 10 раз выпадает орёл, потому что я кидаю с нужной силой и делаю 3 оборота в воздухе
0
22
4 года назад
0
Bergi_Bear:
Мы не спорим, а рассуждаем)
Мне пытаются доказать, что моя теория ерунда, но пока не особо удачно)
0
29
4 года назад
0
function random(a: number) {
    return function() {
        a ^= a << 25; a ^= a >>> 7; a ^= a << 2;
        return (a >>> 0) / 4294967296;
    }
}

type Unit = {
    random_chances: number[]
}

const rnd_for_units = random(3637);
const rnd = random(1337);
const units: Unit[] = [];

for (let i = 0; i < 100; i++) {
    units.push({ random_chances: [] });
}

const chiSquaredTest = require('chi-squared-test');

for (let i = 0; i < 10000000; i++) {
    const unit = units[Math.floor(rnd_for_units() * units.length)]

    unit.random_chances.push(rnd());
}

for (const unit of units) {
    const expected: number[] = [];

    for (let i = 0; i < unit.random_chances.length; i++) expected.push(0.5);

    const test = chiSquaredTest(unit.random_chances, expected, 1);

    console.log("Chi squared probability", test.probability);
}
Теста chi-squared достаточно тебе?
1
17
4 года назад
Отредактирован Vlod
1
Bergi_Bear:
Кароче, нет у меня единомышленников
  • Когда вводится механика критический удар, то принимается за истину, что все имеют некоторые уязвимые или критические зоны, попав по которым, объект получит повышенный урон. Возможность попадать по таким местам можно вынести.
  • Далее принимается за истину, что эта характеристика равна по всем видам юнитов. В действительности кроме внутренних характеристик виляют также взаимное расположение моделей. Тогда внутренние характеристики мы можем описать с помощью уровней способности, а влияние внешних факторов описать статистически. Это работает, если игрок не может достаточно точно определить процесс нанесения урона.
  • Подход отлично подходит для стратегий, когда игрок задает только общие команды группам юнитов, однако сомнительно показывает себя в жанре рпг, тенденция которого заточена на полный контроль одним персонажем.
Любую сложную модель можно же описать статистически.
С уклонением аналогично. А клинки с зарядами, это уже какое-то магическое орудие, а не аналог критических зон.
Это если исходить из того, что критический удар, это удар по критическому месту, а не прием, волшебным образом усиленный собственными потугами. Иначе, почему потуги не вынести в активную способность?

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