How We Recreated All GEN3 Pokémon Distributions

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
Pokemon distributions are a very common thing in the Pokemon franchise nowadays they are mostly distributed over Wi-Fi or a code but back in the day you had to bring your game to the place where the distribution was held and received a Pokemon like that the Pokemon you get from these events are usually special in some way sometimes they are legendary or mythical Pokemon and other times they are Pokemon that have a special move but what's unfortunate is that these event Pokemon are only available for a short period of time so if you simply miss the event you can never get them again until today my friend on that reality and I have once again set out to recreate all these Pokemon distributions that were held around the world a few of these distribution ROMs and many of these event Pokemon have been preserved and even have a generation method reversed so with all that information we decided to recreate all these distributions for the GBA games let's get started let's first take a look at the ROMs that were preserved in total there are four of them you dual Deoxys berryfix hexagon and the top 10 Pokemon distribution to use these ROMs you need an English copy of one of the Gen 3 games a flash card to put the distribution Ram onto and a Link cable for the GBA when connecting the Link cable we need to make sure that the smaller purple side goes into the GBA with a distribution ROM otherwise it is not possible to send over the multi-boot the next step is to boot the GBA with the Gen 3 game in multi-boot mode to do that you need to hold the start and select button when booting up and this will make the Nintendo logo disappear and with that it is now possible to send over the distributions Aura and dual will start the process automatically when the other game boy is in multi-boot mode with very effective we have to send it over manually by pressing the a button and with top 10 we can choose what Pokemon we want to distribute out of these very fixed zixagon is a bit of an outlier here it is visually very different from the rest and has the capability of updating Ruby and Sapphire to fix the berry glitch all other distributions looks to be based of the same multi-boot so we will use one of them as a base going forward our meal was the first one we started working on so we decided to work from that as a base and in the end this was one of the best ones to use but we'll talk more about that later now at this point you might think what the heck is a multi-boot well a multi-boot is a different way of loading a game into a gba but it is loaded over the Link cable instead of the cartridge this is also how multiplayer works with only one cartridge but it can also be used for Pokemon distributions the multi-boot still has access to the save file when the cartridge is inserted so it reads out the save file writes the Pokemon to it and finishes the distribution now that we have a basic understanding of how these four distributions work let's try to modify something [Music] um we will need to know a bit more about these bikes to get started as you may remember from the mystery gift video These bytes represent machine code that can be converted into assembly this will make it all more readable and easier to modify for us we won't go into detail again about the conversion process but instead let's dive right back into trying to modify something what we want to modify is the multi-boot inside the ROM but we will first have to find it we know that the multiple descent over the Link cable so by cross referencing the bytes sent over the Link cable and the bytes in the ROM we can find the multi-boot that is sent over when we extract this and convert it all to assembly again we only get a little bit of code out of it most of this code is confirming back to the ROM that the multi-boot was transferred over successfully but at the end however there's something interesting there's a software interrupt function these can be used to access system call functions inside the system ROM of the GBA the parameter here shows what function we're calling and 11 in this case means decompressing compressed data so if we want to make any changes to the distribution we have to decompress the data ourselves first from the first few bytes of the compressed data we can see what compression method is used and how many bytes the uncompressed data is in total with that information we can decompress the distribution and finally have the code that we want to modify now that we have the code let's take a little step back and make a list of all the distributions that we want to recreate we can sort them all into three different categories English Japanese and GameCube distributions we will first focus on the English distributions four of them have already been preserved so that still leaves 8 distributions left to recreate but for now we will skip mystery Mew and PC and Y because they were distributed very differently so we'll come back to those later in the video right now our first Recreation will be the 10th anniversary Celebi distribution let's go back to our decompress code now and try to recreate this we're gonna start to try and modify something easy the name of the Pokemon using the character tables from the Gen 3 games we found the name of mu in the distribution and change it up a little now let's try it out and see if it works oh it doesn't so instead of our boy Wham we got a cool error 5 message saying that the game couldn't receive the Pokemon properly so for some reason after changing only a little bit it refuses to send over the Pokemon now at this point it is likely to assume that there is a Jackson over the entire multi-boot and here I thought we did most things already so how will we find this Jackson well when scrolling through the ROM I found lots of text that is used in the multi-boot this includes the error codes we can now follow this pointer of the text and make our way back to the code of the Jackson when analyzing the checksum code we can figure out how it all works all of the bytes in the ROM are added together and then checked if it matches the pre-calculated value that is already in a multi-boot if it matches it continues the distribution but if not you are greeted with this fun error 5 code so if we want to make it work we have to update the expected Jackson after changing the code and this then allows us to make modifications to the distribution now that we have successfully transferred over our boy web we can continue finding other values that we need to change for our Celebi event and after some trial and error we mapped out almost everything but that also brings us to our first issue Mew here only has two moves and the Celebi we want to recreate has four we can add more moves but if we do we start to override the name of the Pokemon luckily for us this little Pokemon structure here has a separate pointer towards the name that makes it easy to modify for us allowing us to now create a Pokemon with four moves at this point you might think that we're done but there's one more issue left for us to solve every meal needs to have the obedient flag set but for Celebi and every other Pokemon it needs to be disabled there's absolutely no indication of it being in our little Pokemon structure that we found so how's this variable set well something that became clear as we worked on The Moldy boots is that the distribution has a lot of code that is also in the game itself one of these things is how the different parameters of the Pokemon are set you see each parameter has its own index and this means that the obedience flag has its own index as well by searching for this index we found where the flag was set and we could disable it allowing us to recreate the Celebi event fully well almost to really make it perfect we have to find a way to swap out the Sprite of the Pokemon as you may remember the graphics are made out of little 8x8 cubes and each Cube has a total of 64 pixels but you only need 32 bytes to create a cube this is because the graphic works with a palette with a maximum of 16 colors each four bits of the graphic then represents an index of that palette this all combined is enough information to insert a new graphic into the multi-boot the problem is however that we didn't have that information while working on it which resulted in some pretty interesting results with the new graphics in the multi-boot we have now created the perfect Recreation of the 10th anniversary Celebi event next up is space center Deoxys after Celebi this was very easy to recreate but one thing we have to keep into account is the experience the experience of the Pokemon is set based on the level and the experience group that we're into in total there are six different experience groups for celery we could just reuse Muse experience group because they share the same one but if you want to recreate the access we have to choose the slow experience group The distribution has a lookup table for all experienced groups for each level so we just have to make sure that we set the correct group and level and it will set the experience accordingly next up are the top 20 events it's very similar to top 10 even sharing some of those Pokemon with only a few minor differences the recreation of this Pokemon went again very smoothly except for one Alakazam can have two different abilities and at first we only got one ability out of it making 50 of the ones we got illegal so we decided to find the code where the ability is supposed to be set and found the flag that we can enable for the Pokemon that have two abilities it will then use the first bit of the personality value to choose the ability that it will get and this will now make all alakazams legal close now to now to fishing all the English events next up is roxmatang there were two big differences from rocks matang and the others one is that the gender of the original trainer can only be mil and the other thing is that it needs to get the national ribbon giving it only the mil trainer wasn't that difficult to figure out normally it uses a randomized function to randomly give out the gender of the original trainer but from a tank we simply have to turn it off just like how we did with the obedience flag earlier next is the national ribbon we decided to reuse The Obedience flag remember each parameter has a specific index so what we need to do is re-enable the code for the obedience flag and change the index for it to be the national ribbon and by doing that it will give us a perfect Recreation of roxmatan lastly for now on the English list we have wishmaker Jirachi there are once again two difficulties with this distribution one is that it randomly either holds the salakberry or the gallon Berry the other is that this Pokemon has the ability to be shiny all the other distributions so far had code that prevents them from being shiny so we need to find this anti-shiny coat and disable it let's start with that the shininess of a Pokemon is determined by the trainer ID and the personality value of the Pokemon the trainer ID doesn't change so normally it generates a personality value and checks if the Pokemon is shiny or not if it is shiny it will generate a new value until it is not shiny for our giraji we simply have to disable this Jack at the end and just let it use the first personality value that it generates next up is the berry we need to add coat to randomly give a berry to jiraji the event in the past used the specific generation method for this and to Faithfully recreate this we have to add some custom code we first have to create some space to add the custom code to do this we deleted the other languages error codes that asked to insert that language game we then use the place where we disable The Obedience flag to jump towards the empty spot that we now created now we can add our custom code here the first thing we have to do is make two RNG calls the event Pokemon are all generated in a specific way and this tiraji uses the sixth call to generate the item if we look at this formula then we have to take this RNG call and divide it by three then the first bit of that result determines which bear you'll get if it is zero then you get a select Berry and if it's one you get the ganlinberry and lastly we give this item to the Pokemon and return to our normal code when we now distribute the Raji we made we see that it comes with a barrier from our custom code and with that we finished all the English distributions that we wanted to work on I want to thank you all for watching and I'll see you in the next one I'm kidding this is not the end we did mention that we would do all distributions let's continue to the Japanese distributions we now recreated all the easy English distributions we were already really happy with our results but we quickly realized we want to recreate all of them so now let's start working on the Japanese ones the first step is transforming the ROM to accept the Japanese games and add correct translations for all the messages my friend on that reality will tell you more about the process of this the easiest part was enabling the aura software to accept the Japanese games in total there was four different game checks one for Ruby and Sapphire one for Emerald one for fire red and one for leaf green the first thing we had to do is swap out all the support game codes with the Japanese game codes doing so enables the software to detect the Japanese games only from there we deleted the Spanish French German and Italian messages from the ROM once that's done we have a Japanese only distribution ROM except we still need to change the English messages to Japanese this is where it gets tricky when we first started we didn't know where the symbols were or how to access them so I took a huge chunk of text and brute forced results by sequentially ordering the hex codes until they started to appear great they're still in the software however there's still one more character we're looking for we could have changed the messages of course however through pictures and videos that were preserved on the internet we can clearly see that this character was included in the text if it's not in the software how do we access it we have to make it we initially thought that we could just Implement our own custom character and call it a day however we suddenly noticed it would become distorted enlarged cropped out or non-existent in some instances this is because each character has to fit within a specified size anything under the size limit is fine but anything too big will cause an issue after a lot of revisions we agreed on the final version of the kanji I'm personally proud how it turned out finally we have all the resources needed to implement the Japanese messages after looking through software like the Japanese nekaibosujirachi multi-boot and Consulting a few people who speak Japanese we were able to make translations for all the messages in the software with that our conversion from a multi-language distribution ROM to a Japanese only ROM is complete back to you got beer it's about time now we tackle these Japanese distributions as you can see there are so so many of them that means that we will not go over each and every single one of them most of them are just doing what we did before so instead we will now focus on the ones that were the most difficult starting now with one that was arguably the hardest to recreate it took over 100 different tries to finally get it to work the hardest Pokemon to recreate was Poke Park me out and Pokemon Sunday Wobbuffet so at this point you might think why are these difficult well these Pokemon need to hold mill and just giving the item isn't gonna cut it to understand why these are difficult we have to talk a little bit more about how Mill works the male has two different components to it that are stored in separate places these are the item and the contents of the mill the item is simply given to the Pokemon and is part of the Pokemon structure but the contents of the mill is placed in its own section in the save file two components are then linked together by the use of an index which is once again part of the Pokemon structure so if we want to make it work we have to read out a separate part of the save file where the mail is stored then find an index where we can write the contents of the mill towards and lastly give the correct index and item to the Pokemon these last two things aren't that difficult and are things we've already been doing with the previous Pokemon like giving the berry to jiraji the reading and writing to the save file is far beyond anything we've done so far so let's first do a bit more research about the save file and where the mill is exactly stored we found that the save file is split into 14 different sections and the mill we're looking for is in section number four luckily for us there's also a function in the multi-boot that allows us to read out a certain slot of the save file but the bad news is is that section number four is not always in slot 4. something we learned when researching the save file is that it rotates every time we save the game besides that there are two versions of the save file which the game also alternates between every safe this is to have a backup in case something goes wrong so what we now have to do is find section 4 in each save file and use the latest version of it now let's take a look at the code that we made we first looked through all the sections of the save file to find the latest version of sector number four each sector also has a save index so this will help us to find which of the two is the latest version once we found the correct one we make a copy of it that we can later modify next up is finding a spot to write the mail towards and total there are 15 slots for the mill but we only have to look at the first six because those are reserved for the Pokemon in your party at the first possible anti-index we write our mail here and afterwards calculate a new Jackson for the safe sector and lastly we give the correct item and index of the mill to the Pokemon and write the save sector back to the save file explaining it like this might sound like it wasn't that hard but writing all of it in assembly and debugging every part of the code took a lot of time to debug our code we use the item slot of the Pokemon like this we knew for example that we actually got the correct sector or the latest save file or if we could accurately find the correct slot to place our mail into all of these different steps were very difficult to get it to work and it is so amazing to finally have these two Pokemon in my games I could honestly talk for a very long time about the creation process of this Pokemon but we will be here for a very long time if we do so let's move on to the next event next up are the acts that were released in Japan through multi-boot there were a couple but we're only gonna talk about one of them and that is the Pokemon Center 5th anniversary event there are four Pokemon you can get from this event B2 ralt Apso and Bagon this Pokemon get a special move when they hatch and Pichu even has a 5 chance of being shiny as you can already Imagine This this multi-boot distributes more than one Pokemon so how does this work well let's go over the generation method of this the first thing that is determined is what Pokemon will be distributed each Pokemon has a set weight and all the weights added together gets us to 1000. to then get a random Pokemon we generate a random value between 0 and 1000 and keep subtracting the weights until it is no longer possible the end result is that the Pokemon that will be distributed now there are two paths that we can go down on one is to generate a Pokemon like normal and the other one is to force Pichu to be shiny another thing we have to keep into consideration is that the normal Pokemon cannot be shiny so we have to add anti-shiny code as well for both of these things we need the trainer ID from the game that we send the distribution towards because remember these are X and will eventually get your trainer ID when they hatch so what we now have to do is read out a save file again and get the trainer ID from this but after our adventure with the mill it wasn't that hard to get it the only hard thing now is to add code to force beat you to be shiny and this also has a specific method of course for all the other Pokemon we use RNG called 3 and 4 for the personality value but for our shiny P2 we need to use 4 and 5 for some reason it is then forced shiny by changing the lower 16 bits of the personality value after all that we simply put the Pokemon in an egg and set all the other variables that need to be set for this we made our own little structure for each Pokemon that contain all the variables that are needed to create them and with that it's time to move on to Bear effect Zigzagoon and at this point you might think wasn't this one preserved and you'd be right the English one was preserved but the Japanese one isn't so let's make it was originally generated was based on the RTC and the games the seconds minutes and hours were added together to create a random seed for zixagon because of this there are only 214 unique sexy goons that you could get for our Recreation we won't use the RTC we will simply take the sea that normally generates and use a modular operation on it to get a valid seed from it with this method it is now possible to distribute the zigzagoot to all games regardless of if the battery works or not lastly we need to make sure that it is always shiny this works the exact same as the shiny Pichu from a while ago so we can copy our code from that and Faithfully recreate this event in our meal ROM now we have recreated the Japanese version in this way we decided to recreate the English hexagon as well like this it will be a lot more easily accessible and for the sake of having everything made from our meal we also recreated to preserve top 10 and dual Deoxys distribution in the same way now everything is made from Aura mu let's go back to the Japanese distributions as you can see there's still one left but we'll come back here at the end of the video to talk about them first we're going to take a look at the last category that we have the GameCube distributions these are the Pokemon you could get from the bonus disc from Pokemon Coliseum Ax from Pokemon box or jiraji from Pokemon Channel not everyone has these bonus discs so it's nice to recreate them as well there are two major things different from this Pokemon firstly the RNG formula for the GameCube Pokemon is a little bit different we had to change it with the correct values the other thing about these Pokemon is that they have a 32-bit seat instead of a 60-bit one like the others to recreate this we took the original seat it normally generates and combine it with a random Jackson from the save file like this we were able to recreate all the GameCube distributions except for giraji from Pokemon Channel this one was generated completely different using a total of 12 RNG calls and only a limited amount of seeds that were possible for it we didn't Implement The Limited seating yet because I wanted to do a bit more research on the GameCube side of things so this might get a little update in the future we have now gone through all three categories that we mentioned at the beginning of the video but as you remember there are still a few that we haven't discussed yet let's start with the first one on the list mystery mule mystery mule was not distributed through a multi-boot but instead there were lots of meal generated on a fire red cartridge and were then traded to people who would come to the event an original cartridge was preserved and that's how they figured out how these meals were generated they were generated into the party in batches of five and were then placed into the box until the game was completely filled up with Muse but that brings us to a problem there are 426 slots in the games and if they were generated in Bachelor 5 that means that 4 of them were released in order to fill up the entire game with Muse so now the question is is it possible for us to find these four deserters and include them in our own distribution well let's take a look at how the batch of five are generated every batch of 5 has an origin seat which is a 16-bit number from this origin seat where then five meals sequentially generated in total there were 85 origin seats preserved and with those we can generate all the Muse except for one so if we now find the origin seat for this meal then we can recreate the other four as well to do this I went through all 65 536 possible origin seats and found that only one origin seed is possible to generate this last meal and that is seed 6065 in hexadecimal this last meal would have been the third in the batch and now we've also found the other four that were part of it as well these four were never possible to be obtained because they were released from the game but we're still adding them into our multi-boot event preserving all 430 meals that were generated for this event next up are the events that were held at the Pokemon Center in New York these Pokemon were distributed from the gotta catch em all stations that were available there and in total there were 12 different distributions from them luckily one of these stations was acquired by someone in the event community and lots of these Pokemon were recreated and put into staves that can be downloaded in the future it will be fun to recreate the device and make copies that are close to the original but for now we will recreate the event to the best of our abilities with our our meal multi-boot let's first talk about the generation method of this Pokemon it is a little different from all the other distributions and that is done to prevent shiny Pokemon another thing was that the trainer ID was incremented by each distribution that was made by the device so the first Pokemon distributed from the campaign would have trainer id1 and the next one would have two and it keeps going like that it is technically possible to implement this tool but for now we decided to randomize this instead well excuse excuse me are you saying we're doing something unfaithful to the original event we promised our viewers faithful Recreations that we will not settle for anything less alright alright let's do this as well first of all we would need a counter of how many distributions have been made so far luckily for us there's one right here on the screen next up we would need to give this value to the multi-boot before it is transferred to the game the way we did this was to copy the entire multi-boot to our internal memory so we can make modifications to it we then inserted our value right before the compressed distribution and in the distribution itself we now simply read from this address to get the correct trainer ID and with that we now have an incrementing trainer ID with each distribution lastly we have to distribute each Pokemon from a campaign from one multi-boot so to do this we added extra randomization to select the Pokemon from each campaign and for the Sprite we decided to use a question mark because it'll be a surprise which one you will get the last one on the English list is the trade and battle Bay Event also known as Jeremy now Jeremy is a bit of a weird event in both fire red and LeafGreen a combined total of 12 Pokemon were caught in the wild these were then cloned and distributed to the players that came to the event all of these Pokemon have been preserved except for santro Slowpoke and shelter we decided to do some digging and find some information about these last few Pokemon and we did find what are supposed to be the IVs level and personality value of these last three missing Pokemon but unfortunately not everything matches up now the good news is is that these Pokemon are technically possible to be generated like this but only if the person who got these use the Pokemon with the ability synchronized in front the thing that's odd about that is that these three were the only ones that were caught like that another thing is that the preserved Slowpoke has the wrong ability if it was generated in this setting then it should have the ability to own Tempo instead of oblivious so in short I need your help we want to find more samples of the Jeremy Pokemon if any of you have these Pokemon even if you send them all the way to Pokemon home then please contact us either through leaving a comment on the video or joining our Discord we would love to preserve all these Pokemon and make sure they are exactly like the original for now we will include the ones that we found online in our distribution but if we find better samples in the future then we will update them now it's time for the last event for today the Huddle Titans they were distributed in Japan during the screenings of Lucario and the Mystery of Mew a few samples were found and preserved but there's still one thing that is unknown about it with all the other distributions so far there have been three different randomizations for the gender of the original trainer but none of these formulas fit for these preserved samples now there are two options here I think option one is that the trainer ID wasn't decided randomly but instead it copies the gender from your save file the second option is that some of these preserved samples are fake and that's why some of them don't fit into any of the known randomizations and we have secret option number three and that is an entirely new randomization used for this Pokemon I decided to look into secret option number three and I made some code that will cycle through all the bitshift and the Visions possible and found one solution that fits all samples a division by 3264 or cc0 and hexadecimal then the first bit of that result matches the gender of the original trainer for all the samples now I do have to say that it seems unlikely to me that they use this randomization for a distribution but nobody can prove me wrong except for you if you happen to have one of these Titans or know someone that might have one then please contact us and let's work together to preserve the generation method for this Pokemon and with that we have recreated all the distributions to the best of our ability it was so much fun to modify the hour distribution ROM and make custom code for it to recreate all these Pokemon I want to thank the people that are named on screen for helping us along the way and to once again thank my friend on that reality you've worked really hard to test all the distributions and make sure that the Pokemon are as close to the original as possible we've been working on this project for many many months and it feels amazing to finally have finished it thank you all so much for watching and I'll see you in the next one [Music] thank you [Music]
Info
Channel: Goppier
Views: 198,310
Rating: undefined out of 5
Keywords:
Id: NKBb-YS34wg
Channel Id: undefined
Length: 29min 48sec (1788 seconds)
Published: Sun Mar 26 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.