diff options
author | ultima-soul <akshayjhanji@hotmail.com> | 2019-08-04 15:23:09 -0700 |
---|---|---|
committer | ultima-soul <akshayjhanji@hotmail.com> | 2019-08-04 15:23:09 -0700 |
commit | ed90bf2430290853bd9376d53c70055fa07634be (patch) | |
tree | 39f67b5cbd0c0ef9e1a4763a052fd07924349940 | |
parent | bbc7c6ccfc7d59f61f406849f752fdd5038a6a80 (diff) | |
parent | d58bf398b2b83a326d23d14d531de7f45a1058bb (diff) |
Merge branch 'master' into pokedex_2
114 files changed, 8784 insertions, 14915 deletions
diff --git a/.travis/calcrom/calcrom.pl b/.travis/calcrom/calcrom.pl index 7b94c650b..1ad3e214d 100644 --- a/.travis/calcrom/calcrom.pl +++ b/.travis/calcrom/calcrom.pl @@ -9,6 +9,8 @@ open(my $file, $ARGV[0]) my $src = 0; my $asm = 0; +my $srcdata = 0; +my $data = 0; while (my $line = <$file>) { if ($line =~ /^ \.(\w+)\s+0x[0-9a-f]+\s+(0x[0-9a-f]+) (\w+)\/.+\.o/) @@ -28,6 +30,17 @@ while (my $line = <$file>) $asm += $size; } } + elsif ($section =~ /rodata/) + { + if ($dir eq 'src') + { + $srcdata += $size; + } + elsif ($dir eq 'data') + { + $data += $size; + } + } } } @@ -118,3 +131,26 @@ print "$total_syms total symbols\n"; print "$documented symbols documented ($docPct%)\n"; print "$partial_documented symbols partially documented ($partialPct%)\n"; print "$undocumented symbols undocumented ($undocPct%)\n"; + +my $foundLines = `git grep '\.incbin "baserom\.gba"' data/`; +my @allLines = split('\n', $foundLines); +my $incbinTotal = 0; +my $incbinNum = 0; +foreach my $line (@allLines) +{ + if ($line =~ /\.incbin\s+"baserom\.gba",\s*0x\w+,\s*(.+?)\s*(\@.*)?$/) + { + my $size = hex($1); + $incbinTotal += $size; + $incbinNum++; + } +} +print "\n"; +my $dataTotal = $srcdata + $data; +my $srcDataPct = sprintf("%.4f", 100 * $srcdata / $dataTotal); +my $dataPct = sprintf("%.4f", 100 * $data / $dataTotal); +my $incbinTotalPct = sprintf("%.4f", 100 * $incbinTotal / $dataTotal); +print "$dataTotal total bytes of data\n"; +print "$srcdata bytes of data in src ($srcDataPct%)\n"; +print "$data bytes of data in data ($dataPct%)\n"; +print "$incbinNum baserom incbins with a combined $incbinTotal bytes ($incbinTotalPct%)\n"; diff --git a/asm/battle_setup.s b/asm/battle_setup.s index 99e4c3468..787b0fb8e 100644 --- a/asm/battle_setup.s +++ b/asm/battle_setup.s @@ -30,13 +30,13 @@ _0807F644: bne _0807F686 bl sub_812B478 ldrb r0, [r4, 0x2] - bl sub_80D08B8 + bl BT_StartOnField ldrh r0, [r4] adds r0, 0x1 strh r0, [r4] b _0807F686 _0807F65E: - bl sub_80D08F8 + bl BT_IsDone lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 diff --git a/asm/battle_tower.s b/asm/battle_tower.s index 13a75573a..ee6856130 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -2025,7 +2025,7 @@ sub_80E68C4: @ 80E68C4 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_80D08F8 + bl BT_IsDone lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -2114,7 +2114,7 @@ _080E6970: bl sub_8080060 lsls r0, 24 lsrs r0, 24 - bl sub_80D08B8 + bl BT_StartOnField b _080E69E6 .align 2, 0 _080E698C: .4byte gSaveBlock1Ptr @@ -2154,7 +2154,7 @@ _080E69A0: bl sub_8080060 lsls r0, 24 lsrs r0, 24 - bl sub_80D08B8 + bl BT_StartOnField _080E69E6: add sp, 0x4 pop {r4-r6} diff --git a/asm/battle_transition.s b/asm/battle_transition.s deleted file mode 100644 index 48a5836ed..000000000 --- a/asm/battle_transition.s +++ /dev/null @@ -1,7480 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80D08B8 -sub_80D08B8: @ 80D08B8 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _080D08DC @ =gUnknown_2039A2C - movs r0, 0x3C - bl AllocZeroed - str r0, [r5] - ldr r1, _080D08E0 @ =gMain - ldr r0, _080D08E4 @ =sub_80565A8 - str r0, [r1, 0x4] - adds r0, r4, 0 - bl LaunchBattleTransitionTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D08DC: .4byte gUnknown_2039A2C -_080D08E0: .4byte gMain -_080D08E4: .4byte sub_80565A8 - thumb_func_end sub_80D08B8 - - thumb_func_start sub_80D08E8 -sub_80D08E8: @ 80D08E8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl LaunchBattleTransitionTask - pop {r0} - bx r0 - thumb_func_end sub_80D08E8 - - thumb_func_start sub_80D08F8 -sub_80D08F8: @ 80D08F8 - push {r4,r5,lr} - ldr r0, _080D091C @ =sub_80D0978 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080D0920 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r1, 0x26 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080D0924 - movs r0, 0 - b _080D093C - .align 2, 0 -_080D091C: .4byte sub_80D0978 -_080D0920: .4byte gTasks -_080D0924: - bl sub_80D3DD0 - ldr r4, _080D0944 @ =gUnknown_2039A2C - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] - adds r0, r5, 0 - bl DestroyTask - movs r0, 0x1 -_080D093C: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D0944: .4byte gUnknown_2039A2C - thumb_func_end sub_80D08F8 - - thumb_func_start LaunchBattleTransitionTask -LaunchBattleTransitionTask: @ 80D0948 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080D0970 @ =sub_80D0978 - movs r1, 0x2 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D0974 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0xA] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D0970: .4byte sub_80D0978 -_080D0974: .4byte gTasks - thumb_func_end LaunchBattleTransitionTask - - thumb_func_start sub_80D0978 -sub_80D0978: @ 80D0978 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D09A8 @ =gUnknown_83FA3B0 - ldr r2, _080D09AC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D098A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D098A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D09A8: .4byte gUnknown_83FA3B0 -_080D09AC: .4byte gTasks - thumb_func_end sub_80D0978 - - thumb_func_start Transition_Phase1 -Transition_Phase1: @ 80D09B0 - push {r4,lr} - adds r4, r0, 0 - bl SetWeatherScreenFadeOut - ldr r0, _080D09DC @ =gPlttBufferFaded - ldr r1, _080D09E0 @ =gPlttBufferUnfaded - ldr r2, _080D09E4 @ =0x04000100 - bl CpuSet - ldr r1, _080D09E8 @ =gUnknown_83FA320 - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - bne _080D09EC - movs r0, 0x2 - strh r0, [r4, 0x8] - movs r0, 0x1 - b _080D09FA - .align 2, 0 -_080D09DC: .4byte gPlttBufferFaded -_080D09E0: .4byte gPlttBufferUnfaded -_080D09E4: .4byte 0x04000100 -_080D09E8: .4byte gUnknown_83FA320 -_080D09EC: - movs r1, 0x4 - bl CreateTask - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 -_080D09FA: - pop {r4} - pop {r1} - bx r1 - thumb_func_end Transition_Phase1 - - thumb_func_start Transition_WaitForPhase1 -Transition_WaitForPhase1: @ 80D0A00 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080D0A20 @ =gUnknown_83FA320 - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _080D0A24 - movs r0, 0 - b _080D0A2C - .align 2, 0 -_080D0A20: .4byte gUnknown_83FA320 -_080D0A24: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 -_080D0A2C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end Transition_WaitForPhase1 - - thumb_func_start Transition_Phase2 -Transition_Phase2: @ 80D0A34 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080D0A58 @ =gUnknown_83FA368 - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - bl CreateTask - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D0A58: .4byte gUnknown_83FA368 - thumb_func_end Transition_Phase2 - - thumb_func_start Transition_WaitForPhase2 -Transition_WaitForPhase2: @ 80D0A5C - push {r4,lr} - adds r4, r0, 0 - movs r0, 0 - strh r0, [r4, 0x26] - ldr r1, _080D0A88 @ =gUnknown_83FA368 - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _080D0A80 - movs r0, 0x1 - strh r0, [r4, 0x26] -_080D0A80: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D0A88: .4byte gUnknown_83FA368 - thumb_func_end Transition_WaitForPhase2 - - thumb_func_start Phase1Task_TransitionAll -Phase1Task_TransitionAll: @ 80D0A8C - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - ldr r1, _080D0AC0 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r1 - ldrh r2, [r1, 0x8] - movs r3, 0x8 - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _080D0AC4 - adds r0, r2, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x2 - str r0, [sp] - movs r0, 0 - movs r1, 0 - movs r2, 0x2 - movs r3, 0x2 - bl CreatePhase1Task - b _080D0AD4 - .align 2, 0 -_080D0AC0: .4byte gTasks -_080D0AC4: - bl sub_80D3CA4 - lsls r0, 24 - cmp r0, 0 - beq _080D0AD4 - adds r0, r4, 0 - bl DestroyTask -_080D0AD4: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end Phase1Task_TransitionAll - - thumb_func_start sub_80D0ADC -sub_80D0ADC: @ 80D0ADC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D0B0C @ =gUnknown_83FA3C0 - ldr r2, _080D0B10 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D0AEE: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D0AEE - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D0B0C: .4byte gUnknown_83FA3C0 -_080D0B10: .4byte gTasks - thumb_func_end sub_80D0ADC - - thumb_func_start sub_80D0B14 -sub_80D0B14: @ 80D0B14 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x4C - movs r1, 0 - bl SetGpuReg - movs r0, 0xA - movs r1, 0x40 - bl SetGpuRegBits - movs r0, 0xC - movs r1, 0x40 - bl SetGpuRegBits - movs r0, 0xE - movs r1, 0x40 - bl SetGpuRegBits - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80D0B14 - - thumb_func_start sub_80D0B48 -sub_80D0B48: @ 80D0B48 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldrh r0, [r4, 0xA] - movs r1, 0xA - ldrsh r2, [r4, r1] - cmp r2, 0 - beq _080D0B5E - subs r0, 0x1 - strh r0, [r4, 0xA] - b _080D0B9E -_080D0B5E: - movs r0, 0x2 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _080D0B80 - movs r1, 0x1 - negs r1, r1 - str r2, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_080D0B80: - ldrh r1, [r4, 0xC] - movs r0, 0xF - ands r0, r1 - lsls r1, r0, 4 - orrs r1, r0 - movs r0, 0x4C - bl SetGpuReg - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0xE - ble _080D0B9E - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080D0B9E: - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80D0B48 - - thumb_func_start sub_80D0BA8 -sub_80D0BA8: @ 80D0BA8 - push {lr} - ldr r0, _080D0BCC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080D0BC4 - ldr r0, _080D0BD0 @ =sub_80D0ADC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D0BC4: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D0BCC: .4byte gPaletteFade -_080D0BD0: .4byte sub_80D0ADC - thumb_func_end sub_80D0BA8 - - thumb_func_start sub_80D0BD4 -sub_80D0BD4: @ 80D0BD4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D0C04 @ =gUnknown_83FA3CC - ldr r2, _080D0C08 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D0BE6: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D0BE6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D0C04: .4byte gUnknown_83FA3CC -_080D0C08: .4byte gTasks - thumb_func_end sub_80D0BD4 - - thumb_func_start sub_80D0C0C -sub_80D0C0C: @ 80D0C0C - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - movs r0, 0x1 - negs r0, r0 - movs r4, 0 - str r4, [sp] - movs r1, 0x4 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _080D0C68 @ =gScanlineEffectRegBuffers + 0x780 - ldr r1, _080D0C6C @ =gUnknown_2039A2C - ldr r1, [r1] - movs r2, 0x14 - ldrsh r1, [r1, r2] - str r4, [sp] - movs r2, 0xA0 - str r2, [sp, 0x4] - movs r2, 0 - movs r3, 0x2 - bl sub_80D3E74 - ldr r0, _080D0C70 @ =sub_80D0CF0 - bl SetVBlankCallback - ldr r0, _080D0C74 @ =sub_80D0D28 - bl SetHBlankCallback - movs r0, 0x3 - bl EnableInterrupts - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D0C68: .4byte gScanlineEffectRegBuffers + 0x780 -_080D0C6C: .4byte gUnknown_2039A2C -_080D0C70: .4byte sub_80D0CF0 -_080D0C74: .4byte sub_80D0D28 - thumb_func_end sub_80D0C0C - - thumb_func_start sub_80D0C78 -sub_80D0C78: @ 80D0C78 - push {r4,r5,lr} - sub sp, 0x8 - ldr r4, _080D0CE0 @ =gUnknown_2039A2C - ldr r2, [r4] - ldrb r1, [r2] - movs r1, 0 - strb r1, [r2] - ldrh r1, [r0, 0xA] - adds r1, 0x4 - strh r1, [r0, 0xA] - ldrh r1, [r0, 0xC] - adds r1, 0x8 - strh r1, [r0, 0xC] - ldr r3, _080D0CE4 @ =gScanlineEffectRegBuffers - ldr r1, [r4] - movs r2, 0x14 - ldrsh r1, [r1, r2] - movs r5, 0xA - ldrsh r2, [r0, r5] - movs r5, 0xC - ldrsh r0, [r0, r5] - str r0, [sp] - movs r0, 0xA0 - str r0, [sp, 0x4] - adds r0, r3, 0 - movs r3, 0x2 - bl sub_80D3E74 - ldr r0, _080D0CE8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080D0CCA - ldr r0, _080D0CEC @ =sub_80D0BD4 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D0CCA: - ldr r0, [r4] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D0CE0: .4byte gUnknown_2039A2C -_080D0CE4: .4byte gScanlineEffectRegBuffers -_080D0CE8: .4byte gPaletteFade -_080D0CEC: .4byte sub_80D0BD4 - thumb_func_end sub_80D0C78 - - thumb_func_start sub_80D0CF0 -sub_80D0CF0: @ 80D0CF0 - push {lr} - bl sub_80D3DF4 - ldr r0, _080D0D18 @ =gUnknown_2039A2C - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0 - beq _080D0D14 - ldr r1, _080D0D1C @ =0x040000d4 - ldr r0, _080D0D20 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D0D24 @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D0D14: - pop {r0} - bx r0 - .align 2, 0 -_080D0D18: .4byte gUnknown_2039A2C -_080D0D1C: .4byte 0x040000d4 -_080D0D20: .4byte gScanlineEffectRegBuffers -_080D0D24: .4byte 0x800000a0 - thumb_func_end sub_80D0CF0 - - thumb_func_start sub_80D0D28 -sub_80D0D28: @ 80D0D28 - ldr r1, _080D0D48 @ =gScanlineEffectRegBuffers - ldr r0, _080D0D4C @ =0x04000006 - ldrh r0, [r0] - lsls r0, 1 - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _080D0D50 @ =0x04000014 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - bx lr - .align 2, 0 -_080D0D48: .4byte gScanlineEffectRegBuffers -_080D0D4C: .4byte 0x04000006 -_080D0D50: .4byte 0x04000014 - thumb_func_end sub_80D0D28 - - thumb_func_start sub_80D0D54 -sub_80D0D54: @ 80D0D54 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D0D84 @ =gUnknown_83FA3D4 - ldr r2, _080D0D88 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D0D66: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D0D66 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D0D84: .4byte gUnknown_83FA3D4 -_080D0D88: .4byte gTasks - thumb_func_end sub_80D0D54 - - thumb_func_start sub_80D0D8C -sub_80D0D8C: @ 80D0D8C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r1, 0x4 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _080D0DE0 @ =gUnknown_2039A2C - ldr r1, [r0] - ldr r0, _080D0DE4 @ =gScanlineEffectRegBuffers + 0x780 - movs r2, 0x16 - ldrsh r1, [r1, r2] - movs r2, 0xA0 - lsls r2, 1 - bl memset - ldr r0, _080D0DE8 @ =sub_80D0E80 - bl SetVBlankCallback - ldr r0, _080D0DEC @ =sub_80D0EB8 - bl SetHBlankCallback - movs r0, 0x3 - bl EnableInterrupts - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D0DE0: .4byte gUnknown_2039A2C -_080D0DE4: .4byte gScanlineEffectRegBuffers + 0x780 -_080D0DE8: .4byte sub_80D0E80 -_080D0DEC: .4byte sub_80D0EB8 - thumb_func_end sub_80D0D8C - - thumb_func_start sub_80D0DF0 -sub_80D0DF0: @ 80D0DF0 - push {r4-r7,lr} - ldr r1, _080D0E70 @ =gUnknown_2039A2C - ldr r2, [r1] - ldrb r1, [r2] - movs r1, 0 - strb r1, [r2] - ldrh r4, [r0, 0xA] - ldrh r2, [r0, 0xC] - lsls r3, r2, 16 - asrs r3, 24 - movs r5, 0x84 - lsls r5, 5 - adds r1, r4, r5 - strh r1, [r0, 0xA] - movs r1, 0xC0 - lsls r1, 1 - adds r2, r1 - strh r2, [r0, 0xC] - movs r5, 0 - lsls r7, r3, 16 -_080D0E18: - lsrs r0, r4, 8 - asrs r1, r7, 16 - bl Sin - ldr r1, _080D0E74 @ =gScanlineEffectRegBuffers - lsls r2, r5, 1 - adds r2, r1 - ldr r6, _080D0E70 @ =gUnknown_2039A2C - ldr r1, [r6] - ldrh r1, [r1, 0x16] - adds r0, r1 - strh r0, [r2] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - movs r1, 0x84 - lsls r1, 5 - adds r0, r4, r1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r5, 0x9F - bls _080D0E18 - ldr r0, _080D0E78 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080D0E5E - ldr r0, _080D0E7C @ =sub_80D0D54 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D0E5E: - ldr r0, [r6] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D0E70: .4byte gUnknown_2039A2C -_080D0E74: .4byte gScanlineEffectRegBuffers -_080D0E78: .4byte gPaletteFade -_080D0E7C: .4byte sub_80D0D54 - thumb_func_end sub_80D0DF0 - - thumb_func_start sub_80D0E80 -sub_80D0E80: @ 80D0E80 - push {lr} - bl sub_80D3DF4 - ldr r0, _080D0EA8 @ =gUnknown_2039A2C - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0 - beq _080D0EA4 - ldr r1, _080D0EAC @ =0x040000d4 - ldr r0, _080D0EB0 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D0EB4 @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D0EA4: - pop {r0} - bx r0 - .align 2, 0 -_080D0EA8: .4byte gUnknown_2039A2C -_080D0EAC: .4byte 0x040000d4 -_080D0EB0: .4byte gScanlineEffectRegBuffers -_080D0EB4: .4byte 0x800000a0 - thumb_func_end sub_80D0E80 - - thumb_func_start sub_80D0EB8 -sub_80D0EB8: @ 80D0EB8 - ldr r1, _080D0ED8 @ =gScanlineEffectRegBuffers - ldr r0, _080D0EDC @ =0x04000006 - ldrh r0, [r0] - lsls r0, 1 - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _080D0EE0 @ =0x04000016 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - bx lr - .align 2, 0 -_080D0ED8: .4byte gScanlineEffectRegBuffers -_080D0EDC: .4byte 0x04000006 -_080D0EE0: .4byte 0x04000016 - thumb_func_end sub_80D0EB8 - - thumb_func_start sub_80D0EE4 -sub_80D0EE4: @ 80D0EE4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D0F14 @ =gUnknown_83FA3DC - ldr r2, _080D0F18 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D0EF6: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D0EF6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D0F14: .4byte gUnknown_83FA3DC -_080D0F18: .4byte gTasks - thumb_func_end sub_80D0EE4 - - thumb_func_start sub_80D0F1C -sub_80D0F1C: @ 80D0F1C - push {r4-r6,lr} - sub sp, 0xC - adds r4, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - movs r1, 0 - movs r0, 0x10 - strh r0, [r4, 0xA] - strh r1, [r4, 0xC] - strh r1, [r4, 0x10] - movs r0, 0x80 - lsls r0, 7 - strh r0, [r4, 0x12] - ldr r0, _080D0FB8 @ =gUnknown_2039A2C - ldr r2, [r0] - movs r0, 0x3F - strh r0, [r2, 0x2] - strh r1, [r2, 0x4] - movs r0, 0xF0 - strh r0, [r2, 0x6] - movs r0, 0xA0 - strh r0, [r2, 0x8] - ldr r0, _080D0FBC @ =0x00003f41 - strh r0, [r2, 0xE] - ldrh r0, [r4, 0xA] - lsls r0, 8 - ldrh r1, [r4, 0xC] - orrs r0, r1 - strh r0, [r2, 0x10] - movs r1, 0 - add r5, sp, 0x4 - add r6, sp, 0x8 - ldr r3, _080D0FC0 @ =gScanlineEffectRegBuffers + 0x780 - movs r2, 0xF0 -_080D0F64: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x9F - bls _080D0F64 - ldr r0, _080D0FC4 @ =sub_80D1370 - bl SetVBlankCallback - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_80D3E28 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r1, [sp, 0x4] - ldr r2, _080D0FC8 @ =0x01000400 - mov r0, sp - bl CpuSet - ldr r0, _080D0FCC @ =gUnknown_83F87A0 - ldr r1, [sp, 0x8] - movs r2, 0xB0 - lsls r2, 2 - bl CpuSet - ldr r0, _080D0FD0 @ =gUnknown_83FA638 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D0FB8: .4byte gUnknown_2039A2C -_080D0FBC: .4byte 0x00003f41 -_080D0FC0: .4byte gScanlineEffectRegBuffers + 0x780 -_080D0FC4: .4byte sub_80D1370 -_080D0FC8: .4byte 0x01000400 -_080D0FCC: .4byte gUnknown_83F87A0 -_080D0FD0: .4byte gUnknown_83FA638 - thumb_func_end sub_80D0F1C - - thumb_func_start sub_80D0FD4 -sub_80D0FD4: @ 80D0FD4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - adds r7, r0, 0 - ldr r5, _080D105C @ =gUnknown_83FA784 - add r1, sp, 0xC - add r0, sp, 0x8 - bl sub_80D3E28 - movs r1, 0 - ldr r0, [sp, 0x8] - mov r9, r0 - ldr r6, _080D1060 @ =gScanlineEffectRegBuffers - mov r8, r6 - movs r0, 0xF0 - lsls r0, 8 - mov r12, r0 -_080D0FFA: - movs r0, 0 - lsls r3, r1, 16 - asrs r4, r3, 11 -_080D1000: - lsls r2, r0, 16 - asrs r2, 16 - adds r1, r4, r2 - lsls r1, 1 - add r1, r9 - ldrh r0, [r5] - mov r6, r12 - orrs r0, r6 - strh r0, [r1] - adds r2, 0x1 - lsls r2, 16 - adds r5, 0x2 - lsrs r0, r2, 16 - asrs r2, 16 - cmp r2, 0x1D - ble _080D1000 - movs r1, 0x80 - lsls r1, 9 - adds r0, r3, r1 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _080D0FFA - movs r6, 0x10 - ldrsh r2, [r7, r6] - movs r1, 0x12 - ldrsh r0, [r7, r1] - str r0, [sp] - movs r0, 0xA0 - str r0, [sp, 0x4] - mov r0, r8 - movs r1, 0 - movs r3, 0x84 - bl sub_80D3E74 - ldrh r0, [r7, 0x8] - adds r0, 0x1 - strh r0, [r7, 0x8] - movs r0, 0x1 - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D105C: .4byte gUnknown_83FA784 -_080D1060: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D0FD4 - - thumb_func_start sub_80D1064 -sub_80D1064: @ 80D1064 - push {r4,r5,lr} - sub sp, 0x8 - adds r3, r0, 0 - ldr r2, _080D10EC @ =gUnknown_2039A2C - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r1, [r3, 0xE] - movs r4, 0xE - ldrsh r0, [r3, r4] - adds r4, r2, 0 - cmp r0, 0 - beq _080D108A - subs r0, r1, 0x1 - strh r0, [r3, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _080D1094 -_080D108A: - ldrh r0, [r3, 0xC] - adds r0, 0x1 - strh r0, [r3, 0xC] - movs r0, 0x1 - strh r0, [r3, 0xE] -_080D1094: - ldr r2, [r4] - ldrh r0, [r3, 0xA] - lsls r0, 8 - ldrh r1, [r3, 0xC] - orrs r0, r1 - strh r0, [r2, 0x10] - movs r5, 0xC - ldrsh r0, [r3, r5] - cmp r0, 0xF - ble _080D10AE - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_080D10AE: - ldrh r0, [r3, 0x10] - adds r0, 0xC - strh r0, [r3, 0x10] - ldr r0, _080D10F0 @ =0xfffffe80 - adds r1, r0, 0 - ldrh r5, [r3, 0x12] - adds r1, r5 - strh r1, [r3, 0x12] - ldr r0, _080D10F4 @ =gScanlineEffectRegBuffers - movs r5, 0x10 - ldrsh r2, [r3, r5] - lsls r1, 16 - asrs r1, 24 - str r1, [sp] - movs r1, 0xA0 - str r1, [sp, 0x4] - movs r1, 0 - movs r3, 0x84 - bl sub_80D3E74 - ldr r1, [r4] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D10EC: .4byte gUnknown_2039A2C -_080D10F0: .4byte 0xfffffe80 -_080D10F4: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D1064 - - thumb_func_start sub_80D10F8 -sub_80D10F8: @ 80D10F8 - push {r4,lr} - sub sp, 0x8 - adds r3, r0, 0 - ldr r2, _080D1158 @ =gUnknown_2039A2C - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r1, [r3, 0xE] - movs r4, 0xE - ldrsh r0, [r3, r4] - cmp r0, 0 - beq _080D111C - subs r0, r1, 0x1 - strh r0, [r3, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _080D1126 -_080D111C: - ldrh r0, [r3, 0xA] - subs r0, 0x1 - strh r0, [r3, 0xA] - movs r0, 0x2 - strh r0, [r3, 0xE] -_080D1126: - ldr r2, [r2] - ldrh r0, [r3, 0xA] - lsls r0, 8 - ldrh r1, [r3, 0xC] - orrs r0, r1 - strh r0, [r2, 0x10] - movs r1, 0xA - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _080D1140 - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_080D1140: - ldrh r1, [r3, 0x12] - movs r2, 0x12 - ldrsh r0, [r3, r2] - cmp r0, 0 - ble _080D1160 - ldrh r0, [r3, 0x10] - adds r0, 0xC - strh r0, [r3, 0x10] - ldr r4, _080D115C @ =0xfffffe80 - adds r0, r1, r4 - b _080D1162 - .align 2, 0 -_080D1158: .4byte gUnknown_2039A2C -_080D115C: .4byte 0xfffffe80 -_080D1160: - movs r0, 0 -_080D1162: - strh r0, [r3, 0x12] - ldr r0, _080D1194 @ =gScanlineEffectRegBuffers - movs r1, 0x10 - ldrsh r2, [r3, r1] - ldrh r1, [r3, 0x12] - lsls r1, 16 - asrs r1, 24 - str r1, [sp] - movs r1, 0xA0 - str r1, [sp, 0x4] - movs r1, 0 - movs r3, 0x84 - bl sub_80D3E74 - ldr r0, _080D1198 @ =gUnknown_2039A2C - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D1194: .4byte gScanlineEffectRegBuffers -_080D1198: .4byte gUnknown_2039A2C - thumb_func_end sub_80D10F8 - - thumb_func_start sub_80D119C -sub_80D119C: @ 80D119C - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r0, _080D11C4 @ =gUnknown_2039A2C - ldr r0, [r0] - ldrb r1, [r0] - movs r2, 0 - strb r2, [r0] - ldrh r1, [r4, 0x12] - movs r3, 0x12 - ldrsh r0, [r4, r3] - cmp r0, 0 - ble _080D11CC - ldrh r0, [r4, 0x10] - adds r0, 0xC - strh r0, [r4, 0x10] - ldr r2, _080D11C8 @ =0xfffffe80 - adds r0, r1, r2 - strh r0, [r4, 0x12] - b _080D11CE - .align 2, 0 -_080D11C4: .4byte gUnknown_2039A2C -_080D11C8: .4byte 0xfffffe80 -_080D11CC: - strh r2, [r4, 0x12] -_080D11CE: - ldr r0, _080D1218 @ =gScanlineEffectRegBuffers - movs r3, 0x10 - ldrsh r2, [r4, r3] - ldrh r1, [r4, 0x12] - lsls r1, 16 - asrs r1, 24 - str r1, [sp] - movs r5, 0xA0 - str r5, [sp, 0x4] - movs r1, 0 - movs r3, 0x84 - bl sub_80D3E74 - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - bgt _080D1202 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - movs r1, 0 - strh r0, [r4, 0x8] - strh r5, [r4, 0xA] - movs r0, 0x80 - lsls r0, 1 - strh r0, [r4, 0xC] - strh r1, [r4, 0xE] -_080D1202: - ldr r0, _080D121C @ =gUnknown_2039A2C - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D1218: .4byte gScanlineEffectRegBuffers -_080D121C: .4byte gUnknown_2039A2C - thumb_func_end sub_80D119C - - thumb_func_start sub_80D1220 -sub_80D1220: @ 80D1220 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080D12C4 @ =gUnknown_2039A2C - ldr r0, [r0] - ldrb r1, [r0] - movs r3, 0 - strb r3, [r0] - ldrh r2, [r4, 0xC] - movs r0, 0xC - ldrsh r1, [r4, r0] - ldr r0, _080D12C8 @ =0x000007ff - cmp r1, r0 - bgt _080D1242 - movs r1, 0x80 - lsls r1, 1 - adds r0, r2, r1 - strh r0, [r4, 0xC] -_080D1242: - ldrh r1, [r4, 0xA] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080D125E - ldrh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 24 - subs r0, r1, r0 - strh r0, [r4, 0xA] - lsls r0, 16 - cmp r0, 0 - bge _080D125E - strh r3, [r4, 0xA] -_080D125E: - ldr r0, _080D12CC @ =gScanlineEffectRegBuffers - movs r1, 0xA - ldrsh r3, [r4, r1] - movs r1, 0x78 - movs r2, 0x50 - bl sub_80D3EF0 - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080D129A - ldr r1, _080D12D0 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D12D4 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D12D8 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl sub_80D3E60 - ldr r0, _080D12DC @ =sub_80D0EE4 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D129A: - ldrh r1, [r4, 0xE] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080D12AE - adds r0, r1, 0x1 - strh r0, [r4, 0xE] - ldr r0, _080D12E0 @ =sub_80D139C - bl SetVBlankCallback -_080D12AE: - ldr r0, _080D12C4 @ =gUnknown_2039A2C - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D12C4: .4byte gUnknown_2039A2C -_080D12C8: .4byte 0x000007ff -_080D12CC: .4byte gScanlineEffectRegBuffers -_080D12D0: .4byte 0x040000b0 -_080D12D4: .4byte 0x0000c5ff -_080D12D8: .4byte 0x00007fff -_080D12DC: .4byte sub_80D0EE4 -_080D12E0: .4byte sub_80D139C - thumb_func_end sub_80D1220 - - thumb_func_start sub_80D12E4 -sub_80D12E4: @ 80D12E4 - push {r4,lr} - ldr r1, _080D1354 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D1358 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D135C @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl sub_80D3DF4 - ldr r4, _080D1360 @ =gUnknown_2039A2C - ldr r0, [r4] - ldrb r0, [r0] - cmp r0, 0 - beq _080D131C - ldr r1, _080D1364 @ =0x040000d4 - ldr r0, _080D1368 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D136C @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D131C: - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0xE] - movs r0, 0x50 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x10] - movs r0, 0x52 - bl SetGpuReg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D1354: .4byte 0x040000b0 -_080D1358: .4byte 0x0000c5ff -_080D135C: .4byte 0x00007fff -_080D1360: .4byte gUnknown_2039A2C -_080D1364: .4byte 0x040000d4 -_080D1368: .4byte gScanlineEffectRegBuffers -_080D136C: .4byte 0x800000a0 - thumb_func_end sub_80D12E4 - - thumb_func_start sub_80D1370 -sub_80D1370: @ 80D1370 - push {lr} - bl sub_80D12E4 - ldr r1, _080D138C @ =0x040000b0 - ldr r0, _080D1390 @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r1] - ldr r0, _080D1394 @ =0x04000010 - str r0, [r1, 0x4] - ldr r0, _080D1398 @ =0xa2400001 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_080D138C: .4byte 0x040000b0 -_080D1390: .4byte gScanlineEffectRegBuffers + 0x780 -_080D1394: .4byte 0x04000010 -_080D1398: .4byte 0xa2400001 - thumb_func_end sub_80D1370 - - thumb_func_start sub_80D139C -sub_80D139C: @ 80D139C - push {lr} - bl sub_80D12E4 - ldr r1, _080D13B8 @ =0x040000b0 - ldr r0, _080D13BC @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r1] - ldr r0, _080D13C0 @ =0x04000040 - str r0, [r1, 0x4] - ldr r0, _080D13C4 @ =0xa2400001 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_080D13B8: .4byte 0x040000b0 -_080D13BC: .4byte gScanlineEffectRegBuffers + 0x780 -_080D13C0: .4byte 0x04000040 -_080D13C4: .4byte 0xa2400001 - thumb_func_end sub_80D139C - - thumb_func_start sub_80D13C8 -sub_80D13C8: @ 80D13C8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D13F8 @ =gUnknown_83FA3F4 - ldr r2, _080D13FC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D13DA: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D13DA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D13F8: .4byte gUnknown_83FA3F4 -_080D13FC: .4byte gTasks - thumb_func_end sub_80D13C8 - - thumb_func_start Phase2_Transition_PokeballsTrail_Func1 -Phase2_Transition_PokeballsTrail_Func1: @ 80D1400 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - add r0, sp, 0x4 - add r1, sp, 0x8 - bl sub_80D3E28 - ldr r0, _080D1440 @ =gUnknown_83F8D20 - ldr r1, [sp, 0x8] - movs r2, 0x20 - bl CpuSet - movs r0, 0 - str r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, _080D1444 @ =0x05000200 - mov r0, sp - bl CpuSet - ldr r0, _080D1448 @ =gUnknown_83FA638 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D1440: .4byte gUnknown_83F8D20 -_080D1444: .4byte 0x05000200 -_080D1448: .4byte gUnknown_83FA638 - thumb_func_end Phase2_Transition_PokeballsTrail_Func1 - - thumb_func_start Phase2_Transition_PokeballsTrail_Func2 -Phase2_Transition_PokeballsTrail_Func2: @ 80D144C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r7, r0, 0 - ldr r1, _080D14CC @ =gUnknown_83FA400 - mov r0, sp - movs r2, 0x4 - bl memcpy - add r4, sp, 0x4 - ldr r1, _080D14D0 @ =gUnknown_83FA404 - adds r0, r4, 0 - movs r2, 0xA - bl memcpy - bl Random - movs r5, 0x1 - ands r5, r0 - movs r1, 0 - mov r8, r4 - ldr r6, _080D14D4 @ =gFieldEffectArguments -_080D147A: - lsls r5, 16 - asrs r5, 16 - lsls r0, r5, 1 - add r0, sp - movs r2, 0 - ldrsh r0, [r0, r2] - str r0, [r6] - lsls r4, r1, 16 - asrs r4, 16 - lsls r0, r4, 5 - adds r0, 0x10 - str r0, [r6, 0x4] - str r5, [r6, 0x8] - lsls r0, r4, 1 - add r0, r8 - movs r1, 0 - ldrsh r0, [r0, r1] - str r0, [r6, 0xC] - movs r0, 0x2D - bl FieldEffectStart - adds r4, 0x1 - lsls r4, 16 - movs r0, 0x1 - eors r5, r0 - lsls r5, 16 - lsrs r5, 16 - lsrs r1, r4, 16 - asrs r4, 16 - cmp r4, 0x4 - ble _080D147A - ldrh r0, [r7, 0x8] - adds r0, 0x1 - strh r0, [r7, 0x8] - movs r0, 0 - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D14CC: .4byte gUnknown_83FA400 -_080D14D0: .4byte gUnknown_83FA404 -_080D14D4: .4byte gFieldEffectArguments - thumb_func_end Phase2_Transition_PokeballsTrail_Func2 - - thumb_func_start Phase2_Transition_PokeballsTrail_Func3 -Phase2_Transition_PokeballsTrail_Func3: @ 80D14D8 - push {lr} - movs r0, 0x2D - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _080D14F8 - bl sub_80D3E60 - ldr r0, _080D1500 @ =sub_80D13C8 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D14F8: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D1500: .4byte sub_80D13C8 - thumb_func_end Phase2_Transition_PokeballsTrail_Func3 - - thumb_func_start FldEff_Pokeball -FldEff_Pokeball: @ 80D1504 - push {r4,r5,lr} - ldr r0, _080D1560 @ =gUnknown_83FA5CC - ldr r5, _080D1564 @ =gFieldEffectArguments - movs r2, 0 - ldrsh r1, [r5, r2] - movs r3, 0x4 - ldrsh r2, [r5, r3] - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080D1568 @ =gSprites - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r4, r1 - ldrb r1, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x5] - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4, 0x1] - ldr r0, [r5, 0x8] - strh r0, [r4, 0x2E] - ldr r0, [r5, 0xC] - strh r0, [r4, 0x30] - ldr r0, _080D156C @ =0x0000ffff - strh r0, [r4, 0x32] - adds r0, r4, 0 - bl InitSpriteAffineAnim - ldrb r1, [r5, 0x8] - adds r0, r4, 0 - bl StartSpriteAffineAnim - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D1560: .4byte gUnknown_83FA5CC -_080D1564: .4byte gFieldEffectArguments -_080D1568: .4byte gSprites -_080D156C: .4byte 0x0000ffff - thumb_func_end FldEff_Pokeball - - thumb_func_start sub_80D1570 -sub_80D1570: @ 80D1570 - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r1, _080D1590 @ =gUnknown_83FA40E - mov r0, sp - movs r2, 0x4 - bl memcpy - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080D1594 - subs r0, r1, 0x1 - strh r0, [r4, 0x30] - b _080D162A - .align 2, 0 -_080D1590: .4byte gUnknown_83FA40E -_080D1594: - ldrh r0, [r4, 0x20] - lsls r1, r0, 16 - lsrs r0, r1, 16 - cmp r0, 0xF0 - bhi _080D1606 - asrs r0, r1, 19 - lsls r0, 16 - ldrh r1, [r4, 0x22] - lsls r1, 16 - asrs r1, 19 - lsls r1, 16 - lsrs r6, r1, 16 - lsrs r1, r0, 16 - asrs r5, r0, 16 - movs r2, 0x32 - ldrsh r0, [r4, r2] - cmp r5, r0 - beq _080D1606 - strh r1, [r4, 0x32] - movs r0, 0x8 - bl GetGpuReg - lsls r0, 16 - lsrs r0, 24 - movs r1, 0x1F - ands r0, r1 - lsls r0, 11 - movs r1, 0xC0 - lsls r1, 19 - adds r0, r1 - lsls r2, r6, 16 - asrs r2, 16 - subs r1, r2, 0x2 - lsls r1, 5 - adds r1, r5 - lsls r1, 1 - adds r1, r0 - ldr r6, _080D1634 @ =0x0000f001 - adds r3, r6, 0 - strh r3, [r1] - subs r1, r2, 0x1 - lsls r1, 5 - adds r1, r5 - lsls r1, 1 - adds r1, r0 - strh r3, [r1] - lsls r1, r2, 5 - adds r1, r5 - lsls r1, 1 - adds r1, r0 - strh r3, [r1] - adds r2, 0x1 - lsls r2, 5 - adds r2, r5 - lsls r2, 1 - adds r2, r0 - strh r3, [r2] -_080D1606: - movs r1, 0x2E - ldrsh r0, [r4, r1] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - adds r0, 0xF - lsls r0, 16 - movs r1, 0x87 - lsls r1, 17 - cmp r0, r1 - bls _080D162A - adds r0, r4, 0 - movs r1, 0x2D - bl FieldEffectStop -_080D162A: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D1634: .4byte 0x0000f001 - thumb_func_end sub_80D1570 - - thumb_func_start sub_80D1638 -sub_80D1638: @ 80D1638 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D1668 @ =gUnknown_83FA414 - ldr r2, _080D166C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D164A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D164A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D1668: .4byte gUnknown_83FA414 -_080D166C: .4byte gTasks - thumb_func_end sub_80D1638 - - thumb_func_start sub_80D1670 -sub_80D1670: @ 80D1670 - push {r4,lr} - adds r4, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - ldr r0, _080D16C4 @ =gUnknown_2039A2C - ldr r1, [r0] - movs r0, 0 - strh r0, [r1, 0x2] - movs r0, 0x3F - strh r0, [r1, 0x4] - ldr r0, _080D16C8 @ =0x0000f0f1 - strh r0, [r1, 0x6] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r3, _080D16CC @ =gScanlineEffectRegBuffers + 0x780 - ldr r2, _080D16D0 @ =0x0000f3f4 -_080D1696: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x9F - bls _080D1696 - ldr r0, _080D16D4 @ =sub_80D1ABC - bl SetVBlankCallback - ldr r0, _080D16C4 @ =gUnknown_2039A2C - ldr r1, [r0] - movs r0, 0x78 - strh r0, [r1, 0x2C] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D16C4: .4byte gUnknown_2039A2C -_080D16C8: .4byte 0x0000f0f1 -_080D16CC: .4byte gScanlineEffectRegBuffers + 0x780 -_080D16D0: .4byte 0x0000f3f4 -_080D16D4: .4byte sub_80D1ABC - thumb_func_end sub_80D1670 - - thumb_func_start sub_80D16D8 -sub_80D16D8: @ 80D16D8 - push {r4-r7,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r2, _080D1760 @ =gUnknown_2039A2C - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r1, [r2] - adds r0, r1, 0 - adds r0, 0x24 - movs r2, 0x2C - ldrsh r3, [r1, r2] - movs r1, 0x1 - negs r1, r1 - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - bl sub_80D4088 - ldr r5, _080D1764 @ =gScanlineEffectRegBuffers -_080D1708: - ldr r4, _080D1760 @ =gUnknown_2039A2C - ldr r0, [r4] - movs r7, 0x2A - ldrsh r3, [r0, r7] - lsls r3, 1 - adds r3, r5 - ldrh r1, [r0, 0x28] - adds r1, 0x1 - movs r7, 0xF0 - lsls r7, 7 - adds r2, r7, 0 - orrs r1, r2 - strh r1, [r3] - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl sub_80D4104 - lsls r0, 24 - cmp r0, 0 - beq _080D1708 - ldr r1, [r4] - ldrh r0, [r1, 0x2C] - adds r0, 0x20 - strh r0, [r1, 0x2C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xEF - ble _080D174C - movs r0, 0 - strh r0, [r1, 0x2E] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_080D174C: - ldr r0, [r4] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - add sp, 0xC - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D1760: .4byte gUnknown_2039A2C -_080D1764: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D16D8 - - thumb_func_start sub_80D1768 -sub_80D1768: @ 80D1768 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - mov r8, r0 - add r1, sp, 0xC - movs r0, 0 - strb r0, [r1] - ldr r4, _080D17EC @ =gUnknown_2039A2C - ldr r1, [r4] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x24 - movs r2, 0x2E - ldrsh r1, [r1, r2] - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0xF0 - bl sub_80D4088 - mov r9, r4 - mov r7, r9 - add r5, sp, 0xC -_080D17A6: - movs r1, 0x78 - ldr r3, [r7] - ldrh r0, [r3, 0x28] - adds r0, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - movs r2, 0x2E - ldrsh r0, [r3, r2] - cmp r0, 0x4F - ble _080D17BE - ldrh r1, [r3, 0x28] - movs r4, 0xF0 -_080D17BE: - ldr r6, _080D17F0 @ =gScanlineEffectRegBuffers - movs r0, 0x2A - ldrsh r2, [r3, r0] - lsls r2, 1 - adds r2, r6 - lsls r1, 16 - asrs r1, 8 - lsls r0, r4, 16 - asrs r4, r0, 16 - orrs r4, r1 - strh r4, [r2] - ldrb r0, [r5] - cmp r0, 0 - bne _080D17F4 - adds r0, r3, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl sub_80D4104 - strb r0, [r5] - b _080D17A6 - .align 2, 0 -_080D17EC: .4byte gUnknown_2039A2C -_080D17F0: .4byte gScanlineEffectRegBuffers -_080D17F4: - ldr r1, [r7] - ldrh r0, [r1, 0x2E] - adds r0, 0x10 - strh r0, [r1, 0x2E] - lsls r0, 16 - asrs r2, r0, 16 - cmp r2, 0x9F - ble _080D1812 - movs r0, 0xF0 - strh r0, [r1, 0x2C] - mov r1, r8 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _080D183A -_080D1812: - movs r3, 0x2A - ldrsh r0, [r1, r3] - cmp r0, r2 - bge _080D183A - adds r3, r4, 0 - ldr r5, _080D1858 @ =gUnknown_2039A2C -_080D181E: - ldr r2, [r5] - ldrh r0, [r2, 0x2A] - adds r0, 0x1 - strh r0, [r2, 0x2A] - lsls r0, 16 - asrs r0, 15 - adds r0, r6 - strh r3, [r0] - movs r4, 0x2A - ldrsh r1, [r2, r4] - movs r4, 0x2E - ldrsh r0, [r2, r4] - cmp r1, r0 - blt _080D181E -_080D183A: - mov r1, r9 - ldr r0, [r1] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D1858: .4byte gUnknown_2039A2C - thumb_func_end sub_80D1768 - - thumb_func_start sub_80D185C -sub_80D185C: @ 80D185C - push {r4-r6,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r2, _080D18DC @ =gUnknown_2039A2C - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r1, [r2] - adds r0, r1, 0 - adds r0, 0x24 - movs r2, 0x2C - ldrsh r3, [r1, r2] - movs r1, 0xA0 - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - bl sub_80D4088 - ldr r5, _080D18E0 @ =gScanlineEffectRegBuffers -_080D188A: - ldr r4, _080D18DC @ =gUnknown_2039A2C - ldr r0, [r4] - movs r1, 0x2A - ldrsh r3, [r0, r1] - lsls r3, 1 - adds r3, r5 - ldrh r1, [r0, 0x28] - lsls r1, 8 - movs r2, 0xF0 - orrs r1, r2 - strh r1, [r3] - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl sub_80D4104 - lsls r0, 24 - cmp r0, 0 - beq _080D188A - ldr r1, [r4] - ldrh r0, [r1, 0x2C] - subs r0, 0x20 - strh r0, [r1, 0x2C] - lsls r0, 16 - cmp r0, 0 - bgt _080D18C8 - movs r0, 0xA0 - strh r0, [r1, 0x2E] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_080D18C8: - ldr r0, [r4] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D18DC: .4byte gUnknown_2039A2C -_080D18E0: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D185C - - thumb_func_start sub_80D18E4 -sub_80D18E4: @ 80D18E4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - mov r9, r0 - add r1, sp, 0xC - movs r0, 0 - strb r0, [r1] - ldr r4, _080D196C @ =gUnknown_2039A2C - ldr r1, [r4] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x24 - movs r2, 0x2E - ldrsh r1, [r1, r2] - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0 - bl sub_80D4088 - ldr r7, _080D1970 @ =gScanlineEffectRegBuffers - mov r10, r7 - ldr r0, _080D196C @ =gUnknown_2039A2C - mov r8, r0 - add r6, sp, 0xC -_080D1928: - mov r1, r8 - ldr r4, [r1] - movs r2, 0x2A - ldrsh r0, [r4, r2] - lsls r0, 1 - mov r7, r10 - adds r5, r0, r7 - ldrb r1, [r5] - ldrh r2, [r4, 0x28] - adds r3, r2, 0 - movs r7, 0x2E - ldrsh r0, [r4, r7] - cmp r0, 0x50 - bgt _080D1948 - movs r2, 0x78 - adds r1, r3, 0 -_080D1948: - lsls r0, r2, 16 - asrs r0, 8 - lsls r1, 16 - asrs r1, 16 - orrs r1, r0 - movs r7, 0 - strh r1, [r5] - ldrb r0, [r6] - cmp r0, 0 - bne _080D1974 - adds r0, r4, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl sub_80D4104 - strb r0, [r6] - b _080D1928 - .align 2, 0 -_080D196C: .4byte gUnknown_2039A2C -_080D1970: .4byte gScanlineEffectRegBuffers -_080D1974: - mov r0, r8 - ldr r2, [r0] - ldrh r0, [r2, 0x2E] - subs r0, 0x10 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r3, r0, 16 - cmp r3, 0 - bgt _080D1992 - strh r7, [r2, 0x2C] - mov r1, r9 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _080D19BC -_080D1992: - movs r4, 0x2A - ldrsh r0, [r2, r4] - cmp r0, r3 - ble _080D19BC - ldr r6, _080D19DC @ =gScanlineEffectRegBuffers - adds r3, r1, 0 - ldr r5, _080D19E0 @ =gUnknown_2039A2C -_080D19A0: - ldr r2, [r5] - ldrh r0, [r2, 0x2A] - subs r0, 0x1 - strh r0, [r2, 0x2A] - lsls r0, 16 - asrs r0, 15 - adds r0, r6 - strh r3, [r0] - movs r7, 0x2A - ldrsh r1, [r2, r7] - movs r4, 0x2E - ldrsh r0, [r2, r4] - cmp r1, r0 - bgt _080D19A0 -_080D19BC: - ldr r7, _080D19E0 @ =gUnknown_2039A2C - ldr r0, [r7] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D19DC: .4byte gScanlineEffectRegBuffers -_080D19E0: .4byte gUnknown_2039A2C - thumb_func_end sub_80D18E4 - - thumb_func_start sub_80D19E4 -sub_80D19E4: @ 80D19E4 - push {r4-r7,lr} - sub sp, 0xC - adds r7, r0, 0 - ldr r1, _080D1A74 @ =gUnknown_2039A2C - ldr r0, [r1] - ldrb r2, [r0] - movs r2, 0 - strb r2, [r0] - ldr r1, [r1] - adds r0, r1, 0 - adds r0, 0x24 - movs r4, 0x2C - ldrsh r3, [r1, r4] - str r2, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x78 - movs r2, 0x50 - bl sub_80D4088 - ldr r6, _080D1A78 @ =gScanlineEffectRegBuffers -_080D1A10: - movs r2, 0x78 - ldr r5, _080D1A74 @ =gUnknown_2039A2C - ldr r3, [r5] - ldrh r4, [r3, 0x28] - movs r1, 0x28 - ldrsh r0, [r3, r1] - cmp r0, 0x77 - ble _080D1A24 - movs r2, 0 - movs r4, 0xF0 -_080D1A24: - movs r0, 0x2A - ldrsh r1, [r3, r0] - lsls r1, 1 - adds r1, r6 - lsls r2, 8 - lsls r0, r4, 16 - asrs r0, 16 - orrs r0, r2 - strh r0, [r1] - adds r0, r3, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl sub_80D4104 - lsls r0, 24 - cmp r0, 0 - beq _080D1A10 - ldr r0, [r5] - ldrh r1, [r0, 0x2C] - adds r1, 0x20 - strh r1, [r0, 0x2C] - movs r1, 0x28 - ldrsh r0, [r0, r1] - cmp r0, 0x78 - ble _080D1A5E - ldrh r0, [r7, 0x8] - adds r0, 0x1 - strh r0, [r7, 0x8] -_080D1A5E: - ldr r0, [r5] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - add sp, 0xC - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D1A74: .4byte gUnknown_2039A2C -_080D1A78: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D19E4 - - thumb_func_start sub_80D1A7C -sub_80D1A7C: @ 80D1A7C - push {lr} - ldr r1, _080D1AAC @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D1AB0 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D1AB4 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl sub_80D3E60 - ldr r0, _080D1AB8 @ =sub_80D1638 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D1AAC: .4byte 0x040000b0 -_080D1AB0: .4byte 0x0000c5ff -_080D1AB4: .4byte 0x00007fff -_080D1AB8: .4byte sub_80D1638 - thumb_func_end sub_80D1A7C - - thumb_func_start sub_80D1ABC -sub_80D1ABC: @ 80D1ABC - push {r4,r5,lr} - ldr r5, _080D1B34 @ =0x040000b0 - ldrh r1, [r5, 0xA] - ldr r0, _080D1B38 @ =0x0000c5ff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r1, [r5, 0xA] - ldr r0, _080D1B3C @ =0x00007fff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r0, [r5, 0xA] - bl sub_80D3DF4 - ldr r4, _080D1B40 @ =gUnknown_2039A2C - ldr r0, [r4] - ldrb r0, [r0] - cmp r0, 0 - beq _080D1AF4 - ldr r1, _080D1B44 @ =0x040000d4 - ldr r0, _080D1B48 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D1B4C @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D1AF4: - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r4, _080D1B48 @ =gScanlineEffectRegBuffers - movs r0, 0xF0 - lsls r0, 3 - adds r4, r0 - ldrh r1, [r4] - movs r0, 0x40 - bl SetGpuReg - str r4, [r5] - ldr r0, _080D1B50 @ =0x04000040 - str r0, [r5, 0x4] - ldr r0, _080D1B54 @ =0xa2400001 - str r0, [r5, 0x8] - ldr r0, [r5, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D1B34: .4byte 0x040000b0 -_080D1B38: .4byte 0x0000c5ff -_080D1B3C: .4byte 0x00007fff -_080D1B40: .4byte gUnknown_2039A2C -_080D1B44: .4byte 0x040000d4 -_080D1B48: .4byte gScanlineEffectRegBuffers -_080D1B4C: .4byte 0x800000a0 -_080D1B50: .4byte 0x04000040 -_080D1B54: .4byte 0xa2400001 - thumb_func_end sub_80D1ABC - - thumb_func_start sub_80D1B58 -sub_80D1B58: @ 80D1B58 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D1B88 @ =gUnknown_83FA430 - ldr r2, _080D1B8C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D1B6A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D1B6A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D1B88: .4byte gUnknown_83FA430 -_080D1B8C: .4byte gTasks - thumb_func_end sub_80D1B58 - - thumb_func_start sub_80D1B90 -sub_80D1B90: @ 80D1B90 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - movs r2, 0 - ldr r4, _080D1BD8 @ =gScanlineEffectRegBuffers + 0x780 - ldr r3, _080D1BDC @ =gUnknown_2039A2C -_080D1BA2: - lsls r1, r2, 1 - adds r1, r4 - ldr r0, [r3] - ldrh r0, [r0, 0x16] - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x9F - bls _080D1BA2 - ldr r0, _080D1BE0 @ =sub_80D1CC8 - bl SetVBlankCallback - ldr r0, _080D1BE4 @ =sub_80D1D00 - bl SetHBlankCallback - movs r0, 0x2 - bl EnableInterrupts - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D1BD8: .4byte gScanlineEffectRegBuffers + 0x780 -_080D1BDC: .4byte gUnknown_2039A2C -_080D1BE0: .4byte sub_80D1CC8 -_080D1BE4: .4byte sub_80D1D00 - thumb_func_end sub_80D1B90 - - thumb_func_start sub_80D1BE8 -sub_80D1BE8: @ 80D1BE8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r6, r0, 0 - ldr r0, _080D1CB4 @ =gUnknown_2039A2C - ldr r1, [r0] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r2, [r6, 0xC] - lsls r1, r2, 16 - asrs r0, r1, 24 - lsls r0, 16 - lsrs r3, r0, 16 - ldrh r4, [r6, 0xA] - movs r0, 0xC0 - lsls r0, 1 - mov r8, r0 - movs r5, 0x80 - lsls r5, 3 - adds r0, r4, r5 - strh r0, [r6, 0xA] - ldr r0, _080D1CB8 @ =0x1fff0000 - cmp r1, r0 - bgt _080D1C24 - movs r1, 0xC0 - lsls r1, 1 - adds r0, r2, r1 - strh r0, [r6, 0xC] -_080D1C24: - movs r5, 0 - lsls r7, r3, 16 -_080D1C28: - lsrs r0, r4, 8 - asrs r1, r7, 16 - bl Sin - ldr r1, _080D1CBC @ =gScanlineEffectRegBuffers - lsls r2, r5, 1 - adds r2, r1 - ldr r1, _080D1CB4 @ =gUnknown_2039A2C - ldr r1, [r1] - ldrh r1, [r1, 0x16] - adds r0, r1 - strh r0, [r2] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - mov r1, r8 - adds r0, r4, r1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r5, 0x9F - bls _080D1C28 - ldrh r0, [r6, 0xE] - adds r0, 0x1 - strh r0, [r6, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x29 - bne _080D1C78 - ldrh r0, [r6, 0x10] - adds r0, 0x1 - strh r0, [r6, 0x10] - movs r0, 0x1 - negs r0, r0 - movs r1, 0x8 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r3, 0x10 - bl BeginNormalPaletteFade -_080D1C78: - movs r5, 0x10 - ldrsh r0, [r6, r5] - cmp r0, 0 - beq _080D1C9A - ldr r0, _080D1CC0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080D1C9A - ldr r0, _080D1CC4 @ =sub_80D1B58 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D1C9A: - ldr r0, _080D1CB4 @ =gUnknown_2039A2C - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D1CB4: .4byte gUnknown_2039A2C -_080D1CB8: .4byte 0x1fff0000 -_080D1CBC: .4byte gScanlineEffectRegBuffers -_080D1CC0: .4byte gPaletteFade -_080D1CC4: .4byte sub_80D1B58 - thumb_func_end sub_80D1BE8 - - thumb_func_start sub_80D1CC8 -sub_80D1CC8: @ 80D1CC8 - push {lr} - bl sub_80D3DF4 - ldr r0, _080D1CF0 @ =gUnknown_2039A2C - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0 - beq _080D1CEC - ldr r1, _080D1CF4 @ =0x040000d4 - ldr r0, _080D1CF8 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D1CFC @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D1CEC: - pop {r0} - bx r0 - .align 2, 0 -_080D1CF0: .4byte gUnknown_2039A2C -_080D1CF4: .4byte 0x040000d4 -_080D1CF8: .4byte gScanlineEffectRegBuffers -_080D1CFC: .4byte 0x800000a0 - thumb_func_end sub_80D1CC8 - - thumb_func_start sub_80D1D00 -sub_80D1D00: @ 80D1D00 - ldr r1, _080D1D20 @ =gScanlineEffectRegBuffers - ldr r0, _080D1D24 @ =0x04000006 - ldrh r0, [r0] - lsls r0, 1 - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _080D1D28 @ =0x04000016 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - bx lr - .align 2, 0 -_080D1D20: .4byte gScanlineEffectRegBuffers -_080D1D24: .4byte 0x04000006 -_080D1D28: .4byte 0x04000016 - thumb_func_end sub_80D1D00 - - thumb_func_start sub_80D1D2C -sub_80D1D2C: @ 80D1D2C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D1D5C @ =gUnknown_83FA438 - ldr r2, _080D1D60 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D1D3E: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D1D3E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D1D5C: .4byte gUnknown_83FA438 -_080D1D60: .4byte gTasks - thumb_func_end sub_80D1D2C - - thumb_func_start sub_80D1D64 -sub_80D1D64: @ 80D1D64 - push {r4,lr} - adds r4, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - ldr r0, _080D1DB0 @ =gUnknown_2039A2C - ldr r1, [r0] - movs r2, 0 - movs r0, 0x3F - strh r0, [r1, 0x2] - strh r2, [r1, 0x4] - movs r0, 0xF0 - strh r0, [r1, 0x6] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r3, _080D1DB4 @ =gScanlineEffectRegBuffers + 0x780 - movs r2, 0xF2 -_080D1D8A: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x9F - bls _080D1D8A - ldr r0, _080D1DB8 @ =sub_80D1E98 - bl SetVBlankCallback - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D1DB0: .4byte gUnknown_2039A2C -_080D1DB4: .4byte gScanlineEffectRegBuffers + 0x780 -_080D1DB8: .4byte sub_80D1E98 - thumb_func_end sub_80D1D64 - - thumb_func_start sub_80D1DBC -sub_80D1DBC: @ 80D1DBC - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - ldr r0, _080D1E50 @ =gUnknown_2039A2C - ldr r1, [r0] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r7, _080D1E54 @ =gScanlineEffectRegBuffers - ldrh r0, [r4, 0xC] - ldrb r5, [r4, 0xC] - adds r0, 0x10 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0xA] - adds r0, 0x8 - strh r0, [r4, 0xA] - movs r6, 0 - movs r0, 0x1 - mov r8, r0 -_080D1DE4: - adds r0, r5, 0 - movs r1, 0x28 - bl Sin - ldrh r1, [r4, 0xA] - adds r0, r1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r0, 0 - bge _080D1DFA - movs r1, 0 -_080D1DFA: - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xF0 - ble _080D1E04 - movs r1, 0xF0 -_080D1E04: - lsls r0, r1, 16 - asrs r0, 16 - lsls r1, r0, 8 - movs r2, 0xF1 - orrs r1, r2 - strh r1, [r7] - cmp r0, 0xEF - bgt _080D1E18 - movs r0, 0 - mov r8, r0 -_080D1E18: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r5, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - adds r7, 0x2 - cmp r6, 0x9F - bls _080D1DE4 - mov r1, r8 - cmp r1, 0 - beq _080D1E36 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080D1E36: - ldr r0, _080D1E50 @ =gUnknown_2039A2C - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D1E50: .4byte gUnknown_2039A2C -_080D1E54: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D1DBC - - thumb_func_start sub_80D1E58 -sub_80D1E58: @ 80D1E58 - push {lr} - ldr r1, _080D1E88 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D1E8C @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D1E90 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl sub_80D3E60 - ldr r0, _080D1E94 @ =sub_80D1D2C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D1E88: .4byte 0x040000b0 -_080D1E8C: .4byte 0x0000c5ff -_080D1E90: .4byte 0x00007fff -_080D1E94: .4byte sub_80D1D2C - thumb_func_end sub_80D1E58 - - thumb_func_start sub_80D1E98 -sub_80D1E98: @ 80D1E98 - push {r4,r5,lr} - ldr r4, _080D1F04 @ =0x040000b0 - ldrh r1, [r4, 0xA] - ldr r0, _080D1F08 @ =0x0000c5ff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xA] - ldr r0, _080D1F0C @ =0x00007fff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xA] - bl sub_80D3DF4 - ldr r5, _080D1F10 @ =gUnknown_2039A2C - ldr r0, [r5] - ldrb r0, [r0] - cmp r0, 0 - beq _080D1ED0 - ldr r1, _080D1F14 @ =0x040000d4 - ldr r0, _080D1F18 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D1F1C @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D1ED0: - ldr r0, [r5] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r5] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r5] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r0, _080D1F20 @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r4] - ldr r0, _080D1F24 @ =0x04000040 - str r0, [r4, 0x4] - ldr r0, _080D1F28 @ =0xa2400001 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D1F04: .4byte 0x040000b0 -_080D1F08: .4byte 0x0000c5ff -_080D1F0C: .4byte 0x00007fff -_080D1F10: .4byte gUnknown_2039A2C -_080D1F14: .4byte 0x040000d4 -_080D1F18: .4byte gScanlineEffectRegBuffers -_080D1F1C: .4byte 0x800000a0 -_080D1F20: .4byte gScanlineEffectRegBuffers + 0x780 -_080D1F24: .4byte 0x04000040 -_080D1F28: .4byte 0xa2400001 - thumb_func_end sub_80D1E98 - - thumb_func_start sub_80D1F2C -sub_80D1F2C: @ 80D1F2C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D1F5C @ =gUnknown_83FA464 - ldr r2, _080D1F60 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D1F3E: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D1F3E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D1F5C: .4byte gUnknown_83FA464 -_080D1F60: .4byte gTasks - thumb_func_end sub_80D1F2C - - thumb_func_start sub_80D1F64 -sub_80D1F64: @ 80D1F64 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp] - lsls r1, 16 - lsrs r5, r1, 16 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x4] - movs r0, 0 - mov r10, r0 - movs r1, 0xA0 - lsls r1, 17 - ldr r4, _080D1FD8 @ =gScanlineEffectRegBuffers + 0x780 - ldr r3, _080D1FDC @ =0x000003bf - movs r2, 0x78 -_080D1F8E: - asrs r0, r1, 16 - lsls r1, r0, 1 - adds r1, r4 - strh r2, [r1] - adds r0, 0x1 - lsls r1, r0, 16 - asrs r0, r1, 16 - cmp r0, r3 - ble _080D1F8E - lsls r0, r5, 16 - movs r1, 0 - mov r9, r1 - str r0, [sp, 0xC] - cmp r0, 0 - bgt _080D1FAE - b _080D221A -_080D1FAE: - mov r3, r10 - lsrs r2, r3, 3 - ldr r4, [sp] - adds r0, r2, r4 - lsls r0, 16 - lsrs r3, r0, 16 - mov r0, r10 - adds r0, 0x1 - asrs r1, r0, 3 - str r0, [sp, 0x8] - cmp r2, r1 - beq _080D1FE0 - lsls r1, r3, 16 - movs r6, 0x80 - lsls r6, 9 - adds r0, r1, r6 - lsrs r0, 16 - mov r8, r0 - adds r0, r1, 0 - b _080D1FE6 - .align 2, 0 -_080D1FD8: .4byte gScanlineEffectRegBuffers + 0x780 -_080D1FDC: .4byte 0x000003bf -_080D1FE0: - lsls r0, r3, 16 - lsrs r1, r0, 16 - mov r8, r1 -_080D1FE6: - asrs r4, r0, 16 - mov r0, r10 - adds r1, r4, 0 - bl Sin - movs r5, 0x50 - subs r0, r5, r0 - lsls r0, 16 - lsrs r2, r0, 16 - mov r0, r10 - adds r1, r4, 0 - str r2, [sp, 0x10] - bl Cos - adds r0, 0x78 - lsls r0, 16 - lsrs r7, r0, 16 - ldr r6, [sp, 0x8] - mov r3, r8 - lsls r4, r3, 16 - asrs r4, 16 - adds r0, r6, 0 - adds r1, r4, 0 - bl Sin - subs r5, r0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r6, 0 - adds r1, r4, 0 - bl Cos - adds r0, 0x78 - lsls r0, 16 - lsrs r3, r0, 16 - ldr r2, [sp, 0x10] - lsls r0, r2, 16 - asrs r1, r0, 16 - cmp r1, 0 - bge _080D203E - lsls r0, r5, 16 - cmp r0, 0 - bge _080D203E - b _080D21F8 -_080D203E: - cmp r1, 0x9F - ble _080D204C - lsls r0, r5, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _080D204C - b _080D21F8 -_080D204C: - cmp r1, 0 - bge _080D2052 - movs r2, 0 -_080D2052: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _080D205C - movs r2, 0x9F -_080D205C: - lsls r0, r7, 16 - cmp r0, 0 - bge _080D2064 - movs r7, 0 -_080D2064: - lsls r0, r7, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080D206E - movs r7, 0xFF -_080D206E: - lsls r0, r5, 16 - cmp r0, 0 - bge _080D2076 - movs r5, 0 -_080D2076: - lsls r0, r5, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _080D2080 - movs r5, 0x9F -_080D2080: - lsls r0, r3, 16 - cmp r0, 0 - bge _080D2088 - movs r3, 0 -_080D2088: - lsls r0, r3, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080D2092 - movs r3, 0xFF -_080D2092: - lsls r0, r5, 16 - asrs r0, 16 - lsls r1, r2, 16 - asrs r2, r1, 16 - subs r0, r2 - lsls r0, 16 - lsrs r5, r0, 16 - mov r0, r10 - subs r0, 0x40 - lsls r0, 24 - adds r6, r1, 0 - cmp r0, 0 - blt _080D2158 - movs r4, 0xA0 - lsls r4, 1 - adds r0, r2, r4 - lsls r0, 1 - ldr r1, _080D20E8 @ =gScanlineEffectRegBuffers + 0x780 - adds r0, r1 - strh r7, [r0] - lsls r0, r5, 16 - adds r4, r0, 0 - cmp r4, 0 - bne _080D20C4 - b _080D21F8 -_080D20C4: - lsls r0, r3, 16 - asrs r0, 16 - lsls r1, r7, 16 - asrs r2, r1, 16 - subs r0, r2 - lsls r0, 16 - lsrs r3, r0, 16 - asrs r0, 16 - mov r8, r0 - movs r0, 0x1 - negs r0, r0 - cmp r8, r0 - bge _080D20EC - cmp r2, 0x1 - ble _080D20EC - subs r0, r2, 0x1 - b _080D20FC - .align 2, 0 -_080D20E8: .4byte gScanlineEffectRegBuffers + 0x780 -_080D20EC: - lsls r0, r3, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080D2100 - asrs r0, r1, 16 - cmp r0, 0xFE - bgt _080D2100 - adds r0, 0x1 -_080D20FC: - lsls r0, 16 - lsrs r7, r0, 16 -_080D2100: - adds r0, r4, 0 - asrs r1, r0, 16 - cmp r1, 0 - bge _080D212C - asrs r2, r6, 16 - ldr r3, _080D2128 @ =gScanlineEffectRegBuffers + 0x780 -_080D210C: - asrs r1, r0, 16 - adds r0, r2, r1 - movs r4, 0xA0 - lsls r4, 1 - adds r0, r4 - lsls r0, 1 - adds r0, r3 - strh r7, [r0] - adds r1, 0x1 - lsls r0, r1, 16 - cmp r0, 0 - blt _080D210C - b _080D21F8 - .align 2, 0 -_080D2128: .4byte gScanlineEffectRegBuffers + 0x780 -_080D212C: - cmp r1, 0 - ble _080D21F8 - asrs r2, r6, 16 - ldr r3, _080D2154 @ =gScanlineEffectRegBuffers + 0x780 -_080D2134: - lsls r1, r5, 16 - asrs r1, 16 - adds r0, r2, r1 - movs r6, 0xA0 - lsls r6, 1 - adds r0, r6 - lsls r0, 1 - adds r0, r3 - strh r7, [r0] - subs r1, 0x1 - lsls r1, 16 - lsrs r5, r1, 16 - cmp r1, 0 - bgt _080D2134 - b _080D21F8 - .align 2, 0 -_080D2154: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2158: - movs r1, 0xF0 - lsls r1, 1 - adds r0, r2, r1 - lsls r0, 1 - ldr r2, _080D2190 @ =gScanlineEffectRegBuffers + 0x780 - adds r0, r2 - strh r7, [r0] - lsls r0, r5, 16 - adds r4, r0, 0 - cmp r4, 0 - beq _080D21F8 - lsls r0, r3, 16 - asrs r0, 16 - lsls r1, r7, 16 - asrs r2, r1, 16 - subs r0, r2 - lsls r0, 16 - lsrs r3, r0, 16 - asrs r0, 16 - mov r8, r0 - movs r0, 0x1 - negs r0, r0 - cmp r8, r0 - bge _080D2194 - cmp r2, 0x1 - ble _080D2194 - subs r0, r2, 0x1 - b _080D21A4 - .align 2, 0 -_080D2190: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2194: - lsls r0, r3, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080D21A8 - asrs r0, r1, 16 - cmp r0, 0xFE - bgt _080D21A8 - adds r0, 0x1 -_080D21A4: - lsls r0, 16 - lsrs r7, r0, 16 -_080D21A8: - adds r0, r4, 0 - asrs r1, r0, 16 - cmp r1, 0 - bge _080D21D4 - asrs r2, r6, 16 - ldr r3, _080D21D0 @ =gScanlineEffectRegBuffers + 0x780 -_080D21B4: - asrs r1, r0, 16 - adds r0, r2, r1 - movs r4, 0xF0 - lsls r4, 1 - adds r0, r4 - lsls r0, 1 - adds r0, r3 - strh r7, [r0] - adds r1, 0x1 - lsls r0, r1, 16 - cmp r0, 0 - blt _080D21B4 - b _080D21F8 - .align 2, 0 -_080D21D0: .4byte gScanlineEffectRegBuffers + 0x780 -_080D21D4: - cmp r1, 0 - ble _080D21F8 - asrs r2, r6, 16 - ldr r3, _080D2270 @ =gScanlineEffectRegBuffers + 0x780 -_080D21DC: - lsls r1, r5, 16 - asrs r1, 16 - adds r0, r2, r1 - movs r6, 0xF0 - lsls r6, 1 - adds r0, r6 - lsls r0, 1 - adds r0, r3 - strh r7, [r0] - subs r1, 0x1 - lsls r1, 16 - lsrs r5, r1, 16 - cmp r1, 0 - bgt _080D21DC -_080D21F8: - mov r1, r9 - lsls r0, r1, 16 - movs r2, 0x80 - lsls r2, 9 - adds r0, r2 - ldr r3, [sp, 0x8] - lsls r1, r3, 24 - lsrs r1, 24 - mov r10, r1 - lsrs r4, r0, 16 - mov r9, r4 - asrs r0, 16 - ldr r6, [sp, 0xC] - asrs r1, r6, 12 - cmp r0, r1 - bge _080D221A - b _080D1FAE -_080D221A: - ldr r0, [sp, 0x4] - cmp r0, 0 - beq _080D222C - movs r0, 0xC0 - lsls r0, 10 - ldr r1, [sp, 0xC] - ands r0, r1 - cmp r0, 0 - bne _080D2274 -_080D222C: - movs r2, 0 - mov r9, r2 - ldr r4, _080D2270 @ =gScanlineEffectRegBuffers + 0x780 - movs r5, 0xA0 - lsls r5, 1 -_080D2236: - mov r3, r9 - lsls r1, r3, 16 - asrs r1, 16 - lsls r3, r1, 1 - ldr r6, [sp, 0x4] - adds r3, r6 - lsls r3, 1 - adds r3, r4 - adds r0, r1, r5 - lsls r0, 1 - adds r0, r4 - ldrh r2, [r0] - lsls r2, 8 - movs r6, 0xF0 - lsls r6, 1 - adds r0, r1, r6 - lsls r0, 1 - adds r0, r4 - ldrh r0, [r0] - orrs r2, r0 - strh r2, [r3] - adds r1, 0x1 - lsls r1, 16 - lsrs r0, r1, 16 - mov r9, r0 - asrs r1, 16 - cmp r1, 0x9F - ble _080D2236 - b _080D251C - .align 2, 0 -_080D2270: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2274: - ldr r1, [sp, 0xC] - asrs r4, r1, 16 - lsls r0, r4, 20 - asrs r0, 16 - lsls r5, r4, 1 - ldr r2, [sp] - lsls r1, r2, 16 - asrs r1, 16 - adds r1, r5 - lsls r1, 16 - asrs r1, 16 - bl Sin - lsls r0, 16 - lsrs r2, r0, 16 - cmp r4, 0 - bge _080D2298 - adds r4, 0x3 -_080D2298: - asrs r0, r4, 2 - cmp r0, 0x1 - beq _080D234C - cmp r0, 0x1 - bgt _080D22A8 - cmp r0, 0 - beq _080D22B6 - b _080D24DA -_080D22A8: - cmp r0, 0x2 - bne _080D22AE - b _080D23CC -_080D22AE: - cmp r0, 0x3 - bne _080D22B4 - b _080D2466 -_080D22B4: - b _080D24DA -_080D22B6: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x50 - ble _080D22C0 - movs r2, 0x50 -_080D22C0: - mov r9, r2 - lsls r1, r2, 16 - cmp r1, 0 - bgt _080D22CA - b _080D24DA -_080D22CA: - ldr r0, _080D2320 @ =gUnknown_83FA444 - adds r0, r5, r0 - movs r3, 0 - ldrsh r4, [r0, r3] - ldr r6, _080D2324 @ =gScanlineEffectRegBuffers + 0x780 -_080D22D4: - ldr r0, _080D2328 @ =gUnknown_2039A2C - ldr r5, [r0] - asrs r2, r1, 16 - adds r0, r2, 0 - muls r0, r4 - asrs r0, 8 - adds r0, 0x78 - lsls r1, r0, 16 - lsrs r7, r1, 16 - strh r0, [r5, 0x28] - lsls r1, r7, 16 - lsrs r0, r1, 16 - cmp r0, 0xFF - bhi _080D2334 - movs r3, 0xC8 - lsls r3, 1 - adds r0, r3, 0 - subs r0, r2 - strh r0, [r5, 0x14] - adds r0, r3, 0 - subs r0, r2 - lsls r0, 1 - adds r3, r0, r6 - ldrh r0, [r3] - strh r0, [r5, 0x38] - movs r0, 0x8C - lsls r0, 2 - subs r0, r2 - lsls r0, 1 - adds r2, r0, r6 - ldrh r0, [r2] - asrs r1, 16 - cmp r0, r1 - bge _080D232C - movs r0, 0x78 - strh r0, [r2] - b _080D2334 - .align 2, 0 -_080D2320: .4byte gUnknown_83FA444 -_080D2324: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2328: .4byte gUnknown_2039A2C -_080D232C: - ldrh r0, [r3] - cmp r0, r1 - bge _080D2334 - strh r7, [r3] -_080D2334: - mov r1, r9 - lsls r0, r1, 16 - ldr r2, _080D2348 @ =0xffff0000 - adds r0, r2 - lsrs r0, 16 - mov r9, r0 - lsls r1, r0, 16 - cmp r1, 0 - bgt _080D22D4 - b _080D24DA - .align 2, 0 -_080D2348: .4byte 0xffff0000 -_080D234C: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x50 - ble _080D2356 - movs r2, 0x50 -_080D2356: - mov r9, r2 - lsls r1, r2, 16 - cmp r1, 0 - bgt _080D2360 - b _080D24DA -_080D2360: - ldr r0, _080D23BC @ =gUnknown_83FA444 - adds r0, r5, r0 - movs r3, 0 - ldrsh r4, [r0, r3] - ldr r6, _080D23C0 @ =gScanlineEffectRegBuffers + 0x780 -_080D236A: - ldr r0, _080D23C4 @ =gUnknown_2039A2C - ldr r3, [r0] - asrs r2, r1, 16 - adds r0, r2, 0 - muls r0, r4 - asrs r0, 8 - adds r0, 0x78 - lsls r1, r0, 16 - lsrs r7, r1, 16 - strh r0, [r3, 0x28] - lsls r5, r7, 16 - lsrs r0, r5, 16 - cmp r0, 0xFF - bhi _080D23A6 - movs r1, 0xC8 - lsls r1, 1 - adds r0, r1, 0 - subs r0, r2 - strh r0, [r3, 0x14] - adds r0, r1, 0 - subs r0, r2 - lsls r0, 1 - adds r2, r0, r6 - ldrh r0, [r2] - strh r0, [r3, 0x38] - ldrh r1, [r2] - asrs r0, r5, 16 - cmp r1, r0 - bge _080D23A6 - strh r7, [r2] -_080D23A6: - mov r2, r9 - lsls r0, r2, 16 - ldr r3, _080D23C8 @ =0xffff0000 - adds r0, r3 - lsrs r0, 16 - mov r9, r0 - lsls r1, r0, 16 - cmp r1, 0 - bgt _080D236A - b _080D24DA - .align 2, 0 -_080D23BC: .4byte gUnknown_83FA444 -_080D23C0: .4byte gScanlineEffectRegBuffers + 0x780 -_080D23C4: .4byte gUnknown_2039A2C -_080D23C8: .4byte 0xffff0000 -_080D23CC: - lsls r0, r2, 16 - asrs r0, 16 - movs r1, 0x4F - negs r1, r1 - cmp r0, r1 - bge _080D23DA - ldr r2, _080D2438 @ =0x0000ffb1 -_080D23DA: - mov r9, r2 - lsls r1, r2, 16 - cmp r1, 0 - bgt _080D24DA - ldr r0, _080D243C @ =gUnknown_83FA444 - adds r0, r5, r0 - movs r6, 0 - ldrsh r4, [r0, r6] - ldr r6, _080D2440 @ =gScanlineEffectRegBuffers + 0x780 -_080D23EC: - ldr r0, _080D2444 @ =gUnknown_2039A2C - ldr r5, [r0] - asrs r2, r1, 16 - adds r0, r2, 0 - muls r0, r4 - asrs r0, 8 - adds r0, 0x78 - lsls r1, r0, 16 - lsrs r7, r1, 16 - strh r0, [r5, 0x28] - lsls r1, r7, 16 - lsrs r0, r1, 16 - cmp r0, 0xFF - bhi _080D2450 - movs r3, 0x8C - lsls r3, 2 - adds r0, r3, 0 - subs r0, r2 - strh r0, [r5, 0x14] - adds r0, r3, 0 - subs r0, r2 - lsls r0, 1 - adds r3, r0, r6 - ldrh r0, [r3] - strh r0, [r5, 0x38] - movs r0, 0xC8 - lsls r0, 1 - subs r0, r2 - lsls r0, 1 - adds r2, r0, r6 - ldrh r0, [r2] - asrs r1, 16 - cmp r0, r1 - blt _080D2448 - movs r0, 0x78 - strh r0, [r2] - b _080D2450 - .align 2, 0 -_080D2438: .4byte 0x0000ffb1 -_080D243C: .4byte gUnknown_83FA444 -_080D2440: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2444: .4byte gUnknown_2039A2C -_080D2448: - ldrh r0, [r3] - cmp r0, r1 - ble _080D2450 - strh r7, [r3] -_080D2450: - mov r1, r9 - lsls r0, r1, 16 - movs r2, 0x80 - lsls r2, 9 - adds r0, r2 - lsrs r0, 16 - mov r9, r0 - lsls r1, r0, 16 - cmp r1, 0 - ble _080D23EC - b _080D24DA -_080D2466: - lsls r0, r2, 16 - asrs r0, 16 - movs r1, 0x4F - negs r1, r1 - cmp r0, r1 - bge _080D2474 - ldr r2, _080D252C @ =0x0000ffb1 -_080D2474: - mov r9, r2 - lsls r1, r2, 16 - cmp r1, 0 - bgt _080D24DA - ldr r0, _080D2530 @ =gUnknown_83FA444 - adds r0, r5, r0 - movs r3, 0 - ldrsh r4, [r0, r3] - ldr r6, _080D2534 @ =gUnknown_2039A2C - mov r8, r6 - ldr r6, _080D2538 @ =gScanlineEffectRegBuffers + 0x780 -_080D248A: - mov r0, r8 - ldr r3, [r0] - asrs r2, r1, 16 - adds r0, r2, 0 - muls r0, r4 - asrs r0, 8 - adds r0, 0x78 - lsls r1, r0, 16 - lsrs r7, r1, 16 - strh r0, [r3, 0x28] - lsls r5, r7, 16 - lsrs r0, r5, 16 - cmp r0, 0xFF - bhi _080D24C6 - movs r1, 0x8C - lsls r1, 2 - adds r0, r1, 0 - subs r0, r2 - strh r0, [r3, 0x14] - adds r0, r1, 0 - subs r0, r2 - lsls r0, 1 - adds r2, r0, r6 - ldrh r0, [r2] - strh r0, [r3, 0x38] - ldrh r1, [r2] - asrs r0, r5, 16 - cmp r1, r0 - ble _080D24C6 - strh r7, [r2] -_080D24C6: - mov r2, r9 - lsls r0, r2, 16 - movs r3, 0x80 - lsls r3, 9 - adds r0, r3 - lsrs r0, 16 - mov r9, r0 - lsls r1, r0, 16 - cmp r1, 0 - ble _080D248A -_080D24DA: - movs r4, 0 - mov r9, r4 - ldr r4, _080D2538 @ =gScanlineEffectRegBuffers + 0x780 - movs r5, 0xA0 - lsls r5, 1 -_080D24E4: - mov r6, r9 - lsls r1, r6, 16 - asrs r1, 16 - lsls r3, r1, 1 - ldr r0, [sp, 0x4] - adds r3, r0 - lsls r3, 1 - adds r3, r4 - adds r0, r1, r5 - lsls r0, 1 - adds r0, r4 - ldrh r2, [r0] - lsls r2, 8 - movs r6, 0xF0 - lsls r6, 1 - adds r0, r1, r6 - lsls r0, 1 - adds r0, r4 - ldrh r0, [r0] - orrs r2, r0 - strh r2, [r3] - adds r1, 0x1 - lsls r1, 16 - lsrs r0, r1, 16 - mov r9, r0 - asrs r1, 16 - cmp r1, 0x9F - ble _080D24E4 -_080D251C: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D252C: .4byte 0x0000ffb1 -_080D2530: .4byte gUnknown_83FA444 -_080D2534: .4byte gUnknown_2039A2C -_080D2538: .4byte gScanlineEffectRegBuffers + 0x780 - thumb_func_end sub_80D1F64 - - thumb_func_start sub_80D253C -sub_80D253C: @ 80D253C - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - ldr r0, _080D25A0 @ =gUnknown_2039A2C - ldr r1, [r0] - movs r4, 0 - strh r4, [r1, 0x2] - movs r0, 0x3F - strh r0, [r1, 0x4] - ldr r0, _080D25A4 @ =0x00007878 - strh r0, [r1, 0x6] - ldr r0, _080D25A8 @ =0x00003070 - strh r0, [r1, 0x8] - ldr r0, _080D25AC @ =0x00001090 - strh r0, [r1, 0xC] - strh r4, [r1, 0x20] - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl sub_80D1F64 - movs r0, 0 - movs r1, 0 - movs r2, 0x1 - bl sub_80D1F64 - ldr r1, _080D25B0 @ =0x040000d4 - ldr r0, _080D25B4 @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r1] - ldr r2, _080D25B8 @ =0xfffff880 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D25BC @ =0x80000140 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r0, _080D25C0 @ =sub_80D2698 - bl SetVBlankCallback - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - strh r4, [r5, 0xA] - strh r4, [r5, 0xC] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D25A0: .4byte gUnknown_2039A2C -_080D25A4: .4byte 0x00007878 -_080D25A8: .4byte 0x00003070 -_080D25AC: .4byte 0x00001090 -_080D25B0: .4byte 0x040000d4 -_080D25B4: .4byte gScanlineEffectRegBuffers + 0x780 -_080D25B8: .4byte 0xfffff880 -_080D25BC: .4byte 0x80000140 -_080D25C0: .4byte sub_80D2698 - thumb_func_end sub_80D253C - - thumb_func_start sub_80D25C4 -sub_80D25C4: @ 80D25C4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - movs r1, 0xC - ldrsh r0, [r4, r1] - movs r2, 0xA - ldrsh r1, [r4, r2] - movs r2, 0x1 - bl sub_80D1F64 - ldr r5, _080D2694 @ =gUnknown_2039A2C - ldr r1, [r5] - ldrb r0, [r1] - movs r2, 0x1 - mov r8, r2 - ldrb r2, [r1] - movs r7, 0 - mov r2, r8 - orrs r0, r2 - strb r0, [r1] - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x11 - bne _080D2686 - movs r1, 0xC - ldrsh r0, [r4, r1] - movs r1, 0x10 - movs r2, 0 - bl sub_80D1F64 - ldrh r1, [r4, 0xC] - movs r6, 0x30 - subs r0, r6, r1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r0, 0 - bge _080D2618 - movs r3, 0 -_080D2618: - adds r0, r1, 0 - adds r0, 0x70 - lsls r0, 16 - lsrs r2, r0, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080D2628 - movs r2, 0xFF -_080D2628: - ldr r0, [r5] - orrs r2, r3 - strh r2, [r0, 0x8] - ldrh r0, [r4, 0xC] - adds r0, 0x20 - strh r0, [r4, 0xC] - movs r0, 0 - strh r0, [r4, 0xA] - movs r2, 0xC - ldrsh r0, [r4, r2] - movs r1, 0 - movs r2, 0x1 - bl sub_80D1F64 - ldrh r1, [r4, 0xC] - subs r0, r6, r1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r0, 0 - bge _080D2652 - movs r3, 0 -_080D2652: - adds r0, r1, 0 - adds r0, 0x70 - lsls r0, 16 - lsrs r2, r0, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080D2662 - movs r2, 0xFF -_080D2662: - ldr r1, [r5] - orrs r2, r3 - strh r2, [r1, 0xC] - ldrb r0, [r1] - mov r2, r8 - orrs r0, r2 - ldrb r2, [r1] - orrs r0, r7 - strb r0, [r1] - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x9F - ble _080D2686 - ldr r1, [r5] - movs r0, 0x1 - strh r0, [r1, 0x20] - bl sub_80D3E60 -_080D2686: - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D2694: .4byte gUnknown_2039A2C - thumb_func_end sub_80D25C4 - - thumb_func_start sub_80D2698 -sub_80D2698: @ 80D2698 - push {r4-r6,lr} - ldr r5, _080D26D0 @ =0x040000b0 - ldrh r1, [r5, 0xA] - ldr r0, _080D26D4 @ =0x0000c5ff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r1, [r5, 0xA] - ldr r0, _080D26D8 @ =0x00007fff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r0, [r5, 0xA] - bl sub_80D3DF4 - ldr r4, _080D26DC @ =gUnknown_2039A2C - ldr r2, [r4] - movs r0, 0x20 - ldrsh r3, [r2, r0] - cmp r3, 0 - beq _080D26E4 - ldr r0, _080D26E0 @ =sub_80D1F2C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - b _080D2746 - .align 2, 0 -_080D26D0: .4byte 0x040000b0 -_080D26D4: .4byte 0x0000c5ff -_080D26D8: .4byte 0x00007fff -_080D26DC: .4byte gUnknown_2039A2C -_080D26E0: .4byte sub_80D1F2C -_080D26E4: - ldrb r0, [r2] - cmp r0, 0 - beq _080D2700 - ldr r1, _080D274C @ =0x040000d4 - ldr r0, _080D2750 @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r1] - ldr r6, _080D2754 @ =0xfffff880 - adds r0, r6 - str r0, [r1, 0x4] - ldr r0, _080D2758 @ =0x80000140 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldrb r0, [r2] - strb r3, [r2] -_080D2700: - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0xC] - movs r0, 0x46 - bl SetGpuReg - ldr r4, _080D275C @ =gScanlineEffectRegBuffers - ldrh r1, [r4] - movs r0, 0x40 - bl SetGpuReg - ldrh r1, [r4, 0x2] - movs r0, 0x42 - bl SetGpuReg - str r4, [r5] - ldr r0, _080D2760 @ =0x04000040 - str r0, [r5, 0x4] - ldr r0, _080D2764 @ =0xa6400001 - str r0, [r5, 0x8] - ldr r0, [r5, 0x8] -_080D2746: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D274C: .4byte 0x040000d4 -_080D2750: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2754: .4byte 0xfffff880 -_080D2758: .4byte 0x80000140 -_080D275C: .4byte gScanlineEffectRegBuffers -_080D2760: .4byte 0x04000040 -_080D2764: .4byte 0xa6400001 - thumb_func_end sub_80D2698 - - thumb_func_start Phase2Task_Transition_Sydney -Phase2Task_Transition_Sydney: @ 80D2768 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D2784 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - strh r2, [r1, 0x26] - bl Phase2Task_MugShotTransition - pop {r0} - bx r0 - .align 2, 0 -_080D2784: .4byte gTasks - thumb_func_end Phase2Task_Transition_Sydney - - thumb_func_start Phase2Task_Transition_Phoebe -Phase2Task_Transition_Phoebe: @ 80D2788 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D27A4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x1 - strh r2, [r1, 0x26] - bl Phase2Task_MugShotTransition - pop {r0} - bx r0 - .align 2, 0 -_080D27A4: .4byte gTasks - thumb_func_end Phase2Task_Transition_Phoebe - - thumb_func_start Phase2Task_Transition_Glacia -Phase2Task_Transition_Glacia: @ 80D27A8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D27C4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x2 - strh r2, [r1, 0x26] - bl Phase2Task_MugShotTransition - pop {r0} - bx r0 - .align 2, 0 -_080D27C4: .4byte gTasks - thumb_func_end Phase2Task_Transition_Glacia - - thumb_func_start Phase2Task_Transition_Drake -Phase2Task_Transition_Drake: @ 80D27C8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D27E4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x3 - strh r2, [r1, 0x26] - bl Phase2Task_MugShotTransition - pop {r0} - bx r0 - .align 2, 0 -_080D27E4: .4byte gTasks - thumb_func_end Phase2Task_Transition_Drake - - thumb_func_start Phase2Task_Transition_Steven -Phase2Task_Transition_Steven: @ 80D27E8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D2804 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x4 - strh r2, [r1, 0x26] - bl Phase2Task_MugShotTransition - pop {r0} - bx r0 - .align 2, 0 -_080D2804: .4byte gTasks - thumb_func_end Phase2Task_Transition_Steven - - thumb_func_start Phase2Task_MugShotTransition -Phase2Task_MugShotTransition: @ 80D2808 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D2838 @ =gUnknown_83FA46C - ldr r2, _080D283C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D281A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D281A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D2838: .4byte gUnknown_83FA46C -_080D283C: .4byte gTasks - thumb_func_end Phase2Task_MugShotTransition - - thumb_func_start Phase2_Mugshot_Func1 -Phase2_Mugshot_Func1: @ 80D2840 - push {r4,lr} - adds r4, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - adds r0, r4, 0 - bl sub_80D2EA4 - movs r0, 0 - strh r0, [r4, 0xA] - movs r0, 0x1 - strh r0, [r4, 0xC] - movs r0, 0xEF - strh r0, [r4, 0xE] - ldr r0, _080D2898 @ =gUnknown_2039A2C - ldr r1, [r0] - movs r0, 0x3F - strh r0, [r1, 0x2] - movs r0, 0x3E - strh r0, [r1, 0x4] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r3, _080D289C @ =gScanlineEffectRegBuffers + 0x780 - ldr r2, _080D28A0 @ =0x0000f0f1 -_080D2874: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x9F - bls _080D2874 - ldr r0, _080D28A4 @ =sub_80D2D50 - bl SetVBlankCallback - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D2898: .4byte gUnknown_2039A2C -_080D289C: .4byte gScanlineEffectRegBuffers + 0x780 -_080D28A0: .4byte 0x0000f0f1 -_080D28A4: .4byte sub_80D2D50 - thumb_func_end Phase2_Mugshot_Func1 - - thumb_func_start Phase2_Mugshot_Func2 -Phase2_Mugshot_Func2: @ 80D28A8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - mov r8, r0 - ldr r6, _080D2950 @ =gUnknown_83FAC34 - add r1, sp, 0x4 - mov r0, sp - bl sub_80D3E28 - ldr r0, _080D2954 @ =gUnknown_83F8F60 - ldr r1, [sp, 0x4] - movs r2, 0xF0 - bl CpuSet - ldr r1, _080D2958 @ =gUnknown_83FA740 - mov r2, r8 - movs r3, 0x26 - ldrsh r0, [r2, r3] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _080D295C @ =gUnknown_83FA754 - ldr r0, _080D2960 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xFA - movs r2, 0xC - bl LoadPalette - movs r1, 0 - ldr r5, [sp] - movs r0, 0xF0 - lsls r0, 8 - adds r7, r0, 0 -_080D28FC: - movs r0, 0 - lsls r3, r1, 16 - asrs r4, r3, 11 -_080D2902: - lsls r2, r0, 16 - asrs r2, 16 - adds r1, r4, r2 - lsls r1, 1 - adds r1, r5 - ldrh r0, [r6] - orrs r0, r7 - strh r0, [r1] - adds r2, 0x1 - lsls r2, 16 - adds r6, 0x2 - lsrs r0, r2, 16 - asrs r2, 16 - cmp r2, 0x1F - ble _080D2902 - movs r1, 0x80 - lsls r1, 9 - adds r0, r3, r1 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _080D28FC - movs r0, 0x2 - bl EnableInterrupts - ldr r0, _080D2964 @ =sub_80D2E6C - bl SetHBlankCallback - mov r2, r8 - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - movs r0, 0 - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D2950: .4byte gUnknown_83FAC34 -_080D2954: .4byte gUnknown_83F8F60 -_080D2958: .4byte gUnknown_83FA740 -_080D295C: .4byte gUnknown_83FA754 -_080D2960: .4byte gSaveBlock2Ptr -_080D2964: .4byte sub_80D2E6C - thumb_func_end Phase2_Mugshot_Func2 - - thumb_func_start sub_80D2968 -sub_80D2968: @ 80D2968 - push {r4-r7,lr} - adds r4, r0, 0 - ldr r0, _080D2A4C @ =gUnknown_2039A2C - ldr r1, [r0] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r7, _080D2A50 @ =gScanlineEffectRegBuffers - ldrh r0, [r4, 0xA] - ldrb r5, [r4, 0xA] - adds r0, 0x10 - strh r0, [r4, 0xA] - movs r6, 0 -_080D2982: - adds r0, r5, 0 - movs r1, 0x10 - bl Sin - ldrh r1, [r4, 0xC] - adds r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r0, 0 - bge _080D2998 - movs r2, 0x1 -_080D2998: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0xF0 - ble _080D29A2 - movs r2, 0xF0 -_080D29A2: - strh r2, [r7] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r7, 0x2 - adds r0, r5, 0 - adds r0, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r6, 0x4F - bls _080D2982 - cmp r6, 0x9F - bhi _080D29FA -_080D29BC: - adds r0, r5, 0 - movs r1, 0x10 - bl Sin - ldrh r1, [r4, 0xE] - subs r1, r0 - lsls r1, 16 - lsrs r2, r1, 16 - cmp r1, 0 - bge _080D29D2 - movs r2, 0 -_080D29D2: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0xEF - ble _080D29DC - movs r2, 0xEF -_080D29DC: - lsls r0, r2, 16 - asrs r0, 8 - movs r1, 0xF0 - orrs r0, r1 - strh r0, [r7] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r7, 0x2 - adds r0, r5, 0 - adds r0, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r6, 0x9F - bls _080D29BC -_080D29FA: - ldrh r1, [r4, 0xC] - adds r1, 0x8 - strh r1, [r4, 0xC] - ldrh r0, [r4, 0xE] - subs r0, 0x8 - strh r0, [r4, 0xE] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0xF0 - ble _080D2A12 - movs r0, 0xF0 - strh r0, [r4, 0xC] -_080D2A12: - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0 - bge _080D2A1E - movs r0, 0 - strh r0, [r4, 0xE] -_080D2A1E: - ldr r0, [r4, 0xC] - cmp r0, 0xF0 - bne _080D2A2A - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080D2A2A: - ldr r0, _080D2A4C @ =gUnknown_2039A2C - ldr r1, [r0] - ldrh r0, [r1, 0x18] - subs r0, 0x8 - strh r0, [r1, 0x18] - ldrh r0, [r1, 0x1A] - adds r0, 0x8 - strh r0, [r1, 0x1A] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D2A4C: .4byte gUnknown_2039A2C -_080D2A50: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D2968 - - thumb_func_start sub_80D2A54 -sub_80D2A54: @ 80D2A54 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r2, _080D2AC8 @ =gUnknown_2039A2C - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r1, _080D2ACC @ =gScanlineEffectRegBuffers - adds r5, r2, 0 - movs r2, 0xF0 -_080D2A68: - strh r2, [r1] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - adds r1, 0x2 - cmp r0, 0x9F - bls _080D2A68 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - movs r1, 0 - strh r0, [r4, 0x8] - strh r1, [r4, 0xA] - strh r1, [r4, 0xC] - strh r1, [r4, 0xE] - ldr r1, [r5] - ldrh r0, [r1, 0x18] - subs r0, 0x8 - strh r0, [r1, 0x18] - ldrh r0, [r1, 0x1A] - adds r0, 0x8 - strh r0, [r1, 0x1A] - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r1, 0 - bl sub_80D3120 - movs r1, 0x24 - ldrsh r0, [r4, r1] - movs r1, 0x1 - bl sub_80D3120 - movs r1, 0x22 - ldrsh r0, [r4, r1] - bl sub_80D3138 - movs r0, 0x61 - bl PlaySE - ldr r1, [r5] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D2AC8: .4byte gUnknown_2039A2C -_080D2ACC: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D2A54 - - thumb_func_start sub_80D2AD0 -sub_80D2AD0: @ 80D2AD0 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080D2B08 @ =gUnknown_2039A2C - ldr r1, [r0] - ldrh r0, [r1, 0x18] - subs r0, 0x8 - strh r0, [r1, 0x18] - ldrh r0, [r1, 0x1A] - adds r0, 0x8 - strh r0, [r1, 0x1A] - movs r1, 0x22 - ldrsh r0, [r4, r1] - bl sub_80D3154 - lsls r0, 16 - cmp r0, 0 - beq _080D2B00 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r1, 0x24 - ldrsh r0, [r4, r1] - bl sub_80D3138 -_080D2B00: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D2B08: .4byte gUnknown_2039A2C - thumb_func_end sub_80D2AD0 - - thumb_func_start sub_80D2B0C -sub_80D2B0C: @ 80D2B0C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - ldr r7, _080D2BAC @ =gUnknown_2039A2C - ldr r1, [r7] - ldrh r0, [r1, 0x18] - subs r0, 0x8 - movs r2, 0 - mov r8, r2 - strh r0, [r1, 0x18] - ldrh r0, [r1, 0x1A] - adds r0, 0x8 - strh r0, [r1, 0x1A] - movs r1, 0x24 - ldrsh r0, [r6, r1] - bl sub_80D3154 - lsls r0, 16 - cmp r0, 0 - beq _080D2BA0 - ldr r1, [r7] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - movs r0, 0 - bl SetVBlankCallback - ldr r1, _080D2BB0 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D2BB4 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D2BB8 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - ldr r4, _080D2BBC @ =gScanlineEffectRegBuffers - movs r5, 0xA0 - lsls r5, 1 - adds r0, r4, 0 - movs r1, 0 - adds r2, r5, 0 - bl memset - movs r2, 0xF0 - lsls r2, 3 - adds r4, r2 - adds r0, r4, 0 - movs r1, 0 - adds r2, r5, 0 - bl memset - movs r0, 0x40 - movs r1, 0xF0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - mov r0, r8 - strh r0, [r6, 0xE] - strh r0, [r6, 0x10] - ldr r1, [r7] - movs r0, 0xBF - strh r0, [r1, 0xE] - ldr r0, _080D2BC0 @ =sub_80D2DEC - bl SetVBlankCallback -_080D2BA0: - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D2BAC: .4byte gUnknown_2039A2C -_080D2BB0: .4byte 0x040000b0 -_080D2BB4: .4byte 0x0000c5ff -_080D2BB8: .4byte 0x00007fff -_080D2BBC: .4byte gScanlineEffectRegBuffers -_080D2BC0: .4byte sub_80D2DEC - thumb_func_end sub_80D2B0C - - thumb_func_start sub_80D2BC4 -sub_80D2BC4: @ 80D2BC4 - push {r4-r7,lr} - adds r4, r0, 0 - ldr r2, _080D2C84 @ =gUnknown_2039A2C - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - movs r6, 0x1 - ldr r1, [r2] - ldrh r0, [r1, 0x18] - subs r0, 0x8 - strh r0, [r1, 0x18] - ldrh r0, [r1, 0x1A] - adds r0, 0x8 - strh r0, [r1, 0x1A] - ldrh r1, [r4, 0x10] - movs r3, 0x10 - ldrsh r0, [r4, r3] - mov r12, r2 - cmp r0, 0x4F - bgt _080D2BF2 - adds r0, r1, 0x2 - strh r0, [r4, 0x10] -_080D2BF2: - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r0, 0x50 - ble _080D2BFE - movs r0, 0x50 - strh r0, [r4, 0x10] -_080D2BFE: - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - movs r1, 0x1 - ands r0, r1 - ldrh r3, [r4, 0x10] - cmp r0, 0 - beq _080D2C60 - movs r2, 0 - lsls r0, r3, 16 - movs r6, 0 - cmp r0, 0 - blt _080D2C60 - movs r7, 0x50 - ldr r5, _080D2C88 @ =gScanlineEffectRegBuffers -_080D2C1C: - lsls r0, r2, 16 - asrs r3, r0, 16 - subs r1, r7, r3 - adds r0, r3, 0 - adds r0, 0x50 - lsls r0, 16 - lsrs r2, r0, 16 - lsls r1, 16 - asrs r1, 15 - adds r1, r5 - ldrh r0, [r1] - cmp r0, 0xF - bhi _080D2C3C - movs r6, 0x1 - adds r0, 0x1 - strh r0, [r1] -_080D2C3C: - lsls r0, r2, 16 - asrs r0, 15 - adds r1, r0, r5 - ldrh r0, [r1] - cmp r0, 0xF - bhi _080D2C4E - movs r6, 0x1 - adds r0, 0x1 - strh r0, [r1] -_080D2C4E: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - asrs r0, 16 - movs r3, 0x10 - ldrsh r1, [r4, r3] - ldrh r3, [r4, 0x10] - cmp r0, r1 - ble _080D2C1C -_080D2C60: - cmp r3, 0x50 - bne _080D2C6E - cmp r6, 0 - bne _080D2C6E - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080D2C6E: - mov r1, r12 - ldr r0, [r1] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D2C84: .4byte gUnknown_2039A2C -_080D2C88: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D2BC4 - - thumb_func_start sub_80D2C8C -sub_80D2C8C: @ 80D2C8C - push {r4-r6,lr} - adds r4, r0, 0 - ldr r5, _080D2CBC @ =gUnknown_2039A2C - ldr r0, [r5] - ldrb r1, [r0] - movs r6, 0 - strb r6, [r0] - movs r0, 0x1 - negs r0, r0 - ldr r2, _080D2CC0 @ =0x00007fff - movs r1, 0x10 - bl BlendPalettes - ldr r1, [r5] - movs r0, 0xFF - strh r0, [r1, 0xE] - strh r6, [r4, 0xE] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D2CBC: .4byte gUnknown_2039A2C -_080D2CC0: .4byte 0x00007fff - thumb_func_end sub_80D2C8C - - thumb_func_start sub_80D2CC4 -sub_80D2CC4: @ 80D2CC4 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080D2D08 @ =gUnknown_2039A2C - ldr r1, [r5] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - ldr r0, _080D2D0C @ =gScanlineEffectRegBuffers - movs r2, 0xE - ldrsh r1, [r4, r2] - movs r2, 0xA0 - lsls r2, 1 - bl memset - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0xF - ble _080D2CF4 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080D2CF4: - ldr r0, [r5] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D2D08: .4byte gUnknown_2039A2C -_080D2D0C: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D2CC4 - - thumb_func_start sub_80D2D10 -sub_80D2D10: @ 80D2D10 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080D2D44 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D2D48 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D2D4C @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl sub_80D3E60 - ldr r0, [r4] - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D2D44: .4byte 0x040000b0 -_080D2D48: .4byte 0x0000c5ff -_080D2D4C: .4byte 0x00007fff - thumb_func_end sub_80D2D10 - - thumb_func_start sub_80D2D50 -sub_80D2D50: @ 80D2D50 - push {r4,r5,lr} - ldr r4, _080D2DC4 @ =0x040000b0 - ldrh r1, [r4, 0xA] - ldr r0, _080D2DC8 @ =0x0000c5ff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xA] - ldr r0, _080D2DCC @ =0x00007fff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xA] - bl sub_80D3DF4 - ldr r5, _080D2DD0 @ =gUnknown_2039A2C - ldr r0, [r5] - ldrb r0, [r0] - cmp r0, 0 - beq _080D2D88 - ldr r1, _080D2DD4 @ =0x040000d4 - ldr r0, _080D2DD8 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D2DDC @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D2D88: - ldr r0, [r5] - ldrh r1, [r0, 0x1C] - movs r0, 0x12 - bl SetGpuReg - ldr r0, [r5] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r5] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r5] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r0, _080D2DE0 @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r4] - ldr r0, _080D2DE4 @ =0x04000040 - str r0, [r4, 0x4] - ldr r0, _080D2DE8 @ =0xa2400001 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D2DC4: .4byte 0x040000b0 -_080D2DC8: .4byte 0x0000c5ff -_080D2DCC: .4byte 0x00007fff -_080D2DD0: .4byte gUnknown_2039A2C -_080D2DD4: .4byte 0x040000d4 -_080D2DD8: .4byte gScanlineEffectRegBuffers -_080D2DDC: .4byte 0x800000a0 -_080D2DE0: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2DE4: .4byte 0x04000040 -_080D2DE8: .4byte 0xa2400001 - thumb_func_end sub_80D2D50 - - thumb_func_start sub_80D2DEC -sub_80D2DEC: @ 80D2DEC - push {r4,lr} - ldr r4, _080D2E44 @ =0x040000b0 - ldrh r1, [r4, 0xA] - ldr r0, _080D2E48 @ =0x0000c5ff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r1, [r4, 0xA] - ldr r0, _080D2E4C @ =0x00007fff - ands r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xA] - bl sub_80D3DF4 - ldr r2, _080D2E50 @ =gUnknown_2039A2C - ldr r0, [r2] - ldrb r0, [r0] - cmp r0, 0 - beq _080D2E24 - ldr r1, _080D2E54 @ =0x040000d4 - ldr r0, _080D2E58 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r3, 0xF0 - lsls r3, 3 - adds r0, r3 - str r0, [r1, 0x4] - ldr r0, _080D2E5C @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D2E24: - ldr r0, [r2] - ldrh r1, [r0, 0xE] - movs r0, 0x50 - bl SetGpuReg - ldr r0, _080D2E60 @ =gScanlineEffectRegBuffers + 0x780 - str r0, [r4] - ldr r0, _080D2E64 @ =0x04000054 - str r0, [r4, 0x4] - ldr r0, _080D2E68 @ =0xa2400001 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D2E44: .4byte 0x040000b0 -_080D2E48: .4byte 0x0000c5ff -_080D2E4C: .4byte 0x00007fff -_080D2E50: .4byte gUnknown_2039A2C -_080D2E54: .4byte 0x040000d4 -_080D2E58: .4byte gScanlineEffectRegBuffers -_080D2E5C: .4byte 0x800000a0 -_080D2E60: .4byte gScanlineEffectRegBuffers + 0x780 -_080D2E64: .4byte 0x04000054 -_080D2E68: .4byte 0xa2400001 - thumb_func_end sub_80D2DEC - - thumb_func_start sub_80D2E6C -sub_80D2E6C: @ 80D2E6C - push {lr} - ldr r0, _080D2E80 @ =0x04000006 - ldrh r0, [r0] - cmp r0, 0x4F - bhi _080D2E8C - ldr r1, _080D2E84 @ =0x04000010 - ldr r0, _080D2E88 @ =gUnknown_2039A2C - ldr r0, [r0] - ldrh r0, [r0, 0x18] - b _080D2E94 - .align 2, 0 -_080D2E80: .4byte 0x04000006 -_080D2E84: .4byte 0x04000010 -_080D2E88: .4byte gUnknown_2039A2C -_080D2E8C: - ldr r1, _080D2E9C @ =0x04000010 - ldr r0, _080D2EA0 @ =gUnknown_2039A2C - ldr r0, [r0] - ldrh r0, [r0, 0x1A] -_080D2E94: - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080D2E9C: .4byte 0x04000010 -_080D2EA0: .4byte gUnknown_2039A2C - thumb_func_end sub_80D2E6C - - thumb_func_start sub_80D2EA4 -sub_80D2EA4: @ 80D2EA4 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x4 - adds r4, r0, 0 - ldr r6, _080D2FF8 @ =gReservedSpritePaletteCount - movs r0, 0xA - strb r0, [r6] - ldr r0, _080D2FFC @ =gUnknown_83FA494 - movs r2, 0x26 - ldrsh r1, [r4, r2] - mov r9, r1 - add r0, r9 - ldrb r0, [r0] - ldr r2, _080D3000 @ =gUnknown_83FA4AE - lsls r1, 2 - mov r9, r1 - adds r1, r2 - ldrh r1, [r1] - subs r1, 0x20 - lsls r1, 16 - asrs r1, 16 - adds r2, 0x2 - add r2, r9 - ldrh r2, [r2] - adds r2, 0x2A - lsls r2, 16 - asrs r2, 16 - ldr r5, _080D3004 @ =gDecompressionBuffer - str r5, [sp] - movs r3, 0 - bl CreateTrainerSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - ldr r0, _080D3008 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - movs r1, 0x1 - bl PlayerGenderToFrontTrainerPicId_Debug - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x88 - lsls r1, 1 - str r5, [sp] - movs r2, 0x6A - movs r3, 0 - bl CreateTrainerSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x24] - movs r0, 0xC - strb r0, [r6] - movs r3, 0x22 - ldrsh r0, [r4, r3] - lsls r5, r0, 4 - adds r5, r0 - lsls r5, 2 - ldr r1, _080D300C @ =gSprites - adds r5, r1 - movs r2, 0x24 - ldrsh r0, [r4, r2] - lsls r6, r0, 4 - adds r6, r0 - lsls r6, 2 - adds r6, r1 - ldr r0, _080D3010 @ =sub_80D301C - str r0, [r5, 0x1C] - str r0, [r6, 0x1C] - ldrb r0, [r5, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r5, 0x1] - ldrb r0, [r6, 0x1] - orrs r0, r1 - strb r0, [r6, 0x1] - bl AllocOamMatrix - lsls r0, 24 - lsrs r0, 24 - movs r3, 0x1F - mov r8, r3 - mov r4, r8 - ands r0, r4 - lsls r0, 1 - ldrb r2, [r5, 0x3] - movs r4, 0x3F - negs r4, r4 - adds r1, r4, 0 - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x3] - bl AllocOamMatrix - lsls r0, 24 - lsrs r0, 24 - mov r1, r8 - ands r0, r1 - lsls r0, 1 - ldrb r1, [r6, 0x3] - ands r4, r1 - orrs r4, r0 - strb r4, [r6, 0x3] - ldrb r2, [r5, 0x1] - movs r1, 0x3F - adds r0, r1, 0 - ands r0, r2 - movs r2, 0x40 - orrs r0, r2 - strb r0, [r5, 0x1] - ldrb r0, [r6, 0x1] - ands r1, r0 - orrs r1, r2 - strb r1, [r6, 0x1] - ldrb r0, [r5, 0x3] - movs r1, 0xC0 - orrs r0, r1 - strb r0, [r5, 0x3] - ldrb r0, [r6, 0x3] - orrs r0, r1 - strb r0, [r6, 0x3] - adds r0, r5, 0 - movs r1, 0x1 - movs r2, 0x3 - movs r3, 0x3 - bl CalcCenterToCornerVec - adds r0, r6, 0 - movs r1, 0x1 - movs r2, 0x3 - movs r3, 0x3 - bl CalcCenterToCornerVec - ldrb r0, [r5, 0x3] - lsls r0, 26 - lsrs r0, 27 - ldr r2, _080D3014 @ =gUnknown_83FA49A - mov r3, r9 - adds r1, r3, r2 - movs r4, 0 - ldrsh r1, [r1, r4] - adds r2, 0x2 - add r9, r2 - mov r3, r9 - movs r4, 0 - ldrsh r2, [r3, r4] - movs r3, 0 - bl SetOamMatrixRotationScaling - ldrb r0, [r6, 0x3] - lsls r0, 26 - lsrs r0, 27 - ldr r1, _080D3018 @ =0xfffffe00 - movs r2, 0x80 - lsls r2, 2 - movs r3, 0 - bl SetOamMatrixRotationScaling - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D2FF8: .4byte gReservedSpritePaletteCount -_080D2FFC: .4byte gUnknown_83FA494 -_080D3000: .4byte gUnknown_83FA4AE -_080D3004: .4byte gDecompressionBuffer -_080D3008: .4byte gSaveBlock2Ptr -_080D300C: .4byte gSprites -_080D3010: .4byte sub_80D301C -_080D3014: .4byte gUnknown_83FA49A -_080D3018: .4byte 0xfffffe00 - thumb_func_end sub_80D2EA4 - - thumb_func_start sub_80D301C -sub_80D301C: @ 80D301C - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080D3040 @ =gUnknown_83FA4C4 -_080D3022: - movs r1, 0x2E - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D3022 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3040: .4byte gUnknown_83FA4C4 - thumb_func_end sub_80D301C - - thumb_func_start sub_80D3044 -sub_80D3044: @ 80D3044 - movs r0, 0 - bx lr - thumb_func_end sub_80D3044 - - thumb_func_start sub_80D3048 -sub_80D3048: @ 80D3048 - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - ldr r1, _080D308C @ =gUnknown_83FA4E0 - mov r0, sp - movs r2, 0x4 - bl memcpy - add r4, sp, 0x4 - ldr r1, _080D3090 @ =gUnknown_83FA4E4 - adds r0, r4, 0 - movs r2, 0x4 - bl memcpy - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - movs r1, 0x3C - ldrsh r0, [r5, r1] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - strh r0, [r5, 0x30] - movs r1, 0x3C - ldrsh r0, [r5, r1] - lsls r0, 1 - adds r4, r0 - ldrh r0, [r4] - strh r0, [r5, 0x32] - movs r0, 0x1 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D308C: .4byte gUnknown_83FA4E0 -_080D3090: .4byte gUnknown_83FA4E4 - thumb_func_end sub_80D3048 - - thumb_func_start sub_80D3094 -sub_80D3094: @ 80D3094 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x30] - ldrh r3, [r1, 0x20] - adds r2, r0, r3 - strh r2, [r1, 0x20] - movs r3, 0x3C - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080D30B2 - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x84 - bgt _080D30C0 - b _080D30BA -_080D30B2: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x67 - ble _080D30C0 -_080D30BA: - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] -_080D30C0: - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_80D3094 - - thumb_func_start sub_80D30C8 -sub_80D30C8: @ 80D30C8 - push {lr} - adds r2, r0, 0 - ldrh r3, [r2, 0x32] - ldrh r0, [r2, 0x30] - adds r1, r3, r0 - strh r1, [r2, 0x30] - ldrh r0, [r2, 0x20] - adds r0, r1 - strh r0, [r2, 0x20] - lsls r1, 16 - cmp r1, 0 - bne _080D30EE - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - negs r0, r3 - strh r0, [r2, 0x32] - movs r0, 0x1 - strh r0, [r2, 0x3A] -_080D30EE: - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_80D30C8 - - thumb_func_start sub_80D30F4 -sub_80D30F4: @ 80D30F4 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x32] - ldrh r1, [r2, 0x30] - adds r0, r1 - strh r0, [r2, 0x30] - ldrh r1, [r2, 0x20] - adds r1, r0 - strh r1, [r2, 0x20] - adds r1, 0x1F - lsls r1, 16 - movs r0, 0x97 - lsls r0, 17 - cmp r1, r0 - bls _080D3118 - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] -_080D3118: - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_80D30F4 - - thumb_func_start sub_80D3120 -sub_80D3120: @ 80D3120 - ldr r3, _080D3134 @ =gSprites - lsls r0, 16 - asrs r0, 16 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - strh r1, [r2, 0x3C] - bx lr - .align 2, 0 -_080D3134: .4byte gSprites - thumb_func_end sub_80D3120 - - thumb_func_start sub_80D3138 -sub_80D3138: @ 80D3138 - ldr r2, _080D3150 @ =gSprites - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] - bx lr - .align 2, 0 -_080D3150: .4byte gSprites - thumb_func_end sub_80D3138 - - thumb_func_start sub_80D3154 -sub_80D3154: @ 80D3154 - ldr r2, _080D3168 @ =gSprites - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r2, 0x3A - ldrsh r0, [r1, r2] - bx lr - .align 2, 0 -_080D3168: .4byte gSprites - thumb_func_end sub_80D3154 - - thumb_func_start sub_80D316C -sub_80D316C: @ 80D316C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D319C @ =gUnknown_83FA4E8 - ldr r2, _080D31A0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D317E: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D317E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D319C: .4byte gUnknown_83FA4E8 -_080D31A0: .4byte gTasks - thumb_func_end sub_80D316C - - thumb_func_start sub_80D31A4 -sub_80D31A4: @ 80D31A4 - push {r4-r6,lr} - adds r5, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - movs r3, 0 - movs r0, 0x80 - lsls r0, 1 - strh r0, [r5, 0xC] - movs r0, 0x1 - strh r0, [r5, 0xE] - ldr r2, _080D3210 @ =gUnknown_2039A2C - ldr r1, [r2] - movs r0, 0x3F - strh r0, [r1, 0x2] - strh r3, [r1, 0x4] - movs r0, 0xA0 - strh r0, [r1, 0x8] - ldr r4, _080D3214 @ =gScanlineEffectRegBuffers + 0x780 - adds r6, r2, 0 - movs r2, 0xF0 -_080D31D0: - lsls r1, r3, 1 - adds r1, r4 - ldr r0, [r6] - ldrh r0, [r0, 0x14] - strh r0, [r1] - adds r0, r3, 0 - adds r0, 0xA0 - lsls r0, 1 - adds r0, r4 - strh r2, [r0] - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x9F - bls _080D31D0 - movs r0, 0x2 - bl EnableInterrupts - ldr r0, _080D3218 @ =sub_80D332C - bl SetVBlankCallback - ldr r0, _080D321C @ =sub_80D33C0 - bl SetHBlankCallback - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D3210: .4byte gUnknown_2039A2C -_080D3214: .4byte gScanlineEffectRegBuffers + 0x780 -_080D3218: .4byte sub_80D332C -_080D321C: .4byte sub_80D33C0 - thumb_func_end sub_80D31A4 - - thumb_func_start sub_80D3220 -sub_80D3220: @ 80D3220 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r3, r0, 0 - ldr r2, _080D329C @ =gUnknown_2039A2C - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldrh r0, [r3, 0xC] - lsls r0, 16 - asrs r0, 24 - ldrh r1, [r3, 0xA] - adds r0, r1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - mov r8, r2 - cmp r0, 0xF0 - ble _080D324C - movs r0, 0xF0 - strh r0, [r3, 0xA] -_080D324C: - ldrh r4, [r3, 0xC] - movs r0, 0xC - ldrsh r1, [r3, r0] - ldr r0, _080D32A0 @ =0x00000fff - ldrh r2, [r3, 0xE] - cmp r1, r0 - bgt _080D325E - adds r0, r4, r2 - strh r0, [r3, 0xC] -_080D325E: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x7F - bgt _080D326A - lsls r0, r2, 1 - strh r0, [r3, 0xE] -_080D326A: - movs r5, 0 - ldr r7, _080D32A4 @ =gScanlineEffectRegBuffers - movs r1, 0xA0 - lsls r1, 1 - adds r1, r7 - mov r12, r1 - mov r6, r8 -_080D3278: - lsls r0, r5, 1 - adds r2, r0, r7 - mov r1, r12 - adds r4, r0, r1 - movs r0, 0x1 - ands r0, r5 - cmp r0, 0 - beq _080D32A8 - ldr r1, [r6] - ldrh r0, [r3, 0xA] - ldrh r1, [r1, 0x14] - adds r0, r1 - strh r0, [r2] - ldrh r1, [r3, 0xA] - movs r0, 0xF0 - subs r0, r1 - b _080D32BA - .align 2, 0 -_080D329C: .4byte gUnknown_2039A2C -_080D32A0: .4byte 0x00000fff -_080D32A4: .4byte gScanlineEffectRegBuffers -_080D32A8: - ldr r0, [r6] - ldrh r0, [r0, 0x14] - ldrh r1, [r3, 0xA] - subs r0, r1 - strh r0, [r2] - ldrh r0, [r3, 0xA] - lsls r0, 8 - movs r1, 0xF1 - orrs r0, r1 -_080D32BA: - strh r0, [r4] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x9F - bls _080D3278 - movs r1, 0xA - ldrsh r0, [r3, r1] - cmp r0, 0xEF - ble _080D32D4 - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_080D32D4: - mov r1, r8 - ldr r0, [r1] - ldrb r1, [r0] - adds r1, 0x1 - ldrb r2, [r0] - strb r1, [r0] - movs r0, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80D3220 - - thumb_func_start sub_80D32EC -sub_80D32EC: @ 80D32EC - push {lr} - ldr r1, _080D331C @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D3320 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D3324 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl sub_80D3E60 - ldr r0, _080D3328 @ =sub_80D316C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D331C: .4byte 0x040000b0 -_080D3320: .4byte 0x0000c5ff -_080D3324: .4byte 0x00007fff -_080D3328: .4byte sub_80D316C - thumb_func_end sub_80D32EC - - thumb_func_start sub_80D332C -sub_80D332C: @ 80D332C - push {r4,r5,lr} - ldr r5, _080D3398 @ =0x040000b0 - ldrh r1, [r5, 0xA] - ldr r0, _080D339C @ =0x0000c5ff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r1, [r5, 0xA] - ldr r0, _080D33A0 @ =0x00007fff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r0, [r5, 0xA] - bl sub_80D3DF4 - ldr r4, _080D33A4 @ =gUnknown_2039A2C - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r0, [r4] - ldrb r0, [r0] - cmp r0, 0 - beq _080D3382 - ldr r1, _080D33A8 @ =0x040000d4 - ldr r0, _080D33AC @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D33B0 @ =0x80000140 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D3382: - ldr r0, _080D33B4 @ =gScanlineEffectRegBuffers + 0x8C0 - str r0, [r5] - ldr r0, _080D33B8 @ =0x04000040 - str r0, [r5, 0x4] - ldr r0, _080D33BC @ =0xa2400001 - str r0, [r5, 0x8] - ldr r0, [r5, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3398: .4byte 0x040000b0 -_080D339C: .4byte 0x0000c5ff -_080D33A0: .4byte 0x00007fff -_080D33A4: .4byte gUnknown_2039A2C -_080D33A8: .4byte 0x040000d4 -_080D33AC: .4byte gScanlineEffectRegBuffers -_080D33B0: .4byte 0x80000140 -_080D33B4: .4byte gScanlineEffectRegBuffers + 0x8C0 -_080D33B8: .4byte 0x04000040 -_080D33BC: .4byte 0xa2400001 - thumb_func_end sub_80D332C - - thumb_func_start sub_80D33C0 -sub_80D33C0: @ 80D33C0 - ldr r1, _080D33E0 @ =gScanlineEffectRegBuffers - ldr r0, _080D33E4 @ =0x04000006 - ldrh r0, [r0] - lsls r0, 1 - movs r2, 0xF0 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _080D33E8 @ =0x04000014 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - bx lr - .align 2, 0 -_080D33E0: .4byte gScanlineEffectRegBuffers -_080D33E4: .4byte 0x04000006 -_080D33E8: .4byte 0x04000014 - thumb_func_end sub_80D33C0 - - thumb_func_start sub_80D33EC -sub_80D33EC: @ 80D33EC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D341C @ =gUnknown_83FA4F4 - ldr r2, _080D3420 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D33FE: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D33FE - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D341C: .4byte gUnknown_83FA4F4 -_080D3420: .4byte gTasks - thumb_func_end sub_80D33EC - - thumb_func_start sub_80D3424 -sub_80D3424: @ 80D3424 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - ldr r0, _080D348C @ =gUnknown_2039A2C - ldr r1, [r0] - movs r2, 0 - movs r0, 0xBF - strh r0, [r1, 0xE] - strh r2, [r1, 0x12] - movs r0, 0x1E - strh r0, [r1, 0x2] - movs r0, 0x3F - strh r0, [r1, 0x4] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r2, _080D3490 @ =gScanlineEffectRegBuffers + 0x780 - movs r4, 0 - movs r3, 0xF0 -_080D3450: - lsls r0, r1, 1 - adds r0, r2 - strh r4, [r0] - adds r0, r1, 0 - adds r0, 0xA0 - lsls r0, 1 - adds r0, r2 - strh r3, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x9F - bls _080D3450 - movs r0, 0x2 - bl EnableInterrupts - ldr r0, _080D3494 @ =sub_80D36E0 - bl SetHBlankCallback - ldr r0, _080D3498 @ =sub_80D35F4 - bl SetVBlankCallback - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D348C: .4byte gUnknown_2039A2C -_080D3490: .4byte gScanlineEffectRegBuffers + 0x780 -_080D3494: .4byte sub_80D36E0 -_080D3498: .4byte sub_80D35F4 - thumb_func_end sub_80D3424 - - thumb_func_start sub_80D349C -sub_80D349C: @ 80D349C - push {r4-r6,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r1, _080D3504 @ =gUnknown_83FA508 - mov r0, sp - movs r2, 0xC - bl memcpy - movs r5, 0 - movs r4, 0 -_080D34B0: - ldr r0, _080D3508 @ =sub_80D3720 - bl CreateInvisibleSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080D350C @ =gSprites - adds r2, r1, r0 - movs r0, 0xF0 - strh r0, [r2, 0x20] - strh r4, [r2, 0x22] - lsls r1, r5, 16 - asrs r1, 16 - lsls r0, r1, 1 - add r0, sp - ldrh r0, [r0] - strh r0, [r2, 0x38] - adds r1, 0x1 - lsls r1, 16 - lsls r0, r4, 16 - movs r3, 0xD8 - lsls r3, 13 - adds r0, r3 - lsrs r4, r0, 16 - lsrs r5, r1, 16 - asrs r1, 16 - cmp r1, 0x5 - ble _080D34B0 - ldrh r0, [r2, 0x3A] - adds r0, 0x1 - strh r0, [r2, 0x3A] - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - movs r0, 0 - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D3504: .4byte gUnknown_83FA508 -_080D3508: .4byte sub_80D3720 -_080D350C: .4byte gSprites - thumb_func_end sub_80D349C - - thumb_func_start sub_80D3510 -sub_80D3510: @ 80D3510 - push {r4,lr} - adds r4, r0, 0 - ldr r2, _080D3544 @ =gUnknown_2039A2C - ldr r1, [r2] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - ldr r0, [r2] - movs r1, 0x20 - ldrsh r0, [r0, r1] - cmp r0, 0x5 - ble _080D353A - movs r0, 0x1 - negs r0, r0 - ldr r2, _080D3548 @ =0x00007fff - movs r1, 0x10 - bl BlendPalettes - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080D353A: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D3544: .4byte gUnknown_2039A2C -_080D3548: .4byte 0x00007fff - thumb_func_end sub_80D3510 - - thumb_func_start sub_80D354C -sub_80D354C: @ 80D354C - push {r4-r6,lr} - adds r6, r0, 0 - ldr r5, _080D35A0 @ =gUnknown_2039A2C - ldr r0, [r5] - ldrb r1, [r0] - movs r4, 0 - strb r4, [r0] - ldr r1, _080D35A4 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D35A8 @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D35AC @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - movs r0, 0 - bl SetVBlankCallback - movs r0, 0 - bl SetHBlankCallback - ldr r1, [r5] - movs r0, 0xF0 - strh r0, [r1, 0x6] - strh r4, [r1, 0x12] - movs r0, 0xFF - strh r0, [r1, 0xE] - movs r0, 0x3F - strh r0, [r1, 0x2] - strh r4, [r1, 0x20] - ldr r0, _080D35B0 @ =sub_80D3690 - bl SetVBlankCallback - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D35A0: .4byte gUnknown_2039A2C -_080D35A4: .4byte 0x040000b0 -_080D35A8: .4byte 0x0000c5ff -_080D35AC: .4byte 0x00007fff -_080D35B0: .4byte sub_80D3690 - thumb_func_end sub_80D354C - - thumb_func_start sub_80D35B4 -sub_80D35B4: @ 80D35B4 - push {lr} - ldr r0, _080D35EC @ =gUnknown_2039A2C - ldr r1, [r0] - movs r2, 0xF0 - lsls r2, 1 - adds r0, r2, 0 - ldrh r2, [r1, 0x20] - adds r0, r2 - strh r0, [r1, 0x20] - lsls r0, 16 - asrs r0, 24 - strh r0, [r1, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x10 - bls _080D35E6 - bl sub_80D3E60 - ldr r0, _080D35F0 @ =sub_80D33EC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D35E6: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D35EC: .4byte gUnknown_2039A2C -_080D35F0: .4byte sub_80D33EC - thumb_func_end sub_80D35B4 - - thumb_func_start sub_80D35F4 -sub_80D35F4: @ 80D35F4 - push {r4,r5,lr} - ldr r5, _080D3668 @ =0x040000b0 - ldrh r1, [r5, 0xA] - ldr r0, _080D366C @ =0x0000c5ff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r1, [r5, 0xA] - ldr r0, _080D3670 @ =0x00007fff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r0, [r5, 0xA] - bl sub_80D3DF4 - ldr r4, _080D3674 @ =gUnknown_2039A2C - ldr r0, [r4] - ldrh r1, [r0, 0xE] - movs r0, 0x50 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x6] - movs r0, 0x44 - bl SetGpuReg - ldr r0, [r4] - ldrb r0, [r0] - cmp r0, 0 - beq _080D3654 - ldr r1, _080D3678 @ =0x040000d4 - ldr r0, _080D367C @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D3680 @ =0x80000140 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D3654: - ldr r0, _080D3684 @ =gScanlineEffectRegBuffers + 0x8C0 - str r0, [r5] - ldr r0, _080D3688 @ =0x04000040 - str r0, [r5, 0x4] - ldr r0, _080D368C @ =0xa2400001 - str r0, [r5, 0x8] - ldr r0, [r5, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3668: .4byte 0x040000b0 -_080D366C: .4byte 0x0000c5ff -_080D3670: .4byte 0x00007fff -_080D3674: .4byte gUnknown_2039A2C -_080D3678: .4byte 0x040000d4 -_080D367C: .4byte gScanlineEffectRegBuffers -_080D3680: .4byte 0x80000140 -_080D3684: .4byte gScanlineEffectRegBuffers + 0x8C0 -_080D3688: .4byte 0x04000040 -_080D368C: .4byte 0xa2400001 - thumb_func_end sub_80D35F4 - - thumb_func_start sub_80D3690 -sub_80D3690: @ 80D3690 - push {r4,lr} - bl sub_80D3DF4 - ldr r4, _080D36DC @ =gUnknown_2039A2C - ldr r0, [r4] - ldrh r1, [r0, 0x12] - movs r0, 0x54 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0xE] - movs r0, 0x50 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x6] - movs r0, 0x40 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D36DC: .4byte gUnknown_2039A2C - thumb_func_end sub_80D3690 - - thumb_func_start sub_80D36E0 -sub_80D36E0: @ 80D36E0 - push {lr} - sub sp, 0x4 - mov r1, sp - ldr r0, _080D3714 @ =0x04000006 - ldrh r0, [r0] - strh r0, [r1] - mov r0, sp - ldrh r0, [r0] - cmp r0, 0xE3 - bne _080D36F8 - movs r0, 0 - strh r0, [r1] -_080D36F8: - ldr r2, _080D3718 @ =0x04000054 - ldr r1, _080D371C @ =gScanlineEffectRegBuffers - mov r0, sp - ldrh r0, [r0] - lsls r0, 1 - movs r3, 0xF0 - lsls r3, 3 - adds r1, r3 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080D3714: .4byte 0x04000006 -_080D3718: .4byte 0x04000054 -_080D371C: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80D36E0 - - thumb_func_start sub_80D3720 -sub_80D3720: @ 80D3720 - push {r4-r7,lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x38] - movs r2, 0x38 - ldrsh r0, [r3, r2] - cmp r0, 0 - beq _080D374C - subs r0, r1, 0x1 - strh r0, [r3, 0x38] - movs r1, 0x3A - ldrsh r0, [r3, r1] - cmp r0, 0 - beq _080D380A - ldr r0, _080D3748 @ =gUnknown_2039A2C - ldr r1, [r0] - ldrb r0, [r1] - movs r0, 0x1 - strb r0, [r1] - b _080D380A - .align 2, 0 -_080D3748: .4byte gUnknown_2039A2C -_080D374C: - movs r2, 0x22 - ldrsh r0, [r3, r2] - lsls r0, 1 - ldr r1, _080D3810 @ =gScanlineEffectRegBuffers - adds r7, r0, r1 - movs r2, 0xA0 - lsls r2, 1 - adds r1, r2 - adds r6, r0, r1 - movs r1, 0x3A - ldrsh r0, [r3, r1] - movs r5, 0x1B - cmp r0, 0 - beq _080D376A - movs r5, 0x19 -_080D376A: - movs r4, 0 - cmp r4, r5 - bcs _080D3790 -_080D3770: - lsls r1, r4, 1 - adds r2, r1, r7 - ldrh r0, [r3, 0x2E] - lsls r0, 16 - asrs r0, 24 - strh r0, [r2] - adds r1, r6 - ldrh r0, [r3, 0x20] - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r5 - bcc _080D3770 -_080D3790: - movs r2, 0x20 - ldrsh r0, [r3, r2] - ldrh r2, [r3, 0x20] - cmp r0, 0 - bne _080D37AA - movs r0, 0x2E - ldrsh r1, [r3, r0] - movs r0, 0x80 - lsls r0, 5 - cmp r1, r0 - bne _080D37AA - movs r0, 0x1 - strh r0, [r3, 0x30] -_080D37AA: - adds r1, r2, 0 - subs r1, 0x18 - strh r1, [r3, 0x20] - ldrh r0, [r3, 0x2E] - adds r0, 0xC0 - strh r0, [r3, 0x2E] - lsls r1, 16 - cmp r1, 0 - bge _080D37C0 - movs r0, 0 - strh r0, [r3, 0x20] -_080D37C0: - movs r1, 0x2E - ldrsh r0, [r3, r1] - movs r1, 0x80 - lsls r1, 5 - cmp r0, r1 - ble _080D37CE - strh r1, [r3, 0x2E] -_080D37CE: - movs r2, 0x3A - ldrsh r0, [r3, r2] - cmp r0, 0 - beq _080D37E0 - ldr r0, _080D3814 @ =gUnknown_2039A2C - ldr r1, [r0] - ldrb r0, [r1] - movs r0, 0x1 - strb r0, [r1] -_080D37E0: - movs r1, 0x30 - ldrsh r0, [r3, r1] - cmp r0, 0 - beq _080D380A - movs r2, 0x3A - ldrsh r0, [r3, r2] - ldr r1, _080D3814 @ =gUnknown_2039A2C - cmp r0, 0 - beq _080D37FC - ldr r0, [r1] - movs r2, 0x20 - ldrsh r0, [r0, r2] - cmp r0, 0x4 - ble _080D380A -_080D37FC: - ldr r1, [r1] - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] - adds r0, r3, 0 - bl DestroySprite -_080D380A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D3810: .4byte gScanlineEffectRegBuffers -_080D3814: .4byte gUnknown_2039A2C - thumb_func_end sub_80D3720 - - thumb_func_start sub_80D3818 -sub_80D3818: @ 80D3818 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D3848 @ =gUnknown_83FA514 - ldr r2, _080D384C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D382A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D382A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3848: .4byte gUnknown_83FA514 -_080D384C: .4byte gTasks - thumb_func_end sub_80D3818 - - thumb_func_start Phase2_Transition_GridSquares_Func1 -Phase2_Transition_GridSquares_Func1: @ 80D3850 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - add r0, sp, 0x4 - add r1, sp, 0x8 - bl sub_80D3E28 - ldr r0, _080D3898 @ =gUnknown_83FA140 - ldr r1, [sp, 0x8] - movs r2, 0x10 - bl CpuSet - mov r1, sp - movs r2, 0xF0 - lsls r2, 8 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, [sp, 0x4] - ldr r2, _080D389C @ =0x01000400 - mov r0, sp - bl CpuSet - ldr r0, _080D38A0 @ =gUnknown_83FA638 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D3898: .4byte gUnknown_83FA140 -_080D389C: .4byte 0x01000400 -_080D38A0: .4byte gUnknown_83FA638 - thumb_func_end Phase2_Transition_GridSquares_Func1 - - thumb_func_start Phase2_Transition_GridSquares_Func2 -Phase2_Transition_GridSquares_Func2: @ 80D38A4 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080D38E6 - mov r0, sp - bl sub_80D3E08 - movs r0, 0x3 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0xC - ldrsh r0, [r4, r1] - lsls r0, 5 - ldr r1, _080D38F8 @ =gUnknown_83FA140 - adds r0, r1 - ldr r1, [sp] - movs r2, 0x10 - bl CpuSet - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0xD - ble _080D38E6 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x10 - strh r0, [r4, 0xA] -_080D38E6: - ldrh r0, [r4, 0xA] - subs r0, 0x1 - strh r0, [r4, 0xA] - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D38F8: .4byte gUnknown_83FA140 - thumb_func_end Phase2_Transition_GridSquares_Func2 - - thumb_func_start Phase2_Transition_GridSquares_Func3 -Phase2_Transition_GridSquares_Func3: @ 80D38FC - push {lr} - ldrh r1, [r0, 0xA] - subs r1, 0x1 - strh r1, [r0, 0xA] - lsls r1, 16 - cmp r1, 0 - bne _080D391C - bl sub_80D3E60 - ldr r0, _080D3924 @ =sub_80D3818 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080D391C: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080D3924: .4byte sub_80D3818 - thumb_func_end Phase2_Transition_GridSquares_Func3 - - thumb_func_start sub_80D3928 -sub_80D3928: @ 80D3928 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D3958 @ =gUnknown_83FA520 - ldr r2, _080D395C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D393A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D393A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3958: .4byte gUnknown_83FA520 -_080D395C: .4byte gTasks - thumb_func_end sub_80D3928 - - thumb_func_start sub_80D3960 -sub_80D3960: @ 80D3960 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_80D3DD0 - bl ScanlineEffect_Clear - ldr r0, _080D39B8 @ =gUnknown_2039A2C - ldr r1, [r0] - movs r2, 0 - movs r0, 0x3F - strh r0, [r1, 0x2] - strh r2, [r1, 0x4] - movs r0, 0xA0 - strh r0, [r1, 0x8] - movs r1, 0 - ldr r2, _080D39BC @ =gScanlineEffectRegBuffers - movs r3, 0xF0 - adds r4, r2, 0 -_080D3984: - lsls r0, r1, 1 - adds r0, r2 - strh r3, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x9F - bls _080D3984 - movs r0, 0xF0 - lsls r0, 3 - adds r1, r4, r0 - adds r0, r4, 0 - movs r2, 0xA0 - bl CpuSet - ldr r0, _080D39C0 @ =sub_80D3BA4 - bl SetVBlankCallback - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080D39B8: .4byte gUnknown_2039A2C -_080D39BC: .4byte gScanlineEffectRegBuffers -_080D39C0: .4byte sub_80D3BA4 - thumb_func_end sub_80D3960 - - thumb_func_start sub_80D39C4 -sub_80D39C4: @ 80D39C4 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - mov r8, r0 - ldr r0, _080D3A38 @ =gUnknown_2039A2C - ldr r0, [r0] - adds r0, 0x24 - ldr r6, _080D3A3C @ =gUnknown_83FA534 - mov r2, r8 - movs r3, 0xA - ldrsh r1, [r2, r3] - lsls r4, r1, 2 - adds r4, r1 - lsls r4, 1 - adds r1, r4, r6 - movs r5, 0 - ldrsh r1, [r1, r5] - adds r2, r6, 0x2 - adds r2, r4, r2 - movs r3, 0 - ldrsh r2, [r2, r3] - adds r3, r6, 0x4 - adds r3, r4, r3 - movs r5, 0 - ldrsh r3, [r3, r5] - adds r5, r6, 0x6 - adds r4, r5 - movs r5, 0 - ldrsh r4, [r4, r5] - str r4, [sp] - movs r4, 0x1 - str r4, [sp, 0x4] - str r4, [sp, 0x8] - bl sub_80D4088 - mov r0, r8 - movs r2, 0xA - ldrsh r1, [r0, r2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - adds r6, 0x8 - adds r0, r6 - ldrh r0, [r0] - mov r3, r8 - strh r0, [r3, 0xC] - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] - movs r0, 0x1 - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080D3A38: .4byte gUnknown_2039A2C -_080D3A3C: .4byte gUnknown_83FA534 - thumb_func_end sub_80D39C4 - - thumb_func_start sub_80D3A40 -sub_80D3A40: @ 80D3A40 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r6, r0, 0 - ldr r0, _080D3A90 @ =gUnknown_2039A2C - ldr r1, [r0] - ldrb r0, [r1] - movs r0, 0 - strb r0, [r1] - mov r8, r0 - movs r7, 0 - ldr r0, _080D3A94 @ =gScanlineEffectRegBuffers - mov r9, r0 -_080D3A5C: - ldr r1, _080D3A94 @ =gScanlineEffectRegBuffers - ldr r0, _080D3A90 @ =gUnknown_2039A2C - ldr r2, [r0] - movs r3, 0x2A - ldrsh r0, [r2, r3] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsrs r3, r0, 8 - movs r5, 0xFF - ands r5, r0 - movs r4, 0xC - ldrsh r0, [r6, r4] - cmp r0, 0 - bne _080D3A98 - movs r1, 0x28 - ldrsh r0, [r2, r1] - cmp r3, r0 - bge _080D3A84 - ldrh r3, [r2, 0x28] -_080D3A84: - lsls r0, r3, 16 - lsls r1, r5, 16 - cmp r0, r1 - ble _080D3AB0 - lsrs r3, r1, 16 - b _080D3AB0 - .align 2, 0 -_080D3A90: .4byte gUnknown_2039A2C -_080D3A94: .4byte gScanlineEffectRegBuffers -_080D3A98: - lsls r0, r5, 16 - asrs r0, 16 - movs r4, 0x28 - ldrsh r1, [r2, r4] - cmp r0, r1 - ble _080D3AA6 - ldrh r5, [r2, 0x28] -_080D3AA6: - lsls r0, r5, 16 - lsls r1, r3, 16 - cmp r0, r1 - bgt _080D3AB0 - lsrs r5, r1, 16 -_080D3AB0: - ldr r0, _080D3AD4 @ =gUnknown_2039A2C - ldr r4, [r0] - movs r0, 0x2A - ldrsh r2, [r4, r0] - lsls r2, 1 - add r2, r9 - lsls r1, r3, 16 - asrs r1, 8 - lsls r0, r5, 16 - asrs r0, 16 - orrs r0, r1 - strh r0, [r2] - cmp r7, 0 - beq _080D3AD8 - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - b _080D3AFC - .align 2, 0 -_080D3AD4: .4byte gUnknown_2039A2C -_080D3AD8: - adds r0, r4, 0 - adds r0, 0x24 - movs r1, 0x1 - movs r2, 0x1 - bl sub_80D4104 - lsls r0, 24 - lsrs r7, r0, 24 - mov r1, r8 - lsls r0, r1, 16 - movs r3, 0x80 - lsls r3, 9 - adds r0, r3 - lsrs r4, r0, 16 - mov r8, r4 - asrs r0, 16 - cmp r0, 0xF - ble _080D3A5C -_080D3AFC: - ldr r0, _080D3B18 @ =gUnknown_2039A2C - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - ldrb r2, [r1] - strb r0, [r1] - movs r0, 0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080D3B18: .4byte gUnknown_2039A2C - thumb_func_end sub_80D3A40 - - thumb_func_start sub_80D3B1C -sub_80D3B1C: @ 80D3B1C - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0xA] - adds r0, 0x1 - strh r0, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - ble _080D3B68 - ldr r1, _080D3B58 @ =0x040000b0 - ldrh r2, [r1, 0xA] - ldr r0, _080D3B5C @ =0x0000c5ff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r2, [r1, 0xA] - ldr r0, _080D3B60 @ =0x00007fff - ands r0, r2 - strh r0, [r1, 0xA] - ldrh r0, [r1, 0xA] - bl sub_80D3E60 - ldr r0, _080D3B64 @ =sub_80D3928 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - b _080D3B80 - .align 2, 0 -_080D3B58: .4byte 0x040000b0 -_080D3B5C: .4byte 0x0000c5ff -_080D3B60: .4byte 0x00007fff -_080D3B64: .4byte sub_80D3928 -_080D3B68: - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - ldr r1, _080D3B84 @ =gUnknown_83FA57A - movs r3, 0xA - ldrsh r0, [r2, r3] - subs r0, 0x1 - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2, 0xE] - movs r0, 0x1 -_080D3B80: - pop {r1} - bx r1 - .align 2, 0 -_080D3B84: .4byte gUnknown_83FA57A - thumb_func_end sub_80D3B1C - - thumb_func_start sub_80D3B88 -sub_80D3B88: @ 80D3B88 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0xE] - subs r0, 0x1 - strh r0, [r1, 0xE] - lsls r0, 16 - cmp r0, 0 - beq _080D3B9C - movs r0, 0 - b _080D3BA0 -_080D3B9C: - movs r0, 0x1 - strh r0, [r1, 0x8] -_080D3BA0: - pop {r1} - bx r1 - thumb_func_end sub_80D3B88 - - thumb_func_start sub_80D3BA4 -sub_80D3BA4: @ 80D3BA4 - push {r4,r5,lr} - ldr r5, _080D3C1C @ =0x040000b0 - ldrh r1, [r5, 0xA] - ldr r0, _080D3C20 @ =0x0000c5ff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r1, [r5, 0xA] - ldr r0, _080D3C24 @ =0x00007fff - ands r0, r1 - strh r0, [r5, 0xA] - ldrh r0, [r5, 0xA] - bl sub_80D3DF4 - ldr r4, _080D3C28 @ =gUnknown_2039A2C - ldr r0, [r4] - ldrb r0, [r0] - cmp r0, 0 - beq _080D3BDC - ldr r1, _080D3C2C @ =0x040000d4 - ldr r0, _080D3C30 @ =gScanlineEffectRegBuffers - str r0, [r1] - movs r2, 0xF0 - lsls r2, 3 - adds r0, r2 - str r0, [r1, 0x4] - ldr r0, _080D3C34 @ =0x800000a0 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_080D3BDC: - ldr r0, [r4] - ldrh r1, [r0, 0x2] - movs r0, 0x48 - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x4] - movs r0, 0x4A - bl SetGpuReg - ldr r0, [r4] - ldrh r1, [r0, 0x8] - movs r0, 0x44 - bl SetGpuReg - ldr r4, _080D3C30 @ =gScanlineEffectRegBuffers - movs r0, 0xF0 - lsls r0, 3 - adds r4, r0 - ldrh r1, [r4] - movs r0, 0x40 - bl SetGpuReg - str r4, [r5] - ldr r0, _080D3C38 @ =0x04000040 - str r0, [r5, 0x4] - ldr r0, _080D3C3C @ =0xa2400001 - str r0, [r5, 0x8] - ldr r0, [r5, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3C1C: .4byte 0x040000b0 -_080D3C20: .4byte 0x0000c5ff -_080D3C24: .4byte 0x00007fff -_080D3C28: .4byte gUnknown_2039A2C -_080D3C2C: .4byte 0x040000d4 -_080D3C30: .4byte gScanlineEffectRegBuffers -_080D3C34: .4byte 0x800000a0 -_080D3C38: .4byte 0x04000040 -_080D3C3C: .4byte 0xa2400001 - thumb_func_end sub_80D3BA4 - - thumb_func_start CreatePhase1Task -CreatePhase1Task: @ 80D3C40 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x4 - mov r8, r0 - adds r4, r1, 0 - adds r5, r2, 0 - adds r6, r3, 0 - ldr r3, [sp, 0x18] - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 16 - lsrs r6, 16 - lsls r3, 16 - lsrs r3, 16 - ldr r0, _080D3C9C @ =sub_80D3CC4 - movs r1, 0x3 - str r3, [sp] - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080D3CA0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - mov r0, r8 - strh r0, [r1, 0xA] - strh r4, [r1, 0xC] - strh r5, [r1, 0xE] - strh r6, [r1, 0x10] - ldr r3, [sp] - strh r3, [r1, 0x12] - strh r0, [r1, 0x14] - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D3C9C: .4byte sub_80D3CC4 -_080D3CA0: .4byte gTasks - thumb_func_end CreatePhase1Task - - thumb_func_start sub_80D3CA4 -sub_80D3CA4: @ 80D3CA4 - push {lr} - ldr r0, _080D3CB8 @ =sub_80D3CC4 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _080D3CBC - movs r0, 0 - b _080D3CBE - .align 2, 0 -_080D3CB8: .4byte sub_80D3CC4 -_080D3CBC: - movs r0, 0x1 -_080D3CBE: - pop {r1} - bx r1 - thumb_func_end sub_80D3CA4 - - thumb_func_start sub_80D3CC4 -sub_80D3CC4: @ 80D3CC4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080D3CF4 @ =gUnknown_83FA588 - ldr r2, _080D3CF8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080D3CD6: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _080D3CD6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D3CF4: .4byte gUnknown_83FA588 -_080D3CF8: .4byte gTasks - thumb_func_end sub_80D3CC4 - - thumb_func_start Phase1_TransitionAll_Func1 -Phase1_TransitionAll_Func1: @ 80D3CFC - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x14] - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080D3D14 - subs r0, r1, 0x1 - strh r0, [r4, 0x14] - lsls r0, 16 - cmp r0, 0 - bne _080D3D38 -_080D3D14: - ldrh r0, [r4, 0xA] - strh r0, [r4, 0x14] - ldrh r0, [r4, 0x10] - ldrh r1, [r4, 0x16] - adds r0, r1 - strh r0, [r4, 0x16] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _080D3D2C - movs r0, 0x10 - strh r0, [r4, 0x16] -_080D3D2C: - movs r0, 0x1 - negs r0, r0 - ldrb r1, [r4, 0x16] - ldr r2, _080D3D54 @ =0x00002d6b - bl BlendPalettes -_080D3D38: - movs r2, 0x16 - ldrsh r0, [r4, r2] - cmp r0, 0xF - ble _080D3D4A - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - ldrh r0, [r4, 0xC] - strh r0, [r4, 0x14] -_080D3D4A: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080D3D54: .4byte 0x00002d6b - thumb_func_end Phase1_TransitionAll_Func1 - - thumb_func_start Phase1_TransitionAll_Func2 -Phase1_TransitionAll_Func2: @ 80D3D58 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x14] - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080D3D70 - subs r0, r1, 0x1 - strh r0, [r4, 0x14] - lsls r0, 16 - cmp r0, 0 - bne _080D3D92 -_080D3D70: - ldrh r0, [r4, 0xC] - strh r0, [r4, 0x14] - ldrh r0, [r4, 0x16] - ldrh r1, [r4, 0x12] - subs r0, r1 - strh r0, [r4, 0x16] - lsls r0, 16 - cmp r0, 0 - bge _080D3D86 - movs r0, 0 - strh r0, [r4, 0x16] -_080D3D86: - movs r0, 0x1 - negs r0, r0 - ldrb r1, [r4, 0x16] - ldr r2, _080D3DB8 @ =0x00002d6b - bl BlendPalettes -_080D3D92: - movs r0, 0x16 - ldrsh r1, [r4, r0] - cmp r1, 0 - bne _080D3DC6 - ldrh r0, [r4, 0xE] - subs r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _080D3DC0 - ldr r0, _080D3DBC @ =sub_80D3CC4 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - b _080D3DC6 - .align 2, 0 -_080D3DB8: .4byte 0x00002d6b -_080D3DBC: .4byte sub_80D3CC4 -_080D3DC0: - ldrh r0, [r4, 0xA] - strh r0, [r4, 0x14] - strh r1, [r4, 0x8] -_080D3DC6: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end Phase1_TransitionAll_Func2 - - thumb_func_start sub_80D3DD0 -sub_80D3DD0: @ 80D3DD0 - push {r4,lr} - ldr r4, _080D3DF0 @ =gUnknown_2039A2C - ldr r0, [r4] - movs r1, 0 - movs r2, 0x3C - bl memset - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x14 - adds r1, 0x16 - bl sub_805A658 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D3DF0: .4byte gUnknown_2039A2C - thumb_func_end sub_80D3DD0 - - thumb_func_start sub_80D3DF4 -sub_80D3DF4: @ 80D3DF4 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80D3DF4 - - thumb_func_start sub_80D3E08 -sub_80D3E08: @ 80D3E08 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x8 - bl GetGpuReg - lsls r0, 16 - lsrs r0, 18 - lsls r0, 30 - lsrs r0, 16 - movs r1, 0xC0 - lsls r1, 19 - adds r0, r1 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80D3E08 - - thumb_func_start sub_80D3E28 -sub_80D3E28: @ 80D3E28 - push {r4-r6,lr} - adds r5, r0, 0 - adds r6, r1, 0 - movs r0, 0x8 - bl GetGpuReg - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 24 - movs r0, 0x1F - ands r4, r0 - movs r0, 0x8 - bl GetGpuReg - lsls r0, 16 - lsrs r0, 18 - lsls r4, 11 - lsls r0, 30 - lsrs r0, 16 - movs r1, 0xC0 - lsls r1, 19 - adds r4, r1 - str r4, [r5] - adds r0, r1 - str r0, [r6] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80D3E28 - - thumb_func_start sub_80D3E60 -sub_80D3E60: @ 80D3E60 - push {lr} - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - pop {r0} - bx r0 - thumb_func_end sub_80D3E60 - - thumb_func_start sub_80D3E74 -sub_80D3E74: @ 80D3E74 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - mov r10, r0 - ldr r0, [sp, 0x20] - ldr r4, [sp, 0x24] - lsls r1, 16 - lsrs r7, r1, 16 - lsls r2, 16 - lsrs r2, 16 - lsls r3, 16 - lsrs r3, 16 - lsls r0, 16 - lsrs r1, r0, 16 - lsls r4, 16 - movs r6, 0 - lsrs r5, r4, 16 - cmp r4, 0 - ble _080D3EDC - lsls r0, r7, 16 - asrs r0, 16 - mov r9, r0 - lsls r1, 16 - mov r8, r1 - lsls r0, r3, 16 - asrs r7, r0, 16 -_080D3EAC: - lsls r4, r2, 16 - asrs r4, 16 - movs r0, 0xFF - ands r0, r4 - mov r2, r8 - asrs r1, r2, 16 - bl Sin - lsls r1, r6, 1 - add r1, r10 - add r0, r9 - strh r0, [r1] - lsls r1, r5, 16 - ldr r0, _080D3EEC @ =0xffff0000 - adds r1, r0 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, r7 - lsls r4, 16 - lsrs r2, r4, 16 - lsrs r5, r1, 16 - cmp r1, 0 - bgt _080D3EAC -_080D3EDC: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D3EEC: .4byte 0xffff0000 - thumb_func_end sub_80D3E74 - - thumb_func_start sub_80D3EF0 -sub_80D3EF0: @ 80D3EF0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - mov r9, r0 - adds r5, r2, 0 - adds r4, r3, 0 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp] - lsls r5, 16 - lsrs r5, 16 - lsls r4, 16 - lsrs r4, 16 - movs r2, 0xA0 - lsls r2, 1 - movs r1, 0xA - bl memset - movs r1, 0 - lsls r4, 16 - asrs r4, 16 - str r4, [sp, 0x4] - lsls r5, 16 - asrs r5, 16 - str r5, [sp, 0x8] -_080D3F28: - lsls r5, r1, 16 - asrs r0, r5, 16 - mov r10, r0 - ldr r1, [sp, 0x4] - bl Sin - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r10 - ldr r1, [sp, 0x4] - bl Cos - ldr r2, [sp] - lsls r1, r2, 16 - asrs r1, 16 - lsls r4, 16 - asrs r4, 16 - subs r2, r1, r4 - lsls r2, 16 - adds r1, r4 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r0, 16 - asrs r0, 16 - ldr r3, [sp, 0x8] - subs r1, r3, r0 - lsls r1, 16 - lsrs r7, r1, 16 - adds r0, r3, r0 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsrs r1, r2, 16 - str r5, [sp, 0x10] - cmp r2, 0 - bge _080D3F74 - movs r1, 0 -_080D3F74: - lsls r0, r6, 16 - asrs r0, 16 - cmp r0, 0xF0 - ble _080D3F7E - movs r6, 0xF0 -_080D3F7E: - lsls r0, r7, 16 - cmp r0, 0 - bge _080D3F86 - movs r7, 0 -_080D3F86: - mov r2, r8 - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _080D3F94 - movs r3, 0x9F - mov r8, r3 -_080D3F94: - lsls r0, r1, 24 - lsrs r0, 16 - orrs r6, r0 - lsls r0, r7, 16 - asrs r0, 16 - str r0, [sp, 0xC] - lsls r0, 1 - add r0, r9 - strh r6, [r0] - mov r0, r8 - lsls r4, r0, 16 - asrs r0, r4, 15 - add r0, r9 - strh r6, [r0] - mov r0, r10 - adds r0, 0x1 - lsls r0, 16 - asrs r0, 16 - ldr r1, [sp, 0x4] - bl Cos - lsls r0, 16 - asrs r0, 16 - ldr r2, [sp, 0x8] - subs r1, r2, r0 - lsls r1, 16 - adds r0, r2, r0 - lsls r0, 16 - lsrs r2, r0, 16 - lsrs r3, r1, 16 - cmp r1, 0 - bge _080D3FD6 - movs r3, 0 -_080D3FD6: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _080D3FE0 - movs r2, 0x9F -_080D3FE0: - lsls r0, r3, 16 - asrs r1, r0, 16 - adds r3, r0, 0 - lsls r5, r2, 16 - ldr r0, [sp, 0xC] - cmp r0, r1 - ble _080D4004 - adds r2, r1, 0 -_080D3FF0: - lsls r1, r7, 16 - ldr r0, _080D4084 @ =0xffff0000 - adds r1, r0 - asrs r0, r1, 15 - add r0, r9 - strh r6, [r0] - lsrs r7, r1, 16 - asrs r1, 16 - cmp r1, r2 - bgt _080D3FF0 -_080D4004: - lsls r1, r7, 16 - asrs r0, r3, 16 - cmp r1, r3 - bge _080D4022 - adds r2, r0, 0 -_080D400E: - movs r3, 0x80 - lsls r3, 9 - adds r0, r1, r3 - asrs r1, r0, 15 - add r1, r9 - strh r6, [r1] - adds r1, r0, 0 - asrs r0, r1, 16 - cmp r0, r2 - blt _080D400E -_080D4022: - asrs r0, r5, 16 - cmp r4, r5 - ble _080D4040 - adds r1, r0, 0 -_080D402A: - ldr r2, _080D4084 @ =0xffff0000 - adds r0, r4, r2 - lsrs r3, r0, 16 - mov r8, r3 - asrs r0, 15 - add r0, r9 - strh r6, [r0] - lsls r4, r3, 16 - asrs r0, r4, 16 - cmp r0, r1 - bgt _080D402A -_080D4040: - mov r0, r8 - lsls r4, r0, 16 - asrs r0, r5, 16 - cmp r4, r5 - bge _080D4060 - adds r2, r0, 0 -_080D404C: - movs r1, 0x80 - lsls r1, 9 - adds r0, r4, r1 - asrs r1, r0, 15 - add r1, r9 - strh r6, [r1] - adds r4, r0, 0 - asrs r0, r4, 16 - cmp r0, r2 - blt _080D404C -_080D4060: - ldr r2, [sp, 0x10] - movs r3, 0x80 - lsls r3, 9 - adds r0, r2, r3 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x3F - bgt _080D4072 - b _080D3F28 -_080D4072: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D4084: .4byte 0xffff0000 - thumb_func_end sub_80D3EF0 - - thumb_func_start sub_80D4088 -sub_80D4088: @ 80D4088 - push {r4-r7,lr} - adds r6, r0, 0 - ldr r0, [sp, 0x14] - ldr r5, [sp, 0x18] - ldr r4, [sp, 0x1C] - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - lsls r3, 16 - lsrs r3, 16 - lsls r0, 16 - lsrs r0, 16 - adds r7, r0, 0 - lsls r5, 16 - lsrs r5, 16 - lsls r4, 16 - lsrs r4, 16 - strh r1, [r6] - strh r2, [r6, 0x2] - strh r1, [r6, 0x4] - strh r2, [r6, 0x6] - strh r3, [r6, 0x8] - strh r7, [r6, 0xA] - strh r5, [r6, 0xC] - strh r4, [r6, 0xE] - lsls r3, 16 - asrs r3, 16 - lsls r1, 16 - asrs r1, 16 - subs r3, r1 - strh r3, [r6, 0x10] - lsls r0, r3, 16 - cmp r0, 0 - bge _080D40DA - negs r0, r3 - strh r0, [r6, 0x10] - lsls r0, r5, 16 - asrs r0, 16 - negs r0, r0 - strh r0, [r6, 0xC] -_080D40DA: - lsls r0, r7, 16 - asrs r0, 16 - lsls r1, r2, 16 - asrs r1, 16 - subs r1, r0, r1 - strh r1, [r6, 0x12] - lsls r0, r1, 16 - cmp r0, 0 - bge _080D40F8 - negs r0, r1 - strh r0, [r6, 0x12] - lsls r0, r4, 16 - asrs r0, 16 - negs r0, r0 - strh r0, [r6, 0xE] -_080D40F8: - movs r0, 0 - strh r0, [r6, 0x14] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80D4088 - - thumb_func_start sub_80D4104 -sub_80D4104: @ 80D4104 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r3, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - ldrh r0, [r3, 0x10] - mov r8, r0 - movs r1, 0x10 - ldrsh r6, [r3, r1] - ldrh r2, [r3, 0x12] - mov r12, r2 - movs r4, 0x12 - ldrsh r5, [r3, r4] - cmp r6, r5 - ble _080D4154 - ldrh r0, [r3, 0xC] - ldrh r2, [r3, 0x4] - adds r1, r0, r2 - strh r1, [r3, 0x4] - ldrh r2, [r3, 0x14] - add r2, r12 - strh r2, [r3, 0x14] - lsls r1, r2, 16 - asrs r1, 16 - adds r4, r0, 0 - ldrh r7, [r3, 0xE] - cmp r1, r6 - ble _080D417A - ldrh r1, [r3, 0x6] - adds r0, r7, r1 - strh r0, [r3, 0x6] - mov r1, r8 - b _080D4176 -_080D4154: - ldrh r0, [r3, 0xE] - ldrh r2, [r3, 0x6] - adds r1, r0, r2 - strh r1, [r3, 0x6] - ldrh r2, [r3, 0x14] - add r2, r8 - strh r2, [r3, 0x14] - lsls r1, r2, 16 - asrs r1, 16 - ldrh r4, [r3, 0xC] - adds r7, r0, 0 - cmp r1, r5 - ble _080D417A - ldrh r1, [r3, 0x4] - adds r0, r4, r1 - strh r0, [r3, 0x4] - mov r1, r12 -_080D4176: - subs r0, r2, r1 - strh r0, [r3, 0x14] -_080D417A: - movs r5, 0 - lsls r0, r4, 16 - asrs r2, r0, 16 - cmp r2, 0 - ble _080D4192 - movs r4, 0x4 - ldrsh r1, [r3, r4] - movs r4, 0x8 - ldrsh r0, [r3, r4] - ldrh r4, [r3, 0x8] - cmp r1, r0 - bge _080D41A4 -_080D4192: - cmp r2, 0 - bge _080D41B2 - movs r0, 0x4 - ldrsh r1, [r3, r0] - movs r2, 0x8 - ldrsh r0, [r3, r2] - ldrh r4, [r3, 0x8] - cmp r1, r0 - bgt _080D41B2 -_080D41A4: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - mov r0, r9 - cmp r0, 0 - beq _080D41B2 - strh r4, [r3, 0x4] -_080D41B2: - lsls r0, r7, 16 - asrs r2, r0, 16 - cmp r2, 0 - ble _080D41C8 - movs r4, 0x6 - ldrsh r1, [r3, r4] - movs r4, 0xA - ldrsh r0, [r3, r4] - ldrh r4, [r3, 0xA] - cmp r1, r0 - bge _080D41DA -_080D41C8: - cmp r2, 0 - bge _080D41E8 - movs r0, 0x6 - ldrsh r1, [r3, r0] - movs r2, 0xA - ldrsh r0, [r3, r2] - ldrh r4, [r3, 0xA] - cmp r1, r0 - bgt _080D41E8 -_080D41DA: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - mov r0, r10 - cmp r0, 0 - beq _080D41E8 - strh r4, [r3, 0x6] -_080D41E8: - cmp r5, 0x2 - beq _080D41F0 - movs r0, 0 - b _080D41F2 -_080D41F0: - movs r0, 0x1 -_080D41F2: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80D4104 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/clear_save_data_screen.s b/asm/clear_save_data_screen.s index f6cd11410..5d9d2ac03 100644 --- a/asm/clear_save_data_screen.s +++ b/asm/clear_save_data_screen.s @@ -26,8 +26,8 @@ sub_80F558C: @ 80F558C bx r0 thumb_func_end sub_80F558C - thumb_func_start sub_80F55A0 -sub_80F55A0: @ 80F55A0 + thumb_func_start CB2_SaveClearScreen_Init +CB2_SaveClearScreen_Init: @ 80F55A0 push {r4,lr} ldr r4, _080F55D0 @ =gUnknown_203AB54 movs r0, 0x4 @@ -52,7 +52,7 @@ sub_80F55A0: @ 80F55A0 _080F55D0: .4byte gUnknown_203AB54 _080F55D4: .4byte sub_80F55DC _080F55D8: .4byte sub_80F5574 - thumb_func_end sub_80F55A0 + thumb_func_end CB2_SaveClearScreen_Init thumb_func_start sub_80F55DC sub_80F55DC: @ 80F55DC diff --git a/asm/overworld.s b/asm/overworld.s index 39fbe770a..56c253477 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -3398,13 +3398,13 @@ sub_8056578: @ 8056578 bx r0 thumb_func_end sub_8056578 - thumb_func_start sub_80565A8 -sub_80565A8: @ 80565A8 + thumb_func_start CB2_OverworldBasic +CB2_OverworldBasic: @ 80565A8 push {lr} bl sub_8056578 pop {r0} bx r0 - thumb_func_end sub_80565A8 + thumb_func_end CB2_OverworldBasic thumb_func_start sub_80565B4 sub_80565B4: @ 80565B4 diff --git a/asm/slot_machine.s b/asm/slot_machine.s deleted file mode 100644 index c5f6d2b72..000000000 --- a/asm/slot_machine.s +++ /dev/null @@ -1,4794 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start PlaySlotMachine -PlaySlotMachine: @ 813F804 - push {r4-r6,lr} - adds r6, r1, 0 - lsls r0, 16 - lsrs r5, r0, 16 - bl ResetTasks - ldr r4, _0813F828 @ =gUnknown_203F3A0 - movs r0, 0x54 - bl Alloc - str r0, [r4] - cmp r0, 0 - bne _0813F82C - adds r0, r6, 0 - bl SetMainCallback2 - b _0813F840 - .align 2, 0 -_0813F828: .4byte gUnknown_203F3A0 -_0813F82C: - cmp r5, 0x5 - bls _0813F832 - movs r5, 0 -_0813F832: - strh r5, [r0, 0x4] - str r6, [r0] - bl sub_813F84C - ldr r0, _0813F848 @ =sub_813F898 - bl SetMainCallback2 -_0813F840: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813F848: .4byte sub_813F898 - thumb_func_end PlaySlotMachine - - thumb_func_start sub_813F84C -sub_813F84C: @ 813F84C - push {r4-r6,lr} - movs r1, 0 - strh r1, [r0, 0x6] - strh r1, [r0, 0xE] - adds r0, 0x50 - strh r1, [r0] - movs r3, 0 - ldr r6, _0813F894 @ =gUnknown_203F3A0 - movs r4, 0 - movs r5, 0x15 -_0813F860: - ldr r2, [r6] - lsls r1, r3, 2 - adds r0, r2, 0 - adds r0, 0x14 - adds r0, r1 - str r4, [r0] - lsls r1, r3, 1 - adds r0, r2, 0 - adds r0, 0x20 - adds r0, r1 - strh r4, [r0] - adds r0, r2, 0 - adds r0, 0x26 - adds r0, r1 - strh r4, [r0] - adds r0, r2, 0 - adds r0, 0x2C - adds r0, r1 - strh r5, [r0] - adds r3, 0x1 - cmp r3, 0x2 - ble _0813F860 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813F894: .4byte gUnknown_203F3A0 - thumb_func_end sub_813F84C - - thumb_func_start sub_813F898 -sub_813F898: @ 813F898 - push {r4,lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - ldr r0, _0813F8BC @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r4, r0, r1 - ldrb r0, [r4] - cmp r0, 0 - beq _0813F8C0 - cmp r0, 0x1 - beq _0813F8EC - b _0813F916 - .align 2, 0 -_0813F8BC: .4byte gMain -_0813F8C0: - bl sub_814104C - cmp r0, 0 - beq _0813F8DC - ldr r0, _0813F8D8 @ =gUnknown_203F3A0 - ldr r0, [r0] - ldr r0, [r0] - bl SetMainCallback2 - bl sub_813F92C - b _0813F916 - .align 2, 0 -_0813F8D8: .4byte gUnknown_203F3A0 -_0813F8DC: - movs r0, 0 - movs r1, 0 - bl sub_8141148 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0813F916 -_0813F8EC: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813F916 - ldr r0, _0813F91C @ =sub_813F964 - movs r1, 0 - bl CreateTask - ldr r4, _0813F920 @ =gUnknown_203F3A0 - ldr r1, [r4] - strb r0, [r1, 0x10] - ldr r0, _0813F924 @ =sub_8140060 - movs r1, 0x1 - bl CreateTask - ldr r1, [r4] - strb r0, [r1, 0x11] - ldr r0, _0813F928 @ =sub_813F94C - bl SetMainCallback2 -_0813F916: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813F91C: .4byte sub_813F964 -_0813F920: .4byte gUnknown_203F3A0 -_0813F924: .4byte sub_8140060 -_0813F928: .4byte sub_813F94C - thumb_func_end sub_813F898 - - thumb_func_start sub_813F92C -sub_813F92C: @ 813F92C - push {r4,lr} - bl sub_8141094 - ldr r4, _0813F948 @ =gUnknown_203F3A0 - ldr r0, [r4] - cmp r0, 0 - beq _0813F942 - bl Free - movs r0, 0 - str r0, [r4] -_0813F942: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813F948: .4byte gUnknown_203F3A0 - thumb_func_end sub_813F92C - - thumb_func_start sub_813F94C -sub_813F94C: @ 813F94C - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_813F94C - - thumb_func_start sub_813F964 -sub_813F964: @ 813F964 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813F988 @ =gTasks+0x8 - adds r6, r1, r0 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0x4 - bls _0813F97E - b _0813FBB8 -_0813F97E: - lsls r0, 2 - ldr r1, _0813F98C @ =_0813F990 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0813F988: .4byte gTasks+0x8 -_0813F98C: .4byte _0813F990 - .align 2, 0 -_0813F990: - .4byte _0813F9A4 - .4byte _0813FAA8 - .4byte _0813FAE4 - .4byte _0813FB08 - .4byte _0813FB48 -_0813F9A4: - bl GetCoins - lsls r0, 16 - cmp r0, 0 - bne _0813F9BC - ldr r0, _0813F9B8 @ =sub_813FBC0 - bl sub_8140030 - b _0813FBB8 - .align 2, 0 -_0813F9B8: .4byte sub_813FBC0 -_0813F9BC: - ldr r1, _0813F9F4 @ =gMain - ldrh r2, [r1, 0x2E] - movs r0, 0x80 - ands r0, r2 - cmp r0, 0 - beq _0813F9FC - ldr r0, _0813F9F8 @ =gUnknown_203F3A0 - ldr r1, [r0] - ldrh r0, [r1, 0xE] - adds r0, 0x1 - strh r0, [r1, 0xE] - movs r0, 0x1 - bl TakeCoins - movs r0, 0x58 - bl PlaySE - movs r0, 0x8 - movs r1, 0 - bl sub_8141148 - movs r0, 0x2 - movs r1, 0x1 - bl sub_8141148 - movs r0, 0x1 - b _0813FBB6 - .align 2, 0 -_0813F9F4: .4byte gMain -_0813F9F8: .4byte gUnknown_203F3A0 -_0813F9FC: - movs r0, 0x80 - lsls r0, 1 - ands r0, r2 - cmp r0, 0 - beq _0813FA5C - ldr r5, _0813FA2C @ =gUnknown_203F3A0 - ldr r0, [r5] - ldrh r0, [r0, 0xE] - movs r7, 0x3 - subs r4, r7, r0 - bl GetCoins - lsls r0, 16 - lsrs r0, 16 - cmp r0, r4 - blt _0813FA30 - ldr r0, [r5] - strh r7, [r0, 0xE] - lsls r0, r4, 16 - lsrs r0, 16 - bl TakeCoins - b _0813FA42 - .align 2, 0 -_0813FA2C: .4byte gUnknown_203F3A0 -_0813FA30: - bl GetCoins - ldr r1, [r5] - ldrh r2, [r1, 0xE] - adds r0, r2 - strh r0, [r1, 0xE] - movs r0, 0 - bl SetCoins -_0813FA42: - movs r0, 0x58 - bl PlaySE - movs r0, 0x8 - movs r1, 0 - bl sub_8141148 - movs r0, 0x2 - movs r1, 0x1 - bl sub_8141148 - movs r0, 0x1 - b _0813FBB6 -_0813FA5C: - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - beq _0813FA78 - ldr r0, _0813FA74 @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r0, [r0, 0xE] - cmp r0, 0 - beq _0813FA78 - movs r0, 0x2 - b _0813FBB6 - .align 2, 0 -_0813FA74: .4byte gUnknown_203F3A0 -_0813FA78: - ldrh r1, [r1, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0813FA90 - ldr r0, _0813FA8C @ =sub_813FCAC - bl sub_8140030 - b _0813FBB8 - .align 2, 0 -_0813FA8C: .4byte sub_813FCAC -_0813FA90: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0813FA9A - b _0813FBB8 -_0813FA9A: - ldr r0, _0813FAA4 @ =sub_813FC2C - bl sub_8140030 - b _0813FBB8 - .align 2, 0 -_0813FAA4: .4byte sub_813FC2C -_0813FAA8: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - beq _0813FAB4 - b _0813FBB8 -_0813FAB4: - movs r0, 0x1 - bl sub_8141180 - adds r4, r0, 0 - cmp r4, 0 - beq _0813FAC2 - b _0813FBB8 -_0813FAC2: - ldr r0, _0813FADC @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r0, [r0, 0xE] - cmp r0, 0x3 - beq _0813FAD6 - bl GetCoins - lsls r0, 16 - cmp r0, 0 - bne _0813FAE0 -_0813FAD6: - movs r0, 0x2 - b _0813FBB6 - .align 2, 0 -_0813FADC: .4byte gUnknown_203F3A0 -_0813FAE0: - strh r4, [r6] - b _0813FBB8 -_0813FAE4: - bl sub_811539C - bl sub_81409B4 - bl sub_8140148 - ldr r0, _0813FB04 @ =gUnknown_203F3A0 - ldr r1, [r0] - movs r0, 0 - strh r0, [r1, 0x6] - movs r0, 0x3 - movs r1, 0 - bl sub_8141148 - b _0813FBB4 - .align 2, 0 -_0813FB04: .4byte gUnknown_203F3A0 -_0813FB08: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FBB8 - ldr r0, _0813FB40 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0813FBB8 - movs r0, 0x18 - bl PlaySE - ldr r4, _0813FB44 @ =gUnknown_203F3A0 - ldr r0, [r4] - ldrh r1, [r0, 0x6] - adds r0, r1, 0 - bl sub_814016C - ldr r0, [r4] - ldrb r0, [r0, 0x6] - movs r1, 0 - bl sub_8141C30 - movs r0, 0x4 - b _0813FBB6 - .align 2, 0 -_0813FB40: .4byte gMain -_0813FB44: .4byte gUnknown_203F3A0 -_0813FB48: - ldr r5, _0813FB90 @ =gUnknown_203F3A0 - ldr r0, [r5] - ldrh r0, [r0, 0x6] - bl sub_81401A0 - cmp r0, 0 - bne _0813FBB8 - movs r0, 0 - bl sub_8141180 - adds r4, r0, 0 - cmp r4, 0 - bne _0813FBB8 - ldr r1, [r5] - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2 - bls _0813FBB4 - bl sub_8140A80 - ldr r1, [r5] - strh r0, [r1, 0xA] - strh r4, [r1, 0xE] - strh r4, [r1, 0x6] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _0813FB98 - ldr r0, _0813FB94 @ =sub_813FD84 - bl sub_8140030 - b _0813FBB8 - .align 2, 0 -_0813FB90: .4byte gUnknown_203F3A0 -_0813FB94: .4byte sub_813FD84 -_0813FB98: - cmp r0, 0x6 - bne _0813FBA2 - movs r0, 0x1C - bl IncrementGameStat -_0813FBA2: - bl sub_8140A70 - ldr r0, _0813FBB0 @ =sub_813FE1C - bl sub_8140030 - b _0813FBB8 - .align 2, 0 -_0813FBB0: .4byte sub_813FE1C -_0813FBB4: - movs r0, 0x3 -_0813FBB6: - strh r0, [r6] -_0813FBB8: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_813F964 - - thumb_func_start sub_813FBC0 -sub_813FBC0: @ 813FBC0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813FBE4 @ =gTasks+0x8 - adds r4, r1, r0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _0813FBF8 - cmp r0, 0x1 - bgt _0813FBE8 - cmp r0, 0 - beq _0813FBEE - b _0813FC1C - .align 2, 0 -_0813FBE4: .4byte gTasks+0x8 -_0813FBE8: - cmp r0, 0x2 - beq _0813FC0A - b _0813FC1C -_0813FBEE: - movs r0, 0x9 - movs r1, 0 - bl sub_8141148 - b _0813FC02 -_0813FBF8: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FC1C -_0813FC02: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0813FC1C -_0813FC0A: - ldr r0, _0813FC24 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0xF3 - ands r0, r1 - cmp r0, 0 - beq _0813FC1C - ldr r0, _0813FC28 @ =sub_813FFD8 - bl sub_8140030 -_0813FC1C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813FC24: .4byte gMain -_0813FC28: .4byte sub_813FFD8 - thumb_func_end sub_813FBC0 - - thumb_func_start sub_813FC2C -sub_813FC2C: @ 813FC2C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813FC50 @ =gTasks+0x8 - adds r4, r1, r0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _0813FC62 - cmp r0, 0x1 - bgt _0813FC54 - cmp r0, 0 - beq _0813FC5E - b _0813FCA0 - .align 2, 0 -_0813FC50: .4byte gTasks+0x8 -_0813FC54: - cmp r0, 0x2 - beq _0813FC6E - cmp r0, 0x3 - beq _0813FC90 - b _0813FCA0 -_0813FC5E: - movs r0, 0xE - b _0813FC7C -_0813FC62: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FCA0 - b _0813FC82 -_0813FC6E: - ldr r0, _0813FC8C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0813FCA0 - movs r0, 0xF -_0813FC7C: - movs r1, 0 - bl sub_8141148 -_0813FC82: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0813FCA0 - .align 2, 0 -_0813FC8C: .4byte gMain -_0813FC90: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FCA0 - ldr r0, _0813FCA8 @ =sub_813F964 - bl sub_8140030 -_0813FCA0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813FCA8: .4byte sub_813F964 - thumb_func_end sub_813FC2C - - thumb_func_start sub_813FCAC -sub_813FCAC: @ 813FCAC - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813FCD0 @ =gTasks+0x8 - adds r4, r1, r0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bhi _0813FD78 - lsls r0, 2 - ldr r1, _0813FCD4 @ =_0813FCD8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0813FCD0: .4byte gTasks+0x8 -_0813FCD4: .4byte _0813FCD8 - .align 2, 0 -_0813FCD8: - .4byte _0813FCEC - .4byte _0813FCF6 - .4byte _0813FD08 - .4byte _0813FD52 - .4byte _0813FD68 -_0813FCEC: - movs r0, 0xA - movs r1, 0 - bl sub_8141148 - b _0813FD00 -_0813FCF6: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FD78 -_0813FD00: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0813FD78 -_0813FD08: - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _0813FD28 - cmp r1, 0 - bgt _0813FD22 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0813FD44 - b _0813FD78 -_0813FD22: - cmp r1, 0x1 - beq _0813FD44 - b _0813FD78 -_0813FD28: - ldr r0, _0813FD40 @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r0, [r0, 0xE] - bl GiveCoins - movs r0, 0x8 - movs r1, 0 - bl sub_8141148 - movs r0, 0x3 - strh r0, [r4] - b _0813FD78 - .align 2, 0 -_0813FD40: .4byte gUnknown_203F3A0 -_0813FD44: - movs r0, 0xB - movs r1, 0 - bl sub_8141148 - movs r0, 0x4 - strh r0, [r4] - b _0813FD78 -_0813FD52: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FD78 - ldr r0, _0813FD64 @ =sub_813FFD8 - bl sub_8140030 - b _0813FD78 - .align 2, 0 -_0813FD64: .4byte sub_813FFD8 -_0813FD68: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FD78 - ldr r0, _0813FD80 @ =sub_813F964 - bl sub_8140030 -_0813FD78: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813FD80: .4byte sub_813F964 - thumb_func_end sub_813FCAC - - thumb_func_start sub_813FD84 -sub_813FD84: @ 813FD84 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813FDA8 @ =gTasks+0x8 - adds r5, r1, r0 - movs r0, 0 - ldrsh r4, [r5, r0] - cmp r4, 0x1 - beq _0813FDBE - cmp r4, 0x1 - bgt _0813FDAC - cmp r4, 0 - beq _0813FDB2 - b _0813FE10 - .align 2, 0 -_0813FDA8: .4byte gTasks+0x8 -_0813FDAC: - cmp r4, 0x2 - beq _0813FDEC - b _0813FE10 -_0813FDB2: - movs r0, 0x6 - movs r1, 0 - bl sub_8141148 - strh r4, [r5, 0x2] - b _0813FDE4 -_0813FDBE: - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3C - ble _0813FE10 - movs r0, 0x7 - movs r1, 0 - bl sub_8141148 - movs r0, 0x2 - movs r1, 0x1 - bl sub_8141148 - movs r0, 0xD - movs r1, 0x2 - bl sub_8141148 -_0813FDE4: - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _0813FE10 -_0813FDEC: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FE10 - movs r0, 0x1 - bl sub_8141180 - cmp r0, 0 - bne _0813FE10 - movs r0, 0x2 - bl sub_8141180 - cmp r0, 0 - bne _0813FE10 - ldr r0, _0813FE18 @ =sub_813F964 - bl sub_8140030 -_0813FE10: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813FE18: .4byte sub_813F964 - thumb_func_end sub_813FD84 - - thumb_func_start sub_813FE1C -sub_813FE1C: @ 813FE1C - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813FE40 @ =gTasks+0x8 - adds r5, r1, r0 - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0x5 - bls _0813FE36 - b _0813FFCE -_0813FE36: - lsls r0, 2 - ldr r1, _0813FE44 @ =_0813FE48 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0813FE40: .4byte gTasks+0x8 -_0813FE44: .4byte _0813FE48 - .align 2, 0 -_0813FE48: - .4byte _0813FE60 - .4byte _0813FEA0 - .4byte _0813FECC - .4byte _0813FF78 - .4byte _0813FF92 - .4byte _0813FFB4 -_0813FE60: - ldr r0, _0813FE7C @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r0, [r0, 0xA] - subs r0, 0x5 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _0813FE80 - movs r0, 0x86 - lsls r0, 1 - bl PlayFanfare - b _0813FE86 - .align 2, 0 -_0813FE7C: .4byte gUnknown_203F3A0 -_0813FE80: - ldr r0, _0813FE9C @ =0x0000010d - bl PlayFanfare -_0813FE86: - movs r0, 0x8 - movs r1, 0 - bl sub_8141148 - movs r0, 0x4 - movs r1, 0x1 - bl sub_8141148 - movs r0, 0x8 - strh r0, [r5, 0x2] - b _0813FFAC - .align 2, 0 -_0813FE9C: .4byte 0x0000010d -_0813FEA0: - ldrh r0, [r5, 0x2] - adds r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x78 - bgt _0813FEB0 - b _0813FFCE -_0813FEB0: - movs r0, 0x8 - strh r0, [r5, 0x2] - ldr r0, _0813FEC8 @ =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0813FFAC - movs r0, 0x2 - strh r0, [r5, 0x2] - b _0813FFAC - .align 2, 0 -_0813FEC8: .4byte gMain -_0813FECC: - movs r0, 0 - bl sub_8141180 - adds r6, r0, 0 - cmp r6, 0 - bne _0813FFCE - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _0813FF0C - ldr r0, _0813FF04 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0813FF0C - ldr r4, _0813FF08 @ =gUnknown_203F3A0 - ldr r0, [r4] - adds r0, 0x50 - ldrh r0, [r0] - bl GiveCoins - ldr r0, [r4] - adds r0, 0x50 - strh r6, [r0] - b _0813FF58 - .align 2, 0 -_0813FF04: .4byte gMain -_0813FF08: .4byte gUnknown_203F3A0 -_0813FF0C: - ldrh r0, [r5, 0x2] - subs r0, 0x1 - strh r0, [r5, 0x2] - lsls r0, 16 - cmp r0, 0 - bne _0813FF58 - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _0813FF28 - movs r0, 0x15 - bl PlaySE -_0813FF28: - ldr r4, _0813FF70 @ =gUnknown_203F3A0 - ldr r0, [r4] - adds r0, 0x50 - ldrh r0, [r0] - cmp r0, 0 - beq _0813FF44 - movs r0, 0x1 - bl GiveCoins - ldr r1, [r4] - adds r1, 0x50 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] -_0813FF44: - movs r0, 0x8 - strh r0, [r5, 0x2] - ldr r0, _0813FF74 @ =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0813FF58 - movs r0, 0x2 - strh r0, [r5, 0x2] -_0813FF58: - movs r0, 0x8 - movs r1, 0 - bl sub_8141148 - ldr r0, _0813FF70 @ =gUnknown_203F3A0 - ldr r0, [r0] - adds r0, 0x50 - ldrh r0, [r0] - cmp r0, 0 - bne _0813FFCE - b _0813FFAC - .align 2, 0 -_0813FF70: .4byte gUnknown_203F3A0 -_0813FF74: .4byte gMain -_0813FF78: - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _0813FFCE - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FFCE - movs r0, 0x5 - movs r1, 0 - b _0813FFA8 -_0813FF92: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FFCE - movs r0, 0x2 - movs r1, 0 - bl sub_8141148 - movs r0, 0xD - movs r1, 0x1 -_0813FFA8: - bl sub_8141148 -_0813FFAC: - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _0813FFCE -_0813FFB4: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _0813FFCE - movs r0, 0x1 - bl sub_8141180 - cmp r0, 0 - bne _0813FFCE - ldr r0, _0813FFD4 @ =sub_813F964 - bl sub_8140030 -_0813FFCE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813FFD4: .4byte sub_813F964 - thumb_func_end sub_813FE1C - - thumb_func_start sub_813FFD8 -sub_813FFD8: @ 813FFD8 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813FFF8 @ =gTasks+0x8 - adds r4, r1, r0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0813FFFC - cmp r0, 0x1 - beq _0814000C - b _08140024 - .align 2, 0 -_0813FFF8: .4byte gTasks+0x8 -_0813FFFC: - movs r0, 0x1 - movs r1, 0 - bl sub_8141148 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _08140024 -_0814000C: - movs r0, 0 - bl sub_8141180 - cmp r0, 0 - bne _08140024 - ldr r0, _0814002C @ =gUnknown_203F3A0 - ldr r0, [r0] - ldr r0, [r0] - bl SetMainCallback2 - bl sub_813F92C -_08140024: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0814002C: .4byte gUnknown_203F3A0 - thumb_func_end sub_813FFD8 - - thumb_func_start sub_8140030 -sub_8140030: @ 8140030 - push {r4,lr} - ldr r4, _08140058 @ =gTasks - ldr r1, _0814005C @ =gUnknown_203F3A0 - ldr r3, [r1] - ldrb r2, [r3, 0x10] - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r4 - str r0, [r1] - ldrb r1, [r3, 0x10] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - movs r1, 0 - strh r1, [r0, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08140058: .4byte gTasks -_0814005C: .4byte gUnknown_203F3A0 - thumb_func_end sub_8140030 - - thumb_func_start sub_8140060 -sub_8140060: @ 8140060 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r0, 0 - mov r12, r0 - ldr r1, _08140144 @ =gUnknown_203F3A0 - mov r10, r1 - mov r8, r10 - mov r9, r0 - movs r6, 0 - movs r7, 0 -_0814007A: - mov r2, r8 - ldr r3, [r2] - adds r0, r3, 0 - adds r0, 0x14 - adds r0, r7 - ldr r0, [r0] - mov r1, r12 - lsls r4, r1, 1 - cmp r0, 0 - bne _0814009C - adds r0, r3, 0 - adds r0, 0x26 - adds r0, r6 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, 0 - beq _0814011A -_0814009C: - adds r0, r3, 0 - adds r0, 0x26 - adds r2, r0, r6 - ldrh r5, [r2] - movs r1, 0 - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _081400C4 - adds r1, r3, 0 - adds r1, 0x20 - adds r1, r4 - adds r0, r3, 0 - adds r0, 0x2C - adds r0, r4 - movs r4, 0 - ldrsh r1, [r1, r4] - movs r4, 0 - ldrsh r0, [r0, r4] - cmp r1, r0 - beq _08140104 -_081400C4: - adds r0, r5, 0x1 - movs r1, 0 - strh r0, [r2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _081400EA - strh r1, [r2] - adds r0, r3, 0 - adds r0, 0x20 - adds r1, r0, r6 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - lsls r0, 16 - cmp r0, 0 - bge _081400EA - movs r0, 0x14 - strh r0, [r1] -_081400EA: - mov r1, r8 - ldr r0, [r1] - adds r1, r0, 0 - adds r1, 0x20 - adds r1, r6 - adds r0, 0x2C - adds r0, r6 - movs r2, 0 - ldrsh r1, [r1, r2] - movs r4, 0 - ldrsh r0, [r0, r4] - cmp r1, r0 - bne _0814011A -_08140104: - mov r1, r8 - ldr r0, [r1] - adds r1, r0, 0 - adds r1, 0x2C - adds r1, r6 - movs r2, 0x15 - strh r2, [r1] - adds r0, 0x14 - adds r0, r7 - mov r2, r9 - str r2, [r0] -_0814011A: - adds r6, 0x2 - adds r7, 0x4 - movs r4, 0x1 - add r12, r4 - mov r0, r12 - cmp r0, 0x2 - ble _0814007A - mov r2, r10 - ldr r1, [r2] - adds r0, r1, 0 - adds r0, 0x20 - adds r1, 0x26 - bl sub_8140D7C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08140144: .4byte gUnknown_203F3A0 - thumb_func_end sub_8140060 - - thumb_func_start sub_8140148 -sub_8140148: @ 8140148 - push {r4,lr} - movs r2, 0 - ldr r4, _08140168 @ =gUnknown_203F3A0 - movs r3, 0x1 -_08140150: - ldr r0, [r4] - lsls r1, r2, 2 - adds r0, 0x14 - adds r0, r1 - str r3, [r0] - adds r2, 0x1 - cmp r2, 0x2 - ble _08140150 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08140168: .4byte gUnknown_203F3A0 - thumb_func_end sub_8140148 - - thumb_func_start sub_814016C -sub_814016C: @ 814016C - push {lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - lsrs r1, 16 - adds r2, r1, 0 - cmp r1, 0x1 - beq _08140192 - cmp r1, 0x1 - bgt _08140186 - cmp r1, 0 - beq _0814018C - b _0814019C -_08140186: - cmp r2, 0x2 - beq _08140198 - b _0814019C -_0814018C: - bl sub_81401F0 - b _0814019C -_08140192: - bl sub_81403BC - b _0814019C -_08140198: - bl sub_81404B8 -_0814019C: - pop {r0} - bx r0 - thumb_func_end sub_814016C - - thumb_func_start sub_81401A0 -sub_81401A0: @ 81401A0 - lsls r0, 16 - ldr r1, _081401B0 @ =gUnknown_203F3A0 - ldr r1, [r1] - lsrs r0, 14 - adds r1, 0x14 - adds r1, r0 - ldr r0, [r1] - bx lr - .align 2, 0 -_081401B0: .4byte gUnknown_203F3A0 - thumb_func_end sub_81401A0 - - thumb_func_start sub_81401B4 -sub_81401B4: @ 81401B4 - push {lr} - lsls r0, 16 - ldr r1, _081401E8 @ =gUnknown_203F3A0 - ldr r2, [r1] - lsrs r0, 15 - adds r1, r2, 0 - adds r1, 0x20 - adds r1, r0 - ldrh r1, [r1] - adds r2, 0x26 - adds r2, r0 - movs r3, 0 - ldrsh r0, [r2, r3] - cmp r0, 0 - beq _081401E0 - lsls r0, r1, 16 - ldr r1, _081401EC @ =0xffff0000 - adds r0, r1 - lsrs r1, r0, 16 - cmp r0, 0 - bge _081401E0 - movs r1, 0x14 -_081401E0: - lsls r0, r1, 16 - asrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 -_081401E8: .4byte gUnknown_203F3A0 -_081401EC: .4byte 0xffff0000 - thumb_func_end sub_81401B4 - - thumb_func_start sub_81401F0 -sub_81401F0: @ 81401F0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - bl sub_81401B4 - lsls r0, 16 - lsrs r1, r0, 16 - movs r0, 0 - mov r8, r0 - ldr r0, _0814023C @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r0, [r0, 0x8] - cmp r0, 0 - bne _08140294 - mov r2, r9 - cmp r2, 0 - bne _08140294 - movs r7, 0 - lsls r1, 16 - str r1, [sp, 0xC] - movs r0, 0 - str r0, [sp, 0x8] - mov r10, r0 -_0814022A: - movs r6, 0 - ldr r1, [sp, 0xC] - asrs r0, r1, 16 - subs r0, r7 - adds r0, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - adds r5, r7, 0x1 - b _08140248 - .align 2, 0 -_0814023C: .4byte gUnknown_203F3A0 -_08140240: - adds r6, 0x1 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 -_08140248: - cmp r6, 0x2 - bgt _0814026E - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _08140256 - movs r2, 0 -_08140256: - lsls r0, r2, 16 - asrs r4, r0, 16 - mov r2, r10 - adds r0, r4, r2 - ldr r1, _08140284 @ =gUnknown_8464926 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - bl sub_81408F4 - cmp r0, 0 - beq _08140240 -_0814026E: - cmp r6, 0x3 - bne _0814027C - mov r0, sp - add r0, r8 - strb r7, [r0] - movs r2, 0x1 - add r8, r2 -_0814027C: - adds r7, r5, 0 - cmp r7, 0x4 - ble _0814022A - b _08140348 - .align 2, 0 -_08140284: .4byte gUnknown_8464926 -_08140288: - mov r1, sp - movs r0, 0 - strb r0, [r1] - movs r0, 0x1 - mov r8, r0 - b _081402FE -_08140294: - ldr r0, _08140364 @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r0, [r0, 0x8] - cmp r0, 0x1 - bne _081402AE - lsls r2, r1, 16 - str r2, [sp, 0xC] - mov r0, r9 - lsls r0, 1 - str r0, [sp, 0x8] - mov r2, r9 - cmp r2, 0 - bne _08140348 -_081402AE: - movs r7, 0 - lsls r1, 16 - movs r2, 0x80 - lsls r2, 9 - adds r0, r1, r2 - lsrs r2, r0, 16 - str r1, [sp, 0xC] - mov r0, r9 - lsls r6, r0, 2 - lsls r0, 1 - str r0, [sp, 0x8] - ldr r1, _08140368 @ =gUnknown_8464926 - mov r10, r1 - mov r1, r9 - adds r0, r6, r1 - lsls r0, 2 - adds r5, r0, r1 -_081402D0: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _081402DA - movs r2, 0 -_081402DA: - ldr r0, _08140364 @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r0, [r0, 0x8] - lsls r1, r2, 16 - asrs r4, r1, 16 - adds r1, r4, r5 - add r1, r10 - ldrb r1, [r1] - bl sub_81408F4 - cmp r0, 0 - bne _08140288 - adds r7, 0x1 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r7, 0x2 - ble _081402D0 -_081402FE: - movs r7, 0 - ldr r0, [sp, 0xC] - lsrs r2, r0, 16 - ldr r1, _08140368 @ =gUnknown_8464926 - mov r10, r1 - mov r1, r9 - adds r0, r6, r1 - lsls r0, 2 - adds r6, r0, r1 -_08140310: - lsls r0, r2, 16 - cmp r0, 0 - bge _08140318 - movs r2, 0x14 -_08140318: - ldr r0, _08140364 @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r0, [r0, 0x8] - lsls r1, r2, 16 - asrs r4, r1, 16 - adds r1, r4, r6 - add r1, r10 - ldrb r1, [r1] - bl sub_81408F4 - adds r5, r7, 0x1 - cmp r0, 0 - beq _0814033C - mov r0, sp - add r0, r8 - strb r5, [r0] - movs r2, 0x1 - add r8, r2 -_0814033C: - adds r7, r5, 0 - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r7, 0x3 - ble _08140310 -_08140348: - mov r0, r8 - cmp r0, 0 - bne _0814036C - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x5 - bl __umodsi3 - lsls r0, 16 - lsrs r2, r0, 16 - b _0814037E - .align 2, 0 -_08140364: .4byte gUnknown_203F3A0 -_08140368: .4byte gUnknown_8464926 -_0814036C: - bl Random - lsls r0, 16 - lsrs r0, 16 - mov r1, r8 - bl __modsi3 - add r0, sp - ldrb r2, [r0] -_0814037E: - ldr r0, [sp, 0xC] - asrs r1, r0, 16 - lsls r0, r2, 16 - asrs r0, 16 - subs r1, r0 - lsls r1, 16 - lsrs r2, r1, 16 - asrs r0, r1, 16 - cmp r0, 0 - bge _08140398 - adds r0, 0x15 - lsls r0, 16 - lsrs r2, r0, 16 -_08140398: - ldr r0, _081403B8 @ =gUnknown_203F3A0 - ldr r0, [r0] - mov r1, r9 - strh r1, [r0, 0x32] - adds r0, 0x2C - ldr r1, [sp, 0x8] - adds r0, r1 - strh r2, [r0] - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081403B8: .4byte gUnknown_203F3A0 - thumb_func_end sub_81401F0 - - thumb_func_start sub_81403BC -sub_81403BC: @ 81403BC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r0, _08140470 @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r1, [r0, 0x32] - lsls r7, r1, 16 - asrs r1, r7, 15 - adds r0, 0x20 - adds r0, r1 - ldrh r0, [r0] - adds r0, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _081403EC - movs r4, 0 -_081403EC: - mov r0, r8 - bl sub_81401B4 - lsls r1, r0, 16 - movs r2, 0x80 - lsls r2, 9 - adds r0, r1, r2 - lsrs r2, r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _08140404 - movs r2, 0 -_08140404: - movs r6, 0 - movs r5, 0 - mov r10, r7 - lsls r4, 16 - mov r9, r4 - str r1, [sp, 0x10] - mov r0, r8 - lsls r0, 1 - str r0, [sp, 0xC] -_08140416: - lsls r0, r2, 16 - asrs r4, r0, 16 - ldr r7, _08140470 @ =gUnknown_203F3A0 - ldr r0, [r7] - ldrh r0, [r0, 0x8] - str r0, [sp] - mov r1, r10 - asrs r0, r1, 16 - mov r2, r9 - asrs r1, r2, 16 - mov r2, r8 - adds r3, r4, 0 - bl sub_814054C - cmp r0, 0 - beq _08140440 - mov r0, sp - adds r0, r6 - adds r0, 0x4 - strb r5, [r0] - adds r6, 0x1 -_08140440: - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r0, 0 - bge _0814044C - movs r2, 0x14 -_0814044C: - adds r5, 0x1 - cmp r5, 0x4 - ble _08140416 - cmp r6, 0 - bne _08140474 - ldr r0, [r7] - str r6, [r0, 0x38] - ldrh r0, [r0, 0x8] - subs r0, 0x5 - lsls r0, 16 - lsrs r0, 16 - movs r2, 0 - adds r3, r7, 0 - cmp r0, 0x1 - bhi _08140480 - movs r2, 0x4 - b _08140480 - .align 2, 0 -_08140470: .4byte gUnknown_203F3A0 -_08140474: - ldr r0, [r7] - movs r1, 0x1 - str r1, [r0, 0x38] - add r0, sp, 0x4 - ldrb r2, [r0] - adds r3, r7, 0 -_08140480: - ldr r0, [sp, 0x10] - asrs r1, r0, 16 - lsls r0, r2, 16 - asrs r0, 16 - subs r1, r0 - lsls r1, 16 - lsrs r2, r1, 16 - asrs r0, r1, 16 - cmp r0, 0 - bge _0814049A - adds r0, 0x15 - lsls r0, 16 - lsrs r2, r0, 16 -_0814049A: - ldr r0, [r3] - mov r1, r8 - strh r1, [r0, 0x34] - adds r0, 0x2C - ldr r1, [sp, 0xC] - adds r0, r1 - strh r2, [r0] - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81403BC - - thumb_func_start sub_81404B8 -sub_81404B8: @ 81404B8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x8 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - bl sub_81401B4 - lsls r0, 16 - asrs r0, 16 - mov r9, r0 - mov r4, r9 - movs r6, 0 - movs r5, 0 -_081404D8: - ldr r7, _0814051C @ =gUnknown_203F3A0 - ldr r0, [r7] - ldrh r2, [r0, 0x8] - mov r0, r8 - adds r1, r4, 0 - bl sub_81406E8 - cmp r0, 0 - beq _081404F2 - mov r1, sp - adds r0, r1, r6 - strb r5, [r0] - adds r6, 0x1 -_081404F2: - subs r4, 0x1 - cmp r4, 0 - bge _081404FA - movs r4, 0x14 -_081404FA: - adds r5, 0x1 - cmp r5, 0x4 - ble _081404D8 - cmp r6, 0 - bne _08140520 - ldr r0, [r7] - ldrh r0, [r0, 0x8] - subs r0, 0x5 - lsls r0, 16 - lsrs r0, 16 - movs r2, 0 - adds r1, r7, 0 - cmp r0, 0x1 - bhi _08140526 - movs r2, 0x4 - b _08140526 - .align 2, 0 -_0814051C: .4byte gUnknown_203F3A0 -_08140520: - mov r0, sp - ldrb r2, [r0] - adds r1, r7, 0 -_08140526: - mov r3, r9 - subs r2, r3, r2 - cmp r2, 0 - bge _08140530 - adds r2, 0x15 -_08140530: - ldr r0, [r1] - mov r3, r8 - lsls r1, r3, 1 - adds r0, 0x2C - adds r0, r1 - strh r2, [r0] - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81404B8 - - thumb_func_start sub_814054C -sub_814054C: @ 814054C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - adds r7, r0, 0 - adds r6, r1, 0 - mov r8, r2 - adds r5, r3, 0 - ldr r0, [sp, 0x34] - mov r9, r0 - mov r0, sp - movs r1, 0 - movs r2, 0x9 - bl memset - movs r1, 0x7 - add r0, sp, 0x8 -_08140572: - strb r1, [r0] - subs r0, 0x1 - cmp r0, sp - bge _08140572 - movs r4, 0 - lsls r2, r7, 1 - lsls r0, r7, 2 - mov r1, r8 - lsls r1, 1 - str r1, [sp, 0x10] - mov r3, r8 - lsls r1, r3, 2 - ldr r3, _081405E8 @ =gUnknown_8464926 - mov r12, r3 - adds r0, r7 - lsls r0, 2 - adds r0, r7 - mov r10, r0 - adds r2, r7 - add r2, sp - ldr r3, [sp, 0x10] - add r3, r8 - add r1, r8 - lsls r1, 2 - add r1, r8 - str r1, [sp, 0xC] - add r3, sp -_081405A8: - mov r1, r10 - adds r0, r6, r1 - add r0, r12 - ldrb r0, [r0] - strb r0, [r2] - ldr r1, [sp, 0xC] - adds r0, r5, r1 - add r0, r12 - ldrb r0, [r0] - strb r0, [r3] - adds r6, 0x1 - cmp r6, 0x14 - ble _081405C4 - movs r6, 0 -_081405C4: - adds r5, 0x1 - cmp r5, 0x14 - ble _081405CC - movs r5, 0 -_081405CC: - adds r2, 0x1 - adds r3, 0x1 - adds r4, 0x1 - cmp r4, 0x2 - ble _081405A8 - mov r3, r9 - cmp r3, 0x1 - beq _08140630 - cmp r3, 0x1 - bgt _081405EC - cmp r3, 0 - beq _081405F4 - b _081406A8 - .align 2, 0 -_081405E8: .4byte gUnknown_8464926 -_081405EC: - mov r5, r9 - cmp r5, 0x2 - beq _08140680 - b _081406A8 -_081405F4: - movs r4, 0 -_081405F6: - mov r1, sp - adds r0, r1, r4 - ldrb r1, [r0] - movs r0, 0x1 - bl sub_81408F4 - cmp r0, 0 - bne _081406D2 - adds r4, 0x1 - cmp r4, 0x2 - ble _081405F6 - movs r4, 0 - ldr r3, _0814062C @ =gUnknown_8464890 -_08140610: - ldrb r0, [r3] - mov r5, sp - adds r2, r5, r0 - ldrb r0, [r3, 0x1] - adds r1, r5, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - beq _081406A4 - adds r3, 0x2 - adds r4, 0x1 - cmp r4, 0xE - ble _08140610 - b _081406D2 - .align 2, 0 -_0814062C: .4byte gUnknown_8464890 -_08140630: - cmp r7, 0 - beq _0814063A - mov r0, r8 - cmp r0, 0 - bne _081406A4 -_0814063A: - cmp r7, 0x1 - beq _08140644 - mov r1, r8 - cmp r1, 0x1 - bne _08140662 -_08140644: - movs r4, 0 - ldr r3, _0814067C @ =gUnknown_8464890 -_08140648: - ldrb r0, [r3] - mov r5, sp - adds r2, r5, r0 - ldrb r0, [r3, 0x1] - adds r1, r5, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - beq _081406D2 - adds r3, 0x6 - adds r4, 0x3 - cmp r4, 0xE - ble _08140648 -_08140662: - movs r4, 0 -_08140664: - mov r1, sp - adds r0, r1, r4 - ldrb r1, [r0] - mov r0, r9 - bl sub_81408F4 - cmp r0, 0 - bne _081406A4 - adds r4, 0x1 - cmp r4, 0x2 - ble _08140664 - b _081406D2 - .align 2, 0 -_0814067C: .4byte gUnknown_8464890 -_08140680: - cmp r7, 0x2 - beq _0814068A - mov r3, r8 - cmp r3, 0x2 - bne _081406A8 -_0814068A: - movs r4, 0 -_0814068C: - mov r5, sp - adds r0, r5, r4 - ldrb r1, [r0] - mov r0, r9 - bl sub_81408F4 - cmp r0, 0 - bne _081406A4 - adds r4, 0x1 - cmp r4, 0x8 - ble _0814068C - b _081406D2 -_081406A4: - movs r0, 0x1 - b _081406D4 -_081406A8: - movs r4, 0 - ldr r5, _081406E4 @ =gUnknown_8464890 -_081406AC: - ldrb r0, [r5] - mov r1, sp - adds r2, r1, r0 - ldrb r0, [r5, 0x1] - adds r1, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bne _081406CA - adds r1, r0, 0 - mov r0, r9 - bl sub_81408F4 - cmp r0, 0 - bne _081406A4 -_081406CA: - adds r5, 0x2 - adds r4, 0x1 - cmp r4, 0xE - ble _081406AC -_081406D2: - movs r0, 0 -_081406D4: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081406E4: .4byte gUnknown_8464890 - thumb_func_end sub_814054C - - thumb_func_start sub_81406E8 -sub_81406E8: @ 81406E8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - adds r7, r0, 0 - adds r5, r1, 0 - mov r8, r2 - ldr r0, _081407C8 @ =gUnknown_203F3A0 - ldr r2, [r0] - movs r1, 0x32 - ldrsh r0, [r2, r1] - lsls r0, 1 - adds r1, r2, 0 - adds r1, 0x20 - adds r0, r1, r0 - movs r3, 0 - ldrsh r0, [r0, r3] - adds r6, r0, 0x1 - movs r3, 0x34 - ldrsh r0, [r2, r3] - lsls r0, 1 - adds r1, r0 - movs r3, 0 - ldrsh r0, [r1, r3] - adds r3, r0, 0x1 - adds r5, 0x1 - cmp r6, 0x14 - ble _08140726 - movs r6, 0 -_08140726: - cmp r3, 0x14 - ble _0814072C - movs r3, 0 -_0814072C: - cmp r5, 0x14 - ble _08140732 - movs r5, 0 -_08140732: - movs r4, 0 - lsls r1, r7, 1 - lsls r0, r7, 2 - mov r9, r2 - ldr r2, _081407CC @ =gUnknown_8464926 - mov r10, r2 - adds r1, r7 - add r1, sp - mov r12, r1 - adds r0, r7 - lsls r0, 2 - adds r0, r7 - str r0, [sp, 0xC] -_0814074C: - mov r7, r9 - movs r0, 0x32 - ldrsh r1, [r7, r0] - lsls r0, r1, 1 - adds r0, r1 - adds r0, r4 - mov r7, sp - adds r2, r7, r0 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r1 - adds r0, r6, r0 - add r0, r10 - ldrb r0, [r0] - strb r0, [r2] - mov r0, r9 - movs r2, 0x34 - ldrsh r1, [r0, r2] - lsls r0, r1, 1 - adds r0, r1 - adds r0, r4 - adds r2, r7, r0 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r1 - adds r0, r3, r0 - add r0, r10 - ldrb r0, [r0] - strb r0, [r2] - ldr r7, [sp, 0xC] - adds r0, r5, r7 - add r0, r10 - ldrb r0, [r0] - mov r1, r12 - strb r0, [r1] - adds r6, 0x1 - cmp r6, 0x14 - ble _0814079E - movs r6, 0 -_0814079E: - adds r3, 0x1 - cmp r3, 0x14 - ble _081407A6 - movs r3, 0 -_081407A6: - adds r5, 0x1 - cmp r5, 0x14 - ble _081407AE - movs r5, 0 -_081407AE: - movs r2, 0x1 - add r12, r2 - adds r4, 0x1 - cmp r4, 0x2 - ble _0814074C - mov r3, r8 - cmp r3, 0x1 - beq _08140828 - cmp r3, 0x1 - bgt _081407D0 - cmp r3, 0 - beq _081407D8 - b _081408A0 - .align 2, 0 -_081407C8: .4byte gUnknown_203F3A0 -_081407CC: .4byte gUnknown_8464926 -_081407D0: - mov r6, r8 - cmp r6, 0x2 - beq _08140870 - b _081408A0 -_081407D8: - movs r4, 0 -_081407DA: - mov r7, sp - adds r0, r7, r4 - ldrb r1, [r0] - movs r0, 0x1 - bl sub_81408F4 - cmp r0, 0 - bne _081408DC - adds r4, 0x1 - cmp r4, 0x2 - ble _081407DA - movs r4, 0 - ldr r2, _08140824 @ =gUnknown_84648AE - movs r3, 0 - adds r5, r2, 0x2 -_081407F8: - ldrb r0, [r2] - mov r6, sp - adds r1, r6, r0 - ldrb r0, [r2, 0x1] - add r0, sp - ldrb r1, [r1] - ldrb r0, [r0] - cmp r1, r0 - bne _08140816 - adds r0, r3, r5 - ldrb r0, [r0] - add r0, sp - ldrb r0, [r0] - cmp r1, r0 - beq _081408DC -_08140816: - adds r2, 0x3 - adds r3, 0x3 - adds r4, 0x1 - cmp r4, 0x4 - ble _081407F8 -_08140820: - movs r0, 0x1 - b _081408DE - .align 2, 0 -_08140824: .4byte gUnknown_84648AE -_08140828: - movs r4, 0 - ldr r5, _0814086C @ =gUnknown_84648AE -_0814082C: - ldrb r0, [r5] - mov r7, sp - adds r2, r7, r0 - ldrb r0, [r5, 0x1] - adds r1, r7, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bne _0814084A - adds r1, r0, 0 - mov r0, r8 - bl sub_81408F4 - cmp r0, 0 - bne _081408DC -_0814084A: - adds r5, 0x3 - adds r4, 0x1 - cmp r4, 0x4 - ble _0814082C - movs r4, 0 -_08140854: - mov r1, sp - adds r0, r1, r4 - ldrb r1, [r0] - mov r0, r8 - bl sub_81408F4 - cmp r0, 0 - bne _08140820 - adds r4, 0x1 - cmp r4, 0x2 - ble _08140854 - b _081408DC - .align 2, 0 -_0814086C: .4byte gUnknown_84648AE -_08140870: - movs r4, 0 - ldr r5, _0814089C @ =gUnknown_84648AE -_08140874: - ldrb r0, [r5] - mov r3, sp - adds r2, r3, r0 - ldrb r0, [r5, 0x1] - adds r1, r3, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bne _08140892 - adds r1, r0, 0 - mov r0, r8 - bl sub_81408F4 - cmp r0, 0 - bne _08140820 -_08140892: - adds r5, 0x3 - adds r4, 0x1 - cmp r4, 0x4 - ble _08140874 - b _081408DC - .align 2, 0 -_0814089C: .4byte gUnknown_84648AE -_081408A0: - movs r4, 0 - ldr r5, _081408F0 @ =gUnknown_84648AE - adds r7, r5, 0 - movs r6, 0 -_081408A8: - ldrb r0, [r5] - mov r1, sp - adds r2, r1, r0 - adds r0, r7, 0x1 - adds r0, r6, r0 - ldrb r0, [r0] - add r0, sp - ldrb r1, [r2] - ldrb r0, [r0] - cmp r1, r0 - bne _081408D2 - ldrb r0, [r5, 0x2] - add r0, sp - ldrb r0, [r0] - cmp r1, r0 - bne _081408D2 - mov r0, r8 - bl sub_81408F4 - cmp r0, 0 - bne _08140820 -_081408D2: - adds r5, 0x3 - adds r6, 0x3 - adds r4, 0x1 - cmp r4, 0x4 - ble _081408A8 -_081408DC: - movs r0, 0 -_081408DE: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081408F0: .4byte gUnknown_84648AE - thumb_func_end sub_81406E8 - - thumb_func_start sub_81408F4 -sub_81408F4: @ 81408F4 - push {lr} - adds r2, r1, 0 - cmp r0, 0x6 - bhi _08140966 - lsls r0, 2 - ldr r1, _08140908 @ =_0814090C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08140908: .4byte _0814090C - .align 2, 0 -_0814090C: - .4byte _08140928 - .4byte _08140934 - .4byte _08140934 - .4byte _0814093E - .4byte _08140944 - .4byte _08140952 - .4byte _0814095C -_08140928: - movs r1, 0x4 - eors r1, r2 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - b _08140968 -_08140934: - movs r0, 0 - cmp r2, 0x4 - bne _08140968 - movs r0, 0x1 - b _08140968 -_0814093E: - movs r1, 0 - subs r0, r2, 0x5 - b _08140948 -_08140944: - movs r1, 0 - subs r0, r2, 0x2 -_08140948: - cmp r0, 0x1 - bhi _0814094E - movs r1, 0x1 -_0814094E: - adds r0, r1, 0 - b _08140968 -_08140952: - movs r0, 0 - cmp r2, 0x1 - bne _08140968 - movs r0, 0x1 - b _08140968 -_0814095C: - movs r0, 0 - cmp r2, 0 - bne _08140968 - movs r0, 0x1 - b _08140968 -_08140966: - movs r0, 0 -_08140968: - pop {r1} - bx r1 - thumb_func_end sub_81408F4 - - thumb_func_start sub_814096C -sub_814096C: @ 814096C - push {lr} - cmp r0, 0x6 - bhi _0814099C - lsls r0, 2 - ldr r1, _0814097C @ =_08140980 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0814097C: .4byte _08140980 - .align 2, 0 -_08140980: - .4byte _081409AC - .4byte _081409A8 - .4byte _081409A4 - .4byte _081409A4 - .4byte _0814099C - .4byte _081409A0 - .4byte _081409A0 -_0814099C: - movs r0, 0x1 - b _081409AE -_081409A0: - movs r0, 0x3 - b _081409AE -_081409A4: - movs r0, 0x4 - b _081409AE -_081409A8: - movs r0, 0x5 - b _081409AE -_081409AC: - movs r0, 0x6 -_081409AE: - pop {r1} - bx r1 - thumb_func_end sub_814096C - - thumb_func_start sub_81409B4 -sub_81409B4: @ 81409B4 - push {r4-r6,lr} - bl Random - lsls r0, 16 - lsrs r2, r0, 18 - ldr r0, _08140A60 @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrh r1, [r0, 0x4] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 1 - ldr r1, _08140A64 @ =gUnknown_84648D2 - adds r4, r0, r1 - movs r5, 0 - ldrh r0, [r4] - cmp r2, r0 - bcc _081409E6 - adds r0, r4, 0 -_081409D8: - adds r0, 0x2 - adds r5, 0x1 - cmp r5, 0x5 - bgt _081409E6 - ldrh r1, [r0] - cmp r2, r1 - bcs _081409D8 -_081409E6: - ldr r6, _08140A60 @ =gUnknown_203F3A0 - ldr r1, [r6] - ldrh r0, [r1, 0x8] - cmp r0, 0x4 - bhi _08140A5A - ldrh r0, [r1, 0xC] - cmp r0, 0 - bne _08140A22 - bl Random - ldr r1, _08140A68 @ =0x00003fff - ands r1, r0 - ldrh r4, [r4, 0xC] - cmp r1, r4 - bcs _08140A18 - ldr r4, [r6] - bl Random - movs r1, 0x1 - ands r1, r0 - movs r0, 0x3C - cmp r1, 0 - beq _08140A16 - movs r0, 0x5 -_08140A16: - strh r0, [r4, 0xC] -_08140A18: - ldr r0, _08140A60 @ =gUnknown_203F3A0 - ldr r1, [r0] - ldrh r1, [r1, 0xC] - cmp r1, 0 - beq _08140A56 -_08140A22: - cmp r5, 0 - bne _08140A4A - bl Random - ldr r1, _08140A68 @ =0x00003fff - ands r1, r0 - ldr r0, _08140A6C @ =0x00002ccb - cmp r1, r0 - bhi _08140A4A - ldr r0, _08140A60 @ =gUnknown_203F3A0 - ldr r4, [r0] - bl Random - movs r1, 0x1 - ands r1, r0 - movs r0, 0x3C - cmp r1, 0 - beq _08140A48 - movs r0, 0x5 -_08140A48: - strh r0, [r4, 0xC] -_08140A4A: - ldr r2, _08140A60 @ =gUnknown_203F3A0 - ldr r1, [r2] - ldrh r0, [r1, 0xC] - subs r0, 0x1 - strh r0, [r1, 0xC] - adds r0, r2, 0 -_08140A56: - ldr r0, [r0] - strh r5, [r0, 0x8] -_08140A5A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08140A60: .4byte gUnknown_203F3A0 -_08140A64: .4byte gUnknown_84648D2 -_08140A68: .4byte 0x00003fff -_08140A6C: .4byte 0x00002ccb - thumb_func_end sub_81409B4 - - thumb_func_start sub_8140A70 -sub_8140A70: @ 8140A70 - ldr r0, _08140A7C @ =gUnknown_203F3A0 - ldr r1, [r0] - movs r0, 0 - strh r0, [r1, 0x8] - bx lr - .align 2, 0 -_08140A7C: .4byte gUnknown_203F3A0 - thumb_func_end sub_8140A70 - - thumb_func_start sub_8140A80 -sub_8140A80: @ 8140A80 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - mov r0, sp - movs r1, 0 - movs r2, 0x9 - bl memset - movs r5, 0 - ldr r2, _08140B58 @ =gUnknown_203F3A0 - movs r3, 0 - adds r4, r2, 0 -_08140A9C: - ldr r0, [r2] - lsls r1, r5, 2 - adds r0, 0x3C - adds r0, r1 - str r3, [r0] - adds r5, 0x1 - cmp r5, 0x4 - ble _08140A9C - movs r0, 0 - mov r9, r0 - ldr r0, [r4] - movs r1, 0x20 - ldrsh r4, [r0, r1] - movs r7, 0x22 - ldrsh r3, [r0, r7] - movs r1, 0x24 - ldrsh r2, [r0, r1] - ldr r6, _08140B5C @ =gUnknown_8464926 - movs r7, 0x2A - adds r7, r6 - mov r8, r7 - mov r1, sp - movs r0, 0x15 - adds r0, r6 - mov r12, r0 - movs r5, 0x2 -_08140AD0: - adds r4, 0x1 - cmp r4, 0x14 - ble _08140AD8 - movs r4, 0 -_08140AD8: - adds r3, 0x1 - cmp r3, 0x14 - ble _08140AE0 - movs r3, 0 -_08140AE0: - adds r2, 0x1 - cmp r2, 0x14 - ble _08140AE8 - movs r2, 0 -_08140AE8: - adds r0, r4, r6 - ldrb r0, [r0] - strb r0, [r1] - mov r7, r12 - adds r0, r3, r7 - ldrb r0, [r0] - strb r0, [r1, 0x3] - mov r7, r8 - adds r0, r2, r7 - ldrb r0, [r0] - strb r0, [r1, 0x6] - adds r1, 0x1 - subs r5, 0x1 - cmp r5, 0 - bge _08140AD0 - ldr r0, _08140B58 @ =gUnknown_203F3A0 - ldr r0, [r0] - adds r0, 0x50 - movs r1, 0 - strh r1, [r0] - ldr r7, _08140B60 @ =gUnknown_84648BD - mov r8, r7 - movs r6, 0 - movs r5, 0x4 -_08140B18: - ldr r0, _08140B58 @ =gUnknown_203F3A0 - ldr r1, [r0] - mov r0, r8 - adds r0, 0x3 - adds r0, r6, r0 - ldrh r1, [r1, 0xE] - ldrb r0, [r0] - cmp r1, r0 - bcc _08140BB6 - ldrb r0, [r7] - mov r1, sp - adds r4, r1, r0 - ldrb r1, [r4] - movs r0, 0x1 - bl sub_81408F4 - cmp r0, 0 - beq _08140B64 - mov r0, r8 - adds r0, 0x1 - adds r0, r6, r0 - ldrb r0, [r0] - add r0, sp - ldrb r1, [r0] - movs r0, 0x2 - bl sub_81408F4 - movs r3, 0x1 - cmp r0, 0 - beq _08140B8E - movs r3, 0x2 - b _08140B92 - .align 2, 0 -_08140B58: .4byte gUnknown_203F3A0 -_08140B5C: .4byte gUnknown_8464926 -_08140B60: .4byte gUnknown_84648BD -_08140B64: - mov r0, r8 - adds r0, 0x1 - adds r0, r6, r0 - ldrb r0, [r0] - add r0, sp - ldrb r1, [r4] - ldrb r0, [r0] - cmp r1, r0 - bne _08140B8C - ldrb r0, [r7, 0x2] - add r0, sp - ldrb r0, [r0] - cmp r1, r0 - bne _08140B8C - adds r0, r1, 0 - bl sub_814096C - lsls r0, 24 - lsrs r3, r0, 24 - b _08140B8E -_08140B8C: - movs r3, 0 -_08140B8E: - cmp r3, 0 - beq _08140BB0 -_08140B92: - ldr r0, _08140BD4 @ =gUnknown_203F3A0 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x3C - adds r0, r6 - movs r1, 0x1 - str r1, [r0] - adds r2, 0x50 - ldr r1, _08140BD8 @ =gUnknown_8464966 - lsls r0, r3, 1 - adds r0, r1 - ldrh r0, [r0] - ldrh r1, [r2] - adds r0, r1 - strh r0, [r2] -_08140BB0: - cmp r3, r9 - ble _08140BB6 - mov r9, r3 -_08140BB6: - adds r7, 0x4 - adds r6, 0x4 - subs r5, 0x1 - cmp r5, 0 - bge _08140B18 - mov r7, r9 - lsls r0, r7, 16 - lsrs r0, 16 - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08140BD4: .4byte gUnknown_203F3A0 -_08140BD8: .4byte gUnknown_8464966 - thumb_func_end sub_8140A80 - - thumb_func_start sub_8140BDC -sub_8140BDC: @ 8140BDC - ldr r0, _08140BE8 @ =gUnknown_203F3A0 - ldr r0, [r0] - adds r0, 0x50 - ldrh r0, [r0] - bx lr - .align 2, 0 -_08140BE8: .4byte gUnknown_203F3A0 - thumb_func_end sub_8140BDC - - thumb_func_start sub_8140BEC -sub_8140BEC: @ 8140BEC - ldr r0, _08140BF4 @ =gUnknown_203F3A0 - ldr r0, [r0] - ldrb r0, [r0, 0xE] - bx lr - .align 2, 0 -_08140BF4: .4byte gUnknown_203F3A0 - thumb_func_end sub_8140BEC - - thumb_func_start sub_8140BF8 -sub_8140BF8: @ 8140BF8 - ldr r1, _08140C08 @ =gUnknown_203F3A0 - ldr r1, [r1] - lsls r0, 2 - adds r1, 0x3C - adds r1, r0 - ldr r0, [r1] - bx lr - .align 2, 0 -_08140C08: .4byte gUnknown_203F3A0 - thumb_func_end sub_8140BF8 - - thumb_func_start sub_8140C0C -sub_8140C0C: @ 8140C0C - push {r4,r5,lr} - movs r5, 0 - ldr r4, _08140C3C @ =gUnknown_84655B0 -_08140C12: - adds r0, r4, 0 - bl LoadCompressedSpriteSheet - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x2 - bls _08140C12 - ldr r0, _08140C40 @ =gUnknown_84655C8 - bl LoadSpritePalettes - ldr r4, _08140C44 @ =gUnknown_203F3A4 - movs r0, 0x74 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _08140C48 - bl sub_8140C6C - movs r0, 0x1 - b _08140C4A - .align 2, 0 -_08140C3C: .4byte gUnknown_84655B0 -_08140C40: .4byte gUnknown_84655C8 -_08140C44: .4byte gUnknown_203F3A4 -_08140C48: - movs r0, 0 -_08140C4A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8140C0C - - thumb_func_start sub_8140C50 -sub_8140C50: @ 8140C50 - push {r4,lr} - ldr r4, _08140C68 @ =gUnknown_203F3A4 - ldr r0, [r4] - cmp r0, 0 - beq _08140C62 - bl Free - movs r0, 0 - str r0, [r4] -_08140C62: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08140C68: .4byte gUnknown_203F3A4 - thumb_func_end sub_8140C50 - - thumb_func_start sub_8140C6C -sub_8140C6C: @ 8140C6C - push {r4-r6,lr} - adds r4, r0, 0 - movs r2, 0 - movs r5, 0 - adds r6, r4, 0 - adds r6, 0xC -_08140C78: - lsls r0, r2, 2 - adds r1, r4, r0 - str r5, [r1] - adds r3, r2, 0x1 - adds r0, r2 - lsls r0, 2 - movs r1, 0x4 - adds r0, r6 - adds r0, 0x10 -_08140C8A: - str r5, [r0] - subs r0, 0x4 - subs r1, 0x1 - cmp r1, 0 - bge _08140C8A - adds r2, r3, 0 - cmp r2, 0x2 - ble _08140C78 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8140C6C - - thumb_func_start sub_8140CA0 -sub_8140CA0: @ 8140CA0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r7, 0 -_08140CAE: - movs r6, 0 - lsls r0, r7, 2 - adds r1, r7, 0x1 - str r1, [sp] - adds r0, r7 - mov r10, r0 - mov r2, r10 - lsls r2, 2 - mov r8, r2 - movs r3, 0xB0 - lsls r3, 14 - mov r9, r3 -_08140CC6: - mov r0, r10 - lsls r1, r0, 19 - movs r2, 0xA0 - lsls r2, 15 - adds r1, r2 - mov r3, r9 - asrs r2, r3, 16 - ldr r0, _08140D64 @ =gUnknown_84657E4 - asrs r1, 16 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08140D68 @ =gUnknown_8464926 - mov r3, r8 - adds r1, r3, r7 - adds r1, r6, r1 - adds r1, r2 - ldrb r4, [r1] - lsls r5, r0, 4 - adds r5, r0 - lsls r5, 2 - ldr r0, _08140D6C @ =gSprites - adds r5, r0 - adds r0, r5, 0 - adds r1, r4, 0 - bl StartSpriteAnim - ldr r0, _08140D70 @ =gUnknown_8465608 - lsls r4, 1 - adds r4, r0 - ldrh r0, [r4] - bl IndexOfSpritePaletteTag - lsls r0, 4 - ldrb r2, [r5, 0x5] - movs r1, 0xF - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x5] - movs r0, 0 - strh r7, [r5, 0x2E] - strh r6, [r5, 0x30] - strh r6, [r5, 0x32] - strh r0, [r5, 0x34] - ldrb r0, [r5, 0x3] - movs r2, 0x3F - negs r2, r2 - adds r1, r2, 0 - ands r0, r1 - strb r0, [r5, 0x3] - ldr r0, _08140D74 @ =gUnknown_203F3A4 - ldr r2, [r0] - lsls r1, r6, 2 - add r1, r8 - adds r0, r2, 0 - adds r0, 0xC - adds r0, r1 - str r5, [r0] - ldr r0, _08140D78 @ =0x07000006 - str r0, [r2, 0x70] - movs r3, 0xC0 - lsls r3, 13 - add r9, r3 - adds r6, 0x1 - cmp r6, 0x4 - ble _08140CC6 - ldr r7, [sp] - cmp r7, 0x2 - ble _08140CAE - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08140D64: .4byte gUnknown_84657E4 -_08140D68: .4byte gUnknown_8464926 -_08140D6C: .4byte gSprites -_08140D70: .4byte gUnknown_8465608 -_08140D74: .4byte gUnknown_203F3A4 -_08140D78: .4byte 0x07000006 - thumb_func_end sub_8140CA0 - - thumb_func_start sub_8140D7C -sub_8140D7C: @ 8140D7C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - adds r3, r0, 0 - movs r2, 0 - ldr r0, _08140E34 @ =gUnknown_203F3A4 - mov r8, r0 -_08140D90: - movs r4, 0 - ldrsh r6, [r3, r4] - movs r4, 0 - ldrsh r0, [r1, r4] - lsls r0, 3 - mov r10, r0 - lsls r0, r2, 2 - adds r3, 0x2 - str r3, [sp] - adds r1, 0x2 - str r1, [sp, 0x4] - adds r1, r2, 0x1 - str r1, [sp, 0x8] - adds r0, r2 - lsls r0, 2 - adds r2, r0 - mov r9, r2 - adds r5, r0, 0 - movs r7, 0x4 -_08140DB6: - mov r2, r8 - ldr r1, [r2] - adds r1, 0xC - adds r1, r5 - ldr r0, [r1] - mov r3, r10 - strh r3, [r0, 0x26] - ldr r2, _08140E38 @ =gUnknown_8464926 - mov r4, r9 - adds r0, r6, r4 - adds r0, r2 - ldrb r4, [r0] - ldr r0, [r1] - adds r1, r4, 0 - bl StartSpriteAnim - mov r1, r8 - ldr r0, [r1] - adds r0, 0xC - adds r0, r5 - ldr r0, [r0] - adds r1, r4, 0 - bl StartSpriteAnim - ldr r0, _08140E3C @ =gUnknown_8465608 - lsls r4, 1 - adds r4, r0 - ldrh r0, [r4] - bl IndexOfSpritePaletteTag - mov r2, r8 - ldr r1, [r2] - adds r1, 0xC - adds r1, r5 - ldr r3, [r1] - lsls r0, 4 - ldrb r2, [r3, 0x5] - movs r1, 0xF - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x5] - adds r6, 0x1 - cmp r6, 0x14 - ble _08140E10 - movs r6, 0 -_08140E10: - adds r5, 0x4 - subs r7, 0x1 - cmp r7, 0 - bge _08140DB6 - ldr r3, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - cmp r2, 0x2 - ble _08140D90 - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08140E34: .4byte gUnknown_203F3A4 -_08140E38: .4byte gUnknown_8464926 -_08140E3C: .4byte gUnknown_8465608 - thumb_func_end sub_8140D7C - - thumb_func_start sub_8140E40 -sub_8140E40: @ 8140E40 - push {lr} - ldr r0, _08140E68 @ =0x04000006 - ldrh r0, [r0] - adds r3, r0, 0 - subs r3, 0x2B - cmp r3, 0x53 - bhi _08140E7C - ldr r0, _08140E6C @ =gUnknown_203F3A4 - ldr r0, [r0] - ldr r2, [r0, 0x70] - ldr r1, _08140E70 @ =gUnknown_8465616 - lsls r0, r3, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - ldr r1, _08140E74 @ =0x04000054 - ldr r0, _08140E78 @ =gUnknown_84656D6 - adds r0, r3, r0 - ldrb r0, [r0] - b _08140E8E - .align 2, 0 -_08140E68: .4byte 0x04000006 -_08140E6C: .4byte gUnknown_203F3A4 -_08140E70: .4byte gUnknown_8465616 -_08140E74: .4byte 0x04000054 -_08140E78: .4byte gUnknown_84656D6 -_08140E7C: - ldr r0, _08140E94 @ =gUnknown_203F3A4 - ldr r0, [r0] - ldr r1, [r0, 0x70] - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08140E98 @ =0x04000054 - movs r0, 0 -_08140E8E: - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08140E94: .4byte gUnknown_203F3A4 -_08140E98: .4byte 0x04000054 - thumb_func_end sub_8140E40 - - thumb_func_start sub_8140E9C -sub_8140E9C: @ 8140E9C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r5, 0 - ldr r0, _08140F20 @ =gUnknown_846587C - mov r10, r0 - ldr r0, _08140F24 @ =gUnknown_203F3A4 - mov r9, r0 - ldr r0, _08140F28 @ =gSprites - mov r8, r0 - movs r7, 0x85 - lsls r7, 16 - movs r6, 0xAA - lsls r6, 15 -_08140EBC: - asrs r1, r6, 16 - mov r0, r10 - movs r2, 0x1E - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - mov r0, r9 - ldr r1, [r0] - lsls r4, r5, 2 - adds r1, 0x48 - adds r1, r4 - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - add r0, r8 - str r0, [r1] - asrs r1, r7, 16 - mov r0, r10 - movs r2, 0x1E - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - mov r0, r9 - ldr r1, [r0] - adds r1, 0x58 - adds r1, r4 - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - add r0, r8 - str r0, [r1] - movs r0, 0xE0 - lsls r0, 11 - adds r7, r0 - adds r6, r0 - adds r5, 0x1 - cmp r5, 0x3 - ble _08140EBC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08140F20: .4byte gUnknown_846587C -_08140F24: .4byte gUnknown_203F3A4 -_08140F28: .4byte gSprites - thumb_func_end sub_8140E9C - - thumb_func_start sub_8140F2C -sub_8140F2C: @ 8140F2C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - bl GetCoins - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - bl sub_8140BDC - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - movs r6, 0xFA - lsls r6, 2 - movs r7, 0 - ldr r0, _08140FC0 @ =gUnknown_203F3A4 - mov r10, r0 -_08140F54: - mov r0, r9 - adds r1, r6, 0 - bl __divsi3 - adds r4, r0, 0 - mov r1, r10 - ldr r0, [r1] - lsls r5, r7, 2 - adds r0, 0x48 - adds r0, r5 - ldr r0, [r0] - lsls r1, r4, 24 - lsrs r1, 24 - bl StartSpriteAnim - adds r0, r4, 0 - muls r0, r6 - mov r1, r9 - subs r1, r0 - mov r9, r1 - mov r0, r8 - adds r1, r6, 0 - bl __divsi3 - adds r4, r0, 0 - mov r1, r10 - ldr r0, [r1] - adds r0, 0x58 - adds r0, r5 - ldr r0, [r0] - lsls r1, r4, 24 - lsrs r1, 24 - bl StartSpriteAnim - adds r0, r4, 0 - muls r0, r6 - mov r1, r8 - subs r1, r0 - mov r8, r1 - adds r0, r6, 0 - movs r1, 0xA - bl __divsi3 - adds r6, r0, 0 - adds r7, 0x1 - cmp r7, 0x3 - ble _08140F54 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08140FC0: .4byte gUnknown_203F3A4 - thumb_func_end sub_8140F2C - - thumb_func_start sub_8140FC4 -sub_8140FC4: @ 8140FC4 - push {r4-r6,lr} - ldr r6, _08141014 @ =gUnknown_84658D8 - adds r0, r6, 0 - movs r1, 0x10 - movs r2, 0x88 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - ldr r5, _08141018 @ =gUnknown_203F3A4 - ldr r1, [r5] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - ldr r4, _0814101C @ =gSprites - adds r0, r4 - str r0, [r1, 0x68] - adds r0, r6, 0 - movs r1, 0xE0 - movs r2, 0x88 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, [r5] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r4 - str r0, [r1, 0x6C] - adds r0, 0x3F - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08141014: .4byte gUnknown_84658D8 -_08141018: .4byte gUnknown_203F3A4 -_0814101C: .4byte gSprites - thumb_func_end sub_8140FC4 - - thumb_func_start sub_8141020 -sub_8141020: @ 8141020 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r6, _08141048 @ =gUnknown_203F3A4 -_0814102A: - ldr r0, [r6] - lsls r1, r4, 2 - adds r0, 0x68 - adds r0, r1 - ldr r0, [r0] - adds r1, r5, 0 - bl StartSpriteAnim - adds r4, 0x1 - cmp r4, 0x1 - ble _0814102A - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08141048: .4byte gUnknown_203F3A4 - thumb_func_end sub_8141020 - - thumb_func_start sub_814104C -sub_814104C: @ 814104C - push {r4,lr} - ldr r0, _0814108C @ =0x0000285c - bl Alloc - adds r4, r0, 0 - cmp r4, 0 - beq _08141082 - ldr r2, _08141090 @ =sub_81410CC - movs r1, 0 - adds r0, r4, 0 - adds r0, 0x1C -_08141062: - strb r1, [r0, 0x3] - subs r0, 0x4 - cmp r0, r4 - bge _08141062 - movs r0, 0 - str r0, [r4, 0x28] - adds r0, r2, 0 - movs r1, 0x2 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - adds r2, r4, 0 - bl SetWordTaskArg -_08141082: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0814108C: .4byte 0x0000285c -_08141090: .4byte sub_81410CC - thumb_func_end sub_814104C - - thumb_func_start sub_8141094 -sub_8141094: @ 8141094 - push {r4,lr} - ldr r4, _081410C8 @ =sub_81410CC - adds r0, r4, 0 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - beq _081410BA - bl sub_814112C - bl Free - adds r0, r4, 0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_081410BA: - bl sub_8140C50 - bl FreeAllWindowBuffers - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081410C8: .4byte sub_81410CC - thumb_func_end sub_8141094 - - thumb_func_start sub_81410CC -sub_81410CC: @ 81410CC - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl GetWordTaskArg - adds r6, r0, 0 - ldr r0, _08141114 @ =gUnknown_84658F0 - mov r8, r0 - adds r4, r6, 0x2 - adds r5, r6, 0 - movs r7, 0x7 -_081410E8: - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _08141100 - ldrh r0, [r5] - lsls r0, 2 - add r0, r8 - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r6, 0 - bl _call_via_r2 - strb r0, [r4, 0x1] -_08141100: - adds r4, 0x4 - adds r5, 0x4 - subs r7, 0x1 - cmp r7, 0 - bge _081410E8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08141114: .4byte gUnknown_84658F0 - thumb_func_end sub_81410CC - - thumb_func_start sub_8141118 -sub_8141118: @ 8141118 - push {lr} - bl TransferPlttBuffer - bl LoadOam - bl ProcessSpriteCopyRequests - pop {r0} - bx r0 - thumb_func_end sub_8141118 - - thumb_func_start sub_814112C -sub_814112C: @ 814112C - push {lr} - ldr r0, _08141144 @ =sub_81410CC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl GetWordTaskArg - pop {r1} - bx r1 - .align 2, 0 -_08141144: .4byte sub_81410CC - thumb_func_end sub_814112C - - thumb_func_start sub_8141148 -sub_8141148: @ 8141148 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - bl sub_814112C - adds r1, r0, 0 - lsls r5, 2 - adds r5, r1, r5 - movs r0, 0 - strh r4, [r5] - strb r0, [r5, 0x2] - ldr r0, _0814117C @ =gUnknown_84658F0 - lsls r4, 2 - adds r4, r0 - adds r0, r5, 0x2 - ldr r2, [r4] - bl _call_via_r2 - strb r0, [r5, 0x3] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0814117C: .4byte gUnknown_84658F0 - thumb_func_end sub_8141148 - - thumb_func_start sub_8141180 -sub_8141180: @ 8141180 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_814112C - lsls r4, 2 - adds r0, r4 - ldrb r0, [r0, 0x3] - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141180 - - thumb_func_start sub_8141198 -sub_8141198: @ 8141198 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r7, r0, 0 - mov r8, r1 - ldrb r6, [r7] - cmp r6, 0x1 - beq _081411D0 - cmp r6, 0x1 - bgt _081411B4 - cmp r6, 0 - beq _081411C2 - b _08141450 -_081411B4: - cmp r6, 0x2 - bne _081411BA - b _081413E4 -_081411BA: - cmp r6, 0x3 - bne _081411C0 - b _08141436 -_081411C0: - b _08141450 -_081411C2: - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - b _0814142E -_081411D0: - movs r0, 0 - bl SetVBlankCallback - bl ResetSpriteData - bl FreeAllSpritePalettes - movs r1, 0xE0 - lsls r1, 19 - movs r2, 0x80 - lsls r2, 3 - movs r0, 0 - movs r3, 0x1 - bl RequestDma3Fill - movs r1, 0xC0 - lsls r1, 19 - movs r0, 0 - movs r2, 0x20 - movs r3, 0x1 - bl RequestDma3Fill - ldr r1, _0814139C @ =0x0600c000 - movs r0, 0 - movs r2, 0x20 - movs r3, 0x1 - bl RequestDma3Fill - movs r0, 0 - movs r1, 0 - bl SetGpuReg - bl ResetBgPositions - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _081413A0 @ =gUnknown_8466B10 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - ldr r0, _081413A4 @ =gUnknown_8466B20 - bl InitWindows - ldr r1, _081413A8 @ =0x0000205c - add r1, r8 - movs r0, 0x3 - bl SetBgTilemapBuffer - movs r4, 0x20 - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0x3 - bl CopyBgTilemapBufferToVram - bl ResetTempTileDataBuffers - ldr r1, _081413AC @ =gUnknown_84659D0 - movs r5, 0 - str r5, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _081413B0 @ =gUnknown_846653C - str r5, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0xC0 - bl DecompressAndCopyTileDataToVram - ldr r1, _081413B4 @ =0x0000185c - add r1, r8 - movs r0, 0x2 - bl SetBgTilemapBuffer - ldr r1, _081413B8 @ =gUnknown_84661D4 - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldr r0, _081413BC @ =gUnknown_8465930 - movs r1, 0 - movs r2, 0xA0 - bl LoadPalette - ldr r0, _081413C0 @ =gUnknown_84664BC - movs r1, 0x50 - movs r2, 0x20 - bl LoadPalette - ldr r0, _081413C4 @ =gUnknown_84665C0 - movs r1, 0x70 - movs r2, 0x60 - bl LoadPalette - ldr r1, _081413C8 @ =0x00007fde - add r0, sp, 0xC - strh r1, [r0] - movs r1, 0 - movs r2, 0x2 - bl LoadPalette - movs r0, 0 - movs r1, 0xA - movs r2, 0xD0 - bl LoadUserWindowBorderGfx - movs r0, 0 - movs r1, 0x1 - movs r2, 0xF0 - bl sub_814FDA0 - ldr r1, _081413CC @ =0x0000085c - add r1, r8 - movs r0, 0 - bl SetBgTilemapBuffer - str r4, [sp] - movs r0, 0x1E - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x2 - bl FillBgTilemapBufferRect_Palette0 - ldr r1, _081413D0 @ =gUnknown_8466620 - str r5, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _081413D4 @ =gUnknown_8466998 - str r6, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - movs r0, 0x2 - bl stdpal_get - movs r1, 0xE0 - movs r2, 0x20 - bl LoadPalette - movs r0, 0x1 - movs r1, 0xFF - bl FillWindowPixelBuffer - movs r0, 0x1 - bl PutWindowTilemap - ldr r4, _081413D8 @ =gUnknown_841B779 - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - bl GetStringWidth - movs r2, 0xEC - subs r2, r0 - add r1, sp, 0x10 - movs r0, 0xF - strb r0, [r1] - strb r6, [r1, 0x1] - movs r0, 0x2 - strb r0, [r1, 0x2] - lsls r2, 24 - lsrs r2, 24 - str r1, [sp] - str r5, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r3, 0 - bl AddTextPrinterParameterized3 - movs r0, 0 - bl CopyBgTilemapBufferToVram - movs r1, 0x83 - lsls r1, 5 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x50 - movs r1, 0xF8 - bl SetGpuReg - bl sub_8140C0C - bl sub_8140CA0 - bl sub_8140E9C - bl sub_8140FC4 - bl sub_8140F2C - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - ldr r0, _081413DC @ =sub_8141118 - bl SetVBlankCallback - ldr r0, _081413E0 @ =sub_8140E40 - bl SetHBlankCallback - b _0814142E - .align 2, 0 -_0814139C: .4byte 0x0600c000 -_081413A0: .4byte gUnknown_8466B10 -_081413A4: .4byte gUnknown_8466B20 -_081413A8: .4byte 0x0000205c -_081413AC: .4byte gUnknown_84659D0 -_081413B0: .4byte gUnknown_846653C -_081413B4: .4byte 0x0000185c -_081413B8: .4byte gUnknown_84661D4 -_081413BC: .4byte gUnknown_8465930 -_081413C0: .4byte gUnknown_84664BC -_081413C4: .4byte gUnknown_84665C0 -_081413C8: .4byte 0x00007fde -_081413CC: .4byte 0x0000085c -_081413D0: .4byte gUnknown_8466620 -_081413D4: .4byte gUnknown_8466998 -_081413D8: .4byte gUnknown_841B779 -_081413DC: .4byte sub_8141118 -_081413E0: .4byte sub_8140E40 -_081413E4: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _08141450 - movs r0, 0 - bl ShowBg - movs r0, 0x3 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x1 - bl HideBg - bl sub_8141B34 - movs r4, 0x1 - negs r4, r4 - adds r0, r4, 0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - str r5, [sp] - adds r0, r4, 0 - adds r1, r4, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0x3 - bl EnableInterrupts -_0814142E: - ldrb r0, [r7] - adds r0, 0x1 - strb r0, [r7] - b _08141450 -_08141436: - bl UpdatePaletteFade - ldr r0, _0814144C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08141450 - movs r0, 0 - b _08141452 - .align 2, 0 -_0814144C: .4byte gPaletteFade -_08141450: - movs r0, 0x1 -_08141452: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8141198 - - thumb_func_start sub_8141460 -sub_8141460: @ 8141460 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08141472 - cmp r0, 0x1 - beq _0814148A - b _081414A0 -_08141472: - movs r1, 0x1 - negs r1, r1 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081414A0 -_0814148A: - ldr r0, _0814149C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _081414A0 - movs r0, 0 - b _081414A2 - .align 2, 0 -_0814149C: .4byte gPaletteFade -_081414A0: - movs r0, 0x1 -_081414A2: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141460 - - thumb_func_start sub_81414AC -sub_81414AC: @ 81414AC - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _081414BC - cmp r0, 0x1 - beq _081414D4 - b _081414E2 -_081414BC: - movs r0, 0x2 - bl GetBgTilemapBuffer - bl sub_8141834 - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081414E2 -_081414D4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081414E2 - movs r0, 0 - b _081414E4 -_081414E2: - movs r0, 0x1 -_081414E4: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81414AC - - thumb_func_start sub_81414EC -sub_81414EC: @ 81414EC - push {lr} - movs r0, 0x1 - bl sub_8141020 - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_81414EC - - thumb_func_start sub_81414FC -sub_81414FC: @ 81414FC - push {lr} - movs r0, 0x2 - bl sub_8141020 - ldr r0, _08141514 @ =sub_814191C - movs r1, 0x3 - bl CreateTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08141514: .4byte sub_814191C - thumb_func_end sub_81414FC - - thumb_func_start sub_8141518 -sub_8141518: @ 8141518 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08141528 - cmp r0, 0x1 - beq _08141534 - b _08141550 -_08141528: - bl sub_8141AB0 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08141550 -_08141534: - ldr r0, _0814154C @ =sub_814191C - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08141550 - movs r0, 0 - bl sub_8141020 - movs r0, 0 - b _08141552 - .align 2, 0 -_0814154C: .4byte sub_814191C -_08141550: - movs r0, 0x1 -_08141552: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141518 - - thumb_func_start sub_8141558 -sub_8141558: @ 8141558 - push {lr} - movs r0, 0x3 - bl sub_8141020 - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_8141558 - - thumb_func_start sub_8141568 -sub_8141568: @ 8141568 - push {lr} - movs r0, 0 - bl sub_8141020 - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_8141568 - - thumb_func_start sub_8141578 -sub_8141578: @ 8141578 - push {lr} - bl sub_8140F2C - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_8141578 - - thumb_func_start sub_8141584 -sub_8141584: @ 8141584 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08141594 - cmp r0, 0x1 - beq _081415B0 - b _081415BE -_08141594: - ldr r0, _081415AC @ =gUnknown_841B747 - bl sub_81417E4 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081415BE - .align 2, 0 -_081415AC: .4byte gUnknown_841B747 -_081415B0: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081415BE - movs r0, 0 - b _081415C0 -_081415BE: - movs r0, 0x1 -_081415C0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141584 - - thumb_func_start sub_81415C8 -sub_81415C8: @ 81415C8 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _081415D8 - cmp r0, 0x1 - beq _081415F8 - b _08141606 -_081415D8: - ldr r0, _081415F4 @ =gUnknown_841B76B - bl sub_81417E4 - movs r0, 0 - bl sub_8141AD8 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08141606 - .align 2, 0 -_081415F4: .4byte gUnknown_841B76B -_081415F8: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08141606 - movs r0, 0 - b _08141608 -_08141606: - movs r0, 0x1 -_08141608: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81415C8 - - thumb_func_start sub_8141610 -sub_8141610: @ 8141610 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08141620 - cmp r0, 0x1 - beq _08141638 - b _08141646 -_08141620: - bl sub_8141828 - bl sub_8141B18 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08141646 -_08141638: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08141646 - movs r0, 0 - b _08141648 -_08141646: - movs r0, 0x1 -_08141648: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141610 - - thumb_func_start sub_8141650 -sub_8141650: @ 8141650 - push {r4,lr} - adds r4, r0, 0 - ldrb r2, [r4] - cmp r2, 0 - beq _08141660 - cmp r2, 0x1 - beq _08141678 - b _08141686 -_08141660: - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - bl sub_8141BA0 - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08141686 -_08141678: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08141686 - movs r0, 0 - b _08141688 -_08141686: - movs r0, 0x1 -_08141688: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141650 - - thumb_func_start sub_8141690 -sub_8141690: @ 8141690 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _081416A0 - cmp r0, 0x1 - beq _081416B2 - b _081416C0 -_081416A0: - bl sub_8141BE4 - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081416C0 -_081416B2: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081416C0 - movs r0, 0 - b _081416C2 -_081416C0: - movs r0, 0x1 -_081416C2: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141690 - - thumb_func_start sub_81416C8 -sub_81416C8: @ 81416C8 - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - ldrb r4, [r6] - cmp r4, 0x1 - beq _08141724 - cmp r4, 0x1 - bgt _081416DE - cmp r4, 0 - beq _081416E4 - b _0814175A -_081416DE: - cmp r4, 0x2 - beq _08141756 - b _0814175A -_081416E4: - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - movs r0, 0x4A - movs r1, 0x3D - bl SetGpuReg - movs r0, 0x40 - movs r1, 0 - bl SetGpuReg - movs r0, 0x42 - movs r1, 0xA0 - bl SetGpuReg - movs r0, 0x1 - bl ShowBg - movs r0, 0x6 - bl PlaySE - str r4, [r5, 0x24] - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - b _0814175A -_08141724: - ldr r0, [r5, 0x24] - adds r0, 0x10 - str r0, [r5, 0x24] - cmp r0, 0xFF - ble _0814173A - movs r0, 0x80 - lsls r0, 1 - str r0, [r5, 0x24] - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] -_0814173A: - ldr r0, [r5, 0x24] - movs r1, 0x80 - lsls r1, 1 - subs r1, r0 - lsls r1, 8 - movs r0, 0x1 - movs r2, 0 - bl ChangeBgX - ldrh r1, [r5, 0x24] - movs r0, 0x40 - bl SetGpuReg - b _0814175A -_08141756: - movs r0, 0 - b _0814175C -_0814175A: - movs r0, 0x1 -_0814175C: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81416C8 - - thumb_func_start sub_8141764 -sub_8141764: @ 8141764 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4] - cmp r0, 0x1 - beq _08141790 - cmp r0, 0x1 - bgt _0814177A - cmp r0, 0 - beq _08141784 - b _081417DC -_0814177A: - cmp r0, 0x2 - beq _081417C0 - cmp r0, 0x3 - beq _081417D8 - b _081417DC -_08141784: - movs r0, 0x6 - bl PlaySE - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_08141790: - ldr r0, [r5, 0x24] - subs r0, 0x10 - str r0, [r5, 0x24] - cmp r0, 0 - bgt _081417A4 - movs r0, 0 - str r0, [r5, 0x24] - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_081417A4: - ldr r0, [r5, 0x24] - movs r1, 0x80 - lsls r1, 1 - subs r1, r0 - lsls r1, 8 - movs r0, 0x1 - movs r2, 0 - bl ChangeBgX - ldrh r1, [r5, 0x24] - movs r0, 0x40 - bl SetGpuReg - b _081417DC -_081417C0: - movs r0, 0x1 - bl HideBg - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl ClearGpuRegBits - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081417DC -_081417D8: - movs r0, 0 - b _081417DE -_081417DC: - movs r0, 0x1 -_081417DE: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8141764 - - thumb_func_start sub_81417E4 -sub_81417E4: @ 81417E4 - push {r4,lr} - sub sp, 0x14 - adds r4, r0, 0 - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x1 - movs r2, 0xF - bl DrawTextBorderOuter - movs r1, 0x2 - str r1, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x1 - str r0, [sp, 0xC] - str r1, [sp, 0x10] - movs r0, 0 - adds r2, r4, 0 - movs r3, 0x1 - bl AddTextPrinterParameterized5 - add sp, 0x14 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81417E4 - - thumb_func_start sub_8141828 -sub_8141828: @ 8141828 - push {lr} - movs r0, 0 - bl rbox_fill_rectangle - pop {r0} - bx r0 - thumb_func_end sub_8141828 - - thumb_func_start sub_8141834 -sub_8141834: @ 8141834 - push {r4,lr} - adds r4, r0, 0 - bl sub_8140BEC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _081418B4 - cmp r0, 0x1 - bgt _0814184E - cmp r0, 0 - beq _08141858 - b _081418BE -_0814184E: - cmp r0, 0x2 - beq _081418A0 - cmp r0, 0x3 - beq _0814188C - b _081418BE -_08141858: - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x4 - bl sub_81418C4 - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0x4 - bl sub_81418C4 - adds r0, r4, 0 - movs r1, 0x2 - movs r2, 0x4 - bl sub_81418C4 - adds r0, r4, 0 - movs r1, 0x3 - movs r2, 0x4 - bl sub_81418C4 - adds r0, r4, 0 - movs r1, 0x4 - movs r2, 0x4 - bl sub_81418C4 - b _081418BE -_0814188C: - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x5 - bl sub_81418C4 - adds r0, r4, 0 - movs r1, 0x4 - movs r2, 0x5 - bl sub_81418C4 -_081418A0: - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0x5 - bl sub_81418C4 - adds r0, r4, 0 - movs r1, 0x3 - movs r2, 0x5 - bl sub_81418C4 -_081418B4: - adds r0, r4, 0 - movs r1, 0x2 - movs r2, 0x5 - bl sub_81418C4 -_081418BE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8141834 - - thumb_func_start sub_81418C4 -sub_81418C4: @ 81418C4 - push {r4-r7,lr} - adds r6, r0, 0 - lsls r1, 16 - ldr r3, _08141914 @ =gUnknown_8466C0C - lsrs r1, 13 - adds r0, r1, r3 - ldr r4, [r0] - lsls r2, 28 - lsrs r7, r2, 16 - movs r5, 0 - adds r3, 0x4 - adds r1, r3 - ldr r1, [r1] - cmp r5, r1 - bcs _0814190C - ldr r0, _08141918 @ =0x00000fff - mov r12, r0 - adds r3, r1, 0 -_081418E8: - ldrh r1, [r4] - lsls r1, 1 - adds r1, r6 - ldrh r2, [r1] - mov r0, r12 - ands r0, r2 - strh r0, [r1] - ldrh r1, [r4] - lsls r1, 1 - adds r1, r6 - ldrh r2, [r1] - adds r0, r7, 0 - orrs r0, r2 - strh r0, [r1] - adds r4, 0x2 - adds r5, 0x1 - cmp r5, r3 - bcc _081418E8 -_0814190C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08141914: .4byte gUnknown_8466C0C -_08141918: .4byte 0x00000fff - thumb_func_end sub_81418C4 - - thumb_func_start sub_814191C -sub_814191C: @ 814191C - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _08141940 @ =gTasks+0x8 - adds r5, r0, r1 - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _08141984 - cmp r0, 0x1 - bgt _08141944 - cmp r0, 0 - beq _08141952 - b _08141AA8 - .align 2, 0 -_08141940: .4byte gTasks+0x8 -_08141944: - cmp r0, 0x2 - bne _0814194A - b _08141A58 -_0814194A: - cmp r0, 0x3 - bne _08141950 - b _08141A98 -_08141950: - b _08141AA8 -_08141952: - ldr r0, _08141980 @ =gUnknown_84664BC - movs r1, 0x60 - movs r2, 0x20 - bl LoadPalette - movs r4, 0 -_0814195E: - adds r0, r4, 0 - bl sub_8140BF8 - cmp r0, 0 - beq _08141978 - movs r0, 0x2 - bl GetBgTilemapBuffer - lsls r1, r4, 16 - lsrs r1, 16 - movs r2, 0x6 - bl sub_81418C4 -_08141978: - adds r4, 0x1 - cmp r4, 0x4 - ble _0814195E - b _08141A84 - .align 2, 0 -_08141980: .4byte gUnknown_84664BC -_08141984: - ldrh r1, [r5, 0x2] - movs r2, 0x2 - ldrsh r0, [r5, r2] - cmp r0, 0 - bne _081419C4 - ldr r1, _081419BC @ =gSineTable - movs r2, 0x4 - ldrsh r0, [r5, r2] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 23 - lsls r0, 16 - lsrs r0, 11 - ldr r1, _081419C0 @ =gUnknown_84664DC - adds r0, r1 - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette - ldrh r0, [r5, 0x4] - adds r0, 0x20 - movs r1, 0x7F - ands r0, r1 - strh r0, [r5, 0x4] - movs r0, 0x8 - b _081419C6 - .align 2, 0 -_081419BC: .4byte gSineTable -_081419C0: .4byte gUnknown_84664DC -_081419C4: - subs r0, r1, 0x1 -_081419C6: - strh r0, [r5, 0x2] - movs r1, 0x6 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _08141A00 - ldrh r0, [r5, 0x8] - adds r0, 0x8 - movs r1, 0x7F - ands r0, r1 - strh r0, [r5, 0x8] - ldr r1, _081419FC @ =gSineTable - movs r2, 0x8 - ldrsh r0, [r5, r2] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - lsls r1, 16 - asrs r1, 21 - strh r1, [r5, 0xA] - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x40 - movs r2, 0 - bl BlendPalettes - b _08141A2C - .align 2, 0 -_081419FC: .4byte gSineTable -_08141A00: - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _08141A2C - movs r0, 0 - strh r0, [r5, 0x8] - ldrh r0, [r5, 0xA] - adds r0, 0x1 - movs r1, 0x1 - ands r0, r1 - strh r0, [r5, 0xA] - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r1, 27 - lsrs r1, 24 - movs r0, 0x40 - movs r2, 0 - bl BlendPalettes -_08141A2C: - movs r4, 0 - ldr r5, _08141A4C @ =gPlttBufferFaded - ldr r3, _08141A50 @ =gUnknown_8466C34 - ldr r2, _08141A54 @ =gPlttBufferUnfaded -_08141A34: - adds r0, r4, r3 - ldrb r0, [r0] - adds r0, 0x60 - lsls r0, 1 - adds r1, r0, r5 - adds r0, r2 - ldrh r0, [r0] - strh r0, [r1] - adds r4, 0x1 - cmp r4, 0x1 - bls _08141A34 - b _08141AA8 - .align 2, 0 -_08141A4C: .4byte gPlttBufferFaded -_08141A50: .4byte gUnknown_8466C34 -_08141A54: .4byte gPlttBufferUnfaded -_08141A58: - movs r4, 0 -_08141A5A: - adds r0, r4, 0 - bl sub_8140BF8 - cmp r0, 0 - beq _08141A74 - movs r0, 0x2 - bl GetBgTilemapBuffer - lsls r1, r4, 16 - lsrs r1, 16 - movs r2, 0x4 - bl sub_81418C4 -_08141A74: - adds r4, 0x1 - cmp r4, 0x4 - ble _08141A5A - ldr r0, _08141A94 @ =gUnknown_8465950 - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette -_08141A84: - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _08141AA8 - .align 2, 0 -_08141A94: .4byte gUnknown_8465950 -_08141A98: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08141AA8 - adds r0, r4, 0 - bl DestroyTask -_08141AA8: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_814191C - - thumb_func_start sub_8141AB0 -sub_8141AB0: @ 8141AB0 - push {lr} - ldr r0, _08141AD0 @ =sub_814191C - bl FindTaskIdByFunc - ldr r2, _08141AD4 @ =gTasks - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0x2 - strh r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_08141AD0: .4byte sub_814191C -_08141AD4: .4byte gTasks - thumb_func_end sub_8141AB0 - - thumb_func_start sub_8141AD8 -sub_8141AD8: @ 8141AD8 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08141B14 @ =gUnknown_8466C38 - movs r1, 0xA - str r1, [sp] - movs r1, 0xD - str r1, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - lsls r4, 24 - asrs r4, 24 - adds r0, r4, 0 - bl Menu_MoveCursorNoWrapAround - bl sub_814112C - movs r1, 0x1 - str r1, [r0, 0x28] - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08141B14: .4byte gUnknown_8466C38 - thumb_func_end sub_8141AD8 - - thumb_func_start sub_8141B18 -sub_8141B18: @ 8141B18 - push {r4,lr} - bl sub_814112C - adds r4, r0, 0 - ldr r0, [r4, 0x28] - cmp r0, 0 - beq _08141B2E - bl DestroyYesNoMenu - movs r0, 0 - str r0, [r4, 0x28] -_08141B2E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8141B18 - - thumb_func_start sub_8141B34 -sub_8141B34: @ 8141B34 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - bl sub_814112C - adds r4, r0, 0 - movs r0, 0x2 - bl GetBgTilemapBuffer - mov r12, r0 - movs r1, 0 - movs r0, 0x44 - adds r0, r4 - mov r8, r0 - adds r7, r4, 0 - adds r7, 0x2C - ldr r0, _08141B9C @ =gUnknown_8466C40 - mov r9, r0 -_08141B5A: - movs r5, 0 - lsls r0, r1, 3 - adds r6, r1, 0x1 - mov r1, r8 - adds r4, r0, r1 - mov r1, r9 - adds r3, r0, r1 - adds r2, r0, 0 -_08141B6A: - ldrh r0, [r3] - lsls r0, 1 - add r0, r12 - ldrh r0, [r0] - strh r0, [r4] - adds r1, r7, r2 - adds r0, r5, 0 - adds r0, 0xC0 - strh r0, [r1] - adds r4, 0x2 - adds r3, 0x2 - adds r2, 0x2 - adds r5, 0x1 - cmp r5, 0x3 - ble _08141B6A - adds r1, r6, 0 - cmp r1, 0x2 - ble _08141B5A - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08141B9C: .4byte gUnknown_8466C40 - thumb_func_end sub_8141B34 - - thumb_func_start sub_8141BA0 -sub_8141BA0: @ 8141BA0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x2 - bhi _08141BD8 - bl sub_814112C - adds r4, r0, 0 - movs r0, 0x2 - bl GetBgTilemapBuffer - adds r6, r0, 0 - lsls r0, r5, 3 - ldr r1, _08141BE0 @ =gUnknown_8466C40 - adds r4, 0x2C - adds r3, r0, r4 - adds r2, r0, r1 - movs r4, 0x3 -_08141BC4: - ldrh r0, [r2] - lsls r0, 1 - adds r0, r6 - ldrh r1, [r3] - strh r1, [r0] - adds r3, 0x2 - adds r2, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _08141BC4 -_08141BD8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08141BE0: .4byte gUnknown_8466C40 - thumb_func_end sub_8141BA0 - - thumb_func_start sub_8141BE4 -sub_8141BE4: @ 8141BE4 - push {r4-r7,lr} - bl sub_814112C - adds r4, r0, 0 - movs r0, 0x2 - bl GetBgTilemapBuffer - adds r6, r0, 0 - movs r1, 0 - adds r7, r4, 0 - adds r7, 0x44 - ldr r0, _08141C2C @ =gUnknown_8466C40 - mov r12, r0 -_08141BFE: - lsls r0, r1, 3 - adds r5, r1, 0x1 - adds r3, r0, r7 - mov r1, r12 - adds r2, r0, r1 - movs r4, 0x3 -_08141C0A: - ldrh r0, [r2] - lsls r0, 1 - adds r0, r6 - ldrh r1, [r3] - strh r1, [r0] - adds r3, 0x2 - adds r2, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _08141C0A - adds r1, r5, 0 - cmp r1, 0x2 - ble _08141BFE - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08141C2C: .4byte gUnknown_8466C40 - thumb_func_end sub_8141BE4 - - thumb_func_start sub_8141C30 -sub_8141C30: @ 8141C30 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - bl sub_814112C - adds r0, 0x20 - strb r4, [r0] - movs r0, 0xC - adds r1, r5, 0 - bl sub_8141148 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8141C30 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/title_screen.s b/asm/title_screen.s deleted file mode 100644 index e62cc9a9f..000000000 --- a/asm/title_screen.s +++ /dev/null @@ -1,2310 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start CB2_InitTitleScreen -CB2_InitTitleScreen: @ 8078914 - push {r4-r6,lr} - sub sp, 0xC - ldr r0, _08078930 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r6, [r0] - cmp r6, 0x1 - beq _080789F0 - cmp r6, 0x1 - bgt _08078934 - cmp r6, 0 - beq _08078946 - b _0807893A - .align 2, 0 -_08078930: .4byte gMain -_08078934: - cmp r6, 0x2 - bne _0807893A - b _08078AC0 -_0807893A: - ldr r0, _080789D0 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_08078946: - movs r0, 0 - bl SetVBlankCallback - bl StartTimer1 - ldr r0, _080789D4 @ =gHeap - movs r1, 0xE0 - lsls r1, 9 - bl InitHeap - bl ResetTasks - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetPaletteFade - bl sub_8078B34 - add r1, sp, 0x4 - movs r0, 0 - strh r0, [r1] - ldr r1, _080789D8 @ =0x040000d4 - add r0, sp, 0x4 - str r0, [r1] - movs r0, 0xC0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080789DC @ =0x8100c000 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r2, 0 - str r2, [sp, 0x8] - add r0, sp, 0x8 - str r0, [r1] - movs r0, 0xE0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080789E0 @ =0x85000100 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - add r0, sp, 0x4 - strh r2, [r0] - str r0, [r1] - movs r0, 0xA0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080789E4 @ =0x81000200 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _080789E8 @ =gUnknown_83BFB74 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuRegBits - ldr r1, _080789EC @ =gUnknown_2037F30 - movs r0, 0xFF - strb r0, [r1] - b _08078B18 - .align 2, 0 -_080789D0: .4byte gMain -_080789D4: .4byte gHeap -_080789D8: .4byte 0x040000d4 -_080789DC: .4byte 0x8100c000 -_080789E0: .4byte 0x85000100 -_080789E4: .4byte 0x81000200 -_080789E8: .4byte gUnknown_83BFB74 -_080789EC: .4byte gUnknown_2037F30 -_080789F0: - ldr r0, _08078A94 @ =gUnknown_8EAB6C4 - movs r2, 0xD0 - lsls r2, 1 - movs r1, 0 - bl LoadPalette - ldr r1, _08078A98 @ =gUnknown_8EAB8C4 - movs r4, 0 - str r4, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _08078A9C @ =gUnknown_8EAD390 - str r6, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r0, _08078AA0 @ =gUnknown_8EAD5E8 - movs r1, 0xD0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _08078AA4 @ =gUnknown_8EAD608 - str r4, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _08078AA8 @ =gUnknown_8EADEE4 - str r6, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r5, _08078AAC @ =gUnknown_8EAE094 - adds r0, r5, 0 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _08078AB0 @ =gUnknown_8EAE0B4 - str r4, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _08078AB4 @ =gUnknown_8EAE374 - str r6, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - adds r0, r5, 0 - movs r1, 0xE0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _08078AB8 @ =gUnknown_83BF58C - str r4, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _08078ABC @ =gUnknown_83BF5A8 - str r6, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - bl sub_8079708 - b _08078B18 - .align 2, 0 -_08078A94: .4byte gUnknown_8EAB6C4 -_08078A98: .4byte gUnknown_8EAB8C4 -_08078A9C: .4byte gUnknown_8EAD390 -_08078AA0: .4byte gUnknown_8EAD5E8 -_08078AA4: .4byte gUnknown_8EAD608 -_08078AA8: .4byte gUnknown_8EADEE4 -_08078AAC: .4byte gUnknown_8EAE094 -_08078AB0: .4byte gUnknown_8EAE0B4 -_08078AB4: .4byte gUnknown_8EAE374 -_08078AB8: .4byte gUnknown_83BF58C -_08078ABC: .4byte gUnknown_83BF5A8 -_08078AC0: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - cmp r0, 0 - bne _08078B26 - ldr r0, _08078B00 @ =0x0000ffff - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - ldr r0, _08078B04 @ =sub_8078C24 - movs r1, 0x4 - bl CreateTask - ldr r0, _08078B08 @ =sub_8078BEC - movs r1, 0x2 - bl CreateTask - ldr r1, _08078B0C @ =gUnknown_2037F30 - strb r0, [r1] - ldr r0, _08078B10 @ =sub_8078BB4 - bl SetVBlankCallback - ldr r0, _08078B14 @ =sub_8078B9C - bl SetMainCallback2 - movs r0, 0x8B - lsls r0, 1 - bl m4aSongNumStart - b _08078B26 - .align 2, 0 -_08078B00: .4byte 0x0000ffff -_08078B04: .4byte sub_8078C24 -_08078B08: .4byte sub_8078BEC -_08078B0C: .4byte gUnknown_2037F30 -_08078B10: .4byte sub_8078BB4 -_08078B14: .4byte sub_8078B9C -_08078B18: - ldr r1, _08078B30 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08078B26: - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08078B30: .4byte gMain - thumb_func_end CB2_InitTitleScreen - - thumb_func_start sub_8078B34 -sub_8078B34: @ 8078B34 - push {lr} - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - movs r0, 0x14 - movs r1, 0 - bl SetGpuReg - movs r0, 0x16 - movs r1, 0 - bl SetGpuReg - movs r0, 0x18 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1A - movs r1, 0 - bl SetGpuReg - movs r0, 0x1C - movs r1, 0 - bl SetGpuReg - movs r0, 0x1E - movs r1, 0 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_8078B34 - - thumb_func_start sub_8078B9C -sub_8078B9C: @ 8078B9C - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_8078B9C - - thumb_func_start sub_8078BB4 -sub_8078BB4: @ 8078BB4 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - bl ScanlineEffect_InitHBlankDmaTransfer - ldr r1, _08078BE4 @ =gUnknown_2037F30 - ldrb r0, [r1] - cmp r0, 0xFF - beq _08078BE0 - ldr r2, _08078BE8 @ =gTasks - adds r1, r0, 0 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] -_08078BE0: - pop {r0} - bx r0 - .align 2, 0 -_08078BE4: .4byte gUnknown_2037F30 -_08078BE8: .4byte gTasks - thumb_func_end sub_8078BB4 - - thumb_func_start sub_8078BEC -sub_8078BEC: @ 8078BEC - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _08078C18 @ =gTasks+0x8 - adds r0, r1 - movs r3, 0 - ldrsh r1, [r0, r3] - ldr r0, _08078C1C @ =0x00000a8b - cmp r1, r0 - ble _08078C12 - ldr r1, _08078C20 @ =gUnknown_2037F30 - movs r0, 0xFF - strb r0, [r1] - adds r0, r2, 0 - bl DestroyTask -_08078C12: - pop {r0} - bx r0 - .align 2, 0 -_08078C18: .4byte gTasks+0x8 -_08078C1C: .4byte 0x00000a8b -_08078C20: .4byte gUnknown_2037F30 - thumb_func_end sub_8078BEC - - thumb_func_start sub_8078C24 -sub_8078C24: @ 8078C24 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08078C6C @ =gTasks+0x8 - adds r4, r1, r0 - ldr r0, _08078C70 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0xB - ands r0, r1 - cmp r0, 0 - beq _08078C74 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x3 - beq _08078C74 - cmp r0, 0x4 - beq _08078C74 - cmp r0, 0x5 - beq _08078C74 - bl sub_8079620 - bl sub_8079648 - movs r2, 0xA - ldrsh r0, [r4, r2] - bl sub_8079A10 - adds r0, r4, 0 - movs r1, 0x3 - bl sub_8078C90 - b _08078C86 - .align 2, 0 -_08078C6C: .4byte gTasks+0x8 -_08078C70: .4byte gMain -_08078C74: - ldr r0, _08078C8C @ =gUnknown_83BFB84 - movs r2, 0 - ldrsh r1, [r4, r2] - lsls r1, 2 - adds r1, r0 - ldr r1, [r1] - adds r0, r4, 0 - bl _call_via_r1 -_08078C86: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08078C8C: .4byte gUnknown_83BFB84 - thumb_func_end sub_8078C24 - - thumb_func_start sub_8078C90 -sub_8078C90: @ 8078C90 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - strh r2, [r0, 0x2] - strh r1, [r0] - bx lr - thumb_func_end sub_8078C90 - - thumb_func_start sub_8078C9C -sub_8078C9C: @ 8078C9C - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x10 - mov r8, r0 - movs r0, 0 - bl HideBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - ldr r0, _08078D14 @ =0x04000054 - str r0, [sp] - ldr r0, _08078D18 @ =0xa2600001 - str r0, [sp, 0x4] - mov r1, sp - movs r5, 0 - movs r0, 0x1 - strb r0, [r1, 0x8] - mov r0, sp - strb r5, [r0, 0x9] - add r0, sp, 0xC - strh r5, [r0] - ldr r4, _08078D1C @ =gScanlineEffectRegBuffers - ldr r6, _08078D20 @ =0x010000a0 - adds r1, r4, 0 - adds r2, r6, 0 - bl CpuSet - mov r0, sp - adds r0, 0xE - strh r5, [r0] - movs r1, 0xF0 - lsls r1, 3 - adds r4, r1 - adds r1, r4, 0 - adds r2, r6, 0 - bl CpuSet - ldr r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - bl ScanlineEffect_SetParams - mov r0, r8 - movs r1, 0x1 - bl sub_8078C90 - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08078D14: .4byte 0x04000054 -_08078D18: .4byte 0xa2600001 -_08078D1C: .4byte gScanlineEffectRegBuffers -_08078D20: .4byte 0x010000a0 - thumb_func_end sub_8078C9C - - thumb_func_start sub_8078D24 -sub_8078D24: @ 8078D24 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _08078D5C - cmp r0, 0x1 - bgt _08078D3A - cmp r0, 0 - beq _08078D40 - b _08078D9C -_08078D3A: - cmp r0, 0x2 - beq _08078D84 - b _08078D9C -_08078D40: - movs r0, 0x50 - movs r1, 0x82 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - movs r0, 0x80 - strh r0, [r4, 0x4] - movs r0, 0x80 - bl sub_8079550 - b _08078D78 -_08078D5C: - ldrh r0, [r4, 0x4] - subs r0, 0x4 - strh r0, [r4, 0x4] - movs r1, 0x4 - ldrsh r0, [r4, r1] - bl sub_8079550 - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - bge _08078D9C - ldr r1, _08078D80 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] -_08078D78: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - b _08078D9C - .align 2, 0 -_08078D80: .4byte gScanlineEffect -_08078D84: - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - adds r0, r4, 0 - movs r1, 0x2 - bl sub_8078C90 -_08078D9C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8078D24 - - thumb_func_start sub_8078DA4 -sub_8078DA4: @ 8078DA4 - push {r4-r7,lr} - sub sp, 0xC - adds r6, r0, 0 - movs r1, 0x2 - ldrsh r0, [r6, r1] - cmp r0, 0x9 - bls _08078DB4 - b _08078FB6 -_08078DB4: - lsls r0, 2 - ldr r1, _08078DC0 @ =_08078DC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08078DC0: .4byte _08078DC4 - .align 2, 0 -_08078DC4: - .4byte _08078DEC - .4byte _08078DF2 - .4byte _08078E24 - .4byte _08078E40 - .4byte _08078E80 - .4byte _08078EA4 - .4byte _08078ED4 - .4byte _08078EF8 - .4byte _08078F24 - .4byte _08078F98 -_08078DEC: - movs r0, 0 - strh r0, [r6, 0x4] - b _08078F80 -_08078DF2: - ldrh r0, [r6, 0x4] - adds r0, 0x1 - strh r0, [r6, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bgt _08078E02 - b _08078FB6 -_08078E02: - ldr r0, _08078E20 @ =gPlttBufferUnfaded + 0x1A0 - movs r1, 0x10 - bl TintPalette_GrayScale2 - movs r0, 0x80 - lsls r0, 6 - movs r1, 0 - str r1, [sp] - movs r1, 0x9 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _08078F80 - .align 2, 0 -_08078E20: .4byte gPlttBufferUnfaded + 0x1A0 -_08078E24: - ldr r0, _08078E3C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _08078E36 - b _08078FB6 -_08078E36: - strh r0, [r6, 0x4] - b _08078F80 - .align 2, 0 -_08078E3C: .4byte gPaletteFade -_08078E40: - ldrh r0, [r6, 0x4] - adds r0, 0x1 - strh r0, [r6, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x24 - bgt _08078E50 - b _08078FB6 -_08078E50: - ldr r0, _08078E78 @ =sub_80792C8 - movs r1, 0x3 - bl CreateTask - movs r0, 0x80 - lsls r0, 6 - movs r1, 0x4 - negs r1, r1 - ldr r2, _08078E7C @ =0x00007fde - str r2, [sp] - movs r4, 0 - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r2, 0x1 - movs r3, 0x10 - bl sub_80717A8 - strh r4, [r6, 0x4] - b _08078F80 - .align 2, 0 -_08078E78: .4byte sub_80792C8 -_08078E7C: .4byte 0x00007fde -_08078E80: - movs r0, 0 - bl sub_807185C - adds r3, r0, 0 - cmp r3, 0 - beq _08078E8E - b _08078FB6 -_08078E8E: - movs r0, 0x80 - lsls r0, 6 - movs r1, 0x4 - negs r1, r1 - ldr r2, _08078EA0 @ =0x00007fde - str r2, [sp] - str r3, [sp, 0x4] - str r3, [sp, 0x8] - b _08078F78 - .align 2, 0 -_08078EA0: .4byte 0x00007fde -_08078EA4: - ldrh r0, [r6, 0x4] - adds r0, 0x1 - strh r0, [r6, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - bgt _08078EB4 - b _08078FB6 -_08078EB4: - movs r0, 0 - strh r0, [r6, 0x4] - movs r0, 0x80 - lsls r0, 6 - movs r1, 0x4 - negs r1, r1 - ldr r2, _08078ED0 @ =0x00007fde - str r2, [sp] - movs r2, 0 - str r2, [sp, 0x4] - str r2, [sp, 0x8] - movs r2, 0x1 - movs r3, 0x10 - b _08078F7C - .align 2, 0 -_08078ED0: .4byte 0x00007fde -_08078ED4: - movs r0, 0 - bl sub_807185C - adds r3, r0, 0 - cmp r3, 0 - bne _08078FB6 - movs r0, 0x80 - lsls r0, 6 - movs r1, 0x4 - negs r1, r1 - ldr r2, _08078EF4 @ =0x00007fde - str r2, [sp] - str r3, [sp, 0x4] - str r3, [sp, 0x8] - b _08078F78 - .align 2, 0 -_08078EF4: .4byte 0x00007fde -_08078EF8: - ldrh r0, [r6, 0x4] - adds r0, 0x1 - strh r0, [r6, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _08078FB6 - movs r0, 0 - strh r0, [r6, 0x4] - movs r0, 0x80 - lsls r0, 6 - movs r1, 0x3 - negs r1, r1 - ldr r2, _08078F20 @ =0x00007fde - str r2, [sp] - movs r2, 0 - str r2, [sp, 0x4] - str r2, [sp, 0x8] - movs r3, 0x10 - b _08078F7C - .align 2, 0 -_08078F20: .4byte 0x00007fde -_08078F24: - movs r0, 0 - bl sub_807185C - adds r7, r0, 0 - cmp r7, 0 - bne _08078FB6 - movs r0, 0x1 - strh r0, [r6, 0xA] - bl sub_80799F0 - movs r4, 0x80 - lsls r4, 9 - lsls r4, r0 - ldr r0, _08078F88 @ =0x00001fff - orrs r4, r0 - ldr r5, _08078F8C @ =0x00007fde - adds r0, r4, 0 - movs r1, 0x10 - adds r2, r5, 0 - bl BlendPalettes - str r5, [sp] - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0 - bl ShowBg - ldr r0, _08078F90 @ =gUnknown_8EAD5E8 - ldr r1, _08078F94 @ =gPlttBufferUnfaded + 0x1A0 - movs r2, 0x10 - bl CpuSet - movs r0, 0x80 - lsls r0, 6 - str r5, [sp] - str r7, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x1 -_08078F78: - movs r2, 0xF - movs r3, 0 -_08078F7C: - bl sub_80717A8 -_08078F80: - ldrh r0, [r6, 0x2] - adds r0, 0x1 - strh r0, [r6, 0x2] - b _08078FB6 - .align 2, 0 -_08078F88: .4byte 0x00001fff -_08078F8C: .4byte 0x00007fde -_08078F90: .4byte gUnknown_8EAD5E8 -_08078F94: .4byte gPlttBufferUnfaded + 0x1A0 -_08078F98: - movs r0, 0 - bl sub_807185C - cmp r0, 0 - bne _08078FB6 - ldr r0, _08078FC0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08078FB6 - adds r0, r6, 0 - movs r1, 0x3 - bl sub_8078C90 -_08078FB6: - add sp, 0xC - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08078FC0: .4byte gPaletteFade - thumb_func_end sub_8078DA4 - - thumb_func_start sub_8078FC4 -sub_8078FC4: @ 8078FC4 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08078FD6 - cmp r0, 0x1 - beq _08079004 - b _08079094 -_08078FD6: - movs r0, 0x1 - bl HelpSystem_SetSomeVariable2 - ldr r0, _0807902C @ =sub_807941C - movs r1, 0 - bl CreateTask - ldr r0, _08079030 @ =sub_8079840 - movs r1, 0x5 - bl CreateTask - bl sub_80790A0 - bl sub_8079A40 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0xC] - bl sub_812B484 - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] -_08079004: - ldr r2, _08079034 @ =gMain - ldrh r1, [r2, 0x2C] - movs r0, 0x46 - ands r0, r1 - cmp r0, 0x46 - bne _08079040 - ldrb r0, [r4, 0xC] - bl sub_8079A88 - ldr r0, _08079038 @ =sub_8078C24 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r0, _0807903C @ =sub_80796CC - bl SetMainCallback2 - b _08079094 - .align 2, 0 -_0807902C: .4byte sub_807941C -_08079030: .4byte sub_8079840 -_08079034: .4byte gMain -_08079038: .4byte sub_8078C24 -_0807903C: .4byte sub_80796CC -_08079040: - movs r0, 0x6 - ands r0, r1 - cmp r0, 0x6 - bne _0807906C - ldrb r0, [r4, 0xC] - bl sub_8079A88 - ldr r0, _08079064 @ =sub_8078C24 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r0, _08079068 @ =sub_80796E8 - bl SetMainCallback2 - b _08079094 - .align 2, 0 -_08079064: .4byte sub_8078C24 -_08079068: .4byte sub_80796E8 -_0807906C: - ldrh r1, [r2, 0x2E] - movs r0, 0x9 - ands r0, r1 - cmp r0, 0 - beq _08079080 - adds r0, r4, 0 - movs r1, 0x5 - bl sub_8078C90 - b _08079094 -_08079080: - ldr r0, _0807909C @ =sub_8078BEC - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08079094 - adds r0, r4, 0 - movs r1, 0x4 - bl sub_8078C90 -_08079094: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0807909C: .4byte sub_8078BEC - thumb_func_end sub_8078FC4 - - thumb_func_start sub_80790A0 -sub_80790A0: @ 80790A0 - push {lr} - movs r1, 0x80 - lsls r1, 8 - movs r0, 0 - bl SetGpuRegBits - ldr r1, _080790C8 @ =0x00003f1f - movs r0, 0x4A - bl SetGpuReg - movs r0, 0x50 - movs r1, 0x81 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0xD - bl SetGpuReg - pop {r0} - bx r0 - .align 2, 0 -_080790C8: .4byte 0x00003f1f - thumb_func_end sub_80790A0 - - thumb_func_start sub_80790CC -sub_80790CC: @ 80790CC - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bhi _080791B0 - lsls r0, 2 - ldr r1, _080790E4 @ =_080790E8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080790E4: .4byte _080790E8 - .align 2, 0 -_080790E8: - .4byte _080790FC - .4byte _08079104 - .4byte _0807913C - .4byte _08079170 - .4byte _08079198 -_080790FC: - ldrb r0, [r4, 0xC] - bl sub_8079A88 - b _0807918C -_08079104: - ldr r0, _08079138 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080791B0 - ldrb r0, [r4, 0xC] - bl sub_8079AA8 - adds r5, r0, 0 - cmp r5, 0 - bne _080791B0 - movs r0, 0xA - bl FadeOutMapMusic - movs r0, 0x1 - negs r0, r0 - str r5, [sp] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - bl sub_8079528 - b _0807918C - .align 2, 0 -_08079138: .4byte gPaletteFade -_0807913C: - bl IsNotWaitingForBGMStop - lsls r0, 24 - cmp r0, 0 - beq _080791B0 - ldr r0, _08079168 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080791B0 - ldr r0, _0807916C @ =sub_807941C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - strh r5, [r4, 0x4] - b _0807918C - .align 2, 0 -_08079168: .4byte gPaletteFade -_0807916C: .4byte sub_807941C -_08079170: - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _080791B0 - ldr r0, _08079194 @ =sub_807941C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0807918C: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - b _080791B0 - .align 2, 0 -_08079194: .4byte sub_807941C -_08079198: - bl sub_812B478 - ldr r0, _080791B8 @ =sub_8078C24 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r0, _080791BC @ =sub_80EC864 - bl SetMainCallback2 -_080791B0: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080791B8: .4byte sub_8078C24 -_080791BC: .4byte sub_80EC864 - thumb_func_end sub_80790CC - - thumb_func_start sub_80791C0 -sub_80791C0: @ 80791C0 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _08079204 - cmp r0, 0x1 - bgt _080791D8 - cmp r0, 0 - beq _080791DE - b _080792A6 -_080791D8: - cmp r0, 0x2 - beq _08079248 - b _080792A6 -_080791DE: - ldr r0, _08079200 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080792A6 - .ifdef FIRERED - movs r0, 0x6 @ CHARIZARD - .else - movs r0, 0x3 @ VENUSAUR - .endif - movs r1, 0 - bl PlayCry1 - ldrb r0, [r4, 0xC] - bl sub_8079A88 - strh r5, [r4, 0x4] - b _08079238 - .align 2, 0 -_08079200: .4byte gPaletteFade -_08079204: - ldrh r1, [r4, 0x4] - movs r2, 0x4 - ldrsh r0, [r4, r2] - cmp r0, 0x59 - bgt _08079214 - adds r0, r1, 0x1 - strh r0, [r4, 0x4] - b _080792A6 -_08079214: - ldrb r0, [r4, 0xC] - bl sub_8079AA8 - cmp r0, 0 - bne _080792A6 - ldr r0, _08079240 @ =0x0fffffff - ldr r1, _08079244 @ =0x00007fff - str r1, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - bl sub_8079528 - movs r0, 0x4 - bl FadeOutBGM -_08079238: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - b _080792A6 - .align 2, 0 -_08079240: .4byte 0x0fffffff -_08079244: .4byte 0x00007fff -_08079248: - ldr r0, _080792B0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080792A6 - bl SeedRngAndSetTrainerId - bl SetSaveBlocksPointers - bl ResetMenuAndMonGlobals - bl Save_ResetSaveCounters - movs r0, 0 - bl Save_LoadGameData - ldr r0, _080792B4 @ =gSaveFileStatus - ldrh r0, [r0] - cmp r0, 0 - beq _08079276 - cmp r0, 0x2 - bne _0807927A -_08079276: - bl Sav2_ClearSetDefault -_0807927A: - ldr r0, _080792B8 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x15] - lsls r0, 31 - lsrs r0, 31 - bl SetPokemonCryStereo - ldr r0, _080792BC @ =gHeap - movs r1, 0xE0 - lsls r1, 9 - bl InitHeap - ldr r0, _080792C0 @ =sub_800C300 - bl SetMainCallback2 - ldr r0, _080792C4 @ =sub_8078C24 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080792A6: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080792B0: .4byte gPaletteFade -_080792B4: .4byte gSaveFileStatus -_080792B8: .4byte gSaveBlock2Ptr -_080792BC: .4byte gHeap -_080792C0: .4byte sub_800C300 -_080792C4: .4byte sub_8078C24 - thumb_func_end sub_80791C0 - - thumb_func_start sub_80792C8 -sub_80792C8: @ 80792C8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080792EC @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x5 - bls _080792E2 - b _08079414 -_080792E2: - lsls r0, 2 - ldr r1, _080792F0 @ =_080792F4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080792EC: .4byte gTasks+0x8 -_080792F0: .4byte _080792F4 - .align 2, 0 -_080792F4: - .4byte _0807930C - .4byte _08079344 - .4byte _08079368 - .4byte _0807937C - .4byte _080793BC - .4byte _08079404 -_0807930C: - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - movs r0, 0x4A - movs r1, 0x37 - bl SetGpuReg - movs r0, 0x44 - movs r1, 0xA0 - bl SetGpuReg - movs r0, 0x40 - movs r1, 0 - bl SetGpuReg - movs r0, 0x80 - lsls r0, 7 - movs r1, 0 - movs r2, 0 - bl BlendPalettes - b _080793AA -_08079344: - movs r1, 0xC0 - lsls r1, 1 - adds r0, r1, 0 - ldrh r1, [r4, 0x2] - adds r0, r1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x4] - cmp r0, 0xEF - ble _08079364 - movs r0, 0xF0 - strh r0, [r4, 0x4] - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] -_08079364: - ldrh r1, [r4, 0x4] - b _080793F6 -_08079368: - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - ble _08079414 - movs r0, 0 - strh r0, [r4, 0x6] - b _080793AA -_0807937C: - movs r0, 0x4A - movs r1, 0x3B - bl SetGpuReg - ldr r1, _080793B4 @ =0x0000f0f0 - movs r0, 0x40 - bl SetGpuReg - ldr r1, _080793B8 @ =0xffff1000 - movs r0, 0x2 - movs r2, 0 - bl ChangeBgX - movs r0, 0x80 - lsls r0, 8 - movs r1, 0 - movs r2, 0 - bl BlendPalettes - movs r1, 0xF0 - lsls r1, 4 - adds r0, r1, 0 - strh r0, [r4, 0x2] -_080793AA: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _08079414 - .align 2, 0 -_080793B4: .4byte 0x0000f0f0 -_080793B8: .4byte 0xffff1000 -_080793BC: - ldr r1, _08079400 @ =0xfffffe80 - adds r0, r1, 0 - ldrh r1, [r4, 0x2] - adds r0, r1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x4] - cmp r0, 0 - bgt _080793DA - movs r0, 0 - strh r0, [r4, 0x4] - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] -_080793DA: - movs r0, 0x4 - ldrsh r1, [r4, r0] - negs r1, r1 - lsls r1, 8 - movs r0, 0x2 - movs r2, 0 - bl ChangeBgX - ldrh r1, [r4, 0x4] - lsls r1, 8 - movs r0, 0xF0 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 -_080793F6: - movs r0, 0x40 - bl SetGpuReg - b _08079414 - .align 2, 0 -_08079400: .4byte 0xfffffe80 -_08079404: - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl ClearGpuRegBits - adds r0, r5, 0 - bl DestroyTask -_08079414: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80792C8 - - thumb_func_start sub_807941C -sub_807941C: @ 807941C - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _08079460 @ =gTasks+0x8 - adds r5, r0, r1 - movs r1, 0x1E - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _08079444 - ldr r0, _08079464 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08079444 - movs r0, 0x1 - strh r0, [r5, 0x1C] -_08079444: - movs r3, 0x1C - ldrsh r0, [r5, r3] - cmp r0, 0 - beq _08079468 - ldr r0, _08079464 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08079468 - adds r0, r2, 0 - bl DestroyTask - b _08079510 - .align 2, 0 -_08079460: .4byte gTasks+0x8 -_08079464: .4byte gPaletteFade -_08079468: - movs r1, 0x2 - ldrsh r0, [r5, r1] - ldrh r2, [r5, 0x2] - cmp r0, 0 - bne _08079476 - movs r0, 0x3C - b _08079478 -_08079476: - movs r0, 0x1E -_08079478: - strh r0, [r5, 0x4] - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x4 - ldrsh r1, [r5, r3] - cmp r0, r1 - blt _08079510 - movs r0, 0 - strh r0, [r5] - movs r0, 0x1 - eors r0, r2 - strh r0, [r5, 0x2] - lsls r0, 16 - cmp r0, 0 - beq _080794CC - ldr r2, _080794C0 @ =gPlttBufferUnfaded - ldr r4, _080794C4 @ =gUnknown_8EAE094 - ldr r1, _080794C8 @ =gPlttBufferFaded - movs r0, 0xF1 - lsls r0, 1 - adds r1, r0 - adds r2, r0 - movs r3, 0x4 -_080794AC: - ldrh r0, [r4, 0xC] - strh r0, [r2] - ldrh r0, [r4, 0xC] - strh r0, [r1] - adds r1, 0x2 - adds r2, 0x2 - subs r3, 0x1 - cmp r3, 0 - bge _080794AC - b _080794F2 - .align 2, 0 -_080794C0: .4byte gPlttBufferUnfaded -_080794C4: .4byte gUnknown_8EAE094 -_080794C8: .4byte gPlttBufferFaded -_080794CC: - movs r3, 0 - ldr r2, _08079518 @ =gPlttBufferUnfaded - ldr r0, _0807951C @ =gUnknown_8EAE094 - ldr r1, _08079520 @ =gPlttBufferFaded - adds r4, r0, 0x2 - movs r0, 0xF1 - lsls r0, 1 - adds r1, r0 - adds r2, r0 -_080794DE: - ldrh r0, [r4] - strh r0, [r2] - ldrh r0, [r4] - strh r0, [r1] - adds r4, 0x2 - adds r1, 0x2 - adds r2, 0x2 - adds r3, 0x1 - cmp r3, 0x4 - ble _080794DE -_080794F2: - movs r1, 0x1C - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _08079510 - movs r0, 0x80 - lsls r0, 8 - ldr r2, _08079524 @ =gPaletteFade - ldrh r1, [r2, 0x4] - lsls r1, 21 - lsrs r1, 27 - ldrh r2, [r2, 0x6] - lsls r2, 17 - lsrs r2, 17 - bl BlendPalettes -_08079510: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08079518: .4byte gPlttBufferUnfaded -_0807951C: .4byte gUnknown_8EAE094 -_08079520: .4byte gPlttBufferFaded -_08079524: .4byte gPaletteFade - thumb_func_end sub_807941C - - thumb_func_start sub_8079528 -sub_8079528: @ 8079528 - push {lr} - ldr r0, _08079548 @ =sub_807941C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0807954C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0x1 - strh r0, [r1, 0x26] - pop {r0} - bx r0 - .align 2, 0 -_08079548: .4byte sub_807941C -_0807954C: .4byte gTasks - thumb_func_end sub_8079528 - - thumb_func_start sub_8079550 -sub_8079550: @ 8079550 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r5, r0, 16 - asrs r4, r5, 16 - cmp r4, 0 - blt _08079574 - ldr r3, _08079618 @ =gScanlineEffectRegBuffers - lsls r2, r4, 1 - ldr r0, _0807961C @ =gScanlineEffect - ldrb r1, [r0, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r3 - movs r0, 0x10 - strh r0, [r2] -_08079574: - movs r3, 0 - mov r8, r5 - adds r6, r4, 0 - ldr r0, _08079618 @ =gScanlineEffectRegBuffers - mov r12, r0 - ldr r7, _0807961C @ =gScanlineEffect - movs r5, 0xF - lsls r2, r6, 1 - adds r4, r2, 0 -_08079586: - adds r0, r6, r3 - cmp r0, 0 - blt _0807959A - ldrb r1, [r7, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r0, r4, r0 - add r0, r12 - strh r5, [r0] -_0807959A: - subs r0, r6, r3 - cmp r0, 0 - blt _080795AE - ldrb r1, [r7, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r0, r2, r0 - add r0, r12 - strh r5, [r0] -_080795AE: - subs r5, 0x1 - subs r2, 0x2 - adds r4, 0x2 - adds r3, 0x1 - cmp r3, 0xF - ble _08079586 - mov r1, r8 - asrs r0, r1, 16 - adds r3, r0, 0 - adds r3, 0x10 - cmp r3, 0x9F - bgt _080795E6 - ldr r6, _08079618 @ =gScanlineEffectRegBuffers - ldr r5, _0807961C @ =gScanlineEffect - movs r4, 0 -_080795CC: - cmp r3, 0 - blt _080795E0 - lsls r2, r3, 1 - ldrb r1, [r5, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r6 - strh r4, [r2] -_080795E0: - adds r3, 0x1 - cmp r3, 0x9F - ble _080795CC -_080795E6: - mov r1, r8 - asrs r0, r1, 16 - adds r3, r0, 0 - subs r3, 0x10 - cmp r3, 0 - blt _0807960E - ldr r6, _08079618 @ =gScanlineEffectRegBuffers - ldr r5, _0807961C @ =gScanlineEffect - movs r4, 0 -_080795F8: - lsls r2, r3, 1 - ldrb r1, [r5, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r6 - strh r4, [r2] - subs r3, 0x1 - cmp r3, 0 - bge _080795F8 -_0807960E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08079618: .4byte gScanlineEffectRegBuffers -_0807961C: .4byte gScanlineEffect - thumb_func_end sub_8079550 - - thumb_func_start sub_8079620 -sub_8079620: @ 8079620 - push {lr} - ldr r1, _08079644 @ =gScanlineEffect - ldrb r0, [r1, 0x15] - cmp r0, 0 - beq _0807962E - movs r0, 0x3 - strb r0, [r1, 0x15] -_0807962E: - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - pop {r0} - bx r0 - .align 2, 0 -_08079644: .4byte gScanlineEffect - thumb_func_end sub_8079620 - - thumb_func_start sub_8079648 -sub_8079648: @ 8079648 - push {r4,lr} - ldr r0, _080796BC @ =sub_80792C8 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _0807965C - bl DestroyTask -_0807965C: - bl sub_8071898 - bl ResetPaletteFadeControl - ldr r0, _080796C0 @ =gUnknown_8EAB6C4 - movs r2, 0xD0 - lsls r2, 1 - movs r1, 0 - bl LoadPalette - ldr r0, _080796C4 @ =gUnknown_8EAD5E8 - movs r1, 0xD0 - movs r2, 0x20 - bl LoadPalette - ldr r4, _080796C8 @ =gUnknown_8EAE094 - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - adds r0, r4, 0 - movs r1, 0xE0 - movs r2, 0x20 - bl LoadPalette - bl ResetBgPositions - movs r1, 0xE0 - lsls r1, 8 - movs r0, 0 - bl ClearGpuRegBits - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0 - bl ShowBg - movs r0, 0x3 - bl ShowBg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080796BC: .4byte sub_80792C8 -_080796C0: .4byte gUnknown_8EAB6C4 -_080796C4: .4byte gUnknown_8EAD5E8 -_080796C8: .4byte gUnknown_8EAE094 - thumb_func_end sub_8079648 - - thumb_func_start sub_80796CC -sub_80796CC: @ 80796CC - push {lr} - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _080796DE - ldr r0, _080796E4 @ =sub_80F55A0 - bl SetMainCallback2 -_080796DE: - pop {r0} - bx r0 - .align 2, 0 -_080796E4: .4byte sub_80F55A0 - thumb_func_end sub_80796CC - - thumb_func_start sub_80796E8 -sub_80796E8: @ 80796E8 - push {lr} - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _080796FE - bl m4aMPlayAllStop - ldr r0, _08079704 @ =mb_berry_fix_serve - bl SetMainCallback2 -_080796FE: - pop {r0} - bx r0 - .align 2, 0 -_08079704: .4byte mb_berry_fix_serve - thumb_func_end sub_80796E8 - - thumb_func_start sub_8079708 -sub_8079708: @ 8079708 - push {r4,r5,lr} - movs r5, 0 - ldr r4, _08079728 @ =gUnknown_83BFB9C -_0807970E: - adds r0, r4, 0 - bl LoadCompressedSpriteSheet - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x3 - bls _0807970E - ldr r0, _0807972C @ =gUnknown_83BFBBC - bl LoadSpritePalettes - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08079728: .4byte gUnknown_83BFB9C -_0807972C: .4byte gUnknown_83BFBBC - thumb_func_end sub_8079708 - - thumb_func_start sub_8079730 -sub_8079730: @ 8079730 - push {r4,lr} - adds r4, r0, 0 - adds r2, r4, 0 - adds r2, 0x2E - ldrh r0, [r4, 0x2E] - ldrh r1, [r2, 0x2] - subs r0, r1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x20] - movs r1, 0x8 - negs r1, r1 - cmp r0, r1 - blt _08079774 - ldrh r0, [r2, 0x6] - ldrh r1, [r2, 0x4] - adds r0, r1 - strh r0, [r2, 0x4] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x22] - subs r0, 0x10 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xB8 - bhi _08079774 - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0807977C -_08079774: - adds r0, r4, 0 - bl DestroySprite - b _080797A6 -_0807977C: - ldrh r1, [r2, 0xE] - movs r3, 0xE - ldrsh r0, [r2, r3] - cmp r0, 0 - beq _080797A6 - subs r0, r1, 0x1 - strh r0, [r2, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _080797A6 - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] -_080797A6: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8079730 - - thumb_func_start sub_80797AC -sub_80797AC: @ 80797AC - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - adds r5, r1, 0 - mov r8, r2 - adds r7, r3, 0 - ldr r0, [sp, 0x18] - cmp r0, 0 - beq _080797C8 - ldr r0, _080797C4 @ =gUnknown_83BFB04 - b _080797CA - .align 2, 0 -_080797C4: .4byte gUnknown_83BFB04 -_080797C8: - ldr r0, _08079828 @ =gUnknown_83BFB1C -_080797CA: - lsls r1, r4, 16 - asrs r1, 16 - lsls r2, r5, 16 - asrs r2, 16 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _08079834 - ldr r0, _0807982C @ =gSprites - mov r12, r0 - lsls r0, r1, 4 - adds r0, r1 - lsls r6, r0, 2 - mov r1, r12 - adds r2, r6, r1 - lsls r0, r4, 4 - movs r1, 0 - strh r0, [r2, 0x2E] - mov r0, r8 - strh r0, [r2, 0x30] - lsls r0, r5, 4 - strh r0, [r2, 0x32] - strh r7, [r2, 0x34] - strh r1, [r2, 0x36] - mov r3, r8 - muls r3, r7 - adds r0, r3, 0 - cmp r3, 0 - bge _0807980C - adds r0, 0xF -_0807980C: - asrs r0, 4 - lsls r0, 4 - subs r0, r3, r0 - strh r0, [r2, 0x38] - mov r1, sp - ldrh r1, [r1, 0x18] - strh r1, [r2, 0x3A] - mov r0, r12 - adds r0, 0x1C - adds r0, r6, r0 - ldr r1, _08079830 @ =sub_8079730 - str r1, [r0] - movs r0, 0x1 - b _08079836 - .align 2, 0 -_08079828: .4byte gUnknown_83BFB1C -_0807982C: .4byte gSprites -_08079830: .4byte sub_8079730 -_08079834: - movs r0, 0 -_08079836: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80797AC - - thumb_func_start sub_8079840 -sub_8079840: @ 8079840 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08079868 @ =gTasks+0x8 - adds r6, r0, r1 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0 - beq _0807986C - cmp r0, 0x1 - beq _08079884 - b _0807998A - .align 2, 0 -_08079868: .4byte gTasks+0x8 -_0807986C: - ldr r2, _08079880 @ =0x00007878 - adds r0, r5, 0 - movs r1, 0x3 - bl sub_807999C - ldrh r0, [r6] - adds r0, 0x1 - strh r0, [r6] - b _0807998A - .align 2, 0 -_08079880: .4byte 0x00007878 -_08079884: - ldrh r0, [r6, 0x2] - adds r0, 0x1 - strh r0, [r6, 0x2] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x4 - ldrsh r1, [r6, r2] - cmp r0, r1 - blt _0807998A - movs r0, 0 - strh r0, [r6, 0x2] - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - movs r0, 0x12 - strh r0, [r6, 0x4] - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r0 - lsrs r1, 16 - subs r1, 0x2 - mov r8, r1 - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - lsls r0, 16 - movs r1, 0xE0 - lsls r1, 11 - ands r1, r0 - lsrs r1, 16 - adds r7, r1, 0 - subs r7, 0x10 - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - adds r0, 0x74 - mov r9, r0 - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xF0 - bl __umodsi3 - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - movs r2, 0 - lsls r0, 16 - movs r1, 0xF0 - lsls r1, 12 - ands r1, r0 - lsrs r1, 16 - cmp r1, 0x7 - bls _0807991C - movs r2, 0x1 -_0807991C: - str r2, [sp] - adds r0, r4, 0 - mov r1, r9 - mov r2, r8 - adds r3, r7, 0 - bl sub_80797AC - movs r4, 0 -_0807992C: - ldr r1, _08079998 @ =gUnknown_83BFBD4 - adds r1, r4, r1 - movs r2, 0xA - ldrsh r0, [r6, r2] - ldrb r1, [r1] - adds r0, r1 - movs r1, 0x1 - str r1, [sp] - mov r1, r9 - mov r2, r8 - adds r3, r7, 0 - bl sub_80797AC - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r0 - lsrs r1, 16 - subs r1, 0x2 - mov r8, r1 - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80799B4 - lsls r0, 16 - movs r1, 0xE0 - lsls r1, 11 - ands r1, r0 - lsrs r1, 16 - adds r7, r1, 0 - subs r7, 0x10 - adds r4, 0x1 - cmp r4, 0xE - ble _0807992C - ldrh r0, [r6, 0xA] - adds r0, 0x1 - strh r0, [r6, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _0807998A - movs r0, 0 - strh r0, [r6, 0xA] -_0807998A: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08079998: .4byte gUnknown_83BFBD4 - thumb_func_end sub_8079840 - - thumb_func_start sub_807999C -sub_807999C: @ 807999C - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 16 - lsrs r2, 16 - bl SetWordTaskArg - pop {r0} - bx r0 - thumb_func_end sub_807999C - - thumb_func_start sub_80799B4 -sub_80799B4: @ 80799B4 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - adds r0, r4, 0 - adds r1, r5, 0 - bl GetWordTaskArg - adds r6, r0, 0 - ldr r0, _080799E8 @ =0x41c64e6d - muls r0, r6 - ldr r1, _080799EC @ =0x00006073 - adds r6, r0, r1 - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl SetWordTaskArg - lsrs r0, r6, 16 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080799E8: .4byte 0x41c64e6d -_080799EC: .4byte 0x00006073 - thumb_func_end sub_80799B4 - - thumb_func_start sub_80799F0 -sub_80799F0: @ 80799F0 - push {lr} - ldr r0, _08079A0C @ =gUnknown_83BFB3C - movs r1, 0x18 - movs r2, 0x90 - movs r3, 0 - bl CreateSprite - movs r0, 0x2 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08079A0C: .4byte gUnknown_83BFB3C - thumb_func_end sub_80799F0 - - thumb_func_start sub_8079A10 -sub_8079A10: @ 8079A10 - push {lr} - cmp r0, 0 - beq _08079A38 - movs r0, 0x2 - bl IndexOfSpritePaletteTag - adds r1, r0, 0 - lsls r1, 24 - ldr r0, _08079A34 @ =gUnknown_8EAE488 - lsrs r1, 4 - movs r2, 0x80 - lsls r2, 17 - adds r1, r2 - lsrs r1, 16 - movs r2, 0x20 - bl LoadPalette - b _08079A3C - .align 2, 0 -_08079A34: .4byte gUnknown_8EAE488 -_08079A38: - bl sub_80799F0 -_08079A3C: - pop {r0} - bx r0 - thumb_func_end sub_8079A10 - - thumb_func_start sub_8079A40 -sub_8079A40: @ 8079A40 - push {r4,lr} - ldr r0, _08079A7C @ =gUnknown_83BFB5C - movs r1, 0x20 - negs r1, r1 - movs r2, 0x1B - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - adds r4, r1, 0 - cmp r1, 0x40 - beq _08079A74 - ldr r3, _08079A80 @ =gSprites - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r3, 0 - adds r1, 0x1C - adds r1, r0, r1 - ldr r2, _08079A84 @ =sub_8079AD8 - str r2, [r1] - adds r0, r3 - movs r1, 0x87 - lsls r1, 2 - strh r1, [r0, 0x30] -_08079A74: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08079A7C: .4byte gUnknown_83BFB5C -_08079A80: .4byte gSprites -_08079A84: .4byte sub_8079AD8 - thumb_func_end sub_8079A40 - - thumb_func_start sub_8079A88 -sub_8079A88: @ 8079A88 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _08079AA0 - ldr r0, _08079AA4 @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - movs r0, 0x1 - strh r0, [r1, 0x32] -_08079AA0: - pop {r0} - bx r0 - .align 2, 0 -_08079AA4: .4byte gSprites - thumb_func_end sub_8079A88 - - thumb_func_start sub_8079AA8 -sub_8079AA8: @ 8079AA8 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - bne _08079AB6 - movs r0, 0 - b _08079ACE -_08079AB6: - ldr r1, _08079AD4 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - movs r2, 0x2E - ldrsh r1, [r0, r2] - movs r0, 0x2 - eors r1, r0 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 -_08079ACE: - pop {r1} - bx r1 - .align 2, 0 -_08079AD4: .4byte gSprites - thumb_func_end sub_8079AA8 - - thumb_func_start sub_8079AD8 -sub_8079AD8: @ 8079AD8 - push {lr} - adds r2, r0, 0 - movs r1, 0x2E - ldrsh r0, [r2, r1] - cmp r0, 0x1 - beq _08079B24 - cmp r0, 0x1 - bgt _08079B74 - cmp r0, 0 - bne _08079B74 - movs r1, 0x32 - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _08079B04 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x2 - strh r0, [r2, 0x2E] -_08079B04: - ldrh r0, [r2, 0x30] - subs r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _08079B74 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x5 - negs r1, r1 - ands r1, r0 - strb r1, [r3] - movs r0, 0x1 - strh r0, [r2, 0x2E] - b _08079B74 -_08079B24: - ldrh r0, [r2, 0x20] - adds r0, 0x9 - strh r0, [r2, 0x20] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x43 - bne _08079B38 - ldrh r0, [r2, 0x22] - subs r0, 0x7 - strh r0, [r2, 0x22] -_08079B38: - movs r0, 0x20 - ldrsh r1, [r2, r0] - cmp r1, 0x94 - bne _08079B46 - ldrh r0, [r2, 0x22] - adds r0, 0x7 - strh r0, [r2, 0x22] -_08079B46: - movs r0, 0x88 - lsls r0, 1 - cmp r1, r0 - ble _08079B74 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3] - movs r0, 0x32 - ldrsh r1, [r2, r0] - cmp r1, 0 - beq _08079B68 - movs r0, 0x2 - strh r0, [r2, 0x2E] - b _08079B74 -_08079B68: - ldr r0, _08079B78 @ =0x0000ffe0 - strh r0, [r2, 0x20] - movs r0, 0x87 - lsls r0, 2 - strh r0, [r2, 0x30] - strh r1, [r2, 0x2E] -_08079B74: - pop {r0} - bx r0 - .align 2, 0 -_08079B78: .4byte 0x0000ffe0 - thumb_func_end sub_8079AD8 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_83F5738.s b/data/data_83F5738.s index a466ffd45..dc09b0532 100644 --- a/data/data_83F5738.s +++ b/data/data_83F5738.s @@ -133,128 +133,7 @@ gUnknown_83F846D:: @ 83F846D gUnknown_83F847D:: @ 83F847D .incbin "baserom.gba", 0x3F847D, 0x323 -gUnknown_83F87A0:: @ 83F87A0 - .incbin "baserom.gba", 0x3F87A0, 0x580 - -gUnknown_83F8D20:: @ 83F8D20 - .incbin "baserom.gba", 0x3F8D20, 0x240 - -gUnknown_83F8F60:: @ 83F8F60 - .incbin "baserom.gba", 0x3F8F60, 0x11E0 - -gUnknown_83FA140:: @ 83FA140 - .incbin "baserom.gba", 0x3FA140, 0x1E0 - -gUnknown_83FA320:: @ 83FA320 - .incbin "baserom.gba", 0x3FA320, 0x48 - -gUnknown_83FA368:: @ 83FA368 - .incbin "baserom.gba", 0x3FA368, 0x48 - -gUnknown_83FA3B0:: @ 83FA3B0 - .incbin "baserom.gba", 0x3FA3B0, 0x10 - -gUnknown_83FA3C0:: @ 83FA3C0 - .incbin "baserom.gba", 0x3FA3C0, 0xC - -gUnknown_83FA3CC:: @ 83FA3CC - .incbin "baserom.gba", 0x3FA3CC, 0x8 - -gUnknown_83FA3D4:: @ 83FA3D4 - .incbin "baserom.gba", 0x3FA3D4, 0x8 - -gUnknown_83FA3DC:: @ 83FA3DC - .incbin "baserom.gba", 0x3FA3DC, 0x18 - -gUnknown_83FA3F4:: @ 83FA3F4 - .incbin "baserom.gba", 0x3FA3F4, 0xC - -gUnknown_83FA400:: @ 83FA400 - .incbin "baserom.gba", 0x3FA400, 0x4 - -gUnknown_83FA404:: @ 83FA404 - .incbin "baserom.gba", 0x3FA404, 0xA - -gUnknown_83FA40E:: @ 83FA40E - .incbin "baserom.gba", 0x3FA40E, 0x6 - -gUnknown_83FA414:: @ 83FA414 - .incbin "baserom.gba", 0x3FA414, 0x1C - -gUnknown_83FA430:: @ 83FA430 - .incbin "baserom.gba", 0x3FA430, 0x8 - -gUnknown_83FA438:: @ 83FA438 - .incbin "baserom.gba", 0x3FA438, 0xC - -gUnknown_83FA444:: @ 83FA444 - .incbin "baserom.gba", 0x3FA444, 0x20 - -gUnknown_83FA464:: @ 83FA464 - .incbin "baserom.gba", 0x3FA464, 0x8 - -gUnknown_83FA46C:: @ 83FA46C - .incbin "baserom.gba", 0x3FA46C, 0x28 - -gUnknown_83FA494:: @ 83FA494 - .incbin "baserom.gba", 0x3FA494, 0x6 - -gUnknown_83FA49A:: @ 83FA49A - .incbin "baserom.gba", 0x3FA49A, 0x14 - -gUnknown_83FA4AE:: @ 83FA4AE - .incbin "baserom.gba", 0x3FA4AE, 0x16 - -gUnknown_83FA4C4:: @ 83FA4C4 - .incbin "baserom.gba", 0x3FA4C4, 0x1C - -gUnknown_83FA4E0:: @ 83FA4E0 - .incbin "baserom.gba", 0x3FA4E0, 0x4 - -gUnknown_83FA4E4:: @ 83FA4E4 - .incbin "baserom.gba", 0x3FA4E4, 0x4 - -gUnknown_83FA4E8:: @ 83FA4E8 - .incbin "baserom.gba", 0x3FA4E8, 0xC - -gUnknown_83FA4F4:: @ 83FA4F4 - .incbin "baserom.gba", 0x3FA4F4, 0x14 - -gUnknown_83FA508:: @ 83FA508 - .incbin "baserom.gba", 0x3FA508, 0xC - -gUnknown_83FA514:: @ 83FA514 - .incbin "baserom.gba", 0x3FA514, 0xC - -gUnknown_83FA520:: @ 83FA520 - .incbin "baserom.gba", 0x3FA520, 0x14 - -gUnknown_83FA534:: @ 83FA534 - .incbin "baserom.gba", 0x3FA534, 0x46 - -gUnknown_83FA57A:: @ 83FA57A - .incbin "baserom.gba", 0x3FA57A, 0xE - -gUnknown_83FA588:: @ 83FA588 - .incbin "baserom.gba", 0x3FA588, 0x44 - -gUnknown_83FA5CC:: @ 83FA5CC - .incbin "baserom.gba", 0x3FA5CC, 0x6C - -gUnknown_83FA638:: @ 83FA638 - .incbin "baserom.gba", 0x3FA638, 0x108 - -gUnknown_83FA740:: @ 83FA740 - .incbin "baserom.gba", 0x3FA740, 0x14 - -gUnknown_83FA754:: @ 83FA754 - .incbin "baserom.gba", 0x3FA754, 0x30 - -gUnknown_83FA784:: @ 83FA784 - .incbin "baserom.gba", 0x3FA784, 0x4B0 - -gUnknown_83FAC34:: @ 83FAC34 - .incbin "baserom.gba", 0x3FAC34, 0x500 + .section .rodata.83FB134 gUnknown_83FB134:: @ 83FB134 .incbin "baserom.gba", 0x3FB134, 0xA80 diff --git a/data/field_map_obj.s b/data/field_map_obj.s index d12de7aa9..72d20cd4e 100644 --- a/data/field_map_obj.s +++ b/data/field_map_obj.s @@ -31,7 +31,13 @@ gUnknown_83A0010:: @ 83A0010 .incbin "baserom.gba", 0x3A0010, 0x3688 gUnknown_83A3698:: @ 83A3698 - .incbin "baserom.gba", 0x3A3698, 0x1AC0 + .incbin "baserom.gba", 0x3A3698, 0x80 + +gEventObjectBaseOam_32x32:: @ 83A3718 + .incbin "baserom.gba", 0x3A3718, 0x8 + +gUnknown_83A3720:: @ 83A3720 + .incbin "baserom.gba", 0x3A3720, 0x1a38 gUnknown_83A5158:: @ 83A5158 .incbin "baserom.gba", 0x3A5158, 0xB0 diff --git a/data/field_weather.s b/data/field_weather.s index a25e44344..517480d9a 100644 --- a/data/field_weather.s +++ b/data/field_weather.s @@ -1,6 +1,9 @@ .section .rodata .align 2 +gUnknown_83BFBE4:: @ 83BFBE4 + .incbin "baserom.gba", 0x3BFBE4, 0x2FD8 + gUnknown_83C2BBC:: @ 83C2BBC .incbin "baserom.gba", 0x3C2BBC, 0x4 diff --git a/data/graphics.s b/data/graphics.s index 83d14001d..4b00c1c4b 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -16352,38 +16352,39 @@ gUnknown_8EAAB98:: @ 8EAAB98 gUnknown_8EAB30C:: @ 8EAB30C .incbin "baserom.gba", 0xEAB30C, 0x3B8 -gUnknown_8EAB6C4:: @ 8EAB6C4 - .incbin "baserom.gba", 0xEAB6C4, 0x200 @UNKNOWN + @ title_screen +gGraphics_TitleScreen_PokemonFireRedLogoPals:: @ 8EAB6C4 + .incbin "graphics/title_screen/unk_8eab6c4.gbapal" -gUnknown_8EAB8C4:: @ 8EAB8C4 - .incbin "baserom.gba", 0xEAB8C4, 0x1ACC +gGraphics_TitleScreen_PokemonFireRedLogoTiles:: @ 8EAB8C4 + .incbin "graphics/title_screen/unk_8eab8c4.8bpp.lz" -gUnknown_8EAD390:: @ 8EAD390 - .incbin "baserom.gba", 0xEAD390, 0x258 +gGraphics_TitleScreen_PokemonFireRedLogoMap:: @ 8EAD390 + .incbin "graphics/title_screen/unk_8ead390.bin.lz" -gUnknown_8EAD5E8:: @ 8EAD5E8 - .incbin "baserom.gba", 0xEAD5E8, 0x20 @UNKNOWN +gGraphics_TitleScreen_CharizardPals:: @ 8EAD5E8 + .incbin "graphics/title_screen/unk_8ead5e8.gbapal" -gUnknown_8EAD608:: @ 8EAD608 - .incbin "baserom.gba", 0xEAD608, 0x8DC +gGraphics_TitleScreen_CharizardTiles:: @ 8EAD608 + .incbin "graphics/title_screen/unk_8ead608.4bpp.lz" -gUnknown_8EADEE4:: @ 8EADEE4 - .incbin "baserom.gba", 0xEADEE4, 0x1B0 +gGraphics_TitleScreen_CharizardMap:: @ 8EADEE4 + .incbin "graphics/title_screen/unk_8eadee4.bin.lz" -gUnknown_8EAE094:: @ 8EAE094 - .incbin "baserom.gba", 0xEAE094, 0x20 @UNKNOWN +gGraphics_TitleScreen_BackgroundPals:: @ 8EAE094 + .incbin "graphics/title_screen/unk_8eae094.gbapal" -gUnknown_8EAE0B4:: @ 8EAE0B4 - .incbin "baserom.gba", 0xEAE0B4, 0x2C0 +gGraphics_TitleScreen_CopyrightPressStartTiles:: @ 8EAE0B4 + .incbin "graphics/title_screen/unk_8eae0b4.4bpp.lz" -gUnknown_8EAE374:: @ 8EAE374 - .incbin "baserom.gba", 0xEAE374, 0x114 +gGraphics_TitleScreen_CopyrightPressStartMap:: @ 8EAE374 + .incbin "graphics/title_screen/unk_8eae374.bin.lz" -gUnknown_8EAE488:: @ 8EAE488 - .incbin "baserom.gba", 0xEAE488, 0x20 @UNKNOWN +gGraphics_TitleScreen_FirePals:: @ 8EAE488 + .incbin "graphics/title_screen/unk_8eae488.gbapal" -gUnknown_8EAE4A8:: @ 8EAE4A8 - .incbin "baserom.gba", 0xEAE4A8, 0x80 +gGraphics_TitleScreen_BlankObjTiles:: @ 8EAE4A8 + .incbin "graphics/title_screen/unk_8eae4a8.4bpp.lz" gUnknown_8EAE528:: @ 8EAE528 .incbin "baserom.gba", 0xEAE528, 0x20 @UNKNOWN diff --git a/data/graphics/title_screen/unk_83BF58C.png b/data/graphics/title_screen/unk_83BF58C.png Binary files differnew file mode 100644 index 000000000..895457c3c --- /dev/null +++ b/data/graphics/title_screen/unk_83BF58C.png diff --git a/data/graphics/title_screen/unk_83BF5A8.bin b/data/graphics/title_screen/unk_83BF5A8.bin new file mode 100644 index 000000000..375fbeb7a --- /dev/null +++ b/data/graphics/title_screen/unk_83BF5A8.bin @@ -0,0 +1 @@ +àààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààà
\ No newline at end of file diff --git a/data/graphics/title_screen/unk_83bf64c.png b/data/graphics/title_screen/unk_83bf64c.png Binary files differnew file mode 100644 index 000000000..260e00a01 --- /dev/null +++ b/data/graphics/title_screen/unk_83bf64c.png diff --git a/data/graphics/title_screen/unk_83bf77c.pal b/data/graphics/title_screen/unk_83bf77c.pal new file mode 100644 index 000000000..815547f37 --- /dev/null +++ b/data/graphics/title_screen/unk_83bf77c.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +82 205 180 +0 0 0 +255 255 189 +255 246 139 +255 213 65 +255 172 0 +197 164 49 +115 180 139 +98 189 156 +90 197 164 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +82 205 180 diff --git a/data/graphics/title_screen/unk_83bf79c.png b/data/graphics/title_screen/unk_83bf79c.png Binary files differnew file mode 100644 index 000000000..66a57a899 --- /dev/null +++ b/data/graphics/title_screen/unk_83bf79c.png diff --git a/data/graphics/title_screen/unk_83bfa14.png b/data/graphics/title_screen/unk_83bfa14.png Binary files differnew file mode 100644 index 000000000..f4f030a5b --- /dev/null +++ b/data/graphics/title_screen/unk_83bfa14.png diff --git a/data/slot_machine.s b/data/slot_machine.s deleted file mode 100644 index dac396602..000000000 --- a/data/slot_machine.s +++ /dev/null @@ -1,94 +0,0 @@ - .section .rodata - .align 2 -gUnknown_8464890:: @ 8464890 - .incbin "baserom.gba", 0x464890, 0x1E - -gUnknown_84648AE:: @ 84648AE - .incbin "baserom.gba", 0x4648AE, 0xF - -gUnknown_84648BD:: @ 84648BD - .incbin "baserom.gba", 0x4648BD, 0x15 - -gUnknown_84648D2:: @ 84648D2 - .incbin "baserom.gba", 0x4648D2, 0x54 - -gUnknown_8464926:: @ 8464926 - .incbin "baserom.gba", 0x464926, 0x40 - -gUnknown_8464966:: @ 8464966 - .incbin "baserom.gba", 0x464966, 0xC4A - -gUnknown_84655B0:: @ 84655B0 - .incbin "baserom.gba", 0x4655B0, 0x18 - -gUnknown_84655C8:: @ 84655C8 - .incbin "baserom.gba", 0x4655C8, 0x40 - -gUnknown_8465608:: @ 8465608 - .incbin "baserom.gba", 0x465608, 0xE - -gUnknown_8465616:: @ 8465616 - .incbin "baserom.gba", 0x465616, 0xC0 - -gUnknown_84656D6:: @ 84656D6 - .incbin "baserom.gba", 0x4656D6, 0x10E - -gUnknown_84657E4:: @ 84657E4 - .incbin "baserom.gba", 0x4657E4, 0x98 - -gUnknown_846587C:: @ 846587C - .incbin "baserom.gba", 0x46587C, 0x5C - -gUnknown_84658D8:: @ 84658D8 - .incbin "baserom.gba", 0x4658D8, 0x18 - -gUnknown_84658F0:: @ 84658F0 - .incbin "baserom.gba", 0x4658F0, 0x40 - -gUnknown_8465930:: @ 8465930 - .incbin "baserom.gba", 0x465930, 0x20 - -gUnknown_8465950:: @ 8465950 - .incbin "baserom.gba", 0x465950, 0x80 - -gUnknown_84659D0:: @ 84659D0 - .incbin "baserom.gba", 0x4659D0, 0x804 - -gUnknown_84661D4:: @ 84661D4 - .incbin "baserom.gba", 0x4661D4, 0x2E8 - -gUnknown_84664BC:: @ 84664BC - .incbin "baserom.gba", 0x4664BC, 0x20 - -gUnknown_84664DC:: @ 84664DC - .incbin "baserom.gba", 0x4664DC, 0x60 - -gUnknown_846653C:: @ 846653C - .incbin "baserom.gba", 0x46653C, 0x84 - -gUnknown_84665C0:: @ 84665C0 - .incbin "baserom.gba", 0x4665C0, 0x60 - -gUnknown_8466620:: @ 8466620 - .incbin "baserom.gba", 0x466620, 0x378 - -gUnknown_8466998:: @ 8466998 - .incbin "baserom.gba", 0x466998, 0x178 - -gUnknown_8466B10:: @ 8466B10 - .incbin "baserom.gba", 0x466B10, 0x10 - -gUnknown_8466B20:: @ 8466B20 - .incbin "baserom.gba", 0x466B20, 0xEC - -gUnknown_8466C0C:: @ 8466C0C - .incbin "baserom.gba", 0x466C0C, 0x28 - -gUnknown_8466C34:: @ 8466C34 - .incbin "baserom.gba", 0x466C34, 0x4 - -gUnknown_8466C38:: @ 8466C38 - .incbin "baserom.gba", 0x466C38, 0x8 - -gUnknown_8466C40:: @ 8466C40 - .incbin "baserom.gba", 0x466C40, 0x18 diff --git a/data/strings.s b/data/strings.s index e1804aae0..4f6b40d85 100644 --- a/data/strings.s +++ b/data/strings.s @@ -3067,13 +3067,13 @@ gText_HatchedFromEgg:: @ 841B6FD gText_NickHatchPrompt:: @ 841B716 .string "Would you like to nickname the newly\nhatched {STR_VAR_1}?$" -gUnknown_841B747:: @ 841B747 +gString_OutOfCoins:: @ 841B747 .string "You've run out of COINS.\nGame over!$" -gUnknown_841B76B:: @ 841B76B +gString_QuitPlaying:: @ 841B76B .string "Quit playing?$" -gUnknown_841B779:: @ 841B779 +gString_SlotMachineControls:: @ 841B779 .string "{KEYGFX_DPAD_LEFT_RIGHT}COMBOS {KEYGFX_DPAD_DOWN}WAGER {KEYGFX_A_BUTTON}STOP {KEYGFX_B_BUTTON}EXIT$" gUnknown_841B798:: @ 0x841B798 diff --git a/data/title_screen.s b/data/title_screen.s deleted file mode 100644 index 93d0f2f83..000000000 --- a/data/title_screen.s +++ /dev/null @@ -1,34 +0,0 @@ - .section .rodata - .align 2 -gUnknown_83BF58C:: @ 83BF58C - .incbin "baserom.gba", 0x3BF58C, 0x1C - -gUnknown_83BF5A8:: @ 83BF5A8 - .incbin "baserom.gba", 0x3BF5A8, 0x55C - -gUnknown_83BFB04:: @ 83BFB04 - .incbin "baserom.gba", 0x3BFB04, 0x18 - -gUnknown_83BFB1C:: @ 83BFB1C - .incbin "baserom.gba", 0x3BFB1C, 0x20 - -gUnknown_83BFB3C:: @ 83BFB3C - .incbin "baserom.gba", 0x3BFB3C, 0x20 - -gUnknown_83BFB5C:: @ 83BFB5C - .incbin "baserom.gba", 0x3BFB5C, 0x18 - -gUnknown_83BFB74:: @ 83BFB74 - .incbin "baserom.gba", 0x3BFB74, 0x10 - -gUnknown_83BFB84:: @ 83BFB84 - .incbin "baserom.gba", 0x3BFB84, 0x18 - -gUnknown_83BFB9C:: @ 83BFB9C - .incbin "baserom.gba", 0x3BFB9C, 0x20 - -gUnknown_83BFBBC:: @ 83BFBBC - .incbin "baserom.gba", 0x3BFBBC, 0x18 - -gUnknown_83BFBD4:: @ 83BFBD4 - .incbin "baserom.gba", 0x3BFBD4, 0x2FE8 diff --git a/graphics/battle_transitions/agatha_bg.pal b/graphics/battle_transitions/agatha_bg.pal new file mode 100644 index 000000000..4aac79fec --- /dev/null +++ b/graphics/battle_transitions/agatha_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 49 49 +115 115 115 +148 148 148 +180 180 180 +213 213 213 +255 82 172 +255 98 189 +255 115 205 +255 131 222 +255 148 238 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_transitions/big_pokeball_tilemap.bin b/graphics/battle_transitions/big_pokeball_tilemap.bin Binary files differnew file mode 100644 index 000000000..691e16ef7 --- /dev/null +++ b/graphics/battle_transitions/big_pokeball_tilemap.bin diff --git a/graphics/battle_transitions/big_pokeball_tileset.png b/graphics/battle_transitions/big_pokeball_tileset.png Binary files differnew file mode 100644 index 000000000..21b227441 --- /dev/null +++ b/graphics/battle_transitions/big_pokeball_tileset.png diff --git a/graphics/battle_transitions/blue_bg.pal b/graphics/battle_transitions/blue_bg.pal new file mode 100644 index 000000000..30da9c5f9 --- /dev/null +++ b/graphics/battle_transitions/blue_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 49 49 +115 115 115 +148 148 148 +180 180 180 +213 213 213 +197 197 65 +213 213 82 +230 230 98 +246 246 115 +255 255 131 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_transitions/bruno_bg.pal b/graphics/battle_transitions/bruno_bg.pal new file mode 100644 index 000000000..b55e6a6cd --- /dev/null +++ b/graphics/battle_transitions/bruno_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 49 49 +115 115 115 +148 148 148 +180 180 180 +213 213 213 +8 213 8 +32 238 32 +49 246 49 +74 255 74 +123 255 123 +230 123 139 +246 139 156 +255 156 172 +255 172 189 +255 189 205 +230 123 139 diff --git a/graphics/battle_transitions/green_bg.pal b/graphics/battle_transitions/green_bg.pal new file mode 100644 index 000000000..8ebd38309 --- /dev/null +++ b/graphics/battle_transitions/green_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 123 139 +246 139 156 +255 156 172 +255 172 189 +255 189 205 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_transitions/grid_square_tileset.png b/graphics/battle_transitions/grid_square_tileset.png Binary files differnew file mode 100644 index 000000000..fb8a9e6fd --- /dev/null +++ b/graphics/battle_transitions/grid_square_tileset.png diff --git a/graphics/battle_transitions/lance_bg.pal b/graphics/battle_transitions/lance_bg.pal new file mode 100644 index 000000000..6717a90bd --- /dev/null +++ b/graphics/battle_transitions/lance_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 49 49 +115 115 115 +148 148 148 +180 180 180 +213 213 213 +0 0 131 +16 16 148 +32 32 164 +49 49 180 +65 65 197 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_transitions/lorelei_bg.pal b/graphics/battle_transitions/lorelei_bg.pal new file mode 100644 index 000000000..1f30ed062 --- /dev/null +++ b/graphics/battle_transitions/lorelei_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 49 49 +115 115 115 +148 148 148 +180 180 180 +213 213 213 +189 0 189 +205 16 205 +222 32 222 +238 49 238 +255 65 255 +106 180 213 +123 197 230 +139 213 246 +156 230 255 +172 246 255 +255 255 255 diff --git a/graphics/battle_transitions/red_bg.pal b/graphics/battle_transitions/red_bg.pal new file mode 100644 index 000000000..e43b0f74c --- /dev/null +++ b/graphics/battle_transitions/red_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +106 180 213 +123 197 230 +139 213 246 +156 230 255 +172 246 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_transitions/sliding_pokeball.pal b/graphics/battle_transitions/sliding_pokeball.pal new file mode 100644 index 000000000..6190709ed --- /dev/null +++ b/graphics/battle_transitions/sliding_pokeball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 172 238 +246 8 0 +238 213 180 +222 180 148 +255 255 255 +222 230 238 +189 205 230 +156 180 222 +98 156 180 +148 0 0 +197 197 197 +238 230 164 +222 205 131 +213 180 106 +205 156 82 +0 0 0 diff --git a/graphics/battle_transitions/sliding_pokeball.png b/graphics/battle_transitions/sliding_pokeball.png Binary files differnew file mode 100644 index 000000000..3802a915b --- /dev/null +++ b/graphics/battle_transitions/sliding_pokeball.png diff --git a/graphics/battle_transitions/sliding_pokeball_tilemap.bin b/graphics/battle_transitions/sliding_pokeball_tilemap.bin Binary files differnew file mode 100644 index 000000000..6cdeb0d17 --- /dev/null +++ b/graphics/battle_transitions/sliding_pokeball_tilemap.bin diff --git a/graphics/battle_transitions/unused_brendan.png b/graphics/battle_transitions/unused_brendan.png Binary files differnew file mode 100644 index 000000000..926ba0ff7 --- /dev/null +++ b/graphics/battle_transitions/unused_brendan.png diff --git a/graphics/battle_transitions/unused_lass.png b/graphics/battle_transitions/unused_lass.png Binary files differnew file mode 100644 index 000000000..378fa3c19 --- /dev/null +++ b/graphics/battle_transitions/unused_lass.png diff --git a/graphics/battle_transitions/unused_trainer.pal b/graphics/battle_transitions/unused_trainer.pal new file mode 100644 index 000000000..ad94d728a --- /dev/null +++ b/graphics/battle_transitions/unused_trainer.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +255 222 205 +222 164 148 +205 131 115 +123 90 82 +57 74 123 +41 57 98 +24 41 82 +16 32 57 +222 230 238 +255 197 90 +189 156 90 +255 98 90 +197 65 65 +255 255 255 +0 0 0 diff --git a/graphics/battle_transitions/vsbar_tilemap.bin b/graphics/battle_transitions/vsbar_tilemap.bin Binary files differnew file mode 100644 index 000000000..4f170b470 --- /dev/null +++ b/graphics/battle_transitions/vsbar_tilemap.bin diff --git a/graphics/battle_transitions/vsbar_tileset.png b/graphics/battle_transitions/vsbar_tileset.png Binary files differnew file mode 100644 index 000000000..1d327cdaf --- /dev/null +++ b/graphics/battle_transitions/vsbar_tileset.png diff --git a/graphics/slot_machine/unk_8464974.pal b/graphics/slot_machine/unk_8464974.pal new file mode 100644 index 000000000..6bc8bed9a --- /dev/null +++ b/graphics/slot_machine/unk_8464974.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +65 65 65 +255 246 0 +255 172 0 +246 246 255 +255 246 213 +246 213 156 +238 222 0 +98 98 98 +131 98 41 +255 106 0 +222 57 0 +213 180 0 +222 222 230 +0 0 0 +0 0 0 diff --git a/graphics/slot_machine/unk_8464994.pal b/graphics/slot_machine/unk_8464994.pal new file mode 100644 index 000000000..8dee9dd3e --- /dev/null +++ b/graphics/slot_machine/unk_8464994.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +123 255 255 +65 65 65 +246 246 255 +246 74 0 +205 65 0 +255 205 189 +222 222 230 +0 0 0 +255 238 238 +164 32 0 +205 123 24 +255 222 115 +123 82 0 +255 246 0 +230 205 0 +164 123 41 diff --git a/graphics/slot_machine/unk_84649b4.pal b/graphics/slot_machine/unk_84649b4.pal new file mode 100644 index 000000000..d54cfc65f --- /dev/null +++ b/graphics/slot_machine/unk_84649b4.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 255 139 +65 65 65 +255 0 0 +255 255 255 +255 131 0 +255 205 0 +0 0 255 +0 131 255 +0 205 255 +156 238 74 +205 205 230 +222 0 0 +0 156 0 +131 131 148 +164 164 189 +180 0 0 diff --git a/graphics/slot_machine/unk_84649d4.pal b/graphics/slot_machine/unk_84649d4.pal new file mode 100644 index 000000000..d06616c5d --- /dev/null +++ b/graphics/slot_machine/unk_84649d4.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 156 230 +57 65 65 +255 246 213 +246 213 123 +255 205 172 +255 172 115 +172 156 90 +246 246 255 +213 98 41 +222 222 230 +148 148 156 +238 172 255 +246 131 180 +197 74 106 +148 74 197 +205 131 255 diff --git a/graphics/slot_machine/unk_84649f4.pal b/graphics/slot_machine/unk_84649f4.pal new file mode 100644 index 000000000..ef5e9a7ae --- /dev/null +++ b/graphics/slot_machine/unk_84649f4.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 230 115 +57 65 65 +106 115 115 +197 205 205 +230 238 238 +246 246 255 +164 172 172 +255 90 65 +65 90 255 +189 213 255 +255 213 189 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/slot_machine/unk_8464a14.png b/graphics/slot_machine/unk_8464a14.png Binary files differnew file mode 100644 index 000000000..be8dfb6e8 --- /dev/null +++ b/graphics/slot_machine/unk_8464a14.png diff --git a/graphics/slot_machine/unk_846504c.pal b/graphics/slot_machine/unk_846504c.pal new file mode 100644 index 000000000..9a5bab429 --- /dev/null +++ b/graphics/slot_machine/unk_846504c.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +238 172 0 +156 115 115 +246 205 205 +123 90 90 +222 164 164 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +222 123 32 +255 205 32 +205 90 0 diff --git a/graphics/slot_machine/unk_846506c.png b/graphics/slot_machine/unk_846506c.png Binary files differnew file mode 100644 index 000000000..1fe951e50 --- /dev/null +++ b/graphics/slot_machine/unk_846506c.png diff --git a/graphics/slot_machine/unk_8465524.pal b/graphics/slot_machine/unk_8465524.pal new file mode 100644 index 000000000..b8cf64bae --- /dev/null +++ b/graphics/slot_machine/unk_8465524.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +98 98 90 +255 255 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 0 diff --git a/graphics/slot_machine/unk_8465544.png b/graphics/slot_machine/unk_8465544.png Binary files differnew file mode 100644 index 000000000..0e3154f61 --- /dev/null +++ b/graphics/slot_machine/unk_8465544.png diff --git a/graphics/slot_machine/unk_8465930.pal b/graphics/slot_machine/unk_8465930.pal new file mode 100644 index 000000000..f2c377a3f --- /dev/null +++ b/graphics/slot_machine/unk_8465930.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +57 57 49 +230 230 230 +255 255 255 +238 172 0 +197 74 24 +205 90 0 +255 205 32 +222 123 32 +255 164 41 +57 148 255 +164 222 255 +0 49 123 +139 0 0 +98 98 90 +0 0 0 diff --git a/graphics/slot_machine/unk_8465950.pal b/graphics/slot_machine/unk_8465950.pal new file mode 100644 index 000000000..634aa770d --- /dev/null +++ b/graphics/slot_machine/unk_8465950.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +238 172 0 +255 90 0 +222 41 0 +255 90 0 +222 41 0 +255 90 0 +222 41 0 +255 90 0 +222 41 0 +255 90 0 +222 41 0 +255 205 32 +156 0 0 +0 0 0 diff --git a/graphics/slot_machine/unk_8465970.pal b/graphics/slot_machine/unk_8465970.pal new file mode 100644 index 000000000..1d932206e --- /dev/null +++ b/graphics/slot_machine/unk_8465970.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +74 74 213 +115 172 255 +115 164 74 +156 238 74 +255 90 0 +255 164 41 +255 238 32 +222 41 0 +189 189 189 +156 156 156 +123 123 123 +90 90 90 +65 65 65 +0 0 0 diff --git a/graphics/slot_machine/unk_8465990.pal b/graphics/slot_machine/unk_8465990.pal new file mode 100644 index 000000000..2c2b3d843 --- /dev/null +++ b/graphics/slot_machine/unk_8465990.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +238 172 0 +172 106 106 +222 156 156 +148 82 82 +197 131 131 +8 123 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +222 123 32 +255 205 32 +205 90 0 diff --git a/graphics/slot_machine/unk_84659b0.pal b/graphics/slot_machine/unk_84659b0.pal new file mode 100644 index 000000000..742063525 --- /dev/null +++ b/graphics/slot_machine/unk_84659b0.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +213 57 0 +205 90 0 +255 255 255 +238 172 0 +0 0 197 +180 65 0 +180 65 0 +0 106 0 +0 106 0 +82 123 255 +246 156 0 +246 156 0 +41 180 82 +41 180 82 +0 0 0 diff --git a/graphics/slot_machine/unk_84659d0.png b/graphics/slot_machine/unk_84659d0.png Binary files differnew file mode 100644 index 000000000..5223d0d3f --- /dev/null +++ b/graphics/slot_machine/unk_84659d0.png diff --git a/graphics/slot_machine/unk_84661d4.bin b/graphics/slot_machine/unk_84661d4.bin Binary files differnew file mode 100644 index 000000000..23182cba7 --- /dev/null +++ b/graphics/slot_machine/unk_84661d4.bin diff --git a/graphics/slot_machine/unk_84664bc.pal b/graphics/slot_machine/unk_84664bc.pal new file mode 100644 index 000000000..87103918b --- /dev/null +++ b/graphics/slot_machine/unk_84664bc.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +213 57 0 +205 90 0 +255 255 255 +238 172 0 +0 164 238 +238 131 0 +238 131 0 +0 222 0 +0 222 0 +139 255 255 +255 238 106 +255 238 106 +148 255 148 +148 255 148 +0 0 0 diff --git a/graphics/slot_machine/unk_84664dc.pal b/graphics/slot_machine/unk_84664dc.pal new file mode 100644 index 000000000..12dfa2b28 --- /dev/null +++ b/graphics/slot_machine/unk_84664dc.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +238 172 0 +255 255 131 +255 180 65 +255 255 255 +255 255 131 +255 255 131 +255 180 65 +255 180 65 +255 90 0 +255 90 0 +222 41 0 +255 205 32 +156 0 0 +0 0 0 diff --git a/graphics/slot_machine/unk_84664fc.pal b/graphics/slot_machine/unk_84664fc.pal new file mode 100644 index 000000000..fe26d000a --- /dev/null +++ b/graphics/slot_machine/unk_84664fc.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +238 172 0 +255 180 65 +255 90 0 +255 255 131 +255 180 65 +255 255 255 +255 255 131 +255 255 131 +255 180 65 +255 180 65 +255 90 0 +255 205 32 +156 0 0 +0 0 0 diff --git a/graphics/slot_machine/unk_846651c.pal b/graphics/slot_machine/unk_846651c.pal new file mode 100644 index 000000000..339886b3b --- /dev/null +++ b/graphics/slot_machine/unk_846651c.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +238 172 0 +255 90 0 +222 41 0 +255 180 65 +255 90 0 +255 255 131 +255 180 65 +255 255 255 +255 255 131 +255 255 131 +255 180 65 +255 205 32 +156 0 0 +0 0 0 diff --git a/graphics/slot_machine/unk_846653c.png b/graphics/slot_machine/unk_846653c.png Binary files differnew file mode 100644 index 000000000..4fb62b7a3 --- /dev/null +++ b/graphics/slot_machine/unk_846653c.png diff --git a/graphics/slot_machine/unk_84665c0.pal b/graphics/slot_machine/unk_84665c0.pal new file mode 100644 index 000000000..362860109 --- /dev/null +++ b/graphics/slot_machine/unk_84665c0.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 189 230 +65 65 65 +255 255 255 +139 238 255 +172 255 255 +106 205 222 +246 222 123 +255 230 180 +213 189 90 +222 49 0 +255 238 0 +246 205 115 +213 156 41 +246 49 0 +222 255 205 +255 230 230 diff --git a/graphics/slot_machine/unk_84665e0.pal b/graphics/slot_machine/unk_84665e0.pal new file mode 100644 index 000000000..758d58497 --- /dev/null +++ b/graphics/slot_machine/unk_84665e0.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 255 255 +65 65 65 +246 246 246 +255 82 82 +49 180 255 +65 213 255 +255 156 82 +0 156 0 +156 238 74 +164 164 189 +255 238 0 +255 246 164 +197 164 57 +238 222 0 +222 255 205 +255 230 230 diff --git a/graphics/slot_machine/unk_8466600.pal b/graphics/slot_machine/unk_8466600.pal new file mode 100644 index 000000000..bf0a84def --- /dev/null +++ b/graphics/slot_machine/unk_8466600.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 255 255 +65 65 65 +246 246 246 +123 131 131 +197 205 205 +255 139 115 +90 123 255 +213 131 255 +148 74 197 +189 90 65 +255 180 172 +246 230 106 +246 74 0 +197 255 255 +222 255 205 +255 230 230 diff --git a/graphics/slot_machine/unk_8466620.png b/graphics/slot_machine/unk_8466620.png Binary files differnew file mode 100644 index 000000000..73b5d1046 --- /dev/null +++ b/graphics/slot_machine/unk_8466620.png diff --git a/graphics/slot_machine/unk_8466998.bin b/graphics/slot_machine/unk_8466998.bin Binary files differnew file mode 100644 index 000000000..d7dc278da --- /dev/null +++ b/graphics/slot_machine/unk_8466998.bin diff --git a/graphics/title_screen/unk_8eab6c4.pal b/graphics/title_screen/unk_8eab6c4.pal new file mode 100644 index 000000000..48c794761 --- /dev/null +++ b/graphics/title_screen/unk_8eab6c4.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 255 41 +0 0 0 +255 238 16 +246 222 41 +246 238 246 +255 246 24 +246 246 41 +246 246 246 +246 255 255 +255 246 255 +32 0 255 +106 65 156 +32 0 238 +246 222 24 +246 222 32 +255 238 41 +255 238 49 +255 255 16 +255 255 24 +255 255 246 +255 255 255 +123 106 156 +24 41 32 +32 32 74 +32 0 230 +115 82 164 +16 0 246 +106 82 172 +246 238 32 +255 230 24 +246 230 41 +246 238 41 +246 230 49 +246 238 49 +255 246 32 +255 246 41 +255 255 32 +255 255 41 +32 24 32 +32 32 41 +197 156 41 +197 164 41 +156 156 156 +164 164 156 +172 172 172 +180 189 180 +41 0 230 +189 189 189 +197 189 189 +197 197 197 +205 205 213 +8 8 197 +246 230 24 +246 230 32 +255 238 24 +255 238 32 +32 32 32 +32 41 32 +41 32 32 +41 41 32 +49 32 32 +49 41 32 +41 32 41 +49 32 41 +24 41 41 +32 32 90 +16 24 106 +24 32 98 +41 32 82 +41 32 98 +41 41 82 +41 41 98 +0 0 115 +8 8 131 +32 24 115 +32 24 131 +32 41 115 +41 41 115 +32 41 131 +41 41 131 +57 41 41 +57 41 49 +57 49 41 +57 57 57 +65 41 41 +74 41 41 +65 57 57 +74 57 57 +57 74 74 +65 65 74 +82 74 82 +82 57 131 +82 90 82 +90 90 90 +90 98 98 +98 98 106 +115 106 106 +131 98 115 +139 98 106 +139 115 98 +180 139 57 +172 131 65 +156 115 90 +156 131 82 +115 82 139 +123 82 131 +115 98 131 +131 98 123 +115 123 123 +123 123 131 +139 131 139 +148 123 131 +205 172 24 +213 172 16 +205 164 32 +213 172 32 +222 189 24 +230 189 16 +213 189 32 +222 189 32 +230 205 24 +230 205 32 +230 213 32 +238 222 32 +180 148 57 +189 156 49 +180 148 74 +180 172 90 +156 148 123 +139 148 139 +164 148 115 +172 156 106 +197 156 49 +205 180 49 +197 172 90 +205 189 82 +222 205 49 +230 222 49 +205 205 74 +222 213 65 +49 0 230 +213 213 213 +222 230 230 +222 230 230 +255 0 246 +255 0 255 +16 8 197 +16 16 189 +32 16 164 +41 16 164 +32 16 180 +41 16 189 +8 8 205 +8 16 205 +24 8 213 +24 16 205 +41 8 213 +41 16 213 +49 8 213 +57 16 213 +16 8 230 +24 8 230 +24 16 230 +24 24 230 +8 8 246 +8 16 246 +16 8 246 +16 16 246 +32 8 230 +32 16 230 +32 8 238 +32 8 246 +41 8 230 +41 16 230 +49 16 230 +49 8 238 +32 32 156 +24 32 172 +41 41 156 +41 32 164 +74 49 180 +82 49 172 +82 65 164 +90 74 164 +24 32 189 +57 41 189 +41 32 213 +57 32 213 +74 41 189 +90 57 189 +74 49 197 +74 41 205 +49 49 49 +197 197 197 +189 189 189 +156 156 156 +172 172 172 +139 139 139 +115 115 115 +255 255 255 +16 16 16 +98 98 98 +246 246 246 +82 82 82 +230 230 230 +213 213 213 +0 0 0 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/title_screen/unk_8eab8c4.png b/graphics/title_screen/unk_8eab8c4.png Binary files differnew file mode 100644 index 000000000..9d9cd68f1 --- /dev/null +++ b/graphics/title_screen/unk_8eab8c4.png diff --git a/graphics/title_screen/unk_8ead390.bin b/graphics/title_screen/unk_8ead390.bin Binary files differnew file mode 100644 index 000000000..2987c5cfa --- /dev/null +++ b/graphics/title_screen/unk_8ead390.bin diff --git a/graphics/title_screen/unk_8ead5e8.pal b/graphics/title_screen/unk_8ead5e8.pal new file mode 100644 index 000000000..0832e8306 --- /dev/null +++ b/graphics/title_screen/unk_8ead5e8.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 255 +0 0 0 +82 205 180 +255 0 255 +255 0 255 +255 0 255 +32 0 0 +49 0 0 +65 0 0 +90 0 0 +123 32 0 +156 32 0 +180 49 0 +205 65 0 +222 90 0 +230 123 0 diff --git a/graphics/title_screen/unk_8ead608.png b/graphics/title_screen/unk_8ead608.png Binary files differnew file mode 100644 index 000000000..c9a0dc8eb --- /dev/null +++ b/graphics/title_screen/unk_8ead608.png diff --git a/graphics/title_screen/unk_8eadee4.bin b/graphics/title_screen/unk_8eadee4.bin Binary files differnew file mode 100644 index 000000000..0c309689e --- /dev/null +++ b/graphics/title_screen/unk_8eadee4.bin diff --git a/graphics/title_screen/unk_8eae094.pal b/graphics/title_screen/unk_8eae094.pal new file mode 100644 index 000000000..f7f14d45d --- /dev/null +++ b/graphics/title_screen/unk_8eae094.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 139 +0 0 0 +123 123 123 +197 197 197 +222 222 222 +255 255 255 +0 0 0 +123 123 123 +197 197 197 +222 222 222 +255 255 255 +65 180 164 +139 0 0 +172 24 0 +213 57 0 +255 90 0 diff --git a/graphics/title_screen/unk_8eae0b4.png b/graphics/title_screen/unk_8eae0b4.png Binary files differnew file mode 100644 index 000000000..0b4e69015 --- /dev/null +++ b/graphics/title_screen/unk_8eae0b4.png diff --git a/graphics/title_screen/unk_8eae374.bin b/graphics/title_screen/unk_8eae374.bin Binary files differnew file mode 100644 index 000000000..9bab57cc0 --- /dev/null +++ b/graphics/title_screen/unk_8eae374.bin diff --git a/graphics/title_screen/unk_8eae488.pal b/graphics/title_screen/unk_8eae488.pal new file mode 100644 index 000000000..7a29ab72c --- /dev/null +++ b/graphics/title_screen/unk_8eae488.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +82 205 180 +189 197 205 +164 164 172 +123 131 131 +213 213 222 +255 246 74 +255 213 32 +164 131 24 +246 164 24 +131 90 16 +106 98 90 +65 57 41 +230 82 16 +205 41 0 +139 8 8 +246 246 246 diff --git a/graphics/title_screen/unk_8eae4a8.png b/graphics/title_screen/unk_8eae4a8.png Binary files differnew file mode 100644 index 000000000..682c22432 --- /dev/null +++ b/graphics/title_screen/unk_8eae4a8.png diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index dfe15881a..40d04abe7 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -19,9 +19,11 @@ PSSGFXDIR := graphics/pokemon_storage EVENTOBJGFXDIR := graphics/event_objects MISCGFXDIR := graphics/misc TEXTWINDOWGFXDIR := graphics/text_window +SLOTMACHINEGFXDIR := graphics/slot_machine TEACHYTVGFXDIR := graphics/teachy_tv SSANNEGFXDIR := graphics/ss_anne ITEMPCGFXDIR := graphics/item_pc +TITLESCREENGFXDIR := graphics/title_screen types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark contest_types := cool beauty cute smart tough @@ -478,6 +480,12 @@ $(MISCGFXDIR)/unk_846B008.4bpp: %.4bpp: %.png $(TEXTWINDOWGFXDIR)/unk_8470B0C.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 19 +$(SLOTMACHINEGFXDIR)/unk_8466620.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 66 + +$(SLOTMACHINEGFXDIR)/unk_84659d0.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 138 + $(TEACHYTVGFXDIR)/tiles.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 233 @@ -486,3 +494,6 @@ $(SSANNEGFXDIR)/unk_8479A38.4bpp: %.4bpp: %.png $(ITEMPCGFXDIR)/unk_8E85090.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 82 + +$(TITLESCREENGFXDIR)/unk_8ead608.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 135 diff --git a/include/battle_transition.h b/include/battle_transition.h index 91e564790..4ef5f19d9 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -3,8 +3,39 @@ #include "global.h" -void sub_8149DFC(u8 a0); -bool8 sub_80D08F8(void); -void sub_80D08B8(u8 a0); +enum +{ + MUGSHOT_LORELEI, + MUGSHOT_BRUNO, + MUGSHOT_AGATHA, + MUGSHOT_LANCE, + MUGSHOT_BLUE, + MUGSHOTS_COUNT +}; + +#define B_TRANSITION_BLUR 0 +#define B_TRANSITION_DISTORTED_WAVE 1 +#define B_TRANSITION_HORIZONTAL_CORRUGATE 2 +#define B_TRANSITION_BIG_POKEBALL 3 +#define B_TRANSITION_SLIDING_POKEBALLS 4 +#define B_TRANSITION_CLOCKWISE_BLACKFADE 5 +#define B_TRANSITION_FULLSCREEN_WAVE 6 +#define B_TRANSITION_BLACK_WAVE_TO_RIGHT 7 +#define B_TRANSITION_SLICED_SCREEN 8 +#define B_TRANSITION_WHITEFADE_IN_STRIPES 9 +#define B_TRANSITION_GRID_SQUARES 10 +#define B_TRANSITION_BLACK_DOODLES 11 +#define B_TRANSITION_LORELEI 12 +#define B_TRANSITION_BRUNO 13 +#define B_TRANSITION_AGATHA 14 +#define B_TRANSITION_LANCE 15 +#define B_TRANSITION_BLUE 16 +#define B_TRANSITION_ANTI_CLOCKWISE_SPIRAL 17 + +extern const struct SpritePalette sSpritePalette_SlidingPokeball; + +bool8 BT_IsDone(void); +void BT_StartOnField(u8 transitionId); +bool8 FldEff_Pokeball(void); #endif // GUARD_BATTLE_TRANSITION_H diff --git a/include/berry_fix_program.h b/include/berry_fix_program.h new file mode 100644 index 000000000..fc0748fd9 --- /dev/null +++ b/include/berry_fix_program.h @@ -0,0 +1,6 @@ +#ifndef GUARD_BERRY_FIX_PROGRAM_H +#define GUARD_BERRY_FIX_PROGRAM_H + +void mb_berry_fix_serve(void); + +#endif //GUARD_BERRY_FIX_PROGRAM_H diff --git a/include/clear_save_data_screen.h b/include/clear_save_data_screen.h new file mode 100644 index 000000000..d5d2665ae --- /dev/null +++ b/include/clear_save_data_screen.h @@ -0,0 +1,6 @@ +#ifndef GUARD_CLEAR_SAVE_DATA_SCREEN_H +#define GUARD_CLEAR_SAVE_DATA_SCREEN_H + +void CB2_SaveClearScreen_Init(void); + +#endif //GUARD_CLEAR_SAVE_DATA_SCREEN_H diff --git a/include/field_camera.h b/include/field_camera.h index 53d734081..d67523c8f 100644 --- a/include/field_camera.h +++ b/include/field_camera.h @@ -26,5 +26,6 @@ extern u16 gUnknown_03005DE8; void DrawWholeMapView(void); void CurrentMapDrawMetatileAt(int x, int y); +void sub_805A658(s16 *x, s16 *y); #endif //GUARD_FIELD_CAMERA_H diff --git a/include/field_effect.h b/include/field_effect.h index 426f77510..0ab2d0475 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -83,5 +83,7 @@ void sub_80B69DC(void); void CreateTeleportFieldEffectTask(void); void FieldEffectActiveListRemove(u8 id); void sub_8085620(void); +void FieldEffectStop(struct Sprite *sprite, u8 id); +u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer); #endif //GUARD_FIELD_EFFECTS_H diff --git a/include/global.h b/include/global.h index e1f63213a..9a398354d 100644 --- a/include/global.h +++ b/include/global.h @@ -17,7 +17,7 @@ // Get the IDE to stfu // We define it this way to fool preproc. -#define INCBIN(x) {0} +#define INCBIN(...) {0} #define INCBIN_U8 INCBIN #define INCBIN_U16 INCBIN #define INCBIN_U32 INCBIN diff --git a/include/graphics.h b/include/graphics.h index e8503609e..f6c2ddd4a 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -961,4 +961,17 @@ extern const u8 gFile_graphics_items_icon_palettes_sapphire_palette[]; extern const u8 gFile_graphics_items_icons_return_to_field_arrow_sheet[]; extern const u8 gFile_graphics_items_icon_palettes_return_to_field_arrow_palette[]; +// title_screen +extern const u16 gGraphics_TitleScreen_PokemonFireRedLogoPals[]; +extern const u8 gGraphics_TitleScreen_PokemonFireRedLogoTiles[]; +extern const u8 gGraphics_TitleScreen_PokemonFireRedLogoMap[]; +extern const u16 gGraphics_TitleScreen_CharizardPals[]; +extern const u8 gGraphics_TitleScreen_CharizardTiles[]; +extern const u8 gGraphics_TitleScreen_CharizardMap[]; +extern u16 gGraphics_TitleScreen_BackgroundPals[]; // If this is const, title_screen.c does not match +extern const u8 gGraphics_TitleScreen_CopyrightPressStartTiles[]; +extern const u8 gGraphics_TitleScreen_CopyrightPressStartMap[]; +extern const u16 gGraphics_TitleScreen_FirePals[]; +extern const u8 gGraphics_TitleScreen_BlankObjTiles[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/intro.h b/include/intro.h new file mode 100644 index 000000000..f01c81a9e --- /dev/null +++ b/include/intro.h @@ -0,0 +1,6 @@ +#ifndef GUARD_INTRO_H +#define GUARD_INTRO_H + +void sub_80EC864(void); + +#endif //GUARD_INTRO_H diff --git a/include/main.h b/include/main.h index a250475cb..d326909ff 100644 --- a/include/main.h +++ b/include/main.h @@ -65,6 +65,8 @@ void ClearPokemonCrySongs(void); void RestoreSerialTimer3IntrHandlers(void); void SetVBlankCounter1Ptr(u32 *ptr); void DisableVBlankCounter1(void); +void StartTimer1(void); +void SeedRngAndSetTrainerId(void); extern const char RomHeaderGameCode[4]; extern const char RomHeaderSoftwareVersion; diff --git a/include/main_menu.h b/include/main_menu.h new file mode 100644 index 000000000..2a0cd81d5 --- /dev/null +++ b/include/main_menu.h @@ -0,0 +1,6 @@ +#ifndef GUARD_MAIN_MENU_H +#define GUARD_MAIN_MENU_H + +void sub_800C300(void); + +#endif //GUARD_MAIN_MENU_H diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h index d68957e62..7b83c913b 100644 --- a/include/new_menu_helpers.h +++ b/include/new_menu_helpers.h @@ -31,6 +31,7 @@ void DrawDialogueFrame(u8 windowId, bool8 transfer); void DrawStdWindowFrame(u8 windowId, bool8 copyNow); void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram); void ClearStdWindowAndFrame(u8 taskId, bool8 copyNow); +void sub_80F6C14(void); void sub_80F771C(bool8 copyToVram); void SetStdWindowBorderStyle(u8 windowId, bool8 copyToVram); void sub_80F7768(u8 windowId, bool8 copyToVram); diff --git a/include/overworld.h b/include/overworld.h index 9a9657006..7c1f34e41 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -106,6 +106,7 @@ extern bool8 (* gFieldCallback2)(void); void SetLastHealLocationWarp(u8 healLocaionId); void sub_8055864(u8 mapGroup, u8 mapNum); void CB2_Overworld(void); +void CB2_OverworldBasic(void); void CB2_NewGame(void); bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType); void Overworld_ResetStateAfterTeleport(void); diff --git a/include/palette.h b/include/palette.h index 06b9b1f6f..300236d1e 100644 --- a/include/palette.h +++ b/include/palette.h @@ -71,7 +71,11 @@ void BlendPalettes(u32, u8, u16); void BlendPalettesUnfaded(u32, u8, u16); void sub_80716F8(const u16 *, u16 *, u16, u8); void TintPalette_GrayScale(u16 *, u16); +void TintPalette_GrayScale2(u16 *, u16); void TintPalette_SepiaTone(u16 *, u16); +void sub_80717A8(u32, s8, u8, u8, u16, u8, u8); +bool32 sub_807185C(u8); +void sub_8071898(void); extern struct PaletteFadeControl gPaletteFade; diff --git a/include/quest_log.h b/include/quest_log.h index 4fb4fe0fa..858ea593a 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -22,6 +22,7 @@ extern const u16 gUnknown_84566A8[]; void sub_8112720(u8); void sub_8113550(u16, const u16 *); +void sub_811539C(void); void sub_8115748(u16); u8 sub_8112CAC(void); bool8 sub_81119D4(void (*func)(void)); diff --git a/include/slot_machine.h b/include/slot_machine.h index 5c96384fa..37120f66b 100644 --- a/include/slot_machine.h +++ b/include/slot_machine.h @@ -3,6 +3,6 @@ #include "global.h" -void PlaySlotMachine(u8, void *); +void PlaySlotMachine(u16, void (*)(void)); #endif // GUARD_SLOT_MACHINE_H diff --git a/include/strings.h b/include/strings.h index 85b67ed57..97c120ff3 100644 --- a/include/strings.h +++ b/include/strings.h @@ -203,4 +203,9 @@ extern const u8 gString_BattleRecords_ColumnHeaders[]; extern const u8 gString_BattleRecords_7Dashes[]; extern const u8 gString_BattleRecords_4Dashes[]; +// slot_machine +extern const u8 gString_OutOfCoins[]; +extern const u8 gString_QuitPlaying[]; +extern const u8 gString_SlotMachineControls[]; + #endif //GUARD_STRINGS_H diff --git a/include/trainer_pokemon_sprites.h b/include/trainer_pokemon_sprites.h index 3ae75ed0f..2a520715f 100644 --- a/include/trainer_pokemon_sprites.h +++ b/include/trainer_pokemon_sprites.h @@ -1,5 +1,5 @@ -#ifndef GUARD_BATTLE_DOME_CARDS_H -#define GUARD_BATTLE_DOME_CARDS_H +#ifndef GUARD_TRAINER_POKEMON_SPRITES_H +#define GUARD_TRAINER_POKEMON_SPRITES_H #include "global.h" @@ -13,5 +13,6 @@ u16 sub_818D938(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteS u8 sub_818D97C(u8 a0, u8 a1); u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); u16 FreeAndDestroyTrainerPicSprite(u16); +u16 PlayerGenderToFrontTrainerPicId_Debug(u8 gender, bool8 getClass); -#endif //GUARD_BATTLE_DOME_CARDS_H +#endif // GUARD_TRAINER_POKEMON_SPRITES_H diff --git a/ld_script.txt b/ld_script.txt index da6acc739..68a66397d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -115,7 +115,7 @@ SECTIONS { src/task.o(.text); asm/reshow_battle_screen.o(.text); asm/battle_anim_status_effects.o(.text); - asm/title_screen.o(.text); + src/title_screen.o(.text); src/reset_save_heap.o(.text); asm/field_weather.o(.text); asm/field_weather_effects.o(.text); @@ -191,7 +191,7 @@ SECTIONS { asm/evolution_scene.o(.text); src/coins.o(.text); src/fldeff_strength.o(.text); - asm/battle_transition.o(.text); + src/battle_transition.o(.text); asm/battle_controller_link_partner.o(.text); asm/battle_message.o(.text); src/math_util.o(.text); @@ -254,7 +254,7 @@ SECTIONS { asm/berry_pouch.o(.text); asm/itemfinder.o(.text); src/buy_menu_helpers.o(.text); - asm/slot_machine.o(.text); + src/slot_machine.o(.text); src/roamer.o(.text); src/mystery_gift_menu.o(.text); src/mevent.o(.text); @@ -405,7 +405,7 @@ SECTIONS { data/battle_anim.o(.rodata); data/map_events.o(.rodata); data/battle_anim_status_effects.o(.rodata); - data/title_screen.o(.rodata); + src/title_screen.o(.rodata); data/field_weather.o(.rodata); data/data_835B488.o(.rodata); src/item_menu_icons.o(.rodata); @@ -418,6 +418,8 @@ SECTIONS { data/data_83F5738.o(.rodata); src/battle_records.o(.rodata); data/data_83F5738.o(.rodata.83F6C90); + src/battle_transition.o(.rodata); + data/data_83F5738.o(.rodata.83FB134); src/save.o(.rodata); data/data_83FECCC.o(.rodata); src/intro.o(.rodata); @@ -454,7 +456,7 @@ SECTIONS { data/berry_pouch.o(.rodata); data/itemfinder.o(.rodata); src/buy_menu_helpers.o(.rodata); - data/slot_machine.o(.rodata); + src/slot_machine.o(.rodata); src/roamer.o(.rodata); src/mystery_gift_menu.o(.rodata); src/mevent.o(.rodata); diff --git a/src/battle_transition.c b/src/battle_transition.c new file mode 100644 index 000000000..0fd92d631 --- /dev/null +++ b/src/battle_transition.c @@ -0,0 +1,3728 @@ +#include "global.h" +#include "sprite.h" +#include "task.h" +#include "overworld.h" +#include "malloc.h" +#include "palette.h" +#include "trig.h" +#include "random.h" +#include "sound.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "battle_transition.h" +#include "field_effect.h" +#include "field_weather.h" +#include "field_camera.h" +#include "trainer_pokemon_sprites.h" +#include "scanline_effect.h" +#include "constants/songs.h" + +typedef bool8 (*TransitionStateFunc)(struct Task *task); +typedef bool8 (*TransitionSpriteCallback)(struct Sprite *sprite); + +struct TransitionData +{ + vu8 vblankDma; + u16 winIn; + u16 winOut; + u16 win0H; + u16 win0V; + u16 unused_A; + u16 win1V; + u16 bldCnt; + u16 bldAlpha; + u16 bldY; + s16 bg123HOfs; + s16 bg123VOfs; + s16 bg0HOfsOpponent; + s16 bg0HOfsPlayer; + s16 bg0VOfs; + s16 unused_1E; + s16 counter; + s16 unused_22; + s16 data[11]; // for multiple purposes +}; + +static EWRAM_DATA struct TransitionData *sTransitionStructPtr = NULL; + +// TODO: Move this declaration to include/event_object_movement.h +extern const struct OamData gEventObjectBaseOam_32x32; + +static bool8 BT_Phase1_FadeOut(struct Task *task); +static bool8 BT_Phase1_FadeIn(struct Task *task); +static bool8 BT_Phase2BlackDoodles_Init(struct Task *task); +static bool8 BT_Phase2BlackDoodles_InitSingleBrush(struct Task *task); +static bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task); +static bool8 BT_Phase2BlackDoodles_IsDone(struct Task *task); +static bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task); +static bool8 BT_Phase2GridSquares_LoadGfx(struct Task *task); +static bool8 BT_Phase2GridSquares_UpdateTileset(struct Task *task); +static bool8 BT_Phase2GridSquares_IsDone(struct Task *task); +static bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task); +static bool8 BT_Phase2WhiteFadeInStripes_SetupSprites(struct Task *task); +static bool8 BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone(struct Task *task); +static bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task); +static bool8 BT_Phase2WhiteFadeInStripes_IsDone(struct Task *task); +static bool8 BT_Phase2SlicedScreen_Init(struct Task *task); +static bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task); +static bool8 BT_Phase2SlicedScreen_End(struct Task *task); +static bool8 BT_Phase2Mugshot_Init(struct Task *task); +static bool8 BT_Phase2Mugshot_LoadGfx(struct Task *task); +static bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task); +static bool8 BT_Phase2Mugshot_StartSpriteSlide(struct Task *task); +static bool8 BT_Phase2Mugshot_WaitForOpponentInPlace(struct Task *task); +static bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task); +static bool8 BT_Phase2Mugshot_ExpandWhiteBand(struct Task *task); +static bool8 BT_Phase2Mugshot_StartBlackFade(struct Task *task); +static bool8 BT_Phase2Mugshot_WaitForBlackFade(struct Task *task); +static bool8 BT_Phase2Mugshot_End(struct Task *task); +static bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task); +static bool8 BT_Phase2AntiClockwiseSpiral_Update(struct Task *task); +static bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task); +static bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task); +static bool8 BT_Phase2BlackWaveToRight_End(struct Task *task); +static bool8 BT_Phase2FullScreenWave_Init(struct Task *task); +static bool8 BT_Phase2FullScreenWave_UpdateWave(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_Step3(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task); +static bool8 BT_Phase2ClockwiseBlackFade_End(struct Task *task); +static bool8 BT_Phase2SlidingPokeballs_LoadBgGfx(struct Task *task); +static bool8 BT_Phase2SlidingPokeballs_SetupFldeffArgs(struct Task *task); +static bool8 BT_Phase2SlidingPokeballs_IsDone(struct Task *task); +static bool8 BT_Phase2BigPokeball_Init(struct Task *task); +static bool8 BT_Phase2BigPokeball_LoadTilemapAndWave(struct Task *task); +static bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task); +static bool8 BT_Phase2BigPokeball_UpdateWave2DecEvb(struct Task *task); +static bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task); +static bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task); +static bool8 BT_Phase2HorizontalCorrugate_Init(struct Task *task); +static bool8 BT_Phase2HorizontalCorrugate_UpdateWave(struct Task *task); +static bool8 BT_Phase2DistortedWave_InitWave(struct Task *task); +static bool8 BT_Phase2DistortedWave_UpdateWave(struct Task *task); +static bool8 BT_Phase2Blur_InitBgMosaic(struct Task *task); +static bool8 BT_Phase2Blur_Anim(struct Task *task); +static bool8 BT_Phase2Blur_IsDone(struct Task *task); +static bool8 BT_Phase1Blink(struct Task *task); +static bool8 BT_WaitForPhase1(struct Task *task); +static bool8 BT_Phase2LaunchAnimTask(struct Task *task); +static bool8 BT_WaitForPhase2(struct Task *task); + +static void BT_Phase2Blur(u8 taskId); +static void BT_Phase2DistortedWave(u8 taskId); +static void BT_Phase2HorizontalCorrugate(u8 taskId); +static void BT_Phase2BigPokeball(u8 taskId); +static void BT_Phase2SlidingPokeballs(u8 taskId); +static void BT_Phase2ClockwiseBlackFade(u8 taskId); +static void BT_Phase2FullScreenWave(u8 taskId); +static void BT_Phase2BlackWaveToRight(u8 taskId); +static void BT_Phase2SlicedScreen(u8 taskId); +static void BT_Phase2WhiteFadeInStripes(u8 taskId); +static void BT_Phase2GridSquares(u8 taskId); +static void BT_Phase2BlackDoodles(u8 taskId); +static void BT_Phase2StartLoreleiMugshot(u8 taskId); +static void BT_Phase2StartBrunoMugshot(u8 taskId); +static void BT_Phase2StartAgathaMugshot(u8 taskId); +static void BT_Phase2StartLanceMugshot(u8 taskId); +static void BT_Phase2StartBlueMugshot(u8 taskId); +static void BT_Phase2AntiClockwiseSpiral(u8 taskId); +static void BT_Phase1Task(u8 taskId); +static void BT_Phase2Mugshot(u8 taskId); +static void BT_Phase1SubTask(u8 taskId); + +static void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite); +static void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite); +static void SpriteCB_BT_Phase2WhiteFadeInStripes(struct Sprite *sprite); + +static bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite); +static bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite); +static bool8 BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn(struct Sprite *sprite); +static bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite(struct Sprite *sprite); +static bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2(struct Sprite *sprite); + +static void VBCB_BT_Phase2DistortedWave(void); +static void HBCB_BT_Phase2DistortedWave(void); +static void VBCB_BT_Phase2HorizontalCorrugate(void); +static void HBCB_BT_Phase2HorizontalCorrugate(void); +static void VBCB_BT_Phase2BigPokeball1(void); +static void VBCB_BT_Phase2BigPokeball2(void); +static void HBCB_BT_Phase2BigPokeball(void); +static void VBCB_BT_Phase2ClockwiseBlackFade(void); +static void VBCB_BT_Phase2FullScreenWave(void); +static void HBCB_BT_Phase2FullScreenWave(void); +static void VBCB_BT_Phase2BlackWaveToRight(void); +static void VBCB_BT_Phase2AntiClockwiseBlackFade(void); +static void VBCB_BT_Phase2Mugshot1_Slide(void); +static void VBCB_BT_Phase2Mugshot2_WhiteFade(void); +static void HBCB_BT_Phase2Mugshot(void); +static void VBCB_BT_Phase2SlicedScreen(void); +static void HBCB_BT_Phase2SlicedScreen(void); +static void VBCB_BT_Phase2WhiteFadeInStripes1(void); +static void VBCB_BT_Phase2WhiteFadeInStripes2(void); +static void HBCB_BT_Phase2WhiteFadeInStripes(void); +static void VBCB_BT_Phase2BlackDoodles(void); + +static void BT_LaunchTask(u8 transitionId); +static void BT_TaskMain(u8 taskId); +static void BT_InitCtrlBlk(void); +static void BT_CreatePhase1SubTask(s16 fadeOutDelay, s16 fadeInDelay, s16 blinkTimes, s16 fadeOutSpeed, s16 fadeInSpeed); +static bool8 BT_IsPhase1Done(void); +static void BT_VBSyncOamAndPltt(void); +static void BT_GetBg0TilesetBase(u16 **tilesetPtr); +static void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr); +static void BT_LoadWaveIntoBuffer(s16 *buffer, s16 offset, s16 theta, s16 frequency, s16 amplitude, s16 bufSize); +static void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius); +static void BT_BlendPalettesToBlack(void); +static void BT_DiagonalSegment_InitParams(s16 *data, s16 startPtX, s16 startPtY, s16 endPtX, s16 endPtY, s16 stepX, s16 stepY); +static bool8 BT_DiagonalSegment_ComputePointOnSegment(s16 *data, bool8 checkBoundary1, bool8 checkBoundary2); +static void BT_SetSpriteAsOpponentOrPlayer(s16 spriteId, bool16 value); +static void BT_StartSpriteSlide(s16 spriteId); +static s16 BT_IsSpriteSlideFinished(s16 spriteId); +static void BT_Phase2Mugshots_CreateSprites(struct Task *task); + +static const u32 sBigPokeballTileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball_tileset.4bpp"); +static const u32 sSlidingPokeballTilemap[] = INCBIN_U32("graphics/battle_transitions/sliding_pokeball_tilemap.bin"); +static const u8 sSpriteImage_SlidingPokeball[] = INCBIN_U8("graphics/battle_transitions/sliding_pokeball.4bpp"); +static const u32 sVsBarTileset[] = INCBIN_U32("graphics/battle_transitions/vsbar_tileset.4bpp"); +static const u8 sSpriteImage_UnusedBrendan[] = INCBIN_U8("graphics/battle_transitions/unused_brendan.4bpp"); +static const u8 sSpriteImage_UnusedLass[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp"); +static const u32 sGridSquareTileset[] = INCBIN_U32("graphics/battle_transitions/grid_square_tileset.4bpp"); + +static const TaskFunc sBT_Phase1Tasks[] = +{ + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, + BT_Phase1Task, +}; + +static const TaskFunc sBT_Phase2Tasks[] = +{ + BT_Phase2Blur, + BT_Phase2DistortedWave, + BT_Phase2HorizontalCorrugate, + BT_Phase2BigPokeball, + BT_Phase2SlidingPokeballs, + BT_Phase2ClockwiseBlackFade, + BT_Phase2FullScreenWave, + BT_Phase2BlackWaveToRight, + BT_Phase2SlicedScreen, + BT_Phase2WhiteFadeInStripes, + BT_Phase2GridSquares, + BT_Phase2BlackDoodles, + BT_Phase2StartLoreleiMugshot, + BT_Phase2StartBrunoMugshot, + BT_Phase2StartAgathaMugshot, + BT_Phase2StartLanceMugshot, + BT_Phase2StartBlueMugshot, + BT_Phase2AntiClockwiseSpiral, +}; + +static const TransitionStateFunc sBT_MainPhases[] = +{ + BT_Phase1Blink, + BT_WaitForPhase1, + BT_Phase2LaunchAnimTask, + BT_WaitForPhase2, +}; + +static const TransitionStateFunc sBT_Phase2BlurFuncs[] = +{ + BT_Phase2Blur_InitBgMosaic, + BT_Phase2Blur_Anim, + BT_Phase2Blur_IsDone, +}; + +static const TransitionStateFunc sBT_Phase2DistortedWaveFuncs[] = +{ + BT_Phase2DistortedWave_InitWave, + BT_Phase2DistortedWave_UpdateWave, +}; + +static const TransitionStateFunc sBT_Phase2HorizontalCorrugateFuncs[] = +{ + BT_Phase2HorizontalCorrugate_Init, + BT_Phase2HorizontalCorrugate_UpdateWave, +}; + +static const TransitionStateFunc sBT_Phase2BigPokeballFuncs[] = +{ + BT_Phase2BigPokeball_Init, + BT_Phase2BigPokeball_LoadTilemapAndWave, + BT_Phase2BigPokeball_UpdateWave1IncEva, + BT_Phase2BigPokeball_UpdateWave2DecEvb, + BT_Phase2BigPokeball_UpdateWave3, + BT_Phase2BigPokeball_CircleEffect, +}; + +static const TransitionStateFunc sBT_Phase2SlidingPokeballsFuncs[] = +{ + BT_Phase2SlidingPokeballs_LoadBgGfx, + BT_Phase2SlidingPokeballs_SetupFldeffArgs, + BT_Phase2SlidingPokeballs_IsDone, +}; + +static const s16 gUnknown_83FA400[] = { -16, 256 }; + +static const s16 gUnknown_83FA404[] = { 0, 16, 32, 8, 24 }; + +static const s16 gUnknown_83FA40E[] = { 8, -8 }; + +static const TransitionStateFunc sBT_Phase2ClockwiseBlackFadeFuncs[] = +{ + BT_Phase2ClockwiseBlackFade_Init, + BT_Phase2ClockwiseBlackFade_Step1, + BT_Phase2ClockwiseBlackFade_Step2, + BT_Phase2ClockwiseBlackFade_Step3, + BT_Phase2ClockwiseBlackFade_Step4, + BT_Phase2ClockwiseBlackFade_Step5, + BT_Phase2ClockwiseBlackFade_End, +}; + +static const TransitionStateFunc sBT_Phase2FullScreenWaveFuncs[] = +{ + BT_Phase2FullScreenWave_Init, + BT_Phase2FullScreenWave_UpdateWave, +}; + +static const TransitionStateFunc sBT_Phase2BlackWaveToRightFuncs[] = +{ + BT_Phase2BlackWaveToRight_Init, + BT_Phase2BlackWaveToRight_UpdateWave, + BT_Phase2BlackWaveToRight_End, +}; +static const s16 gUnknown_83FA444[] = +{ + 0x0, 0x26E, + 0x100, 0x69, + 0x0, -0x69, + -0x100, -0x266E, + 0x0, 0x26E, + 0x100, 0x69, + 0x0, -0x69, + -0x100, -0x266E, +}; + +static const TransitionStateFunc sBT_Phase2AntiClockwiseSpiralFuncs[] = +{ + BT_Phase2AntiClockwiseSpiral_Init, + BT_Phase2AntiClockwiseSpiral_Update, +}; + +static const TransitionStateFunc sBT_Phase2MugshotFuncs[] = +{ + BT_Phase2Mugshot_Init, + BT_Phase2Mugshot_LoadGfx, + BT_Phase2Mugshot_VsBarsSlideIn, + BT_Phase2Mugshot_StartSpriteSlide, + BT_Phase2Mugshot_WaitForOpponentInPlace, + BT_Phase2Mugshot_WaitForPlayerInPlace, + BT_Phase2Mugshot_ExpandWhiteBand, + BT_Phase2Mugshot_StartBlackFade, + BT_Phase2Mugshot_WaitForBlackFade, + BT_Phase2Mugshot_End, +}; + +static const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_COUNT] = +{ + // TODO: document these with macro + 0x70, 0x71, 0x72, 0x73, 0x7D +}; + +static const s16 sMugshotsOpponentRotationScales[MUGSHOTS_COUNT][2] = +{ + {0x200, 0x200}, + {0x200, 0x200}, + {0x200, 0x200}, + {0x200, 0x200}, + {0x200, 0x200}, +}; + +static const s16 sMugshotsOpponentCoords[MUGSHOTS_COUNT][2] = +{ + { -8, 0 }, + { -10, 0 }, + { 0, 0 }, + { -32, 0 }, + { 0, 0 }, +}; + +static const TransitionSpriteCallback sBT_Phase2MugshotSpriteFuncs[] = +{ + BT_Phase2MugshotsSpriteFuncs_Wait, + BT_Phase2MugshotsSpriteFuncs_InitParams, + BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn, + BT_Phase2MugshotsSpriteFuncs_DecelerateSprite, + BT_Phase2MugshotsSpriteFuncs_Wait, + BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2, // not used + BT_Phase2MugshotsSpriteFuncs_Wait, +}; + +static const s16 sMugShotSlideVelocity[] = { 12, -12 }; + +static const s16 sMugShotSlideDeceleration[] = { -1, 1 }; + +static const TransitionStateFunc sBT_Phase2SlicedScreenFuncs[] = +{ + BT_Phase2SlicedScreen_Init, + BT_Phase2SlicedScreen_UpdateOffsets, + BT_Phase2SlicedScreen_End, +}; + +static const TransitionStateFunc sBT_Phase2WhiteFadeInStripesFuncs[] = +{ + BT_Phase2WhiteFadeInStripes_Init, + BT_Phase2WhiteFadeInStripes_SetupSprites, + BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone, + BT_Phase2WhiteFadeInStripes_Stop, + BT_Phase2WhiteFadeInStripes_IsDone, +}; + +static const u16 sWhiteStripeDelay[] = { 0, 9, 15, 6, 12, 3 }; + +static const TransitionStateFunc sBT_Phase2GridSquaresFuncs[] = +{ + BT_Phase2GridSquares_LoadGfx, + BT_Phase2GridSquares_UpdateTileset, + BT_Phase2GridSquares_IsDone, +}; + +static const TransitionStateFunc sBT_Phase2BlackDoodlesFuncs[] = +{ + BT_Phase2BlackDoodles_Init, + BT_Phase2BlackDoodles_InitSingleBrush, + BT_Phase2BlackDoodles_DrawSingleBrush, + BT_Phase2BlackDoodles_IsDone, + BT_Phase2BlackDoodles_NextBrush, +}; + +static const s16 sBlackDoodlesSegments[][5] = +{ + { 0x38, 0x00, 0x00, 0xA0, 0 }, + { 0x68, 0xA0, 0xF0, 0x58, 1 }, + { 0xF0, 0x48, 0x38, 0x00, 1 }, + { 0x00, 0x20, 0x90, 0xA0, 0 }, + { 0x90, 0xA0, 0xB8, 0x00, 1 }, + { 0x38, 0x00, 0xA8, 0xA0, 0 }, + { 0xA8, 0xA0, 0x30, 0x00, 1 }, +}; + +static const s16 sBlackDoodlesDelay[] = { 1, 1, 1, 1, 1, 1, 0 }; + +static const TransitionStateFunc sBT_Phase1FadeFuncs[] = +{ + BT_Phase1_FadeOut, + BT_Phase1_FadeIn, +}; + +static const struct SpriteFrameImage sSpriteImageTable_SlidingPokeball[] = +{ + { + .data = sSpriteImage_SlidingPokeball, + .size = 0x200, + }, +}; + +static const union AnimCmd sSpriteAnim_SlidingPokeball[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSpriteAnimTable_SlidingPokeball[] = { sSpriteAnim_SlidingPokeball }; + +static const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball1[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -4, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd sSpriteAffineAnim_SlidingPokeball2[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 4, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_SlidingPokeball[] = +{ + sSpriteAffineAnim_SlidingPokeball1, + sSpriteAffineAnim_SlidingPokeball2, +}; + +static const struct SpriteTemplate sSpriteTemplate_SlidingPokeball = +{ + .tileTag = SPRITE_INVALID_TAG, + .paletteTag = 0x1009, + .oam = &gEventObjectBaseOam_32x32, + .anims = sSpriteAnimTable_SlidingPokeball, + .images = sSpriteImageTable_SlidingPokeball, + .affineAnims = sSpriteAffineAnimTable_SlidingPokeball, + .callback = SpriteCB_BT_Phase2SlidingPokeballs, +}; + +static const struct OamData sOamData_Unused = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct SpriteFrameImage sSpriteImageTable_UnusedBrendan[] = +{ + { + .data = sSpriteImage_UnusedBrendan, + .size = 0x800, + }, +}; + +static const struct SpriteFrameImage sSpriteImageTable_UnusedLass[] = +{ + { + .data = sSpriteImage_UnusedLass, + .size = 0x800, + }, +}; + +static const union AnimCmd sSpriteAnim_Unused[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSpriteAnimTable_Unused[] = { sSpriteAnim_Unused }; + +static const struct SpriteTemplate sSpriteTemplateTable_Unused[] = +{ + { + .tileTag = SPRITE_INVALID_TAG, + .paletteTag = 0x100A, + .oam = &sOamData_Unused, + .anims = sSpriteAnimTable_Unused, + .images = sSpriteImageTable_UnusedBrendan, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_BT_Phase2Mugshots, + }, + { + .tileTag = SPRITE_INVALID_TAG, + .paletteTag = 0x100A, + .oam = &sOamData_Unused, + .anims = sSpriteAnimTable_Unused, + .images = sSpriteImageTable_UnusedLass, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_BT_Phase2Mugshots, + }, +}; + +// this palette is shared by big pokeball and sliding pokeball +static const u16 sSlidingPokeballBigPokeballPalette[] = INCBIN_U16("graphics/battle_transitions/sliding_pokeball.gbapal"); + +static const struct SpritePalette sSpritePalette_SlidingPokeball = +{ + .data = sSlidingPokeballBigPokeballPalette, + .tag = 0x1009, +}; + +static const u16 sVsBarLoreleiPalette[] = INCBIN_U16("graphics/battle_transitions/lorelei_bg.gbapal"); +static const u16 sVsBarBrunoPalette[] = INCBIN_U16("graphics/battle_transitions/bruno_bg.gbapal"); +static const u16 sVsBarAgathaPalette[] = INCBIN_U16("graphics/battle_transitions/agatha_bg.gbapal"); +static const u16 sVsBarLancePalette[] = INCBIN_U16("graphics/battle_transitions/lance_bg.gbapal"); +static const u16 sVsBarBluePalette[] = INCBIN_U16("graphics/battle_transitions/blue_bg.gbapal"); +static const u16 sVsBarMalePlayerPalette[] = INCBIN_U16("graphics/battle_transitions/red_bg.gbapal"); +static const u16 sVsBarFemalePlayerPalette[] = INCBIN_U16("graphics/battle_transitions/green_bg.gbapal"); + +static const u16 *const sVsBarOpponentPalettes[MUGSHOTS_COUNT] = +{ + sVsBarLoreleiPalette, + sVsBarBrunoPalette, + sVsBarAgathaPalette, + sVsBarLancePalette, + sVsBarBluePalette, +}; + +static const u16 *const sVsBarPlayerPalettes[] = +{ + sVsBarMalePlayerPalette, + sVsBarFemalePlayerPalette, +}; + +static const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitions/unused_trainer.gbapal"); + +static const struct SpritePalette sSpritePalette_UnusedTrainer = +{ + .data = sUnusedTrainerPalette, + .tag = 0x100A, +}; + +static const u16 sBigPokeballTilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_tilemap.bin"); +static const u16 sVsBarTilemap[] = INCBIN_U16("graphics/battle_transitions/vsbar_tilemap.bin"); + +void BT_StartOnField(u8 transitionId) +{ + sTransitionStructPtr = AllocZeroed(sizeof(struct TransitionData)); + gMain.callback2 = CB2_OverworldBasic; + BT_LaunchTask(transitionId); +} + +// not used +static void BT_StartWithoutAlloc(u8 transitionId) +{ + BT_LaunchTask(transitionId); +} + +#define tState data[0] +#define tTransitionId data[1] +#define tTransitionDone data[15] + +bool8 BT_IsDone(void) +{ + u8 taskId = FindTaskIdByFunc(BT_TaskMain); + if (gTasks[taskId].tTransitionDone) + { + BT_InitCtrlBlk(); + FREE_AND_SET_NULL(sTransitionStructPtr); + DestroyTask(taskId); + return TRUE; + } + else + { + return FALSE; + } +} + +static void BT_LaunchTask(u8 transitionId) +{ + u8 taskId = CreateTask(BT_TaskMain, 2); + gTasks[taskId].tTransitionId = transitionId; +} + +static void BT_TaskMain(u8 taskId) +{ + while (sBT_MainPhases[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase1Blink(struct Task *task) +{ + SetWeatherScreenFadeOut(); + CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); + if (sBT_Phase1Tasks[task->tTransitionId] != NULL) + { + CreateTask(sBT_Phase1Tasks[task->tTransitionId], 4); + ++task->tState; + return FALSE; + } + else + { + task->tState = 2; + return TRUE; + } +} + +static bool8 BT_WaitForPhase1(struct Task *task) +{ + if (FindTaskIdByFunc(sBT_Phase1Tasks[task->tTransitionId]) == TASK_NONE) + { + ++task->tState; + return TRUE; + } + else + { + return FALSE; + } +} + +static bool8 BT_Phase2LaunchAnimTask(struct Task *task) +{ + CreateTask(sBT_Phase2Tasks[task->tTransitionId], 0); + ++task->tState; + return FALSE; +} + +static bool8 BT_WaitForPhase2(struct Task *task) +{ + task->tTransitionDone = FALSE; + if (FindTaskIdByFunc(sBT_Phase2Tasks[task->tTransitionId]) == TASK_NONE) + task->tTransitionDone = TRUE; + return FALSE; +} + +static void BT_Phase1Task(u8 taskId) +{ + if (!gTasks[taskId].tState) + { + ++gTasks[taskId].tState; + BT_CreatePhase1SubTask(0, 0, 2, 2, 2); + } + else if (BT_IsPhase1Done()) + { + DestroyTask(taskId); + } +} + +#define tInterval data[1] +#define tMosaicSize data[2] + +static void BT_Phase2Blur(u8 taskId) +{ + while (sBT_Phase2BlurFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase2Blur_InitBgMosaic(struct Task *task) +{ + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuRegBits(REG_OFFSET_BG1CNT, BGCNT_MOSAIC); + SetGpuRegBits(REG_OFFSET_BG2CNT, BGCNT_MOSAIC); + SetGpuRegBits(REG_OFFSET_BG3CNT, BGCNT_MOSAIC); + ++task->tState; + return TRUE; +} + +static bool8 BT_Phase2Blur_Anim(struct Task *task) +{ + if (task->tInterval) + { + --task->tInterval; + } + else + { + task->tInterval = 2; + if (++task->tMosaicSize == 10) + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 0x10, RGB_BLACK); + // The mosaic size argument is shared by HSIZE and VSIZE + SetGpuReg(REG_OFFSET_MOSAIC, (task->tMosaicSize & 0xF) + ((task->tMosaicSize & 0xF) << 4)); + if (task->tMosaicSize > 14) + ++task->tState; + } + return FALSE; +} + +static bool8 BT_Phase2Blur_IsDone(struct Task *task) +{ + if (!gPaletteFade.active) + DestroyTask(FindTaskIdByFunc(BT_Phase2Blur)); + return FALSE; +} + +#undef tInterval +#undef tMosaicSize + +#define tTheta data[1] +#define tAmplitude data[2] + +static void BT_Phase2DistortedWave(u8 taskId) +{ + while (sBT_Phase2DistortedWaveFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase2DistortedWave_InitWave(struct Task *task) +{ + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 0x10, RGB_BLACK); + BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[1], sTransitionStructPtr->bg123HOfs, 0, 2, 0, 160); + SetVBlankCallback(VBCB_BT_Phase2DistortedWave); + SetHBlankCallback(HBCB_BT_Phase2DistortedWave); + EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); + ++task->tState; + return FALSE; +} + +static bool8 BT_Phase2DistortedWave_UpdateWave(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + task->tTheta += 4; + task->tAmplitude += 8; + BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], sTransitionStructPtr->bg123HOfs, task->tTheta, 2, task->tAmplitude, 160); + if (!gPaletteFade.active) + DestroyTask(FindTaskIdByFunc(BT_Phase2DistortedWave)); + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static void VBCB_BT_Phase2DistortedWave(void) +{ + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); +} + +static void HBCB_BT_Phase2DistortedWave(void) +{ + s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + + REG_BG1HOFS = offset; + REG_BG2HOFS = offset; + REG_BG3HOFS = offset; +} + +static void BT_Phase2HorizontalCorrugate(u8 taskId) +{ + while (sBT_Phase2HorizontalCorrugateFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase2HorizontalCorrugate_Init(struct Task *task) +{ + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 0x10, RGB_BLACK); + memset(gScanlineEffectRegBuffers[1], sTransitionStructPtr->bg123VOfs, 320); + SetVBlankCallback(VBCB_BT_Phase2HorizontalCorrugate); + SetHBlankCallback(HBCB_BT_Phase2HorizontalCorrugate); + EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); + ++task->tState; + return FALSE; +} + +static bool8 BT_Phase2HorizontalCorrugate_UpdateWave(struct Task *task) +{ + u8 i; + u16 theta, amplitude; + + sTransitionStructPtr->vblankDma = FALSE; + theta = task->tTheta; + amplitude = task->tAmplitude >> 8; + task->tTheta += 4224; + task->tAmplitude += 384; + for (i = 0; i < 160; ++i, theta += 4224) + gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->bg123VOfs + Sin(theta / 256, amplitude); + if (!gPaletteFade.active) + DestroyTask(FindTaskIdByFunc(BT_Phase2HorizontalCorrugate)); + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static void VBCB_BT_Phase2HorizontalCorrugate(void) +{ + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); +} + +static void HBCB_BT_Phase2HorizontalCorrugate(void) +{ + s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + + REG_BG1VOFS = offset; + REG_BG2VOFS = offset; + REG_BG3VOFS = offset; +} + +#undef tTheta +#undef tAmplitude + +#define tEvb data[1] +#define tEva data[2] +#define tInterval data[3] +#define tTheta data[4] +#define tAmplitude data[5] + +static void BT_Phase2BigPokeball(u8 taskId) +{ + while (sBT_Phase2BigPokeballFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase2BigPokeball_Init(struct Task *task) +{ + u16 i, *tilemapAddr, *tilesetAddr; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + task->tEvb = 16; + task->tEva = 0; + task-> tTheta = 0; + task-> tAmplitude = 0x4000; + sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winOut = 0; + sTransitionStructPtr->win0H = 240; + sTransitionStructPtr->win0V = 160; + sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD; + sTransitionStructPtr->bldAlpha = (task->tEvb << 8) | task->tEva; + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[1][i] = 240; + SetVBlankCallback(VBCB_BT_Phase2BigPokeball1); + BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); + CpuFill16(0, tilemapAddr, 0x800); + CpuCopy16(sBigPokeballTileset, tilesetAddr, 0x580); + LoadPalette(sSlidingPokeballBigPokeballPalette, 0xF0, 0x20); + ++task->tState; + return FALSE; +} + +static bool8 BT_Phase2BigPokeball_LoadTilemapAndWave(struct Task *task) +{ + s16 i, j; + u16 *tilemapAddr, *tilesetAddr; + const u16 *BigPokeballMap = sBigPokeballTilemap; + + BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); + for (i = 0; i < 20; ++i) + for (j = 0; j < 30; ++j, ++BigPokeballMap) + tilemapAddr[i * 32 + j] = *BigPokeballMap | 0xF000; // use palette #15 + BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude, 160); + ++task->tState; + return TRUE; +} + +static bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + if (task->tInterval == 0 || --task->tInterval == 0) + { + ++task->tEva; + task->tInterval = 1; // Broken logic. This makes the condition always TRUE. + } + sTransitionStructPtr->bldAlpha = (task->tEvb << 8) | task->tEva; + // Increment eva until it reaches 50% coeff + if (task->tEva > 15) + ++task->tState; + task->tTheta += 12; + task->tAmplitude -= 384; + // Assign a very high frequency value so that 2 adjacent values in gScanlineEffectRegBuffers[0] will have different sign. + BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude >> 8, 160); + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2BigPokeball_UpdateWave2DecEvb(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + if (task->tInterval == 0 || --task->tInterval == 0) + { + --task->tEvb; + task->tInterval = 2; + } + sTransitionStructPtr->bldAlpha = (task->tEvb << 8) | task->tEva; + if (!task->tEvb) + ++task->tState; + if (task->tAmplitude > 0) + { + task->tTheta += 12; + task->tAmplitude -= 384; + } + else + { + task->tAmplitude = 0; + } + BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude >> 8, 160); + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +#undef tEvb +#undef tEva +#undef tInterval + +#define tRadius data[1] +#define tDeltaRadius data[2] +#define tKeepVBCB data[3] + +static bool8 BT_Phase2BigPokeball_UpdateWave3(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + if (task->tAmplitude > 0) + { + task->tTheta += 12; + task->tAmplitude -= 384; + } + else + { + task->tAmplitude = 0; + } + BT_LoadWaveIntoBuffer(gScanlineEffectRegBuffers[0], 0, task->tTheta, 132, task->tAmplitude >> 8, 160); + if (task->tAmplitude <= 0) + { + ++task->tState; + task->tRadius = 160; + task->tDeltaRadius = 256; + task->tKeepVBCB = 0; + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2BigPokeball_CircleEffect(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + if (task->tDeltaRadius < 2048) + task->tDeltaRadius += 256; + if (task->tRadius) + { + task->tRadius -= (task->tDeltaRadius >> 8); + if (task->tRadius < 0) + task->tRadius = 0; + } + BT_GenerateCircle(gScanlineEffectRegBuffers[0], 120, 80, task->tRadius); + if (task->tRadius == 0) + { + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2BigPokeball)); + } + if (task->tKeepVBCB == 0) + { + ++task->tKeepVBCB; + SetVBlankCallback(VBCB_BT_Phase2BigPokeball2); + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static void BT_VBStopDma0SyncSrcBufferSetLcdRegs(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + SetGpuReg(REG_OFFSET_BLDCNT, sTransitionStructPtr->bldCnt); + SetGpuReg(REG_OFFSET_BLDALPHA, sTransitionStructPtr->bldAlpha); +} + +static void VBCB_BT_Phase2BigPokeball1(void) +{ + BT_VBStopDma0SyncSrcBufferSetLcdRegs(); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_BG0HOFS, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +static void VBCB_BT_Phase2BigPokeball2(void) +{ + BT_VBStopDma0SyncSrcBufferSetLcdRegs(); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +#undef tRadius +#undef tDeltaRadius +#undef tKeepVBCB +#undef tTheta +#undef tAmplitude + +// TODO: Document this effect after knowing more about field effects. +static void BT_Phase2SlidingPokeballs(u8 taskId) +{ + while (sBT_Phase2SlidingPokeballsFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase2SlidingPokeballs_LoadBgGfx(struct Task *task) +{ + u16 *tilemapAddr, *tilesetAddr; + + BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); + CpuSet(sSlidingPokeballTilemap, tilesetAddr, 0x20); + CpuFill32(0, tilemapAddr, 0x800); + LoadPalette(sSlidingPokeballBigPokeballPalette, 0xF0, 0x20); + ++task->tState; + return FALSE; +} + +static bool8 BT_Phase2SlidingPokeballs_SetupFldeffArgs(struct Task *task) +{ + s16 i, rand; + s16 arr0[NELEMS(gUnknown_83FA400)]; + s16 arr1[NELEMS(gUnknown_83FA404)]; + + memcpy(arr0, gUnknown_83FA400, sizeof(gUnknown_83FA400)); + memcpy(arr1, gUnknown_83FA404, sizeof(gUnknown_83FA404)); + rand = Random() & 1; + for (i = 0; i <= 4; ++i, rand ^= 1) + { + gFieldEffectArguments[0] = arr0[rand]; // x + gFieldEffectArguments[1] = (i * 32) + 16; // y + gFieldEffectArguments[2] = rand; + gFieldEffectArguments[3] = arr1[i]; + FieldEffectStart(FLDEFF_POKEBALL); + } + ++task->tState; + return FALSE; +} + +static bool8 BT_Phase2SlidingPokeballs_IsDone(struct Task *task) +{ + if (!FieldEffectActiveListContains(FLDEFF_POKEBALL)) + { + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2SlidingPokeballs)); + } + return FALSE; +} + +bool8 FldEff_Pokeball(void) +{ + u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_SlidingPokeball, gFieldEffectArguments[0], gFieldEffectArguments[1], 0); + + gSprites[spriteId].oam.priority = 0; + gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].data[0] = gFieldEffectArguments[2]; + gSprites[spriteId].data[1] = gFieldEffectArguments[3]; + gSprites[spriteId].data[2] = -1; + InitSpriteAffineAnim(&gSprites[spriteId]); + StartSpriteAffineAnim(&gSprites[spriteId], gFieldEffectArguments[2]); + return FALSE; +} + +#define SOME_VRAM_STORE(ptr, posY, posX, toStore) \ +{ \ + u32 index = (posY) * 32 + posX; \ + ptr[index] = toStore; \ +} + +static void SpriteCB_BT_Phase2SlidingPokeballs(struct Sprite *sprite) +{ + s16 arr0[NELEMS(gUnknown_83FA40E)]; + + memcpy(arr0, gUnknown_83FA40E, sizeof(gUnknown_83FA40E)); + if (sprite->data[1]) + { + --sprite->data[1]; + } + else + { + if ((u16)sprite->pos1.x <= 240) + { + s16 posX = sprite->pos1.x >> 3; + s16 posY = sprite->pos1.y >> 3; + + if (posX != sprite->data[2]) + { + u32 var; + u16 *ptr; + + sprite->data[2] = posX; + var = (((GetGpuReg(REG_OFFSET_BG0CNT) >> 8) & 0x1F) << 11); + ptr = (u16 *)(VRAM + var); + SOME_VRAM_STORE(ptr, posY - 2, posX, 0xF001); + SOME_VRAM_STORE(ptr, posY - 1, posX, 0xF001); + SOME_VRAM_STORE(ptr, posY - 0, posX, 0xF001); + SOME_VRAM_STORE(ptr, posY + 1, posX, 0xF001); + } + } + sprite->pos1.x += arr0[sprite->data[0]]; + if (sprite->pos1.x < -15 || sprite->pos1.x > 255) + FieldEffectStop(sprite, FLDEFF_POKEBALL); + } +} + +#define trStartPtX data[0] +#define trStartPtY data[1] +#define trCurrentPtX data[2] +#define trCurrentPtY data[3] +#define trEndPtX data[4] +#define trEndPtY data[5] + +static void BT_Phase2ClockwiseBlackFade(u8 taskId) +{ + while (sBT_Phase2ClockwiseBlackFadeFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task) +{ + u16 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + sTransitionStructPtr->winIn = 0; + sTransitionStructPtr->winOut = 0x3F; + sTransitionStructPtr->win0H = 0xF0F1; + sTransitionStructPtr->win0V = 0x00A0; + for (i = 0; i < 160; ++i) + { + gScanlineEffectRegBuffers[1][i] = 0xF3F4; + } + SetVBlankCallback(VBCB_BT_Phase2ClockwiseBlackFade); + sTransitionStructPtr->trEndPtX = 120; + ++task->tState; + return TRUE; +} + +static bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->trEndPtX, -1, 1, 1); + do + { + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = (sTransitionStructPtr->trCurrentPtX + 1) | 0x7800; + } + while (!BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE)); + + sTransitionStructPtr->trEndPtX += 32; + if (sTransitionStructPtr->trEndPtX >= 240) + { + sTransitionStructPtr->trEndPtY = 0; + ++task->tState; + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task) +{ + s16 left, right; + vu8 finished = FALSE; + + sTransitionStructPtr->vblankDma = FALSE; + BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, 240, sTransitionStructPtr->trEndPtY, 1, 1); + while (TRUE) + { + left = 120; + right = sTransitionStructPtr->trCurrentPtX + 1; + if (sTransitionStructPtr->trEndPtY >= 80) + { + left = sTransitionStructPtr->trCurrentPtX; + right = 240; + } + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + if (finished) + break; + finished = BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE); + } + sTransitionStructPtr->trEndPtY += 16; + if (sTransitionStructPtr->trEndPtY >= 160) + { + sTransitionStructPtr->trEndPtX = 240; + ++task->tState; + } + else + { + while (sTransitionStructPtr->trCurrentPtY < sTransitionStructPtr->trEndPtY) + gScanlineEffectRegBuffers[0][++sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2ClockwiseBlackFade_Step3(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->trEndPtX, 160, 1, 1); + do + { + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = (sTransitionStructPtr->trCurrentPtX << 8) | 0xF0; + } + while (!BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE)); + sTransitionStructPtr->trEndPtX -= 32; + if (sTransitionStructPtr->trEndPtX <= 0) + { + sTransitionStructPtr->trEndPtY = 160; + ++task->tState; + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +/* + * BUG: The following 2 functions are incorrect. The animation after + * the rotation angle reaches 1.5Ï€ will not be displayed. + * + * There're 2 problems which need to be solved in order to correct the logic. + * 1. With current setup, nothing is displayed inside WIN0 and everything + * is displayed outside WIN0. Thus, if the rotation angle is > 1.5Ï€, it + * won't be able to handle the situation. + * 2. The programmer sometimes swapped the place of left and right boundary + * of WIN0 (see variables left and right), which will sometimes cause right + * to be smaller than left. In this way, garbage data will be written to WIN0H. + */ +static bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task) +{ + s16 right, left; + u16 win0H; + vu8 finished = FALSE; + + sTransitionStructPtr->vblankDma = FALSE; + BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, 0, sTransitionStructPtr->trEndPtY, 1, 1); + while (TRUE) + { + right = (gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY]) & 0xFF; + left = sTransitionStructPtr->trCurrentPtX; + if (sTransitionStructPtr->trEndPtY <= 80) + { + left = 120; + right = sTransitionStructPtr->trCurrentPtX; + } + win0H = right | (left << 8); + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = win0H; + if (finished) + break; + finished = BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE); + } + sTransitionStructPtr->trEndPtY -= 16; + if (sTransitionStructPtr->trEndPtY <= 0) + { + sTransitionStructPtr->trEndPtX = 0; + ++task->tState; + } + else + { + while (sTransitionStructPtr->trCurrentPtY > sTransitionStructPtr->trEndPtY) + gScanlineEffectRegBuffers[0][--sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task) +{ + s16 left, right; + + sTransitionStructPtr->vblankDma = FALSE; + BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->trEndPtX, 0, 1, 1); + do + { + left = 120; + right = sTransitionStructPtr->trCurrentPtX; + if (sTransitionStructPtr->trCurrentPtX >= 120) + { + left = 0; + right = 240; + } + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + } + while (!BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE)); + sTransitionStructPtr->trEndPtX += 32; + if (sTransitionStructPtr->trCurrentPtX > 120) + ++task->tState; + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2ClockwiseBlackFade_End(struct Task *task) +{ + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2ClockwiseBlackFade)); + return FALSE; +} + +static void VBCB_BT_Phase2ClockwiseBlackFade(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + SetGpuReg(REG_OFFSET_WIN0H, gScanlineEffectRegBuffers[1][0]); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +#undef trStartPtX +#undef trStartPtY +#undef trCurrentPtX +#undef trCurrentPtY +#undef trEndPtX +#undef trEndPtY + +#define tTheta data[1] +#define tAmplitude data[2] +#define tDelayForFade data[3] +#define tStartFade data[4] + +static void BT_Phase2FullScreenWave(u8 taskId) +{ + while (sBT_Phase2FullScreenWaveFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase2FullScreenWave_Init(struct Task *task) +{ + u8 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->bg123VOfs; + SetVBlankCallback(VBCB_BT_Phase2FullScreenWave); + SetHBlankCallback(HBCB_BT_Phase2FullScreenWave); + EnableInterrupts(INTR_FLAG_HBLANK); + ++task->tState; + return TRUE; +} + +static bool8 BT_Phase2FullScreenWave_UpdateWave(struct Task *task) +{ + u8 i; + s16 amplitude; + u16 theta, frequency; + + sTransitionStructPtr->vblankDma = FALSE; + amplitude = task->tAmplitude >> 8; + theta = task->tTheta; + frequency = 384; + task->tTheta += 0x400; + if (task->tAmplitude <= 0x1FFF) + task->tAmplitude += 384; + for (i = 0; i < 160; ++i, theta += frequency) + { + s16 var = theta >> 8; + + #ifndef NONMATCHING + asm(""); + #endif + gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->bg123VOfs + Sin(var, amplitude); + } + if (++task->tDelayForFade == 41) + { + ++task->tStartFade; + BeginNormalPaletteFade(0xFFFFFFFF, -8, 0, 0x10, RGB_BLACK); + } + if (task->tStartFade && !gPaletteFade.active) + DestroyTask(FindTaskIdByFunc(BT_Phase2FullScreenWave)); + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static void VBCB_BT_Phase2FullScreenWave(void) +{ + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); +} + +static void HBCB_BT_Phase2FullScreenWave(void) +{ + s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + + REG_BG1VOFS = offset; + REG_BG2VOFS = offset; + REG_BG3VOFS = offset; +} + +#undef tTheta +#undef tAmplitude +#undef tDelayForFade +#undef tStartFade + +#define tOffset data[1] +#define tTheta data[2] + +static void BT_Phase2BlackWaveToRight(u8 taskId) +{ + while (sBT_Phase2BlackWaveToRightFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task) +{ + u8 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winOut = 0; + sTransitionStructPtr->win0H = 240; + sTransitionStructPtr->win0V = 160; + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[1][i] = 242; + SetVBlankCallback(VBCB_BT_Phase2BlackWaveToRight); + ++task->tState; + return TRUE; +} + +static bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task) +{ + u8 i, theta; + u16 *winVal; + bool8 nextFunc; + + sTransitionStructPtr->vblankDma = FALSE; + winVal = gScanlineEffectRegBuffers[0]; + theta = task->tTheta; + task->tTheta += 16; + task->tOffset += 8; + for (i = 0, nextFunc = TRUE; i < 160; ++i, theta += 4, ++winVal) + { + s16 left = task->tOffset + Sin(theta, 40); + if (left < 0) + left = 0; + if (left > 240) + left = 240; + *winVal = (left << 8) | (0xF1); + if (left < 240) + nextFunc = FALSE; + } + if (nextFunc) + ++task->tState; + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2BlackWaveToRight_End(struct Task *task) +{ + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2BlackWaveToRight)); + return FALSE; +} + +static void VBCB_BT_Phase2BlackWaveToRight(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +#undef tOffset +#undef tTheta + +static void BT_Phase2AntiClockwiseSpiral(u8 taskId) +{ + while (sBT_Phase2AntiClockwiseSpiralFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +#ifdef NONMATCHING +static void sub_80D1F64(s16 a1, s16 a2, u8 a3) +{ + s16 i, j; + + u8 theta = 0; + for (i = 320; i < 960; ++i) + gScanlineEffectRegBuffers[1][i] = 120; + for (i = 0; i < (a2 << 4); ++i, ++theta) + { + s16 res1, res2, res3, res4, diff, r8, r0; + + // PROBLEM #1: + // (around line 50 in ASM) + // This part completely doesn't match. + // It's also not tail merge. + if ((theta >> 3) != ((theta + 1) >> 3)) + { + r8 = (theta >> 3) + a1; + ++r8; + r0 = (theta >> 3) + a1; + } + else + { + r0 = (theta >> 3) + a1; + r8 = (theta >> 3) + a1; + } + res1 = 80 - Sin(theta, r0); + res2 = Cos(theta, r0) + 120; + res3 = 80 - Sin(theta + 1, r8); + res4 = Cos(theta + 1, r8) + 120; + if ((res1 >= 0 || res3 >= 0) && (res1 <= 159 || res3 <= 159)) + { + if (res1 < 0) + res1 = 0; + if (res1 > 159) + res1 = 159; + if (res2 < 0) + res2 = 0; + if (res2 > 255) + res2 = 255; + if (res3 < 0) + res3 = 0; + if (res3 > 159) + res3 = 159; + if (res4 < 0) + res4 = 0; + if (res4 > 255) + res4 = 255; + diff = res3 - res1; + if (theta - 64 >= 0) + { + gScanlineEffectRegBuffers[1][res1 + 320] = res2; + if (diff) + { + s16 diff2 = res4 - res2; + + if (diff2 < -1 && res2 > 1) + --res2; + else if (diff2 > 1 && res2 <= 254) + ++res2; + // PROBLEM #2: + // (around line 300 in ASM) + // The current version matched the control flow, + // but it looks too weird and some shift doesn't match + + // functional equivalent: + // for (j = diff; j < 0; ++j) + // gScanlineEffectRegBuffers[1][res1 + j + 480] = res2; + // for (j = diff; j > 0; --j) + // gScanlineEffectRegBuffers[1][res1 + j + 480] = res2; + if ((j = diff) < 0) + do + gScanlineEffectRegBuffers[1][res1 + j + 320] = res2; + while (++j < 0); + else + while (j > 0) + { + gScanlineEffectRegBuffers[1][res1 + j + 320] = res2; + ++j; + } + } + } + else + { + gScanlineEffectRegBuffers[1][res1 + 480] = res2; + if (diff) + { + s16 diff2 = res4 - res2; + + if (diff2 < -1 && res2 > 1) + --res2; + else if (diff2 > 1 && res2 <= 254) + ++res2; + // same as PROBLEM #2 + for (j = diff; j < 0; ++j) + gScanlineEffectRegBuffers[1][res1 + j + 480] = res2; + for (j = diff; j > 0; --j) + gScanlineEffectRegBuffers[1][res1 + j + 480] = res2; + } + } + } + } + // PROBLEM #3: We need (a2 << 16) & 0x30000 here. + // Is it because the programmer declared a s32 var to + // hold the value of a2 and then cast the result to s16? + // Currently I have to write it explicitly. + // (around line 460 in ASM) + if (!a3 || !((a2 << 16) & 0x30000)) + { + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[1][i * 2 + a3] = (gScanlineEffectRegBuffers[1][i + 320] << 8) | gScanlineEffectRegBuffers[1][i + 480]; + } + else + { + s16 res = Sin(a2 * 16, a1 + a2 * 2); + + switch (a2 / 4) + { + case 0: + if (res > 80) + res = 80; + // PROBLEM #4: + // (around line 550 in ASM) + // Case 0-3 are very similar, so it's very likely + // that they have the same problem. + // The code is definitely functional equivalent, + // but the vanilla game used some extra shifts and + // used unsigned comparison. Another difference is + // that I can't figure out a way to make gUnknown_83FA444[a2] + // happen outside the loop body. + // It seems that sTransitionStructPtr->data[2] need + // to be used in the first statement so that the + // struct pointer sTransitionStructPtr will be loaded + // early enough. + // + // Logically the generated code is following if + do-while structure. + // But it seems that it can only make the situation even worse. + /* + i = res; + if (i > 0) + { + // This happens before loop body. + s16 unk = gUnknown_83FA444[a2]; + + do + { + sTransitionStructPtr->data[2] = ((i * unk) >> 8) + 120; + if (sTransitionStructPtr->data[2] <= 255) + { + sTransitionStructPtr->bg123HOfs = 400 - i; + sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][400 - i]; + if (gScanlineEffectRegBuffers[1][560 - i] < sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][560 - i] = 120; + else if (gScanlineEffectRegBuffers[1][400 - i] < sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][400 - i] = sTransitionStructPtr->data[2]; + } + } + while (--i > 0); + } + */ + for (i = res; i > 0; --i) + { + sTransitionStructPtr->data[2] = ((i * gUnknown_83FA444[a2]) >> 8) + 120; + if (sTransitionStructPtr->data[2] <= 255) + { + sTransitionStructPtr->bg123HOfs = 400 - i; + sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][400 - i]; + if (gScanlineEffectRegBuffers[1][560 - i] < sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][560 - i] = 120; + else if (gScanlineEffectRegBuffers[1][400 - i] < sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][400 - i] = sTransitionStructPtr->data[2]; + } + } + break; + case 1: + if (res > 80) + res = 80; + // same as PROBLEM #4 + for (i = res; i > 0; --i) + { + s16 unkVal; + + sTransitionStructPtr->data[2] = ((i * gUnknown_83FA444[a2]) >> 8) + 120; + if (sTransitionStructPtr->data[2] <= 255) + { + sTransitionStructPtr->bg123HOfs = 400 - i; + sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][400 - i]; + if (gScanlineEffectRegBuffers[1][400 - i] < sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][400 - i] = sTransitionStructPtr->data[2]; + } + } + break; + case 2: + if (res < -79) + res = -79; + // same as PROBLEM #4 + for (i = res; i <= 0; ++i) + { + sTransitionStructPtr->data[2] = ((i * gUnknown_83FA444[a2]) >> 8) + 120; + if (sTransitionStructPtr->data[2] <= 255) + { + sTransitionStructPtr->bg123HOfs = 560 - i; + sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][560 - i]; + if (gScanlineEffectRegBuffers[1][400 - i] >= sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][400 - i] = 120; + else if (gScanlineEffectRegBuffers[1][560 - i] > sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][560 - i] = sTransitionStructPtr->data[2]; + } + } + break; + case 3: + if (res < -79) + res = -79; + // same as PROBLEM #4 + for (i = res; i <= 0; ++i) + { + sTransitionStructPtr->data[2] = ((i * gUnknown_83FA444[a2]) >> 8) + 120; + if (sTransitionStructPtr->data[2] <= 255) + { + sTransitionStructPtr->bg123HOfs = 560 - i; + sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][560 - i]; + if (gScanlineEffectRegBuffers[1][560 - i] > sTransitionStructPtr->data[2]) + gScanlineEffectRegBuffers[1][560 - i] = sTransitionStructPtr->data[2]; + } + } + break; + default: + break; + } + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[1][2 * i + a3] = (gScanlineEffectRegBuffers[1][i + 320] << 8) | gScanlineEffectRegBuffers[1][i + 480]; + } +} +#else +NAKED +static void sub_80D1F64(s16 a1, s16 a2, u8 a3) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x14\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp]\n\ + lsls r1, 16\n\ + lsrs r5, r1, 16\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + str r2, [sp, 0x4]\n\ + movs r0, 0\n\ + mov r10, r0\n\ + movs r1, 0xA0\n\ + lsls r1, 17\n\ + ldr r4, _080D1FD8 @ =gScanlineEffectRegBuffers + 0x780\n\ + ldr r3, _080D1FDC @ =0x000003bf\n\ + movs r2, 0x78\n\ + _080D1F8E:\n\ + asrs r0, r1, 16\n\ + lsls r1, r0, 1\n\ + adds r1, r4\n\ + strh r2, [r1]\n\ + adds r0, 0x1\n\ + lsls r1, r0, 16\n\ + asrs r0, r1, 16\n\ + cmp r0, r3\n\ + ble _080D1F8E\n\ + lsls r0, r5, 16\n\ + movs r1, 0\n\ + mov r9, r1\n\ + str r0, [sp, 0xC]\n\ + cmp r0, 0\n\ + bgt _080D1FAE\n\ + b _080D221A\n\ + _080D1FAE:\n\ + mov r3, r10\n\ + lsrs r2, r3, 3\n\ + ldr r4, [sp]\n\ + adds r0, r2, r4\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + mov r0, r10\n\ + adds r0, 0x1\n\ + asrs r1, r0, 3\n\ + str r0, [sp, 0x8]\n\ + cmp r2, r1\n\ + beq _080D1FE0\n\ + lsls r1, r3, 16\n\ + movs r6, 0x80\n\ + lsls r6, 9\n\ + adds r0, r1, r6\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + adds r0, r1, 0\n\ + b _080D1FE6\n\ + .align 2, 0\n\ + _080D1FD8: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D1FDC: .4byte 0x000003bf\n\ + _080D1FE0:\n\ + lsls r0, r3, 16\n\ + lsrs r1, r0, 16\n\ + mov r8, r1\n\ + _080D1FE6:\n\ + asrs r4, r0, 16\n\ + mov r0, r10\n\ + adds r1, r4, 0\n\ + bl Sin\n\ + movs r5, 0x50\n\ + subs r0, r5, r0\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + mov r0, r10\n\ + adds r1, r4, 0\n\ + str r2, [sp, 0x10]\n\ + bl Cos\n\ + adds r0, 0x78\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + ldr r6, [sp, 0x8]\n\ + mov r3, r8\n\ + lsls r4, r3, 16\n\ + asrs r4, 16\n\ + adds r0, r6, 0\n\ + adds r1, r4, 0\n\ + bl Sin\n\ + subs r5, r0\n\ + lsls r5, 16\n\ + lsrs r5, 16\n\ + adds r0, r6, 0\n\ + adds r1, r4, 0\n\ + bl Cos\n\ + adds r0, 0x78\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + ldr r2, [sp, 0x10]\n\ + lsls r0, r2, 16\n\ + asrs r1, r0, 16\n\ + cmp r1, 0\n\ + bge _080D203E\n\ + lsls r0, r5, 16\n\ + cmp r0, 0\n\ + bge _080D203E\n\ + b _080D21F8\n\ + _080D203E:\n\ + cmp r1, 0x9F\n\ + ble _080D204C\n\ + lsls r0, r5, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x9F\n\ + ble _080D204C\n\ + b _080D21F8\n\ + _080D204C:\n\ + cmp r1, 0\n\ + bge _080D2052\n\ + movs r2, 0\n\ + _080D2052:\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x9F\n\ + ble _080D205C\n\ + movs r2, 0x9F\n\ + _080D205C:\n\ + lsls r0, r7, 16\n\ + cmp r0, 0\n\ + bge _080D2064\n\ + movs r7, 0\n\ + _080D2064:\n\ + lsls r0, r7, 16\n\ + asrs r0, 16\n\ + cmp r0, 0xFF\n\ + ble _080D206E\n\ + movs r7, 0xFF\n\ + _080D206E:\n\ + lsls r0, r5, 16\n\ + cmp r0, 0\n\ + bge _080D2076\n\ + movs r5, 0\n\ + _080D2076:\n\ + lsls r0, r5, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x9F\n\ + ble _080D2080\n\ + movs r5, 0x9F\n\ + _080D2080:\n\ + lsls r0, r3, 16\n\ + cmp r0, 0\n\ + bge _080D2088\n\ + movs r3, 0\n\ + _080D2088:\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + cmp r0, 0xFF\n\ + ble _080D2092\n\ + movs r3, 0xFF\n\ + _080D2092:\n\ + lsls r0, r5, 16\n\ + asrs r0, 16\n\ + lsls r1, r2, 16\n\ + asrs r2, r1, 16\n\ + subs r0, r2\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + mov r0, r10\n\ + subs r0, 0x40\n\ + lsls r0, 24\n\ + adds r6, r1, 0\n\ + cmp r0, 0\n\ + blt _080D2158\n\ + movs r4, 0xA0\n\ + lsls r4, 1\n\ + adds r0, r2, r4\n\ + lsls r0, 1\n\ + ldr r1, _080D20E8 @ =gScanlineEffectRegBuffers + 0x780\n\ + adds r0, r1\n\ + strh r7, [r0]\n\ + lsls r0, r5, 16\n\ + adds r4, r0, 0\n\ + cmp r4, 0\n\ + bne _080D20C4\n\ + b _080D21F8\n\ + _080D20C4:\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + lsls r1, r7, 16\n\ + asrs r2, r1, 16\n\ + subs r0, r2\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + asrs r0, 16\n\ + mov r8, r0\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r8, r0\n\ + bge _080D20EC\n\ + cmp r2, 0x1\n\ + ble _080D20EC\n\ + subs r0, r2, 0x1\n\ + b _080D20FC\n\ + .align 2, 0\n\ + _080D20E8: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D20EC:\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x1\n\ + ble _080D2100\n\ + asrs r0, r1, 16\n\ + cmp r0, 0xFE\n\ + bgt _080D2100\n\ + adds r0, 0x1\n\ + _080D20FC:\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + _080D2100:\n\ + adds r0, r4, 0\n\ + asrs r1, r0, 16\n\ + cmp r1, 0\n\ + bge _080D212C\n\ + asrs r2, r6, 16\n\ + ldr r3, _080D2128 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D210C:\n\ + asrs r1, r0, 16\n\ + adds r0, r2, r1\n\ + movs r4, 0xA0\n\ + lsls r4, 1\n\ + adds r0, r4\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + strh r7, [r0]\n\ + adds r1, 0x1\n\ + lsls r0, r1, 16\n\ + cmp r0, 0\n\ + blt _080D210C\n\ + b _080D21F8\n\ + .align 2, 0\n\ + _080D2128: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D212C:\n\ + cmp r1, 0\n\ + ble _080D21F8\n\ + asrs r2, r6, 16\n\ + ldr r3, _080D2154 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D2134:\n\ + lsls r1, r5, 16\n\ + asrs r1, 16\n\ + adds r0, r2, r1\n\ + movs r6, 0xA0\n\ + lsls r6, 1\n\ + adds r0, r6\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + strh r7, [r0]\n\ + subs r1, 0x1\n\ + lsls r1, 16\n\ + lsrs r5, r1, 16\n\ + cmp r1, 0\n\ + bgt _080D2134\n\ + b _080D21F8\n\ + .align 2, 0\n\ + _080D2154: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D2158:\n\ + movs r1, 0xF0\n\ + lsls r1, 1\n\ + adds r0, r2, r1\n\ + lsls r0, 1\n\ + ldr r2, _080D2190 @ =gScanlineEffectRegBuffers + 0x780\n\ + adds r0, r2\n\ + strh r7, [r0]\n\ + lsls r0, r5, 16\n\ + adds r4, r0, 0\n\ + cmp r4, 0\n\ + beq _080D21F8\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + lsls r1, r7, 16\n\ + asrs r2, r1, 16\n\ + subs r0, r2\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + asrs r0, 16\n\ + mov r8, r0\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r8, r0\n\ + bge _080D2194\n\ + cmp r2, 0x1\n\ + ble _080D2194\n\ + subs r0, r2, 0x1\n\ + b _080D21A4\n\ + .align 2, 0\n\ + _080D2190: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D2194:\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x1\n\ + ble _080D21A8\n\ + asrs r0, r1, 16\n\ + cmp r0, 0xFE\n\ + bgt _080D21A8\n\ + adds r0, 0x1\n\ + _080D21A4:\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + _080D21A8:\n\ + adds r0, r4, 0\n\ + asrs r1, r0, 16\n\ + cmp r1, 0\n\ + bge _080D21D4\n\ + asrs r2, r6, 16\n\ + ldr r3, _080D21D0 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D21B4:\n\ + asrs r1, r0, 16\n\ + adds r0, r2, r1\n\ + movs r4, 0xF0\n\ + lsls r4, 1\n\ + adds r0, r4\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + strh r7, [r0]\n\ + adds r1, 0x1\n\ + lsls r0, r1, 16\n\ + cmp r0, 0\n\ + blt _080D21B4\n\ + b _080D21F8\n\ + .align 2, 0\n\ + _080D21D0: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D21D4:\n\ + cmp r1, 0\n\ + ble _080D21F8\n\ + asrs r2, r6, 16\n\ + ldr r3, _080D2270 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D21DC:\n\ + lsls r1, r5, 16\n\ + asrs r1, 16\n\ + adds r0, r2, r1\n\ + movs r6, 0xF0\n\ + lsls r6, 1\n\ + adds r0, r6\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + strh r7, [r0]\n\ + subs r1, 0x1\n\ + lsls r1, 16\n\ + lsrs r5, r1, 16\n\ + cmp r1, 0\n\ + bgt _080D21DC\n\ + _080D21F8:\n\ + mov r1, r9\n\ + lsls r0, r1, 16\n\ + movs r2, 0x80\n\ + lsls r2, 9\n\ + adds r0, r2\n\ + ldr r3, [sp, 0x8]\n\ + lsls r1, r3, 24\n\ + lsrs r1, 24\n\ + mov r10, r1\n\ + lsrs r4, r0, 16\n\ + mov r9, r4\n\ + asrs r0, 16\n\ + ldr r6, [sp, 0xC]\n\ + asrs r1, r6, 12\n\ + cmp r0, r1\n\ + bge _080D221A\n\ + b _080D1FAE\n\ + _080D221A:\n\ + ldr r0, [sp, 0x4]\n\ + cmp r0, 0\n\ + beq _080D222C\n\ + movs r0, 0xC0\n\ + lsls r0, 10\n\ + ldr r1, [sp, 0xC]\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080D2274\n\ + _080D222C:\n\ + movs r2, 0\n\ + mov r9, r2\n\ + ldr r4, _080D2270 @ =gScanlineEffectRegBuffers + 0x780\n\ + movs r5, 0xA0\n\ + lsls r5, 1\n\ + _080D2236:\n\ + mov r3, r9\n\ + lsls r1, r3, 16\n\ + asrs r1, 16\n\ + lsls r3, r1, 1\n\ + ldr r6, [sp, 0x4]\n\ + adds r3, r6\n\ + lsls r3, 1\n\ + adds r3, r4\n\ + adds r0, r1, r5\n\ + lsls r0, 1\n\ + adds r0, r4\n\ + ldrh r2, [r0]\n\ + lsls r2, 8\n\ + movs r6, 0xF0\n\ + lsls r6, 1\n\ + adds r0, r1, r6\n\ + lsls r0, 1\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + orrs r2, r0\n\ + strh r2, [r3]\n\ + adds r1, 0x1\n\ + lsls r1, 16\n\ + lsrs r0, r1, 16\n\ + mov r9, r0\n\ + asrs r1, 16\n\ + cmp r1, 0x9F\n\ + ble _080D2236\n\ + b _080D251C\n\ + .align 2, 0\n\ + _080D2270: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D2274:\n\ + ldr r1, [sp, 0xC]\n\ + asrs r4, r1, 16\n\ + lsls r0, r4, 20\n\ + asrs r0, 16\n\ + lsls r5, r4, 1\n\ + ldr r2, [sp]\n\ + lsls r1, r2, 16\n\ + asrs r1, 16\n\ + adds r1, r5\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + bl Sin\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r4, 0\n\ + bge _080D2298\n\ + adds r4, 0x3\n\ + _080D2298:\n\ + asrs r0, r4, 2\n\ + cmp r0, 0x1\n\ + beq _080D234C\n\ + cmp r0, 0x1\n\ + bgt _080D22A8\n\ + cmp r0, 0\n\ + beq _080D22B6\n\ + b _080D24DA\n\ + _080D22A8:\n\ + cmp r0, 0x2\n\ + bne _080D22AE\n\ + b _080D23CC\n\ + _080D22AE:\n\ + cmp r0, 0x3\n\ + bne _080D22B4\n\ + b _080D2466\n\ + _080D22B4:\n\ + b _080D24DA\n\ + _080D22B6:\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x50\n\ + ble _080D22C0\n\ + movs r2, 0x50\n\ + _080D22C0:\n\ + mov r9, r2\n\ + lsls r1, r2, 16\n\ + cmp r1, 0\n\ + bgt _080D22CA\n\ + b _080D24DA\n\ + _080D22CA:\n\ + ldr r0, _080D2320 @ =gUnknown_83FA444\n\ + adds r0, r5, r0\n\ + movs r3, 0\n\ + ldrsh r4, [r0, r3]\n\ + ldr r6, _080D2324 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D22D4:\n\ + ldr r0, _080D2328 @ =sTransitionStructPtr\n\ + ldr r5, [r0]\n\ + asrs r2, r1, 16\n\ + adds r0, r2, 0\n\ + muls r0, r4\n\ + asrs r0, 8\n\ + adds r0, 0x78\n\ + lsls r1, r0, 16\n\ + lsrs r7, r1, 16\n\ + strh r0, [r5, 0x28]\n\ + lsls r1, r7, 16\n\ + lsrs r0, r1, 16\n\ + cmp r0, 0xFF\n\ + bhi _080D2334\n\ + movs r3, 0xC8\n\ + lsls r3, 1\n\ + adds r0, r3, 0\n\ + subs r0, r2\n\ + strh r0, [r5, 0x14]\n\ + adds r0, r3, 0\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + adds r3, r0, r6\n\ + ldrh r0, [r3]\n\ + strh r0, [r5, 0x38]\n\ + movs r0, 0x8C\n\ + lsls r0, 2\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + adds r2, r0, r6\n\ + ldrh r0, [r2]\n\ + asrs r1, 16\n\ + cmp r0, r1\n\ + bge _080D232C\n\ + movs r0, 0x78\n\ + strh r0, [r2]\n\ + b _080D2334\n\ + .align 2, 0\n\ + _080D2320: .4byte gUnknown_83FA444\n\ + _080D2324: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D2328: .4byte sTransitionStructPtr\n\ + _080D232C:\n\ + ldrh r0, [r3]\n\ + cmp r0, r1\n\ + bge _080D2334\n\ + strh r7, [r3]\n\ + _080D2334:\n\ + mov r1, r9\n\ + lsls r0, r1, 16\n\ + ldr r2, _080D2348 @ =0xffff0000\n\ + adds r0, r2\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + lsls r1, r0, 16\n\ + cmp r1, 0\n\ + bgt _080D22D4\n\ + b _080D24DA\n\ + .align 2, 0\n\ + _080D2348: .4byte 0xffff0000\n\ + _080D234C:\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x50\n\ + ble _080D2356\n\ + movs r2, 0x50\n\ + _080D2356:\n\ + mov r9, r2\n\ + lsls r1, r2, 16\n\ + cmp r1, 0\n\ + bgt _080D2360\n\ + b _080D24DA\n\ + _080D2360:\n\ + ldr r0, _080D23BC @ =gUnknown_83FA444\n\ + adds r0, r5, r0\n\ + movs r3, 0\n\ + ldrsh r4, [r0, r3]\n\ + ldr r6, _080D23C0 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D236A:\n\ + ldr r0, _080D23C4 @ =sTransitionStructPtr\n\ + ldr r3, [r0]\n\ + asrs r2, r1, 16\n\ + adds r0, r2, 0\n\ + muls r0, r4\n\ + asrs r0, 8\n\ + adds r0, 0x78\n\ + lsls r1, r0, 16\n\ + lsrs r7, r1, 16\n\ + strh r0, [r3, 0x28]\n\ + lsls r5, r7, 16\n\ + lsrs r0, r5, 16\n\ + cmp r0, 0xFF\n\ + bhi _080D23A6\n\ + movs r1, 0xC8\n\ + lsls r1, 1\n\ + adds r0, r1, 0\n\ + subs r0, r2\n\ + strh r0, [r3, 0x14]\n\ + adds r0, r1, 0\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + adds r2, r0, r6\n\ + ldrh r0, [r2]\n\ + strh r0, [r3, 0x38]\n\ + ldrh r1, [r2]\n\ + asrs r0, r5, 16\n\ + cmp r1, r0\n\ + bge _080D23A6\n\ + strh r7, [r2]\n\ + _080D23A6:\n\ + mov r2, r9\n\ + lsls r0, r2, 16\n\ + ldr r3, _080D23C8 @ =0xffff0000\n\ + adds r0, r3\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + lsls r1, r0, 16\n\ + cmp r1, 0\n\ + bgt _080D236A\n\ + b _080D24DA\n\ + .align 2, 0\n\ + _080D23BC: .4byte gUnknown_83FA444\n\ + _080D23C0: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D23C4: .4byte sTransitionStructPtr\n\ + _080D23C8: .4byte 0xffff0000\n\ + _080D23CC:\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + movs r1, 0x4F\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + bge _080D23DA\n\ + ldr r2, _080D2438 @ =0x0000ffb1\n\ + _080D23DA:\n\ + mov r9, r2\n\ + lsls r1, r2, 16\n\ + cmp r1, 0\n\ + bgt _080D24DA\n\ + ldr r0, _080D243C @ =gUnknown_83FA444\n\ + adds r0, r5, r0\n\ + movs r6, 0\n\ + ldrsh r4, [r0, r6]\n\ + ldr r6, _080D2440 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D23EC:\n\ + ldr r0, _080D2444 @ =sTransitionStructPtr\n\ + ldr r5, [r0]\n\ + asrs r2, r1, 16\n\ + adds r0, r2, 0\n\ + muls r0, r4\n\ + asrs r0, 8\n\ + adds r0, 0x78\n\ + lsls r1, r0, 16\n\ + lsrs r7, r1, 16\n\ + strh r0, [r5, 0x28]\n\ + lsls r1, r7, 16\n\ + lsrs r0, r1, 16\n\ + cmp r0, 0xFF\n\ + bhi _080D2450\n\ + movs r3, 0x8C\n\ + lsls r3, 2\n\ + adds r0, r3, 0\n\ + subs r0, r2\n\ + strh r0, [r5, 0x14]\n\ + adds r0, r3, 0\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + adds r3, r0, r6\n\ + ldrh r0, [r3]\n\ + strh r0, [r5, 0x38]\n\ + movs r0, 0xC8\n\ + lsls r0, 1\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + adds r2, r0, r6\n\ + ldrh r0, [r2]\n\ + asrs r1, 16\n\ + cmp r0, r1\n\ + blt _080D2448\n\ + movs r0, 0x78\n\ + strh r0, [r2]\n\ + b _080D2450\n\ + .align 2, 0\n\ + _080D2438: .4byte 0x0000ffb1\n\ + _080D243C: .4byte gUnknown_83FA444\n\ + _080D2440: .4byte gScanlineEffectRegBuffers + 0x780\n\ + _080D2444: .4byte sTransitionStructPtr\n\ + _080D2448:\n\ + ldrh r0, [r3]\n\ + cmp r0, r1\n\ + ble _080D2450\n\ + strh r7, [r3]\n\ + _080D2450:\n\ + mov r1, r9\n\ + lsls r0, r1, 16\n\ + movs r2, 0x80\n\ + lsls r2, 9\n\ + adds r0, r2\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + lsls r1, r0, 16\n\ + cmp r1, 0\n\ + ble _080D23EC\n\ + b _080D24DA\n\ + _080D2466:\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + movs r1, 0x4F\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + bge _080D2474\n\ + ldr r2, _080D252C @ =0x0000ffb1\n\ + _080D2474:\n\ + mov r9, r2\n\ + lsls r1, r2, 16\n\ + cmp r1, 0\n\ + bgt _080D24DA\n\ + ldr r0, _080D2530 @ =gUnknown_83FA444\n\ + adds r0, r5, r0\n\ + movs r3, 0\n\ + ldrsh r4, [r0, r3]\n\ + ldr r6, _080D2534 @ =sTransitionStructPtr\n\ + mov r8, r6\n\ + ldr r6, _080D2538 @ =gScanlineEffectRegBuffers + 0x780\n\ + _080D248A:\n\ + mov r0, r8\n\ + ldr r3, [r0]\n\ + asrs r2, r1, 16\n\ + adds r0, r2, 0\n\ + muls r0, r4\n\ + asrs r0, 8\n\ + adds r0, 0x78\n\ + lsls r1, r0, 16\n\ + lsrs r7, r1, 16\n\ + strh r0, [r3, 0x28]\n\ + lsls r5, r7, 16\n\ + lsrs r0, r5, 16\n\ + cmp r0, 0xFF\n\ + bhi _080D24C6\n\ + movs r1, 0x8C\n\ + lsls r1, 2\n\ + adds r0, r1, 0\n\ + subs r0, r2\n\ + strh r0, [r3, 0x14]\n\ + adds r0, r1, 0\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + adds r2, r0, r6\n\ + ldrh r0, [r2]\n\ + strh r0, [r3, 0x38]\n\ + ldrh r1, [r2]\n\ + asrs r0, r5, 16\n\ + cmp r1, r0\n\ + ble _080D24C6\n\ + strh r7, [r2]\n\ + _080D24C6:\n\ + mov r2, r9\n\ + lsls r0, r2, 16\n\ + movs r3, 0x80\n\ + lsls r3, 9\n\ + adds r0, r3\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + lsls r1, r0, 16\n\ + cmp r1, 0\n\ + ble _080D248A\n\ + _080D24DA:\n\ + movs r4, 0\n\ + mov r9, r4\n\ + ldr r4, _080D2538 @ =gScanlineEffectRegBuffers + 0x780\n\ + movs r5, 0xA0\n\ + lsls r5, 1\n\ + _080D24E4:\n\ + mov r6, r9\n\ + lsls r1, r6, 16\n\ + asrs r1, 16\n\ + lsls r3, r1, 1\n\ + ldr r0, [sp, 0x4]\n\ + adds r3, r0\n\ + lsls r3, 1\n\ + adds r3, r4\n\ + adds r0, r1, r5\n\ + lsls r0, 1\n\ + adds r0, r4\n\ + ldrh r2, [r0]\n\ + lsls r2, 8\n\ + movs r6, 0xF0\n\ + lsls r6, 1\n\ + adds r0, r1, r6\n\ + lsls r0, 1\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + orrs r2, r0\n\ + strh r2, [r3]\n\ + adds r1, 0x1\n\ + lsls r1, 16\n\ + lsrs r0, r1, 16\n\ + mov r9, r0\n\ + asrs r1, 16\n\ + cmp r1, 0x9F\n\ + ble _080D24E4\n\ + _080D251C:\n\ + add sp, 0x14\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ + _080D252C: .4byte 0x0000ffb1\n\ + _080D2530: .4byte gUnknown_83FA444\n\ + _080D2534: .4byte sTransitionStructPtr\n\ + _080D2538: .4byte gScanlineEffectRegBuffers + 0x780\n\ + "); +} +#endif + +static bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task) +{ + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + sTransitionStructPtr->winIn = 0; + sTransitionStructPtr->winOut = 0x3F; + sTransitionStructPtr->win0H = 0x7878; + sTransitionStructPtr->win0V = 0x3070; + sTransitionStructPtr->win1V = 0x1090; + sTransitionStructPtr->counter = 0; + sub_80D1F64(0, 0, FALSE); + sub_80D1F64(0, 0, TRUE); + DmaCopy16(3, gScanlineEffectRegBuffers[1], gScanlineEffectRegBuffers[0], 640); + SetVBlankCallback(VBCB_BT_Phase2AntiClockwiseBlackFade); + ++task->tState; + task->data[1] = 0; + task->data[2] = 0; + return FALSE; +} + +static bool8 BT_Phase2AntiClockwiseSpiral_Update(struct Task *task) +{ + s16 v0, v1; + + sub_80D1F64(task->data[2], task->data[1], TRUE); + sTransitionStructPtr->vblankDma |= TRUE; + if (++task->data[1] == 17) + { + sub_80D1F64(task->data[2], 16, FALSE); + v0 = 48 - task->data[2]; + if (v0 < 0) + v0 = 0; + v1 = task->data[2] + 112; + if (v1 > 255) + v1 = 255; + sTransitionStructPtr->win0V = v0 | v1; + task->data[2] += 32; + task->data[1] = 0; + sub_80D1F64(task->data[2], 0, TRUE); + v0 = 48 - task->data[2]; + if (v0 < 0) + v0 = 0; + v1 = task->data[2] + 112; + if (v1 > 255) + v1 = 255; + sTransitionStructPtr->win1V = v0 | v1; + sTransitionStructPtr->vblankDma |= TRUE; + if (task->data[2] > 159) + { + sTransitionStructPtr->counter = 1; + BT_BlendPalettesToBlack(); + } + } + return FALSE; +} + +static void VBCB_BT_Phase2AntiClockwiseBlackFade(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->counter) + { + DestroyTask(FindTaskIdByFunc(BT_Phase2AntiClockwiseSpiral)); + } + else + { + if (sTransitionStructPtr->vblankDma) + { + DmaCopy16(3, gScanlineEffectRegBuffers[1], gScanlineEffectRegBuffers[0], 640); + sTransitionStructPtr->vblankDma = FALSE; + } + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + SetGpuReg(REG_OFFSET_WIN1V, sTransitionStructPtr->win1V); + SetGpuReg(REG_OFFSET_WIN0H, gScanlineEffectRegBuffers[0][0]); + SetGpuReg(REG_OFFSET_WIN1H, gScanlineEffectRegBuffers[0][1]); + DmaSet(0, gScanlineEffectRegBuffers[0], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); + } +} + +#define tTheta data[1] +#define tbg0HOfsOpponent data[2] +#define tbg0HOfsPlayer data[3] +#define tCounter data[3] +#define tHalfBandwidth data[4] +#define tOpponentSpriteId data[13] +#define tPlayerSpriteId data[14] +#define tWhichMugshot data[15] + +#define spState data[0] +#define spSpeed data[1] +#define spAbsAcc data[2] +#define sphasSlideFinished data[6] +#define spOpponentOrPlayer data[7] + +static void BT_Phase2StartLoreleiMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_LORELEI; + BT_Phase2Mugshot(taskId); +} + +static void BT_Phase2StartBrunoMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_BRUNO; + BT_Phase2Mugshot(taskId); +} + +static void BT_Phase2StartAgathaMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_AGATHA; + BT_Phase2Mugshot(taskId); +} + +static void BT_Phase2StartLanceMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_LANCE; + BT_Phase2Mugshot(taskId); +} + +static void BT_Phase2StartBlueMugshot(u8 taskId) +{ + gTasks[taskId].tWhichMugshot = MUGSHOT_BLUE; + BT_Phase2Mugshot(taskId); +} + +static void BT_Phase2Mugshot(u8 taskId) +{ + while (sBT_Phase2MugshotFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase2Mugshot_Init(struct Task *task) +{ + u8 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + BT_Phase2Mugshots_CreateSprites(task); + task->tTheta = 0; + task->tbg0HOfsOpponent = 1; + task->tbg0HOfsPlayer = 239; + sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winOut = 0x3E; + sTransitionStructPtr->win0V = 160; + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[1][i] = 0xF0F1; + SetVBlankCallback(VBCB_BT_Phase2Mugshot1_Slide); + ++task->tState; + return FALSE; +} + +static bool8 BT_Phase2Mugshot_LoadGfx(struct Task *task) +{ + s16 i, j; + u16 *tilemapAddr, *tilesetAddr; + const u16 *mugshotsMap = sVsBarTilemap; + + BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); + CpuSet(sVsBarTileset, tilesetAddr, 0xF0); + LoadPalette(sVsBarOpponentPalettes[task->tWhichMugshot], 0xF0, 0x20); + LoadPalette(sVsBarPlayerPalettes[gSaveBlock2Ptr->playerGender], 0xFA, 0xC); + for (i = 0; i < 20; ++i) + for (j = 0; j < 32; ++j, ++mugshotsMap) + tilemapAddr[i * 32 + j] = *mugshotsMap | 0xF000; // use palette #15 + EnableInterrupts(INTR_FLAG_HBLANK); + SetHBlankCallback(HBCB_BT_Phase2Mugshot); + ++task->tState; + return FALSE; +} + +static bool8 BT_Phase2Mugshot_VsBarsSlideIn(struct Task *task) +{ + u8 i, theta; + u16 *winVal; + s16 value; + s32 mergedBg0hOfs; + + sTransitionStructPtr->vblankDma = FALSE; + + winVal = gScanlineEffectRegBuffers[0]; + theta = task->tTheta; + task->tTheta += 0x10; + for (i = 0; i < 80; ++i, ++winVal, theta += 0x10) + { + value = task->tbg0HOfsOpponent + Sin(theta, 0x10); + if (value < 0) + value = 1; + if (value > 0xF0) + value = 0xF0; + *winVal = value; + } + for (; i < 160; ++i, ++winVal, theta += 0x10) + { + value = task->tCounter - Sin(theta, 0x10); + if (value < 0) + value = 0; + if (value > 0xEF) + value = 0xEF; + *winVal = (value << 8) | (0xF0); + } + task->tbg0HOfsOpponent += 8; + task->tCounter -= 8; + if (task->tbg0HOfsOpponent > 0xF0) + task->tbg0HOfsOpponent = 0xF0; + if (task->tCounter < 0) + task->tCounter = 0; + mergedBg0hOfs = *(s32 *)(&task->tbg0HOfsOpponent); + if (mergedBg0hOfs == 0x00F0) + ++task->tState; + sTransitionStructPtr->bg0HOfsOpponent -= 8; + sTransitionStructPtr->bg0HOfsPlayer += 8; + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2Mugshot_StartSpriteSlide(struct Task *task) +{ + u8 i; + u16 *winVal; + + sTransitionStructPtr->vblankDma = FALSE; + for (i = 0, winVal = gScanlineEffectRegBuffers[0]; i < 160; ++i, ++winVal) + *winVal = 0xF0; + ++task->tState; + task->tTheta = 0; + task->tbg0HOfsOpponent = 0; + task->tbg0HOfsPlayer = 0; + sTransitionStructPtr->bg0HOfsOpponent -= 8; + sTransitionStructPtr->bg0HOfsPlayer += 8; + BT_SetSpriteAsOpponentOrPlayer(task->tOpponentSpriteId, FALSE); + BT_SetSpriteAsOpponentOrPlayer(task->tPlayerSpriteId, TRUE); + BT_StartSpriteSlide(task->tOpponentSpriteId); + PlaySE(SE_C_MAKU_U); + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2Mugshot_WaitForOpponentInPlace(struct Task *task) +{ + sTransitionStructPtr->bg0HOfsOpponent -= 8; + sTransitionStructPtr->bg0HOfsPlayer += 8; + if (BT_IsSpriteSlideFinished(task->tOpponentSpriteId)) + { + ++task->tState; + BT_StartSpriteSlide(task->tPlayerSpriteId); + } + return FALSE; +} + +static bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task) +{ + sTransitionStructPtr->bg0HOfsOpponent -= 8; + sTransitionStructPtr->bg0HOfsPlayer += 8; + if (BT_IsSpriteSlideFinished(task->tPlayerSpriteId)) + { + sTransitionStructPtr->vblankDma = FALSE; + SetVBlankCallback(NULL); + DmaStop(0); + memset(gScanlineEffectRegBuffers[0], 0, 320); + memset(gScanlineEffectRegBuffers[1], 0, 320); + SetGpuReg(REG_OFFSET_WIN0H, 0xF0); + SetGpuReg(REG_OFFSET_BLDY, 0); + ++task->tState; + task->tCounter = 0; + task->tHalfBandwidth = 0; + sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN; + SetVBlankCallback(VBCB_BT_Phase2Mugshot2_WhiteFade); + } + return FALSE; +} + +static bool8 BT_Phase2Mugshot_ExpandWhiteBand(struct Task *task) +{ + bool32 nextFunc; + + sTransitionStructPtr->vblankDma = FALSE; + nextFunc = TRUE; + sTransitionStructPtr->bg0HOfsOpponent -= 8; + sTransitionStructPtr->bg0HOfsPlayer += 8; + if (task->tHalfBandwidth < 80) + task->tHalfBandwidth += 2; + if (task->tHalfBandwidth > 80) + task->tHalfBandwidth = 80; + if (++task->tCounter & 1) + { + s16 i; + + for (i = 0, nextFunc = FALSE; i <= task->tHalfBandwidth; ++i) + { + s16 y1 = 80 - i; + s16 y2 = 80 + i; + + if (gScanlineEffectRegBuffers[0][y1] <= 15) + { + nextFunc = TRUE; + ++gScanlineEffectRegBuffers[0][y1]; + } + if (gScanlineEffectRegBuffers[0][y2] <= 15) + { + nextFunc = TRUE; + ++gScanlineEffectRegBuffers[0][y2]; + } + } + } + if (task->tHalfBandwidth == 80 && !nextFunc) + ++task->tState; + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2Mugshot_StartBlackFade(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE); + sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN; + task->tCounter = 0; + ++task->tState; + return TRUE; +} + +static bool8 BT_Phase2Mugshot_WaitForBlackFade(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + ++task->tCounter; + memset(gScanlineEffectRegBuffers[0], task->tCounter, 320); + if (task->tCounter > 15) + ++task->tState; + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2Mugshot_End(struct Task *task) +{ + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(task->func)); + return FALSE; +} + +static void VBCB_BT_Phase2Mugshot1_Slide(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + SetGpuReg(REG_OFFSET_BG0VOFS, sTransitionStructPtr->bg0VOfs); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +static void VBCB_BT_Phase2Mugshot2_WhiteFade(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + SetGpuReg(REG_OFFSET_BLDCNT, sTransitionStructPtr->bldCnt); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_BLDY, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +static void HBCB_BT_Phase2Mugshot(void) +{ + if (REG_VCOUNT < 80) + REG_BG0HOFS = sTransitionStructPtr->bg0HOfsOpponent; + else + REG_BG0HOFS = sTransitionStructPtr->bg0HOfsPlayer; +} + + +static void BT_Phase2Mugshots_CreateSprites(struct Task *task) +{ + struct Sprite *opponentSprite, *playerSprite; + s16 mugshotId; + + gReservedSpritePaletteCount = 10; + mugshotId = task->tWhichMugshot; + task->tOpponentSpriteId = CreateTrainerSprite(sMugshotsTrainerPicIDsTable[mugshotId], sMugshotsOpponentCoords[mugshotId][0] - 32, sMugshotsOpponentCoords[mugshotId][1] + 42, 0, gDecompressionBuffer); + task->tPlayerSpriteId = CreateTrainerSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 272, 106, 0, gDecompressionBuffer); + gReservedSpritePaletteCount = 12; + opponentSprite = &gSprites[task->tOpponentSpriteId]; + playerSprite = &gSprites[task->tPlayerSpriteId]; + opponentSprite->callback = SpriteCB_BT_Phase2Mugshots; + playerSprite->callback = SpriteCB_BT_Phase2Mugshots; + opponentSprite->oam.affineMode = 3; + playerSprite->oam.affineMode = 3; + opponentSprite->oam.matrixNum = AllocOamMatrix(); + playerSprite->oam.matrixNum = AllocOamMatrix(); + opponentSprite->oam.shape = 1; + playerSprite->oam.shape = 1; + opponentSprite->oam.size = 3; + playerSprite->oam.size = 3; + CalcCenterToCornerVec(opponentSprite, 1, 3, 3); + CalcCenterToCornerVec(playerSprite, 1, 3, 3); + SetOamMatrixRotationScaling(opponentSprite->oam.matrixNum, sMugshotsOpponentRotationScales[mugshotId][0], sMugshotsOpponentRotationScales[mugshotId][1], 0); + SetOamMatrixRotationScaling(playerSprite->oam.matrixNum, -512, 512, 0); +} + +static void SpriteCB_BT_Phase2Mugshots(struct Sprite *sprite) +{ + while (sBT_Phase2MugshotSpriteFuncs[sprite->spState](sprite)); +} + +static bool8 BT_Phase2MugshotsSpriteFuncs_Wait(struct Sprite *sprite) +{ + return FALSE; +} + +static bool8 BT_Phase2MugshotsSpriteFuncs_InitParams(struct Sprite *sprite) +{ + s16 arr0[2]; + s16 arr1[2]; + + memcpy(arr0, sMugShotSlideVelocity, sizeof(sMugShotSlideVelocity)); + memcpy(arr1, sMugShotSlideDeceleration, sizeof(sMugShotSlideDeceleration)); + ++sprite->spState; + sprite->spSpeed = arr0[sprite->spOpponentOrPlayer]; + sprite->spAbsAcc = arr1[sprite->spOpponentOrPlayer]; + return TRUE; +} + +static bool8 BT_Phase2MugshotsSpriteFuncs_SlideSpriteIn(struct Sprite *sprite) +{ + sprite->pos1.x += sprite->spSpeed; + if (sprite->spOpponentOrPlayer && sprite->pos1.x < 133) + ++sprite->spState; + else if (!sprite->spOpponentOrPlayer && sprite->pos1.x > 103) + ++sprite->spState; + return FALSE; +} + +static bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite(struct Sprite *sprite) +{ + sprite->spSpeed += sprite->spAbsAcc; + sprite->pos1.x += sprite->spSpeed; + if (sprite->spSpeed == 0) + { + ++sprite->spState; + sprite->spAbsAcc = -sprite->spAbsAcc; + sprite->sphasSlideFinished = 1; + } + return FALSE; +} + +// not used +static bool8 BT_Phase2MugshotsSpriteFuncs_DecelerateSprite2(struct Sprite *sprite) +{ + sprite->spSpeed += sprite->spAbsAcc; + sprite->pos1.x += sprite->spSpeed; + if (sprite->pos1.x < -31 || sprite->pos1.x > 271) + ++sprite->spState; + return FALSE; +} + +static void BT_SetSpriteAsOpponentOrPlayer(s16 spriteId, bool16 value) +{ + gSprites[spriteId].spOpponentOrPlayer = value; +} + +static void BT_StartSpriteSlide(s16 spriteId) +{ + ++gSprites[spriteId].spState; +} + +static s16 BT_IsSpriteSlideFinished(s16 spriteId) +{ + return gSprites[spriteId].sphasSlideFinished; +} + +#undef tTheta +#undef tbg0HOfsOpponent +#undef tbg0HOfsPlayer +#undef tCounter +#undef tHalfBandwidth +#undef tOpponentSpriteId +#undef tPlayerSpriteId +#undef tWhichMugshot + +#undef spState +#undef spSpeed +#undef spAbsAcc +#undef sphasSlideFinished +#undef spOpponentOrPlayer + +#define tSpeed data[1] +#define tAcc data[2] +#define tJerk data[3] + +static void BT_Phase2SlicedScreen(u8 taskId) +{ + while (sBT_Phase2SlicedScreenFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase2SlicedScreen_Init(struct Task *task) +{ + u16 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + task->tAcc = 256; + task->tJerk = 1; + sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winOut = 0; + sTransitionStructPtr->win0V = 160; + for (i = 0; i < 160; ++i) + { + gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->bg123HOfs; + gScanlineEffectRegBuffers[1][160 + i] = 0xF0; + } + EnableInterrupts(INTR_FLAG_HBLANK); + SetVBlankCallback(VBCB_BT_Phase2SlicedScreen); + SetHBlankCallback(HBCB_BT_Phase2SlicedScreen); + ++task->tState; + return TRUE; +} + +static bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task) +{ + u16 i; + + sTransitionStructPtr->vblankDma = FALSE; + task->tSpeed += (task->tAcc >> 8); + if (task->tSpeed > 0xF0) + task->tSpeed = 0xF0; + if (task->tAcc <= 0xFFF) + task->tAcc += task->tJerk; + if (task->tJerk < 128) + task->tJerk <<= 1; + for (i = 0; i < 160; ++i) + { + u16 *ofsBuffer = &gScanlineEffectRegBuffers[0][i]; + u16 *win0HBuffer = &gScanlineEffectRegBuffers[0][i + 160]; + if (i & 1) + { + *ofsBuffer = sTransitionStructPtr->bg123HOfs + task->tSpeed; + *win0HBuffer = 0xF0 - task->tSpeed; + } + else + { + *ofsBuffer = sTransitionStructPtr->bg123HOfs - task->tSpeed; + *win0HBuffer = (task->tSpeed << 8) | 0xF1; + } + } + if (task->tSpeed > 0xEF) + ++task->tState; + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2SlicedScreen_End(struct Task *task) +{ + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2SlicedScreen)); + return FALSE; +} + +static void VBCB_BT_Phase2SlicedScreen(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640); + DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +static void HBCB_BT_Phase2SlicedScreen(void) +{ + s16 offset = gScanlineEffectRegBuffers[1][REG_VCOUNT]; + + REG_BG1HOFS = offset; + REG_BG2HOFS = offset; + REG_BG3HOFS = offset; +} + +#undef tSpeed +#undef tAcc +#undef tJerk + +#define spBldyCounter data[0] +#define spFinished data[1] +#define spAltDelay data[2] +#define spDelay data[5] +#define spLastSprite data[6] + +static void BT_Phase2WhiteFadeInStripes(u8 taskId) +{ + while (sBT_Phase2WhiteFadeInStripesFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task) +{ + u16 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN; + sTransitionStructPtr->bldY = 0; + sTransitionStructPtr->winIn = 0x1E; + sTransitionStructPtr->winOut = 0x3F; + sTransitionStructPtr->win0V = 160; + for (i = 0; i < 160; ++i) + { + gScanlineEffectRegBuffers[1][i] = 0; + gScanlineEffectRegBuffers[1][i + 160] = 0xF0; + } + EnableInterrupts(INTR_FLAG_HBLANK); + SetHBlankCallback(HBCB_BT_Phase2WhiteFadeInStripes); + SetVBlankCallback(VBCB_BT_Phase2WhiteFadeInStripes1); + ++task->tState; + return FALSE; +} + +static bool8 BT_Phase2WhiteFadeInStripes_SetupSprites(struct Task *task) +{ + s16 i, posY; + s16 buffer[NELEMS(sWhiteStripeDelay)]; + struct Sprite *sprite; + + memcpy(buffer, sWhiteStripeDelay, sizeof(sWhiteStripeDelay)); + for (i = 0, posY = 0; i < 6; ++i, posY += 0x1B) + { + sprite = &gSprites[CreateInvisibleSprite(SpriteCB_BT_Phase2WhiteFadeInStripes)]; + sprite->pos1.x = 0xF0; + sprite->pos1.y = posY; + sprite->spDelay = buffer[i]; + } + ++sprite->spLastSprite; + ++task->tState; + return FALSE; +} + +static bool8 BT_Phase2WhiteFadeInStripes_IsWhiteFadeDone(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + if (sTransitionStructPtr->counter > 5) + { + BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE); + ++task->tState; + } + return FALSE; +} + +static bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task) +{ + sTransitionStructPtr->vblankDma = FALSE; + DmaStop(0); + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); + sTransitionStructPtr->win0H = 240; + sTransitionStructPtr->bldY = 0; + sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN; + sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->counter = 0; + SetVBlankCallback(VBCB_BT_Phase2WhiteFadeInStripes2); + ++task->tState; + return FALSE; +} + +static bool8 BT_Phase2WhiteFadeInStripes_IsDone(struct Task *task) +{ + sTransitionStructPtr->counter += 480; + sTransitionStructPtr->bldY = sTransitionStructPtr->counter >> 8; + if (sTransitionStructPtr->bldY > 16) + { + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2WhiteFadeInStripes)); + } + return FALSE; +} + +static void VBCB_BT_Phase2WhiteFadeInStripes1(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + SetGpuReg(REG_OFFSET_BLDCNT, sTransitionStructPtr->bldCnt); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0H); // BUG: This should obviously be sTransitionStructPtr->win0V + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640); + DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +static void VBCB_BT_Phase2WhiteFadeInStripes2(void) +{ + BT_VBSyncOamAndPltt(); + SetGpuReg(REG_OFFSET_BLDY, sTransitionStructPtr->bldY); + SetGpuReg(REG_OFFSET_BLDCNT, sTransitionStructPtr->bldCnt); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0H, sTransitionStructPtr->win0H); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); +} + + +static void HBCB_BT_Phase2WhiteFadeInStripes(void) +{ + vu16 index = REG_VCOUNT; + + if (index == 227) + index = 0; + REG_BLDY = gScanlineEffectRegBuffers[1][index]; +} + +static void SpriteCB_BT_Phase2WhiteFadeInStripes(struct Sprite *sprite) +{ + if (sprite->spDelay) + { + --sprite->spDelay; + if (sprite->spLastSprite) + sTransitionStructPtr->vblankDma = TRUE; + } + else + { + u16 i; + u16 *bldY = &gScanlineEffectRegBuffers[0][sprite->pos1.y]; + u16 *win0H = &gScanlineEffectRegBuffers[0][sprite->pos1.y + 160]; + u32 stripeWidth = sprite->spLastSprite ? 0x19 : 0x1B; + + for (i = 0; i < stripeWidth; ++i) + { + bldY[i] = sprite->spBldyCounter >> 8; + win0H[i] = (u8)(sprite->pos1.x); + } + if (sprite->pos1.x == 0 && sprite->spBldyCounter == 0x1000) + sprite->spFinished = 1; + sprite->pos1.x -= 24; + sprite->spBldyCounter += 192; + if (sprite->pos1.x < 0) + sprite->pos1.x = 0; + if (sprite->spBldyCounter > 0x1000) + sprite->spBldyCounter = 0x1000; + if (sprite->spLastSprite) + sTransitionStructPtr->vblankDma = TRUE; + if (sprite->spFinished) + { + if (sprite->spLastSprite == FALSE || (sTransitionStructPtr->counter > 4)) + { + ++sTransitionStructPtr->counter; + DestroySprite(sprite); + } + } + } +} + +#undef spBldyCounter +#undef spFinished +#undef spAltDelay +#undef spDelay +#undef spLastSprite + +#define tDelay data[1] +#define tWhichGrid data[2] + +static void BT_Phase2GridSquares(u8 taskId) +{ + while (sBT_Phase2GridSquaresFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase2GridSquares_LoadGfx(struct Task *task) +{ + u16 *tilemapAddr, *tilesetAddr; + + BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); + CpuSet(sGridSquareTileset, tilesetAddr, 0x10); + CpuFill16(0xF000, tilemapAddr, 0x800); + LoadPalette(sSlidingPokeballBigPokeballPalette, 0xF0, 0x20); + ++task->tState; + return FALSE; +} + +static bool8 BT_Phase2GridSquares_UpdateTileset(struct Task *task) +{ + u16 *tilesetAddr; + + if (task->tDelay == 0) + { + BT_GetBg0TilesetBase(&tilesetAddr); + task->tDelay = 3; + ++task->tWhichGrid; + CpuSet(sGridSquareTileset + (task->tWhichGrid * 8), tilesetAddr, 0x10); + if (task->tWhichGrid > 0xD) + { + ++task->tState; + task->tDelay = 16; + } + } + --task->tDelay; + return FALSE; +} + +static bool8 BT_Phase2GridSquares_IsDone(struct Task *task) +{ + if (--task->tDelay == 0) + { + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2GridSquares)); + } + return FALSE; +} + +#undef tDelay +#undef tWhichGrid + +#define tWhichBrush data[1] +#define tWhichSide data[2] +#define tDelay data[3] + +#define trCurrentPtX data[2] +#define trCurrentPtY data[3] + +static void BT_Phase2BlackDoodles(u8 taskId) +{ + while (sBT_Phase2BlackDoodlesFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase2BlackDoodles_Init(struct Task *task) +{ + u16 i; + + BT_InitCtrlBlk(); + ScanlineEffect_Clear(); + sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winOut = 0; + sTransitionStructPtr->win0V = 0xA0; + for (i = 0; i < 160; ++i) + gScanlineEffectRegBuffers[0][i] = 0x00F0; + CpuSet(gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 160); + SetVBlankCallback(VBCB_BT_Phase2BlackDoodles); + ++task->tState; + return TRUE; +} + +static bool8 BT_Phase2BlackDoodles_InitSingleBrush(struct Task *task) +{ + BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, sBlackDoodlesSegments[task->tWhichBrush][0], sBlackDoodlesSegments[task->tWhichBrush][1], sBlackDoodlesSegments[task->tWhichBrush][2], sBlackDoodlesSegments[task->tWhichBrush][3], 1, 1); + task->tWhichSide = sBlackDoodlesSegments[task->tWhichBrush][4]; + ++task->tState; + return TRUE; +} + +static bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task) +{ + s16 i; + bool8 nextFunc; + + sTransitionStructPtr->vblankDma = FALSE; + for (i = 0, nextFunc = FALSE; i < 16; ++i) + { + s16 left = gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] >> 8; + s16 right = gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] & 0xFF; + if (task->tWhichSide == 0) + { + if (left < sTransitionStructPtr->trCurrentPtX) + left = sTransitionStructPtr->trCurrentPtX; + if (left > right) + left = right; + } + else + { + if (right > sTransitionStructPtr->trCurrentPtX) + right = sTransitionStructPtr->trCurrentPtX; + if (right <= left) + right = left; + } + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + if (nextFunc) + { + ++task->tState; + break; + } + else + nextFunc = BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE); + } + ++sTransitionStructPtr->vblankDma; + return FALSE; +} + +static bool8 BT_Phase2BlackDoodles_IsDone(struct Task *task) +{ + if (++task->tWhichBrush < 7) + { + ++task->tState; + task->tDelay = sBlackDoodlesDelay[task->tWhichBrush - 1]; + return TRUE; + } + else + { + DmaStop(0); + BT_BlendPalettesToBlack(); + DestroyTask(FindTaskIdByFunc(BT_Phase2BlackDoodles)); + return FALSE; + } +} + +static bool8 BT_Phase2BlackDoodles_NextBrush(struct Task *task) +{ + if (--task->tDelay == 0) + { + task->tState = 1; + return TRUE; + } + else + return FALSE; +} + +static void VBCB_BT_Phase2BlackDoodles(void) +{ + DmaStop(0); + BT_VBSyncOamAndPltt(); + if (sTransitionStructPtr->vblankDma) + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); + SetGpuReg(REG_OFFSET_WININ, sTransitionStructPtr->winIn); + SetGpuReg(REG_OFFSET_WINOUT, sTransitionStructPtr->winOut); + SetGpuReg(REG_OFFSET_WIN0V, sTransitionStructPtr->win0V); + SetGpuReg(REG_OFFSET_WIN0H, gScanlineEffectRegBuffers[1][0]); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_16BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 1); +} + +#undef tWhichBrush +#undef tWhichSide +#undef tDelay + +#undef trCurrentPtX +#undef trCurrentPtY + +#define tFadeOutDelay data[1] +#define tFadeInDelay data[2] +#define tBlinkTimes data[3] +#define tFadeOutSpeed data[4] +#define tFadeInSpeed data[5] +#define tDelayCounter data[6] +#define tCoeff data[7] + +static void BT_CreatePhase1SubTask(s16 fadeOutDelay, s16 fadeInDelay, s16 blinkTimes, s16 fadeOutSpeed, s16 fadeInSpeed) +{ + u8 taskId = CreateTask(BT_Phase1SubTask, 3); + gTasks[taskId].tFadeOutDelay = fadeOutDelay; + gTasks[taskId].tFadeInDelay = fadeInDelay; + gTasks[taskId].tBlinkTimes = blinkTimes; + gTasks[taskId].tFadeOutSpeed = fadeOutSpeed; + gTasks[taskId].tFadeInSpeed = fadeInSpeed; + gTasks[taskId].tDelayCounter = fadeOutDelay; +} + +static bool8 BT_IsPhase1Done(void) +{ + if (FindTaskIdByFunc(BT_Phase1SubTask) == TASK_NONE) + return TRUE; + else + return FALSE; +} + +static void BT_Phase1SubTask(u8 taskId) +{ + while (sBT_Phase1FadeFuncs[gTasks[taskId].tState](&gTasks[taskId])); +} + +static bool8 BT_Phase1_FadeOut(struct Task *task) +{ + if (task->tDelayCounter == 0 || --task->tDelayCounter == 0) + { + task->tDelayCounter = task->tFadeOutDelay; + task->tCoeff += task->tFadeOutSpeed; + if (task->tCoeff > 16) + task->tCoeff = 16; + BlendPalettes(-1, task->tCoeff, RGB(11, 11, 11)); + } + if (task->tCoeff > 15) + { + ++task->tState; + task->tDelayCounter = task->tFadeInDelay; + } + return FALSE; +} + +static bool8 BT_Phase1_FadeIn(struct Task *task) +{ + if (task->tDelayCounter == 0 || --task->tDelayCounter == 0) + { + task->tDelayCounter = task->tFadeInDelay; + task->tCoeff -= task->tFadeInSpeed; + if (task->tCoeff < 0) + task->tCoeff = 0; + BlendPalettes(0xFFFFFFFF, task->tCoeff, RGB(11, 11, 11)); + } + if (task->tCoeff == 0) + { + if (--task->tBlinkTimes == 0) + { + DestroyTask(FindTaskIdByFunc(BT_Phase1SubTask)); + } + else + { + task->tDelayCounter = task->tFadeOutDelay; + task->tState = 0; + } + } + return FALSE; +} + +#undef tFadeOutDelay +#undef tFadeInDelay +#undef tBlinkTimes +#undef tFadeOutSpeed +#undef tFadeInSpeed +#undef tDelayCounter +#undef tCoeff + +static void BT_InitCtrlBlk(void) +{ + memset(sTransitionStructPtr, 0, sizeof(*sTransitionStructPtr)); + sub_805A658(&sTransitionStructPtr->bg123HOfs, &sTransitionStructPtr->bg123VOfs); +} + +static void BT_VBSyncOamAndPltt(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void BT_GetBg0TilesetBase(u16 **tilesetPtr) +{ + u16 charBase; + + charBase = GetGpuReg(REG_OFFSET_BG0CNT) >> 2; + charBase <<= 0xE; + *tilesetPtr = (u16 *)(VRAM + charBase); +} + +static void BT_GetBg0TilemapAndTilesetBase(u16 **tilemapPtr, u16 **tilesetPtr) +{ + u16 screenBase, charBase; + + screenBase = (GetGpuReg(REG_OFFSET_BG0CNT) >> 8) & 0x1F; + charBase = GetGpuReg(REG_OFFSET_BG0CNT) >> 2; + screenBase <<= 0xB; + charBase <<= 0xE; + *tilemapPtr = (u16 *)(VRAM + screenBase); + *tilesetPtr = (u16 *)(VRAM + charBase); +} + +static void BT_BlendPalettesToBlack(void) +{ + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); +} + +static void BT_LoadWaveIntoBuffer(s16 *buffer, s16 offset, s16 theta, s16 frequency, s16 amplitude, s16 bufSize) +{ + u8 i; + + for (i = 0; bufSize > 0; --bufSize, ++i, theta += frequency) + buffer[i] = offset + Sin(0xFF & theta, amplitude); +} + +static void BT_GenerateCircle(s16 *buffer, s16 x, s16 y, s16 radius) +{ + s16 i; + + memset(buffer, 0xA, 320); + // 64 iterations because we only want to cover [0, Ï€/2) discretely. + for (i = 0; i < 64; ++i) + { + s16 sinResult, cosResult, leftX, topY, bottomY, nextTopY, nextBottomY, winVal; + + // The loop variable i here does not stand for rotation angle, + // but is the angle between segment (center, pointOnCircle) + // and vertical line. + sinResult = Sin(i, radius); + cosResult = Cos(i, radius); + leftX = x - sinResult; + winVal = x + sinResult; + topY = y - cosResult; + bottomY = y + cosResult; + if (leftX < 0) + leftX = 0; + if (winVal > 240) + winVal = 240; + if (topY < 0) + topY = 0; + if (bottomY > 159) + bottomY = 159; + winVal |= (leftX << 8); + buffer[topY] = winVal; + buffer[bottomY] = winVal; + cosResult = Cos(i + 1, radius); + nextTopY = y - cosResult; + nextBottomY = y + cosResult; + if (nextTopY < 0) + nextTopY = 0; + if (nextBottomY > 159) + nextBottomY = 159; + // fill everything in between with the same WIN0H value + while (topY > nextTopY) + buffer[--topY] = winVal; + while (topY < nextTopY) + buffer[++topY] = winVal; + while (bottomY > nextBottomY) + buffer[--bottomY] = winVal; + while (bottomY < nextBottomY) + buffer[++bottomY] = winVal; + } +} + +#define trStartPtX data[0] +#define trStartPtY data[1] +#define trCurrentPtX data[2] +#define trCurrentPtY data[3] +#define trEndPtX data[4] +#define trEndPtY data[5] +#define trStepX data[6] +#define trStepY data[7] +#define trAbsDeltaX data[8] +#define trAbsDeltaY data[9] +#define trAccum data[10] // track one dimension based on slope + +static void BT_DiagonalSegment_InitParams(s16 *data, s16 startPtX, s16 startPtY, s16 endPtX, s16 endPtY, s16 stepX, s16 stepY) +{ + trStartPtX = startPtX; + trStartPtY = startPtY; + trCurrentPtX = startPtX; + trCurrentPtY = startPtY; + trEndPtX = endPtX; + trEndPtY = endPtY; + trStepX = stepX; + trStepY = stepY; + trAbsDeltaX = endPtX - startPtX; + if (trAbsDeltaX < 0) + { + trAbsDeltaX = -trAbsDeltaX; + trStepX = -stepX; + } + trAbsDeltaY = endPtY - startPtY; + if (trAbsDeltaY < 0) + { + trAbsDeltaY = -trAbsDeltaY; + trStepY = -stepY; + } + trAccum = 0; +} + +static bool8 BT_DiagonalSegment_ComputePointOnSegment(s16 *data, bool8 checkBoundary1, bool8 checkBoundary2) +{ + u8 finish; + + if (trAbsDeltaX > trAbsDeltaY) + { + trCurrentPtX += trStepX; + trAccum += trAbsDeltaY; + if (trAccum > trAbsDeltaX) + { + trCurrentPtY += trStepY; + trAccum -= trAbsDeltaX; + } + } + else + { + trCurrentPtY += trStepY; + trAccum += trAbsDeltaX; + if (trAccum > trAbsDeltaY) + { + trCurrentPtX += trStepX; + trAccum -= trAbsDeltaY; + } + } + finish = 0; + if ((trStepX > 0 && trCurrentPtX >= trEndPtX) || (trStepX < 0 && trCurrentPtX <= trEndPtX)) + { + ++finish; + if (checkBoundary1) + trCurrentPtX = trEndPtX; + } + if ((trStepY > 0 && trCurrentPtY >= trEndPtY) || (trStepY < 0 && trCurrentPtY <= trEndPtY)) + { + ++finish; + if (checkBoundary2) + trCurrentPtY = trEndPtY; + } + if (finish == 2) + return TRUE; + else + return FALSE; +} + +#undef trStartPtX +#undef trStartPtY +#undef trCurrentPtX +#undef trCurrentPtY +#undef trEndPtX +#undef trEndPtY +#undef trStepX +#undef trStepY +#undef trAbsDeltaX +#undef trAbsDeltaY +#undef trAccum diff --git a/src/diploma.c b/src/diploma.c index e32d7592f..7fa140430 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -35,7 +35,7 @@ static void DiplomaBgInit(void); static void DiplomaPrintText(void); static u8 DiplomaLoadGfx(void); static void DiplomaVblankHandler(void); -static void CB2_DiplomaInit(void); +static void CB2_Diploma(void); static void Task_WaitForExit(u8); static void Task_DiplomaInit(u8); static void Task_DiplomaReturnToOverworld(u8); @@ -101,10 +101,10 @@ void CB2_ShowDiploma(void) gDiploma->callbackStep = 0; DiplomaBgInit(); CreateTask(Task_DiplomaInit, 0); - SetMainCallback2(CB2_DiplomaInit); + SetMainCallback2(CB2_Diploma); } -static void CB2_DiplomaInit(void) +static void CB2_Diploma(void) { RunTasks(); AnimateSprites(); @@ -134,7 +134,7 @@ static void Task_DiplomaInit(u8 taskId) case 4: if (HasAllMons()) { - SetGpuReg(REG_OFFSET_BG1HOFS, 0x80 << 1); + SetGpuReg(REG_OFFSET_BG1HOFS, 0x100); } else { diff --git a/src/pokemon.c b/src/pokemon.c index b948e4033..6f1df249f 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1621,7 +1621,7 @@ const u16 gLinkPlayerFacilityClasses[] = FACILITY_CLASS_BEAUTY_2, FACILITY_CLASS_AQUA_LEADER, }; -const static struct OamData sOakSpeechNidoranFDummyOamData = +static const struct OamData sOakSpeechNidoranFDummyOamData = { .y = 0, .affineMode = 0, @@ -1637,7 +1637,7 @@ const static struct OamData sOakSpeechNidoranFDummyOamData = .paletteNum = 0, }; -const struct SpriteTemplate sOakSpeechNidoranFDummyTemplate = +static const struct SpriteTemplate sOakSpeechNidoranFDummyTemplate = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = SPRITE_INVALID_TAG, diff --git a/src/slot_machine.c b/src/slot_machine.c new file mode 100644 index 000000000..740234d95 --- /dev/null +++ b/src/slot_machine.c @@ -0,0 +1,2886 @@ +#include "global.h" +#include "gpu_regs.h" +#include "dma3.h" +#include "bg.h" +#include "palette.h" +#include "decompress.h" +#include "task.h" +#include "main.h" +#include "malloc.h" +#include "sound.h" +#include "coins.h" +#include "quest_log.h" +#include "overworld.h" +#include "slot_machine.h" +#include "menu.h" +#include "new_menu_helpers.h" +#include "text_window.h" +#include "random.h" +#include "trig.h" +#include "strings.h" +#include "constants/songs.h" + +struct SlotMachineState +{ + MainCallback savedCallback; + u16 machineidx; + u16 field_06; + u16 field_08; + u16 slotRewardClass; + u16 field_0C; + u16 bet; + u8 field_10; + u8 field_11; + bool32 field_14[3]; + s16 field_20[3]; + s16 field_26[3]; + s16 field_2C[3]; + s16 field_32[3]; + u32 field_38; + u32 field_3C[5]; + u16 payout; +}; + +struct SlotMachineGfxManager +{ + u32 field_00[3]; + struct Sprite * field_0C[3][5]; + struct Sprite * field_48[4]; + struct Sprite * field_58[4]; + struct Sprite * field_68[2]; + vu16 * field_70; +}; + +struct SlotMachineSetupTaskDataSub_0000 +{ + u16 unk0; + u8 unk2; + u8 unk3; +}; + +struct SlotMachineSetupTaskData +{ + struct SlotMachineSetupTaskDataSub_0000 field_0000[8]; + u8 field_0020; + // align 2 + s32 field_0024; + u32 field_0028; + u16 field_002C[3][4]; + u16 field_0044[3][4]; + u8 field_005C[0x800]; + u8 field_085C[0x800]; + u8 field_105C[0x800]; + u8 field_185C[0x800]; + u8 field_205C[0x800]; +}; // size: 285C + +struct UnkStruct_8466C0C +{ + const u16 * tiles; + u32 count; +}; + +static EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL; +static EWRAM_DATA struct SlotMachineGfxManager * sSlotMachineGfxManager = NULL; + +static void sub_813F84C(struct SlotMachineState * ptr); +static void sub_813F898(void); +static void sub_813F92C(void); +static void sub_813F94C(void); +static void MainTask_SlotsGameLoop(u8 taskId); +static void MainTask_NoCoinsGameOver(u8 taskId); +static void MainTask_ShowHelp(u8 taskId); +static void MainTask_ConfirmExitGame(u8 taskId); +static void MainTask_DarnNoPayout(u8 taskId); +static void MainTask_WinHandlePayout(u8 taskId); +static void MainTask_ExitSlots(u8 taskId); +static void SetMainTask(TaskFunc taskFunc); +static void sub_8140060(u8 taskId); +static void sub_8140148(void); +static void sub_814016C(u16 whichReel, u16 whichReel2); +static bool32 sub_81401A0(u16); +static void sub_81401F0(u16 whichReel); +static void sub_81403BC(u16 whichReel); +static void sub_81404B8(u16 whichReel); +static bool32 sub_814054C(s32, s32, s32, s32, s32); +static bool32 sub_81406E8(s32, s32, s32); +static bool32 sub_81408F4(s32, s32); +static void sub_81409B4(void); +static void sub_8140A70(void); +static u16 sub_8140A80(void); +static void sub_8140C6C(struct SlotMachineGfxManager * manager); +static void sub_8140D7C(const s16 *, const s16 *); +static bool32 sub_814104C(void); +static void sub_8141094(void); +static struct SlotMachineSetupTaskData * sub_814112C(void); +static void sub_81410CC(u8 taskId); +static void sub_8141148(u16 a0, u8 a1); +static bool32 sub_8141180(u8 a0); +static bool8 sub_8141198(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141460(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_81414AC(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_81414EC(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_81414FC(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141518(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141558(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141568(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141578(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141584(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_81415C8(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141610(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141650(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141690(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_81416C8(u8 *, struct SlotMachineSetupTaskData *); +static bool8 sub_8141764(u8 *, struct SlotMachineSetupTaskData *); +static void sub_81417E4(const u8 * str); +static void sub_8141828(void); +static void sub_8141834(u16 * bgTilemapBuffer); +static void sub_81418C4(u16 * bgTilemapBuffer, u16 a0, u16 a1); +static void sub_814191C(u8 taskId); +static void sub_8141AB0(void); +static void sub_8141AD8(u8 a0); +static void sub_8141B18(void); +static void sub_8141B34(void); +static void sub_8141BA0(u8 a0); +static void sub_8141BE4(void); +static void sub_8141C30(u8, u8); + +static const u8 gUnknown_8464890[][2] = { + {0x00, 0x03}, + {0x00, 0x06}, + {0x03, 0x06}, + + {0x01, 0x04}, + {0x01, 0x07}, + {0x04, 0x07}, + + {0x02, 0x05}, + {0x02, 0x08}, + {0x05, 0x08}, + + {0x00, 0x04}, + {0x00, 0x08}, + {0x04, 0x08}, + + {0x02, 0x04}, + {0x02, 0x06}, + {0x04, 0x06} +}; + +static const u8 gUnknown_84648AE[][3] = { + {0x00, 0x03, 0x06}, // top row + {0x01, 0x04, 0x07}, // middle row + {0x02, 0x05, 0x08}, // bottom row + {0x00, 0x04, 0x08}, // tl-br + {0x02, 0x04, 0x06} // bl-tr +}; + +static const u8 gUnknown_84648BD[][4] = { + {0x00, 0x04, 0x08, 0x03}, // tl-br + {0x00, 0x03, 0x06, 0x02}, // top row + {0x01, 0x04, 0x07, 0x01}, // middle row + {0x02, 0x05, 0x08, 0x02}, // bottom row + {0x02, 0x04, 0x06, 0x03} // bl-tr +}; + +static const u16 gUnknown_84648D2[][7] = { + {0x1fa1, 0x2eab, 0x3630, 0x39f3, 0x3bd4, 0x3bfc, 0x0049}, + {0x1f97, 0x2ea2, 0x3627, 0x39e9, 0x3bca, 0x3bf8, 0x0049}, + {0x1f91, 0x2e9b, 0x3620, 0x39e3, 0x3bc4, 0x3bf4, 0x0049}, + {0x1f87, 0x2e92, 0x3617, 0x39d9, 0x3bba, 0x3bef, 0x0050}, + {0x1f7f, 0x2e89, 0x360e, 0x39d1, 0x3bb2, 0x3bea, 0x0050}, + {0x1fc9, 0x2efc, 0x3696, 0x3a63, 0x3c49, 0x3c8b, 0x0073}, +}; + +static const u8 gUnknown_8464926[][21] = { + {0x00, 0x03, 0x04, 0x01, 0x02, 0x06, 0x02, 0x05, 0x00, 0x06, 0x03, 0x01, 0x04, 0x02, 0x06, 0x00, 0x05, 0x02, 0x01, 0x06, 0x02}, + {0x00, 0x05, 0x04, 0x03, 0x01, 0x05, 0x04, 0x03, 0x02, 0x05, 0x04, 0x03, 0x00, 0x05, 0x04, 0x01, 0x03, 0x06, 0x05, 0x03, 0x04}, + {0x00, 0x03, 0x06, 0x05, 0x02, 0x03, 0x06, 0x05, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x01}, +}; + +static const u16 gUnknown_8464966[] = { + 0, + 2, + 6, + 8, + 15, + 100, + 300 +}; + +static const u16 gUnknown_8464974[] = INCBIN_U16("graphics/slot_machine/unk_8464974.gbapal"); +static const u16 gUnknown_8464994[] = INCBIN_U16("graphics/slot_machine/unk_8464994.gbapal"); +static const u16 gUnknown_84649B4[] = INCBIN_U16("graphics/slot_machine/unk_84649b4.gbapal"); +static const u16 gUnknown_84649D4[] = INCBIN_U16("graphics/slot_machine/unk_84649d4.gbapal"); +static const u16 gUnknown_84649F4[] = INCBIN_U16("graphics/slot_machine/unk_84649f4.gbapal"); +static const u32 gUnknown_8464A14[] = INCBIN_U32("graphics/slot_machine/unk_8464a14.4bpp.lz"); +static const u16 gUnknown_846504C[] = INCBIN_U16("graphics/slot_machine/unk_846504c.gbapal"); +static const u32 gUnknown_846506C[] = INCBIN_U32("graphics/slot_machine/unk_846506c.4bpp.lz"); +static const u16 gUnknown_8465524[] = INCBIN_U16("graphics/slot_machine/unk_8465524.gbapal"); +static const u32 gUnknown_8465544[] = INCBIN_U32("graphics/slot_machine/unk_8465544.4bpp.lz"); + +static const struct CompressedSpriteSheet gUnknown_84655B0[] = { + {(const void *)gUnknown_8464A14, 0xe00, 0}, + {(const void *)gUnknown_846506C, 0xc00, 1}, + {(const void *)gUnknown_8465544, 0x280, 2}, +}; + +static const struct SpritePalette gUnknown_84655C8[] = { + {gUnknown_8464974, 0}, + {gUnknown_8464994, 1}, + {gUnknown_84649B4, 2}, + {gUnknown_84649D4, 3}, + {gUnknown_84649F4, 4}, + {gUnknown_846504C, 5}, + {gUnknown_8465524, 6}, + {NULL} +}; + +static const u16 gUnknown_8465608[] = { + 2, + 2, + 0, + 0, + 2, + 4, + 3 +}; + +static const u16 gUnknown_8465616[] = { + 0x0120, 0x011f, 0x011e, 0x011d, 0x011c, 0x011b, 0x011a, 0x0119, 0x0118, 0x0117, 0x0116, 0x0115, 0x0114, 0x0113, 0x0112, 0x0111, + 0x0110, 0x010f, 0x010e, 0x010d, 0x010c, 0x010b, 0x010a, 0x0109, 0x0108, 0x0107, 0x0106, 0x0105, 0x0104, 0x0103, 0x0102, 0x0101, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e, 0x010f, 0x0110, + 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e, 0x011f, 0x0120 +}; + +static const u8 gUnknown_84656D6[] = { + 0x10, 0x10, 0x10, 0x10, 0x0f, 0x0e, 0x0d, 0x0d, 0x0c, 0x0b, 0x0a, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06, 0x05, 0x04, 0x04, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f +}; + +static const struct OamData gUnknown_8465738 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_SQUARE, + .x = 0, + .matrixNum = 0, + .size = ST_OAM_SIZE_2, + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd gUnknown_8465740[] = { + ANIMCMD_FRAME(0x00, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465748[] = { + ANIMCMD_FRAME(0x10, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465750[] = { + ANIMCMD_FRAME(0x20, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465758[] = { + ANIMCMD_FRAME(0x30, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465760[] = { + ANIMCMD_FRAME(0x40, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465768[] = { + ANIMCMD_FRAME(0x50, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465770[] = { + ANIMCMD_FRAME(0x60, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465778[] = { + ANIMCMD_FRAME(0x20, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465780[] = { + ANIMCMD_FRAME(0x30, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465788[] = { + ANIMCMD_FRAME(0x40, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465790[] = { + ANIMCMD_FRAME(0x50, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465798[] = { + ANIMCMD_FRAME(0x60, 4), + ANIMCMD_END +}; + +static const union AnimCmd *const gUnknown_84657A0[] = { + gUnknown_8465740, + gUnknown_8465748, + gUnknown_8465750, + gUnknown_8465758, + gUnknown_8465760, + gUnknown_8465768, + gUnknown_8465770, + gUnknown_8465778, + gUnknown_8465780, + gUnknown_8465788, + gUnknown_8465790, + gUnknown_8465798 +}; + +static const union AffineAnimCmd gUnknown_84657D0[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 1), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const gUnknown_84657E0[] = { + gUnknown_84657D0 +}; + +static const struct SpriteTemplate gUnknown_84657E4 = { + 0, 0, &gUnknown_8465738, gUnknown_84657A0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct OamData gUnknown_84657FC = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_V_RECTANGLE, + .x = 0, + .matrixNum = 0, + .size = ST_OAM_SIZE_0, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd gUnknown_8465804[] = { + ANIMCMD_FRAME(0x00, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_846580C[] = { + ANIMCMD_FRAME(0x02, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465814[] = { + ANIMCMD_FRAME(0x04, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_846581C[] = { + ANIMCMD_FRAME(0x06, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465824[] = { + ANIMCMD_FRAME(0x08, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_846582C[] = { + ANIMCMD_FRAME(0x0a, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465834[] = { + ANIMCMD_FRAME(0x0c, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_846583C[] = { + ANIMCMD_FRAME(0x0e, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_8465844[] = { + ANIMCMD_FRAME(0x10, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_846584C[] = { + ANIMCMD_FRAME(0x12, 4), + ANIMCMD_END +}; + +static const union AnimCmd *const gUnknown_8465854[] = { + gUnknown_8465804, + gUnknown_846580C, + gUnknown_8465814, + gUnknown_846581C, + gUnknown_8465824, + gUnknown_846582C, + gUnknown_8465834, + gUnknown_846583C, + gUnknown_8465844, + gUnknown_846584C +}; + +static const struct SpriteTemplate gUnknown_846587C = { + 2, 6, &gUnknown_84657FC, gUnknown_8465854, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +static const struct OamData gUnknown_8465894 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_SQUARE, + .x = 0, + .matrixNum = 0, + .size = ST_OAM_SIZE_2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd gUnknown_846589C[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_END +}; + +static const union AnimCmd gUnknown_84658A4[] = { + ANIMCMD_FRAME( 0, 24), + ANIMCMD_FRAME(16, 24), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gUnknown_84658B0[] = { + ANIMCMD_FRAME(32, 28), + ANIMCMD_FRAME(48, 28), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd gUnknown_84658BC[] = { + ANIMCMD_FRAME(64, 12), + ANIMCMD_FRAME(80, 12), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const gUnknown_84658C8[] = { + gUnknown_846589C, + gUnknown_84658A4, + gUnknown_84658B0, + gUnknown_84658BC +}; + +static const struct SpriteTemplate gUnknown_84658D8 = { + 1, 5, &gUnknown_8465894, gUnknown_84658C8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +bool8 (*const gUnknown_84658F0[])(u8 *, struct SlotMachineSetupTaskData *) = { + sub_8141198, + sub_8141460, + sub_81414AC, + sub_81414EC, + sub_81414FC, + sub_8141518, + sub_8141558, + sub_8141568, + sub_8141578, + sub_8141584, + sub_81415C8, + sub_8141610, + sub_8141650, + sub_8141690, + sub_81416C8, + sub_8141764 +}; + +static const u16 gUnknown_8465930[] = INCBIN_U16("graphics/slot_machine/unk_8465930.gbapal"); +static const u16 gUnknown_8465950[] = INCBIN_U16("graphics/slot_machine/unk_8465950.gbapal"); +static const u16 gUnknown_8465970[] = INCBIN_U16("graphics/slot_machine/unk_8465970.gbapal"); +static const u16 gUnknown_8465990[] = INCBIN_U16("graphics/slot_machine/unk_8465990.gbapal"); +static const u16 gUnknown_84659B0[] = INCBIN_U16("graphics/slot_machine/unk_84659b0.gbapal"); +static const u32 gUnknown_84659D0[] = INCBIN_U32("graphics/slot_machine/unk_84659d0.4bpp.lz"); +static const u32 gUnknown_84661D4[] = INCBIN_U32("graphics/slot_machine/unk_84661d4.bin.lz"); +static const u16 gUnknown_84664BC[] = INCBIN_U16("graphics/slot_machine/unk_84664bc.gbapal"); +static const u16 gUnknown_84664DC[] = INCBIN_U16("graphics/slot_machine/unk_84664dc.gbapal","graphics/slot_machine/unk_84664fc.gbapal", "graphics/slot_machine/unk_846651c.gbapal"); +static const u32 gUnknown_846653C[] = INCBIN_U32("graphics/slot_machine/unk_846653c.4bpp.lz"); +static const u16 gUnknown_84665C0[] = INCBIN_U16("graphics/slot_machine/unk_84665c0.gbapal"); +static const u16 gUnknown_84665E0[] = INCBIN_U16("graphics/slot_machine/unk_84665e0.gbapal"); +static const u16 gUnknown_8466600[] = INCBIN_U16("graphics/slot_machine/unk_8466600.gbapal"); +static const u32 gUnknown_8466620[] = INCBIN_U32("graphics/slot_machine/unk_8466620.4bpp.lz"); +static const u32 gUnknown_8466998[] = INCBIN_U32("graphics/slot_machine/unk_8466998.bin.lz"); + +static const struct BgTemplate gUnknown_8466B10[] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + }, { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + }, { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + } +}; + +static const struct WindowTemplate gUnknown_8466B20[] = { + { + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 15, + .width = 20, + .height = 4, + .paletteNum = 0x0f, + .baseBlock = 0x04f + }, { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 30, + .height = 2, + .paletteNum = 0x0e, + .baseBlock = 0x013 + }, + DUMMY_WIN_TEMPLATE +}; + +static const u16 gUnknown_8466B38[] = { + 0x00a4, 0x00a5, 0x00a6, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00e7, 0x012c, 0x014c, 0x0191, 0x01b1, 0x01f6, 0x0216, 0x0217, 0x0218, 0x0219, 0x0237, 0x0238, 0x0239 +}; + +static const u16 gUnknown_8466B60[] = { + 0x00e4, 0x00e5, 0x00e6, 0x00f7, 0x00f8, 0x00f9, 0x0104, 0x0105, 0x0106, 0x0107, 0x010c, 0x0111, 0x0116, 0x0117, 0x0118, 0x0119, 0x0124, 0x0125, 0x0126, 0x0137, 0x0138, 0x0139 +}; + +static const u16 gUnknown_8466B8C[] = { + 0x0144, 0x0145, 0x0146, 0x0157, 0x0158, 0x0159, 0x0164, 0x0165, 0x0166, 0x0167, 0x016c, 0x0171, 0x0176, 0x0177, 0x0178, 0x0179, 0x0184, 0x0185, 0x0186, 0x0197, 0x0198, 0x0199 +}; + +static const u16 gUnknown_8466BB8[] = { + 0x01a4, 0x01a5, 0x01a6, 0x01b7, 0x01b8, 0x01b9, 0x01c4, 0x01c5, 0x01c6, 0x01c7, 0x01cc, 0x01d1, 0x01d6, 0x01d7, 0x01d8, 0x01d9, 0x01e4, 0x01e5, 0x01e6, 0x01f7, 0x01f8, 0x01f9 +}; + +static const u16 gUnknown_8466BE4[] = { + 0x0204, 0x0205, 0x0206, 0x0224, 0x0225, 0x0226, 0x01e7, 0x0207, 0x018c, 0x01ac, 0x0131, 0x0151, 0x00d6, 0x00f6, 0x00b7, 0x00b8, 0x00b9, 0x00d7, 0x00d8, 0x00d9 +}; + +static const struct UnkStruct_8466C0C gUnknown_8466C0C[] = { + { gUnknown_8466B38, NELEMS(gUnknown_8466B38) }, + { gUnknown_8466B60, NELEMS(gUnknown_8466B60) }, + { gUnknown_8466B8C, NELEMS(gUnknown_8466B8C) }, + { gUnknown_8466BB8, NELEMS(gUnknown_8466BB8) }, + { gUnknown_8466BE4, NELEMS(gUnknown_8466BE4) } +}; + +static const u8 gUnknown_8466C34[2] = {2, 4}; + +static const struct WindowTemplate gUnknown_8466C38 = { + .bg = 0, + .tilemapLeft = 19, + .tilemapTop = 9, + .width = 6, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x9F +}; + +static const u16 gUnknown_8466C40[][4] = { + {0x0229, 0x022a, 0x0249, 0x024a}, + {0x022e, 0x022f, 0x024e, 0x024f}, + {0x0233, 0x0234, 0x0253, 0x0254} +}; + +void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) +{ + ResetTasks(); + sSlotMachineState = Alloc(sizeof(*sSlotMachineState)); + if (sSlotMachineState == NULL) + SetMainCallback2(savedCallback); + else + { + if (machineIdx > 5) + machineIdx = 0; + sSlotMachineState->machineidx = machineIdx; + sSlotMachineState->savedCallback = savedCallback; + sub_813F84C(sSlotMachineState); + SetMainCallback2(sub_813F898); + } +} + +static void sub_813F84C(struct SlotMachineState * ptr) +{ + s32 i; + + ptr->field_06 = 0; + ptr->bet = 0; + ptr->payout = 0; + // for whatever reason, the loop does not use the ptr param + for (i = 0; i < 3; i++) + { + sSlotMachineState->field_14[i] = FALSE; + sSlotMachineState->field_20[i] = 0; + sSlotMachineState->field_26[i] = 0; + sSlotMachineState->field_2C[i] = 21; + } +} + +static void sub_813F898(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + + switch (gMain.state) + { + case 0: + if (sub_814104C()) + { + SetMainCallback2(sSlotMachineState->savedCallback); + sub_813F92C(); + } + else + { + sub_8141148(0, 0); + gMain.state++; + } + break; + case 1: + if (!sub_8141180(0)) + { + sSlotMachineState->field_10 = CreateTask(MainTask_SlotsGameLoop, 0); + sSlotMachineState->field_11 = CreateTask(sub_8140060, 1); + SetMainCallback2(sub_813F94C); + } + break; + } +} + +static void sub_813F92C(void) +{ + sub_8141094(); + if (sSlotMachineState != NULL) + { + Free(sSlotMachineState); + sSlotMachineState = NULL; + } +} + +static void sub_813F94C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void MainTask_SlotsGameLoop(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + if (GetCoins() == 0) + { + SetMainTask(MainTask_NoCoinsGameOver); + } + else if (JOY_NEW(DPAD_DOWN)) + { + sSlotMachineState->bet++; + TakeCoins(1); + PlaySE(SE_T_KAMI2); + sub_8141148(8, 0); + sub_8141148(2, 1); + data[0] = 1; + } + else if (JOY_NEW(R_BUTTON)) + { + s32 toAdd = 3 - sSlotMachineState->bet; + if (GetCoins() >= toAdd) + { + sSlotMachineState->bet = 3; + TakeCoins(toAdd); + } + else + { + sSlotMachineState->bet += GetCoins(); + SetCoins(0); + } + PlaySE(SE_T_KAMI2); + sub_8141148(8, 0); + sub_8141148(2, 1); + data[0] = 1; + } + else if (JOY_NEW(A_BUTTON) && sSlotMachineState->bet != 0) + { + data[0] = 2; + } + else if (JOY_NEW(B_BUTTON)) + { + SetMainTask(MainTask_ConfirmExitGame); + } + else if (JOY_NEW(DPAD_RIGHT)) + { + SetMainTask(MainTask_ShowHelp); + } + break; + case 1: + if (!sub_8141180(0) && !sub_8141180(1)) + { + if (sSlotMachineState->bet == 3 || GetCoins() == 0) + data[0] = 2; + else + data[0] = 0; + } + break; + case 2: + sub_811539C(); + sub_81409B4(); + sub_8140148(); + sSlotMachineState->field_06 = 0; + sub_8141148(3, 0); + data[0] = 3; + break; + case 3: + if (!sub_8141180(0)) + { + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_JYUNI); + sub_814016C(sSlotMachineState->field_06, sSlotMachineState->field_06); + sub_8141C30(sSlotMachineState->field_06, 0); + data[0] = 4; + } + } + break; + case 4: + if (sub_81401A0(sSlotMachineState->field_06) == 0 && !sub_8141180(0)) + { + sSlotMachineState->field_06++; + if (sSlotMachineState->field_06 >= 3) + { + sSlotMachineState->slotRewardClass = sub_8140A80(); + sSlotMachineState->bet = 0; + sSlotMachineState->field_06 = 0; + if (sSlotMachineState->slotRewardClass == 0) + SetMainTask(MainTask_DarnNoPayout); + else + { + if (sSlotMachineState->slotRewardClass == 6) + IncrementGameStat(GAME_STAT_SLOT_JACKPOTS); + sub_8140A70(); + SetMainTask(MainTask_WinHandlePayout); + } + } + else + data[0] = 3; + } + break; + } +} + +static void MainTask_NoCoinsGameOver(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_8141148(9, 0); + data[0]++; + break; + case 1: + if (!sub_8141180(0)) + data[0]++; + break; + case 2: + if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY)) + SetMainTask(MainTask_ExitSlots); + break; + } +} + +static void MainTask_ShowHelp(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_8141148(14, 0); + data[0]++; + break; + case 1: + if (!sub_8141180(0)) + data[0]++; + break; + case 2: + if (JOY_NEW(DPAD_LEFT)) + { + sub_8141148(15, 0); + data[0]++; + } + break; + case 3: + if (!sub_8141180(0)) + SetMainTask(MainTask_SlotsGameLoop); + break; + } +} + +static void MainTask_ConfirmExitGame(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_8141148(10, 0); + data[0]++; + break; + case 1: + if (!sub_8141180(0)) + data[0]++; + break; + case 2: + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + GiveCoins(sSlotMachineState->bet); + sub_8141148(8, 0); + data[0] = 3; + break; + case 1: + case -1: + sub_8141148(11, 0); + data[0] = 4; + break; + } + break; + case 3: + if (!sub_8141180(0)) + SetMainTask(MainTask_ExitSlots); + break; + case 4: + if (!sub_8141180(0)) + SetMainTask(MainTask_SlotsGameLoop); + break; + } +} + +static void MainTask_DarnNoPayout(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_8141148(6, 0); + data[1] = 0; + data[0]++; + break; + case 1: + data[1]++; + if (data[1] > 60) + { + sub_8141148(7, 0); + sub_8141148(2, 1); + sub_8141148(13, 2); + data[0]++; + } + break; + case 2: + if (!sub_8141180(0) && !sub_8141180(1) && !sub_8141180(2)) + SetMainTask(MainTask_SlotsGameLoop); + break; + } +} + +static void MainTask_WinHandlePayout(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + if (sSlotMachineState->slotRewardClass == 5 || sSlotMachineState->slotRewardClass == 6) + PlayFanfare(MUS_ME_B_BIG); + else + PlayFanfare(MUS_ME_B_SMALL); + sub_8141148(8, 0); + sub_8141148(4, 1); + data[1] = 8; + data[0]++; + break; + case 1: + data[1]++; + if (data[1] > 120) + { + data[1] = 8; + if (JOY_HELD(A_BUTTON)) + data[1] = 2; + data[0]++; + } + break; + case 2: + if (!sub_8141180(0)) + { + if (IsFanfareTaskInactive() && JOY_NEW(START_BUTTON)) + { + GiveCoins(sSlotMachineState->payout); + sSlotMachineState->payout = 0; + } + else + { + data[1]--; + if (data[1] == 0) + { + if (IsFanfareTaskInactive()) + PlaySE(SE_PIN); + if (sSlotMachineState->payout != 0) + { + GiveCoins(1); + sSlotMachineState->payout--; + } + data[1] = 8; + if (JOY_HELD(A_BUTTON)) + data[1] = 2; + } + } + sub_8141148(8, 0); + if (sSlotMachineState->payout == 0) + data[0]++; + } + break; + case 3: + if (IsFanfareTaskInactive() && !sub_8141180(0)) + { + sub_8141148(5, 0); + data[0]++; + } + break; + case 4: + if (!sub_8141180(0)) + { + sub_8141148(2, 0); + sub_8141148(13, 1); + data[0]++; + } + break; + case 5: + if (!sub_8141180(0) && !sub_8141180(1)) + SetMainTask(MainTask_SlotsGameLoop); + break; + } +} + +static void MainTask_ExitSlots(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_8141148(1, 0); + data[0]++; + break; + case 1: + if (!sub_8141180(0)) + { + SetMainCallback2(sSlotMachineState->savedCallback); + sub_813F92C(); + } + break; + } +} + +static void SetMainTask(TaskFunc taskFunc) +{ + gTasks[sSlotMachineState->field_10].func = taskFunc; + gTasks[sSlotMachineState->field_10].data[0] = 0; +} + +static void sub_8140060(u8 taskId) +{ + // taskId is never used + + s32 i; + + for (i = 0; i < 3; i++) + { + if (sSlotMachineState->field_14[i] || sSlotMachineState->field_26[i] != 0) + { + if (sSlotMachineState->field_26[i] != 0 || sSlotMachineState->field_20[i] != sSlotMachineState->field_2C[i]) + { + sSlotMachineState->field_26[i]++; + if (sSlotMachineState->field_26[i] > 2) + { + sSlotMachineState->field_26[i] = 0; + sSlotMachineState->field_20[i]--; + if (sSlotMachineState->field_20[i] < 0) + sSlotMachineState->field_20[i] = 20; + } + if (sSlotMachineState->field_20[i] != sSlotMachineState->field_2C[i]) + continue; + } + sSlotMachineState->field_2C[i] = 21; + sSlotMachineState->field_14[i] = FALSE; + } + } + sub_8140D7C(sSlotMachineState->field_20, sSlotMachineState->field_26); +} + +static void sub_8140148(void) +{ + s32 i; + + for (i = 0; i < 3; i++) + { + sSlotMachineState->field_14[i] = TRUE; + } +} + +static void sub_814016C(u16 whichReel, u16 whichReel2) +{ + switch (whichReel2) + { + case 0: + sub_81401F0(whichReel); + break; + case 1: + sub_81403BC(whichReel); + break; + case 2: + sub_81404B8(whichReel); + break; + } +} + +static bool32 sub_81401A0(u16 whichReel) +{ + return sSlotMachineState->field_14[whichReel]; +} + +static s16 sub_81401B4(u16 whichReel) +{ + s16 position = sSlotMachineState->field_20[whichReel]; + if (sSlotMachineState->field_26[whichReel] != 0) + { + position--; + if (position < 0) + position = 20; + } + return position; +} + +static void sub_81401F0(u16 whichReel) +{ + s32 i, j; + s16 r2; + u8 sp0[5]; + s16 sp0C = sub_81401B4(whichReel); + s32 r8 = 0; + + if (sSlotMachineState->field_08 == 0 && whichReel == 0) + { + for (i = 0; i < 5; i++) + { + for (j = 0, r2 = sp0C - i + 1; j < 3; j++, r2++) + { + if (r2 >= 21) + r2 = 0; + if (sub_81408F4(1, gUnknown_8464926[whichReel][r2])) + break; + } + if (j == 3) + { + sp0[r8] = i; + r8++; + } + } + } + else if (sSlotMachineState->field_08 != 1 || whichReel == 0) + { + for (i = 0, r2 = sp0C + 1; i < 3; i++, r2++) + { + if (r2 >= 21) + r2 = 0; + if (sub_81408F4(sSlotMachineState->field_08, gUnknown_8464926[whichReel][r2])) + { + sp0[0] = 0; + r8 = 1; + break; + } + } + for (i = 0, r2 = sp0C; i < 4; i++, r2--) + { + if (r2 < 0) + r2 = 20; + if (sub_81408F4(sSlotMachineState->field_08, gUnknown_8464926[whichReel][r2])) + { + sp0[r8] = i + 1; + r8++; + } + } + } + if (r8 == 0) + { + r2 = Random() % 5; + } + else + { + r2 = sp0[Random() % r8]; + } + r2 = sp0C - r2; + if (r2 < 0) + r2 += 21; + sSlotMachineState->field_32[0] = whichReel; + sSlotMachineState->field_2C[whichReel] = r2; +} + +static void sub_81403BC(u16 whichReel) +{ + s16 r2, r4, r7, sp10; + s32 i; + s32 r6; + u8 sp4[5]; + + r7 = sSlotMachineState->field_32[0]; + r4 = sSlotMachineState->field_20[r7] + 1; + if (r4 >= 21) + r4 = 0; + sp10 = sub_81401B4(whichReel); + r2 = sp10 + 1; + if (r2 >= 21) + r2 = 0; + r6 = 0; + for (i = 0; i < 5; i++) + { + if (sub_814054C(r7, r4, whichReel, r2, sSlotMachineState->field_08)) + { + sp4[r6] = i; + r6++; + } + r2--; + if (r2 < 0) + r2 = 20; + } + if (r6 == 0) + { + sSlotMachineState->field_38 = 0; + if (sSlotMachineState->field_08 == 5 || sSlotMachineState->field_08 == 6) + r2 = 4; + else + r2 = 0; + } + else + { + sSlotMachineState->field_38 = 1; + r2 = sp4[0]; + } + r2 = sp10 - r2; + if (r2 < 0) + r2 += 21; + sSlotMachineState->field_32[1] = whichReel; + sSlotMachineState->field_2C[whichReel] = r2; +} + +static void sub_81404B8(u16 whichReel) +{ + s32 i; + s32 r6; + s32 r9; + s32 r4; + s32 r2; + u8 sp0[5]; + + r9 = sub_81401B4(whichReel); + r4 = r9; + r6 = 0; + for (i = 0; i < 5; i++) + { + if (sub_81406E8(whichReel, r4, sSlotMachineState->field_08)) + { + sp0[r6] = i; + r6++; + } + r4--; + if (r4 < 0) + r4 = 20; + } + if (r6 == 0) + { + if (sSlotMachineState->field_08 == 5 || sSlotMachineState->field_08 == 6) + r2 = 4; + else + r2 = 0; + } + else + r2 = sp0[0]; + r2 = r9 - r2; + if (r2 < 0) + r2 += 21; + sSlotMachineState->field_2C[whichReel] = r2; +} + +static bool32 sub_814054C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4) +{ + s32 i; + s32 r5; + u8 sp0[9] = {}; + + for (i = 0; i < 9; i++) + sp0[i] = 7; + + for (i = 0; i < 3; i++) + { + sp0[3 * a0 + i] = gUnknown_8464926[a0][a1]; + sp0[3 * a2 + i] = gUnknown_8464926[a2][a3]; + a1++; + if (a1 >= 21) + a1 = 0; + a3++; + if (a3 >= 21) + a3 = 0; + } + + switch (a4) + { + case 0: + for (i = 0; i < 3; i++) + { + if (sub_81408F4(1, sp0[i])) + return FALSE; + } + for (i = 0; i < 15; i++) + { + if (sp0[gUnknown_8464890[i][0]] == sp0[gUnknown_8464890[i][1]]) + return TRUE; + } + return FALSE; + case 1: + if (a0 == 0 || a2 == 0) + { + if (a0 == 1 || a2 == 1) + { + for (i = 0; i < 15; i += 3) + { + if (sp0[gUnknown_8464890[i][0]] == sp0[gUnknown_8464890[i][1]]) + return FALSE; + } + } + for (i = 0; i < 3; i++) + { + if (sub_81408F4(a4, sp0[i])) + return TRUE; + } + return FALSE; + } + else + return TRUE; + case 2: + if (a0 == 2 || a2 == 2) + { + for (i = 0; i < 9; i++) + { + if (sub_81408F4(a4, sp0[i])) + return TRUE; + } + return FALSE; // wrong level + } + } + for (i = 0; i < 15; i++) + { + if (sp0[gUnknown_8464890[i][0]] == sp0[gUnknown_8464890[i][1]] && sub_81408F4(a4, sp0[gUnknown_8464890[i][0]])) + return TRUE; + } + return FALSE; +} + +#ifdef NONMATCHING +static bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) +{ + u8 sp0[9]; + s32 r3, r6; + s32 i; + + r6 = sSlotMachineState->field_20[sSlotMachineState->field_32[0]] + 1; + r3 = sSlotMachineState->field_20[sSlotMachineState->field_32[1]] + 1; + a1++; + if (r6 >= 21) + r6 = 0; + if (r3 >= 21) + r3 = 0; + if (a1 >= 21) + a1 = 0; + for (i = 0; i < 3; i++) + { + sp0[sSlotMachineState->field_32[0] * 3 + i] = gUnknown_8464926[sSlotMachineState->field_32[0]][r6]; + sp0[sSlotMachineState->field_32[1] * 3 + i] = gUnknown_8464926[sSlotMachineState->field_32[1]][r3]; + sp0[a0 * 3 + i] = gUnknown_8464926[a0][a1]; + r6++; + if (r6 >= 21) + r6 = 0; + r3++; + if (r3 >= 21) + r3 = 0; + a1++; + if (a1 >= 21) + a1++; + } + switch (a2) + { + case 0: + for (i = 0; i < 3; i++) + { + if (sub_81408F4(1, sp0[i])) + return FALSE; + } + for (i = 0; i < 5; i++) + { + if (sp0[gUnknown_84648AE[i][0]] == sp0[gUnknown_84648AE[i][1]] && sp0[gUnknown_84648AE[i][0]] == sp0[gUnknown_84648AE[i][2]]) + return FALSE; + } + return TRUE; + case 1: + for (i = 0; i < 5; i++) + { + if (sp0[gUnknown_84648AE[i][0]] == sp0[gUnknown_84648AE[i][1]] && sub_81408F4(a2, sp0[gUnknown_84648AE[i][0]])) + return FALSE; + } + for (i = 0; i < 3; i++) + { + if (sub_81408F4(a2, sp0[i])) + return TRUE; + } + return FALSE; + case 2: + for (i = 0; i < 5; i++) + { + if (sp0[gUnknown_84648AE[i][0]] == sp0[gUnknown_84648AE[i][1]] && sub_81408F4(a2, sp0[gUnknown_84648AE[i][0]])) + return TRUE; + } + return FALSE; + } + for (i = 0; i < 5; i++) + { + if (sp0[gUnknown_84648AE[i][0]] == sp0[gUnknown_84648AE[i][1]] && sp0[gUnknown_84648AE[i][0]] == sp0[gUnknown_84648AE[i][2]] && sub_81408F4(a2, sp0[gUnknown_84648AE[i][0]])) + return TRUE; + } + return FALSE; +} +#else +NAKED +static bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x10\n" + "\tadds r7, r0, 0\n" + "\tadds r5, r1, 0\n" + "\tmov r8, r2\n" + "\tldr r0, _081407C8 @ =sSlotMachineState\n" + "\tldr r2, [r0]\n" + "\tmovs r1, 0x32\n" + "\tldrsh r0, [r2, r1]\n" + "\tlsls r0, 1\n" + "\tadds r1, r2, 0\n" + "\tadds r1, 0x20\n" + "\tadds r0, r1, r0\n" + "\tmovs r3, 0\n" + "\tldrsh r0, [r0, r3]\n" + "\tadds r6, r0, 0x1\n" + "\tmovs r3, 0x34\n" + "\tldrsh r0, [r2, r3]\n" + "\tlsls r0, 1\n" + "\tadds r1, r0\n" + "\tmovs r3, 0\n" + "\tldrsh r0, [r1, r3]\n" + "\tadds r3, r0, 0x1\n" + "\tadds r5, 0x1\n" + "\tcmp r6, 0x14\n" + "\tble _08140726\n" + "\tmovs r6, 0\n" + "_08140726:\n" + "\tcmp r3, 0x14\n" + "\tble _0814072C\n" + "\tmovs r3, 0\n" + "_0814072C:\n" + "\tcmp r5, 0x14\n" + "\tble _08140732\n" + "\tmovs r5, 0\n" + "_08140732:\n" + "\tmovs r4, 0\n" + "\tlsls r1, r7, 1\n" + "\tlsls r0, r7, 2\n" + "\tmov r9, r2\n" + "\tldr r2, _081407CC @ =gUnknown_8464926\n" + "\tmov r10, r2\n" + "\tadds r1, r7\n" + "\tadd r1, sp\n" + "\tmov r12, r1\n" + "\tadds r0, r7\n" + "\tlsls r0, 2\n" + "\tadds r0, r7\n" + "\tstr r0, [sp, 0xC]\n" + "_0814074C:\n" + "\tmov r7, r9\n" + "\tmovs r0, 0x32\n" + "\tldrsh r1, [r7, r0]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tadds r0, r4\n" + "\tmov r7, sp\n" + "\tadds r2, r7, r0\n" + "\tlsls r0, r1, 2\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r1\n" + "\tadds r0, r6, r0\n" + "\tadd r0, r10\n" + "\tldrb r0, [r0]\n" + "\tstrb r0, [r2]\n" + "\tmov r0, r9\n" + "\tmovs r2, 0x34\n" + "\tldrsh r1, [r0, r2]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tadds r0, r4\n" + "\tadds r2, r7, r0\n" + "\tlsls r0, r1, 2\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r1\n" + "\tadds r0, r3, r0\n" + "\tadd r0, r10\n" + "\tldrb r0, [r0]\n" + "\tstrb r0, [r2]\n" + "\tldr r7, [sp, 0xC]\n" + "\tadds r0, r5, r7\n" + "\tadd r0, r10\n" + "\tldrb r0, [r0]\n" + "\tmov r1, r12\n" + "\tstrb r0, [r1]\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x14\n" + "\tble _0814079E\n" + "\tmovs r6, 0\n" + "_0814079E:\n" + "\tadds r3, 0x1\n" + "\tcmp r3, 0x14\n" + "\tble _081407A6\n" + "\tmovs r3, 0\n" + "_081407A6:\n" + "\tadds r5, 0x1\n" + "\tcmp r5, 0x14\n" + "\tble _081407AE\n" + "\tmovs r5, 0\n" + "_081407AE:\n" + "\tmovs r2, 0x1\n" + "\tadd r12, r2\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x2\n" + "\tble _0814074C\n" + "\tmov r3, r8\n" + "\tcmp r3, 0x1\n" + "\tbeq _08140828\n" + "\tcmp r3, 0x1\n" + "\tbgt _081407D0\n" + "\tcmp r3, 0\n" + "\tbeq _081407D8\n" + "\tb _081408A0\n" + "\t.align 2, 0\n" + "_081407C8: .4byte sSlotMachineState\n" + "_081407CC: .4byte gUnknown_8464926\n" + "_081407D0:\n" + "\tmov r6, r8\n" + "\tcmp r6, 0x2\n" + "\tbeq _08140870\n" + "\tb _081408A0\n" + "_081407D8:\n" + "\tmovs r4, 0\n" + "_081407DA:\n" + "\tmov r7, sp\n" + "\tadds r0, r7, r4\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tbl sub_81408F4\n" + "\tcmp r0, 0\n" + "\tbne _081408DC_return_false\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x2\n" + "\tble _081407DA\n" + "\tmovs r4, 0\n" + "\tldr r2, _08140824 @ =gUnknown_84648AE\n" + "\tmovs r3, 0\n" + "\tadds r5, r2, 0x2\n" + "_081407F8:\n" + "\tldrb r0, [r2]\n" + "\tmov r6, sp\n" + "\tadds r1, r6, r0\n" + "\tldrb r0, [r2, 0x1]\n" + "\tadd r0, sp\n" + "\tldrb r1, [r1]\n" + "\tldrb r0, [r0]\n" + "\tcmp r1, r0\n" + "\tbne _08140816\n" + "\tadds r0, r3, r5\n" + "\tldrb r0, [r0]\n" + "\tadd r0, sp\n" + "\tldrb r0, [r0]\n" + "\tcmp r1, r0\n" + "\tbeq _081408DC_return_false\n" + "_08140816:\n" + "\tadds r2, 0x3\n" + "\tadds r3, 0x3\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x4\n" + "\tble _081407F8\n" + "_08140820_return_true:\n" + "\tmovs r0, 0x1\n" + "\tb _081408DE\n" + "\t.align 2, 0\n" + "_08140824: .4byte gUnknown_84648AE\n" + "_08140828:\n" + "\tmovs r4, 0\n" + "\tldr r5, _0814086C @ =gUnknown_84648AE\n" + "_0814082C:\n" + "\tldrb r0, [r5]\n" + "\tmov r7, sp\n" + "\tadds r2, r7, r0\n" + "\tldrb r0, [r5, 0x1]\n" + "\tadds r1, r7, r0\n" + "\tldrb r0, [r2]\n" + "\tldrb r1, [r1]\n" + "\tcmp r0, r1\n" + "\tbne _0814084A\n" + "\tadds r1, r0, 0\n" + "\tmov r0, r8\n" + "\tbl sub_81408F4\n" + "\tcmp r0, 0\n" + "\tbne _081408DC_return_false\n" + "_0814084A:\n" + "\tadds r5, 0x3\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x4\n" + "\tble _0814082C\n" + "\tmovs r4, 0\n" + "_08140854:\n" + "\tmov r1, sp\n" + "\tadds r0, r1, r4\n" + "\tldrb r1, [r0]\n" + "\tmov r0, r8\n" + "\tbl sub_81408F4\n" + "\tcmp r0, 0\n" + "\tbne _08140820_return_true\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x2\n" + "\tble _08140854\n" + "\tb _081408DC_return_false\n" + "\t.align 2, 0\n" + "_0814086C: .4byte gUnknown_84648AE\n" + "_08140870:\n" + "\tmovs r4, 0\n" + "\tldr r5, _0814089C @ =gUnknown_84648AE\n" + "_08140874:\n" + "\tldrb r0, [r5]\n" + "\tmov r3, sp\n" + "\tadds r2, r3, r0\n" + "\tldrb r0, [r5, 0x1]\n" + "\tadds r1, r3, r0\n" + "\tldrb r0, [r2]\n" + "\tldrb r1, [r1]\n" + "\tcmp r0, r1\n" + "\tbne _08140892\n" + "\tadds r1, r0, 0\n" + "\tmov r0, r8\n" + "\tbl sub_81408F4\n" + "\tcmp r0, 0\n" + "\tbne _08140820_return_true\n" + "_08140892:\n" + "\tadds r5, 0x3\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x4\n" + "\tble _08140874\n" + "\tb _081408DC_return_false\n" + "\t.align 2, 0\n" + "_0814089C: .4byte gUnknown_84648AE\n" + "_081408A0:\n" + "\tmovs r4, 0\n" + "\tldr r5, _081408F0 @ =gUnknown_84648AE\n" + "\tadds r7, r5, 0\n" + "\tmovs r6, 0\n" + "_081408A8:\n" + "\tldrb r0, [r5]\n" + "\tmov r1, sp\n" + "\tadds r2, r1, r0\n" + "\tadds r0, r7, 0x1\n" + "\tadds r0, r6, r0\n" + "\tldrb r0, [r0]\n" + "\tadd r0, sp\n" + "\tldrb r1, [r2]\n" + "\tldrb r0, [r0]\n" + "\tcmp r1, r0\n" + "\tbne _081408D2\n" + "\tldrb r0, [r5, 0x2]\n" + "\tadd r0, sp\n" + "\tldrb r0, [r0]\n" + "\tcmp r1, r0\n" + "\tbne _081408D2\n" + "\tmov r0, r8\n" + "\tbl sub_81408F4\n" + "\tcmp r0, 0\n" + "\tbne _08140820_return_true\n" + "_081408D2:\n" + "\tadds r5, 0x3\n" + "\tadds r6, 0x3\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x4\n" + "\tble _081408A8\n" + "_081408DC_return_false:\n" + "\tmovs r0, 0\n" + "_081408DE:\n" + "\tadd sp, 0x10\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.align 2, 0\n" + "_081408F0: .4byte gUnknown_84648AE"); +} +#endif //NONMATCHING + +static bool32 sub_81408F4(s32 a0, s32 a1) +{ + switch (a0) + { + case 0: + return a1 ^ 4 ? TRUE : FALSE; + case 1: + case 2: + return a1 == 4 ? TRUE : FALSE; + case 3: + return a1 == 5 || a1 == 6 ? TRUE : FALSE; + case 4: + return a1 == 2 || a1 == 3 ? TRUE : FALSE; + case 5: + return a1 == 1 ? TRUE : FALSE; + case 6: + return a1 == 0 ? TRUE : FALSE; + default: + return FALSE; + } +} + +static u8 sub_814096C(s32 a0) +{ + switch (a0) + { + default: + case 4: + return 1; + case 5: + case 6: + return 3; + case 2: + case 3: + return 4; + case 1: + return 5; + case 0: + return 6; + } +} + +static void sub_81409B4(void) +{ + u16 r2 = Random() / 4; + s32 i; + const u16 * r4 = gUnknown_84648D2[sSlotMachineState->machineidx]; + for (i = 0; i < 6; i++) + { + if (r2 < r4[i]) + break; + } + if (sSlotMachineState->field_08 < 5) + { + if (sSlotMachineState->field_0C == 0) + { + if ((Random() & 0x3FFF) < r4[6]) + sSlotMachineState->field_0C = (Random() & 1) ? 5 : 60; + } + if (sSlotMachineState->field_0C != 0) + { + if (i == 0 && (Random() & 0x3FFF) < 0x2CCC) + sSlotMachineState->field_0C = (Random() & 1) ? 5 : 60; + sSlotMachineState->field_0C--; + } + sSlotMachineState->field_08 = i; + } +} + +static void sub_8140A70(void) +{ + sSlotMachineState->field_08 = 0; +} + +static u16 sub_8140A80(void) +{ + u8 sp0[9] = {}; + s32 i; + s32 r4, r3, r2; + s32 r9; + + for (i = 0; i < 5; i++) + sSlotMachineState->field_3C[i] = 0; + + r9 = 0; + r4 = sSlotMachineState->field_20[0]; + r3 = sSlotMachineState->field_20[1]; + r2 = sSlotMachineState->field_20[2]; + + for (i = 0; i < 3; i++) + { + r4++; + if (r4 >= 21) + r4 = 0; + r3++; + if (r3 >= 21) + r3 = 0; + r2++; + if (r2 >= 21) + r2 = 0; + sp0[0 * 3 + i] = gUnknown_8464926[0][r4]; + sp0[1 * 3 + i] = gUnknown_8464926[1][r3]; + sp0[2 * 3 + i] = gUnknown_8464926[2][r2]; + } + sSlotMachineState->payout = 0; + for (i = 0; i < 5; i++) + { + if (sSlotMachineState->bet >= gUnknown_84648BD[i][3]) + { + if (sub_81408F4(1, sp0[gUnknown_84648BD[i][0]])) + r3 = sub_81408F4(2, sp0[gUnknown_84648BD[i][1]]) ? 2 : 1; + else if (sp0[gUnknown_84648BD[i][0]] == sp0[gUnknown_84648BD[i][1]] && sp0[gUnknown_84648BD[i][0]] == sp0[gUnknown_84648BD[i][2]]) + r3 = sub_814096C(sp0[gUnknown_84648BD[i][0]]); + else + r3 = 0; + if (r3 != 0) + { + sSlotMachineState->field_3C[i] = 1; + sSlotMachineState->payout += gUnknown_8464966[r3]; + } + if (r3 > r9) + r9 = r3; + } + } + return r9; +} + +static u16 sub_8140BDC(void) +{ + return sSlotMachineState->payout; +} + +static u8 sub_8140BEC(void) +{ + return sSlotMachineState->bet; +} + +static bool32 sub_8140BF8(s32 a0) +{ + return sSlotMachineState->field_3C[a0]; +} + +static bool32 sub_8140C0C(void) +{ + s32 i; + + for (i = 0; i < NELEMS(gUnknown_84655B0); i++) + LoadCompressedSpriteSheet(&gUnknown_84655B0[i]); + LoadSpritePalettes(gUnknown_84655C8); + sSlotMachineGfxManager = Alloc(sizeof(*sSlotMachineGfxManager)); + if (sSlotMachineGfxManager == NULL) + return FALSE; + sub_8140C6C(sSlotMachineGfxManager); + return TRUE; +} + +static void sub_8140C50(void) +{ + if (sSlotMachineGfxManager != NULL) + { + Free(sSlotMachineGfxManager); + sSlotMachineGfxManager = NULL; + } +} + +static void sub_8140C6C(struct SlotMachineGfxManager * manager) +{ + s32 i, j; + + for (i = 0; i < 3; i++) + { + manager->field_00[i] = 0; + for (j = 0; j < 5; j++) + { + manager->field_0C[i][j] = NULL; + } + } +} + +static void sub_8140CA0(void) +{ + struct Sprite * sprite; + s32 i, j; + s32 spriteId; + s32 animId; + for (i = 0; i < 3; i++) + { + for (j = 0; j < 5; j++) + { + spriteId = CreateSprite(&gUnknown_84657E4, 80 + 40 * i, 44 + 24 * j, 2); + animId = gUnknown_8464926[i][j]; + sprite = &gSprites[spriteId]; + StartSpriteAnim(sprite, animId); + sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_8465608[animId]); + sprite->data[0] = i; + sprite->data[1] = j; + sprite->data[2] = j; + sprite->data[3] = 0; + sprite->oam.matrixNum = 0; + sSlotMachineGfxManager->field_0C[i][j] = sprite; + sSlotMachineGfxManager->field_70 = (vu16 *)(OAM + 0 * sizeof(struct OamData) + offsetof(struct OamData, affineParam)); + } + } +} + +static void sub_8140D7C(const s16 * a0, const s16 * a1) +{ + s32 i, j; + s32 r6, r10; + + for (i = 0; i < 3; i++) + { + r6 = *a0; + r10 = *a1 * 8; + for (j = 0; j < 5; j++) + { + sSlotMachineGfxManager->field_0C[i][j]->pos2.y = r10; + { + s32 r4 = gUnknown_8464926[i][r6]; + struct Sprite * sprite = sSlotMachineGfxManager->field_0C[i][j]; + StartSpriteAnim(sprite, r4); + } + { + s32 r4 = gUnknown_8464926[i][r6]; + struct Sprite * sprite = sSlotMachineGfxManager->field_0C[i][j]; + StartSpriteAnim(sprite, r4); + } + sSlotMachineGfxManager->field_0C[i][j]->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_8465608[gUnknown_8464926[i][r6]]); + r6++; + if (r6 >= 21) + r6 = 0; + } + a0++; + a1++; + } +} + +static void sub_8140E40(void) +{ + s32 vcount = REG_VCOUNT - 0x2B; + if (vcount >= 0 && vcount < 0x54) + { + *sSlotMachineGfxManager->field_70 = gUnknown_8465616[vcount]; + REG_BLDY = gUnknown_84656D6[vcount]; + } + else + { + *sSlotMachineGfxManager->field_70 = 0x100; + REG_BLDY = 0; + } +} + +static void sub_8140E9C(void) +{ + s32 i; + s32 spriteId; + + for (i = 0; i < 4; i++) + { + spriteId = CreateSprite(&gUnknown_846587C, 0x55 + 7 * i, 30, 0); + sSlotMachineGfxManager->field_48[i] = &gSprites[spriteId]; + spriteId = CreateSprite(&gUnknown_846587C, 0x85 + 7 * i, 30, 0); + sSlotMachineGfxManager->field_58[i] = &gSprites[spriteId]; + } +} + +static void sub_8140F2C(void) +{ + s32 coins = GetCoins(); + s32 payout = sub_8140BDC(); + s32 i; + s32 divisor = 1000; + s32 quotient; + + for (i = 0; i < 4; i++) + { + quotient = coins / divisor; + StartSpriteAnim(sSlotMachineGfxManager->field_48[i], quotient); + coins -= quotient * divisor; + quotient = payout / divisor; + StartSpriteAnim(sSlotMachineGfxManager->field_58[i], quotient); + payout -= quotient * divisor; + divisor /= 10; + } +} + +static void sub_8140FC4(void) +{ + s32 spriteId; + + spriteId = CreateSprite(&gUnknown_84658D8, 0x10, 0x88, 1); + sSlotMachineGfxManager->field_68[0] = &gSprites[spriteId]; + spriteId = CreateSprite(&gUnknown_84658D8, 0xE0, 0x88, 1); + sSlotMachineGfxManager->field_68[1] = &gSprites[spriteId]; + sSlotMachineGfxManager->field_68[1]->hFlip = TRUE; +} + +static void sub_8141020(u8 a0) +{ + s32 i; + for (i = 0; i < 2; i++) + { + StartSpriteAnim(sSlotMachineGfxManager->field_68[i], a0); + } +} + +static bool32 sub_814104C(void) +{ + s32 i; + + struct SlotMachineSetupTaskData * ptr = Alloc(sizeof(struct SlotMachineSetupTaskData)); + if (ptr == NULL) + return FALSE; + for (i = 0; i < 8; i++) + ptr->field_0000[i].unk3 = 0; + ptr->field_0028 = 0; + SetWordTaskArg(CreateTask(sub_81410CC, 2), 0, (uintptr_t)ptr); + return FALSE; +} + +static void sub_8141094(void) +{ + if (FuncIsActiveTask(sub_81410CC)) + { + Free(sub_814112C()); + DestroyTask(FindTaskIdByFunc(sub_81410CC)); + } + sub_8140C50(); + FreeAllWindowBuffers(); +} + +static void sub_81410CC(u8 taskId) +{ + struct SlotMachineSetupTaskData * ptr = (void *)GetWordTaskArg(taskId, 0); + s32 i; + + for (i = 0; i < 8; i++) + { + if (ptr->field_0000[i].unk3) + ptr->field_0000[i].unk3 = gUnknown_84658F0[ptr->field_0000[i].unk0](&ptr->field_0000[i].unk2, ptr); + } +} + +static void sub_8141118(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); +} + +static struct SlotMachineSetupTaskData * sub_814112C(void) +{ + return (void *)GetWordTaskArg(FindTaskIdByFunc(sub_81410CC), 0); +} + +static void sub_8141148(u16 a0, u8 a1) +{ + struct SlotMachineSetupTaskData * ptr = sub_814112C(); + ptr->field_0000[a1].unk0 = a0; + ptr->field_0000[a1].unk2 = 0; + ptr->field_0000[a1].unk3 = gUnknown_84658F0[a0](&ptr->field_0000[a1].unk2, ptr); +} + +static bool32 sub_8141180(u8 a0) +{ + return sub_814112C()->field_0000[a0].unk3; +} + +#ifdef NONMATCHING +static bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + u16 pal; + struct TextColor textColor; + u32 x; + + switch (*state) + { + case 0: + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + (*state)++; + break; + case 1: + SetVBlankCallback(NULL); + ResetSpriteData(); + FreeAllSpritePalettes(); + RequestDma3Fill(0, (void *)OAM, OAM_SIZE, 1); + RequestDma3Fill(0, (void *)VRAM, 0x20, 1); + RequestDma3Fill(0, (void *)(VRAM + 0xC000), 0x20, 1); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgPositions(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_8466B10, NELEMS(gUnknown_8466B10)); + InitWindows(gUnknown_8466B20); + + SetBgTilemapBuffer(3, ptr->field_205C); + FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 32, 32); + CopyBgTilemapBufferToVram(3); + + ResetTempTileDataBuffers(); + DecompressAndCopyTileDataToVram(2, gUnknown_84659D0, 0, 0x00, 0); + DecompressAndCopyTileDataToVram(2, gUnknown_846653C, 0, 0xC0, 0); + SetBgTilemapBuffer(2, ptr->field_185C); + CopyToBgTilemapBuffer(2, gUnknown_84661D4, 0, 0x00); + CopyBgTilemapBufferToVram(2); + LoadPalette(gUnknown_8465930, 0x00, 0xA0); + LoadPalette(gUnknown_84664BC, 0x50, 0x20); + LoadPalette(gUnknown_84665C0, 0x70, 0x60); + pal = RGB(30, 30, 31); + LoadPalette(&pal, 0x00, 0x02); + LoadUserWindowBorderGfx(0, 0x00A, 0xD0); + sub_814FDA0(0, 0x001, 0xF0); + + SetBgTilemapBuffer(0, ptr->field_085C); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 2, 32, 30); + DecompressAndCopyTileDataToVram(1, gUnknown_8466620, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, gUnknown_8466998, 0, 0, 1); + CopyBgTilemapBufferToVram(1); + + LoadPalette(stdpal_get(2), 0xE0, 0x20); + FillWindowPixelBuffer(1, 0xFF); + PutWindowTilemap(1); + + x = 0xEC - GetStringWidth(0, gString_SlotMachineControls, 0); + textColor.fgColor = 15; + textColor.bgColor = 1; + textColor.shadowColor = 2; + AddTextPrinterParameterized3(1, 0, x, 0, &textColor, 0, gString_SlotMachineControls); + CopyBgTilemapBufferToVram(0); + + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | 0x20 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN); + sub_8140C0C(); + sub_8140CA0(); + sub_8140E9C(); + sub_8140FC4(); + sub_8140F2C(); + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); + SetVBlankCallback(sub_8141118); + SetHBlankCallback(sub_8140E40); + (*state)++; + break; + case 2: + if (!FreeTempTileDataBuffersIfPossible()) + { + ShowBg(0); + ShowBg(3); + ShowBg(2); + HideBg(1); + sub_8141B34(); + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); + (*state)++; + } + break; + case 3: + UpdatePaletteFade(); + if (!gPaletteFade.active) + return FALSE; + break; + } + return TRUE; +} +#else +NAKED +static bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tsub sp, 0x14\n" + "\tadds r7, r0, 0\n" + "\tmov r8, r1\n" + "\tldrb r6, [r7]\n" + "\tcmp r6, 0x1\n" + "\tbeq _081411D0\n" + "\tcmp r6, 0x1\n" + "\tbgt _081411B4\n" + "\tcmp r6, 0\n" + "\tbeq _081411C2\n" + "\tb _08141450\n" + "_081411B4:\n" + "\tcmp r6, 0x2\n" + "\tbne _081411BA\n" + "\tb _081413E4\n" + "_081411BA:\n" + "\tcmp r6, 0x3\n" + "\tbne _081411C0\n" + "\tb _08141436\n" + "_081411C0:\n" + "\tb _08141450\n" + "_081411C2:\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tmovs r1, 0x10\n" + "\tmovs r2, 0\n" + "\tbl BlendPalettes\n" + "\tb _0814142E\n" + "_081411D0:\n" + "\tmovs r0, 0\n" + "\tbl SetVBlankCallback\n" + "\tbl ResetSpriteData\n" + "\tbl FreeAllSpritePalettes\n" + "\tmovs r1, 0xE0\n" + "\tlsls r1, 19\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 3\n" + "\tmovs r0, 0\n" + "\tmovs r3, 0x1\n" + "\tbl RequestDma3Fill\n" + "\tmovs r1, 0xC0\n" + "\tlsls r1, 19\n" + "\tmovs r0, 0\n" + "\tmovs r2, 0x20\n" + "\tmovs r3, 0x1\n" + "\tbl RequestDma3Fill\n" + "\tldr r1, _0814139C @ =0x0600c000\n" + "\tmovs r0, 0\n" + "\tmovs r2, 0x20\n" + "\tmovs r3, 0x1\n" + "\tbl RequestDma3Fill\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tbl ResetBgPositions\n" + "\tmovs r0, 0\n" + "\tbl ResetBgsAndClearDma3BusyFlags\n" + "\tldr r1, _081413A0 @ =gUnknown_8466B10\n" + "\tmovs r0, 0\n" + "\tmovs r2, 0x4\n" + "\tbl InitBgsFromTemplates\n" + "\tldr r0, _081413A4 @ =gUnknown_8466B20\n" + "\tbl InitWindows\n" + "\tldr r1, _081413A8 @ =0x0000205c\n" + "\tadd r1, r8\n" + "\tmovs r0, 0x3\n" + "\tbl SetBgTilemapBuffer\n" + "\tmovs r4, 0x20\n" + "\tstr r4, [sp]\n" + "\tstr r4, [sp, 0x4]\n" + "\tmovs r0, 0x3\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl FillBgTilemapBufferRect_Palette0\n" + "\tmovs r0, 0x3\n" + "\tbl CopyBgTilemapBufferToVram\n" + "\tbl ResetTempTileDataBuffers\n" + "\tldr r1, _081413AC @ =gUnknown_84659D0\n" + "\tmovs r5, 0\n" + "\tstr r5, [sp]\n" + "\tmovs r0, 0x2\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl DecompressAndCopyTileDataToVram\n" + "\tldr r1, _081413B0 @ =gUnknown_846653C\n" + "\tstr r5, [sp]\n" + "\tmovs r0, 0x2\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0xC0\n" + "\tbl DecompressAndCopyTileDataToVram\n" + "\tldr r1, _081413B4 @ =0x0000185c\n" + "\tadd r1, r8\n" + "\tmovs r0, 0x2\n" + "\tbl SetBgTilemapBuffer\n" + "\tldr r1, _081413B8 @ =gUnknown_84661D4\n" + "\tmovs r0, 0x2\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl CopyToBgTilemapBuffer\n" + "\tmovs r0, 0x2\n" + "\tbl CopyBgTilemapBufferToVram\n" + "\tldr r0, _081413BC @ =gUnknown_8465930\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0xA0\n" + "\tbl LoadPalette\n" + "\tldr r0, _081413C0 @ =gUnknown_84664BC\n" + "\tmovs r1, 0x50\n" + "\tmovs r2, 0x20\n" + "\tbl LoadPalette\n" + "\tldr r0, _081413C4 @ =gUnknown_84665C0\n" + "\tmovs r1, 0x70\n" + "\tmovs r2, 0x60\n" + "\tbl LoadPalette\n" + "\tldr r1, _081413C8 @ =0x00007fde\n" + "\tadd r0, sp, 0xC\n" + "\tstrh r1, [r0]\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0x2\n" + "\tbl LoadPalette\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0xA\n" + "\tmovs r2, 0xD0\n" + "\tbl LoadUserWindowBorderGfx\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0xF0\n" + "\tbl sub_814FDA0\n" + "\tldr r1, _081413CC @ =0x0000085c\n" + "\tadd r1, r8\n" + "\tmovs r0, 0\n" + "\tbl SetBgTilemapBuffer\n" + "\tstr r4, [sp]\n" + "\tmovs r0, 0x1E\n" + "\tstr r0, [sp, 0x4]\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x2\n" + "\tbl FillBgTilemapBufferRect_Palette0\n" + "\tldr r1, _081413D0 @ =gUnknown_8466620\n" + "\tstr r5, [sp]\n" + "\tmovs r0, 0x1\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl DecompressAndCopyTileDataToVram\n" + "\tldr r1, _081413D4 @ =gUnknown_8466998\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl DecompressAndCopyTileDataToVram\n" + "\tmovs r0, 0x1\n" + "\tbl CopyBgTilemapBufferToVram\n" + "\tmovs r0, 0x2\n" + "\tbl stdpal_get\n" + "\tmovs r1, 0xE0\n" + "\tmovs r2, 0x20\n" + "\tbl LoadPalette\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0xFF\n" + "\tbl FillWindowPixelBuffer\n" + "\tmovs r0, 0x1\n" + "\tbl PutWindowTilemap\n" + "\tldr r4, _081413D8 @ =gString_SlotMachineControls\n" + "\tmovs r0, 0\n" + "\tadds r1, r4, 0\n" + "\tmovs r2, 0\n" + "\tbl GetStringWidth\n" + "\tmovs r2, 0xEC\n" + "\tsubs r2, r0\n" + "\tadd r1, sp, 0x10\n" + "\tmovs r0, 0xF\n" + "\tstrb r0, [r1]\n" + "\tstrb r6, [r1, 0x1]\n" + "\tmovs r0, 0x2\n" + "\tstrb r0, [r1, 0x2]\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tstr r1, [sp]\n" + "\tstr r5, [sp, 0x4]\n" + "\tstr r4, [sp, 0x8]\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0\n" + "\tbl AddTextPrinterParameterized3\n" + "\tmovs r0, 0\n" + "\tbl CopyBgTilemapBufferToVram\n" + "\tmovs r1, 0x83\n" + "\tlsls r1, 5\n" + "\tmovs r0, 0\n" + "\tbl SetGpuRegBits\n" + "\tmovs r0, 0x50\n" + "\tmovs r1, 0xF8\n" + "\tbl SetGpuReg\n" + "\tbl sub_8140C0C\n" + "\tbl sub_8140CA0\n" + "\tbl sub_8140E9C\n" + "\tbl sub_8140FC4\n" + "\tbl sub_8140F2C\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tmovs r1, 0x10\n" + "\tmovs r2, 0\n" + "\tbl BlendPalettes\n" + "\tldr r0, _081413DC @ =sub_8141118\n" + "\tbl SetVBlankCallback\n" + "\tldr r0, _081413E0 @ =sub_8140E40\n" + "\tbl SetHBlankCallback\n" + "\tb _0814142E\n" + "\t.align 2, 0\n" + "_0814139C: .4byte 0x0600c000\n" + "_081413A0: .4byte gUnknown_8466B10\n" + "_081413A4: .4byte gUnknown_8466B20\n" + "_081413A8: .4byte 0x0000205c\n" + "_081413AC: .4byte gUnknown_84659D0\n" + "_081413B0: .4byte gUnknown_846653C\n" + "_081413B4: .4byte 0x0000185c\n" + "_081413B8: .4byte gUnknown_84661D4\n" + "_081413BC: .4byte gUnknown_8465930\n" + "_081413C0: .4byte gUnknown_84664BC\n" + "_081413C4: .4byte gUnknown_84665C0\n" + "_081413C8: .4byte 0x00007fde\n" + "_081413CC: .4byte 0x0000085c\n" + "_081413D0: .4byte gUnknown_8466620\n" + "_081413D4: .4byte gUnknown_8466998\n" + "_081413D8: .4byte gString_SlotMachineControls\n" + "_081413DC: .4byte sub_8141118\n" + "_081413E0: .4byte sub_8140E40\n" + "_081413E4:\n" + "\tbl FreeTempTileDataBuffersIfPossible\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0\n" + "\tbne _08141450\n" + "\tmovs r0, 0\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x3\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x2\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x1\n" + "\tbl HideBg\n" + "\tbl sub_8141B34\n" + "\tmovs r4, 0x1\n" + "\tnegs r4, r4\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x10\n" + "\tmovs r2, 0\n" + "\tbl BlendPalettes\n" + "\tstr r5, [sp]\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r4, 0\n" + "\tmovs r2, 0x10\n" + "\tmovs r3, 0\n" + "\tbl BeginNormalPaletteFade\n" + "\tmovs r0, 0x3\n" + "\tbl EnableInterrupts\n" + "_0814142E:\n" + "\tldrb r0, [r7]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r7]\n" + "\tb _08141450\n" + "_08141436:\n" + "\tbl UpdatePaletteFade\n" + "\tldr r0, _0814144C @ =gPaletteFade\n" + "\tldrb r1, [r0, 0x7]\n" + "\tmovs r0, 0x80\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _08141450\n" + "\tmovs r0, 0\n" + "\tb _08141452\n" + "\t.align 2, 0\n" + "_0814144C: .4byte gPaletteFade\n" + "_08141450:\n" + "\tmovs r0, 0x1\n" + "_08141452:\n" + "\tadd sp, 0x14\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +#endif //NONMATCHING + +static bool8 sub_8141460(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, 0); + (*state)++; + break; + case 1: + if (!gPaletteFade.active) + return FALSE; + break; + } + return TRUE; +} + +static bool8 sub_81414AC(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141834(GetBgTilemapBuffer(2)); + CopyBgTilemapBufferToVram(2); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +static bool8 sub_81414EC(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8141020(1); + return FALSE; +} + +static bool8 sub_81414FC(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8141020(2); + CreateTask(sub_814191C, 3); + return FALSE; +} + +static bool8 sub_8141518(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141AB0(); + (*state)++; + break; + case 1: + if (!FuncIsActiveTask(sub_814191C)) + { + sub_8141020(0); + return FALSE; + } + break; + } + return TRUE; +} + +static bool8 sub_8141558(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8141020(3); + return FALSE; +} + +static bool8 sub_8141568(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8141020(FALSE); + return FALSE; +} + +static bool8 sub_8141578(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8140F2C(); + return FALSE; +} + +static bool8 sub_8141584(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_81417E4(gString_OutOfCoins); + CopyWindowToVram(0, 3); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +static bool8 sub_81415C8(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_81417E4(gString_QuitPlaying); + sub_8141AD8(0); + CopyWindowToVram(0, 3); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +static bool8 sub_8141610(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141828(); + sub_8141B18(); + CopyWindowToVram(0, 3); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +static bool8 sub_8141650(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141BA0(ptr->field_0020); + CopyBgTilemapBufferToVram(2); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +static bool8 sub_8141690(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141BE4(); + CopyBgTilemapBufferToVram(2); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +static bool8 sub_81416C8(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WININ, 0x3F); + SetGpuReg(REG_OFFSET_WINOUT, 0x3D); + SetGpuReg(REG_OFFSET_WIN0H, 0x00); + SetGpuReg(REG_OFFSET_WIN1H, 0xA0); + ShowBg(1); + PlaySE(SE_WIN_OPEN); + ptr->field_0024 = 0; + (*state)++; + break; + case 1: + ptr->field_0024 += 16; + if (ptr->field_0024 >= 256) + { + ptr->field_0024 = 256; + (*state)++; + } + ChangeBgX(1, 256 * (256 - ptr->field_0024), 0); + SetGpuReg(REG_OFFSET_WIN0H, ptr->field_0024); + break; + case 2: + return FALSE; + } + return TRUE; +} + +static bool8 sub_8141764(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + PlaySE(SE_WIN_OPEN); + (*state)++; + // fallthrough + case 1: + ptr->field_0024 -= 16; + if (ptr->field_0024 <= 0) + { + ptr->field_0024 = 0; + (*state)++; + } + ChangeBgX(1, 256 * (256 - ptr->field_0024), 0); + SetGpuReg(REG_OFFSET_WIN0H, ptr->field_0024); + break; + case 2: + HideBg(1); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + (*state)++; + break; + case 3: + return FALSE; + } + return TRUE; +} + +static void sub_81417E4(const u8 * str) +{ + FillWindowPixelBuffer(0, 0x11); + PutWindowTilemap(0); + DrawTextBorderOuter(0, 0x001, 15); + AddTextPrinterParameterized5(0, 2, str, 1, 2, -1, NULL, 1, 2); +} + +static void sub_8141828(void) +{ + rbox_fill_rectangle(0); +} + +static void sub_8141834(u16 * bgTilemapBuffer) +{ + switch (sub_8140BEC()) + { + case 0: + sub_81418C4(bgTilemapBuffer, 0, 4); + sub_81418C4(bgTilemapBuffer, 1, 4); + sub_81418C4(bgTilemapBuffer, 2, 4); + sub_81418C4(bgTilemapBuffer, 3, 4); + sub_81418C4(bgTilemapBuffer, 4, 4); + break; + case 3: + sub_81418C4(bgTilemapBuffer, 0, 5); + sub_81418C4(bgTilemapBuffer, 4, 5); + case 2: + sub_81418C4(bgTilemapBuffer, 1, 5); + sub_81418C4(bgTilemapBuffer, 3, 5); + case 1: + sub_81418C4(bgTilemapBuffer, 2, 5); + break; + } +} + +static void sub_81418C4(u16 * bgTilemapBuffer, u16 whichLine, u16 paletteNum) +{ + s32 i; + const u16 * tileIdxs = gUnknown_8466C0C[whichLine].tiles; + u16 palMask = (paletteNum & 0xF) << 12; + + for (i = 0; i < gUnknown_8466C0C[whichLine].count; i++) + { + bgTilemapBuffer[*tileIdxs] &= 0x0FFF; + bgTilemapBuffer[*tileIdxs] |= palMask; + tileIdxs++; + } +} + +static void sub_814191C(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + s32 i; + + switch (data[0]) + { + case 0: + LoadPalette(gUnknown_84664BC, 0x60, 0x20); + for (i = 0; i < 5; i++) + { + if (sub_8140BF8(i)) + sub_81418C4(GetBgTilemapBuffer(2), i, 6); + } + CopyBgTilemapBufferToVram(2); + data[0]++; + break; + case 1: + if (data[1] == 0) + { + u16 y = gSineTable[data[2]] >> 7; + LoadPalette(&gUnknown_84664DC[16 * y], 0x10, 0x20); + data[2] += 32; + data[2] &= 0x7F; + data[1] = 8; + } + else + data[1]--; + + if (data[3] == 0) + { + data[4] += 8; + data[4] &= 0x7F; + data[5] = gSineTable[data[4]] >> 5; + BlendPalettes(0x00000040, data[5], RGB_BLACK); + } + else + { + data[4]++; + if (data[4] > 1) + { + data[4] = 0; + data[5]++; + data[5] &= 1; + BlendPalettes(0x00000040, data[5] * 8, RGB_BLACK); + } + } + + for (i = 0; i < NELEMS(gUnknown_8466C34); i++) + { + gPlttBufferFaded[gUnknown_8466C34[i] + 0x60] = gPlttBufferUnfaded[gUnknown_8466C34[i] + 0x60]; + } + break; + case 2: + for (i = 0; i < 5; i++) + { + if (sub_8140BF8(i)) + sub_81418C4(GetBgTilemapBuffer(2), i, 4); + } + LoadPalette(gUnknown_8465950, 0x10, 0x20); + CopyBgTilemapBufferToVram(2); + data[0]++; + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + DestroyTask(taskId); + break; + } +} + +static void sub_8141AB0(void) +{ + gTasks[FindTaskIdByFunc(sub_814191C)].data[0] = 2; +} + +static void sub_8141AD8(u8 cursorPos) +{ + CreateYesNoMenu(&gUnknown_8466C38, 2, 0, 2, 10, 13, cursorPos); + Menu_MoveCursorNoWrapAround(cursorPos); + sub_814112C()->field_0028 = TRUE; +} + +static void sub_8141B18(void) +{ + struct SlotMachineSetupTaskData * data = sub_814112C(); + if (data->field_0028) + { + DestroyYesNoMenu(); + data->field_0028 = FALSE; + } +} + +static void sub_8141B34(void) +{ + s32 i, j; + struct SlotMachineSetupTaskData * data = sub_814112C(); + u16 * buffer = GetBgTilemapBuffer(2); + + for (i = 0; i < 3; i++) + { + for (j = 0; j < 4; j++) + { + u16 idx = gUnknown_8466C40[i][j]; + data->field_0044[i][j] = buffer[idx]; + data->field_002C[i][j] = j + 0xC0; + } + } +} + +static void sub_8141BA0(u8 reel) +{ + if (reel < 3) + { + s32 i; + struct SlotMachineSetupTaskData * data = sub_814112C(); + u16 * buffer = GetBgTilemapBuffer(2); + for (i = 0; i < 4; i++) + { + u16 idx = gUnknown_8466C40[reel][i]; + buffer[idx] = data->field_002C[reel][i]; + } + } +} + +static void sub_8141BE4(void) +{ + s32 i, j; + struct SlotMachineSetupTaskData * data = sub_814112C(); + u16 * buffer = GetBgTilemapBuffer(2); + + for (i = 0; i < 3; i++) + { + for (j = 0; j < 4; j++) + { + u16 idx = gUnknown_8466C40[i][j]; + buffer[idx] = data->field_0044[i][j]; + } + } +} + +static void sub_8141C30(u8 a0, u8 a1) +{ + sub_814112C()->field_0020 = a0; + sub_8141148(12, a1); +} diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 0b0e7b932..3594c79a2 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1208,11 +1208,11 @@ static void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) switch (data[7]) { case 0: - sub_80D08B8(data[6]); + BT_StartOnField(data[6]); ++data[7]; break; case 1: - if (sub_80D08F8()) + if (BT_IsDone()) { SetMainCallback2(sub_800FD9C); DestroyTask(taskId); diff --git a/src/title_screen.c b/src/title_screen.c new file mode 100644 index 000000000..f4086b2ff --- /dev/null +++ b/src/title_screen.c @@ -0,0 +1,1056 @@ +#include "global.h" +#include "malloc.h" +#include "palette.h" +#include "gpu_regs.h" +#include "bg.h" +#include "task.h" +#include "main.h" +#include "new_menu_helpers.h" +#include "m4a.h" +#include "scanline_effect.h" +#include "graphics.h" +#include "help_system.h" +#include "intro.h" +#include "load_save.h" +#include "sound.h" +#include "new_game.h" +#include "save.h" +#include "main_menu.h" +#include "clear_save_data_screen.h" +#include "berry_fix_program.h" +#include "decompress.h" +#include "constants/songs.h" +#include "constants/species.h" + +enum TitleScreenScene +{ + TITLESCREENSCENE_INIT = 0, + TITLESCREENSCENE_FLASHSPRITE, + TITLESCREENSCENE_FADEIN, + TITLESCREENSCENE_RUN, + TITLESCREENSCEEN_RESTART, + TITLESCREENSCENE_CRY +}; + +#if defined(FIRERED) +#define TITLE_SPECIES SPECIES_CHARIZARD +#elif defined(LEAFGREEN) +#define TITLE_SPECIES SPECIES_VENUSAUR +#endif + +static EWRAM_DATA u8 sTitleScreenTimerTaskId = 0; + +static void ResetGpuRegs(void); +static void CB2_TitleScreenRun(void); +static void VBlankCB(void); +static void Task_TitleScreenTimer(u8 taskId); +static void Task_TitleScreenMain(u8 taskId); +static void SetTitleScreenScene(s16 * data, u8 a1); +static void SetTitleScreenScene_Init(s16 * data); +static void SetTitleScreenScene_FlashSprite(s16 * data); +static void SetTitleScreenScene_FadeIn(s16 * data); +static void SetTitleScreenScene_Run(s16 * data); +static void SetGpuRegsForTitleScreenRun(void); +static void SetTitleScreenScene_Restart(s16 * data); +static void SetTitleScreenScene_Cry(s16 * data); +static void Task_TitleScreen_SlideWin0(u8 taskId); +static void Task_TitleScreen_PaletteSomething(u8 taskId); +static void SignalEndTitleScreenPaletteSomethingTask(void); +static void UpdateScanlineEffectRegBuffer(s16 a0); +static void ScheduleStopScanlineEffect(void); +static void LoadMainTitleScreenPalsAndResetBgs(void); +static void CB2_FadeOutTransitionToSaveClearScreen(void); +static void CB2_FadeOutTransitionToBerryFix(void); +static void LoadSpriteGfxAndPals(void); +static void Task_FlameOrLeafSpawner(u8 taskId); +static void TitleScreen_srand(u8 taskId, u8 field, u16 seed); +static u16 TitleScreen_rand(u8 taskId, u8 field); +static u32 CreateBlankSprite(void); +static void SetPalOnOrCreateBlankSprite(bool32 a0); +static u8 CreateSlashSprite(void); +static void ScheduleHideSlashSprite(u8 spriteId); +static bool32 IsSlashSpriteHidden(u8 spriteId); +static void SpriteCallback_Slash(struct Sprite * sprite); + +// bg3 +static const u8 sBorderBgTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83BF58C.4bpp.lz"); +static const u8 sBorderBgMap[] = INCBIN_U8("data/graphics/title_screen/unk_83BF5A8.bin.lz"); + +//sprites +static const u8 sSlashSpriteTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83bf64c.4bpp.lz"); +static const u16 sSlashSpritePals[] = INCBIN_U16("data/graphics/title_screen/unk_83bf77c.gbapal"); +static const u8 sFireSpriteTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83bf79c.4bpp.lz"); +static const u8 sBlankFireSpriteTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83bfa14.4bpp.lz"); + +static const struct OamData sOamData_FlameOrLeaf = { + .objMode = ST_OAM_OBJ_NORMAL, + .shape = ST_OAM_SQUARE, + .size = ST_OAM_SIZE_1, + .tileNum = 0, + .priority = 3, + .paletteNum = 0 +}; + +static const union AnimCmd sSpriteAnims_FlameOrLeaf_0[] = { + ANIMCMD_FRAME(0x00, 3), + ANIMCMD_FRAME(0x04, 6), + ANIMCMD_FRAME(0x08, 6), + ANIMCMD_FRAME(0x0c, 6), + ANIMCMD_FRAME(0x10, 6), + ANIMCMD_FRAME(0x14, 6), + ANIMCMD_FRAME(0x18, 6), + ANIMCMD_FRAME(0x1c, 6), + ANIMCMD_FRAME(0x20, 6), + ANIMCMD_FRAME(0x24, 6), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnims_FlameOrLeaf_1[] = { + ANIMCMD_FRAME(0x18, 6), + ANIMCMD_FRAME(0x1c, 6), + ANIMCMD_FRAME(0x20, 6), + ANIMCMD_FRAME(0x24, 6), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_FlameOrLeaf[] = { + sSpriteAnims_FlameOrLeaf_0, + sSpriteAnims_FlameOrLeaf_1 +}; + +static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State1 = { + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_FlameOrLeaf, + .anims = sSpriteAnimTable_FlameOrLeaf, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State0 = { + .tileTag = 1, + .paletteTag = 0, + .oam = &sOamData_FlameOrLeaf, + .anims = sSpriteAnimTable_FlameOrLeaf, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct OamData sOamData_UnknownTemptySprite = { + .objMode = ST_OAM_OBJ_NORMAL, + .shape = ST_OAM_V_RECTANGLE, + .size = ST_OAM_SIZE_3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +static const struct SpriteTemplate sUnknownEmptySprite = { + .tileTag = 2, + .paletteTag = 2, + .oam = &sOamData_UnknownTemptySprite, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct OamData sOamData_SlashSprite = { + .objMode = ST_OAM_OBJ_WINDOW, + .shape = ST_OAM_SQUARE, + .size = ST_OAM_SIZE_3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +static const struct SpriteTemplate sSlashSpriteTemplate = { + .tileTag = 3, + .paletteTag = 2, + .oam = &sOamData_SlashSprite, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct BgTemplate sBgTemplates[] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 1, // 8bpp + .priority = 0, + .baseTile = 0 + }, { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, // 4bpp + .priority = 1, + .baseTile = 0 + }, { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, // 4bpp + .priority = 2, + .baseTile = 0 + }, { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, // 4bpp + .priority = 3, + .baseTile = 0 + } +}; + +static void (*const sSceneFuncs[])(s16 * data) = { + SetTitleScreenScene_Init, + SetTitleScreenScene_FlashSprite, + SetTitleScreenScene_FadeIn, + SetTitleScreenScene_Run, + SetTitleScreenScene_Restart, + SetTitleScreenScene_Cry +}; + +static const struct CompressedSpriteSheet sSpriteSheets[] = { + {(const void *)sFireSpriteTiles, 0x500, 0}, + {(const void *)sBlankFireSpriteTiles, 0x500, 1}, + {(const void *)gGraphics_TitleScreen_BlankObjTiles, 0x400, 2}, + {(const void *)sSlashSpriteTiles, 0x800, 3} +}; + +static const struct SpritePalette sSpritePals[] = { + {sSlashSpritePals, 0}, + {gGraphics_TitleScreen_FirePals, 2}, + {} +}; + +static const u8 gUnknown_83BFBD4[] = { + 0x04, 0x10, 0x1a, 0x20, 0x30, 0xc8, 0xd8, 0xe0, 0xe8, 0x3c, 0x4c, 0x5c, 0x6c, 0x80, 0x90 +}; + +void CB2_InitTitleScreen(void) +{ + switch (gMain.state) + { + default: + gMain.state = 0; + // fallthrough + case 0: + SetVBlankCallback(NULL); + StartTimer1(); + InitHeap(gHeap, HEAP_SIZE); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetGpuRegs(); + DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16(3, 0, (void *)PLTT, PLTT_SIZE); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + sTitleScreenTimerTaskId = 0xFF; + break; + case 1: + LoadPalette(gGraphics_TitleScreen_PokemonFireRedLogoPals, 0, 0x1A0); + DecompressAndCopyTileDataToVram(0, gGraphics_TitleScreen_PokemonFireRedLogoTiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(0, gGraphics_TitleScreen_PokemonFireRedLogoMap, 0, 0, 1); + LoadPalette(gGraphics_TitleScreen_CharizardPals, 0xD0, 0x20); + DecompressAndCopyTileDataToVram(1, gGraphics_TitleScreen_CharizardTiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, gGraphics_TitleScreen_CharizardMap, 0, 0, 1); + LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xF0, 0x20); + DecompressAndCopyTileDataToVram(2, gGraphics_TitleScreen_CopyrightPressStartTiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(2, gGraphics_TitleScreen_CopyrightPressStartMap, 0, 0, 1); + LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xE0, 0x20); + DecompressAndCopyTileDataToVram(3, sBorderBgTiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(3, sBorderBgMap, 0, 0, 1); + LoadSpriteGfxAndPals(); + break; + case 2: + if (!FreeTempTileDataBuffersIfPossible()) + { + BlendPalettes(0x0000FFFF, 0x10, RGB_BLACK); + CreateTask(Task_TitleScreenMain, 4); + sTitleScreenTimerTaskId = CreateTask(Task_TitleScreenTimer, 2); + SetVBlankCallback(VBlankCB); + SetMainCallback2(CB2_TitleScreenRun); + m4aSongNumStart(BGM_FRLG_TITLE); + } + return; + } + gMain.state++; +} + +static void ResetGpuRegs(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG1HOFS, 0); + SetGpuReg(REG_OFFSET_BG1VOFS, 0); + SetGpuReg(REG_OFFSET_BG2HOFS, 0); + SetGpuReg(REG_OFFSET_BG2VOFS, 0); + SetGpuReg(REG_OFFSET_BG3HOFS, 0); + SetGpuReg(REG_OFFSET_BG3VOFS, 0); +} + +static void CB2_TitleScreenRun(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void VBlankCB(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ScanlineEffect_InitHBlankDmaTransfer(); + + if (sTitleScreenTimerTaskId != 0xFF) + gTasks[sTitleScreenTimerTaskId].data[0]++; +} + +static void Task_TitleScreenTimer(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (data[0] >= 2700) + { + sTitleScreenTimerTaskId = 0xFF; + DestroyTask(taskId); + } +} + +static void Task_TitleScreenMain(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (JOY_NEW(A_BUTTON | B_BUTTON | START_BUTTON) + && data[0] != 3 && data[0] != 4 && data[0] != 5) + { + ScheduleStopScanlineEffect(); + LoadMainTitleScreenPalsAndResetBgs(); + SetPalOnOrCreateBlankSprite(data[5]); + SetTitleScreenScene(data, TITLESCREENSCENE_RUN); + } + else + { + sSceneFuncs[data[0]](data); + } +} + +static void SetTitleScreenScene(s16 * data, u8 a1) +{ + data[1] = 0; + data[0] = a1; +} + +static void SetTitleScreenScene_Init(s16 * data) +{ + struct ScanlineEffectParams params; + + HideBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + + params.dmaDest = (volatile void *)REG_ADDR_BLDY; + params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + params.initState = 1; + params.unused9 = 0; + + CpuFill16(0, gScanlineEffectRegBuffers[0], 0x140); + CpuFill16(0, gScanlineEffectRegBuffers[1], 0x140); + + ScanlineEffect_SetParams(params); + + SetTitleScreenScene(data, TITLESCREENSCENE_FLASHSPRITE); +} + +static void SetTitleScreenScene_FlashSprite(s16 * data) +{ + switch (data[1]) + { + case 0: + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_LIGHTEN); + SetGpuReg(REG_OFFSET_BLDY, 0); + data[2] = 0x80; + UpdateScanlineEffectRegBuffer(data[2]); + data[1]++; + break; + case 1: + data[2] -= 4; + UpdateScanlineEffectRegBuffer(data[2]); + if (data[2] < 0) + { + gScanlineEffect.state = 3; + data[1]++; + } + break; + case 2: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetTitleScreenScene(data, TITLESCREENSCENE_FADEIN); + } +} + +static void SetTitleScreenScene_FadeIn(s16 * data) +{ + u32 r4; + switch (data[1]) + { + case 0: + data[2] = 0; + data[1]++; + break; + case 1: + data[2]++; + if (data[2] > 10) + { + TintPalette_GrayScale2(gPlttBufferUnfaded + 0xD0, 0x10); + BeginNormalPaletteFade(0x00002000, 9, 0x10, 0, RGB_BLACK); + data[1]++; + } + break; + case 2: + if (!gPaletteFade.active) + { + data[2] = 0; + data[1]++; + } + break; + case 3: + data[2]++; + if (data[2] > 36) + { + CreateTask(Task_TitleScreen_SlideWin0, 3); + sub_80717A8(0x2000, -4, 0x01, 0x10, RGB(30, 30, 31), 0, 0); + data[2] = 0; + data[1]++; + } + break; + case 4: + if (!sub_807185C(0)) + { + sub_80717A8(0x2000, -4, 0x0F, 0x00, RGB(30, 30, 31), 0, 0); + data[1]++; + } + break; + case 5: + data[2]++; + if (data[2] > 20) + { + data[2] = 0; + sub_80717A8(0x2000, -4, 0x01, 0x10, RGB(30, 30, 31), 0, 0); + data[1]++; + } + break; + case 6: + if (!sub_807185C(0)) + { + sub_80717A8(0x2000, -4, 0x0F, 0x00, RGB(30, 30, 31), 0, 0); + data[1]++; + } + break; + case 7: + data[2]++; + if (data[2] > 20) + { + data[2] = 0; + sub_80717A8(0x2000, -3, 0x00, 0x10, RGB(30, 30, 31), 0, 0); + data[1]++; + } + break; + case 8: + if (!sub_807185C(0)) + { + data[5] = 1; + r4 = (0x10000 << CreateBlankSprite()) | 0x00001FFF; + BlendPalettes(r4, 0x10, RGB(30, 30, 31)); + BeginNormalPaletteFade(r4, 1, 0x10, 0x00, RGB(30, 30, 31)); + ShowBg(0); + CpuCopy16(gGraphics_TitleScreen_CharizardPals, gPlttBufferUnfaded + 0xD0, 0x20); + sub_80717A8(0x2000, 1, 0x0F, 0x00, RGB(30, 30, 31), 0, 0); + data[1]++; + } + break; + case 9: + if (!sub_807185C(0) && !gPaletteFade.active) + { + SetTitleScreenScene(data, TITLESCREENSCENE_RUN); + } + break; + } +} + +#define KEYSTROKE_DELSAVE (B_BUTTON | SELECT_BUTTON | DPAD_UP) +#define KEYSTROKE_BERRY_FIX (B_BUTTON | SELECT_BUTTON) + +static void SetTitleScreenScene_Run(s16 * data) +{ + switch (data[1]) + { + case 0: + HelpSystem_SetSomeVariable2(1); + CreateTask(Task_TitleScreen_PaletteSomething, 0); + CreateTask(Task_FlameOrLeafSpawner, 5); + SetGpuRegsForTitleScreenRun(); + data[6] = CreateSlashSprite(); + sub_812B484(); + data[1]++; + // fallthrough + case 1: + if (JOY_HELD(KEYSTROKE_DELSAVE) == KEYSTROKE_DELSAVE) + { + ScheduleHideSlashSprite(data[6]); + DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); + SetMainCallback2(CB2_FadeOutTransitionToSaveClearScreen); + } + else if (JOY_HELD(KEYSTROKE_BERRY_FIX) == KEYSTROKE_BERRY_FIX) + { + ScheduleHideSlashSprite(data[6]); + DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); + SetMainCallback2(CB2_FadeOutTransitionToBerryFix); + } + else if (JOY_NEW(A_BUTTON | START_BUTTON)) + { + SetTitleScreenScene(data, TITLESCREENSCENE_CRY); + } + else if (!FuncIsActiveTask(Task_TitleScreenTimer)) + { + SetTitleScreenScene(data, TITLESCREENSCEEN_RESTART); + } + break; + } +} + +static void SetGpuRegsForTitleScreenRun(void) +{ + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0x3F, 0x1F)); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_LIGHTEN); + SetGpuReg(REG_OFFSET_BLDY, 13); +} + +static void SetTitleScreenScene_Restart(s16 * data) +{ + switch (data[1]) + { + case 0: + ScheduleHideSlashSprite(data[6]); + data[1]++; + break; + case 1: + if (!gPaletteFade.active && !IsSlashSpriteHidden(data[6])) + { + FadeOutMapMusic(10); + BeginNormalPaletteFade(0xFFFFFFFF, 3, 0, 0x10, RGB_BLACK); + SignalEndTitleScreenPaletteSomethingTask(); + data[1]++; + } + break; + case 2: + if (IsNotWaitingForBGMStop() && !gPaletteFade.active) + { + DestroyTask(FindTaskIdByFunc(Task_TitleScreen_PaletteSomething)); + data[2] = 0; + data[1]++; + } + break; + case 3: + data[2]++; + if (data[2] >= 20) + { + DestroyTask(FindTaskIdByFunc(Task_TitleScreen_PaletteSomething)); + data[1]++; + } + break; + case 4: + sub_812B478(); + DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); + SetMainCallback2(sub_80EC864); + break; + } +} + +static void SetTitleScreenScene_Cry(s16 * data) +{ + switch (data[1]) + { + case 0: + if (!gPaletteFade.active) + { + PlayCry1(TITLE_SPECIES, 0); + ScheduleHideSlashSprite(data[6]); + data[2] = 0; + data[1]++; + } + break; + case 1: + if (data[2] < 90) + data[2]++; + else if (!IsSlashSpriteHidden(data[6])) + { + BeginNormalPaletteFade(0x0FFFFFFF, 0, 0, 0x10, RGB_WHITE); + SignalEndTitleScreenPaletteSomethingTask(); + FadeOutBGM(4); + data[1]++; + } + break; + case 2: + if (!gPaletteFade.active) + { + SeedRngAndSetTrainerId(); + SetSaveBlocksPointers(); + ResetMenuAndMonGlobals(); + Save_ResetSaveCounters(); + Save_LoadGameData(0); + if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_INVALID) + Sav2_ClearSetDefault(); + SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); + InitHeap(gHeap, HEAP_SIZE); + SetMainCallback2(sub_800C300); + DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain)); + } + break; + } +} + +static void Task_TitleScreen_SlideWin0(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WININ, WIN_RANGE(0x00, 0x3F)); + SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0x00, 0x37)); + SetGpuReg(REG_OFFSET_WIN0V, 0xA0); + SetGpuReg(REG_OFFSET_WIN0H, 0x00); + BlendPalettes(0x00004000, 0, RGB_BLACK); + data[0]++; + break; + case 1: + data[1] += 0x180; + data[2] = data[1] >> 4; + if (data[2] >= 0xF0) + { + data[2] = 0xF0; + data[0]++; + } + SetGpuReg(REG_OFFSET_WIN0H, data[2]); + break; + case 2: + data[3]++; + if (data[3] >= 10) + { + data[3] = 0; + data[0]++; + } + break; + case 3: + SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0, 0x3B)); + SetGpuReg(REG_OFFSET_WIN0H, 0xF0F0); + ChangeBgX(2, -0xF000, 0); + BlendPalettes(0x00008000, 0, RGB_BLACK); + data[1] = 0xF00; + data[0]++; + break; + case 4: + data[1] -= 0x180; + data[2] = data[1] >> 4; + if (data[2] <= 0) + { + data[2] = 0; + data[0]++; + } + ChangeBgX(2, -data[2] << 8, 0); + SetGpuReg(REG_OFFSET_WIN0H, (data[2] << 8) | 0xF0); + break; + case 5: + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + DestroyTask(taskId); + break; + } +} + +static void Task_TitleScreen_PaletteSomething(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + s32 i; + + if (data[15] && gPaletteFade.active) + data[14] = 1; + if (data[14] && !gPaletteFade.active) + DestroyTask(taskId); + else + { + if (!data[1]) + data[2] = 60; + else + data[2] = 30; + data[0]++; + if (data[0] >= data[2]) + { + data[0] = 0; + data[1] ^= 1; + if (data[1]) + { + for (i = 0; i < 5; i++) + { + gPlttBufferUnfaded[0xF1 + i] = gGraphics_TitleScreen_BackgroundPals[6]; + gPlttBufferFaded[0xF1 + i] = gGraphics_TitleScreen_BackgroundPals[6]; + } + } + else + { + for (i = 0; i < 5; i++) + { + gPlttBufferUnfaded[0xF1 + i] = gGraphics_TitleScreen_BackgroundPals[1 + i]; + gPlttBufferFaded[0xF1 + i] = gGraphics_TitleScreen_BackgroundPals[1 + i]; + } + } + if (data[14]) + { + BlendPalettes(0x00008000, gPaletteFade.y, gPaletteFade.blendColor); + } + } + } +} + +static void SignalEndTitleScreenPaletteSomethingTask(void) +{ + u8 taskId = FindTaskIdByFunc(Task_TitleScreen_PaletteSomething); + gTasks[taskId].data[15] = TRUE; +} + +static void UpdateScanlineEffectRegBuffer(s16 a0) +{ + s32 i; + + if (a0 >= 0) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0] = 16; + } + + for (i = 0; i < 16; i++) + { + if (a0 + i >= 0) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0 + i] = 15 - i; + } + if (a0 - i >= 0) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0 - i] = 15 - i; + } + } + for (i = a0 + 16; i < 160; i++) + { + if (i >= 0) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = 0; + } + } + for (i = a0 - 16; i >= 0; i--) + { + if (i >= 0) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = 0; + } + } +} + +static void ScheduleStopScanlineEffect(void) +{ + if (gScanlineEffect.state) + gScanlineEffect.state = 3; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); +} + +static void LoadMainTitleScreenPalsAndResetBgs(void) +{ + u8 taskId; + + taskId = FindTaskIdByFunc(Task_TitleScreen_SlideWin0); + if (taskId != 0xFF) + DestroyTask(taskId); + + sub_8071898(); + ResetPaletteFadeControl(); + LoadPalette(gGraphics_TitleScreen_PokemonFireRedLogoPals, 0x00, 0x1A0); + LoadPalette(gGraphics_TitleScreen_CharizardPals, 0xD0, 0x20); + LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xF0, 0x20); + LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xE0, 0x20); + ResetBgPositions(); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); + ShowBg(1); + ShowBg(2); + ShowBg(0); + ShowBg(3); +} + +static void CB2_FadeOutTransitionToSaveClearScreen(void) +{ + if (!UpdatePaletteFade()) + SetMainCallback2(CB2_SaveClearScreen_Init); +} + +static void CB2_FadeOutTransitionToBerryFix(void) +{ + if (!UpdatePaletteFade()) + { + m4aMPlayAllStop(); + SetMainCallback2(mb_berry_fix_serve); + } +} + +static void LoadSpriteGfxAndPals(void) +{ + s32 i; + + for (i = 0; i < NELEMS(sSpriteSheets); i++) + LoadCompressedSpriteSheet(&sSpriteSheets[i]); + LoadSpritePalettes(sSpritePals); +} + +static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite * sprite) +{ + s16 * data = sprite->data; + sprite->data[0] -= data[1]; + sprite->pos1.x = sprite->data[0] >> 4; + if (sprite->pos1.x < -8) + { + DestroySprite(sprite); + return; + } + data[2] += data[3]; + sprite->pos1.y = data[2] >> 4; + if (sprite->pos1.y < 0x10 || sprite->pos1.y > 0xc8) + { + DestroySprite(sprite); + return; + } +#if defined(FIRERED) + if (sprite->animEnded) + { + DestroySprite(sprite); + return; + } + if (data[7] != 0 && --data[7] == 0) + { + StartSpriteAnim(sprite, 0); + sprite->invisible = FALSE; + } +#elif defined(LEAFGREEN) + if (!data[5]) + { + s32 r2; + s32 r1; + data[6]++; + r2 = data[1] * data[6]; + r1 = data[6] * data[3]; + r2 = (r2 * r2) >> 4; + r1 = (r1 * r1) >> 4; + if (r2 + r1 >= 0x510) + data[5] = TRUE; + } +#endif +} + +static bool32 CreateFlameOrLeafSprite(s32 x, s32 y, s32 xspeed, s32 yspeed, bool32 templateId) +{ + u8 spriteId; + if (templateId) + { + spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State1, x, y, 0); + } + else + { + spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State0, x, y, 0); + } + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = x << 4; + gSprites[spriteId].data[1] = xspeed; + gSprites[spriteId].data[2] = y << 4; + gSprites[spriteId].data[3] = yspeed; + gSprites[spriteId].data[4] = 0; + gSprites[spriteId].data[5] = (xspeed * yspeed) % 16; + gSprites[spriteId].data[6] = templateId; + gSprites[spriteId].callback = SpriteCallback_TitleScreenFlameOrLeaf; + return TRUE; + } + return FALSE; +} + +static void Task_FlameOrLeafSpawner(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + s32 x, y, xspeed, yspeed, templateId; + s32 i; + + switch (data[0]) + { + case 0: + TitleScreen_srand(taskId, 3, 30840); + data[0]++; + break; + case 1: + data[1]++; + if (data[1] >= data[2]) + { + data[1] = 0; + TitleScreen_rand(taskId, 3); + data[2] = 18; + xspeed = (TitleScreen_rand(taskId, 3) % 4) - 2; + yspeed = (TitleScreen_rand(taskId, 3) % 8) - 16; + y = (TitleScreen_rand(taskId, 3) % 3) + 0x74; + x = TitleScreen_rand(taskId, 3) % 240; + CreateFlameOrLeafSprite( + x, + y, + xspeed, + yspeed, + (TitleScreen_rand(taskId, 3) % 16) < 8 ? 0 : 1 + ); + for (i = 0; i < 15; i++) + { + CreateFlameOrLeafSprite( + data[5] + gUnknown_83BFBD4[i], + y, + xspeed, + yspeed, + 1 + ); + xspeed = (TitleScreen_rand(taskId, 3) % 4) - 2; + yspeed = (TitleScreen_rand(taskId, 3) % 8) - 16; + } + data[5]++; + if (data[5] > 3) + data[5] = 0; + } + } +} + +static void TitleScreen_srand(u8 taskId, u8 field, u16 seed) +{ + SetWordTaskArg(taskId, field, seed); +} + +static u16 TitleScreen_rand(u8 taskId, u8 field) +{ + u32 rngval; + + rngval = GetWordTaskArg(taskId, field); + rngval = rngval * 1103515245 + 24691; + SetWordTaskArg(taskId, field, rngval); + return rngval >> 16; +} + +static u32 CreateBlankSprite(void) +{ + CreateSprite(&sUnknownEmptySprite, 0x18, 0x90, 0); + return IndexOfSpritePaletteTag(2); +} + +static void SetPalOnOrCreateBlankSprite(bool32 mode) +{ + u32 palIdx; + + if (mode) + { + palIdx = IndexOfSpritePaletteTag(2); + LoadPalette(gGraphics_TitleScreen_FirePals, palIdx * 16 + 0x100, 0x20); + } + else + CreateBlankSprite(); +} + +static u8 CreateSlashSprite(void) +{ + u8 spriteId = CreateSprite(&sSlashSpriteTemplate, -0x20, 0x1B, 1); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].callback = SpriteCallback_Slash; + gSprites[spriteId].data[1] = 540; + } + return spriteId; +} + +static void ScheduleHideSlashSprite(u8 spriteId) +{ + if (spriteId != MAX_SPRITES) + gSprites[spriteId].data[2] = TRUE; +} + +static bool32 IsSlashSpriteHidden(u8 spriteId) +{ + if (spriteId != MAX_SPRITES) + return gSprites[spriteId].data[0] ^ 2 ? TRUE : FALSE; + else + return FALSE; +} + +static void SpriteCallback_Slash(struct Sprite * sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (sprite->data[2]) + { + sprite->invisible = TRUE; + sprite->data[0] = 2; + } + sprite->data[1]--; + if (sprite->data[1] == 0) + { + sprite->invisible = FALSE; + sprite->data[0] = 1; + } + break; + case 1: + sprite->pos1.x += 9; + if (sprite->pos1.x == 67) + { + sprite->pos1.y -= 7; + } + if (sprite->pos1.x == 148) + { + sprite->pos1.y += 7; + } + if (sprite->pos1.x > 272) + { + sprite->invisible = TRUE; + if (sprite->data[2]) + sprite->data[0] = 2; + else + { + sprite->pos1.x = -0x20; + sprite->data[1] = 540; + sprite->data[0] = 0; + } + } + break; + case 2: + break; + } +} diff --git a/src/trainer_tower.c b/src/trainer_tower.c index f1ae2d4e5..d80be781d 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -1111,7 +1111,7 @@ void sub_815E114(void) void sub_815E124(u8 taskId) { - if (sub_80D08F8() == TRUE) + if (BT_IsDone() == TRUE) { gMain.savedCallback = sub_815E114; CleanupOverworldWindowsAndTilemaps(); @@ -1129,7 +1129,7 @@ void sub_815E160(void) sub_815E9FC(); CreateTask(sub_815E124, 1); PlayMapChosenOrBattleBGM(0); - sub_80D08B8(sub_8080060()); + BT_StartOnField(sub_8080060()); } void sub_815E1C0(void) diff --git a/src/vs_seeker.c b/src/vs_seeker.c index e3df77242..f7b29292a 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/songs.h" #include "sound.h" #include "task.h" #include "malloc.h" @@ -22,7 +23,6 @@ #include "map_obj_8097404.h" #include "unk_810c3a4.h" #include "constants/movement_commands.h" -#include "constants/songs.h" #include "vs_seeker.h" typedef enum diff --git a/sym_ewram.txt b/sym_ewram.txt index a1739776e..865957a6b 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -769,9 +769,10 @@ gUnknown_2037F24: @ 2037F24 gUnknown_2037F28: @ 2037F28 .space 0x8 -gUnknown_2037F30: @ 2037F30 - .space 0x4 + .align 2 + .include "src/title_screen.o" + .align 2 gUnknown_2037F34: @ 2037F34 .space 0x200 @@ -1055,10 +1056,7 @@ gUnknown_2039A24: @ 2039A24 .space 0x4 .include "src/coins.o" - - .align 2 -gUnknown_2039A2C: @ 2039A2C - .space 0x4 + .include "src/battle_transition.o" gUnknown_2039A30: @ 2039A30 .space 0x4 @@ -1390,11 +1388,8 @@ gUnknown_203F38C: @ 203F38C gUnknown_203F39C: @ 203F39C .space 0x4 -gUnknown_203F3A0: @ 203F3A0 - .space 0x4 - -gUnknown_203F3A4: @ 203F3A4 - .space 0x4 + .align 2 + .include "src/slot_machine.o" sLocationHistory: @ 203F3A8 .space 0x6 diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile index e5cb6ad31..af7d19fe9 100644 --- a/tools/aif2pcm/Makefile +++ b/tools/aif2pcm/Makefile @@ -6,7 +6,10 @@ LIBS = -lm SRCS = main.c extended.c -.PHONY: clean +.PHONY: all clean + +all: aif2pcm + @: aif2pcm: $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile index 73f78980e..ab11e1b61 100644 --- a/tools/bin2c/Makefile +++ b/tools/bin2c/Makefile @@ -2,10 +2,13 @@ CC = gcc CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 -.PHONY: clean +.PHONY: all clean SRCS = bin2c.c +all: bin2c + @: + bin2c: $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/gbafix/Makefile b/tools/gbafix/Makefile index f12c8cc4f..5b410da08 100644 --- a/tools/gbafix/Makefile +++ b/tools/gbafix/Makefile @@ -1,8 +1,11 @@ CC = gcc -.PHONY: clean +.PHONY: all clean SRCS = gbafix.c +all: gbafix + @: + gbafix: $(SRCS) $(CC) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/jsonproc/Makefile b/tools/jsonproc/Makefile index b415e7b41..721da1025 100644 --- a/tools/jsonproc/Makefile +++ b/tools/jsonproc/Makefile @@ -8,7 +8,7 @@ SRCS := jsonproc.cpp HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp -.PHONY: clean +.PHONY: all clean all: jsonproc @: diff --git a/tools/mapjson/Makefile b/tools/mapjson/Makefile index d09acad50..9a49be506 100644 --- a/tools/mapjson/Makefile +++ b/tools/mapjson/Makefile @@ -6,7 +6,10 @@ SRCS := json11.cpp mapjson.cpp HEADERS := mapjson.h -.PHONY: clean +.PHONY: all clean + +all: mapjson + @: mapjson: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index 3d3275819..63dedda1f 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -8,7 +8,10 @@ SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \ utf8.h -.PHONY: clean +.PHONY: all clean + +all: preproc + @: preproc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/ramscrgen/Makefile b/tools/ramscrgen/Makefile index 9aa309aa1..858db1a77 100644 --- a/tools/ramscrgen/Makefile +++ b/tools/ramscrgen/Makefile @@ -6,7 +6,10 @@ SRCS := main.cpp sym_file.cpp elf.cpp HEADERS := ramscrgen.h sym_file.h elf.h char_util.h -.PHONY: clean +.PHONY: all clean + +all: ramscrgen + @: ramscrgen: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile index 582be7b88..abe1cab51 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -6,7 +6,10 @@ LIBS = -lpng -lz SRCS = main.c convert_png.c util.c font.c -.PHONY: clean +.PHONY: all clean + +all: rsfont + @: rsfont: $(SRCS) convert_png.h gfx.h global.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) diff --git a/tools/scaninc/Makefile b/tools/scaninc/Makefile index 53c9d0060..1516f159c 100644 --- a/tools/scaninc/Makefile +++ b/tools/scaninc/Makefile @@ -6,7 +6,10 @@ SRCS = scaninc.cpp c_file.cpp asm_file.cpp source_file.cpp HEADERS := scaninc.h asm_file.h c_file.h source_file.h -.PHONY: clean +.PHONY: all clean + +all: scaninc + @: scaninc: $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) |