isleep2late
Member-
Posts
34 -
Joined
-
Last visited
-
Days Won
2
isleep2late last won the day on March 13
isleep2late had the most liked content!
Reputation
26 ExcellentAbout isleep2late
- Birthday 06/24/1992
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
-
Hello everyone! So full disclosure - I've spent many years trying to figure out how to crack the Gen 7 code, and with our current age of technology it was made possible. I was able to reverse engineer a lot of the USUM battle engine with heavy use of an AI assistant for some of the grunt work, including decompiling, scanning the save-state RAM, and cross-checking. I drove the project, supplied the save states, and verified every step in-game myself. What I've outlined here is reproducible, so you don't have to take my word for any of it. This post is for research purposes. So my goal was to Gen 6 Prankster behavior in Ultra Sun / Ultra Moon - status moves from a Prankster user can once again affect Dark-types (no more "It doesn't affect…"). Tested and working. --- The fix (if you just want it) In `Battle.cro` (from the RomFS), change one byte: Offset: 0x24B14 Before: D1 FF FF 0A After: D1 FF FF EA (Only the last byte changes: 0x24B17, 0A → EA.) That's it. This flips a conditional branch to an unconditional one so the engine stops failing Prankster-boosted status moves against Dark-types. It does not touch any other immunity (powder/Grass, trapping/Ghost, type-chart immunities all still work). Installing it — two options: LayeredFS (easy, no repacking): put the patched `Battle.cro` at `%APPDATA%\Azahar\load\mods\00040000001B5100\romfs\Battle.cro`, fully quit and relaunch Azahar. Repack the CIA: splice the patched `Battle.cro` back in and rebuild the RomFS IVFC hash tree + the NCCH romfs hash (signatures can stay broken; Azahar/Citra accept that). Big gotcha: test on a fresh battle after a clean boot, NOT by loading a save state. A save state is a snapshot of RAM that still contains the old unpatched code, so it'll always show the old behavior no matter how you patch the files. --- How it was found (short version) Gen 7 added: a Prankster-boosted status move that hits a Dark-type fails. I wanted that gone on the actual game, not just on a Showdown server. The hard part: the check isn't a simple `if (ability == Prankster)`. USUM's battle engine (`Battle.cro`) is a Showdown-style event-dispatch system, and its handler tables are filled in by the loader at runtime meaning they're blank in the file on disk. So static analysis in Ghidra just saw zeros where the logic should be. That blocked progress for a long time (and produced several "patches" that did nothing - including one that accidentally targeted the text formatter, because `158`/Prankster also shows up as a text token). What cracked it: a Citra/Azahar save state. A `.cst` is a zstd-compressed snapshot of console RAM - decompress it and you get ~302 MB with all the runtime relocations already applied. From a save state of Prankster Shuckle vs. Dark Tyranitar, I could: - read the real, populated dispatch tables for the first time; - find the actual battlers in memory and diff their type fields - that pinned the type cache at `battler+0x1E4/5/6`, with Dark = `0x10` (Tyranitar showed `05 10 12` = Rock/Dark/none; Shuckle showed `06 05 12` = Bug/Rock/none); - locate the engine's `hasType()` function and find the single place in the whole binary that calls `hasType(target, Dark)` — that's `FUN_05024868`, the per-target immunity filter. Its Dark branch is basically the Showdown rule: target is Dark AND move was Prankster-boosted AND it's an opponent → "It doesn't affect…" + the move fails on that target Patching the first branch of that check to always "keep" the target removes the immunity. Confirmed in a fresh battle: Thunder Wave / Will-O-Wisp / etc. from a Prankster user now land on Dark-types. --- ## Notes / credits - This is one piece of a broader "restore Gen 6 abilities" project (Gale Wings, Parental Bond, Soul Dew are next). - Prankster's +1 priority is separate (it lives in `code.bin`); this patch only removes the Dark immunity, leaving the priority boost intact — i.e. true Gen 6 Prankster. - Method that made it possible, in one line: when a binary's tables are loader-relocated, stop fighting the static image and read a save state instead. Happy to answer questions or share tooling. If you're interested in learning more here's a thread I made on hackmons.com that details more information.
-
Hello! I haven't posted here in a while but I thought I'd share something really cool that I discovered while messing around with Pokemon Yellow. So I'm not sure how many of you know this, but there is a save file editor that actually exists on this website (though it originated elsewhere, you can find the upload by @theSLAYER here, developed by "Ritchie") that can do a lot more than what PKHeX can currently do in the Gen 1 games. This save editor lets you change a Pokemon species without changing the actual sprite of the Pokemon. What that means is that you can have a Gyarados sprite on a Pokemon with Mewtwo stats, and you can even change the typing of the pokemon so that it looks like a Gyarados, but it has Mewtwo stats, while being a Normal/Ghost type. Well as it turns out, while messing around with this, I discovered that the back sprites of some of these Pokemon look a little different. I first noticed this with Gyarados, but then I tried this on other Pokemon as well (namely Charizard, Blastoise, and Venusaur), and if you play Yellow and have a save file, you can actually replicate this phenomenon yourself. I couldn't find any documentation about these new sprites on the internet, so I don't know how many people actually know about them. Figured I'd at least share it here (year is 2025 and these games have been around for decades lol) so that someone can actually confirm whether these are in fact undiscovered sprites or if this is a well-known thing. I'm uploading screenshots of the game so that you can see what I'm talking about. Kinda neat! -IS2L
-
BDSP Removing Battle Tower Banlist
isleep2late replied to isleep2late's topic in ROM - Switch Research and Development
Thanks a lot @Pocket Monsters for the confirmation! Few things I want to note: I briefly skimmed through the rest of the directory that I found the banned list in. Unfortunately I did not find the segment that removes species/item clause, but I know it's in the code somewhere. If you go through the actual hex data (not using Imposter's Ordeal, but just something like HxD or another hex editor), you will find that the location of the banned list is peculiarly near some other binaries that contain what *looks* like the species clause. (In Gen 7, "0E" determines whether the species clause applies and "0F" determines whether the item clause applies). You'll see 0E and 0F within the proximity of the legendaries banlist, but zeroing them out will either give you an error or there's a likelihood that I'm just not doing it correctly. Anyway, I'm currently done with this project for the time being, but I would definitely be interested in following if anyone finds a way to remove the item/species clause. The only quality of life this provides is that it allows you to run multiple Arceus's w/ different typing, different deoxys formes in the same team (might be useful in a doubles battle). But again, I'm not gonna lose sleep if this never gets figured out. Cheers! IS2L -
isleep2late started following BDSP Removing Battle Tower Banlist
-
BDSP Removing Battle Tower Banlist
isleep2late replied to isleep2late's topic in ROM - Switch Research and Development
Hey... so I'm back from my 3-4 year slumber to put out another contribution to the ProjectPokemon community, and this one I think a small group of BDSP gamers would appreciate: I did it! I FINALLY figured out how to remove the BDSP Banlist, and it took a *very long time*. (At least, I THINK I removed it. I am just incredibly excited bc I believe this is the mod that does it). Here's a visual/proof that this method works, and then I'll share what I did. As you can see, Jirachi and Dialga are legal in my Battle Team. (I almost had a panic attack when I saw this because I actually could not believe I figured it out). OKAY, now that that's out of the way, here's the process: I used a program called "Imposter's Ordeal". Now, IDK what is allowed on this forum and what isn't. I know sharing certain things like rom's or how to hack your switch/emulation might not be allowed, so I'm going to refrain from talking about those particular things. And I'm not even sure if Imposter's Ordeal is something that is allowed here, so if it isn't, then please let me know and we can figure out another solution. I only say this because Imposter's Ordeal seems like an incredible resource that I'm surprised nobody has ever talked about on PP lol. But anyway, you're going to want to open that program and use it on your BDSP game. Open "Global Metadata Editor" and the first thing you're going to see is "Assembly-CSharp.dll", "<PrivateImplementationDetails>", and then a bunch of random letters and numbers in the third column. Scroll all the way down until you see the line of code that reads "4DBCB2BACE8C9D7E1BA528261F46...". Under the fourth column, you're going to see a bunch of binary/hex editor data. Turn all of those into "00 00 00..." while making sure you don't alter the size of the code/amount of binary data. (If you're wondering how I figured out it was this specific line of code, the answer is 'yes' lol). Close out of that window once you're done, hit "Export and Exit", and wah lah! You've created a mod that you can load onto your game and find that (at the very least) Jirachi and Dialga will show up as in the above image. Hope this information helps! I'm just so excited that I actually figured this out, I wanted to share it with the rest of the team, and hopefully this enhances your play experience, and for anyone out there who wants to create your own romhack of BDSP (as I know people like to do such of that), I hope this gives you a nice little added feature). I'm sure this line of code can be edited to fit your needs, for example if you wanted to ban other pokemon. Not sure why you'd want to do that. Last but not least, I want to give credit where credit is due. Want to thank @ABZB for helping out with the start of this project. Want to thank @Robie777 for contributing the post-game save file that I used (which also is the save that you see in the image above). That save can be found here: Want to thank Nifyr on github for hosting the Imposter's Ordeal randomizer that really helped organize the structure of the data in a way that PowerGREP or HxD couldn't. Want to thank the mods/big names out there (theSlayer, Kaphotics, etc.) who have made this rom/save editing community fantastic. After all, I'm going to look forward to using PKHeX to make some OP mon's on BDSP for funsies now lol. Want to thank Nintendo/ILCA/The Pokemon Company and the Unity engine for making possible what is probably one of my top 5 Pokemon games now. And finally, I want to thank all those who supported me during my long hiatus. Like I said, I left social media/content creation because of that toxic cyberbully from another gaming community (seems that person is now banished from multiple other groups, so I feel a lot more safe now). Will I ever come back? Idk yet, but I definitely enjoyed being part of ProjectPokemon. Anyway, let me know if you have any questions, or if there are any issues with the game. Please be aware that as I went through some of the metadata, it is VERY possible that the wrong modification could ruin your save (you have been warned). So if you're going to continue playing w/ Imposter's Ordeal and/or venture further into the binary data of BDSP, I would recommend backing up your save file and if things go wrong, just remove/undo the mod and restore your save. Cheers! -IS2L *UPDATE 1/11*: Please note that this does NOT affect the item or species clause. Those will still be in effect. After discussions in our PP discord, it's very likely that these rules can also be lifted, but I actually don't care too much about the item/species clause. It would be nice to be able to have both Deoxys A and D on your team, but it's not too big a deal. Anyone else feel free to dive into this project as I'll probably be very busy in the coming weeks/months -
Hello isleep2late,
is it possible for you to explain step by step how to remove the banlist from Pokemon alpha sapphire? I have read your thread from 2016. I am not a programmer so it was difficult to understand what you have wrote about with the others. I have problems to decrypt the cro files and see the 29 instances you have wrote about. I even do not know what are this 29 instances.
So could you explain it easier, please?
-
Hey everyone, Surprised this post hasn't been made already; am I the only one interested in doing this? I looked into some of the previous architecture and based on a post @ABZB made years ago on Pokemon Platinum there was a line of code in Platinum's arm9.bin they discovered that contained the banlist in the DS game: Now, I did not see this line of code in the BDSP games - and why would I? It's a completely different game that is 2 system generations apart. *However*, I grew very suspicious that things from BDSP were stolen from D/P/Pt when I discovered a lot of the stuff taken from diamond/pearl was claimed to have been copied over to BDSP (for example in the Glitch community they discovered that the game designers copied the memory reading from gen 4 dp, allowing a very similar exploit to the so-called "Void Glitch" in gen 4). Anyway, after dumping the romfs of Brilliant Diamond, I found a very similar segment of this code in the the resources.assets file under the romfs directory. There are exactly 6 instances of the Hex values: "7E 01 7F 01 80" (I think it actually extends beyond those values). I would try replacing the relevant binaries with "00 00..." but I also don't think I have the hardware to actually test to see if this works. On top of that, there's like a bunch of other instances of "7E 01 7F 01 80" scattered around the romfs as a 1-of instance (666 total occurences in the romfs) so I might just be throwing a needle in a haystack. If anyone else finds anything or makes any progress, please let us know! (FYI I will/have been severely limiting my online presence due to some drama/abuse from another/separate online community/individual but I will be watching closely for any new updates to this thread).
-
meliora45 started following isleep2late
-
MegaBlaziken257 started following isleep2late
-
isleep2late started following World Ribbon Legality
-
Importing Gen 6 Mechanics into USUM
isleep2late posted a topic in ROM - 3DS Research and Development
Hello, I've been looking into a project where I import certain mechanics in generation 6 into the gen 7 games. Specifically, I am interested in the following (in order of importance): Returning the ability Parental Bond to its glory and making it deal 1.5x the amount of damage instead of 1.25x Returning the ability Gale Wings to its glory and making it give priority to a flying-type move regardless of whether a pokemon is at max HP Allowing Prankster to be used against Dark-types Returning Soul Dew to boosting Latios and Latias's Special Attack and Special Defense by 50% instead of... whatever it does now Allow Sheer Cold to be used against ice-types, and to not have its accuracy lowered by non-ice users Returning Pixilate, Aerilate and Refrigerate to 130% instead of 120% (not that big a deal of this or Sheer Cold can't be done) Again, not that big a deal, but removing all the little nerfs to status conditions (confusion back to 50% from its now 33%, paralysis's speed back to 25% from 50%, burn back to 12.5% from its now 6.25%) I've been reading up on editing abilities (not just changing which Pokemon gets what ability to literally modifying abilities and what they do) and it seems like it hasn't really been done yet publicly. I've also been told that the abilities are not in any GARC but can be found in the exefs. Does anyone have any experience with any of this, or can point me in the right direction? Your help is greatly appreciated. -
Ah okay, it seems my game at times wouldn't allow me to even view my party, at times would but the pokemon would show up as banned. So there were internal inconsistencies when altering the banlist with how the game was registering that a pokemon was banned (either the individual pokemon would show up as banned or the entire party box would not be selectable, depending on the battle format). But I think i solved that today after discovering how to remove *literally every* restriction, but first: @deadmza I didn't get to look through every file to check file a/1/8/9, because there is at least one instance of the infamous "C0..." banlist byte in that location if you extract an X/Y rom. It appears the structure of the game is quite different from ORAS which is worth investigating (also sorry that this is coming like 2 years late lol) SO BIG UPDATE! I figured out how to remove the 510 EV limit on all Pokemon lol. At first I truly didn't think this was possible as I edited literally everything in the ORAS file (this only applies to ORAS as that's the one game I'm interested in. USUM and presumably SM already have this restriction removed I'm pretty sure). However, I took a shot in the dark and I have no idea exactly which location the bytes are, but here's what I did: 1. Removed the pokemon species banlist using the replacement of the "C0..." bytes with all 00's. 2. Replaced all "02" and "01" with "00" (pretty sure you just need to replace 02 but I did 01 just in case) 3. It was random and arbitrary, but I did a complete swap of every hex value from 0004550 onwards to "00 00..." I know my methods are not entirely scientific, but this got the job done and I'm not sure what if any side effects/repercussions this would have, but it appears a/1/7/0 is the file solely designed to address all banlist restrictions in every which way in ORAS, ORAS/X/Y appears to be INCREDIBLY strict with their banlist vs every other generation, and for whatever reason some of these limitations (the 510 EV limit) just aren't there in Gen 7 (or Gen 5). In fact, it's also removed in Sword and Shield... and actually you can pretty much play anything you want in Sword and Shield, which is pretty great because that seemed quite intentional and is the right direction for Nintendo to be going with these casual in-game battles going forward. EDIT: Sorry, today I tested this again and it looks like I was mistaken.... no idea what happened but it appears the 510 ev limit was not bypassed.... my mind must be seeing things because i could've sworn it worked yesterday. However.... An even easier way to remove all the restrictions found in gark a/1/7/0 is to zero out everything between the two " / /"'s in the beginning of the code, making sure to leave the 5 and the stuff before it intact. Idk if i'm making sense at this point...
-
I just tested this in the Battle Maison (after removing the banlist restrictions). Gave Arceus Protean, moved it to battle box, and when doing a rotation battle it would not change types when using a move. Thought this was a battle box thing (or maybe a rotation battle thing) but as it turns out my Arceus with the Protean ability would not change types regardless of where it battled (even tested against wild pokemon). Double-triple confirmed that Arceus did in fact have the ability Protean while in-battle. I thought this was very suspicious and decided to test other abilities, like Wonder Guard. Sure enough, Arceus with Wonderguard is protected by non-fighting moves.... so maybe I'm going crazy, maybe I messed up my game, but the specific combination of an Arceus with Protean hacked as its ability does not work and it is making me confused lol. Does anyone know anything about this, could confirm that this is in fact true, or might have an explanation as to why this is? My theory is that, just as the ability Multitype cannot work with any other pokemon, neither can Protean be used on an Arceus due to the nature of what Arceus does. Just a very rare thing... and I'm sure many people have played with Protean Arceus in Balanced Hackmons or other Hackmons formats in this game, not knowing that this could not technically be possible in the real game.
-
Hey so a lot of people have over the years asked me about my save files and some of them have been made obsolete/deprecated. I had a lot of time this year to fix/polish some of my older save files, and then I got overwhelmed with all of the Pokemon files on my Desktop so I'm just going to dump all of what I have into a zip file and make it public for all of you to use. Some Pokemon players want to own every single Pokemon and have it be the best version it can possibly be (competitive movesets, shiny, events, pokerus, all ribbons, etc etc), so ever since 2015 I decided to take this to the max and basically "max out" the game for every version from Gens 1 all the way to the games today. The challenge is making sure the Pokemon has that "green checkmark" on PKHeX (which has been made a lot easier thanks to the many updates Kaphotics has made over the years). What I am attaching is years of work, some of which has been borrowed or taken from various other places, but I try my best to credit the Smogon community, Kaphotics, ProjectPokemon's database, Gridelin, etc etc but there is honestly a lot of stuff on here that it's too much for me to really document in depth... so the best thing I can do is tell you to read the ReadMe and view the "Mainstream Media" folder which should contain save files for each generation. (Sorry for the weird nicknames lol. The reason for that is because 3DS games can only have "main" without a file extension, so I needed to give random nicknames to differentiate them and it would be weird for some of those files to have ".dsv" at the end so I just decided to make them all extensionless but PKHeX should still be able to read them all). So that's about it. I really hope you all enjoy these saves... I share them to you for the love of the game. I want you to know that I do not condone cheating - these saves are purely for casual play/fun and mildly interesting purposes. I hope I am not breaking any rules by sharing my saves (again, some of these are derivative and most of the stuff in the Supplementary folder are just dumps of whatever backup files I had). Let me know if you have any questions and if you need me to take this down for any reason then I certainly will comply. Sincerely, isleep2late isleep2late's 8 Gen Gem.rar
-
@RedFordWhite Hey! Sorry for taking a while to get back to you, but I was able to solve your conundrum just now if you're still interested! If you go back to the original thread: You'll see that MeroMero mentioned the files within a/1/0/6 for PWT (files 33, 34, 35, and 36). Now, these files are referring to actual .bin files that you get from decompressing the actual narc file (the file with no extension named "6"). This can be done with a program called "Tinke" which you can get from the release section of their github (click on "Assets" all the way at the bottom of version 0.9.0). Open your game, go to the root directory and find a/1/0/6 (If you're on Black 2/White 2), click on the file and I think you click on "Unpack" which gives you a bunch of .bin files. Find bins 33-36, open them with the "Hexadecimal" button in Tinke and replace with 0's *almost* everything. I kept the first sequence of numbers in each of these files but pretty much everything from "C0 ....." onwards I replaced with 0's until the absolute very end of each file (make sure not to add any additional digits. Don't add any length to the files). My guess is that the Soul Dew and all the other junk is "hidden" amidst the 01's and 02's (just like it is in the Gen 6 games) which uniquely come after the species banning script MeroMero found. And since I'm too lazy to sift through what all of them mean it's just a lot easier to zero all of that out for your purposes Let me know if this method works for you! I just tested it and it appears it does exactly what you want. And if you Hex-edit the original 6 file within the Tinke program, you should be able to change the B0 0E I talked about and the other unbannings in Battle Subway (and hopefully Battle Institute as well?) will still work.
-
Thanks for that info @Smile! I got a chance to look even further into this and as it turns out, there's an ENTIRE set of hidden "02"'s and "01"'s (and I'm almost positive there are others) scattered around the a/1/7/0 garc that basically dictate all Battle Maison restrictions, opening a ton of more doors for additional research if anyone wants to pry them open. Following your suggestions, I think I did a flat Control + Replace (CTRL + R) on all 02 -> 00 which led to pretty much unbanning Soul Dew in the Super Double Battles, Super Triple Battles, but normal Triple Battles was somehow randomly still not even allowing any of the banned pokemon, so I was very confused..... But TL;DR: If you want to get rid of the most restrictions, do a Control + Replace on the 101 byte repetitions outlined by Kaphotics (there should be 29 iterations in ORAS) and then do a CTRL + R on all 02 -> 00 and THEN do a CTRL + R on all 01 -> 00. This leads to some pretty funny results, allowing more than 3 Pokemon to be submitted in certain formats (I think 4 in regular singles, and your entire team in super singles). I did even more screwing around and I somehow randomly got rid of the Species Clause in one of the Rotation formats.... but I can't remember exactly what I did (I'm really sorry!) But if you sift through enough of the "unique" characters and slowly get rid of them, I think you'll get there. I'll let you know if I find anything else, but I think that's it for now!
-
I am so sorry!! I've literally been coming back slowly to Pokemon and I did revisit this project. It took me about 20 hours, but after a million attempts at hex editing and rebuilding, I FINALLY discovered the proper way to removing the Soul Dew clause: Long story short, unbanning Soul Dew is a matter of changing a few "02"'s to "00"'s at various offsets in the a/1/7/0 garc. For my own convenience I won't list the exact offsets of every bit, but here's a list of them you need to change to 00 which you can find at the specified row (just set HxD rows to 16 and you'll find the offsets): 02 @ 00005CD0 02 @ 00005A70 02 @ 000055C0 02 @ 00005360 02 @ 00005100 02 @ 000049F0 02 @ 00004790 02 @ 000042E0 02 @ 00004080 01 @ 00003E90 02 @ 00003E20 02 @ 00003970 02 @ 00003710 02 @ 000034B0 02 @ 00003250 (set HxD to 16 per row) Again, apologies that this is only being figured out in 2020 for the very few of you that care. I didn't want to make a new post but I didn't want to necro this one either. Doing what I previously told you to do will not allow you to submit any Pokemon which causes you to have a shiny bulbasaur that auto-concedes to your opponent. Hopefully this helps out anyone in the future! BTW, the only other restrictions are Species Clause (and I think Item Clause?). I haven't fooled around with those restrictions but I don't doubt that they're possible. Removing the Pokemon Banlist and Soul Dew Item Ban list is good enough for me lol
-
I noticed that in Pokemon Black 2 / White 2, Pokemon that originate from the Gen 5 games will still be marked as Legal when given Contest Stats and/or the Ability Ribbons. As it turns out, I did some looking-into this stuff and from what I've read it seems there is no actual way to obtain *any* ribbons in these games, there are no contests, and therefore there shouldn't be any way to have a non-zero stat in any of the contest categories. I tried to find bug reports on this issue but it doesn't seem like anyone has brought this up. Should this be changed/fixed in a future PKHeX update? Just a suggestion, thought it might help with the legality checker, but if I am mistaken please feel free to let me know if this is actually working properly
-
Hello! I have a question about the World Ribbon that exists in Gen 3: PKHeX says it is legal to have in a Gen 3 game (in this case Emerald), but when I drag the .pk3 file onto a Gen 4 game it's flagged as illegal because the World Ribbon is apparently invalid: "Invalid: Invalid Ribbons: World" How can a pokemon be legal in one game but when the same Pokemon is transferred it is illegal?