Jump to content

Pokémon Black and White - Changing TMs and HMs


Oxnite

Recommended Posts

It would be great if a tool was made for this. There are plenty of tools available for the editing of Pokémon and TM compatibility etc, but being able to change the move that a TM contains would be very useful for ROM cracking. Someone has written an AR code for Pokémon Black (I think) for TM44 (Rest) modification. I really don't know if this helps but I just thought I'd throw it out there. Hopefully someone can look at the hex for this code and see how it works.

b2000024 00000000

94000130 fcff0000

10018cbe 0000022f

d0000000 00000000

94000130 fffb0000

da000000 00018cbe

d3000000 00000000

b20055d8 00000000

d7000000 00001256

d2000000 00000000

By the way, I haven't tested the code myself so I don't know 100% if it works.

Edit: Just remembered I ought to explain how the code works. Apparently pressing L and R makes the number of the first item in the bag to 559 and that item should be thrown away until you have the number of the move wanted, then you press Select and TM44 will have changed to whatever the number of the move is.

Link to comment
Share on other sites

Well, in gen 4, there was just a list that went Focus Punch, Dragon Claw, Water Pulse, Calm Mind, etc.; i.e. 08 01 51 01 60 01 5B 01

I already tried searching the rom for an equivalent in gen 5 to no avail, so they either have it in a compressed file or they changed the format.

I'm pretty sure that the information will be in a similar format - it's just a matter of finding the code. Black and White weren't made from scratch - they were made on the same line of production as HeartGold/SoulSilver. Looking into the Black/White ROM has revealed that lots of the parts of code inside the game aren't used by the game at all, and are simply leftover scraps from HG/SS functionality (an example of this is a piece of data for the game's method of selecting a Pokémon ID which, when used in HG/SS, works normally, but when activated artificially in Black/White it increases the chance of getting a shiny to 1 in 3/4, or something like that).

Link to comment
Share on other sites

b/w were made from the dppt line, not hgss. i would also imagine that bw and hgss were developed in tandem for awhile by separate teams, which would explain why bw doesn't have stuff like pokemon following the trainer.

Ah, right, thanks, I must have got myself all muddled up somewhere down the line. I still don't fully understand why they didn't have the Pokémon following the trainer in B/W; I don't think that it being made in tandem by separate teams is enough of an excuse for the company not to do it, not when there was so much demand for the feature.

Anyway, the point still stands - in Gen IV, the TM/HM list was listed as hex. I just did a search of a Black ROM - I'm not very good with hex so I don't know if I did it right, but I found the index numbers of Hone Claws, Dragon Claw, Psyshock and Calm Mind (the first four TMs). I converted them to hex (1D4, 151, 1D9 and 15B). I searched for string "D4 01 51 01 D9 01 5B 01", and found nothing - but like I said, I only just started working in hex and I'm still learning, so I don't know if I've done it right.

Link to comment
Share on other sites

Anyway, the point still stands - in Gen IV, the TM/HM list was listed as hex. I just did a search of a Black ROM - I'm not very good with hex so I don't know if I did it right, but I found the index numbers of Hone Claws, Dragon Claw, Psyshock and Calm Mind (the first four TMs). I converted them to hex (1D4, 151, 1D9 and 15B). I searched for string "D4 01 51 01 D9 01 5B 01", and found nothing - but like I said, I only just started working in hex and I'm still learning, so I don't know if I've done it right.

I think that, if they have kept the original hex format, your method would give the solution, however if it doesn't, they have probably changed the format. It's hard to search for the TM data separately, though..

However, things like D4 01 00 00 51 01 00 00 D9 01 00 00 5B 01 00 00 could maybe work (or adding some other random numbers inbetween).

Link to comment
Share on other sites

I think that, if they have kept the original hex format, your method would give the solution, however if it doesn't, they have probably changed the format. It's hard to search for the TM data separately, though..

However, things like D4 01 00 00 51 01 00 00 D9 01 00 00 5B 01 00 00 could maybe work (or adding some other random numbers inbetween).

Could data be included in the string on whether the move was a TM or a HM?

Link to comment
Share on other sites

any lucky?

a/0/2/4 : (yeah i know is not effected)

TM 1 (328) : E8 03 00 00 00 00 00 00 3F 01 06 00 00 00 00 00 0000000000000000000000000000000000000000

TM 2 (329) : E8 03 00 00 00 00 00 00 3F 01 06 00 00 00 00 01 0000000000000000000000000000000000000000

TM 92 (419) : E8 03 00 00 00 00 00 00 3F 01 06 00 00 00 00 5B 0000000000000000000000000000000000000000

HM 06 (425) : 00 00 00 00 00 00 00 00 3F 01 06 00 00 00 00 64 0000000000000000000000000000000000000000 - maybe is just .. :/

Hm i think "D4 01 00 51 01 00 D9 01 00 5B 01 00" not " D4 01 00 00 51 01 00 00 D9 01 00 00 5B 01 00 00".

ok i will search them xD

Link to comment
Share on other sites

any lucky?

a/0/2/4 : (yeah i know is not effected)

TM 1 (328) : E8 03 00 00 00 00 00 00 3F 01 06 00 00 00 00 00 0000000000000000000000000000000000000000

TM 2 (329) : E8 03 00 00 00 00 00 00 3F 01 06 00 00 00 00 01 0000000000000000000000000000000000000000

TM 92 (419) : E8 03 00 00 00 00 00 00 3F 01 06 00 00 00 00 5B 0000000000000000000000000000000000000000

HM 06 (425) : 00 00 00 00 00 00 00 00 3F 01 06 00 00 00 00 64 0000000000000000000000000000000000000000 - maybe is just .. :/

Hm i think "D4 01 00 51 01 00 D9 01 00 5B 01 00" not " D4 01 00 00 51 01 00 00 D9 01 00 00 5B 01 00 00".

ok i will search them xD

I thought the hex for this game always went in pairs of values? I have so much to learn. -_-

Edit: I took the liberty of searching for "D4 01 00 51 01 00 D9 01 00 5B 01 00" myself and found nothing.

Link to comment
Share on other sites

I thought the hex for this game always went in pairs of values? I have so much to learn. -_-

Edit: I took the liberty of searching for "D4 01 00 51 01 00 D9 01 00 5B 01 00" myself and found nothing.

I will search it if i have free time, is have different structure, and also i was mark some narc file maybe is pokedex list or tm/hm list...

and i not like someone give a AR to discover on ROM, AR is on RAM, not on ROM, is little hard to find actual data on ROM...

Link to comment
Share on other sites

I will search it if i have free time, is have different structure, and also i was mark some narc file maybe is pokedex list or tm/hm list...

and i not like someone give a AR to discover on ROM, AR is on RAM, not on ROM, is little hard to find actual data on ROM...

Yeah, I knew I would be wrong, but I thought I'd just give the code anyway. I thought it might give some idea as to how one would go about turning one TM into another.

Link to comment
Share on other sites

  • 3 weeks later...

One theory I thought of is that maybe the Item number for the TM will be included somewhere in the coding. I did some searching, but to no avail. Perhaps though, one could try something like 01 00 D4 01. 00 01 being the TM number reversed and D4 01 being the move. There's no telling how many results could come up when searching for that though. I'll attempt that for a bit, then I'm going to bed.

EDIT: I don't think that's it, or at least there's more info between the first and second TM. OR it could be because the TMs are in Sets of 8, reversed so it's 8-1 (Like the compatability of TMs with Pokemon is in the Pokemon Stats Data.) I don't feel like finding out right now, and I'm very tired.

Link to comment
Share on other sites

  • 6 months later...

Bump, so I finally found out how to edit the TMs and I would like to share it with you all.

In the Pokémon White Rom (.nds file), it can be found by using a hex editor programme around offset 0x00050350.

It for example contains the hex ''CF 00'' on that line, which I edited to another random hex data and the TM actually changed to Blue Flare.

You do have to edit the TM's ''CD'' item sprite yourself though, as well as the bag text data of the TM's effect. And of course, you'll have to change the TM learnset of each Pokémon individually.

Anyway, even though it will cost a lot of time to edit the TMs, think it's quite a cool just to know how to do it.

Link to comment
Share on other sites

Can you be more specific? Such as what other hex values were around the CF 00, which TM was changed (TM06 or TM42 or what?), what is the CF00 (the attack value in the TM?) and all of that interesting stuff. And by changing the TM's sprite, do you mean to make it align with the color of the type of attack it is?

Link to comment
Share on other sites

Can you be more specific? Such as what other hex values were around the CF 00, which TM was changed (TM06 or TM42 or what?), what is the CF00 (the attack value in the TM?) and all of that interesting stuff.

The CF 00 value on offset 0x00050350 turned out to be the Swagger TM (which is TM87).

If you search for Swagger in the official list of moves, you can see that Swagger is move 207 - which is 00CF in hex. ''Reverse'' it to bytes and it will give you CF 00 (just like how, for example, 1BF would give BF 01).

Now, I replaced this ''CF 00'' with ''27 02'' as a random number and it turned out to be the move Blue Flare, which is correct, because according to the official list, it is move number 551 (and 551 in hex is 227).

Right before ''CF 00'' it gives the hex code ''BF 01'', calculate it do decimals and it will give 444. The official list says it is Grass Knot and again, that's correct, because Grass Knot is TM86, the TM before TM Swagger.

However, it should be noted that the lay-out of the hex data is very odd, as some TMs have random bits inbetween their code (for example, TM Pluck has hex data 6D 01, however it shows as 6D 00 2A 01 or something like that), though changing the corresponding hex data actually affects the TM and changes it.

It completely works, I even tried teaching the new TM to my Pokémon and it actually taught them the move Blue Flare.

And by changing the TM's sprite, do you mean to make it align with the color of the type of attack it is?

Yes. For example, TM Swagger is a Normal-type move, so the CD-sprite (TMs are CDs) is white, blank. Now, I randomly changed the TM to Blue Flare, which is a Fire-type move. However, the CD was still white colored, so you should manually change TM87's sprite to a red CD. Which, I think, is only a matter of copying a certain item icon and replace the original white icon without actually editing it.

Link to comment
Share on other sites

Which, I think, is only a matter of copying a certain item icon and replace the original white icon without actually editing it.

I'm not quite sure what you mean here. The way I would go about it is finding the hex for the TM in regards to items (http://bulbapedia.bulbagarden.net/wiki/List_of_items_by_index_number_(Generation_V) and finding hex code next to it that relates to the sprite it uses, and changing that hex to the sprite you need.

From what I have gathered from your post, the layout of the hex is something like one move after another move after another move, and the game manages to count how many moves there are to determine what TM it is actually referring to. However, the catch is that there are these random bytes that you mentioned that are inbetween moves.

Someone should go about writing a program for this. I don't think a tool would be that complex. The value of the TM (in regards to moves) is already found. Finding the sprite that is displayed for it shouldn't be too hard either (if I didn't have exams I would focus on finding this). Next would be visually display the correct information, as you had mentioned that move descriptions given by the TMs were incorrect - again, something I don't think would be too hard (find the code that dictates which part of the script to read, and find the part of the code that displays thing such as damage and accuracy). I have never written a program before, and I don't intend to, but to me it sounds like something as simple as loading 2-3 narcs and going to town on editing. The user would input but one move value, and the program would change each narc as they should be: TM value, sprite, and description.

Oxnite, don't you have a tool that edits moves? You should be able to do something like this fairly easily, and I'm sure it would be much appreciated! I know that a tool like this would be very very useful for me as I develop my white hack over the summer.

I would help more in locating offsets within narcs that are subject to modification, but I have exams. Within a week I should be able to contribute more.

Link to comment
Share on other sites

I'm not quite sure what you mean here. The way I would go about it is finding the hex for the TM in regards to items (http://bulbapedia.bulbagarden.net/wiki/List_of_items_by_index_number_(Generation_V) and finding hex code next to it that relates to the sprite it uses, and changing that hex to the sprite you need.

From what I have gathered from your post, the layout of the hex is something like one move after another move after another move, and the game manages to count how many moves there are to determine what TM it is actually referring to. However, the catch is that there are these random bytes that you mentioned that are inbetween moves.

Someone should go about writing a program for this. I don't think a tool would be that complex. The value of the TM (in regards to moves) is already found. Finding the sprite that is displayed for it shouldn't be too hard either (if I didn't have exams I would focus on finding this). Next would be visually display the correct information, as you had mentioned that move descriptions given by the TMs were incorrect - again, something I don't think would be too hard (find the code that dictates which part of the script to read, and find the part of the code that displays thing such as damage and accuracy). I have never written a program before, and I don't intend to, but to me it sounds like something as simple as loading 2-3 narcs and going to town on editing. The user would input but one move value, and the program would change each narc as they should be: TM value, sprite, and description.

Oxnite, don't you have a tool that edits moves? You should be able to do something like this fairly easily, and I'm sure it would be much appreciated! I know that a tool like this would be very very useful for me as I develop my white hack over the summer.

I would help more in locating offsets within narcs that are subject to modification, but I have exams. Within a week I should be able to contribute more.

Creating a tool, it was something I had done a long time ago but I don't really know how to do it again. Back then, I was using an older version of Microsoft Visual Studio, so I don't really know how to work with it anymore. I have exams in May, too, so if I'd create a tool for it, it will probably somewhere in June. I want to have my hack finished, too.

You are right though that it shouldn't be too hard to do. Oh, and the bag description only lacks the actual move description; damage, accuracy etc. of the move were actually changed.

Anyway, I might indeed release a tool for this. Myabe later I could create this big tool that edits TM/HMs (themselves), Pokémon Stat editing (including hold items, base stats, etc.), OxATTACK (a move editor) should be in it, too, but an enhanched version. As well as a Trainer Pokémon editor (with more functions than the regular Trainer editors, for example the options to select Gender and Ability of the Pokémon). Anyway, that would be an amazing tool, yes, though it will take a lot of time. I will look into that after I have finished my hack.

Link to comment
Share on other sites

Bump. Another update on this!

Turns out the arm9.bin file is compressed, that's the reason why the data is so oddly displayed in the hex editor.

The following information is courtesy of elementking;

Assuming you're familiar with CrystalTile2, open the ROM then click the little NDS icon at the top. You should get a list of every pack 'n such stored in the ROM. Right-click on the arm9.bin file and click Extract (U).

[Edit by Oxnite - I learned that it is very important to use ''Extract'' instead of ''Export'', because Export only just exports the arm9.bin file, where Extract actually decompresses it]

Extract it to any location, open it up in a hex editor and search by moves. So just convert the moves into hex and search. The same goes for B/W, just different moves.

If you're really lazy, here are the offsets that they start at in the extracted arm9.bin file. =P

- TM/HM Data begins at offset 1000C8 in arm9.bin file (HG/SS)

- TM/HM Data begins at offset 9AAB8 in arm9.bin file (B/W)

Test it out. Tell me if it doesn't work with you 'n whatnot.

Link to comment
Share on other sites

Bump. Another update on this!

Turns out the arm9.bin file is compressed, that's the reason why the data is so oddly displayed in the hex editor.

The following information is courtesy of elementking;

Whoopsies! I also forgot that to reinsert the edited arm9.bin file into the ROM, you must use the Compression option, not the Import option. A little derp on my part, though it may have been obvious.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...