Войти
Игровой ДизайнФорумСценарии игр

Генератор завязки сюжета.

Страницы: 1 2 Следующая »
#0
11:56, 16 дек. 2015

Решил поделиться своим генератором сюжетов.

Прочитав про Колесо сюжетов Эдгара Уоллеса, я решил создать свой "колесо".
Делюсь наработками, возможно кому-то будет интересно.
Это скелет, который можно расширять, наполнять или упрощать.

Сия писанина может помочь в создании квестов для ролевой игры. Как живого действия, так и компьютерных.
Эта, извиняюсь за выражение, система помогла мне когда-то в написании огромного количества квестов.

Для начала. Первое и главное - это стремление персонажа. Так сказать, его действие.
Изучив огромое количество всевозможных действий, я пришел к выводу, что все действия можно классифицировать в 5 пунктов:
1 Причинить вред.
2 Улучшить положение.
3 Избежать вреда.
4 Вернуть потерянное.
5 Сделать выбор - Принять решение из двух-нескольких вариантов.

Далее нам нужно понять, что толкает персонаж на это действие. Выражаясь культурно и правильно - его мотив.
Всякие умные дяди дают кучу различных классификаций мотивации. Все есть в мировой паутине и специализированных книжках. Лично я предпочел несколько скомбинировать. Вот что вышло:
Награда
Безопасность.
Чувства и эмоции
Месть
Автономия
Жажда знаний
Физиологическая
Долги
Выжить
Жадность
Порядок
Доминирование
Признание
Зависть
Амбиции
Агрессия
Любопытство
Подозрения, сомнения

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

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

Фактически мы уже получили скелет квеста. Но дополнить его совсем не помешает.

Я предлагаю дополнить Обстоятельствами и Событиями.
Обстоятельства, как мы знаем из курса русского языка бывают:
Образ действия (как, что)
Степень (чуть-чуть, слегка, много, все)
Время (вчера, в будущем, в прошлом)
Места (обозначение места, объекта)
Причины (от, из-за, на основании, по причине, в виду)
Меры (количественное, отрезок)
Цели (чтобы, как видно, для)
Условия (Только, если, при условии)
Уступки (вопреки, несмотря на)

Наконец, События. Что-то же должно произойти, а то неинтересно. Опять таки я разделил события на 8 частей, хотя при желании можно раздробить примерно на 40-50 вариантов (что я и делал).

Экономика (производство, продукция)
Экономика (торговля)
Экономика (рабочая деятельность)
Природные (тайфун, буря, засуха)
Аварии (пожар, взрыв, обвал, морду опять же набили)
Политическая (связано с управлением, охраной, распределением ресурсов)
Социальная (Здоровье, наука, образование, отдых, доходы)
Технологии (объем, качество, совершенство, износ, информация)

Для полной генерации можно ввести понятие Борьбы. С кем наш персонаж собирается закуситься:

Борьба с собой
Борьба с группой
Борьба с обстоятельствами
Борьба с личностью
Борьба с врагами

Теперь если всю эту информацию тупо вогнать в такое достижение человека, как Exel, можно генерировать сюжетные завязки для квестов. Остальное - это уже ваша фантазия. Впрочем, все можно систематизировать. Даже развитие сюжета квеста.

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


#1
12:48, 16 дек. 2015

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

#2
13:56, 16 дек. 2015

Спасибо огромное за идеи. Очень интересно. +Подписался.
Сейчас кое-как сбоку подколупывал идею процедурной генерации квестов, но пока мне это не надо и по этому процесс идёт крайне вяло и несистематизированно.

От себя могу добавить только "многостадийные и нелинейные квесты" (блочные квесты), объединённые какой-то общей концепцией-идеей и набором НПЦ в них учавствующих.

Т.е. квест строится следующим образом:
Завязка + триггер.
Тело (набор блоков, каждый из которых устанавливает какую-то переменную).
Возможные концовки (в зависимости от комбинации блоков).

Все блоки связаны с "завязкой" и одной "концовкой", т.е. каждый имеет как минимум один "вход" и один "выход". Блоку соответствует набор подразумеваемых действий для "установки переменной", в классике: "Иди из текущего пункта А в пункт Б через набор препятствий, соответствующих стилю игры с определённой разнообразностью и выполни там какое-то действие (возьми предмет, поговори с НПЦ, убей монстра и т.п.)".
Каждый квест имеет сеттинг, каждый блок заранее прописан и проверен на совместимость с другими (в этом самая главная проблема). Для блоков типа "перебить всех и вся" это не сложно, а вот для напрямую связанных с текстовым/звуковым/графическим контентом будут сложности... Возможно такие сложные последовательности будут требовать забивания "жёсткой структуры квеста" с некоторыми "случайными" блоками.

Пример:
Завязка: ГГ получает письмо от %npcfriend "Слышь, %pcname, братан, я тут слышал слухи, что в пещере %cavename есть артефакт %artifactname, который разыскивает местный коллекционер %npcname".
Тело:
Блок1: ГГ отправляется в пещеру %cavename и зачищает её от бандитов/крыс/слизней/мышей. Артефакта нет - его кто-то увёл до ГГ. (стадия квеста закончена)
Dозможные концовки: 2.1. Решение идти к %npcfriend уточнить откуда слухи. 2.2. Попытаться понять, кто забрал артефакт.
Блок 2.1. Приходит к %npcfriend и тот направляет его на базар к %npcname (стадия закончена)
Блок 2.2. Опрашивает местных жителей, кто-то указывает на то, что искатель приключений %npcname2 пришёл из экспедиции в эту пещеру. Но нашёл он там что-то или нет, не ясно (стадия квеста закончена)
Дальше: 2.1.1. Пойти к %npcname и распросить его, 2.2.1. Пойти искать %npcname2, 2.1. (назад)
Блок 2.1.1. %npcname говорит, что слышал о том, что артефакт уже кто-то продаёт.
Блок 2.2.1. Распросив в местной таверне удостовериться, что %npcname2 таки был в пещере, продал кучу лута и убрался невесть куда.
...
Блок n. (на который замыкаются все варианты завершения квеста) Найти торговца %npcname9, который перекупил артефакт и купить или забрать силой у него артефакт.
Блок n+1. отнести артефакт %npcname и получить награду в 10 раз большую, чем стоил артефакт. (квест завершён)
(опционально) Отблагодарить %npcfriend что в дальнейшем скажется на том, что тот будет подкидывать ему ещё выгодных квестов.

#3
15:34, 16 дек. 2015

Интересная тема. Подписался.

kelten78
Что ты имеешь в виду под Событием? Распиши поподробнее, пожалуйста.

Предлагаю такой вариант построения квестов, основываясь на трехактной структуре: завязка, развитие, кульминация, развязка. Завязка описана тобой. Развитие - набор препятствий, как, например, предложил eugeneloza. А вот в кульминации должен быть неожиданный поворот - сюда мы прописываем НПС, мотивация которого строится полностью по твоей схеме. Промежуток от кульминации к развязки заполняем действиями.

#4
16:23, 16 дек. 2015
А вот в кульминации должен быть неожиданный поворот

Мне кажется, что злоупотреблять этим не стоит. Изредка такое обязательно надо (особенно для важных для сюжета квестов / главного квеста), но не каждый квест из 1024...
#5
17:09, 16 дек. 2015

Сделайте генератор персонажей и злодеев. 

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

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

#6
17:14, 16 дек. 2015

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

#7
17:32, 16 дек. 2015

fent
> в кульминации должен быть неожиданный поворот
Извини, %playername%, твоя %quest_target% в другом %quest_location%

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

Ну и да, вспоминается "торжественный комплект" Бендера :)

#8
9:20, 17 дек. 2015
генерация квестов - дело довольно бестолковое

"Генерация" не равно "рандом". Однако, при достаточном количестве случайных элементов вполне реально достичь "выхлоп генератора" сравнимый с вложенной работой или даже превосходящий её объём. К сожалению, конкретной имплементацией сюжета у меня нет времени сейчас заниматься (хотя очень хочется), но проводя параллель с генерацией случайной карты - задача вполне решаемая.
Подобные потуги уже были в Skyrim-овском Radiant quests. Унылое зрелище из-за крайней недоработки, но неплохая демонстрация, что направление далеко не тупиковое.
Конечно же, есть проблема - "сгенерировать случайную карту" и "написать случайную книгу" это две совершенно разные задачи и второе, очевидно, на N+1 порядков сложнее. Такой подход не приклеится к классической игре с "линейным" сюжетом, и не заменит его.

НО:

1. Среднестатистический квест состоит на 95% из геймплея, а не текстовой/аудио/визуальной информации. Случайный геймплей сложно балансировать, но возможно. Остальные части могут быть "относительно фиксированными"
2. Никто не просит писать главный квест совершенно рандомным. Процедурными могут быть "побочные" или "дополнительные" квесты, а также некоторый объём блоков основного квеста. При этом, А - он будет использовать не очень много вариантов ресурсов (при этом, возможно, даже тот один вариант - вполне и вполне проработан), Б - будет каждый раз разный (как минимум благодаря изменяемым действующим лицам (пусть даже с идентичной озвучкой и сюжетной линией) и локациям).
3. Не знаю, насколько интересно будет в "это" играть, но программировать это будет реально круто :) Про одну из известных игр говорили: You don't play Morrowind, you live there. Геймплей мира с процедурными квестами должен быть направлен именно на это утверждение - создать мир, в котором игрок может "жить", а не убер-квест в котором %playername спасает мир от %evilname.

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

+1! Классная идея. (Ненавидит коров за их ужасающее "муууууу")
Как бы теперь не "влипнуть" в размышления над особенностями - у меня до 25.12 дел невпроворот... Блин, я постановку для зимнего детского лагеря ещё и не садился писать... а тут процедурным сюжетом занимаюсь...
#9
9:25, 17 дек. 2015

Генератор квестов - идеальное решение для рогаликов, например.

#10
9:58, 17 дек. 2015

Andy51
> Мне кажется, что генерация квестов - дело довольно бестолковое
Зря так кажется. Хотя очень многое (процентов 90) зависит от фантазии и "какие книжки ты читал".

Вот например квест по генерации, указан процесс и алгоритм разработки:
Пример:
2 нпс. Фермер и батрак (есть у меня генератор нпс, исходя из локации).
После генерации составляем:
1 Дан квест: Принеси оброк фермеру от батрака.
2 Идем к батраку, берем оброк. (Возможно придется уговорить или угрожать или украсть - это уже варианты решения)
3 Сдаем оброк и квест.
У этого квеста одно действие - взять оброк.

А если его расширить? Вводим еще двух нпс (жена и брат по генерации)
1 Дан квест.
2 Не находим батрака на месте. Узнаем от жены, что ушел, когда вернется - неизвестно.
3 Осматриваем вещи, видим, что с кровати взяты все принадлежности, делаем вывод, что сбежал.
4 Узнать, что у него есть брат в лесу, в охотничьем домике. (разные варианты как).
5 Идем в лес, находим брата, раскалываем его (или другие варианты), что батрак в подвале.
6 Беседуем с батраком, узнаем, что он все деньги проиграл.
7 Сдаем его в рабство/Просто говорим, что не нашли/ даем денег на оброк - Квест сдан.

А квест, между тем, простейший.
И дополнительных трудностей не создаст. Однако их придется создавать.

В данный пример нужно завязать еще три ветки (путем генерации на каждую ветку определяем подсюжет):
1 Ветка жены. Жена просит не искать мужа, он ей надоел, пьянь и игрок, но ей очень нравится его брат. (она не в курсе где муж)
2 Ветка брата. Брату нравится жена батрака, но он ненавидит фермера, а батрака презирает как человека, но любит как брата.
3 Доп ветка фермера. Три охранника параллельно ищут батрака.

Только после этого выйдет неплохой квест.

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

Тогда это будет хороший квест.

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

Вот так благодаря генерации, мы слепили фактически отличный квест с нелинейным живым сюжетом.
А вы говорите, ерунда))

#11
10:14, 17 дек. 2015

Andy51
> чтобы
> однообразность не так сильно бросалась в глаза придётся наделать вариантов по
> количеству сравнимых с выхлопом генератора.
Так и есть, в любой генерации. Но остается главное преимущество - каждая игра будет отличаться. И разные люди проходя игру смогут рассказать друг другу "прохладные истории", и один и тот же человек сможеть проходить игру несколько раз, а не выучит всю последовательность в первое прохождение.

#12
10:19, 17 дек. 2015

Mira
> Хотя игра с процедурно генерируемыми локациями и сюжетом, задача забавная ,с
> точки зрения реализации.
Мне кажется, на текущих мощностях и ресурсочасов - это невозможно. В смысле невозможно сделать хорошую игру на полной генерации.
eugeneloza
> Т.е. квест строится следующим образом:
> Завязка + триггер.
Касаемо развития квеста.
Я обычно тут использую две системы. Логическая и вариативная.
Логическая:
Берем рэндомное событие. Любое. Возьмем Фоловский сеттинг. Например, в городе пропала вода. И теперь начинается мыслительная деятельность, исходя из обстоятельств и мотивов. Задаем вопросы. Сами же даем ответы и в итоге получаем четкое и логичное повествование.
Пример:
-Из-за чего может пропасть вода? - сломался насос - Почему сломался? -варианты - старый был, его сломали. - развиваем второй вариант - кто мог сломать? - тут целый список фракций. К каждой нужно найти причину. Например - гулы - хотят получить дань, бандиты - мстят за кого то из своих - анклав - проводят эксперемент. Выбираем понравившийся. Например бандитов. - Кого убили и кто это сделал. Как вариант убили брата главаря. Новый вопрос - за что убили. Снова куча вариантов - чужая банда - ответная месть/просто война/случайно вышло/его заказали. Выбираем понравившийся - его заказали например. Снова вопрос - кто?..... и так можно до бесконечности.
Добавляем еще две таких же, идущую параллельно во времени - для насыщенности событий и ту, которая уже прошла, то есть, бэкграунд. Например в качестве бэка - историю создания города, где ключевое место занимает мэр -бывший главарь банды/сбежавший генерал Анклава/бывший житель бункера.
Получаем насыщенное, логическое повествование.
Вариативная система:
Квест: Торговец: Принести шкурку суслика
Возможные варианты:
1 Купить шкурку
2 Уговорить торговца не убивать сусликов.
3 Дать тряпку и обмануть, что это шкурка суслика.
4 Убить суслика и содрать шкурку
5 Попросить охотника убить суслика и содрать шкурку
Это ОДНА ветка, имеющая несколько вариантов решений. Но квест мы выполняем согласно заданию.
Далее:
6 Сдать торговца, как браконьера полиции
Это Вторая ветка. Здесь мы не выполняем задание, но закрываем квест. Ветка: против.
7 Поговорить с сусликом и взять квест принести шкурку торговца
Это третья ветка. Здесь мы берем паралельное задание. Ветка: Или-или.

Что-то я много информации вывалил)) Изначально меня все же интересовала классификация Событий. Желательно на 20-40 пунктов, но обхватывающих почти все возможные варианты.

#13
11:37, 17 дек. 2015
Изначально меня все же интересовала классификация Событий

Боюсь, что реально не получится так просто взять и написать классификацию событий, собственно, не сделав программку, которая будет что-то генерировать.
Немного попробую пояснить тут (впрочем, проблема вполне очевидна).
У каждого НПЦ есть какие-то характеристики, особенности (зацепила идеия). Например, старик-добряк не выдаст квест на экстерминатус местной стражи. И после того, как гг убил главаря местной банды тот не должен выдать квест на "явку с повинной".
Т.е. каждый блок квеста должен:
а) совпадать по "мотивам" с ценностями-характером НПЦ которые в него вовлечены.
б) не противоречить предыдущим блокам квеста.
в) совпадать по сюжету с общим квестом.
Эта штука плохо вклинивается в "классификацию" на 20-40 пунктов. Скорее всего, это будет некий набор векторов/матриц совместимости, в некоторых случаях вообще подразумевая "один единственный уникальный вариант продолжения".
В первую очередь так возникает из-за необходимости предварительного создания контента, в том числе даже простого написания текстов. Текст может содержать случайные элементы и даже случайные наперёд написанные блоки. Но чтобы квест слился в непрерывное качественное повествование - вопрос совместимости случайных элементов будет достаточно сложным. Тем более, если подразумевается голосовая озвучка и другой уникальный контент.
Что это означает на практике - НПЦ должны осознанно отвечать на вопросы игрока/сюжета. Т.е. целые блоки могут стать стандартными для НПЦ - кто где когда, опиши событие, свои мысли на эту тему и подобное. Иными словами - классификация событий будет достаточно прямо вытекать из "способностей" ИИ НПЦшников, особенностей геймплея и т.п. и неразрывно с ними переплетаться.

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

#14
12:12, 17 дек. 2015

kelten78
> И теперь начинается мыслительная деятельность, исходя из обстоятельств и
> мотивов. Задаем вопросы. Сами же даем ответы и в итоге получаем четкое и
> логичное повествование.

С этим могут быть проблемы, когда тебе в голову не приходит самое очевидное решение, а игрок  думает: "Что за идиотизм? У меня же наука прокачана на 100, я могу этот насос из палок и шишек слепить, а они мне про бандитов и разборки втирают". И если ты допустил какую-то логическую ошибку в самом начале, построил от нее целое повествование, а потом тебя осенило, придется делать все сначала.

eugeneloza
> Боюсь, что реально не получится так просто взять и написать классификацию
> событий, собственно, не сделав программку, которая будет что-то генерировать.

Ну тут не вижу противоречий. Каждый блок - по сути, событие, - имеет параметры на входе и на выходе.

На входе:
Пол: Мужчина.
Возраст: Старый.
Род деятельности: Мельник.
Характер: Добрый.
Прошлое: Род деятельности не менялся.

По входным параметрам блок выбирает из нескольких подходящих событий:
1) Пропал сын (подходит по возрасту).
2) Поссорился с сыном (подходит по возрасту).
3) Пропала жена (подходит по полу).
4) Поссорился с женой (подходит по полу).
5) Пропал муж (подходит по гомоквоте).
6) Закончился важный ресурс: мука (подходит по роду деятельности).
7) Рекет отбирает семейный бизнес (подходит по прошлому).

Выбрав событие, блок выбирает методы решения (один или несколько):

1) Найти сына и попросить помощи (подходит по характеру и возрасту).
2) Найти покупателя на бизнес (подходит по роду деятельности).
3) Собрать важный ресурс: мука (подходит по роду деятельности).
4) Договориться с антагонистом (подходит по характеру).

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

Страницы: 1 2 Следующая »
Игровой ДизайнФорумСценарии игр

Тема в архиве.