Oyez, oyez !

Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !

Merci à toutes et à tous pour votre participation !

N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...

Vocabulaire technique : que signifie "offset" ?

Regroupe tous les sujets sur les commandes, les fonctions, les routines, les modifications des fichiers systèmes (ids, 2da...)...
Répondre
Avatar du membre
DrAzTiK
Ours des cavernes
Messages : 1109
Enregistré le : ven. 19 sept. 2003, 03:20
Localisation : Bordeaux
Contact :
Statut : Hors ligne

Vocabulaire technique : que signifie "offset" ?

.

Message 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
Faites comme moi, jouez FP :cool:

Mon Mod : BuTcHeRY

Ma châine Youtube
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message 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.
Avatar du membre
DrAzTiK
Ours des cavernes
Messages : 1109
Enregistré le : ven. 19 sept. 2003, 03:20
Localisation : Bordeaux
Contact :
Statut : Hors ligne
.

Message 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 ?
Faites comme moi, jouez FP :cool:

Mon Mod : BuTcHeRY

Ma châine Youtube
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message 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.
Répondre

Retourner vers « Programmation WeiDU »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité