Registrarse

[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

Fuck off!
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
 

Shiny_Miner

'El Creador del Mundo'
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

Todo terreno 👻
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 ._.
 

milenco

Usuario mítico
alguien sabe como indexear los sprites para dpe, yo los tengo indexeados en formato bmp hechos en charactermakerpro y pasados por pge en formato 64x256. No se como convertir esos sprites para este formato... aiuda! (leer con voz de gato xD)
 

Erkey830

Fuck off!
alguien sabe como indexear los sprites para dpe, yo los tengo indexeados en formato bmp hechos en charactermakerpro y pasados por pge en formato 64x256. No se como convertir esos sprites para este formato... aiuda! (leer con voz de gato xD)
insertalos en HexManiac de ahi podras extraerlos en 64x64
 

milenco

Usuario mítico
Hola! agregue a todos los pokes de Hisui, pero al momento de llegar a la compilación me salta un error:
"Error: The insertion process could not be completed. The linker symbol file was not found."

Ya revise los archivos y todo esta en orden, no se que hacer, me crea una rom corrupta "test.gba" de 16 mb y cuando lo abro me da error. ¡sombadiseibme!

Como no lo puedo compilar, aun no llego a la parte del cfru. Para ir avanzando, ¿alguien sabe que archivos debo modificar en CFRU?
 

Erkey830

Fuck off!
Hola! agregue a todos los pokes de Hisui, pero al momento de llegar a la compilación me salta un error:
"Error: The insertion process could not be completed. The linker symbol file was not found."

Ya revise los archivos y todo esta en orden, no se que hacer, me crea una rom corrupta "test.gba" de 16 mb y cuando lo abro me da error. ¡sombadiseibme!

Como no lo puedo compilar, aun no llego a la parte del cfru. Para ir avanzando, ¿alguien sabe que archivos debo modificar en CFRU?
todos los referentes a pokemon (se llaman igual que los de dpe)
 

milenco

Usuario mítico
No hay caso, he repetido varias veces el proceso (agregue solo 1 pokemon, y también lo he intentado con mas 150 pero sale el mismo mensaje) lo he hecho todo al pie de la letra pero me sigue apareciendo "Error: The insertion process could not be completed. The linker symbol file was not found." y me compila una rom de 16 mb rota, no funciona, ¿habrá que cambiar otra opción en el apartado de scripts? ¿a alguien mas le pasa? estoy usando la rom squirrel, ¿sera ese el fallo?
 

AxelLoquendo

Todo terreno 👻
No hay caso, he repetido varias veces el proceso (agregue solo 1 pokemon, y también lo he intentado con mas 150 pero sale el mismo mensaje) lo he hecho todo al pie de la letra pero me sigue apareciendo "Error: The insertion process could not be completed. The linker symbol file was not found." y me compila una rom de 16 mb rota, no funciona, ¿habrá que cambiar otra opción en el apartado de scripts? ¿a alguien mas le pasa? estoy usando la rom squirrel, ¿sera ese el fallo?
Que dpe usas?
 

Versekr Dark

Usuario mítico
Hola! como están? por favor alguien me puede ayudar a encontrar el error, agregue los base stats y desde el espacio S25 me tira un error que incluye species.h, he revisado todo unas 10.000 veces pero no logro poder corregir eso ademas de que no me compila. De verdad agradecería la ayuda de algun buen samaritano que pueda revisar el archivo dpe que dejoa djunto. (AGREGRE TODO HISUI, PALDEA Y 300 ESPACIOS EXTRAS)

Gracias!

Por que no haces un intento con un nuevo repositorio y agrega un solo pokémon, y tal vez no hayas configurado algo correctamente
 
Arriba