diff options
-rw-r--r-- | asm/contest_painting_effects.s | 1362 | ||||
-rw-r--r-- | src/contest_painting_effects.c | 599 |
2 files changed, 595 insertions, 1366 deletions
diff --git a/asm/contest_painting_effects.s b/asm/contest_painting_effects.s index bc72a6ef5..0c403c093 100644 --- a/asm/contest_painting_effects.s +++ b/asm/contest_painting_effects.s @@ -5,1366 +5,6 @@ .text - thumb_func_start sub_80FCB5C -sub_80FCB5C: @ 80FCB5C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r2, 0 - ldr r0, _080FCC00 @ =gUnknown_03005DF8 - ldrb r0, [r0] - cmp r2, r0 - bcs _080FCBF2 - ldr r0, _080FCC04 @ =gUnknown_03005DEC - mov r8, r0 - ldr r3, _080FCC08 @ =gUnknown_03005E04 -_080FCB74: - ldr r0, _080FCC0C @ =gUnknown_03005DFC - ldrb r1, [r0] - ldrb r0, [r3] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080FCC10 @ =gUnknown_03005DE8 - 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, _080FCC14 @ =gUnknown_03005DF0 - ldrb r0, [r0] - subs r0, 0x1 - adds r7, r2, 0x1 - cmp r5, r0 - bge _080FCBE6 - ldr r6, _080FCC08 @ =gUnknown_03005E04 -_080FCBAA: - ldrh r0, [r4] - movs r2, 0x80 - lsls r2, 8 - adds r1, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _080FCBD0 - ldrb r2, [r6] - lsls r2, 1 - adds r2, r4, r2 - mov r0, sp - adds r1, r4, 0 - str r3, [sp, 0x4] - bl sub_80FD68C - strh r0, [r4] - mov r1, sp - strh r0, [r1] - ldr r3, [sp, 0x4] -_080FCBD0: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - ldrb r0, [r6] - lsls r0, 1 - adds r4, r0 - ldr r0, _080FCC14 @ =gUnknown_03005DF0 - ldrb r0, [r0] - subs r0, 0x1 - cmp r5, r0 - blt _080FCBAA -_080FCBE6: - lsls r0, r7, 24 - lsrs r2, r0, 24 - ldr r0, _080FCC00 @ =gUnknown_03005DF8 - ldrb r0, [r0] - cmp r2, r0 - bcc _080FCB74 -_080FCBF2: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FCC00: .4byte gUnknown_03005DF8 -_080FCC04: .4byte gUnknown_03005DEC -_080FCC08: .4byte gUnknown_03005E04 -_080FCC0C: .4byte gUnknown_03005DFC -_080FCC10: .4byte gUnknown_03005DE8 -_080FCC14: .4byte gUnknown_03005DF0 - thumb_func_end sub_80FCB5C - - thumb_func_start sub_80FCC18 -sub_80FCC18: @ 80FCC18 - 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, _080FCCA4 @ =gUnknown_03005DF0 - ldrb r0, [r0] - cmp r2, r0 - bcs _080FCC94 - ldr r0, _080FCCA8 @ =gUnknown_03005DEC - mov r9, r0 - ldr r3, _080FCCAC @ =gUnknown_03005DF8 -_080FCC38: - ldr r0, _080FCCB0 @ =gUnknown_03005DFC - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080FCCB4 @ =gUnknown_03005E04 - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r9 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080FCCB8 @ =gUnknown_03005DE8 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080FCC88 - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080FCC64: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080FCC7A - adds r0, r4, 0 - mov r1, r8 - str r3, [sp] - bl sub_80FD3D0 - strh r0, [r4] - ldr r3, [sp] -_080FCC7A: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080FCC64 -_080FCC88: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080FCCA4 @ =gUnknown_03005DF0 - ldrb r0, [r0] - cmp r2, r0 - bcc _080FCC38 -_080FCC94: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FCCA4: .4byte gUnknown_03005DF0 -_080FCCA8: .4byte gUnknown_03005DEC -_080FCCAC: .4byte gUnknown_03005DF8 -_080FCCB0: .4byte gUnknown_03005DFC -_080FCCB4: .4byte gUnknown_03005E04 -_080FCCB8: .4byte gUnknown_03005DE8 - thumb_func_end sub_80FCC18 - - thumb_func_start sub_80FCCBC -sub_80FCCBC: @ 80FCCBC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080FCD3C @ =gUnknown_03005DF0 - ldrb r0, [r0] - cmp r2, r0 - bcs _080FCD2E - ldr r0, _080FCD40 @ =gUnknown_03005DEC - mov r8, r0 - ldr r3, _080FCD44 @ =gUnknown_03005DF8 -_080FCCD4: - ldr r0, _080FCD48 @ =gUnknown_03005DFC - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080FCD4C @ =gUnknown_03005E04 - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080FCD50 @ =gUnknown_03005DE8 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080FCD22 - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080FCD00: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080FCD14 - adds r0, r4, 0 - str r3, [sp] - bl sub_80FD4DC - strh r0, [r4] - ldr r3, [sp] -_080FCD14: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080FCD00 -_080FCD22: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080FCD3C @ =gUnknown_03005DF0 - ldrb r0, [r0] - cmp r2, r0 - bcc _080FCCD4 -_080FCD2E: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FCD3C: .4byte gUnknown_03005DF0 -_080FCD40: .4byte gUnknown_03005DEC -_080FCD44: .4byte gUnknown_03005DF8 -_080FCD48: .4byte gUnknown_03005DFC -_080FCD4C: .4byte gUnknown_03005E04 -_080FCD50: .4byte gUnknown_03005DE8 - thumb_func_end sub_80FCCBC - - thumb_func_start sub_80FCD54 -sub_80FCD54: @ 80FCD54 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r7, 0 - ldr r0, _080FCE8C @ =gUnknown_03005DF0 - ldrb r0, [r0] - cmp r7, r0 - bcs _080FCDE0 - ldr r0, _080FCE90 @ =gUnknown_03005DEC - mov r8, r0 -_080FCD6A: - ldr r0, _080FCE94 @ =gUnknown_03005DFC - ldrb r1, [r0] - adds r1, r7 - ldr r0, _080FCE98 @ =gUnknown_03005E04 - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r2, r8 - ldr r1, [r2] - adds r1, r0 - ldr r0, _080FCE9C @ =gUnknown_03005DE8 - ldrb r0, [r0] - lsls r0, 1 - adds r5, r1, r0 - adds r4, r5, 0x2 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80FD50C - strh r0, [r5] - movs r6, 0x1 - adds r5, r4, 0 - ldr r0, _080FCEA0 @ =gUnknown_03005DF8 - ldrb r0, [r0] - subs r0, 0x1 - adds r7, 0x1 - cmp r6, r0 - bge _080FCDCA -_080FCDA2: - adds r4, r5, 0x2 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80FD50C - strh r0, [r5] - subs r1, r5, 0x2 - adds r0, r5, 0 - bl sub_80FD50C - strh r0, [r5] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r5, r4, 0 - ldr r0, _080FCEA0 @ =gUnknown_03005DF8 - ldrb r0, [r0] - subs r0, 0x1 - cmp r6, r0 - blt _080FCDA2 -_080FCDCA: - subs r1, r5, 0x2 - adds r0, r5, 0 - bl sub_80FD50C - strh r0, [r5] - lsls r0, r7, 24 - lsrs r7, r0, 24 - ldr r0, _080FCE8C @ =gUnknown_03005DF0 - ldrb r0, [r0] - cmp r7, r0 - bcc _080FCD6A -_080FCDE0: - movs r6, 0 - ldr r0, _080FCEA0 @ =gUnknown_03005DF8 - ldrb r0, [r0] - cmp r6, r0 - bcs _080FCE80 - ldr r3, _080FCE90 @ =gUnknown_03005DEC - mov r9, r3 - ldr r0, _080FCE98 @ =gUnknown_03005E04 - mov r8, r0 -_080FCDF2: - ldr r0, _080FCE94 @ =gUnknown_03005DFC - 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, _080FCE9C @ =gUnknown_03005DE8 - 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_80FD50C - strh r0, [r5] - movs r7, 0x1 - mov r1, r8 - ldrb r0, [r1] - lsls r0, 1 - adds r5, r0 - ldr r0, _080FCE8C @ =gUnknown_03005DF0 - ldrb r0, [r0] - subs r0, 0x1 - adds r6, 0x1 - cmp r7, r0 - bge _080FCE64 - ldr r4, _080FCE98 @ =gUnknown_03005E04 -_080FCE32: - ldrb r1, [r4] - lsls r1, 1 - adds r1, r5, r1 - adds r0, r5, 0 - bl sub_80FD50C - strh r0, [r5] - ldrb r1, [r4] - lsls r1, 1 - subs r1, r5, r1 - adds r0, r5, 0 - bl sub_80FD50C - 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, _080FCE8C @ =gUnknown_03005DF0 - ldrb r0, [r0] - subs r0, 0x1 - cmp r7, r0 - blt _080FCE32 -_080FCE64: - mov r2, r8 - ldrb r1, [r2] - lsls r1, 1 - subs r1, r5, r1 - adds r0, r5, 0 - bl sub_80FD50C - strh r0, [r5] - lsls r0, r6, 24 - lsrs r6, r0, 24 - ldr r0, _080FCEA0 @ =gUnknown_03005DF8 - ldrb r0, [r0] - cmp r6, r0 - bcc _080FCDF2 -_080FCE80: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FCE8C: .4byte gUnknown_03005DF0 -_080FCE90: .4byte gUnknown_03005DEC -_080FCE94: .4byte gUnknown_03005DFC -_080FCE98: .4byte gUnknown_03005E04 -_080FCE9C: .4byte gUnknown_03005DE8 -_080FCEA0: .4byte gUnknown_03005DF8 - thumb_func_end sub_80FCD54 - - thumb_func_start sub_80FCEA4 -sub_80FCEA4: @ 80FCEA4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080FCF24 @ =gUnknown_03005DF0 - ldrb r0, [r0] - cmp r2, r0 - bcs _080FCF16 - ldr r0, _080FCF28 @ =gUnknown_03005DEC - mov r8, r0 - ldr r3, _080FCF2C @ =gUnknown_03005DF8 -_080FCEBC: - ldr r0, _080FCF30 @ =gUnknown_03005DFC - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080FCF34 @ =gUnknown_03005E04 - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r4, r8 - ldr r1, [r4] - adds r1, r0 - ldr r0, _080FCF38 @ =gUnknown_03005DE8 - ldrb r0, [r0] - lsls r0, 1 - adds r4, r1, r0 - movs r5, 0 - adds r6, r2, 0x1 - ldrb r0, [r3] - cmp r5, r0 - bcs _080FCF0A - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080FCEE8: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080FCEFC - adds r0, r4, 0 - str r3, [sp] - bl sub_80FD53C - strh r0, [r4] - ldr r3, [sp] -_080FCEFC: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldrb r0, [r3] - cmp r5, r0 - bcc _080FCEE8 -_080FCF0A: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080FCF24 @ =gUnknown_03005DF0 - ldrb r0, [r0] - cmp r2, r0 - bcc _080FCEBC -_080FCF16: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FCF24: .4byte gUnknown_03005DF0 -_080FCF28: .4byte gUnknown_03005DEC -_080FCF2C: .4byte gUnknown_03005DF8 -_080FCF30: .4byte gUnknown_03005DFC -_080FCF34: .4byte gUnknown_03005E04 -_080FCF38: .4byte gUnknown_03005DE8 - thumb_func_end sub_80FCEA4 - - thumb_func_start sub_80FCF3C -sub_80FCF3C: @ 80FCF3C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - ldr r0, _080FD068 @ =gUnknown_03005DEC - ldr r4, [r0] - movs r6, 0 - movs r0, 0x80 - lsls r0, 8 - adds r5, r0, 0 -_080FCF54: - movs r7, 0 -_080FCF56: - ldrh r0, [r4] - ands r0, r5 - cmp r0, 0 - bne _080FCF66 - adds r0, r4, 0 - bl sub_80FD53C - strh r0, [r4] -_080FCF66: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r4, 0x2 - cmp r7, 0x3F - bls _080FCF56 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3F - bls _080FCF54 - movs r7, 0 - ldr r1, _080FD068 @ =gUnknown_03005DEC - mov r10, r1 - mov r3, sp - movs r2, 0x80 - lsls r2, 8 - mov r9, r2 -_080FCF8A: - 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 -_080FCFA0: - ldrh r0, [r4] - movs r2, 0x80 - lsls r2, 8 - ands r0, r2 - cmp r0, 0 - bne _080FCFC0 - adds r2, r4, 0 - adds r2, 0x80 - mov r0, sp - adds r1, r4, 0 - str r3, [sp, 0x4] - bl sub_80FD7AC - strh r0, [r4] - ldr r3, [sp, 0x4] - strh r0, [r3] -_080FCFC0: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, 0x80 - cmp r6, 0x3E - bls _080FCFA0 - 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 -_080FCFE8: - ldrh r0, [r4] - mov r1, r8 - ands r0, r1 - adds r5, r4, 0 - adds r5, 0x80 - cmp r0, 0 - bne _080FD008 - mov r0, sp - adds r1, r4, 0 - adds r2, r5, 0 - str r3, [sp, 0x4] - bl sub_80FD7AC - strh r0, [r4] - ldr r3, [sp, 0x4] - strh r0, [r3] -_080FD008: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, r5, 0 - cmp r6, 0x3E - bls _080FCFE8 - mov r2, r9 - strh r2, [r4] - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x3F - bls _080FCF8A - ldr r0, _080FD068 @ =gUnknown_03005DEC - ldr r4, [r0] - movs r6, 0 - movs r0, 0x80 - lsls r0, 8 - mov r8, r0 -_080FD02E: - movs r7, 0 - adds r5, r6, 0x1 -_080FD032: - ldrh r0, [r4] - mov r1, r8 - ands r0, r1 - cmp r0, 0 - bne _080FD044 - adds r0, r4, 0 - bl sub_80FD53C - strh r0, [r4] -_080FD044: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r4, 0x2 - cmp r7, 0x3F - bls _080FD032 - lsls r0, r5, 24 - lsrs r6, r0, 24 - cmp r6, 0x3F - bls _080FD02E - 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 -_080FD068: .4byte gUnknown_03005DEC - thumb_func_end sub_80FCF3C - - thumb_func_start sub_80FD06C -sub_80FD06C: @ 80FD06C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - movs r2, 0 - ldr r0, _080FD0FC @ =gUnknown_03005DF0 - ldrb r0, [r0] - cmp r2, r0 - bcs _080FD0EE - ldr r0, _080FD100 @ =gUnknown_03005DEC - mov r8, r0 -_080FD082: - ldr r0, _080FD104 @ =gUnknown_03005DFC - ldrb r1, [r0] - adds r1, r2 - ldr r0, _080FD108 @ =gUnknown_03005E04 - ldrb r0, [r0] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080FD10C @ =gUnknown_03005DE8 - 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, _080FD110 @ =gUnknown_03005DF8 - ldrb r0, [r0] - subs r0, 0x1 - adds r6, r2, 0x1 - cmp r5, r0 - bge _080FD0E2 - movs r0, 0x80 - lsls r0, 8 - adds r7, r0, 0 -_080FD0BA: - ldrh r0, [r4] - ands r0, r7 - cmp r0, 0 - bne _080FD0D0 - mov r0, sp - adds r1, r4, 0 - bl sub_80FD568 - strh r0, [r4] - mov r1, sp - strh r0, [r1] -_080FD0D0: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x2 - ldr r0, _080FD110 @ =gUnknown_03005DF8 - ldrb r0, [r0] - subs r0, 0x1 - cmp r5, r0 - blt _080FD0BA -_080FD0E2: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080FD0FC @ =gUnknown_03005DF0 - ldrb r0, [r0] - cmp r2, r0 - bcc _080FD082 -_080FD0EE: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FD0FC: .4byte gUnknown_03005DF0 -_080FD100: .4byte gUnknown_03005DEC -_080FD104: .4byte gUnknown_03005DFC -_080FD108: .4byte gUnknown_03005E04 -_080FD10C: .4byte gUnknown_03005DE8 -_080FD110: .4byte gUnknown_03005DF8 - thumb_func_end sub_80FD06C - - thumb_func_start sub_80FD114 -sub_80FD114: @ 80FD114 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r2, 0 - ldr r0, _080FD1B0 @ =gUnknown_03005DF8 - ldrb r0, [r0] - cmp r2, r0 - bcs _080FD1A2 - ldr r0, _080FD1B4 @ =gUnknown_03005DEC - mov r8, r0 - ldr r7, _080FD1B8 @ =gUnknown_03005E04 -_080FD12C: - ldr r0, _080FD1BC @ =gUnknown_03005DFC - ldrb r1, [r0] - ldrb r0, [r7] - muls r0, r1 - lsls r0, 1 - mov r3, r8 - ldr r1, [r3] - adds r1, r0 - ldr r0, _080FD1C0 @ =gUnknown_03005DE8 - 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, _080FD1C4 @ =gUnknown_03005DF0 - ldrb r0, [r0] - subs r0, 0x1 - adds r6, r2, 0x1 - cmp r5, r0 - bge _080FD196 - movs r0, 0x80 - lsls r0, 8 - adds r2, r0, 0 -_080FD166: - ldrh r0, [r4] - ands r0, r2 - cmp r0, 0 - bne _080FD180 - mov r0, sp - adds r1, r4, 0 - str r2, [sp, 0x4] - bl sub_80FD568 - strh r0, [r4] - mov r1, sp - strh r0, [r1] - ldr r2, [sp, 0x4] -_080FD180: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - ldrb r0, [r7] - lsls r0, 1 - adds r4, r0 - ldr r0, _080FD1C4 @ =gUnknown_03005DF0 - ldrb r0, [r0] - subs r0, 0x1 - cmp r5, r0 - blt _080FD166 -_080FD196: - lsls r0, r6, 24 - lsrs r2, r0, 24 - ldr r0, _080FD1B0 @ =gUnknown_03005DF8 - ldrb r0, [r0] - cmp r2, r0 - bcc _080FD12C -_080FD1A2: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FD1B0: .4byte gUnknown_03005DF8 -_080FD1B4: .4byte gUnknown_03005DEC -_080FD1B8: .4byte gUnknown_03005E04 -_080FD1BC: .4byte gUnknown_03005DFC -_080FD1C0: .4byte gUnknown_03005DE8 -_080FD1C4: .4byte gUnknown_03005DF0 - thumb_func_end sub_80FD114 - - thumb_func_start sub_80FD1C8 -sub_80FD1C8: @ 80FD1C8 - 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, _080FD234 @ =gUnknown_083E7A50 - 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 _080FD27A - mov r3, sp -_080FD21A: - cmp r5, 0 - bne _080FD238 - 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 _080FD24A - .align 2, 0 -_080FD234: .4byte gUnknown_083E7A50 -_080FD238: - 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 -_080FD24A: - strb r0, [r1, 0x1] - add r2, sp - ldrb r0, [r2] - cmp r0, 0x3F - bhi _080FD25A - ldrb r0, [r2, 0x1] - cmp r0, 0x3F - bls _080FD262 -_080FD25A: - mov r0, r8 - subs r0, 0x1 - strh r0, [r3, 0x2] - b _080FD27A -_080FD262: - 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 _080FD21A -_080FD27A: - movs r2, 0 - mov r8, r2 - mov r0, sp - ldrh r0, [r0, 0x2] - cmp r8, r0 - bcc _080FD288 - b _080FD38A -_080FD288: - movs r3, 0x1F -_080FD28A: - ldr r1, _080FD2E8 @ =gUnknown_03005DEC - 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 _080FD376 - 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 _080FD36C - cmp r0, 0x1 - ble _080FD2EC - cmp r0, 0x3 - bgt _080FD36C - 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 _080FD360 - movs r7, 0x1F - b _080FD360 - .align 2, 0 -_080FD2E8: .4byte gUnknown_03005DEC -_080FD2EC: - mov r1, r10 - lsls r0, r1, 1 - add r0, r10 - ldr r1, _080FD320 @ =gUnknown_083E7A50 - 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 _080FD33C - cmp r0, 0x1 - bgt _080FD324 - cmp r0, 0 - beq _080FD32A - b _080FD36C - .align 2, 0 -_080FD320: .4byte gUnknown_083E7A50 -_080FD324: - cmp r0, 0x2 - beq _080FD34E - b _080FD36C -_080FD32A: - ldrh r0, [r6, 0x2] - cmp r7, r0 - bcc _080FD338 - subs r0, r7, r0 - lsls r0, 16 - lsrs r7, r0, 16 - b _080FD36C -_080FD338: - movs r7, 0 - b _080FD36C -_080FD33C: - ldrh r0, [r6, 0x2] - cmp r5, r0 - bcc _080FD34A - subs r0, r5, r0 - lsls r0, 16 - lsrs r5, r0, 16 - b _080FD36C -_080FD34A: - movs r5, 0 - b _080FD36C -_080FD34E: - ldrh r0, [r6, 0x2] - cmp r4, r0 - bcc _080FD35C - subs r0, r4, r0 - lsls r0, 16 - lsrs r4, r0, 16 - b _080FD36C -_080FD35C: - movs r4, 0 - b _080FD36C -_080FD360: - cmp r5, 0x1F - bls _080FD366 - movs r5, 0x1F -_080FD366: - cmp r4, 0x1F - bls _080FD36C - movs r4, 0x1F -_080FD36C: - lsls r0, r4, 10 - lsls r1, r5, 5 - orrs r0, r1 - orrs r7, r0 - strh r7, [r2] -_080FD376: - 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 _080FD38A - b _080FD28A -_080FD38A: - 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_80FD1C8 - - thumb_func_start sub_80FD39C -sub_80FD39C: @ 80FD39C - 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_80FD39C - - thumb_func_start sub_80FD3D0 -sub_80FD3D0: @ 80FD3D0 - 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 _080FD400 - cmp r3, 0x10 - bhi _080FD400 - cmp r0, 0x10 - bhi _080FD400 - adds r0, r4, 0 - bl sub_80FD40C - lsls r0, 16 - lsrs r0, 16 - b _080FD402 -_080FD400: - ldr r0, _080FD408 @ =0x00007fff -_080FD402: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080FD408: .4byte 0x00007fff - thumb_func_end sub_80FD3D0 - - thumb_func_start sub_80FD40C -sub_80FD40C: @ 80FD40C - 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 _080FD4C4 - lsls r0, 2 - ldr r1, _080FD450 @ =_080FD454 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FD450: .4byte _080FD454 - .align 2, 0 -_080FD454: - .4byte _080FD46C - .4byte _080FD47C - .4byte _080FD48C - .4byte _080FD49A - .4byte _080FD4A8 - .4byte _080FD4B6 -_080FD46C: - movs r0, 0x15 - subs r0, r5 - lsls r0, 16 - lsrs r6, r0, 16 - adds r7, r6, 0 - movs r1, 0 - mov r8, r1 - b _080FD4C4 -_080FD47C: - movs r7, 0 - movs r0, 0x15 - subs r0, r5 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - mov r6, r8 - b _080FD4C4 -_080FD48C: - movs r0, 0x15 - subs r0, r5 - lsls r0, 16 - lsrs r7, r0, 16 - movs r6, 0 - mov r8, r7 - b _080FD4C4 -_080FD49A: - movs r7, 0 - movs r6, 0 - movs r0, 0x17 - subs r0, r5 - lsls r0, 16 - lsrs r0, 16 - b _080FD4C2 -_080FD4A8: - movs r0, 0x17 - subs r0, r5 - lsls r0, 16 - lsrs r7, r0, 16 - movs r6, 0 - mov r8, r6 - b _080FD4C4 -_080FD4B6: - movs r7, 0 - movs r0, 0x17 - subs r0, r5 - lsls r0, 16 - lsrs r6, r0, 16 - movs r0, 0 -_080FD4C2: - mov r8, r0 -_080FD4C4: - 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_80FD40C - - thumb_func_start sub_80FD4DC -sub_80FD4DC: @ 80FD4DC - 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 _080FD500 - cmp r3, 0x10 - bhi _080FD500 - cmp r0, 0x10 - bhi _080FD500 - movs r0, 0 - b _080FD502 -_080FD500: - ldr r0, _080FD508 @ =0x00007fff -_080FD502: - pop {r1} - bx r1 - .align 2, 0 -_080FD508: .4byte 0x00007fff - thumb_func_end sub_80FD4DC - - thumb_func_start sub_80FD50C -sub_80FD50C: @ 80FD50C - push {r4,lr} - adds r4, r0, 0 - ldrh r3, [r4] - cmp r3, 0 - beq _080FD534 - movs r2, 0x80 - lsls r2, 8 - adds r0, r2, 0 - ands r0, r3 - cmp r0, 0 - beq _080FD526 - adds r0, r2, 0 - b _080FD536 -_080FD526: - ldrh r1, [r1] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _080FD534 - ldrh r0, [r4] - b _080FD536 -_080FD534: - movs r0, 0 -_080FD536: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80FD50C - - thumb_func_start sub_80FD53C -sub_80FD53C: @ 80FD53C - 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_80FD53C - thumb_func_start sub_80FD568 sub_80FD568: @ 80FD568 push {r4-r7,lr} @@ -2479,7 +1119,7 @@ _080FDDD8: .4byte gUnknown_03005DF8 _080FDDDC: .4byte gUnknown_03005E0C _080FDDE0: adds r0, r4, 0 - bl sub_80FD4DC + bl ConvertToBlackOrWhite lsls r0, 16 cmp r0, 0 bne _080FDDF2 diff --git a/src/contest_painting_effects.c b/src/contest_painting_effects.c index b07319048..ae89df88e 100644 --- a/src/contest_painting_effects.c +++ b/src/contest_painting_effects.c @@ -3,6 +3,7 @@ #include "contest_painting.h" extern u16 (*gUnknown_03005DEC)[][32]; +extern u8 gUnknown_083E7A50[][3]; extern u8 gUnknown_03005E00; extern u8 gUnknown_03005DFC; extern u8 gUnknown_03005DF8; @@ -26,8 +27,15 @@ void sub_80FCC18(u8); void sub_80FC92C(u8); void sub_80FC9E4(u8); void sub_80FD1C8(u16); -u16 sub_80FD39C(u16*); +u16 ConvertColorToGrayscale(u16*); u16 sub_80FD68C(u16*, u16*, u16*); +u16 ConvertCoolColor(u16*, u8); +u16 ConvertToBlackOrWhite(u16*); +u16 sub_80FD50C(u16*, u16*); +u16 InvertColor(u16*); +u16 sub_80FD7AC(u16*, u16*, u16*); +u16 sub_80FD568(u16*, u16*); +u16 GetCoolColorFromPersonality(u8); void sub_80FC7A0(struct Unk03005E20* info) { @@ -152,13 +160,594 @@ void sub_80FCAC4(void) for (i = 0; i < gUnknown_03005DF0; i++) { u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) + u16* color = &var2[gUnknown_03005DE8]; + for (j = 0; j < gUnknown_03005DF8; j++, color++) { - if (!(0x8000 & *pal)) + if (!(0x8000 & *color)) + { + *color = ConvertColorToGrayscale(color); + } + } + } +} + +void sub_80FCB5C(void) +{ + u8 i, j; + for (i = 0; i < gUnknown_03005DF8; i++) + { + u16* var0 = &(*gUnknown_03005DEC)[0][gUnknown_03005DFC * gUnknown_03005E04]; + u16* palette = &var0[gUnknown_03005DE8 + i]; + u16 color = *palette; + j = 1; + palette += gUnknown_03005E04; + while (j < gUnknown_03005DF0 - 1) + { + if (!(0x8000 & *palette)) + { + *palette = sub_80FD68C(&color, palette, palette + gUnknown_03005E04); + color = *palette; + } + + j++; + palette += gUnknown_03005E04; + } + } +} + +void sub_80FCC18(u8 arg0) +{ + u8 i, j; + for (i = 0; i < gUnknown_03005DF0; i++) + { + u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; + u16* color = &var0[gUnknown_03005DE8]; + for (j = 0; j < gUnknown_03005DF8; j++, color++) + { + if (!(0x8000 & *color)) + { + *color = ConvertCoolColor(color, arg0); + } + } + } +} + +void sub_80FCCBC(void) +{ + u8 i, j; + for (i = 0; i < gUnknown_03005DF0; i++) + { + u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; + u16* color = &var0[gUnknown_03005DE8]; + for (j = 0; j < gUnknown_03005DF8; j++, color++) + { + if (!(0x8000 & *color)) + { + *color = ConvertToBlackOrWhite(color); + } + } + } +} + +void sub_80FCD54(void) +{ + u8 i, j; + u16 *palette; + + for (i = 0; i < gUnknown_03005DF0; i++) + { + u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; + palette = &var0[gUnknown_03005DE8]; + *palette = sub_80FD50C(palette, palette + 1); + for (j = 1, palette = palette + 1; j < gUnknown_03005DF8 - 1; j++, palette++) + { + *palette = sub_80FD50C(palette, palette + 1); + *palette = sub_80FD50C(palette, palette - 1); + } + + *palette = sub_80FD50C(palette, palette - 1); + } + + for (j = 0; j < gUnknown_03005DF8; j++) + { + u16* var0 = &(*gUnknown_03005DEC)[0][gUnknown_03005DFC * gUnknown_03005E04]; + palette = &var0[gUnknown_03005DE8 + j]; + *palette = sub_80FD50C(palette, palette + gUnknown_03005E04); + for (i = 1, palette = palette + gUnknown_03005E04; i < gUnknown_03005DF0 - 1; i++, palette += gUnknown_03005E04) + { + *palette = sub_80FD50C(palette, palette + gUnknown_03005E04); + *palette = sub_80FD50C(palette, palette - gUnknown_03005E04); + } + + *palette = sub_80FD50C(palette, palette - gUnknown_03005E04); + } +} + +void sub_80FCEA4(void) +{ + u8 i, j; + for (i = 0; i < gUnknown_03005DF0; i++) + { + u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; + u16* color = &var0[gUnknown_03005DE8]; + for (j = 0; j < gUnknown_03005DF8; j++, color++) + { + if (!(0x8000 & *color)) + { + *color = InvertColor(color); + } + } + } +} + +void sub_80FCF3C(void) +{ + u8 i, j; + u16 *palette; + u16 color; + + palette = (*gUnknown_03005DEC)[0]; + for (i = 0; i < 64; i++) + { + for (j = 0; j < 64; j++, palette++) + { + if (!(0x8000 & *palette)) + { + *palette = InvertColor(palette); + } + } + } + + for (j = 0; j < 64; j++) + { + palette = &(*gUnknown_03005DEC)[0][j]; + color = *palette; + *palette = 0x8000; + for (i = 1, palette += 64; i < 63; i++, palette += 64) + { + if (!(0x8000 & *palette)) + { + *palette = sub_80FD7AC(&color, palette, palette + 64); + color = *palette; + } + } + + *palette = 0x8000; + palette = &(*gUnknown_03005DEC)[0][j]; + color = *palette; + *palette = 0x8000; + for (i = 1, palette += 64; i < 63; i++, palette += 64) + { + if (!(0x8000 & *palette)) + { + *palette = sub_80FD7AC(&color, palette, palette + 64); + color = *palette; + } + } + + *palette = 0x8000; + } + + palette = (*gUnknown_03005DEC)[0]; + for (i = 0; i < 64; i++) + { + for (j = 0; j < 64; j++, palette++) + { + if (!(0x8000 & *palette)) + { + *palette = InvertColor(palette); + } + } + } +} + +void sub_80FD06C(void) +{ + u8 i, j; + for (i = 0; i < gUnknown_03005DF0; i++) + { + u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; + u16* palette = &var0[gUnknown_03005DE8]; + u16 color = *palette; + for (j = 1, palette++; j < gUnknown_03005DF8 - 1; j++, palette++) + { + if (!(0x8000 & *palette)) + { + *palette = sub_80FD568(&color, palette); + color = *palette; + } + } + } +} + +void sub_80FD114(void) +{ + u8 i, j; + for (i = 0; i < gUnknown_03005DF8; i++) + { + u16* var0 = &(*gUnknown_03005DEC)[0][gUnknown_03005DFC * gUnknown_03005E04]; + u16* palette = &var0[gUnknown_03005DE8 + i]; + u16 color = *palette; + for (j = 1, palette += gUnknown_03005E04; j < gUnknown_03005DF0 - 1; j++, palette += gUnknown_03005E04) + { + if (!(0x8000 & *palette)) { - *pal = sub_80FD39C(pal); + *palette = sub_80FD568(&color, palette); + color = *palette; } } } } + +NAKED +void sub_80FD1C8(u16 arg0) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x20\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r10, r0\n\ + mov r2, sp\n\ + ldr r3, _080FD234 @ =gUnknown_083E7A50\n\ + lsls r1, r0, 1\n\ + add r1, r10\n\ + adds r0, r1, r3\n\ + ldrb r0, [r0]\n\ + strb r0, [r2]\n\ + adds r0, r3, 0x1\n\ + adds r0, r1, r0\n\ + ldrb r0, [r0]\n\ + strb r0, [r2, 0x1]\n\ + mov r5, sp\n\ + adds r0, r3, 0x2\n\ + adds r1, r0\n\ + ldrb r4, [r1]\n\ + lsls r2, r4, 24\n\ + lsrs r1, r2, 27\n\ + movs r0, 0x7\n\ + ands r1, r0\n\ + strh r1, [r5, 0x2]\n\ + lsrs r2, 25\n\ + mov r9, r2\n\ + movs r0, 0x3\n\ + ands r2, r0\n\ + mov r9, r2\n\ + movs r5, 0x1\n\ + ands r5, r4\n\ + movs r4, 0x1\n\ + mov r8, r4\n\ + cmp r8, r1\n\ + bcs _080FD27A\n\ + mov r3, sp\n\ +_080FD21A:\n\ + cmp r5, 0\n\ + bne _080FD238\n\ + mov r0, r8\n\ + lsls r2, r0, 2\n\ + mov r4, sp\n\ + adds r1, r4, r2\n\ + ldrb r0, [r3]\n\ + mov r4, r8\n\ + subs r0, r4\n\ + strb r0, [r1]\n\ + ldrb r0, [r3, 0x1]\n\ + add r0, r8\n\ + b _080FD24A\n\ + .align 2, 0\n\ +_080FD234: .4byte gUnknown_083E7A50\n\ +_080FD238:\n\ + mov r0, r8\n\ + lsls r2, r0, 2\n\ + mov r4, sp\n\ + adds r1, r4, r2\n\ + ldrb r0, [r3]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + ldrb r0, [r3, 0x1]\n\ + subs r0, 0x1\n\ +_080FD24A:\n\ + strb r0, [r1, 0x1]\n\ + add r2, sp\n\ + ldrb r0, [r2]\n\ + cmp r0, 0x3F\n\ + bhi _080FD25A\n\ + ldrb r0, [r2, 0x1]\n\ + cmp r0, 0x3F\n\ + bls _080FD262\n\ +_080FD25A:\n\ + mov r0, r8\n\ + subs r0, 0x1\n\ + strh r0, [r3, 0x2]\n\ + b _080FD27A\n\ +_080FD262:\n\ + ldrh r0, [r3, 0x2]\n\ + mov r1, r8\n\ + subs r0, r1\n\ + strh r0, [r2, 0x2]\n\ + mov r0, r8\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + ldrh r0, [r3, 0x2]\n\ + cmp r8, r0\n\ + bcc _080FD21A\n\ +_080FD27A:\n\ + movs r2, 0\n\ + mov r8, r2\n\ + mov r0, sp\n\ + ldrh r0, [r0, 0x2]\n\ + cmp r8, r0\n\ + bcc _080FD288\n\ + b _080FD38A\n\ +_080FD288:\n\ + movs r3, 0x1F\n\ +_080FD28A:\n\ + ldr r1, _080FD2E8 @ =gUnknown_03005DEC\n\ + mov r4, r8\n\ + lsls r0, r4, 2\n\ + mov r2, sp\n\ + adds r6, r2, r0\n\ + ldrb r0, [r6, 0x1]\n\ + lsls r0, 7\n\ + ldr r1, [r1]\n\ + adds r1, r0\n\ + ldrb r0, [r6]\n\ + lsls r0, 1\n\ + adds r2, r1, r0\n\ + ldrh r1, [r2]\n\ + movs r4, 0x80\n\ + lsls r4, 8\n\ + adds r0, r4, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080FD376\n\ + movs r7, 0x1F\n\ + ands r7, r1\n\ + lsls r0, r1, 16\n\ + lsrs r5, r0, 21\n\ + ands r5, r3\n\ + lsrs r4, r0, 26\n\ + ands r4, r3\n\ + mov r0, r9\n\ + cmp r0, 0\n\ + blt _080FD36C\n\ + cmp r0, 0x1\n\ + ble _080FD2EC\n\ + cmp r0, 0x3\n\ + bgt _080FD36C\n\ + ldrh r0, [r6, 0x2]\n\ + adds r1, r7, r0\n\ + lsls r1, 16\n\ + lsrs r7, r1, 16\n\ + adds r1, r5, r0\n\ + lsls r1, 16\n\ + lsrs r5, r1, 16\n\ + adds r0, r4, r0\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + cmp r7, 0x1F\n\ + bls _080FD360\n\ + movs r7, 0x1F\n\ + b _080FD360\n\ + .align 2, 0\n\ +_080FD2E8: .4byte gUnknown_03005DEC\n\ +_080FD2EC:\n\ + mov r1, r10\n\ + lsls r0, r1, 1\n\ + add r0, r10\n\ + ldr r1, _080FD320 @ =gUnknown_083E7A50\n\ + adds r1, 0x2\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + lsrs r0, 3\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ + movs r1, 0x3\n\ + str r2, [sp, 0x18]\n\ + str r3, [sp, 0x1C]\n\ + bl __umodsi3\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldr r2, [sp, 0x18]\n\ + ldr r3, [sp, 0x1C]\n\ + cmp r0, 0x1\n\ + beq _080FD33C\n\ + cmp r0, 0x1\n\ + bgt _080FD324\n\ + cmp r0, 0\n\ + beq _080FD32A\n\ + b _080FD36C\n\ + .align 2, 0\n\ +_080FD320: .4byte gUnknown_083E7A50\n\ +_080FD324:\n\ + cmp r0, 0x2\n\ + beq _080FD34E\n\ + b _080FD36C\n\ +_080FD32A:\n\ + ldrh r0, [r6, 0x2]\n\ + cmp r7, r0\n\ + bcc _080FD338\n\ + subs r0, r7, r0\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + b _080FD36C\n\ +_080FD338:\n\ + movs r7, 0\n\ + b _080FD36C\n\ +_080FD33C:\n\ + ldrh r0, [r6, 0x2]\n\ + cmp r5, r0\n\ + bcc _080FD34A\n\ + subs r0, r5, r0\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + b _080FD36C\n\ +_080FD34A:\n\ + movs r5, 0\n\ + b _080FD36C\n\ +_080FD34E:\n\ + ldrh r0, [r6, 0x2]\n\ + cmp r4, r0\n\ + bcc _080FD35C\n\ + subs r0, r4, r0\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + b _080FD36C\n\ +_080FD35C:\n\ + movs r4, 0\n\ + b _080FD36C\n\ +_080FD360:\n\ + cmp r5, 0x1F\n\ + bls _080FD366\n\ + movs r5, 0x1F\n\ +_080FD366:\n\ + cmp r4, 0x1F\n\ + bls _080FD36C\n\ + movs r4, 0x1F\n\ +_080FD36C:\n\ + lsls r0, r4, 10\n\ + lsls r1, r5, 5\n\ + orrs r0, r1\n\ + orrs r7, r0\n\ + strh r7, [r2]\n\ +_080FD376:\n\ + mov r0, r8\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + mov r0, sp\n\ + ldrh r0, [r0, 0x2]\n\ + cmp r8, r0\n\ + bcs _080FD38A\n\ + b _080FD28A\n\ +_080FD38A:\n\ + add sp, 0x20\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} + +u16 ConvertColorToGrayscale(u16 *color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + u16 average = (red + green + blue) / 3; + return RGB2(average, average, average); +} + +// The dark colors are the colored edges of the Cool painting effect. +// Everything else is white. +u16 ConvertCoolColor(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 GetCoolColorFromPersonality(personality); + else + return RGB2(31, 31, 31); +} + +// Based on the given value, which comes from the first 8 bits of +// the mon's personality value, return a color. +u16 GetCoolColorFromPersonality(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); +} + +u16 ConvertToBlackOrWhite(u16 *color) +{ + u16 red = *color & 0x1F; + u16 green = (*color >> 5) & 0x1F; + u16 blue = (*color >> 10) & 0x1F; + if (red < 17 && green < 17 && blue < 17) + return RGB2(0, 0, 0); + else + return RGB2(31, 31, 31); +} + +u16 sub_80FD50C(u16 *colorA, u16 *colorB) +{ + if (*colorA) + { + if (*colorA & 0x8000) + return 0x8000; + if (*colorB & 0x8000) + return RGB2(0, 0, 0); + + return *colorA; + } + + return RGB2(0, 0, 0); +} + +u16 InvertColor(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); +} |