Page 1 sur 1

[WeiDU] STRING_EQUAL_CASE. Ca sert à quoi ?

Posté : sam. 19 oct. 2013, 18:50
par DrAzTiK
Salut :)


J'ai un ancien mod sous la main qui modifie les portraits des pnj. Il utilise toujours ce même bloc pour chaque cre :

Code : Tout sélectionner

//AATAQAH=Aataqah
COPY ~BG2CPM/portraits/creatures/BKgeni1.bmp~  ~portraits~

COPY_EXISTING ~AATAQAH.cre~ ~Override~

  READ_ASCII 0x34 ~smp~ //Small portrait

  PATCH_IF ((~%smp%~ STRING_EQUAL ~~) OR (~%smp%~ STRING_EQUAL_CASE ~none~)) BEGIN
    WRITE_ASCII 0x34 ~BKgeni1~ #8
  END

BUT_ONLY_IF_IT_CHANGES
Je ne comprends pas trop le fonctionnement des 3 lignes suivantes :

1- READ_ASCII 0x34 ~smp~ //Small portrait
2- PATCH_IF ((~%smp%~ STRING_EQUAL ~~) OR (~%smp%~ STRING_EQUAL_CASE ~none~)) BEGIN
3- WRITE_ASCII 0x34 ~BKgeni1~ #8

Je pense que weidu cherche à vérifier s'il n'y a pas déjà un portrait en place mais je vois pas trop comment. Quelle est la différence entre STRING_EQUAL et STRING_EQUAL_CASE ?
La documentation de weidu , c'est du chinois pour moi :gign:

Posté : sam. 19 oct. 2013, 21:06
par Isaya
DrAzTiK a écrit :La documentation de weidu , c'est du chinois pour moi :gign:
C'est dommage de la considérer en bloc comme compliquée parce que dans ce cas précis, elle est plutôt explicite : ;)
String STRING_EQUAL_CASE String : As STRING_EQUAL, but the comparison ignores case. That is, "ANOMEN" and "aNoMeN" are considered equal.
STRING_EQUAL_CASE fait une comparaison de chaines de caractères en ignorant les différences entre minuscules et majuscules, contrairement à STRING_EQUAL, de sorte qu'elle considère que "ANOMEN" et "aNoMeN" sont identiques.

Quant à savoir pourquoi le mod considère que le nom NONE ou none indiqué comme portrait signifie qu'il n'y en a pas, mystère.

Autrement le mod lit le nom de fichier actuellement indiqué pour le portrait du personnage (l'offset 0x34 correspond au portrait de petite taille dans la structure CRE, cf IESDP), le compare à une chaine vide ou à none/NONE/None/etc. et si l'une des deux comparaisons indique qu'il n'y a pas de portrait, elle écrit le nom de fichier que, je suppose, le mod prévoit d'attribuer à la créature. Le #8 à la fin du write précise à WeiDU d'écrire exactement 8 caractères, soit en comblant par des valeurs 0 (valeur de BYTE et non pas le caractère 0) si le nom indiqué en comporte moins, soit en tronquant à 8 si le nom indiqué s'avérait trop long. C'est une précaution pour s'assurer de ne pas déborder sur la suite de la structure à cause d'un mauvais nom. Ce n'est peut-être pas indispensable ici puisque le nom est indiqué directement mais ça peut servir pour de la manipulation via une variable où on ne peut pas présumer qu'elle ne débordera pas.

Posté : sam. 19 oct. 2013, 22:02
par Freddy_Gwendo
Isaya a écrit :Quant à savoir pourquoi le mod considère que le nom NONE ou none indiqué comme portrait signifie qu'il n'y en a pas, mystère.
J'imagine que c'est un test pour éviter les erreurs de codage dans les créatures vanilla (ce mod est assez vieux). Par exemple, certains champs des variables de dialogue et de scripts dans les créatures ont la valeur "NONE". Peut-être l'auteur a-t-il voulu rajouter ce contrôle pour être certain de pouvoir rajouter son portrait...

Posté : dim. 20 oct. 2013, 04:29
par DrAzTiK
ha merçi, je comprends mieux, c'est ce mot "case" qui me bloquait..

Je vais surement me pencher un peu sur cette documentation weidu quand même car j'ai quelques trucs à modder. @bientôt donc ^^