• 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?".
  • Forum moderator applications are now open! Click here for details.
  • 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.

Research: Special Abilities

228
Posts
13
Years
Black and White introduced the Dream World, where Pokemon with different abilities can be caught.
Maybe it is possible to implement a special area in the GBA games where Pokemon will have different abilities. I experimented with the Wally event from RSE.
diegoisawesome said:
There are four specials in that event you should be aware of: special 0x28, special 0x12F, special 0xA0, and special 0x29. special 0x28 saves your first Pokémon into memory for retrieval later, special 0x12F overwrites your first Pokémon with a specified Pokémon, special 0xA0 is the actual battle, and special 0x29 overwrites your first Pokémon with the one saved in memory.
I was messing around with the event, and deleted special 0x29, which causes that after the event, you still have the Zigzagoon. However, there is something special about this Zigzagoon: it has no ability instead of Pickup.
If we could import a special table that connects every Pokemon with its Dream World ability, and the game then checks when encountering the Pokemon where the player is, and when it's at a special place, the Pokémon will have that ability.
I think all of this is possible by creating and editing ASM routines.
What do you think? Is this a good idea? If you can help, please help. Maybe we could make our very own Dream World!
 

Darthatron

巨大なトロール。
1,152
Posts
18
Years
Black and White introduced the Dream World, where Pokemon with different abilities can be caught.
Maybe it is possible to implement a special area in the GBA games where Pokemon will have different abilities. I experimented with the Wally event from RSE.

I was messing around with the event, and deleted special 0x29, which causes that after the event, you still have the Zigzagoon. However, there is something special about this Zigzagoon: it has no ability instead of Pickup.
If we could import a special table that connects every Pokemon with its Dream World ability, and the game then checks when encountering the Pokemon where the player is, and when it's at a special place, the Pokémon will have that ability.
I think all of this is possible by creating and editing ASM routines.
What do you think? Is this a good idea? If you can help, please help. Maybe we could make our very own Dream World!

I would require a bit of hacking. Abilities in the Pokemon Structure in the RAM of the 3rd Generation is stored in a single bit (which can only have two values, 0 or 1).

However, if you created sub-routines for EVERY routine that reads for Abilities, then it is possible to branch to a different table if certain criteria is met. But, I would assume, there are quite a few routine that do this.

So yeah, it's possible, but I don't see anyone doing it for you unless they wanted it in their hack aswell.
 

Shiny Quagsire

I'm Still Alive, Elsewhere
697
Posts
14
Years
It's possible, but, as Darthatron said, will take a lot of ASM hacking. Also, it might take a bit of space to make the table. In other words, I honestly don't think it's worth it.
 

Darthatron

巨大なトロール。
1,152
Posts
18
Years
It's possible, but, as Darthatron said, will take a lot of ASM hacking. Also, it might take a bit of space to make the table. In other words, I honestly don't think it's worth it.

With one extra ability per pokemon, it would only take up 386 bytes. But, you could not take up any extra space by using the padding at the end on the base-stats data structure. You could even add two extra abilities per pokemon without needing a table. ^_^

Doing the above would also allow easier routine editing, as adding a simple check for a flag (or something), then branch into a slightly edited routine. Thus, not taking up too much extra space.

EDIT: I looked into it a bit, and it seems most abilities are actually determined from a single routine. ^_^ I don't have any assemblers installed on my laptop, but I'll set up my old desktop and see if I can get something done. The routine is at 0x40D38, btw.
 
Last edited:
228
Posts
13
Years
Oh, awesome! I already made a list of all the 439 index numbers with their Dream World ability, I then turned the decimal into hexadecimal, which gives you 0x0 until 0x1B7, now I'm gonna change all abilites introduced in Gen 4 or 5 into abilites with almost the same effect, and then turn them into their hexadecimal value. I'll post them once they're done.

EDIT: Here are the first 2 lists, I forget I finished them already.
All Pokémon with their Dream World Abilities:
Spoiler:

All Pokémon in hexadecimal values with their abilites:
Spoiler:
 

Darthatron

巨大なトロール。
1,152
Posts
18
Years
The following routine will make it so you can add 2 more abilities per Pokemon, like the Dream World abilities in B/W. These new abilities are stored in the buffer at the end of the Pokemon Base Stats Structure.

Replace the 68 (0x44) bytes at 0x040D38 with this:
Code:
1F B5 0D 4C 0E 48 00 F0 13 F8 00 28 00 D0 05 34 0F BC 03 1C 09 06 00 29 00 D0 01 34 05 4A D8 00 C0 1A 80 00 00 19 80 7D 10 70 02 BC 02 BC 08 47 02 49 08 47 6A 3D 02 02 84 47 25 08 69 E5 06 08 [b]XX XX [/b]00 00
Where the XXXX is the variable (flipped) you will be using. Whenever said variable is NOT 0, the new abilities will be read, instead of the normal.

Replace the 4 bytes at 0x136708 with:
Code:
8E 46 04 06

EDIT: I should point out, this is for FR...
 
Last edited:
228
Posts
13
Years
The following routine will make it so you can add 2 more abilities per Pokemon, like the Dream World abilities in B/W. These new abilities are stored in the buffer at the end of the Pokemon Base Stats Structure.

Replace the 68 (0x44) bytes at 0x040D38 with this:
Code:
1F B5 0D 4C 0E 48 00 F0 13 F8 00 28 00 D0 05 34 0F BC 03 1C 09 06 00 29 00 D0 01 34 05 4A D8 00 C0 1A 80 00 00 19 80 7D 10 70 02 BC 02 BC 08 47 02 49 08 47 6A 3D 02 02 84 47 25 08 69 E5 06 08 [B]XX XX [/B]00 00
Where the XXXX is the variable (flipped) you will be using. Whenever said variable is NOT 0, the new abilities will be read, instead of the normal.

Replace the 4 bytes at 0x136708 with:
Code:
8E 46 04 06

Just what I was looking for! Thanks alot, and I hope others will use this aswell ~
A little question: where do you input the new, special abilities? And is the variable the value of the map?
 

Darthatron

巨大なトロール。
1,152
Posts
18
Years
Just what I was looking for! Thanks alot, and I hope others will use this aswell ~
A little question: where do you input the new, special abilities? And is the variable the value of the map?

The variable is the one you would set in a script. If you want, I can make it so it checks the map/bank rather than the variable.

To add special abilities, use a hex editor and do it manually.
 
228
Posts
13
Years
The variable is the one you would set in a script. If you want, I can make it so it checks the map/bank rather than the variable.

To add special abilities, use a hex editor and do it manually.

Got it! Variables are fine aswell, I just needed to know.
And where do you have to add the new abilities (which offset?)
 
228
Posts
13
Years
Exactly. Sorry, I've been calling it the "Buffer" the whole time. They are the same thing, just a different word. ^_^'

It's allright :) I'll try it out :D
Btw, is there a list with every ability introduced in gen III and their offsets?
EDIT: nevermind, found it :)
 
Last edited:

Darthatron

巨大なトロール。
1,152
Posts
18
Years
It's allright :) I'll try it out :D
Btw, is there a list with every ability introduced in gen III and their offsets?
EDIT: nevermind, found it :)
Awesome. If you plan on completing all the pokemon, maybe you could make a patch and post it in the first post along with my routine?
 
228
Posts
13
Years
Awesome. If you plan on completing all the pokemon, maybe you could make a patch and post it in the first post along with my routine?

Sure! Only a limitation: I have to replace abilities introduced in gen IV and V with abilities introduced in gen III, which means I can only use 76 out of the 164 abilities, except if it's possible to add new abilities...
Anyway, I'll make a patch later :)
 

Darthatron

巨大なトロール。
1,152
Posts
18
Years
Sure! Only a limitation: I have to replace abilities introduced in gen IV and V with abilities introduced in gen III, which means I can only use 76 out of the 164 abilities, except if it's possible to add new abilities...
Anyway, I'll make a patch later :)

It's possible, but really not practicle. :P
 

Darthatron

巨大なトロール。
1,152
Posts
18
Years
Well this is awkward... The routine I made isn't anything like the Dream World at all. :\ Instead of being able to catch pokemon with different abilities, it changes the ability that the pokemon actually has... Sorry about that. >_<"
 
228
Posts
13
Years
Well this is awkward... The routine I made isn't anything like the Dream World at all. :\ Instead of being able to catch pokemon with different abilities, it changes the ability that the pokemon actually has... Sorry about that. >_<"

Oh, it's allright, I even didn't try it. Thanks for the research anyway :) It might help later ~
And if you want, you can keep researching, I'm researching now too because of your help :)
 

Darthatron

巨大なトロール。
1,152
Posts
18
Years
Oh, it's allright, I even didn't try it. Thanks for the research anyway :) It might help later ~
And if you want, you can keep researching, I'm researching now too because of your help :)

The Dream World thing is near impossible... Gen 3 games store the ability a pokemon has in a single bit (can only be set to 0 or 1), whereas Gen 4 and 5 store abilities in a byte, allowing any pokemon to have any ability. Simply put, without a total re-write of the entire Ability engine and the Pokemon Structure... which really isn't practicle.
 
Back
Top