summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_transition.s1000
-rw-r--r--data/battle_transition.s24
-rw-r--r--src/battle_transition.c439
3 files changed, 464 insertions, 999 deletions
diff --git a/asm/battle_transition.s b/asm/battle_transition.s
index 1fc26d5e7..0a1a71d7d 100644
--- a/asm/battle_transition.s
+++ b/asm/battle_transition.s
@@ -8,978 +8,8 @@
- thumb_func_start Phase2_Transition3_Func3
-Phase2_Transition3_Func3: @ 811B268
- push {r4,lr}
- sub sp, 0x8
- adds r2, r0, 0
- ldr r1, _0811B2E8 @ =0x0200c000
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldrh r3, [r2, 0xE]
- movs r4, 0xE
- ldrsh r0, [r2, r4]
- adds r4, r1, 0
- cmp r0, 0
- beq _0811B28C
- subs r0, r3, 0x1
- strh r0, [r2, 0xE]
- lsls r0, 16
- cmp r0, 0
- bne _0811B296
-_0811B28C:
- ldrh r0, [r2, 0xC]
- adds r0, 0x1
- strh r0, [r2, 0xC]
- movs r0, 0x2
- strh r0, [r2, 0xE]
-_0811B296:
- ldrh r0, [r2, 0xA]
- lsls r0, 8
- ldrh r1, [r2, 0xC]
- orrs r0, r1
- strh r0, [r4, 0x10]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0xF
- ble _0811B2AE
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
-_0811B2AE:
- ldrh r0, [r2, 0x10]
- adds r0, 0x8
- strh r0, [r2, 0x10]
- ldr r0, _0811B2EC @ =0xffffff00
- adds r1, r0, 0
- ldrh r3, [r2, 0x12]
- adds r1, r3
- strh r1, [r2, 0x12]
- ldr r0, _0811B2F0 @ =gUnknown_03004DE0
- movs r3, 0x10
- ldrsh r2, [r2, r3]
- lsls r1, 16
- asrs r1, 24
- str r1, [sp]
- movs r1, 0xA0
- str r1, [sp, 0x4]
- movs r1, 0
- movs r3, 0x84
- bl sub_811D6E8
- ldrb r0, [r4]
- adds r0, 0x1
- ldrb r1, [r4]
- strb r0, [r4]
- movs r0, 0
- add sp, 0x8
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B2E8: .4byte 0x0200c000
-_0811B2EC: .4byte 0xffffff00
-_0811B2F0: .4byte gUnknown_03004DE0
- thumb_func_end Phase2_Transition3_Func3
-
- thumb_func_start Phase2_Transition3_Func4
-Phase2_Transition3_Func4: @ 811B2F4
- push {r4,r5,lr}
- sub sp, 0x8
- adds r3, r0, 0
- ldr r1, _0811B374 @ =0x0200c000
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldrh r2, [r3, 0xE]
- movs r4, 0xE
- ldrsh r0, [r3, r4]
- adds r4, r1, 0
- cmp r0, 0
- beq _0811B318
- subs r0, r2, 0x1
- strh r0, [r3, 0xE]
- lsls r0, 16
- cmp r0, 0
- bne _0811B322
-_0811B318:
- ldrh r0, [r3, 0xA]
- subs r0, 0x1
- strh r0, [r3, 0xA]
- movs r0, 0x2
- strh r0, [r3, 0xE]
-_0811B322:
- ldrh r0, [r3, 0xA]
- lsls r1, r0, 8
- ldrh r2, [r3, 0xC]
- orrs r1, r2
- strh r1, [r4, 0x10]
- lsls r0, 16
- cmp r0, 0
- bne _0811B338
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_0811B338:
- ldrh r0, [r3, 0x10]
- adds r0, 0x8
- strh r0, [r3, 0x10]
- ldr r5, _0811B378 @ =0xffffff00
- adds r1, r5, 0
- ldrh r0, [r3, 0x12]
- adds r1, r0
- strh r1, [r3, 0x12]
- ldr r0, _0811B37C @ =gUnknown_03004DE0
- 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_811D6E8
- ldrb r0, [r4]
- adds r0, 0x1
- ldrb r1, [r4]
- strb r0, [r4]
- movs r0, 0
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B374: .4byte 0x0200c000
-_0811B378: .4byte 0xffffff00
-_0811B37C: .4byte gUnknown_03004DE0
- thumb_func_end Phase2_Transition3_Func4
-
- thumb_func_start Phase2_Transition3_Func5
-Phase2_Transition3_Func5: @ 811B380
- push {r4-r7,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r5, _0811B3E0 @ =0x0200c000
- ldrb r0, [r5]
- movs r7, 0
- strb r7, [r5]
- ldrh r0, [r4, 0x10]
- adds r0, 0x8
- strh r0, [r4, 0x10]
- ldr r0, _0811B3E4 @ =0xffffff00
- adds r1, r0, 0
- ldrh r3, [r4, 0x12]
- adds r1, r3
- strh r1, [r4, 0x12]
- ldr r0, _0811B3E8 @ =gUnknown_03004DE0
- movs r3, 0x10
- ldrsh r2, [r4, r3]
- lsls r1, 16
- asrs r1, 24
- str r1, [sp]
- movs r6, 0xA0
- str r6, [sp, 0x4]
- movs r1, 0
- movs r3, 0x84
- bl sub_811D6E8
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bgt _0811B3CE
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- strh r6, [r4, 0xA]
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r4, 0xC]
- strh r7, [r4, 0xE]
-_0811B3CE:
- ldrb r0, [r5]
- adds r0, 0x1
- ldrb r1, [r5]
- strb r0, [r5]
- movs r0, 0
- add sp, 0x8
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B3E0: .4byte 0x0200c000
-_0811B3E4: .4byte 0xffffff00
-_0811B3E8: .4byte gUnknown_03004DE0
- thumb_func_end Phase2_Transition3_Func5
-
- thumb_func_start Phase2_Transition3_Func6
-Phase2_Transition3_Func6: @ 811B3EC
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _0811B488 @ =0x0200c000
- ldrb r1, [r0]
- movs r3, 0
- strb r3, [r0]
- ldrh r2, [r4, 0xC]
- movs r0, 0xC
- ldrsh r1, [r4, r0]
- ldr r0, _0811B48C @ =0x000003ff
- cmp r1, r0
- bgt _0811B40A
- adds r0, r2, 0
- adds r0, 0x80
- strh r0, [r4, 0xC]
-_0811B40A:
- ldrh r1, [r4, 0xA]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0811B426
- 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 _0811B426
- strh r3, [r4, 0xA]
-_0811B426:
- ldr r0, _0811B490 @ =gUnknown_03004DE0
- movs r1, 0xA
- ldrsh r3, [r4, r1]
- movs r1, 0x78
- movs r2, 0x50
- bl sub_811D764
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0811B462
- ldr r1, _0811B494 @ =0x040000b0
- ldrh r2, [r1, 0xA]
- ldr r0, _0811B498 @ =0x0000c5ff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r2, [r1, 0xA]
- ldr r0, _0811B49C @ =0x00007fff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r0, [r1, 0xA]
- bl sub_811D6D4
- ldr r0, _0811B4A0 @ =Phase2Task_Transition3
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0811B462:
- ldrh r1, [r4, 0xE]
- movs r2, 0xE
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0811B476
- adds r0, r1, 0x1
- strh r0, [r4, 0xE]
- ldr r0, _0811B4A4 @ =sub_811B54C
- bl SetVBlankCallback
-_0811B476:
- ldr r0, _0811B488 @ =0x0200c000
- ldrb r1, [r0]
- adds r1, 0x1
- ldrb r2, [r0]
- strb r1, [r0]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B488: .4byte 0x0200c000
-_0811B48C: .4byte 0x000003ff
-_0811B490: .4byte gUnknown_03004DE0
-_0811B494: .4byte 0x040000b0
-_0811B498: .4byte 0x0000c5ff
-_0811B49C: .4byte 0x00007fff
-_0811B4A0: .4byte Phase2Task_Transition3
-_0811B4A4: .4byte sub_811B54C
- thumb_func_end Phase2_Transition3_Func6
-
- thumb_func_start sub_811B4A8
-sub_811B4A8: @ 811B4A8
- push {lr}
- ldr r1, _0811B500 @ =0x040000b0
- ldrh r2, [r1, 0xA]
- ldr r0, _0811B504 @ =0x0000c5ff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r2, [r1, 0xA]
- ldr r0, _0811B508 @ =0x00007fff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r0, [r1, 0xA]
- bl VBlankCB_BattleTransition
- ldr r2, _0811B50C @ =0x0200c000
- ldrb r0, [r2]
- cmp r0, 0
- beq _0811B4DE
- ldr r1, _0811B510 @ =0x040000d4
- ldr r0, _0811B514 @ =gUnknown_03004DE0
- str r0, [r1]
- movs r3, 0xF0
- lsls r3, 3
- adds r0, r3
- str r0, [r1, 0x4]
- ldr r0, _0811B518 @ =0x800000a0
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811B4DE:
- ldr r1, _0811B51C @ =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]
- adds r1, 0xC
- ldrh r0, [r2, 0xE]
- strh r0, [r1]
- adds r1, 0x2
- ldrh r0, [r2, 0x10]
- strh r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0811B500: .4byte 0x040000b0
-_0811B504: .4byte 0x0000c5ff
-_0811B508: .4byte 0x00007fff
-_0811B50C: .4byte 0x0200c000
-_0811B510: .4byte 0x040000d4
-_0811B514: .4byte gUnknown_03004DE0
-_0811B518: .4byte 0x800000a0
-_0811B51C: .4byte REG_WININ
- thumb_func_end sub_811B4A8
-
- thumb_func_start VBlankCB_Phase2_Transition3
-VBlankCB_Phase2_Transition3: @ 811B520
- push {lr}
- bl sub_811B4A8
- ldr r1, _0811B53C @ =0x040000b0
- ldr r0, _0811B540 @ =gUnknown_03005560
- str r0, [r1]
- ldr r0, _0811B544 @ =REG_BG0HOFS
- str r0, [r1, 0x4]
- ldr r0, _0811B548 @ =0xa2400001
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_0811B53C: .4byte 0x040000b0
-_0811B540: .4byte gUnknown_03005560
-_0811B544: .4byte REG_BG0HOFS
-_0811B548: .4byte 0xa2400001
- thumb_func_end VBlankCB_Phase2_Transition3
-
- thumb_func_start sub_811B54C
-sub_811B54C: @ 811B54C
- push {lr}
- bl sub_811B4A8
- ldr r1, _0811B568 @ =0x040000b0
- ldr r0, _0811B56C @ =gUnknown_03005560
- str r0, [r1]
- ldr r0, _0811B570 @ =REG_WIN0H
- str r0, [r1, 0x4]
- ldr r0, _0811B574 @ =0xa2400001
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_0811B568: .4byte 0x040000b0
-_0811B56C: .4byte gUnknown_03005560
-_0811B570: .4byte REG_WIN0H
-_0811B574: .4byte 0xa2400001
- thumb_func_end sub_811B54C
-
- thumb_func_start Phase2Task_Transition4
-Phase2Task_Transition4: @ 811B578
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811B5A8 @ =gUnknown_083FD7D8
- ldr r2, _0811B5AC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811B58A:
- 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 _0811B58A
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811B5A8: .4byte gUnknown_083FD7D8
-_0811B5AC: .4byte gTasks
- thumb_func_end Phase2Task_Transition4
-
- thumb_func_start sub_811B5B0
-sub_811B5B0: @ 811B5B0
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- add r0, sp, 0x4
- add r1, sp, 0x8
- bl sub_811D6A8
- ldr r0, _0811B5F0 @ =gUnknown_083FC108
- ldr r1, [sp, 0x8]
- movs r2, 0x20
- bl CpuSet
- movs r0, 0
- str r0, [sp]
- ldr r1, [sp, 0x4]
- ldr r2, _0811B5F4 @ =0x05000200
- mov r0, sp
- bl CpuSet
- ldr r0, _0811B5F8 @ =gFieldEffectObjectPalette10
- 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
-_0811B5F0: .4byte gUnknown_083FC108
-_0811B5F4: .4byte 0x05000200
-_0811B5F8: .4byte gFieldEffectObjectPalette10
- thumb_func_end sub_811B5B0
-
- thumb_func_start sub_811B5FC
-sub_811B5FC: @ 811B5FC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- adds r7, r0, 0
- ldr r1, _0811B67C @ =gUnknown_083FD7E4
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- add r4, sp, 0x4
- ldr r1, _0811B680 @ =gUnknown_083FD7E8
- 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, _0811B684 @ =gUnknown_0202FF84
-_0811B62A:
- 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 _0811B62A
- 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
-_0811B67C: .4byte gUnknown_083FD7E4
-_0811B680: .4byte gUnknown_083FD7E8
-_0811B684: .4byte gUnknown_0202FF84
- thumb_func_end sub_811B5FC
-
- thumb_func_start sub_811B688
-sub_811B688: @ 811B688
- push {lr}
- movs r0, 0x2D
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _0811B6A8
- bl sub_811D6D4
- ldr r0, _0811B6B0 @ =Phase2Task_Transition4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0811B6A8:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0811B6B0: .4byte Phase2Task_Transition4
- thumb_func_end sub_811B688
-
- thumb_func_start FldEff_Pokeball
-FldEff_Pokeball: @ 811B6B4
- push {r4,r5,lr}
- ldr r0, _0811B710 @ =gSpriteTemplate_83FD98C
- ldr r5, _0811B714 @ =gUnknown_0202FF84
- 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, _0811B718 @ =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, _0811B71C @ =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
-_0811B710: .4byte gSpriteTemplate_83FD98C
-_0811B714: .4byte gUnknown_0202FF84
-_0811B718: .4byte gSprites
-_0811B71C: .4byte 0x0000ffff
- thumb_func_end FldEff_Pokeball
-
- thumb_func_start sub_811B720
-sub_811B720: @ 811B720
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r1, _0811B740 @ =gUnknown_083FD7F2
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- ldrh r1, [r4, 0x30]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0811B744
- subs r0, r1, 0x1
- strh r0, [r4, 0x30]
- b _0811B7D6
- .align 2, 0
-_0811B740: .4byte gUnknown_083FD7F2
-_0811B744:
- ldrh r0, [r4, 0x20]
- lsls r1, r0, 16
- lsrs r0, r1, 16
- cmp r0, 0xF0
- bhi _0811B7B2
- asrs r0, r1, 19
- lsls r0, 16
- ldrh r1, [r4, 0x22]
- lsls r1, 16
- asrs r1, 19
- lsls r1, 16
- lsrs r1, 16
- lsrs r2, r0, 16
- asrs r5, r0, 16
- movs r3, 0x32
- ldrsh r0, [r4, r3]
- cmp r5, r0
- beq _0811B7B2
- strh r2, [r4, 0x32]
- ldr r0, _0811B7E0 @ =REG_BG0CNT
- ldrh r2, [r0]
- lsrs r2, 8
- movs r0, 0x1F
- ands r2, r0
- lsls r2, 11
- movs r0, 0xC0
- lsls r0, 19
- adds r2, r0
- lsls r1, 16
- asrs r1, 16
- subs r0, r1, 0x2
- lsls r0, 5
- adds r0, r5
- lsls r0, 1
- adds r0, r2
- ldr r6, _0811B7E4 @ =0x0000f001
- adds r3, r6, 0
- strh r3, [r0]
- subs r0, r1, 0x1
- lsls r0, 5
- adds r0, r5
- lsls r0, 1
- adds r0, r2
- strh r3, [r0]
- lsls r0, r1, 5
- adds r0, r5
- lsls r0, 1
- adds r0, r2
- strh r3, [r0]
- adds r1, 0x1
- lsls r1, 5
- adds r1, r5
- lsls r1, 1
- adds r1, r2
- strh r3, [r1]
-_0811B7B2:
- 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 _0811B7D6
- adds r0, r4, 0
- movs r1, 0x2D
- bl FieldEffectStop
-_0811B7D6:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0811B7E0: .4byte REG_BG0CNT
-_0811B7E4: .4byte 0x0000f001
- thumb_func_end sub_811B720
-
- thumb_func_start Phase2Task_Transition5
-Phase2Task_Transition5: @ 811B7E8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811B818 @ =gUnknown_083FD7F8
- ldr r2, _0811B81C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811B7FA:
- 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 _0811B7FA
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811B818: .4byte gUnknown_083FD7F8
-_0811B81C: .4byte gTasks
- thumb_func_end Phase2Task_Transition5
-
- thumb_func_start sub_811B820
-sub_811B820: @ 811B820
- push {r4,lr}
- adds r4, r0, 0
- bl sub_811D658
- bl dp12_8087EA4
- ldr r1, _0811B870 @ =0x0200c000
- movs r0, 0
- strh r0, [r1, 0x2]
- movs r0, 0x3F
- strh r0, [r1, 0x4]
- ldr r0, _0811B874 @ =0x0000f0f1
- strh r0, [r1, 0x6]
- movs r0, 0xA0
- strh r0, [r1, 0x8]
- movs r1, 0
- ldr r3, _0811B878 @ =gUnknown_03005560
- ldr r2, _0811B87C @ =0x0000f3f4
-_0811B844:
- 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 _0811B844
- ldr r0, _0811B880 @ =sub_811BC2C
- bl SetVBlankCallback
- ldr r1, _0811B870 @ =0x0200c000
- 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
-_0811B870: .4byte 0x0200c000
-_0811B874: .4byte 0x0000f0f1
-_0811B878: .4byte gUnknown_03005560
-_0811B87C: .4byte 0x0000f3f4
-_0811B880: .4byte sub_811BC2C
- thumb_func_end sub_811B820
-
- thumb_func_start sub_811B884
-sub_811B884: @ 811B884
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- ldr r4, _0811B904 @ =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, 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_811D8FC
- ldr r5, _0811B908 @ =gUnknown_03004DE0
-_0811B8B0:
- movs r3, 0x2A
- ldrsh r2, [r4, r3]
- lsls r2, 1
- adds r2, r5
- ldrh r0, [r4, 0x28]
- adds r0, 0x1
- movs r3, 0xF0
- lsls r3, 7
- adds r1, r3, 0
- 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 _0811B8B0
- ldr r2, _0811B904 @ =0x0200c000
- ldrh r0, [r2, 0x2C]
- adds r0, 0x10
- strh r0, [r2, 0x2C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xEF
- ble _0811B8F2
- movs r0, 0
- strh r0, [r2, 0x2E]
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_0811B8F2:
- 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
-_0811B904: .4byte 0x0200c000
-_0811B908: .4byte gUnknown_03004DE0
- thumb_func_end sub_811B884
-
- thumb_func_start sub_811B90C
-sub_811B90C: @ 811B90C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- adds r7, r0, 0
- add r1, sp, 0xC
- movs r0, 0
- strb r0, [r1]
- ldr r4, _0811B988 @ =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, 0xF0
- bl sub_811D8FC
- adds r6, r4, 0
- ldr r5, _0811B98C @ =gUnknown_03004DE0
- mov r8, r5
- add r5, sp, 0xC
-_0811B946:
- movs r1, 0x78
- ldrh r0, [r4, 0x28]
- adds r0, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0x4F
- ble _0811B95C
- ldrh r1, [r4, 0x28]
- movs r3, 0xF0
-_0811B95C:
- movs r0, 0x2A
- ldrsh r2, [r4, r0]
- lsls r2, 1
- add r2, r8
- lsls r1, 16
- asrs r1, 8
- lsls r0, r3, 16
- asrs r3, r0, 16
- orrs r3, r1
- strh r3, [r2]
- ldrb r0, [r5]
- cmp r0, 0
- bne _0811B990
- adds r0, r4, 0
- adds r0, 0x24
- movs r1, 0x1
- movs r2, 0x1
- bl sub_811D978
- strb r0, [r5]
- b _0811B946
- .align 2, 0
-_0811B988: .4byte 0x0200c000
-_0811B98C: .4byte gUnknown_03004DE0
-_0811B990:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x8
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r1, r0, 16
- cmp r1, 0x9F
- ble _0811B9AA
- movs r0, 0xF0
- strh r0, [r4, 0x2C]
- ldrh r0, [r7, 0x8]
- adds r0, 0x1
- strh r0, [r7, 0x8]
- b _0811B9D0
-_0811B9AA:
- movs r2, 0x2A
- ldrsh r0, [r4, r2]
- cmp r0, r1
- bge _0811B9D0
- ldr r4, _0811B9E8 @ =gUnknown_03004DE0
- ldr r2, _0811B9EC @ =0x0200c000
-_0811B9B6:
- ldrh r0, [r2, 0x2A]
- adds 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 r5, 0x2E
- ldrsh r0, [r2, r5]
- cmp r1, r0
- blt _0811B9B6
-_0811B9D0:
- ldrb r0, [r6]
- adds r0, 0x1
- ldrb r1, [r6]
- strb r0, [r6]
- movs r0, 0
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B9E8: .4byte gUnknown_03004DE0
-_0811B9EC: .4byte 0x0200c000
- thumb_func_end sub_811B90C
-
- thumb_func_start sub_811B9F0
-sub_811B9F0: @ 811B9F0
+ thumb_func_start Phase2_Transition5_Func4
+Phase2_Transition5_Func4: @ 811B9F0
push {r4-r6,lr}
sub sp, 0xC
adds r6, r0, 0
@@ -1043,10 +73,10 @@ _0811BA56:
.align 2, 0
_0811BA68: .4byte 0x0200c000
_0811BA6C: .4byte gUnknown_03004DE0
- thumb_func_end sub_811B9F0
+ thumb_func_end Phase2_Transition5_Func4
- thumb_func_start sub_811BA70
-sub_811BA70: @ 811BA70
+ thumb_func_start Phase2_Transition5_Func5
+Phase2_Transition5_Func5: @ 811BA70
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -1168,10 +198,10 @@ _0811BB3A:
.align 2, 0
_0811BB58: .4byte gUnknown_03004DE0
_0811BB5C: .4byte 0x0200c000
- thumb_func_end sub_811BA70
+ thumb_func_end Phase2_Transition5_Func5
- thumb_func_start sub_811BB60
-sub_811BB60: @ 811BB60
+ thumb_func_start Phase2_Transition5_Func6
+Phase2_Transition5_Func6: @ 811BB60
push {r4-r6,lr}
sub sp, 0xC
adds r6, r0, 0
@@ -1242,10 +272,10 @@ _0811BBD2:
.align 2, 0
_0811BBE4: .4byte 0x0200c000
_0811BBE8: .4byte gUnknown_03004DE0
- thumb_func_end sub_811BB60
+ thumb_func_end Phase2_Transition5_Func6
- thumb_func_start sub_811BBEC
-sub_811BBEC: @ 811BBEC
+ thumb_func_start Phase2_Transition5_Func7
+Phase2_Transition5_Func7: @ 811BBEC
push {lr}
ldr r1, _0811BC1C @ =0x040000b0
ldrh r2, [r1, 0xA]
@@ -1271,10 +301,10 @@ _0811BC1C: .4byte 0x040000b0
_0811BC20: .4byte 0x0000c5ff
_0811BC24: .4byte 0x00007fff
_0811BC28: .4byte Phase2Task_Transition5
- thumb_func_end sub_811BBEC
+ thumb_func_end Phase2_Transition5_Func7
- thumb_func_start sub_811BC2C
-sub_811BC2C: @ 811BC2C
+ thumb_func_start VBlankCB_Phase2_Transition5
+VBlankCB_Phase2_Transition5: @ 811BC2C
push {r4,lr}
ldr r4, _0811BC94 @ =0x040000b0
ldrh r1, [r4, 0xA]
@@ -1337,7 +367,7 @@ _0811BCAC: .4byte 0x800000a0
_0811BCB0: .4byte REG_WININ
_0811BCB4: .4byte REG_WIN0H
_0811BCB8: .4byte 0xa2400001
- thumb_func_end sub_811BC2C
+ thumb_func_end VBlankCB_Phase2_Transition5
thumb_func_start Phase2Task_Transition6
Phase2Task_Transition6: @ 811BCBC
diff --git a/data/battle_transition.s b/data/battle_transition.s
index 975de2997..d71fa3594 100644
--- a/data/battle_transition.s
+++ b/data/battle_transition.s
@@ -108,10 +108,10 @@ sPhase2_Transition3_Funcs:: @ 83FD7C0
.4byte Phase2_Transition3_Func6
.align 2
-gUnknown_083FD7D8:: @ 83FD7D8
- .4byte sub_811B5B0
- .4byte sub_811B5FC
- .4byte sub_811B688
+sPhase2_Transition4_Funcs:: @ 83FD7D8
+ .4byte Phase2_Transition4_Func1
+ .4byte Phase2_Transition4_Func2
+ .4byte Phase2_Transition4_Func3
.align 1
gUnknown_083FD7E4:: @ 83FD7E4
@@ -132,14 +132,14 @@ gUnknown_083FD7F2:: @ 83FD7F2
.2byte -8
.align 2
-gUnknown_083FD7F8:: @ 83FD7F8
- .4byte sub_811B820
- .4byte sub_811B884
- .4byte sub_811B90C
- .4byte sub_811B9F0
- .4byte sub_811BA70
- .4byte sub_811BB60
- .4byte sub_811BBEC
+sPhase2_Transition5_Funcs:: @ 83FD7F8
+ .4byte Phase2_Transition5_Func1
+ .4byte Phase2_Transition5_Func2
+ .4byte Phase2_Transition5_Func3
+ .4byte Phase2_Transition5_Func4
+ .4byte Phase2_Transition5_Func5
+ .4byte Phase2_Transition5_Func6
+ .4byte Phase2_Transition5_Func7
.align 2
gUnknown_083FD814:: @ 83FD814
diff --git a/src/battle_transition.c b/src/battle_transition.c
index ed6bdf387..fb20853a5 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -4,6 +4,9 @@
#include "task.h"
#include "palette.h"
#include "trig.h"
+#include "field_effect.h"
+#include "rng.h"
+#include "sprite.h"
void sub_807DE10(void);
void dp12_8087EA4(void);
@@ -15,6 +18,8 @@ extern const TransitionState sPhase2_Transition0_Funcs[];
extern const TransitionState sPhase2_Transition1_Funcs[];
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 TaskFunc sPhase1_Tasks[];
extern const TaskFunc sPhase2_Tasks[];
@@ -40,6 +45,17 @@ struct TransitionData
s16 field_14;
s16 field_16;
s16 field_18;
+ s16 field_1A;
+ s16 field_1C;
+ s16 field_1E;
+ s16 field_20;
+ s16 field_22;
+ s16 field_24;
+ s16 field_26;
+ s16 field_28;
+ s16 field_2A;
+ s16 field_2C;
+ s16 field_2E;
};
#define TRANSITION_STRUCT (*(struct TransitionData *) (ewram + 0xC000))
@@ -55,11 +71,17 @@ 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 VBlankCB_Phase2_Transition3(void);
+void VBlankCB0_Phase2_Transition3(void);
+void VBlankCB1_Phase2_Transition3(void);
+void VBlankCB_Phase2_Transition5(void);
void VBlankCB_BattleTransition(void);
void sub_811D6E8(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5);
void sub_811D6A8(u16** a0, u16** a1);
+void sub_811D764(u16* a0, s16 a1, s16 a2, s16 a3);
+void sub_811D6D4(void);
+void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6);
+bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2);
void sub_811AABC(u8 transitionID)
{
@@ -353,7 +375,7 @@ bool8 Phase2_Transition3_Func1(struct Task* task)
gUnknown_03005560[i] = 240;
}
- SetVBlankCallback(VBlankCB_Phase2_Transition3);
+ SetVBlankCallback(VBlankCB0_Phase2_Transition3);
sub_811D6A8(&dst1, & dst2);
CpuFill16(0, dst1, 0x800);
@@ -386,3 +408,416 @@ bool8 Phase2_Transition3_Func2(struct Task* task)
task->tState++;
return 1;
}
+
+bool8 Phase2_Transition3_Func3(struct Task* task)
+{
+ TRANSITION_STRUCT.field_0 = 0;
+ if (task->data[3] == 0 || --task->data[3] == 0)
+ {
+ task->data[2]++;
+ task->data[3] = 2;
+ }
+ TRANSITION_STRUCT.field_10 = (task->data[1] << 8) | task->data[2];
+ if (task->data[2] > 15)
+ task->tState++;
+ task->data[4] += 8;
+ task->data[5] -= 256;
+
+ sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160);
+
+ TRANSITION_STRUCT.field_0++;
+ return 0;
+}
+
+bool8 Phase2_Transition3_Func4(struct Task* task)
+{
+ TRANSITION_STRUCT.field_0 = 0;
+ if (task->data[3] == 0 || --task->data[3] == 0)
+ {
+ task->data[1]--;
+ task->data[3] = 2;
+ }
+ TRANSITION_STRUCT.field_10 = (task->data[1] << 8) | task->data[2];
+ if (task->data[1] == 0)
+ task->tState++;
+ task->data[4] += 8;
+ task->data[5] -= 256;
+
+ sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160);
+
+ TRANSITION_STRUCT.field_0++;
+ return 0;
+}
+
+bool8 Phase2_Transition3_Func5(struct Task* task)
+{
+ TRANSITION_STRUCT.field_0 = 0;
+ task->data[4] += 8;
+ task->data[5] -= 256;
+
+ sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160);
+
+ if (task->data[5] <= 0)
+ {
+ task->tState++;
+ task->data[1] = 160;
+ task->data[2] = 256;
+ task->data[3] = 0;
+ }
+
+ TRANSITION_STRUCT.field_0++;
+ return 0;
+}
+
+bool8 Phase2_Transition3_Func6(struct Task* task)
+{
+ TRANSITION_STRUCT.field_0 = 0;
+ if (task->data[2] < 1024)
+ task->data[2] += 128;
+ if (task->data[1] != 0)
+ {
+ task->data[1] -= (task->data[2] >> 8);
+ if (task->data[1] < 0)
+ task->data[1] = 0;
+ }
+ sub_811D764(gUnknown_03004DE0[0], 120, 80, task->data[1]);
+ if (task->data[1] == 0)
+ {
+ DmaStop(0);
+ sub_811D6D4();
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition3));
+ }
+ if (task->data[3] == 0)
+ {
+ task->data[3]++;
+ SetVBlankCallback(VBlankCB1_Phase2_Transition3);
+ }
+
+ TRANSITION_STRUCT.field_0++;
+ return 0;
+}
+
+static void Transition3_Vblank(void)
+{
+ DmaStop(0);
+ VBlankCB_BattleTransition();
+ if (TRANSITION_STRUCT.field_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_BLDCNT = TRANSITION_STRUCT.field_E;
+ REG_BLDALPHA = TRANSITION_STRUCT.field_10;
+}
+
+void VBlankCB0_Phase2_Transition3(void)
+{
+ Transition3_Vblank();
+ DmaSet(0, gUnknown_03005560, &REG_BG0HOFS, 0xA2400001);
+}
+
+void VBlankCB1_Phase2_Transition3(void)
+{
+ Transition3_Vblank();
+ DmaSet(0, gUnknown_03005560, &REG_WIN0H, 0xA2400001);
+}
+
+void Phase2Task_Transition4(u8 taskID)
+{
+ while (sPhase2_Transition4_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+extern const u8 gUnknown_083FC108[];
+
+bool8 Phase2_Transition4_Func1(struct Task* task)
+{
+ u16 *dst1, *dst2;
+
+ sub_811D6A8(&dst1, &dst2);
+ CpuSet(gUnknown_083FC108, dst2, 0x20);
+ CpuFill32(0, dst1, 0x800);
+ LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
+
+ task->tState++;
+ return 0;
+}
+
+extern const s16 gUnknown_083FD7E4[2];
+extern const s16 gUnknown_083FD7F2[2];
+extern const s16 gUnknown_083FD7E8[5];
+
+bool8 Phase2_Transition4_Func2(struct Task* task)
+{
+ s16 i;
+ s16 rand;
+ s16 arr0[2];
+ s16 arr1[5];
+
+ memcpy(arr0, gUnknown_083FD7E4, sizeof(gUnknown_083FD7E4));
+ memcpy(arr1, gUnknown_083FD7E8, sizeof(gUnknown_083FD7E8));
+ rand = Random() & 1;
+ for (i = 0; i <= 4; i++, rand ^= 1)
+ {
+ gUnknown_0202FF84[0] = arr0[rand]; // x
+ gUnknown_0202FF84[1] = (i * 32) + 16; // y
+ gUnknown_0202FF84[2] = rand;
+ gUnknown_0202FF84[3] = arr1[i];
+ FieldEffectStart(FLDEFF_POKEBALL);
+ }
+
+ task->tState++;
+ return 0;
+}
+
+bool8 Phase2_Transition4_Func3(struct Task* task)
+{
+ if (!FieldEffectActiveListContains(FLDEFF_POKEBALL))
+ {
+ sub_811D6D4();
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition4));
+ }
+ return 0;
+}
+
+extern const struct SpriteTemplate gSpriteTemplate_83FD98C;
+
+bool8 FldEff_Pokeball(void)
+{
+ u8 spriteID = CreateSpriteAtEnd(&gSpriteTemplate_83FD98C, gUnknown_0202FF84[0], gUnknown_0202FF84[1], 0);
+ gSprites[spriteID].oam.priority = 0;
+ gSprites[spriteID].oam.affineMode = 1;
+ gSprites[spriteID].data0 = gUnknown_0202FF84[2];
+ gSprites[spriteID].data1 = gUnknown_0202FF84[3];
+ gSprites[spriteID].data2 = -1;
+ InitSpriteAffineAnim(&gSprites[spriteID]);
+ StartSpriteAffineAnim(&gSprites[spriteID], gUnknown_0202FF84[2]);
+ return 0;
+}
+
+#ifdef NONMATCHING
+void sub_811B720(struct Sprite* sprite)
+{
+ s16 arr0[2];
+
+ memcpy(arr0, gUnknown_083FD7F2, sizeof(gUnknown_083FD7F2));
+ if (sprite->data1 != 0)
+ sprite->data1--;
+ else
+ {
+ if (sprite->pos1.x < 240)
+ {
+ s32 posY = sprite->pos1.y >> 3;
+ s32 posX = sprite->pos1.x >> 3;
+ if ((posX >> 3) != sprite->data2)
+ {
+ u32 var;
+
+ sprite->data2 = (posX);
+ var = (((REG_BG0CNT >> 8) & 0x1F) << 10);
+
+ vram[MULTI_DIM_ARR(posY - 2, 32, posX)] = 0xF001;
+ vram[MULTI_DIM_ARR(posY - 1, 32, posX)] = 0xF001;
+ vram[MULTI_DIM_ARR(posY - 0, 32, posX)] = 0xF001;
+ vram[MULTI_DIM_ARR(posY + 0, 32, posX)] = 0xF001;
+ }
+ }
+ sprite->pos1.x += arr0[sprite->data0];
+ if (sprite->pos1.x + 15 > 270)
+ FieldEffectStop(sprite, FLDEFF_POKEBALL);
+ }
+}
+#else
+__attribute__((naked))
+void sub_811B720(struct Sprite* sprite)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ sub sp, 0x4\n\
+ adds r4, r0, 0\n\
+ ldr r1, _0811B740 @ =gUnknown_083FD7F2\n\
+ mov r0, sp\n\
+ movs r2, 0x4\n\
+ bl memcpy\n\
+ ldrh r1, [r4, 0x30]\n\
+ movs r2, 0x30\n\
+ ldrsh r0, [r4, r2]\n\
+ cmp r0, 0\n\
+ beq _0811B744\n\
+ subs r0, r1, 0x1\n\
+ strh r0, [r4, 0x30]\n\
+ b _0811B7D6\n\
+ .align 2, 0\n\
+_0811B740: .4byte gUnknown_083FD7F2\n\
+_0811B744:\n\
+ ldrh r0, [r4, 0x20]\n\
+ lsls r1, r0, 16\n\
+ lsrs r0, r1, 16\n\
+ cmp r0, 0xF0\n\
+ bhi _0811B7B2\n\
+ asrs r0, r1, 19\n\
+ lsls r0, 16\n\
+ ldrh r1, [r4, 0x22]\n\
+ lsls r1, 16\n\
+ asrs r1, 19\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ lsrs r2, r0, 16\n\
+ asrs r5, r0, 16\n\
+ movs r3, 0x32\n\
+ ldrsh r0, [r4, r3]\n\
+ cmp r5, r0\n\
+ beq _0811B7B2\n\
+ strh r2, [r4, 0x32]\n\
+ ldr r0, _0811B7E0 @ =REG_BG0CNT\n\
+ ldrh r2, [r0]\n\
+ lsrs r2, 8\n\
+ movs r0, 0x1F\n\
+ ands r2, r0\n\
+ lsls r2, 11\n\
+ movs r0, 0xC0\n\
+ lsls r0, 19\n\
+ adds r2, r0\n\
+ lsls r1, 16\n\
+ asrs r1, 16\n\
+ subs r0, r1, 0x2\n\
+ lsls r0, 5\n\
+ adds r0, r5\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ ldr r6, _0811B7E4 @ =0x0000f001\n\
+ adds r3, r6, 0\n\
+ strh r3, [r0]\n\
+ subs r0, r1, 0x1\n\
+ lsls r0, 5\n\
+ adds r0, r5\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ strh r3, [r0]\n\
+ lsls r0, r1, 5\n\
+ adds r0, r5\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ strh r3, [r0]\n\
+ adds r1, 0x1\n\
+ lsls r1, 5\n\
+ adds r1, r5\n\
+ lsls r1, 1\n\
+ adds r1, r2\n\
+ strh r3, [r1]\n\
+_0811B7B2:\n\
+ movs r1, 0x2E\n\
+ ldrsh r0, [r4, r1]\n\
+ lsls r0, 1\n\
+ add r0, sp\n\
+ ldrh r0, [r0]\n\
+ ldrh r2, [r4, 0x20]\n\
+ adds r0, r2\n\
+ strh r0, [r4, 0x20]\n\
+ adds r0, 0xF\n\
+ lsls r0, 16\n\
+ movs r1, 0x87\n\
+ lsls r1, 17\n\
+ cmp r0, r1\n\
+ bls _0811B7D6\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x2D\n\
+ bl FieldEffectStop\n\
+_0811B7D6:\n\
+ add sp, 0x4\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0811B7E0: .4byte 0x04000008\n\
+_0811B7E4: .4byte 0x0000f001\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+void Phase2Task_Transition5(u8 taskID)
+{
+ while (sPhase2_Transition5_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+bool8 Phase2_Transition5_Func1(struct Task* task)
+{
+ u16 i;
+
+ sub_811D658();
+ dp12_8087EA4();
+
+ TRANSITION_STRUCT.field_2 = 0;
+ TRANSITION_STRUCT.field_4 = 63;
+ TRANSITION_STRUCT.field_6 = -3855;
+ TRANSITION_STRUCT.field_8 = 160;
+
+ for (i = 0; i < 160; i++)
+ {
+ gUnknown_03005560[i] = 0xF3F4;
+ }
+
+ SetVBlankCallback(VBlankCB_Phase2_Transition5);
+ TRANSITION_STRUCT.field_2C = 120;
+
+ task->tState++;
+ return 1;
+}
+
+bool8 Phase2_Transition5_Func2(struct Task* task)
+{
+ TRANSITION_STRUCT.field_0 = 0;
+
+ sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, TRANSITION_STRUCT.field_2C, -1, 1, 1);
+ do
+ {
+ gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (TRANSITION_STRUCT.field_28 + 1) | 0x7800;
+ } while (!sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1));
+
+ TRANSITION_STRUCT.field_2C += 16;
+ if (TRANSITION_STRUCT.field_2C >= 240)
+ {
+ TRANSITION_STRUCT.field_2E = 0;
+ task->tState++;
+ }
+
+ TRANSITION_STRUCT.field_0++;
+ return 0;
+}
+
+bool8 Phase2_Transition5_Func3(struct Task* task)
+{
+ s16 r1, r3;
+ vu8 var = 0;
+
+ TRANSITION_STRUCT.field_0 = 0;
+
+ sub_811D8FC(&TRANSITION_STRUCT.field_24, 120, 80, 240, TRANSITION_STRUCT.field_2E, 1, 1);
+
+ while (1)
+ {
+ r1 = 120, r3 = TRANSITION_STRUCT.field_28 + 1;
+ if (TRANSITION_STRUCT.field_2E >= 80)
+ r1 = TRANSITION_STRUCT.field_28, r3 = 240;
+ gUnknown_03004DE0[0][TRANSITION_STRUCT.field_2A] = (r3) | (r1 << 8);
+ if (var != 0)
+ break;
+ var = sub_811D978(&TRANSITION_STRUCT.field_24, 1, 1);
+ }
+
+ TRANSITION_STRUCT.field_2E += 8;
+ if (TRANSITION_STRUCT.field_2E >= 160)
+ {
+ TRANSITION_STRUCT.field_2C = 240;
+ task->tState++;
+ }
+ else
+ {
+ while (TRANSITION_STRUCT.field_2A < TRANSITION_STRUCT.field_2E)
+ {
+ gUnknown_03004DE0[0][++TRANSITION_STRUCT.field_2A] = (r3) | (r1 << 8);
+ }
+ }
+
+ TRANSITION_STRUCT.field_0++;
+ return 0;
+}