Редактирование оружия
Материал из S.T.A.L.K.E.R. Inside Wiki
Содержание
Общие положения
Сегодня мы разберем то, каким образом можно редактировать оружие в игре - от характеристик до описания. Характеристики оружия хранятся здесь:
...\S.T.A.L.K.E.R\gamedata\config\weapons\w_[...].ltx
Разбор структуры конфига
Возьмем, для примера, конфиг w_g36.ltx. Он делится на разделы:
Первый раздел
Здесь хранится общая информация о оружии - его класс, тип, ссылки на спавн и т.д. Нас интересуют следующие строки:
- description = enc_weapons1_wpn-g36 - ссылка на string_id, из которого игра подгружает описание этого оружия.
- ef_main_weapon_type = 2 - основной тип, к которому принадлежит оружие
- ef_weapon_type = 6 - подтип, к которому принадлежит оружие
- default_to_ruck = false - значит, если при пустой ячейке под автомат, подобрать автомат он будет помещён в ячейку; если true автомат в ячейку помещён не будет
- sprint_allowed = true - эта строка означает можно ли бегать с данным оружием (true-можно;false-нельзя)
Второй раздел
Содержит модификаторы, которые даются к углу зрения/дальности обзора NPC, держащего это оружие в руках:
- holder_range_modifier = 1.85 - во сколько раз увеличивается eye_range
- holder_fov_modifier = 0.3 - во сколько раз увеличивается eye_fov
Третий раздел
Содержит данные о самом оружии, его некоторых характеристиках:
- cost = 18000 - базовая цена (торговцы умножают её на некоторый коэффициент)
- weapon_class = assault_rifle - класс оружия (здесь - штурмовая винтовка)
- ammo_mag_size = 30 - размер магазина
- ammo_class = ammo_5.56x45_ss190, ammo_5.56x45_ap - типы используемых патронов
- grenade_class = ammo_m209 - тип используемых гранат
- fire_modes = 1, -1 - режимы ведения огня
- hand_dependence = 1 - зависимость о рук (?) - возможно, речь идет о качании ствола
- single_handed = 0 - держится ли только в одной руке
- slot = 2 - слот в инвентаре
- animation_slot = 2 - вид анимации (для пистолета/для винтовки)
- inv_name = wpn-g36 - ссылка на имя, отображаемое в инвентаре, тоже берется из string table, как и описание
- inv_name_short = wpn-g36 - короткое имя; в данном случае используется то же самое
- inv_weight = 3.6 - вес
- inv_grid_width = 5 - длина иконки (кол-во клеток по х)
- inv_grid_height = 2 - высота иконки (кол-во клеток по у)
- inv_grid_x = 0 - координаты первого угла иконки по x
- inv_grid_y = 10 - координаты первого угла иконки по y
Четвертый раздел
В четвертом разделе хранится информация о износе/отдаче оружия. Практически все параметры там снабжены комментариями, поэтому приведу лишь самые интересные:
- cam_relax_speed = 5.7 - скорость возврата в исходное положение
- cam_dispersion = 0.2 - увеличения угла (в градусах) с каждым выстрелом
- fire_dispersion_condition_factor = 5 - увеличение дисперсии в процентах при максимальном износе
- misfire_probability = 0.003 - вероятность осечки при максимальном износе
- misfire_condition_k = 0.05 - порог (в данном случае - 5%), после которого оружие может заклинивать
- condition_shot_dec = 0.0002 - увеличение износа при каждом выстреле
Пятый раздел
Здесь хранится множество параметров, из которых наиболее интересны эти:
- PDM_disp_base = 3.0 - множитель, на который умножается базовая дисперсия оружия, когда ГГ (Главный Герой) стоит на месте в полный рост;
- PDDM_disp_vel_factor = 1.3 - множитель, на который умножается базовая дисперсия оружия, когда ГГ крутит оружием или бежит;
- PDM_disp_accel_factor = 1.3 - множитель, на который умножается базовая дисперсия оружия, когда ГГ бежит в спринте;
- PDM_crouch = 1.0 - множитель, на который умножается базовая дисперсия оружия, когда ГГ идет пригнувшись;
- PDM_crouch_no_acc = 1.0 - множитель, на который умножается базовая дисперсия оружия, когда ГГ стоит на месте, пригнувшись;
- hit_power = 0.50, 0.54, 0.57, 0.60 - сила выстрела (лучше оставить так как есть иначе при не правильной суме чисел игра будет вылетать, но если поставить только одно число всё будет нормально(например hit_power = 0.7) )
- hit_impulse = 105 - импульс пули (сила, которую летящая пуля передает жертве, влияет на поведение ragdoll-тела. Чем больше поставишь, тем дальше улетит)
- hit_type = fire_wound - тип причиняемых повреждений, в данном случае - пулевые ранения (параметр в синглплеере ни на что не влияет)
- fire_distance = 600 - максимальная дистанция для выстрела
- bullet_speed = 925 - начальная скорость пули
- rpm = 600 - скорострельность выстрел/минута
- hud = wpn_g36_hud - внешний вид оружия от 1-ого лица
Шестой раздел
- position = -0.026, -0.132, 0.0 - позиция оружия на спине по отношению к НПС при виде от 3-его лица
- orientation = 0, 0, 0 - вращение оружия на спине НПС при виде от 3-его лица
Седьмой раздел
Содержит описания визуальной стороны оружия и некоторые другие параметры:
- startup_ammo = 90 - как нетрудно догадаться, стартовое количество патронов (в синглплеере ни на что не влияет)
- visual = weapons\g36\wpn_g36.ogf - модель оружия, используемая NPC, а также игроком при виде от третьего лица
- ph_mass = 4 - физическая масса, используемая при расчетах
- scope_status = 2 - ситуация со съемным прицелом
- silencer_status = 1 - ситуация с несъемным глушителем
- grenade_launcher_status = 0 - ситуация с отсутствующим подствольным гранатометом
- Параметры:
- 0 - нет, новый прикрепить нельзя
- 1 - уже есть, несъемный
- 2 - нет, но можно установить
- zoom_enabled = true - есть ли зум (прицеливание)
- scope_zoom_factor = 33.3 - какой зум дает прицеливание (здесь - 1.8х)
- scope_texture = wpn\wpn_crosshair_g36 - текстура прицельной сетки
- shell_point = 0.15, 0.0, -0.05 - точка вылета гильз
- shell_dir = 0.0, 1.0, 0.0
- fire_point = -0.000000,0.062000,0.134000 - точка выстрела
- fire_point2 = 0.30, 0.00, 0.05 - точка выстрела (2)
- fire_bone = wpn_body
- orientation = 0, 0, 0 - направление
- position = 0, 0, 0 - позиция
- visual = weapons\g36\wpn_g36_hud.ogf - модель, отображаемая у нас в руках
Изменение описаний
Описания оружия хранятся в файле: ...\S.T.A.L.K.E.R\gamedata\config\text\rus\string_table_enc_weapons.xml
В нем хранятся строки с названиями и описаниями, на которые ссылаются конфиги оружия. Например, тот же G36 ссылается сюда:
[...] <string id="enc_weapons1_wpn-g36"> <text>Штурмовая винтовка немецкого производства, представляющая собой первоклассный образец современного оружия - лёгкого, надёжного и эргономичного.\n Боеприпасы:\n обычный 5,56x45 мм SS109,\n бронебойный 5,56x45 мм АР.</text> [...] <string id="wpn-g36"> <text>ГП37</text> [...]
Меняя их содержимое, мы меняем описания/названия данного оружия.
Изменение патронов
Параметры патронов хранятся в файле:
...\S.T.A.L.K.E.R\gamedata\config\weapons\weapons.ltx
Найдем, например, раздел, отвечающий за патроны к тому же G36 (о них мы узнали из параметра ammo_class), и разберем, что означает каждый параметр:
- visual = weapons\ammo\ammo_556x45_ss190.ogf - модель коробки с патронами
- description = enc_weapons1_ammo_ammo-5.56x45-ss190 - ссылка на string_id, из которого игра подгружает описание этого типа патронов
- cost = 320 - стоимость одной коробки
- box_size = 30 - количество патронов в одной коробке
- inv_name = ammo-5.56x45-ss190 - ссылка на string_id, содержащий имя для инвентаря
- inv_name_short = ammo-5.56x45-ss190_s - ссылка на string_id, содержащий краткое имя для инвентаря
- inv_weight = 0.33 - вес
- inv_grid_width = 2 - длина иконки (кол-во клеток, занимаемое в инвентаре)
- inv_grid_height = 1 - ширина иконки
- inv_grid_x = 14 - координаты первого угла иконки по x
- inv_grid_y = 11 - координаты первого угла иконки по y
- k_dist = 1 - коэффициент дальности, сама дальность - в стволе, тупо расстояние.
- k_disp = 2.5 - кучность, завязана с кучностью в стволе (чем выше число тем ниже точность. Например для дроби - 15, для большинства патронов около 1.1 - 0.9)
- k_hit = 1 - убойность, завязана с убойностью в стволе
- k_impulse = 1 - перенос скорости пули на тело
- k_pierce = 1 - коэффициент на сколько испортится броня при попадании
- impair = 1 - коэффициент износа ствола от пули
- buck_shot = 1 - кол-во составляющих в пуле (напр картечь - 4, пуля - 1)
- tracer = on - является ли патрон трассирующим (on/off)
- wm_size = 0.05 - визуальный размер дырки на стене от пули
- explosive = on - зажигательный боеприпас
Нововведения в ЗП
HUD
HUD модель была разделена на 2 части - руки и собственно сама пушка. Это было сделано для того чтобы добиться смены визуалов рук при смене комбеза.Из-за этого (и не только из-за этого) большая часть конфига находящаяся под "[wpn_xxx_hud]:hud_base" потерпела некоторые изменения - о них я и расскажу.
Добавлены:
- hands_position = 0.020500,-0.206999,0.261999 - положение рук и оружия
- hands_orientation = 3.349998,2.599999,-0.050000 - направление (ориентация) рук и оружия
- hands_position_16x9 = 0.020500, -0.165999,0.209500 - положение рук и оружия для моников 16x9
- hands_orientation_16x9 = 3.649998,1.050001, -0.050000 - направление (ориентация) рук и оружия для моников 16x9
- item_position = 0,0,0 - позиция оружия относительно рук
- item_orientation = 0,0,0 - ориентация оружия относительно рук
- aim_hud_offset_pos = -0.129000,0.017000,-0.001500 - смещение рук с пушкой при прицеливании
- aim_hud_offset_rot = -0.012500,0.040000,0.020000 - ориентация рук с пушкой при прицеливании
- aim_hud_offset_pos_16x9 = -0.129000,0.017000,-0.001500 - смещение рук с пушкой при прицеливании для моников 16x9
- aim_hud_offset_rot_16x9 = -0.012500,0.040000,0.020000 - ориентация рук с пушкой при прицеливании для моников 16x9
- gl_hud_offset_pos = 0,0,0 - смещение рук с пушкой при прицеливании из подствольника
- gl_hud_offset_rot = 0,0,0 - ориентация рук с пушкой при прицеливании из подствольника
- gl_hud_offset_pos_16x9 = 0,0,0 - смещение рук с пушкой при прицеливании из подствольника для моников 16x9
- gl_hud_offset_rot_16x9 = 0,0,0 - ориентация рук с пушкой при прицеливании из подствольника для моников 16x9
Апгрейды и изнашиваемость
Как известно, в ЗП есть возможность апгрейда оружия. За выбор схем при апгрейде отвечают строки:
- upgrades = up_gr_firstab_ak74, up_gr_seconab_ak74, up_gr_thirdab_ak74, up_gr_fourtab_ak74, up_gr_fifthab_ak74, * up_gr_fifthcd_ak74 - части апгрейд схемы
- installed_upgrades = - установленные апгрейды
- upgrade_scheme = upgrade_scheme_ak74 - апгрейд-схема
Так-же в ЗП была создана более продуманная схема изнашиваемости, вот строки которые за это отвечают:
- misfire_start_condition = 0.6 - изношенность, при которой появляется шанс осечки
- misfire_end_condition = 0.1 - изношенность при которой шанс осечки становится константным
- misfire_start_prob = 0.003 - шанс осечки при изношености больше чем misfireStartCondition
- misfire_end_prob = 0.043 - шанс осечки при изношености больше чем misfireEndCondition
- condition_shot_dec = 0.001 - увеличение изношености при одиночном выстреле
- condition_queue_shot_dec = 0.0012 - увеличение изношености при выстреле очередью
Изношенность нового ствола = 1.0
Основной конфиг
Здесь изменений ни так много:
Иконка используемая при апгрейде. Координаты отсчитываются с левого верхнего угла по пикселям. Файл с иконками находится по пути textures\ui\ui_actor_weapons.dds
- upgr_icon_x = 304 - координаты по х (горизонтально)
- upgr_icon_y = 627 - координаты по у (вертикально)
- upgr_icon_width = 295 - ширина иконки
- upgr_icon_height = 110 - высота иконки
- * scopes_sect = scope_ak74, scope_x2.7_ak74, scope_live_detector_ak74, scope_night_ak74 - ссылки на вторичный конфиг прицела
- [scope_ak74] - собственно сам вторичный конфиг
- scope_name = wpn_addon_scope - ссылка на конфиг прицела
- scope_x = 47 - расположение иконки установленного прицела на иконке оружия по x(в пикселях)
- scope_y = 0 - по у
Авторы
Статья создана:
Статья отличная, но не сказано про параметр патронов "explosive". Не подствольников и ракет, а именно патронов! Даже в оригинальном файле "weapons.ltx" в свойствах патронов 5.45x39 для АК к конце всегда есть строка "explosive = off". Достаточно изменить ее на "explosive = on" и мы имеем разрывной снаряд, ну разрывной он в просторечье, а так - бронебойно-зажигательный. И при выстреле таким снарядом мы увидим как 2 секунды после выстрела в месте попадания разгорается и тухнет оранжевое пламя. Но это всего лишь анимация, так что если будете делать такие патроны, не забывайте увеличить их бронебойную способность и останавливающее действие. Кстати это не только для патронов АК сделать можно, а для любых всего одной строкой. Удачи!