↓
 ↑
Регистрация
Имя/email

Пароль

 
Войти при помощи
Временно не работает,
как войти читайте здесь!
Asteroid
11 февраля в 13:55
Aa Aa
#размышления #gamedev
Я сегодня попробовал прикинуть, как посчитать уровень юнита с броней, которая не процентно режет урон, а вычитается из него. И понял, почему игроделы такое не используют.

Обычно просто берётся и строится линейка Уровень = (Урон * Эффективное_Хп)^0,5, а тут не получается, потому что нет эффективного Хп - против разных противников оно разное.
Тут прикол в том, что Эффективное Хп - это суммарное количество урона, которое может выдержать юнит. И оно становится гиперболически больше, когда Броня приближается к Урону врага. Потому что Эффективное_Хп = Хп / (Урон - Броня). А поскольку Урон у разных врагов разный, то у одного и того же юнита получается разное Эффективное_Хп: от одного юнита он может принять 10000 суммарного урона, а от другого пару сотен.
Если у юнита Броня больше Урона противника, то он становится неуязвим, и его относительная мощность уходит в бесконечность.

Итак, проблема в том, чтобы отобразить в формуле вот это разное и к тому же гиперболически растущее Эффективное_Хп. Формула должна правильно отображать синергию между Хп и Броней. А с другой стороны, мы должны учитывать неуязвимость сильнобронированных юнитов.

1.
Вот эта неуязвимость наводит на мысли о классах брони: лёгкая, средняя, тяжелая.
Тогда и в формуле Эффективного_Хп мы можем поставить вместо Урона некий средний урон у типичного противника нашего юнита: Эффективное_Хп = Хп / (Средний_Урон - Броня). Для каждого класса брони мы получаем свой фиксированный Средний_Урон противника. Условно, по танкам бьют другие танки и РПГ.

Это было бы легко, но... оно плохо работает на переходах между разными классами брони.
Представим некое фэнтези, где есть рыцари, чьи статы плавно растут при прокачке. Тогда его уровень будет плавно расти вверх, пока не перейдёт в следующий класс, где он резко скакнёт вниз, потому что Хп, Урон и Броня у него почти такие же, как и вчера, а вот класс брони мы считаем выше, ставим в формуле больше Средний_Урон, и его Эффективное_Хп становится рывком меньше. Отчего и Уровень становится рывком меньше.
Я не люблю разрывные функции. Ещё с универа, когда диплом писал. ))

Но мы можем использовать эти формулы, если спрятать "зубья пилы" функции. Сделать это достаточно просто: у нас не должно быть юнитов на "зубьях". Тогда разрывность будет неочевидной.

2.
Но вообще, хочется плавно растущую функцию, которая отобразит гиперболическую синергию между Хп и Броней.
Поболтал с чатботом, предлагает использовать экспоненту, либо Хп^(0,1 * Броня), либо Хп * Броня^К. Первый вариант вроде бы ближе по характеру роста к гиперболе. Хм...
То, что мы возводим что-то в степень брони - это вроде как отображает гиперболический рост, но вот вообще Эффективное_Хп от Хп растёт мультипликативно, а умножение на 2 Хп в первой формуле даст слишком дофига. Возможно, стоит заменить на Хп * К^(0,1 * Броня).

У нас числа очень быстро уйдут в стратосферу. Как вариант, логарифмируем всё это: Уровень = логарифм( Урон * Хп * К^(0,1 * Броня)) = логарифм( Урон ) + К * Броня + логарифм( Хп ).

Всё вроде ничего, но заметно, что у нас теперь Урон как-то отстаёт, становится менее значим. Хотя по факту, у него тоже есть синергия с Броней. Пусть и с Броней врага. Ведь если каждое Броня+1 делает наше Эффективное_Хп гиперболически больше, то и каждое Урон+1 у врага делает Эффективное_Хп гиперболически меньше.
А теперь немножко магии: я не буду париться с обдумыванием изначальной формулы, я просто сделаю магический переход - если мы Броню вынесли за логарифм, то и Урон тоже вынесем. Итоговая формула: Уровень = К1 * Урон + К2 * Броня + К3 * логарифм ( Хп ).
Честно говоря, это вообще не то, что я ожидал, когда начинал писать пост. )))

3. Мы можем также использовать вторую формулу от чатбота, не забывая, что Урон симметричен Броне. Тогда Уровень = Хп * (Урон * Броня)^К.
Числа, опять-таки, будут быстро расти. Но в этом случае можно попробовать вместо логарифма кубический корень. Там всё очевидно, расписывать не буду.

4.
Дальше, у нас стоит задача выбрать одну формулу из трёх, а это можно сделать только опираясь на практику:
А) Надо где-то взять, или придумать юнитов с их характеристиками;
Б) Составить таблицу с попарным сравнением их силы: сражаются два юнита, и если после смерти одного юнита у второго осталось 50% Хп, то значит, он в два раза сильнее (главное, сравнивать не сильно отличающиеся друг от друга юниты, потому что иначе относительная мощность уходит в бесконечность);
В) Попытаться подогнать коэффициенты в формулах так, чтобы разница в уровне для всех юнитов чётко коррелировала с разницей в силе.
Г) Выбрать из прошедших испытание формул те, что больше нравятся. Мне нравятся формулы с простым смыслом: аддитивные, мультипликативные или экспоненциальные. Например: экспоненциальная - это если +1 Уровень означает +10% силы.

5.
У нас может не пройти испытание ни одна формула. То есть, они все назначают уровни, которые слабо коррелируют с фактическими данными. Тогда просто берём фактические данные, и назначаем уровни руками, опираясь на экспоненциальное, или любое другое правило, например: "+1 Уровень означает +10% силы". Либо ищем апроксимацию.

Сами понимаете, мне всем этим заниматься влом. )))
Уверен, что и игроделам тоже. Взять обычную процентную броню гораздо проще во всех смыслах. Это ведь был только расчёт уровня, там ещё дофига всего повылазит.

Итог.
В любом случае. Ни аддитивная, ни мультипликативная, ни экспоненциальная формулы не отображают гиперболический смысл "враг на Х уровней выше - неуязвим", нет там этой асимптоты. Я хз что с этим можно вообще сделать.
Есть мысли?
11 февраля в 13:55
9 комментариев из 51 (показать все)
Матемаг
У нас с тобой совершенно разные взгляды на то сто произошло. Я бы не сказал что люди научились играть в макро, и раньше умели, только таких игр были реально единицы. Почему, вообще причин дофига. Стартовая разведка рабами/пробками/дронами как один из примеров. Почему не применяли раньше? Да банально из-за того что урон экономике при разведке одним рабом из 12 несоизмеримо меньше, чем отвлекать одного из 4. Удобные выходы на вторую третью базу, более ранние выходы на эти базы, закрытость самих баз. Раньше ты бы не смог поставить вторую базу настолько рано как сейчас, и втора база была более открыта. Уменьшение кристаллов на стартовой базе, что привело к тому что ты вынужден занимать вторую раньше, и т.д. Т.е. это не эволюция геймплея от игроков, потому что им так захотелось, а прямое принуждение Близзов. И привело нас это к тому, что то что раньше было украшением и встречалось раз в полгода, а именно условно часовая карта на полное макро с истощением всех ресурсов по карте, сейчас происходит чуть ли не в каждой третьей игре Серрала когда он не в форме и играет против игрока заведомо слабее себя.


Не я не фанат чизов, я себя и к фанатам старкрафта даже не отношу, если брать игры Близзов мне скорее ВК3 по душе. А если в целом стратегии то Эпохи империй (2,Мифолоджи).
Показать полностью
EnGhost
Вставлю свои пять копеек. Я немного не понимаю, почему ты считаешь, что раш обязан кончиться или победой, или поражением, а не перейти органично в макро-игру.

Приведу пример из моих любимых шахмат. На гроссмейстерском уровне бывают феерические атаки с жертвами фигур, хитрые комбинации, когда все висит на волоске, думаешь "блин, белые столько всего пожертвовали, что они либо поставят сейчас мат, либо проиграют"...
... а потом, когда дым рассеивается, мы видим, что у белых одна лишняя проходная пешка. То есть, исход этого all-in - не выигрыш белых, и не выигрыш черных. Белые хорошо атаковали, черные хорошо защищались, и в итоге белые отбили свои жертвы назад, и игра перешла в макро с преимуществом белых.

Почему в Starcraft должно быть не так? Если, абстрактно говоря, зерг пошел в роуч-раваджер алл-ин, продавил протоссов, снес им пару баз, но в итоге видит, что протосс отобьется с мейна, даже если я продолжу достраивать роучей - почему бы не "согласиться на лишнюю пешку" и не взять две новые базы вместо доконцагейминга? ИМХО, это самый логичный исход.
StragaSevera
что раш обязан кончиться или победой, или поражением, а не перейти органично в макро-игру.

Потому что тогда это не раш, а просто открытие через роучпуш, через блинк сталкеров, через циклоно-гелионов и прочее. Одно дело 3 Барака - макс морпехов, медиваков - раш, где вообще не подразумевается строительство второй базы, и совсем другое вышеназванные открытия, где ты уже с начала планируешь выход на вторую базу.
Как всегда - всё свелось к терминологии. )))
EnGhost
> Потому что тогда это не раш
"Мятеж не может кончиться удачей, в противном случае его зовут иначе."

Нет ничего, что запрещало бы перейти из 3 бараков во вторую базу, даже если это не подразумевалось изначально, если это корректная тактика здесь и сейчас. Если ты запер противника на его мейне, но видишь, что не сможешь додавить в ноль - ты берешь вторую базу.
StragaSevera
Нет ничего, что запрещало бы перейти из 3 бараков во вторую базу, даже если это не подразумевалось изначально, если это корректная тактика здесь и сейчас.

Есть). Тебя снесут с вероятностью 100% если отбились. Раш с трёх бараков подразумевает, что ты полностью всю экономику вкладываешь в это, в то время как у противника уже будет вторая база, хоть какая-то стационарная оборона. Если он отбивается, ты банально не успеваешь перестроиться и тебя сносят. Если ты недовкладываешься в раш, то а строишь стационарную оборону, строишь второй СС, то какой же это раш?)

Ps. Ситуация с запер на базе - это уже ГГ и ливаем. Там по сути борьба за выход на вторую.
EnGhost, ну да, тут комплекс причин. И я согласен, что причина меньше в игроках. Но парад макро, на мой взгляд, лучше парада чизов.
EnGhost
Если он отбивается, ты банально не успеваешь перестроиться и тебя сносят
Чем сносят? Ладно ТвЗ, там "отбивается" = "сохранил вторую" = преимущество по экономике. В ТвП или в ТвТ чем тебя в ответ снесут? Никаких быстрых имботехнологий, если вы оба в итоге на одной базе (ты его выдавил и заставил закрыться под танками, а сам на новую не выходил) у него нет и не появится, в ТвТ вообще "имботехнологий" нет особо. Закрыл человека под танками, дропаться на них или подниматься - самоубийство, варианты, что делать? То же самое в ЗвЗ - человек закрылся от твоих лингов на мейне стенкой из квин, поставил бонусом плётку. Ты его не пробьёшь. Что делать-то? Вторую ты ему снёс, дальше в эту стенку бодаться? Или ты к тому, что "настоящих рашев больше нет, так, жалкая имитация, раз они не пробивают до смерти"?
Матемаг
Чуть подробней про ситуации. О каком конкретно раше идёт речь? Если терран отбился от зафотона и при этом сохранил достроенный СС (а такое бывало) то протоссу там ловить нечего. Если отбился от зафотона с темпестами, то дроп викингов в минералку врага. Если просто от зафотона без СС, то хватит и раша мариками там протосс и так всё на имморталов потратил.

Насчёт лингобейнов рашей в звз, а когда ты в последний раз видел линго-бейн раш без выхода на вторую, так разве что Ваня играл, да и то...

По твт вообще не скажу, слишком слабая насмотренность этих матчапов. Да и терраны (как впрочем и все) сейчас не то чтобы часто
ПОИСК
ФАНФИКОВ











Закрыть
Закрыть
Закрыть