• 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 places on the 'net to talk Pokémon and more! Community members will not see the bottom screen advertisements.
  • Want to share your adventures playing Pokémon?
    Check out our new Travel Journals forum for sharing playthroughs of ROM Hacks, Fan Games, and other Pokémon content!
  • IMPORTANT: Following a takedown request, the following hacks have been delisted from PokéCommunity:

    • Pokémon Glazed
    • Pokémon: Giratina Strikes Back
    • Pokémon Flora Sky
    • Pokémon Stranded
    The downloads and discussion threads for these hacks will no longer be accessible, and staff will be unable to return questions regarding accessing this content.

Tool: YAPE (Yet Another Pokemon Editor)

Teh Baro

In my times...!
521
Posts
17
Years
Beautiful work man!!
Anger to help me a lot in the production of my hack!

I have a question and a suggestion!!
Do you know as to put or to remove the shadows below of the sprites of the pokemons?
If yes... put that function in the next version!!

Thank you!
Good Luck!
That and height where the pokemon is placed in battle, and this will be even perfect.

BTW, about that breeding thing below... does it just track back evolutions? Does the game do that or there's breeding data somewhere in the rom?
 

Epsilon

Shiny Scizor
249
Posts
17
Years
@silver314

I'm referring to the 24 ???? pokemon that come after celebi,
or do they already have on?
 
11
Posts
16
Years
  • Seen May 18, 2008
@Derlo and Teh Baro
I don't currently know how to change shadows, or position of the battle sprites, but I agree that this would be a nice feature. I will add these to my list of things to consider for future versions.

@Teh Baro
The game itself just traces back up the evolution tree to determine what a Pokémon breeds to. It does have some special code to make it so that wobuffet must be holding lax insence to produce the first evolution in the tree, but aside from this there is no other table or anything for the breeding info. It's simple backtracking through the evolutions. I did a fair amount of experimentation to ensure that YAPE followed the same basic process to determine this as the game does. I don't have any special notifications for the exceptions like wobuffet though.

@Epsilon
I'll make an attempt at explaining how all of the dex information works and hopefully that will help.

There are 2 main locations for dex data. One offset has 386 fixed-size entries with height, weight, etc. and pointers to the text data. The text data is stored seperately.
YAPE does handle updating all of the pointers in these dex entry structures as needed when you modify any text.

The way that a dex entry is tied to a Pokémon is not through a normal pointer; rather, the dex entries constitute an array with 387 elements and the national dex number of the Pokémon is used as an index into that array.

The ??? Pokémon you refer to all have national dex numbers > 386, so the game has issues if you catch one as it attempts mark a dex entry as caught that is beyond the size of the array. It is certainly possible to change the national dex numbers of these ??? Pokémon (future versions of YAPE will allow changing of the dex order), but you still have the limitation that all of the dex entries need to be together. Unless you relocate the entire array of dex data, you are still limited to 387 dex entries.

When you edit a dex entry in YAPE, all that happens is that I look up the national dex number for the selected Pokémon and modify the dex data at that index. Unlike the game, YAPE does do bounds checking and will not allow editing of any data beyond the end of the dex data array.

If you go to the Pokédex tab for one of the ???? Pokémon in YAPE, you will see that all editing is disabled because there is no corresponding dex entry for that Pokémon.

Summary: No. You can't just repoint these to some random location in the game because these are not accessed through normal pointers; they are accessed as an array where the national dex number is the index. Future versions of YAPE will let you modify the dex number (array index) used, but if you want more than 387 dex entries, you have to relocate the entire dex data.


Also, I'm putting together some technical documentation on the side which will have answers to these sorts of questions. I'll be releasing it when I get it finished for anyone who's interested.

--Silver314
 

Epsilon

Shiny Scizor
249
Posts
17
Years
Ok, thanks for explaining!

Maybe with this info,
people (maybe me) are going to be able to add pokemon after the last hoenn pokemon.
A complete dp generation in FRLG!

(I know that dex information isn't everything,
but still, it's a start)
 

+Sneasel™

It's a meeee, itman!
1,032
Posts
16
Years
Wow, i'm impressed, this program rocks!
It has everything you need to edit pokemon!

I have nothing else to say lol, but wow, its really useful!
Great job, I can't wait for the final release!
 

choatix

Choatix
30
Posts
17
Years
  • UK
  • Seen May 1, 2022
Awesome program!
It does almost everything you'd ever want a tool like it to do!
Maybe in the next version, you could add the pokemon's egg moves, pokemon it breeds too, and a picture for them. (because PokePic doesn't work on FRLG, which this does, so I can actually add pokemon like Budew, Roserade and so can others too) And also, a way to change the amount of moves each pokemon can learn... it's annoying if you are replacing the ? pokemon with new pokemon as they can only learn 1 move.

As I said, it's totally awesome!
 

Swampert 22

Is making tools for you...
393
Posts
18
Years
Awesome program!
It does almost everything you'd ever want a tool like it to do!
Maybe in the next version, you could add the pokemon's egg moves, pokemon it breeds too, and a picture for them. (because PokePic doesn't work on FRLG, which this does, so I can actually add pokemon like Budew, Roserade and so can others too) And also, a way to change the amount of moves each pokemon can learn... it's annoying if you are replacing the ? pokemon with new pokemon as they can only learn 1 move.

As I said, it's totally awesome!

If you want to add a whole moveset for a ? Pokémon, use PEP by Darthatron, you can add as many attacks as you want then. Maybe silver314 will add this into the next version...

Awesome tool by the way!!!
 

Teh Baro

In my times...!
521
Posts
17
Years
Awesome program!
It does almost everything you'd ever want a tool like it to do!
Maybe in the next version, you could add the pokemon's egg moves, pokemon it breeds too, and a picture for them. (because PokePic doesn't work on FRLG, which this does, so I can actually add pokemon like Budew, Roserade and so can others too) And also, a way to change the amount of moves each pokemon can learn... it's annoying if you are replacing the ? pokemon with new pokemon as they can only learn 1 move.

As I said, it's totally awesome!
----------
Instead of pokepic, use unlzgba and similars.
And for the ?? pokemon attacks, each attack list is a pointer to the data. YAPE would use some repointing for this.
----------
Just in case silver wants to do the egg thing, I have some info on that:

Egg Moves
These moves are learned through breeding. They are listed as follows:
[Pokémon][Attack][Attack]...[Pokémon][Attack]...
All of this in 16-bit values. The Pokémon index is increased by 4E20 (20.00010) to distinguish them from attack indices. For example, Pikachu's index is 19. That plus 4E20 equals 4E39, so Pikachu's egg move data would start with that.

Example: Geodude
This is the data for an R/S Geodude, found at offset 209366 in Ruby and 25F096 in Fire Red:
[4E6A][0005][009D][014F]
4E6A – 4E20 = 4A, which is Geodude's index. 0005 is "Mega Punch", 009D is "Rock Slide" and 014F16 is "Block". Feel free to check this with strawhat's FR/LG Pokédex on GameFaqs.
- - - - - - - - - - Source: Kawa's collected pokemon documents


And, checking myself at 25F096, I see that lists end with next pokemon's list (values > 4E20). And that only base pokemon have egg moves (next to geodude's egg moves are... next to golem is tentacool right?), so a function to repoint the whole list (each list is not pointed, the whole list is loaded each time), would be useful because the amount of evolution chains may differ.

I hope this helps (I suppose so) and encourages silver to add this feature.
 
11
Posts
16
Years
  • Seen May 18, 2008
@chaotix
[breeding]
You already can edit what a Pokémon breeds to. Sort of. The game determines this by looking up the evolution tree. There are some special cases like wobuffet and marill that do some checking beyond this, but the result is everything always breeds to the first Pokémon in the tree or the second if there is a special requirement (holding lax insence for example) to reach the first.

You have a surprising amount of control over this. If you wanted to add manaphy and phione to the game, it's pretty easy. There's a specific evolution type for this (for breeding only). You could add a "for breeding only" evolution for phione to manaphy. Now, if you breed manaphy, you will get phione, but phione will never evolve into manaphy.

[Attacks]
You can already use YAPE to add more moves to the ??? Pokémon right now. It does not place any restriction on the number of attacks learned per Pokémon. It does keep all of the learned attack data together and limits the total space used so you don't accidentally overwrite anything important. It updates all required pointers automatically.

Unfortunately, this means there's no simple way using YAPE to have these attacks spread all over the ROM with random pointers. The benefit is that by keeping all of the data in one location, YAPE automatically computes all of the necessary pointers for the attack data without you doing anything. So, for example, if you removed an attack from chimeco and added one to bulbasaur, YAPE would handle updating every single pointer between them. For the type of editing I was doing myself, this was much more convenient, but as you may be noticing, there are some drawbacks...

Perhaps some sort of hybrid model that allows both the ease of automatic pointer updating most of the time and overriding it for individual Pokémon would work.

@Teh Baro
Thanks for the info. I was wondering if anyone had found out how to edit this yet. You have a link or anything for those documents?

--Silver314
 
Last edited:

Teh Baro

In my times...!
521
Posts
17
Years
@Teh Baro
Thanks for the info. I was wondering if anyone had found out how to edit this yet. You have a link or anything for those documents?

--Silver314
Actually I don't even know if they exist online, he just sent them to me via msn. I can sent them to you if you want, just pm me your email address or something
 

Kronos1000

Fear my nonhacked Lv100 Deoxys
56
Posts
16
Years
  • Seen Apr 19, 2011
I checked out your editor, it's great! But isn't there a way to give the ?? Pokémon a Pokédex data?
 
11
Posts
16
Years
  • Seen May 18, 2008
I checked out your editor, it's great! But isn't there a way to give the ?? Pokémon a Pokédex data?

I spent a couple hours looking into this since I've had several requests for it and I'm going to have to say no for now. I expected some complications involved, but it turned out to be far more difficult than I had hoped.

Here's the issue:

The Pokédex data is stored in its own table and the Pokémon's national dex number serves as an index into this table. The table in the games only has room for 386 entries and the ?? Pokémon have national dex numbers higher than 386. In order to add more entries, the table needs to be relocated and all of the pointers in the game that refer to this table need to be updated.

I tried the relocation and pointer update, and that was pretty simple. It could even be done in an automated fashion via some sort of "Pokédex expansion" option in YAPE. Then I discovered the more difficult problems...

In addition to adding more data entries (which is possible after moving the table to make more room), the game also has a fair bit of code that accesses the dex data at various times. Most of this code has checks built in to it so that it will not work properly if the national dex number is higher than 386.

Some of the code that needs to be updated:

  • "Seen" code (adds partial data to dex when you encounter a Pokémon)
  • "Catch" code (adds full data when you catch a pokémon. This may or may not be combined with the code for when you hatch a new Pokémon or get one in a trade...)
  • "Dex rating" code (it would need to know that there are now more than 386 entries.)
  • Anything else that makes use of the dex data (I'm bound to be missing something...)

I don't know where most of the code is that needs to be updated. Even if I took the time to track it down for say, FR and LG, I would need to essentially start from scratch on R/S/E as there's no telling how different the code would be until I look into it.

I'm not saying this can't be done, it certainly could; I'm just saying that based on what I know now, I don't believe adding those extra 25 entries for all the advanced gen games is worth the effort required.

--Silver314
 

Epsilon

Shiny Scizor
249
Posts
17
Years
I spent a couple hours looking into this since I've had several requests for it and I'm going to have to say no for now. I expected some complications involved, but it turned out to be far more difficult than I had hoped.

Here's the issue:

The Pokédex data is stored in its own table and the Pokémon's national dex number serves as an index into this table. The table in the games only has room for 386 entries and the ?? Pokémon have national dex numbers higher than 386. In order to add more entries, the table needs to be relocated and all of the pointers in the game that refer to this table need to be updated.

I tried the relocation and pointer update, and that was pretty simple. It could even be done in an automated fashion via some sort of "Pokédex expansion" option in YAPE. Then I discovered the more difficult problems...

In addition to adding more data entries (which is possible after moving the table to make more room), the game also has a fair bit of code that accesses the dex data at various times. Most of this code has checks built in to it so that it will not work properly if the national dex number is higher than 386.

Some of the code that needs to be updated:

  • "Seen" code (adds partial data to dex when you encounter a Pokémon)
  • "Catch" code (adds full data when you catch a pokémon. This may or may not be combined with the code for when you hatch a new Pokémon or get one in a trade...)
  • "Dex rating" code (it would need to know that there are now more than 386 entries.)
  • Anything else that makes use of the dex data (I'm bound to be missing something...)

I don't know where most of the code is that needs to be updated. Even if I took the time to track it down for say, FR and LG, I would need to essentially start from scratch on R/S/E as there's no telling how different the code would be until I look into it.

I'm not saying this can't be done, it certainly could; I'm just saying that based on what I know now, I don't believe adding those extra 25 entries for all the advanced gen games is worth the effort required.

--Silver314

I agree,
It's just way too much effort.
But thanks for discovering all of this,
the information is very helpful!

For the hackers out here,
it can fit in to your storyline perfectly that you just can't record those
pokemon because they are from another region or something.
 

Darthatron

巨大なトロール。
1,152
Posts
18
Years
I spent a couple hours looking into this since I've had several requests for it and I'm going to have to say no for now. I expected some complications involved, but it turned out to be far more difficult than I had hoped.

Here's the issue:

The Pokédex data is stored in its own table and the Pokémon's national dex number serves as an index into this table. The table in the games only has room for 386 entries and the ?? Pokémon have national dex numbers higher than 386. In order to add more entries, the table needs to be relocated and all of the pointers in the game that refer to this table need to be updated.

I tried the relocation and pointer update, and that was pretty simple. It could even be done in an automated fashion via some sort of "Pokédex expansion" option in YAPE. Then I discovered the more difficult problems...

In addition to adding more data entries (which is possible after moving the table to make more room), the game also has a fair bit of code that accesses the dex data at various times. Most of this code has checks built in to it so that it will not work properly if the national dex number is higher than 386.

Some of the code that needs to be updated:

  • "Seen" code (adds partial data to dex when you encounter a Pokémon)
  • "Catch" code (adds full data when you catch a pokémon. This may or may not be combined with the code for when you hatch a new Pokémon or get one in a trade...)
  • "Dex rating" code (it would need to know that there are now more than 386 entries.)
  • Anything else that makes use of the dex data (I'm bound to be missing something...)

I don't know where most of the code is that needs to be updated. Even if I took the time to track it down for say, FR and LG, I would need to essentially start from scratch on R/S/E as there's no telling how different the code would be until I look into it.

I'm not saying this can't be done, it certainly could; I'm just saying that based on what I know now, I don't believe adding those extra 25 entries for all the advanced gen games is worth the effort required.

--Silver314

I could have told you it was difficult. :P People think it would be simple, but it clearly isn't. Good luck though. I hope you succeed where I failed. :)
 
11
Posts
16
Years
  • Seen May 18, 2008
Teaser Screen Shots

Just thought I'd throw out some screen shots of what I'm currently working on...

I've made it a goal to keep all of the pointer-management in YAPE as automatic as possible. This did lead to some downsides in that the total number of learned attacks and total pokédex text was limited. I had initially considered providing the ability to manually override the pointers (and lose all of the automatic update capabilites), but I think what I have now is a much better approach...

I'm adding a tool to YAPE that allows easily relocating this data. The benefits:

  • All pointer handling remains automatic, even if you need more space.
  • All of the text and learned moves stay together in the ROM. To me, this is much cleaner than scattering various pieces of the data everywhere with custom pointers.
  • It's much simpler and easier for average users who just want to add more text/moves. (At least I hope it is.)

The manual relocation is already working. Still some things to do on the automatic as well as other cleanup and safety checking... I'll be making another release once I have this and a few other minor things updated.

--Silver314
 

D-Trogh

Dead
439
Posts
18
Years
If this tool is complete (If it ever will be 100% finished, maybe you'll keep adding/fiing small things, I don't know ALL your plans ;)) this won't be 'Yet Another Pokémon Editor' :D
This will be 'YOPE' (Something like 'Your Only Pokémon Editor') ;) :D
Ok, what I mean with this.. Nice work! Really!
Oh, and I can translate if you want.. To Dutch. I just need a string 'table'
 
11
Posts
16
Years
  • Seen May 18, 2008
If this tool is complete (If it ever will be 100% finished, maybe you'll keep adding/fiing small things, I don't know ALL your plans ;))

Software is one of those things that's never really finished. But I imagine I will eventually hit a point where adding anything new is more effort than its worth. At which point I'll move on to other projects of some sort.

Oh, and I can translate if you want.. To Dutch. I just need a string 'table'

That would be great!
And you should already have all the string table you could ever want. Brief instructions below. (Anyone else considering translations should look here too.)

To add a new language to YAPE, start by making a new folder under data (there should already be "common" and "en-us" folders here.) You'll want to name it appropriately for your language. I will use the example here of making a spanish (spain) translation. You might name the new folder "esp-espana" or whatever you want.

Under the new folder you will need a commonvals.ini file and a strings.ini file. See the examples in data\en-us. (I would just copy the English ones there and then edit the copies.)

Once you have these files in place, you can add an entry for the new language to the data\common\lang.ini file. Continuing with the example of Spanish, you might enter:

[ESP-ESPANA]
Name = Español
CommonVals = data\esp-espana\commonvals.ini
Strings = data\esp-espana\strings.ini
Help = data\esp-espana\yape-ayuda.chm

Once you have the new entry in data\common\lang.ini you can start testing it immediately. The new language should show up as an option in the Language selection on YAPE.

The only other thing you might want to translate is the help file. You would need HTML Help workshop to make this. (It's free from microsoft's website.) I do realize that this is much more work than just replacing the text in the *.ini files though...

--Silver314

P.S.
Don't forget to give yourself credit for the translation! Put something in for the "TranslationBy = " line in strings.ini. The recommended form is "xxx translation by yyy - (optional date/version/etc.)" Of course, you would write that in your language rather than English ;-)
 
Last edited:
3
Posts
15
Years
  • Seen Jul 5, 2008
great work
for the graphics editor you talked about please!! could you add in a easy way to edit menu styles, battles styles, the title screen and maybe the suitcase with pokeballs you get ruby
 
11
Posts
16
Years
  • Seen May 18, 2008
great work
for the graphics editor you talked about please!! could you add in a easy way to edit menu styles, battles styles, the title screen and maybe the suitcase with pokeballs you get ruby

Sorry, but I'm going to have to say no for that one.

A few reasons:

  • Any sort of graphics editing at all is a long way off (and I may not even add any such support)
  • If I do decide to add graphics editing, it would only be for the Pokémon sprites used in battle/pokédex and the icons they have in the menu. YAPE is not really intended to be a generic catch-all editor for everything in the game. It's just for editing the Pokémon's stats, evolutions, dex entries, learned moves, etc. I have already decided to split some previously planned features (attack editor, item editor, etc.) to separate tools since they don't really fall in the scope of YAPE.
  • Things like title screen, menu styles, etc. would best be edited by either a generic graphics editor (tile editor/unlz) or a specific tool just for that purpose, like a title screen changer.
--Silver314
 
Back
Top