Конвертация НПС из ЧН/ЗП в ТЧ — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Конвертация НПС из ЧН/ЗП в ТЧ — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(Автор)
(Автор)
 
(не показаны 7 промежуточные версии 4 участников)
Строка 82: Строка 82:
 
[[Файл:Npc convert lesson 05.png|950px|thumb|center|Применение анимаций к модели]]
 
[[Файл:Npc convert lesson 05.png|950px|thumb|center|Применение анимаций к модели]]
 
В итоге у меня получилось 2543 анимации во вкладке '''Motions''' (по счетчику '''Motion count''').
 
В итоге у меня получилось 2543 анимации во вкладке '''Motions''' (по счетчику '''Motion count''').
===Экспорт анимаций в .omf сборник===
 
Теперь нужно экспортировать наши анимации в наш собственный сборник. Это делается путем нажатия File>Export<sup>[1]</sup>>Export OMF...<sup>[2]</sup> в правом верхнем углу интерфейса.
 
  
Внимание! Выбирать директорию нужно тщательно, не куда попало, а именно в папку '''gamedata\meshes''' вашего '''SDK''', потому что после экспорта полученный сборник должен находится в том же самом месте в игре, где он был и в '''SDK'''. Например, если в SDK он лежал по адресу:
 
<code>$sdk_root\level_editor\gamedata\meshes\actors\nebo_animations.omf</code>
 
то в игре он должен лежать по адресу
 
<code>Корень ТЧ\gamedata\meshes\actors\nebo_animations.omf</code>
 
В противном случае модель не сможет найти анимации и мы получим мгновенный вылет.
 
Если определились с местом проживания сборника - жмем '''Сохранить'''.
 
[[Файл:Npc convert lesson 06.png|950px|thumb|center|Экспорт .omf сборника]]
 
Когда экспорт завершен, отмечаем все анимации во вкладке '''Motions''' и жмем '''Delete'''.
 
Все анимации удалили. Теперь нужно нажать на троеточие напротив '''Motion reference''' и в окошке установить галочку напротив сборника анимаций, который мы только что создали. Теперь жмем '''Ok'''.
 
Работа с анимациями завершена.
 
 
==Работа с костями==
 
==Работа с костями==
 
Справа на интерфейсе жмем '''Bone Parts<sup>[1]</sup>''', что находится на вкладке '''Model'''. В появившемся окошке жмем снизу кнопочку '''Reset To Default<sup>[2]</sup>'''. После этого действия у нас в левой верхней таблице появится множество костей. Выберите оттуда кости (это делается с помощью зажатия клавиши '''Ctrl'''):
 
Справа на интерфейсе жмем '''Bone Parts<sup>[1]</sup>''', что находится на вкладке '''Model'''. В появившемся окошке жмем снизу кнопочку '''Reset To Default<sup>[2]</sup>'''. После этого действия у нас в левой верхней таблице появится множество костей. Выберите оттуда кости (это делается с помощью зажатия клавиши '''Ctrl'''):
Строка 134: Строка 122:
 
eyelid_1
 
eyelid_1
 
jaw_1</code>
 
jaw_1</code>
и перетащите их в правую нижнюю таблицу и обзовите ее '''"Head"<sup>[4]</sup>'''.
+
и перетащите их в левую нижнюю таблицу и обзовите ее '''"Head"<sup>[4]</sup>'''.
 
Все. Жмем '''Ok<sup>[5]</sup>'''.
 
Все. Жмем '''Ok<sup>[5]</sup>'''.
 
[[Файл:Npc convert lesson 07.png|950px|thumb|center|Работа с костями]]
 
[[Файл:Npc convert lesson 07.png|950px|thumb|center|Работа с костями]]
Работа с костями закончена.
 
==Редактирование User Data для модели==
 
Жмем строку '''Object<sup>[1]</sup>''' справа на интерфейсе. Идем в самый низ и видим строку '''User Data'''. Жмем на троеточие'''<sup>[2]</sup>''' напротив и вставляем вместо того что там сейчас вот эту конструкцию'''<sup>[3]</sup>''':
 
<code>[capture]
 
  
bone = bip01_tail      ; bone for capture
+
===Экспорт анимаций в .omf сборник===
distance        = 0.3            ; distance - less this distance between
+
Теперь нужно экспортировать наши анимации в наш собственный сборник. Это делается путем нажатия File>Export<sup>[1]</sup>>Export OMF...<sup>[2]</sup> в правом верхнем углу интерфейса.
                                  ; bome and capture taget object is captured
+
time_limit      = 500            ; max time for trying to capture object
+
pull_force      = 10000.         ; max force used to bring the taget to capture bone
+
pull_distance    = 1.             ; max distance taget can be puled
+
velocity_scale  = 0.001          ; velocity scale for pulling 1- normal
+
capture_force    = 100000.         ; max force for holding taget
+
  
[disable]
+
Внимание! Выбирать директорию нужно тщательно, не куда попало, а именно в папку '''gamedata\meshes''' вашего '''SDK''', потому что после экспорта полученный сборник должен находится в том же самом месте в игре, где он был и в '''SDK'''. Например, если в SDK он лежал по адресу:
 +
<code>$sdk_root\level_editor\gamedata\meshes\actors\nebo_animations.omf</code>
 +
то в игре он должен лежать по адресу
 +
<code>Корень ТЧ\gamedata\meshes\actors\nebo_animations.omf</code>
 +
В противном случае модель не сможет найти анимации и мы получим мгновенный вылет.
 +
Если определились с местом проживания сборника - жмем '''Сохранить'''.
 +
[[Файл:Npc convert lesson 06.png|950px|thumb|center|Экспорт .omf сборника]]
 +
Когда экспорт завершен, отмечаем все анимации во вкладке '''Motions''' и жмем '''Delete'''.
 +
Все анимации удалили. Теперь нужно нажать на троеточие напротив '''Motion reference''' и в окошке установить галочку напротив сборника анимаций, который мы только что создали. Теперь жмем '''Ok'''.
 +
Работа с костями закончена.
  
linear_factor  =0.7
+
==Редактирование User Data для модели==
angular_factor  =0.7
+
Жмем строку '''Object<sup>[1]</sup>''' справа на интерфейсе. Идем в самый низ и видим строку '''User Data'''. Жмем на троеточие'''<sup>[2]</sup>''' напротив и вставляем вместо того, что там сейчас, '''User Dat''''у, взятую у другой модели'''<sup>[3]</sup>'''. Я например взял ее у военного спецназовца. Поэтому у меня получилось вот что:
 
+
<code>
[particles_bones]
+
#include "models\capture\kombez_helmet_damage_low.ltx"
 
+
</code>
bone = bip01_head,0,0,0
+
bone = bip01_spine1,0,0,0
+
bone = bip01_l_upperarm,0,0,0
+
bone = bip01_r_upperarm,0,0,0
+
bone = bip01_l_forearm,0,0,0
+
bone = bip01_r_forearm,0,0,0
+
bone = bip01_l_thigh,0,0,0
+
bone = bip01_r_thigh,0,0,0
+
bone = bip01_l_calf,0,0,0
+
bone = bip01_r_calf,0,0,0
+
</code>
+
 
Жмем '''Ok<sup>[4]</sup>'''.
 
Жмем '''Ok<sup>[4]</sup>'''.
 
[[Файл:Npc convert lesson 08.png|950px|thumb|center|Изменение User Data]]
 
[[Файл:Npc convert lesson 08.png|950px|thumb|center|Изменение User Data]]
Работа с моделью завершена.
+
Позже мы разберемся с тем, на что эта конструкция влияет.
 +
 
 
==Экспорт модели в .ogf==
 
==Экспорт модели в .ogf==
 
Когда мы завершили работу с моделью, нужно сконвертировать ее в формат, понятный игре. Благо для этого в '''Actor Editor''''e для этого есть встроенный инструментарий. Жмем '''File>Export>Export OGF...'''. Думаю скрины для этого не нужны, т.к. такую же операцию мы прпоизводили с экспортом сборника анимаций. Саму модель можно обзывать как угодно и сохранять куда угодно.
 
Когда мы завершили работу с моделью, нужно сконвертировать ее в формат, понятный игре. Благо для этого в '''Actor Editor''''e для этого есть встроенный инструментарий. Жмем '''File>Export>Export OGF...'''. Думаю скрины для этого не нужны, т.к. такую же операцию мы прпоизводили с экспортом сборника анимаций. Саму модель можно обзывать как угодно и сохранять куда угодно.
 
==Применение модели в игре==
 
==Применение модели в игре==
 
===Файл textures.ltx===
 
===Файл textures.ltx===
Нам нужно скопировать 2 файла из '''gamedat''''ы SDK в '''gamedat''''у нашего ТЧ.
+
Этот ход нужно выполнять только в том случае, если вы приверженец качественной игры и играете только на типе рендера "'''Динамическое освещение'''". Если же это не так - вы просто не заметите никакой разницы.
Это файл нашего сборника анимаций (помните, что его месторасположение должно быть точно как в SDK) и собственно сама модель.
+
Итак, начнем. Идем в директорию '''gamedata\textures''' игры и открываем любым удобным редактором  файл '''textures.ltx'''.
Затем нужно в папке '''textures''' из геймдаты нашего ТЧ найти файлик '''textures.ltx''' и вставить в секцию '''[types]''' имена текстур, которые использует наша модель. В моем случае это '''act\act_stalker_nebo_2''' и '''act\act_stalker_nebo_2_bump'''.
+
Далее нам нужно вписать текстуры, используемые моделью нашего сконвертированного НПС. Эти текстуры нужно прописать в секциях '''[specification]''' и '''[types]''', желательно в конец секции, чтобы потом было проще их искать и редактировать.
Текстуре должно быть присвоено нулевое значение, а бампу = 2.
+
Добавим наши текстуры в секцию '''[specification]''':
 +
<code>
 +
...
 +
    wpn\wpn_winchester1300          = bump_mode[use:wpn\wpn_winchester1300_bump], material[2.85]
 +
    wpn\wpn_zink                    = bump_mode[none], material[2.85]
 +
    wpn\wpn_zink_545                = bump_mode[none], material[2.85]
 +
    wpn\wpn_zink_57                  = bump_mode[none], material[2.85]
 +
    wpn\wpn_zink_9                  = bump_mode[none], material[2.85]
 +
    wpn\wpn_zink_svd                = bump_mode[none], material[2.85]
 +
    ; Наши тектуры
 +
    act\act_stalker_nebo_2          = bump_mode[use:act\act_stalker_nebo_2_bump], material[0.50]
 +
 +
[types]
 +
    $bump-test                      = 2
 +
    $details                        = 0
 +
...
 +
</code>
 +
Поясню, что мы вставили:
 +
'''act\act_stalker_nebo_2''' - Имя текстуры, используемой НПС         
 +
'''bump_mode[use:act\act_stalker_nebo_2_bump]''' - Это значит, что текстура использует бамп текстуру "act_stalker_nebo_2_bump"
 +
'''material[0.50]''' - Скорее всего эта строка отвечает за рельефность бамп-текстуры
 +
 
 +
Добавим наши текстуры в секцию '''[types]''':
 +
<code>
 +
...
 +
    wpn\wpn_zink_svd                = bump_mode[none], material[2.85]
 +
    ; Наши тектуры
 +
    act\act_stalker_nebo_2          = bump_mode[use:act\act_stalker_nebo_2_bump], material[0.50]
 +
 +
[types]
 +
    act\act_stalker_nebo_2          = 0
 +
    act\act_stalker_nebo_2_bump      = 2
 +
    $bump-test                      = 2
 +
    $details                        = 0
 +
    $shadertest                      = 0
 +
    $target                          = 0
 +
...
 +
</code>
 +
Поясню, что мы вставили:
 +
'''act\act_stalker_nebo_2 = 0''' - "'''0'''" - номер обычной текстуры         
 +
'''act\act_stalker_nebo_2_bump = 2''' - "'''2'''" - номер бамп-текстуры 
 +
Если не понятно, можно эти строки вставить из файла '''textures.ltx''' от ЧН или ЗП.
  
'''ВПРИНЦИПЕ, ЭТОТ ХОД НЕОБЯЗАТЕЛЕН. ОБЫЧНО МОЖНО И БЕЗ НЕГО.'''
 
 
===Присвоение модели любому НПС===
 
===Присвоение модели любому НПС===
 
Теперь нужно дать какому-нибудь НПС из игры нашу модель. Пусть это будет волк!
 
Теперь нужно дать какому-нибудь НПС из игры нашу модель. Пусть это будет волк!
Строка 306: Строка 323:
 
P.S. При использовании сконвертированных НПС, полученных при исполнении данной статьи, игра может вылетать без лога! Сейчас я работаю над устранением ошибок в работе, есть парочка идей, как смогу - так и проверю.
 
P.S. При использовании сконвертированных НПС, полученных при исполнении данной статьи, игра может вылетать без лога! Сейчас я работаю над устранением ошибок в работе, есть парочка идей, как смогу - так и проверю.
  
 +
См. [[Обсуждение:Конвертация НПС из ЧН/ЗП в ТЧ|страницу обсуждения]]
  
 
+
[[Категория:SDK]]
ВОТ ТЕБЕ ОШИБКА
+
* ImageLibrary version: 3.10.0
+
* 26 supported formats
+
Starting RENDER device...
+
* GPU [vendor:10DE]-[device:402]: NVIDIA GeForce 8600 GT
+
* GPU driver: 6.14.12.5896
+
* CREATE: DeviceREF: 1
+
* Vertex Processor: PURE HARDWARE
+
* Texture memory: 963 M
+
* DDI-level: 9.0
+
* GPU shading: vs(fffe0300/3.0/30), ps(ffff0300/3.0/30)
+
* GPU vertex cache: recognized, 24
+
* DVB created: 2048K
+
* DIB created: 2048K
+
D3D: initialized
+
Starting INPUT device...
+
DirectSound: Create device successfully.
+
* sound: EAX 2.0 extension: present
+
* sound: EAX 2.0 deferred: absent
+
* sound : cache: 32773 kb, 3805 lines, 8820 bpl
+
* DVB created: 2048K
+
* DIB created: 2048K
+
* GPU shading: vs(fffe0300/3.0/30), ps(ffff0300/3.0/30)
+
* GPU vertex cache: recognized, 24
+
*** RESET [160 ms]
+
* Loaded: gamedata\textures\ui\ui_font_hud_01.dds[16512]b
+
Object 'c:\sdk\level_editor\import\green_stalker_1.object' successfully loaded. Loading time - 0.22(s).
+
* Loaded: gamedata\textures\act\act_green_stalker2.dds[699192]b
+
* Loaded: gamedata\textures\act\act_head1.dds[174904]b
+
Delete selected 1 item(s)? - Yes.
+
..Export skeleton motions keys
+
..Export skeleton motions defs
+
Invalid Bone Part of motion: 'universal_boltovnya'.
+
Invalid Bone Part of motion: 'steering_torso_rs'.
+
Invalid Bone Part of motion: 'steering_torso_ls'.
+
Invalid Bone Part of motion: 'steering_torso_idle'.
+
Invalid Bone Part of motion: 'steering_legs_idle'.
+
Invalid Bone Part of motion: 'norm_torso_trans_2'.
+
Invalid Bone Part of motion: 'norm_torso_trans_1'.
+
Invalid Bone Part of motion: 'norm_torso_trans_0'.
+
Invalid Bone Part of motion: 'norm_jump_idle_'.
+
Invalid Bone Part of motion: 'norm_jump_end_1'.
+
Invalid Bone Part of motion: 'norm_jump_begin_'.
+
Invalid Bone Part of motion: 'norm_idle_1_'.
+
Invalid Bone Part of motion: 'head_talk_'.
+
Invalid Bone Part of motion: 'head_idle_0_'.
+
Invalid Bone Part of motion: 'cr_torso_trans_2'.
+
Invalid Bone Part of motion: 'cr_torso_trans_1'.
+
Invalid Bone Part of motion: 'cr_torso_trans_0'.
+
Invalid Bone Part of motion: 'cr_jump_end_1'.
+
Invalid Bone Part of motion: 'after_prisluh'.
+
Invalid Bone Part of motion: 'cl_torso_0_aim_0'.
+
Invalid Bone Part of motion: 'norm_walk_fwd_1'.
+
Invalid Bone Part of motion: 'norm_torso_0_walk_1'.
+
Invalid Bone Part of motion: 'cr_turn_left_1'.
+
Invalid Bone Part of motion: 'cr_turn_right_1'.
+
Invalid Bone Part of motion: 'cl_idle_1'.
+
Invalid Bone Part of motion: 'cr_torso_6_holster_0'.
+
Invalid Bone Part of motion: 'norm_idle_1__'.
+
Invalid Bone Part of motion: 'head_idle_0'.
+
Invalid Bone Part of motion: 'norm_jump_idle----'.
+
Invalid Bone Part of motion: 'dmg_norm_turn'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_trans_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_trans_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_trans_2'.
+
Invalid Bone Part of motion: 'norm_torso_1_walk_1'.
+
Invalid Bone Part of motion: 'norm_torso_1_idle_0'.
+
Invalid Bone Part of motion: 'norm_torso_1_idle_1'.
+
Invalid Bone Part of motion: 'norm_torso_2_walk_1'.
+
Invalid Bone Part of motion: 'norm_torso_2_idle_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_idle_1'.
+
Invalid Bone Part of motion: 'norm_torso_3_walk_1'.
+
Invalid Bone Part of motion: 'norm_torso_3_idle_0'.
+
Invalid Bone Part of motion: 'norm_torso_3_idle_1'.
+
Invalid Bone Part of motion: 'norm_torso_4_walk_1'.
+
Invalid Bone Part of motion: 'norm_torso_4_idle_0'.
+
Invalid Bone Part of motion: 'norm_torso_4_idle_1'.
+
Invalid Bone Part of motion: 'norm_torso_5_walk_1'.
+
Invalid Bone Part of motion: 'norm_torso_5_idle_0'.
+
Invalid Bone Part of motion: 'norm_torso_5_idle_1'.
+
Invalid Bone Part of motion: 'norm_torso_5_walk_0'.
+
Invalid Bone Part of motion: 'norm_torso_6_holster_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_walk_1'.
+
Invalid Bone Part of motion: 'norm_torso_8_idle_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_idle_1'.
+
Invalid Bone Part of motion: 'norm_torso_0_idle_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_unstrap_1'.
+
Invalid Bone Part of motion: 'norm_torso_2_strap_1'.
+
Invalid Bone Part of motion: 'norm_torso_2_unstrap_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_strap_0'.
+
Invalid Bone Part of motion: 'norm_torso_1_unstrap_1'.
+
Invalid Bone Part of motion: 'norm_torso_1_strap_1'.
+
Invalid Bone Part of motion: 'norm_torso_1_unstrap_0'.
+
Invalid Bone Part of motion: 'norm_torso_1_strap_0'.
+
Invalid Bone Part of motion: 'norm_torso_3_unstrap_1'.
+
Invalid Bone Part of motion: 'norm_torso_3_strap_1'.
+
Invalid Bone Part of motion: 'norm_torso_3_unstrap_0'.
+
Invalid Bone Part of motion: 'norm_torso_3_strap_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_strap_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_strap_1'.
+
Invalid Bone Part of motion: 'norm_torso_8_unstrap_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_unstrap_1'.
+
Invalid Bone Part of motion: 'norm_torso_4_strap_0'.
+
Invalid Bone Part of motion: 'norm_torso_4_strap_1'.
+
Invalid Bone Part of motion: 'norm_torso_4_unstrap_0'.
+
Invalid Bone Part of motion: 'norm_torso_4_unstrap_1'.
+
Invalid Bone Part of motion: 'norm_torso_7_unstrap_1'.
+
Invalid Bone Part of motion: 'norm_torso_7_strap_0'.
+
Invalid Bone Part of motion: 'norm_torso_7_strap_1'.
+
Invalid Bone Part of motion: 'norm_torso_7_unstrap_0'.
+
Invalid Bone Part of motion: 'norm_torso_0_hello_0'.
+
Invalid Bone Part of motion: 'norm_torso_1_hello_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_hello_0'.
+
Invalid Bone Part of motion: 'norm_torso_3_hello_0'.
+
Invalid Bone Part of motion: 'norm_torso_7_hello_0'.
+
Invalid Bone Part of motion: 'norm_torso_4_hello_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_hello_0'.
+
Invalid Bone Part of motion: 'prohodi_2_0'.
+
Invalid Bone Part of motion: 'head_talk_0'.
+
Invalid Bone Part of motion: 'norm_torso_6_run_1'.
+
Invalid Bone Part of motion: 'norm_torso_7_run_1'.
+
Invalid Bone Part of motion: 'norm_torso_6_run_0'.
+
Invalid Bone Part of motion: 'norm_torso_7_run_0'.
+
Invalid Bone Part of motion: 'dmg_norm_run_ls_0'.
+
Invalid Bone Part of motion: 'dmg_norm_run_rs_0'.
+
Invalid Bone Part of motion: 'dmg_norm_run_back_0'.
+
Invalid Bone Part of motion: 'dmg_norm_run_fwd_0'.
+
Invalid Bone Part of motion: 'dmg_norm_walk_fwd_0'.
+
Invalid Bone Part of motion: 'dmg_norm_walk_back_0'.
+
Invalid Bone Part of motion: 'dmg_norm_walk_rs_0'.
+
Invalid Bone Part of motion: 'dmg_norm_walk_ls_0'.
+
Invalid Bone Part of motion: 'dmg_norm_walk_fwd_1'.
+
Invalid Bone Part of motion: 'dmg_norm_run_fwd_1'.
+
Invalid Bone Part of motion: 'dmg_norm_idle_0'.
+
Invalid Bone Part of motion: 'dmg_norm_idle_1'.
+
Invalid Bone Part of motion: 'dmg_norm_turn_right_0'.
+
Invalid Bone Part of motion: 'dmg_norm_turn_left_0'.
+
Invalid Bone Part of motion: 'dmg_norm_turn_right_1'.
+
Invalid Bone Part of motion: 'dmg_norm_turn_left_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_0_aim_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_0_aim_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_0_hello_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_0_idle_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_0_idle_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_0_run_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_0_run_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_0_walk_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_0_walk_1'.
+
Invalid Bone Part of motion: 'cr_loock_right_2'.
+
Invalid Bone Part of motion: 'cr_loock_left_1'.
+
Invalid Bone Part of motion: 'cr_loock_left_2'.
+
Invalid Bone Part of motion: 'cr_loock_right_0'.
+
Invalid Bone Part of motion: 'cr_loock_right_1'.
+
Invalid Bone Part of motion: 'cr_loock_left_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_walk_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_aim_2'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_attack_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_attack_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_draw_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_drop_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_hello_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_holster_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_idle_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_idle_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_reload_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_run_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_walk_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_aim_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_run_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_walk_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_aim_2'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_attack_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_attack_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_draw_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_drop_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_hello_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_holster_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_idle_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_reload_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_run_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_strap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_strap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_unstrap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_unstrap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_aim_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_walk_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_run_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_unstrap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_strap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_unstrap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_1_strap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_walk_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_aim_2'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_attack_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_attack_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_draw_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_drop_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_hello_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_holster_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_idle_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_idle_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_reload_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_run_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_strap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_strap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_unstrap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_unstrap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_aim_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_walk_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_4_run_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_aim_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_walk_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_unstrap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_unstrap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_strap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_strap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_run_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_run_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_reload_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_idle_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_idle_0_'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_holster_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_hello_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_drop_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_draw_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_attack_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_attack_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_aim_2'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_walk_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_walk_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_aim_2'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_attack_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_attack_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_draw_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_drop_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_hello_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_idle_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_idle_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_run_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_strap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_strap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_unstrap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_unstrap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_aim_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_walk_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_run_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_holster_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_3_reload_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_2_idle_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_6_attack_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_6_aim_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_6_attack_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_6_attack_2'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_6_draw_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_6_hello_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_6_holster_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_6_idle_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_6_run_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_6_walk_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_8_idle_0'.
+
Invalid Bone Part of motion: 'cr_torso_6_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_6_attack_0'.
+
Invalid Bone Part of motion: 'cr_torso_6_attack_1'.
+
Invalid Bone Part of motion: 'cr_torso_6_attack_2'.
+
Invalid Bone Part of motion: 'cr_torso_6_attack_3'.
+
Invalid Bone Part of motion: 'cr_torso_6_draw_0'.
+
Invalid Bone Part of motion: 'norm_escape_00'.
+
Invalid Bone Part of motion: 'norm_escape_ls_00'.
+
Invalid Bone Part of motion: 'norm_escape_rs_00'.
+
Invalid Bone Part of motion: 'norm_idle_0_ 0'.
+
Invalid Bone Part of motion: 'norm_run_fwd_00'.
+
Invalid Bone Part of motion: 'norm_torso_0_escape_0'.
+
Invalid Bone Part of motion: 'norm_torso_1_escape_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_escape_0'.
+
Invalid Bone Part of motion: 'norm_torso_3_escape_0'.
+
Invalid Bone Part of motion: 'norm_torso_4_escape_0'.
+
Invalid Bone Part of motion: 'norm_torso_5_escape_0'.
+
Invalid Bone Part of motion: 'norm_torso_6_aim_0'.
+
Invalid Bone Part of motion: 'norm_torso_6_attack_0'.
+
Invalid Bone Part of motion: 'norm_torso_6_attack_1'.
+
Invalid Bone Part of motion: 'norm_torso_6_attack_2'.
+
Invalid Bone Part of motion: 'norm_torso_6_draw_0'.
+
Invalid Bone Part of motion: 'norm_torso_6_escape_0'.
+
Invalid Bone Part of motion: 'norm_torso_7_escape_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_escape_0'.
+
Invalid Bone Part of motion: 'cr_walk_back_0_'.
+
Invalid Bone Part of motion: 'cr_walk_fwd_0_'.
+
Invalid Bone Part of motion: 'cr_walk_ls_0_'.
+
Invalid Bone Part of motion: 'cr_walk_rs_0_'.
+
Invalid Bone Part of motion: 'norm_torso_9_escape_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_hello_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_idle_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_idle_1'.
+
Invalid Bone Part of motion: 'norm_torso_9_strap_1'.
+
Invalid Bone Part of motion: 'norm_torso_9_strap_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_unstrap_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_unstrap_1'.
+
Invalid Bone Part of motion: 'norm_torso_9_walk_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_draw_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_drop_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_hello_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_holster_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_idle_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_idle_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_unstrap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_unstrap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_walk_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_walk_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_run_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_run_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_strap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_strap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_attack_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_aim_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_aim_2'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_attack_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_reload_2'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_reload_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_9_reload_1'.
+
Invalid Bone Part of motion: 'norm_torso_10_walk_1'.
+
Invalid Bone Part of motion: 'norm_torso_10_escape_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_hello_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_idle_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_idle_1'.
+
Invalid Bone Part of motion: 'norm_torso_10_strap_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_strap_1'.
+
Invalid Bone Part of motion: 'norm_torso_10_unstrap_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_unstrap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_aim_2'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_attack_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_attack_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_draw_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_drop_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_hello_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_holster_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_idle_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_idle_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_reload_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_reload_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_reload_2'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_run_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_aim_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_run_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_strap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_strap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_unstrap_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_unstrap_1'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_walk_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_10_walk_1'.
+
Invalid Bone Part of motion: 'idle_2_idle_4'.
+
Invalid Bone Part of motion: 'idle_2_idle_1'.
+
Invalid Bone Part of motion: 'idle_2_idle_2'.
+
Invalid Bone Part of motion: 'idle_2_idle_3'.
+
Invalid Bone Part of motion: 'idle_2_idle_0'.
+
Invalid Bone Part of motion: 'norm_torso_12_reload_0'.
+
Invalid Bone Part of motion: 'norm_torso_12_attack_0'.
+
Invalid Bone Part of motion: 'norm_torso_12_draw_0'.
+
Invalid Bone Part of motion: 'norm_torso_12_holster_0'.
+
Invalid Bone Part of motion: 'norm_torso_12_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_12_reload_0'.
+
Invalid Bone Part of motion: 'cr_torso_12_attack_0'.
+
Invalid Bone Part of motion: 'cr_torso_12_draw_0'.
+
Invalid Bone Part of motion: 'cr_torso_12_holster_0'.
+
Invalid Bone Part of motion: 'cr_torso_12_aim_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_11_aim_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_12_holster_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_12_draw_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_12_attack_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_12_aim_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_11_reload_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_11_holster_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_11_draw_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_11_attack_0'.
+
Invalid Bone Part of motion: 'dmg_norm_torso_12_reload_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_run_1'.
+
Invalid Bone Part of motion: 'norm_run_fwd_1'.
+
Invalid Bone Part of motion: 'norm_torso_0_run_0'.
+
Invalid Bone Part of motion: 'norm_torso_0_run_1'.
+
Invalid Bone Part of motion: 'norm_torso_1_run_0'.
+
Invalid Bone Part of motion: 'norm_torso_1_run_1'.
+
Invalid Bone Part of motion: 'norm_torso_10_run_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_run_1'.
+
Invalid Bone Part of motion: 'norm_torso_2_run_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_run_1'.
+
Invalid Bone Part of motion: 'norm_torso_3_run_0'.
+
Invalid Bone Part of motion: 'norm_torso_3_run_1'.
+
Invalid Bone Part of motion: 'norm_torso_4_run_0'.
+
Invalid Bone Part of motion: 'norm_torso_4_run_1'.
+
Invalid Bone Part of motion: 'norm_torso_5_run_0'.
+
Invalid Bone Part of motion: 'norm_torso_5_run_1'.
+
Invalid Bone Part of motion: 'norm_torso_8_run_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_run_1'.
+
Invalid Bone Part of motion: 'norm_torso_9_run_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_walk_0'.
+
Invalid Bone Part of motion: 'norm_torso_1_walk_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_walk_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_walk_0'.
+
Invalid Bone Part of motion: 'norm_torso_3_walk_0'.
+
Invalid Bone Part of motion: 'norm_torso_4_walk_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_walk_0'.
+
Invalid Bone Part of motion: 'norm_torso_0_walk_0'.
+
Invalid Bone Part of motion: 'norm_torso_13_holster_0'.
+
Invalid Bone Part of motion: 'norm_torso_13_aim_1'.
+
Invalid Bone Part of motion: 'norm_torso_13_draw_0'.
+
Invalid Bone Part of motion: 'norm_torso_13_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_13_holster_0'.
+
Invalid Bone Part of motion: 'cr_torso_13_aim_1'.
+
Invalid Bone Part of motion: 'cr_torso_13_draw_0'.
+
Invalid Bone Part of motion: 'cr_torso_13_aim_0'.
+
Invalid Bone Part of motion: 'norm_check_corps_0'.
+
Invalid Bone Part of motion: 'cr_torso_8_check_corps_0'.
+
Invalid Bone Part of motion: 'cr_torso_1_check_corps_0'.
+
Invalid Bone Part of motion: 'cr_torso_10_check_corps_0'.
+
Invalid Bone Part of motion: 'cr_torso_2_check_corps_0'.
+
Invalid Bone Part of motion: 'cr_torso_3_check_corps_0'.
+
Invalid Bone Part of motion: 'cr_torso_4_check_corps_0'.
+
Invalid Bone Part of motion: 'cr_torso_0_check_corps_0'.
+
Invalid Bone Part of motion: 'cr_torso_9_check_corps_0'.
+
Invalid Bone Part of motion: 'idle_9_idle_0'.
+
Invalid Bone Part of motion: 'idle_9_idle_1'.
+
Invalid Bone Part of motion: 'idle_9_idle_2'.
+
Invalid Bone Part of motion: 'idle_9_idle_3'.
+
Invalid Bone Part of motion: 'idle_9_idle_4'.
+
Invalid Bone Part of motion: 'norm_torso_m134_attack_0'.
+
Invalid Bone Part of motion: 'norm_torso_m134_aim_0'.
+
Invalid Bone Part of motion: 'norm_idle_m134'.
+
Invalid Bone Part of motion: 'norm_torso_0_idle_1'.
+
Invalid Bone Part of motion: 'norm_idle_1'.
+
Invalid Bone Part of motion: 'norm_torso_1_unstrap_2'.
+
Invalid Bone Part of motion: 'norm_torso_1_unstrap_3'.
+
Invalid Bone Part of motion: 'norm_torso_2_unstrap_2'.
+
Invalid Bone Part of motion: 'norm_torso_2_unstrap_3'.
+
Invalid Bone Part of motion: 'norm_torso_3_unstrap_2'.
+
Invalid Bone Part of motion: 'norm_torso_3_unstrap_3'.
+
Invalid Bone Part of motion: 'norm_torso_4_unstrap_2'.
+
Invalid Bone Part of motion: 'norm_torso_4_unstrap_3'.
+
Invalid Bone Part of motion: 'norm_torso_8_unstrap_2'.
+
Invalid Bone Part of motion: 'norm_torso_8_unstrap_3'.
+
Invalid Bone Part of motion: 'norm_torso_10_unstrap_2'.
+
Invalid Bone Part of motion: 'norm_torso_10_unstrap_3'.
+
Invalid Bone Part of motion: 'norm_torso_9_unstrap_2'.
+
Invalid Bone Part of motion: 'norm_torso_9_unstrap_3'.
+
Invalid Bone Part of motion: 'norm_walk_rs_0_'.
+
Invalid Bone Part of motion: 'norm_run_fwd_0_'.
+
Invalid Bone Part of motion: 'norm_walk_back_0_'.
+
Invalid Bone Part of motion: 'norm_walk_fwd_0_'.
+
Invalid Bone Part of motion: 'norm_walk_ls_0_'.
+
Invalid Bone Part of motion: 'norm_torso_7_attack_4'.
+
Invalid Bone Part of motion: 'cr_torso_6_attack_3_ 0'.
+
Invalid Bone Part of motion: 'cr_torso_6_attack_4'.
+
Invalid Bone Part of motion: 'cr_torso_7_attack_3'.
+
Invalid Bone Part of motion: 'cr_torso_7_attack_4'.
+
Invalid Bone Part of motion: 'norm_torso_6_aim_1'.
+
Invalid Bone Part of motion: 'norm_torso_6_aim_2'.
+
Invalid Bone Part of motion: 'norm_torso_6_attack_3'.
+
Invalid Bone Part of motion: 'norm_torso_6_attack_4'.
+
Invalid Bone Part of motion: 'norm_torso_7_attack_3'.
+
Invalid Bone Part of motion: 'cr_torso_6_aim_3'.
+
Invalid Bone Part of motion: 'norm_run_back_0_'.
+
Invalid Bone Part of motion: 'norm_run_fwd_rs_0'.
+
Invalid Bone Part of motion: 'norm_run_back_rs_0'.
+
Invalid Bone Part of motion: 'norm_run_fwd_ls_0'.
+
Invalid Bone Part of motion: 'norm_run_back_ls_0'.
+
Invalid Bone Part of motion: 'cr_torso_6_aim_1'.
+
Invalid Bone Part of motion: 'cr_torso_6_aim_2'.
+
Invalid Bone Part of motion: 'norm_run_rs_0_'.
+
Invalid Bone Part of motion: 'norm_run_ls_0_'.
+
Invalid Bone Part of motion: 'norm_torso_6_drop_0'.
+
Invalid Bone Part of motion: 'cr_torso_6_drop_0'.
+
Invalid Bone Part of motion: 'norm_run_ls_0='.
+
Invalid Bone Part of motion: 'norm_run_rs_0='.
+
Invalid Bone Part of motion: 'norm_run_rs_0__'.
+
Invalid Bone Part of motion: 'norm_torso_2_look_beack_rs_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_look_beack_ls_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_look_beack_rs_1'.
+
Invalid Bone Part of motion: 'norm_torso_2_look_beack_ls_1'.
+
Invalid Bone Part of motion: 'cr_walk_f'.
+
Invalid Bone Part of motion: 'norm_walk_rs_0'.
+
Invalid Bone Part of motion: 'cr_idle_1'.
+
Invalid Bone Part of motion: 'cr_idle_0'.
+
Invalid Bone Part of motion: 'cr_run_back_0'.
+
Invalid Bone Part of motion: 'cr_run_fwd_0'.
+
Invalid Bone Part of motion: 'cr_run_ls_0'.
+
Invalid Bone Part of motion: 'cr_run_rs_0'.
+
Invalid Bone Part of motion: 'cr_torso_0_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_0_aim_1'.
+
Invalid Bone Part of motion: 'cr_torso_0_aim_2'.
+
Invalid Bone Part of motion: 'cr_torso_0_aim_3'.
+
Invalid Bone Part of motion: 'cr_torso_10_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_10_aim_1'.
+
Invalid Bone Part of motion: 'cr_torso_10_aim_3'.
+
Invalid Bone Part of motion: 'cr_torso_10_attack_0'.
+
Invalid Bone Part of motion: 'cr_torso_10_attack_1'.
+
Invalid Bone Part of motion: 'cr_torso_10_attack_2'.
+
Invalid Bone Part of motion: 'cr_torso_10_attack_3'.
+
Invalid Bone Part of motion: 'cr_torso_10_draw_0'.
+
Invalid Bone Part of motion: 'cr_torso_10_drop_0'.
+
Invalid Bone Part of motion: 'cr_torso_10_holster_0'.
+
Invalid Bone Part of motion: 'cr_torso_10_reload_0'.
+
Invalid Bone Part of motion: 'cr_torso_10_reload_1'.
+
Invalid Bone Part of motion: 'cr_torso_10_reload_2'.
+
Invalid Bone Part of motion: 'cr_torso_11_aim_1'.
+
Invalid Bone Part of motion: 'cr_torso_11_aim_2'.
+
Invalid Bone Part of motion: 'cr_torso_11_aim_3'.
+
Invalid Bone Part of motion: 'cr_torso_11_attack_2'.
+
Invalid Bone Part of motion: 'cr_torso_11_attack_3'.
+
Invalid Bone Part of motion: 'cr_torso_11_draw_0'.
+
Invalid Bone Part of motion: 'cr_torso_11_drop_0'.
+
Invalid Bone Part of motion: 'cr_torso_11_holster_0'.
+
Invalid Bone Part of motion: 'cr_torso_1_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_1_aim_1'.
+
Invalid Bone Part of motion: 'cr_torso_1_aim_3'.
+
Invalid Bone Part of motion: 'cr_torso_1_attack_0'.
+
Invalid Bone Part of motion: 'cr_torso_1_attack_1'.
+
Invalid Bone Part of motion: 'cr_torso_1_attack_2'.
+
Invalid Bone Part of motion: 'cr_torso_1_attack_3'.
+
Invalid Bone Part of motion: 'cr_torso_1_draw_0'.
+
Invalid Bone Part of motion: 'cr_torso_1_drop_0'.
+
Invalid Bone Part of motion: 'cr_torso_1_holster_0'.
+
Invalid Bone Part of motion: 'cr_torso_1_reload_0'.
+
Invalid Bone Part of motion: 'cr_torso_2_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_2_aim_1'.
+
Invalid Bone Part of motion: 'cr_torso_2_aim_3'.
+
Invalid Bone Part of motion: 'cr_torso_2_attack_0'.
+
Invalid Bone Part of motion: 'cr_torso_2_attack_1'.
+
Invalid Bone Part of motion: 'cr_torso_2_attack_2'.
+
Invalid Bone Part of motion: 'cr_torso_2_attack_3'.
+
Invalid Bone Part of motion: 'cr_torso_2_draw_0'.
+
Invalid Bone Part of motion: 'cr_torso_2_drop_0'.
+
Invalid Bone Part of motion: 'cr_torso_2_holster_0'.
+
Invalid Bone Part of motion: 'cr_torso_2_reload_0'.
+
Invalid Bone Part of motion: 'cr_torso_3_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_3_aim_1'.
+
Invalid Bone Part of motion: 'cr_torso_3_aim_3'.
+
Invalid Bone Part of motion: 'cr_torso_3_attack_0'.
+
Invalid Bone Part of motion: 'cr_torso_3_attack_1'.
+
Invalid Bone Part of motion: 'cr_torso_3_attack_2'.
+
Invalid Bone Part of motion: 'cr_torso_3_attack_3'.
+
Invalid Bone Part of motion: 'cr_torso_3_draw_0'.
+
Invalid Bone Part of motion: 'cr_torso_3_drop_0'.
+
Invalid Bone Part of motion: 'cr_torso_3_holster_0'.
+
Invalid Bone Part of motion: 'cr_torso_3_reload_0'.
+
Invalid Bone Part of motion: 'cr_torso_4_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_4_aim_1'.
+
Invalid Bone Part of motion: 'cr_torso_4_aim_3'.
+
Invalid Bone Part of motion: 'cr_torso_4_attack_0'.
+
Invalid Bone Part of motion: 'cr_torso_4_attack_1'.
+
Invalid Bone Part of motion: 'cr_torso_4_attack_2'.
+
Invalid Bone Part of motion: 'cr_torso_4_attack_3'.
+
Invalid Bone Part of motion: 'cr_torso_4_draw_0'.
+
Invalid Bone Part of motion: 'cr_torso_4_drop_0'.
+
Invalid Bone Part of motion: 'cr_torso_4_holster_0'.
+
Invalid Bone Part of motion: 'cr_torso_4_reload_0'.
+
Invalid Bone Part of motion: 'cr_torso_5_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_5_aim_1'.
+
Invalid Bone Part of motion: 'cr_torso_5_aim_2'.
+
Invalid Bone Part of motion: 'cr_torso_5_aim_3'.
+
Invalid Bone Part of motion: 'cr_torso_5_attack_0'.
+
Invalid Bone Part of motion: 'cr_torso_5_attack_1'.
+
Invalid Bone Part of motion: 'cr_torso_5_draw_0'.
+
Invalid Bone Part of motion: 'cr_torso_5_drop_0'.
+
Invalid Bone Part of motion: 'cr_torso_5_holster_0'.
+
Invalid Bone Part of motion: 'cr_torso_7_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_7_aim_1'.
+
Invalid Bone Part of motion: 'cr_torso_7_aim_2'.
+
Invalid Bone Part of motion: 'cr_torso_7_aim_3'.
+
Invalid Bone Part of motion: 'cr_torso_7_draw_0'.
+
Invalid Bone Part of motion: 'cr_torso_7_drop_0'.
+
Invalid Bone Part of motion: 'cr_torso_7_holster_0'.
+
Invalid Bone Part of motion: 'cr_torso_8_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_8_aim_1'.
+
Invalid Bone Part of motion: 'cr_torso_8_aim_3'.
+
Invalid Bone Part of motion: 'cr_torso_8_attack_0'.
+
Invalid Bone Part of motion: 'cr_torso_8_attack_1'.
+
Invalid Bone Part of motion: 'cr_torso_8_attack_2'.
+
Invalid Bone Part of motion: 'cr_torso_8_attack_3'.
+
Invalid Bone Part of motion: 'cr_torso_8_draw_0'.
+
Invalid Bone Part of motion: 'cr_torso_8_drop_0'.
+
Invalid Bone Part of motion: 'cr_torso_8_holster_0'.
+
Invalid Bone Part of motion: 'cr_torso_8_reload_0'.
+
Invalid Bone Part of motion: 'cr_torso_9_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_9_aim_1'.
+
Invalid Bone Part of motion: 'cr_torso_9_aim_3'.
+
Invalid Bone Part of motion: 'cr_torso_9_attack_0'.
+
Invalid Bone Part of motion: 'cr_torso_9_attack_1'.
+
Invalid Bone Part of motion: 'cr_torso_9_attack_2'.
+
Invalid Bone Part of motion: 'cr_torso_9_attack_3'.
+
Invalid Bone Part of motion: 'cr_torso_9_draw_0'.
+
Invalid Bone Part of motion: 'cr_torso_9_drop_0'.
+
Invalid Bone Part of motion: 'cr_torso_9_holster_0'.
+
Invalid Bone Part of motion: 'cr_torso_9_reload_0'.
+
Invalid Bone Part of motion: 'cr_torso_9_reload_1'.
+
Invalid Bone Part of motion: 'cr_torso_9_reload_2'.
+
Invalid Bone Part of motion: 'cr_walk_back_0'.
+
Invalid Bone Part of motion: 'cr_walk_fwd_0'.
+
Invalid Bone Part of motion: 'cr_walk_ls_0'.
+
Invalid Bone Part of motion: 'cr_walk_rs_0'.
+
Invalid Bone Part of motion: 'norm_torso_0_aim_1'.
+
Invalid Bone Part of motion: 'norm_torso_0_aim_2'.
+
Invalid Bone Part of motion: 'norm_torso_0_aim_3'.
+
Invalid Bone Part of motion: 'norm_torso_10_aim_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_aim_1'.
+
Invalid Bone Part of motion: 'norm_torso_10_attack_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_attack_1'.
+
Invalid Bone Part of motion: 'norm_torso_10_attack_2'.
+
Invalid Bone Part of motion: 'norm_torso_10_attack_3'.
+
Invalid Bone Part of motion: 'norm_torso_10_draw_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_drop_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_holster_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_reload_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_reload_1'.
+
Invalid Bone Part of motion: 'norm_torso_10_reload_2'.
+
Invalid Bone Part of motion: 'norm_torso_11_aim_1'.
+
Invalid Bone Part of motion: 'norm_torso_11_aim_2'.
+
Invalid Bone Part of motion: 'norm_torso_11_attack_2'.
+
Invalid Bone Part of motion: 'norm_torso_11_attack_3'.
+
Invalid Bone Part of motion: 'norm_torso_11_draw_0'.
+
Invalid Bone Part of motion: 'norm_torso_11_drop_0'.
+
Invalid Bone Part of motion: 'norm_torso_11_holster_0'.
+
Invalid Bone Part of motion: 'norm_torso_1_aim_0'.
+
Invalid Bone Part of motion: 'norm_torso_1_aim_1'.
+
Invalid Bone Part of motion: 'norm_torso_1_attack_0'.
+
Invalid Bone Part of motion: 'norm_torso_1_attack_1'.
+
Invalid Bone Part of motion: 'norm_torso_1_attack_2'.
+
Invalid Bone Part of motion: 'norm_torso_1_attack_3'.
+
Invalid Bone Part of motion: 'norm_torso_1_draw_0'.
+
Invalid Bone Part of motion: 'norm_torso_1_drop_0'.
+
Invalid Bone Part of motion: 'norm_torso_1_holster_0'.
+
Invalid Bone Part of motion: 'norm_torso_1_reload_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_aim_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_aim_1'.
+
Invalid Bone Part of motion: 'norm_torso_2_attack_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_attack_1'.
+
Invalid Bone Part of motion: 'norm_torso_2_attack_2'.
+
Invalid Bone Part of motion: 'norm_torso_2_attack_3'.
+
Invalid Bone Part of motion: 'norm_torso_2_draw_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_drop_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_holster_0'.
+
Invalid Bone Part of motion: 'norm_torso_2_reload_0'.
+
Invalid Bone Part of motion: 'norm_torso_3_aim_0'.
+
Invalid Bone Part of motion: 'norm_torso_3_aim_1'.
+
Invalid Bone Part of motion: 'norm_torso_3_attack_0'.
+
Invalid Bone Part of motion: 'norm_torso_3_attack_1'.
+
Invalid Bone Part of motion: 'norm_torso_3_attack_2'.
+
Invalid Bone Part of motion: 'norm_torso_3_attack_3'.
+
Invalid Bone Part of motion: 'norm_torso_3_draw_0'.
+
Invalid Bone Part of motion: 'norm_torso_3_drop_0'.
+
Invalid Bone Part of motion: 'norm_torso_3_holster_0'.
+
Invalid Bone Part of motion: 'norm_torso_3_reload_0'.
+
Invalid Bone Part of motion: 'norm_torso_4_aim_0'.
+
Invalid Bone Part of motion: 'norm_torso_4_aim_1'.
+
Invalid Bone Part of motion: 'norm_torso_4_attack_0'.
+
Invalid Bone Part of motion: 'norm_torso_4_attack_1'.
+
Invalid Bone Part of motion: 'norm_torso_4_attack_2'.
+
Invalid Bone Part of motion: 'norm_torso_4_attack_3'.
+
Invalid Bone Part of motion: 'norm_torso_4_draw_0'.
+
Invalid Bone Part of motion: 'norm_torso_4_drop_0'.
+
Invalid Bone Part of motion: 'norm_torso_4_holster_0'.
+
Invalid Bone Part of motion: 'norm_torso_4_reload_0'.
+
Invalid Bone Part of motion: 'norm_torso_5_aim_0'.
+
Invalid Bone Part of motion: 'norm_torso_5_aim_1'.
+
Invalid Bone Part of motion: 'norm_torso_5_aim_2'.
+
Invalid Bone Part of motion: 'norm_torso_5_attack_0'.
+
Invalid Bone Part of motion: 'norm_torso_5_attack_1'.
+
Invalid Bone Part of motion: 'norm_torso_5_draw_0'.
+
Invalid Bone Part of motion: 'norm_torso_5_drop_0'.
+
Invalid Bone Part of motion: 'norm_torso_5_holster_0'.
+
Invalid Bone Part of motion: 'norm_torso_7_aim_0'.
+
Invalid Bone Part of motion: 'norm_torso_7_aim_1'.
+
Invalid Bone Part of motion: 'norm_torso_7_aim_2'.
+
Invalid Bone Part of motion: 'norm_torso_7_draw_0'.
+
Invalid Bone Part of motion: 'norm_torso_7_drop_0'.
+
Invalid Bone Part of motion: 'norm_torso_7_holster_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_aim_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_aim_1'.
+
Invalid Bone Part of motion: 'norm_torso_8_attack_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_attack_1'.
+
Invalid Bone Part of motion: 'norm_torso_8_attack_2'.
+
Invalid Bone Part of motion: 'norm_torso_8_attack_3'.
+
Invalid Bone Part of motion: 'norm_torso_8_draw_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_drop_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_holster_0'.
+
Invalid Bone Part of motion: 'norm_torso_8_reload_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_aim_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_aim_1'.
+
Invalid Bone Part of motion: 'norm_torso_9_attack_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_attack_1'.
+
Invalid Bone Part of motion: 'norm_torso_9_attack_2'.
+
Invalid Bone Part of motion: 'norm_torso_9_attack_3'.
+
Invalid Bone Part of motion: 'norm_torso_9_draw_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_drop_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_holster_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_reload_0'.
+
Invalid Bone Part of motion: 'norm_torso_9_reload_1'.
+
Invalid Bone Part of motion: 'norm_torso_9_reload_2'.
+
Invalid Bone Part of motion: 'norm_walk_back_0'.
+
Invalid Bone Part of motion: 'norm_walk_fwd_0'.
+
Invalid Bone Part of motion: 'norm_walk_ls_0'.
+
Invalid Bone Part of motion: 'norm_torso_5_attack_2'.
+
Invalid Bone Part of motion: 'norm_torso_5_attack_3'.
+
Invalid Bone Part of motion: 'cr_torso_5_attack_2'.
+
Invalid Bone Part of motion: 'cr_torso_5_attack_3'.
+
Invalid Bone Part of motion: 'norm_idle_0'.
+
Invalid Bone Part of motion: 'norm_torso_10_aim_2'.
+
Invalid Bone Part of motion: 'cr_torso_1_aim_2'.
+
Invalid Bone Part of motion: 'cr_torso_2_aim_2'.
+
Invalid Bone Part of motion: 'cr_torso_3_aim_2'.
+
Invalid Bone Part of motion: 'cr_torso_4_aim_2'.
+
Invalid Bone Part of motion: 'cr_torso_8_aim_2'.
+
Invalid Bone Part of motion: 'cr_torso_9_aim_2'.
+
Invalid Bone Part of motion: 'cr_torso_10_aim_2'.
+
Invalid Bone Part of motion: 'norm_torso_1_aim_2'.
+
Invalid Bone Part of motion: 'norm_torso_2_aim_2'.
+
Invalid Bone Part of motion: 'norm_torso_3_aim_2'.
+
Invalid Bone Part of motion: 'norm_torso_4_aim_2'.
+
Invalid Bone Part of motion: 'norm_torso_8_aim_2'.
+
Invalid Bone Part of motion: 'norm_torso_9_aim_2'.
+
Invalid Bone Part of motion: 'norm_torso_9_aim_3'.
+
Invalid Bone Part of motion: 'norm_torso_1_aim_3'.
+
Invalid Bone Part of motion: 'norm_torso_2_aim_3'.
+
Invalid Bone Part of motion: 'norm_torso_3_aim_3'.
+
Invalid Bone Part of motion: 'norm_torso_4_aim_3'.
+
Invalid Bone Part of motion: 'norm_torso_5_aim_3'.
+
Invalid Bone Part of motion: 'norm_torso_7_aim_3'.
+
Invalid Bone Part of motion: 'norm_torso_8_aim_3'.
+
Invalid Bone Part of motion: 'norm_torso_11_aim_3'.
+
Invalid Bone Part of motion: 'norm_torso_10_aim_3'.
+
Invalid Bone Part of motion: 'norm_torso_11_attack_0'.
+
Invalid Bone Part of motion: 'cr_torso_11_attack_0'.
+
Invalid Bone Part of motion: 'norm_torso_7_attack_0'.
+
Invalid Bone Part of motion: 'norm_torso_7_attack_1'.
+
Invalid Bone Part of motion: 'norm_torso_7_attack_2'.
+
Invalid Bone Part of motion: 'cr_torso_7_attack_2'.
+
Invalid Bone Part of motion: 'cr_torso_7_attack_0'.
+
Invalid Bone Part of motion: 'cr_torso_7_attack_1'.
+
Invalid Bone Part of motion: 'norm_turn_left_0'.
+
Invalid Bone Part of motion: 'norm_turn_right_0'.
+
Invalid Bone Part of motion: 'cr_turn_left_0'.
+
Invalid Bone Part of motion: 'cr_turn_right_0'.
+
Invalid Bone Part of motion: 'norm_turn'.
+
Invalid Bone Part of motion: 'cr_turn'.
+
Invalid Bone Part of motion: 'norm_torso_11_attack_1'.
+
Invalid Bone Part of motion: 'cr_torso_11_attack_1'.
+
Invalid Bone Part of motion: 'norm_torso_11_aim_0'.
+
Invalid Bone Part of motion: 'cr_torso_11_aim_0'.
+
Invalid Bone Part of motion: 'norm_run_fwd_0'.
+
Invalid Bone Part of motion: 'norm_run_rs_0'.
+
Invalid Bone Part of motion: 'norm_run_back_0'.
+
Invalid Bone Part of motion: 'norm_run_ls_0'.
+
Invalid Bone Part of motion: 'norm_turn_left_1'.
+
Invalid Bone Part of motion: 'norm_turn_right_1'.
+
Invalid Bone Part of motion: 'norm_torso_0_aim_0'.
+
Invalid Bone Part of motion: 'norm_jump_idle'.
+
Invalid Bone Part of motion: 'cr_jump_begin'.
+
Invalid Bone Part of motion: 'cr_jump_end'.
+
Invalid Bone Part of motion: 'cr_jump_idle'.
+
Invalid Bone Part of motion: 'norm_jump_begin'.
+
Invalid Bone Part of motion: 'norm_jump_end'.
+
Invalid Bone Part of motion: 'cr_torso_13_drop_0'.
+
Invalid Bone Part of motion: 'norm_torso_13_drop_0'.
+
Export failed.
+

Текущая версия на 20:04, 11 марта 2018

Инструментарий

В данной статье нам понадобится следующее программное обеспечение:

Использование конвертера от bardak'a

Как мы уже знаем, Actor Editor из пакета SDK 0.4 не открывает динамические игровые модели формата *.ogf. Он воспринимает только формат редактора - *.object. Но такого формата в игре нет, потому мы и воспользуемся конвертером от bardak'a.

Открываем папку с конвертером. Оттуда нам нужен только converter. Работа с ним элементарна.

Если у вас есть распакованные архивы для ЧН или ЗП - то скопируйте оттуда любую модель НПС (лучше ту, которой нет в ТЧ, а то вся работа пойдет даром:)). Модели НПС находятся по адресу:

gamedata\meshes\actors\...

Для примера, я взял модель сталкера группировки "Чистое небо" в противогазе. Она находилась по адресу:

gamedata\meshes\actors\stalker_nebo\stalker_nebo_2.ogf

Копируем модель в папку с конвертером. Далее нам ничего настраивать не нужно. Создаем текстовый документ, открываем его обычнейшим блокнотом и пишем в нем такой код:

converter -ogf -object <имя_модели.ogf>

Почему именно так а не иначе, смотрим в папке docs в корне конвертера. В моем случае я писал:

converter -ogf -object stalker_nebo_2.ogf
pause

Теперь в блокноте жмем Файл>Сохранить как... В строке Тип файла ставим значение "Все файлы (*.*)", а в строке Имя файла пишем "ваше_имя_файла.bat". Кодировка не важна. В окне выбора директории выбираем корневой каталог нашего конвертера и жмем "Сохранить". Я выбрал название:

model.bat

Теперь мы видим, что появился новый файл ваше_имя_файла.bat. Нажимаем на него. При выполнении всего вышеописанного у вас должен создаться файл имя_модели.object. Это наш сконвертированный НПС. Работа с конвертером закончена.

Настройка модели в Actor Editor'e

Копируем полученный в конвертере файл имя_модели.object в папку:

$sdk_root\level_editor\rawdata\objects\editor, где $sdk_root - путь к вашему SDK.

Например у меня это:

E:\Program Files\X-Ray SDK\level_editor\rawdata\objects\editor

Открываем Actor Editor из пакета SDK. Далее жмем File>Load... в правом верхнем углу интерфейса. Выбираем $sdk_root\level_editor\rawdata\objects\editor\имя_модели.object

Загрузится модель вашего НПС, но будет она белым пятном. Сразу же выскочит окошко, именуемое Log.

В самом низу этого окошка вы увидите строку, выделенную бледно-розовым цветом. Это строка, содержащая ошибку.

В нашем случае это:

Can't find shader 'models\model_pn'
Модель без настроек в Actor Editor'e

Это сообщение в логе означает, что в базе шейдеров SDK нет шейдера models\model_pn, примененного к этой модели.

Это можно исправить. Идем на вкладку Surfaces справа на интерфейсе. Surface переводится дословно как внешность/поверхность.

Ищем нашу злаполучную внешность, к которой применен шейдер models\model_pn. В моем случае это была единственная внешность act_stalker_nebo_2S[1]. В ней нужно изменить шейдер на другой, приближенный к оригиналу. Жмем на троеточие[2] напротив Shader и в открывшемся окошке выбираем шейдер models\model[3]. Жмем Ok[4].

Выбор шейдера

Применили новый шейдер. Теперь в логе может появиться новая ошибка:

Can't find texture 'act\act_stalker_nebo_2'

Не трудно догадаться, что система не может найти текстуру act\act_stalker_nebo_2 в gamedat'e SDK.

Это тоже исправимо. Нужно скопировать текстуры для этой модели из текстур ЧН\ЗП, и вставть их в текстуры SDK. Если же ошибки с текстурами не возникло - наше белое пятно должно превратиться в НПС.

НПС с текстурой

Работа с анимациями

Снятие анимаций с модели

Теперь нужно выбрать вкладку Motions справа на интерфейсе. Здесь нас интересует только Motion reference. Наведите курсор на значение этого поля, и вы увидите какие сборники анимаций проигрывает данная модель. В моем случае (как и в большинстве случаев) это:

actors\stalker_animation,actors\stalker_scripts_animation,actors\stalker_smart_cover_animation,actors\stalker_scenario_animation
Список отыгрываемых анимаций

Теперь нужно запомнить анимации, прописанные в Motion reference, можно записать в блокнотик, проблем с этим возникнуть не должно. Но их нужно, запомнить, т.к. сейчас мы будем сбрасывать значение этого поля.

Делается это так: Жмем на троеточие напротив Motion reference[1]. Снимаем галочки со всех сборников анимаций[2] и жмем Ok[3]. Если же в окошке, где нужно снимать галочки, вообще нет анимаций, а просто пустое окошко, ничего страшного в этом нет. Просто в ресурсах SDK нет этих анимаций, в таком случае сразу жмем Ok.

Конвертирование сборников анимаций

Теперь пришло время вспомнить, какие сборники анимации отыгрывает модель (помнится, мы записали это в блокнотик:)). Нужно найти эти сборники. Они лежат по адресу:

Корень вашего ЧН или ЗП\gamedata\meshes\actors\...

Копируем нужные нам сборники из этой папки в корневую папку со старым добрым конвертером от bardak'a. В корне конвертера создаем текстовый документ, открываем его блокнотом и в нем пишем следующий код:

converter -omf -skls <имя_сборника_анимаций>.omf

Вместо имени сборника анимаций подставляем нужный сборник, например:

converter -omf -skls stalker_animation.omf

Сохраняем этот текст как .bat файл (как это сделать оговаривалось ранее). Запускаем батник, и через секунд 5-10 получаем рядом новый файл имя_сборника_анимаций.skls.

Теперь поочередно вставляем в батник другие названия нужных нам сборников анимаций, сохраняем и запускаем. После этих операций у нас должны появиться нужные нам сборники анимаций, но уже в формате .skls. Если все так, как надо - конвертация завершена.

Применение сконвертированных анимаций к модели

Теперь копируем все полученные сборники анимаций в каталог

$sdk_root\level_editor\import

Можно и в любой другой, но мне кажется удобнее всего именно в этот. Далее открываем Actor Editor. Как мы видим, теперь во вкладке Motions появилось поле Edit с кнопками Append, Delete и Save. Жмем Append и выбираем все наши сборники анимаций по очереди.

Применение анимаций к модели

В итоге у меня получилось 2543 анимации во вкладке Motions (по счетчику Motion count).

Работа с костями

Справа на интерфейсе жмем Bone Parts[1], что находится на вкладке Model. В появившемся окошке жмем снизу кнопочку Reset To Default[2]. После этого действия у нас в левой верхней таблице появится множество костей. Выберите оттуда кости (это делается с помощью зажатия клавиши Ctrl):

bip01_spine     
bip01_spine1
bip01_spine2
bip01_neck
bip01_l_clavicle
bip01_l_upperarm
bip01_l_forearm
bip01_l_hand
bip01_l_finger0
bip01_l_finger01
bip01_l_finger02
bip01_l_finger1
bip01_l_finger11
bip01_l_finger12
bip01_l_finger2
bip01_l_finger21
bip01_l_finger22
bip01_r_clavicle
bip01_r_upperarm
bip01_r_forearm
bip01_r_hand
bip01_r_finger0
bip01_r_finger01
bip01_r_finger02
bip01_r_finger1
bip01_r_finger11
bip01_r_finger12
bip01_r_finger2
bip01_r_finger21
bip01_r_finger22
bip01_head

и перетащите их в правую верхную таблицу. Обзовите эту таблицу "Torso"[3]. Далее выберите кости:

eye_left
eye_right
eyelid_1
jaw_1

и перетащите их в левую нижнюю таблицу и обзовите ее "Head"[4]. Все. Жмем Ok[5].

Работа с костями

Экспорт анимаций в .omf сборник

Теперь нужно экспортировать наши анимации в наш собственный сборник. Это делается путем нажатия File>Export[1]>Export OMF...[2] в правом верхнем углу интерфейса.

Внимание! Выбирать директорию нужно тщательно, не куда попало, а именно в папку gamedata\meshes вашего SDK, потому что после экспорта полученный сборник должен находится в том же самом месте в игре, где он был и в SDK. Например, если в SDK он лежал по адресу:

$sdk_root\level_editor\gamedata\meshes\actors\nebo_animations.omf

то в игре он должен лежать по адресу

Корень ТЧ\gamedata\meshes\actors\nebo_animations.omf

В противном случае модель не сможет найти анимации и мы получим мгновенный вылет. Если определились с местом проживания сборника - жмем Сохранить.

Экспорт .omf сборника

Когда экспорт завершен, отмечаем все анимации во вкладке Motions и жмем Delete. Все анимации удалили. Теперь нужно нажать на троеточие напротив Motion reference и в окошке установить галочку напротив сборника анимаций, который мы только что создали. Теперь жмем Ok. Работа с костями закончена.

Редактирование User Data для модели

Жмем строку Object[1] справа на интерфейсе. Идем в самый низ и видим строку User Data. Жмем на троеточие[2] напротив и вставляем вместо того, что там сейчас, User Dat'у, взятую у другой модели[3]. Я например взял ее у военного спецназовца. Поэтому у меня получилось вот что:

#include "models\capture\kombez_helmet_damage_low.ltx"

Жмем Ok[4].

Изменение User Data

Позже мы разберемся с тем, на что эта конструкция влияет.

Экспорт модели в .ogf

Когда мы завершили работу с моделью, нужно сконвертировать ее в формат, понятный игре. Благо для этого в Actor Editor'e для этого есть встроенный инструментарий. Жмем File>Export>Export OGF.... Думаю скрины для этого не нужны, т.к. такую же операцию мы прпоизводили с экспортом сборника анимаций. Саму модель можно обзывать как угодно и сохранять куда угодно.

Применение модели в игре

Файл textures.ltx

Этот ход нужно выполнять только в том случае, если вы приверженец качественной игры и играете только на типе рендера "Динамическое освещение". Если же это не так - вы просто не заметите никакой разницы. Итак, начнем. Идем в директорию gamedata\textures игры и открываем любым удобным редактором файл textures.ltx. Далее нам нужно вписать текстуры, используемые моделью нашего сконвертированного НПС. Эти текстуры нужно прописать в секциях [specification] и [types], желательно в конец секции, чтобы потом было проще их искать и редактировать. Добавим наши текстуры в секцию [specification]:

...
wpn\wpn_winchester1300 = bump_mode[use:wpn\wpn_winchester1300_bump], material[2.85]
wpn\wpn_zink = bump_mode[none], material[2.85]
wpn\wpn_zink_545 = bump_mode[none], material[2.85]
wpn\wpn_zink_57 = bump_mode[none], material[2.85]
wpn\wpn_zink_9 = bump_mode[none], material[2.85]
wpn\wpn_zink_svd = bump_mode[none], material[2.85]
 ; Наши тектуры
act\act_stalker_nebo_2 = bump_mode[use:act\act_stalker_nebo_2_bump], material[0.50]
 
[types]
$bump-test = 2
$details = 0
...

Поясню, что мы вставили: act\act_stalker_nebo_2 - Имя текстуры, используемой НПС bump_mode[use:act\act_stalker_nebo_2_bump] - Это значит, что текстура использует бамп текстуру "act_stalker_nebo_2_bump" material[0.50] - Скорее всего эта строка отвечает за рельефность бамп-текстуры

Добавим наши текстуры в секцию [types]:

...
wpn\wpn_zink_svd = bump_mode[none], material[2.85]
 ; Наши тектуры
act\act_stalker_nebo_2 = bump_mode[use:act\act_stalker_nebo_2_bump], material[0.50]
 
[types]
act\act_stalker_nebo_2 = 0
act\act_stalker_nebo_2_bump = 2
$bump-test = 2
$details = 0
$shadertest = 0
$target = 0
...

Поясню, что мы вставили: act\act_stalker_nebo_2 = 0 - "0" - номер обычной текстуры act\act_stalker_nebo_2_bump = 2 - "2" - номер бамп-текстуры Если не понятно, можно эти строки вставить из файла textures.ltx от ЧН или ЗП.

Присвоение модели любому НПС

Теперь нужно дать какому-нибудь НПС из игры нашу модель. Пусть это будет волк! Открываем файл gamedata\config\gameplay\character_desc_escape.xml с помощью блокнота. Находим там практически в самом начале секцию Волка:

<!---------------------------------------esc_wolf----------------------------------------------------->
<specific_character id="esc_wolf" team_default = "1">
<name>esc_wolf_name</name>
<icon>ui_npc_u_stalker_neytral_balon_1</icon>
<bio>esc_wolf_bio</bio>
 
<class>esc_wolf</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
 
<rank>434</rank>
<reputation>5</reputation>
<money min="600" max="2000" infinitive="0"/>
 
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
 
<visual>actors\neytral\stalker_neytral_balon_1</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
wpn_ak74u \n
ammo_5.45x39_fmj \n
device_torch \n
hand_radio \n
</supplies>
 
#include "gameplay\character_criticals_4.xml"
 
<start_dialog>escape_lager_volk_talk</start_dialog>
<start_dialog>dm_hello_dialog</start_dialog>
<actor_dialog>dm_cool_info_dialog</actor_dialog>
<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
<actor_dialog>tm_wolf_dialog</actor_dialog>
<actor_dialog>tm_wolf_reward</actor_dialog>
</specific_character>

и заменяем ее на:

<!---------------------------------------esc_wolf----------------------------------------------------->
<specific_character id="esc_wolf" team_default = "1">
<name>esc_wolf_name</name>
<icon>ui_npc_u_stalker_neytral_balon_1</icon>
<bio>esc_wolf_bio</bio>
 
<class>esc_wolf</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
 
<rank>434</rank>
<reputation>5</reputation>
<money min="600" max="2000" infinitive="0"/>
 
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
 
<visual>путь, к вашей модели относительно папки meshes</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
wpn_ak74u \n
ammo_5.45x39_fmj \n
device_torch \n
hand_radio \n
</supplies>
 
#include "gameplay\character_criticals_4.xml"
 
<start_dialog>escape_lager_volk_talk</start_dialog>
<start_dialog>dm_hello_dialog</start_dialog>
<actor_dialog>dm_cool_info_dialog</actor_dialog>
<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
<actor_dialog>tm_wolf_dialog</actor_dialog>
<actor_dialog>tm_wolf_reward</actor_dialog>
</specific_character>

В моем случае я писал:

<!---------------------------------------esc_wolf----------------------------------------------------->
<specific_character id="esc_wolf" team_default = "1">
<name>esc_wolf_name</name>
<icon>ui_npc_u_stalker_neytral_balon_1</icon>
<bio>esc_wolf_bio</bio>
 
<class>esc_wolf</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
 
<rank>434</rank>
<reputation>5</reputation>
<money min="600" max="2000" infinitive="0"/>
 
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
 
<visual>actors\nebo\stalker_nebo_2</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
wpn_ak74u \n
ammo_5.45x39_fmj \n
device_torch \n
hand_radio \n
</supplies>
 
#include "gameplay\character_criticals_4.xml"
 
<start_dialog>escape_lager_volk_talk</start_dialog>
<start_dialog>dm_hello_dialog</start_dialog>
<actor_dialog>dm_cool_info_dialog</actor_dialog>
<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
<actor_dialog>tm_wolf_dialog</actor_dialog>
<actor_dialog>tm_wolf_reward</actor_dialog>
</specific_character>

Проба в игре

Все, теперь запускаем игру. Желательно начать новую игру, в противном случае Волк может остаться при своей старой модели. Вот скрин из игры:

Конвертированный НПС в игре

Автор

Статья создана: Участник:Baklan

Основа взята у: eNdimiOn

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

См. страницу обсуждения

Другие места
LANGUAGE