Модификация в Wolfenstein

Posted by Anuriel on октября 30, 2004 - 00:00

Пролог
Было время, когда я вообще не играл в компьютерные игры. И компьютер покупал не для игр. Но когда фирма его собирала, мне их все равно установили. Обнаружив это, я успел удалить половину игр, в том числе и Quake, в который, тем не менее, сейчас с удовольствием играю. Но дело не в этом. За оставшуюся часть игр вступилась моя сестра — пришлось их оставить. И вот захожу я однажды в комнату, а сестра мне жалуется, что не может пройти уровень с зомби, вооруженными топорами. А игра-то была Return to Castle Wolfenstein. Это меня и заинтересовало, так как люблю я всякую мистику и все потустороннее. Прошел всю игру с большим удовольствием и потом еще несколько раз проходил заново. Но больше всего мне понравились два уровня в миссии "Темный секрет": "Катакомбы" (crypt1) и "Склеп" (crypt2)...

Случай
...И я проходил эти две карты по несколько раз просто для удовольствия, уж очень нравилась мне их игровая атмосфера. Но при прохождении в первый раз я часто сохранялся, а потом загружал сохраненку. Так вот, оказалось, что с каждой новой загрузкой случайным образом выбираются зомби, которых можно встретить в дальнейшем. То есть нет гарантии, что после быстрой загрузки, например, в crypt1 (если кто вспомнит), когда вы расправитесь с фашистами и первыми зомби и пойдете дальше по коридору в другую комнату, двое зомби с топорами вылезут из стен позади вас. Бывает, они могут стоять дальше этого места, в углах комнаты. Значит, здесь всего четверо таких зомби — две пары, а разработчики сделали так, что при перезагрузке карты из этих двух пар случайным образом выбирается одна, которую вы и встретите на этот раз, с удивлением обнаружив, что зомби, сидевшие в стенах, теперь стоят в углах.

Модификация
Этот случай натолкнул меня на мысль: а что, если сделать так, чтобы было всегда четверо зомби — так интереснее играть будет, ведь чем больше, тем лучше. То есть надо сделать, чтобы независимо от количества быстрых загрузок на карте всегда были все предусмотренные враги. Рассмотрим, как это сделать, на примере уровня "Катакомбы" (crypt1). Придется покопаться в файлах игры.
В папке Main каталога, куда установлен RTCW, есть файлы *.pk3 — это простые архивы, похожие на zip. Движок Quake3, на котором сделан RTCW, достает из них упакованные текстуры, карты, скрипты и все это перерабатывает в игру. Берем Total Commander любой версии и нагло залазим в архив pak0.pk3 в папке Main. Там находим папочку Maps, где и лежат все карты (*.aas; *.bsp), скрипты для них (*.script) и настройки искусственного интеллекта (*.ai). Копируем куда-нибудь crypt1.ai и crypt1.script и правим их в Блокноте. Внутри видим что-то похожее на исходный текст программы на языке С. В crypt1.ai находятся личные настройки врагов. Нас интересует скрипт-player, приготовленный для игрока. Он находится в самом начале файла, и все, что внутри скобок {}, относится к действиям играющего на карте. Здесь же есть и вложенные скобки {}, озаглавленные, например, словами spawn, playerstart и т.д. Для описания значения каждого такого поля вообще понадобилось бы несколько статей, так что перейду к самому главному, хотя без некоторых пояснений здесь не обойтись. В любой карте триггер срабатывает при определенном действии игрока, например, при входе в комнату. У каждого триггера свое имя, и когда он срабатывает, он вызывает соответствующий подскриптик из файла имя_карты.ai, находящийся в одном большом блоке-скрипте player{...}. Находим строку "// Spawns Zombie3". Ниже под ней видим:

trigger action2
{
alertentity zmoan1
trigger counter1 action2
}

Именно здесь и описан тот момент игры, когда подходишь к месту, где из стен вырываются те самые зомби с топорами. Здесь alertentity запускает скрипт zmoan1, находящийся в файле pak0.pk3\sound\scripts\crypt1.sounds. Он просто воспроизводит звук, сопровождающий появление зомби. Его можно не трогать, а если удалить "alertentity zmoan1", то просто не будет слышен ужасный вопль, когда вы увидите зомби в конце противоположного коридора. Далее trigger запускает скрипт action2, находящийся в контейнере counter1, который, в свою очередь, описан в crypt1.script. Находим crypt1.script\counter1{...trigger action2 {...}...} и видим, что случайным образом (random) выбирается один из двух следующих скриптов: action2_a или action2_b. Причем в первом вызывается зомби warzombie3e, а во втором — нет. В них тоже каким-то образом выбирается скрипт ac-tion2_choose, в котором производится выбор между action2_1 и action2_2. В конце концов видно, что action2_1 ставит на карту (alertentity) пару зомби: warzombie3 и warzombie3a, а action2_2 — warzombie3c и warzombie3d. Таким образом мы определили, что всего есть пятеро зомби, связанных со второй комнатой в crypt1: warzombie3, warzombie3a, …3c, …3d, …3e. Теперь в crypt1.ai\player{...trigger action2{...}...} удаляем строку "trigger counter1 action2" и просто ставим вызовы этих зомби. Вот что получается:

trigger action2
{
alertentity zmoan1//звук вопля
alertentity warzombie3
alertentity warzombie3a
alertentity warzombie3c
alertentity warzombie3d
alertentity warzombie3e//зомби в конце коридора
}

Главный фокус в том, что в player{...} содержатся скрипты, вызываемые картой при появлении игрока в определенных местах, а они, в свою очередь, могут обращаться к crypt1. script\counter1{...}, в котором содержатся дополнительные скрипты случайного выбора зомби. Таким же образом можно добраться до настроек всех врагов. Например, в crypt1.ai есть zombie6c{...}, вот его атрибуты:

attributes
{
fov 240// угол зрения
starting_health 80//начальное здоровье 80
hearing_scale 0.0//масштаб слуха
}
...

И так далее. Можно переделать полностью crypt1.ai и crypt1.script или вообще всю игру. Полностью переделанные файлы со всеми зомби для карты crypt1 можно скачать с http://wolfupsite.narod.ru, которую я когда-то от безделья сделал. После редактирования файлы надо упаковать обратно, запустить WolfSP.exe, загрузить crypt1 из меню автосохранений и посмотреть, что получилось.

Эпилог
Если вы действительно являетесь фанатом Wolfenstein'а, то такая идея вам может пригодиться. Каждый, кто увлекался какой-нибудь игрой, наверное, хоть раз хотел что-нибудь изменить в ней.

Qman, qman@bigmir.net

№ 58

Geek Bar Подвал

Перепечатка материалов разрешается только с указанием индексируемой ссылки на первоисточник.

Наши самые актуальные статьи вы найдете в газете "Виртуальные радости".