Создание уровней для Max Payne 2. Часть 5

Создание уровней для Max Payne 2. Часть 5

Мастерская — Создание уровней для Max Payne 2. Часть 5
“Загадки создания архитектуры уровней для Max Payne 2 были раскрыты в двух первых статьях нашего долгого цикла. Про изготовление дополнительных объектов с уникальными текстурами говорилось в третьей и четвертой части... Но вот управление компьютерными пер
Игроманияhttps://www.igromania.ru/
Мастерская
Создание уровней для Max Payne 2. Часть 5

    Загадки создания архитектуры уровней для Max Payne 2 были раскрыты в двух первых статьях нашего долгого цикла. Про изготовление дополнительных объектов с уникальными текстурами говорилось в третьей и четвертой части... Но вот управление компьютерными персонажами вы будете осваивать вместе с нами только сегодня.
    Наша задача — научиться готовить для Макса жаркие встречи с горячими NPC в самых незапланированных им (т.е. будущим игроком) местах.

54 Kb
Рис. 1. Перемещение сетки с
пола (слева) на поверхность
стойки бара (правая часть
рисунка).
    Стволы, патроны, медпомощь
   
Пока Макс разгуливал по уровням в гордом одиночестве, никакой надобности в заботе о его здоровье не наблюдалось. И правда, вред главному герою могла принести только граната, брошенная им самому себе же под ноги в приступе харакирьного настроения. Его можно понять, поскольку до этого момента все ваши уровни представляли для Макса разновидность пытки одиночной камерой (даже если камер-комнат было построено огромное количество). Бродить в длинных коридорах и абсолютно пустых
залах — очень тоскливо. Но сегодня ваш заключенный в уровень получит полное освобождение от одиночества еще до конца этой статьи!
    Только предварительно, чтобы Макс после общения с будущими "сокамерниками" оставался в приемлемой целостности, необходимо выдать ему оружие и боеприпасы. Ведь противники в Max Payne 2 обычно имеют скверный характер. Мододелы специально прививают им дурные привычки. Ну а уж если сохранить "нетронутость" Макса в объятиях врага не удалось, на уровне очень пригодятся средства, временно укрепляющие здоровье: аптечки и стимпаки.
    Трогательная забота о детективе-герое начинается с определения мест, где его будет дожидаться подготовленная вами амуниция и скорое медицинское самообслуживание. Как только подходящее местечко намечено, переходите в режим F4 и
34 Kb
Рис. 2. Выбор амуниции —
оружие, боеприпасы, аптечки.
выравниваете сетку по поверхности (Shift + A). Учтите одно обстоятельство: если раньше вам приходилось выравнивать сетку только по стенам внутренних комнат уровня, то сейчас может понадобиться расположить предметы на других объектах. Например, оружие, лежащее на столах и ящиках, — обычное дело. В этом случае действуете точно так же (см. рис. 1)!
    Как только сетка выровнена там, где вам нужно, уменьшаете размер ее ячеек (клавишей “минус” на цифровой части клавиатуры). Чем мельче ячейки, тем больше узлов сетки попадет на поверхность (например, стойки бара) и тем точнее можно будет определить место для установки подарков Максу. В режиме F3 наводите маркер в нужную точку и нажимаете клавишу N. В окне выбора типа устанавливаемого объекта (New Entity) выбираете категорию Level_Item. Эта группа включает в себя оружие, боеприпасы и аптечки. Необходимая амуниция отбирается из списка (поле Type в группе Level
Item).
    В этом окне доступны:
    а) все виды оружия: Beretta, ColtCommando, DesertEagle, Dragunov, Ingram, Kalashnikov, MP5, PumpShotgun, Striker, SawedShotgun, Sniper;
70 Kb
Рис. 3. Оружие и патроны
выглядят в редакторе кучкой
"лимонов".
    б) боезапас ко всем видам оружия. Их названия состоят из двух частей: приставки Ammo и наименования вида оружия, к которому подходят эти боеприпасы (например, Ammo_ Beretta);
    в) оружие, к которому не требуются боеприпасы — гранаты (Grenade) и зажигательная смесь "коктейль Молотова" (Molotov);
    г) аптечки (Painkiller).
    Выбираете ствол из списка и жмете кнопку ОК. В видовом окне редактора вместо маркера появляется "лимон" — небольшая сфера ярко-желтого цвета (см. рис. 3).
    Это и есть установленное вами в игру оружие. Увидеть его "в натуре" можно будет только в игре. Под выбранное оружие где-нибудь тем же способом располагаете патроны. Например, для “Беретты” логично положить патроны неподалеку. Они расходуются быстро, убойность у них невысокая, их требуется много. Другое дело — снаряжение серьезных пушек. Если выдать игроку весь арсенал сразу, то прохождение уровня станет легким и скучным. Лучше расположить оружие так, чтобы его мощность соответствовала уровню сопротивления противника. Например, по вашему плану игрок должен попасть в зал, где его радостно поджидает десяток-другой наемных убийц. Так выдайте Максу перед прохождением этого места "товарища Калашникова", игрок должен почувствовать о себе заботу. Только патронов к автомату отсыпайте не густо. Чтобы служба медом не казалась. Особенно это касается снайперских винтовок. Стоит переборщить с патронами к ним, и уровень превратится в трехмерную версию офисной "Куробойки".

   
Раздача слонов
   
С оружием у Макса теперь проблем нет (хотя по умолчанию он вооружен пистолетом и парой обойм, но ведь это трудно назвать оружием, верно?). Осталось вложить пушки в руки похитителям здоровья Максима, то есть его врагам. Насколько эти руки окажутся умелыми — в прямом смысле зависит от вас. Мало расставить по уровню врагов. Надо, чтобы эти полигональные тельца имитировали вполне "разумную" деятельность. Для
этого придется составить и буквально "нарисовать" им план действий. Но сначала просто научимся размещать на уровне отдельные единицы вражин.
53 Kb
Рис. 4. Этот голубой шарик
станет в игре одним из NPC,
особенности которого надо
задать в свойствах.
    Установка нового NPC (как врага, так и соратника) не требует каких-то значительных усилий. Действуете точно так же, как при установке обычного 3D-объекта (см. третью и четвертую части) или оружия. Как только на экране появится окно New Entity, выбираете пункт Enemy. В том месте, где находился маркер, появится голубая полусфера и на экран выводится окно свойств NPC (см. рис. 4).
    В окне прописываете имя антигероя (поле Name) и заказываете его внешний вид (поле Skin). Завершаете работу кнопками Apply и OK. Экспортируйте уровень, загрузите спец. версию игры и идите осматривать новорожденного NPC. Если все проделано правильно, вы увидите в том месте, где в редакторе остался голубой "мячик", фигуру врага. Правда, осматривать мешает надоедливая надпись на экране, предупреждающая о том, что AI не знает, как распорядиться вашим новым NPC (см. рис. 5).
    Мозгами займемся чуть позже. Сначала убедитесь в том, что NPC действительно существует там, где вы его поставили. К тому же, неплохо удостовериться, что это именно тот вид NPC, который вы заказывали (в списке множество вариантов, и ошибиться легко). Обратите внимание на поведение врага. Он/она/оно хмуро стоит на месте. При вашем появлении не проявляет никаких чувств. Никакого здорового желания оторвать игроку голову... Оно (желание), может, и есть, да только нечем болезному его осуществлять. Оружие, разложенное вами по уровню, существует исключительно для вас! Виртуальные парни (в Max Payne 2) подбирать его не умеют. Их надо выставлять на уровень уже упакованными в “калашниковы”, “Беретты” и прочие смертоносные удовольствия. Займемся этим вопросом. Возвращаетесь в редактор, к своему уровню. В режиме F5 выделяете своего NPC и нажимаете клавишу B. Появится знакомое по настройке свойств
динамических объектов (см. часть четвертую) окно FSM. Добавляем в раздел Startup строки, которые регулируют поведение врага и отвечают за его экипировку (см. рис. 6).
    this—>AI_SetTarget (May_Nomer_1); — этот пункт не обязателен, но очень полезен. Он указывает врагу, кого он должен не любить. Это обозначение группы, которую вы сами определяете в окне свойств NPC. Для этого надо нажать кнопочку Edit Groups в поле Group. Это позволит вам создать новую группу, назвать
ее как хотите и использовать в дальнейшем членов этой группы в своих целях. В скобках как раз указывается имя вашей новой группы (у меня, как видим, она названа May_Nomer_1). Как только враг увидит кого-нибудь из членов этой группы, он тут же приступит к действиям, описанным ниже.
40 Kb
Рис. 5. Игра очень настойчиво
предлагает заняться
интеллектом новорожденного
NPC.
    По умолчанию в качестве мишени для атаки указывается Player (игрок). Если вы собираетесь делать себе товарища, то пишите Enemies (враги). NPC с такой строкой будет нападать на ваших врагов (будет вашим другом).
    Есть более продвинутый вариант подобной функции — AI_SetTargetGroups( Target1, Target2 ). Заметьте, в качестве параметров надо задавать обязательно группы. Зато тут можно указывать две цели одновременно! Это дает почву для новых идей. Например, у вас в моде три враждующих группировки. Макс не относится ни к одной из них. Так вот — члены банды номер 1 будут атаковать любые следующие сочетания "мишеней": банду номер 2 и 3, но не Макса; банду 3 и Макса, но не членов банды 2; и так далее. Для этого достаточно прописать в качестве параметров названия соответствующих банд или группу, в которую входит Макс.
    this—>AI_SetTactic (Combat); — тут устанавливается вариант поведения NPC. Как он себя будет вести, зависит от указанного в скобках параметра. У меня написано Combat, — значит, никаких переговоров не будет. Как увидел игрока (или его союзников из группы, например, как у меня —
May_Nomer_1) — сразу стрельба на поражение. Изменение параметра в скобках значительно меняет характер NPC. Вариантов довольно много. Cover — NPC патрулирует по узлам AI сетки, которую мы будем рисовать позже. CoverCombat — то же самое, но при этом готов вступить в бой. GuardCombat — похоже на предыдущий вариант, но в этом случае NPC что-то охраняет и даже в горячке боя не побежит за вами в погоню, а вернется к охраняемому объекту. Follow — попутчик игрока, который следует за ним, но не участвует в сражении. Последний вариант можно применить к миссиям "сопровождения". Когда надо довести кого-то из пункта А в пункт Б и проследить, чтобы ему не оторвали голову. FollowCombat — товарищ по оружию, который будет сопровождать и воевать вместе с вами.
    this—>C_RemoveAllWeapons (BerettaDual); — удаляет любое оружие из рук врага и оставляет только то, что прописано в скобках. К этому оружию добавляется бесконечный боезапас. В этом примере у NPC в обеих руках окажется по “Беретте”.
    this—> C_PickupWeapon (PumpShotgun); — добавляет парню помповое ружье. Этот пункт в данной ситуации будет отменять предыдущий. То есть вместо “Беретт” в каждой руке противник будет поливать вас картечью из помпового ружья. Вот если использовать эту запись в связи с каким-то событием, получится
23 Kb
Рис. 6. Эти строчки уравнивают
в правах противников. Теперь
оба имеют право на смерть.
гораздо интересней. Помните грузчика со склада, который был без оружия, пока вы не повернулись к нему спиной?
    this—>C_PickupAmmo (PumpShotgun, 16); — обеспечиваем врага боеприпасами к оружию, которое указано в скобках (здесь — к помповому ружью) и в количестве, которое указано цифрами после названия оружия (у нас тут стоит "16"). Существенный момент: если не будет указано количество патронов, то NPC не сможет использовать помповое ружье, которое мы дали ему в предыдущей записи. После того как эти патроны будут израсходованы, вступит в силу пункт про “Беретты” с бесконечным боезапасом (если его прописать чуть раньше). Не будет ситуации, когда противник израсходовал патроны и тупо стоит в ожидании собственной смерти.
    Функций и возможных параметров к ним существует больше, чем описано здесь. Расписывать все в одной статье нереально, да и не нужно. Принцип, я надеюсь, вы уже поняли. Это не все возможные функции, но их достаточно для организации хорошей драчки.
    В разделе Startup у вас должно получиться что-нибудь вроде этого (см. рис. 6):
    this—>AI_SetTarget (May_Nomer_1);
    this—>AI_SetTactic (Combat);
    this—>C_RemoveAllWeapons (BerettaDual);
    this—> C_PickupWeapon (PumpShotgun);
    this—>C_PickupAmmo (PumpShotgun, 16);

55 Kb
Рис. 7. По этим синим точкам
враги спустятся по лестнице
и спрячутся за ящиком.
    Укладка мозгов
   
Пропишем нашему дорогому поглотителю пуль маршрут движения. Чтобы он был занят делом, и движок не напрягал воплями WARNING: AI can't find valid source waypoint!. Не нравится движку отсутствие предопределенных точек — ну так дадим ему их.
    Переходите в режим F3. Устанавливаете маркер на ближайшее место, куда должен отправиться ваш подопечный. Клавишей N вызываете окно объектов. Выбираете тип ANI. Теперь из поверхности пола торчит синяя сфера. Это и есть первая точка-цель (waypoint) маршрута NPC. Для всех последующих точек операция повторяется. В результате вы рисуете пути движения врагов (см. рис. 7).
    Все установленные точки-цели образуют вместе AI-сеть. Учтите, что все NPC передвигаются в игре только от одного узла AI-сетки до другого. Порядковый номер точки не играет роли. NPC будет выбирать кратчайший путь до цели по ближайшим вейпойнтам. Отсюда вытекают важные условия правильности построения AI-сетки.
    — ВСЕ помещения уровня должны быть покрыты синими сферами точек-целей! Иначе образуются "мертвые зоны", в которые NPC не будут заходить ни при каких
57 Kb
Рис. 8 Враги сожгли родную
хату, а теперь пытаются
спрятаться за ящиком (как им
было прописано).
условиях. Можно, конечно, продумать вариант, когда на очень тяжелом для прохождения уровне специально устроить игроку "комнаты отдыха", где он может передохнуть, подлечиться, подзарядиться перед очередным броском в пекло. Но это спорное решение (потому что нечестное), и его можно рассматривать как исключительный случай.
    — Прежде чем рисовать цепочки вейпойнтов, посмотрите на комнату сверху. Отметьте для себя путь, по которому вы сами двигались бы, находясь под обстрелом. Чем грамотнее вы будете использовать все естественные укрытия — лестницы, ящики, ниши и т.д., — тем умнее будут выглядеть враги в вашем моде. Не забывайте, что передвижение в тени усложняет обнаружение и обезвреживание врагов. Поэтому не лишним будет использовать карту освещения уровня для того, чтобы ваши управляемые боевики не вылезали на ярко освещенные участки, чтобы стать легкой добычей пули снайпера.
    Вообще, построение AI-сети требует парадоксальной перестройки сознания. Вы должны настроить себя на то, что ваш настоящий враг — Max Payne! Ведь правда, под этим фейсом будет осваивать уровень совершенно посторонний вам геймер, который пришел уничтожить с такой любовью расставленных вами NPC... И кто после этого враг?
    После того как последняя сфера точки-цели будет уложена, можно сохранить уровень, экспортировать его в игру и заценить результат. Враги должны бегать так, как вы их этому научили (см. рис. 8). Если беготня их выглядит не совсем разумной, не стоит грешить на AI. Бессистемно разбрасывая по уровню точки маршрутов движения, вы, собственно говоря, будете не последним лицом, ответственным за неразумность врагов.

   
* * *
   
На этом мы заканчиваем цикл статей, посвященных работе с редактором MaxEd. Все самое главное сказано. Ваши первые комнаты давно превратились в разветвленные лабиринты многокомнатных уровней. Помещения наполняют разнообразные предметы, созданные средствами редактора или построенные в 3D Max (как созвучны их названия). Лампы и факелы готовы к освещению кровавых событий. Бойцы курят в ожидании команды Start Level и обсуждают между собой AI создателя сетки точек передвижения. Все как обычно. Пора загрузить уровень и задать им перца!
Комментарии
Загрузка комментариев