KumitekA, двух-кнопочное управления и реалистичный бой

Привет, меня зовут Денис и я инди разработчик (похлопали, некоторые достали платки).

KumitekA
KumitekA

В апреле остался без работы. Походив по фирмам, вакансии которых висят круглый год, я решил воплотить свою задумку в игру.

Дело в том что мне нравились старые файтинги Karateka, Internationale Karate, MK2 (за графику). Хотелось бы поиграть что то простое и вместе с тем реалистично. Современные файтиги совсем не просты и не реалистичны. Сами бои в прохождениях против компьютера мне играть не интересно. Да и у геймдизайнеров наверняка не было задачи сделать интересной драку на одного. На волне Киберспорт и всё такое.

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

Механика боя

Мне захотелось сделать реалистичную систему боя. Хотелось передать возню на короткой дистанции, где оппоненты сделав десяток ударов могут попасть куда угодно, но только не в челюсть. За основу я взял конечно Internationale Karate (1985 года игра). Именно её система с точным попаданием была ближе всего к тому что я вижу по телеку и чего я не вижу в 2д ААА файтингах.

Промах на короткой дистанции.
Промах на короткой дистанции.

Дело в том что важно не только дотянутся до противника (с этим у всех файтингов всё в порядке), но и не делать прямых ударов когда цель слишком близко, получится толчок, а не удар. В Internationale Karate это выглядело как промах. В MK2 меняли длинный удар на короткий автоматически и мне кажется это кощунством против реальности.

Далее я задумался о балансе. Дело в том что в реальных боях спортсмены используют разные удары, это зависит не только от дистанции (с этим у Internationale Karate нормально), но и от желания обмануть соперника и от усталости различной группы мышц.

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

Для каждого удара я сделал свою шкалу усталости. Получилось очень много полосок, подумав я сделал следующее. На экране под шкалой "здоровье", появляется только шкала усталости последнего произведённого удара. Стало намного компактнее.

Что будет когда шкала усталости иссякнет? Сначала я пошёл плохой дорогой которая вела подальше от реалистичности, я сделал что персонаж сделав удар, запас усталости которой иссяк переходит в бессознательное состояние на небольшое время (похожее на состояние перед фаталити у жертвы).Играть в такое было не интересно. Тогда я придумал следующее, пусть это будет не шкала усталости, а шкала скорости (усталость == скорость). Выражаться это будет не только шкалой усталости или ярости (которая во всех файтингах, и ничего общего с реальностью не имеет), а в скорости анимации ударов. Вот оно!

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

Разочаровавшисья снова начал размышлять, как исправить такой нехороший визуальный эффект и решил что скорость удара будет постоянная, но сами удары будут наносится с неким запозданием после получения команды на удар. Чем больше скорость удара, тем быстрее реакция на управление. Как вы уже догадались получился прототип который бесил игрока. Сделав удар игрок долго не видел отклика на свои действия.

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

Всё сложилось, игроки вынуждены менять удары, а значит и дистанцию. Нет смысла долго колошматить воздух в надежде что игрок сейчас атакует и наткнётся на удар, как скажем в МК2, удары станут просто редкими по частоте. Ну и добавился визуальный - эмоциональный момент когда уставшие бойцы через силу пытаются продолжать бой.

Мне так понравилось отражение усталости не только шкалой, но и визуальными изменениями боя, что я стал думать как отразить шкалу здоровье визуально тоже. Пришёл к выводу что здоровье может быть отражено в стойке персонажа, когда при полном здоровье он держит высоко руки перед собой, когда же здоровья мало то руки опущены. Так как прототип был 3д , мне не понадобилось делать какие то градации. Сделав стойку с опущенными руками я её интерполирую с обычной стойкой, параметром здоровье.

Персонаж справа почти проиграл.
Персонаж справа почти проиграл.

Подумав о том, что же можно добавить из "реалистичности", я вспомнил что в Internationale Karate за одни и те же удары давали разное количество очков. Точно не знаю, но мне показалось что это зависело от того насколько точно было попадание. Попадания бывают разные, вскользь, шлепок когда чуть дотянулись, ну и точное попадание. Я решил это отразить и конечно не только в виде размера повреждения. В зависимости от того чем правильнее была выбрана дистанция для удара, тем дольше я проигрываю анимацию где противник получив удар делает несколько шагов назад.

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

Но больше всего я обрадовался позже. У меня стали получатся комбо. Раньше, при любом попадании, анимация отбрасывала противника довольно далеко и второй удар сделать не получалось. Теперь слегка попав по противнику можно было успеть сделать ещё удар. Случай редкий но возможный. Получилась система комбо которую ты сам мог строить в зависимости от ситуации. Так как скорость ударов всегда разная, в зависимости от того как часто их использовали, то нет идентичной ситуации когда начав комбо и отбивая чечётку на кнопках, ты думаешь о том что надо бы не забыть сегодня купить хлеба и доделать математику.

KumitekA, двух-кнопочное управления и реалистичный бой

Управление

После того как решил с боёвкой, я перепробовал две системы управления, обе мне не понравились.

Первая классическая - крестовина и пару кнопок. Дело в том что глядя на персонажей, палец частенько съезжал с нужной кнопки, а крестовина появлялась слишком близко к краю экрана (опять же из за неправильного положения пальца за которым перестаёшь следить в пылу драки).

Свайпы мне не понравились тактильным ощущением. Они хороши когда действия ими не интенсивны, но превращаются в какую то мастурбацию если постоянно нужно кого то бить.

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

С перемещением всё ясно, нажал правую идёшь в право, нажал в левую то влево. Быстрые касания одной из них создают не движение, а эмуляцию нажатия обычной кнопки которая отвечает за удары. Появилась проблема которая была ещё в MK2. Если хочешь выстрелить например Cкорпионом "назад" "назад" "А", перед выстрелом ноги персонажа некрасиво дёргаются.

Тогда я сделал следующее. При удерживании одной из сторон экрана, движение начинается не сразу, а запаздывает на долю секунды. Если удерживание продолжается то персонаж начинает перемещаться, если отняли палец от экрана, то удар. Всего ударов у меня шесть, с первыми двумя всё понятно, быстрое касание по одной из сторон экрана. Над получением других ударов пришлось подумать.

В итоге я пришёл к очень простому решению, которое сейчас мне кажется очевидным, но на тот момент далось с трудом. Нужно было как и в случае с перемещением, не начинать отрисовывать удар, а подождать доли секунды. Если новых команд не следовало то совершать удар, если же были новые касания по экрану то копить их в буфер до того пока не прекратятся команды. После в буфере получался код удара, например "вперёд" "вперёд" или "назад" "вперёд".

Вообще медленность реакции персонажа на свои действия ощущаешь только в том случае если персонаж до этого ничего не делал. Далее, пока персонаж совершает действие, игрок натыкивает комбинацию и как только отыгрался один удар, тут же без паузы начинается другой. Поэтому в бою динамика всё же присутствует.

Итого

В итоге получилась своеобразная игра к темпу которой нужно привыкнуть, но мне нравится. Геймплей получился именно такой, которого мне и хотелось.

Игра доступна для Android бесплатно и для ios 299р. В игре нет встроенных покупок и рекламы (разве что в кредитах указаны два почтовых ящика).

Ролик.

Всем сочувствующим спасибо!

4040
53 комментария

для ios 299рУспехов

10
Ответить

в РФ на iOS так себе продажи, кроме сильных игроков индустрии. Люди стоят перед слишком сложным выбором между дошираком и инапом. Так что не думаю, что цена ставилась из расчета покупательской способности в РФ.

Ответить

- Ты кто такой?
- Сейчас узнаешь!
😃

5
Ответить

Я не понял в чем "культовость".

6
Ответить

Я как будто смотрю на то, как младенец открывает для себя мир, который известен уже всем людям, играющим в файтинги. Про footsies слышал когда-нибудь? Вот ты для себя их и изобрел только что. Footsies и нейтральный геймплан это метод игры, который предполагают что противники не трутся друг о друга, а пытаются выбрать наиболее выгодную для себя позицию, с которой можно безопасно атаковать оппонента и производить на него давление.

замах и атакаПоздравляю, это называется "стартап" и "активные фреймы". Разумное решение - не трогать эти параметры и оставлять их постоянными, потому что иначе становится почти невозможно сбалансировать остальную игру. Усталость это хорошо, но вместо того чтобы придумывать что-то новое, всегда можно использовать визуальный ряд+механику. Не надо напрямую привязывать шкалу усталости к скорости ударов, достаточно было бы просто сделать 2-3 состояния - пиковая кондиция, легкая усталость и измотанность, дать каждой из них свой набор анимаций и в соответствии с этим подкорректировать количество фреймов анимации, которые будут тратиться на восстановление после каждой атаки.

я вспомнил что в Internationale Karate за одни и те же удары давали разное количество очков. Поздравляю, теперь ты знаешь что такое frame advantage. Frame Advantage это...довольно сложно описать коротко. Посмотрим на примере.
У тебя есть "Персонаж A", атака которого использует 4 фрейма анимации для стартапа. При ударе напрямую "Персонаж A" получает преимущество, при ударе в блок - наоборот, ставит себя в невыгодную позицию. Как это выразить цифрами? Через те же самые фреймы! При прямом попадании этой атакой ты даешь "Персонажу А" преимущество в, допустим, 2 фрейма , при попадании в блок - невыгодные -1. Следовательно, в этих ситуациях "Персонаж Б" получает -2 и +1 фреймов соответственно. Это значит что при удачном попадании следующая анимация удара у "Персонажа А" будет короче на 2 фрейма, позволяя сделать комбо из двух одинаковых ударов. При попадании же этого удара в блок же у "Персонажа Б" будет возможность провести такую же атаку, но короче на 1 фрейм, что будет в любом случае достаточно, потому что у "Персонажа А" атака из 4-х фреймовой стала 5-ти фреймовой.

В зависимости от того чем правильнее была выбрана дистанция для удара, тем дольше я проигрываю анимацию где противник получив удар делает несколько шагов назад.Это называется "хитстан". В том же Street Fighter 4 была механика, которая меняла количество длительность хитстана после атаки в зависимости от того, как близко располагались персонажи друг к другу, либо позволяя продолжить комбо, либо наоборот делая так, что оппонент мог уйти в блок и контратаковать.

Тут я вспомнил о таком выдающимся явлении как двух-кнопочные файтинги. Они больше походили на пародиюА вот сейчас обидно, потому что есть очень даже хорошие простые файтинги.
Для вводного курса "файтинг для чайников", я рекомендую автору посмотреть на такие вещи как Fantasy Strike и Rising Thunder, которые берут основные концепции жанра и сводят их до удобоваримого минимума.
Вместо того, чтобы списывать все остальные файтинги как "сложные", ты мог бы просто почитать про то, что такое фреймдата.

7
Ответить

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

Не знаю в чём дело, прыжки до потолка или метания снарядов в виде рыб... Нет дело не в этом.

Просто я не чувствую драки.

Когда то очень давно у моего товарища появились электронные часы и мы придумали игру. Там был секундомер, одна и та же кнопка включала его и выключала. Секундомер показывал доли секунды. Мы старались нажать эту кнопку два раза как можно быстрее. Тот у кого меньше времени покажет секундомер, тот и выиграл. Современные файтинги во мне рождают именно то чувство, которое возникало при игре с секундомером.

Мне же хотелось игру про драку, в которой я бы чувствовал что мой персонаж действительно дерётся.

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

1
Ответить

Нет худа без добра. Зато автор теперь разбирается в этих вопросах куда лучше того, кто просто о них прочитал.

Ответить