summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-03-08 18:38:30 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-03-08 18:38:30 -0400
commit9f4f0df4d708f720990111034131de703ebfbb19 (patch)
treef104b2717f4dc8f3962e78142ae21ec624d57a5f
parentac38e814546eca637ea4bafe8792b8d38ff486a3 (diff)
fldeff_flash.c
-rw-r--r--asm/fldeff_flash.s964
-rw-r--r--data/fldeff_flash.s74
-rw-r--r--include/event_scripts.h3
-rw-r--r--include/map_preview_screen.h5
-rw-r--r--include/overworld.h1
-rw-r--r--ld_script.txt4
-rw-r--r--src/fldeff_flash.c476
-rw-r--r--src/map_preview_screen.c2
8 files changed, 488 insertions, 1041 deletions
diff --git a/asm/fldeff_flash.s b/asm/fldeff_flash.s
deleted file mode 100644
index c6cc17f82..000000000
--- a/asm/fldeff_flash.s
+++ /dev/null
@@ -1,964 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start SetUpFieldMove_Flash
-SetUpFieldMove_Flash: @ 80C9B2C
- push {lr}
- ldr r0, _080C9B54 @ =gMapHeader
- ldrb r0, [r0, 0x15]
- cmp r0, 0x1
- bne _080C9B6C
- ldr r0, _080C9B58 @ =0x00000806
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _080C9B6C
- ldr r1, _080C9B5C @ =gFieldCallback2
- ldr r0, _080C9B60 @ =FieldCallback_PrepareFadeInFromMenu
- str r0, [r1]
- ldr r1, _080C9B64 @ =gPostMenuFieldCallback
- ldr r0, _080C9B68 @ =sub_80C9B74
- str r0, [r1]
- movs r0, 0x1
- b _080C9B6E
- .align 2, 0
-_080C9B54: .4byte gMapHeader
-_080C9B58: .4byte 0x00000806
-_080C9B5C: .4byte gFieldCallback2
-_080C9B60: .4byte FieldCallback_PrepareFadeInFromMenu
-_080C9B64: .4byte gPostMenuFieldCallback
-_080C9B68: .4byte sub_80C9B74
-_080C9B6C:
- movs r0, 0
-_080C9B6E:
- pop {r1}
- bx r1
- thumb_func_end SetUpFieldMove_Flash
-
- thumb_func_start sub_80C9B74
-sub_80C9B74: @ 80C9B74
- push {r4,lr}
- bl CreateFieldEffectShowMon
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl GetCursorSelectionMonId
- ldr r1, _080C9BA4 @ =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1]
- ldr r1, _080C9BA8 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r2, _080C9BAC @ =sub_80C9BB0
- lsrs r1, r2, 16
- strh r1, [r0, 0x18]
- strh r2, [r0, 0x1A]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9BA4: .4byte gFieldEffectArguments
-_080C9BA8: .4byte gTasks
-_080C9BAC: .4byte sub_80C9BB0
- thumb_func_end sub_80C9B74
-
- thumb_func_start sub_80C9BB0
-sub_80C9BB0: @ 80C9BB0
- push {lr}
- movs r0, 0xC8
- bl PlaySE
- ldr r0, _080C9BC8 @ =0x00000806
- bl FlagSet
- ldr r0, _080C9BCC @ =EventScript_FldEffFlash
- bl ScriptContext1_SetupScript
- pop {r0}
- bx r0
- .align 2, 0
-_080C9BC8: .4byte 0x00000806
-_080C9BCC: .4byte EventScript_FldEffFlash
- thumb_func_end sub_80C9BB0
-
- thumb_func_start sub_80C9BD0
-sub_80C9BD0: @ 80C9BD0
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_80C9BD0
-
- thumb_func_start sub_80C9BE8
-sub_80C9BE8: @ 80C9BE8
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_80C9BE8
-
- thumb_func_start sub_80C9BFC
-sub_80C9BFC: @ 80C9BFC
- push {lr}
- sub sp, 0x8
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xC
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xA
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x8
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r1, _080C9CC8 @ =0x040000d4
- mov r0, sp
- str r0, [r1]
- movs r0, 0xC0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, _080C9CCC @ =0x8100c000
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r2, 0
- str r2, [sp, 0x4]
- add r0, sp, 0x4
- str r0, [r1]
- movs r0, 0xE0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, _080C9CD0 @ =0x85000100
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- mov r0, sp
- strh r2, [r0]
- str r0, [r1]
- ldr r0, _080C9CD4 @ =0x05000002
- str r0, [r1, 0x4]
- ldr r0, _080C9CD8 @ =0x810001ff
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- bl ResetPaletteFade
- bl ResetTasks
- bl ResetSpriteData
- movs r0, 0x1
- bl EnableInterrupts
- ldr r0, _080C9CDC @ =sub_80C9BE8
- bl SetVBlankCallback
- ldr r0, _080C9CE0 @ =sub_80C9BD0
- bl SetMainCallback2
- bl sub_80C9CE8
- lsls r0, 24
- cmp r0, 0
- bne _080C9CC2
- ldr r0, _080C9CE4 @ =gMain
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
-_080C9CC2:
- add sp, 0x8
- pop {r0}
- bx r0
- .align 2, 0
-_080C9CC8: .4byte 0x040000d4
-_080C9CCC: .4byte 0x8100c000
-_080C9CD0: .4byte 0x85000100
-_080C9CD4: .4byte 0x05000002
-_080C9CD8: .4byte 0x810001ff
-_080C9CDC: .4byte sub_80C9BE8
-_080C9CE0: .4byte sub_80C9BD0
-_080C9CE4: .4byte gMain
- thumb_func_end sub_80C9BFC
-
- thumb_func_start sub_80C9CE8
-sub_80C9CE8: @ 80C9CE8
- push {r4-r7,lr}
- bl get_map_light_from_warp0
- lsls r0, 24
- lsrs r7, r0, 24
- bl GetCurrentMapType
- lsls r0, 24
- lsrs r6, r0, 24
- movs r4, 0
- bl sub_80561B4
- ldr r5, _080C9D24 @ =gMapHeader
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r5, 0x14]
- cmp r0, r1
- beq _080C9D36
- ldrb r0, [r5, 0x14]
- movs r1, 0
- bl sub_80F8154
- cmp r0, 0x1
- bne _080C9D36
- ldrb r0, [r5, 0x14]
- bl sub_80CA160
- movs r0, 0x1
- b _080C9D70
- .align 2, 0
-_080C9D24: .4byte gMapHeader
-_080C9D28:
- adds r0, r3, 0x4
- adds r0, r2, r0
- ldr r0, [r0]
- bl _call_via_r0
- movs r0, 0x1
- b _080C9D70
-_080C9D36:
- ldr r5, _080C9D78 @ =gUnknown_83F5738
- lsls r1, r4, 1
- adds r0, r1, r4
- lsls r0, 2
- adds r0, r5
- ldrb r0, [r0]
- cmp r0, 0
- beq _080C9D6E
- adds r3, r5, 0
-_080C9D48:
- adds r0, r1, r4
- lsls r2, r0, 2
- adds r1, r2, r3
- ldrb r0, [r1]
- cmp r0, r7
- bne _080C9D5A
- ldrb r0, [r1, 0x1]
- cmp r0, r6
- beq _080C9D28
-_080C9D5A:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, r4, 1
- adds r0, r1, r4
- lsls r0, 2
- adds r0, r5
- ldrb r0, [r0]
- cmp r0, 0
- bne _080C9D48
-_080C9D6E:
- movs r0, 0
-_080C9D70:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080C9D78: .4byte gUnknown_83F5738
- thumb_func_end sub_80C9CE8
-
- thumb_func_start sub_80C9D7C
-sub_80C9D7C: @ 80C9D7C
- push {r4-r6,lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r5, r0, 24
- lsrs r4, r1, 24
- movs r3, 0
- ldr r1, _080C9DAC @ =gUnknown_83F5738
- ldrb r0, [r1]
- cmp r0, 0
- beq _080C9DC4
- adds r6, r1, 0
-_080C9D92:
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r2, r0, r6
- ldrb r0, [r2]
- cmp r0, r5
- bne _080C9DB0
- ldrb r0, [r2, 0x1]
- cmp r0, r4
- bne _080C9DB0
- ldrb r0, [r2, 0x2]
- b _080C9DC6
- .align 2, 0
-_080C9DAC: .4byte gUnknown_83F5738
-_080C9DB0:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080C9D92
-_080C9DC4:
- movs r0, 0
-_080C9DC6:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80C9D7C
-
- thumb_func_start sub_80C9DCC
-sub_80C9DCC: @ 80C9DCC
- push {r4-r6,lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r5, r0, 24
- lsrs r4, r1, 24
- movs r3, 0
- ldr r1, _080C9DFC @ =gUnknown_83F5738
- ldrb r0, [r1]
- cmp r0, 0
- beq _080C9E14
- adds r6, r1, 0
-_080C9DE2:
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r2, r0, r6
- ldrb r0, [r2]
- cmp r0, r5
- bne _080C9E00
- ldrb r0, [r2, 0x1]
- cmp r0, r4
- bne _080C9E00
- ldrb r0, [r2, 0x3]
- b _080C9E16
- .align 2, 0
-_080C9DFC: .4byte gUnknown_83F5738
-_080C9E00:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080C9DE2
-_080C9E14:
- movs r0, 0
-_080C9E16:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80C9DCC
-
- thumb_func_start sub_80C9E1C
-sub_80C9E1C: @ 80C9E1C
- push {lr}
- ldr r0, _080C9E2C @ =sub_80C9E30
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080C9E2C: .4byte sub_80C9E30
- thumb_func_end sub_80C9E1C
-
- thumb_func_start sub_80C9E30
-sub_80C9E30: @ 80C9E30
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C9E44 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _080C9E48 @ =sub_80C9E4C
- str r0, [r1]
- bx lr
- .align 2, 0
-_080C9E44: .4byte gTasks
-_080C9E48: .4byte sub_80C9E4C
- thumb_func_end sub_80C9E30
-
- thumb_func_start sub_80C9E4C
-sub_80C9E4C: @ 80C9E4C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- ldr r0, _080C9EC8 @ =gUnknown_83F5A44
- ldr r1, _080C9ECC @ =0x0600c000
- bl LZ77UnCompVram
- ldr r0, _080C9ED0 @ =gUnknown_83F5864
- ldr r1, _080C9ED4 @ =0x0600f800
- bl LZ77UnCompVram
- ldr r0, _080C9ED8 @ =gUnknown_83F5804
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _080C9EDC @ =gUnknown_83F5844 + 0x10
- movs r1, 0xE0
- movs r2, 0x10
- bl LoadPalette
- ldr r1, _080C9EE0 @ =0x00003e41
- movs r0, 0x50
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldr r1, _080C9EE4 @ =0x00001f0c =BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(31)
- movs r0, 0x8
- bl SetGpuReg
- movs r1, 0x8A
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r1, _080C9EE8 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080C9EEC @ =sub_80C9EF0
- str r1, [r0]
- movs r2, 0
- movs r1, 0x10
- strh r1, [r0, 0x8]
- strh r2, [r0, 0xA]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9EC8: .4byte gUnknown_83F5A44
-_080C9ECC: .4byte 0x0600c000
-_080C9ED0: .4byte gUnknown_83F5864
-_080C9ED4: .4byte 0x0600f800
-_080C9ED8: .4byte gUnknown_83F5804
-_080C9EDC: .4byte gUnknown_83F5844 + 0x10
-_080C9EE0: .4byte 0x00003e41
-_080C9EE4: .4byte 0x00001f0c
-_080C9EE8: .4byte gTasks
-_080C9EEC: .4byte sub_80C9EF0
- thumb_func_end sub_80C9E4C
-
- thumb_func_start sub_80C9EF0
-sub_80C9EF0: @ 80C9EF0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C9F20 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r5, r1, r2
- ldrh r4, [r5, 0xA]
- movs r0, 0x80
- lsls r0, 5
- adds r1, r4, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- cmp r4, 0x10
- bhi _080C9F24
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- b _080C9F2C
- .align 2, 0
-_080C9F20: .4byte gTasks
-_080C9F24:
- movs r0, 0
- strh r0, [r5, 0xC]
- ldr r0, _080C9F34 @ =sub_80C9F38
- str r0, [r5]
-_080C9F2C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9F34: .4byte sub_80C9F38
- thumb_func_end sub_80C9EF0
-
- thumb_func_start sub_80C9F38
-sub_80C9F38: @ 80C9F38
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _080C9F74 @ =0x00001010
- movs r0, 0x52
- bl SetGpuReg
- ldr r1, _080C9F78 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r4, r0, r1
- ldrh r1, [r4, 0xC]
- cmp r1, 0x7
- bhi _080C9F80
- adds r0, r1, 0x1
- strh r0, [r4, 0xC]
- lsls r1, 1
- ldr r0, _080C9F7C @ =gUnknown_83F5844 + 0x10
- adds r0, r1, r0
- movs r2, 0x10
- subs r2, r1
- lsls r2, 16
- lsrs r2, 16
- movs r1, 0xE0
- bl LoadPalette
- b _080C9F92
- .align 2, 0
-_080C9F74: .4byte 0x00001010
-_080C9F78: .4byte gTasks
-_080C9F7C: .4byte gUnknown_83F5844 + 0x10
-_080C9F80:
- ldr r0, _080C9F98 @ =gUnknown_83F5804
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _080C9F9C @ =sub_80C9FA0
- str r0, [r4]
- movs r0, 0x8
- strh r0, [r4, 0xC]
-_080C9F92:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C9F98: .4byte gUnknown_83F5804
-_080C9F9C: .4byte sub_80C9FA0
- thumb_func_end sub_80C9F38
-
- thumb_func_start sub_80C9FA0
-sub_80C9FA0: @ 80C9FA0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C9FC0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrh r2, [r1, 0xC]
- movs r3, 0xC
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _080C9FC4
- subs r0, r2, 0x1
- strh r0, [r1, 0xC]
- b _080C9FCC
- .align 2, 0
-_080C9FC0: .4byte gTasks
-_080C9FC4:
- ldr r0, _080C9FD0 @ =gMain
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
-_080C9FCC:
- pop {r0}
- bx r0
- .align 2, 0
-_080C9FD0: .4byte gMain
- thumb_func_end sub_80C9FA0
-
- thumb_func_start sub_80C9FD4
-sub_80C9FD4: @ 80C9FD4
- push {lr}
- ldr r0, _080C9FE4 @ =sub_80C9FE8
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080C9FE4: .4byte sub_80C9FE8
- thumb_func_end sub_80C9FD4
-
- thumb_func_start sub_80C9FE8
-sub_80C9FE8: @ 80C9FE8
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C9FFC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _080CA000 @ =sub_80CA004
- str r0, [r1]
- bx lr
- .align 2, 0
-_080C9FFC: .4byte gTasks
-_080CA000: .4byte sub_80CA004
- thumb_func_end sub_80C9FE8
-
- thumb_func_start sub_80CA004
-sub_80CA004: @ 80CA004
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- ldr r0, _080CA080 @ =gUnknown_83F5A44
- ldr r1, _080CA084 @ =0x0600c000
- bl LZ77UnCompVram
- ldr r0, _080CA088 @ =gUnknown_83F5864
- ldr r1, _080CA08C @ =0x0600f800
- bl LZ77UnCompVram
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldr r1, _080CA090 @ =0x00001f0c
- movs r0, 0x8
- bl SetGpuReg
- movs r1, 0x8A
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r0, _080CA094 @ =gUnknown_83F5804
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _080CA098 @ =gUnknown_83F5824
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _080CA09C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080CA0A0 @ =sub_80CA0A4
- str r1, [r0]
- movs r2, 0
- movs r1, 0x10
- strh r1, [r0, 0x8]
- strh r2, [r0, 0xA]
- strh r2, [r0, 0xC]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA080: .4byte gUnknown_83F5A44
-_080CA084: .4byte 0x0600c000
-_080CA088: .4byte gUnknown_83F5864
-_080CA08C: .4byte 0x0600f800
-_080CA090: .4byte 0x00001f0c
-_080CA094: .4byte gUnknown_83F5804
-_080CA098: .4byte gUnknown_83F5824
-_080CA09C: .4byte gTasks
-_080CA0A0: .4byte sub_80CA0A4
- thumb_func_end sub_80CA004
-
- thumb_func_start sub_80CA0A4
-sub_80CA0A4: @ 80CA0A4
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080CA0D8 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r1, [r4, 0xC]
- cmp r1, 0xF
- bhi _080CA0E0
- adds r2, r1, 0x1
- adds r0, r2, 0x1
- strh r0, [r4, 0xC]
- movs r0, 0xF
- subs r0, r1
- lsls r0, 1
- ldr r1, _080CA0DC @ =gUnknown_83F5844
- adds r0, r1
- lsls r2, 17
- lsrs r2, 16
- movs r1, 0xE0
- bl LoadPalette
- b _080CA0F4
- .align 2, 0
-_080CA0D8: .4byte gTasks
-_080CA0DC: .4byte gUnknown_83F5844
-_080CA0E0:
- ldr r1, _080CA0FC @ =0x00001010
- movs r0, 0x52
- bl SetGpuReg
- ldr r1, _080CA100 @ =0x00003e41
- movs r0, 0x50
- bl SetGpuReg
- ldr r0, _080CA104 @ =sub_80CA108
- str r0, [r4]
-_080CA0F4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA0FC: .4byte 0x00001010
-_080CA100: .4byte 0x00003e41
-_080CA104: .4byte sub_80CA108
- thumb_func_end sub_80CA0A4
-
- thumb_func_start sub_80CA108
-sub_80CA108: @ 80CA108
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080CA13C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r5, r1, r2
- ldrh r0, [r5, 0xA]
- movs r1, 0x10
- subs r1, r0
- lsls r1, 16
- lsrs r4, r1, 16
- movs r0, 0x80
- lsls r0, 21
- adds r1, r0
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- cmp r4, 0
- beq _080CA140
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- b _080CA152
- .align 2, 0
-_080CA13C: .4byte gTasks
-_080CA140:
- ldr r0, _080CA158 @ =gUnknown_83F5824
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _080CA15C @ =gMain
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
-_080CA152:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA158: .4byte gUnknown_83F5824
-_080CA15C: .4byte gMain
- thumb_func_end sub_80CA108
-
- thumb_func_start sub_80CA160
-sub_80CA160: @ 80CA160
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080CA188 @ =sub_80CA190
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080CA18C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xE]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA188: .4byte sub_80CA190
-_080CA18C: .4byte gTasks
- thumb_func_end sub_80CA160
-
- thumb_func_start sub_80CA190
-sub_80CA190: @ 80CA190
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _080CA1B8 @ =gTasks+0x8
- adds r4, r0, r1
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x5
- bls _080CA1AC
- b _080CA2D2
-_080CA1AC:
- lsls r0, 2
- ldr r1, _080CA1BC @ =_080CA1C0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080CA1B8: .4byte gTasks+0x8
-_080CA1BC: .4byte _080CA1C0
- .align 2, 0
-_080CA1C0:
- .4byte _080CA1D8
- .4byte _080CA208
- .4byte _080CA224
- .4byte _080CA24E
- .4byte _080CA262
- .4byte _080CA2A4
-_080CA1D8:
- ldr r0, _080CA204 @ =gMain
- ldr r2, [r0, 0xC]
- adds r0, r5, 0
- movs r1, 0x5
- bl SetWordTaskArg
- movs r0, 0
- bl SetVBlankCallback
- bl sub_80F8180
- ldrb r0, [r4, 0x6]
- bl sub_80F819C
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- b _080CA294
- .align 2, 0
-_080CA204: .4byte gMain
-_080CA208:
- bl sub_80F8258
- cmp r0, 0
- bne _080CA2D2
- ldrb r0, [r4, 0x6]
- bl sub_80F8318
- strh r0, [r4, 0x8]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3
- bl CopyWindowToVram
- b _080CA294
-_080CA224:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080CA2D2
- movs r1, 0x1
- negs r1, r1
- str r0, [sp]
- adds r0, r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- adds r0, r5, 0
- movs r1, 0x5
- bl GetWordTaskArg
- bl SetVBlankCallback
- b _080CA294
-_080CA24E:
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _080CA2D2
- ldrb r0, [r4, 0x6]
- bl sub_80F856C
- strh r0, [r4, 0x4]
- b _080CA294
-_080CA262:
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x4
- ldrsh r1, [r4, r2]
- cmp r0, r1
- bgt _080CA280
- ldr r0, _080CA29C @ =gMain
- ldrh r1, [r0, 0x2C]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080CA2D2
-_080CA280:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x2
- negs r1, r1
- ldr r2, _080CA2A0 @ =0x00007fff
- str r2, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_080CA294:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _080CA2D2
- .align 2, 0
-_080CA29C: .4byte gMain
-_080CA2A0: .4byte 0x00007fff
-_080CA2A4:
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _080CA2D2
- lsls r6, r5, 2
- movs r1, 0
- adds r0, r4, 0
- adds r0, 0x1E
-_080CA2B6:
- strh r1, [r0]
- subs r0, 0x2
- cmp r0, r4
- bge _080CA2B6
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- bl sub_80F8234
- ldr r1, _080CA2DC @ =gTasks
- adds r0, r6, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _080CA2E0 @ =sub_80CA004
- str r1, [r0]
-_080CA2D2:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080CA2DC: .4byte gTasks
-_080CA2E0: .4byte sub_80CA004
- thumb_func_end sub_80CA190
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/fldeff_flash.s b/data/fldeff_flash.s
deleted file mode 100644
index ddffff5c1..000000000
--- a/data/fldeff_flash.s
+++ /dev/null
@@ -1,74 +0,0 @@
-#include "constants/species.h"
-#include "constants/items.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-
-gUnknown_83F5738:: @ 83F5738
- .byte 1, 4, 1, 0
- .4byte sub_80C9FD4
- .4byte sub_80CA160
- .byte 2, 4, 1, 0
- .4byte sub_80C9FD4
- .4byte sub_80CA160
- .byte 3, 4, 1, 0
- .4byte sub_80C9FD4
- .4byte sub_80CA160
- .byte 5, 4, 1, 0
- .4byte sub_80C9FD4
- .4byte sub_80CA160
- .byte 6, 4, 1, 0
- .4byte sub_80C9FD4
- .4byte sub_80CA160
- .byte 7, 4, 1, 0
- .4byte sub_80C9FD4
- .4byte sub_80CA160
- .byte 8, 4, 1, 0
- .4byte sub_80C9FD4
- .4byte sub_80CA160
- .byte 9, 4, 1, 0
- .4byte sub_80C9FD4
- .4byte sub_80CA160
- .byte 4, 1, 0, 1
- .4byte sub_80C9E1C
- .4byte sub_80CA160
- .byte 4, 2, 0, 1
- .4byte sub_80C9E1C
- .4byte sub_80CA160
- .byte 4, 3, 0, 1
- .4byte sub_80C9E1C
- .4byte sub_80CA160
- .byte 4, 5, 0, 1
- .4byte sub_80C9E1C
- .4byte sub_80CA160
- .byte 4, 6, 0, 1
- .4byte sub_80C9E1C
- .4byte sub_80CA160
- .byte 4, 7, 0, 1
- .4byte sub_80C9E1C
- .4byte sub_80CA160
- .byte 4, 8, 0, 1
- .4byte sub_80C9E1C
- .4byte sub_80CA160
- .byte 4, 9, 0, 1
- .4byte sub_80C9E1C
- .4byte sub_80CA160
- .byte 0, 0, 0, 0
- .4byte NULL
- .4byte NULL
-
-gUnknown_83F5804:: @ 83F5804
- .incbin "graphics/field_effects/flash_white.gbapal"
-
-gUnknown_83F5824:: @ 83F5824
- .incbin "graphics/field_effects/flash_black.gbapal"
-
-gUnknown_83F5844:: @ 83F5844
- .incbin "graphics/field_effects/flash_gradient.gbapal"
-
-gUnknown_83F5864:: @ 83F5864
- .incbin "graphics/field_effects/flash_effect_map.bin.lz"
-
-gUnknown_83F5A44:: @ 83F5A44
- .incbin "graphics/field_effects/flash_effect_tiles.4bpp.lz"
diff --git a/include/event_scripts.h b/include/event_scripts.h
index 3fda94a5f..c211e3a34 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -1209,4 +1209,7 @@ extern const u8 CableClub_Text_AwaitingLinkupBCancel[];
extern const u8 CableClub_Text_StartLinkWithXPlayersAConfirmBCancel[];
extern const u8 CableClub_Text_PleaseWaitBCancel[];
+// fldeff_flash
+extern const u8 EventScript_FldEffFlash[];
+
#endif //GUARD_EVENT_SCRIPTS_H
diff --git a/include/map_preview_screen.h b/include/map_preview_screen.h
index ea85baf71..195e86929 100644
--- a/include/map_preview_screen.h
+++ b/include/map_preview_screen.h
@@ -50,5 +50,10 @@ u16 sub_80F856C(u8 id);
bool8 sub_80F8110(u8 mapsec, bool8 forceFirstTime);
bool32 sub_80F83B0(void);
const struct MapPreviewScreen * GetDungeonMapPreviewScreenInfo(u8 mapsec);
+bool32 sub_80F8154(u8 mapsec, u8 forceFirstTime);
+void sub_80F8180(void);
+void sub_80F819C(u8 mapsec);
+bool32 sub_80F8258(void);
+void sub_80F8234(s32 windowId);
#endif //GUARD_MAP_PREVIEW_SCREEN_H
diff --git a/include/overworld.h b/include/overworld.h
index daaa5e6e8..06d4bcb8e 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -192,6 +192,7 @@ void sub_8057F48(void);
void SetMainCallback1(MainCallback cb);
void CB1_Overworld(void);
void sub_80568C4(void);
+u8 sub_80561B4(void);
extern u16 gHeldKeyCodeToSend;
diff --git a/ld_script.txt b/ld_script.txt
index b919db2ef..c2b35f7a2 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -183,7 +183,7 @@ SECTIONS {
src/battle_ai_script_commands.o(.text);
src/fldeff_rocksmash.o(.text);
src/fldeff_dig.o(.text);
- asm/fldeff_flash.o(.text);
+ src/fldeff_flash.o(.text);
src/post_battle_event_funcs.o(.text);
src/prof_pc.o(.text);
src/hof_pc.o(.text);
@@ -489,7 +489,7 @@ SECTIONS {
src/region_map.o(.rodata);
src/image_processing_effects.o(.rodata);
src/battle_ai_script_commands.o(.rodata);
- data/fldeff_flash.o(.rodata);
+ src/fldeff_flash.o(.rodata);
src/field_specials.o(.rodata);
src/battle_records.o(.rodata);
src/evolution_scene.o(.rodata);
diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c
new file mode 100644
index 000000000..7f40558d9
--- /dev/null
+++ b/src/fldeff_flash.c
@@ -0,0 +1,476 @@
+#include "global.h"
+#include "gflib.h"
+#include "event_data.h"
+#include "event_scripts.h"
+#include "fldeff.h"
+#include "field_effect.h"
+#include "map_preview_screen.h"
+#include "overworld.h"
+#include "party_menu.h"
+#include "script.h"
+#include "constants/songs.h"
+
+struct FlashStruct
+{
+ u8 fromType;
+ u8 toType;
+ bool8 isEnter;
+ bool8 isExit;
+ void (*func1)(void);
+ void (*func2)(u8 mapSecId);
+};
+
+static void sub_80C9B74(void);
+static void sub_80C9BB0(void);
+static bool8 sub_80C9CE8(void);
+static void sub_80C9E1C(void);
+static void sub_80C9E30(u8 taskId);
+static void sub_80C9E4C(u8 taskId);
+static void sub_80C9EF0(u8 taskId);
+static void sub_80C9F38(u8 taskId);
+static void sub_80C9FA0(u8 taskId);
+static void sub_80C9FD4(void);
+static void sub_80C9FE8(u8 taskId);
+static void sub_80CA004(u8 taskId);
+static void sub_80CA0A4(u8 taskId);
+static void sub_80CA108(u8 taskId);
+static void sub_80CA160(u8 mapsecId);
+static void sub_80CA190(u8 taskId);
+
+static const struct FlashStruct gUnknown_83F5738[] = {
+ {
+ .fromType = 1,
+ .toType = 4,
+ .isEnter = TRUE,
+ .isExit = FALSE,
+ .func1 = sub_80C9FD4,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 2,
+ .toType = 4,
+ .isEnter = TRUE,
+ .isExit = FALSE,
+ .func1 = sub_80C9FD4,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 3,
+ .toType = 4,
+ .isEnter = TRUE,
+ .isExit = FALSE,
+ .func1 = sub_80C9FD4,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 5,
+ .toType = 4,
+ .isEnter = TRUE,
+ .isExit = FALSE,
+ .func1 = sub_80C9FD4,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 6,
+ .toType = 4,
+ .isEnter = TRUE,
+ .isExit = FALSE,
+ .func1 = sub_80C9FD4,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 7,
+ .toType = 4,
+ .isEnter = TRUE,
+ .isExit = FALSE,
+ .func1 = sub_80C9FD4,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 8,
+ .toType = 4,
+ .isEnter = TRUE,
+ .isExit = FALSE,
+ .func1 = sub_80C9FD4,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 9,
+ .toType = 4,
+ .isEnter = TRUE,
+ .isExit = FALSE,
+ .func1 = sub_80C9FD4,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 4,
+ .toType = 1,
+ .isEnter = FALSE,
+ .isExit = TRUE,
+ .func1 = sub_80C9E1C,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 4,
+ .toType = 2,
+ .isEnter = FALSE,
+ .isExit = TRUE,
+ .func1 = sub_80C9E1C,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 4,
+ .toType = 3,
+ .isEnter = FALSE,
+ .isExit = TRUE,
+ .func1 = sub_80C9E1C,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 4,
+ .toType = 5,
+ .isEnter = FALSE,
+ .isExit = TRUE,
+ .func1 = sub_80C9E1C,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 4,
+ .toType = 6,
+ .isEnter = FALSE,
+ .isExit = TRUE,
+ .func1 = sub_80C9E1C,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 4,
+ .toType = 7,
+ .isEnter = FALSE,
+ .isExit = TRUE,
+ .func1 = sub_80C9E1C,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 4,
+ .toType = 8,
+ .isEnter = FALSE,
+ .isExit = TRUE,
+ .func1 = sub_80C9E1C,
+ .func2 = sub_80CA160
+ }, {
+ .fromType = 4,
+ .toType = 9,
+ .isEnter = FALSE,
+ .isExit = TRUE,
+ .func1 = sub_80C9E1C,
+ .func2 = sub_80CA160
+ }, {0}
+};
+
+static const u16 gUnknown_83F5804[] = INCBIN_U16("graphics/field_effects/flash_white.gbapal");
+static const u16 gUnknown_83F5824[] = INCBIN_U16("graphics/field_effects/flash_black.gbapal");
+static const u16 gUnknown_83F5844[] = INCBIN_U16("graphics/field_effects/flash_gradient.gbapal");
+static const u32 gUnknown_83F5864[] = INCBIN_U32("graphics/field_effects/flash_effect_map.bin.lz");
+static const u32 gUnknown_83F5A44[] = INCBIN_U32("graphics/field_effects/flash_effect_tiles.4bpp.lz");
+
+bool8 SetUpFieldMove_Flash(void)
+{
+ if (gMapHeader.cave != TRUE)
+ return FALSE;
+
+ if (FlagGet(FLAG_SYS_FLASH_ACTIVE))
+ return FALSE;
+
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = sub_80C9B74;
+ return TRUE;
+}
+
+static void sub_80C9B74(void)
+{
+ u8 taskId = CreateFieldEffectShowMon();
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ gTasks[taskId].data[8] = ((uintptr_t)sub_80C9BB0) >> 16;
+ gTasks[taskId].data[9] = ((uintptr_t)sub_80C9BB0);
+}
+
+static void sub_80C9BB0(void)
+{
+ PlaySE(SE_W115);
+ FlagSet(FLAG_SYS_FLASH_ACTIVE);
+ ScriptContext1_SetupScript(EventScript_FldEffFlash);
+}
+
+static void sub_80C9BD0(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_80C9BE8(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void sub_80C9BFC(void)
+{
+ SetVBlankCallback(NULL);
+
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG2CNT, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+
+ DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
+ DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2);
+ ResetPaletteFade();
+ ResetTasks();
+ ResetSpriteData();
+ EnableInterrupts(INTR_FLAG_VBLANK);
+ SetVBlankCallback(sub_80C9BE8);
+ SetMainCallback2(sub_80C9BD0);
+ if (!sub_80C9CE8())
+ SetMainCallback2(gMain.savedCallback);
+}
+
+static bool8 sub_80C9CE8(void)
+{
+ u8 fromType = get_map_light_from_warp0();
+ u8 toType = GetCurrentMapType();
+ u8 i = 0;
+ if (sub_80561B4() != gMapHeader.regionMapSectionId && sub_80F8154(gMapHeader.regionMapSectionId, FALSE) == TRUE)
+ {
+ sub_80CA160(gMapHeader.regionMapSectionId);
+ return TRUE;
+ }
+ for (; gUnknown_83F5738[i].fromType != 0; i++)
+ {
+ if (gUnknown_83F5738[i].fromType == fromType && gUnknown_83F5738[i].toType == toType)
+ {
+ gUnknown_83F5738[i].func1();
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+bool8 sub_80C9D7C(u8 _fromType, u8 _toType)
+{
+ u8 fromType = _fromType;
+ u8 toType = _toType;
+ u8 i = 0;
+ for (; gUnknown_83F5738[i].fromType != 0; i++)
+ {
+ if (gUnknown_83F5738[i].fromType == fromType && gUnknown_83F5738[i].toType == toType)
+ {
+ return gUnknown_83F5738[i].isEnter;
+ }
+ }
+ return FALSE;
+}
+
+bool8 sub_80C9DCC(u8 _fromType, u8 _toType)
+{
+ u8 fromType = _fromType;
+ u8 toType = _toType;
+ u8 i = 0;
+ for (; gUnknown_83F5738[i].fromType != 0; i++)
+ {
+ if (gUnknown_83F5738[i].fromType == fromType && gUnknown_83F5738[i].toType == toType)
+ {
+ return gUnknown_83F5738[i].isExit;
+ }
+ }
+ return FALSE;
+}
+
+static void sub_80C9E1C(void)
+{
+ CreateTask(sub_80C9E30, 0);
+}
+
+static void sub_80C9E30(u8 taskId)
+{
+ gTasks[taskId].func = sub_80C9E4C;
+}
+
+static void sub_80C9E4C(u8 taskId)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ LZ77UnCompVram(gUnknown_83F5A44, (void *)BG_CHAR_ADDR(3));
+ LZ77UnCompVram(gUnknown_83F5864, (void *)BG_SCREEN_ADDR(31));
+ LoadPalette(gUnknown_83F5804, 0xE0, 0x20);
+ LoadPalette(gUnknown_83F5844 + 8, 0xE0, 0x10);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(31));
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_OBJ_ON);
+ gTasks[taskId].func = sub_80C9EF0;
+ gTasks[taskId].data[0] = 16;
+ gTasks[taskId].data[1] = 0;
+}
+
+static void sub_80C9EF0(u8 taskId)
+{
+ u16 r4 = gTasks[taskId].data[1];
+ SetGpuReg(REG_OFFSET_BLDALPHA, (16 << 8) + r4);
+ if (r4 <= 16)
+ {
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_80C9F38;
+ }
+}
+
+static void sub_80C9F38(u8 taskId)
+{
+ u16 r4;
+ SetGpuReg(REG_OFFSET_BLDALPHA, (16 << 8) + 16);
+ r4 = gTasks[taskId].data[2];
+ if (r4 < 8)
+ {
+ gTasks[taskId].data[2]++;
+ LoadPalette(gUnknown_83F5844 + 8 + r4, 0xE0, 0x10 - 2 * r4);
+ }
+ else
+ {
+ LoadPalette(gUnknown_83F5804, 0x00, 0x20);
+ gTasks[taskId].func = sub_80C9FA0;
+ gTasks[taskId].data[2] = 8;
+ }
+}
+
+static void sub_80C9FA0(u8 taskId)
+{
+ if (gTasks[taskId].data[2] != 0)
+ gTasks[taskId].data[2]--;
+ else
+ SetMainCallback2(gMain.savedCallback);
+}
+
+static void sub_80C9FD4(void)
+{
+ CreateTask(sub_80C9FE8, 0);
+}
+
+static void sub_80C9FE8(u8 taskId)
+{
+ gTasks[taskId].func = sub_80CA004;
+}
+
+static void sub_80CA004(u8 taskId)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ LZ77UnCompVram(gUnknown_83F5A44, (void *)BG_CHAR_ADDR(3));
+ LZ77UnCompVram(gUnknown_83F5864, (void *)BG_SCREEN_ADDR(31));
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(31));
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_OBJ_ON);
+ LoadPalette(gUnknown_83F5804, 0xE0, 0x20);
+ LoadPalette(gUnknown_83F5824, 0, 0x20);
+ gTasks[taskId].func = sub_80CA0A4;
+ gTasks[taskId].data[0] = 16;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+}
+
+static void sub_80CA0A4(u8 taskId)
+{
+ u16 r4;
+ r4 = gTasks[taskId].data[2];
+ if (r4 < 16)
+ {
+ gTasks[taskId].data[2]++;
+ gTasks[taskId].data[2]++;
+ LoadPalette(&gUnknown_83F5844[16 - (r4 + 1)], 0xE0, 2 * (r4 + 1));
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BLDALPHA, (16 << 8) + 16);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD);
+ gTasks[taskId].func = sub_80CA108;
+ }
+}
+
+static void sub_80CA108(u8 taskId)
+{
+ u16 r4 = 16 - gTasks[taskId].data[1];
+ SetGpuReg(REG_OFFSET_BLDALPHA, (16 << 8) + r4);
+ if (r4 != 0)
+ {
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ LoadPalette(gUnknown_83F5824, 0x00, 0x20);
+ SetMainCallback2(gMain.savedCallback);
+ }
+}
+
+static void sub_80CA160(u8 mapSecId)
+{
+ u8 taskId = CreateTask(sub_80CA190, 0);
+ gTasks[taskId].data[3] = mapSecId;
+}
+
+static void sub_80CA190(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ switch (data[0])
+ {
+ case 0:
+ SetWordTaskArg(taskId, 5, (uintptr_t)gMain.vblankCallback);
+ SetVBlankCallback(NULL);
+ sub_80F8180();
+ sub_80F819C(data[3]);
+ BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK);
+ data[0]++;
+ break;
+ case 1:
+ if (!sub_80F8258())
+ {
+ data[4] = sub_80F8318(data[3]);
+ CopyWindowToVram(data[4], 3);
+ data[0]++;
+ }
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ SetVBlankCallback((IntrCallback)GetWordTaskArg(taskId, 5));
+ data[0]++;
+ }
+ break;
+ case 3:
+ if (!UpdatePaletteFade())
+ {
+ data[2] = sub_80F856C(data[3]);
+ data[0]++;
+ }
+ break;
+ case 4:
+ data[1]++;
+ if (data[1] > data[2] || JOY_HELD(B_BUTTON))
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_WHITE);
+ data[0]++;
+ }
+ break;
+ case 5:
+ if (!UpdatePaletteFade())
+ {
+ int i;
+ for (i = 0; i < 16; i++)
+ {
+ data[i] = 0;
+ }
+ sub_80F8234(data[4]);
+ gTasks[taskId].func = sub_80CA004;
+ }
+ break;
+ }
+}
diff --git a/src/map_preview_screen.c b/src/map_preview_screen.c
index b5c68acf9..a553ca122 100644
--- a/src/map_preview_screen.c
+++ b/src/map_preview_screen.c
@@ -364,7 +364,7 @@ bool8 sub_80F8110(u8 mapsec, u8 forceFirstTime)
}
}
-bool8 sub_80F8154(u8 mapsec, u8 forceFirstTime)
+bool32 sub_80F8154(u8 mapsec, u8 forceFirstTime)
{
if (gQuestLogState == 2)
{