Open mid-kid opened 2 years ago
There's quite a few things here, so I'll respond one-by-one:
$4F
makes perfect sense. I had quite a bit of trouble trying to find technical explanations for a lot of these ACE tricks, so ended up only comprehending the minimum required to get the exploit working<code>
part, the glitch didn't trigger at all, and the battle would just start with corrupted text.$FF
in the "tetsuji" packets), I wonder if the game doesn't simply "run" when it detects that it has run out of time? I guess it depends on whether the opponent is informed that you ran out of time, or simply ran away?A massive thanks again for your comments - I really appreciate you taking the time to write this up. As on #1, are you okay with me updating the relevant parts of the article with some of these comments (crediting you where appropriate)?
I was pulling my hair out for quite a while trying to figure this out and had no luck, hence why I concluded that it wasn't possible. If people ever want to re-implement the online battle functionality, this would be super important to have.
I don't remember exactly how it was documented in dan docs, but I remember it being a pretty painful dive through the pokecrystal code... there's a lot of layers of indirection in there and it's a genuine pain to follow, so it's not an unreasonable conclusion there. Interestingly enough, this value is also checked by the GBA library, so I wonder if any GBA games used it as well (despite not being exposed in the public header).
I had quite a bit of trouble trying to find technical explanations for a lot of these ACE tricks, so ended up only comprehending the minimum required to get the exploit working
Yeah... Unfortunately most people and in particular speedrunners aren't very good at explaining this sort of thing. There's a lot of cobbled-together knowledge that has been accumulated over the years but the deeper you dig, the more you'll find that nobody really bothered to explain things, and the 0x1500 wiki page is no exception.
I wonder if the game doesn't simply "run" when it detects that it has run out of time? I guess it depends on whether the opponent is informed that you ran out of time, or simply ran away?
That would put the player with the least remaining time at a disadvantage, as running is an automatic lose condition. Also the battle interface warns both players of the remaining time during the battle itself, though I'll admit I haven't stared at this hard enough yet to figure out if the remaining time is in sync for both players or whether time running out is a draw rather than a win/lose condition.
are you okay with me updating the relevant parts of the article with some of these comments
Feel free, a lot of this info is cobbled together from various sources including shonumi's dan docs (which you already noted in the blog post) and some people in the REON Discord who are going through all the mobile features trying to re-create them in US crystal.
And no problem, I love seeing people mess around with this sort of thing, though info about niche things like this is often hard to find so I'm glad to be able to help.
As a follow up to #1, there's a few things that are incorrect in the article. Some of these are nitpicks, some of these are more significant, but I felt they all warranted being pointed out somewhere.
Mobile adapter documentation
General pokemon game knowledge
Misc
4F
character is the<LINE>
character. The reason it's used in the 1500 payload is to set the text writing pointer to a predictable location (the start of the textbox), as this pointer is written to the jump destination, and will be the first two bytes that are executed.3F
/<ENEMY>
character, and doing something like "4F 15 08 05 C9 3F" followed by "15 00 \<code>" inwOTClassName
), but it's a bit complicated in this exploit scenario. (letterbombs by attaching mail to traded mon are very much possible with this)Lacking research