FAQ по импортированию карт в мод Serious Tournament Mod. Приспособление карт для игры с ботами. Часть 2.
ЧАСТЬ III. РАССТАВЛЯЕМ ВЕЙПОИНТЫ С НУЛЯ, ДЕЛАЕМ КАРТУ ИГРАБЕЛЬНОЙ
Прежде, чем импортировать в мод какую-либо карту (не важно, уже сделанную, или уже существующую), следует знать о том, что не стоит замахиваться на карту вселенских масштабов, иначе ваш труд рискует оказаться заброшенным (порой импортирование карты в мод занимает много ночей). Тем не менее, при должном умении и терпении под мод можно приспособить почти любую карту.
Но вам следует знать, что данный момент боты плохо дружат с картами следующего типа:
1) Карты с изменённой гравитацией. Нет, ботам не составит особого труда парить в воздухе при слабой гравитации. Но если гравитация изменена настолько, что игроки могут бегать по стенам или по потолку (или, что ещё страшнее, если комната вращается, как волчок - вспомним уровень The Pit в кампании оригинального The Second Encounter), то на данный момент боты адекватно там перемещаться не могут ВООБЩЕ, даже если проставить, казалось бы, правильно вейпоинты по всем периметрам стен и потолков. Именно по этой причине карта Lefty из Gold Mappack'а не была включена в мод.
2) Карты вида "в космосе" или "вокруг лава". К сожалению, у ботов с осторожностью наблюдаются проблемы, и когда они видят и атакуют противника, то вейпоинты для них уже не существуют (за редкими исключениями - в частности, в специальных режимах). Поэтому, при игре на подобных картах боты будут в постоянном минусе. Например, вот на такой карте:
Хотим обрадовать, что это актуально только для версии 1.00А. В новой версии мода будет присутствовать новый класс под названием BotWall, являющийся невидимой преградой для ботов, и уже в этой статье мы вам сразу, на будущее, расскажем, как и где его необходимо правильно устанавливать.
Кстати ! На изначальной стадии разработки мода, эта проблема уже была решена путём создания невидимых брашей со специальными свойствами (во время битвы боты останавливались, касаясь их), однако к релизу эта возможность сломалась, и в версии 1.00А функцонирует очень и очень слабо, буквально процентов на 5, поэтому об этом способе мы вам не расскажем (внимательные могут найти на некоторых картах). Ах, да, именно поэтому в 1.00А была включена именно зимняя версия Fortress, где вместо лавы - лёд, который не отнимает здоровье, и куда падать совсем не страшно.
3) Карты с низким количеством fps . Например, с кучей сложнейших брашей, которые автор не заменил на модели, либо же это не представлялось возможным. Даже если вы настолько оптимизировали свою сложнейшую карту, что там стало 60 fps вместо 25, то даже при двух добавленных ботах карта может нещадно лагать (особенно при использовании взрывоопасного оружия - rocket launcher, grenade launcher, cannon ). И да, от большого количества ботов лагает сильнее, чем от такого же количества игроков. Поэтому будьте готовы к тому, что ВНЕЗАПНО ваша карта окажется играбельна с 4, а не с 12, как вы планировали, ботами. А чтобы это проверить, можно на "голой" карте добавить несколько ботов на карту (если player start'ов нету, они "стартуют" в координатах 0, 0, 0 - обычно это центр карты) и посмотреть, как изменится FPS с присутствующими на карте ботами.
В остальном же, боты умеют бегать, прыгать, ходить шагом, делать трюки (при правильном расставлении вейпоинтов), плавать в воде (чуть чуть неадекватно, но всё же), ездить на лифтах, прыгать на джамперах, использовать телепорты и даже, внимание, включать выключатели. А ещё - убивать Санту на Йодлере (а вот монстров пока не очень - жизнь ботов в кооперативе будет лишь в будущем).
_____________________________
Что же, приступим к добавлению вейпоинтов на карту с нуля.
Нашим подопытным испытуемым на этот раз будет старенькая карта DM Marble, которая выполнена в хорошо узнаваемом стиле стандартной карты The Lost Tomb, но обладает чуть более сложной архитектурой - тут есть и лифт, и джамперы, и телепорты.
Переносим уровень в директорию мода, открываем редактором. Итак, перед нами стандартное окно редактора, что же делать, как же быть дальше ? Может быть, забить на это дело ? Нет !
В редакторе по умолчанию содержится новое древо со всеми теми объектами, о которых мы рассказывали вам в первой части статьи. К сожалению, иконки для них недоработаны, поэтому, чтобы увидеть, что есть что, просто можно, наведя курсор на соответствующий объект.
Если вы внимательно читали описание объектов, то вам следует понять, с каких объектов мы начнём. Да, начинаем с вейпоинтов (Node) - расставляем их на карте, предварительно нажав Num 9, чтобы были видны все объекты (думаю, про-мапперам эти действия разъяснять не нужно, но пусть будет). Начнём, пожалуй, с любого попавшегося под руку Player Start'а - они должны быть в пределах "досягаемости" вейпоинтов. Получилась примерно вот такая картина, и это является примерно 0.1 % от того, что нужно сделать:
Теперь начинаем копировать вейпоинты по той траектории, по которой будет бегать бот. Конечно, перед этим следует самому узнать карту и знать, где можно бегать, а где нет. Итак, выделяем вейпоинт, копируем в буфер путём классического Ctrl + C, и начинаем клонировать его по всей карте. Вот так будут выглядеть расставленные вейпоинты от Player Start'а до ближайшего прохода, а так же в сторону лестницы:
Продолжаем расставлять вейпоинты, по пути "захватывая" не только Player Start'ы, но и всевозможные итемы - патроны, аптечки, броню. По умолчанию боты их, кстати, и так могут увидеть, но лучше будет, если к ним (и от них !) будет вести отдельный путь.
Будьте внимательны в подобных проходах, где часто находятся источники света, и не скопируйте вейпоинт на источник света, иначе он повиснет над землёй, и в дальнейшем бот будет сильно тупить. В обычных местах, где не надо прыгать, кататься на лифтах и т.д., вейпоинты должны быть расположены на "полу".
Внимание ! В подобных местах тоже должны быть вейпоинты, т.к. во время битвы с врагом бот может оказаться там, и ему надо будет уметь грамотно оттуда же уйти, вместо того, чтобы тыкаться в стену в сторону других вейпоинтов.
Если на нашем "пути" встречается такая преграда, как дверь (не так важно, как она открывается - при касании игроком или "перед носом"), то ставим вейпоинт прямо по середине двери, как ни в чём не бывало. И, конечно же, рядом. С обоих сторон, да.
Итак, облетев всю карту, мы видим, что во всех основных местах (лифты, телепорты и джамперы пока игнорируем) вейпоинты расставлены. Но даже не думайте расслабляться - вся работа впереди. Проставленные во всех местах вейпоинты - это лишь процентов 20 от всего, что необходимо сделать.
Чтобы боты бегали между вейпоинтами, нужно их направить друг на друга. Для этого выделяем один вейпоинт, наводим курсор на соседний, и нажимаем Alt + Ctrl + 2 кнопка мыши. И сразу же видим, что слева, в поле "Target" (цель), появился другой Node. Но у всех вейпоинтов одинаковые названия (и изменить их нельзя), поэтому, чтобы видеть, какие именно вейпоинты соединены друг с другом, нажимаем клавишу G. Вуаля !
Теперь необходимо проделать обратное - соединить так же второй вейпоинт с первым. После этого оба вейпоинта полноценно соединены друг с другом, и если бот окажется в зоне действия, он сможет бегать туда и обратно.
Не стесняемся, и соединяем все ближайшие вейпоинты друг с другом в этом коридоре. Получиться должно примерно вот так:
Продолжаем, доходим до так называемых развилок. Но ничего сложного в соединении вейпоинтов нету и здесь:
Вейпоинты должны быть соединены лишь друг с другом, и ни с чем иначе - ни с аптечками, ни с оружием, ни с player start'ами, и так далее. Иногда можно промахнуться, и случайно направить вейпоинт, скажем, на источник освещения, попавшийся под руку. В таком случае в свойствах вейпоинта, от которого идёт путь к странному объекту, будет написано "None", а не "Node". В этих случаях надо нажать на кнопку "No target", чтобы отменить это недоразумение, и вновь направить вейпоинт туда, куда надо.
В этом же месте мы объясним вам про одно важное свойство вейпоинта. У каждого вейпоинта есть свойство "Marker range", по умолчанию равное трём. Это означает, что на самом деле бот перемещается не чётко по вейпоинтам; он передвигается к следующему вейпоинту тогда, когда коснётся зоны предыдущего. В этом коридорчике (и в других подобных) 3 - это слишком много, потому что при поворотах бот рискует "собирать носом углы". Выделяем, зажав shift, оба вейпоинта около угла коридора. Зелёный круг, это и есть marker range - зона действия вейпоинта. Реальный путь бота в одну сторону будет выглядеть примерно так, как показано на скриншоте розовой линией. Именно в том месте, где линия закрашена чёрным, бот очень часто будет тыкаться в угол:
Лучше всего будет выделить сразу все вейпоинты в этом коридоре. Выделяем, и меняем их marker range с 3 на, скажем, 1.5. Меньше не очень желательно (особенно на таких неровных местах, как лестницы), иначе боты будут двигаться чересчур "рельсово", к тому же, будут проскакивать вейпоинты, и бегать туда-сюда. В общем, меняем на 1.5, и тогда реальный путь ботов в обе стороны будет гораздо более адекватным:
Кстати ! Если необходимо выделить сразу все вейпоинты на карте вообще, неважно, для каких действий (уменьшить marker range, если карта очень маленькая, или же увеличить, если карта наподобие Go Hunting, либо же удалить вовсе), можно кликнуть правой кнопкой по вейпоинту и нажать Ctrl + Shift + E. Как подсказывает опыт, даже некоторые про-мапперы забывают или не подозревают вовсе об этой функции.
Так вот, продолжаем. В центральной "арене" карты после должной работы сетка должна выглядеть примерно так:
Тем не менее, не могут же боты только и делать, что бегать, как магниты, прилипшие к земле ? Верно. Поэтому, начинаем дополнять сетку путём обучения ботов перемещению по карте самыми разными способами.
Первее всего, сделаем так, чтобы боты могли банально прыгать вниз с верхних ярусов. Для этого соответствующие вейпоинты надо направить на нижние (можно на несколько сразу), и эта связь должна быть односторонней - нижние вейпоинты на верхние здесь направлять не надо !
Буквально минута работы, и теперь во многих местах ботах смогут самостоятельно бегать вниз (а не только тогда, когда увидят противника). Чтобы новая сетка не затерялась среди старой, рядом с ней были проведены салатовые стрелочки:
В этом же зале присутствует джампер. Сделать так, чтобы боты полноценно могли им пользоваться, очень несложно - ставим вейпоинт прямо в джампер (и настраиваем marker range так, чтобы бот касался его при касании джампера), направляем на этот вейпоинт парочку ближайших, а затем от вейпоинта в джампере тянем сетку в пару разных мест, куда можно долететь при использовании этого джампера (на всякий случай предварительно тестируем это прямо в редакторе путём нажатия клавиши T). Получится примерно так (красные стрелочки):
Теперь переходим к ещё одному важному типу движения - прыжки. В этом месте он так и напрашивается, поэтому в том месте, куда можно допрыгнуть, ставим вейпоинт, и активируем опцию "Need Jump". Это означает, что когда бот переключится на данный вейпоинт, он прыгнет в его сторону от предыдущего вейпоинта, так что направляем на "прыгательный" вейпоинт самый ближайший, и на всякий случай немножко увеличиваем (в нашем случае - с 1.75 до 2) marker range этого вейпоинта - если он будет слишком маленьким, бот может его "перепрыгнуть", и прыгать над ним туда и обратно ещё долго, пока наконец не коснётся его зоны. А потом этот вейпоинт направляем уже куда-нибудь подальше, должна получится вот такая картина (синие стрелочки):
А вот в этом месте, являющимся эдаким "бортиком" между двумя зонами, который можно перепрыгнуть с обоих, уже можно (нет, даже нужно) сделать две сетки а-ля "туда и обратно". Они выделены синим и зелёным:
На карте есть четыре телепорта, и по два из них связаны друг с другом, т.е., можно телепортнуться туда и обратно. Чтобы посмотреть, какие именно телепорты связаны друг с другом, используется та же самая клавиша G - они связаны зелёной сеткой:
Соответственно, каждую пару телепортов надо связать двумя параллельными сетками для телепорта "туда" и "обратно", потому что если использовать единую сетку, то бот может начать бегать в один и тот же телепорт туда и обратно без конца. Так же, как и с джампером, ставим вейпоинт прямо в телепорт, протягиваем к нему парочку ближайших, затем соединяем его с вейпоинтом, стоящим у того телепорта, в котором появится бот после телепортации, а от этого уже вейпоинта протягиваем сетку к одному-двум вейпоинтам подальше. И наоборот.
У вейпоинта, находящегося в телепорте, должен быть маленький marker range (шарообразная салатовая область, напоминаем), едва выпирающий за пределы зоны телепорта (квадратная тёмно-бирюзовая зона). Тянем к нему сетку, тщательно проверяем, что оба вейпоинта направились именно на другой вейпоинт, а не на телепорт (лучше всего переместить камеру в зону телепорта, то есть, вплотную к вейпоинту). По инструкции выше продолжаем, односторонняя сетка готова:
Теперь протягиваем сетку уже в обратную сторону, то есть, обратно в данную комнатку. Получается примерно подобное:
Теперь переходим к ещё одной составляющей многих карт - лифты. Там так же необходимо реализовывать "двухстороннюю" сетку, т.е. разную для подъёма на лифт и с лифта, но если сетка подъёма с лифта вниз ничем особенным не кажется, то для движения по лифту применяется кое-что новое.
Итак, помещаем на лифт вейпоинт (желательно на самый его центр, но подгоняем вручную, на глаз - координаты мувинг браша, представляющего из себя лифт, вовсе необязательно приходится на его центр, а иногда может быть на угол). Затем, в том месте, куда нас привозит лифт, прямо в воздух ставим ещё один вейпоинт (marker range у него не должен быть чересчур маленьким), у которого обязательно должны быть такие же X и Z координаты, как и у нижнего, т.е. он должен быть чётко над ним. Так вот, от ближайшего вейпоинта к лифту, протягиваем сетку к вейпоинту на лифте, от него - к вейпоинту над лифтом, а от вейпоинта над лифтом - куда-нибудь дальше. Одностороннюю, напоминаем.
Но для того, чтобы это всё правильно функционировало, необходимо применить кое-какую опцию к тому вейпоинту, который над лифтом (к которому приезжает лифт), а именно поставить галку у опции "Lift". Теперь бот будет спокойно стоять в лифте, пока не коснётся зоны этого вейпоинта. Выглядит это примерно так:
А чтобы научить ботов бегать в обратную сторону, делаем примерно вот так. В итоге, красная линия - это пусть на лифте вверх, а синия - это путь вниз (с игнорированием лифта):
Однако, это ещё не всё. Чтобы боты не пытались запрыгнуть на лифт в то время, когда он наверху (и не оказались раздавленными, или что-либо в этом роде), необходимо выделить нижний маркер, выбрать у него опцию "Waypoint switch - Target", и направить его на нижний вейпоинт, находящийся в лифте, сочетанием клавиш Ctrl + Alt + левая кнопка мыши. Если появилась красная стрелочка, а у под "Waypoint switch - Target" написано "Node", значит, сделано всё правильно:
Необходимо так же оптимизировать поведение ботов вот в подобных местах. Вполне может случиться так, что во время боя бот упадёт в яму и ещё долгое время будет "тупить", ища глазами врага, который вряд ли с такой же охотой упадёт за ним.
Специально для того, чтобы этого не происходило, ставим в это место тачфилд, чтобы он был по ширине и длине равен размеру данной "ямы". Заходим в его опции, ставим галочку у новой опции "Clear bot targets". Сохраняем карту и открываем её ещё раз, получится вот такая картина:
Теперь, когда боты будут падать в яму и касаться этого тачфилда, у них мгновенно сбросится цель, и они спокойно побегут вниз по своим делам.
В этом же месте может произойти ещё одна нежелательная ситуация: пробегая внизу, бот неожиданно может увидеть парящий вверху дробовик, и начать бегать под ним, пытаясь его достать. В этом случае необходимо выделить дробовик и снять галочку у новой опции "Bot can see it". Теперь бот не увидит этот дробовик из ниоткуда, а лишь возьмёт его, когда нарочно побежит к нему, с целью взять ближайшее оружие, или же просто упадёт в эту ямку.
Есть такие места, где необходимо оставить видимость объекта, но не с любой точки карты. Как, например, у этой аптечки - увидев её с края комнаты, бот побежит в её сторону и будет бегать у колонны:
Оставляем галку "bot can see it", и переходим к более продвинутой опции "radius (bot detecting)". Настраиваем радиус видимости предмета таким образом, чтобы он был как можно более большим, но чтобы до пола он (почти) не доставал, в нашем случае подходящим радиусом, кажется, должно стать 8:
На секунду представим, что вот на этой люстре так же находится сердце (+100 здоровья), до которого можно допрыгнуть только безумным рокет джампом (на данный момент боты их делать не умеют). Для этого крайне желательно не только убрать галку "Bot can see it", но и поставить галку "Ignore it":
Итак. Окинув взглядом карту, облетев каждую комнатку, каждый уголок, проверив все места, мы видим, что вейпоинты проставлены, сетка готова, а радиус видимости всех трудноступных итемов выставлен корректно.
Но не думайте, что на этом работа закончено - впереди ещё, возможно, не один час работы, и мы абсолютно серьёзно. На данном этапе, когда вейпоинты и их сетка полностью (на ваш взгляд) готовы, необходимо проверить их на наличие ошибок.
Первая часть проверки достаточно проста, и её можно сделать прямо в редакторе. Заходим в режим тестирования карты (так, чтобы можно было в ней побегать - путём нажатия клавиши "T") и ... сразу же видим красное сообщение, вылезающее без остановки. В нашем случае, по причине использования английской версии, не видно, что там написано, но на самом деле там написано "Вейпоинт ни с чем не связан (-42.437500;-15.000000;-44.562500)":
Что это означает, думаем, вы поняли сами - где-то лежит вейпоинт, к которому (или от которого, или всё сразу) не протянута сетка, а для того, чтобы узнать, где это, сразу же приведены координаты, которые означают X, Y и Z соответственно. Находим это место на карте, и вот он и нашёлся - забытый вейпоинт:
Протягиваем к нему и от него сетку, тестируем - красное сообщение исчезает.
Однако, на этом ещё не всё. Теперь необходимо так же зайти в режим тестирования карты, и нажать "Y" - произойдёт добавление бота на карту. Спустя некоторое время мы видим в консоли ещё одно безобразие, на самом деле там написано "Ошибка таргета вейпоинта (0.000000,-25.375000,-7.937500)":
Это означает, что один из вейпоинтов связан не с другим вейпоинтом, а с чем-то другим - с итемом, с источником освещением, со стеной, с тачфилдом, или подобным "левым" объектом. Вариантов множество, и такую ситуацию вполне можно "прошляпить".
Итак, мы имеем координаты (они так же относятся к вейпоинту, а не к тому объекту, на который они направлены), но здесь есть подвох: если в случае вейпоинта без сетки координаты означают X, Y и Z соответственно, то в случае неверного таргета координаты означают "?", X и Y, где значок вопроса, по идее, должен означать "Z", но вместо "-19.75" (координата, по которой мы нашли неверный вейпоинт) почему-то прописано ноль, что осложнит поиск неверного вейпоинта. В любом случае, высота и одна из сторон нам известна, поэтому долгое время это всё-таки не займёт. Собственно, вейпоинт с неверной сеткой найдён, и чтобы направить его на другой вейпоинт, а не на источник освещения, нажимаем в свойствах вейпоинта "No target" (мы уже рассматривали этот случай), а если выйдет, что случайно удалена нужная сетка, то проще нажать правой кнопкой по вейпоинту и кликнуть по "Clear all targets", а затем направить его вновь на все нужные вейпоинты вокруг. Снова тестируем из редактора - ошибки в консоли не видать, значит, всё в порядке.
Теперь, когда, казалось бы, критических ошибок у вейпоинтов не наблюдается, переходим к самому интересному - наблюдению за бегом ботов по карте. Для этого запускаем сам мод, выбираем "NETWORK", "START SERVER" (не "BOTMATCH"), в "Game type" выбираем "Fragmatch", в списке карт выбираем подопытную, а в Game Options ставим лимит времени, скажем, в 5 минут - вполне должно быть достаточно для такой маленькой карты (хотя, всё-таки, лучше 10).
Нажимаем "START", в опции Observer ставим "Yes" (самое важное), и ещё раз нажимаем "START". Перед нами чёрный экран, нажимаем "Y" - появляется бот, за которым мы и будем наблюдать:
Понаблюдав за ботом, мы можем заметить, что ни за 5, ни за 10 минут он не оббежит всю карту - в нашем случае бот проигнорировал лифт, 2 джампера из трёх, а так же обе "ямы" с тачфилдом и ещё пару значимых мест. Зато нигде не застрял - и это уже хорошо, и говорит о том, что сетка выполнена хорошо (в тех местах, где он пробегал).
Теперь займёмся более интересным и полезным - понаблюдаем сразу за двумя ботами, потому что это во много раз увеличит возможные сценарии, боты смогут пробегать в гораздо более разных местах (и появляться тоже в разных). Для этого повторяем все вышеуказанные действия, но нажимаем "Y" два раза, а затем нажимаем "Num 2" (для больших карт рекомендуем сразу четыре бота и "Num 4") - вуаля:
Спустя две с половиной минуты, после одной из баталий, раненый бот решил таки побежать по лифту к здоровью, но ... застрял, оставшись кататься в лифте туда-сюда:
Для того, чтобы это исправить, закрываем мод, вновь открываем редактор (его можно, в принципе, не закрывать вообще, главное не сохранять карту в момент запущенной игры), перемещаемся к этому месту и меняем marker range вейпоинта с галкой Lift с 1.75, например, на 2.25:
Это сработало - теперь боты нормально поднимаются по лифту, берут здоровье, а потом чаще всего убегают обратно по лифту вниз (что доказывает работоспособность ещё одной части сетки):
К сожалению, за пять минут боты так и не воспользовались телепортами, зато произошло кое что другое - в самом конце, буквально за 7 секунд до окончания таймлимита в 5 минут, бот внезапно застрял в центральной, самой большой "арене", под платформой, ведущей к здоровью +50:
Это может произойти по двум причинам. В нашем случае более возможной причиной стал слишком большой радиус действия у лежащего вверху здоровья +50. Выставив значение в 8, мы подумали о том, чтобы радиус действия не касался пола, но в бою оказалось так, что бот убил противника ... в момент прыжка. И в эту самую милисекунду, задев радиус действия аптечки в полёте, бот переключил цель с мёртвого врага прямо на эту аптечку ! Для этого надо изменить radius с 8, скажем, до 5. Теперь, даже подпрыгнув, бот заденет "радиус" настолько вплотную к колонне, что оттуда здоровье всё равно не будет "видно":
Однако, это вполне могло произойти и ещё по одной причине, не создав бы мы такую густую сетку (подтверждено ранним опытом автора статьи). Сейчас сетка выглядит вот так:
Представим, что сетка была бы гораздо более редкой, казалось бы, выглядев "и так норм", а на деле вовсе нет. Если бы сетка была такая, как на скриншоте ниже, то бот, оказавшись там, куда ведёт розовая стрелочка, может отреагировать не на вейпоинты, лежащие "на полу", а на тот, который находится прямо под ним (и отмечен оранжевой стрелочкой), потому что де-факто он ближе по координатам:
Именно поэтому не стоит халявить с сеткой, а делать её как можно более густой, и прорабатывать её в картах любого типа, в том числе и многоуровневых. Лучше добавить лишний вейпоинт, чем расширять радиус действия старого, поверьте.
А ещё полезно бывает разнообразить карту несколькими новыми вейпоинтами, если вам кажется, что боты бегают чересчур скучно и линейно. Например, возвращаясь к испытуемой карте - этот ящик так и напрашивается, чтобы через него перепрыгивали. Здесь параллельная сетка, пожалуй, и не нужна во все. Было:
Стало. Не забываем тестировать в игре:
Если это является банальным прыжком через ящик, то на других картах может оказаться так, что значительная часть геймплея состоит из прыжков разной степени сложности. И всех их необходимо проработать и тестировать часами. Посмотреть, как они устроены, можно, открыв уже какую-нибудь из существующих карт, например, одну из самых сложных в этом плане - Fortess (в более ранней стадии - сейчас там прыжков ещё больше):
Самой сложной задачей здесь было "научить" ботов прыгать до пушки, притом с двух разных мест (а ведь в идеале надо добавить ещё парочку). Самым быстрым и лёгким способом проверить, может ли бот добраться до указанного места, является добавление на труднодоступное место такой объект, как SkullHold (череп) и загрузив соответствующий режим. Именно к этому объекту боты побегут в первую очередь. А ещё можно использовать не SkullHold, а KOTH Point, и не один.
В грядущей (в 1.00А такого ещё нет) версии Troy (напоминаем - это главный и единственный программист мода) решил ещё более облегчить тестирование вейпоинтов. В режиме обсервинга, переключившись на свободную камеру (клавиша Shift), можно будет посмотреть, как выглядит сетка, ведущая из одного места в другой. Для этого необходимо подлететь к "точке A", нажать клавишу "O" (английскую), затем подлететь к "точке B" и нажать клавишу "O" ещё раз. Появится выделенным красным сетка (на момент разработки показывается только один вариант - самый "быстрый" по "мнению" искуственного интеллекта). Здесь мы видим, что путь из подземелья к броне +200 вышел немножечко странноватым, это значит, что сетку нужно доработать:
В дальнейшем можно будет делать ещё легче и, кажется, не прибегать к использованию черепа или KOTH точек. Уже после прокладывания сетки в камере из точки A в точку B, можно будет ввести команду /TurnOnOffAI(), которая отключит лишний интеллект ботов, проложит им путь до первой точки, а от неё - до второй. Повторный ввод этой команды снова включит ИИ.
Это дело будущего, а пока что довольствуемся "живым" обсервингом ботов !
Возвращаясь в настоящее: уже после окончания над работой статьи выяснилось, что мы совершенно забыли вам рассказать, как научить ботов бегать медленно (шагом). Для этого необходимо выделить вейпоинт, и активировать галочку "Carefully" - теперь боты будут бежать медленно по направлению к этому вейпоинту (а не от него !). Это крайне полезно вот в таких местах:
Ну, что же ! Можно считать, что все основы, необходимые для создания обычных dm / tdm карт для ботов, а так же их тестирования, уже выучены.
Теперь пора перейти к оставшимся, так сказать, "вкусностям".
Но вам следует знать, что данный момент боты плохо дружат с картами следующего типа:
1) Карты с изменённой гравитацией. Нет, ботам не составит особого труда парить в воздухе при слабой гравитации. Но если гравитация изменена настолько, что игроки могут бегать по стенам или по потолку (или, что ещё страшнее, если комната вращается, как волчок - вспомним уровень The Pit в кампании оригинального The Second Encounter), то на данный момент боты адекватно там перемещаться не могут ВООБЩЕ, даже если проставить, казалось бы, правильно вейпоинты по всем периметрам стен и потолков. Именно по этой причине карта Lefty из Gold Mappack'а не была включена в мод.
2) Карты вида "в космосе" или "вокруг лава". К сожалению, у ботов с осторожностью наблюдаются проблемы, и когда они видят и атакуют противника, то вейпоинты для них уже не существуют (за редкими исключениями - в частности, в специальных режимах). Поэтому, при игре на подобных картах боты будут в постоянном минусе. Например, вот на такой карте:
Хотим обрадовать, что это актуально только для версии 1.00А. В новой версии мода будет присутствовать новый класс под названием BotWall, являющийся невидимой преградой для ботов, и уже в этой статье мы вам сразу, на будущее, расскажем, как и где его необходимо правильно устанавливать.
Кстати ! На изначальной стадии разработки мода, эта проблема уже была решена путём создания невидимых брашей со специальными свойствами (во время битвы боты останавливались, касаясь их), однако к релизу эта возможность сломалась, и в версии 1.00А функцонирует очень и очень слабо, буквально процентов на 5, поэтому об этом способе мы вам не расскажем (внимательные могут найти на некоторых картах). Ах, да, именно поэтому в 1.00А была включена именно зимняя версия Fortress, где вместо лавы - лёд, который не отнимает здоровье, и куда падать совсем не страшно.
3) Карты с низким количеством fps . Например, с кучей сложнейших брашей, которые автор не заменил на модели, либо же это не представлялось возможным. Даже если вы настолько оптимизировали свою сложнейшую карту, что там стало 60 fps вместо 25, то даже при двух добавленных ботах карта может нещадно лагать (особенно при использовании взрывоопасного оружия - rocket launcher, grenade launcher, cannon ). И да, от большого количества ботов лагает сильнее, чем от такого же количества игроков. Поэтому будьте готовы к тому, что ВНЕЗАПНО ваша карта окажется играбельна с 4, а не с 12, как вы планировали, ботами. А чтобы это проверить, можно на "голой" карте добавить несколько ботов на карту (если player start'ов нету, они "стартуют" в координатах 0, 0, 0 - обычно это центр карты) и посмотреть, как изменится FPS с присутствующими на карте ботами.
В остальном же, боты умеют бегать, прыгать, ходить шагом, делать трюки (при правильном расставлении вейпоинтов), плавать в воде (чуть чуть неадекватно, но всё же), ездить на лифтах, прыгать на джамперах, использовать телепорты и даже, внимание, включать выключатели. А ещё - убивать Санту на Йодлере (а вот монстров пока не очень - жизнь ботов в кооперативе будет лишь в будущем).
_____________________________
Что же, приступим к добавлению вейпоинтов на карту с нуля.
Нашим подопытным испытуемым на этот раз будет старенькая карта DM Marble, которая выполнена в хорошо узнаваемом стиле стандартной карты The Lost Tomb, но обладает чуть более сложной архитектурой - тут есть и лифт, и джамперы, и телепорты.
Переносим уровень в директорию мода, открываем редактором. Итак, перед нами стандартное окно редактора, что же делать, как же быть дальше ? Может быть, забить на это дело ? Нет !
В редакторе по умолчанию содержится новое древо со всеми теми объектами, о которых мы рассказывали вам в первой части статьи. К сожалению, иконки для них недоработаны, поэтому, чтобы увидеть, что есть что, просто можно, наведя курсор на соответствующий объект.
Если вы внимательно читали описание объектов, то вам следует понять, с каких объектов мы начнём. Да, начинаем с вейпоинтов (Node) - расставляем их на карте, предварительно нажав Num 9, чтобы были видны все объекты (думаю, про-мапперам эти действия разъяснять не нужно, но пусть будет). Начнём, пожалуй, с любого попавшегося под руку Player Start'а - они должны быть в пределах "досягаемости" вейпоинтов. Получилась примерно вот такая картина, и это является примерно 0.1 % от того, что нужно сделать:
Теперь начинаем копировать вейпоинты по той траектории, по которой будет бегать бот. Конечно, перед этим следует самому узнать карту и знать, где можно бегать, а где нет. Итак, выделяем вейпоинт, копируем в буфер путём классического Ctrl + C, и начинаем клонировать его по всей карте. Вот так будут выглядеть расставленные вейпоинты от Player Start'а до ближайшего прохода, а так же в сторону лестницы:
Продолжаем расставлять вейпоинты, по пути "захватывая" не только Player Start'ы, но и всевозможные итемы - патроны, аптечки, броню. По умолчанию боты их, кстати, и так могут увидеть, но лучше будет, если к ним (и от них !) будет вести отдельный путь.
Будьте внимательны в подобных проходах, где часто находятся источники света, и не скопируйте вейпоинт на источник света, иначе он повиснет над землёй, и в дальнейшем бот будет сильно тупить. В обычных местах, где не надо прыгать, кататься на лифтах и т.д., вейпоинты должны быть расположены на "полу".
Внимание ! В подобных местах тоже должны быть вейпоинты, т.к. во время битвы с врагом бот может оказаться там, и ему надо будет уметь грамотно оттуда же уйти, вместо того, чтобы тыкаться в стену в сторону других вейпоинтов.
Если на нашем "пути" встречается такая преграда, как дверь (не так важно, как она открывается - при касании игроком или "перед носом"), то ставим вейпоинт прямо по середине двери, как ни в чём не бывало. И, конечно же, рядом. С обоих сторон, да.
Итак, облетев всю карту, мы видим, что во всех основных местах (лифты, телепорты и джамперы пока игнорируем) вейпоинты расставлены. Но даже не думайте расслабляться - вся работа впереди. Проставленные во всех местах вейпоинты - это лишь процентов 20 от всего, что необходимо сделать.
Чтобы боты бегали между вейпоинтами, нужно их направить друг на друга. Для этого выделяем один вейпоинт, наводим курсор на соседний, и нажимаем Alt + Ctrl + 2 кнопка мыши. И сразу же видим, что слева, в поле "Target" (цель), появился другой Node. Но у всех вейпоинтов одинаковые названия (и изменить их нельзя), поэтому, чтобы видеть, какие именно вейпоинты соединены друг с другом, нажимаем клавишу G. Вуаля !
Теперь необходимо проделать обратное - соединить так же второй вейпоинт с первым. После этого оба вейпоинта полноценно соединены друг с другом, и если бот окажется в зоне действия, он сможет бегать туда и обратно.
Не стесняемся, и соединяем все ближайшие вейпоинты друг с другом в этом коридоре. Получиться должно примерно вот так:
Продолжаем, доходим до так называемых развилок. Но ничего сложного в соединении вейпоинтов нету и здесь:
Вейпоинты должны быть соединены лишь друг с другом, и ни с чем иначе - ни с аптечками, ни с оружием, ни с player start'ами, и так далее. Иногда можно промахнуться, и случайно направить вейпоинт, скажем, на источник освещения, попавшийся под руку. В таком случае в свойствах вейпоинта, от которого идёт путь к странному объекту, будет написано "None", а не "Node". В этих случаях надо нажать на кнопку "No target", чтобы отменить это недоразумение, и вновь направить вейпоинт туда, куда надо.
В этом же месте мы объясним вам про одно важное свойство вейпоинта. У каждого вейпоинта есть свойство "Marker range", по умолчанию равное трём. Это означает, что на самом деле бот перемещается не чётко по вейпоинтам; он передвигается к следующему вейпоинту тогда, когда коснётся зоны предыдущего. В этом коридорчике (и в других подобных) 3 - это слишком много, потому что при поворотах бот рискует "собирать носом углы". Выделяем, зажав shift, оба вейпоинта около угла коридора. Зелёный круг, это и есть marker range - зона действия вейпоинта. Реальный путь бота в одну сторону будет выглядеть примерно так, как показано на скриншоте розовой линией. Именно в том месте, где линия закрашена чёрным, бот очень часто будет тыкаться в угол:
Лучше всего будет выделить сразу все вейпоинты в этом коридоре. Выделяем, и меняем их marker range с 3 на, скажем, 1.5. Меньше не очень желательно (особенно на таких неровных местах, как лестницы), иначе боты будут двигаться чересчур "рельсово", к тому же, будут проскакивать вейпоинты, и бегать туда-сюда. В общем, меняем на 1.5, и тогда реальный путь ботов в обе стороны будет гораздо более адекватным:
Кстати ! Если необходимо выделить сразу все вейпоинты на карте вообще, неважно, для каких действий (уменьшить marker range, если карта очень маленькая, или же увеличить, если карта наподобие Go Hunting, либо же удалить вовсе), можно кликнуть правой кнопкой по вейпоинту и нажать Ctrl + Shift + E. Как подсказывает опыт, даже некоторые про-мапперы забывают или не подозревают вовсе об этой функции.
Так вот, продолжаем. В центральной "арене" карты после должной работы сетка должна выглядеть примерно так:
Тем не менее, не могут же боты только и делать, что бегать, как магниты, прилипшие к земле ? Верно. Поэтому, начинаем дополнять сетку путём обучения ботов перемещению по карте самыми разными способами.
Первее всего, сделаем так, чтобы боты могли банально прыгать вниз с верхних ярусов. Для этого соответствующие вейпоинты надо направить на нижние (можно на несколько сразу), и эта связь должна быть односторонней - нижние вейпоинты на верхние здесь направлять не надо !
Буквально минута работы, и теперь во многих местах ботах смогут самостоятельно бегать вниз (а не только тогда, когда увидят противника). Чтобы новая сетка не затерялась среди старой, рядом с ней были проведены салатовые стрелочки:
В этом же зале присутствует джампер. Сделать так, чтобы боты полноценно могли им пользоваться, очень несложно - ставим вейпоинт прямо в джампер (и настраиваем marker range так, чтобы бот касался его при касании джампера), направляем на этот вейпоинт парочку ближайших, а затем от вейпоинта в джампере тянем сетку в пару разных мест, куда можно долететь при использовании этого джампера (на всякий случай предварительно тестируем это прямо в редакторе путём нажатия клавиши T). Получится примерно так (красные стрелочки):
Теперь переходим к ещё одному важному типу движения - прыжки. В этом месте он так и напрашивается, поэтому в том месте, куда можно допрыгнуть, ставим вейпоинт, и активируем опцию "Need Jump". Это означает, что когда бот переключится на данный вейпоинт, он прыгнет в его сторону от предыдущего вейпоинта, так что направляем на "прыгательный" вейпоинт самый ближайший, и на всякий случай немножко увеличиваем (в нашем случае - с 1.75 до 2) marker range этого вейпоинта - если он будет слишком маленьким, бот может его "перепрыгнуть", и прыгать над ним туда и обратно ещё долго, пока наконец не коснётся его зоны. А потом этот вейпоинт направляем уже куда-нибудь подальше, должна получится вот такая картина (синие стрелочки):
А вот в этом месте, являющимся эдаким "бортиком" между двумя зонами, который можно перепрыгнуть с обоих, уже можно (нет, даже нужно) сделать две сетки а-ля "туда и обратно". Они выделены синим и зелёным:
На карте есть четыре телепорта, и по два из них связаны друг с другом, т.е., можно телепортнуться туда и обратно. Чтобы посмотреть, какие именно телепорты связаны друг с другом, используется та же самая клавиша G - они связаны зелёной сеткой:
Соответственно, каждую пару телепортов надо связать двумя параллельными сетками для телепорта "туда" и "обратно", потому что если использовать единую сетку, то бот может начать бегать в один и тот же телепорт туда и обратно без конца. Так же, как и с джампером, ставим вейпоинт прямо в телепорт, протягиваем к нему парочку ближайших, затем соединяем его с вейпоинтом, стоящим у того телепорта, в котором появится бот после телепортации, а от этого уже вейпоинта протягиваем сетку к одному-двум вейпоинтам подальше. И наоборот.
У вейпоинта, находящегося в телепорте, должен быть маленький marker range (шарообразная салатовая область, напоминаем), едва выпирающий за пределы зоны телепорта (квадратная тёмно-бирюзовая зона). Тянем к нему сетку, тщательно проверяем, что оба вейпоинта направились именно на другой вейпоинт, а не на телепорт (лучше всего переместить камеру в зону телепорта, то есть, вплотную к вейпоинту). По инструкции выше продолжаем, односторонняя сетка готова:
Теперь протягиваем сетку уже в обратную сторону, то есть, обратно в данную комнатку. Получается примерно подобное:
Теперь переходим к ещё одной составляющей многих карт - лифты. Там так же необходимо реализовывать "двухстороннюю" сетку, т.е. разную для подъёма на лифт и с лифта, но если сетка подъёма с лифта вниз ничем особенным не кажется, то для движения по лифту применяется кое-что новое.
Итак, помещаем на лифт вейпоинт (желательно на самый его центр, но подгоняем вручную, на глаз - координаты мувинг браша, представляющего из себя лифт, вовсе необязательно приходится на его центр, а иногда может быть на угол). Затем, в том месте, куда нас привозит лифт, прямо в воздух ставим ещё один вейпоинт (marker range у него не должен быть чересчур маленьким), у которого обязательно должны быть такие же X и Z координаты, как и у нижнего, т.е. он должен быть чётко над ним. Так вот, от ближайшего вейпоинта к лифту, протягиваем сетку к вейпоинту на лифте, от него - к вейпоинту над лифтом, а от вейпоинта над лифтом - куда-нибудь дальше. Одностороннюю, напоминаем.
Но для того, чтобы это всё правильно функционировало, необходимо применить кое-какую опцию к тому вейпоинту, который над лифтом (к которому приезжает лифт), а именно поставить галку у опции "Lift". Теперь бот будет спокойно стоять в лифте, пока не коснётся зоны этого вейпоинта. Выглядит это примерно так:
А чтобы научить ботов бегать в обратную сторону, делаем примерно вот так. В итоге, красная линия - это пусть на лифте вверх, а синия - это путь вниз (с игнорированием лифта):
Однако, это ещё не всё. Чтобы боты не пытались запрыгнуть на лифт в то время, когда он наверху (и не оказались раздавленными, или что-либо в этом роде), необходимо выделить нижний маркер, выбрать у него опцию "Waypoint switch - Target", и направить его на нижний вейпоинт, находящийся в лифте, сочетанием клавиш Ctrl + Alt + левая кнопка мыши. Если появилась красная стрелочка, а у под "Waypoint switch - Target" написано "Node", значит, сделано всё правильно:
Необходимо так же оптимизировать поведение ботов вот в подобных местах. Вполне может случиться так, что во время боя бот упадёт в яму и ещё долгое время будет "тупить", ища глазами врага, который вряд ли с такой же охотой упадёт за ним.
Специально для того, чтобы этого не происходило, ставим в это место тачфилд, чтобы он был по ширине и длине равен размеру данной "ямы". Заходим в его опции, ставим галочку у новой опции "Clear bot targets". Сохраняем карту и открываем её ещё раз, получится вот такая картина:
Теперь, когда боты будут падать в яму и касаться этого тачфилда, у них мгновенно сбросится цель, и они спокойно побегут вниз по своим делам.
В этом же месте может произойти ещё одна нежелательная ситуация: пробегая внизу, бот неожиданно может увидеть парящий вверху дробовик, и начать бегать под ним, пытаясь его достать. В этом случае необходимо выделить дробовик и снять галочку у новой опции "Bot can see it". Теперь бот не увидит этот дробовик из ниоткуда, а лишь возьмёт его, когда нарочно побежит к нему, с целью взять ближайшее оружие, или же просто упадёт в эту ямку.
Есть такие места, где необходимо оставить видимость объекта, но не с любой точки карты. Как, например, у этой аптечки - увидев её с края комнаты, бот побежит в её сторону и будет бегать у колонны:
Оставляем галку "bot can see it", и переходим к более продвинутой опции "radius (bot detecting)". Настраиваем радиус видимости предмета таким образом, чтобы он был как можно более большим, но чтобы до пола он (почти) не доставал, в нашем случае подходящим радиусом, кажется, должно стать 8:
На секунду представим, что вот на этой люстре так же находится сердце (+100 здоровья), до которого можно допрыгнуть только безумным рокет джампом (на данный момент боты их делать не умеют). Для этого крайне желательно не только убрать галку "Bot can see it", но и поставить галку "Ignore it":
Итак. Окинув взглядом карту, облетев каждую комнатку, каждый уголок, проверив все места, мы видим, что вейпоинты проставлены, сетка готова, а радиус видимости всех трудноступных итемов выставлен корректно.
Но не думайте, что на этом работа закончено - впереди ещё, возможно, не один час работы, и мы абсолютно серьёзно. На данном этапе, когда вейпоинты и их сетка полностью (на ваш взгляд) готовы, необходимо проверить их на наличие ошибок.
Первая часть проверки достаточно проста, и её можно сделать прямо в редакторе. Заходим в режим тестирования карты (так, чтобы можно было в ней побегать - путём нажатия клавиши "T") и ... сразу же видим красное сообщение, вылезающее без остановки. В нашем случае, по причине использования английской версии, не видно, что там написано, но на самом деле там написано "Вейпоинт ни с чем не связан (-42.437500;-15.000000;-44.562500)":
Что это означает, думаем, вы поняли сами - где-то лежит вейпоинт, к которому (или от которого, или всё сразу) не протянута сетка, а для того, чтобы узнать, где это, сразу же приведены координаты, которые означают X, Y и Z соответственно. Находим это место на карте, и вот он и нашёлся - забытый вейпоинт:
Протягиваем к нему и от него сетку, тестируем - красное сообщение исчезает.
Однако, на этом ещё не всё. Теперь необходимо так же зайти в режим тестирования карты, и нажать "Y" - произойдёт добавление бота на карту. Спустя некоторое время мы видим в консоли ещё одно безобразие, на самом деле там написано "Ошибка таргета вейпоинта (0.000000,-25.375000,-7.937500)":
Это означает, что один из вейпоинтов связан не с другим вейпоинтом, а с чем-то другим - с итемом, с источником освещением, со стеной, с тачфилдом, или подобным "левым" объектом. Вариантов множество, и такую ситуацию вполне можно "прошляпить".
Итак, мы имеем координаты (они так же относятся к вейпоинту, а не к тому объекту, на который они направлены), но здесь есть подвох: если в случае вейпоинта без сетки координаты означают X, Y и Z соответственно, то в случае неверного таргета координаты означают "?", X и Y, где значок вопроса, по идее, должен означать "Z", но вместо "-19.75" (координата, по которой мы нашли неверный вейпоинт) почему-то прописано ноль, что осложнит поиск неверного вейпоинта. В любом случае, высота и одна из сторон нам известна, поэтому долгое время это всё-таки не займёт. Собственно, вейпоинт с неверной сеткой найдён, и чтобы направить его на другой вейпоинт, а не на источник освещения, нажимаем в свойствах вейпоинта "No target" (мы уже рассматривали этот случай), а если выйдет, что случайно удалена нужная сетка, то проще нажать правой кнопкой по вейпоинту и кликнуть по "Clear all targets", а затем направить его вновь на все нужные вейпоинты вокруг. Снова тестируем из редактора - ошибки в консоли не видать, значит, всё в порядке.
Теперь, когда, казалось бы, критических ошибок у вейпоинтов не наблюдается, переходим к самому интересному - наблюдению за бегом ботов по карте. Для этого запускаем сам мод, выбираем "NETWORK", "START SERVER" (не "BOTMATCH"), в "Game type" выбираем "Fragmatch", в списке карт выбираем подопытную, а в Game Options ставим лимит времени, скажем, в 5 минут - вполне должно быть достаточно для такой маленькой карты (хотя, всё-таки, лучше 10).
Нажимаем "START", в опции Observer ставим "Yes" (самое важное), и ещё раз нажимаем "START". Перед нами чёрный экран, нажимаем "Y" - появляется бот, за которым мы и будем наблюдать:
Понаблюдав за ботом, мы можем заметить, что ни за 5, ни за 10 минут он не оббежит всю карту - в нашем случае бот проигнорировал лифт, 2 джампера из трёх, а так же обе "ямы" с тачфилдом и ещё пару значимых мест. Зато нигде не застрял - и это уже хорошо, и говорит о том, что сетка выполнена хорошо (в тех местах, где он пробегал).
Теперь займёмся более интересным и полезным - понаблюдаем сразу за двумя ботами, потому что это во много раз увеличит возможные сценарии, боты смогут пробегать в гораздо более разных местах (и появляться тоже в разных). Для этого повторяем все вышеуказанные действия, но нажимаем "Y" два раза, а затем нажимаем "Num 2" (для больших карт рекомендуем сразу четыре бота и "Num 4") - вуаля:
Спустя две с половиной минуты, после одной из баталий, раненый бот решил таки побежать по лифту к здоровью, но ... застрял, оставшись кататься в лифте туда-сюда:
Для того, чтобы это исправить, закрываем мод, вновь открываем редактор (его можно, в принципе, не закрывать вообще, главное не сохранять карту в момент запущенной игры), перемещаемся к этому месту и меняем marker range вейпоинта с галкой Lift с 1.75, например, на 2.25:
Это сработало - теперь боты нормально поднимаются по лифту, берут здоровье, а потом чаще всего убегают обратно по лифту вниз (что доказывает работоспособность ещё одной части сетки):
К сожалению, за пять минут боты так и не воспользовались телепортами, зато произошло кое что другое - в самом конце, буквально за 7 секунд до окончания таймлимита в 5 минут, бот внезапно застрял в центральной, самой большой "арене", под платформой, ведущей к здоровью +50:
Это может произойти по двум причинам. В нашем случае более возможной причиной стал слишком большой радиус действия у лежащего вверху здоровья +50. Выставив значение в 8, мы подумали о том, чтобы радиус действия не касался пола, но в бою оказалось так, что бот убил противника ... в момент прыжка. И в эту самую милисекунду, задев радиус действия аптечки в полёте, бот переключил цель с мёртвого врага прямо на эту аптечку ! Для этого надо изменить radius с 8, скажем, до 5. Теперь, даже подпрыгнув, бот заденет "радиус" настолько вплотную к колонне, что оттуда здоровье всё равно не будет "видно":
Однако, это вполне могло произойти и ещё по одной причине, не создав бы мы такую густую сетку (подтверждено ранним опытом автора статьи). Сейчас сетка выглядит вот так:
Представим, что сетка была бы гораздо более редкой, казалось бы, выглядев "и так норм", а на деле вовсе нет. Если бы сетка была такая, как на скриншоте ниже, то бот, оказавшись там, куда ведёт розовая стрелочка, может отреагировать не на вейпоинты, лежащие "на полу", а на тот, который находится прямо под ним (и отмечен оранжевой стрелочкой), потому что де-факто он ближе по координатам:
Именно поэтому не стоит халявить с сеткой, а делать её как можно более густой, и прорабатывать её в картах любого типа, в том числе и многоуровневых. Лучше добавить лишний вейпоинт, чем расширять радиус действия старого, поверьте.
А ещё полезно бывает разнообразить карту несколькими новыми вейпоинтами, если вам кажется, что боты бегают чересчур скучно и линейно. Например, возвращаясь к испытуемой карте - этот ящик так и напрашивается, чтобы через него перепрыгивали. Здесь параллельная сетка, пожалуй, и не нужна во все. Было:
Стало. Не забываем тестировать в игре:
Если это является банальным прыжком через ящик, то на других картах может оказаться так, что значительная часть геймплея состоит из прыжков разной степени сложности. И всех их необходимо проработать и тестировать часами. Посмотреть, как они устроены, можно, открыв уже какую-нибудь из существующих карт, например, одну из самых сложных в этом плане - Fortess (в более ранней стадии - сейчас там прыжков ещё больше):
Самой сложной задачей здесь было "научить" ботов прыгать до пушки, притом с двух разных мест (а ведь в идеале надо добавить ещё парочку). Самым быстрым и лёгким способом проверить, может ли бот добраться до указанного места, является добавление на труднодоступное место такой объект, как SkullHold (череп) и загрузив соответствующий режим. Именно к этому объекту боты побегут в первую очередь. А ещё можно использовать не SkullHold, а KOTH Point, и не один.
В грядущей (в 1.00А такого ещё нет) версии Troy (напоминаем - это главный и единственный программист мода) решил ещё более облегчить тестирование вейпоинтов. В режиме обсервинга, переключившись на свободную камеру (клавиша Shift), можно будет посмотреть, как выглядит сетка, ведущая из одного места в другой. Для этого необходимо подлететь к "точке A", нажать клавишу "O" (английскую), затем подлететь к "точке B" и нажать клавишу "O" ещё раз. Появится выделенным красным сетка (на момент разработки показывается только один вариант - самый "быстрый" по "мнению" искуственного интеллекта). Здесь мы видим, что путь из подземелья к броне +200 вышел немножечко странноватым, это значит, что сетку нужно доработать:
В дальнейшем можно будет делать ещё легче и, кажется, не прибегать к использованию черепа или KOTH точек. Уже после прокладывания сетки в камере из точки A в точку B, можно будет ввести команду /TurnOnOffAI(), которая отключит лишний интеллект ботов, проложит им путь до первой точки, а от неё - до второй. Повторный ввод этой команды снова включит ИИ.
Это дело будущего, а пока что довольствуемся "живым" обсервингом ботов !
Возвращаясь в настоящее: уже после окончания над работой статьи выяснилось, что мы совершенно забыли вам рассказать, как научить ботов бегать медленно (шагом). Для этого необходимо выделить вейпоинт, и активировать галочку "Carefully" - теперь боты будут бежать медленно по направлению к этому вейпоинту (а не от него !). Это крайне полезно вот в таких местах:
Ну, что же ! Можно считать, что все основы, необходимые для создания обычных dm / tdm карт для ботов, а так же их тестирования, уже выучены.
Теперь пора перейти к оставшимся, так сказать, "вкусностям".
ЧАСТЬ IV. ИЗЮМИНКИ - ДОВОДИМ КАРТЫ ДО ИДЕАЛА
Поиграв с ботами на вышеупомянутой сделанной карте, игрок, хорошо играющий в deathmatch, может подумать, что играть слишком легко. Боты лезут на рожон, и фраги сыплются сами собой. Это можно исправить !
Прямо сейчас мы покажем вам, как научить ботов ... Кемперить. Да, вы не ослышались, они действительно это умеют. Притом они умеют как и сидеть в какой-нибудь комнате и ждать противника, так и прятаться за стенами. Для того, чтобы статья была быстрее написана, да и разнообразия ради, было решено показывать вам примеры на уже существующих картах.
Научить ботов сидеть в засаде в комнатах намного легче, чем научить их прятаться за стенами, создавая иллюзию вида от 3-го лица. Для того, чтобы боты "кемперили" на каком-нибудь месте, например, в нашем случае, в комнатке с гранатомётом на Fortress (там же любят сидеть и реальные игроки), необходимо поставить в комнатку вейпоинт, затем залезть в его свойства, и в "Type" выбрать "Camping zone" (кстати - в типах вейпоинта ещё есть "Jumper" и "Rocket Jump", но как и в 1.00А, так и на момент создания статьи это не функционировало). Так же - это важно - данный вейпоинт не нужно связывать с другими, а вместо этого надо увеличить его Marker Range до такой степени, чтобы охватывал всё пространство, где бот будет кемперить:
Для того, чтобы боты, кемперя, смотрели в какие-то определённые места, и был создан класс AI Eye. Ничего сложного - помещаем AI Eye в три прохода (направлять на них вейпоинт не надо), и теперь бот, кемперя, будет поочерёдно смотреть в их стороны:
Внимание ! Есть вероятность, что в новой версии Serious Tournament обучение ботов кемперству в комнатах будет происходить по-другому, так что просим это учесть.
Теперь мы покажем вам, как научить ботов кемперить за укрытиями. Специально для этого существуют два класса - FleeColumn и FleeWall. Начнём с первого, который больше всего подходит для таких мест, как колонны (и любое другое место, которое можно полностью или частично оббежать по кругу).
Для правильной работы FleeColumn необходимо поместить объект ровно в то же место, где стоит колонна (можно подсмотреть её координаты, правда, они не всегда верны, и могут соответствовать углу браша), и правильно настроить следующие параметры - Radius (необходимо делать немного шире самого укрытия), Range to pick (радиус действия укрытия - за его пределами бот не будет пользоваться данным укрытием) и Height - высота "колонны" - если объектом для укрытия является нечто низенькое, типа выступа высотой в игрока, то находясь выше его, бот не будет пытаться за ним укрыться. Так же присутствует важная опция "Full Column (360)", активировать которую стоит, если объект - действительно колонна или любой другой браш / модель, которуыйможно обойти со всех сторон. Если обойти объект нельзя (к примеру, колонна, которая частично торчит из земли, либо же это просто угол), то галочку "Full Column" необходимо снять.
На скриншоте показано, в каком месте правильно использовать "Full Column" (подсвечена зелёным), а в каком эту опцию следует снять (подсвечена оранжевым). Слева находится выступ, который нельзя обежать по кругу, поэтому Full Column здесь не используется. Справа же стену можно обежать вокруг через открывающуюся дверь и арку (чуть дальше), и там Full Column будет как нельзя кстати.
Вот ещё один пример, с карты Shotty Power Remake, который демонстрирует, что колонны можно (и нужно - не забываем отрегулировать высоту) использовать и в подобных местах !
Что же, теперь расскажем об объекте FleeWall. Это - второй объект, созданный для укрытия, однако используется в основном по отношению к стенам (плоскостям). Является более сложным в использовании, и в некоторых случаех несколько FleeWall могут быть заменены на один FleeColumn (бывают ситуации и наоборот), но для более интересного геймплея необходимо использовать именно этот объект.
Помимо двух вышеперечисленных опций "Range to pick" и "Height", обладает двумя другими, новыми. У данного объекта отсутствует радиус, но есть ширина. "Width" и является шириной данного объекта. Самая важная опция - это "Sides". Если опция выставлена на "Left", то бот будет кемперить, стрейфя влево и обратно, если на "Right" то, соответственно, вот будет стрейфить вправо. А если будет применена опция "Left-Right", то бот будет стрейфить во все стороны, выглядывая и слева, и справа.
На скриншоте ниже показано, в каких ситуациях правильно применять этот объект (при "Left" левые треугольнички - оранжевые, при "Right" - правые, а при "Left-Right" - все).
.
В подобных ситуациях, чтобы бот не упал, fleewall необходимо правильно повернуть:
Fleewall'ы ставить необходимо в большом количестве, и это сложнее и нуднее (возможно, это второй по сложности процесс в создании карт, после тестирования движения ботов). Тем не менее, результат будет того стоить, поверьте !
Теперь, когда вы можете научить ботов кемперить чуть ли ни за каждой стеной или хоть у полуметрового выступа, геймплей станет намного интереснее и сложнее. Напоследок отметим, что в грядущем обновлении Serious Tournament Mod боты не используют укрытия, будучи с неуязвимостью, а так же в режиме CTF, неся флаг.
ВНИМАНИЕ ! Сейчас будет описана возможность, которая не присутствует в текущей версии 1.00А, но уже совершенно точно будет присутствовать в новой версии. Мы заранее, подробнейшим образом опишем вам новый инструмент под названием BotWall, который сделан во благо аккуратности ботов.
BotWall представляет из себя невидимую преграду для ботов, через которую они не будут (по крайней мере, очень постараются это не допустить) пробегать - это необходимо будет ставить на картах с такими местами, как лава, или особенно когда карта является платформой в космосе - помните Eclipse из Warped ?
BotWall ставится на карту по образу и подобию Door Controller. Но если параметр высоты (Height) здесь настраивается абсолютно так же, то вместо единого параметра Width (который у Door Controller означает ширину сразу всех сторон) здесь есть и Width (ширина), и Depth (глубина) - подгонять по размерам намного легче. На скриншоте мы видим визуальное сравнение Door Controller и BotWall:
Чтобы BotWall правильно работал, необходимо его поставить так, чтобы бот его задел раньше, чем может упасть, для этого надо настроить соответствующую ширину / глубину. Главный принцип работы BotWall заключается в том, что "попав в него", бот будет бежать в ту сторону, кудапокажет компас укажет важнейший параметр "Direction". Выбрав этот параметр, необходимо указать нужную сторону, поколдовав с цифрами в первом поле - стрелочка должна вести в ту сторону (собственно, противоположную от опасного места), куда бот побежит, коснувшись BotWall. Будьте внимательны - если объект BotWall очень большой, то и стрелочка станет огромного размера.
В этом месте можно было обойтись и одним жирным BotWall, но мы решили использовать сразу три - обратите внимание на направление:
В таких местах необходимо ставить два BotWall, идущие параллельно друг другу, у каждого из которых направление должно вести в противоположную от края моста сторону (друг к другу):
А вот здесь уже можно наклонить BotWall, подгоня его под тот же угол, который у этого моста:
Если бот упал в лаву (или попал, например, в какую-нибудь нежелательную комнату с ловушками), можно поставить BotWall и туда, и обязательно по всему периметру. Отличие в том, что здесь можно и нужно указывать направление (Direction) не только в сторону, но и вверх, чтобы бот быстрее выплыл из лавы и жизни медленнее убавлялись:
Ещё парочка примеров. В местах, как на втором скриншоте, BotWall очень желательно поставить галочку Always - тогда бот будет чувствовать преграды не только в бою, но и даже просто бегая по вейпоинтам:
И ещё одна интересная особенность. Боты умеют пользоваться выключателями, и делается это совсем несложно - у ближайшего к выключателю вейпоинта просто нужно в параметре U Switch Target указать тот самый выключатель (можно сделать и сочетанием клавиш Ctrl + Alt + левая кнопка мыши). Теперь бот, пробегая этот вейпоинт, будет всегда нажимать этот выключатель - вот так боты научились постоянно включать пушки на We've Got Skulls'n'Bones Too:
А вот в таком месте, как мельница Yodeller, где находится выключатель, включающий проход на "чердак", от вейпоинта с выключателем была проведена односторонняя сетка:
Поздравляем - теперь вы обладаете, пожалуй, всеми знаниями для создания полноценной dm / tdm карты. Не забываем, что одной теории недостаточно, и лучше будет пойти, и прямо сейчас потренироваться всё это делать вместо того, чтобы ещё раз 10 прочитать статью. Но перед этим не забудьте прочитать последнюю часть статьи про то, как сделать карты с новыми игровыми режимами. Там текста намного меньше, правда !
Прямо сейчас мы покажем вам, как научить ботов ... Кемперить. Да, вы не ослышались, они действительно это умеют. Притом они умеют как и сидеть в какой-нибудь комнате и ждать противника, так и прятаться за стенами. Для того, чтобы статья была быстрее написана, да и разнообразия ради, было решено показывать вам примеры на уже существующих картах.
Научить ботов сидеть в засаде в комнатах намного легче, чем научить их прятаться за стенами, создавая иллюзию вида от 3-го лица. Для того, чтобы боты "кемперили" на каком-нибудь месте, например, в нашем случае, в комнатке с гранатомётом на Fortress (там же любят сидеть и реальные игроки), необходимо поставить в комнатку вейпоинт, затем залезть в его свойства, и в "Type" выбрать "Camping zone" (кстати - в типах вейпоинта ещё есть "Jumper" и "Rocket Jump", но как и в 1.00А, так и на момент создания статьи это не функционировало). Так же - это важно - данный вейпоинт не нужно связывать с другими, а вместо этого надо увеличить его Marker Range до такой степени, чтобы охватывал всё пространство, где бот будет кемперить:
Для того, чтобы боты, кемперя, смотрели в какие-то определённые места, и был создан класс AI Eye. Ничего сложного - помещаем AI Eye в три прохода (направлять на них вейпоинт не надо), и теперь бот, кемперя, будет поочерёдно смотреть в их стороны:
Внимание ! Есть вероятность, что в новой версии Serious Tournament обучение ботов кемперству в комнатах будет происходить по-другому, так что просим это учесть.
Теперь мы покажем вам, как научить ботов кемперить за укрытиями. Специально для этого существуют два класса - FleeColumn и FleeWall. Начнём с первого, который больше всего подходит для таких мест, как колонны (и любое другое место, которое можно полностью или частично оббежать по кругу).
Для правильной работы FleeColumn необходимо поместить объект ровно в то же место, где стоит колонна (можно подсмотреть её координаты, правда, они не всегда верны, и могут соответствовать углу браша), и правильно настроить следующие параметры - Radius (необходимо делать немного шире самого укрытия), Range to pick (радиус действия укрытия - за его пределами бот не будет пользоваться данным укрытием) и Height - высота "колонны" - если объектом для укрытия является нечто низенькое, типа выступа высотой в игрока, то находясь выше его, бот не будет пытаться за ним укрыться. Так же присутствует важная опция "Full Column (360)", активировать которую стоит, если объект - действительно колонна или любой другой браш / модель, которуыйможно обойти со всех сторон. Если обойти объект нельзя (к примеру, колонна, которая частично торчит из земли, либо же это просто угол), то галочку "Full Column" необходимо снять.
На скриншоте показано, в каком месте правильно использовать "Full Column" (подсвечена зелёным), а в каком эту опцию следует снять (подсвечена оранжевым). Слева находится выступ, который нельзя обежать по кругу, поэтому Full Column здесь не используется. Справа же стену можно обежать вокруг через открывающуюся дверь и арку (чуть дальше), и там Full Column будет как нельзя кстати.
Вот ещё один пример, с карты Shotty Power Remake, который демонстрирует, что колонны можно (и нужно - не забываем отрегулировать высоту) использовать и в подобных местах !
Что же, теперь расскажем об объекте FleeWall. Это - второй объект, созданный для укрытия, однако используется в основном по отношению к стенам (плоскостям). Является более сложным в использовании, и в некоторых случаех несколько FleeWall могут быть заменены на один FleeColumn (бывают ситуации и наоборот), но для более интересного геймплея необходимо использовать именно этот объект.
Помимо двух вышеперечисленных опций "Range to pick" и "Height", обладает двумя другими, новыми. У данного объекта отсутствует радиус, но есть ширина. "Width" и является шириной данного объекта. Самая важная опция - это "Sides". Если опция выставлена на "Left", то бот будет кемперить, стрейфя влево и обратно, если на "Right" то, соответственно, вот будет стрейфить вправо. А если будет применена опция "Left-Right", то бот будет стрейфить во все стороны, выглядывая и слева, и справа.
На скриншоте ниже показано, в каких ситуациях правильно применять этот объект (при "Left" левые треугольнички - оранжевые, при "Right" - правые, а при "Left-Right" - все).
.
В подобных ситуациях, чтобы бот не упал, fleewall необходимо правильно повернуть:
Fleewall'ы ставить необходимо в большом количестве, и это сложнее и нуднее (возможно, это второй по сложности процесс в создании карт, после тестирования движения ботов). Тем не менее, результат будет того стоить, поверьте !
Теперь, когда вы можете научить ботов кемперить чуть ли ни за каждой стеной или хоть у полуметрового выступа, геймплей станет намного интереснее и сложнее. Напоследок отметим, что в грядущем обновлении Serious Tournament Mod боты не используют укрытия, будучи с неуязвимостью, а так же в режиме CTF, неся флаг.
ВНИМАНИЕ ! Сейчас будет описана возможность, которая не присутствует в текущей версии 1.00А, но уже совершенно точно будет присутствовать в новой версии. Мы заранее, подробнейшим образом опишем вам новый инструмент под названием BotWall, который сделан во благо аккуратности ботов.
BotWall представляет из себя невидимую преграду для ботов, через которую они не будут (по крайней мере, очень постараются это не допустить) пробегать - это необходимо будет ставить на картах с такими местами, как лава, или особенно когда карта является платформой в космосе - помните Eclipse из Warped ?
BotWall ставится на карту по образу и подобию Door Controller. Но если параметр высоты (Height) здесь настраивается абсолютно так же, то вместо единого параметра Width (который у Door Controller означает ширину сразу всех сторон) здесь есть и Width (ширина), и Depth (глубина) - подгонять по размерам намного легче. На скриншоте мы видим визуальное сравнение Door Controller и BotWall:
Чтобы BotWall правильно работал, необходимо его поставить так, чтобы бот его задел раньше, чем может упасть, для этого надо настроить соответствующую ширину / глубину. Главный принцип работы BotWall заключается в том, что "попав в него", бот будет бежать в ту сторону, куда
В этом месте можно было обойтись и одним жирным BotWall, но мы решили использовать сразу три - обратите внимание на направление:
В таких местах необходимо ставить два BotWall, идущие параллельно друг другу, у каждого из которых направление должно вести в противоположную от края моста сторону (друг к другу):
А вот здесь уже можно наклонить BotWall, подгоня его под тот же угол, который у этого моста:
Если бот упал в лаву (или попал, например, в какую-нибудь нежелательную комнату с ловушками), можно поставить BotWall и туда, и обязательно по всему периметру. Отличие в том, что здесь можно и нужно указывать направление (Direction) не только в сторону, но и вверх, чтобы бот быстрее выплыл из лавы и жизни медленнее убавлялись:
Ещё парочка примеров. В местах, как на втором скриншоте, BotWall очень желательно поставить галочку Always - тогда бот будет чувствовать преграды не только в бою, но и даже просто бегая по вейпоинтам:
И ещё одна интересная особенность. Боты умеют пользоваться выключателями, и делается это совсем несложно - у ближайшего к выключателю вейпоинта просто нужно в параметре U Switch Target указать тот самый выключатель (можно сделать и сочетанием клавиш Ctrl + Alt + левая кнопка мыши). Теперь бот, пробегая этот вейпоинт, будет всегда нажимать этот выключатель - вот так боты научились постоянно включать пушки на We've Got Skulls'n'Bones Too:
А вот в таком месте, как мельница Yodeller, где находится выключатель, включающий проход на "чердак", от вейпоинта с выключателем была проведена односторонняя сетка:
Поздравляем - теперь вы обладаете, пожалуй, всеми знаниями для создания полноценной dm / tdm карты. Не забываем, что одной теории недостаточно, и лучше будет пойти, и прямо сейчас потренироваться всё это делать вместо того, чтобы ещё раз 10 прочитать статью. Но перед этим не забудьте прочитать последнюю часть статьи про то, как сделать карты с новыми игровыми режимами. Там текста намного меньше, правда !
ЧАСТЬ V. РАЗНЫЕ ИГРОВЫЕ РЕЖИМЫ
Как мы помним, в Serious Tournament Mod присутствует несколько новых игровых режимов. Чтобы сделать карту доступной для различных режимов, необходимо нажать на иконку планеты (World Settings), и выставить соответствующие галочки:
- Галочка D: активирует карту для режимов Fragmatch, TeamDeathMatch, Last Hero и Team Last Hero одновременно
- Галочки 1 и 2 (одновременно !): активирует карту для режима SkullHold
- Галочка 3: активирует карту для режима Capture The Flag
- Галочка 4: активирует карту для режима Domination
- Галочка 5: активирует карту для режима King of The Hill
- Галочки S, C и 6 применять на данный момент не имеет смысла
Однако, простого выставления галочек, конечно же, недостаточно. Выше мы описали всё, необходимое для стандартных режимов: FragMatch, TeamDeathMatch, Last Hero и Team Last Hero.
Чтобы активировать режим SkullHold, необходимо перетащить череп (объект Skull) в какое-нибудь место на карте (желательно куда-нибудь в середину, и чтобы место было довольно-таки доступным). Теперь он всегда будет появляться на этом месте. Вот, собственно, и всё.
Чтобы поиграть в режим захвата флагов (Capture The Flag), надо прежде всего использовать как можно более симметричную карту. После этого в оба конца карты необходимо переместить объект под названием Flag, и присвоить одному флагу команду (Team) Red, а другому - Blue.
А так же, для правильного геймплея необходимо все существующие player start'ы в каждой половине карты "окрасить" в тот же цвет, что и флаг, чтобы на территории красного флага появлялись только игроки красной команды, а у синего - синие.
Для режима Domination в первую очередь нужно разместить в любом месте на карте объект под названием Logic Manager. После этого необходимо расставить на те места, где будут зоны доминирования, объекты Domination Point. Сразу после расстановки, в свойствах объектов необходимо выбрать уже существующий Logic Manager, а так же обратить внимание на параметр "Radius", который, думаем, и так понятно, что означает:
Последний режим называется King of The Hill, и объект KOTHPoint, задействованный в качестве зон для этого режима, довольно-таки схож с DPoint. Однако, режиму King of The Hill никакой Logic Manager не нужен, а вместо этого надо запомнить, что самой первой KOTH точке необходимо выставить параметр "Start" (именно с захвата этой точки будет начинаться раунд), а затем, в одностороннем режиме, связать первую зону со второй, вторую с третьей, и уже самую последнюю - вновь с первой, делается это при помощи сочетания "Alt + Ctrl + левая кнопка мыши". И ещё упомянем, что здесь есть параметр "Time", в котором в секундах можно указать, сколько времени отводится на захват какой-либо из точек.
- Галочка D: активирует карту для режимов Fragmatch, TeamDeathMatch, Last Hero и Team Last Hero одновременно
- Галочки 1 и 2 (одновременно !): активирует карту для режима SkullHold
- Галочка 3: активирует карту для режима Capture The Flag
- Галочка 4: активирует карту для режима Domination
- Галочка 5: активирует карту для режима King of The Hill
- Галочки S, C и 6 применять на данный момент не имеет смысла
Однако, простого выставления галочек, конечно же, недостаточно. Выше мы описали всё, необходимое для стандартных режимов: FragMatch, TeamDeathMatch, Last Hero и Team Last Hero.
Чтобы активировать режим SkullHold, необходимо перетащить череп (объект Skull) в какое-нибудь место на карте (желательно куда-нибудь в середину, и чтобы место было довольно-таки доступным). Теперь он всегда будет появляться на этом месте. Вот, собственно, и всё.
Чтобы поиграть в режим захвата флагов (Capture The Flag), надо прежде всего использовать как можно более симметричную карту. После этого в оба конца карты необходимо переместить объект под названием Flag, и присвоить одному флагу команду (Team) Red, а другому - Blue.
А так же, для правильного геймплея необходимо все существующие player start'ы в каждой половине карты "окрасить" в тот же цвет, что и флаг, чтобы на территории красного флага появлялись только игроки красной команды, а у синего - синие.
Для режима Domination в первую очередь нужно разместить в любом месте на карте объект под названием Logic Manager. После этого необходимо расставить на те места, где будут зоны доминирования, объекты Domination Point. Сразу после расстановки, в свойствах объектов необходимо выбрать уже существующий Logic Manager, а так же обратить внимание на параметр "Radius", который, думаем, и так понятно, что означает:
Последний режим называется King of The Hill, и объект KOTHPoint, задействованный в качестве зон для этого режима, довольно-таки схож с DPoint. Однако, режиму King of The Hill никакой Logic Manager не нужен, а вместо этого надо запомнить, что самой первой KOTH точке необходимо выставить параметр "Start" (именно с захвата этой точки будет начинаться раунд), а затем, в одностороннем режиме, связать первую зону со второй, вторую с третьей, и уже самую последнюю - вновь с первой, делается это при помощи сочетания "Alt + Ctrl + левая кнопка мыши". И ещё упомянем, что здесь есть параметр "Time", в котором в секундах можно указать, сколько времени отводится на захват какой-либо из точек.
Прочитав и зазубрив внимательно всё вышенаписанное, вы сможете полноценно адаптировать карты для игры с ботами в любых режимах. Если кто-то из вас действительно это сделает, пусть даже для себя, мы будем очень рады.
Но если вы захотите увидеть уже адаптированную собой карту в составе мода (в грядущей версии, или одной из более новых), то не стесняйтесь, делайте, а потом пишите сюда, в ЛС, или в skype "bleedingstarrr" - самые лучшие карты войдут в мод ! Удачного маппинга, добра
Комментарии