У цій статті ми навчимося створювати нові зразки озброєння. Для початку ми будемо використовувати моделі з оригінальної гри.
Додамо в гру АК101 .
Зовнішній вигляд
Подбаємо про те, щоб наша зброя відрізнялася зовні від того ж АК74 .
Текстури
Намалюємо нову текстуру для зброї. Докладно зупинятись на цьому процесі не буду, ознайомтеся з прикладом, наведеним тут . Отже, ґрунтуючись на текстурі АК74 , ми зробили таку текстуру:
Файли текстур ми назвали:
- wpn_ak10.dds
- wpn_ak10_bump#.dds
- wpn_ak10_bump.dds
Моделі
Нових моделей ми поки робити не станемо, просто скористаємося дубльованими моделями від АК74 . Скопіюємо папку:
gamedata \ meshes \ weapons \ ak74 \
І назвемо її ak-101 . Вміст, відповідно, перейменуємо в:
- wpn_ak101.ogf
- wpn_ak101_hud.ogf .
Тепер пропишемо у ці моделі створені нами текстури. .
PS від Кепа: Взагалі, якщо ви створюєте нову зброю на основі старої моделі, то зручніше прописуватиме її через файл gamedata\config\misc\unique_items.ltx (у Тіні чорнобиля). У Чистому небі унікальні стволи лежать у файлах зброї. Сенс у тому, що вам не потрібно переписувати всі значення зброї в новий файл, а просто треба додати посилання на нові текстури та описи, і перерахувати властивості, які Ви хочете замінити. Крім того, створюючи окремий файл моделі для нової зброї Ви тупо завантажуєте одну і ту ж інформацію в пам'ять по другому колу (це погано, так). Все інше треба робити як написано далі.
Якщо створюєте зброю з новою моделлю, то обов'язково не залишайте її без змін. Чомусь у грі не може бути двох зброї з однаковими моделями. ЧН і ЗП це файл зі зброєю-прототипом, а в ТЧ unique_items) інакше при завантаженні гра вилітатиме, приблизно так: argument:can not find section 'назва вашої зброї'
Іконки
Додамо до гри іконки, якими зброя відображатиметься в інвентарі.
Ось, що вийшло зрештою:
Конфігі
Нову зброю ми робитимемо на базі оригінальних конфігураційних файлів. Створимо АК101 на базі конфігів АК74 .
Властивості зброї
Скопіюємо файл із папки:
gamedata\config\weapons\ak74.ltx
Назвемо його ak101.ltx .
Відредагуємо властивості на свій розсуд (але краще - відповідно до достовірної інформації про характеристики зброї, тому що АК101 - все-таки зброя реально існуюча). В даному випадку конфіг був складений таким чином:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;; [ wpn_ak101 ] :identity_immunities GroupControlSection = spawn_group discovery_dependency = $ spawn = "weapons\ak-101" ; name and section in level editor $ npc = on $ prefetch = 8 scheduled = off ;[] option for ALife Simulator cform = skeleton class = WP_AK74 ; class of the weapon that corresponding to CPP class min_radius = 30 ; [] for AI max_radius = 100 ; [] for AI description = enc_weapons1_wpn-ak101 ef_main_weapon_type = 2 ef_weapon_type = 6 ;------------------------------------------------- ---------------------------------- holder_range_modifier = 1.0 ; у скільки разів збільшується eye_range holder_fov_modifier = 0.7 ; у скільки разів збільшується eye_fov ;-------------------------------------------- --------------------------------------- cost = 2 ; 4000 weapon_class = assault_rifle ammo_limit = 210 ammo_elapsed = 30 ammo_mag_size = 30 fire_modes = 1 , -1 ammo_class = ammo_5.56x45_ss190, ammo_5.56x45_ap grenade_class = ammo_vog -25 , ammo_vog-25p launch_speed = 0 hand_dependence = 1 single_handed = 0 slot = 2 animation_slot = 2 inv_name = wpn-ak101 inv_name_short = wpn-ak101 inv_weight = 3.3 inv_grid_width = 5 inv_grid_height = 2 inv_grid_x = 11 inv_grid_y = 29 kill_msg_x = 0 kill_msg_y = 28 kill_msg_width = 84 kill_msg_height = 28 ;------------------------------------------------- ---------------------------------- ;params of weapon recoil fire_dispersion_base = 0.15 ; 0.2 control_inertion_factor = 1.1f ; 1.25f ; віддача cam_relax_speed = 6 ; 5; 3.5; 0.15 cam_dispersion = 0.1 ; 0.15 cam_dispersion_inc = 0.2 ; 0.3 cam_dispertion_frac = 0.8 ; 0.9 cam_max_angle = 10.0 cam_max_angle_horz = 20.0 cam_step_angle_horz = 1 . fire_dispersion_condition_factor = 5.7 ; 5 misfire_probability = 0.0055 ;0.003 misfire_condition_k = 0.06 ;0.05 condition_shot_dec = 0.00035 ;0.0001 ;-------------------- -------------------------------------------------- ---- fire_point = 0 , 0.216 , 0.638 fire_point2 = 0 , 0.216 , 0.730 flame_particles = weapons\generic_weapon05 smoke_particles = weapons\generic_shoot_00 grenade_flame_particles = weapons\generic_weapon01 shell_point = 0 , 0.216 , 0.174 shell_particles = weapons\generic_shells PDM_disp_base = 1.0 PDM_disp_vel_factor = 1.3 PDM_disp_accel_factor = 1.3 PDM_crouch = 1.0 PDM_crouch_no_acc = 1.0 ; ttc hit_power = 0.36 , 0.4 , 0.43 , 0.46 hit_impulse = 140 hit_type = fire_wound fire_distance = 1700 bullet_speed = 1000 rpm = 750 use_aim_bullet = true time_to_aim = 1.0 ;params when silencer is attached ;similar to corresponding params without prefix silencer_ silencer_hit_power = 0.38 silencer_hit_impulse = 120 silencer_fire_distance = 250 silencer_bullet_speed = 600 hud = wpn_ak101_hud position = -0.026 , -0.172 , 0 orientation = 0 , 0 , 0 ;--STRAP PARAMETERS--------------------------------------------- -------------------- strap_position = -0.16 , -0.40 , 0.15 strap_orientation = -10 , -5 , 10 strap_bone0 = bip01_spine2 strap_bone1 = bip01_spine1 visual = weapons\ak -101 \wpn_ak101 light_color = 0.6 , 0.5 , 0.3 light_range = 5 light_var_color = 0.05 light_var_range = 0.5 light_time = 0.2 ph_mass = 5 ;addons scope_status = 2 silencer_status = 2 grenade_launcher_status = 0 ;2 zoom_enabled = true scope_zoom_factor = 50 scope_name = wpn_addon_scope scope_x = 42 scope_y = 3 silencer_name = wpn_addon_silencer silencer_x = 218 silencer_y = 13 grenade_launcher_name = wpn_addon_grenade_launcher grenade_la _ _ _ _ _ ;sounds (name of the sound , volume (0.0 - 1.0), delay ( sec)) snd_draw = weapons \ ak74_draw snd_holster = weapons \ generic_holster snd_shoot = weapons \ ak74_shot_0 pons \ak74_shot_2 snd_shoot3 = weapons\ak74_shot_3 snd_empty = weapons \ gen_empty, 0.5 snd_reload = weapons\ak74_reload, 0.7 , 0.35 snd_shoot_grenade = weapons \ gen_grenshoot snd_reload_grenade = weapons \ gen_grenload , 1. _switch, 1.0 , 0.5 ;params when silencer is attached ;similar to corresponding params without prefix silencer_ ;silencer_flame_particles = weapons\generic_weapon01 silencer_smoke_particles = weapons\generic_shoot_00 snd_silncer_shot = weapons\w_ak74_shot1 silencer_light_color = 0.6 , 0.5 , 0.3 silencer_light_range = 0.01 silencer_light_var_color = 0.05 silencer_light_var_range = 0.5 silencer_light_time = 0.2 ;------------------------------------------------- ---------------------------- ;-- HUD DESCRIPTION ;---------------- -------------------------------------------------- ----------- [ wpn_ak101_hud ] allow_inertion = true ;similar to corresponding params in weapon section but for 1st person view shell_point = -0.065000 , 0.000000 , -0.045000 shell_dir = 0.0 , 1.0 , 0.0 fire_point = 0.09 , 0.020 , -0.06 fire_point2 = 0.30 , 0.00 , 0.05 fire_bone = wpn_body orientation = 0 , 0 , 0 position = 0 , 0 , 0.05 visual = weapons\ak -101 \wpn_ak101_hud grenade_bone = wpn_grenade ; animation names anim_idle = idle anim_idle_aim = idle_aim anim_reload = reload anim_draw = draw_wo_gl anim_holster = holster_wo_gl anim_shoot = shoot ; animation names ; attached granada launcher [GRENADE fire mode ] anim_idle_g = idle_grenade anim_idle_g_aim = idle_g_aim anim_reload_g = reload_grenade anim_shoot_g = shoot_grenade anim_switch_grenade_on = switch _grenade_off anim_draw_g = draw_grenade_mode anim_holster_g = holster_grenade_mode ; attached grenade launcher [ NORMAL fire mode ] anim_idle_gl = idle_w_gl anim_idle_gl_aim = idle_w_gl_aim anim_reload_gl = reload_w_gl anim_draw_gl = draw_w_gl anim_hol_g w_gl anim_idle_sprint = idle_sprint ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;; ;HUD offset в режимі zoom (всі) ;(use CONSOLE: hud_adjust_mode 0,1,2; zoom_offset = -0.112400 , 0.016800 , -0.115000 zoom_rotate_x = 0.000200 zoom_rotate_y = 0.017500 zoom_hide_crosshair = true ; Same as above, but for attached grenade launcher for ; in NORMAL shoot mode grenade_normal_zoom_offset = -0.112500 , 0.014000 , 0.000000 grenade_normal_zoom_rotate_x = -0.000900 grenade_normal_zoom_rotate_y = 0.017200 ; Same as above, but for attached grenade launcher for ; in GRENADE mode grenade_zoom_offset = -0.039600 , -0.433100 , 0.000000 grenade_zoom_rotate_x = -0.538700 grenade_zoom_rotate_y = -0.033800
Реєстрація
Отже, із характеристиками розібралися. Тепер зареєструємо зброю у файлі weapons.ltx . Для цього пропишемо в нього рядок такого вигляду:
#include "w_ak101.ltx"
Також необхідно прописати моделі, що використовуються для відображення зброї, в prefetch.ltx :
[ ... ] weapons\abakan\wpn_abakan weapons\abakan\wpn_abakan_hud weapons\ak -101 \wpn_ak101 weapons\ak -101 \wpn_ak101_hud weapons\ak74\wpn_ak74 weapons\ak74\wpn_ak74_hud [ ... ]
Також не забудьте у файлі mp_ranks.ltx прописати після available_items (яке внизу) прописати назву своєї зброї. Це запобігатиме вильоту при вбивстві ГГ а також вильоту при викиданні зброї з інвентарю.
Додавання до гри
Залишилося додати зброю до гри.
Видайте його деяким NPC, Розширте асортимент торговців.
А ось як воно виглядатиме у грі:
PS При створенні нової зброї можна припуститися деяких помилок у конфізі, що призведе до вильоту гри. При такому випадку відразу після вильоту гри заходимо в будь-який текстовий редактор і натискаємо клавіші Ctrl+V (вставити) і внизу можна побачити через якусь помилку вилетіла гра, а там вже справа техніки виправити помилку.
Expression : fatal error
Function : CModelPool::Instance_Load
File : E:\stalker\patch_1_0004\xr_3da\xrRender\ModelPool.cpp
Line : 111
Description : <no expression>
Arguments : Чи не find model files's ogf'.
У цьому прикладі видно, що або ви не створили папку з необхідною моделлю зброї, або неправильно прописаний шлях до файлу.