Jump to content

Move Tutor list in BW2?


Recommended Posts

So, I decided to have a shot at looking for the move tutor list in BW2 this weekend, as I had nothing better to do (lies). As it could be compressed somewhere (like the TM list is), I decided to extract arm9, arm7 and all overlay9 files.

My method was... kinda crude: Ctrl+F 'C2 01' (Bug Bite) and then look out for any '57 01' (Covet) close to it. Unfortunately, I found nothing. My best shots were overlays 9_0185, 9_0167 and 9_0260, as the three of them have what *could* be move lists, but without making any sense (they don't seem to be level-up lists, for instance) whatsoever. 9_0167 has 'C2 01 EC 01', the latter being Foul Play, another tutor move; 9_0185 has 'C2 01 8F 00' (Bug Bite, Sky Attack); while 9_0260 has 'BA 01 C2 01' (Iron Head, Bug Bite). 9_0260 would be the most interesting one as both are taught by the same tutor in-game.

...Yeah, that's the closest I got to a full tutor list.

Also, I could not extract overlays 9_0001, 9_0009, 9_0014, 9_0017, 9_0054, 9_0072, 9_0095, 9_0152, 9_0153, 9_0169 and 9_0281 so I can't say anything about them. I don't think they contain anything, though: considering the PokeMart lists are in a .narc, I wouldn't be surprised if they had done the same to the tutors. There are 306 of them, however... Has anyone else made any progress on this (maybe knowing where the Pledge tutors were in BW1 data)? I'm not in the mood of extracting all those .narcs right now.

If anyone wants to look for it by themselves, here is the tutor order I found out after comparing a dozen of Pokémon data:

[b]OFFSET 0x0030:[/b]

[b]08-0B[/b] - Special Tutors [i](first bit = farthest to the right, obviously)[/i]

[spoiler]08-1: Grass Pledge (08 02)
08-2: Fire Pledge (07 02)
08-3: Water Pledge (06 02)
08-4: Frenzy Plant (52 01)
08-5: Blast Burn (33 01)
08-6: Hydro Cannon (34 01)
08-7: Draco Meteor (B2 01)
08-8: ---

09-1: ---
09-2: ---
09-3: ---
09-4: ---
09-5: ---
09-6: ---
09-7: ---
09-8: ---

0A-1: ---
0A-2: ---
0A-3: ---
0A-4: ---
0A-5: ---
0A-6: ---
0A-7: ---
0A-8: ---

0B-1: ---
0B-2: ---
0B-3: ---
0B-4: ---
0B-5: ---
0B-6: ---
0B-7: ---
0B-8: ---[/spoiler]

[b]0C-0F[/b] - Tutors #1 [i](Driftveil Tutor)[/i]

[spoiler]0C-1: Bug Bite (C2 01)
0C-2: Covet (57 01)
0C-3: Super Fang (A2 00)
0C-4: Dual Chop (12 02)
0C-5: Signal Beam (44 01)
0C-6: Iron Head (BA 01)
0C-7: Seed Bomb (92 01)
0C-8: Drill Run (11 02)

0D-1: Bounce (54 01)
0D-2: Low Kick (43 00)
0D-3: Gunk Shot (B9 01)
0D-4: Uproar (FD 00)
0D-5: ThunderPunch (09 00)
0D-6: Fire Punch (07 00)
0D-7: Ice Punch (08 00)
0D-8: ---

0E-1: ---
0E-2: ---
0E-3: ---
0E-4: ---
0E-5: ---
0E-6: ---
0E-7: ---
0E-8: ---

0F-1: ---
0F-2: ---
0F-3: ---
0F-4: ---
0F-5: ---
0F-6: ---
0F-7: ---
0F-8: ---[/spoiler]


[b]OFFSET 0x0040:[/b]

[b]00-03[/b] - Tutors #2 [i](Yamaji Tutor)[/i]

[spoiler]00-1: Magic Coat (15 01)
00-2: Block (4F 01)
00-3: Earth Power (9E 01)
00-4: Foul Play (EC 01)
00-5: Gravity (64 01)
00-6: Magnet Rise (89 01)
00-7: Iron Defense (4E 01)
00-8: Last Resort (83 01)

01-1: Superpower (14 01)
01-2: Electroweb (0F 02)
01-3: Icy Wind (C4 00)
01-4: Aqua Tail (91 01)
01-5: Dark Pulse (8F 01)
01-6: Zen Headbutt (AC 01)
01-7: Dragon Pulse (96 01)
01-8: Hyper Voice (30 01)

02-1: Iron Tail (E7 00)
02-2: ---
02-3: ---
02-4: ---
02-5: ---
02-6: ---
02-7: ---
02-8: ---

03-1: ---
03-2: ---
03-3: ---
03-4: ---
03-5: ---
03-6: ---
03-7: ---
03-8: ---[/spoiler]

[b]04-07[/b] - Tutors #3 [i](Seigaiha Tutor)[/i]

[spoiler]04-1: Bind (14 00)
04-2: Snore (AD 00)
04-3: Knock Off (1A 01)
04-4: Synthesis (EB 00)
04-5: Heat Wave (01 01)
04-6: Role Play (10 01)
04-7: Heal Bell (D7 00)
04-8: Tailwind (6E 01)

05-1: Sky Attack (8F 00)
05-2: Pain Split (DC 00)
05-3: Giga Drain (CA 00)
05-4: Drain Punch (99 01)
05-5: Roost (63 01)
05-6: ---
05-7: ---
05-8: ---

06-1: ---
06-2: ---
06-3: ---
06-4: ---
06-5: ---
06-6: ---
06-7: ---
06-8: ---

07-1: ---
07-2: ---
07-3: ---
07-4: ---
07-5: ---
07-6: ---
07-7: ---
07-8: ---[/spoiler]

[b]08-0B[/b] - Tutors #4 [i](Nacrene Tutor)[/i]

[spoiler]08-1: Gastro Acid (7C 01)
08-2: Worry Seed (84 01)
08-3: Spite (B4 00)
08-4: After You (EF 01)
08-5: Helping Hand (0E 01)
08-6: Trick (0F 01)
08-7: Magic Room (DE 01)
08-8: Wonder Room (D8 01)

09-1: Endeavor (1B 01)
09-2: Outrage (C8 00)
09-3: Recycle (16 01)
09-4: Snatch (21 01)
09-5: Stealth Rock (BE 01)
09-6: Sleep Talk (D6 00)
09-7: Skill Swap (1D 01)
09-8: ---

0A-1: ---
0A-2: ---
0A-3: ---
0A-4: ---
0A-5: ---
0A-6: ---
0A-7: ---
0A-8: ---

0B-1: ---
0B-2: ---
0B-3: ---
0B-4: ---
0B-5: ---
0B-6: ---
0B-7: ---
0B-8: ---[/spoiler]

Link to comment
Share on other sites

I don't have a direct answer for your question~

Tutor move allowance are in the regular Pokemon /a/0/1/6 personal.narc. (structure is here)

Tutor Moves (should match your data) are here \ I'm not sure where this was ripped from.

Moves -> PKM here.

You mentioned PokeMart data; I ninja edited the above thread with that narc (/a/2/8/2 - PokeMart Data)

Link to comment
Share on other sites

Oh, I know all of that. What I wanted to find out is where the Tutor list would be in the data; we know the TM/HM list (so that one can edit TM 01 to be Sacred Fire or whatever) is in arm9.bin, but I haven't a clue of the Tutor one. At best, we know it would start with Covet - Bug Bite - Super Fang, I guess? But that's not much, at least not to me.

Link to comment
Share on other sites

  • 2 months later...

on RAM (i was dump from desmume) and i was found structure but i not sure, since i not found in the ROM O.o

*i just pick random from RAM DUMP*

EC01 0000 08 000000 0C 000000

6401 0000 0A 000000 0E 000000

8901 0000 04 000000 02 000000

4E01 0000 02 000000 01 000000

8301 0000 02 000000 00 000000 ---> Last Resort 2 shard , position 0.

well i was similar with this structure :/ is seems stored on narc file ... maybe is not help xD i will check it later ...

58010000060000005B010000

060000006701000006000000

820100000600000066010000

0C000000960100000C000000

A00100000C00000051010000

120000005E01000012000000

770100001200000092010000

120000009E01000012000000

9F0100001200000069010000

180000007A01000018000000

830100001800000087010000

180000009401000018000000

140000000200000000000000

AD0000000200000001000000

1A0100000400000003000000

EB0000000600000004000000

010100000A00000008000000

100100000800000007000000

D70000000400000002000000

6E0100000A0000000C000000

8F0000000800000006000000

DC0000000A0000000B000000

CA0000000A00000009000000

990100000A0000000A000000

630100000600000005000000

C20100000200000001000000

570100000200000000000000

A20000000600000006000000

120200000600000009000000

440100000400000004000000

BA0100000400000005000000

920100000600000008000000

110200000400000002000000

540100000400000003000000

43000000080000000A000000

B9010000080000000B000000

FD0000000600000007000000

090000000A0000000D000000

070000000A0000000C000000

080000000A0000000E000000

7C0100000600000001000000

840100000600000000000000

B40000000800000006000000

EF0100000800000003000000

0E0100000800000002000000

0F0100000A00000008000000

DE0100000800000004000000

D80100000800000005000000

1B0100000C0000000B000000

C80000000A0000000A000000

160100000A00000007000000

210100000C0000000E000000

BE0100000A00000009000000

D60000000C0000000C000000

1D0100000C0000000D000000

150100000400000003000000

4F0100000600000004000000

9E010000080000000A000000

EC010000080000000C000000

640100000A0000000E000000

890100000400000002000000

4E0100000200000001000000

830100000200000000000000

140100000A0000000D000000

0F0200000600000006000000

C40000000600000007000000

910100000800000009000000

8F0100000A00000010000000

AC010000080000000B000000

960100000A0000000F000000

300100000600000005000000

E70000000600000008000000

2E0000000100000031000000

010000002F00000001000000

340000000100000030000000

010000002D00000001000000

520000000300000053000000

030000005400000003000000

5500000003000000E8000000

080000000901000008000000

0A010000080000000B010000

080000004601000008000000

470100000800000020020000

08000000D50000000C000000

E60000000C00000014010000

0C000000160100000C000000

1D0200000C00000021010000

100000002201000010000000

230100001000000024010000

100000002501000010000000

260100001000000010010000

100000001101000010000000

D6000000100000000F010000

100000002102000010000000

22020000100000001E020000

100000002302000010000000

DC0000001800000029010000

180000001F01000018000000

13010000180000000E010000

180000003200000018000000

Link to comment
Share on other sites

  • 2 weeks later...

Well, that's interesting, even though I don't know how to work with RAM data. For some reason, the tutors are out of sequence (it's 3-1-4-2 instead of 1-2-3-4, in the order I posted in the OP), and the rest of the data... doesn't seem to make much sense. But well, at least we know that, wherever the move list is hidden, the moves are grouped by their respective Tutors, so if you find 3-4 moves grouped together, you certainly find the whole list.

Link to comment
Share on other sites

Since Andi didn't give where that RAM was located in the memory (usually in dumps it starts at 0x00000000 rather than 0x02000000), I set out to find it in the RAM myself :P

The string that Andi found is located in the RAM offset : 0x224C048 for the Tutor (edit: this location varies).

scrcmd_shop.c is what is right before it, indicating that script command shop is what's being grabbed.

As for the structure, it looks like u32 & u32 for Move and Shard Quantity.

The script the shopkeeper uses WAS located at 224BC84 (again, it varies), which isn't the typical location for the main scripts. I'm now looking for what script file he's located in. For now, here's a barebones parse of what his script is:

Script 1: 00000014
~~~~~Script 1~~~~~~
SetVarEqVal (0x0028) Var_32 Num_0
SetVarEqVal (0x0028) Var_33 Num_0
SetVarEqVal (0x0028) Var_34 Num_0
SetVar29 (0x0029) Var_33 Var_0
SetVar29 (0x0029) Var_34 Var_1
Logic09 (0x0009)  Var_34
Logic08 (0x0008)  Num_0
Logic11 (0x0011)  Num_5
IfThenGoTo (0x001F) 0xFF jump=0x0000000C
Message1 (0x003C) MID=Num_4 NPC=32785
CompareAtoB (0x0019) A=Var_33 B=Num_246
IfThenGoTo (0x001F) 0x01 jump=0x0000002D
CompareAtoB (0x0019) A=Var_33 B=Num_245
IfThenGoTo (0x001F) 0x01 jump=0x00000020
CompareAtoB (0x0019) A=Var_33 B=Num_244
IfThenGoTo (0x001F) 0x01 jump=0x00000013
CompareAtoB (0x0019) A=Var_33 B=Num_243
IfThenGoTo (0x001F) 0x01 jump=0x00000006
GoTo (0x001E) jump=0x0000000C
CallRoutine (0x0004) 0x000001DE
GoTo (0x001E) jump=0x00000032
CompareAtoB (0x0019) A=Var_33 B=Num_254
IfThenGoTo (0x001F) 0x01 jump=0x00000013
CompareAtoB (0x0019) A=Var_33 B=Num_253
IfThenGoTo (0x001F) 0x01 jump=0x00000006
GoTo (0x001E) jump=0x0000000C
CallRoutine (0x0004) 0x00000153
GoTo (0x001E) jump=0x00000006
CallRoutine (0x0004) 0x00000002
EndStdReturn[**] (0x001D)
0x8023
0x0
SetVarEqVal (0x0028) Var_36 Num_0
SetVarEqVal (0x0028) Var_37 Num_0
Logic09 (0x0009)  Var_34
Logic08 (0x0008)  Num_2
Logic11 (0x0011)  Num_1
IfThenGoTo (0x001F) 0xFF jump=0x00000012
Message1 (0x003C) MID=Num_1 NPC=32785
GoTo (0x001E) jump=0x0000000C
Message1 (0x003C) MID=Num_0 NPC=32785
SetVarEqVal (0x0028) Var_36 Num_1
SetVarEqVal (0x0028) Var_37 Num_1
Logic09 (0x0009)  Var_37
Logic08 (0x0008)  Num_1
Logic11 (0x0011)  Num_1
IfThenGoTo (0x001F) 0xFF jump=0x000000BF
CompareAtoB (0x0019) A=Var_36 B=Num_0
IfThenGoTo (0x001F) 0x01 jump=0x00000006
GoTo (0x001E) jump=0x00000018
Message1 (0x003C) MID=Num_2 NPC=32785
SetVarEqVal (0x0028) Var_36 Num_1
GoTo (0x001E) jump=0x0000008E
CompareAtoB (0x0019) A=Var_36 B=Num_1
IfThenGoTo (0x001F) 0x01 jump=0x00000006
GoTo (0x001E) jump=0x00000012
CallRoutine (0x0004) 0x00000112
SetVar29 (0x0029) Var_36 Var_32
GoTo (0x001E) jump=0x00000069
CompareAtoB (0x0019) A=Var_36 B=Num_2
IfThenGoTo (0x001F) 0x01 jump=0x00000006
GoTo (0x001E) jump=0x00000012
CallRoutine (0x0004) 0x00000143
SetVar29 (0x0029) Var_36 Var_32
GoTo (0x001E) jump=0x00000044
CompareAtoB (0x0019) A=Var_36 B=Num_3
IfThenGoTo (0x001F) 0x01 jump=0x00000006
GoTo (0x001E) jump=0x00000012
CallRoutine (0x0004) 0x0000015F
SetVar29 (0x0029) Var_36 Var_32
GoTo (0x001E) jump=0x0000001F
CompareAtoB (0x0019) A=Var_36 B=Num_255
IfThenGoTo (0x001F) 0x01 jump=0x00000006
GoTo (0x001E) jump=0x0000000C
SetVarEqVal (0x0028) Var_37 Num_0
GoTo (0x001E) jump=0x00000000
GoTo (0x001E) jump=0xFFFFFF2E
Message1 (0x003C) MID=Num_3 NPC=32785
WaitKeyPress (0x0032)
CloseMessage (0x003E)
SetVarEqVal (0x0028) Var_37 Num_0
SetVarEqVal (0x0028) Var_36 Num_0
SetVarEqVal (0x0028) Var_35 Num_0
End???[*TR] (0x0005)
SetVarEqVal (0x0028) Var_38 Num_0
SetVarEqVal (0x0028) Var_39 Num_0
SetVarEqVal (0x0028) Var_40 Num_0
Message1 (0x003C) MID=Num_8 NPC=32785
PopYesNoVar (0x0047) Var_38
Logic09 (0x0009)  Var_38
Logic08 (0x0008)  Num_0
Logic11 (0x0011)  Num_1
IfThenGoTo (0x001F) 0xFF jump=0x00000006
CallRoutine (0x0004) 0x0000008E
Message1 (0x003C) MID=Num_9 NPC=32785
WaitKeyPress (0x0032)
CloseMessage (0x003E)
SetVarEqVal (0x0028) Var_40 Num_0
SetVarEqVal (0x0028) Var_39 Num_0
SetVarEqVal (0x0028) Var_38 Num_0
End???[*TR] (0x0005)
SetVarEqVal (0x0028) Var_41 Num_0
CallRoutine (0x0004) 0x0000005E
SetVarEqVal (0x0028) Var_41 Num_0
End???[*TR] (0x0005)
SetVarEqVal (0x0028) Var_42 Num_0
?????Multi2 (0x00B2) A=0x11F B=0x1 C=0x0 D=0x100 16=0x2A01 E=44928
ScriptText??? (0x00AF) A=Num_5 B=Var_16383 C=Num_2
ScriptText??? (0x00AF) A=Num_6 B=Var_16383 C=Num_3
ScriptText??? (0x00AF) A=Num_7 B=Var_16383 C=Num_255
???? (0x0077)
Logic09 (0x0009)  Var_42
Logic08 (0x0008)  Var_16382
Logic11 (0x0011)  Num_1
IfThenGoTo (0x001F) 0xFF jump=0x0000000C
SetVarEqVal (0x0028) Var_32 Num_255
GoTo (0x001E) jump=0x00000006
SetVar29 (0x0029) Var_32 Var_42
SetVarEqVal (0x0028) Var_42 Num_0
End???[*TR] (0x0005)
SetVarEqVal (0x0028) Var_43 Num_0
SetVarEqVal (0x0028) Var_43 Num_1
CloseMessage (0x003E)
0x149
0x8021
0x802B
Logic09 (0x0009)  Var_43
Logic08 (0x0008)  Num_0
Logic11 (0x0011)  Num_1
IfThenGoTo (0x001F) 0xFF jump=0x0000000C
SetVarEqVal (0x0028) Var_32 Num_255
GoTo (0x001E) jump=0x00000006
SetVarEqVal (0x0028) Var_32 Num_0
SetVarEqVal (0x0028) Var_43 Num_0
End???[*TR] (0x0005)
SetVarEqVal (0x0028) Var_44 Num_0
SetVarEqVal (0x0028) Var_45 Num_0
0x1A4
0x1A7
CloseMessage (0x003E)
0x14B
0x14E
0x0
0x802C
0x802D
0x14A
0x1A3
0x1A7
Logic09 (0x0009)  Var_44
Logic08 (0x0008)  Num_0
Logic11 (0x0011)  Num_1
IfThenGoTo (0x001F) 0xFF jump=0x0000000C
SetVarEqVal (0x0028) Var_32 Num_255
GoTo (0x001E) jump=0x00000006
SetVarEqVal (0x0028) Var_32 Num_0
SetVarEqVal (0x0028) Var_45 Num_0
SetVarEqVal (0x0028) Var_44 Num_0
End???[*TR] (0x0005)
SetVarEqVal (0x0028) Var_34 Num_0
SetVarEqVal (0x0028) Var_33 Num_0
0x0
0x5200
0x46
0x1800
?????Multi2 (0x00B2) A=0x2800 B=0xA928 C=0x24A9 D=0x224 16=0x2 E=0

-- beyond here it errors out due to not all commands being known 

0x0
CallRoutine (0x0004) 0x6373194D
0x6372
0x646D
0x735F
0x6F68
0x2E70
0x63
0xBE34
0xDA00
0x125
0xDFC5
0xBA84
0x7
0xF5
0x1
0x0
0xD
0x0
0x15
0x0
0x1E58
??? (0x0227) A=Cont_10020 B=Num_546
0xDA24
0x221
0x3024
0x222
0x7124
0x222
0xAE24
0x222
0x183
0x0
End (0x0002)
~~~~~~Finish~~~~~~
0x0
script returned but is still running registered functions

script begins in scriptnarc @ 7CC78, corresponds to script file 6_1247.

Depending on what tutor you talk to, the list that Andi gave will be different. No idea where the table is from though!

shardchange.png

Was able to change the move he gives out. Most likely the text of the menu is set within the script, but when selecting a move it loads the proper text.

Link to comment
Share on other sites

hahahaha sorry for i not give the offset :P EC01 0000 0800 0000 0C00 0000 (on around 0x1D0D60) ... is for blue shard.

is seems that RAM data is combining two or more data, is same as pokemart narc on bw2 too.

04000000 C8000000 (on around 0x24B38C is not including name), is combing pokemart + (sell value*10) from item data. is seems temporary data on ram.

P_black2_U_19_1145.png

wew maximum value is 4,294,967,295 O.o

....

ow is shared data. so is can be different each time.

Link to comment
Share on other sites

  • 8 months later...

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...