Registrarse

[JPAN] FR | Tutorial del JPAN's Hacked Engine para Principiantes

Xaero

All fall before me
Esta es una traduccion de un pequeño (no tan pequeño en realidad) tutorial de Turtl3skulll (PokéCommunity ) para el Pokémon Fire Red Hacked Engine (Conocido como JPAN's Hacked Engine)

Poco a poco ire agregando mas contenido en español del tutorial

Aqui el enlace del tutorial de Turtl3skulll original(En ingles):
https://www.pokecommunity.com/showthread.php?t=336462

Si notan algún error, haganmelo saber por favor

De aquí en adelante comienza el tutorial traducido al español, disfrútenlo :b
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Pokémon Fire Red Hacked Engine Para Principiantes
Por: Turtl3skulll


Mientras trabajaba con el JPAN's Hacked Engine, he notado que muchas de las instrucciones están muy mal escritas; muchos asumen que usted sabe todo lo que está sucediendo y, por lo tanto, muchos ejemplos se anulan por completo. Comencé a reescribir su manual de una manera más amigable, una que (con suerte) cualquier principiante con conocimientos de secuencias de comandos pueda ver y comprender sin la necesidad de leer cuidadosamente cada palabra del documento y tener que escribir una y una juntos para descubrir un ejemplo del que se habló brevemente antes de que sea necesario.
Intentaré actualizar el manual para que sea lo más fácil de usar posible, e incluiré cada especial tan pronto como lo haga funcionar completamente.

Usaré este formato:

NOMBRE DEL ESPECIAL Y SU NÚMERO
BREVE DESCRIPCIÓN
EJEMPLO DE SCRIPT
NOTAS ADICIONALES SOBRE ELLO

DESCARGO DE RESPONSABILIDAD: No incluiré todo lo que tenía el manual original. Estos serán ejemplos de cómo crear un script de los especiales que creó y, por lo tanto, no se explicarán con todo detalle, para eso es su manual y puede consultarlo para obtener una explicación detallada de su código.

Si algo está mal, necesita más explicaciones, o me perdí un especial y usted sabe cómo explicarlo, no dude en decírmelo y lo agregaré aquí. Espero que esto ayude a algunos de ustedes :)

Cajas Multichoice:
Las cajas Multichoice tienen 2 especiales, siendo especial 0x24 y especial 0x25
Contienen 7 casillas para usar, que van desde 0x20 - 0x25, que definen cuántas opciones desea tener.

Especial 0x25 - Cargar Pointer desde Banco de Script
El Especial 0x25 usa pointers dados en el script para cargar los datos en los cuadros de selección múltiple
Utiliza Setvar 0x8006 --multichoice slot
Ejemplo especial 0x25:
Para 2 opciones:
#org @start
lock
setvar 0x8006 0x0 ------------------' Establece la primera ranura de elección
loadpointer 0x0 @1 -----------------' Carga '@ 1' en la primera ranura de elección
special 0x25 -----------------------' Prepara la primera ranura de elección que se mostrará
setvar 0x8006 0x1 -----------------' Establece la segunda ranura de elección
loadpointer 0x0 @2 -----------------' Carga '@ 2' en la segunda ranura de elección
special 0x25 ------------------------' Prepara la segunda ranura de elección que se mostrará
Multichoice 0x0 0x0 0x20 0x0 --------' El tercer 0xXX es el cuadro que utilizará; 0x20-0x25, en consecuencia. El resto es relleno
release
end

#org @1
= Opción 1 'Este es el texto que aparecerá en el espacio de elección 1
#org @2
= Opción 2 'Este es el texto que aparecerá en el espacio de elección 2
Para agregar una tercera o cuarta opción, simplemente agregue otro 'setvar 0x8006 0xYY' otro 'loadpointer 0x0 @something' y 'special 0x25', como se muestra a continuación, así como también cambiar el Multichoice de 0x20 al cuadro con la cantidad de elección deseada.

Para 3 opciones:
#org @start
setvar 0x8006 0x0
loadpointer 0x0 @1
special 0x25
setvar 0x8006 0x1
loadpointer 0x0 @2
special 0x25
setvar 0x8006 0x2
loadpointer 0x0 @3
special 0x25
multichoice 0x0 0x0 0x21 0x0

#org @1
= Opción 1

#org @2
= Opción 2

#org @3
= Opción 3
Especial 0x24 - Cargar puntero por variables
Special 0x24 usa variables predefinidas para cargar los datos en los cuadros de selección múltiple
Usa:
Setvar 0x8004: para cargar la mitad inferior de un puntero (B en 0xAAAABBBB)
Setvar 0x8005: para cargar la mitad superior de un puntero (A en 0xAAAABBBB)
Setvar 0x8006 - ranura de multichoice

Ejemplo especial 0x24:
#org @start
lock
setvar 0x8004 0x3848 ------'El pointer es 08803848, esto toma la mitad inferior
setvar 0x8005 0x0880 ------'El pointer es 08803848, esto toma la mitad superior
setvar 0x8006 0x0
loadpointer 0x0 0x0203f4a0
special 0x24
setvar 0x8004 0x383f ------'El pointer es 0880383f, esto toma la mitad inferior
setvar 0x8005 0x0880 –----'El pointer es 0880383f, esto toma la mitad superior
setvar 0x8006 0x1
loadpointer 0x0 0x0203f4a0
special 0x24
multichoice 0x0 0x0 0x20 0x0
release
end
#org 0x803848
= Texto 1
#org 0x80383f
= Texto 2

El número máximo de opciones permitidas es 7, si intenta cargar 'Setvar 0x8006 0x7' o superior (que serían 8 opciones) fallará. Cada puntero de carga debe apuntar a algún desplazamiento, ya sea que contenga texto o no, de lo contrario, el juego se bloqueará. El texto del cuadro de opciones múltiples debe tener menos de 20 caracteres para que se muestre correctamente, y según JPAN no se mostrarán caracteres especiales como \v\hxx o colores, pero funciona bien para mí.


Personalización del entrenador en tiempo de ejecución:
El OW del entrenador y la tarjeta de entrenador ahora se pueden cambiar.
Las siguientes variables contienen la variable que se utilizará según lo que desee cambiar:
Cambios variables
0x4054 De pie y caminando
0x4055 Bici
0x4056 Sentado (Surf)
0x4057 Busca Pelea
0x4058 Pesca
0x4059 Busca Pelea en bicicleta
Ejemplos:

OW del entrenador:
#org @start
setvar 0x4054 0x025----------'la variable 4054 cambiará el sprite de pie y caminando, 0x25 se puede encontrar en Advance Map, en "Picture no" simplemente convierta ese número en el cuadro a hexadecimal, para usar ese sprite.
callasm 0x805BE61------------'Cambia el sprite instantáneamente y permite que el script continúe
end--------------------------'0x025 cambiará el OW al de una niña; esto se puede cambiar según el OW en el que desee convertirse, Ejemplo: 0x87 cambiará el OW al OW de Lapras

Para que el sprite cambie, se debe ingresar un nuevo mapa, o simplemente puede llamar a la rutina ASM en este script de ejemplo (crédito a diegoisawesome por encontrar esta rutina).

Tarjeta de entrenador:
Para el chico:
#org @start
setvar 0x4060 0x8
end

Para la chica:
#org @start
setvar 0x4061 0x8
end

0x8 es solo la imagen que reemplazará al original
Las tarjetas de entrenador usan las variables 0x4060 para niños y 0x4061 para niñas.
Para volver al héroe / heroína original, usa 0x87 y 0x88 en consecuencia.


Special de Poke-Decrypt:
Los siguientes especiales se utilizan para cambiar los componentes internos de un Pokémon, como EV / IV, Pokeball, ubicación de captura, Cintas y Pokerus.

Especial 0x6 - Pokemon Decrypt/encrypt
Un interruptor para abrir y cerrar el 'ADN' de un Pokémon para alterarlo, solo es inútil, por lo tanto, explicaré algunos especiales más y luego daré un ejemplo.

BufferPartyPokemon
Bufferpartypokemon 0x0 0x0
El primer 0x0 elige el pokemon para almacenar en búfer de las ranuras 1-6 (0x0 - 0x05)
El segundo 0x0 son los búferes que se utilizarán.
Ejemplos:
#org @start
Bufferpartypokemon 0x0 0x0 -----‘Almacena el primer pokemon y el búfer se establece en \v\h02; el búfer en el script DEBE tener 2 agregados cuando se usa como "\v\h0X", por lo que este será \v\h02 ya que nuestro puntero es 0x0
Bufferpartypokemon 0x1 0x1 -----‘Almacena en el búfer el segundo pokemon y el búfer se establece en \v\h03
Bufferpartypokemon 0x2 0x2 -----‘Almacena el tercer pokemon y el búfer se establece en \v\h04; \v\h04 (0x2) es la cantidad máxima de Pokémon para almacenar en el búfer, no se pueden almacenar más de 3 Pokémon a la vez, después de esto, se cargará el juego, el nombre del rival y algunas otras cosas.
Msgbox @hi 0x6
end

‘strings
#org @hi
= \v\h02, luego \v\h03 ‘lo que significa que se leerá [buffer1], luego [buffer2]

Leer y Comprobar(Read & Check)
El Read & Check usará sus especiales como 'special2 0x8005 0xZZ'
Especial 0x7 - Leer estadísticas de EV / Concurso
Leer EVs
Utiliza Setvar 0x8005 0xY
La 'Y' son las siguientes estadísticas:
0x0 HP
0x1 Ataque
0x2 Defensa
0x3 Velocidad
0x4 Ataque especial
0x5 Defensa especial
0x6 Carisma
0x7 Belleza
0x8 Dulzura
0x9 Ingenio
0xa Dureza
0xb Brillo(?)
Un numero mas alto da error

Ejemplo:
#org @start
Bufferpartypokemon 0x0 0x0------'Busca el pokemon en la ranura 1
setvar 0x8004 0x0 ---------------'Almacena (0x0) la ranura 1 de Pokémon en la variable 0x8004; reemplace 0x0 con 1-5 para elegir qué ranura de Pokémon usar, 0 es el primero y 5 es el sexto Pokémon
special 0x6 ----------------------'Abre el pokemon para editar
setvar 0x8005 0x6 ---------------'Establece la variable en la estadística de "Carisma"
special2 0x8006 0x7 --------------'Lee los EV / Stat (en este caso, Stat) y ESCRIBE su valor en la variable 0x8006 0x7 para leerlo más tarde
compare 0x8006 0x80 ------------'Compara la Carisma del Pokémon con 0x80
if 0x0 goto @fail
msgbox @coolest 0x6
special 0x6 ----------------------'Cierra el Pokémon y guarda sus cambios.
release
end

#org @fail
msgbox @not_cool 0x6
special 0x6 ----------------------'Cierra y guarda Pokémon si no es lo suficientemente Carismático, El Pokémon DEBE estar siempre cerrado antes de finalizar el script
release
end

#org @coolest
= Ese \v\h02 es el pokémon más \ngenial que he visto en mi vida!

#org @not_cool
= Ese \v\h02 tuyo es patético. ---'\v\h02 es el texto especial para cargar lo que esté almacenado en [buffer1].

Especial 0x8 - Leer IVs
Lee los IV
Utiliza Setvar 0x8005 0xY
La 'Y' son las siguientes estadísticas:
0x0 HP
0x1 Ataque
0x2 Defensa
0x3 Velocidad
0x4 Ataque especial
0x5 Defensa especial
Un numero mas alto da error

Ejemplo:
Esto es exactamente lo mismo que special 0x7.
La única diferencia es que Setvar 0x8005 debe establecerse por debajo de 6. dado que 0x5 es la última estadística que se puede verificar.
La comparación también debe cambiarse a cualquier valor entre 0x0 y 0x1F (0-31), ya que el máximo de IVs es 31.

Especial 0x9 - Comprobar flags de las Cintas
Comprobar Flags
Utiliza Setvar 0x8005 0xY
La 'Y' son las siguientes estadísticas:
0x0 a 0x1F: Flags activas, sin nombre en FireRed
Un numero mayor da error
Devuelve el valor y el estado de la bandera (0 o 1)
Solo una flag tiene un nombre, y es la flag del campeón (0xf), otorgada en el registro especial del Salón de la Fama.

Ejemplo
Igual que el special 0x8, simplemente cambie el special a 0x9
Utiliza 0x0 a 0x1F para el Setvar 0x8005
El compare 0x8006 debe establecerse en 0x1

Especial 0xa - Verificar el temporizador del Pokerus
No requiere ningún argumento
Devuelve el valor del temporizador (0xF - 0x0) o 0x10 si el Pokémon es inmune.

Ejemplo:
#org @start
lock
Bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
special2 0x8005 0xa
compare 0x8005 0x10
–--------'0x10 significa que tenía la enfermedad, pero ya no
if 0x1 goto @fine
compare 0x8005 0x0 –----------'0x0 significa que nunca se enfermó
if 0x1 goto @fine
buffernumber 0x1 0x8005------'Almacena en el búfer el número devuelto a \v\h03
msgbox @sick 0x6
special 0x6
release
end
#org @fine
message @good 0x6
special 0x6
release
end

#org @sick
= Tu \v\h02 está enfermo. \nLlevará \v\h03 ciclos para sanar.

#org @good
= ¡Ese es el \v\h02 \nmás saludable que he visto!

Especial 0xb - Comprobar Pokeball
No requiere argumentos
Devuelve el valor de la Pokeball en el que está almacenado.

Ejemplo:
#org @start
lock
Bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
special2 0x8005 0xb
compare 0x8005 0x0
----------'Cuando los Pokemons nacen, su valor de Pokeball es 0; esto comprueba eso.
if 0x1 goto @none
bufferitem 0x1 0x8005 --------'Almacena el valor de Pokeball en \v\h03.
msgbox @ball 0x6
special 0x6
release
end
#org @none
message @hatched 0x6
special 0x6
release
end

#org @ball
= Tu \v\h02 esta en \nuna \v\h03.

#org @hatched
= ¿Tu \v\h02 salio de un huevo?\n¡Estoy impresionado!

Especial 0xc - Comprobar ubicación de captura
No requiere argumentos
Devuelve la ubicación donde el Pokémon fue capturado o eclosionado.

Ejemplo:
Lo siento :c

Special 0xd - Comprobar la felicidad del Pokemon
No requiere argumentos
Devuelve la felicidad de Pokémon.

Ejemplo:
#org @start
lock
Bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
special2 0x8005 0xd
compare 0x8005 0x0

if 0x1 goto @none
buffernumber 0x1 0x8005 --------'Almacena el número de felicidad en \v\h03.
msgbox @happy 0x6
special 0x6
release
end

#org @none
message @hate 0x6
special 0x6
release
end

#org @happy
= La felicidad de tu\v\h02 \nes \v\h03.
#org @hate
= Tu \v\h02 te odia.

Special 0xe - Comprobar artículo que sostiene el Pokémon
No requiere argumentos
Devuelve el objeto que sostiene el Pokemon.

Ejemplo:
#org @start
lock
Bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
special2 0x8005 0xe
compare 0x8005 0x0

if 0x1 goto @none
bufferitem 0x1 0x8005 --------'Almacena el objeto del Pokémon en \v\h03.
msgbox @item 0x6
special 0x6
release
end

#org @none
message @no_item 0x6
special 0x6
release
end

#org @item
= Tu \v\h02 tiene el objeto \n\v\h03.
#org @no_item
= Tu\v\h02 no tiene ningun \nobjeto

Especiales de redacción y editor
Los especiales de escritura y editor usarán sus especiales como 'special 0xZZ'
Special 0xF – Editor de EV/Estadisticas de Concurso
Se usa para cambiar los valores de EV de un Pokémon, útil para concursos
Utiliza Setvar 0x8005 0xY
La 'Y' son las siguientes estadísticas:
0x0 HP
0x1 Ataque
0x2 Defensa
0x3 Velocidad
0x4 Ataque especial
0x5 Defensa especial
0x6 Carisma
0x7 Belleza
0x8 Dulzura
0x9 Ingenio
0xa Dureza
0xb Brillo(?)
Un numero mas alto da error

Utiliza Setvar 0x8006 0x0ZZ o Setvar 0x8006 0x1ZZ
El 'ZZ' es el número por el cual el EV aumentará o disminuirá
el 0 antes de ZZ significa sumar, mientras que el 1 significa restar; por lo tanto, 0A agregaría 10 Evs mientras que 1A restaría 10EVs

Ejemplo:
Editor de EV (Script sencillo)
#org @start
bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
setvar 0x8005 0x3 ----'Lee estadísticas de velocidad
setvar 0x8006 0x80 ----'Agrega 0x80(128) Evs a la velocidad
special 0xf ----'Special para hacer que el código funcione
special 0x6
release
end

Special 0x10 – Editor de IV
Se usa para cambiar los valores IV de un Pokémon.
Utiliza Setvar 0x8005 0xY
La 'Y' son las siguientes estadísticas:
0x0 HP
0x1 Ataque
0x2 Defensa
0x3 Velocidad
0x4 Ataque especial
0x5 Defensa especial

Utiliza Setvar 0x8006 0x0ZZ
Siendo el 'ZZ' el valor del IV que reemplazará. Esto no sumará ni restará del original, solo reemplazará el IV actual con el que se le indique.

Ejemplo:
Editor de IV (Script sencillo)
#org @start
bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
setvar 0x8005 0x3 ----'Lee estadísticas de velocidad
setvar 0x8006 0xa ----'Establece los IV de velocidad en 10
special 0x10 ----'Special para hacer que el código funcione
special 0x6
release
end

Special 0x11 – Establecer/Borrar Flag de Cintas
Lo siento :c

Special 0x12 – Pokerus, Dar/Inmunizar
Establece o elimina el Pokerus
Utiliza Setvar 0x8005 0xY
La 'Y' son los siguientes ciclos:
0x0 = Cura al pokemon o elimina la inmunización
0x1 a 0xf = Enferma al Pokémon
0xf = 15 ciclos; 0x1 = 1 ciclos; 2 = 2, 3 = 3, 4 = 4, 5 = 5, 6 = 6, 7 = 7, 8 = 8, 9 = 9, a = 10, b = 11, c = 12, d = 13, e = 14
0x10 o más = Inmuniza al pokémon

Ejemplo:
Da Pokerus
#Org @start
bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
setvar 0x8005 0xf ----------'Da pokerus con 15 ciclos de duración
special 0x12
special 0x6
release
end

Elimina Pokerus
Org @start
bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
setvar 0x8005 0x0 ----------'Establece el pokerus a 0 ciclos
special 0x12
special 0x6
release
end

Hace inmune a Pokerus
Org @start
bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
setvar 0x8005 0x10 ---------'Hace al pokemon inmune al pokerus
special 0x12
special 0x6
release
end

Special 0x13 – Aumentar/Disminuir la Felicidad
Se usa para aumentar/disminuir la felicidad de Pokémon
Utiliza Setvar 0x8005 0xY
La 'Y' es lo siguiente:
0x0 a 0xFF = Agrega felicidad
0x100 a 0x1ff = Resta felicidad

Ejemplo de aumento:
#org @start
bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
setvar 0x8005 0xA ----------'Aumenta la felicidad en 10
special 0x13
special 0x6
release
end

Ejemplo de disminución:
#org @start
bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
setvar 0x8005 0x1A ----------'Disminuye la felicidad en 10
special 0x13
special 0x6
release
end

Special 0x14 – Cambiar Pokeball
Cambiar la Pokeball en la que está almacenado un Pokémon
Utiliza Setvar 0x8005 0xY
La 'Y' son las siguientes Pokebolas:
0x0 Poke-ball (Eclocionado)
0x1 Master-ball
0x2 Ultra-ball
0x3 Great-ball
0x4 Poke-ball
0x5 Safari-ball
0x6 Net-ball
0x7 Dive-ball
0x8 Nest-ball
0x9 Repeat-ball
0xa Timer-ball
0xb Luxury-ball
0xc Premier-ball

Ejemplo:
#Org @start
bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
setvar 0x8005 0xC ----------'Establece la actual Pokeball del Pokémon a Premier Ball
special 0x14
special 0x6
release
end

Special 0x15 – Dar objeto
Le da un objeto a un Pokémon seleccionado
Utiliza Setvar 0x8005 0xY
La 'Y' es el ID del objeto

Ejemplo:
#org @start
bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
setvar 0x8005 0xX –------'La X se debe reemplazar con el ID del objeto
special 0x15
special 0x6
release
end

Special 0x16 – Cambiar especie de Pokémon
Cambia las especies de Pokémon seleccionadas
Utiliza Setvar 0x8005 0xY
La 'Y' es la identificación de Pokémon

Ejemplo:
#org @start
bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
setvar 0x8005 0xX –------'La X se debe reemplazar con el ID del Pokemon
special 0x16
special 0x6
release
end

DESCARGO DE RESPONSABILIDAD: Las especies cambiadas DEBEN tener la misma curva de EXP que el Pokemon actual o el juego se bloqueará al mirar la pantalla de POKEMON.
Según JPAN, entrar en una batalla soluciona este problema, pero no lo ha probado.

Special 0x17 – Cambiar ataques de Pokémon
Cambia los ataques de Pokémon seleccionados
Utiliza Setvar 0x8005 0xY
La 'Y' es el número de ranura 0-5
Utiliza Setvar 0x8006 0xZZ
El 'ZZ' es el número de ataque, se puede usar 0x0 para borrar el ataque

Ejemplo:
#org @start
bufferpartypokemon 0x0 0x0
setvar 0x8004 0x0
special 0x6
setvar 0x8005 0xX –------'La X se debe reemplazar con el ID del Movimiento
special 0x17
special 0x6
release
end

Este código puede (y normalmente debería) usarse junto con otro especial, este original del juego. Special 0xdc no solo accede a la ranura de Pokémon en 0x8004 (el que se usa en el código de descifrado) y abre la pantalla de ataque de la pantalla de estado, y el ataque elegido se guarda en 0x8005
Este código comprobará automáticamente si hay espacios vacíos primero y luego, si todos están ocupados
reemplace la ranura con el ataque dado. También restaura ese PP de ataque por completo y elimina
todas las ranuras PPup utilizadas.

Special 0x18 - Comprobar especie de Pokémon
Verifica (compara) la especie de un pokemon y devuelve un sí o no
Utiliza Special2 LASTRESULT 0x18
Ejemplo:
#org @start
special 0x9f ----------------------------'Pantalla de selección de pokemon
waitstate
compare 0x8004 0x6 --------------'comprueba si se presiona 'b' (cancelar)
if 0x1 goto @cancel
special 0x6
special2 LASTRESULT 0x18 ------'llama al special 18 (aparentemente 'special2' y no 'special')
compare LASTRESULT 0xYY -----'Se compara con 0xYY; YY es el número de pokemon
if 0x1 goto @yes
special 0x6
release
end

Esto solo comparará un pokemon y devolverá el resultado. NO te dirá la especie de Pokémon, ni hará nada más. Use esto como una declaración if con un pokemon en lugar de una pregunta.
Créditos del Script: Lance32497(PokéCommunity ).


Specials del Equipo Pokémon
Los especiales del grupo pokemon parecen fallarme siempre, todos los indicadores de estado son iguales a sueño y el PS no se comprueba correctamente, seguiré investigando, pero los scripts deberían ser la forma correcta para usarlos.

Especial 0x52 - Inducir estado temporal
Agrega temporalmente efectos de estado a los Pokémon salvajes

Utiliza 0x8004 con la siguiente clave
0-2: Bits de Sueño.
3: Envenenado
4: Quemado
5: Congelado
6: Paralizado
7: Gravemente envenenado

Utiliza 0x8005 como número de cambios.
Establecerlo en 7 es igual a 1 pokemon que aparecerá así, 0E (14) es igual a 2, etc. Multiplica por el número de pokemon que aparecerán así

Ejemplo:
#org @start
setvar 0x8004 0x5 '---- Establecer estado del pokemon salvaje en congelado
setvar 0x8005 0x7 '---- Numero de pokemon salvaje con el estado alterado(en este caso, 1)
special 0x52

Especial 0x53 - Cancelador de estado
Cancela al special 0x52
No necesita argumentos; se puede colocar en cualquier script tal cual.

Especial 0x54 - Inducir estado permanente
Aplica de forma permanente el efecto de estado a todos los Pokémon encontrados.
Utiliza 0x8004 la misma clave que 0x52 especial

Ejemplo:
#org @start
setvar 0x8004 0x6 '----Establecer estado del pokemon salvaje en Paralizado
special 0x54
release
end

DESCARGO DE RESPONSABILIDAD:
Hay un error con este script, ya que si usas una función de curación (especial 0x0), una que crea un pokémon (givepokemon, giveegg, especial 0x1bb ...) o simplemente retiras un pokémon de la caja, se activa la rutina de creación de estado. Como tal, cada pokémon perfectamente sano que entra al Centro Pokemon salen envenenados o paralizados…
-JPAN

Especial 0x55 - Cancelador de estado permanente
Cancela al special 0x54
Funciona igual que el special 0x53

Especial 0x62 - Borrar Pokémon del Grupo
Utiliza 0x8004 0xY
Y es la ranura a eliminar, 0xf elimina todo el gruppo

Ejemplos:
Ejemplo # 1 - Borrar 1er Pokémon:
#org @start
setvar 0x8004 0x0
special 0x62

release
end

Ejemplo # 2 - Borrar grupo completo:
#org @start
setvar 0x8004 0xf
special 0x62

release
end

Ejemplo # 3 - Conserva 1 Pokémon:
#org @start
special 0x9f ------------'Pantalla de selección de Pokémon
waitstate
compare 0x8004 0x6 -------'Comprueba si se presiona 'b' y se cancela la acción
if 0x4 goto @cancel
special 0x6 -------------'Desencripta el pokemon a la RAM
setvar 0x8004 0xf ------'Selecciona todo el grupo
special 0x62 ------------'Elimina todo el grupo
setvar 0x8004 0x0 ------'Establecer variable a 0
special 0x6 -------------'Cifrar Pokemon a 0x8004 0x0; ranura 0.
release
end

#org @cancel
release
end

Especial 0x63 - Comprobador de estado
Utiliza Setvar 0x8004 0xY
Y es la ranura de Pokémon

Devuelve el estado del Pokémon solicitado
Las claves de estados es la misma que el special 0x52

Especial 0x64 - Modificador de estado del Grupo
Utiliza Setvar 0x8004 0xY
Y es la ranura de Pokémon
Utiliza Setvar 0x8005 0xY
Y es la flag del estado
0-2: Bits de Sueño.
3: Envenenado
4: Quemado
5: Congelado
6: Paralizado

Especial 0x65 - Comprobar PS del Grupo
Utiliza Setvar 0x8004 0xY
Y es la ranura de Pokémon

Ejemplo:
#org @start
setvar 0x8004 0x1
special 0x65
msgbox @m 0x2
release
end

#org @m
= Tu Pokémon tiene \v\h03 PS.
El Ps al parecer no se actualiza, si ocurre eso solo debe llenarle los Ps

Especial 0x66 - Cambiar PS del Grupo
Utiliza Setvar 0x8004 0xY
Y es la ranura de Pokémon
Utiliza Setvar 0x8005 0xY
Y es la cantidad de Ps
Utiliza Setvar 0x8006 0xY
1 para curar, 0 para quitar

Ejemplo:
#org @start
setvar 0x8004 0xF ----'Todo el grupo
setvar 0x8005 0xB ----'11 PS
setvar 0x8006 0x0 ----'Resta ps
special 0x66
release
end


Special de Batallas Salvajes:
Special 0x51 - Batalla con Pokémon Variocolor(Shiny)
Hace que el próximo Pokémon sea Variocolor(Shiny)

Ejemplo:
#org @start
special 0x51 -------------'Hace al Pokémon Variocolor(Shiny)
wildbattle 0x1 0x1 0x0 ----'Inicia la batalla con el Pokémon Variocolor(Shiny)
release
end
Special 0x56 - Cambiador de Pokémon errante
Variables utilizadas:
Uses Setvar x8004



Este es el único que explicaré, hasta que practique los demás:
0 a 0x3fff-> El número de Pokémon deseado (Puede utilizar YAPE o G3HT para ver los números correctos en HEX ya que hay una brecha entre Celebi y Treecko)

0x4000-> 0x8015: El número de pokemon EN la variable almacenada en 0x8004
0x8000-> 0xfffc: no definido
0xfffd-> pokemon específico almacenado en un puntero guardado en dos variables, 0x8008 0x8009.
0xfffe-> pokemon específico almacenado en un puntero, que debe colocarse a mano en 0x0203f488
0xffff-> pokemon específico almacenado en la ubicación de LoadPointer

Uses Setvar x8005



Posibilidad de que los Pokémon aparezcan de 65536
0x0-0xffff (0-65536)
50% es 7fff (32767)

Uses Setvar x8006



Cantidad de Pokémon errante 0x1,0x2, etc.
0x0 significa ilimitado, seguirá apareciendo

Uses Setvar x8007



Utiliza mitades inferior y superior:

La mitad inferior es la ubicación dada por:
cada bit es 0 o 1 dependiendo de lo que quieras
Bit 0 = Hierba
Bit 1 = Navegación
Bit 2 = Árbol / Golpe roca
Bit 3 = Pesca
1001 (bit 0 = 1, bit 1 = 0, bit 2 = 0, bit 3 = 1) haría que los Pokémon estén disponibles en hierba y pesca
1110 (bit 0 = 1, bit 1 = 1, bit 2 = 1, bit 3 = 0) lo activaría en césped, surf y árbol / rock-smash
Sin embargo, debe estar escrito en hexadecimal, por lo que 0x9 y 0xE respectivamente

La mitad superior es el nivel de Pokémon:
el nivel 80 es 0x50

Ejemplo:
#org @start
setvar 0x8004 0x85 ------' El pokemon sera Eevee
setvar 0x8005 0xfd70 –--' hace que las posibilidades de que aparezca sean 99% (64880)
setvar 0x8006 0x1 -------'Aparecerá una vez
setvar 0x8007 0x500e –' aparecera por de todas las formas excepto pescando
special 0x56
release
end

Solo puede reemplazar el nivel para los códigos de Roaming, es decir, solo para los que están en ese 0x8006 = 1.

Special 0x57 - Cancelador de Pokémon de Errante
Limpia el Special 0x56 para su próximo uso.

Special 0x58 - Cambiador de datos de Pokémon salvajes
Cambia los datos de Pokémon del mapa actual a un conjunto predefinido que creaste.

Ejemplo:

Todo script usando el offset 0x810000

Script por Loadpointer :
msgbox @change 0x2
loadpointer 0x0 0x810000
special 0x58
release
end

#org @change
= Se han cambiado los pokémon salvajes.

Script por Variables :
msgbox @change 0x2
setvar 0x8008 0x0000
setvar 0x8009 0x0881
setvar 0x8005 0x0
setvar 0x8006 0x1

special 0x58
release
end

#org @change
= Se han cambiado los pokémon salvajes.

Script por writebyteoffset :
msgbox @change 0x2
writebytetooffset 0x81 0x203F48C
writebytetooffset 0x00 0x203F48D
writebytetooffset 0x00 0x203F48E
writebytetooffset 0x08 0x203F48F

special 0x58
release
end

#org @change
= Se han cambiado los pokémon salvajes.

Edición Hexadecimal Parte 1:
En el desplazamiento definido en el script (en mi caso 0x810000) escriba:
XX 00 00 00 YY YY YY 08

XX: determina la ubicación de los datos de pokemonsalvajes ... como los Pokémon que aparecen en el agua, la hierba, los árboles / rocas y la pesca.
Osea:
Bit 0 = Hierba
Bit 1 = Navegación
Bit 2 = Árbol / Roca
Bit 3 = Pesca

Entonces, activar Hierba y Pesca sería 1001 (en binario), lo que seria 0x9 en hexadecimal.

00 00 00 - relleno
YY YY YY: puntero a datos de pokemon salvajes (al revés, el 08 ya está incluido, por lo que solo necesita el desplazamiento al revés, no agregue otro 08)

Edición Hexadecimal Parte 2:
En el desplazamiento definido por los "YY" en la parte 1, deberá colocar los datos de los pokémon salvajes.
Va como sigue:
AA BB CC 00

AA = nivel mínimo
BB = Nivel máximo
CC = Número de índice de Pokémon
00 = relleno

Para los datos de Pokemon salvajes en la hierva, deberá completar esta información 12 veces en total
Para los datos de Pokemon salvajes surfeando, deberá completar esta información 5 veces en total
Para los datos de Pokemon salvajes en árboles / rocas, deberá completar esta información 5 veces en total
Para los datos de Pokemon salvajes al pescar, deberá completar esta información 10 veces en total

Ejemplo:
Para un grupo completo de Eevee que van desde el nivel 25 al 32 en hierba:
19 20 85 00 19 20 85 00 19 20 85 00 19 20 85 00
19 20 85 00 19 20 85 00 19 20 85 00 19 20 85 00
19 20 85 00 19 20 85 00 19 20 85 00 19 20 85 00

MUCHISIIIMAAS gracias a Lance32497 por ayudarme a resolver esto.

Special 0x59 - Cancelador de datos de Pokémon salvajes
Cancela al Special 0x58, borrando todos los datos que se modificaron.

Ejemplo:
#org @start
msgbox @normal 0x2
special 0x59
release
end

#org @normal
= Los Pokémon han vuelto a la normalidad

Special 0x97 - Batalla en la hierba aleatoria
No necesita argumentos
Crea una batalla salvaje de hierba aleatoria
Los datos de Pokémon salvajes (de hierba) deben existir en ese mapa.

Special 0x98 - Batalla de agua aleatoria
No necesita argumentos
Crea una batalla salvaje de hierba aleatoria
Los datos de Pokémon salvajes (en agua) deben existir en ese mapa.

Special 0x9c - Old Man Battle For All
La batalla del Viejo contra cualquier Pokémon
Utiliza Setvar 0x8004 0xY
Siendo Y la especie del Pokémon
Utiliza Setvar 0x8005 0xY
Siendo Y el nivel de Pokémon

Ejemplo:
#org @start
setvar 0x8004 0x1 -----' Bulbasaur
setvar 0x8005 0xA -----' Pokemon nivel 10
special 0x9c -----------' Special utilizado
release
end

El anciano no puede atrapar a ningún legendario excepto por el trío de aves, Blissey y algunos otros de la región.

Special 0x156 - Batalla de Pokémon Fantasma
Utiliza Setvar 0x8004 0xY 'siendo Y la especie Pokémon
Utiliza Setvar 0x8005 0xY 'como nivel de Pokémon
Utiliza Setvar 0x8006 0xY 'como elemento retenido

Ejemplo:
#org @start
setvar 0x8004 0x1 -----' Bulbasaur
setvar 0x8005 0xA -----' Pokemon nivel 10
setvar 0x8006 0x0 -----' Sin objeto de ayuda
special 0x9c -----------' Special utilizado
release
end

Este código puede usar todos los Pokémon legendarios excepto el trío de aves (no preguntes por qué), blissey y algunos otros en la región.
Les recuerdo que este código originalmente estaba destinado a hacer una batalla con un Pokémon fantasma inalcanzable que no es tipo fantasma.
Esto se bloqueará si no tiene el SILPH SCOPE, por lo que funcionará sin él.


Scripts al Caminar:
Muy Pronto
(10/10/2020)


Especiales de detección de Key:
Muy Pronto (10-11/10/2020)

Varios:
Muy Pronto
(11-12/10/2020)

Robar ideas de una persona es plagio; Robar de muchos es investigar.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Actualizaciones:
08/10/2020:
Agregado el contenido del tema: "Special de Poke-Decrypt:"

09/10/2020:
Agregado el contenido del tema: "Specials del Equipo Pokémon"

11/10/2020:
Agregado el contenido del tema: "Specials de Batallas Salvajes"​
 
Última edición:

GliscoRx3

Terremoto para todos!
Esta es una traduccion de un pequeño (no tan pequeño en realidad) tutorial de Turtl3skulll (PokéCommunity ) para el Pokémon Fire Red Hacked Engine (Conocido como JPAN's Hacked Engine)

Poco a poco ire agregando mas contenido en español del tutorial

Aqui el enlace del tutorial de Turtl3skulll original(En ingles):
https://www.pokecommunity.com/showthread.php?t=336462

Si notan algún error, haganmelo saber por favor

De aquí en adelante comienza el tutorial traducido al español, disfrútenlo :b
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Pokémon Fire Red Hacked Engine Para Principiantes
Por: Turtl3skulll


Mientras trabajaba con el JPAN's Hacked Engine, he notado que muchas de las instrucciones están muy mal escritas; muchos asumen que usted sabe todo lo que está sucediendo y, por lo tanto, muchos ejemplos se anulan por completo. Comencé a reescribir su manual de una manera más amigable, una que (con suerte) cualquier principiante con conocimientos de secuencias de comandos pueda ver y comprender sin la necesidad de leer cuidadosamente cada palabra del documento y tener que escribir una y una juntos para descubrir un ejemplo del que se habló brevemente antes de que sea necesario.
Intentaré actualizar el manual para que sea lo más fácil de usar posible, e incluiré cada especial tan pronto como lo haga funcionar completamente.

Usaré este formato:

NOMBRE DEL ESPECIAL Y SU NÚMERO
BREVE DESCRIPCIÓN
EJEMPLO DE SCRIPT
NOTAS ADICIONALES SOBRE ELLO

DESCARGO DE RESPONSABILIDAD: No incluiré todo lo que tenía el manual original. Estos serán ejemplos de cómo crear un script de los especiales que creó y, por lo tanto, no se explicarán con todo detalle, para eso es su manual y puede consultarlo para obtener una explicación detallada de su código.

Si algo está mal, necesita más explicaciones, o me perdí un especial y usted sabe cómo explicarlo, no dude en decírmelo y lo agregaré aquí. Espero que esto ayude a algunos de ustedes :)

Cajas Multichoice:
Las cajas Multichoice tienen 2 especiales, siendo especial 0x24 y especial 0x25
Contienen 7 casillas para usar, que van desde 0x20 - 0x25, que definen cuántas opciones desea tener.

Especial 0x25 - Cargar Pointer desde Banco de Script
El Especial 0x25 usa pointers dados en el script para cargar los datos en los cuadros de selección múltiple
Utiliza Setvar 0x8006 --multichoice slot
Ejemplo especial 0x25:
Para 2 opciones:
#org @start
lock
setvar 0x8006 0x0 ------------------' Establece la primera ranura de elección
loadpointer 0x0 @1 -----------------' Carga '@ 1' en la primera ranura de elección
special 0x25 -----------------------' Prepara la primera ranura de elección que se mostrará
setvar 0x8006 0x1 -----------------' Establece la segunda ranura de elección
loadpointer 0x0 @2 -----------------' Carga '@ 2' en la segunda ranura de elección
special 0x25 ------------------------' Prepara la segunda ranura de elección que se mostrará
Multichoice 0x0 0x0 0x20 0x0 --------' El tercer 0xXX es el cuadro que utilizará; 0x20-0x25, en consecuencia. El resto es relleno
release
end

#org @1
= Opción 1 'Este es el texto que aparecerá en el espacio de elección 1
#org @2
= Opción 2 'Este es el texto que aparecerá en el espacio de elección 2
Para agregar una tercera o cuarta opción, simplemente agregue otro 'setvar 0x8006 0xYY' otro 'loadpointer 0x0 @something' y 'special 0x25', como se muestra a continuación, así como también cambiar el Multichoice de 0x20 al cuadro con la cantidad de elección deseada.

Para 3 opciones:
#org @start
setvar 0x8006 0x0
loadpointer 0x0 @1
special 0x25
setvar 0x8006 0x1
loadpointer 0x0 @2
special 0x25
setvar 0x8006 0x2
loadpointer 0x0 @3
special 0x25
multichoice 0x0 0x0 0x21 0x0

#org @1
= Opción 1

#org @2
= Opción 2

#org @3
= Opción 3
Especial 0x24 - Cargar puntero por variables
Special 0x24 usa variables predefinidas para cargar los datos en los cuadros de selección múltiple
Usa:
Setvar 0x8004: para cargar la mitad inferior de un puntero (B en 0xAAAABBBB)
Setvar 0x8005: para cargar la mitad superior de un puntero (A en 0xAAAABBBB)
Setvar 0x8006 - ranura de multichoice

Ejemplo especial 0x24:
#org @start
lock
setvar 0x8004 0x3848 ------'El pointer es 08803848, esto toma la mitad inferior
setvar 0x8005 0x0880 ------'El pointer es 08803848, esto toma la mitad superior
setvar 0x8006 0x0
loadpointer 0x0 0x0203f4a0
special 0x24
setvar 0x8004 0x383f ------'El pointer es 0880383f, esto toma la mitad inferior
setvar 0x8005 0x0880 –----'El pointer es 0880383f, esto toma la mitad superior
setvar 0x8006 0x1
loadpointer 0x0 0x0203f4a0
special 0x24
multichoice 0x0 0x0 0x20 0x0
release
end
#org 0x803848
= Texto 1
#org 0x80383f
= Texto 2

El número máximo de opciones permitidas es 7, si intenta cargar 'Setvar 0x8006 0x7' o superior (que serían 8 opciones) fallará. Cada puntero de carga debe apuntar a algún desplazamiento, ya sea que contenga texto o no, de lo contrario, el juego se bloqueará. El texto del cuadro de opciones múltiples debe tener menos de 20 caracteres para que se muestre correctamente, y según JPAN no se mostrarán caracteres especiales como \v\hxx o colores, pero funciona bien para mí.


Personalización del entrenador en tiempo de ejecución:
El OW del entrenador y la tarjeta de entrenador ahora se pueden cambiar.
Las siguientes variables contienen la variable que se utilizará según lo que desee cambiar:
Cambios variables
0x4054 De pie y caminando
0x4055 Bici
0x4056 Sentado (Surf)
0x4057 Busca Pelea
0x4058 Pesca
0x4059 Busca Pelea en bicicleta
Ejemplos:

OW del entrenador:
#org @start
setvar 0x4054 0x025----------'la variable 4054 cambiará el sprite de pie y caminando, 0x25 se puede encontrar en Advance Map, en "Picture no" simplemente convierta ese número en el cuadro a hexadecimal, para usar ese sprite.
callasm 0x805BE61------------'Cambia el sprite instantáneamente y permite que el script continúe
end--------------------------'0x025 cambiará el OW al de una niña; esto se puede cambiar según el OW en el que desee convertirse, Ejemplo: 0x87 cambiará el OW al OW de Lapras

Para que el sprite cambie, se debe ingresar un nuevo mapa, o simplemente puede llamar a la rutina ASM en este script de ejemplo (crédito a diegoisawesome por encontrar esta rutina).

Tarjeta de entrenador:
Para el chico:
#org @start
setvar 0x4060 0x8
end

Para la chica:
#org @start
setvar 0x4061 0x8
end

0x8 es solo la imagen que reemplazará al original
Las tarjetas de entrenador usan las variables 0x4060 para niños y 0x4061 para niñas.
Para volver al héroe / heroína original, usa 0x87 y 0x88 en consecuencia.


Especiales de Poke-Decrypt:
Muy Pronto
(08-09/10/2020)


Especiales del Equipo Pokémon
Muy Pronto
(09/10/2020)


Especiales de Batallas Salvajes:
Muy Pronto
(09-10/10/2020)


Scripts al Caminar:
Muy Pronto
(10/10/2020)


Especiales de detección de Key:
Muy Pronto (10-11/10/2020)

Varios:
Muy Pronto
(11-12/10/2020)

Robar ideas de una persona es plagio; Robar de muchos es investigar.
Me parece un gran aporte la verdad. A muchos les vendrá muy bien tener unas nociones extra del JPAN, sobre todo a los que se están iniciando. Mis felicitaciones.
 

Versekr Dark

Usuario mítico
Me gustaria agregar que no es necesaria la herramienta para agregar las rutinas, casi todas dicen su special que llevan así que se podria busar cada rutina por separado e insertarse manualmente sin la necesidad de la herramienta.
 
Arriba