Добрый день. Подскажите, посоветуйте, как лучше организовать механику получения удара для врага. Игрок бьет по врагу, у врага происходит анимация получения удара - вот это надо как то согласовать, продумать...
Приблизительные ориентиры - это игры типа диабло, битэмапы типа боевых жаб - что то в этом духе.
В отличии от аркад, в моей игре медленный бой - т.е. от взмаха до удара может пройти 1-2 секунды.
Механика врага сейчас такая:
- враг видит игрока и бежит к нему. Игрок попадает в зону атаки врага.
- если игрок в зоне атаки врага, начинается первая фаза атаки - взмах. Враг подымает меч за 1 сек.
- если игрок всё ещё в зоне атаки врага (не убежал), то враг за 0.5 сек опускает меч и наносит урон
Начав атаку (взмах) враг её не может прервать - т.е. игрок может убежать и враг всё равно сделает удар, по пустому месту.
При ударе врага по герою или героя по врагу никто не оглушается (stun), никакая анимация не проигрывается.
Как, в такой ситуации лучше сделать механику получения удара для врага?
Т.е. в момент атаки врага (был это взмах или опускание меча), игрок сделал удар по врагу.
Что тогда делать? Как это реализовано в подобных играх?
В Souls-like играх (а твоё описание на них очень походит) обычно есть система баланса (poise). То есть, при получении удара у персонажа отнимается не только здоровье, но и ещё одна невидимая для игрока характеристика, которую называют балансом. Если баланс упал ниже нуля, то проигрывается анимация получения удара, а любое выполняемое в этот момент действие прерывается. Если не упал - то ничего не прерывается и анимации тоже нет. Со временем баланс восстанавливается.
На максимальный запас баланса может влиять прокачка персонажа, носимая броня и предметы. Для врагов он, естественно, является константой.
BooTheJudge
> В Souls-like играх (а твоё описание на них очень походит)
Не уверен что подходит. В диабле вроде серий нет и там скорее всего есть зона удара для ближнего боя, также отдельно нужно смотреть массовый удар или нет. Анимации получения удара там тоже вроде нет, лупят все друг друга как хотят. Нужно открывать игру и смотреть как там, а лучше запись сделать и покадрово разобрать.
В боевых жабах убежать нельзя пока бьют. Да и во многих играх есть механики прерывания серии. Не спрашивать на форумах нужно, а лично смотреть как в играх сделано, только так получится что то нормальное.
Трудно понять, что именно ты хочешь.
Если у тебя типа реалистичность - делай всё физикой: ik, ragdolls, силы и коллизии.
Будет медленно, с инерцией и рилтайм. Куда попал - туда и попал.
Вопрос про получение удара врагом. Сейчас при ударе по врагу только отнимается здоровье.
Это выглядит немного неестественно - по врагу ударили, а он это не "почувствовал".
Враг при ударе не прерывает атаку, не прерывает движение и т.д.
Очень сложно разобрать в игре, как работает эта механика, особенно в битемапах. Там всё идет за долю секунды.
В Диабло также непонятно. Ты можешь бить с большой скоростью по врагу и враг будет получать урон и прерывать атаку. Но в какой то момент враг, несмотря на то что ты по нему попал, будет бить по тебе. Как это работает - неясно.
EIvanov
> В отличии от аркад, в моей игре медленный бой - т.е. от взмаха до удара может пройти 1-2 секунды.
> - если игрок в зоне атаки врага, начинается первая фаза атаки - взмах. Враг подымает меч за 1 сек.
> - если игрок всё ещё в зоне атаки врага (не убежал), то враг за 0.5 сек опускает меч и наносит урон
> Начав атаку (взмах) враг её не может прервать - т.е. игрок может убежать и враг всё равно сделает удар, по пустому месту.
Всё это звучит ужасно и именно это нужно переделывать - до анимаций.
> Как, в такой ситуации лучше сделать механику получения удара для врага?
Самый тупой вариант - нарисовать одну или несколько анимаций "получения удара", при получении удара - рандомно выбрать одну из них и запустить. Чуть более умный вариант - выбирать анимацию не рандомно, а в зависимости от полученного урона и угла атаки (тогда анимаций должно быть больше и они должны быть "симметричные").
EIvanov
> Сейчас при ударе по врагу только отнимается здоровье.
> Это выглядит немного неестественно - по врагу ударили, а он это не "почувствовал".
> Враг при ударе не прерывает атаку, не прерывает движение и т.д.
Это всё разные вопросы - прерывание (стоп) атаки, прерывание движения, снижение усталости (если она есть) и т.д.
> В Диабло также непонятно. Ты можешь бить с большой скоростью по врагу и враг будет получать урон и прерывать атаку. Но в какой то момент враг, несмотря на то что ты по нему попал, будет бить по тебе. Как это работает - неясно.
Например, заводят счётчик (переменную - скажем, равную 3 по дефолту), который уменьшают при каждом ударе. Когда он становится равным 0 - моб/юнит не получает "прерывание атаки/движения при получении урона на N времени или N своих/чужих атак" (и соответственно может провести атаку или скастовать абилку или двигаться и т.д. независимо от получения урона за эти N). Аналогичная (по смыслу, но отличающаяся по геймплею) механика Rage/Berserk - когда моб/юнит входит в соотв. "режим" и игнорирует атаки (а иногда даже и урон) соперников.
EIvanov
> Враг при ударе не прерывает атаку, не прерывает движение и т.д.
Так прерывай. В чём проблема? Это же ведь про геймдизайн вопрос, а не про код?
> враг будет получать урон и прерывать атаку. Но в какой то момент враг, несмотря на то что ты по нему попал, будет бить по тебе. Как это работает - неясно.
Это всегда работает через стейты, таймеры-куллдауны и счётчики.
Конкретно в твоём примере - есть параметр, ответственный за игнор попаданий, он включается "в какой то момент".
После атаки например выключается.
Не понятно в чем проблема. Если скорость атаки 1 секунда значит если через время 0.5 сек противник в определенной точке значит засчитываем удар и запускаем анимацию получения урона. Если не в этой точке то промах.
Уточню - Вопрос про геймдизайн. Код, тех вопросы (архитектура, поля-переменный, стейты) не интересуют.
GDR
> Всё это звучит ужасно и именно это нужно переделывать - до анимаций.
Не соглашусь. В некоторых играх - битемапах, файтингах быстрый бой, в других очень медленный бой - например та же смута. Посмотрите, в смуте, время между атаками 1-2 секунды, всё очень медленно и ничего, продается )
Хотя мне это тоже не очень нравится и я больше склонен к бою типа диабло.
GDR
> Например, заводят счётчик
С одной стороны это хорошо - теперь будет прерываться часть атак, что не даст "забить" врага, если время атаки героя меньше, чем врага (механику уровня атаки и уровня брони, промах и т.д. пока не рассматриваем).
С другой стороны, у игрока может возникнуть недопонимание.
Я ударил врага он прервал атаку и я вижу анимацию урона. Ясно.
Я ударил врага и он не прервал атаку. Я что не попал? Промах, враг увернулся? Непонятно.
2 одинаковых действия и разный результат.
DemiosFantasimo
> Не понятно в чем проблема.
Я не понимаю, что происходит при ударе врага. Как должен вести себя враг, с точки зрения геймдизайна.
Полностью прерывать атаку, отображать анимацию урона и начинать атаку заново.
Или прерывать атаку, отображать анимацию урона и продолжать атаку с момента, на котором атака была прервана.
На видео, на геймплее игр типа диабло или той же смуты, не понятна данная механика.
Я не знаю попал игрок по мобу или нет. В интерфейсе игры нет такой информации. Мобы то отображают анимацию урона, то нет.
Я не понимаю, что происходит при ударе врага. Как должен вести себя враг, с точки зрения геймдизайна.
Полностью прерывать атаку, отображать анимацию урона и начинать атаку заново.
Или прерывать атаку, отображать анимацию урона и продолжать атаку с момента, на котором атака была прервана.
На видео, на геймплее игр типа диабло или той же смуты, не понятна данная механика.
Я не знаю попал игрок по мобу или нет. В интерфейсе игры нет такой информации. Мобы то отображают анимацию урона, то нет.
Помимо анимации есть еще эффекты и звуки, получение урона можно на крайняк обозначить и ими. А если серьезно то теоретизировать можно весьма долго, можно например сказать что реакция разных мобов должна отличаться в зависимости от типа моба, одни отскочат, вторые будут впитывать дамаг и тд и тп, но по факту все будет зависеть именно от технических моментов, кода, и самого геймплея, ибо проверить как оно работает можно только на практике.
EIvanov
> Полностью прерывать атаку
Что это значит "прерывать атаку"?
Идет просто цельная анимация удара и возврат руки - полный цикл. Какое еще прерывание атаки?
Когда анимация в пиковой точке удара проверяй попал или нет. Если попал отнимай хп или что там у тебя еще будет
EIvanov
> Полностью прерывать атаку, отображать анимацию урона и начинать атаку заново.
Да, так можно сделать
EIvanov
> Или прерывать атаку, отображать анимацию урона и продолжать атаку с момента, на котором атака была прервана.
А так не надо, это нелепо будет смотреться. Если атака персонажа не прерывается, то анимация урона не нужна, достаточно будет звука и дополнительного эффекта какого-нибудь, вроде брызг крови или искр каких-нибудь.
Прерывать атаку или нет - это уже зависит от того, что лучше будет работать в рамках твоей конкретной игры.
EIvanov
> Не соглашусь.
Не соглашаться можно сколько угодно, лучше от этого ничего не станет. В диаблоидах и битмапах (которые Ваши ориентиры, судя по Вашим словам) такой темп боя будет смотреться ужасно. В сосаликах против 1 моба - получше, но тоже на любителя. А ориентироваться на смуту это, кажется, пробивание нового дна в современном геймдеве.
> С другой стороны, у игрока может возникнуть недопонимание.
> Я ударил врага он прервал атаку и я вижу анимацию урона. Ясно.
Не может. Атака противника (попадание и урон) и прерывание атаки противника - не только не равносильные, но и никак не взаимозависимые вещи. И игроков идиотами считать не надо.
> Я ударил врага и он не прервал атаку. Я что не попал? Промах, враг увернулся? Непонятно.
Это троллинг или Вы такой искренний? "не попал, Промах, и увернулся" - это всё характеризует (и обуславливает) в первую очередь урон, а не вторичные факторы. Если урон есть (его-то Вы ведь показываете - анимацией и цифрами / хэлсбаром?) - значит, попал (не учитывая блок, броню и пр.)
> 2 одинаковых действия и разный результат.
В играх (в т.ч. в боёвке) полно абсолютно одинаковых действий игрока, дающих разный результат (как и в жизни, собственно). Откройте для себя понятие рандома и перестаньте троллить.
> Я не понимаю, что происходит при ударе врага. Как должен вести себя враг, с точки зрения геймдизайна.
Мы таки обсуждаем Вас и Ваше непонимание или таки геймдизайн?
> Как должен вести себя враг, с точки зрения геймдизайна. Полностью прерывать атаку, отображать анимацию урона и начинать атаку заново.
Какой враг? В какой игре? С какой целью?
> Или прерывать атаку, отображать анимацию урона и продолжать атаку с момента, на котором атака была прервана.
Звучит как самый убогий и непривычный игрокам вариант.
> На видео, на геймплее игр типа диабло или той же смуты, не понятна данная механика.
Подозреваю, что в разных версиях диабло эта механика отличается. В первой версии, к примеру, был пермабрейк (и насколько я помню, шмот, кот. это дело снижал/давал иммун).
> В интерфейсе игры нет такой информации.
Повторяю, это серьёзно или тупой троллинг?
> Мобы то отображают анимацию урона, то нет.
Именно анимации урона может и не быть. Есть и другие отображения - звуки, цифры, хелсбар, вторичные эффекты (вампиризм и пр.). Об чём ветка вообще, "как лучше сообщить игроку о том, что он нанёс урон цели"? Потрудитесь вопрос нормально сформулировать.
EIvanov
Да.
В каких-то случаях, когда не надо прерывать атаку(например, враг более стойкий) - рисовать вылетающую кровь и проигрывать звук урона врага
Ещё один... Рисовать кровь и проигрывать звук урона врага нужно независимо от прерывания его атаки (если прерывание атаки отображается анимацией, то да, можно из двух анимаций отобразить одну, хотя лучше обе или комбинированную).
Тема в архиве.