RU

Анонс: "ЗАМаХ" боевой движок для текстовых РПГ

MasterSet #11 09.08.2011 18:24 38 comments 22680 views

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

Задача: создать достаточно динамичный но в то же время не скучный и не банальный движок для рукопашныx боёвок 1 на 1, который смогут использовать в качестве готового решения разработчики текстовых РПГ на платформе QSP. Как и все мои творения, движок будет полностью открытым и свободным. Разумеется авторам скорее всего придется допиливать его для своих целей, так что я планирую максимально упростить для них и эту область.

ИНТЕРЕСНЫЕ ФАКТЫ:
- Название включает аббревиатуру четырех основных атрибутов персонажа: Защита, Атака, МАневр, Хитрость.
- Для демонстрации возможности движка он будет выпущен в виде демо-игры: “ЗАМаХ - Фентези арена”. Демка будет включать десяток противников, основной набор снаряжения, оружия и брони, а так же систему прокачки персонажа. Фабула самая примитивная - выбираем противника, побеждаем, зарабатываем деньги, тратим деньги на прокачку и снаряжение, выбираем нового противника посильнее и т.п.
- Бой в ЗАМаХе пошаговый, но каждый ход делается в один клик, чтобы не терять динамики.
- Система асимметрична, т.е. правила по которым действуют игрок и монстр в игре различны. Это позволило предоставить игроку широкий тактический выбор, без необходимости писать ИИ для монстра. Впрочем возможности оппонентов так же довольно велики: каждый из них имеет 12 разных приемов и один коронный супер-удар. Приемы не выдаются на простом рандоме, а собираются по принципу комбо, сборку которого игрок может видеть, до определенной степени предвосхищая возможные действия противника и действуя исходя из этого.
- Монстр становится более опасным со временем, набирая “кураж”. Это так же призвано стимулировать динамику боя.
- Новый монстр добавляется одной локацией, в которой суммируются все данные по нему, включая раскладку по приемам, которые он применяет. Доработка в коде самой игры понадобится только если вы захотите какие-то особо хитрые приемы. Еще понадобится картинка.
- Да, интерфейс у движка графический, на AERO. Но было бы желание, можно довольно легко перепилить его в любой вид, включая чистый текст.
- К сожалению пока не созрела идея как добавлять одной локацией снаряжение. Так что его будет несколько сложнее прописывать.
- Я пытаюсь писать максимум комментариев, для того чтобы авторам было проще разобраться что к чему.
- Движок будет сделан и в виде подключаемой библиотеки, но только в том случае если я разберусь КАК ВООБЩЕ РАБОТАЕТ ЭТА ФИГНЯ????!!!111 О_о
- Срок выхода: when it’s done

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

PROGRESS REPORT (09/08/2011)
- Продукт находится в той стадии готовности когда гоблин уже может меня побить, а я его еще нет. Маленький подлец трижды меня убил. Все потому, что пока доступно всего четыре вида снаряжения: обнаженный торс, голый кулак, босые ноги и пустая ладонь. Но скоро я напишу себе оружие и броню и тогда мы просмотрим кто тут крут. И еще приемы рукопашного боя, чтобы рвать его как Брюс Ли, даже без снаряги.

Edited at 09.08.2011 18:26 (14 years ago)
Aleks Versus Moderator 11.08.2011 09:41 (14 years ago)

MasterSet,
я бы тебе помог с коэффициентами, но представление о твоей системе боя у меня весьма смутное.
1. Противник набивает очки из такой же случайной линейки, как и игрок, только тип его атаки зависит от первого элемента в этой линейке.
2. Набивание происходит до тех пор пока выпадающий в линейке случайный тип не совпадет с первым. Так противник может делать и комбо 2 и комбо 12 и комбо 58. :=D Если ему повезет конечно. Здесь имеет смысл подумать о том, чтобы противник мог набивать очки, только если следующее значение в линейке больше предыдущего, а когда значения достигают максимума (9, как я понял), завершать комбо.
3. Пока противник набивает комбо, игрок может совершать короткие атаки. Т.е. комбо 2, комбо 3, комбо 2. И для того чтобы стимулировать игрока делать более сложные атаки, ты хочешь, чтобы они наносили больше ущерба противнику.

Исходя из этого два способа навскидку.

Самый примитивный способ - умножать на число комбо. Вред=количество_очков*количество_раундов допустим за три раунда набрал 6 очков. 6*3=18.
Есть такой вариант, чуть посложнее:

вред = сумма[n] * n / порог + (разность[1]+разность[2]+...+разность[n]) , где
n - количество раундов
сумма[n] - сумма очков, набиваемых из линейки, т.е. если выбиралось К1 К2 К3 - сумма[3]=6, если К2 К4 К9 - сумма[3]=15
порог = 5 (могу процитировать, откуда)
разность[] - разность между текущим и предыдущим значением очков

Поясню разность на примерах из кода.
К1 К2 К3
разнсоть[1]=К1 - К0=1
разность[2]=К2 - К1=1
разность[3]=К3 - К2=1
К2 К4 К9
разность[1]=К2 - К0=2
разность[2]=К4 - К2=2
разность[3]=К9 - К4=5

Составил табличку в Excel, проверял разные варианты. За девять раундов набирается 91, что в два с небольшим раза больше простого суммирования очков. Если снизить порог, должно получаться больше. минимальный вред 1,2. Максимальный при “комбо” в 1 раунд 10,8

2Aleks
Спасибо, но ты не понял моего вопроса.
Поясню еще раз:
Система ассиметричная. Очки ТВ набирает только игрок и он не делает никаких комб - он просто выбирает нужный маневр на который ему хватит набранных очков. Монстр же делает комбы но не платит за это никаких очков - комбы составляются просто на рандоме пораундно.
Эта прогрессия мне нужна для рассчета вреда игрока.
Например у меня есть три вида оружия: кинжал, топор и двуручная кувалда. Их применение стоит разново колличества очков атаки и наносит разный дмедж. Это фиксированные показатели. Например:
Кинжал - 3 ОА / 2 вреда
Топор - 5 ОА / 4 вреда
Кувалда - 16 ОА / 25 вреда

Вот среднее для таких соотношений мне и надо посчитать, чтобы от него плясать потом.

Aleks Versus Moderator 13.08.2011 07:05 (14 years ago)

MasterSet:

он просто выбирает нужный маневр на который ему хватит набранных очков

но очки-то он набирает пораундно, как и противник? Из линейки, разве нет?

MasterSet:

Тактические возможности представлены линейкой из пяти позиций, каждая из них имеет цвет и значение от 1 до уровня раскачанного игроком для данного цвета (минимум 3, максимум 9). Позиции в линейке выпадают случайно, например: Черный 3, Красный 1, Фиолетовый 7, Красный 2, Фиолетовый 4. Каждый раунд линейка сдвигается на одну позицию вправо - крайняя правая тактическая возможность исчезает, а с левого края появляется одна новая случайная тактическая возможность.

А это такая-же линейка, по сути, как и у игрока, только противник не думает, что выбрать, а как бы сразу выбирает:

MasterSet:

Каждый раунд рандомно выбирается один из них. Если такого приема в текущей комбе еще не было, он усиливает ее. Если такой прием в комбо уже был, комбо завершается.

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

Либо ты что-то недоговариваешь. Может очки ТВ будут тратиться на использование какого-то оружия? Видя воочию движок, и зная, где конкретно и что ты хочешь получить, было бы легче. Ну или хотя бы имея пример боя в числах пораундно.

Опять движок)) У меня сомнения… Я когда-то тоже сделал движок для рпг, на основе аднд, с ареной, и так его и не допилил до игры, и так происходит повсеместно… Желание сделать рпг не пропадает, НО! Каждый автор хочет своё рпг, с блэкджеком и блудницами) Посмотреть что у тебя получится будет в любом случае интересно, но я бы на твоём месте сразу подумал о игре, куда ты сможешь это вставить.

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

Я пришёл к близкому выводу..) Посмотрим, что выйдет)

Годный движок должен удовлетворять следующим критериям:
1. Баланс.
Его отсутствие сгубило не одну сотню благих зачинаний “Нового, Супер-Пупер Движка”.
2. Разнообразие.
Если есть одна единственная кнопочка “Драцца!!!” и исход поединка зависит только от скорости нажатия на неё, то сменив 2-3 клавиатуры(мышки), игрок вас проклянет.
3. Простота.
Если сделать выбор из 168 ударов пяткой, 38 движений левого мизинца и 96 отскоков с пусканием пыли в глаза, перевязать их все в зубодробительные комбо, то игрок проклянет вас едва ли не скорее.
4. Гибкость.
Любой, самый совершенный движок, с течением времени “приедается” и нужны модификации - то новое вооружение, то новые защиты, то еще чего…

А всякие мелочи вроде “каким цветом назвать, да как комбы покрасивше обозвать” - это не главное.

MasterSet:

уровень комб

КОМБУШКИИИИИ!

2Воден
По всем пунктам кроме первого у меня все уже в норме. А с первым - работаем.

С прискорбием вынужен констатировать, что ЗАМаХ зафейлен.
Мне не удалось преодолеть врожденные проблемы с балансом, а уровень фана от того что уже получилось как бы намекает, что корпеть над их исправлением не имеет смысла. Овчинка не стоит выделки.

Тем не менее, сам движок в общем-то готов. Правда находится в состоянии совершенно непричесанной альфы, так что играть в эту демку практически невозможно. Тем не менее выкладываю для ознакомительных целей. Скачать можно тут: http://www.mediafire.com/?llt9femsx8k58he
Запускать надо на аере.

Немного о том как пользоваться:
В главном меню три варианта выбора, они довольно очевидны.
На арене есть выбор из 12 врагов но работают только первые 2 - манекен и крыса. В приниципе там очень легко ввести всех остальных, я просто не вижу в этом смысла.
В бою у вас будут показаны четыре слота снаряжения, с выбранным вами снаряжением. Под слотом цветовые панели со значениями текущих тактических возможностей: Защита = черный, Атака = красный, Маневр = зеленый, Хитрость = фиолетовый.
Значения записаны в формате 1[1]. Первая цифра - текущий уровень тактики соотвествующего цвета, вторая - знчение последней активированной Тактической Возможности(ТВ). Наращивать тактику вы можете только выбирая более высокую ТВ нужного цвета. Т.е. если вы уже активировали [красный 2], то теперь можно активировать как минимум [красный 3].
Если тактика на что-то потрачена, то оба ее значения обнуляются и все надо начинать сначала. Тактика каждого цвета тратится сразу целиком, даже если на активацию маневра требуется меньше очков чем текущее значение тактики.

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

Задача - убить оппонента раньше чем он вас. Ваша и его броня отображаются в щитках. Удары снижают броню. Если вред нанесенный атакой превышает значение брони, то атака идет на поражение. Если атака на поражение идет по вам, то весь избыточный вред приходится на вашу черную тактику и обнуляет ее (но не обнуляет предел черной ТВ). Если избыточного вреда было больше чем вашей черной тактики - вы будете повержены.
Атака на поражение по противнику убивает его не наверняка, а с некоторой вероятностью. Вероятность тем выше, чем болшьше вреда прошло за защиту.

В значке фаербола отображается кураж врага. У манекена кураж не работает. Крыса нанесет вам атаку равную своему куражу, если останется жива при 0й броне. Кураж при этом обнулится.

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

MasterSet,
А есть ли хоть какое-то внятное описание алгоритмов? И текста “каким должен был бы быть баланс”? И насколько отделена внутренняя механика боя от внешней оболочки с интерфейсом пользователя?

Впрочем, скачаю, погляжу сам :)

Вот и погляди сам )
Каменты кое какие есть, но меньше чем нужно для полного понимания. Механика довольно модульная.

Aleks Versus Moderator 02.11.2011 07:15 (14 years ago)

MasterSet:

Каменты кое какие есть, но меньше чем нужно для полного понимания.

С некоторых пор завёл привычку делать документы для описания кода. создаю отдельный документ и разжевываю сам себе, как если бы разжевывал постороннему, как оно работает, стараясь избегать общих фраз и нечеткой, мутной, терминологии. и знаешь, начал находить элементы, которые можно упростить, сократить, изменить. Может и с балансом тебе бы помогло. Даже “врождённые” проблемы можно решить. К тому же такой документ помог бы человеку, который решит продолжить твоё дело, если ты совсем отчаялся. И потом, мне кажется, ты рано всё это забрасываешь. Что называется “не прошло и года”. :)

Для моих скоростей разработки это полная стагнация. Программу такого размера я был должен максимум за месяц полностью реализовать, даже быстрее. Альтернативную я вчера за один день дописал до уровня когда можно вести базовый бой без “фарша” (шмоток, приемов и кучи врагов). Там правда пока всего 30кб кода, но на то она и упрощение.

А вот насчет отдельного документа по дизайну алгоритмов надо подумать. Идея здравая, но для меня сложная и необычная. Я просто не программер, а криэйтор. Потому и думаю другим боком. Пишу документ по самой игромеханике, а не по ее программной реализации. Разумеется такой подход имеет свои ощутимые “вилы”. (

Нужно просто соавтора-программиста.

Log in or Register to post comments.