Моделирование битв в текстовых приключениях

2010-03-27T08:54:54+06:00

Итак, в середине (начале,конце) игры вы решили сделать боёвку. Кто-то с кем-то дерётся.

Первый вопрос: зачем? Что даёт нам введение боевой сцены?

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

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

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

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

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

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

Отсюда вытекает очень простое правило. Если вы пишете компьютерное приключение - лучше откажитесь от боевой сцены.Текстовые компьютерные игры не предназначены для боёв. Бой требует как минимум изображения, иначе каждое действие игрока и его противника вам придётся описывать двумя-тремя абзацами. Это действительно слишком много,чтобы прочитать, переварить и представить. Даже само представление в виде текста очень снижает скорость игры. Вы никогда не приблизитесь к нужной динамичности.

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

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

Но как быть с боями в компьютерных играх, где там нет мастера? Для компьютера нет персонажа и мостика, есть набор параметров и Уровень Сложности Препятствия. Он оценивает, складывает два и два и выдаёт результат: погиб. Справедливо? Разум подсказвает, что справедливо. Прекрасно! Значит, можно брать ролевую систему и ставить её в компьютерную игру?

Не всё так просто. Да, это очень удобно и в меру справедливо. Но ролевая игра подразумевает разграничение по параметрам, их повышение или понижение. Какой смысл делать мост, если по нему может пройти каждый персонаж? Или наоборот, непроходимый мост?

Итак, что мы имеем? Если есть бой, то есть ролевая система. Если есть ролевая система, есть повышение параметров (опыт, +1 Сила, +1 Ловкость и т.д.). Что получается? Чтобы пройти мост, персонажу необходимо тупо прокачаться. Получить +1 к Силе, +1 к Ловкости или 700 XP. Где это можно сделать? Скажем, стоит спортзал. Зашёл, покачался - получил +1 к Силе. Верно?

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

Далее. О формулах. Я рекомендую использовать только стандартные функции random(). Почему?

Вспомним теорию вероятности. Кубик, который используется в настольных играх (4-100 гранный) - это генератор случайных чисел с равномерным распределением. Что означает: каждое число имеет равные шансы выпадения. Замечу, что сумма двух кубиков уже имеет нормальное распределение, то есть, среднее арифметическое обоих кубов будет выпадать чаще (так, на двух шестигранниках это будут числа 6 и 7). Генератор в компьютере - псевдослучайный. Он имеет нормальное распределение, максимально приближенное к равномерному. Если часто вызывать такой генератор, то вы заметите,что всё-таки он перекошен в сторону каких-нибудь чисел - но перекос всё-таки заметен только при частом использовании.

К чему я веду? Что бы вы ни делали с генератором случайных чисел - складывали бы с параметрами, делили, корректировали - у него всё равно будет перекос. У него всё равно будет нормальное распределение чисел. Это закон из той же теории вероятности: если вы используете только последовательности с нормальными законами распределения (а других у вас нет), то вы получите последовательность тоже с нормальным законом распределения. Что бы вы ни делали, намного проще и выгоднее написать rand() и не мучиться.

Главная проблема компьютерных генераторов случайностей - их перекос. Что бы вы ни делали, игрок может запустить 6 раз подряд игру и все 6 раз проиграть. С этим нельзя бороться (настоящий генератор должен быть аппаратным, а каждому игроку не выдашь огромный модуль с подключением по USB). Поэтому это будет нечестно.

Пусть так. Идём дальше. Я уже сказал о скорости боя (она зависит от насыщенности описаний действий).Теперь - Повторимость. Дерутся двое. Один делает удар левой в живот, второй уворачивается и пытается выкинуть удар левой. Первый кидает правую в бок противника,а левой отбивает руку в сторону.Интересно? Интересно. Возможно ли реализовать в тексте? Ни в коем случае - это слишком сложно для управления. Хорошо. Тогда так: Один ударяет второго, второй уворачивается и пытается ударить первого. Первый отбивает удар и наносит свой. Это можно реализовать? Да. Но это довольно скучно читается, особенно после пятого хода.

Ну, вот вроде всё и разобрал. Вывод? Лучше не делать бои в квестах. Либо заменяйте их на какие-нибудь мини-игры (тетрис на скорость, карточная игра), либо убирайте вовсе. А ролевые системы в квестах так и вообще не нужны.