summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_bg.s6
-rw-r--r--asm/battle_message.s8
-rw-r--r--asm/evolution_scene.s4571
-rw-r--r--asm/fldeff_flash.s10
-rw-r--r--asm/party_menu.s14
-rw-r--r--asm/pokemon_summary_screen.s6
-rw-r--r--baserom.ipsbin279787 -> 270923 bytes
-rw-r--r--common_syms/evolution_scene.txt1
-rw-r--r--data/battle_message.s10
-rw-r--r--data/evolution_scene.s33
-rw-r--r--data/field_ground_effect.s2
-rw-r--r--data/field_map_obj.s13
-rw-r--r--data/fldeff_flash.s65
-rw-r--r--data/map_obj_80688E4.s79
-rw-r--r--data/smokescreen.s50
-rw-r--r--data/strings.s2
-rw-r--r--graphics/evolution_scene/bg.binbin0 -> 2048 bytes
-rw-r--r--graphics/evolution_scene/bg.pngbin0 -> 1588 bytes
-rw-r--r--graphics/evolution_scene/bg2.binbin0 -> 2048 bytes
-rw-r--r--graphics/evolution_scene/gray_transition_intro.pal19
-rw-r--r--graphics/evolution_scene/transition.pal35
-rw-r--r--graphics/evolution_scene/unknown_5B4114.pal19
-rw-r--r--graphics/evolution_scene/unref_83F7D80.binbin0 -> 1664 bytes
-rw-r--r--graphics/field_effects/flash_black.pal19
-rw-r--r--graphics/field_effects/flash_effect_map.binbin0 -> 2048 bytes
-rw-r--r--graphics/field_effects/flash_effect_tiles.pngbin0 -> 199 bytes
-rw-r--r--graphics/field_effects/flash_gradient.pal19
-rw-r--r--graphics/field_effects/flash_white.pal19
-rw-r--r--graphics/map_objects/unk_835B988.pal19
-rw-r--r--include/battle_bg.h2
-rw-r--r--include/battle_main.h2
-rw-r--r--include/constants/pokemon.h4
-rw-r--r--include/evolution_scene.h10
-rw-r--r--include/pokemon.h2
-rw-r--r--include/pokemon_summary_screen.h2
-rw-r--r--include/sprite.h1
-rw-r--r--include/strings.h8
-rw-r--r--include/trade_scene.h6
-rw-r--r--ld_script.txt4
-rw-r--r--src/battle_main.c6
-rw-r--r--src/battle_script_commands.c4
-rw-r--r--src/evolution_graphics.c4
-rw-r--r--src/evolution_scene.c1569
-rw-r--r--src/pokemon.c12
-rw-r--r--src/trade_scene.c12
-rw-r--r--sym_common.txt7
-rw-r--r--sym_ewram.txt9
47 files changed, 1979 insertions, 4704 deletions
diff --git a/asm/battle_bg.s b/asm/battle_bg.s
index 6db40cb4d..79479a49c 100644
--- a/asm/battle_bg.s
+++ b/asm/battle_bg.s
@@ -193,8 +193,8 @@ _0800F344: .4byte gBattleBgTemplates
_0800F348: .4byte gUnknown_8248330
thumb_func_end sub_800F324
- thumb_func_start sub_800F34C
-sub_800F34C: @ 800F34C
+ thumb_func_start InitBattleBgsVideo
+InitBattleBgsVideo: @ 800F34C
push {lr}
movs r0, 0xC5
bl EnableInterrupts
@@ -215,7 +215,7 @@ sub_800F34C: @ 800F34C
bx r0
.align 2, 0
_0800F37C: .4byte 0x0000b040
- thumb_func_end sub_800F34C
+ thumb_func_end InitBattleBgsVideo
thumb_func_start LoadBattleMenuWindowGfx
LoadBattleMenuWindowGfx: @ 800F380
diff --git a/asm/battle_message.s b/asm/battle_message.s
index 6f4cb083c..fc21f17ee 100644
--- a/asm/battle_message.s
+++ b/asm/battle_message.s
@@ -682,7 +682,7 @@ _080D77B8:
_080D77C8: .4byte 0x00000181
_080D77CC: .4byte gDisplayedStringBattle
_080D77D0:
- ldr r1, _080D77F0 @ =gUnknown_83FDF3C
+ ldr r1, _080D77F0 @ =gBattleStringsTable
adds r0, r6, 0
subs r0, 0xC
lsls r0, 2
@@ -700,7 +700,7 @@ _080D77E2:
pop {r0}
bx r0
.align 2, 0
-_080D77F0: .4byte gUnknown_83FDF3C
+_080D77F0: .4byte gBattleStringsTable
thumb_func_end BufferStringBattle
thumb_func_start BattleStringExpandPlaceholdersToDisplayedString
@@ -2230,14 +2230,14 @@ _080D847C:
ldrb r0, [r0, 0x2]
lsls r0, 8
orrs r1, r0
- ldr r0, _080D8494 @ =gUnknown_83FDF3C
+ ldr r0, _080D8494 @ =gBattleStringsTable
subs r1, 0xC
lsls r1, 2
adds r1, r0
ldr r1, [r1]
b _080D868E
.align 2, 0
-_080D8494: .4byte gUnknown_83FDF3C
+_080D8494: .4byte gBattleStringsTable
_080D8498:
ldrb r0, [r4, 0x1]
cmp r0, 0x2
diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s
deleted file mode 100644
index efa6ccff7..000000000
--- a/asm/evolution_scene.s
+++ /dev/null
@@ -1,4571 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80CDD18
-sub_80CDD18: @ 80CDD18
- push {lr}
- bl UpdatePaletteFade
- bl RunTasks
- pop {r0}
- bx r0
- thumb_func_end sub_80CDD18
-
- thumb_func_start Task_BeginEvolutionScene
-Task_BeginEvolutionScene: @ 80CDD28
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r2, r0, 24
- movs r7, 0
- ldr r1, _080CDD4C @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r6, r0, r1
- movs r1, 0x8
- ldrsh r0, [r6, r1]
- cmp r0, 0
- beq _080CDD50
- cmp r0, 0x1
- beq _080CDD68
- b _080CDD98
- .align 2, 0
-_080CDD4C: .4byte gTasks
-_080CDD50:
- movs r0, 0x1
- negs r0, r0
- str r7, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- b _080CDD98
-_080CDD68:
- ldr r0, _080CDDA0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080CDD98
- movs r0, 0x1C
- ldrsh r1, [r6, r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080CDDA4 @ =gPlayerParty
- adds r7, r1, r0
- ldrh r4, [r6, 0xC]
- ldrb r5, [r6, 0xE]
- ldrb r6, [r6, 0x1C]
- adds r0, r2, 0
- bl DestroyTask
- adds r0, r7, 0
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl EvolutionScene
-_080CDD98:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CDDA0: .4byte gPaletteFade
-_080CDDA4: .4byte gPlayerParty
- thumb_func_end Task_BeginEvolutionScene
-
- thumb_func_start BeginEvolutionScene
-BeginEvolutionScene: @ 80CDDA8
- push {r4-r6,lr}
- adds r4, r1, 0
- adds r5, r2, 0
- adds r6, r3, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- ldr r0, _080CDDE8 @ =Task_BeginEvolutionScene
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080CDDEC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0x8]
- strh r4, [r1, 0xC]
- strh r5, [r1, 0xE]
- strh r6, [r1, 0x1C]
- ldr r0, _080CDDF0 @ =sub_80CDD18
- bl SetMainCallback2
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080CDDE8: .4byte Task_BeginEvolutionScene
-_080CDDEC: .4byte gTasks
-_080CDDF0: .4byte sub_80CDD18
- thumb_func_end BeginEvolutionScene
-
- thumb_func_start EvolutionScene
-EvolutionScene: @ 80CDDF4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x24
- adds r4, r0, 0
- mov r10, r1
- mov r0, r10
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x18]
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x1C]
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0
- bl SetVBlankCallback
- movs r1, 0
- str r1, [sp, 0x14]
- add r0, sp, 0x14
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, _080CE07C @ =0x05006000
- bl CpuSet
- movs r0, 0x4C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x42
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x46
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- bl ResetPaletteFade
- ldr r0, _080CE080 @ =gBattle_BG0_X
- movs r2, 0
- strh r2, [r0]
- ldr r0, _080CE084 @ =gBattle_BG0_Y
- strh r2, [r0]
- ldr r0, _080CE088 @ =gBattle_BG1_X
- strh r2, [r0]
- ldr r0, _080CE08C @ =gBattle_BG1_Y
- strh r2, [r0]
- ldr r0, _080CE090 @ =gBattle_BG2_X
- strh r2, [r0]
- ldr r0, _080CE094 @ =gBattle_BG2_Y
- strh r2, [r0]
- ldr r1, _080CE098 @ =gBattle_BG3_X
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _080CE09C @ =gBattle_BG3_Y
- movs r1, 0
- strh r1, [r0]
- ldr r1, _080CE0A0 @ =gBattleTerrain
- movs r0, 0x9
- strb r0, [r1]
- bl sub_800F34C
- bl LoadBattleTextboxAndBackground
- bl ResetSpriteData
- bl ScanlineEffect_Stop
- bl ResetTasks
- bl FreeAllSpritePalettes
- ldr r0, _080CE0A4 @ =gReservedSpritePaletteCount
- movs r2, 0x4
- strb r2, [r0]
- movs r0, 0x64
- bl AllocZeroed
- ldr r1, _080CE0A8 @ =gUnknown_2039A20
- str r0, [r1]
- bl AllocateMonSpritesGfx
- adds r0, r4, 0
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- ldr r0, _080CE0AC @ =gStringVar1
- mov r1, sp
- bl StringCopy10
- ldr r0, _080CE0B0 @ =gStringVar2
- movs r1, 0xB
- mov r2, r10
- muls r2, r1
- adds r1, r2, 0
- ldr r2, _080CE0B4 @ =gSpeciesNames
- adds r1, r2
- bl StringCopy
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- str r0, [sp, 0x20]
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- mov r9, r0
- lsls r0, r5, 3
- ldr r1, _080CE0B8 @ =gMonFrontPicTable
- adds r0, r1
- ldr r2, _080CE0BC @ =gMonSpritesGfxPtr
- ldr r1, [r2]
- ldr r1, [r1, 0x8]
- adds r2, r5, 0
- bl DecompressPicFromTable
- adds r0, r5, 0
- ldr r1, [sp, 0x20]
- mov r2, r9
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x88
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- adds r0, r5, 0
- movs r1, 0x1
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _080CE0C0 @ =gMultiuseSpriteTemplate
- mov r8, r0
- ldr r1, _080CE0C4 @ =gDummySpriteAffineAnimTable
- str r1, [r0, 0x10]
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- ldr r1, _080CE0A8 @ =gUnknown_2039A20
- ldr r2, [r1]
- lsls r1, r0, 24
- lsrs r3, r1, 24
- strb r0, [r2]
- ldr r7, _080CE0C8 @ =gSprites
- lsls r1, r3, 4
- adds r1, r3
- lsls r1, 2
- adds r6, r7, 0
- adds r6, 0x1C
- adds r0, r1, r6
- ldr r2, _080CE0CC @ =SpriteCallbackDummy2
- str r2, [r0]
- adds r1, r7
- ldrb r2, [r1, 0x5]
- movs r4, 0xF
- adds r0, r4, 0
- ands r0, r2
- movs r2, 0x10
- orrs r0, r2
- strb r0, [r1, 0x5]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- mov r1, r10
- lsls r0, r1, 3
- ldr r2, _080CE0B8 @ =gMonFrontPicTable
- adds r0, r2
- ldr r2, _080CE0BC @ =gMonSpritesGfxPtr
- ldr r1, [r2]
- ldr r1, [r1, 0x10]
- mov r2, r10
- bl DecompressPicFromTable
- mov r0, r10
- ldr r1, [sp, 0x20]
- mov r2, r9
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- mov r0, r10
- movs r1, 0x3
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _080CE0C4 @ =gDummySpriteAffineAnimTable
- mov r1, r8
- str r0, [r1, 0x10]
- mov r0, r8
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- ldr r1, _080CE0A8 @ =gUnknown_2039A20
- ldr r2, [r1]
- lsls r1, r0, 24
- lsrs r3, r1, 24
- strb r0, [r2, 0x1]
- lsls r1, r3, 4
- adds r1, r3
- lsls r1, 2
- adds r6, r1, r6
- ldr r2, _080CE0CC @ =SpriteCallbackDummy2
- str r2, [r6]
- adds r1, r7
- ldrb r0, [r1, 0x5]
- ands r4, r0
- movs r0, 0x20
- orrs r4, r0
- strb r4, [r1, 0x5]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- bl LoadEvoSparkleSpriteAndPal
- ldr r0, _080CE0D0 @ =sub_80CE8DC
- movs r1, 0
- bl CreateTask
- ldr r1, _080CE0A8 @ =gUnknown_2039A20
- ldr r2, [r1]
- lsls r1, r0, 24
- lsrs r3, r1, 24
- strb r0, [r2, 0x2]
- ldr r1, _080CE0D4 @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r0, r1
- movs r2, 0
- strh r2, [r0, 0x8]
- strh r5, [r0, 0xA]
- mov r1, r10
- strh r1, [r0, 0xC]
- mov r2, sp
- ldrh r2, [r2, 0x18]
- strh r2, [r0, 0xE]
- movs r1, 0x1
- strh r1, [r0, 0x10]
- movs r1, 0
- strh r1, [r0, 0x1A]
- mov r2, sp
- ldrh r2, [r2, 0x1C]
- strh r2, [r0, 0x1C]
- ldr r1, _080CE0A8 @ =gUnknown_2039A20
- ldr r0, [r1]
- ldr r1, _080CE0D8 @ =gPlttBufferUnfaded + 0x40
- adds r0, 0x4
- movs r2, 0x60
- bl memcpy
- movs r1, 0xFA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r0, _080CE0DC @ =nullsub_76
- bl SetHBlankCallback
- ldr r0, _080CE0E0 @ =sub_80D0050
- bl SetVBlankCallback
- bl m4aMPlayAllStop
- bl HelpSystem_Disable
- ldr r0, _080CE0E4 @ =sub_80CE710
- bl SetMainCallback2
- add sp, 0x24
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CE07C: .4byte 0x05006000
-_080CE080: .4byte gBattle_BG0_X
-_080CE084: .4byte gBattle_BG0_Y
-_080CE088: .4byte gBattle_BG1_X
-_080CE08C: .4byte gBattle_BG1_Y
-_080CE090: .4byte gBattle_BG2_X
-_080CE094: .4byte gBattle_BG2_Y
-_080CE098: .4byte gBattle_BG3_X
-_080CE09C: .4byte gBattle_BG3_Y
-_080CE0A0: .4byte gBattleTerrain
-_080CE0A4: .4byte gReservedSpritePaletteCount
-_080CE0A8: .4byte gUnknown_2039A20
-_080CE0AC: .4byte gStringVar1
-_080CE0B0: .4byte gStringVar2
-_080CE0B4: .4byte gSpeciesNames
-_080CE0B8: .4byte gMonFrontPicTable
-_080CE0BC: .4byte gMonSpritesGfxPtr
-_080CE0C0: .4byte gMultiuseSpriteTemplate
-_080CE0C4: .4byte gDummySpriteAffineAnimTable
-_080CE0C8: .4byte gSprites
-_080CE0CC: .4byte SpriteCallbackDummy2
-_080CE0D0: .4byte sub_80CE8DC
-_080CE0D4: .4byte gTasks
-_080CE0D8: .4byte gPlttBufferUnfaded + 0x40
-_080CE0DC: .4byte nullsub_76
-_080CE0E0: .4byte sub_80D0050
-_080CE0E4: .4byte sub_80CE710
- thumb_func_end EvolutionScene
-
- thumb_func_start CB2_EvolutionSceneLoadGraphics
-CB2_EvolutionSceneLoadGraphics: @ 80CE0E8
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x8
- ldr r2, _080CE280 @ =gTasks
- ldr r0, _080CE284 @ =gUnknown_2039A20
- mov r8, r0
- ldr r0, [r0]
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x1C
- ldrsh r2, [r0, r1]
- movs r1, 0x64
- adds r4, r2, 0
- muls r4, r1
- ldr r1, _080CE288 @ =gPlayerParty
- adds r4, r1
- ldrh r5, [r0, 0xC]
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- mov r9, r0
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- adds r6, r0, 0
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0
- bl SetVBlankCallback
- movs r4, 0
- str r4, [sp, 0x4]
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, _080CE28C @ =0x05006000
- add r0, sp, 0x4
- bl CpuSet
- movs r0, 0x4C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x42
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x46
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- bl ResetPaletteFade
- ldr r0, _080CE290 @ =gBattle_BG0_X
- strh r4, [r0]
- ldr r0, _080CE294 @ =gBattle_BG0_Y
- strh r4, [r0]
- ldr r0, _080CE298 @ =gBattle_BG1_X
- strh r4, [r0]
- ldr r0, _080CE29C @ =gBattle_BG1_Y
- strh r4, [r0]
- ldr r0, _080CE2A0 @ =gBattle_BG2_X
- strh r4, [r0]
- ldr r0, _080CE2A4 @ =gBattle_BG2_Y
- strh r4, [r0]
- ldr r1, _080CE2A8 @ =gBattle_BG3_X
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _080CE2AC @ =gBattle_BG3_Y
- strh r4, [r0]
- ldr r1, _080CE2B0 @ =gBattleTerrain
- movs r0, 0x9
- strb r0, [r1]
- bl sub_800F34C
- bl LoadBattleTextboxAndBackground
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r1, _080CE2B4 @ =gReservedSpritePaletteCount
- movs r0, 0x4
- strb r0, [r1]
- lsls r0, r5, 3
- ldr r1, _080CE2B8 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _080CE2BC @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- ldr r1, [r1, 0x10]
- adds r2, r5, 0
- bl DecompressPicFromTable
- adds r0, r5, 0
- mov r1, r9
- adds r2, r6, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- adds r0, r5, 0
- movs r1, 0x3
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _080CE2C0 @ =gMultiuseSpriteTemplate
- ldr r1, _080CE2C4 @ =gDummySpriteAffineAnimTable
- str r1, [r0, 0x10]
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- mov r2, r8
- ldr r1, [r2]
- lsls r2, r0, 24
- lsrs r2, 24
- strb r0, [r1, 0x1]
- ldr r3, _080CE2C8 @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x1C
- adds r0, r1, r0
- ldr r2, _080CE2CC @ =SpriteCallbackDummy2
- str r2, [r0]
- adds r1, r3
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- movs r2, 0x20
- orrs r0, r2
- strb r0, [r1, 0x5]
- movs r1, 0xFA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r0, _080CE2D0 @ =nullsub_76
- bl SetHBlankCallback
- ldr r0, _080CE2D4 @ =sub_80D0050
- bl SetVBlankCallback
- ldr r0, _080CE2D8 @ =sub_80CE710
- bl SetMainCallback2
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080CE280: .4byte gTasks
-_080CE284: .4byte gUnknown_2039A20
-_080CE288: .4byte gPlayerParty
-_080CE28C: .4byte 0x05006000
-_080CE290: .4byte gBattle_BG0_X
-_080CE294: .4byte gBattle_BG0_Y
-_080CE298: .4byte gBattle_BG1_X
-_080CE29C: .4byte gBattle_BG1_Y
-_080CE2A0: .4byte gBattle_BG2_X
-_080CE2A4: .4byte gBattle_BG2_Y
-_080CE2A8: .4byte gBattle_BG3_X
-_080CE2AC: .4byte gBattle_BG3_Y
-_080CE2B0: .4byte gBattleTerrain
-_080CE2B4: .4byte gReservedSpritePaletteCount
-_080CE2B8: .4byte gMonFrontPicTable
-_080CE2BC: .4byte gMonSpritesGfxPtr
-_080CE2C0: .4byte gMultiuseSpriteTemplate
-_080CE2C4: .4byte gDummySpriteAffineAnimTable
-_080CE2C8: .4byte gSprites
-_080CE2CC: .4byte SpriteCallbackDummy2
-_080CE2D0: .4byte nullsub_76
-_080CE2D4: .4byte sub_80D0050
-_080CE2D8: .4byte sub_80CE710
- thumb_func_end CB2_EvolutionSceneLoadGraphics
-
- thumb_func_start CB2_TradeEvolutionSceneLoadGraphics
-CB2_TradeEvolutionSceneLoadGraphics: @ 80CE2DC
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r2, _080CE318 @ =gTasks
- ldr r0, _080CE31C @ =gUnknown_2039A20
- ldr r0, [r0]
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x1C
- ldrsh r2, [r0, r1]
- movs r1, 0x64
- muls r2, r1
- ldr r1, _080CE320 @ =gPlayerParty
- adds r4, r2, r1
- ldrh r6, [r0, 0xC]
- ldr r0, _080CE324 @ =gMain
- movs r3, 0x87
- lsls r3, 3
- adds r0, r3
- ldrb r0, [r0]
- cmp r0, 0x7
- bls _080CE30E
- b _080CE534
-_080CE30E:
- lsls r0, 2
- ldr r1, _080CE328 @ =_080CE32C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CE318: .4byte gTasks
-_080CE31C: .4byte gUnknown_2039A20
-_080CE320: .4byte gPlayerParty
-_080CE324: .4byte gMain
-_080CE328: .4byte _080CE32C
- .align 2, 0
-_080CE32C:
- .4byte _080CE34C
- .4byte _080CE3BC
- .4byte _080CE3E4
- .4byte _080CE3EA
- .4byte _080CE414
- .4byte _080CE45C
- .4byte _080CE4CC
- .4byte _080CE504
-_080CE34C:
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0
- bl SetVBlankCallback
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r1, _080CE398 @ =gReservedSpritePaletteCount
- movs r0, 0x4
- strb r0, [r1]
- ldr r0, _080CE39C @ =gBattle_BG0_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080CE3A0 @ =gBattle_BG0_Y
- strh r1, [r0]
- ldr r0, _080CE3A4 @ =gBattle_BG1_X
- strh r1, [r0]
- ldr r0, _080CE3A8 @ =gBattle_BG1_Y
- strh r1, [r0]
- ldr r0, _080CE3AC @ =gBattle_BG2_X
- strh r1, [r0]
- ldr r0, _080CE3B0 @ =gBattle_BG2_Y
- strh r1, [r0]
- ldr r2, _080CE3B4 @ =gBattle_BG3_X
- movs r3, 0x80
- lsls r3, 1
- adds r0, r3, 0
- strh r0, [r2]
- ldr r0, _080CE3B8 @ =gBattle_BG3_Y
- strh r1, [r0]
- b _080CE4EC
- .align 2, 0
-_080CE398: .4byte gReservedSpritePaletteCount
-_080CE39C: .4byte gBattle_BG0_X
-_080CE3A0: .4byte gBattle_BG0_Y
-_080CE3A4: .4byte gBattle_BG1_X
-_080CE3A8: .4byte gBattle_BG1_Y
-_080CE3AC: .4byte gBattle_BG2_X
-_080CE3B0: .4byte gBattle_BG2_Y
-_080CE3B4: .4byte gBattle_BG3_X
-_080CE3B8: .4byte gBattle_BG3_Y
-_080CE3BC:
- bl ResetPaletteFade
- ldr r0, _080CE3D8 @ =nullsub_76
- bl SetHBlankCallback
- ldr r0, _080CE3DC @ =sub_80D00D8
- bl SetVBlankCallback
- ldr r1, _080CE3E0 @ =gMain
- movs r3, 0x87
- lsls r3, 3
- adds r1, r3
- b _080CE4F4
- .align 2, 0
-_080CE3D8: .4byte nullsub_76
-_080CE3DC: .4byte sub_80D00D8
-_080CE3E0: .4byte gMain
-_080CE3E4:
- bl LoadTradeAnimGfx
- b _080CE4EC
-_080CE3EA:
- movs r0, 0x20
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- ldr r1, _080CE410 @ =gMain
- movs r3, 0x87
- lsls r3, 3
- adds r1, r3
- b _080CE4F4
- .align 2, 0
-_080CE410: .4byte gMain
-_080CE414:
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- adds r5, r0, 0
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r0, r6, 3
- ldr r1, _080CE454 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _080CE458 @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- ldr r1, [r1, 0x10]
- adds r2, r6, 0
- bl DecompressPicFromTable
- adds r0, r6, 0
- adds r1, r5, 0
- adds r2, r4, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- b _080CE4EC
- .align 2, 0
-_080CE454: .4byte gMonFrontPicTable
-_080CE458: .4byte gMonSpritesGfxPtr
-_080CE45C:
- adds r0, r6, 0
- movs r1, 0x1
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _080CE4B4 @ =gMultiuseSpriteTemplate
- ldr r1, _080CE4B8 @ =gDummySpriteAffineAnimTable
- str r1, [r0, 0x10]
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- ldr r1, _080CE4BC @ =gUnknown_2039A20
- ldr r1, [r1]
- lsls r2, r0, 24
- lsrs r2, 24
- strb r0, [r1, 0x1]
- ldr r3, _080CE4C0 @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x1C
- adds r0, r1, r0
- ldr r2, _080CE4C4 @ =SpriteCallbackDummy2
- str r2, [r0]
- adds r1, r3
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- movs r2, 0x20
- orrs r0, r2
- strb r0, [r1, 0x5]
- ldr r1, _080CE4C8 @ =gMain
- movs r3, 0x87
- lsls r3, 3
- adds r1, r3
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- bl sub_80504B0
- b _080CE534
- .align 2, 0
-_080CE4B4: .4byte gMultiuseSpriteTemplate
-_080CE4B8: .4byte gDummySpriteAffineAnimTable
-_080CE4BC: .4byte gUnknown_2039A20
-_080CE4C0: .4byte gSprites
-_080CE4C4: .4byte SpriteCallbackDummy2
-_080CE4C8: .4byte gMain
-_080CE4CC:
- ldr r0, _080CE4FC @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _080CE4E0
- bl LoadWirelessStatusIndicatorSpriteGfx
- movs r0, 0
- movs r1, 0
- bl CreateWirelessStatusIndicatorSprite
-_080CE4E0:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
-_080CE4EC:
- ldr r1, _080CE500 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
-_080CE4F4:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _080CE534
- .align 2, 0
-_080CE4FC: .4byte gWirelessCommType
-_080CE500: .4byte gMain
-_080CE504:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- bl sub_805049C
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- ldr r0, _080CE53C @ =sub_80CE72C
- bl SetMainCallback2
- movs r1, 0x9A
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
-_080CE534:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080CE53C: .4byte sub_80CE72C
- thumb_func_end CB2_TradeEvolutionSceneLoadGraphics
-
- thumb_func_start TradeEvolutionScene
-TradeEvolutionScene: @ 80CE540
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 24
- lsrs r6, 24
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x14]
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- ldr r0, _080CE6B0 @ =gStringVar1
- mov r1, sp
- bl StringCopy10
- ldr r0, _080CE6B4 @ =gStringVar2
- movs r1, 0xB
- muls r1, r5
- ldr r2, _080CE6B8 @ =gSpeciesNames
- adds r1, r2
- bl StringCopy
- ldr r1, _080CE6BC @ =gAffineAnimsDisabled
- movs r0, 0x1
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- mov r8, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- adds r7, r0, 0
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- mov r10, r0
- ldr r1, _080CE6C0 @ =gUnknown_2039A20
- mov r9, r1
- movs r0, 0x64
- bl AllocZeroed
- mov r2, r9
- str r0, [r2]
- movs r4, 0
- strb r6, [r0]
- lsls r0, r5, 3
- ldr r1, _080CE6C4 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _080CE6C8 @ =gMonSpritesGfxPtr
- ldr r1, [r1]
- ldr r1, [r1, 0x8]
- adds r2, r5, 0
- bl DecompressPicFromTable
- adds r0, r5, 0
- mov r1, r10
- adds r2, r7, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- adds r0, r5, 0
- movs r1, 0x1
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, _080CE6CC @ =gMultiuseSpriteTemplate
- ldr r1, _080CE6D0 @ =gDummySpriteAffineAnimTable
- str r1, [r0, 0x10]
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- mov r1, r9
- ldr r2, [r1]
- lsls r1, r0, 24
- lsrs r6, r1, 24
- strb r0, [r2, 0x1]
- ldr r3, _080CE6D4 @ =gSprites
- lsls r1, r6, 4
- adds r1, r6
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x1C
- adds r0, r1, r0
- ldr r2, _080CE6D8 @ =SpriteCallbackDummy2
- str r2, [r0]
- adds r1, r3
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- movs r2, 0x20
- orrs r0, r2
- strb r0, [r1, 0x5]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- bl LoadEvoSparkleSpriteAndPal
- ldr r0, _080CE6DC @ =sub_80CF53C
- movs r1, 0
- bl CreateTask
- mov r1, r9
- ldr r2, [r1]
- lsls r1, r0, 24
- lsrs r6, r1, 24
- strb r0, [r2, 0x2]
- ldr r1, _080CE6E0 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- strh r4, [r0, 0x8]
- mov r2, r8
- strh r2, [r0, 0xA]
- strh r5, [r0, 0xC]
- movs r1, 0x1
- strh r1, [r0, 0x10]
- strh r4, [r0, 0x1A]
- mov r1, sp
- ldrh r1, [r1, 0x14]
- strh r1, [r0, 0x1C]
- ldr r0, _080CE6E4 @ =gBattle_BG0_X
- strh r4, [r0]
- ldr r0, _080CE6E8 @ =gBattle_BG0_Y
- strh r4, [r0]
- ldr r0, _080CE6EC @ =gBattle_BG1_X
- strh r4, [r0]
- ldr r0, _080CE6F0 @ =gBattle_BG1_Y
- strh r4, [r0]
- ldr r0, _080CE6F4 @ =gBattle_BG2_X
- strh r4, [r0]
- ldr r0, _080CE6F8 @ =gBattle_BG2_Y
- strh r4, [r0]
- ldr r1, _080CE6FC @ =gBattle_BG3_X
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _080CE700 @ =gBattle_BG3_Y
- strh r4, [r0]
- ldr r2, _080CE704 @ =gTextFlags
- ldrb r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _080CE708 @ =sub_80D00D8
- bl SetVBlankCallback
- ldr r0, _080CE70C @ =sub_80CE72C
- bl SetMainCallback2
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CE6B0: .4byte gStringVar1
-_080CE6B4: .4byte gStringVar2
-_080CE6B8: .4byte gSpeciesNames
-_080CE6BC: .4byte gAffineAnimsDisabled
-_080CE6C0: .4byte gUnknown_2039A20
-_080CE6C4: .4byte gMonFrontPicTable
-_080CE6C8: .4byte gMonSpritesGfxPtr
-_080CE6CC: .4byte gMultiuseSpriteTemplate
-_080CE6D0: .4byte gDummySpriteAffineAnimTable
-_080CE6D4: .4byte gSprites
-_080CE6D8: .4byte SpriteCallbackDummy2
-_080CE6DC: .4byte sub_80CF53C
-_080CE6E0: .4byte gTasks
-_080CE6E4: .4byte gBattle_BG0_X
-_080CE6E8: .4byte gBattle_BG0_Y
-_080CE6EC: .4byte gBattle_BG1_X
-_080CE6F0: .4byte gBattle_BG1_Y
-_080CE6F4: .4byte gBattle_BG2_X
-_080CE6F8: .4byte gBattle_BG2_Y
-_080CE6FC: .4byte gBattle_BG3_X
-_080CE700: .4byte gBattle_BG3_Y
-_080CE704: .4byte gTextFlags
-_080CE708: .4byte sub_80D00D8
-_080CE70C: .4byte sub_80CE72C
- thumb_func_end TradeEvolutionScene
-
- thumb_func_start sub_80CE710
-sub_80CE710: @ 80CE710
- push {lr}
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTextPrinters
- bl UpdatePaletteFade
- bl RunTasks
- pop {r0}
- bx r0
- thumb_func_end sub_80CE710
-
- thumb_func_start sub_80CE72C
-sub_80CE72C: @ 80CE72C
- push {lr}
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTextPrinters
- bl UpdatePaletteFade
- bl RunTasks
- pop {r0}
- bx r0
- thumb_func_end sub_80CE72C
-
- thumb_func_start CreateShedinja
-CreateShedinja: @ 80CE748
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- str r1, [sp, 0x4]
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- movs r0, 0
- str r0, [sp]
- mov r0, r10
- lsls r0, 2
- str r0, [sp, 0x8]
- add r0, r10
- lsls r7, r0, 3
- ldr r1, _080CE8C4 @ =gEvolutionTable
- adds r1, r7
- mov r8, r1
- ldrh r0, [r1]
- cmp r0, 0xD
- beq _080CE778
- b _080CE8B2
-_080CE778:
- ldr r6, _080CE8C8 @ =gPlayerPartyCount
- ldrb r0, [r6]
- cmp r0, 0x5
- bls _080CE782
- b _080CE8B2
-_080CE782:
- movs r5, 0x64
- muls r0, r5
- ldr r4, _080CE8CC @ =gPlayerParty
- adds r0, r4
- mov r9, r0
- ldr r1, [sp, 0x4]
- movs r2, 0x64
- bl CopyMon
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- ldr r1, _080CE8C4 @ =gEvolutionTable
- adds r2, r1, r7
- adds r2, 0xC
- movs r1, 0xB
- bl SetMonData
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- mov r1, r8
- ldrh r2, [r1, 0xC]
- movs r1, 0xB
- muls r2, r1
- ldr r1, _080CE8D0 @ =gSpeciesNames
- adds r2, r1
- movs r1, 0x2
- bl SetMonData
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- movs r1, 0x8
- mov r2, sp
- bl SetMonData
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- movs r1, 0xA
- mov r2, sp
- bl SetMonData
- movs r4, 0x32
- ldr r0, [sp, 0x8]
- mov r8, r0
- adds r5, r6, 0
-_080CE7F0:
- ldrb r1, [r5]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080CE8CC @ =gPlayerParty
- adds r0, r1
- adds r1, r4, 0
- mov r2, sp
- bl SetMonData
- adds r4, 0x1
- cmp r4, 0x36
- ble _080CE7F0
- movs r4, 0x43
- ldr r7, _080CE8C8 @ =gPlayerPartyCount
-_080CE80C:
- ldrb r0, [r7]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _080CE8CC @ =gPlayerParty
- adds r0, r5
- adds r1, r4, 0
- mov r2, sp
- bl SetMonData
- adds r4, 0x1
- cmp r4, 0x4F
- ble _080CE80C
- ldr r4, _080CE8C8 @ =gPlayerPartyCount
- ldrb r0, [r4]
- muls r0, r6
- adds r0, r5
- movs r1, 0x37
- mov r2, sp
- bl SetMonData
- movs r0, 0xFF
- str r0, [sp]
- ldrb r0, [r4]
- muls r0, r6
- adds r0, r5
- movs r1, 0x40
- mov r2, sp
- bl SetMonData
- ldrb r0, [r4]
- muls r0, r6
- adds r0, r5
- bl CalculateMonStats
- bl CalculatePlayerPartyCount
- ldr r0, _080CE8C4 @ =gEvolutionTable
- mov r4, r8
- add r4, r10
- lsls r4, 3
- adds r4, r0
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2
- bl GetSetPokedexFlag
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl GetSetPokedexFlag
- mov r0, r9
- movs r1, 0xB
- bl GetMonData
- ldr r1, _080CE8D4 @ =0x0000012f
- cmp r0, r1
- bne _080CE8B2
- mov r0, r9
- movs r1, 0x3
- bl GetMonData
- cmp r0, 0x1
- bne _080CE8B2
- ldr r0, [sp, 0x4]
- movs r1, 0xB
- bl GetMonData
- movs r1, 0x97
- lsls r1, 1
- cmp r0, r1
- bne _080CE8B2
- ldr r2, _080CE8D8 @ =gUnknown_83F8440
- mov r0, r9
- movs r1, 0x2
- bl SetMonData
-_080CE8B2:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CE8C4: .4byte gEvolutionTable
-_080CE8C8: .4byte gPlayerPartyCount
-_080CE8CC: .4byte gPlayerParty
-_080CE8D0: .4byte gSpeciesNames
-_080CE8D4: .4byte 0x0000012f
-_080CE8D8: .4byte gUnknown_83F8440
- thumb_func_end CreateShedinja
-
- thumb_func_start sub_80CE8DC
-sub_80CE8DC: @ 80CE8DC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r4, _080CE93C @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r5, r0, r4
- movs r0, 0x1C
- ldrsh r1, [r5, r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080CE940 @ =gPlayerParty
- adds r1, r0
- mov r9, r1
- bl IsNationalPokedexEnabled
- mov r10, r4
- cmp r0, 0
- bne _080CE948
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0x8
- bne _080CE948
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0x97
- ble _080CE948
- movs r0, 0x11
- strh r0, [r5, 0x8]
- movs r2, 0x1
- strh r2, [r5, 0x1A]
- ldr r0, _080CE944 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r10
- strh r2, [r0, 0x18]
- bl sub_80D04A8
- bl _080CF528
- .align 2, 0
-_080CE93C: .4byte gTasks
-_080CE940: .4byte gPlayerParty
-_080CE944: .4byte gBattleCommunication
-_080CE948:
- ldr r0, _080CE9A0 @ =gMain
- ldrh r1, [r0, 0x2C]
- ldr r3, _080CE9A4 @ =gTasks
- mov r10, r3
- lsls r2, r7, 2
- mov r8, r2
- adds r5, r0, 0
- cmp r1, 0x2
- bne _080CE9AC
- adds r0, r2, r7
- lsls r0, 3
- adds r2, r0, r3
- movs r3, 0x8
- ldrsh r0, [r2, r3]
- cmp r0, 0x8
- bne _080CE9AC
- ldr r4, _080CE9A8 @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- add r1, r10
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CE9AC
- ldrh r1, [r2, 0xE]
- movs r3, 0x1
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _080CE9AC
- movs r0, 0x11
- strh r0, [r2, 0x8]
- ldrb r1, [r4, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r10
- strh r3, [r0, 0x18]
- bl sub_80D04A8
- bl _080CF528
- .align 2, 0
-_080CE9A0: .4byte gMain
-_080CE9A4: .4byte gTasks
-_080CE9A8: .4byte gBattleCommunication
-_080CE9AC:
- mov r1, r8
- adds r0, r1, r7
- lsls r0, 3
- add r0, r10
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- cmp r0, 0x16
- bls _080CE9C0
- bl _080CF528
-_080CE9C0:
- lsls r0, 2
- ldr r1, _080CE9CC @ =_080CE9D0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CE9CC: .4byte _080CE9D0
- .align 2, 0
-_080CE9D0:
- .4byte _080CEA2C
- .4byte _080CEA90
- .4byte _080CEAD0
- .4byte _080CEAF0
- .4byte _080CEB18
- .4byte _080CEB58
- .4byte _080CEB90
- .4byte _080CEBD0
- .4byte _080CEC08
- .4byte _080CEC4C
- .4byte _080CEC68
- .4byte _080CEC94
- .4byte _080CECC0
- .4byte _080CED0C
- .4byte _080CED2C
- .4byte _080CEDB8
- .4byte _080CEE60
- .4byte _080CEED0
- .4byte _080CEF10
- .4byte _080CEF3C
- .4byte _080CEF9C
- .4byte _080CEFF8
- .4byte _080CF034
-_080CEA2C:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r2, _080CEA84 @ =gSprites
- ldr r0, _080CEA88 @ =gUnknown_2039A20
- ldr r0, [r0]
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- ldr r0, _080CEA8C @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- bl _080CF528
- .align 2, 0
-_080CEA84: .4byte gSprites
-_080CEA88: .4byte gUnknown_2039A20
-_080CEA8C: .4byte gTasks
-_080CEA90:
- ldr r0, _080CEAC0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CEAA0
- bl _080CF528
-_080CEAA0:
- ldr r4, _080CEAC4 @ =gStringVar4
- ldr r1, _080CEAC8 @ =gUnknown_83FE672
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CEACC @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- b _080CEFDE
- .align 2, 0
-_080CEAC0: .4byte gPaletteFade
-_080CEAC4: .4byte gStringVar4
-_080CEAC8: .4byte gUnknown_83FE672
-_080CEACC: .4byte gTasks
-_080CEAD0:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CEAE0
- bl _080CF528
-_080CEAE0:
- ldr r0, _080CEAEC @ =gTasks
- mov r3, r8
- adds r4, r3, r7
- lsls r4, 3
- adds r4, r0
- b _080CEF26
- .align 2, 0
-_080CEAEC: .4byte gTasks
-_080CEAF0:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _080CEAFE
- bl _080CF528
-_080CEAFE:
- ldr r0, _080CEB10 @ =0x00000107
- bl PlaySE
- ldr r0, _080CEB14 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- b _080CEFDE
- .align 2, 0
-_080CEB10: .4byte 0x00000107
-_080CEB14: .4byte gTasks
-_080CEB18:
- bl IsSEPlaying
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080CEB28
- bl _080CF528
-_080CEB28:
- movs r0, 0x84
- lsls r0, 1
- bl PlayNewMapMusic
- ldr r0, _080CEB54 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- str r4, [sp]
- movs r0, 0x1C
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- bl _080CF528
- .align 2, 0
-_080CEB54: .4byte gTasks
-_080CEB58:
- ldr r0, _080CEB84 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CEB68
- bl _080CF528
-_080CEB68:
- movs r0, 0
- bl InitMovingBackgroundTask
- movs r0, 0x11
- bl LaunchTask_PreEvoSparklesSet1
- ldr r1, _080CEB88 @ =gBattleCommunication
- strb r0, [r1, 0x2]
- ldr r0, _080CEB8C @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- b _080CEFDE
- .align 2, 0
-_080CEB84: .4byte gPaletteFade
-_080CEB88: .4byte gBattleCommunication
-_080CEB8C: .4byte gTasks
-_080CEB90:
- ldr r4, _080CEBC8 @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- add r1, r10
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CEBA6
- bl _080CF528
-_080CEBA6:
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- add r1, r10
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- ldr r0, _080CEBCC @ =gUnknown_2039A20
- ldr r1, [r0]
- movs r0, 0x1
- strb r0, [r1, 0x3]
- bl LaunchTask_PreEvoSparklesSet2
- strb r0, [r4, 0x2]
- bl _080CF528
- .align 2, 0
-_080CEBC8: .4byte gBattleCommunication
-_080CEBCC: .4byte gUnknown_2039A20
-_080CEBD0:
- ldr r4, _080CEC00 @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- add r1, r10
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CEBE6
- bl _080CF528
-_080CEBE6:
- ldr r0, _080CEC04 @ =gUnknown_2039A20
- ldr r1, [r0]
- ldrb r0, [r1]
- ldrb r1, [r1, 0x1]
- bl LaunchTask_PrePostEvoMonSprites
- strb r0, [r4, 0x2]
- mov r0, r8
- adds r1, r0, r7
- lsls r1, 3
- add r1, r10
- b _080CEFDE
- .align 2, 0
-_080CEC00: .4byte gBattleCommunication
-_080CEC04: .4byte gUnknown_2039A20
-_080CEC08:
- ldr r2, _080CEC44 @ =gUnknown_2039A20
- ldr r1, [r2]
- ldrb r0, [r1, 0x3]
- subs r0, 0x1
- strb r0, [r1, 0x3]
- lsls r0, 24
- cmp r0, 0
- beq _080CEC1C
- bl _080CF528
-_080CEC1C:
- ldr r1, [r2]
- movs r0, 0x3
- strb r0, [r1, 0x3]
- ldr r0, _080CEC48 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r10
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080CEC38
- bl _080CF528
-_080CEC38:
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- add r1, r10
- b _080CEFDE
- .align 2, 0
-_080CEC44: .4byte gUnknown_2039A20
-_080CEC48: .4byte gBattleCommunication
-_080CEC4C:
- bl LaunchTask_PostEvoSparklesSet1
- ldr r1, _080CEC60 @ =gBattleCommunication
- strb r0, [r1, 0x2]
- ldr r0, _080CEC64 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- b _080CEFDE
- .align 2, 0
-_080CEC60: .4byte gBattleCommunication
-_080CEC64: .4byte gTasks
-_080CEC68:
- ldr r6, _080CEC90 @ =gBattleCommunication
- ldrb r0, [r6, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- add r1, r10
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CEC7E
- bl _080CF528
-_080CEC7E:
- mov r0, r8
- adds r4, r0, r7
- lsls r4, 3
- add r4, r10
- ldrh r0, [r4, 0xC]
- bl LaunchTask_PostEvoSparklesSet2AndFlash
- strb r0, [r6, 0x2]
- b _080CEF2E
- .align 2, 0
-_080CEC90: .4byte gBattleCommunication
-_080CEC94:
- ldr r0, _080CECBC @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r10
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080CECAA
- bl _080CF528
-_080CECAA:
- movs r0, 0x1B
- bl PlaySE
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- add r1, r10
- b _080CEFDE
- .align 2, 0
-_080CECBC: .4byte gBattleCommunication
-_080CECC0:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080CECCE
- bl _080CF528
-_080CECCE:
- bl m4aMPlayAllStop
- ldr r0, _080CED00 @ =gPlttBufferUnfaded + 0x40
- ldr r1, _080CED04 @ =gUnknown_2039A20
- ldr r1, [r1]
- adds r1, 0x4
- movs r2, 0x60
- bl memcpy
- bl sub_80D04E8
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1C
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _080CED08 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- b _080CEFDE
- .align 2, 0
-_080CED00: .4byte gPlttBufferUnfaded + 0x40
-_080CED04: .4byte gUnknown_2039A20
-_080CED08: .4byte gTasks
-_080CED0C:
- ldr r0, _080CED28 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CED1C
- bl _080CF528
-_080CED1C:
- mov r0, r8
- adds r4, r0, r7
- lsls r4, 3
- add r4, r10
- ldrh r0, [r4, 0xC]
- b _080CEF28
- .align 2, 0
-_080CED28: .4byte gPaletteFade
-_080CED2C:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _080CED3A
- bl _080CF528
-_080CED3A:
- ldr r4, _080CEDA8 @ =gStringVar4
- ldr r1, _080CEDAC @ =gUnknown_83FE688
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CEDB0 @ =0x00000103
- bl PlayBGM
- ldr r2, _080CEDB4 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r4, r1, r2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- adds r2, r1
- adds r2, 0xC
- mov r0, r9
- movs r1, 0xB
- bl SetMonData
- mov r0, r9
- bl CalculateMonStats
- ldrh r1, [r4, 0xA]
- ldrh r2, [r4, 0xC]
- mov r0, r9
- bl EvolutionRenameMon
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2
- bl GetSetPokedexFlag
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl GetSetPokedexFlag
- movs r0, 0xE
- bl IncrementGameStat
- b _080CF528
- .align 2, 0
-_080CEDA8: .4byte gStringVar4
-_080CEDAC: .4byte gUnknown_83FE688
-_080CEDB0: .4byte 0x00000103
-_080CEDB4: .4byte gTasks
-_080CEDB8:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CEDC6
- b _080CF528
-_080CEDC6:
- bl HelpSystem_Enable
- ldr r1, _080CEE20 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r5, r0, r1
- ldrb r1, [r5, 0x10]
- mov r0, r9
- bl MonTryLearningNewMove
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0
- beq _080CEE40
- movs r3, 0x1A
- ldrsh r4, [r5, r3]
- cmp r4, 0
- bne _080CEE40
- bl StopMapMusic
- bl Overworld_PlaySpecialMapMusic
- ldrh r1, [r5, 0xE]
- movs r0, 0x80
- orrs r0, r1
- strh r0, [r5, 0xE]
- strh r4, [r5, 0x10]
- strh r4, [r5, 0x14]
- mov r0, r9
- movs r1, 0x2
- add r2, sp, 0x4
- bl GetMonData
- ldr r0, _080CEE24 @ =gBattleTextBuff1
- add r1, sp, 0x4
- bl StringCopy10
- ldr r0, _080CEE28 @ =0x0000ffff
- cmp r6, r0
- bne _080CEE2C
- movs r0, 0x16
- strh r0, [r5, 0x8]
- b _080CF528
- .align 2, 0
-_080CEE20: .4byte gTasks
-_080CEE24: .4byte gBattleTextBuff1
-_080CEE28: .4byte 0x0000ffff
-_080CEE2C:
- ldr r0, _080CEE3C @ =0x0000fffe
- cmp r6, r0
- bne _080CEE34
- b _080CF528
-_080CEE34:
- movs r0, 0x14
- strh r0, [r5, 0x8]
- b _080CF528
- .align 2, 0
-_080CEE3C: .4byte 0x0000fffe
-_080CEE40:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _080CEE5C @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- b _080CEFDE
- .align 2, 0
-_080CEE5C: .4byte gTasks
-_080CEE60:
- ldr r0, _080CEEC4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r2, 0x80
- adds r0, r2, 0
- ands r0, r1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _080CEE74
- b _080CF528
-_080CEE74:
- mov r3, r8
- adds r0, r3, r7
- lsls r0, 3
- mov r1, r10
- adds r4, r0, r1
- ldrh r1, [r4, 0xE]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _080CEE90
- bl StopMapMusic
- bl Overworld_PlaySpecialMapMusic
-_080CEE90:
- movs r2, 0x1A
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080CEEA0
- ldrh r0, [r4, 0xA]
- mov r1, r9
- bl CreateShedinja
-_080CEEA0:
- adds r0, r7, 0
- bl DestroyTask
- bl FreeMonSpritesGfx
- ldr r4, _080CEEC8 @ =gUnknown_2039A20
- ldr r0, [r4]
- bl Free
- str r6, [r4]
- bl FreeAllWindowBuffers
- ldr r0, _080CEECC @ =gCB2_AfterEvolution
- ldr r0, [r0]
- bl SetMainCallback2
- b _080CF528
- .align 2, 0
-_080CEEC4: .4byte gPaletteFade
-_080CEEC8: .4byte gUnknown_2039A20
-_080CEECC: .4byte gCB2_AfterEvolution
-_080CEED0:
- ldr r0, _080CEF04 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r10
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080CEEE4
- b _080CF528
-_080CEEE4:
- bl m4aMPlayAllStop
- ldr r0, _080CEF08 @ =0x0006001c
- ldr r1, _080CEF0C @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- add r1, r10
- b _080CEFDE
- .align 2, 0
-_080CEF04: .4byte gBattleCommunication
-_080CEF08: .4byte 0x0006001c
-_080CEF0C: .4byte 0x00007fff
-_080CEF10:
- ldr r0, _080CEF38 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CEF1E
- b _080CF528
-_080CEF1E:
- mov r0, r8
- adds r4, r0, r7
- lsls r4, 3
- add r4, r10
-_080CEF26:
- ldrh r0, [r4, 0xA]
-_080CEF28:
- movs r1, 0
- bl PlayCry1
-_080CEF2E:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080CF528
- .align 2, 0
-_080CEF38: .4byte gPaletteFade
-_080CEF3C:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _080CEF48
- b _080CF528
-_080CEF48:
- ldr r0, _080CEF64 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- movs r3, 0x1A
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _080CEF70
- ldr r0, _080CEF68 @ =gStringVar4
- ldr r1, _080CEF6C @ =gUnknown_83FE6D0
- bl StringExpandPlaceholders
- b _080CEF78
- .align 2, 0
-_080CEF64: .4byte gTasks
-_080CEF68: .4byte gStringVar4
-_080CEF6C: .4byte gUnknown_83FE6D0
-_080CEF70:
- ldr r0, _080CEF90 @ =gStringVar4
- ldr r1, _080CEF94 @ =gUnknown_83FE6B5
- bl StringExpandPlaceholders
-_080CEF78:
- ldr r0, _080CEF90 @ =gStringVar4
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r1, _080CEF98 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0x1
- strh r1, [r0, 0x1A]
- b _080CF4F2
- .align 2, 0
-_080CEF90: .4byte gStringVar4
-_080CEF94: .4byte gUnknown_83FE6B5
-_080CEF98: .4byte gTasks
-_080CEF9C:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CEFAA
- b _080CF528
-_080CEFAA:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CEFB6
- b _080CF528
-_080CEFB6:
- bl BufferMoveToLearnIntoBattleTextBuff2
- ldr r0, _080CEFE8 @ =0x00000101
- bl PlayFanfare
- ldr r0, _080CEFEC @ =gUnknown_83FDF3C
- ldr r0, [r0, 0xC]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CEFF0 @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CEFF4 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x40
- strh r0, [r1, 0x10]
-_080CEFDE:
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _080CF528
- .align 2, 0
-_080CEFE8: .4byte 0x00000101
-_080CEFEC: .4byte gUnknown_83FDF3C
-_080CEFF0: .4byte gDisplayedStringBattle
-_080CEFF4: .4byte gTasks
-_080CEFF8:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF006
- b _080CF528
-_080CF006:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CF012
- b _080CF528
-_080CF012:
- ldr r0, _080CF030 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x10]
- subs r0, 0x1
- strh r0, [r1, 0x10]
- lsls r0, 16
- cmp r0, 0
- beq _080CF02A
- b _080CF528
-_080CF02A:
- movs r0, 0xF
- strh r0, [r1, 0x8]
- b _080CF528
- .align 2, 0
-_080CF030: .4byte gTasks
-_080CF034:
- mov r3, r8
- adds r0, r3, r7
- lsls r0, 3
- add r0, r10
- movs r1, 0x14
- ldrsh r0, [r0, r1]
- cmp r0, 0xC
- bls _080CF046
- b _080CF528
-_080CF046:
- lsls r0, 2
- ldr r1, _080CF050 @ =_080CF054
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CF050: .4byte _080CF054
- .align 2, 0
-_080CF054:
- .4byte _080CF088
- .4byte _080CF0D4
- .4byte _080CF11C
- .4byte _080CF15A
- .4byte _080CF1BC
- .4byte _080CF2B4
- .4byte _080CF30C
- .4byte _080CF3E0
- .4byte _080CF414
- .4byte _080CF45C
- .4byte _080CF4A4
- .4byte _080CF4D8
- .4byte _080CF504
-_080CF088:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF096
- b _080CF528
-_080CF096:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CF0A2
- b _080CF528
-_080CF0A2:
- bl BufferMoveToLearnIntoBattleTextBuff2
- ldr r0, _080CF0C8 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x10]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF0CC @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CF0D0 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080CF526
- .align 2, 0
-_080CF0C8: .4byte gUnknown_83FDF3C
-_080CF0CC: .4byte gDisplayedStringBattle
-_080CF0D0: .4byte gTasks
-_080CF0D4:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF0E2
- b _080CF528
-_080CF0E2:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CF0EE
- b _080CF528
-_080CF0EE:
- ldr r0, _080CF110 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x14]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF114 @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CF118 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080CF526
- .align 2, 0
-_080CF110: .4byte gUnknown_83FDF3C
-_080CF114: .4byte gDisplayedStringBattle
-_080CF118: .4byte gTasks
-_080CF11C:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080CF15A
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080CF15A
- ldr r0, _080CF1A8 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x18]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF1AC @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CF1B0 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x5
- strh r0, [r1, 0x16]
- movs r0, 0xA
- strh r0, [r1, 0x18]
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- strh r0, [r1, 0x14]
-_080CF15A:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF168
- b _080CF528
-_080CF168:
- bl IsSEPlaying
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _080CF176
- b _080CF528
-_080CF176:
- str r0, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl HandleBattleWindow
- ldr r0, _080CF1B4 @ =gText_BattleYesNoChoice
- movs r1, 0xE
- bl BattlePutTextOnWindow
- ldr r0, _080CF1B0 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- movs r2, 0
- strh r0, [r1, 0x14]
- ldr r0, _080CF1B8 @ =gBattleCommunication
- strb r2, [r0, 0x1]
- bl BattleCreateYesNoCursorAt
- b _080CF528
- .align 2, 0
-_080CF1A8: .4byte gUnknown_83FDF3C
-_080CF1AC: .4byte gDisplayedStringBattle
-_080CF1B0: .4byte gTasks
-_080CF1B4: .4byte gText_BattleYesNoChoice
-_080CF1B8: .4byte gBattleCommunication
-_080CF1BC:
- ldr r0, _080CF244 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080CF1E2
- ldr r4, _080CF248 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _080CF1E2
- movs r0, 0x5
- bl PlaySE
- bl BattleDestroyYesNoCursorAt
- movs r0, 0
- strb r0, [r4, 0x1]
- bl BattleCreateYesNoCursorAt
-_080CF1E2:
- ldr r0, _080CF244 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CF208
- ldr r4, _080CF248 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _080CF208
- movs r0, 0x5
- bl PlaySE
- bl BattleDestroyYesNoCursorAt
- movs r0, 0x1
- strb r0, [r4, 0x1]
- bl BattleCreateYesNoCursorAt
-_080CF208:
- ldr r0, _080CF244 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _080CF276
- str r2, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl HandleBattleWindow
- movs r0, 0x5
- bl PlaySE
- ldr r0, _080CF248 @ =gBattleCommunication
- ldrb r2, [r0, 0x1]
- cmp r2, 0
- beq _080CF250
- ldr r0, _080CF24C @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- strh r0, [r1, 0x14]
- b _080CF276
- .align 2, 0
-_080CF244: .4byte gMain
-_080CF248: .4byte gBattleCommunication
-_080CF24C: .4byte gTasks
-_080CF250:
- ldr r0, _080CF2AC @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x16]
- strh r0, [r1, 0x14]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5
- bne _080CF276
- movs r0, 0x1
- negs r0, r0
- str r2, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_080CF276:
- ldr r0, _080CF2B0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _080CF284
- b _080CF528
-_080CF284:
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl HandleBattleWindow
- movs r0, 0x5
- bl PlaySE
- ldr r1, _080CF2AC @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x18]
- strh r1, [r0, 0x14]
- b _080CF528
- .align 2, 0
-_080CF2AC: .4byte gTasks
-_080CF2B0: .4byte gMain
-_080CF2B4:
- ldr r0, _080CF2F4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CF2C2
- b _080CF528
-_080CF2C2:
- bl FreeAllWindowBuffers
- ldr r0, _080CF2F8 @ =gPlayerParty
- ldr r1, _080CF2FC @ =gTasks
- mov r3, r8
- adds r5, r3, r7
- lsls r5, 3
- adds r5, r1
- ldrb r1, [r5, 0x1C]
- ldr r2, _080CF300 @ =gPlayerPartyCount
- ldrb r2, [r2]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _080CF304 @ =CB2_EvolutionSceneLoadGraphics
- ldr r4, _080CF308 @ =gMoveToLearn
- ldrh r4, [r4]
- str r4, [sp]
- bl ShowSelectMovePokemonSummaryScreen
- ldrh r0, [r5, 0x14]
- adds r0, 0x1
- strh r0, [r5, 0x14]
- b _080CF528
- .align 2, 0
-_080CF2F4: .4byte gPaletteFade
-_080CF2F8: .4byte gPlayerParty
-_080CF2FC: .4byte gTasks
-_080CF300: .4byte gPlayerPartyCount
-_080CF304: .4byte CB2_EvolutionSceneLoadGraphics
-_080CF308: .4byte gMoveToLearn
-_080CF30C:
- ldr r0, _080CF340 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CF31A
- b _080CF528
-_080CF31A:
- ldr r1, [r5, 0x4]
- ldr r0, _080CF344 @ =sub_80CE710
- cmp r1, r0
- beq _080CF324
- b _080CF528
-_080CF324:
- bl sub_8138B2C
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x4
- bne _080CF34C
- ldr r0, _080CF348 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0xA
- b _080CF526
- .align 2, 0
-_080CF340: .4byte gPaletteFade
-_080CF344: .4byte sub_80CE710
-_080CF348: .4byte gTasks
-_080CF34C:
- adds r1, r6, 0
- adds r1, 0xD
- mov r0, r9
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl IsHMMove2
- cmp r0, 0
- beq _080CF398
- ldr r0, _080CF388 @ =gUnknown_83FDF3C
- ldr r3, _080CF38C @ =0x000004cc
- adds r0, r3
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF390 @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r1, _080CF394 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0xC
- strh r1, [r0, 0x14]
- b _080CF528
- .align 2, 0
-_080CF388: .4byte gUnknown_83FDF3C
-_080CF38C: .4byte 0x000004cc
-_080CF390: .4byte gDisplayedStringBattle
-_080CF394: .4byte gTasks
-_080CF398:
- ldr r1, _080CF3D4 @ =gBattleTextBuff2
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- strb r4, [r1, 0x2]
- lsrs r0, r4, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- lsls r4, r6, 24
- lsrs r4, 24
- mov r0, r9
- adds r1, r4, 0
- bl RemoveMonPPBonus
- ldr r0, _080CF3D8 @ =gMoveToLearn
- ldrh r1, [r0]
- mov r0, r9
- adds r2, r4, 0
- bl SetMonMoveSlot
- ldr r0, _080CF3DC @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080CF526
- .align 2, 0
-_080CF3D4: .4byte gBattleTextBuff2
-_080CF3D8: .4byte gMoveToLearn
-_080CF3DC: .4byte gTasks
-_080CF3E0:
- ldr r0, _080CF408 @ =gUnknown_83FDF3C
- movs r1, 0xCF
- lsls r1, 2
- adds r0, r1
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF40C @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CF410 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080CF526
- .align 2, 0
-_080CF408: .4byte gUnknown_83FDF3C
-_080CF40C: .4byte gDisplayedStringBattle
-_080CF410: .4byte gTasks
-_080CF414:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF422
- b _080CF528
-_080CF422:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CF42E
- b _080CF528
-_080CF42E:
- ldr r0, _080CF450 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x1C]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF454 @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r0, _080CF458 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080CF526
- .align 2, 0
-_080CF450: .4byte gUnknown_83FDF3C
-_080CF454: .4byte gDisplayedStringBattle
-_080CF458: .4byte gTasks
-_080CF45C:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080CF528
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080CF528
- ldr r0, _080CF498 @ =gUnknown_83FDF3C
- movs r1, 0xD0
- lsls r1, 2
- adds r0, r1
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF49C @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r1, _080CF4A0 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0x14
- strh r1, [r0, 0x8]
- b _080CF528
- .align 2, 0
-_080CF498: .4byte gUnknown_83FDF3C
-_080CF49C: .4byte gDisplayedStringBattle
-_080CF4A0: .4byte gTasks
-_080CF4A4:
- ldr r0, _080CF4CC @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x20]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF4D0 @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r1, _080CF4D4 @ =gTasks
- mov r3, r8
- adds r0, r3, r7
- lsls r0, 3
- adds r0, r1
- movs r2, 0
- movs r1, 0xB
- strh r1, [r0, 0x16]
- strh r2, [r0, 0x18]
- movs r1, 0x3
- strh r1, [r0, 0x14]
- b _080CF528
- .align 2, 0
-_080CF4CC: .4byte gUnknown_83FDF3C
-_080CF4D0: .4byte gDisplayedStringBattle
-_080CF4D4: .4byte gTasks
-_080CF4D8:
- ldr r0, _080CF4F8 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x24]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r0, _080CF4FC @ =gDisplayedStringBattle
- movs r1, 0
- bl BattlePutTextOnWindow
- ldr r1, _080CF500 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
-_080CF4F2:
- movs r1, 0xF
- strh r1, [r0, 0x8]
- b _080CF528
- .align 2, 0
-_080CF4F8: .4byte gUnknown_83FDF3C
-_080CF4FC: .4byte gDisplayedStringBattle
-_080CF500: .4byte gTasks
-_080CF504:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080CF528
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080CF528
- ldr r0, _080CF538 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x5
-_080CF526:
- strh r0, [r1, 0x14]
-_080CF528:
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080CF538: .4byte gTasks
- thumb_func_end sub_80CE8DC
-
- thumb_func_start sub_80CF53C
-sub_80CF53C: @ 80CF53C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x20
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, _080CF5BC @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r4, r0, r5
- movs r0, 0x1C
- ldrsh r1, [r4, r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080CF5C0 @ =gPlayerParty
- adds r1, r0
- mov r8, r1
- bl IsNationalPokedexEnabled
- cmp r0, 0
- bne _080CF598
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x7
- bne _080CF598
- movs r3, 0xC
- ldrsh r0, [r4, r3]
- cmp r0, 0x97
- ble _080CF598
- movs r0, 0xF
- strh r0, [r4, 0x8]
- movs r2, 0x1
- strh r2, [r4, 0x1A]
- ldr r0, _080CF5C4 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r1, r0, r5
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CF598
- strh r2, [r1, 0x18]
- bl sub_80D04A8
-_080CF598:
- ldr r0, _080CF5BC @ =gTasks
- lsls r2, r6, 2
- adds r1, r2, r6
- lsls r1, 3
- adds r1, r0
- movs r3, 0x8
- ldrsh r1, [r1, r3]
- adds r5, r0, 0
- adds r7, r2, 0
- cmp r1, 0x14
- bls _080CF5B2
- bl _080D003A
-_080CF5B2:
- lsls r0, r1, 2
- ldr r1, _080CF5C8 @ =_080CF5CC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CF5BC: .4byte gTasks
-_080CF5C0: .4byte gPlayerParty
-_080CF5C4: .4byte gBattleCommunication
-_080CF5C8: .4byte _080CF5CC
- .align 2, 0
-_080CF5CC:
- .4byte _080CF620
- .4byte _080CF64C
- .4byte _080CF66C
- .4byte _080CF69C
- .4byte _080CF6D0
- .4byte _080CF73C
- .4byte _080CF778
- .4byte _080CF7AC
- .4byte _080CF7EC
- .4byte _080CF808
- .4byte _080CF838
- .4byte _080CF860
- .4byte _080CF89C
- .4byte _080CF924
- .4byte _080CF9D0
- .4byte _080CFA14
- .4byte _080CFA74
- .4byte _080CFA9C
- .4byte _080CFAD8
- .4byte _080CFB34
- .4byte _080CFB70
-_080CF620:
- ldr r4, _080CF640 @ =gStringVar4
- ldr r1, _080CF644 @ =gUnknown_83FE672
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CF648 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- b _080CFB1A
- .align 2, 0
-_080CF640: .4byte gStringVar4
-_080CF644: .4byte gUnknown_83FE672
-_080CF648: .4byte gTasks
-_080CF64C:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF65C
- bl _080D003A
-_080CF65C:
- ldr r0, _080CF668 @ =gTasks
- adds r4, r7, r6
- lsls r4, 3
- adds r4, r0
- b _080CFA88
- .align 2, 0
-_080CF668: .4byte gTasks
-_080CF66C:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _080CF67A
- bl _080D003A
-_080CF67A:
- movs r0, 0x84
- lsls r0, 1
- bl m4aSongNumStop
- ldr r0, _080CF694 @ =0x00000107
- bl PlaySE
- ldr r0, _080CF698 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- b _080CFB1A
- .align 2, 0
-_080CF694: .4byte 0x00000107
-_080CF698: .4byte gTasks
-_080CF69C:
- bl IsSEPlaying
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080CF6AC
- bl _080D003A
-_080CF6AC:
- movs r0, 0x84
- lsls r0, 1
- bl PlayBGM
- ldr r0, _080CF6CC @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- str r4, [sp]
- movs r0, 0x1C
- movs r1, 0x4
- b _080CFD56
- .align 2, 0
-_080CF6CC: .4byte gTasks
-_080CF6D0:
- ldr r0, _080CF724 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CF6E0
- bl _080D003A
-_080CF6E0:
- movs r0, 0x1
- bl InitMovingBackgroundTask
- ldr r2, _080CF728 @ =gSprites
- ldr r0, _080CF72C @ =gUnknown_2039A20
- ldr r0, [r0]
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x5]
- lsrs r0, 4
- adds r5, r0, 0
- adds r5, 0x10
- adds r0, r5, 0
- bl LaunchTask_PreEvoSparklesSet1
- ldr r1, _080CF730 @ =gBattleCommunication
- strb r0, [r1, 0x2]
- ldr r0, _080CF734 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- ldr r1, _080CF738 @ =0x00000603
- movs r0, 0xE
- bl SetGpuReg
- bl _080D003A
- .align 2, 0
-_080CF724: .4byte gPaletteFade
-_080CF728: .4byte gSprites
-_080CF72C: .4byte gUnknown_2039A20
-_080CF730: .4byte gBattleCommunication
-_080CF734: .4byte gTasks
-_080CF738: .4byte 0x00000603
-_080CF73C:
- ldr r4, _080CF770 @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CF752
- bl _080D003A
-_080CF752:
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r5
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- ldr r0, _080CF774 @ =gUnknown_2039A20
- ldr r1, [r0]
- movs r0, 0x1
- strb r0, [r1, 0x3]
- bl LaunchTask_PreEvoSparklesSet2
- strb r0, [r4, 0x2]
- bl _080D003A
- .align 2, 0
-_080CF770: .4byte gBattleCommunication
-_080CF774: .4byte gUnknown_2039A20
-_080CF778:
- ldr r4, _080CF7A4 @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CF78E
- bl _080D003A
-_080CF78E:
- ldr r0, _080CF7A8 @ =gUnknown_2039A20
- ldr r1, [r0]
- ldrb r0, [r1]
- ldrb r1, [r1, 0x1]
- bl LaunchTask_PrePostEvoMonSprites
- strb r0, [r4, 0x2]
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r5
- b _080CFB1A
- .align 2, 0
-_080CF7A4: .4byte gBattleCommunication
-_080CF7A8: .4byte gUnknown_2039A20
-_080CF7AC:
- ldr r2, _080CF7E4 @ =gUnknown_2039A20
- ldr r1, [r2]
- ldrb r0, [r1, 0x3]
- subs r0, 0x1
- strb r0, [r1, 0x3]
- lsls r0, 24
- cmp r0, 0
- beq _080CF7C0
- bl _080D003A
-_080CF7C0:
- ldr r1, [r2]
- movs r0, 0x3
- strb r0, [r1, 0x3]
- ldr r0, _080CF7E8 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080CF7DC
- bl _080D003A
-_080CF7DC:
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r5
- b _080CFB1A
- .align 2, 0
-_080CF7E4: .4byte gUnknown_2039A20
-_080CF7E8: .4byte gBattleCommunication
-_080CF7EC:
- bl LaunchTask_PostEvoSparklesSet1
- ldr r1, _080CF800 @ =gBattleCommunication
- strb r0, [r1, 0x2]
- ldr r0, _080CF804 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- b _080CFB1A
- .align 2, 0
-_080CF800: .4byte gBattleCommunication
-_080CF804: .4byte gTasks
-_080CF808:
- ldr r0, _080CF834 @ =gBattleCommunication
- mov r8, r0
- ldrb r0, [r0, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080CF820
- bl _080D003A
-_080CF820:
- adds r4, r7, r6
- lsls r4, 3
- adds r4, r5
- ldrh r0, [r4, 0xC]
- bl LaunchTask_PostEvoSparklesSet2AndFlash_Trade
- mov r1, r8
- strb r0, [r1, 0x2]
- b _080CFA90
- .align 2, 0
-_080CF834: .4byte gBattleCommunication
-_080CF838:
- ldr r0, _080CF85C @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080CF84E
- bl _080D003A
-_080CF84E:
- movs r0, 0x1B
- bl PlaySE
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r5
- b _080CFB1A
- .align 2, 0
-_080CF85C: .4byte gBattleCommunication
-_080CF860:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080CF86E
- bl _080D003A
-_080CF86E:
- ldr r0, _080CF890 @ =gTasks
- adds r4, r7, r6
- lsls r4, 3
- adds r4, r0
- ldrh r0, [r4, 0xC]
- movs r1, 0
- bl PlayCry1
- ldr r0, _080CF894 @ =gPlttBufferUnfaded + 0x40
- ldr r1, _080CF898 @ =gUnknown_2039A20
- ldr r1, [r1]
- adds r1, 0x4
- movs r2, 0x60
- bl memcpy
- b _080CFA90
- .align 2, 0
-_080CF890: .4byte gTasks
-_080CF894: .4byte gPlttBufferUnfaded + 0x40
-_080CF898: .4byte gUnknown_2039A20
-_080CF89C:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _080CF8A8
- b _080D003A
-_080CF8A8:
- ldr r4, _080CF914 @ =gStringVar4
- ldr r1, _080CF918 @ =gUnknown_83FE688
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CF91C @ =0x00000103
- bl PlayFanfare
- ldr r2, _080CF920 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r4, r1, r2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- adds r2, r1
- adds r2, 0xC
- mov r0, r8
- movs r1, 0xB
- bl SetMonData
- mov r0, r8
- bl CalculateMonStats
- ldrh r1, [r4, 0xA]
- ldrh r2, [r4, 0xC]
- mov r0, r8
- bl EvolutionRenameMon
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2
- bl GetSetPokedexFlag
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl GetSetPokedexFlag
- movs r0, 0xE
- bl IncrementGameStat
- b _080D003A
- .align 2, 0
-_080CF914: .4byte gStringVar4
-_080CF918: .4byte gUnknown_83FE688
-_080CF91C: .4byte 0x00000103
-_080CF920: .4byte gTasks
-_080CF924:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CF932
- b _080D003A
-_080CF932:
- bl IsFanfareTaskInactive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080CF940
- b _080D003A
-_080CF940:
- ldr r1, _080CF98C @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r4, r0, r1
- ldrb r1, [r4, 0x10]
- mov r0, r8
- bl MonTryLearningNewMove
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0
- beq _080CF9AC
- movs r3, 0x1A
- ldrsh r2, [r4, r3]
- cmp r2, 0
- bne _080CF9AC
- ldrh r1, [r4, 0xE]
- movs r0, 0x80
- orrs r0, r1
- strh r0, [r4, 0xE]
- strh r2, [r4, 0x10]
- strh r2, [r4, 0x14]
- mov r0, r8
- movs r1, 0x2
- add r2, sp, 0xC
- bl GetMonData
- ldr r0, _080CF990 @ =gBattleTextBuff1
- add r1, sp, 0xC
- bl StringCopy10
- ldr r0, _080CF994 @ =0x0000ffff
- cmp r5, r0
- bne _080CF998
- movs r0, 0x14
- strh r0, [r4, 0x8]
- b _080D003A
- .align 2, 0
-_080CF98C: .4byte gTasks
-_080CF990: .4byte gBattleTextBuff1
-_080CF994: .4byte 0x0000ffff
-_080CF998:
- ldr r0, _080CF9A8 @ =0x0000fffe
- cmp r5, r0
- bne _080CF9A0
- b _080D003A
-_080CF9A0:
- movs r0, 0x12
- strh r0, [r4, 0x8]
- b _080D003A
- .align 2, 0
-_080CF9A8: .4byte 0x0000fffe
-_080CF9AC:
- movs r0, 0x84
- lsls r0, 1
- bl PlayBGM
- ldr r1, _080CF9C8 @ =gUnknown_841E325
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CF9CC @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- b _080CFB1A
- .align 2, 0
-_080CF9C8: .4byte gUnknown_841E325
-_080CF9CC: .4byte gTasks
-_080CF9D0:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0
- beq _080CF9E0
- b _080D003A
-_080CF9E0:
- adds r0, r6, 0
- bl DestroyTask
- ldr r4, _080CFA08 @ =gUnknown_2039A20
- ldr r0, [r4]
- bl Free
- str r5, [r4]
- ldr r2, _080CFA0C @ =gTextFlags
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, _080CFA10 @ =gCB2_AfterEvolution
- ldr r0, [r0]
- bl SetMainCallback2
- b _080D003A
- .align 2, 0
-_080CFA08: .4byte gUnknown_2039A20
-_080CFA0C: .4byte gTextFlags
-_080CFA10: .4byte gCB2_AfterEvolution
-_080CFA14:
- ldr r0, _080CFA60 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _080CFA28
- b _080D003A
-_080CFA28:
- bl m4aMPlayAllStop
- ldr r2, _080CFA64 @ =gSprites
- ldr r0, _080CFA68 @ =gUnknown_2039A20
- ldr r0, [r0]
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x5]
- lsrs r1, 4
- adds r1, 0x10
- movs r0, 0x1
- lsls r0, r1
- ldr r1, _080CFA6C @ =0x0004001c
- orrs r0, r1
- ldr r1, _080CFA70 @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r5
- b _080CFB1A
- .align 2, 0
-_080CFA60: .4byte gBattleCommunication
-_080CFA64: .4byte gSprites
-_080CFA68: .4byte gUnknown_2039A20
-_080CFA6C: .4byte 0x0004001c
-_080CFA70: .4byte 0x00007fff
-_080CFA74:
- ldr r0, _080CFA98 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CFA82
- b _080D003A
-_080CFA82:
- adds r4, r7, r6
- lsls r4, 3
- adds r4, r5
-_080CFA88:
- ldrh r0, [r4, 0xA]
- movs r1, 0
- bl PlayCry1
-_080CFA90:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080D003A
- .align 2, 0
-_080CFA98: .4byte gPaletteFade
-_080CFA9C:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _080CFAA8
- b _080D003A
-_080CFAA8:
- ldr r4, _080CFACC @ =gStringVar4
- ldr r1, _080CFAD0 @ =gUnknown_83FE6D0
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080CFAD4 @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- movs r1, 0x1
- strh r1, [r0, 0x1A]
- b _080D0006
- .align 2, 0
-_080CFACC: .4byte gStringVar4
-_080CFAD0: .4byte gUnknown_83FE6D0
-_080CFAD4: .4byte gTasks
-_080CFAD8:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CFAE6
- b _080D003A
-_080CFAE6:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CFAF2
- b _080D003A
-_080CFAF2:
- bl BufferMoveToLearnIntoBattleTextBuff2
- ldr r0, _080CFB24 @ =0x00000101
- bl PlayFanfare
- ldr r0, _080CFB28 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0xC]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFB2C @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CFB30 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0x40
- strh r0, [r1, 0x10]
-_080CFB1A:
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _080D003A
- .align 2, 0
-_080CFB24: .4byte 0x00000101
-_080CFB28: .4byte gUnknown_83FDF3C
-_080CFB2C: .4byte gDisplayedStringBattle
-_080CFB30: .4byte gTasks
-_080CFB34:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CFB42
- b _080D003A
-_080CFB42:
- bl IsFanfareTaskInactive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080CFB50
- b _080D003A
-_080CFB50:
- ldr r0, _080CFB6C @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x10]
- subs r0, 0x1
- strh r0, [r1, 0x10]
- lsls r0, 16
- cmp r0, 0
- beq _080CFB66
- b _080D003A
-_080CFB66:
- movs r0, 0xD
- strh r0, [r1, 0x8]
- b _080D003A
- .align 2, 0
-_080CFB6C: .4byte gTasks
-_080CFB70:
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r5
- movs r1, 0x14
- ldrsh r0, [r0, r1]
- cmp r0, 0xB
- bls _080CFB80
- b _080D003A
-_080CFB80:
- lsls r0, 2
- ldr r1, _080CFB8C @ =_080CFB90
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CFB8C: .4byte _080CFB90
- .align 2, 0
-_080CFB90:
- .4byte _080CFBC0
- .4byte _080CFC0C
- .4byte _080CFC54
- .4byte _080CFC92
- .4byte _080CFCFC
- .4byte _080CFDAC
- .4byte _080CFE30
- .4byte _080CFF28
- .4byte _080CFF70
- .4byte _080CFFB8
- .4byte _080CFFEC
- .4byte _080D0018
-_080CFBC0:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CFBCE
- b _080D003A
-_080CFBCE:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CFBDA
- b _080D003A
-_080CFBDA:
- bl BufferMoveToLearnIntoBattleTextBuff2
- ldr r0, _080CFC00 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x10]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFC04 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CFC08 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080D0038
- .align 2, 0
-_080CFC00: .4byte gUnknown_83FDF3C
-_080CFC04: .4byte gDisplayedStringBattle
-_080CFC08: .4byte gTasks
-_080CFC0C:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CFC1A
- b _080D003A
-_080CFC1A:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CFC26
- b _080D003A
-_080CFC26:
- ldr r0, _080CFC48 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x14]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFC4C @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CFC50 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080D0038
- .align 2, 0
-_080CFC48: .4byte gUnknown_83FDF3C
-_080CFC4C: .4byte gDisplayedStringBattle
-_080CFC50: .4byte gTasks
-_080CFC54:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080CFC92
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080CFC92
- ldr r0, _080CFCE8 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x18]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFCEC @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CFCF0 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0x5
- strh r0, [r1, 0x16]
- movs r0, 0x9
- strh r0, [r1, 0x18]
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- strh r0, [r1, 0x14]
-_080CFC92:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CFCA0
- b _080D003A
-_080CFCA0:
- bl IsSEPlaying
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080CFCAE
- b _080D003A
-_080CFCAE:
- movs r0, 0
- movs r1, 0xA8
- movs r2, 0xE0
- bl LoadUserWindowBorderGfx
- ldr r0, _080CFCF4 @ =gUnknown_826D1CC
- movs r1, 0xA8
- str r1, [sp]
- movs r1, 0xE
- str r1, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r1, 0x3
- movs r2, 0
- movs r3, 0x2
- bl CreateYesNoMenu
- ldr r3, _080CFCF8 @ =gBattleCommunication
- strb r4, [r3, 0x1]
- ldr r0, _080CFCF0 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- movs r2, 0
- strh r0, [r1, 0x14]
- strb r2, [r3, 0x1]
- b _080D003A
- .align 2, 0
-_080CFCE8: .4byte gUnknown_83FDF3C
-_080CFCEC: .4byte gDisplayedStringBattle
-_080CFCF0: .4byte gTasks
-_080CFCF4: .4byte gUnknown_826D1CC
-_080CFCF8: .4byte gBattleCommunication
-_080CFCFC:
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r4, r0, 24
- cmp r4, 0
- beq _080CFD1C
- cmp r4, 0
- bgt _080CFD16
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- beq _080CFD70
- b _080D003A
-_080CFD16:
- cmp r4, 0x1
- beq _080CFD70
- b _080D003A
-_080CFD1C:
- ldr r0, _080CFD60 @ =gBattleCommunication
- strb r4, [r0, 0x1]
- ldr r0, _080CFD64 @ =gUnknown_83FDF3C
- movs r3, 0x92
- lsls r3, 3
- adds r0, r3
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFD68 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080CFD6C @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x16]
- strh r1, [r0, 0x14]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0x5
- beq _080CFD4E
- b _080D003A
-_080CFD4E:
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
-_080CFD56:
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- b _080D003A
- .align 2, 0
-_080CFD60: .4byte gBattleCommunication
-_080CFD64: .4byte gUnknown_83FDF3C
-_080CFD68: .4byte gDisplayedStringBattle
-_080CFD6C: .4byte gTasks
-_080CFD70:
- ldr r1, _080CFD9C @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x1]
- ldr r0, _080CFDA0 @ =gUnknown_83FDF3C
- movs r1, 0x92
- lsls r1, 3
- adds r0, r1
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFDA4 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080CFDA8 @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x18]
- strh r1, [r0, 0x14]
- b _080D003A
- .align 2, 0
-_080CFD9C: .4byte gBattleCommunication
-_080CFDA0: .4byte gUnknown_83FDF3C
-_080CFDA4: .4byte gDisplayedStringBattle
-_080CFDA8: .4byte gTasks
-_080CFDAC:
- ldr r0, _080CFE14 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CFDBA
- b _080D003A
-_080CFDBA:
- ldr r0, _080CFE18 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _080CFDC6
- bl DestroyWirelessStatusIndicatorSprite
-_080CFDC6:
- movs r0, 0x3
- bl GetBgTilemapBuffer
- bl Free
- movs r0, 0x1
- bl GetBgTilemapBuffer
- bl Free
- movs r0, 0
- bl GetBgTilemapBuffer
- bl Free
- bl FreeAllWindowBuffers
- ldr r0, _080CFE1C @ =gPlayerParty
- ldr r1, _080CFE20 @ =gTasks
- adds r5, r7, r6
- lsls r5, 3
- adds r5, r1
- ldrb r1, [r5, 0x1C]
- ldr r2, _080CFE24 @ =gPlayerPartyCount
- ldrb r2, [r2]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _080CFE28 @ =CB2_TradeEvolutionSceneLoadGraphics
- ldr r4, _080CFE2C @ =gMoveToLearn
- ldrh r4, [r4]
- str r4, [sp]
- bl ShowSelectMovePokemonSummaryScreen
- ldrh r0, [r5, 0x14]
- adds r0, 0x1
- strh r0, [r5, 0x14]
- b _080D003A
- .align 2, 0
-_080CFE14: .4byte gPaletteFade
-_080CFE18: .4byte gWirelessCommType
-_080CFE1C: .4byte gPlayerParty
-_080CFE20: .4byte gTasks
-_080CFE24: .4byte gPlayerPartyCount
-_080CFE28: .4byte CB2_TradeEvolutionSceneLoadGraphics
-_080CFE2C: .4byte gMoveToLearn
-_080CFE30:
- ldr r0, _080CFE64 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080CFE3E
- b _080D003A
-_080CFE3E:
- ldr r0, _080CFE68 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _080CFE6C @ =sub_80CE72C
- cmp r1, r0
- beq _080CFE4A
- b _080D003A
-_080CFE4A:
- bl sub_8138B2C
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x4
- bne _080CFE74
- ldr r0, _080CFE70 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0x9
- b _080D0038
- .align 2, 0
-_080CFE64: .4byte gPaletteFade
-_080CFE68: .4byte gMain
-_080CFE6C: .4byte sub_80CE72C
-_080CFE70: .4byte gTasks
-_080CFE74:
- adds r1, r5, 0
- adds r1, 0xD
- mov r0, r8
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl IsHMMove2
- cmp r0, 0
- beq _080CFEC0
- ldr r0, _080CFEB0 @ =gUnknown_83FDF3C
- ldr r3, _080CFEB4 @ =0x000004cc
- adds r0, r3
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFEB8 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080CFEBC @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- movs r1, 0xB
- strh r1, [r0, 0x14]
- b _080D003A
- .align 2, 0
-_080CFEB0: .4byte gUnknown_83FDF3C
-_080CFEB4: .4byte 0x000004cc
-_080CFEB8: .4byte gDisplayedStringBattle
-_080CFEBC: .4byte gTasks
-_080CFEC0:
- ldr r1, _080CFF14 @ =gBattleTextBuff2
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- strb r4, [r1, 0x2]
- lsrs r0, r4, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- lsls r4, r5, 24
- lsrs r4, 24
- mov r0, r8
- adds r1, r4, 0
- bl RemoveMonPPBonus
- ldr r0, _080CFF18 @ =gMoveToLearn
- ldrh r1, [r0]
- mov r0, r8
- adds r2, r4, 0
- bl SetMonMoveSlot
- ldr r0, _080CFF1C @ =gUnknown_83FDF3C
- movs r1, 0xCF
- lsls r1, 2
- adds r0, r1
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFF20 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CFF24 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080D0038
- .align 2, 0
-_080CFF14: .4byte gBattleTextBuff2
-_080CFF18: .4byte gMoveToLearn
-_080CFF1C: .4byte gUnknown_83FDF3C
-_080CFF20: .4byte gDisplayedStringBattle
-_080CFF24: .4byte gTasks
-_080CFF28:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- beq _080CFF36
- b _080D003A
-_080CFF36:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _080CFF42
- b _080D003A
-_080CFF42:
- ldr r0, _080CFF64 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x1C]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFF68 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r0, _080CFF6C @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- adds r0, 0x1
- b _080D0038
- .align 2, 0
-_080CFF64: .4byte gUnknown_83FDF3C
-_080CFF68: .4byte gDisplayedStringBattle
-_080CFF6C: .4byte gTasks
-_080CFF70:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080D003A
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080D003A
- ldr r0, _080CFFAC @ =gUnknown_83FDF3C
- movs r3, 0xD0
- lsls r3, 2
- adds r0, r3
- ldr r0, [r0]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFFB0 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080CFFB4 @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- movs r1, 0x12
- strh r1, [r0, 0x8]
- b _080D003A
- .align 2, 0
-_080CFFAC: .4byte gUnknown_83FDF3C
-_080CFFB0: .4byte gDisplayedStringBattle
-_080CFFB4: .4byte gTasks
-_080CFFB8:
- ldr r0, _080CFFE0 @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x20]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080CFFE4 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080CFFE8 @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- movs r2, 0
- movs r1, 0xA
- strh r1, [r0, 0x16]
- strh r2, [r0, 0x18]
- movs r1, 0x3
- strh r1, [r0, 0x14]
- b _080D003A
- .align 2, 0
-_080CFFE0: .4byte gUnknown_83FDF3C
-_080CFFE4: .4byte gDisplayedStringBattle
-_080CFFE8: .4byte gTasks
-_080CFFEC:
- ldr r0, _080D000C @ =gUnknown_83FDF3C
- ldr r0, [r0, 0x24]
- bl BattleStringExpandPlaceholdersToDisplayedString
- ldr r1, _080D0010 @ =gDisplayedStringBattle
- movs r0, 0
- movs r2, 0x1
- bl DrawTextOnTradeWindow
- ldr r1, _080D0014 @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
-_080D0006:
- movs r1, 0xD
- strh r1, [r0, 0x8]
- b _080D003A
- .align 2, 0
-_080D000C: .4byte gUnknown_83FDF3C
-_080D0010: .4byte gDisplayedStringBattle
-_080D0014: .4byte gTasks
-_080D0018:
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080D003A
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080D003A
- ldr r0, _080D0048 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0x5
-_080D0038:
- strh r0, [r1, 0x14]
-_080D003A:
- add sp, 0x20
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0048: .4byte gTasks
- thumb_func_end sub_80CF53C
-
- thumb_func_start nullsub_76
-nullsub_76: @ 80D004C
- bx lr
- thumb_func_end nullsub_76
-
- thumb_func_start sub_80D0050
-sub_80D0050: @ 80D0050
- push {lr}
- ldr r0, _080D00B8 @ =gBattle_BG0_X
- ldrh r1, [r0]
- movs r0, 0x10
- bl SetGpuReg
- ldr r0, _080D00BC @ =gBattle_BG0_Y
- ldrh r1, [r0]
- movs r0, 0x12
- bl SetGpuReg
- ldr r0, _080D00C0 @ =gBattle_BG1_X
- ldrh r1, [r0]
- movs r0, 0x14
- bl SetGpuReg
- ldr r0, _080D00C4 @ =gBattle_BG1_Y
- ldrh r1, [r0]
- movs r0, 0x16
- bl SetGpuReg
- ldr r0, _080D00C8 @ =gBattle_BG2_X
- ldrh r1, [r0]
- movs r0, 0x18
- bl SetGpuReg
- ldr r0, _080D00CC @ =gBattle_BG2_Y
- ldrh r1, [r0]
- movs r0, 0x1A
- bl SetGpuReg
- ldr r0, _080D00D0 @ =gBattle_BG3_X
- ldrh r1, [r0]
- movs r0, 0x1C
- bl SetGpuReg
- ldr r0, _080D00D4 @ =gBattle_BG3_Y
- ldrh r1, [r0]
- movs r0, 0x1E
- bl SetGpuReg
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- bl ScanlineEffect_InitHBlankDmaTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_080D00B8: .4byte gBattle_BG0_X
-_080D00BC: .4byte gBattle_BG0_Y
-_080D00C0: .4byte gBattle_BG1_X
-_080D00C4: .4byte gBattle_BG1_Y
-_080D00C8: .4byte gBattle_BG2_X
-_080D00CC: .4byte gBattle_BG2_Y
-_080D00D0: .4byte gBattle_BG3_X
-_080D00D4: .4byte gBattle_BG3_Y
- thumb_func_end sub_80D0050
-
- thumb_func_start sub_80D00D8
-sub_80D00D8: @ 80D00D8
- push {lr}
- ldr r0, _080D0140 @ =gBattle_BG0_X
- ldrh r1, [r0]
- movs r0, 0x10
- bl SetGpuReg
- ldr r0, _080D0144 @ =gBattle_BG0_Y
- ldrh r1, [r0]
- movs r0, 0x12
- bl SetGpuReg
- ldr r0, _080D0148 @ =gBattle_BG1_X
- ldrh r1, [r0]
- movs r0, 0x14
- bl SetGpuReg
- ldr r0, _080D014C @ =gBattle_BG1_Y
- ldrh r1, [r0]
- movs r0, 0x16
- bl SetGpuReg
- ldr r0, _080D0150 @ =gBattle_BG2_X
- ldrh r1, [r0]
- movs r0, 0x18
- bl SetGpuReg
- ldr r0, _080D0154 @ =gBattle_BG2_Y
- ldrh r1, [r0]
- movs r0, 0x1A
- bl SetGpuReg
- ldr r0, _080D0158 @ =gBattle_BG3_X
- ldrh r1, [r0]
- movs r0, 0x1C
- bl SetGpuReg
- ldr r0, _080D015C @ =gBattle_BG3_Y
- ldrh r1, [r0]
- movs r0, 0x1E
- bl SetGpuReg
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- bl ScanlineEffect_InitHBlankDmaTransfer
- pop {r0}
- bx r0
- .align 2, 0
-_080D0140: .4byte gBattle_BG0_X
-_080D0144: .4byte gBattle_BG0_Y
-_080D0148: .4byte gBattle_BG1_X
-_080D014C: .4byte gBattle_BG1_Y
-_080D0150: .4byte gBattle_BG2_X
-_080D0154: .4byte gBattle_BG2_Y
-_080D0158: .4byte gBattle_BG3_X
-_080D015C: .4byte gBattle_BG3_Y
- thumb_func_end sub_80D00D8
-
- thumb_func_start sub_80D0160
-sub_80D0160: @ 80D0160
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _080D01E0 @ =gTasks+0x8
- adds r4, r0, r1
- movs r0, 0xC
- ldrsh r5, [r4, r0]
- cmp r5, 0
- bne _080D020E
- ldrh r0, [r4, 0xA]
- adds r1, r0, 0x1
- strh r1, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _080D020E
- ldrh r1, [r4]
- adds r0, r1, 0x1
- strh r0, [r4]
- lsls r1, 16
- asrs r1, 16
- ldr r3, _080D01E4 @ =gUnknown_83F846D
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- lsls r2, r0, 2
- adds r0, r3, 0x3
- adds r0, r2, r0
- ldrb r0, [r0]
- cmp r1, r0
- ble _080D0200
- adds r0, r3, 0x1
- adds r0, r2, r0
- ldrb r0, [r0]
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- cmp r0, r1
- bne _080D01E8
- ldrh r0, [r4, 0x6]
- adds r0, 0x1
- strh r0, [r4, 0x6]
- movs r0, 0x6
- ldrsh r2, [r4, r0]
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r1, r3, 0x2
- adds r0, r1
- ldrb r0, [r0]
- cmp r2, r0
- bne _080D01D2
- strh r5, [r4, 0x6]
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
- strh r0, [r4, 0x4]
-_080D01D2:
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0]
- b _080D01FE
- .align 2, 0
-_080D01E0: .4byte gTasks+0x8
-_080D01E4: .4byte gUnknown_83F846D
-_080D01E8:
- ldr r0, _080D0214 @ =gUnknown_2039A24
- lsls r1, 5
- ldr r0, [r0]
- adds r0, r1
- movs r1, 0xA0
- movs r2, 0x20
- bl LoadPalette
- strh r5, [r4]
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
-_080D01FE:
- strh r0, [r4, 0x2]
-_080D0200:
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bne _080D020E
- adds r0, r6, 0
- bl DestroyTask
-_080D020E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0214: .4byte gUnknown_2039A24
- thumb_func_end sub_80D0160
-
- thumb_func_start sub_80D0218
-sub_80D0218: @ 80D0218
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080D023C @ =sub_80D025C
- movs r1, 0x7
- bl CreateTask
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r4, 0
- bne _080D0244
- ldr r1, _080D0240 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- strh r4, [r0, 0xC]
- b _080D0252
- .align 2, 0
-_080D023C: .4byte sub_80D025C
-_080D0240: .4byte gTasks
-_080D0244:
- ldr r0, _080D0258 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0xC]
-_080D0252:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0258: .4byte gTasks
- thumb_func_end sub_80D0218
-
- thumb_func_start sub_80D025C
-sub_80D025C: @ 80D025C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080D0288 @ =gBattle_BG1_X
- mov r8, r0
- ldr r1, _080D028C @ =gBattle_BG1_Y
- mov r9, r1
- ldr r1, _080D0290 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r2, 0xC
- ldrsh r0, [r0, r2]
- cmp r0, 0
- bne _080D029C
- ldr r7, _080D0294 @ =gBattle_BG2_X
- ldr r6, _080D0298 @ =gBattle_BG2_Y
- b _080D02A0
- .align 2, 0
-_080D0288: .4byte gBattle_BG1_X
-_080D028C: .4byte gBattle_BG1_Y
-_080D0290: .4byte gTasks
-_080D0294: .4byte gBattle_BG2_X
-_080D0298: .4byte gBattle_BG2_Y
-_080D029C:
- ldr r7, _080D0328 @ =gBattle_BG3_X
- ldr r6, _080D032C @ =gBattle_BG3_Y
-_080D02A0:
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r1
- ldrh r0, [r4, 0x8]
- adds r0, 0x5
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x8]
- adds r0, 0x80
- ands r0, r1
- strh r0, [r4, 0xA]
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- movs r1, 0x4
- bl Cos
- adds r0, 0x8
- mov r2, r8
- strh r0, [r2]
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- movs r1, 0x4
- bl Sin
- adds r0, 0x10
- mov r2, r9
- strh r0, [r2]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- movs r1, 0x4
- bl Cos
- adds r0, 0x8
- strh r0, [r7]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- movs r1, 0x4
- bl Sin
- adds r0, 0x10
- strh r0, [r6]
- ldr r0, _080D0330 @ =sub_80D0160
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080D031A
- adds r0, r5, 0
- bl DestroyTask
- mov r0, r8
- strh r4, [r0]
- mov r1, r9
- strh r4, [r1]
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r7]
- strh r4, [r6]
-_080D031A:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0328: .4byte gBattle_BG3_X
-_080D032C: .4byte gBattle_BG3_Y
-_080D0330: .4byte sub_80D0160
- thumb_func_end sub_80D025C
-
- thumb_func_start InitMovingBgValues
-InitMovingBgValues: @ 80D0334
- push {r4-r7,lr}
- adds r6, r0, 0
- movs r1, 0
- ldr r5, _080D036C @ =gUnknown_83F8400
- ldr r7, _080D0370 @ =gUnknown_83F847D
-_080D033E:
- lsls r0, r1, 4
- adds r4, r1, 0x1
- adds r2, r0, r7
- lsls r0, r1, 5
- adds r1, r0, r6
- movs r3, 0xF
-_080D034A:
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- strh r0, [r1]
- adds r2, 0x1
- adds r1, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _080D034A
- adds r1, r4, 0
- cmp r1, 0x31
- ble _080D033E
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080D036C: .4byte gUnknown_83F8400
-_080D0370: .4byte gUnknown_83F847D
- thumb_func_end InitMovingBgValues
-
- thumb_func_start InitMovingBackgroundTask
-InitMovingBackgroundTask: @ 80D0374
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, _080D0398 @ =gUnknown_2039A24
- movs r0, 0xC8
- lsls r0, 3
- bl AllocZeroed
- str r0, [r4]
- bl InitMovingBgValues
- cmp r5, 0
- bne _080D039C
- movs r6, 0x1
- movs r4, 0x2
- b _080D03A0
- .align 2, 0
-_080D0398: .4byte gUnknown_2039A24
-_080D039C:
- movs r6, 0x1
- movs r4, 0x3
-_080D03A0:
- ldr r0, _080D0420 @ =gUnknown_83F7D60
- movs r1, 0xA0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _080D0424 @ =gUnknown_83F6CB0
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl DecompressAndLoadBgGfxUsingHeap
- ldr r1, _080D0428 @ =gUnknown_83F73A8
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- ldr r1, _080D042C @ =gUnknown_83F788C
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- adds r0, r4, 0
- bl CopyBgTilemapBufferToVram
- cmp r5, 0
- bne _080D0438
- ldr r1, _080D0430 @ =0x00000442
- movs r0, 0x50
- bl SetGpuReg
- ldr r1, _080D0434 @ =0x00000808
- movs r0, 0x52
- bl SetGpuReg
- movs r1, 0xBA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- adds r0, r6, 0
- movs r1, 0x7
- movs r2, 0x2
- bl SetBgAttribute
- adds r0, r4, 0
- movs r1, 0x7
- movs r2, 0x2
- bl SetBgAttribute
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- b _080D0452
- .align 2, 0
-_080D0420: .4byte gUnknown_83F7D60
-_080D0424: .4byte gUnknown_83F6CB0
-_080D0428: .4byte gUnknown_83F73A8
-_080D042C: .4byte gUnknown_83F788C
-_080D0430: .4byte 0x00000442
-_080D0434: .4byte 0x00000808
-_080D0438:
- ldr r1, _080D0468 @ =0x00000842
- movs r0, 0x50
- bl SetGpuReg
- ldr r1, _080D046C @ =0x00000808
- movs r0, 0x52
- bl SetGpuReg
- movs r1, 0xDA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
-_080D0452:
- ldr r0, _080D0470 @ =sub_80D0160
- movs r1, 0x5
- bl CreateTask
- adds r0, r5, 0
- bl sub_80D0218
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080D0468: .4byte 0x00000842
-_080D046C: .4byte 0x00000808
-_080D0470: .4byte sub_80D0160
- thumb_func_end InitMovingBackgroundTask
-
- thumb_func_start sub_80D0474
-sub_80D0474: @ 80D0474
- push {lr}
- ldr r0, _080D04A0 @ =sub_80D0160
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _080D0492
- ldr r0, _080D04A4 @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x14]
-_080D0492:
- movs r0, 0
- movs r1, 0xA0
- movs r2, 0x20
- bl FillPalette
- pop {r0}
- bx r0
- .align 2, 0
-_080D04A0: .4byte sub_80D0160
-_080D04A4: .4byte gTasks
- thumb_func_end sub_80D0474
-
- thumb_func_start sub_80D04A8
-sub_80D04A8: @ 80D04A8
- push {lr}
- ldr r0, _080D04E0 @ =sub_80D0160
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _080D04BC
- bl DestroyTask
-_080D04BC:
- ldr r0, _080D04E4 @ =sub_80D025C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _080D04CE
- bl DestroyTask
-_080D04CE:
- movs r0, 0
- movs r1, 0xA0
- movs r2, 0x20
- bl FillPalette
- bl sub_80D04E8
- pop {r0}
- bx r0
- .align 2, 0
-_080D04E0: .4byte sub_80D0160
-_080D04E4: .4byte sub_80D025C
- thumb_func_end sub_80D04A8
-
- thumb_func_start sub_80D04E8
-sub_80D04E8: @ 80D04E8
- push {lr}
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- ldr r0, _080D0544 @ =gBattle_BG1_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, _080D0548 @ =gBattle_BG1_Y
- strh r1, [r0]
- ldr r0, _080D054C @ =gBattle_BG2_X
- strh r1, [r0]
- movs r0, 0x1
- movs r1, 0x5
- bl sub_8011C44
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x1
- movs r1, 0x7
- bl SetBgAttribute
- movs r0, 0x2
- movs r1, 0x5
- bl sub_8011C44
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x2
- movs r1, 0x7
- bl SetBgAttribute
- movs r1, 0xCA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r0, _080D0550 @ =gUnknown_2039A24
- ldr r0, [r0]
- bl Free
- pop {r0}
- bx r0
- .align 2, 0
-_080D0544: .4byte gBattle_BG1_X
-_080D0548: .4byte gBattle_BG1_Y
-_080D054C: .4byte gBattle_BG2_X
-_080D0550: .4byte gUnknown_2039A24
- thumb_func_end sub_80D04E8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/fldeff_flash.s b/asm/fldeff_flash.s
index 63067bb03..51e55de63 100644
--- a/asm/fldeff_flash.s
+++ b/asm/fldeff_flash.s
@@ -421,7 +421,7 @@ sub_80C9E4C: @ 80C9E4C
movs r1, 0xE0
movs r2, 0x20
bl LoadPalette
- ldr r0, _080C9EDC @ =gUnknown_83F5854
+ ldr r0, _080C9EDC @ =gUnknown_83F5844 + 0x10
movs r1, 0xE0
movs r2, 0x10
bl LoadPalette
@@ -434,7 +434,7 @@ sub_80C9E4C: @ 80C9E4C
movs r0, 0x54
movs r1, 0
bl SetGpuReg
- ldr r1, _080C9EE4 @ =0x00001f0c
+ ldr r1, _080C9EE4 @ =0x00001f0c =BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(31)
movs r0, 0x8
bl SetGpuReg
movs r1, 0x8A
@@ -461,7 +461,7 @@ _080C9ECC: .4byte 0x0600c000
_080C9ED0: .4byte gUnknown_83F5864
_080C9ED4: .4byte 0x0600f800
_080C9ED8: .4byte gUnknown_83F5804
-_080C9EDC: .4byte gUnknown_83F5854
+_080C9EDC: .4byte gUnknown_83F5844 + 0x10
_080C9EE0: .4byte 0x00003e41
_080C9EE4: .4byte 0x00001f0c
_080C9EE8: .4byte gTasks
@@ -527,7 +527,7 @@ sub_80C9F38: @ 80C9F38
adds r0, r1, 0x1
strh r0, [r4, 0xC]
lsls r1, 1
- ldr r0, _080C9F7C @ =gUnknown_83F5854
+ ldr r0, _080C9F7C @ =gUnknown_83F5844 + 0x10
adds r0, r1, r0
movs r2, 0x10
subs r2, r1
@@ -539,7 +539,7 @@ sub_80C9F38: @ 80C9F38
.align 2, 0
_080C9F74: .4byte 0x00001010
_080C9F78: .4byte gTasks
-_080C9F7C: .4byte gUnknown_83F5854
+_080C9F7C: .4byte gUnknown_83F5844 + 0x10
_080C9F80:
ldr r0, _080C9F98 @ =gUnknown_83F5804
movs r1, 0
diff --git a/asm/party_menu.s b/asm/party_menu.s
index dfe4e02c0..3cb62c712 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -12790,7 +12790,7 @@ sub_8124EFC: @ 8124EFC
muls r5, r0
ldr r0, _08124F8C @ =gPlayerParty
adds r5, r0
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -14661,7 +14661,7 @@ _08125E80: .4byte sub_8125E84
sub_8125E84: @ 8125E84
push {r4,r5,lr}
sub sp, 0xC
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
lsls r0, 24
lsrs r2, r0, 24
ldr r4, _08125ED0 @ =gUnknown_203B0A0
@@ -14735,7 +14735,7 @@ sub_8125F14: @ 8125F14
ands r0, r1
cmp r0, 0
bne _08125F46
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
lsls r0, 24
lsrs r0, 24
cmp r0, 0x4
@@ -14783,7 +14783,7 @@ sub_8125F5C: @ 8125F5C
muls r6, r0
ldr r0, _08125FE8 @ =gPlayerParty
adds r6, r0
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
@@ -14848,7 +14848,7 @@ sub_8125FFC: @ 8125FFC
muls r5, r0
ldr r0, _08126060 @ =gPlayerParty
adds r5, r0
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
@@ -14908,14 +14908,14 @@ sub_812607C: @ 812607C
muls r4, r0
ldr r0, _081260D4 @ =gPlayerParty
adds r4, r0
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
adds r0, r4, 0
bl RemoveMonPPBonus
ldrh r5, [r5, 0xE]
- bl sub_8138B2C
+ bl GetMoveSlotToReplace
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index 0752b5797..d1d6ed06f 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -8406,14 +8406,14 @@ sub_8138B20: @ 8138B20
_08138B28: .4byte gUnknown_203B16C
thumb_func_end sub_8138B20
- thumb_func_start sub_8138B2C
-sub_8138B2C: @ 8138B2C
+ thumb_func_start GetMoveSlotToReplace
+GetMoveSlotToReplace: @ 8138B2C
ldr r0, _08138B34 @ =gUnknown_203B16E
ldrb r0, [r0]
bx lr
.align 2, 0
_08138B34: .4byte gUnknown_203B16E
- thumb_func_end sub_8138B2C
+ thumb_func_end GetMoveSlotToReplace
thumb_func_start sub_8138B38
sub_8138B38: @ 8138B38
diff --git a/baserom.ips b/baserom.ips
index 21e4c79f1..bde26c658 100644
--- a/baserom.ips
+++ b/baserom.ips
Binary files differ
diff --git a/common_syms/evolution_scene.txt b/common_syms/evolution_scene.txt
new file mode 100644
index 000000000..137cd3e05
--- /dev/null
+++ b/common_syms/evolution_scene.txt
@@ -0,0 +1 @@
+gCB2_AfterEvolution
diff --git a/data/battle_message.s b/data/battle_message.s
index e6ec14116..4f7576103 100644
--- a/data/battle_message.s
+++ b/data/battle_message.s
@@ -1797,7 +1797,7 @@ gUnknown_83FDDEB:: @ 83FDDEB
.string "$"
.align 2
-gUnknown_83FDF3C:: @ 83FDF3C
+gBattleStringsTable:: @ 83FDF3C
.4byte gUnknown_83FB219
.4byte gUnknown_83FB265
.4byte gUnknown_83FB28E
@@ -2448,21 +2448,21 @@ gTrappingMoves:: @ 83FE664
.2byte MOVE_SAND_TOMB
.2byte 0xFFFF
-gUnknown_83FE672:: @ 83FE672
+gText_PkmnIsEvolving:: @ 83FE672
.string "What?\n"
.string "{STR_VAR_1} is evolving!$"
-gUnknown_83FE688:: @ 83FE688
+gText_CongratsPkmnEvolved:: @ 83FE688
.string "Congratulations! Your {STR_VAR_1}\n"
.string "evolved into {STR_VAR_2}!{WAIT_SE}\p"
.string "$"
-gUnknown_83FE6B5:: @ 83FE6B5
+gText_PkmnStoppedEvolving:: @ 83FE6B5
.string "Huh? {STR_VAR_1}\n"
.string "stopped evolving!\p"
.string "$"
-gUnknown_83FE6D0:: @ 83FE6D0
+gText_EllipsisQuestionMark:: @ 83FE6D0
.string "……?\p"
.string "$"
diff --git a/data/evolution_scene.s b/data/evolution_scene.s
deleted file mode 100644
index 0bba4c18c..000000000
--- a/data/evolution_scene.s
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "constants/species.h"
-#include "constants/items.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-
-gUnknown_83F6C90:: @ 83F6C90
- .incbin "baserom.gba", 0x3F6C90, 0x20
-
-gUnknown_83F6CB0:: @ 83F6CB0
- .incbin "baserom.gba", 0x3F6CB0, 0x6F8
-
-gUnknown_83F73A8:: @ 83F73A8
- .incbin "baserom.gba", 0x3F73A8, 0x4E4
-
-gUnknown_83F788C:: @ 83F788C
- .incbin "baserom.gba", 0x3F788C, 0x4D4
-
-gUnknown_83F7D60:: @ 83F7D60
- .incbin "baserom.gba", 0x3F7D60, 0x6A0
-
-gUnknown_83F8400:: @ 83F8400
- .incbin "baserom.gba", 0x3F8400, 0x40
-
-gUnknown_83F8440:: @ 83F8440
- .incbin "baserom.gba", 0x3F8440, 0x2D
-
-gUnknown_83F846D:: @ 83F846D
- .incbin "baserom.gba", 0x3F846D, 0x10
-
-gUnknown_83F847D:: @ 83F847D
- .incbin "baserom.gba", 0x3F847D, 0x323
diff --git a/data/field_ground_effect.s b/data/field_ground_effect.s
index 7979c7522..b1f34c8d7 100644
--- a/data/field_ground_effect.s
+++ b/data/field_ground_effect.s
@@ -31,4 +31,4 @@ gUnknown_83A70AC:: @ 83A70AC
.incbin "baserom.gba", 0x3A70AC, 0x10
gUnknown_83A70BC:: @ 83A70BC
- .incbin "baserom.gba", 0x3A70BC, 0xE0
+ .incbin "baserom.gba", 0x3A70BC, 0x50
diff --git a/data/field_map_obj.s b/data/field_map_obj.s
index e4fe9ceca..19f0fac9f 100644
--- a/data/field_map_obj.s
+++ b/data/field_map_obj.s
@@ -3,19 +3,24 @@
.section .rodata
.align 2
gUnknown_835B934:: @ 835B934
- .incbin "baserom.gba", 0x35B934, 0x10
+ .byte 0x01, 0x01, 0x06, 0x07, 0x08, 0x09, 0x06, 0x07, 0x08, 0x09, 0x0b, 0x0b, 0x00, 0x00, 0x00, 0x00
gUnknown_835B944:: @ 835B944
- .incbin "baserom.gba", 0x35B944, 0x18
+ spr_template 0, 65535, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, ObjectCB_CameraObject
gUnknown_835B95C:: @ 835B95C
- .incbin "baserom.gba", 0x35B95C, 0xC
+ .4byte CameraObject_0
+ .4byte CameraObject_1
+ .4byte CameraObject_2
gUnknown_835B968:: @ 835B968
.incbin "graphics/map_objects/0.gbapal"
gUnknown_835B988::
- .incbin "baserom.gba", 0x35B988, 0x1E0
+ .incbin "graphics/map_objects/unk_835B988.gbapal"
+
+gUnknown_835B9A0::
+ .space 0x1C0
gUnknown_835BB68:: @ 835BB68
.incbin "graphics/map_objects/000.4bpp"
diff --git a/data/fldeff_flash.s b/data/fldeff_flash.s
index 113cf42d1..ddffff5c1 100644
--- a/data/fldeff_flash.s
+++ b/data/fldeff_flash.s
@@ -6,22 +6,69 @@
.align 2
gUnknown_83F5738:: @ 83F5738
- .incbin "baserom.gba", 0x3F5738, 0xCC
+ .byte 1, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 2, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 3, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 5, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 6, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 7, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 8, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 9, 4, 1, 0
+ .4byte sub_80C9FD4
+ .4byte sub_80CA160
+ .byte 4, 1, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 2, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 3, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 5, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 6, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 7, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 8, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 4, 9, 0, 1
+ .4byte sub_80C9E1C
+ .4byte sub_80CA160
+ .byte 0, 0, 0, 0
+ .4byte NULL
+ .4byte NULL
gUnknown_83F5804:: @ 83F5804
- .incbin "baserom.gba", 0x3F5804, 0x20
+ .incbin "graphics/field_effects/flash_white.gbapal"
gUnknown_83F5824:: @ 83F5824
- .incbin "baserom.gba", 0x3F5824, 0x20
+ .incbin "graphics/field_effects/flash_black.gbapal"
gUnknown_83F5844:: @ 83F5844
- .incbin "baserom.gba", 0x3F5844, 0x10
-
-gUnknown_83F5854:: @ 83F5854
- .incbin "baserom.gba", 0x3F5854, 0x10
+ .incbin "graphics/field_effects/flash_gradient.gbapal"
gUnknown_83F5864:: @ 83F5864
- .incbin "baserom.gba", 0x3F5864, 0x1E0
+ .incbin "graphics/field_effects/flash_effect_map.bin.lz"
gUnknown_83F5A44:: @ 83F5A44
- .incbin "baserom.gba", 0x3F5A44, 0xB4
+ .incbin "graphics/field_effects/flash_effect_tiles.4bpp.lz"
diff --git a/data/map_obj_80688E4.s b/data/map_obj_80688E4.s
index 9010be906..884bf379f 100644
--- a/data/map_obj_80688E4.s
+++ b/data/map_obj_80688E4.s
@@ -1,25 +1,90 @@
.section .rodata
.align 2
+
+gUnknown_83A710C::
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+ .4byte little_step
+
+gUnknown_83A714C::
+ .4byte double_little_steps
+ .4byte double_little_steps
+ .4byte double_little_steps
+ .4byte double_little_steps
+ .4byte double_little_steps
+ .4byte double_little_steps
+ .4byte double_little_steps
+ .4byte double_little_steps
+
+gUnknown_83A716C::
+ .4byte double_little_steps
+ .4byte triple_little_steps
+ .4byte triple_little_steps
+ .4byte double_little_steps
+ .4byte triple_little_steps
+ .4byte triple_little_steps
+
+gUnknown_83A7184::
+ .4byte quad_little_steps
+ .4byte quad_little_steps
+ .4byte quad_little_steps
+ .4byte quad_little_steps
+
+gUnknown_83A7194::
+ .4byte oct_little_steps
+ .4byte oct_little_steps
+
gUnknown_83A719C:: @ 83A719C
- .incbin "baserom.gba", 0x3A719C, 0x14
+ .4byte gUnknown_83A710C
+ .4byte gUnknown_83A714C
+ .4byte gUnknown_83A716C
+ .4byte gUnknown_83A7184
+ .4byte gUnknown_83A7194
gUnknown_83A71B0:: @ 83A71B0
- .incbin "baserom.gba", 0x3A71B0, 0x3C
+ .2byte 0x0010, 0x0008, 0x0006, 0x0004, 0x0002
+
+gUnknown_83A71BA::
+ .byte 0xfc, 0xfa, 0xf8, 0xf6, 0xf5, 0xf4, 0xf4, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xfc, 0x00, 0x00
+
+gUnknown_83A71CA::
+ .byte 0x00, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, 0x00, 0x00
+gUnknown_83A71DA::
+ .byte 0xfe, 0xfc, 0xfa, 0xf8, 0xf7, 0xf6, 0xf6, 0xf6, 0xf7, 0xf8, 0xfa, 0xfb, 0xfd, 0xfe, 0x00, 0x00
+
+ .align 2
gUnknown_83A71EC:: @ 83A71EC
- .incbin "baserom.gba", 0x3A71EC, 0xC
+ .4byte gUnknown_83A71BA
+ .4byte gUnknown_83A71CA
+ .4byte gUnknown_83A71DA
+ .align 1
gUnknown_83A71F8:: @ 83A71F8
- .incbin "baserom.gba", 0x3A71F8, 0x6
+ .2byte 0x10, 0x10, 0x20
gUnknown_83A71FE:: @ 83A71FE
- .incbin "baserom.gba", 0x3A71FE, 0x4
+ .byte 0, 0, 1
+ .align 1
gUnknown_83A7202:: @ 83A7202
- .incbin "baserom.gba", 0x3A7202, 0x6
+ .2byte 0x20, 0x20, 0x40
gUnknown_83A7208:: @ 83A7208
- .incbin "baserom.gba", 0x3A7208, 0x4
+ .byte 1, 1, 2
.align 2
gUnknown_83A720C:: @ 83A720C
diff --git a/data/smokescreen.s b/data/smokescreen.s
index 17d611d3c..19dceec00 100644
--- a/data/smokescreen.s
+++ b/data/smokescreen.s
@@ -1,17 +1,55 @@
+ .include "asm/macros.inc"
+ .include "constants/constants.inc"
.section .rodata
- .balign 4
+ .align 2
gUnknown_825098C:: @ 825098C
- .incbin "baserom.gba", 0x25098C, 0x8
+ obj_tiles gFile_graphics_battle_anims_sprites_smokescreen_impact_sheet, 0x0180, 55019
gUnknown_8250994:: @ 8250994
- .incbin "baserom.gba", 0x250994, 0x60
+ obj_pal gFile_graphics_battle_anims_sprites_smokescreen_impact_palette, 55019
+
+gOamData_835099C::
+ .4byte 0x40000000, 0x00000400
+
+gAnimCmd_82509A4::
+ obj_image_anim_frame 0, 4
+ obj_image_anim_frame 4, 4
+ obj_image_anim_frame 8, 4
+ obj_image_anim_end
+
+gAnimCmd_82509B4::
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP
+ obj_image_anim_end
+
+gAnimCmd_82509C4::
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+
+gAnimCmd_82509D4::
+ obj_image_anim_frame 0, 4, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 4, 4, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_frame 8, 4, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP
+ obj_image_anim_end
+
+gSpriteAnimTable_82509E4::
+ .4byte gAnimCmd_82509A4
+ .4byte gAnimCmd_82509B4
+ .4byte gAnimCmd_82509C4
+ .4byte gAnimCmd_82509D4
gUnknown_82509F4:: @ 82509F4
- .incbin "baserom.gba", 0x2509F4, 0x18
+ spr_template 55019, 55019, gOamData_835099C, gSpriteAnimTable_82509E4, NULL, gDummySpriteAffineAnimTable, sub_804A904
gSpriteSheet_EnemyShadow:: @ 8250A0C
- .incbin "baserom.gba", 0x250A0C, 0x10
+ obj_tiles gFile_graphics_battle_interface_enemy_mon_shadow_sheet, 0x0080, 55129
+
+gOamData_8250A14::
+ .4byte 0x40004000, 0x00000c00
gSpriteTemplate_EnemyShadow:: @ 8250A1C
- .incbin "baserom.gba", 0x250A1C, 0x18
+ spr_template 55129, 55039, gOamData_8250A14, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_SetInvisible
diff --git a/data/strings.s b/data/strings.s
index 101946475..f39060846 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -4517,7 +4517,7 @@ gUnknown_841E2F5:: @ 841E2F5
gUnknown_841E322:: @ 841E322
.string "{ID}$"
-gUnknown_841E325:: @ 841E325
+gText_CommunicationStandby5:: @ 841E325
.string "Communication standby…$"
gDaycareText_GetAlongVeryWell:: @ 841E33C
diff --git a/graphics/evolution_scene/bg.bin b/graphics/evolution_scene/bg.bin
new file mode 100644
index 000000000..583ebac2b
--- /dev/null
+++ b/graphics/evolution_scene/bg.bin
Binary files differ
diff --git a/graphics/evolution_scene/bg.png b/graphics/evolution_scene/bg.png
new file mode 100644
index 000000000..c9e84c58e
--- /dev/null
+++ b/graphics/evolution_scene/bg.png
Binary files differ
diff --git a/graphics/evolution_scene/bg2.bin b/graphics/evolution_scene/bg2.bin
new file mode 100644
index 000000000..7afab112a
--- /dev/null
+++ b/graphics/evolution_scene/bg2.bin
Binary files differ
diff --git a/graphics/evolution_scene/gray_transition_intro.pal b/graphics/evolution_scene/gray_transition_intro.pal
new file mode 100644
index 000000000..4b0812f09
--- /dev/null
+++ b/graphics/evolution_scene/gray_transition_intro.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/evolution_scene/transition.pal b/graphics/evolution_scene/transition.pal
new file mode 100644
index 000000000..b0f4d3815
--- /dev/null
+++ b/graphics/evolution_scene/transition.pal
@@ -0,0 +1,35 @@
+JASC-PAL
+0100
+32
+0 0 0
+16 16 16
+24 32 32
+41 49 49
+49 65 74
+65 82 90
+74 98 115
+90 115 131
+106 131 148
+115 148 172
+131 164 189
+139 180 213
+156 197 230
+172 213 255
+0 0 0
+0 0 0
+0 0 0
+65 90 106
+74 98 115
+82 106 131
+90 115 139
+98 131 156
+106 139 164
+115 148 180
+123 156 189
+131 172 205
+139 180 213
+148 189 230
+156 197 238
+172 213 255
+0 0 0
+0 0 0
diff --git a/graphics/evolution_scene/unknown_5B4114.pal b/graphics/evolution_scene/unknown_5B4114.pal
new file mode 100644
index 000000000..2cd4981fd
--- /dev/null
+++ b/graphics/evolution_scene/unknown_5B4114.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+90 90 90
+98 106 106
+115 123 123
+131 131 131
+148 148 148
+156 164 164
+172 172 172
+189 189 189
+197 205 205
+213 213 213
+230 230 230
+246 246 246
+255 255 255
+0 0 0
+0 0 0
diff --git a/graphics/evolution_scene/unref_83F7D80.bin b/graphics/evolution_scene/unref_83F7D80.bin
new file mode 100644
index 000000000..b2b300184
--- /dev/null
+++ b/graphics/evolution_scene/unref_83F7D80.bin
Binary files differ
diff --git a/graphics/field_effects/flash_black.pal b/graphics/field_effects/flash_black.pal
new file mode 100644
index 000000000..4b0812f09
--- /dev/null
+++ b/graphics/field_effects/flash_black.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/field_effects/flash_effect_map.bin b/graphics/field_effects/flash_effect_map.bin
new file mode 100644
index 000000000..4293bfd1c
--- /dev/null
+++ b/graphics/field_effects/flash_effect_map.bin
Binary files differ
diff --git a/graphics/field_effects/flash_effect_tiles.png b/graphics/field_effects/flash_effect_tiles.png
new file mode 100644
index 000000000..4079a5a84
--- /dev/null
+++ b/graphics/field_effects/flash_effect_tiles.png
Binary files differ
diff --git a/graphics/field_effects/flash_gradient.pal b/graphics/field_effects/flash_gradient.pal
new file mode 100644
index 000000000..ec7a2b50e
--- /dev/null
+++ b/graphics/field_effects/flash_gradient.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+148 197 172
+16 16 16
+32 32 32
+49 49 49
+65 65 65
+82 82 82
+98 98 98
+115 115 115
+131 131 131
+148 148 148
+164 164 164
+180 180 180
+197 197 197
+213 213 213
+230 230 230
+255 255 255
diff --git a/graphics/field_effects/flash_white.pal b/graphics/field_effects/flash_white.pal
new file mode 100644
index 000000000..98a1fb3c8
--- /dev/null
+++ b/graphics/field_effects/flash_white.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
+255 255 255
diff --git a/graphics/map_objects/unk_835B988.pal b/graphics/map_objects/unk_835B988.pal
new file mode 100644
index 000000000..27436be92
--- /dev/null
+++ b/graphics/map_objects/unk_835B988.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+115 197 164
+172 123 65
+255 197 148
+222 148 115
+123 65 65
+65 65 213
+57 57 123
+115 164 197
+106 41 41
+238 238 255
+180 180 213
+255 106 74
+197 57 57
+255 222 90
+189 156 57
+0 0 0
diff --git a/include/battle_bg.h b/include/battle_bg.h
index 29571b410..61c106b64 100644
--- a/include/battle_bg.h
+++ b/include/battle_bg.h
@@ -5,7 +5,7 @@
extern const struct BgTemplate gBattleBgTemplates[];
-void sub_800F34C(void);
+void InitBattleBgsVideo(void);
void DrawBattleEntryBackground(void);
void sub_800F6FC(u8 taskId);
void LoadBattleMenuWindowGfx(void);
diff --git a/include/battle_main.h b/include/battle_main.h
index 613171da9..fe585f0e6 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -69,7 +69,7 @@ void VBlankCB_Battle(void);
void nullsub_9(struct Sprite *sprite);
void sub_801182C(struct Sprite *sprite);
void sub_8011A1C(void);
-u32 sub_8011C44(u8 arrayId, u8 caseId);
+u32 GetBattleBgAttribute(u8 arrayId, u8 caseId);
void SpriteCB_WildMon(struct Sprite *sprite);
void SpriteCallbackDummy2(struct Sprite *sprite);
void SpriteCB_FaintOpponentMon(struct Sprite *sprite);
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index 6942fee83..a2ad90776 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -83,4 +83,8 @@
// Shiny odds
#define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536
+// Learning moves
+#define MON_ALREADY_KNOWS_MOVE 0xFFFE
+#define MON_HAS_MAX_MOVES 0xFFFF
+
#endif // GUARD_CONSTANTS_POKEMON_H
diff --git a/include/evolution_scene.h b/include/evolution_scene.h
index 75b64dadc..3f504a1f1 100644
--- a/include/evolution_scene.h
+++ b/include/evolution_scene.h
@@ -3,11 +3,11 @@
#include "global.h"
-void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyID);
-void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyID);
-void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID);
-
extern void (*gCB2_AfterEvolution)(void);
-void sub_80D0474(void);
+
+void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyId);
+void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8, u8 partyId);
+void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteId, u8 partyId);
+void IsMovingBackgroundTaskRunning(void);
#endif // GUARD_EVOLUTION_SCENE_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 3d0faca36..c5ad89f41 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -14,7 +14,7 @@
#define MON_DATA_OT_NAME 7
#define MON_DATA_MARKINGS 8
#define MON_DATA_CHECKSUM 9
-#define MON_DATA_10 10
+#define MON_DATA_ENCRYPT_SEPARATOR 10
#define MON_DATA_SPECIES 11
#define MON_DATA_HELD_ITEM 12
#define MON_DATA_MOVE1 13
diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h
index b800e3d30..2655405e5 100644
--- a/include/pokemon_summary_screen.h
+++ b/include/pokemon_summary_screen.h
@@ -10,7 +10,7 @@ extern const u8 *const gNatureNamePointers[];
void ShowSelectMovePokemonSummaryScreen(struct Pokemon *, u8, u8, MainCallback, u16);
void ShowPokemonSummaryScreenSet40EF(u8 mode, struct BoxPokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void));
-u8 sub_8138B2C(void);
+u8 GetMoveSlotToReplace(void);
void SummaryScreen_SetUnknownTaskId(u8 a0);
void SummaryScreen_DestroyUnknownTask(void);
diff --git a/include/sprite.h b/include/sprite.h
index 85722311f..7432306a4 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -253,6 +253,7 @@ extern s16 gSpriteCoordOffsetY;
extern const struct SpriteTemplate gDummySpriteTemplate;
extern struct Sprite gSprites[];
extern struct OamMatrix gOamMatrices[];
+extern bool8 gAffineAnimsDisabled;
void ResetSpriteData(void);
void AnimateSprites(void);
diff --git a/include/strings.h b/include/strings.h
index 377b6ea39..e71256907 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -688,7 +688,7 @@ extern const u8 gText_XWillBeSentToY[];
extern const u8 gText_ByeByeVar1[];
extern const u8 gText_XSentOverY[];
extern const u8 gText_TakeGoodCareOfX[];
-extern const u8 gUnknown_841E325[];
+extern const u8 gText_CommunicationStandby5[];
extern const u8 gTradeText_Cancel[];
extern const u8 gTradeText_ChooseAPokemon[];
extern const u8 gTradeText_Summary[];
@@ -763,4 +763,10 @@ extern const u8 gText_DecimalPoint[];
// map_name_popup
extern const u8 gUnknown_841D18D[];
+// evolution_scene
+extern const u8 gText_PkmnIsEvolving[];
+extern const u8 gText_CongratsPkmnEvolved[];
+extern const u8 gText_EllipsisQuestionMark[];
+extern const u8 gText_PkmnStoppedEvolving[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/trade_scene.h b/include/trade_scene.h
index 13cb1a56c..52e80e418 100644
--- a/include/trade_scene.h
+++ b/include/trade_scene.h
@@ -7,11 +7,11 @@ void DoInGameTradeScene(void);
void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed);
u16 GetInGameTradeSpeciesInfo(void);
u16 GetTradeSpecies(void);
-void sub_805049C(void);
-void sub_80504B0(void);
+void InitTradeSequenceBgGpuRegs(void);
+void LinkTradeDrawWindow(void);
void LoadTradeAnimGfx(void);
extern const u16 gUnknown_826601C[];
-extern const struct WindowTemplate gUnknown_826D1CC;
+extern const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate;
#endif //GUARD_TRADE_SCENE_H
diff --git a/ld_script.txt b/ld_script.txt
index 495647b45..16e7b576c 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -190,7 +190,7 @@ SECTIONS {
src/hof_pc.o(.text);
src/field_specials.o(.text);
src/battle_records.o(.text);
- asm/evolution_scene.o(.text);
+ src/evolution_scene.o(.text);
src/coins.o(.text);
src/fldeff_strength.o(.text);
src/battle_transition.o(.text);
@@ -474,7 +474,7 @@ SECTIONS {
data/fldeff_flash.o(.rodata);
src/field_specials.o(.rodata);
src/battle_records.o(.rodata);
- data/evolution_scene.o(.rodata);
+ src/evolution_scene.o(.rodata);
src/battle_transition.o(.rodata);
src/battle_controller_link_partner.o(.rodata);
data/battle_message.o(.rodata);
diff --git a/src/battle_main.c b/src/battle_main.c
index 14b191e52..1125a8d2d 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -696,7 +696,7 @@ static void CB2_InitBattleInternal(void)
gBattle_BG3_X = 0;
gBattle_BG3_Y = 0;
gBattleTerrain = BattleSetup_GetTerrainId();
- sub_800F34C();
+ InitBattleBgsVideo();
LoadBattleTextboxAndBackground();
ResetSpriteData();
ResetTasks();
@@ -1774,7 +1774,7 @@ void sub_8011A1C(void)
gBattle_BG2_Y = 0;
gBattle_BG3_X = 0;
gBattle_BG3_Y = 0;
- sub_800F34C();
+ InitBattleBgsVideo();
LoadCompressedPalette(gBattleTextboxPalette, 0, 64);
LoadBattleMenuWindowGfx();
ResetSpriteData();
@@ -1835,7 +1835,7 @@ static void sub_8011BB0(void)
}
}
-u32 sub_8011C44(u8 arrayId, u8 caseId)
+u32 GetBattleBgAttribute(u8 arrayId, u8 caseId)
{
u32 ret = 0;
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index c5c8e89a4..8a0e32ba8 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -5045,7 +5045,7 @@ static void atk5A_yesnoboxlearnmove(void)
case 3:
if (!gPaletteFade.active && gMain.callback2 == BattleMainCB2)
{
- u8 movePosition = sub_8138B2C();
+ u8 movePosition = GetMoveSlotToReplace();
if (movePosition == 4)
{
@@ -9629,7 +9629,7 @@ static void atkF2_displaydexinfo(void)
}
break;
case 3:
- sub_800F34C();
+ InitBattleBgsVideo();
LoadBattleTextboxAndBackground();
gBattle_BG3_X = 0x100;
++gBattleCommunication[0];
diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c
index 175ebf81e..622b26f8f 100644
--- a/src/evolution_graphics.c
+++ b/src/evolution_graphics.c
@@ -397,7 +397,7 @@ static void EvoTask_PostEvoSparklesSet2Init(u8 taskId)
{
SetEvoSparklesMatrices();
gTasks[taskId].data[15] = 0;
- sub_80D0474();
+ IsMovingBackgroundTaskRunning();
CpuCopy16(&gPlttBufferFaded[32], &gPlttBufferUnfaded[32], 96);
BeginNormalPaletteFade(0xFFF90F1C, 0, 0, 16, RGB_WHITE);
gTasks[taskId].func = EvoTask_CreatePostEvoSparklesSet2;
@@ -448,7 +448,7 @@ static void EvoTask_PostEvoSparklesSet2TradeInit(u8 taskId)
{
SetEvoSparklesMatrices();
gTasks[taskId].data[15] = 0;
- sub_80D0474();
+ IsMovingBackgroundTaskRunning();
CpuCopy16(&gPlttBufferFaded[32], &gPlttBufferUnfaded[32], 96);
BeginNormalPaletteFade(0xFFF90F00, 0, 0, 16, RGB_WHITE);
gTasks[taskId].func = EvoTask_CreatePostEvoSparklesSet2Trade;
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
new file mode 100644
index 000000000..f3b05b32c
--- /dev/null
+++ b/src/evolution_scene.c
@@ -0,0 +1,1569 @@
+#include "global.h"
+#include "malloc.h"
+#include "battle.h"
+#include "battle_message.h"
+#include "bg.h"
+#include "data.h"
+#include "decompress.h"
+#include "help_system.h"
+#include "evolution_scene.h"
+#include "evolution_graphics.h"
+#include "gpu_regs.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "m4a.h"
+#include "event_data.h"
+#include "trade_scene.h"
+#include "main.h"
+#include "new_menu_helpers.h"
+#include "menu.h"
+#include "overworld.h"
+#include "palette.h"
+#include "pokedex.h"
+#include "pokemon.h"
+#include "pokemon_summary_screen.h"
+#include "scanline_effect.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "text.h"
+#include "text_window.h"
+#include "trig.h"
+#include "trade.h"
+#include "util.h"
+#include "battle_string_ids.h"
+#include "constants/species.h"
+#include "constants/songs.h"
+#include "constants/pokemon.h"
+
+struct EvoInfo
+{
+ u8 preEvoSpriteId;
+ u8 postEvoSpriteId;
+ u8 evoTaskId;
+ u8 field_3;
+ u16 savedPalette[48];
+};
+
+// EWRAM vars
+static EWRAM_DATA struct EvoInfo *sEvoStructPtr = NULL;
+static EWRAM_DATA u16 *sEvoMovingBgPtr = NULL;
+
+// IWRAM common
+void (*gCB2_AfterEvolution)(void);
+
+#define sEvoCursorPos gBattleCommunication[1] // when learning a new move
+#define sEvoGraphicsTaskId gBattleCommunication[2]
+
+// this file's functions
+static void Task_EvolutionScene(u8 taskId);
+static void Task_TradeEvolutionScene(u8 taskId);
+static void CB2_EvolutionSceneUpdate(void);
+static void CB2_TradeEvolutionSceneUpdate(void);
+static void EvoDummyFunc(void);
+static void VBlankCB_EvolutionScene(void);
+static void VBlankCB_TradeEvolutionScene(void);
+static void DestroyMovingBackgroundTasks(void);
+static void InitMovingBackgroundTask(bool8 isLink);
+static void Task_MovingBackgroundPos(u8 taskId);
+static void ResetBgRegsAfterMovingBackgroundCancel(void);
+
+// const data
+static const u16 sUnrefPal_83F6C90[] = INCBIN_U16("graphics/evolution_scene/unknown_5B4114.gbapal");
+static const u32 sMovingBackgroundTiles[] = INCBIN_U32("graphics/evolution_scene/bg.4bpp.lz");
+static const u32 sMovingBackgroundMap1[] = INCBIN_U32("graphics/evolution_scene/bg.bin.lz");
+static const u32 sMovingBackgroundMap2[] = INCBIN_U32("graphics/evolution_scene/bg2.bin.lz");
+static const u16 sBlackPalette[] = INCBIN_U16("graphics/evolution_scene/gray_transition_intro.gbapal");
+static const u16 unref_83F7D80[] = INCBIN_U16("graphics/evolution_scene/unref_83F7D80.bin");
+static const u16 sMovingBgPals[] = INCBIN_U16("graphics/evolution_scene/transition.gbapal");
+
+static const u8 sText_ShedinjaJapaneseName[] = _("ヌケニン");
+
+static const u8 unref_83F8445[] = _("{COLOR RED}{HIGHLIGHT DARK_GREY}{SHADOW GREEN}");
+
+static const u8 unref_83F844F[][10] = {
+ _("▶\n "),
+ _(" \n▶"),
+ _(" \n ")
+};
+
+// start frame, stop frame, loop count, delay
+static const u8 sMovingBackgroundTimers[][4] =
+{
+ { 0, 12, 1, 6 },
+ { 13, 36, 5, 2 },
+ { 13, 24, 1, 2 },
+ { 37, 49, 1, 6 },
+};
+
+static const u8 sMovingBgPalIndices[][16] = {
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 0 },
+ { 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0 },
+ { 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0 },
+ { 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 11, 0, 0 },
+ { 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0 },
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0 },
+ { 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 12, 0, 0 },
+ { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 12, 11, 0, 0 },
+ { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 12, 11, 10, 0, 0 },
+ { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 12, 11, 10, 9, 0, 0 },
+ { 0, 6, 7, 8, 9, 10, 11, 12, 13, 12, 11, 10, 9, 8, 0, 0 },
+ { 0, 7, 8, 9, 10, 11, 12, 13, 12, 11, 10, 9, 8, 7, 0, 0 },
+ { 0, 8, 9, 10, 11, 12, 13, 12, 11, 10, 9, 8, 7, 6, 0, 0 },
+ { 0, 9, 10, 11, 12, 13, 12, 11, 10, 9, 8, 7, 6, 5, 0, 0 },
+ { 0, 10, 11, 12, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 0, 0 },
+ { 0, 11, 12, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 0, 0 },
+ { 0, 12, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 0 },
+ { 0, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0 },
+ { 0, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, 0, 0 },
+ { 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, 3, 0, 0 },
+ { 0, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, 3, 4, 0, 0 },
+ { 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 2, 3, 4, 5, 0, 0 },
+ { 0, 8, 7, 6, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 0, 0 },
+ { 0, 7, 6, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 7, 0, 0 },
+ { 0, 6, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 7, 8, 0, 0 },
+ { 0, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0 },
+ { 0, 4, 3, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0 },
+ { 0, 3, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0 },
+ { 0, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0 },
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0 },
+ { 0, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0 },
+ { 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0 },
+ { 0, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0 },
+ { 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0 },
+ { 0, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+};
+
+static void CB2_BeginEvolutionScene(void)
+{
+ UpdatePaletteFade();
+ RunTasks();
+}
+
+#define tState data[0]
+#define tPreEvoSpecies data[1]
+#define tPostEvoSpecies data[2]
+#define tCanStop data[3]
+#define tBits data[3]
+#define tLearnsFirstMove data[4]
+#define tLearnMoveState data[6]
+#define tData7 data[7]
+#define tData8 data[8]
+#define tEvoWasStopped data[9]
+#define tPartyId data[10]
+
+#define TASK_BIT_CAN_STOP 0x1
+#define TASK_BIT_LEARN_MOVE 0x80
+
+static void Task_BeginEvolutionScene(u8 taskId)
+{
+ struct Pokemon* mon = NULL;
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ gTasks[taskId].tState++;
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ u16 speciesToEvolve;
+ bool8 canStopEvo;
+ u8 partyId;
+
+ mon = &gPlayerParty[gTasks[taskId].tPartyId];
+ speciesToEvolve = gTasks[taskId].tPostEvoSpecies;
+ canStopEvo = gTasks[taskId].tCanStop;
+ partyId = gTasks[taskId].tPartyId;
+
+ DestroyTask(taskId);
+ EvolutionScene(mon, speciesToEvolve, canStopEvo, partyId);
+ }
+ break;
+ }
+}
+
+void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyId)
+{
+ u8 taskId = CreateTask(Task_BeginEvolutionScene, 0);
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tPostEvoSpecies = speciesToEvolve;
+ gTasks[taskId].tCanStop = canStopEvo;
+ gTasks[taskId].tPartyId = partyId;
+ SetMainCallback2(CB2_BeginEvolutionScene);
+}
+
+void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyId)
+{
+ u8 name[20];
+ u16 currSpecies;
+ u32 trainerId, personality;
+ const struct CompressedSpritePalette* pokePal;
+ u8 id;
+
+ SetHBlankCallback(NULL);
+ SetVBlankCallback(NULL);
+ CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
+
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WIN1H, 0);
+ SetGpuReg(REG_OFFSET_WIN1V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+
+ ResetPaletteFade();
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ gBattle_BG2_Y = 0;
+ gBattle_BG3_X = 256;
+ gBattle_BG3_Y = 0;
+
+ gBattleTerrain = BATTLE_TERRAIN_PLAIN;
+
+ InitBattleBgsVideo();
+ LoadBattleTextboxAndBackground();
+ ResetSpriteData();
+ ScanlineEffect_Stop();
+ ResetTasks();
+ FreeAllSpritePalettes();
+
+ gReservedSpritePaletteCount = 4;
+
+ sEvoStructPtr = AllocZeroed(sizeof(struct EvoInfo));
+ AllocateMonSpritesGfx();
+
+ GetMonData(mon, MON_DATA_NICKNAME, name);
+ StringCopy10(gStringVar1, name);
+ StringCopy(gStringVar2, gSpeciesNames[speciesToEvolve]);
+
+ // preEvo sprite
+ currSpecies = GetMonData(mon, MON_DATA_SPECIES);
+ trainerId = GetMonData(mon, MON_DATA_OT_ID);
+ personality = GetMonData(mon, MON_DATA_PERSONALITY);
+ DecompressPicFromTable(&gMonFrontPicTable[currSpecies],
+ gMonSpritesGfxPtr->sprites[1],
+ currSpecies);
+ pokePal = GetMonSpritePalStructFromOtIdPersonality(currSpecies, trainerId, personality);
+ LoadCompressedPalette(pokePal->data, 0x110, 0x20);
+
+ SetMultiuseSpriteTemplateToPokemon(currSpecies, 1);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->preEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+
+ gSprites[id].callback = SpriteCallbackDummy2;
+ gSprites[id].oam.paletteNum = 1;
+ gSprites[id].invisible = TRUE;
+
+ // postEvo sprite
+ DecompressPicFromTable(&gMonFrontPicTable[speciesToEvolve],
+ gMonSpritesGfxPtr->sprites[3],
+ speciesToEvolve);
+ pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality);
+ LoadCompressedPalette(pokePal->data, 0x120, 0x20);
+
+ SetMultiuseSpriteTemplateToPokemon(speciesToEvolve, 3);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+ gSprites[id].callback = SpriteCallbackDummy2;
+ gSprites[id].oam.paletteNum = 2;
+ gSprites[id].invisible = TRUE;
+
+ LoadEvoSparkleSpriteAndPal();
+
+ sEvoStructPtr->evoTaskId = id = CreateTask(Task_EvolutionScene, 0);
+ gTasks[id].tState = 0;
+ gTasks[id].tPreEvoSpecies = currSpecies;
+ gTasks[id].tPostEvoSpecies = speciesToEvolve;
+ gTasks[id].tCanStop = canStopEvo;
+ gTasks[id].tLearnsFirstMove = TRUE;
+ gTasks[id].tEvoWasStopped = FALSE;
+ gTasks[id].tPartyId = partyId;
+
+ memcpy(&sEvoStructPtr->savedPalette, &gPlttBufferUnfaded[0x20], 0x60);
+
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP);
+
+ SetHBlankCallback(EvoDummyFunc);
+ SetVBlankCallback(VBlankCB_EvolutionScene);
+ m4aMPlayAllStop();
+ HelpSystem_Disable();
+ SetMainCallback2(CB2_EvolutionSceneUpdate);
+}
+
+static void CB2_EvolutionSceneLoadGraphics(void)
+{
+ u8 id;
+ const struct CompressedSpritePalette* pokePal;
+ u16 postEvoSpecies;
+ u32 trainerId, personality;
+ struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoStructPtr->evoTaskId].tPartyId];
+
+ postEvoSpecies = gTasks[sEvoStructPtr->evoTaskId].tPostEvoSpecies;
+ trainerId = GetMonData(Mon, MON_DATA_OT_ID);
+ personality = GetMonData(Mon, MON_DATA_PERSONALITY);
+
+ SetHBlankCallback(NULL);
+ SetVBlankCallback(NULL);
+ CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
+
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WIN1H, 0);
+ SetGpuReg(REG_OFFSET_WIN1V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+
+ ResetPaletteFade();
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ gBattle_BG2_Y = 0;
+ gBattle_BG3_X = 256;
+ gBattle_BG3_Y = 0;
+
+ gBattleTerrain = BATTLE_TERRAIN_PLAIN;
+
+ InitBattleBgsVideo();
+ LoadBattleTextboxAndBackground();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 4;
+
+ DecompressPicFromTable(&gMonFrontPicTable[postEvoSpecies],
+ gMonSpritesGfxPtr->sprites[3],
+ postEvoSpecies);
+ pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality);
+
+ LoadCompressedPalette(pokePal->data, 0x120, 0x20);
+
+ SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, 3);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+
+ gSprites[id].callback = SpriteCallbackDummy2;
+ gSprites[id].oam.paletteNum = 2;
+
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP);
+
+ SetHBlankCallback(EvoDummyFunc);
+ SetVBlankCallback(VBlankCB_EvolutionScene);
+ SetMainCallback2(CB2_EvolutionSceneUpdate);
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+}
+
+static void CB2_TradeEvolutionSceneLoadGraphics(void)
+{
+ struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoStructPtr->evoTaskId].tPartyId];
+ u16 postEvoSpecies = gTasks[sEvoStructPtr->evoTaskId].tPostEvoSpecies;
+
+ switch (gMain.state)
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetHBlankCallback(NULL);
+ SetVBlankCallback(NULL);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 4;
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ gBattle_BG2_Y = 0;
+ gBattle_BG3_X = 256;
+ gBattle_BG3_Y = 0;
+ gMain.state++;
+ break;
+ case 1:
+ ResetPaletteFade();
+ SetHBlankCallback(EvoDummyFunc);
+ SetVBlankCallback(VBlankCB_TradeEvolutionScene);
+ gMain.state++;
+ break;
+ case 2:
+ LoadTradeAnimGfx();
+ gMain.state++;
+ break;
+ case 3:
+ FillBgTilemapBufferRect(1, 0, 0, 0, 0x20, 0x20, 0x11);
+ CopyBgTilemapBufferToVram(1);
+ gMain.state++;
+ break;
+ case 4:
+ {
+ const struct CompressedSpritePalette* pokePal;
+ u32 trainerId = GetMonData(Mon, MON_DATA_OT_ID);
+ u32 personality = GetMonData(Mon, MON_DATA_PERSONALITY);
+ DecompressPicFromTable(&gMonFrontPicTable[postEvoSpecies],
+ gMonSpritesGfxPtr->sprites[3],
+ postEvoSpecies);
+ pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality);
+ LoadCompressedPalette(pokePal->data, 0x120, 0x20);
+ gMain.state++;
+ }
+ break;
+ case 5:
+ {
+ u8 id;
+
+ SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, 1);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+
+ gSprites[id].callback = SpriteCallbackDummy2;
+ gSprites[id].oam.paletteNum = 2;
+ gMain.state++;
+ LinkTradeDrawWindow();
+ }
+ break;
+ case 6:
+ if (gWirelessCommType)
+ {
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ }
+ BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK);
+ gMain.state++;
+ break;
+ case 7:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ InitTradeSequenceBgGpuRegs();
+ ShowBg(0);
+ ShowBg(1);
+ SetMainCallback2(CB2_TradeEvolutionSceneUpdate);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP);
+ break;
+ }
+}
+
+void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteId, u8 partyId)
+{
+ u8 name[20];
+ u16 currSpecies;
+ u32 trainerId, personality;
+ const struct CompressedSpritePalette* pokePal;
+ u8 id;
+
+ GetMonData(mon, MON_DATA_NICKNAME, name);
+ StringCopy10(gStringVar1, name);
+ StringCopy(gStringVar2, gSpeciesNames[speciesToEvolve]);
+
+ gAffineAnimsDisabled = TRUE;
+
+ // preEvo sprite
+ currSpecies = GetMonData(mon, MON_DATA_SPECIES);
+ personality = GetMonData(mon, MON_DATA_PERSONALITY);
+ trainerId = GetMonData(mon, MON_DATA_OT_ID);
+
+ sEvoStructPtr = AllocZeroed(sizeof(struct EvoInfo));
+ sEvoStructPtr->preEvoSpriteId = preEvoSpriteId;
+
+ DecompressPicFromTable(&gMonFrontPicTable[speciesToEvolve],
+ gMonSpritesGfxPtr->sprites[1],
+ speciesToEvolve);
+
+ pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality);
+ LoadCompressedPalette(pokePal->data, 0x120, 0x20);
+
+ SetMultiuseSpriteTemplateToPokemon(speciesToEvolve, 1);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->postEvoSpriteId = id = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
+
+ gSprites[id].callback = SpriteCallbackDummy2;
+ gSprites[id].oam.paletteNum = 2;
+ gSprites[id].invisible = TRUE;
+
+ LoadEvoSparkleSpriteAndPal();
+
+ sEvoStructPtr->evoTaskId = id = CreateTask(Task_TradeEvolutionScene, 0);
+ gTasks[id].tState = 0;
+ gTasks[id].tPreEvoSpecies = currSpecies;
+ gTasks[id].tPostEvoSpecies = speciesToEvolve;
+ gTasks[id].tLearnsFirstMove = TRUE;
+ gTasks[id].tEvoWasStopped = FALSE;
+ gTasks[id].tPartyId = partyId;
+
+ gBattle_BG0_X = 0;
+ gBattle_BG0_Y = 0;
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ gBattle_BG2_Y = 0;
+ gBattle_BG3_X = 256;
+ gBattle_BG3_Y = 0;
+
+ gTextFlags.useAlternateDownArrow = TRUE;
+
+ SetVBlankCallback(VBlankCB_TradeEvolutionScene);
+ SetMainCallback2(CB2_TradeEvolutionSceneUpdate);
+}
+
+static void CB2_EvolutionSceneUpdate(void)
+{
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTextPrinters();
+ UpdatePaletteFade();
+ RunTasks();
+}
+
+static void CB2_TradeEvolutionSceneUpdate(void)
+{
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTextPrinters();
+ UpdatePaletteFade();
+ RunTasks();
+}
+
+static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon)
+{
+ u32 data = 0;
+ if (gEvolutionTable[preEvoSpecies][0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < 6)
+ {
+ s32 i;
+ struct Pokemon* shedinja = &gPlayerParty[gPlayerPartyCount];
+ const struct Evolution *evos;
+ const struct Evolution *evos2;
+
+ CopyMon(&gPlayerParty[gPlayerPartyCount], mon, sizeof(struct Pokemon));
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_SPECIES, (&gEvolutionTable[preEvoSpecies][1].targetSpecies));
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_NICKNAME, (gSpeciesNames[gEvolutionTable[preEvoSpecies][1].targetSpecies]));
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_HELD_ITEM, (&data));
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_MARKINGS, (&data));
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_ENCRYPT_SEPARATOR, (&data));
+
+ for (i = MON_DATA_COOL_RIBBON; i < MON_DATA_COOL_RIBBON + 5; i++)
+ SetMonData(&gPlayerParty[gPlayerPartyCount], i, (&data));
+ for (i = MON_DATA_CHAMPION_RIBBON; i <= MON_DATA_FATEFUL_ENCOUNTER; i++)
+ SetMonData(&gPlayerParty[gPlayerPartyCount], i, (&data));
+
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_STATUS, (&data));
+ data = 0xFF;
+ SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_MAIL, (&data));
+
+ CalculateMonStats(&gPlayerParty[gPlayerPartyCount]);
+ CalculatePlayerPartyCount();
+
+ // can't match it otherwise, ehh
+ evos2 = gEvolutionTable[0];
+ evos = evos2 + EVOS_PER_MON * preEvoSpecies;
+
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(evos[1].targetSpecies), FLAG_SET_SEEN);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(evos[1].targetSpecies), FLAG_SET_CAUGHT);
+
+ if (GetMonData(shedinja, MON_DATA_SPECIES) == SPECIES_SHEDINJA
+ && GetMonData(shedinja, MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE
+ && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NINJASK)
+ SetMonData(shedinja, MON_DATA_NICKNAME, sText_ShedinjaJapaneseName);
+ }
+}
+
+static void Task_EvolutionScene(u8 taskId)
+{
+ u32 var;
+ struct Pokemon* mon = &gPlayerParty[gTasks[taskId].tPartyId];
+
+ // Automatically cancel if the Pokemon would evolve into a species you have not
+ // yet unlocked, such as Crobat.
+ if (!IsNationalPokedexEnabled()
+ && gTasks[taskId].tState == 8
+ && gTasks[taskId].tPostEvoSpecies > SPECIES_MEW)
+ {
+ gTasks[taskId].tState = 17;
+ gTasks[taskId].tEvoWasStopped = TRUE;
+ gTasks[sEvoGraphicsTaskId].EvoGraphicsTaskEvoStop = TRUE;
+ DestroyMovingBackgroundTasks();
+ return;
+ }
+
+ // check if B Button was held, so the evolution gets stopped
+ if (gMain.heldKeys == B_BUTTON
+ && gTasks[taskId].tState == 8
+ && gTasks[sEvoGraphicsTaskId].isActive
+ && gTasks[taskId].tBits & TASK_BIT_CAN_STOP)
+ {
+ gTasks[taskId].tState = 17;
+ gTasks[sEvoGraphicsTaskId].EvoGraphicsTaskEvoStop = TRUE;
+ DestroyMovingBackgroundTasks();
+ return;
+ }
+
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ gSprites[sEvoStructPtr->preEvoSpriteId].invisible = FALSE;
+ gTasks[taskId].tState++;
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ break;
+ case 1: // print 'whoa, poke is evolving!!!' msg
+ if (!gPaletteFade.active)
+ {
+ StringExpandPlaceholders(gStringVar4, gText_PkmnIsEvolving);
+ BattlePutTextOnWindow(gStringVar4, 0);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 2: // wait for string, animate mon(and play its cry)
+ if (!IsTextPrinterActive(0))
+ {
+ PlayCry1(gTasks[taskId].tPreEvoSpecies, 0);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 3:
+ if (IsCryFinished()) // wait for animation, play tu du SE
+ {
+ PlaySE(MUS_ME_SHINKA);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 4: // play evolution music and fade screen black
+ if (!IsSEPlaying())
+ {
+ PlayNewMapMusic(MUS_SHINKA);
+ gTasks[taskId].tState++;
+ BeginNormalPaletteFade(0x1C, 4, 0, 0x10, RGB_BLACK);
+ }
+ break;
+ case 5: // launch moving bg task, preapre evo sparkles
+ if (!gPaletteFade.active)
+ {
+ InitMovingBackgroundTask(FALSE);
+ sEvoGraphicsTaskId = LaunchTask_PreEvoSparklesSet1(17);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 6: // another set of evo sparkles
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ gTasks[taskId].tState++;
+ sEvoStructPtr->field_3 = 1;
+ sEvoGraphicsTaskId = LaunchTask_PreEvoSparklesSet2();
+ }
+ break;
+ case 7: // launch task that flashes pre evo with post evo sprites
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ sEvoGraphicsTaskId = LaunchTask_PrePostEvoMonSprites(sEvoStructPtr->preEvoSpriteId, sEvoStructPtr->postEvoSpriteId);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 8: // wait for the above task to finish
+ if (--sEvoStructPtr->field_3 == 0)
+ {
+ sEvoStructPtr->field_3 = 3;
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 9: // post evo sparkles
+ sEvoGraphicsTaskId = LaunchTask_PostEvoSparklesSet1();
+ gTasks[taskId].tState++;
+ break;
+ case 10:
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ sEvoGraphicsTaskId = LaunchTask_PostEvoSparklesSet2AndFlash(gTasks[taskId].tPostEvoSpecies);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 11: // play tu du sound after evolution
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ PlaySE(SE_EXP);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 12: // stop music, return screen to pre-fade state
+ if (IsSEPlaying())
+ {
+ m4aMPlayAllStop();
+ memcpy(&gPlttBufferUnfaded[0x20], sEvoStructPtr->savedPalette, 0x60);
+ ResetBgRegsAfterMovingBackgroundCancel();
+ BeginNormalPaletteFade(0x1C, 0, 0x10, 0, RGB_BLACK);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 13: // animate mon
+ if (!gPaletteFade.active)
+ {
+ PlayCry1(gTasks[taskId].tPostEvoSpecies, 0);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 14: // congratulations string and rename prompt
+ if (IsCryFinished())
+ {
+ StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
+ BattlePutTextOnWindow(gStringVar4, 0);
+ PlayBGM(MUS_FANFA5);
+ gTasks[taskId].tState++;
+ SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskId].tPostEvoSpecies));
+ CalculateMonStats(mon);
+ EvolutionRenameMon(mon, gTasks[taskId].tPreEvoSpecies, gTasks[taskId].tPostEvoSpecies);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_SEEN);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_CAUGHT);
+ IncrementGameStat(GAME_STAT_EVOLVED_POKEMON);
+ }
+ break;
+ case 15: // check if it wants to learn a new move
+ if (!IsTextPrinterActive(0))
+ {
+ HelpSystem_Enable();
+ var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove);
+ if (var != 0 && !gTasks[taskId].tEvoWasStopped)
+ {
+ u8 text[20];
+
+ StopMapMusic();
+ Overworld_PlaySpecialMapMusic();
+ gTasks[taskId].tBits |= TASK_BIT_LEARN_MOVE;
+ gTasks[taskId].tLearnsFirstMove = FALSE;
+ gTasks[taskId].tLearnMoveState = 0;
+ GetMonData(mon, MON_DATA_NICKNAME, text);
+ StringCopy10(gBattleTextBuff1, text);
+
+ if (var == MON_HAS_MAX_MOVES)
+ gTasks[taskId].tState = 22;
+ else if (var == MON_ALREADY_KNOWS_MOVE)
+ break;
+ else
+ gTasks[taskId].tState = 20; // move has been learned
+ }
+ else // no move to learn
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ gTasks[taskId].tState++;
+ }
+ }
+ break;
+ case 16: // task has finished, return
+ if (!gPaletteFade.active)
+ {
+ if (!(gTasks[taskId].tBits & TASK_BIT_LEARN_MOVE))
+ {
+ StopMapMusic();
+ Overworld_PlaySpecialMapMusic();
+ }
+ if (!gTasks[taskId].tEvoWasStopped)
+ CreateShedinja(gTasks[taskId].tPreEvoSpecies, mon);
+
+ DestroyTask(taskId);
+ FreeMonSpritesGfx();
+ Free(sEvoStructPtr);
+ sEvoStructPtr = NULL;
+ FreeAllWindowBuffers();
+ SetMainCallback2(gCB2_AfterEvolution);
+ }
+ break;
+ case 17: // evolution has been canceled, stop music and re-fade palette
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ m4aMPlayAllStop();
+ BeginNormalPaletteFade(0x6001C, 0, 0x10, 0, RGB_WHITE);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 18: // animate pokemon trying to evolve again, evolution has been stopped
+ if (!gPaletteFade.active)
+ {
+ PlayCry1(gTasks[taskId].tPreEvoSpecies, 0);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 19: // after the animation, print the string 'WHOA IT DId NOT EVOLVE!!!'
+ if (IsCryFinished())
+ {
+ if (gTasks[taskId].tEvoWasStopped)
+ StringExpandPlaceholders(gStringVar4, gText_EllipsisQuestionMark);
+ else
+ StringExpandPlaceholders(gStringVar4, gText_PkmnStoppedEvolving);
+
+ BattlePutTextOnWindow(gStringVar4, 0);
+ gTasks[taskId].tEvoWasStopped = TRUE;
+ gTasks[taskId].tState = 15;
+ }
+ break;
+ case 20: // pokemon learned a new move, print string and play a fanfare
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BufferMoveToLearnIntoBattleTextBuff2();
+ PlayFanfare(MUS_FANFA1);
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tLearnsFirstMove = 0x40; // re-used as a counter
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 21: // wait a bit and check if can learn another move
+ if (!IsTextPrinterActive(0) && !IsSEPlaying() && --gTasks[taskId].tLearnsFirstMove == 0)
+ gTasks[taskId].tState = 15;
+ break;
+ case 22: // try to learn a new move
+ switch (gTasks[taskId].tLearnMoveState)
+ {
+ case 0:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BufferMoveToLearnIntoBattleTextBuff2();
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 1:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 2:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tData7 = 5;
+ gTasks[taskId].tData8 = 10;
+ gTasks[taskId].tLearnMoveState++;
+ }
+ case 3:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ HandleBattleWindow(0x17, 8, 0x1D, 0xD, 0);
+ BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xE);
+ gTasks[taskId].tLearnMoveState++;
+ sEvoCursorPos = 0;
+ BattleCreateYesNoCursorAt();
+ }
+ break;
+ case 4:
+ if (JOY_NEW(DPAD_UP) && sEvoCursorPos != 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt();
+ sEvoCursorPos = 0;
+ BattleCreateYesNoCursorAt();
+ }
+ if (JOY_NEW(DPAD_DOWN) && sEvoCursorPos == 0)
+ {
+ PlaySE(SE_SELECT);
+ BattleDestroyYesNoCursorAt();
+ sEvoCursorPos = 1;
+ BattleCreateYesNoCursorAt();
+ }
+ if (JOY_NEW(A_BUTTON))
+ {
+ HandleBattleWindow(0x17, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ PlaySE(SE_SELECT);
+
+ if (sEvoCursorPos != 0)
+ {
+ gTasks[taskId].tLearnMoveState = gTasks[taskId].tData8;
+ }
+ else
+ {
+ gTasks[taskId].tLearnMoveState = gTasks[taskId].tData7;
+ if (gTasks[taskId].tLearnMoveState == 5)
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ }
+ }
+ if (JOY_NEW(B_BUTTON))
+ {
+ HandleBattleWindow(0x17, 8, 0x1D, 0xD, WINDOW_CLEAR);
+ PlaySE(SE_SELECT);
+ gTasks[taskId].tLearnMoveState = gTasks[taskId].tData8;
+ }
+ break;
+ case 5:
+ if (!gPaletteFade.active)
+ {
+ FreeAllWindowBuffers();
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, gTasks[taskId].tPartyId,
+ gPlayerPartyCount - 1, CB2_EvolutionSceneLoadGraphics,
+ gMoveToLearn);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 6:
+ if (!gPaletteFade.active && gMain.callback2 == CB2_EvolutionSceneUpdate)
+ {
+ var = GetMoveSlotToReplace();
+ if (var == MAX_MON_MOVES)
+ {
+ gTasks[taskId].tLearnMoveState = 10;
+ }
+ else
+ {
+ u16 move = GetMonData(mon, var + MON_DATA_MOVE1);
+ if (IsHMMove2(move))
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tLearnMoveState = 12;
+ }
+ else
+ {
+ PREPARE_MOVE_BUFFER(gBattleTextBuff2, move)
+
+ RemoveMonPPBonus(mon, var);
+ SetMonMoveSlot(mon, gMoveToLearn, var);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ }
+ }
+ break;
+ case 7:
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tLearnMoveState++;
+ break;
+ case 8:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 9:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tState = 20;
+ }
+ break;
+ case 10:
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tData7 = 11;
+ gTasks[taskId].tData8 = 0;
+ gTasks[taskId].tLearnMoveState = 3;
+ break;
+ case 11:
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
+ gTasks[taskId].tState = 15;
+ break;
+ case 12:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ gTasks[taskId].tLearnMoveState = 5;
+ break;
+ }
+ break;
+ }
+}
+
+static void Task_TradeEvolutionScene(u8 taskId)
+{
+ u32 var = 0;
+ struct Pokemon* mon = &gPlayerParty[gTasks[taskId].tPartyId];
+
+ // Automatically cancel if the Pokemon would evolve into a species you have not
+ // yet unlocked, such as Crobat.
+ if (!IsNationalPokedexEnabled()
+ && gTasks[taskId].tState == 7
+ && gTasks[taskId].tPostEvoSpecies > SPECIES_MEW)
+ {
+ gTasks[taskId].tState = 15;
+ gTasks[taskId].tEvoWasStopped = TRUE;
+ if (gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ gTasks[sEvoGraphicsTaskId].EvoGraphicsTaskEvoStop = TRUE;
+ DestroyMovingBackgroundTasks();
+ }
+ }
+
+ switch (gTasks[taskId].tState)
+ {
+ case 0:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnIsEvolving);
+ DrawTextOnTradeWindow(0, gStringVar4, 1);
+ gTasks[taskId].tState++;
+ break;
+ case 1:
+ if (!IsTextPrinterActive(0))
+ {
+ PlayCry1(gTasks[taskId].tPreEvoSpecies, 0);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 2:
+ if (IsCryFinished())
+ {
+ m4aSongNumStop(MUS_SHINKA);
+ PlaySE(MUS_ME_SHINKA);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 3:
+ if (!IsSEPlaying())
+ {
+ PlayBGM(MUS_SHINKA);
+ gTasks[taskId].tState++;
+ BeginNormalPaletteFade(0x1C, 4, 0, 0x10, RGB_BLACK);
+ }
+ break;
+ case 4:
+ if (!gPaletteFade.active)
+ {
+ InitMovingBackgroundTask(TRUE);
+ var = gSprites[sEvoStructPtr->preEvoSpriteId].oam.paletteNum + 16;
+ sEvoGraphicsTaskId = LaunchTask_PreEvoSparklesSet1(var);
+ gTasks[taskId].tState++;
+ SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(6));
+ }
+ break;
+ case 5:
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ gTasks[taskId].tState++;
+ sEvoStructPtr->field_3 = 1;
+ sEvoGraphicsTaskId = LaunchTask_PreEvoSparklesSet2();
+ }
+ break;
+ case 6:
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ sEvoGraphicsTaskId = LaunchTask_PrePostEvoMonSprites(sEvoStructPtr->preEvoSpriteId, sEvoStructPtr->postEvoSpriteId);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 7:
+ if (--sEvoStructPtr->field_3 == 0)
+ {
+ sEvoStructPtr->field_3 = 3;
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 8:
+ sEvoGraphicsTaskId = LaunchTask_PostEvoSparklesSet1();
+ gTasks[taskId].tState++;
+ break;
+ case 9:
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ sEvoGraphicsTaskId = LaunchTask_PostEvoSparklesSet2AndFlash_Trade(gTasks[taskId].tPostEvoSpecies);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 10:
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ PlaySE(SE_EXP);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 11:
+ /*
+ * BUG: This check causes the evolved Pokemon's cry to play over the sfx.
+ * Negate the below condition.
+ */
+ if (IsSEPlaying())
+ {
+// Free(sEvoMovingBgPtr);
+ PlayCry1(gTasks[taskId].tPostEvoSpecies, 0);
+ memcpy(&gPlttBufferUnfaded[0x20], sEvoStructPtr->savedPalette, 0x60);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 12:
+ if (IsCryFinished())
+ {
+ StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
+ DrawTextOnTradeWindow(0, gStringVar4, 1);
+ PlayFanfare(MUS_FANFA5);
+ gTasks[taskId].tState++;
+ SetMonData(mon, MON_DATA_SPECIES, (&gTasks[taskId].tPostEvoSpecies));
+ CalculateMonStats(mon);
+ EvolutionRenameMon(mon, gTasks[taskId].tPreEvoSpecies, gTasks[taskId].tPostEvoSpecies);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_SEEN);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_CAUGHT);
+ IncrementGameStat(GAME_STAT_EVOLVED_POKEMON);
+ }
+ break;
+ case 13:
+ if (!IsTextPrinterActive(0) && IsFanfareTaskInactive() == TRUE)
+ {
+ var = MonTryLearningNewMove(mon, gTasks[taskId].tLearnsFirstMove);
+ if (var != 0 && !gTasks[taskId].tEvoWasStopped)
+ {
+ u8 text[20];
+
+ gTasks[taskId].tBits |= TASK_BIT_LEARN_MOVE;
+ gTasks[taskId].tLearnsFirstMove = FALSE;
+ gTasks[taskId].tLearnMoveState = 0;
+ GetMonData(mon, MON_DATA_NICKNAME, text);
+ StringCopy10(gBattleTextBuff1, text);
+
+ if (var == MON_HAS_MAX_MOVES)
+ gTasks[taskId].tState = 20;
+ else if (var == MON_ALREADY_KNOWS_MOVE)
+ break;
+ else
+ gTasks[taskId].tState = 18;
+ }
+ else
+ {
+ PlayBGM(MUS_SHINKA);
+ DrawTextOnTradeWindow(0, gText_CommunicationStandby5, 1);
+ gTasks[taskId].tState++;
+ }
+ }
+ break;
+ case 14:
+ if (!IsTextPrinterActive(0))
+ {
+ DestroyTask(taskId);
+ Free(sEvoStructPtr);
+ sEvoStructPtr = NULL;
+ gTextFlags.useAlternateDownArrow = FALSE;
+ SetMainCallback2(gCB2_AfterEvolution);
+ }
+ break;
+ case 15:
+ if (!gTasks[sEvoGraphicsTaskId].isActive)
+ {
+ m4aMPlayAllStop();
+ BeginNormalPaletteFade((1 << (gSprites[sEvoStructPtr->preEvoSpriteId].oam.paletteNum + 16)) | (0x4001C), 0, 0x10, 0, RGB_WHITE);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 16:
+ if (!gPaletteFade.active)
+ {
+ PlayCry1(gTasks[taskId].tPreEvoSpecies, 0);
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 17:
+ if (IsCryFinished())
+ {
+ StringExpandPlaceholders(gStringVar4, gText_EllipsisQuestionMark);
+ DrawTextOnTradeWindow(0, gStringVar4, 1);
+ gTasks[taskId].tEvoWasStopped = TRUE;
+ gTasks[taskId].tState = 13;
+ }
+ break;
+ case 18:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BufferMoveToLearnIntoBattleTextBuff2();
+ PlayFanfare(MUS_FANFA1);
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnsFirstMove = 0x40; // re-used as a counter
+ gTasks[taskId].tState++;
+ }
+ break;
+ case 19:
+ if (!IsTextPrinterActive(0) && IsFanfareTaskInactive() == TRUE && --gTasks[taskId].tLearnsFirstMove == 0)
+ gTasks[taskId].tState = 13;
+ break;
+ case 20:
+ switch (gTasks[taskId].tLearnMoveState)
+ {
+ case 0:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BufferMoveToLearnIntoBattleTextBuff2();
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 1:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 2:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tData7 = 5;
+ gTasks[taskId].tData8 = 9;
+ gTasks[taskId].tLearnMoveState++;
+ }
+ case 3:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ LoadUserWindowBorderGfx(0, 0xA8, 0xE0);
+ CreateYesNoMenu(&gTradeEvolutionSceneYesNoWindowTemplate, 3, 0, 2, 0xA8, 0xE, 0);
+ sEvoCursorPos = 0;
+ gTasks[taskId].tLearnMoveState++;
+ sEvoCursorPos = 0;
+ }
+ break;
+ case 4:
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ sEvoCursorPos = 0;
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState = gTasks[taskId].tData7;
+ if (gTasks[taskId].tLearnMoveState == 5)
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ break;
+ case 1:
+ case -1:
+ sEvoCursorPos = 1;
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState = gTasks[taskId].tData8;
+ break;
+ }
+ break;
+ case 5:
+ if (!gPaletteFade.active)
+ {
+ if (gWirelessCommType)
+ DestroyWirelessStatusIndicatorSprite();
+
+ Free(GetBgTilemapBuffer(3));
+ Free(GetBgTilemapBuffer(1));
+ Free(GetBgTilemapBuffer(0));
+ FreeAllWindowBuffers();
+
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, gTasks[taskId].tPartyId,
+ gPlayerPartyCount - 1, CB2_TradeEvolutionSceneLoadGraphics,
+ gMoveToLearn);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 6:
+ if (!gPaletteFade.active && gMain.callback2 == CB2_TradeEvolutionSceneUpdate)
+ {
+ var = GetMoveSlotToReplace();
+ if (var == MAX_MON_MOVES)
+ {
+ gTasks[taskId].tLearnMoveState = 9;
+ }
+ else
+ {
+ u16 move = GetMonData(mon, var + MON_DATA_MOVE1);
+ if (IsHMMove2(move))
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState = 11;
+ }
+ else
+ {
+ PREPARE_MOVE_BUFFER(gBattleTextBuff2, move)
+
+ RemoveMonPPBonus(mon, var);
+ SetMonMoveSlot(mon, gMoveToLearn, var);
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ }
+ }
+ break;
+ case 7:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tLearnMoveState++;
+ }
+ break;
+ case 8:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ {
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tState = 18;
+ }
+ break;
+ case 9:
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tData7 = 10;
+ gTasks[taskId].tData8 = 0;
+ gTasks[taskId].tLearnMoveState = 3;
+ break;
+ case 10:
+ BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
+ gTasks[taskId].tState = 13;
+ break;
+ case 11:
+ if (!IsTextPrinterActive(0) && !IsSEPlaying())
+ gTasks[taskId].tLearnMoveState = 5;
+ break;
+ }
+ break;
+ }
+}
+
+#undef tState
+#undef tPreEvoSpecies
+#undef tPostEvoSpecies
+#undef tCanStop
+#undef tBits
+#undef tLearnsFirstMove
+#undef tLearnMoveState
+#undef tData7
+#undef tData8
+#undef tEvoWasStopped
+#undef tPartyId
+
+static void EvoDummyFunc(void)
+{
+}
+
+static void VBlankCB_EvolutionScene(void)
+{
+ SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X);
+ SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y);
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X);
+ SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y);
+ SetGpuReg(REG_OFFSET_BG3HOFS, gBattle_BG3_X);
+ SetGpuReg(REG_OFFSET_BG3VOFS, gBattle_BG3_Y);
+
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ ScanlineEffect_InitHBlankDmaTransfer();
+}
+
+static void VBlankCB_TradeEvolutionScene(void)
+{
+ SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X);
+ SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y);
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X);
+ SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y);
+ SetGpuReg(REG_OFFSET_BG3HOFS, gBattle_BG3_X);
+ SetGpuReg(REG_OFFSET_BG3VOFS, gBattle_BG3_Y);
+
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ ScanlineEffect_InitHBlankDmaTransfer();
+}
+
+static void Task_MovingBackgroundPalettes(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[6] != 0)
+ return;
+ if (data[5]++ < 20)
+ return;
+
+ if (data[0]++ > sMovingBackgroundTimers[data[2]][3])
+ {
+ if (sMovingBackgroundTimers[data[2]][1] == data[1])
+ {
+ data[3]++;
+ if (data[3] == sMovingBackgroundTimers[data[2]][2])
+ {
+ data[3] = 0;
+ data[2]++;
+ }
+ data[1] = sMovingBackgroundTimers[data[2]][0];
+ }
+ else
+ {
+ LoadPalette(&sEvoMovingBgPtr[data[1] * 16], 0xA0, 0x20);
+ data[0] = 0;
+ data[1]++;
+ }
+ }
+
+ if (data[2] == 4)
+ DestroyTask(taskId);
+}
+
+static void LaunchTask_MovingBackgroundPos(bool8 isLink)
+{
+ u8 taskId = CreateTask(Task_MovingBackgroundPos, 7);
+
+ if (!isLink)
+ gTasks[taskId].data[2] = 0;
+ else
+ gTasks[taskId].data[2] = 1;
+}
+
+static void Task_MovingBackgroundPos(u8 taskId)
+{
+ u16 *outer_X, *outer_Y;
+
+ u16 *inner_X = &gBattle_BG1_X;
+ u16 *inner_Y = &gBattle_BG1_Y;
+
+ if (!gTasks[taskId].data[2])
+ {
+ outer_X = &gBattle_BG2_X;
+ outer_Y = &gBattle_BG2_Y;
+ }
+ else
+ {
+ outer_X = &gBattle_BG3_X;
+ outer_Y = &gBattle_BG3_Y;
+ }
+
+ gTasks[taskId].data[0] = (gTasks[taskId].data[0] + 5) & 0xFF;
+ gTasks[taskId].data[1] = (gTasks[taskId].data[0] + 0x80) & 0xFF;
+
+ *inner_X = Cos(gTasks[taskId].data[0], 4) + 8;
+ *inner_Y = Sin(gTasks[taskId].data[0], 4) + 16;
+
+ *outer_X = Cos(gTasks[taskId].data[1], 4) + 8;
+ *outer_Y = Sin(gTasks[taskId].data[1], 4) + 16;
+
+ if (!FuncIsActiveTask(Task_MovingBackgroundPalettes))
+ {
+ DestroyTask(taskId);
+
+ *inner_X = 0;
+ *inner_Y = 0;
+
+ *outer_X = 256;
+ *outer_Y = 0;
+ }
+}
+
+static void InitMovingBgValues(u16 *movingBgs)
+{
+ s32 i, j;
+
+ for (i = 0; i < 50; i++)
+ {
+ for (j = 0; j < 16; j++)
+ {
+ movingBgs[i * 16 + j] = sMovingBgPals[sMovingBgPalIndices[i][j]];
+ }
+ }
+}
+
+static void InitMovingBackgroundTask(bool8 isLink)
+{
+ u8 innerBgId, outerBgId;
+
+ sEvoMovingBgPtr = AllocZeroed(0x640);
+ InitMovingBgValues(sEvoMovingBgPtr);
+
+ if (!isLink)
+ innerBgId = 1, outerBgId = 2;
+ else
+ innerBgId = 1, outerBgId = 3;
+
+ LoadPalette(sBlackPalette, 0xA0, 0x20);
+
+ DecompressAndLoadBgGfxUsingHeap(1, sMovingBackgroundTiles, FALSE, 0, 0);
+ CopyToBgTilemapBuffer(1, sMovingBackgroundMap1, 0, 0);
+ CopyToBgTilemapBuffer(outerBgId, sMovingBackgroundMap2, 0, 0);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(outerBgId);
+
+ if (!isLink)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG2);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8));
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG2_ON | DISPCNT_BG1_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP);
+
+ SetBgAttribute(innerBgId, BG_ATTR_PRIORITY, 2);
+ SetBgAttribute(outerBgId, BG_ATTR_PRIORITY, 2);
+
+ ShowBg(1);
+ ShowBg(2);
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8));
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG3_ON | DISPCNT_BG1_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP);
+ }
+
+ CreateTask(Task_MovingBackgroundPalettes, 5);
+ LaunchTask_MovingBackgroundPos(isLink);
+}
+
+void IsMovingBackgroundTaskRunning(void) // unused
+{
+ u8 taskId = FindTaskIdByFunc(Task_MovingBackgroundPalettes);
+
+ if (taskId != 0xFF)
+ gTasks[taskId].data[6] = 1;
+
+ FillPalette(RGB_BLACK, 0xA0, 0x20);
+}
+
+static void DestroyMovingBackgroundTasks(void)
+{
+ u8 taskId;
+
+ if ((taskId = FindTaskIdByFunc(Task_MovingBackgroundPalettes)) != 0xFF)
+ DestroyTask(taskId);
+ if ((taskId = FindTaskIdByFunc(Task_MovingBackgroundPos)) != 0xFF)
+ DestroyTask(taskId);
+
+ FillPalette(RGB_BLACK, 0xA0, 0x20);
+ ResetBgRegsAfterMovingBackgroundCancel();
+}
+
+static void ResetBgRegsAfterMovingBackgroundCancel(void)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ SetBgAttribute(1, BG_ATTR_PRIORITY, GetBattleBgAttribute(1, 5));
+ SetBgAttribute(2, BG_ATTR_PRIORITY, GetBattleBgAttribute(2, 5));
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG3_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP);
+ Free(sEvoMovingBgPtr);
+}
diff --git a/src/pokemon.c b/src/pokemon.c
index 7989045c2..9aaddc142 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -2899,7 +2899,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
struct PokemonSubstruct2 *substruct2 = NULL;
struct PokemonSubstruct3 *substruct3 = NULL;
- if (field > MON_DATA_10)
+ if (field > MON_DATA_ENCRYPT_SEPARATOR)
{
substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0);
substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1);
@@ -2995,7 +2995,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
case MON_DATA_CHECKSUM:
retVal = boxMon->checksum;
break;
- case MON_DATA_10:
+ case MON_DATA_ENCRYPT_SEPARATOR:
retVal = boxMon->unknown;
break;
case MON_DATA_SPECIES:
@@ -3236,7 +3236,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
break;
}
- if (field > MON_DATA_10)
+ if (field > MON_DATA_ENCRYPT_SEPARATOR)
EncryptBoxMon(boxMon);
return retVal;
@@ -3323,7 +3323,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
struct PokemonSubstruct2 *substruct2 = NULL;
struct PokemonSubstruct3 *substruct3 = NULL;
- if (field > MON_DATA_10)
+ if (field > MON_DATA_ENCRYPT_SEPARATOR)
{
substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0);
substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1);
@@ -3382,7 +3382,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
case MON_DATA_CHECKSUM:
SET16(boxMon->checksum);
break;
- case MON_DATA_10:
+ case MON_DATA_ENCRYPT_SEPARATOR:
SET16(boxMon->unknown);
break;
case MON_DATA_SPECIES:
@@ -3582,7 +3582,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
break;
}
- if (field > MON_DATA_10)
+ if (field > MON_DATA_ENCRYPT_SEPARATOR)
{
boxMon->checksum = CalculateBoxMonChecksum(boxMon);
EncryptBoxMon(boxMon);
diff --git a/src/trade_scene.c b/src/trade_scene.c
index 7b738aa52..fc0e97573 100644
--- a/src/trade_scene.c
+++ b/src/trade_scene.c
@@ -488,7 +488,7 @@ static const struct WindowTemplate gUnknown_826D1BC[] = {
}, DUMMY_WIN_TEMPLATE
};
-const struct WindowTemplate gUnknown_826D1CC = {
+const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate = {
.bg = 0,
.tilemapLeft = 21,
.tilemapTop = 9,
@@ -881,7 +881,7 @@ void CB2_InitTradeAnim_LinkTrade(void)
break;
case 8:
LoadTradeMonPic(1, 1);
- sub_80504B0();
+ LinkTradeDrawWindow();
gMain.state++;
break;
case 9:
@@ -899,7 +899,7 @@ void CB2_InitTradeAnim_LinkTrade(void)
gMain.state++;
break;
case 11:
- sub_805049C();
+ InitTradeSequenceBgGpuRegs();
TradeBufferOTnameAndNicknames();
gMain.state++;
break;
@@ -922,13 +922,13 @@ void CB2_InitTradeAnim_LinkTrade(void)
UpdatePaletteFade();
}
-void sub_805049C(void)
+void InitTradeSequenceBgGpuRegs(void)
{
SetTradeSequenceBgGpuRegs(5);
SetTradeSequenceBgGpuRegs(0);
}
-void sub_80504B0(void)
+void LinkTradeDrawWindow(void)
{
FillWindowPixelBuffer(0, PIXEL_FILL(15));
PutWindowTilemap(0);
@@ -2552,7 +2552,7 @@ static void sub_8053E8C(void)
{
case 0:
gMain.state++;
- StringExpandPlaceholders(gStringVar4, gUnknown_841E325);
+ StringExpandPlaceholders(gStringVar4, gText_CommunicationStandby5);
DrawTextOnTradeWindow(0, gStringVar4, 0);
break;
case 1:
diff --git a/sym_common.txt b/sym_common.txt
index def8fff58..b6e5f8b5e 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -94,10 +94,9 @@ gUnknown_3005354: @ 3005354
.align 2
.include "field_specials.o"
-
-gCB2_AfterEvolution: @ 300537C
- .space 0x4
-
+ .align 2
+ .include "evolution_scene.o"
+ .align 2
.include "save.o"
.align 2
diff --git a/sym_ewram.txt b/sym_ewram.txt
index a892eb532..178e86dda 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -421,13 +421,8 @@ gPlayerFacingPosition: @ 2039A04
.include "src/field_specials.o"
.align 2
.include "src/battle_records.o"
-
-gUnknown_2039A20: @ 2039A20
- .space 0x4
-
-gUnknown_2039A24: @ 2039A24
- .space 0x4
-
+ .align 2
+ .include "src/evolution_scene.o"
.align 2
.include "src/coins.o"
.align 2