diff options
author | drifloony <drifloony@users.noreply.github.com> | 2017-07-14 08:14:10 -0700 |
---|---|---|
committer | drifloony <drifloony@users.noreply.github.com> | 2017-07-14 15:50:29 -0700 |
commit | 1cc8e50292621ab30332d192782fd8a1e855ea51 (patch) | |
tree | 9a7c1af5e16fa464793ab6d4bd17212facee5b2c | |
parent | a0e590b739a2bdd8e76c004ae60662bd81d33ca9 (diff) |
decompile field_screen_effect and unknown_task
-rw-r--r-- | asm/field_screen_effect.s | 789 | ||||
-rw-r--r-- | asm/unknown_task.s | 645 | ||||
-rw-r--r-- | data/rom_8080874.s | 18 | ||||
-rw-r--r-- | include/rom4.h | 4 | ||||
-rw-r--r-- | ld_script.txt | 6 | ||||
-rw-r--r-- | src/field_screen_effect.c | 339 | ||||
-rw-r--r-- | src/unknown_task.c | 255 |
7 files changed, 599 insertions, 1457 deletions
diff --git a/asm/field_screen_effect.s b/asm/field_screen_effect.s deleted file mode 100644 index 4fbfae1a2..000000000 --- a/asm/field_screen_effect.s +++ /dev/null @@ -1,789 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_808136C -sub_808136C: @ 808136C - push {lr} - cmp r1, 0xA0 - bhi _08081394 - cmp r2, 0 - bge _08081378 - movs r2, 0 -_08081378: - cmp r2, 0xFF - ble _0808137E - movs r2, 0xFF -_0808137E: - cmp r3, 0 - bge _08081384 - movs r3, 0 -_08081384: - cmp r3, 0xFF - ble _0808138A - movs r3, 0xFF -_0808138A: - lsls r1, 1 - adds r1, r0 - lsls r0, r2, 8 - orrs r0, r3 - strh r0, [r1] -_08081394: - pop {r0} - bx r0 - thumb_func_end sub_808136C - - thumb_func_start sub_8081398 -sub_8081398: @ 8081398 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - str r0, [sp] - mov r10, r1 - mov r9, r2 - adds r6, r3, 0 - mov r8, r6 - movs r7, 0 - cmp r6, 0 - blt _08081414 -_080813B4: - mov r0, r9 - subs r1, r0, r7 - mov r0, r10 - subs r4, r0, r6 - adds r5, r0, r6 - ldr r0, [sp] - adds r2, r4, 0 - adds r3, r5, 0 - bl sub_808136C - mov r0, r9 - adds r1, r0, r7 - ldr r0, [sp] - adds r2, r4, 0 - adds r3, r5, 0 - bl sub_808136C - mov r0, r9 - subs r1, r0, r6 - mov r0, r10 - subs r4, r0, r7 - adds r5, r0, r7 - ldr r0, [sp] - adds r2, r4, 0 - adds r3, r5, 0 - bl sub_808136C - mov r0, r9 - adds r1, r0, r6 - ldr r0, [sp] - adds r2, r4, 0 - adds r3, r5, 0 - bl sub_808136C - mov r1, r8 - adds r1, 0x1 - lsls r0, r7, 1 - subs r1, r0 - mov r8, r1 - adds r7, 0x1 - cmp r1, 0 - bge _08081410 - subs r1, r6, 0x1 - lsls r0, r1, 1 - add r8, r0 - adds r6, r1, 0 -_08081410: - cmp r6, r7 - bge _080813B4 -_08081414: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8081398 - - thumb_func_start sub_8081424 -sub_8081424: @ 8081424 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08081448 @ =gTasks + 0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _08081480 - cmp r0, 0x1 - bgt _0808144C - cmp r0, 0 - beq _08081452 - b _080814E2 - .align 2, 0 -_08081448: .4byte gTasks + 0x8 -_0808144C: - cmp r0, 0x2 - beq _080814D8 - b _080814E2 -_08081452: - ldr r0, _08081478 @ =gUnknown_03004DC0 - ldrb r1, [r0, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - ldr r1, _0808147C @ =gUnknown_03004DE0 - adds r0, r1 - movs r2, 0x2 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - movs r5, 0x6 - ldrsh r3, [r4, r5] - bl sub_8081398 - movs r0, 0x1 - strh r0, [r4] - b _080814E2 - .align 2, 0 -_08081478: .4byte gUnknown_03004DC0 -_0808147C: .4byte gUnknown_03004DE0 -_08081480: - ldr r0, _080814C8 @ =gUnknown_03004DC0 - ldrb r1, [r0, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - ldr r1, _080814CC @ =gUnknown_03004DE0 - adds r0, r1 - movs r6, 0x2 - ldrsh r1, [r4, r6] - movs r3, 0x4 - ldrsh r2, [r4, r3] - movs r6, 0x6 - ldrsh r3, [r4, r6] - bl sub_8081398 - movs r0, 0 - strh r0, [r4] - ldrh r0, [r4, 0xA] - ldrh r1, [r4, 0x6] - adds r0, r1 - strh r0, [r4, 0x6] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x8 - ldrsh r1, [r4, r2] - cmp r0, r1 - ble _080814E2 - movs r3, 0xC - ldrsh r0, [r4, r3] - cmp r0, 0x1 - bne _080814D0 - bl remove_some_task - movs r0, 0x2 - strh r0, [r4] - b _080814E2 - .align 2, 0 -_080814C8: .4byte gUnknown_03004DC0 -_080814CC: .4byte gUnknown_03004DE0 -_080814D0: - adds r0, r5, 0 - bl DestroyTask - b _080814E2 -_080814D8: - bl dp12_8087EA4 - adds r0, r5, 0 - bl DestroyTask -_080814E2: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8081424 - - thumb_func_start sub_80814E8 -sub_80814E8: @ 80814E8 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808150C @ =sub_8081424 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08081504 - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask -_08081504: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808150C: .4byte sub_8081424 - thumb_func_end sub_80814E8 - - thumb_func_start sub_8081510 -sub_8081510: @ 8081510 - push {r4,lr} - ldr r4, _08081530 @ =sub_80814E8 - adds r0, r4, 0 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08081528 - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask -_08081528: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08081530: .4byte sub_80814E8 - thumb_func_end sub_8081510 - - thumb_func_start sub_8081534 -sub_8081534: @ 8081534 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - mov r8, r0 - mov r9, r1 - adds r5, r2, 0 - adds r4, r3, 0 - ldr r6, [sp, 0x1C] - ldr r0, [sp, 0x20] - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08081578 @ =sub_8081424 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _0808157C @ =gTasks + 0x8 - adds r1, r0, r1 - strh r5, [r1, 0x6] - strh r4, [r1, 0x8] - mov r0, r8 - strh r0, [r1, 0x2] - mov r0, r9 - strh r0, [r1, 0x4] - strh r6, [r1, 0xC] - cmp r5, r4 - bge _08081580 - strh r7, [r1, 0xA] - b _08081584 - .align 2, 0 -_08081578: .4byte sub_8081424 -_0808157C: .4byte gTasks + 0x8 -_08081580: - negs r0, r7 - strh r0, [r1, 0xA] -_08081584: - adds r0, r2, 0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8081534 - - thumb_func_start sub_8081594 -sub_8081594: @ 8081594 - push {r4,r5,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - bl sav1_get_flash_used_on_map - lsls r0, 24 - lsrs r0, 24 - movs r5, 0 - cmp r4, 0 - bne _080815AE - movs r5, 0x1 -_080815AE: - ldr r1, _080815DC @ =gUnknown_0839ACDC - lsls r0, 1 - adds r0, r1 - ldrh r2, [r0] - lsls r0, r4, 1 - adds r0, r1 - ldrh r3, [r0] - str r5, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r0, 0x78 - movs r1, 0x50 - bl sub_8081534 - bl sub_8081510 - bl ScriptContext2_Enable - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080815DC: .4byte gUnknown_0839ACDC - thumb_func_end sub_8081594 - - thumb_func_start sub_80815E0 -sub_80815E0: @ 80815E0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _0808160E - ldr r4, _08081614 @ =gUnknown_03004DE0 - ldr r1, _08081618 @ =gUnknown_0839ACDC - lsls r0, 1 - adds r0, r1 - ldrh r3, [r0] - adds r0, r4, 0 - movs r1, 0x78 - movs r2, 0x50 - bl sub_8081398 - movs r0, 0xF0 - lsls r0, 3 - adds r1, r4, r0 - movs r2, 0xF0 - lsls r2, 1 - adds r0, r4, 0 - bl CpuFastSet -_0808160E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08081614: .4byte gUnknown_03004DE0 -_08081618: .4byte gUnknown_0839ACDC - thumb_func_end sub_80815E0 - - thumb_func_start sub_808161C -sub_808161C: @ 808161C - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - cmp r0, 0 - bne _0808162A - movs r1, 0x1F - b _08081630 -_0808162A: - movs r0, 0xF8 - lsls r0, 7 - adds r1, r0, 0 -_08081630: - mov r0, sp - strh r1, [r0] - movs r5, 0 - movs r4, 0xF0 - lsls r4, 16 -_0808163A: - lsrs r1, r4, 16 - mov r0, sp - movs r2, 0x2 - bl LoadPalette - movs r0, 0x80 - lsls r0, 9 - adds r4, r0 - adds r5, 0x1 - cmp r5, 0xF - ble _0808163A - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_808161C - - thumb_func_start sub_8081658 -sub_8081658: @ 8081658 - push {lr} - lsls r0, 16 - ldr r2, _08081678 @ =REG_BLDALPHA - ldrh r1, [r2] - lsls r1, 24 - lsrs r3, r1, 24 - ldrh r1, [r2] - lsrs r2, r1, 8 - cmp r0, 0 - beq _0808167C - cmp r3, 0 - beq _08081686 - subs r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - b _08081686 - .align 2, 0 -_08081678: .4byte REG_BLDALPHA -_0808167C: - cmp r2, 0xF - bhi _08081686 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 -_08081686: - ldr r1, _0808169C @ =REG_BLDALPHA - lsls r0, r2, 8 - orrs r0, r3 - strh r0, [r1] - cmp r3, 0 - bne _080816A0 - cmp r2, 0x10 - bne _080816A0 - movs r0, 0x1 - b _080816A2 - .align 2, 0 -_0808169C: .4byte REG_BLDALPHA -_080816A0: - movs r0, 0 -_080816A2: - pop {r1} - bx r1 - thumb_func_end sub_8081658 - - thumb_func_start sub_80816A8 -sub_80816A8: @ 80816A8 - push {r4-r7,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080816D0 @ =gTasks + 0x8 - adds r7, r0, r1 - movs r1, 0 - ldrsh r0, [r7, r1] - cmp r0, 0x7 - bls _080816C4 - b _08081892 -_080816C4: - lsls r0, 2 - ldr r1, _080816D4 @ =_080816D8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080816D0: .4byte gTasks + 0x8 -_080816D4: .4byte _080816D8 - .align 2, 0 -_080816D8: - .4byte _080816F8 - .4byte _08081790 - .4byte _080817BC - .4byte _080817D8 - .4byte _080817EE - .4byte _08081852 - .4byte _08081818 - .4byte _08081826 -_080816F8: - movs r2, 0x80 - lsls r2, 19 - ldrh r0, [r2] - strh r0, [r7, 0xC] - ldr r3, _0808176C @ =REG_BLDCNT - ldrh r0, [r3] - strh r0, [r7, 0xE] - ldr r6, _08081770 @ =REG_BLDALPHA - ldrh r0, [r6] - strh r0, [r7, 0x10] - ldr r5, _08081774 @ =REG_WININ - ldrh r0, [r5] - strh r0, [r7, 0x12] - ldr r4, _08081778 @ =REG_WINOUT - ldrh r0, [r4] - strh r0, [r7, 0x14] - ldrh r1, [r2] - ldr r0, _0808177C @ =0x0000bfff - ands r0, r1 - strh r0, [r2] - ldr r1, _08081780 @ =gUnknown_081E29E8 - ldrh r0, [r3] - ldrh r1, [r1] - orrs r0, r1 - strh r0, [r3] - ldr r2, _08081784 @ =0x0000070c - adds r0, r2, 0 - strh r0, [r6] - movs r0, 0x3F - strh r0, [r5] - movs r0, 0x1E - strh r0, [r4] - ldr r4, _08081788 @ =gUnknown_03004DE0 - movs r0, 0x4 - ldrsh r1, [r7, r0] - movs r0, 0x6 - ldrsh r2, [r7, r0] - adds r0, r4, 0 - movs r3, 0x1 - bl sub_8081398 - movs r2, 0xF0 - lsls r2, 3 - adds r1, r4, r2 - movs r2, 0xF0 - lsls r2, 1 - adds r0, r4, 0 - bl CpuFastSet - ldr r2, _0808178C @ =gUnknown_0839ACEC - ldr r0, [r2] - ldr r1, [r2, 0x4] - ldr r2, [r2, 0x8] - bl sub_80895F8 - movs r0, 0x1 - strh r0, [r7] - b _08081892 - .align 2, 0 -_0808176C: .4byte REG_BLDCNT -_08081770: .4byte REG_BLDALPHA -_08081774: .4byte REG_WININ -_08081778: .4byte REG_WINOUT -_0808177C: .4byte 0x0000bfff -_08081780: .4byte gUnknown_081E29E8 -_08081784: .4byte 0x0000070c -_08081788: .4byte gUnknown_03004DE0 -_0808178C: .4byte gUnknown_0839ACEC -_08081790: - movs r0, 0 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuFillWindowRectWithBlankTile - ldrb r0, [r7, 0x2] - bl sub_808161C - movs r1, 0x4 - ldrsh r0, [r7, r1] - movs r2, 0x6 - ldrsh r1, [r7, r2] - movs r2, 0x1 - str r2, [sp] - movs r4, 0x2 - str r4, [sp, 0x4] - movs r3, 0xA0 - bl sub_8081534 - strh r4, [r7] - b _08081892 -_080817BC: - ldr r0, _080817D4 @ =sub_8081424 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08081892 - bl EnableBothScriptContexts - movs r0, 0x3 - strh r0, [r7] - b _08081892 - .align 2, 0 -_080817D4: .4byte sub_8081424 -_080817D8: - bl InstallCameraPanAheadCallback - movs r0, 0 - bl SetCameraPanningCallback - movs r0, 0 - strh r0, [r7, 0xA] - movs r0, 0x4 - strh r0, [r7, 0x8] - strh r0, [r7] - b _08081892 -_080817EE: - ldrh r0, [r7, 0x8] - subs r0, 0x1 - strh r0, [r7, 0x8] - lsls r0, 16 - cmp r0, 0 - bne _08081892 - movs r0, 0x4 - strh r0, [r7, 0x8] - ldrh r0, [r7, 0xA] - movs r1, 0x1 - eors r0, r1 - strh r0, [r7, 0xA] - movs r1, 0x4 - negs r1, r1 - cmp r0, 0 - beq _08081810 - movs r1, 0x4 -_08081810: - movs r0, 0 - bl SetCameraPanning - b _08081892 -_08081818: - bl InstallCameraPanAheadCallback - movs r0, 0x8 - strh r0, [r7, 0x8] - movs r0, 0x7 - strh r0, [r7] - b _08081892 -_08081826: - ldrh r0, [r7, 0x8] - subs r0, 0x1 - strh r0, [r7, 0x8] - lsls r0, 16 - cmp r0, 0 - bne _08081892 - movs r0, 0x8 - strh r0, [r7, 0x8] - ldrh r0, [r7, 0xA] - movs r1, 0x1 - eors r0, r1 - strh r0, [r7, 0xA] - ldrh r0, [r7, 0xA] - bl sub_8081658 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08081892 - movs r0, 0x5 - strh r0, [r7] - b _08081892 -_08081852: - movs r0, 0 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - ldr r0, _0808189C @ =gWindowConfig_81E6CE4 - bl LoadFontDefaultPalette - ldr r1, _080818A0 @ =REG_WIN0H - movs r0, 0xFF - strh r0, [r1] - subs r1, 0x40 - ldrh r0, [r7, 0xC] - strh r0, [r1] - adds r1, 0x50 - ldrh r0, [r7, 0xE] - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r7, 0x10] - strh r0, [r1] - subs r1, 0xA - ldrh r0, [r7, 0x12] - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r7, 0x14] - strh r0, [r1] - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask -_08081892: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0808189C: .4byte gWindowConfig_81E6CE4 -_080818A0: .4byte REG_WIN0H - thumb_func_end sub_80816A8 - - thumb_func_start sub_80818A4 -sub_80818A4: @ 80818A4 - push {lr} - ldr r0, _080818CC @ =sub_80816A8 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080818D0 @ =gTasks + 0x8 - adds r1, r0 - ldr r0, _080818D4 @ =gScriptResult - ldrh r0, [r0] - cmp r0, 0 - bne _080818D8 - strh r0, [r1, 0x2] - movs r0, 0x68 - b _080818F0 - .align 2, 0 -_080818CC: .4byte sub_80816A8 -_080818D0: .4byte gTasks + 0x8 -_080818D4: .4byte gScriptResult -_080818D8: - cmp r0, 0x1 - bne _080818E2 - strh r0, [r1, 0x2] - movs r0, 0x68 - b _080818F0 -_080818E2: - cmp r0, 0x2 - bne _080818EA - movs r0, 0 - b _080818EC -_080818EA: - movs r0, 0x1 -_080818EC: - strh r0, [r1, 0x2] - movs r0, 0x78 -_080818F0: - strh r0, [r1, 0x4] - movs r0, 0x50 - strh r0, [r1, 0x6] - pop {r0} - bx r0 - thumb_func_end sub_80818A4 - - thumb_func_start sub_80818FC -sub_80818FC: @ 80818FC - push {lr} - ldr r0, _0808191C @ =sub_80816A8 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08081920 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0x6 - strh r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_0808191C: .4byte sub_80816A8 -_08081920: .4byte gTasks - thumb_func_end sub_80818FC - - thumb_func_start sub_8081924 -sub_8081924: @ 8081924 - push {lr} - bl sub_8054044 - ldr r0, _08081938 @ =task50_0807F0C8 - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_08081938: .4byte task50_0807F0C8 - thumb_func_end sub_8081924 - - thumb_func_start task50_0807F0C8 -task50_0807F0C8: @ 808193C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_8054034 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08081958 - adds r0, r4, 0 - bl DestroyTask - bl EnableBothScriptContexts -_08081958: - pop {r4} - pop {r0} - bx r0 - thumb_func_end task50_0807F0C8 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/unknown_task.s b/asm/unknown_task.s deleted file mode 100644 index 39f1497ef..000000000 --- a/asm/unknown_task.s +++ /dev/null @@ -1,645 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start remove_some_task -remove_some_task: @ 8089578 - push {r4,lr} - ldr r4, _080895A8 @ =gUnknown_03004DC0 - movs r0, 0 - strb r0, [r4, 0x15] - ldr r1, _080895AC @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080895B0 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080895B4 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - ldrb r0, [r4, 0x18] - cmp r0, 0xFF - beq _080895A2 - bl DestroyTask - movs r0, 0xFF - strb r0, [r4, 0x18] -_080895A2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080895A8: .4byte gUnknown_03004DC0 -_080895AC: .4byte 0x040000b0 -_080895B0: .4byte 0x0000c5ff -_080895B4: .4byte 0x00007fff - thumb_func_end remove_some_task - - thumb_func_start dp12_8087EA4 -dp12_8087EA4: @ 80895B8 - push {r4,lr} - sub sp, 0x4 - mov r0, sp - movs r4, 0 - strh r4, [r0] - ldr r1, _080895EC @ =gUnknown_03004DE0 - ldr r2, _080895F0 @ =0x01000780 - bl CpuSet - ldr r0, _080895F4 @ =gUnknown_03004DC0 - movs r1, 0 - str r1, [r0] - str r1, [r0, 0x4] - str r1, [r0, 0x8] - str r1, [r0, 0xC] - strb r4, [r0, 0x14] - strb r4, [r0, 0x15] - strb r4, [r0, 0x16] - strb r4, [r0, 0x17] - movs r1, 0xFF - strb r1, [r0, 0x18] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080895EC: .4byte gUnknown_03004DE0 -_080895F0: .4byte 0x01000780 -_080895F4: .4byte gUnknown_03004DC0 - thumb_func_end dp12_8087EA4 - - thumb_func_start sub_80895F8 -sub_80895F8: @ 80895F8 - push {lr} - sub sp, 0xC - str r0, [sp] - str r1, [sp, 0x4] - str r2, [sp, 0x8] - ldr r0, _0808961C @ =0xa2600001 - cmp r1, r0 - bne _0808962C - ldr r0, _08089620 @ =gUnknown_03004DC0 - ldr r1, _08089624 @ =gUnknown_03004DE2 - str r1, [r0] - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - str r1, [r0, 0x4] - ldr r1, _08089628 @ =sub_80896F4 - b _0808963C - .align 2, 0 -_0808961C: .4byte 0xa2600001 -_08089620: .4byte gUnknown_03004DC0 -_08089624: .4byte gUnknown_03004DE2 -_08089628: .4byte sub_80896F4 -_0808962C: - ldr r0, _0808965C @ =gUnknown_03004DC0 - ldr r1, _08089660 @ =gUnknown_03004DE4 - str r1, [r0] - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - str r1, [r0, 0x4] - ldr r1, _08089664 @ =sub_8089714 -_0808963C: - str r1, [r0, 0x10] - adds r1, r0, 0 - ldr r0, [sp, 0x4] - str r0, [r1, 0xC] - ldr r0, [sp] - str r0, [r1, 0x8] - mov r0, sp - ldrb r0, [r0, 0x8] - strb r0, [r1, 0x15] - mov r0, sp - ldrb r0, [r0, 0x9] - strb r0, [r1, 0x16] - strb r0, [r1, 0x17] - add sp, 0xC - pop {r0} - bx r0 - .align 2, 0 -_0808965C: .4byte gUnknown_03004DC0 -_08089660: .4byte gUnknown_03004DE4 -_08089664: .4byte sub_8089714 - thumb_func_end sub_80895F8 - - thumb_func_start sub_8089668 -sub_8089668: @ 8089668 - push {r4,lr} - ldr r4, _08089698 @ =gUnknown_03004DC0 - ldrb r0, [r4, 0x15] - cmp r0, 0 - beq _080896E2 - cmp r0, 0x3 - bne _080896AC - movs r0, 0 - strb r0, [r4, 0x15] - ldr r1, _0808969C @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080896A0 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080896A4 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - ldr r1, _080896A8 @ =gUnknown_0202FFA4 - movs r0, 0x1 - strb r0, [r1] - b _080896E2 - .align 2, 0 -_08089698: .4byte gUnknown_03004DC0 -_0808969C: .4byte 0x040000b0 -_080896A0: .4byte 0x0000c5ff -_080896A4: .4byte 0x00007fff -_080896A8: .4byte gUnknown_0202FFA4 -_080896AC: - ldr r1, _080896E8 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080896EC @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080896F0 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - ldrb r0, [r4, 0x14] - lsls r0, 2 - adds r0, r4 - ldr r0, [r0] - str r0, [r1] - ldr r0, [r4, 0x8] - str r0, [r1, 0x4] - ldr r0, [r4, 0xC] - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r0, [r4, 0x10] - bl _call_via_r0 - ldrb r0, [r4, 0x14] - movs r1, 0x1 - eors r0, r1 - strb r0, [r4, 0x14] -_080896E2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080896E8: .4byte 0x040000b0 -_080896EC: .4byte 0x0000c5ff -_080896F0: .4byte 0x00007fff - thumb_func_end sub_8089668 - - thumb_func_start sub_80896F4 -sub_80896F4: @ 80896F4 - ldr r0, _0808970C @ =gUnknown_03004DC0 - ldr r2, [r0, 0x8] - ldrb r1, [r0, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - ldr r1, _08089710 @ =gUnknown_03004DE0 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - bx lr - .align 2, 0 -_0808970C: .4byte gUnknown_03004DC0 -_08089710: .4byte gUnknown_03004DE0 - thumb_func_end sub_80896F4 - - thumb_func_start sub_8089714 -sub_8089714: @ 8089714 - ldr r0, _0808972C @ =gUnknown_03004DC0 - ldr r2, [r0, 0x8] - ldrb r1, [r0, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - ldr r1, _08089730 @ =gUnknown_03004DE0 - adds r0, r1 - ldr r0, [r0] - str r0, [r2] - bx lr - .align 2, 0 -_0808972C: .4byte gUnknown_03004DC0 -_08089730: .4byte gUnknown_03004DE0 - thumb_func_end sub_8089714 - - thumb_func_start task00_for_dp12 -task00_for_dp12: @ 8089734 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - movs r6, 0 - ldr r0, _0808975C @ =gUnknown_0202FFA4 - ldrb r0, [r0] - cmp r0, 0 - beq _08089764 - mov r0, r12 - bl DestroyTask - ldr r1, _08089760 @ =gUnknown_03004DC0 - movs r0, 0xFF - strb r0, [r1, 0x18] - b _080898E4 - .align 2, 0 -_0808975C: .4byte gUnknown_0202FFA4 -_08089760: .4byte gUnknown_03004DC0 -_08089764: - ldr r1, _08089790 @ =gTasks - mov r0, r12 - lsls r2, r0, 2 - adds r0, r2, r0 - lsls r0, 3 - adds r3, r0, r1 - movs r4, 0x16 - ldrsh r0, [r3, r4] - mov r10, r1 - mov r9, r2 - cmp r0, 0 - beq _08089810 - movs r1, 0x14 - ldrsh r0, [r3, r1] - cmp r0, 0xE - bhi _08089810 - lsls r0, 2 - ldr r1, _08089794 @ =_08089798 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08089790: .4byte gTasks -_08089794: .4byte _08089798 - .align 2, 0 -_08089798: - .4byte _080897D4 - .4byte _08089810 - .4byte _080897DC - .4byte _08089810 - .4byte _080897E4 - .4byte _08089810 - .4byte _080897EC - .4byte _08089810 - .4byte _080897F4 - .4byte _08089810 - .4byte _080897FC - .4byte _08089810 - .4byte _08089804 - .4byte _08089810 - .4byte _0808980C -_080897D4: - ldr r0, _080897D8 @ =gUnknown_030042A4 - b _0808980E - .align 2, 0 -_080897D8: .4byte gUnknown_030042A4 -_080897DC: - ldr r0, _080897E0 @ =gUnknown_030042A0 - b _0808980E - .align 2, 0 -_080897E0: .4byte gUnknown_030042A0 -_080897E4: - ldr r0, _080897E8 @ =gUnknown_030042C0 - b _0808980E - .align 2, 0 -_080897E8: .4byte gUnknown_030042C0 -_080897EC: - ldr r0, _080897F0 @ =gUnknown_030041B4 - b _0808980E - .align 2, 0 -_080897F0: .4byte gUnknown_030041B4 -_080897F4: - ldr r0, _080897F8 @ =gUnknown_03004288 - b _0808980E - .align 2, 0 -_080897F8: .4byte gUnknown_03004288 -_080897FC: - ldr r0, _08089800 @ =gUnknown_03004280 - b _0808980E - .align 2, 0 -_08089800: .4byte gUnknown_03004280 -_08089804: - ldr r0, _08089808 @ =gUnknown_030041B0 - b _0808980E - .align 2, 0 -_08089808: .4byte gUnknown_030041B0 -_0808980C: - ldr r0, _08089870 @ =gUnknown_030041B8 -_0808980E: - ldrh r6, [r0] -_08089810: - mov r0, r9 - add r0, r12 - lsls r0, 3 - mov r2, r10 - adds r1, r0, r2 - ldrh r2, [r1, 0x10] - movs r3, 0x10 - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _0808987C - subs r0, r2, 0x1 - strh r0, [r1, 0x10] - movs r4, 0xE - ldrsh r0, [r1, r4] - movs r3, 0xA0 - lsls r3, 1 - adds r2, r0, r3 - movs r4, 0x8 - ldrsh r3, [r1, r4] - movs r4, 0xA - ldrsh r0, [r1, r4] - cmp r3, r0 - bge _080898E4 - ldr r5, _08089874 @ =gUnknown_03004DE0 - ldr r0, _08089878 @ =gUnknown_03004DC0 - mov r8, r0 - adds r7, r1, 0 - lsls r0, r2, 1 - adds r4, r0, r5 -_0808984A: - lsls r2, r3, 1 - mov r0, r8 - ldrb r1, [r0, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r5 - ldrh r0, [r4] - adds r0, r6 - strh r0, [r2] - adds r4, 0x2 - adds r3, 0x1 - movs r1, 0xA - ldrsh r0, [r7, r1] - cmp r3, r0 - blt _0808984A - b _080898E4 - .align 2, 0 -_08089870: .4byte gUnknown_030041B8 -_08089874: .4byte gUnknown_03004DE0 -_08089878: .4byte gUnknown_03004DC0 -_0808987C: - ldrh r0, [r1, 0x12] - strh r0, [r1, 0x10] - movs r2, 0xE - ldrsh r0, [r1, r2] - movs r3, 0xA0 - lsls r3, 1 - adds r2, r0, r3 - movs r4, 0x8 - ldrsh r3, [r1, r4] - movs r4, 0xA - ldrsh r0, [r1, r4] - cmp r3, r0 - bge _080898C4 - ldr r5, _080898F4 @ =gUnknown_03004DE0 - adds r7, r1, 0 - lsls r0, r2, 1 - adds r4, r0, r5 - ldr r0, _080898F8 @ =gUnknown_03004DC0 - mov r8, r0 -_080898A2: - lsls r2, r3, 1 - mov r0, r8 - ldrb r1, [r0, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r5 - ldrh r0, [r4] - adds r0, r6 - strh r0, [r2] - adds r4, 0x2 - adds r3, 0x1 - movs r1, 0xA - ldrsh r0, [r7, r1] - cmp r3, r0 - blt _080898A2 -_080898C4: - mov r0, r9 - add r0, r12 - lsls r0, 3 - mov r3, r10 - adds r2, r0, r3 - ldrh r0, [r2, 0xE] - adds r0, 0x1 - strh r0, [r2, 0xE] - lsls r0, 16 - asrs r0, 16 - movs r4, 0xC - ldrsh r1, [r2, r4] - cmp r0, r1 - bne _080898E4 - movs r0, 0 - strh r0, [r2, 0xE] -_080898E4: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080898F4: .4byte gUnknown_03004DE0 -_080898F8: .4byte gUnknown_03004DC0 - thumb_func_end task00_for_dp12 - - thumb_func_start sub_80898FC -sub_80898FC: @ 80898FC - push {r4-r7,lr} - adds r6, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - lsls r2, 24 - lsrs r4, r2, 24 - movs r1, 0 - movs r2, 0 - ldr r0, _08089940 @ =gSineTable - mov r12, r0 -_08089910: - lsls r0, r1, 1 - adds r3, r0, r6 - lsls r0, r2, 1 - add r0, r12 - movs r7, 0 - ldrsh r0, [r0, r7] - muls r0, r4 - cmp r0, 0 - bge _08089924 - adds r0, 0xFF -_08089924: - asrs r0, 8 - strh r0, [r3] - adds r0, r2, r5 - lsls r0, 24 - lsrs r2, r0, 24 - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0xFF - bls _08089910 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08089940: .4byte gSineTable - thumb_func_end sub_80898FC - - thumb_func_start sub_8089944 -sub_8089944: @ 8089944 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - adds r5, r0, 0 - str r1, [sp, 0x10] - ldr r0, [sp, 0x40] - mov r8, r0 - ldr r1, [sp, 0x44] - mov r9, r1 - ldr r0, [sp, 0x48] - mov r10, r0 - lsls r5, 24 - lsrs r5, 24 - ldr r1, [sp, 0x10] - lsls r1, 24 - str r1, [sp, 0x14] - lsrs r0, r1, 24 - str r0, [sp, 0xC] - lsls r1, r2, 24 - lsrs r1, 24 - str r1, [sp, 0x18] - lsls r2, r3, 24 - lsrs r2, 24 - str r2, [sp, 0x1C] - mov r1, r8 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - mov r3, r9 - lsls r3, 24 - lsrs r3, 24 - mov r9, r3 - mov r0, r10 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - bl dp12_8087EA4 - ldr r0, _08089A50 @ =REG_BG0HOFS - add r0, r9 - str r0, [sp] - ldr r0, _08089A54 @ =0xa2600001 - str r0, [sp, 0x4] - mov r1, sp - movs r0, 0x1 - strb r0, [r1, 0x8] - mov r0, sp - movs r1, 0 - strb r1, [r0, 0x9] - ldr r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - bl sub_80895F8 - ldr r0, _08089A58 @ =task00_for_dp12 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08089A5C @ =gTasks - lsls r4, r7, 2 - adds r4, r7 - lsls r4, 3 - adds r4, r0 - strh r5, [r4, 0x8] - mov r3, sp - ldrh r3, [r3, 0xC] - strh r3, [r4, 0xA] - movs r0, 0x80 - lsls r0, 1 - ldr r1, [sp, 0x18] - bl __divsi3 - strh r0, [r4, 0xC] - movs r0, 0 - strh r0, [r4, 0xE] - mov r1, r8 - strh r1, [r4, 0x10] - strh r1, [r4, 0x12] - mov r3, r9 - strh r3, [r4, 0x14] - mov r0, r10 - strh r0, [r4, 0x16] - ldr r0, _08089A60 @ =gUnknown_03004DC0 - strb r7, [r0, 0x18] - ldr r0, _08089A64 @ =gUnknown_0202FFA4 - movs r1, 0 - strb r1, [r0] - ldr r4, _08089A68 @ =gUnknown_03005060 - ldr r3, [sp, 0xC] - subs r6, r3, r5 - lsls r3, r6, 24 - lsrs r3, 24 - adds r0, r4, 0 - ldr r1, [sp, 0x18] - ldr r2, [sp, 0x1C] - bl sub_80898FC - ldr r0, [sp, 0xC] - cmp r5, r0 - bge _08089A3E - ldr r1, _08089A6C @ =0xfffffd80 - adds r2, r4, r1 - lsls r1, r5, 1 - movs r3, 0xF0 - lsls r3, 3 - adds r0, r1, r3 - adds r3, r0, r2 - adds r1, r2 - adds r2, r4, 0 - adds r5, r6, 0 -_08089A2A: - ldrh r0, [r2] - strh r0, [r1] - ldrh r0, [r2] - strh r0, [r3] - adds r2, 0x2 - adds r3, 0x2 - adds r1, 0x2 - subs r5, 0x1 - cmp r5, 0 - bne _08089A2A -_08089A3E: - adds r0, r7, 0 - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08089A50: .4byte REG_BG0HOFS -_08089A54: .4byte 0xa2600001 -_08089A58: .4byte task00_for_dp12 -_08089A5C: .4byte gTasks -_08089A60: .4byte gUnknown_03004DC0 -_08089A64: .4byte gUnknown_0202FFA4 -_08089A68: .4byte gUnknown_03005060 -_08089A6C: .4byte 0xfffffd80 - thumb_func_end sub_8089944 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/rom_8080874.s b/data/rom_8080874.s deleted file mode 100644 index 220ec5f96..000000000 --- a/data/rom_8080874.s +++ /dev/null @@ -1,18 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 1 -gUnknown_0839ACDC:: @ 839ACDC - .2byte 0xC8, 0x48, 0x38, 0x28, 0x18, 0x0 - - .align 2 -gUnknown_0839ACE8:: @ 839ACE8 - .4byte 4 - - .align 2 -gUnknown_0839ACEC:: @ 839ACEC - .4byte REG_WIN0H - .4byte ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1 - .4byte 1 diff --git a/include/rom4.h b/include/rom4.h index 803a38162..571ab1435 100644 --- a/include/rom4.h +++ b/include/rom4.h @@ -100,8 +100,8 @@ void sub_8053F84(void); void sub_8053FB0(u16); // is_warp1_light_level_8_or_9 // sub_8053FF8 -// sub_8054034 -// sub_8054044 +bool8 sub_8054034(void); +void sub_8054044(void); // sub_8054050 void sub_80540D0(s16 *, u16 *); void sub_8054164(void); diff --git a/ld_script.txt b/ld_script.txt index a51f50947..4b5e32829 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -128,7 +128,7 @@ SECTIONS { asm/field_weather.o(.text); src/field_fadetransition.o(.text); asm/field_fadetransition.o(.text); - asm/field_screen_effect.o(.text); + src/field_screen_effect.o(.text); src/battle_setup.o(.text); asm/cable_club.o(.text); src/cable_club.o(.text); @@ -137,7 +137,7 @@ SECTIONS { src/trainer_see.o(.text); src/wild_encounter.o(.text); src/field_effect.o(.text); - asm/unknown_task.o(.text); + src/unknown_task.o(.text); asm/pokemon_menu.o(.text); src/option_menu.o(.text); src/pokedex.o(.text); @@ -378,7 +378,7 @@ SECTIONS { data/battle_anim_807B69C.o(.rodata); src/title_screen.o(.rodata); data/field_weather.o(.rodata); - data/rom_8080874.o(.rodata); + src/field_screen_effect.o(.rodata); src/battle_setup.o(.rodata); data/cable_club.o(.rodata); data/mori_debug_menu.o(.rodata); diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c new file mode 100644 index 000000000..c6bd8cb77 --- /dev/null +++ b/src/field_screen_effect.c @@ -0,0 +1,339 @@ +#include "global.h" +#include "field_camera.h" +#include "menu.h" +#include "palette.h" +#include "rom4.h" +#include "script.h" +#include "task.h" +#include "text.h" +#include "unknown_task.h" + +struct UnknownStruct1 +{ + u8 filler0[0x14]; + u8 unk14; + u8 filler15[0xB]; +}; +extern struct UnknownStruct1 gUnknown_03004DC0; + +extern u16 gUnknown_03004DE0[][0x3C0]; + +const static u16 gUnknown_0839ACDC[] = { 0xC8, 0x48, 0x38, 0x28, 0x18, 0x0 }; + +const s32 gUnknown_0839ACE8 = 4; + +const static u32 gUnknown_0839ACEC[3] = +{ + REG_ADDR_WIN0H, + ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, + 1 +}; + +static void sub_808136C(u16 *dest, u32 a2, s32 a3, s32 a4) +{ + if (a2 <= 0xA0) + { + if (a3 < 0) + a3 = 0; + if (a3 > 255) + a3 = 255; + if (a4 < 0) + a4 = 0; + if (a4 > 255) + a4 = 255; + dest[a2] = (a3 << 8) | a4; + } +} + +static void sub_8081398(u16 *dest, s32 a2, s32 a3, s32 a4) +{ + s32 v1 = a4; + s32 v2 = a4; + s32 v3 = 0; + while (v1 >= v3) + { + sub_808136C(dest, a3 - v3, a2 - v1, a2 + v1); + sub_808136C(dest, a3 + v3, a2 - v1, a2 + v1); + sub_808136C(dest, a3 - v1, a2 - v3, a2 + v3); + sub_808136C(dest, a3 + v1, a2 - v3, a2 + v3); + v2 -= (v3 * 2) - 1; + v3++; + if (v2 < 0) + { + v2 += 2 * (v1 - 1); + v1--; + } + } +} + +static void sub_8081424(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.unk14][0], data[1], data[2], data[3]); + data[0] = 1; + break; + case 1: + sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.unk14][0], data[1], data[2], data[3]); + data[0] = 0; + data[3] += data[5]; + if (data[3] > data[4]) + { + if (data[6] == 1) + { + remove_some_task(); + data[0] = 2; + } + else + { + DestroyTask(taskId); + } + } + break; + case 2: + dp12_8087EA4(); + DestroyTask(taskId); + break; + } +} + +static void sub_80814E8(u8 taskId) +{ + if (!FuncIsActiveTask(sub_8081424)) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } +} + +static void sub_8081510(void) +{ + if (!FuncIsActiveTask(sub_80814E8)) + CreateTask(sub_80814E8, 80); +} + +static u8 sub_8081534(s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, u8 a6) +{ + u8 taskId = CreateTask(sub_8081424, 80); + s16 *data = gTasks[taskId].data; + + data[3] = a3; + data[4] = a4; + data[1] = a1; + data[2] = a2; + data[6] = a5; + + if (a3 < a4) + data[5] = a6; + else + data[5] = -a6; + + return taskId; +} + +void sub_8081594(u8 a1) +{ + u8 index = sav1_get_flash_used_on_map(); + u8 value = 0; + if (!a1) + value = 1; + sub_8081534(120, 80, gUnknown_0839ACDC[index], gUnknown_0839ACDC[a1], value, 1); + sub_8081510(); + ScriptContext2_Enable(); +} + +void sub_80815E0(u8 a1) +{ + if (a1) + { + sub_8081398(&gUnknown_03004DE0[0][0], 120, 80, gUnknown_0839ACDC[a1]); + CpuFastSet(&gUnknown_03004DE0[0], &gUnknown_03004DE0[1], 480); + } +} + +static void sub_808161C(u8 a1) +{ + int i; + u16 color[1]; + + if (!a1) + color[0] = 0x1F; + else + color[0] = 0x7C00; + + for (i = 0; i < 16; i++) + { + LoadPalette(color, 0xF0 + i, 2); + } +} + +static bool8 sub_8081658(u16 a1) +{ + u8 lo = REG_BLDALPHA & 0xFF; + u8 hi = REG_BLDALPHA >> 8; + + if (a1) + { + if (lo) + { + lo--; + } + } + else + { + if (hi < 0x10) + { + hi++; + } + } + + REG_BLDALPHA = (hi << 8) | lo; + + if (lo == 0 && hi == 0x10) + { + return TRUE; + } + + return FALSE; +} + +static void sub_80816A8(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + data[6] = REG_DISPCNT; + data[7] = REG_BLDCNT; + data[8] = REG_BLDALPHA; + data[9] = REG_WININ; + data[10] = REG_WINOUT; + REG_DISPCNT &= 0xBFFF; + REG_BLDCNT |= gUnknown_081E29E8[0]; + REG_BLDALPHA = 1804; + REG_WININ = 63; + REG_WINOUT = 30; + sub_8081398(&gUnknown_03004DE0[0][0], data[2], data[3], 1); + CpuFastSet(&gUnknown_03004DE0[0], &gUnknown_03004DE0[1], 480); + sub_80895F8(gUnknown_0839ACEC[0], gUnknown_0839ACEC[1], gUnknown_0839ACEC[2]); + data[0] = 1; + break; + case 1: + MenuFillWindowRectWithBlankTile(0, 0, 29, 19); + sub_808161C(data[1]); + sub_8081534(data[2], data[3], 1, 160, 1, 2); + data[0] = 2; + break; + case 2: + if (!FuncIsActiveTask(sub_8081424)) + { + EnableBothScriptContexts(); + data[0] = 3; + } + break; + case 3: + InstallCameraPanAheadCallback(); + SetCameraPanningCallback(NULL); + data[5] = 0; + data[4] = 4; + data[0] = 4; + break; + case 4: + data[4]--; + if (!data[4]) + { + s32 panning; + data[4] = 4; + data[5] ^= 1; + if (data[5]) + panning = 4; + else + panning = -4; + SetCameraPanning(0, panning); + } + break; + case 6: + InstallCameraPanAheadCallback(); + data[4] = 8; + data[0] = 7; + break; + case 7: + data[4]--; + if (!data[4]) + { + data[4] = 8; + data[5] ^= 1; + if (sub_8081658(data[5]) == TRUE) + data[0] = 5; + } + break; + case 5: + MenuZeroFillWindowRect(0, 0, 29, 19); + LoadFontDefaultPalette(&gWindowConfig_81E6CE4); + REG_WIN0H = 255; + REG_DISPCNT = data[6]; + REG_BLDCNT = data[7]; + REG_BLDALPHA = data[8]; + REG_WININ = data[9]; + REG_WINOUT = data[10]; + EnableBothScriptContexts(); + DestroyTask(taskId); + break; + } +} + +void sub_80818A4(void) +{ + u8 taskId = CreateTask(sub_80816A8, 80); + s16 *data = gTasks[taskId].data; + + if (gScriptResult == 0) + { + data[1] = 0; + data[2] = 104; + } + else if (gScriptResult == 1) + { + data[1] = 1; + data[2] = 104; + } + else if (gScriptResult == 2) + { + data[1] = 0; + data[2] = 120; + } + else + { + data[1] = 1; + data[2] = 120; + } + + data[3] = 80; +} + +void sub_80818FC(void) +{ + u8 taskId = FindTaskIdByFunc(sub_80816A8); + gTasks[taskId].data[0] = 6; +} + +static void task50_0807F0C8(u8); + +void sub_8081924(void) +{ + sub_8054044(); + CreateTask(task50_0807F0C8, 80); +} + +static void task50_0807F0C8(u8 taskId) +{ + if (sub_8054034() == TRUE) + { + DestroyTask(taskId); + EnableBothScriptContexts(); + } +} diff --git a/src/unknown_task.c b/src/unknown_task.c new file mode 100644 index 000000000..81b89ef92 --- /dev/null +++ b/src/unknown_task.c @@ -0,0 +1,255 @@ +#include "global.h" +#include "data2.h" +#include "task.h" +#include "trig.h" + +struct UnknownStruct1 +{ + void *src[2]; + void *dest; + u32 unkC; + void (*unk10)(void); + u8 srcBank; + u8 unk15; + u8 unk16; + u8 unk17; + u8 taskId; + u8 filler19[0x7]; +}; + +struct UnknownStruct2 +{ + void *dest; + u32 control; + u8 unk8; + u8 unk9; +}; + +static void sub_80896F4(void); +static void sub_8089714(void); + +extern u16 gUnknown_030041B0; +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030041B8; +extern u16 gUnknown_03004280; +extern u16 gUnknown_03004288; +extern u16 gUnknown_030042A0; +extern u16 gUnknown_030042A4; +extern u16 gUnknown_030042C0; + +extern u8 gUnknown_0202FFA4; + +extern struct UnknownStruct1 gUnknown_03004DC0; + +extern u16 gUnknown_03004DE0[][0x3C0]; + +void remove_some_task(void) +{ + gUnknown_03004DC0.unk15 = 0; + DmaStop(0); + if (gUnknown_03004DC0.taskId != 0xFF) + { + DestroyTask(gUnknown_03004DC0.taskId); + gUnknown_03004DC0.taskId = 0xFF; + } +} + +void dp12_8087EA4(void) +{ + CpuFill16(0, gUnknown_03004DE0, 0x780 * 2); + gUnknown_03004DC0.src[0] = 0; + gUnknown_03004DC0.src[1] = 0; + gUnknown_03004DC0.dest = 0; + gUnknown_03004DC0.unkC = 0; + gUnknown_03004DC0.srcBank = 0; + gUnknown_03004DC0.unk15 = 0; + gUnknown_03004DC0.unk16 = 0; + gUnknown_03004DC0.unk17 = 0; + gUnknown_03004DC0.taskId = 0xFF; +} + +void sub_80895F8(struct UnknownStruct2 unk) +{ + if (unk.control == (((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1)) + { + gUnknown_03004DC0.src[0] = &gUnknown_03004DE0[0][1]; + gUnknown_03004DC0.src[1] = &gUnknown_03004DE0[1][1]; + gUnknown_03004DC0.unk10 = sub_80896F4; + } + else + { + gUnknown_03004DC0.src[0] = &gUnknown_03004DE0[0][2]; + gUnknown_03004DC0.src[1] = &gUnknown_03004DE0[1][2]; + gUnknown_03004DC0.unk10 = sub_8089714; + } + + gUnknown_03004DC0.unkC = unk.control; + gUnknown_03004DC0.dest = unk.dest; + gUnknown_03004DC0.unk15 = unk.unk8; + gUnknown_03004DC0.unk16 = unk.unk9; + gUnknown_03004DC0.unk17 = unk.unk9; +} + +void sub_8089668(void) +{ + if (gUnknown_03004DC0.unk15) + { + if (gUnknown_03004DC0.unk15 == 3) + { + gUnknown_03004DC0.unk15 = 0; + DmaStop(0); + gUnknown_0202FFA4 = 1; + } + else + { + DmaStop(0); + DmaSet(0, gUnknown_03004DC0.src[gUnknown_03004DC0.srcBank], gUnknown_03004DC0.dest, gUnknown_03004DC0.unkC); + gUnknown_03004DC0.unk10(); + gUnknown_03004DC0.srcBank ^= 1; + } + } +} + +static void sub_80896F4(void) +{ + u16 *dest = (u16 *)gUnknown_03004DC0.dest; + u16 *src = (u16 *)&gUnknown_03004DE0[gUnknown_03004DC0.srcBank]; + *dest = *src; +} + +static void sub_8089714(void) +{ + u32 *dest = (u32 *)gUnknown_03004DC0.dest; + u32 *src = (u32 *)&gUnknown_03004DE0[gUnknown_03004DC0.srcBank]; + *dest = *src; +} + +static void task00_for_dp12(u8 taskId) +{ + int value = 0; + + if (gUnknown_0202FFA4) + { + DestroyTask(taskId); + gUnknown_03004DC0.taskId = 0xFF; + } + else + { + if (gTasks[taskId].data[7]) + { + switch (gTasks[taskId].data[6]) + { + case 0x0: + value = gUnknown_030042A4; + break; + case 0x2: + value = gUnknown_030042A0; + break; + case 0x4: + value = gUnknown_030042C0; + break; + case 0x6: + value = gUnknown_030041B4; + break; + case 0x8: + value = gUnknown_03004288; + break; + case 0xA: + value = gUnknown_03004280; + break; + case 0xC: + value = gUnknown_030041B0; + break; + case 0xE: + value = gUnknown_030041B8; + break; + } + } + if (gTasks[taskId].data[4]) + { + int i; + int offset; + gTasks[taskId].data[4]--; + offset = gTasks[taskId].data[3] + 320; + for (i = gTasks[taskId].data[0]; i < gTasks[taskId].data[1]; i++) + { + gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = gUnknown_03004DE0[0][offset] + value; + offset++; + } + } + else + { + int i; + int offset; + gTasks[taskId].data[4] = gTasks[taskId].data[5]; + offset = gTasks[taskId].data[3] + 320; + for (i = gTasks[taskId].data[0]; i < gTasks[taskId].data[1]; i++) + { + gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = gUnknown_03004DE0[0][offset] + value; + offset++; + } + gTasks[taskId].data[3]++; + if (gTasks[taskId].data[3] == gTasks[taskId].data[2]) + { + gTasks[taskId].data[3] = 0; + } + } + } +} + +static void sub_80898FC(u16 *a1, u8 a2, u8 a3, u8 a4) +{ + u16 i = 0; + u8 offset = 0; + + while (i < 0x100) + { + a1[i] = (gSineTable[offset] * a3) / 256; + offset += a2; + i++; + } +} + +u8 sub_8089944(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) +{ + int i; + int offset; + struct UnknownStruct2 unk; + u8 taskId; + + dp12_8087EA4(); + + unk.dest = (void *)(REG_ADDR_BG0HOFS + a6); + unk.control = ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1; + unk.unk8 = 1; + unk.unk9 = 0; + + sub_80895F8(unk); + + taskId = CreateTask(task00_for_dp12, 0); + + gTasks[taskId].data[0] = a1; + gTasks[taskId].data[1] = a2; + gTasks[taskId].data[2] = 256 / a3; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = a5; + gTasks[taskId].data[5] = a5; + gTasks[taskId].data[6] = a6; + gTasks[taskId].data[7] = a7; + + gUnknown_03004DC0.taskId = taskId; + gUnknown_0202FFA4 = 0; + + sub_80898FC(&gUnknown_03004DE0[0][320], a3, a4, a2 - a1); + + offset = 320; + + for (i = a1; i < a2; i++) + { + gUnknown_03004DE0[0][i] = gUnknown_03004DE0[0][offset]; + gUnknown_03004DE0[1][i] = gUnknown_03004DE0[0][offset]; + offset++; + } + + return taskId; +} |