Get Pokémon Species (Slot)
¿Qué es el GPS(S)?
- El Get Pokémon Species (GPS) es una rutina ASM desarrollada para Pokémon Fire Red 1.0 que permite averiguar la especie de un pokémon de tu equipo (ejemplos: Beedrill, Kakuna, Pikachu).
- El Get Pokémon Species Slot (GPSS) es una rutina ASM desarrollada para Pokémon Fire Red 1.0 que permite averiguar si tienes un pokémon determinado en tu equipo y, en caso de que lo tengas, en qué posición está ubicado (ejemplo: ¿Tengo un Pikachu? Sí -> ¿En qué posición? 1)
¿Cómo funciona?
- GPS
- Información
Usa el desencriptador del ROM para averiguar la especie del pokémon que se encuentra en la posición X de tu equipo.
- ¿Toma parámetros? Sí
Variable 0x8004: Posición del equipo que quieres analizar. 0x0 es el primer pokémon (posición 1) y 0x5 es el último (posición 6).
- ¿Devuelve parámetros? Sí
Variable 0x8004:- 0x0 = El pokémon en esa posición no es el deseado.
- 0x1= El pokémon en esa posición es el deseado.
- Información
- GPSS
- Información
Usa el desencriptador del ROM para averiguar la especie del primer pokémon del equipo y lo compara con la que hayas indicado. Si el pokémon no es de esa especie, prueba con el que está en la segunda posición y así sucesivamente hasta encontrarlo o verificar que ningún pokémon del equipo sea el que hayas indicado.
- ¿Toma parámetros? Sí
Variable 0x8004: Especie del pokémon que quieras saber si tienes en el equipo. Es decir, su número en la pokédex nacional (ejemplos: Treecko=252, Seadra=117, Tangela=114).
- ¿Devuelve parámetros? Sí
Variable 0x8004:- 0x0 = No tienes el pokémon en el equipo.
- 0x1-0x6= El pokémon buscado está en esa posición.
- Información
Imágenes
- GPS
- GPSS
Scripts de Ejemplo
- GPS
Código:[PLAIN] #dynamic 0x800000 #org @inicio lock faceplayer setvar 0x8004 0x1 'En la var 0x8004 aclaras el slot del equipo que quieras revisar callasm 0x08749CB1 'Offset de la rutina + 1 compare 0x8004 0x75 'Número del pokémon en la dex nacional (0x75 = 117 = Seadra) if 0x1 goto @silotienesseadra 'Si ese es el valor comprueba que tiene el pokémon y va a @silotienesseadra compare 0x8004 0x72 'Si no es el poké anterior, reviso con otro (0x72 = 114 = Tangela) if 0x1 goto @silotienestangela 'Si ese es el valor comprueba que tienes el segundo pokémon y va a @silotienestangela msgbox @notienesninguno 0x6 'Mensaje de que no tienes los pokémons anteriores release end #org @silotienesseadra 'Viene aquí si se comprueba verdadero el primer if msgbox @tienesseadra 0x6 'Mensaje normal release end #org @silotienestangela 'Viene aquí si se comprueba falso el primer if y verdadero el segundo msgbox @tienestangela 0x6 'Mensaje normal release end #org @tienesseadra 'Mensaje de Seadra = Tienes un Seadra. #org @tienestangela 'Mensaje de Tangela = Tienes un Tangela. #org @notienesninguno 'Mensaje de que no tienes ninguno = No tienes ni un Seadra ni un\nTangela. [/PLAIN]
- GPSS
Código:[PLAIN] #dynamic 0x800000 #org @inicio lock faceplayer setvar 0x8004 0x75 'Pongo en la var 8004 el número del pokémon en la dex nacional (0x75 = 117 = Seadra) callasm 0x08749CF1 'Offset de la rutina + 1 compare 0x8004 0x0 'Si el valor de la var 0x8004 es 0, significa que no tienes el pokémon if 0x1 goto @notieneselpokemon 'Si el valor efectivamente es 0, te envía a @notieneselpokemon buffernumber 0x0 0x8004 'Caso contrario, guarda en un buffer el valor de la var 8004, que contiene el slot del equipo en el que está el pokémon (Seadra en este caso) msgbox @estaenlaposicion 0x6 'Mensaje normal release end #org @notieneselpokemon msgbox @nolotienes 0x6 'Mensaje de que no lo tienes release end #org @estaenlaposicion 'Mensaje de que tienes el pokémon = Seadra está en la posición [buffer1] #org @nolotienes 'Mensaje de que no lo tienes = No tienes un Seadra [/PLAIN]
Descarga
Los siguientes archivos rar contienen la/s rutina/s correspondientes en formato ".asm", ".bin" y ".txt" (con los bytes compilados), además del script de ejemplo que vieron arriba en formato ".rbc".
Rutinas
Por si alguien quiere las rutinas sin compilar y no quiere descargarlas, las dejo en spoiler.
Código:
[PLAIN]
.thumb
.align 2
main:
push {r0-r2,lr}
ldr r1, var_8004
ldrh r1, [r1]
mov r0, #100
mul r1, r0
ldr r0, party_offset
add r0, r1
mov r1, #0xB
ldr r2, poke_decrypt
bl call_r2
ldr r1, var_8004
strh r0, [r1]
pop {r0-r2,pc}
call_r2:
bx r2
.align 2
var_8004: .word 0x020370C0
party_offset: .word 0x02024284
poke_decrypt: .word 0x0803FBE9
[/PLAIN]
Código:
[PLAIN]
.thumb
.align 2
main:
push {r0-r4,lr}
mov r4, #0
loop:
ldr r0, party_offset
mov r1, #100
mul r1, r4
add r0, r1
mov r1, #0xB
bl call_r2
ldr r1, var_8004
ldrh r1, [r1]
add r4, #1
cmp r1, r0
beq es_ese
b no_es
es_ese:
ldr r1, var_8004
strh r4, [r1]
b end
no_es:
cmp r4, #6
blo loop
mov r4, #0
ldr r1, var_8004
strh r4, [r1]
b end
call_r2:
ldr r2, poke_decrypt
bx r2
end:
pop {r0-r4,pc}
.align 2
var_8004: .word 0x020370C0
party_offset: .word 0x02024284
poke_decrypt: .word 0x0803FBE9
[/PLAIN]
Agradecimientos
- Bulbapedia: Offset del equipo pokémon y estructura de los datos
- Linkandzelda: Offset de las variables dinámicas
- Jambo51: Offset del desencriptador
- @Aster : Conversando con él surgió la idea
Última edición: