summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/learn_move.s18
-rw-r--r--graphics/pokedex/arrows.pngbin0 -> 303 bytes
-rw-r--r--include/learn_move.h7
-rw-r--r--ld_script.txt2
-rw-r--r--src/learn_move.c139
-rw-r--r--sym_ewram.txt11
6 files changed, 167 insertions, 10 deletions
diff --git a/asm/learn_move.s b/asm/learn_move.s
index 109f1a32e..2bd50789c 100644
--- a/asm/learn_move.s
+++ b/asm/learn_move.s
@@ -5,6 +5,7 @@
.text
+/*
thumb_func_start sub_8160624
sub_8160624: @ 8160624
push {lr}
@@ -14,7 +15,9 @@ sub_8160624: @ 8160624
pop {r0}
bx r0
thumb_func_end sub_8160624
+*/
+/*
thumb_func_start sub_8160638
sub_8160638: @ 8160638
push {lr}
@@ -35,7 +38,9 @@ sub_8160638: @ 8160638
bx r0
.pool
thumb_func_end sub_8160638
+*/
+/*
thumb_func_start sub_8160664
sub_8160664: @ 8160664
push {r4,lr}
@@ -60,7 +65,9 @@ _08160688:
bx r0
.pool
thumb_func_end sub_8160664
+*/
+/*
thumb_func_start sub_81606A0
sub_81606A0: @ 81606A0
push {r4-r6,lr}
@@ -100,8 +107,8 @@ sub_81606A0: @ 81606A0
bl ListMenuInit
ldr r1, [r6]
movs r2, 0x89
- lsls r2, 1
- adds r1, r2
+ lsls r2, 1 //0x112
+ adds r1, r2 //partymon + 0x112
strb r0, [r1]
movs r0, 0
movs r1, 0
@@ -114,7 +121,9 @@ sub_81606A0: @ 81606A0
bx r0
.pool
thumb_func_end sub_81606A0
+*/
+/*
thumb_func_start sub_8160740
sub_8160740: @ 8160740
push {r4,r5,lr}
@@ -171,7 +180,9 @@ sub_8160740: @ 8160740
bx r0
.pool
thumb_func_end sub_8160740
+*/
+/*
thumb_func_start sub_81607EC
sub_81607EC: @ 81607EC
push {lr}
@@ -198,7 +209,9 @@ sub_81607EC: @ 81607EC
bx r0
.pool
thumb_func_end sub_81607EC
+*/
+/*
thumb_func_start sub_816082C
sub_816082C: @ 816082C
push {lr}
@@ -211,6 +224,7 @@ sub_816082C: @ 816082C
pop {r0}
bx r0
thumb_func_end sub_816082C
+*/
thumb_func_start sub_816084C
sub_816084C: @ 816084C
diff --git a/graphics/pokedex/arrows.png b/graphics/pokedex/arrows.png
new file mode 100644
index 000000000..2abf39366
--- /dev/null
+++ b/graphics/pokedex/arrows.png
Binary files differ
diff --git a/include/learn_move.h b/include/learn_move.h
new file mode 100644
index 000000000..034d689d4
--- /dev/null
+++ b/include/learn_move.h
@@ -0,0 +1,7 @@
+#ifndef GUARD_LEARN_MOVE_H
+#define GUARD_LEARN_MOVE_H
+
+void sub_8160624(void);
+void sub_8160638(void);
+
+#endif //GUARD_LEARN_MOVE_H
diff --git a/ld_script.txt b/ld_script.txt
index ea17676bf..69e677e9b 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -204,6 +204,7 @@ SECTIONS {
src/battle_controller_safari.o(.text);
src/fldeff_sweetscent.o(.text);
asm/battle_anim_815A0D4.o(.text);
+ src/learn_move.o(.text);
asm/learn_move.o(.text);
src/fldeff_softboiled.o(.text);
src/decoration_inventory.o(.text);
@@ -486,6 +487,7 @@ SECTIONS {
src/battle_controller_safari.o(.rodata);
data/battle_anim_815A0D4.o(.rodata);
data/learn_move.o(.rodata);
+ src/learn_move.o(.rodata);
src/roamer.o(.rodata);
data/battle_tower.o(.rodata);
src/use_pokeblock.o(.rodata);
diff --git a/src/learn_move.c b/src/learn_move.c
new file mode 100644
index 000000000..addae6a38
--- /dev/null
+++ b/src/learn_move.c
@@ -0,0 +1,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();
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 37a34b19a..4d57c5a19 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -655,19 +655,14 @@ gUnknown_0203ABB8: @ 203ABB8
.space 0x4
.include "src/save.o"
-
+
.space 0x4 /*unused var?*/
.include "src/mystery_event_script.o"
-gUnknown_0203BC34: @ 203BC34
- .space 0x4
-
-gUnknown_0203BC38: @ 203BC38
- .space 0x8
-
+ .include "src/learn_move.o"
.include "src/decoration_inventory.o"
- .include "src/roamer.o"
+ .include "src/roamer.o"
gUnknown_0203BC88: @ 203BC88
.space 0x4