К.ОЗ.Л.И.К.
|
|
Chief
|
Дата: Вторник, 21.10.2014, 13:38 | Сообщение # 1 |
Сообщений: 145
Администраторы
|
АВТОР РУКОВОДСТВА DKennedy Условия распространения Данный текст является литературным произведением и охраняемым объектом авторского права. Использование данного текста (в том числе, его локальной версии) на других интернет-ресурсах, в том числе, в переводе на другие языки - [color=rgb(40,40,40);font-family:helvetica, arial, sans-serif;]разрешено при условии указания автора[/color], а так же - указания настоящих Условий в неизменном виде. В этом случае, согласия автора не требуется. Иное тиражирование данного произведения допустимо только с согласия автора.
Версия 1.0
Вашему вниманию представляется руководство по редактору АрмА 3 для начинающих или, иными словами, "Краткий ОЗнакомительный Ликбез Игрового Конструирования". Немного позднее, будет добавлена оффлайновая версия данного руководства и файл с примером миссии.
О чем это руководство?
Данный туториал рассчитан на первое знакомство с редактором ArmA 3, но, в отличие от большинства подобных руководств, мы начнем не с изучения интерфейса или написания «Hello, world!» на местном скриптовом языке. В этом Ликбезе мы будем работать непосредственно над созданием нашей первой собственной миссии, и в результате обязательно получим законченный готовый сюжет для одиночной игры (а с небольшими доработками - для кооперативной игры в компании). Мы на практике изучим все основные аспекты редактора — расстановку юнитов, раздачу им указаний к действию, обработчики игровых событий (триггеры) и создание простейших задач в брифинге.
На момент написания первой главы данного Ликбеза, с момента релиза ArmA 3 Alpha прошел всего один день, и данная версия игры поддерживает всего один язык — английский. Поэтому, будем ориентироваться на то, что видим в английской версии редактора, а в скобочках будут указаны приблизительные русские эквиваленты (из редактора ArmA 2).
Часть 1. Дислокация.
Откроем, наконец, редактор, щелкнув на кнопке EDITOR в главном меню игры и выбрав остров Stratis! Со времен предыдущих игр серии, редактор миссий претерпел небольшие косметические изменения — старые добрые текстовые меню заменены на зеленые пиктограммки. На момент Альфы, данные пиктограммки не имеют четкого текстового пояснения — поэтому, чтобы не путаться, предлагаю сразу переключиться в более классический вид. Для этого, нажмем кнопку Shoose editor's layout (крайняя правая в верхнем ряду), выберем Traditional и нажмем RESTART NOW, чтобы перезапустить интерфейс. Итак, справа мы имеем выбор инструментов, сверху — стандартное меню сохранения-загрузки. Нажав на кнопку ADVANCED INTEL, мы сможем заняться настройкой погоды, но пока нас это не интересует. Навигация по карте происходит с зажатой правой клавишей мыши, масштаб изменяется колесиком.
Действия нашей первой миссии развернутся на Северо-Восточной оконечности острова — вблизи бухты Камино (Kamino bay), квадрат 065-049. Как видим, в бухте стоит небольшая постройка, а от нее к Северу в сторону маяка ведет грунтовая дорога. Здесь мы и расположим наш отряд!
Конечно, можно выставить всех бойцов по одному и потом объединить в группу, но иногда проще поставить сразу целое отделение. Выберите правом меню Groups (Группы) или просто нажмите F2. Затем, кликните два раза на пустом месте там, где начинается дорога, и вы увидите интерфейс создания групп - В появившемся окне выберем SIDE – OPFOR (Сторона — Красные), FACTION – Red (Фракция — Красные), CLASS – Infantry (Класс — пехота) и UNIT – Infantry squad (Подразделение — Стрелковое отделение). А затем, нажмем ОК. Суть понятна — мы выбрали среди заранее заготовленных групп стрелковое отделение иранцев и поставили его на карту. Сейчас у нас не выбран игрок, и редактор нам об этом напомнит. Скажем ему «CLOSE» (Закрыть) и сделаем двойной клик по третьему справа бойцу, именуемому Grenadier (Стрелок с ГП) перед нами откроется меню редактирования отдельного юнита. В нем нас интересует, прежде всего, пункт CONTROL (Контроль) в панели слева. Он имеет три опции — None (нет, бойцом будет управлять AI), Player (Этим юнитом будет управлять игрок) и Playable («Играет» Этим юнитом игрок может управлять. Все слоты в сетевой игре представляют собой юнитов с параметром Playable, а в одиночной — игрок имеет возможность переключаться в таких юнитов через меню выбора). Еще одно важное поле, которое мы заполним — это поле NAME (Имя). Это не то имя, которое отображается в игре, а условное имя, по которому к этому юниту смогут обращаться триггеры и скрипты. Зададим нашему протагонисту имя aP. После этого, откроем аналогичным образом командира нашей группы и зададим ему имя Com. И прежде, чем нажать ОК, давайте окинем взором меню редактирования юнита.
SIDE (Сторона) — тут все очевидно. Может представлять собой BLUFOR (синие), они же НАТО, REDFOR (Красные), в их роли Иран. Independence (Независимые) — благородные греки, отважно отсутствующие в альфа-версии, Civilian (Гражданские) и Ambient life (Животные). На этом, список играбельных сторон закончен, а дальше идут Game Logic (о них - в свое время) и Empty (Пусто). Последняя сторона позволяет ставить на карту пустую технику, боеприпасы и прочие объекты.
CLASS – это класс юнита. Пехотинцы, бронетехника, авиация и так далее собраны по разным классам, а UNIT (Юнит) — это, собственно, тип самого персонажа или машины.
SPECIAL (Особенности) — здесь можно выбрать, появится юнит на карте в строю (In Formation) или будет стоять свободно (None). Для воздушных юнитов можно выбрать Flying (В полете), и тогда они появятся прямо в воздухе. А если в группе есть грузовой транспорт — можно выбрать In Cargo (В грузовом отсеке), тогда боец появится прямо в машине.
Назначение поля CONTROL мы уже поняли — здесь мы выбираем, кто будет игроком, а VEHICLE LOCK (Доступ) нужен для техники — позволяет поставить ее на карту закрытой. RANK – это Звание юнита. Юнит с более высоким званием автоматически становится командиром группы. AZIMUTH и ELEVATION – это направление и высота, на которой юнит появится. Справа есть колесо азимута, а в главном меню редактора можно крутить объекты, зажимая Shift.
В правом меню мы видим знакомое поле NAME, а ниже его INITIALIZATION – это очень важное поле, в него пишутся скриптовые команды. Если нам надо поменять юниту оружие, задать какие-то параметры, а то — и просто установить здоровье в ноль, чтобы создать на карте заведомый труп — все это обычно пишется в ините. SKILL (Уровень) — это уровень интеллекта AI, чем выше — тем умнее. PROBABILITY OF PRESENCE (вероятность присутствия) по умолчанию выставлена на 100%, но если мы захотим внести в миссию элемент случайности — можно его уменьшить.
А теперь, закроем меню игрока и укажем нашему отряду путь!
Одиночным щелчком по любому члену отряда, сделаем его активным, а затем — в правом меню выберем Waypoints (Вейпоинты) или просто нажмем F4. К северу от места нашей высадки расположен маяк — туда и назначим первую точку, два раза щелкнув. В появившемся окне мы можем гибко редактировать поведение группы в движении. Оставим все поля по умолчанию кроме поля FORMATION (Построение) — там выберем Column (compact), в колонне нашему отряду будет проще подниматься в горку. Ах, да! Не лишним будет также поставить скорость движения на полную (SPEED – Full), чтобы маневр был более решительным.
Поле ON ACT. (По активации) позволяет нам выполнить разные скриптовые команды, когда группа достигнет этой точки. Пусть в нашем случае командир отряда (которого мы назвали Com, помните?) доложит на базу о занятии позиции для атаки. Впишем в это поле com sideChat "Base, this is Viper-1. We have reached the lighthouse! Over."; Поскольку в Альфа-версии игры поддержки русского языка и кирилицы нет — мы не сможем написать ничего по-русски, поэтому, давайте пока условимся на простых английских фразах. В данном случае, все должно быть понятно. Com – это мы обращаемся к соответствующему юниту, SideChat – это команда, заставляющая юнита сказать в синий чат фразу в кавычках «База, это Гадюка-1. Мы достигли маяка! Прием.»
Ну что же, если хотите — можно закрыть окно вейпоинта, нажать PREVIEW (Предпросмотр) и убедиться, что группа иранцев побежала в горку плотным строем, а по прибытии на место командир об этом доложил.
Давайте прямо сейчас сохраним нашу миссию, нажав в верхней панели Save (Сохранить) или просто Ctrl+S, если вы еще этого не сделали. Зададим ей имя, скажем — dk_tutor.
|
|
|
|
Chief
|
Дата: Вторник, 21.10.2014, 14:20 | Сообщение # 2 |
Сообщений: 145
Администраторы
|
Часть 2. Противник.
Следующая маршрутная точка будет указывать на Kamino firing range, что под горой к Северу. В отличие от первого вейпоинта, тип этой точки будет SEEK AND DESTROY (Найти и уничтожить), а построение установим в Line (Цепь), чтобы наше отделение развернулось для атаки. Установим на базе первую группу противников. Для начала, войдем в меню Units (F1), кликнем дважды неподалеку от центра базы. Юнит будет иметь сторону BLUFOR (Синие), Class – Men, юнит — Riffleman (Light). Звание (Rank) установим в Sergeant, чтобы он автоматически стал командиром группы. Рядом с ним разместим еще двоих-троих аналогичных бойцов, но в звании рядового (Private). Если эти бойцы помещены достаточно близко от сержанта — они автоматически свяжутся с ним голубыми линиями. Этой группе мы поставим вейпоинт прямо рядом, практически под ноги. Но тип (SELECT TYPE) выберем не MOVE (Перемещение), а SENTRY (Защищать). Это «умный» вейпоинт — с ним группа будет не просто стоять в указанной точке, а станет атаковать любого противника, замеченного союзниками, даже если сама его еще не видела. Вокруг базы мы пустим патрули! Создадим пару синих бойцов слева от базы и добавим им вейпоинт MOVE (Перемещение) с параметрами SPEED – Limited (Скорость — ограничено), BEHAVIOUR – Safe (Поведение — Безопасно). Примерно в трех сотнях метров. Еще два аналогичных вейпоинта создадим в другой точке патрулирования и в начальной точке, образовав, таким образом, треугольник. А потом, недалеко от самого первого вейпоинта добавим точку с типом CYCLE (Зациклить). Обратите внимание, как она автоматически свяжется с первым вейпоинтом, если расположена достаточно близко. Таким образом, патруль будет ходить по трем точкам по кругу. Скопируйте патруль вместе со всеми вейпоинтами клавишей Ctrl+C и клавишей Ctrl+V разместите на противоположной стороне базы. Так у нас будет выглядеть оборона базы в конечном итоге. Итак, задача на бой у нас сформулирована, теперь надо как-то определить его результаты, чтобы миссия могла закончиться или идти дальше. Поэтому, теперь мы познакомимся с триггерами!
Триггер — это обработчик игровых событий, который при наступлении определенного условия запускает какое-то действие. Чтобы установить, что база захвачена, нам надо, чтобы выполнились два условия -
В зоне базы нет вражеских юнитов.
Территория базы занята своими войсками. Каждое из этих условий включит по одному триггеру, которые сделают истинными две соответствующих переменных. В третьем триггере мы будем ожидать, пока истинными станут обе переменные — тогда мы и определим, что база зачищена. Сложно? Нет, ни капли.
Создадим первый триггер (кнопка F3, меню Triggers) в центре атакуемого военного лагеря. Размеры зоны задаются параметрами Axis X и Axis Y – установим их по 150 метров. Имя триггера установим как BAZA_BLUE и для удобства введем то же самое в поле TEXT, чтобы легко опознавать его на карте. Условием активации данного триггера будет отсутствие в его зоне солдат Синих. Поэтому, в поле ACTIVATION (Активация) выберем сторону BLUFOR (Синие), а ниже выберем Not present (Отсутствуют). Теперь определим, что произойдет, когда он активируется — нам нужно, чтобы истинной стала одна из переменных, назовем ее BaseIsClear. В поле ON ACT. (По активации) так и напишем BaseIsClear=true; Второй триггер сработает, когда в зону войдет кто-нибудь из Красных. Создадим триггер такого же размера, назовем его BAZA_RED, в поле ACTIVATION (Активация) выберем OPFOR (Красные) и на этот раз — Present. В поле ON ACT. напишем WeAreHere=true; Ну, то-есть, «мы здесь». еперь нам нужен третий триггер, который увидит, что оба события состоялись, и заставит командира сказать об этом.
Разместим его где-нибудь рядом и назовем BAZA_CLEAR. Радиус ему можно поставить нулевой — реагировать он будет не на юнитов, а на условия, написанные в строке CONDITION. Туда вписываем BaseIsClear and WeAreHere . А в поле ON ACT. Напишем следующее Leader aP sideChat "Ok! Now we must defend this place."; То-есть «Ок! Теперь нам необходимо защищать это место.» Почему в этот раз мы пишем «Leader aP», а не просто Com? Элементарно, в бою первоначального командира по имени Comмогли убить, а выражение Leader aP находит текущего командира игрока, и кто бы ни был в данный момент лидером — именно он и скажет эту фразу.
Наверное, самое время запустить превью и посмотреть, все ли работает.
|
|
|
|
Chief
|
Дата: Вторник, 21.10.2014, 14:27 | Сообщение # 3 |
Сообщений: 145
Администраторы
|
Часть 3. Подкрепление.
Ну что же, нам удалось сделать выполнимой первую задачу, но давайте разовьем ход миссии дальше. Противник успел доложить о нападении, и теперь к базе выдвинулось подкрепление на броневике!
Западнее атакуемой нами базы в квадрате 055-047 расположена постройка, а от нее ведет дорога к самому лагерю. Здесь и расположим группу подкрепления и ее машину. Установим здесь четверых бойцов команды Синих — на этот раз не раздетых стрелков с карабинами, а кого-нибудь посерьезнее, вроде пулеметчиков или солдат с ГП. Мы сформируем эту группу аналогично предыдущей — один из юнитов будет сержантом, а все поставленные возле него рядовые автоматически соединятся с ним линией. Если вы поставили солдата слишком далеко — не беда, вы можете нажать F2 (Группы) и провести тонкую голубую линию между ними вручную.
Рядом мы поставим пустой автомобиль, в который они по тревоге заберутся. Сделав двойной клик на дороге в режиме F1, выберем SIDE - Empty (Сторона — пусто), Class – Cars (Класс — автомобили), Unit – Hunter (blue) (Юнит — Охотник (Синие)). Теперь нам надо сделать, чтобы группа начала движение не сразу, а только тогда, когда база будет нами захвачена. Поставим стандартный вейпоинт движения (MOVE) со скоростью «Полная» (Speed – Full) «под ноги» новой группе. Тепь выберем в меню (F5) Syncronization (Синхронизация), щелкнем на этом вейпоинте и протянем темно-синюю линию к недавно созданному триггеру BAZA_CLEAR. Как уже, наверное, понятно — группа не двинется дальше этого вейпоинта, пока не сработает связанный с ним триггер. Вейпоинты полезно временно блокировать, и делать это можно не только с помощью триггера, можно синхронизировать вейпоинты нескольких групп друг с другом — например, чтобы они подходили на позиции с разных сторон, но атаковали одновременно.
Продолжим устанавливать маршрутные точки группе подкрепления! Следующий вейпоинт поставим непосредственно на машину, а тип его установим GET IN (Войти). Заметьте, что точка поставилась поверх машины, и если нам впоследствии понадобится «залезть под» путевую линию и открыть меню самого броневика — надо удерживать Shift.
Итак, когда триггер сработает — группа сядет в броневик. В дальнейшем, нам достаточно только указать точку высадки неподалеку от базы, а как туда добраться, боты решат самостоятельно. Поставим вейпоинт GET OUT (Выйти) на дороге неподалеку от базы, а следующую точку для подкрепления поставим уже на самой базе и зададим ей тип SEEK AND DESTROY (Найти и уничтожить), чтобы бойцы попытались атаковать нашу группу. Поведение на последней точке (Behaviour) логичным будет поставить «В бою» (Combat), так как по нашей задумке, подкрепление уже знает, что их ждет контакт с противником. Кстати, в триггеры и вейпоинты мы можем добавлять эффекты, в частности — можно включить музыку в момент высадки подкрепления. Для этого, надо войти в соответствующий вейпоинт, нажать EFFECTS (Эффекты) внизу и выбрать трек. Кроме того, можно добавить кое-какого текста. Давайте сделаем это! Окей! Теперь добавим условие, которое окончит миссию, когда подкрепление будет уничтожено, а контратака — отбита. Для этого мы поставим триггер, который сработает, когда число юнитов в группе подкрепления будет равно нулю.
|
|
|
|
Chief
|
Дата: Вторник, 21.10.2014, 14:30 | Сообщение # 4 |
Сообщений: 145
Администраторы
|
Часть 4. Победа.
Вернемся к лидеру группы подкрепления и откроем его меню. В строке инициализации (INITIALIZATION) дадим название группе этого персонажа. Podkrep = Group this;А триггер, который будет считать количество юнитов, расположим рядом и назовем его END1. Условие активации (CONDITION) (count units Podkrep) == 0 . Но самое главное — это тип (TYPE) триггера! Тут мы выбираем End #1 (Конец # 1). Таким образом, когда количество юнитов группы Podkrep будет равно нулю — триггер сработает, и наступит финал миссии.
Ну что ж, мы задумали сюжет миссии, создали ее логику и последовательность событий, поставили обрабатывающие эти события триггеры и создали финальный триггер — который завершает миссию.
|
|
|
|
Chief
|
Дата: Вторник, 21.10.2014, 14:42 | Сообщение # 5 |
Сообщений: 145
Администраторы
|
Часть 5. Боевой приказ.
Наша группа выходит на позицию, атакует лагерь противника, отражает контратаку — понятно. Но это нам понятно, а для игрока необходимо поставить условие, ведь сюжет он будет воспринимать из поставленных задач и заметок в дневнике!
Редактор ArmA 3позволяет создавать брифинги относительно легко и непринужденно. Относительно предыдущих игр серии, конечно — там для этого необходимо было осваивать html и скриптовый язык. Теперь — нет, для создания обычного задания это не обязательно. Теперь нам помогают в этом Модули! Они доступны по горячей клавише F7.
Модули устанавливаются на карте точно так же, двойным кликом. Некоторые из них можно и нужно синхронизировать клавишей F5с юнитами и другими модулями, как правило, эта логика интуитивно понятна.
В целях создания брифинга, нас интересует несколько модулей, все они находятся в категории Intel (Разведка, сведения).
Create Task (Создать задачу) – создает саму задачу. Ей нужно задать название, внутриигровое имя и описание.
Set Task Destination (Установить точку назначения) – будучи синхронизирован с предыдущим, отмечает задачу на карте в месте своего нахождения (опция Module position). Либо его можно синхронизировать еще и с объектом — тогда на карте задача будет помечена там (опция Synchronized object).
Set Task State (Установить статус задачи) – устанавливает изначальный статус задания. По умолчанию, все имеющиеся задания имеют статус Created (создано), и в начале миссии имеет смысл сделать активным одно из них. Перечень статусов таков - Created (создано), Assigned (Назначено, задача отмечена галочкой), Succeeded (Выполнено успешно, отмечается зеленой галочкой), Failed (Провалено), Canceled (Отменено). Поместим на карту модуль Create Task рядом со стартовой точкой, и заполним его так. Task ID (ID задачи) — Zadacha1, это имя задачи, которое мы будем обрабатывать командами. Title (Название) - Reach the lighthouse («Достигнуть маяка»), Description – Take position («Занять позицию» - это краткое описание). Apply to – Synchronized object only (Применить к — только к синхронизированному объекту). Заполнив поля таким образом, синхронизируем этот модуль с игроком. Рядом поставим модуль Set Task State (Установить статус задачи) и синхронизируем его кнопкой F5 с предыдущим модулем. State (Статус) выберем Assigned (Назначено), поскольку это первое задание, и оно должно быть активно с самого начала. Дадим ему имя (NAME) – ASSIGNED, чтобы было наглядно.
Рядом поставим такой же модуль, но со статусом Succeeded (Выполнено успешно) и так же свяжем его с модулем первой задачи. «Вторым концом» мы в последствии свяжем этот модуль с триггером, который будет отслеживать, что игрок забрался на маяк. Этому модулю тоже желательно дать имя, чтобы его было видно на карте. Как мы помним, о том, что отряд забрался на гору, нам сигнализирует команда в вейпоинте группы. К сожалению, синхронизировать модуль Succeeded с вейпоинтом нельзя, поэтому, создадим небольшой триггер диаметром 20 и с условием активации на присутствие Красных, а затем, свяжем его с нашим модулем. Изображение Изображение Должно быть понятно — по умолчанию у нас включится статус Assigned, а статус Succeeded связан с триггером и включится только тогда, когда и он.
Вторая задача у нас состоит в том, чтобы зачистить базу от противника. Создадим еще один модуль Create Task, дадим ему имя и Task ID – Zadacha2. А в задании так и напишем — Attack base and kill em all. Эту задачу мы так же соединим с игроком и создадим для нее три модуля Set Task State (Установить статус задачи), синхронизировав их все, как и в прошлый раз, с основным.
Первый модуль будет задавать статус Created (Создано), ведь активной в начале миссии должна быть только первая задача.
Второй модуль будет задавать статус Assigned (Назначено), и привязан он будет к триггеру на маяке — ведь когда группа дойдет до точки, первое задание отметится выполненным, а второе нужно сделать текущим.
Третий модуль со статусом Succeeded (Выполнено успешно) свяжем с триггером BAZA_CLEAR. Помните, это тот, который включается при полностью зачищенной базе и запускает подкрепление? Наконец, третье задание — отразить контратаку.
Создаем третий модуль Create Task, дадим ему имя и Task ID – Zadacha3. В названии и описании задачи так и напишем - Defend base, то-есть, «защитить базу». К нему так же три статуса. Created (Создано)
Assigned (Назначено) – синхронизируем на триггер BAZA_CLEAR, ведь третье задание становится активным тогда, когда выполняется второе.
Succeeded (Выполнено успешно) — на триггер END1. Само собой, надо еще разок пробежать всю миссию и посмотреть, все ли срабатывает. Должно быть следующее. Начало миссии — активна первая задача, остальные неактивны. Группа достигла маяка — первая задача выполнена, вторая активна.
База захвачена, готовимся к обороне. На этом, можно сказать, что наша первая миссия практически готова — теперь не только мы сами знаем, что в ней надо делать, а любой, кто способен прочитать пару строчек немудреного текста в нашем брифинге.
|
|
|
|