diff options
author | Diegoisawesome <diego@domoreaweso.me> | 2018-08-11 19:03:38 -0700 |
---|---|---|
committer | Diegoisawesome <diego@domoreaweso.me> | 2018-08-11 19:03:38 -0700 |
commit | a000eb4f3619c1df9326961b3afe8a4392c05827 (patch) | |
tree | e2a559568ddb7e78b03d2ab88517ccc58307aee4 /src | |
parent | 40cf61307b411ea4de858902c7081fde8ef71ea5 (diff) | |
parent | 2f96282c7f56ae90bc62b2710c8430abd2b345f3 (diff) |
Merge branch 'learn_move' of git://github.com/Edwearth/pokeemerald into Edwearth-learn_move
Diffstat (limited to 'src')
-rw-r--r-- | src/learn_move.c | 139 |
1 files changed, 139 insertions, 0 deletions
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(); +} |