Aller au contenu


Gros Mod, Petit Mod, Comment S'y Prendre ?


  • Veuillez vous connecter pour répondre
2 réponses à ce sujet

#1 Mike89

Mike89

    Encyclopedia Univerwikissssss


Posté 01 janvier 2009 - 09:43

Un sujet pour décrire comment s'y prendre avec la quincaillerie offerte par le TESCS et d'autres outils.
Je sais certaines choses, mais votre expérience, contestataire ou non est la bienvenue. Cela permettra de rendre plus clair ce que j'ai cru comprendre sur les forums anglo-saxons.

Alors on commence. Je wiwikiserai et schématiserai au fur et à mesure (ou quelqu'un d'autre). Je mets des N° pour vous y référer ensuite dans la discussion.

0) Préambule - Pour moi, il n'y a pas de gros mod et de petits mods. Il y a juste des mods compliqués et d'autres qui le sont moins.
Compliqués, parce qu'il y a beaucoup de types d'objets et de références en relation, liés par des FormID, mais aussi à cause des limitations du TESCS. Certaines limitations ont disparu, d'autres sont apparues avec les versions successives (c'est pour cela que je m'y perds un peu). Certains tutos, sites, conseils anciens sur les forums et wikis (pas que sur Wiwiland) ne sont pas à jour des dernières techniques et limitations ou nouveautés.

Plan :
1) Oblivion.exe, le maître de la "base de donnée"
2) Oblivion.esm, le mod maître d'origine
3) Mod esp dépendant
4) Mod esp indépendant
5) Mod lié à d'autres mods qu'Oblivion.esm
6) Mod esp ou esm, comment choisir ?

1) Oblivion.exe

Vous l'auriez oublié celui là... En fait cela n'intéresse normalement que les experts de "moder" ce qu'il contient. Mais cela vous aidera à comprendre le reste... moder avec les outils légaux, cela va de soit.

Oblivion.exe est le vrai seigneur de tout Oblivion. Le créateur !
Il contient le moteur de jeu propre à Bethesda, mais aussi d'autres moteurs "middleware", le moteur graphique, le moteur physique, son etc... Ce sont les Gamebryo, Havok, Speetree, Facegen sur la boite. Bethesda est lié aux propriétaires de ces "middlewares" par une licence pour un jeu (Oblivion)... et ne doit par fournir à d'autres "utilisateurs" le moyen de tourner cette licence "limitée" pour publier "librement" leurs propres jeux en utilisant des middlewares sur lesquels ils n'ont aucun droit. D'où les limitations du TESCS.

Pour ce qui nous concerne : utilité et limites d'Oblivion.exe (et de son launcher, du TESCS, et du chargeur du TESCS).
Incontournable. C'est lui qui fournit la structure qui permet de faire des mods :
* une structure de base de données.
* des règles d'indexation des Mods et des Records
* des règles d'interclassement des mods.
* un embryon de base de donnée.

1.1) Structure de Base de donnée

Oblivion.exe (et aussi le TESCS) valide la structure des mods. Les MODS sont organisés en base de donnée.

La base de donnée contient des RECORDS et une structure.
Les RECORDS ont une structure (description des champs contenus, une entête et des subrecords)
Les RECORDS parmi leurs champs contiennent des clés étrangères, c'est à dire l'indication d'une relation avec un autre RECORD.
Par exemple : un PNJ à une référence dans le monde. Cette référence contiendra dans son record le FormID de son PNJ de base. Cela permet à l'EXE lorqu'il traite cette référence d'aller chercher les données dont il a besoin (race, script, faction, item...). Le PNJ de base contient les formID de la race, du script (s'il en a un), des factions, des items de son inventaire... etc... Un clé externe peut être obligatoire ou optionnelle.

Un record contient une Entête (qui détermine le FormID et le TYPE de sa structure en SUBRECORDS). L'entête est suivie des subrecords. Le formID est l'identifiant unique du record (6 caractères hexa pour l'unicité dans le fichier, + 2 devant pour l'index de chargement du fichier. Un record correspond à un formulaire (une fenêtre de saisie) du tescs, en général. Mais il existe des Records qui n'ont pas de fenêtre de saisie, et sont le résultat de procédures complexes (par exemple les "LAND").

Un Subrecord est un champ saisissable dans le TESCS, par exemple l'EditorID), ou de simples données, comme le Name. Certains subrecords sont des clés étrangères pour exprimer les liens avec d'autres RECORDs (relations entre entités ou objets de base ou entre références). Ces clés peuvent être modifiables, comme la classe ou la race d'un PNJ. D'autres sont implicites et non saisissables, une fois le RECORD CREE... Par exemple pour une Référence le Worldspace, ou la cellule intérieure où vous avez posé votre objet... Une référence est un RECORD de type REFR.

Pour en savoir plus, furetez dans un esp, par exemple avec TES4Gecko... ou avec le bouton Détail au chargement dans le TESCS  

Exemples de types de Records :
* Objets de base : ACTI, AMMO, APPA, ARMO, BOOK, CLAS, CLOT, CONT, ITEM, NPC_, etc.
* Autres : CELL (intérieure), CLMT (Climat), WRLD (Worldspace)
Je n'entre pas plus en détail sur la structure de classement des RECORDS... sachez qu'un RECORD complexe comme un WORLDSPACE contient :
- ses propres subrecords (par exemple : EDID (EditorID), FULL (nom complet), ICON (sa carte)...)
- suivis par un bloc Wordspace, qui contient la liste cellules (CELL), chacune elle-même suivie par les blocs de Reférences (REFR) qu'elles contiennent.

1.2) Les règles d'Indexation des MODS et des RECORDS

Cherchez pas les deux chiffres de l'index d'un record dans un mod avant leur chargement... tout est à FF.
Ce qui est important est de savoir si le mod est indépendant ou non, puis de connaitre le rang de chargement du mod.

Pour déterminer le rang du mod (uniquement ceux sélectionnés), en commençant par 00 :
* Tous les records des ESM d'abord, dans l'ordre de leur date de modification, plus anciens d'abord.
* Tous les records des ESP ensuite, dans l'ordre de leur date de modification, plus anciens d'abord.
Pour l'index de chaque record (qui viendra à la place de FF) :
* si le mod est indépendant : tous les records ont pour index devant le formID la valeur du rang du mod
* si le mod est dépendant (d'un esm ou d'un esp, ou de plusieurs esm ou esp)... voir ci après...

Un mod dépendant contient une table des mods maitres avec leur nom de fichier (qu'ils soient esp ou esm...)
L'ordre est important... dans cette table, le premier maître avant chargement est le 00, le deuxième le 01...
Pour qu'un mod dépendant puisse être chargé, il faut que ses maîtres soient déja chargés, sinon plouf ! (Voir ordre de chargement). Si c'est le cas, pour chaque record :
* S'il dépend de 00... il prend pour Index le VRAI rang du mod 00
* S'il dépend de 01... il prend pour Index le VRAI rang du mod 01, etc.
* Si le record ne dépend pas d'un master (un vrai FF), il prend pour Index le rang de son mod.

Explications :

* les records non dépendants dans un "mod dépendant" sont des ajouts, des créations, des NEW...
* les records dépendants dans un "mod dépendant" sont des suppressions ou des modifications de records de leur maîtres respectifs. On rend donc ainsi à César ce qui est à César...
* Un mod indépendant n'a que des NEW (ou des modifs de records inférieurs à 800).

1.3) Les règles d'interclassement

Ce sont ces règles qu'applique le Launcher (lanceur) d'Oblivion, et aussi le TESCS au chargement de la liste de mods. A quelques petites variantes près.
* Exemple : Le lanceur charge toujours Oblivion.esm (cela n'a pas toujours été vrai :mrgreen:  ), pas le TESCS.

Les règles d'interclassement : (déja vu, mais cela ne coûte pas de le répéter)
* Tous les records des ESM d'abord, dans l'ordre de leur date de modification, plus anciens d'abord.
* Tous les records des ESP ensuite, dans l'ordre de leur date de modification, plus anciens d'abord.

Au moment d'être entré en mémoire chaque FormID est comparé à ce qui est déja en mémoire :
* le formid n'y est pas encore >>> ET c'est un indépendant le record est chargé en entier.
* le formid n'y est pas encore >>> ET c'est un dépendant ... PLOUF... y a un formid non corresponding... me souviens plus du message du TESCS... et ON JETTE si c'est dans le jeu. Cela vous apprendra à bricoler les master... ou a croire qu'il suffit de moder un esp sur un esp.
* le formid y est déja... et le petit nouveau est dépendant : selon le cas cela supprime (info D) ou remplace le record existant du master
* le formid y est déja... et le petit nouveau est un indépendant : cela n'arrive jamais, puisque un indépendant reçoit un index (rang) rien qu'à lui. Et c'est une explication des objets duplicates un mod dépendant rendu sauvagement indépendant. Ils ont un formid différent mais des EditorID identiques, sauf bidouille des EditorID.

Et puis il y a le cas des autres EditorID en double... cela vient de l'indépendance de la modification des mods dans le TESCS... Cloner un mod indépendant d'un coté... sans changer les EditorID. Et sélectionner les deux mods au chargement.

1.4) Un embryon de base de donnée

Oblivion.exe définit des RECORDS Hardcodé (en fait prédéfinis dans l'exécutable... il y a rien de hard là dedans). Ce sont les objets déja dans le TESCS avant chargement d'un mod.
Ce sont des RECORDS auquels sont attachés des petits morceaux d'AI, des sortes de scripts internes qui servent de briques de base aux mods et à l'AI paramétrable par les mods.
Ces Records sont bien reconnaissables car leur FormID est inférieur à 800.
Un mod ne peut AJOUTER des RECORDS qu'à partir de xx000800. Les records < 800 existent dans tous les mods.
Un mod peut MODIFIER (pas créer, ni supprimer...) les RECORDS inférieurs à 00000800. Enfin, en principe. Qu'advient-il des modifs faites par un mod :
* Parfois, l'exe en tient compte... données modifiables, paramètrable, par exemble les Magic Effects.
* Parfois, l'exe les jette, on n'arrive à rien en tirer... quoi qu'on saisisse. Oblivion.esm, qui s'installe en position 00, semble avoir quelques privilèges dans ce domaine.

Exemples de records de l'exe :

- Un "acteur"
Le player... forcément il est hardcodé en grande partie, pas un PNJ de bas étage çà : 1ère et troisième personne. Et obeït au clavier et à la souris. Et au maître du clavier et de la souris (Hem... le sage montre la lune, l'imbécile regarde le doigt  :peur: )... pas possible d'avoir plusieurs players en réseau (pas prévu... pas de moteur réseau dans Oblivion, avec des IP affectées à une liste de players)...

- Des Items :
Les trois habits de prisonnier, l'or, les crochets, les marteaux... parce qu'ils font l'objet de procédures automatiques en interraction avec le PNJ : commerce, déverrouillage, réparation. Idem pour les pierres de recharge de magie. Si vous duppliquez ces objets de base, leur copie ne fonctionne pas. Leurs références, si.

- Des sons de base, des effects shaders, l'eau de base
Il y a des sons de base hardcodés, sans WAW ni MP3.

- Deux Containers et une porte :
Lootbag et StolenGoods, PrisonMarker,  container des objets volés quand le joueur va en prison, lieu de sortie de prison.

- Des Statics :
Divers markers, les flammenodes... Si vous dupliquez le Mapmarker (00000010), il aura un formid dans votre mod, par exemple 01000804, mais ne fonctionnera pas comme un mapmarker... Il faut créer des références de Mapmarker qui fonctionneront comme leur objet de base 00000010.

Je signale aussi des briques de base fondamentales que sont :

- les animations (animgroup) précodés dans la fenêtre du player, prototypes de toutes les animations pour les déplacements de tous les acteurs, et qui renvoient aux KF correspondants ;
- les Magics effects, briques de base de toute la magie ;
- le monde prototype : climat par défaut, weather par défaut, worldspace Tamriel (0000003C).
- la fabrique de personnages : yeux par défaut, race par défaut (vampire, mais on ne peut pas en faire grand-chose)... et surtout les SKILLS... on ne peut pas en créer de nouveaux dans un mod, ils ne fonctionneraient pas.
- les Topics GREETING, HELLO, GOODBYE... etc... liés aussi à des procédures...

Dans toutes ces listes hardcodées, il faut savoir si on peut les modifier... et en ajouter (avec un ID > 800)... et ensuite savoir si ces nouveaux RECORDS sont aussi opérationnels que les hardcodés... Pour le savoir, cela fait beaucoup et tests et encore plus de boulot pour écrire la doc... Et à la prochaine version du TESCS on reteste tout pour refaire la doc !

2) Oblivion.esm, un mod maître   

Tout a été dit ou presque avant, si vous savez lire entre les lignes.
Oblivion.esm, chargé au rang 00 (normal s'il est le seul ESM... on verra après si ce n'est pas le cas). Qu'il soit le seul esm était sans doute ce qui était prévu par Bethesda, puisque le TESCS ne permet pas d'en créer.
Oblivion.esm a deux rôles :
* modifie, complète les éléments hardcodés. Il semble que certaines choses ne puisent être modifiées que par le mod chargé en 00... donc Oblivion.esm. Pour d'autres le dernier mod chargé a raison. Heureusement pour le PNOO (dites-moi si je me trompe).
* Crée tous les autres records du jeu d'origine, plus ceux patchés par les addons officiels... par exemple les wordspaces de SI... et si BETH a fait comme çà, cela promet des problèmes pour des wordspaces pas en index 00 !

Remarque : Il y a deux FormID indispensables au bon démarrage du jeu qui appartiennent au mod chargé en 00 (en principe Oblivion.esm)... voir Oblivion.ini
* 0002466E, qui doit être une quête, la ChargenQuest... celle qui lance la génération du PJ et la quête principale lors d'une nouvelle partie. Vous pouvez modifier ChargenQuest, pas la supprimer.
* 2AEEA (comprendre 0002AEEA), qui doit être une cellule intérieure. Il s'agit du hall de l'hotel Tiber Septim, cellule de sauvetage du PNJ si sa localisation dans la sauvegarde utilisée est inconnue (ou n'est pas une cellule) dans le magma de mods que vous avez chargé. Si la cellule 0002AEEA n'existe pas, le jeu se plante. Vous pouvez modifier le Hall, pas le supprimer !

3) ESP DEPENDANT d'Oblivion.esm.

Deux cas de complexité croissante.

3.1) Que des ajouts

Vous faites comme il a été toujours dit pour rester dans les sentiers battus.
* Vous chargez Oblivion.esm
* vous  créez, mais modifiez ou supprimez que ce que vous avez créé...
* vous créez avec vos propres tranches d'EditorID en choisissant des préfixes "BienàVOUS", et éviter les DUPLICATES
* vous ne changez pas de NIF (si vous n'y connaissez rien , c'est plus prudent)
* vous sauvegardez sous un nom B.esp
* vous quittez, rechargez B.esp... Oblivion.esm se charge tout seul.
* si vous avez chargé votre mod en ACTIF, vous pouvez reprendre votre travail.
* etc.
* vous testez dans le jeu après avoir coché votre fichier...

Et normalement tout va à peu près bien. Votre objectif : Oblivion marche comme avant, mais vous ajoutez des pnj, des quêtes, des dialogues... Que du plus !

3.2) Toutes les "améliorations" possibles
Vous ajoutez, modifiez, supprimez ... si vous débutez, vous pensez que cela va améliorer Oblivion.

* vous supprimez des éléments d'Oblivion (ceux dont le FormID commence par 00).
* vous modifiez des éléments d'Oblivion...
* vous modifiez des éléments hardcodé (inférieurs à 00000800)...

Si vous  supprimez des "objets" Oblivion (00), ce sont des RECORDS QUI DISPARAISSENT, liés éventuellement à d'autres records, qui disparaitront aussi..
Par exemple : je supprime le PNJ Jean, or le PNJ  Paul a un package qui lui dit de se rendre près de Jean...
Vous avez cru pouvoir rosser plus facilement Paul sans son copain Jean... Et bien Paul ne viendra pas.
Même chose si vous avez supprimé un Xmarker, lieu où doit se rendre Paul.
En supprimant JEAN, vous avez supprimé un package de PAUL.
Le TESCS vous préviens si ce que vous supprimez a des "références"... Utilisez aussi le clic droit - Use Info pour savoir a quoi est lié un objet. Pour les objets de base, les colonnes Count (nb de ref), et Users (nb de clés étrangères pointant vers l'objet de base) sont aussi de bons indicateurs.

Mais cela arrivera sans avertissement si vous ajoutez un mod pas a vous qui supprime Jean... çà marche plus. Paul ne viens plus. Problèmes de compatibilité de mods.

Donc en fait dans ces mods à un seul esp, deux catégories :
* Ceux qui ajoutent seulement des choses
* Ceux qui modifient ou suppriment des choses

Mais même s'il n'y a que des ajouts : le truc ajouté peut gêner le passage (voir path grid). Des PNJ seront bloqués... ou s'inserrer au même endroit qu'un autre mod.

4) ESP INDEPENDANT d'Oblivion.esm.

C'est le cas extrème, inverse du précédent.
Vous ne chargez que lui dans le TESCS, même pas Oblivion.esm. Dans le jeu vous chargez ce que vous voulez...

4.1) Avantages-Inconvénients

Vous ne risquez pas de supprimer ou modifier quoi que ce soit d'Oblivion.
Vous pouvez créer vos propres tranches d'EditorID en choisissant des préfixes "BienàVOUS", et éviter ainsi les DUPLICATES
Mais vous ne pouvez rien placer dans Tamriel parce que, pour votre mod, c'est un monde vide, sans cellules, et si vous créez des cellules dans Tamriel, elles seront en conflit avec celles d'Oblivion.esm

Vous pouvez avoir des problèmes avec les hardcodés inférieurs à 00000800. Il existent, mais il va manquer des infos... comme les sounds hardcodés, les anims KF, les furnituremarkers... etc, qui sont paramètrés par Oblivion.esm. Deux atitudes face à celà, on y reviendra (On ignore (1), ou on fait un petit esp de travail, copie d'Oblivion avec uniquement les hardcodés (2), que l'on charge dans le TESCS, mais pas dans le jeu, parce que dans le jeu pas de pb, Oblivion est là).

Vous faites donc votre "Monde", votre terrain, vos objets avec vos propres NIF et DDS ou en décompressant les Meshes d'Oblivion pour pouvoir les sélectionner avec les boutons NIF.

Quel intérêt ?
* pas de conflit dans le jeu avec d'autres mods liés à Oblivion.esm.
* créer un monde différent, sans charger le master Oblivion, donc plus facile si vous manquez de mémoire et puissance ordinateur.

4.2) Comment s'y rendre si c'est indépendant ?

Pour vous y rendre :
* un anneau ou machin de téléportation, que votre mod ajoute à l'inventaire du player (très utile pour les tests) ;
* ou un mod lié à Oblivion.esm et à votre mod qui met en scène dans Tamriel "une porte dans la muraille qui ferme un col" ou "la porte d'un tunnel", ou permet de "prendre le bateau...",  ou "on assomme le PJ..."  et permet de teleporter le PJ et ce que vous voulez avec lui.

5) Mon esp lié à deux autres mods dont Oblivion.esm

L'exemple de mod précédent pour communiquer entre deux mondes montre une des utilités d'un mod lié à deux autres mods (esm ou esp)... le transfert entre mondes indépendants.

Cela permet aussi la mise en commun de ressources de deux mods fournisseurs de ressources (Oblivion.esm + un esp contenant des dialogues à traduire...). Le mod de traduction sera lié aux deux. Sinon il faut modifier directement le mod à traduire.

Un exemple pour illustrer çà : Personnage qui disparait.

(A suivre)

6) ESP ou ESM, quel intérêt, quels outils ?

(A suivre)

Je compléterai bientôt...
Un mod en construction pour Oblivion : L'archipel d'Angamandon !   (mais il est un peu en sommeil)...
On en parle aussi sur ce forum de  Wiwiland  : [mod complet] Archipel d'Angamandon

#2 Inuneko

Inuneko

Posté 01 janvier 2009 - 15:00

Cool. Merci beaucoup pour toutes ces infos Mike.
Vachement utile.


Merci merci.

#3 Cogite Stibon

Cogite Stibon

    Théoriquement moddeur


Posté 02 janvier 2009 - 15:05

Bonjour,

Voici quelques schémas pour illustrer et compléter les explications de Mike89:

Dans un fichier de mod (exp ou esm), chaque record a un FormId, qui doit absolument être unique. Les 6 derniers chiffres (en bleu) sont unique dans le fichier (c'est à dire que deux record au sein du même fichier ne peuvent pas avoir les même 6 derniers chiffres de FormId). Les 2 premiers chiffres sont toujours à "FF" quand le mod n'est pas chargé dans le TESCS ou dans le jeu.
Quand un record a besoin de faire référence à un autre record (par exemple, pour dire qu'un objet à tel PNJ comme propriétaire), il utilise le FormID de ce record dans une clé étrangère.
http://img523.imageshack.us/img523/3811/formid01qs7.th.gif

Les Foms Id doivent être uniques pas seulement au sein du même mod, mais aussi pour tous les fichiers chargés dans le jeu ou le TESCS. C'est à sa que servent les 2 premiers chiffres du FormID. Quand le jeu ou le TESCS chargent les fichiers, ils re-numérotent automatiquement tous les FormId en remplaçant ces 2 premiers chiffres par le rang de chargement du mod. Donc le "vrai" FormId n'est jamais le même
http://img209.imageshack.us/img209/8646/formid02hk0.th.gif


Quand un mod doit dépendre d'un autre, il indique la liste des mods dont il dépend avec un numéro d'ordre. Et dans les clefs étrangères, il utilise ce numéro d'ordre pour les deux premiers chiffres.
http://img525.imageshack.us/img525/77/formid03qq8.th.gif

Au chargement, le jeu ou le TESCS renumérotent également ces clefs étrangères en fonction de l'ordre de chargement réel des fichiers maitres.
http://img525.imageshack.us/img525/4261/formid04oc6.th.gif

Tout droit vers le non-linéaire !
It's not the engine, it's the writing.
HERMA MORA ALTADOON AE





0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)