×
Меню
Индекс

Header changing

Возможно скрипт не вполне рабочий!
Т.е. получать работоспособную модели с несколькими объектами, не получалось!
Также скрипт не поможет в случае моделей содержащих неизвестные в МВ объекты!
Срабатывает только для простых моделей с одним объектом в сцене.
 
Создать текстовый файл, вставить текст, сохранить с расширением .PY
Выполнить посредством  установленных в системе Pyffi утилит.
 
file = " - указать путь к ниф файлу, которому меняем Хидер.
data._setVersion(0x4000002) - " указать новую версию. Здесь 4.0.0.2
 
Some widely-used versions and their hex representation:
        4.0.0.2:    0x04000002
        4.1.0.12:   0x0401000C
        4.2.0.2:    0x04020002
        4.2.1.0:    0x04020100
        4.2.2.0:    0x04020200
        10.0.1.0:   0x0A000100
        10.1.0.0:   0x0A010000
        10.2.0.0:   0x0A020000
        20.0.0.4:   0x14000004
        20.0.0.5:   0x14000005
Т.е. в может сработать и для обратной конверсии 4.0 в 4.2
 
Важно!
Подобный способ, простого изменения хидера файла, приводил к изменению,  has Uv - yes. На has Uv - no.
Т.е. например, слетал параметр развертки в NiTriStripsData.
Это необходимо исправлять! Иначе модель не будет работать в принципе!
Впрочем это оказалось легко - достаточно было вернуть значение Yes, сами настройки развертки не потерялись.
Как видеться, проблема состоит в нарушении смещения некоторых байт данных и если это исправить, то станет возможным проводить более сложные манипуляции. Однако, смещение может происходить не только в заголовке файла, но и в составе других элемнтов.
 
Примечание.
Полностью безсмыленно для KF файлов!
Т.е. хидер изменить можно, но в МВ работать это не будет.
Поскольку КФ файлы версии 4.2 принципиально отличаются от КФ файлов 4.0 версии.
4.2 корень файла NiSequence
4.0 корень файла NiSequenceStreamHelper
 
(С) Greatness7

from pyffi.formats.nif import NifFormat
 
file = "C:/test.nif"
 
with open(file, 'rb') as stream:
    data = NifFormat.Data()
    data.read(stream)
 
with open(file, 'wb') as stream:
    data._setVersion(0x4000002)
    data.write(stream)