summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis/calcrom/calcrom.pl36
-rw-r--r--asm/battle_setup.s4
-rw-r--r--asm/battle_tower.s6
-rw-r--r--asm/battle_transition.s7480
-rw-r--r--asm/clear_save_data_screen.s6
-rw-r--r--asm/overworld.s6
-rw-r--r--asm/slot_machine.s4794
-rw-r--r--asm/title_screen.s2310
-rw-r--r--data/data_83F5738.s123
-rw-r--r--data/field_map_obj.s8
-rw-r--r--data/field_weather.s3
-rw-r--r--data/graphics.s45
-rw-r--r--data/graphics/title_screen/unk_83BF58C.pngbin0 -> 78 bytes
-rw-r--r--data/graphics/title_screen/unk_83BF5A8.bin1
-rw-r--r--data/graphics/title_screen/unk_83bf64c.pngbin0 -> 188 bytes
-rw-r--r--data/graphics/title_screen/unk_83bf77c.pal19
-rw-r--r--data/graphics/title_screen/unk_83bf79c.pngbin0 -> 539 bytes
-rw-r--r--data/graphics/title_screen/unk_83bfa14.pngbin0 -> 150 bytes
-rw-r--r--data/slot_machine.s94
-rw-r--r--data/strings.s6
-rw-r--r--data/title_screen.s34
-rw-r--r--graphics/battle_transitions/agatha_bg.pal19
-rw-r--r--graphics/battle_transitions/big_pokeball_tilemap.binbin0 -> 1200 bytes
-rw-r--r--graphics/battle_transitions/big_pokeball_tileset.pngbin0 -> 553 bytes
-rw-r--r--graphics/battle_transitions/blue_bg.pal19
-rw-r--r--graphics/battle_transitions/bruno_bg.pal19
-rw-r--r--graphics/battle_transitions/green_bg.pal19
-rw-r--r--graphics/battle_transitions/grid_square_tileset.pngbin0 -> 121 bytes
-rw-r--r--graphics/battle_transitions/lance_bg.pal19
-rw-r--r--graphics/battle_transitions/lorelei_bg.pal19
-rw-r--r--graphics/battle_transitions/red_bg.pal19
-rw-r--r--graphics/battle_transitions/sliding_pokeball.pal19
-rw-r--r--graphics/battle_transitions/sliding_pokeball.pngbin0 -> 309 bytes
-rw-r--r--graphics/battle_transitions/sliding_pokeball_tilemap.binbin0 -> 64 bytes
-rw-r--r--graphics/battle_transitions/unused_brendan.pngbin0 -> 475 bytes
-rw-r--r--graphics/battle_transitions/unused_lass.pngbin0 -> 412 bytes
-rw-r--r--graphics/battle_transitions/unused_trainer.pal19
-rw-r--r--graphics/battle_transitions/vsbar_tilemap.binbin0 -> 1280 bytes
-rw-r--r--graphics/battle_transitions/vsbar_tileset.pngbin0 -> 158 bytes
-rw-r--r--graphics/slot_machine/unk_8464974.pal19
-rw-r--r--graphics/slot_machine/unk_8464994.pal19
-rw-r--r--graphics/slot_machine/unk_84649b4.pal19
-rw-r--r--graphics/slot_machine/unk_84649d4.pal19
-rw-r--r--graphics/slot_machine/unk_84649f4.pal19
-rw-r--r--graphics/slot_machine/unk_8464a14.pngbin0 -> 1234 bytes
-rw-r--r--graphics/slot_machine/unk_846504c.pal19
-rw-r--r--graphics/slot_machine/unk_846506c.pngbin0 -> 909 bytes
-rw-r--r--graphics/slot_machine/unk_8465524.pal19
-rw-r--r--graphics/slot_machine/unk_8465544.pngbin0 -> 215 bytes
-rw-r--r--graphics/slot_machine/unk_8465930.pal19
-rw-r--r--graphics/slot_machine/unk_8465950.pal19
-rw-r--r--graphics/slot_machine/unk_8465970.pal19
-rw-r--r--graphics/slot_machine/unk_8465990.pal19
-rw-r--r--graphics/slot_machine/unk_84659b0.pal19
-rw-r--r--graphics/slot_machine/unk_84659d0.pngbin0 -> 1736 bytes
-rw-r--r--graphics/slot_machine/unk_84661d4.binbin0 -> 1280 bytes
-rw-r--r--graphics/slot_machine/unk_84664bc.pal19
-rw-r--r--graphics/slot_machine/unk_84664dc.pal19
-rw-r--r--graphics/slot_machine/unk_84664fc.pal19
-rw-r--r--graphics/slot_machine/unk_846651c.pal19
-rw-r--r--graphics/slot_machine/unk_846653c.pngbin0 -> 229 bytes
-rw-r--r--graphics/slot_machine/unk_84665c0.pal19
-rw-r--r--graphics/slot_machine/unk_84665e0.pal19
-rw-r--r--graphics/slot_machine/unk_8466600.pal19
-rw-r--r--graphics/slot_machine/unk_8466620.pngbin0 -> 772 bytes
-rw-r--r--graphics/slot_machine/unk_8466998.binbin0 -> 1280 bytes
-rw-r--r--graphics/title_screen/unk_8eab6c4.pal259
-rw-r--r--graphics/title_screen/unk_8eab8c4.pngbin0 -> 5614 bytes
-rw-r--r--graphics/title_screen/unk_8ead390.binbin0 -> 1280 bytes
-rw-r--r--graphics/title_screen/unk_8ead5e8.pal19
-rw-r--r--graphics/title_screen/unk_8ead608.pngbin0 -> 1792 bytes
-rw-r--r--graphics/title_screen/unk_8eadee4.binbin0 -> 1280 bytes
-rw-r--r--graphics/title_screen/unk_8eae094.pal19
-rw-r--r--graphics/title_screen/unk_8eae0b4.pngbin0 -> 597 bytes
-rw-r--r--graphics/title_screen/unk_8eae374.binbin0 -> 1280 bytes
-rw-r--r--graphics/title_screen/unk_8eae488.pal19
-rw-r--r--graphics/title_screen/unk_8eae4a8.pngbin0 -> 148 bytes
-rw-r--r--graphics_file_rules.mk11
-rw-r--r--include/battle_transition.h37
-rw-r--r--include/berry_fix_program.h6
-rw-r--r--include/clear_save_data_screen.h6
-rw-r--r--include/field_camera.h1
-rw-r--r--include/field_effect.h2
-rw-r--r--include/global.h2
-rw-r--r--include/graphics.h13
-rw-r--r--include/intro.h6
-rw-r--r--include/main.h2
-rw-r--r--include/main_menu.h6
-rw-r--r--include/new_menu_helpers.h1
-rw-r--r--include/overworld.h1
-rw-r--r--include/palette.h4
-rw-r--r--include/quest_log.h1
-rw-r--r--include/slot_machine.h2
-rw-r--r--include/strings.h5
-rw-r--r--include/trainer_pokemon_sprites.h7
-rw-r--r--ld_script.txt12
-rw-r--r--src/battle_transition.c3728
-rw-r--r--src/diploma.c8
-rw-r--r--src/pokemon.c4
-rw-r--r--src/slot_machine.c2886
-rw-r--r--src/teachy_tv.c4
-rw-r--r--src/title_screen.c1056
-rw-r--r--src/trainer_tower.c4
-rw-r--r--src/vs_seeker.c2
-rw-r--r--sym_ewram.txt17
-rw-r--r--tools/aif2pcm/Makefile5
-rw-r--r--tools/bin2c/Makefile5
-rw-r--r--tools/gbafix/Makefile5
-rw-r--r--tools/jsonproc/Makefile2
-rw-r--r--tools/mapjson/Makefile5
-rw-r--r--tools/preproc/Makefile5
-rw-r--r--tools/ramscrgen/Makefile5
-rw-r--r--tools/rsfont/Makefile5
-rw-r--r--tools/scaninc/Makefile5
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
new file mode 100644
index 000000000..895457c3c
--- /dev/null
+++ b/data/graphics/title_screen/unk_83BF58C.png
Binary files differ
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
new file mode 100644
index 000000000..260e00a01
--- /dev/null
+++ b/data/graphics/title_screen/unk_83bf64c.png
Binary files differ
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
new file mode 100644
index 000000000..66a57a899
--- /dev/null
+++ b/data/graphics/title_screen/unk_83bf79c.png
Binary files differ
diff --git a/data/graphics/title_screen/unk_83bfa14.png b/data/graphics/title_screen/unk_83bfa14.png
new file mode 100644
index 000000000..f4f030a5b
--- /dev/null
+++ b/data/graphics/title_screen/unk_83bfa14.png
Binary files differ
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
new file mode 100644
index 000000000..691e16ef7
--- /dev/null
+++ b/graphics/battle_transitions/big_pokeball_tilemap.bin
Binary files differ
diff --git a/graphics/battle_transitions/big_pokeball_tileset.png b/graphics/battle_transitions/big_pokeball_tileset.png
new file mode 100644
index 000000000..21b227441
--- /dev/null
+++ b/graphics/battle_transitions/big_pokeball_tileset.png
Binary files differ
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
new file mode 100644
index 000000000..fb8a9e6fd
--- /dev/null
+++ b/graphics/battle_transitions/grid_square_tileset.png
Binary files differ
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
new file mode 100644
index 000000000..3802a915b
--- /dev/null
+++ b/graphics/battle_transitions/sliding_pokeball.png
Binary files differ
diff --git a/graphics/battle_transitions/sliding_pokeball_tilemap.bin b/graphics/battle_transitions/sliding_pokeball_tilemap.bin
new file mode 100644
index 000000000..6cdeb0d17
--- /dev/null
+++ b/graphics/battle_transitions/sliding_pokeball_tilemap.bin
Binary files differ
diff --git a/graphics/battle_transitions/unused_brendan.png b/graphics/battle_transitions/unused_brendan.png
new file mode 100644
index 000000000..926ba0ff7
--- /dev/null
+++ b/graphics/battle_transitions/unused_brendan.png
Binary files differ
diff --git a/graphics/battle_transitions/unused_lass.png b/graphics/battle_transitions/unused_lass.png
new file mode 100644
index 000000000..378fa3c19
--- /dev/null
+++ b/graphics/battle_transitions/unused_lass.png
Binary files differ
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
new file mode 100644
index 000000000..4f170b470
--- /dev/null
+++ b/graphics/battle_transitions/vsbar_tilemap.bin
Binary files differ
diff --git a/graphics/battle_transitions/vsbar_tileset.png b/graphics/battle_transitions/vsbar_tileset.png
new file mode 100644
index 000000000..1d327cdaf
--- /dev/null
+++ b/graphics/battle_transitions/vsbar_tileset.png
Binary files differ
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
new file mode 100644
index 000000000..be8dfb6e8
--- /dev/null
+++ b/graphics/slot_machine/unk_8464a14.png
Binary files differ
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
new file mode 100644
index 000000000..1fe951e50
--- /dev/null
+++ b/graphics/slot_machine/unk_846506c.png
Binary files differ
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
new file mode 100644
index 000000000..0e3154f61
--- /dev/null
+++ b/graphics/slot_machine/unk_8465544.png
Binary files differ
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
new file mode 100644
index 000000000..5223d0d3f
--- /dev/null
+++ b/graphics/slot_machine/unk_84659d0.png
Binary files differ
diff --git a/graphics/slot_machine/unk_84661d4.bin b/graphics/slot_machine/unk_84661d4.bin
new file mode 100644
index 000000000..23182cba7
--- /dev/null
+++ b/graphics/slot_machine/unk_84661d4.bin
Binary files differ
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
new file mode 100644
index 000000000..4fb62b7a3
--- /dev/null
+++ b/graphics/slot_machine/unk_846653c.png
Binary files differ
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
new file mode 100644
index 000000000..73b5d1046
--- /dev/null
+++ b/graphics/slot_machine/unk_8466620.png
Binary files differ
diff --git a/graphics/slot_machine/unk_8466998.bin b/graphics/slot_machine/unk_8466998.bin
new file mode 100644
index 000000000..d7dc278da
--- /dev/null
+++ b/graphics/slot_machine/unk_8466998.bin
Binary files differ
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
new file mode 100644
index 000000000..9d9cd68f1
--- /dev/null
+++ b/graphics/title_screen/unk_8eab8c4.png
Binary files differ
diff --git a/graphics/title_screen/unk_8ead390.bin b/graphics/title_screen/unk_8ead390.bin
new file mode 100644
index 000000000..2987c5cfa
--- /dev/null
+++ b/graphics/title_screen/unk_8ead390.bin
Binary files differ
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
new file mode 100644
index 000000000..c9a0dc8eb
--- /dev/null
+++ b/graphics/title_screen/unk_8ead608.png
Binary files differ
diff --git a/graphics/title_screen/unk_8eadee4.bin b/graphics/title_screen/unk_8eadee4.bin
new file mode 100644
index 000000000..0c309689e
--- /dev/null
+++ b/graphics/title_screen/unk_8eadee4.bin
Binary files differ
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
new file mode 100644
index 000000000..0b4e69015
--- /dev/null
+++ b/graphics/title_screen/unk_8eae0b4.png
Binary files differ
diff --git a/graphics/title_screen/unk_8eae374.bin b/graphics/title_screen/unk_8eae374.bin
new file mode 100644
index 000000000..9bab57cc0
--- /dev/null
+++ b/graphics/title_screen/unk_8eae374.bin
Binary files differ
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
new file mode 100644
index 000000000..682c22432
--- /dev/null
+++ b/graphics/title_screen/unk_8eae4a8.png
Binary files differ
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], &REG_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], &REG_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], &REG_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], &REG_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], &REG_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], &REG_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], &REG_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], &REG_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], &REG_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], &REG_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)