Thread: Development: Gen V TM routine in Gen III games
View Single Post
Old March 26th, 2012 (4:01 PM).
RicePigeonKKM's Avatar
RicePigeonKKM RicePigeonKKM is offline
    Join Date: Feb 2006
    Nature: Rash
    Posts: 30
    Originally Posted by Jambo51 View Post
    I've actually achieved this on the 649 Patch. The only discernable difference between TMs and HMs is built into the code. It reads the item ID and any item ID above a certain value is treated as a HM. How I did it was that I simply removed this check and made it always use the HM routine.

    Sadly, I don't have anything noted down, so I can't help there, but it's not exactly that difficult to achieve once you find the relevant checks. :) Good Luck!
    Based on what you said, I tried to swap to item IDs for HM 1 (Cut) and TM 50 (Overheat) just to see if it worked. It didn't.

    However, I then looked at the disassembled code. For 809a1f1 there was some byteshifting involved. Changing the value (from 0x18 to 0x14) seemed to do the trick at first; the TMs were acting like the HMs, and the other use items were being consumed on use. The only drawback to this was that this would also affect the items in the Balls pocket (essentially giving infinite Masterballs if one had it).

    Sorry for sounding noobish, I only started looking into ASM hacking. Also I did notice a routine at 0809a202 (specifically, add r0, r0, r1) which seems to add the contents on r1 into r0. If I'm reading the routine correctly, there was a previous check at 0809a1f8 which subtracts 1 from register r0 (which is whats defining how many items to consume). There are a few calls there in between which become confusing to me (such as the ldr instruction at 0809a1fe).

    Also, though unrelated, there also seems to be a check against the item ID against a value 0x176 (which appears to be the maximum item index) and setting this value any lower will cause any item with an ID over that value to become unknown items (name changes to ??????????). I thought this was the value I was looking for at first until I realized that HMs started at ID of 0x153.
    Reply With Quote