Visita el area de tutoriales sobre pokéhacking.
No es una pila de documentos para resolver dudas puntuales sino una wiki dinámica donde investigar y publicar técnicas para que la comunidad mejore.
Wah es una comunidad hispana dedicada a la creación y modificación de contenido creativo sobre Pokémon.
Ver todos los Hacks Hall de la FamaEl museo donde se exponen los trabajos de dibujantes de sprites seleccionados para que sirvan de ejemplo a seguir por otros spriters.
Ver GaleríasCon autoaprendizaje, y descargando aquí los archivos necesarios, el único límite será tu propia imaginación.
Descargas Códigos Tiles Parches Hacks HerramientasAprende a manejar los datos de entrada y salida del rom
Antes que nada, diré que este tutorial es muy útil para hacer unos scripts creativos.
Como ejemplo podeis ver este script de Pidgeot que hice para el Keyra.
Bueno, pasemos al verdadero manual.
¿Que es el I/O de nuestra GBA?
En primer lugar, I/O quiere decir Input/Output (Entrada/Salida). Refiriendose a datos, es obvio, y esos son los datos
que se manejan entre nuestro rom y nuestra GBA. Es decir, un envío de datos continuos del Software al Hardware, y
del Hardware al Software.
Los datos que se manejan con el I/O son, sonidos (volumen, agudeza..etc.), calidad imagen (distorsionada, nítida..etc.),
teclas que presionas en cada momento. (Z, X, A, S, Arriba, Abajo..etc.)
Con los datos mencionados anteriormente, puedes hacer lo que quieras. Estos se clasifican en:
Ahora daré un ejemplo de cada uno de ellos, y también un pequeño script, donde usaré mi imaginación, para darle utilidad. Vosotros una vez aprendido el funcionamiento de esos datos de I/O, podeis darle otra utilidad.
Solo lectura| 4000130 | 4000131 | Tecla Pulsada |
| FF | 00 | AS |
| FF | 01 | A |
| FF | 02 | S |
| FE | 03 | Z |
| FD | 03 | X |
| FC | 03 | ZX |
| FB | 03 | <- |
| F7 | 03 | Enter |
| 7F | 03 | Abajo |
| BF | 03 | Arriba |
| DF | 03 | Izquierda |
| EF | 03 | Derecha |
| DIRECCIONES | BYTES | SUCESO | ||
| 4000000 | 4000001 | 60 | 5F | Toda la pantalla negra. Solo se ven los msgbox. |
| 4000000 | 4000001 | 60 | 6F | Oculta TODOS los minis. | 4000000 | 4000001 | 60 | 70 | Toda la pantalla negra, solo se ven los minis. |
| 4000000 | 4000001 | E0 | 7F | Vuelve la pantalla totalmente blanca. |
| 4000040 | 4000041 | 7F | 70 | Solo se ven los tiles que estén en la misma vertical de la coordenada del mini. |
| 4000048 | 4000049 | 2F | 1F | Desaparecen todos los minis y objetos del mapa. |
| 4000082 | 4000083 | ?? | ?? | Altera esos bytes, mirando el IO, y conseguirás distintos efectos en la melodia que suena.. |
| 4000084 | 4000085 | 0B | 00 | Silencia el rom, es decir desactiva el sonido. |
| 4000130 | 4000131 | ?? | ?? | Por cada tecla presionada, indica un byte. Útil para el ejemplo mencionado mas arriba. |
| 4000208 | 4000209 | 00 | 00 | Crashea el juego, y se queda congelado. (se arregla poniendo writebytetooffset 0x01 0x04000208) |
#org 0xinicio checkflag 0x1200 //Compara si ya has abierto la caja fuerte. if 0x1 goto 0xfinal // Si es si, ir al texto final writebytetooffset 0x01 0x087F0000 //Escribe el primer digito de la contraseña en la direccion del ROM 087F0000. writebytetooffset 0x02 0x087F0001 //Idem que arriba. (Poner tantos como digitos que quieras que tenga la contraseña. msgbox 0x8texto 1 //Primer texto, ejemplo: "Oh una caja fuerte, pero está cerrada hay que abrirla con una contraseña, vamos a introducirla.." "Presiona cualquier tecla que creas que es la contraseña" callstd 0x2 goto 0xintroducir_contraseña //IR a introducir contraseña #org 0xintroducir_contraseña compare 0x4051 0x2 //Comparar cuantas digitos has introducido, si ya son dos, ir a contraseña introducida. (Poner X valor a la variable, como digitos haya que poner, 5 digitos = 0x5 if 0x1 goto 0xcontraseña_introducida // Ir a la direccion donde ya haya sido introducida la contraseña. comparefarbytetobyte 0x4000130 0x7F //Compara si la tecla presionada es "Abajo" if 0x1 goto 0xcomprobar_1 //Si es si, ir a comprobar_1 comparefarbytetobyte 0x4000130 0xDF //Compara si la tecla presionada es "Izquierda" if 0x1 goto 0xcomprobar_2 //Si es si, ir a comprobar_2 comparefarbytetobyte 0x4000130 0xBF //Compara si la tecla presionada es "Arriba" if 0x1 goto 0xcomprobar_3 //Si es si, ir a comprobar_3 comparefarbytetobyte 0x4000130 0xEF //Compara si la tecla presionada es "Derecha" if 0x1 goto 0xcomprobar_4 //Si es si, ir a comprobar_4 comparefarbytetobyte 0x4000130 0xF7 //Compara si la tecla presionada es "Enter" if 0x1 goto 0xcomprobar_5 //Si es si, ir a comprobar_5 comparefarbytetobyte 0x4000130 0xFD //Compara si la tecla presionada es "X" if 0x1 goto 0xcomprobar_6 //Si es si, ir a comprobar_6 comparefarbytetobyte 0x4000130 0xFE //Compara si la tecla presionada es "Z" if 0x1 goto 0xcomprobar_7 //Si es si, ir a comprobar_7 comparefarbytetobyte 0x4000131 0x01 //Compara si la tecla presionada es "A" if 0x1 goto 0xcomprobar_8 //Si es si, ir a comprobar_8 comparefarbytetobyte 0x4000131 0x02 //Compara si la tecla presionada es "S" if 0x1 goto 0xcomprobar_9 //Si es si, ir a comprobar_9 goto 0xintroducir_contraseña //Ir a introducir_contraseña de nuevo, ya que no has presionado ninguna tecla. (Se produce un bucle, hasta que presiones una tecla.) #org 0xcomprobar_1 compare 0x4051 0x1 //Compara si ya has introducido algun digito de la contraseña. if 0x1 goto 0xcomprobar_1_1 //Si es si, ir a comprobar_1_1 writebytetooffset 0x7F 0x087F1000 //Escribir el byte de la tecla presionada, en una direccion del rom. addvar 0x4051 0x1 //Añade +1 a la variable 4051, esto indica que ya hemos introducido un digito de la contraseña. goto 0xintroducir_contraseña //Ir de nuevo a introducir contraseña #org 0xcomprobar_1_1 //Ya has introducido previamente un digito de la contraseña. writebytetooffset 0x7F 0x087F1001 //Escribe el byte de la tecla presionada en una direccion del rom. addvar 0x4051 0x1 //Añade +1 a la variable 4051, esto indica que hemos introducido otro digito de la contraseña. goto 0xintroducir_contraseña //Ir de nuevo a introducir la contraseña //No comento los demás, porque es igual que el _1 y _1_1, salvo que cambiando el byte que se escribe en el rom. #org 0xcomprobar_2 compare 0x4051 0x1 if 0x1 goto 0xcomprobar_2_1 writebytetooffset 0xDF 0x087F1000 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_2_1 writebytetooffset 0xDF 0x087F1001 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_3 compare 0x4051 0x1 if 0x1 goto 0xcomprobar_3_1 writebytetooffset 0xBF 0x087F1000 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_3_1 writebytetooffset 0xBF 0x087F1001 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_4 compare 0x4051 0x1 if 0x1 goto 0xcomprobar_4_1 writebytetooffset 0xEF 0x087F1000 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_4_1 writebytetooffset 0xEF 0x087F1001 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_5 compare 0x4051 0x1 if 0x1 goto 0xcomprobar_5_1 writebytetooffset 0xF7 0x087F1000 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_5_1 writebytetooffset 0xF7 0x087F1001 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_6 compare 0x4051 0x1 if 0x1 goto 0xcomprobar_6_1 writebytetooffset 0xFD 0x087F1000 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_6_1 writebytetooffset 0xFD 0x087F1001 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_7 compare 0x4051 0x1 if 0x1 goto 0xcomprobar_7_1 writebytetooffset 0xFE 0x087F1000 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_7_1 writebytetooffset 0xFE 0x087F1001 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_8 compare 0x4051 0x1 if 0x1 goto 0xcomprobar_8_1 writebytetooffset 0x01 0x087F1000 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_8_1 writebytetooffset 0x01 0x087F1001 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_9 compare 0x4051 0x1 if 0x1 goto 0xcomprobar_9_1 writebytetooffset 0x02 0x087F1000 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcomprobar_9_1 writebytetooffset 0x02 0x087F1001 addvar 0x4051 0x1 goto 0xintroducir_contraseña #org 0xcontraseña_introducida //Ya hemos introducido la contraseña completa. comparefarbytetofarbyte 0x087F0000 0x087F1000 //Comparamos el byte escrito por nosotros (el byte que nosotros queremos) al que ha escrito el player (el byte que él ha querido) if 0x0 goto 0xerror_contraseña //Si no son iguales, ir a contraseña erronea sound 0xconfirmacion //Sonido de confirmacion, primer digito correcto. comparefarbytetofarbyte 0x087F0001 0x087F1001 //Comparamos el segundo byte escrito por nosotros de la contraseña (el que nosotros queremos) al que ha escrito el player if 0x0 goto 0xerror_contraseña //Si no son iguales, ir a contraseña erronea. sound 0xconfirmacion //Sonido de confirmacion. goto 0xtodo_correcto //Ir a todo correcto #org 0xerror_contraseña //Error en la introduccion de los datos. msgbox 0x8texto 2 //Texto segundo, "la contraseña introducida es incorrecta, vuelve a intentarlo más tarde." callstd 0x2 end #org 0xtodo_correcto //La contraseña introducida es correcta. sound 0xfanfare //Sonido de que todo ha sido llevado a cabo bien 100%. msgbox 0x8texto 3 //Texto tercero, "La contraseña es correcta, y la caja se abrió.." callstd 0x2 giveitem 0xobjeto 0xcantidad //Premio por abrir la caja fuerte. setflag 0x1200 //Activamos la flag, para que no se repita más el script. release end #org 0xfinal //Una vez activada la flag. msgbox 0x8 texto 4 //Algun texto indicando que la caja fuerte ya ha sido abierta.. callstd 0x2 release end
Tutorial escrito por Eing.
Web designed by Serg!o.
Hosting powered by HostingGazel.
Pokémon y todos sus respectivos nombres son marcas registradas y © de Nintendo Nintendo 1996-2010.
Para más información véase el aviso legal.