Серьезное редактирование. Основы создания уровней для Serious Sam, часть 2
Приветствую! В прошлом номере "Мании" мы с вами строили простейший уровень для "Крутого Сэма". Сегодня мы рассмотрим более сложные аспекты картостроительства и построим новый уровень с более сложной структурой. Еще раз повторяем, что материал представляет собой эксклюзивную информацию, которая, будучи изучена полностью, позволит вам легко мастерить продвинутые игровые модификации, а не только одиночные карты. Более подробно о том, как соединять карты в серии, вставлять сюжетные ролики и писать скриптовые сцены, читайте в ближайших номерах "Мании". По завершении цикла все статьи будут выложены на нашем компакте. Новый уровень Уровень, который мы создадим, будет похож на стандартные уровни Сэма — большая арена, толпа монстров, и небо над головой. Как таковых, открытых пространств в игре нет — даже самые большие уровни могут быть представлены лишь замкнутым помещением, пусть и очень большим. Большим — это километров 250. Я думаю, любому игроку этого хватит, чтобы не чувствовать себя слишком стесненным. Для начала создайте браш с включенным параметром
Примерно так должна быть разделена территория нашей пустыни. Все линии на картинке пронумерованы в том порядке, в котором вы должны их создавать. Room и размерами по всем сторонам около 500. Кнопкой H отключите затенение, затем нанесите на браш текстуру песка (SandWS05) из набора Karnak (на сей раз мы будем использовать текстуры этого набора). Перейдите в режим редактирования полигонов и выделите все стороны, кроме нижней ("пола"). Откройте окно свойств (кнопка Q) и на закладке Polygon включите параметр Invisible — все выделенные стороны исчезнут. Теперь, хотя движок игры и будет считать такую комнату замкнутой, отрисовываться будет только нижняя поверхность. Затем нам необходимо разрезать оставшийся полигон так, чтобы можно было покрыть поверхность двумя текстурами отдельно. В режиме редактирования полигонов в окне Top установите точку обзора так, чтобы в кадр целиком попадал полигон, изображающий пустыню. Выделите этот полигон. Включите Cut Mode комбинацией Ctrl+X. Затем зажмите левую кнопку мыши и проведите курсор в сторону. Вы увидите, что появилась прямая, обозначенная точкой в месте щелчка мыши и точкой, указываемой курсором. Именно по этой линии будет разрезан выделенный полигон. Установив линию разреза, надо завершить действие кнопкой Enter. После разделения полигона Cut Mode будет отключен и все выделения сняты, поэтому вам надо каждый раз выделять разрезаемый полигон заново и снова включать Cut Mode. Нам надо разделить наш единственный полигон на семь частей так, как показано на рисунке: Удерживая Shift, выделите центральный полигон (между линиями 1 и 4) и маленькую "дорожку" (между линиями 5 и 6) и нажмите кнопку C. Появится небольшая палитра, на которой вы задаете цвет полигонов. Задайте им любой цвет, отличный от того, что был по умолчанию. Так же поступите с оставшимися полигонами, объединив их в отдельную группу. Теперь вы сделали две группы полигонов, каждая из которых может быть выделена двойным щелчком. Пока нам мало пригодится эта возможность, но в дальнейшем, если вы будете работать с большим количеством полигонов, она может вам очень понадобиться. Итак, задайте центральному полигону и "дорожке" текстуру FloorWS08. Затем выделите полигоны с песчаной текстурой и в окне свойств на закладке Polygon в списке Surface установите параметр Sand. Это нужно для того, чтобы при ходьбе по песку раздавался соответствующий звук шагов. Движемся дальше: создайте браши, которые ограничат будущую арену. Очевидно, что стены арены должны проходить по линиям стыков песчаных текстур с текстурами плит. Обратите внимание, что завершать
создание этих брашей следует не кнопкой "+", как мы делали раньше, а кнопкой L. Таким образом созданный примитив не будет объединен с геометрией всего уровня, и вы сможете свободно передвигать и поворачивать его. Впрочем, привязку браша к геометрии какого-либо объекта можно всегда произвести точно так же, как и всегда — кнопкой "+" на цифровой панели. Если вы захотите объединить несколько таких брашей, то сначала вам надо в списке брашей, показанном на картинке, —
— выбрать имя объекта, с которым вы хотите объединить выделенный вами браш. Затем в окне обзора нужно выделить браш, который вы хотите присоединить, и нажать "+" на цифровой панели. Следует задавать каждому "свободному" брашу собственное имя, чтобы избежать ошибок при объединении. Результат должен быть примерно похожим на картинку: При создании стен не забывайте, что с одной из сторон арены должен быть вход. Сделайте его напротив кафельной дорожки (та, что между линиями 5 и 6). Итак, создав стены арены, соедините их вместе. Также сделайте браш, который станет дверью на входе, — его ни в коем случае ни к чему не привязывайте! Не забудьте покрыть все вновь
Дверь должна выглядеть примерно так. Это просто плита, которая будет уходить вниз при открытии прохода. созданные браши текстурами. Я взял следующие: PoolWall02 для боковых сторон стен и FloorWS01Bri для верхних. Для двери — WallEdge03 для боковых сторон и BaseWall01_256 — для остальных. Вторым слоем на все объекты нанесите Crumples04. Также на все объекты уровня нанесите третью текстуру — Texture (она так и называется), это текстура, имитирующая блики света от воды. Увеличьте ее в 16-20 раз. Всем полигонам уровня установите включенным параметр Directional на закладке Shadow в окне свойств полигонов — тогда все тени, проецируемые на полигоны, будут рассчитываться более натурально. Теперь, чтобы все-таки создать впечатление открытого пространства, надо сделать над уровнем звездное небо (ну или не звездное — по вкусу). Откройте в меню объектов список Backgrounds и перетащите оттуда небо с названием Karnak. Получившийся объект — обычный браш со сторонами, направленными внутрь. Завершите его создание кнопкой L и поместите его где-нибудь за пределами уровня, чтобы он не мешал. Чтобы убедиться, работает ли созданное небо, вам всего лишь надо нажать цифру 6 на цифровой клавиатуре. Завершите создание уровня добавлением entities. В начале дорожки создайте PlayerMarker и в параметр Give Weapons впишите значение 60 — вы будете начинать игру с обоими дробовиками и автоматом. Также задайте параметр Max Ammo Ratio равным 200. Затем неподалеку от старта положите броню и здоровье с параметрами Type, установленными на Super. В центре арены положите AmmoPack с параметром Type, установленным на Serious pack. Украшаем уровень Было бы неплохо украсить уровень несколькими моделями — статуями, например. Небольшая сложность здесь состоит в том, что все ресурсы игры — модели, звуки, музыка — запрятаны в архивы *.gro, а из архива на карту ничего поместить не получится. Поэтому распакуйте архивы 1_00_a.gro и 1_00_music.gro в корневой каталог игры, сохраняя, разумеется, систему поддиректорий архивов. Теперь, если вы добавите какой-либо объект или музыку на уровень, а затем удалите распакованные файлы, игра будет использовать файлы из архивов. Положим, вы распаковали требуемые файлы. Добавим несколько статуй. Создайте объект ModelHolder2 из Basic Entities. Теперь на панели свойств выберите параметр Model и задайте, например, модель статуи Осириса — Osiris.mdl. Находится она в каталоге Serious Sam\Models\Ages\Egypt\Gods\Osiris. Затем выберите параметр Texture и задайте статуе соответствующую текстуру — она находится в одном каталоге с моделью. Также можно в параметре Bump задать текстуру Crumples04 из каталога Textures\Detail. Включите параметр Colliding, чтобы сквозь модель нельзя было проходить. Параметр StretchAll отвечает за размер модели. По умолчанию он равен 1, но лучше задать величину 10-15, иначе статуи будут маловаты. Если вы хотите сделать статуи разрушаемыми, то создайте объект ModelDestruction из Basic Entities. Его основные параметры таковы: Body Type определяет материал, из которого сделан разрушаемый объект, Debris и Debris Count означают соответственно тип обломков и их количество, а Debris Size — размер этих обломков. Параметр Particle Type задает тип разлетающихся при попадании в статую спрайтовых частиц. Задайте параметры так, чтобы при разрушении статуя создавала впечатление каменной, а с количеством и размером обломков поэкспериментируйте и подберите параметры себе по вкусу. Теперь выберите статую, которую вы хотите сделать разрушаемой, и в параметре Destruction выберите объект ModelDestruction. Если вы сделаете на уровне несколько статуй, то всем им можно задать один и тот же ModelDestruction, если только вы не сделали статуи разных размеров и свойств. Так же, как и статуи, добавьте на уровень
Примерно так должен выглядеть результат. Неплохо для начинающего мапмейкера, не правда ли? модель CurvedSurfaces из каталога Models\IHVtest. Увеличьте модель раз в 10, а затем поместите над центром арены. В параметре Texture задайте объекту текстуру Checker из каталога с моделью (или любую другую текстуру — лишь бы была), а в параметре Reflection — текстуру WaterFX из каталога Textures\Effects\Water\Water07. Теперь этот меняющий форму объект похож на громадную каплю воды. Неплохое украшение. Вообще, таким образом добавляются все модели, которые присутствуют на картах, будь то статуи или факелы, колонны или тарелка пришельцев с последнего уровня. Последний штрих — добавить освещение. Ничего нового здесь нет. Просто поместите "лампочку" в центре созданной "капли" и задайте параметр Fall-off равным 300 или около того. Также измените оттенок света — например, на темно-синий или темно-голубой. Естественно, если вы создали над уровнем не звездное небо, а какое-то другое, то цвет источника света должен быть другим и соответствовать вашему небу. Теперь "капля" над уровнем будет вполне убедительно выглядеть как источник освещения, так как на земле, полу и стенах арены мелькают водяные блики. Еще одна вещь, которую можно отнести к украшению, — это музыка. Создайте объект MusicHolder (как обычно — из Basic Entities). Главные параметры — Music Light, Music Medium и Music Heavy — означают соответственно: первый — музыка, играющая, когда врагов нет, второй — когда на вас нападает пара-тройка различных видов, и третий — когда врагов толпа или когда появляется какой-то босс. Музыкальные файлы находятся в архиве, а так как вы их распаковали, то ищите их в каталоге Serious Sam\Music — там сделан отдельный каталог для каждого уровня. Выберите музыку по своему вкусу. Размещение монстров На этот раз мы сделаем так, чтобы монстры не стояли на заранее условленных позициях, а появлялись только тогда, когда игрок оказывался бы неподалеку — так же, как сделано в стандартных уровнях "Крутого Сэма".В общем-то, это скорее не размещение, а подготовка к скриптам, выпускающим монстров, но о скриптах ниже. Прежде всего, надо создать по одному экземпляру монстров, которые будут задействованы в игре. Пусть это будут камикадзе, биомеханоид (красный), бык и гнаар женского пола. Все монстры после создания будут называться Base Enemy. Переименуйте их так, чтобы потом легко можно было отыскать их в списках объектов. Разместите их где-нибудь на задворках, чтобы глаза не
мозолили. А лучше сделать небольшую комнату вне уровня, в которую можно запихнуть монстряков с глаз долой. Всей компании выставьте параметр Template включенным. Теперь эти монстры не будут атаковать и двигаться и не могут быть убиты — сейчас это просто шаблоны для копирования. "Копировальный аппарат" — это объект Enemy Spawner.Нам понадобится 7 таких объектов. Один назовите Gnaar Spawner’ом. Другой — Mehanoid Spawner. Третий — Bull Spawner. И четыре объекта назовите Kamikaze Spawner’ами — каждый с порядковым номером. Разместите так, как показано на рисунке. Каждому spawner’у задайте в параметре Template target тип монстра, соответствующий названию. Другие параметры означают: Total Count — общее число воспроизведенных монстров, Wait Delay — через сколько секунд после активации начнут появляться монстры, Single Delay — задержка между соседними спавнами монстров, Group Size — если вы хотите разбить монстров на группы (то есть спавнится часть от общего числа, потом через несколько секунд — еще часть, и т.д.), то укажите, какими порциями должны появляться враги. И параметр Group Delay — задержка между соседними группами. Итак, всем Kamikaze Spawner’ам поменяйте только параметр Total Count, установив его на значение 20. Не бойтесь такого количества — камикадзе побегут толпой, и для их убийства хватит двух выстрелов. Gnaar Spawner’у установите Total Count на 50, а Single Delay и Group Delay — на 1. Mehanoid Spawner’у установите Total Count на 10, Single и Group Delay также на 10. Ну и напоследок — Bull Spawner’у установите Total Count на 20, Single и Group Delay — на 1. Сейчас, хотя вы и сделали spawner’ы, они еще ничего не спавнят, так как нет скриптов, активизирующих их. Что же, перейдем к скриптам! Скрипты В "Крутом Сэме" системы скриптов могут быть очень сложными и состоять из самых различных элементов, но само создание этих систем большой сложности не представляет. С первого раза довольно трудно сделать что-то дельное, но, разобравшись в устройстве скриптов, вы сможете создавать системы не хуже, чем разработчики игры. Скрипты появления монстров Сначала рассмотрим скрипты для Enemy spawner’ов. На самом старте вы положили броню и здоровье. Пусть после того, как вы подберете что-то из них, (например — броню), на вас побежит две толпы камикадзе, из Kamikaze Spawner’ов 1 и 2, которые вы расположили по разные стороны от дорожки. Создайте объект Trigger из Basic Entities и назовите его Armor Kamikaze Trigger. Затем выберите тот самый Armor и в параметре Target укажите созданный триггер. А у триггера в тех же параметрах Target (у триггеров их несколько — выбирайте какие хотите) укажите Kamikaze Spawner 1 и Kamikaze Spawner 2.Таким же образом поступите с Ammo Pack’ом в центре арены, нацелив его с помощью trigger’а (назовите его Ammo Kamikaze Trigger) на Kamikaze Spawner’ы 3 и 4. Называть триггеры собственными именами не обязательно, но иначе вам будет очень сложно разобраться в списках одинаковых имен. Если все сделано правильно, то скрипты должны работать. Запустите тест (кнопка Т) и проверьте.
Теперь сделаем активатор для гнааров и механоидов. Они будут активироваться объектом TouchField. Перетащите этот объект из списка Basic Entities на уровень — это браш без полигонов, поэтому он обозначается глобусом. Затем создайте браш, который будет перекрывать всю ширину арены, как на картинке. Потом выберите ToushField в списке брашей, выберите в окне обзора тот браш, который вы создали, и объедините его с TouchField’ом — браш должен стать полупрозрачным и зеленого цвета, как и показано на картинке. Дальнейшие действия не несут ничего нового — создайте trigger, нацельте TouchField на него (параметр Enter Target), а сам триггер — на спавнеры гнааров и механоидов.
Маркеры должны быть строго на одной вертикальной линии, иначе дверь будет двигаться не вверх-вниз, а по диагонали. Активатор для быков делается аналогично — размещение показано на картинке выше. Но, поскольку спавнер только один, вы можете не создавать триггер, а нацелить TouchField непосредственно на Bull Spawner. TouchField’ам тоже желательно задавать собственные имена. Скрипты движения объектов Далее рассмотрим скрипт, который будет открывать дверь. Перед дверью создайте браш, который будет перекрывать все подходы к двери. Потом создайте очередной TouchField и объедините с ним браш. Создать браш требуемой формы проще, скопировав саму дверь (Ctrl+C, Ctrl+V). Затем надо — как обычно — из списка Basic Entites создать объект MovingBrush. Он, как и TouchField, представляет собой браш без полигонов, к которому мы чуть позже присоединим дверь.
Примерно так должен быть размещен получившийся touchfield. Также создайте два объекта MovingBrushMarker — они обозначат путь движения движущегося браша. Один маркер назовите Door Open, другой — Door Closed. Они, соответственно названиям, обозначат позицию двери в открытом и закрытом положениях. Маркеры разместите так, как показано на рисунке. Точно совместите MovingBrush с маркером Door Closed. Дело в том, что по этим маркерам будет двигаться начальная координата движущегося браша. А когда вы объедините дверь и MovingBrush, то этот самый MovingBrush и станет начальной координатой, и, в случае ошибки, дверь опять же будет двигаться неправильно. Расположив все элементы так, как положено, присоедините дверь к MovingBrush’у. Теперь в параметре Target у двери укажите маркер DoorClosed. В параметре Target маркера Door Closed укажите маркер Door Open. Маркер Door Open нацельте обратно на маркер Door Closed. У обоих маркеров в параметре Speed установите значение 4 — дверь будет двигаться в 4 раза медленнее (точнее, будет преодолевать расстояние между маркерами за 4 секунды). У маркера Door Open установите параметр Wait Time равным 4 — дверь задержится в открытом положении на 4 секунды. У маркера Door Closed включите параметр Stop Moving — по достижении этого маркера дверь прекратит двигаться. Ну и наконец — нацельте тот TouchField, который вы создали для двери, на саму дверь. Имейте в виду, что теперь дверь называется не тем именем, которое было задано при создании, а именем MovingBrush’а, к которому вы присоединили ее. Вообще, специально для дверей существует объект DoorController. От TouchField’а он отличается тем, что у него два параметра Target — для двух створок двери. Финал уровня Самый последний скрипт —
Так я оформил финиш. Вы можете сделать так же, а можете создать что-то свое. Считайте это "домашним заданием". тот, который заканчивает уровень. Делается легко: создайте TouchField, при входе в который прохождение уровня будет завершено (то есть он обозначит область — проход за дверью, муляж телепорта и т.д.). Затем создайте PlayerActionMarker из BasicEntities. Установите маркеру параметр Action на EndOfGame. Дальше как обычно — TouchField нацеливаете на триггер, а триггер — на маркер. TouchField следует разместить в противоположной от входа стороне арены. Также не забудьте оформить его как-нибудь поприметнее, чтобы, перебив всех монстров, не блуждать по уровню, ища заветный TouchField. На картинке — мой вариант данного оформления. ...to be continued Ну что же — на этот раз вы создали полноценный уровень. На сегодня это все. Ждите следующей статьи — в ней вы научитесь создавать видеовставки на движке игры, соединять разные уровни между собой, создавать собственные моды, а также многим другим возможностям редактора. А пока наслаждайтесь процессом творчества, а заодно зацените, что получилось в итоге у меня. Ищите уровень "испешилли от Мании" на нашем компакте.
733 Прочтений • [Серьезное редактирование. Основы создания уровней для Serious Sam, часть 2] [19.05.2012] [Комментариев: 0]