Я разработал игровой движок на c / c ++ и DirectX.
У меня есть движок плиток для карт, анимированные спрайты игрока / NPC, общение с NPC, меню и изменение уровня, но игры нет, просто кажется пустым.
Я оглянулся и продолжаю слышать модные ответы, но я хочу знать, как реализовать историю в моей игре.
Некоторые люди говорят, что файл сохранения содержит флаги, управляющие всеми возможными действиями / состояниями, доступными в игре, но это звучит смешно.
Это немного амбициозно, но я стремлюсь получить такую игру, как старые игры Pokemon / Final Fantasy.
Кто-нибудь знает, как эти игры работают или теория используется?
Я долго искал и был бы очень признателен за любые отзывы людей.
Вы можете использовать набор возможных состояний, в которых находится ваша игра. Ваши NPC и ваш мир будут знать об этих состояниях и соответственно реагировать / отображать. Вы также можете определить набор триггеров, которые будут активированы некоторыми действиями / событиями.
Например, избиение определенного противника активирует триггер A, который добавит состояние S в ваш мир, а в состоянии S ваш персонаж получит удар током, когда выйдет из логова противника. Или идет дождь на улице. Или вы найдете редкую конфету. Вы получаете смысл.
С этими двумя простыми дополнениями к вашей игре, вы можете сделать ее более «живой».
Убедитесь, что вы также создаете богатый фон для своего мира, персонажей и сюжетной линии, и убедитесь, что игра соответствует этому фону. Спланируй свою историю первым.
Также попробуйте Gamedev
источник
Как уже упоминалось, это идеальное приложение для конечного автомата.
По сути, у вас есть своего рода древовидная структура. Каждый лист / узел содержит информацию о текущем состоянии и правила перехода к следующему состоянию. Каждый узел может содержать несколько выходов, в зависимости от того, насколько сложным вам нужен ваш сюжет / поток воспроизведения.
Хороший, очень свободный аналог - книга « Выбери свое приключение» . Каждая страница содержит некоторый текст, описывающий часть истории, и решения, которые игрок может принять. Каждое решение ведет на другую страницу. Некоторые страницы могут ссылаться на ранее посещенные страницы и т. Д.
В старых текстовых приключенческих играх, таких как Zork и Leather Goddesses of Phobos , и в печально известных играх Sierra * Quest ( SpaceQuest с Рэйгером Вилко в роли космического уборщика - один из моих любимых ) использовалась очень простая версия этого типа системы. Каждая комната на карте была состоянием, с выходами, связанными с другими состояниями или комнатами. При получении элемента установите флаг в объекте глобального состояния. Каждая комната будет проверять эти флаги, чтобы определить, какие персонажи или предметы были доступны в каждой комнате.
Таким образом, ваши состояния могут быть реализованы в виде класса или структуры, каждое со свойствами для:
Список активов - список указателей на фоновую графику и все остальное, что вам нужно для отображения комнаты / состояния / уровня.
Условия входа - достижения, которые уже должны быть достигнуты, чтобы перейти на уровень
Выходы - ссылки на каждый возможный «следующий» выход. Север, Юг, Восток и Запад - некоторые примеры этого, но вы также можете включить Дверь1, Телепорт и т. Д. При попытке выйти из комнаты или при определении выхода / двери «открыто» ваша игра может проверить следующее состояние чтобы увидеть, были ли выполнены его условия входа, и изменить способ отображения выхода на экране, или просто не позволить игроку двигаться в этом направлении.
Если вы хотите получить фантазию, вы можете включить другую версию состояния с другими условиями входа, которые бы изменили способ представления комнаты игроку или действия, доступные в этой комнате.
Ваш стартовый экран, смерть / игра поверх экрана и т. Д. Могут быть состояниями внутри системы, аналогично тому, как вы можете перемещаться между экранами меню. Фактически, если у вас есть такая система меню, вы можете использовать ее для этого. Вместо стрелок вверх / вниз и «ввода» для навигации по меню вы будете искать определенные события в игровой зоне, такие как наступление на панель телепортации, уход от правой части экрана и т. Д.
С точки зрения администратора подумайте, можете ли вы получить выгоду от создания инструмента администратора, который позволил бы вам создать конечный автомат. Добавляйте комнаты на карту, создавайте связи между ними, назначайте ресурсы, такие как фоновые изображения и т. Д. Это, вероятно, излишне для вашей первой попытки; слишком легко быть поглощенным созданием инструментов администратора и никогда не заканчивать игру. Помните - вы пишете не промежуточное ПО, а игру.
Надеюсь это поможет.
источник
Я использовал этот игровой движок под названием VERGE . Поиграйте с этим и посмотрите, как он обрабатывает события, мне действительно это нравится. Это тоже открытый исходный код, так что вы можете увидеть, как они его реализуют, здесь . Вот краткое описание.
Каждая карта имеет множество слоев. Графических слоев, которых может быть несколько. Слой обструкции. И затем есть слой зоны. Здесь важен слой зоны. *
У каждой плитки есть номер, чтобы указать, в какую зону она входит. Каждая зона может быть активирована двумя основными способами. Либо зона активируется при входе в нее игрока, либо она имеет то, что называется смежной активацией. Смежная активация означает, что когда игрок стоит рядом с одним из тайлов зоны и нажимает какой-либо ключ, указанный в качестве ключа активации, зона активируется.
Когда зона активируется, она вызывает функцию из скрипта. Так что вам нужно встроить какой-нибудь язык сценариев. VERGE имеет свой собственный язык, называемый VergeC, и также позволяет использовать lua. Я сам предпочитаю использовать Python.
После того, как вы преодолели это препятствие, у вас появилась огромная сила в написании сценариев событий. У вас есть полноценный язык программирования, на котором вы можете хранить и обрабатывать данные, такие как статистика игроков, флаги историй и т. Д.
* Существует также слой Entity. Сущности действуют как мобильные соседние активированные зоны.
источник