Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Реакция AI на Game Type звука
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
aka_sektor
Как именно реагируют NPC и монстры на звуки в игре?

А именно:
Код
Item picking up
Item dropping
Item taking
Item hiding
Item using
Weapon shooting
Weapon empty clicking
Weapon bullet hit
Weapon recharging
NPC dying
NPC injuring
NPC step
NPC talking    
NPC attacking
NPC eating    
Anomaly idle
Object breaking    
Object colliding        
Object exploding
World ambient


Известно лишь, что тип undefined - AI игнорирует.

Также, читал, что ещё тип звука влияет на то как он распространяется по уровню. Так ли это? Или за это все же отвечают исключительно параметры дистанции?
1_A
насколько я понимаю подобные звуки исходят из дин. обьектов соотв. прописано для каждого дистанция звука в конфигах. с точки зрения левела есть только сануд анклюжн который мутит внешние звуки в определенных местах. ну и фон звуки которые статично играют и не влияют на NPC, вроде.
aka_sektor
Цитата(virus_ua @ 16.09.2017, 13:14) *
подобные звуки исходят

Составил тут таблицу: http://modders-wiki.ru/Как_импортировать_звук
Где в звуках ТЧ какие типы использовались.

Не нашёл чтобы где-то использовались типы:
Код
Item picking up
Item dropping
Anomaly idle

Интересно для чего они предполагались?
dPlayer
Цитата(aka_sektor @ 16.09.2017, 15:20) *
Интересно для чего они предполагались?

Можно предположить по названию)
aka_sektor
dPlayer, ну предположи, как это выглядит в игре, и технически.

Моё мнение:
Бред просто написан какой-то, первое - подбирание, а второе - выбрасывание.
Насколько я помню, при поднятии чего либо НЕ из контейнера, звука никакого нету.
Если под выбрасыванием имеется ввиду, из инвентаря, то у звука inv_drop.ogg в ТЧ/ЧН установлен тип undefined. А в ЗП все звуки инвентаря имеют тип Item using

Да и вообще, теория (т.е. предположение), эт не практика.
macron
Цитата(aka_sektor @ 16.09.2017, 13:20) *

Интересная статейка, только стоило бы назвать "как взять качественный wav-файл и с помощью говно-сдк превратить в засраную щелчками oggшку". laugh.gif Но тема интересная, правка параметров звуков в том числе помогает немного вправить мозги нпсям, чтобы хоть как-то реагировали.
aka_sektor
Цитата(macron @ 16.09.2017, 14:33) *
засраную щелчками oggшку

У меня такого не наблюдалось, да и у кого спрашивал тоже.
Расскажи подробнее. Эт в каком SDK такое?
macron
Цитата(aka_sektor @ 16.09.2017, 14:43) *
Эт в каком SDK такое?

В ТЧ точно. Преимущественно на мелких файлах. Пысы вроде под конец поняли, что всё обосрано (даже примеры вложили - см. sounds\demo_import_bug.ogg и demo_import_no_bug.ogg), но так и отправили в релиз. Даже некоторые звуки шагов с щелчками, просто мы так привыкли, что воспринимаем уже как норму.
aka_sektor
Цитата(macron @ 16.09.2017, 14:51) *
Преимущественно на мелких файлах

Хочешь сказать, что прослеживается зависимость от размера файла на выходе?
Битрейт не влияет? У demo_import_bug.ogg он 83 Кбит\с. Не топовое качество.

Цитата(macron @ 16.09.2017, 14:51) *
воспринимаем уже как норму

Может в игре их не слышно?

А то вот прослушал в одном плеере с включенным антиклиппингом, треска не слышно. А потом в другом без него, уже слышен.
RedMagic
Цитата(aka_sektor @ 16.09.2017, 14:30) *
dPlayer, ну предположи, как это выглядит в игре, и технически.

Item dropping - предмет брошен. НПС "услышал" (без визуального обнаружение, например звук раздался за стеной) что предмет выброшен и может пойти его подобрать.
Item picking up - предмет подобран. Если враг - отступить, занять оборонительную позицию (может он оружие/патроны/аптечки подобрал?), не высовываться. Если друг и предмет неизвестен (НПС его не видел) - поговорить (в сталкере НПС вообще "общаются" друг с другом помимо скриптовых сцен и рассказыванию анекдотов костру?), если друг и предмет известен и нужен НПС - поторговать.
Anomaly idle - обычный звук аномалии (не активированной). Обойти избегая приближения (повышения уровня звука).

Это мои предположения для чего это типы могли задумываться. На практике всем давно известно что все упростили насколько было можно (например обход аномалий). К тому же с технической точки зрения легче "читерить" (НПС всегда знает расположение всех объектов и действий актора) чем делать реальные вычисления. Если игрок не заметит, то смысл тратить на это время если можно сделать что-то более полезное? Кто-то говорил "тогда НПС будут просто проигрывать анимации по пути к ЧАЭС". В той же GTA V это почему-то никого не волнует biggrin.gif
aka_sektor
Цитата(STALKER2011x @ 16.09.2017, 15:11) *
предмет брошен. НПС "услышал"

Непонятно ток на что вешается звук? Объект? Скрипт интерфейса?

Цитата(STALKER2011x @ 16.09.2017, 15:11) *
Item picking up - предмет подобран.

Помнится, где-то видел демонстрацию мода, там играл звук, взяли их из Скайрима. Типа бумажный, при поднятии документов. Стеклянный если водку. Жестяной если энергетик.
Не знаю как там сделано... может дописали в секцию предметам какой-то параметр.

Цитата(STALKER2011x @ 16.09.2017, 15:11) *
звук аномалии (не активированной)

Да, эт очевидный перевод. Вот только на практике, звуки аномалий имеют тип undefined

Цитата(STALKER2011x @ 16.09.2017, 15:11) *
упростили насколько было можно (например обход аномалий)

Помнится как-то его восстанавливал Red75. Глянуть бы, как именно. Думаю, скрипты правил.

Насчет распространения звуков по уровню:
Читал такое, что кто-то прогнал через SDK звук радио с типом NPC talking, и у него на весь уровень гудел музон.
При том что дистанции указаны были не большие.

Помню тот прикол с Сидоровичем... когда стою возле Волка, а Сидор говорит будто рядом.
Я вот думаю, эт чет такое тоже было.
K.D.
Неписи реагируют на звук выстрела, звук попадания, крик ранения или смерти. Реагируют понятным образом - опасный объект заносится в дэнжер менеджер. На все остальное им плевать.
aka_sektor
Цитата(K.D. @ 16.09.2017, 15:46) *
звук выстрела, звук попадания, крик ранения или смерти

Выходит:
Код
Weapon shooting
Weapon bullet hit
NPC injuring
NPC dying

А что скажешь на это: Реакция на Item taking
(возможно ещё Item hiding)
?
K.D.
И о чем это говорит-то? Неписи слышат все звуки и все их запоминают, в т.ч. позицию объекта, который их издал. Актор издал звук - обнаружили позицию. В комбате они бы и на звук разворачиваемой шоколадки начали стрелять.
aka_sektor
Цитата(K.D. @ 16.09.2017, 15:57) *
Неписи слышат все звуки и все их запоминают

Цитата(K.D. @ 16.09.2017, 15:46) *
Неписи реагируют на... или смерти... На все остальное им плевать.

Чет не вяжется. Как же плевать, если реагируют? Пусть возможно и без специально прописанных реакций. Хотя... как возможно, зачем то же их создали. Или это билдомусор? Странно что до SDK ЗП дожил.
Смысл был в том, чтобы понять какой Game Type чему следует указывать и как это влияет на игру.

Цитата(K.D. @ 16.09.2017, 15:46) *
опасный объект заносится в дэнжер менеджер

Как это в игре выглядит? Предполагаю, что непись начинает искать врага, пока не убьет.
RedMagic
Цитата(aka_sektor @ 16.09.2017, 16:00) *
Или это билдомусор?

Скорее всего.

Я уже выше писал - к релизу много упростили или вырезали, а остальное не трогали ибо оно работало или без него что-то другое не работало, а рефакторинг делать было некогда.
aka_sektor
Цитата(STALKER2011x @ 16.09.2017, 16:34) *
Скорее всего.

И все таки, эт нужно в исходниках смотреть каждый тип отдельно.

Есть такая инфа:
Цитата
по разному реагирует. Где-то идет дэнжер реакция на определенный тип, где-то для определенных монстров своя логика имеется. Но по большей части, мне кажется, это старьё. Для типа Item picking up, например, вообще какого-либо задействования нет

Цитата
например в base_monster_feel.cpp фукции void CBaseMonster::feel_sound_new:
if (((eType & SOUND_TYPE_WEAPON_BULLET_HIT) == SOUND_TYPE_WEAPON_BULLET_HIT) && (dist < 2.f))
HitMemory.add_hit(who,eSideFront);
А SOUND_TYPE_WEAPON_BULLET_HIT это Weapon bullet hit

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

А насчет распространения звука:
Цитата
Ничего такого в коде не нашел
macron
Цитата(aka_sektor @ 16.09.2017, 15:05) *
Хочешь сказать, что прослеживается зависимость от размера файла на выходе?
Может и так. Но я еще давно исключил использование данного инструмента, как глючного и неудобного. И не вижу смысла выяснять, отчего на мелких файлах щелчки чаще, чем на больших.

Цитата(aka_sektor @ 16.09.2017, 15:05) *
Может в игре их не слышно?
Слышно.

По теме. Вот пример моих наработок из config\creatures\m_stalker.ltx
С этого надо начинать.
Цитата
[stalker_sound_perceive] ;коэффициент усиления приоритета\силы звука
weapon = 2
item = 0.5
npc = 0.6
anomaly = 0.45
world = 0.3
object = 0.4


Далее править параметры самих ogg. Примеры:

Чтобы NPC слышали за 15 метров, как ты кустами шелестишь или по земле топаешь, у соответствующих ogg ставим:
type: NPC_step, maximum ai distance 15

Чтобы NPC слышали за 30 метров, как ты ножом по дереву лупишь, ставим
type: object_colliding, maximum ai distance 30

Чтобы свободно шляющиеся NPC пугались от звука мотора автомобиля, ставим:
type: weapon_bullet_hit, maximum ai distance 20

Чтобы NPC слышали пролетающую пулю, смотрим в config\weapons\weapons.ltx звуки
whine_sounds = weapons\whine_1, weapons\whine_2 и т.д.
У них ставим: type: weapon_bullet_hit, maximum ai distance 10 или больше.
aka_sektor
Цитата(macron @ 16.09.2017, 17:18) *
исключил использование данного инструмента, как глючного и неудобного

А что же тогда удобно? Предположу, что SAVandT.
Но какой же тогда ему исходник подсунуть можно, чтобы игра читала без проблем? Понятно что Моно. Какой битрейт? Даже 512 Кбит\с ? Или какой-то определенный? Какую герцовку? 44 100 Гц или выше? Битность? 16 или выше?

Цитата(macron @ 16.09.2017, 17:18) *
коэффициент усиления приоритета\силы звука

Интересно. Эт так можно группировку более реагирующую сделать выходит. Типа Долговцев, хорошо слышущих любые шорохи живности (npc = 0.6)

Цитата(macron @ 16.09.2017, 17:18) *
слышали... как ты ножом по дереву лупишь, ставим
type: object_colliding

Разве этот тип не только для динамических объектов? Дерево это ж статика, какая у неё коллизия? Или имеются ввиду отметины, типа они считаются?

Цитата(macron @ 16.09.2017, 17:18) *
Чтобы NPC слышали... по земле топаешь
type: NPC_step

А монстры? Вроде тоже. Не нашёл у них собственных звуков топота. А может их просто нет?
macron
Цитата(aka_sektor @ 16.09.2017, 17:35) *
А что же тогда удобно? Предположу, что SAVandT.
Но какой же тогда ему исходник подсовывать? Понятно что Моно. Какой битрейт? Даже 512 Кбит\с ? Или какой-то определенный? Какую герцовку? 44 100 Гц или выше? Битность? 16 или выше?
Сторонний энкодер + SAVandT. Подсовываешь wav 44100 Гц, 16, mono, превращаешь в ogg, потом прописываешь параметры через SAVandT.

Развлекайтесь:
https://yadi.sk/d/j1Pcoo613MwUqk

ЗЫ: чтобы для игрока звук появлялся более-менее плавно, в SAVandT разницу между min Distance и Max Distance лучше делать не менее, чем в 20 раз.

Цитата(aka_sektor @ 16.09.2017, 17:35) *
Разве этот тип не только для динамических объектов? Дерево это ж статика, какая у неё коллизия? Или имеются ввиду отметины, типа они считаются?
Используемые звуковые файлы/партиклы/марки от связи разных пар материалов прописаны в gamemtl.xr.

Цитата(aka_sektor @ 16.09.2017, 17:35) *
Не нашёл для них специальных звуков топота. А может их просто нет?
Там связь то ли материала костей, то ли материала в конфиге. В итоге эффекты (звуки/пыль из-под копыт) тоже берутся из gamemtl.xr, но потом дополнительно в конфиге обрабатываются секцией step_params с учетом конкретных анимаций/временнЫх интервалов и вручную прописываемой силы эффекта. Для НПСей, кстати, такая же лабуда. Только недавно заметил, что нпси в OLR бегают бесшумно, пришлось дорабатывать таблицы в [stalker_step_manager].
RayTwitty
Цитата(macron @ 16.09.2017, 17:18) *
Но я еще давно исключил использование данного инструмента, как глючного и неудобного

Аналогично. После того, как Scavenger подсказал Gold Wave, в связке с SAVandT этот набор полностью заменил Sound Editor в СДК. Мало того, что СДК-шный частенько глючил и делал щелчки, так еще и качество звука заметно занижал. Ах да, еще дебильный конверт в wav перед использованием...
aka_sektor
Цитата(macron @ 16.09.2017, 18:03) *
Подсовываешь wav

Думаю достаточно напрямик из аудиоредактора сохранить в .ogg, а потом добавить комменты.
Никчему wav2ogg.

Цитата(macron @ 16.09.2017, 18:03) *
разницу между min Distance и Max Distance лучше делать

Вот в этом и фишка SDK, там рисунок показывает плавность затухания. Можно проверять чтобы не было обрывов.

Цитата(macron @ 16.09.2017, 18:03) *
от связи разных пар материалов

Точно-точно, совсем забыл... что в SE материалу задаются звуки под разные типы:


Цитата(macron @ 16.09.2017, 18:03) *
недавно заметил, что нпси в OLR бегают бесшумно, пришлось дорабатывать таблицы в [stalker_step_manager].

Так вот это из-за чего! Натыкался на форуме на такие вопросы.
Полезная инфа.
macron
Цитата(aka_sektor @ 16.09.2017, 20:42) *
Думаю достаточно напрямик из аудиоредактора сохранить в .ogg, а потом добавить комменты.
Никчему wav2ogg.
У меня вот Nero wave editor при сохранении в ogg автоматически любой файл превращает в стерео и хз чего еще в заголовок вписывает.

Цитата(aka_sektor @ 16.09.2017, 20:42) *
Вот в этом и фишка SDK, там рисунок показывает плавность затухания.
Когда я начинал экспериментировать с SAVandT несколько лет назад, считалось что плавность вообще не лечится, типо бага, и всё. Хотя уже не помню, может в sdk оно так выглядит, что не все тогда понимали, что это именно плавность.

Цитата(aka_sektor @ 16.09.2017, 20:42) *
Точно-точно, совсем забыл... что в SE материалу задаются звуки под разные типы:
По возможности предпочитаю править через "gamemtl.xr compiler/decompiler", который на perl. Не могу утверждать, но вроде в SDK встречал "багу", когда SE физически не найдя в sdk прописанных в gamemtl.xr аудиофайлов просто вырезал обращения к ним из gamemtl.xr при сохранении.
Trollz0r
Цитата(aka_sektor @ 16.09.2017, 13:27) *
Помнится как-то его восстанавливал Red75. Глянуть бы, как именно. Думаю, скрипты правил.
Цитата(aka_sektor @ 16.09.2017, 13:27) *
Помнится
Цитата(aka_sektor @ 16.09.2017, 13:27) *
Глянуть бы, как именно. Думаю, скрипты правил.
Олтфак в треде, все в бункир
aka_sektor
RedPython, глянул скрипты AMK, оказывается он подписывался как:
Код
Dmitri 'Red75' Roschin
abramcumner
Если именно восстанавливать вырезанный обход аномалий, то это раскоментировать строки xr_motivator.script:99, 103
Код
--    if self.object:character_community() == "zombied" then
        local manager = self.object:motivation_action_manager()
        manager:remove_evaluator    (stalker_ids.property_anomaly)
        manager:add_evaluator        (stalker_ids.property_anomaly, property_evaluator_const(false))
--    end

Убрать комментарии, чтобы обход аномалий отключался только для зомбированных, а не для всех НПЦ.

Red75 сделал свой скриптовый обход аномалий на добавлении аномалий в список рестрикторов НПЦ. На этой основе сделаны куча других обходчиков аномалий.
aka_sektor
abramcumner, это в свою очередь доказывает, что обход аномалий не зависит от Game Type звука.
Trollz0r
Цитата(aka_sektor @ 18.09.2017, 11:55) *
глянул скрипты AMK, оказывается он подписывался как:
Ты ещё не видел, как Икстрим подписывался lol.gif
Zagolski
Вообще враги на многие звуки реагируют. Шорох кустов, доставание оружия, перезарядка, в каком положении двигаешься, одет ли глушитель при стрельбе. Это в ЗП. Легко отследить по индикатору видимости.

aka_sector, говор от класса торговца произносится в голове ГГ, а не от торговца, поэтому он всегда рядом. Настройки звука тут не влияют.
aka_sektor
Цитата(Zagolski @ 19.09.2017, 13:37) *
враги на многие звуки реагируют

Вообще-то K.D. уже сказал:
Цитата(K.D. @ 16.09.2017, 15:57) *
Неписи слышат все звуки и все их запоминают, в т.ч. позицию объекта, который их издал. Актор издал звук - обнаружили позицию. В комбате они бы и на звук разворачиваемой шоколадки начали стрелять.

Тут вопрос скорее в том, какая специфическая реакция присвоена тому или иному звуку. Зачем столько разных Game Type? Наверняка же каждый не просто так был добавлен.

Цитата(Zagolski @ 19.09.2017, 13:37) *
произносится в голове ГГ

Да... пожалуй эт в логике Сидора было задано так.

P.S.
Цитата(RedPython @ 19.09.2017, 13:00) *
как Икстрим подписывался

Код
--[[
copyright © xStream & Red75

MMMMMMM    MMMMM    MMMMMM  MMMMMMMMMMMMM  MMMMMMMMMMM     MMMMMMMMMMM    MMMMMM    MMMMMMM     MMMMMM
MMMMMMM MMMMMM  MMMMMMMMMM MMMMMMMMMMMMMM MMMMMMMMMMMMMM  MMMMMMMMMMM   MMMMMMMM   MMMMMMMM   MMMMMMM
  MMMMMMMMMMMM  MMMMMMMMMMMM MMMMMMMMMMMMM  MMMMMMMMMMMMMM MMMMMMMMMMM   MMMMMMMM    MMMMMMMM MMMMMMMM
   MMMMMMMMM     MMMMMMMM MMM   MMMMMMM     MMMMMMMMMMMMMM MMMMMMM      MMMMMMMMMM   MMMMMMMMMMMMMMMMM
    MMMMMMM       MMMMMMM       MMMMMM      MMMMMMM  MMMMM MMMMMMM      MMMMMMMMMM   MMMMMMMMMMMMMMMMM
    MMMMMMMM       MMMMMMM      MMMMMM      MMMMMMM MMMM   MMMMMMMMMM  MMMM MMMMMMM  MMMMMMMMMMMMMMMMM
   MMMMMMMMMM        MMMMM      MMMMMM      MMMMMMMMMMM    MMMMMMM     MMMM  MMMMMM  MMMMMMMMMMMMMMMMM
  MMMMM  MMMMM    MMMMMMMM      MMMMMM      MMMMMMMMMMMMMM MMMMMMMMMMM MMMMMMMMMMMMM MMMMM MMMMM MMMMM
MMMMM   MMMMMM    MMMMMM       MMMMMM      MMMMMMM MMMMM  MMMMMMMMMM MMMMMMM MMMMMM MMMM   MM   MMMM
]]

Да, прикольно biggrin.gif
Zagolski
А какие там специфические задачи? Услышал шорох - поднял шухер, побежал смотреть. Не нашел никого, побегал и успокоился, увидел - начал стрелять. На звук выстрелов и все ближайшие мутанты могут сбежаться. И кстати, освещенность тоже влияет. В полной темноте я под носом у врага без проблем проползал.
Вообще многие думают, что звуки ни на что не влияют, хотя это не так. Конечно, их нужно правильно настроить в СДК. Иной раз видишь в модах, что звуки вообще через какой-то сторонний конвертер прогнаны без всяких настроек, вот на них мобы никакого внимания и не обращают...

А я тут столкнулся со стерео звуками выстрелов. Так-то работают нормально, но если стреляет непись, даже далеко, то звук как бы в голове ГГ разносится. Так что проблемы с ними, однако... Хотя вообще, если судить по ванильным звукам ЗП, то стерео для выстрелов разрабы нигде не применяли. Судя по всему, не подходят они для этого. Хотя выстрел на порядок с ними эффектнее. Не знаю, удастся ли это поправить в звуковом модуле, пока что в голову пришло, это вешать на ствол два звука: стерео только для игрока, для НПС - моно.

Цитата(aka_sektor @ 19.09.2017, 13:50) *
Да... пожалуй эт в логике Сидора было задано так.
Нет, это в движке у торговца.
aka_sektor
Посмотрел исходники, насчет:
Цитата(K.D. @ 16.09.2017, 15:46) *
реагируют на звук выстрела, звук попадания, крик ранения или смерти. Реагируют понятным образом - опасный объект заносится в дэнжер менеджер.

И действительно:
danger_manager.cpp

Код
void CDangerManager::add            (const CSoundObject &object)
{
    if (!object.m_enabled)
        return;
    
    const CEntityAlive        *obj = smart_cast<const CEntityAlive*>(object.m_object);
    
    if ((object.m_sound_type & SOUND_TYPE_BULLET_HIT) == SOUND_TYPE_BULLET_HIT) {
        add                    (CDangerObject(obj,object.m_object_params.m_position,object.m_level_time,CDangerObject::eDangerTypeBulletRicochet,CDangerObject::eDangerPerceiveTypeSound));
        return;
    }

    if ((object.m_sound_type & SOUND_TYPE_WEAPON_SHOOTING) == SOUND_TYPE_WEAPON_SHOOTING) {
        add                    (CDangerObject(obj,object.m_object_params.m_position,object.m_level_time,CDangerObject::eDangerTypeAttackSound,CDangerObject::eDangerPerceiveTypeSound));
        return;
    }

    if ((object.m_sound_type & SOUND_TYPE_INJURING) == SOUND_TYPE_INJURING) {
        bool                do_add = true;
        if (object.m_object) {
            const CActor    *actor = smart_cast<const CActor*>(object.m_object);
            if (actor && !m_object->is_relation_enemy(actor))
                do_add        = false;
        }
        if (do_add)
            add                (CDangerObject(obj,object.m_object_params.m_position,object.m_level_time,CDangerObject::eDangerTypeEntityAttacked,CDangerObject::eDangerPerceiveTypeSound));
        return;
    }

    if ((object.m_sound_type & SOUND_TYPE_DYING) == SOUND_TYPE_DYING) {
        add                    (CDangerObject(obj,object.m_object_params.m_position,object.m_level_time,CDangerObject::eDangerTypeEntityDeath,CDangerObject::eDangerPerceiveTypeSound));
        return;
    }

    if (obj && m_object->is_relation_enemy(obj)) {
        add                    (CDangerObject(obj,object.m_object_params.m_position,object.m_level_time,CDangerObject::eDangerTypeEnemySound,CDangerObject::eDangerPerceiveTypeSound));
        return;
    }
}



UPD:
Параметры в исходниках

Код
xr_token anomaly_type_token[]={
    { "undefined",                sg_Undefined                        },
    { "Item picking up",        SOUND_TYPE_ITEM_PICKING_UP            },
    { "Item dropping",            SOUND_TYPE_ITEM_DROPPING            },
    { "Item taking",            SOUND_TYPE_ITEM_TAKING                },
    { "Item hiding",            SOUND_TYPE_ITEM_HIDING                },
    { "Item using",                SOUND_TYPE_ITEM_USING                },
    { "Weapon shooting",        SOUND_TYPE_WEAPON_SHOOTING            },
    { "Weapon empty clicking",    SOUND_TYPE_WEAPON_EMPTY_CLICKING    },
    { "Weapon bullet hit",        SOUND_TYPE_WEAPON_BULLET_HIT        },
    { "Weapon recharging",        SOUND_TYPE_WEAPON_RECHARGING        },
    { "NPC dying",                SOUND_TYPE_MONSTER_DYING            },
    { "NPC injuring",            SOUND_TYPE_MONSTER_INJURING            },
    { "NPC step",                SOUND_TYPE_MONSTER_STEP                },
    { "NPC talking",            SOUND_TYPE_MONSTER_TALKING            },
    { "NPC attacking",            SOUND_TYPE_MONSTER_ATTACKING        },
    { "NPC eating",                SOUND_TYPE_MONSTER_EATING            },
    { "Anomaly idle",            SOUND_TYPE_ANOMALY_IDLE                },
    { "Object breaking",        SOUND_TYPE_WORLD_OBJECT_BREAKING    },
    { "Object colliding",        SOUND_TYPE_WORLD_OBJECT_COLLIDING    },
    { "Object exploding",        SOUND_TYPE_WORLD_OBJECT_EXPLODING    },
    { "World ambient",            SOUND_TYPE_WORLD_AMBIENT            },
    { 0,                        0}
};

Параметры в параметрах

Код
enum ESoundTypes {
    SOUND_TYPE_NO_SOUND                    = 0x00000000ui32,

    SOUND_TYPE_WEAPON                    = 0x80000000ui32,
    SOUND_TYPE_ITEM                        = 0x40000000ui32,
    SOUND_TYPE_MONSTER                    = 0x20000000ui32,
    SOUND_TYPE_ANOMALY                    = 0x10000000ui32,
    SOUND_TYPE_WORLD                    = 0x08000000ui32,

    SOUND_TYPE_PICKING_UP                = 0x04000000ui32,
    SOUND_TYPE_DROPPING                    = 0x02000000ui32,
    SOUND_TYPE_HIDING                    = 0x01000000ui32,
    SOUND_TYPE_TAKING                    = 0x00800000ui32,
    SOUND_TYPE_USING                    = 0x00400000ui32,

    SOUND_TYPE_SHOOTING                    = 0x00200000ui32,
    SOUND_TYPE_EMPTY_CLICKING            = 0x00100000ui32,
    SOUND_TYPE_BULLET_HIT                = 0x00080000ui32,
    SOUND_TYPE_RECHARGING                = 0x00040000ui32,

    SOUND_TYPE_DYING                    = 0x00020000ui32,
    SOUND_TYPE_INJURING                    = 0x00010000ui32,
    SOUND_TYPE_STEP                        = 0x00008000ui32,
    SOUND_TYPE_TALKING                    = 0x00004000ui32,
    SOUND_TYPE_ATTACKING                = 0x00002000ui32,
    SOUND_TYPE_EATING                    = 0x00001000ui32,

    SOUND_TYPE_IDLE                        = 0x00000800ui32,

    SOUND_TYPE_OBJECT_BREAKING            = 0x00000400ui32,
    SOUND_TYPE_OBJECT_COLLIDING            = 0x00000200ui32,
    SOUND_TYPE_OBJECT_EXPLODING            = 0x00000100ui32,
    SOUND_TYPE_AMBIENT                    = 0x00000080ui32,
    
    SOUND_TYPE_ITEM_PICKING_UP            = SOUND_TYPE_ITEM | SOUND_TYPE_PICKING_UP,
    SOUND_TYPE_ITEM_DROPPING            = SOUND_TYPE_ITEM | SOUND_TYPE_DROPPING,
    SOUND_TYPE_ITEM_HIDING                = SOUND_TYPE_ITEM | SOUND_TYPE_HIDING,
    SOUND_TYPE_ITEM_TAKING                = SOUND_TYPE_ITEM | SOUND_TYPE_TAKING,
    SOUND_TYPE_ITEM_USING                = SOUND_TYPE_ITEM | SOUND_TYPE_USING,

    SOUND_TYPE_WEAPON_SHOOTING            = SOUND_TYPE_WEAPON | SOUND_TYPE_SHOOTING,
    SOUND_TYPE_WEAPON_EMPTY_CLICKING    = SOUND_TYPE_WEAPON | SOUND_TYPE_EMPTY_CLICKING,
    SOUND_TYPE_WEAPON_BULLET_HIT        = SOUND_TYPE_WEAPON | SOUND_TYPE_BULLET_HIT,
    SOUND_TYPE_WEAPON_RECHARGING        = SOUND_TYPE_WEAPON | SOUND_TYPE_RECHARGING,

    SOUND_TYPE_MONSTER_DYING            = SOUND_TYPE_MONSTER | SOUND_TYPE_DYING,
    SOUND_TYPE_MONSTER_INJURING            = SOUND_TYPE_MONSTER | SOUND_TYPE_INJURING,
    SOUND_TYPE_MONSTER_STEP                = SOUND_TYPE_MONSTER | SOUND_TYPE_STEP,
    SOUND_TYPE_MONSTER_TALKING            = SOUND_TYPE_MONSTER | SOUND_TYPE_TALKING,
    SOUND_TYPE_MONSTER_ATTACKING        = SOUND_TYPE_MONSTER | SOUND_TYPE_ATTACKING,
    SOUND_TYPE_MONSTER_EATING            = SOUND_TYPE_MONSTER | SOUND_TYPE_EATING,
    
    SOUND_TYPE_ANOMALY_IDLE                = SOUND_TYPE_ANOMALY | SOUND_TYPE_IDLE,

    SOUND_TYPE_WORLD_OBJECT_BREAKING    = SOUND_TYPE_WORLD | SOUND_TYPE_OBJECT_BREAKING,
    SOUND_TYPE_WORLD_OBJECT_COLLIDING    = SOUND_TYPE_WORLD | SOUND_TYPE_OBJECT_COLLIDING,
    SOUND_TYPE_WORLD_OBJECT_EXPLODING    = SOUND_TYPE_WORLD | SOUND_TYPE_OBJECT_EXPLODING,
    SOUND_TYPE_WORLD_AMBIENT            = SOUND_TYPE_WORLD | SOUND_TYPE_AMBIENT,

    SOUND_TYPE_WEAPON_PISTOL            = SOUND_TYPE_WEAPON,
    SOUND_TYPE_WEAPON_GUN                = SOUND_TYPE_WEAPON,
    SOUND_TYPE_WEAPON_SUBMACHINEGUN        = SOUND_TYPE_WEAPON,
    SOUND_TYPE_WEAPON_MACHINEGUN        = SOUND_TYPE_WEAPON,
    SOUND_TYPE_WEAPON_SNIPERRIFLE        = SOUND_TYPE_WEAPON,
    SOUND_TYPE_WEAPON_GRENADELAUNCHER    = SOUND_TYPE_WEAPON,
    SOUND_TYPE_WEAPON_ROCKETLAUNCHER    = SOUND_TYPE_WEAPON,
};

Только доступные параметры (отсеяные из предыдущего спойлера)

Код
    SOUND_TYPE_ITEM_PICKING_UP            = SOUND_TYPE_ITEM | SOUND_TYPE_PICKING_UP,
    SOUND_TYPE_ITEM_DROPPING            = SOUND_TYPE_ITEM | SOUND_TYPE_DROPPING,
    SOUND_TYPE_ITEM_TAKING                = SOUND_TYPE_ITEM | SOUND_TYPE_TAKING,
    SOUND_TYPE_ITEM_HIDING                = SOUND_TYPE_ITEM | SOUND_TYPE_HIDING,
    SOUND_TYPE_ITEM_USING                = SOUND_TYPE_ITEM | SOUND_TYPE_USING,
    SOUND_TYPE_WEAPON_SHOOTING            = SOUND_TYPE_WEAPON | SOUND_TYPE_SHOOTING,
    SOUND_TYPE_WEAPON_EMPTY_CLICKING    = SOUND_TYPE_WEAPON | SOUND_TYPE_EMPTY_CLICKING,
    SOUND_TYPE_WEAPON_BULLET_HIT        = SOUND_TYPE_WEAPON | SOUND_TYPE_BULLET_HIT,
    SOUND_TYPE_WEAPON_RECHARGING        = SOUND_TYPE_WEAPON | SOUND_TYPE_RECHARGING,
    SOUND_TYPE_MONSTER_DYING            = SOUND_TYPE_MONSTER | SOUND_TYPE_DYING,
    SOUND_TYPE_MONSTER_INJURING            = SOUND_TYPE_MONSTER | SOUND_TYPE_INJURING,
    SOUND_TYPE_MONSTER_STEP                = SOUND_TYPE_MONSTER | SOUND_TYPE_STEP,
    SOUND_TYPE_MONSTER_TALKING            = SOUND_TYPE_MONSTER | SOUND_TYPE_TALKING,
    SOUND_TYPE_MONSTER_ATTACKING        = SOUND_TYPE_MONSTER | SOUND_TYPE_ATTACKING,
    SOUND_TYPE_MONSTER_EATING            = SOUND_TYPE_MONSTER | SOUND_TYPE_EATING,
    SOUND_TYPE_ANOMALY_IDLE                = SOUND_TYPE_ANOMALY | SOUND_TYPE_IDLE,
    SOUND_TYPE_WORLD_OBJECT_BREAKING    = SOUND_TYPE_WORLD | SOUND_TYPE_OBJECT_BREAKING,
    SOUND_TYPE_WORLD_OBJECT_COLLIDING    = SOUND_TYPE_WORLD | SOUND_TYPE_OBJECT_COLLIDING,
    SOUND_TYPE_WORLD_OBJECT_EXPLODING    = SOUND_TYPE_WORLD | SOUND_TYPE_OBJECT_EXPLODING,
    SOUND_TYPE_WORLD_AMBIENT            = SOUND_TYPE_WORLD | SOUND_TYPE_AMBIENT,

aka_sektor
По типам звуков:
В общем даже на знаю, то ли они очень старые, судя по отметке в исходнике ai_sounds.h
Код
//    Created     : 15.08.2002
//  Modified     : 15.08.2002

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

Похоже различия типов звуков пока останутся "загадкой зоны". tongue.gif

Ничего не остаётся как принять версию:
Цитата(K.D. @ 16.09.2017, 15:57) *
слышат все звуки и все их запоминают, в т.ч. позицию объекта, который их издал.
Получается влияет на стелс? Каково именно отличие от тех 4 типов, которые "заносят в денжер менеджер"?

Цитата(Zagolski @ 19.09.2017, 14:09) *
Услышал шорох - поднял шухер, побежал смотреть.
"Шухер"? Что это за схема?

Как мне объяснили, "заносят в денжер менеджер" это:
- схема поведения, при которой NPC ждет появления опасного объекта или звука или трупа
- в ней указано время действия для каждого типа опасности, как оно выйдет так NPC и перестает её учитывать
Например: если NPC услышал выстрел - он насторожился, услышал ещё раз - проверил враг или нет, если враг - пошел в бой
- оценивается расстояние и игнорируемые опасности, заданные в логике

В общем, попросту говоря - проверяет на опасность. "Шухер" эт его часть.

Я думаю, с остальными типами звуков, именно что "NPC слышит и запоминает позицию объекта, который издал звук".
Фишка в том, что слышимость после превышения максимума шума именно что "заносит звук в денжер менеджер".
Отличие от тех 4 типов в том, что в их случае это происходит сразу же, вне зависимости от их громкости (кроме случаев когда Max AI Dist превышен, т.е. например, игрок слишком далеко, чтобы NPC услышал его выстрел)
Т.е. например, если тип звука undefined - он никак не будет влиять на уровень шума.

Опять же вопрос, к чему было разбивать на столько типов? Может быть, во времена разработки, задумывалось сделать уникальные реакции на каждый тип. Дмитрий Ясенев его знает...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.