• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

Pokemon Expansion

794
Posts
10
Years
About time, hmm?

Introduction
Decomps have been present for quite some time already, but one of the most possibly wanted features in a rom hack, that is pokemon expansion, was still nowhere to be seen(apart from Lunos' 493 base which sadly was done for an old version of pokeruby). I wish to change that, and present to you a game with over 800 pokemon in total. An expansion project featuring pokemon from all 7 generations, mega evolutions and forms. My aim is to put only whatever is necessary without any unrelated features, all put in one repository ready to use stand-alone or in conjunction with my battle engine.

General information
I'd like to go in detail over what exactly is in. There are several things that a project like this must cover, this includes pokemon sprites, base stats data, icons, cries, etc.
Spoiler:

Screenshots
Spoiler:

Gifs
Spoiler:

Download:
The project is open-source and can be found here. All bugs and glitches are in the 'Issues' section. If you find one that's not there, please let me know so it can be quickly fixed!
https://github.com/rh-hideout/pokeemerald-expansion/tree/pokemon_expansion
Credits
Spoiler:
 

Attachments

  • learnsets(1).txt
    578.8 KB · Views: 290
Last edited:
4
Posts
6
Years
  • Age 23
  • Seen Jul 29, 2020
How can i use the battle engine update with this expansion?
 
Last edited:
2
Posts
13
Years
The project sounds interesting, is there any "TODO" list for people that want to participate in the project/help implementing stuff?
 
Last edited:
794
Posts
10
Years
The project sounds interesting, is there any "TODO" list for people that want to participate in the project/help implementing stuff?

Yeah, there is some stuff that hasn't been done.

- Coordinates for form pokemon species
- Mon animations for gen5 mons, megas, forms and some of gen4 mons(one person been doing them, so its just gen5 I guess)
- Some sprites such as Turtwig have the second frame with a bit messed up palette, needs to be fixed

But it's mostly animations. Btw if you're thinking this must be super hard or anything like that, it's really not. It's basically finding the most appropriate animation function (reference) and assigning them for species here. Note the distinction between hex and dec tho.
The second part is duration of the changing frames, done here .
 
Last edited:
2
Posts
4
Years
  • Age 28
  • Seen Jul 22, 2020
Hi, I'm new to ROM hacking, and started out with the decomp.
How does the evolution mechanic for Leafeon, Glaceon and Magnezone work in Gen3 under your implementation? Because to my knowledge, their respective evolution methods do not exist in Gen3, and how can we enable those in a Gen3 game?
 
794
Posts
10
Years
Hi, I'm new to ROM hacking, and started out with the decomp.
How does the evolution mechanic for Leafeon, Glaceon and Magnezone work in Gen3 under your implementation? Because to my knowledge, their respective evolution methods do not exist in Gen3, and how can we enable those in a Gen3 game?

Hi, the method for them is EVO_MAP, the param is the desired map's region section id. Leveling up the mon on the specified map will trigger the evo.
 
Last edited:
2
Posts
4
Years
  • Age 28
  • Seen Jul 22, 2020
Sorry to ask a dumb question, but how do you specify a map to enable evolution on those Pokemon? Is the param being mentioned the "62" next to EVO_MAP in evolution.h, or am I still missing something?
 
794
Posts
10
Years
Sorry to ask a dumb question, but how do you specify a map to enable evolution on those Pokemon? Is the param being mentioned the "62" next to EVO_MAP in evolution.h, or am I still missing something?

Yes, exactly this, just change 62 to the desired map's section id.
 
1,591
Posts
10
Years
  • Age 30
  • Seen Mar 20, 2024
Hey, has anyone had any trouble with the in-game trades freezing after using this? The game locks up on the "take good care of _" screen. Not sure if I've broken something (seems likely) or if it's an issue with the expansion, so I thought it'd be better to ask here rather than open an issue on github.

EDIT: Never mind, I've done a few tests and can confirm this isn't caused by any of your repositories.

The only other issue I've run into is that a Grubbin caught in a Cherish Ball will crash the game when it's sent out, but that's easily fixed by assigning it a back sprite animation. I've only seen it happen with that specific combination so far, so no idea what's going on there.

Everything else is fantastic so far, great work Dizzy! Either there are very few bugs or they're all very hard to find.
 
Last edited:
4
Posts
6
Years
  • Age 23
  • Seen Jul 29, 2020
How can i asign the hidden abilities, them are coded in base stats, but how can i make a pokemon o have him?
 

Lunos

Random Uruguayan User
3,114
Posts
15
Years
How can i asign the hidden abilities, them are coded in base stats, but how can i make a pokemon o have him?
As you saw, Hidden Abilities are already implemented, and adding one to a pokémon should be self-explanatory. You just add the relevant field to your pokémon's data inside the base_stats.h file between the line that handles your pokémon's regular abilities and their body color, and... that's it really.

I doubt that's what you asked, so please do rephrase your question if I got it wrong.

EDIT: And naturally, I did misunderstand. What mrlance asked here (he chatted with me on Discord a little bit), is how can he assign a Hidden Ability to a wild pokémon or a gifted pokémon.
 
Last edited:
22
Posts
9
Years
  • Age 27
  • Seen Oct 18, 2021
How can i asign the hidden abilities, them are coded in base stats, but how can i make a pokemon o have him?

I can answer this,

src/pokemon.c, line 2495, in function CreateBoxMon:

if (gBaseStats[species].abilities[1])
{
value = personality & 1;
SetBoxMonData(boxMon, MON_DATA_ABILITY_NUM, &value);
}
I actually did it by assigned a flag check, works for both wild and gift.

Edit: Well I shall mention u also need to modify GetAbilityBySpecies function to determine the abilityNum bit.

Another thing is that 1 extra abilityNum bit will break the present save structure.
What I did is to tweak the GetAbilityBySpecies function to read AbilityNum as hidden ability mark, while using PID to determine normal ability bit, or u can actually make the save structure using that 1 extra bit?
 
Last edited:
4
Posts
6
Years
  • Age 23
  • Seen Jul 29, 2020
I added that extra bit and this changes
if (gBaseStats[species].abilities[1] ||gBaseStats[species].abilityHidden )
{
if ((Random() % 10) == 0)
value = 2;
else
value = personality & 1;
SetBoxMonData(boxMon, MON_DATA_ABILITY_NUM, &value);
}

In GetAbilityBySpecies
if (abilityNum == 2)
gLastUsedAbility = gBaseStats[species].abilityHidden;
else if (abilityNum == 1)
gLastUsedAbility = gBaseStats[species].abilities[1];

if (gLastUsedAbility == 0)
gLastUsedAbility = gBaseStats[species].abilities[0];

Thanx for your help
 
Back
Top