summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_transition.s562
-rw-r--r--data/battle_transition.s6
-rw-r--r--src/battle_transition.c180
3 files changed, 185 insertions, 563 deletions
diff --git a/asm/battle_transition.s b/asm/battle_transition.s
index 0a1a71d7d..37f50ebd9 100644
--- a/asm/battle_transition.s
+++ b/asm/battle_transition.s
@@ -7,558 +7,8 @@
.text
-
- thumb_func_start Phase2_Transition5_Func4
-Phase2_Transition5_Func4: @ 811B9F0
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- ldr r4, _0811BA68 @ =0x0200c000
- ldrb r0, [r4]
- movs r0, 0
- strb r0, [r4]
- adds r0, r4, 0
- adds r0, 0x24
- movs r1, 0x2C
- ldrsh r3, [r4, r1]
- 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_811D8FC
- ldr r5, _0811BA6C @ =gUnknown_03004DE0
-_0811BA1A:
- movs r0, 0x2A
- ldrsh r2, [r4, r0]
- lsls r2, 1
- adds r2, r5
- ldrh r0, [r4, 0x28]
- lsls r0, 8
- movs r1, 0xF0
- orrs r0, r1
- strh r0, [r2]
- adds r0, r4, 0
- adds r0, 0x24
- movs r1, 0x1
- movs r2, 0x1
- bl sub_811D978
- lsls r0, 24
- cmp r0, 0
- beq _0811BA1A
- ldr r2, _0811BA68 @ =0x0200c000
- ldrh r0, [r2, 0x2C]
- subs r0, 0x10
- strh r0, [r2, 0x2C]
- lsls r0, 16
- cmp r0, 0
- bgt _0811BA56
- movs r0, 0xA0
- strh r0, [r2, 0x2E]
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_0811BA56:
- ldrb r0, [r2]
- adds r0, 0x1
- ldrb r1, [r2]
- strb r0, [r2]
- movs r0, 0
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0811BA68: .4byte 0x0200c000
-_0811BA6C: .4byte gUnknown_03004DE0
- thumb_func_end Phase2_Transition5_Func4
-
- thumb_func_start Phase2_Transition5_Func5
-Phase2_Transition5_Func5: @ 811BA70
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- mov r8, r0
- add r1, sp, 0xC
- movs r0, 0
- strb r0, [r1]
- ldr r4, _0811BAF0 @ =0x0200c000
- ldrb r0, [r4]
- movs r0, 0
- strb r0, [r4]
- adds r0, r4, 0
- adds r0, 0x24
- movs r2, 0x2E
- ldrsh r1, [r4, 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_811D8FC
- ldr r3, _0811BAF4 @ =gUnknown_03004DE0
- mov r9, r3
- mov r10, r4
- add r6, sp, 0xC
-_0811BAAE:
- movs r5, 0x2A
- ldrsh r0, [r4, r5]
- lsls r0, 1
- mov r7, r9
- 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 _0811BACA
- movs r2, 0x78
- adds r1, r3, 0
-_0811BACA:
- lsls r0, r2, 16
- asrs r0, 8
- lsls r1, 16
- asrs r1, 16
- orrs r1, r0
- movs r3, 0
- strh r1, [r5]
- ldrb r0, [r6]
- cmp r0, 0
- bne _0811BAF8
- adds r0, r4, 0
- adds r0, 0x24
- movs r1, 0x1
- movs r2, 0x1
- bl sub_811D978
- strb r0, [r6]
- b _0811BAAE
- .align 2, 0
-_0811BAF0: .4byte 0x0200c000
-_0811BAF4: .4byte gUnknown_03004DE0
-_0811BAF8:
- ldrh r0, [r4, 0x2E]
- subs r0, 0x8
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r2, r0, 16
- cmp r2, 0
- bgt _0811BB12
- strh r3, [r4, 0x2C]
- mov r1, r8
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _0811BB3A
-_0811BB12:
- movs r3, 0x2A
- ldrsh r0, [r4, r3]
- cmp r0, r2
- ble _0811BB3A
- ldr r4, _0811BB58 @ =gUnknown_03004DE0
- ldr r2, _0811BB5C @ =0x0200c000
- adds r3, r1, 0
-_0811BB20:
- ldrh r0, [r2, 0x2A]
- subs r0, 0x1
- strh r0, [r2, 0x2A]
- lsls r0, 16
- asrs r0, 15
- adds r0, r4
- strh r3, [r0]
- movs r5, 0x2A
- ldrsh r1, [r2, r5]
- movs r7, 0x2E
- ldrsh r0, [r2, r7]
- cmp r1, r0
- bgt _0811BB20
-_0811BB3A:
- mov r1, r10
- ldrb r0, [r1]
- adds r0, 0x1
- ldrb r1, [r1]
- mov r2, r10
- strb r0, [r2]
- 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
-_0811BB58: .4byte gUnknown_03004DE0
-_0811BB5C: .4byte 0x0200c000
- thumb_func_end Phase2_Transition5_Func5
-
- thumb_func_start Phase2_Transition5_Func6
-Phase2_Transition5_Func6: @ 811BB60
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- ldr r4, _0811BBE4 @ =0x0200c000
- ldrb r0, [r4]
- movs r1, 0
- strb r1, [r4]
- adds r0, r4, 0
- adds r0, 0x24
- movs r2, 0x2C
- ldrsh r3, [r4, r2]
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0x78
- movs r2, 0x50
- bl sub_811D8FC
- ldr r5, _0811BBE8 @ =gUnknown_03004DE0
-_0811BB88:
- movs r2, 0x78
- ldrh r3, [r4, 0x28]
- movs r1, 0x28
- ldrsh r0, [r4, r1]
- cmp r0, 0x77
- ble _0811BB98
- movs r2, 0
- movs r3, 0xF0
-_0811BB98:
- movs r0, 0x2A
- ldrsh r1, [r4, r0]
- lsls r1, 1
- adds r1, r5
- lsls r2, 8
- lsls r0, r3, 16
- asrs r0, 16
- orrs r0, r2
- strh r0, [r1]
- adds r0, r4, 0
- adds r0, 0x24
- movs r1, 0x1
- movs r2, 0x1
- bl sub_811D978
- lsls r0, 24
- cmp r0, 0
- beq _0811BB88
- ldr r2, _0811BBE4 @ =0x0200c000
- ldrh r0, [r2, 0x2C]
- adds r0, 0x10
- strh r0, [r2, 0x2C]
- movs r1, 0x28
- ldrsh r0, [r2, r1]
- cmp r0, 0x78
- ble _0811BBD2
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_0811BBD2:
- ldrb r0, [r2]
- adds r0, 0x1
- ldrb r1, [r2]
- strb r0, [r2]
- movs r0, 0
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0811BBE4: .4byte 0x0200c000
-_0811BBE8: .4byte gUnknown_03004DE0
- thumb_func_end Phase2_Transition5_Func6
-
- thumb_func_start Phase2_Transition5_Func7
-Phase2_Transition5_Func7: @ 811BBEC
- push {lr}
- ldr r1, _0811BC1C @ =0x040000b0
- ldrh r2, [r1, 0xA]
- ldr r0, _0811BC20 @ =0x0000c5ff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r2, [r1, 0xA]
- ldr r0, _0811BC24 @ =0x00007fff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r0, [r1, 0xA]
- bl sub_811D6D4
- ldr r0, _0811BC28 @ =Phase2Task_Transition5
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0811BC1C: .4byte 0x040000b0
-_0811BC20: .4byte 0x0000c5ff
-_0811BC24: .4byte 0x00007fff
-_0811BC28: .4byte Phase2Task_Transition5
- thumb_func_end Phase2_Transition5_Func7
-
- thumb_func_start VBlankCB_Phase2_Transition5
-VBlankCB_Phase2_Transition5: @ 811BC2C
- push {r4,lr}
- ldr r4, _0811BC94 @ =0x040000b0
- ldrh r1, [r4, 0xA]
- ldr r0, _0811BC98 @ =0x0000c5ff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r1, [r4, 0xA]
- ldr r0, _0811BC9C @ =0x00007fff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xA]
- bl VBlankCB_BattleTransition
- ldr r2, _0811BCA0 @ =0x0200c000
- ldrb r0, [r2]
- cmp r0, 0
- beq _0811BC62
- ldr r1, _0811BCA4 @ =0x040000d4
- ldr r0, _0811BCA8 @ =gUnknown_03004DE0
- str r0, [r1]
- movs r3, 0xF0
- lsls r3, 3
- adds r0, r3
- str r0, [r1, 0x4]
- ldr r0, _0811BCAC @ =0x800000a0
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811BC62:
- ldr r1, _0811BCB0 @ =REG_WININ
- ldrh r0, [r2, 0x2]
- strh r0, [r1]
- adds r1, 0x2
- ldrh r0, [r2, 0x4]
- strh r0, [r1]
- subs r1, 0x6
- ldrh r0, [r2, 0x8]
- strh r0, [r1]
- ldr r2, _0811BCB4 @ =REG_WIN0H
- ldr r0, _0811BCA8 @ =gUnknown_03004DE0
- movs r1, 0xF0
- lsls r1, 3
- adds r0, r1
- ldrh r1, [r0]
- strh r1, [r2]
- str r0, [r4]
- str r2, [r4, 0x4]
- ldr r0, _0811BCB8 @ =0xa2400001
- str r0, [r4, 0x8]
- ldr r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811BC94: .4byte 0x040000b0
-_0811BC98: .4byte 0x0000c5ff
-_0811BC9C: .4byte 0x00007fff
-_0811BCA0: .4byte 0x0200c000
-_0811BCA4: .4byte 0x040000d4
-_0811BCA8: .4byte gUnknown_03004DE0
-_0811BCAC: .4byte 0x800000a0
-_0811BCB0: .4byte REG_WININ
-_0811BCB4: .4byte REG_WIN0H
-_0811BCB8: .4byte 0xa2400001
- thumb_func_end VBlankCB_Phase2_Transition5
-
- thumb_func_start Phase2Task_Transition6
-Phase2Task_Transition6: @ 811BCBC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811BCEC @ =gUnknown_083FD814
- ldr r2, _0811BCF0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811BCCE:
- 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 _0811BCCE
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811BCEC: .4byte gUnknown_083FD814
-_0811BCF0: .4byte gTasks
- thumb_func_end Phase2Task_Transition6
-
- thumb_func_start sub_811BCF4
-sub_811BCF4: @ 811BCF4
- push {r4,r5,lr}
- adds r5, r0, 0
- bl sub_811D658
- bl dp12_8087EA4
- movs r2, 0
- ldr r4, _0811BD48 @ =gUnknown_03005560
- ldr r3, _0811BD4C @ =0x0200c000
-_0811BD06:
- lsls r0, r2, 1
- adds r0, r4
- ldrh r1, [r3, 0x16]
- strh r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x9F
- bls _0811BD06
- ldr r0, _0811BD50 @ =sub_811BE3C
- bl SetVBlankCallback
- ldr r0, _0811BD54 @ =sub_811BE74
- bl SetHBlankCallback
- ldr r2, _0811BD58 @ =0x04000200
- ldrh r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strh r0, [r2]
- ldr r2, _0811BD5C @ =REG_DISPSTAT
- ldrh r0, [r2]
- movs r1, 0x10
- orrs r0, r1
- strh r0, [r2]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811BD48: .4byte gUnknown_03005560
-_0811BD4C: .4byte 0x0200c000
-_0811BD50: .4byte sub_811BE3C
-_0811BD54: .4byte sub_811BE74
-_0811BD58: .4byte 0x04000200
-_0811BD5C: .4byte REG_DISPSTAT
- thumb_func_end sub_811BCF4
-
- thumb_func_start sub_811BD60
-sub_811BD60: @ 811BD60
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r6, r0, 0
- ldr r1, _0811BE28 @ =0x0200c000
- 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, _0811BE2C @ =0x1fff0000
- cmp r1, r0
- bgt _0811BD9A
- movs r1, 0xC0
- lsls r1, 1
- adds r0, r2, r1
- strh r0, [r6, 0xC]
-_0811BD9A:
- movs r5, 0
- lsls r7, r3, 16
-_0811BD9E:
- lsrs r0, r4, 8
- asrs r1, r7, 16
- bl Sin
- ldr r1, _0811BE30 @ =gUnknown_03004DE0
- lsls r2, r5, 1
- adds r2, r1
- ldr r1, _0811BE28 @ =0x0200c000
- 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 _0811BD9E
- ldrh r0, [r6, 0xE]
- adds r0, 0x1
- strh r0, [r6, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x51
- bne _0811BDEC
- ldrh r0, [r6, 0x10]
- adds r0, 0x1
- strh r0, [r6, 0x10]
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x2
- negs r1, r1
- movs r2, 0
- str r2, [sp]
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_0811BDEC:
- movs r5, 0x10
- ldrsh r0, [r6, r5]
- cmp r0, 0
- beq _0811BE0E
- ldr r0, _0811BE34 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0811BE0E
- ldr r0, _0811BE38 @ =Phase2Task_Transition6
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0811BE0E:
- ldr r0, _0811BE28 @ =0x0200c000
- ldrb r1, [r0]
- adds r1, 0x1
- ldrb r2, [r0]
- strb r1, [r0]
- movs r0, 0
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811BE28: .4byte 0x0200c000
-_0811BE2C: .4byte 0x1fff0000
-_0811BE30: .4byte gUnknown_03004DE0
-_0811BE34: .4byte gPaletteFade
-_0811BE38: .4byte Phase2Task_Transition6
- thumb_func_end sub_811BD60
-
- thumb_func_start sub_811BE3C
-sub_811BE3C: @ 811BE3C
+ thumb_func_start VBlankCB_Phase2_Transition6
+VBlankCB_Phase2_Transition6: @ 811BE3C
push {lr}
bl VBlankCB_BattleTransition
ldr r0, _0811BE64 @ =0x0200c000
@@ -583,10 +33,10 @@ _0811BE64: .4byte 0x0200c000
_0811BE68: .4byte 0x040000d4
_0811BE6C: .4byte gUnknown_03004DE0
_0811BE70: .4byte 0x800000a0
- thumb_func_end sub_811BE3C
+ thumb_func_end VBlankCB_Phase2_Transition6
- thumb_func_start sub_811BE74
-sub_811BE74: @ 811BE74
+ thumb_func_start HBlankCB_Phase2_Transition6
+HBlankCB_Phase2_Transition6: @ 811BE74
ldr r1, _0811BE94 @ =gUnknown_03004DE0
ldr r0, _0811BE98 @ =REG_VCOUNT
ldrh r0, [r0]
@@ -607,7 +57,7 @@ sub_811BE74: @ 811BE74
_0811BE94: .4byte gUnknown_03004DE0
_0811BE98: .4byte REG_VCOUNT
_0811BE9C: .4byte REG_BG1VOFS
- thumb_func_end sub_811BE74
+ thumb_func_end HBlankCB_Phase2_Transition6
thumb_func_start Phase2Task_Transition7
Phase2Task_Transition7: @ 811BEA0
diff --git a/data/battle_transition.s b/data/battle_transition.s
index d71fa3594..187915f92 100644
--- a/data/battle_transition.s
+++ b/data/battle_transition.s
@@ -142,9 +142,9 @@ sPhase2_Transition5_Funcs:: @ 83FD7F8
.4byte Phase2_Transition5_Func7
.align 2
-gUnknown_083FD814:: @ 83FD814
- .4byte sub_811BCF4
- .4byte sub_811BD60
+sPhase2_Transition6_Funcs:: @ 83FD814
+ .4byte Phase2_Transition6_Func1
+ .4byte Phase2_Transition6_Func2
.align 2
gUnknown_083FD81C:: @ 83FD81C
diff --git a/src/battle_transition.c b/src/battle_transition.c
index fb20853a5..fa911d411 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -20,6 +20,7 @@ extern const TransitionState sPhase2_Transition2_Funcs[];
extern const TransitionState sPhase2_Transition3_Funcs[];
extern const TransitionState sPhase2_Transition4_Funcs[];
extern const TransitionState sPhase2_Transition5_Funcs[];
+extern const TransitionState sPhase2_Transition6_Funcs[];
extern const TaskFunc sPhase1_Tasks[];
extern const TaskFunc sPhase2_Tasks[];
@@ -69,11 +70,17 @@ void sub_811D658(void);
static void VBlankCB_Phase2_Transition1(void);
static void HBlankCB_Phase2_Transition1(void);
+
static void VBlankCB_Phase2_Transition2(void);
static void HBlankCB_Phase2_Transition2(void);
-void VBlankCB0_Phase2_Transition3(void);
-void VBlankCB1_Phase2_Transition3(void);
-void VBlankCB_Phase2_Transition5(void);
+
+static void VBlankCB0_Phase2_Transition3(void);
+static void VBlankCB1_Phase2_Transition3(void);
+
+static void VBlankCB_Phase2_Transition5(void);
+
+void VBlankCB_Phase2_Transition6(void);
+void HBlankCB_Phase2_Transition6(void);
void VBlankCB_BattleTransition(void);
void sub_811D6E8(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5);
@@ -510,7 +517,7 @@ static void Transition3_Vblank(void)
REG_BLDALPHA = TRANSITION_STRUCT.field_10;
}
-void VBlankCB0_Phase2_Transition3(void)
+static void VBlankCB0_Phase2_Transition3(void)
{
Transition3_Vblank();
DmaSet(0, gUnknown_03005560, &REG_BG0HOFS, 0xA2400001);
@@ -821,3 +828,168 @@ bool8 Phase2_Transition5_Func3(struct Task* task)
TRANSITION_STRUCT.field_0++;
return 0;
}
+
+bool8 Phase2_Transition5_Func4(struct Task* task)
+{
+ TRANSITION_STRUCT.field_0 = 0;
+
+ sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, TRANSITION_STRUCT.field_2C, 160, 1, 1);
+ do
+ {
+ gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (TRANSITION_STRUCT.field_28 << 8) | 0xF0;
+ } while (!sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1));
+
+ TRANSITION_STRUCT.field_2C -= 16;
+ if (TRANSITION_STRUCT.field_2C <= 0)
+ {
+ TRANSITION_STRUCT.field_2E = 160;
+ task->tState++;
+ }
+
+ TRANSITION_STRUCT.field_0++;
+ return 0;
+}
+
+bool8 Phase2_Transition5_Func5(struct Task* task)
+{
+ s16 r1, r2, r3;
+ vu8 var = 0;
+
+ TRANSITION_STRUCT.field_0 = 0;
+
+ sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, 0, TRANSITION_STRUCT.field_2E, 1, 1);
+
+ while (1)
+ {
+ r1 = gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] & 0xFF, r2 = TRANSITION_STRUCT.field_28;
+ if (TRANSITION_STRUCT.field_2E <= 80)
+ r2 = 120, r1 = TRANSITION_STRUCT.field_28;
+ gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (r1) | (r2 << 8);
+ r3 = 0;
+ if (var != 0)
+ break;
+ var = sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1);
+ }
+
+ TRANSITION_STRUCT.field_2E -= 8;
+ if (TRANSITION_STRUCT.field_2E <= 0)
+ {
+ TRANSITION_STRUCT.field_2C = r3;
+ task->tState++;
+ }
+ else
+ {
+ while (TRANSITION_STRUCT.field_2A > TRANSITION_STRUCT.field_2E)
+ {
+ gUnknown_03004DE0[0][--TRANSITION_STRUCT.field_2A] = (r1) | (r2 << 8);
+ }
+ }
+
+ TRANSITION_STRUCT.field_0++;
+ return 0;
+}
+
+bool8 Phase2_Transition5_Func6(struct Task* task)
+{
+ TRANSITION_STRUCT.field_0 = 0;
+
+ sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, TRANSITION_STRUCT.field_2C, 0, 1, 1);
+ do
+ {
+ s16 r2, r3;
+
+ r2 = 120, r3 = TRANSITION_STRUCT.field_28;
+ if (TRANSITION_STRUCT.field_28 >= 120)
+ r2 = 0, r3 = 240;
+ gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (r3) | (r2 << 8);
+
+ } while (!sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1));
+
+ TRANSITION_STRUCT.field_2C += 16;
+ if (TRANSITION_STRUCT.field_28 > 120)
+ task->tState++;
+
+ TRANSITION_STRUCT.field_0++;
+ return 0;
+}
+
+bool8 Phase2_Transition5_Func7(struct Task* task)
+{
+ DmaStop(0);
+ sub_811D6D4();
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition5));
+ return 0;
+}
+
+static void VBlankCB_Phase2_Transition5(void)
+{
+ DmaStop(0);
+ VBlankCB_BattleTransition();
+ if (TRANSITION_STRUCT.field_0 != 0)
+ DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ REG_WININ = TRANSITION_STRUCT.field_2;
+ REG_WINOUT = TRANSITION_STRUCT.field_4;
+ REG_WIN0V = TRANSITION_STRUCT.field_8;
+ REG_WIN0H = gUnknown_03004DE0[1][0];
+ DmaSet(0, gUnknown_03004DE0[1], &REG_WIN0H, 0xA2400001);
+}
+
+void Phase2Task_Transition6(u8 taskID)
+{
+ while (sPhase2_Transition6_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+bool8 Phase2_Transition6_Func1(struct Task* task)
+{
+ u8 i;
+
+ sub_811D658();
+ dp12_8087EA4();
+
+ for (i = 0; i < 160; i++)
+ {
+ gUnknown_03005560[i] = TRANSITION_STRUCT.field_16;
+ }
+
+ SetVBlankCallback(VBlankCB_Phase2_Transition6);
+ SetHBlankCallback(HBlankCB_Phase2_Transition6);
+
+ REG_IE |= 2;
+ REG_DISPSTAT |= 0x10;
+
+ task->tState++;
+ return 1;
+}
+
+bool8 Phase2_Transition6_Func2(struct Task* task)
+{
+ u8 i;
+ u16 r3, r4, r8;
+
+ TRANSITION_STRUCT.field_0 = 0;
+
+ r3 = task->data[2] >> 8;
+ r4 = task->data[1];
+ r8 = 384;
+ task->data[1] += 0x400;
+ if (task->data[2] <= 0x1FFF)
+ task->data[2] += 0x180;
+
+ for (i = 0; i < 160; i++, r4 += r8)
+ {
+ s16 sinResult = Sin(r4 >> 8, r3);
+ gUnknown_03004DE0[0][i] = TRANSITION_STRUCT.field_16 + sinResult;
+ }
+
+ if (++task->data[3] == 81)
+ {
+ task->data[4]++;
+ BeginNormalPaletteFade(-1, -2, 0, 0x10, 0);
+ }
+
+ if (task->data[4] != 0 && !gPaletteFade.active)
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition6));
+
+ TRANSITION_STRUCT.field_0++;
+ return 0;
+}