С этой статьи начинаем цикл уроков по маппингу для игр на движке Source, а конкретно в Valve Hammer Editor.
Тема сегодняшней статьи: как прикрепить пропы к NPC и добавить новые кости моделям.
Обнаружение необходимой кости у npc к которой будет крепиться prop_dynamic
1. Открываем программу Half-Life Model Viewer v2.0
2. Переходим File>Load model... выбираем нужную нам модель в папке "папка_с_игрой/hl2/models"
3. Переходим во вкладку Attachments и из списка слева выбираем необходимую кость, при выборе она будет отображаться в 3D-виде, её название это и есть имя_кости_npc, которое пригодится нам далее.
Добавление новой кости для npc (если не нашли нужной кости)
1. В той же вкладке Attachments в списке слева выбираем любую кость, а из списка справа выбираем кость которую хотим добавить (при выборе она будет отображаться в 3D-виде).
2. Меняем в строке QC String текст в первых кавычках на то как хотим чтобы называлась наша новая кость(это и будет имя_кости_npc), копируем всю строку.
Пример: $attachment "NovaiaKostb" "ValveBiped.Bip01_R_Knee" 2.72 -3.33 1.31 rotate 0 -80 -90
3. Запускаем программу StudioCompiler (Cannonfodder's Half-Life 2 Tools), жмём Configure и в строке Game Directory указываем путь к папке: "папка_с_игрой/hl2"
4. Выбираем Model Decompile, в строке Choose Model File указываем путь к модели которой необходимо добавить кость. В строке Choose Output Directory укажите путь куда будут сохранены исходники модели. Жмём Extract.
5. Переходим в папку куда сохранились исходники, находим файл формата .qc открываем его блокнотом и в самом конце вставляем ранее скопированную строку.
6. Возвращаемся в программу StudioCompiler, выбираем Compile Model и Compile Existing QC, в строке QC File указываем путь к .qc файлу (в который была вставлена новая срока). Жмём Compile.
Файл модели будет перезаписан и будет иметь новую кость.
Крепление prop_dynamic к npc
1. Добавляем на карту npc, даём ему имя, переходим во вкладку Model, ставим анимацию Idle1
2. Создаем prop_dynamic, даём ему имя, выбираем нужную модель (свойство World Model), свойство Collisions меняем на Not Solid (чтобы npc не застревал в пропе), в свойстве Parent выбираем имя нашего npc.
3. Размещаем данный проп на модели, в необходимом для нас месте.
4. Добавляем logic_relay, в Outputs создаём:
OnSpawn » имя_prop_dynamic » SetParentAttachmentMaintainOffset » имя_кости_npc » 2
Что означает, при спавне logic_relay обращается к prop_dynamic и "приваривает" его к нужной кости через 2 секунды; обязательно указать задержку в 2 секунды, иначе при смерти игрока и повторной загрузке карты могут быть проблемы с правильностью расположения prop_dynamic относительно npc; так же эти 2 секунды npc не должен двигаться.