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.

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 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.

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.

@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?

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.

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.

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. :)

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.

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'

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.

Quote:

Originally Posted by D-Trogh

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:

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 ;-)

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.

Currently learning a bit about api calls,
Going to try and create a application that has the ability to read information from YAPE,
And store all the information into a file/database.

But since i never really worked with api's like thats its quite some learning/testing/taking alot of time :D.
But i seem to have the basics if i ever finish it since i'm quite tired atm.
I will ofcourse if the application is at least normal useable release the application/
Or if its quite uhm well half working with testing and messing :p.
I will release the result of it so a db/file with all the information.
I probably if i finish this will store it into a sql file.

edit:
No progress its no 20:29 still havent slept so no wonder right :p.
But uhm i was checking on what YAPE changes but it seems even if i only change the hp of 1 pokemon whole chuncks of code gets altert :/,
Whats up with that is i may ask ?
Ah and i'm checking using hex compare. a function inside Hex Workshop.

Sorry for the lack of activity here. Been really busy with other things lately. I'll probably have a bit more time in another week or two, so I should be able to make some more progress on YAPE.

Text export is a reasonable request and one I had considered anyway. I'll add it to my list...

Quote:

Originally Posted by ThuGie

Well currently its here 11:39 am in holland,
Still havent slept yet.

Currently learning a bit about api calls,
Going to try and create a application that has the ability to read information from YAPE,
And store all the information into a file/database.

But since i never really worked with api's like thats its quite some learning/testing/taking alot of time :D.
But i seem to have the basics if i ever finish it since i'm quite tired atm.
I will ofcourse if the application is at least normal useable release the application/
Or if its quite uhm well half working with testing and messing :p.
I will release the result of it so a db/file with all the information.
I probably if i finish this will store it into a sql file.

I'm not sure how you're reading info from YAPE, but I should warn you that some of the UI may change. Also, if you're using reflection to pull data from it, I could change the internal code and you might have some breaks then. The safest way to handle this would be for us to have a well-defined text format for exporting data from YAPE and then you can write a tool to pull that into whatever DB you want. If you're interested in defining the format, then that's fine. Otherwise I will probably make one up when I get the chance.

Quote:

Originally Posted by ThuGie

No progress its no 20:29 still havent slept so no wonder right :p.
But uhm i was checking on what YAPE changes but it seems even if i only change the hp of 1 pokemon whole chuncks of code gets altert :/,
Whats up with that is i may ask ?
Ah and i'm checking using hex compare. a function inside Hex Workshop.

The additional change you are seeing is probably normal. YAPE doesn't specifically track what was edited, it just saves all data every time you do a save. The things that are likely to change are:

the pokedex text/pointers (mainly in leaf green, as YAPE compacts all the entries and lg has some empty space in its dex text area)

The order of evolution data. (Evolution data is sorted internally in YAPE. When it writes the data back, it puts it in the sorted order rather than original order.)

There should not be any functional change aside from what you modify. If you find any, let me know and I will look into it.

Along of these lines would probably be best since about everybody knows how to read ini information,
And its pretty easy to write a parser for it,
If its made in ini format i probably write the parser in php.

As for the hex info thank you then now i know why so much data was changed,
I was actually trying to lookup where everything is stored so i could create my own tool and add it directly into a database.
I already checked the forum but only minimal information is public.

And as i'm quite new to gba editing/reading. i'm not quite sure on how to figure out where its stored at.

But i hope you add the new feature of saving it to a file that would be great!
Ofcourse i hope you not only add a posibilty to save 1 pokemon at a time but also to loop and save all pokemon information to 1 ini.

The ???? pokemon well i guess a option to save those or not would be best.

The PokéCommunity

Meta

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, or The Pokémon Company International. We just love Pokémon.