Сенсорные события и AI

Материал из Клуб любителей рогаликов
Перейти к: навигация, поиск

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

События

Вот предпосылка. Событие может генерировать одно или более сенсорных событий (SensoryEvents). Сенсорное событие имеет уровень (от 1 до 10), воздействующий фактор (sense), местоположение и описание события. Оно также может быть связано с другими сенсорными событиями. Например, у шаровой молнии 7 уровень визуального, 7 уровень слухового и 5 уровень тактильного воздействия.

Некоторые другие примеры сенсорных событий:

  • Открывание двери - 2-4 уровень слухового, 4 уровень визуального воздействия
  • Хлопание дверью - 6 уровень слухового, 5 уровень визуального воздействия
  • Бой - 6 уровень слухового, 5 уровень визуального воздействия
  • Ходьба (4 - скрытный) уровень слухового воздействия
  • Звуковой сигнал (клаксон) - 9 уровень слухового воздействия
  • Ослепляющая вспышка - 9 уровень визуального воздействия
  • Ловушка вызова (summoning trap) - 7 уровень визуального воздействия (яркий свет и появление монстров)
  • Ловушка-самострел - 2 уровень слухового воздействия
  • Громкий крик (shrieker scream) - 8 уровень слухового воздействия
  • Рёв человекосфинкса (androsphinx roar) - 9 уровень слухового воздействия
  • Зловонное облако (stinking cloud) - 8 уровень обонятельного, 4 уровень визуального воздействия
  • Тепловая атака бурой плесени (brown mold heat attack) - 6 уровень тактильного воздействия (Вы вдруг почувствуете холод)

Слушатели

Слушатели сенсорных событий (SensoryEventListeners) извещены о событие и могут реагировать соответственно. (Детали относительно обнаружения событий можно найти ниже.) Например, объект Audio - SensoryEventListener. Он использует член soundClip сенсорного события, чтобы воспроизводить звуки, когда это уместно.

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

"Вы видите вспышку пламени" (или что-то вроде этого)

Если игрок находился в следующей комнате (или слепой), msg может быть:

"Вы слышите взрыв"

Если игрок слепой и глухой, msg может быть:

"Вы чувствуете порыв горячего воздуха напротив вашего лица." Сенсорные события могут встревожить монстров. В зависимости от их AI, монстры могут исследовать [причину] или убегать от шума, запахов и т.д.

Обнаружение событий

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

Каждый Актер (действующее лицо) (чудовище и игрок), имеет порог для каждого чувства. Если воздействующий фактор модифицирован в событие силой больше или равной порогу [восприятия], событие замечается.

Вредные эффекты

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

Предостережения

Эта система является в лучшем случае неполным представлением. Кроме проблем упомянутых выше, она не принимает во внимание диффузию запаха по реалистичному пути. Тем не менее, она, возможно, достаточно хороша. Она преодолевает многие из проблем существующих roguelike-игр, где монстры блаженно не неподозревают о действиях игрока, пока он не окажется прямо перед ними. Шаровые молнии, хлопки [хлопание дверей] и борьба должна привлечь зрителей и оппонентов. Лежащие вокруг трупы должны привлечь падальщиков. Кровь в воде должна привлекать акул. Рев дракона должен обращать кобольдов в бегство.



Автор: Peter Farabaugh.
Источник: Sensory Events.
Перевел: Дмитрий О. Бужинский [Bu], 05.08.2005.