Advertiser Content

Pokeemerald Pokemon Expansion

Started by DizzyEgg April 12th, 2019 2:59 AM
  • 3730 views
  • 20 replies

DizzyEgg

Age 22
Male
Poland
Online now
Posted 1 Week Ago
785 posts
5.7 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:
* because Emerald was my game of choice, I decided to use two-framed pokemon front sprites to take advantage of the animation system. Naturally, there is not a resource that has all sprites in this format, so pokemon from gens 5(about half of them), 6 and 7 use only want frame.

* in relation to the above point, all Pokemon have been assigned an animation. The one-framed ones may be lackluster, but I think they are still better than no animations at all.

* icons for pokemon up to gen6 are done, with the palettes amount changed from 3 to 6 allowing for more varied color schemes.

* base stats and evolution(mega as well) data is done for (almost)all mons. New evolution methods, such as specific gender or specific move, have been all properly implemented. It is worth mentioning that some items have been commented out. Similarly, mons have correctly assigned abilities, and the new Fairy type, but none of them exist in the game, there is no data for them. All of the above are subject to change, as I am still thinking how to best tackle these.

* hidden abilities are functionally added, however they cannot be normally found on wild or trainer pokemon. In other words, it's up to the user to create ways of encountering them. For a mon to have a hidden ability, simply set MON_DATA_ABILITY_NUM to 2.

* pokedex data along with an updated Hoenn dex(ORAS one).

* dex flags have been put in the SaveBlock1, in field that was previously filler, previous flag fields are free to use. For more information see global.h

* cries for all pokemon are in. Note, they do take up a lot of space, so it's up to the user whether they decide to keep them, compress or change them. Personally, I wouldn't worry about it until I run out of 32MB rom space.

* There are dummy learnsets for all new pokemon. I won't add the actual learnsets to the file, because the moves are not defined in this repo. Instead, I will provide a ready-to-insert file here and as an attachment.

* TMs/HMs and Move Tutor compatibility is done for all the newly added species and upgraded to the latest gen standards for older mons. The TMs and tutor moves themselves have not been modified in any way.

* mega pokemon are done

* some forms are done. This includes Rotom, Burmy, Wormadam, and Meowstic.

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/DizzyEggg/pokeemerald/tree/pokemon_expansion
Credits
Spoiler:
MrDollSteak and everyone involved for the Sugimori front, back sprites and icons
MrDollSteak and and everyone involved for the DS-Style front, back sprites and icons
thedarkdragon11 for front, back sprites for Gen VII pokemon
Spherical Ice for allowing me to rip icons from Pokemon Gaia(check out his hack btw, one of the best out there)
Buffel Salt and everyone involved for their data files which I used for almost eveyrthing
MrDollSteak - his pokedex descriptions
Lunos - save file and getting the coordinates for gen1-gen4 mons
Cancer Fairy - coordinates, new animations, lots of help with the project
UltimaSoul - fixing some icon sprites

Forgot about you? Let me know, and you'll be added in no time!

LCCoolJ95

Limited Capacity

Age 24
Male
The World That Never Was
Seen 1 Day Ago
Posted 6 Days Ago
608 posts
10.4 Years
This looks alright, but I'm gonna wait until it gets better.
"The greatest obstacle in life is Yourself. Overcome it, and you will achieve the greatest accomplishment of all." -Art Beins, 1982

Pokémon Theta Emerald EX: https://www.pokecommunity.com/showthread.php?t=386240

LCCoolJ95

Limited Capacity

Age 24
Male
The World That Never Was
Seen 1 Day Ago
Posted 6 Days Ago
608 posts
10.4 Years
What specifically are you waiting for?
-Dex flags
-TM/HM Compatibility
-Move Tutor Compatibility
-Cries
-Forms/Formes
-3rd/hidden ability
"The greatest obstacle in life is Yourself. Overcome it, and you will achieve the greatest accomplishment of all." -Art Beins, 1982

Pokémon Theta Emerald EX: https://www.pokecommunity.com/showthread.php?t=386240

DizzyEgg

Age 22
Male
Poland
Online now
Posted 1 Week Ago
785 posts
5.7 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 .

DizzyEgg

Age 22
Male
Poland
Online now
Posted 1 Week Ago
785 posts
5.7 Years
-Dex flags
-TM/HM Compatibility
-Move Tutor Compatibility
-Cries
-Forms/Formes
-3rd/hidden ability
Hijacking this comment to let everyone know, all of the above has been done.
For details, see main post.

DizzyEgg

Age 22
Male
Poland
Online now
Posted 1 Week Ago
785 posts
5.7 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.

DizzyEgg

Age 22
Male
Poland
Online now
Posted 1 Week Ago
785 posts
5.7 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.

Buffel Saft

Male
Seen 7 Hours Ago
Posted 7 Hours Ago
577 posts
6.1 Years
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.

Lunos

Random Uruguayan User

Male
Montevideo (Uruguay)
Seen 1 Hour Ago
Posted 19 Hours Ago
2,060 posts
11 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.

Taの境界

Seen September 4th, 2019
Posted September 4th, 2019
22 posts
4.8 Years
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?
Seen August 26th, 2019
Posted August 7th, 2019
4 posts
1.6 Years
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

DizzyEgg

Age 22
Male
Poland
Online now
Posted 1 Week Ago
785 posts
5.7 Years
Small update since many people asked me about this earlier. Hidden abilities are added in without the need of rewriting the structs, I dealt with that. Here's info from the updated main post:
hidden abilities are functionally added, however they cannot be normally found on wild or trainer pokemon. In other words, it's up to the user to create ways of encountering them. For a mon to have a hidden ability, simply set MON_DATA_ABILITY_NUM to 2.
If you're curious, I removed isEgg field from battle pokemon(since eggs cannot participate in battles) and changed fatefulEncounter field from 4 bits to 2(by the way, I have not found a single instance of setting this field in the game, tbh I don't even know if this is fatefulEncounter since obedience fills that role in gen3).
Advertiser Content