FR|Scripting|Wildbattle modificable (nick/marca/estado/nivel/HP/stats)
¡Hola WAH! Hoy traigo con mucha ilusión un tema que llevo investigando desde hace varios días. Se trata del data estructure de un pokémon salvaje. Gracias a que la web de Bulbapedia te da el orden del data pokémon y el offset desde donde se cargan los wildbattle he conseguido realizar una investigación. El resultado ha sido éste, un wildbattle personalizable.
Con este tuto podréis personalizar éstas características del pokémon salvaje:
- Nick
- Marca
- Estado
- Nivel
- Cantidad de puntos de vida
- Cantidad máxima de puntos de vida
- Estadísticas (Atk,Def,Vel,SpAtk,SpDef)
¡Y si! ¡Todas estas características se mantienen si el pokémon es capturado!
(Te dedico éste tuto @Guilly Alpha[/MENTION])
¿Cómo lo hacemos?
Sencillo, aprovecharemos los comandos setwildbattle y dowildbattle para cambiar antes de empezar el combate todas las características del pokémon salvaje mediante writebytetooffsets (WBTOs):
Os dejo un ejemplo y el fragmento que lo definió:
Código:
[…]
setwildbattle 0x8 0x5 0x0
writebytetooffset 0xC1 0x2024034 "G de GUILLY"
writebytetooffset 0xCF 0x2024035 "U de GUILLY"
writebytetooffset 0xC3 0x2024036 "I de GUILLY"
writebytetooffset 0xC6 0x2024037 "L de GUILLY"
writebytetooffset 0xC6 0x2024038 "L de GUILLY"
writebytetooffset 0xD3 0x2024039 "Y de GUILLY"
writebytetooffset 0xFF 0x202403A "7mo espacio borrado del nick"
writebytetooffset 0xFF 0x202403B "8vo espacio borrado del nick"
writebytetooffset 0xFF 0x202403C "9no espacio borrado del nick"
writebytetooffset 0xFF 0x202403D "10mo espacio borrado del nick"
writebytetooffset 0xA 0x2024047 "Marcado con cuadrado y corazón"
writebytetooffset 0x8 0x202407C "Estado envenenado"
writebytetooffset 254 0x2024080 "Nivel=254"
writebytetooffset 0x37 0x2024082 "Primer byte de salud"
writebytetooffset 0x2 0x2024083 "Segundo byte de salud"
writebytetooffset 0xF7 0x2024084 "Primer byte de salud máxima"
writebytetooffset 0x2 0x2024085 "Segundo byte de salud máxima"
writebytetooffset 255 0x202408E "Defensa especial = 255"
dowildbattle
[…]
Código:
setwildbattle 0x(especie pokémon) 0x(nivel) 0x(objeto)
Código:
dowildbattle
WBTOS
Antes de empezar os recuerdo que XSE convertirá cualquier parámetro numérico igual o inferior a 255 a su versión en hexadecimal, por lo que es lo mismo escribir en XSE el parámetro 10 que el 0xA.
Es lo mismo...
...que escribir:
Por lo tanto, no tendréis que buscar valores superiores a 255 para los bytes, solo lo haréis en caso de los words, es decir, las parejas de bytes. (Tranquilos, Os dejo un link a un conversor decimal-hexadecimal para que os sea más sencillo: Conversor binario/decimal/hexadecimal)
Es lo mismo...
Código:
writebytetooffset 0xFE 0x2024080
Código:
writebytetooffset 254 0x2024080
(XSE nunca leerá ni convertirá parámetros superiores a 255)
Por lo tanto, no tendréis que buscar valores superiores a 255 para los bytes, solo lo haréis en caso de los words, es decir, las parejas de bytes. (Tranquilos, Os dejo un link a un conversor decimal-hexadecimal para que os sea más sencillo: Conversor binario/decimal/hexadecimal)
Nick
En éste apartado le damos un Nick al pokémon salvaje. El Nick se compone de 7 letras. Pensad que las letras deben estar en hex (Os dejo éste link a una herramienta del usuario kakaroto para ello: [Tool] Text Hex Convert - The PokéCommunity Forums
Código:
writebytetooffset 0x1 0x2024040
writebytetooffset 0x2 0x2024041
writebytetooffset 0x3 0x2024042
writebytetooffset 0x4 0x2024043
writebytetooffset 0x5 0x2024044
writebytetooffset 0x6 0x2024045
writebytetooffset 0x7 0x2024046
Marca
La marca yo lo considero algo sin importancia pero se puede cambiar también, lo define así:
Código:
writebytetooffset 0x(byte) 0x2024047
Código:
0x0 nada
0x1 círculo
0x2 cuadrado
0x3 0x1+0x2
0x4 triángulo
0x5 0x1+0x4
0x6 0x2+0x4
0x7 0x2+0x1+0x4
0x8 corazón
0x9 […] combinaciones siguientes con 0x8
Estado
¿Quién no ha deseado en un evento combatir con un Snorlax mientras duerme? Pues con esto podrás añadirle efectos de estado al pokémon salvaje mediante la modificación de un byte.
Código:
writebytetooffset 0x(byte) 0x202407C
Código:
0x0 a 0x7 SLP Dormido (0 turnos) a Dormido (7 turnos)
0x8 PSN Envenenado
0x10 BRN Quemado
0x20 FRZ Congelado
0x40 PAR Paralizado
0x80 PSN2 Tóxico
Código:
writebytetooffset 0x3 0x202407C
Código:
0x0 a 0x7 SLP (0) a SLP (7)
0x8 PSN
0x9 a 0xF SLP (0) a SLP (7) + PSN
0x10 BRN
0x11 a 0x17 SLP (0) a SLP (7) + BRN
0x18 PSN + BRN
0x19 a 0x1F SLP (0) a SLP (7) + PSN + BRN
0x20 FRZ
0x21 a 0x27 SLP (0) a SLP (7) + FRZ
0x28 PSN + FRZ
0x29 a 0x2F SLP (0) a SLP (7) + PSN + FRZ
0x30 BRN + FRZ
0x31 a 0x37 SLP (0) a SLP (7) + BRN + FRZ
0x38 PSN + BRN + FRZ
0x39 a 0x3F SLP (0) a SLP (7) + PSN + BRN + FRZ
0x40 PAR
0x41 a 0x47 SLP (0) a SLP (7) + PAR
0x48 PSN + PAR
0x49 a 0x4F SLP (0) a SLP (7) + PSN + PAR
0x50 BRN + PAR
0x51 a 0x57 SLP (0) a SLP (7) + BRN + PAR
0x58 PSN + BAR + PAR
0x59 a 0x5F SLP (0) a SLP (7) + PSN + BAR + PAR
0x60 FRZ + PAR
0x61 a 0x67 SLP (0) a SLP (7) + FRZ + PAR
0x68 PSN + FRZ + PAR
0x69 a 0x6F SLP (0) a SLP (7) + PSN + FRZ + PAR
0x70 BRN + FRZ + PAR
0x71 a 0x77 SLP (0) a SLP (7) + BRN + FRZ + PAR
0x78 PSN + BRN + FRZ + PAR
0x79 a 0x7F SLP (0) a SLP (7) + PSN + BRN + FRZ + PAR
0x80 PSN2
0x79 a 0x7F SLP (0) a SLP (7) + PSN2
[…]
0xFF SLP (7) + PSN2+ PSN + BRN + FRZ + PAR + PSN2 (Todos)
Nivel
El nivel está relacionado con sus estadísticas. Por ello, debo aclarar que al cambiar el nivel mediante WBTO de un pokémon esto solo cambiará el nivel aparente durante el combate. Eso sí, al atrapar el pokémon, éste ganará el nivel aparente como real en lugar del nivel determinado en el setwildbattle. El nivel establecido en el setwildbattle es el que genera sus estadísticas de combate así que si queréis que un pokémon coincida su nivel con sus estadísticas no modifiquéis éste parámetro. El WBTO para el nivel es el siguiente:
Código:
writebytetooffset 0x(nivel) 0x2024080
Cantidad de puntos de vida y cantidad máxima de puntos de vida
¿Quién no ha querido hacer un combate con un pokémon que ya había sido herido por terceros? Con estos WBTOS podréis modificar la salud del pokémon tanto para establecer los niveles de salud que queráis. Son éstos comandos.
Código:
writebytetooffset 0x(HP) 0x2024082
writebytetooffset 0x(HP) 0x2024083
writebytetooffset 0x(MaxHP) 0x2024084
writebytetooffset 0x(MaxHP) 0x2024085
Pongamos por ejemplo que queremos que nuestro pokémon tenga 150/300 puntos de salud (300 equivale a 0x1 0x2C)
Código:
writebytetooffset 150 0x2024082
writebytetooffset 0 0x2024083
writebytetooffset 0x2C 0x2024084
writebytetooffset 0x1 0x2024085
Estadísticas (Atk,Def,Vel,SpAtk,SpDef)
Éstas estadísticas se generaran por defecto por el nivel y la especie determinados en el setwildbattle pero se pueden modificar. Imagínate que por alguna causa quieras que un pokémon salvaje gane o pierda fuerza durante un combate, aquí tienes la solución.
Código:
writebytetooffset 0x(Atk) 0x2024086
writebytetooffset 0x(Atk) 0x2024087
writebytetooffset 0x(Def) 0x2024088
writebytetooffset 0x(Def) 0x2024089
writebytetooffset 0x(Vel) 0x202408A
writebytetooffset 0x(Vel) 0x202408B
writebytetooffset 0x(SpAtk) 0x202408C
writebytetooffset 0x(SpAtk) 0x202408D
writebytetooffset 0x(SpDef) 0x202408E
writebytetooffset 0x(SpDef) 0x202408F
Código:
writebytetooffset 0x1 0x202408C
writebytetooffset 0x2C 0x202408D
writebytetooffset 10 0x202408E
writebytetooffset 0 0x202408F
Cualquier duda me la mandáis por aquí, las dudas de uno le servirán para los demás. Todos salimos ganando.
¡Un abrazo a todos!
FEL!X, ~Tu amigo el espadachín
PD: En la investigación he encontrado más cosas pero aún las estoy testeando. Seguramente en el subforo de investigaciones cuelgue todo el tema para compartirlo con quién esté interesado. Entre otras cosas porque se podría personalizar aún más con, por ejemplo; el moveset, el tipo de pokéball, el entrenador, etc [...]. :blush:
Os dejo algunos tutoriales relacionados a éste temario:
- [FR] El futuro es hoy, otra vez | Expandir la cantidad de Niveles de 100 a 255 de @Lunos
- GBA|Scripting|Cambiar descripción del tipo de obtención pokémon de FEL!X
- [FR] Forzar la evolución de un Pokémon silenciosamente de @Lunos
- [ASM] Evolution via Callasm in FR de @jiangzhengwenjz
- [FR] Como hacer una wildbattle en un script de @Dani_SR_17
- FR | Script | ¡Givepokemon Personalizable! de @Lunos
- GBA | Otros | ROUTINE ASM: Change status of pokemon de @Andrea
Última edición: