Механизм диалога RPG / [закрытая] структура

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

20
задан 5 revs, 4 users 80% 22 September 2016 в 18:54
поделиться

4 ответа

Рискну сказать, что большинство современных игр (будь то ролевые игры, экшн games, что-либо, кроме базовых карточных / настольных игр) обычно состоит из нескольких компонентов: движка отображения, основных структур данных и, как правило, вторичного движка сценариев. Одним из примеров, который какое-то время был популярен (и, возможно, до сих пор; я даже не разговаривал с разработчиком игр несколько лет), был Lua.

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

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

5
ответ дан 29 November 2019 в 23:52
поделиться

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

ShowMessage("Hello " + hero.name + ", how can I help you?")
choices = { "Open the door for me", "Tell me about yourself", "Nevermind" }
chosen = ShowChoices(choices)
if chosen == 0
    if hero.inventory["gold key"] > 0
        ShowMessage("You have the key! I'll open the door for you!")
        isGateOpen = true
    else
        ShowMessage("I'm sorry, but you need the gold key")
    end if
else if chosen == 1
    if isGateOpen
        ShowMessage("I'm the gate keeper, and the gate is open")
    else
        ShowMessage("I'm the gate keeper and you need gold key to pass")
    end if
else
    ShowMessage("Okay, tell me if you need anything")
end if

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

Однако в некоторых играх, создание сценариев может стать утомительным, особенно если диалог более динамичный и зависит от многих условий (например, настроения и характеристик персонажа, знаний NPC, погоды, предметов и т. д.). Здесь можно сохранить дерево диалогов в каком-либо формате, который позволяет легко определение предварительных условий и результатов. Я не знаю, можно ли это сделать так, но однажды я задал вопрос о хранении игровой логики в файлах XML . Я нашел этот подход эффективным для моей игры (в которой диалог сильно зависит от многих факторов). В частности, в будущем я мог бы легко создать простой редактор диалогов, который не требует большого количества сценариев и позволит вам просто определять диалоги и ветви с помощью графического пользовательского интерфейса.

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

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

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

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

4
ответ дан 29 November 2019 в 23:52
поделиться

For example: If I approach an NPC at point x in the game, with items y and quests z, how would I work out what the NPC needs to say? Branching dialogue and responding to player input seems as trivial as having a defined script, and user input causes the script reader to jump to a particular line in the script, which has a corresponding set of response lines (much like a choose your own adventure)

However, tying in logic to work out if the player has certain items, and completed certain quests seems to really ruin this script based model.

Not at all. You simply factor the conditionals into the data.

Let's say you have your list of dialogues, numbered 1 to 400 or whatever like the Choose Your Own Adventure book examples. I assume each dialogue may consist of the text spoken by the NPC, followed by a list of responses available to the player.

So the next step is to add the conditionals in there, by simply attaching conditions to each response. The easiest way is to do this with a scripting language, so you have a short and simple piece of code that returns True if this response is available to the player and False if it is not.

eg. (XML format, but could be anything)

<dialogue id='1'>
  <text>
    Couldst thou venture forth and kill me 10 rats, perchance?
  </text>
  <response condition="True" nextDialogue='2'>
    Verily! Naught could be better than slaying thy verminous foes. Ten ratty
    carcasses shall I bring unto thee.
  </text>
  <response condition="rats_left_in_world() < 10" nextDialogue='3'>
    Nay, brother! Had thou but ten rats remaining, my sword would be thine,
    but tis not to be.
  </response>
</dialogue>

In your scripting language, you'd need a 'rats_left_in_world' function that you can call to retrieve the value in question.

What if you have no scripting language? Well, you could have the programmer code an individual condition for each situation in your dialogue - a bit tedious, not all that difficult if your dialogue is written up-front. Then just refer to a condition by name in the conversation script.

A more advanced scheme, still not requiring a scripting language, might use a tag for each condition, like so:

<response>
  <condition type='min_level' value='50'/>
  Sadly squire, my time is too valuable for the likes of thee. Get thyself a
  farm hand or stable boy to do thy bidding!
</response>

You can add as many conditions in there as you need, as long as they can be easily specified with one or two values. If all conditions are met, the response is available.

19
ответ дан 29 November 2019 в 23:52
поделиться

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

-121--2929555-

Вот несколько достоинств вы упустили

  • Обновление в реальном времени: такие функции, как intellisense, будут автоматически обновляться между ссылками на проекты при изменении API
  • Определение GoTo: если у вас есть ссылка на сборку, определение GoTo приведет вас к фактическому определению кода. Ссылка на сборку приведет к созданию подписи метаданных.
  • Найти все ссылки: обработает весь код в ссылках проекта для использования ссылки. Для ссылки на сборку вы увидите только использования в метаданных
  • Быстрый поиск (только 2010): Аналогично, чтобы найти все ссылки, просто лучше работает в P2P ссылке

В ответ на ваши недостатки

  • Да: загрузка проекта, как правило, медленнее, чем загрузка ссылки. С разумным количеством проектов, хотя эта разница во времени не является значительной и не должна влиять на вашу повседневную программу развития
  • Да: Добавление проекта к решению, как правило, медленнее, чем добавление ссылки. Разница, правда, в секундах и является единовременной стоимостью. Я считаю ошибкой рассматривать это как часть критериев.
-121--3171179-

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

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

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

Подобная система (разветвленный диалог) требует представления в инструменте, который является относительно интуитивно понятным для использования. Например, можно было бы использовать систему визуальных сценариев Unreal's Kismet.

По существу, структуры данных (скорее всего, ветвящееся дерево, поскольку его легко представить/debug/etc.) будут созданы программистом, как и узлы, которые представляют объект в сценарии. Система с ее способностью связываться с мировыми объектами (более чем вероятно, также представленными узлами в визуальном сценарии) и т.д. будет затем создана и весь котенок caboodle связаны вместе в какой-то славный бит элегантного кода.

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

Просто подумал, что я добавлю эту часть знаний и понимания.

EDIT: Замечен пример XML. Я не уверен, какие еще дизайнеры/художники/и т.д. почувствовать это; Но те, с которыми я работал над идеей прикосновения к текстовому файлу.

6
ответ дан 29 November 2019 в 23:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: