Войти
ФлеймФорумРазработка игр

Математическое руководство по созданию компьютерных игр. 3-я редакция. (46 стр)

Страницы: 141 42 43 44 45 46
#675
20:17, 15 фев 2023

samrrr
> Бред какой-то в формуле, при 0 резисте пройдёт 0 урона.
А это закономерный итог того, что вместо научной физической можели применяется выдуманная игровая.

#676
22:46, 15 фев 2023

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

#677
23:23, 15 фев 2023

samrrr
> В школе повторяли всё по 5-10 раз да ещё и в разных классах.
нет

#678
23:44, 15 фев 2023

samrrr
> А физически верную модель осилили только в паре игр.
Ключевое слово здесь — осилили. То есть можно сделать, если привлечь специалиста в соответствующей области, а область на уровне инженера. Но! Даже после привлечения нужного специалиста всё может пойти не как надо потому, что итоги физически верной можели расходятся очень сильно с представлениями дизайнера, которому кажется и он считает своё представление верным.

#679
(Правка: 0:34) 0:30, 16 фев 2023

samrrr
> Бред какой-то в формуле, при 0 резисте пройдёт 0 урона.
Да, ошибся, вот правильная версия:
dmgPassed = (100 * dmgIncoming) / (100 + resist)
dmgPassedF = dmgIncomingF / (1.0 + 0.01 * resistF)

samrrr
> В таком случае это 50% резиста.
Суть в том, что это зависит от того, какое определение выбрано для слова "резист".

Сами по себе проценты — это просто коэффициент 1/100. В самом слове "процент" нет совершенно никаких ограничений на то, как они должны использоваться. Можно считать проценты от размера выборки (в случае вероятности), можно — от некоего базового значения (в случае скидок), а можно — вообще от абстрактных попугаев. Захочу — и поставлю проценты возле тангенса угла, и буду задавать "уклоны от -70% до 150%", и всё, что ты сможешь сделать — это коупить, ситить и малдить.

Единственное, что, пожалуй, можно назвать ограничением — это что к размерным физическим единицам, как правило, вместо этого используется приставка "санти", тогда как проценты — типично используются с безразмерными величинами. С другой стороны, достаточно часто даже размерные величины можно нормализовать так, чтобы они стали безразмерными; например — перейти в систему, где c=1, и получить фазовую скорость волны в 300%.

#680
16:14, 16 фев 2023

Имбирная Ведьмочка
> dmgPassed = (100 * dmgIncoming) / (100 + resist)
> dmgPassedF = dmgIncomingF / (1.0 + 0.01 * resistF)
Ну и как эти формулы отражают стрельбу лазером или плазмой по защищённой цели?

#681
16:32, 16 фев 2023

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

#682
17:00, 16 фев 2023

Имбирная Ведьмочка
> Божественным велением. Я хозяин игрового мира, как захочу — так в нём всё и
> будет.
где храм, где на тебя помолится можно?

#683
19:09, 16 фев 2023

Имбирная Ведьмочка
> Да, ошибся, вот правильная версия:
> dmgPassed = (100 * dmgIncoming) / (100 + resist)
> dmgPassedF = dmgIncomingF / (1.0 + 0.01 * resistF)
Вот ты примерно как в книжке навыдумывал сложных формул. А по факту тоже самое обясняется гораздо проще:

dmgPassed = dmg * dmgMult

А уже процента резиста для вывода игроку:

resistPercent = 1 - dmgMult

Соответственно при выводе единиц процента домножить на 100 и приписать %

А формула dmgMult делается в зависимости от игры. Для твоего варианта:

dmgMult = 1 / (1 + resistArmorSumm)

И конечно же никаких 100 у меня не будет в рассчётах. Я же учился в школе далее 4 класса и знаю, что процент записывать лучше в безразмерном виде.

#684
19:16, 16 фев 2023

Алексей Патрашов
> Ну и как эти формулы отражают стрельбу лазером
Никак. Тыже про фентези рассуждал.

Для лазера и плазмы соответственно иные формулы и рассчёты. Но пока только в одной игре осилили примерно правильно сделать.

#685
(Правка: 21:33) 21:29, 16 фев 2023

samrrr
> Вот ты примерно как в книжке навыдумывал сложных формул.
Ключевой факт заключается в том, что resist от нескольких предметов — суммируется.

samrrr
> А формула dmgMult делается в зависимости от игры. Для твоего варианта:
> dmgMult = 1 / (1 + resistArmorSumm)
> И конечно же никаких 100 у меня не будет в рассчётах. Я же учился в школе далее
> 4 класса и знаю, что процент записывать лучше в безразмерном виде.
В процентах удобнее отображать стату на экране.

samrrr
> Для лазера и плазмы соответственно иные формулы и рассчёты.
Насрать, на самом деле, как оно ведёт себя в РЛ. Реалистичные страдания никого не интересуют.

#686
22:10, 16 фев 2023

Имбирная Ведьмочка
> Ключевой факт заключается в том, что resist от нескольких предметов —
> суммируется.
Тоесть просуммировать даже не можешь?

Имбирная Ведьмочка
> В процентах удобнее отображать стату на экране.
И причём тут рассчёты?

Имбирная Ведьмочка
> Насрать, на самом деле, как оно ведёт себя в РЛ. Реалистичные страдания никого
> не интересуют.
Просто такие игры мало кто смог осилить.

#687
23:24, 16 фев 2023

samrrr
> Тоесть просуммировать даже не можешь?
Ты не понял.

У персонажа есть стата, называется "resist".

У некоторых предметов, абилок и статусов одним из эффектов является добавление "resist". Например, если персонаж имеет врождённый "50 resist", надел 8 щитов с "+30 resist", получил бафф на "+500 resist" и 14 копий дебаффа "-20 resist", то его итоговое значение статы будет 50+8*30+500-14*20 = "510 resist".

Урон, например, считается так:

double criticalCoef = attack.isCritical ? (2.0 + 0.01 * dealer.criticalBonus) : 1.0;
double markCoef = victim.isMarkedForDeath ? 4.0 : 1.0;
double bossCoef = 1.0 + (victim.isBoss ? 0.01 * dealer.bossBonus : 0.0);
double friendlyCoef = dealer.isFriendlyWith(victim) ? 0.3 : 1.0;
double resistCoef = victim.resist > 0.0
    ? 1.0 / (1.0 + 0.01 * victim.resist)
    : 1.0 - 0.01 * victim.resist;
double blockCoef = max(0.0, 1.0 - 0.01 * victim.blockCoef);
double absorb = victim.absorb;
double scaledDamage =
    incomingDamage * criticalCoef * markCoef *
    bossCoef * friendlyCoef * blockCoef;
double finalDamage = max(1.0, scaledDamage - absorb);

victim.resist — это безразмерная величина, которая измеряется в сотых долях — поэтому, это проценты. Но это не коэффициент к урону.

Когда victim.resist равен 510% — это означает пропускание в 1 / (1 + 5.1) = 0.164.

В такой системе, "резист 125%" имеет вполне определённый смысл, и по нему, это строго лучше, чем "резист 100%" и строго хуже, чем "резист 150%".

#688
23:33, 16 фев 2023

Имбирная Ведьмочка
> Урон, например, считается так:
Это хороший пример, почему считать в процентах плохо, а код надо разделять на функции.

Имбирная Ведьмочка
> 2.0 + 0.01 * dealer.criticalBonus
А подобные вещи типо базового урона крита х2 должны рассчитываться еще в critmult героя. Когда ты захочешь вывести игроку скокаже он урона при крите выдаст тебе прийдется заново сделать эту магическую 2.

#689
0:10, 17 фев 2023

А когда вы начнёте считать пробивание брони обычной, экспансивной и бронебойной пулей, у вас начнётся настоящий ад.

Страницы: 141 42 43 44 45 46
ФлеймФорумРазработка игр