Registrarse

[INV] [RUBY] Crianza de Pokémon Shiny en la guardería [80%]

Estado
Cerrado para nuevas respuestas.

Juanjo

Hacker del pasado... Compilador del presente
Miembro insignia
INTRODUCCIÓN

Como muchos sabrán en los juegos de segunda generación era genial poder criar pokémon shinys, es decir si lograbas conseguir uno de estos raros especímenes al criar en la guardería obtenías un 15% de posibilidad de tener un huevo del que nacería un pokémon shiny.



Para tercera generación esto se perdió. Y los pokémon shiny quedaron relegados a un simple azar y no a una mutación genética que me gustaba más.

MISIÓN

Lograr que la guardería de tercera generación logre generar ese 15% de probabilidad de generar un huevo shiny si el padre o la madre es shiny.

PROCEDIMIENTO​

  • Estudiar el script de la guardería.
  • Lograr que el huevo que entregue sea shiny, aún cuando no existe un giveegg.
  • Controlar la probabilidad del 15 mediante vars y flags.
  • Que al recibir un pokemon en la guardería se permita analizarlo.
  • Identificar que un Pokémon sea Shiny.

LOGROS​

ESTUDIAR EL SCRIPT DE LA GUARDERÍA: Al investigarlo he descubierto que el special 0xB5 genera en el [Buffer1] y en el [Buffer2] los Pokémon de la guardería (Y hace algunas cosas más que no he descubierto).

El special2 LASTRESULT 0xB6 devuelve en la variable LASTRESULT un número que:

0x0 = No tienes Pokes y se presenta.

0x1 = Te va a dar un huevo.

0x2 = Tienes un solo Poke en la guardería y te dice que está bien.

0x3 = Tienes 2 Pokes en la guardería y te dice que están bien.

La parte del script que interesa es:

Código:
#org 0x1B22B2
preparemsg 0x81B27A2 '"[player] received the EGG from\nth..."
fanfare 0x16F
waitfanfare
waitmsg
waitkeypress
msgbox 0x81B27CD MSG_KEEPOPEN '"Take good care of it."
special 0xB8
clearflag 0x86
release
end
No se observa ningún giveegg.

LOGRAR QUE EL HUEVO SEA SHINY: Aún así introduciendo la rutina del shinyzer:

Código:
#org 0x71234A
checkflag 0x1234
if 0x1 call 0x871243C
preparemsg 0x81B27A2 '"[player] received the EGG from\nth..."
fanfare 0x16F
waitfanfare
waitmsg
waitkeypress
msgbox 0x81B27CD MSG_KEEPOPEN '"Take good care of it."
special 0xB8
clearflag 0x86
clearflag 0x1234
release
end

'---------------
#org 0x71243C
setvar 0x8003 0x1
return
De esta manera genero que el huevo que me entreguen sea Shiny. SOLAMENTE si la flag 1234 está activada.

La ventaja de hacer esto es que da independencia total de si el huevo es shiny o no, y el viejo solamente mirara si la flag externa está activa o no. (A este paso lo llamé la palanca de radioactividad de la guardería

CONTROLAR LA PROBABILIDAD DEL 15%:

Bueno, no se mucho de como se manejan los eventos aleatorios del juego (Supongo que a muy bajo nivel hacen operaciones con bytes y comparan si el resultado están entre algún rango, o algo por el estilo).

Un 15% significa que de 100 posibilidades, 15 son aciertos. Es decir si una variable aleatoria toma 100 posibles valores, 15 de ellos serán aciertos. Por lo que me fui a la fácil: Generar una variable aleatoria random y evaluar los aciertos. ¡Por supuesto no iba a tomar 100 valores y tomar 15 como aciertos! simplemente 15/100 = 3/20. Una variable que toma 20 posiciones de los cuales 3 son aciertos:

Código:
'---------------
#org 0x712393
random 0x14
copyvar 0x50FE LASTRESULT
buffernumber 0x2 0x50FE
compare 0x50FE 0x0
if 0x1 goto 0x8712457
compare 0x50FE 0x1
if 0x1 goto 0x8712457
compare 0x50FE 0x2
if 0x1 goto 0x8712457
msgbox 0x87123EF MSG_FACE '"[buffer3] No hay huevos shiny."
end

'---------------
#org 0x712457
msgbox 0x8170CA7 MSG_FACE '"[buffer3] Hay huevos shiny."
setflag 0x1234
end


'---------
' Strings
'---------
#org 0x7123EF
= [buffer3] No hay huevos shiny.

#org 0x170CA7
= [buffer3] Hay huevos shiny.
Si hablo con esta tipa y luego reclamo el huevo, en caso de que salga shiny aquí. El viejo me dará un huevo shiny.

Aquí pueden ver esto funcionando:



LOGROS PENDIENTES

* Lograr identificar que si un pokémon es shiny o no [MI MAYOR DOLOR DE CABEZA] (Solicito toda la ayuda aquí).

Aquí intenté comparar los datos del primer pokemon del party comparados entre pokemons shiny o no shiny a ver si lograba algo:


(Perdón el orden XD), En rojo está lo diferente entre shinys, y en azul lo diferente entre normales. Luego comparé esto entre un normal y un shiny y descubrí que allí NO HAY NADA que permita comparar si es shiny o no D:

* Introducir lo anterior en el script de la vieja que recibe los pokemon de la guardería, y en caso de que el pokemon elegido sea shiny llamar a la subrutina de la probabilidad y listo.

OTRAS APLICACIONES​

Con el identificador ifshiny lograríamos hacer scripts de "¡Oh tú pokémon es shiny! ¡Genial! y obviamente cosas más complejas.

Con lo de la probabilidad se podrían hacer wildbattles con probabilidad de que sea shiny o no.

ASÍ QUE ¿ALGUNA IDEA?​

FIRMAN:

Juanjo - Grupo Positron
 
Última edición:

~Javs

Admon. retirado.
Miembro de honor
Felicidades por este avance, Juanjo, yo creo que es bastante útil combinado con la creatividad que le puedas poner a tu hack.

El comando ifshiny está habilitado en RZE? Nunca había siquiera escuchado de él, me perdí de algo? D:

Una cosa.. no entendí bien qué es lo que te falta xD Osea.. no entendí la problemática.. me la puedes desglosar un poco, por favor?

Saludos :3
 

Scarex

I'M NOT ON DRUGS
Miembro de honor
Juanjo, no sé que ves de vacío

I mean, has hecho una flag que se activa 15/100 veces y si forma parte de ese 15 es shiny... No podrías utilizar la misma flag activada para los mensajes de ''felicidades, tienemos un shiny'' XD

Te lo pongo mejor: en el #org 0x71234A en vez de hacer un call, haz un goto y haz dos scripts paralelos. El goto 0x1 llevará al caso de que el poke shiny.

... Ah wait, espera, tienes que checkear también que sea shiny uno de los dos pokémon de la guardería para activar el script de la probabilidad? AH, everything makes sense now XD

Pues no sé, en el caso que ese sea el problema... no existe ningun comando normal que chequee si es shiny o no, ahora debes meterte en asm y asignar una variable a todos los pokes que sean shiny, y que al entregar un shiny a la guarderia esta variable asociada al pokemon shiny desencadene todos los procesos posteriores.
Hay que mirar la rutina de los pokémon shiny (yo no sé cual es, tampoco sabría interpretar el código). pero creo que deberias empezar por ahí. Tal vez deberías mirar la variable 8003, con la que ''activas'' un cambio, la aparición de un pokémon shiny en vez de uno normal... seguro que no se puede hacer ningun check con esa maravilla?

Meh, si se me ocurre algo te digo

Salu2!
 
Estado
Cerrado para nuevas respuestas.
Arriba