22874-GBA_|_Otros_|_Programa_como_intro_\[GBA_-_Avanzado]
#0
cosarara97 12296
¿Te has fijado alguna vez en la intro MUGS? Sí, esa cosa infame que encuentras con algunos dumps de Ruby, que muestra una pequeña animación y un texto que te acusa de script kiddie. ¿Y no se te ha ocurrido preguntarte nunca cómo hacer algo así?
Bueno, eso es exactamente lo que explico.
Debería ser fácil de seguir tanto en sistemas GNU/Linux como MacOSX. Windows es otra historia con la que ni me voy a pelear.

Entonces, la idea es simple:
1 - La primera instrucción del juego (la que hay en la dirección 0 del ROM) es una rama (branch en inglés, dicho de toda instrucción que hace saltar el procesador de un punto a otro del programa). La instrucción ARM "b", para ser más exactos. ¿Y qué hace esta instrucción? Bueno, pues básicamente salta. Es como un jump o goto de nuestros scripts.
Tenemos que cambiar esta instrucción para hacer que en vez de saltar al inicio del juego salte a nuestra intro.
2 - Podemos escribir la rutina de nuestra intro en ASM puro y duro, pero como no somos Real Programers queremos escribir en C y usar las bonita librería libgba. Así que vamos a usar devkitpro con unos cuantos scripts modificados para nuestros fines.
3 - Al acabar de ejecutar nuestro código, debemos ir realmente al juego, y enviar el procesador a donde se dirigía originalmente, 0x080000d0.

Las instrucciones para crear la nueva instrucción de salto inicial, hacer que nuestro código vuelva al juego y preparar el binario de nuestra intro (que deberemos colocar en su sitio con un editor hexadecimal) se encuentran en el archivo README - en inglés -, dentro de este archivo, junto con el material necesario:
intro_hack.tar.gz

A parte de esto, es necesario tener instalado devkitpro con devkitARM y libgba, y las variables de entorno DEVKITPRO y DEVKITARM bien configuradas. También es necesaria la utilidad make.
Si tenéis alguna pregunta, no dudéis en planteármela como respuesta a este tema o mediante MP ;) Si alguien intenta seguir este tutorial me quedaré flipando, lol.