1. Rama estudiantil de IEEE en la UGR
Introducción al ROM Hacking:
Primeros pasos
Benito Palacios Sánchez
benito.palaciossanchez.es@ieee.org
30 de marzo de 2016
2. Introducción Hello World! Programas de edición Reto
Sobre mi...
¿Quién soy?
Benito Palacios Sánchez
@pleonex
Graduado en Ingeniería de Tecnologías de Telecomunicación
Trabajo Fin de Grado sobre seguridad en videojuegos
Miembro de IEEE Student Branch of Granada
>6 años en el mundo del ROM Hacking
Miembro de GradienWords
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 2 / 35
3. Introducción Hello World! Programas de edición Reto
Sobre mi...
¿Quién soy?
Benito Palacios Sánchez
@pleonex
Graduado en Ingeniería de Tecnologías de Telecomunicación
Trabajo Fin de Grado sobre seguridad en videojuegos
Miembro de IEEE Student Branch of Granada
>6 años en el mundo del ROM Hacking
Miembro de GradienWords
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 2 / 35
4. Introducción Hello World! Programas de edición Reto
Sobre mi...
¿Quién soy?
Benito Palacios Sánchez
@pleonex
Graduado en Ingeniería de Tecnologías de Telecomunicación
Trabajo Fin de Grado sobre seguridad en videojuegos
Miembro de IEEE Student Branch of Granada
>6 años en el mundo del ROM Hacking
Miembro de GradienWords
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 2 / 35
5. Introducción Hello World! Programas de edición Reto
Sobre mi...
¿Quién soy?
Benito Palacios Sánchez
@pleonex
Graduado en Ingeniería de Tecnologías de Telecomunicación
Trabajo Fin de Grado sobre seguridad en videojuegos
Miembro de IEEE Student Branch of Granada
>6 años en el mundo del ROM Hacking
Miembro de GradienWords
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 2 / 35
6. Introducción Hello World! Programas de edición Reto
Sobre mi...
¿Quién soy?
Benito Palacios Sánchez
@pleonex
Graduado en Ingeniería de Tecnologías de Telecomunicación
Trabajo Fin de Grado sobre seguridad en videojuegos
Miembro de IEEE Student Branch of Granada
>6 años en el mundo del ROM Hacking
Miembro de GradienWords
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 2 / 35
7. Introducción Hello World! Programas de edición Reto
Mis proyectos
Tinke
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 3 / 35
8. Introducción Hello World! Programas de edición Reto
Mis proyectos
Ninokuni: El Mago de las Tinieblas
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 4 / 35
9. Introducción Hello World! Programas de edición Reto
Mis proyectos
Fan traducciones
Pokémon Conquest
Final Fantasy: Four Heroes
Profesor Layton: London Life
Shining Force Feather
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 5 / 35
10. Introducción Hello World! Programas de edición Reto
Mis proyectos
Fan traducciones
Pokémon Conquest
Final Fantasy: Four Heroes
Profesor Layton: London Life
Shining Force Feather
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 5 / 35
11. Introducción Hello World! Programas de edición Reto
Mis proyectos
Fan traducciones
Pokémon Conquest
Final Fantasy: Four Heroes
Profesor Layton: London Life
Shining Force Feather
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 5 / 35
12. Introducción Hello World! Programas de edición Reto
Mis proyectos
Fan traducciones
Pokémon Conquest
Final Fantasy: Four Heroes
Profesor Layton: London Life
Shining Force Feather
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 5 / 35
13. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Érase una vez...
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 6 / 35
14. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
¿Qué es un fichero?
¿ ?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 7 / 35
15. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
¿Qué hay dentro de un fichero?
¿Qué hay para que veamos...
...imágenes?
...vídeos?
...música?
¿Cómo lo vemos eso?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 8 / 35
16. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
¿Qué hay dentro de un fichero?
¿Qué hay para que veamos...
...imágenes?
...vídeos?
...música?
¿Cómo lo vemos eso?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 8 / 35
17. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
¿Qué hay dentro de un fichero?
¿Qué hay para que veamos...
...imágenes?
...vídeos?
...música?
¿Cómo lo vemos eso?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 8 / 35
18. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
¿Qué hay dentro de un fichero?
¿Qué hay para que veamos...
...imágenes?
...vídeos?
...música?
¿Cómo lo vemos eso?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 8 / 35
19. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
¿Qué hay dentro de un fichero?
¿Qué hay para que veamos...
...imágenes?
...vídeos?
...música?
¿Cómo lo vemos eso?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 8 / 35
20. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
La parte cruda de los archivos
Figura: BMP visto con editor hexadecimal HxD
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 9 / 35
21. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
Posición Tamaño Descripción
Cabecera estándar
0x00 0x02 Magic stamp: BM
0x02 0x04 Tamaño del fichero
0x06 0x04 Reservado
0x0A 0x04 Puntero a los datos de la imagen
Cabecera DIB
0x00 0x04 Tamaño de esta cabecera
0x04 0x04 Ancho de la imagen
0x06 0x04 Alto de la imagen
0x08 0x02 Número de planos de color (1)
0x0A 0x02 Número de bits por píxel
Paleta de colores
Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 10 / 35
22. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
23. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
24. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
25. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
26. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
27. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
28. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
29. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
30. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
31. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
32. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
33. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
34. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
35. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
Especificaciones (BMP)
1 Cabecera estándar
1 Magic stamp
2 Tamaño fichero
3 Reservado
4 Puntero datos
2 Cabecera DIB
1 Tamaño DIB
2 Ancho
3 Alto
4 Planos de color
5 BPP
6 Meta-datos
3 Paleta
4 Píxeles
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 11 / 35
36. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
¿Qué hay dentro de un juego?
¿ ?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 12 / 35
37. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
¿Qué hay dentro de un juego?
¿ ? →
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 12 / 35
38. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
La parte cruda de un juego
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 13 / 35
39. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
¿Y ahora? ¿Y la especificación?
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 14 / 35
40. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
ROM Hacking
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 15 / 35
41. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
ROM Hacking
Propósito:
Fan traducciones
Mods
Extraer recursos
Curiosidad
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 16 / 35
42. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
ROM Hacking
Propósito:
Fan traducciones
Mods
Extraer recursos
Curiosidad
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 16 / 35
43. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
ROM Hacking
Propósito:
Fan traducciones
Mods
Extraer recursos
Curiosidad
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 16 / 35
44. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
ROM Hacking
Propósito:
Fan traducciones
Mods
Extraer recursos
Curiosidad
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 16 / 35
45. Introducción Hello World! Programas de edición Reto
¿Qué es ROM Hacking?
ROM Hacking
Propósito:
Fan traducciones
Mods
Extraer recursos
Curiosidad
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 16 / 35
46. Introducción Hello World! Programas de edición Reto
Temario
Contenido del curso
Introducción al ROM Hacking
1 Primeros pasos
1 ¿Qué es ROM Hacking?
2 Hello World!
3 Reto
2 Formatos comunes en juegos
1 Textos
2 Imágenes
3 Tipografías y audios
4 Reto
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 17 / 35
47. Introducción Hello World! Programas de edición Reto
Temario
Contenido del curso
Introducción al ROM Hacking
1 Primeros pasos
1 ¿Qué es ROM Hacking?
2 Hello World!
3 Reto
2 Formatos comunes en juegos
1 Textos
2 Imágenes
3 Tipografías y audios
4 Reto
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 17 / 35
48. Introducción Hello World! Programas de edición Reto
Hello World!
ROM HACKING TIME!
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 18 / 35
49. Introducción Hello World! Programas de edición Reto
NitroROM
Especificación de juegos de NDS
GBATEK
Gameboy Advance / Nintendo DS / DSi - Technical Info
Trabajo de Martin Korth en el desarrollo de no$gba.
http://problemkaputt.de/gbatek.htm
Cabecera
Binario ARM9
Overlays ARM9
Binario ARM7
Overlays ARM7
File Name Table
File Allocation Table
Banner
Archivos
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 19 / 35
50. Introducción Hello World! Programas de edición Reto
NitroROM
Especificación de juegos de NDS
GBATEK
Gameboy Advance / Nintendo DS / DSi - Technical Info
Trabajo de Martin Korth en el desarrollo de no$gba.
http://problemkaputt.de/gbatek.htm
Cabecera
Binario ARM9
Overlays ARM9
Binario ARM7
Overlays ARM7
File Name Table
File Allocation Table
Banner
Archivos
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 19 / 35
51. Introducción Hello World! Programas de edición Reto
NitroROM
Especificación de juegos de NDS
GBATEK
Gameboy Advance / Nintendo DS / DSi - Technical Info
Trabajo de Martin Korth en el desarrollo de no$gba.
http://problemkaputt.de/gbatek.htm
Cabecera
Binario ARM9
Overlays ARM9
Binario ARM7
Overlays ARM7
File Name Table
File Allocation Table
Banner
Archivos
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 19 / 35
52. Introducción Hello World! Programas de edición Reto
NitroROM
Especificación de juegos de NDS
GBATEK
Gameboy Advance / Nintendo DS / DSi - Technical Info
Trabajo de Martin Korth en el desarrollo de no$gba.
http://problemkaputt.de/gbatek.htm
Cabecera
Binario ARM9
Overlays ARM9
Binario ARM7
Overlays ARM7
File Name Table
File Allocation Table
Banner
Archivos
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 19 / 35
53. Introducción Hello World! Programas de edición Reto
NitroROM
Especificación de juegos de NDS
GBATEK
Gameboy Advance / Nintendo DS / DSi - Technical Info
Trabajo de Martin Korth en el desarrollo de no$gba.
http://problemkaputt.de/gbatek.htm
Cabecera
Binario ARM9
Overlays ARM9
Binario ARM7
Overlays ARM7
File Name Table
File Allocation Table
Banner
Archivos
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 19 / 35
54. Introducción Hello World! Programas de edición Reto
NitroROM
Especificación de juegos de NDS
GBATEK
Gameboy Advance / Nintendo DS / DSi - Technical Info
Trabajo de Martin Korth en el desarrollo de no$gba.
http://problemkaputt.de/gbatek.htm
Cabecera
Binario ARM9
Overlays ARM9
Binario ARM7
Overlays ARM7
File Name Table
File Allocation Table
Banner
Archivos
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 19 / 35
55. Introducción Hello World! Programas de edición Reto
Conceptos
Números hexadecimales
Decimal: 0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
Binario: 0 1
0 1 10 11 100 101 110 111 1000 ...
0 1 2 3 4 5 6 7 8
Octal: 0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 10 11 12 13 14 ...
0 1 2 3 4 5 6 7 8 9 10 11 12
Hexadecimal: 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 ...
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 20 / 35
56. Introducción Hello World! Programas de edición Reto
Conceptos
Números hexadecimales
Decimal: 0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
Binario: 0 1
0 1 10 11 100 101 110 111 1000 ...
0 1 2 3 4 5 6 7 8
Octal: 0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 10 11 12 13 14 ...
0 1 2 3 4 5 6 7 8 9 10 11 12
Hexadecimal: 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 ...
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 20 / 35
57. Introducción Hello World! Programas de edición Reto
Conceptos
Números hexadecimales
Decimal: 0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
Binario: 0 1
0 1 10 11 100 101 110 111 1000 ...
0 1 2 3 4 5 6 7 8
Octal: 0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 10 11 12 13 14 ...
0 1 2 3 4 5 6 7 8 9 10 11 12
Hexadecimal: 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 ...
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 20 / 35
58. Introducción Hello World! Programas de edición Reto
Conceptos
Números hexadecimales
Decimal: 0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
Binario: 0 1
0 1 10 11 100 101 110 111 1000 ...
0 1 2 3 4 5 6 7 8
Octal: 0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 10 11 12 13 14 ...
0 1 2 3 4 5 6 7 8 9 10 11 12
Hexadecimal: 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 ...
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 20 / 35
59. Introducción Hello World! Programas de edición Reto
Conceptos
Números hexadecimales
Decimal: 0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
Binario: 0 1
0 1 10 11 100 101 110 111 1000 ...
0 1 2 3 4 5 6 7 8
Octal: 0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 10 11 12 13 14 ...
0 1 2 3 4 5 6 7 8 9 10 11 12
Hexadecimal: 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 ...
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 20 / 35
60. Introducción Hello World! Programas de edición Reto
Conceptos
Números hexadecimales
Prefijo 0x o sufijo h
0xA, FBh, 0xCA, FEh
Fácil representación de enteros:
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 21 / 35
61. Introducción Hello World! Programas de edición Reto
Conceptos
Números hexadecimales
Prefijo 0x o sufijo h
0xA, FBh, 0xCA, FEh
Fácil representación de enteros:
# Rango Ejemplo Bytes Bits Otros nombres
1 [0, 15] 0xC ½ 4
2 [0, 255] 0xC0 1 8 byte
4 [0, 65,535] 0x0200 2 16 ushort, WORD
8 [0, 4,294,967,295] 0xB7000000 4 32 uint, DWORD
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 21 / 35
62. Introducción Hello World! Programas de edición Reto
Conceptos
Endianness
Orden en el que se guardan los bytes que forman valores
mayores a 8 bits (ushort, uint, ulong, ...). MSB →LSB.
Big Endian:
Little Endian (más común):
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 22 / 35
63. Introducción Hello World! Programas de edición Reto
Conceptos
Endianness
Orden en el que se guardan los bytes que forman valores
mayores a 8 bits (ushort, uint, ulong, ...). MSB →LSB.
Big Endian:
Little Endian (más común):
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 22 / 35
64. Introducción Hello World! Programas de edición Reto
Conceptos
Endianness
Orden en el que se guardan los bytes que forman valores
mayores a 8 bits (ushort, uint, ulong, ...). MSB →LSB.
Big Endian:
Little Endian (más común):
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 22 / 35
65. Introducción Hello World! Programas de edición Reto
Investigando un juego
Tinke
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 23 / 35
66. Introducción Hello World! Programas de edición Reto
Investigando un juego
Tinke
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 23 / 35
67. Introducción Hello World! Programas de edición Reto
Investigando un juego
Tipos de ficheros
Paleta
Tiles
Map
Sprites
Animaciones
Modelos 3D
Texturas
Imagen completa
Texto
Tipografía
Scripts
Archivo comprimido
Paquete
Música
Vídeo
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 24 / 35
68. Introducción Hello World! Programas de edición Reto
Editar juegos
Modificando textos
1 Localizar texto a modificar
2 Abrir juego en Tinke
3 Localizar textos
4 Extraer archivo
5 Modificar con editor
6 Importar archivo
7 Generar ROM
8 Probar en DeSmuME
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 25 / 35
69. Introducción Hello World! Programas de edición Reto
Editar juegos
Modificando textos
1 Localizar texto a modificar
2 Abrir juego en Tinke
3 Localizar textos
4 Extraer archivo
5 Modificar con editor
6 Importar archivo
7 Generar ROM
8 Probar en DeSmuME
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 25 / 35
70. Introducción Hello World! Programas de edición Reto
Editar juegos
Modificando textos
1 Localizar texto a modificar
2 Abrir juego en Tinke
3 Localizar textos
4 Extraer archivo
5 Modificar con editor
6 Importar archivo
7 Generar ROM
8 Probar en DeSmuME
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 25 / 35
71. Introducción Hello World! Programas de edición Reto
Editar juegos
Modificando textos
1 Localizar texto a modificar
2 Abrir juego en Tinke
3 Localizar textos
4 Extraer archivo
5 Modificar con editor
6 Importar archivo
7 Generar ROM
8 Probar en DeSmuME
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 25 / 35
72. Introducción Hello World! Programas de edición Reto
Editar juegos
Modificando textos
1 Localizar texto a modificar
2 Abrir juego en Tinke
3 Localizar textos
4 Extraer archivo
5 Modificar con editor
6 Importar archivo
7 Generar ROM
8 Probar en DeSmuME
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 25 / 35
73. Introducción Hello World! Programas de edición Reto
Editar juegos
Modificando textos
1 Localizar texto a modificar
2 Abrir juego en Tinke
3 Localizar textos
4 Extraer archivo
5 Modificar con editor
6 Importar archivo
7 Generar ROM
8 Probar en DeSmuME
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 25 / 35
74. Introducción Hello World! Programas de edición Reto
Editar juegos
Modificando textos
1 Localizar texto a modificar
2 Abrir juego en Tinke
3 Localizar textos
4 Extraer archivo
5 Modificar con editor
6 Importar archivo
7 Generar ROM
8 Probar en DeSmuME
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 25 / 35
75. Introducción Hello World! Programas de edición Reto
Editar juegos
Modificando textos
1 Localizar texto a modificar
2 Abrir juego en Tinke
3 Localizar textos
4 Extraer archivo
5 Modificar con editor
6 Importar archivo
7 Generar ROM
8 Probar en DeSmuME
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 25 / 35
76. Introducción Hello World! Programas de edición Reto
Editar juegos
Modificando textos
1 Localizar texto a modificar
2 Abrir juego en Tinke
3 Localizar textos
4 Extraer archivo
5 Modificar con editor
6 Importar archivo
7 Generar ROM
8 Probar en DeSmuME
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 25 / 35
77. Introducción Hello World! Programas de edición Reto
Publicar cambios
Parches
Solo contienen las modificaciones
No subir el juego modificado
Tamaño pequeño (entre 1 y 20 MB)
Formatos comunes: IPS y xDelta
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 26 / 35
78. Introducción Hello World! Programas de edición Reto
Publicar cambios
Parches
Solo contienen las modificaciones
No subir el juego modificado
Tamaño pequeño (entre 1 y 20 MB)
Formatos comunes: IPS y xDelta
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 26 / 35
79. Introducción Hello World! Programas de edición Reto
Publicar cambios
Parches
Solo contienen las modificaciones
No subir el juego modificado
Tamaño pequeño (entre 1 y 20 MB)
Formatos comunes: IPS y xDelta
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 26 / 35
80. Introducción Hello World! Programas de edición Reto
Publicar cambios
Parches
Solo contienen las modificaciones
No subir el juego modificado
Tamaño pequeño (entre 1 y 20 MB)
Formatos comunes: IPS y xDelta
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 26 / 35
81. Introducción Hello World! Programas de edición Reto
Publicar cambios
xDelta
Windows: xdelta UI
http://www.romhacking.net/utilities/598/
Mac OS X: Multipatch
http://projects.sappharad.com/tools/
multipatch.html
Linux: xdelta
Parchear:
xdelta -d -s ORIGINAL PARCHE
Crear parche:
xdelta -9 -s ORIGINAL MODIFICADO
PARCHE
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 27 / 35
82. Introducción Hello World! Programas de edición Reto
Publicar cambios
xDelta
Windows: xdelta UI
http://www.romhacking.net/utilities/598/
Mac OS X: Multipatch
http://projects.sappharad.com/tools/
multipatch.html
Linux: xdelta
Parchear:
xdelta -d -s ORIGINAL PARCHE
Crear parche:
xdelta -9 -s ORIGINAL MODIFICADO
PARCHE
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 27 / 35
83. Introducción Hello World! Programas de edición Reto
Publicar cambios
xDelta
Windows: xdelta UI
http://www.romhacking.net/utilities/598/
Mac OS X: Multipatch
http://projects.sappharad.com/tools/
multipatch.html
Linux: xdelta
Parchear:
xdelta -d -s ORIGINAL PARCHE
Crear parche:
xdelta -9 -s ORIGINAL MODIFICADO
PARCHE
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 27 / 35
84. Introducción Hello World! Programas de edición Reto
Pokémon
Advanced Map
Proyecto: http://ampage.no-ip.info/
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 28 / 35
85. Introducción Hello World! Programas de edición Reto
Pokémon
Spiky’s DS Map Editor
Proyecto: https://github.com/MarcRiera/SDSME
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 29 / 35
86. Introducción Hello World! Programas de edición Reto
New Super Mario Bros DS
NSMB Editor
Proyecto: https://github.com/Dirbaio/NSMB-Editor
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 30 / 35
87. Introducción Hello World! Programas de edición Reto
Super Mario 64 DS
Super Mario 64 Editor
Descarga: http://www.romhacking.net/utilities/764
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 31 / 35
88. Introducción Hello World! Programas de edición Reto
Ni no kuni
NinoCompiler
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 32 / 35
89. Introducción Hello World! Programas de edición Reto
Ni no kuni
NinoCompiler
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 32 / 35
90. Introducción Hello World! Programas de edición Reto
Ni no kuni
NinoCompiler
→
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 32 / 35
91. Introducción Hello World! Programas de edición Reto
Ni no kuni
NinoCompiler
→
Proyecto: http://gradienwords.com
GitHub: https://github.com/pleonex/Ninokuni
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 32 / 35
92. Introducción Hello World! Programas de edición Reto
Reto
CHALLENGE TIME!
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 33 / 35
93. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Objetivo
Crear un puzle
Título (script/puzzletitle)
Localización (script/qinfo)
Descripción (qtext)
Pistas (qtext)
Respuesta (qtext)
Picarats (script/pcarot)
Entrada (script/qscript)
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 34 / 35
94. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Objetivo
Crear un puzle
Título (script/puzzletitle)
Localización (script/qinfo)
Descripción (qtext)
Pistas (qtext)
Respuesta (qtext)
Picarats (script/pcarot)
Entrada (script/qscript)
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 34 / 35
95. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Objetivo
Crear un puzle
Título (script/puzzletitle)
Localización (script/qinfo)
Descripción (qtext)
Pistas (qtext)
Respuesta (qtext)
Picarats (script/pcarot)
Entrada (script/qscript)
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 34 / 35
96. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Objetivo
Crear un puzle
Título (script/puzzletitle)
Localización (script/qinfo)
Descripción (qtext)
Pistas (qtext)
Respuesta (qtext)
Picarats (script/pcarot)
Entrada (script/qscript)
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 34 / 35
97. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Objetivo
Crear un puzle
Título (script/puzzletitle)
Localización (script/qinfo)
Descripción (qtext)
Pistas (qtext)
Respuesta (qtext)
Picarats (script/pcarot)
Entrada (script/qscript)
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 34 / 35
98. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Objetivo
Crear un puzle
Título (script/puzzletitle)
Localización (script/qinfo)
Descripción (qtext)
Pistas (qtext)
Respuesta (qtext)
Picarats (script/pcarot)
Entrada (script/qscript)
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 34 / 35
99. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Objetivo
Crear un puzle
Título (script/puzzletitle)
Localización (script/qinfo)
Descripción (qtext)
Pistas (qtext)
Respuesta (qtext)
Picarats (script/pcarot)
Entrada (script/qscript)
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 34 / 35
100. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Pistas sobre los scripts
Primeros 4 bytes es el tamaño del archivo
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 35 / 35
101. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Pistas sobre los scripts
Primeros 4 bytes es el tamaño del archivo
Se compone de múltiples comandos + argumentos
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 35 / 35
102. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Pistas sobre los scripts
Primeros 4 bytes es el tamaño del archivo
Se compone de múltiples comandos + argumentos
Despues de 0x0000 va el ID del comando
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 35 / 35
103. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Pistas sobre los scripts
Primeros 4 bytes es el tamaño del archivo
Se compone de múltiples comandos + argumentos
Despues de 0x0000 va el ID del comando
El formato de los argumentos es tipo + valor
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 35 / 35
104. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Pistas sobre los scripts
Primeros 4 bytes es el tamaño del archivo
Se compone de múltiples comandos + argumentos
Despues de 0x0000 va el ID del comando
El formato de los argumentos es tipo + valor
El tipo 0x0001 es un entero de 32 bits
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 35 / 35
105. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Pistas sobre los scripts
Primeros 4 bytes es el tamaño del archivo
Se compone de múltiples comandos + argumentos
Despues de 0x0000 va el ID del comando
El formato de los argumentos es tipo + valor
El tipo 0x0001 es un entero de 32 bits
El tipo 0x0003 es una cadena de caracteres de longitud
variable
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 35 / 35
106. Introducción Hello World! Programas de edición Reto
Puzles en Profesor Layton
Pistas sobre los scripts
Primeros 4 bytes es el tamaño del archivo
Se compone de múltiples comandos + argumentos
Despues de 0x0000 va el ID del comando
El formato de los argumentos es tipo + valor
El tipo 0x0001 es un entero de 32 bits
El tipo 0x0003 es una cadena de caracteres de longitud
variable
Los scripts terminan con 0x000C
Benito Palacios Sánchez (IEEE SB UGR) Introducción al ROM Hacking Marzo de 2016 35 / 35