diff options
-rw-r--r-- | asm/learn_move.s | 1954 | ||||
-rw-r--r-- | baserom.ips | bin | 414160 -> 413412 bytes | |||
-rw-r--r-- | data/battle_anim_effects_3.s | 2 | ||||
-rw-r--r-- | data/learn_move.s | 28 | ||||
-rw-r--r-- | data/strings.s | 18 | ||||
-rw-r--r-- | graphics/learn_move/interface_sprites.png | bin | 0 -> 316 bytes | |||
-rw-r--r-- | include/graphics.h | 6 | ||||
-rw-r--r-- | include/strings.h | 11 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/battle_tower.c | 8 | ||||
-rw-r--r-- | src/learn_move.c | 842 | ||||
-rw-r--r-- | sym_ewram.txt | 5 |
12 files changed, 881 insertions, 1997 deletions
diff --git a/asm/learn_move.s b/asm/learn_move.s deleted file mode 100644 index 36b88bc20..000000000 --- a/asm/learn_move.s +++ /dev/null @@ -1,1954 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80E4620 -sub_80E4620: @ 80E4620 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80E4620 - - thumb_func_start DisplayMoveTutorMenu -DisplayMoveTutorMenu: @ 80E4634 - push {lr} - sub sp, 0x4 - bl ScriptContext2_Enable - ldr r0, _080E465C @ =sub_80E4660 - movs r1, 0xA - bl CreateTask - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080E465C: .4byte sub_80E4660 - thumb_func_end DisplayMoveTutorMenu - - thumb_func_start sub_80E4660 -sub_80E4660: @ 80E4660 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080E468C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080E4684 - ldr r0, _080E4690 @ =sub_80E478C - bl SetMainCallback2 - ldr r1, _080E4694 @ =gFieldCallback - ldr r0, _080E4698 @ =FieldCallback_ReturnToEventScript2 - str r0, [r1] - adds r0, r4, 0 - bl DestroyTask -_080E4684: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E468C: .4byte gPaletteFade -_080E4690: .4byte sub_80E478C -_080E4694: .4byte gFieldCallback -_080E4698: .4byte FieldCallback_ReturnToEventScript2 - thumb_func_end sub_80E4660 - - thumb_func_start sub_80E469C -sub_80E469C: @ 80E469C - push {r4,r5,lr} - sub sp, 0xC - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _080E4774 @ =gUnknown_83FFA3C - movs r0, 0 - movs r2, 0x2 - bl InitBgsFromTemplates - bl ResetTempTileDataBuffers - ldr r0, _080E4778 @ =gUnknown_83FFA44 - bl InitWindows - lsls r0, 16 - cmp r0, 0 - beq _080E476C - bl DeactivateAllTextPrinters - movs r5, 0 -_080E46C6: - lsls r4, r5, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl ClearWindowTilemap - adds r0, r4, 0 - movs r1, 0 - bl FillWindowPixelBuffer - adds r5, 0x1 - cmp r5, 0x8 - bls _080E46C6 - movs r0, 0x7 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0xF - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - ldr r0, _080E477C @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x99 - lsls r0, 2 - adds r1, r0 - movs r0, 0x1 - bl SetBgTilemapBuffer - movs r0, 0 - movs r1, 0x1 - movs r2, 0xE0 - bl TextWindow_SetUserSelectedFrame - movs r0, 0xD0 - movs r1, 0x1 - bl sub_8107D38 - ldr r0, _080E4780 @ =gUnknown_8E97DDC - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _080E4784 @ =gUnknown_8E97DFC - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndLoadBgGfxUsingHeap - ldr r1, _080E4788 @ =gUnknown_8E97EC4 - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x16 - movs r1, 0 - bl SetGpuReg - movs r0, 0x14 - movs r1, 0 - bl SetGpuReg -_080E476C: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E4774: .4byte gUnknown_83FFA3C -_080E4778: .4byte gUnknown_83FFA44 -_080E477C: .4byte gUnknown_203AAB4 -_080E4780: .4byte gUnknown_8E97DDC -_080E4784: .4byte gUnknown_8E97DFC -_080E4788: .4byte gUnknown_8E97EC4 - thumb_func_end sub_80E469C - - thumb_func_start sub_80E478C -sub_80E478C: @ 80E478C - push {r4,lr} - movs r0, 0 - movs r1, 0 - bl SetGpuReg - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetTasks - ldr r4, _080E47EC @ =gUnknown_203AAB4 - ldr r0, _080E47F0 @ =0x00000a6c - bl AllocZeroed - str r0, [r4] - bl sub_80E4F54 - ldr r0, [r4] - ldr r1, _080E47F4 @ =gSpecialVar_0x8004 - ldrh r1, [r1] - movs r2, 0x98 - lsls r2, 2 - adds r0, r2 - strb r1, [r0] - bl sub_80E50CC - ldr r0, _080E47F8 @ =sub_80E4620 - bl SetVBlankCallback - bl sub_80E469C - bl sub_80E5004 - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - ldr r0, _080E47FC @ =sub_80E4870 - bl SetMainCallback2 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E47EC: .4byte gUnknown_203AAB4 -_080E47F0: .4byte 0x00000a6c -_080E47F4: .4byte gSpecialVar_0x8004 -_080E47F8: .4byte sub_80E4620 -_080E47FC: .4byte sub_80E4870 - thumb_func_end sub_80E478C - - thumb_func_start sub_80E4800 -sub_80E4800: @ 80E4800 - push {lr} - movs r0, 0 - movs r1, 0 - bl SetGpuReg - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetTasks - bl sub_80E50CC - ldr r0, _080E485C @ =gUnknown_203AAB4 - ldr r0, [r0] - ldr r1, _080E4860 @ =gSpecialVar_0x8005 - ldrh r1, [r1] - ldr r2, _080E4864 @ =0x00000261 - adds r0, r2 - strb r1, [r0] - ldr r0, _080E4868 @ =sub_80E4620 - bl SetVBlankCallback - bl sub_80E469C - bl sub_80E5004 - movs r0, 0 - movs r1, 0 - movs r2, 0x2 - bl FillPalette - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - ldr r0, _080E486C @ =sub_80E4870 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_080E485C: .4byte gUnknown_203AAB4 -_080E4860: .4byte gSpecialVar_0x8005 -_080E4864: .4byte 0x00000261 -_080E4868: .4byte sub_80E4620 -_080E486C: .4byte sub_80E4870 - thumb_func_end sub_80E4800 - - thumb_func_start sub_80E4870 -sub_80E4870: @ 80E4870 - push {r4,lr} - movs r0, 0x7 - bl IsTextPrinterActive - lsls r0, 16 - cmp r0, 0 - bne _080E4882 - bl sub_80E48F4 -_080E4882: - ldr r4, _080E48B8 @ =gUnknown_203AAB4 - ldr r0, [r4] - ldr r1, _080E48BC @ =0x0000025f - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080E489E - bl sub_80E54C0 - ldr r0, [r4] - ldr r1, _080E48BC @ =0x0000025f - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_080E489E: - bl RunTasks - bl RunTextPrinters - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E48B8: .4byte gUnknown_203AAB4 -_080E48BC: .4byte 0x0000025f - thumb_func_end sub_80E4870 - - thumb_func_start sub_80E48C0 -sub_80E48C0: @ 80E48C0 - push {r4,lr} - sub sp, 0x8 - adds r1, r0, 0 - ldr r4, _080E48F0 @ =gStringVar4 - adds r0, r4, 0 - bl StringExpandPlaceholders - bl GetTextSpeedSetting - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x7 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x2 - bl sub_80E559C - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E48F0: .4byte gStringVar4 - thumb_func_end sub_80E48C0 - - thumb_func_start sub_80E48F4 -sub_80E48F4: @ 80E48F4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - ldr r1, _080E4918 @ =gUnknown_203AAB4 - ldr r0, [r1] - ldrb r0, [r0] - adds r7, r1, 0 - cmp r0, 0x21 - bls _080E490C - b _080E4EDA -_080E490C: - lsls r0, 2 - ldr r1, _080E491C @ =_080E4920 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080E4918: .4byte gUnknown_203AAB4 -_080E491C: .4byte _080E4920 - .align 2, 0 -_080E4920: - .4byte _080E49A8 - .4byte _080E49F4 - .4byte _080E4A0C - .4byte _080E4A14 - .4byte _080E4A38 - .4byte _080E4EDA - .4byte _080E4EDA - .4byte _080E4EDA - .4byte _080E4A3E - .4byte _080E4A68 - .4byte _080E4EDA - .4byte _080E4EDA - .4byte _080E4AF4 - .4byte _080E4B20 - .4byte _080E4CFA - .4byte _080E4D18 - .4byte _080E4B58 - .4byte _080E4B70 - .4byte _080E4B98 - .4byte _080E4C5A - .4byte _080E4C70 - .4byte _080E4CE4 - .4byte _080E4CE8 - .4byte _080E4EDA - .4byte _080E4BDC - .4byte _080E4BF4 - .4byte _080E4C1C - .4byte _080E4C54 - .4byte _080E4D48 - .4byte _080E4D8C - .4byte _080E4E70 - .4byte _080E4E90 - .4byte _080E4EA8 - .4byte _080E4EC0 -_080E49A8: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - bl sub_80E5444 - ldr r4, _080E49EC @ =gUnknown_203AAB4 - ldr r1, [r4] - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - bl sub_80E4EF0 - movs r0, 0 - bl sub_80E4F0C - bl sub_80E5300 - ldr r0, [r4] - ldr r1, _080E49F0 @ =0x0000025f - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - b _080E4EDA - .align 2, 0 -_080E49EC: .4byte gUnknown_203AAB4 -_080E49F0: .4byte 0x0000025f -_080E49F4: - ldr r0, _080E4A08 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080E4A02 - b _080E4EDA -_080E4A02: - ldr r1, [r7] - movs r0, 0x4 - b _080E4ED8 - .align 2, 0 -_080E4A08: .4byte gPaletteFade -_080E4A0C: - ldr r1, [r7] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 -_080E4A14: - movs r0, 0 - bl sub_80E4F0C - ldr r2, _080E4A30 @ =gUnknown_203AAB4 - ldr r0, [r2] - ldr r3, _080E4A34 @ =0x0000025f - adds r0, r3 - movs r1, 0x1 - strb r1, [r0] - ldr r1, [r2] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4A30: .4byte gUnknown_203AAB4 -_080E4A34: .4byte 0x0000025f -_080E4A38: - bl sub_80E5204 - b _080E4EDA -_080E4A3E: - ldr r0, _080E4A60 @ =gUnknown_83FFA8C - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, _080E4A64 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4A60: .4byte gUnknown_83FFA8C -_080E4A64: .4byte gUnknown_203AAB4 -_080E4A68: - bl sub_80E5574 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080E4A88 - cmp r1, 0 - bgt _080E4A82 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080E4AE6 - b _080E4EDA -_080E4A82: - cmp r1, 0x1 - beq _080E4AE6 - b _080E4EDA -_080E4A88: - ldr r4, _080E4AC8 @ =gUnknown_203AAB4 - ldr r2, [r4] - movs r6, 0x98 - lsls r6, 2 - adds r0, r2, r6 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080E4ACC @ =gPlayerParty - adds r0, r1 - ldr r3, _080E4AD0 @ =0x00000a67 - adds r1, r2, r3 - ldrb r1, [r1] - lsls r1, 1 - adds r2, 0xE8 - adds r2, r1 - ldrh r1, [r2] - bl GiveMoveToMon - lsls r0, 16 - ldr r1, _080E4AD4 @ =0xffff0000 - cmp r0, r1 - beq _080E4AE0 - ldr r0, _080E4AD8 @ =gUnknown_841E405 - bl sub_80E48C0 - ldr r1, _080E4ADC @ =gSpecialVar_0x8004 - movs r0, 0x1 - strh r0, [r1] - ldr r1, [r4] - movs r0, 0x1F - b _080E4ED8 - .align 2, 0 -_080E4AC8: .4byte gUnknown_203AAB4 -_080E4ACC: .4byte gPlayerParty -_080E4AD0: .4byte 0x00000a67 -_080E4AD4: .4byte 0xffff0000 -_080E4AD8: .4byte gUnknown_841E405 -_080E4ADC: .4byte gSpecialVar_0x8004 -_080E4AE0: - ldr r1, [r4] - movs r0, 0x10 - b _080E4ED8 -_080E4AE6: - ldr r0, _080E4AF0 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x3 - b _080E4ED8 - .align 2, 0 -_080E4AF0: .4byte gUnknown_203AAB4 -_080E4AF4: - ldr r0, _080E4B18 @ =gUnknown_83FFA8C - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, _080E4B1C @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4B18: .4byte gUnknown_83FFA8C -_080E4B1C: .4byte gUnknown_203AAB4 -_080E4B20: - bl sub_80E5574 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080E4B40 - cmp r1, 0 - bgt _080E4B3A - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080E4B4C - b _080E4EDA -_080E4B3A: - cmp r1, 0x1 - beq _080E4B4C - b _080E4EDA -_080E4B40: - ldr r0, _080E4B48 @ =gSpecialVar_0x8004 - strh r1, [r0] - b _080E4ED2 - .align 2, 0 -_080E4B48: .4byte gSpecialVar_0x8004 -_080E4B4C: - ldr r0, _080E4B54 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x3 - b _080E4ED8 - .align 2, 0 -_080E4B54: .4byte gUnknown_203AAB4 -_080E4B58: - ldr r0, _080E4B68 @ =gUnknown_841E414 - bl sub_80E48C0 - ldr r0, _080E4B6C @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4B68: .4byte gUnknown_841E414 -_080E4B6C: .4byte gUnknown_203AAB4 -_080E4B70: - ldr r0, _080E4B90 @ =gUnknown_83FFA8C - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, _080E4B94 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x12 - b _080E4ED8 - .align 2, 0 -_080E4B90: .4byte gUnknown_83FFA8C -_080E4B94: .4byte gUnknown_203AAB4 -_080E4B98: - bl sub_80E5574 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080E4BB8 - cmp r1, 0 - bgt _080E4BB2 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080E4BD0 - b _080E4EDA -_080E4BB2: - cmp r1, 0x1 - beq _080E4BD0 - b _080E4EDA -_080E4BB8: - ldr r0, _080E4BC8 @ =gUnknown_841E50C - bl sub_80E48C0 - ldr r0, _080E4BCC @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x13 - b _080E4ED8 - .align 2, 0 -_080E4BC8: .4byte gUnknown_841E50C -_080E4BCC: .4byte gUnknown_203AAB4 -_080E4BD0: - ldr r0, _080E4BD8 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x18 - b _080E4ED8 - .align 2, 0 -_080E4BD8: .4byte gUnknown_203AAB4 -_080E4BDC: - ldr r0, _080E4BEC @ =gUnknown_841E481 - bl sub_80E48C0 - ldr r0, _080E4BF0 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4BEC: .4byte gUnknown_841E481 -_080E4BF0: .4byte gUnknown_203AAB4 -_080E4BF4: - ldr r0, _080E4C14 @ =gUnknown_83FFA8C - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, _080E4C18 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x1A - b _080E4ED8 - .align 2, 0 -_080E4C14: .4byte gUnknown_83FFA8C -_080E4C18: .4byte gUnknown_203AAB4 -_080E4C1C: - bl sub_80E5574 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080E4C3C - cmp r1, 0 - bgt _080E4C36 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080E4C48 - b _080E4EDA -_080E4C36: - cmp r1, 0x1 - beq _080E4C48 - b _080E4EDA -_080E4C3C: - ldr r0, _080E4C44 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x1B - b _080E4ED8 - .align 2, 0 -_080E4C44: .4byte gUnknown_203AAB4 -_080E4C48: - ldr r0, _080E4C50 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x10 - b _080E4ED8 - .align 2, 0 -_080E4C50: .4byte gUnknown_203AAB4 -_080E4C54: - ldr r1, [r7] - movs r0, 0x3 - b _080E4ED8 -_080E4C5A: - ldr r1, [r7] - movs r2, 0 - movs r0, 0x14 - strb r0, [r1] - subs r0, 0x15 - str r2, [sp] - movs r1, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - b _080E4EDA -_080E4C70: - ldr r0, _080E4CC8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080E4C7E - b _080E4EDA -_080E4C7E: - ldr r2, [r7] - ldr r6, _080E4CCC @ =0x00000263 - adds r0, r2, r6 - ldrb r0, [r0] - ldr r3, _080E4CD0 @ =0x00000a68 - adds r1, r2, r3 - ldr r6, _080E4CD4 @ =0x00000a6a - adds r2, r6 - bl ListMenuGetScrollAndRow - bl FreeAllWindowBuffers - ldr r0, _080E4CD8 @ =gPlayerParty - ldr r5, [r7] - movs r2, 0x98 - lsls r2, 2 - adds r1, r5, r2 - ldrb r1, [r1] - ldr r2, _080E4CDC @ =gPlayerPartyCount - ldrb r2, [r2] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _080E4CE0 @ =sub_80E4800 - subs r6, 0x3 - adds r4, r5, r6 - ldrb r4, [r4] - lsls r4, 1 - adds r5, 0xE8 - adds r5, r4 - ldrh r4, [r5] - str r4, [sp] - bl ShowSelectMovePokemonSummaryScreen - ldr r1, [r7] - movs r0, 0x1C - b _080E4ED8 - .align 2, 0 -_080E4CC8: .4byte gPaletteFade -_080E4CCC: .4byte 0x00000263 -_080E4CD0: .4byte 0x00000a68 -_080E4CD4: .4byte 0x00000a6a -_080E4CD8: .4byte gPlayerParty -_080E4CDC: .4byte gPlayerPartyCount -_080E4CE0: .4byte sub_80E4800 -_080E4CE4: - ldr r1, [r7] - b _080E4ED6 -_080E4CE8: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _080E4EDA -_080E4CFA: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _080E4D14 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4D14: .4byte gUnknown_203AAB4 -_080E4D18: - ldr r0, _080E4D3C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080E4D26 - b _080E4EDA -_080E4D26: - bl FreeAllWindowBuffers - ldr r0, _080E4D40 @ =gUnknown_203AAB4 - ldr r0, [r0] - bl Free - ldr r0, _080E4D44 @ =CB2_ReturnToField - bl SetMainCallback2 - b _080E4EDA - .align 2, 0 -_080E4D3C: .4byte gPaletteFade -_080E4D40: .4byte gUnknown_203AAB4 -_080E4D44: .4byte CB2_ReturnToField -_080E4D48: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - ldr r0, _080E4D88 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - bl sub_80E5444 - bl sub_80E4EF0 - bl sub_80E5300 - movs r0, 0x1 - bl sub_80E4F0C - bl sub_80E54C0 - b _080E4EDA - .align 2, 0 -_080E4D88: .4byte gUnknown_203AAB4 -_080E4D8C: - ldr r0, _080E4DAC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080E4D9A - b _080E4EDA -_080E4D9A: - ldr r1, [r7] - ldr r0, _080E4DB0 @ =0x00000261 - adds r2, r1, r0 - ldrb r0, [r2] - cmp r0, 0x4 - bne _080E4DB4 - movs r0, 0x18 - b _080E4ED8 - .align 2, 0 -_080E4DAC: .4byte gPaletteFade -_080E4DB0: .4byte 0x00000261 -_080E4DB4: - movs r4, 0x98 - lsls r4, 2 - adds r0, r1, r4 - ldrb r0, [r0] - movs r6, 0x64 - muls r0, r6 - ldr r5, _080E4E50 @ =gPlayerParty - adds r0, r5 - ldrb r1, [r2] - adds r1, 0xD - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - ldr r2, _080E4E54 @ =gStringVar3 - movs r1, 0xD - mov r9, r1 - mov r1, r9 - muls r1, r0 - ldr r3, _080E4E58 @ =gMoveNames - mov r8, r3 - add r1, r8 - adds r0, r2, 0 - bl StringCopy - ldr r1, [r7] - adds r0, r1, r4 - ldrb r0, [r0] - muls r0, r6 - adds r0, r5 - ldr r2, _080E4E5C @ =0x00000261 - adds r1, r2 - ldrb r1, [r1] - bl RemoveMonPPBonus - ldr r3, [r7] - adds r4, r3, r4 - ldrb r0, [r4] - muls r0, r6 - adds r0, r5 - ldr r4, _080E4E60 @ =0x00000a67 - adds r1, r3, r4 - ldrb r2, [r1] - lsls r2, 1 - adds r1, r3, 0 - adds r1, 0xE8 - adds r1, r2 - ldrh r1, [r1] - ldr r6, _080E4E5C @ =0x00000261 - adds r3, r6 - ldrb r2, [r3] - bl SetMonMoveSlot - ldr r0, _080E4E64 @ =gStringVar2 - ldr r2, [r7] - adds r4, r2, r4 - ldrb r1, [r4] - lsls r1, 1 - adds r2, 0xE8 - adds r2, r1 - ldrh r1, [r2] - mov r2, r9 - muls r2, r1 - adds r1, r2, 0 - add r1, r8 - bl StringCopy - ldr r0, _080E4E68 @ =gUnknown_841E493 - bl sub_80E48C0 - ldr r1, [r7] - movs r0, 0x1E - strb r0, [r1] - ldr r1, _080E4E6C @ =gSpecialVar_0x8004 - movs r0, 0x1 - strh r0, [r1] - b _080E4EDA - .align 2, 0 -_080E4E50: .4byte gPlayerParty -_080E4E54: .4byte gStringVar3 -_080E4E58: .4byte gMoveNames -_080E4E5C: .4byte 0x00000261 -_080E4E60: .4byte 0x00000a67 -_080E4E64: .4byte gStringVar2 -_080E4E68: .4byte gUnknown_841E493 -_080E4E6C: .4byte gSpecialVar_0x8004 -_080E4E70: - ldr r0, _080E4E88 @ =gUnknown_841E4C0 - bl sub_80E48C0 - ldr r0, _080E4E8C @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x1F - strb r0, [r1] - adds r0, 0xE2 - bl PlayFanfare - b _080E4EDA - .align 2, 0 -_080E4E88: .4byte gUnknown_841E4C0 -_080E4E8C: .4byte gUnknown_203AAB4 -_080E4E90: - ldr r0, _080E4EA0 @ =0x00000101 - bl PlayFanfare - ldr r0, _080E4EA4 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x20 - b _080E4ED8 - .align 2, 0 -_080E4EA0: .4byte 0x00000101 -_080E4EA4: .4byte gUnknown_203AAB4 -_080E4EA8: - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _080E4EDA - ldr r0, _080E4EBC @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x21 - b _080E4ED8 - .align 2, 0 -_080E4EBC: .4byte gUnknown_203AAB4 -_080E4EC0: - ldr r0, _080E4EE8 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080E4EDA - movs r0, 0x5 - bl PlaySE -_080E4ED2: - ldr r0, _080E4EEC @ =gUnknown_203AAB4 - ldr r1, [r0] -_080E4ED6: - movs r0, 0xE -_080E4ED8: - strb r0, [r1] -_080E4EDA: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E4EE8: .4byte gMain -_080E4EEC: .4byte gUnknown_203AAB4 - thumb_func_end sub_80E48F4 - - thumb_func_start sub_80E4EF0 -sub_80E4EF0: @ 80E4EF0 - push {r4,lr} - movs r4, 0x6 -_080E4EF4: - lsls r0, r4, 24 - lsrs r0, 24 - movs r1, 0x1 - movs r2, 0xE - bl DrawTextBorderOuter - adds r4, 0x1 - cmp r4, 0x7 - ble _080E4EF4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80E4EF0 - - thumb_func_start sub_80E4F0C -sub_80E4F0C: @ 80E4F0C - push {r4,r5,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080E4F42 - ldr r4, _080E4F4C @ =gStringVar4 - ldr r1, _080E4F50 @ =gUnknown_841E3E3 - adds r0, r4, 0 - bl StringExpandPlaceholders - str r5, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x7 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x2 - bl sub_80E559C - movs r0, 0x7 - bl PutWindowTilemap - movs r0, 0x7 - movs r1, 0x3 - bl CopyWindowToVram -_080E4F42: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E4F4C: .4byte gStringVar4 -_080E4F50: .4byte gUnknown_841E3E3 - thumb_func_end sub_80E4F0C - - thumb_func_start sub_80E4F54 -sub_80E4F54: @ 80E4F54 - push {r4,lr} - ldr r2, _080E4FA4 @ =gUnknown_203AAB4 - ldr r0, [r2] - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - strb r1, [r0, 0x2] - ldr r0, [r2] - strb r1, [r0, 0x19] - ldr r0, [r2] - strb r1, [r0, 0x18] - ldr r0, [r2] - strb r1, [r0, 0x1C] - ldr r0, [r2] - strb r1, [r0, 0x1A] - ldr r0, [r2] - strb r1, [r0, 0x1B] - ldr r0, [r2] - strb r1, [r0, 0x1D] - ldr r0, [r2] - strb r1, [r0, 0x1E] - ldr r0, [r2] - ldr r3, _080E4FA8 @ =0x0000025f - adds r0, r3 - strb r1, [r0] - movs r3, 0 - adds r4, r2, 0 - movs r2, 0 -_080E4F8C: - ldr r0, [r4] - lsls r1, r3, 1 - adds r0, 0xE8 - adds r0, r1 - strh r2, [r0] - adds r3, 0x1 - cmp r3, 0x13 - ble _080E4F8C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E4FA4: .4byte gUnknown_203AAB4 -_080E4FA8: .4byte 0x0000025f - thumb_func_end sub_80E4F54 - - thumb_func_start sub_80E4FAC -sub_80E4FAC: @ 80E4FAC - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x30 - ldrsh r0, [r4, r1] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 1 - movs r0, 0xFF - ands r1, r0 - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0x1 - beq _080E4FD0 - cmp r0, 0x1 - ble _080E4FF6 - cmp r0, 0x2 - beq _080E4FE4 - b _080E4FF6 -_080E4FD0: - adds r0, r1, 0 - movs r1, 0x3 - bl Sin - ldrh r1, [r4, 0x32] - adds r2, r0, 0 - muls r2, r1 - adds r0, r2, 0 - strh r0, [r4, 0x24] - b _080E4FF6 -_080E4FE4: - adds r0, r1, 0 - movs r1, 0x1 - bl Sin - ldrh r1, [r4, 0x32] - adds r2, r0, 0 - muls r2, r1 - adds r0, r2, 0 - strh r0, [r4, 0x26] -_080E4FF6: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80E4FAC - - thumb_func_start sub_80E5004 -sub_80E5004: @ 80E5004 - push {r4-r6,lr} - mov r6, r8 - push {r6} - ldr r0, _080E50B4 @ =gUnknown_83FF9F4 - bl LoadSpriteSheet - ldr r0, _080E50B8 @ =gUnknown_83FF9FC - bl LoadSpritePalette - ldr r0, _080E50BC @ =gUnknown_83FFA24 - mov r8, r0 - movs r1, 0xC8 - movs r2, 0x4 - movs r3, 0 - bl CreateSprite - ldr r5, _080E50C0 @ =gUnknown_203AAB4 - ldr r1, [r5] - strb r0, [r1, 0x3] - ldr r0, [r5] - ldrb r1, [r0, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _080E50C4 @ =gSprites - adds r0, r4 - movs r1, 0x1 - bl StartSpriteAnim - ldr r2, [r5] - ldrb r1, [r2, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r6, 0x2 - strh r6, [r0, 0x2E] - ldrb r1, [r2, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _080E50C8 @ =0x0000ffff - strh r1, [r0, 0x32] - mov r0, r8 - movs r1, 0xC8 - movs r2, 0x6C - movs r3, 0 - bl CreateSprite - ldr r1, [r5] - strb r0, [r1, 0x3] - ldr r2, [r5] - ldrb r1, [r2, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r6, [r0, 0x2E] - ldrb r1, [r2, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x1 - strh r1, [r0, 0x32] - movs r2, 0 - movs r3, 0x4 -_080E508C: - ldr r0, [r5] - adds r0, 0x3 - adds r0, r2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x1 - ble _080E508C - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E50B4: .4byte gUnknown_83FF9F4 -_080E50B8: .4byte gUnknown_83FF9FC -_080E50BC: .4byte gUnknown_83FFA24 -_080E50C0: .4byte gUnknown_203AAB4 -_080E50C4: .4byte gSprites -_080E50C8: .4byte 0x0000ffff - thumb_func_end sub_80E5004 - - thumb_func_start sub_80E50CC -sub_80E50CC: @ 80E50CC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - ldr r7, _080E51E8 @ =gUnknown_203AAB4 - ldr r1, [r7] - movs r4, 0x98 - lsls r4, 2 - adds r0, r1, r4 - ldrb r0, [r0] - movs r6, 0x64 - muls r0, r6 - ldr r5, _080E51EC @ =gPlayerParty - adds r0, r5 - adds r1, 0xE8 - bl GetMoveRelearnerMoves - ldr r1, [r7] - strb r0, [r1, 0x1A] - ldr r1, [r7] - adds r4, r1, r4 - ldrb r0, [r4] - muls r0, r6 - adds r0, r5 - adds r1, 0xE8 - bl GetMoveRelearnerMoves - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r5, 0 - ldr r0, [r7] - ldrb r0, [r0, 0x1A] - cmp r5, r0 - bge _080E513C - adds r6, r7, 0 - movs r7, 0xD - movs r4, 0x8D - lsls r4, 1 -_080E511A: - ldr r1, [r6] - adds r0, r1, r4 - lsls r2, r5, 1 - adds r1, 0xE8 - adds r1, r2 - ldrh r1, [r1] - muls r1, r7 - ldr r2, _080E51F0 @ =gMoveNames - adds r1, r2 - bl StringCopy - adds r4, 0xD - adds r5, 0x1 - ldr r0, [r6] - ldrb r0, [r0, 0x1A] - cmp r5, r0 - blt _080E511A -_080E513C: - ldr r4, _080E51E8 @ =gUnknown_203AAB4 - ldr r0, [r4] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080E51EC @ =gPlayerParty - adds r0, r1 - movs r1, 0x2 - mov r2, sp - bl GetMonData - ldr r0, _080E51F4 @ =gStringVar1 - mov r1, sp - bl StringCopy10 - ldr r0, [r4] - ldrb r2, [r0, 0x1A] - movs r1, 0xD - muls r1, r2 - movs r7, 0x8D - lsls r7, 1 - adds r1, r7 - adds r0, r1 - ldr r1, _080E51F8 @ =gFameCheckerText_Cancel - bl StringCopy - ldr r1, [r4] - ldrb r0, [r1, 0x1A] - adds r0, 0x1 - strb r0, [r1, 0x1A] - movs r5, 0 - movs r3, 0x1 - add r3, r8 - mov r12, r3 - cmp r5, r8 - bge _080E51AA - adds r6, r4, 0 - adds r4, r7, 0 -_080E518E: - ldr r0, [r6] - lsls r3, r5, 3 - adds r1, r0, 0 - adds r1, 0x20 - adds r1, r3 - adds r2, r0, r4 - str r2, [r1] - adds r0, 0x24 - adds r0, r3 - str r5, [r0] - adds r4, 0xD - adds r5, 0x1 - cmp r5, r8 - blt _080E518E -_080E51AA: - ldr r4, _080E51E8 @ =gUnknown_203AAB4 - ldr r2, [r4] - lsls r3, r5, 3 - adds r0, r2, 0 - adds r0, 0x20 - adds r0, r3 - ldr r1, _080E51F8 @ =gFameCheckerText_Cancel - str r1, [r0] - adds r2, 0x24 - adds r2, r3 - movs r0, 0xFE - str r0, [r2] - ldr r2, _080E51FC @ =gMultiuseListMenuTemplate - adds r1, r2, 0 - ldr r0, _080E5200 @ =gUnknown_83FFA94 - ldm r0!, {r3,r5,r6} - stm r1!, {r3,r5,r6} - ldm r0!, {r3,r5,r6} - stm r1!, {r3,r5,r6} - ldr r0, [r4] - adds r0, 0x20 - str r0, [r2] - mov r5, r12 - strh r5, [r2, 0xC] - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E51E8: .4byte gUnknown_203AAB4 -_080E51EC: .4byte gPlayerParty -_080E51F0: .4byte gMoveNames -_080E51F4: .4byte gStringVar1 -_080E51F8: .4byte gFameCheckerText_Cancel -_080E51FC: .4byte gMultiuseListMenuTemplate -_080E5200: .4byte gUnknown_83FFA94 - thumb_func_end sub_80E50CC - - thumb_func_start sub_80E5204 -sub_80E5204: @ 80E5204 - push {r4,r5,lr} - ldr r4, _080E5258 @ =gUnknown_203AAB4 - ldr r0, [r4] - ldr r1, _080E525C @ =0x00000263 - adds r0, r1 - ldrb r0, [r0] - bl ListMenu_ProcessInput - ldr r0, _080E5260 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080E5284 - movs r0, 0x5 - bl PlaySE - ldr r1, [r4] - ldr r2, _080E5264 @ =0x00000a67 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0xFE - beq _080E5270 - movs r0, 0x8 - strb r0, [r1] - ldr r0, _080E5268 @ =gStringVar2 - ldr r1, [r4] - adds r2, r1, r2 - ldrb r3, [r2] - movs r2, 0xD - muls r2, r3 - movs r3, 0x8D - lsls r3, 1 - adds r2, r3 - adds r1, r2 - bl StringCopy - ldr r0, _080E526C @ =gUnknown_841E3FB - bl sub_80E48C0 - b _080E529E - .align 2, 0 -_080E5258: .4byte gUnknown_203AAB4 -_080E525C: .4byte 0x00000263 -_080E5260: .4byte gMain -_080E5264: .4byte 0x00000a67 -_080E5268: .4byte gStringVar2 -_080E526C: .4byte gUnknown_841E3FB -_080E5270: - ldr r0, _080E5280 @ =gUnknown_841E4E2 - bl sub_80E48C0 - ldr r1, [r4] - movs r0, 0xC - strb r0, [r1] - b _080E529E - .align 2, 0 -_080E5280: .4byte gUnknown_841E4E2 -_080E5284: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080E529E - movs r0, 0x5 - bl PlaySE - ldr r0, [r4] - movs r1, 0xC - strb r1, [r0] - ldr r0, _080E52DC @ =gUnknown_841E4E2 - bl sub_80E48C0 -_080E529E: - ldr r0, _080E52E0 @ =gUnknown_203AAB4 - ldr r4, [r0] - ldrb r0, [r4, 0x1A] - cmp r0, 0x6 - bls _080E52FA - ldr r2, _080E52E4 @ =gSprites - movs r0, 0x3E - adds r0, r2 - mov r12, r0 - ldrb r0, [r0] - movs r1, 0x5 - negs r1, r1 - adds r3, r1, 0 - ands r3, r0 - mov r0, r12 - strb r3, [r0] - adds r5, r2, 0 - adds r5, 0x82 - ldrb r0, [r5] - adds r2, r1, 0 - ands r2, r0 - strb r2, [r5] - ldrb r0, [r4, 0x19] - cmp r0, 0 - bne _080E52E8 - movs r1, 0x4 - adds r0, r3, 0 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - b _080E52FA - .align 2, 0 -_080E52DC: .4byte gUnknown_841E4E2 -_080E52E0: .4byte gUnknown_203AAB4 -_080E52E4: .4byte gSprites -_080E52E8: - ldrb r1, [r4, 0x19] - ldrb r0, [r4, 0x1A] - subs r0, 0x6 - cmp r1, r0 - bne _080E52FA - movs r1, 0x4 - adds r0, r2, 0 - orrs r0, r1 - strb r0, [r5] -_080E52FA: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80E5204 - - thumb_func_start sub_80E5300 -sub_80E5300: @ 80E5300 - push {r4,lr} - ldr r0, _080E5330 @ =gMultiuseListMenuTemplate - ldr r4, _080E5334 @ =gUnknown_203AAB4 - ldr r2, [r4] - ldr r3, _080E5338 @ =0x00000a68 - adds r1, r2, r3 - ldrh r1, [r1] - adds r3, 0x2 - adds r2, r3 - ldrh r2, [r2] - bl ListMenuInit - ldr r1, [r4] - ldr r2, _080E533C @ =0x00000263 - adds r1, r2 - strb r0, [r1] - movs r0, 0x6 - movs r1, 0x1 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E5330: .4byte gMultiuseListMenuTemplate -_080E5334: .4byte gUnknown_203AAB4 -_080E5338: .4byte 0x00000a68 -_080E533C: .4byte 0x00000263 - thumb_func_end sub_80E5300 - - thumb_func_start sub_80E5340 -sub_80E5340: @ 80E5340 - push {r4,r5,lr} - sub sp, 0x3C - lsls r0, 16 - lsrs r5, r0, 16 - ldr r1, _080E5380 @ =gBattleMoves - lsls r0, r5, 1 - adds r0, r5 - lsls r0, 2 - adds r4, r0, r1 - ldrb r1, [r4, 0x2] - adds r1, 0x1 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x2 - movs r2, 0x1 - movs r3, 0x4 - bl BlitMoveInfoIcon - ldrb r0, [r4, 0x1] - cmp r0, 0x1 - bhi _080E5388 - ldr r1, _080E5384 @ =gText_ThreeHyphens - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x3 - movs r2, 0x1 - movs r3, 0x4 - bl sub_80E559C - b _080E53A6 - .align 2, 0 -_080E5380: .4byte gBattleMoves -_080E5384: .4byte gText_ThreeHyphens -_080E5388: - ldrb r1, [r4, 0x1] - add r0, sp, 0x8 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x3 - add r1, sp, 0x8 - movs r2, 0x1 - movs r3, 0x4 - bl sub_80E559C -_080E53A6: - ldr r2, _080E53CC @ =gBattleMoves - lsls r1, r5, 1 - adds r0, r1, r5 - lsls r0, 2 - adds r0, r2 - ldrb r2, [r0, 0x3] - adds r4, r1, 0 - cmp r2, 0 - bne _080E53D4 - ldr r1, _080E53D0 @ =gText_ThreeHyphens - str r2, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r0, 0x3 - movs r2, 0x1 - movs r3, 0x12 - bl sub_80E559C - b _080E53F4 - .align 2, 0 -_080E53CC: .4byte gBattleMoves -_080E53D0: .4byte gText_ThreeHyphens -_080E53D4: - ldrb r1, [r0, 0x3] - add r0, sp, 0x8 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r0, 0x3 - add r1, sp, 0x8 - movs r2, 0x1 - movs r3, 0x12 - bl sub_80E559C -_080E53F4: - ldr r1, _080E543C @ =gBattleMoves - adds r0, r4, r5 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x4] - add r0, sp, 0x8 - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - movs r4, 0 - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0x4 - add r1, sp, 0x8 - movs r2, 0x2 - movs r3, 0x2 - bl sub_80E559C - ldr r1, _080E5440 @ =gMoveDescriptionPointers - subs r0, r5, 0x1 - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0x5 - movs r2, 0x1 - movs r3, 0 - bl sub_80E559C - add sp, 0x3C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E543C: .4byte gBattleMoves -_080E5440: .4byte gMoveDescriptionPointers - thumb_func_end sub_80E5340 - - thumb_func_start sub_80E5444 -sub_80E5444: @ 80E5444 - push {lr} - movs r0, 0 - movs r1, 0x13 - movs r2, 0x1 - movs r3, 0x4 - bl BlitMoveInfoIcon - movs r0, 0x1 - movs r1, 0x14 - movs r2, 0 - movs r3, 0x4 - bl BlitMoveInfoIcon - movs r0, 0x1 - movs r1, 0x15 - movs r2, 0 - movs r3, 0x13 - bl BlitMoveInfoIcon - movs r0, 0 - movs r1, 0x16 - movs r2, 0x1 - movs r3, 0x13 - bl BlitMoveInfoIcon - movs r0, 0 - movs r1, 0x17 - movs r2, 0x1 - movs r3, 0x22 - bl BlitMoveInfoIcon - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0x4 - bl PutWindowTilemap - movs r0, 0x3 - bl PutWindowTilemap - movs r0, 0x5 - bl PutWindowTilemap - movs r0, 0x2 - bl PutWindowTilemap - movs r0, 0x7 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x1 - movs r1, 0x2 - bl CopyWindowToVram - pop {r0} - bx r0 - thumb_func_end sub_80E5444 - - thumb_func_start sub_80E54C0 -sub_80E54C0: @ 80E54C0 - push {r4,r5,lr} - ldr r0, _080E54E0 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldr r0, _080E54E4 @ =0x00000a67 - adds r2, r1, r0 - ldrb r0, [r2] - cmp r0, 0xFE - beq _080E54E8 - lsls r0, 1 - adds r1, 0xE8 - adds r1, r0 - ldrh r0, [r1] - bl sub_80E5340 - b _080E5504 - .align 2, 0 -_080E54E0: .4byte gUnknown_203AAB4 -_080E54E4: .4byte 0x00000a67 -_080E54E8: - movs r5, 0x2 -_080E54EA: - lsls r4, r5, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0 - bl FillWindowPixelBuffer - adds r0, r4, 0 - movs r1, 0x2 - bl CopyWindowToVram - adds r5, 0x1 - cmp r5, 0x5 - ble _080E54EA -_080E5504: - movs r0, 0x3 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x4 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x5 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x7 - movs r1, 0x3 - bl CopyWindowToVram - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80E54C0 - - thumb_func_start sub_80E553C -sub_80E553C: @ 80E553C - push {r4,lr} - adds r4, r0, 0 - lsls r1, 24 - cmp r1, 0 - bne _080E5560 - movs r0, 0x5 - bl PlaySE - ldr r2, _080E5568 @ =gUnknown_203AAB4 - ldr r0, [r2] - ldr r1, _080E556C @ =0x0000025f - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _080E5570 @ =0x00000a67 - adds r0, r1 - strb r4, [r0] -_080E5560: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E5568: .4byte gUnknown_203AAB4 -_080E556C: .4byte 0x0000025f -_080E5570: .4byte 0x00000a67 - thumb_func_end sub_80E553C - - thumb_func_start sub_80E5574 -sub_80E5574: @ 80E5574 - push {r4,lr} - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r4, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _080E5594 - movs r0, 0x6 - bl PutWindowTilemap - movs r0, 0x6 - movs r1, 0x1 - bl CopyWindowToVram -_080E5594: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80E5574 - - thumb_func_start sub_80E559C -sub_80E559C: @ 80E559C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - mov r10, r1 - ldr r4, [sp, 0x38] - lsls r0, 24 - lsrs r5, r0, 24 - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 24 - lsrs r6, r3, 24 - movs r0, 0x1 - mov r8, r0 - mov r9, r0 - cmp r4, 0x1 - bhi _080E55C8 - movs r1, 0 - mov r8, r1 - mov r9, r1 -_080E55C8: - cmp r4, 0 - blt _080E5622 - cmp r4, 0x1 - ble _080E55D6 - cmp r4, 0x2 - beq _080E5604 - b _080E5622 -_080E55D6: - ldr r2, _080E55F4 @ =gUnknown_203AAB4 - ldr r0, [r2] - ldr r1, _080E55F8 @ =0x00000a64 - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _080E55FC @ =0x00000a65 - adds r0, r1 - movs r1, 0x2 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _080E5600 @ =0x00000a66 - b _080E561C - .align 2, 0 -_080E55F4: .4byte gUnknown_203AAB4 -_080E55F8: .4byte 0x00000a64 -_080E55FC: .4byte 0x00000a65 -_080E5600: .4byte 0x00000a66 -_080E5604: - ldr r2, _080E5678 @ =gUnknown_203AAB4 - ldr r0, [r2] - ldr r1, _080E567C @ =0x00000a64 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _080E5680 @ =0x00000a65 - adds r0, r1 - strb r4, [r0] - ldr r0, [r2] - adds r1, 0x1 -_080E561C: - adds r0, r1 - movs r1, 0x3 - strb r1, [r0] -_080E5622: - cmp r4, 0x1 - beq _080E563E - ldr r0, _080E5678 @ =gUnknown_203AAB4 - ldr r0, [r0] - ldr r1, _080E567C @ =0x00000a64 - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - orrs r1, r0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl FillWindowPixelBuffer -_080E563E: - mov r0, r8 - str r0, [sp] - mov r1, r9 - str r1, [sp, 0x4] - ldr r0, _080E5678 @ =gUnknown_203AAB4 - ldr r0, [r0] - ldr r1, _080E567C @ =0x00000a64 - adds r0, r1 - str r0, [sp, 0x8] - ldr r0, [sp, 0x34] - lsls r0, 24 - asrs r0, 24 - str r0, [sp, 0xC] - mov r0, r10 - str r0, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0x3 - adds r2, r7, 0 - adds r3, r6, 0 - bl AddTextPrinterParameterized4 - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E5678: .4byte gUnknown_203AAB4 -_080E567C: .4byte 0x00000a64 -_080E5680: .4byte 0x00000a65 - thumb_func_end sub_80E559C - - .align 2, 0 @ Don't pad with nop. diff --git a/baserom.ips b/baserom.ips Binary files differindex 370073252..4a40d3337 100644 --- a/baserom.ips +++ b/baserom.ips diff --git a/data/battle_anim_effects_3.s b/data/battle_anim_effects_3.s index 23dd1e1fd..58fb29794 100644 --- a/data/battle_anim_effects_3.s +++ b/data/battle_anim_effects_3.s @@ -67,4 +67,4 @@ gUnknown_83FF65C:: @ 83FF65C .incbin "baserom.gba", 0x3FF65C, 0x14C gUnknown_83FF7A8:: @ 83FF7A8 - .incbin "baserom.gba", 0x3FF7A8, 0x24C + .incbin "baserom.gba", 0x3FF7A8, 0x30 diff --git a/data/learn_move.s b/data/learn_move.s deleted file mode 100644 index ff3f2e3d1..000000000 --- a/data/learn_move.s +++ /dev/null @@ -1,28 +0,0 @@ -#include "constants/region_map.h" -#include "constants/flags.h" -#include "constants/moves.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 - -gUnknown_83FF9F4:: @ 83FF9F4 - .incbin "baserom.gba", 0x3FF9F4, 0x8 - -gUnknown_83FF9FC:: @ 83FF9FC - .incbin "baserom.gba", 0x3FF9FC, 0x28 - -gUnknown_83FFA24:: @ 83FFA24 - .incbin "baserom.gba", 0x3FFA24, 0x18 - -gUnknown_83FFA3C:: @ 83FFA3C - .incbin "baserom.gba", 0x3FFA3C, 0x8 - -gUnknown_83FFA44:: @ 83FFA44 - .incbin "baserom.gba", 0x3FFA44, 0x48 - -gUnknown_83FFA8C:: @ 83FFA8C - .incbin "baserom.gba", 0x3FFA8C, 0x8 - -gUnknown_83FFA94:: @ 83FFA94 - .incbin "baserom.gba", 0x3FFA94, 0x30 diff --git a/data/strings.s b/data/strings.s index 9b223df62..101946475 100644 --- a/data/strings.s +++ b/data/strings.s @@ -4535,17 +4535,17 @@ gDaycareText_PlayOther:: @ 841E3A8 .string "The two prefer to play with other\n" .string "POKéMON than each other.$" -gUnknown_841E3E3:: @ 841E3E3 +gText_TeachWhichMoveToMon:: @ 841E3E3 .string "Teach which move to {STR_VAR_1}?$" -gUnknown_841E3FB:: @ 841E3FB +gText_TeachMoveQues:: @ 841E3FB .string "Teach {STR_VAR_2}?$" -gUnknown_841E405:: @ 841E405 +gText_MonLearnedMove:: @ 841E405 .string "{STR_VAR_1} learned\n" .string "{STR_VAR_2}.$" -gUnknown_841E414:: @ 841E414 +gText_MonIsTryingToLearnMove:: @ 841E414 .string "{STR_VAR_1} is trying to learn\n" .string "{STR_VAR_2}.\p" .string "But {STR_VAR_1} can't learn more\n" @@ -4553,24 +4553,24 @@ gUnknown_841E414:: @ 841E414 .string "Delete an older move to make\n" .string "room for {STR_VAR_2}?$" -gUnknown_841E481:: @ 841E481 +gText_StopLearningMove:: @ 841E481 .string "Stop learning {STR_VAR_2}?$" -gUnknown_841E493:: @ 841E493 +gText_1_2_and_Poof:: @ 841E493 .string "{PAUSE 0x20}1, {PAUSE 0x0F}2, and {PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}{PLAY_SE SE_KON}Poof!\p" .string "$" -gUnknown_841E4C0:: @ 841E4C0 +gText_MonForgotOldMoveAndMonLearnedNewMove:: @ 841E4C0 .string "{STR_VAR_1} forgot {STR_VAR_3}.\p" .string "And‥\p" .string "{STR_VAR_1}\n" .string "learned {STR_VAR_2}.$" -gUnknown_841E4E2:: @ 841E4E2 +gText_GiveUpTryingToTeachNewMove:: @ 841E4E2 .string "Give up trying to teach a new\n" .string "move to {STR_VAR_1}?$" -gUnknown_841E50C:: @ 841E50C +gText_WhichMoveShouldBeForgotten:: @ 841E50C .string "Which move should be forgotten?\p" .string "$" diff --git a/graphics/learn_move/interface_sprites.png b/graphics/learn_move/interface_sprites.png Binary files differnew file mode 100644 index 000000000..4fa3d4a1b --- /dev/null +++ b/graphics/learn_move/interface_sprites.png diff --git a/include/graphics.h b/include/graphics.h index bc87e4d53..c057da386 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4226,7 +4226,13 @@ extern const u16 gTradeMenuMonBox_Tilemap[]; extern const u16 gUnknown_8E9CBBC[]; extern const u16 gUnknown_8E9CB9C[]; +// hall_of_fame extern const u32 gFile_graphics_misc_confetti_sheet[]; extern const u32 gFile_graphics_misc_confetti_palette[]; +// learn_move +extern const u16 gUnknown_8E97DDC[]; +extern const u32 gUnknown_8E97DFC[]; +extern const u32 gUnknown_8E97EC4[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/strings.h b/include/strings.h index 80ede79ef..f39f4f553 100644 --- a/include/strings.h +++ b/include/strings.h @@ -724,4 +724,15 @@ extern const u8 gText_IDNumber[]; extern const u8 gText_Name[]; extern const u8 gText_MainMenuTime[]; +// learn_move +extern const u8 gText_TeachWhichMoveToMon[]; +extern const u8 gText_MonLearnedMove[]; +extern const u8 gText_MonIsTryingToLearnMove[]; +extern const u8 gText_StopLearningMove[]; +extern const u8 gText_1_2_and_Poof[]; +extern const u8 gText_MonForgotOldMoveAndMonLearnedNewMove[]; +extern const u8 gText_WhichMoveShouldBeForgotten[]; +extern const u8 gText_TeachMoveQues[]; +extern const u8 gText_GiveUpTryingToTeachNewMove[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index b2a1f11e7..03fab08a6 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -206,7 +206,7 @@ SECTIONS { src/battle_controller_safari.o(.text); src/fldeff_sweetscent.o(.text); asm/battle_anim_effects_3.o(.text); - asm/learn_move.o(.text); + src/learn_move.o(.text); src/fldeff_softboiled.o(.text); src/battle_tower.o(.text); src/battle_controller_oak_old_man.o(.text); @@ -478,7 +478,7 @@ SECTIONS { data/field_effect_helpers.o(.rodata); src/battle_controller_safari.o(.rodata); data/battle_anim_effects_3.o(.rodata); - data/learn_move.o(.rodata); + src/learn_move.o(.rodata); src/battle_tower.o(.rodata); src/battle_controller_oak_old_man.o(.rodata); src/player_pc.o(.rodata); diff --git a/src/battle_tower.c b/src/battle_tower.c index 6720e9f1b..dfbef8fe5 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -43,6 +43,14 @@ static u16 GetCurrentBattleTowerWinStreak(u8 levelType); static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer * eReaderTrainer); static void PrintEReaderTrainerFarewellMessage(void); +const u8 unref_83FFAAC[] = { + 0x05, 0x04, 0x01, 0x10, 0x04, 0x02, 0x05, 0x06, + 0x03, 0x10, 0x06, 0x04, 0x00, 0x01, 0x02, 0x03, + 0x00, 0x02, 0x03 +}; + +const u8 unref_83FFABF[] = _("100"); + #include "data/battle_tower/trainers.h" static const u16 sBattleTowerHeldItems[] = { diff --git a/src/learn_move.c b/src/learn_move.c new file mode 100644 index 000000000..e22922528 --- /dev/null +++ b/src/learn_move.c @@ -0,0 +1,842 @@ +#include "global.h" +#include "bg.h" +#include "malloc.h" +#include "gpu_regs.h" +#include "palette.h" +#include "script.h" +#include "task.h" +#include "data.h" +#include "trig.h" +#include "window.h" +#include "field_fadetransition.h" +#include "overworld.h" +#include "new_menu_helpers.h" +#include "menu.h" +#include "list_menu.h" +#include "event_data.h" +#include "text_window.h" +#include "string_util.h" +#include "pokemon_summary_screen.h" +#include "graphics.h" +#include "sound.h" +#include "strings.h" +#include "constants/songs.h" +#include "constants/moves.h" + +struct MoveTutorMoveInfoHeaders +{ + const u8 *text; + u8 left; + u8 right; + u8 index; // unused +}; + +struct LearnMoveGfxResources +{ + u8 state; + u8 unk_01; + u8 unk_02; + u8 spriteIds[2]; + u8 filler_05[0x13]; + u8 unk_18; + u8 scrollPositionMaybe; + u8 numLearnableMoves; + u8 unk_1B; + u8 unk_1C; + u8 unk_1D; + u8 unk_1E; + struct ListMenuItem listMenuItems[25]; + u16 learnableMoves[25]; + u8 listMenuStrbufs[25][13]; + bool8 scheduleMoveInfoUpdate; + u8 selectedPartyMember; + u8 selectedMoveSlot; + u8 unk_262; + u8 listMenuTaskId; + u8 bg1TilemapBuffer[BG_SCREEN_SIZE]; // 264 + u8 textColor[3]; // A64 + u8 selectedIndex; + u16 listMenuScrollPos; + u16 listMenuScrollRow; +}; + +static EWRAM_DATA struct LearnMoveGfxResources * sMoveRelearner = NULL; + +static void Task_InitMoveRelearnerMenu(u8 taskId); +static void CB2_MoveRelearner_Init(void); +static void CB2_MoveRelearner(void); +static void MoveRelearnerStateMachine(void); +static void DrawTextBorderOnWindows6and7(void); +static void PrintTeachWhichMoveToStrVar1(bool8 onInit); +static void InitMoveRelearnerStateVariables(void); +static void SpriteCB_ListMenuScrollIndicators(struct Sprite * sprite); +static void SpawnListMenuScrollIndicatorSprites(void); +static void MoveRelearnerInitListMenuBuffersEtc(void); +static void MoveRelearnerMenuHandleInput(void); +static void MoveLearnerInitListMenu(void); +static void LoadMoveInfoUI(void); +static void PrintMoveInfoHandleCancel_CopyToVram(void); +static void MoveRelearnerMenu_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list); +static s8 YesNoMenuProcessInput(void); +static void PrintTextOnWindow(u8 windowId, const u8 *str, u8 x, u8 y, s32 speed, s32 colorIdx); + +static const u16 sLearnMoveInterfaceSpritesPalette[] = INCBIN_U16("graphics/learn_move/interface_sprites.gbapal"); +static const u16 sLearnMoveInterfaceSpritesTiles[] = INCBIN_U16("graphics/learn_move/interface_sprites.4bpp"); + +static const u8 sMoveTutorMenuWindowFrameDimensions[][4] = +{ + { 0, 0, 19, 13}, + {20, 0, 29, 13}, + { 2, 14, 27, 19} +}; + +static const u8 sJPText_TatakauWaza[] = _("たたかうわざ"); +static const u8 sJPText_Taipu[] = _("タイプ/"); +static const u8 sJPText_PP[] = _("PP/"); +static const u8 sJPText_Iryoku[] = _("いりょく/"); +static const u8 sJPText_Meichuu[] = _("めいちゅう/"); + +static const struct MoveTutorMoveInfoHeaders sMoveTutorMoveInfoHeaders[][5] = +{ + { + {sJPText_TatakauWaza, 7, 1, 0}, + {sJPText_Taipu, 1, 4, 1}, + {sJPText_Iryoku, 11, 4, 2}, + {sJPText_PP, 2, 6, 3}, + {sJPText_Meichuu, 10, 6, 4}, + }, + { + {NULL, 0, 0, 0}, + {NULL, 0, 0, 0}, + {NULL, 0, 0, 0}, + {NULL, 0, 0, 0}, + {NULL, 0, 0, 0}, + }, +}; + +static const struct SpriteSheet sSpriteSheet_ListMenuScrollIndicators = { + sLearnMoveInterfaceSpritesTiles, 0x180, 5525 +}; + +static const struct SpritePalette sSpritePalette_ListMenuScrollIndicators = { + sLearnMoveInterfaceSpritesPalette, 5526 +}; + +static const struct OamData sOamdata_MoveRelearnerListMenuScrollIndicators = { + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8) +}; + +static const union AnimCmd sAnimCmd_ScrollIndicatorDown[] = { + ANIMCMD_FRAME(4, 5), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_ScrollIndicatorUp[] = { + ANIMCMD_FRAME(6, 5), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_MoveRelearnerListMenuScrollIndicators[] = { + sAnimCmd_ScrollIndicatorDown, + sAnimCmd_ScrollIndicatorUp +}; + +static const struct SpriteTemplate sSpriteTemplate_MoveRelearnerListMenuScrollIndicators = { + 5525, 5526, &sOamdata_MoveRelearnerListMenuScrollIndicators, sSpriteAnimTable_MoveRelearnerListMenuScrollIndicators, NULL, gDummySpriteAffineAnimTable, SpriteCB_ListMenuScrollIndicators +}; + +static const struct BgTemplate sBgTemplates[2] = { + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .priority = 0 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 8, + .priority = 1 + } +}; + +static const struct WindowTemplate sWindowTemplates[9] = { + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 6, + .height = 7, + .paletteNum = 0x0d, + .baseBlock = 0x014 + }, + { + .bg = 0, + .tilemapLeft = 10, + .tilemapTop = 0, + .width = 5, + .height = 5, + .paletteNum = 0x0d, + .baseBlock = 0x03e + }, + { + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 0, + .width = 5, + .height = 2, + .paletteNum = 0x0d, + .baseBlock = 0x057 + }, + { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 0, + .width = 3, + .height = 5, + .paletteNum = 0x0f, + .baseBlock = 0x061 + }, + { + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 2, + .width = 3, + .height = 3, + .paletteNum = 0x0f, + .baseBlock = 0x070 + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 6, + .width = 15, + .height = 8, + .paletteNum = 0x0f, + .baseBlock = 0x079 + }, + { + .bg = 0, + .tilemapLeft = 19, + .tilemapTop = 1, + .width = 10, + .height = 12, + .paletteNum = 0x0f, + .baseBlock = 0x0f1 + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 26, + .height = 4, + .paletteNum = 0x0f, + .baseBlock = 0x169 + }, DUMMY_WIN_TEMPLATE +}; + +static const struct WindowTemplate gUnknown_83FFA8C = { + .bg = 0, + .tilemapLeft = 21, + .tilemapTop = 8, + .width = 6, + .height = 4, + .paletteNum = 0x0f, + .baseBlock = 0x1d1 +}; + +static const struct ListMenuTemplate sMoveRelearnerListMenuTemplate = { + .items = NULL, + .moveCursorFunc = MoveRelearnerMenu_MoveCursorFunc, + .itemPrintFunc = NULL, + .totalItems = 0, + .maxShowed = 7, + .windowId = 6, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 2, + .cursorKind = 0, +}; + +static void VBlankCB_MoveRelearner(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void DisplayMoveTutorMenu(void) +{ + ScriptContext2_Enable(); + CreateTask(Task_InitMoveRelearnerMenu, 10); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); +} + +static void Task_InitMoveRelearnerMenu(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_MoveRelearner_Init); + gFieldCallback = FieldCallback_ReturnToEventScript2; + DestroyTask(taskId); + } +} + +static void MoveRelearnerLoadBgGfx(void) +{ + int i; + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); + ResetTempTileDataBuffers(); + if (InitWindows(sWindowTemplates)) + { + DeactivateAllTextPrinters(); + for (i = 0; i < NELEMS(sWindowTemplates); i++) + { + ClearWindowTilemap(i); + FillWindowPixelBuffer(i, PIXEL_FILL(0)); + } + FillWindowPixelBuffer(7, PIXEL_FILL(1)); + FillBgTilemapBufferRect(0, 0x000, 0, 0, 30, 20, 0xF); + SetBgTilemapBuffer(1, sMoveRelearner->bg1TilemapBuffer); + TextWindow_SetUserSelectedFrame(0, 1, 0xE0); + sub_8107D38(0xD0, 1); + LoadPalette(gUnknown_8E97DDC, 0x00, 0x20); + DecompressAndLoadBgGfxUsingHeap(1, gUnknown_8E97DFC, 0, 0, 0); + CopyToBgTilemapBuffer(1, gUnknown_8E97EC4, 0, 0); + CopyBgTilemapBufferToVram(1); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG1VOFS, 0); + SetGpuReg(REG_OFFSET_BG1HOFS, 0); + } +} + +static void CB2_MoveRelearner_Init(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + sMoveRelearner = AllocZeroed(sizeof(struct LearnMoveGfxResources)); + InitMoveRelearnerStateVariables(); + sMoveRelearner->selectedPartyMember = gSpecialVar_0x8004; + MoveRelearnerInitListMenuBuffersEtc(); + SetVBlankCallback(VBlankCB_MoveRelearner); + MoveRelearnerLoadBgGfx(); + SpawnListMenuScrollIndicatorSprites(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + SetMainCallback2(CB2_MoveRelearner); +} + +static void CB2_MoveRelearner_Resume(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + MoveRelearnerInitListMenuBuffersEtc(); + sMoveRelearner->selectedMoveSlot = gSpecialVar_0x8005; + SetVBlankCallback(VBlankCB_MoveRelearner); + MoveRelearnerLoadBgGfx(); + SpawnListMenuScrollIndicatorSprites(); + FillPalette(RGB_BLACK, 0, 2); + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + SetMainCallback2(CB2_MoveRelearner); +} + +static void CB2_MoveRelearner(void) +{ + if (!IsTextPrinterActive(7)) + MoveRelearnerStateMachine(); + if (sMoveRelearner->scheduleMoveInfoUpdate) + { + PrintMoveInfoHandleCancel_CopyToVram(); + sMoveRelearner->scheduleMoveInfoUpdate = FALSE; + } + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void StringExpandPlaceholdersAndPrintTextOnWindow7Color2(const u8 *str) +{ + StringExpandPlaceholders(gStringVar4, str); + PrintTextOnWindow(7, gStringVar4, 0, 2, GetTextSpeedSetting(), 2); +} + +static void MoveRelearnerStateMachine(void) +{ + u16 move; + + switch (sMoveRelearner->state) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + ShowBg(0); + ShowBg(1); + LoadMoveInfoUI(); + sMoveRelearner->state++; + DrawTextBorderOnWindows6and7(); + PrintTeachWhichMoveToStrVar1(FALSE); + MoveLearnerInitListMenu(); + sMoveRelearner->scheduleMoveInfoUpdate = TRUE; + break; + case 1: + if (!gPaletteFade.active) + sMoveRelearner->state = 4; + break; + case 2: + sMoveRelearner->state++; + break; + case 3: + PrintTeachWhichMoveToStrVar1(FALSE); + sMoveRelearner->scheduleMoveInfoUpdate = TRUE; + sMoveRelearner->state++; + break; + case 4: + MoveRelearnerMenuHandleInput(); + break; + case 8: + CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); + sMoveRelearner->state++; + break; + case 9: + switch (YesNoMenuProcessInput()) + { + case 0: + if (GiveMoveToMon(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]) != 0xFFFF) + { + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_MonLearnedMove); + gSpecialVar_0x8004 = TRUE; + sMoveRelearner->state = 31; + } + else + { + sMoveRelearner->state = 16; + } + break; + case 1: + case -1: + sMoveRelearner->state = 3; + break; + } + break; + case 12: + CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); + sMoveRelearner->state++; + break; + case 13: + switch (YesNoMenuProcessInput()) + { + case 0: + gSpecialVar_0x8004 = FALSE; + sMoveRelearner->state = 14; + break; + case 1: + case -1: + sMoveRelearner->state = 3; + break; + } + break; + case 16: + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_MonIsTryingToLearnMove); + sMoveRelearner->state++; + break; + case 17: + CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); + sMoveRelearner->state = 18; + break; + case 18: + switch (YesNoMenuProcessInput()) + { + case 0: + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_WhichMoveShouldBeForgotten); + sMoveRelearner->state = 19; + break; + case 1: + case -1: + sMoveRelearner->state = 24; + break; + } + break; + case 24: + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_StopLearningMove); + sMoveRelearner->state++; + break; + case 25: + CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); + sMoveRelearner->state = 26; + break; + case 26: + switch (YesNoMenuProcessInput()) + { + case 0: + sMoveRelearner->state = 27; + break; + case 1: + case -1: + sMoveRelearner->state = 16; + break; + } + break; + case 27: + sMoveRelearner->state = 3; + break; + case 19: + sMoveRelearner->state = 20; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + break; + case 20: + if (!gPaletteFade.active) + { + ListMenuGetScrollAndRow(sMoveRelearner->listMenuTaskId, &sMoveRelearner->listMenuScrollPos, &sMoveRelearner->listMenuScrollRow); + FreeAllWindowBuffers(); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, sMoveRelearner->selectedPartyMember, gPlayerPartyCount - 1, CB2_MoveRelearner_Resume, sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]); + sMoveRelearner->state = 28; + } + break; + case 21: + sMoveRelearner->state = 14; + break; + case 22: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sMoveRelearner->state++; + break; + case 15: + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + Free(sMoveRelearner); + SetMainCallback2(CB2_ReturnToField); + } + break; + case 28: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + ShowBg(0); + ShowBg(1); + sMoveRelearner->state++; + LoadMoveInfoUI(); + DrawTextBorderOnWindows6and7(); + MoveLearnerInitListMenu(); + PrintTeachWhichMoveToStrVar1(TRUE); + PrintMoveInfoHandleCancel_CopyToVram(); + break; + case 29: + if (!gPaletteFade.active) + { + if (sMoveRelearner->selectedMoveSlot == 4) + { + sMoveRelearner->state = 24; + } + else + { + move = GetMonData(&gPlayerParty[sMoveRelearner->selectedPartyMember], MON_DATA_MOVE1 + sMoveRelearner->selectedMoveSlot); + StringCopy(gStringVar3, gMoveNames[move]); + RemoveMonPPBonus(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->selectedMoveSlot); + SetMonMoveSlot(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex], sMoveRelearner->selectedMoveSlot); + StringCopy(gStringVar2, gMoveNames[sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]]); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_1_2_and_Poof); + sMoveRelearner->state = 30; + gSpecialVar_0x8004 = TRUE; + } + } + break; + case 30: + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_MonForgotOldMoveAndMonLearnedNewMove); + sMoveRelearner->state = 31; + PlayFanfare(MUS_FANFA1); + break; + case 31: + PlayFanfare(MUS_FANFA1); + sMoveRelearner->state = 32; + break; + case 32: + if (IsFanfareTaskInactive()) + sMoveRelearner->state = 33; + break; + case 33: + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sMoveRelearner->state = 14; + } + break; + } +} + +static void DrawTextBorderOnWindows6and7(void) +{ + int i; + for (i = 6; i < 8; i++) + DrawTextBorderOuter(i, 0x001, 0xE); +} + +static void PrintTeachWhichMoveToStrVar1(bool8 onInit) +{ + if (!onInit) + { + StringExpandPlaceholders(gStringVar4, gText_TeachWhichMoveToMon); + PrintTextOnWindow(7, gStringVar4, 0, 2, 0, 2); + PutWindowTilemap(7); + CopyWindowToVram(7, 3); + } +} + +static void InitMoveRelearnerStateVariables(void) +{ + int i; + sMoveRelearner->state = 0; + sMoveRelearner->unk_02 = 0; + sMoveRelearner->scrollPositionMaybe = 0; + sMoveRelearner->unk_18 = 0; + sMoveRelearner->unk_1C = 0; + sMoveRelearner->numLearnableMoves = 0; + sMoveRelearner->unk_1B = 0; + sMoveRelearner->unk_1D = 0; + sMoveRelearner->unk_1E = 0; + sMoveRelearner->scheduleMoveInfoUpdate = FALSE; + for (i = 0; i < 20; i++) + sMoveRelearner->learnableMoves[i] = MOVE_NONE; +} + +static void SpriteCB_ListMenuScrollIndicators(struct Sprite * sprite) +{ + s16 abcissa = (sprite->data[1] * 10) & 0xFF; + switch (sprite->data[0]) + { + case 0: + break; + case 1: + sprite->pos2.x = Sin(abcissa, 3) * sprite->data[2]; + break; + case 2: + sprite->pos2.y = Sin(abcissa, 1) * sprite->data[2]; + break; + } + sprite->data[1]++; +} + +static void SpawnListMenuScrollIndicatorSprites(void) +{ + int i; + LoadSpriteSheet(&sSpriteSheet_ListMenuScrollIndicators); + LoadSpritePalette(&sSpritePalette_ListMenuScrollIndicators); + sMoveRelearner->spriteIds[0] = CreateSprite(&sSpriteTemplate_MoveRelearnerListMenuScrollIndicators, 200, 4, 0); + StartSpriteAnim(&gSprites[sMoveRelearner->spriteIds[0]], 1); + gSprites[sMoveRelearner->spriteIds[0]].data[0] = 2; + gSprites[sMoveRelearner->spriteIds[0]].data[2] = -1; + + // Bug: This should be using the second element of spriteIds. + sMoveRelearner->spriteIds[0] = CreateSprite(&sSpriteTemplate_MoveRelearnerListMenuScrollIndicators, 200, 108, 0); + gSprites[sMoveRelearner->spriteIds[0]].data[0] = 2; + gSprites[sMoveRelearner->spriteIds[0]].data[2] = 1; + for (i = 0; i < 2; i++) + gSprites[sMoveRelearner->spriteIds[i]].invisible = TRUE; +} + +static void MoveRelearnerInitListMenuBuffersEtc(void) +{ + int i; + s32 count; + u8 nickname[11]; + + sMoveRelearner->numLearnableMoves = GetMoveRelearnerMoves(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves); + count = GetMoveRelearnerMoves(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves); + for (i = 0; i < sMoveRelearner->numLearnableMoves; i++) + StringCopy(sMoveRelearner->listMenuStrbufs[i], gMoveNames[sMoveRelearner->learnableMoves[i]]); + GetMonData(&gPlayerParty[sMoveRelearner->selectedPartyMember], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar1, nickname); + StringCopy(sMoveRelearner->listMenuStrbufs[sMoveRelearner->numLearnableMoves], gFameCheckerText_Cancel); + sMoveRelearner->numLearnableMoves++; + for (i = 0; i < count; i++) + { + sMoveRelearner->listMenuItems[i].label = sMoveRelearner->listMenuStrbufs[i]; + sMoveRelearner->listMenuItems[i].index = i; + } + sMoveRelearner->listMenuItems[i].label = gFameCheckerText_Cancel; + sMoveRelearner->listMenuItems[i].index = 0xFE; + gMultiuseListMenuTemplate = sMoveRelearnerListMenuTemplate; + gMultiuseListMenuTemplate.items = sMoveRelearner->listMenuItems; + gMultiuseListMenuTemplate.totalItems = count + 1; +} + +static void MoveRelearnerMenuHandleInput(void) +{ + ListMenu_ProcessInput(sMoveRelearner->listMenuTaskId); + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + if (sMoveRelearner->selectedIndex != 0xFE) + { + sMoveRelearner->state = 8; + StringCopy(gStringVar2, sMoveRelearner->listMenuStrbufs[sMoveRelearner->selectedIndex]); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_TeachMoveQues); + } + else + { + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_GiveUpTryingToTeachNewMove); + sMoveRelearner->state = 12; + } + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sMoveRelearner->state = 12; + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_GiveUpTryingToTeachNewMove); + } + if (sMoveRelearner->numLearnableMoves > 6) + { + gSprites[0].invisible = FALSE; + gSprites[1].invisible = FALSE; + if (sMoveRelearner->scrollPositionMaybe == 0) + gSprites[0].invisible = TRUE; + else if (sMoveRelearner->scrollPositionMaybe == sMoveRelearner->numLearnableMoves - 6) + gSprites[1].invisible = TRUE; + } +} + +static void MoveLearnerInitListMenu(void) +{ + sMoveRelearner->listMenuTaskId = ListMenuInit(&gMultiuseListMenuTemplate, sMoveRelearner->listMenuScrollPos, sMoveRelearner->listMenuScrollRow); + CopyWindowToVram(6, 1); +} + +static void PrintMoveInfo(u16 move) +{ + u8 buffer[50]; + BlitMoveInfoIcon(2, gBattleMoves[move].type + 1, 1, 4); + + if (gBattleMoves[move].power < 2) + { + PrintTextOnWindow(3, gText_ThreeHyphens, 1, 4, 0, 0); + } + else + { + ConvertIntToDecimalStringN(buffer, gBattleMoves[move].power, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintTextOnWindow(3, buffer, 1, 4, 0, 0); + } + + if (gBattleMoves[move].accuracy == 0) + { + PrintTextOnWindow(3, gText_ThreeHyphens, 1, 18, 0, 1); + } + else + { + ConvertIntToDecimalStringN(buffer, gBattleMoves[move].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintTextOnWindow(3, buffer, 1, 18, 0, 1); + } + ConvertIntToDecimalStringN(buffer, gBattleMoves[move].pp, STR_CONV_MODE_LEFT_ALIGN, 2); + PrintTextOnWindow(4, buffer, 2, 2, 0, 0); + PrintTextOnWindow(5, gMoveDescriptionPointers[move - 1], 1, 0, 0, 0); +} + +static void LoadMoveInfoUI(void) +{ + BlitMoveInfoIcon(0, 19, 1, 4); + BlitMoveInfoIcon(1, 20, 0, 4); + BlitMoveInfoIcon(1, 21, 0, 19); + BlitMoveInfoIcon(0, 22, 1, 19); + BlitMoveInfoIcon(0, 23, 1, 34); + PutWindowTilemap(0); + PutWindowTilemap(1); + PutWindowTilemap(4); + PutWindowTilemap(3); + PutWindowTilemap(5); + PutWindowTilemap(2); + PutWindowTilemap(7); + CopyWindowToVram(0, 2); + CopyWindowToVram(1, 2); +} + +static void PrintMoveInfoHandleCancel_CopyToVram(void) +{ + int i; + if (sMoveRelearner->selectedIndex != 0xFE) + { + PrintMoveInfo(sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]); + } + else + { + for (i = 2; i < 6; i++) + { + FillWindowPixelBuffer(i, PIXEL_FILL(0)); + CopyWindowToVram(i, 2); + } + } + CopyWindowToVram(3, 2); + CopyWindowToVram(4, 2); + CopyWindowToVram(2, 2); + CopyWindowToVram(2, 2); + CopyWindowToVram(5, 2); + CopyWindowToVram(7, 3); +} + +static void MoveRelearnerMenu_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list) +{ + if (!onInit) + { + PlaySE(SE_SELECT); + sMoveRelearner->scheduleMoveInfoUpdate = TRUE; + sMoveRelearner->selectedIndex = itemIndex; + } +} + +static s8 YesNoMenuProcessInput(void) +{ + s8 input = Menu_ProcessInputNoWrapClearOnChoose(); + if (input != -2) + { + PutWindowTilemap(6); + CopyWindowToVram(6, 1); + } + return input; +} + +static void PrintTextOnWindow(u8 windowId, const u8 *str, u8 x, u8 y, s32 speed, s32 colorIdx) +{ + s32 letterSpacing = 1; + s32 lineSpacing = 1; + if (colorIdx == 0 || colorIdx == 1) + { + letterSpacing = 0; + lineSpacing = 0; + } + switch (colorIdx) + { + case 0: + case 1: + sMoveRelearner->textColor[0] = 0; + sMoveRelearner->textColor[1] = 2; + sMoveRelearner->textColor[2] = 3; + break; + case 2: + sMoveRelearner->textColor[0] = 1; + sMoveRelearner->textColor[1] = 2; + sMoveRelearner->textColor[2] = 3; + } + if (colorIdx != 1) + FillWindowPixelBuffer(windowId, PIXEL_FILL(sMoveRelearner->textColor[0])); + AddTextPrinterParameterized4(windowId, 3, x, y, letterSpacing, lineSpacing, sMoveRelearner->textColor, speed, str); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 27b3067ec..a892eb532 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -447,9 +447,8 @@ gUnknown_2039A34: @ 2039A34 gUnknown_203AAB0: @ 203AAB0 .space 0x4 -gUnknown_203AAB4: @ 203AAB4 - .space 0x4 - + .align 2 + .include "src/learn_move.o" .align 2 .include "src/battle_tower.o" .align 2 |