summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/image_processing_effects.s3486
-rw-r--r--data/image_processing_effects.s2
-rw-r--r--ld_script.txt2
-rw-r--r--src/image_processing_effects.c1224
-rw-r--r--sym_common.txt33
5 files changed, 1228 insertions, 3519 deletions
diff --git a/asm/image_processing_effects.s b/asm/image_processing_effects.s
deleted file mode 100644
index 1f63bde6c..000000000
--- a/asm/image_processing_effects.s
+++ /dev/null
@@ -1,3486 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80C52D0
-sub_80C52D0: @ 80C52D0
- push {lr}
- ldr r2, _080C5318 @ =gUnknown_3005334
- ldr r1, [r0, 0x4]
- str r1, [r2]
- ldr r2, _080C531C @ =gUnknown_3005348
- ldrb r1, [r0, 0x1F]
- strb r1, [r2]
- ldr r2, _080C5320 @ =gUnknown_3005330
- ldrb r1, [r0, 0x19]
- strb r1, [r2]
- ldr r2, _080C5324 @ =gUnknown_3005344
- ldrb r1, [r0, 0x1A]
- strb r1, [r2]
- ldr r2, _080C5328 @ =gUnknown_3005340
- ldrb r1, [r0, 0x1B]
- strb r1, [r2]
- ldr r2, _080C532C @ =gUnknown_3005338
- ldrb r1, [r0, 0x1C]
- strb r1, [r2]
- ldr r2, _080C5330 @ =gUnknown_300534C
- ldrb r1, [r0, 0x1D]
- strb r1, [r2]
- ldr r2, _080C5334 @ =gUnknown_300533C
- ldrb r1, [r0, 0x1E]
- strb r1, [r2]
- ldrb r0, [r0]
- subs r0, 0x2
- cmp r0, 0x22
- bls _080C530C
- b _080C5458
-_080C530C:
- lsls r0, 2
- ldr r1, _080C5338 @ =_080C533C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080C5318: .4byte gUnknown_3005334
-_080C531C: .4byte gUnknown_3005348
-_080C5320: .4byte gUnknown_3005330
-_080C5324: .4byte gUnknown_3005344
-_080C5328: .4byte gUnknown_3005340
-_080C532C: .4byte gUnknown_3005338
-_080C5330: .4byte gUnknown_300534C
-_080C5334: .4byte gUnknown_300533C
-_080C5338: .4byte _080C533C
- .align 2, 0
-_080C533C:
- .4byte _080C53C8
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5428
- .4byte _080C5458
- .4byte _080C53CE
- .4byte _080C53D4
- .4byte _080C53E8
- .4byte _080C53FA
- .4byte _080C5458
- .4byte _080C5410
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5416
- .4byte _080C53F4
- .4byte _080C541C
- .4byte _080C5422
- .4byte _080C5458
- .4byte _080C5458
- .4byte _080C5434
-_080C53C8:
- bl sub_80C55D4
- b _080C5458
-_080C53CE:
- bl sub_80C568C
- b _080C5458
-_080C53D4:
- bl sub_80C5884
- ldr r0, _080C53E4 @ =gUnknown_3005348
- ldrb r0, [r0]
- bl sub_80C5748
- b _080C5458
- .align 2, 0
-_080C53E4: .4byte gUnknown_3005348
-_080C53E8:
- bl sub_80C5884
- bl sub_80C59D4
- bl sub_80C57EC
-_080C53F4:
- bl sub_80C59D4
- b _080C5458
-_080C53FA:
- bl sub_80C5884
- bl sub_80C5B9C
- bl sub_80C5B9C
- bl sub_80C5C44
- bl sub_80C57EC
- b _080C5458
-_080C5410:
- bl sub_80C5A6C
- b _080C5458
-_080C5416:
- bl sub_80C5884
- b _080C5458
-_080C541C:
- bl sub_80C5B9C
- b _080C5458
-_080C5422:
- bl sub_80C5C44
- b _080C5458
-_080C5428:
- bl sub_80C55F4
- movs r0, 0x3
- bl sub_80C545C
- b _080C5458
-_080C5434:
- bl sub_80C5884
- bl sub_80C5B9C
- bl sub_80C5C44
- bl sub_80C57EC
- bl sub_80C568C
- bl sub_80C568C
- movs r0, 0x2
- bl sub_80C545C
- movs r0, 0x4
- bl sub_80C5514
-_080C5458:
- pop {r0}
- bx r0
- thumb_func_end sub_80C52D0
-
- thumb_func_start sub_80C545C
-sub_80C545C: @ 80C545C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r7, r0, 24
- movs r2, 0
- ldr r0, _080C54FC @ =gUnknown_3005338
- mov r8, r0
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080C54EE
- ldr r1, _080C5500 @ =gUnknown_3005340
- mov r12, r1
- ldr r3, _080C5504 @ =gUnknown_300534C
- mov r10, r3
- ldr r0, _080C5508 @ =gUnknown_3005330
- mov r9, r0
-_080C5482:
- ldr r1, _080C550C @ =gUnknown_3005344
- ldrb r0, [r1]
- adds r0, r2
- mov r3, r10
- ldrb r1, [r3]
- muls r0, r1
- lsls r0, 1
- ldr r3, _080C5510 @ =gUnknown_3005334
- ldr r1, [r3]
- adds r1, r0
- mov r3, r9
- ldrb r0, [r3]
- lsls r0, 1
- adds r3, r1, r0
- movs r4, 0
- adds r5, r2, 0x1
- mov r0, r12
- ldrb r0, [r0]
- cmp r4, r0
- bcs _080C54E2
- movs r6, 0x80
- lsls r6, 8
-_080C54AE:
- ldrh r1, [r3]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _080C54D2
- movs r0, 0x1F
- ands r0, r1
- adds r0, r7
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1F
- bls _080C54C8
- movs r2, 0x1F
-_080C54C8:
- lsls r0, r2, 10
- lsls r1, r2, 5
- orrs r0, r1
- orrs r0, r2
- strh r0, [r3]
-_080C54D2:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- adds r3, 0x2
- mov r1, r12
- ldrb r1, [r1]
- cmp r4, r1
- bcc _080C54AE
-_080C54E2:
- lsls r0, r5, 24
- lsrs r2, r0, 24
- mov r3, r8
- ldrb r3, [r3]
- cmp r2, r3
- bcc _080C5482
-_080C54EE:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C54FC: .4byte gUnknown_3005338
-_080C5500: .4byte gUnknown_3005340
-_080C5504: .4byte gUnknown_300534C
-_080C5508: .4byte gUnknown_3005330
-_080C550C: .4byte gUnknown_3005344
-_080C5510: .4byte gUnknown_3005334
- thumb_func_end sub_80C545C
-
- thumb_func_start sub_80C5514
-sub_80C5514: @ 80C5514
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r2, 0
- ldr r0, _080C55BC @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080C55AC
- ldr r1, _080C55C0 @ =gUnknown_3005340
- mov r10, r1
-_080C5532:
- ldr r3, _080C55C4 @ =gUnknown_3005344
- ldrb r0, [r3]
- adds r0, r2
- ldr r3, _080C55C8 @ =gUnknown_300534C
- ldrb r1, [r3]
- muls r0, r1
- lsls r0, 1
- ldr r3, _080C55CC @ =gUnknown_3005334
- ldr r1, [r3]
- adds r1, r0
- ldr r3, _080C55D0 @ =gUnknown_3005330
- ldrb r0, [r3]
- lsls r0, 1
- adds r3, r1, r0
- movs r5, 0
- adds r7, r2, 0x1
- mov r0, r10
- ldrb r0, [r0]
- cmp r5, r0
- bcs _080C55A0
- movs r1, 0x80
- lsls r1, 8
- mov r9, r1
- movs r0, 0x1F
- mov r12, r0
- mov r1, r8
- subs r6, r0, r1
-_080C5568:
- ldrh r1, [r3]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- bne _080C5590
- movs r4, 0x1F
- mov r2, r12
- ands r2, r1
- cmp r2, r6
- ble _080C5586
- mov r1, r8
- lsrs r0, r1, 1
- subs r0, r4, r0
- lsls r0, 24
- lsrs r2, r0, 24
-_080C5586:
- lsls r0, r2, 10
- lsls r1, r2, 5
- orrs r0, r1
- orrs r0, r2
- strh r0, [r3]
-_080C5590:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r3, 0x2
- mov r0, r10
- ldrb r0, [r0]
- cmp r5, r0
- bcc _080C5568
-_080C55A0:
- lsls r0, r7, 24
- lsrs r2, r0, 24
- ldr r1, _080C55BC @ =gUnknown_3005338
- ldrb r1, [r1]
- cmp r2, r1
- bcc _080C5532
-_080C55AC:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C55BC: .4byte gUnknown_3005338
-_080C55C0: .4byte gUnknown_3005340
-_080C55C4: .4byte gUnknown_3005344
-_080C55C8: .4byte gUnknown_300534C
-_080C55CC: .4byte gUnknown_3005334
-_080C55D0: .4byte gUnknown_3005330
- thumb_func_end sub_80C5514
-
- thumb_func_start sub_80C55D4
-sub_80C55D4: @ 80C55D4
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _080C55F0 @ =0x00000c7f
-_080C55DA:
- lsls r0, r4, 16
- lsrs r0, 16
- bl sub_80C5CF8
- adds r4, 0x1
- cmp r4, r5
- bls _080C55DA
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C55F0: .4byte 0x00000c7f
- thumb_func_end sub_80C55D4
-
- thumb_func_start sub_80C55F4
-sub_80C55F4: @ 80C55F4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- movs r2, 0
- ldr r0, _080C5674 @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080C5666
- ldr r0, _080C5678 @ =gUnknown_3005334
- mov r8, r0
- ldr r3, _080C567C @ =gUnknown_3005340
-_080C560C:
- ldr r0, _080C5680 @ =gUnknown_3005344
- ldrb r1, [r0]
- adds r1, r2
- ldr r0, _080C5684 @ =gUnknown_300534C
- ldrb r0, [r0]
- muls r0, r1
- lsls r0, 1
- mov r4, r8
- ldr r1, [r4]
- adds r1, r0
- ldr r0, _080C5688 @ =gUnknown_3005330
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r1, r0
- movs r5, 0
- adds r6, r2, 0x1
- ldrb r0, [r3]
- cmp r5, r0
- bcs _080C565A
- movs r0, 0x80
- lsls r0, 8
- adds r7, r0, 0
-_080C5638:
- ldrh r0, [r4]
- ands r0, r7
- cmp r0, 0
- bne _080C564C
- adds r0, r4, 0
- str r3, [sp]
- bl sub_80C5ECC
- strh r0, [r4]
- ldr r3, [sp]
-_080C564C:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, 0x2
- ldrb r0, [r3]
- cmp r5, r0
- bcc _080C5638
-_080C565A:
- lsls r0, r6, 24
- lsrs r2, r0, 24
- ldr r0, _080C5674 @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcc _080C560C
-_080C5666:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C5674: .4byte gUnknown_3005338
-_080C5678: .4byte gUnknown_3005334
-_080C567C: .4byte gUnknown_3005340
-_080C5680: .4byte gUnknown_3005344
-_080C5684: .4byte gUnknown_300534C
-_080C5688: .4byte gUnknown_3005330
- thumb_func_end sub_80C55F4
-
- thumb_func_start sub_80C568C
-sub_80C568C: @ 80C568C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- movs r2, 0
- ldr r0, _080C5730 @ =gUnknown_3005340
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080C5722
- ldr r0, _080C5734 @ =gUnknown_3005334
- mov r8, r0
- ldr r3, _080C5738 @ =gUnknown_300534C
-_080C56A4:
- ldr r0, _080C573C @ =gUnknown_3005344
- ldrb r1, [r0]
- ldrb r0, [r3]
- muls r0, r1
- lsls r0, 1
- mov r4, r8
- ldr r1, [r4]
- adds r1, r0
- ldr r0, _080C5740 @ =gUnknown_3005330
- ldrb r0, [r0]
- adds r0, r2
- lsls r0, 1
- adds r4, r1, r0
- ldrh r1, [r4]
- mov r0, sp
- strh r1, [r0]
- movs r5, 0x1
- ldrb r0, [r3]
- lsls r0, 1
- adds r4, r0
- ldr r0, _080C5744 @ =gUnknown_3005338
- ldrb r0, [r0]
- subs r0, 0x1
- adds r7, r2, 0x1
- cmp r5, r0
- bge _080C5716
- ldr r6, _080C5738 @ =gUnknown_300534C
-_080C56DA:
- ldrh r0, [r4]
- movs r2, 0x80
- lsls r2, 8
- adds r1, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _080C5700
- ldrb r2, [r6]
- lsls r2, 1
- adds r2, r4, r2
- mov r0, sp
- adds r1, r4, 0
- str r3, [sp, 0x4]
- bl sub_80C61BC
- strh r0, [r4]
- mov r1, sp
- strh r0, [r1]
- ldr r3, [sp, 0x4]
-_080C5700:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r0, [r6]
- lsls r0, 1
- adds r4, r0
- ldr r0, _080C5744 @ =gUnknown_3005338
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r5, r0
- blt _080C56DA
-_080C5716:
- lsls r0, r7, 24
- lsrs r2, r0, 24
- ldr r0, _080C5730 @ =gUnknown_3005340
- ldrb r0, [r0]
- cmp r2, r0
- bcc _080C56A4
-_080C5722:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C5730: .4byte gUnknown_3005340
-_080C5734: .4byte gUnknown_3005334
-_080C5738: .4byte gUnknown_300534C
-_080C573C: .4byte gUnknown_3005344
-_080C5740: .4byte gUnknown_3005330
-_080C5744: .4byte gUnknown_3005338
- thumb_func_end sub_80C568C
-
- thumb_func_start sub_80C5748
-sub_80C5748: @ 80C5748
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r2, 0
- ldr r0, _080C57D4 @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080C57C4
- ldr r0, _080C57D8 @ =gUnknown_3005334
- mov r9, r0
- ldr r3, _080C57DC @ =gUnknown_3005340
-_080C5768:
- ldr r0, _080C57E0 @ =gUnknown_3005344
- ldrb r1, [r0]
- adds r1, r2
- ldr r0, _080C57E4 @ =gUnknown_300534C
- ldrb r0, [r0]
- muls r0, r1
- lsls r0, 1
- mov r4, r9
- ldr r1, [r4]
- adds r1, r0
- ldr r0, _080C57E8 @ =gUnknown_3005330
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r1, r0
- movs r5, 0
- adds r6, r2, 0x1
- ldrb r0, [r3]
- cmp r5, r0
- bcs _080C57B8
- movs r0, 0x80
- lsls r0, 8
- adds r7, r0, 0
-_080C5794:
- ldrh r0, [r4]
- ands r0, r7
- cmp r0, 0
- bne _080C57AA
- adds r0, r4, 0
- mov r1, r8
- str r3, [sp]
- bl sub_80C5F00
- strh r0, [r4]
- ldr r3, [sp]
-_080C57AA:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, 0x2
- ldrb r0, [r3]
- cmp r5, r0
- bcc _080C5794
-_080C57B8:
- lsls r0, r6, 24
- lsrs r2, r0, 24
- ldr r0, _080C57D4 @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcc _080C5768
-_080C57C4:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C57D4: .4byte gUnknown_3005338
-_080C57D8: .4byte gUnknown_3005334
-_080C57DC: .4byte gUnknown_3005340
-_080C57E0: .4byte gUnknown_3005344
-_080C57E4: .4byte gUnknown_300534C
-_080C57E8: .4byte gUnknown_3005330
- thumb_func_end sub_80C5748
-
- thumb_func_start sub_80C57EC
-sub_80C57EC: @ 80C57EC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- movs r2, 0
- ldr r0, _080C586C @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080C585E
- ldr r0, _080C5870 @ =gUnknown_3005334
- mov r8, r0
- ldr r3, _080C5874 @ =gUnknown_3005340
-_080C5804:
- ldr r0, _080C5878 @ =gUnknown_3005344
- ldrb r1, [r0]
- adds r1, r2
- ldr r0, _080C587C @ =gUnknown_300534C
- ldrb r0, [r0]
- muls r0, r1
- lsls r0, 1
- mov r4, r8
- ldr r1, [r4]
- adds r1, r0
- ldr r0, _080C5880 @ =gUnknown_3005330
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r1, r0
- movs r5, 0
- adds r6, r2, 0x1
- ldrb r0, [r3]
- cmp r5, r0
- bcs _080C5852
- movs r0, 0x80
- lsls r0, 8
- adds r7, r0, 0
-_080C5830:
- ldrh r0, [r4]
- ands r0, r7
- cmp r0, 0
- bne _080C5844
- adds r0, r4, 0
- str r3, [sp]
- bl sub_80C600C
- strh r0, [r4]
- ldr r3, [sp]
-_080C5844:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, 0x2
- ldrb r0, [r3]
- cmp r5, r0
- bcc _080C5830
-_080C5852:
- lsls r0, r6, 24
- lsrs r2, r0, 24
- ldr r0, _080C586C @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcc _080C5804
-_080C585E:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C586C: .4byte gUnknown_3005338
-_080C5870: .4byte gUnknown_3005334
-_080C5874: .4byte gUnknown_3005340
-_080C5878: .4byte gUnknown_3005344
-_080C587C: .4byte gUnknown_300534C
-_080C5880: .4byte gUnknown_3005330
- thumb_func_end sub_80C57EC
-
- thumb_func_start sub_80C5884
-sub_80C5884: @ 80C5884
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r7, 0
- ldr r0, _080C59BC @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r7, r0
- bcs _080C5910
- ldr r0, _080C59C0 @ =gUnknown_3005334
- mov r8, r0
-_080C589A:
- ldr r0, _080C59C4 @ =gUnknown_3005344
- ldrb r1, [r0]
- adds r1, r7
- ldr r0, _080C59C8 @ =gUnknown_300534C
- ldrb r0, [r0]
- muls r0, r1
- lsls r0, 1
- mov r2, r8
- ldr r1, [r2]
- adds r1, r0
- ldr r0, _080C59CC @ =gUnknown_3005330
- ldrb r0, [r0]
- lsls r0, 1
- adds r5, r1, r0
- adds r4, r5, 0x2
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80C603C
- strh r0, [r5]
- movs r6, 0x1
- adds r5, r4, 0
- ldr r0, _080C59D0 @ =gUnknown_3005340
- ldrb r0, [r0]
- subs r0, 0x1
- adds r7, 0x1
- cmp r6, r0
- bge _080C58FA
-_080C58D2:
- adds r4, r5, 0x2
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80C603C
- strh r0, [r5]
- subs r1, r5, 0x2
- adds r0, r5, 0
- bl sub_80C603C
- strh r0, [r5]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r5, r4, 0
- ldr r0, _080C59D0 @ =gUnknown_3005340
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r6, r0
- blt _080C58D2
-_080C58FA:
- subs r1, r5, 0x2
- adds r0, r5, 0
- bl sub_80C603C
- strh r0, [r5]
- lsls r0, r7, 24
- lsrs r7, r0, 24
- ldr r0, _080C59BC @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r7, r0
- bcc _080C589A
-_080C5910:
- movs r6, 0
- ldr r0, _080C59D0 @ =gUnknown_3005340
- ldrb r0, [r0]
- cmp r6, r0
- bcs _080C59B0
- ldr r3, _080C59C0 @ =gUnknown_3005334
- mov r9, r3
- ldr r0, _080C59C8 @ =gUnknown_300534C
- mov r8, r0
-_080C5922:
- ldr r0, _080C59C4 @ =gUnknown_3005344
- ldrb r0, [r0]
- mov r2, r8
- ldrb r1, [r2]
- muls r0, r1
- lsls r0, 1
- mov r3, r9
- ldr r2, [r3]
- adds r2, r0
- ldr r0, _080C59CC @ =gUnknown_3005330
- ldrb r0, [r0]
- adds r0, r6
- lsls r0, 1
- adds r5, r2, r0
- lsls r1, 1
- adds r1, r5, r1
- adds r0, r5, 0
- bl sub_80C603C
- strh r0, [r5]
- movs r7, 0x1
- mov r1, r8
- ldrb r0, [r1]
- lsls r0, 1
- adds r5, r0
- ldr r0, _080C59BC @ =gUnknown_3005338
- ldrb r0, [r0]
- subs r0, 0x1
- adds r6, 0x1
- cmp r7, r0
- bge _080C5994
- ldr r4, _080C59C8 @ =gUnknown_300534C
-_080C5962:
- ldrb r1, [r4]
- lsls r1, 1
- adds r1, r5, r1
- adds r0, r5, 0
- bl sub_80C603C
- strh r0, [r5]
- ldrb r1, [r4]
- lsls r1, 1
- subs r1, r5, r1
- adds r0, r5, 0
- bl sub_80C603C
- strh r0, [r5]
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- ldrb r0, [r4]
- lsls r0, 1
- adds r5, r0
- ldr r0, _080C59BC @ =gUnknown_3005338
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r7, r0
- blt _080C5962
-_080C5994:
- mov r2, r8
- ldrb r1, [r2]
- lsls r1, 1
- subs r1, r5, r1
- adds r0, r5, 0
- bl sub_80C603C
- strh r0, [r5]
- lsls r0, r6, 24
- lsrs r6, r0, 24
- ldr r0, _080C59D0 @ =gUnknown_3005340
- ldrb r0, [r0]
- cmp r6, r0
- bcc _080C5922
-_080C59B0:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C59BC: .4byte gUnknown_3005338
-_080C59C0: .4byte gUnknown_3005334
-_080C59C4: .4byte gUnknown_3005344
-_080C59C8: .4byte gUnknown_300534C
-_080C59CC: .4byte gUnknown_3005330
-_080C59D0: .4byte gUnknown_3005340
- thumb_func_end sub_80C5884
-
- thumb_func_start sub_80C59D4
-sub_80C59D4: @ 80C59D4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- movs r2, 0
- ldr r0, _080C5A54 @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080C5A46
- ldr r0, _080C5A58 @ =gUnknown_3005334
- mov r8, r0
- ldr r3, _080C5A5C @ =gUnknown_3005340
-_080C59EC:
- ldr r0, _080C5A60 @ =gUnknown_3005344
- ldrb r1, [r0]
- adds r1, r2
- ldr r0, _080C5A64 @ =gUnknown_300534C
- ldrb r0, [r0]
- muls r0, r1
- lsls r0, 1
- mov r4, r8
- ldr r1, [r4]
- adds r1, r0
- ldr r0, _080C5A68 @ =gUnknown_3005330
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r1, r0
- movs r5, 0
- adds r6, r2, 0x1
- ldrb r0, [r3]
- cmp r5, r0
- bcs _080C5A3A
- movs r0, 0x80
- lsls r0, 8
- adds r7, r0, 0
-_080C5A18:
- ldrh r0, [r4]
- ands r0, r7
- cmp r0, 0
- bne _080C5A2C
- adds r0, r4, 0
- str r3, [sp]
- bl sub_80C606C
- strh r0, [r4]
- ldr r3, [sp]
-_080C5A2C:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, 0x2
- ldrb r0, [r3]
- cmp r5, r0
- bcc _080C5A18
-_080C5A3A:
- lsls r0, r6, 24
- lsrs r2, r0, 24
- ldr r0, _080C5A54 @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcc _080C59EC
-_080C5A46:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C5A54: .4byte gUnknown_3005338
-_080C5A58: .4byte gUnknown_3005334
-_080C5A5C: .4byte gUnknown_3005340
-_080C5A60: .4byte gUnknown_3005344
-_080C5A64: .4byte gUnknown_300534C
-_080C5A68: .4byte gUnknown_3005330
- thumb_func_end sub_80C59D4
-
- thumb_func_start sub_80C5A6C
-sub_80C5A6C: @ 80C5A6C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r0, _080C5B98 @ =gUnknown_3005334
- ldr r4, [r0]
- movs r6, 0
- movs r0, 0x80
- lsls r0, 8
- adds r5, r0, 0
-_080C5A84:
- movs r7, 0
-_080C5A86:
- ldrh r0, [r4]
- ands r0, r5
- cmp r0, 0
- bne _080C5A96
- adds r0, r4, 0
- bl sub_80C606C
- strh r0, [r4]
-_080C5A96:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- adds r4, 0x2
- cmp r7, 0x3F
- bls _080C5A86
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x3F
- bls _080C5A84
- movs r7, 0
- ldr r1, _080C5B98 @ =gUnknown_3005334
- mov r10, r1
- mov r3, sp
- movs r2, 0x80
- lsls r2, 8
- mov r9, r2
-_080C5ABA:
- lsls r0, r7, 1
- mov r2, r10
- ldr r1, [r2]
- adds r4, r1, r0
- ldrh r1, [r4]
- strh r1, [r3]
- mov r1, r9
- strh r1, [r4]
- movs r6, 0x1
- adds r4, 0x80
- adds r5, r0, 0
-_080C5AD0:
- ldrh r0, [r4]
- movs r2, 0x80
- lsls r2, 8
- ands r0, r2
- cmp r0, 0
- bne _080C5AF0
- adds r2, r4, 0
- adds r2, 0x80
- mov r0, sp
- adds r1, r4, 0
- str r3, [sp, 0x4]
- bl sub_80C62DC
- strh r0, [r4]
- ldr r3, [sp, 0x4]
- strh r0, [r3]
-_080C5AF0:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r4, 0x80
- cmp r6, 0x3E
- bls _080C5AD0
- mov r0, r9
- strh r0, [r4]
- mov r1, r10
- ldr r0, [r1]
- adds r4, r0, r5
- ldrh r0, [r4]
- strh r0, [r3]
- mov r2, r9
- strh r2, [r4]
- movs r6, 0x1
- adds r4, 0x80
- movs r0, 0x80
- lsls r0, 8
- mov r8, r0
-_080C5B18:
- ldrh r0, [r4]
- mov r1, r8
- ands r0, r1
- adds r5, r4, 0
- adds r5, 0x80
- cmp r0, 0
- bne _080C5B38
- mov r0, sp
- adds r1, r4, 0
- adds r2, r5, 0
- str r3, [sp, 0x4]
- bl sub_80C62DC
- strh r0, [r4]
- ldr r3, [sp, 0x4]
- strh r0, [r3]
-_080C5B38:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r4, r5, 0
- cmp r6, 0x3E
- bls _080C5B18
- mov r2, r9
- strh r2, [r4]
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0x3F
- bls _080C5ABA
- ldr r0, _080C5B98 @ =gUnknown_3005334
- ldr r4, [r0]
- movs r6, 0
- movs r0, 0x80
- lsls r0, 8
- mov r8, r0
-_080C5B5E:
- movs r7, 0
- adds r5, r6, 0x1
-_080C5B62:
- ldrh r0, [r4]
- mov r1, r8
- ands r0, r1
- cmp r0, 0
- bne _080C5B74
- adds r0, r4, 0
- bl sub_80C606C
- strh r0, [r4]
-_080C5B74:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- adds r4, 0x2
- cmp r7, 0x3F
- bls _080C5B62
- lsls r0, r5, 24
- lsrs r6, r0, 24
- cmp r6, 0x3F
- bls _080C5B5E
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C5B98: .4byte gUnknown_3005334
- thumb_func_end sub_80C5A6C
-
- thumb_func_start sub_80C5B9C
-sub_80C5B9C: @ 80C5B9C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- movs r2, 0
- ldr r0, _080C5C2C @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080C5C1E
- ldr r0, _080C5C30 @ =gUnknown_3005334
- mov r8, r0
-_080C5BB2:
- ldr r0, _080C5C34 @ =gUnknown_3005344
- ldrb r1, [r0]
- adds r1, r2
- ldr r0, _080C5C38 @ =gUnknown_300534C
- ldrb r0, [r0]
- muls r0, r1
- lsls r0, 1
- mov r3, r8
- ldr r1, [r3]
- adds r1, r0
- ldr r0, _080C5C3C @ =gUnknown_3005330
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r1, r0
- ldrh r1, [r4]
- mov r0, sp
- strh r1, [r0]
- movs r5, 0x1
- adds r4, 0x2
- ldr r0, _080C5C40 @ =gUnknown_3005340
- ldrb r0, [r0]
- subs r0, 0x1
- adds r6, r2, 0x1
- cmp r5, r0
- bge _080C5C12
- movs r0, 0x80
- lsls r0, 8
- adds r7, r0, 0
-_080C5BEA:
- ldrh r0, [r4]
- ands r0, r7
- cmp r0, 0
- bne _080C5C00
- mov r0, sp
- adds r1, r4, 0
- bl sub_80C6098
- strh r0, [r4]
- mov r1, sp
- strh r0, [r1]
-_080C5C00:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, 0x2
- ldr r0, _080C5C40 @ =gUnknown_3005340
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r5, r0
- blt _080C5BEA
-_080C5C12:
- lsls r0, r6, 24
- lsrs r2, r0, 24
- ldr r0, _080C5C2C @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcc _080C5BB2
-_080C5C1E:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C5C2C: .4byte gUnknown_3005338
-_080C5C30: .4byte gUnknown_3005334
-_080C5C34: .4byte gUnknown_3005344
-_080C5C38: .4byte gUnknown_300534C
-_080C5C3C: .4byte gUnknown_3005330
-_080C5C40: .4byte gUnknown_3005340
- thumb_func_end sub_80C5B9C
-
- thumb_func_start sub_80C5C44
-sub_80C5C44: @ 80C5C44
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- movs r2, 0
- ldr r0, _080C5CE0 @ =gUnknown_3005340
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080C5CD2
- ldr r0, _080C5CE4 @ =gUnknown_3005334
- mov r8, r0
- ldr r7, _080C5CE8 @ =gUnknown_300534C
-_080C5C5C:
- ldr r0, _080C5CEC @ =gUnknown_3005344
- ldrb r1, [r0]
- ldrb r0, [r7]
- muls r0, r1
- lsls r0, 1
- mov r3, r8
- ldr r1, [r3]
- adds r1, r0
- ldr r0, _080C5CF0 @ =gUnknown_3005330
- ldrb r0, [r0]
- adds r0, r2
- lsls r0, 1
- adds r4, r1, r0
- ldrh r1, [r4]
- mov r0, sp
- strh r1, [r0]
- movs r5, 0x1
- ldrb r0, [r7]
- lsls r0, 1
- adds r4, r0
- ldr r0, _080C5CF4 @ =gUnknown_3005338
- ldrb r0, [r0]
- subs r0, 0x1
- adds r6, r2, 0x1
- cmp r5, r0
- bge _080C5CC6
- movs r0, 0x80
- lsls r0, 8
- adds r2, r0, 0
-_080C5C96:
- ldrh r0, [r4]
- ands r0, r2
- cmp r0, 0
- bne _080C5CB0
- mov r0, sp
- adds r1, r4, 0
- str r2, [sp, 0x4]
- bl sub_80C6098
- strh r0, [r4]
- mov r1, sp
- strh r0, [r1]
- ldr r2, [sp, 0x4]
-_080C5CB0:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r0, [r7]
- lsls r0, 1
- adds r4, r0
- ldr r0, _080C5CF4 @ =gUnknown_3005338
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r5, r0
- blt _080C5C96
-_080C5CC6:
- lsls r0, r6, 24
- lsrs r2, r0, 24
- ldr r0, _080C5CE0 @ =gUnknown_3005340
- ldrb r0, [r0]
- cmp r2, r0
- bcc _080C5C5C
-_080C5CD2:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C5CE0: .4byte gUnknown_3005340
-_080C5CE4: .4byte gUnknown_3005334
-_080C5CE8: .4byte gUnknown_300534C
-_080C5CEC: .4byte gUnknown_3005344
-_080C5CF0: .4byte gUnknown_3005330
-_080C5CF4: .4byte gUnknown_3005338
- thumb_func_end sub_80C5C44
-
- thumb_func_start sub_80C5CF8
-sub_80C5CF8: @ 80C5CF8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x20
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- mov r2, sp
- ldr r3, _080C5D64 @ =gUnknown_83F3024
- lsls r1, r0, 1
- add r1, r10
- adds r0, r1, r3
- ldrb r0, [r0]
- strb r0, [r2]
- adds r0, r3, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- strb r0, [r2, 0x1]
- mov r5, sp
- adds r0, r3, 0x2
- adds r1, r0
- ldrb r4, [r1]
- lsls r2, r4, 24
- lsrs r1, r2, 27
- movs r0, 0x7
- ands r1, r0
- strh r1, [r5, 0x2]
- lsrs r2, 25
- mov r9, r2
- movs r0, 0x3
- ands r2, r0
- mov r9, r2
- movs r5, 0x1
- ands r5, r4
- movs r4, 0x1
- mov r8, r4
- cmp r8, r1
- bcs _080C5DAA
- mov r3, sp
-_080C5D4A:
- cmp r5, 0
- bne _080C5D68
- mov r0, r8
- lsls r2, r0, 2
- mov r4, sp
- adds r1, r4, r2
- ldrb r0, [r3]
- mov r4, r8
- subs r0, r4
- strb r0, [r1]
- ldrb r0, [r3, 0x1]
- add r0, r8
- b _080C5D7A
- .align 2, 0
-_080C5D64: .4byte gUnknown_83F3024
-_080C5D68:
- mov r0, r8
- lsls r2, r0, 2
- mov r4, sp
- adds r1, r4, r2
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r1]
- ldrb r0, [r3, 0x1]
- subs r0, 0x1
-_080C5D7A:
- strb r0, [r1, 0x1]
- add r2, sp
- ldrb r0, [r2]
- cmp r0, 0x3F
- bhi _080C5D8A
- ldrb r0, [r2, 0x1]
- cmp r0, 0x3F
- bls _080C5D92
-_080C5D8A:
- mov r0, r8
- subs r0, 0x1
- strh r0, [r3, 0x2]
- b _080C5DAA
-_080C5D92:
- ldrh r0, [r3, 0x2]
- mov r1, r8
- subs r0, r1
- strh r0, [r2, 0x2]
- mov r0, r8
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldrh r0, [r3, 0x2]
- cmp r8, r0
- bcc _080C5D4A
-_080C5DAA:
- movs r2, 0
- mov r8, r2
- mov r0, sp
- ldrh r0, [r0, 0x2]
- cmp r8, r0
- bcc _080C5DB8
- b _080C5EBA
-_080C5DB8:
- movs r3, 0x1F
-_080C5DBA:
- ldr r1, _080C5E18 @ =gUnknown_3005334
- mov r4, r8
- lsls r0, r4, 2
- mov r2, sp
- adds r6, r2, r0
- ldrb r0, [r6, 0x1]
- lsls r0, 7
- ldr r1, [r1]
- adds r1, r0
- ldrb r0, [r6]
- lsls r0, 1
- adds r2, r1, r0
- ldrh r1, [r2]
- movs r4, 0x80
- lsls r4, 8
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- bne _080C5EA6
- movs r7, 0x1F
- ands r7, r1
- lsls r0, r1, 16
- lsrs r5, r0, 21
- ands r5, r3
- lsrs r4, r0, 26
- ands r4, r3
- mov r0, r9
- cmp r0, 0
- blt _080C5E9C
- cmp r0, 0x1
- ble _080C5E1C
- cmp r0, 0x3
- bgt _080C5E9C
- ldrh r0, [r6, 0x2]
- adds r1, r7, r0
- lsls r1, 16
- lsrs r7, r1, 16
- adds r1, r5, r0
- lsls r1, 16
- lsrs r5, r1, 16
- adds r0, r4, r0
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r7, 0x1F
- bls _080C5E90
- movs r7, 0x1F
- b _080C5E90
- .align 2, 0
-_080C5E18: .4byte gUnknown_3005334
-_080C5E1C:
- mov r1, r10
- lsls r0, r1, 1
- add r0, r10
- ldr r1, _080C5E50 @ =gUnknown_83F3024
- adds r1, 0x2
- adds r0, r1
- ldrb r0, [r0]
- lsrs r0, 3
- movs r1, 0x7
- ands r0, r1
- movs r1, 0x3
- str r2, [sp, 0x18]
- str r3, [sp, 0x1C]
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [sp, 0x18]
- ldr r3, [sp, 0x1C]
- cmp r0, 0x1
- beq _080C5E6C
- cmp r0, 0x1
- bgt _080C5E54
- cmp r0, 0
- beq _080C5E5A
- b _080C5E9C
- .align 2, 0
-_080C5E50: .4byte gUnknown_83F3024
-_080C5E54:
- cmp r0, 0x2
- beq _080C5E7E
- b _080C5E9C
-_080C5E5A:
- ldrh r0, [r6, 0x2]
- cmp r7, r0
- bcc _080C5E68
- subs r0, r7, r0
- lsls r0, 16
- lsrs r7, r0, 16
- b _080C5E9C
-_080C5E68:
- movs r7, 0
- b _080C5E9C
-_080C5E6C:
- ldrh r0, [r6, 0x2]
- cmp r5, r0
- bcc _080C5E7A
- subs r0, r5, r0
- lsls r0, 16
- lsrs r5, r0, 16
- b _080C5E9C
-_080C5E7A:
- movs r5, 0
- b _080C5E9C
-_080C5E7E:
- ldrh r0, [r6, 0x2]
- cmp r4, r0
- bcc _080C5E8C
- subs r0, r4, r0
- lsls r0, 16
- lsrs r4, r0, 16
- b _080C5E9C
-_080C5E8C:
- movs r4, 0
- b _080C5E9C
-_080C5E90:
- cmp r5, 0x1F
- bls _080C5E96
- movs r5, 0x1F
-_080C5E96:
- cmp r4, 0x1F
- bls _080C5E9C
- movs r4, 0x1F
-_080C5E9C:
- lsls r0, r4, 10
- lsls r1, r5, 5
- orrs r0, r1
- orrs r7, r0
- strh r7, [r2]
-_080C5EA6:
- mov r0, r8
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- mov r0, sp
- ldrh r0, [r0, 0x2]
- cmp r8, r0
- bcs _080C5EBA
- b _080C5DBA
-_080C5EBA:
- add sp, 0x20
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80C5CF8
-
- thumb_func_start sub_80C5ECC
-sub_80C5ECC: @ 80C5ECC
- push {lr}
- ldrh r1, [r0]
- movs r3, 0x1F
- movs r0, 0x1F
- ands r0, r1
- lsls r1, 16
- lsrs r2, r1, 21
- ands r2, r3
- lsrs r1, 26
- ands r1, r3
- adds r0, r2
- adds r0, r1
- movs r1, 0x3
- bl __divsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- lsls r0, r1, 10
- lsls r2, r1, 5
- orrs r0, r2
- orrs r0, r1
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end sub_80C5ECC
-
- thumb_func_start sub_80C5F00
-sub_80C5F00: @ 80C5F00
- push {r4,lr}
- lsls r1, 24
- lsrs r4, r1, 24
- ldrh r0, [r0]
- movs r2, 0x1F
- movs r1, 0x1F
- ands r1, r0
- lsls r0, 16
- lsrs r3, r0, 21
- ands r3, r2
- lsrs r0, 26
- ands r0, r2
- cmp r1, 0x10
- bhi _080C5F30
- cmp r3, 0x10
- bhi _080C5F30
- cmp r0, 0x10
- bhi _080C5F30
- adds r0, r4, 0
- bl sub_80C5F3C
- lsls r0, 16
- lsrs r0, 16
- b _080C5F32
-_080C5F30:
- ldr r0, _080C5F38 @ =0x00007fff
-_080C5F32:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080C5F38: .4byte 0x00007fff
- thumb_func_end sub_80C5F00
-
- thumb_func_start sub_80C5F3C
-sub_80C5F3C: @ 80C5F3C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- mov r8, r0
- movs r6, 0
- movs r7, 0
- adds r0, r4, 0
- movs r1, 0x6
- bl __udivsi3
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r4, 0
- movs r1, 0x6
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- bhi _080C5FF4
- lsls r0, 2
- ldr r1, _080C5F80 @ =_080C5F84
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080C5F80: .4byte _080C5F84
- .align 2, 0
-_080C5F84:
- .4byte _080C5F9C
- .4byte _080C5FAC
- .4byte _080C5FBC
- .4byte _080C5FCA
- .4byte _080C5FD8
- .4byte _080C5FE6
-_080C5F9C:
- movs r0, 0x15
- subs r0, r5
- lsls r0, 16
- lsrs r6, r0, 16
- adds r7, r6, 0
- movs r1, 0
- mov r8, r1
- b _080C5FF4
-_080C5FAC:
- movs r7, 0
- movs r0, 0x15
- subs r0, r5
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- mov r6, r8
- b _080C5FF4
-_080C5FBC:
- movs r0, 0x15
- subs r0, r5
- lsls r0, 16
- lsrs r7, r0, 16
- movs r6, 0
- mov r8, r7
- b _080C5FF4
-_080C5FCA:
- movs r7, 0
- movs r6, 0
- movs r0, 0x17
- subs r0, r5
- lsls r0, 16
- lsrs r0, 16
- b _080C5FF2
-_080C5FD8:
- movs r0, 0x17
- subs r0, r5
- lsls r0, 16
- lsrs r7, r0, 16
- movs r6, 0
- mov r8, r6
- b _080C5FF4
-_080C5FE6:
- movs r7, 0
- movs r0, 0x17
- subs r0, r5
- lsls r0, 16
- lsrs r6, r0, 16
- movs r0, 0
-_080C5FF2:
- mov r8, r0
-_080C5FF4:
- lsls r0, r7, 10
- lsls r1, r6, 5
- orrs r0, r1
- mov r1, r8
- orrs r1, r0
- lsls r0, r1, 16
- lsrs r0, 16
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80C5F3C
-
- thumb_func_start sub_80C600C
-sub_80C600C: @ 80C600C
- push {lr}
- ldrh r0, [r0]
- movs r2, 0x1F
- movs r1, 0x1F
- ands r1, r0
- lsls r0, 16
- lsrs r3, r0, 21
- ands r3, r2
- lsrs r0, 26
- ands r0, r2
- cmp r1, 0x10
- bhi _080C6030
- cmp r3, 0x10
- bhi _080C6030
- cmp r0, 0x10
- bhi _080C6030
- movs r0, 0
- b _080C6032
-_080C6030:
- ldr r0, _080C6038 @ =0x00007fff
-_080C6032:
- pop {r1}
- bx r1
- .align 2, 0
-_080C6038: .4byte 0x00007fff
- thumb_func_end sub_80C600C
-
- thumb_func_start sub_80C603C
-sub_80C603C: @ 80C603C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r3, [r4]
- cmp r3, 0
- beq _080C6064
- movs r2, 0x80
- lsls r2, 8
- adds r0, r2, 0
- ands r0, r3
- cmp r0, 0
- beq _080C6056
- adds r0, r2, 0
- b _080C6066
-_080C6056:
- ldrh r1, [r1]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _080C6064
- ldrh r0, [r4]
- b _080C6066
-_080C6064:
- movs r0, 0
-_080C6066:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80C603C
-
- thumb_func_start sub_80C606C
-sub_80C606C: @ 80C606C
- push {r4,lr}
- ldrh r1, [r0]
- movs r0, 0x1F
- movs r3, 0x1F
- ands r3, r1
- lsls r1, 16
- lsrs r2, r1, 21
- lsrs r1, 26
- subs r3, r0, r3
- adds r4, r0, 0
- bics r4, r2
- adds r2, r4, 0
- bics r0, r1
- lsls r0, 10
- lsls r2, 5
- orrs r0, r2
- orrs r0, r3
- lsls r0, 16
- lsrs r0, 16
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80C606C
-
- thumb_func_start sub_80C6098
-sub_80C6098: @ 80C6098
- push {r4-r7,lr}
- sub sp, 0x14
- adds r7, r1, 0
- ldrh r4, [r0]
- ldrh r5, [r7]
- lsls r6, r4, 16
- lsls r0, r5, 16
- mov r12, r0
- cmp r4, r5
- beq _080C610A
- mov r2, sp
- movs r3, 0x1F
- movs r1, 0x1F
- adds r0, r1, 0
- ands r0, r4
- strh r0, [r2]
- lsrs r0, r6, 21
- ands r0, r3
- strh r0, [r2, 0x2]
- lsrs r0, r6, 26
- ands r0, r3
- strh r0, [r2, 0x4]
- mov r0, sp
- ands r1, r5
- strh r1, [r0, 0x6]
- mov r1, sp
- mov r2, r12
- lsrs r0, r2, 21
- ands r0, r3
- strh r0, [r1, 0x8]
- lsrs r0, r2, 26
- ands r0, r3
- strh r0, [r1, 0xA]
- mov r0, sp
- ldrh r0, [r0]
- cmp r0, 0x19
- bls _080C60F2
- mov r0, sp
- ldrh r0, [r0, 0x2]
- cmp r0, 0x19
- bls _080C60F2
- mov r0, sp
- ldrh r0, [r0, 0x4]
- cmp r0, 0x19
- bhi _080C610A
-_080C60F2:
- mov r0, sp
- ldrh r0, [r0, 0x6]
- cmp r0, 0x19
- bls _080C610E
- mov r0, sp
- ldrh r0, [r0, 0x8]
- cmp r0, 0x19
- bls _080C610E
- mov r0, sp
- ldrh r0, [r0, 0xA]
- cmp r0, 0x19
- bls _080C610E
-_080C610A:
- ldrh r0, [r7]
- b _080C61B4
-_080C610E:
- movs r4, 0
- add r6, sp, 0xC
- mov r7, sp
- adds r7, 0x6
- adds r5, r6, 0
-_080C6118:
- lsls r2, r4, 1
- mov r1, sp
- adds r0, r1, r2
- adds r1, r7, r2
- ldrh r3, [r0]
- ldrh r0, [r1]
- cmp r3, r0
- bls _080C612E
- adds r1, r5, r2
- subs r0, r3, r0
- b _080C6132
-_080C612E:
- adds r1, r5, r2
- subs r0, r3
-_080C6132:
- strh r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x2
- bls _080C6118
- adds r1, r6, 0
- ldrh r0, [r1, 0x2]
- ldrh r3, [r1]
- cmp r3, r0
- bcc _080C6158
- ldrh r2, [r1, 0x4]
- cmp r3, r2
- bcc _080C6152
- adds r2, r3, 0
- b _080C616C
-_080C6152:
- cmp r0, r2
- bcs _080C615E
- b _080C6166
-_080C6158:
- ldrh r2, [r1, 0x4]
- cmp r0, r2
- bcc _080C6162
-_080C615E:
- ldrh r2, [r1, 0x2]
- b _080C616C
-_080C6162:
- cmp r2, r3
- bcc _080C616A
-_080C6166:
- ldrh r2, [r1, 0x4]
- b _080C616C
-_080C616A:
- ldrh r2, [r6]
-_080C616C:
- mov r0, sp
- ldrh r1, [r0, 0x6]
- lsrs r0, r2, 1
- movs r6, 0x1F
- subs r6, r0
- adds r0, r1, 0
- muls r0, r6
- movs r1, 0x1F
- bl __divsi3
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- mov r0, sp
- ldrh r0, [r0, 0x8]
- muls r0, r6
- movs r1, 0x1F
- bl __divsi3
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, sp
- ldrh r0, [r0, 0xA]
- muls r0, r6
- movs r1, 0x1F
- bl __divsi3
- lsls r0, 16
- lsrs r0, 6
- lsls r4, 5
- orrs r0, r4
- orrs r5, r0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r5, 0
-_080C61B4:
- add sp, 0x14
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80C6098
-
- thumb_func_start sub_80C61BC
-sub_80C61BC: @ 80C61BC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- adds r3, r0, 0
- mov r10, r1
- str r2, [sp]
- ldrh r1, [r3]
- mov r0, r10
- ldrh r0, [r0]
- cmp r1, r0
- bne _080C61E4
- ldrh r0, [r2]
- cmp r0, r1
- bne _080C61E4
- mov r1, r10
- ldrh r0, [r1]
- b _080C62CC
-_080C61E4:
- mov r2, r10
- ldrh r0, [r2]
- movs r1, 0x1F
- mov r9, r1
- movs r4, 0x1F
- adds r5, r4, 0
- ands r5, r0
- lsls r0, 16
- lsrs r2, r0, 21
- mov r1, r9
- ands r1, r2
- mov r8, r1
- lsrs r0, 26
- mov r2, r9
- ands r2, r0
- str r2, [sp, 0x4]
- ldrh r2, [r3]
- adds r0, r4, 0
- ands r0, r2
- lsls r2, 16
- lsrs r1, r2, 21
- mov r3, r9
- ands r1, r3
- adds r0, r1
- lsrs r2, 26
- ands r2, r3
- adds r0, r2
- movs r1, 0x3
- bl __divsi3
- lsls r0, 16
- lsrs r7, r0, 16
- mov r1, r8
- adds r0, r5, r1
- ldr r2, [sp, 0x4]
- adds r0, r2
- movs r1, 0x3
- bl __divsi3
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r3, [sp]
- ldrh r1, [r3]
- ands r4, r1
- lsls r1, 16
- lsrs r0, r1, 21
- mov r2, r9
- ands r0, r2
- adds r4, r0
- lsrs r1, 26
- ands r1, r2
- adds r4, r1
- adds r0, r4, 0
- movs r1, 0x3
- bl __divsi3
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r7, r6
- bne _080C6266
- cmp r1, r6
- bne _080C6266
- mov r3, r10
- ldrh r0, [r3]
- b _080C62CC
-_080C6266:
- cmp r7, r6
- bls _080C626E
- subs r0, r7, r6
- b _080C6270
-_080C626E:
- subs r0, r6, r7
-_080C6270:
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r1, r6
- bls _080C627C
- subs r0, r1, r6
- b _080C627E
-_080C627C:
- subs r0, r6, r1
-_080C627E:
- lsls r0, 16
- lsrs r0, 16
- cmp r2, r0
- bcc _080C6288
- adds r0, r2, 0
-_080C6288:
- lsrs r0, 1
- movs r4, 0x1F
- subs r4, r0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- muls r0, r4
- movs r1, 0x1F
- bl __divsi3
- lsls r0, 16
- lsrs r5, r0, 16
- mov r0, r8
- muls r0, r4
- movs r1, 0x1F
- bl __divsi3
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r1, [sp, 0x4]
- adds r0, r1, 0
- muls r0, r4
- movs r1, 0x1F
- bl __divsi3
- lsls r0, 16
- lsrs r0, 6
- mov r2, r8
- lsls r1, r2, 5
- orrs r0, r1
- orrs r5, r0
- lsls r0, r5, 16
- lsrs r0, 16
-_080C62CC:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80C61BC
-
- thumb_func_start sub_80C62DC
-sub_80C62DC: @ 80C62DC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- adds r3, r0, 0
- mov r10, r1
- str r2, [sp]
- ldrh r1, [r3]
- mov r0, r10
- ldrh r0, [r0]
- cmp r1, r0
- bne _080C6304
- ldrh r0, [r2]
- cmp r0, r1
- bne _080C6304
- mov r1, r10
- ldrh r0, [r1]
- b _080C63EA
-_080C6304:
- mov r2, r10
- ldrh r0, [r2]
- movs r1, 0x1F
- mov r9, r1
- movs r4, 0x1F
- adds r5, r4, 0
- ands r5, r0
- lsls r0, 16
- lsrs r2, r0, 21
- mov r1, r9
- ands r1, r2
- mov r8, r1
- lsrs r0, 26
- mov r2, r9
- ands r2, r0
- str r2, [sp, 0x4]
- ldrh r2, [r3]
- adds r0, r4, 0
- ands r0, r2
- lsls r2, 16
- lsrs r1, r2, 21
- mov r3, r9
- ands r1, r3
- adds r0, r1
- lsrs r2, 26
- ands r2, r3
- adds r0, r2
- movs r1, 0x3
- bl __divsi3
- lsls r0, 16
- lsrs r7, r0, 16
- mov r1, r8
- adds r0, r5, r1
- ldr r2, [sp, 0x4]
- adds r0, r2
- movs r1, 0x3
- bl __divsi3
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r3, [sp]
- ldrh r1, [r3]
- ands r4, r1
- lsls r1, 16
- lsrs r0, r1, 21
- mov r2, r9
- ands r0, r2
- adds r4, r0
- lsrs r1, 26
- ands r1, r2
- adds r4, r1
- adds r0, r4, 0
- movs r1, 0x3
- bl __divsi3
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r7, r6
- bne _080C6386
- cmp r1, r6
- bne _080C6386
- mov r3, r10
- ldrh r0, [r3]
- b _080C63EA
-_080C6386:
- cmp r7, r6
- bls _080C638E
- subs r0, r7, r6
- b _080C6390
-_080C638E:
- subs r0, r6, r7
-_080C6390:
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r1, r6
- bls _080C639C
- subs r0, r1, r6
- b _080C639E
-_080C639C:
- subs r0, r6, r1
-_080C639E:
- lsls r0, 16
- lsrs r0, 16
- cmp r2, r0
- bcc _080C63A8
- adds r0, r2, 0
-_080C63A8:
- movs r4, 0x1F
- subs r4, r0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- muls r0, r4
- movs r1, 0x1F
- bl __divsi3
- lsls r0, 16
- lsrs r5, r0, 16
- mov r0, r8
- muls r0, r4
- movs r1, 0x1F
- bl __divsi3
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r1, [sp, 0x4]
- adds r0, r1, 0
- muls r0, r4
- movs r1, 0x1F
- bl __divsi3
- lsls r0, 16
- lsrs r0, 6
- mov r2, r8
- lsls r1, r2, 5
- orrs r0, r1
- orrs r5, r0
- lsls r0, r5, 16
- lsrs r0, 16
-_080C63EA:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80C62DC
-
- thumb_func_start sub_80C63FC
-sub_80C63FC: @ 80C63FC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- ldrb r1, [r0, 0x1D]
- lsrs r5, r1, 3
- ldrb r1, [r0, 0x1E]
- lsrs r1, 3
- str r1, [sp, 0x8]
- ldr r1, [r0, 0x4]
- str r1, [sp]
- ldr r2, [r0, 0x10]
- str r2, [sp, 0x4]
- ldrh r0, [r0, 0x16]
- cmp r0, 0x2
- bne _080C64AC
- movs r1, 0
- ldr r0, [sp, 0x8]
- cmp r1, r0
- bcc _080C642A
- b _080C6538
-_080C642A:
- movs r0, 0
- adds r2, r1, 0x1
- mov r10, r2
- cmp r0, r5
- bcs _080C649E
- adds r2, r1, 0
- muls r2, r5
- mov r9, r2
- lsls r1, 3
- mov r8, r1
-_080C643E:
- movs r4, 0
- lsls r6, r0, 4
- adds r7, r0, 0x1
- add r0, r9
- lsls r0, 6
- ldr r1, [sp, 0x4]
- adds r1, r0
- mov r12, r1
-_080C644E:
- lsls r0, r4, 3
- mov r2, r12
- adds r3, r2, r0
- mov r1, r8
- adds r0, r1, r4
- lsls r0, 3
- muls r0, r5
- lsls r0, 1
- ldr r2, [sp]
- adds r0, r2, r0
- adds r2, r0, r6
- ldrh r0, [r2, 0x2]
- lsls r0, 8
- ldrh r1, [r2]
- orrs r0, r1
- strh r0, [r3]
- ldrh r0, [r2, 0x6]
- lsls r0, 8
- ldrh r1, [r2, 0x4]
- orrs r0, r1
- strh r0, [r3, 0x2]
- ldrh r0, [r2, 0xA]
- lsls r0, 8
- ldrh r1, [r2, 0x8]
- orrs r0, r1
- strh r0, [r3, 0x4]
- ldrh r0, [r2, 0xE]
- lsls r0, 8
- ldrh r1, [r2, 0xC]
- orrs r0, r1
- strh r0, [r3, 0x6]
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x7
- bls _080C644E
- lsls r0, r7, 16
- lsrs r0, 16
- cmp r0, r5
- bcc _080C643E
-_080C649E:
- mov r1, r10
- lsls r0, r1, 16
- lsrs r1, r0, 16
- ldr r2, [sp, 0x8]
- cmp r1, r2
- bcc _080C642A
- b _080C6538
-_080C64AC:
- movs r1, 0
- ldr r0, [sp, 0x8]
- cmp r1, r0
- bcs _080C6538
-_080C64B4:
- movs r0, 0
- adds r2, r1, 0x1
- mov r10, r2
- cmp r0, r5
- bcs _080C652C
- adds r2, r1, 0
- muls r2, r5
- mov r9, r2
- lsls r1, 3
- mov r8, r1
-_080C64C8:
- movs r4, 0
- lsls r6, r0, 4
- adds r7, r0, 0x1
- add r0, r9
- lsls r0, 5
- ldr r1, [sp, 0x4]
- adds r1, r0
- mov r12, r1
-_080C64D8:
- lsls r0, r4, 2
- mov r2, r12
- adds r3, r2, r0
- mov r1, r8
- adds r0, r1, r4
- lsls r0, 3
- muls r0, r5
- lsls r0, 1
- ldr r2, [sp]
- adds r0, r2, r0
- adds r2, r0, r6
- ldrh r1, [r2, 0x2]
- lsls r1, 4
- ldrh r0, [r2]
- orrs r1, r0
- ldrh r0, [r2, 0x4]
- lsls r0, 8
- orrs r1, r0
- ldrh r0, [r2, 0x6]
- lsls r0, 12
- orrs r1, r0
- strh r1, [r3]
- ldrh r1, [r2, 0xA]
- lsls r1, 4
- ldrh r0, [r2, 0x8]
- orrs r1, r0
- ldrh r0, [r2, 0xC]
- lsls r0, 8
- orrs r1, r0
- ldrh r0, [r2, 0xE]
- lsls r0, 12
- orrs r1, r0
- strh r1, [r3, 0x2]
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x7
- bls _080C64D8
- lsls r0, r7, 16
- lsrs r0, 16
- cmp r0, r5
- bcc _080C64C8
-_080C652C:
- mov r1, r10
- lsls r0, r1, 16
- lsrs r1, r0, 16
- ldr r2, [sp, 0x8]
- cmp r1, r2
- bcc _080C64B4
-_080C6538:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80C63FC
-
- thumb_func_start sub_80C6548
-sub_80C6548: @ 80C6548
- push {lr}
- ldr r2, _080C6598 @ =gUnknown_3005354
- ldrb r1, [r0, 0x18]
- lsls r1, 4
- strh r1, [r2]
- ldr r3, _080C659C @ =gUnknown_3005350
- ldrh r2, [r2]
- lsls r2, 1
- ldr r1, [r0, 0x8]
- adds r1, r2
- str r1, [r3]
- ldr r2, _080C65A0 @ =gUnknown_3005334
- ldr r1, [r0, 0x4]
- str r1, [r2]
- ldr r2, _080C65A4 @ =gUnknown_3005330
- ldrb r1, [r0, 0x19]
- strb r1, [r2]
- ldr r2, _080C65A8 @ =gUnknown_3005344
- ldrb r1, [r0, 0x1A]
- strb r1, [r2]
- ldr r2, _080C65AC @ =gUnknown_3005340
- ldrb r1, [r0, 0x1B]
- strb r1, [r2]
- ldr r2, _080C65B0 @ =gUnknown_3005338
- ldrb r1, [r0, 0x1C]
- strb r1, [r2]
- ldr r2, _080C65B4 @ =gUnknown_300534C
- ldrb r1, [r0, 0x1D]
- strb r1, [r2]
- ldr r2, _080C65B8 @ =gUnknown_300533C
- ldrb r1, [r0, 0x1E]
- strb r1, [r2]
- ldrh r0, [r0, 0x14]
- cmp r0, 0x5
- bhi _080C660E
- lsls r0, 2
- ldr r1, _080C65BC @ =_080C65C0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080C6598: .4byte gUnknown_3005354
-_080C659C: .4byte gUnknown_3005350
-_080C65A0: .4byte gUnknown_3005334
-_080C65A4: .4byte gUnknown_3005330
-_080C65A8: .4byte gUnknown_3005344
-_080C65AC: .4byte gUnknown_3005340
-_080C65B0: .4byte gUnknown_3005338
-_080C65B4: .4byte gUnknown_300534C
-_080C65B8: .4byte gUnknown_300533C
-_080C65BC: .4byte _080C65C0
- .align 2, 0
-_080C65C0:
- .4byte _080C65D8
- .4byte _080C65E0
- .4byte _080C65E8
- .4byte _080C65F2
- .4byte _080C65FC
- .4byte _080C6606
-_080C65D8:
- movs r0, 0
- bl sub_80C6748
- b _080C660E
-_080C65E0:
- movs r0, 0x1
- bl sub_80C6748
- b _080C660E
-_080C65E8:
- bl sub_80C6614
- bl sub_80C6AB8
- b _080C660E
-_080C65F2:
- bl sub_80C6714
- bl sub_80C6A08
- b _080C660E
-_080C65FC:
- bl sub_80C66D8
- bl sub_80C6958
- b _080C660E
-_080C6606:
- bl sub_80C66BC
- bl sub_80C68A0
-_080C660E:
- pop {r0}
- bx r0
- thumb_func_end sub_80C6548
-
- thumb_func_start sub_80C6614
-sub_80C6614: @ 80C6614
- ldr r2, _080C667C @ =gUnknown_3005350
- ldr r1, [r2]
- movs r0, 0
- strh r0, [r1]
- ldr r0, [r2]
- ldr r2, _080C6680 @ =0x000018c6
- adds r1, r2, 0
- strh r1, [r0, 0x2]
- ldr r2, _080C6684 @ =0x000077bd
- adds r1, r2, 0
- strh r1, [r0, 0x4]
- ldr r2, _080C6688 @ =0x00002d6b
- adds r1, r2, 0
- strh r1, [r0, 0x6]
- ldr r2, _080C668C @ =0x000018dd
- adds r1, r2, 0
- strh r1, [r0, 0x8]
- ldr r2, _080C6690 @ =0x00001ba6
- adds r1, r2, 0
- strh r1, [r0, 0xA]
- ldr r2, _080C6694 @ =0x000074c6
- adds r1, r2, 0
- strh r1, [r0, 0xC]
- ldr r2, _080C6698 @ =0x00001bbd
- adds r1, r2, 0
- strh r1, [r0, 0xE]
- ldr r2, _080C669C @ =0x000074dd
- adds r1, r2, 0
- strh r1, [r0, 0x10]
- ldr r2, _080C66A0 @ =0x000077a6
- adds r1, r2, 0
- strh r1, [r0, 0x12]
- ldr r2, _080C66A4 @ =0x0000197d
- adds r1, r2, 0
- strh r1, [r0, 0x14]
- ldr r2, _080C66A8 @ =0x00001bab
- adds r1, r2, 0
- strh r1, [r0, 0x16]
- ldr r2, _080C66AC @ =0x00007566
- adds r1, r2, 0
- strh r1, [r0, 0x18]
- ldr r2, _080C66B0 @ =0x00002cdd
- adds r1, r2, 0
- strh r1, [r0, 0x1A]
- ldr r2, _080C66B4 @ =0x00002fa6
- adds r1, r2, 0
- strh r1, [r0, 0x1C]
- ldr r2, _080C66B8 @ =0x000074cb
- adds r1, r2, 0
- strh r1, [r0, 0x1E]
- bx lr
- .align 2, 0
-_080C667C: .4byte gUnknown_3005350
-_080C6680: .4byte 0x000018c6
-_080C6684: .4byte 0x000077bd
-_080C6688: .4byte 0x00002d6b
-_080C668C: .4byte 0x000018dd
-_080C6690: .4byte 0x00001ba6
-_080C6694: .4byte 0x000074c6
-_080C6698: .4byte 0x00001bbd
-_080C669C: .4byte 0x000074dd
-_080C66A0: .4byte 0x000077a6
-_080C66A4: .4byte 0x0000197d
-_080C66A8: .4byte 0x00001bab
-_080C66AC: .4byte 0x00007566
-_080C66B0: .4byte 0x00002cdd
-_080C66B4: .4byte 0x00002fa6
-_080C66B8: .4byte 0x000074cb
- thumb_func_end sub_80C6614
-
- thumb_func_start sub_80C66BC
-sub_80C66BC: @ 80C66BC
- ldr r2, _080C66D0 @ =gUnknown_3005350
- ldr r0, [r2]
- movs r1, 0
- strh r1, [r0]
- ldr r2, [r2]
- strh r1, [r2, 0x2]
- ldr r1, _080C66D4 @ =0x00007fff
- adds r0, r1, 0
- strh r0, [r2, 0x4]
- bx lr
- .align 2, 0
-_080C66D0: .4byte gUnknown_3005350
-_080C66D4: .4byte 0x00007fff
- thumb_func_end sub_80C66BC
-
- thumb_func_start sub_80C66D8
-sub_80C66D8: @ 80C66D8
- push {r4,r5,lr}
- ldr r1, _080C6710 @ =gUnknown_3005350
- ldr r0, [r1]
- movs r2, 0
- strh r2, [r0]
- ldr r0, [r1]
- strh r2, [r0, 0x2]
- movs r4, 0
- adds r5, r1, 0
-_080C66EA:
- ldr r0, [r5]
- lsls r2, r4, 1
- adds r2, r0
- adds r0, r4, 0x2
- lsls r3, r0, 1
- lsls r1, r0, 11
- lsls r0, 6
- orrs r1, r0
- orrs r1, r3
- strh r1, [r2, 0x4]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xD
- bls _080C66EA
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C6710: .4byte gUnknown_3005350
- thumb_func_end sub_80C66D8
-
- thumb_func_start sub_80C6714
-sub_80C6714: @ 80C6714
- push {r4,lr}
- ldr r2, _080C6744 @ =gUnknown_3005350
- ldr r1, [r2]
- movs r0, 0
- strh r0, [r1]
- movs r3, 0
- adds r4, r2, 0
-_080C6722:
- ldr r0, [r4]
- lsls r2, r3, 1
- adds r2, r0
- lsls r0, r3, 10
- lsls r1, r3, 5
- orrs r0, r1
- orrs r0, r3
- strh r0, [r2, 0x2]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x1F
- bls _080C6722
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C6744: .4byte gUnknown_3005350
- thumb_func_end sub_80C6714
-
- thumb_func_start sub_80C6748
-sub_80C6748: @ 80C6748
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- movs r1, 0xDF
- mov r9, r1
- cmp r0, 0
- bne _080C6760
- movs r2, 0xFF
- mov r9, r2
-_080C6760:
- movs r6, 0
- ldr r3, _080C67E4 @ =gUnknown_3005350
- mov r12, r3
- mov r0, r9
- lsls r4, r0, 1
- ldr r5, _080C67E8 @ =gUnknown_3005338
- cmp r6, r9
- bcs _080C6784
- movs r2, 0
-_080C6772:
- ldr r0, [r3]
- lsls r1, r6, 1
- adds r1, r0
- strh r2, [r1]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, r9
- bcc _080C6772
-_080C6784:
- mov r1, r12
- ldr r0, [r1]
- adds r0, r4, r0
- ldr r2, _080C67EC @ =0x00003def
- adds r1, r2, 0
- strh r1, [r0]
- movs r3, 0
- ldrb r5, [r5]
- cmp r3, r5
- bcs _080C6888
-_080C6798:
- ldr r2, _080C67F0 @ =gUnknown_3005334
- ldr r0, _080C67F4 @ =gUnknown_3005344
- ldrb r1, [r0]
- adds r1, r3
- ldr r0, _080C67F8 @ =gUnknown_300534C
- ldrb r0, [r0]
- muls r0, r1
- lsls r0, 1
- ldr r1, [r2]
- adds r1, r0
- ldr r0, _080C67FC @ =gUnknown_3005330
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r1, r0
- movs r6, 0
- ldr r0, _080C6800 @ =gUnknown_3005340
- adds r2, r0, 0
- adds r3, 0x1
- mov r10, r3
- ldrb r3, [r2]
- cmp r6, r3
- bcs _080C687A
- ldr r0, _080C6804 @ =gUnknown_3005354
- mov r8, r0
-_080C67C8:
- ldrh r0, [r4]
- movs r3, 0x80
- lsls r3, 8
- adds r1, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _080C6808
- mov r1, r8
- ldrh r0, [r1]
- strh r0, [r4]
- adds r6, 0x1
- adds r7, r4, 0x2
- b _080C686E
- .align 2, 0
-_080C67E4: .4byte gUnknown_3005350
-_080C67E8: .4byte gUnknown_3005338
-_080C67EC: .4byte 0x00003def
-_080C67F0: .4byte gUnknown_3005334
-_080C67F4: .4byte gUnknown_3005344
-_080C67F8: .4byte gUnknown_300534C
-_080C67FC: .4byte gUnknown_3005330
-_080C6800: .4byte gUnknown_3005340
-_080C6804: .4byte gUnknown_3005354
-_080C6808:
- adds r0, r4, 0
- bl sub_80C6B68
- lsls r0, 16
- lsrs r5, r0, 16
- movs r3, 0x1
- adds r6, 0x1
- adds r7, r4, 0x2
- cmp r3, r9
- bcs _080C6864
- ldr r0, _080C6834 @ =gUnknown_3005350
- ldr r2, [r0]
- ldrh r1, [r2, 0x2]
- mov r12, r0
- cmp r1, 0
- bne _080C6838
- strh r5, [r2, 0x2]
- mov r2, r8
- ldrh r0, [r2]
- adds r0, 0x1
- b _080C6862
- .align 2, 0
-_080C6834: .4byte gUnknown_3005350
-_080C6838:
- mov r2, r12
- ldr r1, [r2]
- lsls r0, r3, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, r5
- beq _080C685C
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r9
- bcs _080C6864
- lsls r0, r3, 1
- adds r1, r0, r1
- ldrh r0, [r1]
- cmp r0, 0
- bne _080C6838
- strh r5, [r1]
-_080C685C:
- mov r1, r8
- ldrh r0, [r1]
- adds r0, r3
-_080C6862:
- strh r0, [r4]
-_080C6864:
- ldr r2, _080C6898 @ =gUnknown_3005340
- cmp r3, r9
- bne _080C686E
- mov r3, r9
- strh r3, [r4]
-_080C686E:
- lsls r0, r6, 24
- lsrs r6, r0, 24
- adds r4, r7, 0
- ldrb r0, [r2]
- cmp r6, r0
- bcc _080C67C8
-_080C687A:
- mov r1, r10
- lsls r0, r1, 24
- lsrs r3, r0, 24
- ldr r0, _080C689C @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r3, r0
- bcc _080C6798
-_080C6888:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C6898: .4byte gUnknown_3005340
-_080C689C: .4byte gUnknown_3005338
- thumb_func_end sub_80C6748
-
- thumb_func_start sub_80C68A0
-sub_80C68A0: @ 80C68A0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r2, 0
- ldr r0, _080C68F4 @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080C6944
- ldr r0, _080C68F8 @ =gUnknown_3005334
- mov r8, r0
-_080C68B4:
- ldr r0, _080C68FC @ =gUnknown_3005344
- ldrb r1, [r0]
- adds r1, r2
- ldr r0, _080C6900 @ =gUnknown_300534C
- ldrb r0, [r0]
- muls r0, r1
- lsls r0, 1
- mov r3, r8
- ldr r1, [r3]
- adds r1, r0
- ldr r0, _080C6904 @ =gUnknown_3005330
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r1, r0
- movs r6, 0
- ldr r0, _080C6908 @ =gUnknown_3005340
- adds r3, r0, 0
- adds r7, r2, 0x1
- ldrb r0, [r3]
- cmp r6, r0
- bcs _080C6938
- ldr r5, _080C690C @ =gUnknown_3005354
-_080C68E0:
- ldrh r0, [r4]
- movs r2, 0x80
- lsls r2, 8
- adds r1, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _080C6910
- ldrh r0, [r5]
- strh r0, [r4]
- b _080C692A
- .align 2, 0
-_080C68F4: .4byte gUnknown_3005338
-_080C68F8: .4byte gUnknown_3005334
-_080C68FC: .4byte gUnknown_3005344
-_080C6900: .4byte gUnknown_300534C
-_080C6904: .4byte gUnknown_3005330
-_080C6908: .4byte gUnknown_3005340
-_080C690C: .4byte gUnknown_3005354
-_080C6910:
- adds r0, r4, 0
- bl sub_80C600C
- lsls r0, 16
- cmp r0, 0
- bne _080C6922
- ldrh r0, [r5]
- adds r0, 0x1
- b _080C6926
-_080C6922:
- ldrh r0, [r5]
- adds r0, 0x2
-_080C6926:
- strh r0, [r4]
- ldr r3, _080C6950 @ =gUnknown_3005340
-_080C692A:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r4, 0x2
- ldrb r0, [r3]
- cmp r6, r0
- bcc _080C68E0
-_080C6938:
- lsls r0, r7, 24
- lsrs r2, r0, 24
- ldr r0, _080C6954 @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcc _080C68B4
-_080C6944:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C6950: .4byte gUnknown_3005340
-_080C6954: .4byte gUnknown_3005338
- thumb_func_end sub_80C68A0
-
- thumb_func_start sub_80C6958
-sub_80C6958: @ 80C6958
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- movs r2, 0
- ldr r0, _080C69AC @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080C69F4
- ldr r0, _080C69B0 @ =gUnknown_3005334
- mov r8, r0
-_080C696E:
- ldr r0, _080C69B4 @ =gUnknown_3005344
- ldrb r1, [r0]
- adds r1, r2
- ldr r0, _080C69B8 @ =gUnknown_300534C
- ldrb r0, [r0]
- muls r0, r1
- lsls r0, 1
- mov r3, r8
- ldr r1, [r3]
- adds r1, r0
- ldr r0, _080C69BC @ =gUnknown_3005330
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r1, r0
- movs r5, 0
- ldr r0, _080C69C0 @ =gUnknown_3005340
- adds r7, r2, 0x1
- ldrb r0, [r0]
- cmp r5, r0
- bcs _080C69E8
- ldr r6, _080C69C4 @ =gUnknown_3005354
- movs r0, 0x80
- lsls r0, 8
- adds r2, r0, 0
-_080C699E:
- ldrh r0, [r4]
- ands r0, r2
- cmp r0, 0
- beq _080C69C8
- ldrh r0, [r6]
- strh r0, [r4]
- b _080C69D8
- .align 2, 0
-_080C69AC: .4byte gUnknown_3005338
-_080C69B0: .4byte gUnknown_3005334
-_080C69B4: .4byte gUnknown_3005344
-_080C69B8: .4byte gUnknown_300534C
-_080C69BC: .4byte gUnknown_3005330
-_080C69C0: .4byte gUnknown_3005340
-_080C69C4: .4byte gUnknown_3005354
-_080C69C8:
- adds r0, r4, 0
- str r2, [sp]
- bl sub_80C6CAC
- ldrh r1, [r6]
- adds r0, r1
- strh r0, [r4]
- ldr r2, [sp]
-_080C69D8:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, 0x2
- ldr r0, _080C6A00 @ =gUnknown_3005340
- ldrb r0, [r0]
- cmp r5, r0
- bcc _080C699E
-_080C69E8:
- lsls r0, r7, 24
- lsrs r2, r0, 24
- ldr r0, _080C6A04 @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcc _080C696E
-_080C69F4:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C6A00: .4byte gUnknown_3005340
-_080C6A04: .4byte gUnknown_3005338
- thumb_func_end sub_80C6958
-
- thumb_func_start sub_80C6A08
-sub_80C6A08: @ 80C6A08
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- movs r2, 0
- ldr r0, _080C6A5C @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080C6AA4
- ldr r0, _080C6A60 @ =gUnknown_3005334
- mov r8, r0
-_080C6A1E:
- ldr r0, _080C6A64 @ =gUnknown_3005344
- ldrb r1, [r0]
- adds r1, r2
- ldr r0, _080C6A68 @ =gUnknown_300534C
- ldrb r0, [r0]
- muls r0, r1
- lsls r0, 1
- mov r3, r8
- ldr r1, [r3]
- adds r1, r0
- ldr r0, _080C6A6C @ =gUnknown_3005330
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r1, r0
- movs r5, 0
- ldr r0, _080C6A70 @ =gUnknown_3005340
- adds r7, r2, 0x1
- ldrb r0, [r0]
- cmp r5, r0
- bcs _080C6A98
- ldr r6, _080C6A74 @ =gUnknown_3005354
- movs r0, 0x80
- lsls r0, 8
- adds r2, r0, 0
-_080C6A4E:
- ldrh r0, [r4]
- ands r0, r2
- cmp r0, 0
- beq _080C6A78
- ldrh r0, [r6]
- strh r0, [r4]
- b _080C6A88
- .align 2, 0
-_080C6A5C: .4byte gUnknown_3005338
-_080C6A60: .4byte gUnknown_3005334
-_080C6A64: .4byte gUnknown_3005344
-_080C6A68: .4byte gUnknown_300534C
-_080C6A6C: .4byte gUnknown_3005330
-_080C6A70: .4byte gUnknown_3005340
-_080C6A74: .4byte gUnknown_3005354
-_080C6A78:
- adds r0, r4, 0
- str r2, [sp]
- bl sub_80C6CE0
- ldrh r1, [r6]
- adds r0, r1
- strh r0, [r4]
- ldr r2, [sp]
-_080C6A88:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, 0x2
- ldr r0, _080C6AB0 @ =gUnknown_3005340
- ldrb r0, [r0]
- cmp r5, r0
- bcc _080C6A4E
-_080C6A98:
- lsls r0, r7, 24
- lsrs r2, r0, 24
- ldr r0, _080C6AB4 @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcc _080C6A1E
-_080C6AA4:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C6AB0: .4byte gUnknown_3005340
-_080C6AB4: .4byte gUnknown_3005338
- thumb_func_end sub_80C6A08
-
- thumb_func_start sub_80C6AB8
-sub_80C6AB8: @ 80C6AB8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- movs r2, 0
- ldr r0, _080C6B0C @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080C6B54
- ldr r0, _080C6B10 @ =gUnknown_3005334
- mov r8, r0
-_080C6ACE:
- ldr r0, _080C6B14 @ =gUnknown_3005344
- ldrb r1, [r0]
- adds r1, r2
- ldr r0, _080C6B18 @ =gUnknown_300534C
- ldrb r0, [r0]
- muls r0, r1
- lsls r0, 1
- mov r3, r8
- ldr r1, [r3]
- adds r1, r0
- ldr r0, _080C6B1C @ =gUnknown_3005330
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r1, r0
- movs r5, 0
- ldr r0, _080C6B20 @ =gUnknown_3005340
- adds r7, r2, 0x1
- ldrb r0, [r0]
- cmp r5, r0
- bcs _080C6B48
- ldr r6, _080C6B24 @ =gUnknown_3005354
- movs r0, 0x80
- lsls r0, 8
- adds r2, r0, 0
-_080C6AFE:
- ldrh r0, [r4]
- ands r0, r2
- cmp r0, 0
- beq _080C6B28
- ldrh r0, [r6]
- strh r0, [r4]
- b _080C6B38
- .align 2, 0
-_080C6B0C: .4byte gUnknown_3005338
-_080C6B10: .4byte gUnknown_3005334
-_080C6B14: .4byte gUnknown_3005344
-_080C6B18: .4byte gUnknown_300534C
-_080C6B1C: .4byte gUnknown_3005330
-_080C6B20: .4byte gUnknown_3005340
-_080C6B24: .4byte gUnknown_3005354
-_080C6B28:
- adds r0, r4, 0
- str r2, [sp]
- bl sub_80C6BDC
- ldrh r1, [r6]
- adds r0, r1
- strh r0, [r4]
- ldr r2, [sp]
-_080C6B38:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, 0x2
- ldr r0, _080C6B60 @ =gUnknown_3005340
- ldrb r0, [r0]
- cmp r5, r0
- bcc _080C6AFE
-_080C6B48:
- lsls r0, r7, 24
- lsrs r2, r0, 24
- ldr r0, _080C6B64 @ =gUnknown_3005338
- ldrb r0, [r0]
- cmp r2, r0
- bcc _080C6ACE
-_080C6B54:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C6B60: .4byte gUnknown_3005340
-_080C6B64: .4byte gUnknown_3005338
- thumb_func_end sub_80C6AB8
-
- thumb_func_start sub_80C6B68
-sub_80C6B68: @ 80C6B68
- push {r4,lr}
- ldrh r0, [r0]
- movs r1, 0x1F
- movs r4, 0x1F
- ands r4, r0
- lsls r0, 16
- lsrs r3, r0, 21
- ands r3, r1
- lsrs r2, r0, 26
- ands r2, r1
- movs r1, 0x3
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _080C6B8C
- movs r0, 0x1C
- ands r0, r4
- adds r4, r0, 0x4
-_080C6B8C:
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _080C6B9A
- movs r0, 0x1C
- ands r0, r3
- adds r3, r0, 0x4
-_080C6B9A:
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _080C6BA8
- movs r0, 0x1C
- ands r0, r2
- adds r2, r0, 0x4
-_080C6BA8:
- cmp r4, 0x5
- bhi _080C6BAE
- movs r4, 0x6
-_080C6BAE:
- cmp r4, 0x1E
- bls _080C6BB4
- movs r4, 0x1E
-_080C6BB4:
- cmp r3, 0x5
- bhi _080C6BBA
- movs r3, 0x6
-_080C6BBA:
- cmp r3, 0x1E
- bls _080C6BC0
- movs r3, 0x1E
-_080C6BC0:
- cmp r2, 0x5
- bhi _080C6BC6
- movs r2, 0x6
-_080C6BC6:
- cmp r2, 0x1E
- bls _080C6BCC
- movs r2, 0x1E
-_080C6BCC:
- lsls r0, r2, 10
- lsls r1, r3, 5
- orrs r0, r1
- orrs r4, r0
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80C6B68
-
- thumb_func_start sub_80C6BDC
-sub_80C6BDC: @ 80C6BDC
- push {lr}
- ldrh r0, [r0]
- movs r1, 0x1F
- movs r3, 0x1F
- ands r3, r0
- lsls r0, 16
- lsrs r2, r0, 21
- ands r2, r1
- lsrs r0, 26
- ands r0, r1
- cmp r3, 0xB
- bhi _080C6C00
- cmp r2, 0xA
- bhi _080C6C00
- cmp r0, 0xA
- bhi _080C6C00
- movs r0, 0x1
- b _080C6CA6
-_080C6C00:
- cmp r3, 0x13
- bls _080C6C24
- cmp r2, 0x13
- bls _080C6C0C
- cmp r0, 0x13
- bhi _080C6C30
-_080C6C0C:
- cmp r3, 0x13
- bls _080C6C24
- cmp r2, 0x13
- bls _080C6C1A
- cmp r0, 0xE
- bhi _080C6C30
- b _080C6C68
-_080C6C1A:
- cmp r0, 0x13
- bls _080C6C24
- cmp r2, 0xE
- bhi _080C6C30
- b _080C6C44
-_080C6C24:
- cmp r2, 0x13
- bls _080C6C34
- cmp r0, 0x13
- bls _080C6C34
- cmp r3, 0xE
- bls _080C6C8C
-_080C6C30:
- movs r0, 0x2
- b _080C6CA6
-_080C6C34:
- cmp r3, 0x13
- bls _080C6C58
- cmp r2, 0xB
- bls _080C6C4C
- cmp r0, 0xB
- bls _080C6C48
- cmp r2, r0
- bcs _080C6C68
-_080C6C44:
- movs r0, 0x8
- b _080C6CA6
-_080C6C48:
- movs r0, 0xA
- b _080C6CA6
-_080C6C4C:
- cmp r0, 0xB
- bls _080C6C54
- movs r0, 0xD
- b _080C6CA6
-_080C6C54:
- movs r0, 0x4
- b _080C6CA6
-_080C6C58:
- cmp r2, 0x13
- bls _080C6C7C
- cmp r3, 0xB
- bls _080C6C70
- cmp r0, 0xB
- bls _080C6C6C
- cmp r3, r0
- bcc _080C6C8C
-_080C6C68:
- movs r0, 0x7
- b _080C6CA6
-_080C6C6C:
- movs r0, 0xB
- b _080C6CA6
-_080C6C70:
- cmp r0, 0xB
- bls _080C6C78
- movs r0, 0xE
- b _080C6CA6
-_080C6C78:
- movs r0, 0x5
- b _080C6CA6
-_080C6C7C:
- cmp r0, 0x13
- bls _080C6CA4
- cmp r3, 0xB
- bls _080C6C90
- cmp r2, 0xB
- bls _080C6C98
- cmp r3, r2
- bcs _080C6C44
-_080C6C8C:
- movs r0, 0x9
- b _080C6CA6
-_080C6C90:
- cmp r2, 0xB
- bls _080C6C98
- movs r0, 0xC
- b _080C6CA6
-_080C6C98:
- cmp r0, 0xB
- bls _080C6CA0
- movs r0, 0xF
- b _080C6CA6
-_080C6CA0:
- movs r0, 0x6
- b _080C6CA6
-_080C6CA4:
- movs r0, 0x3
-_080C6CA6:
- pop {r1}
- bx r1
- thumb_func_end sub_80C6BDC
-
- thumb_func_start sub_80C6CAC
-sub_80C6CAC: @ 80C6CAC
- push {lr}
- ldrh r1, [r0]
- movs r3, 0x1F
- movs r0, 0x1F
- ands r0, r1
- lsls r1, 16
- lsrs r2, r1, 21
- ands r2, r3
- lsrs r1, 26
- ands r1, r3
- adds r0, r2
- adds r0, r1
- movs r1, 0x3
- bl __divsi3
- movs r1, 0x1E
- ands r0, r1
- lsls r0, 16
- cmp r0, 0
- beq _080C6CD8
- lsrs r0, 17
- b _080C6CDA
-_080C6CD8:
- movs r0, 0x1
-_080C6CDA:
- pop {r1}
- bx r1
- thumb_func_end sub_80C6CAC
-
- thumb_func_start sub_80C6CE0
-sub_80C6CE0: @ 80C6CE0
- push {lr}
- ldrh r1, [r0]
- movs r3, 0x1F
- movs r0, 0x1F
- ands r0, r1
- lsls r1, 16
- lsrs r2, r1, 21
- ands r2, r3
- lsrs r1, 26
- ands r1, r3
- adds r0, r2
- adds r0, r1
- movs r1, 0x3
- bl __divsi3
- lsls r0, 16
- movs r1, 0x80
- lsls r1, 9
- adds r0, r1
- lsrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end sub_80C6CE0
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/image_processing_effects.s b/data/image_processing_effects.s
index df83b2d54..d5585410c 100644
--- a/data/image_processing_effects.s
+++ b/data/image_processing_effects.s
@@ -1,7 +1,7 @@
.section .rodata
.align 2, 0
-gUnknown_83F3024:: @ 83F3024
+gPointillismPoints:: @ 83F3024
.byte 0x00, 0x1d, 0x1c
.byte 0x0e, 0x1e, 0x1b
.byte 0x00, 0x01, 0x32
diff --git a/ld_script.txt b/ld_script.txt
index 838aebcac..0b12b1187 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -181,7 +181,7 @@ SECTIONS {
asm/script_pokemon_util_80BF8FC.o(.text);
src/heal_location.o(.text);
src/region_map.o(.text);
- asm/image_processing_effects.o(.text);
+ src/image_processing_effects.o(.text);
src/battle_ai_script_commands.o(.text);
src/fldeff_rocksmash.o(.text);
src/fldeff_dig.o(.text);
diff --git a/src/image_processing_effects.c b/src/image_processing_effects.c
new file mode 100644
index 000000000..c9ca4b16b
--- /dev/null
+++ b/src/image_processing_effects.c
@@ -0,0 +1,1224 @@
+#include "global.h"
+#include "image_processing_effects.h"
+
+// IWRAM common
+u8 gCanvasColumnStart;
+u16 (*gCanvasPixels)[][32];
+u8 gCanvasRowEnd;
+u8 gCanvasHeight;
+u8 gCanvasColumnEnd;
+u8 gCanvasRowStart;
+u8 gCanvasMonPersonality;
+u8 gCanvasWidth;
+u16 *gCanvasPalette;
+u16 gCanvasPaletteStart;
+
+static void ApplyImageEffect_Pointillism(void);
+static void ApplyImageEffect_Blur(void);
+static void ApplyImageEffect_BlackOutline(void);
+static void ApplyImageEffect_Invert(void);
+static void ApplyImageEffect_BlackAndWhite(void);
+static void ApplyImageEffect_BlurRight(void);
+static void ApplyImageEffect_BlurDown(void);
+static void ApplyImageEffect_Shimmer(void);
+static void ApplyImageEffect_Grayscale(void);
+static void ApplyImageEffect_PersonalityColor(u8);
+static void ApplyImageEffect_RedChannelGrayscale(u8);
+static void ApplyImageEffect_RedChannelGrayscaleHighlight(u8);
+static void AddPointillismPoints(u16);
+static u16 ConvertColorToGrayscale(u16*);
+static u16 QuantizePixel_Blur(u16*, u16*, u16*);
+static u16 QuantizePixel_PersonalityColor(u16*, u8);
+static u16 QuantizePixel_BlackAndWhite(u16*);
+static u16 QuantizePixel_BlackOutline(u16*, u16*);
+static u16 QuantizePixel_Invert(u16*);
+static u16 QuantizePixel_BlurHard(u16*, u16*, u16*);
+static u16 QuantizePixel_MotionBlur(u16*, u16*);
+static u16 GetColorFromPersonality(u8);
+static void QuantizePalette_Standard(bool8);
+static void SetPresetPalette_PrimaryColors(void);
+static void QuantizePalette_PrimaryColors(void);
+static void SetPresetPalette_Grayscale(void);
+static void QuantizePalette_Grayscale(void);
+static void SetPresetPalette_GrayscaleSmall(void);
+static void QuantizePalette_GrayscaleSmall(void);
+static void SetPresetPalette_BlackAndWhite(void);
+static void QuantizePalette_BlackAndWhite(void);
+static u16 QuantizePixel_Standard(u16*);
+static u16 QuantizePixel_GrayscaleSmall(u16*);
+static u16 QuantizePixel_Grayscale(u16*);
+static u16 QuantizePixel_PrimaryColors(u16*);
+
+extern const u8 gPointillismPoints[][3];
+
+void ApplyImageProcessingEffects(struct ImageProcessingContext *context)
+{
+ gCanvasPixels = context->canvasPixels;
+ gCanvasMonPersonality = context->personality;
+ gCanvasColumnStart = context->columnStart;
+ gCanvasRowStart = context->rowStart;
+ gCanvasColumnEnd = context->columnEnd;
+ gCanvasRowEnd = context->rowEnd;
+ gCanvasWidth = context->canvasWidth;
+ gCanvasHeight = context->canvasHeight;
+
+ switch (context->effect)
+ {
+ case IMAGE_EFFECT_POINTILLISM:
+ ApplyImageEffect_Pointillism();
+ break;
+ case IMAGE_EFFECT_BLUR:
+ ApplyImageEffect_Blur();
+ break;
+ case IMAGE_EFFECT_OUTLINE_COLORED:
+ ApplyImageEffect_BlackOutline();
+ ApplyImageEffect_PersonalityColor(gCanvasMonPersonality);
+ break;
+ case IMAGE_EFFECT_INVERT_BLACK_WHITE:
+ ApplyImageEffect_BlackOutline();
+ ApplyImageEffect_Invert();
+ ApplyImageEffect_BlackAndWhite();
+ case IMAGE_EFFECT_INVERT:
+ ApplyImageEffect_Invert();
+ break;
+ case IMAGE_EFFECT_THICK_BLACK_WHITE:
+ ApplyImageEffect_BlackOutline();
+ ApplyImageEffect_BlurRight();
+ ApplyImageEffect_BlurRight();
+ ApplyImageEffect_BlurDown();
+ ApplyImageEffect_BlackAndWhite();
+ break;
+ case IMAGE_EFFECT_SHIMMER:
+ ApplyImageEffect_Shimmer();
+ break;
+ case IMAGE_EFFECT_OUTLINE:
+ ApplyImageEffect_BlackOutline();
+ break;
+ case IMAGE_EFFECT_BLUR_RIGHT:
+ ApplyImageEffect_BlurRight();
+ break;
+ case IMAGE_EFFECT_BLUR_DOWN:
+ ApplyImageEffect_BlurDown();
+ break;
+ case IMAGE_EFFECT_GRAYSCALE_LIGHT:
+ ApplyImageEffect_Grayscale();
+ ApplyImageEffect_RedChannelGrayscale(3);
+ break;
+ case IMAGE_EFFECT_CHARCOAL:
+ ApplyImageEffect_BlackOutline();
+ ApplyImageEffect_BlurRight();
+ ApplyImageEffect_BlurDown();
+ ApplyImageEffect_BlackAndWhite();
+ ApplyImageEffect_Blur();
+ ApplyImageEffect_Blur();
+ ApplyImageEffect_RedChannelGrayscale(2);
+ ApplyImageEffect_RedChannelGrayscaleHighlight(4);
+ break;
+ }
+}
+
+static void ApplyImageEffect_RedChannelGrayscale(u8 delta)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ // Gets the grayscale value, based on the pixel's red channel.
+ // Also adds a delta to skew lighter or darker.
+ u8 grayValue = (31 & *pixel);
+ grayValue += delta;
+ if (grayValue > 31)
+ grayValue = 31;
+
+ *pixel = RGB2(grayValue, grayValue, grayValue);
+ }
+ }
+ }
+}
+
+static void ApplyImageEffect_RedChannelGrayscaleHighlight(u8 highlight)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ u8 grayValue = (31 & *pixel);
+ if (grayValue > 31 - highlight)
+ grayValue = 31 - (highlight >> 1);
+
+ *pixel = RGB2(grayValue, grayValue, grayValue);
+ }
+ }
+ }
+}
+
+static void ApplyImageEffect_Pointillism(void)
+{
+ u32 i;
+ for (i = 0; i < 3200; i++)
+ AddPointillismPoints(i);
+}
+
+static void ApplyImageEffect_Grayscale(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ *pixel = ConvertColorToGrayscale(pixel);
+ }
+ }
+}
+
+static void ApplyImageEffect_Blur(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gCanvasColumnEnd; i++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart + i];
+ u16 prevPixel = *pixel;
+
+ j = 1;
+ pixel += gCanvasWidth;
+ while (j < gCanvasRowEnd - 1)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ *pixel = QuantizePixel_Blur(&prevPixel, pixel, pixel + gCanvasWidth);
+ prevPixel = *pixel;
+ }
+
+ j++;
+ pixel += gCanvasWidth;
+ }
+ }
+}
+
+static void ApplyImageEffect_PersonalityColor(u8 personality)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ *pixel = QuantizePixel_PersonalityColor(pixel, personality);
+ }
+ }
+}
+
+static void ApplyImageEffect_BlackAndWhite(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ *pixel = QuantizePixel_BlackAndWhite(pixel);
+ }
+ }
+}
+
+static void ApplyImageEffect_BlackOutline(void)
+{
+ u8 i, j;
+ u16 *pixel;
+
+ // Handle top row of pixels first.
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ pixel = &pixelRow[gCanvasColumnStart];
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel + 1);
+ for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++)
+ {
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel + 1);
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel - 1);
+ }
+
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel - 1);
+ }
+
+ // Handle each column from left to right.
+ for (i = 0; i < gCanvasColumnEnd; i++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth];
+ pixel = &pixelRow[gCanvasColumnStart + i];
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth);
+ for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth)
+ {
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth);
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel - gCanvasWidth);
+ }
+
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel - gCanvasWidth);
+ }
+}
+
+static void ApplyImageEffect_Invert(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ *pixel = QuantizePixel_Invert(pixel);
+ }
+ }
+}
+
+static void ApplyImageEffect_Shimmer(void)
+{
+ u8 i, j;
+ u16 *pixel;
+ u16 prevPixel;
+
+ // First, invert all of the colors.
+ pixel = (*gCanvasPixels)[0];
+ for (i = 0; i < 64; i++)
+ {
+ for (j = 0; j < 64; j++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ *pixel = QuantizePixel_Invert(pixel);
+ }
+ }
+
+ // Blur the pixels twice.
+ for (j = 0; j < 64; j++)
+ {
+ pixel = &(*gCanvasPixels)[0][j];
+ prevPixel = *pixel;
+ *pixel = 0x8000;
+ for (i = 1, pixel += 64; i < 63; i++, pixel += 64)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ *pixel = QuantizePixel_BlurHard(&prevPixel, pixel, pixel + 64);
+ prevPixel = *pixel;
+ }
+ }
+
+ *pixel = 0x8000;
+ pixel = &(*gCanvasPixels)[0][j];
+ prevPixel = *pixel;
+ *pixel = 0x8000;
+ for (i = 1, pixel += 64; i < 63; i++, pixel += 64)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ *pixel = QuantizePixel_BlurHard(&prevPixel, pixel, pixel + 64);
+ prevPixel = *pixel;
+ }
+ }
+
+ *pixel = 0x8000;
+ }
+
+ // Finally, invert colors back to the original color space.
+ // The above blur causes the outline areas to darken, which makes
+ // this inversion give the effect of light outlines.
+ pixel = (*gCanvasPixels)[0];
+ for (i = 0; i < 64; i++)
+ {
+ for (j = 0; j < 64; j++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ *pixel = QuantizePixel_Invert(pixel);
+ }
+ }
+}
+
+static void ApplyImageEffect_BlurRight(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ u16 prevPixel = *pixel;
+ for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ *pixel = QuantizePixel_MotionBlur(&prevPixel, pixel);
+ prevPixel = *pixel;
+ }
+ }
+ }
+}
+
+static void ApplyImageEffect_BlurDown(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gCanvasColumnEnd; i++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart + i];
+ u16 prevPixel = *pixel;
+ for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ *pixel = QuantizePixel_MotionBlur(&prevPixel, pixel);
+ prevPixel = *pixel;
+ }
+ }
+ }
+}
+
+struct PointillismPoint
+{
+ u8 column;
+ u8 row;
+ u16 delta;
+};
+
+static void AddPointillismPoints(u16 arg0)
+{
+ u8 i;
+ bool8 offsetDownLeft;
+ u8 colorType;
+ struct PointillismPoint points[6];
+
+ points[0].column = gPointillismPoints[arg0][0];
+ points[0].row = gPointillismPoints[arg0][1];
+ points[0].delta = (gPointillismPoints[arg0][2] >> 3) & 7;
+
+ colorType = (gPointillismPoints[arg0][2] >> 1) & 3;
+ offsetDownLeft = gPointillismPoints[arg0][2] & 1;
+ for (i = 1; i < points[0].delta; i++)
+ {
+ if (!offsetDownLeft)
+ {
+ points[i].column = points[0].column - i;
+ points[i].row = points[0].row + i;
+ }
+ else
+ {
+ points[i].column = points[0].column + 1;
+ points[i].row = points[0].row - 1;
+ }
+
+ if (points[i].column > 63 || points[i].row > 63)
+ {
+ points[0].delta = i - 1;
+ break;
+ }
+
+ points[i].delta = points[0].delta - i;
+ }
+
+ for (i = 0; i < points[0].delta; i++)
+ {
+ u16 *pixel = &(*gCanvasPixels)[points[i].row * 2][points[i].column];
+
+ if (!(0x8000 & *pixel))
+ {
+ u16 red = (*pixel) & 0x1F;
+ u16 green = (*pixel >> 5) & 0x1F;
+ u16 blue = (*pixel >> 10) & 0x1F;
+
+ switch (colorType)
+ {
+ case 0:
+ case 1:
+ switch (((gPointillismPoints[arg0][2] >> 3) & 7) % 3)
+ {
+ case 0:
+ if (red >= points[i].delta)
+ red -= points[i].delta;
+ else
+ red = 0;
+ break;
+ case 1:
+ if (green >= points[i].delta)
+ green -= points[i].delta;
+ else
+ green = 0;
+ break;
+ case 2:
+ if (blue >= points[i].delta)
+ blue -= points[i].delta;
+ else
+ blue = 0;
+ break;
+ }
+ break;
+ case 2:
+ case 3:
+ red += points[i].delta;
+ green += points[i].delta;
+ blue += points[i].delta;
+ if (red > 31)
+ red = 31;
+ if (green > 31)
+ green = 31;
+ if (blue > 31)
+ blue = 31;
+ break;
+ }
+
+ *pixel = RGB2(red, green, blue);
+ }
+ }
+}
+
+static u16 ConvertColorToGrayscale(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ u16 gray = (red + green + blue) / 3;
+ return RGB2(gray, gray, gray);
+}
+
+// The dark colors are the colored edges of the Cool painting effect.
+// Everything else is white.
+static u16 QuantizePixel_PersonalityColor(u16 *color, u8 personality)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ if (red < 17 && green < 17 && blue < 17)
+ return GetColorFromPersonality(personality);
+ else
+ return RGB_WHITE;
+}
+
+// Based on the given value, which comes from the first 8 bits of
+// the mon's personality value, return a color.
+static u16 GetColorFromPersonality(u8 personality)
+{
+ u16 red = 0;
+ u16 green = 0;
+ u16 blue = 0;
+ u8 strength = (personality / 6) % 3;
+ u8 colorType = personality % 6;
+
+ switch (colorType)
+ {
+ case 0:
+ // Teal color
+ green = 21 - strength;
+ blue = green;
+ red = 0;
+ break;
+ case 1:
+ // Yellow color
+ blue = 0;
+ red = 21 - strength;
+ green = red;
+ break;
+ case 2:
+ // Purple color
+ blue = 21 - strength;
+ green = 0;
+ red = blue;
+ break;
+ case 3:
+ // Red color
+ blue = 0;
+ green = 0;
+ red = 23 - strength;
+ break;
+ case 4:
+ // Blue color
+ blue = 23 - strength;
+ green = 0;
+ red = 0;
+ break;
+ case 5:
+ // Green color
+ blue = 0;
+ green = 23 - strength;
+ red = 0;
+ break;
+ }
+
+ return RGB2(red, green, blue);
+}
+
+static u16 QuantizePixel_BlackAndWhite(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ if (red < 17 && green < 17 && blue < 17)
+ return RGB_BLACK;
+ else
+ return RGB_WHITE;
+}
+
+static u16 QuantizePixel_BlackOutline(u16 *pixelA, u16 *pixelB)
+{
+ if (*pixelA != RGB_BLACK)
+ {
+ if (*pixelA & 0x8000)
+ return 0x8000;
+ if (*pixelB & 0x8000)
+ return RGB_BLACK;
+
+ return *pixelA;
+ }
+
+ return RGB_BLACK;
+}
+
+static u16 QuantizePixel_Invert(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ red = 31 - red;
+ green = 31 - green;
+ blue = 31 - blue;
+
+ return RGB2(red, green, blue);
+}
+
+static u16 QuantizePixel_MotionBlur(u16 *prevPixel, u16 *curPixel)
+{
+ u16 pixelChannels[2][3];
+ u16 diffs[3];
+ u8 i;
+ u16 largestDiff;
+ u16 red, green, blue;
+
+ if (*prevPixel == *curPixel)
+ return *curPixel;
+
+ pixelChannels[0][0] = (*prevPixel >> 0) & 0x1F;
+ pixelChannels[0][1] = (*prevPixel >> 5) & 0x1F;
+ pixelChannels[0][2] = (*prevPixel >> 10) & 0x1F;
+ pixelChannels[1][0] = (*curPixel >> 0) & 0x1F;
+ pixelChannels[1][1] = (*curPixel >> 5) & 0x1F;
+ pixelChannels[1][2] = (*curPixel >> 10) & 0x1F;
+
+ // Don't blur light colors.
+ if (pixelChannels[0][0] > 25 && pixelChannels[0][1] > 25 && pixelChannels[0][2] > 25)
+ return *curPixel;
+ if (pixelChannels[1][0] > 25 && pixelChannels[1][1] > 25 && pixelChannels[1][2] > 25)
+ return *curPixel;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (pixelChannels[0][i] > pixelChannels[1][i])
+ diffs[i] = pixelChannels[0][i] - pixelChannels[1][i];
+ else
+ diffs[i] = pixelChannels[1][i] - pixelChannels[0][i];
+ }
+
+ // Find the largest diff of any of the color channels.
+ if (diffs[0] >= diffs[1])
+ {
+ if (diffs[0] >= diffs[2])
+ largestDiff = diffs[0];
+ else if (diffs[1] >= diffs[2])
+ largestDiff = diffs[1];
+ else
+ largestDiff = diffs[2];
+ }
+ else
+ {
+ if (diffs[1] >= diffs[2])
+ largestDiff = diffs[1];
+ else if (diffs[2] >= diffs[0])
+ largestDiff = diffs[2];
+ else
+ largestDiff = diffs[0];
+ }
+
+ red = (pixelChannels[1][0] * (31 - largestDiff / 2)) / 31;
+ green = (pixelChannels[1][1] * (31 - largestDiff / 2)) / 31;
+ blue = (pixelChannels[1][2] * (31 - largestDiff / 2)) / 31;
+ return RGB2(red, green, blue);
+}
+
+static u16 QuantizePixel_Blur(u16 *prevPixel, u16 *curPixel, u16 *nextPixel)
+{
+ u16 red, green, blue;
+ u16 prevAvg, curAvg, nextAvg;
+ u16 prevDiff, nextDiff;
+ u32 diff;
+ u16 factor;
+
+ if (*prevPixel == *curPixel && *nextPixel == *curPixel)
+ return *curPixel;
+
+ red = (*curPixel >> 0) & 0x1F;
+ green = (*curPixel >> 5) & 0x1F;
+ blue = (*curPixel >> 10) & 0x1F;
+
+ prevAvg = (((*prevPixel >> 0) & 0x1F) + ((*prevPixel >> 5) & 0x1F) + ((*prevPixel >> 10) & 0x1F)) / 3;
+ curAvg = (((*curPixel >> 0) & 0x1F) + ((*curPixel >> 5) & 0x1F) + ((*curPixel >> 10) & 0x1F)) / 3;
+ nextAvg = (((*nextPixel >> 0) & 0x1F) + ((*nextPixel >> 5) & 0x1F) + ((*nextPixel >> 10) & 0x1F)) / 3;
+
+ if (prevAvg == curAvg && nextAvg == curAvg)
+ return *curPixel;
+
+ if (prevAvg > curAvg)
+ prevDiff = prevAvg - curAvg;
+ else
+ prevDiff = curAvg - prevAvg;
+
+ if (nextAvg > curAvg)
+ nextDiff = nextAvg - curAvg;
+ else
+ nextDiff = curAvg - nextAvg;
+
+ if (prevDiff >= nextDiff)
+ diff = prevDiff;
+ else
+ diff = nextDiff;
+
+ factor = 31 - diff / 2;
+ red = (red * factor) / 31;
+ green = (green * factor) / 31;
+ blue = (blue * factor) / 31;
+ return RGB2(red, green, blue);
+}
+
+static u16 QuantizePixel_BlurHard(u16 *prevPixel, u16 *curPixel, u16 *nextPixel)
+{
+ u16 red, green, blue;
+ u16 prevAvg, curAvg, nextAvg;
+ u16 prevDiff, nextDiff;
+ u32 diff;
+ u16 factor;
+
+ if (*prevPixel == *curPixel && *nextPixel == *curPixel)
+ return *curPixel;
+
+ red = (*curPixel >> 0) & 0x1F;
+ green = (*curPixel >> 5) & 0x1F;
+ blue = (*curPixel >> 10) & 0x1F;
+
+ prevAvg = (((*prevPixel >> 0) & 0x1F) + ((*prevPixel >> 5) & 0x1F) + ((*prevPixel >> 10) & 0x1F)) / 3;
+ curAvg = (((*curPixel >> 0) & 0x1F) + ((*curPixel >> 5) & 0x1F) + ((*curPixel >> 10) & 0x1F)) / 3;
+ nextAvg = (((*nextPixel >> 0) & 0x1F) + ((*nextPixel >> 5) & 0x1F) + ((*nextPixel >> 10) & 0x1F)) / 3;
+
+ if (prevAvg == curAvg && nextAvg == curAvg)
+ return *curPixel;
+
+ if (prevAvg > curAvg)
+ prevDiff = prevAvg - curAvg;
+ else
+ prevDiff = curAvg - prevAvg;
+
+ if (nextAvg > curAvg)
+ nextDiff = nextAvg - curAvg;
+ else
+ nextDiff = curAvg - nextAvg;
+
+ if (prevDiff >= nextDiff)
+ diff = prevDiff;
+ else
+ diff = nextDiff;
+
+ factor = 31 - diff;
+ red = (red * factor) / 31;
+ green = (green * factor) / 31;
+ blue = (blue * factor) / 31;
+ return RGB2(red, green, blue);
+}
+
+void ConvertImageProcessingToGBA(struct ImageProcessingContext *context)
+{
+ u16 i, j, k;
+ u16 *src, *dest, *src_, *dest_;
+ u16 width, height;
+
+ width = context->canvasWidth >> 3;
+ height = context->canvasHeight >> 3;
+ src_ = context->canvasPixels;
+ dest_ = context->dest;
+
+ if (context->var_16 == 2)
+ {
+ for (i = 0; i < height; i++)
+ {
+ for (j = 0; j < width; j++)
+ {
+ for (k = 0; k < 8; k++)
+ {
+ dest = dest_ + ((i * width + j) << 5) + (k << 2);
+ src = src_ + ((((i << 3) + k) << 3) * width) + (j << 3);
+
+ dest[0] = src[0] | (src[1] << 8);
+ dest[1] = src[2] | (src[3] << 8);
+ dest[2] = src[4] | (src[5] << 8);
+ dest[3] = src[6] | (src[7] << 8);
+ }
+ }
+ }
+ }
+ else
+ {
+ for (i = 0; i < height; i++)
+ {
+ for (j = 0; j < width; j++)
+ {
+ for (k = 0; k < 8; k++)
+ {
+ dest = dest_ + ((i * width + j) << 4) + (k << 1);
+ src = src_ + ((((i << 3) + k) << 3) * width) + (j << 3);
+
+ dest[0] = src[0] | (src[1] << 4) | (src[2] << 8) | (src[3] << 0xC);
+ dest[1] = src[4] | (src[5] << 4) | (src[6] << 8) | (src[7] << 0xC);
+ }
+ }
+ }
+ }
+}
+
+void ApplyImageProcessingQuantization(struct ImageProcessingContext *context)
+{
+ gCanvasPaletteStart = context->paletteStart * 16;
+ gCanvasPalette = &context->canvasPalette[gCanvasPaletteStart];
+ gCanvasPixels = context->canvasPixels;
+ gCanvasColumnStart = context->columnStart;
+ gCanvasRowStart = context->rowStart;
+ gCanvasColumnEnd = context->columnEnd;
+ gCanvasRowEnd = context->rowEnd;
+ gCanvasWidth = context->canvasWidth;
+ gCanvasHeight = context->canvasHeight;
+
+ switch (context->quantizeEffect)
+ {
+ case QUANTIZE_EFFECT_STANDARD:
+ QuantizePalette_Standard(FALSE);
+ break;
+ case QUANTIZE_EFFECT_STANDARD_LIMITED_COLORS:
+ QuantizePalette_Standard(TRUE);
+ break;
+ case QUANTIZE_EFFECT_PRIMARY_COLORS:
+ SetPresetPalette_PrimaryColors();
+ QuantizePalette_PrimaryColors();
+ break;
+ case QUANTIZE_EFFECT_GRAYSCALE:
+ SetPresetPalette_Grayscale();
+ QuantizePalette_Grayscale();
+ break;
+ case QUANTIZE_EFFECT_GRAYSCALE_SMALL:
+ SetPresetPalette_GrayscaleSmall();
+ QuantizePalette_GrayscaleSmall();
+ break;
+ case QUANTIZE_EFFECT_BLACK_WHITE:
+ SetPresetPalette_BlackAndWhite();
+ QuantizePalette_BlackAndWhite();
+ break;
+ }
+}
+
+static void SetPresetPalette_PrimaryColors(void)
+{
+ gCanvasPalette[0] = RGB2(0, 0, 0);
+ gCanvasPalette[1] = RGB2(6, 6, 6);
+ gCanvasPalette[2] = RGB2(29, 29, 29);
+ gCanvasPalette[3] = RGB2(11, 11, 11);
+ gCanvasPalette[4] = RGB2(29, 6, 6);
+ gCanvasPalette[5] = RGB2(6, 29, 6);
+ gCanvasPalette[6] = RGB2(6, 6, 29);
+ gCanvasPalette[7] = RGB2(29, 29, 6);
+ gCanvasPalette[8] = RGB2(29, 6, 29);
+ gCanvasPalette[9] = RGB2(6, 29, 29);
+ gCanvasPalette[10] = RGB2(29, 11, 6);
+ gCanvasPalette[11] = RGB2(11, 29, 6);
+ gCanvasPalette[12] = RGB2(6, 11, 29);
+ gCanvasPalette[13] = RGB2(29, 6, 11);
+ gCanvasPalette[14] = RGB2(6, 29, 11);
+ gCanvasPalette[15] = RGB2(11, 6, 29);
+}
+
+static void SetPresetPalette_BlackAndWhite(void)
+{
+ gCanvasPalette[0] = RGB2(0, 0, 0);
+ gCanvasPalette[1] = RGB2(0, 0, 0);
+ gCanvasPalette[2] = RGB2(31, 31, 31);
+}
+
+static void SetPresetPalette_GrayscaleSmall(void)
+{
+ u8 i;
+
+ gCanvasPalette[0] = RGB2(0, 0, 0);
+ gCanvasPalette[1] = RGB2(0, 0, 0);
+ for (i = 0; i < 14; i++)
+ gCanvasPalette[i + 2] = RGB2(2 * (i + 2), 2 * (i + 2), 2 * (i + 2));
+}
+
+static void SetPresetPalette_Grayscale(void)
+{
+ u8 i;
+
+ gCanvasPalette[0] = RGB2(0, 0, 0);
+ for (i = 0; i < 32; i++)
+ gCanvasPalette[i + 1] = RGB2(i, i, i);
+}
+
+static void QuantizePalette_Standard(bool8 useLimitedPalette)
+{
+ u8 i, j;
+ u16 maxIndex;
+
+ maxIndex = 0xDF;
+ if (!useLimitedPalette)
+ maxIndex = 0xFF;
+
+ for (i = 0; i < maxIndex; i++)
+ gCanvasPalette[i] = RGB_BLACK;
+
+ gCanvasPalette[maxIndex] = RGB2(15, 15, 15);
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (*pixel & 0x8000)
+ {
+ *pixel = gCanvasPaletteStart;
+ }
+ else
+ {
+ u16 quantizedColor = QuantizePixel_Standard(pixel);
+ u8 curIndex = 1;
+ if (curIndex < maxIndex)
+ {
+ if (gCanvasPalette[curIndex] == RGB_BLACK)
+ {
+ // The quantized color does not match any existing color in the
+ // palette, so we add it to the palette.
+ // This if block seems pointless because the below while loop handles
+ // this same logic.
+ gCanvasPalette[curIndex] = quantizedColor;
+ *pixel = gCanvasPaletteStart + curIndex;
+ }
+ else
+ {
+ while (curIndex < maxIndex)
+ {
+ if (gCanvasPalette[curIndex] == RGB_BLACK)
+ {
+ // The quantized color does not match any existing color in the
+ // palette, so we add it to the palette.
+ gCanvasPalette[curIndex] = quantizedColor;
+ *pixel = gCanvasPaletteStart + curIndex;
+ break;
+ }
+
+ if (gCanvasPalette[curIndex] == quantizedColor)
+ {
+ // The quantized color matches this existing color in the
+ // palette, so we use this existing color for the pixel.
+ *pixel = gCanvasPaletteStart + curIndex;
+ break;
+ }
+
+ curIndex++;
+ }
+ }
+ }
+
+ if (curIndex == maxIndex)
+ {
+ // The entire palette's colors are already in use, which means
+ // the base image has too many colors to handle. This error is handled
+ // by marking such pixels as gray color.
+ curIndex = maxIndex;
+ *pixel = curIndex;
+ }
+ }
+ }
+ }
+}
+
+static void QuantizePalette_BlackAndWhite(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (*pixel & 0x8000)
+ {
+ *pixel = gCanvasPaletteStart;
+ }
+ else
+ {
+ if (QuantizePixel_BlackAndWhite(pixel) == RGB_BLACK)
+ {
+ // Black is the first color in the quantized palette.
+ *pixel = gCanvasPaletteStart + 1;
+ }
+ else
+ {
+ // White is the second color in the quantized palette.
+ *pixel = gCanvasPaletteStart + 2;
+ }
+ }
+ }
+ }
+}
+
+static void QuantizePalette_GrayscaleSmall(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (*pixel & 0x8000)
+ *pixel = gCanvasPaletteStart;
+ else
+ *pixel = QuantizePixel_GrayscaleSmall(pixel) + gCanvasPaletteStart;
+ }
+ }
+}
+
+static void QuantizePalette_Grayscale(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (*pixel & 0x8000)
+ *pixel = gCanvasPaletteStart;
+ else
+ *pixel = QuantizePixel_Grayscale(pixel) + gCanvasPaletteStart;
+ }
+ }
+}
+
+static void QuantizePalette_PrimaryColors(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (*pixel & 0x8000)
+ *pixel = gCanvasPaletteStart;
+ else
+ *pixel = QuantizePixel_PrimaryColors(pixel) + gCanvasPaletteStart;
+ }
+ }
+}
+
+// Quantizes the pixel's color channels to nearest multiple of 4, and clamps to [6, 30].
+static u16 QuantizePixel_Standard(u16 *pixel)
+{
+ u16 red = *pixel & 0x1F;
+ u16 green = (*pixel >> 5) & 0x1F;
+ u16 blue = (*pixel >> 10) & 0x1F;
+
+ // Quantize color channels to muliples of 4, rounding up.
+ if (red & 3)
+ red = (red & 0x1C) + 4;
+ if (green & 3)
+ green = (green & 0x1C) + 4;
+ if (blue & 3)
+ blue = (blue & 0x1C) + 4;
+
+ // Clamp channels to [6, 30].
+ if (red < 6)
+ red = 6;
+ if (red > 30)
+ red = 30;
+ if (green < 6)
+ green = 6;
+ if (green > 30)
+ green = 30;
+ if (blue < 6)
+ blue = 6;
+ if (blue > 30)
+ blue = 30;
+
+ return RGB2(red, green, blue);
+}
+
+static u16 QuantizePixel_PrimaryColors(u16* color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ if (red < 12 && green < 11 && blue < 11)
+ return 1;
+
+ if (red > 19 && green > 19 && blue > 19)
+ return 2;
+
+ if (red > 19)
+ {
+ if (green > 19)
+ {
+ if (blue > 14)
+ return 2;
+ else
+ return 7;
+ }
+ else if (blue > 19)
+ {
+ if (green > 14)
+ return 2;
+ else
+ return 8;
+ }
+ }
+
+ if (green > 19 && blue > 19)
+ {
+ if (red > 14)
+ return 2;
+ else
+ return 9;
+ }
+
+ if (red > 19)
+ {
+ if (green > 11)
+ {
+ if (blue > 11)
+ {
+ if (green < blue)
+ return 8;
+ else
+ return 7;
+ }
+ else
+ {
+ return 10;
+ }
+ }
+ else if (blue > 11)
+ {
+ return 13;
+ }
+ else
+ {
+ return 4;
+ }
+ }
+
+ if (green > 19)
+ {
+ if (red > 11)
+ {
+ if (blue > 11)
+ {
+ if (red < blue)
+ return 9;
+ else
+ return 7;
+ }
+ else
+ {
+ return 11;
+ }
+ }
+ else
+ {
+ if (blue > 11)
+ return 14;
+ else
+ return 5;
+ }
+ }
+
+ if (blue > 19)
+ {
+ if (red > 11)
+ {
+ if (green > 11)
+ {
+ if (red < green)
+ return 9;
+ else
+ return 8;
+ }
+ }
+ else if (green > 11)
+ {
+ return 12;
+ }
+
+ if (blue > 11)
+ return 15;
+ else
+ return 6;
+ }
+
+ return 3;
+}
+
+static u16 QuantizePixel_GrayscaleSmall(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+ u16 average = ((red + green + blue) / 3) & 0x1E;
+ if (average == 0)
+ return 1;
+ else
+ return average / 2;
+}
+
+static u16 QuantizePixel_Grayscale(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+ u16 average = (red + green + blue) / 3;
+ return average + 1;
+}
diff --git a/sym_common.txt b/sym_common.txt
index 17f0cd306..b41ec5ff2 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -61,37 +61,8 @@ gUnknown_3005078: @ 3005078
@ what is this?
.space 0x20
-
-gUnknown_3005330: @ 3005330
- .space 0x4
-
-gUnknown_3005334: @ 3005334
- .space 0x4
-
-gUnknown_3005338: @ 3005338
- .space 0x4
-
-gUnknown_300533C: @ 300533C
- .space 0x4
-
-gUnknown_3005340: @ 3005340
- .space 0x4
-
-gUnknown_3005344: @ 3005344
- .space 0x4
-
-gUnknown_3005348: @ 3005348
- .space 0x4
-
-gUnknown_300534C: @ 300534C
- .space 0x4
-
-gUnknown_3005350: @ 3005350
- .space 0x4
-
-gUnknown_3005354: @ 3005354
- .space 0xC
-
+ .align 2
+ .include "image_processing_effects.o"
.align 2
.include "field_specials.o"
.align 2