1- ¿Qué significan los símbolos “%”, “$”, “0x” y “x” entes de los números?
R: Son los prefijos que permiten al lector saber a qué sistema numérico pertenece tal número.
Binario =%
Hexadecimal = $, 0x, x
2- ¿Que es un bit?
Un bit es un dígito del sistema de numeración binario. Solo se usan dos dígitos, el 1 y el 0. Se puede imaginar un bit, como una bombilla que puede estar en uno de los siguientes dos estados:
Apagado = 0
ó Encendido = 1
Estos valores pueden ser convertidos al decimal y hexadecimal
A. Byte en Binario: %00000000
Byte en Decimal: 0
Byte en Hexadecimal:$00
B. Byte en Binario: %00000001
Byte en Decimal: 1
Byte en Hexadecimal:$01
C. Byte en Binario: %00000010
Byte en Decimal:2
Byte en Hexadecimal:$02
D. Byte en Binario: %00000011
Byte en Decimal:3
Byte en Hexadecimal:$03
E. Byte en Binario: %00001010
Byte en Decimal:10
Byte en Hexadecimal:$0A
F. Byte en Binario: %1011010
Byte en Decimal:90
Byte en Hexadecimal:$5A
G. Byte en Binario: %10111101
Byte en Decimal:189
Byte en Hexadecimal:$BD
H. Byte in binary form: %11111111
3- ¿Que es un byte?
Un Byte es grupo de 8 bits que forman una unidad de información.
He aquí algunos ejemplos para entender mejor el comprtamiento del byte:
A. Byte en Binario: %00000000
Byte en Decimal: 0
Byte en Hexadecimal:$00
B. Byte en Binario: %00000001
Byte en Decimal: 1
Byte en Hexadecimal:$01
C. Byte en Binario: %00000010
Byte en Decimal: 2
Byte en Hexadecimal:$02
D. Byte en Binario: %00000011
Byte en Decimal: 3
Byte en Hexadecimal:$03
E. Byte en Binario: %00001010
Byte en Decimal: 10
Byte en Hexadecimal:$0A
F. Byte en Binario: %1011010
Byte en Decimal:90
Byte en Hexadecimal:$5A
G. Byte en Binario: %10111101
Byte en Decimal:189
Byte en Hexadecimal:$BD
4: ¿Qué es un Offset?
Un offset se refiere a una ubicación específica en la memoria. En términos coloquiales, es la dirección del byte.
Se puede entender mejor si tomamos de ejemplo un librero con algunos libros.
Cuando necesitamos un libro en específico, el offset nos indicara sobre que repisa y a qué altura esta su localización.
Cuando una ROM de Game Boy o un archivo RAM se abre con un editor hexadecimal, contendrá toneladas de bytes hexadecimales en orden. El primer byte se localiza en el offset $0, el segundo byte en el offset $01, el tercer byte en el offset $02 y así sucesivamente hasta el fin de los tiempos.
Los offsets se escriben normalmente en un formato que es bastante sencillo que consiste en el signo “$” seguido del número Hex, pero existe otro formato que usa el Game Boy de forma nativa:
A. Offset en Decimal: 46679
Offset en primer Hexadecimal: $B657
Offset en segundo Hexadecimal: 02:57B6
B. Offset en Decimal: 132157
Offset en primer Hexadecimal: $2043D
Offset en segundo Hexadecimal: 08:3D04
C. Offset en Decimal: 924076
Offset en primer Hexadecimal: $E19AC
Offset en segundo Hexadecimal: 38:AC19
D. Offset en Decimal: 1420579
Offset en primer Hexadecimal: $15AD23
Offset en segundo Hexadecimal: 56:23AD
El segundo formato se entenderá más claramente una vez que se comprenda el concepto de Bank, Point y Repoint.
Los offsets son cruciales para modificar un juego mediante un programa hexadecimal, ya que se necesitan para saber donde se encuentran los datos a
modificar.
5- ¿Qué es un Bank?
Bank o Banco en español, se refiere a la manera en que se reparten los datos dentro de un ROM del Game Boy. Se dividen en secciones que de $4000 bytes, esto quiere decir que:
Bank $00: $0000 - $3FFF
Bank $01: $4000 - $7FFF
Bank $02: $8000 - $BFFF
Bank $03: $C000 - $FFFF
Bank $04: $10000 - $13FFF
...
Bank $2B: $AC000 - $AFFFF
Bank $2C: $B0000 - $B3FFF
Bank $2D: $B4000 - $B7FFF
Bank $2E: $B8000 - $BBFFF
Bank $2F: $BC000 - $BFFFF
...
En el primer banco, el $0000 está incluido en el cálculo de los $4000 bytes por banco, por esta razón, el segundo banco comienza en el $4000 y así sucesivamente.
El número del banco está determinado por su posición relativa; al primer banco se le asigna el $00, al segundo el $01, etc. Al decimo primero, entonces, se le asignaría el $0A.
El número de banco se puede calcular fácilmente si dividimos un offset entre $4000 en la calculadora de Windows (automáticamente hará el redondeo).
Ciertos bancos están reservados para funciones específicas; un ejemplo de esto son los juegos de segunda generación, en donde el segundo banco se utiliza principalmente para almacenar datos de las paletas (colores).
Para ver los detalles sobre bancos de la ROM de Pokemon Gold puedes consultar este enlace:
http://datacrystal.romhacking.net/wiki/Pok%C3%A9mon_Gold:ROM_map
Volviendo al ejemplo del librero, podemos decir que las repisas del librero es el equivalente a los Bancos de la ROM, esto con el fin de tener nuestros datos mejor organizados.
6- ¿Qué es un Point?
Un point o puntero es un dato dentro de la ROM que le dice a la misma ROM donde buscar otro dato. Los datos pueden ser texto, gráficos o comandos.
Coloquialmente se puede decir “apuntar”.
Por ejemplo, en nuestro librero, imaginemos a un pointer como si tuviéramos un montón de libros de color negro y el pointer señalara un libro en específico marcándolo con un color rojo para su fácil localización, así cada vez que necesitamos cierta información, nuestro librero sabe en qué “libro” buscar.
7.- ¿Qué es el Repoint, y que tan necesario es?
El repoint, o repunteo es cuando editamos algún point para que “apunte” a otra ubicación diferente en la ROM, esto debido a que se está agregando nueva información al juego.
El repoint es un concepto básico del Rom Haking; es necesario dominarlo para hacer avanzar en los aspectos más creativos y técnicos de nuestro Hack, ya que con el podemos ampliar el texto, ampliar eventos existentes o crear nuevos, hacer nuevos scripts, etc. Prácticamente se puede hacer de todo aprendiendo a repuntear.
Si en nuestro librero (ROM) necesitamos crecer un libro (Datos) de tamaño, pero no cabe en lugar en donde estaba, podemos moverlo a otra repisa (Banco) con mas espacio libre, pero debemos decirle al juego la nueva ubicaci ón para que sepa dónde buscar ;)
8.- ¿Cuál es la diferencia entre un pointer de 2 bytes y un pointer de 3 bytes?
Los dos tipos de pointers que se utilizan en los juegos de Game Boy tienen el mismo propósito, el de “apuntar” hacia la ubicación de datos, su única diferencia es que el pointer de 3 bytes tiene un byte adicional que indica la localización del banco.
Esto significa que los pointers de 2 bytes siempre apuntan a una ubicación dentrodel mismo banco en que se encuentra y los pointers de 3-bytes pueden apuntar a cualquier lugar del ROM. Un ejemplo de un 3-Bytes point son los sprites de los pokemon y entrenadores, que pueden localizarse en cualquier lugar de la ROM.