diff options
author | DizzyEggg <jajkodizzy@wp.pl> | 2017-08-19 17:46:21 +0200 |
---|---|---|
committer | DizzyEggg <jajkodizzy@wp.pl> | 2017-08-19 17:46:21 +0200 |
commit | ba11084ec89d5480eeba516d78bb6980d8e12ee4 (patch) | |
tree | cc43d53218605b4bc2f299206bf68035893e72e0 | |
parent | 0b5ecd586b68cf0415328e384316c23574a742df (diff) |
crazy vram shaenigans
-rw-r--r-- | asm/battle_transition.s | 1000 | ||||
-rw-r--r-- | data/battle_transition.s | 24 | ||||
-rw-r--r-- | src/battle_transition.c | 439 |
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, ®_BG0HOFS, 0xA2400001); +} + +void VBlankCB1_Phase2_Transition3(void) +{ + Transition3_Vblank(); + DmaSet(0, gUnknown_03005560, ®_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; +} |