Segunda parte del taller de introducción al ROM Hacking impartido gracias a la rama de estudiantes de IEEE de Granada.
En esta ocasión se detalla qué se puede encontrar en un fichero y cual es su representación binaria.
1. Rama estudiantil de IEEE en la UGR
Introducción al ROM Hacking:
Formatos comunes en juegos
Benito Palacios Sánchez
benito.palaciossanchez.es@ieee.org
1 de abril de 2016
2. Textos Imágenes Tipografías y audios Reto
Contenido
Textos
Codificaciones
Formatos
Tipografías
Imágenes
Fondos
Sprites
Texturas
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 2 / 36
3. Textos Imágenes Tipografías y audios Reto
Contenido
Textos
Codificaciones
Formatos
Tipografías
Imágenes
Fondos
Sprites
Texturas
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 2 / 36
4. Textos Imágenes Tipografías y audios Reto
Contenido
Textos
Codificaciones
Formatos
Tipografías
Imágenes
Fondos
Sprites
Texturas
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 2 / 36
5. Textos Imágenes Tipografías y audios Reto
Naturaleza de los textos
¿Cómo guardamos texto de forma digital?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 3 / 36
6. Textos Imágenes Tipografías y audios Reto
Codificaciones
Codificación de caracteres
Es el método que permite convertir un carácter de un
lenguaje natural en un símbolo de otro sistema de
representación aplicando reglas de codificación. [Wikipedia]
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 4 / 36
7. Textos Imágenes Tipografías y audios Reto
Codificaciones
Codificación de caracteres
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 4 / 36
8. Textos Imágenes Tipografías y audios Reto
Codificaciones
ASCII
Codifica caracteres del alfabeto latino en 7 bits.
↓
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 5 / 36
9. Textos Imágenes Tipografías y audios Reto
Codificaciones
Latin-1 (ISO 8859-1)
Codificación extendida de ASCII. Utiliza 8 bits añadiendo 128
caracteres necesarios para las lenguas europeas.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 6 / 36
10. Textos Imágenes Tipografías y audios Reto
Codificaciones
Unicode
Estándar universal de codificación de caracteres para la
mayoría de lenguas (incluidas las muertas). La última versión
8.0 incluye 120.737 caracteres.
Unicode es solo una tabla, no especifica la codificación.
Codificaciones para Unicode:
UTF-8: codificación de 8 bits de longitud variable.
’A’ = 41h, ’ ’ = F0 A0 9C 8E
UTF-16: codificación de 16 bits de longitud variable.
’A’ = 0041, ’ ’ = D841 DF0E
UTF-32: codificación de 32 bits de longitud fija.
’A’ = 00000041, ’ ’ = 0002070E
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 7 / 36
11. Textos Imágenes Tipografías y audios Reto
Codificaciones
Unicode
Estándar universal de codificación de caracteres para la
mayoría de lenguas (incluidas las muertas). La última versión
8.0 incluye 120.737 caracteres.
Unicode es solo una tabla, no especifica la codificación.
Codificaciones para Unicode:
UTF-8: codificación de 8 bits de longitud variable.
’A’ = 41h, ’ ’ = F0 A0 9C 8E
UTF-16: codificación de 16 bits de longitud variable.
’A’ = 0041, ’ ’ = D841 DF0E
UTF-32: codificación de 32 bits de longitud fija.
’A’ = 00000041, ’ ’ = 0002070E
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 7 / 36
12. Textos Imágenes Tipografías y audios Reto
Codificaciones
Unicode
Estándar universal de codificación de caracteres para la
mayoría de lenguas (incluidas las muertas). La última versión
8.0 incluye 120.737 caracteres.
Unicode es solo una tabla, no especifica la codificación.
Codificaciones para Unicode:
UTF-8: codificación de 8 bits de longitud variable.
’A’ = 41h, ’ ’ = F0 A0 9C 8E
UTF-16: codificación de 16 bits de longitud variable.
’A’ = 0041, ’ ’ = D841 DF0E
UTF-32: codificación de 32 bits de longitud fija.
’A’ = 00000041, ’ ’ = 0002070E
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 7 / 36
13. Textos Imágenes Tipografías y audios Reto
Codificaciones
Unicode
Estándar universal de codificación de caracteres para la
mayoría de lenguas (incluidas las muertas). La última versión
8.0 incluye 120.737 caracteres.
Unicode es solo una tabla, no especifica la codificación.
Codificaciones para Unicode:
UTF-8: codificación de 8 bits de longitud variable.
’A’ = 41h, ’ ’ = F0 A0 9C 8E
UTF-16: codificación de 16 bits de longitud variable.
’A’ = 0041, ’ ’ = D841 DF0E
UTF-32: codificación de 32 bits de longitud fija.
’A’ = 00000041, ’ ’ = 0002070E
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 7 / 36
14. Textos Imágenes Tipografías y audios Reto
Codificaciones
Unicode
Estándar universal de codificación de caracteres para la
mayoría de lenguas (incluidas las muertas). La última versión
8.0 incluye 120.737 caracteres.
Unicode es solo una tabla, no especifica la codificación.
Codificaciones para Unicode:
UTF-8: codificación de 8 bits de longitud variable.
’A’ = 41h, ’ ’ = F0 A0 9C 8E
UTF-16: codificación de 16 bits de longitud variable.
’A’ = 0041, ’ ’ = D841 DF0E
UTF-32: codificación de 32 bits de longitud fija.
’A’ = 00000041, ’ ’ = 0002070E
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 7 / 36
15. Textos Imágenes Tipografías y audios Reto
Codificaciones
Unicode
Estándar universal de codificación de caracteres para la
mayoría de lenguas (incluidas las muertas). La última versión
8.0 incluye 120.737 caracteres.
Unicode es solo una tabla, no especifica la codificación.
Codificaciones para Unicode:
UTF-8: codificación de 8 bits de longitud variable.
’A’ = 41h, ’ ’ = F0 A0 9C 8E
UTF-16: codificación de 16 bits de longitud variable.
’A’ = 0041, ’ ’ = D841 DF0E
UTF-32: codificación de 32 bits de longitud fija.
’A’ = 00000041, ’ ’ = 0002070E
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 7 / 36
16. Textos Imágenes Tipografías y audios Reto
Codificaciones
Shift Jis (CP 932)
Codificación de longitud variable (1 o 2 bytes) para caracteres
japoneses. Incluye ASCII.
Figura: Tabla para caracteres con primer byte 0x82
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 8 / 36
17. Textos Imágenes Tipografías y audios Reto
Codificaciones
Ejemplos en archivos
¿?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 9 / 36
18. Textos Imágenes Tipografías y audios Reto
Codificaciones
Ejemplos en archivos
UTF-16
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 9 / 36
19. Textos Imágenes Tipografías y audios Reto
Codificaciones
Ejemplos en archivos
UTF-16
¿?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 9 / 36
20. Textos Imágenes Tipografías y audios Reto
Codificaciones
Ejemplos en archivos
UTF-16
Shift Jis
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 9 / 36
21. Textos Imágenes Tipografías y audios Reto
Codificaciones
Tablas
Algunos juegos usan codificaciones propietarias...
... fácil mapeo con la tipografía.
... dificultar el acceso.
Figura: Textos de Pokémon Perla
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 10 / 36
22. Textos Imágenes Tipografías y audios Reto
Codificaciones
Tablas
Valor Carácter Valor Carácter Valor Carácter
01A9h ¡ 01ABh ! 01ADh ,
01DEh SP E000h NL 0152h E
0132h H 013Ah P 013Eh T
0145h a 0147h c 0148h d
014Ch h 0150h l 0152h n
0153h o 0156h r 0158h t
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 11 / 36
23. Textos Imágenes Tipografías y audios Reto
Formatos
Punteros (offsets)
Número enteros que indican la posición del texto.
Tipos:
Absoluto: desde el comienzo del archivo.
Relativo: desde otra posición
Relativo a una sección del fichero.
Relativo a la posición actual.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 12 / 36
24. Textos Imágenes Tipografías y audios Reto
Formatos
Punteros (offsets)
Número enteros que indican la posición del texto.
Tipos:
Absoluto: desde el comienzo del archivo.
Relativo: desde otra posición
Relativo a una sección del fichero.
Relativo a la posición actual.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 12 / 36
25. Textos Imágenes Tipografías y audios Reto
Formatos
Punteros (offsets)
Número enteros que indican la posición del texto.
Tipos:
Absoluto: desde el comienzo del archivo.
Relativo: desde otra posición
Relativo a una sección del fichero.
Relativo a la posición actual.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 12 / 36
26. Textos Imágenes Tipografías y audios Reto
Formatos
Punteros (offsets)
Número enteros que indican la posición del texto.
Tipos:
Absoluto: desde el comienzo del archivo.
Relativo: desde otra posición
Relativo a una sección del fichero.
Relativo a la posición actual.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 12 / 36
27. Textos Imágenes Tipografías y audios Reto
Formatos
Punteros (offsets)
Formato BMG
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 13 / 36
28. Textos Imágenes Tipografías y audios Reto
Formatos
Punteros (offsets)
Formato BMG
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 13 / 36
29. Textos Imágenes Tipografías y audios Reto
Formatos
Punteros (offsets)
Formato BMG
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 13 / 36
30. Textos Imágenes Tipografías y audios Reto
Formatos
Punteros (offsets)
Formato BMG
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 13 / 36
31. Textos Imágenes Tipografías y audios Reto
Formatos
Punteros (offsets)
Formato BMG
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 13 / 36
32. Textos Imágenes Tipografías y audios Reto
Formatos
Punteros (offsets)
Formato BMG
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 13 / 36
33. Textos Imágenes Tipografías y audios Reto
Formatos
Punteros (offsets)
Formato BMG
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 13 / 36
34. Textos Imágenes Tipografías y audios Reto
Formatos
Punteros (offsets)
Formato BMG
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 13 / 36
35. Textos Imágenes Tipografías y audios Reto
Formatos
Punteros (offsets)
Formato BMG
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 13 / 36
36. Textos Imágenes Tipografías y audios Reto
Naturaleza de las imágenes
¿Qué necesitamos para formar una imagen?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 14 / 36
37. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Partes de una imagen
Una imagen se compone de sucesión de colores (píxeles).
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 15 / 36
38. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Partes de una imagen
Una imagen se compone de sucesión de colores (píxeles).
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 15 / 36
39. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Partes de una imagen
Una imagen se compone de sucesión de colores (píxeles).
+
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 15 / 36
40. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Partes de una imagen
Una imagen se compone de sucesión de colores (píxeles).
+ =
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 15 / 36
41. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Colores
Los colores se forman mezclando los tres colores base
(componentes / canal): rojo, verde y azul.
El rango de valores de cada componente define
los colores únicos.
Generalmente: 8 bits/canal
28
= 256 → 2563
= 16,777,216 colores únicos.
NDS: 5 bits (BGR555) → 32.768 colores únicos.
Un color ocupa 16 bits:
5 por canal + 1 transparencia.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 16 / 36
42. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Colores
Los colores se forman mezclando los tres colores base
(componentes / canal): rojo, verde y azul.
El rango de valores de cada componente define
los colores únicos.
Generalmente: 8 bits/canal
28
= 256 → 2563
= 16,777,216 colores únicos.
NDS: 5 bits (BGR555) → 32.768 colores únicos.
Un color ocupa 16 bits:
5 por canal + 1 transparencia.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 16 / 36
43. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Colores
Los colores se forman mezclando los tres colores base
(componentes / canal): rojo, verde y azul.
El rango de valores de cada componente define
los colores únicos.
Generalmente: 8 bits/canal
28
= 256 → 2563
= 16,777,216 colores únicos.
NDS: 5 bits (BGR555) → 32.768 colores únicos.
Un color ocupa 16 bits:
5 por canal + 1 transparencia.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 16 / 36
44. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Colores
Los colores se forman mezclando los tres colores base
(componentes / canal): rojo, verde y azul.
El rango de valores de cada componente define
los colores únicos.
Generalmente: 8 bits/canal
28
= 256 → 2563
= 16,777,216 colores únicos.
NDS: 5 bits (BGR555) → 32.768 colores únicos.
Un color ocupa 16 bits:
5 por canal + 1 transparencia.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 16 / 36
45. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Paletas
Agrupación de colores. Definen los colores de una imagen. El
primer color suele ser el transparente.
Modalidades del formato NCLR:
1 paleta de 256 colores = 256 colores.
16 paletas de 16 colores = 256 colores.
16 paletas de 256 colores = 4.096 colores.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 17 / 36
46. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Paletas
Agrupación de colores. Definen los colores de una imagen. El
primer color suele ser el transparente.
Modalidades del formato NCLR:
1 paleta de 256 colores = 256 colores.
16 paletas de 16 colores = 256 colores.
16 paletas de 256 colores = 4.096 colores.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 17 / 36
47. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Paletas
Agrupación de colores. Definen los colores de una imagen. El
primer color suele ser el transparente.
Modalidades del formato NCLR:
1 paleta de 256 colores = 256 colores.
16 paletas de 16 colores = 256 colores.
16 paletas de 256 colores = 4.096 colores.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 17 / 36
48. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Paletas
Agrupación de colores. Definen los colores de una imagen. El
primer color suele ser el transparente.
Modalidades del formato NCLR:
1 paleta de 256 colores = 256 colores.
16 paletas de 16 colores = 256 colores.
16 paletas de 256 colores = 4.096 colores.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 17 / 36
49. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Píxeles
La información que guardamos por píxel es la posición en la
paleta de su color.
Codificaciones del formato NCGR:
8 bits por píxel (bpp): 28 = 256 posiciones diferentes →
256 colores diferentes.
4 bpp: 16 colores diferentes.
1 bpp: 2 colores diferentes (blanco o negro).
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 18 / 36
50. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Píxeles
La información que guardamos por píxel es la posición en la
paleta de su color.
Codificaciones del formato NCGR:
8 bits por píxel (bpp): 28 = 256 posiciones diferentes →
256 colores diferentes.
4 bpp: 16 colores diferentes.
1 bpp: 2 colores diferentes (blanco o negro).
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 18 / 36
51. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Píxeles
La información que guardamos por píxel es la posición en la
paleta de su color.
Codificaciones del formato NCGR:
8 bits por píxel (bpp): 28 = 256 posiciones diferentes →
256 colores diferentes.
4 bpp: 16 colores diferentes.
1 bpp: 2 colores diferentes (blanco o negro).
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 18 / 36
52. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Píxeles
La información que guardamos por píxel es la posición en la
paleta de su color.
Codificaciones del formato NCGR:
8 bits por píxel (bpp): 28 = 256 posiciones diferentes →
256 colores diferentes.
4 bpp: 16 colores diferentes.
1 bpp: 2 colores diferentes (blanco o negro).
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 18 / 36
53. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Agrupación de píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 19 / 36
54. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Agrupación de píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 19 / 36
55. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Agrupación de píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 19 / 36
58. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Compresión
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 21 / 36
59. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Compresión
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 21 / 36
60. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Compresión
+
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 21 / 36
61. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Compresión
+ =
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 21 / 36
62. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Compresión
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 21 / 36
63. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Compresión
→
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 21 / 36
64. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Compresión
Compresión de tiles con el formato NSCR:
Evita guardar tiles idénticos.
Evita guardar tiles volteados horizontalmente o
verticalmente.
Permite agrupar imágenes.
Permite usar 256 colores distintos en formatos 4bpp.
Cada tile usa una paleta.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 21 / 36
65. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Compresión
Compresión de tiles con el formato NSCR:
Evita guardar tiles idénticos.
Evita guardar tiles volteados horizontalmente o
verticalmente.
Permite agrupar imágenes.
Permite usar 256 colores distintos en formatos 4bpp.
Cada tile usa una paleta.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 21 / 36
66. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Compresión
Compresión de tiles con el formato NSCR:
Evita guardar tiles idénticos.
Evita guardar tiles volteados horizontalmente o
verticalmente.
Permite agrupar imágenes.
Permite usar 256 colores distintos en formatos 4bpp.
Cada tile usa una paleta.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 21 / 36
67. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Compresión
Compresión de tiles con el formato NSCR:
Evita guardar tiles idénticos.
Evita guardar tiles volteados horizontalmente o
verticalmente.
Permite agrupar imágenes.
Permite usar 256 colores distintos en formatos 4bpp.
Cada tile usa una paleta.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 21 / 36
68. Textos Imágenes Tipografías y audios Reto
Imágenes de fondo
Compresión
Compresión de tiles con el formato NSCR:
Evita guardar tiles idénticos.
Evita guardar tiles volteados horizontalmente o
verticalmente.
Permite agrupar imágenes.
Permite usar 256 colores distintos en formatos 4bpp.
Cada tile usa una paleta.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 21 / 36
69. Textos Imágenes Tipografías y audios Reto
Sprites
Casos de uso
Capas
Animaciones
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 22 / 36
70. Textos Imágenes Tipografías y audios Reto
Sprites
Casos de uso
Capas
Animaciones
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 22 / 36
71. Textos Imágenes Tipografías y audios Reto
Sprites
Casos de uso
Capas
Animaciones
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 22 / 36
72. Textos Imágenes Tipografías y audios Reto
Sprites
Casos de uso
Capas
Animaciones
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 22 / 36
73. Textos Imágenes Tipografías y audios Reto
Sprites
Casos de uso
Ahorro de espacio con capas
+ =
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 22 / 36
74. Textos Imágenes Tipografías y audios Reto
Sprites
Formatos base
Paleta
+
Tiles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 23 / 36
75. Textos Imágenes Tipografías y audios Reto
Sprites
Formatos base
Paleta
+
Tiles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 23 / 36
76. Textos Imágenes Tipografías y audios Reto
Sprites
Celdas
Nitro CElls Resource (.ncer)
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 24 / 36
77. Textos Imágenes Tipografías y audios Reto
Sprites
Animaciones
Nitro AnimatioN Resource (.nanr)
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 25 / 36
78. Textos Imágenes Tipografías y audios Reto
3D
Texturas
Nitro TeXture (.nsbtx)
Uso en modelos 3D
Paletas + Tiles
Codificaciones: A3I5, A4I4, A5I3,
4x4 texel
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 26 / 36
79. Textos Imágenes Tipografías y audios Reto
3D
Texturas
Nitro TeXture (.nsbtx)
Uso en modelos 3D
Paletas + Tiles
Codificaciones: A3I5, A4I4, A5I3,
4x4 texel
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 26 / 36
80. Textos Imágenes Tipografías y audios Reto
3D
Texturas
Nitro TeXture (.nsbtx)
Uso en modelos 3D
Paletas + Tiles
Codificaciones: A3I5, A4I4, A5I3,
4x4 texel
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 26 / 36
81. Textos Imágenes Tipografías y audios Reto
3D
Texturas
Nitro TeXture (.nsbtx)
Uso en modelos 3D
Paletas + Tiles
Codificaciones: A3I5, A4I4, A5I3,
4x4 texel
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 26 / 36
82. Textos Imágenes Tipografías y audios Reto
3D
Modelos 3D
Nitro MoDel (.nsbbmd)
Geometría 3D.
Comandos de OpenGL 1.0.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 27 / 36
83. Textos Imágenes Tipografías y audios Reto
3D
Modelos 3D
Nitro MoDel (.nsbbmd)
Geometría 3D.
Comandos de OpenGL 1.0.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 27 / 36
84. Textos Imágenes Tipografías y audios Reto
3D
Modelos 3D
Nitro MoDel (.nsbbmd)
Geometría 3D.
Comandos de OpenGL 1.0.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 27 / 36
85. Textos Imágenes Tipografías y audios Reto
Tipografías y audios
Tipografías
Nitro FonT Resource (.nftr)
Una imagen por carácter.
Mapeo binario ↔ imagen.
Tabla + Imágenes.
Útil para reemplazo de
caracteres.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 28 / 36
86. Textos Imágenes Tipografías y audios Reto
Tipografías y audios
Tipografías
Nitro FonT Resource (.nftr)
Una imagen por carácter.
Mapeo binario ↔ imagen.
Tabla + Imágenes.
Útil para reemplazo de
caracteres.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 28 / 36
87. Textos Imágenes Tipografías y audios Reto
Tipografías y audios
Tipografías
Nitro FonT Resource (.nftr)
Una imagen por carácter.
Mapeo binario ↔ imagen.
Tabla + Imágenes.
Útil para reemplazo de
caracteres.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 28 / 36
88. Textos Imágenes Tipografías y audios Reto
Tipografías y audios
Tipografías
Nitro FonT Resource (.nftr)
Una imagen por carácter.
Mapeo binario ↔ imagen.
Tabla + Imágenes.
Útil para reemplazo de
caracteres.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 28 / 36
89. Textos Imágenes Tipografías y audios Reto
Tipografías y audios
Audios
Sound DATa (.sdat)
Sonido digitalizado (STRM).
PCM, ADPCM, Procyon.
Mono y estéreo.
Sample format: 4 a 16 bits.
Sample rate: 16 KHz, 32 KHz.
Bucles.
Sonido sintetizado (SSEQ).
Partitura: SSEQ.
Notas musicales: SBNK, SWAR.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 29 / 36
90. Textos Imágenes Tipografías y audios Reto
Tipografías y audios
Audios
Sound DATa (.sdat)
Sonido digitalizado (STRM).
PCM, ADPCM, Procyon.
Mono y estéreo.
Sample format: 4 a 16 bits.
Sample rate: 16 KHz, 32 KHz.
Bucles.
Sonido sintetizado (SSEQ).
Partitura: SSEQ.
Notas musicales: SBNK, SWAR.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 29 / 36
91. Textos Imágenes Tipografías y audios Reto
Tipografías y audios
Audios
Sound DATa (.sdat)
Sonido digitalizado (STRM).
PCM, ADPCM, Procyon.
Mono y estéreo.
Sample format: 4 a 16 bits.
Sample rate: 16 KHz, 32 KHz.
Bucles.
Sonido sintetizado (SSEQ).
Partitura: SSEQ.
Notas musicales: SBNK, SWAR.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 29 / 36
92. Textos Imágenes Tipografías y audios Reto
Tipografías y audios
Audios
Sound DATa (.sdat)
Sonido digitalizado (STRM).
PCM, ADPCM, Procyon.
Mono y estéreo.
Sample format: 4 a 16 bits.
Sample rate: 16 KHz, 32 KHz.
Bucles.
Sonido sintetizado (SSEQ).
Partitura: SSEQ.
Notas musicales: SBNK, SWAR.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 29 / 36
93. Textos Imágenes Tipografías y audios Reto
Tipografías y audios
Audios
Sound DATa (.sdat)
Sonido digitalizado (STRM).
PCM, ADPCM, Procyon.
Mono y estéreo.
Sample format: 4 a 16 bits.
Sample rate: 16 KHz, 32 KHz.
Bucles.
Sonido sintetizado (SSEQ).
Partitura: SSEQ.
Notas musicales: SBNK, SWAR.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 29 / 36
94. Textos Imágenes Tipografías y audios Reto
Tipografías y audios
Audios
Sound DATa (.sdat)
Sonido digitalizado (STRM).
PCM, ADPCM, Procyon.
Mono y estéreo.
Sample format: 4 a 16 bits.
Sample rate: 16 KHz, 32 KHz.
Bucles.
Sonido sintetizado (SSEQ).
Partitura: SSEQ.
Notas musicales: SBNK, SWAR.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 29 / 36
95. Textos Imágenes Tipografías y audios Reto
Tipografías y audios
Audios
Sound DATa (.sdat)
Sonido digitalizado (STRM).
PCM, ADPCM, Procyon.
Mono y estéreo.
Sample format: 4 a 16 bits.
Sample rate: 16 KHz, 32 KHz.
Bucles.
Sonido sintetizado (SSEQ).
Partitura: SSEQ.
Notas musicales: SBNK, SWAR.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 29 / 36
96. Textos Imágenes Tipografías y audios Reto
Tipografías y audios
Audios
Sound DATa (.sdat)
Sonido digitalizado (STRM).
PCM, ADPCM, Procyon.
Mono y estéreo.
Sample format: 4 a 16 bits.
Sample rate: 16 KHz, 32 KHz.
Bucles.
Sonido sintetizado (SSEQ).
Partitura: SSEQ.
Notas musicales: SBNK, SWAR.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 29 / 36
97. Textos Imágenes Tipografías y audios Reto
Tipografías y audios
Audios
Sound DATa (.sdat)
Sonido digitalizado (STRM).
PCM, ADPCM, Procyon.
Mono y estéreo.
Sample format: 4 a 16 bits.
Sample rate: 16 KHz, 32 KHz.
Bucles.
Sonido sintetizado (SSEQ).
Partitura: SSEQ.
Notas musicales: SBNK, SWAR.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 29 / 36
98. Textos Imágenes Tipografías y audios Reto
Reto
CHALLENGE TIME!
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 30 / 36
99. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Contenido sorpresa
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 31 / 36
100. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Contenido sorpresa
¿/Test/picture.narc?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 31 / 36
101. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Contenido sorpresa
¿/Test/picture.narc?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 31 / 36
102. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Contenido sorpresa
¿/Test/picture.narc? ¿/Test/BgMap.narc?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 31 / 36
103. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Contenido sorpresa
¿/Test/picture.narc? ¿/Test/BgMap.narc?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 31 / 36
104. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Historia
Modificar cuarto diálogo.
Modificar imagen.
Modificar tipografía.
Modificar mapa.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 32 / 36
105. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Historia
Modificar cuarto diálogo.
Modificar imagen.
Modificar tipografía.
Modificar mapa.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 32 / 36
106. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Historia
Modificar cuarto diálogo.
Modificar imagen.
Modificar tipografía.
Modificar mapa.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 32 / 36
107. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Historia
Modificar cuarto diálogo.
Modificar imagen.
Modificar tipografía.
Modificar mapa.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 32 / 36
108. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Historia: Punteros
Modificar cuarto diálogo.
Ruta: /Spanish/Message/demo.bmg.
Punteros en la sección INF1 (cabecera: 16 B).
Hay 0x08 bytes por texto.
Primeros 0x04 bytes es el puntero.
Puntero i: OffsetINF1 + 16 + i ∗ 8 = 48h.
Punteros relativos a 0x0AE8.
Ignorar 6 bytes después de 001Ah.
Añadir pausa al final con:
1A 00 08 01 0E 00 7D 00.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 33 / 36
109. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Historia: Imágenes
Modificar imagen
Ruta: /Event/Kamishibai/kami1/kami1-01.
Seleccionar Replace palette.
Importar imagen con mismas dimensiones:
Ancho: 256 píxeles.
Alto: 192 píxeles.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 34 / 36
110. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Historia: Tipografía
Modificar tipografía
Cambiar primer texto por:
2xdx = x2
+ K
Tipografía: /Font/zeldaDS_15.nftr.
Reemplazar caracteres japoneses por: y 2
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 35 / 36
111. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Mapas
Modificar mapa
Ruta: /Map/isle_main/
course.bin: texturas del mapa.
map00.bin: mapa principal.
isle_main_00.nsbmd: terreno 3D.
isle_main_00.zmb: Mapa de colisiones y
objetos.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 36 / 36
112. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Mapas
Modificar mapa
Ruta: /Map/isle_main/
course.bin: texturas del mapa.
map00.bin: mapa principal.
isle_main_00.nsbmd: terreno 3D.
isle_main_00.zmb: Mapa de colisiones y
objetos.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 36 / 36
113. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Mapas
Modificar mapa
Ruta: /Map/isle_main/
course.bin: texturas del mapa.
map00.bin: mapa principal.
isle_main_00.nsbmd: terreno 3D.
isle_main_00.zmb: Mapa de colisiones y
objetos.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 36 / 36
114. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Mapas
Modificar mapa
Ruta: /Map/isle_main/
course.bin: texturas del mapa.
map00.bin: mapa principal.
isle_main_00.nsbmd: terreno 3D.
isle_main_00.zmb: Mapa de colisiones y
objetos.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 36 / 36
115. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Mapas
Modificar mapa
Ruta: /Map/isle_main/
course.bin: texturas del mapa.
map00.bin: mapa principal.
isle_main_00.nsbmd: terreno 3D.
isle_main_00.zmb: Mapa de colisiones y
objetos.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 36 / 36
116. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Mapas
Modificar mapa
Sección BMOR: mapa de colisiones.
Sección PRAW: salidas del mapa.
Sección BOPM: objetos del terreno:
0x1C bytes por objeto.
Primeros dos bytes: tipo de objeto.
Siguientes dos bytes: posición X e Y.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 36 / 36
117. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Mapas
Modificar mapa
Sección BMOR: mapa de colisiones.
Sección PRAW: salidas del mapa.
Sección BOPM: objetos del terreno:
0x1C bytes por objeto.
Primeros dos bytes: tipo de objeto.
Siguientes dos bytes: posición X e Y.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 36 / 36
118. Textos Imágenes Tipografías y audios Reto
The Legend of Zelda: Phantom Hourglass
Mapas
Modificar mapa
Sección BMOR: mapa de colisiones.
Sección PRAW: salidas del mapa.
Sección BOPM: objetos del terreno:
0x1C bytes por objeto.
Primeros dos bytes: tipo de objeto.
Siguientes dos bytes: posición X e Y.
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Abril de 2016 36 / 36