summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/learn_move.s1274
-rw-r--r--data/learn_move.s31
-rw-r--r--ld_script.txt2
-rw-r--r--src/learn_move.c556
4 files changed, 558 insertions, 1305 deletions
diff --git a/asm/learn_move.s b/asm/learn_move.s
index 89cd2efb8..06b40e233 100644
--- a/asm/learn_move.s
+++ b/asm/learn_move.s
@@ -5,1280 +5,6 @@
.syntax unified
.text
-
- thumb_func_start sub_813265C
-sub_813265C: @ 813265C
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_813265C
-
- thumb_func_start sub_8132670
-sub_8132670: @ 8132670
- push {lr}
- sub sp, 0x4
- bl ScriptContext2_Enable
- ldr r0, _08132698 @ =sub_813269C
- 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
-_08132698: .4byte sub_813269C
- thumb_func_end sub_8132670
-
- thumb_func_start sub_813269C
-sub_813269C: @ 813269C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _081326C8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081326C0
- ldr r0, _081326CC @ =sub_81326D8
- bl SetMainCallback2
- ldr r1, _081326D0 @ =gFieldCallback
- ldr r0, _081326D4 @ =sub_8080990
- str r0, [r1]
- adds r0, r4, 0
- bl DestroyTask
-_081326C0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081326C8: .4byte gPaletteFade
-_081326CC: .4byte sub_81326D8
-_081326D0: .4byte gFieldCallback
-_081326D4: .4byte sub_8080990
- thumb_func_end sub_813269C
-
- thumb_func_start sub_81326D8
-sub_81326D8: @ 81326D8
- push {r4,r5,lr}
- movs r1, 0x80
- lsls r1, 19
- movs r0, 0
- strh r0, [r1]
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl ResetTasks
- ldr r4, _08132778 @ =gUnknown_030007B0
- ldr r0, _0813277C @ =0x02017000
- str r0, [r4]
- bl sub_81332A0
- ldr r1, [r4]
- ldr r0, _08132780 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- ldr r2, _08132784 @ =0x000002c5
- adds r1, r2
- movs r5, 0
- strb r0, [r1]
- bl sub_8133558
- ldr r0, _08132788 @ =sub_813265C
- bl SetVBlankCallback
- ldr r4, _0813278C @ =gWindowConfig_81E7240
- adds r0, r4, 0
- bl SetUpWindowConfig
- adds r0, r4, 0
- bl InitMenuWindow
- bl MenuZeroFillScreen
- ldr r4, _08132790 @ =gWindowConfig_81E6CE4
- adds r0, r4, 0
- bl SetUpWindowConfig
- adds r0, r4, 0
- bl InitMenuWindow
- bl MenuZeroFillScreen
- ldr r0, _08132794 @ =REG_BG0VOFS
- strh r5, [r0]
- strh r5, [r0]
- adds r0, 0x2
- strh r5, [r0]
- strh r5, [r0]
- ldr r0, _08132798 @ =gUnknown_08402D80
- bl LoadSpriteSheet
- ldr r0, _0813279C @ =gUnknown_08402D88
- bl LoadSpritePalette
- bl sub_8133358
- movs r0, 0
- movs r1, 0
- movs r2, 0x2
- bl FillPalette
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- ldr r0, _081327A0 @ =sub_8132870
- bl SetMainCallback2
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08132778: .4byte gUnknown_030007B0
-_0813277C: .4byte 0x02017000
-_08132780: .4byte gSpecialVar_0x8004
-_08132784: .4byte 0x000002c5
-_08132788: .4byte sub_813265C
-_0813278C: .4byte gWindowConfig_81E7240
-_08132790: .4byte gWindowConfig_81E6CE4
-_08132794: .4byte REG_BG0VOFS
-_08132798: .4byte gUnknown_08402D80
-_0813279C: .4byte gUnknown_08402D88
-_081327A0: .4byte sub_8132870
- thumb_func_end sub_81326D8
-
- thumb_func_start sub_81327A4
-sub_81327A4: @ 81327A4
- push {r4,r5,lr}
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl ResetTasks
- ldr r4, _08132844 @ =gUnknown_030007B0
- ldr r0, _08132848 @ =0x02017000
- str r0, [r4]
- bl sub_8133558
- ldr r1, [r4]
- ldr r0, _0813284C @ =gSpecialVar_0x8005
- ldrh r0, [r0]
- ldr r2, _08132850 @ =0x000002c6
- adds r1, r2
- movs r5, 0
- strb r0, [r1]
- ldr r0, _08132854 @ =sub_813265C
- bl SetVBlankCallback
- ldr r4, _08132858 @ =gWindowConfig_81E7240
- adds r0, r4, 0
- bl SetUpWindowConfig
- adds r0, r4, 0
- bl InitMenuWindow
- bl MenuZeroFillScreen
- ldr r4, _0813285C @ =gWindowConfig_81E6CE4
- adds r0, r4, 0
- bl SetUpWindowConfig
- adds r0, r4, 0
- bl InitMenuWindow
- bl MenuZeroFillScreen
- movs r1, 0x80
- lsls r1, 19
- movs r2, 0x9A
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _08132860 @ =REG_BG0VOFS
- strh r5, [r0]
- subs r0, 0x2
- strh r5, [r0]
- adds r0, 0x4
- strh r5, [r0]
- strh r5, [r0]
- ldr r0, _08132864 @ =gUnknown_08402D80
- bl LoadSpriteSheet
- ldr r0, _08132868 @ =gUnknown_08402D88
- bl LoadSpritePalette
- bl sub_8133358
- movs r0, 0
- movs r1, 0
- movs r2, 0x2
- bl FillPalette
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- ldr r0, _0813286C @ =sub_8132870
- bl SetMainCallback2
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08132844: .4byte gUnknown_030007B0
-_08132848: .4byte 0x02017000
-_0813284C: .4byte gSpecialVar_0x8005
-_08132850: .4byte 0x000002c6
-_08132854: .4byte sub_813265C
-_08132858: .4byte gWindowConfig_81E7240
-_0813285C: .4byte gWindowConfig_81E6CE4
-_08132860: .4byte REG_BG0VOFS
-_08132864: .4byte gUnknown_08402D80
-_08132868: .4byte gUnknown_08402D88
-_0813286C: .4byte sub_8132870
- thumb_func_end sub_81327A4
-
- thumb_func_start sub_8132870
-sub_8132870: @ 8132870
- push {r4,lr}
- bl sub_8132908
- ldr r4, _081328E0 @ =gUnknown_030007B0
- ldr r1, [r4]
- ldrb r0, [r1, 0x1D]
- cmp r0, 0
- beq _08132896
- movs r0, 0
- strb r0, [r1, 0x1D]
- ldr r0, [r4]
- ldrb r1, [r0, 0x18]
- lsls r1, 1
- adds r1, 0x1
- lsls r1, 27
- lsrs r1, 24
- movs r0, 0x58
- bl sub_814AD7C
-_08132896:
- ldr r1, [r4]
- ldrb r0, [r1, 0x1E]
- cmp r0, 0
- beq _081328A6
- movs r0, 0
- strb r0, [r1, 0x1E]
- bl sub_8133800
-_081328A6:
- ldr r1, [r4]
- ldr r2, _081328E4 @ =0x000002c3
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _081328C8
- adds r2, 0x1
- adds r0, r1, r2
- ldrb r0, [r0]
- movs r1, 0x1
- bl sub_8133AEC
- ldr r0, [r4]
- ldr r1, _081328E4 @ =0x000002c3
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_081328C8:
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081328E0: .4byte gUnknown_030007B0
-_081328E4: .4byte 0x000002c3
- thumb_func_end sub_8132870
-
- thumb_func_start sub_81328E8
-sub_81328E8: @ 81328E8
- push {r4,lr}
- adds r1, r0, 0
- ldr r4, _08132904 @ =gStringVar4
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x3
- movs r2, 0xF
- bl MenuPrintMessage
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08132904: .4byte gStringVar4
- thumb_func_end sub_81328E8
-
- thumb_func_start sub_8132908
-sub_8132908: @ 8132908
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- ldr r1, _0813292C @ =gUnknown_030007B0
- ldr r0, [r1]
- ldrb r0, [r0]
- adds r7, r1, 0
- cmp r0, 0x21
- bls _08132920
- b _08132FD6
-_08132920:
- lsls r0, 2
- ldr r1, _08132930 @ =_08132934
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0813292C: .4byte gUnknown_030007B0
-_08132930: .4byte _08132934
- .align 2, 0
-_08132934:
- .4byte _081329BC
- .4byte _08132A0C
- .4byte _08132A24
- .4byte _08132A2C
- .4byte _08132A60
- .4byte _08132A66
- .4byte _08132A98
- .4byte _08132FD6
- .4byte _08132AAA
- .4byte _08132AD0
- .4byte _08132FD6
- .4byte _08132FD6
- .4byte _08132B74
- .4byte _08132B98
- .4byte _08132DD8
- .4byte _08132DF8
- .4byte _08132BF0
- .4byte _08132C08
- .4byte _08132C2C
- .4byte _08132D40
- .4byte _08132D68
- .4byte _08132DB8
- .4byte _08132DC6
- .4byte _08132FD6
- .4byte _08132C74
- .4byte _08132C8C
- .4byte _08132CB0
- .4byte _08132D0C
- .4byte _08132E18
- .4byte _08132E7C
- .4byte _08132F58
- .4byte _08132F84
- .4byte _08132FA4
- .4byte _08132FBC
-_081329BC:
- ldr r1, [r7]
- ldrb r0, [r1]
- adds r0, 0x1
- movs r4, 0
- strb r0, [r1]
- bl sub_8132FEC
- movs r0, 0
- bl sub_8133030
- bl sub_8133800
- ldr r0, _08132A04 @ =gSprites
- adds r0, 0x64
- movs r1, 0x48
- strh r1, [r0]
- ldr r0, [r7]
- ldr r1, _08132A08 @ =0x000002c3
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r1, 0x80
- lsls r1, 19
- movs r2, 0x9A
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- b _08132FD6
- .align 2, 0
-_08132A04: .4byte gSprites
-_08132A08: .4byte 0x000002c3
-_08132A0C:
- ldr r0, _08132A20 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08132A1A
- b _08132FD6
-_08132A1A:
- ldr r1, [r7]
- movs r0, 0x4
- b _08132FD4
- .align 2, 0
-_08132A20: .4byte gPaletteFade
-_08132A24:
- ldr r1, [r7]
- ldrb r0, [r1]
- adds r0, 0x1
- b _08132FD4
-_08132A2C:
- movs r0, 0
- bl sub_8133030
- bl sub_8133800
- ldr r2, _08132A54 @ =gUnknown_030007B0
- ldr r0, [r2]
- ldr r1, _08132A58 @ =0x000002c3
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- ldr r1, [r2]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, _08132A5C @ =gSprites
- adds r0, 0x64
- movs r1, 0x48
- strh r1, [r0]
- b _08132FD6
- .align 2, 0
-_08132A54: .4byte gUnknown_030007B0
-_08132A58: .4byte 0x000002c3
-_08132A5C: .4byte gSprites
-_08132A60:
- bl sub_81330E8
- b _08132A9C
-_08132A66:
- movs r0, 0
- bl sub_8133140
- bl sub_8133800
- ldr r2, _08132A8C @ =gUnknown_030007B0
- ldr r0, [r2]
- ldr r1, _08132A90 @ =0x000002c3
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, _08132A94 @ =gSprites
- adds r0, 0x64
- movs r1, 0x48
- strh r1, [r0]
- ldr r1, [r2]
- ldrb r0, [r1]
- adds r0, 0x1
- b _08132FD4
- .align 2, 0
-_08132A8C: .4byte gUnknown_030007B0
-_08132A90: .4byte 0x000002c3
-_08132A94: .4byte gSprites
-_08132A98:
- bl sub_8133248
-_08132A9C:
- lsls r0, 24
- cmp r0, 0
- beq _08132AA4
- b _08132FD6
-_08132AA4:
- bl sub_813362C
- b _08132FD6
-_08132AAA:
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- bne _08132AB6
- b _08132FD6
-_08132AB6:
- movs r0, 0x15
- movs r1, 0x7
- movs r2, 0x1
- bl DisplayYesNoMenu
- ldr r0, _08132ACC @ =gUnknown_030007B0
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- b _08132FD4
- .align 2, 0
-_08132ACC: .4byte gUnknown_030007B0
-_08132AD0:
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- bne _08132B3A
- bl sub_8133CA4
- ldr r4, _08132B1C @ =gUnknown_030007B0
- ldr r2, [r4]
- ldr r1, _08132B20 @ =0x000002c5
- adds r0, r2, r1
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08132B24 @ =gPlayerParty
- adds r0, r1
- ldrb r1, [r2, 0x1B]
- lsls r1, 1
- adds r2, 0x20
- adds r2, r1
- ldrh r1, [r2]
- bl GiveMoveToMon
- lsls r0, 16
- ldr r1, _08132B28 @ =0xffff0000
- cmp r0, r1
- beq _08132B34
- ldr r0, _08132B2C @ =gOtherText_PokeLearnedMove
- bl sub_81328E8
- ldr r1, _08132B30 @ =gSpecialVar_0x8004
- movs r0, 0x1
- strh r0, [r1]
- ldr r1, [r4]
- movs r0, 0x1F
- b _08132FD4
- .align 2, 0
-_08132B1C: .4byte gUnknown_030007B0
-_08132B20: .4byte 0x000002c5
-_08132B24: .4byte gPlayerParty
-_08132B28: .4byte 0xffff0000
-_08132B2C: .4byte gOtherText_PokeLearnedMove
-_08132B30: .4byte gSpecialVar_0x8004
-_08132B34:
- ldr r1, [r4]
- movs r0, 0x10
- b _08132FD4
-_08132B3A:
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08132B48
- cmp r1, 0x1
- beq _08132B48
- b _08132FD6
-_08132B48:
- bl sub_8133CA4
- ldr r3, _08132B70 @ =gUnknown_030007B0
- ldr r1, [r3]
- movs r2, 0xB1
- lsls r2, 2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _08132B60
- movs r0, 0x3
- strb r0, [r1]
-_08132B60:
- ldr r1, [r3]
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08132B6C
- b _08132FD6
-_08132B6C:
- movs r0, 0x5
- b _08132FD4
- .align 2, 0
-_08132B70: .4byte gUnknown_030007B0
-_08132B74:
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- bne _08132B80
- b _08132FD6
-_08132B80:
- movs r0, 0x15
- movs r1, 0x7
- movs r2, 0x1
- bl DisplayYesNoMenu
- ldr r0, _08132B94 @ =gUnknown_030007B0
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- b _08132FD4
- .align 2, 0
-_08132B94: .4byte gUnknown_030007B0
-_08132B98:
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r4, r0, 24
- cmp r4, 0
- bne _08132BB4
- bl sub_8133CA4
- ldr r0, _08132BB0 @ =gSpecialVar_0x8004
- strh r4, [r0]
- b _08132FCE
- .align 2, 0
-_08132BB0: .4byte gSpecialVar_0x8004
-_08132BB4:
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- beq _08132BC2
- cmp r4, 0x1
- beq _08132BC2
- b _08132FD6
-_08132BC2:
- bl sub_8133CA4
- ldr r3, _08132BEC @ =gUnknown_030007B0
- ldr r1, [r3]
- movs r2, 0xB1
- lsls r2, 2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _08132BDA
- movs r0, 0x3
- strb r0, [r1]
-_08132BDA:
- ldr r1, [r3]
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08132BE6
- b _08132FD6
-_08132BE6:
- movs r0, 0x5
- b _08132FD4
- .align 2, 0
-_08132BEC: .4byte gUnknown_030007B0
-_08132BF0:
- ldr r0, _08132C00 @ =gOtherText_DeleteOlderMove
- bl sub_81328E8
- ldr r0, _08132C04 @ =gUnknown_030007B0
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- b _08132FD4
- .align 2, 0
-_08132C00: .4byte gOtherText_DeleteOlderMove
-_08132C04: .4byte gUnknown_030007B0
-_08132C08:
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- bne _08132C14
- b _08132FD6
-_08132C14:
- movs r0, 0x15
- movs r1, 0x7
- movs r2, 0x1
- bl DisplayYesNoMenu
- ldr r0, _08132C28 @ =gUnknown_030007B0
- ldr r1, [r0]
- movs r0, 0x12
- b _08132FD4
- .align 2, 0
-_08132C28: .4byte gUnknown_030007B0
-_08132C2C:
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- bne _08132C54
- bl sub_8133CA4
- ldr r0, _08132C4C @ =gOtherText_WhichMoveToForget
- bl sub_81328E8
- ldr r0, _08132C50 @ =gUnknown_030007B0
- ldr r1, [r0]
- movs r0, 0x13
- b _08132FD4
- .align 2, 0
-_08132C4C: .4byte gOtherText_WhichMoveToForget
-_08132C50: .4byte gUnknown_030007B0
-_08132C54:
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08132C62
- cmp r1, 0x1
- beq _08132C62
- b _08132FD6
-_08132C62:
- bl sub_8133CA4
- ldr r0, _08132C70 @ =gUnknown_030007B0
- ldr r1, [r0]
- movs r0, 0x18
- b _08132FD4
- .align 2, 0
-_08132C70: .4byte gUnknown_030007B0
-_08132C74:
- ldr r0, _08132C84 @ =gOtherText_StopLearningMove
- bl sub_81328E8
- ldr r0, _08132C88 @ =gUnknown_030007B0
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- b _08132FD4
- .align 2, 0
-_08132C84: .4byte gOtherText_StopLearningMove
-_08132C88: .4byte gUnknown_030007B0
-_08132C8C:
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- bne _08132C98
- b _08132FD6
-_08132C98:
- ldr r0, _08132CAC @ =gUnknown_030007B0
- ldr r1, [r0]
- movs r0, 0x1A
- strb r0, [r1]
- movs r0, 0x15
- movs r1, 0x7
- movs r2, 0x1
- bl DisplayYesNoMenu
- b _08132FD6
- .align 2, 0
-_08132CAC: .4byte gUnknown_030007B0
-_08132CB0:
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- bne _08132CCC
- bl sub_8133CA4
- ldr r0, _08132CC8 @ =gUnknown_030007B0
- ldr r1, [r0]
- movs r0, 0x1B
- b _08132FD4
- .align 2, 0
-_08132CC8: .4byte gUnknown_030007B0
-_08132CCC:
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08132CDA
- cmp r1, 0x1
- beq _08132CDA
- b _08132FD6
-_08132CDA:
- bl sub_8133CA4
- ldr r1, _08132D08 @ =gUnknown_030007B0
- ldr r2, [r1]
- movs r3, 0xB1
- lsls r3, 2
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _08132CF2
- movs r0, 0x3
- strb r0, [r2]
-_08132CF2:
- ldr r2, [r1]
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08132D00
- movs r0, 0x5
- strb r0, [r2]
-_08132D00:
- ldr r1, [r1]
- movs r0, 0x10
- b _08132FD4
- .align 2, 0
-_08132D08: .4byte gUnknown_030007B0
-_08132D0C:
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- bne _08132D18
- b _08132FD6
-_08132D18:
- ldr r3, _08132D3C @ =gUnknown_030007B0
- ldr r1, [r3]
- movs r2, 0xB1
- lsls r2, 2
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _08132D2C
- movs r0, 0x3
- strb r0, [r1]
-_08132D2C:
- ldr r1, [r3]
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08132D38
- b _08132FD6
-_08132D38:
- movs r0, 0x5
- b _08132FD4
- .align 2, 0
-_08132D3C: .4byte gUnknown_030007B0
-_08132D40:
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- bne _08132D4C
- b _08132FD6
-_08132D4C:
- ldr r0, _08132D64 @ =gUnknown_030007B0
- ldr r1, [r0]
- movs r2, 0
- movs r0, 0x14
- strb r0, [r1]
- subs r0, 0x15
- str r2, [sp]
- movs r1, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- b _08132FD6
- .align 2, 0
-_08132D64: .4byte gUnknown_030007B0
-_08132D68:
- ldr r0, _08132DA4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08132D76
- b _08132FD6
-_08132D76:
- ldr r0, _08132DA8 @ =gPlayerParty
- ldr r5, [r7]
- ldr r2, _08132DAC @ =0x000002c5
- adds r1, r5, r2
- ldrb r1, [r1]
- ldr r2, _08132DB0 @ =gPlayerPartyCount
- ldrb r2, [r2]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _08132DB4 @ =sub_81327A4
- ldrb r4, [r5, 0x1B]
- lsls r4, 1
- adds r5, 0x20
- adds r5, r4
- ldrh r4, [r5]
- str r4, [sp]
- bl sub_809D9F0
- ldr r1, [r7]
- movs r0, 0x1C
- b _08132FD4
- .align 2, 0
-_08132DA4: .4byte gPaletteFade
-_08132DA8: .4byte gPlayerParty
-_08132DAC: .4byte 0x000002c5
-_08132DB0: .4byte gPlayerPartyCount
-_08132DB4: .4byte sub_81327A4
-_08132DB8:
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- bne _08132DC4
- b _08132FD6
-_08132DC4:
- b _08132FCE
-_08132DC6:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- b _08132FD6
-_08132DD8:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _08132DF4 @ =gUnknown_030007B0
- ldr r1, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- b _08132FD4
- .align 2, 0
-_08132DF4: .4byte gUnknown_030007B0
-_08132DF8:
- ldr r0, _08132E10 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08132E06
- b _08132FD6
-_08132E06:
- ldr r0, _08132E14 @ =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- b _08132FD6
- .align 2, 0
-_08132E10: .4byte gPaletteFade
-_08132E14: .4byte c2_exit_to_overworld_2_switch
-_08132E18:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r5, _08132E74 @ =gUnknown_030007B0
- ldr r1, [r5]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- bl sub_8132FEC
- bl sub_8133800
- ldr r0, [r5]
- movs r4, 0xB1
- lsls r4, 2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _08132E4E
- movs r0, 0x1
- bl sub_8133030
-_08132E4E:
- ldr r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08132E66
- ldr r0, _08132E78 @ =gSprites
- adds r0, 0x64
- movs r1, 0x48
- strh r1, [r0]
- movs r0, 0x1
- bl sub_8133140
-_08132E66:
- ldr r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0x1
- bl sub_8133AEC
- b _08132FD6
- .align 2, 0
-_08132E74: .4byte gUnknown_030007B0
-_08132E78: .4byte gSprites
-_08132E7C:
- ldr r0, _08132E9C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08132E8A
- b _08132FD6
-_08132E8A:
- ldr r1, [r7]
- ldr r0, _08132EA0 @ =0x000002c6
- adds r2, r1, r0
- ldrb r0, [r2]
- cmp r0, 0x4
- bne _08132EA4
- movs r0, 0x18
- b _08132FD4
- .align 2, 0
-_08132E9C: .4byte gPaletteFade
-_08132EA0: .4byte 0x000002c6
-_08132EA4:
- ldr r4, _08132F38 @ =0x000002c5
- adds r0, r1, r4
- ldrb r0, [r0]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _08132F3C @ =gPlayerParty
- adds r0, r5
- ldrb r1, [r2]
- adds r1, 0xD
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _08132F40 @ =gStringVar3
- movs r1, 0xD
- mov r9, r1
- mov r1, r9
- muls r1, r0
- ldr r0, _08132F44 @ =gMoveNames
- mov r8, r0
- 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, _08132F48 @ =0x000002c6
- adds r1, r2
- ldrb r1, [r1]
- bl RemoveMonPPBonus
- ldr r3, [r7]
- adds r4, r3, r4
- ldrb r0, [r4]
- muls r0, r6
- adds r0, r5
- ldrb r2, [r3, 0x1B]
- lsls r2, 1
- adds r1, r3, 0
- adds r1, 0x20
- adds r1, r2
- ldrh r1, [r1]
- ldr r2, _08132F48 @ =0x000002c6
- adds r3, r2
- ldrb r2, [r3]
- bl SetMonMoveSlot
- ldr r0, _08132F4C @ =gStringVar2
- ldr r1, [r7]
- ldrb r2, [r1, 0x1B]
- lsls r2, 1
- adds r1, 0x20
- adds r1, r2
- ldrh r1, [r1]
- mov r2, r9
- muls r2, r1
- adds r1, r2, 0
- add r1, r8
- bl StringCopy
- ldr r0, _08132F50 @ =gOtherText_ForgotMove123
- bl sub_81328E8
- ldr r1, [r7]
- movs r0, 0x1E
- strb r0, [r1]
- ldr r1, _08132F54 @ =gSpecialVar_0x8004
- movs r0, 0x1
- strh r0, [r1]
- b _08132FD6
- .align 2, 0
-_08132F38: .4byte 0x000002c5
-_08132F3C: .4byte gPlayerParty
-_08132F40: .4byte gStringVar3
-_08132F44: .4byte gMoveNames
-_08132F48: .4byte 0x000002c6
-_08132F4C: .4byte gStringVar2
-_08132F50: .4byte gOtherText_ForgotMove123
-_08132F54: .4byte gSpecialVar_0x8004
-_08132F58:
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- beq _08132FD6
- ldr r0, _08132F78 @ =gOtherText_ForgotOrDidNotLearnMove / deuOtherText_ForgotAndLearned
- bl sub_81328E8
- ldr r0, _08132F7C @ =gUnknown_030007B0
- ldr r1, [r0]
- movs r0, 0x1F
- strb r0, [r1]
- ldr r0, _08132F80 @ =0x0000016f
- bl PlayFanfare
- b _08132FD6
- .align 2, 0
-.ifdef ENGLISH
-_08132F78: .4byte gOtherText_ForgotOrDidNotLearnMove
-.else
-_08132F78: .4byte deuOtherText_ForgotAndLearned
-.endif
-_08132F7C: .4byte gUnknown_030007B0
-_08132F80: .4byte 0x0000016f
-_08132F84:
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- beq _08132FD6
- ldr r0, _08132F9C @ =0x0000016f
- bl PlayFanfare
- ldr r0, _08132FA0 @ =gUnknown_030007B0
- ldr r1, [r0]
- movs r0, 0x20
- b _08132FD4
- .align 2, 0
-_08132F9C: .4byte 0x0000016f
-_08132FA0: .4byte gUnknown_030007B0
-_08132FA4:
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- beq _08132FD6
- ldr r0, _08132FB8 @ =gUnknown_030007B0
- ldr r1, [r0]
- movs r0, 0x21
- b _08132FD4
- .align 2, 0
-_08132FB8: .4byte gUnknown_030007B0
-_08132FBC:
- ldr r0, _08132FE4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08132FD6
- movs r0, 0x5
- bl PlaySE
-_08132FCE:
- ldr r0, _08132FE8 @ =gUnknown_030007B0
- ldr r1, [r0]
- movs r0, 0xE
-_08132FD4:
- strb r0, [r1]
-_08132FD6:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08132FE4: .4byte gMain
-_08132FE8: .4byte gUnknown_030007B0
- thumb_func_end sub_8132908
-
- thumb_func_start sub_8132FEC
-sub_8132FEC: @ 8132FEC
- push {r4-r6,lr}
- ldr r0, _08133024 @ =gWindowConfig_81E7240
- bl BasicInitMenuWindow
- movs r5, 0
- ldr r4, _08133028 @ =gUnknown_08402CF8
- adds r6, r4, 0
-_08132FFA:
- lsls r3, r5, 2
- ldrb r0, [r4]
- adds r1, r6, 0x1
- adds r1, r3, r1
- ldrb r1, [r1]
- adds r2, r6, 0x2
- adds r3, r2
- ldrb r2, [r3]
- ldrb r3, [r4, 0x3]
- bl MenuDrawTextWindow
- adds r4, 0x4
- adds r5, 0x1
- cmp r5, 0x3
- bls _08132FFA
- ldr r0, _0813302C @ =gWindowConfig_81E6CE4
- bl BasicInitMenuWindow
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08133024: .4byte gWindowConfig_81E7240
-_08133028: .4byte gUnknown_08402CF8
-_0813302C: .4byte gWindowConfig_81E6CE4
- thumb_func_end sub_8132FEC
-
- thumb_func_start sub_8133030
-sub_8133030: @ 8133030
- push {r4-r7,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r4, _081330D4 @ =gSprites
- ldr r5, _081330D8 @ =gUnknown_030007B0
- ldr r0, [r5]
- ldrb r0, [r0, 0x3]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- adds r1, 0x3E
- ldrb r3, [r1]
- movs r2, 0x5
- negs r2, r2
- adds r0, r2, 0
- ands r0, r3
- strb r0, [r1]
- ldr r0, [r5]
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r0, 0x3E
- ldrb r1, [r0]
- ands r2, r1
- strb r2, [r0]
- movs r2, 0
- ldr r6, _081330DC @ =gUnknown_08402D08
- movs r3, 0x4
-_08133070:
- ldr r0, [r5]
- adds r0, r2
- ldrb r1, [r0, 0x7]
- 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, 0xF
- ble _08133070
- ldr r0, [r6]
- cmp r0, 0
- beq _081330B4
- ldr r5, _081330E0 @ =gTileBuffer
- adds r4, r6, 0
-_08133096:
- ldr r1, [r4]
- adds r0, r5, 0
- movs r2, 0x40
- movs r3, 0x2
- bl sub_8072C74
- ldrb r1, [r4, 0x4]
- ldrb r2, [r4, 0x5]
- adds r0, r5, 0
- bl MenuPrint
- adds r4, 0x8
- ldr r0, [r4]
- cmp r0, 0
- bne _08133096
-_081330B4:
- cmp r7, 0
- bne _081330CC
- ldr r0, _081330E4 @ =gOtherText_TeachWhichMove
- movs r1, 0x20
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- movs r1, 0x18
- movs r2, 0x78
- movs r3, 0xC0
- bl sub_8072AB0
-_081330CC:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081330D4: .4byte gSprites
-_081330D8: .4byte gUnknown_030007B0
-_081330DC: .4byte gUnknown_08402D08
-_081330E0: .4byte gTileBuffer
-_081330E4: .4byte gOtherText_TeachWhichMove
- thumb_func_end sub_8133030
-
- thumb_func_start sub_81330E8
-sub_81330E8: @ 81330E8
- push {r4,lr}
- ldr r0, _08133134 @ =gMain
- ldrh r2, [r0, 0x2E]
- movs r1, 0x30
- ands r1, r2
- negs r0, r1
- orrs r0, r1
- lsrs r4, r0, 31
- ldr r0, _08133138 @ =gSaveBlock2
- ldrb r0, [r0, 0x13]
- cmp r0, 0x1
- bne _0813310C
- movs r0, 0xC0
- lsls r0, 2
- ands r0, r2
- cmp r0, 0
- beq _0813310C
- adds r4, 0x1
-_0813310C:
- cmp r4, 0
- beq _0813312A
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0813313C @ =gUnknown_030007B0
- ldr r1, [r2]
- movs r0, 0x5
- strb r0, [r1]
- ldr r0, [r2]
- movs r1, 0xB1
- lsls r1, 2
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
-_0813312A:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08133134: .4byte gMain
-_08133138: .4byte gSaveBlock2
-_0813313C: .4byte gUnknown_030007B0
- thumb_func_end sub_81330E8
thumb_func_start sub_8133140
sub_8133140: @ 8133140
diff --git a/data/learn_move.s b/data/learn_move.s
index 369fbfdf0..252f47ac6 100644
--- a/data/learn_move.s
+++ b/data/learn_move.s
@@ -3,37 +3,6 @@
.section .rodata
- .align 2
-gDexArrows_Pal::
- .incbin "graphics/pokedex/arrows.gbapal"
-
- .align 2
-gDexArrows_Gfx::
- .incbin "graphics/pokedex/arrows.4bpp"
-
-gUnknown_08402CF8:: @ 8402CF8
- .byte 0, 0, 9, 13
- .byte 10, 0, 29, 7
- .byte 2, 14, 27, 19
- .byte 10, 8, 29, 13
-
-gUnknown_08402D08:: @ 8402D08
- .4byte OtherText_Battle
- .byte 1, 1, 0, 0
- .4byte OtherText_Power
- .byte 1, 4, 1, 0
- .4byte OtherText_Accuracy
- .byte 1, 9, 2, 0
- .space 8
-
- .4byte OtherText_Contest
- .byte 1, 1, 0, 0
- .4byte OtherText_Appeal
- .byte 1, 4, 1, 0
- .4byte OtherText_Jam
- .byte 1, 9, 2, 0
- .space 8
-
.4byte 0xFF00FFEF
.4byte gTileBuffer
diff --git a/ld_script.txt b/ld_script.txt
index c895c4d06..142e7a421 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -244,6 +244,7 @@ SECTIONS {
asm/battle_anim_81258BC.o(.text_812BBFC);
src/fldeff_sweetscent.o(.text);
asm/battle_anim_812C144.o(.text);
+ src/learn_move.o(.text);
asm/learn_move.o(.text);
src/fldeff_softboiled.o(.text);
src/decoration_inventory.o(.text);
@@ -453,6 +454,7 @@ SECTIONS {
data/contest_ai.o(.rodata);
data/battle_anim_81258BC.o(.rodata);
data/battle_anim_812C144.o(.rodata);
+ src/learn_move.o(.rodata);
data/learn_move.o(.rodata);
src/decoration_inventory.o(.rodata);
src/roamer.o(.rodata);
diff --git a/src/learn_move.c b/src/learn_move.c
new file mode 100644
index 000000000..fe14cebf6
--- /dev/null
+++ b/src/learn_move.c
@@ -0,0 +1,556 @@
+#include "global.h"
+#include "data2.h"
+#include "field_fadetransition.h"
+#include "main.h"
+#include "menu.h"
+#include "menu_cursor.h"
+#include "palette.h"
+#include "pokemon.h"
+#include "rom4.h"
+#include "script.h"
+#include "songs.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "strings2.h"
+#include "task.h"
+
+struct UnknownStruct1
+{
+ const u8 *unk0;
+ u8 unk4;
+ u8 unk5;
+ u8 unk6;
+};
+
+extern u8 ewram[];
+extern u16 gSpecialVar_0x8004;
+extern u16 gSpecialVar_0x8005;
+extern u8 gTileBuffer[];
+
+extern const struct WindowConfig gWindowConfig_81E6CE4;
+extern const struct WindowConfig gWindowConfig_81E7240;
+extern const struct UnknownStruct1 gUnknown_08402D08[];
+extern const struct SpriteSheet gUnknown_08402D80;
+extern const struct SpritePalette gUnknown_08402D88;
+
+extern void sub_809D9F0(struct Pokemon *, u8, u8, void *, u32);
+
+struct Struct2017000
+{
+ u8 unk0;
+ u8 filler1[2];
+ u8 unk3;
+ u8 unk4;
+ u8 unk5[16];
+ u8 filler15[3];
+ u8 unk18;
+ u8 filler19[0x1B-0x19];
+ u8 unk1B;
+ u8 filler1C;
+ u8 unk1D;
+ u8 unk1E;
+ u8 filler1F;
+ u16 unk20[4];
+ u8 filler28[0x2C3-0x28];
+ u8 unk2C3;
+ u8 unk2C4;
+ u8 unk2C5;
+ u8 unk2C6;
+};
+
+extern struct Struct2017000 *gUnknown_030007B0;
+
+const u16 gDexArrows_Pal[] = INCBIN_U16("graphics/pokedex/arrows.gbapal");
+
+const u8 gDexArrows_Gfx[] = INCBIN_U8("graphics/pokedex/arrows.4bpp");
+
+const u8 gUnknown_08402CF8[][4] =
+{
+ { 0, 0, 9, 13},
+ {10, 0, 29, 7},
+ { 2, 14, 27, 19},
+ {10, 8, 29, 13},
+};
+
+const struct UnknownStruct1 gUnknown_08402D08[] =
+{
+ {OtherText_Battle, 1, 1, 0},
+ {OtherText_Power, 1, 4, 1},
+ {OtherText_Accuracy, 1, 9, 2},
+ {NULL, 0, 0, 0},
+ {OtherText_Contest, 1, 1, 0},
+ {OtherText_Appeal, 1, 4, 1},
+ {OtherText_Jam, 1, 9, 2},
+ {NULL, 0, 0, 0},
+};
+
+void sub_813269C(u8);
+void sub_81326D8(void);
+void sub_8132870(void);
+void sub_8132908(void);
+void sub_8132FEC(void);
+void sub_8133030(u8);
+u8 sub_81330E8(void);
+void sub_8133140(u8);
+u8 sub_8133248(void);
+void sub_81332A0(void);
+void sub_8133358(void);
+void sub_8133558(void);
+void sub_813362C(void);
+void sub_8133800(void);
+void sub_8133AEC();
+void sub_8133CA4(void);
+
+void sub_813265C(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void sub_8132670(void)
+{
+ ScriptContext2_Enable();
+ CreateTask(sub_813269C, 10);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+}
+
+void sub_813269C(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(sub_81326D8);
+ gFieldCallback = sub_8080990;
+ DestroyTask(taskId);
+ }
+}
+
+void sub_81326D8(void)
+{
+ REG_DISPCNT = 0;
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetTasks();
+ gUnknown_030007B0 = (struct Struct2017000 *)(ewram + 0x17000);
+ sub_81332A0();
+ gUnknown_030007B0->unk2C5 = gSpecialVar_0x8004;
+ sub_8133558();
+ SetVBlankCallback(sub_813265C);
+
+ SetUpWindowConfig(&gWindowConfig_81E7240);
+ InitMenuWindow(&gWindowConfig_81E7240);
+ MenuZeroFillScreen();
+
+ SetUpWindowConfig(&gWindowConfig_81E6CE4);
+ InitMenuWindow(&gWindowConfig_81E6CE4);
+ MenuZeroFillScreen();
+
+ REG_BG0VOFS = 0;
+ REG_BG0VOFS = 0; // huh?
+ REG_BG1HOFS = 0;
+ REG_BG1HOFS = 0; // huh?
+
+ LoadSpriteSheet(&gUnknown_08402D80);
+ LoadSpritePalette(&gUnknown_08402D88);
+ sub_8133358();
+ FillPalette(0, 0, 2);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ SetMainCallback2(sub_8132870);
+}
+
+void sub_81327A4(void)
+{
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetTasks();
+ gUnknown_030007B0 = (struct Struct2017000 *)(ewram + 0x17000);
+ sub_8133558();
+ gUnknown_030007B0->unk2C6 = gSpecialVar_0x8005;
+ SetVBlankCallback(sub_813265C);
+
+ SetUpWindowConfig(&gWindowConfig_81E7240);
+ InitMenuWindow(&gWindowConfig_81E7240);
+ MenuZeroFillScreen();
+
+ SetUpWindowConfig(&gWindowConfig_81E6CE4);
+ InitMenuWindow(&gWindowConfig_81E6CE4);
+ MenuZeroFillScreen();
+
+ REG_DISPCNT = 0x1340;
+ REG_BG0VOFS = 0;
+ REG_BG0HOFS = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1HOFS = 0; // huh?
+
+ LoadSpriteSheet(&gUnknown_08402D80);
+ LoadSpritePalette(&gUnknown_08402D88);
+ sub_8133358();
+ FillPalette(0, 0, 2);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ SetMainCallback2(sub_8132870);
+}
+
+void sub_8132870(void)
+{
+ sub_8132908();
+ if (gUnknown_030007B0->unk1D != 0)
+ {
+ gUnknown_030007B0->unk1D = 0;
+ sub_814AD7C(0x58, (gUnknown_030007B0->unk18 * 2 + 1) * 8);
+ }
+ if (gUnknown_030007B0->unk1E != 0)
+ {
+ gUnknown_030007B0->unk1E = 0;
+ sub_8133800();
+ }
+ if (gUnknown_030007B0->unk2C3 != 0)
+ {
+ sub_8133AEC(gUnknown_030007B0->unk2C4, 1);
+ gUnknown_030007B0->unk2C3 = 0;
+ }
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void sub_81328E8(const u8 *a)
+{
+ StringExpandPlaceholders(gStringVar4, a);
+ MenuPrintMessage(gStringVar4, 3, 15);
+}
+
+void sub_8132908(void)
+{
+ switch (gUnknown_030007B0->unk0)
+ {
+ case 0:
+ gUnknown_030007B0->unk0++;
+ sub_8132FEC();
+ sub_8133030(0);
+ sub_8133800();
+ gSprites[1].pos1.x = 0x48;
+ gUnknown_030007B0->unk2C3 = 1;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ REG_DISPCNT = 0x1340;
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ gUnknown_030007B0->unk0 = 4;
+ break;
+ case 2:
+ gUnknown_030007B0->unk0++;
+ break;
+ case 3:
+ sub_8133030(0);
+ sub_8133800();
+ gUnknown_030007B0->unk2C3 = 1;
+ gUnknown_030007B0->unk0++;
+ gSprites[1].pos1.x = 0x48;
+ break;
+ case 4:
+ if (sub_81330E8() == 0)
+ sub_813362C();
+ return;
+ case 5:
+ sub_8133140(0);
+ sub_8133800();
+ gUnknown_030007B0->unk2C3 = 1;
+ gSprites[1].pos1.x = 0x48;
+ gUnknown_030007B0->unk0++;
+ break;
+ case 6:
+ if (sub_8133248() == 0)
+ sub_813362C();
+ break;
+ case 8:
+ if (MenuUpdateWindowText())
+ {
+ DisplayYesNoMenu(21, 7, 1);
+ gUnknown_030007B0->unk0++;
+ }
+ break;
+ case 9:
+ {
+ s8 var = ProcessMenuInputNoWrap_();
+
+ if (var == 0)
+ {
+ sub_8133CA4();
+ if (GiveMoveToMon(&gPlayerParty[gUnknown_030007B0->unk2C5], gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B]) != 0xFFFF)
+ {
+ sub_81328E8(gOtherText_PokeLearnedMove);
+ gSpecialVar_0x8004 = 1;
+ gUnknown_030007B0->unk0 = 31;
+ }
+ else
+ {
+ gUnknown_030007B0->unk0 = 16;
+ }
+ }
+ else if (var == -1 || var == 1)
+ {
+ sub_8133CA4();
+ if (gUnknown_030007B0->unk2C4 == 0)
+ gUnknown_030007B0->unk0 = 3;
+ if (gUnknown_030007B0->unk2C4 == 1)
+ gUnknown_030007B0->unk0 = 5;
+ }
+ }
+ break;
+ case 12:
+ if (MenuUpdateWindowText())
+ {
+ DisplayYesNoMenu(21, 7, 1);
+ gUnknown_030007B0->unk0++;
+ }
+ break;
+ case 13:
+ {
+ s8 r4 = ProcessMenuInputNoWrap_();
+
+ if (r4 == 0)
+ {
+ sub_8133CA4();
+ gSpecialVar_0x8004 = r4;
+ gUnknown_030007B0->unk0 = 14;
+ }
+ else if (r4 == -1 || r4 == 1)
+ {
+ sub_8133CA4();
+ if (gUnknown_030007B0->unk2C4 == 0)
+ gUnknown_030007B0->unk0 = 3;
+ if (gUnknown_030007B0->unk2C4 == 1)
+ gUnknown_030007B0->unk0 = 5;
+ }
+ }
+ break;
+ case 16:
+ sub_81328E8(gOtherText_DeleteOlderMove);
+ gUnknown_030007B0->unk0++;
+ break;
+ case 17:
+ if (MenuUpdateWindowText())
+ {
+ DisplayYesNoMenu(21, 7, 1);
+ gUnknown_030007B0->unk0 = 18;
+ }
+ break;
+ case 18:
+ {
+ s8 var = ProcessMenuInputNoWrap_();
+
+ if (var == 0)
+ {
+ sub_8133CA4();
+ sub_81328E8(gOtherText_WhichMoveToForget);
+ gUnknown_030007B0->unk0 = 19;
+ }
+ else if (var == -1 || var == 1)
+ {
+ sub_8133CA4();
+ gUnknown_030007B0->unk0 = 24;
+ }
+ }
+ break;
+ case 24:
+ sub_81328E8(gOtherText_StopLearningMove);
+ gUnknown_030007B0->unk0++;
+ break;
+ case 25:
+ if (MenuUpdateWindowText())
+ {
+ gUnknown_030007B0->unk0 = 26;
+ DisplayYesNoMenu(21, 7, 1);
+ }
+ break;
+ case 26:
+ {
+ s8 var = ProcessMenuInputNoWrap_();
+
+ if (var == 0)
+ {
+ sub_8133CA4();
+ gUnknown_030007B0->unk0 = 27;
+ }
+ else if (var == -1 || var == 1)
+ {
+ sub_8133CA4();
+
+ // What's the point? It gets set to 16, anyway.
+ if (gUnknown_030007B0->unk2C4 == 0)
+ gUnknown_030007B0->unk0 = 3;
+ if (gUnknown_030007B0->unk2C4 == 1)
+ gUnknown_030007B0->unk0 = 5;
+ gUnknown_030007B0->unk0 = 16;
+ }
+ }
+ break;
+ case 27:
+ if (MenuUpdateWindowText())
+ {
+ if (gUnknown_030007B0->unk2C4 == 0)
+ gUnknown_030007B0->unk0 = 3;
+ if (gUnknown_030007B0->unk2C4 == 1)
+ gUnknown_030007B0->unk0 = 5;
+ }
+ break;
+ case 19:
+ if (MenuUpdateWindowText())
+ {
+ gUnknown_030007B0->unk0 = 20;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ }
+ break;
+ case 20:
+ if (!gPaletteFade.active)
+ {
+ sub_809D9F0(gPlayerParty, gUnknown_030007B0->unk2C5, gPlayerPartyCount - 1, sub_81327A4, gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B]);
+ gUnknown_030007B0->unk0 = 28;
+ }
+ break;
+ case 21:
+ if (MenuUpdateWindowText())
+ gUnknown_030007B0->unk0 = 14;
+ break;
+ case 22:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ break;
+ case 14:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gUnknown_030007B0->unk0++;
+ break;
+ case 15:
+ if (!gPaletteFade.active)
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+ break;
+ case 28:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ gUnknown_030007B0->unk0++;
+ sub_8132FEC();
+ sub_8133800();
+ if (gUnknown_030007B0->unk2C4 == 0)
+ sub_8133030(1);
+ if (gUnknown_030007B0->unk2C4 == 1)
+ {
+ gSprites[1].pos1.x = 0x48;
+ sub_8133140(1);
+ }
+ sub_8133AEC(gUnknown_030007B0->unk2C4, 1);
+ break;
+ case 29:
+ if (!gPaletteFade.active)
+ {
+ if (gUnknown_030007B0->unk2C6 == 4)
+ {
+ gUnknown_030007B0->unk0 = 24;
+ }
+ else
+ {
+ u16 moveId = GetMonData(&gPlayerParty[gUnknown_030007B0->unk2C5], MON_DATA_MOVE1 + gUnknown_030007B0->unk2C6);
+
+ StringCopy(gStringVar3, gMoveNames[moveId]);
+ RemoveMonPPBonus(&gPlayerParty[gUnknown_030007B0->unk2C5], gUnknown_030007B0->unk2C6);
+ SetMonMoveSlot(&gPlayerParty[gUnknown_030007B0->unk2C5], gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B], gUnknown_030007B0->unk2C6);
+ StringCopy(gStringVar2, gMoveNames[gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B]]);
+ sub_81328E8(gOtherText_ForgotMove123);
+ gUnknown_030007B0->unk0 = 30;
+ gSpecialVar_0x8004 = 1;
+ }
+ }
+ break;
+ case 30:
+ if (MenuUpdateWindowText())
+ {
+#ifdef ENGLISH
+ sub_81328E8(gOtherText_ForgotOrDidNotLearnMove);
+#else
+ sub_81328E8(deuOtherText_ForgotAndLearned);
+#endif
+ gUnknown_030007B0->unk0 = 31;
+ PlayFanfare(BGM_FANFA1);
+ }
+ break;
+ case 31:
+ if (MenuUpdateWindowText())
+ {
+ PlayFanfare(BGM_FANFA1);
+ gUnknown_030007B0->unk0 = 32;
+ }
+ break;
+ case 32:
+ if (IsFanfareTaskInactive())
+ gUnknown_030007B0->unk0 = 33;
+ break;
+ case 33:
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_030007B0->unk0 = 14;
+ }
+ break;
+ }
+}
+
+void sub_8132FEC(void)
+{
+ u32 i;
+
+ BasicInitMenuWindow(&gWindowConfig_81E7240);
+ for (i = 0; i < 4; i++)
+ {
+ MenuDrawTextWindow(
+ gUnknown_08402CF8[i][0],
+ gUnknown_08402CF8[i][1],
+ gUnknown_08402CF8[i][2],
+ gUnknown_08402CF8[i][3]);
+ }
+ BasicInitMenuWindow(&gWindowConfig_81E6CE4);
+}
+
+void sub_8133030(bool8 a)
+{
+ s32 i;
+
+ gSprites[gUnknown_030007B0->unk3].invisible = FALSE;
+ gSprites[gUnknown_030007B0->unk4].invisible = FALSE;
+ for (i = 0; i < 16; i++)
+ {
+ // Hmm...
+ gSprites[*((u8 *)gUnknown_030007B0 + i + 7)].invisible = TRUE;
+ }
+ for (i = 0; gUnknown_08402D08[i].unk0 != NULL; i++)
+ {
+ sub_8072C74(gTileBuffer, gUnknown_08402D08[i].unk0, 64, 2);
+ MenuPrint(gTileBuffer, gUnknown_08402D08[i].unk4, gUnknown_08402D08[i].unk5);
+ }
+ if (!a)
+ {
+ sub_8072AB0(gOtherText_TeachWhichMove, 24, 120, 192, 32, 1);
+ }
+}
+
+u8 sub_81330E8(void)
+{
+ u32 r4 = ((gMain.newKeys & 0x30) != 0);
+
+ if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR
+ && (gMain.newKeys & 0x300))
+ r4++;
+
+ if (r4 != 0)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_030007B0->unk0 = 5;
+ gUnknown_030007B0->unk2C4 = 1;
+ }
+
+ return r4;
+}