samrrr
> Бред какой-то в формуле, при 0 резисте пройдёт 0 урона.
А это закономерный итог того, что вместо научной физической можели применяется выдуманная игровая.
Алексей Патрашов
> А это закономерный итог того, что вместо научной физической можели применяется
> выдуманная игровая.
А физически верную модель осилили только в паре игр.
samrrr
> В школе повторяли всё по 5-10 раз да ещё и в разных классах.
нет
samrrr
> А физически верную модель осилили только в паре игр.
Ключевое слово здесь — осилили. То есть можно сделать, если привлечь специалиста в соответствующей области, а область на уровне инженера. Но! Даже после привлечения нужного специалиста всё может пойти не как надо потому, что итоги физически верной можели расходятся очень сильно с представлениями дизайнера, которому кажется и он считает своё представление верным.
samrrr
> Бред какой-то в формуле, при 0 резисте пройдёт 0 урона.
Да, ошибся, вот правильная версия:
dmgPassed = (100 * dmgIncoming) / (100 + resist)
dmgPassedF = dmgIncomingF / (1.0 + 0.01 * resistF)
samrrr
> В таком случае это 50% резиста.
Суть в том, что это зависит от того, какое определение выбрано для слова "резист".
Сами по себе проценты — это просто коэффициент 1/100. В самом слове "процент" нет совершенно никаких ограничений на то, как они должны использоваться. Можно считать проценты от размера выборки (в случае вероятности), можно — от некоего базового значения (в случае скидок), а можно — вообще от абстрактных попугаев. Захочу — и поставлю проценты возле тангенса угла, и буду задавать "уклоны от -70% до 150%", и всё, что ты сможешь сделать — это коупить, ситить и малдить.
Единственное, что, пожалуй, можно назвать ограничением — это что к размерным физическим единицам, как правило, вместо этого используется приставка "санти", тогда как проценты — типично используются с безразмерными величинами. С другой стороны, достаточно часто даже размерные величины можно нормализовать так, чтобы они стали безразмерными; например — перейти в систему, где c=1, и получить фазовую скорость волны в 300%.
Имбирная Ведьмочка
> dmgPassed = (100 * dmgIncoming) / (100 + resist)
> dmgPassedF = dmgIncomingF / (1.0 + 0.01 * resistF)
Ну и как эти формулы отражают стрельбу лазером или плазмой по защищённой цели?
Алексей Патрашов
> Ну и как эти формулы отражают стрельбу лазером или плазмой по защищённой цели?
Божественным велением. Я хозяин игрового мира, как захочу — так в нём всё и будет.
Имбирная Ведьмочка
> Божественным велением. Я хозяин игрового мира, как захочу — так в нём всё и
> будет.
где храм, где на тебя помолится можно?
Имбирная Ведьмочка
> Да, ошибся, вот правильная версия:
> 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 класса и знаю, что процент записывать лучше в безразмерном виде.
Алексей Патрашов
> Ну и как эти формулы отражают стрельбу лазером
Никак. Тыже про фентези рассуждал.
Для лазера и плазмы соответственно иные формулы и рассчёты. Но пока только в одной игре осилили примерно правильно сделать.
samrrr
> Вот ты примерно как в книжке навыдумывал сложных формул.
Ключевой факт заключается в том, что resist от нескольких предметов — суммируется.
samrrr
> А формула dmgMult делается в зависимости от игры. Для твоего варианта:
> dmgMult = 1 / (1 + resistArmorSumm)
> И конечно же никаких 100 у меня не будет в рассчётах. Я же учился в школе далее
> 4 класса и знаю, что процент записывать лучше в безразмерном виде.
В процентах удобнее отображать стату на экране.
samrrr
> Для лазера и плазмы соответственно иные формулы и рассчёты.
Насрать, на самом деле, как оно ведёт себя в РЛ. Реалистичные страдания никого не интересуют.
Имбирная Ведьмочка
> Ключевой факт заключается в том, что resist от нескольких предметов —
> суммируется.
Тоесть просуммировать даже не можешь?
Имбирная Ведьмочка
> В процентах удобнее отображать стату на экране.
И причём тут рассчёты?
Имбирная Ведьмочка
> Насрать, на самом деле, как оно ведёт себя в РЛ. Реалистичные страдания никого
> не интересуют.
Просто такие игры мало кто смог осилить.
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%".
Имбирная Ведьмочка
> Урон, например, считается так:
Это хороший пример, почему считать в процентах плохо, а код надо разделять на функции.
Имбирная Ведьмочка
> 2.0 + 0.01 * dealer.criticalBonus
А подобные вещи типо базового урона крита х2 должны рассчитываться еще в critmult героя. Когда ты захочешь вывести игроку скокаже он урона при крите выдаст тебе прийдется заново сделать эту магическую 2.
А когда вы начнёте считать пробивание брони обычной, экспансивной и бронебойной пулей, у вас начнётся настоящий ад.