Registrarse
  • ¡Estamos buscando un/a Encargado/a de Eventos! Si crees que puedes ayudarnos con los concursos de Whack a Hack. ¡No esperes más, Invitado! ¡Haz click abajo, infórmate y manda tu postulación!

    Muchas gracias a todos los interesados en mejorar la comunidad

[Otros] [Fire Red] [ENG] Agregando nuevos Pokémon con DPE

Hola! Este tutorial permitirá agregar nuevos pokémon partiendo de la base de DPE. Gracias a @Erkey830 quien creó la base de este tutorial. Los pasos que no son obligatorios es que se pueden editar después con otras herramientas posterior a la inyección (HMA, G3T, etc). Los dejo no obligatorios ya que ellos no afectarán el proceso central de agregar Pokémon (función de la National Pokédex principalmente).

Notar previamente que:
-Puede que los nuevos sprites den 1 exp o mínima exp al capturar.
-Hasta 163 cries nuevos, luego de ello deberás repetir cries o dejar sin cry.
-Se puede agregar hasta 999 entradas en la National Pokédex (pero puedes agregar las que quieras para los que no son registros directos, ej regionales u otras entradas alternativas, probé agregando 250 nuevos sin problemas).

Que necesitas:

-La base de DPE de Skeli (https://github.com/Skeli789/Dynamic-Pokemon-Expansion).
-Un bloc de notas o un excel (para tener ordenados la lista de los nuevos que van a adicionar)
-Notepad ++ (estos archivos se editan más fácil con esa, pero como prefieras)
-CFRU posterior opcional, si quieres verlo con la funcionalidad completa.
-Un cerebro.

EDITAR EN DPE:

1. strings/pokemon_name_table.string (EJ. en mi caso usé S1, S2... para luego editar con G3T el nombre que quiero correctamente).
- #org @name_xxxxxx (nombre localizador) ej: #org @NAME_WYRDEER
- XXXXXX (nombre) WYRDEER

2. strings/pokedex_data.string
(EJ. DEX_ENTRY_S1, para las entry se puede agregar las que gustes, agregué 250)
- #org @DEX_ENTRY_xxxxx (nombre localizador) EJ: #org @DEX_ENTRY_WYRDEER
- (texto pokedex) The black orbs shine with an\nuncanny light when the Pok\emon\nis erecting invisible barriers.

(No obligatorio) 3. src/tutor_compatibility/nº

- Poner el (nombre localizador) del poke compatible EJ: WYRDEER

(No obligatorio) 4. src/tm_compatibility/nº
- Poner el (nombre localizador) del poke compatible EJ: WYRDEER

5. src/species_to_pokedex_table.c (EJ. NATIONAL_DEX_S1, acá se puede agregar hasta 999)
- [SPECIES_(nombre localizador) - 1] = NATIONAL_DEX_(nombre del poke) EJ: [SPECIES_WYRDEER - 1] = NATIONAL_DEX_WYRDEER

6. src/Shiny_Palette_Table.c (EJ Importante agregar despues de Urshifu Y NO después de GFisk)
- debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gBackShinySprite(nº)(nombre del archivo)Pal, SPECIES_(nombre del localizador) + NUM_SPECIES, 0x0},
EJ: [SPECIES_WYRDEER] = {gBackShinySprite1234WyrdeerPal, SPECIES_WYRDEER + NUM_SPECIES, 0x0},

(No obligatorio) 7. src/pokedex_orders.c
- gPokedexOrder_Alphabetical[] = Ordenar por orden alfabetico (SPECIES_NOMBRE) EJ: SPECIES_WYRDEER
- gPokedexOrder_Weight[] = Ordenar por peso
- gPokedexOrder_Height[] = Ordenar por altura
- gPokedexOrder_Type[] = Ordenar por tipo

8. src/Palette_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gFrontSprite(nº)(nombre del archivo)Pal, SPECIES_(nombre del localizador) + NUM_SPECIES, 0x0},
EJ: [SPECIES_WYRDEER] = {gFrontSprite1234WyrdeerPal, SPECIES_WYRDEER, 0x0},

(No obligatorio) 9. src/Learnsets.c
- Editar movesets (movimientos de los pokemon)

10. src/Item_Animation_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(nombre localizador)] = {0x16, 0x1b, 0x30, 0x16, 0x29},
EJ: [SPECIES_WYRDEER] = {0x16, 0x1b, 0x30, 0x16, 0x29},

11. src/Icon_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(NOMBRE LOCALIZADOR)] = gIconSprite(Nº)(NOMBRE DEL ARCHIVO)Tiles,
EJ: [SPECIES_WYRDEER] = gIconSprite1234WyrdeerTiles,

12. src/Icon_Palette_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(nombre localizador)] = 0x0,
EJ: [SPECIES_WYRDEER] = 0x0, el 0x0 puede ser 0x1 o 0x2 dependiendo de la paleta

(MANDATORIO para ver el registro en la dex) 13. src/Habitat_Table.c
- editar habitats de los pokes
EJ: const u16 gForestPage66[] =
{
SPECIES_KLEAVOR,
SPECIES_VOLTORB_H,
SPECIES_ELECTRODE_H,
SPECIES_LILLIGANT_H,
};

14. src/Front_Pic_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gFrontSprite(nº)(nombre del archivo)Tiles, (64 * 64) / 2, SPECIES_(nombre localizador)},
EJ: [SPECIES_WYRDEER] = {gFrontSprite1234WyrdeerTiles, (64 * 64) / 2, SPECIES_WYRDEER},

15. src/Front_Pic_Coords_Table.c

- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.size = 0x0,
.y_offset = 0x0,
},
EJ: [SPECIES_WYRDEER] =
{
.size = 0x0,
.y_offset = 0x0,
},

(No obligatorio) 16. src/Footprint_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:[SPECIES_(nombre localizador)] = 0x8d3058c, // donde 0x8d3058c es sin huella
EJ: [SPECIES_WYRDEER] = 0x8d3058c,

(No obligatorio) 17. src/Evolution Table.c

- Editar evoluciones (numero 16 evoluciones), si no se establecen se pueden editar despues con 16 espacios

18. src/Enemy_Elevation_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(nombre localizador)] = 0x0,
EJ: [SPECIES_WYRDEER] = 0x0,

(No obligatorio) 19. src/Egg_Moves.c
- Localizar a STUNFISK_G y debajo poner:
egg_moves((nombre localizador),
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x),
EJ: egg_moves(GROWLITHE_H,
MOVE_BODYSLAM,
MOVE_CRUNCH,
MOVE_THRASH,
MOVE_HOWL,
MOVE_HEATWAVE,
MOVE_DOUBLEEDGE,
MOVE_FLAREBLITZ,
MOVE_MORNINGSUN,
MOVE_SMACKDOWN,
MOVE_IRONTAIL,
MOVE_CLOSECOMBAT,
MOVE_BURNUP),

20. src/Cry_Table_2.c (en ambos tables, hasta 163 cries nuevos, luego de ello deberán repetir o no colocar cry).
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.type = 0x30,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCry(nombre del archivo),
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

EJ: [SPECIES_WYRDEER] =
{
.type = 0x30,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCryWyrdeer,
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

21. src/Cry_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.type = 0x20,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCry(nombre del archivo),
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

EJ: [SPECIES_WYRDEER] =
{
.type = 0x20,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCryWyrdeer,
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

(No obligatorio) 22. src/Base_Stats.c (considerar que acá se puede editar antes las habilidades ocultas, ya que después será más complicado)
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.baseHP = 0,
.baseAttack = 0,
.baseDefense = 0,
.baseSpAttack = 0,
.baseSpDefense = 0,
.baseSpeed = 0,
.type1 = TYPE_NORMAL,
.type2 = TYPE_PSYCHIC,
.catchRate = 45,
.expYield = 165,
.evYield_HP = 0,
.evYield_Attack = 0,
.evYield_Defense = 0,
.evYield_SpAttack = 0,
.evYield_SpDefense = 0,
.evYield_Speed = 0,
.item1 = ITEM_NONE,
.item2 = ITEM_NONE,
.genderRatio = PERCENT_FEMALE(x),
.eggCycles = 0,
.friendship = 0,
.growthRate = GROWTH_SLOW,
.eggGroup1 = EGG_GROUP_x,
.eggGroup2 = EGG_GROUP_x,
.ability1 = ABILITY_x,
.ability2 = ABILITY_x,
.safariZoneFleeRate = 0,
.hiddenAbility = ABILITY_x,
.noFlip = TRUE,
},
EJ:
[SPECIES_WYRDEER] =
{
.baseHP = 103,
.baseAttack = 105,
.baseDefense = 72,
.baseSpAttack = 105,
.baseSpDefense = 75,
.baseSpeed = 65,
.type1 = TYPE_NORMAL,
.type2 = TYPE_PSYCHIC,
.catchRate = 45,
.expYield = 165,
.evYield_HP = 0,
.evYield_Attack = 1,
.evYield_Defense = 0,
.evYield_SpAttack = 0,
.evYield_SpDefense = 0,
.evYield_Speed = 0,
.item1 = ITEM_NONE,
.item2 = ITEM_NONE,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 50,
.growthRate = GROWTH_SLOW,
.eggGroup1 = EGG_GROUP_FIELD,
.eggGroup2 = EGG_GROUP_FIELD,
.ability1 = ABILITY_INTIMIDATE,
.ability2 = ABILITY_FRISK,
.safariZoneFleeRate = 0,
.hiddenAbility = ABILITY_SAPSIPPER,
.noFlip = TRUE,
},

23. src/Back_Pic_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gBackShinySprite(nº)(nombre archivo)Tiles, (64 * 64) / 2, SPECIES_(nombre localizador)},
EJ: [SPECIES_WYRDEER] = {gBackShinySprite1234WyrdeerTiles, (64 * 64) / 2, SPECIES_WYRDEER},

24. src/Back_Pic_Coords_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.size = 0x0,
.y_offset = 0x0,
},

EJ:
[SPECIES_WYRDEER] =
{
.size = 0x0,
.y_offset = 0x0,
},

25. include/cry_data.h (sólo hasta 163 nuevos)
- Aquí se agregan los cries añadidos; debajo de "extern u8 gCryCalyrexIceRider[];" se añadirian los que se introducen:
extern u8 gCry(nombre del archivo)[];
EJ: extern u8 gCryWyrdeer[];

26. include/pokedex.h (hasta 999 National Dex)

- debajo de #define NATIONAL_DEX_CALYREX 898 añadir el poke: #define NATIONAL_DEX_(nombre) 899 (el anterior + 1)
- editar el #define FINAL_DEX_ENTRY NATIONAL_DEX_CALYREX con el ultimo poké agregado
- Debajo de "extern const u8 DEX_ENTRY_CALYREX_SHADOW_RIDER[];" añadir los pokés: extern const u8 DEX_ENTRY_(nombre del poke)[];
EJ: extern const u8 DEX_ENTRY_WYRDEER[];

27. include/species.h (species la cantidad que se te antoje)
- Localizar #define SPECIES_URSHIFU_RAPID_GIGA 0x4F3 y debajo colocar:
#define SPECIES_(NOMBRE LOCALIZADOR) 0x4F4 -> El 4F4 surge del anterior (4F3) + 1 en hexadecimal
EJ: #define SPECIES_WYRDEER 0x4F4

28. include/sprite_data.h
- agregar todos los sprites; debajo de extern const u8 gFrontSpriteGigaUrshifuRapidTiles[]; poner:
extern const u8 gFrontSprite(nº)(nombre del archivo)Tiles[];
EJ: extern const u8 gFrontSprite1234WyrdeerTiles[];

REPETIR PROCESO PARA: gBackShinySprite__Tiles, gFrontSprite__Pal, gBackShinySprite__Pal, gIconSprite__Tiles

29. scripts/tm_tutor.py
- SPECIES_COUNT = 0x + 1 , cambiar el 0x4F3 por el número del último poke 0x510 + 1 o lo que sea.

30. special_inserts.asm
- Cambiar .equ FINAL_DEX_ENTRY, 898 -> el número (898) reemplazarlo por el número final del último poké de la DEX 905, 917, 999, el numero
que tengas sin contar formas alternativas (megas, dinamax y etc)

31. Si aplica el CFRU, recordar editar los mismos archivos que se editaron en DPE (que son como 3, no copy y paste al archivo por favor).

-----

Y listo, ya con eso podrás tener insertada Hisui, Paldea, o los Pokémon Nuevos que se te antojen. Entonces en resumen tienes que fijarte en:

1. Registro nuevo o regional
2. Sprites bien indexados
3. Conocer la paleta de los minis
4. Hasta 163 cries nuevos, luego repite
5. Crear despues de Urshifu (no despues de GFisk)
6. Editar Habitats y Pokedex Data Table
7. Editar las Habilidades en Base Stats para no cortarlas o usar HMA luego (salvo para las HA).


Saludos.
 

Erkey830

Dios entre mortales
Hola! Este tutorial permitirá agregar nuevos pokémon partiendo de la base de DPE. Gracias a @Erkey830 quien creó la base de este tutorial. Los pasos que no son obligatorios es que se pueden editar después con otras herramientas posterior a la inyección (HMA, G3T, etc). Los dejo no obligatorios ya que ellos no afectarán el proceso central de agregar Pokémon (función de la National Pokédex principalmente).

Notar previamente que:
-Puede que los nuevos sprites den 1 exp o mínima exp al capturar.
-Hasta 163 cries nuevos, luego de ello deberás repetir cries o dejar sin cry.
-Se puede agregar hasta 999 entradas en la National Pokédex (pero puedes agregar las que quieras para los que no son registros directos, ej regionales u otras entradas alternativas, probé agregando 250 nuevos sin problemas).

Que necesitas:

-La base de DPE de Skeli (https://github.com/Skeli789/Dynamic-Pokemon-Expansion).
-Un bloc de notas o un excel (para tener ordenados la lista de los nuevos que van a adicionar)
-Notepad ++ (estos archivos se editan más fácil con esa, pero como prefieras)
-CFRU posterior opcional, si quieres verlo con la funcionalidad completa.
-Un cerebro.

EDITAR EN DPE:

1. strings/pokemon_name_table.string (EJ. en mi caso usé S1, S2... para luego editar con G3T el nombre que quiero correctamente).
- #org @name_xxxxxx (nombre localizador) ej: #org @NAME_WYRDEER
- XXXXXX (nombre) WYRDEER

2. strings/pokedex_data.string (EJ. DEX_ENTRY_S1, para las entry se puede agregar las que gustes, agregué 250)
- #org @DEX_ENTRY_xxxxx (nombre localizador) EJ: #org @DEX_ENTRY_WYRDEER
- (texto pokedex) The black orbs shine with an\nuncanny light when the Pok\emon\nis erecting invisible barriers.

(No obligatorio) 3. src/tutor_compatibility/nº
- Poner el (nombre localizador) del poke compatible EJ: WYRDEER

(No obligatorio) 4. src/tm_compatibility/nº
- Poner el (nombre localizador) del poke compatible EJ: WYRDEER

5. src/species_to_pokedex_table.c (EJ. NATIONAL_DEX_S1, acá se puede agregar hasta 999)
- [SPECIES_(nombre localizador) - 1] = NATIONAL_DEX_(nombre del poke) EJ: [SPECIES_WYRDEER - 1] = NATIONAL_DEX_WYRDEER

6. src/Shiny_Palette_Table.c (EJ Importante agregar despues de Urshifu Y NO después de GFisk)
- debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gBackShinySprite(nº)(nombre del archivo)Pal, SPECIES_(nombre del localizador) + NUM_SPECIES, 0x0},
EJ: [SPECIES_WYRDEER] = {gBackShinySprite1234WyrdeerPal, SPECIES_WYRDEER + NUM_SPECIES, 0x0},

(No obligatorio) 7. src/pokedex_orders.c
- gPokedexOrder_Alphabetical[] = Ordenar por orden alfabetico (SPECIES_NOMBRE) EJ: SPECIES_WYRDEER
- gPokedexOrder_Weight[] = Ordenar por peso
- gPokedexOrder_Height[] = Ordenar por altura
- gPokedexOrder_Type[] = Ordenar por tipo

8. src/Palette_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gFrontSprite(nº)(nombre del archivo)Pal, SPECIES_(nombre del localizador) + NUM_SPECIES, 0x0},
EJ: [SPECIES_WYRDEER] = {gFrontSprite1234WyrdeerPal, SPECIES_WYRDEER, 0x0},

(No obligatorio) 9. src/Learnsets.c
- Editar movesets (movimientos de los pokemon)

10. src/Item_Animation_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(nombre localizador)] = {0x16, 0x1b, 0x30, 0x16, 0x29},
EJ: [SPECIES_WYRDEER] = {0x16, 0x1b, 0x30, 0x16, 0x29},

11. src/Icon_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(NOMBRE LOCALIZADOR)] = gIconSprite(Nº)(NOMBRE DEL ARCHIVO)Tiles,
EJ: [SPECIES_WYRDEER] = gIconSprite1234WyrdeerTiles,

12. src/Icon_Palette_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(nombre localizador)] = 0x0,
EJ: [SPECIES_WYRDEER] = 0x0, el 0x0 puede ser 0x1 o 0x2 dependiendo de la paleta

(MANDATORIO para ver el registro en la dex) 13. src/Habitat_Table.c
- editar habitats de los pokes
EJ: const u16 gForestPage66[] =
{
SPECIES_KLEAVOR,
SPECIES_VOLTORB_H,
SPECIES_ELECTRODE_H,
SPECIES_LILLIGANT_H,
};

14. src/Front_Pic_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gFrontSprite(nº)(nombre del archivo)Tiles, (64 * 64) / 2, SPECIES_(nombre localizador)},
EJ: [SPECIES_WYRDEER] = {gFrontSprite1234WyrdeerTiles, (64 * 64) / 2, SPECIES_WYRDEER},

15. src/Front_Pic_Coords_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.size = 0x0,
.y_offset = 0x0,
},
EJ: [SPECIES_WYRDEER] =
{
.size = 0x0,
.y_offset = 0x0,
},

(No obligatorio) 16. src/Footprint_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:[SPECIES_(nombre localizador)] = 0x8d3058c, // donde 0x8d3058c es sin huella
EJ: [SPECIES_WYRDEER] = 0x8d3058c,

(No obligatorio) 17. src/Evolution Table.c
- Editar evoluciones (numero 16 evoluciones), si no se establecen se pueden editar despues con 16 espacios

18. src/Enemy_Elevation_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(nombre localizador)] = 0x0,
EJ: [SPECIES_WYRDEER] = 0x0,

(No obligatorio) 19. src/Egg_Moves.c
- Localizar a STUNFISK_G y debajo poner:
egg_moves((nombre localizador),
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x),
EJ: egg_moves(GROWLITHE_H,
MOVE_BODYSLAM,
MOVE_CRUNCH,
MOVE_THRASH,
MOVE_HOWL,
MOVE_HEATWAVE,
MOVE_DOUBLEEDGE,
MOVE_FLAREBLITZ,
MOVE_MORNINGSUN,
MOVE_SMACKDOWN,
MOVE_IRONTAIL,
MOVE_CLOSECOMBAT,
MOVE_BURNUP),

20. src/Cry_Table_2.c (en ambos tables, hasta 163 cries nuevos, luego de ello deberán repetir o no colocar cry).
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.type = 0x30,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCry(nombre del archivo),
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

EJ: [SPECIES_WYRDEER] =
{
.type = 0x30,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCryWyrdeer,
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

21. src/Cry_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.type = 0x20,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCry(nombre del archivo),
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

EJ: [SPECIES_WYRDEER] =
{
.type = 0x20,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCryWyrdeer,
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

(No obligatorio) 22. src/Base_Stats.c (considerar que acá se puede editar antes las habilidades ocultas, ya que después será más complicado)
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.baseHP = 0,
.baseAttack = 0,
.baseDefense = 0,
.baseSpAttack = 0,
.baseSpDefense = 0,
.baseSpeed = 0,
.type1 = TYPE_NORMAL,
.type2 = TYPE_PSYCHIC,
.catchRate = 45,
.expYield = 165,
.evYield_HP = 0,
.evYield_Attack = 0,
.evYield_Defense = 0,
.evYield_SpAttack = 0,
.evYield_SpDefense = 0,
.evYield_Speed = 0,
.item1 = ITEM_NONE,
.item2 = ITEM_NONE,
.genderRatio = PERCENT_FEMALE(x),
.eggCycles = 0,
.friendship = 0,
.growthRate = GROWTH_SLOW,
.eggGroup1 = EGG_GROUP_x,
.eggGroup2 = EGG_GROUP_x,
.ability1 = ABILITY_x,
.ability2 = ABILITY_x,
.safariZoneFleeRate = 0,
.hiddenAbility = ABILITY_x,
.noFlip = TRUE,
},
EJ:
[SPECIES_WYRDEER] =
{
.baseHP = 103,
.baseAttack = 105,
.baseDefense = 72,
.baseSpAttack = 105,
.baseSpDefense = 75,
.baseSpeed = 65,
.type1 = TYPE_NORMAL,
.type2 = TYPE_PSYCHIC,
.catchRate = 45,
.expYield = 165,
.evYield_HP = 0,
.evYield_Attack = 1,
.evYield_Defense = 0,
.evYield_SpAttack = 0,
.evYield_SpDefense = 0,
.evYield_Speed = 0,
.item1 = ITEM_NONE,
.item2 = ITEM_NONE,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 50,
.growthRate = GROWTH_SLOW,
.eggGroup1 = EGG_GROUP_FIELD,
.eggGroup2 = EGG_GROUP_FIELD,
.ability1 = ABILITY_INTIMIDATE,
.ability2 = ABILITY_FRISK,
.safariZoneFleeRate = 0,
.hiddenAbility = ABILITY_SAPSIPPER,
.noFlip = TRUE,
},

23. src/Back_Pic_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gBackShinySprite(nº)(nombre archivo)Tiles, (64 * 64) / 2, SPECIES_(nombre localizador)},
EJ: [SPECIES_WYRDEER] = {gBackShinySprite1234WyrdeerTiles, (64 * 64) / 2, SPECIES_WYRDEER},

24. src/Back_Pic_Coords_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.size = 0x0,
.y_offset = 0x0,
},

EJ:
[SPECIES_WYRDEER] =
{
.size = 0x0,
.y_offset = 0x0,
},

25. include/cry_data.h (sólo hasta 163 nuevos)
- Aquí se agregan los cries añadidos; debajo de "extern u8 gCryCalyrexIceRider[];" se añadirian los que se introducen:
extern u8 gCry(nombre del archivo)[];
EJ: extern u8 gCryWyrdeer[];

26. include/pokedex.h (hasta 999 National Dex)
- debajo de #define NATIONAL_DEX_CALYREX 898 añadir el poke: #define NATIONAL_DEX_(nombre) 899 (el anterior + 1)
- editar el #define FINAL_DEX_ENTRY NATIONAL_DEX_CALYREX con el ultimo poké agregado
- Debajo de "extern const u8 DEX_ENTRY_CALYREX_SHADOW_RIDER[];" añadir los pokés: extern const u8 DEX_ENTRY_(nombre del poke)[];
EJ: extern const u8 DEX_ENTRY_WYRDEER[];

27. include/species.h (species la cantidad que se te antoje)
- Localizar #define SPECIES_URSHIFU_RAPID_GIGA 0x4F3 y debajo colocar:
#define SPECIES_(NOMBRE LOCALIZADOR) 0x4F4 -> El 4F4 surge del anterior (4F3) + 1 en hexadecimal
EJ: #define SPECIES_WYRDEER 0x4F4

28. include/sprite_data.h
- agregar todos los sprites; debajo de extern const u8 gFrontSpriteGigaUrshifuRapidTiles[]; poner:
extern const u8 gFrontSprite(nº)(nombre del archivo)Tiles[];
EJ: extern const u8 gFrontSprite1234WyrdeerTiles[];

REPETIR PROCESO PARA: gBackShinySprite__Tiles, gFrontSprite__Pal, gBackShinySprite__Pal, gIconSprite__Tiles

29. scripts/tm_tutor.py
- SPECIES_COUNT = 0x + 1 , cambiar el 0x4F3 por el número del último poke 0x510 + 1 o lo que sea.

30. special_inserts.asm
- Cambiar .equ FINAL_DEX_ENTRY, 898 -> el número (898) reemplazarlo por el número final del último poké de la DEX 905, 917, 999, el numero
que tengas sin contar formas alternativas (megas, dinamax y etc)

31. Si aplica el CFRU, recordar editar los mismos archivos que se editaron en DPE (que son como 3, no copy y paste al archivo por favor).

-----

Y listo, ya con eso podrás tener insertada Hisui, Paldea, o los Pokémon Nuevos que se te antojen. Entonces en resumen tienes que fijarte en:

1. Registro nuevo o regional
2. Sprites bien indexados
3. Conocer la paleta de los minis
4. Hasta 163 cries nuevos, luego repite
5. Crear despues de Urshifu (no despues de GFisk)
6. Editar Habitats y Pokedex Data Table
7. Editar las Habilidades en Base Stats para no cortarlas o usar HMA luego (salvo para las HA).


Saludos.
Epicardo y super facil
 

Luke111

Star+King de WaH
Hola! Este tutorial permitirá agregar nuevos pokémon partiendo de la base de DPE. Gracias a @Erkey830 quien creó la base de este tutorial. Los pasos que no son obligatorios es que se pueden editar después con otras herramientas posterior a la inyección (HMA, G3T, etc). Los dejo no obligatorios ya que ellos no afectarán el proceso central de agregar Pokémon (función de la National Pokédex principalmente).

Notar previamente que:
-Puede que los nuevos sprites den 1 exp o mínima exp al capturar.
-Hasta 163 cries nuevos, luego de ello deberás repetir cries o dejar sin cry.
-Se puede agregar hasta 999 entradas en la National Pokédex (pero puedes agregar las que quieras para los que no son registros directos, ej regionales u otras entradas alternativas, probé agregando 250 nuevos sin problemas).

Que necesitas:

-La base de DPE de Skeli (https://github.com/Skeli789/Dynamic-Pokemon-Expansion).
-Un bloc de notas o un excel (para tener ordenados la lista de los nuevos que van a adicionar)
-Notepad ++ (estos archivos se editan más fácil con esa, pero como prefieras)
-CFRU posterior opcional, si quieres verlo con la funcionalidad completa.
-Un cerebro.

EDITAR EN DPE:

1. strings/pokemon_name_table.string (EJ. en mi caso usé S1, S2... para luego editar con G3T el nombre que quiero correctamente).
- #org @name_xxxxxx (nombre localizador) ej: #org @NAME_WYRDEER
- XXXXXX (nombre) WYRDEER

2. strings/pokedex_data.string (EJ. DEX_ENTRY_S1, para las entry se puede agregar las que gustes, agregué 250)
- #org @DEX_ENTRY_xxxxx (nombre localizador) EJ: #org @DEX_ENTRY_WYRDEER
- (texto pokedex) The black orbs shine with an\nuncanny light when the Pok\emon\nis erecting invisible barriers.

(No obligatorio) 3. src/tutor_compatibility/nº
- Poner el (nombre localizador) del poke compatible EJ: WYRDEER

(No obligatorio) 4. src/tm_compatibility/nº
- Poner el (nombre localizador) del poke compatible EJ: WYRDEER

5. src/species_to_pokedex_table.c (EJ. NATIONAL_DEX_S1, acá se puede agregar hasta 999)
- [SPECIES_(nombre localizador) - 1] = NATIONAL_DEX_(nombre del poke) EJ: [SPECIES_WYRDEER - 1] = NATIONAL_DEX_WYRDEER

6. src/Shiny_Palette_Table.c (EJ Importante agregar despues de Urshifu Y NO después de GFisk)
- debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gBackShinySprite(nº)(nombre del archivo)Pal, SPECIES_(nombre del localizador) + NUM_SPECIES, 0x0},
EJ: [SPECIES_WYRDEER] = {gBackShinySprite1234WyrdeerPal, SPECIES_WYRDEER + NUM_SPECIES, 0x0},

(No obligatorio) 7. src/pokedex_orders.c
- gPokedexOrder_Alphabetical[] = Ordenar por orden alfabetico (SPECIES_NOMBRE) EJ: SPECIES_WYRDEER
- gPokedexOrder_Weight[] = Ordenar por peso
- gPokedexOrder_Height[] = Ordenar por altura
- gPokedexOrder_Type[] = Ordenar por tipo

8. src/Palette_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gFrontSprite(nº)(nombre del archivo)Pal, SPECIES_(nombre del localizador) + NUM_SPECIES, 0x0},
EJ: [SPECIES_WYRDEER] = {gFrontSprite1234WyrdeerPal, SPECIES_WYRDEER, 0x0},

(No obligatorio) 9. src/Learnsets.c
- Editar movesets (movimientos de los pokemon)

10. src/Item_Animation_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(nombre localizador)] = {0x16, 0x1b, 0x30, 0x16, 0x29},
EJ: [SPECIES_WYRDEER] = {0x16, 0x1b, 0x30, 0x16, 0x29},

11. src/Icon_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(NOMBRE LOCALIZADOR)] = gIconSprite(Nº)(NOMBRE DEL ARCHIVO)Tiles,
EJ: [SPECIES_WYRDEER] = gIconSprite1234WyrdeerTiles,

12. src/Icon_Palette_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(nombre localizador)] = 0x0,
EJ: [SPECIES_WYRDEER] = 0x0, el 0x0 puede ser 0x1 o 0x2 dependiendo de la paleta

(MANDATORIO para ver el registro en la dex) 13. src/Habitat_Table.c
- editar habitats de los pokes
EJ: const u16 gForestPage66[] =
{
SPECIES_KLEAVOR,
SPECIES_VOLTORB_H,
SPECIES_ELECTRODE_H,
SPECIES_LILLIGANT_H,
};

14. src/Front_Pic_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gFrontSprite(nº)(nombre del archivo)Tiles, (64 * 64) / 2, SPECIES_(nombre localizador)},
EJ: [SPECIES_WYRDEER] = {gFrontSprite1234WyrdeerTiles, (64 * 64) / 2, SPECIES_WYRDEER},

15. src/Front_Pic_Coords_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.size = 0x0,
.y_offset = 0x0,
},
EJ: [SPECIES_WYRDEER] =
{
.size = 0x0,
.y_offset = 0x0,
},

(No obligatorio) 16. src/Footprint_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:[SPECIES_(nombre localizador)] = 0x8d3058c, // donde 0x8d3058c es sin huella
EJ: [SPECIES_WYRDEER] = 0x8d3058c,

(No obligatorio) 17. src/Evolution Table.c
- Editar evoluciones (numero 16 evoluciones), si no se establecen se pueden editar despues con 16 espacios

18. src/Enemy_Elevation_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(nombre localizador)] = 0x0,
EJ: [SPECIES_WYRDEER] = 0x0,

(No obligatorio) 19. src/Egg_Moves.c
- Localizar a STUNFISK_G y debajo poner:
egg_moves((nombre localizador),
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x),
EJ: egg_moves(GROWLITHE_H,
MOVE_BODYSLAM,
MOVE_CRUNCH,
MOVE_THRASH,
MOVE_HOWL,
MOVE_HEATWAVE,
MOVE_DOUBLEEDGE,
MOVE_FLAREBLITZ,
MOVE_MORNINGSUN,
MOVE_SMACKDOWN,
MOVE_IRONTAIL,
MOVE_CLOSECOMBAT,
MOVE_BURNUP),

20. src/Cry_Table_2.c (en ambos tables, hasta 163 cries nuevos, luego de ello deberán repetir o no colocar cry).
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.type = 0x30,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCry(nombre del archivo),
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

EJ: [SPECIES_WYRDEER] =
{
.type = 0x30,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCryWyrdeer,
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

21. src/Cry_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.type = 0x20,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCry(nombre del archivo),
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

EJ: [SPECIES_WYRDEER] =
{
.type = 0x20,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCryWyrdeer,
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

(No obligatorio) 22. src/Base_Stats.c (considerar que acá se puede editar antes las habilidades ocultas, ya que después será más complicado)
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.baseHP = 0,
.baseAttack = 0,
.baseDefense = 0,
.baseSpAttack = 0,
.baseSpDefense = 0,
.baseSpeed = 0,
.type1 = TYPE_NORMAL,
.type2 = TYPE_PSYCHIC,
.catchRate = 45,
.expYield = 165,
.evYield_HP = 0,
.evYield_Attack = 0,
.evYield_Defense = 0,
.evYield_SpAttack = 0,
.evYield_SpDefense = 0,
.evYield_Speed = 0,
.item1 = ITEM_NONE,
.item2 = ITEM_NONE,
.genderRatio = PERCENT_FEMALE(x),
.eggCycles = 0,
.friendship = 0,
.growthRate = GROWTH_SLOW,
.eggGroup1 = EGG_GROUP_x,
.eggGroup2 = EGG_GROUP_x,
.ability1 = ABILITY_x,
.ability2 = ABILITY_x,
.safariZoneFleeRate = 0,
.hiddenAbility = ABILITY_x,
.noFlip = TRUE,
},
EJ:
[SPECIES_WYRDEER] =
{
.baseHP = 103,
.baseAttack = 105,
.baseDefense = 72,
.baseSpAttack = 105,
.baseSpDefense = 75,
.baseSpeed = 65,
.type1 = TYPE_NORMAL,
.type2 = TYPE_PSYCHIC,
.catchRate = 45,
.expYield = 165,
.evYield_HP = 0,
.evYield_Attack = 1,
.evYield_Defense = 0,
.evYield_SpAttack = 0,
.evYield_SpDefense = 0,
.evYield_Speed = 0,
.item1 = ITEM_NONE,
.item2 = ITEM_NONE,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 50,
.growthRate = GROWTH_SLOW,
.eggGroup1 = EGG_GROUP_FIELD,
.eggGroup2 = EGG_GROUP_FIELD,
.ability1 = ABILITY_INTIMIDATE,
.ability2 = ABILITY_FRISK,
.safariZoneFleeRate = 0,
.hiddenAbility = ABILITY_SAPSIPPER,
.noFlip = TRUE,
},

23. src/Back_Pic_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gBackShinySprite(nº)(nombre archivo)Tiles, (64 * 64) / 2, SPECIES_(nombre localizador)},
EJ: [SPECIES_WYRDEER] = {gBackShinySprite1234WyrdeerTiles, (64 * 64) / 2, SPECIES_WYRDEER},

24. src/Back_Pic_Coords_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.size = 0x0,
.y_offset = 0x0,
},

EJ:
[SPECIES_WYRDEER] =
{
.size = 0x0,
.y_offset = 0x0,
},

25. include/cry_data.h (sólo hasta 163 nuevos)
- Aquí se agregan los cries añadidos; debajo de "extern u8 gCryCalyrexIceRider[];" se añadirian los que se introducen:
extern u8 gCry(nombre del archivo)[];
EJ: extern u8 gCryWyrdeer[];

26. include/pokedex.h (hasta 999 National Dex)
- debajo de #define NATIONAL_DEX_CALYREX 898 añadir el poke: #define NATIONAL_DEX_(nombre) 899 (el anterior + 1)
- editar el #define FINAL_DEX_ENTRY NATIONAL_DEX_CALYREX con el ultimo poké agregado
- Debajo de "extern const u8 DEX_ENTRY_CALYREX_SHADOW_RIDER[];" añadir los pokés: extern const u8 DEX_ENTRY_(nombre del poke)[];
EJ: extern const u8 DEX_ENTRY_WYRDEER[];

27. include/species.h (species la cantidad que se te antoje)
- Localizar #define SPECIES_URSHIFU_RAPID_GIGA 0x4F3 y debajo colocar:
#define SPECIES_(NOMBRE LOCALIZADOR) 0x4F4 -> El 4F4 surge del anterior (4F3) + 1 en hexadecimal
EJ: #define SPECIES_WYRDEER 0x4F4

28. include/sprite_data.h
- agregar todos los sprites; debajo de extern const u8 gFrontSpriteGigaUrshifuRapidTiles[]; poner:
extern const u8 gFrontSprite(nº)(nombre del archivo)Tiles[];
EJ: extern const u8 gFrontSprite1234WyrdeerTiles[];

REPETIR PROCESO PARA: gBackShinySprite__Tiles, gFrontSprite__Pal, gBackShinySprite__Pal, gIconSprite__Tiles

29. scripts/tm_tutor.py
- SPECIES_COUNT = 0x + 1 , cambiar el 0x4F3 por el número del último poke 0x510 + 1 o lo que sea.

30. special_inserts.asm
- Cambiar .equ FINAL_DEX_ENTRY, 898 -> el número (898) reemplazarlo por el número final del último poké de la DEX 905, 917, 999, el numero
que tengas sin contar formas alternativas (megas, dinamax y etc)

31. Si aplica el CFRU, recordar editar los mismos archivos que se editaron en DPE (que son como 3, no copy y paste al archivo por favor).

-----

Y listo, ya con eso podrás tener insertada Hisui, Paldea, o los Pokémon Nuevos que se te antojen. Entonces en resumen tienes que fijarte en:

1. Registro nuevo o regional
2. Sprites bien indexados
3. Conocer la paleta de los minis
4. Hasta 163 cries nuevos, luego repite
5. Crear despues de Urshifu (no despues de GFisk)
6. Editar Habitats y Pokedex Data Table
7. Editar las Habilidades en Base Stats para no cortarlas o usar HMA luego (salvo para las HA).


Saludos.
Well done both boys! Salute xd
 

AxelLoquendo

AxelLoqd
Hola! Este tutorial permitirá agregar nuevos pokémon partiendo de la base de DPE. Gracias a @Erkey830 quien creó la base de este tutorial. Los pasos que no son obligatorios es que se pueden editar después con otras herramientas posterior a la inyección (HMA, G3T, etc). Los dejo no obligatorios ya que ellos no afectarán el proceso central de agregar Pokémon (función de la National Pokédex principalmente).

Notar previamente que:
-Puede que los nuevos sprites den 1 exp o mínima exp al capturar.
-Hasta 163 cries nuevos, luego de ello deberás repetir cries o dejar sin cry.
-Se puede agregar hasta 999 entradas en la National Pokédex (pero puedes agregar las que quieras para los que no son registros directos, ej regionales u otras entradas alternativas, probé agregando 250 nuevos sin problemas).

Que necesitas:

-La base de DPE de Skeli (https://github.com/Skeli789/Dynamic-Pokemon-Expansion).
-Un bloc de notas o un excel (para tener ordenados la lista de los nuevos que van a adicionar)
-Notepad ++ (estos archivos se editan más fácil con esa, pero como prefieras)
-CFRU posterior opcional, si quieres verlo con la funcionalidad completa.
-Un cerebro.

EDITAR EN DPE:

1. strings/pokemon_name_table.string (EJ. en mi caso usé S1, S2... para luego editar con G3T el nombre que quiero correctamente).
- #org @name_xxxxxx (nombre localizador) ej: #org @NAME_WYRDEER
- XXXXXX (nombre) WYRDEER

2. strings/pokedex_data.string (EJ. DEX_ENTRY_S1, para las entry se puede agregar las que gustes, agregué 250)
- #org @DEX_ENTRY_xxxxx (nombre localizador) EJ: #org @DEX_ENTRY_WYRDEER
- (texto pokedex) The black orbs shine with an\nuncanny light when the Pok\emon\nis erecting invisible barriers.

(No obligatorio) 3. src/tutor_compatibility/nº
- Poner el (nombre localizador) del poke compatible EJ: WYRDEER

(No obligatorio) 4. src/tm_compatibility/nº
- Poner el (nombre localizador) del poke compatible EJ: WYRDEER

5. src/species_to_pokedex_table.c (EJ. NATIONAL_DEX_S1, acá se puede agregar hasta 999)
- [SPECIES_(nombre localizador) - 1] = NATIONAL_DEX_(nombre del poke) EJ: [SPECIES_WYRDEER - 1] = NATIONAL_DEX_WYRDEER

6. src/Shiny_Palette_Table.c (EJ Importante agregar despues de Urshifu Y NO después de GFisk)
- debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gBackShinySprite(nº)(nombre del archivo)Pal, SPECIES_(nombre del localizador) + NUM_SPECIES, 0x0},
EJ: [SPECIES_WYRDEER] = {gBackShinySprite1234WyrdeerPal, SPECIES_WYRDEER + NUM_SPECIES, 0x0},

(No obligatorio) 7. src/pokedex_orders.c
- gPokedexOrder_Alphabetical[] = Ordenar por orden alfabetico (SPECIES_NOMBRE) EJ: SPECIES_WYRDEER
- gPokedexOrder_Weight[] = Ordenar por peso
- gPokedexOrder_Height[] = Ordenar por altura
- gPokedexOrder_Type[] = Ordenar por tipo

8. src/Palette_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gFrontSprite(nº)(nombre del archivo)Pal, SPECIES_(nombre del localizador) + NUM_SPECIES, 0x0},
EJ: [SPECIES_WYRDEER] = {gFrontSprite1234WyrdeerPal, SPECIES_WYRDEER, 0x0},

(No obligatorio) 9. src/Learnsets.c
- Editar movesets (movimientos de los pokemon)

10. src/Item_Animation_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(nombre localizador)] = {0x16, 0x1b, 0x30, 0x16, 0x29},
EJ: [SPECIES_WYRDEER] = {0x16, 0x1b, 0x30, 0x16, 0x29},

11. src/Icon_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(NOMBRE LOCALIZADOR)] = gIconSprite(Nº)(NOMBRE DEL ARCHIVO)Tiles,
EJ: [SPECIES_WYRDEER] = gIconSprite1234WyrdeerTiles,

12. src/Icon_Palette_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(nombre localizador)] = 0x0,
EJ: [SPECIES_WYRDEER] = 0x0, el 0x0 puede ser 0x1 o 0x2 dependiendo de la paleta

(MANDATORIO para ver el registro en la dex) 13. src/Habitat_Table.c
- editar habitats de los pokes
EJ: const u16 gForestPage66[] =
{
SPECIES_KLEAVOR,
SPECIES_VOLTORB_H,
SPECIES_ELECTRODE_H,
SPECIES_LILLIGANT_H,
};

14. src/Front_Pic_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gFrontSprite(nº)(nombre del archivo)Tiles, (64 * 64) / 2, SPECIES_(nombre localizador)},
EJ: [SPECIES_WYRDEER] = {gFrontSprite1234WyrdeerTiles, (64 * 64) / 2, SPECIES_WYRDEER},

15. src/Front_Pic_Coords_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.size = 0x0,
.y_offset = 0x0,
},
EJ: [SPECIES_WYRDEER] =
{
.size = 0x0,
.y_offset = 0x0,
},

(No obligatorio) 16. src/Footprint_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:[SPECIES_(nombre localizador)] = 0x8d3058c, // donde 0x8d3058c es sin huella
EJ: [SPECIES_WYRDEER] = 0x8d3058c,

(No obligatorio) 17. src/Evolution Table.c
- Editar evoluciones (numero 16 evoluciones), si no se establecen se pueden editar despues con 16 espacios

18. src/Enemy_Elevation_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner: [SPECIES_(nombre localizador)] = 0x0,
EJ: [SPECIES_WYRDEER] = 0x0,

(No obligatorio) 19. src/Egg_Moves.c
- Localizar a STUNFISK_G y debajo poner:
egg_moves((nombre localizador),
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x,
MOVE_x),
EJ: egg_moves(GROWLITHE_H,
MOVE_BODYSLAM,
MOVE_CRUNCH,
MOVE_THRASH,
MOVE_HOWL,
MOVE_HEATWAVE,
MOVE_DOUBLEEDGE,
MOVE_FLAREBLITZ,
MOVE_MORNINGSUN,
MOVE_SMACKDOWN,
MOVE_IRONTAIL,
MOVE_CLOSECOMBAT,
MOVE_BURNUP),

20. src/Cry_Table_2.c (en ambos tables, hasta 163 cries nuevos, luego de ello deberán repetir o no colocar cry).
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.type = 0x30,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCry(nombre del archivo),
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

EJ: [SPECIES_WYRDEER] =
{
.type = 0x30,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCryWyrdeer,
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

21. src/Cry_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.type = 0x20,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCry(nombre del archivo),
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

EJ: [SPECIES_WYRDEER] =
{
.type = 0x20,
.key = 0x3c,
.length = 0x0,
.pan_sweep = 0x0,
.wav = gCryWyrdeer,
.attack = 0xff,
.decay = 0x0,
.sustain = 0xff,
.release = 0x0,
},

(No obligatorio) 22. src/Base_Stats.c (considerar que acá se puede editar antes las habilidades ocultas, ya que después será más complicado)
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.baseHP = 0,
.baseAttack = 0,
.baseDefense = 0,
.baseSpAttack = 0,
.baseSpDefense = 0,
.baseSpeed = 0,
.type1 = TYPE_NORMAL,
.type2 = TYPE_PSYCHIC,
.catchRate = 45,
.expYield = 165,
.evYield_HP = 0,
.evYield_Attack = 0,
.evYield_Defense = 0,
.evYield_SpAttack = 0,
.evYield_SpDefense = 0,
.evYield_Speed = 0,
.item1 = ITEM_NONE,
.item2 = ITEM_NONE,
.genderRatio = PERCENT_FEMALE(x),
.eggCycles = 0,
.friendship = 0,
.growthRate = GROWTH_SLOW,
.eggGroup1 = EGG_GROUP_x,
.eggGroup2 = EGG_GROUP_x,
.ability1 = ABILITY_x,
.ability2 = ABILITY_x,
.safariZoneFleeRate = 0,
.hiddenAbility = ABILITY_x,
.noFlip = TRUE,
},
EJ:
[SPECIES_WYRDEER] =
{
.baseHP = 103,
.baseAttack = 105,
.baseDefense = 72,
.baseSpAttack = 105,
.baseSpDefense = 75,
.baseSpeed = 65,
.type1 = TYPE_NORMAL,
.type2 = TYPE_PSYCHIC,
.catchRate = 45,
.expYield = 165,
.evYield_HP = 0,
.evYield_Attack = 1,
.evYield_Defense = 0,
.evYield_SpAttack = 0,
.evYield_SpDefense = 0,
.evYield_Speed = 0,
.item1 = ITEM_NONE,
.item2 = ITEM_NONE,
.genderRatio = PERCENT_FEMALE(50),
.eggCycles = 20,
.friendship = 50,
.growthRate = GROWTH_SLOW,
.eggGroup1 = EGG_GROUP_FIELD,
.eggGroup2 = EGG_GROUP_FIELD,
.ability1 = ABILITY_INTIMIDATE,
.ability2 = ABILITY_FRISK,
.safariZoneFleeRate = 0,
.hiddenAbility = ABILITY_SAPSIPPER,
.noFlip = TRUE,
},

23. src/Back_Pic_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] = {gBackShinySprite(nº)(nombre archivo)Tiles, (64 * 64) / 2, SPECIES_(nombre localizador)},
EJ: [SPECIES_WYRDEER] = {gBackShinySprite1234WyrdeerTiles, (64 * 64) / 2, SPECIES_WYRDEER},

24. src/Back_Pic_Coords_Table.c
- Debajo de [SPECIES_URSHIFU_RAPID_GIGA] poner:
[SPECIES_(nombre localizador)] =
{
.size = 0x0,
.y_offset = 0x0,
},

EJ:
[SPECIES_WYRDEER] =
{
.size = 0x0,
.y_offset = 0x0,
},

25. include/cry_data.h (sólo hasta 163 nuevos)
- Aquí se agregan los cries añadidos; debajo de "extern u8 gCryCalyrexIceRider[];" se añadirian los que se introducen:
extern u8 gCry(nombre del archivo)[];
EJ: extern u8 gCryWyrdeer[];

26. include/pokedex.h (hasta 999 National Dex)
- debajo de #define NATIONAL_DEX_CALYREX 898 añadir el poke: #define NATIONAL_DEX_(nombre) 899 (el anterior + 1)
- editar el #define FINAL_DEX_ENTRY NATIONAL_DEX_CALYREX con el ultimo poké agregado
- Debajo de "extern const u8 DEX_ENTRY_CALYREX_SHADOW_RIDER[];" añadir los pokés: extern const u8 DEX_ENTRY_(nombre del poke)[];
EJ: extern const u8 DEX_ENTRY_WYRDEER[];

27. include/species.h (species la cantidad que se te antoje)
- Localizar #define SPECIES_URSHIFU_RAPID_GIGA 0x4F3 y debajo colocar:
#define SPECIES_(NOMBRE LOCALIZADOR) 0x4F4 -> El 4F4 surge del anterior (4F3) + 1 en hexadecimal
EJ: #define SPECIES_WYRDEER 0x4F4

28. include/sprite_data.h
- agregar todos los sprites; debajo de extern const u8 gFrontSpriteGigaUrshifuRapidTiles[]; poner:
extern const u8 gFrontSprite(nº)(nombre del archivo)Tiles[];
EJ: extern const u8 gFrontSprite1234WyrdeerTiles[];

REPETIR PROCESO PARA: gBackShinySprite__Tiles, gFrontSprite__Pal, gBackShinySprite__Pal, gIconSprite__Tiles

29. scripts/tm_tutor.py
- SPECIES_COUNT = 0x + 1 , cambiar el 0x4F3 por el número del último poke 0x510 + 1 o lo que sea.

30. special_inserts.asm
- Cambiar .equ FINAL_DEX_ENTRY, 898 -> el número (898) reemplazarlo por el número final del último poké de la DEX 905, 917, 999, el numero
que tengas sin contar formas alternativas (megas, dinamax y etc)

31. Si aplica el CFRU, recordar editar los mismos archivos que se editaron en DPE (que son como 3, no copy y paste al archivo por favor).

-----

Y listo, ya con eso podrás tener insertada Hisui, Paldea, o los Pokémon Nuevos que se te antojen. Entonces en resumen tienes que fijarte en:

1. Registro nuevo o regional
2. Sprites bien indexados
3. Conocer la paleta de los minis
4. Hasta 163 cries nuevos, luego repite
5. Crear despues de Urshifu (no despues de GFisk)
6. Editar Habitats y Pokedex Data Table
7. Editar las Habilidades en Base Stats para no cortarlas o usar HMA luego (salvo para las HA).


Saludos.
Tengo una duda, que pasa si lo expando a mas de 999 pokemons?
ya que con la 9na gen serian como 1008 pokemons ._.
 
Arriba