Registrarse

[RH - Scripting] Script que cause estados (Envenenar, Paralizar, Congelar, Dormir) al equipo fuera de un combate

Estado
Cerrado para nuevas respuestas.

Tio_Terry

Aqua-Sama
Se puede crear un script en Pokémon Fire Red, que al iniciarlo, Cause un estado (Ya sea envenenarlo, paralizarlo, etc), igual que en el Rom Hack de Esmeralda "Pokémon Glazed"?
Y como lo haría?
 

Lunos

Enfrentando a La Organización
Miembro insignia
Se puede crear un script en Pokémon Fire Red, que al iniciarlo, Cause un estado (Ya sea envenenarlo, paralizarlo, etc), igual que en el Rom Hack de Esmeralda "Pokémon Glazed"?
Y como lo haría?
Este post de PokeCommunity contiene lo que necesitás.

En resumidas cuentas, usando writebytetooffset 0xNumero 0x20242D4 puedes inflingir un estado alterado al primer Pokémon del equipo, donde 0xNumero representa el estado alterado en cuestión.
A esa dirección (0x20242D4) le sumas 0x64 lo cual te daria 0x2024338, y esa es la dirección en memoria del estado de el segundo Pokémon en el equipo.
Y así vas sumando 0x64s hasta llegar al sexto Pokémon.

Los valores de los estados alterados son los siguientes:
Código:
#define STATUS1_NONE             0x0
#define STATUS1_SLEEP            0x7
#define STATUS1_POISON           0x8
#define STATUS1_BURN             0x10
#define STATUS1_FREEZE           0x20
#define STATUS1_PARALYSIS        0x40
#define STATUS1_TOXIC_POISON     0x80
Fuente.

El resto depende de ti y de como escribas tu script.
 

Lunos

Enfrentando a La Organización
Miembro insignia
¿Siempre leera el 1er pokemon aunque el script elija uno al azar?
No. Naturalmente, si utilizas el comando de scripting random, vos podés hacer que cualquiera de los 6 Pokémon en el equipo sufra un estado alterado.
Como lo dije antes, teniendo la información posteada arriba, el resto depende de como tú escribas tu script.

Respecto a los Huevos Pokémon, creo que no hay forma eficaz de chequearlo mediante scripting y utilizarlo en conjunto con estos writebytetooffset.
Por lo general, yo los chequeo usando el special 0x9F, pero como hace uso de la pantalla de equipo Pokémon para elegir un Pokémon, podria no ajustarse a tus necesidades.
 

Tio_Terry

Aqua-Sama
Yyy no podria, (solo es suposicion...) agregarse la condicion de chequear si es un huevo antes del writebytetooffset en cada espacio?
 

Lunos

Enfrentando a La Organización
Miembro insignia
Yyy no podria, (solo es suposicion...) agregarse la condicion de chequear si es un huevo antes del writebytetooffset en cada espacio?
Ese es el punto, no hay una forma sencilla de comprobar si una especie es un huevo mediante scripting sin utilizar el special 0x9F como lo mencioné ahi arriba, al menos hasta donde yo sé.
 

Tio_Terry

Aqua-Sama
Ese es el punto, no hay una forma sencilla de comprobar si una especie es un huevo mediante scripting, sin utilizar el special 0x9F como lo mencioné ahi arriba. Al menos hasta donde yo sé.
Ok, seguiré probando...
De hecho he investigado y encontre varias cosas de como hacer un "checkpokemon"...

Creo que va algo asi...
special2 0x800d 0x(y el pokemon)

Y luego un compare y un if....

Pero no mencionan mucho sobre comonusarlo....
 

Lunos

Enfrentando a La Organización
Miembro insignia
Ok, seguiré probando...
De hecho he investigado y encontre varias cosas de como hacer un "checkpokemon"...

Creo que va algo asi...
special2 0x800d 0x(y el pokemon)

Y luego un compare y un if....

Pero no mencionan mucho sobre comonusarlo....
Ese es un uso incorrecto del special2.
Lo que esa función hace es tomar el resultado de una función de codigo llamada mediante la función special, y guardar dicho resultado en una variable a tu elección.
Por ejemplo, special2 0x800d 0x147 invocaria el special 0x147 y guardaria su resultado en la variable 0x800D (tambien conocida como LASTRESULT).

Como mencioné antes, una forma de comprobar si una especie es un huevo Pokémon involucra el special 0x9F, pero tambien involucra a este special (el 0x147).
Una persona podria hacer lo siguiente:
Código:
special 0x9F // Abre la pantalla de Equipo Pokémon para elegir uno, y guarda el slot del equipo en el que está en la var 0x8004
waitstate
compare 0x8004 0x6 // Comprueba si el Jugador cerró la pantalla sin elegir a un Pokémon
if 0x4 goto @end
special2 0x800d 0x147 // Llama al special 0x147 que obtiene la especie del Pokémon en la var 0x8004, y guarda el resultado en la var 0x800D
compare 0x800d 0x19c // Comprueba si dicha especie es un huevo
if 0x1 goto @nope
Pero bueno, ahi ya me vuelvo a repetir. Comprobar una especie usando el special 0x9F quizá no sea lo que tú quieras hacer. No lo sé.
Yo seguramente preferiria un chequeo silencioso, que no requiera que el Jugador tenga que elegir un pokémon manualmente.
 

Tio_Terry

Aqua-Sama
Ese es un uso incorrecto del special2.
Lo que esa función hace es tomar el resultado de una función de codigo llamada mediante la función special, y guardar dicho resultado en una variable a tu elección.
Por ejemplo, special2 0x800d 0x147 invocaria el special 0x147 y guardaria su resultado en la variable 0x800D (tambien conocida como LASTRESULT).

Como mencioné antes, una forma de comprobar si una especie es un huevo Pokémon involucra el special 0x9F, pero tambien involucra a este special (el 0x147).
Una persona podria hacer lo siguiente:
Código:
special 0x9F // Abre la pantalla de Equipo Pokémon para elegir uno, y guarda el slot del equipo en el que está en la var 0x8004
waitstate
compare 0x8004 0x6 // Comprueba si el Jugador cerró la pantalla sin elegir a un Pokémon
if 0x4 goto @end
special2 0x800d 0x147 // Llama al special 0x147 que obtiene la especie del Pokémon en la var 0x8004, y guarda el resultado en la var 0x800D
compare 0x800d 0x19c // Comprueba si dicha especie es un huevo
if 0x1 goto @nope
Pero bueno, ahi ya me vuelvo a repetir. Comprobar una especie usando el special 0x9F quizá no sea lo que tú quieras hacer. No lo sé.
Yo seguramente preferiria un chequeo silencioso, que no requiera que el Jugador tenga que elegir un pokémon manualmente.
See, por que el evento seria... Pues eso, como en Pokémon Glazed, pasar por un lugar peligroso, o algo por el estilo y que se se le ponga un estado a un Pokémon... pero ya es muy raro que un huevo se envenene... Y que gane exp... Arruinando la magia de no saber que huevo es el que cargas...

Pero en fin, si no logro saber como evitar que un huevo se envenene pues... Ni modo.... No creo que muera el huevo por el veneno, ya que he hecho que sobrevivan a 1 ps del veneno, (de hecho, de ahi surgio la idea, queria probar esa mecanica, y como me daba lata hacer que un Pokémon de mi equipo se envenenase, pues recorde ese script pero no sabia como meterlo a fire red).

Yaa quee.... Muchas gracias con el script de los estados, y una ultima pregunta.... No se puede hacer una rutina en ASM para eso?...
 

Lunos

Enfrentando a La Organización
Miembro insignia
Yaa quee.... Muchas gracias con el script de los estados, y una ultima pregunta.... No se puede hacer una rutina en ASM para eso?...
Seguramente sí. Yo no sé mucho al respecto, pero me imagino que deberia ser posible escribir una rutina que haga un loop chequeando los 6 slots del Equipo Pokémon en busqueda de un Huevo Pokémon, y si hay uno hacer que dicha rutina ponga a la var 0x800D en 1 o 0 (TRUE o FALSE).
Una rutina tal, en conjunto con random deberia permitirte saltar Huevos Pokémon a la hora de infligir estados alterados.
 

Tio_Terry

Aqua-Sama
Concuerdo contigo y lo del ASM, bienaventurado el que sepa usar ese lenguaje, pero deberia existir una.... digo yo..... hay mas cosas a las que se puede aplicar.... pero yaa quee...

Gracias por tu ayuda....
 

Tio_Terry

Aqua-Sama
Seguramente sí. Yo no sé mucho al respecto, pero me imagino que deberia ser posible escribir una rutina que haga un loop chequeando los 6 slots del Equipo Pokémon en busqueda de un Huevo Pokémon, y si hay uno hacer que dicha rutina ponga a la var 0x800D en 1 o 0 (TRUE o FALSE).
Una rutina tal, en conjunto con random deberia permitirte saltar Huevos Pokémon a la hora de infligir estados alterados.
Oye, un usuario llamado Acimut pudo proporcionarme información de lo que le hacia falta a mi Script para checar el huevo dentro del equipo y así evitar que se envenene, lo dejare aquí por si te sirve en el futuro a ti.... o por si alguien más lo necesita....

Código:
'---------------
#dynamic 0x800000

#org @inicio
countpokemon
random LASTRESULT
copyvar 0x8004 LASTRESULT 'ahora 0x8004 guarda la posición del pokémon.
special 0x148
compare LASTRESULT 0x1
if 0x1 goto @huevo
bufferpartypokemon 0x0 0x8004 'usamos 0x8004 en vez de LASTRESULT
msgbox @buffer1was MSG_NORMAL '"[buffer1] was poisoned."
compare 0x8004 0x0
if 0x1 goto @poke0
compare 0x8004 0x1
if 0x1 goto @poke1
compare 0x8004 0x2
if 0x1 goto @poke2
compare 0x8004 0x3
if 0x1 goto @poke3
compare 0x8004 0x4
if 0x1 goto @poke4
compare 0x8004 0x5
if 0x1 goto @poke5
end

'---------------
#org @poke0
writebytetooffset 0x8 0x20242D4
release
end

'---------------
#org @poke1
writebytetooffset 0x8 0x2024338
release
end

'---------------
#org @poke2
writebytetooffset 0x8 0x202439C
release
end

'---------------
#org @poke3
writebytetooffset 0x8 0x2024400
release
end

'---------------
#org @poke4
writebytetooffset 0x8 0x2024464
release
end

'---------------
#org @poke5
writebytetooffset 0x8 0x20244C8
release
end

'---------------
#org @huevo
msgbox @eggwasnt MSG_NORMAL '"The Egg wasn't poisoned."
end


'---------
' Strings
'---------
#org @buffer1was
= [buffer1] was poisoned.

#org @eggwasnt
= The Egg wasn't poisoned.
 
Estado
Cerrado para nuevas respuestas.
Arriba