Добавление нового оружия

   

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

Добавим в игру АК101.

Внешний вид

Позаботимся о том, чтобы наше оружие отличалось внешне от того же АК74.
Текстуры

Нарисуем для оружия новую текстуру. Подробно останавливаться на этом процессе не буду, ознакомьтесь с примером, приведенным здесь. Итак, основываясь на текстуре АК74, мы сделали вот такую текстуру:

 

Файлы текстур мы назвали:
wpn_ak10.dds
wpn_ak10_bump#.dds
wpn_ak10_bump.dds
Модели

Новых моделей мы пока делать не станем, просто воспользуемся дублированными моделями от АК74. Скопируем папку:

gamedata\meshes\weapons\ak47\

И назовем её ak-101. Содержимое, соответственно, переименуем в:
wpn_ak101.ogf
wpn_ak101_hud.ogf.

Теперь пропишем в эти модели созданные нами текстуры. Способ описан здесь.
Иконки

Добавим в игру иконки, которыми оружие будет отображаться в инвентаре. Способ подробно описан здесь.

Вот, что получилось в конечном итоге:


Конфиги

Новое оружие мы будем делать на базе оригинальных конфигурационных файлов. Создадим АК101 на базе конфигов АК74.
Свойства оружия

Скопируем файл из папки:

gamedata\config\ak74.ltx

Назовем его ak101.ltx.


Отредактируем свойства по своему усмотрению (но лучше - в соответствии с достоверной информацией о характеристиках оружия, т.к. АК101 - всё-таки оружие реально существующее). Редактирование конфигов оружия подробно описано в отдельном уроке. В данном случае конфиг был составлен таким образом:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[wpn_ak101]:identity_immunities
GroupC 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
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_ assault_rifle  
 
ammo_limit    = 210    
ammo_elapsed   = 30    
 
ammo_mag_size   = 30    
fire_modes    = 1, -1

ammo_ ammo_5.56x45_ss190, ammo_5.56x45_ap  
grenade_ 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.1;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_launcher_x    = 116      
grenade_launcher_y    = 23

;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
snd_shoot1     = weapons\ak74_shot_1
snd_shoot2     = weapons\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.0, 0.8
snd_switch     = weapons\groza_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_b wpn_body

orientation              = 0, 0, 0  
position                 = 0, 0, 0.05
visual                   = weapons\ak-101\wpn_ak101_hud

grenade_b 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 grenade 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
anim_switch_grenade_off  = 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_holster_gl    = holster_w_gl
anim_shoot_gl    = shoot_w_gl
anim_idle_sprint   = idle_sprint

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;HUD offset in zoom mode (to all)
;(use CONSOLE: hud_adjust_mode 0,1,2, then keys WSADQE and P to show current value in console)

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 (как это сделать?), расширьте ассортимент торговцев (как это сделать?).

Добвление нового оружия

Нравится4
Комментарии (4)
B
i
u
Спойлер