NIF converter V1.07
-------------------

par Galadrielle le 29/02/2008

Bonjour, le but de ce petit programme est simplement de convertir des fichiers NIF
version 4.0.0.2 (Morrowind) vers la version 20.0.0.5 (Oblivion). Cela comprend
notamment la conversion des données de collision pour qu'elles soient compatibles avec
le moteur physique Havok. Il est aussi possible de convertir certains vêtements, une correction
étant appliquée pour que le vêtement colle parfaitement au squelette Oblivion.

Contenu de cette version:
------------------------

* NIF_conv.exe: le programme de conversion
* Morroblivion.ini: fichier texte qui contient les différents chemins d'accès
  pour les fichiers NIF: 
    - Morrowind: chemin d'accès au répertoire du jeu Morrowind
    - Oblivion: chemin d'accès au répertoire du jeu Oblivion
    - Master 0,1...: non utilisé par NIF Converter
    - Archive 0,1...: liste des fichiers BSA pouvant contenir le fichier NIF et/ou les textures
    - Mod 0,1...: non utilisé par NIF Converter
* bhktemp.nif: template utilisé pour la génération des données de collision.
* template_n.dds: template utilisé pour les normal maps associées aux textures.

Comment ça marche?
-----------------

Il y a plusieurs manières:

* On peut glisser/déposer (drag'n drop comme disent nos amis d'outre-manche) le fichier
  à convertir (ex: "maison.nif") sur le programme et laisser faire. Dans ce cas le fichier
  converti sera écrit dans le même répertoire avec le suffixe "_ob", les textures seront
  recherchées dans le répertoire "Textures" de Morrowind puis dans les fichiers BSA et copiées
  dans le répertoire "Textures" d'Oblivion.
* En ligne de commande: on peut ainsi donner un chemin relatif, par exemple "monMod\maison.nif",
  dans ce cas le fichier sera recherché dans le répertoire courant, puis dans "meshes\monMod"
  dans le répertoire "Data Files" de Morrowind puis dans les fichiers BSA définis dans le fichier
  "Morroblivion.ini". 
  On peut aussi ajouter des paramètres:
  "-m material": matière Havok de l'objet (sous forme numérique, ex: "-m 0" pour la pierre)
  "-l layer": layer oblivion pour indiquer le type d'objet lors de la gestion de collision
              (ex: "-l 5" pour les armes, c'est ce qui donne la couleur du mesh de collision
               dans NifSkope). La valeur 2 est associée aux portes, une animation de porte
               sera créée dans le NIF afin de pouvoir ouvrir et fermer les portes.
  "-s motion system": Havok Motion System (ex: "-s 7" pour MO_SYS_KEYFRAMED)
  "-q motion quality": Havok Motion Quality (ex: "-q 1" pour MO_QUAL_FIXED)
  "-d nom_du_fichier_destination": nouveau nom et chemin pour le fichier converti
  "-f": force le programme à ignorer les données de collision existantes et à les regénérer
        à partir du mesh de l'objet (utile pour certains objets complexes avec des modèles de
        collision trop simplifiés)
  "-c": force le programme à ne pas générer de données de collision.
  "-b": si l'objet est une arme elle sera rangée dans le dos du joueur ou des PNJ (back weapon).
  "-bp": pour convertir les vêtements et armures, identifie le mesh correspondant sur le squelette,
         suivi du fichier NIF à "skinner". il peut y avoir plusieurs paramètres "-bp", les mesh
         seront fusionnés en 1 seul fichier NIF.
			0 = Head
			1 = Hair
			2 = Neck
			3 = Cuirass
			4 = Groin
			5 = Skirt
			6 = Right Hand
			7 = Left Hand
			8 = Right Wrist
			9 = Left Wrist
			10 = Shield
			11 = Right Forearm
			12 = Left Forearm
			13 = Right Upper Arm
			14 = Left Upper Arm
			15 = Right Foot
			16 = Left Foot
			17 = Right Ankle
			18 = Left Ankle
			19 = Right Knee
			20 = Left Knee
			21 = Right Upper Leg
			22 = Left Upper Leg
			23 = Right Pauldron
			24 = Left Pauldron
			25 = Weapon
			26 = Tail
  "-cl": Dans le cas de la conversion d'un vêtement où d'une armure, sert à indiquer la partie
         du corps correspondante dans Oblivion:
         - 0: tête
         - 1: cheveux
         - 2: haut du corps
         - 3: bas du corps
         - 5: pieds

Par défaut les options sont celles des statics avec matériau bois.
Pour plus d'information sur les différentes valeurs je vous conseille d'essayer le programme NifSkope
et de lire la documentation associée, notamment celle sur le format des fichiers NIF.
         
Quelques exemples:

* conversion d'une arme en métal:
NIF_Conv dague.nif -m 5 -l 5 -s 4 -q 3

* conversion d'un static avec mesh de collision complet (ignore celui de Morro, souvent trop simple):
NIF_Conv mon_static.nif -f

* conversion du modèle "ex_cave_stoneyb00.nif" situé dans le répertoire "x\" du fichier Morrowind.bsa:
NIF_Conv x\ex_cave_stoneyb00.nif
A condition d'avoir inscrit le fichier Morrowind.bsa dans Morroblivion.ini, le fichier est lu dans le BSA
et converti en ex_cave_stoneyb00_ob.nif dans le répertoire de NIF_Conv.exe.

* conversion de la robe belle_robe_01.nif en nouvelleRobe.nif:
NIF_Conv belle_robe_01.nif -cl -d nouvelleRobe.nif

En mettant -cl, les autres options ne sont pas nécessaires et n'ont pas de sens car il n'y a pas de
collision sur un vêtement.
  
Toutes les textures sont copiées dans le répertoire "Data\Textures\morro" dans Oblivion. Seules
les textures au format DDS sont copiées, Oblivion n'acceptant pas les fichiers BMP ou TGA.

Problèmes connus:
----------------

La génération des données Havok reste imparfaite, de nombreux paramètres gardent une valeur par défaut
(notamment la masse), ce qui fait que le comportement de l'objet soumis à la gravité dans le jeu peut
ne pas être parfait.

Ce que ce programme sait faire:
------------------------------

Convertir les fichiers NIF simples sans animations, la plupart des objets statiques peuvent
donc être convertis. Les données de collision sont converties au format Havok, si le fichier NIF
contient un objet RootCollisionNode il sera converti, sinon ce sont les objets shape qui seront
utilisées. Si le NiNode global contient un NiStringExtraData contenant "NCO" ou "NCC", le fichier
converti contiendra des données de collision de type "NON COLLIDABLE".
Les vêtements peuvent être converti en ajoutant le paramètre "-cl" à condition qu'ils contiennent
un NiSkinInstance pour chaque NiTriShape.
Les textures utilisées sont simplement copiées si ce sont des fichier DDS. Les textures sont
d'abord recherchées dans le répertoire "Data Files\textures" puis dans le fichier BSA. Les noms
de fichiers sont convertis au format Oblivion (que des caractères et des chiffres).
Un fichier DDS contenant la normal map (suffixe "_n") est créé pour chaque texture.

Ce que ce programme ne sait pas faire:
-------------------------------------

Convertir les choses complexes comme les animations, les particules etc... Les fichiers
animés, les créatures... ne sont pas encore convertis


Dernière remarque:
-----------------

Vous utilisez ce programmes à vos risques et périls (même s'ils sont très limités ;o) ), je ne suis pas
responsable des dégats occasionnés par son utilisation.
Cependant en cas de problème, n'hésitez pas à m'écrire:

galadrielle.wiwiland@free.fr

Ce programme a été essayé sur la plupart des fichiers NIF de Morrowind, sans rencontrer de problèmes majeurs
à part les limitations citées plus haut.

Have Fun!


Historique des versions
-----------------------

V1.07
* Amélioration de la conversion des vêtements, ajout de la conversion des armures.

V1.06
* Ajout de la conversion des vêtements. Seul les vêtements avec NiSkinInstance seront convertis comme ceux de BetterClothes
par exemple, la plupart des vêtements de Morrowind ne peuvent être convertis (à l'exception des robes).

V1.05
* Si le fichier contient la chaine de caractères "NCO" il n'y aura pas de collision (comme pour les plantes ou les
tapisseries par exemple).
* Correction de bugs au niveau des données de collision.

V1.04
* Correction des données Havok, le centre d'inertie est positionné au centre de l'objet.
* ajout du paramètre BackWeapon.

V1.03
* Correction bug qui se produit lorsqu'un NIF ne possède pas de NiNode racine, il y a une corruption de données,
  la collision ne marche pas (ex: les caisses de Morrowind).

V1.02
* on peut ajouter des paramètres et régler ainsi certaines choses au niveau de Havok comme la matière,
  le layer Oblivion... Il est ainsi possible de convertir correctement les armes et objets divers.
* Pour les objets qui peuvent être manipulés (portes, armes... dépend du layer oblivion) et sur lesquels
  la physique entre en jeu, les données de collision sont générées sous forme de boites (bhkBoxShape).
* ajout d'une animation pour les portes (option -l 2)

V1.01
* ajout des données de collision de type "nonCollidable", pour les objets sans collision
* ajout d'un NiNode pour les fichiers qui n'en avaient pas
* correction d'un bug dans la génération de la table des noms d'objets (entête)

V1.00
* première version
