From a20ac0d7b0705d508e21fdd9cc8dfaaa4d569577 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 21 Jul 2019 12:36:23 +0800 Subject: hot fix --- src/diploma.c | 8 ++++---- src/pokemon.c | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/diploma.c b/src/diploma.c index 517ee8aa0..e89bdc7d7 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -35,7 +35,7 @@ static void DiplomaBgInit(void); static void DiplomaPrintText(void); static u8 DiplomaLoadGfx(void); static void DiplomaVblankHandler(void); -static void CB2_DiplomaInit(void); +static void CB2_Diploma(void); static void Task_WaitForExit(u8); static void Task_DiplomaInit(u8); static void Task_DiplomaReturnToOverworld(u8); @@ -101,10 +101,10 @@ void CB2_ShowDiploma(void) gDiploma->callbackStep = 0; DiplomaBgInit(); CreateTask(Task_DiplomaInit, 0); - SetMainCallback2(CB2_DiplomaInit); + SetMainCallback2(CB2_Diploma); } -static void CB2_DiplomaInit(void) +static void CB2_Diploma(void) { RunTasks(); AnimateSprites(); @@ -134,7 +134,7 @@ static void Task_DiplomaInit(u8 taskId) case 4: if (HasAllKantoMons()) { - SetGpuReg(REG_OFFSET_BG1HOFS, 0x80 << 1); + SetGpuReg(REG_OFFSET_BG1HOFS, 0x100); } else { diff --git a/src/pokemon.c b/src/pokemon.c index b948e4033..6f1df249f 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1621,7 +1621,7 @@ const u16 gLinkPlayerFacilityClasses[] = FACILITY_CLASS_BEAUTY_2, FACILITY_CLASS_AQUA_LEADER, }; -const static struct OamData sOakSpeechNidoranFDummyOamData = +static const struct OamData sOakSpeechNidoranFDummyOamData = { .y = 0, .affineMode = 0, @@ -1637,7 +1637,7 @@ const static struct OamData sOakSpeechNidoranFDummyOamData = .paletteNum = 0, }; -const struct SpriteTemplate sOakSpeechNidoranFDummyTemplate = +static const struct SpriteTemplate sOakSpeechNidoranFDummyTemplate = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = SPRITE_INVALID_TAG, -- cgit v1.2.3 From e37e10854230c3b0f2b96dfe4e8626a1352ac1c9 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 23 Jul 2019 09:16:59 +0800 Subject: document battle transition symbols --- asm/battle_setup.s | 4 +- asm/battle_tower.s | 6 +- asm/battle_transition.s | 1580 +++++++++++++++++++++---------------------- asm/overworld.s | 6 +- data/data_83F5738.s | 74 +- include/battle_transition.h | 4 +- src/teachy_tv.c | 4 +- src/trainer_tower.c | 4 +- sym_ewram.txt | 2 +- 9 files changed, 842 insertions(+), 842 deletions(-) diff --git a/asm/battle_setup.s b/asm/battle_setup.s index 99e4c3468..787b0fb8e 100644 --- a/asm/battle_setup.s +++ b/asm/battle_setup.s @@ -30,13 +30,13 @@ _0807F644: bne _0807F686 bl sub_812B478 ldrb r0, [r4, 0x2] - bl sub_80D08B8 + bl BT_StartOnField ldrh r0, [r4] adds r0, 0x1 strh r0, [r4] b _0807F686 _0807F65E: - bl sub_80D08F8 + bl BT_IsDone lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 diff --git a/asm/battle_tower.s b/asm/battle_tower.s index 13a75573a..ee6856130 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -2025,7 +2025,7 @@ sub_80E68C4: @ 80E68C4 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_80D08F8 + bl BT_IsDone lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -2114,7 +2114,7 @@ _080E6970: bl sub_8080060 lsls r0, 24 lsrs r0, 24 - bl sub_80D08B8 + bl BT_StartOnField b _080E69E6 .align 2, 0 _080E698C: .4byte gSaveBlock1Ptr @@ -2154,7 +2154,7 @@ _080E69A0: bl sub_8080060 lsls r0, 24 lsrs r0, 24 - bl sub_80D08B8 + bl BT_StartOnField _080E69E6: add sp, 0x4 pop {r4-r6} diff --git a/asm/battle_transition.s b/asm/battle_transition.s index 48a5836ed..83f03553d 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -5,44 +5,44 @@ .text - thumb_func_start sub_80D08B8 -sub_80D08B8: @ 80D08B8 + thumb_func_start BT_StartOnField +BT_StartOnField: @ 80D08B8 push {r4,r5,lr} adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r5, _080D08DC @ =gUnknown_2039A2C + ldr r5, _080D08DC @ =sTransitionStructPtr movs r0, 0x3C bl AllocZeroed str r0, [r5] ldr r1, _080D08E0 @ =gMain - ldr r0, _080D08E4 @ =sub_80565A8 + ldr r0, _080D08E4 @ =CB2_OverworldBasic str r0, [r1, 0x4] adds r0, r4, 0 - bl LaunchBattleTransitionTask + bl BT_LaunchTask pop {r4,r5} pop {r0} bx r0 .align 2, 0 -_080D08DC: .4byte gUnknown_2039A2C +_080D08DC: .4byte sTransitionStructPtr _080D08E0: .4byte gMain -_080D08E4: .4byte sub_80565A8 - thumb_func_end sub_80D08B8 +_080D08E4: .4byte CB2_OverworldBasic + thumb_func_end BT_StartOnField - thumb_func_start sub_80D08E8 -sub_80D08E8: @ 80D08E8 + thumb_func_start BT_StartWithoutAlloc +BT_StartWithoutAlloc: @ 80D08E8 push {lr} lsls r0, 24 lsrs r0, 24 - bl LaunchBattleTransitionTask + bl BT_LaunchTask pop {r0} bx r0 - thumb_func_end sub_80D08E8 + thumb_func_end BT_StartWithoutAlloc - thumb_func_start sub_80D08F8 -sub_80D08F8: @ 80D08F8 + thumb_func_start BT_IsDone +BT_IsDone: @ 80D08F8 push {r4,r5,lr} - ldr r0, _080D091C @ =sub_80D0978 + ldr r0, _080D091C @ =BT_TaskMain bl FindTaskIdByFunc lsls r0, 24 lsrs r5, r0, 24 @@ -58,11 +58,11 @@ sub_80D08F8: @ 80D08F8 movs r0, 0 b _080D093C .align 2, 0 -_080D091C: .4byte sub_80D0978 +_080D091C: .4byte BT_TaskMain _080D0920: .4byte gTasks _080D0924: - bl sub_80D3DD0 - ldr r4, _080D0944 @ =gUnknown_2039A2C + bl BT_InitCtrlBlk + ldr r4, _080D0944 @ =sTransitionStructPtr ldr r0, [r4] bl Free movs r0, 0 @@ -75,16 +75,16 @@ _080D093C: pop {r1} bx r1 .align 2, 0 -_080D0944: .4byte gUnknown_2039A2C - thumb_func_end sub_80D08F8 +_080D0944: .4byte sTransitionStructPtr + thumb_func_end BT_IsDone - thumb_func_start LaunchBattleTransitionTask -LaunchBattleTransitionTask: @ 80D0948 + thumb_func_start BT_LaunchTask +BT_LaunchTask: @ 80D0948 push {r4,lr} adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r0, _080D0970 @ =sub_80D0978 + ldr r0, _080D0970 @ =BT_TaskMain movs r1, 0x2 bl CreateTask lsls r0, 24 @@ -99,16 +99,16 @@ LaunchBattleTransitionTask: @ 80D0948 pop {r0} bx r0 .align 2, 0 -_080D0970: .4byte sub_80D0978 +_080D0970: .4byte BT_TaskMain _080D0974: .4byte gTasks - thumb_func_end LaunchBattleTransitionTask + thumb_func_end BT_LaunchTask - thumb_func_start sub_80D0978 -sub_80D0978: @ 80D0978 + thumb_func_start BT_TaskMain +BT_TaskMain: @ 80D0978 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D09A8 @ =gUnknown_83FA3B0 + ldr r5, _080D09A8 @ =sBT_MainPhases ldr r2, _080D09AC @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -129,12 +129,12 @@ _080D098A: pop {r0} bx r0 .align 2, 0 -_080D09A8: .4byte gUnknown_83FA3B0 +_080D09A8: .4byte sBT_MainPhases _080D09AC: .4byte gTasks - thumb_func_end sub_80D0978 + thumb_func_end BT_TaskMain - thumb_func_start Transition_Phase1 -Transition_Phase1: @ 80D09B0 + thumb_func_start BT_Phase1Blink +BT_Phase1Blink: @ 80D09B0 push {r4,lr} adds r4, r0, 0 bl SetWeatherScreenFadeOut @@ -142,7 +142,7 @@ Transition_Phase1: @ 80D09B0 ldr r1, _080D09E0 @ =gPlttBufferUnfaded ldr r2, _080D09E4 @ =0x04000100 bl CpuSet - ldr r1, _080D09E8 @ =gUnknown_83FA320 + ldr r1, _080D09E8 @ =sBT_Phase1Tasks movs r2, 0xA ldrsh r0, [r4, r2] lsls r0, 2 @@ -158,7 +158,7 @@ Transition_Phase1: @ 80D09B0 _080D09DC: .4byte gPlttBufferFaded _080D09E0: .4byte gPlttBufferUnfaded _080D09E4: .4byte 0x04000100 -_080D09E8: .4byte gUnknown_83FA320 +_080D09E8: .4byte sBT_Phase1Tasks _080D09EC: movs r1, 0x4 bl CreateTask @@ -170,13 +170,13 @@ _080D09FA: pop {r4} pop {r1} bx r1 - thumb_func_end Transition_Phase1 + thumb_func_end BT_Phase1Blink - thumb_func_start Transition_WaitForPhase1 -Transition_WaitForPhase1: @ 80D0A00 + thumb_func_start BT_WaitForPhase1 +BT_WaitForPhase1: @ 80D0A00 push {r4,lr} adds r4, r0, 0 - ldr r1, _080D0A20 @ =gUnknown_83FA320 + ldr r1, _080D0A20 @ =sBT_Phase1Tasks movs r2, 0xA ldrsh r0, [r4, r2] lsls r0, 2 @@ -190,7 +190,7 @@ Transition_WaitForPhase1: @ 80D0A00 movs r0, 0 b _080D0A2C .align 2, 0 -_080D0A20: .4byte gUnknown_83FA320 +_080D0A20: .4byte sBT_Phase1Tasks _080D0A24: ldrh r0, [r4, 0x8] adds r0, 0x1 @@ -200,13 +200,13 @@ _080D0A2C: pop {r4} pop {r1} bx r1 - thumb_func_end Transition_WaitForPhase1 + thumb_func_end BT_WaitForPhase1 - thumb_func_start Transition_Phase2 -Transition_Phase2: @ 80D0A34 + thumb_func_start BT_Phase2LaunchAnimTask +BT_Phase2LaunchAnimTask: @ 80D0A34 push {r4,lr} adds r4, r0, 0 - ldr r1, _080D0A58 @ =gUnknown_83FA368 + ldr r1, _080D0A58 @ =sBT_Phase2Tasks movs r2, 0xA ldrsh r0, [r4, r2] lsls r0, 2 @@ -222,16 +222,16 @@ Transition_Phase2: @ 80D0A34 pop {r1} bx r1 .align 2, 0 -_080D0A58: .4byte gUnknown_83FA368 - thumb_func_end Transition_Phase2 +_080D0A58: .4byte sBT_Phase2Tasks + thumb_func_end BT_Phase2LaunchAnimTask - thumb_func_start Transition_WaitForPhase2 -Transition_WaitForPhase2: @ 80D0A5C + thumb_func_start BT_WaitForPhase2 +BT_WaitForPhase2: @ 80D0A5C push {r4,lr} adds r4, r0, 0 movs r0, 0 strh r0, [r4, 0x26] - ldr r1, _080D0A88 @ =gUnknown_83FA368 + ldr r1, _080D0A88 @ =sBT_Phase2Tasks movs r2, 0xA ldrsh r0, [r4, r2] lsls r0, 2 @@ -250,11 +250,11 @@ _080D0A80: pop {r1} bx r1 .align 2, 0 -_080D0A88: .4byte gUnknown_83FA368 - thumb_func_end Transition_WaitForPhase2 +_080D0A88: .4byte sBT_Phase2Tasks + thumb_func_end BT_WaitForPhase2 - thumb_func_start Phase1Task_TransitionAll -Phase1Task_TransitionAll: @ 80D0A8C + thumb_func_start BT_Phase1Task +BT_Phase1Task: @ 80D0A8C push {r4,lr} sub sp, 0x4 lsls r0, 24 @@ -278,12 +278,12 @@ Phase1Task_TransitionAll: @ 80D0A8C movs r1, 0 movs r2, 0x2 movs r3, 0x2 - bl CreatePhase1Task + bl BT_CreatePhase1SubTask b _080D0AD4 .align 2, 0 _080D0AC0: .4byte gTasks _080D0AC4: - bl sub_80D3CA4 + bl BT_IsPhase1Done lsls r0, 24 cmp r0, 0 beq _080D0AD4 @@ -294,14 +294,14 @@ _080D0AD4: pop {r4} pop {r0} bx r0 - thumb_func_end Phase1Task_TransitionAll + thumb_func_end BT_Phase1Task - thumb_func_start sub_80D0ADC -sub_80D0ADC: @ 80D0ADC + thumb_func_start BT_Phase2Blur +BT_Phase2Blur: @ 80D0ADC push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D0B0C @ =gUnknown_83FA3C0 + ldr r5, _080D0B0C @ =sBT_Phase2BlurFuncs ldr r2, _080D0B10 @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -322,12 +322,12 @@ _080D0AEE: pop {r0} bx r0 .align 2, 0 -_080D0B0C: .4byte gUnknown_83FA3C0 +_080D0B0C: .4byte sBT_Phase2BlurFuncs _080D0B10: .4byte gTasks - thumb_func_end sub_80D0ADC + thumb_func_end BT_Phase2Blur - thumb_func_start sub_80D0B14 -sub_80D0B14: @ 80D0B14 + thumb_func_start BT_Phase2Blur_InitBgMosaic +BT_Phase2Blur_InitBgMosaic: @ 80D0B14 push {r4,lr} adds r4, r0, 0 movs r0, 0x4C @@ -349,10 +349,10 @@ sub_80D0B14: @ 80D0B14 pop {r4} pop {r1} bx r1 - thumb_func_end sub_80D0B14 + thumb_func_end BT_Phase2Blur_InitBgMosaic - thumb_func_start sub_80D0B48 -sub_80D0B48: @ 80D0B48 + thumb_func_start BT_Phase2Blur_Anim +BT_Phase2Blur_Anim: @ 80D0B48 push {r4,lr} sub sp, 0x4 adds r4, r0, 0 @@ -402,10 +402,10 @@ _080D0B9E: pop {r4} pop {r1} bx r1 - thumb_func_end sub_80D0B48 + thumb_func_end BT_Phase2Blur_Anim - thumb_func_start sub_80D0BA8 -sub_80D0BA8: @ 80D0BA8 + thumb_func_start BT_Phase2Blur_IsDone +BT_Phase2Blur_IsDone: @ 80D0BA8 push {lr} ldr r0, _080D0BCC @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -413,7 +413,7 @@ sub_80D0BA8: @ 80D0BA8 ands r0, r1 cmp r0, 0 bne _080D0BC4 - ldr r0, _080D0BD0 @ =sub_80D0ADC + ldr r0, _080D0BD0 @ =BT_Phase2Blur bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -424,15 +424,15 @@ _080D0BC4: bx r1 .align 2, 0 _080D0BCC: .4byte gPaletteFade -_080D0BD0: .4byte sub_80D0ADC - thumb_func_end sub_80D0BA8 +_080D0BD0: .4byte BT_Phase2Blur + thumb_func_end BT_Phase2Blur_IsDone - thumb_func_start sub_80D0BD4 -sub_80D0BD4: @ 80D0BD4 + thumb_func_start BT_Phase2DistortedWave +BT_Phase2DistortedWave: @ 80D0BD4 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D0C04 @ =gUnknown_83FA3CC + ldr r5, _080D0C04 @ =sBT_Phase2DistortedWaveFuncs ldr r2, _080D0C08 @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -453,16 +453,16 @@ _080D0BE6: pop {r0} bx r0 .align 2, 0 -_080D0C04: .4byte gUnknown_83FA3CC +_080D0C04: .4byte sBT_Phase2DistortedWaveFuncs _080D0C08: .4byte gTasks - thumb_func_end sub_80D0BD4 + thumb_func_end BT_Phase2DistortedWave - thumb_func_start sub_80D0C0C -sub_80D0C0C: @ 80D0C0C + thumb_func_start BT_Phase2DistortedWave_InitWave +BT_Phase2DistortedWave_InitWave: @ 80D0C0C push {r4,r5,lr} sub sp, 0x8 adds r5, r0, 0 - bl sub_80D3DD0 + bl BT_InitCtrlBlk bl ScanlineEffect_Clear movs r0, 0x1 negs r0, r0 @@ -473,7 +473,7 @@ sub_80D0C0C: @ 80D0C0C movs r3, 0x10 bl BeginNormalPaletteFade ldr r0, _080D0C68 @ =gScanlineEffectRegBuffers + 0x780 - ldr r1, _080D0C6C @ =gUnknown_2039A2C + ldr r1, _080D0C6C @ =sTransitionStructPtr ldr r1, [r1] movs r2, 0x14 ldrsh r1, [r1, r2] @@ -482,10 +482,10 @@ sub_80D0C0C: @ 80D0C0C str r2, [sp, 0x4] movs r2, 0 movs r3, 0x2 - bl sub_80D3E74 - ldr r0, _080D0C70 @ =sub_80D0CF0 + bl BT_LoadWaveIntoBuffer + ldr r0, _080D0C70 @ =VBCB_BT_Phase2DistortedWave bl SetVBlankCallback - ldr r0, _080D0C74 @ =sub_80D0D28 + ldr r0, _080D0C74 @ =HBCB_BT_Phase2DistortedWave bl SetHBlankCallback movs r0, 0x3 bl EnableInterrupts @@ -499,16 +499,16 @@ sub_80D0C0C: @ 80D0C0C bx r1 .align 2, 0 _080D0C68: .4byte gScanlineEffectRegBuffers + 0x780 -_080D0C6C: .4byte gUnknown_2039A2C -_080D0C70: .4byte sub_80D0CF0 -_080D0C74: .4byte sub_80D0D28 - thumb_func_end sub_80D0C0C +_080D0C6C: .4byte sTransitionStructPtr +_080D0C70: .4byte VBCB_BT_Phase2DistortedWave +_080D0C74: .4byte HBCB_BT_Phase2DistortedWave + thumb_func_end BT_Phase2DistortedWave_InitWave - thumb_func_start sub_80D0C78 -sub_80D0C78: @ 80D0C78 + thumb_func_start BT_Phase2DistortedWave_UpdateWave +BT_Phase2DistortedWave_UpdateWave: @ 80D0C78 push {r4,r5,lr} sub sp, 0x8 - ldr r4, _080D0CE0 @ =gUnknown_2039A2C + ldr r4, _080D0CE0 @ =sTransitionStructPtr ldr r2, [r4] ldrb r1, [r2] movs r1, 0 @@ -532,14 +532,14 @@ sub_80D0C78: @ 80D0C78 str r0, [sp, 0x4] adds r0, r3, 0 movs r3, 0x2 - bl sub_80D3E74 + bl BT_LoadWaveIntoBuffer ldr r0, _080D0CE8 @ =gPaletteFade ldrb r1, [r0, 0x7] movs r0, 0x80 ands r0, r1 cmp r0, 0 bne _080D0CCA - ldr r0, _080D0CEC @ =sub_80D0BD4 + ldr r0, _080D0CEC @ =BT_Phase2DistortedWave bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -556,17 +556,17 @@ _080D0CCA: pop {r1} bx r1 .align 2, 0 -_080D0CE0: .4byte gUnknown_2039A2C +_080D0CE0: .4byte sTransitionStructPtr _080D0CE4: .4byte gScanlineEffectRegBuffers _080D0CE8: .4byte gPaletteFade -_080D0CEC: .4byte sub_80D0BD4 - thumb_func_end sub_80D0C78 +_080D0CEC: .4byte BT_Phase2DistortedWave + thumb_func_end BT_Phase2DistortedWave_UpdateWave - thumb_func_start sub_80D0CF0 -sub_80D0CF0: @ 80D0CF0 + thumb_func_start VBCB_BT_Phase2DistortedWave +VBCB_BT_Phase2DistortedWave: @ 80D0CF0 push {lr} - bl sub_80D3DF4 - ldr r0, _080D0D18 @ =gUnknown_2039A2C + bl BT_VBSyncOamAndPltt + ldr r0, _080D0D18 @ =sTransitionStructPtr ldr r0, [r0] ldrb r0, [r0] cmp r0, 0 @@ -585,14 +585,14 @@ _080D0D14: pop {r0} bx r0 .align 2, 0 -_080D0D18: .4byte gUnknown_2039A2C +_080D0D18: .4byte sTransitionStructPtr _080D0D1C: .4byte 0x040000d4 _080D0D20: .4byte gScanlineEffectRegBuffers _080D0D24: .4byte 0x800000a0 - thumb_func_end sub_80D0CF0 + thumb_func_end VBCB_BT_Phase2DistortedWave - thumb_func_start sub_80D0D28 -sub_80D0D28: @ 80D0D28 + thumb_func_start HBCB_BT_Phase2DistortedWave +HBCB_BT_Phase2DistortedWave: @ 80D0D28 ldr r1, _080D0D48 @ =gScanlineEffectRegBuffers ldr r0, _080D0D4C @ =0x04000006 ldrh r0, [r0] @@ -613,14 +613,14 @@ sub_80D0D28: @ 80D0D28 _080D0D48: .4byte gScanlineEffectRegBuffers _080D0D4C: .4byte 0x04000006 _080D0D50: .4byte 0x04000014 - thumb_func_end sub_80D0D28 + thumb_func_end HBCB_BT_Phase2DistortedWave - thumb_func_start sub_80D0D54 -sub_80D0D54: @ 80D0D54 + thumb_func_start BT_Phase2HorizontalCorrugate +BT_Phase2HorizontalCorrugate: @ 80D0D54 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D0D84 @ =gUnknown_83FA3D4 + ldr r5, _080D0D84 @ =sBT_Phase2HorizontalCorrugateFuncs ldr r2, _080D0D88 @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -641,16 +641,16 @@ _080D0D66: pop {r0} bx r0 .align 2, 0 -_080D0D84: .4byte gUnknown_83FA3D4 +_080D0D84: .4byte sBT_Phase2HorizontalCorrugateFuncs _080D0D88: .4byte gTasks - thumb_func_end sub_80D0D54 + thumb_func_end BT_Phase2HorizontalCorrugate - thumb_func_start sub_80D0D8C -sub_80D0D8C: @ 80D0D8C + thumb_func_start BT_Phase2HorizontalCorrugate_Init +BT_Phase2HorizontalCorrugate_Init: @ 80D0D8C push {r4,lr} sub sp, 0x4 adds r4, r0, 0 - bl sub_80D3DD0 + bl BT_InitCtrlBlk bl ScanlineEffect_Clear movs r0, 0x1 negs r0, r0 @@ -660,7 +660,7 @@ sub_80D0D8C: @ 80D0D8C movs r2, 0 movs r3, 0x10 bl BeginNormalPaletteFade - ldr r0, _080D0DE0 @ =gUnknown_2039A2C + ldr r0, _080D0DE0 @ =sTransitionStructPtr ldr r1, [r0] ldr r0, _080D0DE4 @ =gScanlineEffectRegBuffers + 0x780 movs r2, 0x16 @@ -668,9 +668,9 @@ sub_80D0D8C: @ 80D0D8C movs r2, 0xA0 lsls r2, 1 bl memset - ldr r0, _080D0DE8 @ =sub_80D0E80 + ldr r0, _080D0DE8 @ =VBCB_BT_Phase2HorizontalCorrugate bl SetVBlankCallback - ldr r0, _080D0DEC @ =sub_80D0EB8 + ldr r0, _080D0DEC @ =HBCB_BT_Phase2HorizontalCorrugate bl SetHBlankCallback movs r0, 0x3 bl EnableInterrupts @@ -683,16 +683,16 @@ sub_80D0D8C: @ 80D0D8C pop {r1} bx r1 .align 2, 0 -_080D0DE0: .4byte gUnknown_2039A2C +_080D0DE0: .4byte sTransitionStructPtr _080D0DE4: .4byte gScanlineEffectRegBuffers + 0x780 -_080D0DE8: .4byte sub_80D0E80 -_080D0DEC: .4byte sub_80D0EB8 - thumb_func_end sub_80D0D8C +_080D0DE8: .4byte VBCB_BT_Phase2HorizontalCorrugate +_080D0DEC: .4byte HBCB_BT_Phase2HorizontalCorrugate + thumb_func_end BT_Phase2HorizontalCorrugate_Init - thumb_func_start sub_80D0DF0 -sub_80D0DF0: @ 80D0DF0 + thumb_func_start BT_Phase2HorizontalCorrugate_UpdateWave +BT_Phase2HorizontalCorrugate_UpdateWave: @ 80D0DF0 push {r4-r7,lr} - ldr r1, _080D0E70 @ =gUnknown_2039A2C + ldr r1, _080D0E70 @ =sTransitionStructPtr ldr r2, [r1] ldrb r1, [r2] movs r1, 0 @@ -718,7 +718,7 @@ _080D0E18: ldr r1, _080D0E74 @ =gScanlineEffectRegBuffers lsls r2, r5, 1 adds r2, r1 - ldr r6, _080D0E70 @ =gUnknown_2039A2C + ldr r6, _080D0E70 @ =sTransitionStructPtr ldr r1, [r6] ldrh r1, [r1, 0x16] adds r0, r1 @@ -739,7 +739,7 @@ _080D0E18: ands r0, r1 cmp r0, 0 bne _080D0E5E - ldr r0, _080D0E7C @ =sub_80D0D54 + ldr r0, _080D0E7C @ =BT_Phase2HorizontalCorrugate bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -755,17 +755,17 @@ _080D0E5E: pop {r1} bx r1 .align 2, 0 -_080D0E70: .4byte gUnknown_2039A2C +_080D0E70: .4byte sTransitionStructPtr _080D0E74: .4byte gScanlineEffectRegBuffers _080D0E78: .4byte gPaletteFade -_080D0E7C: .4byte sub_80D0D54 - thumb_func_end sub_80D0DF0 +_080D0E7C: .4byte BT_Phase2HorizontalCorrugate + thumb_func_end BT_Phase2HorizontalCorrugate_UpdateWave - thumb_func_start sub_80D0E80 -sub_80D0E80: @ 80D0E80 + thumb_func_start VBCB_BT_Phase2HorizontalCorrugate +VBCB_BT_Phase2HorizontalCorrugate: @ 80D0E80 push {lr} - bl sub_80D3DF4 - ldr r0, _080D0EA8 @ =gUnknown_2039A2C + bl BT_VBSyncOamAndPltt + ldr r0, _080D0EA8 @ =sTransitionStructPtr ldr r0, [r0] ldrb r0, [r0] cmp r0, 0 @@ -784,14 +784,14 @@ _080D0EA4: pop {r0} bx r0 .align 2, 0 -_080D0EA8: .4byte gUnknown_2039A2C +_080D0EA8: .4byte sTransitionStructPtr _080D0EAC: .4byte 0x040000d4 _080D0EB0: .4byte gScanlineEffectRegBuffers _080D0EB4: .4byte 0x800000a0 - thumb_func_end sub_80D0E80 + thumb_func_end VBCB_BT_Phase2HorizontalCorrugate - thumb_func_start sub_80D0EB8 -sub_80D0EB8: @ 80D0EB8 + thumb_func_start HBCB_BT_Phase2HorizontalCorrugate +HBCB_BT_Phase2HorizontalCorrugate: @ 80D0EB8 ldr r1, _080D0ED8 @ =gScanlineEffectRegBuffers ldr r0, _080D0EDC @ =0x04000006 ldrh r0, [r0] @@ -812,14 +812,14 @@ sub_80D0EB8: @ 80D0EB8 _080D0ED8: .4byte gScanlineEffectRegBuffers _080D0EDC: .4byte 0x04000006 _080D0EE0: .4byte 0x04000016 - thumb_func_end sub_80D0EB8 + thumb_func_end HBCB_BT_Phase2HorizontalCorrugate - thumb_func_start sub_80D0EE4 -sub_80D0EE4: @ 80D0EE4 + thumb_func_start BT_Phase2BigPokeball +BT_Phase2BigPokeball: @ 80D0EE4 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D0F14 @ =gUnknown_83FA3DC + ldr r5, _080D0F14 @ =sBT_Phase2BigPokeballFuncs ldr r2, _080D0F18 @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -840,16 +840,16 @@ _080D0EF6: pop {r0} bx r0 .align 2, 0 -_080D0F14: .4byte gUnknown_83FA3DC +_080D0F14: .4byte sBT_Phase2BigPokeballFuncs _080D0F18: .4byte gTasks - thumb_func_end sub_80D0EE4 + thumb_func_end BT_Phase2BigPokeball - thumb_func_start sub_80D0F1C -sub_80D0F1C: @ 80D0F1C + thumb_func_start BT_Phase2BigPokeball_Init +BT_Phase2BigPokeball_Init: @ 80D0F1C push {r4-r6,lr} sub sp, 0xC adds r4, r0, 0 - bl sub_80D3DD0 + bl BT_InitCtrlBlk bl ScanlineEffect_Clear movs r1, 0 movs r0, 0x10 @@ -859,7 +859,7 @@ sub_80D0F1C: @ 80D0F1C movs r0, 0x80 lsls r0, 7 strh r0, [r4, 0x12] - ldr r0, _080D0FB8 @ =gUnknown_2039A2C + ldr r0, _080D0FB8 @ =sTransitionStructPtr ldr r2, [r0] movs r0, 0x3F strh r0, [r2, 0x2] @@ -889,11 +889,11 @@ _080D0F64: lsrs r1, r0, 16 cmp r1, 0x9F bls _080D0F64 - ldr r0, _080D0FC4 @ =sub_80D1370 + ldr r0, _080D0FC4 @ =VBCB_BT_Phase2BigPokeball1 bl SetVBlankCallback adds r0, r5, 0 adds r1, r6, 0 - bl sub_80D3E28 + bl BT_GetBg0TilemapAndTilesetBase mov r1, sp movs r0, 0 strh r0, [r1] @@ -901,12 +901,12 @@ _080D0F64: ldr r2, _080D0FC8 @ =0x01000400 mov r0, sp bl CpuSet - ldr r0, _080D0FCC @ =gUnknown_83F87A0 + ldr r0, _080D0FCC @ =sBigPokeballTileset ldr r1, [sp, 0x8] movs r2, 0xB0 lsls r2, 2 bl CpuSet - ldr r0, _080D0FD0 @ =gUnknown_83FA638 + ldr r0, _080D0FD0 @ =sSlidingPokeballBigPokeballPalette movs r1, 0xF0 movs r2, 0x20 bl LoadPalette @@ -919,27 +919,27 @@ _080D0F64: pop {r1} bx r1 .align 2, 0 -_080D0FB8: .4byte gUnknown_2039A2C +_080D0FB8: .4byte sTransitionStructPtr _080D0FBC: .4byte 0x00003f41 _080D0FC0: .4byte gScanlineEffectRegBuffers + 0x780 -_080D0FC4: .4byte sub_80D1370 +_080D0FC4: .4byte VBCB_BT_Phase2BigPokeball1 _080D0FC8: .4byte 0x01000400 -_080D0FCC: .4byte gUnknown_83F87A0 -_080D0FD0: .4byte gUnknown_83FA638 - thumb_func_end sub_80D0F1C +_080D0FCC: .4byte sBigPokeballTileset +_080D0FD0: .4byte sSlidingPokeballBigPokeballPalette + thumb_func_end BT_Phase2BigPokeball_Init - thumb_func_start sub_80D0FD4 -sub_80D0FD4: @ 80D0FD4 + thumb_func_start BT_Phase2BigPokeball_LoadTilemapAndWave +BT_Phase2BigPokeball_LoadTilemapAndWave: @ 80D0FD4 push {r4-r7,lr} mov r7, r9 mov r6, r8 push {r6,r7} sub sp, 0x10 adds r7, r0, 0 - ldr r5, _080D105C @ =gUnknown_83FA784 + ldr r5, _080D105C @ =sBigPokeballTilemap add r1, sp, 0xC add r0, sp, 0x8 - bl sub_80D3E28 + bl BT_GetBg0TilemapAndTilesetBase movs r1, 0 ldr r0, [sp, 0x8] mov r9, r0 @@ -986,7 +986,7 @@ _080D1000: mov r0, r8 movs r1, 0 movs r3, 0x84 - bl sub_80D3E74 + bl BT_LoadWaveIntoBuffer ldrh r0, [r7, 0x8] adds r0, 0x1 strh r0, [r7, 0x8] @@ -999,16 +999,16 @@ _080D1000: pop {r1} bx r1 .align 2, 0 -_080D105C: .4byte gUnknown_83FA784 +_080D105C: .4byte sBigPokeballTilemap _080D1060: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D0FD4 + thumb_func_end BT_Phase2BigPokeball_LoadTilemapAndWave - thumb_func_start sub_80D1064 -sub_80D1064: @ 80D1064 + thumb_func_start BT_Phase2BigPokeball_UpdateWave1IncEva +BT_Phase2BigPokeball_UpdateWave1IncEva: @ 80D1064 push {r4,r5,lr} sub sp, 0x8 adds r3, r0, 0 - ldr r2, _080D10EC @ =gUnknown_2039A2C + ldr r2, _080D10EC @ =sTransitionStructPtr ldr r1, [r2] ldrb r0, [r1] movs r0, 0 @@ -1063,7 +1063,7 @@ _080D10AE: str r1, [sp, 0x4] movs r1, 0 movs r3, 0x84 - bl sub_80D3E74 + bl BT_LoadWaveIntoBuffer ldr r1, [r4] ldrb r0, [r1] adds r0, 0x1 @@ -1075,17 +1075,17 @@ _080D10AE: pop {r1} bx r1 .align 2, 0 -_080D10EC: .4byte gUnknown_2039A2C +_080D10EC: .4byte sTransitionStructPtr _080D10F0: .4byte 0xfffffe80 _080D10F4: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D1064 + thumb_func_end BT_Phase2BigPokeball_UpdateWave1IncEva - thumb_func_start sub_80D10F8 -sub_80D10F8: @ 80D10F8 + thumb_func_start BT_Phase2BigPokeball_UpdateWave2DecEvb +BT_Phase2BigPokeball_UpdateWave2DecEvb: @ 80D10F8 push {r4,lr} sub sp, 0x8 adds r3, r0, 0 - ldr r2, _080D1158 @ =gUnknown_2039A2C + ldr r2, _080D1158 @ =sTransitionStructPtr ldr r1, [r2] ldrb r0, [r1] movs r0, 0 @@ -1133,7 +1133,7 @@ _080D1140: adds r0, r1, r4 b _080D1162 .align 2, 0 -_080D1158: .4byte gUnknown_2039A2C +_080D1158: .4byte sTransitionStructPtr _080D115C: .4byte 0xfffffe80 _080D1160: movs r0, 0 @@ -1150,8 +1150,8 @@ _080D1162: str r1, [sp, 0x4] movs r1, 0 movs r3, 0x84 - bl sub_80D3E74 - ldr r0, _080D1198 @ =gUnknown_2039A2C + bl BT_LoadWaveIntoBuffer + ldr r0, _080D1198 @ =sTransitionStructPtr ldr r1, [r0] ldrb r0, [r1] adds r0, 0x1 @@ -1164,15 +1164,15 @@ _080D1162: bx r1 .align 2, 0 _080D1194: .4byte gScanlineEffectRegBuffers -_080D1198: .4byte gUnknown_2039A2C - thumb_func_end sub_80D10F8 +_080D1198: .4byte sTransitionStructPtr + thumb_func_end BT_Phase2BigPokeball_UpdateWave2DecEvb - thumb_func_start sub_80D119C -sub_80D119C: @ 80D119C + thumb_func_start BT_Phase2BigPokeball_UpdateWave3 +BT_Phase2BigPokeball_UpdateWave3: @ 80D119C push {r4,r5,lr} sub sp, 0x8 adds r4, r0, 0 - ldr r0, _080D11C4 @ =gUnknown_2039A2C + ldr r0, _080D11C4 @ =sTransitionStructPtr ldr r0, [r0] ldrb r1, [r0] movs r2, 0 @@ -1190,7 +1190,7 @@ sub_80D119C: @ 80D119C strh r0, [r4, 0x12] b _080D11CE .align 2, 0 -_080D11C4: .4byte gUnknown_2039A2C +_080D11C4: .4byte sTransitionStructPtr _080D11C8: .4byte 0xfffffe80 _080D11CC: strh r2, [r4, 0x12] @@ -1206,7 +1206,7 @@ _080D11CE: str r5, [sp, 0x4] movs r1, 0 movs r3, 0x84 - bl sub_80D3E74 + bl BT_LoadWaveIntoBuffer movs r1, 0x12 ldrsh r0, [r4, r1] cmp r0, 0 @@ -1221,7 +1221,7 @@ _080D11CE: strh r0, [r4, 0xC] strh r1, [r4, 0xE] _080D1202: - ldr r0, _080D121C @ =gUnknown_2039A2C + ldr r0, _080D121C @ =sTransitionStructPtr ldr r1, [r0] ldrb r0, [r1] adds r0, 0x1 @@ -1234,14 +1234,14 @@ _080D1202: bx r1 .align 2, 0 _080D1218: .4byte gScanlineEffectRegBuffers -_080D121C: .4byte gUnknown_2039A2C - thumb_func_end sub_80D119C +_080D121C: .4byte sTransitionStructPtr + thumb_func_end BT_Phase2BigPokeball_UpdateWave3 - thumb_func_start sub_80D1220 -sub_80D1220: @ 80D1220 + thumb_func_start BT_Phase2BigPokeball_CircleEffect +BT_Phase2BigPokeball_CircleEffect: @ 80D1220 push {r4,lr} adds r4, r0, 0 - ldr r0, _080D12C4 @ =gUnknown_2039A2C + ldr r0, _080D12C4 @ =sTransitionStructPtr ldr r0, [r0] ldrb r1, [r0] movs r3, 0 @@ -1277,7 +1277,7 @@ _080D125E: ldrsh r3, [r4, r1] movs r1, 0x78 movs r2, 0x50 - bl sub_80D3EF0 + bl BT_GenerateCircle movs r2, 0xA ldrsh r0, [r4, r2] cmp r0, 0 @@ -1292,8 +1292,8 @@ _080D125E: ands r0, r2 strh r0, [r1, 0xA] ldrh r0, [r1, 0xA] - bl sub_80D3E60 - ldr r0, _080D12DC @ =sub_80D0EE4 + bl BT_BlendPalettesToBlack + ldr r0, _080D12DC @ =BT_Phase2BigPokeball bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -1306,10 +1306,10 @@ _080D129A: bne _080D12AE adds r0, r1, 0x1 strh r0, [r4, 0xE] - ldr r0, _080D12E0 @ =sub_80D139C + ldr r0, _080D12E0 @ =VBCB_BT_Phase2BigPokeball2 bl SetVBlankCallback _080D12AE: - ldr r0, _080D12C4 @ =gUnknown_2039A2C + ldr r0, _080D12C4 @ =sTransitionStructPtr ldr r1, [r0] ldrb r0, [r1] adds r0, 0x1 @@ -1320,18 +1320,18 @@ _080D12AE: pop {r1} bx r1 .align 2, 0 -_080D12C4: .4byte gUnknown_2039A2C +_080D12C4: .4byte sTransitionStructPtr _080D12C8: .4byte 0x000007ff _080D12CC: .4byte gScanlineEffectRegBuffers _080D12D0: .4byte 0x040000b0 _080D12D4: .4byte 0x0000c5ff _080D12D8: .4byte 0x00007fff -_080D12DC: .4byte sub_80D0EE4 -_080D12E0: .4byte sub_80D139C - thumb_func_end sub_80D1220 +_080D12DC: .4byte BT_Phase2BigPokeball +_080D12E0: .4byte VBCB_BT_Phase2BigPokeball2 + thumb_func_end BT_Phase2BigPokeball_CircleEffect - thumb_func_start sub_80D12E4 -sub_80D12E4: @ 80D12E4 + thumb_func_start BT_VBStopDma0SyncSrcBufferSetLcdRegs +BT_VBStopDma0SyncSrcBufferSetLcdRegs: @ 80D12E4 push {r4,lr} ldr r1, _080D1354 @ =0x040000b0 ldrh r2, [r1, 0xA] @@ -1343,8 +1343,8 @@ sub_80D12E4: @ 80D12E4 ands r0, r2 strh r0, [r1, 0xA] ldrh r0, [r1, 0xA] - bl sub_80D3DF4 - ldr r4, _080D1360 @ =gUnknown_2039A2C + bl BT_VBSyncOamAndPltt + ldr r4, _080D1360 @ =sTransitionStructPtr ldr r0, [r4] ldrb r0, [r0] cmp r0, 0 @@ -1387,16 +1387,16 @@ _080D131C: _080D1354: .4byte 0x040000b0 _080D1358: .4byte 0x0000c5ff _080D135C: .4byte 0x00007fff -_080D1360: .4byte gUnknown_2039A2C +_080D1360: .4byte sTransitionStructPtr _080D1364: .4byte 0x040000d4 _080D1368: .4byte gScanlineEffectRegBuffers _080D136C: .4byte 0x800000a0 - thumb_func_end sub_80D12E4 + thumb_func_end BT_VBStopDma0SyncSrcBufferSetLcdRegs - thumb_func_start sub_80D1370 -sub_80D1370: @ 80D1370 + thumb_func_start VBCB_BT_Phase2BigPokeball1 +VBCB_BT_Phase2BigPokeball1: @ 80D1370 push {lr} - bl sub_80D12E4 + bl BT_VBStopDma0SyncSrcBufferSetLcdRegs ldr r1, _080D138C @ =0x040000b0 ldr r0, _080D1390 @ =gScanlineEffectRegBuffers + 0x780 str r0, [r1] @@ -1412,12 +1412,12 @@ _080D138C: .4byte 0x040000b0 _080D1390: .4byte gScanlineEffectRegBuffers + 0x780 _080D1394: .4byte 0x04000010 _080D1398: .4byte 0xa2400001 - thumb_func_end sub_80D1370 + thumb_func_end VBCB_BT_Phase2BigPokeball1 - thumb_func_start sub_80D139C -sub_80D139C: @ 80D139C + thumb_func_start VBCB_BT_Phase2BigPokeball2 +VBCB_BT_Phase2BigPokeball2: @ 80D139C push {lr} - bl sub_80D12E4 + bl BT_VBStopDma0SyncSrcBufferSetLcdRegs ldr r1, _080D13B8 @ =0x040000b0 ldr r0, _080D13BC @ =gScanlineEffectRegBuffers + 0x780 str r0, [r1] @@ -1433,14 +1433,14 @@ _080D13B8: .4byte 0x040000b0 _080D13BC: .4byte gScanlineEffectRegBuffers + 0x780 _080D13C0: .4byte 0x04000040 _080D13C4: .4byte 0xa2400001 - thumb_func_end sub_80D139C + thumb_func_end VBCB_BT_Phase2BigPokeball2 - thumb_func_start sub_80D13C8 -sub_80D13C8: @ 80D13C8 + thumb_func_start BT_Phase2SlidingPokeballs +BT_Phase2SlidingPokeballs: @ 80D13C8 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D13F8 @ =gUnknown_83FA3F4 + ldr r5, _080D13F8 @ =sBT_Phase2SlidingPokeballsFuncs ldr r2, _080D13FC @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -1461,19 +1461,19 @@ _080D13DA: pop {r0} bx r0 .align 2, 0 -_080D13F8: .4byte gUnknown_83FA3F4 +_080D13F8: .4byte sBT_Phase2SlidingPokeballsFuncs _080D13FC: .4byte gTasks - thumb_func_end sub_80D13C8 + thumb_func_end BT_Phase2SlidingPokeballs - thumb_func_start Phase2_Transition_PokeballsTrail_Func1 -Phase2_Transition_PokeballsTrail_Func1: @ 80D1400 + thumb_func_start BT_Phase2SlidingPokeballs_LoadBgGfx +BT_Phase2SlidingPokeballs_LoadBgGfx: @ 80D1400 push {r4,lr} sub sp, 0xC adds r4, r0, 0 add r0, sp, 0x4 add r1, sp, 0x8 - bl sub_80D3E28 - ldr r0, _080D1440 @ =gUnknown_83F8D20 + bl BT_GetBg0TilemapAndTilesetBase + ldr r0, _080D1440 @ =sSlidingPokeballTilemap ldr r1, [sp, 0x8] movs r2, 0x20 bl CpuSet @@ -1483,7 +1483,7 @@ Phase2_Transition_PokeballsTrail_Func1: @ 80D1400 ldr r2, _080D1444 @ =0x05000200 mov r0, sp bl CpuSet - ldr r0, _080D1448 @ =gUnknown_83FA638 + ldr r0, _080D1448 @ =sSlidingPokeballBigPokeballPalette movs r1, 0xF0 movs r2, 0x20 bl LoadPalette @@ -1496,13 +1496,13 @@ Phase2_Transition_PokeballsTrail_Func1: @ 80D1400 pop {r1} bx r1 .align 2, 0 -_080D1440: .4byte gUnknown_83F8D20 +_080D1440: .4byte sSlidingPokeballTilemap _080D1444: .4byte 0x05000200 -_080D1448: .4byte gUnknown_83FA638 - thumb_func_end Phase2_Transition_PokeballsTrail_Func1 +_080D1448: .4byte sSlidingPokeballBigPokeballPalette + thumb_func_end BT_Phase2SlidingPokeballs_LoadBgGfx - thumb_func_start Phase2_Transition_PokeballsTrail_Func2 -Phase2_Transition_PokeballsTrail_Func2: @ 80D144C + thumb_func_start BT_Phase2SlidingPokeballs_SetupFldeffArgs +BT_Phase2SlidingPokeballs_SetupFldeffArgs: @ 80D144C push {r4-r7,lr} mov r7, r8 push {r7} @@ -1568,18 +1568,18 @@ _080D147A: _080D14CC: .4byte gUnknown_83FA400 _080D14D0: .4byte gUnknown_83FA404 _080D14D4: .4byte gFieldEffectArguments - thumb_func_end Phase2_Transition_PokeballsTrail_Func2 + thumb_func_end BT_Phase2SlidingPokeballs_SetupFldeffArgs - thumb_func_start Phase2_Transition_PokeballsTrail_Func3 -Phase2_Transition_PokeballsTrail_Func3: @ 80D14D8 + thumb_func_start BT_Phase2SlidingPokeballs_IsDone +BT_Phase2SlidingPokeballs_IsDone: @ 80D14D8 push {lr} movs r0, 0x2D bl FieldEffectActiveListContains lsls r0, 24 cmp r0, 0 bne _080D14F8 - bl sub_80D3E60 - ldr r0, _080D1500 @ =sub_80D13C8 + bl BT_BlendPalettesToBlack + ldr r0, _080D1500 @ =BT_Phase2SlidingPokeballs bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -1589,13 +1589,13 @@ _080D14F8: pop {r1} bx r1 .align 2, 0 -_080D1500: .4byte sub_80D13C8 - thumb_func_end Phase2_Transition_PokeballsTrail_Func3 +_080D1500: .4byte BT_Phase2SlidingPokeballs + thumb_func_end BT_Phase2SlidingPokeballs_IsDone thumb_func_start FldEff_Pokeball FldEff_Pokeball: @ 80D1504 push {r4,r5,lr} - ldr r0, _080D1560 @ =gUnknown_83FA5CC + ldr r0, _080D1560 @ =sSpriteTemplate_SlidingPokeball ldr r5, _080D1564 @ =gFieldEffectArguments movs r2, 0 ldrsh r1, [r5, r2] @@ -1638,14 +1638,14 @@ FldEff_Pokeball: @ 80D1504 pop {r1} bx r1 .align 2, 0 -_080D1560: .4byte gUnknown_83FA5CC +_080D1560: .4byte sSpriteTemplate_SlidingPokeball _080D1564: .4byte gFieldEffectArguments _080D1568: .4byte gSprites _080D156C: .4byte 0x0000ffff thumb_func_end FldEff_Pokeball - thumb_func_start sub_80D1570 -sub_80D1570: @ 80D1570 + thumb_func_start SpriteCB_BT_Phase2SlidingPokeballs +SpriteCB_BT_Phase2SlidingPokeballs: @ 80D1570 push {r4-r6,lr} sub sp, 0x4 adds r4, r0, 0 @@ -1745,14 +1745,14 @@ _080D162A: bx r0 .align 2, 0 _080D1634: .4byte 0x0000f001 - thumb_func_end sub_80D1570 + thumb_func_end SpriteCB_BT_Phase2SlidingPokeballs - thumb_func_start sub_80D1638 -sub_80D1638: @ 80D1638 + thumb_func_start BT_Phase2ClockwiseBlackFade +BT_Phase2ClockwiseBlackFade: @ 80D1638 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D1668 @ =gUnknown_83FA414 + ldr r5, _080D1668 @ =sBT_Phase2ClockwiseBlackFadeFuncs ldr r2, _080D166C @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -1773,17 +1773,17 @@ _080D164A: pop {r0} bx r0 .align 2, 0 -_080D1668: .4byte gUnknown_83FA414 +_080D1668: .4byte sBT_Phase2ClockwiseBlackFadeFuncs _080D166C: .4byte gTasks - thumb_func_end sub_80D1638 + thumb_func_end BT_Phase2ClockwiseBlackFade - thumb_func_start sub_80D1670 -sub_80D1670: @ 80D1670 + thumb_func_start BT_Phase2ClockwiseBlackFade_Init +BT_Phase2ClockwiseBlackFade_Init: @ 80D1670 push {r4,lr} adds r4, r0, 0 - bl sub_80D3DD0 + bl BT_InitCtrlBlk bl ScanlineEffect_Clear - ldr r0, _080D16C4 @ =gUnknown_2039A2C + ldr r0, _080D16C4 @ =sTransitionStructPtr ldr r1, [r0] movs r0, 0 strh r0, [r1, 0x2] @@ -1805,9 +1805,9 @@ _080D1696: lsrs r1, r0, 16 cmp r1, 0x9F bls _080D1696 - ldr r0, _080D16D4 @ =sub_80D1ABC + ldr r0, _080D16D4 @ =VBCB_BT_Phase2ClockwiseBlackFade bl SetVBlankCallback - ldr r0, _080D16C4 @ =gUnknown_2039A2C + ldr r0, _080D16C4 @ =sTransitionStructPtr ldr r1, [r0] movs r0, 0x78 strh r0, [r1, 0x2C] @@ -1819,19 +1819,19 @@ _080D1696: pop {r1} bx r1 .align 2, 0 -_080D16C4: .4byte gUnknown_2039A2C +_080D16C4: .4byte sTransitionStructPtr _080D16C8: .4byte 0x0000f0f1 _080D16CC: .4byte gScanlineEffectRegBuffers + 0x780 _080D16D0: .4byte 0x0000f3f4 -_080D16D4: .4byte sub_80D1ABC - thumb_func_end sub_80D1670 +_080D16D4: .4byte VBCB_BT_Phase2ClockwiseBlackFade + thumb_func_end BT_Phase2ClockwiseBlackFade_Init - thumb_func_start sub_80D16D8 -sub_80D16D8: @ 80D16D8 + thumb_func_start BT_Phase2ClockwiseBlackFade_Step1 +BT_Phase2ClockwiseBlackFade_Step1: @ 80D16D8 push {r4-r7,lr} sub sp, 0xC adds r6, r0, 0 - ldr r2, _080D1760 @ =gUnknown_2039A2C + ldr r2, _080D1760 @ =sTransitionStructPtr ldr r1, [r2] ldrb r0, [r1] movs r0, 0 @@ -1849,10 +1849,10 @@ sub_80D16D8: @ 80D16D8 str r1, [sp, 0x8] movs r1, 0x78 movs r2, 0x50 - bl sub_80D4088 + bl BT_DiagonalSegment_InitParams ldr r5, _080D1764 @ =gScanlineEffectRegBuffers _080D1708: - ldr r4, _080D1760 @ =gUnknown_2039A2C + ldr r4, _080D1760 @ =sTransitionStructPtr ldr r0, [r4] movs r7, 0x2A ldrsh r3, [r0, r7] @@ -1868,7 +1868,7 @@ _080D1708: adds r0, 0x24 movs r1, 0x1 movs r2, 0x1 - bl sub_80D4104 + bl BT_DiagonalSegment_ComputePointOnSegment lsls r0, 24 cmp r0, 0 beq _080D1708 @@ -1897,12 +1897,12 @@ _080D174C: pop {r1} bx r1 .align 2, 0 -_080D1760: .4byte gUnknown_2039A2C +_080D1760: .4byte sTransitionStructPtr _080D1764: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D16D8 + thumb_func_end BT_Phase2ClockwiseBlackFade_Step1 - thumb_func_start sub_80D1768 -sub_80D1768: @ 80D1768 + thumb_func_start BT_Phase2ClockwiseBlackFade_Step2 +BT_Phase2ClockwiseBlackFade_Step2: @ 80D1768 push {r4-r7,lr} mov r7, r9 mov r6, r8 @@ -1912,7 +1912,7 @@ sub_80D1768: @ 80D1768 add r1, sp, 0xC movs r0, 0 strb r0, [r1] - ldr r4, _080D17EC @ =gUnknown_2039A2C + ldr r4, _080D17EC @ =sTransitionStructPtr ldr r1, [r4] ldrb r0, [r1] movs r0, 0 @@ -1929,7 +1929,7 @@ sub_80D1768: @ 80D1768 movs r1, 0x78 movs r2, 0x50 movs r3, 0xF0 - bl sub_80D4088 + bl BT_DiagonalSegment_InitParams mov r9, r4 mov r7, r9 add r5, sp, 0xC @@ -1965,11 +1965,11 @@ _080D17BE: adds r0, 0x24 movs r1, 0x1 movs r2, 0x1 - bl sub_80D4104 + bl BT_DiagonalSegment_ComputePointOnSegment strb r0, [r5] b _080D17A6 .align 2, 0 -_080D17EC: .4byte gUnknown_2039A2C +_080D17EC: .4byte sTransitionStructPtr _080D17F0: .4byte gScanlineEffectRegBuffers _080D17F4: ldr r1, [r7] @@ -1993,7 +1993,7 @@ _080D1812: cmp r0, r2 bge _080D183A adds r3, r4, 0 - ldr r5, _080D1858 @ =gUnknown_2039A2C + ldr r5, _080D1858 @ =sTransitionStructPtr _080D181E: ldr r2, [r5] ldrh r0, [r2, 0x2A] @@ -2025,15 +2025,15 @@ _080D183A: pop {r1} bx r1 .align 2, 0 -_080D1858: .4byte gUnknown_2039A2C - thumb_func_end sub_80D1768 +_080D1858: .4byte sTransitionStructPtr + thumb_func_end BT_Phase2ClockwiseBlackFade_Step2 - thumb_func_start sub_80D185C -sub_80D185C: @ 80D185C + thumb_func_start BT_Phase2ClockwiseBlackFade_Step3 +BT_Phase2ClockwiseBlackFade_Step3: @ 80D185C push {r4-r6,lr} sub sp, 0xC adds r6, r0, 0 - ldr r2, _080D18DC @ =gUnknown_2039A2C + ldr r2, _080D18DC @ =sTransitionStructPtr ldr r1, [r2] ldrb r0, [r1] movs r0, 0 @@ -2050,10 +2050,10 @@ sub_80D185C: @ 80D185C str r1, [sp, 0x8] movs r1, 0x78 movs r2, 0x50 - bl sub_80D4088 + bl BT_DiagonalSegment_InitParams ldr r5, _080D18E0 @ =gScanlineEffectRegBuffers _080D188A: - ldr r4, _080D18DC @ =gUnknown_2039A2C + ldr r4, _080D18DC @ =sTransitionStructPtr ldr r0, [r4] movs r1, 0x2A ldrsh r3, [r0, r1] @@ -2067,7 +2067,7 @@ _080D188A: adds r0, 0x24 movs r1, 0x1 movs r2, 0x1 - bl sub_80D4104 + bl BT_DiagonalSegment_ComputePointOnSegment lsls r0, 24 cmp r0, 0 beq _080D188A @@ -2095,12 +2095,12 @@ _080D18C8: pop {r1} bx r1 .align 2, 0 -_080D18DC: .4byte gUnknown_2039A2C +_080D18DC: .4byte sTransitionStructPtr _080D18E0: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D185C + thumb_func_end BT_Phase2ClockwiseBlackFade_Step3 - thumb_func_start sub_80D18E4 -sub_80D18E4: @ 80D18E4 + thumb_func_start BT_Phase2ClockwiseBlackFade_Step4 +BT_Phase2ClockwiseBlackFade_Step4: @ 80D18E4 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -2111,7 +2111,7 @@ sub_80D18E4: @ 80D18E4 add r1, sp, 0xC movs r0, 0 strb r0, [r1] - ldr r4, _080D196C @ =gUnknown_2039A2C + ldr r4, _080D196C @ =sTransitionStructPtr ldr r1, [r4] ldrb r0, [r1] movs r0, 0 @@ -2128,10 +2128,10 @@ sub_80D18E4: @ 80D18E4 movs r1, 0x78 movs r2, 0x50 movs r3, 0 - bl sub_80D4088 + bl BT_DiagonalSegment_InitParams ldr r7, _080D1970 @ =gScanlineEffectRegBuffers mov r10, r7 - ldr r0, _080D196C @ =gUnknown_2039A2C + ldr r0, _080D196C @ =sTransitionStructPtr mov r8, r0 add r6, sp, 0xC _080D1928: @@ -2166,11 +2166,11 @@ _080D1948: adds r0, 0x24 movs r1, 0x1 movs r2, 0x1 - bl sub_80D4104 + bl BT_DiagonalSegment_ComputePointOnSegment strb r0, [r6] b _080D1928 .align 2, 0 -_080D196C: .4byte gUnknown_2039A2C +_080D196C: .4byte sTransitionStructPtr _080D1970: .4byte gScanlineEffectRegBuffers _080D1974: mov r0, r8 @@ -2195,7 +2195,7 @@ _080D1992: ble _080D19BC ldr r6, _080D19DC @ =gScanlineEffectRegBuffers adds r3, r1, 0 - ldr r5, _080D19E0 @ =gUnknown_2039A2C + ldr r5, _080D19E0 @ =sTransitionStructPtr _080D19A0: ldr r2, [r5] ldrh r0, [r2, 0x2A] @@ -2212,7 +2212,7 @@ _080D19A0: cmp r1, r0 bgt _080D19A0 _080D19BC: - ldr r7, _080D19E0 @ =gUnknown_2039A2C + ldr r7, _080D19E0 @ =sTransitionStructPtr ldr r0, [r7] ldrb r1, [r0] adds r1, 0x1 @@ -2229,15 +2229,15 @@ _080D19BC: bx r1 .align 2, 0 _080D19DC: .4byte gScanlineEffectRegBuffers -_080D19E0: .4byte gUnknown_2039A2C - thumb_func_end sub_80D18E4 +_080D19E0: .4byte sTransitionStructPtr + thumb_func_end BT_Phase2ClockwiseBlackFade_Step4 - thumb_func_start sub_80D19E4 -sub_80D19E4: @ 80D19E4 + thumb_func_start BT_Phase2ClockwiseBlackFade_Step5 +BT_Phase2ClockwiseBlackFade_Step5: @ 80D19E4 push {r4-r7,lr} sub sp, 0xC adds r7, r0, 0 - ldr r1, _080D1A74 @ =gUnknown_2039A2C + ldr r1, _080D1A74 @ =sTransitionStructPtr ldr r0, [r1] ldrb r2, [r0] movs r2, 0 @@ -2253,11 +2253,11 @@ sub_80D19E4: @ 80D19E4 str r1, [sp, 0x8] movs r1, 0x78 movs r2, 0x50 - bl sub_80D4088 + bl BT_DiagonalSegment_InitParams ldr r6, _080D1A78 @ =gScanlineEffectRegBuffers _080D1A10: movs r2, 0x78 - ldr r5, _080D1A74 @ =gUnknown_2039A2C + ldr r5, _080D1A74 @ =sTransitionStructPtr ldr r3, [r5] ldrh r4, [r3, 0x28] movs r1, 0x28 @@ -2280,7 +2280,7 @@ _080D1A24: adds r0, 0x24 movs r1, 0x1 movs r2, 0x1 - bl sub_80D4104 + bl BT_DiagonalSegment_ComputePointOnSegment lsls r0, 24 cmp r0, 0 beq _080D1A10 @@ -2307,12 +2307,12 @@ _080D1A5E: pop {r1} bx r1 .align 2, 0 -_080D1A74: .4byte gUnknown_2039A2C +_080D1A74: .4byte sTransitionStructPtr _080D1A78: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D19E4 + thumb_func_end BT_Phase2ClockwiseBlackFade_Step5 - thumb_func_start sub_80D1A7C -sub_80D1A7C: @ 80D1A7C + thumb_func_start BT_Phase2ClockwiseBlackFade_End +BT_Phase2ClockwiseBlackFade_End: @ 80D1A7C push {lr} ldr r1, _080D1AAC @ =0x040000b0 ldrh r2, [r1, 0xA] @@ -2324,8 +2324,8 @@ sub_80D1A7C: @ 80D1A7C ands r0, r2 strh r0, [r1, 0xA] ldrh r0, [r1, 0xA] - bl sub_80D3E60 - ldr r0, _080D1AB8 @ =sub_80D1638 + bl BT_BlendPalettesToBlack + ldr r0, _080D1AB8 @ =BT_Phase2ClockwiseBlackFade bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -2337,11 +2337,11 @@ sub_80D1A7C: @ 80D1A7C _080D1AAC: .4byte 0x040000b0 _080D1AB0: .4byte 0x0000c5ff _080D1AB4: .4byte 0x00007fff -_080D1AB8: .4byte sub_80D1638 - thumb_func_end sub_80D1A7C +_080D1AB8: .4byte BT_Phase2ClockwiseBlackFade + thumb_func_end BT_Phase2ClockwiseBlackFade_End - thumb_func_start sub_80D1ABC -sub_80D1ABC: @ 80D1ABC + thumb_func_start VBCB_BT_Phase2ClockwiseBlackFade +VBCB_BT_Phase2ClockwiseBlackFade: @ 80D1ABC push {r4,r5,lr} ldr r5, _080D1B34 @ =0x040000b0 ldrh r1, [r5, 0xA] @@ -2353,8 +2353,8 @@ sub_80D1ABC: @ 80D1ABC ands r0, r1 strh r0, [r5, 0xA] ldrh r0, [r5, 0xA] - bl sub_80D3DF4 - ldr r4, _080D1B40 @ =gUnknown_2039A2C + bl BT_VBSyncOamAndPltt + ldr r4, _080D1B40 @ =sTransitionStructPtr ldr r0, [r4] ldrb r0, [r0] cmp r0, 0 @@ -2402,20 +2402,20 @@ _080D1AF4: _080D1B34: .4byte 0x040000b0 _080D1B38: .4byte 0x0000c5ff _080D1B3C: .4byte 0x00007fff -_080D1B40: .4byte gUnknown_2039A2C +_080D1B40: .4byte sTransitionStructPtr _080D1B44: .4byte 0x040000d4 _080D1B48: .4byte gScanlineEffectRegBuffers _080D1B4C: .4byte 0x800000a0 _080D1B50: .4byte 0x04000040 _080D1B54: .4byte 0xa2400001 - thumb_func_end sub_80D1ABC + thumb_func_end VBCB_BT_Phase2ClockwiseBlackFade - thumb_func_start sub_80D1B58 -sub_80D1B58: @ 80D1B58 + thumb_func_start BT_Phase2FullScreenWave +BT_Phase2FullScreenWave: @ 80D1B58 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D1B88 @ =gUnknown_83FA430 + ldr r5, _080D1B88 @ =sBT_Phase2FullScreenWaveFuncs ldr r2, _080D1B8C @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -2436,19 +2436,19 @@ _080D1B6A: pop {r0} bx r0 .align 2, 0 -_080D1B88: .4byte gUnknown_83FA430 +_080D1B88: .4byte sBT_Phase2FullScreenWaveFuncs _080D1B8C: .4byte gTasks - thumb_func_end sub_80D1B58 + thumb_func_end BT_Phase2FullScreenWave - thumb_func_start sub_80D1B90 -sub_80D1B90: @ 80D1B90 + thumb_func_start BT_Phase2FullScreenWave_Init +BT_Phase2FullScreenWave_Init: @ 80D1B90 push {r4,r5,lr} adds r5, r0, 0 - bl sub_80D3DD0 + bl BT_InitCtrlBlk bl ScanlineEffect_Clear movs r2, 0 ldr r4, _080D1BD8 @ =gScanlineEffectRegBuffers + 0x780 - ldr r3, _080D1BDC @ =gUnknown_2039A2C + ldr r3, _080D1BDC @ =sTransitionStructPtr _080D1BA2: lsls r1, r2, 1 adds r1, r4 @@ -2460,9 +2460,9 @@ _080D1BA2: lsrs r2, r0, 24 cmp r2, 0x9F bls _080D1BA2 - ldr r0, _080D1BE0 @ =sub_80D1CC8 + ldr r0, _080D1BE0 @ =VBCB_BT_Phase2FullScreenWave bl SetVBlankCallback - ldr r0, _080D1BE4 @ =sub_80D1D00 + ldr r0, _080D1BE4 @ =HBCB_BT_Phase2FullScreenWave bl SetHBlankCallback movs r0, 0x2 bl EnableInterrupts @@ -2475,19 +2475,19 @@ _080D1BA2: bx r1 .align 2, 0 _080D1BD8: .4byte gScanlineEffectRegBuffers + 0x780 -_080D1BDC: .4byte gUnknown_2039A2C -_080D1BE0: .4byte sub_80D1CC8 -_080D1BE4: .4byte sub_80D1D00 - thumb_func_end sub_80D1B90 +_080D1BDC: .4byte sTransitionStructPtr +_080D1BE0: .4byte VBCB_BT_Phase2FullScreenWave +_080D1BE4: .4byte HBCB_BT_Phase2FullScreenWave + thumb_func_end BT_Phase2FullScreenWave_Init - thumb_func_start sub_80D1BE8 -sub_80D1BE8: @ 80D1BE8 + thumb_func_start BT_Phase2FullScreenWave_UpdateWave +BT_Phase2FullScreenWave_UpdateWave: @ 80D1BE8 push {r4-r7,lr} mov r7, r8 push {r7} sub sp, 0x4 adds r6, r0, 0 - ldr r0, _080D1CB4 @ =gUnknown_2039A2C + ldr r0, _080D1CB4 @ =sTransitionStructPtr ldr r1, [r0] ldrb r0, [r1] movs r0, 0 @@ -2522,7 +2522,7 @@ _080D1C28: ldr r1, _080D1CBC @ =gScanlineEffectRegBuffers lsls r2, r5, 1 adds r2, r1 - ldr r1, _080D1CB4 @ =gUnknown_2039A2C + ldr r1, _080D1CB4 @ =sTransitionStructPtr ldr r1, [r1] ldrh r1, [r1, 0x16] adds r0, r1 @@ -2565,13 +2565,13 @@ _080D1C78: ands r0, r1 cmp r0, 0 bne _080D1C9A - ldr r0, _080D1CC4 @ =sub_80D1B58 + ldr r0, _080D1CC4 @ =BT_Phase2FullScreenWave bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 bl DestroyTask _080D1C9A: - ldr r0, _080D1CB4 @ =gUnknown_2039A2C + ldr r0, _080D1CB4 @ =sTransitionStructPtr ldr r1, [r0] ldrb r0, [r1] adds r0, 0x1 @@ -2585,18 +2585,18 @@ _080D1C9A: pop {r1} bx r1 .align 2, 0 -_080D1CB4: .4byte gUnknown_2039A2C +_080D1CB4: .4byte sTransitionStructPtr _080D1CB8: .4byte 0x1fff0000 _080D1CBC: .4byte gScanlineEffectRegBuffers _080D1CC0: .4byte gPaletteFade -_080D1CC4: .4byte sub_80D1B58 - thumb_func_end sub_80D1BE8 +_080D1CC4: .4byte BT_Phase2FullScreenWave + thumb_func_end BT_Phase2FullScreenWave_UpdateWave - thumb_func_start sub_80D1CC8 -sub_80D1CC8: @ 80D1CC8 + thumb_func_start VBCB_BT_Phase2FullScreenWave +VBCB_BT_Phase2FullScreenWave: @ 80D1CC8 push {lr} - bl sub_80D3DF4 - ldr r0, _080D1CF0 @ =gUnknown_2039A2C + bl BT_VBSyncOamAndPltt + ldr r0, _080D1CF0 @ =sTransitionStructPtr ldr r0, [r0] ldrb r0, [r0] cmp r0, 0 @@ -2615,14 +2615,14 @@ _080D1CEC: pop {r0} bx r0 .align 2, 0 -_080D1CF0: .4byte gUnknown_2039A2C +_080D1CF0: .4byte sTransitionStructPtr _080D1CF4: .4byte 0x040000d4 _080D1CF8: .4byte gScanlineEffectRegBuffers _080D1CFC: .4byte 0x800000a0 - thumb_func_end sub_80D1CC8 + thumb_func_end VBCB_BT_Phase2FullScreenWave - thumb_func_start sub_80D1D00 -sub_80D1D00: @ 80D1D00 + thumb_func_start HBCB_BT_Phase2FullScreenWave +HBCB_BT_Phase2FullScreenWave: @ 80D1D00 ldr r1, _080D1D20 @ =gScanlineEffectRegBuffers ldr r0, _080D1D24 @ =0x04000006 ldrh r0, [r0] @@ -2643,14 +2643,14 @@ sub_80D1D00: @ 80D1D00 _080D1D20: .4byte gScanlineEffectRegBuffers _080D1D24: .4byte 0x04000006 _080D1D28: .4byte 0x04000016 - thumb_func_end sub_80D1D00 + thumb_func_end HBCB_BT_Phase2FullScreenWave - thumb_func_start sub_80D1D2C -sub_80D1D2C: @ 80D1D2C + thumb_func_start BT_Phase2BlackWaveToRight +BT_Phase2BlackWaveToRight: @ 80D1D2C push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D1D5C @ =gUnknown_83FA438 + ldr r5, _080D1D5C @ =sBT_Phase2BlackWaveToRightFuncs ldr r2, _080D1D60 @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -2671,17 +2671,17 @@ _080D1D3E: pop {r0} bx r0 .align 2, 0 -_080D1D5C: .4byte gUnknown_83FA438 +_080D1D5C: .4byte sBT_Phase2BlackWaveToRightFuncs _080D1D60: .4byte gTasks - thumb_func_end sub_80D1D2C + thumb_func_end BT_Phase2BlackWaveToRight - thumb_func_start sub_80D1D64 -sub_80D1D64: @ 80D1D64 + thumb_func_start BT_Phase2BlackWaveToRight_Init +BT_Phase2BlackWaveToRight_Init: @ 80D1D64 push {r4,lr} adds r4, r0, 0 - bl sub_80D3DD0 + bl BT_InitCtrlBlk bl ScanlineEffect_Clear - ldr r0, _080D1DB0 @ =gUnknown_2039A2C + ldr r0, _080D1DB0 @ =sTransitionStructPtr ldr r1, [r0] movs r2, 0 movs r0, 0x3F @@ -2703,7 +2703,7 @@ _080D1D8A: lsrs r1, r0, 24 cmp r1, 0x9F bls _080D1D8A - ldr r0, _080D1DB8 @ =sub_80D1E98 + ldr r0, _080D1DB8 @ =VBCB_BT_Phase2BlackWaveToRight bl SetVBlankCallback ldrh r0, [r4, 0x8] adds r0, 0x1 @@ -2713,18 +2713,18 @@ _080D1D8A: pop {r1} bx r1 .align 2, 0 -_080D1DB0: .4byte gUnknown_2039A2C +_080D1DB0: .4byte sTransitionStructPtr _080D1DB4: .4byte gScanlineEffectRegBuffers + 0x780 -_080D1DB8: .4byte sub_80D1E98 - thumb_func_end sub_80D1D64 +_080D1DB8: .4byte VBCB_BT_Phase2BlackWaveToRight + thumb_func_end BT_Phase2BlackWaveToRight_Init - thumb_func_start sub_80D1DBC -sub_80D1DBC: @ 80D1DBC + thumb_func_start BT_Phase2BlackWaveToRight_UpdateWave +BT_Phase2BlackWaveToRight_UpdateWave: @ 80D1DBC push {r4-r7,lr} mov r7, r8 push {r7} adds r4, r0, 0 - ldr r0, _080D1E50 @ =gUnknown_2039A2C + ldr r0, _080D1E50 @ =sTransitionStructPtr ldr r1, [r0] ldrb r0, [r1] movs r0, 0 @@ -2785,7 +2785,7 @@ _080D1E18: adds r0, 0x1 strh r0, [r4, 0x8] _080D1E36: - ldr r0, _080D1E50 @ =gUnknown_2039A2C + ldr r0, _080D1E50 @ =sTransitionStructPtr ldr r1, [r0] ldrb r0, [r1] adds r0, 0x1 @@ -2798,12 +2798,12 @@ _080D1E36: pop {r1} bx r1 .align 2, 0 -_080D1E50: .4byte gUnknown_2039A2C +_080D1E50: .4byte sTransitionStructPtr _080D1E54: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D1DBC + thumb_func_end BT_Phase2BlackWaveToRight_UpdateWave - thumb_func_start sub_80D1E58 -sub_80D1E58: @ 80D1E58 + thumb_func_start BT_Phase2BlackWaveToRight_End +BT_Phase2BlackWaveToRight_End: @ 80D1E58 push {lr} ldr r1, _080D1E88 @ =0x040000b0 ldrh r2, [r1, 0xA] @@ -2815,8 +2815,8 @@ sub_80D1E58: @ 80D1E58 ands r0, r2 strh r0, [r1, 0xA] ldrh r0, [r1, 0xA] - bl sub_80D3E60 - ldr r0, _080D1E94 @ =sub_80D1D2C + bl BT_BlendPalettesToBlack + ldr r0, _080D1E94 @ =BT_Phase2BlackWaveToRight bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -2828,11 +2828,11 @@ sub_80D1E58: @ 80D1E58 _080D1E88: .4byte 0x040000b0 _080D1E8C: .4byte 0x0000c5ff _080D1E90: .4byte 0x00007fff -_080D1E94: .4byte sub_80D1D2C - thumb_func_end sub_80D1E58 +_080D1E94: .4byte BT_Phase2BlackWaveToRight + thumb_func_end BT_Phase2BlackWaveToRight_End - thumb_func_start sub_80D1E98 -sub_80D1E98: @ 80D1E98 + thumb_func_start VBCB_BT_Phase2BlackWaveToRight +VBCB_BT_Phase2BlackWaveToRight: @ 80D1E98 push {r4,r5,lr} ldr r4, _080D1F04 @ =0x040000b0 ldrh r1, [r4, 0xA] @@ -2844,8 +2844,8 @@ sub_80D1E98: @ 80D1E98 ands r0, r1 strh r0, [r4, 0xA] ldrh r0, [r4, 0xA] - bl sub_80D3DF4 - ldr r5, _080D1F10 @ =gUnknown_2039A2C + bl BT_VBSyncOamAndPltt + ldr r5, _080D1F10 @ =sTransitionStructPtr ldr r0, [r5] ldrb r0, [r0] cmp r0, 0 @@ -2887,21 +2887,21 @@ _080D1ED0: _080D1F04: .4byte 0x040000b0 _080D1F08: .4byte 0x0000c5ff _080D1F0C: .4byte 0x00007fff -_080D1F10: .4byte gUnknown_2039A2C +_080D1F10: .4byte sTransitionStructPtr _080D1F14: .4byte 0x040000d4 _080D1F18: .4byte gScanlineEffectRegBuffers _080D1F1C: .4byte 0x800000a0 _080D1F20: .4byte gScanlineEffectRegBuffers + 0x780 _080D1F24: .4byte 0x04000040 _080D1F28: .4byte 0xa2400001 - thumb_func_end sub_80D1E98 + thumb_func_end VBCB_BT_Phase2BlackWaveToRight - thumb_func_start sub_80D1F2C -sub_80D1F2C: @ 80D1F2C + thumb_func_start BT_Phase2AntiClockwiseSpiral +BT_Phase2AntiClockwiseSpiral: @ 80D1F2C push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D1F5C @ =gUnknown_83FA464 + ldr r5, _080D1F5C @ =sBT_Phase2AntiClockwiseSpiralFuncs ldr r2, _080D1F60 @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -2922,9 +2922,9 @@ _080D1F3E: pop {r0} bx r0 .align 2, 0 -_080D1F5C: .4byte gUnknown_83FA464 +_080D1F5C: .4byte sBT_Phase2AntiClockwiseSpiralFuncs _080D1F60: .4byte gTasks - thumb_func_end sub_80D1F2C + thumb_func_end BT_Phase2AntiClockwiseSpiral thumb_func_start sub_80D1F64 sub_80D1F64: @ 80D1F64 @@ -3398,7 +3398,7 @@ _080D22CA: ldrsh r4, [r0, r3] ldr r6, _080D2324 @ =gScanlineEffectRegBuffers + 0x780 _080D22D4: - ldr r0, _080D2328 @ =gUnknown_2039A2C + ldr r0, _080D2328 @ =sTransitionStructPtr ldr r5, [r0] asrs r2, r1, 16 adds r0, r2, 0 @@ -3438,7 +3438,7 @@ _080D22D4: .align 2, 0 _080D2320: .4byte gUnknown_83FA444 _080D2324: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2328: .4byte gUnknown_2039A2C +_080D2328: .4byte sTransitionStructPtr _080D232C: ldrh r0, [r3] cmp r0, r1 @@ -3476,7 +3476,7 @@ _080D2360: ldrsh r4, [r0, r3] ldr r6, _080D23C0 @ =gScanlineEffectRegBuffers + 0x780 _080D236A: - ldr r0, _080D23C4 @ =gUnknown_2039A2C + ldr r0, _080D23C4 @ =sTransitionStructPtr ldr r3, [r0] asrs r2, r1, 16 adds r0, r2, 0 @@ -3520,7 +3520,7 @@ _080D23A6: .align 2, 0 _080D23BC: .4byte gUnknown_83FA444 _080D23C0: .4byte gScanlineEffectRegBuffers + 0x780 -_080D23C4: .4byte gUnknown_2039A2C +_080D23C4: .4byte sTransitionStructPtr _080D23C8: .4byte 0xffff0000 _080D23CC: lsls r0, r2, 16 @@ -3541,7 +3541,7 @@ _080D23DA: ldrsh r4, [r0, r6] ldr r6, _080D2440 @ =gScanlineEffectRegBuffers + 0x780 _080D23EC: - ldr r0, _080D2444 @ =gUnknown_2039A2C + ldr r0, _080D2444 @ =sTransitionStructPtr ldr r5, [r0] asrs r2, r1, 16 adds r0, r2, 0 @@ -3582,7 +3582,7 @@ _080D23EC: _080D2438: .4byte 0x0000ffb1 _080D243C: .4byte gUnknown_83FA444 _080D2440: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2444: .4byte gUnknown_2039A2C +_080D2444: .4byte sTransitionStructPtr _080D2448: ldrh r0, [r3] cmp r0, r1 @@ -3617,7 +3617,7 @@ _080D2474: adds r0, r5, r0 movs r3, 0 ldrsh r4, [r0, r3] - ldr r6, _080D2534 @ =gUnknown_2039A2C + ldr r6, _080D2534 @ =sTransitionStructPtr mov r8, r6 ldr r6, _080D2538 @ =gScanlineEffectRegBuffers + 0x780 _080D248A: @@ -3709,17 +3709,17 @@ _080D251C: .align 2, 0 _080D252C: .4byte 0x0000ffb1 _080D2530: .4byte gUnknown_83FA444 -_080D2534: .4byte gUnknown_2039A2C +_080D2534: .4byte sTransitionStructPtr _080D2538: .4byte gScanlineEffectRegBuffers + 0x780 thumb_func_end sub_80D1F64 - thumb_func_start sub_80D253C -sub_80D253C: @ 80D253C + thumb_func_start BT_Phase2AntiClockwiseSpiral_Init +BT_Phase2AntiClockwiseSpiral_Init: @ 80D253C push {r4,r5,lr} adds r5, r0, 0 - bl sub_80D3DD0 + bl BT_InitCtrlBlk bl ScanlineEffect_Clear - ldr r0, _080D25A0 @ =gUnknown_2039A2C + ldr r0, _080D25A0 @ =sTransitionStructPtr ldr r1, [r0] movs r4, 0 strh r4, [r1, 0x2] @@ -3749,7 +3749,7 @@ sub_80D253C: @ 80D253C ldr r0, _080D25BC @ =0x80000140 str r0, [r1, 0x8] ldr r0, [r1, 0x8] - ldr r0, _080D25C0 @ =sub_80D2698 + ldr r0, _080D25C0 @ =VBCB_BT_Phase2AntiClockwiseBlackFade bl SetVBlankCallback ldrh r0, [r5, 0x8] adds r0, 0x1 @@ -3761,7 +3761,7 @@ sub_80D253C: @ 80D253C pop {r1} bx r1 .align 2, 0 -_080D25A0: .4byte gUnknown_2039A2C +_080D25A0: .4byte sTransitionStructPtr _080D25A4: .4byte 0x00007878 _080D25A8: .4byte 0x00003070 _080D25AC: .4byte 0x00001090 @@ -3769,11 +3769,11 @@ _080D25B0: .4byte 0x040000d4 _080D25B4: .4byte gScanlineEffectRegBuffers + 0x780 _080D25B8: .4byte 0xfffff880 _080D25BC: .4byte 0x80000140 -_080D25C0: .4byte sub_80D2698 - thumb_func_end sub_80D253C +_080D25C0: .4byte VBCB_BT_Phase2AntiClockwiseBlackFade + thumb_func_end BT_Phase2AntiClockwiseSpiral_Init - thumb_func_start sub_80D25C4 -sub_80D25C4: @ 80D25C4 + thumb_func_start BT_Phase2AntiClockwiseSpiral_Update +BT_Phase2AntiClockwiseSpiral_Update: @ 80D25C4 push {r4-r7,lr} mov r7, r8 push {r7} @@ -3784,7 +3784,7 @@ sub_80D25C4: @ 80D25C4 ldrsh r1, [r4, r2] movs r2, 0x1 bl sub_80D1F64 - ldr r5, _080D2694 @ =gUnknown_2039A2C + ldr r5, _080D2694 @ =sTransitionStructPtr ldr r1, [r5] ldrb r0, [r1] movs r2, 0x1 @@ -3870,7 +3870,7 @@ _080D2662: ldr r1, [r5] movs r0, 0x1 strh r0, [r1, 0x20] - bl sub_80D3E60 + bl BT_BlendPalettesToBlack _080D2686: movs r0, 0 pop {r3} @@ -3879,11 +3879,11 @@ _080D2686: pop {r1} bx r1 .align 2, 0 -_080D2694: .4byte gUnknown_2039A2C - thumb_func_end sub_80D25C4 +_080D2694: .4byte sTransitionStructPtr + thumb_func_end BT_Phase2AntiClockwiseSpiral_Update - thumb_func_start sub_80D2698 -sub_80D2698: @ 80D2698 + thumb_func_start VBCB_BT_Phase2AntiClockwiseBlackFade +VBCB_BT_Phase2AntiClockwiseBlackFade: @ 80D2698 push {r4-r6,lr} ldr r5, _080D26D0 @ =0x040000b0 ldrh r1, [r5, 0xA] @@ -3895,14 +3895,14 @@ sub_80D2698: @ 80D2698 ands r0, r1 strh r0, [r5, 0xA] ldrh r0, [r5, 0xA] - bl sub_80D3DF4 - ldr r4, _080D26DC @ =gUnknown_2039A2C + bl BT_VBSyncOamAndPltt + ldr r4, _080D26DC @ =sTransitionStructPtr ldr r2, [r4] movs r0, 0x20 ldrsh r3, [r2, r0] cmp r3, 0 beq _080D26E4 - ldr r0, _080D26E0 @ =sub_80D1F2C + ldr r0, _080D26E0 @ =BT_Phase2AntiClockwiseSpiral bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -3912,8 +3912,8 @@ sub_80D2698: @ 80D2698 _080D26D0: .4byte 0x040000b0 _080D26D4: .4byte 0x0000c5ff _080D26D8: .4byte 0x00007fff -_080D26DC: .4byte gUnknown_2039A2C -_080D26E0: .4byte sub_80D1F2C +_080D26DC: .4byte sTransitionStructPtr +_080D26E0: .4byte BT_Phase2AntiClockwiseSpiral _080D26E4: ldrb r0, [r2] cmp r0, 0 @@ -3971,10 +3971,10 @@ _080D2758: .4byte 0x80000140 _080D275C: .4byte gScanlineEffectRegBuffers _080D2760: .4byte 0x04000040 _080D2764: .4byte 0xa6400001 - thumb_func_end sub_80D2698 + thumb_func_end VBCB_BT_Phase2AntiClockwiseBlackFade - thumb_func_start Phase2Task_Transition_Sydney -Phase2Task_Transition_Sydney: @ 80D2768 + thumb_func_start BT_Phase2StartLoreleiMugshot +BT_Phase2StartLoreleiMugshot: @ 80D2768 push {lr} lsls r0, 24 lsrs r0, 24 @@ -3985,15 +3985,15 @@ Phase2Task_Transition_Sydney: @ 80D2768 adds r1, r2 movs r2, 0 strh r2, [r1, 0x26] - bl Phase2Task_MugShotTransition + bl BT_Phase2Mugshot pop {r0} bx r0 .align 2, 0 _080D2784: .4byte gTasks - thumb_func_end Phase2Task_Transition_Sydney + thumb_func_end BT_Phase2StartLoreleiMugshot - thumb_func_start Phase2Task_Transition_Phoebe -Phase2Task_Transition_Phoebe: @ 80D2788 + thumb_func_start BT_Phase2StartBrunoMugshot +BT_Phase2StartBrunoMugshot: @ 80D2788 push {lr} lsls r0, 24 lsrs r0, 24 @@ -4004,15 +4004,15 @@ Phase2Task_Transition_Phoebe: @ 80D2788 adds r1, r2 movs r2, 0x1 strh r2, [r1, 0x26] - bl Phase2Task_MugShotTransition + bl BT_Phase2Mugshot pop {r0} bx r0 .align 2, 0 _080D27A4: .4byte gTasks - thumb_func_end Phase2Task_Transition_Phoebe + thumb_func_end BT_Phase2StartBrunoMugshot - thumb_func_start Phase2Task_Transition_Glacia -Phase2Task_Transition_Glacia: @ 80D27A8 + thumb_func_start BT_Phase2StartAgathaMugshot +BT_Phase2StartAgathaMugshot: @ 80D27A8 push {lr} lsls r0, 24 lsrs r0, 24 @@ -4023,15 +4023,15 @@ Phase2Task_Transition_Glacia: @ 80D27A8 adds r1, r2 movs r2, 0x2 strh r2, [r1, 0x26] - bl Phase2Task_MugShotTransition + bl BT_Phase2Mugshot pop {r0} bx r0 .align 2, 0 _080D27C4: .4byte gTasks - thumb_func_end Phase2Task_Transition_Glacia + thumb_func_end BT_Phase2StartAgathaMugshot - thumb_func_start Phase2Task_Transition_Drake -Phase2Task_Transition_Drake: @ 80D27C8 + thumb_func_start BT_Phase2StartLanceMugshot +BT_Phase2StartLanceMugshot: @ 80D27C8 push {lr} lsls r0, 24 lsrs r0, 24 @@ -4042,15 +4042,15 @@ Phase2Task_Transition_Drake: @ 80D27C8 adds r1, r2 movs r2, 0x3 strh r2, [r1, 0x26] - bl Phase2Task_MugShotTransition + bl BT_Phase2Mugshot pop {r0} bx r0 .align 2, 0 _080D27E4: .4byte gTasks - thumb_func_end Phase2Task_Transition_Drake + thumb_func_end BT_Phase2StartLanceMugshot - thumb_func_start Phase2Task_Transition_Steven -Phase2Task_Transition_Steven: @ 80D27E8 + thumb_func_start BT_Phase2StartBlueMugshot +BT_Phase2StartBlueMugshot: @ 80D27E8 push {lr} lsls r0, 24 lsrs r0, 24 @@ -4061,19 +4061,19 @@ Phase2Task_Transition_Steven: @ 80D27E8 adds r1, r2 movs r2, 0x4 strh r2, [r1, 0x26] - bl Phase2Task_MugShotTransition + bl BT_Phase2Mugshot pop {r0} bx r0 .align 2, 0 _080D2804: .4byte gTasks - thumb_func_end Phase2Task_Transition_Steven + thumb_func_end BT_Phase2StartBlueMugshot - thumb_func_start Phase2Task_MugShotTransition -Phase2Task_MugShotTransition: @ 80D2808 + thumb_func_start BT_Phase2Mugshot +BT_Phase2Mugshot: @ 80D2808 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D2838 @ =gUnknown_83FA46C + ldr r5, _080D2838 @ =sBT_Phase2MugshotFuncs ldr r2, _080D283C @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -4094,25 +4094,25 @@ _080D281A: pop {r0} bx r0 .align 2, 0 -_080D2838: .4byte gUnknown_83FA46C +_080D2838: .4byte sBT_Phase2MugshotFuncs _080D283C: .4byte gTasks - thumb_func_end Phase2Task_MugShotTransition + thumb_func_end BT_Phase2Mugshot - thumb_func_start Phase2_Mugshot_Func1 -Phase2_Mugshot_Func1: @ 80D2840 + thumb_func_start BT_Phase2Mugshot_Init +BT_Phase2Mugshot_Init: @ 80D2840 push {r4,lr} adds r4, r0, 0 - bl sub_80D3DD0 + bl BT_InitCtrlBlk bl ScanlineEffect_Clear adds r0, r4, 0 - bl sub_80D2EA4 + bl BT_Phase2Mugshots_CreateSprites movs r0, 0 strh r0, [r4, 0xA] movs r0, 0x1 strh r0, [r4, 0xC] movs r0, 0xEF strh r0, [r4, 0xE] - ldr r0, _080D2898 @ =gUnknown_2039A2C + ldr r0, _080D2898 @ =sTransitionStructPtr ldr r1, [r0] movs r0, 0x3F strh r0, [r1, 0x2] @@ -4132,7 +4132,7 @@ _080D2874: lsrs r1, r0, 24 cmp r1, 0x9F bls _080D2874 - ldr r0, _080D28A4 @ =sub_80D2D50 + ldr r0, _080D28A4 @ =VBCB_BT_Phase2Mugshot1_Slide bl SetVBlankCallback ldrh r0, [r4, 0x8] adds r0, 0x1 @@ -4142,28 +4142,28 @@ _080D2874: pop {r1} bx r1 .align 2, 0 -_080D2898: .4byte gUnknown_2039A2C +_080D2898: .4byte sTransitionStructPtr _080D289C: .4byte gScanlineEffectRegBuffers + 0x780 _080D28A0: .4byte 0x0000f0f1 -_080D28A4: .4byte sub_80D2D50 - thumb_func_end Phase2_Mugshot_Func1 +_080D28A4: .4byte VBCB_BT_Phase2Mugshot1_Slide + thumb_func_end BT_Phase2Mugshot_Init - thumb_func_start Phase2_Mugshot_Func2 -Phase2_Mugshot_Func2: @ 80D28A8 + thumb_func_start BT_Phase2Mugshot_LoadGfx +BT_Phase2Mugshot_LoadGfx: @ 80D28A8 push {r4-r7,lr} mov r7, r8 push {r7} sub sp, 0x8 mov r8, r0 - ldr r6, _080D2950 @ =gUnknown_83FAC34 + ldr r6, _080D2950 @ =sVsBarTilemap add r1, sp, 0x4 mov r0, sp - bl sub_80D3E28 - ldr r0, _080D2954 @ =gUnknown_83F8F60 + bl BT_GetBg0TilemapAndTilesetBase + ldr r0, _080D2954 @ =sVsBarTileset ldr r1, [sp, 0x4] movs r2, 0xF0 bl CpuSet - ldr r1, _080D2958 @ =gUnknown_83FA740 + ldr r1, _080D2958 @ =sVsBarOpponentPalettes mov r2, r8 movs r3, 0x26 ldrsh r0, [r2, r3] @@ -4173,7 +4173,7 @@ Phase2_Mugshot_Func2: @ 80D28A8 movs r1, 0xF0 movs r2, 0x20 bl LoadPalette - ldr r1, _080D295C @ =gUnknown_83FA754 + ldr r1, _080D295C @ =sVsBarPlayerPalettes ldr r0, _080D2960 @ =gSaveBlock2Ptr ldr r0, [r0] ldrb r0, [r0, 0x8] @@ -4217,7 +4217,7 @@ _080D2902: ble _080D28FC movs r0, 0x2 bl EnableInterrupts - ldr r0, _080D2964 @ =sub_80D2E6C + ldr r0, _080D2964 @ =HBCB_BT_Phase2Mugshot bl SetHBlankCallback mov r2, r8 ldrh r0, [r2, 0x8] @@ -4231,19 +4231,19 @@ _080D2902: pop {r1} bx r1 .align 2, 0 -_080D2950: .4byte gUnknown_83FAC34 -_080D2954: .4byte gUnknown_83F8F60 -_080D2958: .4byte gUnknown_83FA740 -_080D295C: .4byte gUnknown_83FA754 +_080D2950: .4byte sVsBarTilemap +_080D2954: .4byte sVsBarTileset +_080D2958: .4byte sVsBarOpponentPalettes +_080D295C: .4byte sVsBarPlayerPalettes _080D2960: .4byte gSaveBlock2Ptr -_080D2964: .4byte sub_80D2E6C - thumb_func_end Phase2_Mugshot_Func2 +_080D2964: .4byte HBCB_BT_Phase2Mugshot + thumb_func_end BT_Phase2Mugshot_LoadGfx - thumb_func_start sub_80D2968 -sub_80D2968: @ 80D2968 + thumb_func_start BT_Phase2Mugshot_VsBarsSlideIn +BT_Phase2Mugshot_VsBarsSlideIn: @ 80D2968 push {r4-r7,lr} adds r4, r0, 0 - ldr r0, _080D2A4C @ =gUnknown_2039A2C + ldr r0, _080D2A4C @ =sTransitionStructPtr ldr r1, [r0] ldrb r0, [r1] movs r0, 0 @@ -4346,7 +4346,7 @@ _080D2A1E: adds r0, 0x1 strh r0, [r4, 0x8] _080D2A2A: - ldr r0, _080D2A4C @ =gUnknown_2039A2C + ldr r0, _080D2A4C @ =sTransitionStructPtr ldr r1, [r0] ldrh r0, [r1, 0x18] subs r0, 0x8 @@ -4363,15 +4363,15 @@ _080D2A2A: pop {r1} bx r1 .align 2, 0 -_080D2A4C: .4byte gUnknown_2039A2C +_080D2A4C: .4byte sTransitionStructPtr _080D2A50: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D2968 + thumb_func_end BT_Phase2Mugshot_VsBarsSlideIn - thumb_func_start sub_80D2A54 -sub_80D2A54: @ 80D2A54 + thumb_func_start BT_Phase2Mugshot_StartSpriteSlide +BT_Phase2Mugshot_StartSpriteSlide: @ 80D2A54 push {r4,r5,lr} adds r4, r0, 0 - ldr r2, _080D2AC8 @ =gUnknown_2039A2C + ldr r2, _080D2AC8 @ =sTransitionStructPtr ldr r1, [r2] ldrb r0, [r1] movs r0, 0 @@ -4404,14 +4404,14 @@ _080D2A68: movs r1, 0x22 ldrsh r0, [r4, r1] movs r1, 0 - bl sub_80D3120 + bl BT_SetSpriteAsOpponentOrPlayer movs r1, 0x24 ldrsh r0, [r4, r1] movs r1, 0x1 - bl sub_80D3120 + bl BT_SetSpriteAsOpponentOrPlayer movs r1, 0x22 ldrsh r0, [r4, r1] - bl sub_80D3138 + bl BT_StartSpriteSlide movs r0, 0x61 bl PlaySE ldr r1, [r5] @@ -4424,15 +4424,15 @@ _080D2A68: pop {r1} bx r1 .align 2, 0 -_080D2AC8: .4byte gUnknown_2039A2C +_080D2AC8: .4byte sTransitionStructPtr _080D2ACC: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D2A54 + thumb_func_end BT_Phase2Mugshot_StartSpriteSlide - thumb_func_start sub_80D2AD0 -sub_80D2AD0: @ 80D2AD0 + thumb_func_start BT_Phase2Mugshot_WaitForOpponentInPlace +BT_Phase2Mugshot_WaitForOpponentInPlace: @ 80D2AD0 push {r4,lr} adds r4, r0, 0 - ldr r0, _080D2B08 @ =gUnknown_2039A2C + ldr r0, _080D2B08 @ =sTransitionStructPtr ldr r1, [r0] ldrh r0, [r1, 0x18] subs r0, 0x8 @@ -4442,7 +4442,7 @@ sub_80D2AD0: @ 80D2AD0 strh r0, [r1, 0x1A] movs r1, 0x22 ldrsh r0, [r4, r1] - bl sub_80D3154 + bl BT_IsSpriteSlideFinished lsls r0, 16 cmp r0, 0 beq _080D2B00 @@ -4451,23 +4451,23 @@ sub_80D2AD0: @ 80D2AD0 strh r0, [r4, 0x8] movs r1, 0x24 ldrsh r0, [r4, r1] - bl sub_80D3138 + bl BT_StartSpriteSlide _080D2B00: movs r0, 0 pop {r4} pop {r1} bx r1 .align 2, 0 -_080D2B08: .4byte gUnknown_2039A2C - thumb_func_end sub_80D2AD0 +_080D2B08: .4byte sTransitionStructPtr + thumb_func_end BT_Phase2Mugshot_WaitForOpponentInPlace - thumb_func_start sub_80D2B0C -sub_80D2B0C: @ 80D2B0C + thumb_func_start BT_Phase2Mugshot_WaitForPlayerInPlace +BT_Phase2Mugshot_WaitForPlayerInPlace: @ 80D2B0C push {r4-r7,lr} mov r7, r8 push {r7} adds r6, r0, 0 - ldr r7, _080D2BAC @ =gUnknown_2039A2C + ldr r7, _080D2BAC @ =sTransitionStructPtr ldr r1, [r7] ldrh r0, [r1, 0x18] subs r0, 0x8 @@ -4479,7 +4479,7 @@ sub_80D2B0C: @ 80D2B0C strh r0, [r1, 0x1A] movs r1, 0x24 ldrsh r0, [r6, r1] - bl sub_80D3154 + bl BT_IsSpriteSlideFinished lsls r0, 16 cmp r0, 0 beq _080D2BA0 @@ -4528,7 +4528,7 @@ sub_80D2B0C: @ 80D2B0C ldr r1, [r7] movs r0, 0xBF strh r0, [r1, 0xE] - ldr r0, _080D2BC0 @ =sub_80D2DEC + ldr r0, _080D2BC0 @ =VBCB_BT_Phase2Mugshot2_WhiteFade bl SetVBlankCallback _080D2BA0: movs r0, 0 @@ -4538,19 +4538,19 @@ _080D2BA0: pop {r1} bx r1 .align 2, 0 -_080D2BAC: .4byte gUnknown_2039A2C +_080D2BAC: .4byte sTransitionStructPtr _080D2BB0: .4byte 0x040000b0 _080D2BB4: .4byte 0x0000c5ff _080D2BB8: .4byte 0x00007fff _080D2BBC: .4byte gScanlineEffectRegBuffers -_080D2BC0: .4byte sub_80D2DEC - thumb_func_end sub_80D2B0C +_080D2BC0: .4byte VBCB_BT_Phase2Mugshot2_WhiteFade + thumb_func_end BT_Phase2Mugshot_WaitForPlayerInPlace - thumb_func_start sub_80D2BC4 -sub_80D2BC4: @ 80D2BC4 + thumb_func_start BT_Phase2Mugshot_ExpandWhiteBand +BT_Phase2Mugshot_ExpandWhiteBand: @ 80D2BC4 push {r4-r7,lr} adds r4, r0, 0 - ldr r2, _080D2C84 @ =gUnknown_2039A2C + ldr r2, _080D2C84 @ =sTransitionStructPtr ldr r1, [r2] ldrb r0, [r1] movs r0, 0 @@ -4651,15 +4651,15 @@ _080D2C6E: pop {r1} bx r1 .align 2, 0 -_080D2C84: .4byte gUnknown_2039A2C +_080D2C84: .4byte sTransitionStructPtr _080D2C88: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D2BC4 + thumb_func_end BT_Phase2Mugshot_ExpandWhiteBand - thumb_func_start sub_80D2C8C -sub_80D2C8C: @ 80D2C8C + thumb_func_start BT_Phase2Mugshot_StartBlackFade +BT_Phase2Mugshot_StartBlackFade: @ 80D2C8C push {r4-r6,lr} adds r4, r0, 0 - ldr r5, _080D2CBC @ =gUnknown_2039A2C + ldr r5, _080D2CBC @ =sTransitionStructPtr ldr r0, [r5] ldrb r1, [r0] movs r6, 0 @@ -4681,15 +4681,15 @@ sub_80D2C8C: @ 80D2C8C pop {r1} bx r1 .align 2, 0 -_080D2CBC: .4byte gUnknown_2039A2C +_080D2CBC: .4byte sTransitionStructPtr _080D2CC0: .4byte 0x00007fff - thumb_func_end sub_80D2C8C + thumb_func_end BT_Phase2Mugshot_StartBlackFade - thumb_func_start sub_80D2CC4 -sub_80D2CC4: @ 80D2CC4 + thumb_func_start BT_Phase2Mugshot_WaitForBlackFade +BT_Phase2Mugshot_WaitForBlackFade: @ 80D2CC4 push {r4,r5,lr} adds r4, r0, 0 - ldr r5, _080D2D08 @ =gUnknown_2039A2C + ldr r5, _080D2D08 @ =sTransitionStructPtr ldr r1, [r5] ldrb r0, [r1] movs r0, 0 @@ -4721,12 +4721,12 @@ _080D2CF4: pop {r1} bx r1 .align 2, 0 -_080D2D08: .4byte gUnknown_2039A2C +_080D2D08: .4byte sTransitionStructPtr _080D2D0C: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D2CC4 + thumb_func_end BT_Phase2Mugshot_WaitForBlackFade - thumb_func_start sub_80D2D10 -sub_80D2D10: @ 80D2D10 + thumb_func_start BT_Phase2Mugshot_End +BT_Phase2Mugshot_End: @ 80D2D10 push {r4,lr} adds r4, r0, 0 ldr r1, _080D2D44 @ =0x040000b0 @@ -4739,7 +4739,7 @@ sub_80D2D10: @ 80D2D10 ands r0, r2 strh r0, [r1, 0xA] ldrh r0, [r1, 0xA] - bl sub_80D3E60 + bl BT_BlendPalettesToBlack ldr r0, [r4] bl FindTaskIdByFunc lsls r0, 24 @@ -4753,10 +4753,10 @@ sub_80D2D10: @ 80D2D10 _080D2D44: .4byte 0x040000b0 _080D2D48: .4byte 0x0000c5ff _080D2D4C: .4byte 0x00007fff - thumb_func_end sub_80D2D10 + thumb_func_end BT_Phase2Mugshot_End - thumb_func_start sub_80D2D50 -sub_80D2D50: @ 80D2D50 + thumb_func_start VBCB_BT_Phase2Mugshot1_Slide +VBCB_BT_Phase2Mugshot1_Slide: @ 80D2D50 push {r4,r5,lr} ldr r4, _080D2DC4 @ =0x040000b0 ldrh r1, [r4, 0xA] @@ -4768,8 +4768,8 @@ sub_80D2D50: @ 80D2D50 ands r0, r1 strh r0, [r4, 0xA] ldrh r0, [r4, 0xA] - bl sub_80D3DF4 - ldr r5, _080D2DD0 @ =gUnknown_2039A2C + bl BT_VBSyncOamAndPltt + ldr r5, _080D2DD0 @ =sTransitionStructPtr ldr r0, [r5] ldrb r0, [r0] cmp r0, 0 @@ -4815,17 +4815,17 @@ _080D2D88: _080D2DC4: .4byte 0x040000b0 _080D2DC8: .4byte 0x0000c5ff _080D2DCC: .4byte 0x00007fff -_080D2DD0: .4byte gUnknown_2039A2C +_080D2DD0: .4byte sTransitionStructPtr _080D2DD4: .4byte 0x040000d4 _080D2DD8: .4byte gScanlineEffectRegBuffers _080D2DDC: .4byte 0x800000a0 _080D2DE0: .4byte gScanlineEffectRegBuffers + 0x780 _080D2DE4: .4byte 0x04000040 _080D2DE8: .4byte 0xa2400001 - thumb_func_end sub_80D2D50 + thumb_func_end VBCB_BT_Phase2Mugshot1_Slide - thumb_func_start sub_80D2DEC -sub_80D2DEC: @ 80D2DEC + thumb_func_start VBCB_BT_Phase2Mugshot2_WhiteFade +VBCB_BT_Phase2Mugshot2_WhiteFade: @ 80D2DEC push {r4,lr} ldr r4, _080D2E44 @ =0x040000b0 ldrh r1, [r4, 0xA] @@ -4837,8 +4837,8 @@ sub_80D2DEC: @ 80D2DEC ands r0, r1 strh r0, [r4, 0xA] ldrh r0, [r4, 0xA] - bl sub_80D3DF4 - ldr r2, _080D2E50 @ =gUnknown_2039A2C + bl BT_VBSyncOamAndPltt + ldr r2, _080D2E50 @ =sTransitionStructPtr ldr r0, [r2] ldrb r0, [r0] cmp r0, 0 @@ -4872,34 +4872,34 @@ _080D2E24: _080D2E44: .4byte 0x040000b0 _080D2E48: .4byte 0x0000c5ff _080D2E4C: .4byte 0x00007fff -_080D2E50: .4byte gUnknown_2039A2C +_080D2E50: .4byte sTransitionStructPtr _080D2E54: .4byte 0x040000d4 _080D2E58: .4byte gScanlineEffectRegBuffers _080D2E5C: .4byte 0x800000a0 _080D2E60: .4byte gScanlineEffectRegBuffers + 0x780 _080D2E64: .4byte 0x04000054 _080D2E68: .4byte 0xa2400001 - thumb_func_end sub_80D2DEC + thumb_func_end VBCB_BT_Phase2Mugshot2_WhiteFade - thumb_func_start sub_80D2E6C -sub_80D2E6C: @ 80D2E6C + thumb_func_start HBCB_BT_Phase2Mugshot +HBCB_BT_Phase2Mugshot: @ 80D2E6C push {lr} ldr r0, _080D2E80 @ =0x04000006 ldrh r0, [r0] cmp r0, 0x4F bhi _080D2E8C ldr r1, _080D2E84 @ =0x04000010 - ldr r0, _080D2E88 @ =gUnknown_2039A2C + ldr r0, _080D2E88 @ =sTransitionStructPtr ldr r0, [r0] ldrh r0, [r0, 0x18] b _080D2E94 .align 2, 0 _080D2E80: .4byte 0x04000006 _080D2E84: .4byte 0x04000010 -_080D2E88: .4byte gUnknown_2039A2C +_080D2E88: .4byte sTransitionStructPtr _080D2E8C: ldr r1, _080D2E9C @ =0x04000010 - ldr r0, _080D2EA0 @ =gUnknown_2039A2C + ldr r0, _080D2EA0 @ =sTransitionStructPtr ldr r0, [r0] ldrh r0, [r0, 0x1A] _080D2E94: @@ -4908,11 +4908,11 @@ _080D2E94: bx r0 .align 2, 0 _080D2E9C: .4byte 0x04000010 -_080D2EA0: .4byte gUnknown_2039A2C - thumb_func_end sub_80D2E6C +_080D2EA0: .4byte sTransitionStructPtr + thumb_func_end HBCB_BT_Phase2Mugshot - thumb_func_start sub_80D2EA4 -sub_80D2EA4: @ 80D2EA4 + thumb_func_start BT_Phase2Mugshots_CreateSprites +BT_Phase2Mugshots_CreateSprites: @ 80D2EA4 push {r4-r6,lr} mov r6, r9 mov r5, r8 @@ -4922,13 +4922,13 @@ sub_80D2EA4: @ 80D2EA4 ldr r6, _080D2FF8 @ =gReservedSpritePaletteCount movs r0, 0xA strb r0, [r6] - ldr r0, _080D2FFC @ =gUnknown_83FA494 + ldr r0, _080D2FFC @ =sMugshotsTrainerPicIDsTable movs r2, 0x26 ldrsh r1, [r4, r2] mov r9, r1 add r0, r9 ldrb r0, [r0] - ldr r2, _080D3000 @ =gUnknown_83FA4AE + ldr r2, _080D3000 @ =sMugshotsOpponentCoords lsls r1, 2 mov r9, r1 adds r1, r2 @@ -4980,7 +4980,7 @@ sub_80D2EA4: @ 80D2EA4 adds r6, r0 lsls r6, 2 adds r6, r1 - ldr r0, _080D3010 @ =sub_80D301C + ldr r0, _080D3010 @ =SpriteCB_BT_Phase2Mugshots str r0, [r5, 0x1C] str r0, [r6, 0x1C] ldrb r0, [r5, 0x1] @@ -5046,7 +5046,7 @@ sub_80D2EA4: @ 80D2EA4 ldrb r0, [r5, 0x3] lsls r0, 26 lsrs r0, 27 - ldr r2, _080D3014 @ =gUnknown_83FA49A + ldr r2, _080D3014 @ =sMugshotsOpponentRotationScales mov r3, r9 adds r1, r3, r2 movs r4, 0 @@ -5075,21 +5075,21 @@ sub_80D2EA4: @ 80D2EA4 bx r0 .align 2, 0 _080D2FF8: .4byte gReservedSpritePaletteCount -_080D2FFC: .4byte gUnknown_83FA494 -_080D3000: .4byte gUnknown_83FA4AE +_080D2FFC: .4byte sMugshotsTrainerPicIDsTable +_080D3000: .4byte sMugshotsOpponentCoords _080D3004: .4byte gDecompressionBuffer _080D3008: .4byte gSaveBlock2Ptr _080D300C: .4byte gSprites -_080D3010: .4byte sub_80D301C -_080D3014: .4byte gUnknown_83FA49A +_080D3010: .4byte SpriteCB_BT_Phase2Mugshots +_080D3014: .4byte sMugshotsOpponentRotationScales _080D3018: .4byte 0xfffffe00 - thumb_func_end sub_80D2EA4 + thumb_func_end BT_Phase2Mugshots_CreateSprites - thumb_func_start sub_80D301C -sub_80D301C: @ 80D301C + thumb_func_start SpriteCB_BT_Phase2Mugshots +SpriteCB_BT_Phase2Mugshots: @ 80D301C push {r4,r5,lr} adds r4, r0, 0 - ldr r5, _080D3040 @ =gUnknown_83FA4C4 + ldr r5, _080D3040 @ =sBT_Phase2MugshotSpriteFuncs _080D3022: movs r1, 0x2E ldrsh r0, [r4, r1] @@ -5105,26 +5105,26 @@ _080D3022: pop {r0} bx r0 .align 2, 0 -_080D3040: .4byte gUnknown_83FA4C4 - thumb_func_end sub_80D301C +_080D3040: .4byte sBT_Phase2MugshotSpriteFuncs + thumb_func_end SpriteCB_BT_Phase2Mugshots - thumb_func_start sub_80D3044 -sub_80D3044: @ 80D3044 + thumb_func_start BT_Phase2MugshotsSpriteFuncs_Wait +BT_Phase2MugshotsSpriteFuncs_Wait: @ 80D3044 movs r0, 0 bx lr - thumb_func_end sub_80D3044 + thumb_func_end BT_Phase2MugshotsSpriteFuncs_Wait - thumb_func_start sub_80D3048 -sub_80D3048: @ 80D3048 + thumb_func_start BT_Phase2MugshotsSpriteFuncs_InitParams +BT_Phase2MugshotsSpriteFuncs_InitParams: @ 80D3048 push {r4,r5,lr} sub sp, 0x8 adds r5, r0, 0 - ldr r1, _080D308C @ =gUnknown_83FA4E0 + ldr r1, _080D308C @ =sMugShotSlideVelocity mov r0, sp movs r2, 0x4 bl memcpy add r4, sp, 0x4 - ldr r1, _080D3090 @ =gUnknown_83FA4E4 + ldr r1, _080D3090 @ =sMugShotSlideDeceleration adds r0, r4, 0 movs r2, 0x4 bl memcpy @@ -5149,12 +5149,12 @@ sub_80D3048: @ 80D3048 pop {r1} bx r1 .align 2, 0 -_080D308C: .4byte gUnknown_83FA4E0 -_080D3090: .4byte gUnknown_83FA4E4 - thumb_func_end sub_80D3048 +_080D308C: .4byte sMugShotSlideVelocity +_080D3090: .4byte sMugShotSlideDeceleration + thumb_func_end BT_Phase2MugshotsSpriteFuncs_InitParams - thumb_func_start sub_80D3094 -sub_80D3094: @ 80D3094 + thumb_func_start BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn +BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn: @ 80D3094 push {lr} adds r1, r0, 0 ldrh r0, [r1, 0x30] @@ -5183,10 +5183,10 @@ _080D30C0: movs r0, 0 pop {r1} bx r1 - thumb_func_end sub_80D3094 + thumb_func_end BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn - thumb_func_start sub_80D30C8 -sub_80D30C8: @ 80D30C8 + thumb_func_start BT_Phase2MugshotsSpriteFuncs_DecelerateSprite +BT_Phase2MugshotsSpriteFuncs_DecelerateSprite: @ 80D30C8 push {lr} adds r2, r0, 0 ldrh r3, [r2, 0x32] @@ -5210,10 +5210,10 @@ _080D30EE: movs r0, 0 pop {r1} bx r1 - thumb_func_end sub_80D30C8 + thumb_func_end BT_Phase2MugshotsSpriteFuncs_DecelerateSprite - thumb_func_start sub_80D30F4 -sub_80D30F4: @ 80D30F4 + thumb_func_start BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2 +BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2: @ 80D30F4 push {lr} adds r2, r0, 0 ldrh r0, [r2, 0x32] @@ -5236,10 +5236,10 @@ _080D3118: movs r0, 0 pop {r1} bx r1 - thumb_func_end sub_80D30F4 + thumb_func_end BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2 - thumb_func_start sub_80D3120 -sub_80D3120: @ 80D3120 + thumb_func_start BT_SetSpriteAsOpponentOrPlayer +BT_SetSpriteAsOpponentOrPlayer: @ 80D3120 ldr r3, _080D3134 @ =gSprites lsls r0, 16 asrs r0, 16 @@ -5251,10 +5251,10 @@ sub_80D3120: @ 80D3120 bx lr .align 2, 0 _080D3134: .4byte gSprites - thumb_func_end sub_80D3120 + thumb_func_end BT_SetSpriteAsOpponentOrPlayer - thumb_func_start sub_80D3138 -sub_80D3138: @ 80D3138 + thumb_func_start BT_StartSpriteSlide +BT_StartSpriteSlide: @ 80D3138 ldr r2, _080D3150 @ =gSprites lsls r0, 16 asrs r0, 16 @@ -5268,10 +5268,10 @@ sub_80D3138: @ 80D3138 bx lr .align 2, 0 _080D3150: .4byte gSprites - thumb_func_end sub_80D3138 + thumb_func_end BT_StartSpriteSlide - thumb_func_start sub_80D3154 -sub_80D3154: @ 80D3154 + thumb_func_start BT_IsSpriteSlideFinished +BT_IsSpriteSlideFinished: @ 80D3154 ldr r2, _080D3168 @ =gSprites lsls r0, 16 asrs r0, 16 @@ -5284,14 +5284,14 @@ sub_80D3154: @ 80D3154 bx lr .align 2, 0 _080D3168: .4byte gSprites - thumb_func_end sub_80D3154 + thumb_func_end BT_IsSpriteSlideFinished - thumb_func_start sub_80D316C -sub_80D316C: @ 80D316C + thumb_func_start BT_Phase2SlicedScreen +BT_Phase2SlicedScreen: @ 80D316C push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D319C @ =gUnknown_83FA4E8 + ldr r5, _080D319C @ =sBT_Phase2SlicedScreenFuncs ldr r2, _080D31A0 @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -5312,15 +5312,15 @@ _080D317E: pop {r0} bx r0 .align 2, 0 -_080D319C: .4byte gUnknown_83FA4E8 +_080D319C: .4byte sBT_Phase2SlicedScreenFuncs _080D31A0: .4byte gTasks - thumb_func_end sub_80D316C + thumb_func_end BT_Phase2SlicedScreen - thumb_func_start sub_80D31A4 -sub_80D31A4: @ 80D31A4 + thumb_func_start BT_Phase2SlicedScreen_Init +BT_Phase2SlicedScreen_Init: @ 80D31A4 push {r4-r6,lr} adds r5, r0, 0 - bl sub_80D3DD0 + bl BT_InitCtrlBlk bl ScanlineEffect_Clear movs r3, 0 movs r0, 0x80 @@ -5328,7 +5328,7 @@ sub_80D31A4: @ 80D31A4 strh r0, [r5, 0xC] movs r0, 0x1 strh r0, [r5, 0xE] - ldr r2, _080D3210 @ =gUnknown_2039A2C + ldr r2, _080D3210 @ =sTransitionStructPtr ldr r1, [r2] movs r0, 0x3F strh r0, [r1, 0x2] @@ -5356,9 +5356,9 @@ _080D31D0: bls _080D31D0 movs r0, 0x2 bl EnableInterrupts - ldr r0, _080D3218 @ =sub_80D332C + ldr r0, _080D3218 @ =VBCB_BT_Phase2SlicedScreen bl SetVBlankCallback - ldr r0, _080D321C @ =sub_80D33C0 + ldr r0, _080D321C @ =HBCB_BT_Phase2SlicedScreen bl SetHBlankCallback ldrh r0, [r5, 0x8] adds r0, 0x1 @@ -5368,19 +5368,19 @@ _080D31D0: pop {r1} bx r1 .align 2, 0 -_080D3210: .4byte gUnknown_2039A2C +_080D3210: .4byte sTransitionStructPtr _080D3214: .4byte gScanlineEffectRegBuffers + 0x780 -_080D3218: .4byte sub_80D332C -_080D321C: .4byte sub_80D33C0 - thumb_func_end sub_80D31A4 +_080D3218: .4byte VBCB_BT_Phase2SlicedScreen +_080D321C: .4byte HBCB_BT_Phase2SlicedScreen + thumb_func_end BT_Phase2SlicedScreen_Init - thumb_func_start sub_80D3220 -sub_80D3220: @ 80D3220 + thumb_func_start BT_Phase2SlicedScreen_UpdateOffsets +BT_Phase2SlicedScreen_UpdateOffsets: @ 80D3220 push {r4-r7,lr} mov r7, r8 push {r7} adds r3, r0, 0 - ldr r2, _080D329C @ =gUnknown_2039A2C + ldr r2, _080D329C @ =sTransitionStructPtr ldr r1, [r2] ldrb r0, [r1] movs r0, 0 @@ -5442,7 +5442,7 @@ _080D3278: subs r0, r1 b _080D32BA .align 2, 0 -_080D329C: .4byte gUnknown_2039A2C +_080D329C: .4byte sTransitionStructPtr _080D32A0: .4byte 0x00000fff _080D32A4: .4byte gScanlineEffectRegBuffers _080D32A8: @@ -5482,10 +5482,10 @@ _080D32D4: pop {r4-r7} pop {r1} bx r1 - thumb_func_end sub_80D3220 + thumb_func_end BT_Phase2SlicedScreen_UpdateOffsets - thumb_func_start sub_80D32EC -sub_80D32EC: @ 80D32EC + thumb_func_start BT_Phase2SlicedScreen_End +BT_Phase2SlicedScreen_End: @ 80D32EC push {lr} ldr r1, _080D331C @ =0x040000b0 ldrh r2, [r1, 0xA] @@ -5497,8 +5497,8 @@ sub_80D32EC: @ 80D32EC ands r0, r2 strh r0, [r1, 0xA] ldrh r0, [r1, 0xA] - bl sub_80D3E60 - ldr r0, _080D3328 @ =sub_80D316C + bl BT_BlendPalettesToBlack + ldr r0, _080D3328 @ =BT_Phase2SlicedScreen bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -5510,11 +5510,11 @@ sub_80D32EC: @ 80D32EC _080D331C: .4byte 0x040000b0 _080D3320: .4byte 0x0000c5ff _080D3324: .4byte 0x00007fff -_080D3328: .4byte sub_80D316C - thumb_func_end sub_80D32EC +_080D3328: .4byte BT_Phase2SlicedScreen + thumb_func_end BT_Phase2SlicedScreen_End - thumb_func_start sub_80D332C -sub_80D332C: @ 80D332C + thumb_func_start VBCB_BT_Phase2SlicedScreen +VBCB_BT_Phase2SlicedScreen: @ 80D332C push {r4,r5,lr} ldr r5, _080D3398 @ =0x040000b0 ldrh r1, [r5, 0xA] @@ -5526,8 +5526,8 @@ sub_80D332C: @ 80D332C ands r0, r1 strh r0, [r5, 0xA] ldrh r0, [r5, 0xA] - bl sub_80D3DF4 - ldr r4, _080D33A4 @ =gUnknown_2039A2C + bl BT_VBSyncOamAndPltt + ldr r4, _080D33A4 @ =sTransitionStructPtr ldr r0, [r4] ldrh r1, [r0, 0x2] movs r0, 0x48 @@ -5569,17 +5569,17 @@ _080D3382: _080D3398: .4byte 0x040000b0 _080D339C: .4byte 0x0000c5ff _080D33A0: .4byte 0x00007fff -_080D33A4: .4byte gUnknown_2039A2C +_080D33A4: .4byte sTransitionStructPtr _080D33A8: .4byte 0x040000d4 _080D33AC: .4byte gScanlineEffectRegBuffers _080D33B0: .4byte 0x80000140 _080D33B4: .4byte gScanlineEffectRegBuffers + 0x8C0 _080D33B8: .4byte 0x04000040 _080D33BC: .4byte 0xa2400001 - thumb_func_end sub_80D332C + thumb_func_end VBCB_BT_Phase2SlicedScreen - thumb_func_start sub_80D33C0 -sub_80D33C0: @ 80D33C0 + thumb_func_start HBCB_BT_Phase2SlicedScreen +HBCB_BT_Phase2SlicedScreen: @ 80D33C0 ldr r1, _080D33E0 @ =gScanlineEffectRegBuffers ldr r0, _080D33E4 @ =0x04000006 ldrh r0, [r0] @@ -5600,14 +5600,14 @@ sub_80D33C0: @ 80D33C0 _080D33E0: .4byte gScanlineEffectRegBuffers _080D33E4: .4byte 0x04000006 _080D33E8: .4byte 0x04000014 - thumb_func_end sub_80D33C0 + thumb_func_end HBCB_BT_Phase2SlicedScreen - thumb_func_start sub_80D33EC -sub_80D33EC: @ 80D33EC + thumb_func_start BT_Phase2WhiteFadeInStripes +BT_Phase2WhiteFadeInStripes: @ 80D33EC push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D341C @ =gUnknown_83FA4F4 + ldr r5, _080D341C @ =sBT_Phase2WhiteFadeInStripesFuncs ldr r2, _080D3420 @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -5628,17 +5628,17 @@ _080D33FE: pop {r0} bx r0 .align 2, 0 -_080D341C: .4byte gUnknown_83FA4F4 +_080D341C: .4byte sBT_Phase2WhiteFadeInStripesFuncs _080D3420: .4byte gTasks - thumb_func_end sub_80D33EC + thumb_func_end BT_Phase2WhiteFadeInStripes - thumb_func_start sub_80D3424 -sub_80D3424: @ 80D3424 + thumb_func_start BT_Phase2WhiteFadeInStripes_Init +BT_Phase2WhiteFadeInStripes_Init: @ 80D3424 push {r4,r5,lr} adds r5, r0, 0 - bl sub_80D3DD0 + bl BT_InitCtrlBlk bl ScanlineEffect_Clear - ldr r0, _080D348C @ =gUnknown_2039A2C + ldr r0, _080D348C @ =sTransitionStructPtr ldr r1, [r0] movs r2, 0 movs r0, 0xBF @@ -5670,9 +5670,9 @@ _080D3450: bls _080D3450 movs r0, 0x2 bl EnableInterrupts - ldr r0, _080D3494 @ =sub_80D36E0 + ldr r0, _080D3494 @ =HBCB_BT_Phase2WhiteFadeInStripes bl SetHBlankCallback - ldr r0, _080D3498 @ =sub_80D35F4 + ldr r0, _080D3498 @ =VBCB_BT_Phase2WhiteFadeInStripes1 bl SetVBlankCallback ldrh r0, [r5, 0x8] adds r0, 0x1 @@ -5682,25 +5682,25 @@ _080D3450: pop {r1} bx r1 .align 2, 0 -_080D348C: .4byte gUnknown_2039A2C +_080D348C: .4byte sTransitionStructPtr _080D3490: .4byte gScanlineEffectRegBuffers + 0x780 -_080D3494: .4byte sub_80D36E0 -_080D3498: .4byte sub_80D35F4 - thumb_func_end sub_80D3424 +_080D3494: .4byte HBCB_BT_Phase2WhiteFadeInStripes +_080D3498: .4byte VBCB_BT_Phase2WhiteFadeInStripes1 + thumb_func_end BT_Phase2WhiteFadeInStripes_Init - thumb_func_start sub_80D349C -sub_80D349C: @ 80D349C + thumb_func_start BT_Phase2WhiteFadeInStripes_SetupSprites +BT_Phase2WhiteFadeInStripes_SetupSprites: @ 80D349C push {r4-r6,lr} sub sp, 0xC adds r6, r0, 0 - ldr r1, _080D3504 @ =gUnknown_83FA508 + ldr r1, _080D3504 @ =sWhiteStripeDelay mov r0, sp movs r2, 0xC bl memcpy movs r5, 0 movs r4, 0 _080D34B0: - ldr r0, _080D3508 @ =sub_80D3720 + ldr r0, _080D3508 @ =SpriteCB_BT_Phase2WhiteFadeInStripes bl CreateInvisibleSprite lsls r0, 24 lsrs r0, 24 @@ -5741,16 +5741,16 @@ _080D34B0: pop {r1} bx r1 .align 2, 0 -_080D3504: .4byte gUnknown_83FA508 -_080D3508: .4byte sub_80D3720 +_080D3504: .4byte sWhiteStripeDelay +_080D3508: .4byte SpriteCB_BT_Phase2WhiteFadeInStripes _080D350C: .4byte gSprites - thumb_func_end sub_80D349C + thumb_func_end BT_Phase2WhiteFadeInStripes_SetupSprites - thumb_func_start sub_80D3510 -sub_80D3510: @ 80D3510 + thumb_func_start BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone +BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone: @ 80D3510 push {r4,lr} adds r4, r0, 0 - ldr r2, _080D3544 @ =gUnknown_2039A2C + ldr r2, _080D3544 @ =sTransitionStructPtr ldr r1, [r2] ldrb r0, [r1] movs r0, 0 @@ -5774,15 +5774,15 @@ _080D353A: pop {r1} bx r1 .align 2, 0 -_080D3544: .4byte gUnknown_2039A2C +_080D3544: .4byte sTransitionStructPtr _080D3548: .4byte 0x00007fff - thumb_func_end sub_80D3510 + thumb_func_end BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone - thumb_func_start sub_80D354C -sub_80D354C: @ 80D354C + thumb_func_start BT_Phase2WhiteFadeInStripes_Stop +BT_Phase2WhiteFadeInStripes_Stop: @ 80D354C push {r4-r6,lr} adds r6, r0, 0 - ldr r5, _080D35A0 @ =gUnknown_2039A2C + ldr r5, _080D35A0 @ =sTransitionStructPtr ldr r0, [r5] ldrb r1, [r0] movs r4, 0 @@ -5810,7 +5810,7 @@ sub_80D354C: @ 80D354C movs r0, 0x3F strh r0, [r1, 0x2] strh r4, [r1, 0x20] - ldr r0, _080D35B0 @ =sub_80D3690 + ldr r0, _080D35B0 @ =VBCB_BT_Phase2WhiteFadeInStripes2 bl SetVBlankCallback ldrh r0, [r6, 0x8] adds r0, 0x1 @@ -5820,17 +5820,17 @@ sub_80D354C: @ 80D354C pop {r1} bx r1 .align 2, 0 -_080D35A0: .4byte gUnknown_2039A2C +_080D35A0: .4byte sTransitionStructPtr _080D35A4: .4byte 0x040000b0 _080D35A8: .4byte 0x0000c5ff _080D35AC: .4byte 0x00007fff -_080D35B0: .4byte sub_80D3690 - thumb_func_end sub_80D354C +_080D35B0: .4byte VBCB_BT_Phase2WhiteFadeInStripes2 + thumb_func_end BT_Phase2WhiteFadeInStripes_Stop - thumb_func_start sub_80D35B4 -sub_80D35B4: @ 80D35B4 + thumb_func_start BT_Phase2WhiteFadeInStripes_IsDone +BT_Phase2WhiteFadeInStripes_IsDone: @ 80D35B4 push {lr} - ldr r0, _080D35EC @ =gUnknown_2039A2C + ldr r0, _080D35EC @ =sTransitionStructPtr ldr r1, [r0] movs r2, 0xF0 lsls r2, 1 @@ -5845,8 +5845,8 @@ sub_80D35B4: @ 80D35B4 lsrs r0, 16 cmp r0, 0x10 bls _080D35E6 - bl sub_80D3E60 - ldr r0, _080D35F0 @ =sub_80D33EC + bl BT_BlendPalettesToBlack + ldr r0, _080D35F0 @ =BT_Phase2WhiteFadeInStripes bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -5856,12 +5856,12 @@ _080D35E6: pop {r1} bx r1 .align 2, 0 -_080D35EC: .4byte gUnknown_2039A2C -_080D35F0: .4byte sub_80D33EC - thumb_func_end sub_80D35B4 +_080D35EC: .4byte sTransitionStructPtr +_080D35F0: .4byte BT_Phase2WhiteFadeInStripes + thumb_func_end BT_Phase2WhiteFadeInStripes_IsDone - thumb_func_start sub_80D35F4 -sub_80D35F4: @ 80D35F4 + thumb_func_start VBCB_BT_Phase2WhiteFadeInStripes1 +VBCB_BT_Phase2WhiteFadeInStripes1: @ 80D35F4 push {r4,r5,lr} ldr r5, _080D3668 @ =0x040000b0 ldrh r1, [r5, 0xA] @@ -5873,8 +5873,8 @@ sub_80D35F4: @ 80D35F4 ands r0, r1 strh r0, [r5, 0xA] ldrh r0, [r5, 0xA] - bl sub_80D3DF4 - ldr r4, _080D3674 @ =gUnknown_2039A2C + bl BT_VBSyncOamAndPltt + ldr r4, _080D3674 @ =sTransitionStructPtr ldr r0, [r4] ldrh r1, [r0, 0xE] movs r0, 0x50 @@ -5920,20 +5920,20 @@ _080D3654: _080D3668: .4byte 0x040000b0 _080D366C: .4byte 0x0000c5ff _080D3670: .4byte 0x00007fff -_080D3674: .4byte gUnknown_2039A2C +_080D3674: .4byte sTransitionStructPtr _080D3678: .4byte 0x040000d4 _080D367C: .4byte gScanlineEffectRegBuffers _080D3680: .4byte 0x80000140 _080D3684: .4byte gScanlineEffectRegBuffers + 0x8C0 _080D3688: .4byte 0x04000040 _080D368C: .4byte 0xa2400001 - thumb_func_end sub_80D35F4 + thumb_func_end VBCB_BT_Phase2WhiteFadeInStripes1 - thumb_func_start sub_80D3690 -sub_80D3690: @ 80D3690 + thumb_func_start VBCB_BT_Phase2WhiteFadeInStripes2 +VBCB_BT_Phase2WhiteFadeInStripes2: @ 80D3690 push {r4,lr} - bl sub_80D3DF4 - ldr r4, _080D36DC @ =gUnknown_2039A2C + bl BT_VBSyncOamAndPltt + ldr r4, _080D36DC @ =sTransitionStructPtr ldr r0, [r4] ldrh r1, [r0, 0x12] movs r0, 0x54 @@ -5962,11 +5962,11 @@ sub_80D3690: @ 80D3690 pop {r0} bx r0 .align 2, 0 -_080D36DC: .4byte gUnknown_2039A2C - thumb_func_end sub_80D3690 +_080D36DC: .4byte sTransitionStructPtr + thumb_func_end VBCB_BT_Phase2WhiteFadeInStripes2 - thumb_func_start sub_80D36E0 -sub_80D36E0: @ 80D36E0 + thumb_func_start HBCB_BT_Phase2WhiteFadeInStripes +HBCB_BT_Phase2WhiteFadeInStripes: @ 80D36E0 push {lr} sub sp, 0x4 mov r1, sp @@ -5998,10 +5998,10 @@ _080D36F8: _080D3714: .4byte 0x04000006 _080D3718: .4byte 0x04000054 _080D371C: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D36E0 + thumb_func_end HBCB_BT_Phase2WhiteFadeInStripes - thumb_func_start sub_80D3720 -sub_80D3720: @ 80D3720 + thumb_func_start SpriteCB_BT_Phase2WhiteFadeInStripes +SpriteCB_BT_Phase2WhiteFadeInStripes: @ 80D3720 push {r4-r7,lr} adds r3, r0, 0 ldrh r1, [r3, 0x38] @@ -6015,14 +6015,14 @@ sub_80D3720: @ 80D3720 ldrsh r0, [r3, r1] cmp r0, 0 beq _080D380A - ldr r0, _080D3748 @ =gUnknown_2039A2C + ldr r0, _080D3748 @ =sTransitionStructPtr ldr r1, [r0] ldrb r0, [r1] movs r0, 0x1 strb r0, [r1] b _080D380A .align 2, 0 -_080D3748: .4byte gUnknown_2039A2C +_080D3748: .4byte sTransitionStructPtr _080D374C: movs r2, 0x22 ldrsh r0, [r3, r2] @@ -6099,7 +6099,7 @@ _080D37CE: ldrsh r0, [r3, r2] cmp r0, 0 beq _080D37E0 - ldr r0, _080D3814 @ =gUnknown_2039A2C + ldr r0, _080D3814 @ =sTransitionStructPtr ldr r1, [r0] ldrb r0, [r1] movs r0, 0x1 @@ -6111,7 +6111,7 @@ _080D37E0: beq _080D380A movs r2, 0x3A ldrsh r0, [r3, r2] - ldr r1, _080D3814 @ =gUnknown_2039A2C + ldr r1, _080D3814 @ =sTransitionStructPtr cmp r0, 0 beq _080D37FC ldr r0, [r1] @@ -6132,15 +6132,15 @@ _080D380A: bx r0 .align 2, 0 _080D3810: .4byte gScanlineEffectRegBuffers -_080D3814: .4byte gUnknown_2039A2C - thumb_func_end sub_80D3720 +_080D3814: .4byte sTransitionStructPtr + thumb_func_end SpriteCB_BT_Phase2WhiteFadeInStripes - thumb_func_start sub_80D3818 -sub_80D3818: @ 80D3818 + thumb_func_start BT_Phase2GridSquares +BT_Phase2GridSquares: @ 80D3818 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D3848 @ =gUnknown_83FA514 + ldr r5, _080D3848 @ =sBT_Phase2GridSquaresFuncs ldr r2, _080D384C @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -6161,19 +6161,19 @@ _080D382A: pop {r0} bx r0 .align 2, 0 -_080D3848: .4byte gUnknown_83FA514 +_080D3848: .4byte sBT_Phase2GridSquaresFuncs _080D384C: .4byte gTasks - thumb_func_end sub_80D3818 + thumb_func_end BT_Phase2GridSquares - thumb_func_start Phase2_Transition_GridSquares_Func1 -Phase2_Transition_GridSquares_Func1: @ 80D3850 + thumb_func_start BT_Phase2GridSquares_LoadGfx +BT_Phase2GridSquares_LoadGfx: @ 80D3850 push {r4,lr} sub sp, 0xC adds r4, r0, 0 add r0, sp, 0x4 add r1, sp, 0x8 - bl sub_80D3E28 - ldr r0, _080D3898 @ =gUnknown_83FA140 + bl BT_GetBg0TilemapAndTilesetBase + ldr r0, _080D3898 @ =sGridSquareTilemap ldr r1, [sp, 0x8] movs r2, 0x10 bl CpuSet @@ -6186,7 +6186,7 @@ Phase2_Transition_GridSquares_Func1: @ 80D3850 ldr r2, _080D389C @ =0x01000400 mov r0, sp bl CpuSet - ldr r0, _080D38A0 @ =gUnknown_83FA638 + ldr r0, _080D38A0 @ =sSlidingPokeballBigPokeballPalette movs r1, 0xF0 movs r2, 0x20 bl LoadPalette @@ -6199,13 +6199,13 @@ Phase2_Transition_GridSquares_Func1: @ 80D3850 pop {r1} bx r1 .align 2, 0 -_080D3898: .4byte gUnknown_83FA140 +_080D3898: .4byte sGridSquareTilemap _080D389C: .4byte 0x01000400 -_080D38A0: .4byte gUnknown_83FA638 - thumb_func_end Phase2_Transition_GridSquares_Func1 +_080D38A0: .4byte sSlidingPokeballBigPokeballPalette + thumb_func_end BT_Phase2GridSquares_LoadGfx - thumb_func_start Phase2_Transition_GridSquares_Func2 -Phase2_Transition_GridSquares_Func2: @ 80D38A4 + thumb_func_start BT_Phase2GridSquares_UpdateTileset +BT_Phase2GridSquares_UpdateTileset: @ 80D38A4 push {r4,lr} sub sp, 0x4 adds r4, r0, 0 @@ -6214,7 +6214,7 @@ Phase2_Transition_GridSquares_Func2: @ 80D38A4 cmp r0, 0 bne _080D38E6 mov r0, sp - bl sub_80D3E08 + bl BT_GetBg0TilesetBase movs r0, 0x3 strh r0, [r4, 0xA] ldrh r0, [r4, 0xC] @@ -6223,7 +6223,7 @@ Phase2_Transition_GridSquares_Func2: @ 80D38A4 movs r1, 0xC ldrsh r0, [r4, r1] lsls r0, 5 - ldr r1, _080D38F8 @ =gUnknown_83FA140 + ldr r1, _080D38F8 @ =sGridSquareTilemap adds r0, r1 ldr r1, [sp] movs r2, 0x10 @@ -6247,11 +6247,11 @@ _080D38E6: pop {r1} bx r1 .align 2, 0 -_080D38F8: .4byte gUnknown_83FA140 - thumb_func_end Phase2_Transition_GridSquares_Func2 +_080D38F8: .4byte sGridSquareTilemap + thumb_func_end BT_Phase2GridSquares_UpdateTileset - thumb_func_start Phase2_Transition_GridSquares_Func3 -Phase2_Transition_GridSquares_Func3: @ 80D38FC + thumb_func_start BT_Phase2GridSquares_IsDone +BT_Phase2GridSquares_IsDone: @ 80D38FC push {lr} ldrh r1, [r0, 0xA] subs r1, 0x1 @@ -6259,8 +6259,8 @@ Phase2_Transition_GridSquares_Func3: @ 80D38FC lsls r1, 16 cmp r1, 0 bne _080D391C - bl sub_80D3E60 - ldr r0, _080D3924 @ =sub_80D3818 + bl BT_BlendPalettesToBlack + ldr r0, _080D3924 @ =BT_Phase2GridSquares bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -6270,15 +6270,15 @@ _080D391C: pop {r1} bx r1 .align 2, 0 -_080D3924: .4byte sub_80D3818 - thumb_func_end Phase2_Transition_GridSquares_Func3 +_080D3924: .4byte BT_Phase2GridSquares + thumb_func_end BT_Phase2GridSquares_IsDone - thumb_func_start sub_80D3928 -sub_80D3928: @ 80D3928 + thumb_func_start BT_Phase2BlackDoodles +BT_Phase2BlackDoodles: @ 80D3928 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D3958 @ =gUnknown_83FA520 + ldr r5, _080D3958 @ =sBT_Phase2BlackDoodlesFuncs ldr r2, _080D395C @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -6299,17 +6299,17 @@ _080D393A: pop {r0} bx r0 .align 2, 0 -_080D3958: .4byte gUnknown_83FA520 +_080D3958: .4byte sBT_Phase2BlackDoodlesFuncs _080D395C: .4byte gTasks - thumb_func_end sub_80D3928 + thumb_func_end BT_Phase2BlackDoodles - thumb_func_start sub_80D3960 -sub_80D3960: @ 80D3960 + thumb_func_start BT_Phase2BlackDoodles_Init +BT_Phase2BlackDoodles_Init: @ 80D3960 push {r4,r5,lr} adds r5, r0, 0 - bl sub_80D3DD0 + bl BT_InitCtrlBlk bl ScanlineEffect_Clear - ldr r0, _080D39B8 @ =gUnknown_2039A2C + ldr r0, _080D39B8 @ =sTransitionStructPtr ldr r1, [r0] movs r2, 0 movs r0, 0x3F @@ -6336,7 +6336,7 @@ _080D3984: adds r0, r4, 0 movs r2, 0xA0 bl CpuSet - ldr r0, _080D39C0 @ =sub_80D3BA4 + ldr r0, _080D39C0 @ =VBCB_BT_Phase2BlackDoodles bl SetVBlankCallback ldrh r0, [r5, 0x8] adds r0, 0x1 @@ -6346,22 +6346,22 @@ _080D3984: pop {r1} bx r1 .align 2, 0 -_080D39B8: .4byte gUnknown_2039A2C +_080D39B8: .4byte sTransitionStructPtr _080D39BC: .4byte gScanlineEffectRegBuffers -_080D39C0: .4byte sub_80D3BA4 - thumb_func_end sub_80D3960 +_080D39C0: .4byte VBCB_BT_Phase2BlackDoodles + thumb_func_end BT_Phase2BlackDoodles_Init - thumb_func_start sub_80D39C4 -sub_80D39C4: @ 80D39C4 + thumb_func_start BT_Phase2BlackDoodles_InitSingleBrush +BT_Phase2BlackDoodles_InitSingleBrush: @ 80D39C4 push {r4-r6,lr} mov r6, r8 push {r6} sub sp, 0xC mov r8, r0 - ldr r0, _080D3A38 @ =gUnknown_2039A2C + ldr r0, _080D3A38 @ =sTransitionStructPtr ldr r0, [r0] adds r0, 0x24 - ldr r6, _080D3A3C @ =gUnknown_83FA534 + ldr r6, _080D3A3C @ =sBlackDoodlesSegments mov r2, r8 movs r3, 0xA ldrsh r1, [r2, r3] @@ -6387,7 +6387,7 @@ sub_80D39C4: @ 80D39C4 movs r4, 0x1 str r4, [sp, 0x4] str r4, [sp, 0x8] - bl sub_80D4088 + bl BT_DiagonalSegment_InitParams mov r0, r8 movs r2, 0xA ldrsh r1, [r0, r2] @@ -6410,18 +6410,18 @@ sub_80D39C4: @ 80D39C4 pop {r1} bx r1 .align 2, 0 -_080D3A38: .4byte gUnknown_2039A2C -_080D3A3C: .4byte gUnknown_83FA534 - thumb_func_end sub_80D39C4 +_080D3A38: .4byte sTransitionStructPtr +_080D3A3C: .4byte sBlackDoodlesSegments + thumb_func_end BT_Phase2BlackDoodles_InitSingleBrush - thumb_func_start sub_80D3A40 -sub_80D3A40: @ 80D3A40 + thumb_func_start BT_Phase2BlackDoodles_DrawSingleBrush +BT_Phase2BlackDoodles_DrawSingleBrush: @ 80D3A40 push {r4-r7,lr} mov r7, r9 mov r6, r8 push {r6,r7} adds r6, r0, 0 - ldr r0, _080D3A90 @ =gUnknown_2039A2C + ldr r0, _080D3A90 @ =sTransitionStructPtr ldr r1, [r0] ldrb r0, [r1] movs r0, 0 @@ -6432,7 +6432,7 @@ sub_80D3A40: @ 80D3A40 mov r9, r0 _080D3A5C: ldr r1, _080D3A94 @ =gScanlineEffectRegBuffers - ldr r0, _080D3A90 @ =gUnknown_2039A2C + ldr r0, _080D3A90 @ =sTransitionStructPtr ldr r2, [r0] movs r3, 0x2A ldrsh r0, [r2, r3] @@ -6459,7 +6459,7 @@ _080D3A84: lsrs r3, r1, 16 b _080D3AB0 .align 2, 0 -_080D3A90: .4byte gUnknown_2039A2C +_080D3A90: .4byte sTransitionStructPtr _080D3A94: .4byte gScanlineEffectRegBuffers _080D3A98: lsls r0, r5, 16 @@ -6476,7 +6476,7 @@ _080D3AA6: bgt _080D3AB0 lsrs r5, r1, 16 _080D3AB0: - ldr r0, _080D3AD4 @ =gUnknown_2039A2C + ldr r0, _080D3AD4 @ =sTransitionStructPtr ldr r4, [r0] movs r0, 0x2A ldrsh r2, [r4, r0] @@ -6495,13 +6495,13 @@ _080D3AB0: strh r0, [r6, 0x8] b _080D3AFC .align 2, 0 -_080D3AD4: .4byte gUnknown_2039A2C +_080D3AD4: .4byte sTransitionStructPtr _080D3AD8: adds r0, r4, 0 adds r0, 0x24 movs r1, 0x1 movs r2, 0x1 - bl sub_80D4104 + bl BT_DiagonalSegment_ComputePointOnSegment lsls r0, 24 lsrs r7, r0, 24 mov r1, r8 @@ -6515,7 +6515,7 @@ _080D3AD8: cmp r0, 0xF ble _080D3A5C _080D3AFC: - ldr r0, _080D3B18 @ =gUnknown_2039A2C + ldr r0, _080D3B18 @ =sTransitionStructPtr ldr r1, [r0] ldrb r0, [r1] adds r0, 0x1 @@ -6529,11 +6529,11 @@ _080D3AFC: pop {r1} bx r1 .align 2, 0 -_080D3B18: .4byte gUnknown_2039A2C - thumb_func_end sub_80D3A40 +_080D3B18: .4byte sTransitionStructPtr + thumb_func_end BT_Phase2BlackDoodles_DrawSingleBrush - thumb_func_start sub_80D3B1C -sub_80D3B1C: @ 80D3B1C + thumb_func_start BT_Phase2BlackDoodles_IsDone +BT_Phase2BlackDoodles_IsDone: @ 80D3B1C push {lr} adds r2, r0, 0 ldrh r0, [r2, 0xA] @@ -6553,8 +6553,8 @@ sub_80D3B1C: @ 80D3B1C ands r0, r2 strh r0, [r1, 0xA] ldrh r0, [r1, 0xA] - bl sub_80D3E60 - ldr r0, _080D3B64 @ =sub_80D3928 + bl BT_BlendPalettesToBlack + ldr r0, _080D3B64 @ =BT_Phase2BlackDoodles bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -6565,12 +6565,12 @@ sub_80D3B1C: @ 80D3B1C _080D3B58: .4byte 0x040000b0 _080D3B5C: .4byte 0x0000c5ff _080D3B60: .4byte 0x00007fff -_080D3B64: .4byte sub_80D3928 +_080D3B64: .4byte BT_Phase2BlackDoodles _080D3B68: ldrh r0, [r2, 0x8] adds r0, 0x1 strh r0, [r2, 0x8] - ldr r1, _080D3B84 @ =gUnknown_83FA57A + ldr r1, _080D3B84 @ =sBlackDoodlesDelay movs r3, 0xA ldrsh r0, [r2, r3] subs r0, 0x1 @@ -6583,11 +6583,11 @@ _080D3B80: pop {r1} bx r1 .align 2, 0 -_080D3B84: .4byte gUnknown_83FA57A - thumb_func_end sub_80D3B1C +_080D3B84: .4byte sBlackDoodlesDelay + thumb_func_end BT_Phase2BlackDoodles_IsDone - thumb_func_start sub_80D3B88 -sub_80D3B88: @ 80D3B88 + thumb_func_start BT_Phase2BlackDoodles_NextBrush +BT_Phase2BlackDoodles_NextBrush: @ 80D3B88 push {lr} adds r1, r0, 0 ldrh r0, [r1, 0xE] @@ -6604,10 +6604,10 @@ _080D3B9C: _080D3BA0: pop {r1} bx r1 - thumb_func_end sub_80D3B88 + thumb_func_end BT_Phase2BlackDoodles_NextBrush - thumb_func_start sub_80D3BA4 -sub_80D3BA4: @ 80D3BA4 + thumb_func_start VBCB_BT_Phase2BlackDoodles +VBCB_BT_Phase2BlackDoodles: @ 80D3BA4 push {r4,r5,lr} ldr r5, _080D3C1C @ =0x040000b0 ldrh r1, [r5, 0xA] @@ -6619,8 +6619,8 @@ sub_80D3BA4: @ 80D3BA4 ands r0, r1 strh r0, [r5, 0xA] ldrh r0, [r5, 0xA] - bl sub_80D3DF4 - ldr r4, _080D3C28 @ =gUnknown_2039A2C + bl BT_VBSyncOamAndPltt + ldr r4, _080D3C28 @ =sTransitionStructPtr ldr r0, [r4] ldrb r0, [r0] cmp r0, 0 @@ -6668,16 +6668,16 @@ _080D3BDC: _080D3C1C: .4byte 0x040000b0 _080D3C20: .4byte 0x0000c5ff _080D3C24: .4byte 0x00007fff -_080D3C28: .4byte gUnknown_2039A2C +_080D3C28: .4byte sTransitionStructPtr _080D3C2C: .4byte 0x040000d4 _080D3C30: .4byte gScanlineEffectRegBuffers _080D3C34: .4byte 0x800000a0 _080D3C38: .4byte 0x04000040 _080D3C3C: .4byte 0xa2400001 - thumb_func_end sub_80D3BA4 + thumb_func_end VBCB_BT_Phase2BlackDoodles - thumb_func_start CreatePhase1Task -CreatePhase1Task: @ 80D3C40 + thumb_func_start BT_CreatePhase1SubTask +BT_CreatePhase1SubTask: @ 80D3C40 push {r4-r6,lr} mov r6, r8 push {r6} @@ -6698,7 +6698,7 @@ CreatePhase1Task: @ 80D3C40 lsrs r6, 16 lsls r3, 16 lsrs r3, 16 - ldr r0, _080D3C9C @ =sub_80D3CC4 + ldr r0, _080D3C9C @ =BT_Phase1SubTask movs r1, 0x3 str r3, [sp] bl CreateTask @@ -6724,14 +6724,14 @@ CreatePhase1Task: @ 80D3C40 pop {r0} bx r0 .align 2, 0 -_080D3C9C: .4byte sub_80D3CC4 +_080D3C9C: .4byte BT_Phase1SubTask _080D3CA0: .4byte gTasks - thumb_func_end CreatePhase1Task + thumb_func_end BT_CreatePhase1SubTask - thumb_func_start sub_80D3CA4 -sub_80D3CA4: @ 80D3CA4 + thumb_func_start BT_IsPhase1Done +BT_IsPhase1Done: @ 80D3CA4 push {lr} - ldr r0, _080D3CB8 @ =sub_80D3CC4 + ldr r0, _080D3CB8 @ =BT_Phase1SubTask bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -6740,20 +6740,20 @@ sub_80D3CA4: @ 80D3CA4 movs r0, 0 b _080D3CBE .align 2, 0 -_080D3CB8: .4byte sub_80D3CC4 +_080D3CB8: .4byte BT_Phase1SubTask _080D3CBC: movs r0, 0x1 _080D3CBE: pop {r1} bx r1 - thumb_func_end sub_80D3CA4 + thumb_func_end BT_IsPhase1Done - thumb_func_start sub_80D3CC4 -sub_80D3CC4: @ 80D3CC4 + thumb_func_start BT_Phase1SubTask +BT_Phase1SubTask: @ 80D3CC4 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 - ldr r5, _080D3CF4 @ =gUnknown_83FA588 + ldr r5, _080D3CF4 @ =sBT_Phase1FadeFuncs ldr r2, _080D3CF8 @ =gTasks lsls r1, r0, 2 adds r1, r0 @@ -6774,12 +6774,12 @@ _080D3CD6: pop {r0} bx r0 .align 2, 0 -_080D3CF4: .4byte gUnknown_83FA588 +_080D3CF4: .4byte sBT_Phase1FadeFuncs _080D3CF8: .4byte gTasks - thumb_func_end sub_80D3CC4 + thumb_func_end BT_Phase1SubTask - thumb_func_start Phase1_TransitionAll_Func1 -Phase1_TransitionAll_Func1: @ 80D3CFC + thumb_func_start BT_Phase1_FadeOut +BT_Phase1_FadeOut: @ 80D3CFC push {r4,lr} adds r4, r0, 0 ldrh r1, [r4, 0x14] @@ -6828,10 +6828,10 @@ _080D3D4A: bx r1 .align 2, 0 _080D3D54: .4byte 0x00002d6b - thumb_func_end Phase1_TransitionAll_Func1 + thumb_func_end BT_Phase1_FadeOut - thumb_func_start Phase1_TransitionAll_Func2 -Phase1_TransitionAll_Func2: @ 80D3D58 + thumb_func_start BT_Phase1_FadeIn +BT_Phase1_FadeIn: @ 80D3D58 push {r4,lr} adds r4, r0, 0 ldrh r1, [r4, 0x14] @@ -6873,7 +6873,7 @@ _080D3D92: lsls r0, 16 cmp r0, 0 bne _080D3DC0 - ldr r0, _080D3DBC @ =sub_80D3CC4 + ldr r0, _080D3DBC @ =BT_Phase1SubTask bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -6881,7 +6881,7 @@ _080D3D92: b _080D3DC6 .align 2, 0 _080D3DB8: .4byte 0x00002d6b -_080D3DBC: .4byte sub_80D3CC4 +_080D3DBC: .4byte BT_Phase1SubTask _080D3DC0: ldrh r0, [r4, 0xA] strh r0, [r4, 0x14] @@ -6891,12 +6891,12 @@ _080D3DC6: pop {r4} pop {r1} bx r1 - thumb_func_end Phase1_TransitionAll_Func2 + thumb_func_end BT_Phase1_FadeIn - thumb_func_start sub_80D3DD0 -sub_80D3DD0: @ 80D3DD0 + thumb_func_start BT_InitCtrlBlk +BT_InitCtrlBlk: @ 80D3DD0 push {r4,lr} - ldr r4, _080D3DF0 @ =gUnknown_2039A2C + ldr r4, _080D3DF0 @ =sTransitionStructPtr ldr r0, [r4] movs r1, 0 movs r2, 0x3C @@ -6910,21 +6910,21 @@ sub_80D3DD0: @ 80D3DD0 pop {r0} bx r0 .align 2, 0 -_080D3DF0: .4byte gUnknown_2039A2C - thumb_func_end sub_80D3DD0 +_080D3DF0: .4byte sTransitionStructPtr + thumb_func_end BT_InitCtrlBlk - thumb_func_start sub_80D3DF4 -sub_80D3DF4: @ 80D3DF4 + thumb_func_start BT_VBSyncOamAndPltt +BT_VBSyncOamAndPltt: @ 80D3DF4 push {lr} bl LoadOam bl ProcessSpriteCopyRequests bl TransferPlttBuffer pop {r0} bx r0 - thumb_func_end sub_80D3DF4 + thumb_func_end BT_VBSyncOamAndPltt - thumb_func_start sub_80D3E08 -sub_80D3E08: @ 80D3E08 + thumb_func_start BT_GetBg0TilesetBase +BT_GetBg0TilesetBase: @ 80D3E08 push {r4,lr} adds r4, r0, 0 movs r0, 0x8 @@ -6940,10 +6940,10 @@ sub_80D3E08: @ 80D3E08 pop {r4} pop {r0} bx r0 - thumb_func_end sub_80D3E08 + thumb_func_end BT_GetBg0TilesetBase - thumb_func_start sub_80D3E28 -sub_80D3E28: @ 80D3E28 + thumb_func_start BT_GetBg0TilemapAndTilesetBase +BT_GetBg0TilemapAndTilesetBase: @ 80D3E28 push {r4-r6,lr} adds r5, r0, 0 adds r6, r1, 0 @@ -6970,10 +6970,10 @@ sub_80D3E28: @ 80D3E28 pop {r4-r6} pop {r0} bx r0 - thumb_func_end sub_80D3E28 + thumb_func_end BT_GetBg0TilemapAndTilesetBase - thumb_func_start sub_80D3E60 -sub_80D3E60: @ 80D3E60 + thumb_func_start BT_BlendPalettesToBlack +BT_BlendPalettesToBlack: @ 80D3E60 push {lr} movs r0, 0x1 negs r0, r0 @@ -6982,10 +6982,10 @@ sub_80D3E60: @ 80D3E60 bl BlendPalettes pop {r0} bx r0 - thumb_func_end sub_80D3E60 + thumb_func_end BT_BlendPalettesToBlack - thumb_func_start sub_80D3E74 -sub_80D3E74: @ 80D3E74 + thumb_func_start BT_LoadWaveIntoBuffer +BT_LoadWaveIntoBuffer: @ 80D3E74 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -7048,10 +7048,10 @@ _080D3EDC: bx r0 .align 2, 0 _080D3EEC: .4byte 0xffff0000 - thumb_func_end sub_80D3E74 + thumb_func_end BT_LoadWaveIntoBuffer - thumb_func_start sub_80D3EF0 -sub_80D3EF0: @ 80D3EF0 + thumb_func_start BT_GenerateCircle +BT_GenerateCircle: @ 80D3EF0 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -7267,10 +7267,10 @@ _080D4072: bx r0 .align 2, 0 _080D4084: .4byte 0xffff0000 - thumb_func_end sub_80D3EF0 + thumb_func_end BT_GenerateCircle - thumb_func_start sub_80D4088 -sub_80D4088: @ 80D4088 + thumb_func_start BT_DiagonalSegment_InitParams +BT_DiagonalSegment_InitParams: @ 80D4088 push {r4-r7,lr} adds r6, r0, 0 ldr r0, [sp, 0x14] @@ -7334,10 +7334,10 @@ _080D40F8: pop {r4-r7} pop {r0} bx r0 - thumb_func_end sub_80D4088 + thumb_func_end BT_DiagonalSegment_InitParams - thumb_func_start sub_80D4104 -sub_80D4104: @ 80D4104 + thumb_func_start BT_DiagonalSegment_ComputePointOnSegment +BT_DiagonalSegment_ComputePointOnSegment: @ 80D4104 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -7475,6 +7475,6 @@ _080D41F2: pop {r4-r7} pop {r1} bx r1 - thumb_func_end sub_80D4104 + thumb_func_end BT_DiagonalSegment_ComputePointOnSegment .align 2, 0 @ Don't pad with nop. diff --git a/asm/overworld.s b/asm/overworld.s index 39fbe770a..56c253477 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -3398,13 +3398,13 @@ sub_8056578: @ 8056578 bx r0 thumb_func_end sub_8056578 - thumb_func_start sub_80565A8 -sub_80565A8: @ 80565A8 + thumb_func_start CB2_OverworldBasic +CB2_OverworldBasic: @ 80565A8 push {lr} bl sub_8056578 pop {r0} bx r0 - thumb_func_end sub_80565A8 + thumb_func_end CB2_OverworldBasic thumb_func_start sub_80565B4 sub_80565B4: @ 80565B4 diff --git a/data/data_83F5738.s b/data/data_83F5738.s index a466ffd45..12fa41711 100644 --- a/data/data_83F5738.s +++ b/data/data_83F5738.s @@ -133,40 +133,40 @@ gUnknown_83F846D:: @ 83F846D gUnknown_83F847D:: @ 83F847D .incbin "baserom.gba", 0x3F847D, 0x323 -gUnknown_83F87A0:: @ 83F87A0 +sBigPokeballTileset:: @ 83F87A0 .incbin "baserom.gba", 0x3F87A0, 0x580 -gUnknown_83F8D20:: @ 83F8D20 +sSlidingPokeballTilemap:: @ 83F8D20 .incbin "baserom.gba", 0x3F8D20, 0x240 -gUnknown_83F8F60:: @ 83F8F60 +sVsBarTileset:: @ 83F8F60 .incbin "baserom.gba", 0x3F8F60, 0x11E0 -gUnknown_83FA140:: @ 83FA140 +sGridSquareTilemap:: @ 83FA140 .incbin "baserom.gba", 0x3FA140, 0x1E0 -gUnknown_83FA320:: @ 83FA320 +sBT_Phase1Tasks:: @ 83FA320 .incbin "baserom.gba", 0x3FA320, 0x48 -gUnknown_83FA368:: @ 83FA368 +sBT_Phase2Tasks:: @ 83FA368 .incbin "baserom.gba", 0x3FA368, 0x48 -gUnknown_83FA3B0:: @ 83FA3B0 +sBT_MainPhases:: @ 83FA3B0 .incbin "baserom.gba", 0x3FA3B0, 0x10 -gUnknown_83FA3C0:: @ 83FA3C0 +sBT_Phase2BlurFuncs:: @ 83FA3C0 .incbin "baserom.gba", 0x3FA3C0, 0xC -gUnknown_83FA3CC:: @ 83FA3CC +sBT_Phase2DistortedWaveFuncs:: @ 83FA3CC .incbin "baserom.gba", 0x3FA3CC, 0x8 -gUnknown_83FA3D4:: @ 83FA3D4 +sBT_Phase2HorizontalCorrugateFuncs:: @ 83FA3D4 .incbin "baserom.gba", 0x3FA3D4, 0x8 -gUnknown_83FA3DC:: @ 83FA3DC +sBT_Phase2BigPokeballFuncs:: @ 83FA3DC .incbin "baserom.gba", 0x3FA3DC, 0x18 -gUnknown_83FA3F4:: @ 83FA3F4 +sBT_Phase2SlidingPokeballsFuncs:: @ 83FA3F4 .incbin "baserom.gba", 0x3FA3F4, 0xC gUnknown_83FA400:: @ 83FA400 @@ -178,82 +178,82 @@ gUnknown_83FA404:: @ 83FA404 gUnknown_83FA40E:: @ 83FA40E .incbin "baserom.gba", 0x3FA40E, 0x6 -gUnknown_83FA414:: @ 83FA414 +sBT_Phase2ClockwiseBlackFadeFuncs:: @ 83FA414 .incbin "baserom.gba", 0x3FA414, 0x1C -gUnknown_83FA430:: @ 83FA430 +sBT_Phase2FullScreenWaveFuncs:: @ 83FA430 .incbin "baserom.gba", 0x3FA430, 0x8 -gUnknown_83FA438:: @ 83FA438 +sBT_Phase2BlackWaveToRightFuncs:: @ 83FA438 .incbin "baserom.gba", 0x3FA438, 0xC gUnknown_83FA444:: @ 83FA444 .incbin "baserom.gba", 0x3FA444, 0x20 -gUnknown_83FA464:: @ 83FA464 +sBT_Phase2AntiClockwiseSpiralFuncs:: @ 83FA464 .incbin "baserom.gba", 0x3FA464, 0x8 -gUnknown_83FA46C:: @ 83FA46C +sBT_Phase2MugshotFuncs:: @ 83FA46C .incbin "baserom.gba", 0x3FA46C, 0x28 -gUnknown_83FA494:: @ 83FA494 +sMugshotsTrainerPicIDsTable:: @ 83FA494 .incbin "baserom.gba", 0x3FA494, 0x6 -gUnknown_83FA49A:: @ 83FA49A +sMugshotsOpponentRotationScales:: @ 83FA49A .incbin "baserom.gba", 0x3FA49A, 0x14 -gUnknown_83FA4AE:: @ 83FA4AE +sMugshotsOpponentCoords:: @ 83FA4AE .incbin "baserom.gba", 0x3FA4AE, 0x16 -gUnknown_83FA4C4:: @ 83FA4C4 +sBT_Phase2MugshotSpriteFuncs:: @ 83FA4C4 .incbin "baserom.gba", 0x3FA4C4, 0x1C -gUnknown_83FA4E0:: @ 83FA4E0 +sMugShotSlideVelocity:: @ 83FA4E0 .incbin "baserom.gba", 0x3FA4E0, 0x4 -gUnknown_83FA4E4:: @ 83FA4E4 +sMugShotSlideDeceleration:: @ 83FA4E4 .incbin "baserom.gba", 0x3FA4E4, 0x4 -gUnknown_83FA4E8:: @ 83FA4E8 +sBT_Phase2SlicedScreenFuncs:: @ 83FA4E8 .incbin "baserom.gba", 0x3FA4E8, 0xC -gUnknown_83FA4F4:: @ 83FA4F4 +sBT_Phase2WhiteFadeInStripesFuncs:: @ 83FA4F4 .incbin "baserom.gba", 0x3FA4F4, 0x14 -gUnknown_83FA508:: @ 83FA508 +sWhiteStripeDelay:: @ 83FA508 .incbin "baserom.gba", 0x3FA508, 0xC -gUnknown_83FA514:: @ 83FA514 +sBT_Phase2GridSquaresFuncs:: @ 83FA514 .incbin "baserom.gba", 0x3FA514, 0xC -gUnknown_83FA520:: @ 83FA520 +sBT_Phase2BlackDoodlesFuncs:: @ 83FA520 .incbin "baserom.gba", 0x3FA520, 0x14 -gUnknown_83FA534:: @ 83FA534 +sBlackDoodlesSegments:: @ 83FA534 .incbin "baserom.gba", 0x3FA534, 0x46 -gUnknown_83FA57A:: @ 83FA57A +sBlackDoodlesDelay:: @ 83FA57A .incbin "baserom.gba", 0x3FA57A, 0xE -gUnknown_83FA588:: @ 83FA588 +sBT_Phase1FadeFuncs:: @ 83FA588 .incbin "baserom.gba", 0x3FA588, 0x44 -gUnknown_83FA5CC:: @ 83FA5CC +sSpriteTemplate_SlidingPokeball:: @ 83FA5CC .incbin "baserom.gba", 0x3FA5CC, 0x6C -gUnknown_83FA638:: @ 83FA638 +sSlidingPokeballBigPokeballPalette:: @ 83FA638 .incbin "baserom.gba", 0x3FA638, 0x108 -gUnknown_83FA740:: @ 83FA740 +sVsBarOpponentPalettes:: @ 83FA740 .incbin "baserom.gba", 0x3FA740, 0x14 -gUnknown_83FA754:: @ 83FA754 +sVsBarPlayerPalettes:: @ 83FA754 .incbin "baserom.gba", 0x3FA754, 0x30 -gUnknown_83FA784:: @ 83FA784 +sBigPokeballTilemap:: @ 83FA784 .incbin "baserom.gba", 0x3FA784, 0x4B0 -gUnknown_83FAC34:: @ 83FAC34 +sVsBarTilemap:: @ 83FAC34 .incbin "baserom.gba", 0x3FAC34, 0x500 gUnknown_83FB134:: @ 83FB134 diff --git a/include/battle_transition.h b/include/battle_transition.h index 91e564790..8f29d40b3 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -4,7 +4,7 @@ #include "global.h" void sub_8149DFC(u8 a0); -bool8 sub_80D08F8(void); -void sub_80D08B8(u8 a0); +bool8 BT_IsDone(void); +void BT_StartOnField(u8 a0); #endif // GUARD_BATTLE_TRANSITION_H diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 0b0e7b932..3594c79a2 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1208,11 +1208,11 @@ static void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) switch (data[7]) { case 0: - sub_80D08B8(data[6]); + BT_StartOnField(data[6]); ++data[7]; break; case 1: - if (sub_80D08F8()) + if (BT_IsDone()) { SetMainCallback2(sub_800FD9C); DestroyTask(taskId); diff --git a/src/trainer_tower.c b/src/trainer_tower.c index f1ae2d4e5..d80be781d 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -1111,7 +1111,7 @@ void sub_815E114(void) void sub_815E124(u8 taskId) { - if (sub_80D08F8() == TRUE) + if (BT_IsDone() == TRUE) { gMain.savedCallback = sub_815E114; CleanupOverworldWindowsAndTilemaps(); @@ -1129,7 +1129,7 @@ void sub_815E160(void) sub_815E9FC(); CreateTask(sub_815E124, 1); PlayMapChosenOrBattleBGM(0); - sub_80D08B8(sub_8080060()); + BT_StartOnField(sub_8080060()); } void sub_815E1C0(void) diff --git a/sym_ewram.txt b/sym_ewram.txt index a1739776e..e97441132 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1057,7 +1057,7 @@ gUnknown_2039A24: @ 2039A24 .include "src/coins.o" .align 2 -gUnknown_2039A2C: @ 2039A2C +sTransitionStructPtr: @ 2039A2C .space 0x4 gUnknown_2039A30: @ 2039A30 -- cgit v1.2.3 From a674ba2749871cb1c26c4c17719cc784e329f815 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 23 Jul 2019 09:31:54 +0800 Subject: updated battle transition header --- include/battle_transition.h | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/include/battle_transition.h b/include/battle_transition.h index 8f29d40b3..4e9d0029c 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -3,8 +3,37 @@ #include "global.h" -void sub_8149DFC(u8 a0); bool8 BT_IsDone(void); -void BT_StartOnField(u8 a0); +void BT_StartOnField(u8 transitionId); +bool8 FldEff_Pokeball(void); + +enum +{ + MUGSHOT_LORELEI, + MUGSHOT_BRUNO, + MUGSHOT_AGATHA, + MUGSHOT_LANCE, + MUGSHOT_BLUE, + MUGSHOTS_COUNT +}; + +#define B_TRANSITION_BLUR 0 +#define B_TRANSITION_DISTORTED_WAVE 1 +#define B_TRANSITION_HORIZONTAL_CORRUGATE 2 +#define B_TRANSITION_BIG_POKEBALL 3 +#define B_TRANSITION_SLIDING_POKEBALLS 4 +#define B_TRANSITION_CLOCKWISE_BLACKFADE 5 +#define B_TRANSITION_FULLSCREEN_WAVE 6 +#define B_TRANSITION_BLACK_WAVE_TO_RIGHT 7 +#define B_TRANSITION_SLICED_SCREEN 8 +#define B_TRANSITION_WHITEFADE_IN_STRIPES 9 +#define B_TRANSITION_GRID_SQUARES 10 +#define B_TRANSITION_BLACK_DOODLES 11 +#define B_TRANSITION_LORELEI 12 +#define B_TRANSITION_BRUNO 13 +#define B_TRANSITION_AGATHA 14 +#define B_TRANSITION_LANCE 15 +#define B_TRANSITION_BLUE 16 +#define B_TRANSITION_ANTI_CLOCKWISE_SPIRAL 17 #endif // GUARD_BATTLE_TRANSITION_H -- cgit v1.2.3 From e150a620450a17bb2ab3905c04c33777dc6bf0cc Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 23 Jul 2019 14:07:10 +0800 Subject: battle transition data decomp --- data/data_83F5738.s | 123 +---- data/field_map_obj.s | 8 +- graphics/battle_transitions/agatha_bg.pal | 19 + .../battle_transitions/big_pokeball_tilemap.bin | Bin 0 -> 1200 bytes .../battle_transitions/big_pokeball_tileset.png | Bin 0 -> 553 bytes graphics/battle_transitions/blue_bg.pal | 19 + graphics/battle_transitions/bruno_bg.pal | 19 + graphics/battle_transitions/green_bg.pal | 19 + .../battle_transitions/grid_square_tilemap.bin | Bin 0 -> 480 bytes graphics/battle_transitions/lance_bg.pal | 19 + graphics/battle_transitions/lorelei_bg.pal | 19 + graphics/battle_transitions/red_bg.pal | 19 + graphics/battle_transitions/sliding_pokeball.pal | 19 + graphics/battle_transitions/sliding_pokeball.png | Bin 0 -> 309 bytes .../sliding_pokeball_tilemap.bin | Bin 0 -> 64 bytes graphics/battle_transitions/unused_brendan.png | Bin 0 -> 475 bytes graphics/battle_transitions/unused_lass.png | Bin 0 -> 412 bytes graphics/battle_transitions/unused_trainer.pal | 19 + graphics/battle_transitions/vsbar_tilemap.bin | Bin 0 -> 1280 bytes graphics/battle_transitions/vsbar_tileset.png | Bin 0 -> 158 bytes include/battle_transition.h | 10 +- ld_script.txt | 2 + src/battle_transition.c | 577 +++++++++++++++++++++ sym_ewram.txt | 5 +- 24 files changed, 765 insertions(+), 131 deletions(-) create mode 100644 graphics/battle_transitions/agatha_bg.pal create mode 100644 graphics/battle_transitions/big_pokeball_tilemap.bin create mode 100644 graphics/battle_transitions/big_pokeball_tileset.png create mode 100644 graphics/battle_transitions/blue_bg.pal create mode 100644 graphics/battle_transitions/bruno_bg.pal create mode 100644 graphics/battle_transitions/green_bg.pal create mode 100644 graphics/battle_transitions/grid_square_tilemap.bin create mode 100644 graphics/battle_transitions/lance_bg.pal create mode 100644 graphics/battle_transitions/lorelei_bg.pal create mode 100644 graphics/battle_transitions/red_bg.pal create mode 100644 graphics/battle_transitions/sliding_pokeball.pal create mode 100644 graphics/battle_transitions/sliding_pokeball.png create mode 100644 graphics/battle_transitions/sliding_pokeball_tilemap.bin create mode 100644 graphics/battle_transitions/unused_brendan.png create mode 100644 graphics/battle_transitions/unused_lass.png create mode 100644 graphics/battle_transitions/unused_trainer.pal create mode 100644 graphics/battle_transitions/vsbar_tilemap.bin create mode 100644 graphics/battle_transitions/vsbar_tileset.png create mode 100644 src/battle_transition.c diff --git a/data/data_83F5738.s b/data/data_83F5738.s index 12fa41711..dc09b0532 100644 --- a/data/data_83F5738.s +++ b/data/data_83F5738.s @@ -133,128 +133,7 @@ gUnknown_83F846D:: @ 83F846D gUnknown_83F847D:: @ 83F847D .incbin "baserom.gba", 0x3F847D, 0x323 -sBigPokeballTileset:: @ 83F87A0 - .incbin "baserom.gba", 0x3F87A0, 0x580 - -sSlidingPokeballTilemap:: @ 83F8D20 - .incbin "baserom.gba", 0x3F8D20, 0x240 - -sVsBarTileset:: @ 83F8F60 - .incbin "baserom.gba", 0x3F8F60, 0x11E0 - -sGridSquareTilemap:: @ 83FA140 - .incbin "baserom.gba", 0x3FA140, 0x1E0 - -sBT_Phase1Tasks:: @ 83FA320 - .incbin "baserom.gba", 0x3FA320, 0x48 - -sBT_Phase2Tasks:: @ 83FA368 - .incbin "baserom.gba", 0x3FA368, 0x48 - -sBT_MainPhases:: @ 83FA3B0 - .incbin "baserom.gba", 0x3FA3B0, 0x10 - -sBT_Phase2BlurFuncs:: @ 83FA3C0 - .incbin "baserom.gba", 0x3FA3C0, 0xC - -sBT_Phase2DistortedWaveFuncs:: @ 83FA3CC - .incbin "baserom.gba", 0x3FA3CC, 0x8 - -sBT_Phase2HorizontalCorrugateFuncs:: @ 83FA3D4 - .incbin "baserom.gba", 0x3FA3D4, 0x8 - -sBT_Phase2BigPokeballFuncs:: @ 83FA3DC - .incbin "baserom.gba", 0x3FA3DC, 0x18 - -sBT_Phase2SlidingPokeballsFuncs:: @ 83FA3F4 - .incbin "baserom.gba", 0x3FA3F4, 0xC - -gUnknown_83FA400:: @ 83FA400 - .incbin "baserom.gba", 0x3FA400, 0x4 - -gUnknown_83FA404:: @ 83FA404 - .incbin "baserom.gba", 0x3FA404, 0xA - -gUnknown_83FA40E:: @ 83FA40E - .incbin "baserom.gba", 0x3FA40E, 0x6 - -sBT_Phase2ClockwiseBlackFadeFuncs:: @ 83FA414 - .incbin "baserom.gba", 0x3FA414, 0x1C - -sBT_Phase2FullScreenWaveFuncs:: @ 83FA430 - .incbin "baserom.gba", 0x3FA430, 0x8 - -sBT_Phase2BlackWaveToRightFuncs:: @ 83FA438 - .incbin "baserom.gba", 0x3FA438, 0xC - -gUnknown_83FA444:: @ 83FA444 - .incbin "baserom.gba", 0x3FA444, 0x20 - -sBT_Phase2AntiClockwiseSpiralFuncs:: @ 83FA464 - .incbin "baserom.gba", 0x3FA464, 0x8 - -sBT_Phase2MugshotFuncs:: @ 83FA46C - .incbin "baserom.gba", 0x3FA46C, 0x28 - -sMugshotsTrainerPicIDsTable:: @ 83FA494 - .incbin "baserom.gba", 0x3FA494, 0x6 - -sMugshotsOpponentRotationScales:: @ 83FA49A - .incbin "baserom.gba", 0x3FA49A, 0x14 - -sMugshotsOpponentCoords:: @ 83FA4AE - .incbin "baserom.gba", 0x3FA4AE, 0x16 - -sBT_Phase2MugshotSpriteFuncs:: @ 83FA4C4 - .incbin "baserom.gba", 0x3FA4C4, 0x1C - -sMugShotSlideVelocity:: @ 83FA4E0 - .incbin "baserom.gba", 0x3FA4E0, 0x4 - -sMugShotSlideDeceleration:: @ 83FA4E4 - .incbin "baserom.gba", 0x3FA4E4, 0x4 - -sBT_Phase2SlicedScreenFuncs:: @ 83FA4E8 - .incbin "baserom.gba", 0x3FA4E8, 0xC - -sBT_Phase2WhiteFadeInStripesFuncs:: @ 83FA4F4 - .incbin "baserom.gba", 0x3FA4F4, 0x14 - -sWhiteStripeDelay:: @ 83FA508 - .incbin "baserom.gba", 0x3FA508, 0xC - -sBT_Phase2GridSquaresFuncs:: @ 83FA514 - .incbin "baserom.gba", 0x3FA514, 0xC - -sBT_Phase2BlackDoodlesFuncs:: @ 83FA520 - .incbin "baserom.gba", 0x3FA520, 0x14 - -sBlackDoodlesSegments:: @ 83FA534 - .incbin "baserom.gba", 0x3FA534, 0x46 - -sBlackDoodlesDelay:: @ 83FA57A - .incbin "baserom.gba", 0x3FA57A, 0xE - -sBT_Phase1FadeFuncs:: @ 83FA588 - .incbin "baserom.gba", 0x3FA588, 0x44 - -sSpriteTemplate_SlidingPokeball:: @ 83FA5CC - .incbin "baserom.gba", 0x3FA5CC, 0x6C - -sSlidingPokeballBigPokeballPalette:: @ 83FA638 - .incbin "baserom.gba", 0x3FA638, 0x108 - -sVsBarOpponentPalettes:: @ 83FA740 - .incbin "baserom.gba", 0x3FA740, 0x14 - -sVsBarPlayerPalettes:: @ 83FA754 - .incbin "baserom.gba", 0x3FA754, 0x30 - -sBigPokeballTilemap:: @ 83FA784 - .incbin "baserom.gba", 0x3FA784, 0x4B0 - -sVsBarTilemap:: @ 83FAC34 - .incbin "baserom.gba", 0x3FAC34, 0x500 + .section .rodata.83FB134 gUnknown_83FB134:: @ 83FB134 .incbin "baserom.gba", 0x3FB134, 0xA80 diff --git a/data/field_map_obj.s b/data/field_map_obj.s index d12de7aa9..72d20cd4e 100644 --- a/data/field_map_obj.s +++ b/data/field_map_obj.s @@ -31,7 +31,13 @@ gUnknown_83A0010:: @ 83A0010 .incbin "baserom.gba", 0x3A0010, 0x3688 gUnknown_83A3698:: @ 83A3698 - .incbin "baserom.gba", 0x3A3698, 0x1AC0 + .incbin "baserom.gba", 0x3A3698, 0x80 + +gEventObjectBaseOam_32x32:: @ 83A3718 + .incbin "baserom.gba", 0x3A3718, 0x8 + +gUnknown_83A3720:: @ 83A3720 + .incbin "baserom.gba", 0x3A3720, 0x1a38 gUnknown_83A5158:: @ 83A5158 .incbin "baserom.gba", 0x3A5158, 0xB0 diff --git a/graphics/battle_transitions/agatha_bg.pal b/graphics/battle_transitions/agatha_bg.pal new file mode 100644 index 000000000..4aac79fec --- /dev/null +++ b/graphics/battle_transitions/agatha_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 49 49 +115 115 115 +148 148 148 +180 180 180 +213 213 213 +255 82 172 +255 98 189 +255 115 205 +255 131 222 +255 148 238 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_transitions/big_pokeball_tilemap.bin b/graphics/battle_transitions/big_pokeball_tilemap.bin new file mode 100644 index 000000000..691e16ef7 Binary files /dev/null and b/graphics/battle_transitions/big_pokeball_tilemap.bin differ diff --git a/graphics/battle_transitions/big_pokeball_tileset.png b/graphics/battle_transitions/big_pokeball_tileset.png new file mode 100644 index 000000000..21b227441 Binary files /dev/null and b/graphics/battle_transitions/big_pokeball_tileset.png differ diff --git a/graphics/battle_transitions/blue_bg.pal b/graphics/battle_transitions/blue_bg.pal new file mode 100644 index 000000000..30da9c5f9 --- /dev/null +++ b/graphics/battle_transitions/blue_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 49 49 +115 115 115 +148 148 148 +180 180 180 +213 213 213 +197 197 65 +213 213 82 +230 230 98 +246 246 115 +255 255 131 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_transitions/bruno_bg.pal b/graphics/battle_transitions/bruno_bg.pal new file mode 100644 index 000000000..b55e6a6cd --- /dev/null +++ b/graphics/battle_transitions/bruno_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 49 49 +115 115 115 +148 148 148 +180 180 180 +213 213 213 +8 213 8 +32 238 32 +49 246 49 +74 255 74 +123 255 123 +230 123 139 +246 139 156 +255 156 172 +255 172 189 +255 189 205 +230 123 139 diff --git a/graphics/battle_transitions/green_bg.pal b/graphics/battle_transitions/green_bg.pal new file mode 100644 index 000000000..8ebd38309 --- /dev/null +++ b/graphics/battle_transitions/green_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 123 139 +246 139 156 +255 156 172 +255 172 189 +255 189 205 +255 255 255 +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/battle_transitions/grid_square_tilemap.bin b/graphics/battle_transitions/grid_square_tilemap.bin new file mode 100644 index 000000000..7f67463eb Binary files /dev/null and b/graphics/battle_transitions/grid_square_tilemap.bin differ diff --git a/graphics/battle_transitions/lance_bg.pal b/graphics/battle_transitions/lance_bg.pal new file mode 100644 index 000000000..6717a90bd --- /dev/null +++ b/graphics/battle_transitions/lance_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 49 49 +115 115 115 +148 148 148 +180 180 180 +213 213 213 +0 0 131 +16 16 148 +32 32 164 +49 49 180 +65 65 197 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_transitions/lorelei_bg.pal b/graphics/battle_transitions/lorelei_bg.pal new file mode 100644 index 000000000..1f30ed062 --- /dev/null +++ b/graphics/battle_transitions/lorelei_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 49 49 +115 115 115 +148 148 148 +180 180 180 +213 213 213 +189 0 189 +205 16 205 +222 32 222 +238 49 238 +255 65 255 +106 180 213 +123 197 230 +139 213 246 +156 230 255 +172 246 255 +255 255 255 diff --git a/graphics/battle_transitions/red_bg.pal b/graphics/battle_transitions/red_bg.pal new file mode 100644 index 000000000..e43b0f74c --- /dev/null +++ b/graphics/battle_transitions/red_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +106 180 213 +123 197 230 +139 213 246 +156 230 255 +172 246 255 +255 255 255 +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/battle_transitions/sliding_pokeball.pal b/graphics/battle_transitions/sliding_pokeball.pal new file mode 100644 index 000000000..6190709ed --- /dev/null +++ b/graphics/battle_transitions/sliding_pokeball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 172 238 +246 8 0 +238 213 180 +222 180 148 +255 255 255 +222 230 238 +189 205 230 +156 180 222 +98 156 180 +148 0 0 +197 197 197 +238 230 164 +222 205 131 +213 180 106 +205 156 82 +0 0 0 diff --git a/graphics/battle_transitions/sliding_pokeball.png b/graphics/battle_transitions/sliding_pokeball.png new file mode 100644 index 000000000..3802a915b Binary files /dev/null and b/graphics/battle_transitions/sliding_pokeball.png differ diff --git a/graphics/battle_transitions/sliding_pokeball_tilemap.bin b/graphics/battle_transitions/sliding_pokeball_tilemap.bin new file mode 100644 index 000000000..6cdeb0d17 Binary files /dev/null and b/graphics/battle_transitions/sliding_pokeball_tilemap.bin differ diff --git a/graphics/battle_transitions/unused_brendan.png b/graphics/battle_transitions/unused_brendan.png new file mode 100644 index 000000000..926ba0ff7 Binary files /dev/null and b/graphics/battle_transitions/unused_brendan.png differ diff --git a/graphics/battle_transitions/unused_lass.png b/graphics/battle_transitions/unused_lass.png new file mode 100644 index 000000000..378fa3c19 Binary files /dev/null and b/graphics/battle_transitions/unused_lass.png differ diff --git a/graphics/battle_transitions/unused_trainer.pal b/graphics/battle_transitions/unused_trainer.pal new file mode 100644 index 000000000..ad94d728a --- /dev/null +++ b/graphics/battle_transitions/unused_trainer.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +255 222 205 +222 164 148 +205 131 115 +123 90 82 +57 74 123 +41 57 98 +24 41 82 +16 32 57 +222 230 238 +255 197 90 +189 156 90 +255 98 90 +197 65 65 +255 255 255 +0 0 0 diff --git a/graphics/battle_transitions/vsbar_tilemap.bin b/graphics/battle_transitions/vsbar_tilemap.bin new file mode 100644 index 000000000..4f170b470 Binary files /dev/null and b/graphics/battle_transitions/vsbar_tilemap.bin differ diff --git a/graphics/battle_transitions/vsbar_tileset.png b/graphics/battle_transitions/vsbar_tileset.png new file mode 100644 index 000000000..1d327cdaf Binary files /dev/null and b/graphics/battle_transitions/vsbar_tileset.png differ diff --git a/include/battle_transition.h b/include/battle_transition.h index 4e9d0029c..4ef5f19d9 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -3,10 +3,6 @@ #include "global.h" -bool8 BT_IsDone(void); -void BT_StartOnField(u8 transitionId); -bool8 FldEff_Pokeball(void); - enum { MUGSHOT_LORELEI, @@ -36,4 +32,10 @@ enum #define B_TRANSITION_BLUE 16 #define B_TRANSITION_ANTI_CLOCKWISE_SPIRAL 17 +extern const struct SpritePalette sSpritePalette_SlidingPokeball; + +bool8 BT_IsDone(void); +void BT_StartOnField(u8 transitionId); +bool8 FldEff_Pokeball(void); + #endif // GUARD_BATTLE_TRANSITION_H diff --git a/ld_script.txt b/ld_script.txt index c6b35f651..1dc198e6f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -418,6 +418,8 @@ SECTIONS { data/data_83F5738.o(.rodata); src/battle_records.o(.rodata); data/data_83F5738.o(.rodata.83F6C90); + src/battle_transition.o(.rodata); + data/data_83F5738.o(.rodata.83FB134); src/save.o(.rodata); data/data_83FECCC.o(.rodata); src/intro.o(.rodata); diff --git a/src/battle_transition.c b/src/battle_transition.c new file mode 100644 index 000000000..7894a5b73 --- /dev/null +++ b/src/battle_transition.c @@ -0,0 +1,577 @@ +#include "global.h" +#include "sprite.h" +#include "task.h" +#include "battle_transition.h" + +typedef bool8 (*TransitionStateFunc)(struct Task *task); +typedef bool8 (*TransitionSpriteCallback)(struct Sprite *sprite); + +struct TransitionData +{ + vu8 vblankDma; + u16 winIn; + u16 winOut; + u16 win0H; + u16 win0V; + u16 unused_A; + u16 unused_C; + u16 bldCnt; + u16 bldAlpha; + u16 bldY; + s16 bg123HOfs; + s16 bg123VOfs; + s16 bg0HOfsOpponent; + s16 bg0HOfsPlayer; + s16 bg0VOfs; + s16 unused_1E; + s16 counter; + s16 unused_22; + s16 data[11]; // for multiple purposes +}; + +struct __attribute__((packed)) BlackDoodleSegment +{ + s16 startPtX; + s16 startPtY; + s16 endPtX; + s16 endPtY; + u16 whichSide; +}; + +EWRAM_DATA struct TransitionData *sTransitionStructPtr = NULL; + +// TODO: move this declaration to include/event_object_movement.h +extern const struct OamData gEventObjectBaseOam_32x32; + +bool8 BT_Phase1_FadeOut(struct Task *task); +bool8 BT_Phase1_FadeIn(struct Task *task); +bool8 BT_Phase2BlackDoodles_Init(struct Task *task); +bool8 BT_Phase2BlackDoodles_InitSingleBrush(struct Task *task); +bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task); +bool8 BT_Phase2BlackDoodles_IsDone(struct Task *task); +bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task); +bool8 BT_Phase2GridSquares_LoadGfx(struct Task *task); +bool8 BT_Phase2GridSquares_UpdateTileset(struct Task *task); +bool8 BT_Phase2GridSquares_IsDone(struct Task *task); +bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task); +bool8 BT_Phase2WhiteFadeInStripes_SetupSprites(struct Task *task); +bool8 BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone(struct Task *task); +bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task); +bool8 BT_Phase2WhiteFadeInStripes_IsDone(struct Task *task); +bool8 BT_Phase2SlicedScreen_Init(struct Task *task); +bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task); +bool8 BT_Phase2SlicedScreen_End(struct Task *task); +bool8 BT_Phase2Mugshot_Init(struct Task *task); +bool8 BT_Phase2Mugshot_LoadGfx(struct Task *task); +bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task); +bool8 BT_Phase2Mugshot_StartSpriteSlide(struct Task *task); +bool8 BT_Phase2Mugshot_WaitForOpponentInPlace(struct Task *task); +bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task); +bool8 BT_Phase2Mugshot_ExpandWhiteBand(struct Task *task); +bool8 BT_Phase2Mugshot_StartBlackFade(struct Task *task); +bool8 BT_Phase2Mugshot_WaitForBlackFade(struct Task *task); +bool8 BT_Phase2Mugshot_End(struct Task *task); +bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task); +bool8 BT_Phase2AntiClockwiseSpiral_Update(struct Task *task); +bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task); +bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task); +bool8 BT_Phase2BlackWaveToRight_End(struct Task *task); +bool8 BT_Phase2FullScreenWave_Init(struct Task *task); +bool8 BT_Phase2FullScreenWave_UpdateWave(struct Task *task); +bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task); +bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task); +bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task); +bool8 BT_Phase2ClockwiseBlackFade_Step3(struct Task *task); +bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task); +bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task); +bool8 BT_Phase2ClockwiseBlackFade_End(struct Task *task); +bool8 BT_Phase2SlidingPokeballs_LoadBgGfx(struct Task *task); +bool8 BT_Phase2SlidingPokeballs_SetupFldeffArgs(struct Task *task); +bool8 BT_Phase2SlidingPokeballs_IsDone(struct Task *task); +bool8 BT_Phase2BigPokeball_Init(struct Task *task); +bool8 BT_Phase2BigPokeball_LoadTilemapAndWave(struct Task *task); +bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task); +bool8 BT_Phase2BigPokeball_UpdateWave2DecEvb(struct Task *task); +bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task); +bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task); +bool8 BT_Phase2HorizontalCorrugate_Init(struct Task *task); +bool8 BT_Phase2HorizontalCorrugate_UpdateWave(struct Task *task); +bool8 BT_Phase2DistortedWave_InitWave(struct Task *task); +bool8 BT_Phase2DistortedWave_UpdateWave(struct Task *task); +bool8 BT_Phase2Blur_InitBgMosaic(struct Task *task); +bool8 BT_Phase2Blur_Anim(struct Task *task); +bool8 BT_Phase2Blur_IsDone(struct Task *task); +bool8 BT_Phase1Blink(struct Task *task); +bool8 BT_WaitForPhase1(struct Task *task); +bool8 BT_Phase2LaunchAnimTask(struct Task *task); +bool8 BT_WaitForPhase2(struct Task *task); +bool8 BT_Phase2Blur(struct Task *task); +bool8 BT_Phase2DistortedWave(struct Task *task); +bool8 BT_Phase2HorizontalCorrugate(struct Task *task); +bool8 BT_Phase2BigPokeball(struct Task *task); +bool8 BT_Phase2SlidingPokeballs(struct Task *task); +bool8 BT_Phase2ClockwiseBlackFade(struct Task *task); +bool8 BT_Phase2FullScreenWave(struct Task *task); +bool8 BT_Phase2BlackWaveToRight(struct Task *task); +bool8 BT_Phase2SlicedScreen(struct Task *task); +bool8 BT_Phase2WhiteFadeInStripes(struct Task *task); +bool8 BT_Phase2GridSquares(struct Task *task); +bool8 BT_Phase2BlackDoodles(struct Task *task); +bool8 BT_Phase2StartLoreleiMugshot(struct Task *task); +bool8 BT_Phase2StartBrunoMugshot(struct Task *task); +bool8 BT_Phase2StartAgathaMugshot(struct Task *task); +bool8 BT_Phase2StartLanceMugshot(struct Task *task); +bool8 BT_Phase2StartBlueMugshot(struct Task *task); +bool8 BT_Phase2AntiClockwiseSpiral(struct Task *task); +bool8 BT_Phase1Task(struct Task *task); + +bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite); +bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite); +bool8 BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn(struct Sprite *sprite); +bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite(struct Sprite *sprite); +bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2(struct Sprite *sprite); + +void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite); +void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite); + +const u32 sBigPokeballTileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball_tileset.4bpp"); +const u32 sSlidingPokeballTilemap[] = INCBIN_U32("graphics/battle_transitions/sliding_pokeball_tilemap.bin"); +const u8 sSpriteImage_SlidingPokeball[] = INCBIN_U8("graphics/battle_transitions/sliding_pokeball.4bpp"); +const u32 sVsBarTileset[] = INCBIN_U32("graphics/battle_transitions/vsbar_tileset.4bpp"); +const u8 sSpriteImage_UnusedBrendan[] = INCBIN_U8("graphics/battle_transitions/unused_brendan.4bpp"); +const u8 sSpriteImage_UnusedLass[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp"); +const u32 sGridSquareTilemap[] = INCBIN_U32("graphics/battle_transitions/grid_square_tilemap.bin"); + +const TransitionStateFunc sBT_Phase1Tasks[] = +{ + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, +}; + +const TransitionStateFunc sBT_Phase2Tasks[] = +{ + BT_Phase2Blur, + BT_Phase2DistortedWave, + BT_Phase2HorizontalCorrugate, + BT_Phase2BigPokeball, + BT_Phase2SlidingPokeballs, + BT_Phase2ClockwiseBlackFade, + BT_Phase2FullScreenWave, + BT_Phase2BlackWaveToRight, + BT_Phase2SlicedScreen, + BT_Phase2WhiteFadeInStripes, + BT_Phase2GridSquares, + BT_Phase2BlackDoodles, + BT_Phase2StartLoreleiMugshot, + BT_Phase2StartBrunoMugshot, + BT_Phase2StartAgathaMugshot, + BT_Phase2StartLanceMugshot, + BT_Phase2StartBlueMugshot, + BT_Phase2AntiClockwiseSpiral, +}; + +const TransitionStateFunc sBT_MainPhases[] = +{ + BT_Phase1Blink, + BT_WaitForPhase1, + BT_Phase2LaunchAnimTask, + BT_WaitForPhase2, +}; + +const TransitionStateFunc sBT_Phase2BlurFuncs[] = +{ + BT_Phase2Blur_InitBgMosaic, + BT_Phase2Blur_Anim, + BT_Phase2Blur_IsDone, +}; + +const TransitionStateFunc sBT_Phase2DistortedWaveFuncs[] = +{ + BT_Phase2DistortedWave_InitWave, + BT_Phase2DistortedWave_UpdateWave, +}; + +const TransitionStateFunc sBT_Phase2HorizontalCorrugateFuncs[] = +{ + BT_Phase2HorizontalCorrugate_Init, + BT_Phase2HorizontalCorrugate_UpdateWave, +}; + +const TransitionStateFunc sBT_Phase2BigPokeballFuncs[] = +{ + BT_Phase2BigPokeball_Init, + BT_Phase2BigPokeball_LoadTilemapAndWave, + BT_Phase2BigPokeball_UpdateWave1IncEva, + BT_Phase2BigPokeball_UpdateWave2DecEvb, + BT_Phase2BigPokeball_UpdateWave3, + BT_Phase2BigPokeball_CircleEffect, +}; + +const TransitionStateFunc sBT_Phase2SlidingPokeballsFuncs[] = +{ + BT_Phase2SlidingPokeballs_LoadBgGfx, + BT_Phase2SlidingPokeballs_SetupFldeffArgs, + BT_Phase2SlidingPokeballs_IsDone, +}; + +const s16 gUnknown_83FA400[] = { -16, 256 }; + +const s16 gUnknown_83FA404[] = { 0, 16, 32, 8, 24 }; + +const s16 gUnknown_83FA40E[] = { 8, -8 }; + +const TransitionStateFunc sBT_Phase2ClockwiseBlackFadeFuncs[] = +{ + BT_Phase2ClockwiseBlackFade_Init, + BT_Phase2ClockwiseBlackFade_Step1, + BT_Phase2ClockwiseBlackFade_Step2, + BT_Phase2ClockwiseBlackFade_Step3, + BT_Phase2ClockwiseBlackFade_Step4, + BT_Phase2ClockwiseBlackFade_Step5, + BT_Phase2ClockwiseBlackFade_End, +}; + +const TransitionStateFunc sBT_Phase2FullScreenWaveFuncs[] = +{ + BT_Phase2FullScreenWave_Init, + BT_Phase2FullScreenWave_UpdateWave, +}; + +const TransitionStateFunc sBT_Phase2BlackWaveToRightFuncs[] = +{ + BT_Phase2BlackWaveToRight_Init, + BT_Phase2BlackWaveToRight_UpdateWave, + BT_Phase2BlackWaveToRight_End, +}; +const s16 gUnknown_83FA444[] = +{ + 0x0, 0x26E, + 0x100, 0x69, + 0x0, -0x69, + -0x100, -0x266E, + 0x0, 0x26E, + 0x100, 0x69, + 0x0, -0x69, + -0x100, -0x266E, +}; + +const TransitionStateFunc sBT_Phase2AntiClockwiseSpiralFuncs[] = +{ + BT_Phase2AntiClockwiseSpiral_Init, + BT_Phase2AntiClockwiseSpiral_Update, +}; + +const TransitionStateFunc sBT_Phase2MugshotFuncs[] = +{ + BT_Phase2Mugshot_Init, + BT_Phase2Mugshot_LoadGfx, + BT_Phase2Mugshot_VsBarsSlideIn, + BT_Phase2Mugshot_StartSpriteSlide, + BT_Phase2Mugshot_WaitForOpponentInPlace, + BT_Phase2Mugshot_WaitForPlayerInPlace, + BT_Phase2Mugshot_ExpandWhiteBand, + BT_Phase2Mugshot_StartBlackFade, + BT_Phase2Mugshot_WaitForBlackFade, + BT_Phase2Mugshot_End, +}; + +const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_COUNT] = +{ + // TODO: document these with macro + 0x70, 0x71, 0x72, 0x73, 0x7D +}; + +const s16 sMugshotsOpponentRotationScales[MUGSHOTS_COUNT][2] = +{ + {0x200, 0x200}, + {0x200, 0x200}, + {0x200, 0x200}, + {0x200, 0x200}, + {0x200, 0x200}, +}; + +const s16 sMugshotsOpponentCoords[MUGSHOTS_COUNT][2] = +{ + { -8, 0 }, + { -10, 0 }, + { 0, 0 }, + { -32, 0 }, + { 0, 0 }, +}; + +const TransitionSpriteCallback sBT_Phase2MugshotSpriteFuncs[] = +{ + BT_Phase2MugshotsSpriteFuncs_Wait, + BT_Phase2MugshotsSpriteFuncs_InitParams, + BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn, + BT_Phase2MugshotsSpriteFuncs_DecelerateSprite, + BT_Phase2MugshotsSpriteFuncs_Wait, + BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2, // not used + BT_Phase2MugshotsSpriteFuncs_Wait, +}; + +const s16 sMugShotSlideVelocity[] = { 12, -12 }; + +const s16 sMugShotSlideDeceleration[] = { -1, 1 }; + +const TransitionStateFunc sBT_Phase2SlicedScreenFuncs[] = +{ + BT_Phase2SlicedScreen_Init, + BT_Phase2SlicedScreen_UpdateOffsets, + BT_Phase2SlicedScreen_End, +}; + +const TransitionStateFunc sBT_Phase2WhiteFadeInStripesFuncs[] = +{ + BT_Phase2WhiteFadeInStripes_Init, + BT_Phase2WhiteFadeInStripes_SetupSprites, + BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone, + BT_Phase2WhiteFadeInStripes_Stop, + BT_Phase2WhiteFadeInStripes_IsDone, +}; + +const u16 sWhiteStripeDelay[] = { 0, 9, 15, 6, 12, 3 }; + +const TransitionStateFunc sBT_Phase2GridSquaresFuncs[] = +{ + BT_Phase2GridSquares_LoadGfx, + BT_Phase2GridSquares_UpdateTileset, + BT_Phase2GridSquares_IsDone, +}; + +const TransitionStateFunc sBT_Phase2BlackDoodlesFuncs[] = +{ + BT_Phase2BlackDoodles_Init, + BT_Phase2BlackDoodles_InitSingleBrush, + BT_Phase2BlackDoodles_DrawSingleBrush, + BT_Phase2BlackDoodles_IsDone, + BT_Phase2BlackDoodles_NextBrush, +}; + +const struct BlackDoodleSegment sBlackDoodlesSegments[] = +{ + { + .startPtX = 0x38, + .startPtY = 0x0, + .endPtX = 0x0, + .endPtY = 0xA0, + .whichSide = 0, + }, + { + .startPtX = 0x68, + .startPtY = 0xA0, + .endPtX = 0xF0, + .endPtY = 0x58, + .whichSide = 1, + }, + { + .startPtX = 0xF0, + .startPtY = 0x48, + .endPtX = 0x38, + .endPtY = 0x0, + .whichSide = 1, + }, + { + .startPtX = 0x0, + .startPtY = 0x20, + .endPtX = 0x90, + .endPtY = 0xA0, + .whichSide = 0, + }, + { + .startPtX = 0x90, + .startPtY = 0xA0, + .endPtX = 0xB8, + .endPtY = 0x0, + .whichSide = 1, + }, + { + .startPtX = 0x38, + .startPtY = 0x0, + .endPtX = 0xA8, + .endPtY = 0xA0, + .whichSide = 0, + }, + { + .startPtX = 0xA8, + .startPtY = 0xA0, + .endPtX = 0x30, + .endPtY = 0x0, + .whichSide = 1, + }, +}; + +const s16 sBlackDoodlesDelay[] = { 1, 1, 1, 1, 1, 1, 0 }; + +const TransitionStateFunc sBT_Phase1FadeFuncs[] = +{ + BT_Phase1_FadeOut, + BT_Phase1_FadeIn, +}; + +const struct SpriteFrameImage sSpriteImageTable_SlidingPokeball[] = +{ + { + .data = sSpriteImage_SlidingPokeball, + .size = 0x200, + }, +}; + +const union AnimCmd sSpriteAnim_SlidingPokeball[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const sSpriteAnimTable_SlidingPokeball[] = { sSpriteAnim_SlidingPokeball }; + +const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball1[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -4, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball2[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 4, 1), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const sSpriteAffineAnimTable_SlidingPokeball[] = +{ + sSpriteAffineAnim_SlidingPokeball1, + sSpriteAffineAnim_SlidingPokeball2, +}; + +const struct SpriteTemplate sSpriteTemplate_SlidingPokeball = +{ + .tileTag = SPRITE_INVALID_TAG, + .paletteTag = 0x1009, + .oam = &gEventObjectBaseOam_32x32, + .anims = sSpriteAnimTable_SlidingPokeball, + .images = sSpriteImageTable_SlidingPokeball, + .affineAnims = sSpriteAffineAnimTable_SlidingPokeball, + .callback = SpriteCB_BT_Phase2SlidingPokeballs, +}; + +const struct OamData sOamData_Unused = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct SpriteFrameImage sSpriteImageTable_UnusedBrendan[] = +{ + { + .data = sSpriteImage_UnusedBrendan, + .size = 0x800, + }, +}; + +const struct SpriteFrameImage sSpriteImageTable_UnusedLass[] = +{ + { + .data = sSpriteImage_UnusedLass, + .size = 0x800, + }, +}; + +const union AnimCmd sSpriteAnim_Unused[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const sSpriteAnimTable_Unused[] = { sSpriteAnim_Unused }; + +const struct SpriteTemplate sSpriteTemplateTable_Unused[] = +{ + { + .tileTag = SPRITE_INVALID_TAG, + .paletteTag = 0x100A, + .oam = &sOamData_Unused, + .anims = sSpriteAnimTable_Unused, + .images = sSpriteImageTable_UnusedBrendan, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_BT_Phase2Mugshots, + }, + { + .tileTag = SPRITE_INVALID_TAG, + .paletteTag = 0x100A, + .oam = &sOamData_Unused, + .anims = sSpriteAnimTable_Unused, + .images = sSpriteImageTable_UnusedLass, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_BT_Phase2Mugshots, + }, +}; + +// this palette is shared by big pokeball and sliding pokeball +const u16 sSlidingPokeballBigPokeballPalette[] = INCBIN_U16("graphics/battle_transitions/sliding_pokeball.gbapal"); + +const struct SpritePalette sSpritePalette_SlidingPokeball = +{ + .data = sSlidingPokeballBigPokeballPalette, + .tag = 0x1009, +}; + +const u16 sVsBarLoreleiPalette[] = INCBIN_U16("graphics/battle_transitions/lorelei_bg.gbapal"); +const u16 sVsBarBrunoPalette[] = INCBIN_U16("graphics/battle_transitions/bruno_bg.gbapal"); +const u16 sVsBarAgathaPalette[] = INCBIN_U16("graphics/battle_transitions/agatha_bg.gbapal"); +const u16 sVsBarLancePalette[] = INCBIN_U16("graphics/battle_transitions/lance_bg.gbapal"); +const u16 sVsBarBluePalette[] = INCBIN_U16("graphics/battle_transitions/blue_bg.gbapal"); +const u16 sVsBarMalePlayerPalette[] = INCBIN_U16("graphics/battle_transitions/red_bg.gbapal"); +const u16 sVsBarFemalePlayerPalette[] = INCBIN_U16("graphics/battle_transitions/green_bg.gbapal"); + +const u16 *const sVsBarOpponentPalettes[MUGSHOTS_COUNT] = +{ + sVsBarLoreleiPalette, + sVsBarBrunoPalette, + sVsBarAgathaPalette, + sVsBarLancePalette, + sVsBarBluePalette, +}; + +const u16 *const sVsBarPlayerPalettes[] = +{ + sVsBarMalePlayerPalette, + sVsBarFemalePlayerPalette, +}; + +const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitions/unused_trainer.gbapal"); + +const struct SpritePalette sSpritePalette_UnusedTrainer = +{ + .data = sUnusedTrainerPalette, + .tag = 0x100A, +}; + +const u16 sBigPokeballTilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_tilemap.bin"); +const u16 sVsBarTilemap[] = INCBIN_U16("graphics/battle_transitions/vsbar_tilemap.bin"); diff --git a/sym_ewram.txt b/sym_ewram.txt index e97441132..3797720d5 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1055,10 +1055,7 @@ gUnknown_2039A24: @ 2039A24 .space 0x4 .include "src/coins.o" - - .align 2 -sTransitionStructPtr: @ 2039A2C - .space 0x4 + .include "src/battle_transition.o" gUnknown_2039A30: @ 2039A30 .space 0x4 -- cgit v1.2.3 From 4677efabdbe6769c8e35a9c003c42855678de81f Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 24 Jul 2019 05:50:36 +0800 Subject: thru BT_Phase2BigPokeball_UpdateWave3 --- asm/battle_transition.s | 1232 ----------------------------------------------- include/overworld.h | 1 + ld_script.txt | 1 + src/battle_transition.c | 446 ++++++++++++++++- 4 files changed, 425 insertions(+), 1255 deletions(-) diff --git a/asm/battle_transition.s b/asm/battle_transition.s index 83f03553d..b6b365db4 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -5,1238 +5,6 @@ .text - thumb_func_start BT_StartOnField -BT_StartOnField: @ 80D08B8 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _080D08DC @ =sTransitionStructPtr - movs r0, 0x3C - bl AllocZeroed - str r0, [r5] - ldr r1, _080D08E0 @ =gMain - ldr r0, _080D08E4 @ =CB2_OverworldBasic - str r0, [r1, 0x4] - adds r0, r4, 0 - bl BT_LaunchTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D08DC: .4byte sTransitionStructPtr -_080D08E0: .4byte gMain -_080D08E4: .4byte CB2_OverworldBasic - thumb_func_end BT_StartOnField - - thumb_func_start BT_StartWithoutAlloc -BT_StartWithoutAlloc: @ 80D08E8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl BT_LaunchTask - pop {r0} - bx r0 - thumb_func_end BT_StartWithoutAlloc - - thumb_func_start BT_IsDone -BT_IsDone: @ 80D08F8 - push {r4,r5,lr} - ldr r0, _080D091C @ =BT_TaskMain - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080D0920 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r1, 0x26 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080D0924 - movs r0, 0 - b _080D093C - .align 2, 0 -_080D091C: .4byte BT_TaskMain -_080D0920: .4byte gTasks -_080D0924: - bl BT_InitCtrlBlk - ldr r4, _080D0944 @ =sTransitionStructPtr - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] - adds r0, r5, 0 - bl DestroyTask - movs r0, 0x1 -_080D093C: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D0944: .4byte sTransitionStructPtr - thumb_func_end BT_IsDone - - thumb_func_start BT_LaunchTask -BT_LaunchTask: @ 80D0948 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080D0970 @ =BT_TaskMain - movs r1, 0x2 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D0974 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0xA] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D0970: .4byte BT_TaskMain -_080D0974: .4byte gTasks - thumb_func_end BT_LaunchTask - - thumb_func_start BT_TaskMain -BT_TaskMain: @ 80D0978 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D09A8 @ =sBT_MainPhases - ldr r2, _080D09AC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D098A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D098A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D09A8: .4byte sBT_MainPhases -_080D09AC: .4byte gTasks - thumb_func_end BT_TaskMain - - thumb_func_start BT_Phase1Blink -BT_Phase1Blink: @ 80D09B0 - push {r4,lr} - adds r4, r0, 0 - bl SetWeatherScreenFadeOut - ldr r0, _080D09DC @ =gPlttBufferFaded - ldr r1, _080D09E0 @ =gPlttBufferUnfaded - ldr r2, _080D09E4 @ =0x04000100 - bl CpuSet - ldr r1, _080D09E8 @ =sBT_Phase1Tasks - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - bne _080D09EC - movs r0, 0x2 - strh r0, [r4, 0x8] - movs r0, 0x1 - b _080D09FA - .align 2, 0 -_080D09DC: .4byte gPlttBufferFaded -_080D09E0: .4byte gPlttBufferUnfaded -_080D09E4: .4byte 0x04000100 -_080D09E8: .4byte sBT_Phase1Tasks -_080D09EC: - movs r1, 0x4 - bl CreateTask - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 -_080D09FA: - pop {r4} - pop {r1} - bx r1 - thumb_func_end BT_Phase1Blink - - thumb_func_start BT_WaitForPhase1 -BT_WaitForPhase1: @ 80D0A00 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080D0A20 @ =sBT_Phase1Tasks - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _080D0A24 - movs r0, 0 - b _080D0A2C - .align 2, 0 -_080D0A20: .4byte sBT_Phase1Tasks -_080D0A24: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 -_080D0A2C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end BT_WaitForPhase1 - - thumb_func_start BT_Phase2LaunchAnimTask -BT_Phase2LaunchAnimTask: @ 80D0A34 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080D0A58 @ =sBT_Phase2Tasks - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - bl CreateTask - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D0A58: .4byte sBT_Phase2Tasks - thumb_func_end BT_Phase2LaunchAnimTask - - thumb_func_start BT_WaitForPhase2 -BT_WaitForPhase2: @ 80D0A5C - push {r4,lr} - adds r4, r0, 0 - movs r0, 0 - strh r0, [r4, 0x26] - ldr r1, _080D0A88 @ =sBT_Phase2Tasks - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _080D0A80 - movs r0, 0x1 - strh r0, [r4, 0x26] -_080D0A80: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D0A88: .4byte sBT_Phase2Tasks - thumb_func_end BT_WaitForPhase2 - - thumb_func_start BT_Phase1Task -BT_Phase1Task: @ 80D0A8C - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - ldr r1, _080D0AC0 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r1 - ldrh r2, [r1, 0x8] - movs r3, 0x8 - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _080D0AC4 - adds r0, r2, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x2 - str r0, [sp] - movs r0, 0 - movs r1, 0 - movs r2, 0x2 - movs r3, 0x2 - bl BT_CreatePhase1SubTask - b _080D0AD4 - .align 2, 0 -_080D0AC0: .4byte gTasks -_080D0AC4: - bl BT_IsPhase1Done - lsls r0, 24 - cmp r0, 0 - beq _080D0AD4 - adds r0, r4, 0 - bl DestroyTask -_080D0AD4: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end BT_Phase1Task - - thumb_func_start BT_Phase2Blur -BT_Phase2Blur: @ 80D0ADC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D0B0C @ =sBT_Phase2BlurFuncs - ldr r2, _080D0B10 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D0AEE: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D0AEE - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D0B0C: .4byte sBT_Phase2BlurFuncs -_080D0B10: .4byte gTasks - thumb_func_end BT_Phase2Blur - - thumb_func_start BT_Phase2Blur_InitBgMosaic -BT_Phase2Blur_InitBgMosaic: @ 80D0B14 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x4C - movs r1, 0 - bl SetGpuReg - movs r0, 0xA - movs r1, 0x40 - bl SetGpuRegBits - movs r0, 0xC - movs r1, 0x40 - bl SetGpuRegBits - movs r0, 0xE - movs r1, 0x40 - bl SetGpuRegBits - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - thumb_func_end BT_Phase2Blur_InitBgMosaic - - thumb_func_start BT_Phase2Blur_Anim -BT_Phase2Blur_Anim: @ 80D0B48 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldrh r0, [r4, 0xA] - movs r1, 0xA - ldrsh r2, [r4, r1] - cmp r2, 0 - beq _080D0B5E - subs r0, 0x1 - strh r0, [r4, 0xA] - b _080D0B9E -_080D0B5E: - movs r0, 0x2 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _080D0B80 - movs r1, 0x1 - negs r1, r1 - str r2, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_080D0B80: - ldrh r1, [r4, 0xC] - movs r0, 0xF - ands r0, r1 - lsls r1, r0, 4 - orrs r1, r0 - movs r0, 0x4C - bl SetGpuReg - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0xE - ble _080D0B9E - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080D0B9E: - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end BT_Phase2Blur_Anim - - thumb_func_start BT_Phase2Blur_IsDone -BT_Phase2Blur_IsDone: @ 80D0BA8 - push {lr} - ldr r0, _080D0BCC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080D0BC4 - ldr r0, _080D0BD0 @ =BT_Phase2Blur - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D0BC4: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D0BCC: .4byte gPaletteFade -_080D0BD0: .4byte BT_Phase2Blur - thumb_func_end BT_Phase2Blur_IsDone - - thumb_func_start BT_Phase2DistortedWave -BT_Phase2DistortedWave: @ 80D0BD4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D0C04 @ =sBT_Phase2DistortedWaveFuncs - ldr r2, _080D0C08 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D0BE6: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D0BE6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D0C04: .4byte sBT_Phase2DistortedWaveFuncs -_080D0C08: .4byte gTasks - thumb_func_end BT_Phase2DistortedWave - - thumb_func_start BT_Phase2DistortedWave_InitWave -BT_Phase2DistortedWave_InitWave: @ 80D0C0C - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - bl BT_InitCtrlBlk - bl ScanlineEffect_Clear - movs r0, 0x1 - negs r0, r0 - movs r4, 0 - str r4, [sp] - movs r1, 0x4 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _080D0C68 @ =gScanlineEffectRegBuffers + 0x780 - ldr r1, _080D0C6C @ =sTransitionStructPtr - ldr r1, [r1] - movs r2, 0x14 - ldrsh r1, [r1, r2] - str r4, [sp] - movs r2, 0xA0 - str r2, [sp, 0x4] - movs r2, 0 - movs r3, 0x2 - bl BT_LoadWaveIntoBuffer - ldr r0, _080D0C70 @ =VBCB_BT_Phase2DistortedWave - bl SetVBlankCallback - ldr r0, _080D0C74 @ =HBCB_BT_Phase2DistortedWave - bl SetHBlankCallback - movs r0, 0x3 - bl EnableInterrupts - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D0C68: .4byte gScanlineEffectRegBuffers + 0x780 -_080D0C6C: .4byte sTransitionStructPtr -_080D0C70: .4byte VBCB_BT_Phase2DistortedWave -_080D0C74: .4byte HBCB_BT_Phase2DistortedWave - thumb_func_end BT_Phase2DistortedWave_InitWave - - thumb_func_start BT_Phase2DistortedWave_UpdateWave -BT_Phase2DistortedWave_UpdateWave: @ 80D0C78 - push {r4,r5,lr} - sub sp, 0x8 - ldr r4, _080D0CE0 @ =sTransitionStructPtr - ldr r2, [r4] - ldrb r1, [r2] - movs r1, 0 - strb r1, [r2] - ldrh r1, [r0, 0xA] - adds r1, 0x4 - strh r1, [r0, 0xA] - ldrh r1, [r0, 0xC] - adds r1, 0x8 - strh r1, [r0, 0xC] - ldr r3, _080D0CE4 @ =gScanlineEffectRegBuffers - ldr r1, [r4] - movs r2, 0x14 - ldrsh r1, [r1, r2] - movs r5, 0xA - ldrsh r2, [r0, r5] - movs r5, 0xC - ldrsh r0, [r0, r5] - str r0, [sp] - movs r0, 0xA0 - str r0, [sp, 0x4] - adds r0, r3, 0 - movs r3, 0x2 - bl BT_LoadWaveIntoBuffer - ldr r0, _080D0CE8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080D0CCA - ldr r0, _080D0CEC @ =BT_Phase2DistortedWave - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D0CCA: - ldr r0, [r4] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D0CE0: .4byte sTransitionStructPtr -_080D0CE4: .4byte gScanlineEffectRegBuffers -_080D0CE8: .4byte gPaletteFade -_080D0CEC: .4byte BT_Phase2DistortedWave - thumb_func_end BT_Phase2DistortedWave_UpdateWave - - thumb_func_start VBCB_BT_Phase2DistortedWave -VBCB_BT_Phase2DistortedWave: @ 80D0CF0 - push {lr} - bl BT_VBSyncOamAndPltt - ldr r0, _080D0D18 @ =sTransitionStructPtr - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0 - beq _080D0D14 - ldr r1, _080D0D1C @ =0x040000d4 - ldr r0, _080D0D20 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D0D24 @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D0D14: - pop {r0} - bx r0 - .align 2, 0 -_080D0D18: .4byte sTransitionStructPtr -_080D0D1C: .4byte 0x040000d4 -_080D0D20: .4byte gScanlineEffectRegBuffers -_080D0D24: .4byte 0x800000a0 - thumb_func_end VBCB_BT_Phase2DistortedWave - - thumb_func_start HBCB_BT_Phase2DistortedWave -HBCB_BT_Phase2DistortedWave: @ 80D0D28 - ldr r1, _080D0D48 @ =gScanlineEffectRegBuffers - ldr r0, _080D0D4C @ =0x04000006 - ldrh r0, [r0] - lsls r0, 1 - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _080D0D50 @ =0x04000014 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - bx lr - .align 2, 0 -_080D0D48: .4byte gScanlineEffectRegBuffers -_080D0D4C: .4byte 0x04000006 -_080D0D50: .4byte 0x04000014 - thumb_func_end HBCB_BT_Phase2DistortedWave - - thumb_func_start BT_Phase2HorizontalCorrugate -BT_Phase2HorizontalCorrugate: @ 80D0D54 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D0D84 @ =sBT_Phase2HorizontalCorrugateFuncs - ldr r2, _080D0D88 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D0D66: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D0D66 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D0D84: .4byte sBT_Phase2HorizontalCorrugateFuncs -_080D0D88: .4byte gTasks - thumb_func_end BT_Phase2HorizontalCorrugate - - thumb_func_start BT_Phase2HorizontalCorrugate_Init -BT_Phase2HorizontalCorrugate_Init: @ 80D0D8C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - bl BT_InitCtrlBlk - bl ScanlineEffect_Clear - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r1, 0x4 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _080D0DE0 @ =sTransitionStructPtr - ldr r1, [r0] - ldr r0, _080D0DE4 @ =gScanlineEffectRegBuffers + 0x780 - movs r2, 0x16 - ldrsh r1, [r1, r2] - movs r2, 0xA0 - lsls r2, 1 - bl memset - ldr r0, _080D0DE8 @ =VBCB_BT_Phase2HorizontalCorrugate - bl SetVBlankCallback - ldr r0, _080D0DEC @ =HBCB_BT_Phase2HorizontalCorrugate - bl SetHBlankCallback - movs r0, 0x3 - bl EnableInterrupts - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D0DE0: .4byte sTransitionStructPtr -_080D0DE4: .4byte gScanlineEffectRegBuffers + 0x780 -_080D0DE8: .4byte VBCB_BT_Phase2HorizontalCorrugate -_080D0DEC: .4byte HBCB_BT_Phase2HorizontalCorrugate - thumb_func_end BT_Phase2HorizontalCorrugate_Init - - thumb_func_start BT_Phase2HorizontalCorrugate_UpdateWave -BT_Phase2HorizontalCorrugate_UpdateWave: @ 80D0DF0 - push {r4-r7,lr} - ldr r1, _080D0E70 @ =sTransitionStructPtr - ldr r2, [r1] - ldrb r1, [r2] - movs r1, 0 - strb r1, [r2] - ldrh r4, [r0, 0xA] - ldrh r2, [r0, 0xC] - lsls r3, r2, 16 - asrs r3, 24 - movs r5, 0x84 - lsls r5, 5 - adds r1, r4, r5 - strh r1, [r0, 0xA] - movs r1, 0xC0 - lsls r1, 1 - adds r2, r1 - strh r2, [r0, 0xC] - movs r5, 0 - lsls r7, r3, 16 -_080D0E18: - lsrs r0, r4, 8 - asrs r1, r7, 16 - bl Sin - ldr r1, _080D0E74 @ =gScanlineEffectRegBuffers - lsls r2, r5, 1 - adds r2, r1 - ldr r6, _080D0E70 @ =sTransitionStructPtr - ldr r1, [r6] - ldrh r1, [r1, 0x16] - adds r0, r1 - strh r0, [r2] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - movs r1, 0x84 - lsls r1, 5 - adds r0, r4, r1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r5, 0x9F - bls _080D0E18 - ldr r0, _080D0E78 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080D0E5E - ldr r0, _080D0E7C @ =BT_Phase2HorizontalCorrugate - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D0E5E: - ldr r0, [r6] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D0E70: .4byte sTransitionStructPtr -_080D0E74: .4byte gScanlineEffectRegBuffers -_080D0E78: .4byte gPaletteFade -_080D0E7C: .4byte BT_Phase2HorizontalCorrugate - thumb_func_end BT_Phase2HorizontalCorrugate_UpdateWave - - thumb_func_start VBCB_BT_Phase2HorizontalCorrugate -VBCB_BT_Phase2HorizontalCorrugate: @ 80D0E80 - push {lr} - bl BT_VBSyncOamAndPltt - ldr r0, _080D0EA8 @ =sTransitionStructPtr - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0 - beq _080D0EA4 - ldr r1, _080D0EAC @ =0x040000d4 - ldr r0, _080D0EB0 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D0EB4 @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D0EA4: - pop {r0} - bx r0 - .align 2, 0 -_080D0EA8: .4byte sTransitionStructPtr -_080D0EAC: .4byte 0x040000d4 -_080D0EB0: .4byte gScanlineEffectRegBuffers -_080D0EB4: .4byte 0x800000a0 - thumb_func_end VBCB_BT_Phase2HorizontalCorrugate - - thumb_func_start HBCB_BT_Phase2HorizontalCorrugate -HBCB_BT_Phase2HorizontalCorrugate: @ 80D0EB8 - ldr r1, _080D0ED8 @ =gScanlineEffectRegBuffers - ldr r0, _080D0EDC @ =0x04000006 - ldrh r0, [r0] - lsls r0, 1 - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _080D0EE0 @ =0x04000016 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - bx lr - .align 2, 0 -_080D0ED8: .4byte gScanlineEffectRegBuffers -_080D0EDC: .4byte 0x04000006 -_080D0EE0: .4byte 0x04000016 - thumb_func_end HBCB_BT_Phase2HorizontalCorrugate - - thumb_func_start BT_Phase2BigPokeball -BT_Phase2BigPokeball: @ 80D0EE4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D0F14 @ =sBT_Phase2BigPokeballFuncs - ldr r2, _080D0F18 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D0EF6: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D0EF6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D0F14: .4byte sBT_Phase2BigPokeballFuncs -_080D0F18: .4byte gTasks - thumb_func_end BT_Phase2BigPokeball - - thumb_func_start BT_Phase2BigPokeball_Init -BT_Phase2BigPokeball_Init: @ 80D0F1C - push {r4-r6,lr} - sub sp, 0xC - adds r4, r0, 0 - bl BT_InitCtrlBlk - bl ScanlineEffect_Clear - movs r1, 0 - movs r0, 0x10 - strh r0, [r4, 0xA] - strh r1, [r4, 0xC] - strh r1, [r4, 0x10] - movs r0, 0x80 - lsls r0, 7 - strh r0, [r4, 0x12] - ldr r0, _080D0FB8 @ =sTransitionStructPtr - ldr r2, [r0] - movs r0, 0x3F - strh r0, [r2, 0x2] - strh r1, [r2, 0x4] - movs r0, 0xF0 - strh r0, [r2, 0x6] - movs r0, 0xA0 - strh r0, [r2, 0x8] - ldr r0, _080D0FBC @ =0x00003f41 - strh r0, [r2, 0xE] - ldrh r0, [r4, 0xA] - lsls r0, 8 - ldrh r1, [r4, 0xC] - orrs r0, r1 - strh r0, [r2, 0x10] - movs r1, 0 - add r5, sp, 0x4 - add r6, sp, 0x8 - ldr r3, _080D0FC0 @ =gScanlineEffectRegBuffers + 0x780 - movs r2, 0xF0 -_080D0F64: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x9F - bls _080D0F64 - ldr r0, _080D0FC4 @ =VBCB_BT_Phase2BigPokeball1 - bl SetVBlankCallback - adds r0, r5, 0 - adds r1, r6, 0 - bl BT_GetBg0TilemapAndTilesetBase - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r1, [sp, 0x4] - ldr r2, _080D0FC8 @ =0x01000400 - mov r0, sp - bl CpuSet - ldr r0, _080D0FCC @ =sBigPokeballTileset - ldr r1, [sp, 0x8] - movs r2, 0xB0 - lsls r2, 2 - bl CpuSet - ldr r0, _080D0FD0 @ =sSlidingPokeballBigPokeballPalette - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D0FB8: .4byte sTransitionStructPtr -_080D0FBC: .4byte 0x00003f41 -_080D0FC0: .4byte gScanlineEffectRegBuffers + 0x780 -_080D0FC4: .4byte VBCB_BT_Phase2BigPokeball1 -_080D0FC8: .4byte 0x01000400 -_080D0FCC: .4byte sBigPokeballTileset -_080D0FD0: .4byte sSlidingPokeballBigPokeballPalette - thumb_func_end BT_Phase2BigPokeball_Init - - thumb_func_start BT_Phase2BigPokeball_LoadTilemapAndWave -BT_Phase2BigPokeball_LoadTilemapAndWave: @ 80D0FD4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - adds r7, r0, 0 - ldr r5, _080D105C @ =sBigPokeballTilemap - add r1, sp, 0xC - add r0, sp, 0x8 - bl BT_GetBg0TilemapAndTilesetBase - movs r1, 0 - ldr r0, [sp, 0x8] - mov r9, r0 - ldr r6, _080D1060 @ =gScanlineEffectRegBuffers - mov r8, r6 - movs r0, 0xF0 - lsls r0, 8 - mov r12, r0 -_080D0FFA: - movs r0, 0 - lsls r3, r1, 16 - asrs r4, r3, 11 -_080D1000: - lsls r2, r0, 16 - asrs r2, 16 - adds r1, r4, r2 - lsls r1, 1 - add r1, r9 - ldrh r0, [r5] - mov r6, r12 - orrs r0, r6 - strh r0, [r1] - adds r2, 0x1 - lsls r2, 16 - adds r5, 0x2 - lsrs r0, r2, 16 - asrs r2, 16 - cmp r2, 0x1D - ble _080D1000 - movs r1, 0x80 - lsls r1, 9 - adds r0, r3, r1 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _080D0FFA - movs r6, 0x10 - ldrsh r2, [r7, r6] - movs r1, 0x12 - ldrsh r0, [r7, r1] - str r0, [sp] - movs r0, 0xA0 - str r0, [sp, 0x4] - mov r0, r8 - movs r1, 0 - movs r3, 0x84 - bl BT_LoadWaveIntoBuffer - ldrh r0, [r7, 0x8] - adds r0, 0x1 - strh r0, [r7, 0x8] - movs r0, 0x1 - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D105C: .4byte sBigPokeballTilemap -_080D1060: .4byte gScanlineEffectRegBuffers - thumb_func_end BT_Phase2BigPokeball_LoadTilemapAndWave - - thumb_func_start BT_Phase2BigPokeball_UpdateWave1IncEva -BT_Phase2BigPokeball_UpdateWave1IncEva: @ 80D1064 - push {r4,r5,lr} - sub sp, 0x8 - adds r3, r0, 0 - ldr r2, _080D10EC @ =sTransitionStructPtr - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r1, [r3, 0xE] - movs r4, 0xE - ldrsh r0, [r3, r4] - adds r4, r2, 0 - cmp r0, 0 - beq _080D108A - subs r0, r1, 0x1 - strh r0, [r3, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _080D1094 -_080D108A: - ldrh r0, [r3, 0xC] - adds r0, 0x1 - strh r0, [r3, 0xC] - movs r0, 0x1 - strh r0, [r3, 0xE] -_080D1094: - ldr r2, [r4] - ldrh r0, [r3, 0xA] - lsls r0, 8 - ldrh r1, [r3, 0xC] - orrs r0, r1 - strh r0, [r2, 0x10] - movs r5, 0xC - ldrsh r0, [r3, r5] - cmp r0, 0xF - ble _080D10AE - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_080D10AE: - ldrh r0, [r3, 0x10] - adds r0, 0xC - strh r0, [r3, 0x10] - ldr r0, _080D10F0 @ =0xfffffe80 - adds r1, r0, 0 - ldrh r5, [r3, 0x12] - adds r1, r5 - strh r1, [r3, 0x12] - ldr r0, _080D10F4 @ =gScanlineEffectRegBuffers - movs r5, 0x10 - ldrsh r2, [r3, r5] - lsls r1, 16 - asrs r1, 24 - str r1, [sp] - movs r1, 0xA0 - str r1, [sp, 0x4] - movs r1, 0 - movs r3, 0x84 - bl BT_LoadWaveIntoBuffer - ldr r1, [r4] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D10EC: .4byte sTransitionStructPtr -_080D10F0: .4byte 0xfffffe80 -_080D10F4: .4byte gScanlineEffectRegBuffers - thumb_func_end BT_Phase2BigPokeball_UpdateWave1IncEva - - thumb_func_start BT_Phase2BigPokeball_UpdateWave2DecEvb -BT_Phase2BigPokeball_UpdateWave2DecEvb: @ 80D10F8 - push {r4,lr} - sub sp, 0x8 - adds r3, r0, 0 - ldr r2, _080D1158 @ =sTransitionStructPtr - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r1, [r3, 0xE] - movs r4, 0xE - ldrsh r0, [r3, r4] - cmp r0, 0 - beq _080D111C - subs r0, r1, 0x1 - strh r0, [r3, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _080D1126 -_080D111C: - ldrh r0, [r3, 0xA] - subs r0, 0x1 - strh r0, [r3, 0xA] - movs r0, 0x2 - strh r0, [r3, 0xE] -_080D1126: - ldr r2, [r2] - ldrh r0, [r3, 0xA] - lsls r0, 8 - ldrh r1, [r3, 0xC] - orrs r0, r1 - strh r0, [r2, 0x10] - movs r1, 0xA - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _080D1140 - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_080D1140: - ldrh r1, [r3, 0x12] - movs r2, 0x12 - ldrsh r0, [r3, r2] - cmp r0, 0 - ble _080D1160 - ldrh r0, [r3, 0x10] - adds r0, 0xC - strh r0, [r3, 0x10] - ldr r4, _080D115C @ =0xfffffe80 - adds r0, r1, r4 - b _080D1162 - .align 2, 0 -_080D1158: .4byte sTransitionStructPtr -_080D115C: .4byte 0xfffffe80 -_080D1160: - movs r0, 0 -_080D1162: - strh r0, [r3, 0x12] - ldr r0, _080D1194 @ =gScanlineEffectRegBuffers - movs r1, 0x10 - ldrsh r2, [r3, r1] - ldrh r1, [r3, 0x12] - lsls r1, 16 - asrs r1, 24 - str r1, [sp] - movs r1, 0xA0 - str r1, [sp, 0x4] - movs r1, 0 - movs r3, 0x84 - bl BT_LoadWaveIntoBuffer - ldr r0, _080D1198 @ =sTransitionStructPtr - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D1194: .4byte gScanlineEffectRegBuffers -_080D1198: .4byte sTransitionStructPtr - thumb_func_end BT_Phase2BigPokeball_UpdateWave2DecEvb - - thumb_func_start BT_Phase2BigPokeball_UpdateWave3 -BT_Phase2BigPokeball_UpdateWave3: @ 80D119C - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r0, _080D11C4 @ =sTransitionStructPtr - ldr r0, [r0] - ldrb r1, [r0] - movs r2, 0 - strb r2, [r0] - ldrh r1, [r4, 0x12] - movs r3, 0x12 - ldrsh r0, [r4, r3] - cmp r0, 0 - ble _080D11CC - ldrh r0, [r4, 0x10] - adds r0, 0xC - strh r0, [r4, 0x10] - ldr r2, _080D11C8 @ =0xfffffe80 - adds r0, r1, r2 - strh r0, [r4, 0x12] - b _080D11CE - .align 2, 0 -_080D11C4: .4byte sTransitionStructPtr -_080D11C8: .4byte 0xfffffe80 -_080D11CC: - strh r2, [r4, 0x12] -_080D11CE: - ldr r0, _080D1218 @ =gScanlineEffectRegBuffers - movs r3, 0x10 - ldrsh r2, [r4, r3] - ldrh r1, [r4, 0x12] - lsls r1, 16 - asrs r1, 24 - str r1, [sp] - movs r5, 0xA0 - str r5, [sp, 0x4] - movs r1, 0 - movs r3, 0x84 - bl BT_LoadWaveIntoBuffer - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - bgt _080D1202 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - movs r1, 0 - strh r0, [r4, 0x8] - strh r5, [r4, 0xA] - movs r0, 0x80 - lsls r0, 1 - strh r0, [r4, 0xC] - strh r1, [r4, 0xE] -_080D1202: - ldr r0, _080D121C @ =sTransitionStructPtr - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D1218: .4byte gScanlineEffectRegBuffers -_080D121C: .4byte sTransitionStructPtr - thumb_func_end BT_Phase2BigPokeball_UpdateWave3 - thumb_func_start BT_Phase2BigPokeball_CircleEffect BT_Phase2BigPokeball_CircleEffect: @ 80D1220 push {r4,lr} diff --git a/include/overworld.h b/include/overworld.h index 9a9657006..7c1f34e41 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -106,6 +106,7 @@ extern bool8 (* gFieldCallback2)(void); void SetLastHealLocationWarp(u8 healLocaionId); void sub_8055864(u8 mapGroup, u8 mapNum); void CB2_Overworld(void); +void CB2_OverworldBasic(void); void CB2_NewGame(void); bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType); void Overworld_ResetStateAfterTeleport(void); diff --git a/ld_script.txt b/ld_script.txt index 1dc198e6f..f3f580d0c 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -191,6 +191,7 @@ SECTIONS { asm/evolution_scene.o(.text); src/coins.o(.text); src/fldeff_strength.o(.text); + src/battle_transition.o(.text); asm/battle_transition.o(.text); asm/battle_controller_link_partner.o(.text); asm/battle_message.o(.text); diff --git a/src/battle_transition.c b/src/battle_transition.c index 7894a5b73..27354292c 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1,7 +1,14 @@ #include "global.h" #include "sprite.h" #include "task.h" +#include "overworld.h" +#include "malloc.h" +#include "palette.h" +#include "trig.h" +#include "gpu_regs.h" #include "battle_transition.h" +#include "field_weather.h" +#include "scanline_effect.h" typedef bool8 (*TransitionStateFunc)(struct Task *task); typedef bool8 (*TransitionSpriteCallback)(struct Sprite *sprite); @@ -105,25 +112,28 @@ bool8 BT_Phase1Blink(struct Task *task); bool8 BT_WaitForPhase1(struct Task *task); bool8 BT_Phase2LaunchAnimTask(struct Task *task); bool8 BT_WaitForPhase2(struct Task *task); -bool8 BT_Phase2Blur(struct Task *task); -bool8 BT_Phase2DistortedWave(struct Task *task); -bool8 BT_Phase2HorizontalCorrugate(struct Task *task); -bool8 BT_Phase2BigPokeball(struct Task *task); -bool8 BT_Phase2SlidingPokeballs(struct Task *task); -bool8 BT_Phase2ClockwiseBlackFade(struct Task *task); -bool8 BT_Phase2FullScreenWave(struct Task *task); -bool8 BT_Phase2BlackWaveToRight(struct Task *task); -bool8 BT_Phase2SlicedScreen(struct Task *task); -bool8 BT_Phase2WhiteFadeInStripes(struct Task *task); -bool8 BT_Phase2GridSquares(struct Task *task); -bool8 BT_Phase2BlackDoodles(struct Task *task); -bool8 BT_Phase2StartLoreleiMugshot(struct Task *task); -bool8 BT_Phase2StartBrunoMugshot(struct Task *task); -bool8 BT_Phase2StartAgathaMugshot(struct Task *task); -bool8 BT_Phase2StartLanceMugshot(struct Task *task); -bool8 BT_Phase2StartBlueMugshot(struct Task *task); -bool8 BT_Phase2AntiClockwiseSpiral(struct Task *task); -bool8 BT_Phase1Task(struct Task *task); +void BT_Phase2Blur(u8 taskId); +void BT_Phase2DistortedWave(u8 taskId); +void BT_Phase2HorizontalCorrugate(u8 taskId); +void BT_Phase2BigPokeball(u8 taskId); +void BT_Phase2SlidingPokeballs(u8 taskId); +void BT_Phase2ClockwiseBlackFade(u8 taskId); +void BT_Phase2FullScreenWave(u8 taskId); +void BT_Phase2BlackWaveToRight(u8 taskId); +void BT_Phase2SlicedScreen(u8 taskId); +void BT_Phase2WhiteFadeInStripes(u8 taskId); +void BT_Phase2GridSquares(u8 taskId); +void BT_Phase2BlackDoodles(u8 taskId); +void BT_Phase2StartLoreleiMugshot(u8 taskId); +void BT_Phase2StartBrunoMugshot(u8 taskId); +void BT_Phase2StartAgathaMugshot(u8 taskId); +void BT_Phase2StartLanceMugshot(u8 taskId); +void BT_Phase2StartBlueMugshot(u8 taskId); +void BT_Phase2AntiClockwiseSpiral(u8 taskId); +void BT_Phase1Task(u8 taskId); + +void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite); +void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite); bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite); bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite); @@ -131,8 +141,23 @@ bool8 BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn(struct Sprite *sprite); bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite(struct Sprite *sprite); bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2(struct Sprite *sprite); -void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite); -void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite); +void VBCB_BT_Phase2DistortedWave(void); +void HBCB_BT_Phase2DistortedWave(void); +void VBCB_BT_Phase2HorizontalCorrugate(void); +void HBCB_BT_Phase2HorizontalCorrugate(void); +void VBCB_BT_Phase2BigPokeball1(void); +void VBCB_BT_Phase2BigPokeball2(void); +void HBCB_BT_Phase2BigPokeball(void); + +void BT_LaunchTask(u8 transitionId); +void BT_TaskMain(u8 taskId); +void BT_InitCtrlBlk(void); +void BT_CreatePhase1SubTask(s16 fadeOutDelay, s16 fadeInDelay, s16 blinkTimes, s16 fadeOutSpeed, s16 fadeInSpeed); +bool8 BT_IsPhase1Done(void); +void BT_VBSyncOamAndPltt(void); +void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr); +void BT_LoadWaveIntoBuffer(s16 *buffer, s16 offset, s16 theta, s16 frequency, s16 amplitude, s16 bufSize); + const u32 sBigPokeballTileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball_tileset.4bpp"); const u32 sSlidingPokeballTilemap[] = INCBIN_U32("graphics/battle_transitions/sliding_pokeball_tilemap.bin"); @@ -142,7 +167,7 @@ const u8 sSpriteImage_UnusedBrendan[] = INCBIN_U8("graphics/battle_transitions/u const u8 sSpriteImage_UnusedLass[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp"); const u32 sGridSquareTilemap[] = INCBIN_U32("graphics/battle_transitions/grid_square_tilemap.bin"); -const TransitionStateFunc sBT_Phase1Tasks[] = +const TaskFunc sBT_Phase1Tasks[] = { BT_Phase1Task, BT_Phase1Task, @@ -164,7 +189,7 @@ const TransitionStateFunc sBT_Phase1Tasks[] = BT_Phase1Task, }; -const TransitionStateFunc sBT_Phase2Tasks[] = +const TaskFunc sBT_Phase2Tasks[] = { BT_Phase2Blur, BT_Phase2DistortedWave, @@ -575,3 +600,378 @@ const struct SpritePalette sSpritePalette_UnusedTrainer = const u16 sBigPokeballTilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_tilemap.bin"); const u16 sVsBarTilemap[] = INCBIN_U16("graphics/battle_transitions/vsbar_tilemap.bin"); + +void BT_StartOnField(u8 transitionId) +{ + sTransitionStructPtr = AllocZeroed(sizeof(struct TransitionData)); + gMain.callback2 = CB2_OverworldBasic; + BT_LaunchTask(transitionId); +} + +// not used +static void BT_StartWithoutAlloc(u8 transitionId) +{ + BT_LaunchTask(transitionId); +} + +#define tState data[0] +#define tTransitionId data[1] +#define tTransitionDone data[15] + +bool8 BT_IsDone(void) +{ + u8 taskId = FindTaskIdByFunc(BT_TaskMain); + if (gTasks[taskId].tTransitionDone) + { + BT_InitCtrlBlk(); + FREE_AND_SET_NULL(sTransitionStructPtr); + DestroyTask(taskId); + return TRUE; + } + else + { + return FALSE; + } +} + +void BT_LaunchTask(u8 transitionId) +{ + u8 taskId = CreateTask(BT_TaskMain, 2); + gTasks[taskId].tTransitionId = transitionId; +} + +void BT_TaskMain(u8 taskId) +{ + while (sBT_MainPhases[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase1Blink(struct Task *task) +{ + SetWeatherScreenFadeOut(); + CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); + if (sBT_Phase1Tasks[task->tTransitionId] != NULL) + { + CreateTask(sBT_Phase1Tasks[task->tTransitionId], 4); + ++task->tState; + return FALSE; + } + else + { + task->tState = 2; + return TRUE; + } +} + +bool8 BT_WaitForPhase1(struct Task *task) +{ + if (FindTaskIdByFunc(sBT_Phase1Tasks[task->tTransitionId]) == TASK_NONE) + { + ++task->tState; + return TRUE; + } + else + { + return FALSE; + } +} + +bool8 BT_Phase2LaunchAnimTask(struct Task *task) +{ + CreateTask(sBT_Phase2Tasks[task->tTransitionId], 0); + ++task->tState; + return FALSE; +} + +bool8 BT_WaitForPhase2(struct Task *task) +{ + task->tTransitionDone = FALSE; + if (FindTaskIdByFunc(sBT_Phase2Tasks[task->tTransitionId]) == TASK_NONE) + task->tTransitionDone = TRUE; + return FALSE; +} + +void BT_Phase1Task(u8 taskId) +{ + if (!gTasks[taskId].tState) + { + ++gTasks[taskId].tState; + BT_CreatePhase1SubTask(0, 0, 2, 2, 2); + } + else if (BT_IsPhase1Done()) + { + DestroyTask(taskId); + } +} + +#define tInterval data[1] +#define tMosaicSize data[2] + +void BT_Phase2Blur(u8 taskId) +{ + while (sBT_Phase2BlurFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase2Blur_InitBgMosaic(struct Task *task) +{ + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuRegBits(REG_OFFSET_BG1CNT, BGCNT_MOSAIC); + SetGpuRegBits(REG_OFFSET_BG2CNT, BGCNT_MOSAIC); + SetGpuRegBits(REG_OFFSET_BG3CNT, BGCNT_MOSAIC); + ++task->tState; + return TRUE; +} + +bool8 BT_Phase2Blur_Anim(struct Task *task) +{ + if (task->tInterval) + { + --task->tInterval; + } + else + { + task->tInterval = 2; + if (++task->tMosaicSize == 10) + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 0x10, RGB_BLACK); + // The mosaic size argument is shared by HSIZE and VSIZE + SetGpuReg(REG_OFFSET_MOSAIC, (task->tMosaicSize & 0xF) + ((task->tMosaicSize & 0xF) << 4)); + if (task->tMosaicSize > 14) + ++task->tState; + } + return FALSE; +} + +bool8 BT_Phase2Blur_IsDone(struct Task *task) +{ + if (!gPaletteFade.active) + DestroyTask(FindTaskIdByFunc(BT_Phase2Blur)); + return FALSE; +} + +#undef tInterval +#undef tMosaicSize + +#define tTheta data[1] +#define tAmplitude data[2] + +void BT_Phase2DistortedWave(u8 taskId) +{ + while (sBT_Phase2DistortedWaveFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase2DistortedWave_InitWave(struct Task *task) +{ + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 0x10, RGB_BLACK); + BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[1], sTransitionStructPtr->bg123HOfs, 0, 2, 0, 160); + SetVBlankCallback(VBCB_BT_Phase2DistortedWave); + SetHBlankCallback(HBCB_BT_Phase2DistortedWave); + EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); + ++task->tState; + return FALSE; +} + +bool8 BT_Phase2DistortedWave_UpdateWave(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + task->tTheta += 4; + task->tAmplitude += 8; + BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], sTransitionStructPtr->bg123HOfs, task->tTheta, 2, task->tAmplitude, 160); + if (!gPaletteFade.active) + DestroyTask(FindTaskIdByFunc(BT_Phase2DistortedWave)); + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +void VBCB_BT_Phase2DistortedWave(void) +{ + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); +} + +void HBCB_BT_Phase2DistortedWave(void) +{ + s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + REG_BG1HOFS = offset; + REG_BG2HOFS = offset; + REG_BG3HOFS = offset; +} + +void BT_Phase2HorizontalCorrugate(u8 taskId) +{ + while (sBT_Phase2HorizontalCorrugateFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase2HorizontalCorrugate_Init(struct Task *task) +{ + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 0x10, RGB_BLACK); + memset(gScanlineEffectRegBuffers[1], sTransitionStructPtr->bg123VOfs, 320); + SetVBlankCallback(VBCB_BT_Phase2HorizontalCorrugate); + SetHBlankCallback(HBCB_BT_Phase2HorizontalCorrugate); + EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); + ++task->tState; + return FALSE; +} + +bool8 BT_Phase2HorizontalCorrugate_UpdateWave(struct Task *task) +{ + u8 i; + u16 theta, amplitude; + + sTransitionStructPtr->vblankDma = FALSE; + theta = task->tTheta; + amplitude = task->tAmplitude >> 8; + task->tTheta += 4224; + task->tAmplitude += 384; + for (i = 0; i < 160; i++, theta += 4224) + gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->bg123VOfs + Sin(theta / 256, amplitude); + if (!gPaletteFade.active) + DestroyTask(FindTaskIdByFunc(BT_Phase2HorizontalCorrugate)); + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +void VBCB_BT_Phase2HorizontalCorrugate(void) +{ + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); +} + +void HBCB_BT_Phase2HorizontalCorrugate(void) +{ + u16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + REG_BG1VOFS = offset; + REG_BG2VOFS = offset; + REG_BG3VOFS = offset; +} + +#undef tTheta +#undef tAmplitude + +#define tEvb data[1] +#define tEva data[2] +#define tInterval data[3] +#define tTheta data[4] +#define tAmplitude data[5] + +void BT_Phase2BigPokeball(u8 taskId) +{ + while (sBT_Phase2BigPokeballFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase2BigPokeball_Init(struct Task *task) +{ + u16 i, *tilemapAddr, *tilesetAddr; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + task->tEvb = 16; + task->tEva = 0; + task-> tTheta = 0; + task-> tAmplitude = 0x4000; + sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winOut = 0; + sTransitionStructPtr->win0H = 240; + sTransitionStructPtr->win0V = 160; + sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD; + sTransitionStructPtr->bldAlpha = (task->tEvb << 8) | task->tEva; + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[1][i] = 240; + SetVBlankCallback(VBCB_BT_Phase2BigPokeball1); + BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); + CpuFill16(0, tilemapAddr, 0x800); + CpuCopy16(sBigPokeballTileset, tilesetAddr, 0x580); + LoadPalette(sSlidingPokeballBigPokeballPalette, 0xF0, 0x20); + ++task->tState; + return FALSE; +} + +bool8 BT_Phase2BigPokeball_LoadTilemapAndWave(struct Task *task) +{ + s16 i, j; + u16 *tilemapAddr, *tilesetAddr; + const u16 *BigPokeballMap = sBigPokeballTilemap; + + BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); + for (i = 0; i < 20; ++i) + for (j = 0; j < 30; ++j, ++BigPokeballMap) + tilemapAddr[i * 32 + j] = *BigPokeballMap | 0xF000; // use palette #15 + BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude, 160); + ++task->tState; + return TRUE; +} + +bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + if (task->tInterval == 0 || --task->tInterval == 0) + { + ++task->tEva; + task->tInterval = 1; // Broken logic. This makes the condition always TRUE. + } + sTransitionStructPtr->bldAlpha = (task->tEvb << 8) | task->tEva; + // Increment eva until it reaches 50% coeff + if (task->tEva > 15) + ++task->tState; + task->tTheta += 12; + task->tAmplitude -= 384; + // Assign a very high frequency value so that 2 adjacent values in gScanlineEffectRegBuffers[0] have different sign + BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude >> 8, 160); + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2BigPokeball_UpdateWave2DecEvb(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + if (task->tInterval == 0 || --task->tInterval == 0) + { + --task->tEvb; + task->tInterval = 2; + } + sTransitionStructPtr->bldAlpha = (task->tEvb << 8) | task->tEva; + if (!task->tEvb) + ++task->tState; + if (task->tAmplitude > 0) + { + task->tTheta += 12; + task->tAmplitude -= 384; + } + else + { + task->tAmplitude = 0; + } + BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude >> 8, 160); + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + if (task->tAmplitude > 0) + { + task->tTheta += 12; + task->tAmplitude -= 384; + } + else + { + task->tAmplitude = 0; + } + BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude >> 8, 160); + if (task->tAmplitude <= 0) + { + ++task->tState; + task->tEvb = 160; + task->tEva = 256; + task->tInterval = 0; + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + + -- cgit v1.2.3 From 25661400cc57bc3511945d9d05c324ceec5839e2 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 24 Jul 2019 14:52:07 +0800 Subject: thru BT_Phase2AntiClockwiseSpiral --- asm/battle_transition.s | 1689 ----------------------------------------------- include/field_effect.h | 1 + src/battle_transition.c | 560 +++++++++++++++- 3 files changed, 555 insertions(+), 1695 deletions(-) diff --git a/asm/battle_transition.s b/asm/battle_transition.s index b6b365db4..64b5686db 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -5,1695 +5,6 @@ .text - thumb_func_start BT_Phase2BigPokeball_CircleEffect -BT_Phase2BigPokeball_CircleEffect: @ 80D1220 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080D12C4 @ =sTransitionStructPtr - ldr r0, [r0] - ldrb r1, [r0] - movs r3, 0 - strb r3, [r0] - ldrh r2, [r4, 0xC] - movs r0, 0xC - ldrsh r1, [r4, r0] - ldr r0, _080D12C8 @ =0x000007ff - cmp r1, r0 - bgt _080D1242 - movs r1, 0x80 - lsls r1, 1 - adds r0, r2, r1 - strh r0, [r4, 0xC] -_080D1242: - ldrh r1, [r4, 0xA] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080D125E - ldrh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 24 - subs r0, r1, r0 - strh r0, [r4, 0xA] - lsls r0, 16 - cmp r0, 0 - bge _080D125E - strh r3, [r4, 0xA] -_080D125E: - ldr r0, _080D12CC @ =gScanlineEffectRegBuffers - movs r1, 0xA - ldrsh r3, [r4, r1] - movs r1, 0x78 - movs r2, 0x50 - bl BT_GenerateCircle - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080D129A - ldr r1, _080D12D0 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D12D4 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D12D8 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl BT_BlendPalettesToBlack - ldr r0, _080D12DC @ =BT_Phase2BigPokeball - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D129A: - ldrh r1, [r4, 0xE] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080D12AE - adds r0, r1, 0x1 - strh r0, [r4, 0xE] - ldr r0, _080D12E0 @ =VBCB_BT_Phase2BigPokeball2 - bl SetVBlankCallback -_080D12AE: - ldr r0, _080D12C4 @ =sTransitionStructPtr - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D12C4: .4byte sTransitionStructPtr -_080D12C8: .4byte 0x000007ff -_080D12CC: .4byte gScanlineEffectRegBuffers -_080D12D0: .4byte 0x040000b0 -_080D12D4: .4byte 0x0000c5ff -_080D12D8: .4byte 0x00007fff -_080D12DC: .4byte BT_Phase2BigPokeball -_080D12E0: .4byte VBCB_BT_Phase2BigPokeball2 - thumb_func_end BT_Phase2BigPokeball_CircleEffect - - thumb_func_start BT_VBStopDma0SyncSrcBufferSetLcdRegs -BT_VBStopDma0SyncSrcBufferSetLcdRegs: @ 80D12E4 - push {r4,lr} - ldr r1, _080D1354 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D1358 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D135C @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl BT_VBSyncOamAndPltt - ldr r4, _080D1360 @ =sTransitionStructPtr - ldr r0, [r4] - ldrb r0, [r0] - cmp r0, 0 - beq _080D131C - ldr r1, _080D1364 @ =0x040000d4 - ldr r0, _080D1368 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D136C @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D131C: - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0xE] - movs r0, 0x50 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x10] - movs r0, 0x52 - bl SetGpuReg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D1354: .4byte 0x040000b0 -_080D1358: .4byte 0x0000c5ff -_080D135C: .4byte 0x00007fff -_080D1360: .4byte sTransitionStructPtr -_080D1364: .4byte 0x040000d4 -_080D1368: .4byte gScanlineEffectRegBuffers -_080D136C: .4byte 0x800000a0 - thumb_func_end BT_VBStopDma0SyncSrcBufferSetLcdRegs - - thumb_func_start VBCB_BT_Phase2BigPokeball1 -VBCB_BT_Phase2BigPokeball1: @ 80D1370 - push {lr} - bl BT_VBStopDma0SyncSrcBufferSetLcdRegs - ldr r1, _080D138C @ =0x040000b0 - ldr r0, _080D1390 @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r1] - ldr r0, _080D1394 @ =0x04000010 - str r0, [r1, 0x4] - ldr r0, _080D1398 @ =0xa2400001 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_080D138C: .4byte 0x040000b0 -_080D1390: .4byte gScanlineEffectRegBuffers + 0x780 -_080D1394: .4byte 0x04000010 -_080D1398: .4byte 0xa2400001 - thumb_func_end VBCB_BT_Phase2BigPokeball1 - - thumb_func_start VBCB_BT_Phase2BigPokeball2 -VBCB_BT_Phase2BigPokeball2: @ 80D139C - push {lr} - bl BT_VBStopDma0SyncSrcBufferSetLcdRegs - ldr r1, _080D13B8 @ =0x040000b0 - ldr r0, _080D13BC @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r1] - ldr r0, _080D13C0 @ =0x04000040 - str r0, [r1, 0x4] - ldr r0, _080D13C4 @ =0xa2400001 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_080D13B8: .4byte 0x040000b0 -_080D13BC: .4byte gScanlineEffectRegBuffers + 0x780 -_080D13C0: .4byte 0x04000040 -_080D13C4: .4byte 0xa2400001 - thumb_func_end VBCB_BT_Phase2BigPokeball2 - - thumb_func_start BT_Phase2SlidingPokeballs -BT_Phase2SlidingPokeballs: @ 80D13C8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D13F8 @ =sBT_Phase2SlidingPokeballsFuncs - ldr r2, _080D13FC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D13DA: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D13DA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D13F8: .4byte sBT_Phase2SlidingPokeballsFuncs -_080D13FC: .4byte gTasks - thumb_func_end BT_Phase2SlidingPokeballs - - thumb_func_start BT_Phase2SlidingPokeballs_LoadBgGfx -BT_Phase2SlidingPokeballs_LoadBgGfx: @ 80D1400 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - add r0, sp, 0x4 - add r1, sp, 0x8 - bl BT_GetBg0TilemapAndTilesetBase - ldr r0, _080D1440 @ =sSlidingPokeballTilemap - ldr r1, [sp, 0x8] - movs r2, 0x20 - bl CpuSet - movs r0, 0 - str r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, _080D1444 @ =0x05000200 - mov r0, sp - bl CpuSet - ldr r0, _080D1448 @ =sSlidingPokeballBigPokeballPalette - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D1440: .4byte sSlidingPokeballTilemap -_080D1444: .4byte 0x05000200 -_080D1448: .4byte sSlidingPokeballBigPokeballPalette - thumb_func_end BT_Phase2SlidingPokeballs_LoadBgGfx - - thumb_func_start BT_Phase2SlidingPokeballs_SetupFldeffArgs -BT_Phase2SlidingPokeballs_SetupFldeffArgs: @ 80D144C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r7, r0, 0 - ldr r1, _080D14CC @ =gUnknown_83FA400 - mov r0, sp - movs r2, 0x4 - bl memcpy - add r4, sp, 0x4 - ldr r1, _080D14D0 @ =gUnknown_83FA404 - adds r0, r4, 0 - movs r2, 0xA - bl memcpy - bl Random - movs r5, 0x1 - ands r5, r0 - movs r1, 0 - mov r8, r4 - ldr r6, _080D14D4 @ =gFieldEffectArguments -_080D147A: - lsls r5, 16 - asrs r5, 16 - lsls r0, r5, 1 - add r0, sp - movs r2, 0 - ldrsh r0, [r0, r2] - str r0, [r6] - lsls r4, r1, 16 - asrs r4, 16 - lsls r0, r4, 5 - adds r0, 0x10 - str r0, [r6, 0x4] - str r5, [r6, 0x8] - lsls r0, r4, 1 - add r0, r8 - movs r1, 0 - ldrsh r0, [r0, r1] - str r0, [r6, 0xC] - movs r0, 0x2D - bl FieldEffectStart - adds r4, 0x1 - lsls r4, 16 - movs r0, 0x1 - eors r5, r0 - lsls r5, 16 - lsrs r5, 16 - lsrs r1, r4, 16 - asrs r4, 16 - cmp r4, 0x4 - ble _080D147A - ldrh r0, [r7, 0x8] - adds r0, 0x1 - strh r0, [r7, 0x8] - movs r0, 0 - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D14CC: .4byte gUnknown_83FA400 -_080D14D0: .4byte gUnknown_83FA404 -_080D14D4: .4byte gFieldEffectArguments - thumb_func_end BT_Phase2SlidingPokeballs_SetupFldeffArgs - - thumb_func_start BT_Phase2SlidingPokeballs_IsDone -BT_Phase2SlidingPokeballs_IsDone: @ 80D14D8 - push {lr} - movs r0, 0x2D - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _080D14F8 - bl BT_BlendPalettesToBlack - ldr r0, _080D1500 @ =BT_Phase2SlidingPokeballs - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D14F8: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D1500: .4byte BT_Phase2SlidingPokeballs - thumb_func_end BT_Phase2SlidingPokeballs_IsDone - - thumb_func_start FldEff_Pokeball -FldEff_Pokeball: @ 80D1504 - push {r4,r5,lr} - ldr r0, _080D1560 @ =sSpriteTemplate_SlidingPokeball - ldr r5, _080D1564 @ =gFieldEffectArguments - movs r2, 0 - ldrsh r1, [r5, r2] - movs r3, 0x4 - ldrsh r2, [r5, r3] - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080D1568 @ =gSprites - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r4, r1 - ldrb r1, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x5] - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4, 0x1] - ldr r0, [r5, 0x8] - strh r0, [r4, 0x2E] - ldr r0, [r5, 0xC] - strh r0, [r4, 0x30] - ldr r0, _080D156C @ =0x0000ffff - strh r0, [r4, 0x32] - adds r0, r4, 0 - bl InitSpriteAffineAnim - ldrb r1, [r5, 0x8] - adds r0, r4, 0 - bl StartSpriteAffineAnim - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D1560: .4byte sSpriteTemplate_SlidingPokeball -_080D1564: .4byte gFieldEffectArguments -_080D1568: .4byte gSprites -_080D156C: .4byte 0x0000ffff - thumb_func_end FldEff_Pokeball - - thumb_func_start SpriteCB_BT_Phase2SlidingPokeballs -SpriteCB_BT_Phase2SlidingPokeballs: @ 80D1570 - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r1, _080D1590 @ =gUnknown_83FA40E - mov r0, sp - movs r2, 0x4 - bl memcpy - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080D1594 - subs r0, r1, 0x1 - strh r0, [r4, 0x30] - b _080D162A - .align 2, 0 -_080D1590: .4byte gUnknown_83FA40E -_080D1594: - ldrh r0, [r4, 0x20] - lsls r1, r0, 16 - lsrs r0, r1, 16 - cmp r0, 0xF0 - bhi _080D1606 - asrs r0, r1, 19 - lsls r0, 16 - ldrh r1, [r4, 0x22] - lsls r1, 16 - asrs r1, 19 - lsls r1, 16 - lsrs r6, r1, 16 - lsrs r1, r0, 16 - asrs r5, r0, 16 - movs r2, 0x32 - ldrsh r0, [r4, r2] - cmp r5, r0 - beq _080D1606 - strh r1, [r4, 0x32] - movs r0, 0x8 - bl GetGpuReg - lsls r0, 16 - lsrs r0, 24 - movs r1, 0x1F - ands r0, r1 - lsls r0, 11 - movs r1, 0xC0 - lsls r1, 19 - adds r0, r1 - lsls r2, r6, 16 - asrs r2, 16 - subs r1, r2, 0x2 - lsls r1, 5 - adds r1, r5 - lsls r1, 1 - adds r1, r0 - ldr r6, _080D1634 @ =0x0000f001 - adds r3, r6, 0 - strh r3, [r1] - subs r1, r2, 0x1 - lsls r1, 5 - adds r1, r5 - lsls r1, 1 - adds r1, r0 - strh r3, [r1] - lsls r1, r2, 5 - adds r1, r5 - lsls r1, 1 - adds r1, r0 - strh r3, [r1] - adds r2, 0x1 - lsls r2, 5 - adds r2, r5 - lsls r2, 1 - adds r2, r0 - strh r3, [r2] -_080D1606: - movs r1, 0x2E - ldrsh r0, [r4, r1] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - adds r0, 0xF - lsls r0, 16 - movs r1, 0x87 - lsls r1, 17 - cmp r0, r1 - bls _080D162A - adds r0, r4, 0 - movs r1, 0x2D - bl FieldEffectStop -_080D162A: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D1634: .4byte 0x0000f001 - thumb_func_end SpriteCB_BT_Phase2SlidingPokeballs - - thumb_func_start BT_Phase2ClockwiseBlackFade -BT_Phase2ClockwiseBlackFade: @ 80D1638 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D1668 @ =sBT_Phase2ClockwiseBlackFadeFuncs - ldr r2, _080D166C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D164A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D164A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D1668: .4byte sBT_Phase2ClockwiseBlackFadeFuncs -_080D166C: .4byte gTasks - thumb_func_end BT_Phase2ClockwiseBlackFade - - thumb_func_start BT_Phase2ClockwiseBlackFade_Init -BT_Phase2ClockwiseBlackFade_Init: @ 80D1670 - push {r4,lr} - adds r4, r0, 0 - bl BT_InitCtrlBlk - bl ScanlineEffect_Clear - ldr r0, _080D16C4 @ =sTransitionStructPtr - ldr r1, [r0] - movs r0, 0 - strh r0, [r1, 0x2] - movs r0, 0x3F - strh r0, [r1, 0x4] - ldr r0, _080D16C8 @ =0x0000f0f1 - strh r0, [r1, 0x6] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r3, _080D16CC @ =gScanlineEffectRegBuffers + 0x780 - ldr r2, _080D16D0 @ =0x0000f3f4 -_080D1696: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x9F - bls _080D1696 - ldr r0, _080D16D4 @ =VBCB_BT_Phase2ClockwiseBlackFade - bl SetVBlankCallback - ldr r0, _080D16C4 @ =sTransitionStructPtr - ldr r1, [r0] - movs r0, 0x78 - strh r0, [r1, 0x2C] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D16C4: .4byte sTransitionStructPtr -_080D16C8: .4byte 0x0000f0f1 -_080D16CC: .4byte gScanlineEffectRegBuffers + 0x780 -_080D16D0: .4byte 0x0000f3f4 -_080D16D4: .4byte VBCB_BT_Phase2ClockwiseBlackFade - thumb_func_end BT_Phase2ClockwiseBlackFade_Init - - thumb_func_start BT_Phase2ClockwiseBlackFade_Step1 -BT_Phase2ClockwiseBlackFade_Step1: @ 80D16D8 - push {r4-r7,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r2, _080D1760 @ =sTransitionStructPtr - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r1, [r2] - adds r0, r1, 0 - adds r0, 0x24 - movs r2, 0x2C - ldrsh r3, [r1, r2] - movs r1, 0x1 - negs r1, r1 - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - bl BT_DiagonalSegment_InitParams - ldr r5, _080D1764 @ =gScanlineEffectRegBuffers -_080D1708: - ldr r4, _080D1760 @ =sTransitionStructPtr - ldr r0, [r4] - movs r7, 0x2A - ldrsh r3, [r0, r7] - lsls r3, 1 - adds r3, r5 - ldrh r1, [r0, 0x28] - adds r1, 0x1 - movs r7, 0xF0 - lsls r7, 7 - adds r2, r7, 0 - orrs r1, r2 - strh r1, [r3] - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl BT_DiagonalSegment_ComputePointOnSegment - lsls r0, 24 - cmp r0, 0 - beq _080D1708 - ldr r1, [r4] - ldrh r0, [r1, 0x2C] - adds r0, 0x20 - strh r0, [r1, 0x2C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xEF - ble _080D174C - movs r0, 0 - strh r0, [r1, 0x2E] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_080D174C: - ldr r0, [r4] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - add sp, 0xC - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D1760: .4byte sTransitionStructPtr -_080D1764: .4byte gScanlineEffectRegBuffers - thumb_func_end BT_Phase2ClockwiseBlackFade_Step1 - - thumb_func_start BT_Phase2ClockwiseBlackFade_Step2 -BT_Phase2ClockwiseBlackFade_Step2: @ 80D1768 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - mov r8, r0 - add r1, sp, 0xC - movs r0, 0 - strb r0, [r1] - ldr r4, _080D17EC @ =sTransitionStructPtr - ldr r1, [r4] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x24 - movs r2, 0x2E - ldrsh r1, [r1, r2] - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0xF0 - bl BT_DiagonalSegment_InitParams - mov r9, r4 - mov r7, r9 - add r5, sp, 0xC -_080D17A6: - movs r1, 0x78 - ldr r3, [r7] - ldrh r0, [r3, 0x28] - adds r0, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - movs r2, 0x2E - ldrsh r0, [r3, r2] - cmp r0, 0x4F - ble _080D17BE - ldrh r1, [r3, 0x28] - movs r4, 0xF0 -_080D17BE: - ldr r6, _080D17F0 @ =gScanlineEffectRegBuffers - movs r0, 0x2A - ldrsh r2, [r3, r0] - lsls r2, 1 - adds r2, r6 - lsls r1, 16 - asrs r1, 8 - lsls r0, r4, 16 - asrs r4, r0, 16 - orrs r4, r1 - strh r4, [r2] - ldrb r0, [r5] - cmp r0, 0 - bne _080D17F4 - adds r0, r3, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl BT_DiagonalSegment_ComputePointOnSegment - strb r0, [r5] - b _080D17A6 - .align 2, 0 -_080D17EC: .4byte sTransitionStructPtr -_080D17F0: .4byte gScanlineEffectRegBuffers -_080D17F4: - ldr r1, [r7] - ldrh r0, [r1, 0x2E] - adds r0, 0x10 - strh r0, [r1, 0x2E] - lsls r0, 16 - asrs r2, r0, 16 - cmp r2, 0x9F - ble _080D1812 - movs r0, 0xF0 - strh r0, [r1, 0x2C] - mov r1, r8 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _080D183A -_080D1812: - movs r3, 0x2A - ldrsh r0, [r1, r3] - cmp r0, r2 - bge _080D183A - adds r3, r4, 0 - ldr r5, _080D1858 @ =sTransitionStructPtr -_080D181E: - ldr r2, [r5] - ldrh r0, [r2, 0x2A] - adds r0, 0x1 - strh r0, [r2, 0x2A] - lsls r0, 16 - asrs r0, 15 - adds r0, r6 - strh r3, [r0] - movs r4, 0x2A - ldrsh r1, [r2, r4] - movs r4, 0x2E - ldrsh r0, [r2, r4] - cmp r1, r0 - blt _080D181E -_080D183A: - mov r1, r9 - ldr r0, [r1] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D1858: .4byte sTransitionStructPtr - thumb_func_end BT_Phase2ClockwiseBlackFade_Step2 - - thumb_func_start BT_Phase2ClockwiseBlackFade_Step3 -BT_Phase2ClockwiseBlackFade_Step3: @ 80D185C - push {r4-r6,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r2, _080D18DC @ =sTransitionStructPtr - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r1, [r2] - adds r0, r1, 0 - adds r0, 0x24 - movs r2, 0x2C - ldrsh r3, [r1, r2] - movs r1, 0xA0 - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - bl BT_DiagonalSegment_InitParams - ldr r5, _080D18E0 @ =gScanlineEffectRegBuffers -_080D188A: - ldr r4, _080D18DC @ =sTransitionStructPtr - ldr r0, [r4] - movs r1, 0x2A - ldrsh r3, [r0, r1] - lsls r3, 1 - adds r3, r5 - ldrh r1, [r0, 0x28] - lsls r1, 8 - movs r2, 0xF0 - orrs r1, r2 - strh r1, [r3] - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl BT_DiagonalSegment_ComputePointOnSegment - lsls r0, 24 - cmp r0, 0 - beq _080D188A - ldr r1, [r4] - ldrh r0, [r1, 0x2C] - subs r0, 0x20 - strh r0, [r1, 0x2C] - lsls r0, 16 - cmp r0, 0 - bgt _080D18C8 - movs r0, 0xA0 - strh r0, [r1, 0x2E] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_080D18C8: - ldr r0, [r4] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D18DC: .4byte sTransitionStructPtr -_080D18E0: .4byte gScanlineEffectRegBuffers - thumb_func_end BT_Phase2ClockwiseBlackFade_Step3 - - thumb_func_start BT_Phase2ClockwiseBlackFade_Step4 -BT_Phase2ClockwiseBlackFade_Step4: @ 80D18E4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - mov r9, r0 - add r1, sp, 0xC - movs r0, 0 - strb r0, [r1] - ldr r4, _080D196C @ =sTransitionStructPtr - ldr r1, [r4] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x24 - movs r2, 0x2E - ldrsh r1, [r1, r2] - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0 - bl BT_DiagonalSegment_InitParams - ldr r7, _080D1970 @ =gScanlineEffectRegBuffers - mov r10, r7 - ldr r0, _080D196C @ =sTransitionStructPtr - mov r8, r0 - add r6, sp, 0xC -_080D1928: - mov r1, r8 - ldr r4, [r1] - movs r2, 0x2A - ldrsh r0, [r4, r2] - lsls r0, 1 - mov r7, r10 - adds r5, r0, r7 - ldrb r1, [r5] - ldrh r2, [r4, 0x28] - adds r3, r2, 0 - movs r7, 0x2E - ldrsh r0, [r4, r7] - cmp r0, 0x50 - bgt _080D1948 - movs r2, 0x78 - adds r1, r3, 0 -_080D1948: - lsls r0, r2, 16 - asrs r0, 8 - lsls r1, 16 - asrs r1, 16 - orrs r1, r0 - movs r7, 0 - strh r1, [r5] - ldrb r0, [r6] - cmp r0, 0 - bne _080D1974 - adds r0, r4, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl BT_DiagonalSegment_ComputePointOnSegment - strb r0, [r6] - b _080D1928 - .align 2, 0 -_080D196C: .4byte sTransitionStructPtr -_080D1970: .4byte gScanlineEffectRegBuffers -_080D1974: - mov r0, r8 - ldr r2, [r0] - ldrh r0, [r2, 0x2E] - subs r0, 0x10 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r3, r0, 16 - cmp r3, 0 - bgt _080D1992 - strh r7, [r2, 0x2C] - mov r1, r9 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _080D19BC -_080D1992: - movs r4, 0x2A - ldrsh r0, [r2, r4] - cmp r0, r3 - ble _080D19BC - ldr r6, _080D19DC @ =gScanlineEffectRegBuffers - adds r3, r1, 0 - ldr r5, _080D19E0 @ =sTransitionStructPtr -_080D19A0: - ldr r2, [r5] - ldrh r0, [r2, 0x2A] - subs r0, 0x1 - strh r0, [r2, 0x2A] - lsls r0, 16 - asrs r0, 15 - adds r0, r6 - strh r3, [r0] - movs r7, 0x2A - ldrsh r1, [r2, r7] - movs r4, 0x2E - ldrsh r0, [r2, r4] - cmp r1, r0 - bgt _080D19A0 -_080D19BC: - ldr r7, _080D19E0 @ =sTransitionStructPtr - ldr r0, [r7] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D19DC: .4byte gScanlineEffectRegBuffers -_080D19E0: .4byte sTransitionStructPtr - thumb_func_end BT_Phase2ClockwiseBlackFade_Step4 - - thumb_func_start BT_Phase2ClockwiseBlackFade_Step5 -BT_Phase2ClockwiseBlackFade_Step5: @ 80D19E4 - push {r4-r7,lr} - sub sp, 0xC - adds r7, r0, 0 - ldr r1, _080D1A74 @ =sTransitionStructPtr - ldr r0, [r1] - ldrb r2, [r0] - movs r2, 0 - strb r2, [r0] - ldr r1, [r1] - adds r0, r1, 0 - adds r0, 0x24 - movs r4, 0x2C - ldrsh r3, [r1, r4] - str r2, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - bl BT_DiagonalSegment_InitParams - ldr r6, _080D1A78 @ =gScanlineEffectRegBuffers -_080D1A10: - movs r2, 0x78 - ldr r5, _080D1A74 @ =sTransitionStructPtr - ldr r3, [r5] - ldrh r4, [r3, 0x28] - movs r1, 0x28 - ldrsh r0, [r3, r1] - cmp r0, 0x77 - ble _080D1A24 - movs r2, 0 - movs r4, 0xF0 -_080D1A24: - movs r0, 0x2A - ldrsh r1, [r3, r0] - lsls r1, 1 - adds r1, r6 - lsls r2, 8 - lsls r0, r4, 16 - asrs r0, 16 - orrs r0, r2 - strh r0, [r1] - adds r0, r3, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl BT_DiagonalSegment_ComputePointOnSegment - lsls r0, 24 - cmp r0, 0 - beq _080D1A10 - ldr r0, [r5] - ldrh r1, [r0, 0x2C] - adds r1, 0x20 - strh r1, [r0, 0x2C] - movs r1, 0x28 - ldrsh r0, [r0, r1] - cmp r0, 0x78 - ble _080D1A5E - ldrh r0, [r7, 0x8] - adds r0, 0x1 - strh r0, [r7, 0x8] -_080D1A5E: - ldr r0, [r5] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - add sp, 0xC - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D1A74: .4byte sTransitionStructPtr -_080D1A78: .4byte gScanlineEffectRegBuffers - thumb_func_end BT_Phase2ClockwiseBlackFade_Step5 - - thumb_func_start BT_Phase2ClockwiseBlackFade_End -BT_Phase2ClockwiseBlackFade_End: @ 80D1A7C - push {lr} - ldr r1, _080D1AAC @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D1AB0 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D1AB4 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl BT_BlendPalettesToBlack - ldr r0, _080D1AB8 @ =BT_Phase2ClockwiseBlackFade - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D1AAC: .4byte 0x040000b0 -_080D1AB0: .4byte 0x0000c5ff -_080D1AB4: .4byte 0x00007fff -_080D1AB8: .4byte BT_Phase2ClockwiseBlackFade - thumb_func_end BT_Phase2ClockwiseBlackFade_End - - thumb_func_start VBCB_BT_Phase2ClockwiseBlackFade -VBCB_BT_Phase2ClockwiseBlackFade: @ 80D1ABC - push {r4,r5,lr} - ldr r5, _080D1B34 @ =0x040000b0 - ldrh r1, [r5, 0xA] - ldr r0, _080D1B38 @ =0x0000c5ff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r1, [r5, 0xA] - ldr r0, _080D1B3C @ =0x00007fff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r0, [r5, 0xA] - bl BT_VBSyncOamAndPltt - ldr r4, _080D1B40 @ =sTransitionStructPtr - ldr r0, [r4] - ldrb r0, [r0] - cmp r0, 0 - beq _080D1AF4 - ldr r1, _080D1B44 @ =0x040000d4 - ldr r0, _080D1B48 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D1B4C @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D1AF4: - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r4, _080D1B48 @ =gScanlineEffectRegBuffers - movs r0, 0xF0 - lsls r0, 3 - adds r4, r0 - ldrh r1, [r4] - movs r0, 0x40 - bl SetGpuReg - str r4, [r5] - ldr r0, _080D1B50 @ =0x04000040 - str r0, [r5, 0x4] - ldr r0, _080D1B54 @ =0xa2400001 - str r0, [r5, 0x8] - ldr r0, [r5, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D1B34: .4byte 0x040000b0 -_080D1B38: .4byte 0x0000c5ff -_080D1B3C: .4byte 0x00007fff -_080D1B40: .4byte sTransitionStructPtr -_080D1B44: .4byte 0x040000d4 -_080D1B48: .4byte gScanlineEffectRegBuffers -_080D1B4C: .4byte 0x800000a0 -_080D1B50: .4byte 0x04000040 -_080D1B54: .4byte 0xa2400001 - thumb_func_end VBCB_BT_Phase2ClockwiseBlackFade - - thumb_func_start BT_Phase2FullScreenWave -BT_Phase2FullScreenWave: @ 80D1B58 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D1B88 @ =sBT_Phase2FullScreenWaveFuncs - ldr r2, _080D1B8C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D1B6A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D1B6A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D1B88: .4byte sBT_Phase2FullScreenWaveFuncs -_080D1B8C: .4byte gTasks - thumb_func_end BT_Phase2FullScreenWave - - thumb_func_start BT_Phase2FullScreenWave_Init -BT_Phase2FullScreenWave_Init: @ 80D1B90 - push {r4,r5,lr} - adds r5, r0, 0 - bl BT_InitCtrlBlk - bl ScanlineEffect_Clear - movs r2, 0 - ldr r4, _080D1BD8 @ =gScanlineEffectRegBuffers + 0x780 - ldr r3, _080D1BDC @ =sTransitionStructPtr -_080D1BA2: - lsls r1, r2, 1 - adds r1, r4 - ldr r0, [r3] - ldrh r0, [r0, 0x16] - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x9F - bls _080D1BA2 - ldr r0, _080D1BE0 @ =VBCB_BT_Phase2FullScreenWave - bl SetVBlankCallback - ldr r0, _080D1BE4 @ =HBCB_BT_Phase2FullScreenWave - bl SetHBlankCallback - movs r0, 0x2 - bl EnableInterrupts - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D1BD8: .4byte gScanlineEffectRegBuffers + 0x780 -_080D1BDC: .4byte sTransitionStructPtr -_080D1BE0: .4byte VBCB_BT_Phase2FullScreenWave -_080D1BE4: .4byte HBCB_BT_Phase2FullScreenWave - thumb_func_end BT_Phase2FullScreenWave_Init - - thumb_func_start BT_Phase2FullScreenWave_UpdateWave -BT_Phase2FullScreenWave_UpdateWave: @ 80D1BE8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r6, r0, 0 - ldr r0, _080D1CB4 @ =sTransitionStructPtr - ldr r1, [r0] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r2, [r6, 0xC] - lsls r1, r2, 16 - asrs r0, r1, 24 - lsls r0, 16 - lsrs r3, r0, 16 - ldrh r4, [r6, 0xA] - movs r0, 0xC0 - lsls r0, 1 - mov r8, r0 - movs r5, 0x80 - lsls r5, 3 - adds r0, r4, r5 - strh r0, [r6, 0xA] - ldr r0, _080D1CB8 @ =0x1fff0000 - cmp r1, r0 - bgt _080D1C24 - movs r1, 0xC0 - lsls r1, 1 - adds r0, r2, r1 - strh r0, [r6, 0xC] -_080D1C24: - movs r5, 0 - lsls r7, r3, 16 -_080D1C28: - lsrs r0, r4, 8 - asrs r1, r7, 16 - bl Sin - ldr r1, _080D1CBC @ =gScanlineEffectRegBuffers - lsls r2, r5, 1 - adds r2, r1 - ldr r1, _080D1CB4 @ =sTransitionStructPtr - ldr r1, [r1] - ldrh r1, [r1, 0x16] - adds r0, r1 - strh r0, [r2] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - mov r1, r8 - adds r0, r4, r1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r5, 0x9F - bls _080D1C28 - ldrh r0, [r6, 0xE] - adds r0, 0x1 - strh r0, [r6, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x29 - bne _080D1C78 - ldrh r0, [r6, 0x10] - adds r0, 0x1 - strh r0, [r6, 0x10] - movs r0, 0x1 - negs r0, r0 - movs r1, 0x8 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r3, 0x10 - bl BeginNormalPaletteFade -_080D1C78: - movs r5, 0x10 - ldrsh r0, [r6, r5] - cmp r0, 0 - beq _080D1C9A - ldr r0, _080D1CC0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080D1C9A - ldr r0, _080D1CC4 @ =BT_Phase2FullScreenWave - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D1C9A: - ldr r0, _080D1CB4 @ =sTransitionStructPtr - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D1CB4: .4byte sTransitionStructPtr -_080D1CB8: .4byte 0x1fff0000 -_080D1CBC: .4byte gScanlineEffectRegBuffers -_080D1CC0: .4byte gPaletteFade -_080D1CC4: .4byte BT_Phase2FullScreenWave - thumb_func_end BT_Phase2FullScreenWave_UpdateWave - - thumb_func_start VBCB_BT_Phase2FullScreenWave -VBCB_BT_Phase2FullScreenWave: @ 80D1CC8 - push {lr} - bl BT_VBSyncOamAndPltt - ldr r0, _080D1CF0 @ =sTransitionStructPtr - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0 - beq _080D1CEC - ldr r1, _080D1CF4 @ =0x040000d4 - ldr r0, _080D1CF8 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D1CFC @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D1CEC: - pop {r0} - bx r0 - .align 2, 0 -_080D1CF0: .4byte sTransitionStructPtr -_080D1CF4: .4byte 0x040000d4 -_080D1CF8: .4byte gScanlineEffectRegBuffers -_080D1CFC: .4byte 0x800000a0 - thumb_func_end VBCB_BT_Phase2FullScreenWave - - thumb_func_start HBCB_BT_Phase2FullScreenWave -HBCB_BT_Phase2FullScreenWave: @ 80D1D00 - ldr r1, _080D1D20 @ =gScanlineEffectRegBuffers - ldr r0, _080D1D24 @ =0x04000006 - ldrh r0, [r0] - lsls r0, 1 - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _080D1D28 @ =0x04000016 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - bx lr - .align 2, 0 -_080D1D20: .4byte gScanlineEffectRegBuffers -_080D1D24: .4byte 0x04000006 -_080D1D28: .4byte 0x04000016 - thumb_func_end HBCB_BT_Phase2FullScreenWave - - thumb_func_start BT_Phase2BlackWaveToRight -BT_Phase2BlackWaveToRight: @ 80D1D2C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D1D5C @ =sBT_Phase2BlackWaveToRightFuncs - ldr r2, _080D1D60 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D1D3E: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D1D3E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D1D5C: .4byte sBT_Phase2BlackWaveToRightFuncs -_080D1D60: .4byte gTasks - thumb_func_end BT_Phase2BlackWaveToRight - - thumb_func_start BT_Phase2BlackWaveToRight_Init -BT_Phase2BlackWaveToRight_Init: @ 80D1D64 - push {r4,lr} - adds r4, r0, 0 - bl BT_InitCtrlBlk - bl ScanlineEffect_Clear - ldr r0, _080D1DB0 @ =sTransitionStructPtr - ldr r1, [r0] - movs r2, 0 - movs r0, 0x3F - strh r0, [r1, 0x2] - strh r2, [r1, 0x4] - movs r0, 0xF0 - strh r0, [r1, 0x6] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r3, _080D1DB4 @ =gScanlineEffectRegBuffers + 0x780 - movs r2, 0xF2 -_080D1D8A: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x9F - bls _080D1D8A - ldr r0, _080D1DB8 @ =VBCB_BT_Phase2BlackWaveToRight - bl SetVBlankCallback - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D1DB0: .4byte sTransitionStructPtr -_080D1DB4: .4byte gScanlineEffectRegBuffers + 0x780 -_080D1DB8: .4byte VBCB_BT_Phase2BlackWaveToRight - thumb_func_end BT_Phase2BlackWaveToRight_Init - - thumb_func_start BT_Phase2BlackWaveToRight_UpdateWave -BT_Phase2BlackWaveToRight_UpdateWave: @ 80D1DBC - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - ldr r0, _080D1E50 @ =sTransitionStructPtr - ldr r1, [r0] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r7, _080D1E54 @ =gScanlineEffectRegBuffers - ldrh r0, [r4, 0xC] - ldrb r5, [r4, 0xC] - adds r0, 0x10 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0xA] - adds r0, 0x8 - strh r0, [r4, 0xA] - movs r6, 0 - movs r0, 0x1 - mov r8, r0 -_080D1DE4: - adds r0, r5, 0 - movs r1, 0x28 - bl Sin - ldrh r1, [r4, 0xA] - adds r0, r1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r0, 0 - bge _080D1DFA - movs r1, 0 -_080D1DFA: - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xF0 - ble _080D1E04 - movs r1, 0xF0 -_080D1E04: - lsls r0, r1, 16 - asrs r0, 16 - lsls r1, r0, 8 - movs r2, 0xF1 - orrs r1, r2 - strh r1, [r7] - cmp r0, 0xEF - bgt _080D1E18 - movs r0, 0 - mov r8, r0 -_080D1E18: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r5, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - adds r7, 0x2 - cmp r6, 0x9F - bls _080D1DE4 - mov r1, r8 - cmp r1, 0 - beq _080D1E36 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080D1E36: - ldr r0, _080D1E50 @ =sTransitionStructPtr - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D1E50: .4byte sTransitionStructPtr -_080D1E54: .4byte gScanlineEffectRegBuffers - thumb_func_end BT_Phase2BlackWaveToRight_UpdateWave - - thumb_func_start BT_Phase2BlackWaveToRight_End -BT_Phase2BlackWaveToRight_End: @ 80D1E58 - push {lr} - ldr r1, _080D1E88 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D1E8C @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D1E90 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl BT_BlendPalettesToBlack - ldr r0, _080D1E94 @ =BT_Phase2BlackWaveToRight - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D1E88: .4byte 0x040000b0 -_080D1E8C: .4byte 0x0000c5ff -_080D1E90: .4byte 0x00007fff -_080D1E94: .4byte BT_Phase2BlackWaveToRight - thumb_func_end BT_Phase2BlackWaveToRight_End - - thumb_func_start VBCB_BT_Phase2BlackWaveToRight -VBCB_BT_Phase2BlackWaveToRight: @ 80D1E98 - push {r4,r5,lr} - ldr r4, _080D1F04 @ =0x040000b0 - ldrh r1, [r4, 0xA] - ldr r0, _080D1F08 @ =0x0000c5ff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xA] - ldr r0, _080D1F0C @ =0x00007fff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xA] - bl BT_VBSyncOamAndPltt - ldr r5, _080D1F10 @ =sTransitionStructPtr - ldr r0, [r5] - ldrb r0, [r0] - cmp r0, 0 - beq _080D1ED0 - ldr r1, _080D1F14 @ =0x040000d4 - ldr r0, _080D1F18 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D1F1C @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D1ED0: - ldr r0, [r5] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r5] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r5] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r0, _080D1F20 @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r4] - ldr r0, _080D1F24 @ =0x04000040 - str r0, [r4, 0x4] - ldr r0, _080D1F28 @ =0xa2400001 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D1F04: .4byte 0x040000b0 -_080D1F08: .4byte 0x0000c5ff -_080D1F0C: .4byte 0x00007fff -_080D1F10: .4byte sTransitionStructPtr -_080D1F14: .4byte 0x040000d4 -_080D1F18: .4byte gScanlineEffectRegBuffers -_080D1F1C: .4byte 0x800000a0 -_080D1F20: .4byte gScanlineEffectRegBuffers + 0x780 -_080D1F24: .4byte 0x04000040 -_080D1F28: .4byte 0xa2400001 - thumb_func_end VBCB_BT_Phase2BlackWaveToRight - - thumb_func_start BT_Phase2AntiClockwiseSpiral -BT_Phase2AntiClockwiseSpiral: @ 80D1F2C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D1F5C @ =sBT_Phase2AntiClockwiseSpiralFuncs - ldr r2, _080D1F60 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D1F3E: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D1F3E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D1F5C: .4byte sBT_Phase2AntiClockwiseSpiralFuncs -_080D1F60: .4byte gTasks - thumb_func_end BT_Phase2AntiClockwiseSpiral - thumb_func_start sub_80D1F64 sub_80D1F64: @ 80D1F64 push {r4-r7,lr} diff --git a/include/field_effect.h b/include/field_effect.h index 426f77510..47f35fe86 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -83,5 +83,6 @@ void sub_80B69DC(void); void CreateTeleportFieldEffectTask(void); void FieldEffectActiveListRemove(u8 id); void sub_8085620(void); +void FieldEffectStop(struct Sprite *sprite, u8 id); #endif //GUARD_FIELD_EFFECTS_H diff --git a/src/battle_transition.c b/src/battle_transition.c index 27354292c..311563a95 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -5,8 +5,10 @@ #include "malloc.h" #include "palette.h" #include "trig.h" +#include "random.h" #include "gpu_regs.h" #include "battle_transition.h" +#include "field_effect.h" #include "field_weather.h" #include "scanline_effect.h" @@ -47,7 +49,7 @@ struct __attribute__((packed)) BlackDoodleSegment EWRAM_DATA struct TransitionData *sTransitionStructPtr = NULL; -// TODO: move this declaration to include/event_object_movement.h +// TODO: Move this declaration to include/event_object_movement.h extern const struct OamData gEventObjectBaseOam_32x32; bool8 BT_Phase1_FadeOut(struct Task *task); @@ -148,6 +150,10 @@ void HBCB_BT_Phase2HorizontalCorrugate(void); void VBCB_BT_Phase2BigPokeball1(void); void VBCB_BT_Phase2BigPokeball2(void); void HBCB_BT_Phase2BigPokeball(void); +void VBCB_BT_Phase2ClockwiseBlackFade(void); +void VBCB_BT_Phase2FullScreenWave(void); +void HBCB_BT_Phase2FullScreenWave(void); +void VBCB_BT_Phase2BlackWaveToRight(void); void BT_LaunchTask(u8 transitionId); void BT_TaskMain(u8 taskId); @@ -157,7 +163,10 @@ bool8 BT_IsPhase1Done(void); void BT_VBSyncOamAndPltt(void); void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr); void BT_LoadWaveIntoBuffer(s16 *buffer, s16 offset, s16 theta, s16 frequency, s16 amplitude, s16 bufSize); - +void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius); +void BT_BlendPalettesToBlack(void); +void BT_DiagonalSegment_InitParams(s16 *buffer, s16 startPtX, s16 startPtY, s16 endPtX, s16 endPtY, s16 stepX, s16 stepY); +bool8 BT_DiagonalSegment_ComputePointOnSegment(s16 *data, bool8 checkBoundary1, bool8 checkBoundary2); const u32 sBigPokeballTileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball_tileset.4bpp"); const u32 sSlidingPokeballTilemap[] = INCBIN_U32("graphics/battle_transitions/sliding_pokeball_tilemap.bin"); @@ -826,7 +835,7 @@ bool8 BT_Phase2HorizontalCorrugate_UpdateWave(struct Task *task) amplitude = task->tAmplitude >> 8; task->tTheta += 4224; task->tAmplitude += 384; - for (i = 0; i < 160; i++, theta += 4224) + for (i = 0; i < 160; ++i, theta += 4224) gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->bg123VOfs + Sin(theta / 256, amplitude); if (!gPaletteFade.active) DestroyTask(FindTaskIdByFunc(BT_Phase2HorizontalCorrugate)); @@ -950,6 +959,14 @@ bool8 BT_Phase2BigPokeball_UpdateWave2DecEvb(struct Task *task) return FALSE; } +#undef tEvb +#undef tEva +#undef tInterval + +#define tRadius data[1] +#define tDeltaRadius data[2] +#define tKeepVBCB data[3] + bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task) { sTransitionStructPtr->vblankDma = FALSE; @@ -966,12 +983,543 @@ bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task) if (task->tAmplitude <= 0) { ++task->tState; - task->tEvb = 160; - task->tEva = 256; - task->tInterval = 0; + task->tRadius = 160; + task->tDeltaRadius = 256; + task->tKeepVBCB = 0; + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + if (task->tDeltaRadius < 2048) + task->tDeltaRadius += 256; + if (task->tRadius != 0) + { + task->tRadius -= (task->tDeltaRadius >> 8); + if (task->tRadius < 0) + task->tRadius = 0; + } + BT_GenerateCircle(gScanlineEffectRegBuffers[0], 120, 80, task->tRadius); + if (task->tRadius == 0) + { + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2BigPokeball)); + } + if (task->tKeepVBCB == 0) + { + ++task->tKeepVBCB; + SetVBlankCallback(VBCB_BT_Phase2BigPokeball2); + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +void BT_VBStopDma0SyncSrcBufferSetLcdRegs(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + SetGpuReg(REG_OFFSET_BLDCNT, sTransitionStructPtr->bldCnt); + SetGpuReg(REG_OFFSET_BLDALPHA, sTransitionStructPtr->bldAlpha); +} + +void VBCB_BT_Phase2BigPokeball1(void) +{ + BT_VBStopDma0SyncSrcBufferSetLcdRegs(); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_BG0HOFS, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +void VBCB_BT_Phase2BigPokeball2(void) +{ + BT_VBStopDma0SyncSrcBufferSetLcdRegs(); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +#undef tRadius +#undef tDeltaRadius +#undef tKeepVBCB +#undef tTheta +#undef tAmplitude + +// TODO: Document this effect after knowing more about field effects. +void BT_Phase2SlidingPokeballs(u8 taskId) +{ + while (sBT_Phase2SlidingPokeballsFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase2SlidingPokeballs_LoadBgGfx(struct Task *task) +{ + u16 *tilemapAddr, *tilesetAddr; + + BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); + CpuSet(sSlidingPokeballTilemap, tilesetAddr, 0x20); + CpuFill32(0, tilemapAddr, 0x800); + LoadPalette(sSlidingPokeballBigPokeballPalette, 0xF0, 0x20); + ++task->tState; + return FALSE; +} + +bool8 BT_Phase2SlidingPokeballs_SetupFldeffArgs(struct Task *task) +{ + s16 i, rand; + s16 arr0[NELEMS(gUnknown_83FA400)]; + s16 arr1[NELEMS(gUnknown_83FA404)]; + + memcpy(arr0, gUnknown_83FA400, sizeof(gUnknown_83FA400)); + memcpy(arr1, gUnknown_83FA404, sizeof(gUnknown_83FA404)); + rand = Random() & 1; + for (i = 0; i <= 4; ++i, rand ^= 1) + { + gFieldEffectArguments[0] = arr0[rand]; // x + gFieldEffectArguments[1] = (i * 32) + 16; // y + gFieldEffectArguments[2] = rand; + gFieldEffectArguments[3] = arr1[i]; + FieldEffectStart(FLDEFF_POKEBALL); + } + ++task->tState; + return FALSE; +} + +bool8 BT_Phase2SlidingPokeballs_IsDone(struct Task *task) +{ + if (!FieldEffectActiveListContains(FLDEFF_POKEBALL)) + { + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2SlidingPokeballs)); + } + return FALSE; +} + +bool8 FldEff_Pokeball(void) +{ + u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_SlidingPokeball, gFieldEffectArguments[0], gFieldEffectArguments[1], 0); + + gSprites[spriteId].oam.priority = 0; + gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].data[0] = gFieldEffectArguments[2]; + gSprites[spriteId].data[1] = gFieldEffectArguments[3]; + gSprites[spriteId].data[2] = -1; + InitSpriteAffineAnim(&gSprites[spriteId]); + StartSpriteAffineAnim(&gSprites[spriteId], gFieldEffectArguments[2]); + return FALSE; +} + +#define SOME_VRAM_STORE(ptr, posY, posX, toStore) \ +{ \ + u32 index = (posY) * 32 + posX; \ + ptr[index] = toStore; \ +} + +void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite) +{ + s16 arr0[NELEMS(gUnknown_83FA40E)]; + + memcpy(arr0, gUnknown_83FA40E, sizeof(gUnknown_83FA40E)); + if (sprite->data[1]) + { + --sprite->data[1]; + } + else + { + if ((u16)sprite->pos1.x <= 240) + { + s16 posX = sprite->pos1.x >> 3; + s16 posY = sprite->pos1.y >> 3; + + if (posX != sprite->data[2]) + { + u32 var; + u16 *ptr; + + sprite->data[2] = posX; + var = (((GetGpuReg(REG_OFFSET_BG0CNT) >> 8) & 0x1F) << 11); + ptr = (u16 *)(VRAM + var); + SOME_VRAM_STORE(ptr, posY - 2, posX, 0xF001); + SOME_VRAM_STORE(ptr, posY - 1, posX, 0xF001); + SOME_VRAM_STORE(ptr, posY - 0, posX, 0xF001); + SOME_VRAM_STORE(ptr, posY + 1, posX, 0xF001); + } + } + sprite->pos1.x += arr0[sprite->data[0]]; + if (sprite->pos1.x < -15 || sprite->pos1.x > 255) + FieldEffectStop(sprite, FLDEFF_POKEBALL); + } +} + +#define trStartPtX data[0] +#define trStartPtY data[1] +#define trCurrentPtX data[2] +#define trCurrentPtY data[3] +#define trEndPtX data[4] +#define trEndPtY data[5] + +void BT_Phase2ClockwiseBlackFade(u8 taskId) +{ + while (sBT_Phase2ClockwiseBlackFadeFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task) +{ + u16 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + sTransitionStructPtr->winIn = 0; + sTransitionStructPtr->winOut = 0x3F; + sTransitionStructPtr->win0H = 0xF0F1; + sTransitionStructPtr->win0V = 0x00A0; + for (i = 0; i < 160; ++i) + { + gScanlineEffectRegBuffers[1][i] = 0xF3F4; + } + SetVBlankCallback(VBCB_BT_Phase2ClockwiseBlackFade); + sTransitionStructPtr->trEndPtX = 120; + ++task->tState; + return TRUE; +} + +bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->trEndPtX, -1, 1, 1); + do + { + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = (sTransitionStructPtr->trCurrentPtX + 1) | 0x7800; + } + while (!BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE)); + + sTransitionStructPtr->trEndPtX += 32; + if (sTransitionStructPtr->trEndPtX >= 240) + { + sTransitionStructPtr->trEndPtY = 0; + ++task->tState; + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task) +{ + s16 left, right; + vu8 finished = FALSE; + + sTransitionStructPtr->vblankDma = FALSE; + BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, 240, sTransitionStructPtr->trEndPtY, 1, 1); + while (TRUE) + { + left = 120; + right = sTransitionStructPtr->trCurrentPtX + 1; + if (sTransitionStructPtr->trEndPtY >= 80) + { + left = sTransitionStructPtr->trCurrentPtX; + right = 240; + } + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + if (finished) + break; + finished = BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE); + } + sTransitionStructPtr->trEndPtY += 16; + if (sTransitionStructPtr->trEndPtY >= 160) + { + sTransitionStructPtr->trEndPtX = 240; + ++task->tState; + } + else + { + while (sTransitionStructPtr->trCurrentPtY < sTransitionStructPtr->trEndPtY) + gScanlineEffectRegBuffers[0][++sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2ClockwiseBlackFade_Step3(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->trEndPtX, 160, 1, 1); + do + { + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = (sTransitionStructPtr->trCurrentPtX << 8) | 0xF0; + } + while (!BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE)); + sTransitionStructPtr->trEndPtX -= 32; + if (sTransitionStructPtr->trEndPtX <= 0) + { + sTransitionStructPtr->trEndPtY = 160; + ++task->tState; } ++sTransitionStructPtr->vblankDma; return FALSE; } +/* + * BUG: The following 2 functions are incorrect. The animation after + * the rotation angle reaches 1.5Ï€ will not be displayed. + * + * There're 2 problems which need to be solved in order to correct the logic. + * 1. With current setup, nothing is displayed inside WIN0 and everything + * is displayed outside WIN0. Thus, if the rotation angle is > 1.5Ï€, it + * won't be able to handle the situation. + * 2. The programmer sometimes swapped the place of left and right boundary + * of WIN0 (see variables left and right), which will sometimes cause right + * to be smaller than left. In this way, garbage data will be written to WIN0H. + */ +bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task) +{ + s16 right, left; + u16 win0H; + vu8 finished = FALSE; + + sTransitionStructPtr->vblankDma = FALSE; + BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, 0, sTransitionStructPtr->trEndPtY, 1, 1); + while (TRUE) + { + right = (gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY]) & 0xFF; + left = sTransitionStructPtr->trCurrentPtX; + if (sTransitionStructPtr->trEndPtY <= 80) + { + left = 120; + right = sTransitionStructPtr->trCurrentPtX; + } + win0H = right | (left << 8); + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = win0H; + if (finished) + break; + finished = BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE); + } + sTransitionStructPtr->trEndPtY -= 16; + if (sTransitionStructPtr->trEndPtY <= 0) + { + sTransitionStructPtr->trEndPtX = 0; + ++task->tState; + } + else + { + while (sTransitionStructPtr->trCurrentPtY > sTransitionStructPtr->trEndPtY) + gScanlineEffectRegBuffers[0][--sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task) +{ + s16 left, right; + + sTransitionStructPtr->vblankDma = FALSE; + BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->trEndPtX, 0, 1, 1); + do + { + left = 120; + right = sTransitionStructPtr->trCurrentPtX; + if (sTransitionStructPtr->trCurrentPtX >= 120) + { + left = 0; + right = 240; + } + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + } + while (!BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE)); + sTransitionStructPtr->trEndPtX += 32; + if (sTransitionStructPtr->trCurrentPtX > 120) + ++task->tState; + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2ClockwiseBlackFade_End(struct Task *task) +{ + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2ClockwiseBlackFade)); + return FALSE; +} + +void VBCB_BT_Phase2ClockwiseBlackFade(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + SetGpuReg(REG_OFFSET_WIN0H, gScanlineEffectRegBuffers[1][0]); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +#undef trStartPtX +#undef trStartPtY +#undef trCurrentPtX +#undef trCurrentPtY +#undef trEndPtX +#undef trEndPtY + +#define tTheta data[1] +#define tAmplitude data[2] +#define tDelayForFade data[3] +#define tStartFade data[4] + +void BT_Phase2FullScreenWave(u8 taskId) +{ + while (sBT_Phase2FullScreenWaveFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase2FullScreenWave_Init(struct Task *task) +{ + u8 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->bg123VOfs; + SetVBlankCallback(VBCB_BT_Phase2FullScreenWave); + SetHBlankCallback(HBCB_BT_Phase2FullScreenWave); + EnableInterrupts(INTR_FLAG_HBLANK); + ++task->tState; + return TRUE; +} + +bool8 BT_Phase2FullScreenWave_UpdateWave(struct Task *task) +{ + u8 i; + s16 amplitude; + u16 theta, frequency; + + sTransitionStructPtr->vblankDma = FALSE; + amplitude = task->tAmplitude >> 8; + theta = task->tTheta; + frequency = 384; + task->tTheta += 0x400; + if (task->tAmplitude <= 0x1FFF) + task->tAmplitude += 384; + for (i = 0; i < 160; ++i, theta += frequency) + { + s16 var = theta >> 8; + #ifndef NONMATCHING + asm(""); + #endif + gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->bg123VOfs + Sin(var, amplitude); + } + if (++task->tDelayForFade == 41) + { + ++task->tStartFade; + BeginNormalPaletteFade(0xFFFFFFFF, -8, 0, 0x10, RGB_BLACK); + } + if (task->tStartFade && !gPaletteFade.active) + DestroyTask(FindTaskIdByFunc(BT_Phase2FullScreenWave)); + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +void VBCB_BT_Phase2FullScreenWave(void) +{ + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); +} + +void HBCB_BT_Phase2FullScreenWave(void) +{ + u16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + REG_BG1VOFS = offset; + REG_BG2VOFS = offset; + REG_BG3VOFS = offset; +} + +#undef tTheta +#undef tAmplitude +#undef tDelayForFade +#undef tStartFade + +#define tOffset data[1] +#define tTheta data[2] + +void BT_Phase2BlackWaveToRight(u8 taskId) +{ + while (sBT_Phase2BlackWaveToRightFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task) +{ + u8 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winOut = 0; + sTransitionStructPtr->win0H = 240; + sTransitionStructPtr->win0V = 160; + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[1][i] = 242; + SetVBlankCallback(VBCB_BT_Phase2BlackWaveToRight); + ++task->tState; + return TRUE; +} + +bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task) +{ + u8 i, theta; + u16* toStore; + bool8 nextFunc; + + sTransitionStructPtr->vblankDma = FALSE; + toStore = gScanlineEffectRegBuffers[0]; + theta = task->tTheta; + task->tTheta += 16; + task->tOffset += 8; + for (i = 0, nextFunc = TRUE; i < 160; ++i, theta += 4, ++toStore) + { + s16 left = task->tOffset + Sin(theta, 40); + if (left < 0) + left = 0; + if (left > 240) + left = 240; + *toStore = (left << 8) | (0xF1); + if (left < 240) + nextFunc = FALSE; + } + if (nextFunc) + ++task->tState; + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2BlackWaveToRight_End(struct Task *task) +{ + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2BlackWaveToRight)); + return FALSE; +} + +void VBCB_BT_Phase2BlackWaveToRight(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +#undef tOffset +#undef tTheta + +void BT_Phase2AntiClockwiseSpiral(u8 taskId) +{ + while (sBT_Phase2AntiClockwiseSpiralFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + -- cgit v1.2.3 From a348095998751f50042cfa3892ed91b37b8e11a8 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 25 Jul 2019 14:15:41 +0800 Subject: matched all easy functions --- asm/battle_transition.s | 4559 -------------------- .../battle_transitions/grid_square_tilemap.bin | Bin 480 -> 0 bytes .../battle_transitions/grid_square_tileset.png | Bin 0 -> 121 bytes include/field_camera.h | 1 + include/field_effect.h | 1 + include/trainer_pokemon_sprites.h | 7 +- ld_script.txt | 1 - src/battle_transition.c | 2118 ++++++++- 8 files changed, 2055 insertions(+), 4632 deletions(-) delete mode 100644 asm/battle_transition.s delete mode 100644 graphics/battle_transitions/grid_square_tilemap.bin create mode 100644 graphics/battle_transitions/grid_square_tileset.png diff --git a/asm/battle_transition.s b/asm/battle_transition.s deleted file mode 100644 index 64b5686db..000000000 --- a/asm/battle_transition.s +++ /dev/null @@ -1,4559 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80D1F64 -sub_80D1F64: @ 80D1F64 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp] - lsls r1, 16 - lsrs r5, r1, 16 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x4] - movs r0, 0 - mov r10, r0 - movs r1, 0xA0 - lsls r1, 17 - ldr r4, _080D1FD8 @ =gScanlineEffectRegBuffers + 0x780 - ldr r3, _080D1FDC @ =0x000003bf - movs r2, 0x78 -_080D1F8E: - asrs r0, r1, 16 - lsls r1, r0, 1 - adds r1, r4 - strh r2, [r1] - adds r0, 0x1 - lsls r1, r0, 16 - asrs r0, r1, 16 - cmp r0, r3 - ble _080D1F8E - lsls r0, r5, 16 - movs r1, 0 - mov r9, r1 - str r0, [sp, 0xC] - cmp r0, 0 - bgt _080D1FAE - b _080D221A -_080D1FAE: - mov r3, r10 - lsrs r2, r3, 3 - ldr r4, [sp] - adds r0, r2, r4 - lsls r0, 16 - lsrs r3, r0, 16 - mov r0, r10 - adds r0, 0x1 - asrs r1, r0, 3 - str r0, [sp, 0x8] - cmp r2, r1 - beq _080D1FE0 - lsls r1, r3, 16 - movs r6, 0x80 - lsls r6, 9 - adds r0, r1, r6 - lsrs r0, 16 - mov r8, r0 - adds r0, r1, 0 - b _080D1FE6 - .align 2, 0 -_080D1FD8: .4byte gScanlineEffectRegBuffers + 0x780 -_080D1FDC: .4byte 0x000003bf -_080D1FE0: - lsls r0, r3, 16 - lsrs r1, r0, 16 - mov r8, r1 -_080D1FE6: - asrs r4, r0, 16 - mov r0, r10 - adds r1, r4, 0 - bl Sin - movs r5, 0x50 - subs r0, r5, r0 - lsls r0, 16 - lsrs r2, r0, 16 - mov r0, r10 - adds r1, r4, 0 - str r2, [sp, 0x10] - bl Cos - adds r0, 0x78 - lsls r0, 16 - lsrs r7, r0, 16 - ldr r6, [sp, 0x8] - mov r3, r8 - lsls r4, r3, 16 - asrs r4, 16 - adds r0, r6, 0 - adds r1, r4, 0 - bl Sin - subs r5, r0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r6, 0 - adds r1, r4, 0 - bl Cos - adds r0, 0x78 - lsls r0, 16 - lsrs r3, r0, 16 - ldr r2, [sp, 0x10] - lsls r0, r2, 16 - asrs r1, r0, 16 - cmp r1, 0 - bge _080D203E - lsls r0, r5, 16 - cmp r0, 0 - bge _080D203E - b _080D21F8 -_080D203E: - cmp r1, 0x9F - ble _080D204C - lsls r0, r5, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _080D204C - b _080D21F8 -_080D204C: - cmp r1, 0 - bge _080D2052 - movs r2, 0 -_080D2052: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _080D205C - movs r2, 0x9F -_080D205C: - lsls r0, r7, 16 - cmp r0, 0 - bge _080D2064 - movs r7, 0 -_080D2064: - lsls r0, r7, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080D206E - movs r7, 0xFF -_080D206E: - lsls r0, r5, 16 - cmp r0, 0 - bge _080D2076 - movs r5, 0 -_080D2076: - lsls r0, r5, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _080D2080 - movs r5, 0x9F -_080D2080: - lsls r0, r3, 16 - cmp r0, 0 - bge _080D2088 - movs r3, 0 -_080D2088: - lsls r0, r3, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080D2092 - movs r3, 0xFF -_080D2092: - lsls r0, r5, 16 - asrs r0, 16 - lsls r1, r2, 16 - asrs r2, r1, 16 - subs r0, r2 - lsls r0, 16 - lsrs r5, r0, 16 - mov r0, r10 - subs r0, 0x40 - lsls r0, 24 - adds r6, r1, 0 - cmp r0, 0 - blt _080D2158 - movs r4, 0xA0 - lsls r4, 1 - adds r0, r2, r4 - lsls r0, 1 - ldr r1, _080D20E8 @ =gScanlineEffectRegBuffers + 0x780 - adds r0, r1 - strh r7, [r0] - lsls r0, r5, 16 - adds r4, r0, 0 - cmp r4, 0 - bne _080D20C4 - b _080D21F8 -_080D20C4: - lsls r0, r3, 16 - asrs r0, 16 - lsls r1, r7, 16 - asrs r2, r1, 16 - subs r0, r2 - lsls r0, 16 - lsrs r3, r0, 16 - asrs r0, 16 - mov r8, r0 - movs r0, 0x1 - negs r0, r0 - cmp r8, r0 - bge _080D20EC - cmp r2, 0x1 - ble _080D20EC - subs r0, r2, 0x1 - b _080D20FC - .align 2, 0 -_080D20E8: .4byte gScanlineEffectRegBuffers + 0x780 -_080D20EC: - lsls r0, r3, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080D2100 - asrs r0, r1, 16 - cmp r0, 0xFE - bgt _080D2100 - adds r0, 0x1 -_080D20FC: - lsls r0, 16 - lsrs r7, r0, 16 -_080D2100: - adds r0, r4, 0 - asrs r1, r0, 16 - cmp r1, 0 - bge _080D212C - asrs r2, r6, 16 - ldr r3, _080D2128 @ =gScanlineEffectRegBuffers + 0x780 -_080D210C: - asrs r1, r0, 16 - adds r0, r2, r1 - movs r4, 0xA0 - lsls r4, 1 - adds r0, r4 - lsls r0, 1 - adds r0, r3 - strh r7, [r0] - adds r1, 0x1 - lsls r0, r1, 16 - cmp r0, 0 - blt _080D210C - b _080D21F8 - .align 2, 0 -_080D2128: .4byte gScanlineEffectRegBuffers + 0x780 -_080D212C: - cmp r1, 0 - ble _080D21F8 - asrs r2, r6, 16 - ldr r3, _080D2154 @ =gScanlineEffectRegBuffers + 0x780 -_080D2134: - lsls r1, r5, 16 - asrs r1, 16 - adds r0, r2, r1 - movs r6, 0xA0 - lsls r6, 1 - adds r0, r6 - lsls r0, 1 - adds r0, r3 - strh r7, [r0] - subs r1, 0x1 - lsls r1, 16 - lsrs r5, r1, 16 - cmp r1, 0 - bgt _080D2134 - b _080D21F8 - .align 2, 0 -_080D2154: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2158: - movs r1, 0xF0 - lsls r1, 1 - adds r0, r2, r1 - lsls r0, 1 - ldr r2, _080D2190 @ =gScanlineEffectRegBuffers + 0x780 - adds r0, r2 - strh r7, [r0] - lsls r0, r5, 16 - adds r4, r0, 0 - cmp r4, 0 - beq _080D21F8 - lsls r0, r3, 16 - asrs r0, 16 - lsls r1, r7, 16 - asrs r2, r1, 16 - subs r0, r2 - lsls r0, 16 - lsrs r3, r0, 16 - asrs r0, 16 - mov r8, r0 - movs r0, 0x1 - negs r0, r0 - cmp r8, r0 - bge _080D2194 - cmp r2, 0x1 - ble _080D2194 - subs r0, r2, 0x1 - b _080D21A4 - .align 2, 0 -_080D2190: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2194: - lsls r0, r3, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080D21A8 - asrs r0, r1, 16 - cmp r0, 0xFE - bgt _080D21A8 - adds r0, 0x1 -_080D21A4: - lsls r0, 16 - lsrs r7, r0, 16 -_080D21A8: - adds r0, r4, 0 - asrs r1, r0, 16 - cmp r1, 0 - bge _080D21D4 - asrs r2, r6, 16 - ldr r3, _080D21D0 @ =gScanlineEffectRegBuffers + 0x780 -_080D21B4: - asrs r1, r0, 16 - adds r0, r2, r1 - movs r4, 0xF0 - lsls r4, 1 - adds r0, r4 - lsls r0, 1 - adds r0, r3 - strh r7, [r0] - adds r1, 0x1 - lsls r0, r1, 16 - cmp r0, 0 - blt _080D21B4 - b _080D21F8 - .align 2, 0 -_080D21D0: .4byte gScanlineEffectRegBuffers + 0x780 -_080D21D4: - cmp r1, 0 - ble _080D21F8 - asrs r2, r6, 16 - ldr r3, _080D2270 @ =gScanlineEffectRegBuffers + 0x780 -_080D21DC: - lsls r1, r5, 16 - asrs r1, 16 - adds r0, r2, r1 - movs r6, 0xF0 - lsls r6, 1 - adds r0, r6 - lsls r0, 1 - adds r0, r3 - strh r7, [r0] - subs r1, 0x1 - lsls r1, 16 - lsrs r5, r1, 16 - cmp r1, 0 - bgt _080D21DC -_080D21F8: - mov r1, r9 - lsls r0, r1, 16 - movs r2, 0x80 - lsls r2, 9 - adds r0, r2 - ldr r3, [sp, 0x8] - lsls r1, r3, 24 - lsrs r1, 24 - mov r10, r1 - lsrs r4, r0, 16 - mov r9, r4 - asrs r0, 16 - ldr r6, [sp, 0xC] - asrs r1, r6, 12 - cmp r0, r1 - bge _080D221A - b _080D1FAE -_080D221A: - ldr r0, [sp, 0x4] - cmp r0, 0 - beq _080D222C - movs r0, 0xC0 - lsls r0, 10 - ldr r1, [sp, 0xC] - ands r0, r1 - cmp r0, 0 - bne _080D2274 -_080D222C: - movs r2, 0 - mov r9, r2 - ldr r4, _080D2270 @ =gScanlineEffectRegBuffers + 0x780 - movs r5, 0xA0 - lsls r5, 1 -_080D2236: - mov r3, r9 - lsls r1, r3, 16 - asrs r1, 16 - lsls r3, r1, 1 - ldr r6, [sp, 0x4] - adds r3, r6 - lsls r3, 1 - adds r3, r4 - adds r0, r1, r5 - lsls r0, 1 - adds r0, r4 - ldrh r2, [r0] - lsls r2, 8 - movs r6, 0xF0 - lsls r6, 1 - adds r0, r1, r6 - lsls r0, 1 - adds r0, r4 - ldrh r0, [r0] - orrs r2, r0 - strh r2, [r3] - adds r1, 0x1 - lsls r1, 16 - lsrs r0, r1, 16 - mov r9, r0 - asrs r1, 16 - cmp r1, 0x9F - ble _080D2236 - b _080D251C - .align 2, 0 -_080D2270: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2274: - ldr r1, [sp, 0xC] - asrs r4, r1, 16 - lsls r0, r4, 20 - asrs r0, 16 - lsls r5, r4, 1 - ldr r2, [sp] - lsls r1, r2, 16 - asrs r1, 16 - adds r1, r5 - lsls r1, 16 - asrs r1, 16 - bl Sin - lsls r0, 16 - lsrs r2, r0, 16 - cmp r4, 0 - bge _080D2298 - adds r4, 0x3 -_080D2298: - asrs r0, r4, 2 - cmp r0, 0x1 - beq _080D234C - cmp r0, 0x1 - bgt _080D22A8 - cmp r0, 0 - beq _080D22B6 - b _080D24DA -_080D22A8: - cmp r0, 0x2 - bne _080D22AE - b _080D23CC -_080D22AE: - cmp r0, 0x3 - bne _080D22B4 - b _080D2466 -_080D22B4: - b _080D24DA -_080D22B6: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x50 - ble _080D22C0 - movs r2, 0x50 -_080D22C0: - mov r9, r2 - lsls r1, r2, 16 - cmp r1, 0 - bgt _080D22CA - b _080D24DA -_080D22CA: - ldr r0, _080D2320 @ =gUnknown_83FA444 - adds r0, r5, r0 - movs r3, 0 - ldrsh r4, [r0, r3] - ldr r6, _080D2324 @ =gScanlineEffectRegBuffers + 0x780 -_080D22D4: - ldr r0, _080D2328 @ =sTransitionStructPtr - ldr r5, [r0] - asrs r2, r1, 16 - adds r0, r2, 0 - muls r0, r4 - asrs r0, 8 - adds r0, 0x78 - lsls r1, r0, 16 - lsrs r7, r1, 16 - strh r0, [r5, 0x28] - lsls r1, r7, 16 - lsrs r0, r1, 16 - cmp r0, 0xFF - bhi _080D2334 - movs r3, 0xC8 - lsls r3, 1 - adds r0, r3, 0 - subs r0, r2 - strh r0, [r5, 0x14] - adds r0, r3, 0 - subs r0, r2 - lsls r0, 1 - adds r3, r0, r6 - ldrh r0, [r3] - strh r0, [r5, 0x38] - movs r0, 0x8C - lsls r0, 2 - subs r0, r2 - lsls r0, 1 - adds r2, r0, r6 - ldrh r0, [r2] - asrs r1, 16 - cmp r0, r1 - bge _080D232C - movs r0, 0x78 - strh r0, [r2] - b _080D2334 - .align 2, 0 -_080D2320: .4byte gUnknown_83FA444 -_080D2324: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2328: .4byte sTransitionStructPtr -_080D232C: - ldrh r0, [r3] - cmp r0, r1 - bge _080D2334 - strh r7, [r3] -_080D2334: - mov r1, r9 - lsls r0, r1, 16 - ldr r2, _080D2348 @ =0xffff0000 - adds r0, r2 - lsrs r0, 16 - mov r9, r0 - lsls r1, r0, 16 - cmp r1, 0 - bgt _080D22D4 - b _080D24DA - .align 2, 0 -_080D2348: .4byte 0xffff0000 -_080D234C: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x50 - ble _080D2356 - movs r2, 0x50 -_080D2356: - mov r9, r2 - lsls r1, r2, 16 - cmp r1, 0 - bgt _080D2360 - b _080D24DA -_080D2360: - ldr r0, _080D23BC @ =gUnknown_83FA444 - adds r0, r5, r0 - movs r3, 0 - ldrsh r4, [r0, r3] - ldr r6, _080D23C0 @ =gScanlineEffectRegBuffers + 0x780 -_080D236A: - ldr r0, _080D23C4 @ =sTransitionStructPtr - ldr r3, [r0] - asrs r2, r1, 16 - adds r0, r2, 0 - muls r0, r4 - asrs r0, 8 - adds r0, 0x78 - lsls r1, r0, 16 - lsrs r7, r1, 16 - strh r0, [r3, 0x28] - lsls r5, r7, 16 - lsrs r0, r5, 16 - cmp r0, 0xFF - bhi _080D23A6 - movs r1, 0xC8 - lsls r1, 1 - adds r0, r1, 0 - subs r0, r2 - strh r0, [r3, 0x14] - adds r0, r1, 0 - subs r0, r2 - lsls r0, 1 - adds r2, r0, r6 - ldrh r0, [r2] - strh r0, [r3, 0x38] - ldrh r1, [r2] - asrs r0, r5, 16 - cmp r1, r0 - bge _080D23A6 - strh r7, [r2] -_080D23A6: - mov r2, r9 - lsls r0, r2, 16 - ldr r3, _080D23C8 @ =0xffff0000 - adds r0, r3 - lsrs r0, 16 - mov r9, r0 - lsls r1, r0, 16 - cmp r1, 0 - bgt _080D236A - b _080D24DA - .align 2, 0 -_080D23BC: .4byte gUnknown_83FA444 -_080D23C0: .4byte gScanlineEffectRegBuffers + 0x780 -_080D23C4: .4byte sTransitionStructPtr -_080D23C8: .4byte 0xffff0000 -_080D23CC: - lsls r0, r2, 16 - asrs r0, 16 - movs r1, 0x4F - negs r1, r1 - cmp r0, r1 - bge _080D23DA - ldr r2, _080D2438 @ =0x0000ffb1 -_080D23DA: - mov r9, r2 - lsls r1, r2, 16 - cmp r1, 0 - bgt _080D24DA - ldr r0, _080D243C @ =gUnknown_83FA444 - adds r0, r5, r0 - movs r6, 0 - ldrsh r4, [r0, r6] - ldr r6, _080D2440 @ =gScanlineEffectRegBuffers + 0x780 -_080D23EC: - ldr r0, _080D2444 @ =sTransitionStructPtr - ldr r5, [r0] - asrs r2, r1, 16 - adds r0, r2, 0 - muls r0, r4 - asrs r0, 8 - adds r0, 0x78 - lsls r1, r0, 16 - lsrs r7, r1, 16 - strh r0, [r5, 0x28] - lsls r1, r7, 16 - lsrs r0, r1, 16 - cmp r0, 0xFF - bhi _080D2450 - movs r3, 0x8C - lsls r3, 2 - adds r0, r3, 0 - subs r0, r2 - strh r0, [r5, 0x14] - adds r0, r3, 0 - subs r0, r2 - lsls r0, 1 - adds r3, r0, r6 - ldrh r0, [r3] - strh r0, [r5, 0x38] - movs r0, 0xC8 - lsls r0, 1 - subs r0, r2 - lsls r0, 1 - adds r2, r0, r6 - ldrh r0, [r2] - asrs r1, 16 - cmp r0, r1 - blt _080D2448 - movs r0, 0x78 - strh r0, [r2] - b _080D2450 - .align 2, 0 -_080D2438: .4byte 0x0000ffb1 -_080D243C: .4byte gUnknown_83FA444 -_080D2440: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2444: .4byte sTransitionStructPtr -_080D2448: - ldrh r0, [r3] - cmp r0, r1 - ble _080D2450 - strh r7, [r3] -_080D2450: - mov r1, r9 - lsls r0, r1, 16 - movs r2, 0x80 - lsls r2, 9 - adds r0, r2 - lsrs r0, 16 - mov r9, r0 - lsls r1, r0, 16 - cmp r1, 0 - ble _080D23EC - b _080D24DA -_080D2466: - lsls r0, r2, 16 - asrs r0, 16 - movs r1, 0x4F - negs r1, r1 - cmp r0, r1 - bge _080D2474 - ldr r2, _080D252C @ =0x0000ffb1 -_080D2474: - mov r9, r2 - lsls r1, r2, 16 - cmp r1, 0 - bgt _080D24DA - ldr r0, _080D2530 @ =gUnknown_83FA444 - adds r0, r5, r0 - movs r3, 0 - ldrsh r4, [r0, r3] - ldr r6, _080D2534 @ =sTransitionStructPtr - mov r8, r6 - ldr r6, _080D2538 @ =gScanlineEffectRegBuffers + 0x780 -_080D248A: - mov r0, r8 - ldr r3, [r0] - asrs r2, r1, 16 - adds r0, r2, 0 - muls r0, r4 - asrs r0, 8 - adds r0, 0x78 - lsls r1, r0, 16 - lsrs r7, r1, 16 - strh r0, [r3, 0x28] - lsls r5, r7, 16 - lsrs r0, r5, 16 - cmp r0, 0xFF - bhi _080D24C6 - movs r1, 0x8C - lsls r1, 2 - adds r0, r1, 0 - subs r0, r2 - strh r0, [r3, 0x14] - adds r0, r1, 0 - subs r0, r2 - lsls r0, 1 - adds r2, r0, r6 - ldrh r0, [r2] - strh r0, [r3, 0x38] - ldrh r1, [r2] - asrs r0, r5, 16 - cmp r1, r0 - ble _080D24C6 - strh r7, [r2] -_080D24C6: - mov r2, r9 - lsls r0, r2, 16 - movs r3, 0x80 - lsls r3, 9 - adds r0, r3 - lsrs r0, 16 - mov r9, r0 - lsls r1, r0, 16 - cmp r1, 0 - ble _080D248A -_080D24DA: - movs r4, 0 - mov r9, r4 - ldr r4, _080D2538 @ =gScanlineEffectRegBuffers + 0x780 - movs r5, 0xA0 - lsls r5, 1 -_080D24E4: - mov r6, r9 - lsls r1, r6, 16 - asrs r1, 16 - lsls r3, r1, 1 - ldr r0, [sp, 0x4] - adds r3, r0 - lsls r3, 1 - adds r3, r4 - adds r0, r1, r5 - lsls r0, 1 - adds r0, r4 - ldrh r2, [r0] - lsls r2, 8 - movs r6, 0xF0 - lsls r6, 1 - adds r0, r1, r6 - lsls r0, 1 - adds r0, r4 - ldrh r0, [r0] - orrs r2, r0 - strh r2, [r3] - adds r1, 0x1 - lsls r1, 16 - lsrs r0, r1, 16 - mov r9, r0 - asrs r1, 16 - cmp r1, 0x9F - ble _080D24E4 -_080D251C: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D252C: .4byte 0x0000ffb1 -_080D2530: .4byte gUnknown_83FA444 -_080D2534: .4byte sTransitionStructPtr -_080D2538: .4byte gScanlineEffectRegBuffers + 0x780 - thumb_func_end sub_80D1F64 - - thumb_func_start BT_Phase2AntiClockwiseSpiral_Init -BT_Phase2AntiClockwiseSpiral_Init: @ 80D253C - push {r4,r5,lr} - adds r5, r0, 0 - bl BT_InitCtrlBlk - bl ScanlineEffect_Clear - ldr r0, _080D25A0 @ =sTransitionStructPtr - ldr r1, [r0] - movs r4, 0 - strh r4, [r1, 0x2] - movs r0, 0x3F - strh r0, [r1, 0x4] - ldr r0, _080D25A4 @ =0x00007878 - strh r0, [r1, 0x6] - ldr r0, _080D25A8 @ =0x00003070 - strh r0, [r1, 0x8] - ldr r0, _080D25AC @ =0x00001090 - strh r0, [r1, 0xC] - strh r4, [r1, 0x20] - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl sub_80D1F64 - movs r0, 0 - movs r1, 0 - movs r2, 0x1 - bl sub_80D1F64 - ldr r1, _080D25B0 @ =0x040000d4 - ldr r0, _080D25B4 @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r1] - ldr r2, _080D25B8 @ =0xfffff880 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D25BC @ =0x80000140 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r0, _080D25C0 @ =VBCB_BT_Phase2AntiClockwiseBlackFade - bl SetVBlankCallback - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - strh r4, [r5, 0xA] - strh r4, [r5, 0xC] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D25A0: .4byte sTransitionStructPtr -_080D25A4: .4byte 0x00007878 -_080D25A8: .4byte 0x00003070 -_080D25AC: .4byte 0x00001090 -_080D25B0: .4byte 0x040000d4 -_080D25B4: .4byte gScanlineEffectRegBuffers + 0x780 -_080D25B8: .4byte 0xfffff880 -_080D25BC: .4byte 0x80000140 -_080D25C0: .4byte VBCB_BT_Phase2AntiClockwiseBlackFade - thumb_func_end BT_Phase2AntiClockwiseSpiral_Init - - thumb_func_start BT_Phase2AntiClockwiseSpiral_Update -BT_Phase2AntiClockwiseSpiral_Update: @ 80D25C4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - movs r1, 0xC - ldrsh r0, [r4, r1] - movs r2, 0xA - ldrsh r1, [r4, r2] - movs r2, 0x1 - bl sub_80D1F64 - ldr r5, _080D2694 @ =sTransitionStructPtr - ldr r1, [r5] - ldrb r0, [r1] - movs r2, 0x1 - mov r8, r2 - ldrb r2, [r1] - movs r7, 0 - mov r2, r8 - orrs r0, r2 - strb r0, [r1] - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x11 - bne _080D2686 - movs r1, 0xC - ldrsh r0, [r4, r1] - movs r1, 0x10 - movs r2, 0 - bl sub_80D1F64 - ldrh r1, [r4, 0xC] - movs r6, 0x30 - subs r0, r6, r1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r0, 0 - bge _080D2618 - movs r3, 0 -_080D2618: - adds r0, r1, 0 - adds r0, 0x70 - lsls r0, 16 - lsrs r2, r0, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080D2628 - movs r2, 0xFF -_080D2628: - ldr r0, [r5] - orrs r2, r3 - strh r2, [r0, 0x8] - ldrh r0, [r4, 0xC] - adds r0, 0x20 - strh r0, [r4, 0xC] - movs r0, 0 - strh r0, [r4, 0xA] - movs r2, 0xC - ldrsh r0, [r4, r2] - movs r1, 0 - movs r2, 0x1 - bl sub_80D1F64 - ldrh r1, [r4, 0xC] - subs r0, r6, r1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r0, 0 - bge _080D2652 - movs r3, 0 -_080D2652: - adds r0, r1, 0 - adds r0, 0x70 - lsls r0, 16 - lsrs r2, r0, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080D2662 - movs r2, 0xFF -_080D2662: - ldr r1, [r5] - orrs r2, r3 - strh r2, [r1, 0xC] - ldrb r0, [r1] - mov r2, r8 - orrs r0, r2 - ldrb r2, [r1] - orrs r0, r7 - strb r0, [r1] - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x9F - ble _080D2686 - ldr r1, [r5] - movs r0, 0x1 - strh r0, [r1, 0x20] - bl BT_BlendPalettesToBlack -_080D2686: - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D2694: .4byte sTransitionStructPtr - thumb_func_end BT_Phase2AntiClockwiseSpiral_Update - - thumb_func_start VBCB_BT_Phase2AntiClockwiseBlackFade -VBCB_BT_Phase2AntiClockwiseBlackFade: @ 80D2698 - push {r4-r6,lr} - ldr r5, _080D26D0 @ =0x040000b0 - ldrh r1, [r5, 0xA] - ldr r0, _080D26D4 @ =0x0000c5ff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r1, [r5, 0xA] - ldr r0, _080D26D8 @ =0x00007fff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r0, [r5, 0xA] - bl BT_VBSyncOamAndPltt - ldr r4, _080D26DC @ =sTransitionStructPtr - ldr r2, [r4] - movs r0, 0x20 - ldrsh r3, [r2, r0] - cmp r3, 0 - beq _080D26E4 - ldr r0, _080D26E0 @ =BT_Phase2AntiClockwiseSpiral - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - b _080D2746 - .align 2, 0 -_080D26D0: .4byte 0x040000b0 -_080D26D4: .4byte 0x0000c5ff -_080D26D8: .4byte 0x00007fff -_080D26DC: .4byte sTransitionStructPtr -_080D26E0: .4byte BT_Phase2AntiClockwiseSpiral -_080D26E4: - ldrb r0, [r2] - cmp r0, 0 - beq _080D2700 - ldr r1, _080D274C @ =0x040000d4 - ldr r0, _080D2750 @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r1] - ldr r6, _080D2754 @ =0xfffff880 - adds r0, r6 - str r0, [r1, 0x4] - ldr r0, _080D2758 @ =0x80000140 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldrb r0, [r2] - strb r3, [r2] -_080D2700: - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0xC] - movs r0, 0x46 - bl SetGpuReg - ldr r4, _080D275C @ =gScanlineEffectRegBuffers - ldrh r1, [r4] - movs r0, 0x40 - bl SetGpuReg - ldrh r1, [r4, 0x2] - movs r0, 0x42 - bl SetGpuReg - str r4, [r5] - ldr r0, _080D2760 @ =0x04000040 - str r0, [r5, 0x4] - ldr r0, _080D2764 @ =0xa6400001 - str r0, [r5, 0x8] - ldr r0, [r5, 0x8] -_080D2746: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D274C: .4byte 0x040000d4 -_080D2750: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2754: .4byte 0xfffff880 -_080D2758: .4byte 0x80000140 -_080D275C: .4byte gScanlineEffectRegBuffers -_080D2760: .4byte 0x04000040 -_080D2764: .4byte 0xa6400001 - thumb_func_end VBCB_BT_Phase2AntiClockwiseBlackFade - - thumb_func_start BT_Phase2StartLoreleiMugshot -BT_Phase2StartLoreleiMugshot: @ 80D2768 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D2784 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - strh r2, [r1, 0x26] - bl BT_Phase2Mugshot - pop {r0} - bx r0 - .align 2, 0 -_080D2784: .4byte gTasks - thumb_func_end BT_Phase2StartLoreleiMugshot - - thumb_func_start BT_Phase2StartBrunoMugshot -BT_Phase2StartBrunoMugshot: @ 80D2788 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D27A4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x1 - strh r2, [r1, 0x26] - bl BT_Phase2Mugshot - pop {r0} - bx r0 - .align 2, 0 -_080D27A4: .4byte gTasks - thumb_func_end BT_Phase2StartBrunoMugshot - - thumb_func_start BT_Phase2StartAgathaMugshot -BT_Phase2StartAgathaMugshot: @ 80D27A8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D27C4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x2 - strh r2, [r1, 0x26] - bl BT_Phase2Mugshot - pop {r0} - bx r0 - .align 2, 0 -_080D27C4: .4byte gTasks - thumb_func_end BT_Phase2StartAgathaMugshot - - thumb_func_start BT_Phase2StartLanceMugshot -BT_Phase2StartLanceMugshot: @ 80D27C8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D27E4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x3 - strh r2, [r1, 0x26] - bl BT_Phase2Mugshot - pop {r0} - bx r0 - .align 2, 0 -_080D27E4: .4byte gTasks - thumb_func_end BT_Phase2StartLanceMugshot - - thumb_func_start BT_Phase2StartBlueMugshot -BT_Phase2StartBlueMugshot: @ 80D27E8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D2804 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x4 - strh r2, [r1, 0x26] - bl BT_Phase2Mugshot - pop {r0} - bx r0 - .align 2, 0 -_080D2804: .4byte gTasks - thumb_func_end BT_Phase2StartBlueMugshot - - thumb_func_start BT_Phase2Mugshot -BT_Phase2Mugshot: @ 80D2808 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D2838 @ =sBT_Phase2MugshotFuncs - ldr r2, _080D283C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D281A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D281A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D2838: .4byte sBT_Phase2MugshotFuncs -_080D283C: .4byte gTasks - thumb_func_end BT_Phase2Mugshot - - thumb_func_start BT_Phase2Mugshot_Init -BT_Phase2Mugshot_Init: @ 80D2840 - push {r4,lr} - adds r4, r0, 0 - bl BT_InitCtrlBlk - bl ScanlineEffect_Clear - adds r0, r4, 0 - bl BT_Phase2Mugshots_CreateSprites - movs r0, 0 - strh r0, [r4, 0xA] - movs r0, 0x1 - strh r0, [r4, 0xC] - movs r0, 0xEF - strh r0, [r4, 0xE] - ldr r0, _080D2898 @ =sTransitionStructPtr - ldr r1, [r0] - movs r0, 0x3F - strh r0, [r1, 0x2] - movs r0, 0x3E - strh r0, [r1, 0x4] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r3, _080D289C @ =gScanlineEffectRegBuffers + 0x780 - ldr r2, _080D28A0 @ =0x0000f0f1 -_080D2874: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x9F - bls _080D2874 - ldr r0, _080D28A4 @ =VBCB_BT_Phase2Mugshot1_Slide - bl SetVBlankCallback - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D2898: .4byte sTransitionStructPtr -_080D289C: .4byte gScanlineEffectRegBuffers + 0x780 -_080D28A0: .4byte 0x0000f0f1 -_080D28A4: .4byte VBCB_BT_Phase2Mugshot1_Slide - thumb_func_end BT_Phase2Mugshot_Init - - thumb_func_start BT_Phase2Mugshot_LoadGfx -BT_Phase2Mugshot_LoadGfx: @ 80D28A8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - mov r8, r0 - ldr r6, _080D2950 @ =sVsBarTilemap - add r1, sp, 0x4 - mov r0, sp - bl BT_GetBg0TilemapAndTilesetBase - ldr r0, _080D2954 @ =sVsBarTileset - ldr r1, [sp, 0x4] - movs r2, 0xF0 - bl CpuSet - ldr r1, _080D2958 @ =sVsBarOpponentPalettes - mov r2, r8 - movs r3, 0x26 - ldrsh r0, [r2, r3] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _080D295C @ =sVsBarPlayerPalettes - ldr r0, _080D2960 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xFA - movs r2, 0xC - bl LoadPalette - movs r1, 0 - ldr r5, [sp] - movs r0, 0xF0 - lsls r0, 8 - adds r7, r0, 0 -_080D28FC: - movs r0, 0 - lsls r3, r1, 16 - asrs r4, r3, 11 -_080D2902: - lsls r2, r0, 16 - asrs r2, 16 - adds r1, r4, r2 - lsls r1, 1 - adds r1, r5 - ldrh r0, [r6] - orrs r0, r7 - strh r0, [r1] - adds r2, 0x1 - lsls r2, 16 - adds r6, 0x2 - lsrs r0, r2, 16 - asrs r2, 16 - cmp r2, 0x1F - ble _080D2902 - movs r1, 0x80 - lsls r1, 9 - adds r0, r3, r1 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _080D28FC - movs r0, 0x2 - bl EnableInterrupts - ldr r0, _080D2964 @ =HBCB_BT_Phase2Mugshot - bl SetHBlankCallback - mov r2, r8 - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - movs r0, 0 - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D2950: .4byte sVsBarTilemap -_080D2954: .4byte sVsBarTileset -_080D2958: .4byte sVsBarOpponentPalettes -_080D295C: .4byte sVsBarPlayerPalettes -_080D2960: .4byte gSaveBlock2Ptr -_080D2964: .4byte HBCB_BT_Phase2Mugshot - thumb_func_end BT_Phase2Mugshot_LoadGfx - - thumb_func_start BT_Phase2Mugshot_VsBarsSlideIn -BT_Phase2Mugshot_VsBarsSlideIn: @ 80D2968 - push {r4-r7,lr} - adds r4, r0, 0 - ldr r0, _080D2A4C @ =sTransitionStructPtr - ldr r1, [r0] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r7, _080D2A50 @ =gScanlineEffectRegBuffers - ldrh r0, [r4, 0xA] - ldrb r5, [r4, 0xA] - adds r0, 0x10 - strh r0, [r4, 0xA] - movs r6, 0 -_080D2982: - adds r0, r5, 0 - movs r1, 0x10 - bl Sin - ldrh r1, [r4, 0xC] - adds r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r0, 0 - bge _080D2998 - movs r2, 0x1 -_080D2998: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0xF0 - ble _080D29A2 - movs r2, 0xF0 -_080D29A2: - strh r2, [r7] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r7, 0x2 - adds r0, r5, 0 - adds r0, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r6, 0x4F - bls _080D2982 - cmp r6, 0x9F - bhi _080D29FA -_080D29BC: - adds r0, r5, 0 - movs r1, 0x10 - bl Sin - ldrh r1, [r4, 0xE] - subs r1, r0 - lsls r1, 16 - lsrs r2, r1, 16 - cmp r1, 0 - bge _080D29D2 - movs r2, 0 -_080D29D2: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0xEF - ble _080D29DC - movs r2, 0xEF -_080D29DC: - lsls r0, r2, 16 - asrs r0, 8 - movs r1, 0xF0 - orrs r0, r1 - strh r0, [r7] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r7, 0x2 - adds r0, r5, 0 - adds r0, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r6, 0x9F - bls _080D29BC -_080D29FA: - ldrh r1, [r4, 0xC] - adds r1, 0x8 - strh r1, [r4, 0xC] - ldrh r0, [r4, 0xE] - subs r0, 0x8 - strh r0, [r4, 0xE] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0xF0 - ble _080D2A12 - movs r0, 0xF0 - strh r0, [r4, 0xC] -_080D2A12: - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0 - bge _080D2A1E - movs r0, 0 - strh r0, [r4, 0xE] -_080D2A1E: - ldr r0, [r4, 0xC] - cmp r0, 0xF0 - bne _080D2A2A - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080D2A2A: - ldr r0, _080D2A4C @ =sTransitionStructPtr - ldr r1, [r0] - ldrh r0, [r1, 0x18] - subs r0, 0x8 - strh r0, [r1, 0x18] - ldrh r0, [r1, 0x1A] - adds r0, 0x8 - strh r0, [r1, 0x1A] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D2A4C: .4byte sTransitionStructPtr -_080D2A50: .4byte gScanlineEffectRegBuffers - thumb_func_end BT_Phase2Mugshot_VsBarsSlideIn - - thumb_func_start BT_Phase2Mugshot_StartSpriteSlide -BT_Phase2Mugshot_StartSpriteSlide: @ 80D2A54 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r2, _080D2AC8 @ =sTransitionStructPtr - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r1, _080D2ACC @ =gScanlineEffectRegBuffers - adds r5, r2, 0 - movs r2, 0xF0 -_080D2A68: - strh r2, [r1] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - adds r1, 0x2 - cmp r0, 0x9F - bls _080D2A68 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - movs r1, 0 - strh r0, [r4, 0x8] - strh r1, [r4, 0xA] - strh r1, [r4, 0xC] - strh r1, [r4, 0xE] - ldr r1, [r5] - ldrh r0, [r1, 0x18] - subs r0, 0x8 - strh r0, [r1, 0x18] - ldrh r0, [r1, 0x1A] - adds r0, 0x8 - strh r0, [r1, 0x1A] - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r1, 0 - bl BT_SetSpriteAsOpponentOrPlayer - movs r1, 0x24 - ldrsh r0, [r4, r1] - movs r1, 0x1 - bl BT_SetSpriteAsOpponentOrPlayer - movs r1, 0x22 - ldrsh r0, [r4, r1] - bl BT_StartSpriteSlide - movs r0, 0x61 - bl PlaySE - ldr r1, [r5] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D2AC8: .4byte sTransitionStructPtr -_080D2ACC: .4byte gScanlineEffectRegBuffers - thumb_func_end BT_Phase2Mugshot_StartSpriteSlide - - thumb_func_start BT_Phase2Mugshot_WaitForOpponentInPlace -BT_Phase2Mugshot_WaitForOpponentInPlace: @ 80D2AD0 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080D2B08 @ =sTransitionStructPtr - ldr r1, [r0] - ldrh r0, [r1, 0x18] - subs r0, 0x8 - strh r0, [r1, 0x18] - ldrh r0, [r1, 0x1A] - adds r0, 0x8 - strh r0, [r1, 0x1A] - movs r1, 0x22 - ldrsh r0, [r4, r1] - bl BT_IsSpriteSlideFinished - lsls r0, 16 - cmp r0, 0 - beq _080D2B00 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r1, 0x24 - ldrsh r0, [r4, r1] - bl BT_StartSpriteSlide -_080D2B00: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D2B08: .4byte sTransitionStructPtr - thumb_func_end BT_Phase2Mugshot_WaitForOpponentInPlace - - thumb_func_start BT_Phase2Mugshot_WaitForPlayerInPlace -BT_Phase2Mugshot_WaitForPlayerInPlace: @ 80D2B0C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - ldr r7, _080D2BAC @ =sTransitionStructPtr - ldr r1, [r7] - ldrh r0, [r1, 0x18] - subs r0, 0x8 - movs r2, 0 - mov r8, r2 - strh r0, [r1, 0x18] - ldrh r0, [r1, 0x1A] - adds r0, 0x8 - strh r0, [r1, 0x1A] - movs r1, 0x24 - ldrsh r0, [r6, r1] - bl BT_IsSpriteSlideFinished - lsls r0, 16 - cmp r0, 0 - beq _080D2BA0 - ldr r1, [r7] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - movs r0, 0 - bl SetVBlankCallback - ldr r1, _080D2BB0 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D2BB4 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D2BB8 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - ldr r4, _080D2BBC @ =gScanlineEffectRegBuffers - movs r5, 0xA0 - lsls r5, 1 - adds r0, r4, 0 - movs r1, 0 - adds r2, r5, 0 - bl memset - movs r2, 0xF0 - lsls r2, 3 - adds r4, r2 - adds r0, r4, 0 - movs r1, 0 - adds r2, r5, 0 - bl memset - movs r0, 0x40 - movs r1, 0xF0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - mov r0, r8 - strh r0, [r6, 0xE] - strh r0, [r6, 0x10] - ldr r1, [r7] - movs r0, 0xBF - strh r0, [r1, 0xE] - ldr r0, _080D2BC0 @ =VBCB_BT_Phase2Mugshot2_WhiteFade - bl SetVBlankCallback -_080D2BA0: - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D2BAC: .4byte sTransitionStructPtr -_080D2BB0: .4byte 0x040000b0 -_080D2BB4: .4byte 0x0000c5ff -_080D2BB8: .4byte 0x00007fff -_080D2BBC: .4byte gScanlineEffectRegBuffers -_080D2BC0: .4byte VBCB_BT_Phase2Mugshot2_WhiteFade - thumb_func_end BT_Phase2Mugshot_WaitForPlayerInPlace - - thumb_func_start BT_Phase2Mugshot_ExpandWhiteBand -BT_Phase2Mugshot_ExpandWhiteBand: @ 80D2BC4 - push {r4-r7,lr} - adds r4, r0, 0 - ldr r2, _080D2C84 @ =sTransitionStructPtr - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - movs r6, 0x1 - ldr r1, [r2] - ldrh r0, [r1, 0x18] - subs r0, 0x8 - strh r0, [r1, 0x18] - ldrh r0, [r1, 0x1A] - adds r0, 0x8 - strh r0, [r1, 0x1A] - ldrh r1, [r4, 0x10] - movs r3, 0x10 - ldrsh r0, [r4, r3] - mov r12, r2 - cmp r0, 0x4F - bgt _080D2BF2 - adds r0, r1, 0x2 - strh r0, [r4, 0x10] -_080D2BF2: - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r0, 0x50 - ble _080D2BFE - movs r0, 0x50 - strh r0, [r4, 0x10] -_080D2BFE: - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - movs r1, 0x1 - ands r0, r1 - ldrh r3, [r4, 0x10] - cmp r0, 0 - beq _080D2C60 - movs r2, 0 - lsls r0, r3, 16 - movs r6, 0 - cmp r0, 0 - blt _080D2C60 - movs r7, 0x50 - ldr r5, _080D2C88 @ =gScanlineEffectRegBuffers -_080D2C1C: - lsls r0, r2, 16 - asrs r3, r0, 16 - subs r1, r7, r3 - adds r0, r3, 0 - adds r0, 0x50 - lsls r0, 16 - lsrs r2, r0, 16 - lsls r1, 16 - asrs r1, 15 - adds r1, r5 - ldrh r0, [r1] - cmp r0, 0xF - bhi _080D2C3C - movs r6, 0x1 - adds r0, 0x1 - strh r0, [r1] -_080D2C3C: - lsls r0, r2, 16 - asrs r0, 15 - adds r1, r0, r5 - ldrh r0, [r1] - cmp r0, 0xF - bhi _080D2C4E - movs r6, 0x1 - adds r0, 0x1 - strh r0, [r1] -_080D2C4E: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - asrs r0, 16 - movs r3, 0x10 - ldrsh r1, [r4, r3] - ldrh r3, [r4, 0x10] - cmp r0, r1 - ble _080D2C1C -_080D2C60: - cmp r3, 0x50 - bne _080D2C6E - cmp r6, 0 - bne _080D2C6E - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080D2C6E: - mov r1, r12 - ldr r0, [r1] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D2C84: .4byte sTransitionStructPtr -_080D2C88: .4byte gScanlineEffectRegBuffers - thumb_func_end BT_Phase2Mugshot_ExpandWhiteBand - - thumb_func_start BT_Phase2Mugshot_StartBlackFade -BT_Phase2Mugshot_StartBlackFade: @ 80D2C8C - push {r4-r6,lr} - adds r4, r0, 0 - ldr r5, _080D2CBC @ =sTransitionStructPtr - ldr r0, [r5] - ldrb r1, [r0] - movs r6, 0 - strb r6, [r0] - movs r0, 0x1 - negs r0, r0 - ldr r2, _080D2CC0 @ =0x00007fff - movs r1, 0x10 - bl BlendPalettes - ldr r1, [r5] - movs r0, 0xFF - strh r0, [r1, 0xE] - strh r6, [r4, 0xE] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D2CBC: .4byte sTransitionStructPtr -_080D2CC0: .4byte 0x00007fff - thumb_func_end BT_Phase2Mugshot_StartBlackFade - - thumb_func_start BT_Phase2Mugshot_WaitForBlackFade -BT_Phase2Mugshot_WaitForBlackFade: @ 80D2CC4 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080D2D08 @ =sTransitionStructPtr - ldr r1, [r5] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - ldr r0, _080D2D0C @ =gScanlineEffectRegBuffers - movs r2, 0xE - ldrsh r1, [r4, r2] - movs r2, 0xA0 - lsls r2, 1 - bl memset - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0xF - ble _080D2CF4 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080D2CF4: - ldr r0, [r5] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D2D08: .4byte sTransitionStructPtr -_080D2D0C: .4byte gScanlineEffectRegBuffers - thumb_func_end BT_Phase2Mugshot_WaitForBlackFade - - thumb_func_start BT_Phase2Mugshot_End -BT_Phase2Mugshot_End: @ 80D2D10 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080D2D44 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D2D48 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D2D4C @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl BT_BlendPalettesToBlack - ldr r0, [r4] - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D2D44: .4byte 0x040000b0 -_080D2D48: .4byte 0x0000c5ff -_080D2D4C: .4byte 0x00007fff - thumb_func_end BT_Phase2Mugshot_End - - thumb_func_start VBCB_BT_Phase2Mugshot1_Slide -VBCB_BT_Phase2Mugshot1_Slide: @ 80D2D50 - push {r4,r5,lr} - ldr r4, _080D2DC4 @ =0x040000b0 - ldrh r1, [r4, 0xA] - ldr r0, _080D2DC8 @ =0x0000c5ff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xA] - ldr r0, _080D2DCC @ =0x00007fff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xA] - bl BT_VBSyncOamAndPltt - ldr r5, _080D2DD0 @ =sTransitionStructPtr - ldr r0, [r5] - ldrb r0, [r0] - cmp r0, 0 - beq _080D2D88 - ldr r1, _080D2DD4 @ =0x040000d4 - ldr r0, _080D2DD8 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D2DDC @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D2D88: - ldr r0, [r5] - ldrh r1, [r0, 0x1C] - movs r0, 0x12 - bl SetGpuReg - ldr r0, [r5] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r5] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r5] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r0, _080D2DE0 @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r4] - ldr r0, _080D2DE4 @ =0x04000040 - str r0, [r4, 0x4] - ldr r0, _080D2DE8 @ =0xa2400001 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D2DC4: .4byte 0x040000b0 -_080D2DC8: .4byte 0x0000c5ff -_080D2DCC: .4byte 0x00007fff -_080D2DD0: .4byte sTransitionStructPtr -_080D2DD4: .4byte 0x040000d4 -_080D2DD8: .4byte gScanlineEffectRegBuffers -_080D2DDC: .4byte 0x800000a0 -_080D2DE0: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2DE4: .4byte 0x04000040 -_080D2DE8: .4byte 0xa2400001 - thumb_func_end VBCB_BT_Phase2Mugshot1_Slide - - thumb_func_start VBCB_BT_Phase2Mugshot2_WhiteFade -VBCB_BT_Phase2Mugshot2_WhiteFade: @ 80D2DEC - push {r4,lr} - ldr r4, _080D2E44 @ =0x040000b0 - ldrh r1, [r4, 0xA] - ldr r0, _080D2E48 @ =0x0000c5ff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xA] - ldr r0, _080D2E4C @ =0x00007fff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xA] - bl BT_VBSyncOamAndPltt - ldr r2, _080D2E50 @ =sTransitionStructPtr - ldr r0, [r2] - ldrb r0, [r0] - cmp r0, 0 - beq _080D2E24 - ldr r1, _080D2E54 @ =0x040000d4 - ldr r0, _080D2E58 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r3, 0xF0 - lsls r3, 3 - adds r0, r3 - str r0, [r1, 0x4] - ldr r0, _080D2E5C @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D2E24: - ldr r0, [r2] - ldrh r1, [r0, 0xE] - movs r0, 0x50 - bl SetGpuReg - ldr r0, _080D2E60 @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r4] - ldr r0, _080D2E64 @ =0x04000054 - str r0, [r4, 0x4] - ldr r0, _080D2E68 @ =0xa2400001 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D2E44: .4byte 0x040000b0 -_080D2E48: .4byte 0x0000c5ff -_080D2E4C: .4byte 0x00007fff -_080D2E50: .4byte sTransitionStructPtr -_080D2E54: .4byte 0x040000d4 -_080D2E58: .4byte gScanlineEffectRegBuffers -_080D2E5C: .4byte 0x800000a0 -_080D2E60: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2E64: .4byte 0x04000054 -_080D2E68: .4byte 0xa2400001 - thumb_func_end VBCB_BT_Phase2Mugshot2_WhiteFade - - thumb_func_start HBCB_BT_Phase2Mugshot -HBCB_BT_Phase2Mugshot: @ 80D2E6C - push {lr} - ldr r0, _080D2E80 @ =0x04000006 - ldrh r0, [r0] - cmp r0, 0x4F - bhi _080D2E8C - ldr r1, _080D2E84 @ =0x04000010 - ldr r0, _080D2E88 @ =sTransitionStructPtr - ldr r0, [r0] - ldrh r0, [r0, 0x18] - b _080D2E94 - .align 2, 0 -_080D2E80: .4byte 0x04000006 -_080D2E84: .4byte 0x04000010 -_080D2E88: .4byte sTransitionStructPtr -_080D2E8C: - ldr r1, _080D2E9C @ =0x04000010 - ldr r0, _080D2EA0 @ =sTransitionStructPtr - ldr r0, [r0] - ldrh r0, [r0, 0x1A] -_080D2E94: - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080D2E9C: .4byte 0x04000010 -_080D2EA0: .4byte sTransitionStructPtr - thumb_func_end HBCB_BT_Phase2Mugshot - - thumb_func_start BT_Phase2Mugshots_CreateSprites -BT_Phase2Mugshots_CreateSprites: @ 80D2EA4 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x4 - adds r4, r0, 0 - ldr r6, _080D2FF8 @ =gReservedSpritePaletteCount - movs r0, 0xA - strb r0, [r6] - ldr r0, _080D2FFC @ =sMugshotsTrainerPicIDsTable - movs r2, 0x26 - ldrsh r1, [r4, r2] - mov r9, r1 - add r0, r9 - ldrb r0, [r0] - ldr r2, _080D3000 @ =sMugshotsOpponentCoords - lsls r1, 2 - mov r9, r1 - adds r1, r2 - ldrh r1, [r1] - subs r1, 0x20 - lsls r1, 16 - asrs r1, 16 - adds r2, 0x2 - add r2, r9 - ldrh r2, [r2] - adds r2, 0x2A - lsls r2, 16 - asrs r2, 16 - ldr r5, _080D3004 @ =gDecompressionBuffer - str r5, [sp] - movs r3, 0 - bl CreateTrainerSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - ldr r0, _080D3008 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - movs r1, 0x1 - bl PlayerGenderToFrontTrainerPicId_Debug - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x88 - lsls r1, 1 - str r5, [sp] - movs r2, 0x6A - movs r3, 0 - bl CreateTrainerSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x24] - movs r0, 0xC - strb r0, [r6] - movs r3, 0x22 - ldrsh r0, [r4, r3] - lsls r5, r0, 4 - adds r5, r0 - lsls r5, 2 - ldr r1, _080D300C @ =gSprites - adds r5, r1 - movs r2, 0x24 - ldrsh r0, [r4, r2] - lsls r6, r0, 4 - adds r6, r0 - lsls r6, 2 - adds r6, r1 - ldr r0, _080D3010 @ =SpriteCB_BT_Phase2Mugshots - str r0, [r5, 0x1C] - str r0, [r6, 0x1C] - ldrb r0, [r5, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r5, 0x1] - ldrb r0, [r6, 0x1] - orrs r0, r1 - strb r0, [r6, 0x1] - bl AllocOamMatrix - lsls r0, 24 - lsrs r0, 24 - movs r3, 0x1F - mov r8, r3 - mov r4, r8 - ands r0, r4 - lsls r0, 1 - ldrb r2, [r5, 0x3] - movs r4, 0x3F - negs r4, r4 - adds r1, r4, 0 - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x3] - bl AllocOamMatrix - lsls r0, 24 - lsrs r0, 24 - mov r1, r8 - ands r0, r1 - lsls r0, 1 - ldrb r1, [r6, 0x3] - ands r4, r1 - orrs r4, r0 - strb r4, [r6, 0x3] - ldrb r2, [r5, 0x1] - movs r1, 0x3F - adds r0, r1, 0 - ands r0, r2 - movs r2, 0x40 - orrs r0, r2 - strb r0, [r5, 0x1] - ldrb r0, [r6, 0x1] - ands r1, r0 - orrs r1, r2 - strb r1, [r6, 0x1] - ldrb r0, [r5, 0x3] - movs r1, 0xC0 - orrs r0, r1 - strb r0, [r5, 0x3] - ldrb r0, [r6, 0x3] - orrs r0, r1 - strb r0, [r6, 0x3] - adds r0, r5, 0 - movs r1, 0x1 - movs r2, 0x3 - movs r3, 0x3 - bl CalcCenterToCornerVec - adds r0, r6, 0 - movs r1, 0x1 - movs r2, 0x3 - movs r3, 0x3 - bl CalcCenterToCornerVec - ldrb r0, [r5, 0x3] - lsls r0, 26 - lsrs r0, 27 - ldr r2, _080D3014 @ =sMugshotsOpponentRotationScales - mov r3, r9 - adds r1, r3, r2 - movs r4, 0 - ldrsh r1, [r1, r4] - adds r2, 0x2 - add r9, r2 - mov r3, r9 - movs r4, 0 - ldrsh r2, [r3, r4] - movs r3, 0 - bl SetOamMatrixRotationScaling - ldrb r0, [r6, 0x3] - lsls r0, 26 - lsrs r0, 27 - ldr r1, _080D3018 @ =0xfffffe00 - movs r2, 0x80 - lsls r2, 2 - movs r3, 0 - bl SetOamMatrixRotationScaling - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D2FF8: .4byte gReservedSpritePaletteCount -_080D2FFC: .4byte sMugshotsTrainerPicIDsTable -_080D3000: .4byte sMugshotsOpponentCoords -_080D3004: .4byte gDecompressionBuffer -_080D3008: .4byte gSaveBlock2Ptr -_080D300C: .4byte gSprites -_080D3010: .4byte SpriteCB_BT_Phase2Mugshots -_080D3014: .4byte sMugshotsOpponentRotationScales -_080D3018: .4byte 0xfffffe00 - thumb_func_end BT_Phase2Mugshots_CreateSprites - - thumb_func_start SpriteCB_BT_Phase2Mugshots -SpriteCB_BT_Phase2Mugshots: @ 80D301C - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080D3040 @ =sBT_Phase2MugshotSpriteFuncs -_080D3022: - movs r1, 0x2E - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D3022 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3040: .4byte sBT_Phase2MugshotSpriteFuncs - thumb_func_end SpriteCB_BT_Phase2Mugshots - - thumb_func_start BT_Phase2MugshotsSpriteFuncs_Wait -BT_Phase2MugshotsSpriteFuncs_Wait: @ 80D3044 - movs r0, 0 - bx lr - thumb_func_end BT_Phase2MugshotsSpriteFuncs_Wait - - thumb_func_start BT_Phase2MugshotsSpriteFuncs_InitParams -BT_Phase2MugshotsSpriteFuncs_InitParams: @ 80D3048 - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - ldr r1, _080D308C @ =sMugShotSlideVelocity - mov r0, sp - movs r2, 0x4 - bl memcpy - add r4, sp, 0x4 - ldr r1, _080D3090 @ =sMugShotSlideDeceleration - adds r0, r4, 0 - movs r2, 0x4 - bl memcpy - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - movs r1, 0x3C - ldrsh r0, [r5, r1] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - strh r0, [r5, 0x30] - movs r1, 0x3C - ldrsh r0, [r5, r1] - lsls r0, 1 - adds r4, r0 - ldrh r0, [r4] - strh r0, [r5, 0x32] - movs r0, 0x1 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D308C: .4byte sMugShotSlideVelocity -_080D3090: .4byte sMugShotSlideDeceleration - thumb_func_end BT_Phase2MugshotsSpriteFuncs_InitParams - - thumb_func_start BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn -BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn: @ 80D3094 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x30] - ldrh r3, [r1, 0x20] - adds r2, r0, r3 - strh r2, [r1, 0x20] - movs r3, 0x3C - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080D30B2 - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x84 - bgt _080D30C0 - b _080D30BA -_080D30B2: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x67 - ble _080D30C0 -_080D30BA: - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] -_080D30C0: - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn - - thumb_func_start BT_Phase2MugshotsSpriteFuncs_DecelerateSprite -BT_Phase2MugshotsSpriteFuncs_DecelerateSprite: @ 80D30C8 - push {lr} - adds r2, r0, 0 - ldrh r3, [r2, 0x32] - ldrh r0, [r2, 0x30] - adds r1, r3, r0 - strh r1, [r2, 0x30] - ldrh r0, [r2, 0x20] - adds r0, r1 - strh r0, [r2, 0x20] - lsls r1, 16 - cmp r1, 0 - bne _080D30EE - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - negs r0, r3 - strh r0, [r2, 0x32] - movs r0, 0x1 - strh r0, [r2, 0x3A] -_080D30EE: - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end BT_Phase2MugshotsSpriteFuncs_DecelerateSprite - - thumb_func_start BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2 -BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2: @ 80D30F4 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x32] - ldrh r1, [r2, 0x30] - adds r0, r1 - strh r0, [r2, 0x30] - ldrh r1, [r2, 0x20] - adds r1, r0 - strh r1, [r2, 0x20] - adds r1, 0x1F - lsls r1, 16 - movs r0, 0x97 - lsls r0, 17 - cmp r1, r0 - bls _080D3118 - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] -_080D3118: - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2 - - thumb_func_start BT_SetSpriteAsOpponentOrPlayer -BT_SetSpriteAsOpponentOrPlayer: @ 80D3120 - ldr r3, _080D3134 @ =gSprites - lsls r0, 16 - asrs r0, 16 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - strh r1, [r2, 0x3C] - bx lr - .align 2, 0 -_080D3134: .4byte gSprites - thumb_func_end BT_SetSpriteAsOpponentOrPlayer - - thumb_func_start BT_StartSpriteSlide -BT_StartSpriteSlide: @ 80D3138 - ldr r2, _080D3150 @ =gSprites - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] - bx lr - .align 2, 0 -_080D3150: .4byte gSprites - thumb_func_end BT_StartSpriteSlide - - thumb_func_start BT_IsSpriteSlideFinished -BT_IsSpriteSlideFinished: @ 80D3154 - ldr r2, _080D3168 @ =gSprites - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r2, 0x3A - ldrsh r0, [r1, r2] - bx lr - .align 2, 0 -_080D3168: .4byte gSprites - thumb_func_end BT_IsSpriteSlideFinished - - thumb_func_start BT_Phase2SlicedScreen -BT_Phase2SlicedScreen: @ 80D316C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D319C @ =sBT_Phase2SlicedScreenFuncs - ldr r2, _080D31A0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D317E: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D317E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D319C: .4byte sBT_Phase2SlicedScreenFuncs -_080D31A0: .4byte gTasks - thumb_func_end BT_Phase2SlicedScreen - - thumb_func_start BT_Phase2SlicedScreen_Init -BT_Phase2SlicedScreen_Init: @ 80D31A4 - push {r4-r6,lr} - adds r5, r0, 0 - bl BT_InitCtrlBlk - bl ScanlineEffect_Clear - movs r3, 0 - movs r0, 0x80 - lsls r0, 1 - strh r0, [r5, 0xC] - movs r0, 0x1 - strh r0, [r5, 0xE] - ldr r2, _080D3210 @ =sTransitionStructPtr - ldr r1, [r2] - movs r0, 0x3F - strh r0, [r1, 0x2] - strh r3, [r1, 0x4] - movs r0, 0xA0 - strh r0, [r1, 0x8] - ldr r4, _080D3214 @ =gScanlineEffectRegBuffers + 0x780 - adds r6, r2, 0 - movs r2, 0xF0 -_080D31D0: - lsls r1, r3, 1 - adds r1, r4 - ldr r0, [r6] - ldrh r0, [r0, 0x14] - strh r0, [r1] - adds r0, r3, 0 - adds r0, 0xA0 - lsls r0, 1 - adds r0, r4 - strh r2, [r0] - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x9F - bls _080D31D0 - movs r0, 0x2 - bl EnableInterrupts - ldr r0, _080D3218 @ =VBCB_BT_Phase2SlicedScreen - bl SetVBlankCallback - ldr r0, _080D321C @ =HBCB_BT_Phase2SlicedScreen - bl SetHBlankCallback - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D3210: .4byte sTransitionStructPtr -_080D3214: .4byte gScanlineEffectRegBuffers + 0x780 -_080D3218: .4byte VBCB_BT_Phase2SlicedScreen -_080D321C: .4byte HBCB_BT_Phase2SlicedScreen - thumb_func_end BT_Phase2SlicedScreen_Init - - thumb_func_start BT_Phase2SlicedScreen_UpdateOffsets -BT_Phase2SlicedScreen_UpdateOffsets: @ 80D3220 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r3, r0, 0 - ldr r2, _080D329C @ =sTransitionStructPtr - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r0, [r3, 0xC] - lsls r0, 16 - asrs r0, 24 - ldrh r1, [r3, 0xA] - adds r0, r1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - mov r8, r2 - cmp r0, 0xF0 - ble _080D324C - movs r0, 0xF0 - strh r0, [r3, 0xA] -_080D324C: - ldrh r4, [r3, 0xC] - movs r0, 0xC - ldrsh r1, [r3, r0] - ldr r0, _080D32A0 @ =0x00000fff - ldrh r2, [r3, 0xE] - cmp r1, r0 - bgt _080D325E - adds r0, r4, r2 - strh r0, [r3, 0xC] -_080D325E: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x7F - bgt _080D326A - lsls r0, r2, 1 - strh r0, [r3, 0xE] -_080D326A: - movs r5, 0 - ldr r7, _080D32A4 @ =gScanlineEffectRegBuffers - movs r1, 0xA0 - lsls r1, 1 - adds r1, r7 - mov r12, r1 - mov r6, r8 -_080D3278: - lsls r0, r5, 1 - adds r2, r0, r7 - mov r1, r12 - adds r4, r0, r1 - movs r0, 0x1 - ands r0, r5 - cmp r0, 0 - beq _080D32A8 - ldr r1, [r6] - ldrh r0, [r3, 0xA] - ldrh r1, [r1, 0x14] - adds r0, r1 - strh r0, [r2] - ldrh r1, [r3, 0xA] - movs r0, 0xF0 - subs r0, r1 - b _080D32BA - .align 2, 0 -_080D329C: .4byte sTransitionStructPtr -_080D32A0: .4byte 0x00000fff -_080D32A4: .4byte gScanlineEffectRegBuffers -_080D32A8: - ldr r0, [r6] - ldrh r0, [r0, 0x14] - ldrh r1, [r3, 0xA] - subs r0, r1 - strh r0, [r2] - ldrh r0, [r3, 0xA] - lsls r0, 8 - movs r1, 0xF1 - orrs r0, r1 -_080D32BA: - strh r0, [r4] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x9F - bls _080D3278 - movs r1, 0xA - ldrsh r0, [r3, r1] - cmp r0, 0xEF - ble _080D32D4 - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_080D32D4: - mov r1, r8 - ldr r0, [r1] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end BT_Phase2SlicedScreen_UpdateOffsets - - thumb_func_start BT_Phase2SlicedScreen_End -BT_Phase2SlicedScreen_End: @ 80D32EC - push {lr} - ldr r1, _080D331C @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D3320 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D3324 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl BT_BlendPalettesToBlack - ldr r0, _080D3328 @ =BT_Phase2SlicedScreen - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D331C: .4byte 0x040000b0 -_080D3320: .4byte 0x0000c5ff -_080D3324: .4byte 0x00007fff -_080D3328: .4byte BT_Phase2SlicedScreen - thumb_func_end BT_Phase2SlicedScreen_End - - thumb_func_start VBCB_BT_Phase2SlicedScreen -VBCB_BT_Phase2SlicedScreen: @ 80D332C - push {r4,r5,lr} - ldr r5, _080D3398 @ =0x040000b0 - ldrh r1, [r5, 0xA] - ldr r0, _080D339C @ =0x0000c5ff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r1, [r5, 0xA] - ldr r0, _080D33A0 @ =0x00007fff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r0, [r5, 0xA] - bl BT_VBSyncOamAndPltt - ldr r4, _080D33A4 @ =sTransitionStructPtr - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r0, [r4] - ldrb r0, [r0] - cmp r0, 0 - beq _080D3382 - ldr r1, _080D33A8 @ =0x040000d4 - ldr r0, _080D33AC @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D33B0 @ =0x80000140 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D3382: - ldr r0, _080D33B4 @ =gScanlineEffectRegBuffers + 0x8C0 - str r0, [r5] - ldr r0, _080D33B8 @ =0x04000040 - str r0, [r5, 0x4] - ldr r0, _080D33BC @ =0xa2400001 - str r0, [r5, 0x8] - ldr r0, [r5, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3398: .4byte 0x040000b0 -_080D339C: .4byte 0x0000c5ff -_080D33A0: .4byte 0x00007fff -_080D33A4: .4byte sTransitionStructPtr -_080D33A8: .4byte 0x040000d4 -_080D33AC: .4byte gScanlineEffectRegBuffers -_080D33B0: .4byte 0x80000140 -_080D33B4: .4byte gScanlineEffectRegBuffers + 0x8C0 -_080D33B8: .4byte 0x04000040 -_080D33BC: .4byte 0xa2400001 - thumb_func_end VBCB_BT_Phase2SlicedScreen - - thumb_func_start HBCB_BT_Phase2SlicedScreen -HBCB_BT_Phase2SlicedScreen: @ 80D33C0 - ldr r1, _080D33E0 @ =gScanlineEffectRegBuffers - ldr r0, _080D33E4 @ =0x04000006 - ldrh r0, [r0] - lsls r0, 1 - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _080D33E8 @ =0x04000014 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - bx lr - .align 2, 0 -_080D33E0: .4byte gScanlineEffectRegBuffers -_080D33E4: .4byte 0x04000006 -_080D33E8: .4byte 0x04000014 - thumb_func_end HBCB_BT_Phase2SlicedScreen - - thumb_func_start BT_Phase2WhiteFadeInStripes -BT_Phase2WhiteFadeInStripes: @ 80D33EC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D341C @ =sBT_Phase2WhiteFadeInStripesFuncs - ldr r2, _080D3420 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D33FE: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D33FE - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D341C: .4byte sBT_Phase2WhiteFadeInStripesFuncs -_080D3420: .4byte gTasks - thumb_func_end BT_Phase2WhiteFadeInStripes - - thumb_func_start BT_Phase2WhiteFadeInStripes_Init -BT_Phase2WhiteFadeInStripes_Init: @ 80D3424 - push {r4,r5,lr} - adds r5, r0, 0 - bl BT_InitCtrlBlk - bl ScanlineEffect_Clear - ldr r0, _080D348C @ =sTransitionStructPtr - ldr r1, [r0] - movs r2, 0 - movs r0, 0xBF - strh r0, [r1, 0xE] - strh r2, [r1, 0x12] - movs r0, 0x1E - strh r0, [r1, 0x2] - movs r0, 0x3F - strh r0, [r1, 0x4] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r2, _080D3490 @ =gScanlineEffectRegBuffers + 0x780 - movs r4, 0 - movs r3, 0xF0 -_080D3450: - lsls r0, r1, 1 - adds r0, r2 - strh r4, [r0] - adds r0, r1, 0 - adds r0, 0xA0 - lsls r0, 1 - adds r0, r2 - strh r3, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x9F - bls _080D3450 - movs r0, 0x2 - bl EnableInterrupts - ldr r0, _080D3494 @ =HBCB_BT_Phase2WhiteFadeInStripes - bl SetHBlankCallback - ldr r0, _080D3498 @ =VBCB_BT_Phase2WhiteFadeInStripes1 - bl SetVBlankCallback - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D348C: .4byte sTransitionStructPtr -_080D3490: .4byte gScanlineEffectRegBuffers + 0x780 -_080D3494: .4byte HBCB_BT_Phase2WhiteFadeInStripes -_080D3498: .4byte VBCB_BT_Phase2WhiteFadeInStripes1 - thumb_func_end BT_Phase2WhiteFadeInStripes_Init - - thumb_func_start BT_Phase2WhiteFadeInStripes_SetupSprites -BT_Phase2WhiteFadeInStripes_SetupSprites: @ 80D349C - push {r4-r6,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r1, _080D3504 @ =sWhiteStripeDelay - mov r0, sp - movs r2, 0xC - bl memcpy - movs r5, 0 - movs r4, 0 -_080D34B0: - ldr r0, _080D3508 @ =SpriteCB_BT_Phase2WhiteFadeInStripes - bl CreateInvisibleSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080D350C @ =gSprites - adds r2, r1, r0 - movs r0, 0xF0 - strh r0, [r2, 0x20] - strh r4, [r2, 0x22] - lsls r1, r5, 16 - asrs r1, 16 - lsls r0, r1, 1 - add r0, sp - ldrh r0, [r0] - strh r0, [r2, 0x38] - adds r1, 0x1 - lsls r1, 16 - lsls r0, r4, 16 - movs r3, 0xD8 - lsls r3, 13 - adds r0, r3 - lsrs r4, r0, 16 - lsrs r5, r1, 16 - asrs r1, 16 - cmp r1, 0x5 - ble _080D34B0 - ldrh r0, [r2, 0x3A] - adds r0, 0x1 - strh r0, [r2, 0x3A] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - movs r0, 0 - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D3504: .4byte sWhiteStripeDelay -_080D3508: .4byte SpriteCB_BT_Phase2WhiteFadeInStripes -_080D350C: .4byte gSprites - thumb_func_end BT_Phase2WhiteFadeInStripes_SetupSprites - - thumb_func_start BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone -BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone: @ 80D3510 - push {r4,lr} - adds r4, r0, 0 - ldr r2, _080D3544 @ =sTransitionStructPtr - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r0, [r2] - movs r1, 0x20 - ldrsh r0, [r0, r1] - cmp r0, 0x5 - ble _080D353A - movs r0, 0x1 - negs r0, r0 - ldr r2, _080D3548 @ =0x00007fff - movs r1, 0x10 - bl BlendPalettes - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080D353A: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D3544: .4byte sTransitionStructPtr -_080D3548: .4byte 0x00007fff - thumb_func_end BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone - - thumb_func_start BT_Phase2WhiteFadeInStripes_Stop -BT_Phase2WhiteFadeInStripes_Stop: @ 80D354C - push {r4-r6,lr} - adds r6, r0, 0 - ldr r5, _080D35A0 @ =sTransitionStructPtr - ldr r0, [r5] - ldrb r1, [r0] - movs r4, 0 - strb r4, [r0] - ldr r1, _080D35A4 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D35A8 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D35AC @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - movs r0, 0 - bl SetVBlankCallback - movs r0, 0 - bl SetHBlankCallback - ldr r1, [r5] - movs r0, 0xF0 - strh r0, [r1, 0x6] - strh r4, [r1, 0x12] - movs r0, 0xFF - strh r0, [r1, 0xE] - movs r0, 0x3F - strh r0, [r1, 0x2] - strh r4, [r1, 0x20] - ldr r0, _080D35B0 @ =VBCB_BT_Phase2WhiteFadeInStripes2 - bl SetVBlankCallback - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D35A0: .4byte sTransitionStructPtr -_080D35A4: .4byte 0x040000b0 -_080D35A8: .4byte 0x0000c5ff -_080D35AC: .4byte 0x00007fff -_080D35B0: .4byte VBCB_BT_Phase2WhiteFadeInStripes2 - thumb_func_end BT_Phase2WhiteFadeInStripes_Stop - - thumb_func_start BT_Phase2WhiteFadeInStripes_IsDone -BT_Phase2WhiteFadeInStripes_IsDone: @ 80D35B4 - push {lr} - ldr r0, _080D35EC @ =sTransitionStructPtr - ldr r1, [r0] - movs r2, 0xF0 - lsls r2, 1 - adds r0, r2, 0 - ldrh r2, [r1, 0x20] - adds r0, r2 - strh r0, [r1, 0x20] - lsls r0, 16 - asrs r0, 24 - strh r0, [r1, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x10 - bls _080D35E6 - bl BT_BlendPalettesToBlack - ldr r0, _080D35F0 @ =BT_Phase2WhiteFadeInStripes - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D35E6: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D35EC: .4byte sTransitionStructPtr -_080D35F0: .4byte BT_Phase2WhiteFadeInStripes - thumb_func_end BT_Phase2WhiteFadeInStripes_IsDone - - thumb_func_start VBCB_BT_Phase2WhiteFadeInStripes1 -VBCB_BT_Phase2WhiteFadeInStripes1: @ 80D35F4 - push {r4,r5,lr} - ldr r5, _080D3668 @ =0x040000b0 - ldrh r1, [r5, 0xA] - ldr r0, _080D366C @ =0x0000c5ff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r1, [r5, 0xA] - ldr r0, _080D3670 @ =0x00007fff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r0, [r5, 0xA] - bl BT_VBSyncOamAndPltt - ldr r4, _080D3674 @ =sTransitionStructPtr - ldr r0, [r4] - ldrh r1, [r0, 0xE] - movs r0, 0x50 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x6] - movs r0, 0x44 - bl SetGpuReg - ldr r0, [r4] - ldrb r0, [r0] - cmp r0, 0 - beq _080D3654 - ldr r1, _080D3678 @ =0x040000d4 - ldr r0, _080D367C @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D3680 @ =0x80000140 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D3654: - ldr r0, _080D3684 @ =gScanlineEffectRegBuffers + 0x8C0 - str r0, [r5] - ldr r0, _080D3688 @ =0x04000040 - str r0, [r5, 0x4] - ldr r0, _080D368C @ =0xa2400001 - str r0, [r5, 0x8] - ldr r0, [r5, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3668: .4byte 0x040000b0 -_080D366C: .4byte 0x0000c5ff -_080D3670: .4byte 0x00007fff -_080D3674: .4byte sTransitionStructPtr -_080D3678: .4byte 0x040000d4 -_080D367C: .4byte gScanlineEffectRegBuffers -_080D3680: .4byte 0x80000140 -_080D3684: .4byte gScanlineEffectRegBuffers + 0x8C0 -_080D3688: .4byte 0x04000040 -_080D368C: .4byte 0xa2400001 - thumb_func_end VBCB_BT_Phase2WhiteFadeInStripes1 - - thumb_func_start VBCB_BT_Phase2WhiteFadeInStripes2 -VBCB_BT_Phase2WhiteFadeInStripes2: @ 80D3690 - push {r4,lr} - bl BT_VBSyncOamAndPltt - ldr r4, _080D36DC @ =sTransitionStructPtr - ldr r0, [r4] - ldrh r1, [r0, 0x12] - movs r0, 0x54 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0xE] - movs r0, 0x50 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x6] - movs r0, 0x40 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D36DC: .4byte sTransitionStructPtr - thumb_func_end VBCB_BT_Phase2WhiteFadeInStripes2 - - thumb_func_start HBCB_BT_Phase2WhiteFadeInStripes -HBCB_BT_Phase2WhiteFadeInStripes: @ 80D36E0 - push {lr} - sub sp, 0x4 - mov r1, sp - ldr r0, _080D3714 @ =0x04000006 - ldrh r0, [r0] - strh r0, [r1] - mov r0, sp - ldrh r0, [r0] - cmp r0, 0xE3 - bne _080D36F8 - movs r0, 0 - strh r0, [r1] -_080D36F8: - ldr r2, _080D3718 @ =0x04000054 - ldr r1, _080D371C @ =gScanlineEffectRegBuffers - mov r0, sp - ldrh r0, [r0] - lsls r0, 1 - movs r3, 0xF0 - lsls r3, 3 - adds r1, r3 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080D3714: .4byte 0x04000006 -_080D3718: .4byte 0x04000054 -_080D371C: .4byte gScanlineEffectRegBuffers - thumb_func_end HBCB_BT_Phase2WhiteFadeInStripes - - thumb_func_start SpriteCB_BT_Phase2WhiteFadeInStripes -SpriteCB_BT_Phase2WhiteFadeInStripes: @ 80D3720 - push {r4-r7,lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x38] - movs r2, 0x38 - ldrsh r0, [r3, r2] - cmp r0, 0 - beq _080D374C - subs r0, r1, 0x1 - strh r0, [r3, 0x38] - movs r1, 0x3A - ldrsh r0, [r3, r1] - cmp r0, 0 - beq _080D380A - ldr r0, _080D3748 @ =sTransitionStructPtr - ldr r1, [r0] - ldrb r0, [r1] - movs r0, 0x1 - strb r0, [r1] - b _080D380A - .align 2, 0 -_080D3748: .4byte sTransitionStructPtr -_080D374C: - movs r2, 0x22 - ldrsh r0, [r3, r2] - lsls r0, 1 - ldr r1, _080D3810 @ =gScanlineEffectRegBuffers - adds r7, r0, r1 - movs r2, 0xA0 - lsls r2, 1 - adds r1, r2 - adds r6, r0, r1 - movs r1, 0x3A - ldrsh r0, [r3, r1] - movs r5, 0x1B - cmp r0, 0 - beq _080D376A - movs r5, 0x19 -_080D376A: - movs r4, 0 - cmp r4, r5 - bcs _080D3790 -_080D3770: - lsls r1, r4, 1 - adds r2, r1, r7 - ldrh r0, [r3, 0x2E] - lsls r0, 16 - asrs r0, 24 - strh r0, [r2] - adds r1, r6 - ldrh r0, [r3, 0x20] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r5 - bcc _080D3770 -_080D3790: - movs r2, 0x20 - ldrsh r0, [r3, r2] - ldrh r2, [r3, 0x20] - cmp r0, 0 - bne _080D37AA - movs r0, 0x2E - ldrsh r1, [r3, r0] - movs r0, 0x80 - lsls r0, 5 - cmp r1, r0 - bne _080D37AA - movs r0, 0x1 - strh r0, [r3, 0x30] -_080D37AA: - adds r1, r2, 0 - subs r1, 0x18 - strh r1, [r3, 0x20] - ldrh r0, [r3, 0x2E] - adds r0, 0xC0 - strh r0, [r3, 0x2E] - lsls r1, 16 - cmp r1, 0 - bge _080D37C0 - movs r0, 0 - strh r0, [r3, 0x20] -_080D37C0: - movs r1, 0x2E - ldrsh r0, [r3, r1] - movs r1, 0x80 - lsls r1, 5 - cmp r0, r1 - ble _080D37CE - strh r1, [r3, 0x2E] -_080D37CE: - movs r2, 0x3A - ldrsh r0, [r3, r2] - cmp r0, 0 - beq _080D37E0 - ldr r0, _080D3814 @ =sTransitionStructPtr - ldr r1, [r0] - ldrb r0, [r1] - movs r0, 0x1 - strb r0, [r1] -_080D37E0: - movs r1, 0x30 - ldrsh r0, [r3, r1] - cmp r0, 0 - beq _080D380A - movs r2, 0x3A - ldrsh r0, [r3, r2] - ldr r1, _080D3814 @ =sTransitionStructPtr - cmp r0, 0 - beq _080D37FC - ldr r0, [r1] - movs r2, 0x20 - ldrsh r0, [r0, r2] - cmp r0, 0x4 - ble _080D380A -_080D37FC: - ldr r1, [r1] - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] - adds r0, r3, 0 - bl DestroySprite -_080D380A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D3810: .4byte gScanlineEffectRegBuffers -_080D3814: .4byte sTransitionStructPtr - thumb_func_end SpriteCB_BT_Phase2WhiteFadeInStripes - - thumb_func_start BT_Phase2GridSquares -BT_Phase2GridSquares: @ 80D3818 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D3848 @ =sBT_Phase2GridSquaresFuncs - ldr r2, _080D384C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D382A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D382A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3848: .4byte sBT_Phase2GridSquaresFuncs -_080D384C: .4byte gTasks - thumb_func_end BT_Phase2GridSquares - - thumb_func_start BT_Phase2GridSquares_LoadGfx -BT_Phase2GridSquares_LoadGfx: @ 80D3850 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - add r0, sp, 0x4 - add r1, sp, 0x8 - bl BT_GetBg0TilemapAndTilesetBase - ldr r0, _080D3898 @ =sGridSquareTilemap - ldr r1, [sp, 0x8] - movs r2, 0x10 - bl CpuSet - mov r1, sp - movs r2, 0xF0 - lsls r2, 8 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, [sp, 0x4] - ldr r2, _080D389C @ =0x01000400 - mov r0, sp - bl CpuSet - ldr r0, _080D38A0 @ =sSlidingPokeballBigPokeballPalette - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D3898: .4byte sGridSquareTilemap -_080D389C: .4byte 0x01000400 -_080D38A0: .4byte sSlidingPokeballBigPokeballPalette - thumb_func_end BT_Phase2GridSquares_LoadGfx - - thumb_func_start BT_Phase2GridSquares_UpdateTileset -BT_Phase2GridSquares_UpdateTileset: @ 80D38A4 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080D38E6 - mov r0, sp - bl BT_GetBg0TilesetBase - movs r0, 0x3 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0xC - ldrsh r0, [r4, r1] - lsls r0, 5 - ldr r1, _080D38F8 @ =sGridSquareTilemap - adds r0, r1 - ldr r1, [sp] - movs r2, 0x10 - bl CpuSet - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0xD - ble _080D38E6 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x10 - strh r0, [r4, 0xA] -_080D38E6: - ldrh r0, [r4, 0xA] - subs r0, 0x1 - strh r0, [r4, 0xA] - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D38F8: .4byte sGridSquareTilemap - thumb_func_end BT_Phase2GridSquares_UpdateTileset - - thumb_func_start BT_Phase2GridSquares_IsDone -BT_Phase2GridSquares_IsDone: @ 80D38FC - push {lr} - ldrh r1, [r0, 0xA] - subs r1, 0x1 - strh r1, [r0, 0xA] - lsls r1, 16 - cmp r1, 0 - bne _080D391C - bl BT_BlendPalettesToBlack - ldr r0, _080D3924 @ =BT_Phase2GridSquares - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D391C: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D3924: .4byte BT_Phase2GridSquares - thumb_func_end BT_Phase2GridSquares_IsDone - - thumb_func_start BT_Phase2BlackDoodles -BT_Phase2BlackDoodles: @ 80D3928 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D3958 @ =sBT_Phase2BlackDoodlesFuncs - ldr r2, _080D395C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D393A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D393A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3958: .4byte sBT_Phase2BlackDoodlesFuncs -_080D395C: .4byte gTasks - thumb_func_end BT_Phase2BlackDoodles - - thumb_func_start BT_Phase2BlackDoodles_Init -BT_Phase2BlackDoodles_Init: @ 80D3960 - push {r4,r5,lr} - adds r5, r0, 0 - bl BT_InitCtrlBlk - bl ScanlineEffect_Clear - ldr r0, _080D39B8 @ =sTransitionStructPtr - ldr r1, [r0] - movs r2, 0 - movs r0, 0x3F - strh r0, [r1, 0x2] - strh r2, [r1, 0x4] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r2, _080D39BC @ =gScanlineEffectRegBuffers - movs r3, 0xF0 - adds r4, r2, 0 -_080D3984: - lsls r0, r1, 1 - adds r0, r2 - strh r3, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x9F - bls _080D3984 - movs r0, 0xF0 - lsls r0, 3 - adds r1, r4, r0 - adds r0, r4, 0 - movs r2, 0xA0 - bl CpuSet - ldr r0, _080D39C0 @ =VBCB_BT_Phase2BlackDoodles - bl SetVBlankCallback - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D39B8: .4byte sTransitionStructPtr -_080D39BC: .4byte gScanlineEffectRegBuffers -_080D39C0: .4byte VBCB_BT_Phase2BlackDoodles - thumb_func_end BT_Phase2BlackDoodles_Init - - thumb_func_start BT_Phase2BlackDoodles_InitSingleBrush -BT_Phase2BlackDoodles_InitSingleBrush: @ 80D39C4 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - mov r8, r0 - ldr r0, _080D3A38 @ =sTransitionStructPtr - ldr r0, [r0] - adds r0, 0x24 - ldr r6, _080D3A3C @ =sBlackDoodlesSegments - mov r2, r8 - movs r3, 0xA - ldrsh r1, [r2, r3] - lsls r4, r1, 2 - adds r4, r1 - lsls r4, 1 - adds r1, r4, r6 - movs r5, 0 - ldrsh r1, [r1, r5] - adds r2, r6, 0x2 - adds r2, r4, r2 - movs r3, 0 - ldrsh r2, [r2, r3] - adds r3, r6, 0x4 - adds r3, r4, r3 - movs r5, 0 - ldrsh r3, [r3, r5] - adds r5, r6, 0x6 - adds r4, r5 - movs r5, 0 - ldrsh r4, [r4, r5] - str r4, [sp] - movs r4, 0x1 - str r4, [sp, 0x4] - str r4, [sp, 0x8] - bl BT_DiagonalSegment_InitParams - mov r0, r8 - movs r2, 0xA - ldrsh r1, [r0, r2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - adds r6, 0x8 - adds r0, r6 - ldrh r0, [r0] - mov r3, r8 - strh r0, [r3, 0xC] - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] - movs r0, 0x1 - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D3A38: .4byte sTransitionStructPtr -_080D3A3C: .4byte sBlackDoodlesSegments - thumb_func_end BT_Phase2BlackDoodles_InitSingleBrush - - thumb_func_start BT_Phase2BlackDoodles_DrawSingleBrush -BT_Phase2BlackDoodles_DrawSingleBrush: @ 80D3A40 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r6, r0, 0 - ldr r0, _080D3A90 @ =sTransitionStructPtr - ldr r1, [r0] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - mov r8, r0 - movs r7, 0 - ldr r0, _080D3A94 @ =gScanlineEffectRegBuffers - mov r9, r0 -_080D3A5C: - ldr r1, _080D3A94 @ =gScanlineEffectRegBuffers - ldr r0, _080D3A90 @ =sTransitionStructPtr - ldr r2, [r0] - movs r3, 0x2A - ldrsh r0, [r2, r3] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsrs r3, r0, 8 - movs r5, 0xFF - ands r5, r0 - movs r4, 0xC - ldrsh r0, [r6, r4] - cmp r0, 0 - bne _080D3A98 - movs r1, 0x28 - ldrsh r0, [r2, r1] - cmp r3, r0 - bge _080D3A84 - ldrh r3, [r2, 0x28] -_080D3A84: - lsls r0, r3, 16 - lsls r1, r5, 16 - cmp r0, r1 - ble _080D3AB0 - lsrs r3, r1, 16 - b _080D3AB0 - .align 2, 0 -_080D3A90: .4byte sTransitionStructPtr -_080D3A94: .4byte gScanlineEffectRegBuffers -_080D3A98: - lsls r0, r5, 16 - asrs r0, 16 - movs r4, 0x28 - ldrsh r1, [r2, r4] - cmp r0, r1 - ble _080D3AA6 - ldrh r5, [r2, 0x28] -_080D3AA6: - lsls r0, r5, 16 - lsls r1, r3, 16 - cmp r0, r1 - bgt _080D3AB0 - lsrs r5, r1, 16 -_080D3AB0: - ldr r0, _080D3AD4 @ =sTransitionStructPtr - ldr r4, [r0] - movs r0, 0x2A - ldrsh r2, [r4, r0] - lsls r2, 1 - add r2, r9 - lsls r1, r3, 16 - asrs r1, 8 - lsls r0, r5, 16 - asrs r0, 16 - orrs r0, r1 - strh r0, [r2] - cmp r7, 0 - beq _080D3AD8 - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - b _080D3AFC - .align 2, 0 -_080D3AD4: .4byte sTransitionStructPtr -_080D3AD8: - adds r0, r4, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl BT_DiagonalSegment_ComputePointOnSegment - lsls r0, 24 - lsrs r7, r0, 24 - mov r1, r8 - lsls r0, r1, 16 - movs r3, 0x80 - lsls r3, 9 - adds r0, r3 - lsrs r4, r0, 16 - mov r8, r4 - asrs r0, 16 - cmp r0, 0xF - ble _080D3A5C -_080D3AFC: - ldr r0, _080D3B18 @ =sTransitionStructPtr - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D3B18: .4byte sTransitionStructPtr - thumb_func_end BT_Phase2BlackDoodles_DrawSingleBrush - - thumb_func_start BT_Phase2BlackDoodles_IsDone -BT_Phase2BlackDoodles_IsDone: @ 80D3B1C - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0xA] - adds r0, 0x1 - strh r0, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - ble _080D3B68 - ldr r1, _080D3B58 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D3B5C @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D3B60 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl BT_BlendPalettesToBlack - ldr r0, _080D3B64 @ =BT_Phase2BlackDoodles - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - b _080D3B80 - .align 2, 0 -_080D3B58: .4byte 0x040000b0 -_080D3B5C: .4byte 0x0000c5ff -_080D3B60: .4byte 0x00007fff -_080D3B64: .4byte BT_Phase2BlackDoodles -_080D3B68: - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - ldr r1, _080D3B84 @ =sBlackDoodlesDelay - movs r3, 0xA - ldrsh r0, [r2, r3] - subs r0, 0x1 - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2, 0xE] - movs r0, 0x1 -_080D3B80: - pop {r1} - bx r1 - .align 2, 0 -_080D3B84: .4byte sBlackDoodlesDelay - thumb_func_end BT_Phase2BlackDoodles_IsDone - - thumb_func_start BT_Phase2BlackDoodles_NextBrush -BT_Phase2BlackDoodles_NextBrush: @ 80D3B88 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0xE] - subs r0, 0x1 - strh r0, [r1, 0xE] - lsls r0, 16 - cmp r0, 0 - beq _080D3B9C - movs r0, 0 - b _080D3BA0 -_080D3B9C: - movs r0, 0x1 - strh r0, [r1, 0x8] -_080D3BA0: - pop {r1} - bx r1 - thumb_func_end BT_Phase2BlackDoodles_NextBrush - - thumb_func_start VBCB_BT_Phase2BlackDoodles -VBCB_BT_Phase2BlackDoodles: @ 80D3BA4 - push {r4,r5,lr} - ldr r5, _080D3C1C @ =0x040000b0 - ldrh r1, [r5, 0xA] - ldr r0, _080D3C20 @ =0x0000c5ff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r1, [r5, 0xA] - ldr r0, _080D3C24 @ =0x00007fff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r0, [r5, 0xA] - bl BT_VBSyncOamAndPltt - ldr r4, _080D3C28 @ =sTransitionStructPtr - ldr r0, [r4] - ldrb r0, [r0] - cmp r0, 0 - beq _080D3BDC - ldr r1, _080D3C2C @ =0x040000d4 - ldr r0, _080D3C30 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D3C34 @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D3BDC: - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r4, _080D3C30 @ =gScanlineEffectRegBuffers - movs r0, 0xF0 - lsls r0, 3 - adds r4, r0 - ldrh r1, [r4] - movs r0, 0x40 - bl SetGpuReg - str r4, [r5] - ldr r0, _080D3C38 @ =0x04000040 - str r0, [r5, 0x4] - ldr r0, _080D3C3C @ =0xa2400001 - str r0, [r5, 0x8] - ldr r0, [r5, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3C1C: .4byte 0x040000b0 -_080D3C20: .4byte 0x0000c5ff -_080D3C24: .4byte 0x00007fff -_080D3C28: .4byte sTransitionStructPtr -_080D3C2C: .4byte 0x040000d4 -_080D3C30: .4byte gScanlineEffectRegBuffers -_080D3C34: .4byte 0x800000a0 -_080D3C38: .4byte 0x04000040 -_080D3C3C: .4byte 0xa2400001 - thumb_func_end VBCB_BT_Phase2BlackDoodles - - thumb_func_start BT_CreatePhase1SubTask -BT_CreatePhase1SubTask: @ 80D3C40 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x4 - mov r8, r0 - adds r4, r1, 0 - adds r5, r2, 0 - adds r6, r3, 0 - ldr r3, [sp, 0x18] - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 16 - lsrs r6, 16 - lsls r3, 16 - lsrs r3, 16 - ldr r0, _080D3C9C @ =BT_Phase1SubTask - movs r1, 0x3 - str r3, [sp] - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D3CA0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - mov r0, r8 - strh r0, [r1, 0xA] - strh r4, [r1, 0xC] - strh r5, [r1, 0xE] - strh r6, [r1, 0x10] - ldr r3, [sp] - strh r3, [r1, 0x12] - strh r0, [r1, 0x14] - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D3C9C: .4byte BT_Phase1SubTask -_080D3CA0: .4byte gTasks - thumb_func_end BT_CreatePhase1SubTask - - thumb_func_start BT_IsPhase1Done -BT_IsPhase1Done: @ 80D3CA4 - push {lr} - ldr r0, _080D3CB8 @ =BT_Phase1SubTask - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _080D3CBC - movs r0, 0 - b _080D3CBE - .align 2, 0 -_080D3CB8: .4byte BT_Phase1SubTask -_080D3CBC: - movs r0, 0x1 -_080D3CBE: - pop {r1} - bx r1 - thumb_func_end BT_IsPhase1Done - - thumb_func_start BT_Phase1SubTask -BT_Phase1SubTask: @ 80D3CC4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D3CF4 @ =sBT_Phase1FadeFuncs - ldr r2, _080D3CF8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D3CD6: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D3CD6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3CF4: .4byte sBT_Phase1FadeFuncs -_080D3CF8: .4byte gTasks - thumb_func_end BT_Phase1SubTask - - thumb_func_start BT_Phase1_FadeOut -BT_Phase1_FadeOut: @ 80D3CFC - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x14] - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080D3D14 - subs r0, r1, 0x1 - strh r0, [r4, 0x14] - lsls r0, 16 - cmp r0, 0 - bne _080D3D38 -_080D3D14: - ldrh r0, [r4, 0xA] - strh r0, [r4, 0x14] - ldrh r0, [r4, 0x10] - ldrh r1, [r4, 0x16] - adds r0, r1 - strh r0, [r4, 0x16] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _080D3D2C - movs r0, 0x10 - strh r0, [r4, 0x16] -_080D3D2C: - movs r0, 0x1 - negs r0, r0 - ldrb r1, [r4, 0x16] - ldr r2, _080D3D54 @ =0x00002d6b - bl BlendPalettes -_080D3D38: - movs r2, 0x16 - ldrsh r0, [r4, r2] - cmp r0, 0xF - ble _080D3D4A - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - ldrh r0, [r4, 0xC] - strh r0, [r4, 0x14] -_080D3D4A: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D3D54: .4byte 0x00002d6b - thumb_func_end BT_Phase1_FadeOut - - thumb_func_start BT_Phase1_FadeIn -BT_Phase1_FadeIn: @ 80D3D58 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x14] - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080D3D70 - subs r0, r1, 0x1 - strh r0, [r4, 0x14] - lsls r0, 16 - cmp r0, 0 - bne _080D3D92 -_080D3D70: - ldrh r0, [r4, 0xC] - strh r0, [r4, 0x14] - ldrh r0, [r4, 0x16] - ldrh r1, [r4, 0x12] - subs r0, r1 - strh r0, [r4, 0x16] - lsls r0, 16 - cmp r0, 0 - bge _080D3D86 - movs r0, 0 - strh r0, [r4, 0x16] -_080D3D86: - movs r0, 0x1 - negs r0, r0 - ldrb r1, [r4, 0x16] - ldr r2, _080D3DB8 @ =0x00002d6b - bl BlendPalettes -_080D3D92: - movs r0, 0x16 - ldrsh r1, [r4, r0] - cmp r1, 0 - bne _080D3DC6 - ldrh r0, [r4, 0xE] - subs r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _080D3DC0 - ldr r0, _080D3DBC @ =BT_Phase1SubTask - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - b _080D3DC6 - .align 2, 0 -_080D3DB8: .4byte 0x00002d6b -_080D3DBC: .4byte BT_Phase1SubTask -_080D3DC0: - ldrh r0, [r4, 0xA] - strh r0, [r4, 0x14] - strh r1, [r4, 0x8] -_080D3DC6: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end BT_Phase1_FadeIn - - thumb_func_start BT_InitCtrlBlk -BT_InitCtrlBlk: @ 80D3DD0 - push {r4,lr} - ldr r4, _080D3DF0 @ =sTransitionStructPtr - ldr r0, [r4] - movs r1, 0 - movs r2, 0x3C - bl memset - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x14 - adds r1, 0x16 - bl sub_805A658 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D3DF0: .4byte sTransitionStructPtr - thumb_func_end BT_InitCtrlBlk - - thumb_func_start BT_VBSyncOamAndPltt -BT_VBSyncOamAndPltt: @ 80D3DF4 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end BT_VBSyncOamAndPltt - - thumb_func_start BT_GetBg0TilesetBase -BT_GetBg0TilesetBase: @ 80D3E08 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x8 - bl GetGpuReg - lsls r0, 16 - lsrs r0, 18 - lsls r0, 30 - lsrs r0, 16 - movs r1, 0xC0 - lsls r1, 19 - adds r0, r1 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - thumb_func_end BT_GetBg0TilesetBase - - thumb_func_start BT_GetBg0TilemapAndTilesetBase -BT_GetBg0TilemapAndTilesetBase: @ 80D3E28 - push {r4-r6,lr} - adds r5, r0, 0 - adds r6, r1, 0 - movs r0, 0x8 - bl GetGpuReg - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 24 - movs r0, 0x1F - ands r4, r0 - movs r0, 0x8 - bl GetGpuReg - lsls r0, 16 - lsrs r0, 18 - lsls r4, 11 - lsls r0, 30 - lsrs r0, 16 - movs r1, 0xC0 - lsls r1, 19 - adds r4, r1 - str r4, [r5] - adds r0, r1 - str r0, [r6] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end BT_GetBg0TilemapAndTilesetBase - - thumb_func_start BT_BlendPalettesToBlack -BT_BlendPalettesToBlack: @ 80D3E60 - push {lr} - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - pop {r0} - bx r0 - thumb_func_end BT_BlendPalettesToBlack - - thumb_func_start BT_LoadWaveIntoBuffer -BT_LoadWaveIntoBuffer: @ 80D3E74 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - mov r10, r0 - ldr r0, [sp, 0x20] - ldr r4, [sp, 0x24] - lsls r1, 16 - lsrs r7, r1, 16 - lsls r2, 16 - lsrs r2, 16 - lsls r3, 16 - lsrs r3, 16 - lsls r0, 16 - lsrs r1, r0, 16 - lsls r4, 16 - movs r6, 0 - lsrs r5, r4, 16 - cmp r4, 0 - ble _080D3EDC - lsls r0, r7, 16 - asrs r0, 16 - mov r9, r0 - lsls r1, 16 - mov r8, r1 - lsls r0, r3, 16 - asrs r7, r0, 16 -_080D3EAC: - lsls r4, r2, 16 - asrs r4, 16 - movs r0, 0xFF - ands r0, r4 - mov r2, r8 - asrs r1, r2, 16 - bl Sin - lsls r1, r6, 1 - add r1, r10 - add r0, r9 - strh r0, [r1] - lsls r1, r5, 16 - ldr r0, _080D3EEC @ =0xffff0000 - adds r1, r0 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, r7 - lsls r4, 16 - lsrs r2, r4, 16 - lsrs r5, r1, 16 - cmp r1, 0 - bgt _080D3EAC -_080D3EDC: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D3EEC: .4byte 0xffff0000 - thumb_func_end BT_LoadWaveIntoBuffer - - thumb_func_start BT_GenerateCircle -BT_GenerateCircle: @ 80D3EF0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - mov r9, r0 - adds r5, r2, 0 - adds r4, r3, 0 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp] - lsls r5, 16 - lsrs r5, 16 - lsls r4, 16 - lsrs r4, 16 - movs r2, 0xA0 - lsls r2, 1 - movs r1, 0xA - bl memset - movs r1, 0 - lsls r4, 16 - asrs r4, 16 - str r4, [sp, 0x4] - lsls r5, 16 - asrs r5, 16 - str r5, [sp, 0x8] -_080D3F28: - lsls r5, r1, 16 - asrs r0, r5, 16 - mov r10, r0 - ldr r1, [sp, 0x4] - bl Sin - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r10 - ldr r1, [sp, 0x4] - bl Cos - ldr r2, [sp] - lsls r1, r2, 16 - asrs r1, 16 - lsls r4, 16 - asrs r4, 16 - subs r2, r1, r4 - lsls r2, 16 - adds r1, r4 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r0, 16 - asrs r0, 16 - ldr r3, [sp, 0x8] - subs r1, r3, r0 - lsls r1, 16 - lsrs r7, r1, 16 - adds r0, r3, r0 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsrs r1, r2, 16 - str r5, [sp, 0x10] - cmp r2, 0 - bge _080D3F74 - movs r1, 0 -_080D3F74: - lsls r0, r6, 16 - asrs r0, 16 - cmp r0, 0xF0 - ble _080D3F7E - movs r6, 0xF0 -_080D3F7E: - lsls r0, r7, 16 - cmp r0, 0 - bge _080D3F86 - movs r7, 0 -_080D3F86: - mov r2, r8 - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _080D3F94 - movs r3, 0x9F - mov r8, r3 -_080D3F94: - lsls r0, r1, 24 - lsrs r0, 16 - orrs r6, r0 - lsls r0, r7, 16 - asrs r0, 16 - str r0, [sp, 0xC] - lsls r0, 1 - add r0, r9 - strh r6, [r0] - mov r0, r8 - lsls r4, r0, 16 - asrs r0, r4, 15 - add r0, r9 - strh r6, [r0] - mov r0, r10 - adds r0, 0x1 - lsls r0, 16 - asrs r0, 16 - ldr r1, [sp, 0x4] - bl Cos - lsls r0, 16 - asrs r0, 16 - ldr r2, [sp, 0x8] - subs r1, r2, r0 - lsls r1, 16 - adds r0, r2, r0 - lsls r0, 16 - lsrs r2, r0, 16 - lsrs r3, r1, 16 - cmp r1, 0 - bge _080D3FD6 - movs r3, 0 -_080D3FD6: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _080D3FE0 - movs r2, 0x9F -_080D3FE0: - lsls r0, r3, 16 - asrs r1, r0, 16 - adds r3, r0, 0 - lsls r5, r2, 16 - ldr r0, [sp, 0xC] - cmp r0, r1 - ble _080D4004 - adds r2, r1, 0 -_080D3FF0: - lsls r1, r7, 16 - ldr r0, _080D4084 @ =0xffff0000 - adds r1, r0 - asrs r0, r1, 15 - add r0, r9 - strh r6, [r0] - lsrs r7, r1, 16 - asrs r1, 16 - cmp r1, r2 - bgt _080D3FF0 -_080D4004: - lsls r1, r7, 16 - asrs r0, r3, 16 - cmp r1, r3 - bge _080D4022 - adds r2, r0, 0 -_080D400E: - movs r3, 0x80 - lsls r3, 9 - adds r0, r1, r3 - asrs r1, r0, 15 - add r1, r9 - strh r6, [r1] - adds r1, r0, 0 - asrs r0, r1, 16 - cmp r0, r2 - blt _080D400E -_080D4022: - asrs r0, r5, 16 - cmp r4, r5 - ble _080D4040 - adds r1, r0, 0 -_080D402A: - ldr r2, _080D4084 @ =0xffff0000 - adds r0, r4, r2 - lsrs r3, r0, 16 - mov r8, r3 - asrs r0, 15 - add r0, r9 - strh r6, [r0] - lsls r4, r3, 16 - asrs r0, r4, 16 - cmp r0, r1 - bgt _080D402A -_080D4040: - mov r0, r8 - lsls r4, r0, 16 - asrs r0, r5, 16 - cmp r4, r5 - bge _080D4060 - adds r2, r0, 0 -_080D404C: - movs r1, 0x80 - lsls r1, 9 - adds r0, r4, r1 - asrs r1, r0, 15 - add r1, r9 - strh r6, [r1] - adds r4, r0, 0 - asrs r0, r4, 16 - cmp r0, r2 - blt _080D404C -_080D4060: - ldr r2, [sp, 0x10] - movs r3, 0x80 - lsls r3, 9 - adds r0, r2, r3 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x3F - bgt _080D4072 - b _080D3F28 -_080D4072: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D4084: .4byte 0xffff0000 - thumb_func_end BT_GenerateCircle - - thumb_func_start BT_DiagonalSegment_InitParams -BT_DiagonalSegment_InitParams: @ 80D4088 - push {r4-r7,lr} - adds r6, r0, 0 - ldr r0, [sp, 0x14] - ldr r5, [sp, 0x18] - ldr r4, [sp, 0x1C] - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - lsls r3, 16 - lsrs r3, 16 - lsls r0, 16 - lsrs r0, 16 - adds r7, r0, 0 - lsls r5, 16 - lsrs r5, 16 - lsls r4, 16 - lsrs r4, 16 - strh r1, [r6] - strh r2, [r6, 0x2] - strh r1, [r6, 0x4] - strh r2, [r6, 0x6] - strh r3, [r6, 0x8] - strh r7, [r6, 0xA] - strh r5, [r6, 0xC] - strh r4, [r6, 0xE] - lsls r3, 16 - asrs r3, 16 - lsls r1, 16 - asrs r1, 16 - subs r3, r1 - strh r3, [r6, 0x10] - lsls r0, r3, 16 - cmp r0, 0 - bge _080D40DA - negs r0, r3 - strh r0, [r6, 0x10] - lsls r0, r5, 16 - asrs r0, 16 - negs r0, r0 - strh r0, [r6, 0xC] -_080D40DA: - lsls r0, r7, 16 - asrs r0, 16 - lsls r1, r2, 16 - asrs r1, 16 - subs r1, r0, r1 - strh r1, [r6, 0x12] - lsls r0, r1, 16 - cmp r0, 0 - bge _080D40F8 - negs r0, r1 - strh r0, [r6, 0x12] - lsls r0, r4, 16 - asrs r0, 16 - negs r0, r0 - strh r0, [r6, 0xE] -_080D40F8: - movs r0, 0 - strh r0, [r6, 0x14] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end BT_DiagonalSegment_InitParams - - thumb_func_start BT_DiagonalSegment_ComputePointOnSegment -BT_DiagonalSegment_ComputePointOnSegment: @ 80D4104 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r3, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - ldrh r0, [r3, 0x10] - mov r8, r0 - movs r1, 0x10 - ldrsh r6, [r3, r1] - ldrh r2, [r3, 0x12] - mov r12, r2 - movs r4, 0x12 - ldrsh r5, [r3, r4] - cmp r6, r5 - ble _080D4154 - ldrh r0, [r3, 0xC] - ldrh r2, [r3, 0x4] - adds r1, r0, r2 - strh r1, [r3, 0x4] - ldrh r2, [r3, 0x14] - add r2, r12 - strh r2, [r3, 0x14] - lsls r1, r2, 16 - asrs r1, 16 - adds r4, r0, 0 - ldrh r7, [r3, 0xE] - cmp r1, r6 - ble _080D417A - ldrh r1, [r3, 0x6] - adds r0, r7, r1 - strh r0, [r3, 0x6] - mov r1, r8 - b _080D4176 -_080D4154: - ldrh r0, [r3, 0xE] - ldrh r2, [r3, 0x6] - adds r1, r0, r2 - strh r1, [r3, 0x6] - ldrh r2, [r3, 0x14] - add r2, r8 - strh r2, [r3, 0x14] - lsls r1, r2, 16 - asrs r1, 16 - ldrh r4, [r3, 0xC] - adds r7, r0, 0 - cmp r1, r5 - ble _080D417A - ldrh r1, [r3, 0x4] - adds r0, r4, r1 - strh r0, [r3, 0x4] - mov r1, r12 -_080D4176: - subs r0, r2, r1 - strh r0, [r3, 0x14] -_080D417A: - movs r5, 0 - lsls r0, r4, 16 - asrs r2, r0, 16 - cmp r2, 0 - ble _080D4192 - movs r4, 0x4 - ldrsh r1, [r3, r4] - movs r4, 0x8 - ldrsh r0, [r3, r4] - ldrh r4, [r3, 0x8] - cmp r1, r0 - bge _080D41A4 -_080D4192: - cmp r2, 0 - bge _080D41B2 - movs r0, 0x4 - ldrsh r1, [r3, r0] - movs r2, 0x8 - ldrsh r0, [r3, r2] - ldrh r4, [r3, 0x8] - cmp r1, r0 - bgt _080D41B2 -_080D41A4: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - mov r0, r9 - cmp r0, 0 - beq _080D41B2 - strh r4, [r3, 0x4] -_080D41B2: - lsls r0, r7, 16 - asrs r2, r0, 16 - cmp r2, 0 - ble _080D41C8 - movs r4, 0x6 - ldrsh r1, [r3, r4] - movs r4, 0xA - ldrsh r0, [r3, r4] - ldrh r4, [r3, 0xA] - cmp r1, r0 - bge _080D41DA -_080D41C8: - cmp r2, 0 - bge _080D41E8 - movs r0, 0x6 - ldrsh r1, [r3, r0] - movs r2, 0xA - ldrsh r0, [r3, r2] - ldrh r4, [r3, 0xA] - cmp r1, r0 - bgt _080D41E8 -_080D41DA: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - mov r0, r10 - cmp r0, 0 - beq _080D41E8 - strh r4, [r3, 0x6] -_080D41E8: - cmp r5, 0x2 - beq _080D41F0 - movs r0, 0 - b _080D41F2 -_080D41F0: - movs r0, 0x1 -_080D41F2: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end BT_DiagonalSegment_ComputePointOnSegment - - .align 2, 0 @ Don't pad with nop. diff --git a/graphics/battle_transitions/grid_square_tilemap.bin b/graphics/battle_transitions/grid_square_tilemap.bin deleted file mode 100644 index 7f67463eb..000000000 Binary files a/graphics/battle_transitions/grid_square_tilemap.bin and /dev/null differ diff --git a/graphics/battle_transitions/grid_square_tileset.png b/graphics/battle_transitions/grid_square_tileset.png new file mode 100644 index 000000000..fb8a9e6fd Binary files /dev/null and b/graphics/battle_transitions/grid_square_tileset.png differ diff --git a/include/field_camera.h b/include/field_camera.h index 53d734081..d67523c8f 100644 --- a/include/field_camera.h +++ b/include/field_camera.h @@ -26,5 +26,6 @@ extern u16 gUnknown_03005DE8; void DrawWholeMapView(void); void CurrentMapDrawMetatileAt(int x, int y); +void sub_805A658(s16 *x, s16 *y); #endif //GUARD_FIELD_CAMERA_H diff --git a/include/field_effect.h b/include/field_effect.h index 47f35fe86..0ab2d0475 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -84,5 +84,6 @@ void CreateTeleportFieldEffectTask(void); void FieldEffectActiveListRemove(u8 id); void sub_8085620(void); void FieldEffectStop(struct Sprite *sprite, u8 id); +u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer); #endif //GUARD_FIELD_EFFECTS_H diff --git a/include/trainer_pokemon_sprites.h b/include/trainer_pokemon_sprites.h index 3ae75ed0f..2a520715f 100644 --- a/include/trainer_pokemon_sprites.h +++ b/include/trainer_pokemon_sprites.h @@ -1,5 +1,5 @@ -#ifndef GUARD_BATTLE_DOME_CARDS_H -#define GUARD_BATTLE_DOME_CARDS_H +#ifndef GUARD_TRAINER_POKEMON_SPRITES_H +#define GUARD_TRAINER_POKEMON_SPRITES_H #include "global.h" @@ -13,5 +13,6 @@ u16 sub_818D938(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteS u8 sub_818D97C(u8 a0, u8 a1); u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); u16 FreeAndDestroyTrainerPicSprite(u16); +u16 PlayerGenderToFrontTrainerPicId_Debug(u8 gender, bool8 getClass); -#endif //GUARD_BATTLE_DOME_CARDS_H +#endif // GUARD_TRAINER_POKEMON_SPRITES_H diff --git a/ld_script.txt b/ld_script.txt index f3f580d0c..d9506d33f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -192,7 +192,6 @@ SECTIONS { src/coins.o(.text); src/fldeff_strength.o(.text); src/battle_transition.o(.text); - asm/battle_transition.o(.text); asm/battle_controller_link_partner.o(.text); asm/battle_message.o(.text); src/math_util.o(.text); diff --git a/src/battle_transition.c b/src/battle_transition.c index 311563a95..1ef54a925 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -6,11 +6,16 @@ #include "palette.h" #include "trig.h" #include "random.h" +#include "sound.h" +#include "decompress.h" #include "gpu_regs.h" #include "battle_transition.h" #include "field_effect.h" #include "field_weather.h" +#include "field_camera.h" +#include "trainer_pokemon_sprites.h" #include "scanline_effect.h" +#include "constants/songs.h" typedef bool8 (*TransitionStateFunc)(struct Task *task); typedef bool8 (*TransitionSpriteCallback)(struct Sprite *sprite); @@ -23,7 +28,7 @@ struct TransitionData u16 win0H; u16 win0V; u16 unused_A; - u16 unused_C; + u16 win1V; u16 bldCnt; u16 bldAlpha; u16 bldY; @@ -38,15 +43,6 @@ struct TransitionData s16 data[11]; // for multiple purposes }; -struct __attribute__((packed)) BlackDoodleSegment -{ - s16 startPtX; - s16 startPtY; - s16 endPtX; - s16 endPtY; - u16 whichSide; -}; - EWRAM_DATA struct TransitionData *sTransitionStructPtr = NULL; // TODO: Move this declaration to include/event_object_movement.h @@ -114,6 +110,7 @@ bool8 BT_Phase1Blink(struct Task *task); bool8 BT_WaitForPhase1(struct Task *task); bool8 BT_Phase2LaunchAnimTask(struct Task *task); bool8 BT_WaitForPhase2(struct Task *task); + void BT_Phase2Blur(u8 taskId); void BT_Phase2DistortedWave(u8 taskId); void BT_Phase2HorizontalCorrugate(u8 taskId); @@ -133,9 +130,12 @@ void BT_Phase2StartLanceMugshot(u8 taskId); void BT_Phase2StartBlueMugshot(u8 taskId); void BT_Phase2AntiClockwiseSpiral(u8 taskId); void BT_Phase1Task(u8 taskId); +void BT_Phase2Mugshot(u8 taskId); +void BT_Phase1SubTask(u8 taskId); void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite); void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite); +void SpriteCB_BT_Phase2WhiteFadeInStripes(struct Sprite *sprite); bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite); bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite); @@ -154,6 +154,16 @@ void VBCB_BT_Phase2ClockwiseBlackFade(void); void VBCB_BT_Phase2FullScreenWave(void); void HBCB_BT_Phase2FullScreenWave(void); void VBCB_BT_Phase2BlackWaveToRight(void); +void VBCB_BT_Phase2AntiClockwiseBlackFade(void); +void VBCB_BT_Phase2Mugshot1_Slide(void); +void VBCB_BT_Phase2Mugshot2_WhiteFade(void); +void HBCB_BT_Phase2Mugshot(void); +void VBCB_BT_Phase2SlicedScreen(void); +void HBCB_BT_Phase2SlicedScreen(void); +void VBCB_BT_Phase2WhiteFadeInStripes1(void); +void VBCB_BT_Phase2WhiteFadeInStripes2(void); +void HBCB_BT_Phase2WhiteFadeInStripes(void); +void VBCB_BT_Phase2BlackDoodles(void); void BT_LaunchTask(u8 transitionId); void BT_TaskMain(u8 taskId); @@ -161,12 +171,17 @@ void BT_InitCtrlBlk(void); void BT_CreatePhase1SubTask(s16 fadeOutDelay, s16 fadeInDelay, s16 blinkTimes, s16 fadeOutSpeed, s16 fadeInSpeed); bool8 BT_IsPhase1Done(void); void BT_VBSyncOamAndPltt(void); +void BT_GetBg0TilesetBase(u16 **tilesetPtr); void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr); void BT_LoadWaveIntoBuffer(s16 *buffer, s16 offset, s16 theta, s16 frequency, s16 amplitude, s16 bufSize); void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius); void BT_BlendPalettesToBlack(void); -void BT_DiagonalSegment_InitParams(s16 *buffer, s16 startPtX, s16 startPtY, s16 endPtX, s16 endPtY, s16 stepX, s16 stepY); +void BT_DiagonalSegment_InitParams(s16 *data, s16 startPtX, s16 startPtY, s16 endPtX, s16 endPtY, s16 stepX, s16 stepY); bool8 BT_DiagonalSegment_ComputePointOnSegment(s16 *data, bool8 checkBoundary1, bool8 checkBoundary2); +void BT_SetSpriteAsOpponentOrPlayer(s16 spriteId, bool16 value); +void BT_StartSpriteSlide(s16 spriteId); +s16 BT_IsSpriteSlideFinished(s16 spriteId); +void BT_Phase2Mugshots_CreateSprites(struct Task *task); const u32 sBigPokeballTileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball_tileset.4bpp"); const u32 sSlidingPokeballTilemap[] = INCBIN_U32("graphics/battle_transitions/sliding_pokeball_tilemap.bin"); @@ -174,7 +189,7 @@ const u8 sSpriteImage_SlidingPokeball[] = INCBIN_U8("graphics/battle_transitions const u32 sVsBarTileset[] = INCBIN_U32("graphics/battle_transitions/vsbar_tileset.4bpp"); const u8 sSpriteImage_UnusedBrendan[] = INCBIN_U8("graphics/battle_transitions/unused_brendan.4bpp"); const u8 sSpriteImage_UnusedLass[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp"); -const u32 sGridSquareTilemap[] = INCBIN_U32("graphics/battle_transitions/grid_square_tilemap.bin"); +const u32 sGridSquareTileset[] = INCBIN_U32("graphics/battle_transitions/grid_square_tileset.4bpp"); const TaskFunc sBT_Phase1Tasks[] = { @@ -398,57 +413,15 @@ const TransitionStateFunc sBT_Phase2BlackDoodlesFuncs[] = BT_Phase2BlackDoodles_NextBrush, }; -const struct BlackDoodleSegment sBlackDoodlesSegments[] = +const s16 sBlackDoodlesSegments[][5] = { - { - .startPtX = 0x38, - .startPtY = 0x0, - .endPtX = 0x0, - .endPtY = 0xA0, - .whichSide = 0, - }, - { - .startPtX = 0x68, - .startPtY = 0xA0, - .endPtX = 0xF0, - .endPtY = 0x58, - .whichSide = 1, - }, - { - .startPtX = 0xF0, - .startPtY = 0x48, - .endPtX = 0x38, - .endPtY = 0x0, - .whichSide = 1, - }, - { - .startPtX = 0x0, - .startPtY = 0x20, - .endPtX = 0x90, - .endPtY = 0xA0, - .whichSide = 0, - }, - { - .startPtX = 0x90, - .startPtY = 0xA0, - .endPtX = 0xB8, - .endPtY = 0x0, - .whichSide = 1, - }, - { - .startPtX = 0x38, - .startPtY = 0x0, - .endPtX = 0xA8, - .endPtY = 0xA0, - .whichSide = 0, - }, - { - .startPtX = 0xA8, - .startPtY = 0xA0, - .endPtX = 0x30, - .endPtY = 0x0, - .whichSide = 1, - }, + { 0x38, 0x00, 0x00, 0xA0, 0 }, + { 0x68, 0xA0, 0xF0, 0x58, 1 }, + { 0xF0, 0x48, 0x38, 0x00, 1 }, + { 0x00, 0x20, 0x90, 0xA0, 0 }, + { 0x90, 0xA0, 0xB8, 0x00, 1 }, + { 0x38, 0x00, 0xA8, 0xA0, 0 }, + { 0xA8, 0xA0, 0x30, 0x00, 1 }, }; const s16 sBlackDoodlesDelay[] = { 1, 1, 1, 1, 1, 1, 0 }; @@ -802,6 +775,7 @@ void VBCB_BT_Phase2DistortedWave(void) void HBCB_BT_Phase2DistortedWave(void) { s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + REG_BG1HOFS = offset; REG_BG2HOFS = offset; REG_BG3HOFS = offset; @@ -852,7 +826,8 @@ void VBCB_BT_Phase2HorizontalCorrugate(void) void HBCB_BT_Phase2HorizontalCorrugate(void) { - u16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + REG_BG1VOFS = offset; REG_BG2VOFS = offset; REG_BG3VOFS = offset; @@ -928,7 +903,7 @@ bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task) ++task->tState; task->tTheta += 12; task->tAmplitude -= 384; - // Assign a very high frequency value so that 2 adjacent values in gScanlineEffectRegBuffers[0] have different sign + // Assign a very high frequency value so that 2 adjacent values in gScanlineEffectRegBuffers[0] will have different sign. BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude >> 8, 160); ++sTransitionStructPtr->vblankDma; return FALSE; @@ -996,7 +971,7 @@ bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task) sTransitionStructPtr->vblankDma = FALSE; if (task->tDeltaRadius < 2048) task->tDeltaRadius += 256; - if (task->tRadius != 0) + if (task->tRadius) { task->tRadius -= (task->tDeltaRadius >> 8); if (task->tRadius < 0) @@ -1034,13 +1009,13 @@ void BT_VBStopDma0SyncSrcBufferSetLcdRegs(void) void VBCB_BT_Phase2BigPokeball1(void) { BT_VBStopDma0SyncSrcBufferSetLcdRegs(); - DmaSet(0, gScanlineEffectRegBuffers[1], ®_BG0HOFS, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_BG0HOFS, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); } void VBCB_BT_Phase2BigPokeball2(void) { BT_VBStopDma0SyncSrcBufferSetLcdRegs(); - DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); } #undef tRadius @@ -1354,7 +1329,7 @@ void VBCB_BT_Phase2ClockwiseBlackFade(void) SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); SetGpuReg(REG_OFFSET_WIN0H, gScanlineEffectRegBuffers[1][0]); - DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); } #undef trStartPtX @@ -1405,6 +1380,7 @@ bool8 BT_Phase2FullScreenWave_UpdateWave(struct Task *task) for (i = 0; i < 160; ++i, theta += frequency) { s16 var = theta >> 8; + #ifndef NONMATCHING asm(""); #endif @@ -1430,7 +1406,8 @@ void VBCB_BT_Phase2FullScreenWave(void) void HBCB_BT_Phase2FullScreenWave(void) { - u16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + REG_BG1VOFS = offset; REG_BG2VOFS = offset; REG_BG3VOFS = offset; @@ -1522,4 +1499,2007 @@ void BT_Phase2AntiClockwiseSpiral(u8 taskId) while (sBT_Phase2AntiClockwiseSpiralFuncs[gTasks[taskId].tState](&gTasks[taskId])); } +#ifdef NONMATCHING +void sub_80D1F64(s16 a1, s16 a2, bool8 a3) +{ + s16 elem; + + for (elem = 320; elem < NELEMS(gScanlineEffectRegBuffers[1]); ++elem) + gScanlineEffectRegBuffers[1][elem] = 120; + WILL DO IT LATER + LET ME RESOLVE OTHER STUFF FIRST + +} +#else +NAKED +void sub_80D1F64(s16 a1, s16 a2, bool8 a3) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x14\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp]\n\ + lsls r1, 16\n\ + lsrs r5, r1, 16\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + str r2, [sp, 0x4]\n\ + movs r0, 0\n\ + mov r10, r0\n\ + movs r1, 0xA0\n\ + lsls r1, 17\n\ + ldr r4, _080D1FD8 @ =gScanlineEffectRegBuffers + 0x780\n\ + ldr r3, _080D1FDC @ =0x000003bf\n\ + movs r2, 0x78\n\ + _080D1F8E:\n\ + asrs r0, r1, 16\n\ + lsls r1, r0, 1\n\ + adds r1, r4\n\ + strh r2, [r1]\n\ + adds r0, 0x1\n\ + lsls r1, r0, 16\n\ + asrs r0, r1, 16\n\ + cmp r0, r3\n\ + ble _080D1F8E\n\ + lsls r0, r5, 16\n\ + movs r1, 0\n\ + mov r9, r1\n\ + str r0, [sp, 0xC]\n\ + cmp r0, 0\n\ + bgt _080D1FAE\n\ + b _080D221A\n\ + _080D1FAE:\n\ + mov r3, r10\n\ + lsrs r2, r3, 3\n\ + ldr r4, [sp]\n\ + adds r0, r2, r4\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + mov r0, r10\n\ + adds r0, 0x1\n\ + asrs r1, r0, 3\n\ + str r0, [sp, 0x8]\n\ + cmp r2, r1\n\ + beq _080D1FE0\n\ + lsls r1, r3, 16\n\ + movs r6, 0x80\n\ + lsls r6, 9\n\ + adds r0, r1, r6\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + adds r0, r1, 0\n\ + b _080D1FE6\n\ + .align 2, 0\n\ + _080D1FD8: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D1FDC: .4byte 0x000003bf\n\ + _080D1FE0:\n\ + lsls r0, r3, 16\n\ + lsrs r1, r0, 16\n\ + mov r8, r1\n\ + _080D1FE6:\n\ + asrs r4, r0, 16\n\ + mov r0, r10\n\ + adds r1, r4, 0\n\ + bl Sin\n\ + movs r5, 0x50\n\ + subs r0, r5, r0\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + mov r0, r10\n\ + adds r1, r4, 0\n\ + str r2, [sp, 0x10]\n\ + bl Cos\n\ + adds r0, 0x78\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + ldr r6, [sp, 0x8]\n\ + mov r3, r8\n\ + lsls r4, r3, 16\n\ + asrs r4, 16\n\ + adds r0, r6, 0\n\ + adds r1, r4, 0\n\ + bl Sin\n\ + subs r5, r0\n\ + lsls r5, 16\n\ + lsrs r5, 16\n\ + adds r0, r6, 0\n\ + adds r1, r4, 0\n\ + bl Cos\n\ + adds r0, 0x78\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + ldr r2, [sp, 0x10]\n\ + lsls r0, r2, 16\n\ + asrs r1, r0, 16\n\ + cmp r1, 0\n\ + bge _080D203E\n\ + lsls r0, r5, 16\n\ + cmp r0, 0\n\ + bge _080D203E\n\ + b _080D21F8\n\ + _080D203E:\n\ + cmp r1, 0x9F\n\ + ble _080D204C\n\ + lsls r0, r5, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x9F\n\ + ble _080D204C\n\ + b _080D21F8\n\ + _080D204C:\n\ + cmp r1, 0\n\ + bge _080D2052\n\ + movs r2, 0\n\ + _080D2052:\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x9F\n\ + ble _080D205C\n\ + movs r2, 0x9F\n\ + _080D205C:\n\ + lsls r0, r7, 16\n\ + cmp r0, 0\n\ + bge _080D2064\n\ + movs r7, 0\n\ + _080D2064:\n\ + lsls r0, r7, 16\n\ + asrs r0, 16\n\ + cmp r0, 0xFF\n\ + ble _080D206E\n\ + movs r7, 0xFF\n\ + _080D206E:\n\ + lsls r0, r5, 16\n\ + cmp r0, 0\n\ + bge _080D2076\n\ + movs r5, 0\n\ + _080D2076:\n\ + lsls r0, r5, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x9F\n\ + ble _080D2080\n\ + movs r5, 0x9F\n\ + _080D2080:\n\ + lsls r0, r3, 16\n\ + cmp r0, 0\n\ + bge _080D2088\n\ + movs r3, 0\n\ + _080D2088:\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + cmp r0, 0xFF\n\ + ble _080D2092\n\ + movs r3, 0xFF\n\ + _080D2092:\n\ + lsls r0, r5, 16\n\ + asrs r0, 16\n\ + lsls r1, r2, 16\n\ + asrs r2, r1, 16\n\ + subs r0, r2\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + mov r0, r10\n\ + subs r0, 0x40\n\ + lsls r0, 24\n\ + adds r6, r1, 0\n\ + cmp r0, 0\n\ + blt _080D2158\n\ + movs r4, 0xA0\n\ + lsls r4, 1\n\ + adds r0, r2, r4\n\ + lsls r0, 1\n\ + ldr r1, _080D20E8 @ =gScanlineEffectRegBuffers + 0x780\n\ + adds r0, r1\n\ + strh r7, [r0]\n\ + lsls r0, r5, 16\n\ + adds r4, r0, 0\n\ + cmp r4, 0\n\ + bne _080D20C4\n\ + b _080D21F8\n\ + _080D20C4:\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + lsls r1, r7, 16\n\ + asrs r2, r1, 16\n\ + subs r0, r2\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + asrs r0, 16\n\ + mov r8, r0\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r8, r0\n\ + bge _080D20EC\n\ + cmp r2, 0x1\n\ + ble _080D20EC\n\ + subs r0, r2, 0x1\n\ + b _080D20FC\n\ + .align 2, 0\n\ + _080D20E8: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D20EC:\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x1\n\ + ble _080D2100\n\ + asrs r0, r1, 16\n\ + cmp r0, 0xFE\n\ + bgt _080D2100\n\ + adds r0, 0x1\n\ + _080D20FC:\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + _080D2100:\n\ + adds r0, r4, 0\n\ + asrs r1, r0, 16\n\ + cmp r1, 0\n\ + bge _080D212C\n\ + asrs r2, r6, 16\n\ + ldr r3, _080D2128 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D210C:\n\ + asrs r1, r0, 16\n\ + adds r0, r2, r1\n\ + movs r4, 0xA0\n\ + lsls r4, 1\n\ + adds r0, r4\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + strh r7, [r0]\n\ + adds r1, 0x1\n\ + lsls r0, r1, 16\n\ + cmp r0, 0\n\ + blt _080D210C\n\ + b _080D21F8\n\ + .align 2, 0\n\ + _080D2128: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D212C:\n\ + cmp r1, 0\n\ + ble _080D21F8\n\ + asrs r2, r6, 16\n\ + ldr r3, _080D2154 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D2134:\n\ + lsls r1, r5, 16\n\ + asrs r1, 16\n\ + adds r0, r2, r1\n\ + movs r6, 0xA0\n\ + lsls r6, 1\n\ + adds r0, r6\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + strh r7, [r0]\n\ + subs r1, 0x1\n\ + lsls r1, 16\n\ + lsrs r5, r1, 16\n\ + cmp r1, 0\n\ + bgt _080D2134\n\ + b _080D21F8\n\ + .align 2, 0\n\ + _080D2154: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D2158:\n\ + movs r1, 0xF0\n\ + lsls r1, 1\n\ + adds r0, r2, r1\n\ + lsls r0, 1\n\ + ldr r2, _080D2190 @ =gScanlineEffectRegBuffers + 0x780\n\ + adds r0, r2\n\ + strh r7, [r0]\n\ + lsls r0, r5, 16\n\ + adds r4, r0, 0\n\ + cmp r4, 0\n\ + beq _080D21F8\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + lsls r1, r7, 16\n\ + asrs r2, r1, 16\n\ + subs r0, r2\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + asrs r0, 16\n\ + mov r8, r0\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r8, r0\n\ + bge _080D2194\n\ + cmp r2, 0x1\n\ + ble _080D2194\n\ + subs r0, r2, 0x1\n\ + b _080D21A4\n\ + .align 2, 0\n\ + _080D2190: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D2194:\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x1\n\ + ble _080D21A8\n\ + asrs r0, r1, 16\n\ + cmp r0, 0xFE\n\ + bgt _080D21A8\n\ + adds r0, 0x1\n\ + _080D21A4:\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + _080D21A8:\n\ + adds r0, r4, 0\n\ + asrs r1, r0, 16\n\ + cmp r1, 0\n\ + bge _080D21D4\n\ + asrs r2, r6, 16\n\ + ldr r3, _080D21D0 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D21B4:\n\ + asrs r1, r0, 16\n\ + adds r0, r2, r1\n\ + movs r4, 0xF0\n\ + lsls r4, 1\n\ + adds r0, r4\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + strh r7, [r0]\n\ + adds r1, 0x1\n\ + lsls r0, r1, 16\n\ + cmp r0, 0\n\ + blt _080D21B4\n\ + b _080D21F8\n\ + .align 2, 0\n\ + _080D21D0: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D21D4:\n\ + cmp r1, 0\n\ + ble _080D21F8\n\ + asrs r2, r6, 16\n\ + ldr r3, _080D2270 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D21DC:\n\ + lsls r1, r5, 16\n\ + asrs r1, 16\n\ + adds r0, r2, r1\n\ + movs r6, 0xF0\n\ + lsls r6, 1\n\ + adds r0, r6\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + strh r7, [r0]\n\ + subs r1, 0x1\n\ + lsls r1, 16\n\ + lsrs r5, r1, 16\n\ + cmp r1, 0\n\ + bgt _080D21DC\n\ + _080D21F8:\n\ + mov r1, r9\n\ + lsls r0, r1, 16\n\ + movs r2, 0x80\n\ + lsls r2, 9\n\ + adds r0, r2\n\ + ldr r3, [sp, 0x8]\n\ + lsls r1, r3, 24\n\ + lsrs r1, 24\n\ + mov r10, r1\n\ + lsrs r4, r0, 16\n\ + mov r9, r4\n\ + asrs r0, 16\n\ + ldr r6, [sp, 0xC]\n\ + asrs r1, r6, 12\n\ + cmp r0, r1\n\ + bge _080D221A\n\ + b _080D1FAE\n\ + _080D221A:\n\ + ldr r0, [sp, 0x4]\n\ + cmp r0, 0\n\ + beq _080D222C\n\ + movs r0, 0xC0\n\ + lsls r0, 10\n\ + ldr r1, [sp, 0xC]\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080D2274\n\ + _080D222C:\n\ + movs r2, 0\n\ + mov r9, r2\n\ + ldr r4, _080D2270 @ =gScanlineEffectRegBuffers + 0x780\n\ + movs r5, 0xA0\n\ + lsls r5, 1\n\ + _080D2236:\n\ + mov r3, r9\n\ + lsls r1, r3, 16\n\ + asrs r1, 16\n\ + lsls r3, r1, 1\n\ + ldr r6, [sp, 0x4]\n\ + adds r3, r6\n\ + lsls r3, 1\n\ + adds r3, r4\n\ + adds r0, r1, r5\n\ + lsls r0, 1\n\ + adds r0, r4\n\ + ldrh r2, [r0]\n\ + lsls r2, 8\n\ + movs r6, 0xF0\n\ + lsls r6, 1\n\ + adds r0, r1, r6\n\ + lsls r0, 1\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + orrs r2, r0\n\ + strh r2, [r3]\n\ + adds r1, 0x1\n\ + lsls r1, 16\n\ + lsrs r0, r1, 16\n\ + mov r9, r0\n\ + asrs r1, 16\n\ + cmp r1, 0x9F\n\ + ble _080D2236\n\ + b _080D251C\n\ + .align 2, 0\n\ + _080D2270: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D2274:\n\ + ldr r1, [sp, 0xC]\n\ + asrs r4, r1, 16\n\ + lsls r0, r4, 20\n\ + asrs r0, 16\n\ + lsls r5, r4, 1\n\ + ldr r2, [sp]\n\ + lsls r1, r2, 16\n\ + asrs r1, 16\n\ + adds r1, r5\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + bl Sin\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r4, 0\n\ + bge _080D2298\n\ + adds r4, 0x3\n\ + _080D2298:\n\ + asrs r0, r4, 2\n\ + cmp r0, 0x1\n\ + beq _080D234C\n\ + cmp r0, 0x1\n\ + bgt _080D22A8\n\ + cmp r0, 0\n\ + beq _080D22B6\n\ + b _080D24DA\n\ + _080D22A8:\n\ + cmp r0, 0x2\n\ + bne _080D22AE\n\ + b _080D23CC\n\ + _080D22AE:\n\ + cmp r0, 0x3\n\ + bne _080D22B4\n\ + b _080D2466\n\ + _080D22B4:\n\ + b _080D24DA\n\ + _080D22B6:\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x50\n\ + ble _080D22C0\n\ + movs r2, 0x50\n\ + _080D22C0:\n\ + mov r9, r2\n\ + lsls r1, r2, 16\n\ + cmp r1, 0\n\ + bgt _080D22CA\n\ + b _080D24DA\n\ + _080D22CA:\n\ + ldr r0, _080D2320 @ =gUnknown_83FA444\n\ + adds r0, r5, r0\n\ + movs r3, 0\n\ + ldrsh r4, [r0, r3]\n\ + ldr r6, _080D2324 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D22D4:\n\ + ldr r0, _080D2328 @ =sTransitionStructPtr\n\ + ldr r5, [r0]\n\ + asrs r2, r1, 16\n\ + adds r0, r2, 0\n\ + muls r0, r4\n\ + asrs r0, 8\n\ + adds r0, 0x78\n\ + lsls r1, r0, 16\n\ + lsrs r7, r1, 16\n\ + strh r0, [r5, 0x28]\n\ + lsls r1, r7, 16\n\ + lsrs r0, r1, 16\n\ + cmp r0, 0xFF\n\ + bhi _080D2334\n\ + movs r3, 0xC8\n\ + lsls r3, 1\n\ + adds r0, r3, 0\n\ + subs r0, r2\n\ + strh r0, [r5, 0x14]\n\ + adds r0, r3, 0\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + adds r3, r0, r6\n\ + ldrh r0, [r3]\n\ + strh r0, [r5, 0x38]\n\ + movs r0, 0x8C\n\ + lsls r0, 2\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + adds r2, r0, r6\n\ + ldrh r0, [r2]\n\ + asrs r1, 16\n\ + cmp r0, r1\n\ + bge _080D232C\n\ + movs r0, 0x78\n\ + strh r0, [r2]\n\ + b _080D2334\n\ + .align 2, 0\n\ + _080D2320: .4byte gUnknown_83FA444\n\ + _080D2324: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D2328: .4byte sTransitionStructPtr\n\ + _080D232C:\n\ + ldrh r0, [r3]\n\ + cmp r0, r1\n\ + bge _080D2334\n\ + strh r7, [r3]\n\ + _080D2334:\n\ + mov r1, r9\n\ + lsls r0, r1, 16\n\ + ldr r2, _080D2348 @ =0xffff0000\n\ + adds r0, r2\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + lsls r1, r0, 16\n\ + cmp r1, 0\n\ + bgt _080D22D4\n\ + b _080D24DA\n\ + .align 2, 0\n\ + _080D2348: .4byte 0xffff0000\n\ + _080D234C:\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x50\n\ + ble _080D2356\n\ + movs r2, 0x50\n\ + _080D2356:\n\ + mov r9, r2\n\ + lsls r1, r2, 16\n\ + cmp r1, 0\n\ + bgt _080D2360\n\ + b _080D24DA\n\ + _080D2360:\n\ + ldr r0, _080D23BC @ =gUnknown_83FA444\n\ + adds r0, r5, r0\n\ + movs r3, 0\n\ + ldrsh r4, [r0, r3]\n\ + ldr r6, _080D23C0 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D236A:\n\ + ldr r0, _080D23C4 @ =sTransitionStructPtr\n\ + ldr r3, [r0]\n\ + asrs r2, r1, 16\n\ + adds r0, r2, 0\n\ + muls r0, r4\n\ + asrs r0, 8\n\ + adds r0, 0x78\n\ + lsls r1, r0, 16\n\ + lsrs r7, r1, 16\n\ + strh r0, [r3, 0x28]\n\ + lsls r5, r7, 16\n\ + lsrs r0, r5, 16\n\ + cmp r0, 0xFF\n\ + bhi _080D23A6\n\ + movs r1, 0xC8\n\ + lsls r1, 1\n\ + adds r0, r1, 0\n\ + subs r0, r2\n\ + strh r0, [r3, 0x14]\n\ + adds r0, r1, 0\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + adds r2, r0, r6\n\ + ldrh r0, [r2]\n\ + strh r0, [r3, 0x38]\n\ + ldrh r1, [r2]\n\ + asrs r0, r5, 16\n\ + cmp r1, r0\n\ + bge _080D23A6\n\ + strh r7, [r2]\n\ + _080D23A6:\n\ + mov r2, r9\n\ + lsls r0, r2, 16\n\ + ldr r3, _080D23C8 @ =0xffff0000\n\ + adds r0, r3\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + lsls r1, r0, 16\n\ + cmp r1, 0\n\ + bgt _080D236A\n\ + b _080D24DA\n\ + .align 2, 0\n\ + _080D23BC: .4byte gUnknown_83FA444\n\ + _080D23C0: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D23C4: .4byte sTransitionStructPtr\n\ + _080D23C8: .4byte 0xffff0000\n\ + _080D23CC:\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + movs r1, 0x4F\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + bge _080D23DA\n\ + ldr r2, _080D2438 @ =0x0000ffb1\n\ + _080D23DA:\n\ + mov r9, r2\n\ + lsls r1, r2, 16\n\ + cmp r1, 0\n\ + bgt _080D24DA\n\ + ldr r0, _080D243C @ =gUnknown_83FA444\n\ + adds r0, r5, r0\n\ + movs r6, 0\n\ + ldrsh r4, [r0, r6]\n\ + ldr r6, _080D2440 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D23EC:\n\ + ldr r0, _080D2444 @ =sTransitionStructPtr\n\ + ldr r5, [r0]\n\ + asrs r2, r1, 16\n\ + adds r0, r2, 0\n\ + muls r0, r4\n\ + asrs r0, 8\n\ + adds r0, 0x78\n\ + lsls r1, r0, 16\n\ + lsrs r7, r1, 16\n\ + strh r0, [r5, 0x28]\n\ + lsls r1, r7, 16\n\ + lsrs r0, r1, 16\n\ + cmp r0, 0xFF\n\ + bhi _080D2450\n\ + movs r3, 0x8C\n\ + lsls r3, 2\n\ + adds r0, r3, 0\n\ + subs r0, r2\n\ + strh r0, [r5, 0x14]\n\ + adds r0, r3, 0\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + adds r3, r0, r6\n\ + ldrh r0, [r3]\n\ + strh r0, [r5, 0x38]\n\ + movs r0, 0xC8\n\ + lsls r0, 1\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + adds r2, r0, r6\n\ + ldrh r0, [r2]\n\ + asrs r1, 16\n\ + cmp r0, r1\n\ + blt _080D2448\n\ + movs r0, 0x78\n\ + strh r0, [r2]\n\ + b _080D2450\n\ + .align 2, 0\n\ + _080D2438: .4byte 0x0000ffb1\n\ + _080D243C: .4byte gUnknown_83FA444\n\ + _080D2440: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D2444: .4byte sTransitionStructPtr\n\ + _080D2448:\n\ + ldrh r0, [r3]\n\ + cmp r0, r1\n\ + ble _080D2450\n\ + strh r7, [r3]\n\ + _080D2450:\n\ + mov r1, r9\n\ + lsls r0, r1, 16\n\ + movs r2, 0x80\n\ + lsls r2, 9\n\ + adds r0, r2\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + lsls r1, r0, 16\n\ + cmp r1, 0\n\ + ble _080D23EC\n\ + b _080D24DA\n\ + _080D2466:\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + movs r1, 0x4F\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + bge _080D2474\n\ + ldr r2, _080D252C @ =0x0000ffb1\n\ + _080D2474:\n\ + mov r9, r2\n\ + lsls r1, r2, 16\n\ + cmp r1, 0\n\ + bgt _080D24DA\n\ + ldr r0, _080D2530 @ =gUnknown_83FA444\n\ + adds r0, r5, r0\n\ + movs r3, 0\n\ + ldrsh r4, [r0, r3]\n\ + ldr r6, _080D2534 @ =sTransitionStructPtr\n\ + mov r8, r6\n\ + ldr r6, _080D2538 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D248A:\n\ + mov r0, r8\n\ + ldr r3, [r0]\n\ + asrs r2, r1, 16\n\ + adds r0, r2, 0\n\ + muls r0, r4\n\ + asrs r0, 8\n\ + adds r0, 0x78\n\ + lsls r1, r0, 16\n\ + lsrs r7, r1, 16\n\ + strh r0, [r3, 0x28]\n\ + lsls r5, r7, 16\n\ + lsrs r0, r5, 16\n\ + cmp r0, 0xFF\n\ + bhi _080D24C6\n\ + movs r1, 0x8C\n\ + lsls r1, 2\n\ + adds r0, r1, 0\n\ + subs r0, r2\n\ + strh r0, [r3, 0x14]\n\ + adds r0, r1, 0\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + adds r2, r0, r6\n\ + ldrh r0, [r2]\n\ + strh r0, [r3, 0x38]\n\ + ldrh r1, [r2]\n\ + asrs r0, r5, 16\n\ + cmp r1, r0\n\ + ble _080D24C6\n\ + strh r7, [r2]\n\ + _080D24C6:\n\ + mov r2, r9\n\ + lsls r0, r2, 16\n\ + movs r3, 0x80\n\ + lsls r3, 9\n\ + adds r0, r3\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + lsls r1, r0, 16\n\ + cmp r1, 0\n\ + ble _080D248A\n\ + _080D24DA:\n\ + movs r4, 0\n\ + mov r9, r4\n\ + ldr r4, _080D2538 @ =gScanlineEffectRegBuffers + 0x780\n\ + movs r5, 0xA0\n\ + lsls r5, 1\n\ + _080D24E4:\n\ + mov r6, r9\n\ + lsls r1, r6, 16\n\ + asrs r1, 16\n\ + lsls r3, r1, 1\n\ + ldr r0, [sp, 0x4]\n\ + adds r3, r0\n\ + lsls r3, 1\n\ + adds r3, r4\n\ + adds r0, r1, r5\n\ + lsls r0, 1\n\ + adds r0, r4\n\ + ldrh r2, [r0]\n\ + lsls r2, 8\n\ + movs r6, 0xF0\n\ + lsls r6, 1\n\ + adds r0, r1, r6\n\ + lsls r0, 1\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + orrs r2, r0\n\ + strh r2, [r3]\n\ + adds r1, 0x1\n\ + lsls r1, 16\n\ + lsrs r0, r1, 16\n\ + mov r9, r0\n\ + asrs r1, 16\n\ + cmp r1, 0x9F\n\ + ble _080D24E4\n\ + _080D251C:\n\ + add sp, 0x14\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ + _080D252C: .4byte 0x0000ffb1\n\ + _080D2530: .4byte gUnknown_83FA444\n\ + _080D2534: .4byte sTransitionStructPtr\n\ + _080D2538: .4byte gScanlineEffectRegBuffers + 0x780\n\ + "); +} +#endif + +bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task) +{ + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + sTransitionStructPtr->winIn = 0; + sTransitionStructPtr->winOut = 0x3F; + sTransitionStructPtr->win0H = 0x7878; + sTransitionStructPtr->win0V = 0x3070; + sTransitionStructPtr->win1V = 0x1090; + sTransitionStructPtr->counter = 0; + sub_80D1F64(0, 0, FALSE); + sub_80D1F64(0, 0, TRUE); + DmaCopy16(3, gScanlineEffectRegBuffers[1], gScanlineEffectRegBuffers[0], 640); + SetVBlankCallback(VBCB_BT_Phase2AntiClockwiseBlackFade); + ++task->tState; + task->data[1] = 0; + task->data[2] = 0; + return FALSE; +} + +bool8 BT_Phase2AntiClockwiseSpiral_Update(struct Task *task) +{ + s16 v0, v1; + + sub_80D1F64(task->data[2], task->data[1], TRUE); + sTransitionStructPtr->vblankDma |= TRUE; + if (++task->data[1] == 17) + { + sub_80D1F64(task->data[2], 16, FALSE); + v0 = 48 - task->data[2]; + if (v0 < 0) + v0 = 0; + v1 = task->data[2] + 112; + if (v1 > 255) + v1 = 255; + sTransitionStructPtr->win0V = v0 | v1; + task->data[2] += 32; + task->data[1] = 0; + sub_80D1F64(task->data[2], 0, TRUE); + v0 = 48 - task->data[2]; + if (v0 < 0) + v0 = 0; + v1 = task->data[2] + 112; + if (v1 > 255) + v1 = 255; + sTransitionStructPtr->win1V = v0 | v1; + sTransitionStructPtr->vblankDma |= TRUE; + if (task->data[2] > 159) + { + sTransitionStructPtr->counter = 1; + BT_BlendPalettesToBlack(); + } + } + return FALSE; +} + +void VBCB_BT_Phase2AntiClockwiseBlackFade(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->counter) + { + DestroyTask(FindTaskIdByFunc(BT_Phase2AntiClockwiseSpiral)); + } + else + { + if (sTransitionStructPtr->vblankDma) + { + DmaCopy16(3, gScanlineEffectRegBuffers[1], gScanlineEffectRegBuffers[0], 640); + sTransitionStructPtr->vblankDma = FALSE; + } + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + SetGpuReg(REG_OFFSET_WIN1V, sTransitionStructPtr->win1V); + SetGpuReg(REG_OFFSET_WIN0H, gScanlineEffectRegBuffers[0][0]); + SetGpuReg(REG_OFFSET_WIN1H, gScanlineEffectRegBuffers[0][1]); + DmaSet(0, gScanlineEffectRegBuffers[0], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + } +} + +#define tTheta data[1] +#define tbg0HOfsOpponent data[2] +#define tbg0HOfsPlayer data[3] +#define tCounter data[3] +#define tHalfBandwidth data[4] +#define tOpponentSpriteId data[13] +#define tPlayerSpriteId data[14] +#define tWhichMugshot data[15] + +#define spState data[0] +#define spSpeed data[1] +#define spAbsAcc data[2] +#define sphasSlideFinished data[6] +#define spOpponentOrPlayer data[7] + +void BT_Phase2StartLoreleiMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_LORELEI; + BT_Phase2Mugshot(taskId); +} + +void BT_Phase2StartBrunoMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_BRUNO; + BT_Phase2Mugshot(taskId); +} + +void BT_Phase2StartAgathaMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_AGATHA; + BT_Phase2Mugshot(taskId); +} + +void BT_Phase2StartLanceMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_LANCE; + BT_Phase2Mugshot(taskId); +} + +void BT_Phase2StartBlueMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_BLUE; + BT_Phase2Mugshot(taskId); +} + +void BT_Phase2Mugshot(u8 taskId) +{ + while (sBT_Phase2MugshotFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase2Mugshot_Init(struct Task *task) +{ + u8 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + BT_Phase2Mugshots_CreateSprites(task); + task->tTheta = 0; + task->tbg0HOfsOpponent = 1; + task->tbg0HOfsPlayer = 239; + sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winOut = 0x3E; + sTransitionStructPtr->win0V = 160; + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[1][i] = 0xF0F1; + SetVBlankCallback(VBCB_BT_Phase2Mugshot1_Slide); + ++task->tState; + return FALSE; +} + +bool8 BT_Phase2Mugshot_LoadGfx(struct Task *task) +{ + s16 i, j; + u16 *tilemapAddr, *tilesetAddr; + const u16 *mugshotsMap = sVsBarTilemap; + + BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); + CpuSet(sVsBarTileset, tilesetAddr, 0xF0); + LoadPalette(sVsBarOpponentPalettes[task->tWhichMugshot], 0xF0, 0x20); + LoadPalette(sVsBarPlayerPalettes[gSaveBlock2Ptr->playerGender], 0xFA, 0xC); + for (i = 0; i < 20; ++i) + for (j = 0; j < 32; ++j, ++mugshotsMap) + tilemapAddr[i * 32 + j] = *mugshotsMap | 0xF000; // use palette #15 + EnableInterrupts(INTR_FLAG_HBLANK); + SetHBlankCallback(HBCB_BT_Phase2Mugshot); + ++task->tState; + return FALSE; +} + +bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task) +{ + u8 i, theta; + u16* toStore; + s16 value; + s32 mergedBg0hOfs; + + sTransitionStructPtr->vblankDma = FALSE; + + toStore = gScanlineEffectRegBuffers[0]; + theta = task->tTheta; + task->tTheta += 0x10; + for (i = 0; i < 80; ++i, ++toStore, theta += 0x10) + { + value = task->tbg0HOfsOpponent + Sin(theta, 0x10); + if (value < 0) + value = 1; + if (value > 0xF0) + value = 0xF0; + *toStore = value; + } + for (; i < 160; ++i, ++toStore, theta += 0x10) + { + value = task->tCounter - Sin(theta, 0x10); + if (value < 0) + value = 0; + if (value > 0xEF) + value = 0xEF; + *toStore = (value << 8) | (0xF0); + } + task->tbg0HOfsOpponent += 8; + task->tCounter -= 8; + if (task->tbg0HOfsOpponent > 0xF0) + task->tbg0HOfsOpponent = 0xF0; + if (task->tCounter < 0) + task->tCounter = 0; + mergedBg0hOfs = *(s32*)(&task->tbg0HOfsOpponent); + if (mergedBg0hOfs == 0x00F0) + ++task->tState; + sTransitionStructPtr->bg0HOfsOpponent -= 8; + sTransitionStructPtr->bg0HOfsPlayer += 8; + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2Mugshot_StartSpriteSlide(struct Task *task) +{ + u8 i; + u16* toStore; + + sTransitionStructPtr->vblankDma = FALSE; + for (i = 0, toStore = gScanlineEffectRegBuffers[0]; i < 160; ++i, ++toStore) + *toStore = 0xF0; + ++task->tState; + task->tTheta = 0; + task->tbg0HOfsOpponent = 0; + task->tbg0HOfsPlayer = 0; + sTransitionStructPtr->bg0HOfsOpponent -= 8; + sTransitionStructPtr->bg0HOfsPlayer += 8; + BT_SetSpriteAsOpponentOrPlayer(task->tOpponentSpriteId, FALSE); + BT_SetSpriteAsOpponentOrPlayer(task->tPlayerSpriteId, TRUE); + BT_StartSpriteSlide(task->tOpponentSpriteId); + PlaySE(SE_C_MAKU_U); + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2Mugshot_WaitForOpponentInPlace(struct Task *task) +{ + sTransitionStructPtr->bg0HOfsOpponent -= 8; + sTransitionStructPtr->bg0HOfsPlayer += 8; + if (BT_IsSpriteSlideFinished(task->tOpponentSpriteId)) + { + ++task->tState; + BT_StartSpriteSlide(task->tPlayerSpriteId); + } + return FALSE; +} + +bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task) +{ + sTransitionStructPtr->bg0HOfsOpponent -= 8; + sTransitionStructPtr->bg0HOfsPlayer += 8; + if (BT_IsSpriteSlideFinished(task->tPlayerSpriteId)) + { + sTransitionStructPtr->vblankDma = FALSE; + SetVBlankCallback(NULL); + DmaStop(0); + memset(gScanlineEffectRegBuffers[0], 0, 320); + memset(gScanlineEffectRegBuffers[1], 0, 320); + SetGpuReg(REG_OFFSET_WIN0H, 0xF0); + SetGpuReg(REG_OFFSET_BLDY, 0); + ++task->tState; + task->tCounter = 0; + task->tHalfBandwidth = 0; + sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN; + SetVBlankCallback(VBCB_BT_Phase2Mugshot2_WhiteFade); + } + return FALSE; +} + +bool8 BT_Phase2Mugshot_ExpandWhiteBand(struct Task *task) +{ + bool32 nextFunc; + + sTransitionStructPtr->vblankDma = FALSE; + nextFunc = TRUE; + sTransitionStructPtr->bg0HOfsOpponent -= 8; + sTransitionStructPtr->bg0HOfsPlayer += 8; + if (task->tHalfBandwidth < 80) + task->tHalfBandwidth += 2; + if (task->tHalfBandwidth > 80) + task->tHalfBandwidth = 80; + if (++task->tCounter & 1) + { + s16 i; + + for (i = 0, nextFunc = FALSE; i <= task->tHalfBandwidth; ++i) + { + s16 y1 = 80 - i; + s16 y2 = 80 + i; + + if (gScanlineEffectRegBuffers[0][y1] <= 15) + { + nextFunc = TRUE; + ++gScanlineEffectRegBuffers[0][y1]; + } + if (gScanlineEffectRegBuffers[0][y2] <= 15) + { + nextFunc = TRUE; + ++gScanlineEffectRegBuffers[0][y2]; + } + } + } + if (task->tHalfBandwidth == 80 && !nextFunc) + ++task->tState; + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2Mugshot_StartBlackFade(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE); + sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN; + task->tCounter = 0; + ++task->tState; + return TRUE; +} + +bool8 BT_Phase2Mugshot_WaitForBlackFade(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + ++task->tCounter; + memset(gScanlineEffectRegBuffers[0], task->tCounter, 320); + if (task->tCounter > 15) + ++task->tState; + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2Mugshot_End(struct Task *task) +{ + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(task->func)); + return FALSE; +} + +void VBCB_BT_Phase2Mugshot1_Slide(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + SetGpuReg(REG_OFFSET_BG0VOFS, sTransitionStructPtr->bg0VOfs); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +void VBCB_BT_Phase2Mugshot2_WhiteFade(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + SetGpuReg(REG_OFFSET_BLDCNT, sTransitionStructPtr->bldCnt); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_BLDY, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +void HBCB_BT_Phase2Mugshot(void) +{ + if (REG_VCOUNT < 80) + REG_BG0HOFS = sTransitionStructPtr->bg0HOfsOpponent; + else + REG_BG0HOFS = sTransitionStructPtr->bg0HOfsPlayer; +} + + +void BT_Phase2Mugshots_CreateSprites(struct Task *task) +{ + struct Sprite *opponentSprite, *playerSprite; + s16 mugshotId; + + gReservedSpritePaletteCount = 10; + mugshotId = task->tWhichMugshot; + task->tOpponentSpriteId = CreateTrainerSprite(sMugshotsTrainerPicIDsTable[mugshotId], sMugshotsOpponentCoords[mugshotId][0] - 32, sMugshotsOpponentCoords[mugshotId][1] + 42, 0, gDecompressionBuffer); + task->tPlayerSpriteId = CreateTrainerSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 272, 106, 0, gDecompressionBuffer); + gReservedSpritePaletteCount = 12; + opponentSprite = &gSprites[task->tOpponentSpriteId]; + playerSprite = &gSprites[task->tPlayerSpriteId]; + opponentSprite->callback = SpriteCB_BT_Phase2Mugshots; + playerSprite->callback = SpriteCB_BT_Phase2Mugshots; + opponentSprite->oam.affineMode = 3; + playerSprite->oam.affineMode = 3; + opponentSprite->oam.matrixNum = AllocOamMatrix(); + playerSprite->oam.matrixNum = AllocOamMatrix(); + opponentSprite->oam.shape = 1; + playerSprite->oam.shape = 1; + opponentSprite->oam.size = 3; + playerSprite->oam.size = 3; + CalcCenterToCornerVec(opponentSprite, 1, 3, 3); + CalcCenterToCornerVec(playerSprite, 1, 3, 3); + SetOamMatrixRotationScaling(opponentSprite->oam.matrixNum, sMugshotsOpponentRotationScales[mugshotId][0], sMugshotsOpponentRotationScales[mugshotId][1], 0); + SetOamMatrixRotationScaling(playerSprite->oam.matrixNum, -512, 512, 0); +} + +void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite) +{ + while (sBT_Phase2MugshotSpriteFuncs[sprite->spState](sprite)); +} + +bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite) +{ + return FALSE; +} + +bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite) +{ + s16 arr0[2]; + s16 arr1[2]; + + memcpy(arr0, sMugShotSlideVelocity, sizeof(sMugShotSlideVelocity)); + memcpy(arr1, sMugShotSlideDeceleration, sizeof(sMugShotSlideDeceleration)); + ++sprite->spState; + sprite->spSpeed = arr0[sprite->spOpponentOrPlayer]; + sprite->spAbsAcc = arr1[sprite->spOpponentOrPlayer]; + return TRUE; +} + +bool8 BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn(struct Sprite *sprite) +{ + sprite->pos1.x += sprite->spSpeed; + if (sprite->spOpponentOrPlayer && sprite->pos1.x < 133) + ++sprite->spState; + else if (!sprite->spOpponentOrPlayer && sprite->pos1.x > 103) + ++sprite->spState; + return FALSE; +} + +bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite(struct Sprite *sprite) +{ + sprite->spSpeed += sprite->spAbsAcc; + sprite->pos1.x += sprite->spSpeed; + if (sprite->spSpeed == 0) + { + ++sprite->spState; + sprite->spAbsAcc = -sprite->spAbsAcc; + sprite->sphasSlideFinished = 1; + } + return FALSE; +} + +// not used +bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2(struct Sprite *sprite) +{ + sprite->spSpeed += sprite->spAbsAcc; + sprite->pos1.x += sprite->spSpeed; + if (sprite->pos1.x < -31 || sprite->pos1.x > 271) + ++sprite->spState; + return FALSE; +} + +void BT_SetSpriteAsOpponentOrPlayer(s16 spriteId, bool16 value) +{ + gSprites[spriteId].spOpponentOrPlayer = value; +} + +void BT_StartSpriteSlide(s16 spriteId) +{ + ++gSprites[spriteId].spState; +} +s16 BT_IsSpriteSlideFinished(s16 spriteId) +{ + return gSprites[spriteId].sphasSlideFinished; +} + +#undef tTheta +#undef tbg0HOfsOpponent +#undef tbg0HOfsPlayer +#undef tCounter +#undef tHalfBandwidth +#undef tOpponentSpriteId +#undef tPlayerSpriteId +#undef tWhichMugshot + +#undef spState +#undef spSpeed +#undef spAbsAcc +#undef sphasSlideFinished +#undef spOpponentOrPlayer + +#define tSpeed data[1] +#define tAcc data[2] +#define tJerk data[3] + +void BT_Phase2SlicedScreen(u8 taskId) +{ + while (sBT_Phase2SlicedScreenFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase2SlicedScreen_Init(struct Task *task) +{ + u16 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + task->tAcc = 256; + task->tJerk = 1; + sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winOut = 0; + sTransitionStructPtr->win0V = 160; + for (i = 0; i < 160; ++i) + { + gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->bg123HOfs; + gScanlineEffectRegBuffers[1][160 + i] = 0xF0; + } + EnableInterrupts(INTR_FLAG_HBLANK); + SetVBlankCallback(VBCB_BT_Phase2SlicedScreen); + SetHBlankCallback(HBCB_BT_Phase2SlicedScreen); + ++task->tState; + return TRUE; +} + +bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task) +{ + u16 i; + + sTransitionStructPtr->vblankDma = FALSE; + task->tSpeed += (task->tAcc >> 8); + if (task->tSpeed > 0xF0) + task->tSpeed = 0xF0; + if (task->tAcc <= 0xFFF) + task->tAcc += task->tJerk; + if (task->tJerk < 128) + task->tJerk <<= 1; + for (i = 0; i < 160; ++i) + { + u16 *ofsBuffer = &gScanlineEffectRegBuffers[0][i]; + u16 *win0HBuffer = &gScanlineEffectRegBuffers[0][i + 160]; + if (i & 1) + { + *ofsBuffer = sTransitionStructPtr->bg123HOfs + task->tSpeed; + *win0HBuffer = 0xF0 - task->tSpeed; + } + else + { + *ofsBuffer = sTransitionStructPtr->bg123HOfs - task->tSpeed; + *win0HBuffer = (task->tSpeed << 8) | 0xF1; + } + } + if (task->tSpeed > 0xEF) + ++task->tState; + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2SlicedScreen_End(struct Task *task) +{ + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2SlicedScreen)); + return FALSE; +} + +void VBCB_BT_Phase2SlicedScreen(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640); + DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +void HBCB_BT_Phase2SlicedScreen(void) +{ + s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + + REG_BG1HOFS = offset; + REG_BG2HOFS = offset; + REG_BG3HOFS = offset; +} + +#undef tSpeed +#undef tAcc +#undef tJerk + +#define spBldyCounter data[0] +#define spFinished data[1] +#define spAltDelay data[2] +#define spDelay data[5] +#define spLastSprite data[6] + +void BT_Phase2WhiteFadeInStripes(u8 taskId) +{ + while (sBT_Phase2WhiteFadeInStripesFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task) +{ + u16 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN; + sTransitionStructPtr->bldY = 0; + sTransitionStructPtr->winIn = 0x1E; + sTransitionStructPtr->winOut = 0x3F; + sTransitionStructPtr->win0V = 160; + for (i = 0; i < 160; ++i) + { + gScanlineEffectRegBuffers[1][i] = 0; + gScanlineEffectRegBuffers[1][i + 160] = 0xF0; + } + EnableInterrupts(INTR_FLAG_HBLANK); + SetHBlankCallback(HBCB_BT_Phase2WhiteFadeInStripes); + SetVBlankCallback(VBCB_BT_Phase2WhiteFadeInStripes1); + ++task->tState; + return FALSE; +} + +bool8 BT_Phase2WhiteFadeInStripes_SetupSprites(struct Task *task) +{ + s16 i, posY; + s16 buffer[NELEMS(sWhiteStripeDelay)]; + struct Sprite *sprite; + + memcpy(buffer, sWhiteStripeDelay, sizeof(sWhiteStripeDelay)); + for (i = 0, posY = 0; i < 6; ++i, posY += 0x1B) + { + sprite = &gSprites[CreateInvisibleSprite(SpriteCB_BT_Phase2WhiteFadeInStripes)]; + sprite->pos1.x = 0xF0; + sprite->pos1.y = posY; + sprite->spDelay = buffer[i]; + } + ++sprite->spLastSprite; + ++task->tState; + return FALSE; +} + +bool8 BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + if (sTransitionStructPtr->counter > 5) + { + BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE); + ++task->tState; + } + return FALSE; +} + +bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + DmaStop(0); + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); + sTransitionStructPtr->win0H = 240; + sTransitionStructPtr->bldY = 0; + sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN; + sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->counter = 0; + SetVBlankCallback(VBCB_BT_Phase2WhiteFadeInStripes2); + ++task->tState; + return FALSE; +} + +bool8 BT_Phase2WhiteFadeInStripes_IsDone(struct Task *task) +{ + sTransitionStructPtr->counter += 480; + sTransitionStructPtr->bldY = sTransitionStructPtr->counter >> 8; + if (sTransitionStructPtr->bldY > 16) + { + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2WhiteFadeInStripes)); + } + return FALSE; +} + +void VBCB_BT_Phase2WhiteFadeInStripes1(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + SetGpuReg(REG_OFFSET_BLDCNT, sTransitionStructPtr->bldCnt); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0H); // BUG: This should obviously be sTransitionStructPtr->win0V + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640); + DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +void VBCB_BT_Phase2WhiteFadeInStripes2(void) +{ + BT_VBSyncOamAndPltt(); + SetGpuReg(REG_OFFSET_BLDY, sTransitionStructPtr->bldY); + SetGpuReg(REG_OFFSET_BLDCNT, sTransitionStructPtr->bldCnt); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0H, sTransitionStructPtr->win0H); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); +} + + +void HBCB_BT_Phase2WhiteFadeInStripes(void) +{ + vu16 index = REG_VCOUNT; + + if (index == 227) + index = 0; + REG_BLDY = gScanlineEffectRegBuffers[1][index]; +} + +void SpriteCB_BT_Phase2WhiteFadeInStripes(struct Sprite *sprite) +{ + if (sprite->spDelay) + { + --sprite->spDelay; + if (sprite->spLastSprite) + sTransitionStructPtr->vblankDma = TRUE; + } + else + { + u16 i; + u16* bldY = &gScanlineEffectRegBuffers[0][sprite->pos1.y]; + u16* win0H = &gScanlineEffectRegBuffers[0][sprite->pos1.y + 160]; + u32 stripeWidth = sprite->spLastSprite ? 0x19 : 0x1B; + + for (i = 0; i < stripeWidth; ++i) + { + bldY[i] = sprite->spBldyCounter >> 8; + win0H[i] = (u8)(sprite->pos1.x); + } + if (sprite->pos1.x == 0 && sprite->spBldyCounter == 0x1000) + sprite->spFinished = 1; + sprite->pos1.x -= 24; + sprite->spBldyCounter += 192; + if (sprite->pos1.x < 0) + sprite->pos1.x = 0; + if (sprite->spBldyCounter > 0x1000) + sprite->spBldyCounter = 0x1000; + if (sprite->spLastSprite) + sTransitionStructPtr->vblankDma = TRUE; + if (sprite->spFinished) + { + if (sprite->spLastSprite == FALSE || (sTransitionStructPtr->counter > 4)) + { + ++sTransitionStructPtr->counter; + DestroySprite(sprite); + } + } + } +} + +#undef spBldyCounter +#undef spFinished +#undef spAltDelay +#undef spDelay +#undef spLastSprite + +#define tDelay data[1] +#define tWhichGrid data[2] + +void BT_Phase2GridSquares(u8 taskId) +{ + while (sBT_Phase2GridSquaresFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase2GridSquares_LoadGfx(struct Task *task) +{ + u16 *tilemapAddr, *tilesetAddr; + + BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); + CpuSet(sGridSquareTileset, tilesetAddr, 0x10); + CpuFill16(0xF000, tilemapAddr, 0x800); + LoadPalette(sSlidingPokeballBigPokeballPalette, 0xF0, 0x20); + ++task->tState; + return FALSE; +} + +bool8 BT_Phase2GridSquares_UpdateTileset(struct Task *task) +{ + u16* tilesetAddr; + + if (task->tDelay == 0) + { + BT_GetBg0TilesetBase(&tilesetAddr); + task->tDelay = 3; + ++task->tWhichGrid; + CpuSet(sGridSquareTileset + (task->tWhichGrid * 8), tilesetAddr, 0x10); + if (task->tWhichGrid > 0xD) + { + ++task->tState; + task->tDelay = 16; + } + } + --task->tDelay; + return FALSE; +} + +bool8 BT_Phase2GridSquares_IsDone(struct Task *task) +{ + if (--task->tDelay == 0) + { + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2GridSquares)); + } + return FALSE; +} + +#undef tDelay +#undef tWhichGrid + +#define tWhichBrush data[1] +#define tWhichSide data[2] +#define tDelay data[3] + +#define trCurrentPtX data[2] +#define trCurrentPtY data[3] + +void BT_Phase2BlackDoodles(u8 taskId) +{ + while (sBT_Phase2BlackDoodlesFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase2BlackDoodles_Init(struct Task *task) +{ + u16 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winOut = 0; + sTransitionStructPtr->win0V = 0xA0; + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[0][i] = 0x00F0; + CpuSet(gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 160); + SetVBlankCallback(VBCB_BT_Phase2BlackDoodles); + ++task->tState; + return TRUE; +} + +bool8 BT_Phase2BlackDoodles_InitSingleBrush(struct Task *task) +{ + BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, sBlackDoodlesSegments[task->tWhichBrush][0], sBlackDoodlesSegments[task->tWhichBrush][1], sBlackDoodlesSegments[task->tWhichBrush][2], sBlackDoodlesSegments[task->tWhichBrush][3], 1, 1); + task->tWhichSide = sBlackDoodlesSegments[task->tWhichBrush][4]; + ++task->tState; + return TRUE; +} + +bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task) +{ + s16 i; + bool8 nextFunc; + + sTransitionStructPtr->vblankDma = FALSE; + for (i = 0, nextFunc = FALSE; i < 16; ++i) + { + s16 left = gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] >> 8; + s16 right = gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] & 0xFF; + if (task->tWhichSide == 0) + { + if (left < sTransitionStructPtr->trCurrentPtX) + left = sTransitionStructPtr->trCurrentPtX; + if (left > right) + left = right; + } + else + { + if (right > sTransitionStructPtr->trCurrentPtX) + right = sTransitionStructPtr->trCurrentPtX; + if (right <= left) + right = left; + } + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + if (nextFunc) + { + ++task->tState; + break; + } + else + nextFunc = BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE); + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +bool8 BT_Phase2BlackDoodles_IsDone(struct Task *task) +{ + if (++task->tWhichBrush < 7) + { + ++task->tState; + task->tDelay = sBlackDoodlesDelay[task->tWhichBrush - 1]; + return TRUE; + } + else + { + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2BlackDoodles)); + return FALSE; + } +} + +bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task) +{ + if (--task->tDelay == 0) + { + task->tState = 1; + return TRUE; + } + else + return FALSE; +} + +void VBCB_BT_Phase2BlackDoodles(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + SetGpuReg(REG_OFFSET_WIN0H, gScanlineEffectRegBuffers[1][0]); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +#undef tWhichBrush +#undef tWhichSide +#undef tDelay + +#undef trCurrentPtX +#undef trCurrentPtY + +#define tFadeOutDelay data[1] +#define tFadeInDelay data[2] +#define tBlinkTimes data[3] +#define tFadeOutSpeed data[4] +#define tFadeInSpeed data[5] +#define tDelayCounter data[6] +#define tCoeff data[7] + +void BT_CreatePhase1SubTask(s16 fadeOutDelay, s16 fadeInDelay, s16 blinkTimes, s16 fadeOutSpeed, s16 fadeInSpeed) +{ + u8 taskId = CreateTask(BT_Phase1SubTask, 3); + gTasks[taskId].tFadeOutDelay = fadeOutDelay; + gTasks[taskId].tFadeInDelay = fadeInDelay; + gTasks[taskId].tBlinkTimes = blinkTimes; + gTasks[taskId].tFadeOutSpeed = fadeOutSpeed; + gTasks[taskId].tFadeInSpeed = fadeInSpeed; + gTasks[taskId].tDelayCounter = fadeOutDelay; +} + +bool8 BT_IsPhase1Done(void) +{ + if (FindTaskIdByFunc(BT_Phase1SubTask) == TASK_NONE) + return TRUE; + else + return FALSE; +} + +void BT_Phase1SubTask(u8 taskId) +{ + while (sBT_Phase1FadeFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +bool8 BT_Phase1_FadeOut(struct Task *task) +{ + if (task->tDelayCounter == 0 || --task->tDelayCounter == 0) + { + task->tDelayCounter = task->tFadeOutDelay; + task->tCoeff += task->tFadeOutSpeed; + if (task->tCoeff > 16) + task->tCoeff = 16; + BlendPalettes(-1, task->tCoeff, RGB(11, 11, 11)); + } + if (task->tCoeff > 15) + { + ++task->tState; + task->tDelayCounter = task->tFadeInDelay; + } + return FALSE; +} + +bool8 BT_Phase1_FadeIn(struct Task *task) +{ + if (task->tDelayCounter == 0 || --task->tDelayCounter == 0) + { + task->tDelayCounter = task->tFadeInDelay; + task->tCoeff -= task->tFadeInSpeed; + if (task->tCoeff < 0) + task->tCoeff = 0; + BlendPalettes(0xFFFFFFFF, task->tCoeff, RGB(11, 11, 11)); + } + if (task->tCoeff == 0) + { + if (--task->tBlinkTimes == 0) + { + DestroyTask(FindTaskIdByFunc(BT_Phase1SubTask)); + } + else + { + task->tDelayCounter = task->tFadeOutDelay; + task->tState = 0; + } + } + return FALSE; +} + +#undef tFadeOutDelay +#undef tFadeInDelay +#undef tBlinkTimes +#undef tFadeOutSpeed +#undef tFadeInSpeed +#undef tDelayCounter +#undef tCoeff + +void BT_InitCtrlBlk(void) +{ + memset(sTransitionStructPtr, 0, sizeof(*sTransitionStructPtr)); + sub_805A658(&sTransitionStructPtr->bg123HOfs, &sTransitionStructPtr->bg123VOfs); +} + +void BT_VBSyncOamAndPltt(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void BT_GetBg0TilesetBase(u16 **tilesetPtr) +{ + u16 charBase; + + charBase = GetGpuReg(REG_OFFSET_BG0CNT) >> 2; + charBase <<= 0xE; + *tilesetPtr = (u16*)(VRAM + charBase); +} + +void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr) +{ + u16 screenBase, charBase; + + screenBase = (GetGpuReg(REG_OFFSET_BG0CNT) >> 8) & 0x1F; + charBase = GetGpuReg(REG_OFFSET_BG0CNT) >> 2; + screenBase <<= 0xB; + charBase <<= 0xE; + *tilemapPtr = (u16*)(VRAM + screenBase); + *tilesetPtr = (u16*)(VRAM + charBase); +} + +void BT_BlendPalettesToBlack(void) +{ + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); +} + +void BT_LoadWaveIntoBuffer(s16 *buffer, s16 offset, s16 theta, s16 frequency, s16 amplitude, s16 bufSize) +{ + u8 i; + + for (i = 0; bufSize > 0; --bufSize, ++i, theta += frequency) + buffer[i] = offset + Sin(0xFF & theta, amplitude); +} + +void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius) +{ + s16 i; + + memset(buffer, 0xA, 320); + // 64 iterations because we only want to cover [0, Ï€/2) discretely. + for (i = 0; i < 64; ++i) + { + s16 sinResult, cosResult, leftX, topY, bottomY, nextTopY, nextBottomY, winVal; + + // The loop variable i here does not stand for rotation angle, + // but is the angle between segment (center, pointOnCircle) + // and vertical line. + sinResult = Sin(i, radius); + cosResult = Cos(i, radius); + leftX = x - sinResult; + winVal = x + sinResult; + topY = y - cosResult; + bottomY = y + cosResult; + if (leftX < 0) + leftX = 0; + if (winVal > 240) + winVal = 240; + if (topY < 0) + topY = 0; + if (bottomY > 159) + bottomY = 159; + winVal |= (leftX << 8); + buffer[topY] = winVal; + buffer[bottomY] = winVal; + cosResult = Cos(i + 1, radius); + nextTopY = y - cosResult; + nextBottomY = y + cosResult; + if (nextTopY < 0) + nextTopY = 0; + if (nextBottomY > 159) + nextBottomY = 159; + // fill everything in between with the same WIN0H value + while (topY > nextTopY) + buffer[--topY] = winVal; + while (topY < nextTopY) + buffer[++topY] = winVal; + while (bottomY > nextBottomY) + buffer[--bottomY] = winVal; + while (bottomY < nextBottomY) + buffer[++bottomY] = winVal; + } +} + +#define trStartPtX data[0] +#define trStartPtY data[1] +#define trCurrentPtX data[2] +#define trCurrentPtY data[3] +#define trEndPtX data[4] +#define trEndPtY data[5] +#define trStepX data[6] +#define trStepY data[7] +#define trAbsDeltaX data[8] +#define trAbsDeltaY data[9] +#define trAccum data[10] // track one dimension based on slope + +void BT_DiagonalSegment_InitParams(s16 *data, s16 startPtX, s16 startPtY, s16 endPtX, s16 endPtY, s16 stepX, s16 stepY) +{ + trStartPtX = startPtX; + trStartPtY = startPtY; + trCurrentPtX = startPtX; + trCurrentPtY = startPtY; + trEndPtX = endPtX; + trEndPtY = endPtY; + trStepX = stepX; + trStepY = stepY; + trAbsDeltaX = endPtX - startPtX; + if (trAbsDeltaX < 0) + { + trAbsDeltaX = -trAbsDeltaX; + trStepX = -stepX; + } + trAbsDeltaY = endPtY - startPtY; + if (trAbsDeltaY < 0) + { + trAbsDeltaY = -trAbsDeltaY; + trStepY = -stepY; + } + trAccum = 0; +} + +bool8 BT_DiagonalSegment_ComputePointOnSegment(s16 *data, bool8 checkBoundary1, bool8 checkBoundary2) +{ + u8 finish; + + if (trAbsDeltaX > trAbsDeltaY) + { + trCurrentPtX += trStepX; + trAccum += trAbsDeltaY; + if (trAccum > trAbsDeltaX) + { + trCurrentPtY += trStepY; + trAccum -= trAbsDeltaX; + } + } + else + { + trCurrentPtY += trStepY; + trAccum += trAbsDeltaX; + if (trAccum > trAbsDeltaY) + { + trCurrentPtX += trStepX; + trAccum -= trAbsDeltaY; + } + } + finish = 0; + if ((trStepX > 0 && trCurrentPtX >= trEndPtX) || (trStepX < 0 && trCurrentPtX <= trEndPtX)) + { + ++finish; + if (checkBoundary1) + trCurrentPtX = trEndPtX; + } + if ((trStepY > 0 && trCurrentPtY >= trEndPtY) || (trStepY < 0 && trCurrentPtY <= trEndPtY)) + { + ++finish; + if (checkBoundary2) + trCurrentPtY = trEndPtY; + } + if (finish == 2) + return TRUE; + else + return FALSE; +} + +#undef trStartPtX +#undef trStartPtY +#undef trCurrentPtX +#undef trCurrentPtY +#undef trEndPtX +#undef trEndPtY +#undef trStepX +#undef trStepY +#undef trAbsDeltaX +#undef trAbsDeltaY +#undef trAccum -- cgit v1.2.3 From 1260e40aa307479e978a85483abb9d50ba5c37c2 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 25 Jul 2019 14:51:50 +0800 Subject: marked everything as static and trivial fixes --- src/battle_transition.c | 706 ++++++++++++++++++++++++------------------------ 1 file changed, 353 insertions(+), 353 deletions(-) diff --git a/src/battle_transition.c b/src/battle_transition.c index 1ef54a925..71296c67f 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -43,155 +43,155 @@ struct TransitionData s16 data[11]; // for multiple purposes }; -EWRAM_DATA struct TransitionData *sTransitionStructPtr = NULL; +static EWRAM_DATA struct TransitionData *sTransitionStructPtr = NULL; // TODO: Move this declaration to include/event_object_movement.h extern const struct OamData gEventObjectBaseOam_32x32; -bool8 BT_Phase1_FadeOut(struct Task *task); -bool8 BT_Phase1_FadeIn(struct Task *task); -bool8 BT_Phase2BlackDoodles_Init(struct Task *task); -bool8 BT_Phase2BlackDoodles_InitSingleBrush(struct Task *task); -bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task); -bool8 BT_Phase2BlackDoodles_IsDone(struct Task *task); -bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task); -bool8 BT_Phase2GridSquares_LoadGfx(struct Task *task); -bool8 BT_Phase2GridSquares_UpdateTileset(struct Task *task); -bool8 BT_Phase2GridSquares_IsDone(struct Task *task); -bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task); -bool8 BT_Phase2WhiteFadeInStripes_SetupSprites(struct Task *task); -bool8 BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone(struct Task *task); -bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task); -bool8 BT_Phase2WhiteFadeInStripes_IsDone(struct Task *task); -bool8 BT_Phase2SlicedScreen_Init(struct Task *task); -bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task); -bool8 BT_Phase2SlicedScreen_End(struct Task *task); -bool8 BT_Phase2Mugshot_Init(struct Task *task); -bool8 BT_Phase2Mugshot_LoadGfx(struct Task *task); -bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task); -bool8 BT_Phase2Mugshot_StartSpriteSlide(struct Task *task); -bool8 BT_Phase2Mugshot_WaitForOpponentInPlace(struct Task *task); -bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task); -bool8 BT_Phase2Mugshot_ExpandWhiteBand(struct Task *task); -bool8 BT_Phase2Mugshot_StartBlackFade(struct Task *task); -bool8 BT_Phase2Mugshot_WaitForBlackFade(struct Task *task); -bool8 BT_Phase2Mugshot_End(struct Task *task); -bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task); -bool8 BT_Phase2AntiClockwiseSpiral_Update(struct Task *task); -bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task); -bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task); -bool8 BT_Phase2BlackWaveToRight_End(struct Task *task); -bool8 BT_Phase2FullScreenWave_Init(struct Task *task); -bool8 BT_Phase2FullScreenWave_UpdateWave(struct Task *task); -bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task); -bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task); -bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task); -bool8 BT_Phase2ClockwiseBlackFade_Step3(struct Task *task); -bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task); -bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task); -bool8 BT_Phase2ClockwiseBlackFade_End(struct Task *task); -bool8 BT_Phase2SlidingPokeballs_LoadBgGfx(struct Task *task); -bool8 BT_Phase2SlidingPokeballs_SetupFldeffArgs(struct Task *task); -bool8 BT_Phase2SlidingPokeballs_IsDone(struct Task *task); -bool8 BT_Phase2BigPokeball_Init(struct Task *task); -bool8 BT_Phase2BigPokeball_LoadTilemapAndWave(struct Task *task); -bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task); -bool8 BT_Phase2BigPokeball_UpdateWave2DecEvb(struct Task *task); -bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task); -bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task); -bool8 BT_Phase2HorizontalCorrugate_Init(struct Task *task); -bool8 BT_Phase2HorizontalCorrugate_UpdateWave(struct Task *task); -bool8 BT_Phase2DistortedWave_InitWave(struct Task *task); -bool8 BT_Phase2DistortedWave_UpdateWave(struct Task *task); -bool8 BT_Phase2Blur_InitBgMosaic(struct Task *task); -bool8 BT_Phase2Blur_Anim(struct Task *task); -bool8 BT_Phase2Blur_IsDone(struct Task *task); -bool8 BT_Phase1Blink(struct Task *task); -bool8 BT_WaitForPhase1(struct Task *task); -bool8 BT_Phase2LaunchAnimTask(struct Task *task); -bool8 BT_WaitForPhase2(struct Task *task); - -void BT_Phase2Blur(u8 taskId); -void BT_Phase2DistortedWave(u8 taskId); -void BT_Phase2HorizontalCorrugate(u8 taskId); -void BT_Phase2BigPokeball(u8 taskId); -void BT_Phase2SlidingPokeballs(u8 taskId); -void BT_Phase2ClockwiseBlackFade(u8 taskId); -void BT_Phase2FullScreenWave(u8 taskId); -void BT_Phase2BlackWaveToRight(u8 taskId); -void BT_Phase2SlicedScreen(u8 taskId); -void BT_Phase2WhiteFadeInStripes(u8 taskId); -void BT_Phase2GridSquares(u8 taskId); -void BT_Phase2BlackDoodles(u8 taskId); -void BT_Phase2StartLoreleiMugshot(u8 taskId); -void BT_Phase2StartBrunoMugshot(u8 taskId); -void BT_Phase2StartAgathaMugshot(u8 taskId); -void BT_Phase2StartLanceMugshot(u8 taskId); -void BT_Phase2StartBlueMugshot(u8 taskId); -void BT_Phase2AntiClockwiseSpiral(u8 taskId); -void BT_Phase1Task(u8 taskId); -void BT_Phase2Mugshot(u8 taskId); -void BT_Phase1SubTask(u8 taskId); - -void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite); -void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite); -void SpriteCB_BT_Phase2WhiteFadeInStripes(struct Sprite *sprite); - -bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite); -bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite); -bool8 BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn(struct Sprite *sprite); -bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite(struct Sprite *sprite); -bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2(struct Sprite *sprite); - -void VBCB_BT_Phase2DistortedWave(void); -void HBCB_BT_Phase2DistortedWave(void); -void VBCB_BT_Phase2HorizontalCorrugate(void); -void HBCB_BT_Phase2HorizontalCorrugate(void); -void VBCB_BT_Phase2BigPokeball1(void); -void VBCB_BT_Phase2BigPokeball2(void); -void HBCB_BT_Phase2BigPokeball(void); -void VBCB_BT_Phase2ClockwiseBlackFade(void); -void VBCB_BT_Phase2FullScreenWave(void); -void HBCB_BT_Phase2FullScreenWave(void); -void VBCB_BT_Phase2BlackWaveToRight(void); -void VBCB_BT_Phase2AntiClockwiseBlackFade(void); -void VBCB_BT_Phase2Mugshot1_Slide(void); -void VBCB_BT_Phase2Mugshot2_WhiteFade(void); -void HBCB_BT_Phase2Mugshot(void); -void VBCB_BT_Phase2SlicedScreen(void); -void HBCB_BT_Phase2SlicedScreen(void); -void VBCB_BT_Phase2WhiteFadeInStripes1(void); -void VBCB_BT_Phase2WhiteFadeInStripes2(void); -void HBCB_BT_Phase2WhiteFadeInStripes(void); -void VBCB_BT_Phase2BlackDoodles(void); - -void BT_LaunchTask(u8 transitionId); -void BT_TaskMain(u8 taskId); -void BT_InitCtrlBlk(void); -void BT_CreatePhase1SubTask(s16 fadeOutDelay, s16 fadeInDelay, s16 blinkTimes, s16 fadeOutSpeed, s16 fadeInSpeed); -bool8 BT_IsPhase1Done(void); -void BT_VBSyncOamAndPltt(void); -void BT_GetBg0TilesetBase(u16 **tilesetPtr); -void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr); -void BT_LoadWaveIntoBuffer(s16 *buffer, s16 offset, s16 theta, s16 frequency, s16 amplitude, s16 bufSize); -void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius); -void BT_BlendPalettesToBlack(void); -void BT_DiagonalSegment_InitParams(s16 *data, s16 startPtX, s16 startPtY, s16 endPtX, s16 endPtY, s16 stepX, s16 stepY); -bool8 BT_DiagonalSegment_ComputePointOnSegment(s16 *data, bool8 checkBoundary1, bool8 checkBoundary2); -void BT_SetSpriteAsOpponentOrPlayer(s16 spriteId, bool16 value); -void BT_StartSpriteSlide(s16 spriteId); -s16 BT_IsSpriteSlideFinished(s16 spriteId); -void BT_Phase2Mugshots_CreateSprites(struct Task *task); - -const u32 sBigPokeballTileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball_tileset.4bpp"); -const u32 sSlidingPokeballTilemap[] = INCBIN_U32("graphics/battle_transitions/sliding_pokeball_tilemap.bin"); -const u8 sSpriteImage_SlidingPokeball[] = INCBIN_U8("graphics/battle_transitions/sliding_pokeball.4bpp"); -const u32 sVsBarTileset[] = INCBIN_U32("graphics/battle_transitions/vsbar_tileset.4bpp"); -const u8 sSpriteImage_UnusedBrendan[] = INCBIN_U8("graphics/battle_transitions/unused_brendan.4bpp"); -const u8 sSpriteImage_UnusedLass[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp"); -const u32 sGridSquareTileset[] = INCBIN_U32("graphics/battle_transitions/grid_square_tileset.4bpp"); - -const TaskFunc sBT_Phase1Tasks[] = +static bool8 BT_Phase1_FadeOut(struct Task *task); +static bool8 BT_Phase1_FadeIn(struct Task *task); +static bool8 BT_Phase2BlackDoodles_Init(struct Task *task); +static bool8 BT_Phase2BlackDoodles_InitSingleBrush(struct Task *task); +static bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task); +static bool8 BT_Phase2BlackDoodles_IsDone(struct Task *task); +static bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task); +static bool8 BT_Phase2GridSquares_LoadGfx(struct Task *task); +static bool8 BT_Phase2GridSquares_UpdateTileset(struct Task *task); +static bool8 BT_Phase2GridSquares_IsDone(struct Task *task); +static bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task); +static bool8 BT_Phase2WhiteFadeInStripes_SetupSprites(struct Task *task); +static bool8 BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone(struct Task *task); +static bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task); +static bool8 BT_Phase2WhiteFadeInStripes_IsDone(struct Task *task); +static bool8 BT_Phase2SlicedScreen_Init(struct Task *task); +static bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task); +static bool8 BT_Phase2SlicedScreen_End(struct Task *task); +static bool8 BT_Phase2Mugshot_Init(struct Task *task); +static bool8 BT_Phase2Mugshot_LoadGfx(struct Task *task); +static bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task); +static bool8 BT_Phase2Mugshot_StartSpriteSlide(struct Task *task); +static bool8 BT_Phase2Mugshot_WaitForOpponentInPlace(struct Task *task); +static bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task); +static bool8 BT_Phase2Mugshot_ExpandWhiteBand(struct Task *task); +static bool8 BT_Phase2Mugshot_StartBlackFade(struct Task *task); +static bool8 BT_Phase2Mugshot_WaitForBlackFade(struct Task *task); +static bool8 BT_Phase2Mugshot_End(struct Task *task); +static bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task); +static bool8 BT_Phase2AntiClockwiseSpiral_Update(struct Task *task); +static bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task); +static bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task); +static bool8 BT_Phase2BlackWaveToRight_End(struct Task *task); +static bool8 BT_Phase2FullScreenWave_Init(struct Task *task); +static bool8 BT_Phase2FullScreenWave_UpdateWave(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_Step3(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_End(struct Task *task); +static bool8 BT_Phase2SlidingPokeballs_LoadBgGfx(struct Task *task); +static bool8 BT_Phase2SlidingPokeballs_SetupFldeffArgs(struct Task *task); +static bool8 BT_Phase2SlidingPokeballs_IsDone(struct Task *task); +static bool8 BT_Phase2BigPokeball_Init(struct Task *task); +static bool8 BT_Phase2BigPokeball_LoadTilemapAndWave(struct Task *task); +static bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task); +static bool8 BT_Phase2BigPokeball_UpdateWave2DecEvb(struct Task *task); +static bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task); +static bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task); +static bool8 BT_Phase2HorizontalCorrugate_Init(struct Task *task); +static bool8 BT_Phase2HorizontalCorrugate_UpdateWave(struct Task *task); +static bool8 BT_Phase2DistortedWave_InitWave(struct Task *task); +static bool8 BT_Phase2DistortedWave_UpdateWave(struct Task *task); +static bool8 BT_Phase2Blur_InitBgMosaic(struct Task *task); +static bool8 BT_Phase2Blur_Anim(struct Task *task); +static bool8 BT_Phase2Blur_IsDone(struct Task *task); +static bool8 BT_Phase1Blink(struct Task *task); +static bool8 BT_WaitForPhase1(struct Task *task); +static bool8 BT_Phase2LaunchAnimTask(struct Task *task); +static bool8 BT_WaitForPhase2(struct Task *task); + +static void BT_Phase2Blur(u8 taskId); +static void BT_Phase2DistortedWave(u8 taskId); +static void BT_Phase2HorizontalCorrugate(u8 taskId); +static void BT_Phase2BigPokeball(u8 taskId); +static void BT_Phase2SlidingPokeballs(u8 taskId); +static void BT_Phase2ClockwiseBlackFade(u8 taskId); +static void BT_Phase2FullScreenWave(u8 taskId); +static void BT_Phase2BlackWaveToRight(u8 taskId); +static void BT_Phase2SlicedScreen(u8 taskId); +static void BT_Phase2WhiteFadeInStripes(u8 taskId); +static void BT_Phase2GridSquares(u8 taskId); +static void BT_Phase2BlackDoodles(u8 taskId); +static void BT_Phase2StartLoreleiMugshot(u8 taskId); +static void BT_Phase2StartBrunoMugshot(u8 taskId); +static void BT_Phase2StartAgathaMugshot(u8 taskId); +static void BT_Phase2StartLanceMugshot(u8 taskId); +static void BT_Phase2StartBlueMugshot(u8 taskId); +static void BT_Phase2AntiClockwiseSpiral(u8 taskId); +static void BT_Phase1Task(u8 taskId); +static void BT_Phase2Mugshot(u8 taskId); +static void BT_Phase1SubTask(u8 taskId); + +static void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite); +static void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite); +static void SpriteCB_BT_Phase2WhiteFadeInStripes(struct Sprite *sprite); + +static bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite); +static bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite); +static bool8 BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn(struct Sprite *sprite); +static bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite(struct Sprite *sprite); +static bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2(struct Sprite *sprite); + +static void VBCB_BT_Phase2DistortedWave(void); +static void HBCB_BT_Phase2DistortedWave(void); +static void VBCB_BT_Phase2HorizontalCorrugate(void); +static void HBCB_BT_Phase2HorizontalCorrugate(void); +static void VBCB_BT_Phase2BigPokeball1(void); +static void VBCB_BT_Phase2BigPokeball2(void); +static void HBCB_BT_Phase2BigPokeball(void); +static void VBCB_BT_Phase2ClockwiseBlackFade(void); +static void VBCB_BT_Phase2FullScreenWave(void); +static void HBCB_BT_Phase2FullScreenWave(void); +static void VBCB_BT_Phase2BlackWaveToRight(void); +static void VBCB_BT_Phase2AntiClockwiseBlackFade(void); +static void VBCB_BT_Phase2Mugshot1_Slide(void); +static void VBCB_BT_Phase2Mugshot2_WhiteFade(void); +static void HBCB_BT_Phase2Mugshot(void); +static void VBCB_BT_Phase2SlicedScreen(void); +static void HBCB_BT_Phase2SlicedScreen(void); +static void VBCB_BT_Phase2WhiteFadeInStripes1(void); +static void VBCB_BT_Phase2WhiteFadeInStripes2(void); +static void HBCB_BT_Phase2WhiteFadeInStripes(void); +static void VBCB_BT_Phase2BlackDoodles(void); + +static void BT_LaunchTask(u8 transitionId); +static void BT_TaskMain(u8 taskId); +static void BT_InitCtrlBlk(void); +static void BT_CreatePhase1SubTask(s16 fadeOutDelay, s16 fadeInDelay, s16 blinkTimes, s16 fadeOutSpeed, s16 fadeInSpeed); +static bool8 BT_IsPhase1Done(void); +static void BT_VBSyncOamAndPltt(void); +static void BT_GetBg0TilesetBase(u16 **tilesetPtr); +static void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr); +static void BT_LoadWaveIntoBuffer(s16 *buffer, s16 offset, s16 theta, s16 frequency, s16 amplitude, s16 bufSize); +static void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius); +static void BT_BlendPalettesToBlack(void); +static void BT_DiagonalSegment_InitParams(s16 *data, s16 startPtX, s16 startPtY, s16 endPtX, s16 endPtY, s16 stepX, s16 stepY); +static bool8 BT_DiagonalSegment_ComputePointOnSegment(s16 *data, bool8 checkBoundary1, bool8 checkBoundary2); +static void BT_SetSpriteAsOpponentOrPlayer(s16 spriteId, bool16 value); +static void BT_StartSpriteSlide(s16 spriteId); +static s16 BT_IsSpriteSlideFinished(s16 spriteId); +static void BT_Phase2Mugshots_CreateSprites(struct Task *task); + +static const u32 sBigPokeballTileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball_tileset.4bpp"); +static const u32 sSlidingPokeballTilemap[] = INCBIN_U32("graphics/battle_transitions/sliding_pokeball_tilemap.bin"); +static const u8 sSpriteImage_SlidingPokeball[] = INCBIN_U8("graphics/battle_transitions/sliding_pokeball.4bpp"); +static const u32 sVsBarTileset[] = INCBIN_U32("graphics/battle_transitions/vsbar_tileset.4bpp"); +static const u8 sSpriteImage_UnusedBrendan[] = INCBIN_U8("graphics/battle_transitions/unused_brendan.4bpp"); +static const u8 sSpriteImage_UnusedLass[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp"); +static const u32 sGridSquareTileset[] = INCBIN_U32("graphics/battle_transitions/grid_square_tileset.4bpp"); + +static const TaskFunc sBT_Phase1Tasks[] = { BT_Phase1Task, BT_Phase1Task, @@ -213,7 +213,7 @@ const TaskFunc sBT_Phase1Tasks[] = BT_Phase1Task, }; -const TaskFunc sBT_Phase2Tasks[] = +static const TaskFunc sBT_Phase2Tasks[] = { BT_Phase2Blur, BT_Phase2DistortedWave, @@ -235,7 +235,7 @@ const TaskFunc sBT_Phase2Tasks[] = BT_Phase2AntiClockwiseSpiral, }; -const TransitionStateFunc sBT_MainPhases[] = +static const TransitionStateFunc sBT_MainPhases[] = { BT_Phase1Blink, BT_WaitForPhase1, @@ -243,26 +243,26 @@ const TransitionStateFunc sBT_MainPhases[] = BT_WaitForPhase2, }; -const TransitionStateFunc sBT_Phase2BlurFuncs[] = +static const TransitionStateFunc sBT_Phase2BlurFuncs[] = { BT_Phase2Blur_InitBgMosaic, BT_Phase2Blur_Anim, BT_Phase2Blur_IsDone, }; -const TransitionStateFunc sBT_Phase2DistortedWaveFuncs[] = +static const TransitionStateFunc sBT_Phase2DistortedWaveFuncs[] = { BT_Phase2DistortedWave_InitWave, BT_Phase2DistortedWave_UpdateWave, }; -const TransitionStateFunc sBT_Phase2HorizontalCorrugateFuncs[] = +static const TransitionStateFunc sBT_Phase2HorizontalCorrugateFuncs[] = { BT_Phase2HorizontalCorrugate_Init, BT_Phase2HorizontalCorrugate_UpdateWave, }; -const TransitionStateFunc sBT_Phase2BigPokeballFuncs[] = +static const TransitionStateFunc sBT_Phase2BigPokeballFuncs[] = { BT_Phase2BigPokeball_Init, BT_Phase2BigPokeball_LoadTilemapAndWave, @@ -272,20 +272,20 @@ const TransitionStateFunc sBT_Phase2BigPokeballFuncs[] = BT_Phase2BigPokeball_CircleEffect, }; -const TransitionStateFunc sBT_Phase2SlidingPokeballsFuncs[] = +static const TransitionStateFunc sBT_Phase2SlidingPokeballsFuncs[] = { BT_Phase2SlidingPokeballs_LoadBgGfx, BT_Phase2SlidingPokeballs_SetupFldeffArgs, BT_Phase2SlidingPokeballs_IsDone, }; -const s16 gUnknown_83FA400[] = { -16, 256 }; +static const s16 gUnknown_83FA400[] = { -16, 256 }; -const s16 gUnknown_83FA404[] = { 0, 16, 32, 8, 24 }; +static const s16 gUnknown_83FA404[] = { 0, 16, 32, 8, 24 }; -const s16 gUnknown_83FA40E[] = { 8, -8 }; +static const s16 gUnknown_83FA40E[] = { 8, -8 }; -const TransitionStateFunc sBT_Phase2ClockwiseBlackFadeFuncs[] = +static const TransitionStateFunc sBT_Phase2ClockwiseBlackFadeFuncs[] = { BT_Phase2ClockwiseBlackFade_Init, BT_Phase2ClockwiseBlackFade_Step1, @@ -296,19 +296,19 @@ const TransitionStateFunc sBT_Phase2ClockwiseBlackFadeFuncs[] = BT_Phase2ClockwiseBlackFade_End, }; -const TransitionStateFunc sBT_Phase2FullScreenWaveFuncs[] = +static const TransitionStateFunc sBT_Phase2FullScreenWaveFuncs[] = { BT_Phase2FullScreenWave_Init, BT_Phase2FullScreenWave_UpdateWave, }; -const TransitionStateFunc sBT_Phase2BlackWaveToRightFuncs[] = +static const TransitionStateFunc sBT_Phase2BlackWaveToRightFuncs[] = { BT_Phase2BlackWaveToRight_Init, BT_Phase2BlackWaveToRight_UpdateWave, BT_Phase2BlackWaveToRight_End, }; -const s16 gUnknown_83FA444[] = +static const s16 gUnknown_83FA444[] = { 0x0, 0x26E, 0x100, 0x69, @@ -320,13 +320,13 @@ const s16 gUnknown_83FA444[] = -0x100, -0x266E, }; -const TransitionStateFunc sBT_Phase2AntiClockwiseSpiralFuncs[] = +static const TransitionStateFunc sBT_Phase2AntiClockwiseSpiralFuncs[] = { BT_Phase2AntiClockwiseSpiral_Init, BT_Phase2AntiClockwiseSpiral_Update, }; -const TransitionStateFunc sBT_Phase2MugshotFuncs[] = +static const TransitionStateFunc sBT_Phase2MugshotFuncs[] = { BT_Phase2Mugshot_Init, BT_Phase2Mugshot_LoadGfx, @@ -340,13 +340,13 @@ const TransitionStateFunc sBT_Phase2MugshotFuncs[] = BT_Phase2Mugshot_End, }; -const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_COUNT] = +static const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_COUNT] = { // TODO: document these with macro 0x70, 0x71, 0x72, 0x73, 0x7D }; -const s16 sMugshotsOpponentRotationScales[MUGSHOTS_COUNT][2] = +static const s16 sMugshotsOpponentRotationScales[MUGSHOTS_COUNT][2] = { {0x200, 0x200}, {0x200, 0x200}, @@ -355,7 +355,7 @@ const s16 sMugshotsOpponentRotationScales[MUGSHOTS_COUNT][2] = {0x200, 0x200}, }; -const s16 sMugshotsOpponentCoords[MUGSHOTS_COUNT][2] = +static const s16 sMugshotsOpponentCoords[MUGSHOTS_COUNT][2] = { { -8, 0 }, { -10, 0 }, @@ -364,7 +364,7 @@ const s16 sMugshotsOpponentCoords[MUGSHOTS_COUNT][2] = { 0, 0 }, }; -const TransitionSpriteCallback sBT_Phase2MugshotSpriteFuncs[] = +static const TransitionSpriteCallback sBT_Phase2MugshotSpriteFuncs[] = { BT_Phase2MugshotsSpriteFuncs_Wait, BT_Phase2MugshotsSpriteFuncs_InitParams, @@ -375,18 +375,18 @@ const TransitionSpriteCallback sBT_Phase2MugshotSpriteFuncs[] = BT_Phase2MugshotsSpriteFuncs_Wait, }; -const s16 sMugShotSlideVelocity[] = { 12, -12 }; +static const s16 sMugShotSlideVelocity[] = { 12, -12 }; -const s16 sMugShotSlideDeceleration[] = { -1, 1 }; +static const s16 sMugShotSlideDeceleration[] = { -1, 1 }; -const TransitionStateFunc sBT_Phase2SlicedScreenFuncs[] = +static const TransitionStateFunc sBT_Phase2SlicedScreenFuncs[] = { BT_Phase2SlicedScreen_Init, BT_Phase2SlicedScreen_UpdateOffsets, BT_Phase2SlicedScreen_End, }; -const TransitionStateFunc sBT_Phase2WhiteFadeInStripesFuncs[] = +static const TransitionStateFunc sBT_Phase2WhiteFadeInStripesFuncs[] = { BT_Phase2WhiteFadeInStripes_Init, BT_Phase2WhiteFadeInStripes_SetupSprites, @@ -395,16 +395,16 @@ const TransitionStateFunc sBT_Phase2WhiteFadeInStripesFuncs[] = BT_Phase2WhiteFadeInStripes_IsDone, }; -const u16 sWhiteStripeDelay[] = { 0, 9, 15, 6, 12, 3 }; +static const u16 sWhiteStripeDelay[] = { 0, 9, 15, 6, 12, 3 }; -const TransitionStateFunc sBT_Phase2GridSquaresFuncs[] = +static const TransitionStateFunc sBT_Phase2GridSquaresFuncs[] = { BT_Phase2GridSquares_LoadGfx, BT_Phase2GridSquares_UpdateTileset, BT_Phase2GridSquares_IsDone, }; -const TransitionStateFunc sBT_Phase2BlackDoodlesFuncs[] = +static const TransitionStateFunc sBT_Phase2BlackDoodlesFuncs[] = { BT_Phase2BlackDoodles_Init, BT_Phase2BlackDoodles_InitSingleBrush, @@ -413,7 +413,7 @@ const TransitionStateFunc sBT_Phase2BlackDoodlesFuncs[] = BT_Phase2BlackDoodles_NextBrush, }; -const s16 sBlackDoodlesSegments[][5] = +static const s16 sBlackDoodlesSegments[][5] = { { 0x38, 0x00, 0x00, 0xA0, 0 }, { 0x68, 0xA0, 0xF0, 0x58, 1 }, @@ -424,15 +424,15 @@ const s16 sBlackDoodlesSegments[][5] = { 0xA8, 0xA0, 0x30, 0x00, 1 }, }; -const s16 sBlackDoodlesDelay[] = { 1, 1, 1, 1, 1, 1, 0 }; +static const s16 sBlackDoodlesDelay[] = { 1, 1, 1, 1, 1, 1, 0 }; -const TransitionStateFunc sBT_Phase1FadeFuncs[] = +static const TransitionStateFunc sBT_Phase1FadeFuncs[] = { BT_Phase1_FadeOut, BT_Phase1_FadeIn, }; -const struct SpriteFrameImage sSpriteImageTable_SlidingPokeball[] = +static const struct SpriteFrameImage sSpriteImageTable_SlidingPokeball[] = { { .data = sSpriteImage_SlidingPokeball, @@ -440,33 +440,33 @@ const struct SpriteFrameImage sSpriteImageTable_SlidingPokeball[] = }, }; -const union AnimCmd sSpriteAnim_SlidingPokeball[] = +static const union AnimCmd sSpriteAnim_SlidingPokeball[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd *const sSpriteAnimTable_SlidingPokeball[] = { sSpriteAnim_SlidingPokeball }; +static const union AnimCmd *const sSpriteAnimTable_SlidingPokeball[] = { sSpriteAnim_SlidingPokeball }; -const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball1[] = +static const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball1[] = { AFFINEANIMCMD_FRAME(0, 0, -4, 1), AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball2[] = +static const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball2[] = { AFFINEANIMCMD_FRAME(0, 0, 4, 1), AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd *const sSpriteAffineAnimTable_SlidingPokeball[] = +static const union AffineAnimCmd *const sSpriteAffineAnimTable_SlidingPokeball[] = { sSpriteAffineAnim_SlidingPokeball1, sSpriteAffineAnim_SlidingPokeball2, }; -const struct SpriteTemplate sSpriteTemplate_SlidingPokeball = +static const struct SpriteTemplate sSpriteTemplate_SlidingPokeball = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0x1009, @@ -477,7 +477,7 @@ const struct SpriteTemplate sSpriteTemplate_SlidingPokeball = .callback = SpriteCB_BT_Phase2SlidingPokeballs, }; -const struct OamData sOamData_Unused = +static const struct OamData sOamData_Unused = { .y = 0, .affineMode = 0, @@ -494,7 +494,7 @@ const struct OamData sOamData_Unused = .affineParam = 0, }; -const struct SpriteFrameImage sSpriteImageTable_UnusedBrendan[] = +static const struct SpriteFrameImage sSpriteImageTable_UnusedBrendan[] = { { .data = sSpriteImage_UnusedBrendan, @@ -502,7 +502,7 @@ const struct SpriteFrameImage sSpriteImageTable_UnusedBrendan[] = }, }; -const struct SpriteFrameImage sSpriteImageTable_UnusedLass[] = +static const struct SpriteFrameImage sSpriteImageTable_UnusedLass[] = { { .data = sSpriteImage_UnusedLass, @@ -510,15 +510,15 @@ const struct SpriteFrameImage sSpriteImageTable_UnusedLass[] = }, }; -const union AnimCmd sSpriteAnim_Unused[] = +static const union AnimCmd sSpriteAnim_Unused[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd *const sSpriteAnimTable_Unused[] = { sSpriteAnim_Unused }; +static const union AnimCmd *const sSpriteAnimTable_Unused[] = { sSpriteAnim_Unused }; -const struct SpriteTemplate sSpriteTemplateTable_Unused[] = +static const struct SpriteTemplate sSpriteTemplateTable_Unused[] = { { .tileTag = SPRITE_INVALID_TAG, @@ -541,23 +541,23 @@ const struct SpriteTemplate sSpriteTemplateTable_Unused[] = }; // this palette is shared by big pokeball and sliding pokeball -const u16 sSlidingPokeballBigPokeballPalette[] = INCBIN_U16("graphics/battle_transitions/sliding_pokeball.gbapal"); +static const u16 sSlidingPokeballBigPokeballPalette[] = INCBIN_U16("graphics/battle_transitions/sliding_pokeball.gbapal"); -const struct SpritePalette sSpritePalette_SlidingPokeball = +static const struct SpritePalette sSpritePalette_SlidingPokeball = { .data = sSlidingPokeballBigPokeballPalette, .tag = 0x1009, }; -const u16 sVsBarLoreleiPalette[] = INCBIN_U16("graphics/battle_transitions/lorelei_bg.gbapal"); -const u16 sVsBarBrunoPalette[] = INCBIN_U16("graphics/battle_transitions/bruno_bg.gbapal"); -const u16 sVsBarAgathaPalette[] = INCBIN_U16("graphics/battle_transitions/agatha_bg.gbapal"); -const u16 sVsBarLancePalette[] = INCBIN_U16("graphics/battle_transitions/lance_bg.gbapal"); -const u16 sVsBarBluePalette[] = INCBIN_U16("graphics/battle_transitions/blue_bg.gbapal"); -const u16 sVsBarMalePlayerPalette[] = INCBIN_U16("graphics/battle_transitions/red_bg.gbapal"); -const u16 sVsBarFemalePlayerPalette[] = INCBIN_U16("graphics/battle_transitions/green_bg.gbapal"); +static const u16 sVsBarLoreleiPalette[] = INCBIN_U16("graphics/battle_transitions/lorelei_bg.gbapal"); +static const u16 sVsBarBrunoPalette[] = INCBIN_U16("graphics/battle_transitions/bruno_bg.gbapal"); +static const u16 sVsBarAgathaPalette[] = INCBIN_U16("graphics/battle_transitions/agatha_bg.gbapal"); +static const u16 sVsBarLancePalette[] = INCBIN_U16("graphics/battle_transitions/lance_bg.gbapal"); +static const u16 sVsBarBluePalette[] = INCBIN_U16("graphics/battle_transitions/blue_bg.gbapal"); +static const u16 sVsBarMalePlayerPalette[] = INCBIN_U16("graphics/battle_transitions/red_bg.gbapal"); +static const u16 sVsBarFemalePlayerPalette[] = INCBIN_U16("graphics/battle_transitions/green_bg.gbapal"); -const u16 *const sVsBarOpponentPalettes[MUGSHOTS_COUNT] = +static const u16 *const sVsBarOpponentPalettes[MUGSHOTS_COUNT] = { sVsBarLoreleiPalette, sVsBarBrunoPalette, @@ -566,22 +566,22 @@ const u16 *const sVsBarOpponentPalettes[MUGSHOTS_COUNT] = sVsBarBluePalette, }; -const u16 *const sVsBarPlayerPalettes[] = +static const u16 *const sVsBarPlayerPalettes[] = { sVsBarMalePlayerPalette, sVsBarFemalePlayerPalette, }; -const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitions/unused_trainer.gbapal"); +static const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitions/unused_trainer.gbapal"); -const struct SpritePalette sSpritePalette_UnusedTrainer = +static const struct SpritePalette sSpritePalette_UnusedTrainer = { .data = sUnusedTrainerPalette, .tag = 0x100A, }; -const u16 sBigPokeballTilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_tilemap.bin"); -const u16 sVsBarTilemap[] = INCBIN_U16("graphics/battle_transitions/vsbar_tilemap.bin"); +static const u16 sBigPokeballTilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_tilemap.bin"); +static const u16 sVsBarTilemap[] = INCBIN_U16("graphics/battle_transitions/vsbar_tilemap.bin"); void BT_StartOnField(u8 transitionId) { @@ -616,18 +616,18 @@ bool8 BT_IsDone(void) } } -void BT_LaunchTask(u8 transitionId) +static void BT_LaunchTask(u8 transitionId) { u8 taskId = CreateTask(BT_TaskMain, 2); gTasks[taskId].tTransitionId = transitionId; } -void BT_TaskMain(u8 taskId) +static void BT_TaskMain(u8 taskId) { while (sBT_MainPhases[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase1Blink(struct Task *task) +static bool8 BT_Phase1Blink(struct Task *task) { SetWeatherScreenFadeOut(); CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); @@ -644,7 +644,7 @@ bool8 BT_Phase1Blink(struct Task *task) } } -bool8 BT_WaitForPhase1(struct Task *task) +static bool8 BT_WaitForPhase1(struct Task *task) { if (FindTaskIdByFunc(sBT_Phase1Tasks[task->tTransitionId]) == TASK_NONE) { @@ -657,14 +657,14 @@ bool8 BT_WaitForPhase1(struct Task *task) } } -bool8 BT_Phase2LaunchAnimTask(struct Task *task) +static bool8 BT_Phase2LaunchAnimTask(struct Task *task) { CreateTask(sBT_Phase2Tasks[task->tTransitionId], 0); ++task->tState; return FALSE; } -bool8 BT_WaitForPhase2(struct Task *task) +static bool8 BT_WaitForPhase2(struct Task *task) { task->tTransitionDone = FALSE; if (FindTaskIdByFunc(sBT_Phase2Tasks[task->tTransitionId]) == TASK_NONE) @@ -672,7 +672,7 @@ bool8 BT_WaitForPhase2(struct Task *task) return FALSE; } -void BT_Phase1Task(u8 taskId) +static void BT_Phase1Task(u8 taskId) { if (!gTasks[taskId].tState) { @@ -688,12 +688,12 @@ void BT_Phase1Task(u8 taskId) #define tInterval data[1] #define tMosaicSize data[2] -void BT_Phase2Blur(u8 taskId) +static void BT_Phase2Blur(u8 taskId) { while (sBT_Phase2BlurFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase2Blur_InitBgMosaic(struct Task *task) +static bool8 BT_Phase2Blur_InitBgMosaic(struct Task *task) { SetGpuReg(REG_OFFSET_MOSAIC, 0); SetGpuRegBits(REG_OFFSET_BG1CNT, BGCNT_MOSAIC); @@ -703,7 +703,7 @@ bool8 BT_Phase2Blur_InitBgMosaic(struct Task *task) return TRUE; } -bool8 BT_Phase2Blur_Anim(struct Task *task) +static bool8 BT_Phase2Blur_Anim(struct Task *task) { if (task->tInterval) { @@ -722,7 +722,7 @@ bool8 BT_Phase2Blur_Anim(struct Task *task) return FALSE; } -bool8 BT_Phase2Blur_IsDone(struct Task *task) +static bool8 BT_Phase2Blur_IsDone(struct Task *task) { if (!gPaletteFade.active) DestroyTask(FindTaskIdByFunc(BT_Phase2Blur)); @@ -735,12 +735,12 @@ bool8 BT_Phase2Blur_IsDone(struct Task *task) #define tTheta data[1] #define tAmplitude data[2] -void BT_Phase2DistortedWave(u8 taskId) +static void BT_Phase2DistortedWave(u8 taskId) { while (sBT_Phase2DistortedWaveFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase2DistortedWave_InitWave(struct Task *task) +static bool8 BT_Phase2DistortedWave_InitWave(struct Task *task) { BT_InitCtrlBlk(); ScanlineEffect_Clear(); @@ -753,7 +753,7 @@ bool8 BT_Phase2DistortedWave_InitWave(struct Task *task) return FALSE; } -bool8 BT_Phase2DistortedWave_UpdateWave(struct Task *task) +static bool8 BT_Phase2DistortedWave_UpdateWave(struct Task *task) { sTransitionStructPtr->vblankDma = FALSE; task->tTheta += 4; @@ -765,14 +765,14 @@ bool8 BT_Phase2DistortedWave_UpdateWave(struct Task *task) return FALSE; } -void VBCB_BT_Phase2DistortedWave(void) +static void VBCB_BT_Phase2DistortedWave(void) { BT_VBSyncOamAndPltt(); if (sTransitionStructPtr->vblankDma) DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); } -void HBCB_BT_Phase2DistortedWave(void) +static void HBCB_BT_Phase2DistortedWave(void) { s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; @@ -781,12 +781,12 @@ void HBCB_BT_Phase2DistortedWave(void) REG_BG3HOFS = offset; } -void BT_Phase2HorizontalCorrugate(u8 taskId) +static void BT_Phase2HorizontalCorrugate(u8 taskId) { while (sBT_Phase2HorizontalCorrugateFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase2HorizontalCorrugate_Init(struct Task *task) +static bool8 BT_Phase2HorizontalCorrugate_Init(struct Task *task) { BT_InitCtrlBlk(); ScanlineEffect_Clear(); @@ -799,7 +799,7 @@ bool8 BT_Phase2HorizontalCorrugate_Init(struct Task *task) return FALSE; } -bool8 BT_Phase2HorizontalCorrugate_UpdateWave(struct Task *task) +static bool8 BT_Phase2HorizontalCorrugate_UpdateWave(struct Task *task) { u8 i; u16 theta, amplitude; @@ -817,14 +817,14 @@ bool8 BT_Phase2HorizontalCorrugate_UpdateWave(struct Task *task) return FALSE; } -void VBCB_BT_Phase2HorizontalCorrugate(void) +static void VBCB_BT_Phase2HorizontalCorrugate(void) { BT_VBSyncOamAndPltt(); if (sTransitionStructPtr->vblankDma) DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); } -void HBCB_BT_Phase2HorizontalCorrugate(void) +static void HBCB_BT_Phase2HorizontalCorrugate(void) { s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; @@ -842,12 +842,12 @@ void HBCB_BT_Phase2HorizontalCorrugate(void) #define tTheta data[4] #define tAmplitude data[5] -void BT_Phase2BigPokeball(u8 taskId) +static void BT_Phase2BigPokeball(u8 taskId) { while (sBT_Phase2BigPokeballFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase2BigPokeball_Init(struct Task *task) +static bool8 BT_Phase2BigPokeball_Init(struct Task *task) { u16 i, *tilemapAddr, *tilesetAddr; @@ -874,7 +874,7 @@ bool8 BT_Phase2BigPokeball_Init(struct Task *task) return FALSE; } -bool8 BT_Phase2BigPokeball_LoadTilemapAndWave(struct Task *task) +static bool8 BT_Phase2BigPokeball_LoadTilemapAndWave(struct Task *task) { s16 i, j; u16 *tilemapAddr, *tilesetAddr; @@ -889,7 +889,7 @@ bool8 BT_Phase2BigPokeball_LoadTilemapAndWave(struct Task *task) return TRUE; } -bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task) +static bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task) { sTransitionStructPtr->vblankDma = FALSE; if (task->tInterval == 0 || --task->tInterval == 0) @@ -909,7 +909,7 @@ bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task) return FALSE; } -bool8 BT_Phase2BigPokeball_UpdateWave2DecEvb(struct Task *task) +static bool8 BT_Phase2BigPokeball_UpdateWave2DecEvb(struct Task *task) { sTransitionStructPtr->vblankDma = FALSE; if (task->tInterval == 0 || --task->tInterval == 0) @@ -942,7 +942,7 @@ bool8 BT_Phase2BigPokeball_UpdateWave2DecEvb(struct Task *task) #define tDeltaRadius data[2] #define tKeepVBCB data[3] -bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task) +static bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task) { sTransitionStructPtr->vblankDma = FALSE; if (task->tAmplitude > 0) @@ -966,7 +966,7 @@ bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task) return FALSE; } -bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task) +static bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task) { sTransitionStructPtr->vblankDma = FALSE; if (task->tDeltaRadius < 2048) @@ -993,7 +993,7 @@ bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task) return FALSE; } -void BT_VBStopDma0SyncSrcBufferSetLcdRegs(void) +static void BT_VBStopDma0SyncSrcBufferSetLcdRegs(void) { DmaStop(0); BT_VBSyncOamAndPltt(); @@ -1006,13 +1006,13 @@ void BT_VBStopDma0SyncSrcBufferSetLcdRegs(void) SetGpuReg(REG_OFFSET_BLDALPHA, sTransitionStructPtr->bldAlpha); } -void VBCB_BT_Phase2BigPokeball1(void) +static void VBCB_BT_Phase2BigPokeball1(void) { BT_VBStopDma0SyncSrcBufferSetLcdRegs(); DmaSet(0, gScanlineEffectRegBuffers[1], ®_BG0HOFS, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); } -void VBCB_BT_Phase2BigPokeball2(void) +static void VBCB_BT_Phase2BigPokeball2(void) { BT_VBStopDma0SyncSrcBufferSetLcdRegs(); DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); @@ -1025,12 +1025,12 @@ void VBCB_BT_Phase2BigPokeball2(void) #undef tAmplitude // TODO: Document this effect after knowing more about field effects. -void BT_Phase2SlidingPokeballs(u8 taskId) +static void BT_Phase2SlidingPokeballs(u8 taskId) { while (sBT_Phase2SlidingPokeballsFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase2SlidingPokeballs_LoadBgGfx(struct Task *task) +static bool8 BT_Phase2SlidingPokeballs_LoadBgGfx(struct Task *task) { u16 *tilemapAddr, *tilesetAddr; @@ -1042,7 +1042,7 @@ bool8 BT_Phase2SlidingPokeballs_LoadBgGfx(struct Task *task) return FALSE; } -bool8 BT_Phase2SlidingPokeballs_SetupFldeffArgs(struct Task *task) +static bool8 BT_Phase2SlidingPokeballs_SetupFldeffArgs(struct Task *task) { s16 i, rand; s16 arr0[NELEMS(gUnknown_83FA400)]; @@ -1063,7 +1063,7 @@ bool8 BT_Phase2SlidingPokeballs_SetupFldeffArgs(struct Task *task) return FALSE; } -bool8 BT_Phase2SlidingPokeballs_IsDone(struct Task *task) +static bool8 BT_Phase2SlidingPokeballs_IsDone(struct Task *task) { if (!FieldEffectActiveListContains(FLDEFF_POKEBALL)) { @@ -1093,7 +1093,7 @@ bool8 FldEff_Pokeball(void) ptr[index] = toStore; \ } -void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite) +static void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite) { s16 arr0[NELEMS(gUnknown_83FA40E)]; @@ -1136,12 +1136,12 @@ void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite) #define trEndPtX data[4] #define trEndPtY data[5] -void BT_Phase2ClockwiseBlackFade(u8 taskId) +static void BT_Phase2ClockwiseBlackFade(u8 taskId) { while (sBT_Phase2ClockwiseBlackFadeFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task) +static bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task) { u16 i; @@ -1161,7 +1161,7 @@ bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task) return TRUE; } -bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task) +static bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task) { sTransitionStructPtr->vblankDma = FALSE; BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->trEndPtX, -1, 1, 1); @@ -1181,7 +1181,7 @@ bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task) return FALSE; } -bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task) +static bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task) { s16 left, right; vu8 finished = FALSE; @@ -1217,7 +1217,7 @@ bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task) return FALSE; } -bool8 BT_Phase2ClockwiseBlackFade_Step3(struct Task *task) +static bool8 BT_Phase2ClockwiseBlackFade_Step3(struct Task *task) { sTransitionStructPtr->vblankDma = FALSE; BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->trEndPtX, 160, 1, 1); @@ -1248,7 +1248,7 @@ bool8 BT_Phase2ClockwiseBlackFade_Step3(struct Task *task) * of WIN0 (see variables left and right), which will sometimes cause right * to be smaller than left. In this way, garbage data will be written to WIN0H. */ -bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task) +static bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task) { s16 right, left; u16 win0H; @@ -1286,7 +1286,7 @@ bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task) return FALSE; } -bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task) +static bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task) { s16 left, right; @@ -1311,7 +1311,7 @@ bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task) return FALSE; } -bool8 BT_Phase2ClockwiseBlackFade_End(struct Task *task) +static bool8 BT_Phase2ClockwiseBlackFade_End(struct Task *task) { DmaStop(0); BT_BlendPalettesToBlack(); @@ -1319,7 +1319,7 @@ bool8 BT_Phase2ClockwiseBlackFade_End(struct Task *task) return FALSE; } -void VBCB_BT_Phase2ClockwiseBlackFade(void) +static void VBCB_BT_Phase2ClockwiseBlackFade(void) { DmaStop(0); BT_VBSyncOamAndPltt(); @@ -1344,12 +1344,12 @@ void VBCB_BT_Phase2ClockwiseBlackFade(void) #define tDelayForFade data[3] #define tStartFade data[4] -void BT_Phase2FullScreenWave(u8 taskId) +static void BT_Phase2FullScreenWave(u8 taskId) { while (sBT_Phase2FullScreenWaveFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase2FullScreenWave_Init(struct Task *task) +static bool8 BT_Phase2FullScreenWave_Init(struct Task *task) { u8 i; @@ -1364,7 +1364,7 @@ bool8 BT_Phase2FullScreenWave_Init(struct Task *task) return TRUE; } -bool8 BT_Phase2FullScreenWave_UpdateWave(struct Task *task) +static bool8 BT_Phase2FullScreenWave_UpdateWave(struct Task *task) { u8 i; s16 amplitude; @@ -1397,14 +1397,14 @@ bool8 BT_Phase2FullScreenWave_UpdateWave(struct Task *task) return FALSE; } -void VBCB_BT_Phase2FullScreenWave(void) +static void VBCB_BT_Phase2FullScreenWave(void) { BT_VBSyncOamAndPltt(); if (sTransitionStructPtr->vblankDma) DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); } -void HBCB_BT_Phase2FullScreenWave(void) +static void HBCB_BT_Phase2FullScreenWave(void) { s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; @@ -1421,12 +1421,12 @@ void HBCB_BT_Phase2FullScreenWave(void) #define tOffset data[1] #define tTheta data[2] -void BT_Phase2BlackWaveToRight(u8 taskId) +static void BT_Phase2BlackWaveToRight(u8 taskId) { while (sBT_Phase2BlackWaveToRightFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task) +static bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task) { u8 i; @@ -1443,25 +1443,25 @@ bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task) return TRUE; } -bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task) +static bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task) { u8 i, theta; - u16* toStore; + u16 *winVal; bool8 nextFunc; sTransitionStructPtr->vblankDma = FALSE; - toStore = gScanlineEffectRegBuffers[0]; + winVal = gScanlineEffectRegBuffers[0]; theta = task->tTheta; task->tTheta += 16; task->tOffset += 8; - for (i = 0, nextFunc = TRUE; i < 160; ++i, theta += 4, ++toStore) + for (i = 0, nextFunc = TRUE; i < 160; ++i, theta += 4, ++winVal) { s16 left = task->tOffset + Sin(theta, 40); if (left < 0) left = 0; if (left > 240) left = 240; - *toStore = (left << 8) | (0xF1); + *winVal = (left << 8) | (0xF1); if (left < 240) nextFunc = FALSE; } @@ -1471,7 +1471,7 @@ bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task) return FALSE; } -bool8 BT_Phase2BlackWaveToRight_End(struct Task *task) +static bool8 BT_Phase2BlackWaveToRight_End(struct Task *task) { DmaStop(0); BT_BlendPalettesToBlack(); @@ -1479,7 +1479,7 @@ bool8 BT_Phase2BlackWaveToRight_End(struct Task *task) return FALSE; } -void VBCB_BT_Phase2BlackWaveToRight(void) +static void VBCB_BT_Phase2BlackWaveToRight(void) { DmaStop(0); BT_VBSyncOamAndPltt(); @@ -1494,13 +1494,13 @@ void VBCB_BT_Phase2BlackWaveToRight(void) #undef tOffset #undef tTheta -void BT_Phase2AntiClockwiseSpiral(u8 taskId) +static void BT_Phase2AntiClockwiseSpiral(u8 taskId) { while (sBT_Phase2AntiClockwiseSpiralFuncs[gTasks[taskId].tState](&gTasks[taskId])); } #ifdef NONMATCHING -void sub_80D1F64(s16 a1, s16 a2, bool8 a3) +static void sub_80D1F64(s16 a1, s16 a2, bool8 a3) { s16 elem; @@ -1512,7 +1512,7 @@ void sub_80D1F64(s16 a1, s16 a2, bool8 a3) } #else NAKED -void sub_80D1F64(s16 a1, s16 a2, bool8 a3) +static void sub_80D1F64(s16 a1, s16 a2, bool8 a3) { asm_unified("\n\ push {r4-r7,lr}\n\ @@ -2302,7 +2302,7 @@ void sub_80D1F64(s16 a1, s16 a2, bool8 a3) } #endif -bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task) +static bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task) { BT_InitCtrlBlk(); ScanlineEffect_Clear(); @@ -2322,7 +2322,7 @@ bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task) return FALSE; } -bool8 BT_Phase2AntiClockwiseSpiral_Update(struct Task *task) +static bool8 BT_Phase2AntiClockwiseSpiral_Update(struct Task *task) { s16 v0, v1; @@ -2358,7 +2358,7 @@ bool8 BT_Phase2AntiClockwiseSpiral_Update(struct Task *task) return FALSE; } -void VBCB_BT_Phase2AntiClockwiseBlackFade(void) +static void VBCB_BT_Phase2AntiClockwiseBlackFade(void) { DmaStop(0); BT_VBSyncOamAndPltt(); @@ -2398,42 +2398,42 @@ void VBCB_BT_Phase2AntiClockwiseBlackFade(void) #define sphasSlideFinished data[6] #define spOpponentOrPlayer data[7] -void BT_Phase2StartLoreleiMugshot(u8 taskId) +static void BT_Phase2StartLoreleiMugshot(u8 taskId) { gTasks[taskId].tWhichMugshot = MUGSHOT_LORELEI; BT_Phase2Mugshot(taskId); } -void BT_Phase2StartBrunoMugshot(u8 taskId) +static void BT_Phase2StartBrunoMugshot(u8 taskId) { gTasks[taskId].tWhichMugshot = MUGSHOT_BRUNO; BT_Phase2Mugshot(taskId); } -void BT_Phase2StartAgathaMugshot(u8 taskId) +static void BT_Phase2StartAgathaMugshot(u8 taskId) { gTasks[taskId].tWhichMugshot = MUGSHOT_AGATHA; BT_Phase2Mugshot(taskId); } -void BT_Phase2StartLanceMugshot(u8 taskId) +static void BT_Phase2StartLanceMugshot(u8 taskId) { gTasks[taskId].tWhichMugshot = MUGSHOT_LANCE; BT_Phase2Mugshot(taskId); } -void BT_Phase2StartBlueMugshot(u8 taskId) +static void BT_Phase2StartBlueMugshot(u8 taskId) { gTasks[taskId].tWhichMugshot = MUGSHOT_BLUE; BT_Phase2Mugshot(taskId); } -void BT_Phase2Mugshot(u8 taskId) +static void BT_Phase2Mugshot(u8 taskId) { while (sBT_Phase2MugshotFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase2Mugshot_Init(struct Task *task) +static bool8 BT_Phase2Mugshot_Init(struct Task *task) { u8 i; @@ -2453,7 +2453,7 @@ bool8 BT_Phase2Mugshot_Init(struct Task *task) return FALSE; } -bool8 BT_Phase2Mugshot_LoadGfx(struct Task *task) +static bool8 BT_Phase2Mugshot_LoadGfx(struct Task *task) { s16 i, j; u16 *tilemapAddr, *tilesetAddr; @@ -2472,35 +2472,35 @@ bool8 BT_Phase2Mugshot_LoadGfx(struct Task *task) return FALSE; } -bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task) +static bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task) { u8 i, theta; - u16* toStore; + u16 *winVal; s16 value; s32 mergedBg0hOfs; sTransitionStructPtr->vblankDma = FALSE; - toStore = gScanlineEffectRegBuffers[0]; + winVal = gScanlineEffectRegBuffers[0]; theta = task->tTheta; task->tTheta += 0x10; - for (i = 0; i < 80; ++i, ++toStore, theta += 0x10) + for (i = 0; i < 80; ++i, ++winVal, theta += 0x10) { value = task->tbg0HOfsOpponent + Sin(theta, 0x10); if (value < 0) value = 1; if (value > 0xF0) value = 0xF0; - *toStore = value; + *winVal = value; } - for (; i < 160; ++i, ++toStore, theta += 0x10) + for (; i < 160; ++i, ++winVal, theta += 0x10) { value = task->tCounter - Sin(theta, 0x10); if (value < 0) value = 0; if (value > 0xEF) value = 0xEF; - *toStore = (value << 8) | (0xF0); + *winVal = (value << 8) | (0xF0); } task->tbg0HOfsOpponent += 8; task->tCounter -= 8; @@ -2517,14 +2517,14 @@ bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task) return FALSE; } -bool8 BT_Phase2Mugshot_StartSpriteSlide(struct Task *task) +static bool8 BT_Phase2Mugshot_StartSpriteSlide(struct Task *task) { u8 i; - u16* toStore; + u16 *winVal; sTransitionStructPtr->vblankDma = FALSE; - for (i = 0, toStore = gScanlineEffectRegBuffers[0]; i < 160; ++i, ++toStore) - *toStore = 0xF0; + for (i = 0, winVal = gScanlineEffectRegBuffers[0]; i < 160; ++i, ++winVal) + *winVal = 0xF0; ++task->tState; task->tTheta = 0; task->tbg0HOfsOpponent = 0; @@ -2539,7 +2539,7 @@ bool8 BT_Phase2Mugshot_StartSpriteSlide(struct Task *task) return FALSE; } -bool8 BT_Phase2Mugshot_WaitForOpponentInPlace(struct Task *task) +static bool8 BT_Phase2Mugshot_WaitForOpponentInPlace(struct Task *task) { sTransitionStructPtr->bg0HOfsOpponent -= 8; sTransitionStructPtr->bg0HOfsPlayer += 8; @@ -2551,7 +2551,7 @@ bool8 BT_Phase2Mugshot_WaitForOpponentInPlace(struct Task *task) return FALSE; } -bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task) +static bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task) { sTransitionStructPtr->bg0HOfsOpponent -= 8; sTransitionStructPtr->bg0HOfsPlayer += 8; @@ -2573,7 +2573,7 @@ bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task) return FALSE; } -bool8 BT_Phase2Mugshot_ExpandWhiteBand(struct Task *task) +static bool8 BT_Phase2Mugshot_ExpandWhiteBand(struct Task *task) { bool32 nextFunc; @@ -2612,7 +2612,7 @@ bool8 BT_Phase2Mugshot_ExpandWhiteBand(struct Task *task) return FALSE; } -bool8 BT_Phase2Mugshot_StartBlackFade(struct Task *task) +static bool8 BT_Phase2Mugshot_StartBlackFade(struct Task *task) { sTransitionStructPtr->vblankDma = FALSE; BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE); @@ -2622,7 +2622,7 @@ bool8 BT_Phase2Mugshot_StartBlackFade(struct Task *task) return TRUE; } -bool8 BT_Phase2Mugshot_WaitForBlackFade(struct Task *task) +static bool8 BT_Phase2Mugshot_WaitForBlackFade(struct Task *task) { sTransitionStructPtr->vblankDma = FALSE; ++task->tCounter; @@ -2633,7 +2633,7 @@ bool8 BT_Phase2Mugshot_WaitForBlackFade(struct Task *task) return FALSE; } -bool8 BT_Phase2Mugshot_End(struct Task *task) +static bool8 BT_Phase2Mugshot_End(struct Task *task) { DmaStop(0); BT_BlendPalettesToBlack(); @@ -2641,7 +2641,7 @@ bool8 BT_Phase2Mugshot_End(struct Task *task) return FALSE; } -void VBCB_BT_Phase2Mugshot1_Slide(void) +static void VBCB_BT_Phase2Mugshot1_Slide(void) { DmaStop(0); BT_VBSyncOamAndPltt(); @@ -2654,7 +2654,7 @@ void VBCB_BT_Phase2Mugshot1_Slide(void) DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); } -void VBCB_BT_Phase2Mugshot2_WhiteFade(void) +static void VBCB_BT_Phase2Mugshot2_WhiteFade(void) { DmaStop(0); BT_VBSyncOamAndPltt(); @@ -2664,7 +2664,7 @@ void VBCB_BT_Phase2Mugshot2_WhiteFade(void) DmaSet(0, gScanlineEffectRegBuffers[1], ®_BLDY, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); } -void HBCB_BT_Phase2Mugshot(void) +static void HBCB_BT_Phase2Mugshot(void) { if (REG_VCOUNT < 80) REG_BG0HOFS = sTransitionStructPtr->bg0HOfsOpponent; @@ -2673,7 +2673,7 @@ void HBCB_BT_Phase2Mugshot(void) } -void BT_Phase2Mugshots_CreateSprites(struct Task *task) +static void BT_Phase2Mugshots_CreateSprites(struct Task *task) { struct Sprite *opponentSprite, *playerSprite; s16 mugshotId; @@ -2701,17 +2701,17 @@ void BT_Phase2Mugshots_CreateSprites(struct Task *task) SetOamMatrixRotationScaling(playerSprite->oam.matrixNum, -512, 512, 0); } -void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite) +static void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite) { while (sBT_Phase2MugshotSpriteFuncs[sprite->spState](sprite)); } -bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite) +static bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite) { return FALSE; } -bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite) +static bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite) { s16 arr0[2]; s16 arr1[2]; @@ -2724,7 +2724,7 @@ bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite) return TRUE; } -bool8 BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn(struct Sprite *sprite) +static bool8 BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn(struct Sprite *sprite) { sprite->pos1.x += sprite->spSpeed; if (sprite->spOpponentOrPlayer && sprite->pos1.x < 133) @@ -2734,7 +2734,7 @@ bool8 BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn(struct Sprite *sprite) return FALSE; } -bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite(struct Sprite *sprite) +static bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite(struct Sprite *sprite) { sprite->spSpeed += sprite->spAbsAcc; sprite->pos1.x += sprite->spSpeed; @@ -2748,7 +2748,7 @@ bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite(struct Sprite *sprite) } // not used -bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2(struct Sprite *sprite) +static bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2(struct Sprite *sprite) { sprite->spSpeed += sprite->spAbsAcc; sprite->pos1.x += sprite->spSpeed; @@ -2757,17 +2757,17 @@ bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2(struct Sprite *sprite) return FALSE; } -void BT_SetSpriteAsOpponentOrPlayer(s16 spriteId, bool16 value) +static void BT_SetSpriteAsOpponentOrPlayer(s16 spriteId, bool16 value) { gSprites[spriteId].spOpponentOrPlayer = value; } -void BT_StartSpriteSlide(s16 spriteId) +static void BT_StartSpriteSlide(s16 spriteId) { ++gSprites[spriteId].spState; } -s16 BT_IsSpriteSlideFinished(s16 spriteId) +static s16 BT_IsSpriteSlideFinished(s16 spriteId) { return gSprites[spriteId].sphasSlideFinished; } @@ -2791,12 +2791,12 @@ s16 BT_IsSpriteSlideFinished(s16 spriteId) #define tAcc data[2] #define tJerk data[3] -void BT_Phase2SlicedScreen(u8 taskId) +static void BT_Phase2SlicedScreen(u8 taskId) { while (sBT_Phase2SlicedScreenFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase2SlicedScreen_Init(struct Task *task) +static bool8 BT_Phase2SlicedScreen_Init(struct Task *task) { u16 i; @@ -2819,7 +2819,7 @@ bool8 BT_Phase2SlicedScreen_Init(struct Task *task) return TRUE; } -bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task) +static bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task) { u16 i; @@ -2852,7 +2852,7 @@ bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task) return FALSE; } -bool8 BT_Phase2SlicedScreen_End(struct Task *task) +static bool8 BT_Phase2SlicedScreen_End(struct Task *task) { DmaStop(0); BT_BlendPalettesToBlack(); @@ -2860,7 +2860,7 @@ bool8 BT_Phase2SlicedScreen_End(struct Task *task) return FALSE; } -void VBCB_BT_Phase2SlicedScreen(void) +static void VBCB_BT_Phase2SlicedScreen(void) { DmaStop(0); BT_VBSyncOamAndPltt(); @@ -2872,7 +2872,7 @@ void VBCB_BT_Phase2SlicedScreen(void) DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); } -void HBCB_BT_Phase2SlicedScreen(void) +static void HBCB_BT_Phase2SlicedScreen(void) { s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; @@ -2891,12 +2891,12 @@ void HBCB_BT_Phase2SlicedScreen(void) #define spDelay data[5] #define spLastSprite data[6] -void BT_Phase2WhiteFadeInStripes(u8 taskId) +static void BT_Phase2WhiteFadeInStripes(u8 taskId) { while (sBT_Phase2WhiteFadeInStripesFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task) +static bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task) { u16 i; @@ -2919,7 +2919,7 @@ bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task) return FALSE; } -bool8 BT_Phase2WhiteFadeInStripes_SetupSprites(struct Task *task) +static bool8 BT_Phase2WhiteFadeInStripes_SetupSprites(struct Task *task) { s16 i, posY; s16 buffer[NELEMS(sWhiteStripeDelay)]; @@ -2938,7 +2938,7 @@ bool8 BT_Phase2WhiteFadeInStripes_SetupSprites(struct Task *task) return FALSE; } -bool8 BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone(struct Task *task) +static bool8 BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone(struct Task *task) { sTransitionStructPtr->vblankDma = FALSE; if (sTransitionStructPtr->counter > 5) @@ -2949,7 +2949,7 @@ bool8 BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone(struct Task *task) return FALSE; } -bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task) +static bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task) { sTransitionStructPtr->vblankDma = FALSE; DmaStop(0); @@ -2965,7 +2965,7 @@ bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task) return FALSE; } -bool8 BT_Phase2WhiteFadeInStripes_IsDone(struct Task *task) +static bool8 BT_Phase2WhiteFadeInStripes_IsDone(struct Task *task) { sTransitionStructPtr->counter += 480; sTransitionStructPtr->bldY = sTransitionStructPtr->counter >> 8; @@ -2977,7 +2977,7 @@ bool8 BT_Phase2WhiteFadeInStripes_IsDone(struct Task *task) return FALSE; } -void VBCB_BT_Phase2WhiteFadeInStripes1(void) +static void VBCB_BT_Phase2WhiteFadeInStripes1(void) { DmaStop(0); BT_VBSyncOamAndPltt(); @@ -2990,7 +2990,7 @@ void VBCB_BT_Phase2WhiteFadeInStripes1(void) DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); } -void VBCB_BT_Phase2WhiteFadeInStripes2(void) +static void VBCB_BT_Phase2WhiteFadeInStripes2(void) { BT_VBSyncOamAndPltt(); SetGpuReg(REG_OFFSET_BLDY, sTransitionStructPtr->bldY); @@ -3002,7 +3002,7 @@ void VBCB_BT_Phase2WhiteFadeInStripes2(void) } -void HBCB_BT_Phase2WhiteFadeInStripes(void) +static void HBCB_BT_Phase2WhiteFadeInStripes(void) { vu16 index = REG_VCOUNT; @@ -3011,7 +3011,7 @@ void HBCB_BT_Phase2WhiteFadeInStripes(void) REG_BLDY = gScanlineEffectRegBuffers[1][index]; } -void SpriteCB_BT_Phase2WhiteFadeInStripes(struct Sprite *sprite) +static void SpriteCB_BT_Phase2WhiteFadeInStripes(struct Sprite *sprite) { if (sprite->spDelay) { @@ -3022,8 +3022,8 @@ void SpriteCB_BT_Phase2WhiteFadeInStripes(struct Sprite *sprite) else { u16 i; - u16* bldY = &gScanlineEffectRegBuffers[0][sprite->pos1.y]; - u16* win0H = &gScanlineEffectRegBuffers[0][sprite->pos1.y + 160]; + u16 *bldY = &gScanlineEffectRegBuffers[0][sprite->pos1.y]; + u16 *win0H = &gScanlineEffectRegBuffers[0][sprite->pos1.y + 160]; u32 stripeWidth = sprite->spLastSprite ? 0x19 : 0x1B; for (i = 0; i < stripeWidth; ++i) @@ -3061,12 +3061,12 @@ void SpriteCB_BT_Phase2WhiteFadeInStripes(struct Sprite *sprite) #define tDelay data[1] #define tWhichGrid data[2] -void BT_Phase2GridSquares(u8 taskId) +static void BT_Phase2GridSquares(u8 taskId) { while (sBT_Phase2GridSquaresFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase2GridSquares_LoadGfx(struct Task *task) +static bool8 BT_Phase2GridSquares_LoadGfx(struct Task *task) { u16 *tilemapAddr, *tilesetAddr; @@ -3078,9 +3078,9 @@ bool8 BT_Phase2GridSquares_LoadGfx(struct Task *task) return FALSE; } -bool8 BT_Phase2GridSquares_UpdateTileset(struct Task *task) +static bool8 BT_Phase2GridSquares_UpdateTileset(struct Task *task) { - u16* tilesetAddr; + u16 *tilesetAddr; if (task->tDelay == 0) { @@ -3098,7 +3098,7 @@ bool8 BT_Phase2GridSquares_UpdateTileset(struct Task *task) return FALSE; } -bool8 BT_Phase2GridSquares_IsDone(struct Task *task) +static bool8 BT_Phase2GridSquares_IsDone(struct Task *task) { if (--task->tDelay == 0) { @@ -3118,12 +3118,12 @@ bool8 BT_Phase2GridSquares_IsDone(struct Task *task) #define trCurrentPtX data[2] #define trCurrentPtY data[3] -void BT_Phase2BlackDoodles(u8 taskId) +static void BT_Phase2BlackDoodles(u8 taskId) { while (sBT_Phase2BlackDoodlesFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase2BlackDoodles_Init(struct Task *task) +static bool8 BT_Phase2BlackDoodles_Init(struct Task *task) { u16 i; @@ -3140,7 +3140,7 @@ bool8 BT_Phase2BlackDoodles_Init(struct Task *task) return TRUE; } -bool8 BT_Phase2BlackDoodles_InitSingleBrush(struct Task *task) +static bool8 BT_Phase2BlackDoodles_InitSingleBrush(struct Task *task) { BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, sBlackDoodlesSegments[task->tWhichBrush][0], sBlackDoodlesSegments[task->tWhichBrush][1], sBlackDoodlesSegments[task->tWhichBrush][2], sBlackDoodlesSegments[task->tWhichBrush][3], 1, 1); task->tWhichSide = sBlackDoodlesSegments[task->tWhichBrush][4]; @@ -3148,7 +3148,7 @@ bool8 BT_Phase2BlackDoodles_InitSingleBrush(struct Task *task) return TRUE; } -bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task) +static bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task) { s16 i; bool8 nextFunc; @@ -3185,7 +3185,7 @@ bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task) return FALSE; } -bool8 BT_Phase2BlackDoodles_IsDone(struct Task *task) +static bool8 BT_Phase2BlackDoodles_IsDone(struct Task *task) { if (++task->tWhichBrush < 7) { @@ -3202,7 +3202,7 @@ bool8 BT_Phase2BlackDoodles_IsDone(struct Task *task) } } -bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task) +static bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task) { if (--task->tDelay == 0) { @@ -3213,7 +3213,7 @@ bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task) return FALSE; } -void VBCB_BT_Phase2BlackDoodles(void) +static void VBCB_BT_Phase2BlackDoodles(void) { DmaStop(0); BT_VBSyncOamAndPltt(); @@ -3241,7 +3241,7 @@ void VBCB_BT_Phase2BlackDoodles(void) #define tDelayCounter data[6] #define tCoeff data[7] -void BT_CreatePhase1SubTask(s16 fadeOutDelay, s16 fadeInDelay, s16 blinkTimes, s16 fadeOutSpeed, s16 fadeInSpeed) +static void BT_CreatePhase1SubTask(s16 fadeOutDelay, s16 fadeInDelay, s16 blinkTimes, s16 fadeOutSpeed, s16 fadeInSpeed) { u8 taskId = CreateTask(BT_Phase1SubTask, 3); gTasks[taskId].tFadeOutDelay = fadeOutDelay; @@ -3252,7 +3252,7 @@ void BT_CreatePhase1SubTask(s16 fadeOutDelay, s16 fadeInDelay, s16 blinkTimes, s gTasks[taskId].tDelayCounter = fadeOutDelay; } -bool8 BT_IsPhase1Done(void) +static bool8 BT_IsPhase1Done(void) { if (FindTaskIdByFunc(BT_Phase1SubTask) == TASK_NONE) return TRUE; @@ -3260,12 +3260,12 @@ bool8 BT_IsPhase1Done(void) return FALSE; } -void BT_Phase1SubTask(u8 taskId) +static void BT_Phase1SubTask(u8 taskId) { while (sBT_Phase1FadeFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -bool8 BT_Phase1_FadeOut(struct Task *task) +static bool8 BT_Phase1_FadeOut(struct Task *task) { if (task->tDelayCounter == 0 || --task->tDelayCounter == 0) { @@ -3283,7 +3283,7 @@ bool8 BT_Phase1_FadeOut(struct Task *task) return FALSE; } -bool8 BT_Phase1_FadeIn(struct Task *task) +static bool8 BT_Phase1_FadeIn(struct Task *task) { if (task->tDelayCounter == 0 || --task->tDelayCounter == 0) { @@ -3316,29 +3316,29 @@ bool8 BT_Phase1_FadeIn(struct Task *task) #undef tDelayCounter #undef tCoeff -void BT_InitCtrlBlk(void) +static void BT_InitCtrlBlk(void) { memset(sTransitionStructPtr, 0, sizeof(*sTransitionStructPtr)); sub_805A658(&sTransitionStructPtr->bg123HOfs, &sTransitionStructPtr->bg123VOfs); } -void BT_VBSyncOamAndPltt(void) +static void BT_VBSyncOamAndPltt(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void BT_GetBg0TilesetBase(u16 **tilesetPtr) +static void BT_GetBg0TilesetBase(u16 **tilesetPtr) { u16 charBase; charBase = GetGpuReg(REG_OFFSET_BG0CNT) >> 2; charBase <<= 0xE; - *tilesetPtr = (u16*)(VRAM + charBase); + *tilesetPtr = (u16 *)(VRAM + charBase); } -void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr) +static void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr) { u16 screenBase, charBase; @@ -3346,16 +3346,16 @@ void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr) charBase = GetGpuReg(REG_OFFSET_BG0CNT) >> 2; screenBase <<= 0xB; charBase <<= 0xE; - *tilemapPtr = (u16*)(VRAM + screenBase); - *tilesetPtr = (u16*)(VRAM + charBase); + *tilemapPtr = (u16 *)(VRAM + screenBase); + *tilesetPtr = (u16 *)(VRAM + charBase); } -void BT_BlendPalettesToBlack(void) +static void BT_BlendPalettesToBlack(void) { BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); } -void BT_LoadWaveIntoBuffer(s16 *buffer, s16 offset, s16 theta, s16 frequency, s16 amplitude, s16 bufSize) +static void BT_LoadWaveIntoBuffer(s16 *buffer, s16 offset, s16 theta, s16 frequency, s16 amplitude, s16 bufSize) { u8 i; @@ -3363,7 +3363,7 @@ void BT_LoadWaveIntoBuffer(s16 *buffer, s16 offset, s16 theta, s16 frequency, s1 buffer[i] = offset + Sin(0xFF & theta, amplitude); } -void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius) +static void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius) { s16 i; @@ -3424,7 +3424,7 @@ void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius) #define trAbsDeltaY data[9] #define trAccum data[10] // track one dimension based on slope -void BT_DiagonalSegment_InitParams(s16 *data, s16 startPtX, s16 startPtY, s16 endPtX, s16 endPtY, s16 stepX, s16 stepY) +static void BT_DiagonalSegment_InitParams(s16 *data, s16 startPtX, s16 startPtY, s16 endPtX, s16 endPtY, s16 stepX, s16 stepY) { trStartPtX = startPtX; trStartPtY = startPtY; @@ -3449,7 +3449,7 @@ void BT_DiagonalSegment_InitParams(s16 *data, s16 startPtX, s16 startPtY, s16 en trAccum = 0; } -bool8 BT_DiagonalSegment_ComputePointOnSegment(s16 *data, bool8 checkBoundary1, bool8 checkBoundary2) +static bool8 BT_DiagonalSegment_ComputePointOnSegment(s16 *data, bool8 checkBoundary1, bool8 checkBoundary2) { u8 finish; -- cgit v1.2.3 From d4ace1162fd85d0531da5bf2296102bf1f503073 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sat, 27 Jul 2019 07:19:36 +0800 Subject: current progress for sub_80D1F64 --- src/battle_transition.c | 241 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 232 insertions(+), 9 deletions(-) diff --git a/src/battle_transition.c b/src/battle_transition.c index 71296c67f..0fd92d631 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1500,19 +1500,242 @@ static void BT_Phase2AntiClockwiseSpiral(u8 taskId) } #ifdef NONMATCHING -static void sub_80D1F64(s16 a1, s16 a2, bool8 a3) +static void sub_80D1F64(s16 a1, s16 a2, u8 a3) { - s16 elem; - - for (elem = 320; elem < NELEMS(gScanlineEffectRegBuffers[1]); ++elem) - gScanlineEffectRegBuffers[1][elem] = 120; - WILL DO IT LATER - LET ME RESOLVE OTHER STUFF FIRST + s16 i, j; + u8 theta = 0; + for (i = 320; i < 960; ++i) + gScanlineEffectRegBuffers[1][i] = 120; + for (i = 0; i < (a2 << 4); ++i, ++theta) + { + s16 res1, res2, res3, res4, diff, r8, r0; + + // PROBLEM #1: + // (around line 50 in ASM) + // This part completely doesn't match. + // It's also not tail merge. + if ((theta >> 3) != ((theta + 1) >> 3)) + { + r8 = (theta >> 3) + a1; + ++r8; + r0 = (theta >> 3) + a1; + } + else + { + r0 = (theta >> 3) + a1; + r8 = (theta >> 3) + a1; + } + res1 = 80 - Sin(theta, r0); + res2 = Cos(theta, r0) + 120; + res3 = 80 - Sin(theta + 1, r8); + res4 = Cos(theta + 1, r8) + 120; + if ((res1 >= 0 || res3 >= 0) && (res1 <= 159 || res3 <= 159)) + { + if (res1 < 0) + res1 = 0; + if (res1 > 159) + res1 = 159; + if (res2 < 0) + res2 = 0; + if (res2 > 255) + res2 = 255; + if (res3 < 0) + res3 = 0; + if (res3 > 159) + res3 = 159; + if (res4 < 0) + res4 = 0; + if (res4 > 255) + res4 = 255; + diff = res3 - res1; + if (theta - 64 >= 0) + { + gScanlineEffectRegBuffers[1][res1 + 320] = res2; + if (diff) + { + s16 diff2 = res4 - res2; + + if (diff2 < -1 && res2 > 1) + --res2; + else if (diff2 > 1 && res2 <= 254) + ++res2; + // PROBLEM #2: + // (around line 300 in ASM) + // The current version matched the control flow, + // but it looks too weird and some shift doesn't match + + // functional equivalent: + // for (j = diff; j < 0; ++j) + // gScanlineEffectRegBuffers[1][res1 + j + 480] = res2; + // for (j = diff; j > 0; --j) + // gScanlineEffectRegBuffers[1][res1 + j + 480] = res2; + if ((j = diff) < 0) + do + gScanlineEffectRegBuffers[1][res1 + j + 320] = res2; + while (++j < 0); + else + while (j > 0) + { + gScanlineEffectRegBuffers[1][res1 + j + 320] = res2; + ++j; + } + } + } + else + { + gScanlineEffectRegBuffers[1][res1 + 480] = res2; + if (diff) + { + s16 diff2 = res4 - res2; + + if (diff2 < -1 && res2 > 1) + --res2; + else if (diff2 > 1 && res2 <= 254) + ++res2; + // same as PROBLEM #2 + for (j = diff; j < 0; ++j) + gScanlineEffectRegBuffers[1][res1 + j + 480] = res2; + for (j = diff; j > 0; --j) + gScanlineEffectRegBuffers[1][res1 + j + 480] = res2; + } + } + } + } + // PROBLEM #3: We need (a2 << 16) & 0x30000 here. + // Is it because the programmer declared a s32 var to + // hold the value of a2 and then cast the result to s16? + // Currently I have to write it explicitly. + // (around line 460 in ASM) + if (!a3 || !((a2 << 16) & 0x30000)) + { + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[1][i * 2 + a3] = (gScanlineEffectRegBuffers[1][i + 320] << 8) | gScanlineEffectRegBuffers[1][i + 480]; + } + else + { + s16 res = Sin(a2 * 16, a1 + a2 * 2); + + switch (a2 / 4) + { + case 0: + if (res > 80) + res = 80; + // PROBLEM #4: + // (around line 550 in ASM) + // Case 0-3 are very similar, so it's very likely + // that they have the same problem. + // The code is definitely functional equivalent, + // but the vanilla game used some extra shifts and + // used unsigned comparison. Another difference is + // that I can't figure out a way to make gUnknown_83FA444[a2] + // happen outside the loop body. + // It seems that sTransitionStructPtr->data[2] need + // to be used in the first statement so that the + // struct pointer sTransitionStructPtr will be loaded + // early enough. + // + // Logically the generated code is following if + do-while structure. + // But it seems that it can only make the situation even worse. + /* + i = res; + if (i > 0) + { + // This happens before loop body. + s16 unk = gUnknown_83FA444[a2]; + + do + { + sTransitionStructPtr->data[2] = ((i * unk) >> 8) + 120; + if (sTransitionStructPtr->data[2] <= 255) + { + sTransitionStructPtr->bg123HOfs = 400 - i; + sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][400 - i]; + if (gScanlineEffectRegBuffers[1][560 - i] < sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][560 - i] = 120; + else if (gScanlineEffectRegBuffers[1][400 - i] < sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][400 - i] = sTransitionStructPtr->data[2]; + } + } + while (--i > 0); + } + */ + for (i = res; i > 0; --i) + { + sTransitionStructPtr->data[2] = ((i * gUnknown_83FA444[a2]) >> 8) + 120; + if (sTransitionStructPtr->data[2] <= 255) + { + sTransitionStructPtr->bg123HOfs = 400 - i; + sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][400 - i]; + if (gScanlineEffectRegBuffers[1][560 - i] < sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][560 - i] = 120; + else if (gScanlineEffectRegBuffers[1][400 - i] < sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][400 - i] = sTransitionStructPtr->data[2]; + } + } + break; + case 1: + if (res > 80) + res = 80; + // same as PROBLEM #4 + for (i = res; i > 0; --i) + { + s16 unkVal; + + sTransitionStructPtr->data[2] = ((i * gUnknown_83FA444[a2]) >> 8) + 120; + if (sTransitionStructPtr->data[2] <= 255) + { + sTransitionStructPtr->bg123HOfs = 400 - i; + sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][400 - i]; + if (gScanlineEffectRegBuffers[1][400 - i] < sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][400 - i] = sTransitionStructPtr->data[2]; + } + } + break; + case 2: + if (res < -79) + res = -79; + // same as PROBLEM #4 + for (i = res; i <= 0; ++i) + { + sTransitionStructPtr->data[2] = ((i * gUnknown_83FA444[a2]) >> 8) + 120; + if (sTransitionStructPtr->data[2] <= 255) + { + sTransitionStructPtr->bg123HOfs = 560 - i; + sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][560 - i]; + if (gScanlineEffectRegBuffers[1][400 - i] >= sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][400 - i] = 120; + else if (gScanlineEffectRegBuffers[1][560 - i] > sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][560 - i] = sTransitionStructPtr->data[2]; + } + } + break; + case 3: + if (res < -79) + res = -79; + // same as PROBLEM #4 + for (i = res; i <= 0; ++i) + { + sTransitionStructPtr->data[2] = ((i * gUnknown_83FA444[a2]) >> 8) + 120; + if (sTransitionStructPtr->data[2] <= 255) + { + sTransitionStructPtr->bg123HOfs = 560 - i; + sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][560 - i]; + if (gScanlineEffectRegBuffers[1][560 - i] > sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][560 - i] = sTransitionStructPtr->data[2]; + } + } + break; + default: + break; + } + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[1][2 * i + a3] = (gScanlineEffectRegBuffers[1][i + 320] << 8) | gScanlineEffectRegBuffers[1][i + 480]; + } } #else NAKED -static void sub_80D1F64(s16 a1, s16 a2, bool8 a3) +static void sub_80D1F64(s16 a1, s16 a2, u8 a3) { asm_unified("\n\ push {r4-r7,lr}\n\ @@ -2508,7 +2731,7 @@ static bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task) task->tbg0HOfsOpponent = 0xF0; if (task->tCounter < 0) task->tCounter = 0; - mergedBg0hOfs = *(s32*)(&task->tbg0HOfsOpponent); + mergedBg0hOfs = *(s32 *)(&task->tbg0HOfsOpponent); if (mergedBg0hOfs == 0x00F0) ++task->tState; sTransitionStructPtr->bg0HOfsOpponent -= 8; -- cgit v1.2.3