Бандитский Нью-Йорк. Вскрытие Max Payne 2
В первой статье цикла мы кардинально изменили геймплей “Макса”, увеличили сложность игры, переписали скриптовые вставки между миссиями, научились изменять траекторию полета камеры… Детально обсудили, как сделать снайперский мод и при этом не нарушить игрового баланса. Сегодня мы пойдем дальше… Мы научимся изменять внешний вид оружия и править его характеристики, добавим в игру новые уровни, а также — все глубоко вдохнули! — разберемся, как пройти игру практически за любого персонажа MP2. Навострите ваши ушки, пошире разуйте глаза, приведите клавиатуры и мыши в состояние боевой готовности. Сделав все, что описано в статье, вы получите совершенно новую игру. Игру, автором которой будете вы…
Стандартная ситуация. Если бы мы играли в оригинальную игру, попасть в голову противнику было бы очень просто. Но… параметр “гуляния” прицела повышен, стрелять очень сложно.
Пушки — Максу не игрушки Следующий элемент геймплея, который мы будем дорабатывать — это оружейный арсенал игрока и его врагов. В этом нам помогут файл shooting.h и файлы с расширением txt из каталога \data\database\weapons архива MP2_Data.ras. _Снаряды _ Файл shooting.h находится в одной папке с разобранным в прошлой статье ai_ranges.h — \data\database (архив MP2_Init.ras ). В первом вы найдете основные характеристики доступного в игре вооружения. Параметры в файле оформлены почти также, как и в ai_ranges.h. Каждый имеет вид: #define X_Y Z , где X — название оружия, к которому относится параметр, Y — название, Z — значение. Слово DUAL на конце названия параметра означает, что речь идет об удвоенном оружии (например, атрибут DESERTEAGLEDUAL относится к двум “Пустынным орлам”). Сам же файл можно условно поделить на тематические блоки, каждый из которых, за исключением первого и последнего, несет в себе параметры того или иного вида оружия: какого — отражено в заглавии блока, помеченного символами “ // ” (они обозначают, что строка является комментарием и игрой не учитывается). Второй блок соответствует пистолету Beretta , третий блок — пистолету Desert Eagle , четвертый — ружьям, пятый — автомату Ingram , шестой — автомату MP5 , седьмой — автомату Калашникова, восьмой — карабину M4 , девятый — снайперской винтовке, одиннадцатый — винтовке Драгунова и двенадцатый — коктейлю Молотова и гранатам. Что касается начального блока файла, то в нем вы найдете несколько атрибутов, задающих скорость полета пули, а именно: BULLETVELOCITY_PLAYER — скорость полета снаряда, выпущенного из ствола (оружие главного героя). BULLETVELOCITY_PLAYERRANDOM — возможность случайного понижения или повышения скорости полета пули, которой стреляет оружие главного героя. При значительном увеличении этого параметра вы можете добиться забавного эффекта: пуля будет то застывать в воздухе, то лететь чуть ли не со скоростью света. BULLETVELOCITY_ENEMY — скорость полета снаряда, выпущенного из оружия вашим врагом. Обратите внимание на то, что значение в три раза меньше скорости полета пули, вылетающей из оружия главного героя. Лично мне кажется, что хорошим игрокам следует ликвидировать эту несправедливость и поставить сюда если не 150, то по крайней мере 100. Играть будет интересней, но и заметно сложней.
Мона Сакс в неглиже. Раздеть леди — дело нескольких минут. Всего-то подправить пару параметров.
BULLETVELOCITY_ENEMYRANDOM — возможность случайного понижения или повышения скорости полета пули, которой стреляет оружие вашего противника. А вот список параметров, наполняющих блоки, каждый из которых соответствует одному из игровых орудий убийства. CLIPSIZE — число пуль, помещающихся в обойму ствола. POCKETSIZE — максимальное количество патронов к данному оружию, которые вы можете носить с собой. BULLETDAMAGE — урон от снаряда, выпущенного из этой пушки. BULLETPENETRATION — пробивная способность (чем выше, тем большие разрушения остаются от снаряда, которым стреляет данное оружие). SHOOTINGFREQUENCY — скорострельность. SLOWMOTIONMULTIPLIER — умножитель скорострельности стрельбы из ствола при использовании Bullet Time. Естественно, у всех игровых орудий убийства он меньше единицы. Поставьте сюда значение больше 1, и при “замедленной съемке” ствол начнет стрелять быстрее, чем в обычном режиме. Выглядит очень эффектно. BULLETSPREAD — дальность полета снаряда (в метрах), пущенного из данного ствола. “Пустынные орлы”, палящие с бесконечным боезапасом. MP5, палящие со скоростью рейлгана. Пули, замирающие у самого сердца врагов, а потом за миллисекунду, рвущие тела оппонентов на куски. Гранаты, разносящие врагов в радиусе сотни метров. И даже снайперка со скорострельностью “Узи”. Всего этого можно добиться, изменив всего несколько параметров в текстовом файле shooting.h. _Стволы _ Перечисленные выше настройки — далеко не единственные параметры игровых орудий убийства. В директории \data\database\weapons архива MP2_Data.ras каждому виду вооружения соответствует отдельный txt -файл, называющийся так же, как и характеризуемый им ствол. Все эти текстовые файлы содержат ряд немаловажных параметров оружия, рассортированных по разделам. Так, в блоке LOD находятся атрибуты, задающие внешний вид ствола, в разделе Animationset —
Пройти Max Payne 2, управляя за Бравуру, — настоящий подвиг: таких медлительных персонажей в игре мало.
параметры анимации, в Attributes — общие характеристики. Нам в большей степени будет полезен именно последний раздел, в котором можно изменять следующие параметры. ShootDodgeAllowed — возможность совершения “замедленного” прыжка в сторону с данным стволом ( YES — имеется, NO — нет). У оружия, “висящего” на единичке, она отсутствует. Могу порекомендовать вам поставить YES и этим видам вооружения. Теперь вы сможете кидать гранату в падении и бить незадачливых врагов прикладом в “замедленном” прыжке. AutoAimingAllowed — автоприцеливание ( YES — есть, NO — нет). ReloadAmount — число возможных перезарядок оружия, после чего оно приходит в негодность. У всех видов вооружения кроме гранат и коктейля Молотова здесь стоит значение -1 , означающее, что пушку можно перезаряжать сколько угодно раз. FOVMultiplier — наличие снайперского прицела. Если значение равно единице, прицел отсутствует. Чем ниже значение, тем больше максимальное увеличение, даваемое прицелом. ZoomInSpeed — скорость зумирования, то есть приближения объекта в прицеле ствола. Здесь следует сказать, что, когда вы стреляете с использованием снайперского прицела, последний слегка колеблется. Описанию этих колебаний и посвящены следующие шесть параметров. ShakeLength — продолжительность одного колебания снайперского прицела. У оружия, страдающего отсутствием последнего, значения этой и следующих пяти характеристик равны нулю. ShakeStrengthX — сила колебания снайперского прицела по оси X, то есть в горизонтальном направлении. ShakeStrengthY — сила покачивания снайперского прицела по оси Y, то есть в вертикальном направлении. CrouchingShakeLength — продолжительность одного колебания снайперского прицела при ведении стрельбы в приседе. CrouchingShakeStrengthX — сила покачивания снайперского прицела по горизонтали при стрельбе в приседе. CrouchingShakeStrengthY — сила колебания снайперского прицела по вертикали при стрельбе в приседе. Поскольку Макс Пейн все-таки не является профессиональным снайпером, правдоподобнее будет слегка повысить значения этого и предыдущих пяти характеристик для снайперской винтовки и винтовки Драгунова, а то Макс слишком лихо управляется с этими видами вооружения, в результате чего отстрел врагов слишком прост.
Избавив Макса от чувствительности к падениям, вы сможете проникать в недоступные ранее места на уровнях.
UsesLowerHearingGroup — громкость стрельбы из ствола ( TRUE — пониженная, FALSE — повышенная), то есть фактически параметр описывает наличие глушителя. Чем выше указанное здесь число, тем быстрее враги реагируют на произведенные из этой пушки выстрелы. ShortRangeOnly — тип оружия по дальности стрельбы: TRUE — оружие ближнего боя, FALSE — дальнобойное. CrosshairEnabled — небольшой прицел на экране при использовании этого вида вооружения ( TRUE — есть, FALSE — нет). Также в файле вы найдете показатели Clipsize , Pocketsize , DefaultShootingFrequency и ShootingFrequencyMultiplier , повторяющие аналогичные настройки из файла shooting.h , разобранного чуть выше. Исключение составляют лишь параметры Clipsize и Pocketsize из файла Painkiller.txt (этот файл описывает параметры болеутоляющих средств). Эти атрибуты не имеют аналогов в файле shooting.h (так как в нем не предусмотрено раздела, соответствующего аптечкам). Первый из них определяет число стандартов болеутоляющего, которое расходуется за один раз, второй же задает максимальное количество лекарства, которое вы можете одновременно носить с собой. Регулировка значения этой характеристики позволит вам ощутимым образом влиять на сложность игры. Правя файл shooting.h и “оружейные” txt -файлы из архива MP2_Data.ras , несложно изменять имеющиеся в игре средства уничтожения. Если же подключить к этому корректировку скинов оружия (они лежат в каталоге \data\database\weapons\sharedtextures архива MP2_Data.ras ), то несложно создать совершенно новый оружейный арсенал. Дарим вам идею, которую мы реализовали в своем моде: мы добавили к вооружению два новых ствола — пистолет с глушителем и лазерную винтовку. В первом случае мы взяли за основу пистолет Beretta. Изменили некоторые детали скина, поставили параметру UsesLowerHearingGroup значение TRUE , слегка уменьшили число патронов в обойме и урон от выстрелов (чтобы пистолет не получился слишком уж убойным). Получилось отличное оружие, удобное для незаметного отстрела врагов, особенно когда нет под рукой снайперской винтовки. Что же касается снайперки, то ее мы переделали в лазерную винтовку, немного подработав скин, существенно повысив скорострельность, подняв наносимый стволом ущерб и уменьшив количество заряжаемых патронов. Кроме того, в данном случае необходима корректировка скина пули (скины снарядов вы найдете в архиве MP2_Data.ras , в директории \projectiles\SharedTextures ), которым стреляет пушка, и превращение его в лазерный заряд (самый простой способ добиться этого — полностью закрасить скин пули в красноватый цвет). В распоряжении игрока появилось первоклассное оружие, идеально подходящее для “выноса” врагов на расстоянии (чтобы не было дисбаланса при добавлении столь мощного вида вооружения, советуем усилить противников).
Даже этот слабый, на первый взгляд, враг в новой модификации является метким стрелком, справиться с которым не так-то просто.
Улицы Нью-Йорка В архиве MP2_Data.ras вы найдете файл levels.txt. Он расположен в каталоге \data\database\levels и отвечает за игровые уровни. В начале файла находятся три общих параметра (они имеют вид #define X Y , где X — название параметра, а Y — значение), в немалой степени влияющих на геймплей. GRAVITY_VALUE — гравитация. По умолчанию здесь стоит отрицательное значение. Поставив положительное число, вы перевернете изображение вверх ногами. KILL_TIMEBONUS — время, которое отнимается у вас, когда вы убиваете врага при игре на время (уровень сложности New York Minute ). Если указать здесь положительное число, время будет прибавляться, а не вычитаться. SURVIVAL_KILL_TIMEBONUS — бонус времени, даваемый за убийство неприятеля при игре на уровне сложности Dead Man Walking (игра на выживание). Последующее содержимое файла можно условно разделить на две части. Вторая часть начинается после комментария SURVIVAL LEVELS и содержит характеристики миссий на выживание (сложность Dead Man Walking). В первой части файла находятся те же параметры, но относящиеся к основным уровням игры, каждому из которых отводится отдельный раздел. Каждый раздел, в свою очередь, состоит из четырех подразделов: Properties , Difficulty , Timedmode и SingleLevelInit. Первый из них содержит основные атрибуты карты. LevelName — кодовое название уровня. Оно выглядит следующим образом: LNID_PARTx_CHAPTERy , где x — номер части, в которую входит уровень
Вместимость обоймы винтовки Драгунова увеличена до 30 патронов посредством редактирования атрибута CLIPSIZE.
(всего в игре таких части три), а y — номер главы (если речь идет о прологе части, вместо слова CHAPTER и номера главы стоит слово PROLOGUE ). Directory — директория, в которой лежит файл с картой (эта директория должна находиться по адресу: \data\database\levels и лежать в архиве MP2_Levels_A.ras , если это глава из первой части, архива MP2_Levels_B.ras — если из второй, MP2_Levels_C.ras — из третьей). Level — файл данной карты (должен иметь формат ldb ). LoadingScreen — картинка, появляющаяся на экране при загрузке уровня. Указанный здесь графический файл должен быть упакован в архив MP2_English.ras и располагаться по адресу: \data\database\levels\bitmaps. PlayerSkinName — модель игрока на данной карте. Список возможных значений представлен названиями подкаталогов папки \data\database\levels\skins архива MP2_Data.ras. Наиболее колоритные персонажи: C00_NPC_Bystander_B — бродяга, C00_NPC_Doctor_Female_A и C00_NPC_Doctor_Female_B — женщины-доктора, C01_Cleaner_X (вместо X стоит латинская буква от A до E ) — бандиты, C01_Mafioso_X (X — латинская буква от A до E ) — мафиози, C02_Cleaner_Boss_X (X — буква от A до C ) — бандит-босс, C02_NPC_Security_A и C02_ NPC_Security_B — охранники, C03_Mafioso_Boss_A — мафиози-босс, C03_Russian_X (X — буква от A до D ) — русские, C04_BlackOps_X (X — буква от A до C ) — спецназовцы, C04_NPC_NYPD_X (X — буква от A до C ) — частные детективы-мужчины, C04_NPC_NYPD_Female_A и C04_NPC_NYPD_Female_B — детективы-женщины, S_AlfredWoden — старик Альфред Вуден, S_Bodyguard_A и S_Bodyguard_B — телохранители, S_Businessman и S_Businessman_B — бизнесмены, S_JimBravura — детектив Джим Бравура (начальник Макса) в плаще, S_JimBravura_Indoors — Бравура в пиджаке, S_ValerieWinterson — детектив Винтерсон, S_VinnieGognitti — гангстер Вини Гогнитти, S_VladimirLem — русский мафиози Владимир Лем, S_MonaSax_Naked_Towel — Мона Сакс, укутанная в полотенце, и, наконец, сюрприз от разработчиков —
С таким приближением прицела вы можете заглянуть прямо в глаза не подозревающему о вашем присутствии противнику.
S_MonaSax_Naked — обнаженная Мона (лицам до 18 просмотр воспрещен!). Учтите, что в некоторых случаях при замене модели Макса или Моны на какую-то другую, игра может вылетать сразу после загрузки карты. В этом случае вам следует открыть файл globalconfig.txt и исправить значение параметра SphereRadius на число от 0.01 до 0.05. Впрочем, это не всегда помогает. Есть модели, заменять которыми главного героя нельзя, иначе игра не будет запускаться. В основном, персонажи женского пола не “хотят” вставать на место Макса, а мужского — на место Моны. И тут уже ничего не поделаешь. Следует также отметить, что, заменяя модель игрока, вы в значительной степени влияете на геймплей, так как каждый персонаж в игре уникален, он имеет свои, только ему свойственные характеристики. Так, толстяк Бравура передвигается очень медленно, а прыжки в сторону, по всему видно, даются ему крайне тяжело. Кроме того, новая модель будет теперь присутствовать и в скриптовых сценах миссии вместо старой, никаких “несостыковок” между роликами на движке и самой игрой не возникнет. Так что, если вы задумали поменять действующие лица игры, смело воплощайте свою идею в жизнь. PlayerStartingPlace — стартовая точка карты. Fogging — наличие на карте тумана ( TRUE — есть, FALSE — нет). FogColor — цвет тумана. Значение показателя выглядит так: ( X, Y, Z ) , где X, Y и Z — определенные числа. Оно задается в системе RGB (Red, Green, Blue) — системе цветоделения, при которой каждый цвет складывается из трех составляющих: красный (X), зеленый (Y) и синий (Z). Чем больше X, Y или Z, тем выше доля соответствующего цвета в окраске тумана. WorldSphere — фон для карты (как правило, в него входит небо и крыши окрестных построек). Перечень возможных значений атрибута выглядит так: generic_a , generic_b , generic_c , upper_east_side , a _
_
Видоизменен экран героя. Увеличена вместительность обоймы “Калашникова”. Даже с такими минимальными изменениями игра уже тянет на модификацию.
ddress_unknown , construction_site , dream , manor. StartupLevel — данная настройка определяет, является ли уровень стартовым ( TRUE — да, FALSE — нет). При значении TRUE карта будет загружаться сразу после того, как вы запустите игру. ExitLevel — этим параметром определяется, будет ли игра вылетать при нажатии клавиши Escape ( TRUE — да, FALSE — нет). Еще один подраздел, который может понадобиться нам при создании мода, носит имя Difficulty и задает сложность игры в данной миссии. Этот подраздел имеет лишь три ценные для нас характеристики. MaximumHealth — максимальное “количество” здоровья у игрока на данном уровне. MinimumHealth — минимальное здоровье у игрока (если уровень здоровья игрока падает ниже указанного здесь числа, то он умирает). HardcoreHealth — минимальное здоровье игрока, при котором игра усложняется. В финальной версии игры эта особенность не используется (так как разработчики поставили сюда число, равное максимальному здоровью), но вы можете вернуть все на свои места, понизив значение параметра. Редактируя атрибуты из файла levels.txt , несложно изменить оригинальную кампанию, а приложив чуть больше усилий — сделать совершенно новую. Для этого придется подправить значения отдельных настроек этого файла, “подкрепить” это действие добавлением в игру новых карт (для их создания предусмотрен редактор MaxEd (подробно о работе в редакторе читайте в цикле статей “ Максимум от MAXимума ” на страницах “ Мастерской ”) с новыми действующими лицами и обновленной сюжетной линией (осуществить задуманное вам поможет переозвучивание игровых персонажей, изменение их скинов, перерисовывание “комиксов” и переписывание текстов). Только вдумайтесь: вы можете пройти игру за любого из персонажей, встречающихся в Max Payne 2! Обратите внимание, что при вставке в игру новых карт их нужно прописать в значении параметра Level соответствующего уровня и поместить в один из следующих архивов в зависимости от части, к которой будет принадлежать добавляемая глава: MP2_Levels_A.ras , MP2_Levels_B.ras , MP2_Levels_C.ras.
После изменения ряда параметров уровни игры можно буквально залить реками крови.
__ Жажда крови Что и говорить, Max Payne 2 в плане кровавости уступает многим экшенам современности. По этому параметру игра не идет ни в какое сравнение с Soldier of Fortune 2, GTA: Vice City, не говоря уже о Postal 2. Впрочем, все можно поправить. И даже кровавость. Делается это следующим образом. Первым делом найдите файл decals.txt , хранящийся в архиве MP2_Data.ras по адресу: \data\database\decals. В нем имеются разделы decal_blood_small , decal_blood_medium и decal_blood_large (первый из них отвечает за маленькие пятна крови, второй — за средние и третий — за большие), а в каждом из них — подразделы Default и Glass. В последнем содержатся параметры кровяного пятна для стекла (то есть для случая, когда то попадает на объект, сделанный из стекла), в первом — для всех остальных типов поверхности. В обоих подразделах присутствуют показатели MinimumRadius (отвечает за минимальный радиус пятна крови) и MaximumRadius (максимальный радиус). Увеличьте значения этих атрибутов, и кровавость игры поднимется на новый уровень (чем значительнее увеличите, тем выше будет кровавость). Лично я остановил свой выбор на значении 4 для всех двенадцати характеристик. Теперь крови станет куда больше!
*** * *** Настало время сделать свою собственную модификацию. При этом постарайтесь внести изменения во все или почти все стороны игрового процесса, чтобы мод не получился слишком однообразным или до боли напоминающим оригинальную игру. Правьте общие игровые настройки, добавляйте в игру новые виды вооружения, меняйте параметры AI, делая врагов более разумными, создавайте новые кампании, вставляйте в игру новые звуки и музыкальные треки, переписывайте сюжет. Воплотить все это в жизнь вполне реально, ведь у нас есть все необходимые инструменты в лице всевозможных файлов — текстовых и графических. Если хотите конкретных идей, могу предложить вам сотворить мод, где вы исполняете роль злобного бандита. Для реализации вам понадобиться подобрать игроку подходящую модель, то есть переселить главного героя в шкуру какого-нибудь мафиози (напомню, что модель можно поменять, редактируя параметр PlayerSkinName из файла levels.txt архива MP2_Data.ras ). Кроме того, необходимо присвоить показателю NPC_SLOWMOTIONBONUS (ищите его в файле ai_ranges.h архива MP2_Init.ras ) положительное значение (желательно, чтобы оно было повыше — где-то в районе 0.20 или даже еще больше), что сделает выгодным для вас убивать мирных людей. При этом неплохо бы поубавить бонусы к Bullet Time, даваемые за истребление врагов, чтобы убийство NPC было для игрока по-настоящему нужным и оправданным действием. Сами понимаете, это лишь необходимый минимум для модификации. Для полноты картины крайне желательно должным образом переработать сюжет и оригинальную кампанию, а также снабдить нового героя новым же вооружением. Все — “бандитский” мод готов. Важно также понимать, что такого рода модификация — далеко не единственный вариант. При имеющемся многообразии настроек возможны самые невероятные и оригинальные решения. Удачно вам провести вскрытие!