summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/learn_move.s1954
-rw-r--r--asm/save_menu_util.s149
-rw-r--r--baserom.ipsbin414160 -> 398989 bytes
-rw-r--r--data/battle_anim_effects_3.s2
-rw-r--r--data/berry_crush.s120
-rw-r--r--data/data_8466FB8.s12
-rw-r--r--data/field_effect_helpers.s20
-rw-r--r--data/field_map_obj.s10
-rw-r--r--data/fldeff_cut.s30
-rw-r--r--data/learn_move.s28
-rw-r--r--data/mevent/script_common.inc87
-rw-r--r--data/mevent/script_ish.inc65
-rw-r--r--data/pokemon_jump.s (renamed from data/data_8468C98.s)117
-rw-r--r--data/strings.s18
-rw-r--r--data/unknown_serial_data.s2
-rw-r--r--graphics/learn_move/interface_sprites.pngbin0 -> 316 bytes
-rw-r--r--graphics/map_objects/fldeff_cut.pngbin0 -> 173 bytes
-rw-r--r--include/graphics.h6
-rw-r--r--include/link_rfu.h3
-rw-r--r--include/mevent_server.h32
-rw-r--r--include/save_menu_util.h3
-rw-r--r--include/strings.h11
-rw-r--r--ld_script.txt11
-rw-r--r--src/battle_tower.c8
-rw-r--r--src/learn_move.c842
-rw-r--r--src/mevent_client.c4
-rw-r--r--src/mevent_scripts.c192
-rw-r--r--src/save_menu_util.c58
-rw-r--r--sym_ewram.txt5
29 files changed, 1344 insertions, 2445 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/asm/save_menu_util.s b/asm/save_menu_util.s
deleted file mode 100644
index 8ebfc3731..000000000
--- a/asm/save_menu_util.s
+++ /dev/null
@@ -1,149 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start SaveStatToString
-SaveStatToString: @ 80F7FCC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r2, 24
- lsrs r2, 24
- adds r5, r1, 0
- movs r1, 0xFC
- strb r1, [r5]
- adds r5, 0x1
- movs r0, 0x1
- strb r0, [r5]
- adds r5, 0x1
- strb r2, [r5]
- adds r5, 0x1
- strb r1, [r5]
- adds r5, 0x1
- movs r0, 0x3
- strb r0, [r5]
- adds r5, 0x1
- adds r2, 0x1
- strb r2, [r5]
- adds r5, 0x1
- cmp r3, 0x5
- bhi _080F80D8
- lsls r0, r3, 2
- ldr r1, _080F8008 @ =_080F800C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080F8008: .4byte _080F800C
- .align 2, 0
-_080F800C:
- .4byte _080F8024
- .4byte _080F8034
- .4byte _080F805C
- .4byte _080F8098
- .4byte _080F80A8
- .4byte _080F806C
-_080F8024:
- ldr r0, _080F8030 @ =gSaveBlock2Ptr
- ldr r1, [r0]
- adds r0, r5, 0
- bl StringCopy
- b _080F80D8
- .align 2, 0
-_080F8030: .4byte gSaveBlock2Ptr
-_080F8034:
- bl IsNationalPokedexEnabled
- cmp r0, 0
- beq _080F8044
- movs r0, 0x1
- bl GetNationalPokedexCount
- b _080F804A
-_080F8044:
- movs r0, 0x1
- bl GetKantoPokedexCount
-_080F804A:
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r5, 0
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- b _080F80D8
-_080F805C:
- ldr r4, _080F8068 @ =gSaveBlock2Ptr
- ldr r0, [r4]
- ldrh r1, [r0, 0xE]
- adds r0, r5, 0
- movs r2, 0
- b _080F8076
- .align 2, 0
-_080F8068: .4byte gSaveBlock2Ptr
-_080F806C:
- ldr r4, _080F8094 @ =gSaveBlock2Ptr
- ldr r0, [r4]
- ldrh r1, [r0, 0xE]
- adds r0, r5, 0
- movs r2, 0x1
-_080F8076:
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- adds r5, r0, 0
- movs r0, 0xF0
- strb r0, [r5]
- adds r5, 0x1
- ldr r0, [r4]
- ldrb r1, [r0, 0x10]
- adds r0, r5, 0
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- b _080F80D8
- .align 2, 0
-_080F8094: .4byte gSaveBlock2Ptr
-_080F8098:
- ldr r0, _080F80A4 @ =gMapHeader
- ldrb r1, [r0, 0x14]
- adds r0, r5, 0
- bl sub_80C4DF8
- b _080F80D8
- .align 2, 0
-_080F80A4: .4byte gMapHeader
-_080F80A8:
- movs r4, 0x82
- lsls r4, 4
- movs r6, 0
- adds r7, r5, 0x1
-_080F80B0:
- lsls r0, r4, 16
- lsrs r0, 16
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _080F80C0
- adds r6, 0x1
-_080F80C0:
- adds r4, 0x1
- ldr r0, _080F80E0 @ =0x00000827
- cmp r4, r0
- ble _080F80B0
- adds r0, r6, 0
- subs r0, 0x5F
- strb r0, [r5]
- adds r5, r7, 0
- movs r0, 0xA
- strb r0, [r5]
- movs r0, 0xFF
- strb r0, [r5, 0x1]
-_080F80D8:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F80E0: .4byte 0x00000827
- thumb_func_end SaveStatToString
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/baserom.ips b/baserom.ips
index 370073252..07a82d3b0 100644
--- a/baserom.ips
+++ b/baserom.ips
Binary files differ
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/berry_crush.s b/data/berry_crush.s
new file mode 100644
index 000000000..c17f2c8af
--- /dev/null
+++ b/data/berry_crush.s
@@ -0,0 +1,120 @@
+ .include "asm/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+gUnknown_846E2E0:: @ 846E2E0
+ .incbin "baserom.gba", 0x46E2E0, 0x8
+
+gUnknown_846E2E8:: @ 846E2E8
+ .incbin "baserom.gba", 0x46E2E8, 0x8
+
+gUnknown_846E2F0:: @ 846E2F0
+ .incbin "baserom.gba", 0x46E2F0, 0x24
+
+gUnknown_846E314:: @ 846E314
+ .incbin "baserom.gba", 0x46E314, 0x14
+
+gUnknown_846E328:: @ 846E328
+ .incbin "baserom.gba", 0x46E328, 0x24
+
+gUnknown_846E34C:: @ 846E34C
+ .incbin "baserom.gba", 0x46E34C, 0x68
+
+gUnknown_846E3B4:: @ 846E3B4
+ .incbin "baserom.gba", 0x46E3B4, 0x10
+
+gUnknown_846E3C4:: @ 846E3C4
+ .incbin "baserom.gba", 0x46E3C4, 0x4
+
+gUnknown_846E3C8:: @ 846E3C8
+ .incbin "baserom.gba", 0x46E3C8, 0x4
+
+gUnknown_846E3CC:: @ 846E3CC
+ .incbin "baserom.gba", 0x46E3CC, 0x4
+
+gUnknown_846E3D0:: @ 846E3D0
+ .incbin "baserom.gba", 0x46E3D0, 0xC
+
+gUnknown_846E3DC:: @ 846E3DC
+ .incbin "baserom.gba", 0x46E3DC, 0x3
+
+gUnknown_846E3DF:: @ 846E3DF
+ .incbin "baserom.gba", 0x46E3DF, 0x3
+
+gUnknown_846E3E2:: @ 846E3E2
+ .incbin "baserom.gba", 0x46E3E2, 0x3
+
+gUnknown_846E3E5:: @ 846E3E5
+ .incbin "baserom.gba", 0x46E3E5, 0x6
+
+gUnknown_846E3EB:: @ 846E3EB
+ .incbin "baserom.gba", 0x46E3EB, 0x5
+
+gUnknown_846E3F0:: @ 846E3F0
+ .incbin "baserom.gba", 0x46E3F0, 0x8
+
+gUnknown_846E3F8:: @ 846E3F8
+ .incbin "baserom.gba", 0x46E3F8, 0x50
+
+gUnknown_846E448:: @ 846E448
+ .incbin "baserom.gba", 0x46E448, 0x8
+
+gUnknown_846E450:: @ 846E450
+ .incbin "baserom.gba", 0x46E450, 0x940
+
+gUnknown_846ED90:: @ 846ED90
+ .incbin "baserom.gba", 0x46ED90, 0x130
+
+gUnknown_846EEC0:: @ 846EEC0
+ .incbin "baserom.gba", 0x46EEC0, 0x198
+
+gUnknown_846F058:: @ 846F058
+ .incbin "baserom.gba", 0x46F058, 0x228
+
+gUnknown_846F280:: @ 846F280
+ .incbin "baserom.gba", 0x46F280, 0x14
+
+gUnknown_846F294:: @ 846F294
+ .incbin "baserom.gba", 0x46F294, 0x3C
+
+gUnknown_846F2D0:: @ 846F2D0
+ .incbin "baserom.gba", 0x46F2D0, 0x1
+
+gUnknown_846F2D1:: @ 846F2D1
+ .incbin "baserom.gba", 0x46F2D1, 0x5
+
+gUnknown_846F2D6:: @ 846F2D6
+ .incbin "baserom.gba", 0x46F2D6, 0x1
+
+gUnknown_846F2D7:: @ 846F2D7
+ .incbin "baserom.gba", 0x46F2D7, 0x15
+
+gUnknown_846F2EC:: @ 846F2EC
+ .incbin "baserom.gba", 0x46F2EC, 0xC
+
+gUnknown_846F2F8:: @ 846F2F8
+ .incbin "baserom.gba", 0x46F2F8, 0x28
+
+gUnknown_846F320:: @ 846F320
+ .incbin "baserom.gba", 0x46F320, 0xF0
+
+gUnknown_846F410:: @ 846F410
+ .incbin "baserom.gba", 0x46F410, 0x18
+
+gUnknown_846F428:: @ 846F428
+ .incbin "baserom.gba", 0x46F428, 0x18
+
+gUnknown_846F440:: @ 846F440
+ .incbin "baserom.gba", 0x46F440, 0x18
+
+gUnknown_846F458:: @ 846F458
+ .incbin "baserom.gba", 0x46F458, 0x18
+
+gUnknown_846F470:: @ 846F470
+ .incbin "baserom.gba", 0x46F470, 0x18
+
+gUnknown_846F488:: @ 846F488
+ .incbin "baserom.gba", 0x46F488, 0x30
+
+gUnknown_846F4B8:: @ 846F4B8
+ .incbin "baserom.gba", 0x46F4B8, 0x18
diff --git a/data/data_8466FB8.s b/data/data_8466FB8.s
deleted file mode 100644
index 9436bc4fd..000000000
--- a/data/data_8466FB8.s
+++ /dev/null
@@ -1,12 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_84687A0::
- .string "You have collected all STAMPs!\n"
- .string "Want to input a CARD as a prize?$"
-
- .include "data/mevent/script_ish.inc"
- .include "data/mevent/script_common.inc"
diff --git a/data/field_effect_helpers.s b/data/field_effect_helpers.s
index 429df9f61..7ad7b168a 100644
--- a/data/field_effect_helpers.s
+++ b/data/field_effect_helpers.s
@@ -7,22 +7,28 @@
.align 2
gUnknown_83FECCC:: @ 83FECCC
- .byte 0x0c, 0x00, 0x1c, 0x00, 0x2c, 0x00
+ .2byte 0x0c, 0x1c, 0x2c
gUnknown_83FECD2:: @ 83FECD2
- .incbin "baserom.gba", 0x3FECD2, 0x4
+ .byte 0, 1, 2, 3
gUnknown_83FECD6:: @ 83FECD6
- .incbin "baserom.gba", 0x3FECD6, 0xA
+ .2byte 0x0004, 0x0004, 0x0004, 0x0010
+ .align 2
gUnknown_83FECE0:: @ 83FECE0
- .incbin "baserom.gba", 0x3FECE0, 0x8
+ .4byte sub_80DBB18
+ .4byte sub_80DBB3C
+ .align 2
gUnknown_83FECE8:: @ 83FECE8
- .incbin "baserom.gba", 0x3FECE8, 0xC
+ .4byte sub_80DC318
+ .4byte sub_80DC348
+ .4byte sub_80DC3A8
gUnknown_83FECF4:: @ 83FECF4
- .incbin "baserom.gba", 0x3FECF4, 0x6
+ .byte 0, 0, 1, 2, 3
+ .align 1
gUnknown_83FECFA:: @ 83FECFA
- .incbin "baserom.gba", 0x3FECFA, 0x6
+ .2byte 0x0007, 0x000f
diff --git a/data/field_map_obj.s b/data/field_map_obj.s
index 9c36b523e..e4fe9ceca 100644
--- a/data/field_map_obj.s
+++ b/data/field_map_obj.s
@@ -531,7 +531,15 @@ gUnknown_8398008:: @ 8398008
gUnknown_8398028:: @ 8398028
.incbin "graphics/map_objects/12.gbapal"
- .incbin "baserom.gba", 0x398048, 0x1340
+ .incbin "baserom.gba", 0x398048, 0x600
+
+gUnknown_8398648::
+ .incbin "graphics/map_objects/fldeff_cut.4bpp"
+ .incbin "graphics/map_objects/fldeff_cut.4bpp"
+
+gUnknown_8398688::
+ .incbin "graphics/map_objects/fldeff_cut.gbapal"
+ .incbin "baserom.gba", 0x3986A8, 0xCE0
gUnknown_8399388:: @ 8399388
.incbin "baserom.gba", 0x399388, 0x908
diff --git a/data/fldeff_cut.s b/data/fldeff_cut.s
index 5436b51e4..ca25b396a 100644
--- a/data/fldeff_cut.s
+++ b/data/fldeff_cut.s
@@ -7,10 +7,34 @@
.align 2
gUnknown_83D4100:: @ 83D4100
- .incbin "baserom.gba", 0x3D4100, 0x44
+ .2byte 0x000d, 0x0001
+ .2byte 0x000a, 0x0013
+ .2byte 0x000b, 0x000e
+ .2byte 0x000c, 0x000f
+ .2byte 0x0352, 0x033e
+ .2byte 0x0300, 0x0310
+ .2byte 0x0301, 0x0311
+ .2byte 0x0302, 0x0312
+ .2byte 0x0284, 0x0281
+ .2byte 0xffff, 0xffff
+
+ .align 2
+gOamData_83D4128::
+ .4byte 0x00000000, 0x00001401
+
+gAnimCmd_83D4130::
+ obj_image_anim_frame 0, 30
+ obj_image_anim_jump 0
+
+gSpriteAnimTable_83D4138::
+ .4byte gAnimCmd_83D4130
+
+gUnknown_83D413C::
+ obj_frame_tiles gUnknown_8398648, 0x20
gUnknown_83D4144::
- .incbin "baserom.gba", 0x3D4144, 0x8
+ obj_pal gUnknown_8398688, 4096
gUnknown_83D414C:: @ 83D414C
- .incbin "baserom.gba", 0x3D414C, 0x18
+ spr_template 0xFFFF, 4096, gOamData_83D4128, gSpriteAnimTable_83D4138, gUnknown_83D413C, gDummySpriteAffineAnimTable, objc_8097BA8
+
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/mevent/script_common.inc b/data/mevent/script_common.inc
deleted file mode 100644
index f3ca09e3d..000000000
--- a/data/mevent/script_common.inc
+++ /dev/null
@@ -1,87 +0,0 @@
-gMEventSrvScript_UnableToSend::
- .4byte 0x12, 0x10, gMEventClientScript_UnableToRecv @ SEND
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x02, 0x14, NULL @ RECV
- .4byte 0x00, 0x0a, NULL @ RETURN (can't send)
-
- .4byte 0x12, 0x10, gMEventClientScript_CommError @ SEND
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x02, 0x14, NULL @ RECV
- .4byte 0x00, 0x0b, NULL @ RETURN (comm error)
-
- .4byte 0x12, 0x10, gMEventClientScript_OtherTrainerCanceled @ SEND
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x02, 0x14, NULL @ RECV
- .4byte 0x00, 0x09, NULL @ RETURN (other trn canceled)
-
-gMEventSrvScript_OtherTrnHasNews::
- .4byte 0x12, 0x10, gMEventClientScript_AlreadyHadNews @ SEND
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x02, 0x14, NULL @ RECV
- .4byte 0x00, 0x07, NULL @ RETURN (other trn has news)
-
-gMEventSrvScript_SentNewsSuccess::
- .4byte 0x12, 0x28, gMEventClientScript_ReceiveNewsAndValidate @ SEND
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x0e, 0x00, NULL @ SEND_NEWS
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x02, 0x13, NULL @ RECV
- .4byte 0x08, 0x00, NULL @ READWORD
- .4byte 0x04, 0x01, gMEventSrvScript_OtherTrnHasNews @ BRANCH_EQ
- .4byte 0x12, 0x10, gMEventClientScript_RecvNewsSuccess @ SEND
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x02, 0x14, NULL @ RECV
- .4byte 0x00, 0x03, NULL @ RETURN (news sent to)
-
-gMEventSrvScript_SendCardSuccess::
- .4byte 0x12, 0x30, gMEventClientScript_ReceiveCardAndReturnSuccess @ SEND
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x0d, 0x00, NULL @ SEND_CARD
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x0f, 0x00, NULL @ BUFFER_SEND
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x02, 0x14, NULL @ RECV
- .4byte 0x00, 0x02, NULL @ RETURN (card sent to)
-
-gMEventSrvScript_AskClientToOverwriteCard::
- .4byte 0x12, 0x28, gMEventClientScript_AskWouldLikeToTossCard @ SEND
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x02, 0x13, NULL @ RECV
- .4byte 0x08, 0x00, NULL @ READWORD
- .4byte 0x04, 0x00, gMEventSrvScript_SendCardSuccess @ BRANCH_EQ
- .4byte 0x03, 0x00, gMEventSrvScript_OtherTrainerCanceled @ BRANCH
-
-gMEventSrvScript_OtherTrnHasCard::
- .4byte 0x12, 0x10, gMEventClientScript_AlreadyHadCard @ SEND
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x02, 0x14, NULL @ RECV
- .4byte 0x00, 0x05, NULL @ RETURN (other trn has card)
-
- .4byte 0x12, 0x10, gMEventClientScript_NothingSentOver @ SEND
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x02, 0x14, NULL @ RECV
- .4byte 0x00, 0x00, NULL @ RETURN (nothing sent over)
-
-gMEventSrvScript_SendNews:: @ 8468B6C
- .4byte 0x1b, 0x00, NULL @ BUFFER_SAVED_NEWS
- .4byte 0x12, 0x20, gMEventClientScript_Send1442CC @ SEND
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x02, 0x11, NULL @ RECV
- .4byte 0x05, 0x00, NULL @ READ_1442CC
- .4byte 0x06, 0x00, NULL @ VALID_1442CC
- .4byte 0x04, 0x00, gMEventSrvScript_UnableToSend @ BRANCH_EQ
- .4byte 0x03, 0x00, gMEventSrvScript_SentNewsSuccess @ BRANCH
-
-gMEventSrvScript_SendCard:: @ 8468BCC
- .4byte 0x1a, 0x00, NULL @ BUFFER_SAVED_CARD
- .4byte 0x1c, 0x00, NULL @ RAM_SCRIPT_IF_VALID
- .4byte 0x12, 0x20, gMEventClientScript_Send1442CC @ SEND
- .4byte 0x01, 0x00, NULL @ WAIT SEND
- .4byte 0x02, 0x11, NULL @ RECV
- .4byte 0x05, 0x00, NULL @ READ_1442CC
- .4byte 0x06, 0x00, NULL @ VALID_1442CC
- .4byte 0x04, 0x00, gMEventSrvScript_UnableToSend @ BRANCH_EQ
- .4byte 0x07, 0x00, NULL @ CHECK_1442CC_14
- .4byte 0x04, 0x02, gMEventSrvScript_AskClientToOverwriteCard @ BRANCH_EQ
- .4byte 0x04, 0x00, gMEventSrvScript_SendCardSuccess @ BRANCH_EQ
- .4byte 0x03, 0x00, gMEventSrvScript_OtherTrnHasCard @ BRANCH
diff --git a/data/mevent/script_ish.inc b/data/mevent/script_ish.inc
deleted file mode 100644
index ed6b639da..000000000
--- a/data/mevent/script_ish.inc
+++ /dev/null
@@ -1,65 +0,0 @@
-gMEventClientScript_InotialListen:: @ 84687E0
- .4byte 0x02, 0x10 @ RECEIVE ID(0x10)
- .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER
-
-gMEventClientScript_Send1442CC::
- .4byte 0x08, 0x00 @ SEND HEADER MAYBE
- .4byte 0x03, 0x00 @ WAIT SEND
- .4byte 0x02, 0x10 @ RECEIVE ID(0x10)
- .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER
-
-gMEventClientScript_UnableToRecv:: @ can't accept card or news
- .4byte 0x14, 0x00 @ SEND ALL
- .4byte 0x01, 0x0a @ RETURN 0x0a
-
-gMEventClientScript_CommError:: @ comm error
- .4byte 0x14, 0x00 @ SEND ALL
- .4byte 0x01, 0x0b @ RETURN 0x0b
-
-gMEventClientScript_NothingSentOver:: @ nothing sent
- .4byte 0x14, 0x00 @ SEND ALL
- .4byte 0x01, 0x00 @ RETURN 0x00
-
-gMEventClientScript_ReceiveCardAndReturnSuccess:: @ card success
- .4byte 0x02, 0x16 @ RECEIVE ID(0x16)
- .4byte 0x0a, 0x00 @ RECEIVE_TO_SAVE_FILE
- .4byte 0x02, 0x19 @ RECEIVE ID(0x19)
- .4byte 0x11, 0x00 @ RECEIVE_TO_RAM_SCRIPT
- .4byte 0x14, 0x00 @ SEND ALL
- .4byte 0x01, 0x02 @ RETURN 0x02
-
-gMEventClientScript_ReceiveNewsAndValidate::
- .4byte 0x02, 0x17 @ RECEIVE ID(0x17)
- .4byte 0x09, 0x00 @ VALIDATE NEWS
- .4byte 0x03, 0x00 @ WAIT SEND
- .4byte 0x02, 0x10 @ RECEIVE ID(0x10)
- .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER
-
-gMEventClientScript_AlreadyHadNews:: @ already had news
- .4byte 0x14, 0x00 @ SEND ALL
- .4byte 0x01, 0x07 @ RETURN 0x07
-
-gMEventClientScript_RecvNewsSuccess:: @ news success
- .4byte 0x14, 0x00 @ SEND ALL
- .4byte 0x01, 0x03 @ RETURN 0x03
-
-gMEventClientScript_AskWouldLikeToTossCard::
- .4byte 0x0d, 0x00 @ REQUEST PARAMETER
- .4byte 0x0e, 0x00 @ SEND PARAMETER
- .4byte 0x03, 0x00 @ WAIT SEND
- .4byte 0x02, 0x10 @ RECEIVE ID(0x10)
- .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER
-
-gMEventClientScript_OtherTrainerCanceled:: @ comm canceled
- .4byte 0x14, 0x00 @ SEND ALL
- .4byte 0x01, 0x09 @ RETURN 0x09
-
-gMEventClientScript_AlreadyHadCard:: @ already had card
- .4byte 0x14, 0x00 @ SEND ALL
- .4byte 0x01, 0x05 @ RETURN 0x05
-
-gMEventClientScript_SuccessFromBuffer:: @ success from buffer
- .4byte 0x02, 0x15 @ RECEIVE ID(0x15)
- .4byte 0x0c, 0x00 @ READ PACKET AND COMPUTE SOMETHING
- .4byte 0x14, 0x00 @ SEND ALL
- .4byte 0x01, 0x0d @ RETURN 0x0d
diff --git a/data/data_8468C98.s b/data/pokemon_jump.s
index 7ce7c3a02..bddff8c3a 100644
--- a/data/data_8468C98.s
+++ b/data/pokemon_jump.s
@@ -179,120 +179,3 @@ gUnknown_846E2CC:: @ 846E2CC
gUnknown_846E2D4:: @ 846E2D4
.incbin "baserom.gba", 0x46E2D4, 0xC
-
-gUnknown_846E2E0:: @ 846E2E0
- .incbin "baserom.gba", 0x46E2E0, 0x8
-
-gUnknown_846E2E8:: @ 846E2E8
- .incbin "baserom.gba", 0x46E2E8, 0x8
-
-gUnknown_846E2F0:: @ 846E2F0
- .incbin "baserom.gba", 0x46E2F0, 0x24
-
-gUnknown_846E314:: @ 846E314
- .incbin "baserom.gba", 0x46E314, 0x14
-
-gUnknown_846E328:: @ 846E328
- .incbin "baserom.gba", 0x46E328, 0x24
-
-gUnknown_846E34C:: @ 846E34C
- .incbin "baserom.gba", 0x46E34C, 0x68
-
-gUnknown_846E3B4:: @ 846E3B4
- .incbin "baserom.gba", 0x46E3B4, 0x10
-
-gUnknown_846E3C4:: @ 846E3C4
- .incbin "baserom.gba", 0x46E3C4, 0x4
-
-gUnknown_846E3C8:: @ 846E3C8
- .incbin "baserom.gba", 0x46E3C8, 0x4
-
-gUnknown_846E3CC:: @ 846E3CC
- .incbin "baserom.gba", 0x46E3CC, 0x4
-
-gUnknown_846E3D0:: @ 846E3D0
- .incbin "baserom.gba", 0x46E3D0, 0xC
-
-gUnknown_846E3DC:: @ 846E3DC
- .incbin "baserom.gba", 0x46E3DC, 0x3
-
-gUnknown_846E3DF:: @ 846E3DF
- .incbin "baserom.gba", 0x46E3DF, 0x3
-
-gUnknown_846E3E2:: @ 846E3E2
- .incbin "baserom.gba", 0x46E3E2, 0x3
-
-gUnknown_846E3E5:: @ 846E3E5
- .incbin "baserom.gba", 0x46E3E5, 0x6
-
-gUnknown_846E3EB:: @ 846E3EB
- .incbin "baserom.gba", 0x46E3EB, 0x5
-
-gUnknown_846E3F0:: @ 846E3F0
- .incbin "baserom.gba", 0x46E3F0, 0x8
-
-gUnknown_846E3F8:: @ 846E3F8
- .incbin "baserom.gba", 0x46E3F8, 0x50
-
-gUnknown_846E448:: @ 846E448
- .incbin "baserom.gba", 0x46E448, 0x8
-
-gUnknown_846E450:: @ 846E450
- .incbin "baserom.gba", 0x46E450, 0x940
-
-gUnknown_846ED90:: @ 846ED90
- .incbin "baserom.gba", 0x46ED90, 0x130
-
-gUnknown_846EEC0:: @ 846EEC0
- .incbin "baserom.gba", 0x46EEC0, 0x198
-
-gUnknown_846F058:: @ 846F058
- .incbin "baserom.gba", 0x46F058, 0x228
-
-gUnknown_846F280:: @ 846F280
- .incbin "baserom.gba", 0x46F280, 0x14
-
-gUnknown_846F294:: @ 846F294
- .incbin "baserom.gba", 0x46F294, 0x3C
-
-gUnknown_846F2D0:: @ 846F2D0
- .incbin "baserom.gba", 0x46F2D0, 0x1
-
-gUnknown_846F2D1:: @ 846F2D1
- .incbin "baserom.gba", 0x46F2D1, 0x5
-
-gUnknown_846F2D6:: @ 846F2D6
- .incbin "baserom.gba", 0x46F2D6, 0x1
-
-gUnknown_846F2D7:: @ 846F2D7
- .incbin "baserom.gba", 0x46F2D7, 0x15
-
-gUnknown_846F2EC:: @ 846F2EC
- .incbin "baserom.gba", 0x46F2EC, 0xC
-
-gUnknown_846F2F8:: @ 846F2F8
- .incbin "baserom.gba", 0x46F2F8, 0x28
-
-gUnknown_846F320:: @ 846F320
- .incbin "baserom.gba", 0x46F320, 0xF0
-
-gUnknown_846F410:: @ 846F410
- .incbin "baserom.gba", 0x46F410, 0x18
-
-gUnknown_846F428:: @ 846F428
- .incbin "baserom.gba", 0x46F428, 0x18
-
-gUnknown_846F440:: @ 846F440
- .incbin "baserom.gba", 0x46F440, 0x18
-
-gUnknown_846F458:: @ 846F458
- .incbin "baserom.gba", 0x46F458, 0x18
-
-gUnknown_846F470:: @ 846F470
- .incbin "baserom.gba", 0x46F470, 0x18
-
-gUnknown_846F488:: @ 846F488
- .incbin "baserom.gba", 0x46F488, 0x30
-
-gUnknown_846F4B8:: @ 846F4B8
- .incbin "baserom.gba", 0x46F4B8, 0x18
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/data/unknown_serial_data.s b/data/unknown_serial_data.s
index 57c979340..ec5818604 100644
--- a/data/unknown_serial_data.s
+++ b/data/unknown_serial_data.s
@@ -1,5 +1,5 @@
.section .rodata
gUnknownSerialData_Start:: @ 86FC50C
- .incbin "baserom.gba", 0x6FC50C, 0x3760
+ .incbin "data/unknown_serial_data.bin"
gUnknownSerialData_End::
diff --git a/graphics/learn_move/interface_sprites.png b/graphics/learn_move/interface_sprites.png
new file mode 100644
index 000000000..4fa3d4a1b
--- /dev/null
+++ b/graphics/learn_move/interface_sprites.png
Binary files differ
diff --git a/graphics/map_objects/fldeff_cut.png b/graphics/map_objects/fldeff_cut.png
new file mode 100644
index 000000000..031d04b40
--- /dev/null
+++ b/graphics/map_objects/fldeff_cut.png
Binary files differ
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/link_rfu.h b/include/link_rfu.h
index 6e6e5f7a3..671488be0 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -43,4 +43,7 @@ void sub_80FBB20(void);
bool8 sub_80FA484(bool32 a0);
void var_800D_set_xB(void);
+#include "mevent_server.h"
+extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];
+
#endif //GUARD_LINK_RFU_H
diff --git a/include/mevent_server.h b/include/mevent_server.h
index ddc00b978..b691e9e1f 100644
--- a/include/mevent_server.h
+++ b/include/mevent_server.h
@@ -37,6 +37,20 @@ struct mevent_client_cmd
u32 parameter;
};
+// Client commands
+#define CLI_RETURN(x) {.instr = 1, .parameter = x}
+#define CLI_RECEIVE(x) {.instr = 2, .parameter = x}
+#define CLI_WAITSND {.instr = 3, .parameter = 0}
+#define CLI_JUMPBUF {.instr = 4, .parameter = 0}
+#define CLI_SNDHEAD {.instr = 8, .parameter = 0}
+#define CLI_VLDNEWS {.instr = 9, .parameter = 0}
+#define CLI_RECVSAV {.instr = 10, .parameter = 0}
+#define CLI_RECVBUF {.instr = 12, .parameter = 0}
+#define CLI_REQWORD {.instr = 13, .parameter = 0}
+#define CLI_SNDWORD {.instr = 14, .parameter = 0}
+#define CLI_RECVRAM {.instr = 17, .parameter = 0}
+#define CLI_SENDALL {.instr = 20, .parameter = 0}
+
struct mevent_client
{
u32 unk_00;
@@ -58,6 +72,24 @@ struct mevent_server_cmd
void * parameter;
};
+// Server commands
+#define SRV_RETURN(x) {.instr = 0, .flag = x}
+#define SRV_WAITSND {.instr = 1}
+#define SRV_RECV(x) {.instr = 2, .flag = x}
+#define SRV_BRANCH(y) {.instr = 3, .parameter = (void *)y}
+#define SRV_BRANCHIF(x, y) {.instr = 4, .flag = x, .parameter = (void *)y}
+#define SRV_READ_1442CC {.instr = 5}
+#define SRV_VALID_1442CC {.instr = 6}
+#define SRV_CHECK_1442CC_14 {.instr = 7}
+#define SRV_READWORD {.instr = 8}
+#define SRV_SEND_CARD {.instr = 13}
+#define SRV_SEND_NEWS {.instr = 14}
+#define SRV_BUFFER_SEND {.instr = 15}
+#define SRV_SEND(x, y) {.instr = 18, .flag = x, .parameter = (void *)y}
+#define SRV_BUFFER_CARD {.instr = 26}
+#define SRV_BUFFER_NEWS {.instr = 27}
+#define SRV_RAM_SCRIPT_IF_VALID {.instr = 28}
+
struct mevent_srv_common
{
u32 unk_00;
diff --git a/include/save_menu_util.h b/include/save_menu_util.h
index f2a18a777..7085520b4 100644
--- a/include/save_menu_util.h
+++ b/include/save_menu_util.h
@@ -7,7 +7,8 @@ enum SaveStat
SAVE_STAT_POKEDEX,
SAVE_STAT_TIME,
SAVE_STAT_LOCATION,
- SAVE_STAT_BADGES
+ SAVE_STAT_BADGES,
+ SAVE_STAT_TIME_HR_RT_ALIGN
};
void SaveStatToString(u8 a0, u8 *a1, u8 a2);
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..d40c88c0a 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);
@@ -222,7 +222,7 @@ SECTIONS {
src/fldeff_teleport.o(.text);
src/new_menu_helpers.o(.text);
asm/box_party_pokemon_dropdown.o(.text);
- asm/save_menu_util.o(.text);
+ src/save_menu_util.o(.text);
src/map_preview_screen.o(.text);
asm/link_rfu_2.o(.text);
asm/link_rfu.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);
@@ -536,12 +536,13 @@ SECTIONS {
src/mevent_client.o(.rodata);
src/mevent_server.o(.rodata);
src/mevent_8145654.o(.rodata);
- data/data_8466FB8.o(.rodata);
+ src/mevent_scripts.o(.rodata);
src/menews_jisan.o(.rodata);
src/menews_jisan.o(.rodata.str1.4);
. = ALIGN(4);
src/seagallop.o(.rodata);
- data/data_8468C98.o(.rodata);
+ data/pokemon_jump.o(.rodata);
+ data/berry_crush.o(.rodata);
src/wireless_communication_status_screen.o(.rodata);
src/braille_text.o(.rodata);
src/text_window_graphics.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/src/mevent_client.c b/src/mevent_client.c
index c2a86afdd..4da0b4bc1 100644
--- a/src/mevent_client.c
+++ b/src/mevent_client.c
@@ -14,7 +14,7 @@ static void mevent_client_init(struct mevent_client *, u32, u32);
static u32 mevent_client_exec(struct mevent_client *);
static void mevent_client_free_resources(struct mevent_client *);
-extern const struct mevent_client_cmd gMEventClientScript_InotialListen[];
+extern const struct mevent_client_cmd gMEventClientScript_InitialListen[];
void mevent_client_do_init(void)
{
@@ -89,7 +89,7 @@ static void mevent_client_send_word(struct mevent_client * svr, u32 ident, u32 w
static u32 client_mainseq_0(struct mevent_client * svr)
{
// init
- memcpy(svr->cmdBuffer, gMEventClientScript_InotialListen, ME_SEND_BUF_SIZE);
+ memcpy(svr->cmdBuffer, gMEventClientScript_InitialListen, ME_SEND_BUF_SIZE);
svr->cmdidx = 0;
svr->mainseqno = 4;
svr->flag = 0;
diff --git a/src/mevent_scripts.c b/src/mevent_scripts.c
new file mode 100644
index 000000000..04d44f603
--- /dev/null
+++ b/src/mevent_scripts.c
@@ -0,0 +1,192 @@
+#include "global.h"
+#include "mevent_server.h"
+
+extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];
+
+// Unreferenced
+const u8 gUnknown_84687A0[] = _("You have collected all STAMPs!\nWant to input a CARD as a prize?");
+
+/* CLIENT SCRIPTS */
+
+const struct mevent_client_cmd gMEventClientScript_InitialListen[] = { // 84687E0
+ CLI_RECEIVE(0x10),
+ CLI_JUMPBUF
+};
+
+const struct mevent_client_cmd gMEventClientScript_Send1442CC[] = {
+ CLI_SNDHEAD,
+ CLI_WAITSND,
+ CLI_RECEIVE(0x10),
+ CLI_JUMPBUF
+};
+
+const struct mevent_client_cmd gMEventClientScript_UnableToRecv[] = { // can't accept card or news
+ CLI_SENDALL,
+ CLI_RETURN(0x0a)
+};
+
+const struct mevent_client_cmd gMEventClientScript_CommError[] = { // comm error
+ CLI_SENDALL,
+ CLI_RETURN(0x0b)
+};
+
+const struct mevent_client_cmd gMEventClientScript_NothingSentOver[] = { // nothing sent
+ CLI_SENDALL,
+ CLI_RETURN(0x00)
+};
+
+const struct mevent_client_cmd gMEventClientScript_ReceiveCardAndReturnSuccess[] = { // card success
+ CLI_RECEIVE(0x16),
+ CLI_RECVSAV,
+ CLI_RECEIVE(0x19),
+ CLI_RECVRAM,
+ CLI_SENDALL,
+ CLI_RETURN(0x02)
+};
+
+const struct mevent_client_cmd gMEventClientScript_ReceiveNewsAndValidate[] = {
+ CLI_RECEIVE(0x17),
+ CLI_VLDNEWS,
+ CLI_WAITSND,
+ CLI_RECEIVE(0x10),
+ CLI_JUMPBUF
+};
+
+const struct mevent_client_cmd gMEventClientScript_AlreadyHadNews[] = { // already had news
+ CLI_SENDALL,
+ CLI_RETURN(0x07)
+};
+
+const struct mevent_client_cmd gMEventClientScript_RecvNewsSuccess[] = { // news success
+ CLI_SENDALL,
+ CLI_RETURN(0x03)
+};
+
+const struct mevent_client_cmd gMEventClientScript_AskWouldLikeToTossCard[] = {
+ CLI_REQWORD,
+ CLI_SNDWORD,
+ CLI_WAITSND,
+ CLI_RECEIVE(0x10),
+ CLI_JUMPBUF
+};
+
+const struct mevent_client_cmd gMEventClientScript_OtherTrainerCanceled[] = { // comm canceled
+ CLI_SENDALL,
+ CLI_RETURN(0x09)
+};
+
+const struct mevent_client_cmd gMEventClientScript_AlreadyHadCard[] = { // already had card
+ CLI_SENDALL,
+ CLI_RETURN(0x05)
+};
+
+const struct mevent_client_cmd gMEventClientScript_SuccessFromBuffer[] = { // success from buffer
+ CLI_RECEIVE(0x15),
+ CLI_RECVBUF,
+ CLI_SENDALL,
+ CLI_RETURN(0x0d)
+};
+
+/* SERVER SCRIPTS */
+
+const struct mevent_server_cmd gMEventSrvScript_UnableToSend[] = {
+ SRV_SEND(0x10, gMEventClientScript_UnableToRecv),
+ SRV_WAITSND,
+ SRV_RECV(0x14),
+ SRV_RETURN(0x0a)
+};
+
+const struct mevent_server_cmd gUnknown_8468950[] = {
+ SRV_SEND(0x10, gMEventClientScript_CommError),
+ SRV_WAITSND,
+ SRV_RECV(0x14),
+ SRV_RETURN(0x0b)
+};
+
+const struct mevent_server_cmd gUnknown_8468980[] = {
+ SRV_SEND(0x10, gMEventClientScript_OtherTrainerCanceled),
+ SRV_WAITSND,
+ SRV_RECV(0x14),
+ SRV_RETURN(0x09)
+};
+
+const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasNews[] = {
+ SRV_SEND(0x10, gMEventClientScript_AlreadyHadNews),
+ SRV_WAITSND,
+ SRV_RECV(0x14),
+ SRV_RETURN(0x07)
+};
+
+const struct mevent_server_cmd gMEventSrvScript_SentNewsSuccess[] = {
+ SRV_SEND(0x28, gMEventClientScript_ReceiveNewsAndValidate),
+ SRV_WAITSND,
+ SRV_SEND_NEWS,
+ SRV_WAITSND,
+ SRV_RECV(0x13),
+ SRV_READWORD,
+ SRV_BRANCHIF(0x01, gMEventSrvScript_OtherTrnHasNews),
+ SRV_SEND(0x10, gMEventClientScript_RecvNewsSuccess),
+ SRV_WAITSND,
+ SRV_RECV(0x14),
+ SRV_RETURN(0x03)
+};
+
+const struct mevent_server_cmd gMEventSrvScript_SendCardSuccess[] = {
+ SRV_SEND(0x30, gMEventClientScript_ReceiveCardAndReturnSuccess),
+ SRV_WAITSND,
+ SRV_SEND_CARD,
+ SRV_WAITSND,
+ SRV_BUFFER_SEND,
+ SRV_WAITSND,
+ SRV_RECV(0x14),
+ SRV_RETURN(0x02)
+};
+
+const struct mevent_server_cmd gMEventSrvScript_AskClientToOverwriteCard[] = {
+ SRV_SEND(0x28, gMEventClientScript_AskWouldLikeToTossCard),
+ SRV_WAITSND,
+ SRV_RECV(0x13),
+ SRV_READWORD,
+ SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess),
+ SRV_BRANCH(gMEventSrvScript_OtherTrainerCanceled)
+};
+
+const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasCard[] = {
+ SRV_SEND(0x10, gMEventClientScript_AlreadyHadCard),
+ SRV_WAITSND,
+ SRV_RECV(0x14),
+ SRV_RETURN(0x05)
+};
+
+const struct mevent_server_cmd gUnknown_8468B3C[] = {
+ SRV_SEND(0x10, gMEventClientScript_NothingSentOver),
+ SRV_WAITSND,
+ SRV_RECV(0x14),
+ SRV_RETURN(0x00)
+};
+
+const struct mevent_server_cmd gMEventSrvScript_SendNews[] = {
+ SRV_BUFFER_NEWS,
+ SRV_SEND(0x20, gMEventClientScript_Send1442CC),
+ SRV_WAITSND,
+ SRV_RECV(0x11),
+ SRV_READ_1442CC,
+ SRV_VALID_1442CC,
+ SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend),
+ SRV_BRANCH(gMEventSrvScript_SentNewsSuccess)
+};
+
+const struct mevent_server_cmd gMEventSrvScript_SendCard[] = {
+ SRV_BUFFER_CARD,
+ SRV_RAM_SCRIPT_IF_VALID,
+ SRV_SEND(0x20, gMEventClientScript_Send1442CC),
+ SRV_WAITSND,
+ SRV_RECV(0x11),
+ SRV_READ_1442CC,
+ SRV_VALID_1442CC,
+ SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend),
+ SRV_CHECK_1442CC_14,
+ SRV_BRANCHIF(0x02, gMEventSrvScript_AskClientToOverwriteCard),
+ SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess),
+ SRV_BRANCH(gMEventSrvScript_OtherTrnHasCard)
+};
diff --git a/src/save_menu_util.c b/src/save_menu_util.c
new file mode 100644
index 000000000..195b29b0c
--- /dev/null
+++ b/src/save_menu_util.c
@@ -0,0 +1,58 @@
+#include "global.h"
+#include "string_util.h"
+#include "text.h"
+#include "event_data.h"
+#include "pokedex.h"
+#include "region_map.h"
+#include "save_menu_util.h"
+#include "constants/flags.h"
+
+void SaveStatToString(u8 gameStatId, u8 *dest0, u8 color)
+{
+ int nBadges;
+ int flagId;
+
+ u8 *dest = dest0;
+ *dest++ = EXT_CTRL_CODE_BEGIN;
+ *dest++ = EXT_CTRL_CODE_COLOR;
+ *dest++ = color;
+ *dest++ = EXT_CTRL_CODE_BEGIN;
+ *dest++ = EXT_CTRL_CODE_SHADOW;
+ *dest++ = color + 1;
+ switch (gameStatId)
+ {
+ case SAVE_STAT_NAME:
+ dest = StringCopy(dest, gSaveBlock2Ptr->playerName);
+ break;
+ case SAVE_STAT_POKEDEX:
+ if (IsNationalPokedexEnabled())
+ dest = ConvertIntToDecimalStringN(dest, GetNationalPokedexCount(1), STR_CONV_MODE_LEFT_ALIGN, 3);
+ else
+ dest = ConvertIntToDecimalStringN(dest, GetKantoPokedexCount(1), STR_CONV_MODE_LEFT_ALIGN, 3);
+ break;
+ case SAVE_STAT_TIME:
+ dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
+ *dest++ = CHAR_COLON;
+ dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+ break;
+ case SAVE_STAT_TIME_HR_RT_ALIGN:
+ dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ *dest++ = CHAR_COLON;
+ dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+ break;
+ case SAVE_STAT_LOCATION:
+ sub_80C4DF8(dest, gMapHeader.regionMapSectionId);
+ break;
+ case SAVE_STAT_BADGES:
+ for (flagId = FLAG_BADGE01_GET, nBadges = 0; flagId < FLAG_BADGE01_GET + 8; flagId++)
+ {
+ if (FlagGet(flagId))
+ nBadges++;
+ }
+ *dest++ = nBadges + CHAR_0;
+ *dest++ = 10; // 'こ'
+ *dest++ = EOS;
+ break;
+ }
+}
+
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