summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/palette.s2945
-rw-r--r--asm/region_map.s2
-rw-r--r--asm/trainer_card.s4
-rw-r--r--data/palette.s18
-rw-r--r--include/fldeff.h1
-rw-r--r--include/graphics.h8
-rw-r--r--include/palette.h58
-rw-r--r--ld_script.txt4
-rw-r--r--src/palette.c989
-rw-r--r--sym_ewram.txt19
10 files changed, 1028 insertions, 3020 deletions
diff --git a/asm/palette.s b/asm/palette.s
deleted file mode 100644
index ed9327106..000000000
--- a/asm/palette.s
+++ /dev/null
@@ -1,2945 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start LoadCompressedPalette
-LoadCompressedPalette: @ 80703A8
- push {r4-r6,lr}
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- ldr r6, _080703E0 @ =gUnknown_2037ACC
- adds r1, r6, 0
- bl LZDecompressWram
- lsls r4, 1
- ldr r1, _080703E4 @ =gPlttBufferUnfaded
- adds r1, r4, r1
- lsrs r5, 17
- adds r0, r6, 0
- adds r2, r5, 0
- bl CpuSet
- ldr r0, _080703E8 @ =gPlttBufferFaded
- adds r4, r0
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl CpuSet
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080703E0: .4byte gUnknown_2037ACC
-_080703E4: .4byte gPlttBufferUnfaded
-_080703E8: .4byte gPlttBufferFaded
- thumb_func_end LoadCompressedPalette
-
- thumb_func_start LoadPalette
-LoadPalette: @ 80703EC
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r4, 16
- lsls r5, 16
- lsrs r4, 15
- ldr r1, _0807041C @ =gPlttBufferUnfaded
- adds r1, r4, r1
- lsrs r5, 17
- adds r2, r5, 0
- bl CpuSet
- ldr r0, _08070420 @ =gPlttBufferFaded
- adds r4, r0
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl CpuSet
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807041C: .4byte gPlttBufferUnfaded
-_08070420: .4byte gPlttBufferFaded
- thumb_func_end LoadPalette
-
- thumb_func_start FillPalette
-FillPalette: @ 8070424
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r0, 0
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r6, 16
- lsrs r6, 16
- lsls r4, 16
- lsls r5, 16
- mov r0, sp
- strh r6, [r0]
- lsrs r4, 15
- ldr r1, _0807046C @ =gPlttBufferUnfaded
- adds r1, r4, r1
- lsrs r5, 17
- movs r0, 0x80
- lsls r0, 17
- orrs r5, r0
- mov r0, sp
- adds r2, r5, 0
- bl CpuSet
- mov r0, sp
- adds r0, 0x2
- strh r6, [r0]
- ldr r1, _08070470 @ =gPlttBufferFaded
- adds r4, r1
- adds r1, r4, 0
- adds r2, r5, 0
- bl CpuSet
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807046C: .4byte gPlttBufferUnfaded
-_08070470: .4byte gPlttBufferFaded
- thumb_func_end FillPalette
-
- thumb_func_start TransferPlttBuffer
-TransferPlttBuffer: @ 8070474
- push {r4,r5,lr}
- ldr r4, _080704BC @ =gPaletteFade
- ldrb r1, [r4, 0x8]
- movs r5, 0x80
- adds r0, r5, 0
- ands r0, r1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- bne _080704B6
- ldr r1, _080704C0 @ =gPlttBufferFaded
- movs r2, 0xA0
- lsls r2, 19
- ldr r0, _080704C4 @ =0x040000d4
- str r1, [r0]
- str r2, [r0, 0x4]
- ldr r1, _080704C8 @ =0x80000200
- str r1, [r0, 0x8]
- ldr r0, [r0, 0x8]
- ldr r0, _080704CC @ =gUnknown_2037AC8
- str r3, [r0]
- ldrb r1, [r4, 0x9]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0x2
- bne _080704B6
- ldrb r1, [r4, 0x7]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- beq _080704B6
- bl UpdateBlendRegisters
-_080704B6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080704BC: .4byte gPaletteFade
-_080704C0: .4byte gPlttBufferFaded
-_080704C4: .4byte 0x040000d4
-_080704C8: .4byte 0x80000200
-_080704CC: .4byte gUnknown_2037AC8
- thumb_func_end TransferPlttBuffer
-
- thumb_func_start UpdatePaletteFade
-UpdatePaletteFade: @ 80704D0
- push {lr}
- ldr r0, _080704E0 @ =gUnknown_2037AC8
- ldr r0, [r0]
- cmp r0, 0
- beq _080704E4
- movs r0, 0xFF
- b _0807051C
- .align 2, 0
-_080704E0: .4byte gUnknown_2037AC8
-_080704E4:
- ldr r0, _080704F8 @ =gPaletteFade
- ldrb r0, [r0, 0x9]
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0
- bne _080704FC
- bl UpdateNormalPaletteFade
- b _0807050A
- .align 2, 0
-_080704F8: .4byte gPaletteFade
-_080704FC:
- cmp r1, 0x1
- bne _08070506
- bl UpdateFastPaletteFade
- b _0807050A
-_08070506:
- bl UpdateHardwarePaletteFade
-_0807050A:
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r2, _08070520 @ =gUnknown_2037AC8
- ldr r0, _08070524 @ =gPaletteFade
- ldr r0, [r0]
- movs r1, 0
- orrs r0, r1
- str r0, [r2]
- adds r0, r3, 0
-_0807051C:
- pop {r1}
- bx r1
- .align 2, 0
-_08070520: .4byte gUnknown_2037AC8
-_08070524: .4byte gPaletteFade
- thumb_func_end UpdatePaletteFade
-
- thumb_func_start ResetPaletteFade
-ResetPaletteFade: @ 8070528
- push {r4,lr}
- movs r4, 0
-_0807052C:
- adds r0, r4, 0
- bl ResetPaletteStruct
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _0807052C
- bl ResetPaletteFadeControl
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ResetPaletteFade
-
- thumb_func_start ReadPlttIntoBuffers
-ReadPlttIntoBuffers: @ 8070548
- push {r4-r7,lr}
- movs r0, 0xA0
- lsls r0, 19
- mov r12, r0
- movs r4, 0
- ldr r7, _0807057C @ =gPlttBufferUnfaded
- ldr r6, _08070580 @ =gPlttBufferFaded
- ldr r5, _08070584 @ =0x000001ff
-_08070558:
- lsls r1, r4, 1
- adds r3, r1, r7
- mov r0, r12
- adds r2, r1, r0
- ldrh r0, [r2]
- strh r0, [r3]
- adds r1, r6
- ldrh r0, [r2]
- strh r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, r5
- bls _08070558
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807057C: .4byte gPlttBufferUnfaded
-_08070580: .4byte gPlttBufferFaded
-_08070584: .4byte 0x000001ff
- thumb_func_end ReadPlttIntoBuffers
-
- thumb_func_start BeginNormalPaletteFade
-BeginNormalPaletteFade: @ 8070588
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- ldr r0, [sp, 0x18]
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r12, r2
- lsls r3, 24
- lsrs r7, r3, 24
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r5, _080705B8 @ =gPaletteFade
- ldrb r1, [r5, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080705BC
- movs r0, 0
- b _080706B4
- .align 2, 0
-_080705B8: .4byte gPaletteFade
-_080705BC:
- ldrb r0, [r5, 0xA]
- movs r3, 0x79
- negs r3, r3
- adds r2, r3, 0
- ands r2, r0
- movs r0, 0x10
- orrs r2, r0
- strb r2, [r5, 0xA]
- lsls r0, r6, 24
- asrs r1, r0, 24
- cmp r1, 0
- bge _080705EA
- lsls r0, r2, 25
- lsrs r0, 28
- negs r1, r1
- adds r0, r1
- movs r1, 0xF
- ands r0, r1
- lsls r0, 3
- ands r2, r3
- orrs r2, r0
- strb r2, [r5, 0xA]
- movs r6, 0
-_080705EA:
- str r4, [r5]
- movs r4, 0x3F
- adds r1, r6, 0
- ands r1, r4
- ldrb r2, [r5, 0x4]
- movs r3, 0x40
- negs r3, r3
- adds r0, r3, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x4]
- ands r6, r4
- ldrb r0, [r5, 0x8]
- ands r3, r0
- orrs r3, r6
- strb r3, [r5, 0x8]
- movs r0, 0x1F
- mov r1, r12
- ands r1, r0
- lsls r1, 6
- ldrh r2, [r5, 0x4]
- ldr r0, _08070658 @ =0xfffff83f
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x4]
- lsls r2, r7, 3
- ldrb r1, [r5, 0x5]
- movs r0, 0x7
- ands r0, r1
- orrs r0, r2
- strb r0, [r5, 0x5]
- ldr r1, _0807065C @ =0x00007fff
- mov r0, r8
- ands r1, r0
- ldrh r2, [r5, 0x6]
- ldr r0, _08070660 @ =0xffff8000
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x6]
- ldrb r0, [r5, 0x7]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r5, 0x7]
- ldrb r1, [r5, 0x9]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- strb r0, [r5, 0x9]
- cmp r12, r7
- bcs _08070664
- movs r0, 0x41
- negs r0, r0
- ands r3, r0
- b _08070668
- .align 2, 0
-_08070658: .4byte 0xfffff83f
-_0807065C: .4byte 0x00007fff
-_08070660: .4byte 0xffff8000
-_08070664:
- movs r0, 0x40
- orrs r3, r0
-_08070668:
- strb r3, [r5, 0x8]
- bl UpdatePaletteFade
- ldr r4, _080706C0 @ =gPaletteFade
- ldrb r1, [r4, 0x8]
- lsrs r5, r1, 7
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r4, 0x8]
- ldr r0, _080706C4 @ =gPlttBufferFaded
- movs r1, 0xA0
- lsls r1, 19
- ldr r2, _080706C8 @ =0x04000100
- bl CpuSet
- ldr r1, _080706CC @ =gUnknown_2037AC8
- movs r0, 0
- str r0, [r1]
- ldrb r1, [r4, 0x9]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0x2
- bne _080706A4
- ldrb r1, [r4, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080706A4
- bl UpdateBlendRegisters
-_080706A4:
- ldr r2, _080706C0 @ =gPaletteFade
- lsls r3, r5, 7
- ldrb r1, [r2, 0x8]
- movs r0, 0x7F
- ands r0, r1
- orrs r0, r3
- strb r0, [r2, 0x8]
- movs r0, 0x1
-_080706B4:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080706C0: .4byte gPaletteFade
-_080706C4: .4byte gPlttBufferFaded
-_080706C8: .4byte 0x04000100
-_080706CC: .4byte gUnknown_2037AC8
- thumb_func_end BeginNormalPaletteFade
-
- thumb_func_start unref_sub_80A1C1C
-unref_sub_80A1C1C: @ 80706D0
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x8
- mov r8, r0
- adds r4, r1, 0
- adds r6, r2, 0
- ldr r5, [sp, 0x1C]
- lsls r4, 24
- lsrs r4, 24
- lsls r6, 24
- lsrs r6, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r5, 16
- lsrs r5, 16
- str r3, [sp, 0x4]
- bl ReadPlttIntoBuffers
- lsls r4, 24
- asrs r4, 24
- str r5, [sp]
- mov r0, r8
- adds r1, r4, 0
- adds r2, r6, 0
- ldr r3, [sp, 0x4]
- bl BeginNormalPaletteFade
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end unref_sub_80A1C1C
-
- thumb_func_start unref_sub_80A1C64
-unref_sub_80A1C64: @ 8070718
- push {r4-r7,lr}
- adds r6, r1, 0
- lsls r0, 24
- lsrs r7, r0, 24
- movs r5, 0
-_08070722:
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 2
- ldr r1, _08070770 @ =gUnknown_20379F8
- adds r4, r0, r1
- ldrb r0, [r4, 0x4]
- lsls r0, 31
- cmp r0, 0
- beq _08070780
- ldr r2, [r4]
- ldrb r0, [r2, 0x8]
- lsls r0, 31
- lsrs r0, 31
- cmp r0, r7
- bne _08070780
- ldrh r1, [r4, 0x6]
- lsls r1, 20
- lsrs r1, 25
- ldrb r0, [r2, 0xB]
- lsls r0, 27
- lsrs r0, 27
- cmp r1, r0
- bne _0807075E
- adds r0, r4, 0
- bl unused_sub_80A1F00
- ldrb r0, [r4, 0x4]
- lsls r0, 31
- cmp r0, 0
- beq _08070780
-_0807075E:
- ldrb r0, [r4, 0x8]
- cmp r0, 0
- bne _08070774
- adds r0, r4, 0
- adds r1, r6, 0
- bl unused_sub_80A1CDC
- b _08070778
- .align 2, 0
-_08070770: .4byte gUnknown_20379F8
-_08070774:
- subs r0, 0x1
- strb r0, [r4, 0x8]
-_08070778:
- adds r0, r4, 0
- adds r1, r6, 0
- bl unused_sub_80A1E40
-_08070780:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0xF
- bls _08070722
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end unref_sub_80A1C64
-
- thumb_func_start unused_sub_80A1CDC
-unused_sub_80A1CDC: @ 8070790
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- mov r8, r1
- movs r6, 0
- ldrh r1, [r4, 0x6]
- lsls r1, 20
- lsrs r1, 25
- ldr r3, [r4]
- ldrb r0, [r3, 0x9]
- lsls r2, r0, 25
- lsrs r0, r2, 27
- adds r5, r1, 0
- muls r5, r0
- ldrb r1, [r3, 0x8]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0807082C
- lsrs r0, r2, 27
- cmp r6, r0
- bcs _08070878
- ldr r0, _0807081C @ =gPlttBufferUnfaded
- mov r12, r0
- ldr r7, _08070820 @ =gPlttBufferFaded
-_080707C4:
- ldr r0, [r4, 0x4]
- lsls r0, 11
- lsrs r0, 22
- lsls r0, 1
- add r0, r12
- ldr r1, [r3, 0x4]
- lsls r2, r5, 1
- adds r1, r2, r1
- ldrh r1, [r1]
- strh r1, [r0]
- ldr r0, [r4, 0x4]
- lsls r0, 11
- lsrs r0, 22
- lsls r0, 1
- adds r0, r7
- ldr r1, [r4]
- ldr r1, [r1, 0x4]
- adds r2, r1
- ldrh r1, [r2]
- strh r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r2, [r4, 0x4]
- lsls r1, r2, 11
- lsrs r1, 22
- adds r1, 0x1
- ldr r0, _08070824 @ =0x000003ff
- ands r1, r0
- lsls r1, 11
- ldr r0, _08070828 @ =0xffe007ff
- ands r0, r2
- orrs r0, r1
- str r0, [r4, 0x4]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r3, [r4]
- ldrb r0, [r3, 0x9]
- lsls r0, 25
- lsrs r0, 27
- cmp r6, r0
- bcc _080707C4
- b _08070878
- .align 2, 0
-_0807081C: .4byte gPlttBufferUnfaded
-_08070820: .4byte gPlttBufferFaded
-_08070824: .4byte 0x000003ff
-_08070828: .4byte 0xffe007ff
-_0807082C:
- lsrs r0, r2, 27
- cmp r6, r0
- bcs _08070878
- ldr r3, _080708E4 @ =gPlttBufferFaded
-_08070834:
- ldr r1, [r4, 0x4]
- lsls r1, 11
- lsrs r1, 22
- lsls r1, 1
- adds r1, r3
- ldr r0, [r4]
- ldr r2, [r0, 0x4]
- lsls r0, r5, 1
- adds r0, r2
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r2, [r4, 0x4]
- lsls r1, r2, 11
- lsrs r1, 22
- adds r1, 0x1
- ldr r0, _080708E8 @ =0x000003ff
- ands r1, r0
- lsls r1, 11
- ldr r0, _080708EC @ =0xffe007ff
- ands r0, r2
- orrs r0, r1
- str r0, [r4, 0x4]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, [r4]
- ldrb r0, [r0, 0x9]
- lsls r0, 25
- lsrs r0, 27
- cmp r6, r0
- bcc _08070834
-_08070878:
- ldrh r0, [r4, 0x4]
- lsls r0, 21
- lsrs r0, 23
- lsls r0, 11
- ldr r1, [r4, 0x4]
- ldr r2, _080708EC @ =0xffe007ff
- ands r1, r2
- orrs r1, r0
- str r1, [r4, 0x4]
- ldr r3, [r4]
- ldrb r0, [r3, 0xA]
- strb r0, [r4, 0x8]
- ldrh r2, [r4, 0x6]
- lsls r0, r2, 20
- lsrs r0, 25
- adds r0, 0x1
- movs r1, 0x7F
- ands r0, r1
- lsls r0, 5
- ldr r5, _080708F0 @ =0xfffff01f
- adds r1, r5, 0
- ands r1, r2
- orrs r1, r0
- strh r1, [r4, 0x6]
- lsls r1, 20
- lsrs r1, 25
- ldrb r0, [r3, 0xB]
- lsls r0, 27
- lsrs r0, 27
- cmp r1, r0
- blt _080708C8
- ldrb r0, [r4, 0x9]
- cmp r0, 0
- beq _080708C0
- subs r0, 0x1
- strb r0, [r4, 0x9]
-_080708C0:
- ldrh r1, [r4, 0x6]
- adds r0, r5, 0
- ands r0, r1
- strh r0, [r4, 0x6]
-_080708C8:
- ldrh r0, [r4, 0x4]
- lsls r0, 21
- lsrs r0, 27
- movs r1, 0x1
- lsls r1, r0
- mov r2, r8
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080708E4: .4byte gPlttBufferFaded
-_080708E8: .4byte 0x000003ff
-_080708EC: .4byte 0xffe007ff
-_080708F0: .4byte 0xfffff01f
- thumb_func_end unused_sub_80A1CDC
-
- thumb_func_start unused_sub_80A1E40
-unused_sub_80A1E40: @ 80708F4
- push {r4-r6,lr}
- adds r4, r0, 0
- ldr r3, _0807094C @ =gPaletteFade
- ldrb r1, [r3, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080709A8
- ldrh r0, [r4, 0x4]
- lsls r0, 21
- lsrs r6, r0, 23
- asrs r1, r6, 4
- movs r5, 0x1
- adds r0, r5, 0
- lsls r0, r1
- ldr r1, [r3]
- ands r0, r1
- cmp r0, 0
- beq _080709A8
- ldr r2, [r4]
- ldrb r1, [r2, 0x8]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _08070950
- ldrb r1, [r3, 0x4]
- lsls r1, 26
- ldrb r0, [r3, 0x8]
- lsls r0, 26
- cmp r1, r0
- beq _080709A8
- adds r0, r6, 0
- ldrb r1, [r2, 0x9]
- lsls r1, 25
- lsrs r1, 27
- ldrh r2, [r3, 0x4]
- lsls r2, 21
- lsrs r2, 27
- ldrh r3, [r3, 0x6]
- lsls r3, 17
- lsrs r3, 17
- bl BlendPalette
- b _080709A8
- .align 2, 0
-_0807094C: .4byte gPaletteFade
-_08070950:
- ldrb r1, [r3, 0x4]
- movs r0, 0x3F
- ands r0, r1
- cmp r0, 0
- bne _080709A8
- ldrb r0, [r4, 0x8]
- ldrb r1, [r2, 0xA]
- cmp r0, r1
- beq _080709A8
- ldrh r0, [r4, 0x6]
- lsls r0, 20
- lsrs r0, 25
- ldrb r1, [r2, 0x9]
- lsls r1, 25
- lsrs r2, r1, 27
- adds r5, r0, 0
- muls r5, r2
- movs r3, 0
- adds r1, r2, 0
- cmp r3, r1
- bcs _080709A8
- ldr r6, _080709B0 @ =gPlttBufferFaded
-_0807097C:
- ldrh r1, [r4, 0x4]
- lsls r1, 21
- lsrs r1, 23
- adds r1, r3
- lsls r1, 1
- adds r1, r6
- ldr r2, [r4]
- adds r0, r5, r3
- ldr r2, [r2, 0x4]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, [r4]
- ldrb r0, [r0, 0x9]
- lsls r0, 25
- lsrs r0, 27
- cmp r3, r0
- bcc _0807097C
-_080709A8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080709B0: .4byte gPlttBufferFaded
- thumb_func_end unused_sub_80A1E40
-
- thumb_func_start unused_sub_80A1F00
-unused_sub_80A1F00: @ 80709B4
- push {lr}
- adds r3, r0, 0
- ldrb r0, [r3, 0x9]
- cmp r0, 0
- bne _08070A04
- ldr r2, [r3]
- ldrb r0, [r2, 0xB]
- lsrs r0, 5
- cmp r0, 0
- bne _080709F4
- ldrh r1, [r3, 0x6]
- ldr r0, _080709EC @ =0xfffff01f
- ands r0, r1
- strh r0, [r3, 0x6]
- ldrb r0, [r2, 0xA]
- strb r0, [r3, 0x8]
- ldrb r0, [r2, 0xC]
- strb r0, [r3, 0x9]
- ldrh r0, [r3, 0x4]
- lsls r0, 21
- lsrs r0, 23
- lsls r0, 11
- ldr r1, [r3, 0x4]
- ldr r2, _080709F0 @ =0xffe007ff
- ands r1, r2
- orrs r1, r0
- str r1, [r3, 0x4]
- b _08070A08
- .align 2, 0
-_080709EC: .4byte 0xfffff01f
-_080709F0: .4byte 0xffe007ff
-_080709F4:
- cmp r0, 0
- blt _08070A08
- cmp r0, 0x2
- bgt _08070A08
- ldrh r0, [r2]
- bl ResetPaletteStructByUid
- b _08070A08
-_08070A04:
- subs r0, 0x1
- strb r0, [r3, 0x9]
-_08070A08:
- pop {r0}
- bx r0
- thumb_func_end unused_sub_80A1F00
-
- thumb_func_start ResetPaletteStructByUid
-ResetPaletteStructByUid: @ 8070A0C
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- bl GetPaletteNumByUid
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x10
- beq _08070A22
- bl ResetPaletteStruct
-_08070A22:
- pop {r0}
- bx r0
- thumb_func_end ResetPaletteStructByUid
-
- thumb_func_start ResetPaletteStruct
-ResetPaletteStruct: @ 8070A28
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08070A70 @ =gUnknown_20379F8
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldr r0, _08070A74 @ =gUnknown_83AC960
- str r0, [r1]
- ldrb r2, [r1, 0x4]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x4]
- ldrh r2, [r1, 0x4]
- ldr r0, _08070A78 @ =0xfffff803
- ands r0, r2
- strh r0, [r1, 0x4]
- ldr r0, [r1, 0x4]
- ldr r2, _08070A7C @ =0xffe007ff
- ands r0, r2
- str r0, [r1, 0x4]
- ldrh r2, [r1, 0x6]
- ldr r0, _08070A80 @ =0xfffff01f
- ands r0, r2
- strh r0, [r1, 0x6]
- ldrb r2, [r1, 0x4]
- movs r0, 0x3
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x4]
- movs r0, 0
- strb r0, [r1, 0x8]
- strb r0, [r1, 0x9]
- bx lr
- .align 2, 0
-_08070A70: .4byte gUnknown_20379F8
-_08070A74: .4byte gUnknown_83AC960
-_08070A78: .4byte 0xfffff803
-_08070A7C: .4byte 0xffe007ff
-_08070A80: .4byte 0xfffff01f
- thumb_func_end ResetPaletteStruct
-
- thumb_func_start ResetPaletteFadeControl
-ResetPaletteFadeControl: @ 8070A84
- ldr r2, _08070AEC @ =gPaletteFade
- movs r0, 0
- str r0, [r2]
- subs r0, 0x40
- ldrb r1, [r2, 0x4]
- ands r0, r1
- strb r0, [r2, 0x4]
- ldrh r1, [r2, 0x4]
- ldr r0, _08070AF0 @ =0xfffff83f
- ands r0, r1
- strh r0, [r2, 0x4]
- ldrb r1, [r2, 0x5]
- movs r0, 0x7
- ands r0, r1
- strb r0, [r2, 0x5]
- ldrh r1, [r2, 0x6]
- ldr r0, _08070AF4 @ =0xffff8000
- ands r0, r1
- strh r0, [r2, 0x6]
- ldrb r1, [r2, 0x7]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2, 0x7]
- movs r0, 0
- strb r0, [r2, 0x8]
- ldrb r1, [r2, 0x9]
- movs r3, 0x5
- negs r3, r3
- adds r0, r3, 0
- ands r0, r1
- movs r1, 0x9
- negs r1, r1
- ands r0, r1
- strb r0, [r2, 0x9]
- ldrb r1, [r2, 0xA]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0xA]
- ldr r0, [r2, 0x8]
- ldr r1, _08070AF8 @ =0xfffe0fff
- ands r0, r1
- str r0, [r2, 0x8]
- ldrb r0, [r2, 0xA]
- ands r3, r0
- movs r0, 0x79
- negs r0, r0
- ands r3, r0
- movs r0, 0x10
- orrs r3, r0
- strb r3, [r2, 0xA]
- bx lr
- .align 2, 0
-_08070AEC: .4byte gPaletteFade
-_08070AF0: .4byte 0xfffff83f
-_08070AF4: .4byte 0xffff8000
-_08070AF8: .4byte 0xfffe0fff
- thumb_func_end ResetPaletteFadeControl
-
- thumb_func_start unref_sub_80A2048
-unref_sub_80A2048: @ 8070AFC
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- bl GetPaletteNumByUid
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x10
- beq _08070B20
- ldr r1, _08070B24 @ =gUnknown_20379F8
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x4]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r0, 0x4]
-_08070B20:
- pop {r0}
- bx r0
- .align 2, 0
-_08070B24: .4byte gUnknown_20379F8
- thumb_func_end unref_sub_80A2048
-
- thumb_func_start unref_sub_80A2074
-unref_sub_80A2074: @ 8070B28
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- bl GetPaletteNumByUid
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x10
- beq _08070B4E
- ldr r0, _08070B54 @ =gUnknown_20379F8
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x4]
- movs r0, 0x3
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x4]
-_08070B4E:
- pop {r0}
- bx r0
- .align 2, 0
-_08070B54: .4byte gUnknown_20379F8
- thumb_func_end unref_sub_80A2074
-
- thumb_func_start GetPaletteNumByUid
-GetPaletteNumByUid: @ 8070B58
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r1, 0
- ldr r3, _08070B78 @ =gUnknown_20379F8
-_08070B62:
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldr r0, [r0]
- ldrh r0, [r0]
- cmp r0, r2
- bne _08070B7C
- adds r0, r1, 0
- b _08070B88
- .align 2, 0
-_08070B78: .4byte gUnknown_20379F8
-_08070B7C:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xF
- bls _08070B62
- movs r0, 0x10
-_08070B88:
- pop {r1}
- bx r1
- thumb_func_end GetPaletteNumByUid
-
- thumb_func_start UpdateNormalPaletteFade
-UpdateNormalPaletteFade: @ 8070B8C
- push {r4-r7,lr}
- ldr r4, _08070BA0 @ =gPaletteFade
- ldrb r1, [r4, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08070BA4
- movs r0, 0
- b _08070CC0
- .align 2, 0
-_08070BA0: .4byte gPaletteFade
-_08070BA4:
- bl IsSoftwarePaletteFadeFinishing
- lsls r0, 24
- cmp r0, 0
- beq _08070BB2
- ldrb r0, [r4, 0x7]
- b _08070CBE
-_08070BB2:
- ldrb r1, [r4, 0xA]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _08070BE6
- ldrb r2, [r4, 0x4]
- lsls r1, r2, 26
- ldrb r0, [r4, 0x8]
- lsls r0, 26
- cmp r1, r0
- bcs _08070BDE
- lsrs r0, r1, 26
- adds r0, 0x1
- movs r1, 0x3F
- ands r0, r1
- movs r1, 0x40
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x4]
- movs r0, 0x2
- b _08070CC0
-_08070BDE:
- movs r0, 0x40
- negs r0, r0
- ands r0, r2
- strb r0, [r4, 0x4]
-_08070BE6:
- movs r5, 0
- ldr r2, _08070BFC @ =gPaletteFade
- ldrb r1, [r2, 0xA]
- movs r0, 0x4
- ands r0, r1
- adds r7, r2, 0
- cmp r0, 0
- bne _08070C00
- ldrh r4, [r7]
- b _08070C06
- .align 2, 0
-_08070BFC: .4byte gPaletteFade
-_08070C00:
- ldrh r4, [r7, 0x2]
- movs r5, 0x80
- lsls r5, 1
-_08070C06:
- cmp r4, 0
- beq _08070C38
- ldr r7, _08070C74 @ =gPaletteFade
- adds r6, r7, 0
-_08070C0E:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _08070C2A
- ldrh r2, [r6, 0x4]
- lsls r2, 21
- lsrs r2, 27
- ldrh r3, [r6, 0x6]
- lsls r3, 17
- lsrs r3, 17
- adds r0, r5, 0
- movs r1, 0x10
- bl BlendPalette
-_08070C2A:
- lsrs r4, 1
- adds r0, r5, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r4, 0
- bne _08070C0E
-_08070C38:
- ldrb r2, [r7, 0xA]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r4, 0x5
- negs r4, r4
- ands r4, r2
- orrs r4, r1
- strb r4, [r7, 0xA]
- movs r0, 0x4
- ands r0, r4
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- bne _08070CBC
- ldrh r6, [r7, 0x4]
- lsls r2, r6, 21
- ldrb r0, [r7, 0x5]
- lsls r5, r0, 24
- lsrs r1, r2, 27
- lsrs r0, r5, 27
- cmp r1, r0
- bne _08070C78
- str r3, [r7]
- movs r0, 0x2
- orrs r4, r0
- strb r4, [r7, 0xA]
- b _08070CBC
- .align 2, 0
-_08070C74: .4byte gPaletteFade
-_08070C78:
- ldrb r1, [r7, 0x8]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08070C94
- lsrs r3, r2, 27
- lsls r0, r4, 25
- lsrs r0, 28
- adds r3, r0, r3
- lsrs r0, r5, 27
- cmp r3, r0
- ble _08070CAA
- adds r3, r0, 0
- b _08070CAA
-_08070C94:
- lsrs r3, r2, 27
- lsls r0, r4, 25
- lsrs r0, 28
- subs r0, r3, r0
- lsls r0, 24
- lsrs r3, r0, 24
- asrs r0, 24
- lsrs r1, r5, 27
- cmp r0, r1
- bge _08070CAA
- adds r3, r1, 0
-_08070CAA:
- lsls r0, r3, 24
- asrs r0, 24
- movs r1, 0x1F
- ands r0, r1
- lsls r0, 6
- ldr r1, _08070CC8 @ =0xfffff83f
- ands r1, r6
- orrs r1, r0
- strh r1, [r7, 0x4]
-_08070CBC:
- ldrb r0, [r7, 0x7]
-_08070CBE:
- lsrs r0, 7
-_08070CC0:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08070CC8: .4byte 0xfffff83f
- thumb_func_end UpdateNormalPaletteFade
-
- thumb_func_start InvertPlttBuffer
-InvertPlttBuffer: @ 8070CCC
- push {r4-r7,lr}
- adds r1, r0, 0
- movs r3, 0
- cmp r1, 0
- beq _08070D0A
- ldr r7, _08070D10 @ =gPlttBufferFaded
-_08070CD8:
- movs r0, 0x1
- ands r0, r1
- lsrs r4, r1, 1
- adds r5, r3, 0
- adds r5, 0x10
- cmp r0, 0
- beq _08070D00
- movs r2, 0
- adds r6, r7, 0
-_08070CEA:
- adds r0, r3, r2
- lsls r0, 1
- adds r0, r6
- ldrh r1, [r0]
- mvns r1, r1
- strh r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xF
- bls _08070CEA
-_08070D00:
- adds r1, r4, 0
- lsls r0, r5, 16
- lsrs r3, r0, 16
- cmp r1, 0
- bne _08070CD8
-_08070D0A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08070D10: .4byte gPlttBufferFaded
- thumb_func_end InvertPlttBuffer
-
- thumb_func_start TintPlttBuffer
-TintPlttBuffer: @ 8070D14
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- adds r4, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp]
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x4]
- movs r0, 0
- mov r9, r0
- cmp r4, 0
- beq _08070DD0
- lsls r1, 24
- str r1, [sp, 0x8]
-_08070D3E:
- movs r0, 0x1
- ands r0, r4
- lsrs r4, 1
- str r4, [sp, 0xC]
- movs r1, 0x10
- add r1, r9
- mov r10, r1
- cmp r0, 0
- beq _08070DC2
- movs r4, 0
- ldr r2, _08070DE0 @ =gPlttBufferFaded
- mov r8, r2
- ldr r1, [sp]
- lsls r0, r1, 24
- ldr r2, [sp, 0x4]
- lsls r1, r2, 24
- ldr r2, [sp, 0x8]
- asrs r2, 24
- mov r12, r2
- movs r5, 0x1F
- asrs r7, r0, 24
- asrs r6, r1, 24
-_08070D6A:
- mov r0, r9
- adds r2, r0, r4
- lsls r2, 1
- add r2, r8
- ldr r1, [r2]
- lsls r1, 27
- lsrs r1, 27
- add r1, r12
- ands r1, r5
- ldrb r3, [r2]
- movs r0, 0x20
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldr r1, [r2]
- lsls r1, 22
- lsrs r1, 27
- adds r1, r7
- movs r0, 0x1F
- ands r1, r0
- lsls r1, 5
- ldrh r3, [r2]
- ldr r0, _08070DE4 @ =0xfffffc1f
- ands r0, r3
- orrs r0, r1
- strh r0, [r2]
- ldr r1, [r2]
- lsls r1, 17
- lsrs r1, 27
- adds r1, r6
- ands r1, r5
- lsls r1, 2
- ldrb r3, [r2, 0x1]
- movs r0, 0x7D
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x1]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _08070D6A
-_08070DC2:
- ldr r4, [sp, 0xC]
- mov r1, r10
- lsls r0, r1, 16
- lsrs r0, 16
- mov r9, r0
- cmp r4, 0
- bne _08070D3E
-_08070DD0:
- 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
-_08070DE0: .4byte gPlttBufferFaded
-_08070DE4: .4byte 0xfffffc1f
- thumb_func_end TintPlttBuffer
-
- thumb_func_start UnfadePlttBuffer
-UnfadePlttBuffer: @ 8070DE8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r1, r0, 0
- movs r3, 0
- cmp r1, 0
- beq _08070E32
- ldr r0, _08070E3C @ =gPlttBufferFaded
- mov r8, r0
- ldr r0, _08070E40 @ =gPlttBufferUnfaded
- mov r12, r0
-_08070DFE:
- movs r0, 0x1
- ands r0, r1
- lsrs r4, r1, 1
- adds r5, r3, 0
- adds r5, 0x10
- cmp r0, 0
- beq _08070E28
- movs r2, 0
- mov r7, r8
- mov r6, r12
-_08070E12:
- adds r0, r3, r2
- lsls r0, 1
- adds r1, r0, r7
- adds r0, r6
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xF
- bls _08070E12
-_08070E28:
- adds r1, r4, 0
- lsls r0, r5, 16
- lsrs r3, r0, 16
- cmp r1, 0
- bne _08070DFE
-_08070E32:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08070E3C: .4byte gPlttBufferFaded
-_08070E40: .4byte gPlttBufferUnfaded
- thumb_func_end UnfadePlttBuffer
-
- thumb_func_start BeginFastPaletteFade
-BeginFastPaletteFade: @ 8070E44
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _08070E64 @ =gPaletteFade
- ldrb r2, [r3, 0xA]
- movs r1, 0x79
- negs r1, r1
- ands r1, r2
- movs r2, 0x10
- orrs r1, r2
- strb r1, [r3, 0xA]
- bl BeginFastPaletteFadeInternal
- pop {r0}
- bx r0
- .align 2, 0
-_08070E64: .4byte gPaletteFade
- thumb_func_end BeginFastPaletteFade
-
- thumb_func_start BeginFastPaletteFadeInternal
-BeginFastPaletteFadeInternal: @ 8070E68
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- ldr r2, _08070EDC @ =gPaletteFade
- ldrh r0, [r2, 0x4]
- movs r3, 0xF8
- lsls r3, 3
- adds r1, r3, 0
- orrs r0, r1
- strh r0, [r2, 0x4]
- movs r1, 0x3F
- ands r1, r4
- ldrb r3, [r2, 0x8]
- movs r0, 0x40
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x8]
- ldrb r0, [r2, 0x7]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x7]
- ldrb r1, [r2, 0x9]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x9]
- cmp r4, 0x2
- bne _08070EBA
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r1, _08070EE0 @ =gPlttBufferFaded
- ldr r2, _08070EE4 @ =0x01000200
- mov r0, sp
- bl CpuSet
-_08070EBA:
- cmp r4, 0
- bne _08070ED0
- mov r0, sp
- adds r0, 0x2
- ldr r2, _08070EE8 @ =0x00007fff
- adds r1, r2, 0
- strh r1, [r0]
- ldr r1, _08070EE0 @ =gPlttBufferFaded
- ldr r2, _08070EE4 @ =0x01000200
- bl CpuSet
-_08070ED0:
- bl UpdatePaletteFade
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08070EDC: .4byte gPaletteFade
-_08070EE0: .4byte gPlttBufferFaded
-_08070EE4: .4byte 0x01000200
-_08070EE8: .4byte 0x00007fff
- thumb_func_end BeginFastPaletteFadeInternal
-
- thumb_func_start UpdateFastPaletteFade
-UpdateFastPaletteFade: @ 8070EEC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r4, _08070F08 @ =gPaletteFade
- ldrb r1, [r4, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08070F0C
- movs r0, 0
- b _08071246
- .align 2, 0
-_08070F08: .4byte gPaletteFade
-_08070F0C:
- bl IsSoftwarePaletteFadeFinishing
- lsls r0, 24
- cmp r0, 0
- beq _08070F1A
- ldrb r0, [r4, 0x7]
- b _08071244
-_08070F1A:
- ldrb r1, [r4, 0xA]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08070F30
- movs r2, 0x80
- lsls r2, 1
- movs r0, 0x80
- lsls r0, 2
- mov r10, r0
- b _08070F38
-_08070F30:
- movs r2, 0
- movs r1, 0x80
- lsls r1, 1
- mov r10, r1
-_08070F38:
- ldr r1, _08070F50 @ =gPaletteFade
- ldrb r0, [r1, 0x8]
- lsls r0, 26
- lsrs r0, 26
- cmp r0, 0x1
- beq _08070FF8
- cmp r0, 0x1
- bgt _08070F54
- cmp r0, 0
- beq _08070F62
- b _08071148
- .align 2, 0
-_08070F50: .4byte gPaletteFade
-_08070F54:
- cmp r0, 0x2
- bne _08070F5A
- b _0807105C
-_08070F5A:
- cmp r0, 0x3
- bne _08070F60
- b _080710E4
-_08070F60:
- b _08071148
-_08070F62:
- adds r7, r2, 0
- cmp r7, r10
- bcc _08070F6A
- b _08071148
-_08070F6A:
- lsls r2, r7, 1
- ldr r0, _08070FF0 @ =gPlttBufferUnfaded
- adds r0, r2, r0
- ldr r1, [r0]
- lsls r3, r1, 27
- lsls r0, r1, 22
- lsrs r0, 27
- mov r12, r0
- lsls r1, 17
- lsrs r1, 27
- mov r8, r1
- ldr r0, _08070FF4 @ =gPlttBufferFaded
- adds r2, r0
- mov r9, r2
- ldr r1, [r2]
- lsls r2, r1, 27
- lsrs r2, 3
- movs r4, 0xFE
- lsls r4, 24
- adds r2, r4
- lsls r0, r1, 22
- lsrs r0, 27
- subs r0, 0x2
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 17
- lsrs r1, 27
- subs r1, 0x2
- lsls r1, 24
- lsrs r4, r1, 24
- lsrs r6, r2, 24
- asrs r2, 24
- lsrs r3, 3
- asrs r0, r3, 24
- cmp r2, r0
- bge _08070FB4
- lsrs r6, r3, 24
-_08070FB4:
- lsls r0, r5, 24
- asrs r0, 24
- mov r2, r12
- lsls r1, r2, 24
- cmp r0, r12
- bge _08070FC2
- lsrs r5, r1, 24
-_08070FC2:
- lsls r0, r4, 24
- asrs r0, 24
- mov r3, r8
- lsls r1, r3, 24
- cmp r0, r8
- bge _08070FD0
- lsrs r4, r1, 24
-_08070FD0:
- lsls r1, r6, 24
- asrs r1, 24
- lsls r0, r5, 24
- asrs r0, 19
- orrs r1, r0
- lsls r0, r4, 24
- asrs r0, 14
- orrs r1, r0
- mov r4, r9
- strh r1, [r4]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, r10
- bcc _08070F6A
- b _08071148
- .align 2, 0
-_08070FF0: .4byte gPlttBufferUnfaded
-_08070FF4: .4byte gPlttBufferFaded
-_08070FF8:
- adds r7, r2, 0
- cmp r7, r10
- bcc _08071000
- b _08071148
-_08071000:
- lsls r1, r7, 1
- ldr r0, _08071058 @ =gPlttBufferFaded
- adds r2, r1, r0
- ldr r1, [r2]
- lsls r0, r1, 27
- lsrs r0, 3
- movs r3, 0x80
- lsls r3, 18
- adds r0, r3
- lsrs r6, r0, 24
- lsls r0, r1, 22
- lsrs r0, 27
- adds r5, r0, 0x2
- lsls r1, 17
- lsrs r1, 27
- adds r4, r1, 0x2
- cmp r6, 0x1F
- ble _08071026
- movs r6, 0x1F
-_08071026:
- lsls r0, r5, 24
- asrs r0, 24
- cmp r0, 0x1F
- ble _08071030
- movs r5, 0x1F
-_08071030:
- lsls r0, r4, 24
- asrs r0, 24
- cmp r0, 0x1F
- ble _0807103A
- movs r4, 0x1F
-_0807103A:
- lsls r1, r6, 24
- asrs r1, 24
- lsls r0, r5, 24
- asrs r0, 19
- orrs r1, r0
- lsls r0, r4, 24
- asrs r0, 14
- orrs r1, r0
- strh r1, [r2]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, r10
- bcc _08071000
- b _08071148
- .align 2, 0
-_08071058: .4byte gPlttBufferFaded
-_0807105C:
- adds r7, r2, 0
- cmp r7, r10
- bcs _08071148
-_08071062:
- lsls r2, r7, 1
- ldr r0, _080710DC @ =gPlttBufferUnfaded
- adds r0, r2, r0
- ldr r1, [r0]
- lsls r3, r1, 27
- lsls r0, r1, 22
- lsrs r0, 27
- mov r12, r0
- lsls r1, 17
- lsrs r1, 27
- mov r8, r1
- ldr r0, _080710E0 @ =gPlttBufferFaded
- adds r2, r0
- ldr r1, [r2]
- lsls r0, r1, 27
- lsrs r0, 3
- movs r4, 0x80
- lsls r4, 18
- adds r0, r4
- lsrs r6, r0, 24
- lsls r0, r1, 22
- lsrs r0, 27
- adds r5, r0, 0x2
- lsls r1, 17
- lsrs r1, 27
- adds r4, r1, 0x2
- lsrs r3, 3
- asrs r0, r3, 24
- cmp r6, r0
- ble _080710A0
- lsrs r6, r3, 24
-_080710A0:
- lsls r0, r5, 24
- asrs r0, 24
- mov r3, r12
- lsls r1, r3, 24
- cmp r0, r12
- ble _080710AE
- lsrs r5, r1, 24
-_080710AE:
- lsls r0, r4, 24
- asrs r0, 24
- mov r3, r8
- lsls r1, r3, 24
- cmp r0, r8
- ble _080710BC
- lsrs r4, r1, 24
-_080710BC:
- lsls r1, r6, 24
- asrs r1, 24
- lsls r0, r5, 24
- asrs r0, 19
- orrs r1, r0
- lsls r0, r4, 24
- asrs r0, 14
- orrs r1, r0
- strh r1, [r2]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, r10
- bcc _08071062
- b _08071148
- .align 2, 0
-_080710DC: .4byte gPlttBufferUnfaded
-_080710E0: .4byte gPlttBufferFaded
-_080710E4:
- adds r7, r2, 0
- cmp r7, r10
- bcs _08071148
- ldr r4, _08071170 @ =gPlttBufferFaded
- mov r8, r4
-_080710EE:
- lsls r0, r7, 1
- mov r1, r8
- adds r3, r0, r1
- ldr r1, [r3]
- lsls r2, r1, 27
- lsrs r2, 3
- movs r4, 0xFE
- lsls r4, 24
- adds r2, r4
- lsls r0, r1, 22
- lsrs r0, 27
- subs r0, 0x2
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 17
- lsrs r1, 27
- subs r1, 0x2
- lsls r1, 24
- lsrs r4, r1, 24
- lsrs r6, r2, 24
- cmp r2, 0
- bge _0807111C
- movs r6, 0
-_0807111C:
- lsls r0, r5, 24
- cmp r0, 0
- bge _08071124
- movs r5, 0
-_08071124:
- lsls r0, r4, 24
- cmp r0, 0
- bge _0807112C
- movs r4, 0
-_0807112C:
- lsls r1, r6, 24
- asrs r1, 24
- lsls r0, r5, 24
- asrs r0, 19
- orrs r1, r0
- lsls r0, r4, 24
- asrs r0, 14
- orrs r1, r0
- strh r1, [r3]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, r10
- bcc _080710EE
-_08071148:
- ldr r0, _08071174 @ =gPaletteFade
- ldrb r2, [r0, 0xA]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r3, 0x5
- negs r3, r3
- ands r3, r2
- orrs r3, r1
- ldr r1, _08071174 @ =gPaletteFade
- strb r3, [r1, 0xA]
- movs r0, 0x4
- ands r0, r3
- cmp r0, 0
- beq _08071178
- ldrb r0, [r1, 0x7]
- b _08071244
- .align 2, 0
-_08071170: .4byte gPlttBufferFaded
-_08071174: .4byte gPaletteFade
-_08071178:
- ldr r2, _08071194 @ =gPaletteFade
- ldrh r4, [r2, 0x4]
- lsls r5, r4, 21
- lsrs r0, r5, 27
- lsls r2, r3, 25
- lsrs r1, r2, 28
- subs r0, r1
- cmp r0, 0
- bge _0807119C
- ldr r0, _08071198 @ =0xfffff83f
- ands r0, r4
- ldr r3, _08071194 @ =gPaletteFade
- strh r0, [r3, 0x4]
- b _080711B2
- .align 2, 0
-_08071194: .4byte gPaletteFade
-_08071198: .4byte 0xfffff83f
-_0807119C:
- lsrs r1, r5, 27
- lsrs r0, r2, 28
- subs r1, r0
- movs r0, 0x1F
- ands r1, r0
- lsls r1, 6
- ldr r0, _080711D8 @ =0xfffff83f
- ands r0, r4
- orrs r0, r1
- ldr r4, _080711DC @ =gPaletteFade
- strh r0, [r4, 0x4]
-_080711B2:
- ldr r1, _080711DC @ =gPaletteFade
- ldrh r0, [r1, 0x4]
- movs r1, 0xF8
- lsls r1, 3
- ands r1, r0
- cmp r1, 0
- bne _08071240
- ldr r2, _080711DC @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- lsls r0, 26
- lsrs r0, 26
- cmp r0, 0x1
- beq _08071204
- cmp r0, 0x1
- bgt _080711E0
- cmp r0, 0
- beq _080711EA
- b _0807122C
- .align 2, 0
-_080711D8: .4byte 0xfffff83f
-_080711DC: .4byte gPaletteFade
-_080711E0:
- cmp r0, 0x2
- beq _080711EA
- cmp r0, 0x3
- beq _08071220
- b _0807122C
-_080711EA:
- ldr r0, _080711F8 @ =gPlttBufferUnfaded
- ldr r1, _080711FC @ =gPlttBufferFaded
- ldr r2, _08071200 @ =0x04000100
- bl CpuSet
- b _0807122C
- .align 2, 0
-_080711F8: .4byte gPlttBufferUnfaded
-_080711FC: .4byte gPlttBufferFaded
-_08071200: .4byte 0x04000100
-_08071204:
- movs r0, 0x1
- negs r0, r0
- str r0, [sp]
- ldr r1, _08071218 @ =gPlttBufferFaded
- ldr r2, _0807121C @ =0x05000100
- mov r0, sp
- bl CpuSet
- b _0807122C
- .align 2, 0
-_08071218: .4byte gPlttBufferFaded
-_0807121C: .4byte 0x05000100
-_08071220:
- str r1, [sp, 0x4]
- add r0, sp, 0x4
- ldr r1, _08071258 @ =gPlttBufferFaded
- ldr r2, _0807125C @ =0x05000100
- bl CpuSet
-_0807122C:
- ldr r2, _08071260 @ =gPaletteFade
- ldrb r1, [r2, 0x9]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x9]
- ldrb r0, [r2, 0xA]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2, 0xA]
-_08071240:
- ldr r3, _08071260 @ =gPaletteFade
- ldrb r0, [r3, 0x7]
-_08071244:
- lsrs r0, 7
-_08071246:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08071258: .4byte gPlttBufferFaded
-_0807125C: .4byte 0x05000100
-_08071260: .4byte gPaletteFade
- thumb_func_end UpdateFastPaletteFade
-
- thumb_func_start BeginHardwarePaletteFade
-BeginHardwarePaletteFade: @ 8071264
- push {r4-r7,lr}
- ldr r5, [sp, 0x14]
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r5, 24
- lsrs r5, 24
- ldr r7, _080712EC @ =gPaletteFade
- str r0, [r7]
- movs r0, 0x3F
- ands r1, r0
- ldrb r4, [r7, 0x4]
- movs r6, 0x40
- negs r6, r6
- adds r0, r6, 0
- ands r0, r4
- orrs r0, r1
- strb r0, [r7, 0x4]
- ldrb r0, [r7, 0x8]
- ands r6, r0
- orrs r6, r1
- strb r6, [r7, 0x8]
- movs r0, 0x1F
- adds r1, r2, 0
- ands r1, r0
- lsls r1, 6
- ldrh r4, [r7, 0x4]
- ldr r0, _080712F0 @ =0xfffff83f
- ands r0, r4
- orrs r0, r1
- strh r0, [r7, 0x4]
- lsls r4, r3, 3
- ldrb r1, [r7, 0x5]
- movs r0, 0x7
- ands r0, r1
- orrs r0, r4
- strb r0, [r7, 0x5]
- ldrb r0, [r7, 0x7]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r7, 0x7]
- ldrb r1, [r7, 0x9]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x2
- orrs r0, r1
- movs r1, 0x1
- ands r5, r1
- lsls r5, 2
- subs r1, 0x6
- ands r0, r1
- orrs r0, r5
- subs r1, 0x4
- ands r0, r1
- strb r0, [r7, 0x9]
- cmp r2, r3
- bcs _080712F4
- movs r0, 0x41
- negs r0, r0
- ands r6, r0
- b _080712F8
- .align 2, 0
-_080712EC: .4byte gPaletteFade
-_080712F0: .4byte 0xfffff83f
-_080712F4:
- movs r0, 0x40
- orrs r6, r0
-_080712F8:
- strb r6, [r7, 0x8]
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BeginHardwarePaletteFade
-
- thumb_func_start UpdateHardwarePaletteFade
-UpdateHardwarePaletteFade: @ 8071300
- push {r4-r7,lr}
- ldr r2, _08071314 @ =gPaletteFade
- ldrb r1, [r2, 0x7]
- movs r0, 0x80
- ands r0, r1
- adds r4, r2, 0
- cmp r0, 0
- bne _08071318
- movs r0, 0
- b _08071410
- .align 2, 0
-_08071314: .4byte gPaletteFade
-_08071318:
- ldrb r2, [r4, 0x4]
- lsls r1, r2, 26
- ldrb r3, [r4, 0x8]
- lsls r0, r3, 26
- cmp r1, r0
- bcs _0807133A
- lsrs r0, r1, 26
- adds r0, 0x1
- movs r1, 0x3F
- ands r0, r1
- movs r1, 0x40
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x4]
- movs r0, 0x2
- b _08071410
-_0807133A:
- movs r0, 0x40
- negs r0, r0
- ands r0, r2
- strb r0, [r4, 0x4]
- movs r0, 0x40
- ands r0, r3
- cmp r0, 0
- bne _08071398
- ldrh r1, [r4, 0x4]
- lsls r0, r1, 21
- lsrs r0, 27
- adds r0, 0x1
- movs r7, 0x1F
- ands r0, r7
- lsls r0, 6
- ldr r6, _08071394 @ =0xfffff83f
- adds r3, r6, 0
- ands r3, r1
- orrs r3, r0
- strh r3, [r4, 0x4]
- lsls r5, r3, 21
- ldrb r0, [r4, 0x5]
- lsrs r1, r5, 27
- lsrs r0, 3
- cmp r1, r0
- bls _080713E4
- ldrb r2, [r4, 0x9]
- lsls r1, r2, 28
- lsrs r1, 31
- adds r1, 0x1
- movs r0, 0x1
- ands r1, r0
- lsls r1, 3
- movs r0, 0x9
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x9]
- lsrs r0, r5, 27
- subs r0, 0x1
- ands r0, r7
- lsls r0, 6
- ands r3, r6
- b _080713E0
- .align 2, 0
-_08071394: .4byte 0xfffff83f
-_08071398:
- ldrh r2, [r4, 0x4]
- lsls r1, r2, 21
- lsrs r0, r1, 27
- subs r0, 0x1
- movs r6, 0x1F
- ands r0, r6
- lsls r0, 6
- ldr r5, _08071418 @ =0xfffff83f
- adds r3, r5, 0
- ands r3, r2
- orrs r3, r0
- strh r3, [r4, 0x4]
- lsrs r1, 27
- subs r1, 0x1
- ldrb r0, [r4, 0x5]
- lsrs r0, 3
- cmp r1, r0
- bge _080713E4
- ldrb r2, [r4, 0x9]
- lsls r1, r2, 28
- lsrs r1, 31
- adds r1, 0x1
- movs r0, 0x1
- ands r1, r0
- lsls r1, 3
- movs r0, 0x9
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x9]
- lsls r0, r3, 21
- lsrs r0, 27
- adds r0, 0x1
- ands r0, r6
- lsls r0, 6
- ands r3, r5
-_080713E0:
- orrs r3, r0
- strh r3, [r4, 0x4]
-_080713E4:
- ldrb r1, [r4, 0x9]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0807140C
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08071402
- movs r0, 0
- str r0, [r4]
- ldrh r1, [r4, 0x4]
- ldr r0, _08071418 @ =0xfffff83f
- ands r0, r1
- strh r0, [r4, 0x4]
-_08071402:
- ldrb r1, [r4, 0x9]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x9]
-_0807140C:
- ldrb r0, [r4, 0x7]
- lsrs r0, 7
-_08071410:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08071418: .4byte 0xfffff83f
- thumb_func_end UpdateHardwarePaletteFade
-
- thumb_func_start UpdateBlendRegisters
-UpdateBlendRegisters: @ 807141C
- push {r4,lr}
- ldr r4, _08071468 @ =gPaletteFade
- ldrh r1, [r4]
- movs r0, 0x50
- bl SetGpuReg
- ldrh r1, [r4, 0x4]
- lsls r1, 21
- lsrs r1, 27
- movs r0, 0x54
- bl SetGpuReg
- ldrb r1, [r4, 0x9]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08071460
- movs r0, 0x9
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- negs r1, r1
- ands r0, r1
- strb r0, [r4, 0x9]
- movs r0, 0
- str r0, [r4]
- ldrh r1, [r4, 0x4]
- ldr r0, _0807146C @ =0xfffff83f
- ands r0, r1
- strh r0, [r4, 0x4]
- ldrb r1, [r4, 0x7]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r4, 0x7]
-_08071460:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08071468: .4byte gPaletteFade
-_0807146C: .4byte 0xfffff83f
- thumb_func_end UpdateBlendRegisters
-
- thumb_func_start IsSoftwarePaletteFadeFinishing
-IsSoftwarePaletteFadeFinishing: @ 8071470
- push {r4,lr}
- ldr r3, _080714A8 @ =gPaletteFade
- ldrb r4, [r3, 0xA]
- movs r0, 0x2
- ands r0, r4
- cmp r0, 0
- beq _080714CC
- ldr r2, [r3, 0x8]
- movs r0, 0xF8
- lsls r0, 9
- ands r0, r2
- movs r1, 0x80
- lsls r1, 7
- cmp r0, r1
- bne _080714B0
- ldrb r1, [r3, 0x7]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r3, 0x7]
- movs r0, 0x3
- negs r0, r0
- ands r0, r4
- strb r0, [r3, 0xA]
- ldr r0, [r3, 0x8]
- ldr r1, _080714AC @ =0xfffe0fff
- ands r0, r1
- str r0, [r3, 0x8]
- b _080714C4
- .align 2, 0
-_080714A8: .4byte gPaletteFade
-_080714AC: .4byte 0xfffe0fff
-_080714B0:
- lsls r0, r2, 15
- lsrs r0, 27
- adds r0, 0x1
- movs r1, 0x1F
- ands r0, r1
- lsls r0, 12
- ldr r1, _080714C8 @ =0xfffe0fff
- ands r1, r2
- orrs r1, r0
- str r1, [r3, 0x8]
-_080714C4:
- movs r0, 0x1
- b _080714CE
- .align 2, 0
-_080714C8: .4byte 0xfffe0fff
-_080714CC:
- movs r0, 0
-_080714CE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end IsSoftwarePaletteFadeFinishing
-
- thumb_func_start BlendPalettes
-BlendPalettes: @ 80714D4
- push {r4-r7,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 16
- lsrs r6, r2, 16
- movs r5, 0
- cmp r4, 0
- beq _08071508
-_080714E6:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _080714FA
- adds r0, r5, 0
- movs r1, 0x10
- adds r2, r7, 0
- adds r3, r6, 0
- bl BlendPalette
-_080714FA:
- lsrs r4, 1
- adds r0, r5, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r4, 0
- bne _080714E6
-_08071508:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BlendPalettes
-
- thumb_func_start BlendPalettesUnfaded
-BlendPalettesUnfaded: @ 8071510
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 16
- lsrs r5, 16
- ldr r0, _0807153C @ =gPlttBufferUnfaded
- ldr r1, _08071540 @ =gPlttBufferFaded
- movs r2, 0x80
- lsls r2, 1
- bl CpuFastSet
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl BlendPalettes
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807153C: .4byte gPlttBufferUnfaded
-_08071540: .4byte gPlttBufferFaded
- thumb_func_end BlendPalettesUnfaded
-
- thumb_func_start TintPalette_GrayScale
-TintPalette_GrayScale: @ 8071544
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r1, 16
- cmp r1, 0
- beq _0807158C
- movs r6, 0x1F
- adds r5, r1, 0
-_08071554:
- ldrh r1, [r4]
- movs r2, 0x1F
- ands r2, r1
- lsls r1, 16
- lsrs r3, r1, 21
- ands r3, r6
- lsrs r1, 26
- ands r1, r6
- movs r0, 0x4C
- muls r2, r0
- movs r0, 0x97
- muls r0, r3
- adds r2, r0
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r1
- adds r2, r0
- asrs r2, 8
- lsls r0, r2, 10
- lsls r1, r2, 5
- orrs r0, r1
- orrs r0, r2
- strh r0, [r4]
- adds r4, 0x2
- subs r5, 0x1
- cmp r5, 0
- bne _08071554
-_0807158C:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end TintPalette_GrayScale
-
- thumb_func_start TintPalette_GrayScale2
-TintPalette_GrayScale2: @ 8071594
- push {r4-r7,lr}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r1, 16
- cmp r1, 0
- beq _080715E8
- movs r6, 0x1F
- ldr r7, _080715F0 @ =gUnknown_83AC970
- adds r5, r1, 0
-_080715A6:
- ldrh r1, [r4]
- movs r2, 0x1F
- ands r2, r1
- lsls r1, 16
- lsrs r3, r1, 21
- ands r3, r6
- lsrs r1, 26
- ands r1, r6
- movs r0, 0x4C
- muls r2, r0
- movs r0, 0x97
- muls r0, r3
- adds r2, r0
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r1
- adds r2, r0
- asrs r2, 8
- cmp r2, 0x1F
- bls _080715D2
- movs r2, 0x1F
-_080715D2:
- adds r0, r2, r7
- ldrb r2, [r0]
- lsls r0, r2, 10
- lsls r1, r2, 5
- orrs r0, r1
- orrs r0, r2
- strh r0, [r4]
- adds r4, 0x2
- subs r5, 0x1
- cmp r5, 0
- bne _080715A6
-_080715E8:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080715F0: .4byte gUnknown_83AC970
- thumb_func_end TintPalette_GrayScale2
-
- thumb_func_start TintPalette_SepiaTone
-TintPalette_SepiaTone: @ 80715F4
- push {r4-r7,lr}
- adds r5, r0, 0
- lsls r1, 16
- lsrs r1, 16
- cmp r1, 0
- beq _08071656
- movs r7, 0x1F
- adds r6, r1, 0
-_08071604:
- ldrh r0, [r5]
- movs r1, 0x1F
- ands r1, r0
- lsls r0, 16
- lsrs r2, r0, 21
- ands r2, r7
- lsrs r3, r0, 26
- ands r3, r7
- movs r0, 0x4C
- muls r1, r0
- movs r0, 0x97
- muls r0, r2
- adds r1, r0
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r3
- adds r1, r0
- asrs r1, 8
- ldr r0, _0807165C @ =0x00000133
- muls r0, r1
- lsls r0, 16
- lsrs r2, r0, 24
- lsls r0, r1, 24
- lsrs r4, r0, 24
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 20
- lsrs r3, r0, 24
- cmp r2, 0x1F
- ble _08071644
- movs r2, 0x1F
-_08071644:
- lsls r0, r3, 10
- lsls r1, r4, 5
- orrs r0, r1
- orrs r0, r2
- strh r0, [r5]
- adds r5, 0x2
- subs r6, 0x1
- cmp r6, 0
- bne _08071604
-_08071656:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807165C: .4byte 0x00000133
- thumb_func_end TintPalette_SepiaTone
-
- thumb_func_start sub_8071660
-sub_8071660: @ 8071660
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r5, r0, 0
- ldr r0, [sp, 0x1C]
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- mov r9, r2
- lsls r3, 16
- lsrs r3, 16
- mov r8, r3
- lsls r0, 16
- lsrs r0, 16
- mov r12, r0
- cmp r1, 0
- beq _080716EC
- movs r7, 0x1F
- adds r6, r1, 0
-_0807168A:
- ldrh r0, [r5]
- movs r1, 0x1F
- ands r1, r0
- lsls r0, 16
- lsrs r2, r0, 21
- ands r2, r7
- lsrs r3, r0, 26
- ands r3, r7
- movs r0, 0x4C
- muls r1, r0
- movs r0, 0x97
- muls r0, r2
- adds r1, r0
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r3
- adds r1, r0
- asrs r1, 8
- mov r0, r9
- muls r0, r1
- lsls r0, 16
- lsrs r4, r0, 24
- mov r0, r8
- muls r0, r1
- lsls r0, 16
- lsrs r2, r0, 24
- mov r0, r12
- muls r0, r1
- lsls r0, 16
- lsrs r3, r0, 24
- cmp r4, 0x1F
- ble _080716CE
- movs r4, 0x1F
-_080716CE:
- cmp r2, 0x1F
- ble _080716D4
- movs r2, 0x1F
-_080716D4:
- cmp r3, 0x1F
- ble _080716DA
- movs r3, 0x1F
-_080716DA:
- lsls r0, r3, 10
- lsls r1, r2, 5
- orrs r0, r1
- orrs r0, r4
- strh r0, [r5]
- adds r5, 0x2
- subs r6, 0x1
- cmp r6, 0
- bne _0807168A
-_080716EC:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8071660
-
- thumb_func_start sub_80716F8
-sub_80716F8: @ 80716F8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r9, r0
- adds r6, r1, 0
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 24
- lsrs r3, 24
- mov r12, r3
- cmp r3, 0
- bne _0807172C
- cmp r2, 0
- beq _0807179A
- adds r5, r2, 0
-_08071718:
- mov r1, r9
- ldrh r0, [r1]
- strh r0, [r6]
- movs r7, 0x2
- add r9, r7
- adds r6, 0x2
- subs r5, 0x1
- cmp r5, 0
- bne _08071718
- b _0807179A
-_0807172C:
- cmp r2, 0
- beq _0807179A
- movs r0, 0x1F
- mov r8, r0
- adds r5, r2, 0
-_08071736:
- mov r7, r9
- ldrh r1, [r7]
- movs r4, 0x1F
- ands r4, r1
- lsls r1, 16
- lsrs r3, r1, 21
- mov r0, r8
- ands r3, r0
- lsrs r1, 26
- ands r1, r0
- movs r0, 0x4C
- adds r2, r4, 0
- muls r2, r0
- movs r0, 0x97
- muls r0, r3
- adds r2, r0
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r1
- adds r2, r0
- asrs r2, 8
- subs r0, r2, r4
- mov r7, r12
- muls r7, r0
- adds r0, r7, 0
- lsrs r0, 4
- adds r4, r0
- subs r0, r2, r3
- mov r7, r12
- muls r7, r0
- adds r0, r7, 0
- lsrs r0, 4
- adds r3, r0
- subs r2, r1
- mov r0, r12
- muls r0, r2
- lsrs r0, 4
- adds r1, r0
- lsls r1, 10
- lsls r3, 5
- orrs r1, r3
- orrs r1, r4
- strh r1, [r6]
- movs r0, 0x2
- add r9, r0
- adds r6, 0x2
- subs r5, 0x1
- cmp r5, 0
- bne _08071736
-_0807179A:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80716F8
-
- thumb_func_start sub_80717A8
-sub_80717A8: @ 80717A8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r10, r0
- adds r4, r1, 0
- ldr r0, [sp, 0x20]
- ldr r1, [sp, 0x24]
- ldr r5, [sp, 0x28]
- lsls r4, 24
- lsrs r4, 24
- lsls r2, 24
- lsrs r7, r2, 24
- lsls r3, 24
- lsrs r6, r3, 24
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- lsls r1, 24
- lsrs r1, 24
- lsls r5, 24
- lsrs r5, 24
- mov r8, r5
- ldr r0, _08071800 @ =sub_80718B8
- bl CreateTask
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08071804 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r1, r0, r1
- strh r7, [r1, 0x8]
- strh r6, [r1, 0xA]
- lsls r4, 24
- asrs r4, 24
- cmp r4, 0
- blt _08071808
- strh r4, [r1, 0xE]
- movs r0, 0x1
- b _08071810
- .align 2, 0
-_08071800: .4byte sub_80718B8
-_08071804: .4byte gTasks
-_08071808:
- movs r0, 0
- strh r0, [r1, 0xE]
- negs r0, r4
- adds r0, 0x1
-_08071810:
- strh r0, [r1, 0xC]
- lsls r4, r5, 2
- cmp r6, r7
- bcs _08071828
- ldr r0, _08071858 @ =gTasks
- adds r1, r4, r5
- lsls r1, 3
- adds r1, r0
- movs r2, 0xC
- ldrsh r0, [r1, r2]
- negs r0, r0
- strh r0, [r1, 0xC]
-_08071828:
- adds r0, r5, 0
- movs r1, 0x5
- mov r2, r10
- bl SetWordTaskArg
- ldr r0, _08071858 @ =gTasks
- adds r1, r4, r5
- lsls r1, 3
- adds r1, r0
- mov r0, r9
- strh r0, [r1, 0x16]
- mov r2, r8
- strh r2, [r1, 0x18]
- ldr r1, [r1]
- adds r0, r5, 0
- bl _call_via_r1
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08071858: .4byte gTasks
- thumb_func_end sub_80717A8
-
- thumb_func_start sub_807185C
-sub_807185C: @ 807185C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- movs r2, 0
- ldr r4, _08071880 @ =sub_80718B8
- ldr r1, _08071884 @ =gTasks
-_08071868:
- ldrb r0, [r1, 0x4]
- cmp r0, 0x1
- bne _08071888
- ldr r0, [r1]
- cmp r0, r4
- bne _08071888
- movs r5, 0x18
- ldrsh r0, [r1, r5]
- cmp r0, r3
- bne _08071888
- movs r0, 0x1
- b _08071892
- .align 2, 0
-_08071880: .4byte sub_80718B8
-_08071884: .4byte gTasks
-_08071888:
- adds r1, 0x28
- adds r2, 0x1
- cmp r2, 0xF
- ble _08071868
- movs r0, 0
-_08071892:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_807185C
-
- thumb_func_start sub_8071898
-sub_8071898: @ 8071898
- push {lr}
- b _080718A0
-_0807189C:
- bl DestroyTask
-_080718A0:
- ldr r0, _080718B4 @ =sub_80718B8
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0807189C
- pop {r0}
- bx r0
- .align 2, 0
-_080718B4: .4byte sub_80718B8
- thumb_func_end sub_8071898
-
- thumb_func_start sub_80718B8
-sub_80718B8: @ 80718B8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0807190C @ =gTasks+0x8
- adds r4, r0, r1
- adds r0, r5, 0
- movs r1, 0x5
- bl GetWordTaskArg
- adds r3, r0, 0
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- cmp r0, r1
- ble _08071930
- movs r0, 0
- strh r0, [r4, 0x8]
- ldrb r1, [r4]
- ldrh r2, [r4, 0xE]
- adds r0, r3, 0
- bl BlendPalettes
- ldrh r1, [r4]
- movs r6, 0
- ldrsh r0, [r4, r6]
- ldrh r3, [r4, 0x2]
- movs r6, 0x2
- ldrsh r2, [r4, r6]
- cmp r0, r2
- bne _08071910
- adds r0, r5, 0
- bl DestroyTask
- b _08071930
- .align 2, 0
-_0807190C: .4byte gTasks+0x8
-_08071910:
- ldrh r0, [r4, 0x4]
- adds r1, r0
- strh r1, [r4]
- lsls r0, 16
- cmp r0, 0
- blt _08071926
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, r2
- blt _08071930
- b _0807192E
-_08071926:
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, r2
- bgt _08071930
-_0807192E:
- strh r3, [r4]
-_08071930:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80718B8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/region_map.s b/asm/region_map.s
index fd681addf..7c040f7b8 100644
--- a/asm/region_map.s
+++ b/asm/region_map.s
@@ -3805,7 +3805,7 @@ _080C1D24:
ldrh r1, [r1]
str r1, [sp]
movs r1, 0x30
- bl sub_8071660
+ bl TintPalette_CustomTone
ldr r0, [r7]
adds r0, r5
movs r1, 0xD0
diff --git a/asm/trainer_card.s b/asm/trainer_card.s
index 234e19676..787a9748a 100644
--- a/asm/trainer_card.s
+++ b/asm/trainer_card.s
@@ -3283,7 +3283,7 @@ _0808AB50:
movs r1, 0x60
movs r2, 0
movs r3, 0
- bl sub_8071660
+ bl TintPalette_CustomTone
b _0808AB88
.align 2, 0
_0808AB64: .4byte 0x00000396
@@ -3297,7 +3297,7 @@ _0808AB68:
lsls r1, 1
str r1, [sp]
movs r1, 0x60
- bl sub_8071660
+ bl TintPalette_CustomTone
b _0808AB88
_0808AB80:
adds r0, r4, r5
diff --git a/data/palette.s b/data/palette.s
deleted file mode 100644
index fc479bbd6..000000000
--- a/data/palette.s
+++ /dev/null
@@ -1,18 +0,0 @@
- .section .rodata
- .align 2
-gUnknown_83AC960:: @ 83AC960
- .2byte 0xFFFF
- .align 2
- .4byte 0
- .2byte 0
- .byte 0, 0x20, 0
-
- .align 2
-gUnknown_83AC970:: @ 83AC970
- .byte 0, 0, 0, 0, 0
- .byte 5, 5, 5, 5, 5
- .byte 11, 11, 11, 11, 11
- .byte 16, 16, 16, 16, 16
- .byte 21, 21, 21, 21, 21
- .byte 27, 27, 27, 27, 27
- .byte 31, 31
diff --git a/include/fldeff.h b/include/fldeff.h
index e3f703947..25d5b8d43 100644
--- a/include/fldeff.h
+++ b/include/fldeff.h
@@ -7,6 +7,7 @@
gTasks[taskId].data[8] = (u32)func >> 16; \
gTasks[taskId].data[9] = (u32)func;
+extern u8 *gUnknown_203AAB0;
extern struct MapPosition gPlayerFacingPosition;
bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId);
diff --git a/include/graphics.h b/include/graphics.h
index a76607f40..5e133ee01 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -176,7 +176,7 @@ extern const u32 gTradeGba_Gfx[];
extern const u8 gUnknown_8E86240[];
extern const u8 gUnknown_8E86BE8[];
extern const u8 gUnknown_8E86D6C[];
-extern const u8 gUnknown_8E86F98[];
+extern const u32 gUnknown_8E86F98[];
// berry_fix_program
extern const u8 gBerryFixGameboy_Gfx[];
@@ -201,7 +201,7 @@ extern const u8 gBerryFixWindow_Pal[];
// item_pc
extern const u8 gItemPcTiles[];
-extern const u8 gItemPcBgPals[];
+extern const u32 gItemPcBgPals[];
extern const u8 gItemPcTilemap[];
// item_menu_icons
@@ -1001,8 +1001,8 @@ extern const u8 gCreditsAllRightsReservedGfxMap[];
// berry_pouch
extern const u32 gBerryPouchSpriteTiles[];
extern const u8 gBerryPouchBgGfx[];
-extern const u8 gBerryPouchBgPals[];
-extern const u8 gBerryPouchBgPal0FemaleOverride[];
+extern const u32 gBerryPouchBgPals[];
+extern const u32 gBerryPouchBgPal0FemaleOverride[];
extern const u32 gBerryPouchSpritePalette[];
extern const u8 gBerryPouchBg1Tilemap[];
diff --git a/include/palette.h b/include/palette.h
index 300236d1e..145d6e6b6 100644
--- a/include/palette.h
+++ b/include/palette.h
@@ -3,8 +3,6 @@
#include "global.h"
-#include "global.h"
-
#define gPaletteFade_selectedPalettes (gPaletteFade.multipurpose1) // normal and fast fade
#define gPaletteFade_blendCnt (gPaletteFade.multipurpose1) // hardware fade
#define gPaletteFade_delay (gPaletteFade.multipurpose2) // normal and hardware fade
@@ -13,10 +11,15 @@
#define PLTT_BUFFER_SIZE 0x200
#define PLTT_DECOMP_BUFFER_SIZE (PLTT_BUFFER_SIZE * 2)
+#define PALETTE_FADE_STATUS_DELAY 2
+#define PALETTE_FADE_STATUS_ACTIVE 1
+#define PALETTE_FADE_STATUS_DONE 0
+#define PALETTE_FADE_STATUS_LOADING 0xFF
+
enum
{
FAST_FADE_IN_FROM_WHITE,
- FAST_FADE_OUT_TO_WHTIE,
+ FAST_FADE_OUT_TO_WHITE,
FAST_FADE_IN_FROM_BLACK,
FAST_FADE_OUT_TO_BLACK,
};
@@ -39,44 +42,39 @@ struct PaletteFadeControl
u16 softwareFadeFinishing:1;
u16 objPaletteToggle:1;
u8 deltaY:4; // rate of change of blend coefficient
+ u32 unused;
};
extern struct PaletteFadeControl gPaletteFade;
extern u32 gPlttBufferTransferPending;
-extern u8 *gUnknown_203AAB0;
extern u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE];
extern u16 gPlttBufferFaded[PLTT_BUFFER_SIZE];
-void LoadCompressedPalette(const void *, u16, u16);
-void LoadPalette(const void *, u16, u16);
-void FillPalette(u16, u16, u16);
+void LoadCompressedPalette(const u32 *src, u16 offset, u16 size);
+void LoadPalette(const void *src, u16 offset, u16 size);
+void FillPalette(u16 value, u16 offset, u16 size);
void TransferPlttBuffer(void);
u8 UpdatePaletteFade(void);
void ResetPaletteFade(void);
void ReadPlttIntoBuffers(void);
-bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16);
-bool8 unref_sub_8073D3C(u32, u8, u8, u8, u16);
-void unref_sub_8073D84(u8, u32 *);
-void ResetPaletteStructByUid(u16);
-void ResetPaletteStruct(u8);
-void ResetPaletteFadeControl();
-void unref_sub_8074168(u16);
-void unref_sub_8074194(u16);
-void InvertPlttBuffer(u32);
-void TintPlttBuffer(u32, s8, s8, s8);
-void UnfadePlttBuffer(u32);
-void BeginFastPaletteFade(u8);
-void BeginHardwarePaletteFade(u8, u8, u8, u8, u8);
-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);
+bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor);
+void ResetPaletteFadeControl(void);
+void InvertPlttBuffer(u32 selectedPalettes);
+void TintPlttBuffer(u32 selectedPalettes, s8 r, s8 g, s8 b);
+void UnfadePlttBuffer(u32 selectedPalettes);
+void BeginFastPaletteFade(u8 submode);
+void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 shouldResetBlendRegisters);
+void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color);
+void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color);
+void TintPalette_GrayScale(u16 *palette, u16 count);
+void TintPalette_GrayScale2(u16 *palette, u16 count);
+void TintPalette_SepiaTone(u16 *palette, u16 count);
+void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone);
+void sub_80716F8(const u16 *src, u16 *dst, u16 count, u8 a4);
+void sub_80717A8(u32 a1, s8 a2, u8 a3, u8 a4, u16 a5, u8 a6, u8 a7);
+bool32 sub_807185C(u8 var);
void sub_8071898(void);
-
-extern struct PaletteFadeControl gPaletteFade;
+void ResetPaletteStructByUid(u16 a1);
+void ResetPaletteStruct(u8 paletteNum);
#endif // GUARD_PALETTE_H
diff --git a/ld_script.txt b/ld_script.txt
index fa7f1302b..a61f88d14 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -108,7 +108,7 @@ SECTIONS {
asm/field_tasks.o(.text);
asm/start_menu.o(.text);
src/tileset_anims.o(.text);
- asm/palette.o(.text);
+ src/palette.o(.text);
src/sound.o(.text);
asm/battle_anim.o(.text);
asm/battle_anim_mons.o(.text);
@@ -407,7 +407,7 @@ SECTIONS {
data/field_tasks.o(.rodata);
data/start_menu.o(.rodata);
data/tileset_anims.o(.rodata);
- data/palette.o(.rodata);
+ src/palette.o(.rodata);
src/sound.o(.rodata);
data/battle_anim.o(.rodata);
data/map_events.o(.rodata);
diff --git a/src/palette.c b/src/palette.c
new file mode 100644
index 000000000..6609c9baa
--- /dev/null
+++ b/src/palette.c
@@ -0,0 +1,989 @@
+#include "global.h"
+#include "palette.h"
+#include "util.h"
+#include "decompress.h"
+#include "gpu_regs.h"
+#include "task.h"
+
+enum
+{
+ NORMAL_FADE,
+ FAST_FADE,
+ HARDWARE_FADE,
+};
+
+#define NUM_PALETTE_STRUCTS 16
+
+// unused palette struct
+struct PaletteStructTemplate
+{
+ u16 uid;
+ u16 *src;
+ u16 pst_field_8_0:1;
+ u16 pst_field_8_1:9;
+ u16 size:5;
+ u16 pst_field_9_7:1;
+ u8 pst_field_A;
+ u8 srcCount:5;
+ u8 pst_field_B_5:3;
+ u8 pst_field_C;
+};
+
+struct PaletteStruct
+{
+ const struct PaletteStructTemplate *base;
+ u32 ps_field_4_0:1;
+ u16 ps_field_4_1:1;
+ u32 baseDestOffset:9;
+ u16 destOffset:10;
+ u16 srcIndex:7;
+ u8 ps_field_8;
+ u8 ps_field_9;
+};
+
+static void sub_8070790(struct PaletteStruct *, u32 *);
+static void sub_80708F4(struct PaletteStruct *, u32 *);
+static void sub_80709B4(struct PaletteStruct *);
+static u8 GetPaletteNumByUid(u16);
+static u8 UpdateNormalPaletteFade(void);
+static void BeginFastPaletteFadeInternal(u8);
+static u8 UpdateFastPaletteFade(void);
+static u8 UpdateHardwarePaletteFade(void);
+static void UpdateBlendRegisters(void);
+static bool8 IsSoftwarePaletteFadeFinishing(void);
+static void sub_80718B8(u8 taskId);
+
+ALIGNED(4) EWRAM_DATA u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE] = {0};
+ALIGNED(4) EWRAM_DATA u16 gPlttBufferFaded[PLTT_BUFFER_SIZE] = {0};
+static EWRAM_DATA struct PaletteStruct sPaletteStructs[NUM_PALETTE_STRUCTS] = {0};
+EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0};
+static EWRAM_DATA u32 sPlttBufferTransferPending = 0;
+EWRAM_DATA u8 gPaletteDecompressionBuffer[PLTT_DECOMP_BUFFER_SIZE] = {0};
+
+static const struct PaletteStructTemplate gDummyPaletteStructTemplate =
+{
+ .uid = 0xFFFF,
+ .pst_field_B_5 = 1
+};
+
+static const u8 sRoundedDownGrayscaleMap[] =
+{
+ 0, 0, 0, 0, 0,
+ 5, 5, 5, 5, 5,
+ 11, 11, 11, 11, 11,
+ 16, 16, 16, 16, 16,
+ 21, 21, 21, 21, 21,
+ 27, 27, 27, 27, 27,
+ 31, 31
+};
+
+void LoadCompressedPalette(const u32 *src, u16 offset, u16 size)
+{
+ LZDecompressWram(src, gPaletteDecompressionBuffer);
+ CpuCopy16(gPaletteDecompressionBuffer, gPlttBufferUnfaded + offset, size);
+ CpuCopy16(gPaletteDecompressionBuffer, gPlttBufferFaded + offset, size);
+}
+
+void LoadPalette(const void *src, u16 offset, u16 size)
+{
+ CpuCopy16(src, gPlttBufferUnfaded + offset, size);
+ CpuCopy16(src, gPlttBufferFaded + offset, size);
+}
+
+void FillPalette(u16 value, u16 offset, u16 size)
+{
+ CpuFill16(value, gPlttBufferUnfaded + offset, size);
+ CpuFill16(value, gPlttBufferFaded + offset, size);
+}
+
+void TransferPlttBuffer(void)
+{
+ if (!gPaletteFade.bufferTransferDisabled)
+ {
+ void *src = gPlttBufferFaded;
+ void *dest = (void *)PLTT;
+ DmaCopy16(3, src, dest, PLTT_SIZE);
+ sPlttBufferTransferPending = 0;
+ if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active)
+ UpdateBlendRegisters();
+ }
+}
+
+u8 UpdatePaletteFade(void)
+{
+ u8 result;
+ u8 dummy = 0;
+
+ if (sPlttBufferTransferPending)
+ return PALETTE_FADE_STATUS_LOADING;
+ if (gPaletteFade.mode == NORMAL_FADE)
+ result = UpdateNormalPaletteFade();
+ else if (gPaletteFade.mode == FAST_FADE)
+ result = UpdateFastPaletteFade();
+ else
+ result = UpdateHardwarePaletteFade();
+ sPlttBufferTransferPending = gPaletteFade.multipurpose1 | dummy;
+ return result;
+}
+
+void ResetPaletteFade(void)
+{
+ u8 i;
+
+ for (i = 0; i < 16; ++i)
+ ResetPaletteStruct(i);
+ ResetPaletteFadeControl();
+}
+
+void ReadPlttIntoBuffers(void)
+{
+ u16 i;
+ u16 *pltt = (u16 *)PLTT;
+
+ for (i = 0; i < PLTT_SIZE / 2; ++i)
+ {
+ gPlttBufferUnfaded[i] = pltt[i];
+ gPlttBufferFaded[i] = pltt[i];
+ }
+}
+
+bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor)
+{
+ u8 temp;
+ u16 color = blendColor;
+
+ if (gPaletteFade.active)
+ {
+ return FALSE;
+ }
+ else
+ {
+ gPaletteFade.deltaY = 2;
+ if (delay < 0)
+ {
+ gPaletteFade.deltaY += (delay * -1);
+ delay = 0;
+ }
+ gPaletteFade_selectedPalettes = selectedPalettes;
+ gPaletteFade.delayCounter = delay;
+ gPaletteFade_delay = delay;
+ gPaletteFade.y = startY;
+ gPaletteFade.targetY = targetY;
+ gPaletteFade.blendColor = color;
+ gPaletteFade.active = TRUE;
+ gPaletteFade.mode = NORMAL_FADE;
+ if (startY < targetY)
+ gPaletteFade.yDec = FALSE;
+ else
+ gPaletteFade.yDec = TRUE;
+ UpdatePaletteFade();
+ temp = gPaletteFade.bufferTransferDisabled;
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ CpuCopy32(gPlttBufferFaded, (void *)PLTT, PLTT_SIZE);
+ sPlttBufferTransferPending = 0;
+ if (gPaletteFade.mode == HARDWARE_FADE && gPaletteFade.active)
+ UpdateBlendRegisters();
+ gPaletteFade.bufferTransferDisabled = temp;
+ return TRUE;
+ }
+}
+
+// not used
+static bool8 sub_80706D0(u32 a1, u8 a2, u8 a3, u8 a4, u16 a5)
+{
+ ReadPlttIntoBuffers();
+ return BeginNormalPaletteFade(a1, a2, a3, a4, a5);
+}
+
+// not used
+static void sub_8070718(u8 a1, u32 *a2)
+{
+ u8 i;
+
+ for (i = 0; i < NUM_PALETTE_STRUCTS; ++i)
+ {
+ struct PaletteStruct *palstruct = &sPaletteStructs[i];
+
+ if (palstruct->ps_field_4_0)
+ {
+ if (palstruct->base->pst_field_8_0 == a1)
+ {
+ u8 val1 = palstruct->srcIndex;
+ u8 val2 = palstruct->base->srcCount;
+
+ if (val1 == val2)
+ {
+ sub_80709B4(palstruct);
+ if (!palstruct->ps_field_4_0)
+ continue;
+ }
+ if (palstruct->ps_field_8 == 0)
+ sub_8070790(palstruct, a2);
+ else
+ --palstruct->ps_field_8;
+ sub_80708F4(palstruct, a2);
+ }
+ }
+ }
+}
+
+// not used
+static void sub_8070790(struct PaletteStruct *a1, u32 *a2)
+{
+ s32 srcIndex;
+ s32 srcCount;
+ u8 i = 0;
+ u16 srcOffset = a1->srcIndex * a1->base->size;
+
+ if (!a1->base->pst_field_8_0)
+ {
+ while (i < a1->base->size)
+ {
+ gPlttBufferUnfaded[a1->destOffset] = a1->base->src[srcOffset];
+ gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset];
+ ++i;
+ ++a1->destOffset;
+ ++srcOffset;
+ }
+ }
+ else
+ {
+ while (i < a1->base->size)
+ {
+ gPlttBufferFaded[a1->destOffset] = a1->base->src[srcOffset];
+ ++i;
+ ++a1->destOffset;
+ ++srcOffset;
+ }
+ }
+ a1->destOffset = a1->baseDestOffset;
+ a1->ps_field_8 = a1->base->pst_field_A;
+ ++a1->srcIndex;
+ srcIndex = a1->srcIndex;
+ srcCount = a1->base->srcCount;
+ if (srcIndex >= srcCount)
+ {
+ if (a1->ps_field_9)
+ --a1->ps_field_9;
+ a1->srcIndex = 0;
+ }
+ *a2 |= 1 << (a1->baseDestOffset >> 4);
+}
+
+// not used
+static void sub_80708F4(struct PaletteStruct *a1, u32 *a2)
+{
+ if (gPaletteFade.active && ((1 << (a1->baseDestOffset >> 4)) & gPaletteFade_selectedPalettes))
+ {
+ if (!a1->base->pst_field_8_0)
+ {
+ if (gPaletteFade.delayCounter != gPaletteFade_delay)
+ BlendPalette(a1->baseDestOffset,
+ a1->base->size,
+ gPaletteFade.y,
+ gPaletteFade.blendColor);
+ }
+ else
+ {
+ if (!gPaletteFade.delayCounter)
+ {
+ if (a1->ps_field_8 != a1->base->pst_field_A)
+ {
+ u32 srcOffset = a1->srcIndex * a1->base->size;
+ u8 i;
+
+ for (i = 0; i < a1->base->size; ++i)
+ gPlttBufferFaded[a1->baseDestOffset + i] = a1->base->src[srcOffset + i];
+ }
+ }
+ }
+ }
+}
+
+// not used
+static void sub_80709B4(struct PaletteStruct *a1)
+{
+ if (!a1->ps_field_9)
+ {
+ s32 val = a1->base->pst_field_B_5;
+
+ if (!val)
+ {
+ a1->srcIndex = 0;
+ a1->ps_field_8 = a1->base->pst_field_A;
+ a1->ps_field_9 = a1->base->pst_field_C;
+ a1->destOffset = a1->baseDestOffset;
+ }
+ else
+ {
+ if (val < 0)
+ return;
+ if (val > 2)
+ return;
+ ResetPaletteStructByUid(a1->base->uid);
+ }
+ }
+ else
+ {
+ --a1->ps_field_9;
+ }
+}
+
+void ResetPaletteStructByUid(u16 a1)
+{
+ u8 paletteNum = GetPaletteNumByUid(a1);
+ if (paletteNum != 16)
+ ResetPaletteStruct(paletteNum);
+}
+
+void ResetPaletteStruct(u8 paletteNum)
+{
+ sPaletteStructs[paletteNum].base = &gDummyPaletteStructTemplate;
+ sPaletteStructs[paletteNum].ps_field_4_0 = 0;
+ sPaletteStructs[paletteNum].baseDestOffset = 0;
+ sPaletteStructs[paletteNum].destOffset = 0;
+ sPaletteStructs[paletteNum].srcIndex = 0;
+ sPaletteStructs[paletteNum].ps_field_4_1 = 0;
+ sPaletteStructs[paletteNum].ps_field_8 = 0;
+ sPaletteStructs[paletteNum].ps_field_9 = 0;
+}
+
+void ResetPaletteFadeControl(void)
+{
+ gPaletteFade.multipurpose1 = 0;
+ gPaletteFade.multipurpose2 = 0;
+ gPaletteFade.delayCounter = 0;
+ gPaletteFade.y = 0;
+ gPaletteFade.targetY = 0;
+ gPaletteFade.blendColor = 0;
+ gPaletteFade.active = FALSE;
+ gPaletteFade.multipurpose2 = 0; // assign same value twice
+ gPaletteFade.yDec = FALSE;
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ gPaletteFade.shouldResetBlendRegisters = FALSE;
+ gPaletteFade.hardwareFadeFinishing = FALSE;
+ gPaletteFade.softwareFadeFinishing = FALSE;
+ gPaletteFade.softwareFadeFinishingCounter = 0;
+ gPaletteFade.objPaletteToggle = 0;
+ gPaletteFade.deltaY = 2;
+}
+
+// not used
+static void sub_8070AFC(u16 uid)
+{
+ u8 paletteNum = GetPaletteNumByUid(uid);
+ if (paletteNum != 16)
+ sPaletteStructs[paletteNum].ps_field_4_1 = 1;
+}
+
+// not used
+static void sub_8070B28(u16 uid)
+{
+ u8 paletteNum = GetPaletteNumByUid(uid);
+ if (paletteNum != 16)
+ sPaletteStructs[paletteNum].ps_field_4_1 = 0;
+}
+
+// not used
+static u8 GetPaletteNumByUid(u16 uid)
+{
+ u8 i;
+
+ for (i = 0; i < NUM_PALETTE_STRUCTS; ++i)
+ if (sPaletteStructs[i].base->uid == uid)
+ return i;
+ return 16;
+}
+
+static u8 UpdateNormalPaletteFade(void)
+{
+ u16 paletteOffset;
+ u16 selectedPalettes;
+
+ if (!gPaletteFade.active)
+ return PALETTE_FADE_STATUS_DONE;
+ if (IsSoftwarePaletteFadeFinishing())
+ {
+ return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE;
+ }
+ else
+ {
+ if (!gPaletteFade.objPaletteToggle)
+ {
+ if (gPaletteFade.delayCounter < gPaletteFade_delay)
+ {
+ ++gPaletteFade.delayCounter;
+ return 2;
+ }
+ gPaletteFade.delayCounter = 0;
+ }
+ paletteOffset = 0;
+ if (!gPaletteFade.objPaletteToggle)
+ {
+ selectedPalettes = gPaletteFade_selectedPalettes;
+ }
+ else
+ {
+ selectedPalettes = gPaletteFade_selectedPalettes >> 16;
+ paletteOffset = 256;
+ }
+ while (selectedPalettes)
+ {
+ if (selectedPalettes & 1)
+ BlendPalette(paletteOffset,
+ 16,
+ gPaletteFade.y,
+ gPaletteFade.blendColor);
+ selectedPalettes >>= 1;
+ paletteOffset += 16;
+ }
+ gPaletteFade.objPaletteToggle ^= 1;
+ if (!gPaletteFade.objPaletteToggle)
+ {
+ if (gPaletteFade.y == gPaletteFade.targetY)
+ {
+ gPaletteFade_selectedPalettes = 0;
+ gPaletteFade.softwareFadeFinishing = TRUE;
+ }
+ else
+ {
+ s8 val;
+
+ if (!gPaletteFade.yDec)
+ {
+ val = gPaletteFade.y;
+ val += gPaletteFade.deltaY;
+ if (val > gPaletteFade.targetY)
+ val = gPaletteFade.targetY;
+ gPaletteFade.y = val;
+ }
+ else
+ {
+ val = gPaletteFade.y;
+ val -= gPaletteFade.deltaY;
+ if (val < gPaletteFade.targetY)
+ val = gPaletteFade.targetY;
+ gPaletteFade.y = val;
+ }
+ }
+ }
+ // gPaletteFade.active cannot change since the last time it was checked. So this
+ // is equivalent to `return PALETTE_FADE_STATUS_ACTIVE;`
+ return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE;
+ }
+}
+
+void InvertPlttBuffer(u32 selectedPalettes)
+{
+ u16 paletteOffset = 0;
+
+ while (selectedPalettes)
+ {
+ if (selectedPalettes & 1)
+ {
+ u8 i;
+
+ for (i = 0; i < 16; ++i)
+ gPlttBufferFaded[paletteOffset + i] = ~gPlttBufferFaded[paletteOffset + i];
+ }
+ selectedPalettes >>= 1;
+ paletteOffset += 16;
+ }
+}
+
+void TintPlttBuffer(u32 selectedPalettes, s8 r, s8 g, s8 b)
+{
+ u16 paletteOffset = 0;
+
+ while (selectedPalettes)
+ {
+ if (selectedPalettes & 1)
+ {
+ u8 i;
+
+ for (i = 0; i < 16; ++i)
+ {
+ struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[paletteOffset + i];
+
+ data->r += r;
+ data->g += g;
+ data->b += b;
+ }
+ }
+ selectedPalettes >>= 1;
+ paletteOffset += 16;
+ }
+}
+
+void UnfadePlttBuffer(u32 selectedPalettes)
+{
+ u16 paletteOffset = 0;
+
+ while (selectedPalettes)
+ {
+ if (selectedPalettes & 1)
+ {
+ u8 i;
+
+ for (i = 0; i < 16; ++i)
+ gPlttBufferFaded[paletteOffset + i] = gPlttBufferUnfaded[paletteOffset + i];
+ }
+ selectedPalettes >>= 1;
+ paletteOffset += 16;
+ }
+}
+
+void BeginFastPaletteFade(u8 submode)
+{
+ gPaletteFade.deltaY = 2;
+ BeginFastPaletteFadeInternal(submode);
+}
+
+static void BeginFastPaletteFadeInternal(u8 submode)
+{
+ gPaletteFade.y = 31;
+ gPaletteFade_submode = submode & 0x3F;
+ gPaletteFade.active = TRUE;
+ gPaletteFade.mode = FAST_FADE;
+ if (submode == FAST_FADE_IN_FROM_BLACK)
+ CpuFill16(RGB_BLACK, gPlttBufferFaded, PLTT_SIZE);
+ if (submode == FAST_FADE_IN_FROM_WHITE)
+ CpuFill16(RGB_WHITE, gPlttBufferFaded, PLTT_SIZE);
+ UpdatePaletteFade();
+}
+
+static u8 UpdateFastPaletteFade(void)
+{
+ u16 i;
+ u16 paletteOffsetStart, paletteOffsetEnd;
+ s8 r0, g0, b0, r, g, b;
+
+ if (!gPaletteFade.active)
+ return PALETTE_FADE_STATUS_DONE;
+ if (IsSoftwarePaletteFadeFinishing())
+ return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE;
+ if (gPaletteFade.objPaletteToggle)
+ {
+ paletteOffsetStart = 256;
+ paletteOffsetEnd = 512;
+ }
+ else
+ {
+ paletteOffsetStart = 0;
+ paletteOffsetEnd = 256;
+ }
+ switch (gPaletteFade_submode)
+ {
+ case FAST_FADE_IN_FROM_WHITE:
+ for (i = paletteOffsetStart; i < paletteOffsetEnd; ++i)
+ {
+ struct PlttData *unfaded;
+ struct PlttData *faded;
+
+ unfaded = (struct PlttData *)&gPlttBufferUnfaded[i];
+ r0 = unfaded->r;
+ g0 = unfaded->g;
+ b0 = unfaded->b;
+ faded = (struct PlttData *)&gPlttBufferFaded[i];
+ r = faded->r - 2;
+ g = faded->g - 2;
+ b = faded->b - 2;
+ if (r < r0)
+ r = r0;
+ if (g < g0)
+ g = g0;
+ if (b < b0)
+ b = b0;
+ gPlttBufferFaded[i] = r | (g << 5) | (b << 10);
+ }
+ break;
+ case FAST_FADE_OUT_TO_WHITE:
+ for (i = paletteOffsetStart; i < paletteOffsetEnd; ++i)
+ {
+ struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[i];
+
+ r = data->r + 2;
+ g = data->g + 2;
+ b = data->b + 2;
+ if (r > 31)
+ r = 31;
+ if (g > 31)
+ g = 31;
+ if (b > 31)
+ b = 31;
+ gPlttBufferFaded[i] = r | (g << 5) | (b << 10);
+ }
+ break;
+ case FAST_FADE_IN_FROM_BLACK:
+ for (i = paletteOffsetStart; i < paletteOffsetEnd; ++i)
+ {
+ struct PlttData *unfaded;
+ struct PlttData *faded;
+
+ unfaded = (struct PlttData *)&gPlttBufferUnfaded[i];
+ r0 = unfaded->r;
+ g0 = unfaded->g;
+ b0 = unfaded->b;
+ faded = (struct PlttData *)&gPlttBufferFaded[i];
+ r = faded->r + 2;
+ g = faded->g + 2;
+ b = faded->b + 2;
+ if (r > r0)
+ r = r0;
+ if (g > g0)
+ g = g0;
+ if (b > b0)
+ b = b0;
+ gPlttBufferFaded[i] = r | (g << 5) | (b << 10);
+ }
+ break;
+ case FAST_FADE_OUT_TO_BLACK:
+ for (i = paletteOffsetStart; i < paletteOffsetEnd; ++i)
+ {
+ struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[i];
+
+ r = data->r - 2;
+ g = data->g - 2;
+ b = data->b - 2;
+ if (r < 0)
+ r = 0;
+ if (g < 0)
+ g = 0;
+ if (b < 0)
+ b = 0;
+ gPlttBufferFaded[i] = r | (g << 5) | (b << 10);
+ }
+ }
+ gPaletteFade.objPaletteToggle ^= 1;
+ if (gPaletteFade.objPaletteToggle)
+ // gPaletteFade.active cannot change since the last time it was checked. So this
+ // is equivalent to `return PALETTE_FADE_STATUS_ACTIVE;`
+ return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE;
+ if (gPaletteFade.y - gPaletteFade.deltaY < 0)
+ gPaletteFade.y = 0;
+ else
+ gPaletteFade.y -= gPaletteFade.deltaY;
+ if (gPaletteFade.y == 0)
+ {
+ switch (gPaletteFade_submode)
+ {
+ case FAST_FADE_IN_FROM_WHITE:
+ case FAST_FADE_IN_FROM_BLACK:
+ CpuCopy32(gPlttBufferUnfaded, gPlttBufferFaded, PLTT_SIZE);
+ break;
+ case FAST_FADE_OUT_TO_WHITE:
+ CpuFill32(0xFFFFFFFF, gPlttBufferFaded, PLTT_SIZE);
+ break;
+ case FAST_FADE_OUT_TO_BLACK:
+ CpuFill32(0x00000000, gPlttBufferFaded, PLTT_SIZE);
+ break;
+ }
+ gPaletteFade.mode = NORMAL_FADE;
+ gPaletteFade.softwareFadeFinishing = TRUE;
+ }
+ // gPaletteFade.active cannot change since the last time it was checked. So this
+ // is equivalent to `return PALETTE_FADE_STATUS_ACTIVE;`
+ return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE;
+}
+
+void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 shouldResetBlendRegisters)
+{
+ gPaletteFade_blendCnt = blendCnt;
+ gPaletteFade.delayCounter = delay;
+ gPaletteFade_delay = delay;
+ gPaletteFade.y = y;
+ gPaletteFade.targetY = targetY;
+ gPaletteFade.active = TRUE;
+ gPaletteFade.mode = HARDWARE_FADE;
+ gPaletteFade.shouldResetBlendRegisters = shouldResetBlendRegisters & 1;
+ gPaletteFade.hardwareFadeFinishing = FALSE;
+ if (y < targetY)
+ gPaletteFade.yDec = FALSE;
+ else
+ gPaletteFade.yDec = TRUE;
+}
+
+static u8 UpdateHardwarePaletteFade(void)
+{
+ if (!gPaletteFade.active)
+ return PALETTE_FADE_STATUS_DONE;
+ if (gPaletteFade.delayCounter < gPaletteFade_delay)
+ {
+ ++gPaletteFade.delayCounter;
+ return PALETTE_FADE_STATUS_DELAY;
+ }
+ gPaletteFade.delayCounter = 0;
+ if (!gPaletteFade.yDec)
+ {
+ ++gPaletteFade.y;
+ if (gPaletteFade.y > gPaletteFade.targetY)
+ {
+ ++gPaletteFade.hardwareFadeFinishing;
+ --gPaletteFade.y;
+ }
+ }
+ else
+ {
+ if (gPaletteFade.y-- - 1 < gPaletteFade.targetY)
+ {
+ ++gPaletteFade.hardwareFadeFinishing;
+ ++gPaletteFade.y;
+ }
+ }
+
+ if (gPaletteFade.hardwareFadeFinishing)
+ {
+ if (gPaletteFade.shouldResetBlendRegisters)
+ {
+ gPaletteFade_blendCnt = 0;
+ gPaletteFade.y = 0;
+ }
+ gPaletteFade.shouldResetBlendRegisters = FALSE;
+ }
+ // gPaletteFade.active cannot change since the last time it was checked. So this
+ // is equivalent to `return PALETTE_FADE_STATUS_ACTIVE;`
+ return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE;
+}
+
+static void UpdateBlendRegisters(void)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, (u16)gPaletteFade_blendCnt);
+ SetGpuReg(REG_OFFSET_BLDY, gPaletteFade.y);
+ if (gPaletteFade.hardwareFadeFinishing)
+ {
+ gPaletteFade.hardwareFadeFinishing = FALSE;
+ gPaletteFade.mode = 0;
+ gPaletteFade_blendCnt = 0;
+ gPaletteFade.y = 0;
+ gPaletteFade.active = FALSE;
+ }
+}
+
+static bool8 IsSoftwarePaletteFadeFinishing(void)
+{
+ if (gPaletteFade.softwareFadeFinishing)
+ {
+ if (gPaletteFade.softwareFadeFinishingCounter == 4)
+ {
+ gPaletteFade.active = FALSE;
+ gPaletteFade.softwareFadeFinishing = FALSE;
+ gPaletteFade.softwareFadeFinishingCounter = 0;
+ }
+ else
+ {
+ ++gPaletteFade.softwareFadeFinishingCounter;
+ }
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color)
+{
+ u16 paletteOffset;
+
+ for (paletteOffset = 0; selectedPalettes; paletteOffset += 16)
+ {
+ if (selectedPalettes & 1)
+ BlendPalette(paletteOffset, 16, coeff, color);
+ selectedPalettes >>= 1;
+ }
+}
+
+void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color)
+{
+ // This copy is done via DMA in both RUBY and EMERALD
+ CpuFastCopy(gPlttBufferUnfaded, gPlttBufferFaded, 0x400);
+ BlendPalettes(selectedPalettes, coeff, color);
+}
+
+void TintPalette_GrayScale(u16 *palette, u16 count)
+{
+ s32 r, g, b, i;
+ u32 gray;
+
+ for (i = 0; i < count; ++i)
+ {
+ r = (*palette >> 0) & 0x1F;
+ g = (*palette >> 5) & 0x1F;
+ b = (*palette >> 10) & 0x1F;
+ gray = (r * Q_8_8(0.3) + g * Q_8_8(0.59) + b * Q_8_8(0.1133)) >> 8;
+ *palette++ = (gray << 10) | (gray << 5) | (gray << 0);
+ }
+}
+
+void TintPalette_GrayScale2(u16 *palette, u16 count)
+{
+ s32 r, g, b, i;
+ u32 gray;
+
+ for (i = 0; i < count; ++i)
+ {
+ r = (*palette >> 0) & 0x1F;
+ g = (*palette >> 5) & 0x1F;
+ b = (*palette >> 10) & 0x1F;
+ gray = (r * Q_8_8(0.3) + g * Q_8_8(0.59) + b * Q_8_8(0.1133)) >> 8;
+
+ if (gray > 0x1F)
+ gray = 0x1F;
+ gray = sRoundedDownGrayscaleMap[gray];
+ *palette++ = (gray << 10) | (gray << 5) | (gray << 0);
+ }
+}
+
+void TintPalette_SepiaTone(u16 *palette, u16 count)
+{
+ s32 r, g, b, i;
+ u32 gray;
+
+ for (i = 0; i < count; ++i)
+ {
+ r = (*palette >> 0) & 0x1F;
+ g = (*palette >> 5) & 0x1F;
+ b = (*palette >> 10) & 0x1F;
+ gray = (r * Q_8_8(0.3) + g * Q_8_8(0.59) + b * Q_8_8(0.1133)) >> 8;
+ r = (u16)((Q_8_8(1.2) * gray)) >> 8;
+ g = (u16)((Q_8_8(1.0) * gray)) >> 8;
+ b = (u16)((Q_8_8(0.94) * gray)) >> 8;
+ if (r > 31)
+ r = 31;
+ *palette++ = (b << 10) | (g << 5) | (r << 0);
+ }
+}
+
+void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone)
+{
+ s32 r, g, b, i;
+ u32 gray;
+
+ for (i = 0; i < count; ++i)
+ {
+ r = (*palette >> 0) & 0x1F;
+ g = (*palette >> 5) & 0x1F;
+ b = (*palette >> 10) & 0x1F;
+ gray = (r * Q_8_8(0.3) + g * Q_8_8(0.59) + b * Q_8_8(0.1133)) >> 8;
+ r = (u16)((rTone * gray)) >> 8;
+ g = (u16)((gTone * gray)) >> 8;
+ b = (u16)((bTone * gray)) >> 8;
+ if (r > 31)
+ r = 31;
+ if (g > 31)
+ g = 31;
+ if (b > 31)
+ b = 31;
+ *palette++ = (b << 10) | (g << 5) | (r << 0);
+ }
+}
+
+void sub_80716F8(const u16 *src, u16 *dst, u16 count, u8 a4)
+{
+ s32 r, g, b, i;
+ u32 gray;
+
+ if (!a4)
+ {
+ for (i = 0; i < count; ++i)
+ *dst++ = *src++;
+ }
+ else
+ {
+ for (i = 0; i < count; ++src, ++dst, ++i)
+ {
+ r = (*src >> 0) & 0x1F;
+ g = (*src >> 5) & 0x1F;
+ b = (*src >> 10) & 0x1F;
+ gray = (r * Q_8_8(0.3) + g * Q_8_8(0.59) + b * Q_8_8(0.1133)) >> 8;
+ r += (a4 * (gray - r) >> 4);
+ g += (a4 * (gray - g) >> 4);
+ b += (a4 * (gray - b) >> 4);
+ *dst = (b << 10) | (g << 5) | (r << 0);
+ }
+ }
+}
+
+void sub_80717A8(u32 a1, s8 a2, u8 a3, u8 a4, u16 a5, u8 a6, u8 a7)
+{
+ u8 taskId;
+
+ taskId = CreateTask(sub_80718B8, a6);
+ gTasks[taskId].data[0] = a3;
+ gTasks[taskId].data[1] = a4;
+ if (a2 >= 0)
+ {
+ gTasks[taskId].data[3] = a2;
+ gTasks[taskId].data[2] = 1;
+ }
+ else
+ {
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[2] = -a2 + 1;
+ }
+ if (a4 < a3)
+ gTasks[taskId].data[2] *= -1;
+ SetWordTaskArg(taskId, 5, a1);
+ gTasks[taskId].data[7] = a5;
+ gTasks[taskId].data[8] = a7;
+ gTasks[taskId].func(taskId);
+}
+
+bool32 sub_807185C(u8 var)
+{
+ s32 i;
+
+ for (i = 0; i < NUM_TASKS; ++i)
+ if (gTasks[i].isActive == TRUE
+ && gTasks[i].func == sub_80718B8
+ && gTasks[i].data[8] == var)
+ return TRUE;
+ return FALSE;
+}
+
+void sub_8071898(void)
+{
+ u8 taskId;
+
+ while (TRUE)
+ {
+ taskId = FindTaskIdByFunc(sub_80718B8);
+ if (taskId == TASK_NONE)
+ break;
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_80718B8(u8 taskId)
+{
+ u32 wordVar;
+ s16 *data;
+ s16 temp;
+
+ data = gTasks[taskId].data;
+ wordVar = GetWordTaskArg(taskId, 5);
+ if (++data[4] > data[3])
+ {
+ data[4] = 0;
+ BlendPalettes(wordVar, data[0], data[7]);
+ temp = data[1];
+ if (data[0] == temp)
+ {
+ DestroyTask(taskId);
+ }
+ else
+ {
+ data[0] += data[2];
+ if (data[2] >= 0)
+ {
+ if (data[0] < temp)
+ return;
+ }
+ else if (data[0] > temp)
+ {
+ return;
+ }
+ data[0] = temp;
+ }
+ }
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index c50347082..9acd767d0 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -661,24 +661,7 @@ gUnknown_2037104: @ 2037104
.space 0x4
.include "src/tileset_anims.o"
-
-gPlttBufferUnfaded: @ 20371F8
- .space 0x400
-
-gPlttBufferFaded: @ 20375F8
- .space 0x400
-
-gUnknown_20379F8: @ 20379F8
- .space 0xC0
-
-gPaletteFade: @ 2037AB8
- .space 0x10
-
-gUnknown_2037AC8: @ 2037AC8
- .space 0x4
-
-gUnknown_2037ACC: @ 2037ACC
- .space 0x400
+ .include "src/palette.o"
.include "src/sound.o"