31 января 2008
Обновлено 17.05.2023

Биошоковая терапия. Новое оружие в BioShock

Биошоковая терапия. Новое оружие в BioShock - изображение обложка

Ученые подводного города Rapture изобрели новые виды боеприпасов. Среди них — резиновые пули и пули с заморозкой, в буквальном смысле останавливающие врагов. Наконечники новых стрел к арбалету пропитаны бактериальными спорами, которые при попадании в кровь жертвы заражают ее смертельной болезнью. Под воздействием других арбалетных снарядов броня противников рассыпается, словно карточный домик на ветру.

Все эти боеприпасы разработчики изначально собирались добавить в игру, но потом отказались от них (возможно, на некоторые просто не хватило времени). Так что нам придется добавить их в BioShock самостоятельно.

Смертельное оружие

Основной инструмент для модифицирования игры — обычный «Блокнот» или любой другой текстовый редактор. Рабочим материалом послужит файл ConfigINI.IBF из директории < Каталог игры>\Content. Он состоит из нескольких разделов, нас интересуют только те, что относятся к оружию. Они располагаются почти в самом начале файла, сразу за комментарием WEAPONS.INI TABLE OF CONTENTS. «Оружейный» блок состоит из восьми модулей: PLAYER WEAPONS & AMMO — параметры конкретных видов оружия игрока, MONSTER WEAPONS & AMMO — параметры оружия монстров, STIMULI SETS — характеристики различных видов урона, DAMAGE RESISTANCE SETS — параметры защиты от попаданий, Weapon Bases — базовые характеристики вооружения, Ammunition Bases & Hierarchy — основные характеристики патронов, Projectile Data & Hierarchy — параметры снарядов, WEAPON UPGRADE DATA — апгрейды.

Каждый модуль состоит из множества разделов, названия которых выделены фигурными скобками. Остановимся пока на начальном модуле — PLAYER WEAPONS & AMMO. В нем каждому виду оружия (которых, напомним, в игре семь плюс фотокамера) соответствует четыре соседних блока (исключение составляет гаечный ключ, ему отводится всего два раздела). Первый, именуемый ShockGame.X , содержит общие параметры, а еще три с названиями вида ShockGame.XYAmmo — характеристики боеприпасов (X — название оружия, Y — боеприпаса). На месте X могут стоять следующие наименования: Wrench — гаечный ключ, Pistol — пистолет, ShotGun — ружье, Crossbow — арбалет, GrenadeLauncher — гранатомет, ChemicalThrower — химическая пушка, MachineGun — пулемет, ResearchCamera — фотокамера.

Общее

Познакомимся поближе с разделом ShockGame.X. При создании нового оружия нам пригодятся следующие показатели:

WeaponModel — модель оружия;

FriendlyName — название пушки, отображаемое в игре;

AvailableAmmoTypes — вид патронов, которыми стреляет оружие. Поскольку в оригинале у каждого образца (кроме первого) их три, то и параметров с таким именем соответственно тоже три (плюс некоторые могут быть закомментированы);

DefaultAmmoSelection — вид боеприпасов, который используется по умолчанию;

BaseMagazineSize — вместимость магазина. Этот и три следующих показателя могут улучшаться при апгрейде оружия;

BaseAccuracy — точность стрельбы;

BaseReloadRate — продолжительность перезарядки;

BaseFireRate — скорострельность. Чем ниже значение, тем скорость стрельбы выше;

OnFiredEffects — эффект, появляющийся при стрельбе;

UpgradeStatName — доступный апгрейд. В качестве значения (строится по принципу: XUpgrade _ Y , где X — название пушки, а Y — улучшаемый параметр) здесь указывается название раздела (модуль WEAPON UPGRADE DATA ), характеризующего это улучшение. Если для данного вида оружия есть несколько апгрейдов, то и атрибутов будет больше одного;

CanBeZoomed — имеет ли оружие прицел с зумом ( true — да, false — нет);

ZoomedFOVAngle — угол обзора при использовании зума. Этот параметр активируется только при значении true у параметра XUpgrade_Y;

ZoomLevels — величина приближения. Сколько таких отметок у прицела, столько и атрибутов с названием ZoomLevels ;

ZoomSpeed — быстрота зумирования;

bHideWhileUnequipped — прятать ли пушку, когда у игрока к ней нет патронов ( true — да, false — нет).

Снаряды

Теперь разберем блок ShockGame.XY. Обратите внимание, что у некоторых видов оружия таких разделов больше трех, вот только все «лишние» закомментированы. В каждом блоке вы обнаружите следующие характеристики патронов:

FriendlyName — название боеприпаса, которое используется в игре;

Description — описание зарядов;

VisualAmmoModel — модель патронов;

DamageStimuliSetName — наносимый урон. Здесь указывается название соответствующего раздела (из модуля STIMULI SETS ), в котором задаются виды и величина повреждения;

NumRoundsUsedPerShot — количество патронов, которое расходуется за один выстрел;

NumBurstShots — сколько раз ствол стреляет после нажатия на спусковой крючок;

MaximumStackSize — максимальное количество патронов данного типа, которое вы можете одновременно носить с собой;

AttackRange — дальность атаки (используется только для арбалета);

CreditValue — стоимость боекомплекта.

Следующие три атрибута прописаны лишь для арбалета и гранатомета:

ProjectileClass — класс снаряда (смотрите одноименный раздел модуля Projectile Data & Hierarchy);

InitialVelocity — стартовая скорость полета снаряда;

NumProjectilesToFire — число снарядов, которыми одновременно стреляет оружие.

Следующие пять характеристик относятся только к гранатомету:

FuseTime — скорость детонации;

InnerDamageRadius — внутренний радиус взрыва (зона повышенного урона);

OuterDamageRadius — внешний радиус взрыва;

ExplodeOnImpact — взрывается ли самостоятельно снаряд при контакте с какой-либо поверхностью ( true — да, false — нет);

TimeToArm — время (в секундах), которое тратится на переключение на указанный вид боеприпасов.

Разделы вида XStimuliSet (где X — тип снаряда), на которые ссылается параметр DamageStimuliSetName , располагают следующими характеристиками снаряда. Первая из них является составной: Stimulus=(Type=STIMULUS_X,Amount=Y,Chance=Z). X — тип воздействия, оказываемого снарядом на жертву, Y — величина этого воздействия (это либо урон, либо продолжительность действия) и Z — шанс, что оно подействует на жертву ( 1.0 — стопроцентный). Этот атрибут может повторяться, поскольку и жертвы бывают разные, и воздействий может быть сразу несколько.

На месте X могут быть следующие сочетания: AIGenericPiercing (общий урон), AIArmorPiercing (разрушение брони), AIAntiPersonnel (ущерб здоровью), AIBludgeoning (погружение в состояние грогги, т.е. одномоментное резкое ухудшение состояния), AIHeat (жар), AICold (холод), AIElectric (электричество), AIExplosive (взрыв) и AIFalling (падение). Все они задают воздействие снаряда на ваших врагов. Есть у этих девяти вариантов и аналоги без приставки AI — они определяют негативное влияние на игрока. Наконец, существует шесть специфичных видов повреждения, воздействующих и на игрока, и на неприятелей. Это Shocked (шок), Frozen (заморозка), Burning (горение), Diseased (болезнь), Berserk (бешенство), LatentBerserk (скрытое бешенство). Показатель Y в данном случае определяет продолжительность этого влияния, то бишь пребывания жертвы в указанном состоянии.

Еще четыре важных характеристики из блока типа XStimuliSet :

MomentumScale — импульс, который получает жертва. Изменяется от 0 до 10.0f ;

DamageType — тип повреждения от снаряда. Explosive — взрыв, Ranged — огнестрельное ранение, Melee — травма от удара;

DamageStrength — обобщенный ущерб. Light — маленький, Medium — средний, Heavy — большой.

Рассекречивание

В игре пять скрытых видов боеприпасов. Они встречаются сразу у трех видов оружия: арбалета, химической пушки и пулемета (у арбалета и пулемета по 2 варианта, у химической пушки — 1). Загляните в раздел ShockGame.Crossbow и снимите комментарий со следующих двух строк, удалив из них символ ; :

;AvailableAmmoTypes=class’ShockGame.Crossbow_ArmorPiercingBolt’

;AvailableAmmoTypes=class’ShockGame.Crossbow_DiseaseBolt’

То же самое нужно проделать и с целиком закомментированными блоками ShockGame.Crossbow_ArmorPiercingBolt и ShockGame.Crossbow_DiseaseBolt (в общей сложности нужно исправить 32 строки).

Найдите разделы ArmorPiercingBoltStimuliSet и DiseaseBoltStimuliSet (рекомендуем воспользоваться функцией поиска), раскомментируйте их (а это всего 5 строк в первом случае и 6 — во втором). В результате арбалет получит два новых типа стрел: бронебойные (ударно пробивают броню) и несущие болезнь (заражают пострадавшего смертоносной заразой).

Переходим к химической пушке. В раздел ShockGame.ChemicalThrower после строки AvailableAmmoTypes=class’ShockGame.ChemicalThrower_IonicGel’ пропишите похожую строку — AvailableAmmoTypes=class’ShockGame.ChemicalThrower_Accelerant’. Снимите комментарии с 12 строк раздела ShockGame.ChemicalThrower_Accelerant. Кроме того, параметру DamageStimuliSetName необходимо установить значение KeroseneStimuliSet. Теперь можно прожигать тела врагов до костей.

Пулемет можно научить стрелять резиновыми пулями. Но предварительно необходимо зайти в блок ShockGame.MachineGun и удалить точку с запятой из строки ;AvailableAmmoTypes=class’ShockGame.MachineGun_RubberBullet’

Следующий шаг — «открытие» раздела ShockGame.MachineGun_RubberBullet. Снимать комментарий нужно не со всего блока, не трогайте следующие две строки:

; AttackRange=9999

;SpreadOfFire=(Yaw=0, Pitch=0, Roll=0)

После этого раскомментируйте все 5 строк раздела MachineGunRubberBulletStimuliSet.

Резиновые пули — заряды довольно оригинальные. Урон минимален, зато пострадавший от них враг на некоторое время теряет ориентацию, в этот момент его можно атаковать более мощным оружием.

Есть у пулемета и еще один спрятанный тип патронов — замораживающий (аналог соответствующего плазмида). Его можно вставить на место противопехотных пуль. Для этого в блоке ShockGame.MachineGun_FrozenBullet значение показателя DamageStimuliSetName замените на MachineGunFrozenBulletStimuliSet. Снимите комментарий с раздела MachineGunFrozenBulletStimuliSet (нужно «открыть» 8 строк).

Теперь вы можете замораживать врагов пулями! Несколько точных попаданий — и враг уже в ледяном плену. А там уж делайте с ним что заблагорассудится. Правда, пулеметная заморозка, в отличие от плазмидной, срабатывает нечасто, и больно уж она коротка. Зато эти пули наносят жертве еще и ущерб здоровью.

Да, и не забудьте, если уж вы собрались делать полноценный оружейный мод, придумать четырем новым типам патронов подходящие описания (у арбалетного ArmorPiercingBolt оно уже есть). Для этого в блоках ShockGame.Crossbow_DiseaseBolt (заразная стрела), ShockGame.ChemicalThrower_Accelerant (катализаторный заряд) и ShockGame.MachineGun_RubberBullet (резиновая пуля) после параметра FriendlyName вставьте новую строку вида Description=X , где X — текст описания. А в случае с «ледяными» пулями достаточно подредактировать значение атрибута Description в разделе ShockGame.MachineGun_FrozenBullet.

Помимо этого несложно заставить игру использовать новый вид снарядов по умолчанию. Все, что нужно для этого сделать, — исправить значения атрибута DefaultAmmoSelection в блоках ShockGame.Crossbow , ShockGame.ChemicalThrower и ShockGame.MachineGun соответственно на class’ShockGame.Crossbow_ArmorPiercingBolt’ (или class’ShockGame.Crossbow_DiseaseBolt’ ), class’ShockGame.ChemicalThrower_Accelerant’ и class’ShockGame.MachineGun_RubberBullet’.

Мультиракетница

С теорией мы разобрались — изменяя описанные выше характеристики, вы можете сделать оружие с самыми различными характеристиками. Переходим к практике — переделаем гранатомет в мощную мультиракетницу. Она будет стрелять, во-первых, простой одинарной ракетой, во-вторых, тремя ракетами сразу и, в-третьих, убийственным ядерным снарядом.

Отправляемся в раздел ShockGame.GrenadeLauncher и меняем его содержимое следующим образом. Переименуем оружие, исправив значение атрибута FriendlyName на Rocket Launcher или « Ракетница », если у вас русская версия игры. Урежем вдвое обойму, присвоив характеристике BaseMagazineSize число 3. Кроме того, сделаем оружие более медленным в обращении, задав настройкам BaseReloadRate и BaseFireRate значение 2.0.

Ракета

Теперь переходим к «патронным» разделам. В первом из них ( ShockGame.GrenadeLauncher_FragGrenade ) нужно проделать следующие преобразования. Параметру FriendlyName определяем в значение словосочетание Simple rocket (в русской версии « Простая ракета »). Желательно также подобрать снаряду новое описание, подкорректировав текст, расположенный напротив показателя Description.

Рядом с параметром ProjectileClass значение Frag замените на RPG , в результате чего оружие станет стрелять ракетами. Скорость их полета ( InitialVelocity ) следует установить равной 1500. Радиус взрыва лучше уменьшить, придав показателям InnerDamageRadius и OuterDamageRadius значения 450 и 550. Параметрам MaximumStackSize и CreditValue лучше всего подойдут числа 10 и 15. Наконец, атрибуту ExplodeOnImpact ставим значение True.

Далее поработаем над блоком FragGrenadeStimuliSet. Удалим все его содержимое за исключением заголовка: [FragGrenadeStimuliSet] ; итого получается девять строк. На их место мы поставим новые из блока RPGStimuliSet (название раздела опять же не трогаем), параметры же отредактируем следующим образом: в первой строке ( FragGrenadeStimuliSet ) число 400 исправим на 300 , во второй — 75 на 50 , в третьей — 60 на 45.

Тройной выстрел

Что касается второго типа патронов, тройной ракеты, то здесь изменения будут не столь масштабными. Обратимся к разделу ShockGame.GrenadeLauncher_RPG и присвоим в нем следующим характеристикам указанные значения: FriendlyName=Triple rocket (в русской версии « Тройная ракета »); InitialVelocity=750 ; NumBurstShots=3 ; NumProjectilesToFire=3 ; FuseTime=40 ; InnerDamageRadius=350 ; OuterDamageRadius=500 ; MaximumStackSize=15 ; NumRoundsUsedPerShot=3 ; CreditValue=25.

Теперь отыщите блок RPGStimuliSet. В первой его строке число 400 заменяем на 230 , во второй — 75 на 40 , в третьей — 60 на 35. Параметру MomentumScale поставим значение 6.0f. Получившийся тип патронов хорош в сражениях сразу с несколькими противниками. Просто запустите тройную ракету в толпу.

Ядерная боеголовка

А теперь изготовим самое мощное оружие. В раздел ShockGame.GrenadeLauncher_StickyGrenade внесите следующие изменения: FriendlyName=Nuclear Rocket (в русской версии « Ядерная ракета »); ProjectileClass=Class’ShockDesignerClasses.RPGgrenadeProjectile’ ; InitialVelocity=500 ; FuseTime=1000 ; InnerDamageRadius=1000 ; OuterDamageRadius=1400 ; ExplodeOnImpact=True ; TimeToArm=3 ; MaximumStackSize = 2 ; CreditValue=30.

Перейдите к блоку StickyProxStimuliSet. Подмените его содержимое строками из раздела RPGStimuliSet , как мы делали это в случае с блоком FragGrenadeStimuliSet. Подредактируйте обновленные строчки раздела StickyProxStimuliSet , которых отныне восемь (не считая заглавной). В первой из них значение 400 измените на 600 , во второй — 75 на 100 , в третьей — 60 на 90 , в четвертой — 1.0 на 3.0 , а 0.01 на 0.5. Значение параметра MomentumScale увеличьте до 10.0f.

Ядерная боеголовка, которую мы только что соорудили, является незаменимым оружием для зачистки помещений: радиус взрыва — несколько десятков метров. Причем земля после разрыва снаряда покрывается пламенем, которое горит еще три секунды, поджаривая врагов. Только будьте аккуратны: один неточный выстрел — и на тот свет отправитесь вы сами.

* * *

Мы создали с нуля только один вид оружия — мультиракетницу. Но это вовсе не значит, что стоит останавливаться на достигнутом. Изменяя характеристики, перечисленные в самом начале материала, несложно создавать новые виды вооружения в массовом масштабе. Вот только не забывайте о балансе. Разрабатывая ракетницу, мы внимательно следили, чтобы она гармонично дополняла геймплей, а не превращала прохождение игры в безумный забег читера. Если будете усиливать какое-то оружие, то не забывайте, например, уменьшать число патронов к нему.

Комментарии
Чтобы оставить комментарий,Войдите или Зарегистрируйтесь