Page 1 sur 1

Questionnement sur le fonctionnement de l'opcode 12

Posté : sam. 23 juil. 2022, 15:34
par Selphira
Bonjour,

Dans le cadre du développement de mon mod sur l'uniformisation des descriptions, je suis tombée sur un cas que je ne suis pas certaine de comprendre.

L'opcode 12 est celui qui permet d'ajouter des dégâts d'un certain type à la cible. Par exemple, voici les différentes valeurs pour des dégâts magiques
4194304 Magic
4194305 Magic Set to Value
4194306 Magic Set to Percentage
4194307 Magic Reduce by Percentage
Le 1er cas est le plus simple et le plus courant, il permet d'ajouter (ou soustraire) xx points de dégâts lors d'une attaque réussie.

Le 3ème infligerait xx% de dégâts magiques, le pourcentage étant basé sur les points de vie actuels
Le 4ème infligerait xx% de dégâts magiques, le pourcentage étant cette fois basé sur les points de vie maximum de la cible.

Par contre pour le 2ème, je sèche totalement. Il modifierait la vie de la cible à la valeur indiquée ? Pouvant soigner la cible si sa vie est en dessous de ce chiffre ?
Cela me semble vraiment étrange comme comportement.

Si quelqu'un a la réponse, je suis tout ouïe !

Posté : sam. 23 juil. 2022, 18:57
par deratiseur
Je vais te répondre parce que j'utilise souvent cet opcode pour "tuer" une cible immunisée à la mort ^^

Effet 12, paramètre 2 : magic set to value -> je me cette valeur à 2, la monstre va prendre assez de dégâts pour fixer sa valeur actuelle à 2.
En l’occurrence, j'utilise dans mes sorts les plus bourrins l'opcode 12 avec "magic set to value" : 0, ça fixe les pvs de la créature à 0 -> mort.

le paramètre 3 fonctionne de la même manière : set to % = avec paramètre 20, la créature va subir assez de dégâts pour voir sa vie fixée à 20% du maximum.
Le paramètre 4 inflige x% de dégâts basés sur les points de vie maximum de la cible : set to 20%, chaque frappe fait des dégâts à la cible égaux à 20% de son total de point de vie maximum.

(hors topic : ne venez pas hurler au grobillisme cheaté, les opcodes "modifier la force/dextérité/constitution/charisme/sagesse/intelligence, set value to 0, ça tue aussi, et l'archer en sait quelque chose :) )

Posté : sam. 23 juil. 2022, 19:11
par Selphira
Merci pour cette réponse très claire.

Je vois que j'avais mal compris le 3ème cas, mais cela veut bien dire que la cible pourrait être soignée si le pourcentage dans l'opcode est plus grand que le pourcentage actuel de sa vie ?
Et comment les résistances entrent en jeu pour le 2ème et 3ème cas ?
J'imagine qu'avec une résistance à 100%, il n'y a pas d'ambiguïté et les dégâts ne sont pas infligés, mais pour une résistance à 50% ?

Créature avec 50 pv restant, opcode avec un set = 2
Sans résistance, elle va se prendre 48 de dégâts, avec 50% de résistance elle va s'en prendre que 24 ?

Ca va bien m'aider pour la suite !

Posté : sam. 23 juil. 2022, 21:20
par deratiseur
J'ai profité d'une sauvegarde spéciale programmation pour tester, et ...... la résistance ne s'applique que face au paramètre 0. Pour les paramètres 1,2 et 3, la résistance est ignorée.

Posté : sam. 23 juil. 2022, 21:32
par deratiseur
Deuxième test, sur le paramètre 2 (3ème cas, Magic Set to Percentage). dans le cas d'une valeur positive, par exemple 200, les dommages rendent 100% des points de vie actuels de la cible. La cible à 3 pvs, l'effet lui en rend 3. La cible à 6 pvs, l'effet lui en rend 6. L'effet est donc à lire comme ceci : set to x% des pvs actuels. (dans l’exemple, la valeur 200 c'est "set to 200% des pvs actuels")
C'est finalement très spécial puisque les valeurs agressives (inférieurs à 100%) prennent en compte le nombre de points de vie maximum alors que les valeurs bénéfiques (supérieures à 100%) prennent en compte les points de vie actuels.

Posté : sam. 23 juil. 2022, 21:42
par Selphira
Merci pour ces renseignements ! Je vais garder précieusement ce fil de discussion pour améliorer les descriptions de cet effet qui est bien plus complexe qu'il n'y parait !

Posté : sam. 13 août 2022, 17:50
par rivvers
Hello,

j'ai passé beaucoup de temps à décrypter les opcodes il y a quelques années car je n'étais pas du tout convaincu par les bibles en tout genre.
L'opcode 12 est particulièrement dense.

Il y a une chose à comprendre c'est que certains opcodes ont évolué avec le temps et les mises à jour mais personne ne sait vraiment quand ou comment (ou même pourquoi).
Le n°12 fait parti de ceux-là.
Aussi mes résultats diffèrent de ceux de deratiseur pour autant il est possible que nous ayons tous les deux raison, ou tord.

Grosse-modo les résultats que j'obtiens sont ceux que tu présentent : et les tests ig les confirment (en version 2.5).

Code : Tout sélectionner

	1 : Dégâts subis = Valeur
	2 : PV actuels = min(Valeur, PV maximums)
	3 : PV actuels = floor(PV actuels * Valeur / 100)
	4 : PV actuels = PV actuels - floor(PV maximums * Valeur / 100)
Avec une valeur à 20 et un perso à 86/98 pv. Chaque effet est lancé à deux reprises, voici les résultats :
1 : Il perd 20pv, puis 20pv.
2 : Il passe à 20pv (-66) puis à 20pv (0).
3 : Il passe à 17pv (-69) puis à 3pv (-14).
4 : Il passe à 67pv (-19) puis à 48pv (-19).

Les modes 1, 2 et 3 écrasent les points de vie actuels de la cible, c'est pourquoi aucune résistance n'est permise.
De fait ils sont partiellement incompatibles avec les Flags des bits 8 et 9.

edit :
Apparement ils ont pensé au problème : les flags des bits 8 et 9 ne fonctionnent qu'avec le mode 0