The PokéCommunity Forums  

Go Back   The PokéCommunity Forums > ROM Hacking > Research & Development
Sign Up Rules/FAQ Live Battle Blogs Mark Forums Read

Notices

Research & Development Got a well-founded knack with ROM hacking? Love reverse-engineering the Pokémon games? Or perhaps you love your assembly language. This is the spot for polling and gathering your ideas, and then implementing them! Share your hypothesis, get ideas from others, and collaborate to create!
Research & Development programs in this forum are subject to moderator approval before they are displayed.


Advertise here

Reply
 
Thread Tools
  #1    
Old July 22nd, 2011, 02:49 PM
redriders180's Avatar
redriders180
Mastermind of Pokemon Glazed
 
Join Date: Jun 2010
Location: Path of Victory, Tunod
Gender: Male
Nature: Quirky
Send a message via AIM to redriders180 Send a message via Skype™ to redriders180

Advertise here
Before I say anything: Hi there! I'm fairly new here, but I've been pondering a question for a while. How can we give Pokemon new evolutions?

The Problem
I've tried to use many programs to make new ways of evolution. These programs usually are very limited, allowing you to only create evolutions within certain parameters, i.e. By level up, using a stone, trading, trading with a specific item, basically, any way that a Pokemon can evolve up to Generation III. What I want to do is to make more ways of evolution, if this is possible.

Investigating
Of course, we can't try to figure out EVERY way to evolve...there is too many. We can suggest more as we go, But I'd like to start of with these, which are ways Gen IV Pokemon evolve:
  • Evolving by level up, holding an item
  • Evolving by certain locations
  • Evolving with a certain Pokemon in the party
  • Evolving by items other than Water, Thunder, Fire, Leaf, or Sun Stone.
Other ideas, which no current Pokemon evolve by, but someone might want to try:
  • Evolving with certain stats maxed out (Cool, Smart, etc...)
  • Evolving with a stat in relation to another stat (Like Tyrogue).
  • Evolving with no happiness
The list is long, as I've said before. I don't know anything specific about evolution data, But I will be willing to learn anything I can to try it out. I have mostly XSE knowledge, but I am going to try ASM soon.

Thank you for reading, and thanks for your help! I'm sorry if this has been covered in other topics, but I couldn't find one specifically. If you do know of someone else who has covered this, if you could PM it to me, I'd really appreciate it.

PS: The hack I am using is FireRed, but I think it might be good if we covered the many different Gen III games. I'm not sure what else to say. Thanks again :3
Reply With Quote
  #2    
Old July 22nd, 2011, 09:07 PM
Darthatron's Avatar
Darthatron
巨大なトロール。
Community Supporter Tier 2
 
Join Date: Jan 2006
Location: Melbourne, Australia
Age: 22
Gender: Male
Nature: Modest
Something like this is surprisingly easy to do. You just branch an ASM routine from the current evolution routine and expand the switch statement to include more than the original evolutions.

According to my notes, the evolution routine is at 0x080CE8DC in FireRed.
__________________
あなた は しきしゃ です
わたし は ばか です
Reply With Quote
  #3    
Old July 22nd, 2011, 09:20 PM
Team Fail's Avatar
Team Fail
The fine line between in|sanity
Community Supporter
 
Join Date: May 2009
Age: 19
Gender: Male
Nature: Brave
It would be certainly interesting, but tools would have to be expanded for the almost-limitless possibilities for evolution. Well, unless you're in for a ton of Hex Editing. But yes, I do think it would just be expansion of the evolution method table, as Darthatron mentioned, and some ASM routines to allow for them.
__________________

Pairs:
Kevin, Echidna
Follow me on Twitter! @TeamFail
Alt 1, リザードン
Miiverse
Pokémon Hackers Online
Alt 2: Jack Cayman



[04:20.39] <@GoGo> I WILL INSERT WITH PLEASURE
[04:20.45] <@GoGo> shut it Bela

[05:41.55] <Team_Fail> Blue Spider is interesting, but #MEHMasterRace
[05:42.20] <diegoisawesome> Team_Fail: Sounds like a bunch of unmotivated people that still want to try to take over the world
Reply With Quote
  #4    
Old July 22nd, 2011, 09:21 PM
redriders180's Avatar
redriders180
Mastermind of Pokemon Glazed
 
Join Date: Jun 2010
Location: Path of Victory, Tunod
Gender: Male
Nature: Quirky
Send a message via AIM to redriders180 Send a message via Skype™ to redriders180
I'm sorry for asking, but would it be too much trouble to ask for an example? I am new to ASM (So new that I know next to nothing), and don't want to mess my game up too badly (even with a backup).

Edit: Forgot to say thanks :3
Reply With Quote
  #5    
Old July 22nd, 2011, 09:26 PM
Team Fail's Avatar
Team Fail
The fine line between in|sanity
Community Supporter
 
Join Date: May 2009
Age: 19
Gender: Male
Nature: Brave
Quote:
Originally Posted by redriders180 View Post
I'm sorry for asking, but would it be too much trouble to ask for an example? I am new to ASM (So new that I know next to nothing), and don't want to mess my game up too badly (even with a backup).

Edit: Forgot to say thanks :3
It can be as simple as checking a player's Secret ID or as advanced as a puzzle that uses controls graphics and sprites, as well as integrated music.

Or checking stats.
__________________

Pairs:
Kevin, Echidna
Follow me on Twitter! @TeamFail
Alt 1, リザードン
Miiverse
Pokémon Hackers Online
Alt 2: Jack Cayman



[04:20.39] <@GoGo> I WILL INSERT WITH PLEASURE
[04:20.45] <@GoGo> shut it Bela

[05:41.55] <Team_Fail> Blue Spider is interesting, but #MEHMasterRace
[05:42.20] <diegoisawesome> Team_Fail: Sounds like a bunch of unmotivated people that still want to try to take over the world
Reply With Quote
  #6    
Old July 22nd, 2011, 09:37 PM
Late's Avatar
Late
Pokémon Artist
 
Join Date: Nov 2008
Location: "We all live in a Pokémon World!"
Age: 19
Gender: Male
Nature: Careful
Jambo51 made all evolution types from Gen IV and V available in FireRed. Maybe he can help you.
__________________

Please feed my Pokémon and warm my eggs.
Thanks for everyone who have clicked these, you've helped me a lot

Anyone has Club Nintendo codes that you don't need? I want those.
If you have one code for me I can trade you my Explorers of Sky code as I can't put it because I have registered already one. (Registered my brother's game and now I can't register mine...) Someone have same thing? PM me.
I know there's nobody who wishes to do this xD
I'm talking about Club Nintendo of Europe.
Reply With Quote
  #7    
Old July 23rd, 2011, 01:00 AM
Jambo51's Avatar
Jambo51
Glory To Arstotzka
 
Join Date: Jun 2009
Gender: Male
Nature: Quiet
You are correct, sir! I have indeed made all the new official evo types work. The best thing is, we could easily come up with our own complicated evo types if we wanted to. I'll post/edit this post a short explanation of how to add new evo types (stones included) when I get home from work.
__________________
Hey guys, please check out my recreations of the gen 1 and 2 music on my custom engine at my SoundCloud! - Here!

Last edited by Jambo51; July 23rd, 2011 at 05:47 PM. Reason: SPELLING! lol
Reply With Quote
  #8    
Old July 23rd, 2011, 03:50 PM
Crimson5M's Avatar
Crimson5M
what
Community Supporter
 
Join Date: Feb 2011
Location: Scotland
Age: 18
Gender: Male
Nature: Quiet
Quote:
Originally Posted by Jambo51 View Post
You are correct, sir! I have indeed made all the new official evo types work. The bedt thing is, we could easily come up with our own complicated evo types if we wanted to. I'll post/edit this post a short ecplanation of how to add new evo types (stones included) when I get home from work.
Please tell me they work for Ruby?
__________________

Because it should've won HotY.
Pear
Frodo Baggins
Twitter
Youtube
CBC
Reply With Quote
  #9    
Old July 23rd, 2011, 05:46 PM
Jambo51's Avatar
Jambo51
Glory To Arstotzka
 
Join Date: Jun 2009
Gender: Male
Nature: Quiet
They do not work for Ruby. I'm not a Ruby hacker, so I won't be the one to port them over to Ruby. I hack Fire Red (mainly) and a little Emerald.

Tell me, why do people still insist on hacking Ruby?
Emerald is the same, but better! XD

PREPARE FOR WALL OF TEXT, DON'T SAY I DIDN'T WARN YOU!

Anyway, here's a quick explanation of how the evo routine works:
First of all, it gets the species of the Pokémon who's evolution is being checked, then reads the relevant slot(s) on the evolution table (0x25977C), and checks what type of evolution it is.

It reads the first half word (although it's only ever a byte as there aren't that many evo types), and then subtracts 1 from the number. It then reads a table, which is located at 0x42FC4 (NOTE: BPRE 1.0 only), and gets the relevant routine to call from this table. It then executes the checks required for the evolution using various asm processes. I can't be too specific here, as each one is VASTLY different dependant on the evolution requirements.

Anyway, it reads the requirements from the evolution table, and checks if the Pokémon meets these requirements. If so, it stores the species to evolve to, then moves on to check the rest of the Pokémon in the party.

Each evolution "method" (Called on level up, Called on trade, and called on item use) uses a slightly different routine to run the checks.

The called on level up is the most common, and easiest understood. It starts at 0x42EC4. All it does is run through the Pokémon's evo data, and reads the evo types stored there. It then goes to the relevant routine (by the method described above), and executes the relevant checks for that evo type.

Then it loops back round to check the rest of the evo types for that Pokémon.

The items (aka Evolution stones) are only called upon you pressing "Use" on an evolution stone. It starts at 0x43182. It runs through your party checking all their evolution data for a match of the item you have used. If it can't find a match, it shows the message "Can't use" (or whatever it is), if it CAN evolve, it shows the HP bar instead.

Upon selecting a Pokémon with the item, the game runs a second check, using the same routine, to see if the one you selected can or can't evolve using that stone, and either prints the message saying it won't work, or evolves the Pokémon.

It's easy enough to make the game run this check to support new stones, but they still won't work. There's a table in the rom (which I have sadly long since lost the location of) which the game reads for behaviour upon selecting a Pokémon. When this table is updated to contain the correct behaviour, the new stones work a treat. The Dawn Stone is a special exception, and actually requires a rewrite of the routine to support the gender specific attributes it has.

Finally, the most complicated is trading. The routine for this begins at 0x43122 (I think...). It's largely unused in ROM hacks, but that won't stop me divulging its secrets!
This is only called after the completion of a trade.

It runs the checks in a similar-ish manner to the level up one. It checks the TRADED Pokémon only to see if it has a trade evolution. It simply branches off to the relevant routine here, as there are only 2 existing options (type 05 and 06). Type 05 simply evolves straight away, while 06 checks for the relevant item first.

So, now that the explanation of its workings is over, i'm sure you would like to know what that actually achieves?
Well, if you paid attention, you'll notice I GAVE you the locations you need to look at to find everything!
Good luck! I'll post my routines/findings tomorrow, but for now... Bed Time! :D
__________________
Hey guys, please check out my recreations of the gen 1 and 2 music on my custom engine at my SoundCloud! - Here!

Last edited by Jambo51; July 23rd, 2011 at 06:26 PM.
Reply With Quote
  #10    
Old August 11th, 2011, 08:28 AM
metapod23's Avatar
metapod23
Hardened Trainer
 
Join Date: Mar 2009
Gender: Male
Nature: Timid
Quote:
Originally Posted by Jambo51 View Post
They do not work for Ruby. I'm not a Ruby hacker, so I won't be the one to port them over to Ruby. I hack Fire Red (mainly) and a little Emerald.

Tell me, why do people still insist on hacking Ruby?
Emerald is the same, but better! XD

PREPARE FOR WALL OF TEXT, DON'T SAY I DIDN'T WARN YOU!

Anyway, here's a quick explanation of how the evo routine works:
First of all, it gets the species of the Pokémon who's evolution is being checked, then reads the relevant slot(s) on the evolution table (0x25977C), and checks what type of evolution it is.

It reads the first half word (although it's only ever a byte as there aren't that many evo types), and then subtracts 1 from the number. It then reads a table, which is located at 0x42FC4 (NOTE: BPRE 1.0 only), and gets the relevant routine to call from this table. It then executes the checks required for the evolution using various asm processes. I can't be too specific here, as each one is VASTLY different dependant on the evolution requirements.

Anyway, it reads the requirements from the evolution table, and checks if the Pokémon meets these requirements. If so, it stores the species to evolve to, then moves on to check the rest of the Pokémon in the party.

Each evolution "method" (Called on level up, Called on trade, and called on item use) uses a slightly different routine to run the checks.

The called on level up is the most common, and easiest understood. It starts at 0x42EC4. All it does is run through the Pokémon's evo data, and reads the evo types stored there. It then goes to the relevant routine (by the method described above), and executes the relevant checks for that evo type.

Then it loops back round to check the rest of the evo types for that Pokémon.

The items (aka Evolution stones) are only called upon you pressing "Use" on an evolution stone. It starts at 0x43182. It runs through your party checking all their evolution data for a match of the item you have used. If it can't find a match, it shows the message "Can't use" (or whatever it is), if it CAN evolve, it shows the HP bar instead.

Upon selecting a Pokémon with the item, the game runs a second check, using the same routine, to see if the one you selected can or can't evolve using that stone, and either prints the message saying it won't work, or evolves the Pokémon.

It's easy enough to make the game run this check to support new stones, but they still won't work. There's a table in the rom (which I have sadly long since lost the location of) which the game reads for behaviour upon selecting a Pokémon. When this table is updated to contain the correct behaviour, the new stones work a treat. The Dawn Stone is a special exception, and actually requires a rewrite of the routine to support the gender specific attributes it has.

Finally, the most complicated is trading. The routine for this begins at 0x43122 (I think...). It's largely unused in ROM hacks, but that won't stop me divulging its secrets!
This is only called after the completion of a trade.

It runs the checks in a similar-ish manner to the level up one. It checks the TRADED Pokémon only to see if it has a trade evolution. It simply branches off to the relevant routine here, as there are only 2 existing options (type 05 and 06). Type 05 simply evolves straight away, while 06 checks for the relevant item first.

So, now that the explanation of its workings is over, i'm sure you would like to know what that actually achieves?
Well, if you paid attention, you'll notice I GAVE you the locations you need to look at to find everything!
Good luck! I'll post my routines/findings tomorrow, but for now... Bed Time! :D
I was just wondering if a routine could be made using this info to make a Pokemon evolve at any time outside of battle? How hard/easy would that be to do, if you store the Pokemon position and/or species in a variable and then called the routine to evolve that particular Pokemon?

Thanks to anyone for any insight.
__________________
Reply With Quote
  #11    
Old August 13th, 2011, 03:07 AM
TheDarkShark
Metal Headed Hacker
 
Join Date: May 2010
Location: Germany
Gender: Male
Nature: Calm
I'm not sure, but I think you could run one of the check routines already used in the game. I don't really think that would work without slightly customizing the routine so it checks for the correct pokémon, though...
But wait, I think you want an unconditional evolution which is always caused when the script runs, right? Err, I think that'd be a bit harder. You'd need to analyse the checking routines to get the routines that make the pokemon evolve. Then write a routine that loads some variables (e.g. the pokemon's party slot, I guess? I don't know, but I'm pretty sure that you'll need it to run the evolution routine.) and calls the evolution routine.

That's just an idea, though. To be honest, I haven't looked at the routines ><
__________________
There are two things every Rom-Hacker should learn:
1. Don't give away everything you know!

Reply With Quote
  #12    
Old August 13th, 2011, 05:31 AM
Jambo51's Avatar
Jambo51
Glory To Arstotzka
 
Join Date: Jun 2009
Gender: Male
Nature: Quiet
Actually, you're very close to having a good answer here. If we can call the evolution checking routine, we could easily evolve from any script. And forcing evolution is as easy as ignoring the evolution conditions. What i'm talking about is directly calling the actual evolution routine, passing it values read from variables, to force evolution of a given pokemon. If I could find the actual routine which executes evolution, I could easily produce a routine for you to call.
__________________
Hey guys, please check out my recreations of the gen 1 and 2 music on my custom engine at my SoundCloud! - Here!
Reply With Quote
  #13    
Old August 13th, 2011, 12:54 PM
metapod23's Avatar
metapod23
Hardened Trainer
 
Join Date: Mar 2009
Gender: Male
Nature: Timid
Quote:
Originally Posted by Jambo51 View Post
Actually, you're very close to having a good answer here. If we can call the evolution checking routine, we could easily evolve from any script. And forcing evolution is as easy as ignoring the evolution conditions. What i'm talking about is directly calling the actual evolution routine, passing it values read from variables, to force evolution of a given pokemon. If I could find the actual routine which executes evolution, I could easily produce a routine for you to call.
Shouldn't the offsets you posted eventually call the evolution routine? I would look for it, but I don't know how to decompile in-game routines properly.
__________________
Reply With Quote
  #14    
Old August 13th, 2011, 01:24 PM
TheDarkShark
Metal Headed Hacker
 
Join Date: May 2010
Location: Germany
Gender: Male
Nature: Calm
Well, if you can't get IDA Pro to work properly on your PC (like me on my laptop - now that I'm on my PC again I'd better try again...) you could use VBA-SDL-H. That's the debugging version of the VBA. Simply press F11 to get to the debugger and type dt <Thumb Routine Offset> to disassemble the routine. Doing it that way you can only view 20 opcodes at once plus you can't simply save the routine to a file, afaik.
Here's a link to a German website where you can download an old version of IDA for free. I don't have a link to an English page, sorry.
http://www.chip.de/downloads/IDA-Pro..._29744270.html

You can get the VBA-SDL-H at the official VBA page or, for example, in HackMew's ASM-Tutorial.
Even if that's a bit off-topic, I hope it helped...
__________________
There are two things every Rom-Hacker should learn:
1. Don't give away everything you know!

Reply With Quote
  #15    
Old August 14th, 2011, 05:33 AM
sky_queen3's Avatar
sky_queen3
Minusle Fangirl. ;)
 
Join Date: Feb 2009
Location: Australia
Age: 24
Gender: Female
Nature: Naive
Wait, so they've figured out how to add new evolution stones? :cer_love:
Awesome!
__________________
Reply With Quote
  #16    
Old August 14th, 2011, 09:43 AM
Jambo51's Avatar
Jambo51
Glory To Arstotzka
 
Join Date: Jun 2009
Gender: Male
Nature: Quiet
Quote:
Originally Posted by metapod23 View Post
Shouldn't the offsets you posted eventually call the evolution routine? I would look for it, but I don't know how to decompile in-game routines properly.
No, no, these routines call the CHECKING routine. You want to bypass this altogether and call the actual evolution routine, and force the evolution (presumably of Charmander/Charmeleon) into its next stage, ignoring the level requirement.

Am I correct, sir?

If so, a small custom routine to detect from a variable what Pokémon ID to evolve would be all that would be required, then directly call the evolution routine if said Pokémon is in your party.
__________________
Hey guys, please check out my recreations of the gen 1 and 2 music on my custom engine at my SoundCloud! - Here!
Reply With Quote
  #17    
Old August 14th, 2011, 10:05 AM
TheDarkShark
Metal Headed Hacker
 
Join Date: May 2010
Location: Germany
Gender: Male
Nature: Calm
Just a suggestion to make: What about having the pokemon species to evolve in one variable, the species to evolve it to in another? If the original routine takes the evo-slot of the species as a parameter instead of the species it might be hard, though...
Oh, and what about a safety check, just in case you have two pokemon of the same species? For my personal needs, I'd like to have the party slot as an additional parameter.
Anyways, gotta do some research for the code hack I'm currently working on myself. See ya'
__________________
There are two things every Rom-Hacker should learn:
1. Don't give away everything you know!

Reply With Quote
  #18    
Old August 14th, 2011, 01:49 PM
JPAN
pokemon rom researcher
 
Join Date: Dec 2008
I've been trying to make it work, because of the Experience adding method on the Hacked engine, but all the results I had so far are disappointing.
There are two routines that perform evolution that I checked: the Bag-to-bag Evolution routine and the BattleScreen-to-Overworld routine. Haven't looked at the trade one yet.

At 0x08015AAE starts a loop that checks for all pokemon involved in battle, if any changed in a way that causes evolution, and evolves them if it's true. 0x08015AD2 contains the call to the Evolution checker, and at 0x08015AE0 there is a placing of 0x08015B30 to further execution at the function stack, as well as a call to 0x080CDDF4, the only place where all checked Show Evolution methods converge.

At 0x080CDDA8 starts the bag-to-bag evolution display. Loads the first function to use on screen, and deals with the rest later.
This function receives r1 as the pokemon to evolve to, r2 as a status flag, where bit 1 is canCancel, and R3 is the slot of the pokemon to evolve.
So, if you had r1 = 7, r2=1, r3 = 0 , you would be presented with a screen of your party leader evolving into squirtle. R0, from code examples, was the address for the pokemon, but bad coding erase it before it's used.

Now, these functions graphic nature make them only work properly on the exact moment they should be used. So, if you try to call them from, say, a script, you get a eternal black screen after the evolution.

I even tried to replace the "outer shell" of calls of this function for one that is script-ready (special 0xc2, hatching animation), but had no sucess. Maybe due to the also complex nature of the hatch animation.

So, can we evolve pokemon as we want? yes. Can we call it when we want? not yet. Only if using a party item (such as stones), or right after battle.

PS: While the current Item system allows you to create new Stones easily(See my Items thread last post for more), it is so limited that the only way to create an item that evolves pokemon to a specific species all the time (like a special berry that evolves all fish pokemon to Gyarados) would need to alter the Stone Evolution code.
__________________
Here are the links for my work


Currently working on:
Battle Script Documentation
Another large project
Reply With Quote
  #19    
Old August 14th, 2011, 08:31 PM
metapod23's Avatar
metapod23
Hardened Trainer
 
Join Date: Mar 2009
Gender: Male
Nature: Timid
Quote:
Originally Posted by Jambo51 View Post
No, no, these routines call the CHECKING routine. You want to bypass this altogether and call the actual evolution routine, and force the evolution (presumably of Charmander/Charmeleon) into its next stage, ignoring the level requirement.

Am I correct, sir?

If so, a small custom routine to detect from a variable what Pokémon ID to evolve would be all that would be required, then directly call the evolution routine if said Pokémon is in your party.
Yes, that's correct.


Quote:
Originally Posted by JPAN View Post
I've been trying to make it work, because of the Experience adding method on the Hacked engine, but all the results I had so far are disappointing.
There are two routines that perform evolution that I checked: the Bag-to-bag Evolution routine and the BattleScreen-to-Overworld routine. Haven't looked at the trade one yet.

At 0x08015AAE starts a loop that checks for all pokemon involved in battle, if any changed in a way that causes evolution, and evolves them if it's true. 0x08015AD2 contains the call to the Evolution checker, and at 0x08015AE0 there is a placing of 0x08015B30 to further execution at the function stack, as well as a call to 0x080CDDF4, the only place where all checked Show Evolution methods converge.

At 0x080CDDA8 starts the bag-to-bag evolution display. Loads the first function to use on screen, and deals with the rest later.
This function receives r1 as the pokemon to evolve to, r2 as a status flag, where bit 1 is canCancel, and R3 is the slot of the pokemon to evolve.
So, if you had r1 = 7, r2=1, r3 = 0 , you would be presented with a screen of your party leader evolving into squirtle. R0, from code examples, was the address for the pokemon, but bad coding erase it before it's used.

Now, these functions graphic nature make them only work properly on the exact moment they should be used. So, if you try to call them from, say, a script, you get a eternal black screen after the evolution.

I even tried to replace the "outer shell" of calls of this function for one that is script-ready (special 0xc2, hatching animation), but had no sucess. Maybe due to the also complex nature of the hatch animation.

So, can we evolve pokemon as we want? yes. Can we call it when we want? not yet. Only if using a party item (such as stones), or right after battle.

PS: While the current Item system allows you to create new Stones easily(See my Items thread last post for more), it is so limited that the only way to create an item that evolves pokemon to a specific species all the time (like a special berry that evolves all fish pokemon to Gyarados) would need to alter the Stone Evolution code.
Thank you for looking into it, JPAN. I appreciate the effort.
__________________
Reply With Quote
Reply
Quick Reply

Sponsored Links


Advertise here
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Minimum Characters Per Post: 25



All times are UTC -8. The time now is 04:29 AM.


Style by Nymphadora, artwork by Sa-Dui.
Like our Facebook Page Follow us on Twitter © 2002 - 2014 The PokéCommunity™, pokecommunity.com.
Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, The Pokémon Company or The Pokémon Company International. We just love Pokémon.
All forum styles, their images (unless noted otherwise) and site designs are © 2002 - 2014 The PokéCommunity / PokéCommunity.com.
PokéCommunity™ is a trademark of The PokéCommunity. All rights reserved. Sponsor advertisements do not imply our endorsement of that product or service. User generated content remains the property of its creator.