1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
#include "global.h"
#include "memory.h"
#include "text.h"
#include "item.h"
#include "team_inventory.h"
#include "menu.h"
extern struct TeamInventory *gTeamInventory_203B460;
extern void sub_8092C84(u8 *, u16);
extern void sub_8099690(u32);
extern u32 sub_801B2F4(void);
extern void sub_801B064(s32);
extern void sub_801B200(void);
extern void sub_801B2AC(void);
extern void sub_801B2D8(void);
extern void nullsub_37();
extern void sub_801B080();
extern u32 gUnknown_80DB9BC;
extern u32 gUnknown_80DB9E4;
extern u32 gUnknown_80DBA0C;
extern u8 gUnknown_202E1C8[0x50];
extern bool8 IsHMItem(u8);
extern void DisplayGulpinDialogueSprite(u32, u32, u32 *);
extern void sub_801B178(void);
extern void sub_8094060(u32 *, u32 *);
extern void PlaySound(u32);
extern void sub_80141B4(u32 *, u32, u32 ,u32);
extern void sub_8014248(u32 *, u32, u32, struct MenuItem *, u32, u32, u32, u32, u32);
struct subStruct_203B22C
{
u8 fill0[0x2C];
u32 unk2C;
};
struct unkStruct_203B22C
{
// size: 0xa4
s32 state;
u32 unk4;
u8 unk8; // item index
u16 unkA; // item move??
u32 unkC;
u8 fill10[0x58 - 0x10];
s16 unk58;
u16 unk5A;
struct subStruct_203B22C *unk5C;
u32 unk60;
/* 0x64 */ struct MenuItem menuItems[8];
};
extern struct unkStruct_203B22C *gUnknown_203B22C;
u32 sub_801AFA4(u32 r0)
{
gUnknown_203B22C = MemoryAlloc(sizeof(struct unkStruct_203B22C), 8);
gUnknown_203B22C->unk4 = r0;
gUnknown_203B22C->unk8 = gTeamInventory_203B460->teamItems[r0].itemIndex;
gUnknown_203B22C->unkA = GetItemMove(gUnknown_203B22C->unk8);
sub_8092C84(gUnknown_202E1C8, gUnknown_203B22C->unkA);
sub_8099690(0);
if(sub_801B2F4() == 0)
{
sub_801B064(3);
}
else
{
gUnknown_203B22C->unk60 = 4;
sub_801B064(0);
}
return 1;
}
u32 sub_801B00C(void)
{
switch(gUnknown_203B22C->state)
{
case 4:
return 3;
case 0:
sub_801B200();
break;
case 1:
sub_801B2AC();
break;
default:
sub_801B2D8();
break;
}
return 0;
}
void sub_801B048(void)
{
if(gUnknown_203B22C != NULL)
{
MemoryFree(gUnknown_203B22C);
gUnknown_203B22C = NULL;
}
}
void sub_801B064(s32 newState)
{
gUnknown_203B22C->state = newState;
nullsub_37();
sub_801B080();
}
void nullsub_37(void)
{
}
void sub_801B080(void)
{
switch(gUnknown_203B22C->state)
{
case 0:
sub_801B178();
// #+Who will learn the move
// #+#C5$m7#R?
sub_8014248(&gUnknown_80DB9BC, 0, gUnknown_203B22C->unk60, gUnknown_203B22C->menuItems, 0, 4, 0, 0, 0x20);
break;
case 1:
DisplayGulpinDialogueSprite(2, gUnknown_203B22C->unk58, &gUnknown_203B22C->unkC);
break;
case 2:
sub_8094060(&gUnknown_203B22C->unkC, &gUnknown_203B22C->unk5C->unk2C);
if(!IsHMItem(gUnknown_203B22C->unk8))
{
gTeamInventory_203B460->teamItems[gUnknown_203B22C->unk4].numItems = gUnknown_203B22C->unk8 - 0x7D;
gTeamInventory_203B460->teamItems[gUnknown_203B22C->unk4].itemIndex = ITEM_ID_USED_TM;
}
PlaySound(0x9C << 1);
// #+CM$m8#R learned
// #+the move #C5$m7#R!
sub_80141B4(&gUnknown_80DB9E4, 0, 0, 0x121);
break;
case 3:
// #+No one in the current team
// #+can learn this move.
sub_80141B4(&gUnknown_80DBA0C, 0, 0, 0x121);
break;
default:
case 4:
break;
}
}
|