diff options
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 Binary files differindex 21e4c79f1..bde26c658 100644 --- a/baserom.ips +++ b/baserom.ips 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 Binary files differnew file mode 100644 index 000000000..583ebac2b --- /dev/null +++ b/graphics/evolution_scene/bg.bin diff --git a/graphics/evolution_scene/bg.png b/graphics/evolution_scene/bg.png Binary files differnew file mode 100644 index 000000000..c9e84c58e --- /dev/null +++ b/graphics/evolution_scene/bg.png diff --git a/graphics/evolution_scene/bg2.bin b/graphics/evolution_scene/bg2.bin Binary files differnew file mode 100644 index 000000000..7afab112a --- /dev/null +++ b/graphics/evolution_scene/bg2.bin 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 Binary files differnew file mode 100644 index 000000000..b2b300184 --- /dev/null +++ b/graphics/evolution_scene/unref_83F7D80.bin 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 Binary files differnew file mode 100644 index 000000000..4293bfd1c --- /dev/null +++ b/graphics/field_effects/flash_effect_map.bin diff --git a/graphics/field_effects/flash_effect_tiles.png b/graphics/field_effects/flash_effect_tiles.png Binary files differnew file mode 100644 index 000000000..4079a5a84 --- /dev/null +++ b/graphics/field_effects/flash_effect_tiles.png 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 |