Tipos de valor en Cheat Engine explicados: Bytes, Floats, Strings y AOB
Byte, 2/4/8 Bytes, Float, Double, String y Array of byte: qué guarda cada tipo, con signo vs sin signo, el orden de bytes little-endian y cómo elegir un tipo cuando no sabes cuál es.
Cada escaneo en Cheat Engine hace dos preguntas: ¿qué valor buscas y cómo está almacenado? La segunda pregunta es el menú desplegable Value Type, y elegir el tipo equivocado es la razón más común por la que un escaneo no encuentra nada. Esta guía explica cada tipo, cómo se organizan los números en la memoria y cómo elegir un tipo cuando no tienes idea de cuál usa el juego.
Los ejemplos suponen que ya sabes hacer un First Scan y un Next Scan. Si no, empieza con el tutorial de Cheat Engine para principiantes. Como siempre, usa estas técnicas solo en juegos de un jugador y sin conexión, y haz una copia de seguridad de tus partidas guardadas antes de cambiar nada.
Por qué importa el tipo
La memoria es solo una larga fila de bytes. El número 1000 no se guarda como los caracteres "1", "0", "0", "0"; se guarda como un patrón binario, y ese mismo patrón significa algo distinto según cómo lo leas. Cuatro bytes que significan 1000 como número entero significan un número ilegiblemente diminuto como float. Cuando le indicas el tipo a Cheat Engine, le dices cuántos bytes leer en cada dirección y cómo interpretarlos. Si el tipo es incorrecto, el valor que escribiste nunca coincide.
Los tipos de un vistazo
| Tipo | Tamaño | Rango | Uso típico en juegos |
|---|---|---|---|
| Byte | 1 byte | 0 a 255 (con signo: -128 a 127) | Banderas, contadores pequeños, niveles, cantidades de objetos limitadas a 99 |
| 2 Bytes | 2 bytes | 0 a 65,535 (con signo: -32,768 a 32,767) | Juegos antiguos, puntos de estadísticas, pilas de inventario |
| 4 Bytes | 4 bytes | 0 a 4,294,967,295 (con signo: aproximadamente más o menos 2.1 mil millones) | Dinero, munición, experiencia, la mayoría de los números enteros |
| 8 Bytes | 8 bytes | 0 a aproximadamente 1.8 x 10^19 (con signo: aproximadamente más o menos 9.2 x 10^18) | Monedas muy grandes, marcas de tiempo, punteros en juegos de 64 bits |
| Float | 4 bytes | Aproximadamente 7 dígitos significativos | Salud, resistencia, posiciones, velocidad, temporizadores |
| Double | 8 bytes | Aproximadamente 15 a 16 dígitos significativos | Motores y entornos de scripts que usan doble precisión |
| String | Variable | Texto, ASCII o UTF-16 | Nombres de personajes, nombres de objetos, diálogos |
| Array of byte | Variable | Cualquier secuencia de bytes, se permiten comodines | Firmas de código, estructuras en bruto |
Tipos de números enteros: Byte, 2 Bytes, 4 Bytes, 8 Bytes
Son enteros: sin punto decimal, solo una cantidad. El nombre te dice cuántos bytes usa cada uno. 4 Bytes es el valor predeterminado de Cheat Engine porque es, por mucho, el tipo más común para cantidades en juegos modernos. Un número que puede superar unos 4.29 mil millones, como una moneda de fase avanzada en un juego incremental, necesita 8 Bytes. Los valores que nunca superan 255 a veces se empaquetan en un solo Byte para ahorrar espacio, sobre todo en juegos antiguos y para banderas de activado/desactivado.
Con signo y sin signo
Los mismos bits pueden leerse con signo (permite números negativos) o sin signo (de cero hacia arriba). En 4 Bytes, el patrón FF FF FF FF es -1 con signo y 4,294,967,295 sin signo. El escaneo en sí compara el patrón de bits, así que esto importa sobre todo para cómo se muestran los valores. Puedes cambiar una entrada entre visualización con signo y sin signo desde su menú de clic derecho en la lista de direcciones. Si un valor de pronto aparece como un número enorme después de bajarlo de cero, estás viendo un valor con signo mostrado como sin signo, o el juego tuvo un desbordamiento negativo.
Orden de bytes: little-endian con un ejemplo práctico
Las PC con Windows usan el orden de bytes little-endian: el byte menos significativo se almacena primero. Esto importa en cuanto miras la memoria en la vista hexadecimal del Memory Viewer o escribes a mano un patrón de Array of byte.
Toma el número 1000 almacenado como 4 Bytes:
- 1000 en hexadecimal es
3E8. - Rellenado a cuatro bytes, queda
00 00 03 E8, escrito con el byte más significativo primero, como la gente escribe normalmente los números. - Little-endian invierte el orden de los bytes, así que en la memoria ves
E8 03 00 00.
El mismo número como 2 Bytes es E8 03, y como 8 Bytes es E8 03 00 00 00 00 00 00. Solo se invierten los bytes, nunca los dígitos hexadecimales dentro de un byte: E8 sigue siendo E8.
Los floats siguen la misma regla. El float 100.0 tiene el patrón de bits 42C80000, que en la memoria aparece como 00 00 C8 42. El float 1.0 es 3F800000, almacenado como 00 00 80 3F. Calcular esto a mano se vuelve tedioso; el conversor de valores muestra cualquier número en decimal, hexadecimal y bytes little-endian para cada tipo, lado a lado.
Coma flotante: Float y Double
Los floats almacenan números con parte fraccionaria. Los juegos los usan para todo lo que cambia de forma gradual o necesita decimales: salud que se regenera a 0.3 por tick, la posición X, Y y Z de un personaje, velocidad de movimiento, un tiempo de reutilización en segundos. Una barra de salud sin número muy a menudo es un float, ya sea con la salud real (digamos 87.5) o una fracción de 0.0 a 1.0.
Double es la misma idea con 8 bytes y mucha más precisión. Menos juegos lo usan para valores de jugabilidad, pero algunos motores y entornos de scripts almacenan todos los números como doubles. Si un escaneo Float para un valor con decimales falla, prueba con Double.
Como los floats rara vez son exactos, Cheat Engine no exige una coincidencia perfecta. Cuando eliges Float o Double, el panel de escaneo ofrece opciones de redondeo; el modo redondeado predeterminado permite que una búsqueda de 87 coincida con 87.4 y valores similares. Cuando ni eso es confiable, usa el tipo de escaneo Value between con un rango pequeño, o cambia a Unknown initial value y usa escaneos Increased y Decreased.
Texto: String en ASCII y UTF-16
Un escaneo String busca texto. Los juegos almacenan el texto en distintas codificaciones, y Cheat Engine te deja elegir:
- ASCII o texto de un solo byte: un byte por carácter. "Hi" es
48 69. - UTF-16: dos bytes por carácter, común en programas y motores de Windows. "Hi" es
48 00 69 00. Marca la opción UTF-16 cuando escanees.
También hay una opción de distinción entre mayúsculas y minúsculas. Buscar el nombre de un personaje es una forma rápida de encontrar la estructura de datos de ese personaje, porque las estadísticas suelen almacenarse cerca. Ten cuidado al cambiar strings: escribir un texto más largo que el original sobrescribe lo que viene después en la memoria.
Array of byte (AOB)
Array of byte busca una secuencia exacta de bytes, escrita en hexadecimal y separada por espacios, como E8 03 00 00. Puedes usar ?? como comodín para cualquier byte, así que 89 83 ?? ?? 00 00 coincide con varias variaciones. Los AOB rara vez se usan para encontrar valores de jugabilidad directamente. Su función principal es volver a encontrar una parte específica del código del juego después de reiniciar, que es como los scripts de Auto Assembler localizan el código que modifican.
El tipo "All"
Cuando eliges All, Cheat Engine busca tu valor en varios tipos numéricos a la vez, y los resultados muestran en qué tipo se encontró cada coincidencia. Los tipos incluidos se pueden ajustar en la configuración de Cheat Engine. All es útil cuando estás atascado, pero produce muchos más resultados y es más lento, así que úsalo como último recurso y no como costumbre.
Cómo elegir un tipo cuando no lo conoces
Sigue estos pasos en orden, iniciando un New Scan cada vez que un tipo falle:
- Un número entero que se ve en pantalla (oro, munición, una puntuación): empieza con 4 Bytes y Exact Value.
- Cualquier cosa con decimales, una barra o una posición: prueba Float. Usa Unknown initial value si no hay ningún número visible.
- Float no encontró nada: prueba Double.
- Un número pequeño que nunca supera 255 o 65,535: prueba Byte o 2 Bytes.
- Un número muy grande: prueba 8 Bytes.
- Todavía nada: prueba All y luego reconsidera si el número mostrado es el almacenado. A veces los juegos guardan un valor multiplicado por 10 o 100, guardan el máximo y la cantidad usada en lugar de la cantidad restante, o lo mantienen codificado. En esos casos, Unknown initial value con escaneos Increased y Decreased es el camino confiable.
Cuando encuentres un candidato, confírmalo cambiándolo en la lista de direcciones y observando el juego, y luego anota el tipo en la descripción de la entrada para recordarlo después.
Tipos personalizados y menos comunes
Cheat Engine también tiene un tipo Binary para bits individuales y admite tipos personalizados definidos con un pequeño script. Las versiones recientes incluyen algunos tipos personalizados de fábrica, como variantes big-endian para los casos raros en que un juego almacena los números en el orden de bytes opuesto. No los necesitarás a menudo, pero conviene saber que existen cuando los tipos estándar fallan en un juego poco común.
Resumen
- 4 Bytes para números enteros, Float para decimales y barras, Double como siguiente intento, Byte y 2 Bytes para valores pequeños, 8 Bytes para los muy grandes.
- Con signo y sin signo son dos lecturas de los mismos bits.
- La memoria es little-endian: 1000 como 4 Bytes es
E8 03 00 00. - Los strings vienen en ASCII y UTF-16; los patrones AOB buscan bytes en bruto con comodines
??. - Usa el conversor de valores para comprobar la disposición de los bytes en lugar de calcularla a mano.
Comentarios
Aún no hay comentarios
Sé el primero en compartir tu opinión.