diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2019-07-30 19:39:07 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-30 19:39:07 -0400 |
commit | 1a34a06758175b4d39ee0a81c3441ac958d005fd (patch) | |
tree | 6d45cd2c009eabf36e6a34550607bfa80cad5ed9 | |
parent | d4cc0e161bf103d3d3e01fefa02e867d4a2053c2 (diff) | |
parent | d4ace1162fd85d0531da5bf2296102bf1f503073 (diff) |
Merge pull request #84 from jiangzhengwenjz/battle_transition
battle_transition
36 files changed, 3971 insertions, 7632 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 deleted file mode 100644 index 48a5836ed..000000000 --- a/asm/battle_transition.s +++ /dev/null @@ -1,7480 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80D08B8 -sub_80D08B8: @ 80D08B8 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _080D08DC @ =gUnknown_2039A2C - movs r0, 0x3C - bl AllocZeroed - str r0, [r5] - ldr r1, _080D08E0 @ =gMain - ldr r0, _080D08E4 @ =sub_80565A8 - str r0, [r1, 0x4] - adds r0, r4, 0 - bl LaunchBattleTransitionTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D08DC: .4byte gUnknown_2039A2C -_080D08E0: .4byte gMain -_080D08E4: .4byte sub_80565A8 - thumb_func_end sub_80D08B8 - - thumb_func_start sub_80D08E8 -sub_80D08E8: @ 80D08E8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl LaunchBattleTransitionTask - pop {r0} - bx r0 - thumb_func_end sub_80D08E8 - - thumb_func_start sub_80D08F8 -sub_80D08F8: @ 80D08F8 - push {r4,r5,lr} - ldr r0, _080D091C @ =sub_80D0978 - 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 sub_80D0978 -_080D0920: .4byte gTasks -_080D0924: - bl sub_80D3DD0 - ldr r4, _080D0944 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C - thumb_func_end sub_80D08F8 - - thumb_func_start LaunchBattleTransitionTask -LaunchBattleTransitionTask: @ 80D0948 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080D0970 @ =sub_80D0978 - 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 sub_80D0978 -_080D0974: .4byte gTasks - thumb_func_end LaunchBattleTransitionTask - - thumb_func_start sub_80D0978 -sub_80D0978: @ 80D0978 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D09A8 @ =gUnknown_83FA3B0 - 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 gUnknown_83FA3B0 -_080D09AC: .4byte gTasks - thumb_func_end sub_80D0978 - - thumb_func_start Transition_Phase1 -Transition_Phase1: @ 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 @ =gUnknown_83FA320 - 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 gUnknown_83FA320 -_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 Transition_Phase1 - - thumb_func_start Transition_WaitForPhase1 -Transition_WaitForPhase1: @ 80D0A00 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080D0A20 @ =gUnknown_83FA320 - 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 gUnknown_83FA320 -_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 Transition_WaitForPhase1 - - thumb_func_start Transition_Phase2 -Transition_Phase2: @ 80D0A34 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080D0A58 @ =gUnknown_83FA368 - 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 gUnknown_83FA368 - thumb_func_end Transition_Phase2 - - thumb_func_start Transition_WaitForPhase2 -Transition_WaitForPhase2: @ 80D0A5C - push {r4,lr} - adds r4, r0, 0 - movs r0, 0 - strh r0, [r4, 0x26] - ldr r1, _080D0A88 @ =gUnknown_83FA368 - 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 gUnknown_83FA368 - thumb_func_end Transition_WaitForPhase2 - - thumb_func_start Phase1Task_TransitionAll -Phase1Task_TransitionAll: @ 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 CreatePhase1Task - b _080D0AD4 - .align 2, 0 -_080D0AC0: .4byte gTasks -_080D0AC4: - bl sub_80D3CA4 - 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 Phase1Task_TransitionAll - - thumb_func_start sub_80D0ADC -sub_80D0ADC: @ 80D0ADC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D0B0C @ =gUnknown_83FA3C0 - 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 gUnknown_83FA3C0 -_080D0B10: .4byte gTasks - thumb_func_end sub_80D0ADC - - thumb_func_start sub_80D0B14 -sub_80D0B14: @ 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 sub_80D0B14 - - thumb_func_start sub_80D0B48 -sub_80D0B48: @ 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 sub_80D0B48 - - thumb_func_start sub_80D0BA8 -sub_80D0BA8: @ 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 @ =sub_80D0ADC - 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 sub_80D0ADC - thumb_func_end sub_80D0BA8 - - thumb_func_start sub_80D0BD4 -sub_80D0BD4: @ 80D0BD4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D0C04 @ =gUnknown_83FA3CC - 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 gUnknown_83FA3CC -_080D0C08: .4byte gTasks - thumb_func_end sub_80D0BD4 - - thumb_func_start sub_80D0C0C -sub_80D0C0C: @ 80D0C0C - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - bl sub_80D3DD0 - 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 @ =gUnknown_2039A2C - 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 sub_80D3E74 - ldr r0, _080D0C70 @ =sub_80D0CF0 - bl SetVBlankCallback - ldr r0, _080D0C74 @ =sub_80D0D28 - 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 gUnknown_2039A2C -_080D0C70: .4byte sub_80D0CF0 -_080D0C74: .4byte sub_80D0D28 - thumb_func_end sub_80D0C0C - - thumb_func_start sub_80D0C78 -sub_80D0C78: @ 80D0C78 - push {r4,r5,lr} - sub sp, 0x8 - ldr r4, _080D0CE0 @ =gUnknown_2039A2C - 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 sub_80D3E74 - ldr r0, _080D0CE8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080D0CCA - ldr r0, _080D0CEC @ =sub_80D0BD4 - 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 gUnknown_2039A2C -_080D0CE4: .4byte gScanlineEffectRegBuffers -_080D0CE8: .4byte gPaletteFade -_080D0CEC: .4byte sub_80D0BD4 - thumb_func_end sub_80D0C78 - - thumb_func_start sub_80D0CF0 -sub_80D0CF0: @ 80D0CF0 - push {lr} - bl sub_80D3DF4 - ldr r0, _080D0D18 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D0D1C: .4byte 0x040000d4 -_080D0D20: .4byte gScanlineEffectRegBuffers -_080D0D24: .4byte 0x800000a0 - thumb_func_end sub_80D0CF0 - - thumb_func_start sub_80D0D28 -sub_80D0D28: @ 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 sub_80D0D28 - - thumb_func_start sub_80D0D54 -sub_80D0D54: @ 80D0D54 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D0D84 @ =gUnknown_83FA3D4 - 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 gUnknown_83FA3D4 -_080D0D88: .4byte gTasks - thumb_func_end sub_80D0D54 - - thumb_func_start sub_80D0D8C -sub_80D0D8C: @ 80D0D8C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - bl sub_80D3DD0 - 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 @ =gUnknown_2039A2C - 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 @ =sub_80D0E80 - bl SetVBlankCallback - ldr r0, _080D0DEC @ =sub_80D0EB8 - 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 gUnknown_2039A2C -_080D0DE4: .4byte gScanlineEffectRegBuffers + 0x780 -_080D0DE8: .4byte sub_80D0E80 -_080D0DEC: .4byte sub_80D0EB8 - thumb_func_end sub_80D0D8C - - thumb_func_start sub_80D0DF0 -sub_80D0DF0: @ 80D0DF0 - push {r4-r7,lr} - ldr r1, _080D0E70 @ =gUnknown_2039A2C - 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 @ =gUnknown_2039A2C - 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 @ =sub_80D0D54 - 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 gUnknown_2039A2C -_080D0E74: .4byte gScanlineEffectRegBuffers -_080D0E78: .4byte gPaletteFade -_080D0E7C: .4byte sub_80D0D54 - thumb_func_end sub_80D0DF0 - - thumb_func_start sub_80D0E80 -sub_80D0E80: @ 80D0E80 - push {lr} - bl sub_80D3DF4 - ldr r0, _080D0EA8 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D0EAC: .4byte 0x040000d4 -_080D0EB0: .4byte gScanlineEffectRegBuffers -_080D0EB4: .4byte 0x800000a0 - thumb_func_end sub_80D0E80 - - thumb_func_start sub_80D0EB8 -sub_80D0EB8: @ 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 sub_80D0EB8 - - thumb_func_start sub_80D0EE4 -sub_80D0EE4: @ 80D0EE4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D0F14 @ =gUnknown_83FA3DC - 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 gUnknown_83FA3DC -_080D0F18: .4byte gTasks - thumb_func_end sub_80D0EE4 - - thumb_func_start sub_80D0F1C -sub_80D0F1C: @ 80D0F1C - push {r4-r6,lr} - sub sp, 0xC - adds r4, r0, 0 - bl sub_80D3DD0 - 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 @ =gUnknown_2039A2C - 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 @ =sub_80D1370 - bl SetVBlankCallback - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_80D3E28 - 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 @ =gUnknown_83F87A0 - ldr r1, [sp, 0x8] - movs r2, 0xB0 - lsls r2, 2 - bl CpuSet - ldr r0, _080D0FD0 @ =gUnknown_83FA638 - 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 gUnknown_2039A2C -_080D0FBC: .4byte 0x00003f41 -_080D0FC0: .4byte gScanlineEffectRegBuffers + 0x780 -_080D0FC4: .4byte sub_80D1370 -_080D0FC8: .4byte 0x01000400 -_080D0FCC: .4byte gUnknown_83F87A0 -_080D0FD0: .4byte gUnknown_83FA638 - thumb_func_end sub_80D0F1C - - thumb_func_start sub_80D0FD4 -sub_80D0FD4: @ 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 - add r1, sp, 0xC - add r0, sp, 0x8 - bl sub_80D3E28 - 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 sub_80D3E74 - 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 gUnknown_83FA784 -_080D1060: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D0FD4 - - thumb_func_start sub_80D1064 -sub_80D1064: @ 80D1064 - push {r4,r5,lr} - sub sp, 0x8 - adds r3, r0, 0 - ldr r2, _080D10EC @ =gUnknown_2039A2C - 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 sub_80D3E74 - 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 gUnknown_2039A2C -_080D10F0: .4byte 0xfffffe80 -_080D10F4: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D1064 - - thumb_func_start sub_80D10F8 -sub_80D10F8: @ 80D10F8 - push {r4,lr} - sub sp, 0x8 - adds r3, r0, 0 - ldr r2, _080D1158 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_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 sub_80D3E74 - ldr r0, _080D1198 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C - thumb_func_end sub_80D10F8 - - thumb_func_start sub_80D119C -sub_80D119C: @ 80D119C - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r0, _080D11C4 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_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 sub_80D3E74 - 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 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C - thumb_func_end sub_80D119C - - thumb_func_start sub_80D1220 -sub_80D1220: @ 80D1220 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080D12C4 @ =gUnknown_2039A2C - 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 sub_80D3EF0 - 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 sub_80D3E60 - ldr r0, _080D12DC @ =sub_80D0EE4 - 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 @ =sub_80D139C - bl SetVBlankCallback -_080D12AE: - ldr r0, _080D12C4 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_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 - - thumb_func_start sub_80D12E4 -sub_80D12E4: @ 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 sub_80D3DF4 - ldr r4, _080D1360 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D1364: .4byte 0x040000d4 -_080D1368: .4byte gScanlineEffectRegBuffers -_080D136C: .4byte 0x800000a0 - thumb_func_end sub_80D12E4 - - thumb_func_start sub_80D1370 -sub_80D1370: @ 80D1370 - push {lr} - bl sub_80D12E4 - 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 sub_80D1370 - - thumb_func_start sub_80D139C -sub_80D139C: @ 80D139C - push {lr} - bl sub_80D12E4 - 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 sub_80D139C - - thumb_func_start sub_80D13C8 -sub_80D13C8: @ 80D13C8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D13F8 @ =gUnknown_83FA3F4 - 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 gUnknown_83FA3F4 -_080D13FC: .4byte gTasks - thumb_func_end sub_80D13C8 - - thumb_func_start Phase2_Transition_PokeballsTrail_Func1 -Phase2_Transition_PokeballsTrail_Func1: @ 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 - 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 @ =gUnknown_83FA638 - 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 gUnknown_83F8D20 -_080D1444: .4byte 0x05000200 -_080D1448: .4byte gUnknown_83FA638 - thumb_func_end Phase2_Transition_PokeballsTrail_Func1 - - thumb_func_start Phase2_Transition_PokeballsTrail_Func2 -Phase2_Transition_PokeballsTrail_Func2: @ 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 Phase2_Transition_PokeballsTrail_Func2 - - thumb_func_start Phase2_Transition_PokeballsTrail_Func3 -Phase2_Transition_PokeballsTrail_Func3: @ 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 FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D14F8: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D1500: .4byte sub_80D13C8 - thumb_func_end Phase2_Transition_PokeballsTrail_Func3 - - thumb_func_start FldEff_Pokeball -FldEff_Pokeball: @ 80D1504 - push {r4,r5,lr} - ldr r0, _080D1560 @ =gUnknown_83FA5CC - 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 gUnknown_83FA5CC -_080D1564: .4byte gFieldEffectArguments -_080D1568: .4byte gSprites -_080D156C: .4byte 0x0000ffff - thumb_func_end FldEff_Pokeball - - thumb_func_start sub_80D1570 -sub_80D1570: @ 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 sub_80D1570 - - thumb_func_start sub_80D1638 -sub_80D1638: @ 80D1638 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D1668 @ =gUnknown_83FA414 - 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 gUnknown_83FA414 -_080D166C: .4byte gTasks - thumb_func_end sub_80D1638 - - thumb_func_start sub_80D1670 -sub_80D1670: @ 80D1670 - push {r4,lr} - adds r4, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - ldr r0, _080D16C4 @ =gUnknown_2039A2C - 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 @ =sub_80D1ABC - bl SetVBlankCallback - ldr r0, _080D16C4 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D16C8: .4byte 0x0000f0f1 -_080D16CC: .4byte gScanlineEffectRegBuffers + 0x780 -_080D16D0: .4byte 0x0000f3f4 -_080D16D4: .4byte sub_80D1ABC - thumb_func_end sub_80D1670 - - thumb_func_start sub_80D16D8 -sub_80D16D8: @ 80D16D8 - push {r4-r7,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r2, _080D1760 @ =gUnknown_2039A2C - 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 sub_80D4088 - ldr r5, _080D1764 @ =gScanlineEffectRegBuffers -_080D1708: - ldr r4, _080D1760 @ =gUnknown_2039A2C - 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 sub_80D4104 - 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 gUnknown_2039A2C -_080D1764: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D16D8 - - thumb_func_start sub_80D1768 -sub_80D1768: @ 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 @ =gUnknown_2039A2C - 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 sub_80D4088 - 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 sub_80D4104 - strb r0, [r5] - b _080D17A6 - .align 2, 0 -_080D17EC: .4byte gUnknown_2039A2C -_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 @ =gUnknown_2039A2C -_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 gUnknown_2039A2C - thumb_func_end sub_80D1768 - - thumb_func_start sub_80D185C -sub_80D185C: @ 80D185C - push {r4-r6,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r2, _080D18DC @ =gUnknown_2039A2C - 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 sub_80D4088 - ldr r5, _080D18E0 @ =gScanlineEffectRegBuffers -_080D188A: - ldr r4, _080D18DC @ =gUnknown_2039A2C - 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 sub_80D4104 - 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 gUnknown_2039A2C -_080D18E0: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D185C - - thumb_func_start sub_80D18E4 -sub_80D18E4: @ 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 @ =gUnknown_2039A2C - 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 sub_80D4088 - ldr r7, _080D1970 @ =gScanlineEffectRegBuffers - mov r10, r7 - ldr r0, _080D196C @ =gUnknown_2039A2C - 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 sub_80D4104 - strb r0, [r6] - b _080D1928 - .align 2, 0 -_080D196C: .4byte gUnknown_2039A2C -_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 @ =gUnknown_2039A2C -_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 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C - thumb_func_end sub_80D18E4 - - thumb_func_start sub_80D19E4 -sub_80D19E4: @ 80D19E4 - push {r4-r7,lr} - sub sp, 0xC - adds r7, r0, 0 - ldr r1, _080D1A74 @ =gUnknown_2039A2C - 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 sub_80D4088 - ldr r6, _080D1A78 @ =gScanlineEffectRegBuffers -_080D1A10: - movs r2, 0x78 - ldr r5, _080D1A74 @ =gUnknown_2039A2C - 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 sub_80D4104 - 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 gUnknown_2039A2C -_080D1A78: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D19E4 - - thumb_func_start sub_80D1A7C -sub_80D1A7C: @ 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 sub_80D3E60 - ldr r0, _080D1AB8 @ =sub_80D1638 - 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 sub_80D1638 - thumb_func_end sub_80D1A7C - - thumb_func_start sub_80D1ABC -sub_80D1ABC: @ 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 sub_80D3DF4 - ldr r4, _080D1B40 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D1B44: .4byte 0x040000d4 -_080D1B48: .4byte gScanlineEffectRegBuffers -_080D1B4C: .4byte 0x800000a0 -_080D1B50: .4byte 0x04000040 -_080D1B54: .4byte 0xa2400001 - thumb_func_end sub_80D1ABC - - thumb_func_start sub_80D1B58 -sub_80D1B58: @ 80D1B58 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D1B88 @ =gUnknown_83FA430 - 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 gUnknown_83FA430 -_080D1B8C: .4byte gTasks - thumb_func_end sub_80D1B58 - - thumb_func_start sub_80D1B90 -sub_80D1B90: @ 80D1B90 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - movs r2, 0 - ldr r4, _080D1BD8 @ =gScanlineEffectRegBuffers + 0x780 - ldr r3, _080D1BDC @ =gUnknown_2039A2C -_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 @ =sub_80D1CC8 - bl SetVBlankCallback - ldr r0, _080D1BE4 @ =sub_80D1D00 - 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 gUnknown_2039A2C -_080D1BE0: .4byte sub_80D1CC8 -_080D1BE4: .4byte sub_80D1D00 - thumb_func_end sub_80D1B90 - - thumb_func_start sub_80D1BE8 -sub_80D1BE8: @ 80D1BE8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r6, r0, 0 - ldr r0, _080D1CB4 @ =gUnknown_2039A2C - 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 @ =gUnknown_2039A2C - 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 @ =sub_80D1B58 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D1C9A: - ldr r0, _080D1CB4 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D1CB8: .4byte 0x1fff0000 -_080D1CBC: .4byte gScanlineEffectRegBuffers -_080D1CC0: .4byte gPaletteFade -_080D1CC4: .4byte sub_80D1B58 - thumb_func_end sub_80D1BE8 - - thumb_func_start sub_80D1CC8 -sub_80D1CC8: @ 80D1CC8 - push {lr} - bl sub_80D3DF4 - ldr r0, _080D1CF0 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D1CF4: .4byte 0x040000d4 -_080D1CF8: .4byte gScanlineEffectRegBuffers -_080D1CFC: .4byte 0x800000a0 - thumb_func_end sub_80D1CC8 - - thumb_func_start sub_80D1D00 -sub_80D1D00: @ 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 sub_80D1D00 - - thumb_func_start sub_80D1D2C -sub_80D1D2C: @ 80D1D2C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D1D5C @ =gUnknown_83FA438 - 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 gUnknown_83FA438 -_080D1D60: .4byte gTasks - thumb_func_end sub_80D1D2C - - thumb_func_start sub_80D1D64 -sub_80D1D64: @ 80D1D64 - push {r4,lr} - adds r4, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - ldr r0, _080D1DB0 @ =gUnknown_2039A2C - 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 @ =sub_80D1E98 - 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 gUnknown_2039A2C -_080D1DB4: .4byte gScanlineEffectRegBuffers + 0x780 -_080D1DB8: .4byte sub_80D1E98 - thumb_func_end sub_80D1D64 - - thumb_func_start sub_80D1DBC -sub_80D1DBC: @ 80D1DBC - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - ldr r0, _080D1E50 @ =gUnknown_2039A2C - 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 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D1E54: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D1DBC - - thumb_func_start sub_80D1E58 -sub_80D1E58: @ 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 sub_80D3E60 - ldr r0, _080D1E94 @ =sub_80D1D2C - 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 sub_80D1D2C - thumb_func_end sub_80D1E58 - - thumb_func_start sub_80D1E98 -sub_80D1E98: @ 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 sub_80D3DF4 - ldr r5, _080D1F10 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_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_start sub_80D1F2C -sub_80D1F2C: @ 80D1F2C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D1F5C @ =gUnknown_83FA464 - 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 gUnknown_83FA464 -_080D1F60: .4byte gTasks - thumb_func_end sub_80D1F2C - - 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 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_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 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_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 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_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 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D2538: .4byte gScanlineEffectRegBuffers + 0x780 - thumb_func_end sub_80D1F64 - - thumb_func_start sub_80D253C -sub_80D253C: @ 80D253C - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - ldr r0, _080D25A0 @ =gUnknown_2039A2C - 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 @ =sub_80D2698 - 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 gUnknown_2039A2C -_080D25A4: .4byte 0x00007878 -_080D25A8: .4byte 0x00003070 -_080D25AC: .4byte 0x00001090 -_080D25B0: .4byte 0x040000d4 -_080D25B4: .4byte gScanlineEffectRegBuffers + 0x780 -_080D25B8: .4byte 0xfffff880 -_080D25BC: .4byte 0x80000140 -_080D25C0: .4byte sub_80D2698 - thumb_func_end sub_80D253C - - thumb_func_start sub_80D25C4 -sub_80D25C4: @ 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 @ =gUnknown_2039A2C - 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 sub_80D3E60 -_080D2686: - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D2694: .4byte gUnknown_2039A2C - thumb_func_end sub_80D25C4 - - thumb_func_start sub_80D2698 -sub_80D2698: @ 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 sub_80D3DF4 - ldr r4, _080D26DC @ =gUnknown_2039A2C - ldr r2, [r4] - movs r0, 0x20 - ldrsh r3, [r2, r0] - cmp r3, 0 - beq _080D26E4 - ldr r0, _080D26E0 @ =sub_80D1F2C - 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 gUnknown_2039A2C -_080D26E0: .4byte sub_80D1F2C -_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 sub_80D2698 - - thumb_func_start Phase2Task_Transition_Sydney -Phase2Task_Transition_Sydney: @ 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 Phase2Task_MugShotTransition - pop {r0} - bx r0 - .align 2, 0 -_080D2784: .4byte gTasks - thumb_func_end Phase2Task_Transition_Sydney - - thumb_func_start Phase2Task_Transition_Phoebe -Phase2Task_Transition_Phoebe: @ 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 Phase2Task_MugShotTransition - pop {r0} - bx r0 - .align 2, 0 -_080D27A4: .4byte gTasks - thumb_func_end Phase2Task_Transition_Phoebe - - thumb_func_start Phase2Task_Transition_Glacia -Phase2Task_Transition_Glacia: @ 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 Phase2Task_MugShotTransition - pop {r0} - bx r0 - .align 2, 0 -_080D27C4: .4byte gTasks - thumb_func_end Phase2Task_Transition_Glacia - - thumb_func_start Phase2Task_Transition_Drake -Phase2Task_Transition_Drake: @ 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 Phase2Task_MugShotTransition - pop {r0} - bx r0 - .align 2, 0 -_080D27E4: .4byte gTasks - thumb_func_end Phase2Task_Transition_Drake - - thumb_func_start Phase2Task_Transition_Steven -Phase2Task_Transition_Steven: @ 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 Phase2Task_MugShotTransition - pop {r0} - bx r0 - .align 2, 0 -_080D2804: .4byte gTasks - thumb_func_end Phase2Task_Transition_Steven - - thumb_func_start Phase2Task_MugShotTransition -Phase2Task_MugShotTransition: @ 80D2808 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D2838 @ =gUnknown_83FA46C - 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 gUnknown_83FA46C -_080D283C: .4byte gTasks - thumb_func_end Phase2Task_MugShotTransition - - thumb_func_start Phase2_Mugshot_Func1 -Phase2_Mugshot_Func1: @ 80D2840 - push {r4,lr} - adds r4, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - adds r0, r4, 0 - bl sub_80D2EA4 - 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 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 @ =sub_80D2D50 - 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 gUnknown_2039A2C -_080D289C: .4byte gScanlineEffectRegBuffers + 0x780 -_080D28A0: .4byte 0x0000f0f1 -_080D28A4: .4byte sub_80D2D50 - thumb_func_end Phase2_Mugshot_Func1 - - thumb_func_start Phase2_Mugshot_Func2 -Phase2_Mugshot_Func2: @ 80D28A8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - mov r8, r0 - ldr r6, _080D2950 @ =gUnknown_83FAC34 - add r1, sp, 0x4 - mov r0, sp - bl sub_80D3E28 - ldr r0, _080D2954 @ =gUnknown_83F8F60 - ldr r1, [sp, 0x4] - movs r2, 0xF0 - bl CpuSet - ldr r1, _080D2958 @ =gUnknown_83FA740 - 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 @ =gUnknown_83FA754 - 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 @ =sub_80D2E6C - 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 gUnknown_83FAC34 -_080D2954: .4byte gUnknown_83F8F60 -_080D2958: .4byte gUnknown_83FA740 -_080D295C: .4byte gUnknown_83FA754 -_080D2960: .4byte gSaveBlock2Ptr -_080D2964: .4byte sub_80D2E6C - thumb_func_end Phase2_Mugshot_Func2 - - thumb_func_start sub_80D2968 -sub_80D2968: @ 80D2968 - push {r4-r7,lr} - adds r4, r0, 0 - ldr r0, _080D2A4C @ =gUnknown_2039A2C - 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 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D2A50: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D2968 - - thumb_func_start sub_80D2A54 -sub_80D2A54: @ 80D2A54 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r2, _080D2AC8 @ =gUnknown_2039A2C - 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 sub_80D3120 - movs r1, 0x24 - ldrsh r0, [r4, r1] - movs r1, 0x1 - bl sub_80D3120 - movs r1, 0x22 - ldrsh r0, [r4, r1] - bl sub_80D3138 - 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 gUnknown_2039A2C -_080D2ACC: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D2A54 - - thumb_func_start sub_80D2AD0 -sub_80D2AD0: @ 80D2AD0 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080D2B08 @ =gUnknown_2039A2C - 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 sub_80D3154 - 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 sub_80D3138 -_080D2B00: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D2B08: .4byte gUnknown_2039A2C - thumb_func_end sub_80D2AD0 - - thumb_func_start sub_80D2B0C -sub_80D2B0C: @ 80D2B0C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - ldr r7, _080D2BAC @ =gUnknown_2039A2C - 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 sub_80D3154 - 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 @ =sub_80D2DEC - bl SetVBlankCallback -_080D2BA0: - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D2BAC: .4byte gUnknown_2039A2C -_080D2BB0: .4byte 0x040000b0 -_080D2BB4: .4byte 0x0000c5ff -_080D2BB8: .4byte 0x00007fff -_080D2BBC: .4byte gScanlineEffectRegBuffers -_080D2BC0: .4byte sub_80D2DEC - thumb_func_end sub_80D2B0C - - thumb_func_start sub_80D2BC4 -sub_80D2BC4: @ 80D2BC4 - push {r4-r7,lr} - adds r4, r0, 0 - ldr r2, _080D2C84 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D2C88: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D2BC4 - - thumb_func_start sub_80D2C8C -sub_80D2C8C: @ 80D2C8C - push {r4-r6,lr} - adds r4, r0, 0 - ldr r5, _080D2CBC @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D2CC0: .4byte 0x00007fff - thumb_func_end sub_80D2C8C - - thumb_func_start sub_80D2CC4 -sub_80D2CC4: @ 80D2CC4 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080D2D08 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D2D0C: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D2CC4 - - thumb_func_start sub_80D2D10 -sub_80D2D10: @ 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 sub_80D3E60 - 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 sub_80D2D10 - - thumb_func_start sub_80D2D50 -sub_80D2D50: @ 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 sub_80D3DF4 - ldr r5, _080D2DD0 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_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_start sub_80D2DEC -sub_80D2DEC: @ 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 sub_80D3DF4 - ldr r2, _080D2E50 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_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_start sub_80D2E6C -sub_80D2E6C: @ 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, [r0] - ldrh r0, [r0, 0x18] - b _080D2E94 - .align 2, 0 -_080D2E80: .4byte 0x04000006 -_080D2E84: .4byte 0x04000010 -_080D2E88: .4byte gUnknown_2039A2C -_080D2E8C: - ldr r1, _080D2E9C @ =0x04000010 - ldr r0, _080D2EA0 @ =gUnknown_2039A2C - ldr r0, [r0] - ldrh r0, [r0, 0x1A] -_080D2E94: - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080D2E9C: .4byte 0x04000010 -_080D2EA0: .4byte gUnknown_2039A2C - thumb_func_end sub_80D2E6C - - thumb_func_start sub_80D2EA4 -sub_80D2EA4: @ 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 @ =gUnknown_83FA494 - movs r2, 0x26 - ldrsh r1, [r4, r2] - mov r9, r1 - add r0, r9 - ldrb r0, [r0] - ldr r2, _080D3000 @ =gUnknown_83FA4AE - 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 @ =sub_80D301C - 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 @ =gUnknown_83FA49A - 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 gUnknown_83FA494 -_080D3000: .4byte gUnknown_83FA4AE -_080D3004: .4byte gDecompressionBuffer -_080D3008: .4byte gSaveBlock2Ptr -_080D300C: .4byte gSprites -_080D3010: .4byte sub_80D301C -_080D3014: .4byte gUnknown_83FA49A -_080D3018: .4byte 0xfffffe00 - thumb_func_end sub_80D2EA4 - - thumb_func_start sub_80D301C -sub_80D301C: @ 80D301C - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080D3040 @ =gUnknown_83FA4C4 -_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 gUnknown_83FA4C4 - thumb_func_end sub_80D301C - - thumb_func_start sub_80D3044 -sub_80D3044: @ 80D3044 - movs r0, 0 - bx lr - thumb_func_end sub_80D3044 - - thumb_func_start sub_80D3048 -sub_80D3048: @ 80D3048 - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - ldr r1, _080D308C @ =gUnknown_83FA4E0 - mov r0, sp - movs r2, 0x4 - bl memcpy - add r4, sp, 0x4 - ldr r1, _080D3090 @ =gUnknown_83FA4E4 - 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 gUnknown_83FA4E0 -_080D3090: .4byte gUnknown_83FA4E4 - thumb_func_end sub_80D3048 - - thumb_func_start sub_80D3094 -sub_80D3094: @ 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 sub_80D3094 - - thumb_func_start sub_80D30C8 -sub_80D30C8: @ 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 sub_80D30C8 - - thumb_func_start sub_80D30F4 -sub_80D30F4: @ 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 sub_80D30F4 - - thumb_func_start sub_80D3120 -sub_80D3120: @ 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 sub_80D3120 - - thumb_func_start sub_80D3138 -sub_80D3138: @ 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 sub_80D3138 - - thumb_func_start sub_80D3154 -sub_80D3154: @ 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 sub_80D3154 - - thumb_func_start sub_80D316C -sub_80D316C: @ 80D316C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D319C @ =gUnknown_83FA4E8 - 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 gUnknown_83FA4E8 -_080D31A0: .4byte gTasks - thumb_func_end sub_80D316C - - thumb_func_start sub_80D31A4 -sub_80D31A4: @ 80D31A4 - push {r4-r6,lr} - adds r5, r0, 0 - bl sub_80D3DD0 - 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 @ =gUnknown_2039A2C - 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 @ =sub_80D332C - bl SetVBlankCallback - ldr r0, _080D321C @ =sub_80D33C0 - 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 gUnknown_2039A2C -_080D3214: .4byte gScanlineEffectRegBuffers + 0x780 -_080D3218: .4byte sub_80D332C -_080D321C: .4byte sub_80D33C0 - thumb_func_end sub_80D31A4 - - thumb_func_start sub_80D3220 -sub_80D3220: @ 80D3220 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r3, r0, 0 - ldr r2, _080D329C @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_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 sub_80D3220 - - thumb_func_start sub_80D32EC -sub_80D32EC: @ 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 sub_80D3E60 - ldr r0, _080D3328 @ =sub_80D316C - 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 sub_80D316C - thumb_func_end sub_80D32EC - - thumb_func_start sub_80D332C -sub_80D332C: @ 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 sub_80D3DF4 - ldr r4, _080D33A4 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_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_start sub_80D33C0 -sub_80D33C0: @ 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 sub_80D33C0 - - thumb_func_start sub_80D33EC -sub_80D33EC: @ 80D33EC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D341C @ =gUnknown_83FA4F4 - 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 gUnknown_83FA4F4 -_080D3420: .4byte gTasks - thumb_func_end sub_80D33EC - - thumb_func_start sub_80D3424 -sub_80D3424: @ 80D3424 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - ldr r0, _080D348C @ =gUnknown_2039A2C - 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 @ =sub_80D36E0 - bl SetHBlankCallback - ldr r0, _080D3498 @ =sub_80D35F4 - 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 gUnknown_2039A2C -_080D3490: .4byte gScanlineEffectRegBuffers + 0x780 -_080D3494: .4byte sub_80D36E0 -_080D3498: .4byte sub_80D35F4 - thumb_func_end sub_80D3424 - - thumb_func_start sub_80D349C -sub_80D349C: @ 80D349C - push {r4-r6,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r1, _080D3504 @ =gUnknown_83FA508 - mov r0, sp - movs r2, 0xC - bl memcpy - movs r5, 0 - movs r4, 0 -_080D34B0: - ldr r0, _080D3508 @ =sub_80D3720 - 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 gUnknown_83FA508 -_080D3508: .4byte sub_80D3720 -_080D350C: .4byte gSprites - thumb_func_end sub_80D349C - - thumb_func_start sub_80D3510 -sub_80D3510: @ 80D3510 - push {r4,lr} - adds r4, r0, 0 - ldr r2, _080D3544 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D3548: .4byte 0x00007fff - thumb_func_end sub_80D3510 - - thumb_func_start sub_80D354C -sub_80D354C: @ 80D354C - push {r4-r6,lr} - adds r6, r0, 0 - ldr r5, _080D35A0 @ =gUnknown_2039A2C - 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 @ =sub_80D3690 - 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 gUnknown_2039A2C -_080D35A4: .4byte 0x040000b0 -_080D35A8: .4byte 0x0000c5ff -_080D35AC: .4byte 0x00007fff -_080D35B0: .4byte sub_80D3690 - thumb_func_end sub_80D354C - - thumb_func_start sub_80D35B4 -sub_80D35B4: @ 80D35B4 - push {lr} - ldr r0, _080D35EC @ =gUnknown_2039A2C - 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 sub_80D3E60 - ldr r0, _080D35F0 @ =sub_80D33EC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D35E6: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D35EC: .4byte gUnknown_2039A2C -_080D35F0: .4byte sub_80D33EC - thumb_func_end sub_80D35B4 - - thumb_func_start sub_80D35F4 -sub_80D35F4: @ 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 sub_80D3DF4 - ldr r4, _080D3674 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_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_start sub_80D3690 -sub_80D3690: @ 80D3690 - push {r4,lr} - bl sub_80D3DF4 - ldr r4, _080D36DC @ =gUnknown_2039A2C - 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 gUnknown_2039A2C - thumb_func_end sub_80D3690 - - thumb_func_start sub_80D36E0 -sub_80D36E0: @ 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 sub_80D36E0 - - thumb_func_start sub_80D3720 -sub_80D3720: @ 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 @ =gUnknown_2039A2C - ldr r1, [r0] - ldrb r0, [r1] - movs r0, 0x1 - strb r0, [r1] - b _080D380A - .align 2, 0 -_080D3748: .4byte gUnknown_2039A2C -_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 @ =gUnknown_2039A2C - 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 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C - thumb_func_end sub_80D3720 - - thumb_func_start sub_80D3818 -sub_80D3818: @ 80D3818 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D3848 @ =gUnknown_83FA514 - 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 gUnknown_83FA514 -_080D384C: .4byte gTasks - thumb_func_end sub_80D3818 - - thumb_func_start Phase2_Transition_GridSquares_Func1 -Phase2_Transition_GridSquares_Func1: @ 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 - 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 @ =gUnknown_83FA638 - 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 gUnknown_83FA140 -_080D389C: .4byte 0x01000400 -_080D38A0: .4byte gUnknown_83FA638 - thumb_func_end Phase2_Transition_GridSquares_Func1 - - thumb_func_start Phase2_Transition_GridSquares_Func2 -Phase2_Transition_GridSquares_Func2: @ 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 sub_80D3E08 - 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 @ =gUnknown_83FA140 - 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 gUnknown_83FA140 - thumb_func_end Phase2_Transition_GridSquares_Func2 - - thumb_func_start Phase2_Transition_GridSquares_Func3 -Phase2_Transition_GridSquares_Func3: @ 80D38FC - push {lr} - ldrh r1, [r0, 0xA] - subs r1, 0x1 - strh r1, [r0, 0xA] - lsls r1, 16 - cmp r1, 0 - bne _080D391C - bl sub_80D3E60 - ldr r0, _080D3924 @ =sub_80D3818 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D391C: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D3924: .4byte sub_80D3818 - thumb_func_end Phase2_Transition_GridSquares_Func3 - - thumb_func_start sub_80D3928 -sub_80D3928: @ 80D3928 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D3958 @ =gUnknown_83FA520 - 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 gUnknown_83FA520 -_080D395C: .4byte gTasks - thumb_func_end sub_80D3928 - - thumb_func_start sub_80D3960 -sub_80D3960: @ 80D3960 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - ldr r0, _080D39B8 @ =gUnknown_2039A2C - 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 @ =sub_80D3BA4 - 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 gUnknown_2039A2C -_080D39BC: .4byte gScanlineEffectRegBuffers -_080D39C0: .4byte sub_80D3BA4 - thumb_func_end sub_80D3960 - - thumb_func_start sub_80D39C4 -sub_80D39C4: @ 80D39C4 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - mov r8, r0 - ldr r0, _080D3A38 @ =gUnknown_2039A2C - ldr r0, [r0] - adds r0, 0x24 - ldr r6, _080D3A3C @ =gUnknown_83FA534 - 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 sub_80D4088 - 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 gUnknown_2039A2C -_080D3A3C: .4byte gUnknown_83FA534 - thumb_func_end sub_80D39C4 - - thumb_func_start sub_80D3A40 -sub_80D3A40: @ 80D3A40 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r6, r0, 0 - ldr r0, _080D3A90 @ =gUnknown_2039A2C - 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 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_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 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D3AD8: - adds r0, r4, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl sub_80D4104 - 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 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C - thumb_func_end sub_80D3A40 - - thumb_func_start sub_80D3B1C -sub_80D3B1C: @ 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 sub_80D3E60 - ldr r0, _080D3B64 @ =sub_80D3928 - 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 sub_80D3928 -_080D3B68: - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - ldr r1, _080D3B84 @ =gUnknown_83FA57A - 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 gUnknown_83FA57A - thumb_func_end sub_80D3B1C - - thumb_func_start sub_80D3B88 -sub_80D3B88: @ 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 sub_80D3B88 - - thumb_func_start sub_80D3BA4 -sub_80D3BA4: @ 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 sub_80D3DF4 - ldr r4, _080D3C28 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C -_080D3C2C: .4byte 0x040000d4 -_080D3C30: .4byte gScanlineEffectRegBuffers -_080D3C34: .4byte 0x800000a0 -_080D3C38: .4byte 0x04000040 -_080D3C3C: .4byte 0xa2400001 - thumb_func_end sub_80D3BA4 - - thumb_func_start CreatePhase1Task -CreatePhase1Task: @ 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 @ =sub_80D3CC4 - 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 sub_80D3CC4 -_080D3CA0: .4byte gTasks - thumb_func_end CreatePhase1Task - - thumb_func_start sub_80D3CA4 -sub_80D3CA4: @ 80D3CA4 - push {lr} - ldr r0, _080D3CB8 @ =sub_80D3CC4 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _080D3CBC - movs r0, 0 - b _080D3CBE - .align 2, 0 -_080D3CB8: .4byte sub_80D3CC4 -_080D3CBC: - movs r0, 0x1 -_080D3CBE: - pop {r1} - bx r1 - thumb_func_end sub_80D3CA4 - - thumb_func_start sub_80D3CC4 -sub_80D3CC4: @ 80D3CC4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D3CF4 @ =gUnknown_83FA588 - 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 gUnknown_83FA588 -_080D3CF8: .4byte gTasks - thumb_func_end sub_80D3CC4 - - thumb_func_start Phase1_TransitionAll_Func1 -Phase1_TransitionAll_Func1: @ 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 Phase1_TransitionAll_Func1 - - thumb_func_start Phase1_TransitionAll_Func2 -Phase1_TransitionAll_Func2: @ 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 @ =sub_80D3CC4 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - b _080D3DC6 - .align 2, 0 -_080D3DB8: .4byte 0x00002d6b -_080D3DBC: .4byte sub_80D3CC4 -_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 Phase1_TransitionAll_Func2 - - thumb_func_start sub_80D3DD0 -sub_80D3DD0: @ 80D3DD0 - push {r4,lr} - ldr r4, _080D3DF0 @ =gUnknown_2039A2C - 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 gUnknown_2039A2C - thumb_func_end sub_80D3DD0 - - thumb_func_start sub_80D3DF4 -sub_80D3DF4: @ 80D3DF4 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80D3DF4 - - thumb_func_start sub_80D3E08 -sub_80D3E08: @ 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 sub_80D3E08 - - thumb_func_start sub_80D3E28 -sub_80D3E28: @ 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 sub_80D3E28 - - thumb_func_start sub_80D3E60 -sub_80D3E60: @ 80D3E60 - push {lr} - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - pop {r0} - bx r0 - thumb_func_end sub_80D3E60 - - thumb_func_start sub_80D3E74 -sub_80D3E74: @ 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 sub_80D3E74 - - thumb_func_start sub_80D3EF0 -sub_80D3EF0: @ 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 sub_80D3EF0 - - thumb_func_start sub_80D4088 -sub_80D4088: @ 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 sub_80D4088 - - thumb_func_start sub_80D4104 -sub_80D4104: @ 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 sub_80D4104 - - .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..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 -gUnknown_83F87A0:: @ 83F87A0 - .incbin "baserom.gba", 0x3F87A0, 0x580 - -gUnknown_83F8D20:: @ 83F8D20 - .incbin "baserom.gba", 0x3F8D20, 0x240 - -gUnknown_83F8F60:: @ 83F8F60 - .incbin "baserom.gba", 0x3F8F60, 0x11E0 - -gUnknown_83FA140:: @ 83FA140 - .incbin "baserom.gba", 0x3FA140, 0x1E0 - -gUnknown_83FA320:: @ 83FA320 - .incbin "baserom.gba", 0x3FA320, 0x48 - -gUnknown_83FA368:: @ 83FA368 - .incbin "baserom.gba", 0x3FA368, 0x48 - -gUnknown_83FA3B0:: @ 83FA3B0 - .incbin "baserom.gba", 0x3FA3B0, 0x10 - -gUnknown_83FA3C0:: @ 83FA3C0 - .incbin "baserom.gba", 0x3FA3C0, 0xC - -gUnknown_83FA3CC:: @ 83FA3CC - .incbin "baserom.gba", 0x3FA3CC, 0x8 - -gUnknown_83FA3D4:: @ 83FA3D4 - .incbin "baserom.gba", 0x3FA3D4, 0x8 - -gUnknown_83FA3DC:: @ 83FA3DC - .incbin "baserom.gba", 0x3FA3DC, 0x18 - -gUnknown_83FA3F4:: @ 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 - -gUnknown_83FA414:: @ 83FA414 - .incbin "baserom.gba", 0x3FA414, 0x1C - -gUnknown_83FA430:: @ 83FA430 - .incbin "baserom.gba", 0x3FA430, 0x8 - -gUnknown_83FA438:: @ 83FA438 - .incbin "baserom.gba", 0x3FA438, 0xC - -gUnknown_83FA444:: @ 83FA444 - .incbin "baserom.gba", 0x3FA444, 0x20 - -gUnknown_83FA464:: @ 83FA464 - .incbin "baserom.gba", 0x3FA464, 0x8 - -gUnknown_83FA46C:: @ 83FA46C - .incbin "baserom.gba", 0x3FA46C, 0x28 - -gUnknown_83FA494:: @ 83FA494 - .incbin "baserom.gba", 0x3FA494, 0x6 - -gUnknown_83FA49A:: @ 83FA49A - .incbin "baserom.gba", 0x3FA49A, 0x14 - -gUnknown_83FA4AE:: @ 83FA4AE - .incbin "baserom.gba", 0x3FA4AE, 0x16 - -gUnknown_83FA4C4:: @ 83FA4C4 - .incbin "baserom.gba", 0x3FA4C4, 0x1C - -gUnknown_83FA4E0:: @ 83FA4E0 - .incbin "baserom.gba", 0x3FA4E0, 0x4 - -gUnknown_83FA4E4:: @ 83FA4E4 - .incbin "baserom.gba", 0x3FA4E4, 0x4 - -gUnknown_83FA4E8:: @ 83FA4E8 - .incbin "baserom.gba", 0x3FA4E8, 0xC - -gUnknown_83FA4F4:: @ 83FA4F4 - .incbin "baserom.gba", 0x3FA4F4, 0x14 - -gUnknown_83FA508:: @ 83FA508 - .incbin "baserom.gba", 0x3FA508, 0xC - -gUnknown_83FA514:: @ 83FA514 - .incbin "baserom.gba", 0x3FA514, 0xC - -gUnknown_83FA520:: @ 83FA520 - .incbin "baserom.gba", 0x3FA520, 0x14 - -gUnknown_83FA534:: @ 83FA534 - .incbin "baserom.gba", 0x3FA534, 0x46 - -gUnknown_83FA57A:: @ 83FA57A - .incbin "baserom.gba", 0x3FA57A, 0xE - -gUnknown_83FA588:: @ 83FA588 - .incbin "baserom.gba", 0x3FA588, 0x44 - -gUnknown_83FA5CC:: @ 83FA5CC - .incbin "baserom.gba", 0x3FA5CC, 0x6C - -gUnknown_83FA638:: @ 83FA638 - .incbin "baserom.gba", 0x3FA638, 0x108 - -gUnknown_83FA740:: @ 83FA740 - .incbin "baserom.gba", 0x3FA740, 0x14 - -gUnknown_83FA754:: @ 83FA754 - .incbin "baserom.gba", 0x3FA754, 0x30 - -gUnknown_83FA784:: @ 83FA784 - .incbin "baserom.gba", 0x3FA784, 0x4B0 - -gUnknown_83FAC34:: @ 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 Binary files differnew file mode 100644 index 000000000..691e16ef7 --- /dev/null +++ b/graphics/battle_transitions/big_pokeball_tilemap.bin diff --git a/graphics/battle_transitions/big_pokeball_tileset.png b/graphics/battle_transitions/big_pokeball_tileset.png Binary files differnew file mode 100644 index 000000000..21b227441 --- /dev/null +++ b/graphics/battle_transitions/big_pokeball_tileset.png 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_tileset.png b/graphics/battle_transitions/grid_square_tileset.png Binary files differnew file mode 100644 index 000000000..fb8a9e6fd --- /dev/null +++ b/graphics/battle_transitions/grid_square_tileset.png 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 Binary files differnew file mode 100644 index 000000000..3802a915b --- /dev/null +++ b/graphics/battle_transitions/sliding_pokeball.png diff --git a/graphics/battle_transitions/sliding_pokeball_tilemap.bin b/graphics/battle_transitions/sliding_pokeball_tilemap.bin Binary files differnew file mode 100644 index 000000000..6cdeb0d17 --- /dev/null +++ b/graphics/battle_transitions/sliding_pokeball_tilemap.bin diff --git a/graphics/battle_transitions/unused_brendan.png b/graphics/battle_transitions/unused_brendan.png Binary files differnew file mode 100644 index 000000000..926ba0ff7 --- /dev/null +++ b/graphics/battle_transitions/unused_brendan.png diff --git a/graphics/battle_transitions/unused_lass.png b/graphics/battle_transitions/unused_lass.png Binary files differnew file mode 100644 index 000000000..378fa3c19 --- /dev/null +++ b/graphics/battle_transitions/unused_lass.png 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 Binary files differnew file mode 100644 index 000000000..4f170b470 --- /dev/null +++ b/graphics/battle_transitions/vsbar_tilemap.bin diff --git a/graphics/battle_transitions/vsbar_tileset.png b/graphics/battle_transitions/vsbar_tileset.png Binary files differnew file mode 100644 index 000000000..1d327cdaf --- /dev/null +++ b/graphics/battle_transitions/vsbar_tileset.png diff --git a/include/battle_transition.h b/include/battle_transition.h index 91e564790..4ef5f19d9 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -3,8 +3,39 @@ #include "global.h" -void sub_8149DFC(u8 a0); -bool8 sub_80D08F8(void); -void sub_80D08B8(u8 a0); +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 + +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/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 426f77510..0ab2d0475 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -83,5 +83,7 @@ void sub_80B69DC(void); 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/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/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 c6b35f651..d9506d33f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -191,7 +191,7 @@ SECTIONS { asm/evolution_scene.o(.text); src/coins.o(.text); src/fldeff_strength.o(.text); - asm/battle_transition.o(.text); + src/battle_transition.o(.text); asm/battle_controller_link_partner.o(.text); asm/battle_message.o(.text); src/math_util.o(.text); @@ -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..0fd92d631 --- /dev/null +++ b/src/battle_transition.c @@ -0,0 +1,3728 @@ +#include "global.h" +#include "sprite.h" +#include "task.h" +#include "overworld.h" +#include "malloc.h" +#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); + +struct TransitionData +{ + vu8 vblankDma; + u16 winIn; + u16 winOut; + u16 win0H; + u16 win0V; + u16 unused_A; + u16 win1V; + 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 +}; + +static EWRAM_DATA struct TransitionData *sTransitionStructPtr = NULL; + +// TODO: Move this declaration to include/event_object_movement.h +extern const struct OamData gEventObjectBaseOam_32x32; + +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, + 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, +}; + +static const TaskFunc 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, +}; + +static const TransitionStateFunc sBT_MainPhases[] = +{ + BT_Phase1Blink, + BT_WaitForPhase1, + BT_Phase2LaunchAnimTask, + BT_WaitForPhase2, +}; + +static const TransitionStateFunc sBT_Phase2BlurFuncs[] = +{ + BT_Phase2Blur_InitBgMosaic, + BT_Phase2Blur_Anim, + BT_Phase2Blur_IsDone, +}; + +static const TransitionStateFunc sBT_Phase2DistortedWaveFuncs[] = +{ + BT_Phase2DistortedWave_InitWave, + BT_Phase2DistortedWave_UpdateWave, +}; + +static const TransitionStateFunc sBT_Phase2HorizontalCorrugateFuncs[] = +{ + BT_Phase2HorizontalCorrugate_Init, + BT_Phase2HorizontalCorrugate_UpdateWave, +}; + +static const TransitionStateFunc sBT_Phase2BigPokeballFuncs[] = +{ + BT_Phase2BigPokeball_Init, + BT_Phase2BigPokeball_LoadTilemapAndWave, + BT_Phase2BigPokeball_UpdateWave1IncEva, + BT_Phase2BigPokeball_UpdateWave2DecEvb, + BT_Phase2BigPokeball_UpdateWave3, + BT_Phase2BigPokeball_CircleEffect, +}; + +static const TransitionStateFunc sBT_Phase2SlidingPokeballsFuncs[] = +{ + BT_Phase2SlidingPokeballs_LoadBgGfx, + BT_Phase2SlidingPokeballs_SetupFldeffArgs, + BT_Phase2SlidingPokeballs_IsDone, +}; + +static const s16 gUnknown_83FA400[] = { -16, 256 }; + +static const s16 gUnknown_83FA404[] = { 0, 16, 32, 8, 24 }; + +static const s16 gUnknown_83FA40E[] = { 8, -8 }; + +static 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, +}; + +static const TransitionStateFunc sBT_Phase2FullScreenWaveFuncs[] = +{ + BT_Phase2FullScreenWave_Init, + BT_Phase2FullScreenWave_UpdateWave, +}; + +static const TransitionStateFunc sBT_Phase2BlackWaveToRightFuncs[] = +{ + BT_Phase2BlackWaveToRight_Init, + BT_Phase2BlackWaveToRight_UpdateWave, + BT_Phase2BlackWaveToRight_End, +}; +static const s16 gUnknown_83FA444[] = +{ + 0x0, 0x26E, + 0x100, 0x69, + 0x0, -0x69, + -0x100, -0x266E, + 0x0, 0x26E, + 0x100, 0x69, + 0x0, -0x69, + -0x100, -0x266E, +}; + +static const TransitionStateFunc sBT_Phase2AntiClockwiseSpiralFuncs[] = +{ + BT_Phase2AntiClockwiseSpiral_Init, + BT_Phase2AntiClockwiseSpiral_Update, +}; + +static 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, +}; + +static const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_COUNT] = +{ + // TODO: document these with macro + 0x70, 0x71, 0x72, 0x73, 0x7D +}; + +static const s16 sMugshotsOpponentRotationScales[MUGSHOTS_COUNT][2] = +{ + {0x200, 0x200}, + {0x200, 0x200}, + {0x200, 0x200}, + {0x200, 0x200}, + {0x200, 0x200}, +}; + +static const s16 sMugshotsOpponentCoords[MUGSHOTS_COUNT][2] = +{ + { -8, 0 }, + { -10, 0 }, + { 0, 0 }, + { -32, 0 }, + { 0, 0 }, +}; + +static 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, +}; + +static const s16 sMugShotSlideVelocity[] = { 12, -12 }; + +static const s16 sMugShotSlideDeceleration[] = { -1, 1 }; + +static const TransitionStateFunc sBT_Phase2SlicedScreenFuncs[] = +{ + BT_Phase2SlicedScreen_Init, + BT_Phase2SlicedScreen_UpdateOffsets, + BT_Phase2SlicedScreen_End, +}; + +static const TransitionStateFunc sBT_Phase2WhiteFadeInStripesFuncs[] = +{ + BT_Phase2WhiteFadeInStripes_Init, + BT_Phase2WhiteFadeInStripes_SetupSprites, + BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone, + BT_Phase2WhiteFadeInStripes_Stop, + BT_Phase2WhiteFadeInStripes_IsDone, +}; + +static const u16 sWhiteStripeDelay[] = { 0, 9, 15, 6, 12, 3 }; + +static const TransitionStateFunc sBT_Phase2GridSquaresFuncs[] = +{ + BT_Phase2GridSquares_LoadGfx, + BT_Phase2GridSquares_UpdateTileset, + BT_Phase2GridSquares_IsDone, +}; + +static const TransitionStateFunc sBT_Phase2BlackDoodlesFuncs[] = +{ + BT_Phase2BlackDoodles_Init, + BT_Phase2BlackDoodles_InitSingleBrush, + BT_Phase2BlackDoodles_DrawSingleBrush, + BT_Phase2BlackDoodles_IsDone, + BT_Phase2BlackDoodles_NextBrush, +}; + +static const s16 sBlackDoodlesSegments[][5] = +{ + { 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 }, +}; + +static const s16 sBlackDoodlesDelay[] = { 1, 1, 1, 1, 1, 1, 0 }; + +static const TransitionStateFunc sBT_Phase1FadeFuncs[] = +{ + BT_Phase1_FadeOut, + BT_Phase1_FadeIn, +}; + +static const struct SpriteFrameImage sSpriteImageTable_SlidingPokeball[] = +{ + { + .data = sSpriteImage_SlidingPokeball, + .size = 0x200, + }, +}; + +static const union AnimCmd sSpriteAnim_SlidingPokeball[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSpriteAnimTable_SlidingPokeball[] = { sSpriteAnim_SlidingPokeball }; + +static const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball1[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -4, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball2[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 4, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_SlidingPokeball[] = +{ + sSpriteAffineAnim_SlidingPokeball1, + sSpriteAffineAnim_SlidingPokeball2, +}; + +static 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, +}; + +static 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, +}; + +static const struct SpriteFrameImage sSpriteImageTable_UnusedBrendan[] = +{ + { + .data = sSpriteImage_UnusedBrendan, + .size = 0x800, + }, +}; + +static const struct SpriteFrameImage sSpriteImageTable_UnusedLass[] = +{ + { + .data = sSpriteImage_UnusedLass, + .size = 0x800, + }, +}; + +static const union AnimCmd sSpriteAnim_Unused[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSpriteAnimTable_Unused[] = { sSpriteAnim_Unused }; + +static 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 +static const u16 sSlidingPokeballBigPokeballPalette[] = INCBIN_U16("graphics/battle_transitions/sliding_pokeball.gbapal"); + +static const struct SpritePalette sSpritePalette_SlidingPokeball = +{ + .data = sSlidingPokeballBigPokeballPalette, + .tag = 0x1009, +}; + +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"); + +static const u16 *const sVsBarOpponentPalettes[MUGSHOTS_COUNT] = +{ + sVsBarLoreleiPalette, + sVsBarBrunoPalette, + sVsBarAgathaPalette, + sVsBarLancePalette, + sVsBarBluePalette, +}; + +static const u16 *const sVsBarPlayerPalettes[] = +{ + sVsBarMalePlayerPalette, + sVsBarFemalePlayerPalette, +}; + +static const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitions/unused_trainer.gbapal"); + +static const struct SpritePalette sSpritePalette_UnusedTrainer = +{ + .data = sUnusedTrainerPalette, + .tag = 0x100A, +}; + +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) +{ + 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; + } +} + +static void BT_LaunchTask(u8 transitionId) +{ + u8 taskId = CreateTask(BT_TaskMain, 2); + gTasks[taskId].tTransitionId = transitionId; +} + +static void BT_TaskMain(u8 taskId) +{ + while (sBT_MainPhases[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; + } +} + +static bool8 BT_WaitForPhase1(struct Task *task) +{ + if (FindTaskIdByFunc(sBT_Phase1Tasks[task->tTransitionId]) == TASK_NONE) + { + ++task->tState; + return TRUE; + } + else + { + return FALSE; + } +} + +static bool8 BT_Phase2LaunchAnimTask(struct Task *task) +{ + CreateTask(sBT_Phase2Tasks[task->tTransitionId], 0); + ++task->tState; + return FALSE; +} + +static bool8 BT_WaitForPhase2(struct Task *task) +{ + task->tTransitionDone = FALSE; + if (FindTaskIdByFunc(sBT_Phase2Tasks[task->tTransitionId]) == TASK_NONE) + task->tTransitionDone = TRUE; + return FALSE; +} + +static 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] + +static void BT_Phase2Blur(u8 taskId) +{ + while (sBT_Phase2BlurFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +static 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; +} + +static 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] + +static void BT_Phase2DistortedWave(u8 taskId) +{ + while (sBT_Phase2DistortedWaveFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +static 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; +} + +static void VBCB_BT_Phase2DistortedWave(void) +{ + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); +} + +static void HBCB_BT_Phase2DistortedWave(void) +{ + s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + + REG_BG1HOFS = offset; + REG_BG2HOFS = offset; + REG_BG3HOFS = offset; +} + +static void BT_Phase2HorizontalCorrugate(u8 taskId) +{ + while (sBT_Phase2HorizontalCorrugateFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +static 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; +} + +static void VBCB_BT_Phase2HorizontalCorrugate(void) +{ + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); +} + +static void HBCB_BT_Phase2HorizontalCorrugate(void) +{ + s16 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] + +static void BT_Phase2BigPokeball(u8 taskId) +{ + while (sBT_Phase2BigPokeballFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +static 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; +} + +static 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] will have different sign. + BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude >> 8, 160); + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static 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; +} + +#undef tEvb +#undef tEva +#undef tInterval + +#define tRadius data[1] +#define tDeltaRadius data[2] +#define tKeepVBCB data[3] + +static 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->tRadius = 160; + task->tDeltaRadius = 256; + task->tKeepVBCB = 0; + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + if (task->tDeltaRadius < 2048) + task->tDeltaRadius += 256; + if (task->tRadius) + { + 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; +} + +static 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); +} + +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); +} + +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); +} + +#undef tRadius +#undef tDeltaRadius +#undef tKeepVBCB +#undef tTheta +#undef tAmplitude + +// TODO: Document this effect after knowing more about field effects. +static void BT_Phase2SlidingPokeballs(u8 taskId) +{ + while (sBT_Phase2SlidingPokeballsFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +static 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; +} + +static 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; \ +} + +static 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] + +static void BT_Phase2ClockwiseBlackFade(u8 taskId) +{ + while (sBT_Phase2ClockwiseBlackFadeFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +static 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; +} + +static 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; +} + +static 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. + */ +static 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; +} + +static 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; +} + +static bool8 BT_Phase2ClockwiseBlackFade_End(struct Task *task) +{ + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2ClockwiseBlackFade)); + return FALSE; +} + +static 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_16BIT | 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] + +static void BT_Phase2FullScreenWave(u8 taskId) +{ + while (sBT_Phase2FullScreenWaveFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +static 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; +} + +static void VBCB_BT_Phase2FullScreenWave(void) +{ + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); +} + +static void HBCB_BT_Phase2FullScreenWave(void) +{ + s16 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] + +static void BT_Phase2BlackWaveToRight(u8 taskId) +{ + while (sBT_Phase2BlackWaveToRightFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +static bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task) +{ + u8 i, theta; + u16 *winVal; + bool8 nextFunc; + + sTransitionStructPtr->vblankDma = FALSE; + winVal = gScanlineEffectRegBuffers[0]; + theta = task->tTheta; + task->tTheta += 16; + task->tOffset += 8; + 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; + *winVal = (left << 8) | (0xF1); + if (left < 240) + nextFunc = FALSE; + } + if (nextFunc) + ++task->tState; + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2BlackWaveToRight_End(struct Task *task) +{ + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2BlackWaveToRight)); + return FALSE; +} + +static 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 + +static void BT_Phase2AntiClockwiseSpiral(u8 taskId) +{ + while (sBT_Phase2AntiClockwiseSpiralFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +#ifdef NONMATCHING +static void sub_80D1F64(s16 a1, s16 a2, u8 a3) +{ + 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, u8 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 + +static 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; +} + +static 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; +} + +static 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] + +static void BT_Phase2StartLoreleiMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_LORELEI; + BT_Phase2Mugshot(taskId); +} + +static void BT_Phase2StartBrunoMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_BRUNO; + BT_Phase2Mugshot(taskId); +} + +static void BT_Phase2StartAgathaMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_AGATHA; + BT_Phase2Mugshot(taskId); +} + +static void BT_Phase2StartLanceMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_LANCE; + BT_Phase2Mugshot(taskId); +} + +static void BT_Phase2StartBlueMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_BLUE; + BT_Phase2Mugshot(taskId); +} + +static void BT_Phase2Mugshot(u8 taskId) +{ + while (sBT_Phase2MugshotFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +static 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; +} + +static bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task) +{ + u8 i, theta; + u16 *winVal; + s16 value; + s32 mergedBg0hOfs; + + sTransitionStructPtr->vblankDma = FALSE; + + winVal = gScanlineEffectRegBuffers[0]; + theta = task->tTheta; + task->tTheta += 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; + *winVal = value; + } + for (; i < 160; ++i, ++winVal, theta += 0x10) + { + value = task->tCounter - Sin(theta, 0x10); + if (value < 0) + value = 0; + if (value > 0xEF) + value = 0xEF; + *winVal = (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; +} + +static bool8 BT_Phase2Mugshot_StartSpriteSlide(struct Task *task) +{ + u8 i; + u16 *winVal; + + sTransitionStructPtr->vblankDma = FALSE; + for (i = 0, winVal = gScanlineEffectRegBuffers[0]; i < 160; ++i, ++winVal) + *winVal = 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; +} + +static 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; +} + +static 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; +} + +static 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; +} + +static 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; +} + +static 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; +} + +static bool8 BT_Phase2Mugshot_End(struct Task *task) +{ + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(task->func)); + return FALSE; +} + +static 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); +} + +static 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); +} + +static void HBCB_BT_Phase2Mugshot(void) +{ + if (REG_VCOUNT < 80) + REG_BG0HOFS = sTransitionStructPtr->bg0HOfsOpponent; + else + REG_BG0HOFS = sTransitionStructPtr->bg0HOfsPlayer; +} + + +static 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); +} + +static void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite) +{ + while (sBT_Phase2MugshotSpriteFuncs[sprite->spState](sprite)); +} + +static bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite) +{ + return FALSE; +} + +static 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; +} + +static 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; +} + +static 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 +static 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; +} + +static void BT_SetSpriteAsOpponentOrPlayer(s16 spriteId, bool16 value) +{ + gSprites[spriteId].spOpponentOrPlayer = value; +} + +static void BT_StartSpriteSlide(s16 spriteId) +{ + ++gSprites[spriteId].spState; +} + +static 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] + +static void BT_Phase2SlicedScreen(u8 taskId) +{ + while (sBT_Phase2SlicedScreenFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +static 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; +} + +static bool8 BT_Phase2SlicedScreen_End(struct Task *task) +{ + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2SlicedScreen)); + return FALSE; +} + +static 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); +} + +static 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] + +static void BT_Phase2WhiteFadeInStripes(u8 taskId) +{ + while (sBT_Phase2WhiteFadeInStripesFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +static 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; +} + +static bool8 BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + if (sTransitionStructPtr->counter > 5) + { + BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE); + ++task->tState; + } + return FALSE; +} + +static 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; +} + +static 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; +} + +static 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); +} + +static 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); +} + + +static void HBCB_BT_Phase2WhiteFadeInStripes(void) +{ + vu16 index = REG_VCOUNT; + + if (index == 227) + index = 0; + REG_BLDY = gScanlineEffectRegBuffers[1][index]; +} + +static 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] + +static void BT_Phase2GridSquares(u8 taskId) +{ + while (sBT_Phase2GridSquaresFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +static 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; +} + +static 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] + +static void BT_Phase2BlackDoodles(u8 taskId) +{ + while (sBT_Phase2BlackDoodlesFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +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]; + ++task->tState; + return TRUE; +} + +static 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; +} + +static 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; + } +} + +static bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task) +{ + if (--task->tDelay == 0) + { + task->tState = 1; + return TRUE; + } + else + return FALSE; +} + +static 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] + +static 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; +} + +static bool8 BT_IsPhase1Done(void) +{ + if (FindTaskIdByFunc(BT_Phase1SubTask) == TASK_NONE) + return TRUE; + else + return FALSE; +} + +static void BT_Phase1SubTask(u8 taskId) +{ + while (sBT_Phase1FadeFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static 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; +} + +static 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 + +static void BT_InitCtrlBlk(void) +{ + memset(sTransitionStructPtr, 0, sizeof(*sTransitionStructPtr)); + sub_805A658(&sTransitionStructPtr->bg123HOfs, &sTransitionStructPtr->bg123VOfs); +} + +static void BT_VBSyncOamAndPltt(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void BT_GetBg0TilesetBase(u16 **tilesetPtr) +{ + u16 charBase; + + charBase = GetGpuReg(REG_OFFSET_BG0CNT) >> 2; + charBase <<= 0xE; + *tilesetPtr = (u16 *)(VRAM + charBase); +} + +static 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); +} + +static void BT_BlendPalettesToBlack(void) +{ + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); +} + +static 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); +} + +static 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 + +static 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; +} + +static 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 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, 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..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 -gUnknown_2039A2C: @ 2039A2C - .space 0x4 + .include "src/battle_transition.o" gUnknown_2039A30: @ 2039A30 .space 0x4 |