Эта часть по плану должны быть посвящена модификациям, меняющим параметры торговли, поведения монстров и прочему. Но вместо того, чтобы снова описывать чьи-то творения, я решил изменить своему же графику и сосредоточиться на другом, а именно, создание модификации своими силами.
Просматривая один мод за другим, невольно прихожу к мысли, что подавляющее большинство модификаций вполне доступно для создания любому геймеру. Плюсов превеликое множество. Во-первых, нет необходимости скачивать мегабайтные файлы, если все необходимое уже и так содержится на диске. Во- вторых, совершенно не важно, какая версия игры (пиратская копия или лицензия с очередным патчем) у вас на компьютере — вы работаете со своими файлами, а значит, проблема «запустится/не запустится» перед вами не стоит. В-третьих, вы выбираете именно то, что вам нужно, и в том количестве, в котором хотите. Если уже совсем лень создавать собственное творение с нуля, можно подправить «под себя» чужую работу, что-то добавив или, наоборот, убрав. Думаю, я вас убедил, осталось только взять и сделать. А в этом вам поможет данная статья.
1. Предварительные телодвижения
1.1 Итак, прежде чем мы приступим к созданию собственных модов, не помешает проверить, все ли необходимое у нас есть. a) Собственно, сама игра, установленная на компьютер. b) Распаковщик архивов игры STALKER_Data_Unpacker. c) Текстовый редактор, подойдет практически любой, даже Блокнот. Если у вас есть редактор с подсветкой синтаксиса, это будет плюсом. d) Редактор файла all.spawn. Если вы корифей в HEX-редакторах, берите тот, который нравится. Тем же, кто даже толком не представляет, что такое НЕХ-редактор, крайне рекомендую xrSpawner 0.13.0 Beta от небезызвестного в сталкеровском комьюнити Zeed’а. Удивительно удобная штука, тем более что в дальнейшем речь пойдет именно о xrSpawner. e) Ровные руки и мыслящая голова.
Если все это у вас есть, продолжим. В том случае, если вы уже распаковали архивы игры, переходите сразу ко второму пункту. Если же нет, то…
1.2 Допустим, игра у вас установлена в папку D:\Games\S.T.A.L.KE.R. Тогда при помощи Unpacker-а извлеките все содержимое файлов gamedata.dbX (где Х – буква или число) из корневого каталога игры в отдельную папку, например D:\Source\gamedata.
1.3 Теперь в папке D:\Source\gamedata\spawns найдите файл all.spawn и скопируйте его в папку D:\Games\S.T.A.L.KE.R.\gamedata\spawns. Если такой папки нет – создайте ее, в дальнейшем, если необходимо будет перенести какой-либо файл в каталог, которого нет, – создавайте, учитывая все промежуточные папки.
1.4 Запускаем xrSpawner 0.13.0 Beta, нажимаем «Файл - Открыть файл all.spawn» и указываем ему файл из папки D:\Games\S.T.A.L.KE.R.\gamedata\spawns. Окошки редактора заполнились цифрами и буквами. Теперь у нас все готово, начинаем.
1. Окно редактора xrSpawner. 1 - Номер позиции, окно поиска и список объектов в игре. 2 – Идентификатор активного объекта, имя и локация. 3 – координаты и углы поворота вокруг осей координат. 4 – меню «Добавить объект» и список возможных вариантов. 5 – окно скрипта объекта.
2. Добавление транспорта.
2.1 Начнем, пожалуй, с самого легкого и в достаточной степени необходимого – с добавления транспорта. В правой части окна редактора раскрываем список «Добавить объект» и выбираем пункт Transport. В окне внизу выбираем вид транспорта, который вам необходим, пусть это будет, к примеру, Niva_Green (Нива армейского образца) и жмем кнопку «Добавить».
2.2 В левой части редактора мы видим окно со списком всех объектов, спаунящихся в игре. В самом конце этого списка появился объект m_car, на который указывает синий маркер. Это и есть наша Нива. Давайте обратим теперь внимание на центральную часть редактора и немного разберемся, что есть что. Итак, m_car – тип объекта (Entity), ven_niva_00 – название объекта (можете назвать его по-другому, например Moya_Niva), корд X/Y/Z и вектор X/Y/Z – координаты объекта и углы поворота относительно осей координат. Обратите внимание, что за вертикальную ось отвечает не привычная нам ось Z, а ось Y. Это не ошибка, Zeed сознательно ввел такое обозначение осей, чтобы те, кто работает с SDK для мультиплеера, не путались – там координаты поименованы подобным образом. Level_ID указывает, к какой локации относится тот или иной объект, окно Story_ID рекомендую не трогать, по умолчанию новому объекту добавляется значение -1. Если к объекту привязан какой-либо управляющий скрипт, его текст отражается в окне внизу.
2. Находим подходящее место, фиксируем координаты.
Таким образом, наша Нива должна респауниться на локации l01_escape (то есть, на Кордоне), в точке с координатами -239,8912/ -19,43/ -123,0998, с углом поворота относительно вертикальной оси -15 градусов. Это значения «по умолчанию», и они вполне корректны, то есть, оставив все как есть, вы не рискуете обнаружить потом свою машину, висящую где-нибудь на дереве или застрявшей в заборе. Не удивляйтесь отрицательному значению высоты, поскольку центр координат локации Кордон расположен на дороге, неподалеку от автобусной остановки, лагерь же новичков относительно этого места лежит в низине. При желании можете немного поэкспериментировать с числами в окнах «Корд. X/Y/Z», не забудьте подтвердить изменения (нажав «Принять изменения», сохраните строчку, иначе данные пропадут, если вы уберете маркер с редактируемого объекта). После этого сохраняете свой файл all.spawn (Файл - Сохранить). Все, можно запускать S.T.A.L.K.E.R. и начинать новую игру. На выходе из бункера Сидоровича вас будет встречать автомобиль, заспауненный лично вами. Поздравляю.
3. И в том же месте появляется Нива.
2.3 Известно, что «по умолчанию» новоявленные автомобили чрезвычайно хрупки и взрываются буквально от первого же столкновения с забором. Устраняется эта проблема моментально. В папке Source ищем файл veh_niva_u_01 и копируем его в папку D:\Games\S.T.A.L.KE.R.\gamedata\config\models\vehicles. Это файл конфигурации автомобиля. Открываем его блокнотом и ищем раздел [immunities], после чего выставляем все параметры (burn_immunity, strike_immunity и т.д.) равными нулю. Сохраняем и закрываем файл. Теперь ваша Нива неуничтожима в принципе. Небольшая ремарка, повреждения для дверей, капота и крышки багажника считаются отдельно и после парочки столкновений можно лишиться нескольких деталей корпуса, но, думаю, без дверей вы уж как-нибудь покатаетесь. Рекомендую сразу же в ту же папку перенести файлы остальных машин и проделать с ними те же операции. Все.
3. Поиск координат и расстановка объектов на других локациях.
Накатавшись вволю по Кордону, вы, несомненно, захотите попутешествовать по остальным локациям уже на своих четырех. Вот тут вы и столкнетесь с проблемой, поскольку точка перехода Кордон-Свалка находится в здании за шлагбаумом, куда машина, по понятным причинам, не пролазит. Это значит, что вам понадобится новый автомобиль, который встречал бы вас на Свалке. В общем случае речь может идти не только о машинах, но и о монстрах, артефактах, сталкерах, предметах и прочих объектах. Для спауна любого предмета необходимо, как мы уже убедились, задать координаты той точки, где он появится. Алгоритм следующий: спаунимся на локацию, куда вы хотите добавить объект, визуально выбираем наиболее подходящую для этого точку и фиксируем ее координаты, выходим из игры, создаем интересующий нас объект с заранее полученными координатами, вновь спаунимся и проверяем корректность добавления объекта. Теперь опишем все это более подробно на примере автомобиля.
3.1 Допустим, вы хотите поместить белую Ниву неподалеку от перехода Армейские склады – Бар. В окне списка объектов поставьте маркер на первый объект в списке (дабы поиск проходил с самого начала). В окне «Поиск» наберите level_changer. Уже в процессе набора маркер переместится на объект номер 284, который и будет нашим первым левел-ченджером. Level_cahnger это точка, где расположен триггер, который выдает на экран окошко «Вы хотите перейти на другую локацию?». Объект за номером 284 с именем exit_to_garbage_01 отвечает за переход Кордон-Свалка и нам он не нужен. Нажимайте кнопку «Следующий» до тех пор, пока маркер на остановится на нужной нам точке перехода. Определить, какой level_changer за что отвечает, достаточно просто, смотрите на имя объекта, он подскажет в какую локацию переносит вас триггер. Триггеры одной карты обычно группируются вместе. Объекты 5286 (exit_to_bar_01) и 5287 (exit_to_radar_01) явно принадлежат к одной локации, по совокупности того, куда ведут выходы, можно определить, что триггеры принадлежат Армейским складам, только с нее есть выходы на Бар и Радар. Отлично, значит нас интересует номер 5286 exit_to_bar_01 с координатами (-372,6236/ -21,69933/ -4,806515). Запомните эти числа, затем открывайте строчку 63 actor (это вы), меняйте в поле Level_ID l01_escape на l07_military, измените ваши текущие координаты на координаты точки перехода (-372,6236/ -21,69933/ -4,806515), сохраняйте строчку («принять изменения») и файл («Файл - Сохранить»). Обратите внимание, сразу после загрузки вы попадете в триггер выхода. Это не страшно, достаточно нажать «нет» - и вы появитесь на локации Армейские склады. Если же это обстоятельство вам неприятно, попросту измените горизонтальные координаты на 1-2 метра.
3.2 Начинаем новую игру. После загрузки и отказа переходить на другую локацию нам необходимо найти подходящее место для расположения автомобиля и определить его координаты. Делается это одним из следующих способов.
a) В консоли прописываем команду «rs_stats on» без кавычек и слева на экране появится статистическая информация. Нас интересует последняя строчка Camera position, которая отражает текущие координаты камеры. Почему я заостряю на этом внимание? Камера поднята над поверхностью на 1,5 метра (по этому параметру можно приблизительно определить рост Меченого – около 165 сантиметров), поэтому, когда будете вписывать данные для спауна, вычитайте из вертикальной координаты полтора метра. Кроме того, если вы делаете скриншот с видом от третьего лица, также учитывайте, что на экран выдаются координаты камеры, а не главного героя. Топаем ножками на понравившуюся площадку и записываем на листочке цифры с экрана.
b) Точно так же топаем ножками на понравившееся место и там сохраняемся с помощью quiksave(F6).
c) Принимая во внимание, что вы появляетесь на карте с болтами и биноклем в карманах, ваша персона может сильно заинтересовать недружественных товарищей и мутантов. Дабы обезопасить себя во время проведения топографических съемок, набирайте в консоли команду «demo_record 1», которая освобождает камеру, давая возможность «полетать» по уровню. Управлять камерой просто, нажимаете «огонь» и летите вперед («прицел» - назад), стрелки отвечают за поворот вокруг осей. Далее аналогично – прилетаем на место, запускаем «rs_stats on» и записываем текущие координаты.
3.3 Выходим из игры. Если вы сохранялись при помощи быстрого сохранения, ставьте маркер на объект 63 actor и нажимайте кнопку «Получить координаты из файла сохранения». В окошках должны появиться те же данные, что вы получили при помощи «rs_stats on». Единственное дополнительное преимущество состоит в том, что при загрузке данных с сейва вы получаете также данные об угле поворота вашего персонажа. Это вам поможет в том случае, если вы хотите определенным образом сориентировать вашу машину относительно, скажем, дороги или другой техники.
3.4 Добавить объект ( Транспорт ( Niva_White. В поле Level_ID выбираем l07_military (если оно уже не стоит там по умолчанию), в поля координат заносим данные, полученные в п.3.2. Сохраняем строчку и файл. Снова запускаем новую игру. Если вы ничего не изменяли в actor, то вы появитесь в том же месте, что и в прошлый раз, на дороге по пути к Бару, а пробежавшись немного вперед, обнаружите свежепоявившуюся Ниву белого цвета. Если кому-то интересно, автомобиль на скриншоте заспаунен в координаты (-305,38/-22,53/61,93), углы поворотов относительно осей (0/0/0). Это важно – когда будете вписывать числовые значения координат, дробная часть отделяется от целой с помощью запятой. Если вы поставите точку, при сохранении редактор выдаст ошибку.
Вот таким образом вы можете получать и присваивать нужные координаты любым объектам, начиная от табуретки и заканчивая вертолетами. Внимание, при создании объектов на других локациях всегда сохраняйте изменения и обращайте внимание на то, какое значение Level_ID у вас сохранено. Нередки случаи, когда вместо того, чтобы расквартироваться по всей Зоне, монстры сосредоточились на Кордоне из-за того, что модер (известный вам Бастард) забыл сменить левел_айди у части монстров.
4. Пара минут копания в файлах - и Шустрый готов поделиться с нами «Ночной звездой».
4. Добавление новых монстров
С чисто технической точки зрения заспаунить, скажем, бюрера, никаких трудностей не представляется. Выполняйте все те же операции, что и для автомобиля. То есть, выбираем Добавить объект ( Mutants ( Burer, корректируем координаты и локацию, если есть необходимость, сохраняемся, заходим и любуемся. НО!!! Каждый житель Зоны, от тушкана до сталкера, должен быть зафиксирован в куче файлов: статистика, описание, инвентарь (то, что вы видите, нажав «обыскать труп») и прочее. Поэтому, если просто «в лоб» заспаунить того же бюрера, первый же выстрел по нему (не важно, ваш или другого сталкера), приведет к крашу игры. Дабы этого не случилось, необходимо подправить кучу файлов. Давать описание того, что нужно сделать в каждом файле, это слишком долго и муторно, получится гора сухой писанины, причем, не факт, что ни я (при наборе), ни вы (при переписывании) не допустим какую-нибудь ошибку. А отсутствие простой запятой в одном файле может привести к вылету игры. Поэтому лучшим выходом из ситуации будет, если вы найдете любой мод, добавляющий монстров и найдете там необходимые файлы, которые нужно добавить/заменить в игре. Если же у вас на диске или у знакомых нет такого мода и не хочется качать несколько мегабайт ради парочки фалов, пишите мне yurser@mail.ru, постараюсь выслать все необходимое.
5. Водить вертолетом оказалось на удивление просто. А вот отцепить его от скриптов и сделать управляемым – значительно сложнее.
5. Добавление новых объектов
Осмотрев меню «добавить объект» в редакторе, вы, возможно, придете к грустным выводам, что спаунить можно только технику и новых монстров. Отнюдь, с помощью творения товарища Zeed-а спаунить можно все… что спаунится. Давайте попробуем это сделать.
5.1. В качестве примера попробуем увеличить количество противников, обитающих на АТП, где держат Шустрого (первый квест).
5.1.1 Для начала найдем в списке объектов искомых бандитов. В поле «Поиск» пишем Stalker и кликаем «следующий» до тех пор, пока в поле имени не появится esc_factory_bandit1 (объект 122). Это как раз то, что нужно. Не убирая маркер с этой позиции, выбираем в меню «Редактирование – Добавить объект в базу». В открывшемся окне пишем «Название группы - Stalkers», «Название объекта - Bandit». Обратите внимание, все названия должны быть написаны только латинским шрифтом. Нажимаем кнопку «Добавить». Все, теперь ваш объект сохранен в базе (файл spawn.base), которая располагается в той же папке, что и сам редактор.
6. А вот с «Москвичом», что нашелся в архивах, проблем не возникает.
5.1.2 Дальше все привычно – открываем список «Добавить объект», из появившегося списка выбираем новый тип объектов Stalkers и кликаем на единственный доступный объект этого типа Bandit. Исправьте горизонтальные координаты примерно на полметра (или путем, указанным выше, выберите точки спауна для новоприбывших). Если хотите, можете добавить еще с пяток уголовников. Сохраняйтесь и начинайте новую игру.
5.2 Кстати, вы наверняка обратили внимание на то, что к бандиту прикреплен небольшой скрипт [smart_terrains] esc_fabrika_bandit = true. Он «привязывает» объект к определенной местности (в данном случае – к АТП). Если сейчас вы, ничего не меняя, заспауниете еще одного бандита, скажем, на блокпосту при выходе на Свалку, ваш сталкер неспешно потопает к фабрике. Но, скорее всего, не дойдет :) . Собаки, военный, сталкеры- нейтралы не способствуют укреплению здоровья. Поэтому, прежде чем добавить новый живой объект (людей или монстров), обращайте внимание, к какой территории они привязаны и, при необходимости, меняйте привязку. Узнать названия областей привязки можно, просмотрев объекты smart_terrains на уровне, строчка type = как раз и указывает название той или иной зоны. Разобраться, что есть что, несложно, названия esc_lager (лагерь новичков), esc_fabrika_bandit (бандиты на АТП), esc_bridge (полуразрушенный мост) и прочие говорят сами за себя. Просто вспомните, где и кто кучковался…
5.3 Хорошо, представление о том, как добавить в игру сталкеров и «старых» монстров (добавляются аналогично пункту 5.1) имеем, теперь давайте разберемся с неодушевленными предметами. Мебель, банки, ведра и прочий мусор оставим в стороне, а попробуем добавить нечто более для нас значимое. Например, амуницию. Чтобы сделать это немного изящнее, поместим все необходимое в ящик. Делается это следующим образом.
5.3.1. Ищем в поиске тип объекта physic_destroyable_object. Первым по очереди нам попадается рупор на блокпосту, но он нам не нужен. Смотрим дальше. Стакан… стакан… водка… да что за ерунда… Ага, вот, то, что нужно, объект 663 esc_surprise_box_002. Это обычный деревянный ящик, в который можно класть… все, что хочешь, можно класть.
5.3.2. Добавляем его в базу. «Редактирование – добавить объект в базу», создаем новый тип объектов «Items», а в него добавим новый объект «Wood_box».
5.3.3 Дальше все точно так же. Добавить объект - Items-Wood_box, выбираем координаты. Готово. А теперь положим туда что-нибудь. В теле скрипта (который у нас сейчас пуст, поскольку никаких команд при уничтожении ящика не выполняется), пишем следующее: [drop_box] / community = def_box / items = stalker_outfit. Слеш считать символом переноса на следующую строку. Таким макаром у нас в ящике будет храниться сталкеровский костюм. При желании туда можно положить все, что угодно, важно лишь правильно писать названия артефактов, оружия патронов и прочего снаряжения.
Напоследок хочу поделиться несколькими мелочами, которые, возможно, помогут вам. Может, кто-то и назовет нижеописанное читерством, но ведь вас никто не принуждает использовать нижеизложенное, а информация дается исключительно в образовательный целях.
Параметры персонажа. Есть в папке \gamedata\config\creatures замечательный файл под названием actor.ltx. А замечателен он тем, что описывает все параметры вашего персонажа. Прогуляемся по нему и выборочно подправим некоторые параметры. «Шура, сколько вам нужно денег для счастья?» (с). 6400? Больше? Набивайте нужную вам сумму в строке money и ни в чем себе не отказывайте. Устали от постоянного «потолка» в 60 кг переносимого веса? Подправьте строчку max_item_mass, и ваш герой станет заправским тяжеловесом. Но этот параметр отвечает только за тот вес, с которым вы сможете бегать, максимально переносимый же находится существенно ниже и называется max_walk_weight, ставьте его значение на 10-15 кг выше, чем max_item_mass. При изменении параметра jump_spee Меченый уделает по прыжкам даже кенгуру. Но только смотрите, не переусердствуйте, при значениях параметра около 25 при приземлении герой получает повреждение и небольшую кровопотерю. Не стоит также слишком мудрить и с параметрами ускорения – излишен резво срываясь с места, вы получите травму, и спринт при этом сбрасывается. Остальные параметры не столь интересны и оказывают значительно менее заметное влияние на геймплей.
Не знаю, как вы, а я считаю, что награда за отдельные квесты могла бы быть и побольше. Устраним эту несправедливость, тем более что это достаточно простой способ - не требует копания в редакторе и перезапуска игры, то есть, им можно воспользоваться прямо во время игры. Поясню, как обычно, на примере. Спасенный нами, Шустрый, дает нам квест на поиск усовершенствованной бандитской куртки, в качестве награды предлагая артефакт «кровь камня». Находим в папке Sourse файл task_manager и переносим его в папку D:\Game\S.T.A.L.K.E.R\gamedata\config\misc. Это файл описывает все квесты, которые есть в игре. Находим строчку tasks for shustriy, это в самом конце файла. Блок команд, идущий ниже, это и есть квест, точнее, условия его выдачи, выполнения и награды. Последнее нас интересует как раз больше всего. Строчка reward_item описывает то, что мы получим в качестве награды. А хотим мы, к примеру, не банальную «кровь камня», валяющуюся на Агропроме под каждым кустом, а редкую «Ночную звезду». Так и пишем reward_item = af_night_star. При желании строчек reward_item может быть сколько угодно, все зависит от того, что вы хотите получить – оружие, артефакты, снаряжение. Только не ошибитесь в написании названий.
Ну и напоследок. Несерьезно как-то каждый раз начинать игру с «макаровым» в кармане, да и тот надо выпрашивать у Волка. Не будем ждать милости от природы, у нас же есть редактор xrSpawner. Открываем его и находим объект 63 actor. В теле скрипта пишем [dont_spawn_character_supplies] /[spawn] («/» -переход на новую строку), а ниже – все, что душа пожелает. Например, так: wpn_fn2000, это FN2000, если кто не понял. Снабдим наше оружие боеприпасами ammo_5.56x45_ap = 20 / ammo_m209 = 10. При необходимости внесите в список аптечки и еду. Все, вы готовы к бою. Только ради всего святого, не затаривайтесь всякой экзотикой, вроде Гаусса, поскольку патронов к нему поблизости вы не найдете, возьмите лучше какой-нибудь хороший дробовик, типа «Чейзера». В общем, это все. Основные моменты по созданию мода я изложил, дальше дело за вами. Удачи.