![]() |
Quote:
|
Quote:
|
Oh well, I ran into quite a few problems, first of all I'm trying to port this to emerald, so I guess that's just one reason why I have so many issues, anyways I thought you might be able to help me out(Since I can't directly contact the autor :T)
I repointed everything until I reached the Pokédex and allocated enough memory, I also relocated some globalVars which the dex is apparently using which would otherwise conflict with the new pkmn data, now after deoxys I have a few strange random entries, those are mainly unknowns(I mean entry 0); Those go up to 412, and then my entries start. I also don't know how exactly the ordering table works(Seriously, this thing confuses me); Here are the revelant entries of my list, I tried a few things so this might be far from correct, maybe you can help me out: 66 01 (Last entry in normal Dex) BE 05 BF 05 C0 05 C1 05 C2 05 C3 05 C4 05 C5 05 C6 05 C7 05 C8 05 C9 05 CA 05 CB 05 CC 05 CD 05 CE 05 CF 05 D0 05 D1 05 D2 05 D3 05 D4 05 D5 05 D6 05 D7 05 D8 05 D9 05(With those I tried to skip the strange thingies in my dex) B9 01 BA 01 BB 01 BC 01 BD 01 BE 01 BF 01 C0 01 C1 01 (My new entries beginning with 441d) I don't know whats wrong, maybe its just that emerald has a completely different structure, that's what I noticed when reallocating the memory at least. Thanks in advance! ~SBird |
Quote:
|
Can you make an version of this Tutorial for Pokemon RSE?
|
Quote:
It just enough to find the different offsets. After the question is whether one can easily adapt the JPAN Save Block on Emerald because there the RAMs these two versions are not very similar. Tomorrow, if I have time, maybe I will find offset the Emerald and the "JPAN Save Block Emerald". EDIT : Oh, and I've forget the small changes by ASM. |
Quote:
It will require some extreme research, since RS and Em are in NO way the same |
I'm just curious, would porting this to Emerald be easier or harder, assuming you did the same amount of research? The pokedex for Firered was different after all, with habitats and everything, whereas Emerald was just a straight list of Pokemon.
|
Quote:
Then you'd have to research the dex, because its loading and storing is most likely 100% different from Fire Red's. Ruby would just take years because it's so unorganized. |
I just want to add that this took months to accomplish even with years of research to start on. So take that and go into an almost completely unresearched rom (in this area at least) and it will take a while, a long while.
|
Quote:
|
Quote:
|
In fact, I've never worked on Ruby or Sapphire, but I was convinced that the construction of the game had great common with Emerald. Excuse me x).
|
Okay okay okay, I state this again: I did most of the research for emerald, I am also willing to post the data for it, actually I already posted my ported version of JPANs Save Block Recycle Hack somewhere in RD, for the german version of emerald I guess, it can be ported easily. I also repointed all of the required tables, for emerald you have to do some additional work, which would be: The second sprite table, containing all of the animated sprites(I don't know if the other one is even used, since there is only one pointer to it it could very well be deadcode); And the sprite animation table(The movements pokémon do when they are summoned) You can find the information in a common editors ini file or research them yourself. Also, there are several versions of malloc and free, whereas we are only interested in malloc. In emerald they use a version of it which instantly cleans up the memory space it provides you. It is locaded at: 0x08000b4c, I guess this is global for all of the roms, since those header adresses are compiled instantly. There is also an ldr instruction which is allocating the memory for emerald: 0x080BB65A (BPED, german), however afterwards follow a few routines which load global pokédex variables in a form of "ldr malloced_base + 0x6XX" and if you have too many Pokémon you will overwrite those and run into severe problems. Therefore you have to relocate them, as for me I wrote a quick tool to do that, just search for 4-aligned words in an area which I guess contains all of the routines and adding a static value to them. That for the memory in emerald...
There is also a very similar limiting thingie in emerald, a simple bhi instruction you can just bypass with 0x0000; It was posted for BPEE somewhere already, for BPED its 0x0806D430. Now for the interesting part, I have no clue what to do about the amount of pokémon that is loaded into the dex, there is something at 0x080BC94A, which loads a global variable onto the stack, using mov and lsl, if you do change that it will load more pokémon, you also have to change some statics like in Firered, but I don't know exactly which ones and as I said above between Deoxys and 412d there is weird data loaded into my dex... Thats the problem I am facing currently, concerning emerald, the rest can be done "fairly" easily. Did someone look at my national order table and can tell me if it's correct or how it has to look like? I am kind of sure this is not the problem, but anyways, it is somehow strange, you know. ~SBird Edit: The save block thingie: http://www.pokecommunity.com/showthread.php?t=306202 You can probably easily port it to BPEE, but you want to use different adresses, I recommend 0x0203d000 ff; Also if we discuss on emerald for longer(which I would be interested in, should'nt we go to RD? Just asking. |
Quote:
If you guys do manage to pull this off, I promise that I will code it. |
Quote:
Aside from that typo, you'd have to test the JPAN save block hack on real hardware. I have a DSTWO, so maybe I can try it out for you. |
Quote:
When we say real hardware, specifically it is using a BIOS file, not actually hard, pushable buttons.:P |
Quote:
|
Quote:
I believe Jambo51 once said that Emerald's Pokédex is just as messed up as Ruby/Sapphire's, in the sense that it doesn't use the malloc system and that the pointers are hard coded and near-impossible to find. Jambo51 has tried expanding Ruby's Pokédex and he has stated that it is pretty much impossible because of how messy the coding is. Not trying to be a party-pooper, as I would love to hack Ruby/Emerald as I have in the past, simply because I just like it more. |
@Chaos Rush: Party hard:
Spoiler:
Emerald does use malloc, the thing is just that the global variables are linked in the form of "BASE_ADRESS + X" meaning you have to find A LOT of those and some are hard-hard-coded (or something^^) meaning that the compiler did not export the exact adress but only a mov-lsl instruction, which is good for saving space and bad for romhackers. So yeah, it is possible, it is just some work but I am not willing to give up (by now) ~SBird |
Quote:
|
@Karatekid: Thats about what I did, what I did not so far is checking if those were the right ones, probably I am replacing a bit too much at the moment hehe... Also there are some I can't find just that way, because the offsets are even enough for the compiler to insert them via. mov/lsl. I guess I found all of them, because my dex is now working just fine, and I'll let you guys know if it really worked after some testing. If someone wants to do the same thing here is what I did so far:
-Repoint the national order table and moved the 25 slots between jotho and hoeen backwards, filling in 00 00 after the hoeen dex and creating the order for my new mons. -Allocate 0x2000 bytes for the pokédex(You can probably do less) -Kill the limiter which loads the dex data -Add 0x700 to every 0x000006XX word I could find in the area that I think is the pokédex routines. -Add 1 to each lsl rd, rm, #X instruction that I found out is responsible for the dex's global variables. I checked those with a debugger, so they are definitely it and I don't think there are more, since the dex is working just fine now., As ofr the 6XX stuff I wrote a quick program to do it, as karatekid already said. This was definitely easier, but I don't know if the stuff I changed really only affects the dex, and nothing else. I definitely chose a big area(0xbB6dc - 0xf0000) So yeah, to conclude: Emerald is a lot harder, but it's not impossible! ~SBird |
Quote:
Also, I would make a list of changes (I'm sure you already did) and go through them slowly. You never want to replace too much. Check the surrounding areas for anything Pokedex related and then keep working. There shouldn't be more than about 10 changes (even that is a stretch) so yeah. Edit: I just had a great idea! Keep a public Google doc and link to it here, so that we can follow your progress and then help you. don't allow the world to edit, just comment. |
Hate to bump but here are some glitches I have noticed...
When you received an extended mon from a trade (eg Arceus for Giratina) then when you receive Giratina it has Arceus' (what's the plural form? haha) palette. Also when I catch a wild Buizel, ONLY on the screen it displays say Ratatta, it then registers Buizel in the Pokedex and Ratatta does not get registered. It really doesn't bother me... just wondering if others experience this? |
Quote:
|
| All times are GMT -8. The time now is 8:12 PM. |
![]()
© 2002 - 2018 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 - 2016 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.
Acknowledgements
Use of PokéCommunity Assets
vB Optimise by DragonByte Technologies Ltd © 2023.