Как сделать игру на сурсе
Source Modding — Часть 1 — Основы основ
В мире существует множество игровых движков, но нет ни одного движка, похожего на Source своей историей и особенностями.
В этом (пилотном) уроке мы разберем простейшие действия с исходными кодами SDK, а также внесем наше первое изменение в код Half-Life 2.
Вступление
Немножко терминов
Сам по себе Source SDK — набор утилит и программ, помогающих в разработке собственных уровней и модификаций для игры, а также исходные коды Half-Life 2 и эпизодов.
Игра/Мод (Для сурса нет никакой разницы, игра это или мод :p) — скомпилированные исходные коды SDK.
Так почему же именно Source?!
Что нам необходимо?
Введение в сурс дела
Репозиторий
Исходный код SDK находится в репозитории на GitHub. Склонируйте его в любое удобное для вас место:
Выбор ветки
Если вы хотите написать свой первый мод для Half-Life 2/Episode 1/2, то используйте директорию sp/ и Source SDK Base 2013 Singleplayer.
Стиль кода
Поля класса именуются с префиксом m_, использование венгерской нотации рекомендуется (на то есть свои причины, которые здесь обсуждать нет смысла):
Структура кода
SDK, так же как и движок, разделён на несколько частей.
Вот пути до некоторых таких файлов:
ВАЖНО: При внесении ЛЮБЫХ изменений в VPC файл решение должно быть заново перегенерировано!
Генерация проектов
Исключение HL2
SDK имеет внутри себя также разделение на HL2 и Episodic. Использование второго позволит нам иметь некоторые фичи, например отдельную от стамины шкалу заряда фонарика.
И поэтому, чтобы не компилировать лишний код, мы можем просто исключить HL2 из скриптов:
Другие скрипты
Рядом с creategameprojects.bat также лежит его клон для bash а также два интересных файла — createallprojects.bat и его клон для bash.
Эти два скрипта заставляют VPC создавать проекты не только для чистых библиотек мода, но и для различных утилит, таких как vrad (Radiosity!) или height2normal.
Сейчас использовать я его вам настоятельно не рекомендую, так как свои собственные компиляторы карт нам пока не нужны.
Первичная сборка и запуск
Сборка
Чтобы удостовериться, что вы всё сделали правильно, необходимо собрать всё сгенерированное решение. Итак, собираем (вы же ведь открыли решение в IDE?):
После сборки в папке game/mod_hl2/bin/ или game/mod_episodic/bin/ должны появится наши клиентская и серверная библиотеки!
Запуск — Способ 1 — Steam
Запуск — Способ 2 — Visual Studio
Я рекомендую использовать именно этот способ — не копировать же бинарники мода каждый раз после сборки!
Если карта загрузилась и вы можете передвигаться и двигать камеру мышью — сборка успешна!
Первая модификация в коде
Функции семейства Msg()
Заключение
Чему мы научились?
[Я надеюсь, что] из данного урока мы выяснили:
Что дальше?
Во второй части мы разберем систему сущностей Source SDK.
Играем в Source SDK, руководство по маппингу для начинающих
Да, именно играем, а не модим или разрабатываем, смотрим на скриншот ниже. В нашей первой статье мы расскажем, как сделать первые шаги в создании собственных карт с помощью Source SDK.
Создавать игровые уровни сложно, но интересно, и вы не только сами сможете порадоваться (хотя иногда можно и огорчиться) результатам своих трудов, но и возможно их оценят тысячи других игроков по всему свету.
Этот урок будет сфокусирован на создании однопользовательских карт для Half-Life 2, но полученные навыки пригодятся вам и в работе над любыми другими играми, от Garry’s Mod до Portal 2. В руководстве будут затронуты некоторые моменты работы с Source SDK, изменившиеся после ввода системы SteamPipe.
Приступаем
Для первого эксперимента с дизайном уровней давайте сразу отправимся в редактор. Инструменты Source SDK больше не запускаются через Steam. Вместо этого нужно зайти в папку Steam\SteamApps\common и найти игру, для которой вы хотите сделать карту. В нашем случае это папка half-life 2, далее заходим в папку bin. Среди прочего вы найдёте здесь программы, являющиеся частью SDK. Если запускать через стим, то SDK может не очень правильно все переварить и постоянно выдавать ошибки. Там все дело в правильных путях к подгружаемым файлам, опустим этот момент, все прекрасно работает при запуске hammer в папке игры.
Запускаем hammer.exe (на будущее добавьте ярлык на рабочий стол). Вы уже могли слышать про Hammer – это редактор движка Source, в котором и создаются все карты. Здесь вы проведёте большую часть времени, работая над картой или модом. С первого взгляда такого не скажешь, но Hammer – очень мощная утилита.
Создаём новую карту выбором пункта меню File>New. Экран разделится на четыре части. В левой верхней части расположен 3D-вид, где можно перемещаться по карте, словно в режиме noclip. Остальные части – это 2D-виды, где правая верхняя показывает карту сверху, а нижние с боковых сторон.
Инструменты
Для начала немного занудства, а немного ниже начнем уже разбирать примеры. В правой части окна редактора вы можете заметить набор значков. Это инструменты, с которых вы и будете начинать работу.
Selection Tool
Этот инструмент используется преимущественно для выделения блоков, которые нужно переместить или изменить их форму. Блок можно выделить, нажав на его грань или на перекрестье в центре, также можно обвести его рамкой. Выделенный блок помечается красным цветом. Чтобы снять выделение, просто кликните на свободном пространстве.
Magnify
Это не особо важный инструмент. Он используется для масштабирования 2D-видов. Для этого удобнее пользоваться колёсиком мыши. Если по какой-то причине на вашей мыши нет колёсика, то он вам пригодится.
Camera
Тоже далеко не самый важный инструмент. Он помещает на один из 2D-видов синий круг, олицетворяющий камеру. При перемещении камеры на 3D-виде, синие круги на плоских видах тоже будут двигаться, чтобы вы понимали, где находитесь.
Entity Creation Tool
Этот инструмент помещает на карту объект (entity). Мы подробно рассмотрим его работу в дальнейших уроках, сейчас просто знайте, что с его помощью создаются, к примеру, стулья и столы.
Block Creation Tool
Этот инструмент вам придётся использовать очень часто. Пожалуй, в Hammer он самый важный. Он создаёт блоки – то, что у вас будет стенами, полом, потолком и т.д. Перетащите инструмент на 2D-вид, там он отобразится белым пунктирным контуром. Выбрав нужную позицию для блока, жмите Enter для его создания.
Texture Application Mode
Этот инструмент нужен для наложения нескольких текстур на один блок. Выбор инструмента откроет вот такое меню:
В следующих уроках я подробнее разберу этот инструмент, так что не пугайтесь обилию кнопок, там всё не так уж сложно.
Apply Current Texture to Selection
Не совсем понимаю, для чего здесь этот инструмент. Вообще никогда им не пользовался. Он накладывает текущую текстуру на всё, что у вас выделено.
Decal Appliance Tool/Overlay Appliance Tool
Оба инструмента накладывают на ваши блоки 2D-изображения – кровь, грязь, граффити и т.д. Разница в том, что используя второй, вы сможете изменять их размер, но для обработки потребуется больше памяти.
Clipping Tool
Этот инструмент используется для отсечения части блока. На картинке ниже показан блок и голубая линия с белыми квадратами на концах.
Линия – это инструмент отсечения. Для её создания просто перенесите инструмент на желаемый 2D-вид. Белая часть блока – та, что сохранится. Когда вас устраивает результат, нажимайте Enter.
Vertex Manipulation Tool
Этот инструмент нужен для создания сложных форм путём манипулирования вершинами блоков. Выделите блок, затем выберите этот инструмент. Должно выглядеть примерно вот так:
Жёлтые квадраты трогать не советую, для начала будет достаточно белых. Поэкспериментируйте с перемещением квадратов. В дальнейших уроках я подробнее расскажу об этом инструменте. Для завершения нажмите на инструмент выделения. Попробуйте реалистично исказить форму. Затем превратите блок во что-нибудь сумасшедшее, что вызовет ошибку.
Блок, не приводящий к ошибке:
Блок, приводящий к ошибке:
Базовые конструкции
Выбираем инструмент Block Tool в левой панели. Для создания блока жмём и растягиваем конструкцию на виде сверху. Заметьте, что его границы привязываются к сетке, это позволяет избежать нежелательных зазоров между разными блоками. Создаём блок 512×512 единиц. Вы увидите, как он появится на двух нижних видах.
Сделать сетку помельче можно, нажав на значок Smaller Grid в верхней панели. Уменьшите высоту блока с помощью боковых видов (16 единиц будет достаточно) и нажмите Enter. Чтобы посмотреть на своё творение в 3D-виде, наведите на него курсор и нажмите Z – так вы сможете передвигаться клавишами WASD, а мышью поворачивать камеру. Вы должны увидеть блок со стандартной текстурой (при этом нужно переключиться в вид с текстурами, нажав на 3D Textured в меню View), как показано в правой части экрана.
Попробуйте проделать то же самое для создания стен своей комнаты. Обычная стена имеет высоту 128 единиц и толщину 8-16 единиц. (Размер большинства текстур 128×128, и таким образом мы убедимся в их правильном наложении. Кроме того, для движка предпочтительнее размеры блоков в виде степени с основанием 2, но это не жёсткое правило). После этого создайте потолок, перетащив пол вверх с зажатой клавишей Shift на одном из боковых видов.
На этом этапе я должен указать на первое правило Hammer: сохраняйтесь чаще! Программа славится вылетами в самый неподходящий момент, и даже лучшие из нас тратили впустую по нескольку часов работы. Ctrl+S – это бесценная комбинация клавиш. Для больших карт даже рекомендуется сохранять несколько резервных копий на случай потери или повреждения данных.
Текстуры
Оглядите получившуюся комнату 3D-камерой. Вы заметите, что все блоки выглядят одинаково, как кирпичная стена. Это далековато от идеала, так что взглянем на меню текстур в правой части.
В правой части редактора вы должны видеть вот такое меню:
Нажмите Browse для открытия списка всех текстур из игры. Вы сможете выбрать практически любую, но при создании раннего прототипа люди обычно останавливаются на «мерных» текстурах, предоставленных Valve и позволяющих оценить масштаб карты и убедиться в должном положении текстур. Наберите «measure» в поле Filter и двойным кликом выберите dev_measurewall1101c (это текстура с очертанием персонажа игрока).
Теперь вы видите эту оранжевую текстуру в правой части экрана. Чтобы наложить её на свои стены, поочерёдно выделите их, удерживая Сtrl, затем нажмите Apply Current Texture в левой панели.
Если хотите наложить текстуру только на одну поверхность блока, нажмите Toggle Texture Application, открыв небольшое окно. Теперь выберите пол комнаты в 3D-виде и, нажав Browse, выбирайте другую текстуру. В 3D-виде показывается, как изменилась только одна из сторон блока. Это окно также пригодится для выравнивания и поворота текстур.
Каждая из текстур соответствует определённому материалу из игры, так что металлическая текстура будет издавать звенящий звук при ходьбе или выстрелах по ней.
Переберите несколько вариантов текстур, познакомьтесь с настройками окна и давайте двигаться дальше.
Объекты
Статичные стены – это хорошо, но если вы хотите хоть какой-то интерактивности, вам понадобятся объекты. Объекты бывают двух типов: блоковые (создаются из уже знакомых вам блоков) и точечные (point entities). Давайте остановимся на вторых.
Нажмите на значок под названием Entity Tool. В правой части экрана найдите два выпадающих списка. Второй из них включает в себя множество объектов, которые вы можете поместить на карту. В этом списке вы, помимо всего прочего, найдёте врагов (npc_zombie), предметы (weapon_rpg) и спецэффекты (env_spark). Не поддавайтесь искушению пробовать каждый из них и найдите info_player_start. Этот объект определяет точку появления игрока на карте. Перейдите на 3D-вид и расположите где-нибудь зелёного Фримена (этот объект тоже помогает оценить масштабы карты). Как и блоки, объекты можно двигать по карте на 2D-видах (а вот размеры изменять нельзя). Чтобы поворачивать уже выделенный объект, нажмите на него ещё раз.
Если хотите разнообразить и расширить карту, добавьте ещё несколько комнат и коридоров.
Начнём с простого: разместим на карте объект prop_static. Он появится в виде маленького куба и мы должны назначить ему модель. Откройте свойства объекта двойным кликом на 3D-виде или выбрав Properties на 2D-виде. В этом меню меняются различные опции всех объектов, включая входные и выходные данные, контролирующие их функции и необходимые для скриптовых событий.
Пока что выберите World Model и нажмите Browse: здесь вы увидите все модели, существующие в игре. Как и в случае с текстурами, список можно фильтровать по названию. Например, фильтр «foliage» покажет деревья и различные растения для обустройства уровня за пределами помещения. Попробуйте подобрать другие ключевые слова для поиска нужных вам моделей. Вкладка Info покажет поддерживаемый тип модели (static, physics или dynamic). Когда найдёте, что вам нужно, расположите объект на карте с помощью 2D-видов.
Таким же образом добавьте несколько моделей prop_physics – к примеру, бочек, которые можно расшвыривать гравипушкой (в Hammer она называется weapon_physcannon). Следите, чтобы добавленные модели нигде не пересекались с блоками.
Компиляция
Прежде, чем компилировать уровень, его нужно проверить на наличие «утечек», то есть мест, где можно попасть в пустоту за пределами карты через какой-либо из объектов. Есть несколько способов обнаружить утечки, но на маленьких картах они должны быть сразу заметны. Утечки не помешают запуску карты (как это происходит при создании карт для, например Quake3), но могут привести к нежелательным последствиям.
Создание своей RPG на движке Source
Если вы хотите научиться разрабатывать игры, моддинг существующих игр — отличное начало для изучения дизайна и создания прототипов без необходимости изобретать велосипед. В этой статье мы будем использовать Source Engine от Valve (на этом движке созданы Portal, Left 4 Dead, Half-Life и Team Fortress 2) для создания RPG-подобных квестов в Half-Life 2: Episode 2.
Обратите внимание, что эта статья подразумевает, что у вас есть базовые знания по Source SDK Hammer Editor и Face Poser, так что это проект не для начинающих, а скорее для программистов среднего уровня.
Если у вас нет этих навыков, вы может изучить другие руководства по разработке игр на нашем сайте: например, созданию игр с использованием Unity или социальных игр.
Для освоения этого материала вы должны знать, как создавать и компилировать карты, размещать сущности и настраивать триггеры, прежде чем повторять действия, описанные здесь. Если вы захотите добавить свои диалоги, вам нужно знать ещё и как создавать и сохранять сцены в Face Poser. Ничего страшного, если вы никогда не работали с Source SDK раньше — в интернете полно статей, описывающих, как им пользоваться. Начните с Valve Developer Wiki, которая содержит множество полезных статей по теме, затем сходите на design3 (кстати, я один из участников проекта) за пошаговыми видеоинструкциями по Source Engine. Минимальные системные требования для использования инструментов, описанных выше, такие же, как для запуска Half Life 2: Episode 2: процессор на 1.7 ГГц, 512 Мб RAM, DirectX 8.1 и Windows не ниже XP. Ещё вам понадобится микрофон.
Подготовка
Прежде чем мы начнём, убедитесь, что у вас есть всё необходимое. Во-первых, вам нужна установленная копия Half-Life 2: Episode 2. Мы будем использовать эту игру, потому что это самая новая одиночная игра на движке Source, к которой можно написать мод. Если у вас нет второго эпизода, скачайте его с то простой Half-Life 2 тоже должен подойти.
Если вы хотите добавить свой диалог в эту RPG, вам понадобится приложение для обработки аудио. Мы будем использовать Audacity — оно свободное, имеет открытый исходный код и отлично подходит для наших задач.
Нам также понадобится патч Phoneme Extractor, который поможет Face Poser лучше работать с Windows 7/Vista. Скачайте его и следуйте инструкциям по установке. Без него не будет работать соединение текста диалога со звуковой подложкой.
Дальше ставьте GCFScape. Он даст нам возможность открывать файлы кеша от игр Steam, так что мы сможем достать оттуда необходимые нам файлы. С его помощью мы будем вынимать аудио для нашего мода.
Если вы ещё этого не сделали, установите Source SDK. Для этого откройте Steam и переключитесь на вкладку «Инструменты». Вам понадобится своя карта, с которой мы будем работать (я буду называть её «основная карта»). Это может быть что угодно: от нескольких простых комнат до обширного ландшафта. Иллюстрация 1 — скриншот уровня, который я использовал для этой статьи, вы можете скачать его здесь.
Иллюстрация 1 — наш уровень в Hammer Editor
Сейчас наш уровень — просто грубый прототип, который полностью не текстурирован и не детализирован. Лучше всего именно с этого и начинать, а деталями заниматься уже в самом конце. Итак, давайте уже начинать делать нашу RPG. Не забывайте вовремя сохраняться! Некоторые нововведения в Hammer’е не полностью поддерживаются в Episode 2 и могут вызвать аварийное завершение редактора.
Создаём структуру квеста
В этой статье мы сосредоточимся на получении и выполнении заданий, построение системы развития персонажа с очками опыта — тема для отдельной статьи. На нашем уровне будут три неигровых персонажа (NPC), каждый будет давать нам по два задания. Мы можем их использовать также для предоставления игроку информации, атак на него или просто для того, чтоб добавить немного жизни уровню.
Для того, чтобы уровни были организованы, давайте использовать следующую конфенцию имён:
Иллюстрация 2 — конвенция имён, которую мы будем использовать
Это поможет нам гораздо проще находить наши сущности, особенно во время работы над заданиями. Например, добавление префикса Level к сущностям, которые затрагивают только определённый уровень, автоматически разместит их в одном месте в списке, и они не будут путаться с сущностями какого-либо задания.
Прежде чем мы всё-таки начнём делать квесты, нам нужно разбить их на меньшие компоненты, а именно:
Если вы что-то из этого не поняли, не переживайте — пока мы просто составляем список всего необходимого. Это список лишь для одного задания, так что нам понадобится создать действительно много всяких сущностей. Чтобы не засорять мозг лишним, мы будем использовать VisGroups для разделения заданий и сокрытия того, что сейчас не нужно. VisGroups позволяет вам обозначить группы кистей и сущностей и быстро скрывать или показывать их. Если группа скрыта во время компиляции, всё, что содержится в этой группе, будет пропущено и не появится в игре. Это очень удобно, ведь вы можете избирательно просматривать отедльные группы объектов, сосредоточившись на них, а ничто другое вам мешать не будет.
Создание шаблона задания
Мы будем использовать шаблоны (instancing) — отличный инструмент Hammer Editor’а. Это позволит ссылаться нашей основной карте на другие. Мы создадим экземпляр задания, который в дальнейшем будем использовать как шаблон. После того, как мы его закончим, мы сможем просто раскопировать его и немного отредактировать настройки копий так, чтобы каждое задание стало уникальным. Таким образом, нам не придётся делать одну и ту же нудную работу много раз. К сожалению, Episode 2 не полностью поддерживает эту технологию, поэтому нам придётся конвертировать экземпляры в уровни перед компиляцией (мы коснёмся этого позже).
Для того, чтобы настроить наш шаблон задания, нам нужен новый файл карты. В Hammer’е выбирайте File, затем New, карту сохраните как «quest_instance» в папке «instances» в том же месте, где лежит ваша основная карта.
Иллюстрация 4 — так должен выглядеть наш quest_instance после добавления всех сущостей.
Лучше всего размещать сущности как можно ближе к координатам (0,0,0). Также стоит размещать их выше плоскости XY, чтобы не потерять при переносе. Для правильного размещения вы можете воспользоваться Selection Tool. Наш шаблон будет автоматически добавлять выбранный нами префикс ко всем сущностям внутри него. Триггеры и выставление некоторых значений буду описаны позднее, так что не переживайте, если вам показалось, что мы что-то упустили.
Займёмся диалогом. Найдите в списке сущностей logic_choreographed_scene и поместите его за Гришей. Нам понадобится минимум две таких на каждый квест — одна для начального диалога, вторая для заключительного — так что скопируйте её и вставьте вторую поверх первой. Дайте им имена «scene_start» и «scene_end» соответственно. Добавление собственно диалога мы рассмотрим несколько позже.
После этого нам нужно добавить текст, который будет описывать задание. Создайте две сущности game_text и назовите их «text_start» и «text_end». Выставьте для обеих достаточно высокий параметр Hold Time (порядка 99999), чтобы текст не исчез, пока мы сами его не уничтожим. Нам нужно, чтобы текст был сбоку экрана и не мешал игроку, так что выставьте у обеих сущностей поля X и Y на 0.1.
Добавим ещё один триггер напротив Гриши. Он будет практически идентичным стартовому триггеру, поэтому просто скопируйте «trigger_start» и переименуйте его в «trigger_end». Убедитесь, что флаг Starts locked включен. Убедитесь, что эти сущности не перекрывают друг друга и что стартовый триггер находится перед хитбоксом NPC (иначе игра будет путаться, выбираете ли вы триггер или «кнопку»), используя виды сверху и сбоку. Чтобы определить местонахождение хитбокса, выберите Гришу — вокруг него появится жёлтая рамка.
Теперь настроим триггеры, как показано на Иллюстрации 5. Вам пока не стоит переживать за триггеры в квадратных скобках, их мы добавим позже. Выберите перечисленные сущности, откройте их Object Properties, зайдите во кладку Outputs и настройте всё в соответствии с таблице ниже. Убедитесь, что вы сохраняете все изменения (кнопка Apply)!
Иллюстрация 5 — настройка триггеров.
Заголовки: Выбранная сущность \ Активировать по… \ Активируемая сущность \ Что активировать у сущности
Размещаем шаблоны
Наш шаблон готов, теперь мы можем размещать такие шаблоны по карте и настраивать их более детально. Разместите «func_instance» где вам удобно, откройте его Object Properties и под VMF Filename найдите ваш файл «quest_instance». Обратите внимание, что поиск работает несколько багованно, так что вам может потребоваться ввести путь к файлу вручную. Теперь вы можете раскопировать этот шаблон по карте: создайте столько заданий, сколько хотите.
Выберите первое задание и дайте ему импортировать все необходимые сущности (нажимайте Instancing, Collapse, Selection). Hammer даст всем сущностям префикс, по умолчанию «AutoInstance-». Всё импортированное будет выделено, нам останется только добавить их в одну группу через VisGroups. Откройте Object Properties и выберите там вкладку VisGroups. Вы увидите примерно следующее:
Иллюстрация 6 — настройка VisGroups
«Sewer» и «Main level» — группы, которые я создавал раньше, так что это нормально, что у вас их нет. Нажмите на «Edit Groups» и вы увидите следующее:
Иллюстраци 7 — добавление областей и сущностей в группы
Здесь вы можете создать новые группы, которые потом будете использовать. Нажмите «New group» и вы увидите новый элемент в списке. Переименуйте его в «Quest_n», где n — номер задания. Как закончите с этим, нажмите «Close», вы увидите свою группу в главном списке. Отметьте чекбоксами для добавления сущностей в группу, нажмите «Apply», затем снова «Close». Тперь вы можете скрывать или просматривать группы, используя панель управления VisGroup, как показано ниже. Делайте так с каждым вашим заданием.
Иллюстрация 8 — готовая группа
Добавление собственных звуковых файлов
Идём дальше. Создайте файл «sound_script», чтобы движок мог связать наши звуки в редакторе с игрой. Запустите GCFScape, перейдите к File->Open, перейдите к своей папке «steamapps» и откройте файл «episode two content.gcf». После того, как GCFScape его прогрузит, вам нужно будет найти файл «game_sounds_manifest.txt», который размещён в «/steamapps/ep2/scripts». Нажмите на него правой кнопкой мыши и выберите «Extract» и разместите этот манифест в «/steamapps/half-life 2 episode two/ep2/scripts». С GCFScape мы закончили, можете закрывать его.
Теперь идите в папку со скриптами и откройте «game_sounds_manifest.txt», который мы только что извлекли. В этом файле лежат все звуковые скрипты, которые игра будет использовать, и нам нужно добавить наши записи туда же. Под последней строчкой кода, в последних скобках напишите ровно следующее:
Файл манифеста можно уже закрывать. Создадим файл «rpg_sounds.txt», на который мы ссылаемся и запишем в него следующее:
Если у вас стоит Windows Vista или Windows 7, нам придётся немного помочь Face Poser. Как указано выше, вам для этого понадобится патч Phoneme Extractor. Тут стоит упомянуть, что Source SDK обновляет себя каждый раз, как вы его запускаете, поэтому патч нужно ставить каждый раз, как вы открываете Source SDK. Да, это утомительно, но это самый простой путь, поверьте.
С открытым Face Poser мы начнём создавать новую сцену. Под меню «Choreography» нажмите «New». Я порекомендую вам сразу же её сохранить. Имя выберите сами, а папка для сохранения — «/steamapps/half-life episode two/ep2/Scenes/RPG_MOD/». Её потом будет гораздо проще найти, если вы дадите ей какой-то префикс, например, «RPG_». Теперь Face Poser попросит вас дать имя главному действующему лицу (Actor). Назовите его «!_targetN», где N — число от 1 до 8, т.к. у нас будет до восьми NPC в каждой сцене. Hammer будет использовать того NPC, которого вы укажете. У нас пока есть только Гриша, поэтому назовём действующее лицо «!_target1». Сделайте правый клик по имени действующего лица, которое появилось в меню «Choreography», затем перейдите к New->Channel->Create Channel box. Назовите этот канал «Audio». Теперь создайте ещё один канал и назовите его «Anim» (для анимации).
Иллюстрация 9 — проигрывание анимации и звуковой подложки
Если вы хотите добавить жесты, выражения лица или другую анимацию, Вам стоит делать это сейчас. Я не буду рассказывать, как это сделать в этой статье, вы можете прочитать об этом где-то ещё. Далее сохраните свою сцену (Choreography->Save). Теперь осталось применить эту сцену к нашему NPC.
Добавление стороннего аудио к NPC
Теперь нам нужно настроить диалог. Нам нужно добавить созданные нами сцены к «scene_start» и «scene_end», которые мы создавали раньше. Для этого нажмите Alt+Enter, чтобы открыть Object Properties, там найдите опцию «Scene file». Назначьте ей недавно созданную сцену и сохраните изменения. То же самое сделайте для «scene_end».
Активация событий
В целом, вы уже можете сами создавать триггеры, которые будут делать что угодно, но я приведу пример того, какое задание можно сделать и как его реализовать.
Настройка автосохранения
Никто не любит, когда один случайный крэш убивает результат многочасовой игры. Поэтому вам стоит добавить сущность logic_autosave и вызывать её каждый раз, когда задание будет пройдено (вы уже знаете, как это делается).
Конец игры
Игра должна будет когда-нибудь закончиться, и будет не очень хорошо, если она просто вылетит в главное меню, поэтому стоит создать титры. Для этого просто разместите где-то на карте следующие сущности:
Иллюстрация 10 — сущности для титров
Заключение
Я рассказал всё, что хотел. Теперь вы можете создавать любые виды заданий, умеете работать с триггерами и, в общем-то, можете начинать писать свои несложные моды к играм. Удачи!