Page 1 sur 1

Vocabulaire technique : que signifie "offset" ?

Posté : jeu. 10 déc. 2009, 08:46
par DrAzTiK
J'aurai une ou 2 petites questions techniques en passant. J'entends souvent parler des offsets dans les forums de modding. Par contre pas moyen de trouver un tutorial (même sur les sites anglo-saxons) me renseignant sur la définition de ces choses lol.

Qu'est ce donc ??

J'ai aussi l'impression que la commande WRITE_ASCII est associé à la manipulation des offsets. Est ce que quelqu'un pourrait m'éclairer sur ça ?


merci

Re : vocabulaire technique :

Posté : jeu. 10 déc. 2009, 21:10
par Isaya
Un offset correspond au décalage par rapport au début du fichier, qui constitue l'offset 0.

Dans Near Infinity, il existe l'option du le menu Options, Show Hex Offsets, qui permet de lui demander d'afficher l'offset de chaque information quand tu es sur l'onglet Edit d'un objet, d'un sort, ... C'est le moyen le plus simple de déterminer quel est l'offset qu'il faut utiliser dans le fichier TP2 pour le patch, que ce soit avec WRITE_ASCII (pour écrire un texte, par exemple un nom de fichier ressource sur 8 caractères) ou les WRITE_LONG ou autres (selon la taille du paramètre, 4, 2 ou 1 octets) pour écrire des nombres.

Re : vocabulaire technique :

Posté : ven. 11 déc. 2009, 04:42
par DrAzTiK
Un offset correspond au décalage par rapport au début du fichier, qui constitue l'offset 0.
heuu je comprends rien lol. Un décalage ?

Ce que je crois comprendre, c'est que les offsets permettent de patcher certains éléments du jeux ( à priori presque tous les éléments du jeux) et que çela se fait avec la commande WRITE_ASCII dans le tp2 ?

Si c'est le cas, est ce que tu pourrais me donner un exemple Isaya ?

Re : vocabulaire technique :

Posté : ven. 11 déc. 2009, 19:00
par Isaya
J'aimerais que tu prennes le temps de lancer Near Infinity et d'appliquer ce que je t'ai indiqué en observant ce que ça donne avec un fichier quelconque. C'est le meilleur moyen de comprendre. Si ce n'est toujours pas clair, précise ce que tu ne comprends pas.

Prends par exemple un fichier CRE. Le paramètre Name est à l'offset 8. C'est le numéro du texte qui contient le nom du personnage dans le fichier dialog.tlk. Pour des choses aussi courantes que le nom (du personnage, de l'objet, ...), WeiDU a des "constantes nommées" qui remplacent la valeur de l'offset pour le rendre plus lisible. Ici, il s'agit de "NAME1" et "NAME2" (pour le "Apparent name").
Ce qui fait qu'un tutoriel de PNJ indique :
COPY ~monmod\cre\blabla.cre~ ~Override\blabla.cre~
SAY NAME1 ~Mon nom de personnage~
SAY NAME2 ~Mon nom de personnage~
SAY BIO ~Blabla, son histoire~
Si tu veux t'amuser à modifier la valeur d'expérience pour le tuer, il suffit d'ajouter :
WRITE_LONG 0x14 1000
pour fixer la valeur à 1000 XP. Le WRITE_LONG est utilisé (et non WRITE_BYTE ou WRITE_SHORT) car la valeur d'expérience est sur 32 bits, ce que montre d'ailleurs l'écart d'un offset au suivant : celui de "XP value" est 14h, le suivant est à 18h, soit 4 octets, donc 32 bits (un octet fait 8 bits). Le "0x" qui précède 14 est le moyen d'indiquer à WeiDU que la valeur est exprimée en hexadécimal. De son côté, Near Infinity utilise aussi la notation hexadécimale pour l'affichage des offsets mais l'indique par le suffixe "h".

Pour information, la calculatrice de Windows, une fois basculée en mode scientifique par un des menus, permet de faire les conversions entre hexadécimal et décimal, et vice-versa.

WRITE_SHORT s'utilise pour des mots de 16 bits (deux octets), par exemple Current HP et Max HP (séparé de seulement 2 en offset par rapport au champ suivant de la structure) et WRITE_BYTE correspond à 1 octet. WRITE_ASCII permet d'écrire une chaine de caractère, par exemple le nom d'un fichier de ressource (type doublage sonore, image BAM, script de comportement, ...), qui est la plupart du temps strictement limité à 8 caractères maximum.
Par exemple :
WRITE_ASCII 0x268 ~WTASIGHT~
modifierait le script par défaut d'un personnage pour lui donner le script qui fait attaquer le premier ennemi en vue.