Aller au contenu

Types de valeurs dans Cheat Engine : octets, flottants, chaînes et AOB

Cheat-Engine.net Par Cheat-Engine.net 9 min de lecture 34 vues

Byte, 2/4/8 Bytes, Float, Double, String et Array of byte : ce que stocke chaque type, signé ou non signé, ordre des octets little-endian, et comment choisir un type quand vous ne le connaissez pas.

Chaque scan dans Cheat Engine pose deux questions : quelle valeur cherchez-vous, et comment est-elle stockée ? La seconde question correspond au menu déroulant Value Type, et choisir le mauvais type est la raison la plus courante pour laquelle un scan ne trouve rien. Ce guide explique chaque type, comment les nombres sont organisés en mémoire, et comment choisir un type quand vous ne savez pas du tout ce qu'utilise le jeu.

Les exemples supposent que vous savez déjà lancer un First Scan et un Next Scan. Sinon, commencez par le tutoriel Cheat Engine pour débutants. Comme toujours, utilisez ces techniques uniquement dans des jeux solo et hors ligne, et sauvegardez vos parties avant de modifier quoi que ce soit.

Pourquoi le type est important

La mémoire n'est qu'une longue suite d'octets. Le nombre 1000 n'est pas stocké sous forme des caractères "1", "0", "0", "0" ; il est stocké sous forme d'un motif binaire, et ce même motif signifie autre chose selon la façon de le lire. Quatre octets qui représentent 1000 comme nombre entier représentent un nombre minuscule et illisible comme flottant. Quand vous indiquez le type à Cheat Engine, vous lui dites combien d'octets lire à chaque adresse et comment les interpréter. Si le type est mauvais, la valeur saisie ne correspond jamais.

Les types en un coup d'œil

TypeTaillePlageUsage typique dans les jeux
Byte1 octet0 à 255 (signé : -128 à 127)Indicateurs, petits compteurs, niveaux, quantités d'objets plafonnées à 99
2 Bytes2 octets0 à 65 535 (signé : -32 768 à 32 767)Jeux plus anciens, points de statistiques, piles d'inventaire
4 Bytes4 octets0 à 4 294 967 295 (signé : environ plus ou moins 2,1 milliards)Argent, munitions, expérience, la plupart des nombres entiers
8 Bytes8 octets0 à environ 1,8 x 10^19 (signé : environ plus ou moins 9,2 x 10^18)Monnaies très élevées, horodatages, pointeurs dans les jeux 64 bits
Float4 octetsEnviron 7 chiffres significatifsSanté, endurance, positions, vitesse, minuteurs
Double8 octetsEnviron 15 à 16 chiffres significatifsMoteurs et environnements de script utilisant la double précision
StringVariableTexte, ASCII ou UTF-16Noms de personnages, noms d'objets, dialogues
Array of byteVariableToute séquence d'octets, jokers autorisésSignatures de code, structures brutes

Types entiers : Byte, 2 Bytes, 4 Bytes, 8 Bytes

Ce sont des entiers : pas de virgule, juste un compte. Le nom indique combien d'octets chacun utilise. 4 Bytes est le type par défaut de Cheat Engine, car c'est de loin le plus courant pour les compteurs dans les jeux modernes. Un nombre pouvant dépasser environ 4,29 milliards, comme une monnaie de fin de partie dans un jeu incrémental, nécessite 8 Bytes. Les valeurs qui ne dépassent jamais 255 sont parfois regroupées dans un seul Byte pour économiser de l'espace, en particulier dans les jeux plus anciens et pour les indicateurs activé/désactivé.

Signé et non signé

Les mêmes bits peuvent être lus comme signés (nombres négatifs autorisés) ou non signés (zéro et plus). En 4 Bytes, le motif FF FF FF FF vaut -1 en signé et 4 294 967 295 en non signé. Le scan compare le motif binaire, donc cela concerne surtout l'affichage des valeurs. Vous pouvez basculer une entrée entre affichage signé et non signé depuis son menu contextuel dans la liste d'adresses. Si une valeur affiche soudain un nombre énorme après l'avoir baissée sous zéro, vous voyez une valeur signée affichée comme non signée, ou le jeu a subi un dépassement négatif.

Ordre des octets : little-endian avec un exemple détaillé

Les PC Windows utilisent l'ordre little-endian : l'octet de poids faible est stocké en premier. Cela compte dès que vous regardez la mémoire dans la vue hexadécimale du Memory Viewer, ou écrivez un motif Array of byte à la main.

Prenons le nombre 1000 stocké en 4 Bytes :

  1. 1000 en hexadécimal est 3E8.
  2. Complété sur quatre octets, cela donne 00 00 03 E8, écrit avec l'octet de poids fort en premier, comme on écrit normalement les nombres.
  3. Le little-endian inverse l'ordre des octets, donc en mémoire vous voyez E8 03 00 00.

Le même nombre en 2 Bytes est E8 03, et en 8 Bytes c'est E8 03 00 00 00 00 00 00. Seuls les octets sont inversés, jamais les chiffres hexadécimaux à l'intérieur d'un octet : E8 reste E8.

Les flottants suivent la même règle. Le flottant 100.0 a le motif binaire 42C80000, qui se trouve en mémoire sous la forme 00 00 C8 42. Le flottant 1.0 est 3F800000, stocké comme 00 00 80 3F. Calculer cela à la main devient fastidieux ; le convertisseur de valeurs affiche n'importe quel nombre en décimal, en hexadécimal et en octets little-endian pour chaque type, côte à côte.

Virgule flottante : Float et Double

Les flottants stockent des nombres avec une partie fractionnaire. Les jeux les utilisent pour tout ce qui change progressivement ou nécessite des décimales : une santé qui se régénère de 0,3 par tick, la position X, Y et Z d'un personnage, la vitesse de déplacement, un temps de recharge en secondes. Une barre de vie sans nombre affiché est très souvent un flottant, qui contient soit la santé réelle (par exemple 87.5), soit une fraction de 0.0 à 1.0.

Double suit la même idée avec 8 octets et une précision bien supérieure. Moins de jeux l'utilisent pour les valeurs de gameplay, mais certains moteurs et environnements de script stockent tous les nombres en double. Si un scan Float pour une valeur décimale échoue, essayez ensuite Double.

Comme les flottants sont rarement exacts, Cheat Engine n'exige pas une correspondance parfaite. Quand vous choisissez Float ou Double, le panneau de scan propose des options d'arrondi ; le mode arrondi par défaut permet à une recherche de 87 de correspondre à 87.4 et à des valeurs similaires. Quand même cela n'est pas fiable, utilisez le type de scan Value between avec une petite plage, ou passez à Unknown initial value et utilisez les scans Increased et Decreased.

Texte : String en ASCII et UTF-16

Un scan String recherche du texte. Les jeux stockent le texte avec différents encodages, et Cheat Engine vous laisse choisir :

  • ASCII ou texte à un octet : un octet par caractère. "Hi" donne 48 69.
  • UTF-16 : deux octets par caractère, courant dans les programmes et moteurs Windows. "Hi" donne 48 00 69 00. Cochez l'option UTF-16 lors du scan.

Il existe aussi une option de sensibilité à la casse. Rechercher le nom d'un personnage est un moyen rapide de trouver la structure de données qui lui appartient, car les statistiques sont souvent stockées à proximité. Soyez prudent en modifiant des chaînes : écrire un texte plus long que l'original écrase tout ce qui suit en mémoire.

Array of byte (AOB)

Array of byte recherche une séquence exacte d'octets, écrite en hexadécimal et séparée par des espaces, comme E8 03 00 00. Vous pouvez utiliser ?? comme joker pour n'importe quel octet, donc 89 83 ?? ?? 00 00 correspond à plusieurs variantes. Les AOB servent rarement à trouver directement des valeurs de gameplay. Leur rôle principal est de retrouver un morceau précis de code du jeu après un redémarrage, c'est ainsi que les scripts Auto Assembler localisent le code qu'ils modifient.

Le type "All"

Quand vous choisissez All, Cheat Engine recherche votre valeur dans plusieurs types numériques à la fois, et les résultats indiquent sous quel type chaque correspondance a été trouvée. Les types inclus peuvent être ajustés dans les paramètres de Cheat Engine. All est utile quand vous êtes bloqué, mais il produit beaucoup plus de résultats et s'exécute plus lentement, donc considérez-le comme un recours plutôt qu'une habitude.

Comment choisir un type quand vous ne le connaissez pas

Procédez dans cet ordre, en lançant un New Scan à chaque fois qu'un type échoue :

  1. Un nombre entier affiché à l'écran (or, munitions, score) : commencez par 4 Bytes et Exact Value.
  2. Tout ce qui a des décimales, une barre ou une position : essayez Float. Utilisez Unknown initial value si aucun nombre n'est visible.
  3. Float n'a rien trouvé : essayez Double.
  4. Un petit nombre qui ne dépasse jamais 255 ou 65 535 : essayez Byte ou 2 Bytes.
  5. Un nombre très grand : essayez 8 Bytes.
  6. Toujours rien : essayez All, puis demandez-vous si le nombre affiché est bien celui qui est stocké. Les jeux stockent parfois une valeur multipliée par 10 ou 100, stockent le maximum et la quantité utilisée plutôt que la quantité restante, ou la gardent encodée. Dans ces cas, Unknown initial value avec des scans Increased et Decreased est la voie fiable.

Quand vous trouvez un candidat, confirmez-le en le modifiant dans la liste d'adresses et en observant le jeu, puis notez le type dans la description de l'entrée pour vous en souvenir plus tard.

Types personnalisés et moins courants

Cheat Engine propose aussi un type Binary pour les bits individuels, et prend en charge des types personnalisés définis avec un petit script. Les versions récentes incluent certains types personnalisés d'origine, comme des variantes big-endian pour les rares cas où un jeu stocke les nombres dans l'ordre d'octets inverse. Vous n'en aurez pas souvent besoin, mais il est utile de savoir qu'ils existent quand les types standard échouent sur un jeu inhabituel.

Résumé

  • 4 Bytes pour les nombres entiers, Float pour les décimales et les barres, Double comme essai suivant, Byte et 2 Bytes pour les petites valeurs, 8 Bytes pour les très grandes.
  • Signé et non signé sont deux lectures des mêmes bits.
  • La mémoire est little-endian : 1000 en 4 Bytes donne E8 03 00 00.
  • Les chaînes existent en ASCII et UTF-16 ; les motifs AOB recherchent des octets bruts avec des jokers ??.
  • Utilisez le convertisseur de valeurs pour vérifier la disposition des octets au lieu de la calculer à la main.

Commentaires

0
En réponse à

Jamais affiché publiquement.

Les commentaires sont examinés par un modérateur avant d'apparaître.

Aucun commentaire pour le moment

Soyez le premier à donner votre avis.