Registrarse

[Otros] E | Eliminar intro de Birch ó el lotad del principio

kakarotto

Leyenda de WaH
¡Hola Waheros!
Estoy aquí de nuevo para mostraros dos tutoriales en uno aunque como los dos son relacionados, lo redactaré en uno solo.

Para realizar el tutorial solo basta con tener HXD ( o tu editor hexadecimal favorito ).

He estructurado los dos tutoriales con spoiler para que vayáis directamente al que os interesa:

En realidad no lo elimina del todo, se ve el inicio una fracción de segundo, solicita tu nombre por defecto y empieza el juego en el interior del camion.

Para ello navega hasta el offset 308AC y sustituye B1 08 por 91 10 y listo.

A veces solo nos interesa la típica introducción del profesor ( o otro sprite ) sin ninguna animación por el estilo. De esta manera la presentación del lotad, la animación de la pokeball y la ultima escena donde sale birch y lotad desaparecerán.

Para ello navega al offset 30A20 e introduce los bytes FF FF FF 09. Esto hará que salte la escena donde aparece lotad y la animacion de la pokeball, al estar asociado con un puntero de texto.

Por último navega al offset 311F8 en introduce los bytes C5 14

De esta manera desaparecerá el Lotad al principio de la animación y justo pongas tu nombre por defecto en el juego y pulses "YES" empezará el juego en el interior del camión.


*Actualización 11/12/17*

@Samu aclara varios puntos interesantes sobre la intro:
08031104: Se ejecuta tras poner el nombre.
08031144: Se ejecuta tras la función anterior repetidas veces.
08031188: Se sigue ejecutando hasta que se responde la pregunta Y/N sobre el nombre.
08031220: Se ejecuta repetidamente tras responder "yes".
08031258: Se ejecuta tras salir del bucle de la anterior rutina.
0803133C: Se ejecuta mientras el profesor habla de nuevo.
080313E4: Desaparece el profesor.
080314C4: Dibuja el sprite del protagonista.
08031580: Fade del sprite y lo hace pequeño.
080316BC: No he prestado atención, se ejecuta al terminar la anterior.
08031630: Rutina final, inicia el juego y nos coloca en el mapa inicial.

en 03005D90 se encuentra el pointer dinámico de la WRAM donde están almacenados los datos del jugador, entre ellos el nombre del jugador (los 7 primeros bytes, 1 byte por letra). Lo único que hay que hacer es una rutina que cargue el pointer de la WRAM y escriba los valores deseados en los 7 primeros bytes.

Si por otro lado lo que quieres es saltarte absolutamente toda la intro excepto la petición del nombre tienes que hacer los siguientes cambios:
En la dirección 080308AC sustituyes "B1 08" por "91 10".
En la dirección 08031254 sustituyes "59 12" por "31 16".
Y bueno eso es todo waheros, espero que este tutorial sea de vuestro agrado y no haya dudas al respecto.

PD: Dar créditos a Danny0317 de pokecommunity por el puntapié inicial y sobre todo nombrar a @Andrea , @Kaiser de Emperana por intentar echarme una mano.

Un saludo.


EXTRA
Eliminar música fondo
08030872: 00

Eliminar animación y fondo
08030882: 00 00 00 00

creditos a Touched de Pokecommunity
 
Última edición:

MichaKing

Grafista avanzado
Respuesta: EM | Eliminar intro de Birch ó el lotad del principio


Juraría haber visto algo similar por alguna parte de Wah, pero en caso de que no fuese así, agradezco mucho este "tutorial" ya que es bastante útil para todos aquellos que no piensan reciclar nada de la rom, y más cuando ahora Emerald es técnicamente la mejor para hackear con el reciente auge y fama que esta teniendo. Parece una tontería que cambiando unos simples offsets se logre hacer una gran diferencia, pero bueno, supongo que ahí radica la magia del Romhacking.

~MichaKing
 

Samu

Miembro insignia
Miembro insignia
Re: EM | Eliminar intro de Birch ó el lotad del principio

Bueno, como ya te he dicho por privado, muchas gracias por el aporte. He estado mirando un poco las rutinas del rom respecto a la intro y ya se como saltarme directamente la intro, sin que te pida el nombre ni nada.

En la dirección 080308AC que mencionas, en vez de sustituir "B1 08" por "91 10" lo sustituyes por "31 16".

Decir que si haces esto debes o bien establecer el nombre con una rutina ASM o bien llamar a la rutina del juego para pedirte el nombre dentro del mismo. (el offset de esta rutina es 08031090+1).

Si por otro lado lo que quieres es saltarte absolutamente toda la intro excepto la petición del nombre tienes que hacer los siguientes cambios:
  • En la dirección 080308AC sustituyes "B1 08" por "91 10".
  • En la dirección 08031254 sustituyes "59 12" por "31 16".

Se pueden hacer muchos cambios en la intro, por no decir que se puede cambiar lo que te de la gana. Lo único que hay que hacer es editar los punteros que controlan los saltos entre las distintas rutinas que conforman la intro del profesor. Voy a dejar una lista con las direcciones de inicio de todas las rutinas de la intro del profesor (puede que me haya dejado alguna) junto con una breve descripción de las mismas. Bueno, más que una descripción, indico cuando se ejecuta cada una (tampoco es que me haya metido a mirar en profundidad que hacen).

  • 08031104: Se ejecuta tras poner el nombre.
  • 08031144: Se ejecuta tras la función anterior repetidas veces.
  • 08031188: Se sigue ejecutando hasta que se responde la pregunta Y/N sobre el nombre.
  • 08031220: Se ejecuta repetidamente tras responder "yes".
  • 08031258: Se ejecuta tras salir del bucle de la anterior rutina.
  • 0803133C: Se ejecuta mientras el profesor habla de nuevo.
  • 080313E4: Desaparece el profesor.
  • 080314C4: Dibuja el sprite del protagonista.
  • 08031580: Fade del sprite y lo hace pequeño.
  • 080316BC: No he prestado atención, se ejecuta al terminar la anterior.
  • 08031630: Rutina final, inicia el juego y nos coloca en el mapa inicial.

PD: te recomendaría actualizar el post principal del hilo para que quede más completo :p.


Ah y otro pequeño apunte (para los que quieran establecer un nombre predefinido), en 03005D90 se encuentra el pointer dinámico de la WRAM donde están almacenados los datos del jugador, entre ellos el nombre del jugador (los 7 primeros bytes, 1 byte por letra). Lo único que hay que hacer es una rutina que cargue el pointer de la WRAM y escriba los valores deseados en los 7 primeros bytes y voilà.


EDIT:

Para saltarte totalmente la intro, sin que aparezca el "flash" que se comentaba, hay que hacer es lo siguiente:

Ir a la dirección "08030440" y sustituir "B1 07" por "31 16" haciendo así que el juego no ejecute ninguna de las rutinas (1-31) ya que hemos cambiado el pointer de la rutina 1 por un pointer a la rutina 32.

El problema es que ahora tenemos que establecer el nombre o bien mediante ASM (Si el nombre del protagonista es "fijo") o llamando a la función del juego para establecer nombre: "08031090" (rutina 21). "080E5074". (Es una función para establecer el nombre ajena a la intro).
Para que no nos haga el resto de la intro tras poner el nombre tenemos que editar los pointers de la rutina 21 concretamente:
  • Ir a "08031100" y sustituir "79 16 03 08" por "35 05 00 08". Esto nos devolverá al loop principal del juego.
  • Vamos a "08030440" y cambiamos "B1 07" por "91 10" (sustituimos el pointer a la [rutina1] por un pointer a la [rutina22]. Saltaremos desde el inicio directamente a la selección de nombre).
  • Vamos a "08031100" y cambiamos "79 16" por "31 16" (sustituimos el pointer a una subrutina por el pointer a la rutina final, saliendo al mundo de forma silenciosa. Sin flashazos).


Investigación completa

La introducción del profesor Birch de pokemon Emerald está formada por un conjunto de rutinas ASM (unas 35~), cada una de estas rutinas se ejecuta de una forma "lineal", una después de otra (quitando algunas excepciones en las que se puede volver a una rutina "anterior", por ejemplo si decimos que nuestro nombre está mal). De forma general tenemos el siguiente formato.
Código:
Rutina XX:
[Cuerpo de la rutina]
[Pointer a la siguiente rutina]
De esta manera podemos provocar "saltos" en la secuencia de ejecución de la introducción cambiando los distintos pointers de cada una de las rutinas. En este spoiler podéis encontrar todas y cada una de las rutinas de la intro y la dirección del pointer a la siguiente rutina que contienen (Deberían estar todas, DEBERÍAN)
Disclaimer: Las descripciones de las rutinas son más bien una indicación de cuando se ejecutan que de lo que hacen (muchas veces coincidirá, pero no siempre).

Código:
Rutina 00: Controla el "menú" que aparece tras pulsar start en la pantalla de título.
[Dirección de la rutina]: 08030698
[Pointer a la Rutina 01]: 08030440
Código:
Rutina 01: Inicio de la intro del profesor Birch.
[Dirección de la rutina]: 080307B0
[Pointer a la Rutina 02]: 080308AC
Código:
Rutina 02: (bucle) aparece el degradado de color verde en la parte superior.
[Dirección de la rutina]: 080308B0
[Pointer a la Rutina 03]: 08030904
Código:
Rutina 03: Aparece el sprite del prof. Birch.
[Dirección de la rutina]: 08030928
[Pointer a la Rutina 04]: 080309C8
Código:
Rutina 04: (repeat) Se escribe el texto.
[Dirección de la rutina]: 080309CC
[Pointer a la Rutina 05]: 08030A18
Código:
Rutina 05: "This is what we call a pokemon..."
[Dirección de la rutina]: 08030A2C
[Pointer a la Rutina 06]: 080323C8
Código:
Rutina 06: Aparece el pokemon 1.
[Dirección de la rutina]: 08030A70
[Pointer a la Rutina 07]: 08030B10
Código:
Rutina 07: Aparece el pokemon parte 2.
[Dirección de la rutina]: 08030B14
[Pointer a la Rutina 08]: 08030A6C
Código:
Rutina 08: Trashtalk del profesor coñazo.
[Dirección de la rutina]: 08030BCC
[Pointer a la Rutina 09]: 08030C14
Código:
Rutina 09: And you are ...?
[Dirección de la rutina]: 08030C18
[Pointer a la Rutina 10]: 08030C8C
Código:
Rutina 10: Transición. Desaparece el profesor.
[Dirección de la rutina]: 08030C90
[Pointer a la Rutina 11]: 08030CD0
Código:
Rutina 11: El profesor sigue desapareciendo (No os emocionéis, va a volver).
[Dirección de la rutina]: 08030CD4
[Pointer a la Rutina 12]: 08030D80
Código:
Rutina 12: Aparece el sprite del protagonista.
[Dirección de la rutina]: 08030D84
[Pointer a la Rutina 13]: 08030DC4
Código:
Rutina 13: Continua....
[Dirección de la rutina]: 08030DC8
[Pointer a la Rutina 14]: 08030E04
Código:
Rutina 14: "Are you a boy or a girl?" I'm genderfluid you stupid piece of shit. (no homo).
[Dirección de la rutina]: 08030E08
[Pointer a la Rutina 15]: 08030E34
Código:
Rutina 15: Inicializa las opciones (Chico/Chica) [puta heteronomatividad tete]
[Dirección de la rutina]: 08030E38
[Pointer a la Rutina 16]: 08030ED0
[Pointer a la Rutina 18]: 08030EC8
Pasará a 18 si se ha elegido chico o chica.
Código:
Rutina 16: (Repeat) Input en el menú chico chica.
[Dirección de la rutina]: 08030ED4
[Pointer a la Rutina 17]: 08030F78
Código:
Rutina 17: Cambia los sprites Chico/Chica.
[Dirección de la rutina]: 08030F7C
[Pointer a la Rutina 15]: 08030FD0
Código:
Rutina 18: Se ha elegido Chico/Chica
[Dirección de la rutina]: 08030FD4
[Pointer a la Rutina 19]:
Código:
Rutina 19: "What's your name faggot?"
[Dirección de la rutina]: 08031014
[Pointer a la Rutina 20]: 0803103C
Código:
Rutina 20: Espera input.
[Dirección de la rutina]: 08031040
[Pointer a la Rutina 21]: 0803108C
Código:
Rutina 21:  Rutina para introducir el nombre.
[Dirección de la rutina]: 08031090
[Pointer a la Rutina 22]: 08032650
Esta rutina en verdad tiene un porrón de pointers a subrutinas, al que le interese que lo mire.
Código:
Rutina 22: Tras poner el nombre
[Dirección de la rutina]: 08031104
[Pointer a la Rutina 23]: 08031140
Código:
Rutina 23: (repeat) Después de poner el nombre.
[Dirección de la rutina]: 08031144
[Pointer a la Rutina 24]: 08031184
Código:
Rutina 24: Pregunta si es tu nombre (Si/NO)
[Dirección de la rutina]: 08031188
[Pointer a la Rutina 25]: 080311F0
Código:
Rutina 25: Tras responder (Si/NO)
[Dirección de la rutina]: 08031220
[Pointer a la Rutina 26]: 08031254
Código:
Rutina 26: Mierda, os dije que el subnormal iba a volver.
[Dirección de la rutina]: 08031258
[Pointer a la Rutina 27]: 08031338
Código:
Rutina 27: El profesor coñazo habla de nuevo.....
[Dirección de la rutina]: 0803133C
[Pointer a la Rutina 28]: 080313E0
Código:
Rutina 28: Desaparece el profesor (PARA SIEMPRE)
[Dirección de la rutina]: 080313E4
[Pointer a la Rutina 29]: 080314C0
Código:
Rutina 29: Aparece el sprite del protagonista
[Dirección de la rutina]: 080314C4
[Pointer a la Rutina 30]: 0803157C
Código:
Rutina 30: Fade sprite + miniaturización.
[Dirección de la rutina]: 08031580
[Pointer a la Rutina 31]: 080315B8
Código:
Rutina 31: Hasta los cojones de mi vida.
[Dirección de la rutina]: 080315BC
[Pointer a la Rutina 32]: 0803162C
Código:
Rutina 32: Función final, aparecemos en el mapa establecido como inicial WIIIIIIIII.
[Dirección de la rutina]: 08031630
 
Última edición:
Arriba