Salut, Armand!
Ca bosse dur, on dirait ^^
Alors, commençons,
tous ces WRITE fonctionnent de la même manière, tu les utilises selon la taille de ce que tu as envie d'écrire dans le fichier cre. Soit:
WRITE_BYTE pour une information d'un octet (8bits)
WRITE_SHORT pour un word (16bits)
WRITE_LONG pour un dword (64bits)
WRITE_ASCII pour ce qui est plus long et composé de lettres (128bits si on ne précise pas la taille de la donnée soit 8 caractères (d'où la règle d'or de Cool dans les noms de d, baf et j'en passe...))
Leur fonctionnement général est le suivant:
WRITE_MACHIN adresse donnée
Dans un fichier, chaque information possède une adresse. Cette adresse peut s'écrire en hexadécimal, en décimal ou même en binaire du moment qu'on précise quelle "unité" on utilise.
0x0010 = 0d0016 = 0b00010000
hexadécimal décimal binaire
Ensuite la donnée que tu écris par-dessus ne doit pas être plus volumineuse que ce que tu peux en caser et doit être cohérente avec ce qu'attend le fichier à l'adresse où tu écris. (Donc pas de lettres pour l'adresse des PV par exemple)
Ensuite, passons aux effects. Tu souhaites certainement savoir comment on utilise les deux offsets que tu as cité 0x2c4 et 0x2c8. OK, tu l'auras voulu, planquez-vous, le code arrive!
Surtout, pas de panique. Je ne sais pas si tu as l'habitude de flirter avec un code pareil mais en sortant de ce topic, tu l'auras compris (si je suis pas trop flou ou à moins que tu ne saches déjà de quoi il s'agit).
Il faut savoir qu'ajouter des effects à une créature n'est pas sans conséquences sur le fichier. En effet, les offsets sont tout bouleversés lorsqu'on rajoute des données en plein milieu des autres.
Donc lorsque l'on rajoute un effect à une créature, certaines autres adresses doivent être mises à jour. Tu remarqueras que j'ai séparé le code en trois parties.
1ere partie: Récolte des données
On doit savoir ce qu'on modifie et pour cela, on doit aller chercher ces infos dans le fichier en lui-même. La commande READ est exactement l'inverse de WRITE:
On stocke une info trouvé à l'adresse indiquée dans une variable.
Ici, on a besoin de modifier les données correspondant à l'offset des items, des slots des items, des sorts connus, des sorts mémorisés, des sorts qu'on peut mémoriser et... de l'offset des effets ainsi que du nombre d'effets que possède déjà la créature.
2e partie: Ajout de l'effet
Alors comment l'ajouter?
Un effect de créature fait une taille de 0x108 hexadécimal bits donc on doit insérer un espace de cette taille dans l'offset des effects car l'offset des effects a pour rôle d'informer au jeu que toutes les données après lui sont des effects. INSERT_BYTES est parfait pour ça.
Ensuite on remplit cet espace vide par les paramètres de l'effect: en commentaire sur l'image.
De cette manière, si on veut modifier le THAC0 de la créature on commence par:
WRITE_LONG ("%offset_effet%" + 0x08) 54
Explications: 0x08 est l'adresse du type d'effect voulu dans l'effect lui-même qui possède l'adresse indiquée par %offset_effet%, l'opcode comme on l'appelle. 54 correspond à l'opcode du même numéro à savoir "THAC0 Modifier".
Les autres paramètres sont écris avec le même principe. L'effect a une adresse et le paramètre 1 de cet effect a une adresse dans l'effect. On va donc écrire dans le trou qu'on a fait tout ce qu'il faut pour obtenir un vrai effect.
3e partie: Mise à jour de la créature
Bien, on a notre effect. On doit maintenant rendre cohérent notre fichier en l'actualisant.
L'action première constituant cette étape est de réécrire le nombre d'effect que possède la créature car maintenant, elle en possède un de plus.
WRITE_LONG 0x2c8 ("%nombre_effet%" + 1)
Chose faite. Et maintenant, on doit décaler toutes les adresses étant après ce changement du nombre de bits qu'on a ajouté car toutes les données après l'ajout de l'effect se sont vues décalées de 0x108. Donc la condition est: si l'adresse à changer est après l'offset des effects, alors augmenter ces adresses de la taille de l'effect.
Ce qui donne le PATCH_IF NOT ("%offset_effet%" > "%offset_divers%")
C'est la condition. Puis augmenter l'adresse de la taille de l'effect soit 0x108.
Je sens que j'ai étalé un brouillard. Si tu le traverses, tant mieux mais si toi ou quiconque a des questions sur mon baratin, n'hésitez pas, ce n'est pas évident.