Holi. El dia de hoy traigo algo bastante jugoso que recien recordé que tenia guardado.
ShantyTown lo compartió en Discord hace un huevo de tiempo y me parece una gran caracteristica.
El dia de hoy crearemos una flag personalizada que al usarla, hará que el siguiente pokémon que encontremos sea shiny.
Los creditos van para ShantyTown quien compartió la caracteristica y como implementarla justo aqui.
Sin mas que decir, comencemos.
Requisitos:
-Leer mi tema de introducción a Pokeruby.
Instrucciones:
Pues la verdad es que es extremadamente sencillo todo.
Entramos al link de GitHub previamente mencionado, vemos todas las lineas añadidas y replicamos esos cambios en los archivos pertinentes de nuestra carpeta Pokeruby.
Asi que:
1) Vamos a \pokeruby\data\maps y elegimos la carpeta con los archivos del mapa en el que queremos implementar la flag.
2) Abrimos el archivo "scripts.inc" y elegimos un Person Event que activará la flag tras interactuar con él.
En este caso yo quiero que el cartel "Ruta 101 - Pueblo Escaso" active la flag. ¿Que hago entonces?
Pues añado: "setflag FLAG_SET_SHINY_MON" a su script, al que puedo encontrar facilmente apoyandome en el archivo "text.inc".
El resultado es:
3) Ahora nos movemos al siguiente cambio que ocurre en \pokeruby\include\constants\flags.h
Ctrl+F "FLAG_LANDMARK_BERRY_MASTERS_HOUSE", y dejando una linea de por medio, añadimos: "#define FLAG_SET_SHINY_MON (SYSTEM_FLAGS + 0x64)".
Guardo el archivo y cierro.
4) Ahora nos vamos al siguiente cambio que ocurre en \pokeruby\include\pokemon.h
Ctrl+F "bool8 IsShiny(struct Pokemon *mon);", creamos una nueva linea y añadimos "bool8 IsShinyOtIdPersonality(u32 otId, u32 personality);".
Guardo el archivo y cierro.
5) Ahora nos vamos al proximo archivo a modificar, que es en \pokeruby\src\pokemon_1.c
-Añadimos #include "constants/flags.h" en una nueva linea despues de #include "constants/abilities.h", que es la tercera.
-Añadimos #include "event_data.h en una nueva linea despues de #include "constants/species.h", que es la septima.
-Ctrl+F "level_up_learnset_pointers" y dejando una linea de por medio, añadimos "static u32 ForceShinyPersonality(u32 personality);".
-Ctrl+F "personality = Random32();", segundo resultado. Nos situamos al final de la linea, haremos una nueva e insertamos:
C:\cygwin64\Cygwin.bat
cd pokeruby
make
Y ya.
Aqui una muestra del resultado:
Explicación:
S alguien que sepa sobre C lee este tema, seria genial que ofrezca una mejor explicación que la mia.
Y eso fue todo.
ShantyTown lo compartió en Discord hace un huevo de tiempo y me parece una gran caracteristica.
El dia de hoy crearemos una flag personalizada que al usarla, hará que el siguiente pokémon que encontremos sea shiny.
Los creditos van para ShantyTown quien compartió la caracteristica y como implementarla justo aqui.
Sin mas que decir, comencemos.
Requisitos:
-Leer mi tema de introducción a Pokeruby.
Instrucciones:
Pues la verdad es que es extremadamente sencillo todo.
Entramos al link de GitHub previamente mencionado, vemos todas las lineas añadidas y replicamos esos cambios en los archivos pertinentes de nuestra carpeta Pokeruby.
Asi que:
1) Vamos a \pokeruby\data\maps y elegimos la carpeta con los archivos del mapa en el que queremos implementar la flag.
2) Abrimos el archivo "scripts.inc" y elegimos un Person Event que activará la flag tras interactuar con él.
En este caso yo quiero que el cartel "Ruta 101 - Pueblo Escaso" active la flag. ¿Que hago entonces?
Pues añado: "setflag FLAG_SET_SHINY_MON" a su script, al que puedo encontrar facilmente apoyandome en el archivo "text.inc".
El resultado es:
Guardo el archivo y cierro.Route101_EventScript_14EA76:: @ 814EA76
msgbox Route101_Text_16D349, 3
setflag FLAG_SET_SHINY_MON
end
3) Ahora nos movemos al siguiente cambio que ocurre en \pokeruby\include\constants\flags.h
Ctrl+F "FLAG_LANDMARK_BERRY_MASTERS_HOUSE", y dejando una linea de por medio, añadimos: "#define FLAG_SET_SHINY_MON (SYSTEM_FLAGS + 0x64)".
Guardo el archivo y cierro.
4) Ahora nos vamos al siguiente cambio que ocurre en \pokeruby\include\pokemon.h
Ctrl+F "bool8 IsShiny(struct Pokemon *mon);", creamos una nueva linea y añadimos "bool8 IsShinyOtIdPersonality(u32 otId, u32 personality);".
Guardo el archivo y cierro.
5) Ahora nos vamos al proximo archivo a modificar, que es en \pokeruby\src\pokemon_1.c
-Añadimos #include "constants/flags.h" en una nueva linea despues de #include "constants/abilities.h", que es la tercera.
-Añadimos #include "event_data.h en una nueva linea despues de #include "constants/species.h", que es la septima.
-Ctrl+F "level_up_learnset_pointers" y dejando una linea de por medio, añadimos "static u32 ForceShinyPersonality(u32 personality);".
-Ctrl+F "personality = Random32();", segundo resultado. Nos situamos al final de la linea, haremos una nueva e insertamos:
-Ctrl+F "CreateMon(mon, species, level, fixedIV, 1, personality" (Linea #1484 o #1492 dependiendo de la fecha en la que obtuvieron los archivos de pokeruby), nos situamos al final del corchete y dejando linea de por medio, añadimos:if (FlagGet(FLAG_SET_SHINY_MON))
{
personality = ForceShinyPersonality(personality);
}
6) Tras haber aplicado todos los cambios:static u32 ForceShinyPersonality(u32 personality)
{
int currentBit;
u32 playerOT = gSaveBlock2.playerTrainerId[0]
| (gSaveBlock2.playerTrainerId[1] << 8)
| (gSaveBlock2.playerTrainerId[2] << 16)
| (gSaveBlock2.playerTrainerId[3] << 24);
u16 otVal = (playerOT >> 16) ^ (playerOT & 0xFFFF);
u16 bitSelector = Random();
u16 personalityVal = (personality >> 16) ^ (personality & 0xFFFF);
for (currentBit = 3; currentBit < 16; currentBit++)
{
int shiftedBit = 1 << currentBit;
int otBitSet = (otVal & shiftedBit) != 0;
int personalityBitSet = (personalityVal & shiftedBit) != 0;
if (otBitSet + personalityBitSet == 1)
{
// Bits are different, so let's arbitrarily flip one of them such
// that the XOR of the folded OT and personality values will be 0.
if (bitSelector & shiftedBit)
personality ^= shiftedBit;
else
personality ^= (shiftedBit << 16);
}
}
return personality;
}
C:\cygwin64\Cygwin.bat
cd pokeruby
make
Y ya.
Aqui una muestra del resultado:
Explicación:
1) En scripts.inc estamos haciendo que un Person Event active la flag que hará que el siguiente pokémon que encontremos sea shiny tras interactuar con él.
2) En flags.h estamos añadiendo el macro FLAG_SET_SHINY_MON que se encarga de activarlo todo.
3) En pokemon.h estamos añadiendo una linea de codigo que será referido en pokemon_1.src y forzará al proximo pokémon a tener un valor de personalidad que lo hará shiny.(?)
4) En el archivo pokemon_1.src estamos añadiendo el efecto que esa linea de codigo tendrá, y tambien estamos añadiendo el codigo que ejectará la flag FLAG_SET_SHINY_MON si está activada.(?)
(?) = Intento interpretar lo que estoy leyendo sin saber un joraca sobre C.
2) En flags.h estamos añadiendo el macro FLAG_SET_SHINY_MON que se encarga de activarlo todo.
3) En pokemon.h estamos añadiendo una linea de codigo que será referido en pokemon_1.src y forzará al proximo pokémon a tener un valor de personalidad que lo hará shiny.(?)
4) En el archivo pokemon_1.src estamos añadiendo el efecto que esa linea de codigo tendrá, y tambien estamos añadiendo el codigo que ejectará la flag FLAG_SET_SHINY_MON si está activada.(?)
(?) = Intento interpretar lo que estoy leyendo sin saber un joraca sobre C.
S alguien que sepa sobre C lee este tema, seria genial que ofrezca una mejor explicación que la mia.
Y eso fue todo.
Última edición: