summaryrefslogtreecommitdiff
path: root/src/learn_move.c
blob: addae6a385ceb4aad6ca758038a1c545e19d8454 (plain)
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
#include "global.h"
#include "main.h"
#include "task.h"
#include "script.h"
#include "sprite.h"
#include "palette.h"
#include "menu.h"
#include "menu_helpers.h"
#include "list_menu.h"
#include "malloc.h"
#include "field_screen.h"
#include "event_data.h"
#include "bg.h"
#include "gpu_regs.h"
#include "learn_move.h"

EWRAM_DATA u8 *gUnknown_0203BC34 = 0;
EWRAM_DATA u8 gUnknown_0203BC38[8] = {0};

extern void (*gFieldCallback)(void);
extern const struct SpritePalette gUnknown_085CEBB8;
extern const struct SpriteSheet gUnknown_085CEBB0;
extern const struct BgTemplate gUnknown_085CEC28;
extern void sub_81D2824(u16);

void sub_8160868(void);
void sub_8161280(void);
void sub_81610B8(void);
void sub_816082C(void);

static void sub_8160664(u8 taskId);
void sub_81606A0(void); //CB2_InitLearnMove
void sub_8160740(void);
void sub_81607EC(void);
void sub_816082C(void);

void sub_8160624(void) //VBlankCB_LearnMove
{
  LoadOam();
  ProcessSpriteCopyRequests();
  TransferPlttBuffer();
}

void sub_8160638(void) //TeachMoveTutorMove
{
  ScriptContext2_Enable();
  CreateTask(sub_8160664, 0xA);
  BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
}

void sub_8160664(u8 taskId)
{
  if (!gPaletteFade.active)
  {
    SetMainCallback2(sub_81606A0);
    gFieldCallback = sub_80AF168;
    DestroyTask(taskId);
  }
}

// Doesn't match
void sub_81606A0(void) //CB2_InitLearnMove
{
  ResetSpriteData();
  FreeAllSpritePalettes();
  ResetTasks();
  clear_scheduled_bg_copies_to_vram();

  gUnknown_0203BC34 = AllocZeroed(0x118); //gUnknown_0203BC34 ?
  gUnknown_0203BC34[68] = gSpecialVar_0x8004;

  SetVBlankCallback(sub_8160624);
  sub_81607EC();
  sub_81D2824(0);

  //gUnknown_0203BC38 ?
  gUnknown_0203BC38[0] = 0;
  gUnknown_0203BC38[2] = 0;
  gUnknown_0203BC38[4] = 0;

  sub_8161280();

  LoadSpriteSheet(&gUnknown_085CEBB0);
  LoadSpritePalette(&gUnknown_085CEBB8);
  sub_81610B8();

  gUnknown_0203BC34[274] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203BC38[0], gUnknown_0203BC38[2]);
  FillPalette(0, 0, 2);
  SetMainCallback2(sub_816082C);
}

// Doesn't match
void sub_8160740(void)
{
  ResetSpriteData();
  FreeAllSpritePalettes();
  ResetTasks();
  clear_scheduled_bg_copies_to_vram();

  gUnknown_0203BC34 = AllocZeroed(0x118); //gUnknown_0203BC34 ?
  gUnknown_0203BC34[68] = gSpecialVar_0x8004;
  gUnknown_0203BC34[69] = gSpecialVar_0x8005;

  SetVBlankCallback(sub_8160624);
  sub_81607EC();

  //gUnknown_0203BC38 ?
  sub_81D2824(gUnknown_0203BC38[4]);
  sub_8161280();

  LoadSpriteSheet(&gUnknown_085CEBB0);
  LoadSpritePalette(&gUnknown_085CEBB8);

  gUnknown_0203BC34[274] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203BC38[0], gUnknown_0203BC38[2]);
  FillPalette(0, 0, 2);
  SetMainCallback2(sub_816082C);
}

void sub_81607EC(void)
{
  ResetVramOamAndBgCntRegs();
  ResetBgsAndClearDma3BusyFlags(0);
  InitBgsFromTemplates(0, &gUnknown_085CEC28, 2);
  ResetAllBgsCoordinates();
  SetGpuReg(0, 0x1040);
  ShowBg(0);
  ShowBg(1);
  SetGpuReg(0x50, 0);
}

void sub_816082C(void)
{
  sub_8160868();
  RunTasks();
  AnimateSprites();
  BuildOamBuffer();
  do_scheduled_bg_tilemap_copies_to_vram();
  UpdatePaletteFade();
}