NOTA: Esta rutina es propiedad de Mateo, ni el ni yo nos responsabilizamos si se jode tu ROM :3
PREFACIO:
========
Muchos aca conocen el comando de XSE que comprueba si x pokemon conoce x movimiento, en GBC esto no era posible, pero gracias a mi sensei MATEO, se ha podido desarrollar una rutina que nos hara esa funcion, usando el special sin usar.
COMO FUNCIONA?
==============
Este script llama una rutina ASM que esta basada en el script de surf, el cual permite mediante un loadvar cargar un movimiento y hacer una comparacion(if true, if false. etc) para hacer X accion que querramos.
APLICANDO LA RUTINA
================
Empezamos repunteando el special sin usar (solo sirve para decir "Now on Debug") a un espacio en blanco, para poder ser insertado, lo mejor es que se ponga en el banco 0x3, ya que ahi se encuentran todos los special. igual, el puntero se ubica en 0xC383 en Pokémon Gold. es un puntero de 3-bytes comun, por lo cual puede estar en donde sea. por ejemplo, yo repuntee el special a 0xFD12. por lo cual escribi 03 12 7D donde esta el puntero y guarde.
Ahora nos vamos a 0xFD12 3 insertamos la rutina nueva:
FA 73 D1 57 CD 87 47 38 06 3E 01 EA 73 D1 C9 3E 00 EA 73 D1 C9y guardamos.
Esa es la rutina ya compilada, directo en hex, para no complicarte, pero si te interesa he aqui las insrtucciones ASM
ld a,(d173) // Gets the value of the skill from the VAR
ld d,a // The original routine needs the skill in register D, so we put it there
call 4787 // Calls the existing "Does a Pokemon have this skill?" routine
JR C, $06 // If the Pokémon does not have the skill, the C flag is set, so jump ahead to that case
ld a,01 // Load A with $01, the value for "true"
ld (d173),a // Put this value back in the VAR so we can check it with the "if" commands like normal
ret // Return to the script, because we are done
ld a,00 // If the Pokémon didn't have the skill, we jump here to load A with "false"
ld (d173),a // Write A to the VAR so we can check it in the script
ret // Return to the script, because we are done
USANDOLO EN UN SCRIPT
===================
Para que esto funcione en un script debemos de hacer una estructuracion como esta:
loadvar 0x?? ' Skill number to check for
special 0x6E
Es simple, el codigo lo que hara es chequear un movimiento tecnicamente en el menu pokemon, tu puedes tener solo escrita la rutina ASM y cargar el movimiento deseado y cargarlo eb D, llamado para chequear la rutina, y puede fijarse siempre que quieras antes de regresar al script, y llama la rutina con el codigo para llamar la rutina ASM. pero si planeas poner muchos lugares para chequear muchos movimientos de un Pokémon, twrminaras desperdiciando mucho teniendo todo eso virtualmete identico a cada rutina..
EJEMPLO DE APLICACION
=================
Este es un ejemplo de como debe de usarse el nuevo comando en un script
#org 0x15CBEE
'-----------------------------------
faceplayer
loadfont
loadvar 0x21
special 0x6E
if true 0x4C29 ' 0x15CC29
2writetext 0x4C7E ' 0x15CC7E
closetext
loadmovesprites
end
#org 0x15CC29
'-----------------------------------
2writetext 0x4E49 ' 0x15CE49
closetext
loadmovesprites
end
#org 0x15CC7E
= BILL: Tu no tienes\nel mov. PLACAJE.\e
#org 0x15CE49
= BILL: PLACAJEAME (?)\e
Este es un sencillo ejemplo de como usarlo. chequea si el jugador tiene o no un pokemon en su equipo que sepa PLACAJE, y Bill nos dira algo diferente si lo tenemos.
Bien, es todo y no hay mucho misterio al respecto, la mejor manera de usarlo seria creando una MO, por ejemplo ahora ocupo la MO06 Treparrocas, quedando mas profesional que crear un item para escalar rocas.
Es Todo, recuerden, si la usan den creditos a mi maestro del GBC hacking Mateo